pax_global_header00006660000000000000000000000064146520551270014521gustar00rootroot0000000000000052 comment=88da59fa3fe9e0d4e3b3f8ecc800235d00d3543c .travis.yml000066400000000000000000000004141465205512700131750ustar00rootroot00000000000000dist: focal sudo: required before_install: - sudo apt-get update -q - sudo apt-get install build-essential autoconf automake libtool libjson-c-dev flex bison dkms libglib2.0-dev libfdt-dev libbsd-dev language: c script: - autoreconf -ivf; ./configure; make Makefile.am000066400000000000000000000205731465205512700131300ustar00rootroot00000000000000# # Copyright (C) 2010-2024 Canonical, Ltd. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # MAINTAINERCLEANFILES = \ $(GITIGNORE_MAINTAINERCLEANFILES_TOPLEVEL) \ $(GITIGNORE_MAINTAINERCLEANFILES_MAKEFILE_IN) \ $(GITIGNORE_MAINTAINERCLEANFILES_M4_GETTEXT) \ $(GITIGNORE_MAINTAINERCLEANFILES_M4_LIBTOOL) # results.log: created by `src/fwts` when executed with no `-r` option. MOSTLYCLEANFILES = \ results.log GITIGNOREFILES = \ debian/*.debhelper \ debian/*.debhelper.log \ debian/*.substvars \ `cat debian/control |$(GREP) ^Package|$(AWK) '{print "debian/" $$2}'` \ debian/autoreconf.after \ debian/autoreconf.before \ debian/files \ debian/tmp \ fedora/fwts.spec \ fedora/rpm SUBDIRS = src data src/utilities scripts/bash-completion ACLOCAL_AMFLAGS = -I m4 TESTS_ENVIRONMENT = export LC_ALL=C; TESTS_ENVIRONMENT += export FWTS='$(srcdir)/src/fwts'; TESTS_ENVIRONMENT += export FWTSTESTDIR='$(srcdir)/fwts-test'; TESTS_ENVIRONMENT += export TMP=/tmp; TESTS_ENVIRONMENT += export FAILURE_LOG=/tmp/failure.log; TESTS = fwts-test/acpidump-0001/test-0001.sh \ fwts-test/acpitables-0001/test-0001.sh \ fwts-test/aest-0001/test-0001.sh \ fwts-test/aest-0001/test-0002.sh \ fwts-test/apicinstance-0001/test-0001.sh \ fwts-test/apicinstance-0001/test-0002.sh \ fwts-test/arg-help-0001/test-0001.sh \ fwts-test/arg-help-0001/test-0002.sh \ fwts-test/arg-json-0001/test-0001.sh \ fwts-test/arg-json-0001/test-0002.sh \ fwts-test/arg-json-0001/test-0003.sh \ fwts-test/arg-json-0001/test-0004.sh \ fwts-test/arg-klog-0001/test-0001.sh \ fwts-test/arg-klog-0001/test-0002.sh \ fwts-test/arg-log-fields-0001/test-0001.sh \ fwts-test/arg-log-format-0001/test-0001.sh \ fwts-test/arg-log-format-0001/test-0002.sh \ fwts-test/arg-log-format-0001/test-0003.sh \ fwts-test/arg-log-format-0001/test-0004.sh \ fwts-test/arg-quiet-0001/test-0001.sh \ fwts-test/arg-quiet-0001/test-0002.sh \ fwts-test/arg-results-0001/test-0001.sh \ fwts-test/arg-results-0001/test-0002.sh \ fwts-test/arg-results-0001/test-0003.sh \ fwts-test/arg-results-0001/test-0004.sh \ fwts-test/arg-results-0001/test-0005.sh \ fwts-test/arg-results-0001/test-0006.sh \ fwts-test/arg-results-no-separators-0001/test-0001.sh \ fwts-test/arg-show-progress-dialog-0001/test-0001.sh \ fwts-test/arg-show-progress-dialog-0001/test-0002.sh \ fwts-test/arg-table-path-0001/test-0001.sh \ fwts-test/arg-table-path-0001/test-0002.sh \ fwts-test/arg-width-0001/test-0001.sh \ fwts-test/arg-width-0001/test-0002.sh \ fwts-test/arg-width-0001/test-0003.sh \ fwts-test/arg-width-0001/test-0004.sh \ fwts-test/arg-width-0001/test-0005.sh \ fwts-test/arg-width-0001/test-0006.sh \ fwts-test/arg-width-0001/test-0007.sh \ fwts-test/arg-width-0001/test-0008.sh \ fwts-test/asf-0001/test-0001.sh \ fwts-test/asf-0001/test-0002.sh \ fwts-test/aspt-0001/test-0001.sh \ fwts-test/aspt-0001/test-0002.sh \ fwts-test/bert-0001/test-0001.sh \ fwts-test/bert-0001/test-0002.sh \ fwts-test/bgrt-0001/test-0001.sh \ fwts-test/bgrt-0001/test-0002.sh \ fwts-test/boot-0001/test-0001.sh \ fwts-test/boot-0001/test-0002.sh \ fwts-test/ccel-0001/test-0001.sh \ fwts-test/ccel-0001/test-0002.sh \ fwts-test/cedt-0001/test-0001.sh \ fwts-test/cedt-0001/test-0002.sh \ fwts-test/checksum-0001/test-0001.sh \ fwts-test/checksum-0001/test-0003.sh \ fwts-test/checksum-0001/test-0004.sh \ fwts-test/cpep-0001/test-0001.sh \ fwts-test/cpep-0001/test-0002.sh \ fwts-test/csrt-0001/test-0001.sh \ fwts-test/csrt-0001/test-0002.sh \ fwts-test/dbg2-0001/test-0001.sh \ fwts-test/dbg2-0001/test-0002.sh \ fwts-test/dbgp-0001/test-0001.sh \ fwts-test/dbgp-0001/test-0002.sh \ fwts-test/disassemble-0001/test-0001.sh \ fwts-test/drtm-0001/test-0001.sh \ fwts-test/drtm-0001/test-0002.sh \ fwts-test/erst-0001/test-0001.sh \ fwts-test/erst-0001/test-0002.sh \ fwts-test/facs-0001/test-0001.sh \ fwts-test/facs-0001/test-0002.sh \ fwts-test/fpdt-0001/test-0001.sh \ fwts-test/fpdt-0001/test-0002.sh \ fwts-test/hest-0001/test-0001.sh \ fwts-test/hest-0001/test-0002.sh \ fwts-test/hmat-0001/test-0001.sh \ fwts-test/hmat-0001/test-0002.sh \ fwts-test/ibft-0001/test-0001.sh \ fwts-test/ibft-0001/test-0002.sh \ fwts-test/iort-0001/test-0001.sh \ fwts-test/iort-0001/test-0002.sh \ fwts-test/ivrs-0001/test-0001.sh \ fwts-test/ivrs-0001/test-0002.sh \ fwts-test/klog-0001/test-0001.sh \ fwts-test/klog-0001/test-0002.sh \ fwts-test/klog-0001/test-0003.sh \ fwts-test/klog-0002/test-0001.sh \ fwts-test/klog-0002/test-0002.sh \ fwts-test/klog-0002/test-0003.sh \ fwts-test/lpit-0001/test-0001.sh \ fwts-test/lpit-0001/test-0002.sh \ fwts-test/madt-0001/test-0001.sh \ fwts-test/madt-0001/test-0002.sh \ fwts-test/mchi-0001/test-0001.sh \ fwts-test/mchi-0001/test-0002.sh \ fwts-test/misc-0001/test-0001.sh \ fwts-test/misc-0001/test-0002.sh \ fwts-test/mpam-0001/test-0001.sh \ fwts-test/mpam-0001/test-0002.sh \ fwts-test/mpst-0001/test-0001.sh \ fwts-test/mpst-0001/test-0002.sh \ fwts-test/msdm-0001/test-0001.sh \ fwts-test/msdm-0001/test-0002.sh \ fwts-test/method-0001/test-0001.sh \ fwts-test/nfit-0001/test-0001.sh \ fwts-test/nfit-0001/test-0002.sh \ fwts-test/oops-0001/test-0001.sh \ fwts-test/oops-0001/test-0002.sh \ fwts-test/oops-0001/test-0003.sh \ fwts-test/osilinux-0001/test-0001.sh \ fwts-test/osilinux-0001/test-0002.sh \ fwts-test/pcct-0001/test-0001.sh \ fwts-test/pcct-0001/test-0002.sh \ fwts-test/pdtt-0001/test-0001.sh \ fwts-test/pdtt-0001/test-0002.sh \ fwts-test/phat-0001/test-0001.sh \ fwts-test/phat-0001/test-0002.sh \ fwts-test/phat-0001/test-0003.sh \ fwts-test/pmtt-0001/test-0001.sh \ fwts-test/pmtt-0001/test-0002.sh \ fwts-test/pptt-0001/test-0001.sh \ fwts-test/pptt-0001/test-0002.sh \ fwts-test/ras2-0001/test-0001.sh \ fwts-test/ras2-0001/test-0002.sh \ fwts-test/rasf-0001/test-0001.sh \ fwts-test/rasf-0001/test-0002.sh \ fwts-test/rgrt-0001/test-0001.sh \ fwts-test/rgrt-0001/test-0002.sh \ fwts-test/rsdp-0001/test-0001.sh \ fwts-test/rsdt-0001/test-0001.sh \ fwts-test/s0idle-0001/test-0001.sh \ fwts-test/s0idle-0001/test-0002.sh \ fwts-test/s3pt-0001/test-0001.sh \ fwts-test/s3pt-0001/test-0002.sh \ fwts-test/sbst-0001/test-0001.sh \ fwts-test/sbst-0001/test-0002.sh \ fwts-test/sdei-0001/test-0001.sh \ fwts-test/sdei-0001/test-0002.sh \ fwts-test/sdev-0001/test-0001.sh \ fwts-test/sdev-0001/test-0002.sh \ fwts-test/skvl-0001/test-0001.sh \ fwts-test/skvl-0001/test-0002.sh \ fwts-test/slic-0001/test-0001.sh \ fwts-test/slic-0001/test-0002.sh \ fwts-test/slit-0001/test-0001.sh \ fwts-test/slit-0001/test-0002.sh \ fwts-test/spcr-0001/test-0001.sh \ fwts-test/spcr-0001/test-0002.sh \ fwts-test/srat-0001/test-0001.sh \ fwts-test/srat-0001/test-0002.sh \ fwts-test/stao-0001/test-0001.sh \ fwts-test/stao-0001/test-0002.sh \ fwts-test/svkl-0001/test-0001.sh \ fwts-test/svkl-0001/test-0002.sh \ fwts-test/syntaxcheck-0001/test-0001.sh \ fwts-test/tcpa-0001/test-0001.sh \ fwts-test/tcpa-0001/test-0002.sh \ fwts-test/tpm2-0001/test-0001.sh \ fwts-test/tpm2-0001/test-0002.sh \ fwts-test/uefi-0001/test-0001.sh \ fwts-test/uefi-0001/test-0002.sh \ fwts-test/viot-0001/test-0001.sh \ fwts-test/viot-0001/test-0002.sh \ fwts-test/waet-0001/test-0001.sh \ fwts-test/waet-0001/test-0002.sh \ fwts-test/waet-0001/test-0003.sh \ fwts-test/wdat-0001/test-0001.sh \ fwts-test/wdat-0001/test-0002.sh \ fwts-test/wmi-0001/test-0001.sh \ fwts-test/wpbt-0001/test-0001.sh \ fwts-test/wpbt-0001/test-0002.sh \ fwts-test/wsmt-0001/test-0001.sh \ fwts-test/wsmt-0001/test-0002.sh \ fwts-test/wmi-0001/test-0002.sh \ fwts-test/wmi-0001/test-0003.sh \ fwts-test/xenv-0001/test-0001.sh \ fwts-test/xenv-0001/test-0002.sh \ fwts-test/xsdt-0001/test-0001.sh -include $(top_srcdir)/git.mk README000066400000000000000000000260021465205512700117450ustar00rootroot00000000000000README for the FirmWare Test Suite (fwts) ========================================= Quick Start Guide ================= 1) Dependencies: Ubuntu Distro x86_64 autoconf automake libglib2.0-dev libtool libpcre3-dev flex bison dkms libfdt-dev libbsd-dev Ubuntu Distro ppc64el autoconf automake libglib2.0-dev libtool libpcre3-dev flex bison dkms libfdt-dev device-tree-compiler libpci-dev libbsd-dev RHEL Distro ppc64el autoconf automake kernel-devel libtool flex flex-devel bison dkms libfdt libfdt-devel dtc pcre-devel pcre2 pcre2-devel pcre2-utf16 pcre2-utf32 glib2 glib2-devel pciutils pciutils-devel zlib-devel make libbsd-devel Ubuntu Distro ARM64 autoconf automake libglib2.0-dev libtool libpcre3-dev flex bison dkms libfdt-dev libbsd-dev 2) Kernel configuration Some tests depend on special Linux kernel configuration settings. These include: * CONFIG_CGROUP_FREEZER=y * CONFIG_DMI_SYSFS=y * CONFIG_EFI_TEST=m 3) To build and install (only if building from source) autoreconf -ivf ./configure make sudo make install To get help: fwts --help To run all the default tests, use: sudo fwts ..this will dump the results into results.log To see the available tests, use: fwts --show-tests Advanced Options Guide ====================== Running Specific Tests ---------------------- Run specific tests, e.g. check syntax of DSDT: sudo fwts syntaxcheck You can run multiple tests too: sudo fwts syntaxcheck fan battery To see all the available tests: sudo fwts --show-tests-full Changing the output ------------------- To dump the results to another file: sudo fwts --results-output=myresults.log or the short form: sudo fwts -r myresults.log or to stderr or stdout and redirect: sudo fwts -r stderr sudo fwts -r stdout > mylog.log or a shorter form for stdout: sudo fwts - > mylog.log If the output is written to stdout, the width of the log is based on the width of the tty. The default width when writing to a log file may be changed to N characters wide using -w N or --log-width=N, e.g. sudo fwts --log-width=90 - > mylog.log The log has various columns that can be enabled, here is an example: 00012 13/12/12 12:55:04 wakealarm Test ACPI Wakealarm. 00013 13/12/12 12:55:04 wakealarm ------------------------------------------------------------- 00014 13/12/12 12:55:04 wakealarm Test 1 of 4: Check existence of /sys/class/rtc/rtc0 00015 13/12/12 12:55:04 wakealarm /wakealarm. 00016 13/12/12 12:55:04 wakealarm PASSED: Test 1, /sys/class/rtc/rtc0/wakealarm found. 00017 13/12/12 12:55:04 wakealarm 00018 13/12/12 12:55:04 wakealarm Test 2 of 4: Trigger wakealarm for 1 seconds in the future. 00019 13/12/12 12:55:04 wakealarm Trigger wakealarm for 1 seconds in the future. 00020 13/12/12 12:55:04 wakealarm PASSED: Test 2, RTC wakealarm was triggered successfully. 00021 13/12/12 12:55:04 wakealarm 00022 13/12/12 12:55:04 wakealarm Test 3 of 4: Check if wakealarm is fired. 00023 13/12/12 12:55:07 wakealarm PASSED: Test 3, RTC wakealarm triggered and fired 00024 13/12/12 12:55:07 wakealarm successfully. 00025 13/12/12 12:55:07 wakealarm 00026 13/12/12 12:55:07 wakealarm Test 4 of 4: Multiple wakealarm firing tests. 00027 13/12/12 12:55:07 wakealarm Trigger wakealarm for 1 seconds in the future. 00028 13/12/12 12:55:09 wakealarm Trigger wakealarm for 2 seconds in the future. 00029 13/12/12 12:55:12 wakealarm Trigger wakealarm for 3 seconds in the future. 00030 13/12/12 12:55:16 wakealarm Trigger wakealarm for 4 seconds in the future. 00031 13/12/12 12:55:21 wakealarm PASSED: Test 4, RTC wakealarm triggered and fired 00032 13/12/12 12:55:21 wakealarm successfully. 00033 13/12/12 12:55:21 wakealarm 00034 13/12/12 12:55:21 wakealarm ============================================================= 00035 13/12/12 12:55:21 wakealarm 4 passed, 0 failed, 0 warnings, 0 aborted, 0 skipped, 0 info 00036 13/12/12 12:55:21 wakealarm only. 00037 13/12/12 12:55:21 wakealarm ============================================================ ^ ^ ^ ^ | | | | | | | +--- %owner (name of test that ran) | | | | | +--- %time | | | +--- %date | +--- %line (line number) Also, there is an optional %field that indicates the type of message being logged: sudo fwts wakealarm --log-format="%line %date %time %field %owner" ..this generates results.log containing: 00013 13/12/12 12:53:11 HED wakealarm Test ACPI Wakealarm. 00014 13/12/12 12:53:11 SEP wakealarm --------------------------------------------------------- 00015 13/12/12 12:53:11 INF wakealarm Test 1 of 4: Check existence of /sys/class/rtc/rtc0 00016 13/12/12 12:53:11 INF wakealarm /wakealarm. 00017 13/12/12 12:53:11 PAS wakealarm PASSED: Test 1, /sys/class/rtc/rtc0/wakealarm found. 00018 13/12/12 12:53:11 NLN wakealarm 00019 13/12/12 12:53:11 INF wakealarm Test 2 of 4: Trigger wakealarm for 1 seconds in the 00020 13/12/12 12:53:11 INF wakealarm future. 00021 13/12/12 12:53:11 INF wakealarm Trigger wakealarm for 1 seconds in the future. 00022 13/12/12 12:53:11 PAS wakealarm PASSED: Test 2, RTC wakealarm was triggered successfully. 00023 13/12/12 12:53:11 NLN wakealarm 00024 13/12/12 12:53:11 INF wakealarm Test 3 of 4: Check if wakealarm is fired. 00025 13/12/12 12:53:14 PAS wakealarm PASSED: Test 3, RTC wakealarm triggered and fired 00026 13/12/12 12:53:14 PAS wakealarm successfully. 00027 13/12/12 12:53:14 NLN wakealarm 00028 13/12/12 12:53:14 INF wakealarm Test 4 of 4: Multiple wakealarm firing tests. 00029 13/12/12 12:53:14 INF wakealarm Trigger wakealarm for 1 seconds in the future. 00030 13/12/12 12:53:16 INF wakealarm Trigger wakealarm for 2 seconds in the future. 00031 13/12/12 12:53:19 INF wakealarm Trigger wakealarm for 3 seconds in the future. 00032 13/12/12 12:53:23 INF wakealarm Trigger wakealarm for 4 seconds in the future. 00033 13/12/12 12:53:28 PAS wakealarm PASSED: Test 4, RTC wakealarm triggered and fired 00034 13/12/12 12:53:28 PAS wakealarm successfully. 00035 13/12/12 12:53:28 NLN wakealarm 00036 13/12/12 12:53:28 SEP wakealarm ========================================================= 00037 13/12/12 12:53:28 SUM wakealarm 4 passed, 0 failed, 0 warnings, 0 aborted, 0 skipped, 0 00038 13/12/12 12:53:28 SUM wakealarm info only. 00039 13/12/12 12:53:28 SEP wakealarm ========================================================= ^ | +-----------------------+ | RES = result (PASSED or FAILED) ERR = error (something fatal happened!) WRN = warning (not a critical failure, but may need looking at) DBG = debug output (deprecated) INF = information fields SUM = summary NLN = new line (empty field) ADV = advice information HED = heading TAG = tag information SEP = separator (just pretty printing) PAS = Test Passed FAL = Test Failed SKP = Test Skipped ABT = Test Aborted INO = Information only use: fwts --log-fields to show all available fields One can filter on these fields using --log-filter, e.g. sudo fwts --log-filter=RES,SUM .. just collect results and summary of tests sudo fwts --log-filter=ALL,~SEP .. all fields except the separators One can also re-arrange or modify the log format using --log-format, e.g. sudo fwts --log-format="%line %field %time: " mtrr - this produces: 00011 SEP 12:13:07: -------------------------------------------------------------------------------- 00012 INF 12:13:07: MTRR overview 00013 INF 12:13:07: ------------- 00014 INF 12:13:07: Reg 0: 0x00000000ffc00000 - 0x0000000100000000 ( 4 MB) Write-Protect 00015 INF 12:13:07: Reg 1: 0x0000000000000000 - 0x0000000080000000 ( 2048 MB) Write-Back 00016 INF 12:13:07: Reg 2: 0x0000000080000000 - 0x00000000c0000000 ( 1024 MB) Write-Back 00017 INF 12:13:07: Reg 3: 0x00000000c0000000 - 0x00000000e0000000 ( 512 MB) Write-Back 00018 INF 12:13:07: Reg 4: 0x00000000dc000000 - 0x00000000e0000000 ( 64 MB) Uncached 00019 INF 12:13:07: Reg 5: 0x00000000db000000 - 0x00000000dc000000 ( 16 MB) Uncached 00020 INF 12:13:07: Reg 6: 0x0000000100000000 - 0x0000000180000000 ( 2048 MB) Write-Back 00021 INF 12:13:07: Reg 7: 0x0000000180000000 - 0x00000001a0000000 ( 512 MB) Write-Back 00022 INF 12:13:07: Reg 8: 0x000000019f000000 - 0x00000001a0000000 ( 16 MB) Uncached 00023 INF 12:13:07: Reg 9: 0x000000019e800000 - 0x000000019f000000 ( 8 MB) Uncached 00024 NLN 12:13:07: 00025 INF 12:13:07: Test 1 of 3: Validate the kernel MTRR IOMEM setup. 00026 PAS 12:13:07: PASSED: Test 1, Memory ranges seem to have correct attributes. 00027 NLN 12:13:07: 00028 INF 12:13:07: Test 2 of 3: Validate the MTRR setup across all processors. 00029 PAS 12:13:07: PASSED: Test 2, All processors have the a consistent MTRR setup. 00030 NLN 12:13:07: 00031 INF 12:13:07: Test 3 of 3: Check for AMD MtrrFixDramModEn being cleared by the BIOS. 00032 SKP 12:13:07: SKIPPED: Test 3, CPU is not an AMD, cannot test. 00033 NLN 12:13:07: 00034 SEP 12:13:07: ================================================================================ 00035 SUM 12:13:07: 2 passed, 0 failed, 0 warnings, 0 aborted, 1 skipped, 0 info only. 00036 SEP 12:13:07: ================================================================================ Available fields are: %line - log line number %time - current time %date - current date %owner - name of the test program (the owner of the the current test) %field - the 3 letter record identifier field (e.g. SEP, RES, etc..) Test Progress Feedback ====================== Use the --show-progress to dump out the test progress to stderr. Output is as follows: Test: Test ACPI Wakealarm. Check existence of /sys/class/rtc/rtc0/wakealarm. 1 passed Trigger wakealarm for 1 seconds in the future. 1 passed Check if wakealarm is fired. 1 passed Multiple wakealarm firing tests. 1 passed PASSED or FAILED? ================= The --stdout-summary flag outputs to stdout PASSED or FAILED if test(s) passed or failed. It's essentially for one-shot test modes where you want to run one test and see if it passed or failed without having to look at the results log, e.g. sudo fwts mtrr --stdout-summary The exit code returns 1 for test failure and 0 for test success, so the test suite can be run from a shell script and one can detect if the test worked or not, e.g. #!/bin/bash LOG=stdout sudo fwts dmi_decode --results-output=$LOG failed=$? Resources ========= fwts git repository: https://github.com/fwts/fwts https://code.launchpad.net/~firmware-testing-team/fwts/+git/fwts fwts reference guide: https://wiki.ubuntu.com/FirmwareTestSuite/Reference fwts LiveCD: http://fwts.ubuntu.com/fwts-live/ fwts-devel mailing list: fwts-devel@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/fwts-devel README_ACPICA.txt000066400000000000000000000105201465205512700135610ustar00rootroot00000000000000The following files have been copied from the ACPICA source tree from git repository: git://github.com/acpica/acpica.git In compliance with the license, these files are listed below and the Intel copyright message has been included in fwts. No file has been modified at all. src/acpica/source/common: adfile.c adisasm.c adwalk.c ahpredef.c dmextern.c dmrestag.c dmtable.c dmtbdump.c dmtbinfo.c src/acpica/source/components: debugger disassembler dispatcher events executer hardware namespace parser resources tables utilities src/acpica/source/components/debugger: dbcmds.c dbdisply.c dbexec.c dbfileio.c dbhistry.c dbinput.c dbmethod.c dbnames.c dbstats.c dbutils.c dbxface.c src/acpica/source/components/disassembler: dmbuffer.c dmnames.c dmobject.c dmopcode.c dmresrc.c dmresrcl2.c dmresrcl.c dmresrcs.c dmutils.c dmwalk.c src/acpica/source/components/dispatcher: dsargs.c dscontrol.c dsfield.c dsinit.c dsmethod.c dsmthdat.c dsobject.c dsopcode.c dsutils.c dswexec.c dswload2.c dswload.c dswscope.c dswstate.c src/acpica/source/components/events: evevent.c evglock.c evgpeblk.c evgpe.c evgpeinit.c evgpeutil.c evmisc.c evregion.c evrgnini.c evsci.c evxface.c evxfevnt.c evxfgpe.c evxfregn.c src/acpica/source/components/executer: exconfig.c exconvrt.c excreate.c exdebug.c exdump.c exfield.c exfldio.c exmisc.c exmutex.c exnames.c exoparg1.c exoparg2.c exoparg3.c exoparg6.c exprep.c exregion.c exresnte.c exresolv.c exresop.c exstore.c exstoren.c exstorob.c exsystem.c exutils.c src/acpica/source/components/hardware: hwacpi.c hwesleep.c hwgpe.c hwpci.c hwregs.c hwsleep.c hwvalid.c hwxface.c hwxfsleep.c src/acpica/source/components/namespace: nsaccess.c nsalloc.c nsdump.c nsdumpdv.c nseval.c nsinit.c nsload.c nsnames.c nsobject.c nsparse.c nspredef.c nsrepair2.c nsrepair.c nssearch.c nsutils.c nswalk.c nsxfeval.c nsxfname.c nsxfobj.c src/acpica/source/components/parser: psargs.c psloop.c psopcode.c psparse.c psscope.c pstree.c psutils.c pswalk.c psxface.c src/acpica/source/components/resources: rsaddr.c rscalc.c rscreate.c rsdump.c rsinfo.c rsio.c rsirq.c rslist.c rsmemory.c rsmisc.c rsserial.c rsutils.c rsxface.c src/acpica/source/components/tables: tbfadt.c tbfind.c tbinstal.c tbutils.c tbxface.c tbxfroot.c tbxfload.c src/acpica/source/components/utilities: utaddress.c utalloc.c utcache.c utcopy.c utdebug.c utdecode.c utdelete.c uteval.c utexcep.c utglobal.c utids.c utinit.c utlock.c utmath.c utmisc.c utmutex.c utobject.c utosi.c utresrc.c utstate.c uttrack.c utxface.c utxferror.c src/acpica/source/include: acapps.h accommon.h acconfig.h acdebug.h acdisasm.h acdispat.h acevents.h acexcep.h acglobal.h achware.h acinterp.h aclocal.h acmacros.h acnames.h acnamesp.h acobject.h acopcode.h acoutput.h acparser.h acpi.h acpiosxf.h acpixf.h acpredef.h acresrc.h acrestyp.h acstruct.h actables.h actbl1.h actbl2.h actbl3.h actbl.h actypes.h acutils.h amlcode.h amlresrc.h src/acpica/source/platform: acenv.h acgcc.h aclinux.h src/acpica/source/os_specific/service_layers: osunixxf.c src/acpica/source/tools/acpiexec: aehandlers.c aecommon.h src/acpica/source/compiler: aslanalyze.c aslbtypes.c aslcodegen.c aslcompile.c aslcompiler.h aslcompiler.l aslcompiler.y asldefine.h aslerror.c aslfiles.c aslfold.c aslglobal.h asllength.c asllisting.c aslload.c asllookup.c aslmain.c aslmap.c aslmessages.h aslopcodes.c asloperands.c aslopt.c aslpredef.c aslresource.c aslrestype1.c aslrestype1i.c aslrestype2.c aslrestype2d.c aslrestype2e.c aslrestype2q.c aslrestype2s.c aslrestype2w.c aslstartup.c aslstubs.c aslsupport.l asltransform.c asltree.c asltypes.h aslutils.c asluuid.c aslwalks.c dtcompile.c dtcompiler.h dtexpress.c dtfield.c dtio.c dtparser.l dtparser.y dtsubtable.c dttable.c dttemplate.c dttemplate.h dtutils.c fwts_iasl_interface.c fwts_iasl_interface.h preprocess.h prexpress.c prmacros.c prparser.l prparser.y prscan.c prutils.c README_SOURCE.txt000066400000000000000000000141721465205512700136500ustar00rootroot00000000000000== FWTS Source Structure == FWTS comprises of a core fwts library, two special builds of the ACPICA source and the fwts tests themselves. == Core FWTS library libfwts.so == The core fwts library, libfwts.so, contains the fwts test framework to drive fwts tests and a support library that provides the tests with commonly used functionality, such as list handling, log scanning, port I/O, ACPI table handling, etc. Source: fwts/src/lib/src fwts/src/lib/include Conventions: All fwts core library functions should start with fwts_ prefix C source that provides an API should have a corresponding header in fwts/src/lib/include We include all exported headers in fwts/src/lib/include/fwts.h Declare variables and functions as static if they are not to be exported NULL returns indicates an error FWTS_OK indicates success FWTS_ERROR indicates generic failure -ve returns indicate error All structs should be typedef'd NO typedef'ing of void * please! Where possible use uint64_t, uint32_t, uint16_t, uint8_t ALWAYS assume system calls fail and check returns NO clever macros that used obfuscated tricks Kernel Style (K&R). Avoid spaces and tabs at end of line. Must compile with -Wall -Werror Avoid warnings, exception is the ACPICA core since we don't modify this Test with valgrind to check for memory leaks. No smart tricks. Comments are not optional! == ACPICA libraries == The ACPICA source is built in two modes for fwts, one for the run-time execution of AML (acpiexec mode) and one for the assembly/dis-assembly of AML (compile mode). This makes life a bit complex since both modes are not compatible, so fwts builds these as differenty libraries and exports a thin shim interface that libfwts and fwts tests can use. It's quite ugly. The intention is to regularly pick up the latest ACPICA sources every release cycle and drop these into fwts. Note that we only incorporate the minimal subset of ACPICA source that is required for the execution and assembly/disassembly functionality required by fwts. === acpiexec mode === libfwtsacpica.so: fwts/src/acpica/Makefile.am Interface: fwts/src/acpica/fwts_acpica.c fwts/src/acpica/fwts_acpica.h === compiler mode === libfwtsiasl.so: fwts/src/acpica/source/compiler/Makefile.am Interface: fwts/src/acpica/source/compiler/fwts_iasl_interface.c fwts/src/acpica/source/compiler/fwts_iasl_interface.h === Notes === Whenever we update the ACPICA core we need to update README_ACPICA.txt to reflect any additional ACPIC sources we include into fwts. DO NOT modify any of the ACPICA sources - we use the original sources and should not modify them in fwts. Note that some on-the-fly source tweaking is performed to stop name clashes. == fwts tests == The fwts tests are grouped in several sub-directories depending on the type of testing: src/acpi - ACPI specific tests (methods, AML, tables, etc) src/apic - APIC tests src/bios - Tradition BIOS tests, e.g. SMBIOS, MPTables etc src/cmos - CMOS memory src/cpu - CPU specific firmware settings src/dmi - DMI tables src/example - example test template code src/hotkey - HotKey tests src/hpet - HPET src/kernel - kernel specific src/pci - PCI src/sbbr - ARM SBBR Tests src/uefi - UEFI When writing new tests use the blank sketch of a test in src/example/blank/blank.c. Test Conventions: All code must be static, no exporting of functions to other parts of fwts. If we have common code in multiple tests then refactor it into the fwts core library. DO NOT call exit() from a test. DO NOT call printf() from a test - use the fwts logging functions. Tests are registered with fwts using the FWTS_REGISTER macro: FWTS_REGISTER(const char *example, fwts_framework_ops *example_ops, priority, flags); where: example - is the name of the test, no spaces in this name as it is stringified. example_ops - fwts_framework_ops to configure test, with: .description - const char * name of the test. .init - optional function to call before running the test(s). .deinit - optional function to call after running the test(s). .minor_tests - array of fwts_framework_minor_test describing minor tests to run. .minor_tests is an array of functions + text description tuples of minor tests to run and must be NULL terminated. One can have one or more minor tests registered to run. priority ranking - when to run the test when we have many tests to run and can be: FWTS_TEST_FIRST - schedule to run as first test(s) FWTS_TEST_EARLY - schedule to run fairly soon at start FWTS_TEST_ANYTIME - medium priority FWTS_TEST_LATE - schedule to run close to the end FWTS_TEST_LAST - run at the end Tests of the same priority are will run in an order chosen at link time, but will run before tests of higher priory ranking and after tests of lower priory ranking. flags - indicates the type of test - where appropriate these can be logically OR'd together, can be: FWTS_BATCH batch test FWTS_INTERACTIVE interactive test FWTS_BATCH_EXPERIMENTAL batch experimental test FWTS_INTERACTIVE_EXPERIMENTAL batch interactive test FWTS_POWER_STATES S3/S4 test FWTS_UTILS utility FWTS_ROOT_PRIV needs root privilege to run FWTS_TEST_BIOS BIOS specific FWTS_TEST_UEFI UEFI specific FWTS_TEST_ACPI ACPI specific FWTS_TEST_ACPI_COMPLIANCE Test for ACPI spec compliance so, we can have FWTS_BATCH | FWTS_ROOT_PRIV | FWTS_ACPI for a batch test that requires root privilege and is an ACPI test. test init/deinit callbacks. These are intended to do pre and post test setup and close down, for example loading in tables, checking for resources, sanity checking capabilities. They return FWTS_OK (all OK) or FWTS_ERROR (something went wrong, abort!). minor tests. These do the specific tests, can have one or more per test harness. Must return FWTS_OK (all OK) or FWTS_ERROR (something went wrong). FWTS_ERROR does not mean a test failed, but the test could not be run because of some external factor, e.g. memory allocation failure, I/O issue, etc. assets/000077500000000000000000000000001465205512700123675ustar00rootroot00000000000000assets/fwts.svg000066400000000000000000000731621465205512700141040ustar00rootroot00000000000000 image/svg+xml FWTS auto-packager/000077500000000000000000000000001465205512700136105ustar00rootroot00000000000000auto-packager/mkpackage.README000066400000000000000000000061411465205512700164140ustar00rootroot00000000000000== FWTS Uploading == General procedure ----------------- Periodically we've put enough patches into fwts to deem it ready for a new upload. To do so, we update the changelog with a summary of the changes, update the version tag, push these, then we clone the repo, remove the .git directory and create debian source packages ready for uploading and building in the fwts PPAs. Here's how I went from Version V0.25.03 to V0.25.04 In the fwts git repo: See the current version: ./update_version.sh You need to specify the version number The last version was V0.25.03 Use git log to see what's been added since the last tagged release, e.g. git shortlog V0.25.03..HEAD | sed "s/^ / */g" collect up one-line-summary of changes, add them to debian/changelog: e.g. fwts (0.25.04) quantal; urgency=medium [Colin Ian King] * apci: acpitables: only check CMOS in BOOT table from firmware tables (LP: #1016469) * lib: fwts_acpi_tables: add ACPI table provenance * lib: fwts_acpi_tables: load tables in deterministically * lib: fwts_log: handle special logfile names * lib: log: move line counting to logging back-ends * lib: fwts_log: remove fwts_log_line_number(), no longer used * lib: fwts_framework: output all logfile names being written to * lib: fwts_log: add fwts_log_get_filenames() * lib: fwts_summary: remove references to log line number [Keng-Yu Lin] * debian: Fix up the dependency of debian packages -- Keng-Yu Lin Mon, 25 Jun 2012 16:44:51 +0800 then: git add debian/changelog git commit -s -m"debian: update changelog" Next, update the tag: ./update-version V0.25.04 git push git push --tags Next, create a directory for creating the tarball and checksum and run the mktar.sh script. Upload the generated tarball and SHA256SUMS to the desired location for the releasing. Next, create an auto-packager directory somewhere and run the mkpackage.sh script from within it. E.g mkdir /home/cking/fwts/auto-packager cp mkpackage.sh /home/cking/fwts/auto-packager cd /home/cking/fwts/auto-packager ./mkpackage.sh V0.25.04 and this will clone the git repo, remove the .git directory and create packages for uploading. For a release like Precise, it generates: V0.25.04/precise/fwts_0.25.04 V0.25.04/oneiric/fwts_0.25.04~o* V0.25.04/natty/fwts_0.25.04~n* V0.25.04/lucid/fwts_0.25.04~l* NOTE: The current release does not end with ~ suffix to the version name. This version is the one that gets periodically uploaded to universe in the current release until we get to feature freeze. And dput these into the ppa:firmware-testing-team/ppa-fwts-unstable-crack PPA Let it shake out - build + test etc. Get users to test against this. Once you are OK with it, copy the packages into ppa:firmware-testing-team/ppa-fwts-devel Every so often during the distro release cycle copy the stable current package into universe. You can either do this on every version number bump or when you deem that a new version is really stable. Once a package has been copied to universe, we then copy the packages from ppa:firmware-testing-team/ppa-fwts-devel to ppa:firmware-testing-team/ppa-fwts-stable. auto-packager/mkpackage.sh000077500000000000000000000055471465205512700161050ustar00rootroot00000000000000#!/bin/bash # # Copyright (C) 2010-2024 Canonical # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # # Get fwts sources, strip out .git directory, add in necessary debian packaging # files, build source package ready for upload. # RELEASES="bionic focal jammy noble oracular" REPO=https://github.com/fwts/fwts RELEASE_TAR_URL=http://fwts.ubuntu.com/release FWTS=fwts # # Clone the repo # get_source() { echo Getting source git clone $REPO } # # Figure out latest tagged version # get_version() { pushd $FWTS >& /dev/null git tag | tail -1 popd >& /dev/null } # # Checkout version # checkout_version() { echo "Checking out version $1" pushd $FWTS >& /dev/null git checkout -b latest $1 popd >& /dev/null } # # Remove .git repo as we don't want this in the final package # rm_git() { rm -rf $FWTS/.git } # # Remove the source # rm_source() { rm -rf $FWTS } # # Prepare the orig tarball # prepare_tarball() { mkdir $version pushd $version >& /dev/null wget -N $RELEASE_TAR_URL/fwts-$version.tar.gz wget -N $RELEASE_TAR_URL/SHA256SUMS grep "fwts-$version.tar.gz" SHA256SUMS > SHA256SUMS.local sha256sum -c SHA256SUMS.local if [ $? -ne 0 ]; then echo "Checksum unmatched. Abort" exit fi mv fwts-$version.tar.gz fwts_`echo $version|cut -b 2-`.orig.tar.gz popd >& /dev/null } # # Create source package ready for upload and build # mk_package() { rel=$1 rm -rf $version/$rel mkdir -p $version/$rel cp -r $FWTS $version/$rel cp $version/fwts_`echo $version|cut -b 2-`.orig.tar.gz $version/$rel pushd $version/$rel/$FWTS >& /dev/null deb_topline=`head -1 debian/changelog` deb_release=`echo $deb_topline | cut -f3 -d' '` if [ "x$rel;" = "x$deb_release" ]; then suffix='' else suffix="~`echo $rel | cut -c1`" fi # # Mungify changelog hack # sed "s/) $deb_release/$suffix) $rel;/" debian/changelog > debian/changelog.new mv debian/changelog.new debian/changelog echo 'y' | debuild -S rm -rf $FWTS popd >& /dev/null } # # Here we go.. # rm_source get_source if [ $# -eq 1 ]; then version=$1 else version=`get_version` fi checkout_version $version rm_git prepare_tarball for I in $RELEASES do echo Building package for release $I with version $version mk_package $I done rm_source auto-packager/mktar.sh000077500000000000000000000034731465205512700152740ustar00rootroot00000000000000#!/bin/bash # # Copyright (C) 2010-2024 Canonical # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # # Get fwts sources, strip out .git directory, add in necessary debian packaging # files, build source package ready for upload. # REPO=https://github.com/fwts/fwts FWTS=fwts # # Clone the repo # get_source() { echo "Getting source" pushd "$version" >& /dev/null git clone $REPO popd >& /dev/null } # # Checkout version # checkout_version() { echo "Checking out version" pushd "$version/$FWTS" >& /dev/null git checkout -b latest $version popd >& /dev/null } # # Remove the source # rm_source() { rm -rf "$version/$FWTS" } # # Create source package ready for upload and build # mk_tarball() { pushd "$version/$FWTS" >& /dev/null git archive --format tar -o ../fwts-$version.tar $version gzip ../fwts-$version.tar popd >& /dev/null } # # Create checksums # mk_checksums() { pushd "$version" >& /dev/null sha256sum fwts-$version.tar.gz >> SHA256SUMS popd >& /dev/null } # # Here we go.. # if [ $# -eq 1 ]; then version=$1 mkdir $version else echo "Please specify a version" exit fi rm_source get_source checkout_version mk_tarball mk_checksums rm_source configure.ac000066400000000000000000000076771465205512700133740ustar00rootroot00000000000000 AC_INIT([fwts],[0.1],[fwts-devel@lists.ubuntu.com]) AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects]) m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) AC_CANONICAL_HOST AC_CONFIG_MACRO_DIR([m4]) AC_PROG_CC AC_PROG_LEX AC_PROG_YACC AC_PROG_LIBTOOL AC_C_INLINE AM_PROG_CC_C_O AC_CHECK_FUNCS([localtime_r]) AC_CHECK_FUNCS([dup2]) AC_CHECK_FUNCS([getcwd]) AC_CHECK_FUNCS([getpagesize]) AC_CHECK_FUNCS([memset]) AC_CHECK_FUNCS([mkdir]) AC_CHECK_FUNCS([munmap]) AC_CHECK_FUNCS([select]) AC_CHECK_FUNCS([socket]) AC_CHECK_FUNCS([sqrt]) AC_CHECK_FUNCS([strchr]) AC_CHECK_FUNCS([strdup]) AC_CHECK_FUNCS([strerror]) AC_CHECK_FUNCS([strstr]) AC_CHECK_FUNCS([strtoul]) AC_CHECK_FUNCS([strtoull]) AC_CHECK_FUNCS([gettimeofday]) AC_CHECK_FUNCS([uname]) AC_CHECK_HEADERS([assert.h]) AC_CHECK_HEADERS([ctype.h]) AC_CHECK_HEADERS([errno.h]) AC_CHECK_HEADERS([fcntl.h]) AC_CHECK_HEADERS([getopt.h]) AC_CHECK_HEADERS([limits.h]) AC_CHECK_HEADERS([linux/input.h]) AC_CHECK_HEADERS([math.h]) AC_CHECK_HEADERS([paths.h]) AC_CHECK_HEADERS([pcre.h]) AC_CHECK_HEADERS([sched.h]) AC_CHECK_HEADERS([signal.h]) AC_CHECK_HEADERS([stdarg.h]) AC_CHECK_HEADERS([stdint.h]) AC_CHECK_HEADERS([stdio.h]) AC_CHECK_HEADERS([stdlib.h]) AC_CHECK_HEADERS([string.h]) AC_CHECK_HEADERS([bsd/string.h]) AC_CHECK_HEADERS([sys/io.h]) AC_CHECK_HEADERS([sys/klog.h]) AC_CHECK_HEADERS([sys/mman.h]) AC_CHECK_HEADERS([sys/param.h]) AC_CHECK_HEADERS([sys/select.h]) AC_CHECK_HEADERS([sys/socket.h]) AC_CHECK_HEADERS([sys/stat.h]) AC_CHECK_HEADERS([sys/type.h]) AC_CHECK_HEADERS([sys/un.h]) AC_CHECK_HEADERS([sys/wait.h]) AC_CHECK_HEADERS([termios.h]) AC_CHECK_HEADERS([time.h]) AC_CHECK_HEADERS([sys/ioctl.h]) AC_CHECK_HEADERS([sys/time.h]) AC_CHECK_HEADERS([glib.h]) AC_CHECK_HEADERS([gio/gio.h]) AC_CHECK_HEADERS([asm/opal-prd.h]) AC_CHECK_HEADERS([mtd/mtd-abi.h]) AC_CHECK_HEADERS([pci/pci.h]) PKG_CHECK_MODULES([GIO], [gio-2.0]) PKG_CHECK_MODULES([GLIB], [glib-2.0]) AC_SUBST([GIO_CFLAGS]) AC_SUBST([GIO_LIBS]) AC_SUBST([GLIB_CFLAGS]) AC_SUBST([GLIB_LIBS]) AM_CONDITIONAL([HAVE_ASM_OPAL_PRD_H], [test "x$ac_cv_header_asm_opal_prd_h" = "xyes"]) AM_CONDITIONAL([HAVE_MTD_ABI_H], [test "x$ac_cv_header_mtd_abi_h" = "xyes"]) AM_CONDITIONAL([HAVE_PCI_PCI_H], [test "x$ac_cv_header_pci_pci_h" = "xyes"]) #AC_CHECK_LIB(pcre, pcre_compile) AC_SEARCH_LIBS([fdt_check_header], [fdt], [ AC_DEFINE([HAVE_LIBFDT], [1], [Define if we have libfdt])]) AM_CONDITIONAL([HAVE_LIBFDT], [test "x$ac_cv_search_fdt_check_header" != "xno"]) AC_SEARCH_LIBS([pci_alloc], [pci], [ AC_DEFINE([HAVE_LIBPCI], [1], [Define if we have libpci])]) AM_CONDITIONAL([HAVE_LIBPCI], [test "x$ac_cv_search_pci_alloc" != "xno"]) AC_FUNC_MALLOC AC_FUNC_FORK AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK AC_FUNC_MMAP AC_FUNC_REALLOC AC_TYPE_PID_T AC_TYPE_SIZE_T AC_TYPE_OFF_T AC_TYPE_UINT16_T AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_TYPE_UINT8_T case $host in arm*) CFLAGS="$CFLAGS -marm" ;; esac AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([ Makefile src/Makefile src/libfwtsiasl/Makefile src/libfwtsacpica/Makefile src/lib/Makefile src/lib/src/Makefile src/utilities/Makefile data/Makefile scripts/bash-completion/Makefile ]) AC_ARG_WITH([bashcompletiondir], AS_HELP_STRING([--with-bashcompletiondir=DIR], [Bash completions directory]), [], [AS_IF([`pkg-config --exists bash-completion`], [ with_bashcompletiondir=`pkg-config --variable=completionsdir bash-completion` ], [ with_bashcompletiondir=${datadir}/bash-completion/completions ]) ]) AC_SUBST([bashcompletiondir], [$with_bashcompletiondir]) AC_OUTPUT cppcheck.sh000077500000000000000000000051741465205512700132130ustar00rootroot00000000000000#!/bin/bash # # Copyright (C) 2016-2024 Canonical # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # CPPCHECK_DIR=/tmp/cppcheck CPPCHECK=${CPPCHECK_DIR}/cppcheck CPPCHECK_REPO=https://github.com/danmar/cppcheck CPPCHECK_LOG=cppcheck.log DEPENDENCIES="git build-essential" JOBS=$(nproc) HERE=$(pwd) # # Install any packages we depend on to build cppcheck # cppcheck_install_dependencies() { install="" echo "Checking for dependencies for cppcheck.." for d in ${DEPENDENCIES} do if [ "$(dpkg -l | grep $d)" == "" ]; then install="$install $d" fi done if [ "$install" != "" ]; then echo "Need to install:$install" sudo apt-get install $install if [ $? -ne 0 ]; then echo "Installation of packages failed" exit 1 fi fi } # # Get an up to date version of cppcheck # cppcheck_get() { if [ -d ${CPPCHECK_DIR} ]; then echo "Getting latest version of cppcheck.." mkdir -p ${CPPCHECK_DIR} cd ${CPPCHECK_DIR} git checkout -f master >& /dev/null git fetch origin >& /dev/null git fetch origin master >& /dev/null git reset --hard FETCH_HEAD >& /dev/null cd ${HERE} else echo "Getting cppcheck.." git clone ${CPPCHECK_REPO} ${CPPCHECK_DIR} fi } # # Build cppcheck # cppcheck_build() { cd ${CPPCHECK_DIR} echo "cppcheck: make clean.." make clean >& /dev/null echo "cppcheck: make.." nice make -j $JOBS > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "Build of cppcheck succeeded" else echo "Build of cppcheckfailed" exit 1 fi cd ${HERE} } # # Build fwts using cppcheck # cppcheck_fwts() { echo "cppchecking fwts.." rm -f ${CPPCHECK_LOG} nice ${CPPCHECK} --force -j $JOBS --enable=all . 2>&1 | tee ${CPPCHECK_LOG} } # # Check for errors # cppcheck_errors() { errors=$(grep "(error" ${CPPCHECK_LOG} | wc -l) warnings=$(grep "(warning" ${CPPCHECK_LOG} | wc -l) echo " " echo "cppcheck found $errors errors and $warnings warnings, see ${CPPCHECK_LOG} for more details." } cppcheck_install_dependencies cppcheck_get cppcheck_build cppcheck_fwts cppcheck_errors data/000077500000000000000000000000001465205512700117765ustar00rootroot00000000000000data/Makefile.am000066400000000000000000000015541465205512700140370ustar00rootroot00000000000000# # Copyright (C) 2012-2024 Canonical, Ltd. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # fwtsdatadir = $(pkgdatadir) fwtsdata_DATA = clog.json klog.json syntaxcheck.json olog.json -include $(top_srcdir)/git.mk data/README_JSON.txt000066400000000000000000000016211465205512700143250ustar00rootroot00000000000000README for JSON files for the FirmWare Test Suite (fwts) ======================================================== Special considerations for the JSON files: olog.json olog.json is automatically generated with a tool from the skiboot git source: git clone git://github.com/open-power/skiboot.git cd skiboot ./external/fwts/generate-fwts-olog --output olog.json If any changes are requested in the format or typos for olog.json, please pursue the skiboot source as the mechanism for updating, i.e. contact the skiboot maintainers to make the source code change and then once the change is merged to the git tree then the above tool can be used to generate a new olog.json file which can then be submitted as the fwts source change. The olog.json file is periodically submitted to fwts to refresh the data based on the current skiboot source tree. To contact the skiboot maintainers: skiboot@lists.ozlabs.org data/clog.json000066400000000000000000000040661465205512700136230ustar00rootroot00000000000000{ "firmware_error_warning_patterns": [ { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "MRC:.*(invalid|failed to|Could not|failure).*", "advice": "Debug MRC cache code and check flash write protection.", "label": "MRC" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "GMA:.*(Error|Broken|couldn't).*", "advice": "Debug Intel GMA driver code and check VGA Option ROM and VBT included into CBFS.", "label": "GMA" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "ERROR: Not enough MTRRs available!.*", "advice": "Increase memory alignment to reduce MTRR usage.", "label": "MTRR" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": ".*: Missing ACPI scope", "advice": "Add an ACPI name for coreboot's SSDT generator.", "label": "SSDT" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "ERROR: No timestamp.*", "advice": "Debug the timestamp code.", "label": "TIMESTAMP" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error:.*cbmem", "advice": "Debug the CBMEM code.", "label": "CBMEM" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "(No|Invalid) DSDT.*", "advice": "Provide or fix the DSDT file.", "label": "DSDT" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI: Error: Could not add ACPI table.*", "advice": "Increase MAX_ACPI_TABLES.", "label": "RSDP" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "PCI: Check your devicetree.cb.", "advice": "Check the mainboard's devicetree.cb for PCI related errors.", "label": "STATIC_PCI" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "PCI: Check your devicetree.cb.", "advice": "Check the mainboard's devicetree.cb for PCI related errors.", "label": "STATIC_PCI" }, ] } data/klog.json000066400000000000000000011614651465205512700136430ustar00rootroot00000000000000{ "firmware_error_warning_patterns": [ { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Failed to change power state to ", "advice": "The ACPI Power Management driver was unable to transition a device to the desired power state.", "label": "KlogAcpiPmStateTransitionFailed", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Cannot transition from .* to", "advice": "The ACPI Power Management driver refused to transition a device from going from a lower power (deeper) state to a higher power (shallower) state if the state is not D0 in accordance with ACPI 6.0.", "label": "KlogAcpiPmStateTransitionNotAllowed", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Cannot transition to power state .* for parent", "advice": "The ACPI Power Management driver was unable to transition a parent device into a power state because it does not support that particular power state.", "label": "KlogAcpiPmStateNotSupportedByParent", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Power state .* not supported", "advice": "The ACPI Power Management driver was unable to transition a device into a specific power state because the device did not specify it supported this power state.", "label": "KlogAcpiPmStateNotSupported", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Cannot find an available gap in the 32-bit address range", "advice": "A search for the biggest gap in the low 32 bit E820 memory space for PCI MMIO resources failed to find any free gaps large enough. PCI devices with unassigned 32 bit Base Address Registers (BARs) are very likely to break.", "label": "KlogBiosE820NoGapAvailable", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "AcpiDisable failed", "advice": "The ACPI core driver cannot disable ACPI when returning back to legacy mode.", "label": "KlogAcpiDisableFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "DSDT is not in memory", "advice": "The ACPI core driver has attempted to load the ACPI namespace but failed because there is no ACPI Differentiated System Description Table (DSDT) available.", "label": "KlogAcpiDsdtNotInMemory", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "CPPC data invalid or not present", "advice": "The ACPI processor driver has detected missing or invalid Collaborative Processor Performance Control (CPPC) data. The ACPI per CPU _CPC objects may be missing or broken.", "label": "KlogAcpiCppcDataInvalid", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "The _BIX method is broken, using _BIF", "advice": "The ACPI battery driver has detected that the Battery Information Extended (_BIX) object seems to be broken and has fallen back to using the less modern Battery Information (_BIF) object instead to get battery specific data.", "label": "KlogAcpiBixBroken", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_LOW", "pattern": "BIOS reported wrong ACPI id .* for the processor", "advice": "The ACPI processor enumaration detected an invalid ACPI ID for a specific processor. This is not fatal, but the kernel will not trust the ACPI data for this specific processor.", "label": "KlogAcpiProcessorInvalidId", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "VA address range overflow", "advice": "The EFI virtual address has wrapped around and overflowed and may cause random or unexplicable faulty EFI behaviour.", "label": "KlogEfiVaAddrRangeOverflow", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error mapping PA 0x.* VA 0x", "advice": "The EFI driver failed to map physical addresses to virtual addresses on a range of EFI related pages.", "label": "KlogEfiPhysVirtMappingFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error while updating 1:1 mapping PA", "advice": "The EFI driver failed to update the 1:1 mapping, physical addresses to virtual addresses on a range of EFI related pages.", "label": "KlogEfiPhysVirtMappingUpdateFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error while updating VA mapping PA", "advice": "The EFI driver failed to upate the virtual addresses mapping on a range of EFI related pages.", "label": "KlogEfiVirtMappingUpdateFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to map kernel text 1:1", "advice": "The kernel text region failed to be mapped 1 to 1 (physical to virtual).", "label": "KlogEfiKernelTextOneToOneMapFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to map kernel rodata 1:1", "advice": "The kernel rodata region failed to be mapped 1 to 1 (physical to virtual).", "label": "KlogEfiKernelRODataOneToOneMapFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unable to allocate EFI runtime stack < 4GB", "advice": "The EFI stack must be addressible with 32 bit pointers and hence less than 4GB, however a stack in the 32 bit address range could not be allocated and the boot cannot proceed (kernel panic).", "label": "KlogEfi32BitStackNotAllocated", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to create 1:1 mapping for the first page", "advice": "The firmware still believes it is the exclusive owner of the first physical page of the EFI mapping even though the firmware has marked it as EFI_CONVENTIONAL_MEMORY. To avoid a triple fault if the firmware attempts to write-access the page, a 1:1 mapping is used, however, this failed to be created.", "label": "KlogEfiOneToOneMappingFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to create 1:1 mapping for the GHCBs", "advice": "When SEV-ES is active, the GHCB as set by the kernel will be used by firmware. Create a 1:1 unencrypted mapping for each GHCB, however, this failed to be created.", "label": "KlogEfiOneToOneMappingFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error ident-mapping new memmap", "advice": "The physical address of a newly memory mapped EFI region is not mapped into the EFI page table. Ident mapping failed.", "label": "KlogEfiIdentMappingFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Setup done, disabling due to 32/64-bit mismatch", "advice": "The EFI quirk mechaism has unmapped the EFI memory map, EFI runtime services have been disabled because of a mismatch on firmware and kernel (32/64 bit mismatch).", "label": "KlogEfiQuirkEfiDisabled", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not map Configuration table", "advice": "The EFI quirk mechanism failed to remap the SMBIOS configuration tables.", "label": "KlogEfiQuirkConfigRemapFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not install new EFI memmap", "advice": "The EFI quirk mechanism could not install a memory region for the new EFI memmap region.", "label": "KlogEfiQuirkEfiMemMapInstallFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to map new EFI memmap", "advice": "The EFI quirk mechanism could not remap a memory region for the new EFI memmap region.", "label": "KlogEfiQuirkEfiMemMapRemapFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to allocate new EFI memmap", "advice": "The EFI quirk mechanism could not allocate a memory region for the new EFI memmap region.", "label": "KlogEfiQuirkEfiMemMapAllocFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to map new boot services memmap", "advice": "The EFI quirk mechanism could not memory map a memory region for the EFI boot services, memory range could not be reserved.", "label": "KlogEfiQuirkBootServesMemMapFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not allocate boot services memmap", "advice": "The EFI quirk mechanism could not allocate a memory region for the EFI boot services, memory range could not be reserved.", "label": "KlogEfiQuirkBootServicesAllocFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Region spans EFI memory descriptors", "advice": "The EFI quirk mechanism found that a memory range spanned one or more existing EFI memory descriptors and could not reserve it.", "label": "KlogEfiQuirkMemDescSpanRegionsFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to lookup EFI memory descriptor for", "advice": "The EFI quirk mechanism failed to find an EFI memory descriptor for a specific address; EFI memory could not be reserved.", "label": "KlogEfiQuirkMemDescLookupFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "need at least one option", "advice": "An incorrect (empty) argument was passed to the EFI driver via the efi= kernel option", "label": "KlogEfiEmptyArgument", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unable to switch EFI into virtual mode", "advice": "The EFI driver was unable to switch the EFI runtime services to virtual mode, the call to the EFI service SetVirtualAddressMap failed and the kernel panic'd", "label": "KlogEfiSwitchToVirtualModePanic", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to remap late EFI memory map", "advice": "The EFI driver could not remap the late EFI memory page, runtime service calls will be disabled", "label": "KlogEfiRemapLateMemoryMap", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error reallocating memory, EFI runtime non-functional", "advice": "The EFI driver could not reallocate memory, runtime service calls will be disabled", "label": "KlogEfiReallocMemFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to remap late EFI memory map", "advice": "The EFI driver could not install a new EFI memory map, runtime service calls will be disabled", "label": "KlogEfiRemapEfiMemoryMapFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to allocate EFI page tables", "advice": "The EFI driver could not allocate EFI page tables when trying to enter EFI virtual mode, runtime service calls will be disabled", "label": "KlogEfiPageTablesAllocFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Could not map the firmware vendor", "advice": "The EFI firmware vendor information could not be memory mapped, vendor information will be incorrect.", "label": "KlogEfiMmapFirmwareVendorInfo", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not map the runtime service table", "advice": "The EFI runtime service table could not be mapped into memory, EFI has been disabled.", "label": "KlogEfiMmapRunTimeServiceTableFailed", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_LOW", "pattern": "Warning: System table version .*, expected 1.00 or greater", "advice": "The EFI system table version was less than 1.00, which is not expected. EFI support has been allowed, even if the version looks old and/or wrong", "label": "KlogEfiSystemTableVersionIssue", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "System table signature incorrect", "advice": "The EFI system table header signature did not match the expected signature, EFI table is not trustworthy and EFI has been disabled", "label": "KlogEfiBadSystemTableSignature", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "EFI data located above 4GB, disabling EFI", "advice": "The 32 bit system cannot memory map EFI data above the 32 bit address space limit of 4GB, EFI has been disabled", "label": "KlogEfiDataAbove4GB", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Couldn't map the system table", "advice": "The EFI system table could not be memory mapped, EFI support will be disabled", "label": "KlogEfiMmapSystemTableFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Memory map is above 4GB, disabling EFI", "advice": "The 32 bit system cannot memory map EFI data above the 32 bit address space limit of 4GB, EFI has been disabled", "label": "KlogEfiMmapAbove4GB", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "ACPI MWAIT C-state .* not supported by HW", "advice": "The ACPI _CST (C-State) object is reporting a CPU C-State that the CPU does not actually support (as determined by CPUID_MWAIT_LEAF)", "label": "KlogAcpiCstateNotSupported", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid character.* in name .*, repaired:", "advice": "An ACPI object name contained an invalid character and the ACPI core fixed this up. This incorrectly named object could cause incorrect execution behaviour of ACPI AMI code.", "label": "KlogAcpiInvalidObjectName", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_LOW", "pattern": "Platform took .* usec to enter ACPI mode", "advice": "An ACPI GPE took longer than expected to enter ACPI mode. This could lead to unexpected behaviour", "label": "KlogAcpiGpeEventEnterAcpiTooSlow", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Cannot release the ACPI Global Lock, it has not been acquired", "advice": "An attempt to release ACPI Global Lock failed, it had not been acquired previously.", "label": "KlogAcpiGlobalLockReleaseFailed", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "UtTrackAllocation: Allocation .* already present in global list", "advice": "The ACPI memory tracking debug has detected an allocation that already exists in the global list of, this indicates a bug in the ACPICA core.", "label": "KlogAcpiUtTrackDuplicateAllocation", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Attempt to delete a NULL address", "advice": "The ACPI memory tracking debug has detected an attempt to delete a NULL address, this indicates a bug in the ACPICA core.", "label": "KlogAcpiUtTrackNullAddrDelete", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "The lid device is not compliant to SW_LID", "advice": "The ACPI button driver has detected a non compliant LID device switch. This can occur because the platform reports the lid as closed immediately after booting or resuming, or because the device never reports open events. The ACPI button driver has inverted the LID switch event to try to ensure expected behaviour", "label": "KlogAcpiLidInvertedSwitchEvent", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_LOW", "pattern": "DMI detected: .*force ACPI _REV to 5", "advice": "The machine is a DELL that has switches sound between HDA and I2S depending on what the ACPI _REV object returns. The machine has been quirked to force _REV to return 5 to indicated sound should use HDA", "label": "KlogAcpiDellRev5Quirked", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "sysfs_get_dirent 'nfit' failed", "advice": "The ACPI NFIT driver failed to get the NFIT sysfs directory entry", "label": "KlogNfitSysfsDirentFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "sysfs_get_dirent 'scrub' failed", "advice": "The ACPI NFIT driver failed to get the NFIT scrub sysfs directory entry", "label": "KlogNfitScrubSysfsDirentFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "PCI: unsupported BIOS32 revision", "advice": "The Linux kernel currently only supports BIOS32 revision 0 and is ignoring an unsupported BIOS32 service directory structure.", "label": "KlogBios32UnsupportedRevision", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "PCI: BIOS32 entry .* in high memory, cannot use", "advice": "The BIOS32 service directory structure in located in high memory at or above address 0x100000 and cannot use this.", "label": "KlogBios32InHighMemory", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid error record", "advice": "The ACPI Boot Error Record Table (BERT) driver contained a record that was truncated and so it cannot print it.", "label": "KlogAcpiBertShortErrorRecord", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "get table failed", "advice": "The ACPI Boot Error Record Table (BERT) driver found the table, but it cannot get the table for some format exceptions.", "label": "KlogAcpiBertGetTableFail", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "table invalid", "advice": "The ACPI Boot Error Record Table (BERT) driver checked the BERT table and got the table invalid.", "label": "KlogAcpiBertTableInvalid", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Truncated status block", "advice": "The ACPI Boot Error Record Table (BERT) driver found a status block that was truncated and so it cannot print it.", "label": "KlogAcpiBertShortStatusBlock", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Can't request iomem region", "advice": "The ACPI Boot Error Record Table (BERT) driver could not request the bert table data and cannot dump the boot error records.", "label": "KlogAcpiBertIoMemRegionRequestFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Firmware does not respond in time", "advice": "The ACPI Error Injection (EINJ) or Error Record Serialization (ERST) driver attempted to inject an error however the firmware took longer than expected to respond and a time-out occurred.", "label": "KlogAcpiEinjErstFirmwareTimeout", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Too long stall time for stall instruction", "advice": "The ACPI Error Record Serialization (ERST) driver attempted to execute stall instruction and got the stall time too long.", "label": "KlogAcpiErstStallTime", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Too long stall time for stall while true instruction", "advice": "The ACPI Error Record Serialization (ERST) driver attempted to execute stall while true instruction and got the stall time too long.", "label": "KlogAcpiErstStallTime", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "MOVE_DATA can not be used in interrupt context", "advice": "The ACPI Error Record Serialization (ERST) driver attempted to execute move data can not be used in interrupt context, ioremap does not work in interrupt context.", "label": "KlogAcpiErstInterupContext", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "too many record IDs", "advice": "The ACPI Error Record Serialization (ERST) driver attempted to add one record id cache but found too many record IDs.", "label": "KlogAcpiErstRecordID", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "too many record IDs", "advice": "The ACPI Error Record Serialization (ERST) driver attempted to add one record id cache but found too many record IDs.", "label": "KlogAcpiErstRecordID", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "NVRAM ERST Log Address Range not implemented yet", "advice": "The ACPI Error Record Serialization (ERST) driver found NVRAM ERST Log Address Range not implemented yet.", "label": "KlogAcpiErstNvramLogAddrRange", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to get table", "advice": "The ACPI Error Record Serialization (ERST) driver found the table, but it cannot get the table for some format exceptions.", "label": "KlogAcpiErstGetTableFail", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "ERST table is invalid", "advice": "The ACPI Error Record Serialization (ERST) driver checked the ERST table and got the table invalid.", "label": "KlogAcpiErstInvalid", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to get Error Log Address Range", "advice": "The ACPI Error Record Serialization (ERST) driver fail to get Error Log Address Range.", "label": "KlogAcpiErstErrLogAddrRangeFail", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Can not request .* for ERST", "advice": "The ACPI Error Record Serialization (ERST) driver attempted to request a memory region for the ERST table but the request failed, perhaps the mapping was incorrect.", "label": "KlogAcpiErstFailedMemRegion", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to allocate .* bytes for persistent store error log.", "advice": "The ACPI Error Record Serialization (ERST) driver attempted to allocate some bytes for the ERST persistent store error log but failed.", "label": "KlogAcpiErstFailedMemAllocate", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Can not request .* for Trigger table", "advice": "The ACPI Error Injection (EINJ) driver attempted to request a memory region for the APEI EINJ trigger table but the request failed, perhaps the mapping was incorrect.", "label": "KlogAcpiEinjFailedMemRegion", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Can not request .* for Trigger table entry", "advice": "The ACPI Error Injection (EINJ) driver attempted to request a memory region for the APEI EINJ trigger table entry but the request failed, perhaps the mapping was incorrect.", "label": "KlogAcpiEinjFailedMemRegion", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to map trigger table", "advice": "The ACPI Error Injection (EINJ) driver attempted to IO remap the APEI EINJ trigger table, but the mapping failed.", "label": "KlogAcpiEinjFailedIoremap", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid trigger error action table.", "advice": "The ACPI Error Injection (EINJ) driver checks EINJ trigger table header, and got invlid trigger error action table.", "label": "KlogAcpiEinjFailedIoremap", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_INFO", "pattern": "EINJ table not found", "advice": "The ACPI Error Injection (EINJ) driver could not find an ACPI EINJ table, EINJ functionality is disabled.", "label": "KlogAcpiEinjNotFound", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Failed to get EINJ table", "advice": "The ACPI Error Injection (EINJ) driver could not get an ACPI EINJ table, EINJ functionality is disabled.", "label": "KlogAcpiEinjGetFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid EINJ table", "advice": "The ACPI Error Injection Table (EINJ) was invalid, possible because of an incorrect header length or an incorrect table size for the number of entries in the table.", "label": "KlogAcpiEinjInvalid", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Error collecting EINJ resources", "advice": "The ACPI Error Injection (EINJ) driver detected either an invalid Generic Address Structure (GAR) in an injection instruction entry, or resource space ID was not system memory or system I/O.", "label": "KlogAcpiEinjResourcesFailure", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Error requesting memory/port resources", "advice": "The ACPI Error Injection (EINJ) driver failed to request system memory or system I/O port resources, EINJ functionality is disabled.", "label": "KlogAcpiEinjResourcesFailure", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Error pre-mapping GARs", "advice": "The ACPI Error Injection (EINJ) driver failed to map the address spaces specified by the injection instruction entry Generic Address Structures (GAR), EINJ functionality is disabled.", "label": "KlogAcpiEinjGarMapFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Error creating param extension debugfs nodes", "advice": "The ACPI Error Injection (EINJ) driver failed to create debugfs nodes.", "label": "KlogAcpiEinjDebugfsFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Failed to initialize debugger", "advice": "An error occurred when initializing the ACPI AML debugger so the debugger cannot be started.", "label": "KlogAcpiAmlDebugInitFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Failed to create AML debugger thread", "advice": "An error occurred when creating the ACPI AML debugger, a kernel thread could not be created so the debugger cannot be started.", "label": "KlogAcpiAmlDebugThreadFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "DMA mask not set", "advice": "DMA mask is not set for an ACPI ARM64 DMA device, If dev is expected to be DMA-capable then the bus code that created it should have initialised its dma_mask pointer, if not, it will continue the legacy behaviour of coercing it to the coherent mask.", "label": "KlogAcpiAmbaDevAddFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "amba_device_add() failed", "advice": "An error occurred when attempting to add an ACPI ARM AMBA device, the device allocation failed and the device has not enabled.", "label": "KlogAcpiAmbaDevAddFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "amba_device_alloc() failed", "advice": "An error occurred when attempting to allocate an ACPI ARM AMBA device, the device allocation failed and the device has not enabled.", "label": "KlogAcpiAmbaDevAllocFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid resource", "advice": "Got an invalid resource for an ACPI ARM AMBA device, neither IORESOURCE_MEM nor IORESOURCE_IRQ.", "label": "KlogAcpiAmbaDevAllocFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "PCC check channel failed. Status=", "advice": "An error occurred waiting for the Platform Communication Channel communication channel to become available to the operating system. It seems to be still owned by the platform after too long a duration.", "label": "KlogAcpiPccChannelBlocked", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_INFO", "pattern": "thermal zone will be disabled", "advice": "An ACPI thermal zone control has been updated and an ACPI thermal zone has been disabled", "label": "KlogAcpiThermalZoneDisabled", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "APMT could not register gsi hwirq", "advice": "The ACPI Arm Performance Monitoring Unit table (APMT) driver could not register a Global System Interrupt (GSI) handler.", "label": "KlogAcpiApmtGsiHandlerRegFailed", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to get APMT table", "advice": "The ACPI Arm Performance Monitoring Unit table (APMT) driver failed to get APMT table, the table was not found.", "label": "KlogAcpiApmtGetTableFail", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to initialize APMT platform devices", "advice": "The ACPI Arm Performance Monitoring Unit table (APMT) driver failed to ini the platform devices and connot add platform device.", "label": "KlogAcpiApmtFail", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "iort node pointer overflows, bad table", "advice": "The ACPI IO Remapping Table (IORT) indicated it had more IORT nodes than were in the IORT table. Either the node count was incorrect or the table is truncated.", "label": "KlogAcpiIortBadTable", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "could not register gsi hwirq", "advice": "The ACPI IO Remapping Table (IORT) driver could not register a Global System Interrupt (GSI) handler.", "label": "KlogAcpiIortGsiHandlerRegFailed", }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "requested ITS ID index .* is greater than available", "advice": "An error occurred trying to find an ACPI I/O Remapping Table (IORT) ITS identifier with a given index, index is out of range.", "label": "KlogAcpiIortItsIndexTooLarge", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "ID map has NULL parent reference", "advice": "An ACPI I/O Remapping Table (IORT) node output reference offset into the IORT is zero, which is clearly an firmware bug as it needs to be defined as an offset to the parent table. The node has been ignored.", "label": "KlogAcpiIortNullRef", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "SINGLE MAPPING flag not allowed for node type", "advice": "An ACPI I/O Remapping Table (IORT) node single mapping flag (bit 0 in node map flags) indicates that the node type is a single mapping node, however this is not allowed for this node. Ignoring node as this is a firmware bug in the IORT.", "label": "KlogAcpiIortIdMap", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Interpreter disabled", "advice": "The ACPI interpreter initialization failed and so ACPI has been disabled", "label": "KlogAcpiDisabled", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "cannot allocate memory for new IOAPIC", "advice": "The ACPI APIC driver was unable to allocate memory while trying to add a new IOAPIC to the system; IOAPIC was ignored.", "label": "KlogAcpiIoapicNoMem" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "SRAT not used", "advice": "An error in the ACPI System Resource Affinity Table has been found, NUMA will not be enabled.", "label": "KlogAcpiSratNotUsed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "SRAT: Unexpected header length", "advice": "An unexpected ACPI System Resource Affinity Table header length has been detected, NUMA will not be enabled.", "label": "KlogAcpiSratBadHeaderLength" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "SRAT: Too many proximity domains", "advice": "The ACPI System Resource Affinity Table has more proximity domains listed than the maximum kernel defined number of NUMA nodes. The Linux kernel CONFIG_NODES_SHIFT needs to be increaded.", "label": "KlogAcpiSratNumaNodeLimit", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "SRAT: Failed to add memblk to node", "advice": "The ACPI NUMA driver failed to add a NUMA memory block to a node. NUMA will not be enabled.", "label": "KlogAcpiNumaMemblkAddFailure", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "SRAT: Failed to mark hotplug range", "advice": "The ACPI NUMA driver failed to mark a NUMA memory plug as hotpluggable.", "label": "KlogAcpiNumaMemblkHotplugFailure", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "wrong table version", "advice": "The ACPI Serial Port Console Redirection Table (SPCR) was expected to be at least version 2 or higher. APCI Serial Port Console will be ignored.", "label": "KlogAcpiSprWrongVersion" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "acpi resource window .* ignored, not CPU addressable", "advice": "An ACPI resource window could not be configured, the space was not addressable and has been ignored. One of the ACPI _CRS objects is incorrect. Check this with the fwts crsdump.", "label": "KlogAcpiResourceWindowIgnored" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Limiting number of LPI states to max", "advice": "The number of CPU C States as returned by the _CST package is more than the ACPI Processor Idle driver supports. Limited it to a kerneld defined maximum.", "label": "KlogAcpiCpuIdleLpiStatesMax" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "STAO table present, but SPCR is missing", "advice": "ACPI _STA Override Table (STAO) exists and indicates that the STOA UART settings should be ignored and should use the SPCR, however there is no Serial Port Console Redirection Table containing serial port UART address information.", "label": "KlogAcpiSpcrMissing" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "iort node pointer overflows, bad table", "advice": "ACPI ARM64 IORT driver detected an IORT node that is outside the ACPI IORT table. The table as been deemed to be broken and has been ignored", "label": "KlogAcpiIortNodeOutsideTable" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "could not register gsi hwirq", "advice": "ACPI ARM64 IORT driver failed to register the GSI IRQ", "label": "KlogAcpiIortIrqRegisterFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "requested ITS ID index .* is greater than available", "advice": "ACPI ARM64 IORT driver failed to find a device by an ITS ID but the provided ID index is greater than the available ITS count, driver returned -ENXIO", "label": "KlogAcpiIortBadItsIdIndex" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "ID map has NULL parent reference", "advice": "ACPI ARM64 IORT driver failed to get an IORT node ID, the map parent reference was NULL which is indicative of a firmware bug in the ACPI I/O Remapping Table", "label": "KlogAcpiIortIdMapNull" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to create AML debugger thread", "advice": "The ACPI driver debugger failed to create a kernel thread to allow ACPI debugging, debugger failed to start", "label": "KlogAcpiAmlDebugThreadFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "amba_device_add() failed", "advice": "ACPI AMBA device ARMH0061 (an ARM PL061 GPIO device) device add failed", "label": "KlogAcpiAmbaDevAddFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "amba_device_alloc() failed", "advice": "ACPI AMBA device ARMH0061 (an ARM PL061 GPIO device) device allocate failed", "label": "KlogAcpiAmbaDevAllocFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "device is empty", "advice": "ACPI memory hot-plug device is empty", "label": "KlogAcpiMemHotPlugDeviceEmpty" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "add_memory failed", "advice": "ACPI memory hot-plug failed to enable a memory device", "label": "KlogAcpiMemHotPlugAddMemFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Limiting number of LPI states to max", "advice": "The ACPI C States (_CST) object contains more LPI states than the kernel has configired, so this has been limited to the maximum states allowed by the driver", "label": "KlogAcpiLpiLimited" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "failed to register spa range", "advice": "The ACPI NFIT driver was unable to register a memory region because of an invalid System Physical Address (SPA)", "label": "KlogAcpiNfitInvalidSPA" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Failed to process ARS records", "advice": "The ACPI NFIT driver was unable to Address Range Scrub (ARS) records", "label": "KlogAcpiNfitARSProcessFail" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "ARS: range .* ARS failed", "advice": "The ACPI NFIT driver encounter the Address Range Scrub(ARS) start failed with the System Physical Address", "label": "KlogAcpiNfitARSRangeFail" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": ": notification registration failed", "advice": "The ACPI NFIT driver was unable to install a notify handler for an NFIT NVDIMM device, device was marked as not available", "label": "KlogAcpiNfitNVDIMM" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error found in NVDIMM .* flags:", "advice": "The ACPI NFIT driver encountered a NVDIMM region and its mapping NVDIMM state flags error.", "label": "KlogAcpiNfitNVDIMMFlagError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Failed to set state by _FSL", "advice": "The ACPI fan driver could not set the fan speed because the Fan Set Level (_FSL) control failed", "label": "KlogAcpiFanFslSetFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "\\[.*:.*\\] Invalid zero length", "advice": "An ACPI MADT subtable has been found with an invalid zero length. MADT parsing was aborted.", "label": "KlogAcpiMadtZeroLengthSubTable" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "BIOS bug: multiple APIC/MADT found, using", "advice": "The BIOS is supposed to supply just one APIC/MADT, however, more than one has been found. One can use acpi_apic_instance=N to specify the Nth ACPI/MADT to use as an override if required.", "label": "KlogAcpiMultipleMadt" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_LOW", "pattern": "Override \\[.*\\], this is unsafe: tainting kernel", "advice": "One or more ACPI tables have been overridden with replacement tables, this sets a taint bit in the kernel since this is an unsafe operation.", "label": "KlogAcpiKernelTainted" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI OVERRIDE: Table smaller than ACPI header", "advice": "An override ACPI table from kernel/firmware/acpi has an invalid ACPI table header size and will be ignored.", "label": "KlogAcpiInvalidOverrideTable" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI OVERRIDE: Unknown signature", "advice": "An override ACPI table has an unknown ACPI table signature and will be ignored.", "label": "KlogAcpiInvalidOverrideTableSig" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI OVERRIDE: File length does not match table length", "advice": "An override ACPI table has an invalid length and will be ignored.", "label": "KlogAcpiInvalidOverrideTableLength" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI OVERRIDE: Bad table checksum", "advice": "An override ACPI table has an invalid checksum and will be ignored.", "label": "KlogAcpiInvalidOverrideTableChecksum" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Shall use APIC/MADT table", "advice": "The BIOS is supposed to supply just one APIC/MADT, however, more than one has been found. Using a specific MADT table.", "label": "KlogAcpiMadtSelected" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "IRQ method execution failed", "advice": "The ACPI Generic Eventi Device (GED) Driver failed to execute an _EVT method when handling a GE interrupt in a kernel thread. Note: this error is reported only once, but may be occurring multiple times.", "label": "KlogAcpiGedIrqExecFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "unable to parse IRQ resource", "advice": "The ACPI Generic Event Device (GED) Driver failed to get IRQ resources for a GED, the evaluation of an ACPI _CRS object associated with it failed. The device will not be enabled.", "label": "KlogAcpiGedIrqCrsFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "cannot locate _EVT method", "advice": "The ACPI Generic Event Device (GED) Driver failed to find the _EVT method associated with the GED. The device will not be enabled.", "label": "KlogAcpiGedEvtNotAvailable" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "failed to setup event handler for irq", "advice": "The ACPI Generic Event Device (GED) Driver failed to start a kernel thread to handle the GED events. The device will not be enabled.", "label": "KlogAcpiGedHandlerFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "unable to parse the _CRS record", "advice": "The ACPI Generic Event Device (GED) Driver failed to parse the _CRS object associated with a GED and hence could not determine the interrupt resources for the device. he device will not be enabled.", "label": "KlogAcpiGedCrsFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Misaligned resource pointer", "advice": "The ACPI driver detected a resource pointer that is not naturally aligned to a 32 bit boundary. This has been automatically fixed and should not cause any issues.", "label": "KlogAcpiResourceDescriptorError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid interrupt polarity/trigger in resource list", "advice": "The ACPI driver detected invalid interrupt polarity/trigger settings in a resource list. Only active high / edge_sensitive and active_low / level_senstive are allowed, so IRQ flags 0x00 and 0x09 are invalid.", "label": "KlogAcpiResourceDescriptorError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid DMA.Transfer preference", "advice": "The ACPI driver detected invalid DMA Transfer preference in a resource list. DMA Transfer preference 0x03 is invalid.", "label": "KlogAcpiResourceDescriptorError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Failure in evaluating _TTS object", "advice": "The APCI Transition To State (_TTS) control failed to be evaluated. This control is executated by the OS when a sleep transition occurs, however, failure to execute this generally is not an issue because firmware generally does not include it and not having it will not break transitioning to sleep states.", "label": "KlogAcpiSleepEvalTts" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Failure in evaluating _PTS object", "advice": "The APCI Prepare To State (_PTS) control failed to be evaluated. This control is executated by the OS when a sleep transition occurs, however, failure to execute this generally is not an issue and will not break the transitioning to sleep.", "label": "KlogAcpiSleepEvalPts" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI does not support sleep state S", "advice": "The ACPI driver could not put the machine into the desired sleep state because the sleep state is not supported.", "label": "KlogAcpiSleepStateNoSupport" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Warning: Failed to enable wakeup from IRQ", "advice": "The ACPI driver could not set the wakeup mode enabled which can let this IRQ wake the system from sleep.", "label": "KlogAcpiEnableWakeupIRQFail" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Hardware changed while hibernated, success doubtful", "advice": "The FACS hardware signature does not match the saved hardware signature. The kernel detected a change in the hardware so the resume from hibernate may not work or be possibly broken.", "label": "KlogAcpiHibernateHwChange" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "detected - limiting to C.* max_cstate", "advice": "The maximum C state has been limited by the ACPI processor idle driver because of a known bug on this platform, for instance, going to a deeper C state can hang the machine. This can be overridden using the kernel parameter processor.max_cstate to set to a deeper C state if required.", "label": "KlogAcpiIdleMaxCStateLimited" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "FW issue: working around C-state latencies out of order", "advice": "The ACPI processor idle driver gets the out of order latencies for C-state from firmware and workaroud it.", "label": "KlogAcpiCStateBadLatency" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI: processor limited to max C-state", "advice": "The maximum C state is less than the maximum allowed processor C states, so the CPU cannot go into a deep idle C state which means it is not optimally configured for power saving.", "label": "KlogAcpiIdleMaxCStateLimited" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "battery: (dis)charge rate invalid", "advice": "The ACPI Battery Status (_BST) object is returning an invalid dischar or charge rate. This can be either a negative 16 bit value or reporting 0 as 65536 because of an invalid calculation in the DSDT. The Linux ACPI battery driver has detected this firmware bug and attempted to work around it.", "label": "KlogAcpiBstInvalidRate" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "(dis)charge rate invalid", "advice": "The ACPI Battery Status (_BST) object is returning an invalid dischar or charge rate. This can be either a negative 16 bit value or reporting 0 as 65536 because of an invalid calculation in the DSDT. The Linux ACPI battery driver has detected this firmware bug and attempted to work around it.", "label": "KlogAcpiBstInvalidRate" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Err sending PCC mbox message. cmd", "advice": "The ACPI CPPC (Collaborative Processor Performance Control) driver attempted to send a command via the PCC mailbox but it failed to be sent. If this persists then the CPU freq drivers cannot control CPU performance using the _CPC ACPI tables.", "label": "KlogAcpiCppcSendError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to find PCC communication channel", "advice": "The ACPI CPPC (Collaborative Processor Performance Control) driver could not find the requested PCC communication channel and so the CPU freq driver cannot control CPU performance via the _CPC ACPI tables. This error occurs because the requested PCC communication channel is not defined in the ACPI Platform Communications Channel Table (PCCT).", "label": "KlogAcpiPccFailure" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No PCC subspace found for CPPC", "advice": "The PCC mailbox controller could not parse the ACPI Platform Communications Channel Table (PCCT) and find the PCC subspace communication region. The CPU freq driver cannot control CPU performance via the _CPC ACPI tables.", "label": "KlogAcpiPccNoSubspace" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to ioremap PCC comm region mem", "advice": "The ACPI CPPC driver could not map the PCC subspace communication region, so the CPU freq driver cannot control CPU performance via the _CPC ACPI tables.", "label": "KlogAcpiCppcIomapFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Failed to parse MCFG", "advice": "The ACPI MCFG (PCI Express memory mapped configuration space base address Description Table) cannot be parsed (due to an error in the table) and so PCIe memory mapped configuration has failed - expect PCIe devices not to function", "label": "KlogAcpiMcfgParseFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "no secondary bus range in _CRS", "advice": "ACPI evaluated a _CRS (Current Resource Setting) object to determine the start and end of of a PCI downsteam bus range and did not find the end address, so an end address of 0xff is being assumed", "label": "KlogAcpiPciCrsNoEndAddr" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "failed to parse _CRS method, error code", "advice": "ACPI tried to evaluateda _CRS (Current Resource Setting) object to determine PCI root resources, but the _CRS object could not be parsed.", "label": "KlogAcpiPciCrsParseError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "found a zero length table .* parsing nfit", "advice": "An ACPI NVDIMM Firmware Interface Table (NFIT) header indicates a NFIT table has an invalid zero size and has been ignored. This will lead to a NVDIMM not being recognised by the system", "label": "KlogAcpiNfitZereSize" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "SPA .* missing DCR", "advice": "An ACPI NVDIMM Firmware Interface Table (NFIT) Control Region Structure (DCR) is missing a System Physical Address (SPA), NFIT table is incorrect.", "label": "KlogAcpiNfitDcrSpaError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error installing CMOS-RTC region handler", "advice": "The ACPI CMOS Real Time Clock (RTC) driver could not install a CMOS address space region handler (this allows CMOS read/writes). This failure has caused the ACPI CMOS RTC functionality to fail", "label": "KlogAcpiCmosRtcHandler" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error removing CMOS-RTC region handler", "advice": "The ACPI CMOS Real Time Clock (RTC) driver could not remove a CMOS address space region handler", "label": "KlogAcpiCmosRtcHandler" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "SRAT: SRAT not used", "advice": "The NUMA affinity configuration could not be determined because of errors in the ACPI SRAT table", "label": "KlogAcpiSratNotUsed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "SRAT: Failed to mark hotplug range", "advice": "A hotpluggable memory range failed to be marked as hotpluggable. This generally occurs because the memory range is invalid and may overlap other memory regions.", "label": "KlogAcpiSratNotUsed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "SRAT: Unexpected header length", "advice": "The NUMA affinity configuration could not be determined because the ACPI SRAT table header was the incorrect size.", "label": "KlogAcpiSratBadHeader" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "SRAT: Too many proximity domains", "advice": "The NUMA affinity configuration failed because the number of NUMA nodes is greater than the system defined hard limit of 1 << CONFIG_NODES_SHIFT. The kernel config value for CONFIG_NODES_SHIFT needs to be increased.", "label": "KlogAcpiSratTooManyNodes" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "SRAT: Failed to add memblk to node", "advice": "The per-architecture NUMA implementation was unable to add a NUMA memory block to the memory information data structures. This may occur if the node id is more than the maximum system configured number of NUMA nodes or all the allowed memory block ranges are used.", "label": "KlogAcpiSratMemBlkAddFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "SLIT table looks invalid. Not used", "advice": "The ACPI SLIT (System Locality Distance Information) is not parsable or looks suspect, NUMA affinity cannot be configured.", "label": "KlogAcpiSratMemBlkAddFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "stale EC events cleared", "advice": "The ACPI Embedded Controller (EC) driver has cleared the maximum number of pending ACPI _Q events that have accumulated in the EC before giving up. There may be more events pending that have not been cleared.", "label": "KlogAcpiEcStaleEvents" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "failed to remove space handler", "advice": "The ACPI Embedded Controller (EC) driver failed to remove the EC address space handler.", "label": "KlogAcpiEcHandlerRemoveFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "failed to remove gpe handler", "advice": "The ACPI Embedded Controller (EC) driver failed to remove the EC General Purpose Events (GPE) handler.", "label": "KlogAcpiEcHandlerRemoveFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "While parsing/handling command line", "advice": "The ACPI debugger failed to parse the debug command", "label": "KlogAcpiDbgParseError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid Reference Class 0x", "advice": "An ACPI error occurred getting an ACPI object reference. The reference class was not LOCAL, ARG or DEBUG.", "label": "KlogAcpiRefClassInvalid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "error while performing ARS to find poison:", "advice": "The ACPI NFIT (NVDIMM Firmware Interface Table) driver encountered an error while performing Address Range Scrub, so aborting initialization. ARS should never fail.", "label": "KlogAcpiNfitArsPoison" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Failed to set initial power state", "advice": "The ACPI fan driver was unable to update the fan device power state", "label": "KlogAcpiFanPowerState" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Could not start debugger thread", "advice": "The ACPI debugger could not start a kernel thread to execute a debug command, most probably a kernel resource issue.", "label": "KlogAcpiDbgThreadErr" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Possible overflow of internal debugger buffer", "advice": "The ACPI debugger detected a error when evaluating an ACPI object or method, possibly a buffer overflow bug in the ACPI debugger.", "label": "KlogAcpiDbgBufOverflow" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "while executing .* from debugger", "advice": "The ACPI debugger detected a error when evaluating an ACPI object or method.", "label": "KlogAcpiDbgErr" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "While parsing method arguments", "advice": "The ACPI debugger could not parse the debugger command line (incorrect method arguments), most probably a user error.", "label": "KlogAcpiDbgCmdLine" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "While parsing command line", "advice": "The ACPI debugger could not parse the debugger command line, most probably a user error.", "label": "KlogAcpiDbgCmdLine" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "(.*): Object must be a control method", "advice": "An error occurred disassembling an ACPI method, the namespace node was not an ACPI method.", "label": "KlogAcpiObjNotControlMethod" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Target must be [Buffer/Integer/String/Reference]", "advice": "An error occurred storing an ACPI object that was not the expected object type of ACPU buffer, integer, string or reference.", "label": "KlogAcpiObjStoreInvalidSrcType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Cannot assign type .* to .*source must be type Pkg", "advice": "An error occurred storing an ACPI object that was not an ACPI package to a named object that was an ACPI package, this is not allowed.", "label": "KlogAcpiObjStoreInvalidSrcType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid _FIT", "advice": "ACPI _FIT (Firmware Interface Table) method returned an object that was not the expected ACPI buffer object type.", "label": "KlogAcpiInvalidFitObject" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Target is not of type .*Package.*BufferField", "advice": "ACPI execution engine failed to store a value in an ACPI buffer or Package Element because the destination type was incorrect. The AML code in the firmware has a bug.", "label": "KlogAcpiInvalidDestinationType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Source must be type .*Integer.*Buffer.*String.*, found", "advice": "ACPI execution engine failed to store a value in an ACPI buffer or Package Element because the source type was incorrect. The AML code in the firmware has a bug.", "label": "KlogAcpiInvalidSourceType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "During invocation of sleep state", "advice": "Invoking one of the ACPI sleep states (S0 through to S5) failed to complete, either when trying to transition to the sleep state or returning from it.", "label": "KlogAcpiSleepError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "No IRQ available for", "advice": "The ACPI driver failed to allocate an IRQ to a PCI link, possibly because of previous IRQ allocations that have precedence. A workaround is to use kernel parameter pci=noacpi or acpi=off", "label": "KlogAcpiPciLinkIrq" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "ACPI: Invalid data", "advice": "ACPI _BCL method (Query List of Brightness Control Levels Supported) returned a package that did not contain integer brightness levels", "label": "KlogAcpiBclInvalidData" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "failed to merge updated NFIT", "advice": "ACPI NFIT driver failed to merge the new NFIT from the _FIT object and resorted to using the previous (old) one instead", "label": "KlogAcpiNfitMergeError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "failed to evaluate _FIT", "advice": "ACPI NFIT driver failed to evaluate the _FIT (Firmware Interface Table) object and no buffer was returned causing the NFIT notify event to fail", "label": "KlogAcpiFitEvalError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "error initializing acpi_desc:", "advice": "ACPI NFIT driver failed to initialize, either because it was out of memory (unlikely) or the NVDIMM bus failed to register", "label": "KlogAcpiNfitInitFail" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "new nfit deletes entries", "advice": "ACPI NFIT driver could not delete NFIT structure entries, this is funcionality is not currently supported by the ACPI NFIT driver", "label": "KlogAcpiNfitDeleteNoSupport" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "failed to find NFIT", "advice": "ACPI NFIT driver could not find an ACPI NFIT table", "label": "KlogAcpiNfitNoTable" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "spa.* exceeds max mappings", "advice": "ACPI NFIT driver failed to make a NFIT DIMM mapping, exceeded the configured maximum allowed", "label": "KlogAcpiNfitMappingsExceeded" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "spa.* dimm: .* not found", "advice": "ACPI NFIT driver could not map a NFIT DIMM, device is not enabled.", "label": "KlogAcpiNfitDimmNotFound" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "failed to find DCR", "advice": "ACPI NFIT driver could not find a Device Control Region for a DIMM, device is not enabled.", "label": "KlogAcpiNfitNoDcr" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "duplicate DCR detected:", "advice": "ACPI NFIT driver found multiple Device Control Regions for a DIMM, the first one found was selected.", "label": "KlogAcpiNfitDuplicateDcr" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "failed to retrieve_STA, disabling...", "advice": "ACPI NFIT driver could not evaluate the _STA object for an NFIT device, so it was not enabled", "label": "KlogAcpiNfitNoAddr" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "no ACPI.NFIT device with _ADR .*, disabling...", "advice": "ACPI NFIT driver could not find a child device with a specific address, so it was not enabled", "label": "KlogAcpiNfitNoAddr" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "unknown table .* parsing nfit", "advice": "ACPI NFIT driver found an unknown NFIT structure type and cannot parse this particular NFIT structure", "label": "KlogAcpiNfitInvalidType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "underrun cmd: .* buf_len: .* out_len:", "advice": "ACPI NFIT driver could not send a control message, output buffer overran", "label": "KlogAcpiNfit" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Table .* OEM:.* not found in RSDT/XSDT", "advice": "ACPI could not found a specified ACPI table while evaluating table region operands. The table does not exist in the RSDT or XSDT table pointers", "label": "KlogAcpiTableNotFound" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "[DSDT] table load failed", "advice": "ACPI was unable to load the DSDT, system will be missing AML from the Differentiated System Description Table", "label": "KlogAcpiDSDTLoadFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "(.*:.*) while loading table", "advice": "ACPI was unable to load an ACPI table, an ACPI exception occurred trying to load it", "label": "KlogAcpiTableLoadFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": ".* table load failures, .* successful", "advice": "ACPI was unable to load one or more ACPI tables", "label": "KlogAcpiTableLoadFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Node is unresolved or uninitialized", "advice": "Internal ACPI error while trying to resolve an ACPI object node", "label": "KlogAcpiNodeError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "fan state failed", "advice": "ACPI could not evaluate the fan state via the _FST object, perhaps this object does not exist or the object fails to evaluate correctly.", "label": "KlogAcpiGetFanState" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _FST data", "advice": "ACPI could not evaluate the fan state via the _FST object, one of the elements in the package may be an incorrect ACPI type.", "label": "KlogAcpiGetFanStateBadData" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _FIF data", "advice": "ACPI could not evaluate the fan device information via the _FIF object, the returned object was not an ACPI package as expected.", "label": "KlogAcpiGetFanInfo" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _FIF element", "advice": "ACPI could not evaluate the fan device information via the _FIF object, the returned package contained an element that was not of the correct ACPI type.", "label": "KlogAcpiGetFanInfoBadData" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _FPS data", "advice": "ACPI could not evaluate the fan device information via the _FPS object, the returned object was not an ACPI package as expected.", "label": "KlogAcpiGetFanDevInfo" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _FPS element", "advice": "ACPI could not evaluate the fan device information via the _FPS object, the returned package contained an element that was not of the correct ACPI type.", "label": "KlogAcpiGetFanDevInfoBadData" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No memory for fan", "advice": "ACPI failed to create an ACPI fan device, there was not enough memory to allocate the device.", "label": "KlogAcpiFanNoMem" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _FIF element", "advice": "ACPI could not evaluate the fan state via the _FST object, one of the elements in the package may be an incorrect ACPI type.", "label": "KlogAcpiGetFanStateBadData" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not acquire table length at", "advice": "ACPI could not determine the length of an ACPI table. This can occur, for example, if the table cannot be mapped into memory or the header is corrupted or non-standard.", "label": "KlogAcpiTableLength" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Attempted table install failed", "advice": "An ACPI table could not be installed because the checksum was invalid.", "label": "KlogAcpiTableInstall" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Evaluating _STA", "advice": "The ACPI method _STA (Status) failed to evaluate. This may cause some device drivers to not function as expected, for example, this error is reported when the ACPI battery status cannot be evaluated and so the battery updates will not function.", "label": "KlogAcpiSTAEval" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Circular handler list in region object", "advice": "Internal corruption to the ACPI region handler list has occurred and ACPI has detected this issue while detaching a region and aborted an infinite loop while attempting to traverse the list. This has been known to occur with some firmware tripping a possible internal ACPI bug.", "label": "KlogAcpiCircularList" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Circular region list in address handler object", "advice": "Internal corruption to the ACPI region handler list has occurred and ACPI has detected this issue during deletion of a region object and aborted an infinite loop while attempting to traverse the list. This has been known to occur with some firmware tripping a possible internal ACPI bug.", "label": "KlogAcpiCircularList" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Path has too many parent prefixes.*reached beyond root node", "advice": "The firmware specified an ACPI path using too many parent ^ prefixes and reached a point where there are no parent nodes in the hierarchy and so the referenced object could not be found. The kernel cannot find the named object because of this bug in the firmware and this may lead to broken or misbehaving behaviour.", "label": "KlogAcpiPathTooManyParentPrefixes" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "mem=nopentium ignored! (only supported on x86_32)", "advice": "The kernel parameter mem=nopentium (to disable 4MB pages) was ignored as it only applies to 32 bit x86 systems.", "label": "KlogE8320BiosKernelParameter" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "e820: failed to memremap setup_data entry", "advice": "Fail to memory remap the bootloader's extensible setup_data structures.", "label": "KlogE8320MemremapSetupData" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "e820: failed to memremap indirect setup_data", "advice": "Fail to memory remap the bootloader's extensible indirect setup_data structures.", "label": "KlogE8320MemremapIndirectSetupData" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "apm: Could not register misc device", "advice": "APM misc device could not be registered. However, the driver can work without this, but userspace cannot control it.", "label": "KlogBiosApmMiscDevice" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Could not allocate an object descriptor", "advice": "The ACPI driver was unable to allocate an object descriptor from the ACPI global operand cache, see acpi_ut_allocate_object_desc_dbg().", "label": "KlogAcpiAllocObjDescriptor" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Oops, ACPI handle corrupt in", "advice": "An error occurred attempting to get an ACPI handle from a kernel device structure. The handle appears to be corrupt and invalid, so the unbinding of links to the device could not be actioned. See acpi_unbind_one(). This could be due to an ACPI kernel bug or a genenal memory corruption issue.", "label": "KlogAcpiHandleCorrupt" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Failed to create link", "advice": "The ACPI driver failed to create a sysfs link on a firmware node. Depending on the firmware node this may impede userspace from interfacing with the firmware. See acpi_bind_one().", "label": "KlogAcpiSysfsCreateLinkFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No memory for resources", "advice": "An out of memory error occurred attempting to allocate resources while creating a platform device for an ACPI device node.", "label": "KlogAcpiPlatformDeviceNoMemory" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "kset create error", "advice": "The ACPI initialization failed to create the acpi_kobj kobject and so it won't appear in /sys/firmware. This may cause some user space applications difficulties if this is not created and populated. See acpi_init().", "label": "KlogAcpiSysfsFirmwareNotCreated" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Error creating sysfs interface for device ", "advice": "An error occurred when adding a new ACPI device and the sysfs interface could not be created.", "label": "KlogAcpiSysfsDeviceInterfaceFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error registering device", "advice": "An error occurred when adding a new ACPI device, the device registration failed. See acpi_device_add().", "label": "KlogAcpi" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid reference in package", "advice": "An error occurred while trying to evaluate an ACPI reference. An element in the package had a NULL reference handle.", "label": "KlogAcpiNullReferenceInPackage" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid package element.*got reference", "advice": "An error occurred while trying to extract a ACPI package, got an ACPI reference in a package element, but was expecting a different type.", "label": "KlogAcpiInvalidPackageElement" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid package element.*got string.*buffer", "advice": "An error occurred while trying to extract a ACPI package, got a string or a buffer in a package element, but was expecting a different type.", "label": "KlogAcpiInvalidPackageElement" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid package element.*got number", "advice": "An error occurred while trying to extract a ACPI package, got an integer in a package element, but was expecting a different type.", "label": "KlogAcpiInvalidPackageElement" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Format specifies more objects.*than exist in package", "advice": "An error occurred while trying to extract an ACPI package, the format specifier specifies more object than actually exist in the package. See acpi_extract_package().", "label": "KlogAcpiBadFormatSpecifier" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Deprecated procfs I/F for AC is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared", "advice": "Using an old procfs interface for ACPI AC Adapter, this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This should be disabled for kernels > 2.6.37.", "label": "KlogAcpiDeprecatedProcfsInterface" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Deprecated procfs I/F for battery is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared", "advice": "Using an old procfs interface for ACPI battery, this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This should be disabled for kernels > 2.6.37.", "label": "KlogAcpiDeprecatedProcfsInterface" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Deprecated procfs I/F for SBS is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared", "advice": "Using an old procfs interface for ACPI battery, this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This should be disabled for kernels > 2.6.37.", "label": "KlogAcpiDeprecatedProcfsInterface" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Unsupported Throttling notifier event", "advice": "This is an internal ACPI driver error, an unknown processor throttling notifier event has been passed to acpi_processor_throttling_notifier(). This error is very unlikely and is an ACPI driver bug.", "label": "KlogAcpiUnkownCpuThrottleNotifier" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Failed to create genetlink family for ACPI event", "advice": "An internal kernel error occurred during ACPI driver genetic link initialization. See acpi_event_genetlink_init() in drivers/acpi/event.c for more information.", "label": "KlogAcpiGenetlinkInitFail" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Can not change Invalid GPE/Fixed Event status", "advice": "The ACPI_EVENT_FLAG_HANDLE bit in the event status was not set which is invalid, aborting setting a GPE or Fixed Event counter.", "label": "KlogAcpiInvalidStatus" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "ignored .* entries of .* found", "advice": "The ACPI table had more sub-table entries than expected, the extra entries were ignored.", "label": "KlogAcpiTableLargerThanExpected" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "No return value", "advice": "An ACPI object evaluation failed because the caller requested a return value but the return buffer length was zero which is not enough to store the return value.", "label": "KlogAcpiEvalZeroBufferLength" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Blank _PRS EXT IRQ resource", "advice": "An error occurred evaluating an ACPI _PRS IRQ resource, the resource was NULL or the interrupt count was zero.", "label": "KlogAcpiBlankPrsIrqResource" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Blank _CRS EXT IRQ resource", "advice": "An error occurred evaluating an ACPI _CRS IRQ resource, the resource was NULL or the interrupt count was zero.", "label": "KlogAcpiBlankCrsIrqResource" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "BIOS reported IRQ .*, using IRQ", "advice": "ACPI _CRS reported that a link should be using a specific IRQ, however a different IRQ is being used for the PCI link and _CRS has been ignored.", "label": "KlogAcpiCrsIgnoredForPciLinkIrq" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_LOW", "pattern": "_CRS .* not found in _PRS", "advice": "This error only occurs in ACPI strict mode. An interrupt specified by _CRS was not found in the _PRS, so a PCI interrupt is chosen from the last entry of the _PRS list.", "label": "KlogAcpiCrsNotInPrs" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Your BIOS is broken and requested that x2apic be disabled", "advice": "The DMAR DMAR_X2APIC_OPT_OUT bit was set so the firmware requested that the x2apic should be disabled leading to decreased system performance. The firmware opt out can be overridden using the intremap=no_x2apic_optout kernel parameter.", "label": "KlogSratEntryUnsupported" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Found unsupported SRAT entry", "advice": "The kernel detected an entry in the ACPI System Resource Affinity Table (SRAT) that was not recognised. Processor local APIC/SAPIC affinity (0), Memory affinity (1) and Processory local x2APIC affinity (2) are only supported.", "label": "KlogSratEntryUnsupported" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_LOW", "pattern": "Found unsupported x2apic \\[.*\\] SRAT entry", "advice": "This warning occurs because NUMA x2apic affinity is not enabled. Kernel config CONFIG_ACPI_NUMA must be enabled to avoid this warning.", "label": "KlogSratx2apicUnsupported" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Exceed the limit of T-state", "advice": "An attempt to change the throttling state to one that is outside the range of T-states as provided by the Throttling Supported States _TSS package. The last (and hence lowest performance) state has been selected instead.", "label": "KlogTstateLimitExceeded" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "duty_cycle spans bit 4", "advice": "The FADT Duty Cycle Offset and Duty Cycle Width is > 4, which means there are more than the maximum allowed 16 processor throttling states so throttling will be be disabled.", "label": "KlogTooManyThrottlingStates" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid package argument", "advice": "The ACPI driver attempted to extract an ACPI package but found that the ACPI object was either NULL or was not a package or was a package that had zero elements.", "label": "KlogInvalidPackageArgument" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid format argument", "advice": "The ACPI driver attempted to extract an ACPI package but found that the format was NULL or the format pointer was NULL or the format length was less than 1.", "label": "KlogInvalidFormatArgument" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Invalid buffer argument", "advice": "The ACPI driver attempted to extract an ACPI package but found that the destination buffer was NULL.", "label": "KlogInvalidBufferArgument" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Limiting number of power states to max", "advice": "The ACPI C states object (_CST) contains more C states than ACPI supports and so the kernel has had to limit this. To enable more C states, one must increase the kernel ACPI macro ACPI_PROCESSOR_MAX_POWER.", "label": "KlogLimitPowerStates" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Duplicate ACPI video bus devices for the same VGA controller", "advice": "The ACPI video driver has found a duplicate ACPI video bus device for the same VGA controller. If the current driver does not work, one can try to work around this using the video.allow_duplicates=1 kernel parameter.", "label": "KlogDuplicateACPIVideoBus" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "TSC doesn't count with P0 frequency", "advice": "The AMD processor has the x86 constant TSC feature enabled but the firmware has not set bit 24 of the MSR MSR_K7_HWCR and so the processor TSC does not count in the P0 frequency level. This is a firmware bug.", "label": "KlogAmdTscP0FreqNoCount" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "BIOS strings suggest APM bugs, disabling power status reporting", "advice": "The firmware is known to have broken Advanced Power Management (APM), so APM has been disabled.", "label": "KlogApmBiosBroken" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "BIOS strings suggest APM reports battery life in minutes and wrong byte order", "advice": "The firmware is known to report the battery life in minutes in the wrong byte order, so the kernel has detected this and will work around the firmware bug. This is known to occur on many Sony laptops.", "label": "KlogApmMinuteSwapBytes" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Disabling ACPI support", "advice": "The machine has had ACPI support disabled because either the firmware is way too old, or it is known to have broken or bad ACPI support. One can try to override this with the acpi=force kernel parameter, but the machine may still hang or not work correctly.", "label": "KlogAcpiDisabled" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "acpi=force override", "advice": "The kernel has been forced to enabled ACPI. This is sometimes required because ACPI support has been disabled because the firmware is too old or was blocklisted because it has known ACPI issues.", "label": "KlogAcpiForceOverride" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Invalid passive threshold", "advice": "The ACPI driver attempted to evaluate the ACPI Passive List (_PSL) object for a particular thermal zone but this failed. The passive cooling for that particular thermal zone has been invalidated.", "label": "KlogInvalidPassiveThreshold" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Critical threshold", "advice": "The firmware critical trip point has been overridden using the kernel critical trip point kernel parameter crt.", "label": "KlogCriticalThreshold" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Found unsupported MADT entry", "advice": "The ACPI Multiple APIC Description Table (MADT) contains an entry that has an unknown MADT header type. This will be ignored, but it does suggest a broken or buggyy ACPI MADT.", "label": "KlogMadtEntryUnsupported" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown interrupt routing model", "advice": "An internal ACPI driver bug has occurred. acpi_bus_init_irq has detected an unknown interrupt routing model in acpi_irq_model. This most probably is a kernel bug.", "label": "KlogAcpiIrqModelUnknown" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Unable to map SBF", "advice": "The kernel was unable to map the ACPI BOOT table and hence unable to determine the port to set the Simple Boot Flag.", "label": "KlogBootTableNotMapped" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "DMAR: Recommended TLB entries for ISOCH unit is 16; your BIOS set", "advice": "The recommended number of TLB entries for the ISOCH DMAR unit should be 16, however the firmware has misconfigured this.", "label": "KlogDmarTlbEntriesMisconfigured" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Cannot transition to non-D0 state from D3", "advice": "ACPI cannot transition a device from a D3 state to a non-D0 state.", "label": "KlogAcpiD0TransitionFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Cannot set device to a higher-powered state than parent", "advice": "ACPI cannot transition a device to a higher power state to that of the parent device.", "label": "KlogAcpiHigherPowerStateThanParent" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Device \\[.*\\] failed to transition to", "advice": "ACPI cannot transition a device to a different power state.", "label": "KlogAcpiPowerStateTransitionFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _PRS IRQ", "advice": "The ACPI Possible Resource Settings (_PRS) object returned an invalid IRQ mapping from a PCI interrupt pin to the interrupt input of an interrupt controller.", "label": "KlogAcpiInvalidPrsIrq" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_INFO", "pattern": "firmware reports .*:.*:.* PCI INT .* connected to .*; changing to", "advice": "The kernel has detected a PCI interrupt configuration than needed to be quirked to make it work correctly.", "label": "KlogAcpiPciIntRemap" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_INFO", "pattern": "Firmware reports .*:.*:.* PCI INT .* connected to .*; changing to", "advice": "The kernel has detected a PCI interrupt configuration than needed to be quirked to make it work correctly.", "label": "KlogAcpiPciIntRemap" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_INFO", "pattern": "Cannot reroute IRQ %d to legacy IRQ: unknown mapping", "advice": "Some chipsets generate a legacy INTx when the IRQ entry in the chipset's IO-APIC is masked. When this INTx generation cannot be disabled, kernel reroute these interrupts to their legacy equivalent to get rid of spurious interrupts. The kernel cannot route to legacy IRQ correctly.", "label": "KlogAcpiPciIntMap" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_INFO", "pattern": "can't derive routing for PCI INT", "advice": "Kernel cannot derive an IRQ for this device from a parent bridge's PCI interrupt routing entry.", "label": "KlogAcpiPciIntRount" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_INFO", "pattern": "PCI INT .*: no GSI - using ISA IRQ", "advice": "The kernel cannot register Global System Interrupt (no GSI), instead, using ISA IRQ.", "label": "KlogAcpiPciIntRegister" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_LOW", "pattern": "PCI INT .*: not connected", "advice": "PCI IRQ is invalid, Kernel cannot connect the PCI interrupt.", "label": "KlogAcpiPciIntInvalid" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_INFO", "pattern": "PCI INT .*: no GSI", "advice": "The kernel cannot register Global System Interrupt (no GSI).", "label": "KlogAcpiPciIntOnGSI" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_LOW", "pattern": "PCI INT .*: failed to register GSI", "advice": "The kernel failed to register Global System Interrupt(GSI).", "label": "KlogAcpiPciIntRegsiterFail" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "No IOAPIC for GSI", "advice": "The kernel could not find an IOAPIC that manages the Global System Interrupt (GSI), so no IOAPIC will be configured with that GSI.", "label": "KlogAcpiNoIoapicForGsi" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "[T|t]emperature above threshold, cpu clock throttled", "advice": "Test caused CPU temperature above critical threshold. The CPU has been throttled to run slower because of over-heating above the critical threshold. CPU throttling will be turned off once the CPU has cooled sufficiently. Frequent throttling may indicate poor thermal design on the machine.", "label": "KlogThermalOverrun" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Possible thermal failure", "advice": "A Pentium class Intel CPU has had a thermal machine check exception caused by hot CPU. If this persists it may indicate poor thermal design on the machine.", "label": "KlogThermalOverrun" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "BIOS never enumerated boot CPU", "advice": "The boot processor is not enumerated!", "label": "KlogBiosBootCpuNotEnumerated" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "acpi_shpchprm.*_HPP fail", "advice": "Hotplug _HPP method failed", "label": "KlogAcpiHppMethodFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "shpchp.*acpi_pciehprm.*OSHP fail", "advice": "ACPI Hotplug OSHP method failed", "label": "KlogAcpiHotplugOshpMethodFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "shpchp.*acpi_shpchprm.*evaluate _BBN fail", "advice": "Hotplug _BBN method is missing", "label": "KlogAcpiHotPlugBbnMissing" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error while parsing _PSD domain information", "advice": "_PSD domain information is corrupt!", "label": "KlogAcpiPsdParsingError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Wrong _BBN value, reboot and use option 'pci=noacpi'", "advice": "The BIOS has wrong _BBN value, which will make PCI root bridge have wrong bus number", "label": "KlogAcpiWrongBbnValue" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI.*apic on CPU.* stops in C2", "advice": "The local apic timer incorrectly stops during C2 idle state.The ACPI specification forbids this and Linux needs the local APIC timer to work. The most likely cause of this is that the firmware uses a hardware C3 or C4 state that is mapped to the ACPI C2 state.", "label": "KlogAcpiApicStopsInC2" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Failed to request resources for .* on irqchip", "advice": "BIOS may not set up a specific pin or a GPIO to be an IRQ. This can cause a device, such as a touchscreen, that depends on this IRQ to fail.", "label": "KlogBiosIrqRequestFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Disabling IRQ", "advice": "The kernel detected an irq storm. This is most probably an IRQ routing bug.", "label": "KlogBiosIrqRoutingBug" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not enable.*event", "advice": "An ACPI fixed event could not be enabled. This can affect fixed events such as the power management timer, power button, sleep button, RTC alarm, wake status, system bus master request or the global release lock status.", "label": "KlogAcpiEventEnableFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not disable.*events", "advice": "An ACPI fixed event could not be disabled. This can affect fixed events such as the power management timer, power button, sleep button, RTC alarm, wake status, system bus master request or the global release lock status.", "label": "KlogAcpiEventDisableFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "During return object analysis", "advice": "The ACPI interpreter attempted to convert or repair a return object of an unexpected type, however a fatal error occurred during the conversion. Undefined AML execution behaviour may occur.", "label": "KlogAcpiObjConvertFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "MMIO size insufficient to access LTR", "advice": "Intel Lynxpoint Low Power Subsystem have a set of MMIO mapped registers that provide access to the LTR (Latency Tolerance Reporting). However, the MMIO size is smaller than expected. The corresponding I/O resource for this is incorrect, it should have a resource size set to a minimum of 24 bytes.", "label": "KlogAcpiLpssMmioSizeTooSmall" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error installing notify handler", "advice": "Failed to install a notify handler for the ACPI video driver. The ACPI video driver cannot handle notify events to change brightness levels or turn the display on/off.", "label": "KlogAcpiNotifyHandlerInstallFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Can't remove video notify handler", "advice": "Failed to remove a notify handler for the ACPI video driver. This is most probably an internal kernel issue.", "label": "KlogAcpiNotifyHandlerRemoveFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not register bus type", "advice": "The ACPI driver failed to register the ACPI buse type. This is not deemed to be fatal, but it is a kernel error that should be investigated. See acpi_scan_init().", "label": "KlogAcpiScanBusTypeRegisterFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "failed to create clocks", "advice": "ACPI platform clocks failed to initialize making the creation of the platform device for the ACPI device node fail. See acpi_create_platform_device() and acpi_create_platform_clks().", "label": "KlogAcpiPlatformClockCreateFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "platform device creation failed:", "advice": "Failed to register the ACPI device node. platform_device_register_full() failed which makes the platform device creation fail. See platform_device_register_full() and acpi_create_platform_device().", "label": "KlogAcpiPlatformDeviceCreateFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "cannot add bridge to acpi list", "advice": "The ACPI bus scan failed and so a root bridge hotplug insertion failed. See handle_root_bridge_insertion().", "label": "KlogAcpiPciRootBridgeAddFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Incorrect return type .* requested .*", "advice": "An ACPI object find and evaluate has failed, the return object requested does not match the requested type. This is most probably a firmware bug.", "label": "KlogAcpiIncorrectReturnType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown field access type 0x", "advice": "Attempted to decode an ACPI field definition failed because the firmware attempted to use an unknown access type. Only byte, word, dword, qword and 'any' access types are allowed.", "label": "KlogAcpiUknownFieldAccessType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Null RegionNode", "advice": "Construction of an object and connecting it to a parent node failed because a region node was unexpectedly NULL. See acpi_ex_prep_field_value().", "label": "KlogAcpiNullRegionNode" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Null Index Object during field prep", "advice": "Construction of an object and connecting it to a parent node failed for a local index field. See acpi_ex_prep_field_value().", "label": "KlogAcpiNullIndexObject" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No object attached to node", "advice": "Failed to resolve an ACPI namespace node to a valued object, there is no object attached to the given node. See acpi_ex_resolve_node_to_value().", "label": "KlogAcpiNoObjectAttachedToNode" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Object not a Package, type", "advice": "Failed to resolve an ACPI namespace node to a valued object, the source object was not an ACPI package as expected.", "label": "KlogAcpiObjectNotPackage" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Object not a Buffer, type", "advice": "Failed to resolve an ACPI namespace node to a valued object, the source object was not an ACPI buffer as expected.", "label": "KlogAcpiObjectNotBuffer" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Object not a String, type", "advice": "Failed to resolve an ACPI namespace node to a valued object, the source object was not an ACPI string as expected.", "label": "KlogAcpiObjectNotString" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Object not a Integer, type", "advice": "Failed to resolve an ACPI namespace node to a valued object, the source object was not an ACPI integer as expected.", "label": "KlogAcpiObjectNotInteger" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Untyped entry .* no attached object", "advice": "Failed to resolve an ACPI namespace node to a valued object, the source object was an ACPI ANY type and so there is no object associated with it.", "label": "KlogAcpiUntypedEntry" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unsupported Reference type 0x", "advice": "Failed to resolve an ACPI namespace node to a valued object, the source object reference class must be a table, refof or index reference class.", "label": "KlogAcpiUnsupportedReferenceType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Node .* Unknown object type 0x", "advice": "Failed to resolve an ACPI namespace node to a valued object, the source object was an unknown type.", "label": "KlogAcpiUnknownObjectType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid internal name", "advice": "An error occurred turning an ACPI internal name into an external (printable) form. The required length exceeded the intenral name length, causing a bounds error. See acpi_ns_externalize_name().", "label": "KlogAcpiInvalidInternalName" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid zero length descriptor in resource list", "advice": "An error occurred turning an ACPI resource list into a byte stream of resources. The resource length was zero, which is an illegal length.", "label": "KlogAcpiInvalidZeroLengthDescriptor" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "is not an ACPI Operand object", "advice": "An internal ACPI error occurred freeing an ACPI object or adding it to the object cache. The descriptor type of the given object was not a descriptor type operand. See acpi_ut_delete_object_desc().", "label": "KlogAcpiNotOperandObject" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Cannot convert to external object - unsupported Reference Class .* in object", "advice": "An internal ACPI error occurred getting the size of a simple ACPI object. A local reference object with a reference class that was not a refclass name class is not currently supported (such as locals and args) in the ACPI driver and may need implementing. See acpi_ut_get_simple_object_size(). ", "label": "KlogAcpiUnsupportedReferenceClass" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Cannot convert to external object - unsupported type .* in object", "advice": "An internal ACPI error occurred getting the size of a simple ACPI object, the object was of a type that is not supported.", "label": "KlogAcpiUnsupportedType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Local index .* is invalid .*max", "advice": "An error occurred getting the node associated with a local or an arg. The local index for the refclass local type was greater than ACPI_METHOD_MAX_LOCAL. See acpi_ds_method_data_get_node().", "label": "KlogAcpiLocalIndexInvalid" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Arg index .* is invalid .*max", "advice": "An error occurred getting the node associated with a local or an arg. The arg index for the refclass arg type was greater than ACPI_NETHOD_MAX_ARG. See acpi_ds_method_data_get_node().", "label": "KlogAcpiArgIndexInvalid" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Type .* is invalid", "advice": "An error occurred getting the node associated with a local or an arg. The given type is not a refclass local or refclass arg type. See acpi_ds_method_data_get_node().", "label": "KlogAcpiTypeInvalid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Null object descriptor pointer", "advice": "An error occurred retrieving the value of a selected Arg or Local for a method, the descriptor pointer was NULL. See acpi_ds_method_data_get_value().", "label": "KlogAcpiNullObjectDescriptorPtr" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Uninitialized Arg.* at node", "advice": "An error occurred retrieving the value of a selected Arg or Local for a method, an argument to the method was not initialised. This is probably a firmware bug. See also acpi_ds_method_data_get_value().", "label": "KlogAcpiUnitializedArg" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Not a Arg/Local opcode: 0x", "advice": "An error occurred retrieving the value of a selected Arg or Local for a method. This is probably a firmware bug. See also acpi_ds_method_data_get_value().", "label": "KlogAcpiNotArgLocalOpcode" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Field .* access width .* too large for region", "advice": "An access type is larger than a region, for example, where a region is one byte in length and a field of dword access is specified. This is a bug in the firmware and the access to the region fails. This can lead to unexpected behaviour.", "label": "KlogAcpiFieldAccessWidthTooLarge" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Field .* Base.*Offset.*Width .* is beyond end of region", "advice": "An access exceeds the region length, in this case the base + offset + access width is larger than the region size. For example, this could be a dword access one byte from the end of region. This is a bug in the firmware and the access to the region fails. This can lead to unexpected behaviour.", "label": "KlogAcpiFieldEndOfRegion" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Region .*ID=.* not implemented", "advice": "An access (read or write) to an operation region has been attempted and a region for this has not been implemented, this may need to be implemented to provide the expected behaviour. See acpi_ex_access_region().", "label": "KlogAcpiRegionNotImplemented" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Region .*ID=.* has no handler", "advice": "An access (read or write) to an operation region has been attempted and a region handler for this has not been implemented, this may need to be implemented to provide the expected behaviour. See acpi_ex_access_region().", "label": "KlogAcpiKlogRegionNoHandler" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Index value 0x.* overflows field width 0x", "advice": "A write of a value larger than the maximum value that can fit into a register has be detected. The bit length of the field is not wide enough or the value is larger than expected. This is normally a bug in the firmware. See acpi_ex_register_overflow().", "label": "KlogAcpiIndexValueOverflow" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Wrong object type in field I/O", "advice": "A read or write of a data to an I/O field failed. The object is of the wrong type. See acpi_ex_field_datum_io().", "label": "KlogAcpiWrongObjectType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown UpdateRule value: 0x", "advice": "An attempt to apply a field update rule to a field write failed because the update rule was unknown. See acpi_ex_write_with_update_rule().", "label": "KlogAcpiUknownUpdateRuleValue" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Field size .* is too large for buffer", "advice": "An attempt to extract the current value of a given field failed because the field size was too large for the given buffer. See acpi_ex_extract_from_field().", "label": "KlogAcpiFieldSizeTooLarge" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "GPE0 block .* overlaps the GPE1 block .* Ignoring GPE1", "advice": "An error occurred initializing the GPE data structures, the GPE0/GPE1 blocks overlap each other. This is normally a bug in the ACPI FADT GPE block address config.", "label": "KlogAcpiGpe0BlockOverlapsGpe1Block" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Maximum GPE number from FADT is too large: 0x", "advice": "There were more than 255 GPEs specified in the FADT. The ACPI driver only supports a maximum of 255 GPEs.", "label": "KlogAcpiMaxGpeTooLarge" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "For GPE 0x.* found both _L.* and _E.* methods", "advice": "A GPE has a level _Lxx and an edge _Exx method associated with it, which is incorrect, it should have one or the other but not both.", "label": "KlogAcpiGpeFoundMultipleMethods" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Cannot acquire Mutex .* null thread info", "advice": "An attempt to acquire an ACPI AML mutex failed, the caller must have a valid thread state structure. This is an internal ACPICA driver bug. See acpi_ex_acquire_mutex().", "label": "KlogAcpiMutexAcquireFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Cannot acquire Mutex \\[.*\\], current SyncLevel is too large", "advice": "An ACPI mutex was not acquired because the sync level was too large. The per-thread sync level must be less or equal to the sync level of the method being executed. This error occurs because the interpreter attempted to avoid possible deadlocks. See acpi_ex_acquire_mutex().", "label": "KlogAcpiMutexAcquireFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Cannot release Mutex .* not acquired", "advice": "An ACPI mutex was not already previously acquired, so it cannot be released.", "label": "KlogAcpiMutexReleaseFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Cannot release Mutex .* null thread info", "advice": "An ACPI mutex could not be released, the thread ID was null and not valid. This maybe an internal ACPICA bug.", "label": "KlogAcpiMutexReleaseFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Thread .* cannot release Mutex .* acquired by thread", "advice": "An ACPI mutex is already owned but the thread making the mutex release is not the owner, so the release was rejected.", "label": "KlogAcpiMutexReleaseFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Cannot release Mutex .* SyncLevel mismatch: mutex .* current", "advice": "An ACPI mutex could not be released, the sync level of the mutex must be equal to that of the current sync level. Attempting to release a mutex of a different level means that the mutex ordering rule has been violated.", "label": "KlogAcpiMutexReleaseFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not transition to ACPI mode", "advice": "A request to transfer a system into ACPI mode has failed. This could be because the ACPI FADT does not have SMI_CMD defined, or that the FADT ACPI_ENABLE and ACPI_DISABLE flags are both zero, or a SMI command failed to work.", "label": "KlogAcpiAcpiModeTransitionFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Hardware did not enter ACPI mode", "advice": "Could not transfer a system into the ACPI mode. A SMI command was issued however the system failed to transition to the ACPI mode after 3 seconds of waiting. Perhaps SMIs are broken or that the firmware cannot transition the machine to ACPI mode.", "label": "KlogAcpiAcpiModeNotEntered" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not exit ACPI mode to legacy mode", "advice": "A request to transfer a system into legacy BIOS mode has failed. This could be because the ACPI FADT does not have SMI_CMD defined, or that the FADT ACPI_ENABLE and ACPI_DISABLE flags are both zero, or a SMI command failed to work.", "label": "KlogAcpiAcpiModeToLegacyModeFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Target is not a Reference or Constant object", "advice": "An attempt to store an ACPI value into a location failed because the target is not a reference or a constat object. See acpi_ex_store().", "label": "KlogAcpiTargetNotRefOrConstantObject" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown Reference Class 0x", "advice": "An ACPI store op-code failed to execute because the an unknown reference class type was used. The store operation will fail to execute leading to undefined behaviour. This is possibly an AML compiler bug.", "label": "KlogAcpiUnknownRefClass" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Source must be Integer/Buffer/String type, not", "advice": "An attempt to store an ACPI object into an indexed buffer or package element failed because the source type is invalid. See acpi_ex_store_object_to_index(). This is most likely a firmware bug.", "label": "KlogAcpiBadSourceType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Target is not a Package or BufferField", "advice": "An attempt to store an ACPI object into an indexed buffer or package element failed because the targe type is not a package or a buffer field.", "label": "KlogAcpiTargetNotPackageOrBufferField" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No pointer back to namespace node in buffer object", "advice": "An attempt to get a buffer length and initializer byte list failed because there was no pointer that referenced back to the name space node in the given buffer object. See acpi_ds_get_buffer_arguments().", "label": "KlogAcpiBadPointeInBufferObject" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No pointer back to namespace node in package", "advice": "An attempt to get a buffer length and initializer byte list failed because there was no pointer that referenced back to the name space node in the given package. See acpi_ds_get_package_arguments().", "label": "KlogAcpiBadPointerInPackage" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not disable fixed event", "advice": "An ACPI fixed event could not be disabled, acpi_disable_event() failed to disable it. See acpi_ev_terminate().", "label": "KlogAcpiFixedEventDisableFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not remove SCI handler", "advice": "The ACPI SCI handler could not be removed. See acpi_ev_terminate().", "label": "KlogAcpiSciHandlerRemoveFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not remove Global Lock handler", "advice": "The ACPI Global Lock Handler could not be removed. See acpi_ev_terminate().", "label": "KlogAcpiGlobalLockHandlerRemoveFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not disable GPEs in GPE block", "advice": "The ACPI GPEs could not be disabled. See acpi_ev_terminate().", "label": "KlogAcpiGPEsDisableFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "Could not delete GPE handlers", "advice": "The ACPI GPE handlers could not be deleted. See acpi_ev_terminate().", "label": "KlogAcpiGPEHandlersDeletedFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid/unsupported SerialBus resource descriptor: BusType 0x", "advice": "An ACPI resource descriptor failed a validation check, the bus type field for a serial bus resource descriptor is invalid. See acpi_ut_validate_resource(). This appears to be a firmware bug.", "label": "KlogAcpiBadSerialBusResourceDescriptor" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid resource descriptor length: Type 0x.*, Length 0x.* MinLength 0x.*", "advice": "An ACPI resource descriptor failed a validation check, the length of the resource descriptor is invalid. See acpi_ut_validate_resource(). This appears to be a firmware bug.", "label": "KlogAcpiInvalidResourceDescriptorLength" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No results on result stack", "advice": "Failed to pop an object off the ACPI walk result stack, no results on the stack. This is an internal ACPICA bug and should not occur, see acpi_ds_result_pop().", "label": "KlogAcpiResultStackNoResults" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No result state for result stack", "advice": "Failed to pop an object off the ACPI walk result stack, no result state on the stack. This is an internal ACPICA bug and should not occur, see acpi_ds_result_pop().", "label": "KlogAcpiResultStackNoState" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Result stack is empty! State=", "advice": "Failed to pop an object off the ACPI walk result stack, the result stack is NULL (empty). This is normally triggered by buggy firmware attempting to pop values off the stack when it is empty.", "label": "KlogAcpiResultStatckEmpty" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No result objects on result stack, State=", "advice": "Failed to pop an object off the ACPI walk result stack, there were no result objects on the result stack.", "label": "KlogAcpiResultStatckNoResultObjects" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Result stack is full", "advice": "Failed to push an object onto the current ACPI result stack, the result stack is full up. This is an internal ACPICA bug.", "label": "KlogAcpiResultStackFull" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to extend the result stack", "advice": "Failed to push an object onto the current ACPI result stack, the stack could not be extended.", "label": "KlogAcpiResultStackExtendFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No free elements in result stack", "advice": "Failed to push an object onto the current ACPI result stack, there are no free element slots in the stack. This is an internal ACPICA bug.", "label": "KlogAcpiResultStackNoFreeElements" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No result stack frame during push", "advice": "Failed to push an object onto the current ACPI result stack, there appears to be no results stack to push the object onto. This is an internal ACPICA bug.", "label": "KlogAcpiResultStackPushNoFrame" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Null Object! Obj=.* State=.* Num=.*", "advice": "Failed to push an object onto the current ACPI result stack, the object is NULL.", "label": "KlogAcpiResultStackNullObject" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Result stack overflow: State=.* Num=", "advice": "Failed to push an object onto the ACPI walk_state result stack. The stack has overflowed.", "label": "KlogAcpiResultStackOverflow" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Insufficient result stack size", "advice": "Failed to pop an object off the ACPI walk_state result stack. The result stack had insufficient objects on it to pop off.", "label": "KlogAcpiResultStackSizeInsufficient" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Object stack overflow.*Obj=.*State=.*", "advice": "Failed to push an object onto the walk state object/operand stack, a maximum of 8 operands are allowed.", "label": "KlogAcpiObjectStackOverflow" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Object stack underflow.*Count=.*State=.*Ops=", "advice": "Failed to pop an object from the walk state object/operand stack, there were no operands left on the stack.", "label": "KlogAcpiObjectStackUnderflow" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "is not a valid walk state", "advice": "Failed to delete an ACPI walk state, the given walk state is not an ACPI walk state type. This is an internal ACPICA bug. see acpi_ds_delete_walk_state().", "label": "KlogAcpiWalkStateInvalid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "walk still has a scope list", "advice": "Failed to delete an ACPI walk state, the walk state has an open scope list. This is an internal ACPICA bug. See acpi_ds_delete_walk_state().", "label": "KlogAcpiWalkStateHasScopeList" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Target of Create Field is not a Buffer object", "advice": "Failed to initialise an ACPI buffer field, the target of the Create Field op is not a buffer object. This is a firmware bug.", "label": "KlogAcpiTargetNotBufferObject" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "destination not a NS Node", "advice": "Failed to initialise an ACPI buffer field, the destination is not an ACPI name space node. This is a firmware bug.", "label": "KlogAcpiDestinationNotNameSpaceNode" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Attempt to CreateField of length zero", "advice": "Failed to initialise an ACPI buffer field, CreateField used with a zero field length which is illegal. This is a firmware bug.", "label": "KlogAcpiZeroLengthCreateField" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown field creation opcode 0x", "advice": "Failed to initialise an ACPI buffer field, was expecting a CreateField, CreateBitField, CreateByteField, CreateWordField, CreateDWordField or a CreateQWordField opcode, but got a different AML opcode instead. This is a firmware bug.", "label": "KlogAcpiUknownFieldCreationOpcode" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Field .* at .* exceeds Buffer .* size .*bits", "advice": "Failed to initialise an ACPI buffer field, the field exceeded the buffer size provided. This is a firmware bug.", "label": "KlogAcpiFieldExceedsBuffer" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": ".*bad operand.*status 0x", "advice": "Failed to get buffer field Buffer and Index, could not resolve operands. A call to acpi_ex_resolve_operands() failed and returned an error status code. See acpi_ds_eval_buffer_field_operands().", "label": "KlogAcpiBadOperand" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No Sleep State object returned from", "advice": "An evaluation of the _Sx namespace object containing register values for the sleep state failed. It is entirely possible that the _Sx is broken in the firmware. See also acpi_get_sleep_type_data():", "label": "KlogAcpiNoSleepStateObject" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Sleep State return object is not a Package", "advice": "An evaluation of the _Sx namespace object containing register values for the sleep state failed. The kernel was expecting an ACPI package to be returned, but some different type was returned instead. The ACPI firmware object _Sx is buggy.", "label": "KlogAcpiSleepStateObjectNotPackage" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_INFO", "pattern": "While evaluating Sleep State [\\_S1_]", "advice": "The exception comes from kernel cannot find _S1 namespace object that contains the register values for the sleep state when kernel would like to setup all the sleep state information. This means that the kernel does not know how to enter the S1 sleep state, however, it should not be a problem if the S1 sleep state isn't supported intentionally.", "label": "KlogAcpiSleepStateEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_INFO", "pattern": "While evaluating Sleep State [\\_S2_]", "advice": "The exception comes from kernel cannot find _S2 namespace object that contains the register values for the sleep state when kernel would like to setup all the sleep state information. This means that the kernel does not know how to enter the S2 sleep state, however, it should not be a problem if the S2 sleep state isn't supported intentionally.", "label": "KlogAcpiSleepStateEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "While evaluating Sleep State", "advice": "Failed to evaluate _Sx namespace object that contains the register values for the sleep state.", "label": "KlogAcpiSleepStateEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Resize of Root Table Array is not allowed", "advice": "An attempt to resize the ACPI Root Table Array failed because the ACPI global root table flag ACPI_ROOT_ALLOW_RESIZE is not set.", "label": "KlogAcpiRootTableArrayResize" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not allocate new root table array", "advice": "Failed to allocate memory for the root table array.", "label": "KlogAcpiRootTableArrayAllocFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Bad destination type during conversion: 0x", "advice": "Destination type should be one of Integer, Buffer Field, Local Bank Field, Local Index Field, String or Buffer.", "label": "KlogAcpiBadDestinationType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown Target type ID 0x.* AmlOpcode 0x.* DestType", "advice": "An unknown target type was found in attempting to perform implicit type conversion.", "label": "KlogAcpiUnknownTargetTypeId" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "SMBus/IPMI/GenericSerialBus write requires Buffer, found type", "advice": "A SMBus, IPMI or GenericSerialBus write to a named field required a buffer to write into, but got a different type instead.", "label": "KlogAcpiWriteRequiresBuffer" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "SMBus/IPMI/GenericSerialBus write requires Buffer of length .*, found length", "advice": "A write buffer was too small. SMBus, IPMI and GenericSerialBus writes require a buffer of size 34, 66 and 34 bytes respectively.", "label": "KlogAcpiWriteBufferSize" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Could not acquire AML Interpreter mutex", "advice": "The AML interpreter mutex could not be acquired when entering the interpreter execution region. This is a fatal system error.", "label": "KlogAcpiAmlMutexAcquireFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Could not acquire AML Namespace mutex", "advice": "The AML namespace mutex could not be acquired when entering the interpreter execution region. This is a fatal system error.", "label": "KlogAcpiAmlMutexAcquireFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid descriptor type 0x", "advice": "An invalid descriptor type was found while obtaining a reference to a target object.", "label": "KlogAcpiInvalidDescriptorType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid object type: 0x", "advice": "The ACPI interpreter failed to concatenate two objects of the same type because one or more of the types was an invalid object type. Expected types are ACPI_TYPE_INTEGER, ACPI_TYPE_STRING, ACPI_TYPE_BUFFER.", "label": "KlogAcpiConcatenateInvalidObjectType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid numeric logical opcode:", "advice": "An invalid opcode was found while execute a logical Numeric AML opcode. For these Numeric operators, the opcode should be LAnd or LOr.", "label": "KlogAcpiInvalidOpcode" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid object type for logical operator:", "advice": "An invalid object type was found while execute a none numeric AML opcode. For these operators, operands can be any combination of Integer/String/Buffer.", "label": "KlogAcpiInvalidObjType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid comparison opcode:", "advice": "An invalid comparison opcode was found while comparing both integers, both strings or buffers.", "label": "KlogAcpiInvalidComparisonOpcode" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Null parameter: Node .* Name 0x.* ReturnNode", "advice": "Either the node, target name or return node pointers were NULL when attempting to search for a name segment in a single namespace level, see acpi_ns_search_and_enter().", "label": "KlogAcpiNameSpaceNullParameter" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Could not allocate the GpeRegisterInfo table", "advice": "General Purpose Events will fail to work because the table could not be allocated.", "label": "KlogAcpiGpeRegisterInfoAllocFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Could not allocate the GpeEventInfo table", "advice": "General Purpose Events will fail to work because the table could not be allocated.", "label": "KlogAcpiGpeEventInfoAllocFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Bad BitWidth parameter:", "advice": "A hardware I/O request failed because the requested bit width of the I/O operation was not 8, 16 or 32 bits wide. Undefined behaviour may occur.", "label": "KlogAcpiBadBitWidth" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Illegal I/O port address/length above 64K", "advice": "A hardware I/O port access was above the 64K 16 bit port address space. This is illegal and not allowed. Undefined behaviour may occur.", "label": "KlogAcpiIllegalIoPortAddressLength" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Need sub-package, found", "advice": "Failed to create a linked list of PCI interrupt descriptions, the given list did not contain a sub-package. See acpi_rs_create_pci_routing_table().", "label": "KlogAcpiPciRoutingTableSubPackageRequired" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Need package of length 4, found length", "advice": "Failed to create a linked list of PCI interrupt descriptions, a sub-package had an incorrect package length. See acpi_rs_create_pci_routing_table().", "label": "KlogAcpiPciRoutingTableBadPackageLength" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Address.*Need Integer, found", "advice": "Failed to create a linked list of PCI interrupt descriptions, a sub-package Address (element 0) was not an Integer type.", "label": "KlogAcpiPciRoutingTableBadPackageAddressType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Pin.*Need Integer, found", "advice": "Failed to create a linked list of PCI interrupt descriptions, a sub-package Pin (element 1) was not an Integer type.", "label": "KlogAcpiPciRoutingTableBadPackagePinType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Source.*Need name, found Reference Class 0x", "advice": "Failed to create a linked list of PCI interrupt descriptions, a sub-package SourceName (element 2) local reference was not an reference class name type.", "label": "KlogAcpiPciRoutingTableBadPackageSourceNameRefType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Source.*Need Ref/String/Integer, found", "advice": "Failed to create a linked list of PCI interrupt descriptions, a sub-package SourceName (element 2) was not a local reference, Integer or String type.", "label": "KlogAcpiPciRoutingTableBadPackageSourceNameType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "SourceIndex.*Need Integer, found", "advice": "Failed to create a linked list of PCI interrupt descriptions, a sub-package SourceIndex (element 3) was not an Integer type", "label": "KlogAcpiPciRoutingTableBadSourceIndexType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Control Method .* has no attached object", "advice": "An internal ACPICA error has occurred while attempting to get the next name, see acpi_ps_get_next_namepath(). This information is critical for parsing to continue correctly.", "label": "KlogAcpiControlMethodNoAttachedObject" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid ArgType.*0x", "advice": "An error occurred in getting the next simple argument was expecting one of byte data, work data, dword data, qword data, char list, name or namestring, see acpi_ps_get_next_simple_arg().", "label": "KlogAcpi" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "No predicate ObjDesc=.* State=", "advice": "An error occurred in getting the result of a predicate evaluation, a NULL operand object was found, which is unexpected. See acpi_ds_get_predicate_value().", "label": "KlogAcpiNullPredicateObjDesc" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Bad predicate .*not an integer.* ObjDesc=.*State=.*Type=0x", "advice": "The result of a predicate evaluation should be an integer but it was not. This is an unexpected error. See acpi_ds_get_predicate_value().", "label": "KlogAcpiBadPredicateEvalResult" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Undefined opcode type Op=", "advice": "Caught an unexpected opcode type, see acpi_ds_exec_end_op().", "label": "KlogAcpiUndefinedOpCodeType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unimplemented opcode, class=.*type=.*Opcode=.*Op=.*", "advice": "Caught an unexpected unimplemented opcode, see see acpi_ds_exec_end_op().", "label": "KlogAcpiUnimplementedOpCode" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not override predefined", "advice": "An error occurred during Name Space initialisation, a predefined name could not be overridden. This only occurs if the initial value is NULL or the value string is NULL.", "label": "KlogAcpiNameSpaceOverrideFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unsupported initial type value 0x", "advice": "An error occurred during Name Space initialisation, a predefined name initial value is of an unsupported type.", "label": "KlogAcpiNameSpaceOverrideBadType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "is not a namespace node", "advice": "A scope node is not a namespace node, this is an internal ACPICA error.", "label": "KlogAcpiNameSpaceNotNameSpaceNode" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI path has too many parent prefixes (^) - reached beyond root node", "advice": "An ACPI path has too many parent prefixes and has fallen outside the root node. This is a bug in the firmware. The Name Space lookup on the ACPI path cannot be found.", "label": "KlogAcpiPathTooManyParentPrefixes" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Path has too many parent prefixes (^)", "advice": "An ACPI path has too many parent prefixes and has fallen outside the root node. This is a bug in the firmware. The Name Space lookup on the ACPI path cannot be found.", "label": "KlogAcpiPathTooManyParentPrefixes" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not construct external pathname; index=.*, size=.*, Path=.*", "advice": "Expected a zero index to a name buffer. See acpi_ns_build_external_path().", "label": "KlogAcpiExternalPathNameConstructFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid Namespace Node .* while traversing namespace", "advice": "An ACPI namespace node descriptor type was not the expected ACPI_DESC_TYPE_NAMED type. Could not get the pathname length, see acpi_ns_get_pathname_length().", "label": "KlogAcpiInvalidNameSpaceNodeType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unsupported object type, cannot convert to external object:", "advice": "Failed to copy a simple internal ACPI object to an external ACPI object, unknown internal object type.", "label": "KlogAcpiUtCopyBadType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unsupported object type, cannot convert to internal object:", "advice": "Failed to copy a simple external ACPI object to an internal ACPI object, unknown external object type.", "label": "KlogAcpiUtCopyBadType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Package allocation failure", "advice": "Failed to copy an internal ACPI package object to another internal ACPI package object, out of memory.", "label": "KlogAcpiPackageAllocFailure" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Needed Region, found type 0x", "advice": "An ACPI object type did not match the expected type, expected an ACPI Region type.", "label": "KlogAcpiCheckObjectTypeFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Needed type .*, found .*", "advice": "An ACPI object type did not match the expected type.", "label": "KlogAcpiCheckObjectTypeFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Null stack entry at", "advice": "An internal ACPICA error occurred resolving operands - the ACPICA stack is either NULL or contains a NULL entry. This should not happen.", "label": "KlogAcpiNullStackEntry" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Bad operand object type", "advice": "An error occurred trying to convert multiple input operands to the types required by the target operator, see acpi_ex_resolve_operands(), the internal ACPI operand object type was not correct.", "label": "KlogAcpiBadOperandObjectType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Needed [Integer/String/Buffer], found", "advice": "An error occurred in resolving operands, required an Integer, String or Buffer type, got a different type instead.", "label": "KlogAcpiResolveOpBadType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "IOAPIC\\[.*\\] not in IVRS", "advice": "BIOS setup is configured to enable IOMMU, but BIOS lacks IVRS table that is describing which is the address of IOMMU", "label": "KlogAmdIommuNoIVRS" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Unable to read/write to IOMMU perf counter", "advice": "AMD IOMMU performance counter is inaccessible and public specifications do not have information on how it should be supported", "label": "KlogAmdIommuPCNotSupported" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Needed [Buffer/String/Package/Reference], found", "advice": "An error occurred in resolving operands, required an Integer, String, Package or Reference type (normally for a size_of operator), got a different type instead.", "label": "KlogAcpiResolveOpBadType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Needed [Buffer/String/Package], found", "advice": "An error occurred in resolving operands, required a Buffer, String or Package type, got a different type instead.", "label": "KlogAcpiResolveOpBadType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Needed [Region/Buffer], found", "advice": "An error occurred in resolving operands, required a Region or Buffer type, got a different type instead.", "label": "KlogAcpiResolveOpBadType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Needed Integer/Buffer/String/Package/Ref/Ddb], found", "advice": "An error occurred in resolving operands, required an Integer, Buffer, String, Package or Dbd type for a Store() operator, got a different type instead.", "label": "KlogAcpiResolveOpBadType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid descriptor.*\\[.*\\]", "advice": "Failed to resolve an ACPI operand, bad descriptor; expecting either an ACPI_DESC_TYPE_NAMED or ACPI_DESC_TYPE_OPERAND descriptor.", "label": "KlogAcpiInvalidDescriptor" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Internal - Unknown ARGI (required operand) type 0x", "advice": "Internal error in acpi_ex_resolve_operands() - found an unknown type, this should not occur.", "label": "KlogAcpiResolveOpBadArgType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No init routine for region", "advice": "An attempt to dispatch an address space or operation region access failed because the region has never been initialised but it does not have an address space setup function. This is a ACPI or kernel address space handler bug. Access to the address space or operation region will fail with undefined behaviour.", "label": "KlogAcpiRegionHanderNoInit" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "The DSDT has been corrupted or replaced - old, new headers below", "advice": "Some firmware corrupts the DSDT or installs a bad new DSDT, so a workaround is to copy the DSDT. Booting with kernel parameter acpi=copy_dsdt may fix this issue.", "label": "KlogAcpiDsdtCorruptOrReplaced" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Could not copy DSDT of length 0x", "advice": "Failed to copy DSDT to local memory. Some firmware corrupts the DSDT or installs a bad new DSDT, so a workaround is to copy the DSDT. However, the table allocation failed, which means ACPI initialisation had failed, so ACPI support is disabled.", "label": "KlogAcpiDsdtCopyFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Null physical address for ACPI table", "advice": "An attempt to install an ACPI table has failed because the physical address of the table is NULL, which is incorrect. This could lead to ACPI failing to initialize and perhaps ACPI support being disabled.", "label": "KlogAcpiTableNullPhysicalAddress" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Could not map memory for table .* at", "advice": "The ACPI table could not me mapped into memory and was not added to the ACPI root table list. This may lead to broken functionality.", "label": "KlogAcpiTableMemoryMapFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Null NamedObj handle", "advice": "ACPI attempted to attach an ACPI object with a NULL parent node, see acpi_ns_attach_object().", "label": "KlogAcpiAttachNullParentNode" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Null object, but type not ACPI_TYPE_ANY", "advice": "ACPI attempted to attach a NULL ACPI object with a type that was not ACPI_TYPE_ANY, see acpi_ns_attach_object().", "label": "KlogAcpiAttachNullObjectBadType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid handle.*\\[%s\\]", "advice": "An attempt to attach an object with an ACPI node failed because the node was not a name handle type. This is probably an internal ACPI error. See acpi_ns_attach_object().", "label": "KlogAcpiInvalidHandle" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Bit offset within field too large.*0xFFFFFFFF", "advice": "A named field has a bit offset that is greater than the 32 bit field offset limit. An AML_INT_RESERVEDFIELD_OP 0x0031 was ignored because of the bit offset error.", "label": "KlogAcpiFieldOffsetTooLarge" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Field .* bit offset too large.*0xFFFFFFFF", "advice": "A named field has a bit offset that is greater than the 32 bit field offset limit. An AML_INT_NAMEDFIELD_OP 0x0030 was ignored because of the bit offset error.", "label": "KlogAcpiFieldOffsetTooLarge" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid opcode in field list: 0x", "advice": "An invalid opcode was found while parsing a field list. This is invariable due to buggy firmware.", "label": "KlogAcpiFieldListInvalidOpcode" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Internal - null pointer", "advice": "An error occurred attempting to convert reference objects to values. A NULL pointer to entry on obj_stack, which can be either an (union acpi_operand_object *) or an acpi_handle. See acpi_ex_resolve_to_value().", "label": "KlogAcpiNullPackageElementDereference" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Attempt to dereference an Index to NULL package element Idx=", "advice": "An error occurred attempting to retrieve a value from an internal ACPI object. A NULL object descriptor indicates an uninitialized element in an ACPI package, and hence it cannot be deferenced. Could not retrieve a value from an internal ACPI object. See acpi_ex_resolve_object_to_value().", "label": "KlogAcpiNullPackageElementDereference" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Not a namespace node.*\\[.*\\]", "advice": "An ACPI reference was found that did not point to a namespace node. Failed to resolve. See acpi_ex_resolve_multiple().", "label": "KlogAcpiNotNamespaceNode" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown TargetType .* in Index.*Reference object", "advice": "An ACPI_REFCLASS_INDEX has an unknown target type. Should be a buffer field or a package. Could not retrieve a value from an internal ACPI object. See acpi_ex_resolve_object_to_value().", "label": "KlogAcpiUnkownTargetType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown Reference type 0x.* in", "advice": "The ACPI object type was not a known reference type. Could not retrieve a value from an internal ACPI object. See acpi_ex_resolve_object_to_value().", "label": "KlogAcpiUnknownReferenceType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Owner ID .* already exists", "advice": "A table or method owner ID allocation was attempted but the owner ID already exists. The allocation has failed.", "label": "KlogAcpiOwnerIdAlreadyExists" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not allocate new OwnerId (255 max), AE_OWNER_ID_LIMIT", "advice": "A table or method owner ID allocation failed because all owner IDs (maximum of 255) are in use. This only happens if there are very deep nestings of invoked control methods or there is an ACPI bug where owner IDs are not being released.", "label": "KlogAcpiNoFreeOwnerIds" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid OwnerId: 0x", "advice": "An attempt to release an owner ID failed because the owner ID is invalid. Only owner IDs 1 to 255 are allowed.", "label": "KlogAcpiInvalidOwnerId" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Release of non-allocated OwnerId: 0x", "advice": "An attempt to release an owner ID failed because the owner ID is not already allocated. This is a double-release error.", "label": "KlogAcpiOwnerIdDoubleRelease" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown opcode 0x", "advice": "An invalid AML opcode in the input stream has been encountered. This will be skipped. This normally indicates buggy firmware. Undefined behaviour may occur.", "label": "KlogAcpiUnknownOpcode" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Expecting bytelist, found AML opcode 0x.* in op", "advice": "An error occurred translating a parser object to an equivalent namespace object. This occurs when evaluating a named buffer object such as Name(xxxx, Buffer) and the buffer does not contain an AML opcode bytelist.", "label": "KlogAcpiByteListExpected" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown constant opcode 0x", "advice": "An error occurred initializing a namespace object from a parser op. The return type was an Integer however the opcode type was not a Zero op, One op, Ones op or Revision op. See acpi_ds_init_object_from_op().", "label": "KlogAcpiUnknownConstantOpcode" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown Integer type 0x", "advice": "An error occurred initializing a namespace object from a parser op. The return type was an unknown Integer type. See acpi_ds_init_object_from_op().", "label": "KlogAcpiUnknownIntegerType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unimplemented reference type for AML opcode: 0x", "advice": "An error occurred initializing a namespace object from a parser op. ACPICA has detected an unimplemented reference type. See cpi_ds_init_object_from_op().", "label": "KlogAcpiUnimplementedRefType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unimplemented data type: 0x", "advice": "An error occurred initializing a namespace object from a parser op. ACPICA has detected an unimplemented data type. See cpi_ds_init_object_from_op().", "label": "KlogAcpiUnimplementedDataType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Method reached maximum reentrancy limit (255)", "advice": "A method has been re-entrantly entered too many times. The limit is imposed to avoid a wrap-around on the thread count. Methods should generally not be re-entrantly executed this deep, so it may indicate a bug in the firmware.", "label": "KlogAcpiMethodMaxRentrancyLimit" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Cannot acquire Mutex for method .*, current SyncLevel is too large", "advice": "The mutex for a method was not acquired because the sync level was too large. The per-thread sync level must be less or equal to the sync level of the method being executed. This error occurs because the interpreter attempted to avoid possible deadlocks. See acpi_ds_begin_method_execution().", "label": "KlogAcpiSyncLevelTooLarge" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid zero thread count in method", "advice": "A control thread execution has terminated and the thread count is zero, which should never occur. See acpi_ds_terminate_control_method().", "label": "KlogAcpiZeroThreadCount" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Control method has no attached sub-object", "advice": "Execution of a control method has failed, there is no method object associated with the resolved node. See acpi_ns_evaluate().", "label": "KlogAcpiControlNoSubObject" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Evaluation of object type .* is not supported", "advice": "Evaluation of a device, event, mutex, region, thermal or local scope ACPI object types is not allowed. The firmware is buggy. See acpi_ns_evaluate().", "label": "KlogAcpiEvalObjectTypeNotSupported" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Method has no attached sub-object", "advice": "An ACPI method type did not have a method object associated with the node and a NULL object was found instead. Failed to execute a control method.", "label": "KlogAcpiEvalMethodObjectNull" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "unknown tag .* length", "advice": "Failed to parse the PnPBIOS resource data, an unknown tag length specifier was found. This is a bug in the firmware resource data.", "label": "KlogAcpiPnpBios" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "no end tag in resource structure", "advice": "Failed to parse the PnPBIOS resource data, there was no end tag in the resource structure.", "label": "KlogAcpiPnpBios" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "_PRW evaluation error:", "advice": "The ACPI _PRW (Power Resources for Wake) object failed to evaluate when the ACPI driver was attempting to get the wakeup device flags.", "label": "KlogACPIPrwEvalError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "lpc_ich: Resource conflict(s) found affecting iTCO_wdt", "advice": "A resource conflict has occurred between ACPI OperationRegions and the same I/O region used by the lpc_ich driver for the Intel TCO (Total Cost of Ownership) timer (iTCO_wdt, this is a watchdog timer that will reboot the machine after its second expiration). According to Intel Controller Hub (ICH) specifications, the TCO watchdog has a 32 bytes I/O space resource. ACPI OperationRegions in the DSDT frequently reserve this TCO I/O space because they require access to bit 9 (DMISCI_STS) of the TCO1_STS register of the TCO, however, this bit is never used by the lpc_ich driver, so there is no risk of conflict. In the vast majority of cases this warning can be ignored as no harm will occur.", "label": "KlogAcpiSystemIOConflictLpcIchWatchDogTimer" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "lpc_ich: Resource conflict(s) found affecting gpio_ich", "advice": "A resource conflict has occurred between ACPI OperationRegions and the same I/O region used by the lpc_ich driver for the General Purpose I/O (GPIO) region. Sometimes this GPIO region is used by the firmware for rfkill or LED controls or very rarely for the Embedded Controller System Control Interrupt. This may require deeper inspection to check if the conflict will lead to any real issues. However, in the vast majority of cases this warning can be ignored as no harm will occur.", "label": "KlogAcpiSystemIOConflictLpcIchWatchDogTimer" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_LOW", "pattern": "0x.*-0x.* SystemIO conflicts with", "advice": "A resource conflict between an ACPI OperationRegion and a native driver has been detected. By default the kernel will use a strict policy and will not allow this region to conflict and -EBUSY will be returned to the caller that was trying to allocate the already claimed region. If an ACPI driver is available for this device then this should be used instead of a native driver, so disabling the native driver may help. (Note that the lpc_ich driver can trigger these warnings, in which case they can generally be ignored). One can specify kernel boot parameter acpi_enforce_resources=lax to disable these checks but it may lead to random problems and system instability. Alternatively, one can specify acpi_enforce_resources=no and ACPI Operation Region resources will not be registered.", "label": "KlogAcpiSystemIOConflict" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "device .* has invalid IRQ.*check vendor BIOS", "advice": "An error occurred probing the PCI-Express port devices. The device has a valid pin but did not have an a valid IRQ. This is normally due to a misconfiguration in the firmware.", "label": "KlogBiosIrqInvalid" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITCAL", "pattern": "Invalid active.* threshold", "advice": "The ACPI thermal driver has attempted to evaluate an ACPI active threshold control _ALx and this failed to evaluate. This is normally due to broken or buggy _ALx control. This may lead to sub-optimal thermal control.", "label": "KlogAcpiAlThresholdInvalid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No sibling found for CPU", "advice": "Hyperthreading CPU enumeration failed, hyperthreads will be disabled.", "label": "KlogCpuNoSiblingFound" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "OHCI: BIOS handoff failed", "advice": "An OHCI BIOS handoff failure generally means that the OHCI driver was unable to take control of the USB controller away from the BIOS. Disabling USB legacy mode in the BIOS may help.", "label": "KlogBiosOhciEmulation" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "EHCI: BIOS handoff failed", "advice": "An EHCI BIOS handoff failure generally means that the EHCI driver was unable to take control of the USB controller away from the BIOS. Disabling USB legacy mode in the BIOS may help.", "label": "KlogBiosEhciEmulation" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "xHCI BIOS handoff failed", "advice": "An xHCI BIOS handoff failure generally means that the xHCI driver was unable to take control of the USB controller away from the BIOS. Disabling USB legacy mode in the BIOS may help.", "label": "KlogBiosXhciEmulation" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "MMCONFIG has no entries", "advice": "The ACPI MCFG has failed to be parsed, it has no entries in it. This is not expected and is most likely an ACPI misconfiguration. The PCI memory mapped configuration space is not known and hence PCI will be not configured.", "label": "KlogAcpiMcfgNoEntries" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "MMCONFIG not in low 4GB of memory", "advice": "An ACPI MCFG config entry is not in the lower 4GB (32 bit) address space and will be ignored.", "label": "KlogAcpiMcfgNotIn32BitMemorySpace" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "MCFG region for .* at .* is above 4GB, ignored", "advice": "An ACPI MCFG config entry is not in the lower 4GB (32 bit) address space and will be ignored.", "label": "KlogAcpiMcfgNotin32BitMemorySpace" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "disabled and referenced, BIOS bug", "advice": "A PCI interrupt link could not be enabled when the associated ACPI _STA control was executed. It will be disabled. This is normally a bug in the _STA control for this link.", "label": "KlogPciLinkDisabled" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Inconsistent FADT length .* and revision .* using FADT V1.0 portion of table", "advice": "The ACPI FADT was reporting to be a version 2.0 (or higher) FADT but the length was too short, so the kernel has assumed it was a version 1.0 FADT instead. The machine may have reduced ACPI 1.0 functionality.", "label": "KlogAcpiFadtInconsistentLength" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Disabling IRQ#", "advice": "The kernel had detected a spurious interrupt which is generating tens of thousands of interrupts. This can occur if the interrupt is stuck. The kernel has taken action and disabled this interrupt. Look at /proc/interrupts to find the devices serviced by this interrupt as these are most probably no functioning now.", "label": "KlogIrqDisabled" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": ", Invalid action", "advice": "The ACPI driver was requested to set a GPE wake mask with an incorrect action, expected ACPI_GPE_ENABLE or ACPI_GPE_DISABLE, see acpi_set_gpe_wake_mask(). This is most probably a kernel bug.", "label": "KlogAcpiGpeWakeMaskIncorrect" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid GPE Action,", "advice": "The ACPI driver was requested to enable or disable a single GPE in a parent enable register but was given an incorrect action, expected ACPI_GPE_ENABLE or ACPI_GPE_DISABLE, see acpi_hw_low_set_gpe(). This is most probably a kernel bug.", "label": "KlogAcpiGpeActionInvalid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unsupported address space: 0x", "advice": "The ACPI driver was requested to validate a H/W register but the address space ID was not ACPI_ADR_SPACE_SYSTEM_MEMORY or ACPI_ADR_SPACE_SYSTEM_IO. Other address spaces are not supported by the driver. See acpi_hw_validate_register().", "label": "KlogAcpiHwRegsUnsupportedAddressSpace" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unsupported register bit width: 0x", "advice": "The ACPI driver was requested to validate a H/W register but the bit width of the register was not 8, 16 or 32 bits; other sizes are not supported by the driver. See acpi_hw_validate_register().", "label": "KlogAcpiHwRegsUnsupportedRegisterBitWidth" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Requested bit width 0x.* is smaller than register bit width 0x", "advice": "The ACPI driver was requested validate the bit width, convert access width into number of bits, but the requested bit width is smaller than register bit width. See acpi_hw_validate_register().", "label": "KlogAcpiHwRegsUnsupportedRegisterBitWidth" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unsupported register access width: 0x", "advice": "The ACPI driver was requested to validate a H/W register but the access width of the register larger than 32 bits; the sizes are not supported by the driver. See acpi_hw_validate_register().", "label": "KlogAcpiHwRegsUnsupportedRegisterAccessWidth" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid BitRegister ID: 0x", "advice": "The ACPI driver was requested the bitmask of a specific register ID which was greater than the the predefined driver maximum of ACPI_BITREG_MAX. A NULL register info struct was passed back to the caller. This is normally a driver bug, see acpi_hw_get_bit_register_info().", "label": "KlogAcpiHwRegsInvalidBitRegisterId" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown Register ID: 0x", "advice": "The ACPI driver was registered to read an ACPI register, but an invalid register ID was given; was expected with a PM1 status register, PM1 enable register, PM1 control, PM 2 control, PM timer or a SMI command block. This is normally a driver bug, see acpi_hw_register_read().", "label": "KlogAcpiHwRegsUnknownRegisterId" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "No handler or method for .*, disabling event", "advice": "A General Purpose Event (GPE) has occurred and there does not appear to be a GPE handler for this event. This should no longer be possible with kernels dating after March 2010. The GPE is disabled and will not occur until the machine is rebooted. See acpi_ev_gpe_dispatch().", "label": "KlogAcpiGpeHandlerMissing" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid SystemMemory width ", "advice": "The ACPI interpreter was requested to read or write to a memory region via a memory space handler but the requested field width was invalid. It expected a field with of 8, 16, 32 or 64 bits. This is most probably an AML opregion bug.", "label": "KlogAcpiOpRegionInvalidSystemMemoryWidth" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not map memory at 0x.*, size", "advice": "The ACPI interpreter was requested to read or write to a memory region via a memory space handler but the logical address could not be mapped from the given physical address given. This memory region is not mappable, so it could be an AML opregion bug or a bug in the kernel (less likely).", "label": "KlogAcpiOpRegionMemMapError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "32-bit FADT register is too long .* to convert to GAS struct - 255 bits max, truncating", "advice": "The Generic Address Structure bit_width was greater than 31 which is too large for a 32 bit ACPI FADT register and was truncated.", "label": "KlogAcpiFadtGasBitWidthTooLong" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not install GPE interrupt handler at level 0x", "advice": "The ACPI driver attempted to install a General Purpose Event interrupt handler but this failed. Is the interrupt available or already used? See acpi_ev_get_gpe_xrupt_block().", "label": "KlogAcpiGpeHandlerInstallFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown control opcode=0x.* Op=", "advice": "The ACPI interpreter could not execute an unknown AML opcode. This is an ACPI AML firmware bug. See acpi_ds_exec_end_control_op().", "label": "KlogAcpiUnknownControlOp" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No response from Global Lock hardware, disabling lock", "advice": "An attempt to send a global lock SMI did not generate a global lock event and so the kernel has concluded that the BIOS global lock handler is not functioning on this hardware. All subsequent attempts to use the global lock will be flagged with an error. You may experience race conditions in the ACPI driver.", "label": "KlogAcpiGlobalLockDisabled" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not signal Global Lock semaphore", "advice": "A global lock signal was sent to the firmware using a SMI but this failed to complete correctly.", "label": "KlogAcpiGlobalLockSignalError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid leading digit:", "advice": "An ACPI name started with a leading digit which is illegal. This is a bug in an ACPI table.", "label": "KlogAcpiNameLeadingDigit" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Bad character 0x.* in name, at", "advice": "Am ACPI segment name started with some valid name characters but was shorted than the expected length of 4 characters.", "label": "KlogAcpiNameWrongSize" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Malformed Name at ", "advice": "An ACPI name had a valid prefix path but there wasn't a valid name following the prefix.", "label": "KlogAcpiMalformedName" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid/unknown Address Space ID: 0x", "advice": "The ACPI driver was attempting to create a new operation region objject as specified by an AML instruction but the provided Space ID was not one of the predefined IDs or in the user-defined range. The operation region is not created. This is an AML bug in the ACPI DSDT or SSDTs.", "label": "KlogAcpiAmlOpRegionInvalidAddressSpaceId" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Type returned from .* was incorrect: .*, expected Btypes: 0x", "advice": "The ACPI interpreter was evaluating a namespace object and discovered that the return type did not match the expected return type. This is an ACPI AML bug in the ACPI DSDT or SSDTs.", "label": "KlogAcpiIncorrectReturnType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid/unsupported resource descriptor: Type 0x", "advice": "The ACPI interpreter failed to convert an AML resource into an aligned internal representation of the resource. The resource descriptor was not a recognised type that could be converted. This is an ACPI AML bug.", "label": "KlogAcpiInvalidResourceDescriptor" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid descriptor type .* in resource list", "advice": "The ACPI interpreter failed to convert a linked list of resources into an AML buffer because one of the resources had in invalid resource type. This may be a bug in the ACPI resource handling code.", "label": "KlogAcpiInvalidDescriptorType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Match operator out of range", "advice": "The ACPI interpreter found an AML match operator that was unrecognised, it was expecting MTR, MEQ, etc. This is a bug in the AML.", "label": "KlogAcpiMatchOperatorOutOfRange" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Index .* beyond package end", "advice": "The ACPI interpreter was executing a 6 argument MATCH_OP op-code and discovered that the integer index being used fall outside of the package being referenced. This is an index overflow or underflow error and is considered to be a bug in the AML.", "label": "KlogAcpiIndexOutOfPackageRange" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Table has invalid signature .* must be SSDT or OEMx", "advice": "The ACPI driver detected an ACPI table with an invalid signature. This table will not be loaded and will be ignored.", "label": "KlogAcpiInvalidTableSignature" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "The ACPI DSDT has been corrupted or replaced - old, new headers below", "advice": "The current loaded DSDT length and/or checksum differ to original version. This could be because it has been altered from outside Linux (perhaps broken firmware or a rootkit) or some incorrect memory write has corrupted the table. A workaround is to boot with the kernel parameter: acpi=copy_dsdt", "label": "KlogAcpiDsdtCorrupt" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Invalid signature .* for ACPI table, expected .*", "advice": "The ACPI DSDT and FACS tables must have correct signatures otherwise the ACPI driver treats them as suspect or corrupt and will not load them.", "label": "KlogAcpiTableSignatureInvalid" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Invalid table length .* in RSDT/XSDT", "advice": "The ACPI RSDT and XSDT must have the correct length. These variable length tables contain pointers to other ACPI tables and stated length that is different than the actual length can imply that the these tables are not trustworthy and hence the ACPI driver cannot tell if the pointers are totally valid or not. The driver will ignore these tables and ACPI will be disabled.", "label": "KlogAcpiTableLengthInvalid" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Required FADT field .* has zero address and.*or length", "advice": "The ACPI FADT fields Pm1a_event, Pm1a_control, pm_timer are required fields that must have a defined (non-zero) address and a length that is non-zero. One of these fields is incorrect and needs fixing.", "label": "KlogAcpiFadtFieldZeroAddrLength" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Optional FADT field .* has valid .* but zero", "advice": "The ACPI FADT optional, Pm2_control, GPE0, GPE1 AND has its own length field. If present, both the address and length must be valid. One of these fields is zero and needs fixing.", "label": "KlogAcpiFadtFieldZeroAddrLength" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid length for FADT/.*: .*, using default", "advice": "The ACPI FADT initialize global ACPI PM1 register definitions but gets the invalid lengths, force FADT register definitions to their default lengths.", "label": "KlogAcpiFadtRegZeroLength" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not convert AML resource", "advice": "The ACPI driver could not convert an AML resource to an internal representation of the resource that is aligned and easier to access. This is most likely to be because their is an unrecognised ACPI resource op-code. See acpi_rs_convert_aml_to_resource() for details.", "label": "KlogAcpiAmlResourceConvertFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Zero-length resource returned from RsConvertAmlToResource", "advice": "The ACPI driver convert an AML resource to an internal representation of the resource that is aligned and easier to access but got zero length returned. See acpi_rs_convert_aml_to_resource() for details.", "label": "KlogAcpiAmlResourceConvertFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not convert resource", "advice": "The ACPI driver could not convert a resource linked list into an AML bytestream. See acpi_rs_convert_resources_to_aml() for details.", "label": "KlogAcpiResourceToAmlFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid Field/AccessAs protocol ID", "advice": "The ACPI driver gets invalid type of the protocol indicated by region field access attributes when try to get the length of the generic_serial_bus protocol bytes. See acpi_ex_get_protocol_buffer_length() for details.", "label": "KlogAcpiInvalidProtocolID" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not get result from predicate evaluation", "advice": "The ACPI driver failed to pop a result off the result stack while evaluating a predicate. This is probably an AML code firmware bug.", "label": "KlogAcpiPredicateEvalPopFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "During .?egion initialization", "advice": "The ACPI driver failed to initialize a name space operation region. This is most probably the _REG (Region) control failed to evaluate.", "label": "KlogAcpiRegInitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Evaluating _PRS", "advice": "The ACPI driver failed to evaluate the _PRS (Possible Resource Settings) object. This failure will lead to a PCI link not being added to the system.", "label": "KlogAcpiPrsEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Evaluating _CRS", "advice": "The ACPI driver failed to evaluate the _CRS (Current Resource Settings) object to get the current IRQ assignment. This failure will lead to a PCI link not allocating an IRQ.", "label": "KlogAcpiCrsEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Evaluating _SRS", "advice": "The ACPI driver failed to evaluate the _SRS (Set Resource Settings) object to set the current link resource. This failure will lead to a PCI link not allocating an IRQ.", "label": "KlogAcpiSrsEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "While executing method", "advice": "The ACPI driver attempted to execute an ACPI sleep method but this failed to execute. This is most probably an ACPI firmware bug.", "label": "KlogAcpiSleepMethodFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Missing or null operand", "advice": "The ACPI driver got a missing or NULL operand while translating a parse tree object that is an argument to an AML object. This is more likely to be poorly written or compiled AML rather than an ACPI parser bug.", "label": "KlogAcpiParseMissingNullOp" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "While creating Arg ", "advice": "The ACPI driver failed to convert an operator's arguments from a parse tree format to a namespace object during the parse.", "label": "KlogAcpiOpArgCreateFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Evaluating _BST", "advice": "The ACPI driver attempted to get the ACPI battery state but the _BST (Battery Status) failed to evaluate. This is most likely to be a firmware or embedded controller bug. The ACPI battery state cannot be reported to userspace.", "label": "KlogAcpiBsrEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Failed to update perflib freq constraint", "advice": "The ACPI driver attempted to update an existing frequency QoS request along with the effective constraint value for the list of requests it belongs to, but failed.", "label": "KlogAcpiUpdateFreqFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Failed to add freq constraint for CPU", "advice": "The ACPI driver attempted to insert new frequency QoS request into a given list, but failed.", "label": "KlogAcpiInsertFreqFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Evaluating _PPC", "advice": "The ACPI driver attempted to get the current CPU performance states but the _PPC (Performance Present Capabilities) method failed to evaluate. The CPU frequency policy will not be updated. This may explain why CPU frequencies are locked at one setting and do not change.", "label": "KlogAcpiPpcEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Evaluating _PCT", "advice": "The ACPI driver attempted to get the CPU performance control and status registers but the _PCT (Performance Control) object failed to evaluate. This error normally occurs because the BIOS is an old or that it does not know the CPU frequencies. CPU frequency support is not supported.", "label": "KlogAcpiPctEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Evaluating _PSS", "advice": "The ACPI driver attempted to get the CPU performance states bug the _PSS (Performance Supported States) object failed to evaluate. This error normally occurs because the BIOS is an old or that it does not know the CPU frequencies. CPU frequency support is not supported.", "label": "KlogAcpiPssEvalFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to write pstate_control .* to smi_command", "advice": "The ACPI driver attempted to update the P states but the P state control command written to the SMI command port failed to write. This could be because that ACPI FADT SMI command or FADT P State control settings are incorrect, or that the port write just failed (which is very unlikely).", "label": "KlogAcpiPstateControlSmiCommandFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "AE_TIME.*Returned by Handler for.*[EmbeddedControl]", "advice": "This is most probably caused by when a read or write operation to the EC memory has failed because of a timeout waiting for the Embedded Controller to complete the transaction. Normally, the kernel waits for 500ms for the Embedded Controller status port to indicate that a transaction is complete, but in this case it has not and a AE_TIME error has been returned. ", "label": "KlogAcpiTimeOutReturnedByHandler" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Returned by Handler for", "advice": "The ACPI driver detected an error returned by a region handler.", "label": "KlogAcpiRegionHandlerError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "from region _REG", "advice": "The ACPI driver detected an error when attempting to execute an ACPI_REG_DISCONNECT on a _REG (Region) method.", "label": "KlogAcpiRegDisconnectFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "from region handler - deactivate", "advice": "The ACPI driver detected an error when attempting to deactivate a region. This error is ignored.", "label": "KlogAcpiRegDeactivateFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "While resolving operands for", "advice": "The ACPI driver found not resolve an operand for the AML AML_DECREMENT_OP (0x76) or AML_INCREMENT_OP (0x75) instructions. This is due to buggy AML code and not a ACPI driver bug.", "label": "KlogAcpiIncDecNoOperands" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not update object reference count", "advice": "The ACPI driver failed to update the reference count to an internal ACPI object. Reference counts are incremented when an object is attached to a node or an object is copied and decremented when an object is detected from a node. This failure will lead to object garbage collection failing to operate correctly. This is considered a kernel bug.", "label": "KlogAcpiObjRefCountError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Could not write ACPI mode change", "advice": "The ACPI driver attempted to inform the firmware (via a System Management Interrupt) that the machine was transitioning to or from ACPI or legacy mode but this failed. This normally indicates that either SMIs are failing or the firmware is buggy. Normally if this fails to transition to ACPI mode then ACPI is not enabled.", "label": "KlogAcpiModeChangeFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "During name lookup/catalog", "advice": "The ACPI driver failed to find an object while parsing a named Op, see acpi_ps_build_named_op().", "label": "KlogAcpiNamedObjLookupFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invoked method did not return a value", "advice": "An invoked ACPI method did not return a value but it was expected to. This could lead to unexpected ACPI execution behaviour.", "label": "KlogAcpiMethodNoReturnValue" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "GetPredicate Failed", "advice": "The ACPI driver failed to get a predicate for the AML opcodes IF or WHILE. This normally is because of faulty AML code.", "label": "KlogAcpiIfWhilePredicateFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not create predefined name", "advice": "The ACPI driver was initializing the ACPI namespace and adding pre-defined names but this failed on this particular object. This should not happen.", "label": "KlogAcpiPredefinedNameCreateFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "While loading namespace from ACPI tables", "advice": "The ACPI driver failed to load the namespace from the DSDT and SSDTs/PSDTs found in the RSDT/XDSDT. This will lead to the ACPI driver being disabled.", "label": "KlogAcpiNameSpaceLoadFailure" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "While evaluating SleepState .* bad Sleep object .* type .*", "advice": "The ACPI driver failed to evaluate an ACPI sleep control while trying to obtain the SLP_TYPa and SLP_TYPb values for the requested sleep state.", "label": "KlogAcpiSlpEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "while handling a GPE", "advice": "The ACPI driver attempted to asynchronously execute an ACPI General Purpose Event (GPE) but this failed because the kernel ran out of free memory to allocate a GPE event information buffer. The event was not handled, this may lead to unpredictable behaviour.", "label": "KlogAcpiGpeNoMemory" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "while evaluating GPE method", "advice": "The ACPI driver attempted to asynchronously execute an ACPI General Purpose Event (GPE) but the ACPI GPE method failed for some unknown reason. This is most likely a firmware bug.", "label": "KlogAcpiGpeEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unable to clear GPE", "advice": "An edge triggered ACPI General Purpose Event (GPE) occurred and the clearing of the GPE status bit failed. This is normally a low-level hardware I/O register write failure. This may lead to this GPE failing to be handled again.", "label": "KlogAcpiGpeClearFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unable to disable GPE", "advice": "An ACPI General Purpose Event (GPE) could not be disabled. These are disabled to ensure the GPE does not keep firing before the asynchronous GPE handler completes. The failure to disable the GPE may lead to further GPEs being triggered and causing some unexpected handling failures.", "label": "KlogAcpiGpeDisableFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unable to queue handler for GPE", "advice": "The ACPI driver failed to dispatch the GPE asynchronously. The GPE will not be properly handled and will be ignored.", "label": "KlogAcpiGpeQueueHandlerFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "During OSL initialization", "advice": "The ACPI driver failed to initialize, the kernel specific OS dependent layer failed to initialize. This is a kernel bug and ACPI will be disabled.", "label": "KlogAcpiOsLayerInitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "During initialization of globals", "advice": "The ACPI driver failed to initialize, could not initialize the globals used by the subsystem. This is a kernel bug and ACPI will be disabled.", "label": "KlogAcpiGlobalsInitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "During Global Mutex creation", "advice": "The ACPI driver failed to initialize, could not initialize the global mutex. This is a kernel bug and ACPI will be disabled.", "label": "KlogAcpiGlobalMutexInitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "During Namespace initialization", "advice": "The ACPI driver failed to initialize, could not initialize the ACPI global namespace manager and root namespace tree. ACPI will be disabled.", "label": "KlogAcpiNamespaceInitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "During OSI interfaces initialization", "advice": "The ACPI driver failed to initialize, could not initialize the ACPI OSI interfaces. ACPI will be disabled.", "label": "KlogAcpiOsiInitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not create GPE Block 0", "advice": "The ACPI driver failed initialize the General Purpose Events (GPE) Block 0. This means that GPEs for this block will be not handled and so some devices or controls may not work correctly.", "label": "KlogAcpiGpeBlock0InitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not create GPE Block 1", "advice": "The ACPI driver failed initialize the General Purpose Events (GPE) Block 1. This means that GPEs for this block will be not handled and so some devices or controls may not work correctly.", "label": "KlogAcpiGpeBlock1InitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "While decoding _Lxx/_Exx methods", "advice": "The ACPI driver failed to decode level _Lxx or edge _Exx methods for newly added ACPI tables.", "label": "KlogAcpiGpeLevelOrEdgeMethodDecodeFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not enable GPE 0x", "advice": "The ACPI driver failed to enable a General Purpose Event (GPE). A GPE event handler will not be executed for this GPE and this may mean some form of loss of functionality with specific devices.", "label": "KlogAcpiGpeEnableFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Processor Device is not present", "advice": "The ACPI driver has responded to an ACPI processor hotplug event and attempted to execute the _STA (Status) control for a processor but this failed. _STA is mandatory for a processor that supports hot plug and so the driver has not added the processor to the running system.", "label": "KlogAcpiCpuHotPlugStaFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not install PciConfig handler for Root Bridge", "advice": "The ACPI driver could not install a PCI Config operation region for a PCI Root Bridge. This could occur for a variety of reasons but it is most probably because the devices _REG (Region) control failed.", "label": "KlogAcpiPciConfigInstallFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "During WalkNamespace", "advice": "The ACPI driver failed to traverse the ACPI namespace either during namespace initialization. ACPI will be disabled. ", "label": "KlogAcpiWalkNamespaceFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "During device initialization", "advice": "The ACPI driver failed to traverse the ACPI namespace and initialize all the ACPI devices.", "label": "KlogAcpiNsDevInitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not execute arguments for", "advice": "The ACPI driver failed to initialize methods or op regions during the namespace traversal.", "label": "KlogAcpiNsExecArgFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI thermal trip point .* changed", "advice": "The ACPI driver has thrown this exception because of one of the two cases: 1. Either a trip point has becomes invalid when re-evaluating the AML code or, 2. devices listed in _PSL, _ALx or _TZD may have changed and the driver needs to re-bind to the cooling devices of a thermal zone when that happens. This exception probably means the ACPI thermal driver needs to cater for this behaviour and it needs fixing or updating.", "label": "KlogAcpiThermTripPointChanged" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Cannot find acpi parent", "advice": "The ACPI driver was attempting to notify a memory device but could not find a parent to the given device handle. This is an internal ACPI driver error and should not occur. ACPI memory hotplug failures may occur because of this failure.", "label": "KlogAcpiMemHotPlugParentError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "_EJ0 failed", "advice": "The ACPI driver attempted to power down a memory hot plug device but the ACPI _EJ0 (Eject) control failed which leaves the hotplug memory device in an invalid state.", "label": "KlogAcpiMemHotPlugEj0Failed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "walk_namespace failed", "advice": "The ACPI driver failed to traverse the ACPI object namespace to allow it to register any memory hotplug notify handlers. This failure means that ACPI memory hotplug will not work.", "label": "KlogAcpiMemHotPlugInitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "failed to execute _DCK", "advice": "The ACPI driver executed the _DCK (Dock) control but this failed to complete successfully. This control is executed when an ACPI docking or undocking event is received. This may be because of a fault _DCK control or that the hardware isn't functioning correctly.", "label": "KlogAcpiDckEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Evaluating _DOD", "advice": "The ACPI driver failed to enumerate the ACPI video devices because the _DOD (Enumerate All Devices Attached to the Display Adapter) control failed. This may explain why the video device is not functioning correctly.", "label": "KlogAcpiDodEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _DOD data", "advice": "The ACPI control _DOD (Enumerate All Devices Attached to the Display Adapter) returned either a NULL package or not did not return an ACPI_PACKAGE type as expected. This may explain why the video device is not functioning correctly.", "label": "KlogAcpiDodInvalidData" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid GPE 0x", "advice": "The ACPI driver was requested to get the status of a ACPI General Purpose Event or Fixed Event that did not exist. This is an unexpected driver error.", "label": "KlogAcpiInvalidGpe" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Evaluating _PRT", "advice": "The ACPI driver failed to get the PCI Routing Table for a device because the evaluation of _PRT (PCI Routing Table) failed. This will lead to the device not having the IRQ wired up to the correct slot/device/pin. Without this, the device cannot handle interrupts and will fail to work. ", "label": "KlogAcpiPrtEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Attempted physical table override failed", "advice": "The ACPI driver attempted to physically map an ACPI table but this failed. This table will not be used and this can lead to unexpected behaviour and loss of functionality.", "label": "KlogAcpiTablePhysMapFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Could not acquire Global Lock", "advice": "The ACPI Global Lock is a mutex that ensures exclusive access to resources controlled by the ACPI driver. This lock failed to be acquired which normally means that the kernel mutex has failed, which should never occur. This is normally considered a kernel bug.", "label": "KlogAcpiGlobalLockAcquireFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Could not release Global Lock", "advice": "The ACPI Global Lock is a mutex that ensures exclusive access to resources controlled by the ACPI driver. This lock failed to be release which normally means that the kernel mutex has failed, which should never occur. This is normally considered a kernel bug.", "label": "KlogAcpiGlobalLockReleaseFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Expected EISAID is larger than 32 bits:", "advice": "The ACPI driver gets EISAID larger than 32 bits when converting a numeric EISAID to string representation. It is truncated.", "label": "KlogAcpiEISAIDTooLarge" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error in acpi_memory_enable_device", "advice": "ACPI memory hotplug failed to add a memory device, acpi_memory_enable_device() failed. This occurs if the memory block has already been used by the kernel or if add_memory() failed.", "label": "KlogAcpiMemHotPlugFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Error reading AC Adapter state", "advice": "The ACPI driver could not read the AC adapter state because the ACPI control _PSR (Power Source) failed to evaluate. This could be because this control did not exist or more probably that it failed to execute because of an error between the firmware and the smart battery.", "label": "KlogAcpiPsrEvalFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "failed to add I2C device .* from ACPI", "advice": "Failed to create an I2C device while walking through the ACPI namespace enumerating I2C slave devices behind the adapter.", "label": "KlogAcpiI2CAddFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Cannot turn wakeup power resources on", "advice": "The ACPI driver was preparing to wakeup a device by powering on the power resources required for the device but one of these resources failed to power on. See acpi_enable_wakeup_device_power().", "label": "KlogAcpiPowerWakeupResources" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Cannot turn on wakeup power resources", "advice": "The ACPI driver was preparing to wakeup a device by powering on the power resources required for the device but one of these resources failed to power on. See acpi_enable_wakeup_device_power().", "label": "KlogAcpiPowerWakeupResources" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Cannot turn wakeup power resources off", "advice": "The ACPI driver was preparing to shutdown a wakeup device by powering off the power resources for the device but one of these resources failed to power off. See acpi_disable_wakeup_device_power().", "label": "KlogAcpiPowerWakeupResources" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Cannot turn off wakeup power resources", "advice": "The ACPI driver was preparing to shutdown a wakeup device by powering off the power resources for the device but one of these resources failed to power off. See acpi_disable_wakeup_device_power().", "label": "KlogAcpiPowerWakeupResources" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to evaluate processor object", "advice": "ACPI Processor() failed to evaluate. ACPI could not gather information on a CPU which will lead to it not being used.", "label": "KlogAcpiProcessorEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to evaluate processor _UID", "advice": "ACPI failed to evaluate a processor _UID object (as declared in a Device statement). ACPI could not gather information on a CPU which will lead to it not being used.", "label": "KlogAcpiProcessorEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Evaluating _TPC", "advice": "The ACPI driver failed to get the current number of supported CPU throttling T States because the ACPI control _TPC (Throttling Present Capabilities) failed to evaluate.", "label": "KlogAcpiTpcEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Evaluating _PTC", "advice": "The ACPI driver failed to get the Processor Throttling Control because the ACPI control _PTC failed to evaluate. This option control defines a processor throttling control interface alternative to the I/O address spaced-based P_BLK throttling control register (P_CNT). Without this the CPU cannot be throttled via this interface.", "label": "KlogAcpiPtcEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Evaluating _TSS", "advice": "The ACPI driver failed to get the Throttling Supported States because the ACPI control _TSS failed to evaluate. Processor throttling will not be enabled.", "label": "KlogAcpiTssEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _TSS data: freq is zero", "advice": "The ACPI driver got invalid data from the ACPI control _TSS (Throttling Supported States). One of the CPU throttling frequencies in the _TSS package is zero, which is invalid. Processor throttling will not be enabled.", "label": "KlogAcpiTssPackageFreqZero" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _TSS data", "advice": "The ACPI driver got invalid data from the ACPI control _TSS (Throttling Supported States). Either the package was NULL or the data returned was not of type ACPI_PACKAGE.", "label": "KlogAcpiTssPackageInvalid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Evaluating _TSD", "advice": "The ACPI driver could not get the T-State Dependency from the ACPI control _TSD. This means that the CPU will not have any throttling coordination with other CPUs", "label": "KlogAcpiTsdEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _TSD data", "advice": "The ACPI driver got invalid data from the ACPI control _TSD (T-State Dependency). Either the package was NULL or the data returned was not of type ACPI_PACKAGE or the number of elements in the package was incorrect or the package in element zero could not be extracted.", "label": "KlogAcpiTsdDataInvalid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Evaluating _PRW", "advice": "The ACPI driver failed to evaluate the ACPI control _PRW (Power Resources for Wake). As a result, wakeup device management will not function.", "label": "KlogAcpiPrwEvalFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Extracting _PRW package", "advice": "The ACPI driver got invalid data from the ACPI control _PRW (Power Resources for Wake). The returned data did not conform to the ACPI specification, see section 7.2.13 of the ACPI 5.0 ACPI specification for more details.", "label": "KlogAcpiPrwDataInvalid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Notifying BIOS of _CST ability failed", "advice": "The ACPI driver attempted to notify the firmware (using a System Management Interrupt) that the system had _CST (C-State) ability but this notify command failed. This may lead to unexpected C-State behaviour.", "label": "KlogAcpiSmiCstFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Evaluating _PIC", "advice": "The ACPI driver attempted to inform the firmware which method of interrupt routing was being used via the _PIC method, however, this failed to execute. This results in ACPI being disabled.", "label": "KlogAcpiPicEvalFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Mutex .* is not acquired, cannot release", "advice": "An attempt to release (unlock) an ACPI related mutex has occurred. This mutex could not be released. This is most probably a bug in the AML code where a Release opcode has been executed that does not match up with an earlier corresponding Mutex opcode. It may also be a bug in the ACPI driver, but this is less likely.", "label": "KlogAcpiMutexReleaseError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Thread .* could not acquire Mutex", "advice": "A mutex could not be acquired (locked) and the ACPI driver has flagged this up as an exception error. If this occurs when executing a AML Mutex opcode there could be race condition errors if the AML is not checking the return from the Mutex operation and a lot of firmware does omit this check.", "label": "KlogAcpiMutexAcquireError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unable to initialize fixed events", "advice": "The ACPI driver failed to initialize the structure that keeps track of fixed event handlers. The failure occurred when trying to disable one of the 4 fixed events and this causes the ACPI subsystem initialization to fail, which disables ACPI support.", "label": "KlogAcpiFixedEventInitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unable to initialize general purpose events", "advice": "The ACPI driver failed to initialize the General Purpose Event (GPE) blocks as defined in the ACPI FADT. This in turn causes the ACPI subsystem initialization to fail, which disables ACPI support.", "label": "KlogAcpiGpeInitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unable to install System Control Interrupt handler", "advice": "The ACPI driver failed to install the System Control (SCI) interrupt handler, which has to be working for ACPI to work correctly. This in turn causes the ACPI subsystem initialization to fail, which disables ACPI support.", "label": "KlogAcpiSciHandlerInitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unable to initialize Global Lock handler", "advice": "The ACPI driver failed to initialized the Global Lock handler, which is basically a kernel mutex (and should not fail). This in turn causes the ACPI subsystem initialization to fail, which disables ACPI support.", "label": "KlogAcpiGlobalLockInitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No installed handler for fixed event", "advice": "The ACPI driver failed to dispatch a fixed event because their is no fixed event handler installed for this event. This is an error and the kernel has disabled this event for further interrupts. This could lead to reduced functionality.", "label": "KlogAcpiNoFixedEventHandler" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Index .* is beyond end of object", "advice": "The ACPI interpreter could not execute an AML index opcode, the index in the first operand is out of range.", "label": "KlogAcpiIndexOverflow" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unexpected notify object type", "advice": "The ACPI interpreter could not execute a AML notify opcode because the first operand is not a notify object. This is a bug in the firmware.", "label": "KlogAcpiUnexpectedNotifyObjType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Sleep values out of range: A=.* B=.*", "advice": "An attempt to transition to a sleep state has occurred with the ACPI sleep type values for the PM controls set greater than the maximum allowed value of 7. This is an illegal value and the system will not be transistioned to this sleep state. ", "label": "KlogAcpiSleepValuesRangeError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown exception code: 0x", "advice": "An exception occurred but the exception code was not recognized and the ACPI driver could not find a textual description for this exception. This is most probably a bug in the ACPI driver or ACPICA core.", "label": "KlogAcpiUnknownExceptionCode" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown Reference Count action (0x", "advice": "An internal ACPI error occurred attempting to update an object reference count. An incorrect action type was provided, expected REF_INCREMENT or REF_DECREMENT, see acpi_ut_update_ref_count().", "label": "KlogAcpiUnknownRefCountAction" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid type .* for target of Scope operator .*Cannot override", "advice": "The ACPI interpreter found an invalid type for target of a scope operator, this occurred during the loading of the ACPI tables, see acpi_ds_load2_begin_op().", "label": "KlogAcpiInvalidTypeScopeOp" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Divide by zero", "advice": "The ACPI interpreter detected a zero divisor which produce a division by zero error. The AML code is buggy and this will return an undefined value that may cause unexpected behaviour.", "label": "KlogAcpiAmlDivideByZero" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not release AML Namespace mutex", "advice": "The ACPI AML interpreter attempted to release the mutex but this failed. The next time interpreter will attempt to acquire this mutex it will fail, however it will continue to execute AML but there will be race conditions occurring.", "label": "KlogAcpiAmlMutexNotReleased" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not release AML Interpreter mutex", "advice": "The ACPI AML interpreter attempted to release the mutex but this failed. The next time interpreter will attempt to acquire this mutex it will fail, however it will continue to execute AML but there will be race conditions occurring.", "label": "KlogAcpiAmlMutexNotReleased" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Could not map memory at 0x.* for length", "advice": "ACPI could not memory map the Extended BIOS Data Area (EBDA) or upper region 0xE0000-0xFFFFF to search for the ACPI RSDP. This normally results in the RSDP not being found, which means the ACPI tables can't be located and hence ACPI is disabled.", "label": "KlogAcpiRsdpMemMap" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid zero ID from AcpiOsGetThreadId", "advice": "A zero thread ID was returned which will break the ACPI driver. This should never happen, since the thread ID is actually the address of the thread descriptor which is never zero.", "label": "KlogAcpiZeroThreadId" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Unknown action (0x", "advice": "The ACPI engine was expecting to increment, decrement or delete a reference count but instead was given an unknown action to do instead. This is a bug in the ACPI ACPICA code.", "label": "KlogAcpiRefCountUnknownAction" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Null Op", "advice": "The ACPI interpreter found a NULL parse opcode and didn't expect to. See acpi_ds_delete_result_if_not_used() or acpi_ds_is_result_used().", "label": "KlogAcpiNullOp" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Unknown parent opcode Op=", "advice": "The ACPI interpreter found an AML opcode that had an unexpected parent class. This probably indicates an internal ACPI interpreter bug. ", "label": "KlogAcpiUnknownParentOp" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Time parameter is too large", "advice": "ACPI Stall() op was requested to wait for more than 255 usec. The ACPI specification states that the maximum should be 100 usec but to accommodate some firmware a maximum of 255 is supported by the kernel.", "label": "KlogAcpiStallTooLarge" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Evaluating _BCM failed", "advice": "Could not set the brightness level, the ACPI control _BCM failed to execute correctly.", "label": "KlogAcpiBcmFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Current brightness invalid", "advice": "The ACPI video driver set the brightness level using the ACPI control _BCM, however the level used was not a known level (as returned by _BCL).", "label": "KlogAcpiInvalidBrightness" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Too many duplicates in _BCL package", "advice": "ACPI method _BCL (Query List of Brightness Control Levels Supported) contains too many duplicated brightness levels in the returned package and this is non-standard.", "label": "KlogAcpiBclPackageContainsDuplicates" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Found unordered _BCL package", "advice": "ACPI method _BCL (Query List of Brightness Control Levels Supported) has a maximum brightness value which is not the last value in the returned package. Values returned must be in ascending order.", "label": "KlogAcpiBclUnorderedPackage" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "ACPI Subsystem is already terminated", "advice": "A request to terminate the ACPI driver but it is already terminated. You should not see this error.", "label": "KlogAcpiAlreadyTerminated" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Null scope parameter", "advice": "Failed to push the current scope onto the scope stack, the node was Null, which was not expected. See acpi_ds_scope_stack_push().", "label": "KlogAcpiNullScopeParameter" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid conversion sub-opcode", "advice": "The ACPI driver could not convert an AML resource descriptor to a corresponding internal resource descriptor. Refer to acpi_rs_convert_aml_to_resource() or acpi_rs_convert_resource_to_aml().", "label": "KlogAcpiConversionSupOpcode" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid conversion opcode", "advice": "The ACPI driver could not convert an AML resource descriptor to a corresponding internal resource descriptor. Refer to acpi_rs_convert_aml_to_resource() or acpi_rs_convert_resource_to_aml().", "label": "KlogAcpiConversionSupOpcode" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No SMI_CMD in FADT, mode transition failed", "advice": "ACPI FADT SMI_CMD is zero, with ACPI 2.0 this means that the system cannot transition to/from ACPI mode.", "label": "KlogAcpiFadtSmiCmdZero" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No ACPI mode transition supported in this system (enable/disable both zero)", "advice": "ACPI FADT ACPI_ENABLE is zero and ACPI_DISABLE is set, ACPI 2.0 this means enabling or disabling is not supported and the system cannot transition to ACPI mode.", "label": "KlogAcpiNoModeTransitionSupport" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Found a grandchild.*P=.*C=", "advice": "An error occurred in the ACPI driver, acpi_ns_delete_children() was trying to delete children objects and discovered that one of these had children objects of it's own, which should not happen.", "label": "KlogAcpiObjectGrandchild" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Cannot assign type .* to .*must be type Int/Str/Buf", "advice": "ACPI execution run time error: Type assignment was illegal, acpi_ex_resolve_object() was trying assign a type to a different type which is illegal.", "label": "KlogAcpiTypeAssign" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Store into an unresolved Alias object", "advice": "ACPI execution run time error: The ACPI driver has been asked to resolve an object of type ACPI_TYPE_LOCAL_ALIAS or ACPI_TYPE_LOCAL_METHOD_ALIAS but this should not occur as these should have been resolved earlier. See function acpi_ex_resolve_object() for more details.", "label": "KlogAcpiUnresolveAliasObject" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown AML opcode 0x", "advice": "ACPI execution run time error: The ACPI interpreter has reached an opcode that is unknown, this normally is a bug in the underlying AML code either because of badly written AML code or the compiler has produced code that is incorrect or the ACPI interpreter does not support this valid opcode. ", "label": "KlogAcpiUnknownAmlOpcode" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid AML Opcode: 0x", "advice": "ACPI execution run time error: The ACPI interpreter has reached an opcode that is unknown, this normally is a bug in the underlying AML code either because of badly written AML code or the compiler has produced code that is incorrect or the ACPI interpreter does not support this valid opcode. ", "label": "KlogAcpiUnknownAmlOpcode" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Found unknown opcode .* at AML address .* offset", "advice": "ACPI execution run time error: The ACPI interpreter has reached an opcode that is unknown, this normally is a bug in the underlying AML code either because of badly written AML code or the compiler has produced code that is incorrect or the ACPI interpreter does not support this valid opcode. ", "label": "KlogAcpiUnknownAmlOpcode" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "BCD digit too large (not decimal): 0x", "advice": "ACPI execution run time error: AML opcode AML_FROM_BCD_OP (0x5b28) contains a BCD digit value that is greater than 9 and is out of range for a Binary Coded Decimal digit.", "label": "KlogAcpiBcdDigitTooLarge" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Integer too large to convert to BCD", "advice": "ACPI execution run time error: AML opcode AML_TO_BCD_OP (0x5b29) has been requested to convert an integer into a Binary Coded Decimal value that is too large. An overflow has been caught and it is possible that unexpected execution behaviour will occur.", "label": "KlogAcpiToBcdOverflow" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "obsolete and not implemented", "advice": "ACPI execution run time error: Execution of AML_SHIFT_LEFT_BIT_OP (0x5b11) or AML_SHIFT_RIGHT_BIT_OP (0x5b10) were ignored, these are obsolete AML opcodes and are not implemented in the ACPI interpreter. Unexpected execution behaviour will occur.", "label": "KlogAcpiOpObsolete" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Operand must be Buffer/Integer/String/Package - found type", "advice": "ACPI execution run time error: Execution of AML_SIZE_OF_OP with an operand that is not a buffer, integer, string or package has occurred. This will result in unexpected behaviour. This is a bug in the AML.", "label": "KlogAcpiOpTypeBad" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Unknown Index TargetType 0x", "advice": "ACPI execution run time error: Execution of AML_DEREF_OF_OP (0x83) with an illegal target index operator that was not a buffer or a package type.", "label": "KlogAcpiUnknownIndexTargetType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Unknown class in reference", "advice": "ACPI execution run time error: Execution of AML_DEREF_OF_OP (0x83) with an illegal operand reference class.", "label": "KlogAcpiUnknownIndexTargetType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "apm.*an event queue overflowed", "advice": "More then 20 APM events were queued up which is unexpected. The queue was not being drained quickly by a reading process (perhaps it is not running).", "label": "KlogApmEventQueueOverflow" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "apm.*passed bad filp", "advice": "A read of the APM events was performed by a reading process with an unrecognised file pointer. This should not happen.", "label": "KlogApmReadBadFileptr" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "apm.*filp not in user list", "advice": "An attempt to release a APM reader occurred using an unrecognised file pointer. This should not happen.", "label": "KlogApmReleaseBadFileptr" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "apm.*cannot allocate struct of size %d bytes", "advice": "An attempt to open failed, out of memory. APM events cannot be read.", "label": "KlogApmOpenNoMemory" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "apm.*disabled - Unable to start kernel thread", "advice": "Cannot start kernel APM thread, APM handling will be disabled.", "label": "KlogApmKernelThreadFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "PnPBIOS.*ESCD size reported by BIOS escd_info call is too great", "advice": "The ESCD size was greater than a sane size of 32K.", "label": "KlogPnpBiosEscdSize" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "PnPBIOS.*ESCD size reported by BIOS read_escd call is too great", "advice": "The ESCD size was greater than a sane size of 32K.", "label": "KlogPnpBiosEscdSize" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_INFO", "pattern": "PnPBIOS.*Disabled by ACPI PNP", "advice": "The PnPBIOS driver was disabled because PnP support is provided by the ACPI driver.", "label": "KlogPnpBiosDisabled" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "PnPBIOS.*", "advice": "The PnPBIOS driver has detected an issue that fwts does not know about.", "label": "KlogPnpBiosError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Node number .* is out of sequence following node .* Aborting.", "advice": "Device node numbers are out of sequence.", "label": "KlogPnpBiosDevNodeSeqError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "PCI: BIOS BUG #", "advice": "A call to the PCI BIOS32 service routine (with service signature $PCI) has returned a bad status or an illegal PCI signature. The kernel will disable the use of the PCI BIOS.", "label": "KlogBios32PciFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "too many entries; ignoring ", "advice": "Legacy E820 BIOS has a limit of 128 entries in the E820 memory map but the firmware seems to have more than this. For EFI NUMA hardware, the limit is 128 + 3 * maximum number of nodes. The kernel has ignore the extra entries. This could lead to regions of memory being used by the kernel when in fact is should be reserved and this can lead to unexpected behaviour.", "label": "KlogE820TooManyEntries" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Ooops! Too many entries in the memory map!", "advice": "Legacy E820 BIOS has a limit of 128 entries in the E820 memory map but the firmware seems to have more than this. For EFI NUMA hardware, the limit is 128 + 3 * maximum number of nodes. The kernel has ignore the extra entries. This could lead to regions of memory being used by the kernel when in fact is should be reserved and this can lead to unexpected behaviour.", "label": "KlogE820TooManyEntries" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_LOW", "pattern": "MTRR.*CPU.*SYSCFG.*MtrrFixDramModEn.*not cleared by BIOS, clearing this bit", "advice": "The firmware is expected to clear MtrrFixDramModEn bit, see for example BIOS and Kernel Developer's Guide for the AMD Athlon 64 and AMD Opteron Processors (26094 Rev. 3.30 February 2006), section 13.2.1.2 SYSCFG Register. The MtrrFixDramModEn bit should be set 1 during firmware initialization of the fixed MTRRs, then cleared to 0 for operation. Hence the kernel has detected and worked around this fault.", "label": "KlogMtrrFixDramModEnNotClear" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "MTRR.*CPU.*Writing MSR .* to .* failed", "advice": "Writing to a MTRR MSR has failed. The kernel cannot do much about this and has ignored the failure.", "label": "KlogMtrrWriteMsrFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "acpi_request_vector.*invalid interrupt type", "advice": "An attempt to request an interrupt vector greater than 256 (ACPI_MAX_PLATFORM_INTERRUPTS) has occurred and will be rejected.", "label": "KlogAcpiIa64RequestBadVector" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI.*Can't find MADT", "advice": "Could not find the ACPI MADT. The kernel could not find this table so it could determine how many CPUs the system had. The machine will boot with just one CPU which may be the incorrect number of CPUs.", "label": "KlogAcpiMadtMissing" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI.*Error parsing MADT - no LAPIC entries", "advice": "The ACPI MADT could not be parsed to determine the number of Local APIC entries. This may lead to sub-optimal configuration of the machine.", "label": "KlogAcpiMadtLapicParseError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI.*Error parsing LAPIC address override entry", "advice": "The ACPI MADT could not be parsed to determine the Local APIC override entry.", "label": "KlogAcpiMadtLapiceOverrideParseError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI.*Error parsing LAPIC NMI entry", "advice": "The ACPI MADT could not be parsed to determine the Local APIC NMI entry.", "label": "KlogAcpiMadtLapicNmiParseError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI.*Error parsing MADT.*no IOSAPIC entries", "advice": "The ACPI MADT could not be parsed to find the IOSAPIC entries.", "label": "KlogAcpiMadtIosapicParseError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI.*Error parsing platform interrupt source entry", "advice": "The ACPI MADT could not be parsed to find the platform interrupt source entry.", "label": "KlogAcpiMadtPlatIntSrcParseError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI.*Can't find FADT", "advice": "The ACPI Fixed ACPI Description Table (FADT) is missing and so the kernel cannot determine if the legacy keyboard controller is present. It cannot also determine the SCI_INT interrupt line which is used for ACPI events, such as the power and sleep buttons. If the SCI_INT is not on a legacy interrupt then it needs to be specified in the FADT. ", "label": "KlogAcpiFadtMissing" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI.*Cannot create", "advice": "The ACPI driver attempted to create an entry in /proc/acpi but failed. This should not happen and is a kernel bug.", "label": "KlogAcpiProcfsCreateFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI.*Create sysfs link", "advice": "The ACPI driver attempted to create a sysfs link for a device and this failed. This should not happen and is a kernel bug.", "label": "KlogAcpiSysfsLinkCreateFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error updating fan power state", "advice": "Failed to update the fan power state when coming out of resume. The call to acpi_bus_update_power() failed even though the fan device was valid.", "label": "KlogAcpiFanResumeUpdate" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "does not support this state", "advice": "A request to suspend the machine was aborted because it was asked to transition to a sleep state that is not supported by the ACPI driver or this machine.", "label": "KlogAcpiUnsupportedSleepState" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Hardware changed while hibernated, cannot resume", "advice": "The FACS hardware signature has changed when coming out of hibernation. The kernel has concluded that the machine has changed and therefore won't commit to resuming from hibernate.", "label": "KlogAcpiS4ResumeBadFacsSignature" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Device don't exist, dropping EJECT", "advice": "A processor hotplug notify eject request event was rejected because the device does not seem to exist.", "label": "KlogAcpiHotPlugEjectMissingDevice" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Driver data is NULL, dropping EJECT", "advice": "A processor hotplug notify eject request event was rejected because the device data is NULL.", "label": "KlogAcpiHotplugEjectNullDeviceData" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid reference to IOAPIC pin", "advice": "The IOAPIC pin was invalid, it exceeded the maximum expected pin reference value (MP_MAX_IOAPIC_PIN 127).", "label": "KlogAcpiIoApicPinRefInvalid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Error parsing IOAPIC entry", "advice": "Failed to parse the ACPI MADT, the number of IOAPIC entries found was less than zero, which probably means the MADT is broken.", "label": "KlogAcpiMadtParseError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "No IOAPIC entries present", "advice": "The ACPI MADT was expected to contain at least one IOAPIC entry, however, none were found. Cannot enumerate the IOAPICs.", "label": "KlogAcpiMadtNoIoApicEntry" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error parsing interrupt source overrides entry", "advice": "Could not parse the ACPI MADT to determine the interrupt override for the SCI. This could lead to unexpected behaviour.", "label": "KlogAcpiMadtIrqOverrideParseError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Error parsing NMI SRC entry", "advice": "Could not parse the ACPI MADT to determine the NMI SRC entry. This could lead to unexpected behaviour.", "label": "KlogAcpiMadtNmiSrcEntryParseError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "pci_create_slot returned", "advice": "A PCI slot could not be register because a call to pci_create_slot() failed.", "label": "KlogAcpiPciSlot" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "walk_p2p_bridge failure", "advice": "Traversing the PCI root bridge failed because of an error walking the P2P bridge.", "label": "KlogAcpiPciSlot" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "register_slot failure", "advice": "Adding a PCI slot failed because traversing the PCI root bridge failed.", "label": "KlogAcpiPciSlot" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "_PRS resource type .* isn't an IRQ", "advice": "The ACPI _PRS resource type was expected to be an IRQ type and was not.", "label": "KlogAcpiPciLinkPrsIrq" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "_CRS resource type 0x%x isn't an IRQ", "advice": "The ACPI _CRS resource type was expected to be an IRQ type and was not.", "label": "KlogAcpiPciLinkCrsIrq" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unable to read status", "advice": "A query of _STA to get the bus status failed and the current link status is unknown.", "label": "KlogAcpiPciLinkSta" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "_CRS returned 0", "advice": "The query of the bus status failed because the _CRS controlled returned IRQ 0, which was not expected.", "label": "KlogAcpiPciLinkCrsIrqZero" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid Resource_type", "advice": "A PCI link set failed because the link IRQ resource type is invalid.", "label": "KlogAcpiPciLinkIrqResourceInvalid" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unable to set IRQ for", "advice": "An attempt to enabled the link device failed.", "label": "KlogAcpiPciLinkFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid link device", "advice": "Unable to allocate an IRQ failed because the link device is invalid.", "label": "KlogAcpiPciLinkDeviceInvalid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid link context", "advice": "Unable to allocate an IRQ failed because the link context was invalid (NULL).", "label": "KlogAcpiPciLinkContextNull" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI.*Invalid index", "advice": "Support for multiple index IRQ entries per link device is not yet implemented.", "label": "KlogAcpiPciLinkMultipleIrqEntries" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Link active IRQ is 0", "advice": "Unable to allocate an IRQ failed because the active IRQ is 0, which is wrong.", "label": "KlogAcpiPciLinkActiveIrqZero" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Link isn't initialized", "advice": "An attempt to free the IRQ of a link failed because the link was not initialized.", "label": "KlogAcpiPciLinkNotInitialized" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Evaluating processor object", "advice": "An error occurred evaluating the ACPI Processor() object, ACPI CPU control for this CPU broken.", "label": "KlogAcpiProcessorFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Evaluating processor _UID", "advice": "An error occurred evaluating an ACPI CPU _UID, ACPI CPU control for this CPU is broken.", "label": "KlogAcpiProcessorBadUid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid PBLK length", "advice": "The Processor Register Block data is not the expected size, ACPI control of this CPU will not occur.", "label": "KlogAcpiProcessorPblkBad" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Processor driver could not be attached", "advice": "An attempt to add a processor to the system failed in acpi_processor_add(), the processor driver's .probe failed calling device_attach(). The CPU cannot be added to the system under ACPI control.", "label": "KlogAcpiProcessorNotAttached" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _PSS data", "advice": "Failed to get ACPI performance states from the _PSS control, buffer was either NULL or not an ACPI package.", "label": "KlogAcpiPssFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid BIOS _PSS frequency found for processor", "advice": "CPU frequency in MHz as supplied by _PSS control cannot be stored in a 32 bit unsigned integer, overflow error.", "label": "KlogAcpiPssFreqTooBig" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No valid BIOS _PSS frequency found for processor", "advice": "One of the CPUs did not have a valid _PSS frequency defined. Cannot fetch _PSS levels for this CPU.", "label": "KlogAcpiPssNotFound" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _PSD data", "advice": "The ACPI _PSD control returned a pointer that was NULL or not an ACPI package or did not have 1 item in the package or the item could not be fetched out of the package. P-State dependencies cannot be evaluated, machine may perform sub-optimally.", "label": "KlogAcpiPsdBadData" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown _PSD:num_entries", "advice": "The number of _PSD entries should be 5 but a different count was returned. The P-State dependencies cannot be evaluated, machine may perform sub-optimally.", "label": "KlogAcpiPsdBadCount" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown _PSD:revision", "advice": "The _PSD revision should be 0 but a different version was returned. P-State dependencies cannot be evaluated, machine may perform sub-optimally.", "label": "KlogAcpiPsdBadRevision" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _PSD:coord_type", "advice": "The _PSD coordination type was invalid, it should be SW_ALL, SW_ANY or HW_ALL. P-State dependencies cannot be evaluated, machine may perform sub-optimally.", "label": "KlogAcpiPsdBadCoordType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to switch the brightness", "advice": "The ACPI video brightness for the LCD could not be set because _BCM failed.", "label": "KlogAcpiVideoBcmFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _DOD data in element", "advice": "The ACPI _DOD control returned an element that was not an ACPI integer as expected. This element will be ignored, which could lead to reduced functionality.", "label": "KlogAcpiVideoDodFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _DDC data", "advice": "The ACPI _DDC control is returning either a NULL buffer pointer or data that is not an ACPI buffer. The Extended Display Identification Data (EDID) structure that represents the display output device could not be fetched. This may affect video output.", "label": "KlogAcpiVideoDdcFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _BCL data", "advice": "The ACPI _BCL control is returning either a NULL buffer pointer or data that is not an ACPI package. LCD brightness level queries will not work.", "label": "KlogAcpiVideoBclFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Oops, 'acpi_handle' corrupt", "advice": "Failed to unbind a device, the ACPI handle was corrupt.", "label": "KlogAcpiHandleCorrupt" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Can't use platform_notify", "advice": "Cannot add the ACPI platform notifiers, they are already registered. This should not happen.", "label": "KlogAcpiPlatformNotify" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "memory_hp:Error in acpi_memory_enable_device", "advice": "Adding a hotplug memory device failed because.", "label": "KlogAcpiHotPlugAddMemDeviceFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_INFO", "pattern": "memory_hp:Disable memory device", "advice": "An ACPI notify eject request occurred to disable a memory device.", "label": "KlogAcpiHotPlugNotifyDisableOkay" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "memory_hp:Driver Data is NULL", "advice": "An ACPI notify eject request failed because the device data is NULL.", "label": "KlogAcpiHotPlugNotifyEjectDataNull" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Device doesn't exist", "advice": "An ACPI notify eject request failed because the device does not exist.", "label": "KlogAcpiHotPlugNotifyEjectDeviceNotExist" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "memory_hp:Cannot enable memory device", "advice": "Memory device notify failed because it could not enabled the memory device.", "label": "KlogAcpiHotPlugEnableFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "memory_hp:Cannot find driver data", "advice": "Memory device notify failed because it could not find the relevant driver data for this device.", "label": "KlogAcpiHotPlugDeviceNotify" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "memory_hp:add_memory failed", "advice": "Failed to add memory device, add_memory() failed for some reason.", "label": "KlogAcpiHotPlugAddMemoryFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "memory_hp:get_device_resources failed", "advice": "The devices resources could not be determined from the relevant ACPI _CRS control and so the memory device could not be enabled.", "label": "KlogAcpiHotPlugCrsFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Fatal opcode executed", "advice": "An ACPI AML fatal opcode was executed and the kernel has trapped this signal. It could be because of faulty control method code.", "label": "KlogAcpiFatalOpcodeSignal" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Call to queue_work() failed.", "advice": "Failed to queue up AML exec work on CPU 0. This results in ACPI control code not being executed which could lead to unexpected behaviour.", "label": "KlogAcpiQueueWorkFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "acpi_os_get_timer() TBD", "advice": "Support for the 64 bit ACPI AML timer operand is not implemented, this will be emulated and may affect AML code that relies on accurate timers.", "label": "KlogAcpiGetTimerNotImplemented" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "SCI .* allocation failed", "advice": "Failed to install an ACPI SCI interrupt handler because the the IRQ allocation failed.", "label": "KlogAcpiSciIrqAllocError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "SCI .*ACPI GSI .* not registered", "advice": "Failed to install an ACPI SCI interrupt handler because the Global System Interrupt (GSI) is not registered.", "label": "KlogAcpiSciGsiError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown or unused hardware error source type: .* for hardware error source:", "advice": "The ACPI Hardware Error Source Table (HEST) driver parsed the hardware error sources, but got the hardware error sources.", "label": "KlogAcpiHestHWSourceError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Table contents overflow for hardware error source", "advice": "The ACPI Hardware Error Source Table (HEST) driver parsed the hardware error sources, but got the table contents overflow.", "label": "KlogAcpiHestContentsOverflow" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Duplicated hardware error source ID", "advice": "The ACPI Hardware Error Source Table (HEST) driver parsed the hardware error sources, but got the duplicated hardware error source ID.", "label": "KlogAcpiHestDuplicateID" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "HEST: Failed to get table", "advice": "The ACPI Hardware Error Source Table (HEST) found the table, but it cannot get the table for some format exceptions.", "label": "KlogAcpiHestGetTableFail", }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "System description tables not found", "advice": "The EFI ACPI20 or ACPI RSDP pointers were invalid, so the kernel cannot find any of the ACPI tables. ACPI support will be disabled.", "label": "KlogAcpiEfiRsdpError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid EFI RTC value: write of .* to EFI RTC failed", "advice": "Failed to update the EFI Real Time Clock (RTC), the provided time was not a valid time and so the EFI RTC was not updated.", "label": "KlogAcpiEfiRtcWriteFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "acpi_memory_enable_device() error", "advice": "ACPI memory hotplug failed to add an ACPI memory device to the system. This error can occur if the memory block has already been used by the kernel or if the ACPI memory bind failed.", "label": "KlogAcpiMemEnableDevice" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Vendor .* System .* Revision .* has a known ACPI BIOS problem", "advice": "The kernel has recognised that this particular version of the firmware has known ACPI issues and so ACPI support will be disabled. Reduced functionality will occur.", "label": "KlogAcpiBlackListed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unable to register for device notifications", "advice": "The ACPI device notify handlers failed to be installed and so ACPI support with be disabled.", "label": "KlogAcpiNotifyHandlerInstallFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unable to initialize ACPI objects", "advice": "The ACPI objects failed to initialize and so ACPI support with be disabled.", "label": "KlogAcpiObjectsFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unable to register for system notifications", "advice": "The ACPI system nofifications failed to register and so ACPI support with be disabled.", "label": "KlogAcpiSysNotificationsRegFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unable to start the ACPI Interpreter", "advice": "The ACPI interpreter failed to start up correctly and so ACPI support with be disabled.", "label": "KlogAcpiInterpreterFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unable to enable ACPI", "advice": "The ACPI subsystem failed to be enabled and so ACPI support with be disabled.", "label": "KlogAcpiEnableFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unable to load the System Description Tables", "advice": "The ACPI driver was unabled to load the ACPI tables and so ACPI support will be disabled.", "label": "KlogAcpiLoadFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unable to initialize the ACPI Interpreter", "advice": "The ACPI interpreter could not be initialized and so ACPI support will be disabled.", "label": "KlogAcpiInitFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unable to reallocate ACPI tables", "advice": "The kernel count not reallocate the ACPI tables into memory from firmware and so ACPI support will be disabled.", "label": "KlogAcpiReallocateFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "can't evaluate _SEG", "advice": "The _SEG ACPI control could not be evaluated. This will stop certain PCI root bridges from being added and enabled on the computer.", "label": "KlogAcpiSegFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "can't evaluate _BBN", "advice": "The _BBN ACPI control could not be evaluated. This will stop certain PCI root bridges from being added and enabled on the computer.", "label": "KlogAcpiSegFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Bus .*:.* not present in PCI namespace", "advice": "The bus could not be found in the PCI namespace. This will stop certain PCI root bridges from being added and enabled on the computer.", "label": "KlogAcpiPciScanFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "_DSW execution failed", "advice": "The ACPI control _DSW (Device Sleep Wake) failed to execute, this may impact on the ability to enable or disable the wake capabilities of a device in the computer.", "label": "KlogAcpiDswFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "_PSW execution failed", "advice": "The ACPI control _PSW (Power State Wake) failed to execute, this may impact on the ability to enable or disable the wake capabilities of a device in the computer.", "label": "KlogAcpiPswFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Transition power state", "advice": "Failed to power on or shutdown a wakeup device using _PSW or _DSW control methods.", "label": "KlogAcpiSuspend" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Fail in evaluating the _REG object of EC device", "advice": "The _REG object for the Embedded Controller Device could not be evaluated, however the kernel will ignore this and try to install the handler for the Embedded Controller.", "label": "KlogAcpiEcBadReg" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unable to undock", "advice": "An undock event was requested but the machine still seems to be docked.", "label": "KlogAcpiDockCannotUndock" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unable to dock", "advice": "A dock notify event was handled but the machine still seems to be undocked.", "label": "KlogAcpiDockCannotDock" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown dock event", "advice": "A dock notify event was handled, but the type of notify event was not recognised.", "label": "KlogAcpiDockEvent" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": ".* encountered error .*", "advice": "An error occurred when trying to add a new dock station device.", "label": "KlogAcpiDockAdd" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "More than one Lid device found", "advice": "Failed to add a Lid device because one already exists. The kernel does not support more than one Lid device.", "label": "KlogAcpiLidMany" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Unsupported hid", "advice": "The Lid Hardware ID (HID) is one that the kernel does not recognise and so the Lid device was not added to the system. This can explain why the Lid does not work.", "label": "KlogAcpiLidBadHid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "device is NULL", "advice": "The kernel count not add a container because the device associated with this was NULL, which is unexexpected.", "label": "KlogAcpiContainer" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "wakeup header does not match", "advice": "The ACPI suspend wakeup header did not contain the expected header value so the kernel had to abort the suspend. This can happen if the data is corrupted.", "label": "KlogAcpiSuspendHeader" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "not enough elements in _CST", "advice": "_CST returned either a NULL buffer or a type that wasn't an ACPI package or less than 2 elements in the package. The kernel could not evaluate the CPU supported C states supported, meaning that the machine will not run optimally.", "label": "KlogAcpiCstElements" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "count given by _CST is not valid", "advice": "_CST returned an invalid number of elements, the package a different number of C states to the number of C states that _CST reported. The kernel could not evaluate the CPU supported C states supported, meaning that the machine will not run optimally.", "label": "KlogAcpiCstCount" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No return object", "advice": "An ACPI evaluate for a reference returned a buffer of zero length or a NULL buffer pointer.", "label": "KlogAcpiEvalReferenceBadBuffer" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Expecting a [Package], found type", "advice": "An ACPI evaluate for a reference did not return a ACPI package as expected.", "label": "KlogAcpiEvalReferenceNotPackage" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "[Package] has zero elements", "advice": "An ACPI evaluate for a reference returned an illeage package of zero elements.", "label": "KlogAcpiEvalReferencePackageZeroElements" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Expecting a [Reference] package element, found type", "advice": "An ACPI evaluate for a reference returned contained an element that was not a reference type.", "label": "KlogAcpiEvalReferencePackageElementType" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "error obtaining _EC", "advice": "The ACPI Embedded Controller Offset Query Control Method _EC failed to evaluate. It is either missing or broken and means the kernel could not add a SMBUS host controller.", "label": "KlogAcpiEcFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "host controller is not configured", "advice": "The kernel count not issue a SMBUS transaction because the host controller was not configured. See acpi_smbus_transaction()", "label": "KlogSmbusHostController" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Error attaching device data", "advice": "The kernel could not register a thermal zone because acpi_attach_data() failed for some reason. The machine may not be able to optimally cool itself and may have overheating issues because of this error.", "label": "KlogAcpiThermZoneAttachFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _TSS data: freq is zero", "advice": "The _TSS has returned a zero frequency setting in one or more of the package elements.", "label": "KlogAcpiTssZeroFrequency" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _TSS data", "advice": "The _TSS has returned a NULL data pointer or data which isn't an ACPI package.", "label": "KlogAcpiTssBadData" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown _TSD:num_entries", "advice": "The number of entries in the throlling domain information was not 5.", "label": "KlogAcpiTsdIllegalNumEntries" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown _TSD:revision", "advice": "The expected TSD revision was not 0.", "label": "KlogAcpiTsdBadRevision" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "HARDWARE addr space,NOT supported yet", "advice": "The CPU does not seem to support the MSR_IA32_THERM_CONTROL MSR.", "label": "KlogAcpiUnsupportedThermControlMsr" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Unknown addr space", "advice": "Could not read the hardware specific throttling status, the status register space ID was not a system I/O space or a fixed hardware space.", "label": "KlogAcpiThrottleStatusBadRead" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _TSD data", "advice": "The _TSD has returned data which isn't valid, either a NULL data pointer or data which isn't an ACPI package has been returned.", "label": "KlogAcpiTsdBadData" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _PTC control register", "advice": "The _PTC control register bit widths or bit offsets are incorrect.", "label": "KlogAcpiPtcControlRegisterInvalid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _PTC status register", "advice": "The _PTC status register bit widths or bit offsets are incorrect.", "label": "KlogAcpiPtcStatusRegisterInvalid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _PTC data (status_register)", "advice": "The _PTC status register data (element 1 of the package) was either NULL or too small.", "label": "KlogAcpiPtcDataStatusRegister" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _PTC data (control_register)", "advice": "The _PTC control register data (element 0 of the package) was either NULL or too small.", "label": "KlogAcpiPtcDataControlRegister" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Invalid _PTC data", "advice": "_PTC did not return a package of two elements, expected a two element package containing buffers for the control and status register.", "label": "KlogAcpiPtcDataBad" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to create sysfs link 'thermal_cooling'", "advice": "sysfs_create_link() failed to create the thermal 'thermal_cooling' sysfs entry.", "label": "KlogAcpiThermalThermalCoolingSysfs" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Failed to create sysfs link 'device'", "advice": "sysfs_create_link() failed to create the thermal 'device' sysfs entry.", "label": "KlogAcpiThemalDeviceSysfs" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Setting initial power state", "advice": "The call to acpi_bus_update_power() in acpi_fan_add() failed while adding a new fan device.", "label": "KlogAcpiFanAddFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "EC.*input buffer is not empty, aborting transaction", "advice": "The ACPI Embedded Controller (EC) driver attempted to perform a read or write transaction but had to abort because the EC was still busy and the input buffer was not emptied within 500ms. Normally this indicates an EC firmware fault. One can try increasing the delay using the acpi.ec_delay kernel parameter or writing to /sys/module/acpi/parameters/ec_delay - however this generally does not help much if the EC firmware is buggy.", "label": "KlogAcpiEcInputBufferIsNotEmpty" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_INFO", "pattern": "ENERGY_PERF_BIAS.*Set to 'normal'.* was 'performance'", "advice": "This is not exactly a failure but a warning from the kernel. The MSR_IA32_ENERGY_PERF_BIAS was initialized and defaulted to a high performance bias setting. The kernel has detected this and changed it down to a 'normal' bias setting.", "label": "KlogEnergyPerfBiasSetToNormal" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "pnp.*can't evaluate _CRS: 12311", "advice": "The _CRS object could not be evaluated because an invalid resource type has been returned. This can lead to misconfigured PNP hardware and may render a system unbootable.", "label": "KlogPnpCrsInvalidResourceType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "pnp.*can't evaluate _CRS:", "advice": "The _CRS object could not be evaluated, the error code is an ACPI error return code (see include/acpi/acexecp.h in the linux source, this is composed of bottom 12 bits of an error number and upper 4 bits of an AE_CODE_* code. Typically, _CRS evaluation errors can lead to misconfigured PNP hardware and may render a system unbootable.", "label": "KlogPnpCrsCannotEvaluate" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "dell_wmi:.*Received unknown WMI event", "advice": "The Dell WMI driver has received an unknown WMI event. The driver should handle this new event or the firmware is reporting an incorrect and unknown event.", "label": "KlogDellWmiReceivedUnknownWMIEvent" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "dell_wmi:.*bad event status 0x", "advice": "The Dell WMI driver has received a bad event status. This should be investigated further.", "label": "KlogDellWmiBadEventStatus" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "asus_wmi:.*Unknown key.*pressed", "advice": "The ASUS WMI driver has received an unknown key event. The driver should handle this new key event or the firmware is reporting an incorrect and unknown event.", "label": "KlogAsusWmiUnknownKeypressed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "hp_wmi:.*bad event status 0x", "advice": "The HP WMI driver has received a bad event status. This should be investigated further.", "label": "KlogHpWmiBadEventStatus" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "hp_wmi:.*Unknown response received", "advice": "The HP WMI driver has received a return object that was not of type ACPI_BUFFER. The driver needs to be updated to handle this new return type or there is a bug in the WMI mechanism on this machine.", "label": "KlogHpWmiUnknownResponseReceived" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "hp_wmi:.*Unknown buffer length", "advice": "The HP WMI driver has received a return buffer that was not the expected size of 8 or 16 bytes. This is probably a bug in the WMI mechanism on this machine.", "label": "KlogHpWmiUnknownBufferLength" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "hp_wmi:.*Unknown key code - 0x", "advice": "The HP WMI driver has received a key code that it does not recognise. The driver needs to be updated to handle this new key code.", "label": "KlogHpWmiUnknownKeyCode" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "hp_wmi:.*Unknown event_id", "advice": "The HP WMI driver has received an event ID that it does not recognise. The driver needs to be updated to handle this new event ID.", "label": "KlogHpWmiUnknownEventId" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "msi_wmi:.*Unknown key pressed", "advice": "The MSI WMI driver has received a key code that it does not recognise. The driver needs to be updated to handle this new key code.", "label": "KlogMsiWmiUnknownKeyPressed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI.*Handling Garbled _PRT entry", "advice": "BIOS has a garbled _PRT entry; source_name and source_index swapped.", "label": "KlogAcpiHandlingGarbledPrtEntry" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "Invalid _PCT data", "advice": "The ACPI _PCT data is invalid.", "label": "KlogInvalidPctData" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*ACPI path has too many parent prefixes", "advice": "A path to an ACPI object has too many ^ parent prefixes and references passed the top of the root node. Please check AML for all ^ prefixed ACPI path names.", "label": "KlogAcpiPathTooManyParentPrefixes" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "A valid RSDP was not found", "advice": "An ACPI compatible system must provide an RSDP (Root System Description Pointer). This structure provides the physical address of the RSDT and XSDT. Since this could not be found, the ACPI driver has had to disable ACPI support.", "label": "KlogAcpiValidRsdpNotFound" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "ACPI Error.*Cannot release Mutex", "advice": "Attempted to release of a Mutex that was not previous acquired. This needs fixing as it could lead to race conditions when operating on a resource that needs to be proteced by a Mutex.", "label": "KlogAcpiCannotReleaseMutex" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Could not disable .* event", "advice": "", "label": "KlogAcpiCouldNotDisableEvent" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Could not enable .* event", "advice": "", "label": "KlogAcpiCouldNotEnableEvent" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "ACPI Error.*Namespace lookup failure, AE_ALREADY_EXISTS", "advice": "", "label": "KlogAcpiNamespaceLookupFailure" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "ACPI Error.*_SB_._OSC.*AE_AML_BUFFER_LIMIT", "advice": "Section 6.2.10.2 of V4.0a of the ACPI specification states that the _OSC Method should be passed an 8 byte buffer of 2 x 32 DWORDs, however it appears that the method is possibly trying to access data outside this buffer. This is a bug in the _OSC method.", "label": "KlogAcpiSbOscAeAmlBufferLimit" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".*pci.*ACPI _OSC request failed.*returned control mask", "advice": "The _OSC method evaluation failed, which will result in disabling PCIe functionality, for example, the Linux kernel has to disable Active State Power Management (ASPM) which means that PCIe power management is not optimally configured.", "label": "KlogPciAcpiOscRequestFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "_OSC invalid UUID", "advice": "The _OSC method indicates it has been passed an invalid UUID, see section 6.2.10 _OSC (Operating System Capabilities) of the ACPI specification for more details. Note that it has been observed on some systems that this error is returned because the _OSC has evaluated incorrectly and it returns with an incorrect error setting the OSC invalid UUID error bit.", "label": "KlogOscInvalidUuid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "_OSC invalid revision", "advice": "The _OSC method indicates it has been passed an invalid revision number, see section 6.2.10 _OSC (Operating System Capabilities) of the ACPI specification for more details. Note that the revision level is specific to the given UUID.", "label": "KlogOscInvalidRevision" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "_OSC request failed", "advice": "The _OSC method evaluation failed for some unknown reason. This could be that the data passed to it was incorrect or that the method itself is broken. See section 6.2.10 _OSC (Operating System Capabilities) of the ACPI specification for more details.", "label": "KlogOscRequestFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "_OSC request failed", "advice": "The _OSC method evaluation failed for some unknown reason. This could be that the data passed to it was incorrect or that the method itself is broken. See section 6.2.10 _OSC (Operating System Capabilities) of the ACPI specification for more details.", "label": "KlogOscRequestFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "ACPI Error.*Field.*exceeds Buffer", "advice": "The field exceeds the allocated buffer size. This can lead to unexpected results when fetching data outside this region.", "label": "KlogAcpiFieldexceedsBuffer" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "ACPI Error.*Illegal I\/O port address\/length above 64K", "advice": "A port address or length has exceeded the maximum allowed 64K address limit. This will lead to unpredicable errors.", "label": "KlogAcpiIllegalIOAbove64K" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Incorrect return type", "advice": "An ACPI Method has returned an unexpected and incorrect return type.", "label": "KlogAcpiIncorrectReturnType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Needed .*\\[Buffer\/String\/Package\\], found \\[Integer\\]", "advice": "An ACPI Method has returned an Integer type when a Buffer, String or Package was expected.", "label": "KlogAcpiNeededBufferOrStringOrPackage" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Needed .*\\[Reference\\], found \\[Device\\]", "advice": "An ACPI Method has returned an Device type when a Reference type was expected.", "label": "KlogAcpiNeededReference" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*No handler for Region.*SystemCMOS", "advice": "An attempt to dispatch an address space or operation region access to CMOS memory has failed because the Linux kernel does not yet have a CMOS handler. This may have little or no detrimental effect, however it is worth examining the AML to see what kind of access is occurring to see if the firmware really requires CMOS access. For example, recent firmware may implement Peak Shift, which requires access CMOS memory and this can trigger this error.", "label": "KlogAcpiNoHandlerForRegion" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No handler for Region", "advice": "ACPI attempted to read or write to a region however the ACPI driver does not have a handler implemented for this particular region space. The read/write will fail and undefined behaviour will occur.", "label": "KlogAcpiNoHandlerForRegion" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Region SystemCMOS.* has no handler", "advice": "An attempt to read or write a single field to a CMOS Operation Region has failed because the Linux kernel does not yet have a CMOS handler. This may have little or no detrimental effect, however it is worth examining the AML to see what kind of access is occurring to see if the firmware really requires CMOS access. For example, recent firmware may implement Peak Shift, which requires access CMOS memory and this can trigger this error.", "label": "KlogAcpiRegionHasNoHandler" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Region .* has no handler", "advice": "", "label": "KlogAcpiRegionHasNoHandler" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Missing expected return value", "advice": "The ACPI Method did not return a value and was expected too. This is a bug and needs fixing.", "label": "KlogAcpiMissingExpectedReturnValue" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Package List length.*larger than.*truncated", "advice": "A Method has returned a Package List that was larger than expected.", "label": "KlogAcpiPackageListLargerThanExpected" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "ACPI Error.*Found unknown opcode", "advice": "An illegal AML opcode has been found and is ignored. This indicates either badly compiled code or opcode corruption in the DSDT or SSDT tables or a bug in the ACPI execution engine. Recommend disassembing using iasl to find any offending code.", "label": "KlogAcpiFoundUnknownOpcode" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "ACPI Warning.*Detected an unsupported executable opcode", "advice": "An illegal AML opcode has been found and is ignored. This indicates either badly compiled code or opcode corruption in the DSDT or SSDT tables or a bug in the ACPI execution engine. Recommend disassembing using iasl to find any offending code.", "label": "KlogAcpiDetectedUnsupportedOpCode" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "bios32_service.*not present", "advice": "The BIOS has found a BIOS32 Service Directory but the BIOS has returned error 0x80 on calling the service, which indicates that the requested service has not been implemented in the firmware.", "label": "KlogBios32ServiceNotPresent" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "bios32_service.*BIOS bug", "advice": "The BIOS has found a BIOS32 Service Directory but the BIOS has returned an error on calling the service, which is unexpected and usually means the firmware is broken.", "label": "KlogBios32ServiceBiosBug" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "PCI: Error.*when fetching IRQ routing table", "advice": "The BIOS has been interrogated for the PCI IRQ routing table but the BIOS returned an error.", "label": "KlogPciFetchingIRQRoutingTable" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "ACPI Error.*Denied AML access to port", "advice": "AML code was accessing an I/O port that was banned from accesses. Ports 0x20-0x21 (PIC0), 0xa0-0xa1 (PIC1), 0x4d0-0x4d1 (ELCR) are always banned. For _OSI() greater or equal to 'Windows 2001' (Windows XP) ports 0x00-0x0f (DMA), 0x40-0x43 (PIT1), 0x48-0x4b (PIT2), 0x70-0x71 (RTC), 0x81-0x83 (DMA1), 0x87 (DMA1L), 0x89-0x8b (DMA2), 0x8f (DMA2L), 0x90-0x91 (ARBC), 0x93-0x94 (SETUP), 0x96-0x97 (POS), 0xc0-0xdf (ISA DMA) and 0xcf8-0xcff (PCI config) are banned. Since the AML code has been banned from accessing these ports you will get undefined behaviour and the AML code should be fixed.", "label": "KlogAcpiDeniedAmlAccessToPort" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Method parse\/execution failed.*AE_AML_NO_RETURN_VALUE", "advice": "The ACPI Method was expected to return a value and did not.", "label": "KlogAcpiMethodNoReturnValue" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Method parse/execution failed.*EC.*AE_TIME", "advice": "The ACPI driver encountered an error executing some ACPI AML code which originated from the Embedded Controller (EC) timing out while waiting for a transaction to complete. This could indicate that either EC interrupts are being disabled or that the EC has temporarily gone offline or locked up, so this could be a kernel error or more probably a bug in the EC firmware. See the kernel driver drivers/acpi/ec.c. One can increase EC timeouts using the kernel parameter ec_delay to specify the timeout in milliseconds, the default is 500.", "label": "KlogAcpiEcTimeout" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "Method parse/execution failed.*AE_TIME", "advice": "The ACPI driver encountered an error executing some ACPI AML code which originated from a device timing out.", "label": "KlogAcpiTimeout" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Method (execution|parse\/execution) failed.*AE_ALREADY_EXISTS", "advice": "", "label": "KlogAcpiObjectAlreadyExists" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Method (execution|parse\/execution) failed.*AE_INVALID_TABLE_LENGTH", "advice": "The ACPI Method returned a table of the incorrect length. This can lead to unexpected results.", "label": "KlogAcpiInvalidTableLength" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Method (execution|parse\/execution) failed.*_SRS.*AE_AML_BUFFER_LIMIT", "advice": "Method failed: ResourceSourceIndex is present but ResourceSource is not. This is a common issue from a particular BIOS vendor, the _SRS (Set Resource Settings) optional control takes a byte stream argument that specifies a new resource allocation for a device. The resource descriptors in the byte stream argument must be specified exactly as listed by _CRS. However, in this case _SRS has been passed a byte stream that is too short and attempted to access bytes outside the buffer causing this error. This is a firmware bug that needs to be fixed.", "label": "KlogAcpiBufferLimit" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Method (execution|parse\/execution) failed.*AE_AML_BUFFER_LIMIT", "advice": "Generally this error occurs because of access outside of a buffer. This occurs for several reasons: a) A field does not fit within the current length of a buffer, b) an ACPI table load did not fit into a buffer, c) An attempt to convert a buffer into an integer failed because the buffer was zero sized, d) a SMBus/IPMI/GenericSerialBus write failed because the buffer was too small, e) An index into a buffer was too long and fell outside the buffer.", "label": "KlogAcpiBufferLimit" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_INFO", "pattern": "ACPI Error.*Method (execution|parse\/execution) failed.*_PTS.*AE_NOT_EXIST", "advice": "The kernel has attempted to execute the _PTS (Prepare to Suspend) control but it has not been implemented on this platform. Section 6.1 of the ACPI specification states: 'The _PTS control method provides the BIOS a mechanism for performing some housekeeping, such as writing the sleep type value to the embedded controller, before entering the system sleeping state'. Hence _PTS is provided for the firmware to do housekeeping and therefore does not appear to be mandatory. In this case, the platform seems to have omitted _PTS because it may not need it. Unfortunately the kernel complains about this not existing. This is most probably not an error.", "label": "KlogAcpiObjectDoesNotExist" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Method (execution|parse\/execution) failed.*AE_NOT_EXIST", "advice": "The ACPI interpreter failed to execute or parse some AML because a object or control did not exist. This normally occurs because of buggy firmware and may lead to unexpected behaviour or loss of functionality.", "label": "KlogAcpiObjectDoesNotExist" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Method (execution|parse\/execution) failed.*AE_NOT_FOUND", "advice": "", "label": "KlogAcpiObjectNotFound" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Method (execution|parse\/execution) failed.*AE_LIMIT", "advice": "", "label": "KlogAcpiExecLimit" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Method (execution|parse\/execution) failed.*AE_AML_OPERAND_TYPE", "advice": "", "label": "KlogAcpiOperandType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Method (execution|parse\/execution) failed.*AE_TIME", "advice": "", "label": "KlogAcpiTimeOut" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Method (execution|parse\/execution) failed.*AE_AML_PACKAGE_LIMIT", "advice": "", "label": "KlogAcpiPackageLimit" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Method (execution|parse\/execution) failed.*AE_OWNER_ID_LIMIT", "advice": "Method failed to allocate owner ID.", "label": "KlogAcpiOwnerIdLimit" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Method (execution|parse\/execution) failed.*AE_AML_MUTEX_NOT_ACQUIRED", "advice": "A Mutex acquire failed, which could possibly indicate that it was previously acquired and not released, or a race has occurred. Some AML code fails to miss Mutex acquire failures, so it is a good idea to verify all Mutex Acquires using the syntaxcheck test.", "label": "KlogAcpiMutexNotAcquired" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Method parse/execution failed", "advice": "The ACPI driver encountered a parse or execution error on some ACPI AML code. This is unexpected and normally indicates that there is a bug in the compiled AML code. It could be a programming fault or an AML compiler issue. See acpi_ps_parse_aml().", "label": "KlogAcpiParseExecAmlFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*SMBus or IPMI write requires Buffer of", "advice": "An incorrect SMBus or IPMI write buffer size was used.", "label": "KlogAcpiIncorrectWriteBufferSize" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI (Warning|Error).*Evaluating .* failed", "advice": "Executing the ACPI Method ended in an execution failure. This needs investigating.", "label": "KlogAcpiEvaluationFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning.*Optional field.*has zero address or length", "advice": "An ACPI table contains Generic Address Structure that has an address that is incorrectly set to zero, or a zero length. This needs to be fixed. ", "label": "KlogAcpiOptionalFieldZeroAddressOrLength" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI (Warning|Error).*two DSDT tables", "advice": "The FADT table contains a mismatch between the 32 bit pointer (DSDT) and 64 bit pointer (X_DSDT) pointer to the FACS table. Section 5.2.9 of version 4.0a of the ACPI specification states that X_DSDT should be zero if DSDT is defined, or DSDT should be zero if X_DSDT is zero. With two different pointers defined, the kernel has to make a choice, and opts for the 32 bit pointer. Because these pointers are different, it suggests either one of them is incorrect, or different 32 bit and 64 bit DSDT tables are present in your system, which is NOT complaint with the ACPI specification. The kernel has to make a choice and opts for the 32 bit DSDT.", "label": "KlogAcpiTwoDsdt" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI (Warning|Error).*two FACS tables", "advice": "The FADT table contains a mismatch between the 32 bit pointer (FIRMWARE_CTRL) and 64 bit pointer (X_FIRMWARE_CTRL) pointer to the FACS table. Section 5.2.9 of version 4.0a of the ACPI specification states that X_FIRMWARE_CTRL should be zero if FIRMWARE_CTRL is defined, or FIRMWARE_CTRL should be zero if X_FIRMWARE_CTRL is zero. With two different pointers defined, the kernel has to make a choice, and opts for the 32 bit pointer. Because these pointers are different, it suggests either one of them is incorrect, or different 32 bit and 64 bit FACS tables are present in your system, which is NOT complaint with the ACPI specification. The kernel has to make a choice and opts for the 32 bit FIRMWARE_CTRL.", "label": "KlogAcpiTwoFacs" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "32/64X address mismatch in.*, using 32", "advice": "The FADT table contains a mismatch between a 32 bit pointer and a 64 bit Generic Address pointer. Because these pointers are different, it suggests either one of them is incorrect. If a non-null 32 bit pointer exists, then the kernel will opt for this in preference to the 64 bit pointer even though this is not in accordance to the ACPI specification.", "label": "KlogAcpi32Bit64BitAddressMismatch" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI (Warning|Error).*32\/64.*(length|address) mismatch in.*tbfadt", "advice": "The FADT table contains Generic Address Structure that has a mismatch between the 32 bit and 64 bit versions of an address. This should be fixed so there are no mismatches. ", "label": "KlogAcpi32Bit64BitAddressMismatchInFadt" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI (Warning|Error).*32\/64.*(length|address) mismatch in", "advice": "A table contains Generic Address Structure that has a mismatch between the 32 bit and 64 bit versions of an address. This should be fixed so there are no mismatches. ", "label": "KlogAcpi32Bit64BitAddressMismatch" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning.*Return Package type mismatch", "advice": "ACPI AML interpreter executed a Method that returned a package with incorrectly typed data. The offending method needs to be fixed.", "label": "KlogAcpiReturnPackageTypeMismatch" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning.*Return Package has no elements", "advice": "ACPI AML interpreter executed a Method that returned a package with no elements inside it. This is most probably a bug in the Method and needs to be fixed.", "label": "KlogAcpiReturnPackageZeroElements" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning.*Return Package is too small", "advice": "ACPI AML interpreter executed a Method that returned a package with too few elements inside it. This is most probably a bug in the Method and needs to be fixed.", "label": "KlogAcpiReturnPackageTooSmall" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "ACPI Warning.*Incorrect checksum in table", "advice": "The ACPI table listed above has an incorrect checksum, this could be a BIOS bug or due to table corruption.", "label": "KlogAcpiIncorrectTableChecksum" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning.*_BQC returned an invalid level", "advice": "Method _BQC (Brightness Query Current) returned an invalid display brightness level.", "label": "KlogAcpiBqcReturnedInvalidLevel" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning.*Could not enable fixed event", "advice": "", "label": "KlogAcpiCannotEnableFixedEvent" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning.*Return type mismatch", "advice": "The ACPI Method returned an incorrect type, this should be fixed.", "label": "KlogAcpiReturnTypeMismatch" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning.*Parameter count mismatch", "advice": "The ACPI Method was executing with a different number of parameters than the Method expected. This should be fixed.", "label": "KlogAcpiParameterCountMistmatch" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning.*Insufficient arguments", "advice": "The ACPI Method has not enough arguments as expected. This should be fixed.", "label": "KlogAcpiInsufficientArguments" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning.*Package has no elements", "advice": "The ACPI Method returned a package with no elements in it, and some were expected. This should be fixed.", "label": "KlogAcpiPackageHasNoElements" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning.*Converted Buffer to expected String", "advice": "Method returned a Buffer type instead of a String type and ACPI driver automatically converted it to a String. It is worth fixing this in the DSDT or SSDT even if the kernel fixes it at run time.", "label": "KlogAcpiConvertedBufferToString" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning.*Return Package type mismatch at index", "advice": "The ACPI Method returned a package that contained data of the incorrect data type. This data type needs fixing.", "label": "KlogAcpiReturnPackageTypeMismatch" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning.*Invalid length for.*fadt", "advice": "This item in the FADT is the incorrect length. Should be corrected.", "label": "KlogAcpiFadtInvalidLength" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_INFO", "pattern": "ACPI Warning.*FADT .*revision 5.* is longer than ACPI 2.*0 version", "advice": "The kernel has not supported ACPI version 5.0, it truncated the FADT back to ACPI2.0 size and ignored the extra ACPI5.0 settings.", "label": "KlogAcpiFadtTruncatedLength" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning.*Invalid throttling state", "advice": "", "label": "KlogAcpiInvalidThrottlingState" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_LOW", "pattern": "ACPI Warning: SystemMemory range 0x.*-0x.* conflicts with", "advice": "A resource conflict between an ACPI OperationRegion and a native driver has been detected. By default the kernel will use a strict policy and will not allow this region to conflict and -EBUSY will be returned to the caller that was trying to allocate the already claimed region. If an ACPI driver is available for this device then this should be used instead of a native driver, so disabling the native driver may help. One can specify kernel boot parameter acpi_enforce_resources=lax to disable these checks but it may lead to random problems and system instability. Alternatively, one can specify acpi_enforce_resources=no and ACPI Operation Region resources will not be registered.", "label": "KlogAcpiSystemMemoryConflict" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Warning", "advice": "ACPI AML interpreter has found some non-conforming AML code. This should be investigated and fixed.", "label": "KlogAcpiBadAmlCode" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI.*BIOS bug: multiple APIC\/MADT found, using", "advice": "The kernel has detected more than one ACPI Multiple APIC Description Table (MADT) (these tables have the \"APIC\" signature). There should only be one MADT and the kernel will by default select the first one. However, one can override this and select the Nth MADT using acpi_apic_instance=N.", "label": "KlogAcpiMultipleApicMadtFound" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "\\[Firmware Bug\\]: ACPI.*Invalid physical address in GAR", "advice": "ACPI Generic Address is invalid", "label": "KlogAcpiInvalidPhysicalAddress" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "\\[Firmware Bug\\]: powernow-k8.*(No PSB or ACPI _PSS objects|No compatible ACPI _PSS|Your BIOS does not provide ACPI _PSS objects)", "advice": "The _PSS object (Performance Supported States) is an optional object that indicates the number of supported processor performance states. The powernow-k8 driver source states: If you see this message, complain to BIOS manufacturer. If he tells you \"we do not support Linux\" or some similar nonsense, remember that Windows 2000 uses the same legacy mechanism that the old Linux PSB driver uses. Tell them it is broken with Windows 2000. The reference to the AMD documentation is chapter 9 in the BIOS and Kernel Developer's Guide, which is available on www.amd.com.", "label": "KlogAcpiAmdK8ExpectedPssObjects" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "\\[Firmware Bug\\]: powernow-k8.*Try again with latest", "advice": "", "label": "KlogAcpiTryNewAmdFirmware" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "\\[Firmware Bug\\]: ACPI.*Invalid bit width in GAR", "advice": "ACPI Generic Address width must be 8, 16, 32 or 64", "label": "KlogAcpiGarInvalidBitWidth" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "\\[Firmware Bug\\]: ACPI.*Invalid address space type in GAR", "advice": "ACPI Generic Address space type must be system memory or system IO space.", "label": "KlogAcpiGarInvalidAddressType" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "\\[Firmware Bug\\]: ACPI.*no secondary bus range in _CRS", "advice": "_CRS Method should return a secondary bus address for the status\/command port. The kernel is having to guess this based on the _BBN or assume it's 0x00-0xff.", "label": "KlogAcpiCrsSecondaryBusRangeMissing" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "\\[Firmware Bug\\]: ACPI.*Invalid BIOS _PSS frequency", "advice": "_PSS (Performance Supported States) package has an incorrectly define core frequency (first DWORD entry in the _PSS package).", "label": "KlogAcpiInvalidPssFrequency" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_LOW", "pattern": "No _BQC method", "advice": "_BQC (Brightness Query Current level) seems to be missing. This method returns the current brightness level of a built-in display output device.", "label": "KlogAcpiMissingBqc" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "\\[Firmware Bug\\]: ACPI.*brightness control misses _BQC function", "advice": "_BQC (Brightness Query Current level) seems to be missing. This method returns the current brightness level of a built-in display output device.", "label": "KlogAcpiMissingBqc" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "BIOS needs update for CPU frequency support", "advice": "Having _PPC but missing frequencies (_PSS, _PCT) is a good hint that the BIOS is older than the CPU and does not know the CPU frequencies.", "label": "KlogAcpiMissingPssPct" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "\\[Firmware Bug\\]: ERST.*ERST table is invalid", "advice": "The Error Record Serialization Table (ERST) seems to be invalid. This normally indicates that the ERST table header size is too small, or the table size (excluding header) is not a multiple of the ERST entries.", "label": "KlogAcpiErstInvalid" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Invalid critical threshold", "advice": "ACPI _CRT (Critical Trip Point) is returning a threshold lower than zero degrees Celsius which is clearly incorrect.", "label": "KlogAcpiCrtInvalidThreshold" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "No valid trip found", "advice": "No valid ACPI _CRT (Critical Trip Point) was found.", "label": "KlogAcpiNoValidCrt" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "_BCQ is used instead of _BQC", "advice": "ACPI Method _BCQ was defined (typo) instead of _BQC - this should be fixed.however the kernel has detected this and is working around this typo.", "label": "KlogAcpiBcqInsteadOfBqc" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "MPTABLE: bad signature", "advice": "The MultiProcessor table has an incorrect signature, it should be PCMP. The kernel cannot trust the table and has disabled SMP support.", "label": "KlogBiosMptableBadSignature" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "MPTABLE: checksum error", "advice": "The MultiProcessor table has an incorrect checksum. The kernel cannot trust the table and has disabled SMP support.", "label": "KlogBiosMptableChecksumError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "MPTABLE: bad table version", "advice": "The MultiProcessor table has an incorrect version. It should be 0x01 or 0x04 (for versions 1.1 and 1.4 respectively). The kernel cannot trust the table and has disabled SMP support.", "label": "KlogBiosMptableBadVersion" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "MPTABLE: null local APIC address", "advice": "The MultiProcessor table contains a NULL Local APIC address but the Local APIC address must be defined. The kernel has disabled SMP support.", "label": "KlogBiosMptableNullLapicAddress" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "MPTABLE: no processors registered", "advice": "The MultiProcessor table contains no Processor Entry Fields, and hence there are no CPUs defined. The kernel has no option but to disable SMP support.", "label": "KlogBiosMptableNoProcessors" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "BIOS bug.*no explicit IRQ entries.*using default mptable", "advice": "The MultiProcessor table contains no IRQ Entry Fields, and hence there are no IRQs defined. The table is broken and should be fixed. The kernel will set up the low 16 IO-APIC pins to the ISA defaults in the hope the machine may work.", "label": "KlogBiosMptableNoIRQentries" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "BIOS bug.*timer not connected to IO-APIC", "advice": "The BIOS is reporting the ExtINTA I/O APIC input from the cascaded 8259A as the timer interrupt input. The kernel has detected just one pin, so it has to check the timer directly and through the 8259A because of the broken BIOS reporting.", "label": "KlogBiosTimerNotConnectedtoIoApic" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "BIOS bug,.*IO-APIC.*ID is.*in the MPC table.*", "advice": "The IO-APIC id in the MPC table is wrong and the kernel has detected this and attempted to fix it. The MPC table in the firmware needs to be fixed.", "label": "KlogBiosIoApicInMpcTable" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "BIOS bug,.*IO-APIC.*ID is already used!", "advice": "The IO-APIC id has been defined more than once in the MPC table, which is a firmware bug and should be fixed. The kernel has detected this and skopped this duplication to avoid stuck on smp_invalidate_needed IPI wait' messages.", "label": "KlogBiosIoApicIdAlreadyUsed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "WARNING.*BIOS bug.*CPU MTRRs don't cover all of memory, losing", "advice": "The Memory Type Range Registers (MTRRs) which define memory caching policy are misconfigued by the BIOS and don't appear to cover all available physical memory. The kernel has detected this and has reduced the amount of memory available to be safe. Either check that the BIOS memory caching options are set correctly or contact your BIOS vendor to get this fixed.", "label": "KlogBiosCpuMtrrMisconfigured" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "mtrr:.*no more MTRRs available", "advice": "A device driver has tried to allocate a Memory Type Range Register (MTRR) to optimially configure a caching policy on a memory region but there are no more free MTRRs available. Generally the firmware should allow for one or two free MTRRs for drivers to allocate. The system will have a sub-optimally configured memory region and this may severely impact on performance.", "label": "KlogBiosNoMoreMtrrsAvailable" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "[drm].*MTRR allocation failed.*Graphics performance may suffer", "advice": "The DRM driver has tried to allocate a Memory Type Range Register (MTRR) but there are no more free MTRRs available. The system will have a sub-optimally configured graphics memory region and this may severely impact on graphics rendering throughput and performance. The firmware should allow for one or two free MTRRs, but it hasn't, which is probably a firmware bug.", "label": "KlogBiosMtrrAllocationFailed" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "mtrr:.*your BIOS has configured an incorrect mask, fixing it", "advice": "The Memory Type Range Registers (MTRRs) which define memory caching policy are misconfigued by the BIOS. In this case, the mask is incorrectly set and the kernel has detected this and worked around the firmware bug.", "label": "KlogBiosMtrrIncorrectMask" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "mtrr:.*your CPUs had inconsistent fixed MTRR settings", "advice": "The fixed Memory Type Range Registers (MTRRs) which define memory caching policy are not consistent across all CPUs which is a firmware bug. The kernel has worked around this bug, but it may be worth getting the BIOS vendor to fix this.", "label": "KlogBiosMtrrsInconsistentAcrossCPUs" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "mtrr:.*your CPUs had inconsistent variable MTRR settings", "advice": "The variable Memory Type Range Registers (MTRRs) which define memory caching policy are not consistent across all CPUs which is a firmware bug. The kernel has worked around this bug, but it may be worth getting the BIOS vendor to fix this.", "label": "KlogBiosMtrrsInconsistentAcrossCPUs" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "mtrr:.*your CPUs had inconsistent MTRRdefType settings", "advice": "The Memory Type Range Registers (MTRRs) which define memory caching policy do not have a MTRRdefType consistently set across all CPUs which is a firmware bug. The kernel has worked around this bug, but it may be worth getting the BIOS vendor to fix this.", "label": "KlogBiosMtrrDefTypeIncosistent" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "mtrr:.*base.*is not 4 MiB aligned", "advice": "The Memory Type Range Registers (MTRRs) for Intel PPro CPUs with stepping < 8 must be 4 MiB aligned and not touch 0x70000000 -> 0x7003FFFF. This BIOS misconfiguration and should be fixed.", "label": "KlogBiosMtrrNot4MbAligned" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITIICAL", "pattern": "mtrr:.*writable mtrr between 0x70000000 and 0x7003FFFF may hang the CPU", "advice": "The Memory Type Range Registers (MTRRs) for Intel PPro CPUs with stepping < 8 must not touch region 0x70000000 -> 0x7003FFFF. This BIOS misconfiguration may hang the CPU and should be fixed.", "label": "KlogBiosMtrrMayHangCPU" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "mtrr:.*base.*is not aligned on a size.*boundary", "advice": "The Memory Type Range Registers (MTRRs) must be correctly aligned. This BIOS misconfiguration and should be fixed.", "label": "KlogBiosMtrrNotAlignedCorrectly" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_LOW", "pattern": ".*defines _DOD but not _DOS", "advice": "ACPI Method _DOD (Enumerate all devices attached to display adapter) is defined but we should also have _DOS (Enable\/Disable output switching) defined but it's been omitted.", "label": "KlogAcpiDodWithNoDos" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "WARNING:.*bogus zero IO-APIC address found in MPTABLE", "advice": "An IO-APIC address of zero has been found in the MPTABLE and is thus treated as misconfigured or bogus. I/O APIC support has been disabled. This is considered a firmware bug and the MPTABLE needs to be fixed.", "label": "KlogAcpiBogusIoApicInMptable" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "WARNING:.*Bogus.*APIC address found in table", "advice": "An IO-APIC address of zero has been found in the MPTABLE and is thus treated as misconfigured or bogus. I/O APIC support has been disabled. This is considered a firmware bug and the MPTABLE needs to be fixed.", "label": "KlogAcpiBogusIoApicInMptable" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "\\[Firmware Bug\\]:.*Duplicate ACPI video bus", "advice": "Try video module parameter video.allow_duplicates=1 if the current driver doesn't work.", "label": "KlogAcpiDuplicateAcpiVideoBus" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "\\[Firmware Bug\\]:.*PCI.*MMCONFIG.*not reserved in ACPI motherboard resources", "advice": "It appears that PCI config space has been configured for a specific device but does not appear to be reserved by the ACPI motherboard resources.", "label": "KlogAcpiMmconfigNotReserved" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "\\[Firmware Bug\\]: PCI.*not reserved in ACPI motherboard resources", "advice": "PCI firmware bug. Please see the kernel log for more details.", "label": "KlogPciNotReserved" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_INFO", "pattern": "\\[Firmware Bug\\]:.*_OSI.*Linux.*ignored", "advice": "This is not exactly a failure mode but a warning from the kernel. The _OSI() method has implemented a match to the 'Linux' query in the DSDT and this is redundant because the ACPI driver matches onto the Windows _OSI strings by default.", "label": "KlogAcpiOsiLinuxIgnored" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "\\[Firmware Bug\\]: ACPI:", "advice": "ACPI driver has detected an ACPI bug. This generally points to a bug in an ACPI table. Examine the kernel log for more details.", "label": "KlogAcpiFirmwareError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "cpu .* try to use APIC.* for vector .*, but the register is already in use for vector .* on another cpu", "advice": "The local vector table (LVT) offsets that provided by firmware have conflicts, the assignment to the same offset causes the second APIC setup failed.", "label": "KlogLVTOffsetAssignConflict" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "cpu .* try to use APIC.* for vector .*, but the register is already in use for vector .* on this cpu" , "advice": "The local vector table (LVT) offsets that provided by firmware have conflicts, the assignment to the same offset causes the second APIC setup failed.", "label": "KlogLVTOffsetAssignConflict" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "\\[Firmware Bug\\]:.*", "advice": "The kernel has detected a Firmware bug in the BIOS or ACPI which needs investigating and fixing.", "label": "KlogAcpiFirmwareError" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "PCI.*BIOS Bug:", "advice": "", "label": "KlogBiosBug" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error.*Namespace lookup failure, AE_NOT_FOUND", "advice": "The kernel has detected an error trying to execute a method and it cannot find an object. This indicates a bug in the DSDT or SSDT AML code.", "label": "KlogAcpiNamespaceLookupFailure" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Could not resolve symbol.*, AE_NOT_FOUND", "advice": "While evaluating one object, ACPI could not find another object that was being referenced. This indicates a bug in the DSDT or the SSDTs.", "label": "KlogAcpiNamespaceLookupFailure" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "ACPI Error.+psparse", "advice": "The ACPI engine has failed to execute some AML. The error message above lists the method that caused this error.", "label": "KlogAcpiParseOrExecFailure" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "ACPI Error", "advice": "The kernel has most probably detected an error while executing ACPI AML. The error lists the ACPI driver module and the line number where the bug has been caught and the method that caused the error.", "label": "KlogAcpiExecFailure" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "No object was returned from", "advice": "The ACPI interpreter was requested to evaluate an ACPI namespace object and was expecting an ACPI object to be returned, but nothing was returned. This appears to be an ACPI AML bug.", "label": "KlogAcpiEvalObjNoObjReturned" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Method execution failed", "advice": "Execution of an ACPI AML method failed. This is normally a bug in the ACPI AML code", "label": "KlogAcpiExecFailure" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "\\*\\*\\* Error.*Method execution failed.*AE_AML_METHOD_LIMIT", "advice": "ACPI method reached maximum reentrancy limit of 255 - infinite recursion in AML in DSTD or SSDT", "label": "KlogAcpiRecursionTooDeep" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "\\*\\*\\* Error.*Method reached maximum reentrancy limit", "advice": "ACPI method has reached reentrancy limit, this is a recursion bug in the AML.", "label": "KlogAcpiRecursionTooDeep" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "Return object type is incorrect", "advice": "Return object type is not the correct type, this is an AML error in the DSDT or SSDT. See also acpi_ut_evaluate_object().", "label": "KlogAcpiReturnObjectTypeIncorrect" } ], "pm_error_warning_patterns": [ { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "PM: Failed to prepare device", "advice": "dpm_prepare() failed to prepare all non-sys devices for a system PM transition. The device should be listed in the error message.", "label": "PmFailedToPrepareDevice" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "PM: Some devices failed to power down", "advice": "dpm_suspend_noirq failed because some devices did not power down ", "label": "PmDevicesFailedToPowerDown" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "PM: Some system devices failed to power down", "advice": "sysdev_suspend failed because some system devices did not power down.", "label": "PmSystemDevicesFailedToPowerDown" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "PM: Error", "advice": "", "label": "PmError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "PM: Some devices failed to power down", "advice": "", "label": "PmDevicesFailedToPowerDown" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "PM: Restore failed, recovering", "advice": "A resume from hibernate failed when calling hibernation_restore()", "label": "PmResumeFromHibernateFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "PM: Resume from disk failed", "advice": "", "label": "PmResumeFromDiskFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "PM: Not enough free memory", "advice": "There was not enough physical memory to be able to generate a hibernation image before dumping it to disc.", "label": "PmNotEnoughFreeMemory" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "PM: Memory allocation failed", "advice": "swusp_alloc() failed trying to allocate highmem and failing that non-highmem pages for the suspend image. There is probably just not enough free physical memory available.", "label": "PmMemoryAllocationFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "PM: Image mismatch", "advice": "Mismatch in kernel version, system type, kernel release version or machine id between suspended kernel and resumed kernel.", "label": "PmKernelMismatch" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "PM: Some devices failed to power down", "advice": "", "label": "PmDevicesFailedToPowerDown" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "PM: Some devices failed to suspend", "advice": "", "label": "PmDevicesFailedToSuspend" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "PM: can't read", "advice": "Testing suspend cannot read RTC", "label": "PmCannotReadRealTimeClock" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "PM: can't set", "advice": "Testing suspend cannot set RTC", "label": "PmCannotSetRealTimeClock" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "PM: suspend test failed, error", "advice": "", "label": "PmSuspendTestFailed" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "PM: can't test ", "advice": "", "label": "PmCannotTest" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "PM: no wakealarm-capable RTC driver is ready", "advice": "", "label": "PmNoWakeAlarmRealTimeClock" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "PM: Adding page to bio failed at", "advice": "An attempt to write the hibernate image to disk failed because a write BIO operation failed. This is usually a result of some physical hardware problem.", "label": "PmPhysicalDiskWriteError" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "PM: Swap header not found", "advice": "An attempt to write a hibernate image to disk failed because a valid swap device header could not be found. Make sure there is a formatted swap device on the machine and it is added using swapon -a.", "label": "PmSwapHeaderNotFound" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "PM: Cannot find swap device", "advice": "An attempt to write a hibernate image to disk failed because the swap device could not be found. Make sure there is a formatted swap device on the machine and it is added using swapon -a.", "label": "PmCannotFindSwapDevice" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "PM: Not enough free swap", "advice": "Hibernate failed because the swap partition was probably too small.", "label": "PmNotEnoughFreeSwap" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "PM: Image device not init", "advice": "", "label": "PmImageDeviceNotInitialised" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "PM: Please power down manually", "advice": "", "label": "PMPowerDownManually" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "check_for_bios_corruption", "advice": "The BIOS seems to be corrupting the first 64K of memory when doing suspend\/resume. Setting bios_corruption_check=0 will disable this check.", "label": "PmBiosCorruptFirst64K" }, { "compare_mode": "regex", "log_level": "LOG_LEVEL_HIGH", "pattern": "WARNING: at.*hpet_next_event", "advice": "Possibly an Intel I\/O controller hub HPET Write Timing issue: A read transaction that immediately follows a write transaction to the HPET TIMn_COMP Timer 0 (108h), HPET MAIN_CNT (0F0h), or TIMn_CONF.bit 6 (100h) may return an incorrect value. This is known to cause issues when coming out of S3.", "label": "PmHpetWriteTimingIssue" }, { "compare_mode": "string", "log_level": "LOG_LEVEL_HIGH", "pattern": "BUG: soft lockup.*stuck for 0s", "advice": "Softlock errors that occur when coming out of S3 may be tripped by TSC warping. It may be worth trying the notsc kernel parameter and repeating S3 tests to see if this solves the problem.", "label": "PmProcessSoftLockup" } ] } data/olog.json000066400000000000000000001122021465205512700136270ustar00rootroot00000000000000{ "olog_error_warning_patterns": [ { "advice": "Compatible secureboot driver not found. Probably, hostboot/mambo/skiboot has updated the /ibm,secureboot/compatible without adding a driver that supports it.", "compare_mode": "regex", "label": "SecureBootNotCompatible", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".* FAILED, /ibm,secureboot not compatible." }, { "advice": "Hash algorithm invalid, secureboot containers version 1 requires sha512. If you're running the latest POWER firmware, so probably there is a bug in the device tree received from hostboot.", "compare_mode": "regex", "label": "HashAlgoInvalid", "last_tag": "v6.1", "log_level": "LOG_LEVEL_LOW", "pattern": "secureboot init FAILED, hash-algo=.* not supported" }, { "advice": "Compatible CVC driver not found. Probably, hostboot/mambo/skiboot has updated the /ibm,secureboot/compatible without adding a driver that supports it.", "compare_mode": "regex", "label": "CVCNotCompatible", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".* FAILED, /ibm,secureboot not compatible." }, { "advice": "STB_DEBUG should not be enabled in production. PCR read operation failed. This TSS implementation is part of hostboot, but the source code is shared with skiboot. 1) The hostboot TSS may have been updated. 2) This may be caused by the short I2C timeout and can be fixed by increasing the timeout. Otherwise this indicates a bug in the TSS or the TPM device driver. Each one has local debug macros that can help.", "compare_mode": "regex", "label": "STBPCRReadFailed", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "tpmCmdPcrRead() failed: tpm[0-9]+, alg=[0-9a-f]+, pcr[0-9]+, rc=[0-9]+" }, { "advice": "TPM node already registered. The same node is being registered twice or there is a tpm node duplicate in the device tree", "compare_mode": "regex", "label": "TPMAlreadyRegistered", "last_tag": "v6.1", "log_level": "LOG_LEVEL_HIGH", "pattern": "tpm[0-9]+ already registered" }, { "advice": "linux,sml-base property not found. This indicates a Hostboot bug if the property really doesn't exist in the tpm node.", "compare_mode": "regex", "label": "TPMSmlBaseNotFound", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "linux,sml-base property not found tpm node (0x[0-9a-f]+|nil)" }, { "advice": "linux,sml-size property not found. This indicates a Hostboot bug if the property really doesn't exist in the tpm node.", "compare_mode": "regex", "label": "TPMSmlSizeNotFound", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "linux,sml-size property not found, tpm node (0x[0-9a-f]+|nil)" }, { "advice": "Hostboot creates and adds entries to the event log. The failed init function is part of hostboot, but the source code is shared with skiboot. If the hostboot TpmLogMgr code (or friends) has been updated, the changes need to be applied to skiboot as well.", "compare_mode": "regex", "label": "TPMInitEventLogFailed", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "eventlog init failed: tpm[0-9]+ rc=[0-9]+" }, { "advice": "TpmLogMgr failed to add a new event to the event log. TpmLogMgr is part of hostboot, but the source code is shared with skiboot. 1) The hostboot TpmLogMgr code may have been updated. 2) Check that max event log size was not reached and log marshall executed with no error. Enabling the trace routines in trustedbootUtils.H may help.", "compare_mode": "regex", "label": "STBAddEventFailed", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".* -> evLog[0-9]+ FAILED: pcr[0-9]+ evType=0x[0-9a-f]+ rc=[0-9]+" }, { "advice": "PCR extend operation failed. This TSS implementation is part of hostboot, but the source code is shared with skiboot. 1) The hostboot TSS may have been updated. 2) This may be caused by the short I2C timeout and can be fixed by increasing the timeout. Otherwise, this indicates a bug in the TSS or the TPM device driver. Each one has local debug macros that can help.", "compare_mode": "regex", "label": "STBPCRExtendFailed", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".* -> tpm[0-9]+ FAILED: pcr[0-9]+ rc=[0-9]+" }, { "advice": "Compatible trustedboot driver not found. Probably, hostboot/mambo/skiboot has updated the /ibm,secureboot/compatible without adding a driver that supports it.", "compare_mode": "regex", "label": "TrustedBootNotCompatible", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "trustedboot init FAILED, '.*' node not compatible." }, { "advice": "This is a bug in the trustedboot_measure() caller, which is passing an unknown resource_id.", "compare_mode": "regex", "label": "ResourceNotMeasuredUnknown", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "resource NOT MEASURED, resource_id=[0-9]+ unknown" }, { "advice": "This is a bug. The resource cannot be measured because it is not mapped to a PCR in the resources[] array.", "compare_mode": "regex", "label": "ResourceNotMappedToPCR", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".* NOT MEASURED, it's not mapped to a PCR" }, { "advice": "This is a bug. The trustedboot_measure() caller provided a NULL container.", "compare_mode": "regex", "label": "ResourceNotMeasuredNull", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".* NOT MEASURED, it's null" }, { "advice": "Either the tpm device or the tpm-i2c interface doesn't seem to be working properly. Check the return code (rc) for further details.", "compare_mode": "regex", "label": "TPMReadCmdReady", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: fail to read sts.commandReady, rc=[0-9]+" }, { "advice": "Either the tpm device or the tpm-i2c interface doesn't seem to be working properly. Check the return code (rc) for further details.", "compare_mode": "regex", "label": "TPMWriteCmdReady", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: fail to write sts.commandReady, rc=[0-9]+" }, { "advice": "The command ready bit of the tpm status register is taking longer to be settled. Either the wait time need to be increased or the TPM device is not functional.", "compare_mode": "regex", "label": "TPMCmdReadyTimeout", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: timeout on sts.commandReady, delay > [0-9]+" }, { "advice": "Either the tpm device or the tpm-i2c interface doesn't seem to be working properly. Check the return code (rc) for further details.", "compare_mode": "regex", "label": "TPMReadFifoStatus", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: fail to read fifo status: mask [0-9a-f]+, expected [0-9a-f]+, rc=[0-9]+" }, { "advice": "Either the tpm device or the tpm-i2c interface doesn't seem to be working properly. Check the return code (rc) for further details.", "compare_mode": "regex", "label": "TPMReadDataAvail", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: fail to read sts.dataAvail, rc=[0-9]+" }, { "advice": "The data avail bit of the tpm status register is taking longer to be settled. Either the wait time need to be increased or the TPM device is not functional.", "compare_mode": "regex", "label": "TPMDataAvailBitTimeout", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: timeout on sts.dataAvail, delay=[0-9]+/[0-9]+" }, { "advice": "Either the tpm device or the tpm-i2c interface doesn't seem to be working properly. Check the return code (rc) for further details.", "compare_mode": "regex", "label": "TPMReadBurstCount", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: fail to read sts.burstCount, rc=[0-9]+" }, { "advice": "The burstcount bit of the tpm status register is taking longer to be settled. Either the wait time need to be increased or the TPM device is not functional.", "compare_mode": "regex", "label": "TPMBurstCountTimeout", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: timeout on sts.burstCount, delay=[0-9]+/[0-9]+" }, { "advice": "Either the tpm device or the tpm-i2c interface doesn't seem to be working properly. Check the return code (rc) for further details.", "compare_mode": "regex", "label": "TPMWriteFifo", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: fail to write fifo, count=[0-9]+, rc=[0-9]+" }, { "advice": "The write to the TPM FIFO overflowed, the TPM is not expecting more data. This indicates a bug in the TPM device driver.", "compare_mode": "string", "label": "TPMWriteFifoNotExpecting", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: write FIFO overflow, not expecting more data" }, { "advice": "Either the tpm device or the tpm-i2c interface doesn't seem to be working properly. Check the return code (rc) for further details.", "compare_mode": "regex", "label": "TPMWriteFifoLastByte", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: fail to write fifo (last byte), count=[0-9]+, rc=[0-9]+" }, { "advice": "The write to the TPM FIFO overflowed. It is expecting more data even though we think we are done. This indicates a bug in the TPM device driver.", "compare_mode": "string", "label": "TPMWriteFifoExpecting", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "TPM: write FIFO overflow, expecting more data" }, { "advice": "The read from TPM FIFO overflowed. It is expecting more data even though we think we are done. This indicates a bug in the TPM device driver.", "compare_mode": "regex", "label": "TPMReadFifoOverflow", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: overflow on fifo read, c=[0-9]+, bc=[0-9]+, bl=[0-9]+" }, { "advice": "Either the tpm device or the tpm-i2c interface doesn't seem to be working properly. Check the return code (rc) for further details.", "compare_mode": "regex", "label": "TPMReadFifo", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: fail to read fifo, count=[0-9]+, rc=[0-9]+" }, { "advice": "TPM device is not initialized. This indicates a bug in the tpm_transmit() caller", "compare_mode": "string", "label": "TPMDeviceNotInitialized", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "TPM: tpm device not initialized" }, { "advice": "Either the tpm device or the tpm-i2c interface doesn't seem to be working properly. Check the return code (rc) for further details.", "compare_mode": "regex", "label": "TPMWriteGo", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: fail to write sts.go, rc=[0-9]+" }, { "advice": "Either the tpm device or the tpm-i2c interface doesn't seem to be working properly. Check the return code (rc) for further details.", "compare_mode": "regex", "label": "TPMReleaseTpm", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NUVOTON: fail to release tpm, rc=[0-9]+" }, { "advice": "OPAL could not find an NVRAM partition on the system flash. Check that the system flash has a valid partition table, and that the firmware build process has added a NVRAM partition.", "compare_mode": "string", "label": "NVRAMNoPartition", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "FLASH: Can't parse ffs info for NVRAM" }, { "advice": "OPAL Found multiple system flash. Since we've already found a system flash we are going to use that one but this ordering is not guaranteed so may change in future.", "compare_mode": "regex", "label": "SystemFlashMultiple", "last_tag": "v6.1", "log_level": "LOG_LEVEL_HIGH", "pattern": "FLASH: Attempted to register multiple system flash: .*" }, { "advice": "System flash isn't formatted as expected. This could mean several OPAL utilities do not function as expected. e.g. gard, pflash.", "compare_mode": "string", "label": "NoFFS", "last_tag": "v6.1", "log_level": "LOG_LEVEL_HIGH", "pattern": "FLASH: No ffs info; using raw device only" }, { "advice": "No system flash was found. Check for missing calls flash_register(...).", "compare_mode": "regex", "label": "SystemFlashNotFound", "last_tag": "v6.1", "log_level": "LOG_LEVEL_HIGH", "pattern": "FLASH: Can't load resource id:[0-9]+. No system flash found" }, { "advice": "OPAL hit an assert(). During normal usage (even testing) we should never hit an assert. There are other code paths for controlled shutdown/panic in the event of catastrophic errors.", "compare_mode": "regex", "label": "FailedAssert", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Assert fail: .*" }, { "advice": "opal_i2c_request was passed an invalid bus ID. This has likely come from the OS rather than OPAL and thus could indicate an OS bug rather than an OPAL bug.", "compare_mode": "string", "label": "I2CInvalidBusID", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "I2C: Invalid 'bus_id' passed to the OPAL" }, { "advice": "OPAL failed to allocate memory for an i2c_request. This points to an OPAL bug as OPAL ran out of memory and this should never happen.", "compare_mode": "string", "label": "I2CFailedAllocation", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "I2C: Failed to allocate 'i2c_request'" }, { "advice": "i2c_request_send was passed an invalid bus ID. This indicates a bug.", "compare_mode": "regex", "label": "I2CInvalidBusID", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "I2C: Invalid bus_id=[0-9a-f]+" }, { "advice": "OPAL failed to allocate memory for an i2c_request. This points to an OPAL bug as OPAL run out of memory and this should never happen.", "compare_mode": "string", "label": "I2CAllocationFailed", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "I2C: allocating i2c_request failed" }, { "advice": "OPAL will parse the Flattened Device Tree(FDT), which can be generated from different firmware sources. During expansion of FDT, OPAL observed a node assigned multiple times (a duplicate). This indicates either a Hostboot bug *OR*, more likely, a bug in the platform XML. Check the platform XML for duplicate IDs for this type of device. Because of this duplicate node, OPAL won't add the hardware device found with a duplicate node ID into DT, rendering the corresponding device not functional.", "compare_mode": "regex", "label": "DTHasDuplicateNodeID", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "DT: Found duplicate node: .*" }, { "advice": "HBRT triggered assert: you need to debug HBRT", "compare_mode": "string", "label": "HBRTassert", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "HBRT: Assertion from hostservices" }, { "advice": "Firmware should have aborted boot", "compare_mode": "string", "label": "HBRTlidLoadFail", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "HBRT: LID Load failed" }, { "advice": "OPAL was called with a bad token. On POWER8 and earlier, Linux kernels had a bug where they wouldn't check if firmware supported particular OPAL calls before making them. It is, in fact, harmless for these cases. On systems newer than POWER8, this should never happen and indicates a kernel bug where OPAL_CHECK_TOKEN isn't being called where it should be.", "compare_mode": "regex", "label": "OPALBadToken", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OPAL: Called with bad token [0-9]+ !" }, { "advice": "Currently removing a poller is DANGEROUS and MUST NOT be done in production firmware.", "compare_mode": "string", "label": "UnsupportedOPALdelpoller", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "WARNING: Unsupported opal_del_poller. Interesting locking issues, don't call this." }, { "advice": "opal_run_pollers() was called with a lock held, which could lead to deadlock if not excessively lucky/careful.", "compare_mode": "string", "label": "OPALPollerWithLock", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Running pollers with lock held !" }, { "advice": "Your firmware is buggy, see the 64 messages complaining about opal_run_pollers with lock held.", "compare_mode": "string", "label": "OPALPollerWithLock64", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "opal_run_pollers with lock run 64 times, disabling warning." }, { "advice": "You are running in manufacturing mode. This mode should only be enabled in a factory during manufacturing.", "compare_mode": "string", "label": "ManufacturingMode", "last_tag": "v6.1", "log_level": "LOG_LEVEL_MEDIUM", "pattern": "PLAT: Manufacturing mode ON" }, { "advice": "HDAT secureboot_tpm_info structure described a chip id, but no tpm node was found under that xscom chip id. This is most certainly a hostboot bug.", "compare_mode": "regex", "label": "HDATNoTpmForChipId", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "TPM node not found for chip_id=[0-9]+ (HB bug)" }, { "advice": "HDAT secureboot_tpm_info structure described a chip id, but the xscom node for the chip_id was not found. This is most certainly a firmware bug.", "compare_mode": "regex", "label": "HDATBadChipIdForTPM", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "xscom node not found for chip_id=[0-9]+" }, { "advice": "HDAT described an invalid size for timebase, which means there's a disagreement between HDAT and OPAL. This is most certainly a firmware bug.", "compare_mode": "regex", "label": "HDATBadTimebaseSize", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "HDAT: Bad timebase size [0-9]+ @ (0x[0-9a-f]+|nil)" }, { "advice": "The HOMER base address for a chip was not valid. This means that OCC (On Chip Controller) will be non-functional and CPU frequency scaling will not be functional. CPU may be set to a safe, low frequency. Power savings in CPU idle or CPU hotplug may be impacted.", "compare_mode": "regex", "label": "OCCInvalidHomerBase", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCC: Chip: [0-9a-f]+ homer_base is not valid" }, { "advice": "The pstate table for a chip was not valid. This means that OCC (On Chip Controller) will be non-functional and CPU frequency scaling will not be functional. CPU may be set to a low, safe frequency. This means that CPU idle states and CPU frequency scaling may not be functional.", "compare_mode": "regex", "label": "OCCInvalidPStateTable", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCC: Chip: [0-9a-f]+ PState table is not valid" }, { "advice": "The pstate table for the first chip was not valid. This means that OCC (On Chip Controller) will be non-functional. This means that CPU idle states and CPU frequency scaling will not be functional as OPAL doesn't populate the device tree with pstates in this case.", "compare_mode": "string", "label": "OCCInvalidPStateTableDT", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCC: PState table is not valid" }, { "advice": "The PState table layout version is not supported in P9. So OPAL will not parse the PState table. CPU frequency scaling will not be functional as frequency and pstate-ids are not added to DT.", "compare_mode": "regex", "label": "OCCInvalidVersion02", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCC: Version [0-9a-f]+ is not supported in P9" }, { "advice": "The PState table layout version is not supported in P8. So OPAL will not parse the PState table. CPU frequency scaling will not be functional as frequency and pstate-ids are not added to DT.", "compare_mode": "regex", "label": "OCCInvalidVersion90", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCC: Version [0-9a-f]+ is not supported in P8" }, { "advice": "The PState table layout version is not supported. So OPAL will not parse the PState table. CPU frequency scaling will not be functional as OPAL doesn't populate the device tree with pstates.", "compare_mode": "regex", "label": "OCCUnsupportedVersion", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCC: Unsupported pstate table layout version [0-9]+" }, { "advice": "The min pstate is greater than the max pstate, this could be due to corrupted/invalid data in OCC-OPAL shared memory region. So OPAL has not added pstates to device tree. This means that CPU Frequency management will not be functional in the host.", "compare_mode": "regex", "label": "OCCInvalidPStateLimits", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCC: Invalid pstate limits. Pmin([0-9]+) > Pmax ([0-9]+)" }, { "advice": "The nominal pstate is greater than the max pstate, this could be due to corrupted/invalid data in OCC-OPAL shared memory region. So OPAL has limited the nominal pstate to max pstate.", "compare_mode": "regex", "label": "OCCInvalidNominalPState", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCC: Clipping nominal pstate([0-9]+) to Pmax([0-9]+)" }, { "advice": "The number of pstates is outside the valid range (currently <=1 or > 128 on p8, >255 on P9), so OPAL has not added pstates to the device tree. This means that OCC (On Chip Controller) will be non-functional. This means that CPU idle states and CPU frequency scaling will not be functional.", "compare_mode": "regex", "label": "OCCInvalidPStateRange", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCC: OCC range is not valid; No of pstates = [0-9]+" }, { "advice": "Device tree node /ibm,opal/power-mgt not found. OPAL didn't add pstate information to device tree. Probably a firmware bug.", "compare_mode": "string", "label": "OCCDTNodeNotFound", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCC: dt node /ibm,opal/power-mgt not found" }, { "advice": "Failed to create /ibm,opal/power-mgt/occ. Per-chip pstate properties are not added to Device Tree.", "compare_mode": "regex", "label": "OCCDTFailedNodeCreation", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCC: Failed to create /ibm,opal/power-mgt/occ@[0-9a-f]+" }, { "advice": "ENOMEM while allocating OCC load message. OCCs not started, consequently no power/frequency scaling will be functional.", "compare_mode": "string", "label": "OCCload_reqENOMEM", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCC: Could not allocate occ_load_req" }, { "advice": "Invalid request for loading OCCs. Power and frequency management not functional", "compare_mode": "regex", "label": "OCCLoadInvalidScope", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCC: Load message with invalid scope 0x[0-9a-f]+" }, { "advice": "Invalid request for resetting OCCs. Power and frequency management not functional", "compare_mode": "regex", "label": "OCCResetInvalidScope", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCC: Reset message with invalid scope 0x[0-9a-f]+" }, { "advice": "The NPU fence status did not update as expected. This could be the result of a firmware or hardware bug. OpenCAPI functionality could be broken.", "compare_mode": "regex", "label": "OCAPIFenceStatusTimeout", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCAPI: Fence status for brick [0-9]+ stuck: expected 0x[0-9a-f]+, got 0x[0-9a-f]+" }, { "advice": "OpenCAPI IRQ setup failed. This is probably a firmware bug. OpenCAPI functionality will be broken.", "compare_mode": "string", "label": "OCAPIIRQAllocationFailed", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCAPI: Couldn't allocate interrupts for NPU" }, { "advice": "Firmware probably ran out of memory creating NPU slot. OpenCAPI functionality could be broken.", "compare_mode": "string", "label": "OCAPICannotCreatePHBSlot", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OCAPI: Cannot create PHB slot" }, { "advice": "OPAL failed to add the power-mgt device tree node. This could mean that firmware ran out of memory, or there's a bug somewhere.", "compare_mode": "string", "label": "CreateDTPowerMgtNodeFail", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "creating dt node /ibm,opal/power-mgt failed" }, { "advice": "An error condition occurred in sleep/winkle engines timer state machine. Dumping debug information to root-cause. OPAL/skiboot may be stuck on some operation that requires SLW timer state machine (e.g. core powersaving)", "compare_mode": "string", "label": "SLWRegisterDump", "last_tag": "v6.1", "log_level": "LOG_LEVEL_LOW", "pattern": "SLW: Register state:" }, { "advice": "The SLeep/Winkle Engine (SLW) failed to increment the generation number within our timeout period (it *should* have done so within ~10us, not >1ms. OPAL uses the SLW timer to schedule some operations, but can fall back to the (much less frequent OPAL poller, which although does not affect functionality, runs *much* less frequently. This could have the effect of slow I2C operations (for example). It may also mean that you *had* an increase in jitter, due to slow interactions with SLW. This error may also occur if the machine is connected to via soft FSI.", "compare_mode": "string", "label": "SLWTimerStuck", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "SLW: timer stuck, falling back to OPAL pollers. You will likely have slower I2C and may have experienced increased jitter." }, { "advice": "xscom_read was called with an invalid partid. There's likely a bug somewhere in the stack that's causing someone to try an xscom_read on something that isn't a processor, Centaur or EX chiplet.", "compare_mode": "regex", "label": "XSCOMReadInvalidPartID", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".*: invalid XSCOM partid 0x[0-9a-f]+" }, { "advice": "xscom_write was called with an invalid partid. There's likely a bug somewhere in the stack that's causing someone to try an xscom_write on something that isn't a processor, Centaur or EX chiplet.", "compare_mode": "regex", "label": "XSCOMWriteInvalidPartID", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".*: invalid XSCOM partid 0x[0-9a-f]+" }, { "advice": "No GPU/NPU2 slot information was found. NVLink2 functionality will not work.", "compare_mode": "string", "label": "NPUNoPHBSlotLabel", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NPU: Cannot find GPU slot information" }, { "advice": "Firmware probably ran out of memory creating NPU2 slot. NVLink functionality could be broken.", "compare_mode": "string", "label": "NPUCannotCreatePHBSlot", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NPU: Cannot create PHB slot" }, { "advice": "NVLink not functional", "compare_mode": "regex", "label": "NPUisnInvalid", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NPU[0-9]+: isn 0x[0-9a-f]+ not valid for this NPU" }, { "advice": "Firmware probably ran out of memory creating NPU slot. NVLink functionality could be broken.", "compare_mode": "string", "label": "NPUCannotCreatePHBSlot", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "NPU: Cannot create PHB slot" }, { "advice": "OPAL marked a Centaur (memory buffer) as offline due to CENTAUR_ERR_OFFLINE_THRESHOLD (10) consecutive errors on XSCOMs to this centaur. OPAL will now return OPAL_XSCOM_CTR_OFFLINED and not try any further XSCOMs. This is likely caused by some hardware issue or PRD recovery issue.", "compare_mode": "regex", "label": "CentaurOfflinedTooManyErrors", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "CENTAUR: Offlined [0-9a-f]+ due to > [0-9]+ consecutive XSCOM errors. No more XSCOMs to this centaur." }, { "advice": "OPAL doesn't know that the BMC supports PNOR access commands. This will be a bug in the OPAL support for this BMC.", "compare_mode": "string", "label": "PNORAccessYeahButNoBut", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "PNOR BUG: access requested but BMC doesn't support request" }, { "advice": "In negotiating PNOR access with BMC, we got an odd/invalid request from the BMC. Likely a bug in OPAL/BMC interaction.", "compare_mode": "regex", "label": "InvalidPNORAccessRequest", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "invalid PNOR access requested: [0-9a-f]+" }, { "advice": "Likely bug in what sent us the OCC reset.", "compare_mode": "regex", "label": "SELUnknownOCCReset", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "SEL message to reset an unknown OCC (sensor ID 0x[0-9a-f]+)" }, { "advice": "Failed to update System Attention Indicator. Likely means some bug with OPAL interacting with FSP.", "compare_mode": "regex", "label": "FSPSAIFailed", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Update SAI cmd failed [rc=[0-9]+]." }, { "advice": "OPAL ran out of memory while trying to allocate an FSP message in SAI code path. This indicates an OPAL bug that caused OPAL to run out of memory.", "compare_mode": "regex", "label": "SAIMallocFail", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".*: Memory allocation failed." }, { "advice": "Error in queueing message to FSP in SAI code path. Likely an OPAL bug.", "compare_mode": "regex", "label": "SAIQueueFail", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".*: Failed to queue the message" }, { "advice": "Possibly an error on FSP side, OPAL failed to read state from FSP.", "compare_mode": "regex", "label": "FSPSAIGetFailed", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Read real SAI cmd failed [rc = 0x[0-9a-f]+]." }, { "advice": "OPAL ran out of memory: OPAL bug.", "compare_mode": "regex", "label": "FSPGetSAIMallocFail", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".*: Memory allocation failed." }, { "advice": "Failed to queue message to FSP: OPAL bug", "compare_mode": "regex", "label": "FSPGetSAIQueueFail", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".*: Failed to queue the message" }, { "advice": "OPAL failed to allocate memory for FSP LED command. Likely an OPAL bug led to out of memory.", "compare_mode": "string", "label": "FSPLEDRequestMallocFail", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "SPCN set command node allocation failed" }, { "advice": "OPAL had trouble creating the sensor nodes in the device tree as there was already one there. This indicates either the device tree from Hostboot already filled in sensors or an OPAL bug.", "compare_mode": "regex", "label": "OPALSensorNodeExists", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "SENSOR: node .* exists" }, { "advice": "Bug in interaction between FSP and OPAL. The state maintained by OPAL didn't match what the FSP sent.", "compare_mode": "regex", "label": "ElogListInconsistent", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".*: Inconsistent internal list state !" }, { "advice": "Bug in skiboot/FSP code for EPOW event handling", "compare_mode": "string", "label": "EPOWSignatureMismatch", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Signature mismatch" }, { "advice": "Queueing a message from OPAL to FSP failed. This is likely due to either an OPAL bug or the FSP going away.", "compare_mode": "string", "label": "EPOWMessageQueueFailed", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "OPAL EPOW message queuing failed" }, { "advice": "Inconsistent state between OPAL and FSP in code path for handling failure of fetching error log from FSP. Likely a bug in interaction between FSP and OPAL.", "compare_mode": "regex", "label": "ElogFetchFailureInconsistent", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".*: Inconsistent internal list state !" }, { "advice": "Bug in interaction between FSP and OPAL. We expected there to be a pending read from FSP but the list was empty.", "compare_mode": "regex", "label": "ElogQueueInconsistent", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".*: Inconsistent internal list state !" }, { "advice": "We expected there to be an entry in the list of error logs for the error log we're fetching information for. There wasn't. This means there's a bug.", "compare_mode": "regex", "label": "ElogInfoInconsistentState", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".*: Inconsistent internal list state !" }, { "advice": "Inconsistent state while reading error log from FSP. Bug in OPAL and FSP interaction.", "compare_mode": "regex", "label": "ElogReadInconsistentState", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": ".*: Inconsistent internal list state !" }, { "advice": "Error in acknowledging heartbeat to FSP. This could mean the FSP has gone away or it may mean the FSP may kill us for missing too many heartbeats.", "compare_mode": "string", "label": "FSPHeartbeatAckError", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "SURV: Heartbeat Acknowledgment error from FSP" }, { "advice": "AST BMC is likely to be non-functional when accessed from host.", "compare_mode": "string", "label": "ASTBMCFailedSetEnables", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "ASTBMC: failed to set enables" }, { "advice": "Device tree didn't contain enough information to correctly report back PCI inventory. Service processor is likely to be missing information about what hardware is physically present in the machine.", "compare_mode": "regex", "label": "FirenzePCIInventory", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "No chip device node for PHB[0-9a-f]+" }, { "advice": "More PCI inventory than we can send to service processor. The service processor will have an incomplete view of the world.", "compare_mode": "regex", "label": "FirenzePCIInventoryTooLarge", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Inventory ([0-9]+ bytes) too large" }, { "advice": "Error communicating with service processor when sending PCI Inventory.", "compare_mode": "regex", "label": "FirenzePCIInventoryError", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Error [0-9]+ sending inventory" }, { "advice": "On Firenze platforms, I2C is used to control power to PCI slots. Errors here mean we may be in trouble in regards to PCI slot power on/off.", "compare_mode": "regex", "label": "FirenzePCII2CError", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Error [0-9]+ from I2C request on slot [0-9a-f]+" }, { "advice": "Likely a coding error: invalid I2C request.", "compare_mode": "regex", "label": "FirenzePCII2CInvalid", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Invalid I2C request [0-9]+ on slot [0-9a-f]+" }, { "advice": "The Firenze platform uses I2C to control power to PCI slots. Something went wrong in the state machine controlling that. Slots may/may not have power.", "compare_mode": "regex", "label": "FirenzePCISlotI2CStateError", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "Wrong state [0-9a-f]+ on slot [0-9a-f]+" }, { "advice": "Unexpected state in the FIRENZE PCI Slot state machine. This could mean PCI is not functioning correctly.", "compare_mode": "regex", "label": "FirenzePCISlotGPowerState", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "[0-9a-f]+ GPOWER: Unexpected state [0-9a-f]+" }, { "advice": "Unexpected state in the FIRENZE PCI Slot state machine. This could mean PCI is not functioning correctly.", "compare_mode": "regex", "label": "FirenzePCISlotSPowerState", "last_tag": "v6.1", "log_level": "LOG_LEVEL_CRITICAL", "pattern": "[0-9a-f]+ SPOWER: Unexpected state [0-9a-f]+" } ] } data/syntaxcheck.json000066400000000000000000000355041465205512700152240ustar00rootroot00000000000000{ "erroradvice": [ { "id": "ASL_MSG_FIELD_ACCESS_WIDTH", "advice": "The region needs to be at least as big as the access width." }, { "id": "ASL_MSG_FIELD_UNIT_ACCESS_WIDTH", "advice": "The field plus the access width must not go beyond the end of the region." }, { "id": "ASL_MSG_HID_SUFFIX", "advice": "The remaining characters (suffix) of the _HID string must be hexadecimal digits." }, { "id": "ASL_MSG_ISA_ADDRESS", "advice": "The fixed I/O ISA address is illegal, it is greater than 0x03ff." }, { "id": "ASL_MSG_LEADING_ASTERISK", "advice": "The leading character of the string is an asterisk '*'. This is used by some platform manufacturers. While this is allowed for a _CID, the compiler complains about this since a valid use of this has never been seen." }, { "id": "ASL_MSG_LIST_LENGTH_LONG", "advice": "The package length is smaller than the length of the initializer list." }, { "id": "ASL_MSG_LOCAL_INIT", "advice": "A local variable to a method has not been initialized. This is a bug and can lead to undefined execution behaviour." }, { "id": "ASL_MSG_NAME_EXISTS", "advice": "The name already exists in this scope. The compiler will continue to process it." }, { "id": "ASL_MSG_NO_REGION", "advice": "_REG requires a corresponding Operation Region, however one was not found." }, { "id": "ASL_MSG_NOT_FOUND", "advice": "The name referenced by Scope() should exist, but does not; forward references for Scope() are not supported by the Microsoft Windows ACPI interpreter." }, { "id": "ASL_MSG_NOT_METHOD", "advice": "The node type is not a method, so it cannot be invoked." }, { "id": "ASL_MSG_NOT_REACHABLE", "advice": "The name exists in the name space, but not it could not be accessed from the scope." }, { "id": "ASL_MSG_RESERVED_METHOD", "advice": "The reserved method must be a control method, this occurs for example for the _Lxx, _Exx, _Wxx or _Qxx methods, or for a predefined name that requires input arguments, or no return value from prefefined names such as _DIS, _INI, _IRC, _OFF, _ON, _PSx." }, { "id": "ASL_MSG_RESERVED_OPERAND_TYPE", "advice": "The object type for the reserved name does not match the expected type." }, { "id": "ASL_MSG_SCOPE_FWD_REF", "advice": "The Microsoft ACPI interpreter cannot handle a forward reference from the Scope() operator, so the compiler flags this up as an error." }, { "id": "ASL_MSG_TAG_LARGER", "advice": "The resource tag length is larger than the field length." }, { "id": "ASL_MSG_TAG_SMALLER", "advice": "The resource tag length is smaller than the field length." }, { "id": "ASL_MSG_UNKNOWN_RESERVED_NAME", "advice": "The name does not match any of the known predefined names. Names that start with an underscore '_' are reserved by the ACPI specification and so this name should be one of these known names." }, { "id": "ASL_MSG_UNREACHABLE_CODE", "advice": "This occurs when there is some code following a Return() - this code is unreachable code, it cannot be executed, so it is most probably a bug." }, { "id": "ASL_MSG_NOT_EXIST", "advice": "The referenced object could not be found during a name space lookup, it does not seem to exist." }, { "id": "ASL_MSG_CORE_EXCEPTION", "advice": "An internal compiler core exception error has occurred performing a name space lookuop." }, { "id": "ASL_MSG_DEBUG_FILE_OPEN", "advice": "The compiler could not open a debug file for output." }, { "id": "ASL_MSG_DEBUG_FILENAME", "advice": "A debug filename could not be generated by the compiler." }, { "id": "ASL_MSG_DEPENDENT_NESTING", "advice": "A resource descriptor nesting error has occurred." }, { "id": "ASL_MSG_DUPLICATE_CASE", "advice": "A case value has already been specified." }, { "id": "ASL_MSG_EARLY_EOF", "advice": "The End-Of-File was reached prematurely." }, { "id": "ASL_MSG_CONSTANT_FOLDED", "advice": "The compiler has performed a constant folding optimization." }, { "id": "ASL_MSG_CONSTANT_EVALUATION", "advice": "Failed to evaluate a constant expression, the compiler could not resolve a subtree for some unknown reason." }, { "id": "ASL_MSG_CONNECTION_MISSING", "advice": "The compiler was parsing a FieldUnitList and was expecting a Connection() operator but instead found a NameSeg() opcode." }, { "id": "ASL_MSG_CONNECTION_INVALID", "advice": "A Connection() operator is only valid for the GeneralPurposeIo and GenericSerialBus operation region SpaceIds." }, { "id": "ASL_MSG_CLOSE", "advice": "An error occurred closing a file in the ASL compiler, this is a system error and should not normally occur." }, { "id": "ASL_MSG_COMPILER_INTERNAL", "advice": "An error occurred inside the compiler." }, { "id": "ASL_MSG_COMPILER_RESERVED", "advice": "This normally occurs when disassembled code is being compiled and it contains compiler-emitted names of the form '_T_x'. This is just a remark generated by the compiler and can normally be ignored." }, { "id": "ASL_MSG_RETURN_TYPES", "advice": "Some of the execution paths do not return a value. All control paths that return must return a value otherwise unexpected behaviour may occur. This error occurs because a branch on an conditional op-code returns a value and another does not, which is inconsistent behaviour." }, { "id": "ASL_MSG_RESERVED_RETURN_VALUE", "advice": "A reserved method was expected to return a value, however, it does not. This is unexpected behaviour that does not conform the the ACPI specification." }, { "id": "ASL_MSG_INVALID_TYPE", "advice": "An invalid type was used. A different type was expected to be used.", }, { "id": "ASL_MSG_RESERVED_NO_RETURN_VAL", "advice": "A reserved method returned a value however it is not expected to return anything, so this does not conform to the expected behaviour. The kernel will most probably ignore the return value, so this is not going to produce any run time errors." }, { "id": "ASL_MSG_ALIGNMENT", "advice": "Addresses must be an exact multiple of the alignment value." }, { "id": "ASL_MSG_ALPHANUMERIC_STRING", "advice": "For _HID (Hardware object IDs), the ACPI specification requires all characters must be alphanumeric. Section 6.1.4 of the specification states that a valid PNP ID must be of the form AAA#### (where A is an uppercase letter and # is a hex digit) and a valid ACPI ID must be of the form ACPI#### where # is a hex digit." }, { "id": "ASL_MSG_AML_NOT_IMPLEMENTED", "advice": "This error message should not occur." }, { "id": "ASL_MSG_ARG_COUNT_HI", "advice": "Method is called with too many arguments. This is a bug and can lead to unexpected and undefined behaviour." }, { "id": "ASL_MSG_ARG_COUNT_LO", "advice": "Method is called with too few arguments. This is a bug and can lead to unexpected and undefined behaviour." }, { "id": "ASL_MSG_ARG_INIT", "advice": "A reference argument has not been initialized." }, { "id": "ASL_MSG_BACKWARDS_OFFSET", "advice": "Backwards offsets in fields are illegal and this is a bug in the AML. The iasl compiler will ignore this node completely." }, { "id": "ASL_MSG_BUFFER_LENGTH", "advice": "The AML buffer length was zero and contained no items. This is most probably a mistake - but the compiler has gone ahead and compiled this in as a zero sized buffer anyway." }, { "id": "ASL_MSG_DMA_CHANNEL", "advice": "DMA channels are described by an 8 bit mask, hence there can only be 8 channels 0..7. See the ACPI specification, section 6.4.2.2, DMA Descriptor for more details." }, { "id": "ASL_MSG_DMA_LIST", "advice": "Only a maximum of 8 DMA channels can be specified in a list." }, { "id": "ASL_MSG_DUPLICATE_ITEM", "advice": "An initializer list has duplicate items, which is illegal." }, { "id": "ASL_MSG_HID_LENGTH", "advice": " _HID String must be of the form XXX#### or ACPI####." }, { "id": "ASL_MSG_INTEGER_LENGTH", "advice": "A 64 bit integer has been truncated down to a 32 bit value. This could lead to unexpected behaviour due to loss of data through truncation." }, { "id": "ASL_MSG_INTERRUPT_NUMBER", "advice": "Only interrupts 0..15 are allowed as the IRQ mask is just 16 bits wide." }, { "id": "ASL_MSG_INVALID_ADDR_FLAGS", "advice": "This occurs if the length is zero and just one of the resource MIF/MAF flags are set, or the length is non-zero and resource MIF/MAF flags are both set. These are illegal combinations and need to be fixed. See section 6.4.3.5 Address Space Resource Descriptors of the ACPI specification for more details." }, { "id": "ASL_MSG_INVALID_EISAID", "advice": "The EISAID string must be exactly 7 characters and of the form UUUXXXX, 3 uppercase letters and 4 hex digits (e.g., 'PNP0001'). See section 18.5.35 'EISAID (EISA ID String To Integer Conversion Macro)' of the ACPI specification for more details." }, { "id": "ASL_MSG_INVALID_GRANULARITY", "advice": "This occurs if the specified granularity is non-zero and not a power-of-two minus one in value." }, { "id": "ASL_MSG_INVALID_LENGTH", "advice": "This needs to be fixed as the length specified is greater than the window size specified by the Min/Max fields - this is clealy ambiguous." }, { "id": "ASL_MSG_INVALID_LENGTH_FIXED", "advice": "The minimum address is greater than the maximum address. This is illegal." }, { "id": "ASL_MSG_INVALID_MIN_MAX", "advice": "The minimum, maximum addresses and length must be a multiple of the alignment, which must be a power of 2." }, { "id": "ASL_MSG_INVALID_PERFORMANCE", "advice": "Performance/Robustness value in StartDependentFn declaration was > 2. It must be one of: 0 = Good, 1 = Acceptable, 2 = Sub-optimal. See section 18.5.111 of the ACPI specification for more information." }, { "id": "ASL_MSG_INVALID_PRIORITY", "advice": "Priority in StartDependentFn declaration was > 2. It must be one of: 0 = Good, 1 = Acceptable, 2 = Sub-optimal. See section 18.5.111 of the ACPI specification for more information." }, { "id": "ASL_MSG_INVALID_TIME", "advice": "Illegal stall time (>255). Generally, stall times > 100 microseconds must use sleep() instead. See section 18.5.110 Stall (Stall for a Short Time) of the ACPI specification." }, { "id": "ASL_MSG_NAMED_OBJECT_IN_WHILE", "advice": "A named object cannot be created inside a while loop. This needs to be fixed." }, { "id": "ASL_MSG_NO_RETVAL", "advice": "The called method did not return a value, which was unexpected. This is a bug and will lead to undefined behaviour during execution." }, { "id": "ASL_MSG_NULL_DESCRIPTOR", "advice": "A 'null descriptor' (where most fields are set to zero) has been found. Usually, these are updated or completed at run time using BufferFields, but to do so one requires a resource tag and this descriptor does not have one, hence it cannot be referenced to allow it to be updated. This is most probably a bug and needs to be fixed." }, { "id": "ASL_MSG_REGION_BUFFER_ACCESS", "advice": "SMBUS and IPMI regions require BufferAcc access. This error occurs when the incorrect access type is used on a region." }, { "id": "ASL_MSG_REGION_BYTE_ACCESS", "advice": "Embedded Controller (EC) and CMOS regions can only be accessed using ByteAcc access." }, { "id": "ASL_MSG_RESERVED_ARG_COUNT_HI", "advice": "Reserved method is called with too many arguments. This is a bug and can lead to unexpected and undefined behaviour." }, { "id": "ASL_MSG_RESERVED_ARG_COUNT_LO", "advice": "Method is called with too few arguments. This is a bug and can lead to unexpected and undefined behaviour." }, { "id": "ASL_MSG_RESULT_NOT_USED", "advice": "The result from an operation is not used. This is probably not intended and could be a bug and should be checked." }, { "id": "ASL_MSG_SERIALIZED", "advice": "A method needs to be marked Serialized because of the wat Switch() has been implemented (multiple threads cannot execute the method concurrently since local temporary names need to be created which could lead to race conditions). This should be explicitly specified in the original code to avoid potential run time race conditions." }, { "id": "ASL_MSG_SOME_NO_RETVAL", "advice": "Method sometimes return a value, sometimes it does not. This is inconsistent behaviour and a bug in the AML. This needs to be fixed to avoid incorrect behaviour at run time." }, { "id": "ASL_MSG_SYNC_LEVEL", "advice": "Data mutex synchronization level is too large, should be 0..15. See section 18.5.79 Mutex (Declare Synchronization/Mutex Object) of the ACPI specification for more details." }, { "id": "ASL_MSG_SYNTAX", "advice": "The disassembled code cannot be reassembled using the strict IASL compiler as it contains syntax errors." }, { "id": "ASL_MSG_TABLE_SIGNATURE", "advice": "Table signature must be 4 characters long and must contain alphanumeric characters." }, { "id": "ASL_MSG_TIMEOUT", "advice": "The operation can possibly timeout, and hence the return value indicates an timeout error. However, because the return value is not checked this very probably indicates that the code is buggy. A possible scenario is that a mutex times out and the code attempts to access data in a critical region when it should not. This will lead to undefined behaviour. This should be fixed." }, { "id": "ASL_MSG_UPPER_CASE", "advice": "Characters in literal string that are not hexadecimal letters must be upper case." }, { "id": "ASL_MSG_RECURSION", "advice": "Internal IASL Node recursion detected." }, { "id": "ASL_MSG_LOCAL_OUTSIDE_METHOD", "advice": "A local variable was used outside of a control method, or there is an error in the method declaration." }, { "id": "ASL_MSG_NOT_PARAMETER", "advice": "Argument to the method is not a real argument." }, { "id": "ASL_MSG_SERIALIZED_REQUIRED", "advice": "A named object is created inside a non-serialized method - this method should be serialized. It is possible that one thread enters the method and blocks and then a second thread also executes the method, ending up in two attempts to create the object and causing a failure." }, { "id": "ASL_MSG_TRUNCATION", "advice": "A truncation on a integer value has occurred. For example, a 32 bit value for a 16 bit timeout has been used." }, { "id": "ASL_MSG_LIST_LENGTH_SHORT", "advice": "The provided data is actually shorter than the specified length, for example in an ACPI buffer containing vendor data." }, { "id": "ASL_MSG_PACKAGE_LENGTH", "advice": "The package is larger than expected, hence wasting some space." }, { "id": "ASL_MSG_RESERVED_PACKAGE_LENGTH", "advice": "The package is smaller than required." } ] } debian/000077500000000000000000000000001465205512700123075ustar00rootroot00000000000000debian/changelog000066400000000000000000010330141465205512700141630ustar00rootroot00000000000000fwts (24.07.00-0ubuntu1) oracular; urgency=medium [Ivan Hu] * autopackager: mkpackage.sh: remove lunar * lib: fwts_log_html: fix the invalid printf format string * auto-packer: mkpackage.sh: add oracular * efi_runtime: don't build dkms module for those kernels with efi_test * acpi: cedt: add raw data dump for interleave target list * fwts-test: cedt: fix the wrong value of ENIW * fwts-test: cedt: sync up with adding raw data dump * acpi: s3pt: add tests for ACPI S3PT table * fwts-test: add regression tests for S3PT * acpi: acpipld: modify the test description to aviod misunderstanding * auto-packager: mkpackage.sh: remove mantic [Jonathan McDowell] * tpmevlog: Ensure EV_SEPARATOR recorded for PCRs 0-7 [Julien Olivain] * libfwtsiasl: fix parallel build with GNU Make >= 4.4 [Mario Limonciello] * aspm: Only require ASPM for devices with an actual link -- Ivan Hu Tue, 30 Jul 2024 11:10:40 +0800 fwts (24.03.00-0ubuntu1) noble; urgency=medium [Colin Ian King] * ACPICA: Update to version 20240322 [Ivan Hu] * acpi: s3: enable debug messages on S0ix failure for Intel platforms * acpi: s3: fix potential memory leaks on fwts_get() calls * framework: fix memory leaks caused by fwts_log_get_filenames * acpi: ras2: stop for loop when list exceeds the table * acpi: dbg2: update the subtype RISC-V SBI console for DBG2 * acpi: sbbr: check the existence of SPCR console devices * opal: fix the resource leak for get_linux_mem_devices * acpi: srat: fix the untrusted loop bound warning * opal: fix the resource leak for process_dimm and process_mba * opal: fix the resource leak for cpus * acpi: acpipld: add tests to check _PLD methods only on the connectable ports * lib: fwts_acpi_tables: fix the build fail on armhf [Mario Limonciello] * dmicheck: Don't check firmware version on anything but NVDIMM devices -- Ivan Hu Mon, 08 Apr 2024 11:20:06 +0800 fwts (24.01.00-0ubuntu1) noble; urgency=medium [Armin Wolf] * acpi/wmi: Add WMI GUID for the dell-smm-hwmon driver * acpi/wmi: Warn if a WMI GUID has zero instances [Ivan Hu] * snapcraft: update the source repo for snap build * snapcraft: add source type for repo * lib: framework: clear the error message with the extra result filename suffix * snapcraft: specify devmode confinement for fwts snap * acpi: fadt: clarify the check for sleep control register * acpi: madt: fix typo of madt subnames * lib: fwts_acpi: add the PRM type GAS defined value * acpi: fadt: add PERSISTENT_CPU_CACHES bits to fixed feature flags (mantis 2206) * acpi: method: add _DSC method tests (mantis 2224) * fwts-test: method: sync up with adding _DSC method tests * acpi: srat: add new Generic Port structure for srat tests (mantis 2236) * fwts-test: sync up with new Generic Port structure added for srat * acpi: srat: fix to get device handle value and dump the reserved array * acpi: method: clarify TAD device methods requirements (mantis 2253) * lib: fwts_acpi_tables: add missing GAS address space ID * acpi: madt: add GICC new flag and length change (mantis 2285, 2303) * acpi: einj: test more error injection actions for einjv2 (mantis 2287) * acpi: method: fix typo of subelement * acpi: method: add _PDO test (mantis 2293) * fwts-test: sync up the method _PDO was added * acpi: phat: add reset reason health record test (mantis 2294) * fwts-test: sync up for reset reason health record test * acpi: viot: add test for ACPI VIOT table (mantis 2152) * fwts-test: add regression tests for VIOT * acpi: misc: add tests for ACPI MISC table (mantis 2297) * fwts-test: add regression tests for MISC * acpi: ccel: add tests for ACPI CCEL table (mantis 2314) * fwts-test: add regression tests for CCEL * acpi: viot: fix build fail on bionic and focal * acpi: skvl: add tests for ACPI SKVL table (mantis 2314) * fwts-test: add regression tests for SKVL * Update copyright year to 2024 [Mario Limonciello] * Upgrade MCFGMMIONotReserved to HIGH error * s3: Add support for reading total s2idle residency from generic API * s3: Add support for checking last sleep cycle residency * Add support for ACPI 6.5 _UPC return values -- Ivan Hu Mon, 22 Jan 2024 14:37:56 +0800 fwts (23.11.00-0ubuntu1) noble; urgency=medium [Armin Wolf] * acpi/wmi: Add WMI GUID for the wmi-bmof driver [Ivan Hu] * fwts-test: sync up with Recognize Pluton TPM patch * klog.json: Add some missing einj kernel messages to klog database * klog.json: Add some missing bert kernel messages to klog database * klog.json: Add some missing erst kernel messages to klog database * lib: fwts_acpi_table: fix fwts_acpi_reserved_zero_array with the input string * klog.json: Add some missing hest kernel messages to klog database * klog.json: Add some missing apmt kernel messages to klog database * klog.json: Add some missinig processor_perflib kernel messages to klog database * README: modify the fwts git repository * acpi: aspt: fix typo of SPTT * klog.json: Add some missing exresolv kernel messages to klog database * klog.json: Add some missing efi64 kernel messages to klog database * klog.json: Add some missing exmisc kernel messages to klog database * klog.json: Add some missing evmisc kernel messages to klog database * klog.json: Add some missing rslist kernel messages to klog database * klog.json: Add some missing exfield kernel messages to klog database * klog.json: Add some missing tbfadt kernel messages to klog database * klog.json: Add some missing hwregs kernel messages to klog database * klog.json: Add some missing exutils kernel messages to klog database * klog.json: Add some missing nsaccess kernel messages to klog database * klog.json: Add some missing bus kernel messages to klog database * klog.json: Add some missing battery kernel messages to klog database * klog.json: Add some missing power kernel messages to klog database * fwts-test: sync up the SPTT typo fix * fwts-test: sync up with the klog message update * acpi: ras2: add test for ACPI RAS2 table * fwts-test: add regression tests for RAS2 * auto-packager: update the fwts git repo * lib: framework: fix the unclear error message of the results log * auto-packager: mkpackage.sh: add noble * acpi: ibft: add tests for iBFT table * fwts-test: add regression tests for iBFT [Mario Limonciello] * acpi: Recognize Pluton TPM -- Ivan Hu Tue, 28 Nov 2023 15:30:05 +0800 fwts (23.09.00-0ubuntu1) mantic; urgency=medium [Arthur Heymans] * acpi/spcr: Update supported port types * acpi/scpr: spcr->interrupt_type == 0 is valid [Colin Ian King] * data/klog.json: Fix spelling mistakes found using codespell * src/*: Fix various spelling mistakes in source code [Ivan Hu] * fwts-test: sync up with klog.json ix spelling mistakes found using codespell * fwts-test: sync up with update supported port types * acpi: update fadt and madt revisions to ACPI 6.5 * uefi: esrtdump: update the LastAttemptStatus values to UEFI spec 2.10 * acpi: phat: fix the device path for the health data record * fwts-test: sync up with phat fix the device path for the health data record * klog.json: Add and modify some more e820 kernel messages to klog database * acpi: phat: modify the dumping vendor data format * fwts-test: sync up with the phat dumping vendor data modification * acpi: spcr: update the spcr tests to lastest revision 4 * fwts-test: sync up the spcr test updating to revision 4 * dmicheck: update supported DMI version to 3.7 * s3: add checking the device signed wakeup events * s3: add dumping the all devices and signed wakeup sources * snapcraft: add snap build for riscv64 * fwts-test: sync up with the dumping s3-dump-wakeup-src option * acpi: s3: build fail for unexpected format of argument types for i386 * auto-packager: mkpackage.sh: remove kinetic * lib: fwts_acpi_object_eval.: fix build fail for ppc64el on mantic * acpi: iort: update IORT table to specification version E.e * fwts-test: sync up with iort test to version E.e * acpi: fadt: remove the tests for expecting smi_cmd is zero * uefi: esrt: fix the last_attempt_status wrongly interpretation of value * acpi: madt: add more interrupt controller structure types defined in ACPI 6.5 * kernelscan: modify some pathes of the scan files * klog.json: Add some missing ACPI memory hotplug kernel messages to klog database * klog.json: Add some missing processor idle kernel messages to klog database * klog.json: Add some missing ACPI NFIT kernel messages to klog database * klog.json: Add some missing sleep kernel messages to klog database * klog.json: Add some missing amba kernel messages to klog database * klog.json: Add some missing dma kernel messages to klog database * acpi: ivrs: fix the tests stuck at validate IVRS table * klog.json: Add some missing ACPI PCI IRQ kernel messages to klog database [Mario Limonciello] * Upgrade the max value for "Processor Upgrade" to 0x50 * tpmevlog: Correct boundary checking for PCR4 event check -- Ivan Hu Tue, 19 Sep 2023 10:20:20 +0800 fwts (23.07.00-0ubuntu1) mantic; urgency=medium [Armin Wolf] * acpi/wmi: Add WMI GUID for the dell-wmi-ddv driver * acpi/wmi: Check if the mandatory block query method exists * acpi/wmi: Fix bug when counting WMI methods * fwts_acpica: Remove unused variable "context" [Colin Ian King] * ACPICA: Update to version 20230628 [Ivan Hu] * lib: framework: remvoe ARM specific for ebbr * fwts-test: sync up the removing ARM specific for ebbr * cppcheck: fix the cppcheck source link error * lib: fwts_oops: fix the WARN_ON warnings in kernel not found * debian: control: update uploader * debian: control: modify newer dkms dependency * auto-packager: mkpackage.sh: remove the control hook * lib: fwts_dump_data: add function for simply dump raw data * lib: fwts_dump_data: add library function for dumping all raw data with prefix * acpi: aest: modify the dumping raw data without noisy info * fwts-test: sync up aest modify the dumping raw data * acpi: mpam: add test for ACPI MPAM table * fwts-test: sync up with adding the mpam tests * acpi: mpam: test with resource specific data for interconnect location type * fwts-test: sync up with test with resource specific data * acpi: mpam: fix build fail on bionic * uefi: esrt: update the LastAttemptStatus values to UEFI spec 2.10 * lib: fwts_acpi_object_eval: sync up the AML exceptions from ACPICA * debian: update compat level and standards version * debian: fix debuild fail for the not installed files * debian: fix lintian errors and warnings [Mario Limonciello] * Increase number of max semaphores to fix OOM crashes on some systems [Ãkos Nagy] * lib: make the return types consistent -- Ivan Hu Fri, 07 Jul 2023 10:37:02 +0800 fwts (23.05.00-0ubuntu1) mantic; urgency=medium [Colin Ian King] * ACPICA: Update to version 20230331 [Ivan Hu] * dmicheck: extent the dmi_patterns for the default serial number string * dmicheck: add more checks for invalid serial number string * acpi: cedt: remove unused code * acpi: ivrs: add tests for ACPI IVRS table * fwts-test: add regression tests for IVRS * acpi: button: remove check fixed hardware & control method power buttons * lib: fwts_framework: add EBBR to category * s3: fix the display time of resume for Timekeeping suspended string missing * fwts_framwork: add ebbr test for RISC-V * auto-packager: mkpackage.sh: add mantic * debian: control: add build depend dh-dkms * auto-packager: mkpackage.sh remove the dh-dkms dependency -- Ivan Hu Tue, 23 May 2023 11:59:34 +0800 fwts (23.03.00-0ubuntu1) lunar; urgency=medium [Huacai Chen] * Add support for 64 bit LoongArch compilation [Ivan Hu] * sbbr: add esrt and uefibootpath tests to sbbr option * ebbr: add some tests to ebbr option * acpi: method: NIH method output buffer should be 4 bytes * debian: update copyright * dmicheck: fix the length check error for type 9 * dmicheck: fix the wrong slot height value range * dmicheck: fix the extended bios ROM size bit check of type 0 * dmicheck: add processor family check for type 4 * dmicheck: add status check for type 4 * dmicheck: add bit 0 reserved check of the processor characteristics for type 4 * dmicheck: modify the memory type range check for type 17 * dmicheck: add some bit 0 reserved checks for type 17 * dmicheck: update the interface field for type 21 * dmicheck: update the device type field for type 41 * dmicheck: update for supporting DMI version to 3.6 * dmicheck: fix the print format * auto-packager: mkpackage: add build depend dh-dkms for lunar [Vasiliy Kovalev] * libfwtsiasl: fix undefined symbols in shared library -- Ivan Hu Mon, 27 Mar 2023 12:06:53 +0800 fwts (23.01.00-0ubuntu1) lunar; urgency=medium [Ivan Hu] * acpi: s3: fix the issue for determining time to resume * tpmevlog: add tests for checking the UEFI_IMAGE_LOAD_EVENT Structure * acpi: aest: add tests for ACPI AEST table * fwts-test: add regression tests for AEST * lib: fwts_acpi_tables: fix the passed reserved value * Update copyright year to 2023 * fwts-test: sync up with the fix of passed reserved value -- Ivan Hu Mon, 16 Jan 2023 12:08:07 +0800 fwts (22.11.00-0ubuntu1) lunar; urgency=medium [Bryan Kemp] * Add Support for EV_COMPACT_HASH event type [Colin Ian King] * ACPICA: Update to version 20221020 * fwts-test: sync test logs with latest ACPICA [Ivan Hu] * s3: modify the default sleep type description * fwts-test: sync up with the default s3 sleep type description change * acpi: rgrt: add test for ACPI RGRT table( mantis 2056) * fwts-test: add regression test for RGRT * acpi: cedt: add tests for ACPI CEDT table (mantis 2076) * fwts-test: add regression tests for CEDT * auto-package: mkpackage.sh: add lunar -- Ivan Hu Mon, 21 Nov 2022 15:31:59 +0800 fwts (22.09.00-0ubuntu1) kinetic; urgency=medium [Ivan Hu] * acpi: dbg2: update the subtype for DBG2 table * lib: acpi: update battery charge limiting state for _BST * uefi: securebootcert: fix the attribute set for AuditMode and DeployedMode * acpi: fadt: get _CST c2 c3 for p_lvl2 and p_lvl3 tests * acpi: nhltdump: add dumping nhlt table for audio configurations * acpi: nhltdump: add endpoint discriptor string description * acpi: svkl: add test for SVKL table (mantis 2162) * fwts-test: add regression test for SVKL * acpi: iort: remove redundant code -- Ivan Hu Thu, 22 Sep 2022 09:29:58 +0800 fwts (22.07.00-0ubuntu1) kinetic; urgency=medium [Ivan Hu] * dmicheck: add Processor Architecture Types check for type 44 * dmicheck: update for supporting DMI version to 3.5 * dmicheck: update the processor upgrade field for type 4 * acpi: pmtt: fix the wrong table label * fwts-test: sync up the fix of pmtt wrong table label * acpi: asf: remove the checking of minmun watchdog reset value 0 * fwts-test: sync up the remove of ASF minimun watchdog reset value * acpi: asf: enable verbose output * fwts-test: sync up with asf verbose dump * auto-packager: mkpackage.sh: remove impish [orbea] * build: Improve linking -- Ivan Hu Mon, 25 Jul 2022 11:12:56 +0800 fwts (22.05.00-0ubuntu1) kinetic; urgency=medium [Colin Ian King] * ACPICA: Update to version 20220331 [Ivan Hu] * acpi: iort: update IORT node revision check * acpi: iort: update the IORT node dump * Update copyright year to 2022 * acpi: iort: update IORT test to specification version E.d * auto-packager:mkpackage.sh: add kinetic * acpi: mcfg: checking kernel lockdown when doing mmap PCI config space * fwts-test: sync up IORT test with specification version E.d -- Ivan Hu Mon, 23 May 2022 13:51:46 +0800 fwts (22.03.00-0ubuntu1) jammy; urgency=medium [Alex Hung] * acpi/time: skip a number of TAD methods when _GCP[0] is clear [Colin Ian King] * ACPICA: Update to version 20211217 * fwts-tests: update acpi dump data to be in sync with latest ACPICA [Ivan Hu] * uefirtmisc: add checking the resources for testing * uefirtmisc: add option to specify iterations get next high monitonic count * fwts-test: sync up the adding option for get next high monotonic count * acpi:dmar: update the link of DMAR table * acpi: macf: report failures instead of just logging the errors * acpi: sdev: add checking secure access components * fwts-test: sync up the sdev checking secure access components -- Ivan Hu Thu, 17 Mar 2022 14:09:40 +0800 fwts (22.01.00-0ubuntu1) jammy; urgency=medium [Alex Hung] * auto-packager: mkpackage.sh: remove hirsute * s3: use system suspend default if --s3-sleep-type is not used * fwts_acpica: skip unneccessary null check [Ivan Hu] * lib: fwts_tpm.h: add new type definition * tpmevlog: add supporting several new types for event log checking * tpmevlogdump: add supporting several new types for event log dumping -- Ivan Hu Tue, 25 Jan 2022 11:37:31 +0800 fwts (21.12.00-0ubuntu1) jammy; urgency=medium [Alex Hung] * s3: fix incorrect error messages for s2idle_residency * s3: increase s2idle_residency to u64 to avoid overflows * dmicheck: skip scanning smbios in /dev/mem on aarch64 [Ivan Hu] * s4: clean up pedantic static analysis warnings * acpi: uniqueid: clean up pedantic static analysis warnings -- Alex Hung Wed, 15 Dec 2021 14:39:16 -0700 fwts (21.11.00-0ubuntu1) jammy; urgency=medium [Alex Hung] * acpi: uniqueid: skip comparison of _HID and _CID of the same device * auto-packager:mkpackage.sh: add jammy [Colin Ian King] * snapcraft: fix path to fwts * snapcraft: Fix incorrect core20 library path [G Edhaya Chandran] * lib: fwts_smbios: fix loading SMBIOS table from uefi [Grzegorz Bernacki] * acpi: madt: De-initialise ACPICA core engine in case of error. [Ivan Hu] * ACPICA: Update to version 20210930 * s3: add sleep type setting for testing with s3 or s2idle * fwts-test: sync up the adding sleep type for s2idle testing -- Alex Hung Wed, 24 Nov 2021 00:15:47 -0700 fwts (21.09.00-0ubuntu1) impish; urgency=medium [Alex Hung] * lib: fwts_firmware: fix incorrect comments for fwts_firmware_detect * acpi: replace fwts_firmware_detect() by fw->firmware_type [Colin Ian King] * Manual: update number of tests, date and remove double spaces * lib: use rather than * snapcraft: update to use core20 * fwts_acpi_tables: NULLify table pointers * fwts_devicetree: clean up static analysis warning * opal: mem_info: clean up pedantic static analysis warnings * uefirtvariable: clean up pedantic static analysis warnings * acpi: s3power: clean up pedantic static analysis warnings * opal: Fix a few memory leaks on asprint allocated buffers * opal: clean up some coding style issues * smccc_test: fix missing ) in pr_info call * acpi: cstates: remove redundant null check on entry * acpi: dmar: constify a pointer argument in acpi_parse_dev_scope * acpi: iort: constify some function arguments * bios: smm: remove redundant variable n * src/pci/smccc: reduce scope of variable ret * uefi: securebootcert: make some function arguments const * uefi: uefirtmisc: reduce scope of some variables [Rob Herring] * Enable dt_sysinfo test for Power only * fwts_firmware: Rework Devicetree firmware detection * debian/control: Add device-tree-compiler as dependency for armel/armhf/arm64 -- Ivan Hu Mon, 27 Sep 2021 13:49:22 +0800 fwts (21.08.00-0ubuntu1) impish; urgency=medium [Alex Hung] * sbbr: remove pm_file test (not required in BBR 1.0) * acpi/wmi: update WMI known GUIDs from Linux kernel 5.14-rc1 * fwts-test: sync up with updates in fwts_wmi_known_guids * acpi: dmar: add a warning when PCI device is not found * acpi: fadt: clarify comments of FACS and HW-reduced mode * acpi: fadt: remove hard-coded FADT version * lib: fwts_acpi_tables: add a function to get FADT versions * acpi: sbbr: refactor by fwts_get_fadt_version * bios: smm: fix indentation [Colin Ian King] * ACPICA: Update to version 20210730 * ARM64 SMCCC firmware API tests [Sunny Wang] * uefirttime: Fix incorrect error messages for invalid time test -- Ivan Hu Wed, 25 Aug 2021 13:47:49 +0800 fwts (21.07.00-0ubuntu1) impish; urgency=medium [Alex Hung] * acpi: acpitables: add advices for table revision tests * sbbr: acpitables: add new recommended tables * fwts_acpi_tables: skip FACS warning for reduced hardware * fwts-test: sync up with DBG2 changes from BSA updates * auto-packager: mkpackage.sh: remove groovy [Erico Nunes] * sbbr: remove SSDT from mandatory list * sbbr: adjust signature name for MADT [Grzegorz Bernacki] * acpi: method: Make method_test_ADR() optional * acpi: dbg2: Allow 16550 compatible serial port in DBG2 * acpi: method: Make _AEI test optional for SBBR [Ivan Hu] * uefirttime: add advice for the timezone 2047 failure (LP: #1933503) -- Alex Hung Wed, 14 Jul 2021 16:56:22 -0600 fwts (21.06.00-0ubuntu1) impish; urgency=medium [Alex Hung] * fwts_test: arg-json-0001: use current klog.json, not a copy * lib: fwts_acpi_tables: constify read-only function arguments * fwts_framework: clean up flag macros * acpi: pptt: constify read-only function arguments * acpi: wdat: enable printing fields * fwts-test: sync up with wdat changes * acpi: wrap long funtion definitions * acpi/fwts-test: fix typo (depreciated->deprecated) * sbbr: add checks for mandatory tables * sbbr: update recommended tables * acpi: remove SBBR mandatory tests in various tables * acpi: sbbr: add mcfg and pptt to --sbbr option * live-image: remove unnecessary -skip-test=s3,s4 argument * live-image: create a separate menu for arm64/aarch64 * dmicheck: add type 42 to SBBR requirement * klog.json: check IRQ requests on irqchip * tpmevlog: add to batch tests * live-image: add utils tests to "Selected" menu * live-image: add "TPM tests" to root menu * auto-packager: mkpackage.sh: remove xenial [Colin Ian King] * Makefile.am: remove all traces of $srcdir and $top_srcdir in Makefile.am (LP: #1929138) * ACPICA: Update to version 20210604 * fwts-test: sync test logs with latest ACPICA * snapcraft.yaml: add architectures info to make remote snap builds easier * Debian: remove spaces at end of lines of changelong * Debian: remove spaces at end of lines of control file * debian/copyright: use secure https url specifier * Debian: add project Homepage field to control file * Debian: add Rules-Requires-Root field to control file * Debian: update compat level to 9 * Debian: control: update Standards-Version to 4.1.0 * Add lintian overrides for ldconfig trigger warning * Debian: move source lintian overrides file to source * Remove complex disabling of ACPI for non-ACPI targets * fwts_acpi_tables: memcpy 4 char ACPI table name [Ivan Hu] * uefirttime: set test time for the settime and setwakeuptime tests (LP: #1929509) -- Alex Hung Sun, 20 Jun 2021 23:42:45 -0600 fwts (21.05.00-0ubuntu1) impish; urgency=medium [Alex Hung] * acpi: sdev: update type 1 in ACPI 6.4 (mantis 2111) * fwts-test: sync up with sdev changes * acpi: acpitables: add revision tests for PPTT * acpi: pptt: add cache id according to ACPI 6.4 (mantis 2138) * acpi: lib: add two helper functions * acpi: phat: add a test for PHAT table * fwts-test: sync up with phat test * oops: add "kernel BUG" to oops test * fwts-test: sync up with oops tests * acpi: pmtt: update PMTT to revision 2 (mantis 1975) * fwts-test: sync up with PMTT rev 2 changes * acpi: refactor by fwts_acpi_structure_range_check * acpi: refactor by fwts_acpi_reserved_type_check * acpi: refactor zero length by fwts_acpi_structure_length_zero_check * acpi: refactor length check by fwts_acpi_structure_length_check * fwts-test: sync up with PMTT refactoring changes * lib: acpi: unify naming style by removing "ACPI" * acpi: shorten helper function names by removing "check" * lib: acpi: fix incorrect actual vs. struct length outputs * acpiinfo: update ACPI 6.4 vs. ACPICA versions * acpi: dbgp/spmi: check space ids by fwts_acpi_space_id * fwts-test: sync up with dbgp changes [Colin Ian King] * fwts_devicetree: clean up pedantic static analysis warning * lib: fwts_acpi: fix potential infinite loop in data copy * acpi: madt: replace continue with empty statement ; * acpi: s3: ensure duration is initialized * acpi: method: remove redundant continue statements * Fix warnings on fdt_getprop calls * acpi: uniqueid: Fix a couple of memory leaks * ACPICA: Update to version 20210331 * fwts-test: update to sync with latest ACPICA * mtrr: remove ioctl header include, it is redundant * fwts_args: constify fields in struct fwts_option * fwts_acpica.h: constify type argument in fwts_acpica_get_object_names * fwts_args.h: constify read-only function arguments * fwts_acpi_object_eval.h: constify read-only function arguments * fwts_devicetree.h: clean up #define indents, constify function arg * fwts_efi_module.h: constify read-only function arguments * fwts_gpe: re-format prototypes to fit into 80 columns. * fwts_pm_method.h: constify some function args, don't inline free_pm_method_vars * acpi_object_names: move array acpi_object_names into fwts_method_check_element_type * fwts_acpi_tables: move array gas_space_id_names into get_space_id_name * fwts_arch: rename helper __fwts_arch_get_arch to fwts_arch_get_arch_by_name * fwts-coreboot: remove blank line and fix a comment in a typo * fwts_efi_module: constify read-only argument in check_module_loaded_no_dev * fwts_firmware: move feature_names into fwts_firmware_feature_string * fwts_log_html: move fwts_log_html_ascii_table into fwts_log_html_convert_ascii * fwts_summary: move two arrays into function fwts_summary_report * fwts_tpm: make function args and a variable const * bios: bios_info: make struct fields const * bios: mtrr: clean up blank lines, make some arguments const * bios: mpcheck: make function args const, change scope of array bus_types * bios: mpcheck: make LEVEL macro an inlined helper function * bios: mpdump: constify some read-only function arguments and variables * bios: pciirq: constify read-only function argument * bios: pnp move pnp_control_field into pnp_test1 and add constifications * bios: romdump: constify read-only function args, add some white spaces * bios: s0idle: constify read-only pointer * cpu: cpufreq: make read-only function args and variables const * devicetree: dt_sysinfo: make read-only function args and variables const * devicetree: dt_sysinfo: make variable len a size_t * hotkey: make read-only function args and variables const * dmi: dmicheck: make read-only function args and variables const * tpm: tpmevlogdump: make read-only function args and variables const * tpm: tpmevlog: make read-only function args and variables const * doc/fwts.1: fix spelling mistakes in the manual * data: syntaxcheck.json: fix spelling mistakes * treewide: fix spelling mistakes in comments, literals and tests * treewide: Makefile.am: use $srcdir rather than relative path * Makefile.am: remove references to json or json-c * fwts_acpi_tables: add newline after declaration and before statement * lib: fwts_ac_adapter: remove redundant pointer ac_entry * lib: fwts_coreboot_cbmem.c: clean up static analysis warning * lib: fwts_json: free objects where necessary to plug heap leaks [Ivan Hu] * tpmevlog: print out the TPM event log format type * uefirttime: only test the unsupported status with RuntimeServicesSupported * uefirtvariable: only test the unsupported status with RuntimeServicesSupported * uefirtmisc: only test the unsupported status with RuntimeServicesSupported * uefi: remove unused have_rtsupported * uefirttime: check time services supported before testing (LP: #1913351) * uefirtmisc: check misc runtime services supported before testing (LP: #1913351) * uefirtvariable: check variable runtime services supported before testing (LP: #1913351) * uefirtauthvar: check variable runtime services supported before testing (LP: #1913351) * uefirtvariable: fix memory leak * auto-packager:mkpackage.sh: add impish -- Ivan Hu Thu, 20 May 2021 16:31:29 +0800 fwts (21.03.00-0ubuntu1) hirsute; urgency=medium [Alex Hung] * pci: move pci_device struct to fwts_pci.h * bios: smm: add a test to check SMM lock bits * bios: interrupt: add a test to check ACPI SCI per second * acpi: uniqueid: add tests for _HID/_CID vs. _UID [Colin Ian King] * acpi: s3,s4: ensure status is initialized [Heinrich Schuchardt] * uefi: update header for EFI runtime services * uefi: fix fwts_uefi_rt_support_status_get() [Ivan Hu] * uefi: remove the var_ prefix * uefi: move fwts_uefi_rt_support_status_get to init function -- Ivan Hu Mon, 29 Mar 2021 16:55:04 +0800 fwts (21.02.00-0ubuntu1) hirsute; urgency=medium [Alex Hung] * acpi: replace objname by get_object_name() in various functions * acpi: method: remove a redundant passed message * acpi: move acpi battery common methods to lib * acpi: method: check fixed package by fwts_method_package_elements_type * acpi: method: merge and refine _CSD, _PSD and _TSD return tests * lib: fwts_acpi_object_eval: add returns to long lines * acpi: method: refine _PSS and _TSS method tests * acpi: method: merge _PCT & _PTC method tests * acpi: method: refine tests sub-package elements * acpi: method: remove redundant count_equal checks in _CPC test * acpi: method: refine _Sx count checks by fwts_method_package_count_min * acpi: method: refine _PRW method tests * acpi: method: add passed messages to _GLK and _DSD tests * acpi: update ACPI version to 6.4 * acpi/madt: add ACPI 6.4 to madt_revision test * lib: fwts_acpi_tables: update fwts_get_acpi_version (mantis: 2105) * acpitables: update ACPI table revsion test to ACPI 6.4 * acpi: nfit: add Spa Location Cookie as in ACPI 6.4 (mantis 1988) * acpi: srat/hmat: update fields of sub-structures (mantis 1991) * acpi: battery/method: add _BPC, _BPS and _BPT tests (mantis 1997) * fwts-test: sync up with _BPC, _BPS, _BPT, NFIT and HMAT tests * acpi: pcct: add type 5 according to ACPI 6.4 (manti 2010) * fwts-tests: sync up with pcct updates * acpi: method: add _CBR test (mantis 2045/2077) * fwts-test: sync up with _CBR test * acpi: madt: add Multiprocessor Wakeup support (mantis 2087) * acpi: battery: add Battery Charge Limiting (mantis 2090) * acpi: method: update _DDC argument size (mantis 2137) * acpi: madt: update fadt and madt revisions to ACPI 6.4 * lib: acpi: add a macro to fwts_acpi_reserved_bits_check * lib: acpi: add a macro to fwts_acpi_reserved_zero_check * fwts_framework: skip sbbr & ebbr on non-aarch64 systems * sbbr: disable SBBR tests on non-aarch64 systems * pci: maxreadreq: Add "safe to ignore ... message" * version: remove /proc/acpi/info * Revert "lib: fwts_acpi_tables: add option for dump acpi table from sysfs" * lib: acpi: load acpi tables from sysfs by default * fwts-test: sync up with removal of dump-acpi-from-sysfs [Colin Ian King] * acpi: method: fix two memory leaks on error return paths * lib: fwts_acpi_tables: use bit-wise & rather than logical && -- Alex Hung Tue, 23 Feb 2021 11:49:17 -0700 fwts (21.01.00-0ubuntu1) hirsute; urgency=medium [Alex Hung] * cpu: maxfreq: skip when "model name" is not available * acpi: enable & disable acpi tables for arm64 * acpi: lib: refactor table _init to a macro function * fwts-test: sync up with XSDT revision changes * Update copyright year to 2021 * acpi: check reserved fields by fwts_acpi_reserved_zero_check * fwts-test: sync up with fwts_acpi_reserved_zero_check * acpi: fix incorrect parameter to fwts_acpi_reserved_bits_check * lib: add fwts_acpi_fixed_value_check function to check fixed values * acpi: refactor checks for fixed values by fwts_acpi_fixed_value_check * fwts-test: sync up with fwts_acpi_fixed_value_check * acpi: add fwts_acpi_space_id_check to check GAS adrress space ids * fwts-test: sync up with fwts_acpi_space_id_check * acpi: mcfg: enable only if ACPI is available * cpu: maxfreq: fix build errors on arm32 + gcc10 * lib: add fwts_log_info_simp_int to printing integers * fwts-test: sync up with fwts_log_info_simp_int changes * lib: fwts_smbios: merge similar functions * dmicheck: add a marco to shorten dmi_ranges_uint8_check calls * acpi: pmtt: fix infinite loops when length is incorrectly zero * lib: fix compile error for debian + gcc 8.3 * acpi: method: add a function to check number of sub-package elements * acpi: method: replace _GPE test by fwts_method_package_elements_type * acpi: method: add a function to check type of sub-package elements * acpi: shorten fwts_method_package_elements_type args by a macro [Colin Ian King] * ACPICA: Update to version 20201217 * ACPICA: Update to version 20210105 * acpi: fix incorrect method of finding string size * uefi: add a helper to check for address overflow * tpmevlog: clean up some minor cppcheck style warnings * tpmevlogdump: clean up some minor cppcheck style warnings * uefi: clean up a cppcheck style warning * kernelscan: fix variable shadowing warning * cpu: cpufreq: initialize online_cpus in for loop * acpi: add null check on calls to get_space_id_name() * acpi: fix check of length overflow [Nhi Pham] * acpi: lib: correct revision of the fake XSDT table [Rebecca Cran] * dmicheck: Type 4 Processor Characteristics bit 9 is no longer reserved -- Alex Hung Wed, 20 Jan 2021 01:31:17 -0700 fwts (20.12.00-0ubuntu1) hirsute; urgency=medium [Alex Hung] * acpi: method: define marcos for D3hot and D3cold * acpi: fadt: X_GPE0/1_BLK can be zero when not used * pci: maxreadreq: skip Intel video devices * acpi: method: replace revision checks by fwts_method_test_revision * dmicheck: add dmi version check to SMBIOS3 * lib: fwts_acpi_object_eval: add fwts_method_test_revision function * lib: fix a function name typo in comment * dmi: dmicheck: update type 4, 9 and 17 according to spec 3.4 [Colin Ian King] * lib: replace FWTS_ACPI_FADT_PREFERRED_PM_PROFILE with function * Replace FWTS_ARRAY_LEN with FWTS_ARRAY_SIZE * sbbr/fadt: Clean up indentation of a few lines * lib: fwts_firmware: cast 1 to UL to ensure no signed extension, clean up comments * src: Clean-up: remove trailing spaces and tabs from lines * lib: fwts_efi_module: fix flags on device open * acpi: fan: skip over fan info when the type field is NULL (LP: #1906540) -- Ivan Hu Thu, 17 Dec 2020 10:14:02 +0800 fwts (20.11.00-0ubuntu1) hirsute; urgency=medium [Alex Hung] * acpi/wmi: update WMI known GUIDs from Linux kernel * acpi/pptt: add a warning for type 2 depreciation * fwts-test: sync up with pptt type 2 changes * auto-packager:mkpackage.sh: add hirsute * klog.json: add ACPI error "Could not resolve symbol ..." * klog.json: fix grammar mistakes * klog.json: sync AE_NOT_FOUND severity with a5d747194a9e * fwts-test: sync up with klog (e09cbe166d4c) * mtrr: refine memory type above 4GB on AMD platforms * mtrr: add tests for enable bits in MTRR_DEF_TYPE MSR * lib: refactor fwts_acpi_is_reduced_hardware * acpi/ec: check _GPE is not used for hardware-reduced * cpu/msr: skip MSR MCG_CTL (0x17b) for AMD CPUS * acpi/method: fix _SxW which can return 4 [Colin Ian King] * ACPICA: Update to version 20201008 * fwts-test: sync up output with the latest ACPICA 20201008 release * lib: fwts_json: fix output so that it is machine parsable (LP: #1902249) * lib: fwts_cmos: remove cli/sti assembler from cmos reading * ACPICA: Update to version 20201113 * fwts-test: sync up output with the latest ACPICA 20201113 * lib: fwts_json: fix memory leaks on error return paths * lib: fwts_json: fix output so that it is machine parsable (LP: #1902249) [Heinrich Schuchardt] * README: document required kernel configuration * lib: avoid bus error in fwts_safe_memcpy * lib: enable /dev/mem access on aarch64 [Ivan Hu] * lib: fwts_tpm: move some tpm funcitons to lib * tpmevlog: add tests for snatic check of the Tpm event log * tpmevlog: add tests for snatic check of the TPM event sha1 format log * lib: fwts_acpi_table.c: fix build fail -- Ivan Hu Wed, 25 Nov 2020 17:20:45 +0800 fwts (20.09.00-0ubuntu1) groovy; urgency=medium [Alex Hung] * s0idle: add a test to verify lower power s0 idle is enabled * fwts-test: sync up with new s0idle tests [Colin Ian King] * s3: fix segmentation fault when PM_S2IDLE_SLP_S0 is not available (LP: #1894229) [Ivan Hu] * tpmevlogdump: add dumping sha1 log format event log -- Alex Hung Thu, 17 Sep 2020 12:07:19 -0600 fwts (20.08.00-0ubuntu1) groovy; urgency=medium [Alex Hung] * gitignore: update ignore files * acpi/fadt: checks X_GPE0/1 have byte access width * s3: check slp_s0_residency_usec for s2idle [Colin Ian King] * Debian: update compat level and standards version to match Xenial * Debian/copyright fix lintian warning * Debian: add riscv64 lintian overrides * data: klog.json: fix unintential newline in a literal string * dmicheck: update Memory Device type 17 size/version check (LP: #1892479) * Replace json-c library with minimal replacement * Remove all libjson references * lib: fwts_json: fix memory leak on error return path * lib: fwts_log_json: fix memory leak -- Alex Hung Mon, 24 Aug 2020 21:53:07 -0600 fwts (20.07.00-0ubuntu1) groovy; urgency=medium [Alex Hung] * auto-packager: mkpackage.sh: remove eoan * travis: update dist to focal * tpm2: table size can be 76 when "LAML" & "LASA" are used [Colin Ian King] * replace inaccurate and offsensive language * acpi: mpst: fix potential infinite loop on 16 bit counter j * tpmevlogdump: fix leak of fd on error return paths, voidify close returns * opal: add check for the number of regions * ACPICA: Update to version 20200717 * Add riscv64 architecture to fwts * lib: fwts_modprobe: add helper to build module path name * lib: fwts_battery: add helper to build battery path name [Ivan Hu] * tpmevlogdump: add function for dumping tpm event log * tpmevlogdump: add pcr_index usage * libfwtsiasl: fix build error on groovy * lib: fwts_battery: fix build error on armhf * lib: fwts_buttion: add helper function to build button path -- Ivan Hu Wed, 29 Jul 2020 15:30:01 +0800 fwts (20.06.01-0ubuntu1) groovy; urgency=medium [Alex Hung] * fwts_acpi_object_eval: add a function to check package * acpi/method: remove duplicated code by a common function * acpi: refactor method_test_BMD to a common function * fwts_acpi_object_eval: add a function to check buffer size * acpi/method/time: replace buffer size checks with function calls * method: fix typo for ROM test return * acpi/method: add tests for _MAT method * fwts-test: sync up with _MAT method tests * method: replace duplicated code by util function in _PRR test * acpi/method: remove duplicated code in _PSR test * acpi/method: add tests for _SLI method * fwts-test: sync up with _SLI method tests * acpi/method: fix incorrect error messages for _SUB tests * acpi/method: check _WPP returns by fwts_method_test_polling_return * acpi/method: update tested method comments for _ALx and _SLI * acpi/method: line wrap long statements * dmicheck: update supported DMI version to 3.3 * fwts_acpi_object_eval: revise fwts_method_test_passed_failed_return * dmicheck: test feature flags in type 2 * dmicheck: remove duplicated chassis type test in type 3 * dmicheck: update Processor Characteristics test in type 4 * dmicheck: add Supported SRAM test in type 4 * dmicheck: fix typo in type 8 * dmicheck: add CXL Flexbus 1.0 to slot type in type 9 * dmicheck: fix wrong length for reserved fields in type 13 * dmicheck: update tests in type 17 * dmicheck: check fields that has max 0x8000 * dmicheck: check reserved bits in Characteristics in type 43 * dmicheck: refactor code to check mutliple valid ranges * fwts_acpi_tables: fix fwts_get_acpi_version helper * acpitables: test ACPI versions vs. ACPI table revisions * fwts-test: sync up with acpitables tests * gitignore: update ignore list * cpu: virt: remove unused marco "CPUID_FAM_REV" * acpi/nvdimm: add tests for nvdimm devices * acpi/devices: refactor devices' HIDs and names * cpu/msr: remove General Performance Counters * acpi/devices: fix typos in comments * dmicheck: add type 0's fields used by kernel * acpitables: add table name outputs to revision tests * fwts-collect: depreciate ebda collection [Colin Ian King] * ACPICA: Update to version 20200528 [Ivan Hu] * lib: fwts_acpi_tables: add option for dump acpi table from sysfs * lib: fwts_dump_data: make the dumping data the same format as acpidump * doc: add new --dump-acpi-from-sysfs option * fwts-test: sync up with new --dump-acpi-from-sysfs option and acpidump changes * lib: fwts_acpi_object_eval: fix build error on i386 [You-Sheng Yang] * gitignore: add git.mk * debian: update copyright info for git.mk * gitignore: enable git.mk usage * gitignore: add results.log * gitignore: add packaging specific files -- Ivan Hu Tue, 23 Jun 2020 16:37:55 +0800 fwts (20.05.00-0ubuntu1) groovy; urgency=medium [Alex Hung] * dmicheck: update system slot type (type 9) * dmicheck: update Memory Device type (type 17) * dmicheck: add Type 44 (Processor Additional Information) * dmicheck: update Memory Array Location (type 16) * acpi/method: check _PS3 exists when _PS0 is present * klog.json: add a "Unable ... IOMMU perf counter" message * acpi/method: checks _UPP's return as polling * acpi/method: add tests for _ALx method * fwts-test: sync up with _ALx control method * acpi/method: reuse common function for _PCL method * acpi/method: refactor with fwts_method_test_all_reference_package_return * acpi/method: check reserved bits from _BBN return * acpi/method/battery: replace hardcoded array length by FWTS_ARRAY_SIZE * acpi/method: remove duplicated code for returned integers * fwts-test: sync up with method tests * lib: fwts_acpi_object_eval: add a function to check reserved bits * acpi/method: check integer returns with bit definitions * acpi/method/battery: check method returning integer 0 & 1 * lib: fwts_acpi_object_eval: add a function to check max returned integers * acpi/method: check _PSC, _SxD and _SxW for max returned integers * auto-packager:mkpackage.sh: add groovy * acpi/method: revise _CPC's error messages * acpi/time: fix passing method name instead of NULL [Colin Ian King] * ACPICA: Update to version 20200326 * lib: fwts_tty: memset a ws struct to keep static analyzers happy * acpi: battery: pass string length to avoid any string overflows * opal: mtd_info: memset a mtd_info struct to keep static analyzers happy * lib: fwts_wakealarm: memset a rtc_tm struct to keep static analyzers happy * acpi: gpedump: ensure buf is set on default case * uefi: uefirtvariable: fix a memory leak of variablename * lib: fwts_acpi_object_eval: avoid any division by zero * lib: fwts_json.h: define TRUE and FALSE for newer versions of json-c (LP: #1874224) * Manual: update names of contributors * fwts_framework: ensure the string returned from fwts_arch_names is free'd * ACPICA: Update to version 20200430 * acpi: crsdump: fix portability warning from cppcheck [Ivan Hu] * uefi: add helper function for efi test module init [Paul Menzel] * README: Use HTTPS URL https://kernel.ubuntu.org -- Alex Hung Thu, 14 May 2020 12:08:10 -0600 fwts (20.03.00-0ubuntu1) focal; urgency=medium [Colin Ian King] * ACPI: crsdump: include crsdump.h in crsdump.h, rename guard macro * acpi: madt: unconstify data argument * lib: fwts_summary: fix build warning with gcc-10 * Makfile: add more warning flags to ensure we catch more issues [Ivan Hu] * acpi: msdm: fix print typo * lib: add kernel lockdown check * uefi: check the kernel lockdown for uefi tests -- Alex Hung Mon, 23 Mar 2020 12:42:11 -0600 fwts (20.02.00-0ubuntu1) focal; urgency=medium [Alex Hung] * fwts_hwinfo: add device check for Type-C * fwts_hwinfo: fix copy & paste typos * fwts_hwinfo: add device check for disks * fwts_hwinfo: add device check for attached monitors * live-image: replace hard-coded "oem-tests.lst" by a variable * live-image: add an option for creating oem-tests.lst [Colin Ian King] * ACPICA: Update to version 20200214 * fwts-test/syntaxcheck: sync regression log with latest ACPICA output [Ivan Hu] * auto-packager: mkpackage.sh: remove disco -- Ivan Hu Wed, 26 Feb 2020 09:39:35 +0800 fwts (20.01.00-0ubuntu1) focal; urgency=medium [Alex Hung] * dmicheck: skip type 17 test if no memory module [Colin Ian King] * ACPICA: Update to version 20191213 * Update copyright year to 2020 * ACPICA: Update to version 20200110 * lib: fwts_memorymap: check for memory allocation failure on object entry * lib: fwts_multiproc: add sanity check to data->size to clean up static analysis warning * lib: fwts_acpi_tables: remove redundant initialization to oem_tbl_id * uefirtvariable: indicate that return from setvariable_insertvariable is ignored * lib: fwts_memorymap: fix resource leak on dir on error return path -- Ivan Hu Tue, 14 Jan 2020 15:32:20 +0800 fwts (19.12.00-0ubuntu1) focal; urgency=medium [Colin Ian King] * efi_runtime: don't build dkms module for kernels 4.8.0 and above (LP: #1853090) * debian/tests: only run dkms test when dkms module is run * debugger: check for memory allocation failure on object Elements * debugger: fix spelling mistake "adress" -> "address" * cpu: microcode: remove redundant check on pointer entry * fwts_wakealarm: remove unused function fwts_wakealarm_exits [Erik Schmauss] * iASL: remove unneeded NULL checks -- Alex Hung Sun, 08 Dec 2019 22:01:38 -0700 fwts (19.11.00-0ubuntu1) focal; urgency=medium [Alex Hung] * lib: fwts_log_html: tweak line-height * auto-packager:mkpackage.sh: add focal * acpi/s3: fine-tune measure of suspend time * lib: fwts_log_html: set max-width for line wrap * live-image: overwrite pre-defined tests by oem-tests.lst * acpi/s3: fix no suspend & resume time for s2idle * acpi/fadt: check no-zero failures for X_PM* for 6.1 and before * sbbr: add uefi tests to ARM's SBBR [Colin Ian King] * ACPICA: Update to version 20191018 * iASL: fix memory leak of LocalityBuffer on error return path * lib: fwts_framework: use strlcpy instead of strncpy, fixes gcc-10 build errors [Ivan Hu] * ebbr: add EBBR option for ARM embedded systems * fwts-tests: sync up with --ebbr option * lib: move the global variable guid to lib header * lib: add function for check the RuntimeServicesSupported variable * uefirttime: add unsupported checking with RuntimeServicesSupported variable * uefirtvariable: add unsupported checking with RuntimeServicesSupported variable * uefirtmisc: add unsupported checking with RuntimeServicesSupported variable * doc: add --ebbr option for man page [Robert Moore] * iASL: Use ACPI_COMPARE_NAMESEG instead of strcmp -- Alex Hung Wed, 13 Nov 2019 22:06:27 -0700 fwts (19.09.00-0ubuntu1) eoan; urgency=medium [Alex Hung] * acpi/boot: skip ACPI BOOT test on UEFI systems. * acpi: s3: fix typo from 6b94bb6a4b13e [Colin Ian King] * opal: add more bounds checking and zero pstates array [Ivan Hu] * fwtstest: boot-0001: sync with boot table check on efi firmware -- Ivan Hu Thu, 26 Sep 2019 21:53:07 +0800 fwts (19.08.00-0ubuntu1) eoan; urgency=medium [Alex Hung] * auto-packager: mkpackage.sh: remove cosmic [Colin Ian King] * efi_runtime: enable KBUILD_MODPOST_WARN=y to workaround build failures * ACPICA: Update to version 20190816 * fwtstest: syntaxcheck-0001: update to keep in sync with ACPICA features [Naresh Bhat] * README: Add package dependency notes for ARM64 -- Ivan Hu Tue, 27 Aug 2019 12:54:13 +0800 fwts (19.07.00-0ubuntu1) eoan; urgency=medium [Alex Hung] * cpu/msr: skip read-only MCG_CAP MSR * cpu/msr: add document info the cpu_msr_map table * cpu/msr: add 3 more CPU IDs for IA32_silvermont_MSRs * cpu/msr: remove EBL_CR_POWERON (2ah) from IA32_MSRs * cpu/msr: check SGX & LMCE in IA32_FEATURE_CONTROL (3ah) * cpu/msr: move TSC_ADJUST (3bh) to IA32_MSRs * cpu/msr: add SMM_MONITOR_CTL (9bh) to IA32_MSRs * cpu/msr: update MTRRCAP MSR register * cpu/msr: update PAT MSR PA0[2:0] * cpu/msr: add MC*_CTL2 MSR registers * cpu/msr: update fields for MTRR_DEF_TYPE MSR * cpu/msr: add VMX_VMFUNC MSR register * cpu/msr: remove same MSR registers in IA32_MSRs * cpu/msr: add MISC_ENABLE MSR to IA32_atom_MSRs * cpu/msr: remove MSR for Error-Reporting Register Banks * cpu/msr: add MSR_PMG_IO_CAPTURE_BASE to IA32_silvermont_MSRs * cpu/msr: add MSR_FEATURE_CONFIG to IA32_silvermont_MSRs * cpu/msr: add MSR_TEMPERATURE_TARGET to IA32_silvermont_MSRs * cpu/msr: add MSR_BBL_CR_CTL3 to IA32_silvermont_MSRs * cpu/msr: update THERM_INTERRUPT MSR masks * cpu/msr: update MISC_ENABLE to IA32_silvermont_MSRs [Colin Ian King] * Move libfwtsacpica and libfwtsiasl into their own directories * Makefiles: hard code paths to workaround autotool bug * ACPICA: Update to version 20190703 * fwts-test: arg-help-0001: reset tty width to original setting * lib: fwts_framework: fix memory leak on fw->fdt * fwts: opal: fix memory leak of 'buf'. * acpi: method: skip over bad method_handle and failed message type * acpi: method: add null pointer sanity checks on resource * acpi: method: add more null pointer sanity checks on resource * acpi: s3/s4: initialize error to zero * lib: fwts_pipeio: zero pollfds to squish a static analysis warning [Erico Nunes] * dsddump: fix segfault on type ACPI_TYPE_LOCAL_REFERENCE -- Alex Hung Thu, 25 Jul 2019 10:48:59 -0600 fwts (19.06.00-0ubuntu1) eoan; urgency=medium [Alex Hung] * acpi/fadt: update latest FADT revision to 6.3 * apic: apicedge: remove irq < 16 is edge only * mtrr: set severity to critical for incorrect attributes [Colin Ian King] * acpi: s3: fix two memory leaks on fwts_get() calls and minor clean-ups * fwts_summary: check for list creation failure * fwts_modprobe: fix potential null pointer dereference * cpu: cpufreq: avoid division by zero by initializing cpu_top_perf to 1 * fwts_args: check for null text pointer * fwts_log_plaintext: check for null pointer * acpi: s3: check for null pointer * lib: fwts_cpu: only assign a string if it has not yet been assigned * acpi: syntaxcheck: nullify pointers to clean up static analysis warnings * lib: fwts_log_scan: ensure accumulated error count is initialized * lib: fwts_acpi_tables: remove redundant initialization of ret * acpi: tcpa: remove redundant initialization of boolean passed * acpi: dscdump: reduce scope of loop counter i * acpi: method: reduce scope of boolean flag matching_levels * lib: fwts_formatting: use simpler style for assigments * uefi: uefirttime: make status static, cleans up cppcheck warnings [Erico Nunes] * dsddump: fix Package loop condition [Ivan Hu] * uefitime: add checking the EFI_UNSUPPORTED return code * uefirtvariable: add checking the EFI_UNSUPPORTED return code * uefirtmisc: add checking the EFI_UNSUPPORTED return code -- Alex Hung Wed, 12 Jun 2019 10:24:53 -0700 fwts (19.05.00-0ubuntu1) eoan; urgency=medium [Alex Hung] * auto-packager: mkpackage.sh: remove trusty * dmicheck: update supported SMBIOS version * acpi/method: check full and battery power if acpi_video0 exists * dmicheck: checks type length vs. SMBIOS versions * dmicheck: add Type 1's Field 25 & 26 as used by kernel * apic: apicedge: fix typo in error messages * cpufreq: change from abort to skip when cpufreq cannot run * kernel:version: change ACPI version to ACPICA version * pci:crs: fix an indentation error * acpi: s3: check sleep type for output messages [Colin Ian King] * snapcraft: update to core18 * ACPICA: Update to version 20190329 * Add libbsd to travis build file * ACPICA: Update to version 20190405 * acpica: re-work fwts / iasl interface to work with latest ACPICA * fwts-test: refresh syntaxcheck test output * ACPICA: Update to version 20190509 * fwts-test/syntaxcheck: refresh syntaxcheck test output * fwts_acpica: don't add in RSDP or null table entries to XSDT or RSDT (LP: #1829167) [Ivan Hu] * auto-packager:mkpackage.sh: add eoan [fanjinke] * Add support for Hygon Dhyana CPU -- Ivan Hu Thu, 16 May 2019 16:27:44 +0800 fwts (19.03.00-0ubuntu1) disco; urgency=medium [Alex Hung] * acpi: madt: Add support for ACPI 6.3 * fwts-test: sync up with SMMU model updates * lib: fwts_acpi_tables: add a new function to check reserved values * lib: fwts_acpi_tables: rename fwts_acpi_subtable_length_check * srat: replace structure length checks by fwts_acpi_structure_length_check * acpi: refactor all table length checks to fwts_acpi_table_length_check * README: update installing fwts by "sudo make install" [Ard Biesheuvel] * acpi/fadt: reject 5.0 tables with ARM specific attributes set * acpi/iort: permit SMMU model values of 4 and 5 * acpi/iort: fix error in SMMU node length check [Colin Ian King] * ACPICA: fix IASL building issues with gcc-9 and --as-needed linker option * fwts-test: sync up output to new IASL output defaults -- Ivan Hu Wed, 20 Mar 2019 15:32:10 +0800 fwts (19.02.00-0ubuntu1) disco; urgency=medium [Alex Hung] * acpi: fix a typo in comment * klog.json: add an "IOAPIC .. not in IVRS" message * utilities: kernelscan: add AMD iommu for IVRS errors * acpi/method: check levels on full power and battery power * acpi: add address space types according to mantis 1965 (ACPI 6.2b) * acpi/pptt: check flags by revision (mantis 1870 for ACPI 6.2b) * acpi: pdtt: update flags defintion according to mantis 1867 (ACPI 6.3) * fwts-test: update regression test for PDTT * acpi/nfit: update memory mapping attributes (mantis 1873 for ACPI 6.3) * acpi/hmat: update for hmat revision 2 (mantis 1914 for ACPI 6.3) * fwts-test: update test for HMAT revision 2 * acpi/madt: remove two reserved bytes (mantis 1934 for ACPI 6.3) * acpi/madt: update for Local APIC Flags (mantis 1948 for ACPI 6.3) * acpi/hmat: update System Locality Latency (mantis 1959 for ACPI 6.3) * fwts-test: update test for HMAT changes * acpi/method: add tests for NVDIMM control methods for ACPI 6.3 * fwts-test: update method test for NVDIMM methods * acpiinfo: update ACPI and ACPICA versions * acpi/srat: add test for Generic Initiator (mantis 1904 for ACPI 6.3) [Colin Ian King] * efi_runtime: fix access_ok build issues on 5.0 kernels * fwts: fix up a handful of spelling mistakes * ACPICA: Update to version 20190215 * fwts-test: update test output to be in sync with ACPICA 20190215 * Makefiles: workaround address-of-packed-member warnings with gcc-9 * acpica: utdecode: fix missing comma in array declaration AcpiGbl_GenericNotify -- Alex Hung Tue, 19 Feb 2019 10:32:21 +0100 fwts (19.01.00-0ubuntu1) disco; urgency=medium [Alex Hung] * mtrr: check memory type above 4GB on AMD platforms * dmi: dmicheck: remove redundant new lines * dsddump: add utility to dump _DSDD (Device Specific Data) * lib: fwts_ac_adapter: fix readdir(ac_power_dir) failing * lib: fwts_ac_adapter: fix failing to find AC directory [Colin Ian King] * Update copyright year to 2019 * ACPICA: Update to version 20190108 * mtrr: fix incorrect mask on amd_sys_conf * sbbr: fadt: clean up major/minor version checking * acpi/madt: clean up indentation issue, remove tab [Ivan Hu] * lib: fw_pm_method: move the sleep t_start time out of logind_on_signal (LP: #1809096) -- Alex Hung Tue, 15 Jan 2019 19:57:23 -0800 fwts (18.12.00-0ubuntu1) disco; urgency=medium [Alex Hung] * mtrr: allow uncached type for PCI prefetchable memory [Colin Ian King] * ACPICA: Update to version 20181213 * fwts-test: disassemble-0001: sync output with updated ACPICA [Leif Lindholm] * lib: disable /dev/mem access on aarch64 * dmicheck: drop unaligned memcpy * lib: drop fwts_memcpy_unaligned * dmicheck: use dmi_load_file in preference to fwts_mmap -- Ivan Hu Wed, 19 Dec 2018 16:20:41 +0800 fwts (18.11.00-0ubuntu1) disco; urgency=medium [Alex Hung] * acpi: button: check fixed hardware & control method power buttons [Colin Ian King] * kernelscan: add -k option to specify klog json filename * ACPICA: Update to version 20181003 * fwts-test: sync with ACPICA update to 20181003 * README: update package dependency notes for RHEL * acpica: fix linker issues when building with ACPI disabled * ACPICA: Update to version 20181031 * src/lib: add module probing helper functions * lib: fwts_efi_module: use the new module loading helper functions * lib/fwts_cpu: use new use the new module loading helper functions * snapcraft: update confinement and plugs * lib: fwts_coreboot_cbmem: don't use void * pointer arithmetic * lib: fwts_coreboot_cbmem: shift UL values rather than signed int values * lib: fwts_log: shift UL values rather than signed int values * acpi: syntaxcheck: rename syntaxcheck_table to syntaxcheck_single_table [Deb McLemore] * olog:olog.json: Update OPAL skiboot errors to check on olog scan [Ivan Hu] * dmicheck: fix Maximum Capacity checking range * ACPICA: Update to version 20180927 * fwts-test: sync with ACPICA update to 20180927 * mcfg: fix MMIO config space checking * madt: fix the Local APIC NMI processor UID checking * auto-packager: mkpackage.sh: add disco -- Ivan Hu Wed, 14 Nov 2018 14:53:29 +0800 fwts (18.09.00-0ubuntu1) cosmic; urgency=medium [Alex Hung] * dmicheck: fix incorrect boundary checks for various types * dmicheck: checks (Extended) Maximum Capacity for type 16 [Anthony Wong] * snapcraft: add libbsd-dev to build-packages [Colin Ian King] * acpi: acpiinfo: use stdint print format specifiers for uint8_t values * acpi: nfit: minor code cleanup changes * acpi: acpitables: use PRIu32 format specifier for a uint32_t type * acpi: apicinstance: use correct format specifiers * acpi: checksum: print size_t values using %zd specifier * acpi: cstates: add whitespacing, use %d for int format specifiers * acpi: fadt: use inttype.h print format size specifiers * acpi/dmar: use PRIu8 specifier for uint8_t type * acpi/madt: use inttype.h print format size specifiers * acpi/method: use inttype.h print format size specifiers * sbbr/fadt: use inttype.h print format size specifiers * fwts-test: apicinstance: fix up incorrect hex values [Ge Song] * DMI: Fix the way to load SMBIOS 3.x tables via sysfs [Ivan Hu] * efi_runtime: re-enable the resetsystem runtime interface -- Alex Hung Wed, 12 Sep 2018 11:08:41 -0700 fwts (18.08.00-0ubuntu1) cosmic; urgency=medium [Alex Hung] * lib: dmicheck: replace defines by enum type * acpitables: remove redundant "OEM" from Creator ID field * acpitables: remove unnecessary new line character * src: remove unnecessary new line characters and trailing spaces * fwts-test: sync up with new line char and trailing space changes * acpi: wakealarm: remove failure messages for non-x86 arch * acpiinfo: update acpi version supported by kernel * ac_adapter: skip tests when no power supply exists * README: add a new required package since commit 3f151922fc13 [Colin Ian King] * lib: fwts: Add abstracted pragma macros to push/pop state and disable warnings * fwts_uefi.h: replace _Pragmas with abstracted pragma macros * Wrap ACPI_ROOT_OBJECT with PRAGMA_NULL_PTR_MATH for clang builds * lib/src/fwts_acpi_tables: disable clang warning * lib: fwts_coreboot_cbmem.c: initialize all fields in array of structs * uefi: uefirtauthvar: don't logically or a constant operand. * dmi: dmicheck: remove redundant array fwts_dmi_chassis_type * ACPICA: Update to version 20180810 * Add MIN, MAX and ARRAY_SIZE macros to fwts.h * fwts_coreboot_cbmem: fwts coding style changes, use off_t for addresses * lib: fwts_cpu: make found a boolean * lib: fwts_cpu: minor fwts coding style changes * lib: fwts_deviceytree: make a function argument const and a style change * lib: fwts_firmware: remove some empty lines * lib: fwts_iasl: remove a whitespace * lib: fwts_interactive: add sanity check on fileno, fix typo, tidy code * lib: fwts_ipmi: make fwts_ipmi_msg_id static, make some code style changes * lib: fwts_keymap: some minor fwts coding style changes * lib: fwts_list: some minor fwts coding style changes * lib: fwts_multiproc: remove whitespace * lib: fwts_olog: minor code style change on FILE pointers * lib: fwts_release: make some helper functions static * lib: fwts_scan_efi_systab: add empty line to match fwts coding style * fwts_coreboot_cbmem: fix off-by-one error on last char of buffer * lib: fwts_coreboot_cbmem: fix cbmem_console_addr check * lib: fwts_clog.c: replace space identations with tab * lib/src/fwts_acpi_tables: remove shadowed pointer ptr * lib: fwts_framework: ensure src pointer is const * fwts_framework: no need to pass tests_to_skip as it is locally scoped * lib: fwts_framework: argument 'arg' should not be const * lib: fwts_log: remove const arg in fwts_log_set_field_filter * lib: fwts_summary: remove redundant redefinition of fwts_summary_deinit * lib: fwts_safe_mem: add in missing constifications * lib: fwts_log_scan: rename function argument to avoid name shadowing * lib: fwts_stringextras: fix some missing constifictions * lib: fwts_text_list: fix up some const casting issues * lib: fwts_json.h: fix casting warning, add missing const * lib: fwts_coreboot_cbmen: fix missing const in cast * sbbr: acpitables: make function sbbr_search_acpi_tables static * acpi: crsdump: add in missing pointer constifications * acpi: ecdt: fix some missing pointer constifications * acpi: fadt: add in missing const to fix build warnings * sbbr: fadt: add in missing const to fix build warnings * acpi: method: make function method_test_CRS_return static * acpi: nfit: rename table to nfit_table to avoid name shadowing * acpi: wmi: add in missing const to fix build warnings * acpi: stao: add in missing const to fix build warnings * bios: mtrr make function multi_types_check static * opal: reserv_mem: add in missing const to fix build warnings * hotkey: rename list 'hotkeys' to avoid name shadowing * uefi: uefirtauthvar: rename argument attibutes to var_attributes * uefi: uefirtvariable: rename argument attibutes to var_attributes * coreboot: clog: rename list 'clog' to avoid name shadowing * lib: fwts_acpi_tables: unconstify data and don't strcpy ACPI table ids * Fix some strncpy/strcat gcc 8.2 warnings by using libbsd strlcpy/strlcat * snapcraft: add missing stage packages * snapcraft: remove libjson-c3 stage package, it is not required [Ivan Hu] * uefi: clean and check status with magic value ~0ULL (LP: #1784365) * uefi: uefivarinfo: add to UNSAFE category * acpi: gtdt: add checking the valid base physical address -- Alex Hung Wed, 22 Aug 2018 00:33:21 -0700 fwts (18.07.00-0ubuntu1) cosmic; urgency=medium [Alex Hung] * dmicheck: update Processor Upgrade field in Type 4 * dmicheck: update connection and port types in Type 8 * dmicheck: update Usage and Characteristics 2 fields in Type 9 * dmicheck: update memory type and add nvdimm fields for Type 17 * fwts-tests: sync up with the new --clog option * klog.json: lower severity of temperature threshold * auto-packager: mkpackage.sh: remove artful * doc: adding --clog options to man page * fwts-test: sync up with klog cpu threshold changes * fwts-test: sync up nfit fix for NFITBadLineOffsetAlignment * lib: fix array size too small to fit the output * lib: silence gcc 8 complains * lib: fix gcc 8 warning messages [Colin Ian King] * Add travis yaml file to automate builds on github * ACPICA: Update to version 20180629 * test: syntaxcheck: sync output with latest ACPICA output [Jeffrey Hugo] * acpi: pptt: Fix PPTTBadSubtableLength error message [Marcello Sylvester Bauer] * fwts_log_scan: add lib/src/fwts_log_scan.c * fwts_log_scan: move fwts_klog_free * fwts_log_scan: move fwts_log_find_changes * fwts_log_scan: move fwts_log_remove_timestamp * fwts_log_scan: move fwts_log_scan * fwts_log_scan: move fwts_log_unique_label * fwts_log_scan: move fwts_log_scan_patterns * fwts_log_scan: move fwts_log_compare_mode_str_to_val * fwts_log_scan: move fwts_json_str * fwts_log_scan: move fwts_log_check * fwts_log_scan: move fwts_log_regex_find * fwts_clog: add fwts_clog_free * fwts_clog: add fwts_clog_read * fwts_clog: add fwts_clog_scan * fwts_clog: add fwts_clog_scan_patterns * fwts_clog: add fwts_clog_firmware_check * coreboot/clog/clog.c: add clog test * fwts_Framework: add clog argument * fwts_clog.c: add fwts_clog_available * clog.json: add coreboot messages to clog database * fwts_coreboot.c: add cbmem console parser [Robert Elliott] * cpufreq: exit if parsing the cpufreq directory fails * cpufreq: fix fwts_set paths * nfit: improve length handling for ACPI NFIT structures * nfit: remove broken NFITBadLineOffsetAlignment check * README: add the fwts-devel mailing list address and web page * nfit: scan SMBIOS Management Information structure -- Ivan Hu Mon, 30 Jul 2018 16:53:48 +0800 fwts (18.06.02-0ubuntu1) cosmic; urgency=medium [Colin Ian King] * Revert "efi_runtime: build dkms for kernel that does not have efi_test" (LP: #1777855) -- Ivan Hu Thu, 21 Jun 2018 16:53:26 +0800 fwts (18.06.01-0ubuntu1) cosmic; urgency=medium [Colin Ian King] * snapcraft.yaml: fix name of staging package (LP: #1777662) -- Ivan Hu Thu, 21 Jun 2018 11:34:10 +0800 fwts (18.06.00-0ubuntu1) cosmic; urgency=medium [Alex Hung] * acpi: fadt: allow first reserved field to be 1 * efi_runtime: build dkms for kernel that does not have efi_test [Colin Ian King] * update_version.sh: also update version in snapcraft.yaml * snapcraft.yaml: add in missing stage packages * ACPICA: Update to version 20180531 * lib: fwts_set: fix API for fwts_set, add fwts_set_int * lib: add small helpers top get/set /sys/power/pm_debug_messages * acpi: s3: force enable /sys/power/pm_debug_messages (LP: #1772563) * acpi: s4: also check for file based swap files * acpi: s4: force enable /sys/power/pm_debug_messages (LP: #1772563) * acpi: s3power: force enable /sys/power/pm_debug_messages (LP: #1772563) * acpica: fix linking issues when building non ACPI builds [Ivan Hu] * acpi: hpet: fix getting invalid vendor ID and clock period [Mathieu Trudel-Lapierre] * fwts_uefi: Fixing tiny typos in the uefi driver [Stan Hung] * mtrr: fix incorrect type detection -- Ivan Hu Tue, 19 Jun 2018 15:58:07 +0800 fwts (18.05.00-0ubuntu1) cosmic; urgency=medium [Alex Hung] * cpu: msr: do not check SYSENTER_* MSRs * cpu: msr: do not check SYSCALL MSRs * fan: add cooling_device# to error messages * fan: cur_state == -1 is valid for intel_powerclamp * doc: adding acpitests, uefitests and sbbr options to man page * acpi: syntaxcheck: change it from batch to batch-experimental * fwts_framework: add an "ifv" option for Independent Firmware Vendor * dmicheck: skip checks of DMI default values for IFV * fwts-tests: sync up with the new --ifv option * dmi: dmicheck: fix missing spaces in failures of type 9 * acpi: method: fix a copy-n-paste error in _SUB test * acpi: method: add test for _CLS control method * fwts-test: sync up with _CLS control method * lib: create helper functions for device identification objects * acpi: devices: add common objects * fwts-frontend-text: add a recommended option for IFV (IBV) * fwts-frontend-text: add an option for ARM SBBR * auto-packager: mkpackage.sh: add cosmic [Colin Ian King] * acpi: fan: fix potential null pointer dereference issue * ACPICA: Update to version 20180427 * fwts-test: syntaxcheck: sync up with latest ACPICA changes * ACPICA: Update to version 20180508 [Deb McLemore] * README: Add libpci-dev dependency ppc64el * lib: fwts_pipeio: fix regression from memory leak fix * devicetree: dt_base: Make dtc warnings not failures * opal: cpu_info: Designate property optional * opal: mem_info: Designate property optional * opal: prd_info: Add resilience to service check [Ivan Hu] * efi_runtime: fix gcc warning for efi_runtime_reset_system [Rameshwar Prasad Sahu] * facs: Add a check for empty BIOS memory map info list [Shilpasri G Bhat] * opal: power_mgt: Fixes related to pstate parsing * cpufreq: Add support to read boost frequencies * cpufreq: Dont free a NULL pointer -- Alex Hung Tue, 15 May 2018 08:01:13 -0700 fwts (18.03.00-0ubuntu1) bionic; urgency=medium [Alex Hung] * klog.json: change severity for AE_ALREADY_EXISTS errors * fwts-test: sync up with AE_ALREADY_EXISTS errors * dmi: dmicheck: add chassis type for Type 3 [Colin Ian King] * ACPICA: Update to version 20180313 [Deb McLemore] * olog:olog.json: Update OPAL skiboot errors to check on olog scan [Ivan Hu] * uefirtauthvar: remove test with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS -- Alex Hung Wed, 21 Mar 2018 00:08:40 -0700 fwts (18.02.00-0ubuntu1) bionic; urgency=medium [Alex Hung] * acpi: acpiinfo: add acpi 6 to acpiinfo test * acpi: method: check one element in _TSD only for acpi 6.2+ * acpi: spcr: update interface types based on DBG2 * fwts-test: sync up with revision update in 9da9d5a5 * acpi: method: allow _WAK to return an integer [Colin Ian King] * mkpackage.README: change urgency level to medium * lib: fwts_log: remove redundant initialization of ptr1 * acpi: wmi: remove redundant initialization of 'info' * lib: fwts_log: remove redundant initialization of 'field' * lib: fwts_pipeio: remove variable status * lib: fwts_acpi_tables: remove redundant initialization to 'result' * ACPICA: Update to version 20180209 * fwts-test/syntaxcheck-0001: sync up output with current ACPICA [Deb McLemore] * README: Add dependencies per Platform [Ivan Hu] * auto-packager: mkpackage.sh: remove zesty * uefirtvariable: modify both authenticated attributes setting test * uefirtvariable: add test for EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS attribute [Jeffrey Hugo] * acpi: fadt: Fix FACS checking * acpi: iort: Update revision checking -- Ivan Hu Tue, 27 Feb 2018 10:53:06 +0800 fwts (18.01.00-0ubuntu1) bionic; urgency=low [Alex Hung] * acpi: LPIT: check for monotonically increasing UID * fwts-test: sync up with changes in lpit test [Colin Ian King] * Treewide: update copyright year to 2018 * fwts-test: arg-help: sync up with copyright year changes * ACPICA: Update to version 20180105 * acpica: fix linking issues when building non ACPI builds * lib: fwts-battery: use PRIu32 format specifier, fixes cppcheck warning * acpi: acpidump: move declaration to before statements, add blank lines * lib: fwts_safe_mem: don't perform void * pointer arithmetic, fix 32 bit end * lib: fwts_alloc: move 'pos' to a deeper scope, minor style change * opal: reserve_mem: remove redundant initialization of pointer p * opal: reserve_mem: remove unused variable 'i' and move scope of variable 'value' * sbbr: rsdp: remove redundant initialization of boolean 'signature_pass' * acpi: madt: move scope of boolean 'passed' * acpi: pptt: move scope of index variable 'i'. * acpi: rasf: move scope of index variable 'i' * sbbr: acpitables: clean up code, move scope of some variables * acpi: erst: cast size to uint64_t to clean up static analysis warning * uefi: uefidump: clean up some static analysis warnings [Ivan Hu] * securebootcert: add checking read-only for the AuditMode and DeployedMode * securebootcert: move to UNSAFE category -- Ivan Hu Thu, 25 Jan 2018 13:44:38 +0800 fwts (17.12.00-0ubuntu1) bionic; urgency=low [Alex Hung] * acpi: tpm2: update spec url [Colin Ian King] * trival: make read only const strings static * ACPICA: Update to version 20171215 [Jeffrey Hugo] * acpi: bert: remove confusing warning [Ricardo Neri] * acpi: madt: only inspect Local APIC/x2APIC/SAPIC tables if enabled [Sakar Arora] * dmicheck: sbbr: make some SMBIOS structs optional * acpi: dbg2: sbbr: allow PL011 UART as a valid subtype * acpi: spcr: sbbr: IOAPIC is valid interrupt type * acpi: sbbr: relax a few test pass conditions -- Alex Hung Wed, 20 Dec 2017 16:23:05 +0800 fwts (17.11.00-0ubuntu1) bionic; urgency=low [Alex Hung] * lib: move and rename helper functions from method.c * acpi: devices: add a new test for ACPI AC adapter device * acpi: devices: add a new test for ACPI battery device * acpi: devices: add a new test for smart battery device * lib: move _CRS helper functions from method.c * acpi: devices: add a new test for acpi ec device * acpi: devices: print device name in acpi_ac test * acpi: devices: deiniit acpica when tests are skipped * acpi: devices: add new tests for power and sleep button devices * acpi: sync up _BIX test in method to acpi_battery tests * acpi: fadt: ACPI 6.2 explicitly states 64-bit supersedes 32-bit * acpi: madt: check GICD's system vector according to mantis 1819 (ACPI 6.2a) * acp: nfit: add platform capability according to manit 1831 (ACPI 6.2a) * lib: print reference names in fwts_acpi_object_dump * lib: raise severity of acpi method failures * lib: add new large resource data type for _CRS methods * lib: fix offset error for GPIO connection descriptor * acpi: sdev: add ACPI SDEV test (mantis 1632) * fwts-test: Add regression test for SDEV * acpi: dppt: add ACPI PDTT test (mantis 1576) * fwts-test: Add regression test for PDTT * acpi: method: add a missing space in _TSS tests * acpi: devices: add new tests for lid device * acpi: devices: add new tests for ambient light sensor device * acpi: devices: add new tests for time and alarm device * acpi: devices: add new tests for wireless power calibratio device * dmi: dmicheck: fix incorrect use of lock bit in chassis type * src: re-order source list alphabetically * acpi: update checks of _BIX return package * acpi: add tests for _SRT control method * fwts-test: sync up with _SRT control method * auto-packager: mkpackage.sh: add bionic * fwts-test: sync up with rsdt updates [Anthony Wong] * fwts: add bash command-line completion [Chris Goldsworthy] * Remove length test for ACPI 1.0 RSDPs, fix checks against revision field * Add ACPI 1.0 RSDP test to make sure RSDT field isn't null [Colin Ian King] * ACPICA: Update to version 20170929 * fwts-test: sync syntax check with latest ACPICA output * lib: fwts_safe_mem: fix buffer end calculation * lib: fwts_acpi_object_eval: fix build issues with older toolchains * lib: fwts_battery: fix build issues with older toolchains * lib: fwts_args: ensure a null short_option is never passed to getopt_long * uefi: uefidump: add some guarding on allocation size * uefi: uefidump: add some guarding on loop iteration * dmi: dmicheck: zero buffer buf, cleans up a static analysis warning * ACPICA: Update to version 20171110 * doc: manual: add Chris Goldsworthy to the contributors section [Ivan Hu] * uefi: uefidump: add dumping for BluetoothLE device path * uefi: uefidump: add dumping for DNS device path * uefi: uefibootpath: add test for BluetoothLE device path * uefi: uefibootpath: add test for DNS device path * hpet: fix the false alarm of hpet configuration test * uefi: uefirttime: fix the time zone to exact value * uefi: uefirtauthvar: update the test auth data (LP: #1724455) -- Alex Hung Fri, 17 Nov 2017 14:49:11 +0800 fwts (17.09.00-0ubuntu1) artful; urgency=low * [Alex Hung] * lib: fwts_acpi_tables: add a new function to check Reserved field * acpi: replace checks for Reserved by fwts_acpi_reserved_zero_check * fwts-test: sync up with new fwts_acpi_reserved_zero_check * lib: replace spaces by tabs * lib: fwts_acpi_tables: add a new function to check reserved bits * acpi: replace checks for Flags by fwts_acpi_reserved_bits_check * fwts-test: sync up with new fwts_acpi_reserved_bits_check * acpi: replace checks for reserved bits by fwts_acpi_reserved_bits_check * fwts-test: sync up with new fwts_acpi_reserved_bits_check * acpi: spcr: check reserved values for parity and stop fields [Colin Ian King] * debian: copyright: fix spelling mistake: acpcia -> acpica * acpica: fix spelling mistake: acpcia -> acpica * ACPICA: Update to version 20170831 * iASL: Fix incorrect memory allocation * lib: constify a couple of arrays * src/acpi/brightness: constify sys_path and return of brightness_get_path * acpi: method: constify arrays * acpica: constify array fwts_default_space_id_list * cmos: cmosdump: constify several char * arrays * bios: bios_info: constify array bios_info * bios: multiproc: constify array bus_types * dmi: dmicheck: constify array dmi_used_by_kernel_table * uefi: securebootcert: make array securebootcert_info_table const * uefi: uefidump: make array uefidump_info_table const * uefi: uefirtmisc: make arrays flag static const * uefi: uefirttime: constify static array dayofmonth * lib: fwts_firmware: make enums into a defined type * lib: fwts_framework: make several int fields into uint32_t * lib: fwts_framework: re-order and clean up fwts_framework fields * lib: fwts_log: make magic uint64_t to improve corruption checking * fwts_log: make line_number to a uint32_t type * acpica: constify bool parameter val in fwts_acpi_region_handler_called_set * lib: fwts_acpi_table: make indexes which and index uint32_t * lib: fwts-battery: make battery type a typedef'd enum * lib: fwts_battery: clean up battery interfaces * lib: fwts_button: make button counts and button number uint32_t * lib: fwts_checksum: object sizes should be size_t rather than int * lib: fwts_devicetree: constify a few function arguments * lib: fwts_formatting: make width parameter size_t * lib: fwts_wakealarm: make wakealarm times uint32_t * lib: fwts_battery: include inttypes.h for PRIu32 definition * lib: fwts_log_plaintext: include inttypes.h for PRIu32 definition * lib: fwts_log_xml: include inttypes.h for PRIu32 definition * acpi: battery: include stdint.h and inttypes.h * acpi: wakealarm: include stdint.h and inttypes.h [Ivan Hu] * efi_runtime: add resetsystem runtime service * securebootcert: remove the SignatureOwner on signature presence check [Jeffrey Hugo] * dmi: dmicheck: Fix Base Address Modifier checking * dmi: dmicheck: Add BMC Interface Type definitions from IPMI spec [Sakar Arora] * acpi: method: sbbr: set some methods as optional -- Ivan Hu Wed, 27 Sep 2017 15:02:29 +0800 fwts (17.08.00-0ubuntu1) artful; urgency=low [Alex Hung] * auto-packager: mkpackage.sh: remove yakkety * dmicheck: fix dmi_reserved_bits_check function when size is 64 * acpi: pmtt: fix typo from pmmt to pmtt * acpi: sdei: add ACPI SDEI test (mantis 1714) * fwts-test: Add regression test for SDEI * acpi: pcct: refactor subspace to individual functions * acpi: pcct: update PCCT table to ACPI 6.2 (mantis 1659 & 1755) * fwts-test: sync up PCCT tests with ACPI 6.2 changes * acpi: dppt: add ACPI DPPT test (mantis 1795) * acpi: pptt: add ACPI PPTT test * acpi: hmat: add ACPI HMAT test (mantis 1705) * fwts-test: Add regression test for HMAT * acpi: method: add _LSI test according to ACPI 6.2 (mantis 1721) * fwts-test: sync up tests for _LSI method * fwts-test: Add regression test for PPTT * acpi: rasf: add ACPI RASF test * fwts-test: Add regression test for RASF * acpi: sbbr: sync up with new SBBR tests * acpi: remove "Linux-read Firmware Developer Kit" from license header * doc: update contributors and date to the manual [Colin Ian King] * opal: fix build error on Ubuntu 12.04 i386 with gcc 4.6.3 * lib: fwts_safe_mem: remove need to copy into a buffer * acpi: bert: add safe memory read check on mmap'd memory * acpi: hpet: add safe memory read check on mmap'd memory * acpi: mcfg: add safe memory read check on mmap'd PCI config memory * acpi: pcc: add safe memory read check on mmap'd PCC header * bios: pciirq: add safe memory read check on mmap'd pci irq region * bios: pnp: add safe memory read check on mmap'd memory region * dmi: dmicheck: fix incorrect safe memory read check on DMI mmap'd region * uefi: csm: add safe memory read check on mmap'd interrupt and option ROM regions * fwts_safe_mem: workaround longjmp clobber warnings * ACPICA: Update to version 20170728 * lib: fwts_smbios: use fwts_safe_memcpy to read SMBIOS entry * lib: fwts_acpi_tables: re-work fwts_acpi_get_rsdp, less memory copies * lib: fwts_safe_mem: really force reads * lib: fwts_acpi_tables: unmap mem, fixes memory leak * acpi: xsdt: fix build error on 32 bit systems * acpica: fwts_acpica: fix linker issues on Fedora (LP: #1712572) [Jeffrey Hugo] * acpi: madt: Add support for ACPI 6.2 [Mahesh Bireddy] * acpi: fadt: add SBBR compliance tests * acpi: madt: add SBBR compliance tests * acpi: spcr: add SBBR compliance tests * acpi: xsdt: add SBBR compliance tests [Rajat Goyal] * acpi: dbg2: add SBBR compliance tests * acpi: gtdt: add SBBR compliance tests * acpi: acpitables: add SBBR compliance tests [Sakar Arora] * dmi: dmicheck: add SBBR compliance tests * acpi: method: add SBBR compliance tests * acpi: rsdp: add SBBR compliance tests [Vinson Lee] * acpi: method: Fix error message. * README: Update JSON manipulation library name. -- Ivan Hu Wed, 30 Aug 2017 14:23:42 +0800 fwts (17.07.00-0ubuntu1) artful; urgency=low [Alex Hung] * fwts-test: update tpm2 test for new start methods * acpi: bgrt: update according to acpi 6.1 errata (mantis 1577) * fwts-tests: update bgrt test according to ACPI 6.1 errata * acpi: method: update _PSD and _TSD tests according to ACPI 6.1 errata * acpi: rsdp: revision 1 must have length 20 according to ACPI 6.1 errata * acpi: method: Add _CPC revision 3 according to acpi 6.2 (mantis 1611) * acpi: hest: change type from hex to dec as in ACPI spec * acpi: hest: change a function name to meet the patterns of others * acpi: hest: add new type 11 introduced in ACPi 6.2 (mantis 1649) * acpi: srat: add new type 4 according to ACPI 6.2 (mantis 1656) * acpi: method: update _GCP according to ACPI 6.2 (mantis 1703) * acpi: hest: add notification type 11 according to ACPI 6.2 (mantis 1731) * acpi: fadt: update minor version to 2 for ACPI 6.2 (mantis 1769) * acpi: hest: add checks for GHES_ASSIST flag value in ACPI 6.2 (mantis 1674) * acpi: hest: fix typo for type 7 * fwts-test: update according to HEST changes * acpi: wsmt: add wsmt test according to ACPI 6.2 (mantis 1585) * fwts-test: add wsmt test * fwts-test: fix typo from apcitables to acpitables [Colin Ian King] * ACPICA: Update to version 20170629 * fwts-tests: sync up with latest ACPICA 20170629 release * dmi: dmicheck: ensure mmap'd SMBIOS data is readable before accessing it * bios32: ensure mmap'd memory is readable before accessing it * bios: ebdadump: ensure mmap'd memory is readable before accessing it * bios: romdump: ensure mmap'd memory is readable before accessing it * lib: fwts_smbios: ensure mmap'd memory is readable before accessing it [Geliang Tang] * efi_runtime: Use memdup_user helper [Jeffrey Hugo] * acpi: tpm2: Add additional start method values * acpi: iort: Add PMCG support -- Alex Hung Thu, 13 Jul 2017 00:17:02 -0700 fwts (17.06.00-0ubuntu1) artful; urgency=low [Alex Hung] * bios: mtrr: fix compile error in ubuntu trusty [Colin Ian King] * ACPICA: Update to version 20170531 * fwts-test/syntaxcheck-0001: sync with ACPICA 20170531 * fwts-test/disassemble-0001: sync with ACPICA 20170531 * lib: fwts_alloc: only parse mem info once we have a valid line read in * lib: fwts_safe_mem: add SIGBUS handling * lib: fwts_alloc: re-work the memory parsing again * acpi: method use correct format specifier for uint32_t type [Deb McLemore] * olog: olog.json: Update OPAL skiboot errors to check on olog scan [Erico Nunes] * opal: fix tests dependency on libfdt [Ivan Hu] * bios: mtrr: fix overlaped MTRR (LP: #1694710) * bios: mtrr: print out actual default type of MTRR -- Alex Hung Wed, 14 Jun 2017 17:21:46 -0700 fwts (17.05.00-0ubuntu1) artful; urgency=low [Alex Hung] * auto-packager: mkpackage.sh: remove precise * acpi: method: make _PTS & _WAK optional * auto-packager: mkpackage.sh: add artful * dmi: dmicheck: add type 9 to dmi_used_by_kernel_table * dmi: dmicheck: add comments for obsolete types * dmi: dmicheck: fix a typo in a type 15's error message * dmi: dmicheck: check reserved bits in Type 0 * dmi: dmicheck: check new offset in spec 3.11 * dmi: dmicheck: check reserved bits of Type 7 offset 0x5 * dmi: dmicheck: check reserved bits of Type 7 offset 0xd * klog.json: remove unnecessary comma and trailing spaces * dmi: dmicheck: add a function to verify reserved bits * dmi: dmicheck: add a helper function to check word min/max value * klog.json: add an ACPI warning message "SysmtemMemory conflicts * dmi: dmicheck: check pci(e) slot and segment, bus and dev/func * dmi: dmicheck: check reserved bits of offset 0x5 in type 13 * dmi: dmicheck: add a helper function to check a reserved offset * dmi: dmicheck: check reserved bits in type 15 & type 17 * dmi: dmicheck: check reserved fields in type 22, 23, 30, 32, 38 and 39 * dmi: dmicheck: add 64-bit integer to dmi_reserved_bits_check * dmi: dmicheck: add checks for new type 43 * acpi: method: check _WAK & _PTS for supported sleep states only * fwts-test: sync up tests for _PTS & _WAK method * dmicheck: support smbios check for version 3.1.1 * dmi: dmicheck: type 22 offset 9 is an enum from 1 to 8 [Colin Ian King] * lib: fwts_pm_method: clean up formatting and remove extraneous log message * acpi: gpedump: fix spelling mistake * acpica: add some extra run time verification to FACP (FADT) * lib: fwts_acpi_tables: Add extra fix-up for FACS and DSDT table addresses * fwts-test: arg-table-path-0001: sync tests with latest fwts changes * acpi: wmi: add and re-order WMI GUIDs * lib: fwts_pipeio: fix incorrect size of command being passed * lib: fwts_summary: move statement into previous if block * lib: fwts_stringextras: free original string on failed realloc * compiler: fwts_iasl_interface: free original string on failed realloc * uefi: uefidump: free original string on failed realloc * kernelscan: ensure parse_kernel_message returns PARSER_OK * lib: fwts_gpe: free original gpe buffer on failed realloc * lib: fwts_cpu: The string "flags" is 5 chars, fix incorrect strncmp size * dmi: dmicheck: remove redundant check on boolean advice_given * acpi: einj: fix incorrect addition on cast * fwts-test/wmi-0001: sync up WMI test with WMI changes * lib: fwts_log: fix spelling mistake on LOG_UNKOWN_FIELD * lib: fwts_log: add LOG_NO_FIELD and use this to indicate an unfound field * debian/control: Update description, fwts no longer is just for x86 systems * lib: fwts_gpe: fix double free on gpe buffer * opal: prd_info: NULLify output after free * Add snapcraft rules to build a fwts snap * debian/control: update standards version to 3.9.8 * debian/control: remove ${shlibs:Depends} for fwts-frontend and fwts-efi-runtime-dkms * acpi: method: work around some gcc madness (LP: #1687056) * Reduce the sysfs path to 2K to work around a gcc warning * data: klog.json: make missing EINJ table message an INFO message * cpu: cpufreq: make small one-line helper functions inline * Snapcraft: fix typo in path * debian: fwts.install: add missing olog.json file * debian: changelog: fix some debian warnings * New script to generate a Debian orig tarball from source * data: klog.json: Fix spelling mistake "cound" -> "could" * opal: reserve_mem: fix 32 bit build issues * lib: fwts_acpi_tables: remove dead assignment of facs * acpica/fwts_acpica: remove debug message on FADT/FACS * acpica/fwts_acpica: cast to uintptr_t before casting to ACPI_PHYSICAL_ADDRESS * fwts-test: disable some acpi specific x86 tests for non-x86 systems [Ivan Hu] * uefi: securebootcert: warnings for secure boot variables not exist instead of failures * uefi: securebootcert: specify the failure reason for the variable not found [Jeffrey Hugo] * README: Fix missing libfdt-dev dependency in README [ppaidipe@linux.vnet.ibm.com] * fwts/opal: Power management DT Validation tests. * fwts/opal: Reserved memory DT validation tests. -- Ivan Hu Wed, 24 May 2017 11:26:39 +0800 fwts (17.03.00-0ubuntu1) zesty; urgency=low [Alex Hung] * dmicheck: update chassis type limit according to SMBIOS 3.0 * fwts-tests: sync up with the new --sbbr option * README: update url of reference guide * dmicheck: update type 3, 4, 9 limits according to SMBIOS spec 3.11 [Colin Ian King] * lib: fwts_alloc: move all memory tracking to hash records * klog.json: Add some missing ACPI Power Management kernel messages to klog database * opal: reduce scope of variable 'prop_buf' * lib: fwts_alloc: clear hash table at end of garbage collection * lib: fwts_alloc: fix incorrect accounting on hash entry count * ACPICA: Update to version 20170224 * fwts-test: disassemble-0001: sync DSDT output from iasl with recent ACPICA changes * acpi: mpst: remove redundant assignments to passed on errors * acpi: drtm: remove redundant assignments to passed on errors * opal: pci_info: remove redundant assignment to bytes * ACPICA: Update to version 20170303 * lib: fwts_devicetree.h: minor code formatting cleanups * opal: make found_dimm static as it is local to just this source * opal: minor code style changes [Deb McLemore] * opal: mem_info check for dimm presence in property [Jeffrey Hugo] * acpi: acpiinfo: Print minor version where applicable * acpi: iort: Add support for SMMUv3 [Supreeth Venkatesh] * sbbr: Add "--sbbr" flag to support running SBBR Tests. -- Ivan Hu Thu, 16 Mar 2017 11:20:20 +0800 fwts (17.02.00-0ubuntu1) zesty; urgency=low [Alex Hung] * dmicheck: fix mistakes in error messages for SMBIOS type 9 [Colin Ian King] * ACPICA: Update to version 20170119 * README: update git URL to http://kernel.ubuntu.com/git/hwe/fwts.git/ * lib: fwts_args: fix arg parameter sanity range checking * fwts-test: update arg-help-0001 to sync with help info changes * fwts_framework: handle -? option differently from -h * uefi/uefirtvariable: fix options check error messages * acpi: s3: Add new --s3-resume-hook option * clean up missing whitespaces * acpi: acpitables: fix indentation, no functional change * devicetree: dt_sysinfo: reduce scope of version_buf * lib: fwts_acpid: remove re-assignment of ptr to NULL * lib: fwts_cpu: force compiler to increment i rather than optimize it out * opal: mem_info: remove redundant initialization of prop_string to NULL * opal: mem_info: reduce scope of some variables * opal: cpu_info: remove redundant initialization of prop_string to NULL * opal: cpu_info: reduce scope of some variables * opal: pci_info: reduce scope of some variables * doc: remove trailing white spaces * opal/mtd_info.c: make a couple of functions static to reduce global scope * uefi: uefirtmisc: make gEfiCapsuleHeaderGuid static * opal: prd_info: make a couple of functions static to reduce global scope * ipmi: bmc: make fwts_bmc_info_check static * acpi: msdm: make variable table static * acpi: slit: make variable table static * acpi: fpdt: make variable table static * acpi: slic: make variable table static * misc: fix various spelling mistakes * data: fix some spelling mistakes in klog and olog databases * fwts-tests: fix up spelling mistakes in regression tests * lib: fwts_olog: ensure buffer is null terminated * lib: fwts_pipeio: fix memory leak on zero sized text allocation * fwts-alloc: track memory allocations, cleans up 6 coverity scan warnings * fwts-alloc: garbage collect hash records * klog.json: Add some more kernel messages to klog data base * klog.json: Add some EFI driver kernel messages to klog database * klog.json: Add some EFI quirk driver kernel messages to klog database * klog.json: Add some more EFI driver kernel messages to klog database * klog.json: Add some miscellaneous messages to klog database * klog.json: fix a couple of klog patterns [Deb McLemore] * Add README_JSON.txt for FWTS * Integrate PPC for FWTS-LIVE Frontend [Prarit Bhargava] * fedora: Fix location of klog.json file in fwts.spec * fedora: Add fedora internal versioning number in fwts.spec * fedora: Add fwts.spec.in * fedora: Update buildsrpm.sh for dynamic versioning -- Alex Hung Thu, 16 Feb 2017 09:58:33 +0800 fwts (17.01.00-0ubuntu1) zesty; urgency=low [Colin Ian King] * ACPICA: Update to version 20161222 * opal: pci_info: minor code style clean-ups, no functional changes * update copyright year to 2017 * fwts-test/arg-help-0001: update log files to match copyright year changes * klog.json: Add kernel errors to the database [Prarit Bhargava] * fedora/fwts.spec: Add initial version of fwts.spec * fedora/buildrpm.sh: Add build script for RPMs * .gitignore: update with fedora/rpm and git generated patches * .gitignore: Add aslcompiler.y -- Alex Hung Thu, 19 Jan 2017 12:19:10 +0800 fwts (16.12.00-0ubuntu1) zesty; urgency=low [Colin Ian King] * ACPICA: Update to version 20161117 * fwts-test: sync up disassemble and syntaxcheck tests with ACPICA * acpica: s390x needs to be built as a 64 bit architecture * klog.json: Add a few more kernel errors to the database * klog.json: Update the klog database with more kernel patterns [Deb McLemore] * opal: pci_info: Add OPAL PCI Info validation * opal: mem_info: Add OPAL MEM Info validation * opal: cpu_info: Add OPAL CPU Info validation * devicetree: dt_sysinfo: Add OPAL firmware version checks * olog: olog.json: Update OPAL skiboot errors to check on olog scan [Fan Wu] * fwts:dmicheck: replace memcpy with fwts_memcpy_unaligned [Ivan Hu] * securebootcert: add variable AuditMode checking * securebootcert: add variable DeployedMode checking -- Ivan Hu Wed, 21 Dec 2016 09:26:40 +0800 fwts (16.11.00-0ubuntu1) zesty; urgency=low [Colin Ian King] * ACPICA: Update to version 20160930 * fwts-test: disassemble-0001: sync output to latest ACPICA changes * acpica: remove aslcompiler.y as it is generated from aslparser.y * debian/control: fwts-efi-runtime-dkms should not depend on kernel headers (LP: #1629826) * Build using dpkg-dev's hardening support. * acpcia: Makefile.am: include exconcat.c into libfwtsiasl build (LP: #1631354) * lib: fwts_ac_adapter: add in some constifications * lib: fwts_args: move #defines to start of source * lib: fwts_firmware: constify feature_names * lib: fwts_framework: constify categories[] and log_levels[] * lib: fwts_log_html: constify fwts_log_html_ascii_table[] * acpi: s3power: remove redundant intialization of fwts_settings * acpi: s4: remove redundant intialization of fwts_settings * acpi: s3: remove redundant intialization of fwts_settings * lib: fwts_pipeio: remove redundant initializations of file to NULL * opal: remove redundant initializations of command to NULL * lib: fwts_framework: initialize msg to literal string * dmi: dmicheck: fix a couple of cppcheck style warnings * Manual: keep contributors list up to date [Deb McLemore] * fwts_devicetree: Add defines for common usage * fwts_devicetree: Add function for common usage * devicetree: dt_sysinfo: Reference compatible whitespace [Erico Nunes] * fwts_acpi_tables: remove fwts_acpi_checksum declaration * acpi: dbg2: fix segfault and refactor dbg2_obj_find * fwts_framework.h: fix redefinition typedef warning * fwts_hwinfo.c: fix strict-aliasing error with old gcc * esrt.c: fix uninitialized use of 'fwversion' warning [Ivan Hu] * efi_runtime: use memdup_user() as a cleanup * efi_runtime: fix the uninintialized value datasize * efi_runtime: fix the uninitialized value rv * uefibootpath: fix the URI length check * uefibootpath: add test for eMMC device path * uefidump: add dumping for the eMMC device path * fwts_acpica: fix segmentation fault by unlock mutex twice (LP: #1635502) * debian/control: clean up uploaders list * auto-packager: mkpackage.sh: add zesty [Jeffrey Hugo] * acpi: hest: Add new error notification types * acpi: madt: Fix processor UID check * acpi: gtdt: Account for added virtual timer flags * lib: acpi: Remove gsiv field of fwts_acpi_table_gtdt_block_timer * acpi: mpst: Show test as skipped if table does not exist * lib: olog: Show test as skipped if nothing to do * acpi: pmtt: Show test as skipped if table does not exist * acpi: tcpa: Show test as skipped if table does not exist * acpi: tpm2: Show test as skipped if table does not exist * acpi: xenv: Show test as skipped if table does not exist -- Ivan Hu Thu, 10 Nov 2016 16:32:37 +0800 fwts (16.09.00-0ubuntu1) yakkety; urgency=low [Alex Hung] * lib: acpi: add supports for WPBT * acpi: wpbt: add ACPI WPBT test * fwts-test: Add regression test for WPBT * lib: acpi: add supports for DRTM * acpi: drtm: add ACPI DRTM test * fwts-test: Add regression test for DRTM * acpi: remove "Linux-ready Firmware Developer Kit" from license header * lib: fwts_guid: add a compare function * acpi: nfit: skip SPA Range Structure Index for four GUIDs * acpi: nfit: check fields equals 0 for Virtual CD and Disk * cpu: msr: change SMRR_PHYSBASE from 8MB boundary to 4KB boundary [Colin Ian King] * acpica: remove utprint.c, it is not required * ACPICA: Remove utfileio.c, it is deprecated and not used * ACPICA: Update to version 20160831 * opal: ensure fdt_node_path buffer is null terminated * fwts: treewide: voidify return from close(), closedir() and fclose() * lib: fwts_ipmi: fix incorrect memset size [Deb McLemore] * opal: mtd: Add OPAL MTD Validation * acpi: ACPI Platform check updates * opal: mtd: Add error exit when no MTD's * opal: prd: Improve message when no PRD detected * devicetree: dt_sysinfo: Improve message for non-reference model [Ivan Hu] * efi_runtime: change __usc2_strsize name to distinguish from ucs2_strsize * efi_runtime: redefine all uint*_t types by following the header efi.h * efi_runtime: exchange the user and local name define * efi_runtime: refactor the success and error path * efi_runtime: add label to reduce the number of kfree * efi_runtime: expand to a full if-conditional instead of using terneary operator * efi_runtime: add VariableNameSize return when getting the EFI_BUFFER_TOO_SMALL * efi_runtime: fix memory leak of getvariable funtion * efi_runtime: move the checking status forward * efi_runtime: clean up some return and alignment code * uefirttime: specify enable to true for setwakeuptime wiht null time test [Jeffrey Hugo] * acpi: fadt: Remove HEADLESS check on reduced hardware * pci: aspm: Add segment support -- Alex Hung Fri, 09 Sep 2016 09:47:45 +0800 fwts (16.08.01-0ubuntu1) yakkety; urgency=low [Colin Ian King] * acpica: rename vsnprintf and sprintf in utprint.c to avoid name clash conflicts -- Alex Hung Thu, 18 Aug 2016 17:46:32 +0800 fwts (16.08.00-0ubuntu1) yakkety; urgency=low [Alex Hung] * fwts: update .gitignore for files genereated by "make check" * acpi: nfit: add ACPI NFIT test * fwts-test: Add regression test for NFIT * acpi: pcct: fix incorrect printing length for PRIx64 * lib: acpi: add support for MPST * acpi: mpst: add ACPI MPST test * fwts-test: Add regression test for MPST * lib: acpi: add support for PMTT * acpi: pmtt: add ACPI PMTT test * fwts-test: Add regression test for PMTT * acpi: nfit: change %x to marco PRIx32 for portability * auto-packager: mkpackage.sh: remove wily [Colin Ian King] * acpi: madt: fix memory leak on return paths * ACPICA: Update to version 20160729 * acpi: pmtt: fix incorrect assignment on passed * acpi: dmar: fix portability warning from cppcheck on void * cast * acpi: dbg2: remove alloca(), replace with variable length array * acpi: madt: reduce scope of variable 'listint' * acpica: fwts_iasl_interface: reduce scope of variable 'i' * lib: fwts_smbios: reduce scope of variable 'mapped_entry' * lib: fwts_klog: reduce scope of variable 'old' * lib: fwts_iasl: reduce scope of variable 'ret' * lib: fwts_cpu: fix missing { } on an if statement * devicetree: dt_sysinfo: reduce scope of variables 'model_buf' and 'compat_buf' * cpu: cpufreq: reduce scope of variable 'i' * lib: fwts_smbios: fix portability warning from cppcheck on void * cast * lib: fwts_alloc: fix portability warnings from cppcheck on void * arithmetic [Ivan Hu] * efi_runtime: call kfree directly instead of inline wrapper * efi_runtime: add datasize return when getting the EFI_BUFFER_TOO_SMALL * efi_runtime: fix memory leak of capsulecaps function * efi_runtime: clean up some comments and unused code * efi_runtime: add chceking the len for reading userspace memory * efi_runtime: add checking variable_name input [Prarit Bhargava] * acpi/nfit: Fix endless loop on broken NFIT tables [Ricardo Neri] * acpi: bert: do not fail if BERT error region raw_data_length is zero -- Alex Hung Thu, 18 Aug 2016 12:14:11 +0800 fwts (16.07.00-0ubuntu1) yakkety; urgency=low [Alex Hung] * acpi: method: add _FIT test * fwts-test: sync up tests for _FIT method * bios: mtrr: check MTRR default memory type * acpi: pcct: add ACPI PCCT test * fwts-test: Add regression test for PCCT * lib: acpi: fix a typo in fwts_acpi.h [Colin Ian King] * utilities: kernelscan: Add in missing [ ] brackets tokenisation * klog: data.json: Add klog checking for kernel NUMA errors from drivers/acpi/numa.c * fwts-test: remove arg-show-tests and arg-show-tests-full * klog: data.json: Add klog checking for kernel EC errors from drivers/acpi/ec.c * klog: data.json: Add klog checking for errors from drivers/acpi/acpi_cmos_rtc.c * klog: data.json: Add klog checking for errors from drivers/acpi/nfit.c * klog: data.json: Add klog checking for errors from drivers/acpi/pci_root.c * klog: data.json: Add klog checking for errors from drivers/acpi/pci_mcfg.c * fwts-test: update fwts klog regression tests due to klog json changes * klog: data.json: Add klog checking for errors from drivers/acpi/cppc_acpi.c * klog: data.json: Add klog checking for errors from drivers/acpi/battery.c * klog: data.json: Add klog checking for errors from drivers/acpi/processor_idle.c * efi: enable module loading to load legacy or new efi driver * klog: data.json: Add klog checking for errors from drivers/acpi/sleep.c * klog: data.json: Add klog checking for errors from drivers/acpi/acpica/rsmisc.c * klog: data.json: Add klog checking for errors from drivers/acpi/evged.c * acpi: rsdp: don't fail if RSDT and XSDT are both defined and different * fwts-test: rsdp-0001: sync test with latest rsdp test changes * lib: fwts_alloc: make allocator more robust * lib: fwts_pipeio: don't report failure on freopen failure * Add klog checking for errors from drivers/acpi/tables.c * doc: update contributors and date to the manual [Deb McLemore] * opal/prd_info: Add OPAL Processor Recovery Diagnostics * olog: olog.json: Add OPAL skiboot errors for olog scan * lib: olog: Improve message when sudo usage may help * opal/prd_info: Improve message when libfdt not installed * lib: framework: Improve message for results log file handling [Ivan Hu] * uefi: add the header for using efi runtime service * efi_runtime: reuse the in-kernel guid structure * efi_runtime: reuse the in-kernel time structure * efi_runtime: reuse the in-kernel capsule header structure * uefi: update reset type to uefi 2.6 * uefi: remove the enum of reset type * efi_runtime: naming convention modification * efi_runtime: fix the style problems * debian/control: Fix incomplete dependencies for Linux headers (LP: #1606480) * fwts-test: sync up with the klog test * acpi: madt: fix build fail for i386 [Jeffrey Hugo] * acpi: madt: Use 20 as the GIC ITS node length * acpi: madt: Add support for ACPI 6.0a * acpi: madt: Add support for ACPI 6.1 * acpi: dbg2: Add missing debug port types [Jeremy Kerr] * devicetree/dt_sysinfo: clean up logic in stringlist_contains_last * devicetree/dt_sysinfo: fix reference platform compatible vs. model check * devicetree/dt_sysinfo: Add firestone model [Prarit Bhargava] * fwts: Fix madt testing with broken MADT entries * fwts: Update .gitignore files * fwts/madt: Add address of subtable to messages * fwts/madt: Implement I/O APIC and I/O SAPIC value comparison test * fwts/madt: Remove TODO for x2apic > 255 check * fwts/madt: Add processor UID checking to madt tests [Ricardo Neri] * fwts_cpuinfo_x86: check for null pointers when using * lib: fwts_cpu: return info struct only when requested CPU is found * lib: fwts_cpu: query info from the first online CPU -- Ivan Hu Wed, 27 Jul 2016 15:35:54 +0800 fwts (16.06.00-0ubuntu1) yakkety; urgency=low [Alex Hung] * acpi: method: acpi 6.0 adds USB-C Connection to _UPC * acpi: method: add _WPP method test (introduced in ACPI 6.1) * acpi: method: add _WPC method test (introduced in ACPI 6.1) * fwts-test: sync up tests for _WPC and _WPP methods * lib: replace hardcoded size=1 in calloc by sizeof(char) * dmi: dmicheck: remove chassis check with acpi pm_profile * acpi: method: update _GCP test according to ACPI 6.1 * acpi: einj: erst: update serialization action for ACPI 6.1 [Colin Ian King] * dmi: dmicheck: fix typo: SBMBIOS should be SMBIOS * Rename fwts_log_*_verbatum to fwts_log_*_verbatim * ACPICA: Update to version 20160527 * lib: fwts_ipmi: don't close a -ve fd on error exit return path * lib: fwts_ipmi: remove redundant for loop * lib: fwts_devicetree: fix memory leak on data * devicetree: dt_base: fix resource leak on error exit paths * lib: fwts_arch: set len to 1 to ensure space for '\0' * lib: fwts_args: clean up some scan-build warnings * devicetree/dt_sysinfo: report FWTS_ERROR on non-null termimated property * src/utilities/kernelscan: fix parsing of escaped C strings * lib: fwts_olog.h: fix include guard [Deb McLemore] * devicetree/dt_sysinfo: Add OPAL reference compatible checks [Ivan Hu] * efi_runtime: changing naming convention without p for pointer * lib: fwts_uefi: update uefi status codes to UEFI 2.6 * uefirtvariable: modify getnextvariablename test for VariableNameSize smaller than 2 (LP: #1593597) [Jeffrey Hugo] * lib: acpi: Add support for HEST GHESv2 * acpi: hest: Add GHESv2 checking (LP: #1587624) -- Ivan Hu Wed, 22 Jun 2016 15:43:04 +0800 fwts (16.05.01-0ubuntu1) yakkety; urgency=low [Alex Hung] * acpi:method: remove ACPI section from the top comments * acpi: dbg2: fix incorrect address size check with GAS struct * cpufreq: skip frequency performance test if cpufreq_settable is false * cpufreq: skip frequency claimed maximum test with intel_pstate * acpi: add MSCT table sanity check * acpi: add EINJ table sanity check * fwts-test: sync up with MSCT and EINJ table tests * fwts-test: add dt_base to show-tests* regression tests * auto-packager: mkpackage.sh: add yakkety and remove vivid * debian/control: add back libjson0-dev for precise [Anthony Wong] * Add .gitignore [Colin Ian King] * ACPICA: Update to version 20160318 (LP: #1559312) * fwts-test: sync tests with latest ACPICA output changes * data: klog.json: Fix typo in docking label text * acpi: gtdt: fix buffer overrun comparison * acpi: gtdt: fix buffer overrun comparison (for SBSA) * acpi: bert: fix format specifiers for boot error region * lib: fwts_olog: minor fwts coding style reformatting * lib: fwts_olog: fix fclose on already closed files. * lib: fwts_olog: fix memory leak on buffer on error exit path * lib: fwts_olog: ensure buffer is '\0' terminated per read, minor cleanups * lib: fwts_olog: avoid TOCTOU race on stat and fopen * fwts-test: update tests for new olog test from IBM * doc: fwts.1: Update contributors list and man page date * Add cppcheck static analysis checking script * uefi: uefirtauthvar: capitalize macro getvar_buf_size * Revert "acpi: tpm2: add check for zero control area address (LP: #1506442)" * ACPICA: Update to version 20160422 * fwts-test: update disassemble and syntaxcheck tests to sync with latest ACPICA * cpufreq: make stat failure message a little more human friendly * acpi: einj, msct: only build in these tests on ACPI enabled systems * fwts-test: add dt_sysinfo to show-tests* regression tests * hpet: warn if HPET Device address not found in DSDT/SSDT * kernelscan: speed up parser using hash lookup, add more print funcs * kernelscan: remove need to pre-process with a CPP phase * kernelscan.sh: remove -E and -P phases to parsing * apic: apicedge: fix parsing of /proc/interrupts (LP: #1575783) * lib: fwts_pipeio: set *list to NULL on fwts_pipe_read error * acpi: spcr: add missing debug port types (LP: #1578433) * debian/control: add libfdt-dev and device-tree-compiler * Revert "debian/control: add libfdt-dev and device-tree-compiler" * debian/control: add libfdt-dev and device-tree-compiler * configure.ac: update email address, use fwts-devel instead * fwts-test/arg-help-0001: ensure tty is reset on exit path * fwts-test: arg-show-tests-0001: reset tty after forcing column width * cpu: msr: do not check SYSENTER_* MSRs (LP: #1582005) * fwts: manual: update date, add new contributor, add dtc to SEE ALSO * fwts: manual: ommitted Paul Menzel from the contributions list * fwts: lib: clean up static analysis warnings * debian/control: change depends on libjson0-dev to libjson-c-dev [Deb McLemore] * v2 - lib: fwts_args: handle cases to set optarg_handler for long options. * v2 - Introduce olog scan, to check OPAL msglog. * V3 Introduce IPMI BMC Info [Ivan Hu] * uefidump: dump the optional data for load option on boot device * uefidump: dump the optional data for load option on driver device * uefidump: add checking the resonable path list length for load option * uefidump: clean up the unnecessary period [Jeremy Kerr] * devicetree: add infrastructure for device-tree tests * devicetree/dt_sysinfo: Add device tree system information tests * pipeio: fix fwts_pipe_read return value when child produces no output * pipeio: Fix error handling in fwts_pipe_exec * pipeio: Rename fwts_pipe_open to fwts_pipe_open_ro, add fd as output argument * pipeio: Add fwts_pipe_open_rw * pipeio: Add fwts_pipe_readwrite * pipeio: Add fwts_pipe_close2 to cleanup from fwts_open_pipe_rw. * devicetree/dt_base: Add base device-tree validity checks [Paul Menzel] * pci/aspm: Fix grammar in ASPM advice (LP: #1581988) [Ricardo Neri] * bios: mtrr: fix cache type corner case at start of mtrr range * bios: mtrr: fix cache type corner case at end of mtrr range * bios: mtrr: redefine the end point of memory ranges -- Alex Hung Thu, 19 May 2016 14:13:12 +0800 fwts (16.03.00-0ubuntu1) xenial; urgency=low [Alex Hung] * acpi: csrt: fix a spelling mistake in a comment * acpi: csrt: fix resource descriptor can go over boundary [Colin Ian King] * debian/control: Add s390x to Architecture list (LP: #1549737) * lib: fwts_cpu: fix memory leak and incorrect return (LP: #1549723) * Add s390x build support, don't build ACPI specific code for this arch * Add s390x build support: skip tests that are not build in for this arch * Add s390x build support, don't build UEFI specific code for this arch * Debian/control: don't build UEFI kernel module for s390x * acpi: fan: fix indentation, remove extraneous tab * acpi: method: fix a few incorrectly idented lines of code * bios: mpcheck: fix trivial indentation issue * bios: mpdump: fix trivial indentation issue * uefi: uefirtvariable: fix trivial indentation issues * uefi: uefirtauthvar: fix trivial indentation issues * smatchify: add two passes option [Ivan Hu] * uefi: add sanity check for UEFI ESRT table (LP: #1553043) * uefi: esrt: don't build UEFI specific code for s390x * fwts-test: Update tests to sync with esrt test adding * uefi: esrt: fix the resource leak found by Coverity Scan * uefi: esrt: fix build failure due to lack of header file * acpi: method: fix faile check on _EC control method (LP: #1556720) * acpi: method: fix _ON method never be tested. * acpi: method: remove some reduntant and unused tests. * fwts-test: sync up with the fwts method tests changed -- Alex Hung Mon, 14 Mar 2016 17:09:08 +0800 fwts (16.02.00-0ubuntu1) xenial; urgency=low [Al Stone] * Start defining FWTS architectures as variables * Define some utility functions for using the fwts_architecture enum * Add mechanism to tell FWTS what architecture is being tested * ACPI: MADT: add in compliance tests for the MADT and subtables * ACPI: Add in MADT subtable description for GIC ITS subtable * ACPI: MADT: add in compliance checks for the GIC ITS subtable * Documentation: add --acpicompliance to man page * Documentation: add --arch to the man page * RSDP: minor cleanups to rsdp.c for checkpatch issues * utilities: add a helper function for printing out architecture names * ACPI tables: when bodging up an RSDP, do the right thing for the arch * ACPI RSDP: flesh out the tests to check for full spec compliance. * Update regression test rsdp-0001/test-0001.sh * Update the regression test arg-help-0001/test-0001.sh * Update regression test for arg-help-0001/test-0002.sh * Update regression test for arg-show-tests-0001/test-0001.sh * Update regression test arg-show-tests-full-0001/test-0001.sh * Update the regression test arg-table-path-0001/test-0001.sh * Update the regression test madt-0001/test-0001.sh * Update the regression test madt-0001/test-0002.sh * FADT: enable compiling on non-x86 architectures * FADT: non-x86 machines need an FADT but x86 can survive without one * FADT: disable SCI_EN and RESET_REG tests when in reduced hardware mode * FADT: add in code to log basic info about the various FADT flag fields * Add in bit masks for FACS flags. * FADT: move log info out of test2, will provide it elsewhere * ACPI: Add hypervisor ID field to FADT. * FADT: minor cleanup and initial compliance tests * FADT: expand the compliance test for FIRMWARE_CTRL fields * FADT: expand compliance checks for DSDT and X_DSDT fields * FADT: add compliance tests for reserved fields, PM profile, reduced hardware * FADT: restructure test sequence around reduced hardware mode * FADT: expand compliance tests for the SMI_CMD field * FADT: add compliance tests for the ACPI_ENABLE and ACPI_DISABLE fields * FADT: add compliance tests for S4BIOS_REQ and PSTATE_CNT fields * FADT: extend and add PM address block compliance tests * FADT: enhance compliance tests for GPE blocks * FADT: add compliance test for the CST_CNT field * FADT: add in compliance tests for C2/C3 latency fields * FADT: add in SLEEP_CONTROL_REG and SLEEP_STATUS_REG compliance tests * FADT: remove no longer useful variables from test1 * FADT: add safety checks for older versions of FADT * FADT: update regression tests to incorporate new/changed tests [Alex Hung] * acpi: method: add _PMC test * acpi: method: add _PRT test * fwts-test: update for _PMC and _PRT tests * acpi: method: add _RDI test * acpi: method: add _LPI test * fwts-test: update for _RDI and _LPI tests * acpi: method: remove non-method names from the top comments * acpi: erst: fix incorrect error message for reserved field * fwts-test: update erst test for the fix of reserved field [Colin Ian King] * lib: fwts_klog: fix incorrect indentation, detected by gcc-6 * lib: fwts_hwinfo: clean up type punning, fixes warning with gcc-6 * fwts: wakealarm: reset wakealarm timer at end of test (LP: #1534003) * Update arg-show-tests-full now that we have an extra test in wakealarm * dmi: dmicheck: add some simple sanity checks to table size * lib: fwts_args: use safer strncat than strcat * lib: fwts_acpi_tables: don't do expensive low allocs multiple times * acpi: fadt: check 32/64 bit PM register addresses for inconsistency (LP: #1536606) * acpi: madt: fix incorrect format specifier for size_t * cpu: microcode: fix a couple of warnings found by cppcheck: * acpi: madt: clean up some minor style issues detected by cppcheck * data: klog.json: update to sync with 4.6 kernel changes * ACPICA: Update to version 20160212 (LP: #1545099) * lib: fwts_acpi_tables: fix warnings found by clang scan-build * lib: fwts_cpu: check for MSR read failures * lib: fwts_klog: handle the case where klog_old is empty list * acpica: fix disassembly on i386 platforms (LP: #1547469) * lib: fwts_arch: i686 arch name is also an X86 arch (LP: #1547554) * fwts-test: only run rsdp regression test on specific arches (LP: #1547602) * Fix null_gass initializer for older versions of gcc (LP: #1549429) [Ivan Hu] * fwts-test: sync up with the arg-table-path -- Ivan Hu Thu, 25 Feb 2016 15:47:39 +0800 fwts (16.01.00-0ubuntu1) xenial; urgency=low [Alex Hung] * Fix spelling mistakes of "ACPI" * method: update method status * acpi: method: add _PTC test * fwts-test: update for ACPI method _PTC test * fwts-test: arg-help-0001: remove TMPLOG.orig files [Colin Ian King] * utilities: kernelscan: fix memory leaks and a segfault * acpi: cstates: fix clang build warning on zero CPUs. * acpi: s3, s3power, s4: replace cleanup free with explicit frees * data: klog.json: add in some more kernel error messages for 4.4 (LP: #1526746) * ACPICA: Update to version 20151218 (LP: #1527733) * fwts-test: keep test results in-sync with latest ACPICA output * acpi: hpet: fwts_mmap failure is FWTS_MAP_FAILED and not NULL * acpi: pcc: fwts_mmap failure is FWTS_MAP_FAILED and not NULL * bios: ebdadump: fwts_mmap failure is FWTS_MAP_FAILED and not MAP_FAILED * acpi: syntaxcheck: ASL_MSG_COMPILER_RESERVED failure should be an info (LP: #1529717) * Update copyright year to 2016 * fwts-test: sync arg-help with copyright year changes * ACPICA: Update to version 20160108 (LP: #1532268) [Fan Wu] * dmi: dmicheck: fix reserved bits mask for Processor Information [Ivan Hu] * uefidump: add dumping global variabl AuditMode * uefidump: add dumping global variabl DeployedMode * uefidump: add dumping global variable OsRecoveryOrder * uefidump: add dumping global variable PlatformRecovery#### * uefidump: add dumping global variable SysPrepOrder * uefidump: add dumping global variable SysPrep#### * uefirtvariable: fix decalred VLA have zero size (LP: #1526815) * esrtdump: add dumping for esrt table (LP: #1532103) * fwts-test: sync up with esrtdump changes -- Ivan Hu Wed, 13 Jan 2016 16:12:49 +0800 fwts (15.12.00-0ubuntu1) xenial; urgency=low [Alex Hung] * acpi: fpdt: add a terminate for buggy BIOS that reports zero length * live-image/fwts-frontend-text: add a selection for recommended [Colin Ian King] * lib: klog: remove use of pcre, use regex instead * utilities: kernelscan: remove use of pcre, use regex instead * uefidump: add more bounds checking and remove need for heap * utilities: fix memory leak, line not being free'd * acpi: bert: remove redundant variable 'length' * data: klog.json: add in some more kernel error messages for 4.3 * ACPICA: Update to version 20151124 (LP: #1519425) * lib: iasl: rework IASL interface to ACPICA * acpi: acpidump: use IASL rather than fwts custom table dump code * fwts-test: fix up acpidump releated tests * s3 + klog: make log scanning more robust for S3 (LP: #1522292) * ACPI: Add ASPT test * lib: framework: allow mixed tests and test category options * lib: acpica: make region handler more robust (LP: #1524217) * fwts: framework: Add --log-level option * fwts-test: update arg-help tests with new --log-level option * debian: copyright, fix lintian warnings * Debian: update Standards-Version to 3.9.6 * acpi: acpidump: check for fwts_iasl_init failure * lib: fwts_acpi_tables: fix segfault when tables fail to load (LP: #1452201) * acpi: dbg2: remove dead store to ptr1 * hotkey: fix key reading loop, it needs to loop more than once * lib: fwts_framework: remove dead store to len in for loop * lib: fwts_acpi_table: remove redundant store to rsdt * acpi: gpedump: remove redundant store to gpe_xrupt_info * lib: fwts_acpi_tables: remove dead store to facs * acpica: fwts_acpica: remove redundant store to length * lib: fwts_acpi_tables: remove redundant store to xsdt * lib: fwts_acpi_tables: check table to avoid dereferencing NULL ptr [Ivan Hu] * lib: fwts_uefi: add SD device path define * uefibootpath: add test for the SD device path * uefidump: add dumping for the SD device path * lib: fwts_uefi: add efi bluetooth device path define * uefibootpath: add test for the bluetooth device path * uefidump: add dumping for the bluetooth device path * lib: fwts_uefi: add wireless device path define * uefibootpath: add test for the wireless device path * uefidump: add dumping for the wireless device path * lib: fwts_uefi: add ramdisk device path define * uefibootpath: add test for the ramdisk device path * uefidump: add dumping for the ramdisk device path * uefibootpath: fix the wrong type for relative offset range path [Jiri Vohanka] * lib: fwts_acpi_table: Fix FADT update in creation of fake FACS table. -- Alex Hung Wed, 16 Dec 2015 15:08:32 +0800 fwts (15.11.00-0ubuntu1) xenial; urgency=low [Al Stone] * Add in the notion of ACPI compliance tests. * MADT subtables: Local SAPIC structure has 3 reserved bytes, not 1 * ACPI: MADT: update GICC flag checks for ACPI 6.0 * ACPI: MADT: further update to GICC flag checks for 6.0 [Alex Hung] * acpi: method: skip scope names in method_evaluate_method * acpi: method: add _GPE test * fwts-test: update for _GPE method test * fwts-test: remove tmp log for LPIT * acpi: method: add _TSN test * acpi: method: add _TFP test * fwts-test: update for _TSN and _TFP tests * acpi: method: add _EC test * acpi: method: add _CWS test * acpi: method: add _BTH test * fwts-test: update for _EC, _CWS and _BTH tests * acpidump: add missing reserved fields to MADT structures * fwts-test: update for madt and acpidump changes * auto-packager: mkpackage.sh: add xenial [Colin Ian King] * ACPICA: Update to version 20150930 (LP: #1502044) * cpufreq: the calibration is taking a long time, make it faster * fwts-test: update dmicheck regression test * acpi: tpm2: add check for zero control area address (LP: #1506442) * acpi: tcpa: replace tab with spaces to fix formatting alignment * lib: framework: pack fwts_framework_flags to ensure it is a 32 bit int * man page: update author contributions [Ivan Hu] * securebootcert: change fail to warning when MS UEFI CA not found in DB * lib: fwts_uefi: add BMC device path define * uefidump: add dumping the BMC device path * uefibootpath: add test for the BMC device path * lib: fwts_uefi: add the URI device path define * uefibootpath: add test for the URI device path * uefidump: add dumping for the URI device path * lib: fwts_uefi: add the UFS device path define * uefidump: add dumping for the UFS device path * uefibootpath: add test for the UFS device path [Jiri Vohanka] * dmi: dmicheck: fix SMBIOS issues on aarch64 systems -- Alex Hung Thu, 12 Nov 2015 14:24:44 +0800 fwts (15.09.00-0ubuntu1) wily; urgency=low [Alex Hung] * acpi: method: add _CR3 test * acpi: method: add _MTL test * acpi: method: add _RST test * acpi: method: add _PRR test * fwts-test: update for _CR3, _MTL, _RST and _PRR method tests * acpi: fadt: merge tests for reset register [Colin Ian King] * cpu: cpufreq: reduce scope of variables * acpi: gpedump: clarify precedence for & and ? * lib: fwts_cpu: reduce scope on variables * lib: fwts_log: re-work to clean up va_arg scoping * uefi: uefirtvariable: clean up cppcheck style warning * doc: fwts manpage: Update contribution authors * ACPICA: Update to version 20150717 (LP: #1486253) * acpi: rsdp: make OEM ID test less strict * doc: update authors and add some warranty info at end of manual * data: klog.json: sync with latest 4.2 kernel messages (LP: #1493039) * fix some spelling mistakes in code and sync fwts-tests accordingly * cpu: maxfreq: check for unlikely event that no CPUs in cpu list * acpi: crsdump: fix incorrect use of string size in string copies * lib: fwts_acpi_tables: add checking for empty table parsing * lib: fwts_acpi_table: remove dead initialisation of ptr * dmi: dmicheck: fix build error on 32 bit builds [David Ward] * Makefile.am: use pkg-config for json-c [Ivan Hu] * fwts-test: fix typos for uefi acpi table regression test * lib: fwts_smbios: fix the smbios version from uefi always zero (LP: #1484023) * lib: fwts_scan_efi_systable: fix getting wrong smbios entry (LP: #1484046) * acpi: dbg2: won't find obj when no namespace device path (lp: #1486893) * lib: fwts_smbios: add the struct definition for smbios 3.0.0 * dmicheck: re-orgainise the smbios entry point check * lib: smbios: add smbios version 3.0.0 entry find helper * dmicheck: add test for smbios 3.0.0 entry point * dmicheck: add error test for SMBIOS 3.0.0 table * dmicheck: sync the dmi value test with smbios 3.0.0 spec * fwts-test: update test to sync with smbios 3.0.0 * dmicheck: fix the Base Board type range typos * auto-packager: mkpackage.sh: remove utopic -- Ivan Hu Fri, 11 Sep 2015 10:40:40 +0800 fwts (15.08.00-0ubuntu1) wily; urgency=low [Alex Hung] * acpi: add table names in test description * fwts-test: update for prefix for ECDT, TCPA, WAET and XENV * acpi: remove redundant tailing spaces - no functional changes * acpi: tcpa: fix incorrect comments - no functional changes * acpi: tpm2: Add ACPI TPM2 test * fwts-test: Add regression test for TPM2, update fwst-tests * acpi: method: fix incorrect shift of 64-bit integer in CRS * acpi: method: add support for _CPC revision 2 * acpi: acpidump: change FADT flag BIT20 to Hardware-reduce ACPI * fwts-test: update for changing to Hardware-reduce ACPI * acpi: update MADT GIC Distributor Structure and related tests * acpi: update MADT GICC Structure and related tests * acpi: fadt: update fadt_dsdt test with x_dsdt field * acpi: fadt: check RESET_REG_SUP before checking the reset register * acpi: method: refine _AEI control method * acpi: method: refine _EVT test [Anthony Wong] * fwts: Better options handling for --dump * lib: Allow reading ACPI dump file by non-root user [Colin Ian King] * acpi: XENV: fix a few spelling mistakes and fix up copyright * fwts-test: Update tests to sync with last XENV fixes * acpi: LPIT: remove duplicate "LPIT" from test description * fwts-test: Update tests to sync with last LPIT fixes * acpi: HPET: fix typo in HPET description field * fwts-test: Update tests to sync with HPET fix * Add ACPI IORT test (LP: #1450440) * Update fwts-test for the new IORT table test * ACPICA: Update to version 20150717 (LP: #1475733) * fwts-test: update syntaxcheck test now IASL finds more errors * acpi: iort: fix build warning on older versions of GCC * lib: fwts_framework: remove dubious total of --show-tests-full * acpidump: update mchi to latest revision of MCHI specification * acpi: Add support for MCHI Table (LP: #1478951) * fwts-test: Add MCHI table regression tests * acpi: Add support for STAO Table (LP: #1478957) * fwts-test: Add STAO table regression tests * lib: fix build error on non-Intel platforms * acpi: correct ASF! table definitions * acpi: Add support for ASF! Table (LP: #1479736) * fwts-test: Add ASF! table regression tests * lib: acpi.h: clean up comments and code - add more references * acpi: Add support for WDAT Table (LP: #1480257) * fwts-test: Add WDAT table regression tests [Ivan Hu] * fwts-test: uefi: remove redundant files * acpi: add support for FPDT table (LP: #1476954) * fwts-test: Add FPDT table regression tests [Ricardo Neri] * cpu/cpufreq: Iterate over the correct number of CPUs in _test_sw_any -- Ivan Hu Wed, 05 Aug 2015 14:18:41 +0800 fwts (15.07.00-0ubuntu1) wily; urgency=low [Alex Hung] * acpi: dmar: add FWTS_FLAG_ROOT_PRIV to dmar test * fwts_acpi: acpidump: update TCPA table and acpidump accordingly * fwts-test: update according to TCPA structure changes * fwts-test: Remove TMPLOG in make check * tcpa: Add ACPI TCPA test * fwts-test: Add regression test for TCPA, update fwst-tests * acpi: add XENV table test * fwts-test: Add XENV table regression test * lib: fwts_framework: Append "tests" to --uefi and --acpi * fwts-tests: modify according to changes to --uefitests and --acpitests * live-image/fwts-frontend-text: update to --uefitests and --acpitests [Colin Ian King] * acpi: method: remove extraneous "_" in error message * lib: acpica: compiler: link in missing objects (LP: #1461936) * lib: fwts_klog: fix vector size and handle errors from pcre_exec (LP: #1461520) * acpi: lib: fwts_acpi_tables: force fixup when loading tables from /sys/firmware * lib: acpi, acpidump: rename slit tables types * lib: acpi: add in new GICC table fwts_acpi_table_gicc_affinity * acpi: add SRAT table sanity checking (LP: #1464658) * fwts-test: Update tests to accommodate new SRAT test * acpi: add BERT table sanity checking (LP: #1464712) * fwts-test: Update tests to accommodate new BERT test * lib: acpi: Add in GAS address types * acpi: add ECDT table sanity checking (LP: #1464716) * fwts-test: Update tests to accommodate new ECDT test * lib: acpi: Add support for the SPMI table * acpi: add ACPI SPMI table sanity checking (LP: #1465256) * fwts-test: Update tests to accommodate new SPMI test * add ACPI SLIT table sanity checking (LP: #1465276) * fwts-test: Update tests to accommodate new SLIT test * lib: acpi: Add support for the HEST family of ACPI tables * add ACPI HEST table sanity checking (LP: #1465379) * fwts-test: Update tests to accommodate new HEST test * acpi: Add BOOT table test (LP: #1465435) * fwts-test: Update tests to accommodate new BOOT table test * acpi: Add DBGP table test (LP: #1465441) * fwts-test: Update tests to accommodate new DBGP table test * acpi: Add DBG2 table test (LP: #1465710) * fwts-test: Update tests to accommodate new DBG2 table test * acpi: acpitables: remove ECDT test as we now have a full ECDT test * acpi: re-orgainise HPET tests #1 * acpi: re-orgainise HPET tests #2 * acpi: move MADT test from acpitables into new MADT test * acpi: move GTDT test from acpitables into new GTDT test * acpi: move XSDT test from acpitables into new XSDT test * acpi: move RSDP test from acpitables into new RSDP test * acpi: move RSDT test from acpitables into new RSDT test * acpi: acpitables: remove no-op MCFG test * acpi: move SBST test from acpitables into new SBST test * acpi: move FADT test from acpitables into existing FADT test * acpi: acpitables: remove redudant acpi table checking * fwts-test: acpitables-0001: update to match changes in acpitables test * acpi: allow various ACPI table tests to run without root access * fwts-test: update arg-show-tests-* to be in sync with acpitable changes * add MADT specific test, replaces old acpitables-0002 test * fwts-test: add RSDT specific test, replaces old acpitables-0006 test * fwts-test: add XSDT specific test, replaces old acpitables-0007 test * lib: fwts_acpi_tables: fully pad out fixed up ACPI OEM IDs * fwts-test: Add BERT test * fwts-test: Add BOOT test * fwts-test: Add DBG2 test * fwts-test: Add DBGP test * fwts-test: Add HEST test * fwts-test: Add SBST test * fwts-test: Add SLIT test * fwts-test: Add SRAT test * acpi: spcr: add missing white space in error messages * fwts-test: Add SPCR test * fwst-test: remove old redundant acpitables test * ACPICA: Update version to 20150619. (LP: #1466142) * fwts: cpufreq: fix theoretical division by zero (LP: #1466905) * acpi: Add ACPI ERST test (LP: #1467835) * fwts-test: Add regression test for ERST, update fwst-tests * acpi: correct ACPI BGRT table type * acpi: Add ACPI BGRT test (LP: #1467863) * fwts-test: Add regression test for BGRT, update fwst-tests * acpi: Add ACPI CPEP test (LP: #1467870) * fwts-test: Add regression test for CPEP, update fwst-tests * acpi: Add ACPI FACS test (LP: #1467966) * fwts-test: Add regression test for FACS, update fwst-tests * acpi: acpidump: add in missing exponent field to SLIC * fwts-test: update tests because of exponent field in SLIC * acpi: Add CSRT ACPI Table test (LP: #1470116) * fwts-test: Add CSRT table regression test * acpi: Add LPIT ACPI test (LP: #1470184) * fwts-test: Add LPIT table regression test * acpi: Add WAET ACPI table test (LP: #1470495) * fwts-test: Add WAET table regression tests * acpi: add SLIC table test (LP: #1470518) * fwts-test: Add SLIC table regression test * acpi: add MSDM table test (LP: #1470538) * fwts-test: Add MSDM table regression test * bios: os2gap: remove ancient legacy test (LP:#1470573) * fwts-test: facs: fix repeated offset in data * lib: make acpidump parser more robust (LP: #1471202) * fwts-test: fix hand crafted acpidump data [Ivan Hu] * acpi: acpidump: update SMM Communication fields on UEFI table * acpi: Add UEFI ACPI data table test (LP: #1471698) * fwts-test: Add UEFI ACPI data table regression tests -- Alex Hung Wed, 08 Jul 2015 13:34:44 +0800 fwts (15.06.00-0ubuntu1) wily; urgency=low [Alex Hung] * acpi: method: update method list according to Table 5-162 in ACPI 6 * lib: acpi: add an acpi category * live-image/fwts-frontend-text: add selections of acpi and uefi tests * acpi: add tests to acpi category * fwts-test: Update tests with new acpi category * acpi: fwts-tests: Remove redundant tailing space and update fwts-tests * fwts-test: Update tests with cpufreq changes * auto-packager: mkpackage.sh: remove lucid * auto-packager: mkpackage.sh: add wily [Colin Ian King] * Debian: control: remove Chris from uploaders list * uefi: uefirtvariable: Add invalid NULL parameter sanity checks * fwts-test: update to sync with UEFI test changes * acpi: Add SPCR ACPI table check (LP: #1433604) * fwts-test: Update tests with new SPCR test * ACPICA: Update version to 20150410 (LP: #1441773) * lib: fwts_acpi_tables: print correct pathname on error * lib: fwts_acpi_tables: set count correctly on error * lib: fwts_acpi_tables: only attempt to open a dumpfile if name is defined * pci: aspm: check that a table exists, fixes segv on arm64 * lib: fwts_smbios: only scan memory for DMI table if x86 * dmi: dmicheck: add 4 new DMI chassis types * acpi: spcr: remove unnecessary include files and fix ARM build issue * pci: maxreadreq: skip test if /sys/bus/pci/devices is not available * acpi: spcr: issue a passed message if SPCR test passes * doc: fwts manual: update list of contributors at end of the manual * fwts-test: arg-help-0001: modify regex to match upper/lower case version * lib: fwts_alloc: provide fallback low memory allocator strategy (LP: #1452168) * bios: mtrr: fix memory leak on mtrr entries * hotkey: only process reads of hotkey events that are at least the correct length * uefi: uefirtvariable: fix incorrect buffer size being passed * lib: fwts_acpi_tables: enforce stricter table loading checks * acpi: battery: clean up source, no functional change * lib: acpica: explicitly set buffer to NULL to remove cppcheck warning * acpica: fwts_iasl_interface: clean up static analyzer warning on freopen * lib: fwts_pipe: clean up static analyzer warning on freopen * ACPICA: Update version to 20150515 (LP: #1455946) [Heyi Guo] * uefi: efi_runtime: eliminate confusing error message of get_variable * acpi: method: _PRS is not mandatory method * acpi: acpitables: FADT: Ignore fields at offset 46 through 108 for HW_REDUCED_ACPI * efi_runtime: get_nextvariablename: Fix bug of name string copy [Jeremy Kerr] * fwts: Add fwts_firmware_has_features * fwts: Only run firmware detection once * fwts: Allow tests to be conditional on available features * fwts: Print names of missing features, rather than a cryptic bitmask * fwts: Add FWTS_FW_FEATURE_DEVICETREE * fwts: Add OPAL firmware type * cpu/cpufreq: Don't reparse cpu information * cpu/cpufreq: hz_almost_equal is unused if !FWTS_ARCH_INTEL * cpu/cpufreq: Add a separate cpufreq consistency test * cpu/cpufreq: Add test for duplicate entries in cpufreq tables * cpu/cpufreq: Do bios limit and claimed max checks as separate tests * cpu/cpufreq: Refactor CPU performance tests * cpu/cpufreq: Always check that cpufreq changes have taken * fwts: Use linux perf counters for cpu benchmarking * fwts: Use gettimeofday for cpu benchmark * fwts: scale cpu benchmark results to one second * cpu/cpufreq: Only run performance tests on master threads -- Alex Hung Wed, 03 Jun 2015 16:37:55 +0800 fwts (15.03.01-0ubuntu1) vivid; urgency=low [Colin Ian King] * efi_runtime: ensure we don't allocate a zero byte buffer (LP: #1429890)] * uefi: uefirttime: Add tests to exercise invalid parameters * acpi: acpitables: make length and skip signed to handle -ve underflow (LP: #1435272) * uefi: uefidump: don't dump non-printable variable contents (LP: #1435346) * uefi: uefirtmisc: Add null count argument check for GetNextHighMonotonicCount * acpi: acpitables: add GTDT checking * lib: fwts_acpi_tables: load tables from /sys (LP: #1437043) * fwts-test: fix up acpitables tests * fwts-tests: fix up arg-show-tests-full test [Ivan Hu] * uefirtauthvar: return error when get mismatch size * uefirtauthvar: dependency checking for existence of test data (LP: #1434408) * uefirtauthvar: remove duplicate authenticated attribute test (LP: #1432752) -- Keng-Yu Lin Wed, 01 Apr 2015 11:42:51 +0800 fwts (15.03.00-0ubuntu1) vivid; urgency=low [Colin Ian King] * lib: fwts_framework: add --show-tests-categories option (LP: #1415953) * fwts-test: arg-help-* - add new --show-tests-categories option * ACPICA: Update to use ACPICA version 20150204 (LP:#1418453) * fwts-test: disassemble-0001: ignore any copyright year changes * fwts: update copyright year to 2015 * efi: uefirtvariable: fix build error on Ubuntu Precise * lib: fwts_acpi_tables: fix logcal/bit-wise & thinko * lib: fwts_framework: use strtok instead of strtok_r [Ivan Hu] * dmicheck: fix the range of Interface Type on Type38 (LP: #1416092) * dmicheck: support smbios check for version 2.8.0 (LP: #1418869) * uefirtauthvar: missing return error when mismatch size of set/get test data [Ricardo Neri] * efi_runtime: do not dereference userspace pointers from strings * efi_runtime: do not access userspace addresses directly * efi_runtime: limit the amount of data copied to userspace * efi_runtime: get_nextvariable: copy only the needed name bytes * uefirtvariable: allow large sizes for variable names * efi_runtime: handle memory errors when setting variables -- Ivan Hu Fri, 06 Mar 2015 11:01:50 +0800 fwts (15.01.00-0ubuntu0) vivid; urgency=low [Alex Hung] * live-image/fwts-frontend-text: skip moving and avoid overwritting results.html (LP: #1322520) * acpi: method: add check for _PSD * acpi: method: add check for _PRW [Colin Ian King] * acpi: acpidump: reduce scope of variables * acpi: battery: reduce scope of variables * acpi: brightness: reduce scope of variables * acpi: brightness: reduce scope of variables * acpi: crsdump: reduce scope of variables * acpi: lid: reduce scope of variables * utilities: kernelscan: reduce scope of variables * uefi: uefirtvariable: reduce scope of variables * acpi: dmar: reduce scope of variables * acpi: pcc: reduce scope of variables * acpi: method: reduce scope of variables * acpi: s3: reduce scope of variables * acpi: s3power: reduce scope of variables * acpi: s4: reduce scope of variables * bios: hdaaudio: reduce scope of variables * bios: mtrr: reduce scope of variables * bios: multiproc: reduce scope of variables * cpu: cpufreq: reduce scope of variables * cpu: maxfreq: reduce scope of variables * cpu: microcode: reduce scope of variables * cpu: msr: reduce scope of variables * cpu: nx: reduce scope of variables * hotkey: reduce scope of variables * hpet: hpet_check: reduce scope of variables * lib: fwts_acpi_tables: reduce scope of variables * lib: fwts_backtrace: reduce scope of variables * lib: fwts_battery: reduce scope of variables * lib: fwts_dump: replace asctime with strftime * lib: fwts_efi_module: reduce scope of variable * cmos: cmosdump: clarify precedence for & and ? * lib: fwts_framework: fix some minor style warnings from cppcheck * lib: fwts_gpe: reduce scope of variables * lib: fwts_memorymap: fix typo on memory comparison sort * lib: fwts_memorymap: reduce scope of variables * lib: fwts_log: reduce scope of variables * lib: fwts_pm_method: reduce scope of variables * reduce scope of variables * lib: fwts_uefi: reduce scope of variables * pci: aspm: reduce scope of variables * lib: klog: reduce scope of variables * uefi: uefibootpath: reduce scope of variables * uefi: securebootcert: reduce scope of variables * uefi: uefidump: reduce scope of variables * uefi: uefirtauthvar: reduce scope of variables * uefi: uefirtmisc: reduce scope of variables * uefi: uefivarinfo: reduce scope of variables [Ivan Hu] * uefibootpath: include the null-terminated space in device path length * fwts-test: update fwts tests to sync with method tests [Naresh Bhat] * makefile.am : Use sysroot path for json -- Ivan Hu Wed, 21 Jan 2015 10:39:00 +0800 fwts (14.12.00-0ubuntu1) vivid; urgency=low [Alex Hung] * auto-packager: mkpackage.sh: add vivid and remove quantal * data: klog: set "Gpe0Block - 32-bit FADT register is too long" to medium [Colin Ian King] * data: klog.json: Update with latest errors in ACPI * fwts-test: remove .swp file * acpi: s4: fix infinite loop because wrong variable being incremented * fwts: catch segfaults and bus errors and dump stack * Fix g_timeout_add to wait an integer number of seconds * cmos: just print drives + 1 with %d, fixes clang warning * uefibootpath: uefibootpath_check_dev_path: return int rather than int * * lib: fwts_klog: fix vector size and handle errors from pcre_exec (LP: #1401184) [Fu Wei] * ACPI: improve the return values and the log info in the fwts_acpi_handle_fadt_tables function. * ACPI: add the hardware reduced mode check function in src/lib/src/fwts_acpi_tables.c. * ACPI: a missing FACS table can be ignored under some circumstances [Ivan Hu] * uefirtvariable: fix the uncheck return value warnings [Phidias Chiang] * README: Fix missing libglib2.0-dev dependency in README -- Alex Hung Wed, 17 Dec 2014 15:57:35 +0800 fwts (14.11.00-0ubuntu1) vivid; urgency=low [Alex Hung] * acpi: method: add check for _UPC * acpi: method: add check for _PMD * acpi: method: add check for _PRL * acpi: method: add check for _FPS * acpi: method: add check for _DEP * acpi: method: add check for _DLM * acpi: method: add check for _MBM * acpi: method: add check for _MLS * acpi: method: add check for _ALR [Colin Ian King] * bios: mpcheck: reduce error level if ACPI is being used (LP: #1373340) * json: allow for different paths to json.h (LP: #1326911) * ACPICA: update to version 20140926. (LP: #1374816) * fwts-test: disassemble-0001: update to sync with latest ACPCIA changes * acpi: acpidump: don't assume FPDT tables are correct about their record sizes (LP: #1375258) * acpi: acpidump: check for short length headers (LP: #1375300) * fwts-test: update tests to sync with method test * acpi: acpidump: fix 32 bit build error * ACPICA: update to version 20141107. (LP: #1391860) * fwts-test: sync tests with new ACPICA 20141107 changes * fwts-test: fix disassemble test to work with latest ACPICA changes [Ivan Hu] * securebootcert: report info instead of failure for missing DB and KEK when secureboot disabled (LP: #1374351 ) * uefirtauthvar: add the test for creating authenticated variable * uefirtauthvar: cleanup environment before testing * uefirtauthvar: add test with setting the same authenticated variable * uefirtauthvar: add test for setting authenticated variable created by another key * uefirtauthvar: add the normal append operation test * uefirtauthvar: add test update the authenticated variable * uefirtauthvar: add setting old authenticated variable test * uefirtauthvar: delete authenticated variable test * uefirtauthvar: setting authenticated variable with invalid modified data test * uefirtauthvar: setting authenticated variable with invalid modified timestamp * uefirtauthvar: setting authenticated variable with different guid test * uefirtauthvar: setting authenticated variable with invalid attribute test * uefirtauthvar: test with both authenticated attributes are set * uefirtauthvar: Set and delete authenticated variable created by different key test * uefirtauthvar: cleanup environment for another authenticated variable * fwts-test: update tests for the new uefirtauthvar tests * uefi: open efi_runtime driver with flag O_WRONLY | O_RDWR [Matt Fleming] * efi_runtime: Don't use get_user() on non-pointer [Pradeep Gaddam] * efi_runtime: Copied the structure from userland locally in kernel space [Yi Li] * Add arm64 to support dmicheck test -- Alex Hung Tue, 18 Nov 2014 16:55:31 +0800 fwts (14.09.00-0ubuntu1) utopic; urgency=low [Alex Hung] * acpi: method: fix incorrect comment in _CPC test * acpi: method: fix incorrect type comparison of ACPI_TYPE_INTBUF (LP: #1362426) * acpi: method: fix _STR's output should be buffer, not string (LP: #1362503) * acpi: method: add check for _EVT * acpi: method: add check for _GHL * acpi: method: method: add check for _GLK * acpi: method: add check for _SST * acpi: method: add check for _PUR * acpi: method: add check for _TZD and _TZM * acpi: method: add check for _TRT * acpi: method: add check for _PSL * acpi: method: add check for _ART * acpi: method: add check for _GTF and _GTM * fwts-test: update tests for new acpi method tests * acpi: method: fix incorrect failure messages for _TRT * acpi: method: fix _CID errors when it returns a package (LP: #1370924) [Colin Ian King] * ACPICA: update to version 20140828 (LP: #1362786) * acpi: method: extra sanity checks for _PSx objects, (LP: #1363904) * acpi: method: add check for ACPI 5.1 _DSD (LP: #1363925) * fwts-test: update tests because of new _DSD method check * acpi: method: acpi: method: add check for ACPI 5.1 _CCA (LP: #1363936) * fwts-test: update tests because of new _CCA method check * lib + tests: make --pm-method logind dependant on glib version (LP: #1364998) * Check that we are at least using glib that supports logind * data: klog.json: add a few more error message patterns * acpi: acpidump: avoid using void * pointer arithmetic * acpi: dmar: avoid using void * pointer arithmetic * lib: fwts_alloc: avoid using void * pointer arithmetic * lib: fwts_mmap: avoid using void * pointer arithmetic * lib: fwts_multiproc: avoid using void * pointer arithmetic * lib: fwts_pipeio: remove gcc cleanup attribute, it confuses cppcheck * lib: fwts_alloc: add field width limit for sscanf * lib: fwts_battery: add field width limit for sscanf * lib: fwts_ioport: use sigsetjmp and siglongjmp * acpi: wmi: update WMI GUIDs to be in sync with 3.17 kernel * lib: fwts: add more sanity checks when fetching the RSDP (LP: #1372849) * fwts-test: wmi: update test to sync with new GUIDs added to wmi test * uefi: uefivarinfo: fix double free on data (LP: #1372874) [Ivan Hu] * uefirtvariable: fix the wrong operator used, coverity scan error (LP: #1362893) * uefivarinfo: allocate buffer rewrite to avoid realloc failure (LP: #1362540) [Keng-Yu Lin] * debian: unrestrict automake and aclocal to be v1.11 * debian: increment Standards-Version to 3.9.5 * debian: unrestrict the automake version in Build-Depends -- Keng-Yu Lin Wed, 24 Sep 2014 15:41:17 +0800 fwts (14.08.00-0ubuntu0) utopic; urgency=low [Alberto Milone] * Make the --pm-method argument part of fwts_framework * Store all the pm_method related functions in fwts_pm_method.c * s3.c: make use of the functions in fwts_power_method.h * s4.c: add support for logind and sysfs methods * fwts_pm_method.h: move _cleanup_free_ here and share it with s3 and s4 * s3power.c: add support for logind and sysfs methods * doc/fwts.1: update man page since --pm-method parameter also applies to S4 * s3.c: add backward compatibility with older glib releases * s3power.c, s4.c: add backward compatibility with older glib releases [Alex Hung] * ACPI: change GTDT field names in ACPI 5.1 (LP: #1350170) * fwts-test: update arg-help-0001/0002 for pm-method changes * fwts-test: fix up tests related to iasl and syntaxcheck changes [Colin Ian King] * ACPICA: update to version 20140724 (LP: #1348342) * fwts-test: update disassemble test to sync with latest ACPICA changes * fwts-test: update syntaxcheck test to sync with latest ACPICA changes * ACPI: Add new ACPI 5.1 MADT stuctures and checks (LP: #1348581) * ACPI: Add new ACPI 5.1 FADT fields and update acpidump (LP: #1348598) * fwts-test: update ACPI table related tests due to ACPI 5.1 fwts changes * ACPI: Fix up GTDT corrections as in ACPI 5.1 (LP: #1348618) * lib + tests: re-work iASL backand and API to handle externals (LP: #1317390) * Update contributors in man page * lib: don't use #pragma GCC push and pop [Ivan Hu] * uefirtvariable: setvariable without deleting the original variable (LP: #1354301) * uefi: add the variable attribute definition for append write (LP: #1356194) * lib: uefi: add the status error report for the IP addr conflict (LP: #1356195) * uefirtvariable: skip test when specific attributes not supported (LP: #1356199) * uefirtvariable: add test for setvariable with both authenticated attributes are set (LP: #1356207) * s3: fix multiple s3 tests stop working (LP: #1359037) -- Kun Yang Thu, 21 Aug 2014 20:48:36 +0800 fwts (14.07.00-0ubuntu0) utopic; urgency=low [Alberto Milone] * src/Makefile.am: depend on glib and gio * Add build dependency on libglib2.0-dev * Add support for different power methods to suspend * debian/copyright: add copyright for the derivative work from systemd * doc/fwts.1: update man page with information on the --pm-method parameter * src/Makefile.am: use pkg-config to include glib and gio * debian/control: add build dependency on pkg-config [Alex Hung] * cpu: microcode: remove failures when kernel does not have newer version (LP: #1322534) * lib: fwts_dump: add cpuinfo dump * doc: fwts_dump: add cpuinfo.log to man page * acpi: method: add _PCL control method test (LP:1343070) [Colin Ian King] * src/lib/*.h: remove extraneous , at end of enum lists * acpi: acpidump: minor tidy up of code * acpi: acpitables: minor code tidy up * acpi: acpidump: re-arrange code to avoid declarations after code * acpi: method: re-arrange code to avoid declarations after code * acpi: method: re-arrange code to avoid declarations after code * Remove extraneous ; following FWTS_REGISTER macro * acpi: wmi: don't use unnamed struct/unions * hpet/hpet_check: re-arrange code to avoid declarations after code * uefi: uefidump: re-arrange code to avoid declarations after code * uefi: securebootcert: re-arrange code to avoid declarations after code * kernel tests: Remove extraneous ; following FWTS_REGISTER macro * acpi: acpitables: make two more functions static * acpi: crsdump: fix shadowing of variable 'sharing' * acpi: method: fix shadowing of variable 'obj' * acpi: s3: fix shadowing of variable 'i' * acpi: s4: fix shadowing of variable 'i' * cpu: virt: put extern virt helper func declarations in virt.h * cpu: microcode: make microcode_find_cpu static * dmi: dmicheck: don't inline dmi_str_check and fix variable shadowing * hpet: hpet_check: fix shadowing of variable 'str' * uefi: uefidump: fix shadowing of variable 'i' * acpi: acpidump: fix shadowing of variable table * acpi: acpitables: fix spelling mistake (LP: #1330186) * lib: wakealarm: fix spelling mistake * acpica: update to version 20140627 (LP: #1335280) * Re-work include of acpi.h to work around warnings * fwts-test: dissassemble-0001: update disassembly logs to sync with ACPICA * fwts-test: method-0001: update test to be in sync with method test * lib: fix handling of -ve read returns * utilities: kernelscan: use memmove instead of strcpy * acpi: syntaxcheck: free lists on error exit return * acpi: s3: fix spelling mistake [Ivan Hu] * uefi: add a test for sanity checking for the UEFI Boot path (LP: #1316019) * uefi: uefirtvariable: print out the duplicate variable name (LP: #1340492) * uefidump: add Relative Offset Range subtype support for Media device path (LP: #1322465) -- Kun Yang Wed, 30 Jul 2014 19:08:27 +0800 fwts (14.06.00-0ubuntu0) utopic; urgency=low [Colin Ian King] * lib: fwts_framework: change fwts-live progress feedback (LP: #1321664) * cpu: cpufreq: add more granularity to progress feedback * acpi: fan: add more granularity to progress feedback * acpi: acpidump: remove duplicate consts * live-image: save various system and firmware data at end of test (LP: #1322543) * cpu: cpufreq: add more precision to GHz CPU frequency information * cpu: cpufreq: print MHz as float, remove erroneous rounding * cpu: cpufreq: show Turbo Boost with top _PSS value * cpu: cpufreq: sort frequencies using almost equal comparison (LP: #1322531) * acpica: update to version 20140424 (LP: #1312351) * Add support for ACPI 1.0 GUID * live-image: Add UEFI tests to the run all batch tests menu item (LP: #1322545) * fwts-test: arg-show-progress-dialog-0001: fix armhf failures * fwts-test: arg-show-progress-dialog-0001: fix armhf failures, for test-0002 [Keng-Yu Lin] * debian: add watch file * fwts-test: arg-show-progress-dialog: sync with fwts -- Ivan Hu Wed, 18 Jun 2014 10:20:44 +0800 fwts (14.05.00-0ubuntu0) utopic; urgency=low [Alex Hung] * acpi: s3power: update usage example as 10 minutes or more is suggested [Colin Ian King] * fwts_acpica: fix potential null ptr dereference (LP: #1298419) * acpi: acpitables: more ACPI table header sanity checking * acpi: acpitables: better checking on FADT SCI_INT * acpi: acpidump: fix typo "patform" --> "platform" * doc: fwts: add --s3-power-sleep-delay option * doc: fwts: use lower case for description * fwts-test: acpidump-0001: sync test with fwts * fwts-test: arg-help-0001: sync with recent changes in fwts * fwts-test: arch-show-tests-full-0001: keep in sync with fwts * fwts-test: acpitables-000*: sync with recent acpitables changes * fwts-test: arg-table-path-0001: sync test with recent fwts changes * data: klog.json: Add a circular list ACPI warning checks * data: klog.json: re-work _S1 and _S2 advice * Use json_object_object_get_ex if is available * lib: fwts_acpi_tables: fix memory leak on error exit path * lib: fwts_button: free data after successful fwts_get() * pci: crs: fix memory leak on cmdline * lib: fwts_ac_adapter: fix memory leak * lib: fwts_formatting: fix memory leak * cpu: cpufreq: avoid division by zero ob cpu_top_speed * acpi: cstates: fix potential integer overflow * cpu: cpufreq: use uint64_t for CPU frequencies on HZ. * lib: fwts_framework: avoid division by zero in % calculations * lib: fwts_hwinfo: ensure buf.ifr_name is null terminated [Ivan Hu] * uefi: uefidump: fix the Partition Signature length for the HD Media Device Path isn't correct (LP: #1308415) * uefi: uefidump: dumping the new definitions for ipv4 ipv6 device path (LP: #1311538) * uefi: uefirtvariable: fix the fail GUID checking for uniqueness of variable (LP: #1311822) * uefi: uefirtvariable: report failure when setting variable with invalid attribute successfully (LP: #1310686) * fwts: uefi: clean up all test variable before doing the uefirtvariable test (LP: #1313554) * auto-packager: mkpackage.sh: add utopic and remove raring saucy [Jeremy Kerr] * Don't hard-code the installation prefix * uefi: Don't abort on non-UEFI firmware * fwts: fix acpi table access on failed load * Fix include and lib dirs for srcdir != builddir builds * acpcia: Fix makefile rules for srcdir != builddir builds * acpica/compile: Fix srcdir != builddir builds [Matt Fleming] * efi_runtime: Set default value for $KVER * efi_runtime: Refactor ioctl code into helper functions * efi_runtime: Group kernel version dependent functions * efi_runtime: Do not pass user addresses to firmware -- Ivan Hu Wed, 07 May 2014 09:46:52 +0800 fwts (14.03.01-0ubuntu2) trusty; urgency=low [Alex Hung] * klog: ACPI does not specify _BQC as a mandatory method * s3: add a "s3-hybrid" option to enable hybrid sleep for s3 (LP: #1295146) * fwts-test: klog: updates for _BQC changes in 76c3ffd814cc882564f680b16f2c2d314ae58b07 * fwts-test: arg-help-0001: updates tests for new --s3-hybrid option * fwts-test: arg-help-0001: fix test-0002.sh incorrectly uses arg-help-0001.log * doc: add --s3-hybrid man page entry [Colin Ian King] * acpi: wmi: add some newer UUIDs that are supported by linux (LP: #1292515) * fwts_hwinfo: don't compare network addresses (LP: #1293297) * acpi: acpidump: fix dump offsets in various table dumps (LP: #1293613) * fwts-test: re-sync with fwts fix to acpidump * lib: fwts_alloc: fix low 32 bit memory allocator (LP: #1295849) * fwts-test: arg-help-0001: don't check the version field * fwts-test: wmi-0001: update test to sync with WMI changes in fwts * fwts-test: arg-log-format-0001: fix aarch64 failures * acpi: method: add more advice for failed _PTS, _TTS and _WAK (LP: #1296737) * lib: fwts_acpi_object_eval: report better advice on exec failure (LP: #1296710) * acpi: method: fix _ACx test (LP: #1297323) * fwts-test: keep method-0001 test in sync with changes in fwts method * acpica: update to version 20140325 (LP: #1297531) * fwts-test: update ACPICA related tests due to ACPICA updates [Keng-Yu Lin] * debian: skip fwts-test on arm64 [Matt Fleming] * lib: fwts_log: Add missing log field flags -- Ivan Hu Thu, 27 Mar 2014 10:09:59 +0800 fwts (14.03.00-0ubuntu1) trusty; urgency=low [Colin Ian King] * acpi: fwts_acpi_tables: fix up missing FACS (LP: #1284097) * acpi: acpidump: provide table provenance (LP: #1284205) * apci: acpiinfo: enable for non-x86 arches (LP: #1284557) * Add utility to dump _PLD (Physical Device Location) information (LP: #1281835) * acpi: add in a tool to dump GPE information (LP: #1283473) * lib: fwts_acpi_tables: handle zero 64 bit addrs in FADT (LP: #1285167) * bios: hda_audio: skip the test if audio devices don't exist (LP: #1285571) * Remove copy-acpica.sh script, it is no longer used * acpi: checksum: print RSDP checksum correctly (LP: #1287815) * lib: fwts_acpi_tables: update RSDP checksum on fixed-up RSDP (LP: #1287852) * acpi: acpitables: remove irrelevant test case (LP: #1287891) * uefi: uefidump: small re-working of uefi GUID lookup * fwts-test: update acpidump-0001 * fwts-test: acpitables-0002: sync with recent table fixing * fwts-test: syntaxcheck-0001: update to sync with fwts * fwts-test: arg-show-tests-0001: keep in sync with fwts * fwts-test: arg-show-tests-full-0001: keep in sync with fwts * fwts-test: checksum-0001: update due to fwts formatting fixes * fwts-test: arg-table-path-0001: sync with fwts changes * fwts-test: acpitables-0003: update to sync with fwts * fwts-test: acpitables-0004: update test * fwts-test: acpitables-0005: update test * fwts-test: acpitables-0006: update test * fwts-test: acpitables-0007: update test * fwts-test: acpitables-0008: update test * fwts-test: skip some tests on non-x86 builds * fwts-test: fix tests not to compare against date (LP: #1289225) * fwts-test: arg-help-0001: fix up some tests issues * fwts-test: arg-log-format-0001: make test less pedandic on line numbers * fwts-test: arg-show-progress-dialog: remove version from test * acpica: ppc64el needs to be built as a 64 bit architecture * debian: limit architectures to i386 amd64 armel armhf arm64 ppc64 ppc64el [Keng-Yu Lin] * fwts-test: Copy all files from fwts-test git tree (LP: #1201250) * lib: Make --disassemble-aml accept the outputdir argument (LP: #1201250) * fwts-test: Update disassemble-0001 test (LP: #1201250) * fwts-test: Update the test scripts for new test environment (LP: #1201250) * lib: fwts_args: determine tty width from stdin * fwts-test: disassemble-0001: rename *.orig to *.original -- Ivan Hu Mon, 17 Mar 2014 15:13:44 +0800 fwts (14.02.00-0ubuntu0) trusty; urgency=low [Colin Ian King] * acpi: method: fix ppc64el build failure (LP: #1272265) * acpi: acpidump: handle invalid MADT table data (LP: #1278422) * cpu: cpufreq: tidy code, show advice when cpu scaling unavailable (LP: #1267959) * lib: fwts_release: call lsb_release rather than parsing raw data (LP: #1266823) * ACPICA: update to version 20140214. (LP: #1281096) * lib: fwts_acpi_tables: fix parsing of empty data (LP: #1281197) [Ivan Hu] * data: klog.json: lower the level of the failure when the _S1 and _S2 not implemented (LP: #1279714) -- Alex Hung Wed, 19 Feb 2014 11:48:01 +0800 fwts (14.01.01-0ubuntu0) trusty; urgency=low [Alex Hung] * auto-packager: mkpackage.sh: add trusty * debian: add dependency lts-saucy to fwts-efi-runtime-dkms [Colin Ian King] * fwts: add subdir-objects as required now by automake 1.14 (LP: #1268685) * ACPICA: update to version 20140114 (LP: #1269423) * fwts_log.h: remove LOG_TAG, fix up following bitfields (LP: #1269076) * updated automake files for libjson-c (LP: #1268005) * lib: fwts_framework: fix --stdout-summary output (LP: #1252186) * Allow for RSDP that is not 16 byte aligned (LP: #1271522) * fwts_exec: fix status check (LP: #1271607) -- Alex Hung Fri, 24 Jan 2014 10:54:58 +0800 fwts (14.01.00-0ubuntu1) trusty; urgency=low [Alex Hung] * dmi: change max value of "Upgrade" field" from 0x2a to 0x2c (LP: #1263634) [Colin Ian King] * cpu: microcode: test should skip if no microcound found (LP: #1259900) * acpi: acpidump: add SPCR table (LP: #1260351) * acpi: acpidump: add DBGP table (LP: #1260353) * acpi: acpidump: add DBG2 table (LP: #1260356) * Enable ACPI table dumping for non-x86 systems (LP: #1260470) * Allow RSDP to be provided manually or scan for it in klog (LP: #1260400) * Dump ACPI table addresses with correct address length (LP: #1260482) * ACPICA: update to version 20131218 (LP: #1262348) * acpi: acpidump: dump out table descriptions (LP: #1261483) * acpi: acpidump: Add MCHI table (LP: #1261484) * fwts: remove launchpad tagging from fwts * doc: remove tag options --lp-tags and --lp-tags-log * data: klog.json: remove redundant tags from database * lib: klog: add fwts_klog_find_changes to compare klogs (LP: #1262208) * acpi: s3: do kernel log comparisons without destroying klog (LP: #1262208) * acpi: s4: do kernel log comparisons without destroying klog (LP: #1262208) * lib: add fwts_exec() helper function * fwts: use fwts_exec rather than fwts_pipe_exec * acpi: crsdump: fix large resource length calculation (LP: #1255793) * acpi: crsdump, prsdump: add support for _PRS dumping (LP: #1265827) * fwts: all: update copyright year to 2014 * fwts: debian: update copyright dates * fwts: doc: update dates, some of these are way too old * dmi: dmicheck: add more checks for invalid DMI fields (LP: #1262236) * data: klog: sync up with 3.13 kernel (LP: #1266786) * fwts: attempt to make fwts less Ubuntu specific, (LP: #1246653) * fwts: fix common realloc() memory leak anti-pattern (LP: #1267193) * acpi: s3: remove redundant variable * bios: pciirq: fix printf format and tidy some variable scopes * acpi: powerbutton: ensure we don't get scanf buffer overflow * cpu: cpufreq: use correct printf format specifiers [IvanHu] * lib: fwts_uefi header add attribure packed for struct typedef * uefi: uefidump: add the Media Protocol subtype-5 support on media device path type for uefidump (LP: #1260147) * uefi: uefidump: add the PIWG Firmware File subtype-6 support on media device path type for uefidump (LP: #1260147) * uefi: uefidump: add the PIWG Firmware Volume subtype-7 support on media device path type for uefidump (LP: #1260147) * uefi: uefidump: extend the Messaging Device Path type Vedor subtype-10 (LP: #1262095) -- Alex Hung Tue, 14 Jan 2014 16:13:37 +0800 fwts (13.12.00-0ubuntu1) trusty; urgency=low [Alex Hung] * data: klog.json: set _DOS error to low as kernel workarounds it (LP: #1250764) * acpi: method: add _PIC control method test (LP: #1252997) * acpi: method: move commented _CWS to correct section * acpi: method: add _IFT and _SRV control method tests (LP: #1255915) * acpi: method: remove resource descriptor field "_INT" from method/object list [Colin Ian King] * lib: fwts_hwinfo.c: Fix strict aliasing build failure on Lucid (LP: #1251587) * ACPICA: update to version 20131115 * data: klog.json: thermal overrun messages should be checked on klog test (LP: #1253146) * data: klog.json: fix two spelling mistakes * acpi: method: fix spelling mistake in comment * cpu: cpufreq: check CPU freq max limits (LP: #1253047) * cpu: maxfreq: report maxfreq and tidy up the test (LP: #1253658) * cpu: msr: tidy up output and tidy up source (LP: #1253684) * cpu: msr: Add Ivybridge and Haswell MSRs (LP: #1254066) * cpu: msr: remove the need for shift in tables, tidy up tables * lib: fwts_guid: consitify and minor tidy up * lib: fwts_acpi: constify fwts_acpi_fadt_preferred_pm_profile * acpi: acpidump: constify tables and func args, tidy up source * hpet: hpet_check: skip test3 if HPET address was not found (LP: #1257825) * acpi: autobrightness: make error reporting far less verbose (LP: #1257782) * doc: fix --s3-sleep-delay man page entry * lib: remove fwts_virt, it contains code that is not used (LP: #1259655) [Ivan Hu] * uefi: uefidump: add more subtype support on acpi device path type for uefidump (LP: #1253000) * uefi: uefidump: dealing with the End of Hardware Device Path sub-type 0x01 (LP: #1253906) * uefi: uefidump: add the Fibre Channel Ex subtype-21 support on messaging device path type for uefidump (LP: #1255387) * uefi: uefidump: add the SATA subtype-18 support on messaging device path type for uefidump (LP: #1255387) * uefi: uefidump: add the USB WWID subtype-16 support on messaging device path type for uefidump (LP: #1255387) * uefi: uefidump: add the VLAN subtype-20 support on messaging device path type for uefidump(LP: #1255387) * uefi: uefidump: add the Device Logical Unit subtype-17 support on messaging device path type for uefidump(LP: #1255387) * uefi: uefidump: add the SAS Ex subtype-22 support on messaging device path type for uefidump(LP: #1255387) * uefi: uefidump: add the iSCSI subtype-19 support on messaging device path type for uefidump(LP: #1255387) * uefi: uefidump: add the NVM Express namespace subtype-23 support on messaging device path type for uefidump (LP: #1255387) * lib: fwts_acpi_table: multi-FADT table support fimware make sure the table from XSDT be checked first. (LP: #1258378) -- Keng-Yu Lin Wed, 11 Dec 2013 14:09:00 +0800 fwts (13.11.00-0ubuntu1) trusty; urgency=low [Alex Hung] * acpi: method: correct alphabetical order in comments to sync with acpi spec * acpi: method: add missing names to acpi-method list * acpi: method: add _CBA control method test (LP: #1249171) * acpi: method: add _CDM control method test (LP: #1249172) * acpi: method: add _CID control method test (LP: #1249174) * acpi: method: add _GAI control method test (LP: #1249894) * acpi: method: add _MSG control method test (LP: #1249939) * acpi: method: add _PMM control method test (LP: #1249941) * acpi: method: add _UPD and _UPP control method tests (LP: #1251168) [Colin Ian King] * lib: framework: report warning[s] correctly (LP:#1223736) * lib: update copyright year. (LP: #1226590) * acpi: mcfg: Parse /sys/bus/pci rather than using lspci (LP: #1226615) * syntaxcheck: report IASL compiler remarks as low failures (LP: #1200606) * acpi: fadt: sanity check reset register settings (LP: #1230394) * ACPICA: update to version 20130927. * iasl: capture output from stderr to catch iasl fatal errors * pci: aspm: remove the need to run and parse lspci output (LP: #1227853) * lib: fwts_klog: Add ability to write message to kernel log * acpi: s3: add timings report for suspend/resume (LP: #1241638) * acpi: s3: add --s3-suspend-time and --s3-resume-time (LP: #1241638) * lib: add new PCI definitions * pci: aspm: use new fwts PCI defintions * pci: maxreadreq: don't use lspci to get PCI specific data (LP: #1244676) * uefi: uefidump: add more checks to avoid buffer overruns (LP: #1239641) * bios: mtrr: don't use lspci to get PCI specific data (LP: #1244673) * wakealarm: use ioctl() interface as this more of a generic interface (LP: #1244184) * Tests: replace "check" with "test" in test name headings (LP: #1246650) * data: klog.json: Sync up with latest kernel 3.12 (LP: #1248499) * lib: Add PCI helper to return description of a device * lib: fwts_hwinfo: don't use external utils for H/W checks (LP: #1246646) * debian: control: remove some unrequired suggests * acpi: brightness: use /sys/class/backlight interface (LP: #1250517) * acpi: brightness: break up brightness test (LP: #1250429) * acpi: syntaxcheck: non-x86 may have ACPI support (LP: #1251293) * acpi: method: Change "Check" to "Test", (LP: #1246650) [Ivan Hu] * uefi: uefidump: fix the boot load option Boot#### larger than Boot1000 doesn't be parsered (LP: #1225850) * uefi: uefidump: Add support for DriverOrder (LP: #1237263) * uefi: uefidump: add support for Driver#### (LP: #1237263) * uefidump: add support for Key#### (LP: #1237263) * uefi: uefidump: add support for db, dbx, dbt... variables scan (LP: #1247749) * uefi: uefidump: compare the SignarureType GUID and print out type for signature database parser (LP: #1247749) * uefi: uefidump: add support for KEK, KEKDefault, PK, PKDefault global variables scan (LP: #1247749) [Keng-Yu Lin] * Force to use automake1.11 to prevent FTBFS in Trusy (LP: #1250340) -- Keng-Yu Lin Fri, 15 Nov 2013 14:11:00 +0800 fwts (13.09.01-0ubuntu1) saucy; urgency=low [Alex Hung] * live-image/fwts-frontend-text: add uefi tests to fwts-live (LP: #1223793) [Keng-Yu Lin] * efi_runtime: fix the broken kernel vermagic when upgrading the kernel pacakge (LP: #1223801) -- Keng-Yu Lin Tue, 17 Sep 2013 15:27:31 +0800 fwts (13.09.00-0ubuntu1) saucy; urgency=low [Colin Ian King] * lib/fwts_uefi.c: fix time-of-use race on open/stat (LP: #1209251) * lib: fwts_cpu.c: fix time-of-use race on stat/open (LP: #1209225) * lib: fwts_dump: remove the redundant path in fwts_dump_info (LP: #1216344) * data: klog.json: Add some more ACPI related kernel error messages (LP: #1219006) * fwts: framework: Add missing closed parenthesis for -U option (LP: #1219576) [Ivan Hu] * UEFI: move the UEFI tests into the UEFI category (LP:#1207200) * uefi: uefidump: Add support for HwErrRecSupport * uefi: uefidump: Add support for OsIndicationsSupported * uefi: uefidump: Add support for VendorKeys [Naresh Bhat] * ACPICA:enable 64bit build for aarch64 architecture -- Keng-Yu Lin Tue, 10 Sep 2013 17:33:17 +0800 fwts (13.08.00-0ubuntu1) saucy; urgency=low [Alex Hung] * dmi: dmi_decode: merge smbios test as they both check dmi/smbios * dmi: rename dmi_decode test to dmicheck [Colin Ian King] * uefi: uefirtvariable: minor cleanup of failure message * uefi: uefirtvariable: add options to specify iterations in variable stress tests (LP: #1197742) * efi_runtime: Fix efi_runtime build warnings (LP: #1198168) * efi_runtime: ensure it always builds for kernels > 3.0.0 (LP: #1198168) * efi_runtime: memset the entire structure (LP: #1198236) * lib: add acpica mode types * lib: framework: add new acpica mode flags * lib: acpica: set various ACPICA global mode flags depending on acpica_mode * lib: fwts_framework: add support for new --acpica option * acpi: method: handle ACPICA slack mode gracefully * doc: add --acpica option to man page * acpi: syntaxcheck: use ASL_MESSAGE_TYPES instead of #defining them (LP: #1200568) * acpi: syntaxcheck: ensure error message strings are in sync with error (LP: #1200568) * lib: fwts_log: set non-TTY log with to 80 characters (LP: #1200592) * acpi: syntaxcheck: fix spelling mistake (LP: #1200602) * fwts_iasl_interface.c: ensure we read in all of stdout (LP: #1200426) * data: klog.json: rename "Common" label prefix to "Klog", (LP: #1201311) * data: klog.json: Update patterns to keep in sync with Linux 3.10 (LP: #1201335) * bios: hdaaudio: skip the test if no BIOS pin config found (LP: #1201903) * pci: aspm: test should skip if it can't read FACP or PCIe config (LP: #1201909) * docs: remove legacy notes created during early fwts development * smatchify.sh: fix spelling mistake * bios: mtrr: fix spelling mistake * acpica: Makefile.am: fix spelling mistake * data: syntaxcheck.json: fix spelling mistakes * data: klog.json: fix spelling mistakes * docs: fwts.1: fix spelling mistake * doc: fwts-frontend-text.1: fix spelling mistake * ACPICA: update to version 20130725 (LP: #1205203) * acpi: syntaxcheck: strcpy should be replaced with strncpy (LP: #1205215) * acpi: method: check for NULL buf before dereferencing it (LP: #1205267) * lib: fwts_alloc: use plain old mmap on 32 bit machines (LP: #1204065) * ACPICA BZ 1035 fixes segfault with too many ^^^^^^ prefixes. (LP: #1205714) * lib: fwts_log_json: check sting from json is not null (LP: #1206285) * acpi: acpidump: fix segfault on BERT entries (LP: #1206643) * data: klog.json: Add some firmware related kernel warnings (LP: #1206958) * utils: kernelscan: also scan for warning messages (LP: #1206953) * lib: fwts_log_json: enable json human readable formatting (LP: #1206290) [Zhang Rui] * update README_ACPICA to reflect the real ACPICA repo -- Keng-Yu Lin Wed, 07 Aug 2013 10:27:51 +0800 fwts (13.07.00-0ubuntu1) saucy; urgency=low [Alex Hung] * data: klog.json: remove duplicated patterns [Colin Ian King] * data: klog.json: Add some more advice for the now common lpc_ich warnings * apci: acpidump: fix segfault when dumping ASF! tables (LP: #1188209) * acpica: fwts_acpica: some cosmetic tidying up. * acpica: fwts_acpica: no need to check for null ptr on fwts_low_free * lib: acpica + fwts_framework: add --acpica-debug option * cpu: cpufreq: re-phrase P-state coordination message * cpu: cpufreq: remove the time to run from the description * Makefile.am: move apicedge test to keep tests in alpabetical order * bios: smbios: minor re-structure of test1 * klog: move from acpi to kernel directory * bios: mpdump: fix indexing outside of mpdump_sys_addr_type array * lib, acpi, hotkey: remove redundant null checks before free() * bios: smbios: add more sanity checks to SMBIOS information * lib: fix assembly/disassembly segfault when AcpiOsVprintf is calle (LP: #1195209) * ACPICA: update to version 20130626 * acpica: nspredef: fix null pointer dereference issue (LP: #1195251) * lib: fwts_framework: remove fwts_framework_setting * lib: fwts_framework: minor tidy up of code * lib: fwts_framework: remove some old and redundant #defines * fwts_iasl_interface.c: allocate temp buffers required for IASL (LP: #1196463) [Ivan Hu] * uefivarinfo: add the utility to show the NVRam and variable info [Keng-Yu Lin] * update_version.sh: use non-localised date representation -- Keng-Yu Lin Wed, 03 Jul 2013 11:07:03 +0800 fwts (13.06.00-0ubuntu1) saucy; urgency=low [Alex Hung] * bios: mtrr: add uncached string for DEFAULT type * pci: maxreadreq: Audio device to chipset devices. * data: klog.json: remove a redudent line break [Colin Ian King] * debian: control: fix typo * lib: fwts_uefi: make vars work on recent kernels (LP: #1171617) * cpufreq: use qsort to sort frequencies * lib: fwts_uefi: cast to __SWORD_TYPE 32 bit builds * apic: apicedge: minor code tidy-up * cmos: cmosdump: remove unused commented out code * cmos: cmosdump: minor code tidy up, formatting * cpu: maxfreq: remove unused fwts_cpuinfo typedef * cpu: maxfreq: use number of cpus as number of items in calloc() * cpu: maxfreq: use doubles for cpu freqs rather than int * doc/fwts.1 add in names of contributors to fwts * copy-acpica.sh: update to use the correct ACPICA git repo * uefi: uefidump: don't recurse forever on zero lengths (LP: #1174947) * acpica: update to ACPICA version 20130418. * cpu: cpufreq: fix leak of file if fgets returns NULL * cpu: cpufreq: fix leak of dir before we return * cpu: maxfreq: fix leak of cpuinfo * lib: fwts_microcode: fix leak of allocated microcode buffer * lib: fwts_memorymap: free klog on error * lib: fwts_keymap: free keymap_list on error * lib: fwts_cpu: free cpu on error * hotkey: close fd on error * cpu: nx: free fwts_nx_cpuinfo on error * bios: mtrr: free mtrr_list on file open error * cpu: maxfreq: free cpufreq on error * acpi: dmar: free klog list on error * acpi: fan: fix resource leak bugs * acpi: lid: free gpe resources on error * acpi: s3: free quirks and command resources * acpi: s3power: free quirks and command resources * lib: fwts_cpu: initialize variable, stop coverity warning * lib: fwts_uefi: fix check of empty d_name * lib: fwts_uefi: only close fp if it was successfully opened * lib: fwts_memorymap: handle the case where str maybe NULL * cpu: cpufreq: avoid division by zero * uefi: uefidump: fix missing break in switch statement * uefi: uefidump: missing va_end on str == NULL return path * dmi: dmi_decode: remove redundant snprintf * acpi: cstates: set state->present[nr] if nr < MAX_CSTATE * utilities: kernelscan: fix memory leak * lib: fwts_dump: check error return on mkdir * lib: fwts_acpid: check fcntl return rather than assuming it works * hotkey: check lstat() return value rather * acpi: ac_adapter: initialize matching and not_matching * acpi: acpidump: fix overflow before widening bug * lib: fwts_args: free long_options on error * lib: fwts_framework: free resources on error * lib: fwts_log: free filenames on error condition * acpica: fwts_acpica: clear sa_mask fields * bios: hdaaudio: free list items and not list * lib: fwts_framework: free just items in list and not list descriptor * acpi: lid: Fix nesting bug * acpi: battery: Fix nesting bug * lib: fwts_release: check *str rather than str * acpica: fwts_acpica: missing unlock on error path * cpu: virt: correctly return true if SVM is enabled * lib: fwts_framework: ensure we don't truncate null names * acpi: fan: fix cur_state comparison bugs * acpi: brightness: check get_setting return * acpi: s4: free quirks * acpi: s3: free quirks * lib: fwts_log: free log_file on error exit * acpica: Fix for _INI regression. * acpi: battery: free gpe resources on error * data: klog.json: Add ACPI video notify handler check * data: klog.json: Add ACPI video notify handler remove check * data: klog.json: Add checks for Intel Lynxpoint LPSS errors * data: klog.json: Add check for ACPI region field type error * data: klog.json: Add check for object repair or convert failure * data: klog.json: Add ACPI fixed event error checking * data: klog.json: Make ArgType a regex to match various similar strings * data: klog.json: Drop ACPI prefix, make patten a string match * data: klog.json: Bit offset pattern should be a regex not a string match * Revert "acpi: s3: free quirks and command resources" * lib: framework: don't check for long string if src is NULL * acpi: acpidump: ensure we are shifting a 64 bit unsigned long * cpu: cpufreq: make test more generic for non-x86 systems * acpica: update to ACPICA version 20130517. * lib: remove fwts_microcode * cpu: microcode: rewrite so we no longer need to load microcode (LP: #1120240) * dmi: dmi_decode: Add checks for frequent bad defaults on AMI firmware * acpi: wakealarm: enable for non-x86 devices (LP: #1182630) * acpi: wakealarm: minor tidy up to the test * acpi: acpiinfo: missing possessive apostrophe * data: klog.json: fix spelling mistake [Ivan Hu] * lib: fwts_uefi: modify the return value of the fwts_uefi_get_interface * acpica: fix the build error after patch the update to ACPICA version 20130418 * uefirtvariable: fix the unchecked return value * lib: fwts_uefi: add the function to check the efivars interface existence * securebootcert: need to check the efivars interface existence while checking the variable db and kek [Keng-Yu Lin] * efi_runtime: Update the address of the Free Software Foundation * auto-packager: mkpackage.sh: remove Natty and Oneiric * debian: control: Add the backported HWE kernel header packages * auto-packager: mkpackage.sh: Add Saucy * configure.ac: Use AM_PROG_AR when it exists -- Keng-Yu Lin Wed, 05 Jun 2013 10:51:43 +0800 fwts (0.26.08-0ubuntu1) raring; urgency=low [Colin Ian King] * uefi: uefivariable: fix build error on older compilers * acpi: acpidump: fix spelling mistake, useage -> usage * acpi: acpidump: abort dumping of SLIC if length is zero * data: klog.json: Add in another batch of BIOS and ACPI related checks * dmi: dmi_decode: Add another commonly used serial number * uefi: uefirtvariable: minor reformatting for 80 char width lines * uefi: uefirtvariable: minor code tidy up, constify and statics [Ivan Hu] * efiruntime: getnextvariablename update the VariableNameSize before return when get EFI_BUFFER_TOO_SMALL * uefirtvariable: add some information for the GetNextVariableName sub-tests -- Keng-Yu Lin Mon, 08 Apr 2013 16:45:31 +0800 fwts (0.26.07-0ubuntu1) raring; urgency=low [Colin Ian King] * update_version.sh: Insert just date + time in date stamp * acpi: mcfg: move PCI mmap and munmap to compare_config_space * acpi: syntaxcheck: reformat warning messages * acpi: syntaxcheck: add in extra error level messages * acpi: syntaxcheck: re-work IASL error mappings * data: syntaxcheck: remove redundant error code * acpi: syntaxcheck: add helpers to convert error_code * acpi: syntaxcheck: issue error messages depending on error level * acpi: syntaxcheck: add some more per-table information in log * data: syntaxcheck: add a few more advice entries * lib: Add helper function to get release info * data: cater for _PTS not existing * data: klog.json: cater for CMOS handler errors * data: klog.json: fix a typo: of --> if * data: klog.json: Add some vague advice for AE_NOT_EXIST * data: klog.json: Improve the advice for AE_AML_BUFFER_LIMIT * lib: fwts_log_*: fix a few smatch errors * dmi: dmi_decode: DMI not used by kernel should be low failures (LP: #1148703) * lib: framework: add in test name before test description * data: syntaxcheck.json: add more advice info for common errors * data: klog.json: Add some more ACPI related kernel message checks [Ivan Hu] * lib: fwts_uefi: fixed the newer inteface never be used * securebootcert: add Ubuntu UEFI secure boot tests * securebootcert: add Ubuntu UEFI secure boot test - check MS UEFI CA * securebootcert: add Ubuntu UEFI secure boot test - check Ubuntu CA presence * lib: fwts_uefi: add a helper fuction to convert attribute into readable form * data: klog.json: add message for the LVT offset conflict issue [Matt Fleming] * uefirtvariable: Correct DataSize for GetVariable() * uefirtvariable: Check new VariableNameSize from GetNextVariableName() * uefirtvariable: Test GetNextVariableName() returns unique variables * uefirtvariable: Test GetNextVariableName() error handling * efi_runtime: Add 'install' target -- Keng-Yu Lin Tue, 12 Mar 2013 16:01:22 +0800 fwts (0.26.06-0ubuntu1) raring; urgency=low [Alex Hung] * lib: fwts_ioport: fix calling unmatched I/O function in a help function. [Colin Ian King] * lib: fwts_ioport: add dummy stubs for non-x86 arch * acpica: fwts_acpica: remove fwtsInstallLateHandlers * acpi: wmi: re-write to eval _WDG rather than parse AML * acpi: method: print out BCL brightness levels rather than dump the object * cpu: cpufreq: tidy up information message formatting [Ivan Hu] * wmi.c: fix build error when using gcc 4.6.3 [Keng-Yu Lin] * debian: add fwts-efi-runtime-dkms package in the dependency -- Keng-Yu Lin Thu, 21 Feb 2013 14:54:18 +0800 fwts (0.26.05-0ubuntu1) raring; urgency=low [Colin Ian King] * lib: fwts_uefi: fix build error when using gcc 4.6.3 * lib: fwts_uefi: fix a couple of spelling mistakes that crept in * doc/fwts: remove debug options from fwts man page (LP: #1100955) * data: klog.json: add better advice for a common firmware issue * acpi: method: format _TSS states into a table * acpi: method: Show the name of the _PSS control * acpi: method: implement _CST sanity checks * acpi: method: refactor some of the passed messages * acpi: method: tidy up passed/failure messages * apci: method: update comments on implemented tests * acpi: method: use a helper function for MethodReturnNullObj errors * data: klog.json: Make PnP BIOS message into an info message * data: klog.json: Handle SystemIO conflict messages * acpi: method: Add simple _FIX test * acpi: method: Add _HPP (Hot Plug Parameters) sanity check * lib: framework: Increase precision of progress, add a spinner progress indicator * acpi: method: Add _INI (Init) sanity check * acpi: method: _CST test checks for wrong number of package elements * acpi: method: Add _PRS return buffer sanity checking. * acpi: method: update comments describing objects/controls * acpi: method: Add helpers to check for package sizes * lib: fwts_list: optimize list functions a little, make small helper funcs inline * acpi: method: fix some tests that don't indicate passed when they are complete * acpi: method: tidy up some more tests * acpi: method: add helper to check for package contents, simplify code. * lib: fwts_ioport: add helper functions to do port I/O * acpi: fadt: use new I/O port helpers to avoid segfaults * lib: fwts_cmos: Use new I/O helpers, add more error checking * hpet: hpetcheck: fix a bug found by smatch * apci: apicinstance: clean up smatch warning * script: smatchify.sh: build fwts and check with smatch * kernel: version: gather kernel boot command line * acpi: crsdump: dump ACPI _CRS buffers in an annotated form [Ivan Hu] * data: klog.json: Make FADT truncated warning into info message * efi_runtime: add UEFI runtime service QueryCapsuleCapabilities interface * uefirtmisc: add UEFI runtime service QueryCapsuleCapabilities interface test. * efirtmisc: add UEFI runtime service QueryCapsuleCapabilities interface stress test -- Keng-Yu Lin Mon, 04 Feb 2013 15:25:56 +0800 fwts (0.26.04-0ubuntu1) raring; urgency=low [Colin Ian King] * lib: fwts_list: make list creation and initialisation more optimal. * lib: cpu: add common CPU performance measuring code to fwts library * lib: Makefile: Link in math library because we need sqrt() * acpi: cstates: use new fwts_cpu_performance() helper function * cpu: cpufreq: Use new fwts_cpu_performance() helper function * bios: pciirq: make table dump more compact, fix formatting * acpi: method: ignore _WAK return values * acpi: method: don't bother dumping _WAK package, it's just noise * acpi: cstates: cater for different kernel C-state info * acpi: method: don't bother reporting internal ACPI lock success * acpi: method: dump out _PSS states in a tabular format * apci: method: don't bother dumping out the _BST contents * apci: method: don't bother dumping out the _BIF contents * apci: method: don't bother dumping out the _BIX contents * apci: method: don't bother dumping out the _DOD contents * cmos: cmosdump: add in some previously unknown RTC settings * README: Updated for latest version of fwts. Add more info too. * README_SOURCE: Reformat to make it 80 char width friendly, minor changes. * src: lib: Makefile.am: Minor tidy up of the makefile. * src: acpica: Makefile: Slight tidy up of the makefile. * src/Makefile.am: Tidy up fwts main makefile, re-order tests * lib: fwts_apci_method: rename object evaluation functions * acpi: pcc: renaming of ACPI object evaluation function names * acpi: method: renaming of ACPI object evaluation function names * lib: rename fwts_acpi_method to fwts_acpi_object_eval * lib: fwts_ac_adapter: constify some struct fields and variables * lib: fwts_guid: constify guid_str_len and guid_len parameters * lib: fwts_framework: test names should be dislayed in a wider format field * data: klog: Remove a duplicate timer BIOS bug check * data: klog.json: Add more specfic parse/execution failure checks on timeouts * data: klog.json: move the most generic parse/execition failure message down * acpi: acpidump: use offsetof macro from stddef.h rather than define our own * acpi: pcc: fix some stupid typos * hpet: hpetcheck: add ACPI HPET table check * lib: update copyright year to 2013 * tests: update copyright year to 2013 * misc: update copyright year to 2013 * lib + tests: don't stringify the test name in FWTS_REGISTER * lib: fwts_framework: assert on FWTS_REGISTER names being too long * lib: framework: log the fwts command line for reference. * acpi: acpidump: fix ACPI FPDT dump * cpu: cpufreq: fix a bunch of 32 bit build errors * lib: fwts_acpi_tables: speed up table loading on 64 bit systems * acpica: fwts_acpica: optimise semaphore tracking * acpica + acpi: method test: remove fwts_acpica_simulate_sem_timeout() * acpica: fwts_acpica: force indefinite AML Wait() to timeout * acpi: method: Add better _CRS resource checking * data: klog.json: fix spelling mistake * data: klog.json: fix spelling mistake [Ivan Hu] * uefirtvariable: add more specific passed messages for each sub-tests * uefirtvariable: add the function to print out the return status messages * uefirttime: print out the return status and description when errors occur * uefirttime: unload the efi_runtime module when deinit the test * uefirtvariable: remove the invalid attribute tests after ExitBootServices() is performed * uefirtvariable: add function test for SetVariable with invalid attributes * fwts_uefi:uefirtvariable:use sizeof() for defining long integer for fixing build failure on 32 bit systems * uefirtvariable: restore the environment when errors occur after the test variables have been set * uefirtvariable: add new test for UEFI runtime QueryVariableInfo * uefirtvariable: add stress test for UEFI runtime interface GetVariable * uefirtvariable: add stress test for UEFI runtime interface GetNextVariableName * uefirtvariable: add stress test for UEFI runtime interface SetVariable with the same data * uefirtvariable: add stress test for UEFI runtime interface SetVariable with different data * uefirtvariable: add stress test for UEFI runtime interface SetVariable with different name * uefirtvariable: add stress test for UEFI runtime interface SetVariable with different name and data * uefirtvariable: skip the tests when get the EFI_OUT_OF_RESOURCES from firmware * uefirtvariable: add stress test for the UEFI runtime QueryVariableInfo interface * uefirtmisc: add the test for UEFI runtime GetNextHighMonotonicCount interface * uefirtmisc: add stress test for UEFI runtime GetNextHighMonotonicCount interface [Keng-Yu Lin] * uefi: uefirtvariable: use sizeof() for finding the bit size of long integer * debian: change the mail address of the maintainer * auto-packager: mkpackage.sh: Add raring -- Keng-Yu Lin Thu, 17 Jan 2013 14:01:06 +0800 fwts (0.26.03-1) raring; urgency=low [Colin Ian King] * data: klog.json: fix up and correct a few miscellaneous klog items * data: klog.json: promote EC error so it gets caught before generic handler * kernel: version: make test infoonly rather than pass/fail tests * cpu: cpufreq: spell Ghz as GHz and Mhz and MHz * cpu: cpufreq: Make this test no longer experimental. * lib: fwts_pipeio: fwts_pipe_exec() should return FWTS_ERROR instead of -1 * lib + tests: modify fwts_pipe_exec to return the child exit status * acpi: apicinstance: make this an Intel x86 only test * acpi: method: handle ACPI failures a little more gracefully * apci: aspm: clean up messages * acpi: acpidump: print a message if no ACPI tables could be found. * lib: fwts_dump_data: tidy up code, ensure we limit nbytes to 16 * data: klog.json: Add next 20 or so ACPI_ERROR messages * utilities: kernelscan: Add check for ACPI_ERROR_METHOD kernel errors * data/klog.json: Scan for all the ACPI_ERROR_METHOD kernel errors * acpi: acpidump: fix formatting of bit fields * data/klog.json: Update a parse/execution failure advice line * acpi: acpiinfo: Complete reworking to bring it up to date. * acpi: fadt: only perform port read on valid port widths * pci: aspm: make pcie_capability a packed struct type * bios: mtrr: remove unused VGA region check * bios: mtrr: move buffer memset() to after failed is declared. * bios: mtrr: make the failed flag a boolean * bios: mtrr: make is_prefetchable() return a bool type * bios: mtrr: make skiperror a boolean * acpi: dmar: Make this test no longer experimental. * lib: fwts_cmos: fix build error with non-Intel architectures * lib: fwts_smbios: fix build error with non-Intel architectures * lib: fwts_virt: fix non-Intel build errors * acpi: pcc: make this test an Intel only test * bios: mtrr: make prefetchable checks handle lspci exec failures * bios: mtrr: remove mtrr_test4 because we're removed FWTS_TEST_VGA_REGION * lib, tests: remove fwts common test, merge into fwts klog [Ivan Hu] * uefirtvariable: Add new test for UEFI runtime GetVariable * uefirtvariable: Add new test for UEFI runtime GetNextVariableName * uefirtvariable: Add new test for UEFI runtime SetVariable, subtest 1 * uefirtvariable: Add new test for UEFI runtime SetVariable, subtest 2 * uefirtvariable: Add new test for UEFI runtime SetVariable, subtest 3 * uefirtvariable: Add new test for UEFI runtime SetVariable, subtest 4 * uefirtvariable: Add new test for UEFI runtime SetVariable, subtest 5 -- Keng-Yu Lin Mon, 17 Dec 2012 15:13:11 +0800 fwts (0.26.02-1) raring; urgency=low [Alex Hung] * acpi: mcfg: Set MCFGMMIONotReserved error to low [Colin Ian King] * fwts_mmap: fwts_page_size fix comparing size_t against -1 * lib: fwts: add FWTS_UNUSED() macro for unused func arguments * lib: fwts_*: use FWTS_UNUSED on unused func args in fwts library * lib: Makefile.am: enable -Wextra * dmi: dmi_decode: remove some redundant range changes on uint8_t values * tests: use FWTS_UNUSED on unused func args * Makefile.am: enable -Wextra * lib: include: fwts_log, add in new label field * lib: klog: load labels from json data file rather than auto-generate * data: klog.json: add in label for each error message * lib: klog: tidy up the code a little * utilities: kernelscan: Tool to scan kernel for error messages * utilities: kernelscan: tidy up the formatting of output messages. * utilities: kernelscan.sh: scan various directories for kernel error messages * utlities: kernelscan: make some regex optimisations * utilities: kernelscan: fix comment that explains how to use this tool * utilities: kernelscan.sh - add execute flag to script * data: klog.json: Add support for ACPI fan and ACPI processor throttling * data: klog.json: Add support for the ACPI SMBUS driver * data: klog.json: Add support for the ACPI utils kernel error messages * data: klog.json: Add support for the ACPI processor_idle kernel error messages * data: klog.json: Add support for the ACPI arch x86 kernel sleep * data: klog.json: Add support for the ACPI container handler * data: klog.json: Add support for the ACPI Lid errors * data: klog.json: Add support for the ACPI Docking handler * data: klog.json: Add support for the ACPI EC handler * data: klog.json: Add support for the ACPI thermal zone handler. * data: klog.json: Add support for the ACPI device power handler * data: klog.json: Add support for the ACPI PCI root handler * data: klog.json: Add support for the ACPI initialisation error messages * data: klog.json: Add support for the ACPI blocklisting messages * data: klog.json: Add support for the ACPI osl messages * data: klog.json: Add support for the ACPI memory hotplug messages * data: klog.json: Add support for the ACPI glue code * data: klog.json: Add support for the ACPI video handler * data: klog.json: Add support for the ACPI processor perf driver * data: klog.json: Add support for the ACPI processor driver * data: klog.json: Add support for the ACPI PCI link control messages * data: klog.json: Add support for the ACPI PCI slot messages * data: klog.json: Add in some more miscellaneous ACPI error messages * data: klog.json: Add support for the ia64 ACPI handler. * data: klog.json: Add support for the x86 MTRR kernel messages * data: klog.json: Add support for various BIOS and PnPBIOS kernel messages * utilities: kernelscan: add in ACPI configs and more printk message types * utilities: kernelscan.sh: Add more paths to scan * data: klog.json: Add support for the APM driver kernel messages * data: klog.json: Add support for E820 handler in 3.2.x Kernels * utilities: kernelscan.sh: Check that the file exists * utilities: kernelscan.c: Add scanning for ACPI_ERROR * cpu: microcode: ensure we don't overflow with strncpy * pci: maxreadreq: ensure we don't overflow with strncpy * data: klog.json: ACPICA ACPI_ERROR messages * data: klog.json: ACPICA ACPI_ERROR messages * data: klog.json: ACPI ACPI_ERROR messages * data: klog.json: ACPICA ACPI_ERROR messages * data: klog.json: ACPICA ACPI_ERROR messages * data: klog.json: ACPICA ACPI_ERROR messages * lib: fwts_oops: check for WARN_ON messages as well as oopses * kernel: oops: also check for WARN_ON messages found * acpi: s3: also check for WARN_ON messages found * acpi: s4: also check for WARN_ON messages found * data: klog.json: ACPICA ACPI_ERROR messages * data: klog.json: ACPICA ACPI_ERROR messages * data: klog.json: ACPICA ACPI_ERROR messages * data: klog.json: ACPICA ACPI_ERROR messages * utilities: kernelscan.c: add scanning for ACPI_BIOS_ERROR messages * lib: fwts_test: calloc being called with args swapped * lib: fwts_oops: fix fwts_oops_check dereference checks on oopses and warn_ons * utilities: kernelscan: swap calloc arguments in unget_next() * utilities: kernelscan.c: add scanning for ACPI_EXCEPTION messages * acpi: pcc: New test to sanity check PCC, (LP: #863175) * data: klog.json: ACPICA ACPI_ERROR messages, exutils.c * data: klog.json: ACPICA ACPI_ERROR messages, utmath.c * data: klog.json: ACPICA ACPI_ERROR messages, dswload2.c * data: klog.json: ACPICA ACPI_ERROR messages, utexcep.c * data: klog.json: ACPICA ACPI_ERROR messages, hwxfsleep.c * data: klog.json: ACPICA ACPI_ERROR messages, exoparg2.c * data: klog.json: ACPICA ACPI_ERROR messages, evevent.c * data: klog.json: ACPICA ACPI_ERROR messages, utmutex.c * lib: fwts_framework: make framework magic id into a uint32_t * lib: fwts_framework: failed_level should be type fwts_log_level * lib: fwts_framework: show_progress flag should be a bool * lib: fwts_framework: print_summary should be a bool * lib: fwts_framework: use fwts_framework_flags instead of int * lib: fwts_framework: make test priority a strongly typed enum * lib: fwts_klog: forgot to log a klog error using the pattern string * lib: fwts_klog: Don't regex compile non-regex strings * lib: fwts_framework, fwts_klog: Add filtering to fwts errors * lib: fwts_framework: sanity check new options * doc: Add new --filter-error-discard and --filter-error-keep options. * data: klog.json: Add the final set of ACPI_EXCEPTION errors * data: klog.json: fix up the RSDP error exception advice to make more sense * data: klog.json: Add all the ACPI_BIOS_ERROR messages [Ivan Hu] * klog: change the MSR_IA32_ENERGY_PERF_BIAS test from fauilure to info * uefirttime: add the fwts test for the UEFI get wakeup time runtime service * uefirttime: add the fwts test for the UEFI set wakeup time runtime service * cpufreq: fix the CPUFreqCPUsSetToSW_ANY failed LP#1076694 * cpufreq: fix the CPUFreqSW_ALL and CPUFreqSW_ANY failed LP#1076694 [Keng-Yu Lin] * data: klog.json: remove the duplicated KlogEnergyPerfBiasSetToNormal item -- Keng-Yu Lin Thu, 29 Nov 2012 13:52:59 +0800 fwts (0.26.01-1) raring; urgency=low [Alex Hung] * pcie: aspm: add more information for L0s and L1 warnings (LP: #1055430) * hotkey: remove redundant framework parameter from hotkey_find_keyboard * bios: hdaaudio: fix user pin configurations (user_pin_configs) is not checked. [Colin Ian King] * lib: acpi: add ACPI 5.0 GIC and GICD structs to MADT * acpi: acpidump: Dump out the new MADT GIC and GICD structures * acpi: acpitables: Add checks for MADT GIC and GICD * acpi: acpitables: fix typo in LAPICX2 APIC NMI Flags tag * lib: acpi: Add support for the new ACPI 5.0 PCCT * acpi: acpidump: Add support for ACPI 5.0 PCCT * acpi: apcidump: Add ACPI 5.0 support for boot flag CMOS RTC present bit * acpi: method: re-order tests based on location in specification * acpi: method: re-order method test functions * acpi: method: tidy source; 80 columns wide formatting * acpi: method: add some more comments * acpi: method: clean up spacing in for loops * acpi: method: add in all ACPI control method and objects * acpi: method: add DDN, HID, HRV, PLD, SUB, STR checks * acpi: method: add checks for EDL, RMV, STA * acpi: method: add BCT test * acpi: method: add checks for GCP, GRT, GWS * acpi: method: Add check for GSB * acpi: method: Add check for SEG * acpi: method: Add PRx, SxD, SxW checks * acpi: method: fix typo SWP --> SWS * acpi: method: Add _S0_ .. _S5_, _SWS checks * acpi: method: Add CPC, CSD, PCT, PDL, PPC, TDL, TSD and TSS checks * bios: smbios: fix typo Stucture ==> Structure * cpu: virt fix typo extentions ==> extensions * cpu: virt: fix typo originall ==> originally * lib: fwts_formatting: fix typo upto ==> up to * lib: fwts_log_html: fix typo convertion ==> conversion * lib: fwts_checkeuid: fix typo priviledges ==> privileges * example: blank test: fix typos ommitted ==> omitted * acpi: wakealarm: fix typo existance ==> existence * acpi: acpitables: fix typo managment ==> management * acpi: acpidump: print format using inttypes * acpi: acpitables: print format using inttypes * acpi: checksum: print format using inttypes * acpi: fadt: print format using inttypes * acpi: method: print format using inttypes * acpi: s3power: print format using inttypes * bios: bios32: print format using inttypes * bios: ebda_region: print format using inttypes * bios: ebdadump: print format using inttypes * bios: mtrr: print format using inttypes * bios: mpcheck: print format using inttypes * cpu: msr: print format using inttypes * dmi: dmi_decode: print format using inttypes * hpet: hpet_check: print format using inttypes * lib: fwts_memorymap: print format using inttypes * uefi: csm: print format using inttypes * uefi: uefidump: print format using inttypes and whitespace tidy * lib: fwts_acpid: fix checking of return from read() * lib: fwts_acpi_method: fix for loop index type * lib: fwts_dump: fix loop variable type to match table length type * lib: fwts_framework: Make string length type a size_t rather than an int * lib: fwts_framework: remove redundant parameter from fwts_framework_run_test * lib: fwts_framework: remove redundant fw parameter from fwts_framework_show_tests_brief * lib: fwts_framework: remove fw parameter from fwts_framework_test_find * lib: fwts_framework: remove fw parameter from fwts_framework_skip_test_parse * lib: fwts_battery: remove redundant framework parameter in helper functions * lib: fwts_button: Remove framework parameter from fwts_button_match_state_proc * lib: fwts_button: fix comment on function name * acpi: acpidump: fix a bunch of int type issues. * acpi: acpitables: use the correct type for failed * acpi: mcfg: make mcfg_size a ssize_t * acpi: wmi: make size a size_t * bios: bios_info: fix bug where product_serial was not being dumped * bios: hdaaudio: remove redundant fw parameter from hda_audio_check_pins * bios: dmi_decode: remove redundant parameters from helper functions * dmi: dmi_decode: failed_count should be uint32_t * pci: aspm: remove redundant parameter in pcie_check_aspm_registers * cpu: maxfreq: remove redundant init and deinit functions * hotkey: remove redundant framework parameter from hotkey_find_keymap * uefi: csm: use uint32_t for BIOS address ranges * uefi: uefidump: cast to ptrdiff_t to remove mixed signed/unsigned comparison * acpi: method: fix a bunch of mixed type comparison issues * lib: fwts_alloc: use ptrdiff_t to ensure non-mixed type comparison * lib: fwts_json: wrapper for json error returns * lib: fwts_klog: use FWTS_JSON_ERROR macro for error checking * acpi: syntaxcheck: use FWTS_JSON_ERROR macro for error checking * uefi: uefidump: remove FWTS_FLAG_UNSAFE from test. * lib: fwts_ac_adapter: constify state * lib: fwts_acpi_method: constify funcs and static tables * lib: fwts_acpi_tables: constify func arguments where appropriate * lib: fwts_args: constify func arguments where appropriate * lib: fwts_battery: constify func arguments where appropriate * lib: fwts_button: constify function arguments where appropriate * lib: fwts_checkeuid: constify function arguments where appropriate * lib: fwts_hwinfo: constify function arguments where appropriate * lib: fwts_memorymap: constify function arguments where appropriate * lib: fwts_log: constify function arguments where appropriate * lib: fwts_summary: constify function arguments where appropriate * cpu: cpufreq: add init function to determine number of CPUs * lib: fwts_mmap: add fwts_page_size() * acpi: acpidump: correctly dump out MCFG configuration * acpi: mcfg: use fwts_acpi_mcfg_configuration as defined in fwts_acpi.h * acpi: mcfg: more code tidying. * acpi: mcfg: split into two distinct tests [Ivan Hu] * efi_runtime: add efi_runtime kernel driver module into fwts * efi_runtime: add checking the efi environment * efi_runtime: add UEFI runtime service QueryVariableInfo interface * efi_runtime: add UEFI runtime service GetNextHighMonotonicCount interface * lib: fwts_efi_module: add fwts library helper fuctions for efi_runtime module * uefirttime: add fwts tests for the UEFI get/set time runtime services [Keng-Yu Lin] * uefi: Add fwts-efi-runtime-dkms package * Add autotools scripts for the data directory -- Keng-Yu Lin Thu, 25 Oct 2012 16:14:43 +0800 fwts (0.26.00-1) quantal; urgency=low [Colin Ian King] * uefi: uefidump: Dump out variables containing kernel messages * uefi: uefidump: add support for ConErrDev * uefi: uefifump: Add support for dumping SecureBoot and SetupMode vars * uefi: uefidump: Add support for dumping MemoryOverwriteRequestControl. * uefi: uefidump: Add support for AcpiGlobalVariable * uefi: uefidump: Add support for SignatureSupport variable * lib: fwts_guid: Add fwts_guid_str_to_buf to convert string back to a GUID * uefi: add in support for new uefivar file system interface * lib: framework: Add "unsafe" test category * lib + tests: bulk rename of fwts flag macros * lib: fwts_framework: fix unnecessary escaping * acpica: Fix segfault when disassembling AML (LP: #1050475) [Keng-Yu Lin] * auto-packager: mkpackage.sh: checksum only the specified version -- Keng-Yu Lin Fri, 14 Sep 2012 13:35:31 +0800 fwts (0.25.07-1) quantal; urgency=low [Chris Van Hoof] * fwts-collect: make sure we are executing as root or with sudo * fwts-collect: reference sudo requirement in show_help() [Colin Ian King] * acpi: method: remove _GTS and _BFS tests * acpi: method: _PSS power dissipation levels can be equal to previous level * acpi: method: only get pedantic about therm returns if values are hard coded * misc: remove old crufty valgrind script * acpica: tidy up code to remove GCC warnings * Add some MTRR specific klog tests. * lib: fwts_klog: sanity check json klog data is readable [Ivan Hu] * msr: remove the IA32_A_PMC0-3 and IA32_TSC_AUX from cosistent test * mtrr: fix mtrr checking without devices that are under bridges [Keng-Yu Lin] * auto-packager: Add Quantal and remove Maverick * auto-packager: update mkpackage.README * auto-packager: Add mktar.sh to make the release tarball * auto-packager: mkpackage.sh to handle the released tarball * auto-packager: Update the mkpackage.README * debian: change source package format to 3.0 (quilt) * Add dh-autoreconf support and clean up generated files (LP: #1042287) -- Keng-Yu Lin Wed, 05 Sep 2012 16:31:13 +0800 fwts (0.25.06) quantal; urgency=low [Alex Hung] * acpi: method: Change _BBN's test_type from METHOD_MOBILE to METHOD_OPTIONAL [Colin Ian King] * acpi: acpidump: add extra ACPI 5.0 fields to FACP * acpi: acpidump: Add support for bit 20 and 21 of FADT flags * Update FADT preferred PM profile to add Tablet * dmi: dmi_decode: make advice more relevant to data handled by the kernel * Add mutex around semaphore counting (LP: #1017388) * acpi: method: remove race delay kludge * lib: acpi_acpi_tables: Add tables based on ACPI name and not file name. * lib: fwts_acpi_tables: Force fixup on XSDT and RSDT when loading from .dat files * lib: acpica: fix semaphore counting by waiting for threads to complete * acpica: incorporate new ACPICA sources to enable fwts to build * acpica: use latest ACPICA source * Update copy-acpica.sh to copy over new sources * Update README_ACPICA.txt to add in new acpica sources * acpi: acpidump + acpi headers: Add simple support for FPDT * acpi: acpidump + acpi headers: Add basic dump of RASF * acpi: acpidump: Add stub for MPST * acpi: acpidump: make arrays static * data: klog.json: make the _OSC failure advice more general and hand-wavy * cpu: cpufreq: cpufreq and cpuidle dirs confusing cpuN parsing * cpu: cpufreq: make progress estimate more accurate * cpu: cpufreq: tidy up table output * cpu: cpufreq: rename some global variables to make them more readable * cpu: cpufreq: various whitespace clean ups * cpu: cpufreq: tidy up memset usage * cpu: cpufreq: make HzToHuman() more efficient * cpu: cpufreq: add need to run as root * bios: mtrr: fix stupid typos * lib: fwts_klog: optimize regex scanning (LP: #1028031) [Keng-Yu Lin] * debian: Add hardening options -- Keng-Yu Lin Fri, 27 Jul 2012 17:22:07 +0800 fwts (0.25.05) quantal; urgency=low [Chris Van Hoof] * live-image/fwts-frontend-text: use mv versus ln as symbolic links are not supported on fat file systems [Colin Ian King] * dmi_decode: Add some more advice text * dmi_decode: Only be pedantic if we are sure about the board type (LP: #1021674) * dmi_decode: report chassis types with 0x prefix since they are in hex * lib: tidy up source, remove trailing whitespaces and empty lines * acpi: method: update table of implemented tests * acpi: method: add new _AEI check * acpi: method: Add stub for ACPI 5.0 _CPC * acpi: method: Add new ACPI 5.0 _PRE * acpi: method: Add new ACPI 5.0 _PSE check * acpi: acpidump: Add ACPI 5.0 GTDT support. * acpi: acpidump: Add ACPI 5.0 BGRT support. * lib: fwts_log_json: do more json object out of memory checking * acpi: acpidump: dump out ACPI UEFI tables * acpi: acpidump: Add SLIC table dump * acpi: acpidump: dump out the DMAR table * acpi: acpidump: dump out the ASF! table * acpi: acpidump: Add dump of TCPA * acpi: s4: hibernate/resume failures should be HIGH failures * acpi: s3: suspend/resume failures should be HIGH failures * Add empty m4 directory so autoreconf does not fail * Remove the autotool generated files * lib: fwts_hwinfo: sort device info before comparing (LP: #1018288) [Keng-Yu Lin] * Install the libraries in pkglib * debian: Add autoreconf parameters -ivf -- Keng-Yu Lin Wed, 11 Jul 2012 13:58:43 +0800 fwts (0.25.04) quantal; urgency=low [Colin Ian King] * apci: acpitables: only check CMOS in BOOT table from firmware tables (LP: #1016469) * lib: fwts_acpi_tables: add ACPI table provenance * lib: fwts_acpi_tables: load tables in deterministically * lib: fwts_log: handle special logfile names * lib: log: move line counting to logging back-ends * lib: fwts_log: remove fwts_log_line_number(), no longer used * lib: fwts_framework: output all logfile names being written to * lib: fwts_log: add fwts_log_get_filenames() * lib: fwts_summary: remove references to log line number [Keng-Yu Lin] * debian: Fix up the dependency of debian packages -- Keng-Yu Lin Mon, 25 Jun 2012 16:44:51 +0800 fwts (0.25.03) quantal; urgency=low [Chris Van Hoof] * live-image/fwts-frontend-text: conditional added to done_tests_finish() which creates a symbolic link to the latest results.html at the top level WORK_DIR * live-image/fwts-frontend-text: adding support for both plaintext and html log out by default with --log-type [Colin Ian King] * apci: checksum: RSDT and XSDT checksum failures should not be critical (LP: #1013168) * lib: fwts_log_html: convert misc ASCII chars to HTML mnemonics * lib: fwts_framework: handle --log-type parse errors * lib: fwts_summary: handle the log_type now that it is a bit map * lib: rework logging and framework to allow for multiple output logs * lib: fwts_framework: handle nested log section endings on ABORT * lib: fwts_log_html: remove timestamp as it is in the heading anyhow * Update README * lib: fwts_acpi_tables: fake table start address when loading from file. * lib: fwts_framework: set log name suffix when using --log-type option * lib: fwts_summary: HTML summary should not be in verbatim * lib: fwts_log_html: tweak style and table format * lib: fwts_memorymap: output should be in verbatim style * bios: mtrr: make MTRR overview all verbatim style, looks better on HTML log * lib: add HTML logging backend * lib: fwts_framework: log advice as LOG_ADVICE and not LOG_RESULT * lib: fwts_framework: remove fwts_framework_results, remove redundant code * lib: fwts_log: add extra log types and upper case flavour of fwts_log_field_to_str_full() * lib: fwts_framework: drop unneccessary \n in log call * lib: add xml logging * lib: fwts_acpi_method: remove leading 0x in front of dumped strings * bios: mtrr: strip off trailing newlines * bios: bios_info: strip off trailing newlines * kernel: version: strip off trailing newline * lib: fwts_wakealarm.c: add more comments * lib: fwts_oops.c: add more comments * lib: fwts_mmap.c: add more comments * lib: fwts_keymap.c: add more comments * lib: fwts_iasl.c: add more comments * lib: fwts_guid.c: add more comments * lib: fwts_button.c: add more comments * lib: fwts_ac_adapter.c: add more comments [Keng-Yu Lin] * debian: update copyright to conform to copyright-format 1.0 * debian: update the control file -- Keng-Yu Lin Tue, 19 Jun 2012 13:31:53 +0800 fwts (0.25.02) quantal; urgency=low * fwts V0.25.02 release (LP: #1004410) [Alex Hung] * acpi: battery: add trip point tests for acpi batteries * lib: fwts_battery: fix incorrect strings for a battery with unit of mWh * lib: fwts_battery: fix no fclose() after fopen is called. * acpi: battery: added cycle count check for acpi batteries. [Colin Ian King] * doc: update man page * lib: fwts_summary.c: force non-word wrap using *_verbatim logging * lib: fwts_framework: default to plaintext log type * lib: re-work logging to add in json formatted log output * lib: fwts_log: tidy up white spaces and strncmps * lib: fwts_log: re-work log underline * lib: move log line number into log struct * lib: fwts_log: remove default line num and test name from log * lib: fwts_args: remove strlen() calls, more efficient and stops valgrind complaining * acpica: fwts_acpica.c: Override ACPICA Semaphores to fix memory leak bug * pci: aspm: make functions static * pci: aspm: free memory from lists * pci: aspm: fix memory read outside buffer * lib: fwts_battery: added interface for cycle count. -- Keng-Yu Lin Fri, 25 May 2012 18:11:11 +0800 fwts (0.25.01) precise; urgency=low [Keng-Yu Lin] * wmi: Fix an error on processing the _WDG data -- Keng-Yu Lin Thu, 26 Apr 2012 10:30:35 +0800 fwts (0.25.00) precise; urgency=low [Alex Hung] * doc: remove --aspm option from man page * pcie: added explanations to aspm messages. [Colin Ian King] * acpi: method: add _PSS test * lib: fwts_acpi_method: gather all object names rather than just method names * acpica: add -fno-strict-aliasing to ignore type punning warnings (LP: #971886) * Update copy-acpica.sh to include new ACPICA sources * acpica: force infinite loops and OS delays to complete faster since timing is not relevant * acpica: fwts_iasl_interface: we need to enable preprocessor to stop ramdom segfaulting * data: syntaxcheck.json: re-order based on new ACPICA error code updates * acpica + lib: fix assemble/dissassemble to work with new ACPICA core * lib: fwts_acpi_tables: ensure we don't overflow a table name when given bad input * Update README_ACPICA.txt to reflect new ACPICA sources added * acpica: fwts_acpica: reworking required for new ACPICA changes * acpica: update Makefiles * acpica: updates to existing ACPICA sources * acpica: new ACPICA sources * lib: fwts_fileio.c: remove unnecessary variable len * acpi: acpidump: remove unnecessary variable n * lib: fwts_tag: use size_t instead of int * lib: fwts_stringextras: use size_t instead of int * lib: fwts_framework: use size_t instead of int * lib: fwts_battery: use size_t instead of int * lib: fwts_acpi_method: use size_t instead of int * acpica: fwts_acpica: use size_t instead of int * acpi: method: use size_t instead of int * acpi: cstates: use size_t instead of int * acpi: acpitables: use size_t instead of int * lib: fwts_args: only handle non-zero length short_names * Update copyright year * Remove old TODO.txt * klog: Add EC transaction failure detection [Keng-Yu Lin] * debian: update Standards-Version and debhelper version -- Keng-Yu Lin Fri, 20 Apr 2012 09:54:15 +0800 fwts (0.24.21) precise; urgency=low [Alex Hung] * pcie: add pcie aspm registers check on root port and device. [Chris Van Hoof] * fwts-frontend: v2 update to conditional logic to better detect if we're booted via casper and additional logic to toggle auto shutdown behaviour when testing [Colin Ian King] * uefi: uefidump: handle realloc failure * lib: fwts_pipeio: handle realloc failure * lib: fwts_args: handle realloc failure * lib: acpid: handle realloc failures in fwts_acpi_event_read() * lib: fwts_acpi_tables: handle fwts_low_realloc() failures * acpica: handle realloc failures in fwts_acpica_vprintf() * lib: fwts_klog: remove redundant free() * acpi: checksum: flag up errors that are critical, add more helpful advice * acpi: checksum: fix typo shorted -> shortened * acpi: checksum: reformat lines to fit into 80 columns * acpi: wmi: use snprintf to be safe * acpi: wmi: const func args * acpi: wmi: reformat source into 80 columns * acpi: dmar: make seg a uint16_t rather than an int * acpi: dmar: make func args const * acpi: acpiinfo: tidy up source * bios: hdaaudio: ensure source fits into 80 columns * bios: hdaaudio: use calloc() instead of malloc() * lib: fwts_tag: handle out of memory failure * bios: ebdadump: ensure source fits into 80 columns * bios: bios32: ensure source fits into 80 columns * lib: arg + framework: more robust out of memory handling. * lib: fwts_stringextras: handle out of memory failure * uefi: uefidump: fix infinite recursion on unknown end terminator (v2) * bios: memmapdump: ensure source fits into 80 columns * acpica: fwts_acpica_init(): handle out of memory failures * bios: mtrr: handle out of memory failures * hpet: hpet_check: make func args const where possible * hpet: hpet_check: ensure source fits into 80 columns * fwts-collect: fix typo * fwts-collect: tidy up error handling * fwts-collect: collect more fwts dumped data * read /proc/mtrr rather than use ioctl() interface [Keng-Yu Lin] * debian: use autoreconf instead of dh-autoreconf -- Keng-Yu Lin Fri, 09 Mar 2012 15:04:30 +0800 fwts (0.24.20) precise; urgency=low [Chris Van Hoof] * debian: update fwts-frontend.install to include fwts-frontend-text man page * doc: addition of fwts-frontend-text man page * src/Makefile: include fwts-frontend-text.1 to man_MANS [Keng-Yu Lin] * auto-packager: change the git location * auto-packager: add Precise release -- Keng-Yu Lin Thu, 09 Feb 2012 18:00:42 +0800 fwts (0.24.19) precise; urgency=low [Alex Hung] * dmi: dmi_decode: check type 3 chassis type with acpi preferred_pm_profile * dmi: dmi_decode: check acpi battery if type 22 is present. * pcie: aspm: use FWTS_ROOT_PRIV flag [Colin Ian King] * cpu: msr: GPF avoidance on BOCHs QEMU systems (LP: #925001) -- Keng-Yu Lin Thu, 09 Feb 2012 13:52:50 +0800 fwts (0.24.18) precise; urgency=low [Alex Hung] * cpu:msr: fixed errors for checking SMRR MSR registers [Keng-Yu Lin] * Fix a typo error of "DSTD" -- Keng-Yu Lin Mon, 06 Feb 2012 16:39:43 +0800 fwts (0.24.17) precise; urgency=low [Alex Hung] * pcie: aspm: add aspm option and detect if the "PCIe ASPM Controls" bit is set in FADT. [Colin Ian King] * Sanity check for MSR_IA32_ENERGY_PERF_BIAS messages. * Since aspm is a test, move it out of the fwts core library * Update copyright year [Keng-Yu Lin] * lib: add PCIe ASPM configuration check in the batch test * debian: use dh-autoreconf -- Keng-Yu Lin Tue, 31 Jan 2012 13:47:48 +0800 fwts (0.24.16) precise; urgency=low [Chris Van Hoof] * Renaming directory 'iso-image' to 'live-image' and 'live-image/fwts_wrapper' to 'live-image/fwts-frontend-text' * Adding a default dialogrc configuration file to select the Ubuntu color palatte when fwts-frontend-text is executed * Adding a bit of conditional logic to fwts-frontend-text to better detect if executed in a live image and setting defaults which make the script easier to control * debian: adding fwts-frontend.install * debian: update control file to build the _optional_ fwts-frontend package -- Keng-Yu Lin Mon, 09 Jan 2012 11:08:06 +0100 fwts (0.24.15) precise; urgency=low * lib: fwts_acpi_find_rsdp_bios should only scan for RSDP on Intel/AMD * cpu: msr: disabled test for non-Intel/AMD architectures -- Keng-Yu Lin Mon, 09 Jan 2012 10:17:46 +0100 fwts (0.24.14) precise; urgency=low * Add copy-acpica.sh script that updates the ACPI * data: klog: add _OSC evaluation failure tests * data: klog: add _CRS evaluation PNP kernel erro * uefi: csm: fix typo. -- Keng-Yu Lin Wed, 16 Nov 2011 11:49:04 +0800 fwts (0.24.13) precise; urgency=low * acpi: power_button: remove check on /proc/acpi/button/power * lib: fwts_button: add power button support * acpi: lid: use button helper * lib: add generic button helper into lib * lib: add generic button helper -- Colin King Tue, 9 Nov 2011 12:37:00 +0100 fwts (0.24.12) precise; urgency=low * debian: update control * uefi: add UEFI CSM check. -- Colin King Tue, 9 Nov 2011 10:05:00 +0100 fwts (0.24.11) oneiric; urgency=low * lib: update battery helpers and re-work tests * acpi: s3power: use fwts_battery helper * lib: add fwts_battery * s3power: use fwts_ac_adapter() * acpi: ac_adapter: use fwts_ac_adapter lib * lib: add fwts_ac_adapter * acpi: ac_adapter: use newer /sys interface * acpi: method: clean up dangling whitespaces * acpi: method: handle mobile platform tests when FADT is lying * acpi: method: dump return object on non-null return failures. * acpi: method: make lock delay between each test 0 usecs * acpi: method: on non-mobile tests explicitly report skipped mobile tests * lib: fwts_cmos: disabled interrupts during port I/O (LP: #880472) * bios: pciirq: fix typo * bios: pnp: fix typo in event_notification_addr -- Colin King Fri, 4 Nov 2011 09:09:00 +0100 fwts (0.24.10) oneiric; urgency=low * fwts-collect: fix mpdump log and don't remove README.txt * doc: remove --dmidecode option from man page * pci: crs: fetch BIOS date from /sys/class/dmi/id/bios_date * lib + tests: remove framework dmidecode and --dmidecode option * lib: fwts_dump: don't use fw->dmidecode anymore * lib: fwts_dump: warnings if not being run by root. * lib: fwts_framework: fwts_framework_show_version() more generic * lib + tests: add warning flag to fwts_check_root_euid() * klog: enable this for non-x86 * pci: maxreadreq: enable this for non-x86 * kernel: oops: enable this for non-x86 * lib: fwts_dump: do sensible non-x86 dumps * lib: fwts_smbios: fix non-x86 build failure. -- Colin King Thu, 20 Oct 2011 09:11:00 +0100 fwts (0.24.09) oneiric; urgency=low * bios: Add PnP Installation Check structure test * bios: pciirq: fix formatting * bios: Add Legacy PCI IRQ Routing Table test -- Colin King Wed, 19 Oct 2011 18:41:00 +0100 fwts (0.24.08) oneiric; urgency=low * debian: remove dependancy on dmidecode * pci: crs: get BIOS date from SMBIOS rather than rely on dmidecode * lib: fwts_smbios: add in fwts_dmi_header from dmi_decode * lib: fwts_smbios, fetch version number too. * dmi: dmi_decode: complete re-write, better detection (LP: #874373) * bios: smbios: handle legacy DMI header * lib: smbios: handle legacy DMI header * lib: tidy up headers * bios: smbios: use smbios find helper * lib: add smbios find helper * bios: smbios: check header fully and dump fields (LP: #876331) * bios: bios32: use fwts_checksum * acpi: checksum: use fwts_checksum * lib: fwts_acpi_tables: use fwts_checksum * lib: multiproc: use fwts_checksum * lib: add checksum helper fwts_checksum() * bios: smbios: use systab efi helper * lib: fwts_acpi_tables: use systab efi helper * lib: add efi systab scanning helper. * acpi: fwts_apci_method + method: improve error checking and object dumping -- Colin King Tue, 18 Oct 2011 16:36:00 +0100 fwts (0.24.07) oneiric; urgency=low * uefi: uefidump: use new fwts_guid_buf_to_str() * acpi: wmi: use new fwts_guid_buf_to_str() * lib: Add GUID string formatting * acpi: method: use acpi_methods_* funcs * lib: add acpi_methods_* handling -- Colin King Fri, 14 Oct 2011 15:56:00 +0100 fwts (0.24.06) oneiric; urgency=low * libfwtsiasl: ensure .y builds are not racey * acpi: method: fix typo on method_exists() func name * lib: fwts_log: fix off-by error on month on %date (LP: #872736) * Add debian autopackager -- Colin King Thu, 13 Oct 2011 11:29:00 +0100 fwts (0.24.05) oneiric; urgency=low * libfwtsiasl: fix pbuilder warnings * Add notes on structure and coding conventions of fwts * example: blank test - fix to use new framework style * fwts_wrapper: update copyright dates * Remove old cruft * Update README_ACPICA to keep in sync with latest ACPICA * Update with autoreconf respin * Update to ACPICA, commit 45ebe2cf90521fe511b827007e9c1e5c610292b6 -- Colin King Fri, 7 Oct 2011 19:01:00 +0100 fwts (0.24.04) oneiric; urgency=low * acpi: checksum: output correct checksum value (LP: #869018) * framework: -T option should be -t, (LP: #868226) * klog: detect WMI driver pr_info() warning messages (LP: #865384) -- Colin King Thu, 6 Oct 2011 14:50:00 +0100 fwts (0.24.03) oneiric; urgency=low * acpi: acpitables: Tidy FADT RESET_REG error message. * acpi: method: relax _BIF, _BIX tests. * acpi: acpitables: fix spurious advice infomation (LP: #862170) * acpi: method: less noisy errors when many _BCL levels are in wrong order. * acpi: method: Check _BST charging + discharging more thoroughly (LP: #862153) -- Colin King Thu, 29 Sep 2011 10:48:49 +0100 fwts (0.24.02) oneiric; urgency=low * acpi: method: check AE_OK return from AcpiEvaluateObject() * pci: maxreadreq: add more helpful advice (LP: #859651) * acpi: method: Make incorrect _WAK returns non-fatal as kernel ignores these anyway. * lib: fwts_hwinfo: do pactl checking correctly (LP: #837606) -- Colin King Wed, 28 Sep 2011 11:42:00 +0100 fwts (0.24.01) oneiric; urgency=low * add fwts-collect man page * debian: add fwts-collect to fwts installer * scripts: fwts-collect - collect up logs for bug reporting -- Colin King Tue, 20 Sep 2011 18:28:46 +0100 fwts (0.24.00) oneiric; urgency=low * iso-image: fwts_wrapper dialog wrapper script. * assets: fwts logo -- Colin King Tue, 20 Sep 2011 18:16:00 +0100 fwts (0.23.23) oneiric; urgency=low * cmos: cmosdump: fix floppy disk info * cmos: cmosdump: fix register 0x0b dump (LP: #837969) -- Colin King Wed, 31 Aug 2011 17:07:34 +0100 fwts (0.23.22) oneiric; urgency=low * declare various private variables and functions static (LP: #837215) * bios: multiproc: make mpdump_get_apic_id static * bios: multiproc: remove redundant mpcheck_get_apic_id() * cpu: virt: make cpu_has_vmx static * acpi: lid: make lid_*() static * acpi: ac_adapter: make ac_adapter_check_field static * acpi: powerbutton: make power_button_check_field static * acpi: brightness: make *_setting static * cpu: virt: make cpu_has_svm, vt_locked_by_bios static * lib: framework: make init funcs static * acpi: wmi: make wmi_wdg_flags_to_text() static * bios: mtrr: rename fwts_virt_cpuinfo to fwts_cpuinfo * acpi: acpidump: make table_vec static * cpu: msr: make cpuinfo static * acpi: ac_adapter: make ac_adapterdir static * acpi: lid: make liddir static * acpi: powerbutton: make power_buttondir static * bios: mtrr: remove redundant mtrr_resource * acpi: acpidump: fix typo 'Sealed Case' * cpu: msr: drop TSC_AUX and SMBASE tests (LP: #834591) -- Colin King Tue, 30 Aug 2011 09:18:53 +0100 fwts (0.23.21) oneiric; urgency=low * acpi: acpitables: remove false positive warnings (LP: #833644) * acpi: method: don't run mobile platform tests on servers (LP: #834554) * bios: mpcheck: check uniqueness of CPU APIC IDs (LP: #834504) * acpi: cstates: drop experimental status of the test. -- Colin King Fri, 26 Aug 2011 11:05:19 +0100 fwts (0.23.20) oneiric; urgency=low * hpet: hpet_check: get HPET base on newer kernel logs (LP: #832273) -- Colin King Tue, 23 Aug 2011 19:56:23 +0100 fwts (0.23.19) oneiric; urgency=low * apci: fan: use newer thermal interface, test fans on loaded CPU (LP: #831905) -- Colin King Tue, 23 Aug 2011 12:12:12 +0100 fwts (0.23.18) oneiric; urgency=low * lib: acpica: ensure table pointers are NULL when table input is corrupt (LP: #826774) -- Colin King Mon, 15 Aug 2011 15:33:30 +0100 fwts (0.23.17) oneiric; urgency=low * acpi: method: tidy up source. * acpi: acpitables: tidy up source. * acpi: wmi: tidy up source. * acpi: wakealarm: tidy up source. * acpi: syntaxcheck: tidy up source. * acpi: s4: tidy up source. * acpi: s3power: tidy up source. * acpi: s3: tidy up source. * acpi: powerbutton: tidy up source. * acpi: osilinux: tidy up source. * acpi: mcfg: tidy up source. * acpi: lid: fix failure format string (LP: #826676) * acpi: klog: tidy up source. * acpi: fan: tidy up source. * acpi: fadt: tidy up source. * acpi: dmar: tidy up source. * acpi: cstates: tidy up source. * acpi: common: tidy up source. * acpi: checksum: tidy up source. * acpi: battery: tidy up source. * acpi: apicinstance: tidy up source. * acpi: acpiinfo: tidy up source. * acpi: ac_adapter: tidy up source. -- Colin King Mon, 15 Aug 2011 12:11:12 +0100 fwts (0.23.16) oneiric; urgency=low * cpu: virt: tidy up sources. * cpu: nx: tidy up source. * cpu: msr: tidy up source. * cpu: microcode: tidy up source. * cpu: maxfreq: tidy up source. * cpu: cpufreq: tidy up source. * hotkey: hotkey: tidy up source. * dmi: dmi_decode: fix failure format string (LP: #826418) * kernel: version: tidy up source. * kernel: oops: tidy up source. * cmos: cmosdump: tidy up source. * apic: apicedge: tidy up source. * pci: maxreadreq: tidy up source. * pci: crs: tidy up source. -- Colin King Sun, 14 Aug 2011 21:04:00 +0100 fwts (0.23.15) oneiric; urgency=low * lib: fwts_framework: helper macros: use fmt arg * bios: os2gap: add more failure info. * bios: smbios: tidy up source. * bios: romdump: tidy up source. * bios: os2gap: fix failure format string (LP: #825945) * bios: mtrr: tidy up source. * bios: memmapdump: tidy up source. * bios: hdaaudio: tidy up source. * bios: ebda_region: tidy up source. * bios: ebdadump: tidy up source. * bios: bios_info: tidy up source. * bios: bios32: tidy up source. * bios: mpcheck: tidy up source. -- Colin King Sat, 13 Aug 2011 21:33:00 +0100 fwts (0.23.14) oneiric; urgency=low * lib: fwts_acpi_tables: make acpidump parsing more resiliant to bad data. * lib: fwts_acpi_tables: read in data correctly (LP: #818042) * acpi: checksum: handle RSDP. * lib: fwts_acpi_tables.h: add fwts_acpi_checksum * lib: fwts_acpi_tables: name RSD PTR to RSDP. * lib: fwts_acpi_tables: handle ACPI 1.0 sized RSDP * lib: fwts_acpi: rsdp requires a 64 bit xsdt * acpi: syntaxcheck: log errors as per-test failures and include unique error code in error. * acpi: acpitables: add more advice, deprecate FACS test, it was nonsense. -- Colin King Fri, 29 Jul 2011 17:28:00 +0100 fwts (0.23.13) oneiric; urgency=low * lib + method test: better handling of object eval errors. (LP: #816877) * apci: method: detect zero sized access bit width (LP: #816877) * acpi: method: check for NULL _DDC and _UID object returns. * acpi: method: only derefernce non-null _DOD objects (LP: #816824) * lib: acpica: make hash unsigned int (LP: #816819) * acpi: syntaxcheck: don't erroneously put syntaxcheck_table. * cmosdump: print drive info with %hhu and pluralise. * mpcheck: print uint8_t values with %hhu * mtrr: print entry reg as uint8_t. * bios32: print bios32 values in hex. * fadt: ensure we print out preferred_pm_profile as 8 bit int. * acpitables: ensure we are printing out correct int values. * acpi: wmi: fix typo in test identifier. -- Colin King Wed, 27 Jul 2011 14:17:23 +0100 fwts (0.23.12) oneiric; urgency=low * lib + tests: add unique test label that identifies each failure test. * lib + tests: replace fwts_failed_low with fwts_failed. * lib + tests: replace fwts_failed_medium with fwts_failed. * lib + tests: replace fwts_failed_high with fwts_failed. * lib + tests: replace fwts_failed_critical with fwts_failed. * lib: remove fwts_failed_level macro * lib + tests: fwts_failed now includes log level. * lib: fix ARM FTBFS (LP: #814745) * apcica lib: fake PCI config reads (LP: #813376) -- Colin King Mon, 25 Jul 2011 14:54:44 +0100 fwts (0.23.11) oneiric; urgency=low * data: klog.json: add 7 more MTRR BIOS misconfiguration log checks. -- Colin King Mon, 18 Jul 2011 16:44:42 +0100 fwts (0.23.10) oneiric; urgency=low * lib: fwts_log: increase log width. * apci: method: reduce infinite AML loops to 0x0100 iterations. * cpu: msr: remove redundant variable 'failed'. * cpu: cpufreq: remove redundant variable i * bios: smbios: comment out redundant assigment. * acpi: method: fix ommitted args to method evaluate calls. * lib: fwts_framework: remove redundant var percent. -- Colin King Tue, 5 Jul 2011 17:42:00 +0100 fwts (0.23.09) oneiric; urgency=low * acpi: syntaxcheck: fix segfault due to null error list (LP: #805980) -- Colin King Tue, 5 Jul 2011 15:45:20 +0100 fwts (0.23.08) oneiric; urgency=low * kernel: oops: make oops failures critical (LP: #797649) -- Colin King Wed, 15 Jun 2011 12:08:00 +0100 fwts (0.23.07) oneiric; urgency=low * fix changelog LP bug number formatting * fix incorrect aborted total (LP: #789114) * fix table loading (LP: #784013) * fwts_iasl: fix segfault on bad input (LP: #781709) * acpi: method: fix incorrect sem counts (LP: #744405) -- Colin King Fri, 27 May 2011 16:20:23 +0100 fwts (0.23.06) oneiric; urgency=low * acpi: s3power: measure power loss during S3 suspend. * lib: fwts_framework: fix LP: #789114, incorrect aborted total * acpi: s3: remove redundant deinit -- Colin King Fri, 27 May 2011 15:17:02 +0100 fwts (0.23.05) oneiric; urgency=low * lib: fwts_acpi_tables: fix LP: #784013, cannot load tables. * acpi: apicinstance: fix 64 bit build error * acpi: acpidump: fix 64 bit build error * lib: fwts_pipeio: fix 64 bit build error * lib: fwts_list: tidy up fwts_list_len -- Colin King Tue, 17 May 2011 16:42:00 +0100 fwts (0.23.04) oneiric; urgency=low * lib: fwts_iasl: fix LP: #781709, segfault on bad input * lib: fwts_stringextras: use const where appropriate * lib: fwts_pipe_read: length should be ssize_t * lib: fwts_mp_checksum: use const where appropriate * lib: fwts_mmap: use const where appropriate * lib: fwts_firmware: remove redundant FLAGS * lib: fwts_cmos_read: offset should be const uint8_t * lib: fwts_tag: use const where appropriate * lib: fwts_uefi: use const where appropriate * lib: fwts_formatting: use const where appropriate * lib: fwts_acpi_tables: use const and size_t where appropriate * lib: fwts_acpi_table_info: make data const void * and length size_t * lib + tests: fwts_acpi_event_read(): use size_t for length * lib: fwts_alloc: use const -- Colin King Thu, 12 May 2011 17:38:00 +0200 fwts (0.23.03) oneiric; urgency=low * acpi: syntaxcheck: remove redundant params * lib: fwts_multiproc: fix -Wextra warnings * lib: fwts_log.h: make magic unsigned int * lib: fwts_klog: fix calloc failure check * lib: fwts_dump: fix -Wextra warnings * lib: fwts_alloc: make magic unsigned int * lib: fwts_interactive: make fwts_getchar more robust * lib: fwts_cpu: call _exit() on signal * lib: fwts_text_list: remove fwts_text_list_dump * doc: manpage: update introduction -- Colin King Wed, 4 May 2011 08:59:42 +0100 fwts (0.23.02) oneiric; urgency=low * debian: control: fix typos * bios: mpcheck: fix reporting of incorrect CPU entry that has suspect LAPIC ID * bios: multiproc: drop APIC version check, fix io_apic_entries feedback. * acpi: method: fix typo in THERM check. * acpi: method: fix false alert with THERM check. * acpi: wmi: fix guidstr: should be all in uppercase. * cpu: msr: Add AMD specific MSR checks. * cpu: msr: add CPU arch specific MSR checks. * lib: fwts_cpu: use sysconf to determine number of CPUs * acpi: method: fix LP: #744405, incorrect sem counts * method: rename *execute* -> *evaluate* * hotkey: check for keyboard find failure. * lib: acpica: disable single step debug when hitting AML_BREAK_POINT opcodes. * bios: hdaudio: minor tidy up of formatting and code. * acpi: s4: remove redundant 'Restarting tasks' check * acpi: wmi: check for known GUIDs -- Colin King Fri, 8 Apr 2011 10:36:52 +0100 fwts (0.23.01) oneiric; urgency=low * work around systems that don't support MAP32_BIT (LP: #739256) -- Colin King Mon, 21 Mar 2011 10:49:00 +0000 fwts (0.23.00) oneiric; urgency=low * post natty freeze, bug fixes and new features * fix segfault of method test on 64 bit machines (LP: #736874) * drop thermal_trip test (LP: #730132) * Fix cstates test (LP: #728685) * acpi: acpidump: use more sensible heading, fix SCI text * hpet: Fail test and skip sanity check when base address not found * bios: ebda_region: close fd on error * acpi: acpidump: use more sensible heading, fix SCI text * hpet: Fail test and skip sanity check when base address not found * bios: ebda_region: close fd on error. * lib: fwts_acpi_tables: check for broken table sizes. * lib: use low memory allocator for ACPI tables * lib: fwts: include fwts_alloc.h * lib: add 32 bit allocator * lib: multiproc: add check of lower 1K region * cpu: msr: fix 64 bit build warnings. * lib: summary: add totals to table. * cpu: msr: add MSR checking. * lib: cpu: add Intel and AMD cpu ident checks. * pci: crs: use FWTS_ROOT_PRIV flag * uefi: uefidump: use FWTS_ROOT_PRIV flag * pci: maxreadreq: use FWTS_ROOT_PRIV flag * hpet: hpet_check: use FWTS_ROOT_PRIV flag * hotkey: hotkey: use FWTS_ROOT_PRIV flag * dmi: dmi_decode: use FWTS_ROOT_PRIV flag * cpu: virt: use FWTS_ROOT_PRIV flag * cpu: nx: use FWTS_ROOT_PRIV flag * cpu: microcode: use FWTS_ROOT_PRIV flag * bios: smbios: use FWTS_ROOT_PRIV flag and remove .init * bios: romdump: use FWTS_ROOT_PRIV flag and remove .init * bios: mpdump: use FWTS_ROOT_PRIV flag * bios: mpcheck: use FWTS_ROOT_PRIV flag * bios: mtrr: use FWTS_ROOT_PRIV flag * bios: ebdadump: use FWTS_ROOT_PRIV flag and remove .init * bios: ebda_region: use FWTS_ROOT_PRIV flag * bios: bios32: use FWTS_ROOT_PRIV flag and remove .init * acpi: wakealarm: use FWTS_ROOT_PRIV flag * acpi: s4: use FWTS_ROOT_PRIV flag * acpi: s3: use FWTS_ROOT_PRIV flag * acpi: mcfg: use FWTS_ROOT_PRIV flag * acpi: fadt: use FWTS_ROOT_PRIV flag * cmos: cmosdump: use FWTS_ROOT_PRIV flag, remove init check * lib: framework: allow FWTS_ROOT_PRIV flag on test * lib: framework: add ROOT_PRIV flag, tidy _run_test * lib: framework: rationalise test status logging. * lib: framework: rename FWTS_*_TEXT to FWTS_FRAMEWORK_*, move typedef into header. * framework + tests: remove .headline, replace with .description * data: klog.json: add 6 MultiProcessor table checks. * lib, bios: mpcheck: move MP header signature to fwts_multiproc.h * bios: multiproc check - fix to make it a batch test. * bios: multiproc check - fix test heading. * add new multiproc table sanity checking. * method: reference /sys/class/thermal rather than /proc/acpi/thermal_zone * tests, lib: use new fwts_ebda_get() primitive * lib: add fwts_ebda_get - return EBDA offset for mmap'ing the region * acpi: acpudump: use more sensible heading, fix SCI text * bios: add ebdadump to dump EBDA region * tests: use fwts_mmap primitives * lib: use fwts_mmap primitives * lib: add fwts_mmap - memory mapping primitives * multiproc: mpdump: collate data into tables. * lib + test: initial MultiProc test support * hpet: Fail test and skip sanity check when base address not found * bios: ebda_region: close fd on error. -- Colin King Thu, 17 Mar 2011 16:43:54 +0000 fwts (0.22.03) natty; urgency=low * Fixes for lintian warnings (LP: #725336) * fix build order (acpica/source/compiler must build first) -- Colin King Fri, 25 Feb 2011 23:15:01 +0000 fwts (0.22.02) natty; urgency=low * clean up libtool linker usage. * fix build order (acpica/source/compiler must build first). * remove redundant 2nd pciutils from control file. * lib: virt: rename exec_cpuid to fwts_exec_cpuid * lib: acpid: rename event funcs with fwts_ prrefix * configure.ac: remove AC_PROG_OBJCOPY * debian: control: add more description to libraries. * acpi: acpidump: fix typo 'suppored' -> 'supported'. * doc: fwts man page: fix - to \- -- Colin King Fri, 25 Feb 2011 16:36:23 +0000 fwts (0.22.01) natty; urgency=low * Fixes for minor bugs (LP: #723746) * bios: mtrr: fix: disable MTRR VGA test as it is not helpful. * doc: fix fwts man page, remove duplicated -s options. * acpi: s3: fix typo. * acpi: method: comments on what needs testing. * bios: mtrr: fix to stop valgrind complaining. * lib: fwts_summary: fix summary fields to fit in 80 columns. -- Colin King Wed, 23 Feb 2011 14:37:00 +0000 fwts (0.22.00) natty; urgency=low * New version for Natty release (LP: #720271) * New upstream version 0.22.00 -- Colin King Wed, 16 Feb 2011 18:47:59 +0000 fwts (0.21.15) natty; urgency=low * summary: collate summary items for a more compact summary. * klog: add better progress feedback when scanning large logs. * args: fix optind offset bug. * klog: add _BCM execution failure check. * klog: add more intelligence to FADT checking. * New upstream version 0.21.15 -- Colin King Wed, 16 Feb 2011 16:20:00 +0000 fwts (0.21.14) natty; urgency=low * acpi: s3,s4: break up pass/fail message summary. * New upstream version 0.21.14 -- Colin King Tue, 15 Feb 2011 19:50:04 +0000 fwts (0.21.13) natty; urgency=low * Print informational count when non-zero * tidy up progress output. * change results text "informational" to "info only". * cpu microcode test: remove need to alloc/free cpu list. * bios mtrr test: check for list_new NULL return. * arg handling: remove need for alloc/free of options_list * sort tests on name when dumping list of available tests. * New upstream version 0.21.13 -- Colin King Sat, 12 Feb 2011 18:38:20 +0000 fwts (0.21.12) natty; urgency=low * Print informational count when non-zero * New upstream version 0.21.12 -- Colin King Fri, 11 Feb 2011 23:29:00 +0000 fwts (0.21.11) natty; urgency=low * Fix skipped message truncation * Make static libs into shared libs * New upstream version 0.21.11 -- Colin King Fri, 11 Feb 2011 22:49:40 +0000 fwts (0.21.10) natty; urgency=low * Extend progress feedback. * New upstream version 0.21.10 -- Colin King Thu, 10 Feb 2011 18:33:39 +0000 fwts (0.21.09) natty; urgency=low * Add more feedback during s3, s4 tests. * Add better arg checking post arg parsing. * Fix a bunch of typos in s3, s4 help. * New upstream version 0.21.09 -- Colin King Thu, 10 Feb 2011 15:13:22 +0000 fwts (0.21.08) natty; urgency=low * Ensure all tests log a passed/failed/skipped/aborted/infoonly state (LP: #715755) * Add --s3-device-check-delay option * Add --s4-device-check-delay option * New upstream version 0.21.08 -- Colin King Wed, 9 Feb 2011 15:08:20 +0000 fwts (0.21.07) natty; urgency=low * Add --s3-quirks option * Add --s4-quirks option * Update man page * New upstream version 0.21.07 -- Colin King Wed, 9 Feb 2011 11:07:02 +0000 fwts (0.21.06) natty; urgency=low * Add hwinfo device checking for s3 and s4 tests * Update man page * New upstream version 0.21.06 -- Colin King Wed, 9 Feb 2011 00:51:47 +0000 fwts (0.21.05) natty; urgency=low * acpi: dmar: don't free table as it's a cached copy. * New upstream version 0.21.05 -- Colin King Tue, 8 Feb 2011 13:38:31 +0000 fwts (0.21.04) natty; urgency=low * s3, s4: multiple tests must run at least twice if multiples not specified. * s4, s4: scan log for oopsing to catch driver/kernel breakages. * oops: Add test to scan for random kernel oopsing. * manpage - fix data/date typo. * New upstream version 0.21.04 -- Colin King Wed, 2 Feb 2011 12:03:03 +0000 fwts (0.21.03) natty; urgency=low * Add uefidump to dump UEFI variables * Fix cmosdump - was dumping too much data in hex dump. * Add klog check for banned ioport operations from AML. * New upstream version 0.21.03 -- Colin King Tue, 25 Jan 2011 15:05:05 +0000 fwts (0.21.02) natty; urgency=low * Add --s4-min-delay, --s4-max-delay, --s4-delay-delta S4 delay options * New upstream version 0.21.02 -- Colin King Fri, 21 Jan 2011 16:06:49 +0000 fwts (0.21.01) natty; urgency=low * Fix null pointer bug * New upstream version 0.21.01 -- Colin King Sun, 16 Jan 2011 19:42:03 +0000 fwts (0.21.00) natty; urgency=low * New version for release (LP: #702821) -- Colin King Fri, 14 Jan 2011 11:13:00 +0000 fwts (0.20.20) natty; urgency=low * acpi: wmi: handle "table not found" correctly. * doc: manpage. fix --disassemble-aml text. * lib: framework: report month correctly (offset by 1) -- Colin King Fri, 14 Jan 2011 09:28:00 +0000 fwts (0.20.19) natty; urgency=low * New version for release (LP: #701843) * lib: framework: add --disassemble-aml to help. * lib: fwts_acpi.h: remove old FWTS_GET_* macros. * all: update copyright date. * lib: framework: use list head macro. * lib: list: include list head and tail macros * hpet: hpet_check: use list iterator (for klog scanning). * bios: mtrr: minor rewrite to stop scoping of item confusion when doing mtrr_bios_list scanning * bios: mtrr: use list iterator * New upstream version 0.20.19 -- Colin King Wed, 12 Jan 2011 09:58:07 +0000 fwts (0.20.18) natty; urgency=low * Add --disassemble-aml to disassemble AML in DSDT and SSDT tables * Add more syntaxcheck advise * New upstream version 0.20.18 -- Colin King Mon, 10 Jan 2011 16:11:52 +0000 fwts (0.20.17) natty; urgency=low * Add --s4-sleep-delay=N option to specify delays during hibernate * Add syntaxcheck advise from a json lookup table * New upstream version 0.20.17 -- Colin King Thu, 6 Jan 2011 19:17:02 +0000 fwts (0.20.16) natty; urgency=low * Dump out AML source with error message on syntaxcheck test * New upstream version 0.20.16 -- Colin King Thu, 6 Jan 2011 11:47:47 +0000 fwts (0.20.15) natty; urgency=low * Disable case sensitivity in lex scanner * Tidy up iasl specific code * New upstream version 0.20.15 -- Colin King Wed, 5 Jan 2011 19:07:59 +0000 fwts (0.20.14) natty; urgency=low * Add debian/libfwtsiasl1.install * New upstream version 0.20.14 -- Colin King Wed, 5 Jan 2011 14:14:05 +0000 fwts (0.20.13) natty; urgency=low * Include ACPICA iasl compiler into a library * Remove --iasl option * Remove need to check for existance of iasl tool * New upstream version 0.20.13 -- Colin King Wed, 5 Jan 2011 13:18:02 +0000 fwts (0.20.12) natty; urgency=low * Update with latest ACPICA sources * New upstream version 0.20.12 -- Colin King Tue, 28 Dec 2010 16:55:43 +0000 fwts (0.20.11) natty; urgency=low * Add and use fwts_list_data() to access list data more abstractly * acpica: fix init/deinit bug, avoid double free'ing of DSDT * framework: add per test pass/fail/abort/warn/skip summary * framework: move per test results to fwts_framework_ops so we can tabulate in summary * framework: remove current_ops * framework: fix memory leak detected with valgrind * method: remove unwanted _OSI cruft * remove trailing whitespaces from sources * framework: pretty print -h, --help output to tty width * framework: fix typos in help * New upstream version 0.20.11 -- Colin King Tue, 21 Dec 2010 14:55:58 +0000 fwts (0.20.10) natty; urgency=low * New version for release (LP: #690598) * Fix a couple of memory leaks * Add MTRR misconfiguration klog checks * oscilinux: make test a warning rather than a low failure * klog, only scan unique error messages and report repeats, reduces noise * _OSI(Linux) klog errors logged as just information rather than an error * New upstream version 0.20.10 -- Colin King Wed, 15 Dec 2010 11:27:27 +0000 fwts (0.20.09) natty; urgency=low * show available tests in short form * don't display progress on interactive tests * New upstream version 0.20.09 -- Colin King Wed, 15 Dec 2010 00:01:23 +0000 fwts (0.20.08) natty; urgency=low * method test: check for null object returns. * New upstream version 0.20.08 -- Colin King Thu, 9 Dec 2010 15:05:44 +0000 fwts (0.20.07) natty; urgency=low * s4 test: only attempt to hibernate if swap is available * klog test: only dump advice if it's available. * More info in _WAK test failure * New upstream version 0.20.07 -- Colin King Thu, 9 Dec 2010 09:15:00 +0000 fwts (0.20.06) natty; urgency=low * Fix hangs on corrupt input ACPI table data * Add some IO APIC kernel log scanning checks * New upstream version 0.20.06 -- Colin King Tue, 7 Dec 2010 11:53:00 +0000 fwts (0.20.05) natty; urgency=low * Add --lp-tags-log option to log LP tags into the results log * Make --lp-tags just dump out all LP tags found in testing * New upstream version 0.20.05 -- Colin King Sat, 4 Dec 2010 19:22:39 +0000 fwts (0.20.04) natty; urgency=low * Fix stack smashing on corrupt ACPI dumped data input * Add -j, --json-data-path options * New upstream version 0.20.04 -- Colin King Sat, 4 Dec 2010 01:12:22 +0000 fwts (0.20.03) natty; urgency=low * Changes to run successfully on UEFI systems. * New upstream version 0.20.03 -- Colin King Fri, 3 Dec 2010 15:48:57 +0000 fwts (0.20.02) natty; urgency=low * Fix help and update man page for -u, --utils option * New upstream version 0.20.02 -- Colin King Fri, 3 Dec 2010 11:56:01 +0000 fwts (0.20.01) natty; urgency=low * Fix PowerPC and ARM FTBFS issues (LP: #684663) * New upstream version 0.20.01 -- Colin King Fri, 3 Dec 2010 11:09:49 +0000 fwts (0.20.00) natty; urgency=low * Add -u, --utils option * New upstream version 0.20.00 -- Colin King Wed, 1 Dec 2010 16:27:37 +0000 fwts (0.19.29) maverick; urgency=low * Fix 64 bit build warnings * Add more advice into method test * New upstream version 0.19.29 -- Colin King Mon, 30 Nov 2010 14:26:23 +0000 fwts (0.19.28) maverick; urgency=low * Add in acpitable MADT checks for APICs * dump out global_irq_base from MADT IO APIC correctly * New upstream version 0.19.28 -- Colin King Fri, 26 Nov 2010 18:43:01 +0000 fwts (0.19.27) maverick; urgency=low * Fix GCC warnings now that we're checking log printf() args * Add infinite loop checking in AML method execution * New upstream version 0.19.27 -- Colin King Fri, 26 Nov 2010 11:26:47 +0000 fwts (0.19.26) maverick; urgency=low * Add more ACPI method tests * New upstream version 0.19.26 -- Colin King Tue, 23 Nov 2010 15:41:34 +0000 fwts (0.19.25) maverick; urgency=low * Add in ACPICA core + ACPI method tests * New upstream version 0.19.25 -- Colin King Tue, 23 Nov 2010 10:02:10 +0000 fwts (0.19.24) maverick; urgency=low * Minor changes in help text and better CMOS error detection. * New upstream version 0.19.24 -- Colin King Sun, 21 Nov 2010 12:22:21 +0000 fwts (0.19.23) maverick; urgency=low * More intelligent advice for FADT pointer mismatches to FACS * New upstream version 0.19.23 -- Colin King Fri, 19 Nov 2010 18:36:56 +0000 fwts (0.19.22) maverick; urgency=low * Add \_SB_._OSC buffer overflow checking * Add more graceful ACPI table load failure error handling * New upstream version 0.19.22 -- Colin King Thu, 18 Nov 2010 13:48:03 +0000 fwts (0.19.21) maverick; urgency=low * Fix wmi and hpet test breakage * New upstream version 0.19.21 -- Colin King Mon, 15 Nov 2010 17:39:34 +0000 fwts (0.19.20) maverick; urgency=low * Add acpitable test * New upstream version 0.19.20 -- Colin King Mon, 15 Nov 2010 13:22:23 +0000 fwts (0.19.19) maverick; urgency=low * Add acpitable test * New upstream version 0.19.19 -- Colin King Fri, 12 Nov 2010 15:33:17 +0000 fwts (0.19.18) maverick; urgency=low * Update makefile * New upstream version 0.19.18 -- Colin King Thu, 11 Nov 2010 15:37:53 +0000 fwts (0.19.17) maverick; urgency=low * klog data now in json formatted datafile * New upstream version 0.19.17 -- Colin King Thu, 11 Nov 2010 14:59:02 +0000 fwts (0.19.16) maverick; urgency=low * New upstream version 0.19.16 -- Colin King Wed, 10 Nov 2010 16:24:27 +0000 fwts (0.19.15) maverick; urgency=low * New upstream version 0.19.15 -- Colin King Wed, 10 Nov 2010 09:15:02 +0100 fwts (0.19.14) maverick; urgency=low * New upstream version 0.19.14 -- Colin King Tue, 9 Nov 2010 15:59:32 +0100 fwts (0.19.13) maverick; urgency=low * New upstream version 0.19.13 -- Colin King Sat, 6 Nov 2010 15:35:10 +0100 fwts (0.19.12) maverick; urgency=low * New upstream version 0.19.12 -- Colin King Fri, 5 Nov 2010 15:33:23 +0100 fwts (0.19.11) maverick; urgency=low * New upstream version 0.19.11 -- Colin King Mon, 1 Nov 2010 17:37:52 +0100 fwts (0.19.10) maverick; urgency=low * New upstream version 0.19.10 -- Colin King Mon, 1 Nov 2010 16:47:21 +0100 fwts (0.19.09) maverick; urgency=low * New upstream version 0.19.09 -- Colin King Sat, 30 Oct 2010 13:30:13 +0100 fwts (0.19.08) maverick; urgency=low * New upstream version 0.19.08 -- Colin King Sat, 30 Oct 2010 11:51:10 +0100 fwts (0.19.07) maverick; urgency=low * New upstream version 0.19.07 -- Colin King Thu, 28 Oct 2010 10:43:00 +0100 fwts (0.19.06) maverick; urgency=low * New upstream version 0.19.06 -- Colin King Mon, 18 Oct 2010 12:24:02 +0100 fwts (0.19.05) maverick; urgency=low * New upstream version 0.19.05 -- Colin King Mon, 11 Oct 2010 14:31:10 +0100 fwts (0.19.04) maverick; urgency=low * New upstream version 0.19.04 -- Colin King Wed, 6 Oct 2010 16:41:21 +0100 fwts (0.19.03) maverick; urgency=low * New upstream version 0.19.03 -- Colin King Wed, 6 Oct 2010 12:38:42 +0100 fwts (0.19.02) maverick; urgency=low * New upstream version 0.19.02 -- Colin King Tue, 5 Oct 2010 09:49:10 +0100 fwts (0.19.01) maverick; urgency=low * New upstream version 0.19.01 -- Colin King Mon, 4 Oct 2010 13:56:53 +0100 fwts (0.19.00) maverick; urgency=low * New upstream version 0.19.00 -- Colin King Mon, 4 Oct 2010 13:15:22 +0100 fwts (0.18.02) maverick; urgency=low * FADT test read correct ACPI table from /sys/firmware (closes: #627959) * New upstream version 0.18.02 -- Colin King Wed, 1 Sep 2010 11:11:20 +0100 fwts (0.18.01) maverick; urgency=low * New upstream version 0.18.01 -- Colin King Fri, 13 Aug 2010 10:04:54 +0100 fwts (0.18.0) maverick; urgency=low * New upstream version 0.18.0 -- Colin King Thu, 12 Aug 2010 19:09:19 +0100 fwts (0.17.9.1) maverick; urgency=low * New upstream version 0.17.9.1 -- Colin King Thu, 12 Aug 2010 19:01:49 +0100 fwts (0.17.9) maverick; urgency=low * New upstream version 0.17.9 -- Colin King Sat, 7 Aug 2010 20:17:31 +0100 fwts (0.17.8) maverick; urgency=low * New upstream version 0.17.8 -- Colin King Sat, 7 Aug 2010 19:08:56 +0100 fwts (0.17.7) maverick; urgency=low * New upstream version 0.17.7 -- Colin King Sat, 7 Aug 2010 18:59:59 +0100 fwts (0.17.6) maverick; urgency=low * New upstream version 0.17.6 -- Colin King Sat, 7 Aug 2010 18:14:48 +0100 fwts (0.17.5) maverick; urgency=low * New upstream version 0.17.5 -- Colin King Fri, 6 Aug 2010 09:14:45 +0100 fwts (0.17.4) maverick; urgency=low * New upstream version 0.17.4 -- Colin King Tue, 3 Aug 2010 15:36:02 +0100 fwts (0.17.3) maverick; urgency=low * New upstream version 0.17.3 -- Colin King Fri, 30 Jul 2010 08:54:12 +0100 fwts (0.17.2) maverick; urgency=low * New upstream version 0.17.2 -- Colin King Wed, 28 Jul 2010 12:20:07 +0100 fwts (0.17.1) maverick; urgency=low * New upstream version 0.17.1 -- Colin King Tue, 27 Jul 2010 17:57:01 +0100 fwts (0.17.0) maverick; urgency=low * New upstream version 0.17.0 -- Colin King Fri, 23 Jul 2010 16:32:58 +0200 fwts (0.16.14) maverick; urgency=low * New upstream version 0.16.14 -- Colin King Fri, 23 Jul 2010 10:56:53 +0200 fwts (0.16.13) maverick; urgency=low * New upstream version 0.16.13 -- Colin King Fri, 23 Jul 2010 10:40:40 +0200 fwts (0.16.12) maverick; urgency=low * New upstream version 0.16.12 -- Colin King Thu, 22 Jul 2010 15:49:14 +0100 fwts (0.16.11) maverick; urgency=low * New upstream version 0.16.11 -- Colin King Wed, 21 Jul 2010 10:54:20 +0200 fwts (0.16.10) maverick; urgency=low * New upstream version 0.16.10 -- Colin King Mon, 19 Jul 2010 14:11:26 +0100 fwts (0.16.09) maverick; urgency=low * New upstream version 0.16.09 -- Colin King Sat, 17 Jul 2010 14:55:38 +0100 fwts (0.16.08) maverick; urgency=low * New upstream version 0.16.08 -- Colin King Fri, 16 Jul 2010 11:22:17 +0100 fwts (0.16.07) maverick; urgency=low * New upstream version 0.16.07 -- Colin King Thu, 15 Jul 2010 15:25:44 +0100 fwts (0.16.06) maverick; urgency=low * New upstream version 0.16.06 -- Colin King Thu, 15 Jul 2010 10:07:43 +0100 fwts (0.16.05) maverick; urgency=low * New upstream version 0.16.05 -- Colin King Mon, 12 Jul 2010 10:22:40 +0100 fwts (0.16.04) maverick; urgency=low * New upstream version 0.16.04 -- Colin King Sat, 10 Jul 2010 19:22:54 +0100 fwts (0.16.03) maverick; urgency=low * New upstream version 0.16.03 -- Colin King Fri, 9 Jul 2010 18:41:53 +0100 fwts (0.16.02) maverick; urgency=low * New upstream version 0.16.02 -- Colin King Thu, 8 Jul 2010 19:29:36 +0100 fwts (0.16.01) maverick; urgency=low * New upstream version 0.16.01 -- Colin King Thu, 8 Jul 2010 13:59:51 +0100 fwts (0.16.0) maverick; urgency=low * New upstream version 0.16.0 -- Colin King Thu, 8 Jul 2010 10:49:04 +0100 fwts (0.15.9) maverick; urgency=low * New upstream version 0.15.9 -- Colin King Thu, 8 Jul 2010 09:25:17 +0100 fwts (0.15.8) maverick; urgency=low * New upstream version 0.15.8 -- Colin King Wed, 7 Jul 2010 20:00:03 +0100 fwts (0.15.7) maverick; urgency=low * New upstream version 0.15.7 -- Colin King Tue, 6 Jul 2010 19:50:01 +0100 fwts (0.15.6) maverick; urgency=low * New upstream version 0.15.6 -- Colin King Tue, 6 Jul 2010 10:13:06 +0100 fwts (0.15.5) maverick; urgency=low * New upstream version 0.15.5 -- Colin King Mon, 5 Jul 2010 18:23:47 +0100 fwts (0.15.4) maverick; urgency=low * New upstream version 0.15.4 -- Colin King Mon, 5 Jul 2010 17:05:00 +0100 fwts (0.15.3) maverick; urgency=low * New upstream version 0.15.3 -- Colin King Mon, 5 Jul 2010 12:22:25 +0100 fwts (0.15.2) maverick; urgency=low * New upstream version 0.15.2 -- Colin King Sun, 4 Jul 2010 15:33:27 +0100 fwts (0.15.1) maverick; urgency=low * New upstream version 0.15.1 -- Colin King Fri, 2 Jul 2010 06:15:03 +0100 fwts (0.15.0) maverick; urgency=low * New upstream version 0.15.0 -- Colin King Thu, 1 Jul 2010 12:45:32 +0100 fwts (0.14.8) maverick; urgency=low * New upstream version 0.14.8 -- Colin King Tue, 29 Jun 2010 17:55:26 +0100 fwts (0.14.7) maverick; urgency=low * New upstream version 0.14.7 -- Colin King Tue, 29 Jun 2010 10:59:02 +0100 fwts (0.14.6) maverick; urgency=low * New upstream version 0.14.6 -- Colin King Mon, 28 Jun 2010 16:49:19 +0100 fwts (0.14.5) maverick; urgency=low * New upstream version 0.14.5 -- Colin King Mon, 28 Jun 2010 15:54:19 +0100 fwts (0.14.4) maverick; urgency=low * New upstream version 0.14.4 -- Colin King Mon, 28 Jun 2010 12:52:25 +0100 fwts (0.14.3) maverick; urgency=low * New upstream version 0.14.3 -- Colin King Sun, 27 Jun 2010 11:52:50 +0100 fwts (0.14.2) maverick; urgency=low * New upstream version 0.14.2 -- Colin King Sat, 26 Jun 2010 20:09:37 +0100 fwts (0.14.1) maverick; urgency=low * New upstream version 0.14.1 -- Colin King Fri, 25 Jun 2010 17:11:49 +0100 fwts (0.14) maverick; urgency=low * New upstream version 0.14 -- Colin King Fri, 25 Jun 2010 10:40:02 +0100 fwts (0.13.1) maverick; urgency=low * New upstream version 0.13.1 -- Colin King Fri, 18 Jun 2010 15:26:53 +0100 fwts (0.13) maverick; urgency=low * New upstream version 0.13 -- Colin King Fri, 18 Jun 2010 10:48:50 +0100 fwts (0.12.4) maverick; urgency=low * New upstream version 0.12.4 -- Colin King Thu, 17 Jun 2010 17:55:01 +0100 fwts (0.12.3) maverick; urgency=low * New upstream version 0.12.3 -- Colin King Thu, 17 Jun 2010 14:09:35 +0100 fwts (0.12.2) maverick; urgency=low * New upstream version 0.12.2 -- Colin King Thu, 17 Jun 2010 12:18:16 +0100 fwts (0.12.1) maverick; urgency=low * New upstream version 0.12.1 -- Colin King Thu, 17 Jun 2010 11:40:43 +0100 fwts (0.12) maverick; urgency=low * New upstream version 0.12 -- Colin King Thu, 17 Jun 2010 10:01:08 +0100 fwts (0.11) maverick; urgency=low * New upstream version 0.11 -- Colin King Mon, 7 Jun 2010 09:04:13 +0100 fwts (0.1) maverick; urgency=low * New upstream version 0.1 -- Colin King Fri, 28 May 2010 11:15:26 +0100 debian/control000066400000000000000000000073751465205512700137260ustar00rootroot00000000000000Source: fwts Section: devel Priority: optional Rules-Requires-Root: no Maintainer: Firmware Testing Team Uploaders: Ivan Hu Standards-Version: 4.6.0 Homepage: https://wiki.ubuntu.com/FirmwareTestSuite Build-Depends: debhelper-compat (= 13), autoconf, automake, libtool, flex, bison, dkms (<< 3.0.3-3~) | dh-sequence-dkms, libglib2.0-dev, pkg-config, libfdt-dev, libbsd-dev Package: fwts Architecture: i386 amd64 armel armhf arm64 ppc64 ppc64el s390x riscv64 Depends: libfwtsiasl1 (= ${binary:Version}), libfwtsacpica1 (= ${binary:Version}), libfwts1 (= ${binary:Version}), fwts-efi-runtime-dkms (= ${binary:Version}) [amd64], ${shlibs:Depends}, ${misc:Depends}, pciutils, device-tree-compiler [armel armhf arm64 ppc64el powerpc] Suggests: dmidecode Description: FirmWare Test Suite This is a firmware test suite that performs sanity checks on system firmware. It is intended to identify BIOS and ACPI errors and if appropriate it will try to explain the errors and give advice to help workaround or fix firmware bugs. It is primarily intended to be a Linux-centric firmware troubleshooting tool. Package: libfwtsiasl1 Architecture: i386 amd64 armel armhf arm64 ppc64 ppc64el s390x riscv64 Depends: ${shlibs:Depends}, ${misc:Depends} Description: FirmWare Test Suite ACPICA core built for iasl functionality The firmware test suite requires the ACPICA core engine to be built in compiler mode (with ACPI_ASL_COMPILER enabled) to support assembly and disassembly of ACPI Machine Language (AML) in the ACPI DSDT and SSDTs. This library contains this code with a thin fwts specific API to interface with fwts. Package: libfwtsacpica1 Architecture: i386 amd64 armel armhf arm64 ppc64 ppc64el s390x riscv64 Depends: ${shlibs:Depends}, ${misc:Depends} Description: FirmWare Test Suite ACPICA core built for acpiexec functionality The firmware test suite requires the ACPICA core engine to be built in execution mode (with ACPI_EXEC_APP enabled) to support run time execution of ACPI Machine Language (AML) in the ACPI DSDT and SSDTs. This library contains this code with a thin fwts specific API to interface with fwts. Package: libfwts1 Architecture: i386 amd64 armel armhf arm64 ppc64 ppc64el s390x riscv64 Depends: ${shlibs:Depends}, ${misc:Depends} Description: FirmWare Test Suite core support library This is the fwts core library. It contains a top level test framework and a rich range of firmware specific testing support code for the various fwts tests. Package: fwts-frontend Architecture: i386 amd64 armel armhf arm64 ppc64 ppc64el s390x riscv64 Priority: optional Depends: ${misc:Depends}, dialog, fwts Description: Firmware Test Suite frontend interface This is a dialog based interface designed to provide an easy to use method to execute tests via Firmware Test Suite and is also used as the primary interface within Firmware Test Suite live images. Package: fwts-efi-runtime-dkms Architecture: i386 amd64 armel armhf arm64 ppc64 ppc64el Priority: optional Depends: ${misc:Depends}, dkms Description: Firmware Test Suite UEFI Runtime Service kernel driver This package provides the efi_runtime kernel driver in DKMS format, which is required for accessing UEFI Runtime Services. Package: fwts-smccc-dkms Architecture: arm64 Priority: optional Depends: ${misc:Depends}, dkms Description: Firmware Test Suite SMCCC firmware kernel driver This package provides the ARM64 SMCCC kernel driver in DKMS format, which is required for accessing the ARM64 SMCCC firmware API. debian/copyright000066400000000000000000000170641465205512700142520ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: fwts Source: git://kernel.ubuntu.com/hwe/fwts Files: * src/libfwtsiasl/fwts_iasl_interface.c src/libfwtsacpica/fwts_acpica.c Copyright: 2010-2024, Canonical Ltd License: GPL-2 Files: src/acpi/acpiinfo/acpiinfo.c src/acpi/battery/battery.c src/acpi/cstates/cstates.c src/acpi/dmar/dmar.c src/acpi/fan/fan.c src/apic/apicedge/apicedge.c src/bios/ebda_region/ebda_region.c src/bios/mtrr/mtrr.c src/cpu/cpufreq/cpufreq.c src/cpu/microcode/microcode.c src/pci/maxreadreq/maxreadreq.c Copyright: 2010-2024, Canonical Ltd 2006, Intel Corporation License: GPL-2 Files: src/cpu/virt/virt.c Copyright: 2010-2024, Canonical Ltd 2007, AMD Inc 2006, Intel Corporation License: GPL-2 Files: src/lib/src/fwts_pipeio.c src/lib/src/fwts_stringextras.c Copyright: 2010-2024, Canonical Ltd 2010, Lennart Poettering License: GPL-2 Files: src/cpu/virt/virt_svm.c src/cpu/virt/virt_vmx.c Copyright: 2010-2024, Canonical Ltd 2007, AMD Inc 2006, Intel Corporation License: LGPL On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/LGPL'. Files: src/acpica/source/* Copyright: Copyright (c) 1999 - 2021, Intel Corp. License: other 2. License . 2.1. This is your license from Intel Corp. under its intellectual property rights. You may have additional license terms from the party that provided you this software, covering your right to use that party's intellectual property rights. . 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a copy of the source code appearing in this file ("Covered Code") an irrevocable, perpetual, worldwide license under Intel's copyrights in the base code distributed originally by Intel ("Original Intel Code") to copy, make derivatives, distribute, use and display any portion of the Covered Code in any form, with the right to sublicense such rights; and . 2.3. Intel grants Licensee a non-exclusive and non-transferable patent license (with the right to sublicense), under only those claims of Intel patents that are infringed by the Original Intel Code, to make, use, sell, offer to sell, and import the Covered Code and derivative works thereof solely to the minimum extent necessary to exercise the above copyright license, and in no event shall the patent license extend to any additions to or modifications of the Original Intel Code. No other license or right is granted directly or by implication, estoppel or otherwise; . The above copyright and patent license is granted only if the following conditions are met: . 3. Conditions . 3.1. Redistribution of Source with Rights to Further Distribute Source. Redistribution of source code of any substantial portion of the Covered Code or modification with rights to further distribute source must include the above Copyright Notice, the above License, this list of Conditions, and the following Disclaimer and Export Compliance provision. In addition, Licensee must cause all Covered Code to which Licensee contributes to contain a file documenting the changes Licensee made to create that Covered Code and the date of any change. Licensee must include in that file the documentation of any changes made by any predecessor Licensee. Licensee must include a prominent statement that the modification is derived, directly or indirectly, from Original Intel Code. . 3.2. Redistribution of Source with no Rights to Further Distribute Source. Redistribution of source code of any substantial portion of the Covered Code or modification without rights to further distribute source must include the following Disclaimer and Export Compliance provision in the documentation and/or other materials provided with distribution. In addition, Licensee may not authorize further sublicense of source of any portion of the Covered Code, and must include terms to the effect that the license from Licensee to its licensee is limited to the intellectual property embodied in the software Licensee provides to its licensee, and not to intellectual property embodied in modifications its licensee may make. . 3.3. Redistribution of Executable. Redistribution in executable form of any substantial portion of the Covered Code or modification must reproduce the above Copyright Notice, and the following Disclaimer and Export Compliance provision in the documentation and/or other materials provided with the distribution. . 3.4. Intel retains all right, title, and interest in and to the Original Intel Code. . 3.5. Neither the name Intel nor any other trademark owned or controlled by Intel shall be used in advertising or otherwise to promote the sale, use or other dealings in products derived from or relating to the Covered Code without prior written authorization from Intel. . 4. Disclaimer and Export Compliance . 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. . 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY LIMITED REMEDY. . 4.3. Licensee shall not export, either directly or indirectly, any of this software or system incorporating such software without first obtaining any required license or other approval from the U. S. Department of Commerce or any other agency or department of the United States Government. In the event Licensee exports any such software from the United States or re-exports any such software from a foreign destination, Licensee shall ensure that the distribution and export/re-export of the software is in compliance with all laws, regulations, orders, or other restrictions of the U.S. Export Administration Regulations. Licensee agrees that neither it nor any of its subsidiaries will export/re-export any technical data, process, software, or service, directly or indirectly, to any country for which the United States government or any agency thereof requires an export license, other governmental approval, or letter of assurance, without first obtaining such license, approval or letter. Files: git.mk Copyright: 2010 - 2013, Behdad Esfahbod 2009, Red Hat, Inc. License: Public-Domain Copying and distribution of this file, with or without modification, is permitted in any medium without royalty provided the copyright notice and this notice are preserved. License: GPL-2 On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL-2'. debian/fwts-efi-runtime-dkms.dkms000066400000000000000000000003511465205512700173270ustar00rootroot00000000000000PACKAGE_NAME="fwts-efi-runtime-dkms" PACKAGE_VERSION="#MODULE_VERSION#" MAKE[0]="KVER=$kernelver make" BUILT_MODULE_NAME[0]="efi_runtime" DEST_MODULE_LOCATION[0]="/updates" AUTOINSTALL="yes" BUILD_EXCLUSIVE_CONFIG="!CONFIG_EFI_TEST" debian/fwts-frontend.install000066400000000000000000000002161465205512700164760ustar00rootroot00000000000000live-image/fwts-frontend-text usr/bin live-image/fwts-live-dialogrc usr/share/fwts usr/share/man/man1/fwts-frontend-text.1 usr/share/man/man1 debian/fwts-smccc-dkms.dkms000066400000000000000000000002701465205512700161730ustar00rootroot00000000000000PACKAGE_NAME="fwts-smccc-dkms" PACKAGE_VERSION="#MODULE_VERSION#" MAKE[0]="KVER=$kernelver make" BUILT_MODULE_NAME[0]="smccc_test" DEST_MODULE_LOCATION[0]="/updates" AUTOINSTALL="yes" debian/fwts.install000066400000000000000000000003731465205512700146650ustar00rootroot00000000000000usr/share/fwts/*.json usr/bin/fwts usr/bin usr/share/man/man1/fwts.1 usr/share/man/man1 scripts/fwts-collect usr/bin usr/share/man/man1/fwts-collect.1 usr/share/man/man1 usr/share/bash-completion/completions/fwts usr/share/bash-completion/completions debian/libfwts1.install000066400000000000000000000000341465205512700154270ustar00rootroot00000000000000usr/lib/*/fwts/libfwts.so.* debian/libfwts1.lintian-overrides000066400000000000000000000000671465205512700174250ustar00rootroot00000000000000package-has-unnecessary-activation-of-ldconfig-trigger debian/libfwtsacpica1.install000066400000000000000000000000421465205512700165670ustar00rootroot00000000000000usr/lib/*/fwts/libfwtsacpica.so.* debian/libfwtsacpica1.lintian-overrides000066400000000000000000000000671465205512700205660ustar00rootroot00000000000000package-has-unnecessary-activation-of-ldconfig-trigger debian/libfwtsiasl1.install000066400000000000000000000000401465205512700162750ustar00rootroot00000000000000usr/lib/*/fwts/libfwtsiasl.so.* debian/libfwtsiasl1.lintian-overrides000066400000000000000000000000671465205512700202760ustar00rootroot00000000000000package-has-unnecessary-activation-of-ldconfig-trigger debian/not-installed000066400000000000000000000004301465205512700150040ustar00rootroot00000000000000usr/bin/kernelscan usr/lib/*/fwts/libfwts.a usr/lib/*/fwts/libfwts.la usr/lib/*/fwts/libfwts.so usr/lib/*/fwts/libfwtsacpica.a usr/lib/*/fwts/libfwtsacpica.la usr/lib/*/fwts/libfwtsacpica.so usr/lib/*/fwts/libfwtsiasl.a usr/lib/*/fwts/libfwtsiasl.la usr/lib/*/fwts/libfwtsiasl.so debian/rules000077500000000000000000000014321465205512700133670ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS=hardening=+all DEBVERS := $(shell dpkg-parsechangelog | grep ^Version: | cut -d' ' -f2 \ | cut -d- -f1) VERSION := $(shell echo '$(DEBVERS)' | sed -e 's/[+-].*//' -e 's/~//g') DKMS_EFI_RUNTIME_SRC_DIR := $(CURDIR)/debian/fwts-efi-runtime-dkms/usr/src/fwts-efi-runtime-dkms-$(VERSION) DKMS_SMCCC_SRC_DIR := $(CURDIR)/debian/fwts-smccc-dkms/usr/src/fwts-smccc-dkms-$(VERSION) override_dh_auto_install: install -d $(DKMS_EFI_RUNTIME_SRC_DIR) cp -a efi_runtime/* $(DKMS_EFI_RUNTIME_SRC_DIR) install -d $(DKMS_SMCCC_SRC_DIR) cp -a smccc_test/* $(DKMS_SMCCC_SRC_DIR) dh_auto_install override_dh_dkms: dh_dkms -V $(VERSION) override_dh_auto_test: ifneq ($(DEB_BUILD_ARCH),arm64) dh_auto_test $@ endif %: dh $@ --with autoreconf,dkms debian/source/000077500000000000000000000000001465205512700136075ustar00rootroot00000000000000debian/source/format000066400000000000000000000000141465205512700150150ustar00rootroot000000000000003.0 (quilt) debian/source/lintian-overrides000066400000000000000000000000351465205512700171660ustar00rootroot00000000000000unknown-architecture riscv64 debian/tests/000077500000000000000000000000001465205512700134515ustar00rootroot00000000000000debian/tests/control000066400000000000000000000002511465205512700150520ustar00rootroot00000000000000Test-Command: [ -e /lib/modules/$(uname -r)/updates/dkms/efi_runtime.ko ] && /usr/lib/dkms/dkms-autopkgtest || true Restrictions: needs-root, allow-stderr Depends: dkms debian/watch000066400000000000000000000001001465205512700133270ustar00rootroot00000000000000version=3 http://fwts.ubuntu.com/release/fwts-V(\d.*)\.tar\.gz doc/000077500000000000000000000000001465205512700116325ustar00rootroot00000000000000doc/fwts-collect.1000066400000000000000000000037351465205512700143320ustar00rootroot00000000000000.\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH FWTS 1 "5 February, 2015" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME fwts-collect \- collect logs for fwts bug reporting. .br .SH SYNOPSIS .B fwts-collect .RI [ FILES ] .br .SH DESCRIPTION This manual page documents briefly the .B fwts-collect firmware test suite log collecting tool. The tool .B fwts-collect collects logs and various system and firmware dumps into the gzip'd tar ball fwts-logs.tar.gz which can then be added to bug reports. It collects data from /proc/iomem, /proc/mtrr, /proc/interrupts, IRQ counts from /sys/firmware/acpi/interrupts and kernel logs. It also invokes fwts and gathers ACPI tables, memorymaps, MultiProcessor table dumps, CMOS data, UEFI variables, kernel version and ACPI version information. .B fwts using sudo is required. .br Running .B fwts with no options will collect logs automatically. However, one can also specify the names of addition files to be added to the gzip'd tar ball. .P .SH EXAMPLES .LP Gather up logs into fwts-logs.tar.gz .RS 8 sudo fwts-collect .RE .LP Gather up logs and also /var/log/pm-powersave.log .RS 8 sudo fwts-collect /var/log/pm-powersave.log .SH SEE ALSO .BR fwts (1), .BR dmidecode (8), .BR lspci (8) .SH AUTHOR fwts-collect was written by Colin King .PP This manual page was written by Colin King , for the Ubuntu project (but may be used by others). doc/fwts-frontend-text.1000066400000000000000000000034511465205512700155010ustar00rootroot00000000000000.\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH FWTS-FRONTEND 1 "5 February, 2015" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME fwts-frontend-text \- text based interface to fwts. .br .SH SYNOPSIS .B fwts-frontend-text .br .SH DESCRIPTION This manual page briefly documents the .B fwts-frontend-text utility. The tool .B fwts-frontend-text executes a user-friendly interface to the Firmware Test Suite, providing the user a simple interface to execute all batch tests or the ability to select individual tests to execute. .B fwts-frontend-text should be run with root privilege, for example using sudo. .br .LP Running .B fwts-frontend-text with the argument noautoshutdown will prevent the system from shutting down after tests have been executed. .P .SH EXAMPLES .LP Execute fwts-frontend-text .RS 8 sudo fwts-frontend-text .RE .LP Execute fwts-frontend-text and disable automatic shutdown .RS 8 sudo fwts-frontend-text noautoshutdown .SH SEE ALSO .BR fwts (1), .BR dmidecode (8), .BR lspci (8) .SH AUTHOR fwts-frontend-text was written by Colin King , and Chris Van Hoof .PP This manual page was written by Chris Van Hoof , for the Ubuntu project (but may be used by others). doc/fwts.1000066400000000000000000000401131465205512700126760ustar00rootroot00000000000000.\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH FWTS 1 "10 September, 2021" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME fwts \- a firmware test suite to identify firmware bugs. .br .SH SYNOPSIS .B fwts .RI [ options ] .RI [ test(s) ] .br .SH DESCRIPTION This manual page documents briefly the .B fwts firmware test suite. The tool .B fwts is comprised of over 150 tests that are designed to examine and test different aspects of PC firmware. Many of these tests need super user access to extract tables and interact with the firmware and ACPI, so running .B fwts using sudo is required. .br Running .B fwts with no options will run through all the batch tests that require no user interaction. However, one can select just specific tests to run if required. .P By default .B fwts outputs the test results into the log file .B results.log however a different log file name can be specified and if required, output to stderr or stdout can be selected. .P Note that there a variety of tests, including tests that can potentially hang a machine (such as a suspend/hibernate/resume). .SH OPTIONS fwts options are as follow: .TP .B \- output results to stdout. .TP .B \-\-acpica enable ACPICA execution mode options. These can be specified as a comma separated list of one or more options. Available options are: serialized (serialized execution of AML), slack (run in less pedeantic mode), ignore\-errors (ignore ACPICA exception errors), disable\-auto\-repair (disable ACPICA from automatically fixing broken ACPICA controls). Note that the slack mode will turn on implicit returns of zero on control methods to attempt to allow buggy AML to work on non-Windows systems. .TP .B \-\-acpica\-debug enable ACPICA debug warning and error messages when invoking the ACPICA subsystem. This is mainly for fwts developers to help track down any ACPICA interfacing issues with fwts. .TP .B \-\-acpicompliance run only those tests that specifically check for compliance with the ACPI specifications. This may be a subset of the ACPI tests. .TP .B \-\-acpitests run all general ACPI tests. .TP .B \-a, \-\-all run all the tests. .TP .B \-\-arch=name specify the target architecture whose firmware is being tested. This allows fwts to run on one architecture (the host) but perform tests for a different architecture (the target). Known architecture strings are: x86, x86_32, or x86_64 for Intel; ia64 for Itanium; arm64 or aarch64 for ARMv8. Unless this option is specified, the target is assumed to be the same as the host. .TP .B \-b, \-\-batch run the non-interactive batch tests. Batch tests require no user interaction. .TP .B \-\-batch\-experimental run only batch experimental tests. .TP .B \-\-clog specify a coreboot logfile dump. .TP .B \-\-disassemble\-aml disassemble AML (ACPI machine language) byte code. This attempts to disassemble AML in DSDT and SSDT tables and generates DSDT.dsl and SSDTx.dsl sources. .TP .B \-d, \-\-dump extracts firmware data and dumps it into log files. This generates: .br acpidump.log \- containing a hex dump of the ACPI tables (which can be read using acpixtract). .br dmesg.log \- containing the current kernel log messages. .br dmidecode.log \- containing the output from dmidecode. .br lspci.log \- containing the output from lspci \-vv \-nn .br cpuinfo.log \- containing the output from cat /proc/cpuinfo .br README.txt \- containing a timestamp and kernel version information. .TP .B \-\-dump-acpi-from-sysfs specify dumping acpi table log default from sysfs. .TP .B \-\-dumpfile=acpidump.log load ACPI tables from output generated from acpidump or from sudo fwts \-\-dump. The latter is preferred as fwts \-\-dump is able to dump more tables than acpidump. This allows one to dump tables from one machine and processes them with fwts on another machine. .TP .B \-\-ebbr run ARM EBBR tests. .TP .B \-\-uefi\-get\-var\-multiple specifies the number of times to get a variable in the uefirtvariable get variable stress test. .TP .B \-\-uefi\-set\-var\-multiple specifies the number of times to set a variable in the uefirtvariable set variable stress test. .TP .B \-\-uefi\-query\-var\-multiple specifies the number of times to query a variable in the uefirtvariable query variable stress test. .TP .B \-\-uefitests run all general UEFI tests. .TP .B \-\-filter\-error\-discard specifies the errors that one wants to silently ignore. One supplies a comma sperated list of fwts error message labels that one wants fwts to not report as errors. fwts will run the test but if there is a test failure and the label matches the one supplied in this list fwts will then just ignore this error. This cannot be used with \-\-filter\-error\-keep. .TP .B \-\-filter\-error\-keep specifies the errors that one wants to keep, all other errors are silently ignored. One supplies a comma sperated list of fwts error message labels that one wants fwts report as errors, other test failures will be not reported and silently ignored. This cannot be used with \-\-filter\-error\-discard. .TP .B \-f, \-\-force\-clean creates a new results log file, rather than just appending to any existing one (default). .TP .B \-h, \-\-help outputs the internal help page. .TP .B \-i, \-\-interactive run the interactive tests. These tests require user interaction. .TP .B \-\-ifv run tests in firmware-vendor modes. .TP .B \-\-interactive\-experimental run only interactive experimental tests. .TP .B \-j, \-\-json\-data\-path specifies the path to the fwts json data files. These files contain json formatted configuration tables, for example klog scanning patterns. .TP .B \-k, \-\-klog=file read the kernel log from the specified file rather than from the kernel log ring buffer. This allows one to run the kernel log scanning tests such as klog against pre-gathered log data. .TP .B \-\-log\-fields show the available log filtering fields. Specifying these fields with \-\-log\-filter to select which fields one wants to log. .TP .B \-\-log\-filter specify which particular types of log data to be output into the log file. Each line of log data is tagged with a special marker depending on what type of log information is being output. The available types can be see by using \-\-log\-fields. Specify the desired log types with comma separated list. To disable a field, prefix the name with ~, for example: .br \-\-log\-filter=RES,SUM logs just the results and summary lines. .br \-\-log\-filter=ALL,~INF logs all lines except for the information lines. .TP .B \-\-log\-format specify the information in each log line. The following specifiers are available: .br %date \- date .br %time \- time .br %field \- log\-filter fields .br %owner \- name of the test routine .br %level \- test failure level .br %line \- log line .br e.g. \-\-log\-format="%date %time [%field] (%owner): " .TP .B \-\-log\-level [critical|high|medium|low|info|all] specify the test failure level to log. Test failure levels equal to and higher than the specified are logged and recorded as failures. The default is 'all' (which is identical to 'info'). For example, a log level of 'medium' will just log test failures of level 'medium', 'high' and 'critical', where as a log level of 'critical' will just log 'critical' level failures. .TP .B \-\-log\-type specify the log type. Currently plaintext, json and xml log types are available and the default is plaintext. .TP .B \-\-lspci=path specify the full path and filename to the the lspci binary. .TP .B \-P, \-\-power\-states run S3 and S4 power state tests (s3, s4 tests) .TP .B \-\-results\-no\-separators no pretty printing of horizontal separators in the results log file. .TP .B \-r, \-\-results\-output=filename specify the results output log file. One can also specify stdout and stderr to redirect to these output streams. .TP .B \-R, \-\-rsdp=physaddr specify the physical address of ACPI RSDP. This is useful on some systems where it cannot be automatically detected. .TP .B \-\-pm\-method=method specify the power method to use to enter S3 or S4 (or autodetection will be used). The following specifiers are available: .br logind \- the default method, where available (requires dbus and logind). .br pm-utils \- the previous default method, now deprecated. .br sysfs \- the fallback, used when logind is not available. .br e.g. \-\-pm\-method=sysfs .TP .B \-\-s3\-delay\-delta=N time to be added onto delay between each S3 iteration. .TP .B \-\-s3\-device\-check check differences between device configurations over a S3 cycle. Note this adds 15 seconds delay after each s3 resume to allow wifi to re-associate. .TP .B \-\-s3\-device\-check\-delay specify the time to wait while devices re-configure (e.g. wifi to re-associate, ethernet to connect..) before a device configuration check is run. The default is 15 seconds. If this option is used the device checking is assumed so one does not also need to use the \-\-s3\-device\-check flag. .TP .B \-\-s3\-hybrid enables fwts to run Hybrid Sleep. .TP .B \-\-s3\-min\-delay=N minimum time between S3 iterations. .TP .B \-\-s3\-max\-delay=N maximum time between S3 iterations. .TP .B \-\-s3\-multiple=N specified the number of multiple S3 suspend/resume tests to run. The default is 2 tests. .TP .B \-\-s3\-resume\-hook=hookscript specifies a script or program to run after each S3 resume. The hookscript must return 0 to indicate success, or non-zero to indicate failure. Failures will abort subsequent S3 test iterations. .TP .B \-\-s3\-quirks=--quirk[,--quirk] specify a comma separated list of quirk arguments to pass to pm-suspend, for example: \-\-s3\-quirks=\-\-quirk\-s3\-bios,\-\-quirk\-save\-pci .TP .B \-\-s3\-sleep\-delay=N sleep N seconds from the start of the suspend to the wakeup time. Note that this time MUST be longer than the time it takes to suspend the machine otherwise the wakeup timer will fire during the suspend state. The default is 30 seconds. .TP .B \-\-s3\-suspend\-time=N specify the maximum allowed suspend time in seconds. If suspend takes longer than this then an error is logged. .TP .B \-\-s3\-resume\-time=N specify the maximum allowed resume time in seconds. If resume takes longer than this then an error is logged. .TP .B \-\-s3power\-sleep\-delay=N specify the suspend duration in seconds. The higher the value the more accurate the s3power test result. Durations less than 10 minutes are not recommended. .TP .B \-\-s4\-delay\-delta=N time to be added onto delay between each S4 iteration. .TP .B \-\-s4\-device\-check check differences between device configurations over a S4 cycle. Note this adds 15 seconds delay after each s3 resume to allow wifi to re-associate. .TP .B \-\-s4\-device\-check\-delay specify the time to wait while devices re-configure (e.g. wifi to re-associate, ethernet to connect..) before a device configuration check is run. The default is 15 seconds. If this option is used the device checking is assumed so one does not also need to use the \-\-s4\-device\-check flag. .TP .B \-\-s4\-min\-delay=N minimum time between S4 iterations. .TP .B \-\-s4\-max\-delay=N maximum time between S4 iterations. .TP .B \-\-s4\-multiple=N specified the number of multiple S4 hibernate/resume tests to run. The default is 2 tests. .TP .B \-\-s4\-quirks=--quirk[,--quirk] specify a comma separated list of quirk arguments to pass to pm-hibernate, for example: \-\-s4\-quirks=\-\-quirk\-save\-pci .TP .B \-\-s4\-sleep\-delay=N sleep N seconds from the start of the hibernate to the wakeup time. Note that this time MUST be longer than the time it takes to hibernate the machine otherwise the wakeup timer will fire during the hibernate state. The default is currently 90 seconds. .TP .B \-\-sbbr run ARM SBBR tests .TP .B \-p, \-\-show\-progress show the progress of the tests being run. Each test will identified as it is being run. For long tests, a percentage of completion time will be displayed. As of fwts 0.19.06 this is enabled by default and can be disabled with \-\-quiet (or \-q). .TP .B \-q, \-\-quiet run quietly with no output to stdout. .TP .B \-D, \-\-show\-progress\-dialog output the progress of tests being run in a form that can be piped into the dialog tool with the \-\-gauge option. .TP .B \-s, \-\-show\-tests show the names of available tests. By default will show all tests. Use the \-\-batch, \-\-interactive, \-\-batch\-experimental, \-\-interactive\-experimental, \-\-utils options to show these specific tests. .TP .B \-\-show\-tests\-full show all the available tests listed by minor test description. By default will show all tests. Use the \-\-batch, \-\-interactive, \-\-batch\-experimental, \-\-interactive\-experimental options to show these specific tests. .TP .B \-\-show\-tests\-categories show all the available tests and the categories they belong to. .TP .B \-\-skip\-test=test[,test..] specify tests to skip over and not run. List must be comma separated. .TP .B \-\-stdout\-summary output SUCCESS or FAILED to stdout at end of tests. .TP .B \-t, \-\-table\-path=path specify the path containing ACPI tables. These tables need to be named in the format: tablename.dat, for example DSDT.dat, for example, as extracted using acpidump or fwts \-\-dump and then acpixtract. .TP .B \-u, \-\-utils run utilities. Designed to dump system information, such as annotated ACPI tables, CMOS memory, Int 15 E820 memory map, firmware ROM data. .TP .B \-v, \-\-version output version number and build date of the .B fwts tool. .TP .B \-w, \-\-width=N specify the width in characters of the output logfile. The default is 130. .SH EXAMPLES .LP Run all the batch tests and append the results into the default log results.log: .RS 8 sudo fwts .RE .LP Run all the interactive tests and start a clean results log called interactive.log: .RS 8 sudo fwts \-i \-f \-r interactive.log .br .RE .LP Run all the tests, interactive and batch: .RS 8 sudo fwts \-i \-b .RE .LP Run just the battery and cpufreq tests: .RS 8 sudo fwts battery cpufreq .RE .LP Run all the batch tests and define a new log format using just the date and line number: .RS 8 sudo fwts \-\-log\-format="%date %line: " .RE .LP Run all the interactive tests and log just the results, info and summary data: .RS 8 sudo fwts \-i \-\-log\-filter=RES,INF,SUM .RE .LP Dump all the interesting firmware information into log files for analysis later: .RS 8 sudo fwts \-\-dump .RE .LP View kernel and ACPI driver version and BIOS information: .RS 8 sudo fwts \-w 80 \-r stdout version bios_info \-\-log\-filter=INF \-\-log\-format="" .RE .LP Show the batch and batch experimental tests: .RS 8 fwts \-\-show\-tests \-\-batch \-\-batch\-experimental .RE .LP Run multiple S3 tests with delay between each test ranging from 1 second to 10 seconds with a delay delta per test of 0.2 seconds .RS 8 sudo fwts s3 \-\-s3\-multiple=100 \-\-s3\-min\-delay=1 \-\-s3\-max\-delay=10 \-\-s3\-delay\-delta=0.2 .SH SEE ALSO .BR iasl (1), .BR acpixtract (1), .BR acpidump (1), .BR dtc (1), .BR dmidecode (8), .BR lspci (8) .SH AUTHOR fwts was originally written by Colin King with much of the original test code derived from the Intel Linux Firmware test kit. Many thanks also for contributions from (in alphabetical order): AceLan Kao, Al Stone, Alberto Milone, Alex Hung, Anthony Wong, Björn Esser, Chris Goldsworthy, Chris Van Hoof, David Ward, Deb McLemore, Erico Nunes, Fan Wu, Fu Wei, Heyi Guo, Ivan Hu, Jeffrey Hugo, Jeremy Kerr, Jiri Vohanka, Kamal Mostafa, Keng-Yu Lin, Mahesh Bireddy, Matt Flemimg, Naresh Bhat, Paul Menzel, Phidias Chiang, Pradeep Gaddam, Prarit Bhargava, Rajat Goyal, Ricardo Neri, Robert Hooker, Rudolf Marek, Sakar Arora, Seth Forshee, Yang Kun, Yi Li and Zhang Rui. .PP This manual page was written by Colin King for the Ubuntu project (but may be used by others). .PP This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. efi_runtime/000077500000000000000000000000001465205512700133735ustar00rootroot00000000000000efi_runtime/Makefile000066400000000000000000000017531465205512700150410ustar00rootroot00000000000000# # Copyright (C) 2012-2024 Canonical, Ltd. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # KVER ?= `uname -r` KBUILD_MODPOST_WARN=y obj-m += efi_runtime.o all: make -C /lib/modules/$(KVER)/build M=`pwd` modules install: make -C /lib/modules/$(KVER)/build M=`pwd` modules_install clean: make -C /lib/modules/$(KVER)/build M=`pwd` clean efi_runtime/efi_runtime.c000066400000000000000000000443741465205512700160610ustar00rootroot00000000000000/* * EFI Runtime driver * * Copyright(C) 2012-2024 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. */ #include #include #include #include #include #include #include #include #include "efi_runtime.h" MODULE_AUTHOR("Ivan Hu"); MODULE_DESCRIPTION("EFI Runtime Driver"); MODULE_LICENSE("GPL"); /* commit 83e681897 turned efi_enabled into a function, so abstract it */ #ifdef EFI_RUNTIME_SERVICES #define EFI_RUNTIME_ENABLED efi_enabled(EFI_RUNTIME_SERVICES) #else #define EFI_RUNTIME_ENABLED efi_enabled #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0) #define ACCESS_OK(type, addr, size) access_ok(addr, size) #else #define ACCESS_OK(type, addr, size) access_ok(type, addr, size) #endif /* * Count the bytes in 'str', including the terminating NULL. * * Note this function returns the number of *bytes*, not the number of * ucs2 characters. */ static inline size_t user_ucs2_strsize(efi_char16_t __user *str) { efi_char16_t *s = str, c; size_t len; if (!str) return 0; /* Include terminating NULL */ len = sizeof(efi_char16_t); if (get_user(c, s++)) { /* Can't read userspace memory for size */ return 0; } while (c != 0) { if (get_user(c, s++)) { /* Can't read userspace memory for size */ return 0; } len += sizeof(efi_char16_t); } return len; } /* * Allocate a buffer and copy a ucs2 string from user space into it. */ static inline int copy_ucs2_from_user_len(efi_char16_t **dst, efi_char16_t __user *src, size_t len) { efi_char16_t *buf; if (!src) { *dst = NULL; return 0; } if (!ACCESS_OK(VERIFY_READ, src, 1)) return -EFAULT; buf = memdup_user(src, len); if (IS_ERR(buf)) { *dst = NULL; return PTR_ERR(buf); } *dst = buf; return 0; } /* * Count the bytes in 'str', including the terminating NULL. * * Just a wrap for user_ucs2_strsize */ static inline int get_ucs2_strsize_from_user(efi_char16_t __user *src, size_t *len) { if (!ACCESS_OK(VERIFY_READ, src, 1)) return -EFAULT; *len = user_ucs2_strsize(src); if (*len == 0) return -EFAULT; return 0; } /* * Calculate the required buffer allocation size and copy a ucs2 string * from user space into it. * * This function differs from copy_ucs2_from_user_len() because it * calculates the size of the buffer to allocate by taking the length of * the string 'src'. * * If a non-zero value is returned, the caller MUST NOT access 'dst'. * * It is the caller's responsibility to free 'dst'. */ static inline int copy_ucs2_from_user(efi_char16_t **dst, efi_char16_t __user *src) { size_t len; if (!ACCESS_OK(VERIFY_READ, src, 1)) return -EFAULT; len = user_ucs2_strsize(src); if (len == 0) return -EFAULT; return copy_ucs2_from_user_len(dst, src, len); } /* * Copy a ucs2 string to a user buffer. * * This function is a simple wrapper around copy_to_user() that does * nothing if 'src' is NULL, which is useful for reducing the amount of * NULL checking the caller has to do. * * 'len' specifies the number of bytes to copy. */ static inline int copy_ucs2_to_user_len(efi_char16_t __user *dst, efi_char16_t *src, size_t len) { if (!src) return 0; if (!ACCESS_OK(VERIFY_WRITE, dst, 1)) return -EFAULT; return copy_to_user(dst, src, len); } static long efi_runtime_get_variable(unsigned long arg) { struct efi_getvariable __user *getvariable_user; struct efi_getvariable getvariable; unsigned long datasize = 0, prev_datasize, *dz; efi_guid_t vendor_guid, *vd = NULL; efi_status_t status; efi_char16_t *name = NULL; u32 attr, *at; void *data = NULL; int rv = 0; getvariable_user = (struct efi_getvariable __user *)arg; if (copy_from_user(&getvariable, getvariable_user, sizeof(getvariable))) return -EFAULT; if (getvariable.data_size && get_user(datasize, getvariable.data_size)) return -EFAULT; if (getvariable.vendor_guid) { if (copy_from_user(&vendor_guid, getvariable.vendor_guid, sizeof(vendor_guid))) return -EFAULT; vd = &vendor_guid; } if (getvariable.variable_name) { rv = copy_ucs2_from_user(&name, getvariable.variable_name); if (rv) return rv; } at = getvariable.attributes ? &attr : NULL; dz = getvariable.data_size ? &datasize : NULL; if (getvariable.data_size && getvariable.data) { data = kmalloc(datasize, GFP_KERNEL); if (!data) { kfree(name); return -ENOMEM; } } prev_datasize = datasize; status = efi.get_variable(name, vd, at, dz, data); kfree(name); if (put_user(status, getvariable.status)) { rv = -EFAULT; goto out; } if (status != EFI_SUCCESS) { if (status == EFI_BUFFER_TOO_SMALL) { if (dz && put_user(datasize, getvariable.data_size)) { rv = -EFAULT; goto out; } } rv = -EINVAL; goto out; } if (prev_datasize < datasize) { rv = -EINVAL; goto out; } if (data) { if (copy_to_user(getvariable.data, data, datasize)) { rv = -EFAULT; goto out; } } if (at && put_user(attr, getvariable.attributes)) { rv = -EFAULT; goto out; } if (dz && put_user(datasize, getvariable.data_size)) rv = -EFAULT; out: kfree(data); return rv; } static long efi_runtime_set_variable(unsigned long arg) { struct efi_setvariable __user *setvariable_user; struct efi_setvariable setvariable; efi_guid_t vendor_guid; efi_status_t status; efi_char16_t *name = NULL; void *data; int rv = 0; setvariable_user = (struct efi_setvariable __user *)arg; if (copy_from_user(&setvariable, setvariable_user, sizeof(setvariable))) return -EFAULT; if (copy_from_user(&vendor_guid, setvariable.vendor_guid, sizeof(vendor_guid))) return -EFAULT; if (setvariable.variable_name) { rv = copy_ucs2_from_user(&name, setvariable.variable_name); if (rv) return rv; } data = memdup_user(setvariable.data, setvariable.data_size); if (IS_ERR(data)) { kfree(name); return PTR_ERR(data); } status = efi.set_variable(name, &vendor_guid, setvariable.attributes, setvariable.data_size, data); if (put_user(status, setvariable.status)) { rv = -EFAULT; goto out; } rv = status == EFI_SUCCESS ? 0 : -EINVAL; out: kfree(data); kfree(name); return rv; } static long efi_runtime_get_time(unsigned long arg) { struct efi_gettime __user *gettime_user; struct efi_gettime gettime; efi_status_t status; efi_time_cap_t cap; efi_time_t efi_time; gettime_user = (struct efi_gettime __user *)arg; if (copy_from_user(&gettime, gettime_user, sizeof(gettime))) return -EFAULT; status = efi.get_time(gettime.time ? &efi_time : NULL, gettime.capabilities ? &cap : NULL); if (put_user(status, gettime.status)) return -EFAULT; if (status != EFI_SUCCESS) return -EINVAL; if (gettime.capabilities) { efi_time_cap_t __user *cap_local; cap_local = (efi_time_cap_t *)gettime.capabilities; if (put_user(cap.resolution, &(cap_local->resolution)) || put_user(cap.accuracy, &(cap_local->accuracy)) || put_user(cap.sets_to_zero, &(cap_local->sets_to_zero))) return -EFAULT; } if (gettime.time) { if (copy_to_user(gettime.time, &efi_time, sizeof(efi_time_t))) return -EFAULT; } return 0; } static long efi_runtime_set_time(unsigned long arg) { struct efi_settime __user *settime_user; struct efi_settime settime; efi_status_t status; efi_time_t efi_time; settime_user = (struct efi_settime __user *)arg; if (copy_from_user(&settime, settime_user, sizeof(settime))) return -EFAULT; if (copy_from_user(&efi_time, settime.time, sizeof(efi_time_t))) return -EFAULT; status = efi.set_time(&efi_time); if (put_user(status, settime.status)) return -EFAULT; return status == EFI_SUCCESS ? 0 : -EINVAL; } static long efi_runtime_get_waketime(unsigned long arg) { struct efi_getwakeuptime __user *getwakeuptime_user; struct efi_getwakeuptime getwakeuptime; efi_bool_t enabled, pending; efi_status_t status; efi_time_t efi_time; getwakeuptime_user = (struct efi_getwakeuptime __user *)arg; if (copy_from_user(&getwakeuptime, getwakeuptime_user, sizeof(getwakeuptime))) return -EFAULT; status = efi.get_wakeup_time( getwakeuptime.enabled ? (efi_bool_t *)&enabled : NULL, getwakeuptime.pending ? (efi_bool_t *)&pending : NULL, getwakeuptime.time ? &efi_time : NULL); if (put_user(status, getwakeuptime.status)) return -EFAULT; if (status != EFI_SUCCESS) return -EINVAL; if (getwakeuptime.enabled && put_user(enabled, getwakeuptime.enabled)) return -EFAULT; if (getwakeuptime.time) { if (copy_to_user(getwakeuptime.time, &efi_time, sizeof(efi_time_t))) return -EFAULT; } return 0; } static long efi_runtime_set_waketime(unsigned long arg) { struct efi_setwakeuptime __user *setwakeuptime_user; struct efi_setwakeuptime setwakeuptime; efi_bool_t enabled; efi_status_t status; efi_time_t efi_time; setwakeuptime_user = (struct efi_setwakeuptime __user *)arg; if (copy_from_user(&setwakeuptime, setwakeuptime_user, sizeof(setwakeuptime))) return -EFAULT; enabled = setwakeuptime.enabled; if (setwakeuptime.time) { if (copy_from_user(&efi_time, setwakeuptime.time, sizeof(efi_time_t))) return -EFAULT; status = efi.set_wakeup_time(enabled, &efi_time); } else status = efi.set_wakeup_time(enabled, NULL); if (put_user(status, setwakeuptime.status)) return -EFAULT; return status == EFI_SUCCESS ? 0 : -EINVAL; } static long efi_runtime_get_nextvariablename(unsigned long arg) { struct efi_getnextvariablename __user *getnextvariablename_user; struct efi_getnextvariablename getnextvariablename; unsigned long name_size, prev_name_size = 0, *ns = NULL; efi_status_t status; efi_guid_t *vd = NULL; efi_guid_t vendor_guid; efi_char16_t *name = NULL; int rv = 0; getnextvariablename_user = (struct efi_getnextvariablename __user *)arg; if (copy_from_user(&getnextvariablename, getnextvariablename_user, sizeof(getnextvariablename))) return -EFAULT; if (getnextvariablename.variable_name_size) { if (get_user(name_size, getnextvariablename.variable_name_size)) return -EFAULT; ns = &name_size; prev_name_size = name_size; } if (getnextvariablename.vendor_guid) { if (copy_from_user(&vendor_guid, getnextvariablename.vendor_guid, sizeof(vendor_guid))) return -EFAULT; vd = &vendor_guid; } if (getnextvariablename.variable_name) { size_t name_string_size = 0; rv = get_ucs2_strsize_from_user( getnextvariablename.variable_name, &name_string_size); if (rv) return rv; /* * The name_size may be smaller than the real buffer size where * variable name located in some use cases. The most typical * case is passing a 0 to get the required buffer size for the * 1st time call. So we need to copy the content from user * space for at least the string size of variable name, or else * the name passed to UEFI may not be terminated as we expected. */ rv = copy_ucs2_from_user_len(&name, getnextvariablename.variable_name, prev_name_size > name_string_size ? prev_name_size : name_string_size); if (rv) return rv; } status = efi.get_next_variable(ns, name, vd); if (put_user(status, getnextvariablename.status)) { rv = -EFAULT; goto out; } if (status != EFI_SUCCESS) { if (status == EFI_BUFFER_TOO_SMALL) { if (ns && put_user(*ns, getnextvariablename.variable_name_size)) { rv = -EFAULT; goto out; } } rv = -EINVAL; goto out; } if (name) { if (copy_ucs2_to_user_len(getnextvariablename.variable_name, name, prev_name_size)) { rv = -EFAULT; goto out; } } if (ns) { if (put_user(*ns, getnextvariablename.variable_name_size)) { rv = -EFAULT; goto out; } } if (vd) { if (copy_to_user(getnextvariablename.vendor_guid, vd, sizeof(efi_guid_t))) rv = -EFAULT; } out: kfree(name); return rv; } static long efi_runtime_get_nexthighmonocount(unsigned long arg) { struct efi_getnexthighmonotoniccount __user *getnexthighmonocount_user; struct efi_getnexthighmonotoniccount getnexthighmonocount; efi_status_t status; u32 count; getnexthighmonocount_user = (struct efi_getnexthighmonotoniccount __user *)arg; if (copy_from_user(&getnexthighmonocount, getnexthighmonocount_user, sizeof(getnexthighmonocount))) return -EFAULT; status = efi.get_next_high_mono_count( getnexthighmonocount.high_count ? &count : NULL); if (put_user(status, getnexthighmonocount.status)) return -EFAULT; if (status != EFI_SUCCESS) return -EINVAL; if (getnexthighmonocount.high_count && put_user(count, getnexthighmonocount.high_count)) return -EFAULT; return 0; } static long efi_runtime_reset_system(unsigned long arg) { struct efi_resetsystem __user *resetsystem_user; struct efi_resetsystem resetsystem; void *data = NULL; resetsystem_user = (struct efi_resetsystem __user *)arg; if (copy_from_user(&resetsystem, resetsystem_user, sizeof(resetsystem))) return -EFAULT; if (resetsystem.data_size != 0) { data = memdup_user((void *)resetsystem.data, resetsystem.data_size); if (IS_ERR(data)) return PTR_ERR(data); } efi.reset_system(resetsystem.reset_type, resetsystem.status, resetsystem.data_size, (efi_char16_t *)data); kfree(data); return 0; } #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0) static long efi_runtime_query_variableinfo(unsigned long arg) { struct efi_queryvariableinfo __user *queryvariableinfo_user; struct efi_queryvariableinfo queryvariableinfo; efi_status_t status; u64 max_storage, remaining, max_size; queryvariableinfo_user = (struct efi_queryvariableinfo __user *)arg; if (copy_from_user(&queryvariableinfo, queryvariableinfo_user, sizeof(queryvariableinfo))) return -EFAULT; status = efi.query_variable_info(queryvariableinfo.attributes, &max_storage, &remaining, &max_size); if (put_user(status, queryvariableinfo.status)) return -EFAULT; if (status != EFI_SUCCESS) return -EINVAL; if (put_user(max_storage, queryvariableinfo.maximum_variable_storage_size)) return -EFAULT; if (put_user(remaining, queryvariableinfo.remaining_variable_storage_size)) return -EFAULT; if (put_user(max_size, queryvariableinfo.maximum_variable_size)) return -EFAULT; return 0; } static long efi_runtime_query_capsulecaps(unsigned long arg) { struct efi_querycapsulecapabilities __user *qcaps_user; struct efi_querycapsulecapabilities qcaps; efi_capsule_header_t *capsules; efi_status_t status; u64 max_size; int i, reset_type; int rv = 0; qcaps_user = (struct efi_querycapsulecapabilities __user *)arg; if (copy_from_user(&qcaps, qcaps_user, sizeof(qcaps))) return -EFAULT; capsules = kcalloc(qcaps.capsule_count + 1, sizeof(efi_capsule_header_t), GFP_KERNEL); if (!capsules) return -ENOMEM; for (i = 0; i < qcaps.capsule_count; i++) { efi_capsule_header_t *c; /* * We cannot dereference qcaps.capsule_header_array directly to * obtain the address of the capsule as it resides in the * user space */ if (get_user(c, qcaps.capsule_header_array + i)) { rv = -EFAULT; goto out; } if (copy_from_user(&capsules[i], c, sizeof(efi_capsule_header_t))) { rv = -EFAULT; goto out; } } qcaps.capsule_header_array = &capsules; status = efi.query_capsule_caps((efi_capsule_header_t **) qcaps.capsule_header_array, qcaps.capsule_count, &max_size, &reset_type); if (put_user(status, qcaps.status)) { rv = -EFAULT; goto out; } if (status != EFI_SUCCESS) { rv = -EINVAL; goto out; } if (put_user(max_size, qcaps.maximum_capsule_size)) { rv = -EFAULT; goto out; } if (put_user(reset_type, qcaps.reset_type)) rv = -EFAULT; out: kfree(capsules); return rv; } #endif static long efi_runtime_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { switch (cmd) { case EFI_RUNTIME_GET_VARIABLE: return efi_runtime_get_variable(arg); case EFI_RUNTIME_SET_VARIABLE: return efi_runtime_set_variable(arg); case EFI_RUNTIME_GET_TIME: return efi_runtime_get_time(arg); case EFI_RUNTIME_SET_TIME: return efi_runtime_set_time(arg); case EFI_RUNTIME_GET_WAKETIME: return efi_runtime_get_waketime(arg); case EFI_RUNTIME_SET_WAKETIME: return efi_runtime_set_waketime(arg); case EFI_RUNTIME_GET_NEXTVARIABLENAME: return efi_runtime_get_nextvariablename(arg); case EFI_RUNTIME_GET_NEXTHIGHMONOTONICCOUNT: return efi_runtime_get_nexthighmonocount(arg); case EFI_RUNTIME_RESET_SYSTEM: return efi_runtime_reset_system(arg); #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0) case EFI_RUNTIME_QUERY_VARIABLEINFO: return efi_runtime_query_variableinfo(arg); case EFI_RUNTIME_QUERY_CAPSULECAPABILITIES: return efi_runtime_query_capsulecaps(arg); #endif } return -ENOTTY; } static int efi_runtime_open(struct inode *inode, struct file *file) { /* * nothing special to do here * We do accept multiple open files at the same time as we * synchronize on the per call operation. */ return 0; } static int efi_runtime_close(struct inode *inode, struct file *file) { return 0; } /* * The various file operations we support. */ static const struct file_operations efi_runtime_fops = { .owner = THIS_MODULE, .unlocked_ioctl = efi_runtime_ioctl, .open = efi_runtime_open, .release = efi_runtime_close, .llseek = no_llseek, }; static struct miscdevice efi_runtime_dev = { MISC_DYNAMIC_MINOR, "efi_runtime", &efi_runtime_fops }; static int __init efi_runtime_init(void) { int ret; if (!EFI_RUNTIME_ENABLED) { pr_err("EFI runtime services not enabled.\n"); return -ENODEV; } ret = misc_register(&efi_runtime_dev); if (ret) { pr_err("efi_runtime: can't misc_register on minor=%d\n", MISC_DYNAMIC_MINOR); return ret; } return 0; } static void __exit efi_runtime_exit(void) { misc_deregister(&efi_runtime_dev); } module_init(efi_runtime_init); module_exit(efi_runtime_exit); efi_runtime/efi_runtime.h000066400000000000000000000065631465205512700160640ustar00rootroot00000000000000/* * EFI Runtime driver * * Copyright(C) 2012-2024 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. */ #ifndef _EFI_RUNTIME_H_ #define _EFI_RUNTIME_H_ #include struct efi_getvariable { efi_char16_t *variable_name; efi_guid_t *vendor_guid; u32 *attributes; unsigned long *data_size; void *data; efi_status_t *status; } __packed; struct efi_setvariable { efi_char16_t *variable_name; efi_guid_t *vendor_guid; u32 attributes; unsigned long data_size; void *data; efi_status_t *status; } __packed; struct efi_getnextvariablename { unsigned long *variable_name_size; efi_char16_t *variable_name; efi_guid_t *vendor_guid; efi_status_t *status; } __packed; struct efi_queryvariableinfo { u32 attributes; u64 *maximum_variable_storage_size; u64 *remaining_variable_storage_size; u64 *maximum_variable_size; efi_status_t *status; } __packed; struct efi_gettime { efi_time_t *time; efi_time_cap_t *capabilities; efi_status_t *status; } __packed; struct efi_settime { efi_time_t *time; efi_status_t *status; } __packed; struct efi_getwakeuptime { efi_bool_t *enabled; efi_bool_t *pending; efi_time_t *time; efi_status_t *status; } __packed; struct efi_setwakeuptime { efi_bool_t enabled; efi_time_t *time; efi_status_t *status; } __packed; struct efi_getnexthighmonotoniccount { u32 *high_count; efi_status_t *status; } __packed; struct efi_querycapsulecapabilities { efi_capsule_header_t **capsule_header_array; unsigned long capsule_count; u64 *maximum_capsule_size; int *reset_type; efi_status_t *status; } __packed; struct efi_resetsystem { int reset_type; efi_status_t status; unsigned long data_size; efi_char16_t *data; } __packed; /* ioctl calls that are permitted to the /dev/efi_runtime interface. */ #define EFI_RUNTIME_GET_VARIABLE \ _IOWR('p', 0x01, struct efi_getvariable) #define EFI_RUNTIME_SET_VARIABLE \ _IOW('p', 0x02, struct efi_setvariable) #define EFI_RUNTIME_GET_TIME \ _IOR('p', 0x03, struct efi_gettime) #define EFI_RUNTIME_SET_TIME \ _IOW('p', 0x04, struct efi_settime) #define EFI_RUNTIME_GET_WAKETIME \ _IOR('p', 0x05, struct efi_getwakeuptime) #define EFI_RUNTIME_SET_WAKETIME \ _IOW('p', 0x06, struct efi_setwakeuptime) #define EFI_RUNTIME_GET_NEXTVARIABLENAME \ _IOWR('p', 0x07, struct efi_getnextvariablename) #define EFI_RUNTIME_QUERY_VARIABLEINFO \ _IOR('p', 0x08, struct efi_queryvariableinfo) #define EFI_RUNTIME_GET_NEXTHIGHMONOTONICCOUNT \ _IOR('p', 0x09, struct efi_getnexthighmonotoniccount) #define EFI_RUNTIME_QUERY_CAPSULECAPABILITIES \ _IOR('p', 0x0A, struct efi_querycapsulecapabilities) #define EFI_RUNTIME_RESET_SYSTEM \ _IOW('p', 0x0B, struct efi_resetsystem) #endif /* _EFI_RUNTIME_H_ */ example-data/000077500000000000000000000000001465205512700134275ustar00rootroot00000000000000example-data/sample-errors-short.log000066400000000000000000000272551465205512700200750ustar00rootroot00000000000000ACPI Error: 32/64X address mismatch in Gpe0Block: 00008018/0000000000008028, using 32 (20090903/tbfadt-427)" ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 00008030/0000000000008020, using 32 (20090903/tbfadt-427)" ACPI Error: ACPI path has too many parent prefixes (^) - reached beyond root node (20090903/nsaccess-429)" ACPI Error: A valid RSDP was not found 20090521 tbxfroot-219" ACPI Error: Cannot release Mutex [MUT0], not acquired (20090903/exmutex-374)" ACPI Error: Could not disable RealTimeClock events 20090521 evxfevnt-373" ACPI Error: Could not enable PowerButton event (20090903/evxfevnt-193)" ACPI Error: Could not enable SleepButton event (20090903/evxfevnt-193)" ACPI Error: Current brightness invalid 20090521 video-538" ACPI Error (dsfield-0143): [CAPD] Namespace lookup failure, AE_ALREADY_EXISTS" ACPI Error (dsobject-0501): Package List length (5) larger than NumElements count (3), truncated" ACPI Error (dsopcode-0595): Field [I9MN] at 544 exceeds Buffer [IORT] size 464 (bits) [20080926]" ACPI Error (dswload-0674): [\___p] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (dswload-0790): [_T_0] Namespace lookup failure, AE_ALREADY_EXISTS" ACPI Error (dswstate-0097): Result stack is empty! State=ffff8800378ba400 [20080926]" ACPI Error (dswstate-0097): Result stack is empty! State=ffff8800378ba800 [20080926]" ACPI Error: Evaluating _BCM failed 20090521 video-526" ACPI Error (evregion-0315): No handler for Region [ERAM] (ffff88013f819ee8) [EmbeddedControl] [20080926]" ACPI Error (evxfevnt-0193): Could not enable SleepButton event [20090320]" ACPI Error (evxfevnt-0366): Could not disable RealTimeClock events [20080926]" ACPI Error (exfldio-0291): Region EmbeddedControl(3) has no handler [20080926]" ACPI Error: Field [ASSM] at 524320 exceeds Buffer [BUF0] size 880 (bits) (20090903/dsopcode-596)" ACPI Error: Field [I9MN] at 544 exceeds Buffer [IORT] size 464 (bits) (20090903/dsopcode-596)" ACPI Error: Illegal I/O port address/length above 64K: 0x0000000000400020/4 20090521 hwvalid-154" ACPI Error: Incorrect return type [Integer] requested [Package] 20090521 nsxfeval-134" ACPI Error: Needed [Buffer/String/Package], found [Integer] f7257c08 (20090903/exresop-590)" ACPI Error: Needed type [Reference], found [Device] ffff88014b82d800 (20090903/exresop-104)" ACPI Error: No handler for Region [ECF2] (ffff88013ba313a8) [EmbeddedControl] (20090903/evregion-319)" ACPI Error (nsaccess-0434): ACPI path has too many parent prefixes (^) - reached beyond root node [20080926]" ACPI Error (nspredef-0163): \_SB_.PCI0.FNC2.PRT0._GTF: Missing expected return value [20080926]" ACPI Error (psargs-0359): [\_PR_.CPU0._PPC] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [Z012] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psloop-0136): Found unknown opcode 26 at AML address ffff88003785663a offset 56, ignoring [20080926]" ACPI Error (psparse-0524): Method parse/execution failed [\_PR_.CPU0._PSS] (Node ffff88007f26eee0), AE_AML_NO_RETURN_VALUE" ACPI Error (psparse-0524): Method parse/execution failed [\_PR_.CPU1._PDC] (Node f6c10180), AE_ALREADY_EXISTS" ACPI Error (psparse-0524): Method parse/execution failed [\_PR_.CPU1._PDC] (Node f6c11150), AE_INVALID_TABLE_LENGTH" ACPI Error (psparse-0524): Method parse/execution failed [\_PR_.CPU1._PDC] (Node ffff88022f819f00), AE_ALREADY_EXISTS" ACPI Error (psparse-0524): Method parse/execution failed [\_PR_.CPU1._PSS] (Node ffff88007f26efa0), AE_AML_NO_RETURN_VALUE" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.MEM_._CRS] (Node f6c1b0a8), AE_AML_BUFFER_LIMIT" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0._INI] (Node db02d630), AE_NOT_FOUND" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._REG] (Node ffff88013f81a260), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_GPE._L09] (Node ffff88003b5a7520), AE_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.CBST] (Node f7015000), AE_TIME" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.GFX0.DD02.GBQC] (Node f7017a68), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7016d98), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.PEGP.EVGA.LCD_._BCM] (Node ffff8800bc647c80), AE_AML_PACKAGE_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.PIB_.EXFG] (Node f7015768), AE_AML_MUTEX_NOT_ACQUIRED" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.PIB_.FIR_._STA] (Node f7015900), AE_AML_MUTEX_NOT_ACQUIRED" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.C2E8] (Node f701b108), AE_AML_PACKAGE_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.TZ2_._TMP] (Node f701b7c8), AE_AML_PACKAGE_LIMIT" ACPI Error: Region EmbeddedControl(3) has no handler (20090903/exfldio-295)" ACPI Error: Region PCI_Config(2) has no handler (20090903/exfldio-295)" ACPI Error: SMBus or IPMI write requires Buffer of length 42, found length 20 (20090903/exfield-286)" ACPI Error (uteval-0232): Method execution failed [\_SB_.MEM_._CRS] (Node f6c1b0a8), AE_AML_BUFFER_LIMIT" ACPI Error (uteval-0232): Method execution failed [\_SB_.PCI0.LPC0.PMIO._CRS] (Node f6c15900), AE_AML_BUFFER_LIMIT" ACPI Error (uteval-0232): Method execution failed [\_SB_.PCI0.LPC0.PMIO._CRS] (Node ffff880135a32980), AE_AML_BUFFER_LIMIT" ACPI Error (uteval-0256): Method execution failed [\_SB_.MEM_._CRS] (Node f7017f60), AE_AML_BUFFER_LIMIT" ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20100121/tbfadt-369)" ACPI Warning: 32/64X FACS address mismatch in FADT - DF647F40/00000000DF64AD40, using 32 20090521 tbfadt-487" ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 (20100121/tbfadt-526)" ACPI Warning: _BQC returned an invalid level (20100121/video-638)" ACPI Warning: Could not enable fixed event 3 (20090903/evxface-146)" ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x0080 (20090903/psloop-522)" ACPI Warning (dsobject-0502): Package List length (C) larger than NumElements count (3), truncated" ACPI Warning: Evaluating _BQC failed (20090903/video-641)" ACPI Warning (evxface-0146): Could not enable fixed event 3 [20090320]" ACPI Warning for \_PR_.CPU0._PSD: [] lapic_timer_state_broadcast+0x46/0x48" ACPI Warning for \_SB_.BAT0._BIF: Return Package type mismatch at index 9 - found [NULL Object Descriptor], expected String/Buffer (20090903/nspredef-1012)" ACPI Warning for \_SB_.BAT1._BIF: Return Package type mismatch at index 12 - found Integer, expected String/Buffer (20090903/nspredef-1012)" ACPI Warning for \_SB_.PCI0.BAT0._BIF: Converted Buffer to expected String at index 9 (20090903/nsrepair-132)" ACPI Warning for \_SB_.PCI0.IDE1.PRT0._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006)" ACPI Warning for \_SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to expected String at index 9 (20090903/nsrepair-132)" ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100121/nspredef-352)" ACPI Warning for \_SB_.PCI0._OSC: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006)" ACPI Warning for \_SB_.PCI0.PCIB._PRT: Return Package has no elements (empty) (20090903/nspredef-433)" ACPI Warning for \_SB_.PCI0._PRT: Return Package type mismatch at index 2 - found [NULL Object Descriptor], expected Integer/Reference (20090903/nspredef-1012)" ACPI Warning for \_SB_.PCI0.SATA.PRT1._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006)" ACPI Warning for \_SB_.PCI0.VID2._DOD: Return Package has no elements (empty) (20090903/nspredef-433)" ACPI Warning for \_TZ_.THRM._PSL: Return Package type mismatch at index 0 - found [NULL Object Descriptor], expected Reference (20100121/nspredef-1059)" ACPI Warning for \_TZ_.THRM._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference (20090903/nspredef-1012)" ACPI Warning for \_TZ_.TZ01._PSV: Return type mismatch - found Package, expected Integer (20090903/nspredef-1006)" ACPI Warning: Incorrect checksum in table [SSDT] - AE, should be 74 20090521 tbutils-246" ACPI Warning: Invalid length for Pm2ControlBlock: 16, using default 8 20090521 tbfadt-608" ACPI Warning: Invalid throttling state, reset 20090521 processor_throttling-843" ACPI Warning (nseval-0168): Insufficient arguments - method [_OSC] needs 5, found 4 [20080926]" ACPI Warning (nspredef-0252): \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, expected 4 [20080926]" ACPI Warning (nspredef-0357): \_PR_.CPU1._PSD: Return Package has no elements (empty) [20080926]" ACPI Warning (nspredef-0357): \_SB_.PCI0.AGP_.SLI_.SLI1.VID1._DOD: Return Package has no elements (empty) [20080926]" ACPI Warning (nspredef-0437): \_SB_.PCI0.VID2._DOD: Return Package has no elements (empty) [20090320]" ACPI Warning (nspredef-0852): \_PR_.CPU0._PSS: Return type mismatch - found Integer, expected Package [20080926]" ACPI Warning (nspredef-0852): \_SB_.PCI0.SATA.PRT1._GTF: Return type mismatch - found Integer, expected Buffer [20080926]" ACPI Warning (nspredef-0858): \_TZ_.THRM._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference [20080926]" ACPI Warning (nspredef-0943): \_SB_.PCI0.FNC2.PRT0._GTF: Return type mismatch - found Integer, expected Buffer [20090320]" ACPI Warning (nspredef-0949): \_SB_.BAT1._BIF: Return Package type mismatch at index 12 - found Integer, expected String/Buffer [20090320]" ACPI Warning: Optional field Gpe1Block has zero address or length: 000000000000802C/0 (20090903/tbfadt-557)" ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0000000000000820/0 20090521 tbfadt-558" ACPI Warning: Package List length (0x10) larger than NumElements count (0x6), truncated" ACPI Warning: Package List length (EA) larger than NumElements count (3), truncated" ACPI Warning: \_PR_.CPU0._CST: Return Package is too small - found 4, expected 4 20090521 nspredef-748" ACPI Warning: \_PR_.CPU0._PSD: Return Package type mismatch at index 0 - found Integer, expected Package 20090521 nspredef-946" ACPI Warning (processor_throttling-0843): Invalid throttling state, reset [20090320]" ACPI Warning: \_SB_.PCI0.FNC2.PRT4._GTF: Return type mismatch - found Integer, expected Buffer 20090521 nspredef-940" ACPI Warning: \_SB_.PCI0.PEGP.NVGA.MXMI: Excess arguments - needs 1, found 2 20090521 nspredef-287" ACPI Warning: \_SB_.PCI0.VID2._DOD: Return Package has no elements (empty) 20090521 nspredef-434" ACPI Warning (tbutils-0246): Incorrect checksum in table [OEMB] - 96, should be 95 [20090320]" ACPI Warning: \_TZ_.THRM._PSL: Return Package type mismatch at index 0 - found [NULL Object Descriptor], expected Reference 20090521 nspredef-946" ACPI Warning: \_TZ_.TZ00._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference 20090521 nspredef-946" CPU0: Temperature above threshold, cpu clock throttled (total events = 1)" Disabling IRQ #10" Disabling IRQ #9" [Firmware Bug]: ACPI: ACPI brightness control misses _BQC function" [Firmware Bug]: ACPI(IGPU) defines _DOD but not _DOS" [Firmware Bug]: ACPI: Invalid BIOS _PSS frequency: 0x0 MHz" [Firmware Bug]: ACPI(Z01I) defines _DOD but not _DOS" [Firmware Bug]: _BCQ is used instead of _BQC" [Firmware Bug]: BIOS needs update for CPU frequency support" [Firmware Bug]: Invalid critical threshold (0)" [Firmware Bug]: powernow-k8: No compatible ACPI _PSS objects found." [Firmware Bug]: powernow-k8: No PSB or ACPI _PSS objects" [Firmware Bug]: powernow-k8: Try again with latest BIOS." [Firmware Bug]: powernow-k8: Your BIOS does not provide ACPI _PSS objects in a way that Linux understands. Please report this to the Linux ACPI maintainers and complain to your BIOS vendor." example-data/sample-errors.log000066400000000000000000002565471465205512700167500ustar00rootroot00000000000000ACPI Error: 32/64X address mismatch in Gpe0Block: 00008018/0000000000008028, using 32 (20090903/tbfadt-427)" ACPI Error: 32/64X address mismatch in Gpe0Block: 00008020/0000000000008028, using 32 20090521 tbfadt-428" ACPI Error: 32/64X address mismatch in Gpe0Block: 00008020/0000000000008028, using 32 (20090903/tbfadt-427)" ACPI Error: 32/64X address mismatch in Gpe0Block: 0000F828/000000000001F030, using 32 20090521 tbfadt-428" ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 00008030/0000000000008020, using 32 (20090903/tbfadt-427)" ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 00008800/0000000000008100, using 32 20090521 tbfadt-428" ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 00008800/0000000000008100, using 32 (20090903/tbfadt-427)" ACPI Error: ACPI path has too many parent prefixes (^) - reached beyond root node (20090903/nsaccess-429)" ACPI Error: A valid RSDP was not found 20090521 tbxfroot-219" ACPI Error: A valid RSDP was not found (20090903/tbxfroot-219)" ACPI Error: Cannot release Mutex [MUT0], not acquired (20090903/exmutex-374)" ACPI Error: Could not disable RealTimeClock events 20090521 evxfevnt-373" ACPI Error: Could not enable PowerButton event 20090521 evxfevnt-193" ACPI Error: Could not enable PowerButton event (20090903/evxfevnt-193)" ACPI Error: Could not enable SleepButton event 20090521 evxfevnt-193" ACPI Error: Could not enable SleepButton event (20090903/evxfevnt-193)" ACPI Error: Current brightness invalid 20090521 video-538" ACPI Error (dsfield-0139): [CAPB] Namespace lookup failure, AE_ALREADY_EXISTS" ACPI Error (dsfield-0140): [CAPB] Namespace lookup failure, AE_ALREADY_EXISTS" ACPI Error (dsfield-0140): [CAPD] Namespace lookup failure, AE_ALREADY_EXISTS" ACPI Error (dsfield-0143): [CAPB] Namespace lookup failure, AE_ALREADY_EXISTS" ACPI Error (dsfield-0143): [CAPD] Namespace lookup failure, AE_ALREADY_EXISTS" ACPI Error (dsobject-0501): Package List length (5) larger than NumElements count (3), truncated" ACPI Error (dsopcode-0595): Field [ASSM] at 524320 exceeds Buffer [BUF0] size 880 (bits) [20080926]" ACPI Error (dsopcode-0595): Field [I9MN] at 544 exceeds Buffer [IORT] size 464 (bits) [20080609]" ACPI Error (dsopcode-0595): Field [I9MN] at 544 exceeds Buffer [IORT] size 464 (bits) [20080926]" ACPI Error (dswload-0190): [\_PR_.CPU0] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (dswload-0659): [DD02] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (dswload-0659): [EHC1] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (dswload-0659): [\___P] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (dswload-0659): [USB0] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (dswload-0673): [\___p] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (dswload-0674): [\___p] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (dswload-0781): [PRID] Namespace lookup failure, AE_ALREADY_EXISTS" ACPI Error (dswload-0781): [_PSW] Namespace lookup failure, AE_ALREADY_EXISTS" ACPI Error (dswload-0781): [_T_0] Namespace lookup failure, AE_ALREADY_EXISTS" ACPI Error (dswload-0790): [_T_0] Namespace lookup failure, AE_ALREADY_EXISTS" ACPI Error (dswstate-0097): Result stack is empty! State=ffff8800378ba400 [20080926]" ACPI Error (dswstate-0097): Result stack is empty! State=ffff8800378ba800 [20080926]" ACPI Error: Evaluating _BCM failed 20090521 video-526" ACPI Error (evregion-0315): No handler for Region [ERAM] (ffff88013f819ee8) [EmbeddedControl] [20080926]" ACPI Error (evxfevnt-0193): Could not enable SleepButton event [20090320]" ACPI Error (evxfevnt-0366): Could not disable RealTimeClock events [20080926]" ACPI Error (exfldio-0291): Region EmbeddedControl(3) has no handler [20080926]" ACPI Error: Field [ASSM] at 524320 exceeds Buffer [BUF0] size 880 (bits) 20090521 dsopcode-596" ACPI Error: Field [ASSM] at 524320 exceeds Buffer [BUF0] size 880 (bits) (20090903/dsopcode-596)" ACPI Error: Field [I9MN] at 544 exceeds Buffer [IORT] size 464 (bits) (20090903/dsopcode-596)" ACPI Error: Illegal I/O port address/length above 64K: 0x0000000000400020/4 20090521 hwvalid-154" ACPI Error: Incorrect return type [Integer] requested [Package] 20090521 nsxfeval-134" ACPI Error: Needed [Buffer/String/Package], found [Integer] f7257c08 (20090903/exresop-590)" ACPI Error: Needed type [Reference], found [Device] f700ef90 20090521 exresop-104" ACPI Error: Needed type [Reference], found [Device] f700ff90 20090521 exresop-104" ACPI Error: Needed type [Reference], found [Device] f700ff90 (20090903/exresop-104)" ACPI Error: Needed type [Reference], found [Device] f7012f90 (20090903/exresop-104)" ACPI Error: Needed type [Reference], found [Device] ffff8800379a6800 (20090903/exresop-104)" ACPI Error: Needed type [Reference], found [Device] ffff8800379a7800 (20090903/exresop-104)" ACPI Error: Needed type [Reference], found [Device] ffff880075927800 (20090903/exresop-104)" ACPI Error: Needed type [Reference], found [Device] ffff880075928800 20090521 exresop-104" ACPI Error: Needed type [Reference], found [Device] ffff88014b82d800 (20090903/exresop-104)" ACPI Error: No handler for Region [ECF2] (ffff88013ba313a8) [EmbeddedControl] (20090903/evregion-319)" ACPI Error: No handler for Region [ERAM] (f70124d8) [EmbeddedControl] 20090521 evregion-319" ACPI Error: No handler for Region [ERAM] (f7016938) [EmbeddedControl] 20090521 evregion-319" ACPI Error: No handler for Region [ERAM] (ffff88007592bd80) [EmbeddedControl] 20090521 evregion-319" ACPI Error: No handler for Region [ERAM] (ffff88007cf2dea0) [EmbeddedControl] 20090521 evregion-319" ACPI Error: No handler for Region [ERAM] (ffff88007d32bf78) [EmbeddedControl] (20090903/evregion-319)" ACPI Error: No handler for Region [ERAM] (ffff88007db2ad80) [EmbeddedControl] (20090903/evregion-319)" ACPI Error: No handler for Region [ERAM] (ffff88011b82fd80) [EmbeddedControl] 20090521 evregion-319" ACPI Error: No handler for Region [ERAM] (ffff880133e3e798) [EmbeddedControl] (20090903/evregion-319)" ACPI Error: No handler for Region [PCFG] (f704b118) [PCI_Config] (20090903/evregion-319)" ACPI Error: No handler for Region [PCFG] (ffff880137a733f0) [PCI_Config] (20090903/evregion-319)" ACPI Error: No handler for Region [PCFG] (ffff88013ba6ff78) [PCI_Config] (20090903/evregion-319)" ACPI Error: No handler for Region [PCFG] (ffff8801b907a3f0) [PCI_Config] (20090903/evregion-319)" ACPI Error: No handler for Region [SACS] (f701b500) [PCI_Config] (20090903/evregion-319)" ACPI Error: No handler for Region [SACS] (f70c52a8) [PCI_Config] (20090903/evregion-319)" ACPI Error: No handler for Region [SACS] (ffff88006df3f7e0) [PCI_Config] (20090903/evregion-319)" ACPI Error: No handler for Region [SACS] (ffff88012bb0f1f8) [PCI_Config] (20090903/evregion-319)" ACPI Error (nsaccess-0434): ACPI path has too many parent prefixes (^) - reached beyond root node [20080926]" ACPI Error (nspredef-0163): \_SB_.PCI0.FNC2.PRT0._GTF: Missing expected return value [20080926]" ACPI Error (nspredef-0163): \_SB_.PCI0.FNC2.PRT1._GTF: Missing expected return value [20080926]" ACPI Error (psargs-0358): [CDW1] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [CDW1] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [ECEN] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [FZHD] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [GTF0] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [GTF1] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [HPTF] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [MPEN] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [OSYS] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [PDSX] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [\_PR_.CPU0._PPC] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [\_SB_.PCI0.LPCB.EC0_.HBTN] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [\_SB_.PHSR] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [SMS_] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [SUPP] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [_T_0] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [TPOS] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [URES] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psargs-0359): [Z012] Namespace lookup failure, AE_NOT_FOUND" ACPI Error (psloop-0136): Found unknown opcode 26 at AML address ffff88003785663a offset 56, ignoring [20080926]" ACPI Error (psparse-0524): Method parse/execution failed [\_PR_.CPU0._PSS] (Node ffff88007f26eee0), AE_AML_NO_RETURN_VALUE" ACPI Error (psparse-0524): Method parse/execution failed [\_PR_.CPU1._OSC] (Node f6c10198), AE_ALREADY_EXISTS" ACPI Error (psparse-0524): Method parse/execution failed [\_PR_.CPU1._PDC] (Node f6c10180), AE_ALREADY_EXISTS" ACPI Error (psparse-0524): Method parse/execution failed [\_PR_.CPU1._PDC] (Node f6c11150), AE_INVALID_TABLE_LENGTH" ACPI Error (psparse-0524): Method parse/execution failed [\_PR_.CPU1._PDC] (Node ffff88022f819f00), AE_ALREADY_EXISTS" ACPI Error (psparse-0524): Method parse/execution failed [\_PR_.CPU1._PSS] (Node ffff88007f26efa0), AE_AML_NO_RETURN_VALUE" ACPI Error (psparse-0524): Method parse/execution failed [\_PR_.CPU2._OSC] (Node f6c10270), AE_ALREADY_EXISTS" ACPI Error (psparse-0524): Method parse/execution failed [\_PR_.CPU2._PDC] (Node f6c10258), AE_ALREADY_EXISTS" ACPI Error (psparse-0524): Method parse/execution failed [\_PR_.CPU2._PDC] (Node f6c111e0), AE_INVALID_TABLE_LENGTH" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.MEM_._CRS] (Node f6c1b0a8), AE_AML_BUFFER_LIMIT" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0._INI] (Node db02d630), AE_NOT_FOUND" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0.LPC0.PMIO._CRS] (Node f6c15900), AE_AML_BUFFER_LIMIT" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0.LPC0.PMIO._CRS] (Node ffff88007f017980), AE_AML_BUFFER_LIMIT" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0.LPC0.PMIO._CRS] (Node ffff88007f817980), AE_AML_BUFFER_LIMIT" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._REG] (Node ffff88013f81a260), AE_NOT_EXIST" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0._OSC] (Node de813cc0), AE_ALREADY_EXISTS" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0._OSC] (Node de814cc0), AE_ALREADY_EXISTS" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f6c10d38), AE_ALREADY_EXISTS" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f6c14cc0), AE_ALREADY_EXISTS" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f6c15cc0), AE_ALREADY_EXISTS" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f6c15dc8), AE_ALREADY_EXISTS" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff8800bf017360), AE_NOT_FOUND" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff88013f814b80), AE_NOT_FOUND" ACPI Error (psparse-0524): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff88013f814e40), AE_NOT_FOUND" ACPI Error (psparse-0530): Method parse/execution failed [\_SB_.PCI0.LPC0.PMIO._CRS] (Node ffff880135a32980), AE_AML_BUFFER_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\CPUT] (Node f7017600), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\CPUT] (Node f701c150), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\CPUT] (Node ffff88013384e6e0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\CPUT] (Node ffff880137a4e840), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\CPUT] (Node ffff88013ba4e100), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\CPUT] (Node ffff88013ba4f480), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\CPUT] (Node ffff8801b9059860), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\CPUT] (Node ffff880237056be0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\CPUT] (Node ffff8802370570c0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\EV4_] (Node f701b210), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\EV4_] (Node ffff880227059000), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_GPE._L02] (Node ffff88007cf2a9c0), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_GPE._L02] (Node ffff88007d3289c0), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_GPE._L02] (Node ffff88013ba32120), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_GPE._L09] (Node ffff88003b5a7520), AE_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\J380._STA] (Node f701cba0), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\J380._STA] (Node ffff88013710c380), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\J380._STA] (Node ffff88013712b380), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\J380._STA] (Node ffff88013bb3fa80), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\J380._STA] (Node ffff8801b916e720), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\NEVT] (Node f702e9d8), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\NEVT] (Node ffff880227052160), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\] (Node c08cc7dc), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\] (Node c08ce7dc), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\] (Node c08ce7dc), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\] (Node c090665c), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\] (Node c091bffc), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\] (Node c091bffc), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\] (Node c091f65c), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\] (Node ffffffff81a06440), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\] (Node ffffffff81a08440), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\] (Node ffffffff81a08440), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\] (Node ffffffff81a4d180), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\P8XH] (Node ffff88013ba28020), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU1._PDC] (Node f700e150), AE_INVALID_TABLE_LENGTH" ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU1._PDC] (Node f7015930), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU1._PDC] (Node ffff88012ba49180), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU1._PDC] (Node ffff88013ba3ffa0), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU2._PDC] (Node ef80d1e0), AE_INVALID_TABLE_LENGTH" ACPI Error (psparse-0537): Method parse/execution failed [\PRID.P_D0._STA] (Node f701ba38), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\PRID.P_D0._STA] (Node f7072000), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\PRID.P_D0._STA] (Node ffff88006df34f00), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\PRID.P_D0._STA] (Node ffff88012bb111a0), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\PRID.P_D1._STA] (Node f701baf8), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\PRID.P_D1._STA] (Node f70720a8), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\PRID.P_D1._STA] (Node ffff88006dfe3000), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\PRID.P_D1._STA] (Node ffff88012bb11280), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.PPCE] (Node f702c7c8), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.PPCE] (Node ffff88022704e960), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\PSSC] (Node f7017618), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\PSSC] (Node f701c168), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\PSSC] (Node ffff88013384e700), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\PSSC] (Node ffff880137a4e860), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\PSSC] (Node ffff88013ba4e120), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\PSSC] (Node ffff88013ba4f4a0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\PSSC] (Node ffff8801b9059880), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\PSSC] (Node ffff880237056c00), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\PSSC] (Node ffff8802370570e0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_PSW] (Node f701f0a8), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\PXSX._STA] (Node ffff880133871ee0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.ADP0.ADJP] (Node ffff88013ba355c0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.ADP0.ADJP] (Node ffff88013ba3c5a0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.ADP0._PSR] (Node ffff88013ba35580), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.ADP0._PSR] (Node ffff88013ba3c560), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.BAT1._BIF] (Node f700ed38), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.BAT1._BIF] (Node f700ee40), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.BAT1._BIF] (Node f7010d38), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.BAT1.UBIF] (Node f700ed68), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.BAT1.UBIF] (Node f700ed68), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.BAT1.UBIF] (Node f700ee70), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.BAT1.UBIF] (Node f700ee70), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.BAT1.UBIF] (Node f7010d68), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.BAT1.UBIF] (Node f7010d68), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.HTEV] (Node f700de58), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.HTEV] (Node f700ee10), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.HTEV] (Node ffff880075929600), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.HTEV] (Node ffff88007db28600), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.HTEV] (Node ffff88011b82d600), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.MEM_._CRS] (Node f7017f60), AE_AML_BUFFER_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.MEM_._CRS] (Node f7018f60), AE_AML_BUFFER_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.MEM_._CRS] (Node ffff8800b4444e60), AE_AML_BUFFER_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.MEM_._CRS] (Node ffff88013ba44cc0), AE_AML_BUFFER_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_._OSC] (Node f701a648), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_._OSC] (Node ffff88007f815ba0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_._OSC] (Node ffff88122fc1ea00), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.ACAD._PSR] (Node f701aa98), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.ACAD._PSR] (Node ffff88013384d720), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.ACEL._STA] (Node f7019f18), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.BAT0._BST] (Node f7013f30), AE_TIME" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.CBST] (Node f7015000), AE_TIME" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.DOCK._STA] (Node ffff880133e48620), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.GFX0.DD02._BQC] (Node f7017a50), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.GFX0.DD02.GBQC] (Node f7017a68), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.HPET._CRS] (Node ffff88007db32220), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.HPET._CRS] (Node ffff88013ba40220), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.HPET._STA] (Node ffff88007db32200), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.HPET._STA] (Node ffff88013ba40200), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._INI] (Node db80e690), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._INI] (Node f700f6c0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPC0.BAT1._BST] (Node f70141e0), AE_TIME" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPC0.EC0_._REG] (Node f7013be8), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPC0.EC0_._REG] (Node f7017d08), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPC0.EC0_._REG] (Node ffff88002f1b4aa0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPC0.EC0_._REG] (Node ffff8800759319a0), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPC0.EC0_._REG] (Node ffff88007db309a0), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPC0.EC0_._REG] (Node ffff88011b8359a0), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPC0.PMIO._CRS] (Node f7015900), AE_AML_BUFFER_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._Q09] (Node f7017468), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._Q09] (Node f70177b0), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._Q09] (Node f7019468), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._REG] (Node f7012a50), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._REG] (Node f702f3c0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._REG] (Node ffff88013383fbc0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._REG] (Node ffff880137a3fd00), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._REG] (Node ffff88013ba3c700), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._REG] (Node ffff88013ba49700), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._REG] (Node ffff8801b903fd20), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._REG] (Node ffff88023703fa80), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._REG] (Node ffff880237048d20), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.ECDV._Q66] (Node f702e690), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.ECDV._Q66] (Node ffff880227050d00), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.KBC0.SMWR] (Node ffff88007cf2ebc0), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.KBC0.SMWR] (Node ffff88007d32c8c0), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPC_.EC0_._REG] (Node f70142b8), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node db412378), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node de811cc0), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node de8151e0), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node dec11cc0), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node dec13ca8), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7010e88), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7011780), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7011bd0), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f70122a0), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f70124f8), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7012cc0), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7012dc8), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7012f00), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7013330), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f70137f8), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f70140d8), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7014228), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f70142b8), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7014a50), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7014a68), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7014a80), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7014ca8), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f70155b8), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7016a68), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7016d98), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7016dc8), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7017dc8), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7018dc8), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f701adc8), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f7413270), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node f74141e0), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff8800379bba80), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff8800379bbaa0), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff8800379bca80), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff88007592ea80), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff88007592eaa0), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff88007592faa0), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff88007bf2bf20), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff88007d32abc0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff88007d32ccc0), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff8800bc62d3a0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff88011ba2d200), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff88012ba38260), AE_ALREADY_EXISTS" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff88013ba29e80), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff88013ba393a0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0._OSC] (Node ffff88014b83caa0), AE_AML_OPERAND_TYPE" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.PEGP.EVGA.LCD_._BCM] (Node ffff8800bc647c80), AE_AML_PACKAGE_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.PIB_.EXFG] (Node f7015768), AE_AML_MUTEX_NOT_ACQUIRED" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.PIB_.FIR_._STA] (Node f7015900), AE_AML_MUTEX_NOT_ACQUIRED" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.RTC_._CRS] (Node ffff88007db322c0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.RTC_._CRS] (Node ffff88013ba402c0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT0.PRT0._SDD] (Node ffff880233656ce0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT0.PRT1._SDD] (Node ffff880233656dc0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT1.CHN0._GTM] (Node f7014a38), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT1.CHN0._GTM] (Node f70150f0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT1.CHN1._GTM] (Node f7014b28), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT1.CHN1._GTM] (Node f70151e0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SATA.CHN0._GTM] (Node f7014300), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SATA.CHN0._GTM] (Node f7014978), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SATA.CHN1._GTM] (Node f70143f0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SATA.CHN1._GTM] (Node f7014a68), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SATA.PRT0._SDD] (Node f7018e58), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SATA.PRT0._SDD] (Node ffff8800bc632c60), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SBRG.EC0_.BST2] (Node f7012e58), AE_TIME" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PMI0._GHL] (Node ffff88122fc1ece0), AE_AML_BUFFER_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PMI0._PMC] (Node ffff88122fc1ec60), AE_AML_BUFFER_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\SECD.S_D0._STA] (Node f701bc78), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\SECD.S_D0._STA] (Node f7072210), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\SECD.S_D0._STA] (Node ffff88006dfe3200), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\SECD.S_D0._STA] (Node ffff88012bb11460), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\SECD.S_D1._STA] (Node f701bd38), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\SECD.S_D1._STA] (Node f70722b8), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\SECD.S_D1._STA] (Node ffff88006dfe3300), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\SECD.S_D1._STA] (Node ffff88012bb11540), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\SMIE] (Node f702ea20), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\SMIE] (Node ffff8802270521c0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.C2E5] (Node f7017f30), AE_AML_PACKAGE_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.C2E6] (Node f7017f48), AE_AML_PACKAGE_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.C2E7] (Node f701b0f0), AE_AML_PACKAGE_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.C2E8] (Node f701b108), AE_AML_PACKAGE_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.THRM.SFAN] (Node ffff88007cf2aec0), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.THRM.SFAN] (Node ffff88007d328ec0), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.THRM.THCK] (Node ffff88007cf2af40), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.THRM.THCK] (Node ffff88007d328f40), AE_NOT_EXIST" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.THRM._TMP] (Node f7018be8), AE_TIME" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.THRM._TMP] (Node f701a018), AE_TIME" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.TZ00._PSL] (Node ffff88013be3fde0), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.TZ00._PSL] (Node ffff88015ba4de00), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.TZ00._PSL] (Node ffff880257054e20), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.TZ01._HOT] (Node f7019e70), AE_NOT_FOUND" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.TZ2_._TMP] (Node f7019618), AE_AML_PACKAGE_LIMIT" ACPI Error (psparse-0537): Method parse/execution failed [\_TZ_.TZ2_._TMP] (Node f701b7c8), AE_AML_PACKAGE_LIMIT" ACPI Error: Region EmbeddedControl(3) has no handler 20090521 exfldio-288" ACPI Error: Region EmbeddedControl(3) has no handler 20090521 exfldio-294" ACPI Error: Region EmbeddedControl(3) has no handler (20090903/exfldio-295)" ACPI Error: Region PCI_Config(2) has no handler (20090903/exfldio-295)" ACPI Error: SMBus or IPMI write requires Buffer of length 42, found length 20 (20090903/exfield-286)" ACPI Error (uteval-0232): Method execution failed [\_SB_.MEM_._CRS] (Node f6c1b0a8), AE_AML_BUFFER_LIMIT" ACPI Error (uteval-0232): Method execution failed [\_SB_.PCI0.LPC0.PMIO._CRS] (Node f6c15900), AE_AML_BUFFER_LIMIT" ACPI Error (uteval-0232): Method execution failed [\_SB_.PCI0.LPC0.PMIO._CRS] (Node ffff88007f017980), AE_AML_BUFFER_LIMIT" ACPI Error (uteval-0232): Method execution failed [\_SB_.PCI0.LPC0.PMIO._CRS] (Node ffff88007f817980), AE_AML_BUFFER_LIMIT" ACPI Error (uteval-0232): Method execution failed [\_SB_.PCI0.LPC0.PMIO._CRS] (Node ffff880135a32980), AE_AML_BUFFER_LIMIT" ACPI Error (uteval-0250): Method execution failed [\J380._STA] (Node f701cba0), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\J380._STA] (Node ffff88013710c380), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\J380._STA] (Node ffff88013712b380), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\J380._STA] (Node ffff88013bb3fa80), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\J380._STA] (Node ffff8801b916e720), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\PRID.P_D0._STA] (Node f701ba38), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\PRID.P_D0._STA] (Node f7072000), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\PRID.P_D0._STA] (Node ffff88006df34f00), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\PRID.P_D0._STA] (Node ffff88012bb111a0), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\PRID.P_D1._STA] (Node f701baf8), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\PRID.P_D1._STA] (Node f70720a8), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\PRID.P_D1._STA] (Node ffff88006dfe3000), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\PRID.P_D1._STA] (Node ffff88012bb11280), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\_SB_.MEM_._CRS] (Node f7018f60), AE_AML_BUFFER_LIMIT" ACPI Error (uteval-0250): Method execution failed [\_SB_.MEM_._CRS] (Node ffff8800b4444e60), AE_AML_BUFFER_LIMIT" ACPI Error (uteval-0250): Method execution failed [\_SB_.MEM_._CRS] (Node ffff88013ba44cc0), AE_AML_BUFFER_LIMIT" ACPI Error (uteval-0250): Method execution failed [\_SB_.PCI0.DOCK._STA] (Node ffff880133e48620), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\_SB_.PCI0.LPC0.PMIO._CRS] (Node f7015900), AE_AML_BUFFER_LIMIT" ACPI Error (uteval-0250): Method execution failed [\_SB_.PCI0.PIB_.FIR_._STA] (Node f7015900), AE_AML_MUTEX_NOT_ACQUIRED" ACPI Error (uteval-0250): Method execution failed [\SECD.S_D0._STA] (Node f701bc78), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\SECD.S_D0._STA] (Node f7072210), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\SECD.S_D0._STA] (Node ffff88006dfe3200), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\SECD.S_D0._STA] (Node ffff88012bb11460), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\SECD.S_D1._STA] (Node f701bd38), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\SECD.S_D1._STA] (Node f70722b8), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\SECD.S_D1._STA] (Node ffff88006dfe3300), AE_NOT_EXIST" ACPI Error (uteval-0250): Method execution failed [\SECD.S_D1._STA] (Node ffff88012bb11540), AE_NOT_EXIST" ACPI Error (uteval-0256): Method execution failed [\_SB_.MEM_._CRS] (Node f7017f60), AE_AML_BUFFER_LIMIT" ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! 20090521 tbfadt-370" ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20090903/tbfadt-369)" ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20100121/tbfadt-369)" ACPI Warning: 32/64X FACS address mismatch in FADT - 3762DF40/000000003762DF80, using 32 (20090903/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - 3F611E40/000000003F611D40, using 32 20090521 tbfadt-487" ACPI Warning: 32/64X FACS address mismatch in FADT - 3F611E40/000000003F611D40, using 32 (20090903/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - 5F611E40/000000005F611D40, using 32 20090521 tbfadt-487" ACPI Warning: 32/64X FACS address mismatch in FADT - 7B76BF40/000000007B76ED40, using 32 (20090903/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - 7F3EBF40/000000007F3E7F40, using 32 20090521 tbfadt-487" ACPI Warning: 32/64X FACS address mismatch in FADT - 7F3ECF40/000000007F3E8F40, using 32 (20090903/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - 7F611E40/000000007F611D40, using 32 20090521 tbfadt-487" ACPI Warning: 32/64X FACS address mismatch in FADT - 7FD5FF40/000000007FD65E40, using 32 20090521 tbfadt-487" ACPI Warning: 32/64X FACS address mismatch in FADT - 9DCC4F40/000000009DCC5E40, using 32 (20090903/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - 9DF17E40/000000009DF17D40, using 32 20090521 tbfadt-487" ACPI Warning: 32/64X FACS address mismatch in FADT - B7B1CE40/00000000B7B1CD40, using 32 (20100121/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - BADABF40/00000000BADAED40, using 32 (20090903/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - BB76BF40/00000000BB76ED40, using 32 (20090903/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - BBB61F40/00000000BBB67E40, using 32 20090521 tbfadt-487" ACPI Warning: 32/64X FACS address mismatch in FADT - BD651F40/00000000BD656F40, using 32 20090521 tbfadt-487" ACPI Warning: 32/64X FACS address mismatch in FADT - BDB5FF40/00000000BDB64F40, using 32 (20090903/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - BDB61F40/00000000BDB66F40, using 32 20090521 tbfadt-487" ACPI Warning: 32/64X FACS address mismatch in FADT - BDF19E40/00000000BDF19D40, using 32 (20090903/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - BFA51F40/00000000BFA56F40, using 32 20090521 tbfadt-487" ACPI Warning: 32/64X FACS address mismatch in FADT - BFE17E40/00000000BFE17D40, using 32 20090521 tbfadt-487" ACPI Warning: 32/64X FACS address mismatch in FADT - CB628E40/00000000CB628D40, using 32 20090521 tbfadt-487" ACPI Warning: 32/64X FACS address mismatch in FADT - CBE4AF40/00000000CBE4FF40, using 32 (20090903/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - CBF6BF40/00000000CBF6ED40, using 32 (20090903/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - CEF28F40/00000000CEF2BD40, using 32 (20090903/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - CEF2CF40/00000000CEF2FD40, using 32 (20090903/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - DADC1F40/00000000DADD5D40, using 32 (20090903/tbfadt-486)" ACPI Warning: 32/64X FACS address mismatch in FADT - DF647F40/00000000DF64AD40, using 32 20090521 tbfadt-487" ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 20090521 tbfadt-527" ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 (20090903/tbfadt-526)" ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 (20100121/tbfadt-526)" ACPI Warning: _BQC returned an invalid level 20090521 video-629" ACPI Warning: _BQC returned an invalid level (20090903/video-631)" ACPI Warning: _BQC returned an invalid level (20091214/video-638)" ACPI Warning: _BQC returned an invalid level (20100121/video-638)" ACPI Warning: Could not enable fixed event 2 20090521 evxface-146" ACPI Warning: Could not enable fixed event 2 (20090903/evxface-146)" ACPI Warning: Could not enable fixed event 3 20090521 evxface-146" ACPI Warning: Could not enable fixed event 3 (20090903/evxface-146)" ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x006C (20090903/psloop-522)" ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x006F (20090903/psloop-522)" ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x0070 (20090903/psloop-522)" ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x0077 (20090903/psloop-522)" ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x007C (20090903/psloop-522)" ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x007D (20090903/psloop-522)" ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x007F (20090903/psloop-522)" ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x0080 (20090903/psloop-522)" ACPI Warning (dsobject-0501): Package List length (1) larger than NumElements count (0), truncated" ACPI Warning (dsobject-0501): Package List length (5) larger than NumElements count (4), truncated" ACPI Warning (dsobject-0501): Package List length (C) larger than NumElements count (2), truncated" ACPI Warning (dsobject-0501): Package List length (C) larger than NumElements count (3), truncated" ACPI Warning (dsobject-0501): Package List length (C) larger than NumElements count (4), truncated" ACPI Warning (dsobject-0502): Package List length (C) larger than NumElements count (3), truncated" ACPI Warning: Evaluating _BQC failed (20090903/video-641)" ACPI Warning (evxface-0146): Could not enable fixed event 3 [20090320]" ACPI Warning for \_PR_.CPU0._PSD:" ACPI Warning for \_PR_.CPU0._PSD: [] lapic_timer_state_broadcast+0x46/0x48" ACPI Warning for \_PR_.CPU0._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012)" ACPI Warning for \_PR_.CPU1._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012)" ACPI Warning for \_PR_.CPU2._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012)" ACPI Warning for \_PR_.CPU3._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012)" ACPI Warning for \_PR_.CPU4._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012)" ACPI Warning for \_PR_.CPU5._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012)" ACPI Warning for \_PR_.CPU6._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012)" ACPI Warning for \_PR_.CPU7._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012)" ACPI Warning for \_SB_.BAT0._BIF: Return Package type mismatch at index 12 - found Integer, expected String/Buffer (20090903/nspredef-1012)" ACPI Warning for \_SB_.BAT0._BIF: Return Package type mismatch at index 9 - found [NULL Object Descriptor], expected String/Buffer (20090903/nspredef-1012)" ACPI Warning for \_SB_.BAT1._BIF: Return Package type mismatch at index 12 - found Integer, expected String/Buffer (20090903/nspredef-1012)" ACPI Warning for \_SB_.BAT1._BST: Return Package type mismatch at index 2 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012)" ACPI Warning for \_SB_.PCI0.BAT0._BIF: Converted Buffer to expected String at index 9 (20090903/nsrepair-132)" ACPI Warning for \_SB_.PCI0.FNC2.PRT0._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006)" ACPI Warning for \_SB_.PCI0.FNC2.PRT1._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006)" ACPI Warning for \_SB_.PCI0.IDE1.PRT0._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006)" ACPI Warning for \_SB_.PCI0.LPC_.EC__.BAT0._BIF:" ACPI Warning for \_SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to expected String at index 10 (20090903/nsrepair-132)" ACPI Warning for \_SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to expected String at index 11 (20090903/nsrepair-132)" ACPI Warning for \_SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to expected String at index 12 (20090903/nsrepair-132)" ACPI Warning for \_SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to expected String at index 9 (20090903/nsrepair-132)" ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20090903/nspredef-336)" ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20091214/nspredef-351)" ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100121/nspredef-352)" ACPI Warning for \_SB_.PCI0._OSC: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006)" ACPI Warning for \_SB_.PCI0.P0P1._PRT: Return Package has no elements (empty) (20090903/nspredef-433)" ACPI Warning for \_SB_.PCI0.PCIB._PRT: Return Package has no elements (empty) (20090903/nspredef-433)" ACPI Warning for \_SB_.PCI0._PRT: Return Package type mismatch at index 2 - found [NULL Object Descriptor], expected Integer/Reference (20090903/nspredef-1012)" ACPI Warning for \_SB_.PCI0.SAT0.PRT0._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006)" ACPI Warning for \_SB_.PCI0.SAT0.PRT1._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006)" ACPI Warning for \_SB_.PCI0.SATA.PRT0._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006)" ACPI Warning for \_SB_.PCI0.SATA.PRT1._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006)" ACPI Warning for \_SB_.PCI0.VID2._DOD: Return Package has no elements (empty) (20090903/nspredef-433)" ACPI Warning for \_TZ_.THRM._PSL: Return Package type mismatch at index 0 - found [NULL Object Descriptor], expected Reference (20090903/nspredef-1012)" ACPI Warning for \_TZ_.THRM._PSL: Return Package type mismatch at index 0 - found [NULL Object Descriptor], expected Reference (20100121/nspredef-1059)" ACPI Warning for \_TZ_.THRM._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference (20090903/nspredef-1012)" ACPI Warning for \_TZ_.TZ01._PSV: Return type mismatch - found Package, expected Integer (20090903/nspredef-1006)" ACPI Warning: Incorrect checksum in table [ASF!] - 59, should be 08 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [ASF!] - 77, should be B6 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [ASF!] - E9, should be 94 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [ASF!] - F2, should be 8D (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [ATKG] - 0F, should be E7 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [ATKG] - 49, should be 84 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [ATKG] - 6A, should be E5 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [ATKG] - 90, should be 59 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [ATKG] - 96, should be 59 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [ATKG] - 9D, should be 53 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [ATKG] - A4, should be 59 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [ATKG] - AA, should be 59 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [ATKG] - B0, should be 4A 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [ATKG] - C8, should be E5 (20100121/tbutils-314)" ACPI Warning: Incorrect checksum in table [ATKG] - CD, should be 59 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [ATKG] - E4, should be 59 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [ATKG] - E5, should be 59 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [ATKG] - E7, should be 59 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [GSCI] - 3B, should be BF (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [GSCI] - 58, should be AA (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [GSCI] - A8, should be 7B (20100121/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 00, should be FF 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 03, should be FE 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 04, should be 54 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 05, should be FD 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 06, should be 05 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 0B, should be 02 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 0B, should be 02 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 0C, should be FF 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 0F, should be 03 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 0x77, should be 0x6A (20100428/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 16, should be 14 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 17, should be 67 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 18, should be 13 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 1D, should be 10 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 1F, should be 16 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 20, should be 17 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 24, should be 17 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 24, should be 1D 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 25, should be 16 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 26, should be 76 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 29, should be 1A (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 2A, should be 29 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 2E, should be 2D 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 2F, should be 22 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 2F, should be 24 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 30, should be 23 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 33, should be 2E (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 3F, should be 3B (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 40, should be 3F (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 42, should be 35 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 43, should be 3E 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 44, should be 6C (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 45, should be 40 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 4C, should be 40 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 52, should be 4E 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 52, should be 7D 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 55, should be 4D 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 57, should be 4E 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 58, should be 53 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 59, should be 4C 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 5B, should be 50 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 5B, should be 5A 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 5C, should be 4F 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 5F, should be 52 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 61, should be 54 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 61, should be 58 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 63, should be 5E 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 65, should be 5C 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 66, should be 5D 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 68, should be 5A 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 69, should be 5F (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 6B, should be 66 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 6B, should be 6A (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 6C, should be 27 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 6D, should be 60 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 6D, should be 6A (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 6E, should be 65 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 6E, should be 66 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 6F, should be 6E (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 6F, should be 9A (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 70, should be 67 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 72, should be 69 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 72, should be 69 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 73, should be 64 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 73, should be 66 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 74, should be 6F 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 75, should be 74 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 77, should be 6A 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 77, should be 76 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 7B, should be 74 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 7B, should be 76 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 7B, should be 7A 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 7D, should be 74 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 7D, should be 74 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 83, should be 7A 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 83, should be 82 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 85, should be 78 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 85, should be 84 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 86, should be 83 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 86, should be 85 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 88, should be 7F (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 89, should be 88 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 8B, should be 7F 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 8B, should be 8A (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 8C, should be 88 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 8D, should be 80 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 8D, should be 88 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 8D, should be 8C 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 8E, should be 85 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 91, should be 88 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 91, should be 90 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 96, should be 91 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - 99, should be 94 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - 9D, should be B1 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - A0, should be 9B 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - A1, should be 94 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - A3, should be 9E (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - A6, should be A1 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - A8, should be A0 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - A9, should be 9B 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - AC, should be A5 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - AC, should be A7 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - AD, should be A4 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - AE, should be A1 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - B0, should be AB (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - B1, should be A8 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - B2, should be A5 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - B2, should be A9 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - B2, should be B1 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - B2, should be B1 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - B3, should be AE (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - B6, should be B3 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - B7, should be B6 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - B8, should be B1 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - B8, should be B7 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - BB, should be AE 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - BB, should be AE (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - BC, should be B3 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - BF, should be B2 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - C0, should be B7 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - C1, should be C0 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - C1, should be C0 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - C2, should be B9 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - C5, should be BC 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - C7, should be B8 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - C9, should be C8 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - CA, should be C9 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - CB, should be C3 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - CB, should be C6 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - CC, should be BF 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - CD, should be C4 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - CD, should be CC (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - CE, should be C9 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - CF, should be A8 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - D0, should be C1 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - D0, should be CF 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - D3, should be C6 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - D4, should be C7 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - D4, should be D0 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - D5, should be D4 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - D6, should be D5 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - D7, should be CE (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - D8, should be AC 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - DA, should be D9 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - DA, should be D9 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - DC, should be D7 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - DD, should be D0 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - DD, should be D4 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - DD, should be D8 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - DE, should be D6 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - DF, should be 2F (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - E0, should be 30 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - E0, should be D7 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - E1, should be D3 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - E1, should be D8 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - E1, should be D8 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - E4, should be D7 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - E4, should be E3 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - E6, should be DD 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - E7, should be D8 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - E8, should be E3 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - E8, should be E3 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - EA, should be DD 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - EB, should be DE 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - EB, should be E3 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - EB, should be EA 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - EC, should be E7 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - ED, should be EC 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - EE, should be E9 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - F0, should be E3 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - F1, should be E8 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - F6, should be 46 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - F6, should be E7 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [OEMB] - F9, should be 24 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - FC, should be ED 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [OEMB] - FF, should be FA (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [_RAT] - 00, should be 63 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [SSDT] - 37, should be C7 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - 39, should be 1C 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - 46, should be AF 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - 49, should be 4D 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - 4C, should be 12 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [SSDT] - 57, should be 18 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - 5C, should be 22 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - 5C, should be A6 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [SSDT] - 63, should be A6 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - 68, should be E9 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - 6D, should be DB (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [SSDT] - 72, should be 79 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [SSDT] - 7B, should be ED 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - 83, should be 7F (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [SSDT] - 83, should be 8F 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - 83, should be E1 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - 8D, should be 39 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [SSDT] - A8, should be 37 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - AE, should be 74 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - B3, should be B2 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [SSDT] - C5, should be CC 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - D9, should be 4D 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - E4, should be 73 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - EB, should be AC 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - F5, should be 51 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [SSDT] - F9, should be 3C (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [TAMG] - E0, should be DF (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 7F 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 7F (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 87 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 87 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 89 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 93 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 95 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 96 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 96 (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be A9 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be AB (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [TCPA] - B6, should be 5A 20090521 tbutils-246" ACPI Warning: Incorrect checksum in table [TCPA] - B6, should be 5A (20090903/tbutils-314)" ACPI Warning: Incorrect checksum in table [TCPA] - D3, should be 77 20090521 tbutils-246" ACPI Warning: Invalid length for Pm1aControlBlock: 32, using default 16 20090521 tbfadt-608" ACPI Warning: Invalid length for Pm1aControlBlock: 32, using default 16 (20090903/tbfadt-607)" ACPI Warning: Invalid length for Pm2ControlBlock: 0, using default 8 20090521 tbfadt-608" ACPI Warning: Invalid length for Pm2ControlBlock: 16, using default 8 20090521 tbfadt-608" ACPI Warning: Invalid throttling state, reset 20090521 processor_throttling-843" ACPI Warning (nseval-0168): Insufficient arguments - method [_OSC] needs 5, found 4 [20080926]" ACPI Warning (nspredef-0252): \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, expected 4 [20080926]" ACPI Warning (nspredef-0357): \_PR_.CPU1._PSD: Return Package has no elements (empty) [20080926]" ACPI Warning (nspredef-0357): \_SB_.PCI0.AGP_.SLI_.SLI1.VID1._DOD: Return Package has no elements (empty) [20080926]" ACPI Warning (nspredef-0357): \_SB_.PCI0.P0P1._PRT: Return Package has no elements (empty) [20080926]" ACPI Warning (nspredef-0357): \_SB_.PCI0.P2P_._PRT: Return Package has no elements (empty) [20080926]" ACPI Warning (nspredef-0357): \_SB_.PCI0.PCIB._PRT: Return Package has no elements (empty) [20080926]" ACPI Warning (nspredef-0357): \_SB_.PCI0.VID2._DOD: Return Package has no elements (empty) [20080926]" ACPI Warning (nspredef-0437): \_SB_.PCI0.VID2._DOD: Return Package has no elements (empty) [20090320]" ACPI Warning (nspredef-0852): \_PR_.CPU0._PSS: Return type mismatch - found Integer, expected Package [20080926]" ACPI Warning (nspredef-0852): \_SB_.PCI0.SATA.PRT0._GTF: Return type mismatch - found Integer, expected Buffer [20080926]" ACPI Warning (nspredef-0852): \_SB_.PCI0.SATA.PRT1._GTF: Return type mismatch - found Integer, expected Buffer [20080926]" ACPI Warning (nspredef-0858): \_SB_.BAT1._BIF: Return Package type mismatch at index 12 - found Integer, expected String/Buffer [20080926]" ACPI Warning (nspredef-0858): \_SB_.BAT1._BST: Return Package type mismatch at index 2 - found [NULL Object Descriptor], expected Integer [20080926]" ACPI Warning (nspredef-0858): \_SB_.BAT2._BIF: Return Package type mismatch at index 12 - found Integer, expected String/Buffer [20080926]" ACPI Warning (nspredef-0858): \_TZ_.THRM._PSL: Return Package type mismatch at index 0 - found [NULL Object Descriptor], expected Reference [20080926]" ACPI Warning (nspredef-0858): \_TZ_.THRM._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference [20080926]" ACPI Warning (nspredef-0943): \_SB_.PCI0.FNC2.PRT0._GTF: Return type mismatch - found Integer, expected Buffer [20090320]" ACPI Warning (nspredef-0949): \_SB_.BAT1._BIF: Return Package type mismatch at index 12 - found Integer, expected String/Buffer [20090320]" ACPI Warning: Optional field Gpe1Block has zero address or length: 000000000000102C/0 20090521 tbfadt-558" ACPI Warning: Optional field Gpe1Block has zero address or length: 000000000000102C/0 (20090903/tbfadt-557)" ACPI Warning: Optional field Gpe1Block has zero address or length: 000000000000102C/0 (20100121/tbfadt-557)" ACPI Warning: Optional field Gpe1Block has zero address or length: 000000000000802C/0 (20090903/tbfadt-557)" ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0000000000000000/1 20090521 tbfadt-558" ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0000000000000000/1 (20090903/tbfadt-557)" ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0000000000000000/1 (20100121/tbfadt-557)" ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0000000000000450/0 20090521 tbfadt-558" ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0000000000000820/0 20090521 tbfadt-558" ACPI Warning: Package List length (0x10) larger than NumElements count (0x6), truncated" ACPI Warning: Package List length (0x10) larger than NumElements count (0x8), truncated" ACPI Warning: Package List length (0x1) larger than NumElements count (0x0), truncated" ACPI Warning: Package List length (0x5) larger than NumElements count (0x2), truncated" ACPI Warning: Package List length (0x5) larger than NumElements count (0x3), truncated" ACPI Warning: Package List length (0x6) larger than NumElements count (0x2), truncated" ACPI Warning: Package List length (0x6) larger than NumElements count (0x3), truncated" ACPI Warning: Package List length (0x7) larger than NumElements count (0x3), truncated" ACPI Warning: Package List length (0xA8) larger than NumElements count (0x3), truncated" ACPI Warning: Package List length (0xCA) larger than NumElements count (0x4), truncated" ACPI Warning: Package List length (0xC) larger than NumElements count (0x4), truncated" ACPI Warning: Package List length (10A) larger than NumElements count (2), truncated" ACPI Warning: Package List length (10) larger than NumElements count (6), truncated" ACPI Warning: Package List length (1) larger than NumElements count (0), truncated" ACPI Warning: Package List length (6) larger than NumElements count (2), truncated" ACPI Warning: Package List length (8) larger than NumElements count (5), truncated" ACPI Warning: Package List length (A8) larger than NumElements count (3), truncated" ACPI Warning: Package List length (CA) larger than NumElements count (4), truncated" ACPI Warning: Package List length (C) larger than NumElements count (3), truncated" ACPI Warning: Package List length (C) larger than NumElements count (4), truncated" ACPI Warning: Package List length (C) larger than NumElements count (6), truncated" ACPI Warning: Package List length (EA) larger than NumElements count (3), truncated" ACPI Warning: \_PR_.CPU0._CST: Return Package is too small - found 4, expected 4 20090521 nspredef-748" ACPI Warning: \_PR_.CPU0._PSD: Return Package type mismatch at index 0 - found Integer, expected Package 20090521 nspredef-946" ACPI Warning: \_PR_.CPU0._TSD: Return Package type mismatch at index 0 - found Integer, expected Package 20090521 nspredef-946" ACPI Warning: \_PR_.CPU1._PSD: Return Package type mismatch at index 0 - found Integer, expected Package 20090521 nspredef-946" ACPI Warning: \_PR_.CPU1._TSD: Return Package type mismatch at index 0 - found Integer, expected Package 20090521 nspredef-946" ACPI Warning (processor_throttling-0843): Invalid throttling state, reset [20090320]" ACPI Warning: \_SB_.BAT1._BIF: Return Package type mismatch at index 12 - found Integer, expected String/Buffer 20090521 nspredef-946" ACPI Warning: \_SB_.BAT1._BST: Return Package type mismatch at index 2 - found [NULL Object Descriptor], expected Integer 20090521 nspredef-946" ACPI Warning: \_SB_.PCI0.AGP_.VGA_.LCD_._BQC: Return type mismatch - found Reference, expected Integer 20090521 nspredef-940" ACPI Warning: \_SB_.PCI0.FNC2.PRT0._GTF: Return type mismatch - found Integer, expected Buffer 20090521 nspredef-940" ACPI Warning: \_SB_.PCI0.FNC2.PRT1._GTF: Return type mismatch - found Integer, expected Buffer 20090521 nspredef-940" ACPI Warning: \_SB_.PCI0.FNC2.PRT4._GTF: Return type mismatch - found Integer, expected Buffer 20090521 nspredef-940" ACPI Warning: \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 20090521 nspredef-328" ACPI Warning: \_SB_.PCI0.P0P1._PRT: Return Package has no elements (empty) 20090521 nspredef-434" ACPI Warning: \_SB_.PCI0.P0P2.M86_.LCD_._BCL: Return type mismatch - found Integer, expected Package 20090521 nspredef-940" ACPI Warning: \_SB_.PCI0.P2P_._PRT: Return Package has no elements (empty) 20090521 nspredef-434" ACPI Warning: \_SB_.PCI0.PCIB._PRT: Return Package has no elements (empty) 20090521 nspredef-434" ACPI Warning: \_SB_.PCI0.PEGP.NVGA.MXMI: Excess arguments - needs 1, found 2 20090521 nspredef-287" ACPI Warning: \_SB_.PCI0.PEGP.NVGA.MXMS: Excess arguments - needs 1, found 2 20090521 nspredef-287" ACPI Warning: \_SB_.PCI0.SATA.PRT0._GTF: Return type mismatch - found Integer, expected Buffer 20090521 nspredef-940" ACPI Warning: \_SB_.PCI0.SATA.PRT2._GTF: Return type mismatch - found Integer, expected Buffer 20090521 nspredef-940" ACPI Warning: \_SB_.PCI0.VID2._DOD: Return Package has no elements (empty) 20090521 nspredef-434" ACPI Warning (tbfadt-0370): 32/64 FACS address mismatch in FADT - two FACS tables! [20090320]" ACPI Warning (tbfadt-0442): Optional field "Gpe1Block" has zero address or length: 000000000000102C/0 [20080321]" ACPI Warning (tbfadt-0442): Optional field "Gpe1Block" has zero address or length: 000000000000102C/0 [20080609]" ACPI Warning (tbfadt-0442): Optional field "Pm2ControlBlock" has zero address or length: 0000000000000000/1 [20080609]" ACPI Warning (tbfadt-0460): Optional field "Gpe1Block" has zero address or length: 000000000000102C/0 [20080926]" ACPI Warning (tbfadt-0460): Optional field "Pm2ControlBlock" has zero address or length: 0000000000000000/1 [20080926]" ACPI Warning (tbfadt-0460): Optional field "Pm2ControlBlock" has zero address or length: 0000000000000820/0 [20080926]" ACPI Warning (tbfadt-0488): 32/64X FACS address mismatch in FADT - 3F611E40/000000003F611D40, using 32 [20090320]" ACPI Warning (tbfadt-0488): 32/64X FACS address mismatch in FADT - 7DB62F40/000000007DB67F40, using 32 [20090320]" ACPI Warning (tbfadt-0531): 32/64X length mismatch in Gpe1Block: 0/32 [20090320]" ACPI Warning (tbfadt-0562): Optional field Gpe1Block has zero address or length: 000000000000102C/0 [20090320]" ACPI Warning (tbutils-0217): Incorrect checksum in table [ASF!] - CD, should be 61 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [ASF!] - FC, should be 97 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [ATKG] - 16, should be 59 [20080609]" ACPI Warning (tbutils-0217): Incorrect checksum in table [ATKG] - 6E, should be E5 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [ATKG] - 9D, should be 59 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [ATKG] - B0, should be 4A [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [ATKG] - C9, should be EC [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [ATKG] - D4, should be 59 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 0B, should be 0A [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 1B, should be 12 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 26, should be 18 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 35, should be 60 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 38, should be 63 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 58, should be 4F [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 5C, should be 4F [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 5E, should be 51 [20080609]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 6B, should be 5E [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 6C, should be 62 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 6C, should be 67 [20080609]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 74, should be 6C [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 75, should be A0 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 78, should be B0 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 79, should be A4 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 85, should be 78 [20080321]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 8D, should be 7F [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 9A, should be 91 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - A2, should be 99 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - A8, should be 9B [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - AF, should be 81 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - B1, should be A4 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - B2, should be A5 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - B2, should be AA [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - C0, should be BB [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - C6, should be BD [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - CC, should be BF [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - CC, should be FD [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - CF, should be C6 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - DD, should be D4 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - DE, should be D3 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - E0, should be DD [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - E2, should be D5 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - E4, should be D7 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - E4, should be DB [20080609]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - EC, should be E3 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - EE, should be E1 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - F1, should be E4 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - F3, should be EE [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - F6, should be E9 [20080609]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - F6, should be F5 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - FA, should be ED [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - FB, should be FA [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [SSDT] - 48, should be 0E [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [SSDT] - 64, should be 2A [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [SSDT] - 83, should be 7B [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [SSDT] - 83, should be 97 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [SSDT] - 9E, should be 4A [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [TCPA] - 00, should be 87 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [TCPA] - 00, should be 9A [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [TCPA] - 00, should be A5 [20080926]" ACPI Warning (tbutils-0217): Incorrect checksum in table [TCPA] - 00, should be A9 [20080926]" ACPI Warning (tbutils-0246): Incorrect checksum in table [OEMB] - 35, should be 60 [20090320]" ACPI Warning (tbutils-0246): Incorrect checksum in table [OEMB] - 96, should be 95 [20090320]" ACPI Warning: \_TZ_.THRM._AL0: Return Package type mismatch at index 0 - found [NULL Object Descriptor], expected Reference 20090521 nspredef-946" ACPI Warning: \_TZ_.THRM._PSL: Return Package type mismatch at index 0 - found [NULL Object Descriptor], expected Reference 20090521 nspredef-946" ACPI Warning: \_TZ_.THRM._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference 20090521 nspredef-946" ACPI Warning: \_TZ_.THRM._TZD: Return Package type mismatch at index 0 - found Processor, expected Reference 20090521 nspredef-946" ACPI Warning: \_TZ_.TZ00._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference 20090521 nspredef-946" CPU0: Temperature above threshold, cpu clock throttled (total events = 1)" Disabling IRQ #10" Disabling IRQ #11" Disabling IRQ #16" Disabling IRQ #18" Disabling IRQ #19" Disabling IRQ #20" Disabling IRQ #21" Disabling IRQ #5" Disabling IRQ #9" [Firmware Bug]: ACPI: ACPI brightness control misses _BQC function" [Firmware Bug]: ACPI(EVGA) defines _DOD but not _DOS" [Firmware Bug]: ACPI(IGPU) defines _DOD but not _DOS" [Firmware Bug]: ACPI: Invalid BIOS _PSS frequency: 0x0 MHz" [Firmware Bug]: ACPI(NGFX) defines _DOD but not _DOS" [Firmware Bug]: ACPI(NVGA) defines _DOD but not _DOS" [Firmware Bug]: ACPI(PEGP) defines _DOD but not _DOS" [Firmware Bug]: ACPI(VGA0) defines _DOD but not _DOS" [Firmware Bug]: ACPI(VGA) defines _DOD but not _DOS" [Firmware Bug]: ACPI(XVS0) defines _DOD but not _DOS" [Firmware Bug]: ACPI(Z00P) defines _DOD but not _DOS" [Firmware Bug]: ACPI(Z01I) defines _DOD but not _DOS" [Firmware Bug]: _BCQ is used instead of _BQC" [Firmware Bug]: BIOS needs update for CPU frequency support" [Firmware Bug]: Invalid critical threshold (0)" [Firmware Bug]: powernow-k8: No compatible ACPI _PSS objects found." [Firmware Bug]: powernow-k8: No PSB or ACPI _PSS objects" [Firmware Bug]: powernow-k8: Try again with latest BIOS." [Firmware Bug]: powernow-k8: Your BIOS does not provide ACPI _PSS objects in a way that Linux understands. Please report this to the Linux ACPI maintainers and complain to your BIOS vendor." fedora/000077500000000000000000000000001465205512700123255ustar00rootroot00000000000000fedora/buildrpm.sh000077500000000000000000000027221465205512700145050ustar00rootroot00000000000000#!/bin/bash # # Script to build Fedora and Red Hat fwts rpms # # NOTE: release changes should be made directly to the fwts.spec file # and not this script. This script reads from fwts.spec to determine the # values of major, minor, and submajor values. #setup RPM env RPMBUILD=$(if [ -x "/usr/bin/rpmbuild" ]; then echo rpmbuild; \ else echo rpm; fi) RPM="$(pwd)/rpm" mkdir -p $RPM/SOURCES $RPM/BUILD $RPM/SRPMS $RPM/SPECS # find the version in src/lib/include/fwts_version.h _fwts_version=$(git grep FWTS_VERSION ../src/lib/include/fwts_version.h | awk -F "\"" ' { print $2 } ') # strip off leading "V" from FWTS_VERSION fwts_version=${_fwts_version#"V"} # change __VERSION, __MAJOR, and __MINOR_SUBMINOR in fwts.spec.in major=$(echo $fwts_version | awk -F "." ' { print $1 }') minor_subminor=$(echo $fwts_version | awk -F "." ' { print $2"."$3 }') sed -i 's/{__VERSION}/'${fwts_version}'/g' fwts.spec.in sed -i 's/{__MAJOR}/'${major}'/g' fwts.spec.in sed -i 's/{__MINOR_SUBMINOR}/'${minor_subminor}'/g' fwts.spec.in # create fwts.spec from fwts.spec.in cp -f fwts.spec.in fwts.spec # get the tarball (cd $RPM/SOURCES && curl -O http://fwts.ubuntu.com/release/fwts-V${fwts_version}.tar.gz) # copy the specfile over rm -f $RPM/SPECS/fwts.spec cp fwts.spec $RPM/SPECS # build the rpm $RPMBUILD --define "_sourcedir $RPM/SOURCES" --define "_builddir $RPM/BUILD" --define "_srcrpmdir $RPM/SRPMS" --define "_rpmdir $RPM/RPMS" --define "_specdir $RPM/SPECS" -ba $RPM/SPECS/fwts.spec fedora/fwts.spec.in000066400000000000000000000056201465205512700145740ustar00rootroot00000000000000# Only this value needs to change for package version control. Note changing # this value does not affect the changelog. %global fedora_version 0 %global tarversion {__VERSION} Summary: Firmware Test Suite Name: fwts Version: {__MAJOR} Release: {__MINOR_SUBMINOR}.%{fedora_version}%{?dist} License: GPLv2, LGPL Source0: http://fwts.ubuntu.com/release/fwts-V%{tarversion}.tar.gz BuildRequires: acpica-tools glib-devel glib2-devel glib json-c-devel libtool automake autoconf dkms kernel-devel git bison flex %description Firmware Test Suite (FWTS) is a test suite that performs sanity checks on Intel/AMD PC firmware. It is intended to identify BIOS and ACPI errors and if appropriate it will try to explain the errors and give advice to help workaround or fix firmware bugs. It is primarily intended to be a Linux-centric firmware troubleshooting tool. %prep %setup -a 0 -n fwts-%{tarversion} -c git init git config user.email "example@example.com" git config user.name "RHEL Ninjas" git add . git commit -a -q -m "fwts %{tarversion} baseline." # uncomment if patches need to be applied #git am %{patches} # *** This is useful if testing patches against latest upstream version *** # %setup -T -c -n fwts-%{tarversion} # git clone git://kernel.ubuntu.com/hwe/fwts.git ./ # uncomment if patches need to be applied # git am %{patches} # *** %build autoreconf -ivf ./configure make %{?_smp_mflags} %install mkdir -p $RPM_BUILD_ROOT/%{_bindir} mkdir -p $RPM_BUILD_ROOT/%{_datarootdir}/fwts mkdir -p $RPM_BUILD_ROOT/%{_lib} mkdir -p $RPM_BUILD_ROOT/%{_mandir}/man1 mkdir -p $RPM_BUILD_ROOT/usr/local/share/fwts install -m 755 src/.libs/fwts $RPM_BUILD_ROOT/%{_bindir} install -m 755 live-image/fwts-frontend-text $RPM_BUILD_ROOT/%{_bindir} install -m 755 scripts/fwts-collect $RPM_BUILD_ROOT/%{_bindir} install -m 644 live-image/fwts-live-dialogrc $RPM_BUILD_ROOT/%{_datarootdir}/fwts install -m 777 src/lib/src/.libs/libfwts.so.* $RPM_BUILD_ROOT/%{_lib} install -m 777 src/acpica/.libs/libfwtsacpica.so* $RPM_BUILD_ROOT/%{_lib} install -m 777 src/acpica/source/compiler/.libs/libfwtsiasl.so* $RPM_BUILD_ROOT/%{_lib} install -m 644 doc/fwts-frontend-text.1 $RPM_BUILD_ROOT/%{_mandir}/man1 install -m 644 doc/fwts.1 $RPM_BUILD_ROOT/%{_mandir}/man1 install -m 644 doc/fwts-collect.1 $RPM_BUILD_ROOT/%{_mandir}/man1 install -m 644 data/klog.json $RPM_BUILD_ROOT/usr/local/share/fwts install -m 644 data/syntaxcheck.json $RPM_BUILD_ROOT/usr/local/share/fwts %clean %post %postun %files %{_bindir}/* %{_datarootdir}/fwts /%{_lib}/* %{_mandir}/*/* /usr/local/share/fwts/* %changelog * Thu Jan 19 2017 Prarit Bhargava {__VERSION}.0 - sync to stable V{__VERSION} * Thu Jan 19 2017 Prarit Bhargava 16.12.00.0 - fix location of klog.json - add fedora version to differentiate between fedora builds * Thu Jan 12 2017 Prarit Bhargava 16.12.00 - initial specfile creation - sync to stable V16.12.00 fwts-test/000077500000000000000000000000001465205512700130255ustar00rootroot00000000000000fwts-test/acpidump-0001/000077500000000000000000000000001465205512700152055ustar00rootroot00000000000000fwts-test/acpidump-0001/acpidump-0001.log000066400000000000000000001352241465205512700200770ustar00rootroot00000000000000acpidump acpidump: Dump ACPI tables. acpidump ---------------------------------------------------------- acpidump Test 1 of 1: Dump ACPI tables. acpidump RSDP @ f7240 (36 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 8] Signature : "RSD PTR " acpidump [008h 0008 1] Checksum : c5 acpidump [009h 0009 6] Oem ID : "LENOVO" acpidump [00fh 0015 1] Revision : 02 acpidump [010h 0016 4] RSDT Address : bf6d8794 acpidump [014h 0020 4] Table Length : 00000024 acpidump [018h 0024 8] XSDT Address : 00000000bf6d87f0 acpidump [020h 0032 1] Extended Checksum : 39 acpidump [021h 0033 3] Reserved : 00 00 00 acpidump acpidump RSDT @ bf6d8794 (88 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 004h] Signature : "RSDT" [Root System Description Table] acpidump [004h 0004 004h] Table Length : 00000058 acpidump [008h 0008 001h] Revision : 01 acpidump [009h 0009 001h] Checksum : 43 acpidump [00Ah 0010 006h] Oem ID : "LENOVO" acpidump [010h 0016 008h] Oem Table ID : "TP-68 " acpidump [018h 0024 004h] Oem Revision : 06040000 acpidump [01Ch 0028 004h] Asl Compiler ID : " LTP" acpidump [020h 0032 004h] Asl Compiler Revision : 00000000 acpidump [024h 0036 004h] ACPI Table Address 0 : BF6DFB5E acpidump [028h 0040 004h] ACPI Table Address 1 : BF6DFCC6 acpidump [02Ch 0044 004h] ACPI Table Address 2 : BF6DFD2E acpidump [030h 0048 004h] ACPI Table Address 3 : BF6DFD66 acpidump [034h 0052 004h] ACPI Table Address 4 : BF6DFFD8 acpidump [038h 0056 004h] ACPI Table Address 5 : BF6DFDD4 acpidump [03Ch 0060 004h] ACPI Table Address 6 : BF6DFDFA acpidump [040h 0064 004h] ACPI Table Address 7 : BF6DFF70 acpidump [044h 0068 004h] ACPI Table Address 8 : BF6D98BD acpidump [048h 0072 004h] ACPI Table Address 9 : BF6D981A acpidump [04Ch 0076 004h] ACPI Table Address 10 : BF6D8E10 acpidump [050h 0080 004h] ACPI Table Address 11 : BF6D8D6A acpidump [054h 0084 004h] ACPI Table Address 12 : BF6D8884 acpidump 0000: 52 53 44 54 58 00 00 00 01 43 4C 45 4E 4F 56 4F // RSDTX....CLENOVO acpidump 0010: 54 50 2D 36 38 20 20 20 00 00 04 06 20 4C 54 50 // TP-68 .... LTP acpidump 0020: 00 00 00 00 5E FB 6D BF C6 FC 6D BF 2E FD 6D BF // ....^.m...m...m. acpidump 0030: 66 FD 6D BF D8 FF 6D BF D4 FD 6D BF FA FD 6D BF // f.m...m...m...m. acpidump 0040: 70 FF 6D BF BD 98 6D BF 1A 98 6D BF 10 8E 6D BF // p.m...m...m...m. acpidump 0050: 6A 8D 6D BF 84 88 6D BF // j.m...m. acpidump acpidump DSDT @ bf6d9b6a (24564 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 4] Signature : "DSDT" acpidump [004h 0004 4] Table Length : 00005ff4 acpidump [008h 0008 1] Revision : 02 acpidump [009h 0009 1] Checksum : 11 acpidump [00Ah 0010 6] Oem ID : "TOSCPL" acpidump [010h 0016 8] Oem Table ID : "CRESTLNE" acpidump [018h 0024 4] Oem Revision : 06040000 acpidump [01Ch 0028 4] Asl Compiler ID : "INTL" acpidump [020h 0032 4] Asl Compiler Revision : 20060608 acpidump Contains AML Object Code. acpidump acpidump FACS @ bf6e2fc0 (64 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 004h] Signature : "FACS" acpidump [004h 0004 004h] Length : 00000040 acpidump [008h 0008 004h] Hardware Signature : 00000000 acpidump [00Ch 0012 004h] 32 Firmware Waking Vector : 00000000 acpidump [010h 0016 004h] Global Lock : 00000000 acpidump [014h 0020 004h] Flags (decoded below) : 00000000 acpidump S4BIOS Support Present : 0 acpidump 64-bit Wake Supported (V2) : 0 acpidump [018h 0024 008h] 64 Firmware Waking Vector : 0000000000000000 acpidump [020h 0032 001h] Version : 01 acpidump [021h 0033 003h] Reserved : 000000 acpidump [024h 0036 004h] OspmFlags (decoded below) : 00000000 acpidump 64-bit Wake Env Required (V2) : 0 acpidump 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... acpidump 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump acpidump FACP @ bf6dfb5e (116 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 004h] Signature : "FACP" [Fixed ACPI Description Table (FADT)] acpidump [004h 0004 004h] Table Length : 00000074 acpidump [008h 0008 001h] Revision : 01 acpidump [009h 0009 001h] Checksum : 5C acpidump [00Ah 0010 006h] Oem ID : "TOSCPL" acpidump [010h 0016 008h] Oem Table ID : "CRESTLNE" acpidump [018h 0024 004h] Oem Revision : 06040000 acpidump [01Ch 0028 004h] Asl Compiler ID : "LOHR" acpidump [020h 0032 004h] Asl Compiler Revision : 0000005A acpidump [024h 0036 004h] FACS Address : BF6E2FC0 acpidump [028h 0040 004h] DSDT Address : BF6D9B6A acpidump [02Ch 0044 001h] Model : 00 acpidump [02Dh 0045 001h] PM Profile : 00 [Unspecified] acpidump [02Eh 0046 002h] SCI Interrupt : 0009 acpidump [030h 0048 004h] SMI Command Port : 000000B2 acpidump [034h 0052 001h] ACPI Enable Value : F0 acpidump [035h 0053 001h] ACPI Disable Value : F1 acpidump [036h 0054 001h] S4BIOS Command : 00 acpidump [037h 0055 001h] P-State Control : 80 acpidump [038h 0056 004h] PM1A Event Block Address : 00001000 acpidump [03Ch 0060 004h] PM1B Event Block Address : 00000000 acpidump [040h 0064 004h] PM1A Control Block Address : 00001004 acpidump [044h 0068 004h] PM1B Control Block Address : 00000000 acpidump [048h 0072 004h] PM2 Control Block Address : 00001020 acpidump [04Ch 0076 004h] PM Timer Block Address : 00001008 acpidump [050h 0080 004h] GPE0 Block Address : 00001028 acpidump [054h 0084 004h] GPE1 Block Address : 00000000 acpidump [058h 0088 001h] PM1 Event Block Length : 04 acpidump [059h 0089 001h] PM1 Control Block Length : 02 acpidump [05Ah 0090 001h] PM2 Control Block Length : 01 acpidump [05Bh 0091 001h] PM Timer Block Length : 04 acpidump [05Ch 0092 001h] GPE0 Block Length : 08 acpidump [05Dh 0093 001h] GPE1 Block Length : 00 acpidump [05Eh 0094 001h] GPE1 Base Offset : 00 acpidump [05Fh 0095 001h] _CST Support : 85 acpidump [060h 0096 002h] C2 Latency : 0001 acpidump [062h 0098 002h] C3 Latency : 0039 acpidump [064h 0100 002h] CPU Cache Size : 0000 acpidump [066h 0102 002h] Cache Flush Stride : 0000 acpidump [068h 0104 001h] Duty Cycle Offset : 01 acpidump [069h 0105 001h] Duty Cycle Width : 03 acpidump [06Ah 0106 001h] RTC Day Alarm Index : 0D acpidump [06Bh 0107 001h] RTC Month Alarm Index : 00 acpidump [06Ch 0108 001h] RTC Century Index : 32 acpidump [06Dh 0109 002h] Boot Flags (decoded below) : 0000 acpidump Legacy Devices Supported (V2) : 0 acpidump 8042 Present on ports 60/64 (V2) : 0 acpidump VGA Not Present (V4) : 0 acpidump MSI Not Supported (V4) : 0 acpidump PCIe ASPM Not Supported (V4) : 0 acpidump CMOS RTC Not Present (V5) : 0 acpidump [06Fh 0111 001h] Reserved : 00 acpidump [070h 0112 004h] Flags (decoded below) : 000080A5 acpidump WBINVD instruction is operational (V1) : 1 acpidump WBINVD flushes all caches (V1) : 0 acpidump All CPUs support C1 (V1) : 1 acpidump C2 works on MP system (V1) : 0 acpidump Control Method Power Button (V1) : 0 acpidump Control Method Sleep Button (V1) : 1 acpidump RTC wake not in fixed reg space (V1) : 0 acpidump RTC can wake system from S4 (V1) : 1 acpidump 32-bit PM Timer (V1) : 0 acpidump Docking Supported (V1) : 0 acpidump Reset Register Supported (V2) : 0 acpidump Sealed Case (V3) : 0 acpidump Headless - No Video (V3) : 0 acpidump Use native instr after SLP_TYPx (V3) : 0 acpidump PCIEXP_WAK Bits Supported (V4) : 0 acpidump Use Platform Timer (V4) : 1 acpidump RTC_STS valid on S4 wake (V4) : 0 acpidump Remote Power-on capable (V4) : 0 acpidump Use APIC Cluster Model (V4) : 0 acpidump Use APIC Physical Destination Mode (V4) : 0 acpidump Hardware Reduced (V5) : 0 acpidump Low Power S0 Idle (V5) : 0 acpidump 0000: 46 41 43 50 74 00 00 00 01 5C 54 4F 53 43 50 4C // FACPt....\TOSCPL acpidump 0010: 43 52 45 53 54 4C 4E 45 00 00 04 06 4C 4F 48 52 // CRESTLNE....LOHR acpidump 0020: 5A 00 00 00 C0 2F 6E BF 6A 9B 6D BF 00 00 09 00 // Z..../n.j.m..... acpidump 0030: B2 00 00 00 F0 F1 00 80 00 10 00 00 00 00 00 00 // ................ acpidump 0040: 04 10 00 00 00 00 00 00 20 10 00 00 08 10 00 00 // ........ ....... acpidump 0050: 28 10 00 00 00 00 00 00 04 02 01 04 08 00 00 85 // (............... acpidump 0060: 01 00 39 00 00 00 00 00 01 03 0D 00 32 00 00 00 // ..9.........2... acpidump 0070: A5 80 00 00 // .... acpidump acpidump APIC @ bf6dfcc6 (104 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 004h] Signature : "APIC" [Multiple APIC Description Table (MADT)] acpidump [004h 0004 004h] Table Length : 00000068 acpidump [008h 0008 001h] Revision : 01 acpidump [009h 0009 001h] Checksum : CC acpidump [00Ah 0010 006h] Oem ID : "INTEL " acpidump [010h 0016 008h] Oem Table ID : "CRESTLNE" acpidump [018h 0024 004h] Oem Revision : 06040000 acpidump [01Ch 0028 004h] Asl Compiler ID : "LOHR" acpidump [020h 0032 004h] Asl Compiler Revision : 0000005A acpidump [024h 0036 004h] Local Apic Address : FEE00000 acpidump [028h 0040 004h] Flags (decoded below) : 00000001 acpidump PC-AT Compatibility : 1 acpidump [02Ch 0044 001h] Subtable Type : 00 [Processor Local APIC] acpidump [02Dh 0045 001h] Length : 08 acpidump [02Eh 0046 001h] Processor ID : 00 acpidump [02Fh 0047 001h] Local Apic ID : 00 acpidump [030h 0048 004h] Flags (decoded below) : 00000001 acpidump Processor Enabled : 1 acpidump Runtime Online Capable : 0 acpidump [034h 0052 001h] Subtable Type : 00 [Processor Local APIC] acpidump [035h 0053 001h] Length : 08 acpidump [036h 0054 001h] Processor ID : 01 acpidump [037h 0055 001h] Local Apic ID : 01 acpidump [038h 0056 004h] Flags (decoded below) : 00000001 acpidump Processor Enabled : 1 acpidump Runtime Online Capable : 0 acpidump [03Ch 0060 001h] Subtable Type : 01 [I/O APIC] acpidump [03Dh 0061 001h] Length : 0C acpidump [03Eh 0062 001h] I/O Apic ID : 01 acpidump [03Fh 0063 001h] Reserved : 00 acpidump [040h 0064 004h] Address : FEC00000 acpidump [044h 0068 004h] Interrupt : 00000000 acpidump [048h 0072 001h] Subtable Type : 02 [Interrupt Source Override] acpidump [049h 0073 001h] Length : 0A acpidump [04Ah 0074 001h] Bus : 00 acpidump [04Bh 0075 001h] Source : 00 acpidump [04Ch 0076 004h] Interrupt : 00000002 acpidump [050h 0080 002h] Flags (decoded below) : 0000 acpidump Polarity : 0 acpidump Trigger Mode : 0 acpidump [052h 0082 001h] Subtable Type : 02 [Interrupt Source Override] acpidump [053h 0083 001h] Length : 0A acpidump [054h 0084 001h] Bus : 00 acpidump [055h 0085 001h] Source : 09 acpidump [056h 0086 004h] Interrupt : 00000009 acpidump [05Ah 0090 002h] Flags (decoded below) : 000D acpidump Polarity : 1 acpidump Trigger Mode : 3 acpidump [05Ch 0092 001h] Subtable Type : 04 [Local APIC NMI] acpidump [05Dh 0093 001h] Length : 06 acpidump [05Eh 0094 001h] Processor ID : 00 acpidump [05Fh 0095 002h] Flags (decoded below) : 0005 acpidump Polarity : 1 acpidump Trigger Mode : 1 acpidump [061h 0097 001h] Interrupt Input LINT : 01 acpidump [062h 0098 001h] Subtable Type : 04 [Local APIC NMI] acpidump [063h 0099 001h] Length : 06 acpidump [064h 0100 001h] Processor ID : 01 acpidump [065h 0101 002h] Flags (decoded below) : 0005 acpidump Polarity : 1 acpidump Trigger Mode : 1 acpidump [067h 0103 001h] Interrupt Input LINT : 01 acpidump 0000: 41 50 49 43 68 00 00 00 01 CC 49 4E 54 45 4C 20 // APICh.....INTEL acpidump 0010: 43 52 45 53 54 4C 4E 45 00 00 04 06 4C 4F 48 52 // CRESTLNE....LOHR acpidump 0020: 5A 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // Z............... acpidump 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0C 01 00 // ................ acpidump 0040: 00 00 C0 FE 00 00 00 00 02 0A 00 00 02 00 00 00 // ................ acpidump 0050: 00 00 02 0A 00 09 09 00 00 00 0D 00 04 06 00 05 // ................ acpidump 0060: 00 01 04 06 01 05 00 01 // ........ acpidump acpidump HPET @ bf6dfd2e (56 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 004h] Signature : "HPET" [High Precision Event Timer Table] acpidump [004h 0004 004h] Table Length : 00000038 acpidump [008h 0008 001h] Revision : 01 acpidump [009h 0009 001h] Checksum : 0A acpidump [00Ah 0010 006h] Oem ID : "INTEL " acpidump [010h 0016 008h] Oem Table ID : "CRESTLNE" acpidump [018h 0024 004h] Oem Revision : 06040000 acpidump [01Ch 0028 004h] Asl Compiler ID : "LOHR" acpidump [020h 0032 004h] Asl Compiler Revision : 0000005A acpidump [024h 0036 004h] Hardware Block ID : 8086A201 acpidump [028h 0040 00Ch] Timer Block Register : [Generic Address Structure] acpidump [028h 0040 001h] Space ID : 00 [SystemMemory] acpidump [029h 0041 001h] Bit Width : 00 acpidump [02Ah 0042 001h] Bit Offset : 00 acpidump [02Bh 0043 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [02Ch 0044 008h] Address : 00000000FED00000 acpidump [034h 0052 001h] Sequence Number : 00 acpidump [035h 0053 002h] Minimum Clock Ticks : 0080 acpidump [037h 0055 001h] Flags (decoded below) : 00 acpidump 4K Page Protect : 0 acpidump 64K Page Protect : 0 acpidump 0000: 48 50 45 54 38 00 00 00 01 0A 49 4E 54 45 4C 20 // HPET8.....INTEL acpidump 0010: 43 52 45 53 54 4C 4E 45 00 00 04 06 4C 4F 48 52 // CRESTLNE....LOHR acpidump 0020: 5A 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // Z............... acpidump 0030: 00 00 00 00 00 80 00 00 // ........ acpidump acpidump MCFG @ bf6dfd66 (60 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 004h] Signature : "MCFG" [Memory Mapped Configuration Table] acpidump [004h 0004 004h] Table Length : 0000003C acpidump [008h 0008 001h] Revision : 01 acpidump [009h 0009 001h] Checksum : 32 acpidump [00Ah 0010 006h] Oem ID : "INTEL " acpidump [010h 0016 008h] Oem Table ID : "CRESTLNE" acpidump [018h 0024 004h] Oem Revision : 06040000 acpidump [01Ch 0028 004h] Asl Compiler ID : "LOHR" acpidump [020h 0032 004h] Asl Compiler Revision : 0000005A acpidump [024h 0036 008h] Reserved : 0000000000000000 acpidump [02Ch 0044 008h] Base Address : 00000000E0000000 acpidump [034h 0052 002h] Segment Group Number : 0000 acpidump [036h 0054 001h] Start Bus Number : 00 acpidump [037h 0055 001h] End Bus Number : FF acpidump [038h 0056 004h] Reserved : 00000000 acpidump 0000: 4D 43 46 47 3C 00 00 00 01 32 49 4E 54 45 4C 20 // MCFG<....2INTEL acpidump 0010: 43 52 45 53 54 4C 4E 45 00 00 04 06 4C 4F 48 52 // CRESTLNE....LOHR acpidump 0020: 5A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E0 // Z............... acpidump 0030: 00 00 00 00 00 00 00 FF 00 00 00 00 // ............ acpidump acpidump BOOT @ bf6dffd8 (40 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 004h] Signature : "BOOT" [Simple Boot Flag Table] acpidump [004h 0004 004h] Table Length : 00000028 acpidump [008h 0008 001h] Revision : 01 acpidump [009h 0009 001h] Checksum : A5 acpidump [00Ah 0010 006h] Oem ID : "PTLTD " acpidump [010h 0016 008h] Oem Table ID : "$SBFTBL$" acpidump [018h 0024 004h] Oem Revision : 06040000 acpidump [01Ch 0028 004h] Asl Compiler ID : " LTP" acpidump [020h 0032 004h] Asl Compiler Revision : 00000001 acpidump [024h 0036 001h] Boot Register Index : 36 acpidump [025h 0037 003h] Reserved : 000000 acpidump 0000: 42 4F 4F 54 28 00 00 00 01 A5 50 54 4C 54 44 20 // BOOT(.....PTLTD acpidump 0010: 24 53 42 46 54 42 4C 24 00 00 04 06 20 4C 54 50 // $SBFTBL$.... LTP acpidump 0020: 01 00 00 00 36 00 00 00 // ....6... acpidump acpidump TMOR @ bf6dfdd4 (38 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 004h] Signature : "TMOR" acpidump [004h 0004 004h] Table Length : 00000026 acpidump [008h 0008 001h] Revision : 01 acpidump [009h 0009 001h] Checksum : EB acpidump [00Ah 0010 006h] Oem ID : "PTLTD " acpidump [010h 0016 008h] Oem Table ID : " " acpidump [018h 0024 004h] Oem Revision : 06040000 acpidump [01Ch 0028 004h] Asl Compiler ID : "PTL " acpidump [020h 0032 004h] Asl Compiler Revision : 00000003 acpidump acpidump 0000: 54 4D 4F 52 26 00 00 00 01 EB 50 54 4C 54 44 20 TMOR&.....PTLTD acpidump 0010: 20 20 20 20 20 20 20 20 00 00 04 06 50 54 4C 20 ....PTL acpidump 0020: 03 00 00 00 F3 F4 ...... acpidump acpidump SLIC @ bf6dfdfa (374 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 004h] Signature : "SLIC" [Software Licensing Description Table] acpidump [004h 0004 004h] Table Length : 00000176 acpidump [008h 0008 001h] Revision : 01 acpidump [009h 0009 001h] Checksum : 99 acpidump [00Ah 0010 006h] Oem ID : "LENOVO" acpidump [010h 0016 008h] Oem Table ID : "TP-68 " acpidump [018h 0024 004h] Oem Revision : 06040000 acpidump [01Ch 0028 004h] Asl Compiler ID : "TBD " acpidump [020h 0032 004h] Asl Compiler Revision : 00000001 acpidump [024h 0036 152h] Software Licensing Structure : 53 4C 49 43 76 01 00 00 01 99 4C 45 4E 4F 56 4F /* SLICv.....LENOVO */\ acpidump acpidump APIC @ bf6dff70 (104 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 004h] Signature : "APIC" [Multiple APIC Description Table (MADT)] acpidump [004h 0004 004h] Table Length : 00000068 acpidump [008h 0008 001h] Revision : 01 acpidump [009h 0009 001h] Checksum : 13 acpidump [00Ah 0010 006h] Oem ID : "PTLTD " acpidump [010h 0016 008h] Oem Table ID : " APIC " acpidump [018h 0024 004h] Oem Revision : 06040000 acpidump [01Ch 0028 004h] Asl Compiler ID : " LTP" acpidump [020h 0032 004h] Asl Compiler Revision : 00000000 acpidump [024h 0036 004h] Local Apic Address : FEE00000 acpidump [028h 0040 004h] Flags (decoded below) : 00000001 acpidump PC-AT Compatibility : 1 acpidump [02Ch 0044 001h] Subtable Type : 00 [Processor Local APIC] acpidump [02Dh 0045 001h] Length : 08 acpidump [02Eh 0046 001h] Processor ID : 00 acpidump [02Fh 0047 001h] Local Apic ID : 00 acpidump [030h 0048 004h] Flags (decoded below) : 00000001 acpidump Processor Enabled : 1 acpidump Runtime Online Capable : 0 acpidump [034h 0052 001h] Subtable Type : 00 [Processor Local APIC] acpidump [035h 0053 001h] Length : 08 acpidump [036h 0054 001h] Processor ID : 01 acpidump [037h 0055 001h] Local Apic ID : 01 acpidump [038h 0056 004h] Flags (decoded below) : 00000001 acpidump Processor Enabled : 1 acpidump Runtime Online Capable : 0 acpidump [03Ch 0060 001h] Subtable Type : 01 [I/O APIC] acpidump [03Dh 0061 001h] Length : 0C acpidump [03Eh 0062 001h] I/O Apic ID : 02 acpidump [03Fh 0063 001h] Reserved : 00 acpidump [040h 0064 004h] Address : FEC00000 acpidump [044h 0068 004h] Interrupt : 00000000 acpidump [048h 0072 001h] Subtable Type : 04 [Local APIC NMI] acpidump [049h 0073 001h] Length : 06 acpidump [04Ah 0074 001h] Processor ID : 00 acpidump [04Bh 0075 002h] Flags (decoded below) : 0005 acpidump Polarity : 1 acpidump Trigger Mode : 1 acpidump [04Dh 0077 001h] Interrupt Input LINT : 01 acpidump [04Eh 0078 001h] Subtable Type : 04 [Local APIC NMI] acpidump [04Fh 0079 001h] Length : 06 acpidump [050h 0080 001h] Processor ID : 01 acpidump [051h 0081 002h] Flags (decoded below) : 0005 acpidump Polarity : 1 acpidump Trigger Mode : 1 acpidump [053h 0083 001h] Interrupt Input LINT : 01 acpidump [054h 0084 001h] Subtable Type : 02 [Interrupt Source Override] acpidump [055h 0085 001h] Length : 0A acpidump [056h 0086 001h] Bus : 00 acpidump [057h 0087 001h] Source : 00 acpidump [058h 0088 004h] Interrupt : 00000002 acpidump [05Ch 0092 002h] Flags (decoded below) : 0005 acpidump Polarity : 1 acpidump Trigger Mode : 1 acpidump [05Eh 0094 001h] Subtable Type : 02 [Interrupt Source Override] acpidump [05Fh 0095 001h] Length : 0A acpidump [060h 0096 001h] Bus : 00 acpidump [061h 0097 001h] Source : 09 acpidump [062h 0098 004h] Interrupt : 00000009 acpidump [066h 0102 002h] Flags (decoded below) : 000D acpidump Polarity : 1 acpidump Trigger Mode : 3 acpidump 0000: 41 50 49 43 68 00 00 00 01 13 50 54 4C 54 44 20 // APICh.....PTLTD acpidump 0010: 09 20 41 50 49 43 20 20 00 00 04 06 20 4C 54 50 // . APIC .... LTP acpidump 0020: 00 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ acpidump 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0C 02 00 // ................ acpidump 0040: 00 00 C0 FE 00 00 00 00 04 06 00 05 00 01 04 06 // ................ acpidump 0050: 01 05 00 01 02 0A 00 00 02 00 00 00 05 00 02 0A // ................ acpidump 0060: 00 09 09 00 00 00 0D 00 // ........ acpidump acpidump SSDT @ bf6d98bd (685 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 4] Signature : "SSDT" acpidump [004h 0004 4] Table Length : 000002ad acpidump [008h 0008 1] Revision : 01 acpidump [009h 0009 1] Checksum : 59 acpidump [00Ah 0010 6] Oem ID : "SataRe" acpidump [010h 0016 8] Oem Table ID : "SataAhci" acpidump [018h 0024 4] Oem Revision : 00001000 acpidump [01Ch 0028 4] Asl Compiler ID : "INTL" acpidump [020h 0032 4] Asl Compiler Revision : 20050624 acpidump Contains AML Object Code. acpidump acpidump SSDT @ bf6d981a (163 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 4] Signature : "SSDT" acpidump [004h 0004 4] Table Length : 000000a3 acpidump [008h 0008 1] Revision : 01 acpidump [009h 0009 1] Checksum : ed acpidump [00Ah 0010 6] Oem ID : "BrtRef" acpidump [010h 0016 8] Oem Table ID : " DD01BRT" acpidump [018h 0024 4] Oem Revision : 00001000 acpidump [01Ch 0028 4] Asl Compiler ID : "INTL" acpidump [020h 0032 4] Asl Compiler Revision : 20050624 acpidump Contains AML Object Code. acpidump acpidump SSDT @ bf6d8e10 (607 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 4] Signature : "SSDT" acpidump [004h 0004 4] Table Length : 0000025f acpidump [008h 0008 1] Revision : 01 acpidump [009h 0009 1] Checksum : c8 acpidump [00Ah 0010 6] Oem ID : " PmRef" acpidump [010h 0016 8] Oem Table ID : " Cpu0Tst" acpidump [018h 0024 4] Oem Revision : 00003000 acpidump [01Ch 0028 4] Asl Compiler ID : "INTL" acpidump [020h 0032 4] Asl Compiler Revision : 20050624 acpidump Contains AML Object Code. acpidump acpidump SSDT @ bf6d8d6a (166 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 4] Signature : "SSDT" acpidump [004h 0004 4] Table Length : 000000a6 acpidump [008h 0008 1] Revision : 01 acpidump [009h 0009 1] Checksum : 6d acpidump [00Ah 0010 6] Oem ID : " PmRef" acpidump [010h 0016 8] Oem Table ID : " Cpu1Tst" acpidump [018h 0024 4] Oem Revision : 00003000 acpidump [01Ch 0028 4] Asl Compiler ID : "INTL" acpidump [020h 0032 4] Asl Compiler Revision : 20050624 acpidump Contains AML Object Code. acpidump acpidump SSDT @ bf6d8884 (1254 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 4] Signature : "SSDT" acpidump [004h 0004 4] Table Length : 000004e6 acpidump [008h 0008 1] Revision : 01 acpidump [009h 0009 1] Checksum : df acpidump [00Ah 0010 6] Oem ID : " PmRef" acpidump [010h 0016 8] Oem Table ID : " CpuPm" acpidump [018h 0024 4] Oem Revision : 00003000 acpidump [01Ch 0028 4] Asl Compiler ID : "INTL" acpidump [020h 0032 4] Asl Compiler Revision : 20050624 acpidump Contains AML Object Code. acpidump acpidump XSDT @ bf6d87f0 (148 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 004h] Signature : "XSDT" [Extended System Description Table] acpidump [004h 0004 004h] Table Length : 00000094 acpidump [008h 0008 001h] Revision : 01 acpidump [009h 0009 001h] Checksum : C2 acpidump [00Ah 0010 006h] Oem ID : "LENOVO" acpidump [010h 0016 008h] Oem Table ID : "TP-68 " acpidump [018h 0024 004h] Oem Revision : 06040000 acpidump [01Ch 0028 004h] Asl Compiler ID : " LTP" acpidump [020h 0032 004h] Asl Compiler Revision : 00000000 acpidump [024h 0036 008h] ACPI Table Address 0 : 00000000BF6DFBD2 acpidump [02Ch 0044 008h] ACPI Table Address 1 : 00000000BF6DFCC6 acpidump [034h 0052 008h] ACPI Table Address 2 : 00000000BF6DFD2E acpidump [03Ch 0060 008h] ACPI Table Address 3 : 00000000BF6DFD66 acpidump [044h 0068 008h] ACPI Table Address 4 : 00000000BF6DFDA2 acpidump [04Ch 0076 008h] ACPI Table Address 5 : 00000000BF6DFDD4 acpidump [054h 0084 008h] ACPI Table Address 6 : 00000000BF6DFDFA acpidump [05Ch 0092 008h] ACPI Table Address 7 : 00000000BF6DFF70 acpidump [064h 0100 008h] ACPI Table Address 8 : 00000000BF6DFFD8 acpidump [06Ch 0108 008h] ACPI Table Address 9 : 00000000BF6D98BD acpidump [074h 0116 008h] ACPI Table Address 10 : 00000000BF6D981A acpidump [07Ch 0124 008h] ACPI Table Address 11 : 00000000BF6D8E10 acpidump [084h 0132 008h] ACPI Table Address 12 : 00000000BF6D8D6A acpidump [08Ch 0140 008h] ACPI Table Address 13 : 00000000BF6D8884 acpidump 0000: 58 53 44 54 94 00 00 00 01 C2 4C 45 4E 4F 56 4F // XSDT......LENOVO acpidump 0010: 54 50 2D 36 38 20 20 20 00 00 04 06 20 4C 54 50 // TP-68 .... LTP acpidump 0020: 00 00 00 00 D2 FB 6D BF 00 00 00 00 C6 FC 6D BF // ......m.......m. acpidump 0030: 00 00 00 00 2E FD 6D BF 00 00 00 00 66 FD 6D BF // ......m.....f.m. acpidump 0040: 00 00 00 00 A2 FD 6D BF 00 00 00 00 D4 FD 6D BF // ......m.......m. acpidump 0050: 00 00 00 00 FA FD 6D BF 00 00 00 00 70 FF 6D BF // ......m.....p.m. acpidump 0060: 00 00 00 00 D8 FF 6D BF 00 00 00 00 BD 98 6D BF // ......m.......m. acpidump 0070: 00 00 00 00 1A 98 6D BF 00 00 00 00 10 8E 6D BF // ......m.......m. acpidump 0080: 00 00 00 00 6A 8D 6D BF 00 00 00 00 84 88 6D BF // ....j.m.......m. acpidump 0090: 00 00 00 00 // .... acpidump acpidump FACP @ bf6dfbd2 (244 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 004h] Signature : "FACP" [Fixed ACPI Description Table (FADT)] acpidump [004h 0004 004h] Table Length : 000000F4 acpidump [008h 0008 001h] Revision : 03 acpidump [009h 0009 001h] Checksum : 52 acpidump [00Ah 0010 006h] Oem ID : "TOSCPL" acpidump [010h 0016 008h] Oem Table ID : "CRESTLNE" acpidump [018h 0024 004h] Oem Revision : 06040000 acpidump [01Ch 0028 004h] Asl Compiler ID : "ALAN" acpidump [020h 0032 004h] Asl Compiler Revision : 00000001 acpidump [024h 0036 004h] FACS Address : BF6E2FC0 acpidump [028h 0040 004h] DSDT Address : BF6D9B6A acpidump [02Ch 0044 001h] Model : 00 acpidump [02Dh 0045 001h] PM Profile : 02 [Mobile] acpidump [02Eh 0046 002h] SCI Interrupt : 0009 acpidump [030h 0048 004h] SMI Command Port : 000000B2 acpidump [034h 0052 001h] ACPI Enable Value : F0 acpidump [035h 0053 001h] ACPI Disable Value : F1 acpidump [036h 0054 001h] S4BIOS Command : 00 acpidump [037h 0055 001h] P-State Control : 80 acpidump [038h 0056 004h] PM1A Event Block Address : 00001000 acpidump [03Ch 0060 004h] PM1B Event Block Address : 00000000 acpidump [040h 0064 004h] PM1A Control Block Address : 00001004 acpidump [044h 0068 004h] PM1B Control Block Address : 00000000 acpidump [048h 0072 004h] PM2 Control Block Address : 00001020 acpidump [04Ch 0076 004h] PM Timer Block Address : 00001008 acpidump [050h 0080 004h] GPE0 Block Address : 00001028 acpidump [054h 0084 004h] GPE1 Block Address : 00000000 acpidump [058h 0088 001h] PM1 Event Block Length : 04 acpidump [059h 0089 001h] PM1 Control Block Length : 02 acpidump [05Ah 0090 001h] PM2 Control Block Length : 01 acpidump [05Bh 0091 001h] PM Timer Block Length : 04 acpidump [05Ch 0092 001h] GPE0 Block Length : 08 acpidump [05Dh 0093 001h] GPE1 Block Length : 00 acpidump [05Eh 0094 001h] GPE1 Base Offset : 00 acpidump [05Fh 0095 001h] _CST Support : 85 acpidump [060h 0096 002h] C2 Latency : 0001 acpidump [062h 0098 002h] C3 Latency : 0023 acpidump [064h 0100 002h] CPU Cache Size : 0000 acpidump [066h 0102 002h] Cache Flush Stride : 0000 acpidump [068h 0104 001h] Duty Cycle Offset : 01 acpidump [069h 0105 001h] Duty Cycle Width : 03 acpidump [06Ah 0106 001h] RTC Day Alarm Index : 0D acpidump [06Bh 0107 001h] RTC Month Alarm Index : 00 acpidump [06Ch 0108 001h] RTC Century Index : 32 acpidump [06Dh 0109 002h] Boot Flags (decoded below) : 0000 acpidump Legacy Devices Supported (V2) : 0 acpidump 8042 Present on ports 60/64 (V2) : 0 acpidump VGA Not Present (V4) : 0 acpidump MSI Not Supported (V4) : 0 acpidump PCIe ASPM Not Supported (V4) : 0 acpidump CMOS RTC Not Present (V5) : 0 acpidump [06Fh 0111 001h] Reserved : 00 acpidump [070h 0112 004h] Flags (decoded below) : 000000A5 acpidump WBINVD instruction is operational (V1) : 1 acpidump WBINVD flushes all caches (V1) : 0 acpidump All CPUs support C1 (V1) : 1 acpidump C2 works on MP system (V1) : 0 acpidump Control Method Power Button (V1) : 0 acpidump Control Method Sleep Button (V1) : 1 acpidump RTC wake not in fixed reg space (V1) : 0 acpidump RTC can wake system from S4 (V1) : 1 acpidump 32-bit PM Timer (V1) : 0 acpidump Docking Supported (V1) : 0 acpidump Reset Register Supported (V2) : 0 acpidump Sealed Case (V3) : 0 acpidump Headless - No Video (V3) : 0 acpidump Use native instr after SLP_TYPx (V3) : 0 acpidump PCIEXP_WAK Bits Supported (V4) : 0 acpidump Use Platform Timer (V4) : 0 acpidump RTC_STS valid on S4 wake (V4) : 0 acpidump Remote Power-on capable (V4) : 0 acpidump Use APIC Cluster Model (V4) : 0 acpidump Use APIC Physical Destination Mode (V4) : 0 acpidump Hardware Reduced (V5) : 0 acpidump Low Power S0 Idle (V5) : 0 acpidump [074h 0116 00Ch] Reset Register : [Generic Address Structure] acpidump [074h 0116 001h] Space ID : 00 [SystemMemory] acpidump [075h 0117 001h] Bit Width : 00 acpidump [076h 0118 001h] Bit Offset : 00 acpidump [077h 0119 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [078h 0120 008h] Address : 0000000000000000 acpidump [080h 0128 001h] Value to cause reset : 00 acpidump [081h 0129 002h] ARM Flags (decoded below) : 0000 acpidump PSCI Compliant : 0 acpidump Must use HVC for PSCI : 0 acpidump [083h 0131 001h] FADT Minor Revision : 00 acpidump [084h 0132 008h] FACS Address : 00000000BF6E2FC0 acpidump [08Ch 0140 008h] DSDT Address : 00000000BF6D9B6A acpidump [094h 0148 00Ch] PM1A Event Block : [Generic Address Structure] acpidump [094h 0148 001h] Space ID : 01 [SystemIO] acpidump [095h 0149 001h] Bit Width : 20 acpidump [096h 0150 001h] Bit Offset : 00 acpidump [097h 0151 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [098h 0152 008h] Address : 0000000000001000 acpidump [0A0h 0160 00Ch] PM1B Event Block : [Generic Address Structure] acpidump [0A0h 0160 001h] Space ID : 00 [SystemMemory] acpidump [0A1h 0161 001h] Bit Width : 00 acpidump [0A2h 0162 001h] Bit Offset : 00 acpidump [0A3h 0163 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0A4h 0164 008h] Address : 0000000000000000 acpidump [0ACh 0172 00Ch] PM1A Control Block : [Generic Address Structure] acpidump [0ACh 0172 001h] Space ID : 01 [SystemIO] acpidump [0ADh 0173 001h] Bit Width : 10 acpidump [0AEh 0174 001h] Bit Offset : 00 acpidump [0AFh 0175 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0B0h 0176 008h] Address : 0000000000001004 acpidump [0B8h 0184 00Ch] PM1B Control Block : [Generic Address Structure] acpidump [0B8h 0184 001h] Space ID : 00 [SystemMemory] acpidump [0B9h 0185 001h] Bit Width : 00 acpidump [0BAh 0186 001h] Bit Offset : 00 acpidump [0BBh 0187 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0BCh 0188 008h] Address : 0000000000000000 acpidump [0C4h 0196 00Ch] PM2 Control Block : [Generic Address Structure] acpidump [0C4h 0196 001h] Space ID : 01 [SystemIO] acpidump [0C5h 0197 001h] Bit Width : 08 acpidump [0C6h 0198 001h] Bit Offset : 00 acpidump [0C7h 0199 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0C8h 0200 008h] Address : 0000000000001020 acpidump [0D0h 0208 00Ch] PM Timer Block : [Generic Address Structure] acpidump [0D0h 0208 001h] Space ID : 01 [SystemIO] acpidump [0D1h 0209 001h] Bit Width : 20 acpidump [0D2h 0210 001h] Bit Offset : 00 acpidump [0D3h 0211 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0D4h 0212 008h] Address : 0000000000001008 acpidump [0DCh 0220 00Ch] GPE0 Block : [Generic Address Structure] acpidump [0DCh 0220 001h] Space ID : 01 [SystemIO] acpidump [0DDh 0221 001h] Bit Width : 40 acpidump [0DEh 0222 001h] Bit Offset : 00 acpidump [0DFh 0223 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0E0h 0224 008h] Address : 0000000000001028 acpidump [0E8h 0232 00Ch] GPE1 Block : [Generic Address Structure] acpidump [0E8h 0232 001h] Space ID : 00 [SystemMemory] acpidump [0E9h 0233 001h] Bit Width : 00 acpidump [0EAh 0234 001h] Bit Offset : 00 acpidump [0EBh 0235 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0ECh 0236 008h] Address : 0000000000000000 acpidump 0000: 46 41 43 50 F4 00 00 00 03 52 54 4F 53 43 50 4C // FACP.....RTOSCPL acpidump 0010: 43 52 45 53 54 4C 4E 45 00 00 04 06 41 4C 41 4E // CRESTLNE....ALAN acpidump 0020: 01 00 00 00 C0 2F 6E BF 6A 9B 6D BF 00 02 09 00 // ...../n.j.m..... acpidump 0030: B2 00 00 00 F0 F1 00 80 00 10 00 00 00 00 00 00 // ................ acpidump 0040: 04 10 00 00 00 00 00 00 20 10 00 00 08 10 00 00 // ........ ....... acpidump 0050: 28 10 00 00 00 00 00 00 04 02 01 04 08 00 00 85 // (............... acpidump 0060: 01 00 23 00 00 00 00 00 01 03 0D 00 32 00 00 00 // ..#.........2... acpidump 0070: A5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump 0080: 00 00 00 00 C0 2F 6E BF 00 00 00 00 6A 9B 6D BF // ...../n.....j.m. acpidump 0090: 00 00 00 00 01 20 00 00 00 10 00 00 00 00 00 00 // ..... .......... acpidump 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 // ................ acpidump 00B0: 04 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump 00C0: 00 00 00 00 01 08 00 00 20 10 00 00 00 00 00 00 // ........ ....... acpidump 00D0: 01 20 00 00 08 10 00 00 00 00 00 00 01 40 00 00 // . ...........@.. acpidump 00E0: 28 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // (............... acpidump 00F0: 00 00 00 00 // .... acpidump acpidump TCPA @ bf6dfda2 (50 bytes) (loaded from file) acpidump ---- acpidump [000h 0000 004h] Signature : "TCPA" [Trusted Computing Platform Alliance Table] acpidump [004h 0004 004h] Table Length : 00000032 acpidump [008h 0008 001h] Revision : 01 acpidump [009h 0009 001h] Checksum : 8F acpidump [00Ah 0010 006h] Oem ID : "Intel " acpidump [010h 0016 008h] Oem Table ID : "CRESTLNE" acpidump [018h 0024 004h] Oem Revision : 06040000 acpidump [01Ch 0028 004h] Asl Compiler ID : "LOHR" acpidump [020h 0032 004h] Asl Compiler Revision : 0000005A acpidump [024h 0036 002h] Platform Class : 0000 acpidump [026h 0038 004h] Min Event Log Length : 00010000 acpidump [02Ah 0042 008h] Event Log Address : 0000000000000000 acpidump 0000: 54 43 50 41 32 00 00 00 01 8F 49 6E 74 65 6C 20 // TCPA2.....Intel acpidump 0010: 43 52 45 53 54 4C 4E 45 00 00 04 06 4C 4F 48 52 // CRESTLNE....LOHR acpidump 0020: 5A 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 // Z............... acpidump 0030: 00 00 // .. acpidump acpidump fwts-test/acpidump-0001/acpidump.log000066400000000000000000004074541465205512700175300ustar00rootroot00000000000000RSDP @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... RSDT @ 0xbf6d8794 0000: 52 53 44 54 58 00 00 00 01 43 4c 45 4e 4f 56 4f RSDTX....CLENOVO 0010: 54 50 2d 36 38 20 20 20 00 00 04 06 20 4c 54 50 TP-68 .... LTP 0020: 00 00 00 00 5e fb 6d bf c6 fc 6d bf 2e fd 6d bf ....^.m...m...m. 0030: 66 fd 6d bf d8 ff 6d bf d4 fd 6d bf fa fd 6d bf f.m...m...m...m. 0040: 70 ff 6d bf bd 98 6d bf 1a 98 6d bf 10 8e 6d bf p.m...m...m...m. 0050: 6a 8d 6d bf 84 88 6d bf j.m...m. DSDT @ 0xbf6d9b6a 0000: 44 53 44 54 f4 5f 00 00 02 11 54 4f 53 43 50 4c DSDT._....TOSCPL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 49 4e 54 4c CRESTLNE....INTL 0020: 08 06 06 20 08 5a 30 30 30 01 08 5a 30 30 31 0a ... .Z000..Z001. 0030: 02 08 5a 30 30 32 0a 04 08 5a 30 30 33 0a 08 08 ..Z002...Z003... 0040: 5a 30 30 34 00 08 5a 30 30 35 0a 0f 08 5a 30 30 Z004..Z005...Z00 0050: 36 0a 0d 08 5a 30 30 37 0a 0b 08 5a 30 30 38 0a 6...Z007...Z008. 0060: 09 08 45 43 44 59 0a 07 5b 01 4d 55 54 58 00 5b ..ECDY..[.MUTX.[ 0070: 80 50 52 54 30 01 0a 80 0a 04 5b 81 0b 50 52 54 .PRT0.....[..PRT 0080: 30 13 50 38 30 48 20 14 4e 07 50 38 58 48 0a a0 0.P80H .N.P8XH.. 0090: 17 93 68 00 70 7d 7b 50 38 30 44 0c 00 ff ff ff ..h.p}{P80D..... 00a0: 00 69 00 50 38 30 44 a0 1b 93 68 01 70 7d 7b 50 .i.P80D...h.p}{P 00b0: 38 30 44 0c ff 00 ff ff 00 79 69 0a 08 00 00 50 80D......yi....P 00c0: 38 30 44 a0 1c 93 68 0a 02 70 7d 7b 50 38 30 44 80D...h..p}{P80D 00d0: 0c ff ff 00 ff 00 79 69 0a 10 00 00 50 38 30 44 ......yi....P80D 00e0: a0 1c 93 68 0a 03 70 7d 7b 50 38 30 44 0c ff ff ...h..p}{P80D... 00f0: ff 00 00 79 69 0a 18 00 00 50 38 30 44 70 50 38 ...yi....P80DpP8 0100: 30 44 50 38 30 48 14 0c 5f 50 49 43 01 70 68 47 0DP80H.._PIC.phG 0110: 50 49 43 14 46 06 5f 50 54 53 01 70 00 50 38 30 PIC.F._PTS.p.P80 0120: 44 50 38 58 48 00 68 a0 1e 93 68 0a 03 70 01 5c DP8XH.h...h..p.\ 0130: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0140: 30 5f 53 33 4c 44 a0 33 93 68 0a 04 70 01 5c 2f 0_S3LD.3.h..p.\/ 0150: 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 ._SB_PCI0LPCBEC0 0160: 5f 53 33 4c 44 5c 2f 04 5f 53 42 5f 50 43 49 30 _S3LD\/._SB_PCI0 0170: 4c 50 43 42 50 48 53 53 0a 0e 14 4c 1c 5f 57 41 LPCBPHSS...L._WA 0180: 4b 01 50 38 58 48 01 0a ab a0 30 91 93 68 0a 03 K.P8XH....0..h.. 0190: 93 68 0a 04 a0 25 7b 43 46 47 44 0c 00 00 00 01 .h...%{CFGD..... 01a0: 00 a0 18 90 7b 43 46 47 44 0a f0 00 93 4f 53 59 ....{CFGD....OSY 01b0: 53 0b d1 07 54 52 41 50 0a 3d a0 18 93 52 50 31 S...TRAP.=...RP1 01c0: 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 D..\/._SB_PCI0RP 01d0: 30 31 00 a0 18 93 52 50 32 44 00 86 5c 2f 03 5f 01....RP2D..\/._ 01e0: 53 42 5f 50 43 49 30 52 50 30 32 00 a0 18 93 52 SB_PCI0RP02....R 01f0: 50 33 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 P3D..\/._SB_PCI0 0200: 52 50 30 33 00 a0 18 93 52 50 34 44 00 86 5c 2f RP03....RP4D..\/ 0210: 03 5f 53 42 5f 50 43 49 30 52 50 30 34 00 a0 18 ._SB_PCI0RP04... 0220: 93 52 50 35 44 00 86 5c 2f 03 5f 53 42 5f 50 43 .RP5D..\/._SB_PC 0230: 49 30 52 50 30 35 00 a0 18 93 52 50 36 44 00 86 I0RP05....RP6D.. 0240: 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 36 00 \/._SB_PCI0RP06. 0250: a0 12 93 68 0a 03 50 38 58 48 00 0a 30 54 52 41 ...h..P8XH..0TRA 0260: 50 0a 46 a0 43 0d 93 68 0a 04 50 38 58 48 00 0a P.F.C..h..P8XH.. 0270: 40 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 @\/._SB_PCI0LPCB 0280: 50 48 53 53 0a 0f 70 57 41 4b 46 60 70 00 57 41 PHSS..pWAKF`p.WA 0290: 4b 46 7b 60 0a 05 60 a0 18 93 60 01 50 38 58 48 KF{`..`...`.P8XH 02a0: 00 0a 41 86 5c 2e 5f 53 42 5f 50 57 52 42 0a 02 ..A.\._SB_PWRB.. 02b0: a0 46 08 44 54 53 45 54 52 41 50 0a 47 a0 42 06 .F.DTSETRAP.G.B. 02c0: 90 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 .\/._SB_PCI0LPCB 02d0: 45 43 4f 4b 93 45 43 44 59 00 a0 27 92 95 44 54 ECOK.ECDY..'..DT 02e0: 53 31 44 54 53 32 70 44 54 53 31 5c 2f 05 5f 53 S1DTS2pDTS1\/._S 02f0: 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b B_PCI0LPCBEC0_SK 0300: 54 41 a1 1d 70 44 54 53 32 5c 2f 05 5f 53 42 5f TA..pDTS2\/._SB_ 0310: 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 PCI0LPCBEC0_SKTA 0320: a1 16 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 0330: 42 50 48 53 53 0a 10 5c 2e 5f 50 52 5f 52 50 50 BPHSS..\._PR_RPP 0340: 43 a4 12 04 02 00 00 14 1e 47 45 54 42 0b 77 68 C........GETB.wh 0350: 0a 08 60 77 69 0a 08 61 5b 13 6a 60 61 54 42 46 ..`wi..a[.j`aTBF 0360: 33 a4 54 42 46 33 14 42 09 50 4e 4f 54 08 a0 4a 3.TBF3.B.PNOT..J 0370: 06 4d 50 45 4e a0 31 7b 50 44 43 30 0a 08 00 86 .MPEN.1{PDC0.... 0380: 5c 2e 5f 50 52 5f 43 50 55 30 0a 80 a0 1a 7b 50 \._PR_CPU0....{P 0390: 44 43 30 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC0...[".d.\._PR 03a0: 5f 43 50 55 30 0a 81 a0 31 7b 50 44 43 31 0a 08 _CPU0...1{PDC1.. 03b0: 00 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 a0 1a ..\._PR_CPU1.... 03c0: 7b 50 44 43 31 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC1...[".d.\._ 03d0: 50 52 5f 43 50 55 31 0a 81 a1 1f 86 5c 2e 5f 50 PR_CPU1.....\._P 03e0: 52 5f 43 50 55 30 0a 80 5b 22 0a 64 86 5c 2e 5f R_CPU0..[".d.\._ 03f0: 50 52 5f 43 50 55 30 0a 81 14 17 54 52 41 50 09 PR_CPU0....TRAP. 0400: 70 68 53 4d 49 46 70 00 54 52 50 30 a4 53 4d 49 phSMIFp.TRP0.SMI 0410: 46 10 41 0f 5f 53 42 5f 14 4a 0e 5f 49 4e 49 00 F.A._SB_.J._INI. 0420: 70 0b 99 99 4d 41 52 4b a0 1c 44 54 53 45 54 52 p...MARK..DTSETR 0430: 41 50 0a 47 5e 2f 03 50 43 49 30 4c 50 43 42 50 AP.G^/.PCI0LPCBP 0440: 48 53 53 0a 10 70 0b d0 07 4f 53 59 53 a0 4a 09 HSS..p...OSYS.J. 0450: 5b 12 5f 4f 53 49 60 a0 18 5f 4f 53 49 0d 4c 69 [._OSI`.._OSI.Li 0460: 6e 75 78 00 70 01 4c 49 4e 58 70 00 45 43 44 59 nux.p.LINXp.ECDY 0470: a0 1b 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 .._OSI.Windows 2 0480: 30 30 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 001.p...OSYS.._O 0490: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04a0: 53 50 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f SP1.p...OSYS.._O 04b0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04c0: 53 50 32 00 70 0b d2 07 4f 53 59 53 a0 1b 5f 4f SP2.p...OSYS.._O 04d0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 00 SI.Windows 2006. 04e0: 70 0b d6 07 4f 53 59 53 a0 14 90 4d 50 45 4e 93 p...OSYS...MPEN. 04f0: 4f 53 59 53 0b d1 07 54 52 41 50 0a 3d 54 52 41 OSYS...TRAP.=TRA 0500: 50 0a 2b 5b 80 47 4e 56 53 00 0c bc 2d 6e bf 0b P.+[.GNVS...-n.. 0510: 00 01 5b 81 45 24 47 4e 56 53 10 4f 53 59 53 10 ..[.E$GNVS.OSYS. 0520: 53 4d 49 46 08 50 52 4d 30 08 50 52 4d 31 08 53 SMIF.PRM0.PRM1.S 0530: 43 49 46 08 50 52 4d 32 08 50 52 4d 33 08 4c 43 CIF.PRM2.PRM3.LC 0540: 4b 46 08 50 52 4d 34 08 50 52 4d 35 08 50 38 30 KF.PRM4.PRM5.P80 0550: 44 20 4c 49 44 53 08 50 57 52 53 08 44 42 47 53 D LIDS.PWRS.DBGS 0560: 08 4c 49 4e 58 08 00 08 41 43 54 31 08 41 43 54 .LINX...ACT1.ACT 0570: 54 08 50 53 56 54 08 54 43 31 56 08 54 43 32 56 T.PSVT.TC1V.TC2V 0580: 08 54 53 50 56 08 43 52 54 54 08 44 54 53 45 08 .TSPV.CRTT.DTSE. 0590: 44 54 53 31 08 44 54 53 32 08 00 40 05 41 50 49 DTS1.DTS2..@.API 05a0: 43 08 4d 50 45 4e 08 50 43 50 30 08 50 43 50 31 C.MPEN.PCP0.PCP1 05b0: 08 50 50 43 4d 08 00 28 43 4d 41 50 08 43 4d 42 .PPCM..(CMAP.CMB 05c0: 50 08 4c 50 54 50 08 46 44 43 50 08 00 30 49 47 P.LPTP.FDCP..0IG 05d0: 44 53 08 54 4c 53 54 08 43 41 44 4c 08 50 41 44 DS.TLST.CADL.PAD 05e0: 4c 08 43 53 54 45 10 4e 53 54 45 10 53 53 54 45 L.CSTE.NSTE.SSTE 05f0: 10 4e 44 49 44 08 44 49 44 31 20 44 49 44 32 20 .NDID.DID1 DID2 0600: 44 49 44 33 20 44 49 44 34 20 44 49 44 35 20 00 DID3 DID4 DID5 . 0610: 40 06 42 4c 43 53 08 42 52 54 4c 08 41 4c 53 45 @.BLCS.BRTL.ALSE 0620: 08 41 4c 41 46 08 4c 4c 4f 57 08 4c 48 49 48 08 .ALAF.LLOW.LHIH. 0630: 00 08 45 4d 41 45 08 45 4d 41 50 10 45 4d 41 4c ..EMAE.EMAP.EMAL 0640: 10 00 08 4d 45 46 45 08 00 18 54 50 4d 50 08 54 ...MEFE...TPMP.T 0650: 50 4d 45 08 00 40 04 47 54 46 30 38 47 54 46 32 PME..@.GTF08GTF2 0660: 38 49 44 45 4d 08 47 54 46 31 38 00 40 09 41 53 8IDEM.GTF18.@.AS 0670: 4c 42 20 49 42 54 54 08 49 50 41 54 08 49 54 56 LB IBTT.IPAT.ITV 0680: 46 08 49 54 56 4d 08 49 50 53 43 08 49 42 4c 43 F.ITVM.IPSC.IBLC 0690: 08 49 42 49 41 08 49 53 53 43 08 49 34 30 39 08 .IBIA.ISSC.I409. 06a0: 49 35 30 39 08 49 36 30 39 08 49 37 30 39 08 49 I509.I609.I709.I 06b0: 44 4d 4d 08 49 44 4d 53 08 49 46 31 45 08 48 56 DMM.IDMS.IF1E.HV 06c0: 43 4f 08 4e 58 44 31 20 4e 58 44 32 20 4d 41 52 CO.NXD1 NXD2 MAR 06d0: 4b 10 42 52 41 44 08 42 54 45 4e 08 56 56 45 4e K.BRAD.BTEN.VVEN 06e0: 08 42 47 54 4c 08 54 4d 45 45 01 00 07 53 43 55 .BGTL.TMEE...SCU 06f0: 30 01 53 43 55 31 01 53 43 55 32 01 53 43 55 33 0.SCU1.SCU2.SCU3 0700: 01 00 04 58 4b 53 50 01 58 4b 49 4e 01 58 4b 49 ...XKSP.XKIN.XKI 0710: 44 01 58 4b 4f 4b 01 00 04 42 47 55 31 08 42 53 D.XKOK...BGU1.BS 0720: 54 31 08 42 46 43 31 10 57 4b 4c 4e 08 57 41 4b T1.BFC1.WKLN.WAK 0730: 46 08 44 53 4d 44 08 42 41 59 53 08 48 41 50 45 F.DSMD.BAYS.HAPE 0740: 01 00 07 44 54 53 4d 01 00 07 4f 44 54 31 08 4f ...DTSM...ODT1.O 0750: 44 54 32 08 44 54 53 57 08 08 44 53 45 4e 01 08 DT2.DTSW..DSEN.. 0760: 45 43 4f 4e 00 08 47 50 49 43 00 08 43 54 59 50 ECON..GPIC..CTYP 0770: 00 08 4c 30 31 43 00 08 56 46 4e 30 00 08 56 46 ..L01C..VFN0..VF 0780: 4e 31 00 10 4a 7c 5f 47 50 45 14 46 35 5f 4c 30 N1..J|_GPE.F5_L0 0790: 31 00 72 4c 30 31 43 01 4c 30 31 43 50 38 58 48 1.rL01C.L01CP8XH 07a0: 00 01 50 38 58 48 01 4c 30 31 43 a0 48 08 90 93 ..P8XH.L01C.H... 07b0: 52 50 31 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 RP1D.\/._SB_PCI0 07c0: 52 50 30 31 48 50 53 58 5b 22 0a 64 a0 40 05 5c RP01HPSX[".d.@.\ 07d0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 /._SB_PCI0RP01PD 07e0: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 07f0: 50 30 31 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f P01PDCXp.\/._SB_ 0800: 50 43 49 30 52 50 30 31 48 50 53 58 86 5c 2f 03 PCI0RP01HPSX.\/. 0810: 5f 53 42 5f 50 43 49 30 52 50 30 31 00 a1 16 70 _SB_PCI0RP01...p 0820: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0830: 48 50 53 58 a0 48 08 90 93 52 50 32 44 00 5c 2f HPSX.H...RP2D.\/ 0840: 04 5f 53 42 5f 50 43 49 30 52 50 30 32 48 50 53 ._SB_PCI0RP02HPS 0850: 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 5f 50 X[".d.@.\/._SB_P 0860: 43 49 30 52 50 30 32 50 44 43 58 70 01 5c 2f 04 CI0RP02PDCXp.\/. 0870: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 44 43 58 _SB_PCI0RP02PDCX 0880: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 0890: 32 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 2HPSX.\/._SB_PCI 08a0: 30 52 50 30 32 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP02...p.\/._SB 08b0: 5f 50 43 49 30 52 50 30 32 48 50 53 58 a0 48 08 _PCI0RP02HPSX.H. 08c0: 90 93 52 50 33 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP3D.\/._SB_PC 08d0: 49 30 52 50 30 33 48 50 53 58 5b 22 0a 64 a0 40 I0RP03HPSX[".d.@ 08e0: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 .\/._SB_PCI0RP03 08f0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0900: 30 52 50 30 33 50 44 43 58 70 01 5c 2f 04 5f 53 0RP03PDCXp.\/._S 0910: 42 5f 50 43 49 30 52 50 30 33 48 50 53 58 86 5c B_PCI0RP03HPSX.\ 0920: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 33 00 a1 /._SB_PCI0RP03.. 0930: 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .p.\/._SB_PCI0RP 0940: 30 33 48 50 53 58 a0 48 08 90 93 52 50 34 44 00 03HPSX.H...RP4D. 0950: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 48 \/._SB_PCI0RP04H 0960: 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 PSX[".d.@.\/._SB 0970: 5f 50 43 49 30 52 50 30 34 50 44 43 58 70 01 5c _PCI0RP04PDCXp.\ 0980: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 44 /._SB_PCI0RP04PD 0990: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 09a0: 50 30 34 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 P04HPSX.\/._SB_P 09b0: 43 49 30 52 50 30 34 00 a1 16 70 01 5c 2f 04 5f CI0RP04...p.\/._ 09c0: 53 42 5f 50 43 49 30 52 50 30 34 48 50 53 58 a0 SB_PCI0RP04HPSX. 09d0: 48 08 90 93 52 50 35 44 00 5c 2f 04 5f 53 42 5f H...RP5D.\/._SB_ 09e0: 50 43 49 30 52 50 30 35 48 50 53 58 5b 22 0a 64 PCI0RP05HPSX[".d 09f0: a0 40 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .@.\/._SB_PCI0RP 0a00: 30 35 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 05PDCXp.\/._SB_P 0a10: 43 49 30 52 50 30 35 50 44 43 58 70 01 5c 2f 04 CI0RP05PDCXp.\/. 0a20: 5f 53 42 5f 50 43 49 30 52 50 30 35 48 50 53 58 _SB_PCI0RP05HPSX 0a30: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 35 .\/._SB_PCI0RP05 0a40: 00 a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ...p.\/._SB_PCI0 0a50: 52 50 30 35 48 50 53 58 a0 48 08 90 93 52 50 36 RP05HPSX.H...RP6 0a60: 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 D.\/._SB_PCI0RP0 0a70: 36 48 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 6HPSX[".d.@.\/._ 0a80: 53 42 5f 50 43 49 30 52 50 30 36 50 44 43 58 70 SB_PCI0RP06PDCXp 0a90: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 0aa0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0ab0: 30 52 50 30 36 48 50 53 58 86 5c 2f 03 5f 53 42 0RP06HPSX.\/._SB 0ac0: 5f 50 43 49 30 52 50 30 36 00 a1 16 70 01 5c 2f _PCI0RP06...p.\/ 0ad0: 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 50 53 ._SB_PCI0RP06HPS 0ae0: 58 14 42 0d 5f 4c 30 32 00 70 00 47 50 45 43 a0 X.B._L02.p.GPEC. 0af0: 4d 0a 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 M.\/._SB_PCI0LPC 0b00: 42 45 43 4f 4b a0 4e 04 93 44 54 53 57 01 a0 27 BECOK.N..DTSW..' 0b10: 92 95 44 54 53 31 44 54 53 32 70 44 54 53 31 5c ..DTS1DTS2pDTS1\ 0b20: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0b30: 30 5f 53 4b 54 41 a1 1d 70 44 54 53 32 5c 2f 05 0_SKTA..pDTS2\/. 0b40: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f _SB_PCI0LPCBEC0_ 0b50: 53 4b 54 41 a1 48 04 a0 27 92 95 4f 44 54 31 4f SKTA.H..'..ODT1O 0b60: 44 54 32 70 4f 44 54 31 5c 2f 05 5f 53 42 5f 50 DT2pODT1\/._SB_P 0b70: 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 CI0LPCBEC0_SKTA. 0b80: 1d 70 4f 44 54 32 5c 2f 05 5f 53 42 5f 50 43 49 .pODT2\/._SB_PCI 0b90: 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 16 5c 0LPCBEC0_SKTA..\ 0ba0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 50 48 /._SB_PCI0LPCBPH 0bb0: 53 53 0a 10 14 18 5f 4c 30 33 00 86 5c 2f 03 5f SS...._L03..\/._ 0bc0: 53 42 5f 50 43 49 30 55 53 42 31 0a 02 14 18 5f SB_PCI0USB1...._ 0bd0: 4c 30 34 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 L04..\/._SB_PCI0 0be0: 55 53 42 32 0a 02 14 18 5f 4c 30 35 00 86 5c 2f USB2...._L05..\/ 0bf0: 03 5f 53 42 5f 50 43 49 30 55 53 42 35 0a 02 14 ._SB_PCI0USB5... 0c00: 36 5f 4c 30 36 00 a0 27 5c 2f 04 5f 53 42 5f 50 6_L06..'\/._SB_P 0c10: 43 49 30 47 46 58 30 47 53 53 45 5c 2f 04 5f 53 CI0GFX0GSSE\/._S 0c20: 42 5f 50 43 49 30 47 46 58 30 47 53 43 49 a1 07 B_PCI0GFX0GSCI.. 0c30: 70 01 53 43 49 53 14 43 1f 5f 4c 30 39 00 a0 41 p.SCIS.C._L09..A 0c40: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0c50: 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PSPXp.\/._SB_PCI 0c60: 30 52 50 30 31 50 53 50 58 70 01 5c 2f 04 5f 53 0RP01PSPXp.\/._S 0c70: 42 5f 50 43 49 30 52 50 30 31 50 4d 53 58 86 5c B_PCI0RP01PMSX.\ 0c80: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 31 0a 02 /._SB_PCI0RP01.. 0c90: a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .A.\/._SB_PCI0RP 0ca0: 30 32 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 02PSPXp.\/._SB_P 0cb0: 43 49 30 52 50 30 32 50 53 50 58 70 01 5c 2f 04 CI0RP02PSPXp.\/. 0cc0: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 4d 53 58 _SB_PCI0RP02PMSX 0cd0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 0ce0: 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 ...A.\/._SB_PCI0 0cf0: 52 50 30 33 50 53 50 58 70 01 5c 2f 04 5f 53 42 RP03PSPXp.\/._SB 0d00: 5f 50 43 49 30 52 50 30 33 50 53 50 58 70 01 5c _PCI0RP03PSPXp.\ 0d10: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 50 4d /._SB_PCI0RP03PM 0d20: 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 SX.\/._SB_PCI0RP 0d30: 30 33 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 03...A.\/._SB_PC 0d40: 49 30 52 50 30 34 50 53 50 58 70 01 5c 2f 04 5f I0RP04PSPXp.\/._ 0d50: 53 42 5f 50 43 49 30 52 50 30 34 50 53 50 58 70 SB_PCI0RP04PSPXp 0d60: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 .\/._SB_PCI0RP04 0d70: 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 PMSX.\/._SB_PCI0 0d80: 52 50 30 34 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f RP04...A.\/._SB_ 0d90: 50 43 49 30 52 50 30 35 50 53 50 58 70 01 5c 2f PCI0RP05PSPXp.\/ 0da0: 04 5f 53 42 5f 50 43 49 30 52 50 30 35 50 53 50 ._SB_PCI0RP05PSP 0db0: 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 Xp.\/._SB_PCI0RP 0dc0: 30 35 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 05PMSX.\/._SB_PC 0dd0: 49 30 52 50 30 35 0a 02 a0 41 05 5c 2f 04 5f 53 I0RP05...A.\/._S 0de0: 42 5f 50 43 49 30 52 50 30 36 50 53 50 58 70 01 B_PCI0RP06PSPXp. 0df0: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 50 \/._SB_PCI0RP06P 0e00: 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 SPXp.\/._SB_PCI0 0e10: 52 50 30 36 50 4d 53 58 86 5c 2f 03 5f 53 42 5f RP06PMSX.\/._SB_ 0e20: 50 43 49 30 52 50 30 36 0a 02 14 18 5f 4c 30 42 PCI0RP06...._L0B 0e30: 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 50 43 49 ..\/._SB_PCI0PCI 0e40: 42 0a 02 14 18 5f 4c 30 43 00 86 5c 2f 03 5f 53 B...._L0C..\/._S 0e50: 42 5f 50 43 49 30 55 53 42 33 0a 02 14 4b 0b 5f B_PCI0USB3...K._ 0e60: 4c 30 44 00 a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 L0D..;\/._SB_PCI 0e70: 30 45 48 43 31 50 4d 45 53 70 01 5c 2f 04 5f 53 0EHC1PMESp.\/._S 0e80: 42 5f 50 43 49 30 45 48 43 31 50 4d 45 53 86 5c B_PCI0EHC1PMES.\ 0e90: 2f 03 5f 53 42 5f 50 43 49 30 45 48 43 31 0a 02 /._SB_PCI0EHC1.. 0ea0: a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 30 45 48 43 .;\/._SB_PCI0EHC 0eb0: 32 50 4d 45 53 70 01 5c 2f 04 5f 53 42 5f 50 43 2PMESp.\/._SB_PC 0ec0: 49 30 45 48 43 32 50 4d 45 53 86 5c 2f 03 5f 53 I0EHC2PMES.\/._S 0ed0: 42 5f 50 43 49 30 45 48 43 32 0a 02 a0 3b 5c 2f B_PCI0EHC2...;\/ 0ee0: 04 5f 53 42 5f 50 43 49 30 48 44 45 46 50 4d 45 ._SB_PCI0HDEFPME 0ef0: 53 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 48 44 Sp.\/._SB_PCI0HD 0f00: 45 46 50 4d 45 53 86 5c 2f 03 5f 53 42 5f 50 43 EFPMES.\/._SB_PC 0f10: 49 30 48 44 45 46 0a 02 14 18 5f 4c 30 45 00 86 I0HDEF...._L0E.. 0f20: 5c 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 34 0a \/._SB_PCI0USB4. 0f30: 02 14 1c 5f 4c 31 42 00 80 4c 50 4f 4c 4c 50 4f ..._L1B..LPOLLPO 0f40: 4c 86 5c 2e 5f 53 42 5f 4c 49 44 30 0a 80 10 46 L.\._SB_LID0...F 0f50: 0b 5f 50 52 5f 5b 83 0b 43 50 55 30 00 10 10 00 ._PR_[..CPU0.... 0f60: 00 06 5b 83 0b 43 50 55 31 01 10 10 00 00 06 14 ..[..CPU1....... 0f70: 45 09 52 50 50 43 00 a0 4d 08 93 4f 53 59 53 0b E.RPPC..M..OSYS. 0f80: d2 07 a0 42 08 7b 43 46 47 44 01 00 a0 42 04 94 ...B.{CFGD...B.. 0f90: 5e 2e 43 50 55 30 5f 50 50 43 00 74 5e 2e 43 50 ^.CPU0_PPC.t^.CP 0fa0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 0fb0: 43 50 4e 4f 54 72 5e 2e 43 50 55 30 5f 50 50 43 CPNOTr^.CPU0_PPC 0fc0: 01 5e 2e 43 50 55 30 5f 50 50 43 50 4e 4f 54 a1 .^.CPU0_PPCPNOT. 0fd0: 35 72 5e 2e 43 50 55 30 5f 50 50 43 01 5e 2e 43 5r^.CPU0_PPC.^.C 0fe0: 50 55 30 5f 50 50 43 50 4e 4f 54 74 5e 2e 43 50 PU0_PPCPNOTt^.CP 0ff0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 1000: 43 50 4e 4f 54 08 46 57 53 4f 0d 46 57 53 4f 00 CPNOT.FWSO.FWSO. 1010: 08 5f 50 53 43 00 14 12 5f 50 53 30 00 70 5f 50 ._PSC..._PS0.p_P 1020: 53 43 60 70 00 5f 50 53 43 14 0d 5f 50 53 33 00 SC`p._PSC.._PS3. 1030: 70 0a 03 5f 50 53 43 10 8c fb 04 5f 53 42 5f 5b p.._PSC...._SB_[ 1040: 82 4f 3e 41 4d 57 30 08 5f 48 49 44 0d 70 6e 70 .O>AMW0._HID.pnp 1050: 30 63 31 34 00 08 5f 55 49 44 00 08 5f 57 44 47 0c14.._UID.._WDG 1060: 11 3f 0a 3c a7 1d 85 2e 53 d0 5f 49 9d fa 1a 4a .?.<....S._I...J 1070: d6 2e 6a 86 41 43 01 00 3b 6d 43 71 dd fb 72 4c ..j.AC..;mCq..rL 1080: bc b8 43 5b fe 0d 64 f9 42 43 01 00 21 12 90 05 ..C[..d.BC..!... 1090: 66 d5 d1 11 b2 f0 00 a0 c9 06 29 10 42 41 01 00 f.........).BA.. 10a0: 08 53 54 41 43 11 07 0a 04 01 14 03 00 14 1f 57 .STAC..........W 10b0: 51 41 43 01 70 0d 4d 58 4d 54 43 43 6f 6e 66 69 QAC.p.MXMTCConfi 10c0: 67 44 61 74 61 00 5b 31 a4 53 54 41 43 08 53 54 gData.[1.STAC.ST 10d0: 42 43 11 07 0a 04 01 00 00 00 14 34 57 51 42 43 BC.........4WQBC 10e0: 01 70 0d 47 65 74 20 4d 58 4d 54 43 43 6f 6e 74 .p.Get MXMTCCont 10f0: 72 6f 6c 44 61 74 61 3a 20 53 54 42 43 20 3d 20 rolData: STBC = 1100: 00 5b 31 70 53 54 42 43 5b 31 a4 53 54 42 43 14 .[1pSTBC[1.STBC. 1110: 47 06 57 53 42 43 02 70 69 53 54 42 43 70 0d 53 G.WSBC.piSTBCp.S 1120: 65 74 20 4d 58 4d 54 43 43 6f 6e 74 72 6f 6c 44 et MXMTCControlD 1130: 61 74 61 3a 20 53 54 42 43 20 3d 20 00 5b 31 70 ata: STBC = .[1p 1140: 53 54 42 43 5b 31 a0 30 93 5e 5e 2f 03 50 43 49 STBC[1.0.^^/.PCI 1150: 30 4c 50 43 42 45 43 4f 4b 01 70 83 88 53 54 42 0LPCBECOK.p..STB 1160: 43 01 00 5e 5e 2f 04 50 43 49 30 4c 50 43 42 45 C..^^/.PCI0LPCBE 1170: 43 30 5f 53 4b 54 43 08 57 51 42 41 11 43 2b 0b C0_SKTC.WQBA.C+. 1180: ae 02 46 4f 4d 42 01 00 00 00 9e 02 00 00 c0 0b ..FOMB.......... 1190: 00 00 44 53 00 01 1a 7d da 54 28 d9 85 00 01 06 ..DS...}.T(..... 11a0: 18 42 10 07 10 0a 4b 61 02 c9 21 52 3c 18 94 05 .B....Ka..!R<... 11b0: 10 43 88 57 04 44 04 84 bc 0a b0 29 c0 24 88 fa .C.W.D.....).$.. 11c0: f7 87 28 09 0e 25 04 42 12 05 98 17 a0 5b 80 61 ..(..%.B.....[.a 11d0: 01 b6 05 98 16 e0 18 92 4a 03 a7 04 96 02 21 a1 ........J.....!. 11e0: 02 94 0b f0 2d 40 3b a2 24 0b b0 0c 23 02 8f 82 ....-@;.$...#... 11f0: a1 71 68 ec 30 2c 13 4c 83 38 8c b2 91 45 60 dc .qh.0,.L.8...E`. 1200: 4e 05 c8 15 20 4c 80 78 54 61 34 07 45 e0 42 63 N... L.xTa4.E.Bc 1210: 64 40 c8 a3 00 ab a3 d0 a4 12 d8 bd 00 65 02 2c d@...........e., 1220: 0a 10 27 c0 9a 00 63 48 32 28 40 9b 00 5b 20 42 ..'...cH2(@..[ B 1230: 0f d4 19 8a 46 70 02 51 6a 46 11 48 ac 1a 01 85 ....Fp.QjF.H.... 1240: 12 34 46 b0 10 81 c2 86 37 46 98 03 88 d1 fe 20 .4F.....7F..... 1250: 48 20 05 e3 66 91 46 83 1a 6b 82 63 f7 68 4e b8 H ..f.F..k.c.hN. 1260: 73 01 d2 e7 26 90 a3 3b b8 3a 07 4d 86 c7 b0 1e s...&..;.:.M.... 1270: 06 d8 29 00 ef 1a 50 d3 3f 78 26 08 0e 35 44 8f ..)...P.?x&..5D. 1280: 3a dc 09 1c fb 91 30 88 b3 3b 6e ac c3 c9 68 d0 :.....0..;n...h. 1290: a5 0a 30 7b 00 d0 d0 12 9c f6 99 84 7e 0f 38 9f ..0{........~.8. 12a0: 9e 21 89 fc 41 a0 46 e6 ff 3f b4 c7 78 5a 31 43 .!..A.F..?..xZ1C 12b0: 3e 0b 1c 16 13 0b a1 4d 6a 3c 40 40 e1 d1 40 08 >......Mj<@@..@. 12c0: 6f 06 9e af 09 46 86 90 93 f1 a0 06 e0 41 d7 3a o....F.......A.: 12d0: 32 8d 27 a6 21 cf e8 00 22 bf 32 78 0c 41 02 f9 2.'.!...".2x.A.. 12e0: c4 60 b8 c7 81 13 78 02 f0 59 40 10 92 00 21 51 .`....x..Y@...!Q 12f0: e3 a7 47 08 7e 7a 78 93 30 28 1f d2 99 f9 90 e1 ..G.~zx.0(...... 1300: 11 c2 07 c4 7b 9f 3b 19 c1 29 7b a4 e0 b0 7e 0e ....{.;..){...~. 1310: 20 c0 af 0f 8f 0d 09 7c ae 08 8c 1d aa fd 0a 40 ......|.......@ 1320: 08 1e ed 51 e0 54 23 1c 2d 78 08 8a 1c 03 4a cc ...Q.T#.-x....J. 1330: 18 50 03 38 85 d0 e7 73 04 47 14 25 f6 21 19 da .P.8...s.G.%.!.. 1340: 08 e1 1f 39 4e c1 f7 8b 23 3d ad 23 78 91 f0 08 ...9N...#=.#x... 1350: 30 e1 ce 28 a8 38 30 f4 ff 7f 4c 01 dc 7a 3b a6 0..(.80...L..z;. 1360: 80 3e c0 31 05 50 fc ff 3f a6 00 87 a8 c7 14 f4 .>.1.P..?....... 1370: 40 0c 7c 2e a1 0d ff 96 c1 8e 03 87 74 6a 8f 28 @.|.........tj.( 1380: 80 29 79 47 14 50 8c 14 d6 f1 04 18 05 3c 9b a0 .)yG.P.......<.. 1390: 22 1d 4f 80 ce ff ff 78 02 58 b8 9a bc 92 84 7d ".O....x.X.....} 13a0: 1e 78 1d 89 14 e3 41 e2 b5 e4 c1 24 46 98 08 8f .x....A....$F... 13b0: 27 1e 47 c0 b7 82 28 91 8e 3e c4 83 49 28 63 3e '.G...(..>..I(c> 13c0: a3 84 89 f9 04 70 22 ef 27 46 0a 73 2a 8f 27 2c .....p".'F.s*.', 13d0: c4 f1 04 a0 85 e2 e3 09 3a 2c 84 fe ff c7 13 dc ........:,...... 13e0: e1 c1 a7 0c fc 85 0c c6 f9 04 30 24 f0 7c 02 ca ..........0$.|.. 13f0: db 18 e6 80 02 8c 14 da f4 a9 d1 a8 55 83 32 35 ............U.25 1400: ca 34 a8 d5 a7 52 63 c6 4c 9c 52 bc 6c 8d df f2 .4...Rc.L.R.l... 1410: 9e 09 02 b1 20 0a 81 38 cc f3 42 20 96 a2 01 84 .... ..8..B .... 1420: 85 06 a1 42 a9 05 e2 98 20 34 92 0a 10 f6 ff 07 ...B.... 4...... 1430: 5b 82 1b 4c 49 44 30 08 5f 48 49 44 0c 41 d0 0c [..LID0._HID.A.. 1440: 0d 14 0b 5f 4c 49 44 00 a4 4c 50 4f 4c 5b 82 0f ..._LID..LPOL[.. 1450: 50 57 52 42 08 5f 48 49 44 0c 41 d0 0c 0c 5b 82 PWRB._HID.A...[. 1460: 84 b9 04 50 43 49 30 14 09 5f 53 33 44 00 a4 0a ...PCI0.._S3D... 1470: 02 14 09 5f 53 34 44 00 a4 0a 02 08 5f 48 49 44 ..._S4D....._HID 1480: 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 d0 0a 03 5b .A...._CID.A...[ 1490: 82 43 0e 4d 43 48 43 08 5f 41 44 52 00 5b 80 48 .C.MCHC._ADR.[.H 14a0: 42 55 53 02 0a 40 0a c0 5b 81 4a 0c 48 42 55 53 BUS..@..[.J.HBUS 14b0: 03 45 50 45 4e 01 00 0b 45 50 42 52 14 00 20 4d .EPEN...EPBR.. M 14c0: 48 45 4e 01 00 0d 4d 48 42 52 12 00 40 0a 50 58 HEN...MHBR..@.PX 14d0: 45 4e 01 50 58 53 5a 02 00 17 50 58 42 52 06 00 EN.PXSZ...PXBR.. 14e0: 20 44 49 45 4e 01 00 0b 44 49 42 52 14 00 20 49 DIEN...DIBR.. I 14f0: 50 45 4e 01 00 0b 49 50 42 52 14 00 40 0e 00 04 PEN...IPBR..@... 1500: 50 4d 30 48 02 00 02 50 4d 31 4c 02 00 02 50 4d PM0H...PM1L...PM 1510: 31 48 02 00 02 50 4d 32 4c 02 00 02 50 4d 32 48 1H...PM2L...PM2H 1520: 02 00 02 50 4d 33 4c 02 00 02 50 4d 33 48 02 00 ...PM3L...PM3H.. 1530: 02 50 4d 34 4c 02 00 02 50 4d 34 48 02 00 02 50 .PM4L...PM4H...P 1540: 4d 35 4c 02 00 02 50 4d 35 48 02 00 02 50 4d 36 M5L...PM5H...PM6 1550: 4c 02 00 02 50 4d 36 48 02 00 02 00 07 48 45 4e L...PM6H.....HEN 1560: 41 01 00 40 05 54 55 55 44 10 00 40 06 00 04 54 A..@.TUUD..@...T 1570: 4c 55 44 0c 08 42 55 46 30 11 4d 20 0b 08 02 88 LUD..BUF0.M .... 1580: 0d 00 02 0c 00 00 00 00 00 ff 00 00 00 00 01 87 ................ 1590: 17 00 01 0c 03 00 00 00 00 00 00 00 00 f7 0c 00 ................ 15a0: 00 00 00 00 00 f8 0c 00 00 47 01 f8 0c f8 0c 01 .........G...... 15b0: 08 87 17 00 01 0c 03 00 00 00 00 00 0d 00 00 ff ................ 15c0: ff 00 00 00 00 00 00 00 f3 00 00 87 17 00 00 0c ................ 15d0: 03 00 00 00 00 00 00 0a 00 ff ff 0b 00 00 00 00 ................ 15e0: 00 00 00 02 00 87 17 00 00 0c 03 00 00 00 00 00 ................ 15f0: 00 0c 00 ff 3f 0c 00 00 00 00 00 00 40 00 00 87 ....?.......@... 1600: 17 00 00 0c 03 00 00 00 00 00 40 0c 00 ff 7f 0c ..........@..... 1610: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 1620: 00 00 00 00 80 0c 00 ff bf 0c 00 00 00 00 00 00 ................ 1630: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0c @............... 1640: 00 ff ff 0c 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1650: 00 0c 03 00 00 00 00 00 00 0d 00 ff 3f 0d 00 00 ............?... 1660: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1670: 00 00 40 0d 00 ff 7f 0d 00 00 00 00 00 00 40 00 ..@...........@. 1680: 00 87 17 00 00 0c 03 00 00 00 00 00 80 0d 00 ff ................ 1690: bf 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c ........@....... 16a0: 03 00 00 00 00 00 c0 0d 00 ff ff 0d 00 00 00 00 ................ 16b0: 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 ..@............. 16c0: 00 0e 00 ff 3f 0e 00 00 00 00 00 00 40 00 00 87 ....?.......@... 16d0: 17 00 00 0c 03 00 00 00 00 00 40 0e 00 ff 7f 0e ..........@..... 16e0: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 16f0: 00 00 00 00 80 0e 00 ff bf 0e 00 00 00 00 00 00 ................ 1700: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0e @............... 1710: 00 ff ff 0e 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1720: 00 0c 03 00 00 00 00 00 00 0f 00 ff ff 0f 00 00 ................ 1730: 00 00 00 00 00 01 00 87 17 00 00 0c 03 00 00 00 ................ 1740: 00 00 00 00 00 ff ff ff df 00 00 00 00 00 00 00 ................ 1750: 00 87 17 00 00 0c 03 00 00 00 00 00 00 00 f0 ff ................ 1760: ff bf fe 00 00 00 00 00 00 c0 0e 87 17 00 00 0c ................ 1770: 03 00 00 00 00 00 00 d4 fe ff 4f d4 fe 00 00 00 ..........O..... 1780: 00 00 00 00 00 79 00 14 4b 3d 5f 43 52 53 08 a0 .....y..K=_CRS.. 1790: 1c 5e 2e 4d 43 48 43 50 4d 31 4c 8a 42 55 46 30 .^.MCHCPM1L.BUF0 17a0: 0a 7c 43 30 4c 4e 70 00 43 30 4c 4e a0 1f 93 5e .|C0LNp.C0LN...^ 17b0: 2e 4d 43 48 43 50 4d 31 4c 01 8d 42 55 46 30 0b .MCHCPM1L..BUF0. 17c0: 58 03 43 30 52 57 70 00 43 30 52 57 a0 1c 5e 2e X.C0RWp.C0RW..^. 17d0: 4d 43 48 43 50 4d 31 48 8a 42 55 46 30 0a 96 43 MCHCPM1H.BUF0..C 17e0: 34 4c 4e 70 00 43 34 4c 4e a0 1f 93 5e 2e 4d 43 4LNp.C4LN...^.MC 17f0: 48 43 50 4d 31 48 01 8d 42 55 46 30 0b 28 04 43 HCPM1H..BUF0.(.C 1800: 34 52 57 70 00 43 34 52 57 a0 1c 5e 2e 4d 43 48 4RWp.C4RW..^.MCH 1810: 43 50 4d 32 4c 8a 42 55 46 30 0a b0 43 38 4c 4e CPM2L.BUF0..C8LN 1820: 70 00 43 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 p.C8LN...^.MCHCP 1830: 4d 32 4c 01 8d 42 55 46 30 0b f8 04 43 38 52 57 M2L..BUF0...C8RW 1840: 70 00 43 38 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d p.C8RW..^.MCHCPM 1850: 32 48 8a 42 55 46 30 0a ca 43 43 4c 4e 70 00 43 2H.BUF0..CCLNp.C 1860: 43 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 32 48 CLN...^.MCHCPM2H 1870: 01 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 43 ..BUF0...CCRWp.C 1880: 43 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d 33 4c 8a CRW..^.MCHCPM3L. 1890: 42 55 46 30 0a e4 44 30 4c 4e 70 00 44 30 4c 4e BUF0..D0LNp.D0LN 18a0: a0 1f 93 5e 2e 4d 43 48 43 50 4d 33 4c 01 8d 42 ...^.MCHCPM3L..B 18b0: 55 46 30 0b 98 06 44 30 52 57 70 00 44 30 52 57 UF0...D0RWp.D0RW 18c0: a0 1c 5e 2e 4d 43 48 43 50 4d 33 48 8a 42 55 46 ..^.MCHCPM3H.BUF 18d0: 30 0a fe 44 34 4c 4e 70 00 44 34 4c 4e a0 1f 93 0..D4LNp.D4LN... 18e0: 5e 2e 4d 43 48 43 50 4d 33 48 01 8d 42 55 46 30 ^.MCHCPM3H..BUF0 18f0: 0b 68 07 44 34 52 57 70 00 44 34 52 57 a0 1d 5e .h.D4RWp.D4RW..^ 1900: 2e 4d 43 48 43 50 4d 34 4c 8a 42 55 46 30 0b 18 .MCHCPM4L.BUF0.. 1910: 01 44 38 4c 4e 70 00 44 38 4c 4e a0 1f 93 5e 2e .D8LNp.D8LN...^. 1920: 4d 43 48 43 50 4d 34 4c 01 8d 42 55 46 30 0b 38 MCHCPM4L..BUF0.8 1930: 08 44 38 52 57 70 00 44 38 52 57 a0 1d 5e 2e 4d .D8RWp.D8RW..^.M 1940: 43 48 43 50 4d 34 48 8a 42 55 46 30 0b 32 01 44 CHCPM4H.BUF0.2.D 1950: 43 4c 4e 70 00 44 43 4c 4e a0 1f 93 5e 2e 4d 43 CLNp.DCLN...^.MC 1960: 48 43 50 4d 34 48 01 8d 42 55 46 30 0b 08 09 44 HCPM4H..BUF0...D 1970: 43 52 57 70 00 44 43 52 57 a0 1d 5e 2e 4d 43 48 CRWp.DCRW..^.MCH 1980: 43 50 4d 35 4c 8a 42 55 46 30 0b 4c 01 45 30 4c CPM5L.BUF0.L.E0L 1990: 4e 70 00 45 30 4c 4e a0 1f 93 5e 2e 4d 43 48 43 Np.E0LN...^.MCHC 19a0: 50 4d 35 4c 01 8d 42 55 46 30 0b d8 09 45 30 52 PM5L..BUF0...E0R 19b0: 57 70 00 45 30 52 57 a0 1d 5e 2e 4d 43 48 43 50 Wp.E0RW..^.MCHCP 19c0: 4d 35 48 8a 42 55 46 30 0b 66 01 45 34 4c 4e 70 M5H.BUF0.f.E4LNp 19d0: 00 45 34 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d .E4LN...^.MCHCPM 19e0: 35 48 01 8d 42 55 46 30 0b a8 0a 45 34 52 57 70 5H..BUF0...E4RWp 19f0: 00 45 34 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 .E4RW..^.MCHCPM6 1a00: 4c 8a 42 55 46 30 0b 80 01 45 38 4c 4e 70 00 45 L.BUF0...E8LNp.E 1a10: 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 4c 8LN...^.MCHCPM6L 1a20: 01 8d 42 55 46 30 0b 78 0b 45 38 52 57 70 00 45 ..BUF0.x.E8RWp.E 1a30: 38 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 48 8a 8RW..^.MCHCPM6H. 1a40: 42 55 46 30 0b 9a 01 45 43 4c 4e 70 00 45 43 4c BUF0...ECLNp.ECL 1a50: 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 48 01 8d N...^.MCHCPM6H.. 1a60: 42 55 46 30 0b 48 0c 45 43 52 57 70 00 45 43 52 BUF0.H.ECRWp.ECR 1a70: 57 a0 1d 5e 2e 4d 43 48 43 50 4d 30 48 8a 42 55 W..^.MCHCPM0H.BU 1a80: 46 30 0b b4 01 46 30 4c 4e 70 00 46 30 4c 4e a0 F0...F0LNp.F0LN. 1a90: 1f 93 5e 2e 4d 43 48 43 50 4d 30 48 01 8d 42 55 ..^.MCHCPM0H..BU 1aa0: 46 30 0b 18 0d 46 30 52 57 70 00 46 30 52 57 8a F0...F0RWp.F0RW. 1ab0: 42 55 46 30 0b c2 01 4d 31 4d 4e 8a 42 55 46 30 BUF0...M1MN.BUF0 1ac0: 0b c6 01 4d 31 4d 58 8a 42 55 46 30 0b ce 01 4d ...M1MX.BUF0...M 1ad0: 31 4c 4e 8a 42 55 46 30 0b dc 01 4d 32 4d 4e 8a 1LN.BUF0...M2MN. 1ae0: 42 55 46 30 0b e0 01 4d 32 4d 58 8a 42 55 46 30 BUF0...M2MX.BUF0 1af0: 0b e8 01 4d 32 4c 4e 79 5e 2e 4d 43 48 43 50 58 ...M2LNy^.MCHCPX 1b00: 42 52 0a 1a 4d 31 4d 58 7a 0c 00 00 00 10 5e 2e BR..M1MXz.....^. 1b10: 4d 43 48 43 50 58 53 5a 60 72 4d 31 4d 58 60 4d MCHCPXSZ`rM1MX`M 1b20: 32 4d 4e 72 74 4d 32 4d 58 4d 32 4d 4e 00 01 4d 2MNrtM2MXM2MN..M 1b30: 32 4c 4e 74 4d 31 4d 58 01 4d 31 4d 58 79 5e 2e 2LNtM1MX.M1MXy^. 1b40: 4d 43 48 43 54 4c 55 44 0a 14 4d 31 4d 4e 72 74 MCHCTLUD..M1MNrt 1b50: 4d 31 4d 58 4d 31 4d 4e 00 01 4d 31 4c 4e a4 42 M1MXM1MN..M1LN.B 1b60: 55 46 30 14 47 28 5f 50 52 54 00 a0 45 0f 47 50 UF0.G(_PRT..E.GP 1b70: 49 43 a4 12 4d 0e 13 12 0b 04 0c ff ff 01 00 00 IC..M........... 1b80: 00 0a 10 12 0b 04 0c ff ff 02 00 00 00 0a 10 12 ................ 1b90: 0b 04 0c ff ff 07 00 00 00 0a 10 12 0b 04 0c ff ................ 1ba0: ff 19 00 00 00 0a 14 12 0b 04 0c ff ff 1a 00 00 ................ 1bb0: 00 0a 10 12 0b 04 0c ff ff 1a 00 01 00 0a 15 12 ................ 1bc0: 0c 04 0c ff ff 1a 00 0a 02 00 0a 12 12 0b 04 0c ................ 1bd0: ff ff 1b 00 00 00 0a 16 12 0b 04 0c ff ff 1c 00 ................ 1be0: 00 00 0a 11 12 0b 04 0c ff ff 1c 00 01 00 0a 10 ................ 1bf0: 12 0c 04 0c ff ff 1c 00 0a 02 00 0a 12 12 0c 04 ................ 1c00: 0c ff ff 1c 00 0a 03 00 0a 13 12 0b 04 0c ff ff ................ 1c10: 1d 00 00 00 0a 17 12 0b 04 0c ff ff 1d 00 01 00 ................ 1c20: 0a 13 12 0c 04 0c ff ff 1d 00 0a 02 00 0a 12 12 ................ 1c30: 0b 04 0c ff ff 1f 00 00 00 0a 13 12 0b 04 0c ff ................ 1c40: ff 1f 00 01 00 0a 13 12 0c 04 0c ff ff 1f 00 0a ................ 1c50: 02 00 0a 13 12 0c 04 0c ff ff 1f 00 0a 03 00 0a ................ 1c60: 10 a1 49 18 a4 12 45 18 13 12 13 04 0c ff ff 01 ..I...E......... 1c70: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1c80: 0c ff ff 02 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 ......^.LPCBLNKA 1c90: 00 12 13 04 0c ff ff 07 00 00 5e 2e 4c 50 43 42 ..........^.LPCB 1ca0: 4c 4e 4b 41 00 12 13 04 0c ff ff 19 00 00 5e 2e LNKA..........^. 1cb0: 4c 50 43 42 4c 4e 4b 45 00 12 13 04 0c ff ff 1a LPCBLNKE........ 1cc0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1cd0: 0c ff ff 1a 00 01 5e 2e 4c 50 43 42 4c 4e 4b 46 ......^.LPCBLNKF 1ce0: 00 12 14 04 0c ff ff 1a 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1cf0: 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1b 00 00 5e BLNKC..........^ 1d00: 2e 4c 50 43 42 4c 4e 4b 47 00 12 13 04 0c ff ff .LPCBLNKG....... 1d10: 1c 00 00 5e 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 ...^.LPCBLNKB... 1d20: 04 0c ff ff 1c 00 01 5e 2e 4c 50 43 42 4c 4e 4b .......^.LPCBLNK 1d30: 41 00 12 14 04 0c ff ff 1c 00 0a 02 5e 2e 4c 50 A...........^.LP 1d40: 43 42 4c 4e 4b 43 00 12 14 04 0c ff ff 1c 00 0a CBLNKC.......... 1d50: 03 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0c .^.LPCBLNKD..... 1d60: ff ff 1d 00 00 5e 2e 4c 50 43 42 4c 4e 4b 48 00 .....^.LPCBLNKH. 1d70: 12 13 04 0c ff ff 1d 00 01 5e 2e 4c 50 43 42 4c .........^.LPCBL 1d80: 4e 4b 44 00 12 14 04 0c ff ff 1d 00 0a 02 5e 2e NKD...........^. 1d90: 4c 50 43 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1f LPCBLNKC........ 1da0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 ..^.LPCBLNKD.... 1db0: 0c ff ff 1f 00 01 5e 2e 4c 50 43 42 4c 4e 4b 44 ......^.LPCBLNKD 1dc0: 00 12 14 04 0c ff ff 1f 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1dd0: 42 4c 4e 4b 44 00 12 14 04 0c ff ff 1f 00 0a 03 BLNKD........... 1de0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 40 14 50 ^.LPCBLNKA.[.@.P 1df0: 44 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 DRC._HID.A...._U 1e00: 49 44 01 08 42 55 46 30 11 46 06 0a 62 86 09 00 ID..BUF0.F..b... 1e10: 01 00 00 00 00 00 40 00 00 86 09 00 01 00 00 00 ......@......... 1e20: 00 00 40 00 00 86 09 00 01 00 00 00 00 00 10 00 ..@............. 1e30: 00 86 09 00 01 00 00 00 00 00 10 00 00 86 09 00 ................ 1e40: 01 00 00 00 00 00 00 00 00 86 09 00 01 00 00 d2 ................ 1e50: fe 00 00 02 00 86 09 00 01 00 00 d4 fe 00 50 00 ..............P. 1e60: 00 86 09 00 01 00 50 d4 fe 00 b0 04 00 79 00 14 ......P......y.. 1e70: 4d 0b 5f 43 52 53 08 8a 42 55 46 30 0a 04 52 42 M._CRS..BUF0..RB 1e80: 52 30 79 5e 5e 2e 4c 50 43 42 52 43 42 41 0a 0e R0y^^.LPCBRCBA.. 1e90: 52 42 52 30 8a 42 55 46 30 0a 10 4d 42 52 30 79 RBR0.BUF0..MBR0y 1ea0: 5e 5e 2e 4d 43 48 43 4d 48 42 52 0a 0e 4d 42 52 ^^.MCHCMHBR..MBR 1eb0: 30 8a 42 55 46 30 0a 1c 44 42 52 30 79 5e 5e 2e 0.BUF0..DBR0y^^. 1ec0: 4d 43 48 43 44 49 42 52 0a 0c 44 42 52 30 8a 42 MCHCDIBR..DBR0.B 1ed0: 55 46 30 0a 28 45 42 52 30 79 5e 5e 2e 4d 43 48 UF0.(EBR0y^^.MCH 1ee0: 43 45 50 42 52 0a 0c 45 42 52 30 8a 42 55 46 30 CEPBR..EBR0.BUF0 1ef0: 0a 34 58 42 52 30 79 5e 5e 2e 4d 43 48 43 50 58 .4XBR0y^^.MCHCPX 1f00: 42 52 0a 1a 58 42 52 30 8a 42 55 46 30 0a 38 58 BR..XBR0.BUF0.8X 1f10: 53 5a 30 7a 0c 00 00 00 10 5e 5e 2e 4d 43 48 43 SZ0z.....^^.MCHC 1f20: 50 58 53 5a 58 53 5a 30 a4 42 55 46 30 5b 82 4d PXSZXSZ0.BUF0[.M 1f30: 50 50 45 47 50 08 5f 41 44 52 0c 00 00 01 00 14 PPEGP._ADR...... 1f40: 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 2c A._PRT..3GPIC.., 1f50: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 1f60: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 1f70: 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 12 ............E... 1f80: 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 43 A.........^^.LPC 1f90: 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e 2e BLNKA........^^. 1fa0: 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff 0a LPCBLNKB........ 1fb0: 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 1fc0: 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 1fd0: 00 5b 82 49 46 56 47 41 5f 08 5f 41 44 52 00 08 .[.IFVGA_._ADR.. 1fe0: 53 57 49 54 01 08 43 52 54 41 01 08 4c 43 44 41 SWIT..CRTA..LCDA 1ff0: 01 08 54 56 41 41 01 08 56 4c 44 46 01 5b 80 56 ..TVAA..VLDF.[.V 2000: 49 44 53 02 00 0a c8 5b 81 0b 56 49 44 53 03 56 IDS....[..VIDS.V 2010: 44 49 44 20 14 09 5f 53 54 41 00 a4 0a 0f 08 5f DID .._STA....._ 2020: 50 53 43 00 14 0c 5f 50 53 30 00 70 00 5f 50 53 PSC..._PS0.p._PS 2030: 43 14 0c 5f 50 53 31 00 70 01 5f 50 53 43 14 0d C.._PS1.p._PSC.. 2040: 5f 50 53 33 00 70 0a 03 5f 50 53 43 14 10 5f 44 _PS3.p.._PSC.._D 2050: 4f 53 01 70 7b 68 0a 03 00 53 57 49 54 14 17 5f OS.p{h...SWIT.._ 2060: 44 4f 44 00 a4 12 0f 03 0c 00 01 01 00 0c 10 01 DOD............. 2070: 01 00 0b 00 02 5b 82 4d 08 43 52 54 5f 14 0a 5f .....[.M.CRT_.._ 2080: 41 44 52 00 a4 0b 00 01 14 41 06 5f 44 43 53 00 ADR......A._DCS. 2090: 5e 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 ^^^^.LPCBPHSS..p 20a0: 43 41 44 4c 60 70 43 53 54 45 61 7b 60 0a 02 60 CADL`pCSTEa{`..` 20b0: 7b 61 0a 02 61 a0 08 60 70 01 43 52 54 41 a1 07 {a..a..`p.CRTA.. 20c0: 70 00 43 52 54 41 a0 13 43 52 54 41 a0 08 93 61 p.CRTA..CRTA...a 20d0: 0a 02 a4 0a 1f a1 04 a4 0a 1d a1 0f a0 08 93 61 ...............a 20e0: 0a 02 a4 0a 0f a1 04 a4 0a 0d 14 12 5f 44 47 53 ............_DGS 20f0: 00 a0 07 43 52 54 41 a4 01 a1 03 a4 00 14 06 5f ...CRTA........_ 2100: 44 53 53 01 5b 82 47 0e 4c 43 44 5f 14 0a 5f 41 DSS.[.G.LCD_.._A 2110: 44 52 00 a4 0b 10 01 14 4d 05 5f 44 43 53 00 5e DR......M._DCS.^ 2120: 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 ^^^.LPCBPHSS..pC 2130: 41 44 4c 60 70 43 53 54 45 61 7b 60 01 60 7b 61 ADL`pCSTEa{`.`{a 2140: 01 61 a0 08 60 70 01 4c 43 44 41 a1 07 70 00 4c .a..`p.LCDA..p.L 2150: 43 44 41 a0 12 4c 43 44 41 a0 07 93 61 01 a4 0a CDA..LCDA...a... 2160: 1f a1 04 a4 0a 1d a1 0e a0 07 93 61 01 a4 0a 0f ...........a.... 2170: a1 04 a4 0a 0d 14 12 5f 44 47 53 00 a0 07 4c 43 ......._DGS...LC 2180: 44 41 a4 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 DA........_DSS.. 2190: 1d 5f 42 43 4c 00 a4 12 15 0a 0a 46 0a 28 00 0a ._BCL......F.(.. 21a0: 0a 0a 14 0a 1e 0a 28 0a 32 0a 3c 0a 46 14 20 5f ......(.2.<.F. _ 21b0: 42 43 4d 01 78 68 0a 0a 60 61 70 61 5e 5e 5e 5e BCM.xh..`apa^^^^ 21c0: 2f 03 4c 50 43 42 45 43 30 5f 42 52 54 53 14 1e /.LPCBEC0_BRTS.. 21d0: 5f 42 51 43 00 77 5e 5e 5e 5e 2f 03 4c 50 43 42 _BQC.w^^^^/.LPCB 21e0: 45 43 30 5f 42 52 54 53 0a 0a 60 a4 60 5b 82 4d EC0_BRTS..`.`[.M 21f0: 08 54 56 5f 5f 14 0a 5f 41 44 52 00 a4 0b 00 02 .TV__.._ADR..... 2200: 14 41 06 5f 44 43 53 00 5e 5e 5e 5e 2e 4c 50 43 .A._DCS.^^^^.LPC 2210: 42 50 48 53 53 0a 0c 70 43 41 44 4c 60 70 43 53 BPHSS..pCADL`pCS 2220: 54 45 61 7b 60 0a 04 60 7b 61 0a 04 61 a0 08 60 TEa{`..`{a..a..` 2230: 70 01 54 56 41 41 a1 07 70 00 54 56 41 41 a0 13 p.TVAA..p.TVAA.. 2240: 54 56 41 41 a0 08 93 61 0a 04 a4 0a 1f a1 04 a4 TVAA...a........ 2250: 0a 1d a1 0f a0 08 93 61 0a 04 a4 0a 0f a1 04 a4 .......a........ 2260: 0a 0d 14 12 5f 44 47 53 00 a0 07 54 56 41 41 a4 ...._DGS...TVAA. 2270: 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 49 10 44 ......._DSS..I.D 2280: 53 53 57 00 a0 4a 0e 93 53 57 49 54 00 5e 5e 5e SSW..J..SWIT.^^^ 2290: 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 41 44 4c .LPCBPHSS..pCADL 22a0: 60 70 43 53 54 45 61 a0 16 94 61 01 7b 60 61 56 `pCSTEa...a.{`aV 22b0: 4c 44 46 7b 56 4c 44 46 0a fe 56 4c 44 46 a0 43 LDF{VLDF..VLDF.C 22c0: 0a 56 4c 44 46 a0 27 93 60 0a 09 a0 0b 93 61 0a .VLDF.'.`.....a. 22d0: 08 53 54 42 4c 0a 02 a0 0a 93 61 01 53 54 42 4c .STBL.....a.STBL 22e0: 0a 03 a0 0a 93 61 0a 09 53 54 42 4c 01 a0 28 93 .....a..STBL..(. 22f0: 60 0a 0a a0 0b 93 61 0a 08 53 54 42 4c 0a 05 a0 `.....a..STBL... 2300: 0a 93 61 0a 02 53 54 42 4c 01 a0 0b 93 61 0a 0a ..a..STBL....a.. 2310: 53 54 42 4c 0a 04 a0 4b 04 93 60 0a 0b a0 0b 93 STBL...K..`..... 2320: 61 0a 08 53 54 42 4c 0a 02 a0 0b 93 61 0a 09 53 a..STBL.....a..S 2330: 54 42 4c 0a 05 a0 0a 93 61 01 53 54 42 4c 0a 03 TBL.....a.STBL.. 2340: a0 0b 93 61 0a 0a 53 54 42 4c 0a 04 a0 0a 93 61 ...a..STBL.....a 2350: 0a 02 53 54 42 4c 01 a0 0a 93 61 0a 0b 53 54 42 ..STBL....a..STB 2360: 4c 01 a1 0c 70 01 56 4c 44 46 53 54 42 4c 01 a1 L...p.VLDFSTBL.. 2370: 16 a0 14 93 53 57 49 54 01 5e 5e 5e 2e 4c 50 43 ....SWIT.^^^.LPC 2380: 42 50 48 53 53 01 14 45 0b 53 54 42 4c 01 a0 16 BPHSS..E.STBL... 2390: 93 68 01 70 00 43 52 54 41 70 01 4c 43 44 41 70 .h.p.CRTAp.LCDAp 23a0: 00 54 56 41 41 a0 17 93 68 0a 02 70 01 43 52 54 .TVAA...h..p.CRT 23b0: 41 70 00 4c 43 44 41 70 00 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23c0: 68 0a 03 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 23d0: 00 54 56 41 41 a0 17 93 68 0a 04 70 00 43 52 54 .TVAA...h..p.CRT 23e0: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23f0: 68 0a 05 70 00 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2400: 01 54 56 41 41 a0 17 93 68 0a 06 70 01 43 52 54 .TVAA...h..p.CRT 2410: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 2420: 68 0a 07 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2430: 01 54 56 41 41 86 56 47 41 5f 0a 80 5b 82 42 f8 .TVAA.VGA_..[.B. 2440: 47 46 58 30 08 5f 41 44 52 0c 00 00 02 00 14 10 GFX0._ADR....... 2450: 5f 44 4f 53 01 70 7b 68 0a 07 00 44 53 45 4e 14 _DOS.p{h...DSEN. 2460: 41 26 5f 44 4f 44 00 70 00 4e 44 49 44 a0 15 92 A&_DOD.p.NDID... 2470: 93 44 49 44 4c 00 70 53 44 44 4c 44 49 44 31 44 .DIDL.pSDDLDID1D 2480: 49 44 31 a0 15 92 93 44 44 4c 32 00 70 53 44 44 ID1....DDL2.pSDD 2490: 4c 44 49 44 32 44 49 44 32 a0 15 92 93 44 44 4c LDID2DID2....DDL 24a0: 33 00 70 53 44 44 4c 44 49 44 33 44 49 44 33 a0 3.pSDDLDID3DID3. 24b0: 15 92 93 44 44 4c 34 00 70 53 44 44 4c 44 49 44 ...DDL4.pSDDLDID 24c0: 34 44 49 44 34 a0 15 92 93 44 44 4c 35 00 70 53 4DID4....DDL5.pS 24d0: 44 44 4c 44 49 44 35 44 49 44 35 a0 2c 93 4e 44 DDLDID5DID5.,.ND 24e0: 49 44 01 08 54 4d 50 31 12 07 01 0c ff ff ff ff ID..TMP1........ 24f0: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2500: 31 00 00 a4 54 4d 50 31 a0 46 04 93 4e 44 49 44 1...TMP1.F..NDID 2510: 0a 02 08 54 4d 50 32 12 0c 02 0c ff ff ff ff 0c ...TMP2......... 2520: ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 ....p}.....DID1. 2530: 88 54 4d 50 32 00 00 70 7d 0c 00 00 01 00 44 49 .TMP2..p}.....DI 2540: 44 32 00 88 54 4d 50 32 01 00 a4 54 4d 50 32 a0 D2..TMP2...TMP2. 2550: 4f 05 93 4e 44 49 44 0a 03 08 54 4d 50 33 12 11 O..NDID...TMP3.. 2560: 03 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 2570: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2580: 33 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 3..p}.....DID2.. 2590: 54 4d 50 33 01 00 70 7d 0c 00 00 01 00 44 49 44 TMP3..p}.....DID 25a0: 33 00 88 54 4d 50 33 0a 02 00 a4 54 4d 50 33 a0 3..TMP3....TMP3. 25b0: 48 07 93 4e 44 49 44 0a 04 08 54 4d 50 34 12 16 H..NDID...TMP4.. 25c0: 04 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 25d0: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 25e0: 00 88 54 4d 50 34 00 00 70 7d 0c 00 00 01 00 44 ..TMP4..p}.....D 25f0: 49 44 32 00 88 54 4d 50 34 01 00 70 7d 0c 00 00 ID2..TMP4..p}... 2600: 01 00 44 49 44 33 00 88 54 4d 50 34 0a 02 00 70 ..DID3..TMP4...p 2610: 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d 50 34 }.....DID4..TMP4 2620: 0a 03 00 a4 54 4d 50 34 a0 41 09 94 4e 44 49 44 ....TMP4.A..NDID 2630: 0a 04 08 54 4d 50 35 12 1b 05 0c ff ff ff ff 0c ...TMP5......... 2640: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 2650: ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 88 ...p}.....DID1.. 2660: 54 4d 50 35 00 00 70 7d 0c 00 00 01 00 44 49 44 TMP5..p}.....DID 2670: 32 00 88 54 4d 50 35 01 00 70 7d 0c 00 00 01 00 2..TMP5..p}..... 2680: 44 49 44 33 00 88 54 4d 50 35 0a 02 00 70 7d 0c DID3..TMP5...p}. 2690: 00 00 01 00 44 49 44 34 00 88 54 4d 50 35 0a 03 ....DID4..TMP5.. 26a0: 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d .p}.....DID4..TM 26b0: 50 35 0a 04 00 a4 54 4d 50 35 a4 12 05 01 0b 00 P5....TMP5...... 26c0: 04 5b 82 43 06 44 44 30 31 14 1c 5f 41 44 52 08 .[.C.DD01.._ADR. 26d0: a0 09 93 44 49 44 31 00 a4 01 a1 0b a4 7b 0b ff ...DID1......{.. 26e0: ff 44 49 44 31 00 14 0f 5f 44 43 53 00 a4 43 44 .DID1..._DCS..CD 26f0: 44 53 44 49 44 31 14 0f 5f 44 47 53 00 a4 4e 44 DSDID1.._DGS..ND 2700: 44 53 44 49 44 31 14 1f 5f 44 53 53 01 a0 18 93 DSDID1.._DSS.... 2710: 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 {h...........pNS 2720: 54 45 43 53 54 45 5b 82 44 06 44 44 30 32 14 1d TECSTE[.D.DD02.. 2730: 5f 41 44 52 08 a0 0a 93 44 49 44 32 00 a4 0a 02 _ADR....DID2.... 2740: a1 0b a4 7b 0b ff ff 44 49 44 32 00 14 0f 5f 44 ...{...DID2..._D 2750: 43 53 00 a4 43 44 44 53 44 49 44 32 14 0f 5f 44 CS..CDDSDID2.._D 2760: 47 53 00 a4 4e 44 44 53 44 49 44 32 14 1f 5f 44 GS..NDDSDID2.._D 2770: 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 SS....{h........ 2780: 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 41 07 ...pNSTECSTE[.A. 2790: 44 44 30 33 14 1d 5f 41 44 52 08 a0 0a 93 44 49 DD03.._ADR....DI 27a0: 44 33 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 49 44 D3.......{...DID 27b0: 33 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 33 3..._DCS....DID3 27c0: 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 33 14 .......CDDSDID3. 27d0: 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 44 33 14 ._DGS..NDDSDID3. 27e0: 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 ._DSS....{h..... 27f0: 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 5b ......pNSTECSTE[ 2800: 82 41 07 44 44 30 34 14 1d 5f 41 44 52 08 a0 0a .A.DD04.._ADR... 2810: 93 44 49 44 34 00 a4 0a 04 a1 0b a4 7b 0b ff ff .DID4.......{... 2820: 44 49 44 34 00 14 1c 5f 44 43 53 00 a0 0a 93 44 DID4..._DCS....D 2830: 49 44 34 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 ID4.......CDDSDI 2840: 44 34 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 D4.._DGS..NDDSDI 2850: 44 34 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 D4.._DSS....{h.. 2860: 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 .........pNSTECS 2870: 54 45 5b 82 41 07 44 44 30 35 14 1d 5f 41 44 52 TE[.A.DD05.._ADR 2880: 08 a0 0a 93 44 49 44 35 00 a4 0a 05 a1 0b a4 7b ....DID5.......{ 2890: 0b ff ff 44 49 44 35 00 14 1c 5f 44 43 53 00 a0 ...DID5..._DCS.. 28a0: 0a 93 44 49 44 35 00 a4 0a 0b a1 0a a4 43 44 44 ..DID5.......CDD 28b0: 53 44 49 44 35 14 0f 5f 44 47 53 00 a4 4e 44 44 SDID5.._DGS..NDD 28c0: 53 44 49 44 35 14 1f 5f 44 53 53 01 a0 18 93 7b SDID5.._DSS....{ 28d0: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 28e0: 45 43 53 54 45 14 4e 06 53 44 44 4c 01 75 4e 44 ECSTE.N.SDDL.uND 28f0: 49 44 70 7b 68 0b 0f 0f 00 60 7d 0c 00 00 00 80 IDp{h....`}..... 2900: 60 61 a0 09 93 44 49 44 4c 60 a4 61 a0 09 93 44 `a...DIDL`.a...D 2910: 44 4c 32 60 a4 61 a0 09 93 44 44 4c 33 60 a4 61 DL2`.a...DDL3`.a 2920: a0 09 93 44 44 4c 34 60 a4 61 a0 09 93 44 44 4c ...DDL4`.a...DDL 2930: 35 60 a4 61 a0 09 93 44 44 4c 36 60 a4 61 a0 09 5`.a...DDL6`.a.. 2940: 93 44 44 4c 37 60 a4 61 a0 09 93 44 44 4c 38 60 .DDL7`.a...DDL8` 2950: a4 61 a4 00 14 4a 08 43 44 44 53 01 a0 0f 93 43 .a...J.CDDS....C 2960: 41 44 4c 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 ADL{h..........C 2970: 41 4c 32 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL2{h..........C 2980: 41 4c 33 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL3{h..........C 2990: 41 4c 34 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL4{h..........C 29a0: 41 4c 35 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL5{h..........C 29b0: 41 4c 36 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL6{h..........C 29c0: 41 4c 37 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL7{h..........C 29d0: 41 4c 38 7b 68 0b 0f 0f 00 a4 0a 1f a4 0a 1d 14 AL8{h........... 29e0: 41 08 4e 44 44 53 01 a0 0e 93 4e 41 44 4c 7b 68 A.NDDS....NADL{h 29f0: 0b 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 32 7b 68 0b .........NDL2{h. 2a00: 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 33 7b 68 0b 0f ........NDL3{h.. 2a10: 0f 00 a4 01 a0 0e 93 4e 44 4c 34 7b 68 0b 0f 0f .......NDL4{h... 2a20: 00 a4 01 a0 0e 93 4e 44 4c 35 7b 68 0b 0f 0f 00 ......NDL5{h.... 2a30: a4 01 a0 0e 93 4e 44 4c 36 7b 68 0b 0f 0f 00 a4 .....NDL6{h..... 2a40: 01 a0 0e 93 4e 44 4c 37 7b 68 0b 0f 0f 00 a4 01 ....NDL7{h...... 2a50: a0 0e 93 4e 44 4c 38 7b 68 0b 0f 0f 00 a4 01 a4 ...NDL8{h....... 2a60: 00 14 40 07 42 52 54 4e 09 a0 14 93 7b 44 49 44 ..@.BRTN....{DID 2a70: 31 0b 00 0f 00 0b 00 04 86 44 44 30 31 68 a0 14 1........DD01h.. 2a80: 93 7b 44 49 44 32 0b 00 0f 00 0b 00 04 86 44 44 .{DID2........DD 2a90: 30 32 68 a0 14 93 7b 44 49 44 33 0b 00 0f 00 0b 02h...{DID3..... 2aa0: 00 04 86 44 44 30 33 68 a0 14 93 7b 44 49 44 34 ...DD03h...{DID4 2ab0: 0b 00 0f 00 0b 00 04 86 44 44 30 34 68 a0 14 93 ........DD04h... 2ac0: 7b 44 49 44 35 0b 00 0f 00 0b 00 04 86 44 44 30 {DID5........DD0 2ad0: 35 68 10 24 5e 5e 50 43 49 30 5b 80 4d 43 48 50 5h.$^^PCI0[.MCHP 2ae0: 02 0a 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 ..@..[..MCHP..@0 2af0: 54 41 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 TASM...[.IGDP..@ 2b00: 0a c0 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 ..[.E.IGDP..@... 2b10: 47 49 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 GIVD...GUMA..... 2b20: 47 4d 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 GMFN....@FASLE.. 2b30: 18 47 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 .GSSE.GSSB.GSES. 2b40: 00 30 00 08 43 44 56 4c 05 00 03 00 18 4c 42 50 .0..CDVL.....LBP 2b50: 43 08 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 C..0ASLS [.IGDM. 2b60: 41 53 4c 42 0b 00 20 5b 81 4e 16 49 47 44 4d 00 ASLB.. [.N.IGDM. 2b70: 53 49 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 SIGN@.SIZE OVER 2b80: 53 56 45 52 40 10 56 56 45 52 40 08 47 56 45 52 SVER@.VVER@.GVER 2b90: 40 08 4d 42 4f 58 20 00 40 52 44 52 44 59 20 43 @.MBOX .@RDRDY C 2ba0: 53 54 53 20 43 45 56 54 20 00 40 0a 44 49 44 4c STS CEVT .@.DIDL 2bb0: 20 44 44 4c 32 20 44 44 4c 33 20 44 44 4c 34 20 DDL2 DDL3 DDL4 2bc0: 44 44 4c 35 20 44 44 4c 36 20 44 44 4c 37 20 44 DDL5 DDL6 DDL7 D 2bd0: 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 20 43 50 DL8 CPDL CPL2 CP 2be0: 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 43 50 4c L3 CPL4 CPL5 CPL 2bf0: 36 20 43 50 4c 37 20 43 50 4c 38 20 43 41 44 4c 6 CPL7 CPL8 CADL 2c00: 20 43 41 4c 32 20 43 41 4c 33 20 43 41 4c 34 20 CAL2 CAL3 CAL4 2c10: 43 41 4c 35 20 43 41 4c 36 20 43 41 4c 37 20 43 CAL5 CAL6 CAL7 C 2c20: 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 20 4e 44 AL8 NADL NDL2 ND 2c30: 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 4e 44 4c L3 NDL4 NDL5 NDL 2c40: 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 53 4c 50 6 NDL7 NDL8 ASLP 2c50: 20 54 49 44 58 20 43 48 50 44 20 43 4c 49 44 20 TIDX CHPD CLID 2c60: 43 44 43 4b 20 53 58 53 57 20 45 56 54 53 20 43 CDCK SXSW EVTS C 2c70: 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 43 49 45 NOT NRDY .@.SCIE 2c80: 01 47 45 46 43 04 47 58 46 43 03 47 45 53 46 08 .GEFC.GXFC.GESF. 2c90: 00 10 50 41 52 4d 20 44 53 4c 50 20 00 40 7a 41 ..PARM DSLP .@zA 2ca0: 52 44 59 20 41 53 4c 43 20 54 43 48 45 20 41 4c RDY ASLC TCHE AL 2cb0: 53 49 20 42 43 4c 50 20 50 46 49 54 20 43 42 4c SI BCLP PFIT CBL 2cc0: 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 00 40 5c V BCLM@.CPFM .@\ 2cd0: 47 56 44 31 80 00 0e 08 44 42 54 42 12 32 15 00 GVD1....DBTB.2.. 2ce0: 0a 07 0a 38 0b c0 01 0b 00 0e 0a 3f 0b c7 01 0b ...8.......?.... 2cf0: 07 0e 0b f8 01 0b 38 0e 0b c0 0f 00 00 00 00 00 ......8......... 2d00: 0b 00 70 0b 07 70 0b 38 70 0b c0 71 0b 00 7e 08 ..p..p.8p..q..~. 2d10: 43 44 43 54 12 23 03 12 0a 03 0a c8 0b 40 01 0b CDCT.#.......@.. 2d20: 90 01 12 0a 03 0a c8 0b 4d 01 0b 90 01 12 0a 03 ........M....... 2d30: 0a de 0b 4d 01 0b 7d 01 08 53 55 43 43 01 08 4e ...M..}..SUCC..N 2d40: 56 4c 44 0a 02 08 43 52 49 54 0a 04 08 4e 43 52 VLD...CRIT...NCR 2d50: 54 0a 06 14 4c 4a 47 53 43 49 08 14 44 1e 47 42 T...LJGSCI..D.GB 2d60: 44 41 08 a0 1a 93 47 45 53 46 00 70 0b 79 02 50 DA....GESF.p.y.P 2d70: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 1a ARMp.GESF.SUCC.. 2d80: 93 47 45 53 46 01 70 0b 40 02 50 41 52 4d 70 00 .GESF.p.@.PARMp. 2d90: 47 45 53 46 a4 53 55 43 43 a0 47 04 93 47 45 53 GESF.SUCC.G..GES 2da0: 46 0a 04 7b 50 41 52 4d 0c 00 00 ff ef 50 41 52 F..{PARM.....PAR 2db0: 4d 7b 50 41 52 4d 79 83 88 44 42 54 42 49 42 54 M{PARMy..DBTBIBT 2dc0: 54 00 0a 10 00 50 41 52 4d 7d 49 42 54 54 50 41 T....PARM}IBTTPA 2dd0: 52 4d 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 RMPARMp.GESF.SUC 2de0: 43 a0 4a 06 93 47 45 53 46 0a 05 70 49 50 53 43 C.J..GESF..pIPSC 2df0: 50 41 52 4d 7d 50 41 52 4d 79 49 50 41 54 0a 08 PARM}PARMyIPAT.. 2e00: 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 41 52 .PARMrPARM...PAR 2e10: 4d 7d 50 41 52 4d 79 4c 49 44 53 0a 10 00 50 41 M}PARMyLIDS...PA 2e20: 52 4d 72 50 41 52 4d 0c 00 00 01 00 50 41 52 4d RMrPARM.....PARM 2e30: 7d 50 41 52 4d 79 49 42 49 41 0a 14 00 50 41 52 }PARMyIBIA...PAR 2e40: 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 2d 93 47 Mp.GESF.SUCC.-.G 2e50: 45 53 46 0a 06 70 49 54 56 46 50 41 52 4d 7d 50 ESF..pITVFPARM}P 2e60: 41 52 4d 79 49 54 56 4d 0a 04 00 50 41 52 4d 70 ARMyITVM...PARMp 2e70: 00 47 45 53 46 a4 53 55 43 43 a0 4f 08 93 47 45 .GESF.SUCC.O..GE 2e80: 53 46 0a 07 70 47 49 56 44 50 41 52 4d 7f 50 41 SF..pGIVDPARM.PA 2e90: 52 4d 01 50 41 52 4d 7d 50 41 52 4d 79 47 4d 46 RM.PARM}PARMyGMF 2ea0: 4e 01 00 50 41 52 4d 7d 50 41 52 4d 0b 00 10 50 N..PARM}PARM...P 2eb0: 41 52 4d a0 16 49 44 4d 4d 7d 50 41 52 4d 79 49 ARM..IDMM}PARMyI 2ec0: 44 4d 53 0a 11 00 50 41 52 4d a1 12 7d 50 41 52 DMS...PARM..}PAR 2ed0: 4d 79 49 44 4d 53 0a 0d 00 50 41 52 4d 7d 79 83 MyIDMS...PARM}y. 2ee0: 88 83 88 43 44 43 54 48 56 43 4f 00 74 43 44 56 ...CDCTHVCO.tCDV 2ef0: 4c 01 00 00 0a 15 00 50 41 52 4d 50 41 52 4d 70 L......PARMPARMp 2f00: 01 47 45 53 46 a4 53 55 43 43 a0 2a 93 47 45 53 .GESF.SUCC.*.GES 2f10: 46 0a 0a 70 00 50 41 52 4d a0 10 49 53 53 43 7d F..p.PARM..ISSC} 2f20: 50 41 52 4d 0a 03 50 41 52 4d 70 00 47 45 53 46 PARM..PARMp.GESF 2f30: a4 53 55 43 43 70 00 47 45 53 46 a4 43 52 49 54 .SUCCp.GESF.CRIT 2f40: 14 41 28 53 42 43 42 08 a0 20 93 47 45 53 46 00 .A(SBCB.. .GESF. 2f50: 70 00 50 41 52 4d 70 0b 7d f7 50 41 52 4d 70 00 p.PARMp.}.PARMp. 2f60: 47 45 53 46 a4 53 55 43 43 a0 18 93 47 45 53 46 GESF.SUCC...GESF 2f70: 01 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 2f80: 43 43 a0 19 93 47 45 53 46 0a 03 70 00 47 45 53 CC...GESF..p.GES 2f90: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 Fp.PARM.SUCC...G 2fa0: 45 53 46 0a 04 70 00 47 45 53 46 70 00 50 41 52 ESF..p.GESFp.PAR 2fb0: 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 05 70 M.SUCC...GESF..p 2fc0: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 2fd0: a0 37 93 47 45 53 46 0a 06 70 7b 50 41 52 4d 0a .7.GESF..p{PARM. 2fe0: 0f 00 49 54 56 46 70 7a 7b 50 41 52 4d 0a f0 00 ..ITVFpz{PARM... 2ff0: 0a 04 00 49 54 56 4d 70 00 47 45 53 46 70 00 50 ...ITVMp.GESFp.P 3000: 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a ARM.SUCC...GESF. 3010: 07 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 3020: 43 43 a0 19 93 47 45 53 46 0a 08 70 00 47 45 53 CC...GESF..p.GES 3030: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 24 93 47 Fp.PARM.SUCC.$.G 3040: 45 53 46 0a 09 7b 50 41 52 4d 0a ff 49 42 54 54 ESF..{PARM..IBTT 3050: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 3060: 43 a0 46 05 93 47 45 53 46 0a 0a 7b 50 41 52 4d C.F..GESF..{PARM 3070: 0a ff 49 50 53 43 a0 21 7b 7a 50 41 52 4d 0a 08 ..IPSC.!{zPARM.. 3080: 00 0a ff 00 7b 7a 50 41 52 4d 0a 08 00 0a ff 49 ....{zPARM.....I 3090: 50 41 54 76 49 50 41 54 7b 7a 50 41 52 4d 0a 14 PATvIPAT{zPARM.. 30a0: 00 0a 07 49 42 49 41 70 00 47 45 53 46 70 00 50 ...IBIAp.GESFp.P 30b0: 41 52 4d a4 53 55 43 43 a0 40 06 93 47 45 53 46 ARM.SUCC.@..GESF 30c0: 0a 0b 7b 7a 50 41 52 4d 01 00 01 49 46 31 45 a0 ..{zPARM...IF1E. 30d0: 21 7b 50 41 52 4d 0c 00 e0 01 00 00 7b 7a 50 41 !{PARM......{zPA 30e0: 52 4d 0a 0d 00 0a 0f 49 44 4d 53 70 00 49 44 4d RM.....IDMSp.IDM 30f0: 4d a1 16 7b 7a 50 41 52 4d 0a 11 00 0a 0f 49 44 M..{zPARM.....ID 3100: 4d 53 70 01 49 44 4d 4d 70 00 47 45 53 46 70 00 MSp.IDMMp.GESFp. 3110: 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 PARM.SUCC...GESF 3120: 0a 10 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 ..p.GESFp.PARM.S 3130: 55 43 43 a0 1f 93 47 45 53 46 0a 11 7d 50 41 52 UCC...GESF..}PAR 3140: 4d 0b 00 01 50 41 52 4d 70 00 47 45 53 46 a4 53 M...PARMp.GESF.S 3150: 55 43 43 a0 49 04 93 47 45 53 46 0a 12 a0 26 7b UCC.I..GESF...&{ 3160: 50 41 52 4d 01 00 a0 10 93 7a 50 41 52 4d 01 00 PARM.....zPARM.. 3170: 01 70 01 49 53 53 43 a1 0c 70 00 47 45 53 46 a4 .p.ISSC..p.GESF. 3180: 43 52 49 54 a1 07 70 00 49 53 53 43 70 00 47 45 CRIT..p.ISSCp.GE 3190: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 SFp.PARM.SUCC... 31a0: 47 45 53 46 0a 13 70 00 47 45 53 46 70 00 50 41 GESF..p.GESFp.PA 31b0: 52 4d a4 53 55 43 43 70 00 47 45 53 46 a4 53 55 RM.SUCCp.GESF.SU 31c0: 43 43 a0 11 93 47 45 46 43 0a 04 70 47 42 44 41 CC...GEFC..pGBDA 31d0: 47 58 46 43 a0 11 93 47 45 46 43 0a 06 70 53 42 GXFC...GEFC..pSB 31e0: 43 42 47 58 46 43 70 00 47 45 46 43 70 01 53 43 CBGXFCp.GEFCp.SC 31f0: 49 53 70 00 47 53 53 45 70 00 53 43 49 45 a4 00 ISp.GSSEp.SCIE.. 3200: 14 19 50 44 52 44 00 a0 0c 92 44 52 44 59 5b 22 ..PDRD....DRDY[" 3210: 41 53 4c 50 a4 92 44 52 44 59 14 1d 50 53 54 53 ASLP..DRDY..PSTS 3220: 00 a0 0e 94 43 53 54 53 0a 02 5b 22 41 53 4c 50 ....CSTS..["ASLP 3230: a4 93 43 53 54 53 0a 03 14 47 06 47 4e 4f 54 02 ..CSTS...G.GNOT. 3240: a0 07 50 44 52 44 a4 01 a0 07 50 53 54 53 a4 01 ..PDRD....PSTS.. 3250: 70 68 43 45 56 54 70 0a 03 43 53 54 53 a0 2c 90 phCEVTp..CSTS.,. 3260: 93 43 48 50 44 00 93 69 00 a0 18 91 94 4f 53 59 .CHPD..i.....OSY 3270: 53 0b d0 07 95 4f 53 59 53 0b d6 07 86 50 43 49 S....OSYS....PCI 3280: 30 69 a1 07 86 47 46 58 30 69 86 47 46 58 30 0a 0i...GFX0i.GFX0. 3290: 80 a0 0c 92 50 53 54 53 70 00 43 45 56 54 a4 00 ....PSTSp.CEVT.. 32a0: 14 13 47 48 44 53 01 70 68 54 49 44 58 a4 47 4e ..GHDS.phTIDX.GN 32b0: 4f 54 01 00 14 14 47 4c 49 44 01 70 68 43 4c 49 OT....GLID.phCLI 32c0: 44 a4 47 4e 4f 54 0a 02 00 14 15 47 44 43 4b 01 D.GNOT.....GDCK. 32d0: 70 68 43 44 43 4b a4 47 4e 4f 54 0a 04 0a 80 14 phCDCK.GNOT..... 32e0: 19 50 41 52 44 00 a0 0c 92 41 52 44 59 5b 22 41 .PARD....ARDY["A 32f0: 53 4c 50 a4 92 41 52 44 59 14 46 0c 41 49 4e 54 SLP..ARDY.F.AINT 3300: 02 a0 0e 92 7b 54 43 48 45 79 01 68 00 00 a4 01 ....{TCHEy.h.... 3310: a0 07 50 41 52 44 a4 01 a0 4c 05 93 68 0a 02 a0 ..PARD...L..h... 3320: 33 43 50 46 4d a0 0e 93 43 50 46 4d 01 70 0a 06 3CPFM...CPFM.p.. 3330: 50 46 49 54 a0 0f 93 43 50 46 4d 0a 06 70 0a 08 PFIT...CPFM..p.. 3340: 50 46 49 54 a0 0e 93 43 50 46 4d 0a 08 70 01 50 PFIT...CPFM..p.P 3350: 46 49 54 a1 0c 7f 50 46 49 54 0a 07 50 46 49 54 FIT...PFIT..PFIT 3360: 7d 50 46 49 54 0c 00 00 00 80 50 46 49 54 70 0a }PFIT.....PFITp. 3370: 04 41 53 4c 43 a1 42 04 a0 28 93 68 01 70 78 77 .ASLC.B..(.h.pxw 3380: 69 0a ff 00 0a 64 00 00 42 43 4c 50 7d 42 43 4c i....d..BCLP}BCL 3390: 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 41 53 4c P.....BCLPp..ASL 33a0: 43 a1 16 a0 10 93 68 00 70 69 41 4c 53 49 70 01 C.....h.piALSIp. 33b0: 41 53 4c 43 a1 03 a4 01 70 00 4c 42 50 43 a4 00 ASLC....p.LBPC.. 33c0: 10 41 36 5c 00 5b 80 49 4f 5f 54 01 0b 00 08 0a .A6\.[.IO_T..... 33d0: 10 5b 81 0e 49 4f 5f 54 01 00 40 04 54 52 50 30 .[..IO_T..@.TRP0 33e0: 08 5b 80 50 4d 49 4f 01 0b 00 10 0a 80 5b 81 28 .[.PMIO......[.( 33f0: 50 4d 49 4f 01 00 40 15 00 08 00 02 41 43 50 57 PMIO..@.....ACPW 3400: 01 00 45 0b 00 01 47 50 45 43 01 00 4e 10 00 09 ..E...GPEC..N... 3410: 53 43 49 53 01 00 06 5b 80 47 50 49 4f 01 0b 80 SCIS...[.GPIO... 3420: 11 0a 3c 5b 81 40 0c 47 50 49 4f 01 47 55 30 30 ..<[.@.GPIO.GU00 3430: 08 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 .GU01.GU02.GU03. 3440: 47 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 GIO0.GIO1.GIO2.G 3450: 49 4f 33 08 00 20 47 4c 30 30 08 47 4c 30 31 08 IO3.. GL00.GL01. 3460: 47 4c 30 32 08 00 03 47 50 32 37 01 47 50 32 38 GL02...GP27.GP28 3470: 01 00 03 00 40 04 47 42 30 30 08 47 42 30 31 08 ....@.GB00.GB01. 3480: 47 42 30 32 08 47 42 30 33 08 00 40 08 47 49 56 GB02.GB03..@.GIV 3490: 30 08 00 03 4c 50 4f 4c 01 00 04 47 49 56 32 08 0...LPOL...GIV2. 34a0: 47 49 56 33 08 47 55 30 34 08 47 55 30 35 08 47 GIV3.GU04.GU05.G 34b0: 55 30 36 08 47 55 30 37 08 47 49 4f 34 08 47 49 U06.GU07.GIO4.GI 34c0: 4f 35 08 47 49 4f 36 08 47 49 4f 37 08 00 05 47 O5.GIO6.GIO7...G 34d0: 50 33 37 01 00 02 47 4c 30 35 08 47 4c 30 36 08 P37...GL05.GL06. 34e0: 47 4c 30 37 08 5b 80 52 43 52 42 00 0c 00 c0 d1 GL07.[.RCRB..... 34f0: fe 0b 00 40 5b 81 48 05 52 43 52 42 13 00 80 00 ...@[.H.RCRB.... 3500: 08 00 80 00 10 00 80 02 02 48 50 41 53 02 00 05 .........HPAS... 3510: 48 50 41 45 01 00 48 09 00 01 50 41 54 44 01 53 HPAE..H...PATD.S 3520: 41 54 44 01 53 4d 42 44 01 48 44 41 44 01 00 0b ATD.SMBD.HDAD... 3530: 52 50 31 44 01 52 50 32 44 01 52 50 33 44 01 52 RP1D.RP2D.RP3D.R 3540: 50 34 44 01 52 50 35 44 01 52 50 36 44 01 08 5f P4D.RP5D.RP6D.._ 3550: 53 30 5f 12 05 03 00 00 00 08 5f 53 33 5f 12 07 S0_......._S3_.. 3560: 03 0a 05 0a 05 00 08 5f 53 34 5f 12 07 03 0a 06 ......._S4_..... 3570: 0a 06 00 08 5f 53 35 5f 12 07 03 0a 07 0a 07 00 ...._S5_........ 3580: 14 45 04 47 45 54 50 09 a0 0e 93 7b 68 0a 09 00 .E.GETP....{h... 3590: 00 a4 0c ff ff ff ff a0 0d 93 7b 68 0a 09 00 0a ..........{h.... 35a0: 08 a4 0b 84 03 7a 7b 68 0b 00 03 00 0a 08 60 7a .....z{h......`z 35b0: 7b 68 0b 00 30 00 0a 0c 61 a4 77 0a 1e 74 0a 09 {h..0...a.w..t.. 35c0: 72 60 61 00 00 00 14 30 47 44 4d 41 0d a0 23 68 r`a....0GDMA..#h 35d0: a0 07 90 69 6c a4 0a 14 a0 0e 90 6a 6c a4 77 74 ...il......jl.wt 35e0: 0a 04 6b 00 0a 0f 00 a4 77 74 0a 04 6b 00 0a 1e ..k.....wt..k... 35f0: 00 a4 0c ff ff ff ff 14 1f 47 45 54 54 09 a4 77 .........GETT..w 3600: 0a 1e 74 0a 09 72 7b 7a 68 0a 02 00 0a 03 00 7b ..t..r{zh......{ 3610: 68 0a 03 00 00 00 00 14 44 06 47 45 54 46 0b 08 h.......D.GETF.. 3620: 54 4d 50 46 00 a0 0c 68 7d 54 4d 50 46 01 54 4d TMPF...h}TMPF.TM 3630: 50 46 a0 11 7b 6a 0a 02 00 7d 54 4d 50 46 0a 02 PF..{j...}TMPF.. 3640: 54 4d 50 46 a0 0d 69 7d 54 4d 50 46 0a 04 54 4d TMPF..i}TMPF..TM 3650: 50 46 a0 11 7b 6a 0a 20 00 7d 54 4d 50 46 0a 08 PF..{j. .}TMPF.. 3660: 54 4d 50 46 a0 12 7b 6a 0b 00 40 00 7d 54 4d 50 TMPF..{j..@.}TMP 3670: 46 0a 10 54 4d 50 46 a4 54 4d 50 46 14 3d 53 45 F..TMPF.TMPF.=SE 3680: 54 50 0b a0 08 94 68 0a f0 a4 0a 08 a1 2d a0 27 TP....h......-.' 3690: 7b 69 0a 02 00 a0 10 90 92 94 68 0a 78 7b 6a 0a {i........h.x{j. 36a0: 02 00 a4 0b 01 23 a0 0f 90 92 94 68 0a b4 7b 6a .....#.....h..{j 36b0: 01 00 a4 0b 01 21 a4 0b 01 10 14 37 53 44 4d 41 .....!.....7SDMA 36c0: 09 a0 08 92 94 68 0a 14 a4 01 a0 09 92 94 68 0a .....h........h. 36d0: 1e a4 0a 02 a0 08 92 94 68 0a 2d a4 01 a0 09 92 ........h.-..... 36e0: 94 68 0a 3c a4 0a 02 a0 08 92 94 68 0a 5a a4 01 .h.<.......h.Z.. 36f0: a4 00 14 2f 53 45 54 54 0b a0 25 7b 69 0a 02 00 .../SETT..%{i... 3700: a0 0f 90 92 94 68 0a 78 7b 6a 0a 02 00 a4 0a 0b .....h.x{j...... 3710: a0 0e 90 92 94 68 0a b4 7b 6a 01 00 a4 0a 09 a4 .....h..{j...... 3720: 0a 04 5b 82 4b 04 48 44 45 46 08 5f 41 44 52 0c ..[.K.HDEF._ADR. 3730: 00 00 1b 00 5b 80 48 44 41 52 02 0a 4c 0a 10 5b ....[.HDAR..L..[ 3740: 81 22 48 44 41 52 02 44 43 4b 41 01 00 07 44 43 ."HDAR.DCKA...DC 3750: 4b 4d 01 00 06 44 43 4b 53 01 00 30 00 0f 50 4d KM...DCKS..0..PM 3760: 45 53 01 08 5f 50 52 57 12 06 02 0a 0d 0a 03 5b ES.._PRW.......[ 3770: 82 41 10 52 50 30 31 08 5f 41 44 52 0c 00 00 1c .A.RP01._ADR.... 3780: 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 45 04 .[.PXCS..@..[.E. 3790: 50 58 43 53 40 00 40 09 00 0d 4c 41 53 58 01 00 PXCS@.@...LASX.. 37a0: 32 41 42 50 58 01 00 02 50 44 43 58 01 00 02 50 2ABPX...PDCX...P 37b0: 44 53 58 01 00 01 4c 53 43 58 01 00 27 00 10 50 DSX...LSCX..'..P 37c0: 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 01 50 4d SPX..O<..HPSX.PM 37d0: 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 44 52 00 SX.[..PXSX._ADR. 37e0: 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 .A._PRT..3GPIC.. 37f0: 2c 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ,............... 3800: ff ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a ................ 3810: 12 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 .............E.. 3820: 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 .A.........^^.LP 3830: 43 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e CBLNKA........^^ 3840: 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff .LPCBLNKB....... 3850: 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 ..^^.LPCBLNKC... 3860: 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b ......^^.LPCBLNK 3870: 44 00 5b 82 41 10 52 50 30 32 08 5f 41 44 52 0c D.[.A.RP02._ADR. 3880: 01 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b ....[.PXCS..@..[ 3890: 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c 41 53 .E.PXCS@.@...LAS 38a0: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 38b0: 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 ..PDSX...LSCX..' 38c0: 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 ..PSPX..O<..HPSX 38d0: 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 .PMSX.[..PXSX._A 38e0: 44 52 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 DR..A._PRT..3GPI 38f0: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 11 12 C..,............ 3900: 09 04 0b ff ff 01 00 0a 12 12 0a 04 0b ff ff 0a ................ 3910: 02 00 0a 13 12 0a 04 0b ff ff 0a 03 00 0a 10 a1 ................ 3920: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3930: 2e 4c 50 43 42 4c 4e 4b 42 00 12 12 04 0b ff ff .LPCBLNKB....... 3940: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 3950: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 3960: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3970: 4c 4e 4b 41 00 5b 82 4d 11 52 50 30 33 08 5f 41 LNKA.[.M.RP03._A 3980: 44 52 0c 02 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3990: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 39a0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 39b0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 39c0: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 39d0: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 39e0: 08 5f 41 44 52 00 08 2e 50 58 53 58 5f 52 4d 56 ._ADR...PXSX_RMV 39f0: 01 08 2e 50 58 53 58 5f 50 52 57 12 06 02 0a 09 ...PXSX_PRW..... 3a00: 0a 03 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 ...A._PRT..3GPIC 3a10: a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 12 12 09 ..,............. 3a20: 04 0b ff ff 01 00 0a 13 12 0a 04 0b ff ff 0a 02 ................ 3a30: 00 0a 10 12 0a 04 0b ff ff 0a 03 00 0a 11 a1 45 ...............E 3a40: 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e ...A.........^^. 3a50: 4c 50 43 42 4c 4e 4b 43 00 12 12 04 0b ff ff 01 LPCBLNKC........ 3a60: 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0b ^^.LPCBLNKD..... 3a70: ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 ....^^.LPCBLNKA. 3a80: 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3a90: 4e 4b 42 00 5b 82 4f 11 52 50 30 34 08 5f 41 44 NKB.[.O.RP04._AD 3aa0: 52 0c 03 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a R.....[.PXCS..@. 3ab0: c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c .[.E.PXCS@.@...L 3ac0: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 3ad0: 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 X...PDSX...LSCX. 3ae0: 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 .'..PSPX..O<..HP 3af0: 53 58 01 50 4d 53 58 01 5b 82 29 50 58 53 58 08 SX.PMSX.[.)PXSX. 3b00: 5f 41 44 52 00 14 1d 5f 50 52 57 00 a0 0d 57 4b _ADR..._PRW...WK 3b10: 4c 4e a4 12 06 02 0a 09 0a 03 a1 08 a4 12 05 02 LN.............. 3b20: 0a 09 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 ....A._PRT..3GPI 3b30: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 C..,............ 3b40: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 3b50: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 a1 ................ 3b60: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3b70: 2e 4c 50 43 42 4c 4e 4b 44 00 12 12 04 0b ff ff .LPCBLNKD....... 3b80: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 .^^.LPCBLNKA.... 3b90: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 .....^^.LPCBLNKB 3ba0: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3bb0: 4c 4e 4b 43 00 5b 82 41 10 52 50 30 35 08 5f 41 LNKC.[.A.RP05._A 3bc0: 44 52 0c 04 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3bd0: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 3be0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 3bf0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 3c00: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 3c10: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 3c20: 08 5f 41 44 52 00 14 41 09 5f 50 52 54 00 a0 33 ._ADR..A._PRT..3 3c30: 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 GPIC..,......... 3c40: 0a 10 12 09 04 0b ff ff 01 00 0a 11 12 0a 04 0b ................ 3c50: ff ff 0a 02 00 0a 12 12 0a 04 0b ff ff 0a 03 00 ................ 3c60: 0a 13 a1 45 05 a4 12 41 05 04 12 12 04 0b ff ff ...E...A........ 3c70: 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 12 04 .^^.LPCBLNKA.... 3c80: 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3c90: 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3ca0: 4e 4b 43 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c NKC.........^^.L 3cb0: 50 43 42 4c 4e 4b 44 00 5b 82 41 10 52 50 30 36 PCBLNKD.[.A.RP06 3cc0: 08 5f 41 44 52 0c 05 00 1c 00 5b 80 50 58 43 53 ._ADR.....[.PXCS 3cd0: 02 0a 40 0a c0 5b 81 45 04 50 58 43 53 40 00 40 ..@..[.E.PXCS@.@ 3ce0: 09 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 ...LASX..2ABPX.. 3cf0: 02 50 44 43 58 01 00 02 50 44 53 58 01 00 01 4c .PDCX...PDSX...L 3d00: 53 43 58 01 00 27 00 10 50 53 50 58 01 00 4f 3c SCX..'..PSPX..O< 3d10: 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 ..HPSX.PMSX.[..P 3d20: 58 53 58 08 5f 41 44 52 00 14 41 09 5f 50 52 54 XSX._ADR..A._PRT 3d30: 00 a0 33 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ..3GPIC..,...... 3d40: ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a 12 12 ................ 3d50: 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ff ff ................ 3d60: 0a 03 00 0a 10 a1 45 05 a4 12 41 05 04 12 12 04 ......E...A..... 3d70: 0b ff ff 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3d80: 12 12 04 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 3d90: 4b 43 00 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 KC.........^^.LP 3da0: 43 42 4c 4e 4b 44 00 12 13 04 0b ff ff 0a 03 5e CBLNKD.........^ 3db0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 4d 06 55 ^.LPCBLNKA.[.M.U 3dc0: 53 42 31 08 5f 41 44 52 0c 00 00 1d 00 5b 80 55 SB1._ADR.....[.U 3dd0: 31 43 53 02 0a c4 0a 04 5b 81 0b 55 31 43 53 03 1CS.....[..U1CS. 3de0: 55 31 45 4e 02 08 5f 50 52 57 12 06 02 0a 03 0a U1EN.._PRW...... 3df0: 03 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 ..$_PSW...hp.ACP 3e00: 57 a0 0c 41 43 50 57 70 0a 03 55 31 45 4e a1 07 W..ACPWp..U1EN.. 3e10: 70 00 55 31 45 4e 14 09 5f 53 33 44 00 a4 0a 02 p.U1EN.._S3D.... 3e20: 14 09 5f 53 34 44 00 a4 0a 02 5b 82 4c 06 55 53 .._S4D....[.L.US 3e30: 42 32 08 5f 41 44 52 0c 01 00 1d 00 5b 80 55 32 B2._ADR.....[.U2 3e40: 43 53 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 CS.....[..U2CS.U 3e50: 32 45 4e 02 08 5f 50 52 57 12 06 02 0a 04 0a 03 2EN.._PRW....... 3e60: 14 23 5f 50 53 57 01 a0 14 68 70 01 41 43 50 57 .#_PSW...hp.ACPW 3e70: a0 0b 41 43 50 57 70 01 55 32 45 4e a1 07 70 00 ..ACPWp.U2EN..p. 3e80: 55 32 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 U2EN.._S3D...... 3e90: 5f 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 33 _S4D....[.M.USB3 3ea0: 08 5f 41 44 52 0c 02 00 1d 00 5b 80 55 32 43 53 ._ADR.....[.U2CS 3eb0: 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 33 45 .....[..U2CS.U3E 3ec0: 4e 02 08 5f 50 52 57 12 06 02 0a 0c 0a 03 14 24 N.._PRW........$ 3ed0: 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c _PSW...hp.ACPW.. 3ee0: 41 43 50 57 70 0a 03 55 33 45 4e a1 07 70 00 55 ACPWp..U3EN..p.U 3ef0: 33 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 3EN.._S3D......_ 3f00: 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 34 08 S4D....[.M.USB4. 3f10: 5f 41 44 52 0c 00 00 1a 00 5b 80 55 34 43 53 02 _ADR.....[.U4CS. 3f20: 0a c4 0a 04 5b 81 0b 55 34 43 53 03 55 34 45 4e ....[..U4CS.U4EN 3f30: 02 08 5f 50 52 57 12 06 02 0a 0e 0a 03 14 24 5f .._PRW........$_ 3f40: 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c 41 PSW...hp.ACPW..A 3f50: 43 50 57 70 0a 03 55 34 45 4e a1 07 70 00 55 34 CPWp..U4EN..p.U4 3f60: 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 EN.._S3D......_S 3f70: 34 44 00 a4 0a 02 5b 82 41 06 55 53 42 35 08 5f 4D....[.A.USB5._ 3f80: 41 44 52 0c 01 00 1a 00 5b 80 55 35 43 53 02 0a ADR.....[.U5CS.. 3f90: c4 0a 04 5b 81 0b 55 35 43 53 03 55 35 45 4e 02 ...[..U5CS.U5EN. 3fa0: 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 .$_PSW...hp.ACPW 3fb0: a0 0c 41 43 50 57 70 0a 03 55 35 45 4e a1 07 70 ..ACPWp..U5EN..p 3fc0: 00 55 35 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 .U5EN.._S3D..... 3fd0: 09 5f 53 34 44 00 a4 0a 02 5b 82 4b 0a 45 48 43 ._S4D....[.K.EHC 3fe0: 31 08 5f 41 44 52 0c 07 00 1d 00 5b 80 55 37 43 1._ADR.....[.U7C 3ff0: 53 02 0a 54 0a 04 5b 81 0d 55 37 43 53 03 00 0f S..T..[..U7CS... 4000: 50 4d 45 53 01 5b 82 4f 05 48 55 42 37 08 5f 41 PMES.[.O.HUB7._A 4010: 44 52 00 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 DR.[..PRT1._ADR. 4020: 5b 82 0c 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 [..PRT2._ADR..[. 4030: 0c 50 52 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 .PRT3._ADR..[..P 4040: 52 54 34 08 5f 41 44 52 0a 04 5b 82 0c 50 52 54 RT4._ADR..[..PRT 4050: 35 08 5f 41 44 52 0a 05 5b 82 0c 50 52 54 36 08 5._ADR..[..PRT6. 4060: 5f 41 44 52 0a 06 08 5f 50 52 57 12 06 02 0a 0d _ADR..._PRW..... 4070: 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 ...._S3D......_S 4080: 34 44 00 a4 0a 02 5b 82 4f 08 45 48 43 32 08 5f 4D....[.O.EHC2._ 4090: 41 44 52 0c 07 00 1a 00 5b 80 55 46 43 53 02 0a ADR.....[.UFCS.. 40a0: 54 0a 04 5b 81 0d 55 46 43 53 03 00 0f 50 4d 45 T..[..UFCS...PME 40b0: 53 01 5b 82 43 04 48 55 42 37 08 5f 41 44 52 00 S.[.C.HUB7._ADR. 40c0: 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 5b 82 0c [..PRT1._ADR.[.. 40d0: 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 0c 50 52 PRT2._ADR..[..PR 40e0: 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 52 54 34 T3._ADR..[..PRT4 40f0: 08 5f 41 44 52 0a 04 08 5f 50 52 57 12 06 02 0a ._ADR..._PRW.... 4100: 0d 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f ....._S3D......_ 4110: 53 34 44 00 a4 0a 02 5b 82 4a 06 50 43 49 42 08 S4D....[.J.PCIB. 4120: 5f 41 44 52 0c 00 00 1e 00 14 49 05 5f 50 52 54 _ADR......I._PRT 4130: 00 a0 21 47 50 49 43 a4 12 1a 02 12 0b 04 0c ff ..!GPIC......... 4140: ff 06 00 00 00 0a 16 12 0b 04 0c ff ff 06 00 01 ................ 4150: 00 0a 17 a1 2f a4 12 2c 02 12 14 04 0c ff ff 06 ..../..,........ 4160: 00 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 47 00 12 14 ..^^.LPCBLNKG... 4170: 04 0c ff ff 06 00 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 4180: 4b 48 00 5b 82 8d 2e 01 4c 50 43 42 08 5f 41 44 KH.[....LPCB._AD 4190: 52 0c 00 00 1f 00 5b 80 4c 50 43 30 02 0a 40 0a R.....[.LPC0..@. 41a0: c0 5b 81 4d 07 4c 50 43 30 00 00 40 10 50 41 52 .[.M.LPC0..@.PAR 41b0: 43 08 50 42 52 43 08 50 43 52 43 08 50 44 52 43 C.PBRC.PCRC.PDRC 41c0: 08 00 20 50 45 52 43 08 50 46 52 43 08 50 47 52 .. PERC.PFRC.PGR 41d0: 43 08 50 48 52 43 08 00 40 0a 43 4d 41 52 03 00 C.PHRC..@.CMAR.. 41e0: 01 43 4d 42 52 03 00 01 4c 50 54 52 02 00 06 43 .CMBR...LPTR...C 41f0: 4d 41 44 01 43 4d 42 44 01 4c 50 54 44 01 46 44 MAD.CMBD.LPTD.FD 4200: 44 44 01 00 2c 49 4f 52 32 10 00 02 4c 47 52 4d DD..,IOR2...LGRM 4210: 06 00 48 32 52 41 45 4e 01 00 0d 52 43 42 41 12 ..H2RAEN...RCBA. 4220: 5b 80 53 4d 49 30 01 0c 00 fe 00 00 0c 02 00 00 [.SMI0.......... 4230: 00 5b 81 0b 53 4d 49 30 00 53 4d 49 43 08 5b 80 .[..SMI0.SMIC.[. 4240: 53 4d 49 31 00 0c bd 2e 6e bf 0c 90 00 00 00 5b SMI1....n......[ 4250: 81 16 53 4d 49 31 00 42 43 4d 44 08 44 49 44 5f ..SMI1.BCMD.DID_ 4260: 20 49 4e 46 4f 40 40 5b 81 15 53 4d 49 31 00 01 INFO@@[..SMI1.. 4270: 01 00 00 28 49 4e 46 5f 08 49 4e 46 31 20 5b 01 ...(INF_.INF1 [. 4280: 50 53 4d 58 00 14 27 50 48 53 53 01 5b 23 50 53 PSMX..'PHSS.[#PS 4290: 4d 58 ff ff 70 0a 80 42 43 4d 44 70 68 44 49 44 MX..p..BCMDphDID 42a0: 5f 70 00 53 4d 49 43 5b 27 50 53 4d 58 5b 82 41 _p.SMIC['PSMX[.A 42b0: 0a 4c 4e 4b 41 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKA._HID.A.... 42c0: 5f 55 49 44 01 14 0d 5f 44 49 53 08 70 0a 80 50 _UID..._DIS.p..P 42d0: 41 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ARC._PRS....#... 42e0: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 41 11 09 y..8_CRS..RTLA.. 42f0: 0a 06 23 00 00 18 79 00 8b 52 54 4c 41 01 49 52 ..#...y..RTLA.IR 4300: 51 30 70 00 49 52 51 30 79 01 7b 50 41 52 43 0a Q0p.IRQ0y.{PARC. 4310: 0f 00 49 52 51 30 a4 52 54 4c 41 14 1b 5f 53 52 ..IRQ0.RTLA.._SR 4320: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 4330: 60 70 60 50 41 52 43 14 18 5f 53 54 41 08 a0 0c `p`PARC.._STA... 4340: 7b 50 41 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PARC........... 4350: 5b 82 42 0a 4c 4e 4b 42 08 5f 48 49 44 0c 41 d0 [.B.LNKB._HID.A. 4360: 0c 0f 08 5f 55 49 44 0a 02 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4370: 70 0a 80 50 42 52 43 08 5f 50 52 53 11 09 0a 06 p..PBRC._PRS.... 4380: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4390: 4c 42 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LB....#...y..RTL 43a0: 42 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 B.IRQ0p.IRQ0y.{P 43b0: 42 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 42 14 BRC...IRQ0.RTLB. 43c0: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 43d0: 51 30 60 76 60 70 60 50 42 52 43 14 18 5f 53 54 Q0`v`p`PBRC.._ST 43e0: 41 08 a0 0c 7b 50 42 52 43 0a 80 00 a4 0a 09 a1 A...{PBRC....... 43f0: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 43 08 5f 48 49 ....[.B.LNKC._HI 4400: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 03 14 0d 5f D.A...._UID...._ 4410: 44 49 53 08 70 0a 80 50 43 52 43 08 5f 50 52 53 DIS.p..PCRC._PRS 4420: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 4430: 08 08 52 54 4c 43 11 09 0a 06 23 00 00 18 79 00 ..RTLC....#...y. 4440: 8b 52 54 4c 43 01 49 52 51 30 70 00 49 52 51 30 .RTLC.IRQ0p.IRQ0 4450: 79 01 7b 50 43 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PCRC...IRQ0.R 4460: 54 4c 43 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLC.._SRS..h.IRQ 4470: 30 82 49 52 51 30 60 76 60 70 60 50 43 52 43 14 0.IRQ0`v`p`PCRC. 4480: 18 5f 53 54 41 08 a0 0c 7b 50 43 52 43 0a 80 00 ._STA...{PCRC... 4490: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 44 ........[.B.LNKD 44a0: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 44b0: 04 14 0d 5f 44 49 53 08 70 0a 80 50 44 52 43 08 ..._DIS.p..PDRC. 44c0: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 44d0: 5f 43 52 53 08 08 52 54 4c 44 11 09 0a 06 23 00 _CRS..RTLD....#. 44e0: 00 18 79 00 8b 52 54 4c 44 01 49 52 51 30 70 00 ..y..RTLD.IRQ0p. 44f0: 49 52 51 30 79 01 7b 50 44 52 43 0a 0f 00 49 52 IRQ0y.{PDRC...IR 4500: 51 30 a4 52 54 4c 44 14 1b 5f 53 52 53 09 8b 68 Q0.RTLD.._SRS..h 4510: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 4520: 44 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 44 52 DRC.._STA...{PDR 4530: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a C...........[.B. 4540: 4c 4e 4b 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f LNKE._HID.A...._ 4550: 55 49 44 0a 05 14 0d 5f 44 49 53 08 70 0a 80 50 UID...._DIS.p..P 4560: 45 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ERC._PRS....#... 4570: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 45 11 09 y..8_CRS..RTLE.. 4580: 0a 06 23 00 00 18 79 00 8b 52 54 4c 45 01 49 52 ..#...y..RTLE.IR 4590: 51 30 70 00 49 52 51 30 79 01 7b 50 45 52 43 0a Q0p.IRQ0y.{PERC. 45a0: 0f 00 49 52 51 30 a4 52 54 4c 45 14 1b 5f 53 52 ..IRQ0.RTLE.._SR 45b0: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 45c0: 60 70 60 50 45 52 43 14 18 5f 53 54 41 08 a0 0c `p`PERC.._STA... 45d0: 7b 50 45 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PERC........... 45e0: 5b 82 42 0a 4c 4e 4b 46 08 5f 48 49 44 0c 41 d0 [.B.LNKF._HID.A. 45f0: 0c 0f 08 5f 55 49 44 0a 06 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4600: 70 0a 80 50 46 52 43 08 5f 50 52 53 11 09 0a 06 p..PFRC._PRS.... 4610: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4620: 4c 46 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LF....#...y..RTL 4630: 46 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 F.IRQ0p.IRQ0y.{P 4640: 46 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 46 14 FRC...IRQ0.RTLF. 4650: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 4660: 51 30 60 76 60 70 60 50 46 52 43 14 18 5f 53 54 Q0`v`p`PFRC.._ST 4670: 41 08 a0 0c 7b 50 46 52 43 0a 80 00 a4 0a 09 a1 A...{PFRC....... 4680: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 47 08 5f 48 49 ....[.B.LNKG._HI 4690: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 0d 5f D.A...._UID...._ 46a0: 44 49 53 08 70 0a 80 50 47 52 43 08 5f 50 52 53 DIS.p..PGRC._PRS 46b0: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 46c0: 08 08 52 54 4c 47 11 09 0a 06 23 00 00 18 79 00 ..RTLG....#...y. 46d0: 8b 52 54 4c 47 01 49 52 51 30 70 00 49 52 51 30 .RTLG.IRQ0p.IRQ0 46e0: 79 01 7b 50 47 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PGRC...IRQ0.R 46f0: 54 4c 47 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLG.._SRS..h.IRQ 4700: 30 82 49 52 51 30 60 76 60 70 60 50 47 52 43 14 0.IRQ0`v`p`PGRC. 4710: 18 5f 53 54 41 08 a0 0c 7b 50 47 52 43 0a 80 00 ._STA...{PGRC... 4720: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 48 ........[.B.LNKH 4730: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 4740: 08 14 0d 5f 44 49 53 08 70 0a 80 50 48 52 43 08 ..._DIS.p..PHRC. 4750: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 4760: 5f 43 52 53 08 08 52 54 4c 48 11 09 0a 06 23 00 _CRS..RTLH....#. 4770: 00 18 79 00 8b 52 54 4c 48 01 49 52 51 30 70 00 ..y..RTLH.IRQ0p. 4780: 49 52 51 30 79 01 7b 50 48 52 43 0a 0f 00 49 52 IRQ0y.{PHRC...IR 4790: 51 30 a4 52 54 4c 48 14 1b 5f 53 52 53 09 8b 68 Q0.RTLH.._SRS..h 47a0: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 47b0: 48 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 48 52 HRC.._STA...{PHR 47c0: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 3d 44 C...........[.=D 47d0: 4d 41 43 08 5f 48 49 44 0c 41 d0 02 00 08 5f 43 MAC._HID.A...._C 47e0: 52 53 11 28 0a 25 47 01 00 00 00 00 01 20 47 01 RS.(.%G...... G. 47f0: 81 00 81 00 01 11 47 01 93 00 93 00 01 0d 47 01 ......G.......G. 4800: c0 00 c0 00 01 20 2a 10 01 79 00 5b 82 26 46 57 ..... *..y.[.&FW 4810: 48 44 08 5f 48 49 44 0c 25 d4 08 00 08 5f 43 52 HD._HID.%...._CR 4820: 53 11 11 0a 0e 86 09 00 00 00 00 00 ff 00 00 00 S............... 4830: 01 79 00 5b 82 40 0b 48 50 45 54 08 5f 48 49 44 .y.[.@.HPET._HID 4840: 0c 41 d0 01 03 08 5f 43 49 44 0c 41 d0 0c 01 08 .A...._CID.A.... 4850: 42 55 46 30 11 11 0a 0e 86 09 00 00 00 00 d0 fe BUF0............ 4860: 00 04 00 00 79 00 14 27 5f 53 54 41 00 a0 13 92 ....y..'_STA.... 4870: 95 4f 53 59 53 0b d1 07 a0 08 48 50 41 45 a4 0a .OSYS.....HPAE.. 4880: 0f a1 0a a0 08 48 50 41 45 a4 0a 0b a4 00 14 46 .....HPAE......F 4890: 05 5f 43 52 53 08 a0 49 04 48 50 41 45 8a 42 55 ._CRS..I.HPAE.BU 48a0: 46 30 0a 04 48 50 54 30 a0 11 93 48 50 41 53 01 F0..HPT0...HPAS. 48b0: 70 0c 00 10 d0 fe 48 50 54 30 a0 12 93 48 50 41 p.....HPT0...HPA 48c0: 53 0a 02 70 0c 00 20 d0 fe 48 50 54 30 a0 12 93 S..p.. ..HPT0... 48d0: 48 50 41 53 0a 03 70 0c 00 30 d0 fe 48 50 54 30 HPAS..p..0..HPT0 48e0: a4 42 55 46 30 5b 82 45 0a 49 50 49 43 08 5f 48 .BUF0[.E.IPIC._H 48f0: 49 44 0b 41 d0 08 5f 43 52 53 11 41 09 0a 8d 47 ID.A.._CRS.A...G 4900: 01 20 00 20 00 01 02 47 01 24 00 24 00 01 02 47 . . ...G.$.$...G 4910: 01 28 00 28 00 01 02 47 01 2c 00 2c 00 01 02 47 .(.(...G.,.,...G 4920: 01 30 00 30 00 01 02 47 01 34 00 34 00 01 02 47 .0.0...G.4.4...G 4930: 01 38 00 38 00 01 02 47 01 3c 00 3c 00 01 02 47 .8.8...G.<.<...G 4940: 01 a0 00 a0 00 01 02 47 01 a4 00 a4 00 01 02 47 .......G.......G 4950: 01 a8 00 a8 00 01 02 47 01 ac 00 ac 00 01 02 47 .......G.......G 4960: 01 b0 00 b0 00 01 02 47 01 b4 00 b4 00 01 02 47 .......G.......G 4970: 01 b8 00 b8 00 01 02 47 01 bc 00 bc 00 01 02 47 .......G.......G 4980: 01 d0 04 d0 04 01 02 22 04 00 79 00 5b 82 25 4d ......."..y.[.%M 4990: 41 54 48 08 5f 48 49 44 0c 41 d0 0c 04 08 5f 43 ATH._HID.A...._C 49a0: 52 53 11 10 0a 0d 47 01 f0 00 f0 00 01 01 22 00 RS....G.......". 49b0: 20 79 00 5b 82 4b 09 4c 44 52 43 08 5f 48 49 44 y.[.K.LDRC._HID 49c0: 0c 41 d0 0c 02 08 5f 55 49 44 0a 02 08 5f 43 52 .A...._UID..._CR 49d0: 53 11 4e 07 0a 7a 47 01 2e 00 2e 00 01 02 47 01 S.N..zG.......G. 49e0: 4e 00 4e 00 01 02 47 01 61 00 61 00 01 01 47 01 N.N...G.a.a...G. 49f0: 63 00 63 00 01 01 47 01 65 00 65 00 01 01 47 01 c.c...G.e.e...G. 4a00: 67 00 67 00 01 01 47 01 80 00 80 00 01 01 47 01 g.g...G.......G. 4a10: 92 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 ......G.......G. 4a20: 80 06 80 06 01 20 47 01 00 08 00 08 01 10 47 01 ..... G.......G. 4a30: 00 10 00 10 01 80 47 01 80 11 80 11 01 40 47 01 ......G......@G. 4a40: 00 fe 00 fe 01 01 47 01 00 ff 00 ff 01 80 79 00 ......G.......y. 4a50: 5b 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b [.%RTC_._HID.A.. 4a60: 00 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 .._CRS....G.p.p. 4a70: 01 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f .."..y.[.-TIMR._ 4a80: 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a HID.A...._CRS... 4a90: 15 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 .G.@.@...G.P.P.. 4aa0: 04 22 01 00 79 00 5b 82 32 41 43 41 44 08 5f 48 ."..y.[.2ACAD._H 4ab0: 49 44 0d 41 43 50 49 30 30 30 33 00 08 5f 50 43 ID.ACPI0003.._PC 4ac0: 4c 12 06 01 5f 53 42 5f 14 11 5f 50 53 52 00 70 L..._SB_.._PSR.p 4ad0: 01 41 43 50 57 a4 41 43 50 57 14 1a 45 43 4f 4b .ACPW.ACPW..ECOK 4ae0: 00 a0 0f 93 5e 2e 45 43 30 5f 5a 30 30 39 01 a4 ....^.EC0_Z009.. 4af0: 01 a1 03 a4 00 5b 82 4e 6f 45 43 30 5f 08 5f 48 .....[.NoEC0_._H 4b00: 49 44 0c 41 d0 0c 09 08 5f 47 50 45 0a 1c 08 5a ID.A...._GPE...Z 4b10: 30 30 39 00 08 5f 43 52 53 11 15 0a 12 47 01 62 009.._CRS....G.b 4b20: 00 62 00 01 01 47 01 66 00 66 00 01 01 79 00 14 .b...G.f.f...y.. 4b30: 3b 5f 52 45 47 02 a0 34 93 68 0a 03 70 69 5a 30 ;_REG..4.h..piZ0 4b40: 30 39 a0 28 5b 12 5f 4f 53 49 60 70 00 42 54 44 09.([._OSI`p.BTD 4b50: 53 a0 19 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 S.._OSI.Windows 4b60: 32 30 30 36 00 70 01 42 54 44 53 5b 80 45 52 41 2006.p.BTDS[.ERA 4b70: 4d 03 00 0a ff 5b 81 4e 2e 45 52 41 4d 11 00 40 M....[.N.ERAM..@ 4b80: 30 53 4d 50 52 08 53 4d 53 54 08 53 4d 41 44 08 0SMPR.SMST.SMAD. 4b90: 53 4d 43 4d 08 53 4d 44 30 40 10 42 43 4e 54 08 SMCM.SMD0@.BCNT. 4ba0: 53 4d 41 41 18 00 40 04 43 48 47 4d 10 43 48 47 SMAA..@.CHGM.CHG 4bb0: 53 10 45 4e 49 44 08 45 4e 49 42 08 45 4e 44 44 S.ENID.ENIB.ENDD 4bc0: 08 43 48 47 56 08 43 48 47 41 10 42 41 4c 30 01 .CHGV.CHGA.BAL0. 4bd0: 42 41 4c 31 01 42 41 4c 32 01 42 41 4c 33 01 42 BAL1.BAL2.BAL3.B 4be0: 42 43 30 01 42 42 43 31 01 42 42 43 32 01 42 42 BC0.BBC1.BBC2.BB 4bf0: 43 33 01 00 08 50 48 44 44 01 49 46 44 44 01 49 C3...PHDD.IFDD.I 4c00: 4f 44 44 01 53 48 44 44 01 53 31 32 30 01 45 46 ODD.SHDD.S120.EF 4c10: 44 44 01 43 52 54 44 01 53 50 57 52 01 53 42 54 DD.CRTD.SPWR.SBT 4c20: 4e 01 56 49 44 4f 01 56 4f 4c 44 01 56 4f 4c 55 N.VIDO.VOLD.VOLU 4c30: 01 4d 55 54 45 01 43 4f 4e 54 01 42 52 47 54 01 .MUTE.CONT.BRGT. 4c40: 48 42 54 4e 01 53 34 53 54 01 53 4b 45 59 01 42 HBTN.S4ST.SKEY.B 4c50: 4b 45 59 01 54 4f 55 50 01 46 4e 42 4e 01 4c 49 KEY.TOUP.FNBN.LI 4c60: 44 46 01 44 49 47 4d 01 55 57 41 4b 01 00 08 44 DF.DIGM.UWAK...D 4c70: 4b 53 50 01 44 4b 49 4e 01 44 4b 49 44 01 44 4b KSP.DKIN.DKID.DK 4c80: 4f 4b 01 00 04 44 4b 50 57 01 00 07 42 54 4e 53 OK...DKPW...BTNS 4c90: 08 53 31 4c 44 01 53 33 4c 44 01 56 47 41 51 01 .S1LD.S3LD.VGAQ. 4ca0: 50 43 4d 51 01 50 43 4d 52 01 41 44 50 54 01 53 PCMQ.PCMR.ADPT.S 4cb0: 4c 4c 53 01 53 59 53 37 01 50 57 41 4b 01 4d 57 LLS.SYS7.PWAK.MW 4cc0: 41 4b 01 4c 57 41 4b 01 00 05 00 28 54 43 4e 4c AK.LWAK....(TCNL 4cd0: 08 54 4d 50 49 08 54 4d 53 44 08 46 41 53 4e 04 .TMPI.TMSD.FASN. 4ce0: 46 41 53 55 04 50 43 56 4c 04 00 02 53 57 54 4f FASU.PCVL...SWTO 4cf0: 01 48 57 54 4f 01 4d 4f 44 45 01 46 41 4e 53 02 .HWTO.MODE.FANS. 4d00: 49 4e 49 54 01 46 41 4e 31 01 46 41 4e 32 01 46 INIT.FAN1.FAN2.F 4d10: 41 4e 54 01 53 4b 4e 4d 01 43 54 4d 50 08 4c 49 ANT.SKNM.CTMP.LI 4d20: 44 45 01 50 4d 45 45 01 50 57 42 45 01 52 4e 47 DE.PMEE.PWBE.RNG 4d30: 45 01 42 54 57 45 01 44 43 4b 45 01 00 02 53 4b E.BTWE.DCKE...SK 4d40: 54 58 08 53 4b 54 42 08 53 4b 54 43 08 53 4b 54 TX.SKTB.SKTC.SKT 4d50: 41 08 00 08 48 41 50 4c 02 48 41 50 52 01 00 05 A...HAPL.HAPR... 4d60: 42 54 44 54 01 42 54 50 57 01 42 54 44 53 01 42 BTDT.BTPW.BTDS.B 4d70: 54 50 53 01 42 54 53 57 01 42 54 57 4b 01 42 54 TPS.BTSW.BTWK.BT 4d80: 4c 44 01 00 01 42 52 54 53 08 43 4e 54 53 08 57 LD...BRTS.CNTS.W 4d90: 4c 41 54 01 42 54 41 54 01 57 4c 45 58 01 42 54 LAT.BTAT.WLEX.BT 4da0: 45 58 01 4b 4c 53 57 01 57 4c 4f 4b 01 00 02 50 EX.KLSW.WLOK...P 4db0: 54 49 44 08 43 50 55 54 08 45 50 4b 54 08 47 48 TID.CPUT.EPKT.GH 4dc0: 49 44 08 00 04 42 4d 46 30 03 42 54 59 30 01 42 ID...BMF0.BTY0.B 4dd0: 53 54 30 08 42 52 43 30 10 42 53 4e 30 10 42 50 ST0.BRC0.BSN0.BP 4de0: 56 30 10 42 44 56 30 10 42 44 43 30 10 42 46 43 V0.BDV0.BDC0.BFC 4df0: 30 10 47 41 55 30 08 43 59 43 30 08 42 50 43 30 0.GAU0.CYC0.BPC0 4e00: 10 42 41 43 30 10 42 41 54 30 08 42 54 57 30 10 .BAC0.BAT0.BTW0. 4e10: 42 44 4e 30 08 00 40 04 00 04 42 4d 46 31 03 42 BDN0..@...BMF1.B 4e20: 54 59 31 01 42 53 54 31 08 42 52 43 31 10 42 53 TY1.BST1.BRC1.BS 4e30: 4e 31 10 42 50 56 31 10 42 44 56 31 10 42 44 43 N1.BPV1.BDV1.BDC 4e40: 31 10 42 46 43 31 10 47 41 55 31 08 43 59 43 31 1.BFC1.GAU1.CYC1 4e50: 08 42 50 43 31 10 42 41 43 31 10 42 41 54 31 08 .BPC1.BAC1.BAT1. 4e60: 42 54 57 31 10 14 37 5f 51 31 31 00 70 0a 87 50 BTW1..7_Q11.p..P 4e70: 38 30 48 a0 13 49 47 44 53 5e 5e 5e 2e 47 46 58 80H..IGDS^^^.GFX 4e80: 30 42 52 54 4e 0a 87 a1 15 86 5e 5e 5e 2f 03 50 0BRTN.....^^^/.P 4e90: 45 47 50 56 47 41 5f 4c 43 44 5f 0a 87 14 37 5f EGPVGA_LCD_...7_ 4ea0: 51 31 32 00 70 0a 86 50 38 30 48 a0 13 49 47 44 Q12.p..P80H..IGD 4eb0: 53 5e 5e 5e 2e 47 46 58 30 42 52 54 4e 0a 86 a1 S^^^.GFX0BRTN... 4ec0: 15 86 5e 5e 5e 2f 03 50 45 47 50 56 47 41 5f 4c ..^^^/.PEGPVGA_L 4ed0: 43 44 5f 0a 86 14 40 05 5f 51 31 43 00 70 0d 3d CD_...@._Q1C.p.= 4ee0: 3d 3d 3d 3d 51 55 45 52 59 5f 31 43 3d 3d 3d 3d ====QUERY_1C==== 4ef0: 3d 00 5b 31 a0 31 56 49 44 4f a0 12 49 47 44 53 =.[1.1VIDO..IGDS 4f00: 5e 5e 5e 2e 47 46 58 30 47 48 44 53 00 a1 12 5e ^^^.GFX0GHDS...^ 4f10: 5e 5e 2f 03 50 45 47 50 56 47 41 5f 44 53 53 57 ^^/.PEGPVGA_DSSW 4f20: 70 00 56 49 44 4f 14 21 5f 51 31 44 00 70 0d 3d p.VIDO.!_Q1D.p.= 4f30: 3d 3d 3d 3d 51 55 45 52 59 5f 31 44 3d 3d 3d 3d ====QUERY_1D==== 4f40: 3d 00 5b 31 50 43 4c 4b 14 21 5f 51 31 45 00 70 =.[1PCLK.!_Q1E.p 4f50: 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 31 45 3d 3d .=====QUERY_1E== 4f60: 3d 3d 3d 00 5b 31 50 43 4c 4b 14 39 5f 51 32 35 ===.[1PCLK.9_Q25 4f70: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 35 .p.=====QUERY_25 4f80: 3d 3d 3d 3d 3d 00 5b 31 5b 22 0b e8 03 86 5e 5e =====.[1["....^^ 4f90: 42 41 54 31 0a 81 5b 22 0b e8 03 86 5e 5e 42 41 BAT1..["....^^BA 4fa0: 54 31 0a 80 14 2f 5f 51 33 34 00 70 0d 3d 3d 3d T1.../_Q34.p.=== 4fb0: 3d 3d 51 55 45 52 59 5f 33 34 3d 3d 3d 3d 3d 00 ==QUERY_34=====. 4fc0: 5b 31 a0 11 42 4b 45 59 50 48 53 53 0a 71 70 00 [1..BKEYPHSS.qp. 4fd0: 42 4b 45 59 14 32 5f 51 33 37 00 70 0d 3d 3d 3d BKEY.2_Q37.p.=== 4fe0: 3d 3d 51 55 45 52 59 5f 33 37 3d 3d 3d 3d 3d 00 ==QUERY_37=====. 4ff0: 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 03 86 5e [1.ACAD..["....^ 5000: 5e 42 41 54 31 0a 80 14 32 5f 51 33 38 00 70 0d ^BAT1...2_Q38.p. 5010: 3d 3d 3d 3d 3d 51 55 45 52 59 5f 33 38 3d 3d 3d =====QUERY_38=== 5020: 3d 3d 00 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 ==.[1.ACAD..[".. 5030: 03 86 5e 5e 42 41 54 31 0a 80 14 29 5f 51 32 44 ..^^BAT1...)_Q2D 5040: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 44 .p.=====QUERY_2D 5050: 3d 3d 3d 3d 3d 00 5b 31 70 00 44 54 53 4d 54 52 =====.[1p.DTSMTR 5060: 41 50 0a 46 14 29 5f 51 32 45 00 70 0d 3d 3d 3d AP.F.)_Q2E.p.=== 5070: 3d 3d 51 55 45 52 59 5f 32 45 3d 3d 3d 3d 3d 00 ==QUERY_2E=====. 5080: 5b 31 70 01 44 54 53 4d 54 52 41 50 0a 46 5b 80 [1p.DTSMTRAP.F[. 5090: 43 43 4c 4b 01 0b 10 10 0a 04 5b 81 20 43 43 4c CCLK......[. CCL 50a0: 4b 03 00 01 44 55 54 59 03 54 48 45 4e 01 00 03 K...DUTY.THEN... 50b0: 46 54 54 5f 01 00 08 54 53 54 53 01 5b 80 45 43 FTT_...TSTS.[.EC 50c0: 52 4d 03 00 0a ff 5b 81 44 04 45 43 52 4d 11 00 RM....[.D.ECRM.. 50d0: 40 4a 45 52 49 42 10 45 52 42 44 08 00 48 0a 53 @JERIB.ERBD..H.S 50e0: 44 54 4d 08 46 53 53 4e 04 46 41 4e 55 04 50 54 DTM.FSSN.FANU.PT 50f0: 56 4c 03 00 04 54 54 48 52 01 00 48 06 50 4a 49 VL...TTHR..H.PJI 5100: 44 08 00 08 00 48 1d 52 46 52 44 10 5b 01 46 41 D....H.RFRD.[.FA 5110: 4d 58 00 14 22 46 41 4e 47 01 5b 23 46 41 4d 58 MX.."FANG.[#FAMX 5120: ff ff 70 68 45 52 49 42 70 45 52 42 44 60 5b 27 ..phERIBpERBD`[' 5130: 46 41 4d 58 a4 60 14 22 46 41 4e 57 02 5b 23 46 FAMX.`."FANW.[#F 5140: 41 4d 58 ff ff 70 68 45 52 49 42 70 69 45 52 42 AMX..phERIBpiERB 5150: 44 5b 27 46 41 4d 58 a4 69 14 09 54 55 56 52 01 D['FAMX.i..TUVR. 5160: a4 0a 03 14 2e 54 48 52 4f 01 a0 09 93 68 00 a4 .....THRO....h.. 5170: 54 48 45 4e a1 1d a0 09 93 68 01 a4 44 55 54 59 THEN.....h..DUTY 5180: a1 11 a0 0a 93 68 0a 02 a4 54 54 48 52 a1 04 a4 .....h...TTHR... 5190: 0a ff 14 2a 43 4c 43 4b 01 a0 10 93 68 00 70 00 ...*CLCK....h.p. 51a0: 54 48 45 4e 70 00 46 54 54 5f a1 0d 70 68 44 55 THENp.FTT_..phDU 51b0: 54 59 70 01 54 48 45 4e a4 54 48 45 4e 14 37 50 TYp.THEN.THEN.7P 51c0: 43 4c 4b 00 70 50 54 56 4c 60 a0 10 93 60 00 70 CLK.pPTVL`...`.p 51d0: 00 54 48 45 4e 70 00 46 54 54 5f a1 19 76 60 70 .THENp.FTT_..v`p 51e0: 80 60 00 61 7b 61 0a 07 61 70 61 44 55 54 59 70 .`.a{a..apaDUTYp 51f0: 01 54 48 45 4e 5b 82 4b 22 42 41 54 31 08 5f 48 .THEN[.K"BAT1._H 5200: 49 44 0c 41 d0 0c 0a 08 5f 55 49 44 01 08 5f 50 ID.A...._UID.._P 5210: 43 4c 12 06 01 5f 53 42 5f 14 39 5f 53 54 41 00 CL..._SB_.9_STA. 5220: a0 29 90 45 43 4f 4b 93 45 43 44 59 00 a0 13 5e .).ECOK.ECDY...^ 5230: 5e 2e 45 43 30 5f 42 41 4c 30 5b 22 0a 14 a4 0a ^.EC0_BAL0[".... 5240: 1f a1 08 5b 22 0a 14 a4 0a 0f a1 08 5b 22 0a 14 ...[".......[".. 5250: a4 0a 1f 14 48 10 5f 42 49 46 00 08 53 54 41 54 ....H._BIF..STAT 5260: 12 3a 0d 01 0b a0 0f 0b a0 0f 01 0b 5c 2b 0b a4 .:..........\+.. 5270: 01 0a 9c 0b 08 01 0b c4 0e 0d 50 41 33 34 36 35 ..........PA3465 5280: 55 20 00 0d 33 36 35 38 51 00 0d 4c 69 2d 49 6f U ..3658Q..Li-Io 5290: 6e 00 0d 43 4f 4d 50 41 4c 20 00 a0 4b 07 90 45 n..COMPAL ..K..E 52a0: 43 4f 4b 93 45 43 44 59 00 70 5e 5e 2e 45 43 30 COK.ECDY.p^^.EC0 52b0: 5f 42 44 4e 30 60 a0 23 93 60 0a 08 70 0a b4 88 _BDN0`.#.`..p... 52c0: 53 54 41 54 0a 06 00 70 0d 50 41 33 34 35 37 55 STAT...p.PA3457U 52d0: 20 00 88 53 54 41 54 0a 09 00 a0 24 93 60 0a 20 ..STAT....$.`. 52e0: 70 0b 02 01 88 53 54 41 54 0a 06 00 70 0d 50 41 p....STAT...p.PA 52f0: 33 34 35 37 55 20 00 88 53 54 41 54 0a 09 00 5b 3457U ..STAT...[ 5300: 22 0a 14 70 5e 5e 2e 45 43 30 5f 42 44 43 30 42 "..p^^.EC0_BDC0B 5310: 46 43 31 5b 22 0a 14 a1 12 70 0d 4c 69 2d 49 6f FC1["....p.Li-Io 5320: 6e 00 88 53 54 41 54 0a 0b 00 a0 2c 42 46 43 31 n..STAT....,BFC1 5330: 78 42 46 43 31 0a 64 60 61 77 61 0a 64 61 70 61 xBFC1.d`awa.dapa 5340: 42 46 43 31 70 61 88 53 54 41 54 01 00 70 61 88 BFC1pa.STAT..pa. 5350: 53 54 41 54 0a 02 00 a4 53 54 41 54 14 45 0c 5f STAT....STAT.E._ 5360: 42 53 54 00 08 50 42 53 54 12 10 04 00 0c ff ff BST..PBST....... 5370: ff ff 0c ff ff ff ff 0b 5c 2b 70 0b 5c 2b 63 a0 ........\+p.\+c. 5380: 38 90 45 43 4f 4b 93 45 43 44 59 00 5b 22 0a 14 8.ECOK.ECDY.[".. 5390: 70 5e 5e 2e 45 43 30 5f 42 53 54 30 42 53 54 31 p^^.EC0_BST0BST1 53a0: 5b 22 0a 14 70 5e 5e 2e 45 43 30 5f 47 41 55 30 ["..p^^.EC0_GAU0 53b0: 42 47 55 31 5b 22 0a 14 a0 15 42 46 43 31 77 42 BGU1["....BFC1wB 53c0: 47 55 31 42 46 43 31 62 78 62 0a 64 64 62 a1 09 GU1BFC1bxb.ddb.. 53d0: 77 42 47 55 31 0a 28 62 70 42 53 54 31 88 50 42 wBGU1.(bpBST1.PB 53e0: 53 54 00 00 70 00 88 50 42 53 54 01 00 70 62 88 ST..p..PBST..pb. 53f0: 50 42 53 54 0a 02 00 70 63 88 50 42 53 54 0a 03 PBST...pc.PBST.. 5400: 00 a0 1b 94 45 43 44 59 00 76 45 43 44 59 a0 0e ....ECDY.vECDY.. 5410: 93 45 43 44 59 00 86 42 41 54 31 0a 80 a4 50 42 .ECDY..BAT1...PB 5420: 53 54 5b 82 2e 50 53 32 4b 08 5f 48 49 44 0c 41 ST[..PS2K._HID.A 5430: d0 03 03 08 5f 43 52 53 11 19 0a 16 47 01 60 00 ...._CRS....G.`. 5440: 60 00 01 01 47 01 64 00 64 00 01 01 23 02 00 01 `...G.d.d...#... 5450: 79 00 5b 82 1e 50 53 32 4d 08 5f 48 49 44 0c 41 y.[..PS2M._HID.A 5460: d0 0f 13 08 5f 43 52 53 11 09 0a 06 23 00 10 01 ...._CRS....#... 5470: 79 00 5b 82 43 6a 50 41 54 41 08 5f 41 44 52 0c y.[.CjPATA._ADR. 5480: 01 00 1f 00 5b 80 50 41 43 53 02 0a 40 0a c0 5b ....[.PACS..@..[ 5490: 81 49 04 50 41 43 53 03 50 52 49 54 10 00 10 50 .I.PACS.PRIT...P 54a0: 53 49 54 04 00 1c 53 59 4e 43 04 00 0c 53 44 54 SIT...SYNC...SDT 54b0: 30 02 00 02 53 44 54 31 02 00 4a 04 49 43 52 30 0...SDT1..J.ICR0 54c0: 04 49 43 52 31 04 49 43 52 32 04 49 43 52 33 04 .ICR1.ICR2.ICR3. 54d0: 49 43 52 34 04 49 43 52 35 04 5b 82 4b 63 50 52 ICR4.ICR5.[.KcPR 54e0: 49 44 08 5f 41 44 52 00 14 40 17 5f 47 54 4d 00 ID._ADR..@._GTM. 54f0: 08 50 42 55 46 11 17 0a 14 00 00 00 00 00 00 00 .PBUF........... 5500: 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 50 42 ..............PB 5510: 55 46 00 50 49 4f 30 8a 50 42 55 46 0a 04 44 4d UF.PIO0.PBUF..DM 5520: 41 30 8a 50 42 55 46 0a 08 50 49 4f 31 8a 50 42 A0.PBUF..PIO1.PB 5530: 55 46 0a 0c 44 4d 41 31 8a 50 42 55 46 0a 10 46 UF..DMA1.PBUF..F 5540: 4c 41 47 70 47 45 54 50 50 52 49 54 50 49 4f 30 LAGpGETPPRITPIO0 5550: 70 47 44 4d 41 7b 53 59 4e 43 01 00 7b 49 43 52 pGDMA{SYNC..{ICR 5560: 33 01 00 7b 49 43 52 30 01 00 53 44 54 30 7b 49 3..{ICR0..SDT0{I 5570: 43 52 31 01 00 44 4d 41 30 a0 14 93 44 4d 41 30 CR1..DMA0...DMA0 5580: 0c ff ff ff ff 70 50 49 4f 30 44 4d 41 30 a0 2e .....pPIO0DMA0.. 5590: 7b 50 52 49 54 0b 00 40 00 a0 14 93 7b 50 52 49 {PRIT..@....{PRI 55a0: 54 0a 90 00 0a 80 70 0b 84 03 50 49 4f 31 a1 0e T.....p...PIO1.. 55b0: 70 47 45 54 54 50 53 49 54 50 49 4f 31 a1 0b 70 pGETTPSITPIO1..p 55c0: 0c ff ff ff ff 50 49 4f 31 70 47 44 4d 41 7b 53 .....PIO1pGDMA{S 55d0: 59 4e 43 0a 02 00 7b 49 43 52 33 0a 02 00 7b 49 YNC...{ICR3...{I 55e0: 43 52 30 0a 02 00 53 44 54 31 7b 49 43 52 31 0a CR0...SDT1{ICR1. 55f0: 02 00 44 4d 41 31 a0 14 93 44 4d 41 31 0c ff ff ..DMA1...DMA1... 5600: ff ff 70 50 49 4f 31 44 4d 41 31 70 47 45 54 46 ..pPIO1DMA1pGETF 5610: 7b 53 59 4e 43 01 00 7b 53 59 4e 43 0a 02 00 50 {SYNC..{SYNC...P 5620: 52 49 54 46 4c 41 47 a0 2c 7b 93 50 49 4f 30 0c RITFLAG.,{.PIO0. 5630: ff ff ff ff 93 44 4d 41 30 0c ff ff ff ff 00 70 .....DMA0......p 5640: 0a 78 50 49 4f 30 70 0a 14 44 4d 41 30 70 0a 03 .xPIO0p..DMA0p.. 5650: 46 4c 41 47 a4 50 42 55 46 14 4c 2a 5f 53 54 4d FLAG.PBUF.L*_STM 5660: 03 8a 68 00 50 49 4f 30 8a 68 0a 04 44 4d 41 30 ..h.PIO0.h..DMA0 5670: 8a 68 0a 08 50 49 4f 31 8a 68 0a 0c 44 4d 41 31 .h..PIO1.h..DMA1 5680: 8a 68 0a 10 46 4c 41 47 a0 41 12 93 87 69 0b 00 .h..FLAG.A...i.. 5690: 02 7b 50 52 49 54 0b f0 c0 50 52 49 54 7b 53 59 .{PRIT...PRIT{SY 56a0: 4e 43 0a 02 53 59 4e 43 70 00 53 44 54 30 7b 49 NC..SYNCp.SDT0{I 56b0: 43 52 30 0a 02 49 43 52 30 7b 49 43 52 31 0a 02 CR0..ICR0{ICR1.. 56c0: 49 43 52 31 7b 49 43 52 33 0a 02 49 43 52 33 7b ICR1{ICR3..ICR3{ 56d0: 49 43 52 35 0a 02 49 43 52 35 8b 69 0a 62 57 34 ICR5..ICR5.i.bW4 56e0: 39 30 8b 69 0a 6a 57 35 33 30 8b 69 0a 7e 57 36 90.i.jW530.i.~W6 56f0: 33 30 8b 69 0a 80 57 36 34 30 8b 69 0a b0 57 38 30.i..W640.i..W8 5700: 38 30 8b 69 0a ba 57 39 33 30 7d 50 52 49 54 0b 80.i..W930}PRIT. 5710: 04 80 50 52 49 54 a0 1e 90 7b 46 4c 41 47 0a 02 ..PRIT...{FLAG.. 5720: 00 7b 57 34 39 30 0b 00 08 00 7d 50 52 49 54 0a .{W490....}PRIT. 5730: 02 50 52 49 54 7d 50 52 49 54 53 45 54 50 50 49 .PRIT}PRITSETPPI 5740: 4f 30 57 35 33 30 57 36 34 30 50 52 49 54 a0 4b O0W530W640PRIT.K 5750: 05 7b 46 4c 41 47 01 00 7d 53 59 4e 43 01 53 59 .{FLAG..}SYNC.SY 5760: 4e 43 70 53 44 4d 41 44 4d 41 30 53 44 54 30 a0 NCpSDMADMA0SDT0. 5770: 12 95 44 4d 41 30 0a 1e 7d 49 43 52 33 01 49 43 ..DMA0..}ICR3.IC 5780: 52 33 a0 12 95 44 4d 41 30 0a 3c 7d 49 43 52 30 R3...DMA0.<}ICR0 5790: 01 49 43 52 30 a0 14 7b 57 39 33 30 0b 00 20 00 .ICR0..{W930.. . 57a0: 7d 49 43 52 31 01 49 43 52 31 a0 4b 15 93 87 6a }ICR1.ICR1.K...j 57b0: 0b 00 02 7b 50 52 49 54 0b 0f bf 50 52 49 54 70 ...{PRIT...PRITp 57c0: 00 50 53 49 54 7b 53 59 4e 43 01 53 59 4e 43 70 .PSIT{SYNC.SYNCp 57d0: 00 53 44 54 31 7b 49 43 52 30 01 49 43 52 30 7b .SDT1{ICR0.ICR0{ 57e0: 49 43 52 31 01 49 43 52 31 7b 49 43 52 33 01 49 ICR1.ICR1{ICR3.I 57f0: 43 52 33 7b 49 43 52 35 01 49 43 52 35 8b 6a 0a CR3{ICR5.ICR5.j. 5800: 62 57 34 39 31 8b 6a 0a 6a 57 35 33 31 8b 6a 0a bW491.j.jW531.j. 5810: 7e 57 36 33 31 8b 6a 0a 80 57 36 34 31 8b 6a 0a ~W631.j..W641.j. 5820: b0 57 38 38 31 8b 6a 0a ba 57 39 33 31 7d 50 52 .W881.j..W931}PR 5830: 49 54 0b 40 80 50 52 49 54 a0 1e 90 7b 46 4c 41 IT.@.PRIT...{FLA 5840: 47 0a 08 00 7b 57 34 39 31 0b 00 08 00 7d 50 52 G...{W491....}PR 5850: 49 54 0a 20 50 52 49 54 a0 4c 04 7b 46 4c 41 47 IT. PRIT.L.{FLAG 5860: 0a 10 00 7d 50 52 49 54 0b 00 40 50 52 49 54 a0 ...}PRIT..@PRIT. 5870: 13 94 50 49 4f 31 0a f0 7d 50 52 49 54 0a 80 50 ..PIO1..}PRIT..P 5880: 52 49 54 a1 21 7d 50 52 49 54 0a 10 50 52 49 54 RIT.!}PRIT..PRIT 5890: 70 53 45 54 54 50 49 4f 31 57 35 33 31 57 36 34 pSETTPIO1W531W64 58a0: 31 50 53 49 54 a0 40 06 7b 46 4c 41 47 0a 04 00 1PSIT.@.{FLAG... 58b0: 7d 53 59 4e 43 0a 02 53 59 4e 43 70 53 44 4d 41 }SYNC..SYNCpSDMA 58c0: 44 4d 41 31 53 44 54 31 a0 13 95 44 4d 41 31 0a DMA1SDT1...DMA1. 58d0: 1e 7d 49 43 52 33 0a 02 49 43 52 33 a0 13 95 44 .}ICR3..ICR3...D 58e0: 4d 41 31 0a 3c 7d 49 43 52 30 0a 02 49 43 52 30 MA1.<}ICR0..ICR0 58f0: a0 15 7b 57 39 33 31 0b 00 20 00 7d 49 43 52 31 ..{W931.. .}ICR1 5900: 0a 02 49 43 52 31 5b 82 47 10 50 5f 44 30 08 5f ..ICR1[.G.P_D0._ 5910: 41 44 52 00 14 4a 0f 5f 47 54 46 00 08 50 49 42 ADR..J._GTF..PIB 5920: 30 11 11 0a 0e 03 00 00 00 00 a0 ef 03 00 00 00 0............... 5930: 00 a0 ef 8c 50 49 42 30 01 50 4d 44 30 8c 50 49 ....PIB0.PMD0.PI 5940: 42 30 0a 08 44 4d 44 30 a0 40 06 7b 50 52 49 54 B0..DMD0.@.{PRIT 5950: 0a 02 00 a0 13 93 7b 50 52 49 54 0a 09 00 0a 08 ......{PRIT..... 5960: 70 0a 08 50 4d 44 30 a1 41 04 70 0a 0a 50 4d 44 p..PMD0.A.p..PMD 5970: 30 7a 7b 50 52 49 54 0b 00 03 00 0a 08 60 7a 7b 0z{PRIT......`z{ 5980: 50 52 49 54 0b 00 30 00 0a 0c 61 72 60 61 62 a0 PRIT..0...ar`ab. 5990: 0c 93 0a 03 62 70 0a 0b 50 4d 44 30 a0 0c 93 0a ....bp..PMD0.... 59a0: 05 62 70 0a 0c 50 4d 44 30 a1 07 70 01 50 4d 44 .bp..PMD0..p.PMD 59b0: 30 a0 43 04 7b 53 59 4e 43 01 00 70 7d 53 44 54 0.C.{SYNC..p}SDT 59c0: 30 0a 40 00 44 4d 44 30 a0 2c 7b 49 43 52 31 01 0.@.DMD0.,{ICR1. 59d0: 00 a0 13 7b 49 43 52 30 01 00 72 44 4d 44 30 0a ...{ICR0..rDMD0. 59e0: 02 44 4d 44 30 a0 0f 7b 49 43 52 33 01 00 70 0a .DMD0..{ICR3..p. 59f0: 45 44 4d 44 30 a1 14 7d 74 7b 50 4d 44 30 0a 07 EDMD0..}t{PMD0.. 5a00: 00 0a 02 00 0a 20 44 4d 44 30 a4 50 49 42 30 5b ..... DMD0.PIB0[ 5a10: 82 46 10 50 5f 44 31 08 5f 41 44 52 01 14 49 0f .F.P_D1._ADR..I. 5a20: 5f 47 54 46 00 08 50 49 42 31 11 11 0a 0e 03 00 _GTF..PIB1...... 5a30: 00 00 00 b0 ef 03 00 00 00 00 b0 ef 8c 50 49 42 .............PIB 5a40: 31 01 50 4d 44 31 8c 50 49 42 31 0a 08 44 4d 44 1.PMD1.PIB1..DMD 5a50: 31 a0 4b 05 7b 50 52 49 54 0a 20 00 a0 13 93 7b 1.K.{PRIT. ....{ 5a60: 50 52 49 54 0a 90 00 0a 80 70 0a 08 50 4d 44 31 PRIT.....p..PMD1 5a70: a1 3c 72 7b 50 53 49 54 0a 03 00 7a 7b 50 53 49 .. 0050: 80 49 ee 6a 65 26 72 1e cd bf 5f 2f 96 d6 c0 0a .I.je&r..._/.... 0060: 92 f5 06 b5 00 b2 3b 29 02 e2 4c 8d c2 f2 bc 41 ......;)..L....A 0070: 77 9c 70 f0 f3 1b 09 d2 63 5a dc a8 83 f8 5e c9 w.p.....cZ....^. 0080: 15 95 f9 fa fd dc 05 b7 4d 67 7f 2d b3 84 33 20 ........Mg.-..3 0090: e1 d1 79 2a a7 6a 77 d1 b6 20 2a 76 42 c5 d5 e9 ..y*.jw.. *vB... 00a0: b6 43 40 55 44 c3 c9 37 99 5f 41 97 70 f3 d1 f6 .C@UD..7._A.p... 00b0: 07 ec 7b 1a 29 a1 c1 f1 91 fd 48 86 6e 3e ce cb ..{.).....H.n>.. 00c0: 01 00 00 00 b6 00 00 00 00 00 02 00 4c 45 4e 4f ............LENO 00d0: 56 4f 54 50 2d 36 38 20 20 20 57 49 4e 44 4f 57 VOTP-68 WINDOW 00e0: 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 S .............. 00f0: 00 00 00 00 00 00 8a 6e 2e c9 36 e6 7f 10 8a ea .......n..6..... 0100: 14 ad d2 93 b7 6d 9b 73 ad 83 36 b8 6c a7 a7 ee .....m.s..6.l... 0110: 37 47 16 fe f3 fc cd c7 89 84 06 16 91 0b 1e 81 7G.............. 0120: 11 42 b1 35 52 57 f6 6b bb 5f a5 81 e2 ff 89 8a .B.5RW.k._...... 0130: 95 c3 4d fc e9 56 4f 4c 34 cc 99 5e 62 e1 90 8a ..M..VOL4..^b... 0140: 54 be 4a 00 5c 9b a0 86 41 46 66 9d e2 f2 e7 36 T.J.\...AFf....6 0150: 9c 33 91 27 e7 8d 5c a1 d8 f9 a4 61 8a 1c 04 07 .3.'..\....a.... 0160: e3 2a 1e 14 f1 bd 7f 4c 09 ff 19 11 a9 d4 74 ca .*.....L......t. 0170: 11 9e dc 54 39 bf ...T9. APIC @ 0xbf6dff70 0000: 41 50 49 43 68 00 00 00 01 13 50 54 4c 54 44 20 APICh.....PTLTD 0010: 09 20 41 50 49 43 20 20 00 00 04 06 20 4c 54 50 . APIC .... LTP 0020: 00 00 00 00 00 00 e0 fe 01 00 00 00 00 08 00 00 ................ 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0c 02 00 ................ 0040: 00 00 c0 fe 00 00 00 00 04 06 00 05 00 01 04 06 ................ 0050: 01 05 00 01 02 0a 00 00 02 00 00 00 05 00 02 0a ................ 0060: 00 09 09 00 00 00 0d 00 ........ SSDT @ 0xbf6d98bd 0000: 53 53 44 54 ad 02 00 00 01 59 53 61 74 61 52 65 SSDT.....YSataRe 0010: 53 61 74 61 41 68 63 69 00 10 00 00 49 4e 54 4c SataAhci....INTL 0020: 24 06 05 20 10 48 28 5c 2f 03 5f 53 42 5f 50 43 $.. .H(\/._SB_PC 0030: 49 30 53 41 54 41 5b 82 4f 0c 50 52 54 30 08 5f I0SATA[.O.PRT0._ 0040: 41 44 52 0b ff ff 14 44 0b 5f 53 44 44 01 08 47 ADR....D._SDD..G 0050: 42 55 30 11 0a 0a 07 00 00 00 00 00 a0 00 8c 47 BU0............G 0060: 42 55 30 0a 00 47 42 30 30 8c 47 42 55 30 0a 01 BU0..GB00.GBU0.. 0070: 47 42 30 31 8c 47 42 55 30 0a 02 47 42 30 32 8c GB01.GBU0..GB02. 0080: 47 42 55 30 0a 03 47 42 30 33 8c 47 42 55 30 0a GBU0..GB03.GBU0. 0090: 04 47 42 30 34 8c 47 42 55 30 0a 05 47 42 30 35 .GB04.GBU0..GB05 00a0: 8c 47 42 55 30 0a 06 47 42 30 36 a0 46 04 93 87 .GBU0..GB06.F... 00b0: 68 0b 00 02 8b 68 0a 9c 57 37 38 30 a0 1e 7b 57 h....h..W780..{W 00c0: 37 38 30 0a 08 00 70 0a 10 47 42 30 30 70 0a 03 780...p..GB00p.. 00d0: 47 42 30 31 70 0a ef 47 42 30 36 a1 16 70 0a 90 GB01p..GB06..p.. 00e0: 47 42 30 30 70 0a 03 47 42 30 31 70 0a ef 47 42 GB00p..GB01p..GB 00f0: 30 36 70 47 42 55 30 47 54 46 30 14 0b 5f 47 54 06pGBU0GTF0.._GT 0100: 46 00 a4 47 54 46 30 5b 82 41 0d 50 52 54 31 08 F..GTF0[.A.PRT1. 0110: 5f 41 44 52 0c ff ff 01 00 14 44 0b 5f 53 44 44 _ADR......D._SDD 0120: 01 08 47 42 55 31 11 0a 0a 07 00 00 00 00 00 a0 ..GBU1.......... 0130: 00 8c 47 42 55 31 0a 00 47 42 31 30 8c 47 42 55 ..GBU1..GB10.GBU 0140: 31 0a 01 47 42 31 31 8c 47 42 55 31 0a 02 47 42 1..GB11.GBU1..GB 0150: 31 32 8c 47 42 55 31 0a 03 47 42 31 33 8c 47 42 12.GBU1..GB13.GB 0160: 55 31 0a 04 47 42 31 34 8c 47 42 55 31 0a 05 47 U1..GB14.GBU1..G 0170: 42 31 35 8c 47 42 55 31 0a 06 47 42 31 36 a0 46 B15.GBU1..GB16.F 0180: 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 38 31 a0 ...h....h..W781. 0190: 1e 7b 57 37 38 31 0a 08 00 70 0a 10 47 42 31 30 .{W781...p..GB10 01a0: 70 0a 03 47 42 31 31 70 0a ef 47 42 31 36 a1 16 p..GB11p..GB16.. 01b0: 70 0a 90 47 42 31 30 70 0a 03 47 42 31 31 70 0a p..GB10p..GB11p. 01c0: ef 47 42 31 36 70 47 42 55 31 47 54 46 31 14 0b .GB16pGBU1GTF1.. 01d0: 5f 47 54 46 00 a4 47 54 46 31 5b 82 41 0d 50 52 _GTF..GTF1[.A.PR 01e0: 54 32 08 5f 41 44 52 0c ff ff 02 00 14 44 0b 5f T2._ADR......D._ 01f0: 53 44 44 01 08 47 42 55 32 11 0a 0a 07 00 00 00 SDD..GBU2....... 0200: 00 00 a0 00 8c 47 42 55 32 0a 00 47 42 32 30 8c .....GBU2..GB20. 0210: 47 42 55 32 0a 01 47 42 32 31 8c 47 42 55 32 0a GBU2..GB21.GBU2. 0220: 02 47 42 32 32 8c 47 42 55 32 0a 03 47 42 32 33 .GB22.GBU2..GB23 0230: 8c 47 42 55 32 0a 04 47 42 32 34 8c 47 42 55 32 .GBU2..GB24.GBU2 0240: 0a 05 47 42 32 35 8c 47 42 55 32 0a 06 47 42 32 ..GB25.GBU2..GB2 0250: 36 a0 46 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 6.F...h....h..W7 0260: 38 32 a0 1e 7b 57 37 38 32 0a 08 00 70 0a 10 47 82..{W782...p..G 0270: 42 32 30 70 0a 03 47 42 32 31 70 0a ef 47 42 32 B20p..GB21p..GB2 0280: 36 a1 16 70 0a 90 47 42 32 30 70 0a 03 47 42 32 6..p..GB20p..GB2 0290: 31 70 0a ef 47 42 32 36 70 47 42 55 32 47 54 46 1p..GB26pGBU2GTF 02a0: 32 14 0b 5f 47 54 46 00 a4 47 54 46 32 2.._GTF..GTF2 SSDT @ 0xbf6d981a 0000: 53 53 44 54 a3 00 00 00 01 ed 42 72 74 52 65 66 SSDT......BrtRef 0010: 44 44 30 31 42 52 54 00 00 10 00 00 49 4e 54 4c DD01BRT.....INTL 0020: 24 06 05 20 10 4e 07 5c 2f 04 5f 53 42 5f 50 43 $.. .N.\/._SB_PC 0030: 49 30 47 46 58 30 44 44 30 33 14 1e 5f 42 43 4c I0GFX0DD03.._BCL 0040: 00 a4 12 16 0a 0a 46 0a 28 0a 00 0a 0a 0a 14 0a ......F.(....... 0050: 1e 0a 28 0a 32 0a 3c 0a 46 14 25 5f 42 43 4d 01 ..(.2.<.F.%_BCM. 0060: 78 68 0a 0a 60 61 70 61 5c 2f 05 5f 53 42 5f 50 xh..`apa\/._SB_P 0070: 43 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 14 CI0LPCBEC0_BRTS. 0080: 23 5f 42 51 43 00 77 5c 2f 05 5f 53 42 5f 50 43 #_BQC.w\/._SB_PC 0090: 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 0a 0a I0LPCBEC0_BRTS.. 00a0: 60 a4 60 `.` SSDT @ 0xbf6d8e10 0000: 53 53 44 54 5f 02 00 00 01 c8 50 6d 52 65 66 00 SSDT_.....PmRef. 0010: 43 70 75 30 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu0Tst..0..INTL 0020: 24 06 05 20 10 4a 23 5c 2e 5f 50 52 5f 43 50 55 $.. .J#\._PR_CPU 0030: 30 08 5f 54 50 43 0a 00 14 4d 06 5f 50 54 43 00 0._TPC...M._PTC. 0040: a0 37 7b 50 44 43 30 0a 04 00 a4 12 2c 02 11 14 .7{PDC0.....,... 0050: 0a 11 82 0c 00 7f 00 00 00 00 00 00 00 00 00 00 ................ 0060: 00 79 00 11 14 0a 11 82 0c 00 7f 00 00 00 00 00 .y.............. 0070: 00 00 00 00 00 00 79 00 a4 12 2c 02 11 14 0a 11 ......y...,..... 0080: 82 0c 00 01 04 01 00 10 10 00 00 00 00 00 00 79 ...............y 0090: 00 11 14 0a 11 82 0c 00 01 04 01 00 10 10 00 00 ................ 00a0: 00 00 00 00 79 00 08 54 53 53 49 12 41 07 08 12 ....y..TSSI.A... 00b0: 0d 05 0a 64 0b e8 03 0a 00 0a 00 0a 00 12 0d 05 ...d............ 00c0: 0a 58 0b 6b 03 0a 00 0a 0f 0a 00 12 0d 05 0a 4b .X.k...........K 00d0: 0b ee 02 0a 00 0a 0e 0a 00 12 0d 05 0a 3f 0b 71 .............?.q 00e0: 02 0a 00 0a 0d 0a 00 12 0d 05 0a 32 0b f4 01 0a ...........2.... 00f0: 00 0a 0c 0a 00 12 0d 05 0a 26 0b 77 01 0a 00 0a .........&.w.... 0100: 0b 0a 00 12 0c 05 0a 19 0a fa 0a 00 0a 0a 0a 00 ................ 0110: 12 0c 05 0a 0d 0a 7d 0a 00 0a 09 0a 00 08 54 53 ......}.......TS 0120: 53 4d 12 41 07 08 12 0d 05 0a 64 0b e8 03 0a 00 SM.A......d..... 0130: 0a 00 0a 00 12 0d 05 0a 58 0b 6b 03 0a 00 0a 1e ........X.k..... 0140: 0a 00 12 0d 05 0a 4b 0b ee 02 0a 00 0a 1c 0a 00 ......K......... 0150: 12 0d 05 0a 3f 0b 71 02 0a 00 0a 1a 0a 00 12 0d ....?.q......... 0160: 05 0a 32 0b f4 01 0a 00 0a 18 0a 00 12 0d 05 0a ..2............. 0170: 26 0b 77 01 0a 00 0a 16 0a 00 12 0c 05 0a 19 0a &.w............. 0180: fa 0a 00 0a 14 0a 00 12 0c 05 0a 0d 0a 7d 0a 00 .............}.. 0190: 0a 12 0a 00 08 54 53 53 46 0a 00 14 43 08 5f 54 .....TSSF...C._T 01a0: 53 53 00 a0 47 06 90 92 54 53 53 46 5b 12 5f 50 SS..G...TSSF[._P 01b0: 53 53 00 70 5f 50 53 53 60 70 87 60 61 76 61 70 SS.p_PSS`p.`avap 01c0: 83 88 83 88 60 61 00 0a 01 00 62 70 0a 00 63 a2 ....`a....bp..c. 01d0: 35 95 63 87 54 53 53 49 70 78 77 62 74 0a 08 63 5.c.TSSIpxwbt..c 01e0: 00 00 0a 08 00 00 64 70 64 88 83 88 54 53 53 49 ......dpd...TSSI 01f0: 63 00 0a 01 00 70 64 88 83 88 54 53 53 4d 63 00 c....pd...TSSMc. 0200: 0a 01 00 75 63 70 ff 54 53 53 46 a0 0e 7b 50 44 ...ucp.TSSF..{PD 0210: 43 30 0a 04 00 a4 54 53 53 4d a4 54 53 53 49 14 C0....TSSM.TSSI. 0220: 3f 5f 54 53 44 00 a0 27 90 7b 43 46 47 44 0c 00 ?_TSD..'.{CFGD.. 0230: 00 00 01 00 92 7b 50 44 43 30 0a 04 00 a4 12 0f .....{PDC0...... 0240: 01 12 0c 05 0a 05 0a 00 0a 00 0a fd 0a 02 a4 12 ................ 0250: 0f 01 12 0c 05 0a 05 0a 00 0a 00 0a fc 0a 01 ............... SSDT @ 0xbf6d8d6a 0000: 53 53 44 54 a6 00 00 00 01 6d 50 6d 52 65 66 00 SSDT.....mPmRef. 0010: 43 70 75 31 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu1Tst..0..INTL 0020: 24 06 05 20 10 41 08 5c 2e 5f 50 52 5f 43 50 55 $.. .A.\._PR_CPU 0030: 31 08 5f 54 50 43 0a 00 14 16 5f 50 54 43 00 a4 1._TPC...._PTC.. 0040: 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 54 43 14 \/._PR_CPU0_PTC. 0050: 16 5f 54 53 53 00 a4 5c 2f 03 5f 50 52 5f 43 50 ._TSS..\/._PR_CP 0060: 55 30 5f 54 53 53 14 3f 5f 54 53 44 00 a0 27 90 U0_TSS.?_TSD..'. 0070: 7b 43 46 47 44 0c 00 00 00 01 00 92 7b 50 44 43 {CFGD.......{PDC 0080: 31 0a 04 00 a4 12 0f 01 12 0c 05 0a 05 0a 00 0a 1............... 0090: 00 0a fd 0a 02 a4 12 0f 01 12 0c 05 0a 05 0a 00 ................ 00a0: 0a 01 0a fc 0a 01 ...... SSDT @ 0xbf6d8884 0000: 53 53 44 54 e6 04 00 00 01 df 50 6d 52 65 66 00 SSDT......PmRef. 0010: 43 70 75 50 6d 00 00 00 00 30 00 00 49 4e 54 4c CpuPm....0..INTL 0020: 24 06 05 20 10 45 08 5c 00 08 53 53 44 54 12 43 $.. .E.\..SSDT.C 0030: 05 0c 0d 43 50 55 30 49 53 54 20 00 0c 9e 95 6d ...CPU0IST ....m 0040: bf 0c b4 01 00 00 0d 43 50 55 31 49 53 54 20 00 .......CPU1IST . 0050: 0c 52 97 6d bf 0c c8 00 00 00 0d 43 50 55 30 43 .R.m.......CPU0C 0060: 53 54 20 00 0c 6f 90 6d bf 0c aa 04 00 00 0d 43 ST ..o.m.......C 0070: 50 55 31 43 53 54 20 00 0c 19 95 6d bf 0c 85 00 PU1CST ....m.... 0080: 00 00 08 43 46 47 44 0c f1 69 3f 11 08 5c 50 44 ...CFGD..i?..\PD 0090: 43 30 0c 00 00 00 80 08 5c 50 44 43 31 0c 00 00 C0......\PDC1... 00a0: 00 80 08 5c 53 44 54 4c 0a 00 10 4d 21 5c 2e 5f ...\SDTL...M!\._ 00b0: 50 52 5f 43 50 55 30 08 48 49 30 5f 0a 00 08 48 PR_CPU0.HI0_...H 00c0: 43 30 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a C0_...H._PDC..h. 00d0: 00 52 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 .REVS.h..SIZEp.h 00e0: 60 70 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a `pt`...a[.h.@wa. 00f0: 08 00 54 45 4d 50 08 53 54 53 30 11 07 0a 04 00 ..TEMP.STS0..... 0100: 00 00 00 73 53 54 53 30 54 45 4d 50 62 5f 4f 53 ...sSTS0TEMPb_OS 0110: 43 11 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 C......w@.).G... 0120: 70 58 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 pXq9SREVSSIZEb.I 0130: 19 5f 4f 53 43 04 8a 6b 0a 00 53 54 53 30 8a 6b ._OSC..k..STS0.k 0140: 0a 04 43 41 50 30 8a 68 0a 00 49 49 44 30 8a 68 ..CAP0.h..IID0.h 0150: 0a 04 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 ..IID1.h..IID2.h 0160: 0a 0c 49 49 44 33 08 55 49 44 30 11 13 0a 10 16 ..IID3.UID0..... 0170: a6 77 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a .w@.).G...pXq9S. 0180: 55 49 44 30 0a 00 45 49 44 30 8a 55 49 44 30 0a UID0..EID0.UID0. 0190: 04 45 49 44 31 8a 55 49 44 30 0a 08 45 49 44 32 .EID1.UID0..EID2 01a0: 8a 55 49 44 30 0a 0c 45 49 44 33 a0 32 92 90 90 .UID0..EID3.2... 01b0: 93 49 49 44 30 45 49 44 30 93 49 49 44 31 45 49 .IID0EID0.IID1EI 01c0: 44 31 90 93 49 49 44 32 45 49 44 32 93 49 49 44 D1..IID2EID2.IID 01d0: 33 45 49 44 33 70 0a 06 53 54 53 30 a4 6b a0 0f 3EID3p..STS0.k.. 01e0: 92 93 69 0a 01 70 0a 0a 53 54 53 30 a4 6b 7d 7b ..i..p..STS0.k}{ 01f0: 50 44 43 30 0c ff ff ff 7f 00 43 41 50 30 50 44 PDC0......CAP0PD 0200: 43 30 70 7b 50 44 43 30 0a ff 00 50 43 50 30 a0 C0p{PDC0...PCP0. 0210: 4c 05 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b L.{CFGD....A...{ 0220: 43 46 47 44 0c 00 00 00 01 00 93 7b 50 44 43 30 CFGD.......{PDC0 0230: 0a 09 00 0a 09 92 7b 53 44 54 4c 0a 01 00 7d 53 ......{SDTL...}S 0240: 44 54 4c 0a 01 53 44 54 4c 5b 80 49 53 54 30 00 DTL..SDTL[.IST0. 0250: 83 88 53 53 44 54 0a 01 00 83 88 53 53 44 54 0a ..SSDT.....SSDT. 0260: 02 00 5b 20 49 53 54 30 48 49 30 5f a0 49 05 7b ..[ IST0HI0_.I.{ 0270: 43 46 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 CFGD....N...{CFG 0280: 44 0c 00 00 00 01 00 7b 50 44 43 30 0a 18 00 92 D......{PDC0.... 0290: 7b 53 44 54 4c 0a 02 00 7d 53 44 54 4c 0a 02 53 {SDTL...}SDTL..S 02a0: 44 54 4c 5b 80 43 53 54 30 00 83 88 53 53 44 54 DTL[.CST0...SSDT 02b0: 0a 07 00 83 88 53 53 44 54 0a 08 00 5b 20 43 53 .....SSDT...[ CS 02c0: 54 30 48 43 30 5f a4 6b 10 4d 21 5c 2e 5f 50 52 T0HC0_.k.M!\._PR 02d0: 5f 43 50 55 31 08 48 49 31 5f 0a 00 08 48 43 31 _CPU1.HI1_...HC1 02e0: 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a 00 52 _...H._PDC..h..R 02f0: 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 60 70 EVS.h..SIZEp.h`p 0300: 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a 08 00 t`...a[.h.@wa... 0310: 54 45 4d 50 08 53 54 53 31 11 07 0a 04 00 00 00 TEMP.STS1....... 0320: 00 73 53 54 53 31 54 45 4d 50 62 5f 4f 53 43 11 .sSTS1TEMPb_OSC. 0330: 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 70 58 .....w@.).G...pX 0340: 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 19 5f q9SREVSSIZEb.I._ 0350: 4f 53 43 04 8a 6b 0a 00 53 54 53 31 8a 6b 0a 04 OSC..k..STS1.k.. 0360: 43 41 50 31 8a 68 0a 00 49 49 44 30 8a 68 0a 04 CAP1.h..IID0.h.. 0370: 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 0a 0c IID1.h..IID2.h.. 0380: 49 49 44 33 08 55 49 44 31 11 13 0a 10 16 a6 77 IID3.UID1......w 0390: 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a 55 49 @.).G...pXq9S.UI 03a0: 44 31 0a 00 45 49 44 30 8a 55 49 44 31 0a 04 45 D1..EID0.UID1..E 03b0: 49 44 31 8a 55 49 44 31 0a 08 45 49 44 32 8a 55 ID1.UID1..EID2.U 03c0: 49 44 31 0a 0c 45 49 44 33 a0 32 92 90 90 93 49 ID1..EID3.2....I 03d0: 49 44 30 45 49 44 30 93 49 49 44 31 45 49 44 31 ID0EID0.IID1EID1 03e0: 90 93 49 49 44 32 45 49 44 32 93 49 49 44 33 45 ..IID2EID2.IID3E 03f0: 49 44 33 70 0a 06 53 54 53 31 a4 6b a0 0f 92 93 ID3p..STS1.k.... 0400: 69 0a 01 70 0a 0a 53 54 53 31 a4 6b 7d 7b 50 44 i..p..STS1.k}{PD 0410: 43 31 0c ff ff ff 7f 00 43 41 50 31 50 44 43 31 C1......CAP1PDC1 0420: 70 7b 50 44 43 31 0a ff 00 50 43 50 31 a0 4c 05 p{PDC1...PCP1.L. 0430: 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b 43 46 {CFGD....A...{CF 0440: 47 44 0c 00 00 00 01 00 93 7b 50 44 43 31 0a 09 GD.......{PDC1.. 0450: 00 0a 09 92 7b 53 44 54 4c 0a 10 00 7d 53 44 54 ....{SDTL...}SDT 0460: 4c 0a 10 53 44 54 4c 5b 80 49 53 54 31 00 83 88 L..SDTL[.IST1... 0470: 53 53 44 54 0a 04 00 83 88 53 53 44 54 0a 05 00 SSDT.....SSDT... 0480: 5b 20 49 53 54 31 48 49 31 5f a0 49 05 7b 43 46 [ IST1HI1_.I.{CF 0490: 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 44 0c GD....N...{CFGD. 04a0: 00 00 00 01 00 7b 50 44 43 31 0a 18 00 92 7b 53 .....{PDC1....{S 04b0: 44 54 4c 0a 20 00 7d 53 44 54 4c 0a 20 53 44 54 DTL. .}SDTL. SDT 04c0: 4c 5b 80 43 53 54 31 00 83 88 53 53 44 54 0a 0a L[.CST1...SSDT.. 04d0: 00 83 88 53 53 44 54 0a 0b 00 5b 20 43 53 54 31 ...SSDT...[ CST1 04e0: 48 43 31 5f a4 6b HC1_.k XSDT @ 0xbf6d87f0 0000: 58 53 44 54 94 00 00 00 01 c2 4c 45 4e 4f 56 4f XSDT......LENOVO 0010: 54 50 2d 36 38 20 20 20 00 00 04 06 20 4c 54 50 TP-68 .... LTP 0020: 00 00 00 00 d2 fb 6d bf 00 00 00 00 c6 fc 6d bf ......m.......m. 0030: 00 00 00 00 2e fd 6d bf 00 00 00 00 66 fd 6d bf ......m.....f.m. 0040: 00 00 00 00 a2 fd 6d bf 00 00 00 00 d4 fd 6d bf ......m.......m. 0050: 00 00 00 00 fa fd 6d bf 00 00 00 00 70 ff 6d bf ......m.....p.m. 0060: 00 00 00 00 d8 ff 6d bf 00 00 00 00 bd 98 6d bf ......m.......m. 0070: 00 00 00 00 1a 98 6d bf 00 00 00 00 10 8e 6d bf ......m.......m. 0080: 00 00 00 00 6a 8d 6d bf 00 00 00 00 84 88 6d bf ....j.m.......m. 0090: 00 00 00 00 .... FACP @ 0xbf6dfbd2 0000: 46 41 43 50 f4 00 00 00 03 52 54 4f 53 43 50 4c FACP.....RTOSCPL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 41 4c 41 4e CRESTLNE....ALAN 0020: 01 00 00 00 c0 2f 6e bf 6a 9b 6d bf 00 02 09 00 ...../n.j.m..... 0030: b2 00 00 00 f0 f1 00 80 00 10 00 00 00 00 00 00 ................ 0040: 04 10 00 00 00 00 00 00 20 10 00 00 08 10 00 00 ........ ....... 0050: 28 10 00 00 00 00 00 00 04 02 01 04 08 00 00 85 (............... 0060: 01 00 23 00 00 00 00 00 01 03 0d 00 32 00 00 00 ..#.........2... 0070: a5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f 6e bf 00 00 00 00 6a 9b 6d bf ...../n.....j.m. 0090: 00 00 00 00 01 20 00 00 00 10 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 20 10 00 00 00 00 00 00 ........ ....... 00d0: 01 20 00 00 08 10 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 28 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (............... 00f0: 00 00 00 00 .... TCPA @ 0xbf6dfda2 0000: 54 43 50 41 32 00 00 00 01 8f 49 6e 74 65 6c 20 TCPA2.....Intel 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 4c 4f 48 52 CRESTLNE....LOHR 0020: 5a 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 Z............... 0030: 00 00 .. fwts-test/acpidump-0001/test-0001.sh000077500000000000000000000010571465205512700171040ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpidump against known ACPI tables" NAME=test-0001.sh TMPLOG=$TMP/acpidump.log.$$ $FWTS --show-tests | grep acpidump > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/acpidump-0001/acpidump.log acpidump - | grep "^[0-9]*[ ]*acpidump" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/acpidump-0001/acpidump-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/acpitables-0001/000077500000000000000000000000001465205512700155125ustar00rootroot00000000000000fwts-test/acpitables-0001/acpidump-0001.log000066400000000000000000004054211465205512700204030ustar00rootroot00000000000000DSDT @ 0xbf6d9b6a 0000: 44 53 44 54 f4 5f 00 00 02 11 54 4f 53 43 50 4c DSDT._....TOSCPL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 49 4e 54 4c CRESTLNE....INTL 0020: 08 06 06 20 08 5a 30 30 30 01 08 5a 30 30 31 0a ... .Z000..Z001. 0030: 02 08 5a 30 30 32 0a 04 08 5a 30 30 33 0a 08 08 ..Z002...Z003... 0040: 5a 30 30 34 00 08 5a 30 30 35 0a 0f 08 5a 30 30 Z004..Z005...Z00 0050: 36 0a 0d 08 5a 30 30 37 0a 0b 08 5a 30 30 38 0a 6...Z007...Z008. 0060: 09 08 45 43 44 59 0a 07 5b 01 4d 55 54 58 00 5b ..ECDY..[.MUTX.[ 0070: 80 50 52 54 30 01 0a 80 0a 04 5b 81 0b 50 52 54 .PRT0.....[..PRT 0080: 30 13 50 38 30 48 20 14 4e 07 50 38 58 48 0a a0 0.P80H .N.P8XH.. 0090: 17 93 68 00 70 7d 7b 50 38 30 44 0c 00 ff ff ff ..h.p}{P80D..... 00a0: 00 69 00 50 38 30 44 a0 1b 93 68 01 70 7d 7b 50 .i.P80D...h.p}{P 00b0: 38 30 44 0c ff 00 ff ff 00 79 69 0a 08 00 00 50 80D......yi....P 00c0: 38 30 44 a0 1c 93 68 0a 02 70 7d 7b 50 38 30 44 80D...h..p}{P80D 00d0: 0c ff ff 00 ff 00 79 69 0a 10 00 00 50 38 30 44 ......yi....P80D 00e0: a0 1c 93 68 0a 03 70 7d 7b 50 38 30 44 0c ff ff ...h..p}{P80D... 00f0: ff 00 00 79 69 0a 18 00 00 50 38 30 44 70 50 38 ...yi....P80DpP8 0100: 30 44 50 38 30 48 14 0c 5f 50 49 43 01 70 68 47 0DP80H.._PIC.phG 0110: 50 49 43 14 46 06 5f 50 54 53 01 70 00 50 38 30 PIC.F._PTS.p.P80 0120: 44 50 38 58 48 00 68 a0 1e 93 68 0a 03 70 01 5c DP8XH.h...h..p.\ 0130: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0140: 30 5f 53 33 4c 44 a0 33 93 68 0a 04 70 01 5c 2f 0_S3LD.3.h..p.\/ 0150: 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 ._SB_PCI0LPCBEC0 0160: 5f 53 33 4c 44 5c 2f 04 5f 53 42 5f 50 43 49 30 _S3LD\/._SB_PCI0 0170: 4c 50 43 42 50 48 53 53 0a 0e 14 4c 1c 5f 57 41 LPCBPHSS...L._WA 0180: 4b 01 50 38 58 48 01 0a ab a0 30 91 93 68 0a 03 K.P8XH....0..h.. 0190: 93 68 0a 04 a0 25 7b 43 46 47 44 0c 00 00 00 01 .h...%{CFGD..... 01a0: 00 a0 18 90 7b 43 46 47 44 0a f0 00 93 4f 53 59 ....{CFGD....OSY 01b0: 53 0b d1 07 54 52 41 50 0a 3d a0 18 93 52 50 31 S...TRAP.=...RP1 01c0: 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 D..\/._SB_PCI0RP 01d0: 30 31 00 a0 18 93 52 50 32 44 00 86 5c 2f 03 5f 01....RP2D..\/._ 01e0: 53 42 5f 50 43 49 30 52 50 30 32 00 a0 18 93 52 SB_PCI0RP02....R 01f0: 50 33 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 P3D..\/._SB_PCI0 0200: 52 50 30 33 00 a0 18 93 52 50 34 44 00 86 5c 2f RP03....RP4D..\/ 0210: 03 5f 53 42 5f 50 43 49 30 52 50 30 34 00 a0 18 ._SB_PCI0RP04... 0220: 93 52 50 35 44 00 86 5c 2f 03 5f 53 42 5f 50 43 .RP5D..\/._SB_PC 0230: 49 30 52 50 30 35 00 a0 18 93 52 50 36 44 00 86 I0RP05....RP6D.. 0240: 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 36 00 \/._SB_PCI0RP06. 0250: a0 12 93 68 0a 03 50 38 58 48 00 0a 30 54 52 41 ...h..P8XH..0TRA 0260: 50 0a 46 a0 43 0d 93 68 0a 04 50 38 58 48 00 0a P.F.C..h..P8XH.. 0270: 40 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 @\/._SB_PCI0LPCB 0280: 50 48 53 53 0a 0f 70 57 41 4b 46 60 70 00 57 41 PHSS..pWAKF`p.WA 0290: 4b 46 7b 60 0a 05 60 a0 18 93 60 01 50 38 58 48 KF{`..`...`.P8XH 02a0: 00 0a 41 86 5c 2e 5f 53 42 5f 50 57 52 42 0a 02 ..A.\._SB_PWRB.. 02b0: a0 46 08 44 54 53 45 54 52 41 50 0a 47 a0 42 06 .F.DTSETRAP.G.B. 02c0: 90 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 .\/._SB_PCI0LPCB 02d0: 45 43 4f 4b 93 45 43 44 59 00 a0 27 92 95 44 54 ECOK.ECDY..'..DT 02e0: 53 31 44 54 53 32 70 44 54 53 31 5c 2f 05 5f 53 S1DTS2pDTS1\/._S 02f0: 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b B_PCI0LPCBEC0_SK 0300: 54 41 a1 1d 70 44 54 53 32 5c 2f 05 5f 53 42 5f TA..pDTS2\/._SB_ 0310: 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 PCI0LPCBEC0_SKTA 0320: a1 16 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 0330: 42 50 48 53 53 0a 10 5c 2e 5f 50 52 5f 52 50 50 BPHSS..\._PR_RPP 0340: 43 a4 12 04 02 00 00 14 1e 47 45 54 42 0b 77 68 C........GETB.wh 0350: 0a 08 60 77 69 0a 08 61 5b 13 6a 60 61 54 42 46 ..`wi..a[.j`aTBF 0360: 33 a4 54 42 46 33 14 42 09 50 4e 4f 54 08 a0 4a 3.TBF3.B.PNOT..J 0370: 06 4d 50 45 4e a0 31 7b 50 44 43 30 0a 08 00 86 .MPEN.1{PDC0.... 0380: 5c 2e 5f 50 52 5f 43 50 55 30 0a 80 a0 1a 7b 50 \._PR_CPU0....{P 0390: 44 43 30 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC0...[".d.\._PR 03a0: 5f 43 50 55 30 0a 81 a0 31 7b 50 44 43 31 0a 08 _CPU0...1{PDC1.. 03b0: 00 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 a0 1a ..\._PR_CPU1.... 03c0: 7b 50 44 43 31 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC1...[".d.\._ 03d0: 50 52 5f 43 50 55 31 0a 81 a1 1f 86 5c 2e 5f 50 PR_CPU1.....\._P 03e0: 52 5f 43 50 55 30 0a 80 5b 22 0a 64 86 5c 2e 5f R_CPU0..[".d.\._ 03f0: 50 52 5f 43 50 55 30 0a 81 14 17 54 52 41 50 09 PR_CPU0....TRAP. 0400: 70 68 53 4d 49 46 70 00 54 52 50 30 a4 53 4d 49 phSMIFp.TRP0.SMI 0410: 46 10 41 0f 5f 53 42 5f 14 4a 0e 5f 49 4e 49 00 F.A._SB_.J._INI. 0420: 70 0b 99 99 4d 41 52 4b a0 1c 44 54 53 45 54 52 p...MARK..DTSETR 0430: 41 50 0a 47 5e 2f 03 50 43 49 30 4c 50 43 42 50 AP.G^/.PCI0LPCBP 0440: 48 53 53 0a 10 70 0b d0 07 4f 53 59 53 a0 4a 09 HSS..p...OSYS.J. 0450: 5b 12 5f 4f 53 49 60 a0 18 5f 4f 53 49 0d 4c 69 [._OSI`.._OSI.Li 0460: 6e 75 78 00 70 01 4c 49 4e 58 70 00 45 43 44 59 nux.p.LINXp.ECDY 0470: a0 1b 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 .._OSI.Windows 2 0480: 30 30 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 001.p...OSYS.._O 0490: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04a0: 53 50 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f SP1.p...OSYS.._O 04b0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04c0: 53 50 32 00 70 0b d2 07 4f 53 59 53 a0 1b 5f 4f SP2.p...OSYS.._O 04d0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 00 SI.Windows 2006. 04e0: 70 0b d6 07 4f 53 59 53 a0 14 90 4d 50 45 4e 93 p...OSYS...MPEN. 04f0: 4f 53 59 53 0b d1 07 54 52 41 50 0a 3d 54 52 41 OSYS...TRAP.=TRA 0500: 50 0a 2b 5b 80 47 4e 56 53 00 0c bc 2d 6e bf 0b P.+[.GNVS...-n.. 0510: 00 01 5b 81 45 24 47 4e 56 53 10 4f 53 59 53 10 ..[.E$GNVS.OSYS. 0520: 53 4d 49 46 08 50 52 4d 30 08 50 52 4d 31 08 53 SMIF.PRM0.PRM1.S 0530: 43 49 46 08 50 52 4d 32 08 50 52 4d 33 08 4c 43 CIF.PRM2.PRM3.LC 0540: 4b 46 08 50 52 4d 34 08 50 52 4d 35 08 50 38 30 KF.PRM4.PRM5.P80 0550: 44 20 4c 49 44 53 08 50 57 52 53 08 44 42 47 53 D LIDS.PWRS.DBGS 0560: 08 4c 49 4e 58 08 00 08 41 43 54 31 08 41 43 54 .LINX...ACT1.ACT 0570: 54 08 50 53 56 54 08 54 43 31 56 08 54 43 32 56 T.PSVT.TC1V.TC2V 0580: 08 54 53 50 56 08 43 52 54 54 08 44 54 53 45 08 .TSPV.CRTT.DTSE. 0590: 44 54 53 31 08 44 54 53 32 08 00 40 05 41 50 49 DTS1.DTS2..@.API 05a0: 43 08 4d 50 45 4e 08 50 43 50 30 08 50 43 50 31 C.MPEN.PCP0.PCP1 05b0: 08 50 50 43 4d 08 00 28 43 4d 41 50 08 43 4d 42 .PPCM..(CMAP.CMB 05c0: 50 08 4c 50 54 50 08 46 44 43 50 08 00 30 49 47 P.LPTP.FDCP..0IG 05d0: 44 53 08 54 4c 53 54 08 43 41 44 4c 08 50 41 44 DS.TLST.CADL.PAD 05e0: 4c 08 43 53 54 45 10 4e 53 54 45 10 53 53 54 45 L.CSTE.NSTE.SSTE 05f0: 10 4e 44 49 44 08 44 49 44 31 20 44 49 44 32 20 .NDID.DID1 DID2 0600: 44 49 44 33 20 44 49 44 34 20 44 49 44 35 20 00 DID3 DID4 DID5 . 0610: 40 06 42 4c 43 53 08 42 52 54 4c 08 41 4c 53 45 @.BLCS.BRTL.ALSE 0620: 08 41 4c 41 46 08 4c 4c 4f 57 08 4c 48 49 48 08 .ALAF.LLOW.LHIH. 0630: 00 08 45 4d 41 45 08 45 4d 41 50 10 45 4d 41 4c ..EMAE.EMAP.EMAL 0640: 10 00 08 4d 45 46 45 08 00 18 54 50 4d 50 08 54 ...MEFE...TPMP.T 0650: 50 4d 45 08 00 40 04 47 54 46 30 38 47 54 46 32 PME..@.GTF08GTF2 0660: 38 49 44 45 4d 08 47 54 46 31 38 00 40 09 41 53 8IDEM.GTF18.@.AS 0670: 4c 42 20 49 42 54 54 08 49 50 41 54 08 49 54 56 LB IBTT.IPAT.ITV 0680: 46 08 49 54 56 4d 08 49 50 53 43 08 49 42 4c 43 F.ITVM.IPSC.IBLC 0690: 08 49 42 49 41 08 49 53 53 43 08 49 34 30 39 08 .IBIA.ISSC.I409. 06a0: 49 35 30 39 08 49 36 30 39 08 49 37 30 39 08 49 I509.I609.I709.I 06b0: 44 4d 4d 08 49 44 4d 53 08 49 46 31 45 08 48 56 DMM.IDMS.IF1E.HV 06c0: 43 4f 08 4e 58 44 31 20 4e 58 44 32 20 4d 41 52 CO.NXD1 NXD2 MAR 06d0: 4b 10 42 52 41 44 08 42 54 45 4e 08 56 56 45 4e K.BRAD.BTEN.VVEN 06e0: 08 42 47 54 4c 08 54 4d 45 45 01 00 07 53 43 55 .BGTL.TMEE...SCU 06f0: 30 01 53 43 55 31 01 53 43 55 32 01 53 43 55 33 0.SCU1.SCU2.SCU3 0700: 01 00 04 58 4b 53 50 01 58 4b 49 4e 01 58 4b 49 ...XKSP.XKIN.XKI 0710: 44 01 58 4b 4f 4b 01 00 04 42 47 55 31 08 42 53 D.XKOK...BGU1.BS 0720: 54 31 08 42 46 43 31 10 57 4b 4c 4e 08 57 41 4b T1.BFC1.WKLN.WAK 0730: 46 08 44 53 4d 44 08 42 41 59 53 08 48 41 50 45 F.DSMD.BAYS.HAPE 0740: 01 00 07 44 54 53 4d 01 00 07 4f 44 54 31 08 4f ...DTSM...ODT1.O 0750: 44 54 32 08 44 54 53 57 08 08 44 53 45 4e 01 08 DT2.DTSW..DSEN.. 0760: 45 43 4f 4e 00 08 47 50 49 43 00 08 43 54 59 50 ECON..GPIC..CTYP 0770: 00 08 4c 30 31 43 00 08 56 46 4e 30 00 08 56 46 ..L01C..VFN0..VF 0780: 4e 31 00 10 4a 7c 5f 47 50 45 14 46 35 5f 4c 30 N1..J|_GPE.F5_L0 0790: 31 00 72 4c 30 31 43 01 4c 30 31 43 50 38 58 48 1.rL01C.L01CP8XH 07a0: 00 01 50 38 58 48 01 4c 30 31 43 a0 48 08 90 93 ..P8XH.L01C.H... 07b0: 52 50 31 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 RP1D.\/._SB_PCI0 07c0: 52 50 30 31 48 50 53 58 5b 22 0a 64 a0 40 05 5c RP01HPSX[".d.@.\ 07d0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 /._SB_PCI0RP01PD 07e0: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 07f0: 50 30 31 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f P01PDCXp.\/._SB_ 0800: 50 43 49 30 52 50 30 31 48 50 53 58 86 5c 2f 03 PCI0RP01HPSX.\/. 0810: 5f 53 42 5f 50 43 49 30 52 50 30 31 00 a1 16 70 _SB_PCI0RP01...p 0820: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0830: 48 50 53 58 a0 48 08 90 93 52 50 32 44 00 5c 2f HPSX.H...RP2D.\/ 0840: 04 5f 53 42 5f 50 43 49 30 52 50 30 32 48 50 53 ._SB_PCI0RP02HPS 0850: 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 5f 50 X[".d.@.\/._SB_P 0860: 43 49 30 52 50 30 32 50 44 43 58 70 01 5c 2f 04 CI0RP02PDCXp.\/. 0870: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 44 43 58 _SB_PCI0RP02PDCX 0880: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 0890: 32 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 2HPSX.\/._SB_PCI 08a0: 30 52 50 30 32 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP02...p.\/._SB 08b0: 5f 50 43 49 30 52 50 30 32 48 50 53 58 a0 48 08 _PCI0RP02HPSX.H. 08c0: 90 93 52 50 33 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP3D.\/._SB_PC 08d0: 49 30 52 50 30 33 48 50 53 58 5b 22 0a 64 a0 40 I0RP03HPSX[".d.@ 08e0: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 .\/._SB_PCI0RP03 08f0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0900: 30 52 50 30 33 50 44 43 58 70 01 5c 2f 04 5f 53 0RP03PDCXp.\/._S 0910: 42 5f 50 43 49 30 52 50 30 33 48 50 53 58 86 5c B_PCI0RP03HPSX.\ 0920: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 33 00 a1 /._SB_PCI0RP03.. 0930: 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .p.\/._SB_PCI0RP 0940: 30 33 48 50 53 58 a0 48 08 90 93 52 50 34 44 00 03HPSX.H...RP4D. 0950: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 48 \/._SB_PCI0RP04H 0960: 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 PSX[".d.@.\/._SB 0970: 5f 50 43 49 30 52 50 30 34 50 44 43 58 70 01 5c _PCI0RP04PDCXp.\ 0980: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 44 /._SB_PCI0RP04PD 0990: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 09a0: 50 30 34 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 P04HPSX.\/._SB_P 09b0: 43 49 30 52 50 30 34 00 a1 16 70 01 5c 2f 04 5f CI0RP04...p.\/._ 09c0: 53 42 5f 50 43 49 30 52 50 30 34 48 50 53 58 a0 SB_PCI0RP04HPSX. 09d0: 48 08 90 93 52 50 35 44 00 5c 2f 04 5f 53 42 5f H...RP5D.\/._SB_ 09e0: 50 43 49 30 52 50 30 35 48 50 53 58 5b 22 0a 64 PCI0RP05HPSX[".d 09f0: a0 40 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .@.\/._SB_PCI0RP 0a00: 30 35 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 05PDCXp.\/._SB_P 0a10: 43 49 30 52 50 30 35 50 44 43 58 70 01 5c 2f 04 CI0RP05PDCXp.\/. 0a20: 5f 53 42 5f 50 43 49 30 52 50 30 35 48 50 53 58 _SB_PCI0RP05HPSX 0a30: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 35 .\/._SB_PCI0RP05 0a40: 00 a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ...p.\/._SB_PCI0 0a50: 52 50 30 35 48 50 53 58 a0 48 08 90 93 52 50 36 RP05HPSX.H...RP6 0a60: 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 D.\/._SB_PCI0RP0 0a70: 36 48 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 6HPSX[".d.@.\/._ 0a80: 53 42 5f 50 43 49 30 52 50 30 36 50 44 43 58 70 SB_PCI0RP06PDCXp 0a90: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 0aa0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0ab0: 30 52 50 30 36 48 50 53 58 86 5c 2f 03 5f 53 42 0RP06HPSX.\/._SB 0ac0: 5f 50 43 49 30 52 50 30 36 00 a1 16 70 01 5c 2f _PCI0RP06...p.\/ 0ad0: 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 50 53 ._SB_PCI0RP06HPS 0ae0: 58 14 42 0d 5f 4c 30 32 00 70 00 47 50 45 43 a0 X.B._L02.p.GPEC. 0af0: 4d 0a 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 M.\/._SB_PCI0LPC 0b00: 42 45 43 4f 4b a0 4e 04 93 44 54 53 57 01 a0 27 BECOK.N..DTSW..' 0b10: 92 95 44 54 53 31 44 54 53 32 70 44 54 53 31 5c ..DTS1DTS2pDTS1\ 0b20: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0b30: 30 5f 53 4b 54 41 a1 1d 70 44 54 53 32 5c 2f 05 0_SKTA..pDTS2\/. 0b40: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f _SB_PCI0LPCBEC0_ 0b50: 53 4b 54 41 a1 48 04 a0 27 92 95 4f 44 54 31 4f SKTA.H..'..ODT1O 0b60: 44 54 32 70 4f 44 54 31 5c 2f 05 5f 53 42 5f 50 DT2pODT1\/._SB_P 0b70: 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 CI0LPCBEC0_SKTA. 0b80: 1d 70 4f 44 54 32 5c 2f 05 5f 53 42 5f 50 43 49 .pODT2\/._SB_PCI 0b90: 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 16 5c 0LPCBEC0_SKTA..\ 0ba0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 50 48 /._SB_PCI0LPCBPH 0bb0: 53 53 0a 10 14 18 5f 4c 30 33 00 86 5c 2f 03 5f SS...._L03..\/._ 0bc0: 53 42 5f 50 43 49 30 55 53 42 31 0a 02 14 18 5f SB_PCI0USB1...._ 0bd0: 4c 30 34 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 L04..\/._SB_PCI0 0be0: 55 53 42 32 0a 02 14 18 5f 4c 30 35 00 86 5c 2f USB2...._L05..\/ 0bf0: 03 5f 53 42 5f 50 43 49 30 55 53 42 35 0a 02 14 ._SB_PCI0USB5... 0c00: 36 5f 4c 30 36 00 a0 27 5c 2f 04 5f 53 42 5f 50 6_L06..'\/._SB_P 0c10: 43 49 30 47 46 58 30 47 53 53 45 5c 2f 04 5f 53 CI0GFX0GSSE\/._S 0c20: 42 5f 50 43 49 30 47 46 58 30 47 53 43 49 a1 07 B_PCI0GFX0GSCI.. 0c30: 70 01 53 43 49 53 14 43 1f 5f 4c 30 39 00 a0 41 p.SCIS.C._L09..A 0c40: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0c50: 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PSPXp.\/._SB_PCI 0c60: 30 52 50 30 31 50 53 50 58 70 01 5c 2f 04 5f 53 0RP01PSPXp.\/._S 0c70: 42 5f 50 43 49 30 52 50 30 31 50 4d 53 58 86 5c B_PCI0RP01PMSX.\ 0c80: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 31 0a 02 /._SB_PCI0RP01.. 0c90: a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .A.\/._SB_PCI0RP 0ca0: 30 32 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 02PSPXp.\/._SB_P 0cb0: 43 49 30 52 50 30 32 50 53 50 58 70 01 5c 2f 04 CI0RP02PSPXp.\/. 0cc0: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 4d 53 58 _SB_PCI0RP02PMSX 0cd0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 0ce0: 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 ...A.\/._SB_PCI0 0cf0: 52 50 30 33 50 53 50 58 70 01 5c 2f 04 5f 53 42 RP03PSPXp.\/._SB 0d00: 5f 50 43 49 30 52 50 30 33 50 53 50 58 70 01 5c _PCI0RP03PSPXp.\ 0d10: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 50 4d /._SB_PCI0RP03PM 0d20: 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 SX.\/._SB_PCI0RP 0d30: 30 33 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 03...A.\/._SB_PC 0d40: 49 30 52 50 30 34 50 53 50 58 70 01 5c 2f 04 5f I0RP04PSPXp.\/._ 0d50: 53 42 5f 50 43 49 30 52 50 30 34 50 53 50 58 70 SB_PCI0RP04PSPXp 0d60: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 .\/._SB_PCI0RP04 0d70: 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 PMSX.\/._SB_PCI0 0d80: 52 50 30 34 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f RP04...A.\/._SB_ 0d90: 50 43 49 30 52 50 30 35 50 53 50 58 70 01 5c 2f PCI0RP05PSPXp.\/ 0da0: 04 5f 53 42 5f 50 43 49 30 52 50 30 35 50 53 50 ._SB_PCI0RP05PSP 0db0: 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 Xp.\/._SB_PCI0RP 0dc0: 30 35 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 05PMSX.\/._SB_PC 0dd0: 49 30 52 50 30 35 0a 02 a0 41 05 5c 2f 04 5f 53 I0RP05...A.\/._S 0de0: 42 5f 50 43 49 30 52 50 30 36 50 53 50 58 70 01 B_PCI0RP06PSPXp. 0df0: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 50 \/._SB_PCI0RP06P 0e00: 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 SPXp.\/._SB_PCI0 0e10: 52 50 30 36 50 4d 53 58 86 5c 2f 03 5f 53 42 5f RP06PMSX.\/._SB_ 0e20: 50 43 49 30 52 50 30 36 0a 02 14 18 5f 4c 30 42 PCI0RP06...._L0B 0e30: 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 50 43 49 ..\/._SB_PCI0PCI 0e40: 42 0a 02 14 18 5f 4c 30 43 00 86 5c 2f 03 5f 53 B...._L0C..\/._S 0e50: 42 5f 50 43 49 30 55 53 42 33 0a 02 14 4b 0b 5f B_PCI0USB3...K._ 0e60: 4c 30 44 00 a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 L0D..;\/._SB_PCI 0e70: 30 45 48 43 31 50 4d 45 53 70 01 5c 2f 04 5f 53 0EHC1PMESp.\/._S 0e80: 42 5f 50 43 49 30 45 48 43 31 50 4d 45 53 86 5c B_PCI0EHC1PMES.\ 0e90: 2f 03 5f 53 42 5f 50 43 49 30 45 48 43 31 0a 02 /._SB_PCI0EHC1.. 0ea0: a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 30 45 48 43 .;\/._SB_PCI0EHC 0eb0: 32 50 4d 45 53 70 01 5c 2f 04 5f 53 42 5f 50 43 2PMESp.\/._SB_PC 0ec0: 49 30 45 48 43 32 50 4d 45 53 86 5c 2f 03 5f 53 I0EHC2PMES.\/._S 0ed0: 42 5f 50 43 49 30 45 48 43 32 0a 02 a0 3b 5c 2f B_PCI0EHC2...;\/ 0ee0: 04 5f 53 42 5f 50 43 49 30 48 44 45 46 50 4d 45 ._SB_PCI0HDEFPME 0ef0: 53 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 48 44 Sp.\/._SB_PCI0HD 0f00: 45 46 50 4d 45 53 86 5c 2f 03 5f 53 42 5f 50 43 EFPMES.\/._SB_PC 0f10: 49 30 48 44 45 46 0a 02 14 18 5f 4c 30 45 00 86 I0HDEF...._L0E.. 0f20: 5c 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 34 0a \/._SB_PCI0USB4. 0f30: 02 14 1c 5f 4c 31 42 00 80 4c 50 4f 4c 4c 50 4f ..._L1B..LPOLLPO 0f40: 4c 86 5c 2e 5f 53 42 5f 4c 49 44 30 0a 80 10 46 L.\._SB_LID0...F 0f50: 0b 5f 50 52 5f 5b 83 0b 43 50 55 30 00 10 10 00 ._PR_[..CPU0.... 0f60: 00 06 5b 83 0b 43 50 55 31 01 10 10 00 00 06 14 ..[..CPU1....... 0f70: 45 09 52 50 50 43 00 a0 4d 08 93 4f 53 59 53 0b E.RPPC..M..OSYS. 0f80: d2 07 a0 42 08 7b 43 46 47 44 01 00 a0 42 04 94 ...B.{CFGD...B.. 0f90: 5e 2e 43 50 55 30 5f 50 50 43 00 74 5e 2e 43 50 ^.CPU0_PPC.t^.CP 0fa0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 0fb0: 43 50 4e 4f 54 72 5e 2e 43 50 55 30 5f 50 50 43 CPNOTr^.CPU0_PPC 0fc0: 01 5e 2e 43 50 55 30 5f 50 50 43 50 4e 4f 54 a1 .^.CPU0_PPCPNOT. 0fd0: 35 72 5e 2e 43 50 55 30 5f 50 50 43 01 5e 2e 43 5r^.CPU0_PPC.^.C 0fe0: 50 55 30 5f 50 50 43 50 4e 4f 54 74 5e 2e 43 50 PU0_PPCPNOTt^.CP 0ff0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 1000: 43 50 4e 4f 54 08 46 57 53 4f 0d 46 57 53 4f 00 CPNOT.FWSO.FWSO. 1010: 08 5f 50 53 43 00 14 12 5f 50 53 30 00 70 5f 50 ._PSC..._PS0.p_P 1020: 53 43 60 70 00 5f 50 53 43 14 0d 5f 50 53 33 00 SC`p._PSC.._PS3. 1030: 70 0a 03 5f 50 53 43 10 8c fb 04 5f 53 42 5f 5b p.._PSC...._SB_[ 1040: 82 4f 3e 41 4d 57 30 08 5f 48 49 44 0d 70 6e 70 .O>AMW0._HID.pnp 1050: 30 63 31 34 00 08 5f 55 49 44 00 08 5f 57 44 47 0c14.._UID.._WDG 1060: 11 3f 0a 3c a7 1d 85 2e 53 d0 5f 49 9d fa 1a 4a .?.<....S._I...J 1070: d6 2e 6a 86 41 43 01 00 3b 6d 43 71 dd fb 72 4c ..j.AC..;mCq..rL 1080: bc b8 43 5b fe 0d 64 f9 42 43 01 00 21 12 90 05 ..C[..d.BC..!... 1090: 66 d5 d1 11 b2 f0 00 a0 c9 06 29 10 42 41 01 00 f.........).BA.. 10a0: 08 53 54 41 43 11 07 0a 04 01 14 03 00 14 1f 57 .STAC..........W 10b0: 51 41 43 01 70 0d 4d 58 4d 54 43 43 6f 6e 66 69 QAC.p.MXMTCConfi 10c0: 67 44 61 74 61 00 5b 31 a4 53 54 41 43 08 53 54 gData.[1.STAC.ST 10d0: 42 43 11 07 0a 04 01 00 00 00 14 34 57 51 42 43 BC.........4WQBC 10e0: 01 70 0d 47 65 74 20 4d 58 4d 54 43 43 6f 6e 74 .p.Get MXMTCCont 10f0: 72 6f 6c 44 61 74 61 3a 20 53 54 42 43 20 3d 20 rolData: STBC = 1100: 00 5b 31 70 53 54 42 43 5b 31 a4 53 54 42 43 14 .[1pSTBC[1.STBC. 1110: 47 06 57 53 42 43 02 70 69 53 54 42 43 70 0d 53 G.WSBC.piSTBCp.S 1120: 65 74 20 4d 58 4d 54 43 43 6f 6e 74 72 6f 6c 44 et MXMTCControlD 1130: 61 74 61 3a 20 53 54 42 43 20 3d 20 00 5b 31 70 ata: STBC = .[1p 1140: 53 54 42 43 5b 31 a0 30 93 5e 5e 2f 03 50 43 49 STBC[1.0.^^/.PCI 1150: 30 4c 50 43 42 45 43 4f 4b 01 70 83 88 53 54 42 0LPCBECOK.p..STB 1160: 43 01 00 5e 5e 2f 04 50 43 49 30 4c 50 43 42 45 C..^^/.PCI0LPCBE 1170: 43 30 5f 53 4b 54 43 08 57 51 42 41 11 43 2b 0b C0_SKTC.WQBA.C+. 1180: ae 02 46 4f 4d 42 01 00 00 00 9e 02 00 00 c0 0b ..FOMB.......... 1190: 00 00 44 53 00 01 1a 7d da 54 28 d9 85 00 01 06 ..DS...}.T(..... 11a0: 18 42 10 07 10 0a 4b 61 02 c9 21 52 3c 18 94 05 .B....Ka..!R<... 11b0: 10 43 88 57 04 44 04 84 bc 0a b0 29 c0 24 88 fa .C.W.D.....).$.. 11c0: f7 87 28 09 0e 25 04 42 12 05 98 17 a0 5b 80 61 ..(..%.B.....[.a 11d0: 01 b6 05 98 16 e0 18 92 4a 03 a7 04 96 02 21 a1 ........J.....!. 11e0: 02 94 0b f0 2d 40 3b a2 24 0b b0 0c 23 02 8f 82 ....-@;.$...#... 11f0: a1 71 68 ec 30 2c 13 4c 83 38 8c b2 91 45 60 dc .qh.0,.L.8...E`. 1200: 4e 05 c8 15 20 4c 80 78 54 61 34 07 45 e0 42 63 N... L.xTa4.E.Bc 1210: 64 40 c8 a3 00 ab a3 d0 a4 12 d8 bd 00 65 02 2c d@...........e., 1220: 0a 10 27 c0 9a 00 63 48 32 28 40 9b 00 5b 20 42 ..'...cH2(@..[ B 1230: 0f d4 19 8a 46 70 02 51 6a 46 11 48 ac 1a 01 85 ....Fp.QjF.H.... 1240: 12 34 46 b0 10 81 c2 86 37 46 98 03 88 d1 fe 20 .4F.....7F..... 1250: 48 20 05 e3 66 91 46 83 1a 6b 82 63 f7 68 4e b8 H ..f.F..k.c.hN. 1260: 73 01 d2 e7 26 90 a3 3b b8 3a 07 4d 86 c7 b0 1e s...&..;.:.M.... 1270: 06 d8 29 00 ef 1a 50 d3 3f 78 26 08 0e 35 44 8f ..)...P.?x&..5D. 1280: 3a dc 09 1c fb 91 30 88 b3 3b 6e ac c3 c9 68 d0 :.....0..;n...h. 1290: a5 0a 30 7b 00 d0 d0 12 9c f6 99 84 7e 0f 38 9f ..0{........~.8. 12a0: 9e 21 89 fc 41 a0 46 e6 ff 3f b4 c7 78 5a 31 43 .!..A.F..?..xZ1C 12b0: 3e 0b 1c 16 13 0b a1 4d 6a 3c 40 40 e1 d1 40 08 >......Mj<@@..@. 12c0: 6f 06 9e af 09 46 86 90 93 f1 a0 06 e0 41 d7 3a o....F.......A.: 12d0: 32 8d 27 a6 21 cf e8 00 22 bf 32 78 0c 41 02 f9 2.'.!...".2x.A.. 12e0: c4 60 b8 c7 81 13 78 02 f0 59 40 10 92 00 21 51 .`....x..Y@...!Q 12f0: e3 a7 47 08 7e 7a 78 93 30 28 1f d2 99 f9 90 e1 ..G.~zx.0(...... 1300: 11 c2 07 c4 7b 9f 3b 19 c1 29 7b a4 e0 b0 7e 0e ....{.;..){...~. 1310: 20 c0 af 0f 8f 0d 09 7c ae 08 8c 1d aa fd 0a 40 ......|.......@ 1320: 08 1e ed 51 e0 54 23 1c 2d 78 08 8a 1c 03 4a cc ...Q.T#.-x....J. 1330: 18 50 03 38 85 d0 e7 73 04 47 14 25 f6 21 19 da .P.8...s.G.%.!.. 1340: 08 e1 1f 39 4e c1 f7 8b 23 3d ad 23 78 91 f0 08 ...9N...#=.#x... 1350: 30 e1 ce 28 a8 38 30 f4 ff 7f 4c 01 dc 7a 3b a6 0..(.80...L..z;. 1360: 80 3e c0 31 05 50 fc ff 3f a6 00 87 a8 c7 14 f4 .>.1.P..?....... 1370: 40 0c 7c 2e a1 0d ff 96 c1 8e 03 87 74 6a 8f 28 @.|.........tj.( 1380: 80 29 79 47 14 50 8c 14 d6 f1 04 18 05 3c 9b a0 .)yG.P.......<.. 1390: 22 1d 4f 80 ce ff ff 78 02 58 b8 9a bc 92 84 7d ".O....x.X.....} 13a0: 1e 78 1d 89 14 e3 41 e2 b5 e4 c1 24 46 98 08 8f .x....A....$F... 13b0: 27 1e 47 c0 b7 82 28 91 8e 3e c4 83 49 28 63 3e '.G...(..>..I(c> 13c0: a3 84 89 f9 04 70 22 ef 27 46 0a 73 2a 8f 27 2c .....p".'F.s*.', 13d0: c4 f1 04 a0 85 e2 e3 09 3a 2c 84 fe ff c7 13 dc ........:,...... 13e0: e1 c1 a7 0c fc 85 0c c6 f9 04 30 24 f0 7c 02 ca ..........0$.|.. 13f0: db 18 e6 80 02 8c 14 da f4 a9 d1 a8 55 83 32 35 ............U.25 1400: ca 34 a8 d5 a7 52 63 c6 4c 9c 52 bc 6c 8d df f2 .4...Rc.L.R.l... 1410: 9e 09 02 b1 20 0a 81 38 cc f3 42 20 96 a2 01 84 .... ..8..B .... 1420: 85 06 a1 42 a9 05 e2 98 20 34 92 0a 10 f6 ff 07 ...B.... 4...... 1430: 5b 82 1b 4c 49 44 30 08 5f 48 49 44 0c 41 d0 0c [..LID0._HID.A.. 1440: 0d 14 0b 5f 4c 49 44 00 a4 4c 50 4f 4c 5b 82 0f ..._LID..LPOL[.. 1450: 50 57 52 42 08 5f 48 49 44 0c 41 d0 0c 0c 5b 82 PWRB._HID.A...[. 1460: 84 b9 04 50 43 49 30 14 09 5f 53 33 44 00 a4 0a ...PCI0.._S3D... 1470: 02 14 09 5f 53 34 44 00 a4 0a 02 08 5f 48 49 44 ..._S4D....._HID 1480: 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 d0 0a 03 5b .A...._CID.A...[ 1490: 82 43 0e 4d 43 48 43 08 5f 41 44 52 00 5b 80 48 .C.MCHC._ADR.[.H 14a0: 42 55 53 02 0a 40 0a c0 5b 81 4a 0c 48 42 55 53 BUS..@..[.J.HBUS 14b0: 03 45 50 45 4e 01 00 0b 45 50 42 52 14 00 20 4d .EPEN...EPBR.. M 14c0: 48 45 4e 01 00 0d 4d 48 42 52 12 00 40 0a 50 58 HEN...MHBR..@.PX 14d0: 45 4e 01 50 58 53 5a 02 00 17 50 58 42 52 06 00 EN.PXSZ...PXBR.. 14e0: 20 44 49 45 4e 01 00 0b 44 49 42 52 14 00 20 49 DIEN...DIBR.. I 14f0: 50 45 4e 01 00 0b 49 50 42 52 14 00 40 0e 00 04 PEN...IPBR..@... 1500: 50 4d 30 48 02 00 02 50 4d 31 4c 02 00 02 50 4d PM0H...PM1L...PM 1510: 31 48 02 00 02 50 4d 32 4c 02 00 02 50 4d 32 48 1H...PM2L...PM2H 1520: 02 00 02 50 4d 33 4c 02 00 02 50 4d 33 48 02 00 ...PM3L...PM3H.. 1530: 02 50 4d 34 4c 02 00 02 50 4d 34 48 02 00 02 50 .PM4L...PM4H...P 1540: 4d 35 4c 02 00 02 50 4d 35 48 02 00 02 50 4d 36 M5L...PM5H...PM6 1550: 4c 02 00 02 50 4d 36 48 02 00 02 00 07 48 45 4e L...PM6H.....HEN 1560: 41 01 00 40 05 54 55 55 44 10 00 40 06 00 04 54 A..@.TUUD..@...T 1570: 4c 55 44 0c 08 42 55 46 30 11 4d 20 0b 08 02 88 LUD..BUF0.M .... 1580: 0d 00 02 0c 00 00 00 00 00 ff 00 00 00 00 01 87 ................ 1590: 17 00 01 0c 03 00 00 00 00 00 00 00 00 f7 0c 00 ................ 15a0: 00 00 00 00 00 f8 0c 00 00 47 01 f8 0c f8 0c 01 .........G...... 15b0: 08 87 17 00 01 0c 03 00 00 00 00 00 0d 00 00 ff ................ 15c0: ff 00 00 00 00 00 00 00 f3 00 00 87 17 00 00 0c ................ 15d0: 03 00 00 00 00 00 00 0a 00 ff ff 0b 00 00 00 00 ................ 15e0: 00 00 00 02 00 87 17 00 00 0c 03 00 00 00 00 00 ................ 15f0: 00 0c 00 ff 3f 0c 00 00 00 00 00 00 40 00 00 87 ....?.......@... 1600: 17 00 00 0c 03 00 00 00 00 00 40 0c 00 ff 7f 0c ..........@..... 1610: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 1620: 00 00 00 00 80 0c 00 ff bf 0c 00 00 00 00 00 00 ................ 1630: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0c @............... 1640: 00 ff ff 0c 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1650: 00 0c 03 00 00 00 00 00 00 0d 00 ff 3f 0d 00 00 ............?... 1660: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1670: 00 00 40 0d 00 ff 7f 0d 00 00 00 00 00 00 40 00 ..@...........@. 1680: 00 87 17 00 00 0c 03 00 00 00 00 00 80 0d 00 ff ................ 1690: bf 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c ........@....... 16a0: 03 00 00 00 00 00 c0 0d 00 ff ff 0d 00 00 00 00 ................ 16b0: 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 ..@............. 16c0: 00 0e 00 ff 3f 0e 00 00 00 00 00 00 40 00 00 87 ....?.......@... 16d0: 17 00 00 0c 03 00 00 00 00 00 40 0e 00 ff 7f 0e ..........@..... 16e0: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 16f0: 00 00 00 00 80 0e 00 ff bf 0e 00 00 00 00 00 00 ................ 1700: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0e @............... 1710: 00 ff ff 0e 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1720: 00 0c 03 00 00 00 00 00 00 0f 00 ff ff 0f 00 00 ................ 1730: 00 00 00 00 00 01 00 87 17 00 00 0c 03 00 00 00 ................ 1740: 00 00 00 00 00 ff ff ff df 00 00 00 00 00 00 00 ................ 1750: 00 87 17 00 00 0c 03 00 00 00 00 00 00 00 f0 ff ................ 1760: ff bf fe 00 00 00 00 00 00 c0 0e 87 17 00 00 0c ................ 1770: 03 00 00 00 00 00 00 d4 fe ff 4f d4 fe 00 00 00 ..........O..... 1780: 00 00 00 00 00 79 00 14 4b 3d 5f 43 52 53 08 a0 .....y..K=_CRS.. 1790: 1c 5e 2e 4d 43 48 43 50 4d 31 4c 8a 42 55 46 30 .^.MCHCPM1L.BUF0 17a0: 0a 7c 43 30 4c 4e 70 00 43 30 4c 4e a0 1f 93 5e .|C0LNp.C0LN...^ 17b0: 2e 4d 43 48 43 50 4d 31 4c 01 8d 42 55 46 30 0b .MCHCPM1L..BUF0. 17c0: 58 03 43 30 52 57 70 00 43 30 52 57 a0 1c 5e 2e X.C0RWp.C0RW..^. 17d0: 4d 43 48 43 50 4d 31 48 8a 42 55 46 30 0a 96 43 MCHCPM1H.BUF0..C 17e0: 34 4c 4e 70 00 43 34 4c 4e a0 1f 93 5e 2e 4d 43 4LNp.C4LN...^.MC 17f0: 48 43 50 4d 31 48 01 8d 42 55 46 30 0b 28 04 43 HCPM1H..BUF0.(.C 1800: 34 52 57 70 00 43 34 52 57 a0 1c 5e 2e 4d 43 48 4RWp.C4RW..^.MCH 1810: 43 50 4d 32 4c 8a 42 55 46 30 0a b0 43 38 4c 4e CPM2L.BUF0..C8LN 1820: 70 00 43 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 p.C8LN...^.MCHCP 1830: 4d 32 4c 01 8d 42 55 46 30 0b f8 04 43 38 52 57 M2L..BUF0...C8RW 1840: 70 00 43 38 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d p.C8RW..^.MCHCPM 1850: 32 48 8a 42 55 46 30 0a ca 43 43 4c 4e 70 00 43 2H.BUF0..CCLNp.C 1860: 43 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 32 48 CLN...^.MCHCPM2H 1870: 01 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 43 ..BUF0...CCRWp.C 1880: 43 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d 33 4c 8a CRW..^.MCHCPM3L. 1890: 42 55 46 30 0a e4 44 30 4c 4e 70 00 44 30 4c 4e BUF0..D0LNp.D0LN 18a0: a0 1f 93 5e 2e 4d 43 48 43 50 4d 33 4c 01 8d 42 ...^.MCHCPM3L..B 18b0: 55 46 30 0b 98 06 44 30 52 57 70 00 44 30 52 57 UF0...D0RWp.D0RW 18c0: a0 1c 5e 2e 4d 43 48 43 50 4d 33 48 8a 42 55 46 ..^.MCHCPM3H.BUF 18d0: 30 0a fe 44 34 4c 4e 70 00 44 34 4c 4e a0 1f 93 0..D4LNp.D4LN... 18e0: 5e 2e 4d 43 48 43 50 4d 33 48 01 8d 42 55 46 30 ^.MCHCPM3H..BUF0 18f0: 0b 68 07 44 34 52 57 70 00 44 34 52 57 a0 1d 5e .h.D4RWp.D4RW..^ 1900: 2e 4d 43 48 43 50 4d 34 4c 8a 42 55 46 30 0b 18 .MCHCPM4L.BUF0.. 1910: 01 44 38 4c 4e 70 00 44 38 4c 4e a0 1f 93 5e 2e .D8LNp.D8LN...^. 1920: 4d 43 48 43 50 4d 34 4c 01 8d 42 55 46 30 0b 38 MCHCPM4L..BUF0.8 1930: 08 44 38 52 57 70 00 44 38 52 57 a0 1d 5e 2e 4d .D8RWp.D8RW..^.M 1940: 43 48 43 50 4d 34 48 8a 42 55 46 30 0b 32 01 44 CHCPM4H.BUF0.2.D 1950: 43 4c 4e 70 00 44 43 4c 4e a0 1f 93 5e 2e 4d 43 CLNp.DCLN...^.MC 1960: 48 43 50 4d 34 48 01 8d 42 55 46 30 0b 08 09 44 HCPM4H..BUF0...D 1970: 43 52 57 70 00 44 43 52 57 a0 1d 5e 2e 4d 43 48 CRWp.DCRW..^.MCH 1980: 43 50 4d 35 4c 8a 42 55 46 30 0b 4c 01 45 30 4c CPM5L.BUF0.L.E0L 1990: 4e 70 00 45 30 4c 4e a0 1f 93 5e 2e 4d 43 48 43 Np.E0LN...^.MCHC 19a0: 50 4d 35 4c 01 8d 42 55 46 30 0b d8 09 45 30 52 PM5L..BUF0...E0R 19b0: 57 70 00 45 30 52 57 a0 1d 5e 2e 4d 43 48 43 50 Wp.E0RW..^.MCHCP 19c0: 4d 35 48 8a 42 55 46 30 0b 66 01 45 34 4c 4e 70 M5H.BUF0.f.E4LNp 19d0: 00 45 34 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d .E4LN...^.MCHCPM 19e0: 35 48 01 8d 42 55 46 30 0b a8 0a 45 34 52 57 70 5H..BUF0...E4RWp 19f0: 00 45 34 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 .E4RW..^.MCHCPM6 1a00: 4c 8a 42 55 46 30 0b 80 01 45 38 4c 4e 70 00 45 L.BUF0...E8LNp.E 1a10: 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 4c 8LN...^.MCHCPM6L 1a20: 01 8d 42 55 46 30 0b 78 0b 45 38 52 57 70 00 45 ..BUF0.x.E8RWp.E 1a30: 38 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 48 8a 8RW..^.MCHCPM6H. 1a40: 42 55 46 30 0b 9a 01 45 43 4c 4e 70 00 45 43 4c BUF0...ECLNp.ECL 1a50: 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 48 01 8d N...^.MCHCPM6H.. 1a60: 42 55 46 30 0b 48 0c 45 43 52 57 70 00 45 43 52 BUF0.H.ECRWp.ECR 1a70: 57 a0 1d 5e 2e 4d 43 48 43 50 4d 30 48 8a 42 55 W..^.MCHCPM0H.BU 1a80: 46 30 0b b4 01 46 30 4c 4e 70 00 46 30 4c 4e a0 F0...F0LNp.F0LN. 1a90: 1f 93 5e 2e 4d 43 48 43 50 4d 30 48 01 8d 42 55 ..^.MCHCPM0H..BU 1aa0: 46 30 0b 18 0d 46 30 52 57 70 00 46 30 52 57 8a F0...F0RWp.F0RW. 1ab0: 42 55 46 30 0b c2 01 4d 31 4d 4e 8a 42 55 46 30 BUF0...M1MN.BUF0 1ac0: 0b c6 01 4d 31 4d 58 8a 42 55 46 30 0b ce 01 4d ...M1MX.BUF0...M 1ad0: 31 4c 4e 8a 42 55 46 30 0b dc 01 4d 32 4d 4e 8a 1LN.BUF0...M2MN. 1ae0: 42 55 46 30 0b e0 01 4d 32 4d 58 8a 42 55 46 30 BUF0...M2MX.BUF0 1af0: 0b e8 01 4d 32 4c 4e 79 5e 2e 4d 43 48 43 50 58 ...M2LNy^.MCHCPX 1b00: 42 52 0a 1a 4d 31 4d 58 7a 0c 00 00 00 10 5e 2e BR..M1MXz.....^. 1b10: 4d 43 48 43 50 58 53 5a 60 72 4d 31 4d 58 60 4d MCHCPXSZ`rM1MX`M 1b20: 32 4d 4e 72 74 4d 32 4d 58 4d 32 4d 4e 00 01 4d 2MNrtM2MXM2MN..M 1b30: 32 4c 4e 74 4d 31 4d 58 01 4d 31 4d 58 79 5e 2e 2LNtM1MX.M1MXy^. 1b40: 4d 43 48 43 54 4c 55 44 0a 14 4d 31 4d 4e 72 74 MCHCTLUD..M1MNrt 1b50: 4d 31 4d 58 4d 31 4d 4e 00 01 4d 31 4c 4e a4 42 M1MXM1MN..M1LN.B 1b60: 55 46 30 14 47 28 5f 50 52 54 00 a0 45 0f 47 50 UF0.G(_PRT..E.GP 1b70: 49 43 a4 12 4d 0e 13 12 0b 04 0c ff ff 01 00 00 IC..M........... 1b80: 00 0a 10 12 0b 04 0c ff ff 02 00 00 00 0a 10 12 ................ 1b90: 0b 04 0c ff ff 07 00 00 00 0a 10 12 0b 04 0c ff ................ 1ba0: ff 19 00 00 00 0a 14 12 0b 04 0c ff ff 1a 00 00 ................ 1bb0: 00 0a 10 12 0b 04 0c ff ff 1a 00 01 00 0a 15 12 ................ 1bc0: 0c 04 0c ff ff 1a 00 0a 02 00 0a 12 12 0b 04 0c ................ 1bd0: ff ff 1b 00 00 00 0a 16 12 0b 04 0c ff ff 1c 00 ................ 1be0: 00 00 0a 11 12 0b 04 0c ff ff 1c 00 01 00 0a 10 ................ 1bf0: 12 0c 04 0c ff ff 1c 00 0a 02 00 0a 12 12 0c 04 ................ 1c00: 0c ff ff 1c 00 0a 03 00 0a 13 12 0b 04 0c ff ff ................ 1c10: 1d 00 00 00 0a 17 12 0b 04 0c ff ff 1d 00 01 00 ................ 1c20: 0a 13 12 0c 04 0c ff ff 1d 00 0a 02 00 0a 12 12 ................ 1c30: 0b 04 0c ff ff 1f 00 00 00 0a 13 12 0b 04 0c ff ................ 1c40: ff 1f 00 01 00 0a 13 12 0c 04 0c ff ff 1f 00 0a ................ 1c50: 02 00 0a 13 12 0c 04 0c ff ff 1f 00 0a 03 00 0a ................ 1c60: 10 a1 49 18 a4 12 45 18 13 12 13 04 0c ff ff 01 ..I...E......... 1c70: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1c80: 0c ff ff 02 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 ......^.LPCBLNKA 1c90: 00 12 13 04 0c ff ff 07 00 00 5e 2e 4c 50 43 42 ..........^.LPCB 1ca0: 4c 4e 4b 41 00 12 13 04 0c ff ff 19 00 00 5e 2e LNKA..........^. 1cb0: 4c 50 43 42 4c 4e 4b 45 00 12 13 04 0c ff ff 1a LPCBLNKE........ 1cc0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1cd0: 0c ff ff 1a 00 01 5e 2e 4c 50 43 42 4c 4e 4b 46 ......^.LPCBLNKF 1ce0: 00 12 14 04 0c ff ff 1a 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1cf0: 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1b 00 00 5e BLNKC..........^ 1d00: 2e 4c 50 43 42 4c 4e 4b 47 00 12 13 04 0c ff ff .LPCBLNKG....... 1d10: 1c 00 00 5e 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 ...^.LPCBLNKB... 1d20: 04 0c ff ff 1c 00 01 5e 2e 4c 50 43 42 4c 4e 4b .......^.LPCBLNK 1d30: 41 00 12 14 04 0c ff ff 1c 00 0a 02 5e 2e 4c 50 A...........^.LP 1d40: 43 42 4c 4e 4b 43 00 12 14 04 0c ff ff 1c 00 0a CBLNKC.......... 1d50: 03 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0c .^.LPCBLNKD..... 1d60: ff ff 1d 00 00 5e 2e 4c 50 43 42 4c 4e 4b 48 00 .....^.LPCBLNKH. 1d70: 12 13 04 0c ff ff 1d 00 01 5e 2e 4c 50 43 42 4c .........^.LPCBL 1d80: 4e 4b 44 00 12 14 04 0c ff ff 1d 00 0a 02 5e 2e NKD...........^. 1d90: 4c 50 43 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1f LPCBLNKC........ 1da0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 ..^.LPCBLNKD.... 1db0: 0c ff ff 1f 00 01 5e 2e 4c 50 43 42 4c 4e 4b 44 ......^.LPCBLNKD 1dc0: 00 12 14 04 0c ff ff 1f 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1dd0: 42 4c 4e 4b 44 00 12 14 04 0c ff ff 1f 00 0a 03 BLNKD........... 1de0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 40 14 50 ^.LPCBLNKA.[.@.P 1df0: 44 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 DRC._HID.A...._U 1e00: 49 44 01 08 42 55 46 30 11 46 06 0a 62 86 09 00 ID..BUF0.F..b... 1e10: 01 00 00 00 00 00 40 00 00 86 09 00 01 00 00 00 ......@......... 1e20: 00 00 40 00 00 86 09 00 01 00 00 00 00 00 10 00 ..@............. 1e30: 00 86 09 00 01 00 00 00 00 00 10 00 00 86 09 00 ................ 1e40: 01 00 00 00 00 00 00 00 00 86 09 00 01 00 00 d2 ................ 1e50: fe 00 00 02 00 86 09 00 01 00 00 d4 fe 00 50 00 ..............P. 1e60: 00 86 09 00 01 00 50 d4 fe 00 b0 04 00 79 00 14 ......P......y.. 1e70: 4d 0b 5f 43 52 53 08 8a 42 55 46 30 0a 04 52 42 M._CRS..BUF0..RB 1e80: 52 30 79 5e 5e 2e 4c 50 43 42 52 43 42 41 0a 0e R0y^^.LPCBRCBA.. 1e90: 52 42 52 30 8a 42 55 46 30 0a 10 4d 42 52 30 79 RBR0.BUF0..MBR0y 1ea0: 5e 5e 2e 4d 43 48 43 4d 48 42 52 0a 0e 4d 42 52 ^^.MCHCMHBR..MBR 1eb0: 30 8a 42 55 46 30 0a 1c 44 42 52 30 79 5e 5e 2e 0.BUF0..DBR0y^^. 1ec0: 4d 43 48 43 44 49 42 52 0a 0c 44 42 52 30 8a 42 MCHCDIBR..DBR0.B 1ed0: 55 46 30 0a 28 45 42 52 30 79 5e 5e 2e 4d 43 48 UF0.(EBR0y^^.MCH 1ee0: 43 45 50 42 52 0a 0c 45 42 52 30 8a 42 55 46 30 CEPBR..EBR0.BUF0 1ef0: 0a 34 58 42 52 30 79 5e 5e 2e 4d 43 48 43 50 58 .4XBR0y^^.MCHCPX 1f00: 42 52 0a 1a 58 42 52 30 8a 42 55 46 30 0a 38 58 BR..XBR0.BUF0.8X 1f10: 53 5a 30 7a 0c 00 00 00 10 5e 5e 2e 4d 43 48 43 SZ0z.....^^.MCHC 1f20: 50 58 53 5a 58 53 5a 30 a4 42 55 46 30 5b 82 4d PXSZXSZ0.BUF0[.M 1f30: 50 50 45 47 50 08 5f 41 44 52 0c 00 00 01 00 14 PPEGP._ADR...... 1f40: 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 2c A._PRT..3GPIC.., 1f50: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 1f60: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 1f70: 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 12 ............E... 1f80: 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 43 A.........^^.LPC 1f90: 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e 2e BLNKA........^^. 1fa0: 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff 0a LPCBLNKB........ 1fb0: 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 1fc0: 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 1fd0: 00 5b 82 49 46 56 47 41 5f 08 5f 41 44 52 00 08 .[.IFVGA_._ADR.. 1fe0: 53 57 49 54 01 08 43 52 54 41 01 08 4c 43 44 41 SWIT..CRTA..LCDA 1ff0: 01 08 54 56 41 41 01 08 56 4c 44 46 01 5b 80 56 ..TVAA..VLDF.[.V 2000: 49 44 53 02 00 0a c8 5b 81 0b 56 49 44 53 03 56 IDS....[..VIDS.V 2010: 44 49 44 20 14 09 5f 53 54 41 00 a4 0a 0f 08 5f DID .._STA....._ 2020: 50 53 43 00 14 0c 5f 50 53 30 00 70 00 5f 50 53 PSC..._PS0.p._PS 2030: 43 14 0c 5f 50 53 31 00 70 01 5f 50 53 43 14 0d C.._PS1.p._PSC.. 2040: 5f 50 53 33 00 70 0a 03 5f 50 53 43 14 10 5f 44 _PS3.p.._PSC.._D 2050: 4f 53 01 70 7b 68 0a 03 00 53 57 49 54 14 17 5f OS.p{h...SWIT.._ 2060: 44 4f 44 00 a4 12 0f 03 0c 00 01 01 00 0c 10 01 DOD............. 2070: 01 00 0b 00 02 5b 82 4d 08 43 52 54 5f 14 0a 5f .....[.M.CRT_.._ 2080: 41 44 52 00 a4 0b 00 01 14 41 06 5f 44 43 53 00 ADR......A._DCS. 2090: 5e 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 ^^^^.LPCBPHSS..p 20a0: 43 41 44 4c 60 70 43 53 54 45 61 7b 60 0a 02 60 CADL`pCSTEa{`..` 20b0: 7b 61 0a 02 61 a0 08 60 70 01 43 52 54 41 a1 07 {a..a..`p.CRTA.. 20c0: 70 00 43 52 54 41 a0 13 43 52 54 41 a0 08 93 61 p.CRTA..CRTA...a 20d0: 0a 02 a4 0a 1f a1 04 a4 0a 1d a1 0f a0 08 93 61 ...............a 20e0: 0a 02 a4 0a 0f a1 04 a4 0a 0d 14 12 5f 44 47 53 ............_DGS 20f0: 00 a0 07 43 52 54 41 a4 01 a1 03 a4 00 14 06 5f ...CRTA........_ 2100: 44 53 53 01 5b 82 47 0e 4c 43 44 5f 14 0a 5f 41 DSS.[.G.LCD_.._A 2110: 44 52 00 a4 0b 10 01 14 4d 05 5f 44 43 53 00 5e DR......M._DCS.^ 2120: 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 ^^^.LPCBPHSS..pC 2130: 41 44 4c 60 70 43 53 54 45 61 7b 60 01 60 7b 61 ADL`pCSTEa{`.`{a 2140: 01 61 a0 08 60 70 01 4c 43 44 41 a1 07 70 00 4c .a..`p.LCDA..p.L 2150: 43 44 41 a0 12 4c 43 44 41 a0 07 93 61 01 a4 0a CDA..LCDA...a... 2160: 1f a1 04 a4 0a 1d a1 0e a0 07 93 61 01 a4 0a 0f ...........a.... 2170: a1 04 a4 0a 0d 14 12 5f 44 47 53 00 a0 07 4c 43 ......._DGS...LC 2180: 44 41 a4 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 DA........_DSS.. 2190: 1d 5f 42 43 4c 00 a4 12 15 0a 0a 46 0a 28 00 0a ._BCL......F.(.. 21a0: 0a 0a 14 0a 1e 0a 28 0a 32 0a 3c 0a 46 14 20 5f ......(.2.<.F. _ 21b0: 42 43 4d 01 78 68 0a 0a 60 61 70 61 5e 5e 5e 5e BCM.xh..`apa^^^^ 21c0: 2f 03 4c 50 43 42 45 43 30 5f 42 52 54 53 14 1e /.LPCBEC0_BRTS.. 21d0: 5f 42 51 43 00 77 5e 5e 5e 5e 2f 03 4c 50 43 42 _BQC.w^^^^/.LPCB 21e0: 45 43 30 5f 42 52 54 53 0a 0a 60 a4 60 5b 82 4d EC0_BRTS..`.`[.M 21f0: 08 54 56 5f 5f 14 0a 5f 41 44 52 00 a4 0b 00 02 .TV__.._ADR..... 2200: 14 41 06 5f 44 43 53 00 5e 5e 5e 5e 2e 4c 50 43 .A._DCS.^^^^.LPC 2210: 42 50 48 53 53 0a 0c 70 43 41 44 4c 60 70 43 53 BPHSS..pCADL`pCS 2220: 54 45 61 7b 60 0a 04 60 7b 61 0a 04 61 a0 08 60 TEa{`..`{a..a..` 2230: 70 01 54 56 41 41 a1 07 70 00 54 56 41 41 a0 13 p.TVAA..p.TVAA.. 2240: 54 56 41 41 a0 08 93 61 0a 04 a4 0a 1f a1 04 a4 TVAA...a........ 2250: 0a 1d a1 0f a0 08 93 61 0a 04 a4 0a 0f a1 04 a4 .......a........ 2260: 0a 0d 14 12 5f 44 47 53 00 a0 07 54 56 41 41 a4 ...._DGS...TVAA. 2270: 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 49 10 44 ......._DSS..I.D 2280: 53 53 57 00 a0 4a 0e 93 53 57 49 54 00 5e 5e 5e SSW..J..SWIT.^^^ 2290: 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 41 44 4c .LPCBPHSS..pCADL 22a0: 60 70 43 53 54 45 61 a0 16 94 61 01 7b 60 61 56 `pCSTEa...a.{`aV 22b0: 4c 44 46 7b 56 4c 44 46 0a fe 56 4c 44 46 a0 43 LDF{VLDF..VLDF.C 22c0: 0a 56 4c 44 46 a0 27 93 60 0a 09 a0 0b 93 61 0a .VLDF.'.`.....a. 22d0: 08 53 54 42 4c 0a 02 a0 0a 93 61 01 53 54 42 4c .STBL.....a.STBL 22e0: 0a 03 a0 0a 93 61 0a 09 53 54 42 4c 01 a0 28 93 .....a..STBL..(. 22f0: 60 0a 0a a0 0b 93 61 0a 08 53 54 42 4c 0a 05 a0 `.....a..STBL... 2300: 0a 93 61 0a 02 53 54 42 4c 01 a0 0b 93 61 0a 0a ..a..STBL....a.. 2310: 53 54 42 4c 0a 04 a0 4b 04 93 60 0a 0b a0 0b 93 STBL...K..`..... 2320: 61 0a 08 53 54 42 4c 0a 02 a0 0b 93 61 0a 09 53 a..STBL.....a..S 2330: 54 42 4c 0a 05 a0 0a 93 61 01 53 54 42 4c 0a 03 TBL.....a.STBL.. 2340: a0 0b 93 61 0a 0a 53 54 42 4c 0a 04 a0 0a 93 61 ...a..STBL.....a 2350: 0a 02 53 54 42 4c 01 a0 0a 93 61 0a 0b 53 54 42 ..STBL....a..STB 2360: 4c 01 a1 0c 70 01 56 4c 44 46 53 54 42 4c 01 a1 L...p.VLDFSTBL.. 2370: 16 a0 14 93 53 57 49 54 01 5e 5e 5e 2e 4c 50 43 ....SWIT.^^^.LPC 2380: 42 50 48 53 53 01 14 45 0b 53 54 42 4c 01 a0 16 BPHSS..E.STBL... 2390: 93 68 01 70 00 43 52 54 41 70 01 4c 43 44 41 70 .h.p.CRTAp.LCDAp 23a0: 00 54 56 41 41 a0 17 93 68 0a 02 70 01 43 52 54 .TVAA...h..p.CRT 23b0: 41 70 00 4c 43 44 41 70 00 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23c0: 68 0a 03 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 23d0: 00 54 56 41 41 a0 17 93 68 0a 04 70 00 43 52 54 .TVAA...h..p.CRT 23e0: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23f0: 68 0a 05 70 00 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2400: 01 54 56 41 41 a0 17 93 68 0a 06 70 01 43 52 54 .TVAA...h..p.CRT 2410: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 2420: 68 0a 07 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2430: 01 54 56 41 41 86 56 47 41 5f 0a 80 5b 82 42 f8 .TVAA.VGA_..[.B. 2440: 47 46 58 30 08 5f 41 44 52 0c 00 00 02 00 14 10 GFX0._ADR....... 2450: 5f 44 4f 53 01 70 7b 68 0a 07 00 44 53 45 4e 14 _DOS.p{h...DSEN. 2460: 41 26 5f 44 4f 44 00 70 00 4e 44 49 44 a0 15 92 A&_DOD.p.NDID... 2470: 93 44 49 44 4c 00 70 53 44 44 4c 44 49 44 31 44 .DIDL.pSDDLDID1D 2480: 49 44 31 a0 15 92 93 44 44 4c 32 00 70 53 44 44 ID1....DDL2.pSDD 2490: 4c 44 49 44 32 44 49 44 32 a0 15 92 93 44 44 4c LDID2DID2....DDL 24a0: 33 00 70 53 44 44 4c 44 49 44 33 44 49 44 33 a0 3.pSDDLDID3DID3. 24b0: 15 92 93 44 44 4c 34 00 70 53 44 44 4c 44 49 44 ...DDL4.pSDDLDID 24c0: 34 44 49 44 34 a0 15 92 93 44 44 4c 35 00 70 53 4DID4....DDL5.pS 24d0: 44 44 4c 44 49 44 35 44 49 44 35 a0 2c 93 4e 44 DDLDID5DID5.,.ND 24e0: 49 44 01 08 54 4d 50 31 12 07 01 0c ff ff ff ff ID..TMP1........ 24f0: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2500: 31 00 00 a4 54 4d 50 31 a0 46 04 93 4e 44 49 44 1...TMP1.F..NDID 2510: 0a 02 08 54 4d 50 32 12 0c 02 0c ff ff ff ff 0c ...TMP2......... 2520: ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 ....p}.....DID1. 2530: 88 54 4d 50 32 00 00 70 7d 0c 00 00 01 00 44 49 .TMP2..p}.....DI 2540: 44 32 00 88 54 4d 50 32 01 00 a4 54 4d 50 32 a0 D2..TMP2...TMP2. 2550: 4f 05 93 4e 44 49 44 0a 03 08 54 4d 50 33 12 11 O..NDID...TMP3.. 2560: 03 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 2570: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2580: 33 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 3..p}.....DID2.. 2590: 54 4d 50 33 01 00 70 7d 0c 00 00 01 00 44 49 44 TMP3..p}.....DID 25a0: 33 00 88 54 4d 50 33 0a 02 00 a4 54 4d 50 33 a0 3..TMP3....TMP3. 25b0: 48 07 93 4e 44 49 44 0a 04 08 54 4d 50 34 12 16 H..NDID...TMP4.. 25c0: 04 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 25d0: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 25e0: 00 88 54 4d 50 34 00 00 70 7d 0c 00 00 01 00 44 ..TMP4..p}.....D 25f0: 49 44 32 00 88 54 4d 50 34 01 00 70 7d 0c 00 00 ID2..TMP4..p}... 2600: 01 00 44 49 44 33 00 88 54 4d 50 34 0a 02 00 70 ..DID3..TMP4...p 2610: 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d 50 34 }.....DID4..TMP4 2620: 0a 03 00 a4 54 4d 50 34 a0 41 09 94 4e 44 49 44 ....TMP4.A..NDID 2630: 0a 04 08 54 4d 50 35 12 1b 05 0c ff ff ff ff 0c ...TMP5......... 2640: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 2650: ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 88 ...p}.....DID1.. 2660: 54 4d 50 35 00 00 70 7d 0c 00 00 01 00 44 49 44 TMP5..p}.....DID 2670: 32 00 88 54 4d 50 35 01 00 70 7d 0c 00 00 01 00 2..TMP5..p}..... 2680: 44 49 44 33 00 88 54 4d 50 35 0a 02 00 70 7d 0c DID3..TMP5...p}. 2690: 00 00 01 00 44 49 44 34 00 88 54 4d 50 35 0a 03 ....DID4..TMP5.. 26a0: 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d .p}.....DID4..TM 26b0: 50 35 0a 04 00 a4 54 4d 50 35 a4 12 05 01 0b 00 P5....TMP5...... 26c0: 04 5b 82 43 06 44 44 30 31 14 1c 5f 41 44 52 08 .[.C.DD01.._ADR. 26d0: a0 09 93 44 49 44 31 00 a4 01 a1 0b a4 7b 0b ff ...DID1......{.. 26e0: ff 44 49 44 31 00 14 0f 5f 44 43 53 00 a4 43 44 .DID1..._DCS..CD 26f0: 44 53 44 49 44 31 14 0f 5f 44 47 53 00 a4 4e 44 DSDID1.._DGS..ND 2700: 44 53 44 49 44 31 14 1f 5f 44 53 53 01 a0 18 93 DSDID1.._DSS.... 2710: 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 {h...........pNS 2720: 54 45 43 53 54 45 5b 82 44 06 44 44 30 32 14 1d TECSTE[.D.DD02.. 2730: 5f 41 44 52 08 a0 0a 93 44 49 44 32 00 a4 0a 02 _ADR....DID2.... 2740: a1 0b a4 7b 0b ff ff 44 49 44 32 00 14 0f 5f 44 ...{...DID2..._D 2750: 43 53 00 a4 43 44 44 53 44 49 44 32 14 0f 5f 44 CS..CDDSDID2.._D 2760: 47 53 00 a4 4e 44 44 53 44 49 44 32 14 1f 5f 44 GS..NDDSDID2.._D 2770: 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 SS....{h........ 2780: 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 41 07 ...pNSTECSTE[.A. 2790: 44 44 30 33 14 1d 5f 41 44 52 08 a0 0a 93 44 49 DD03.._ADR....DI 27a0: 44 33 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 49 44 D3.......{...DID 27b0: 33 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 33 3..._DCS....DID3 27c0: 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 33 14 .......CDDSDID3. 27d0: 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 44 33 14 ._DGS..NDDSDID3. 27e0: 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 ._DSS....{h..... 27f0: 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 5b ......pNSTECSTE[ 2800: 82 41 07 44 44 30 34 14 1d 5f 41 44 52 08 a0 0a .A.DD04.._ADR... 2810: 93 44 49 44 34 00 a4 0a 04 a1 0b a4 7b 0b ff ff .DID4.......{... 2820: 44 49 44 34 00 14 1c 5f 44 43 53 00 a0 0a 93 44 DID4..._DCS....D 2830: 49 44 34 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 ID4.......CDDSDI 2840: 44 34 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 D4.._DGS..NDDSDI 2850: 44 34 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 D4.._DSS....{h.. 2860: 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 .........pNSTECS 2870: 54 45 5b 82 41 07 44 44 30 35 14 1d 5f 41 44 52 TE[.A.DD05.._ADR 2880: 08 a0 0a 93 44 49 44 35 00 a4 0a 05 a1 0b a4 7b ....DID5.......{ 2890: 0b ff ff 44 49 44 35 00 14 1c 5f 44 43 53 00 a0 ...DID5..._DCS.. 28a0: 0a 93 44 49 44 35 00 a4 0a 0b a1 0a a4 43 44 44 ..DID5.......CDD 28b0: 53 44 49 44 35 14 0f 5f 44 47 53 00 a4 4e 44 44 SDID5.._DGS..NDD 28c0: 53 44 49 44 35 14 1f 5f 44 53 53 01 a0 18 93 7b SDID5.._DSS....{ 28d0: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 28e0: 45 43 53 54 45 14 4e 06 53 44 44 4c 01 75 4e 44 ECSTE.N.SDDL.uND 28f0: 49 44 70 7b 68 0b 0f 0f 00 60 7d 0c 00 00 00 80 IDp{h....`}..... 2900: 60 61 a0 09 93 44 49 44 4c 60 a4 61 a0 09 93 44 `a...DIDL`.a...D 2910: 44 4c 32 60 a4 61 a0 09 93 44 44 4c 33 60 a4 61 DL2`.a...DDL3`.a 2920: a0 09 93 44 44 4c 34 60 a4 61 a0 09 93 44 44 4c ...DDL4`.a...DDL 2930: 35 60 a4 61 a0 09 93 44 44 4c 36 60 a4 61 a0 09 5`.a...DDL6`.a.. 2940: 93 44 44 4c 37 60 a4 61 a0 09 93 44 44 4c 38 60 .DDL7`.a...DDL8` 2950: a4 61 a4 00 14 4a 08 43 44 44 53 01 a0 0f 93 43 .a...J.CDDS....C 2960: 41 44 4c 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 ADL{h..........C 2970: 41 4c 32 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL2{h..........C 2980: 41 4c 33 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL3{h..........C 2990: 41 4c 34 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL4{h..........C 29a0: 41 4c 35 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL5{h..........C 29b0: 41 4c 36 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL6{h..........C 29c0: 41 4c 37 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL7{h..........C 29d0: 41 4c 38 7b 68 0b 0f 0f 00 a4 0a 1f a4 0a 1d 14 AL8{h........... 29e0: 41 08 4e 44 44 53 01 a0 0e 93 4e 41 44 4c 7b 68 A.NDDS....NADL{h 29f0: 0b 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 32 7b 68 0b .........NDL2{h. 2a00: 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 33 7b 68 0b 0f ........NDL3{h.. 2a10: 0f 00 a4 01 a0 0e 93 4e 44 4c 34 7b 68 0b 0f 0f .......NDL4{h... 2a20: 00 a4 01 a0 0e 93 4e 44 4c 35 7b 68 0b 0f 0f 00 ......NDL5{h.... 2a30: a4 01 a0 0e 93 4e 44 4c 36 7b 68 0b 0f 0f 00 a4 .....NDL6{h..... 2a40: 01 a0 0e 93 4e 44 4c 37 7b 68 0b 0f 0f 00 a4 01 ....NDL7{h...... 2a50: a0 0e 93 4e 44 4c 38 7b 68 0b 0f 0f 00 a4 01 a4 ...NDL8{h....... 2a60: 00 14 40 07 42 52 54 4e 09 a0 14 93 7b 44 49 44 ..@.BRTN....{DID 2a70: 31 0b 00 0f 00 0b 00 04 86 44 44 30 31 68 a0 14 1........DD01h.. 2a80: 93 7b 44 49 44 32 0b 00 0f 00 0b 00 04 86 44 44 .{DID2........DD 2a90: 30 32 68 a0 14 93 7b 44 49 44 33 0b 00 0f 00 0b 02h...{DID3..... 2aa0: 00 04 86 44 44 30 33 68 a0 14 93 7b 44 49 44 34 ...DD03h...{DID4 2ab0: 0b 00 0f 00 0b 00 04 86 44 44 30 34 68 a0 14 93 ........DD04h... 2ac0: 7b 44 49 44 35 0b 00 0f 00 0b 00 04 86 44 44 30 {DID5........DD0 2ad0: 35 68 10 24 5e 5e 50 43 49 30 5b 80 4d 43 48 50 5h.$^^PCI0[.MCHP 2ae0: 02 0a 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 ..@..[..MCHP..@0 2af0: 54 41 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 TASM...[.IGDP..@ 2b00: 0a c0 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 ..[.E.IGDP..@... 2b10: 47 49 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 GIVD...GUMA..... 2b20: 47 4d 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 GMFN....@FASLE.. 2b30: 18 47 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 .GSSE.GSSB.GSES. 2b40: 00 30 00 08 43 44 56 4c 05 00 03 00 18 4c 42 50 .0..CDVL.....LBP 2b50: 43 08 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 C..0ASLS [.IGDM. 2b60: 41 53 4c 42 0b 00 20 5b 81 4e 16 49 47 44 4d 00 ASLB.. [.N.IGDM. 2b70: 53 49 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 SIGN@.SIZE OVER 2b80: 53 56 45 52 40 10 56 56 45 52 40 08 47 56 45 52 SVER@.VVER@.GVER 2b90: 40 08 4d 42 4f 58 20 00 40 52 44 52 44 59 20 43 @.MBOX .@RDRDY C 2ba0: 53 54 53 20 43 45 56 54 20 00 40 0a 44 49 44 4c STS CEVT .@.DIDL 2bb0: 20 44 44 4c 32 20 44 44 4c 33 20 44 44 4c 34 20 DDL2 DDL3 DDL4 2bc0: 44 44 4c 35 20 44 44 4c 36 20 44 44 4c 37 20 44 DDL5 DDL6 DDL7 D 2bd0: 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 20 43 50 DL8 CPDL CPL2 CP 2be0: 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 43 50 4c L3 CPL4 CPL5 CPL 2bf0: 36 20 43 50 4c 37 20 43 50 4c 38 20 43 41 44 4c 6 CPL7 CPL8 CADL 2c00: 20 43 41 4c 32 20 43 41 4c 33 20 43 41 4c 34 20 CAL2 CAL3 CAL4 2c10: 43 41 4c 35 20 43 41 4c 36 20 43 41 4c 37 20 43 CAL5 CAL6 CAL7 C 2c20: 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 20 4e 44 AL8 NADL NDL2 ND 2c30: 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 4e 44 4c L3 NDL4 NDL5 NDL 2c40: 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 53 4c 50 6 NDL7 NDL8 ASLP 2c50: 20 54 49 44 58 20 43 48 50 44 20 43 4c 49 44 20 TIDX CHPD CLID 2c60: 43 44 43 4b 20 53 58 53 57 20 45 56 54 53 20 43 CDCK SXSW EVTS C 2c70: 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 43 49 45 NOT NRDY .@.SCIE 2c80: 01 47 45 46 43 04 47 58 46 43 03 47 45 53 46 08 .GEFC.GXFC.GESF. 2c90: 00 10 50 41 52 4d 20 44 53 4c 50 20 00 40 7a 41 ..PARM DSLP .@zA 2ca0: 52 44 59 20 41 53 4c 43 20 54 43 48 45 20 41 4c RDY ASLC TCHE AL 2cb0: 53 49 20 42 43 4c 50 20 50 46 49 54 20 43 42 4c SI BCLP PFIT CBL 2cc0: 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 00 40 5c V BCLM@.CPFM .@\ 2cd0: 47 56 44 31 80 00 0e 08 44 42 54 42 12 32 15 00 GVD1....DBTB.2.. 2ce0: 0a 07 0a 38 0b c0 01 0b 00 0e 0a 3f 0b c7 01 0b ...8.......?.... 2cf0: 07 0e 0b f8 01 0b 38 0e 0b c0 0f 00 00 00 00 00 ......8......... 2d00: 0b 00 70 0b 07 70 0b 38 70 0b c0 71 0b 00 7e 08 ..p..p.8p..q..~. 2d10: 43 44 43 54 12 23 03 12 0a 03 0a c8 0b 40 01 0b CDCT.#.......@.. 2d20: 90 01 12 0a 03 0a c8 0b 4d 01 0b 90 01 12 0a 03 ........M....... 2d30: 0a de 0b 4d 01 0b 7d 01 08 53 55 43 43 01 08 4e ...M..}..SUCC..N 2d40: 56 4c 44 0a 02 08 43 52 49 54 0a 04 08 4e 43 52 VLD...CRIT...NCR 2d50: 54 0a 06 14 4c 4a 47 53 43 49 08 14 44 1e 47 42 T...LJGSCI..D.GB 2d60: 44 41 08 a0 1a 93 47 45 53 46 00 70 0b 79 02 50 DA....GESF.p.y.P 2d70: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 1a ARMp.GESF.SUCC.. 2d80: 93 47 45 53 46 01 70 0b 40 02 50 41 52 4d 70 00 .GESF.p.@.PARMp. 2d90: 47 45 53 46 a4 53 55 43 43 a0 47 04 93 47 45 53 GESF.SUCC.G..GES 2da0: 46 0a 04 7b 50 41 52 4d 0c 00 00 ff ef 50 41 52 F..{PARM.....PAR 2db0: 4d 7b 50 41 52 4d 79 83 88 44 42 54 42 49 42 54 M{PARMy..DBTBIBT 2dc0: 54 00 0a 10 00 50 41 52 4d 7d 49 42 54 54 50 41 T....PARM}IBTTPA 2dd0: 52 4d 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 RMPARMp.GESF.SUC 2de0: 43 a0 4a 06 93 47 45 53 46 0a 05 70 49 50 53 43 C.J..GESF..pIPSC 2df0: 50 41 52 4d 7d 50 41 52 4d 79 49 50 41 54 0a 08 PARM}PARMyIPAT.. 2e00: 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 41 52 .PARMrPARM...PAR 2e10: 4d 7d 50 41 52 4d 79 4c 49 44 53 0a 10 00 50 41 M}PARMyLIDS...PA 2e20: 52 4d 72 50 41 52 4d 0c 00 00 01 00 50 41 52 4d RMrPARM.....PARM 2e30: 7d 50 41 52 4d 79 49 42 49 41 0a 14 00 50 41 52 }PARMyIBIA...PAR 2e40: 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 2d 93 47 Mp.GESF.SUCC.-.G 2e50: 45 53 46 0a 06 70 49 54 56 46 50 41 52 4d 7d 50 ESF..pITVFPARM}P 2e60: 41 52 4d 79 49 54 56 4d 0a 04 00 50 41 52 4d 70 ARMyITVM...PARMp 2e70: 00 47 45 53 46 a4 53 55 43 43 a0 4f 08 93 47 45 .GESF.SUCC.O..GE 2e80: 53 46 0a 07 70 47 49 56 44 50 41 52 4d 7f 50 41 SF..pGIVDPARM.PA 2e90: 52 4d 01 50 41 52 4d 7d 50 41 52 4d 79 47 4d 46 RM.PARM}PARMyGMF 2ea0: 4e 01 00 50 41 52 4d 7d 50 41 52 4d 0b 00 10 50 N..PARM}PARM...P 2eb0: 41 52 4d a0 16 49 44 4d 4d 7d 50 41 52 4d 79 49 ARM..IDMM}PARMyI 2ec0: 44 4d 53 0a 11 00 50 41 52 4d a1 12 7d 50 41 52 DMS...PARM..}PAR 2ed0: 4d 79 49 44 4d 53 0a 0d 00 50 41 52 4d 7d 79 83 MyIDMS...PARM}y. 2ee0: 88 83 88 43 44 43 54 48 56 43 4f 00 74 43 44 56 ...CDCTHVCO.tCDV 2ef0: 4c 01 00 00 0a 15 00 50 41 52 4d 50 41 52 4d 70 L......PARMPARMp 2f00: 01 47 45 53 46 a4 53 55 43 43 a0 2a 93 47 45 53 .GESF.SUCC.*.GES 2f10: 46 0a 0a 70 00 50 41 52 4d a0 10 49 53 53 43 7d F..p.PARM..ISSC} 2f20: 50 41 52 4d 0a 03 50 41 52 4d 70 00 47 45 53 46 PARM..PARMp.GESF 2f30: a4 53 55 43 43 70 00 47 45 53 46 a4 43 52 49 54 .SUCCp.GESF.CRIT 2f40: 14 41 28 53 42 43 42 08 a0 20 93 47 45 53 46 00 .A(SBCB.. .GESF. 2f50: 70 00 50 41 52 4d 70 0b 7d f7 50 41 52 4d 70 00 p.PARMp.}.PARMp. 2f60: 47 45 53 46 a4 53 55 43 43 a0 18 93 47 45 53 46 GESF.SUCC...GESF 2f70: 01 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 2f80: 43 43 a0 19 93 47 45 53 46 0a 03 70 00 47 45 53 CC...GESF..p.GES 2f90: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 Fp.PARM.SUCC...G 2fa0: 45 53 46 0a 04 70 00 47 45 53 46 70 00 50 41 52 ESF..p.GESFp.PAR 2fb0: 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 05 70 M.SUCC...GESF..p 2fc0: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 2fd0: a0 37 93 47 45 53 46 0a 06 70 7b 50 41 52 4d 0a .7.GESF..p{PARM. 2fe0: 0f 00 49 54 56 46 70 7a 7b 50 41 52 4d 0a f0 00 ..ITVFpz{PARM... 2ff0: 0a 04 00 49 54 56 4d 70 00 47 45 53 46 70 00 50 ...ITVMp.GESFp.P 3000: 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a ARM.SUCC...GESF. 3010: 07 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 3020: 43 43 a0 19 93 47 45 53 46 0a 08 70 00 47 45 53 CC...GESF..p.GES 3030: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 24 93 47 Fp.PARM.SUCC.$.G 3040: 45 53 46 0a 09 7b 50 41 52 4d 0a ff 49 42 54 54 ESF..{PARM..IBTT 3050: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 3060: 43 a0 46 05 93 47 45 53 46 0a 0a 7b 50 41 52 4d C.F..GESF..{PARM 3070: 0a ff 49 50 53 43 a0 21 7b 7a 50 41 52 4d 0a 08 ..IPSC.!{zPARM.. 3080: 00 0a ff 00 7b 7a 50 41 52 4d 0a 08 00 0a ff 49 ....{zPARM.....I 3090: 50 41 54 76 49 50 41 54 7b 7a 50 41 52 4d 0a 14 PATvIPAT{zPARM.. 30a0: 00 0a 07 49 42 49 41 70 00 47 45 53 46 70 00 50 ...IBIAp.GESFp.P 30b0: 41 52 4d a4 53 55 43 43 a0 40 06 93 47 45 53 46 ARM.SUCC.@..GESF 30c0: 0a 0b 7b 7a 50 41 52 4d 01 00 01 49 46 31 45 a0 ..{zPARM...IF1E. 30d0: 21 7b 50 41 52 4d 0c 00 e0 01 00 00 7b 7a 50 41 !{PARM......{zPA 30e0: 52 4d 0a 0d 00 0a 0f 49 44 4d 53 70 00 49 44 4d RM.....IDMSp.IDM 30f0: 4d a1 16 7b 7a 50 41 52 4d 0a 11 00 0a 0f 49 44 M..{zPARM.....ID 3100: 4d 53 70 01 49 44 4d 4d 70 00 47 45 53 46 70 00 MSp.IDMMp.GESFp. 3110: 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 PARM.SUCC...GESF 3120: 0a 10 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 ..p.GESFp.PARM.S 3130: 55 43 43 a0 1f 93 47 45 53 46 0a 11 7d 50 41 52 UCC...GESF..}PAR 3140: 4d 0b 00 01 50 41 52 4d 70 00 47 45 53 46 a4 53 M...PARMp.GESF.S 3150: 55 43 43 a0 49 04 93 47 45 53 46 0a 12 a0 26 7b UCC.I..GESF...&{ 3160: 50 41 52 4d 01 00 a0 10 93 7a 50 41 52 4d 01 00 PARM.....zPARM.. 3170: 01 70 01 49 53 53 43 a1 0c 70 00 47 45 53 46 a4 .p.ISSC..p.GESF. 3180: 43 52 49 54 a1 07 70 00 49 53 53 43 70 00 47 45 CRIT..p.ISSCp.GE 3190: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 SFp.PARM.SUCC... 31a0: 47 45 53 46 0a 13 70 00 47 45 53 46 70 00 50 41 GESF..p.GESFp.PA 31b0: 52 4d a4 53 55 43 43 70 00 47 45 53 46 a4 53 55 RM.SUCCp.GESF.SU 31c0: 43 43 a0 11 93 47 45 46 43 0a 04 70 47 42 44 41 CC...GEFC..pGBDA 31d0: 47 58 46 43 a0 11 93 47 45 46 43 0a 06 70 53 42 GXFC...GEFC..pSB 31e0: 43 42 47 58 46 43 70 00 47 45 46 43 70 01 53 43 CBGXFCp.GEFCp.SC 31f0: 49 53 70 00 47 53 53 45 70 00 53 43 49 45 a4 00 ISp.GSSEp.SCIE.. 3200: 14 19 50 44 52 44 00 a0 0c 92 44 52 44 59 5b 22 ..PDRD....DRDY[" 3210: 41 53 4c 50 a4 92 44 52 44 59 14 1d 50 53 54 53 ASLP..DRDY..PSTS 3220: 00 a0 0e 94 43 53 54 53 0a 02 5b 22 41 53 4c 50 ....CSTS..["ASLP 3230: a4 93 43 53 54 53 0a 03 14 47 06 47 4e 4f 54 02 ..CSTS...G.GNOT. 3240: a0 07 50 44 52 44 a4 01 a0 07 50 53 54 53 a4 01 ..PDRD....PSTS.. 3250: 70 68 43 45 56 54 70 0a 03 43 53 54 53 a0 2c 90 phCEVTp..CSTS.,. 3260: 93 43 48 50 44 00 93 69 00 a0 18 91 94 4f 53 59 .CHPD..i.....OSY 3270: 53 0b d0 07 95 4f 53 59 53 0b d6 07 86 50 43 49 S....OSYS....PCI 3280: 30 69 a1 07 86 47 46 58 30 69 86 47 46 58 30 0a 0i...GFX0i.GFX0. 3290: 80 a0 0c 92 50 53 54 53 70 00 43 45 56 54 a4 00 ....PSTSp.CEVT.. 32a0: 14 13 47 48 44 53 01 70 68 54 49 44 58 a4 47 4e ..GHDS.phTIDX.GN 32b0: 4f 54 01 00 14 14 47 4c 49 44 01 70 68 43 4c 49 OT....GLID.phCLI 32c0: 44 a4 47 4e 4f 54 0a 02 00 14 15 47 44 43 4b 01 D.GNOT.....GDCK. 32d0: 70 68 43 44 43 4b a4 47 4e 4f 54 0a 04 0a 80 14 phCDCK.GNOT..... 32e0: 19 50 41 52 44 00 a0 0c 92 41 52 44 59 5b 22 41 .PARD....ARDY["A 32f0: 53 4c 50 a4 92 41 52 44 59 14 46 0c 41 49 4e 54 SLP..ARDY.F.AINT 3300: 02 a0 0e 92 7b 54 43 48 45 79 01 68 00 00 a4 01 ....{TCHEy.h.... 3310: a0 07 50 41 52 44 a4 01 a0 4c 05 93 68 0a 02 a0 ..PARD...L..h... 3320: 33 43 50 46 4d a0 0e 93 43 50 46 4d 01 70 0a 06 3CPFM...CPFM.p.. 3330: 50 46 49 54 a0 0f 93 43 50 46 4d 0a 06 70 0a 08 PFIT...CPFM..p.. 3340: 50 46 49 54 a0 0e 93 43 50 46 4d 0a 08 70 01 50 PFIT...CPFM..p.P 3350: 46 49 54 a1 0c 7f 50 46 49 54 0a 07 50 46 49 54 FIT...PFIT..PFIT 3360: 7d 50 46 49 54 0c 00 00 00 80 50 46 49 54 70 0a }PFIT.....PFITp. 3370: 04 41 53 4c 43 a1 42 04 a0 28 93 68 01 70 78 77 .ASLC.B..(.h.pxw 3380: 69 0a ff 00 0a 64 00 00 42 43 4c 50 7d 42 43 4c i....d..BCLP}BCL 3390: 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 41 53 4c P.....BCLPp..ASL 33a0: 43 a1 16 a0 10 93 68 00 70 69 41 4c 53 49 70 01 C.....h.piALSIp. 33b0: 41 53 4c 43 a1 03 a4 01 70 00 4c 42 50 43 a4 00 ASLC....p.LBPC.. 33c0: 10 41 36 5c 00 5b 80 49 4f 5f 54 01 0b 00 08 0a .A6\.[.IO_T..... 33d0: 10 5b 81 0e 49 4f 5f 54 01 00 40 04 54 52 50 30 .[..IO_T..@.TRP0 33e0: 08 5b 80 50 4d 49 4f 01 0b 00 10 0a 80 5b 81 28 .[.PMIO......[.( 33f0: 50 4d 49 4f 01 00 40 15 00 08 00 02 41 43 50 57 PMIO..@.....ACPW 3400: 01 00 45 0b 00 01 47 50 45 43 01 00 4e 10 00 09 ..E...GPEC..N... 3410: 53 43 49 53 01 00 06 5b 80 47 50 49 4f 01 0b 80 SCIS...[.GPIO... 3420: 11 0a 3c 5b 81 40 0c 47 50 49 4f 01 47 55 30 30 ..<[.@.GPIO.GU00 3430: 08 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 .GU01.GU02.GU03. 3440: 47 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 GIO0.GIO1.GIO2.G 3450: 49 4f 33 08 00 20 47 4c 30 30 08 47 4c 30 31 08 IO3.. GL00.GL01. 3460: 47 4c 30 32 08 00 03 47 50 32 37 01 47 50 32 38 GL02...GP27.GP28 3470: 01 00 03 00 40 04 47 42 30 30 08 47 42 30 31 08 ....@.GB00.GB01. 3480: 47 42 30 32 08 47 42 30 33 08 00 40 08 47 49 56 GB02.GB03..@.GIV 3490: 30 08 00 03 4c 50 4f 4c 01 00 04 47 49 56 32 08 0...LPOL...GIV2. 34a0: 47 49 56 33 08 47 55 30 34 08 47 55 30 35 08 47 GIV3.GU04.GU05.G 34b0: 55 30 36 08 47 55 30 37 08 47 49 4f 34 08 47 49 U06.GU07.GIO4.GI 34c0: 4f 35 08 47 49 4f 36 08 47 49 4f 37 08 00 05 47 O5.GIO6.GIO7...G 34d0: 50 33 37 01 00 02 47 4c 30 35 08 47 4c 30 36 08 P37...GL05.GL06. 34e0: 47 4c 30 37 08 5b 80 52 43 52 42 00 0c 00 c0 d1 GL07.[.RCRB..... 34f0: fe 0b 00 40 5b 81 48 05 52 43 52 42 13 00 80 00 ...@[.H.RCRB.... 3500: 08 00 80 00 10 00 80 02 02 48 50 41 53 02 00 05 .........HPAS... 3510: 48 50 41 45 01 00 48 09 00 01 50 41 54 44 01 53 HPAE..H...PATD.S 3520: 41 54 44 01 53 4d 42 44 01 48 44 41 44 01 00 0b ATD.SMBD.HDAD... 3530: 52 50 31 44 01 52 50 32 44 01 52 50 33 44 01 52 RP1D.RP2D.RP3D.R 3540: 50 34 44 01 52 50 35 44 01 52 50 36 44 01 08 5f P4D.RP5D.RP6D.._ 3550: 53 30 5f 12 05 03 00 00 00 08 5f 53 33 5f 12 07 S0_......._S3_.. 3560: 03 0a 05 0a 05 00 08 5f 53 34 5f 12 07 03 0a 06 ......._S4_..... 3570: 0a 06 00 08 5f 53 35 5f 12 07 03 0a 07 0a 07 00 ...._S5_........ 3580: 14 45 04 47 45 54 50 09 a0 0e 93 7b 68 0a 09 00 .E.GETP....{h... 3590: 00 a4 0c ff ff ff ff a0 0d 93 7b 68 0a 09 00 0a ..........{h.... 35a0: 08 a4 0b 84 03 7a 7b 68 0b 00 03 00 0a 08 60 7a .....z{h......`z 35b0: 7b 68 0b 00 30 00 0a 0c 61 a4 77 0a 1e 74 0a 09 {h..0...a.w..t.. 35c0: 72 60 61 00 00 00 14 30 47 44 4d 41 0d a0 23 68 r`a....0GDMA..#h 35d0: a0 07 90 69 6c a4 0a 14 a0 0e 90 6a 6c a4 77 74 ...il......jl.wt 35e0: 0a 04 6b 00 0a 0f 00 a4 77 74 0a 04 6b 00 0a 1e ..k.....wt..k... 35f0: 00 a4 0c ff ff ff ff 14 1f 47 45 54 54 09 a4 77 .........GETT..w 3600: 0a 1e 74 0a 09 72 7b 7a 68 0a 02 00 0a 03 00 7b ..t..r{zh......{ 3610: 68 0a 03 00 00 00 00 14 44 06 47 45 54 46 0b 08 h.......D.GETF.. 3620: 54 4d 50 46 00 a0 0c 68 7d 54 4d 50 46 01 54 4d TMPF...h}TMPF.TM 3630: 50 46 a0 11 7b 6a 0a 02 00 7d 54 4d 50 46 0a 02 PF..{j...}TMPF.. 3640: 54 4d 50 46 a0 0d 69 7d 54 4d 50 46 0a 04 54 4d TMPF..i}TMPF..TM 3650: 50 46 a0 11 7b 6a 0a 20 00 7d 54 4d 50 46 0a 08 PF..{j. .}TMPF.. 3660: 54 4d 50 46 a0 12 7b 6a 0b 00 40 00 7d 54 4d 50 TMPF..{j..@.}TMP 3670: 46 0a 10 54 4d 50 46 a4 54 4d 50 46 14 3d 53 45 F..TMPF.TMPF.=SE 3680: 54 50 0b a0 08 94 68 0a f0 a4 0a 08 a1 2d a0 27 TP....h......-.' 3690: 7b 69 0a 02 00 a0 10 90 92 94 68 0a 78 7b 6a 0a {i........h.x{j. 36a0: 02 00 a4 0b 01 23 a0 0f 90 92 94 68 0a b4 7b 6a .....#.....h..{j 36b0: 01 00 a4 0b 01 21 a4 0b 01 10 14 37 53 44 4d 41 .....!.....7SDMA 36c0: 09 a0 08 92 94 68 0a 14 a4 01 a0 09 92 94 68 0a .....h........h. 36d0: 1e a4 0a 02 a0 08 92 94 68 0a 2d a4 01 a0 09 92 ........h.-..... 36e0: 94 68 0a 3c a4 0a 02 a0 08 92 94 68 0a 5a a4 01 .h.<.......h.Z.. 36f0: a4 00 14 2f 53 45 54 54 0b a0 25 7b 69 0a 02 00 .../SETT..%{i... 3700: a0 0f 90 92 94 68 0a 78 7b 6a 0a 02 00 a4 0a 0b .....h.x{j...... 3710: a0 0e 90 92 94 68 0a b4 7b 6a 01 00 a4 0a 09 a4 .....h..{j...... 3720: 0a 04 5b 82 4b 04 48 44 45 46 08 5f 41 44 52 0c ..[.K.HDEF._ADR. 3730: 00 00 1b 00 5b 80 48 44 41 52 02 0a 4c 0a 10 5b ....[.HDAR..L..[ 3740: 81 22 48 44 41 52 02 44 43 4b 41 01 00 07 44 43 ."HDAR.DCKA...DC 3750: 4b 4d 01 00 06 44 43 4b 53 01 00 30 00 0f 50 4d KM...DCKS..0..PM 3760: 45 53 01 08 5f 50 52 57 12 06 02 0a 0d 0a 03 5b ES.._PRW.......[ 3770: 82 41 10 52 50 30 31 08 5f 41 44 52 0c 00 00 1c .A.RP01._ADR.... 3780: 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 45 04 .[.PXCS..@..[.E. 3790: 50 58 43 53 40 00 40 09 00 0d 4c 41 53 58 01 00 PXCS@.@...LASX.. 37a0: 32 41 42 50 58 01 00 02 50 44 43 58 01 00 02 50 2ABPX...PDCX...P 37b0: 44 53 58 01 00 01 4c 53 43 58 01 00 27 00 10 50 DSX...LSCX..'..P 37c0: 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 01 50 4d SPX..O<..HPSX.PM 37d0: 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 44 52 00 SX.[..PXSX._ADR. 37e0: 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 .A._PRT..3GPIC.. 37f0: 2c 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ,............... 3800: ff ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a ................ 3810: 12 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 .............E.. 3820: 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 .A.........^^.LP 3830: 43 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e CBLNKA........^^ 3840: 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff .LPCBLNKB....... 3850: 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 ..^^.LPCBLNKC... 3860: 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b ......^^.LPCBLNK 3870: 44 00 5b 82 41 10 52 50 30 32 08 5f 41 44 52 0c D.[.A.RP02._ADR. 3880: 01 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b ....[.PXCS..@..[ 3890: 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c 41 53 .E.PXCS@.@...LAS 38a0: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 38b0: 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 ..PDSX...LSCX..' 38c0: 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 ..PSPX..O<..HPSX 38d0: 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 .PMSX.[..PXSX._A 38e0: 44 52 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 DR..A._PRT..3GPI 38f0: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 11 12 C..,............ 3900: 09 04 0b ff ff 01 00 0a 12 12 0a 04 0b ff ff 0a ................ 3910: 02 00 0a 13 12 0a 04 0b ff ff 0a 03 00 0a 10 a1 ................ 3920: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3930: 2e 4c 50 43 42 4c 4e 4b 42 00 12 12 04 0b ff ff .LPCBLNKB....... 3940: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 3950: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 3960: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3970: 4c 4e 4b 41 00 5b 82 4d 11 52 50 30 33 08 5f 41 LNKA.[.M.RP03._A 3980: 44 52 0c 02 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3990: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 39a0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 39b0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 39c0: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 39d0: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 39e0: 08 5f 41 44 52 00 08 2e 50 58 53 58 5f 52 4d 56 ._ADR...PXSX_RMV 39f0: 01 08 2e 50 58 53 58 5f 50 52 57 12 06 02 0a 09 ...PXSX_PRW..... 3a00: 0a 03 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 ...A._PRT..3GPIC 3a10: a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 12 12 09 ..,............. 3a20: 04 0b ff ff 01 00 0a 13 12 0a 04 0b ff ff 0a 02 ................ 3a30: 00 0a 10 12 0a 04 0b ff ff 0a 03 00 0a 11 a1 45 ...............E 3a40: 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e ...A.........^^. 3a50: 4c 50 43 42 4c 4e 4b 43 00 12 12 04 0b ff ff 01 LPCBLNKC........ 3a60: 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0b ^^.LPCBLNKD..... 3a70: ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 ....^^.LPCBLNKA. 3a80: 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3a90: 4e 4b 42 00 5b 82 4f 11 52 50 30 34 08 5f 41 44 NKB.[.O.RP04._AD 3aa0: 52 0c 03 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a R.....[.PXCS..@. 3ab0: c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c .[.E.PXCS@.@...L 3ac0: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 3ad0: 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 X...PDSX...LSCX. 3ae0: 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 .'..PSPX..O<..HP 3af0: 53 58 01 50 4d 53 58 01 5b 82 29 50 58 53 58 08 SX.PMSX.[.)PXSX. 3b00: 5f 41 44 52 00 14 1d 5f 50 52 57 00 a0 0d 57 4b _ADR..._PRW...WK 3b10: 4c 4e a4 12 06 02 0a 09 0a 03 a1 08 a4 12 05 02 LN.............. 3b20: 0a 09 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 ....A._PRT..3GPI 3b30: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 C..,............ 3b40: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 3b50: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 a1 ................ 3b60: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3b70: 2e 4c 50 43 42 4c 4e 4b 44 00 12 12 04 0b ff ff .LPCBLNKD....... 3b80: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 .^^.LPCBLNKA.... 3b90: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 .....^^.LPCBLNKB 3ba0: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3bb0: 4c 4e 4b 43 00 5b 82 41 10 52 50 30 35 08 5f 41 LNKC.[.A.RP05._A 3bc0: 44 52 0c 04 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3bd0: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 3be0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 3bf0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 3c00: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 3c10: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 3c20: 08 5f 41 44 52 00 14 41 09 5f 50 52 54 00 a0 33 ._ADR..A._PRT..3 3c30: 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 GPIC..,......... 3c40: 0a 10 12 09 04 0b ff ff 01 00 0a 11 12 0a 04 0b ................ 3c50: ff ff 0a 02 00 0a 12 12 0a 04 0b ff ff 0a 03 00 ................ 3c60: 0a 13 a1 45 05 a4 12 41 05 04 12 12 04 0b ff ff ...E...A........ 3c70: 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 12 04 .^^.LPCBLNKA.... 3c80: 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3c90: 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3ca0: 4e 4b 43 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c NKC.........^^.L 3cb0: 50 43 42 4c 4e 4b 44 00 5b 82 41 10 52 50 30 36 PCBLNKD.[.A.RP06 3cc0: 08 5f 41 44 52 0c 05 00 1c 00 5b 80 50 58 43 53 ._ADR.....[.PXCS 3cd0: 02 0a 40 0a c0 5b 81 45 04 50 58 43 53 40 00 40 ..@..[.E.PXCS@.@ 3ce0: 09 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 ...LASX..2ABPX.. 3cf0: 02 50 44 43 58 01 00 02 50 44 53 58 01 00 01 4c .PDCX...PDSX...L 3d00: 53 43 58 01 00 27 00 10 50 53 50 58 01 00 4f 3c SCX..'..PSPX..O< 3d10: 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 ..HPSX.PMSX.[..P 3d20: 58 53 58 08 5f 41 44 52 00 14 41 09 5f 50 52 54 XSX._ADR..A._PRT 3d30: 00 a0 33 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ..3GPIC..,...... 3d40: ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a 12 12 ................ 3d50: 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ff ff ................ 3d60: 0a 03 00 0a 10 a1 45 05 a4 12 41 05 04 12 12 04 ......E...A..... 3d70: 0b ff ff 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3d80: 12 12 04 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 3d90: 4b 43 00 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 KC.........^^.LP 3da0: 43 42 4c 4e 4b 44 00 12 13 04 0b ff ff 0a 03 5e CBLNKD.........^ 3db0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 4d 06 55 ^.LPCBLNKA.[.M.U 3dc0: 53 42 31 08 5f 41 44 52 0c 00 00 1d 00 5b 80 55 SB1._ADR.....[.U 3dd0: 31 43 53 02 0a c4 0a 04 5b 81 0b 55 31 43 53 03 1CS.....[..U1CS. 3de0: 55 31 45 4e 02 08 5f 50 52 57 12 06 02 0a 03 0a U1EN.._PRW...... 3df0: 03 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 ..$_PSW...hp.ACP 3e00: 57 a0 0c 41 43 50 57 70 0a 03 55 31 45 4e a1 07 W..ACPWp..U1EN.. 3e10: 70 00 55 31 45 4e 14 09 5f 53 33 44 00 a4 0a 02 p.U1EN.._S3D.... 3e20: 14 09 5f 53 34 44 00 a4 0a 02 5b 82 4c 06 55 53 .._S4D....[.L.US 3e30: 42 32 08 5f 41 44 52 0c 01 00 1d 00 5b 80 55 32 B2._ADR.....[.U2 3e40: 43 53 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 CS.....[..U2CS.U 3e50: 32 45 4e 02 08 5f 50 52 57 12 06 02 0a 04 0a 03 2EN.._PRW....... 3e60: 14 23 5f 50 53 57 01 a0 14 68 70 01 41 43 50 57 .#_PSW...hp.ACPW 3e70: a0 0b 41 43 50 57 70 01 55 32 45 4e a1 07 70 00 ..ACPWp.U2EN..p. 3e80: 55 32 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 U2EN.._S3D...... 3e90: 5f 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 33 _S4D....[.M.USB3 3ea0: 08 5f 41 44 52 0c 02 00 1d 00 5b 80 55 32 43 53 ._ADR.....[.U2CS 3eb0: 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 33 45 .....[..U2CS.U3E 3ec0: 4e 02 08 5f 50 52 57 12 06 02 0a 0c 0a 03 14 24 N.._PRW........$ 3ed0: 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c _PSW...hp.ACPW.. 3ee0: 41 43 50 57 70 0a 03 55 33 45 4e a1 07 70 00 55 ACPWp..U3EN..p.U 3ef0: 33 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 3EN.._S3D......_ 3f00: 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 34 08 S4D....[.M.USB4. 3f10: 5f 41 44 52 0c 00 00 1a 00 5b 80 55 34 43 53 02 _ADR.....[.U4CS. 3f20: 0a c4 0a 04 5b 81 0b 55 34 43 53 03 55 34 45 4e ....[..U4CS.U4EN 3f30: 02 08 5f 50 52 57 12 06 02 0a 0e 0a 03 14 24 5f .._PRW........$_ 3f40: 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c 41 PSW...hp.ACPW..A 3f50: 43 50 57 70 0a 03 55 34 45 4e a1 07 70 00 55 34 CPWp..U4EN..p.U4 3f60: 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 EN.._S3D......_S 3f70: 34 44 00 a4 0a 02 5b 82 41 06 55 53 42 35 08 5f 4D....[.A.USB5._ 3f80: 41 44 52 0c 01 00 1a 00 5b 80 55 35 43 53 02 0a ADR.....[.U5CS.. 3f90: c4 0a 04 5b 81 0b 55 35 43 53 03 55 35 45 4e 02 ...[..U5CS.U5EN. 3fa0: 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 .$_PSW...hp.ACPW 3fb0: a0 0c 41 43 50 57 70 0a 03 55 35 45 4e a1 07 70 ..ACPWp..U5EN..p 3fc0: 00 55 35 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 .U5EN.._S3D..... 3fd0: 09 5f 53 34 44 00 a4 0a 02 5b 82 4b 0a 45 48 43 ._S4D....[.K.EHC 3fe0: 31 08 5f 41 44 52 0c 07 00 1d 00 5b 80 55 37 43 1._ADR.....[.U7C 3ff0: 53 02 0a 54 0a 04 5b 81 0d 55 37 43 53 03 00 0f S..T..[..U7CS... 4000: 50 4d 45 53 01 5b 82 4f 05 48 55 42 37 08 5f 41 PMES.[.O.HUB7._A 4010: 44 52 00 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 DR.[..PRT1._ADR. 4020: 5b 82 0c 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 [..PRT2._ADR..[. 4030: 0c 50 52 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 .PRT3._ADR..[..P 4040: 52 54 34 08 5f 41 44 52 0a 04 5b 82 0c 50 52 54 RT4._ADR..[..PRT 4050: 35 08 5f 41 44 52 0a 05 5b 82 0c 50 52 54 36 08 5._ADR..[..PRT6. 4060: 5f 41 44 52 0a 06 08 5f 50 52 57 12 06 02 0a 0d _ADR..._PRW..... 4070: 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 ...._S3D......_S 4080: 34 44 00 a4 0a 02 5b 82 4f 08 45 48 43 32 08 5f 4D....[.O.EHC2._ 4090: 41 44 52 0c 07 00 1a 00 5b 80 55 46 43 53 02 0a ADR.....[.UFCS.. 40a0: 54 0a 04 5b 81 0d 55 46 43 53 03 00 0f 50 4d 45 T..[..UFCS...PME 40b0: 53 01 5b 82 43 04 48 55 42 37 08 5f 41 44 52 00 S.[.C.HUB7._ADR. 40c0: 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 5b 82 0c [..PRT1._ADR.[.. 40d0: 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 0c 50 52 PRT2._ADR..[..PR 40e0: 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 52 54 34 T3._ADR..[..PRT4 40f0: 08 5f 41 44 52 0a 04 08 5f 50 52 57 12 06 02 0a ._ADR..._PRW.... 4100: 0d 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f ....._S3D......_ 4110: 53 34 44 00 a4 0a 02 5b 82 4a 06 50 43 49 42 08 S4D....[.J.PCIB. 4120: 5f 41 44 52 0c 00 00 1e 00 14 49 05 5f 50 52 54 _ADR......I._PRT 4130: 00 a0 21 47 50 49 43 a4 12 1a 02 12 0b 04 0c ff ..!GPIC......... 4140: ff 06 00 00 00 0a 16 12 0b 04 0c ff ff 06 00 01 ................ 4150: 00 0a 17 a1 2f a4 12 2c 02 12 14 04 0c ff ff 06 ..../..,........ 4160: 00 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 47 00 12 14 ..^^.LPCBLNKG... 4170: 04 0c ff ff 06 00 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 4180: 4b 48 00 5b 82 8d 2e 01 4c 50 43 42 08 5f 41 44 KH.[....LPCB._AD 4190: 52 0c 00 00 1f 00 5b 80 4c 50 43 30 02 0a 40 0a R.....[.LPC0..@. 41a0: c0 5b 81 4d 07 4c 50 43 30 00 00 40 10 50 41 52 .[.M.LPC0..@.PAR 41b0: 43 08 50 42 52 43 08 50 43 52 43 08 50 44 52 43 C.PBRC.PCRC.PDRC 41c0: 08 00 20 50 45 52 43 08 50 46 52 43 08 50 47 52 .. PERC.PFRC.PGR 41d0: 43 08 50 48 52 43 08 00 40 0a 43 4d 41 52 03 00 C.PHRC..@.CMAR.. 41e0: 01 43 4d 42 52 03 00 01 4c 50 54 52 02 00 06 43 .CMBR...LPTR...C 41f0: 4d 41 44 01 43 4d 42 44 01 4c 50 54 44 01 46 44 MAD.CMBD.LPTD.FD 4200: 44 44 01 00 2c 49 4f 52 32 10 00 02 4c 47 52 4d DD..,IOR2...LGRM 4210: 06 00 48 32 52 41 45 4e 01 00 0d 52 43 42 41 12 ..H2RAEN...RCBA. 4220: 5b 80 53 4d 49 30 01 0c 00 fe 00 00 0c 02 00 00 [.SMI0.......... 4230: 00 5b 81 0b 53 4d 49 30 00 53 4d 49 43 08 5b 80 .[..SMI0.SMIC.[. 4240: 53 4d 49 31 00 0c bd 2e 6e bf 0c 90 00 00 00 5b SMI1....n......[ 4250: 81 16 53 4d 49 31 00 42 43 4d 44 08 44 49 44 5f ..SMI1.BCMD.DID_ 4260: 20 49 4e 46 4f 40 40 5b 81 15 53 4d 49 31 00 01 INFO@@[..SMI1.. 4270: 01 00 00 28 49 4e 46 5f 08 49 4e 46 31 20 5b 01 ...(INF_.INF1 [. 4280: 50 53 4d 58 00 14 27 50 48 53 53 01 5b 23 50 53 PSMX..'PHSS.[#PS 4290: 4d 58 ff ff 70 0a 80 42 43 4d 44 70 68 44 49 44 MX..p..BCMDphDID 42a0: 5f 70 00 53 4d 49 43 5b 27 50 53 4d 58 5b 82 41 _p.SMIC['PSMX[.A 42b0: 0a 4c 4e 4b 41 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKA._HID.A.... 42c0: 5f 55 49 44 01 14 0d 5f 44 49 53 08 70 0a 80 50 _UID..._DIS.p..P 42d0: 41 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ARC._PRS....#... 42e0: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 41 11 09 y..8_CRS..RTLA.. 42f0: 0a 06 23 00 00 18 79 00 8b 52 54 4c 41 01 49 52 ..#...y..RTLA.IR 4300: 51 30 70 00 49 52 51 30 79 01 7b 50 41 52 43 0a Q0p.IRQ0y.{PARC. 4310: 0f 00 49 52 51 30 a4 52 54 4c 41 14 1b 5f 53 52 ..IRQ0.RTLA.._SR 4320: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 4330: 60 70 60 50 41 52 43 14 18 5f 53 54 41 08 a0 0c `p`PARC.._STA... 4340: 7b 50 41 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PARC........... 4350: 5b 82 42 0a 4c 4e 4b 42 08 5f 48 49 44 0c 41 d0 [.B.LNKB._HID.A. 4360: 0c 0f 08 5f 55 49 44 0a 02 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4370: 70 0a 80 50 42 52 43 08 5f 50 52 53 11 09 0a 06 p..PBRC._PRS.... 4380: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4390: 4c 42 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LB....#...y..RTL 43a0: 42 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 B.IRQ0p.IRQ0y.{P 43b0: 42 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 42 14 BRC...IRQ0.RTLB. 43c0: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 43d0: 51 30 60 76 60 70 60 50 42 52 43 14 18 5f 53 54 Q0`v`p`PBRC.._ST 43e0: 41 08 a0 0c 7b 50 42 52 43 0a 80 00 a4 0a 09 a1 A...{PBRC....... 43f0: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 43 08 5f 48 49 ....[.B.LNKC._HI 4400: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 03 14 0d 5f D.A...._UID...._ 4410: 44 49 53 08 70 0a 80 50 43 52 43 08 5f 50 52 53 DIS.p..PCRC._PRS 4420: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 4430: 08 08 52 54 4c 43 11 09 0a 06 23 00 00 18 79 00 ..RTLC....#...y. 4440: 8b 52 54 4c 43 01 49 52 51 30 70 00 49 52 51 30 .RTLC.IRQ0p.IRQ0 4450: 79 01 7b 50 43 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PCRC...IRQ0.R 4460: 54 4c 43 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLC.._SRS..h.IRQ 4470: 30 82 49 52 51 30 60 76 60 70 60 50 43 52 43 14 0.IRQ0`v`p`PCRC. 4480: 18 5f 53 54 41 08 a0 0c 7b 50 43 52 43 0a 80 00 ._STA...{PCRC... 4490: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 44 ........[.B.LNKD 44a0: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 44b0: 04 14 0d 5f 44 49 53 08 70 0a 80 50 44 52 43 08 ..._DIS.p..PDRC. 44c0: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 44d0: 5f 43 52 53 08 08 52 54 4c 44 11 09 0a 06 23 00 _CRS..RTLD....#. 44e0: 00 18 79 00 8b 52 54 4c 44 01 49 52 51 30 70 00 ..y..RTLD.IRQ0p. 44f0: 49 52 51 30 79 01 7b 50 44 52 43 0a 0f 00 49 52 IRQ0y.{PDRC...IR 4500: 51 30 a4 52 54 4c 44 14 1b 5f 53 52 53 09 8b 68 Q0.RTLD.._SRS..h 4510: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 4520: 44 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 44 52 DRC.._STA...{PDR 4530: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a C...........[.B. 4540: 4c 4e 4b 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f LNKE._HID.A...._ 4550: 55 49 44 0a 05 14 0d 5f 44 49 53 08 70 0a 80 50 UID...._DIS.p..P 4560: 45 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ERC._PRS....#... 4570: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 45 11 09 y..8_CRS..RTLE.. 4580: 0a 06 23 00 00 18 79 00 8b 52 54 4c 45 01 49 52 ..#...y..RTLE.IR 4590: 51 30 70 00 49 52 51 30 79 01 7b 50 45 52 43 0a Q0p.IRQ0y.{PERC. 45a0: 0f 00 49 52 51 30 a4 52 54 4c 45 14 1b 5f 53 52 ..IRQ0.RTLE.._SR 45b0: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 45c0: 60 70 60 50 45 52 43 14 18 5f 53 54 41 08 a0 0c `p`PERC.._STA... 45d0: 7b 50 45 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PERC........... 45e0: 5b 82 42 0a 4c 4e 4b 46 08 5f 48 49 44 0c 41 d0 [.B.LNKF._HID.A. 45f0: 0c 0f 08 5f 55 49 44 0a 06 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4600: 70 0a 80 50 46 52 43 08 5f 50 52 53 11 09 0a 06 p..PFRC._PRS.... 4610: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4620: 4c 46 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LF....#...y..RTL 4630: 46 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 F.IRQ0p.IRQ0y.{P 4640: 46 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 46 14 FRC...IRQ0.RTLF. 4650: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 4660: 51 30 60 76 60 70 60 50 46 52 43 14 18 5f 53 54 Q0`v`p`PFRC.._ST 4670: 41 08 a0 0c 7b 50 46 52 43 0a 80 00 a4 0a 09 a1 A...{PFRC....... 4680: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 47 08 5f 48 49 ....[.B.LNKG._HI 4690: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 0d 5f D.A...._UID...._ 46a0: 44 49 53 08 70 0a 80 50 47 52 43 08 5f 50 52 53 DIS.p..PGRC._PRS 46b0: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 46c0: 08 08 52 54 4c 47 11 09 0a 06 23 00 00 18 79 00 ..RTLG....#...y. 46d0: 8b 52 54 4c 47 01 49 52 51 30 70 00 49 52 51 30 .RTLG.IRQ0p.IRQ0 46e0: 79 01 7b 50 47 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PGRC...IRQ0.R 46f0: 54 4c 47 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLG.._SRS..h.IRQ 4700: 30 82 49 52 51 30 60 76 60 70 60 50 47 52 43 14 0.IRQ0`v`p`PGRC. 4710: 18 5f 53 54 41 08 a0 0c 7b 50 47 52 43 0a 80 00 ._STA...{PGRC... 4720: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 48 ........[.B.LNKH 4730: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 4740: 08 14 0d 5f 44 49 53 08 70 0a 80 50 48 52 43 08 ..._DIS.p..PHRC. 4750: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 4760: 5f 43 52 53 08 08 52 54 4c 48 11 09 0a 06 23 00 _CRS..RTLH....#. 4770: 00 18 79 00 8b 52 54 4c 48 01 49 52 51 30 70 00 ..y..RTLH.IRQ0p. 4780: 49 52 51 30 79 01 7b 50 48 52 43 0a 0f 00 49 52 IRQ0y.{PHRC...IR 4790: 51 30 a4 52 54 4c 48 14 1b 5f 53 52 53 09 8b 68 Q0.RTLH.._SRS..h 47a0: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 47b0: 48 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 48 52 HRC.._STA...{PHR 47c0: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 3d 44 C...........[.=D 47d0: 4d 41 43 08 5f 48 49 44 0c 41 d0 02 00 08 5f 43 MAC._HID.A...._C 47e0: 52 53 11 28 0a 25 47 01 00 00 00 00 01 20 47 01 RS.(.%G...... G. 47f0: 81 00 81 00 01 11 47 01 93 00 93 00 01 0d 47 01 ......G.......G. 4800: c0 00 c0 00 01 20 2a 10 01 79 00 5b 82 26 46 57 ..... *..y.[.&FW 4810: 48 44 08 5f 48 49 44 0c 25 d4 08 00 08 5f 43 52 HD._HID.%...._CR 4820: 53 11 11 0a 0e 86 09 00 00 00 00 00 ff 00 00 00 S............... 4830: 01 79 00 5b 82 40 0b 48 50 45 54 08 5f 48 49 44 .y.[.@.HPET._HID 4840: 0c 41 d0 01 03 08 5f 43 49 44 0c 41 d0 0c 01 08 .A...._CID.A.... 4850: 42 55 46 30 11 11 0a 0e 86 09 00 00 00 00 d0 fe BUF0............ 4860: 00 04 00 00 79 00 14 27 5f 53 54 41 00 a0 13 92 ....y..'_STA.... 4870: 95 4f 53 59 53 0b d1 07 a0 08 48 50 41 45 a4 0a .OSYS.....HPAE.. 4880: 0f a1 0a a0 08 48 50 41 45 a4 0a 0b a4 00 14 46 .....HPAE......F 4890: 05 5f 43 52 53 08 a0 49 04 48 50 41 45 8a 42 55 ._CRS..I.HPAE.BU 48a0: 46 30 0a 04 48 50 54 30 a0 11 93 48 50 41 53 01 F0..HPT0...HPAS. 48b0: 70 0c 00 10 d0 fe 48 50 54 30 a0 12 93 48 50 41 p.....HPT0...HPA 48c0: 53 0a 02 70 0c 00 20 d0 fe 48 50 54 30 a0 12 93 S..p.. ..HPT0... 48d0: 48 50 41 53 0a 03 70 0c 00 30 d0 fe 48 50 54 30 HPAS..p..0..HPT0 48e0: a4 42 55 46 30 5b 82 45 0a 49 50 49 43 08 5f 48 .BUF0[.E.IPIC._H 48f0: 49 44 0b 41 d0 08 5f 43 52 53 11 41 09 0a 8d 47 ID.A.._CRS.A...G 4900: 01 20 00 20 00 01 02 47 01 24 00 24 00 01 02 47 . . ...G.$.$...G 4910: 01 28 00 28 00 01 02 47 01 2c 00 2c 00 01 02 47 .(.(...G.,.,...G 4920: 01 30 00 30 00 01 02 47 01 34 00 34 00 01 02 47 .0.0...G.4.4...G 4930: 01 38 00 38 00 01 02 47 01 3c 00 3c 00 01 02 47 .8.8...G.<.<...G 4940: 01 a0 00 a0 00 01 02 47 01 a4 00 a4 00 01 02 47 .......G.......G 4950: 01 a8 00 a8 00 01 02 47 01 ac 00 ac 00 01 02 47 .......G.......G 4960: 01 b0 00 b0 00 01 02 47 01 b4 00 b4 00 01 02 47 .......G.......G 4970: 01 b8 00 b8 00 01 02 47 01 bc 00 bc 00 01 02 47 .......G.......G 4980: 01 d0 04 d0 04 01 02 22 04 00 79 00 5b 82 25 4d ......."..y.[.%M 4990: 41 54 48 08 5f 48 49 44 0c 41 d0 0c 04 08 5f 43 ATH._HID.A...._C 49a0: 52 53 11 10 0a 0d 47 01 f0 00 f0 00 01 01 22 00 RS....G.......". 49b0: 20 79 00 5b 82 4b 09 4c 44 52 43 08 5f 48 49 44 y.[.K.LDRC._HID 49c0: 0c 41 d0 0c 02 08 5f 55 49 44 0a 02 08 5f 43 52 .A...._UID..._CR 49d0: 53 11 4e 07 0a 7a 47 01 2e 00 2e 00 01 02 47 01 S.N..zG.......G. 49e0: 4e 00 4e 00 01 02 47 01 61 00 61 00 01 01 47 01 N.N...G.a.a...G. 49f0: 63 00 63 00 01 01 47 01 65 00 65 00 01 01 47 01 c.c...G.e.e...G. 4a00: 67 00 67 00 01 01 47 01 80 00 80 00 01 01 47 01 g.g...G.......G. 4a10: 92 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 ......G.......G. 4a20: 80 06 80 06 01 20 47 01 00 08 00 08 01 10 47 01 ..... G.......G. 4a30: 00 10 00 10 01 80 47 01 80 11 80 11 01 40 47 01 ......G......@G. 4a40: 00 fe 00 fe 01 01 47 01 00 ff 00 ff 01 80 79 00 ......G.......y. 4a50: 5b 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b [.%RTC_._HID.A.. 4a60: 00 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 .._CRS....G.p.p. 4a70: 01 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f .."..y.[.-TIMR._ 4a80: 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a HID.A...._CRS... 4a90: 15 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 .G.@.@...G.P.P.. 4aa0: 04 22 01 00 79 00 5b 82 32 41 43 41 44 08 5f 48 ."..y.[.2ACAD._H 4ab0: 49 44 0d 41 43 50 49 30 30 30 33 00 08 5f 50 43 ID.ACPI0003.._PC 4ac0: 4c 12 06 01 5f 53 42 5f 14 11 5f 50 53 52 00 70 L..._SB_.._PSR.p 4ad0: 01 41 43 50 57 a4 41 43 50 57 14 1a 45 43 4f 4b .ACPW.ACPW..ECOK 4ae0: 00 a0 0f 93 5e 2e 45 43 30 5f 5a 30 30 39 01 a4 ....^.EC0_Z009.. 4af0: 01 a1 03 a4 00 5b 82 4e 6f 45 43 30 5f 08 5f 48 .....[.NoEC0_._H 4b00: 49 44 0c 41 d0 0c 09 08 5f 47 50 45 0a 1c 08 5a ID.A...._GPE...Z 4b10: 30 30 39 00 08 5f 43 52 53 11 15 0a 12 47 01 62 009.._CRS....G.b 4b20: 00 62 00 01 01 47 01 66 00 66 00 01 01 79 00 14 .b...G.f.f...y.. 4b30: 3b 5f 52 45 47 02 a0 34 93 68 0a 03 70 69 5a 30 ;_REG..4.h..piZ0 4b40: 30 39 a0 28 5b 12 5f 4f 53 49 60 70 00 42 54 44 09.([._OSI`p.BTD 4b50: 53 a0 19 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 S.._OSI.Windows 4b60: 32 30 30 36 00 70 01 42 54 44 53 5b 80 45 52 41 2006.p.BTDS[.ERA 4b70: 4d 03 00 0a ff 5b 81 4e 2e 45 52 41 4d 11 00 40 M....[.N.ERAM..@ 4b80: 30 53 4d 50 52 08 53 4d 53 54 08 53 4d 41 44 08 0SMPR.SMST.SMAD. 4b90: 53 4d 43 4d 08 53 4d 44 30 40 10 42 43 4e 54 08 SMCM.SMD0@.BCNT. 4ba0: 53 4d 41 41 18 00 40 04 43 48 47 4d 10 43 48 47 SMAA..@.CHGM.CHG 4bb0: 53 10 45 4e 49 44 08 45 4e 49 42 08 45 4e 44 44 S.ENID.ENIB.ENDD 4bc0: 08 43 48 47 56 08 43 48 47 41 10 42 41 4c 30 01 .CHGV.CHGA.BAL0. 4bd0: 42 41 4c 31 01 42 41 4c 32 01 42 41 4c 33 01 42 BAL1.BAL2.BAL3.B 4be0: 42 43 30 01 42 42 43 31 01 42 42 43 32 01 42 42 BC0.BBC1.BBC2.BB 4bf0: 43 33 01 00 08 50 48 44 44 01 49 46 44 44 01 49 C3...PHDD.IFDD.I 4c00: 4f 44 44 01 53 48 44 44 01 53 31 32 30 01 45 46 ODD.SHDD.S120.EF 4c10: 44 44 01 43 52 54 44 01 53 50 57 52 01 53 42 54 DD.CRTD.SPWR.SBT 4c20: 4e 01 56 49 44 4f 01 56 4f 4c 44 01 56 4f 4c 55 N.VIDO.VOLD.VOLU 4c30: 01 4d 55 54 45 01 43 4f 4e 54 01 42 52 47 54 01 .MUTE.CONT.BRGT. 4c40: 48 42 54 4e 01 53 34 53 54 01 53 4b 45 59 01 42 HBTN.S4ST.SKEY.B 4c50: 4b 45 59 01 54 4f 55 50 01 46 4e 42 4e 01 4c 49 KEY.TOUP.FNBN.LI 4c60: 44 46 01 44 49 47 4d 01 55 57 41 4b 01 00 08 44 DF.DIGM.UWAK...D 4c70: 4b 53 50 01 44 4b 49 4e 01 44 4b 49 44 01 44 4b KSP.DKIN.DKID.DK 4c80: 4f 4b 01 00 04 44 4b 50 57 01 00 07 42 54 4e 53 OK...DKPW...BTNS 4c90: 08 53 31 4c 44 01 53 33 4c 44 01 56 47 41 51 01 .S1LD.S3LD.VGAQ. 4ca0: 50 43 4d 51 01 50 43 4d 52 01 41 44 50 54 01 53 PCMQ.PCMR.ADPT.S 4cb0: 4c 4c 53 01 53 59 53 37 01 50 57 41 4b 01 4d 57 LLS.SYS7.PWAK.MW 4cc0: 41 4b 01 4c 57 41 4b 01 00 05 00 28 54 43 4e 4c AK.LWAK....(TCNL 4cd0: 08 54 4d 50 49 08 54 4d 53 44 08 46 41 53 4e 04 .TMPI.TMSD.FASN. 4ce0: 46 41 53 55 04 50 43 56 4c 04 00 02 53 57 54 4f FASU.PCVL...SWTO 4cf0: 01 48 57 54 4f 01 4d 4f 44 45 01 46 41 4e 53 02 .HWTO.MODE.FANS. 4d00: 49 4e 49 54 01 46 41 4e 31 01 46 41 4e 32 01 46 INIT.FAN1.FAN2.F 4d10: 41 4e 54 01 53 4b 4e 4d 01 43 54 4d 50 08 4c 49 ANT.SKNM.CTMP.LI 4d20: 44 45 01 50 4d 45 45 01 50 57 42 45 01 52 4e 47 DE.PMEE.PWBE.RNG 4d30: 45 01 42 54 57 45 01 44 43 4b 45 01 00 02 53 4b E.BTWE.DCKE...SK 4d40: 54 58 08 53 4b 54 42 08 53 4b 54 43 08 53 4b 54 TX.SKTB.SKTC.SKT 4d50: 41 08 00 08 48 41 50 4c 02 48 41 50 52 01 00 05 A...HAPL.HAPR... 4d60: 42 54 44 54 01 42 54 50 57 01 42 54 44 53 01 42 BTDT.BTPW.BTDS.B 4d70: 54 50 53 01 42 54 53 57 01 42 54 57 4b 01 42 54 TPS.BTSW.BTWK.BT 4d80: 4c 44 01 00 01 42 52 54 53 08 43 4e 54 53 08 57 LD...BRTS.CNTS.W 4d90: 4c 41 54 01 42 54 41 54 01 57 4c 45 58 01 42 54 LAT.BTAT.WLEX.BT 4da0: 45 58 01 4b 4c 53 57 01 57 4c 4f 4b 01 00 02 50 EX.KLSW.WLOK...P 4db0: 54 49 44 08 43 50 55 54 08 45 50 4b 54 08 47 48 TID.CPUT.EPKT.GH 4dc0: 49 44 08 00 04 42 4d 46 30 03 42 54 59 30 01 42 ID...BMF0.BTY0.B 4dd0: 53 54 30 08 42 52 43 30 10 42 53 4e 30 10 42 50 ST0.BRC0.BSN0.BP 4de0: 56 30 10 42 44 56 30 10 42 44 43 30 10 42 46 43 V0.BDV0.BDC0.BFC 4df0: 30 10 47 41 55 30 08 43 59 43 30 08 42 50 43 30 0.GAU0.CYC0.BPC0 4e00: 10 42 41 43 30 10 42 41 54 30 08 42 54 57 30 10 .BAC0.BAT0.BTW0. 4e10: 42 44 4e 30 08 00 40 04 00 04 42 4d 46 31 03 42 BDN0..@...BMF1.B 4e20: 54 59 31 01 42 53 54 31 08 42 52 43 31 10 42 53 TY1.BST1.BRC1.BS 4e30: 4e 31 10 42 50 56 31 10 42 44 56 31 10 42 44 43 N1.BPV1.BDV1.BDC 4e40: 31 10 42 46 43 31 10 47 41 55 31 08 43 59 43 31 1.BFC1.GAU1.CYC1 4e50: 08 42 50 43 31 10 42 41 43 31 10 42 41 54 31 08 .BPC1.BAC1.BAT1. 4e60: 42 54 57 31 10 14 37 5f 51 31 31 00 70 0a 87 50 BTW1..7_Q11.p..P 4e70: 38 30 48 a0 13 49 47 44 53 5e 5e 5e 2e 47 46 58 80H..IGDS^^^.GFX 4e80: 30 42 52 54 4e 0a 87 a1 15 86 5e 5e 5e 2f 03 50 0BRTN.....^^^/.P 4e90: 45 47 50 56 47 41 5f 4c 43 44 5f 0a 87 14 37 5f EGPVGA_LCD_...7_ 4ea0: 51 31 32 00 70 0a 86 50 38 30 48 a0 13 49 47 44 Q12.p..P80H..IGD 4eb0: 53 5e 5e 5e 2e 47 46 58 30 42 52 54 4e 0a 86 a1 S^^^.GFX0BRTN... 4ec0: 15 86 5e 5e 5e 2f 03 50 45 47 50 56 47 41 5f 4c ..^^^/.PEGPVGA_L 4ed0: 43 44 5f 0a 86 14 40 05 5f 51 31 43 00 70 0d 3d CD_...@._Q1C.p.= 4ee0: 3d 3d 3d 3d 51 55 45 52 59 5f 31 43 3d 3d 3d 3d ====QUERY_1C==== 4ef0: 3d 00 5b 31 a0 31 56 49 44 4f a0 12 49 47 44 53 =.[1.1VIDO..IGDS 4f00: 5e 5e 5e 2e 47 46 58 30 47 48 44 53 00 a1 12 5e ^^^.GFX0GHDS...^ 4f10: 5e 5e 2f 03 50 45 47 50 56 47 41 5f 44 53 53 57 ^^/.PEGPVGA_DSSW 4f20: 70 00 56 49 44 4f 14 21 5f 51 31 44 00 70 0d 3d p.VIDO.!_Q1D.p.= 4f30: 3d 3d 3d 3d 51 55 45 52 59 5f 31 44 3d 3d 3d 3d ====QUERY_1D==== 4f40: 3d 00 5b 31 50 43 4c 4b 14 21 5f 51 31 45 00 70 =.[1PCLK.!_Q1E.p 4f50: 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 31 45 3d 3d .=====QUERY_1E== 4f60: 3d 3d 3d 00 5b 31 50 43 4c 4b 14 39 5f 51 32 35 ===.[1PCLK.9_Q25 4f70: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 35 .p.=====QUERY_25 4f80: 3d 3d 3d 3d 3d 00 5b 31 5b 22 0b e8 03 86 5e 5e =====.[1["....^^ 4f90: 42 41 54 31 0a 81 5b 22 0b e8 03 86 5e 5e 42 41 BAT1..["....^^BA 4fa0: 54 31 0a 80 14 2f 5f 51 33 34 00 70 0d 3d 3d 3d T1.../_Q34.p.=== 4fb0: 3d 3d 51 55 45 52 59 5f 33 34 3d 3d 3d 3d 3d 00 ==QUERY_34=====. 4fc0: 5b 31 a0 11 42 4b 45 59 50 48 53 53 0a 71 70 00 [1..BKEYPHSS.qp. 4fd0: 42 4b 45 59 14 32 5f 51 33 37 00 70 0d 3d 3d 3d BKEY.2_Q37.p.=== 4fe0: 3d 3d 51 55 45 52 59 5f 33 37 3d 3d 3d 3d 3d 00 ==QUERY_37=====. 4ff0: 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 03 86 5e [1.ACAD..["....^ 5000: 5e 42 41 54 31 0a 80 14 32 5f 51 33 38 00 70 0d ^BAT1...2_Q38.p. 5010: 3d 3d 3d 3d 3d 51 55 45 52 59 5f 33 38 3d 3d 3d =====QUERY_38=== 5020: 3d 3d 00 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 ==.[1.ACAD..[".. 5030: 03 86 5e 5e 42 41 54 31 0a 80 14 29 5f 51 32 44 ..^^BAT1...)_Q2D 5040: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 44 .p.=====QUERY_2D 5050: 3d 3d 3d 3d 3d 00 5b 31 70 00 44 54 53 4d 54 52 =====.[1p.DTSMTR 5060: 41 50 0a 46 14 29 5f 51 32 45 00 70 0d 3d 3d 3d AP.F.)_Q2E.p.=== 5070: 3d 3d 51 55 45 52 59 5f 32 45 3d 3d 3d 3d 3d 00 ==QUERY_2E=====. 5080: 5b 31 70 01 44 54 53 4d 54 52 41 50 0a 46 5b 80 [1p.DTSMTRAP.F[. 5090: 43 43 4c 4b 01 0b 10 10 0a 04 5b 81 20 43 43 4c CCLK......[. CCL 50a0: 4b 03 00 01 44 55 54 59 03 54 48 45 4e 01 00 03 K...DUTY.THEN... 50b0: 46 54 54 5f 01 00 08 54 53 54 53 01 5b 80 45 43 FTT_...TSTS.[.EC 50c0: 52 4d 03 00 0a ff 5b 81 44 04 45 43 52 4d 11 00 RM....[.D.ECRM.. 50d0: 40 4a 45 52 49 42 10 45 52 42 44 08 00 48 0a 53 @JERIB.ERBD..H.S 50e0: 44 54 4d 08 46 53 53 4e 04 46 41 4e 55 04 50 54 DTM.FSSN.FANU.PT 50f0: 56 4c 03 00 04 54 54 48 52 01 00 48 06 50 4a 49 VL...TTHR..H.PJI 5100: 44 08 00 08 00 48 1d 52 46 52 44 10 5b 01 46 41 D....H.RFRD.[.FA 5110: 4d 58 00 14 22 46 41 4e 47 01 5b 23 46 41 4d 58 MX.."FANG.[#FAMX 5120: ff ff 70 68 45 52 49 42 70 45 52 42 44 60 5b 27 ..phERIBpERBD`[' 5130: 46 41 4d 58 a4 60 14 22 46 41 4e 57 02 5b 23 46 FAMX.`."FANW.[#F 5140: 41 4d 58 ff ff 70 68 45 52 49 42 70 69 45 52 42 AMX..phERIBpiERB 5150: 44 5b 27 46 41 4d 58 a4 69 14 09 54 55 56 52 01 D['FAMX.i..TUVR. 5160: a4 0a 03 14 2e 54 48 52 4f 01 a0 09 93 68 00 a4 .....THRO....h.. 5170: 54 48 45 4e a1 1d a0 09 93 68 01 a4 44 55 54 59 THEN.....h..DUTY 5180: a1 11 a0 0a 93 68 0a 02 a4 54 54 48 52 a1 04 a4 .....h...TTHR... 5190: 0a ff 14 2a 43 4c 43 4b 01 a0 10 93 68 00 70 00 ...*CLCK....h.p. 51a0: 54 48 45 4e 70 00 46 54 54 5f a1 0d 70 68 44 55 THENp.FTT_..phDU 51b0: 54 59 70 01 54 48 45 4e a4 54 48 45 4e 14 37 50 TYp.THEN.THEN.7P 51c0: 43 4c 4b 00 70 50 54 56 4c 60 a0 10 93 60 00 70 CLK.pPTVL`...`.p 51d0: 00 54 48 45 4e 70 00 46 54 54 5f a1 19 76 60 70 .THENp.FTT_..v`p 51e0: 80 60 00 61 7b 61 0a 07 61 70 61 44 55 54 59 70 .`.a{a..apaDUTYp 51f0: 01 54 48 45 4e 5b 82 4b 22 42 41 54 31 08 5f 48 .THEN[.K"BAT1._H 5200: 49 44 0c 41 d0 0c 0a 08 5f 55 49 44 01 08 5f 50 ID.A...._UID.._P 5210: 43 4c 12 06 01 5f 53 42 5f 14 39 5f 53 54 41 00 CL..._SB_.9_STA. 5220: a0 29 90 45 43 4f 4b 93 45 43 44 59 00 a0 13 5e .).ECOK.ECDY...^ 5230: 5e 2e 45 43 30 5f 42 41 4c 30 5b 22 0a 14 a4 0a ^.EC0_BAL0[".... 5240: 1f a1 08 5b 22 0a 14 a4 0a 0f a1 08 5b 22 0a 14 ...[".......[".. 5250: a4 0a 1f 14 48 10 5f 42 49 46 00 08 53 54 41 54 ....H._BIF..STAT 5260: 12 3a 0d 01 0b a0 0f 0b a0 0f 01 0b 5c 2b 0b a4 .:..........\+.. 5270: 01 0a 9c 0b 08 01 0b c4 0e 0d 50 41 33 34 36 35 ..........PA3465 5280: 55 20 00 0d 33 36 35 38 51 00 0d 4c 69 2d 49 6f U ..3658Q..Li-Io 5290: 6e 00 0d 43 4f 4d 50 41 4c 20 00 a0 4b 07 90 45 n..COMPAL ..K..E 52a0: 43 4f 4b 93 45 43 44 59 00 70 5e 5e 2e 45 43 30 COK.ECDY.p^^.EC0 52b0: 5f 42 44 4e 30 60 a0 23 93 60 0a 08 70 0a b4 88 _BDN0`.#.`..p... 52c0: 53 54 41 54 0a 06 00 70 0d 50 41 33 34 35 37 55 STAT...p.PA3457U 52d0: 20 00 88 53 54 41 54 0a 09 00 a0 24 93 60 0a 20 ..STAT....$.`. 52e0: 70 0b 02 01 88 53 54 41 54 0a 06 00 70 0d 50 41 p....STAT...p.PA 52f0: 33 34 35 37 55 20 00 88 53 54 41 54 0a 09 00 5b 3457U ..STAT...[ 5300: 22 0a 14 70 5e 5e 2e 45 43 30 5f 42 44 43 30 42 "..p^^.EC0_BDC0B 5310: 46 43 31 5b 22 0a 14 a1 12 70 0d 4c 69 2d 49 6f FC1["....p.Li-Io 5320: 6e 00 88 53 54 41 54 0a 0b 00 a0 2c 42 46 43 31 n..STAT....,BFC1 5330: 78 42 46 43 31 0a 64 60 61 77 61 0a 64 61 70 61 xBFC1.d`awa.dapa 5340: 42 46 43 31 70 61 88 53 54 41 54 01 00 70 61 88 BFC1pa.STAT..pa. 5350: 53 54 41 54 0a 02 00 a4 53 54 41 54 14 45 0c 5f STAT....STAT.E._ 5360: 42 53 54 00 08 50 42 53 54 12 10 04 00 0c ff ff BST..PBST....... 5370: ff ff 0c ff ff ff ff 0b 5c 2b 70 0b 5c 2b 63 a0 ........\+p.\+c. 5380: 38 90 45 43 4f 4b 93 45 43 44 59 00 5b 22 0a 14 8.ECOK.ECDY.[".. 5390: 70 5e 5e 2e 45 43 30 5f 42 53 54 30 42 53 54 31 p^^.EC0_BST0BST1 53a0: 5b 22 0a 14 70 5e 5e 2e 45 43 30 5f 47 41 55 30 ["..p^^.EC0_GAU0 53b0: 42 47 55 31 5b 22 0a 14 a0 15 42 46 43 31 77 42 BGU1["....BFC1wB 53c0: 47 55 31 42 46 43 31 62 78 62 0a 64 64 62 a1 09 GU1BFC1bxb.ddb.. 53d0: 77 42 47 55 31 0a 28 62 70 42 53 54 31 88 50 42 wBGU1.(bpBST1.PB 53e0: 53 54 00 00 70 00 88 50 42 53 54 01 00 70 62 88 ST..p..PBST..pb. 53f0: 50 42 53 54 0a 02 00 70 63 88 50 42 53 54 0a 03 PBST...pc.PBST.. 5400: 00 a0 1b 94 45 43 44 59 00 76 45 43 44 59 a0 0e ....ECDY.vECDY.. 5410: 93 45 43 44 59 00 86 42 41 54 31 0a 80 a4 50 42 .ECDY..BAT1...PB 5420: 53 54 5b 82 2e 50 53 32 4b 08 5f 48 49 44 0c 41 ST[..PS2K._HID.A 5430: d0 03 03 08 5f 43 52 53 11 19 0a 16 47 01 60 00 ...._CRS....G.`. 5440: 60 00 01 01 47 01 64 00 64 00 01 01 23 02 00 01 `...G.d.d...#... 5450: 79 00 5b 82 1e 50 53 32 4d 08 5f 48 49 44 0c 41 y.[..PS2M._HID.A 5460: d0 0f 13 08 5f 43 52 53 11 09 0a 06 23 00 10 01 ...._CRS....#... 5470: 79 00 5b 82 43 6a 50 41 54 41 08 5f 41 44 52 0c y.[.CjPATA._ADR. 5480: 01 00 1f 00 5b 80 50 41 43 53 02 0a 40 0a c0 5b ....[.PACS..@..[ 5490: 81 49 04 50 41 43 53 03 50 52 49 54 10 00 10 50 .I.PACS.PRIT...P 54a0: 53 49 54 04 00 1c 53 59 4e 43 04 00 0c 53 44 54 SIT...SYNC...SDT 54b0: 30 02 00 02 53 44 54 31 02 00 4a 04 49 43 52 30 0...SDT1..J.ICR0 54c0: 04 49 43 52 31 04 49 43 52 32 04 49 43 52 33 04 .ICR1.ICR2.ICR3. 54d0: 49 43 52 34 04 49 43 52 35 04 5b 82 4b 63 50 52 ICR4.ICR5.[.KcPR 54e0: 49 44 08 5f 41 44 52 00 14 40 17 5f 47 54 4d 00 ID._ADR..@._GTM. 54f0: 08 50 42 55 46 11 17 0a 14 00 00 00 00 00 00 00 .PBUF........... 5500: 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 50 42 ..............PB 5510: 55 46 00 50 49 4f 30 8a 50 42 55 46 0a 04 44 4d UF.PIO0.PBUF..DM 5520: 41 30 8a 50 42 55 46 0a 08 50 49 4f 31 8a 50 42 A0.PBUF..PIO1.PB 5530: 55 46 0a 0c 44 4d 41 31 8a 50 42 55 46 0a 10 46 UF..DMA1.PBUF..F 5540: 4c 41 47 70 47 45 54 50 50 52 49 54 50 49 4f 30 LAGpGETPPRITPIO0 5550: 70 47 44 4d 41 7b 53 59 4e 43 01 00 7b 49 43 52 pGDMA{SYNC..{ICR 5560: 33 01 00 7b 49 43 52 30 01 00 53 44 54 30 7b 49 3..{ICR0..SDT0{I 5570: 43 52 31 01 00 44 4d 41 30 a0 14 93 44 4d 41 30 CR1..DMA0...DMA0 5580: 0c ff ff ff ff 70 50 49 4f 30 44 4d 41 30 a0 2e .....pPIO0DMA0.. 5590: 7b 50 52 49 54 0b 00 40 00 a0 14 93 7b 50 52 49 {PRIT..@....{PRI 55a0: 54 0a 90 00 0a 80 70 0b 84 03 50 49 4f 31 a1 0e T.....p...PIO1.. 55b0: 70 47 45 54 54 50 53 49 54 50 49 4f 31 a1 0b 70 pGETTPSITPIO1..p 55c0: 0c ff ff ff ff 50 49 4f 31 70 47 44 4d 41 7b 53 .....PIO1pGDMA{S 55d0: 59 4e 43 0a 02 00 7b 49 43 52 33 0a 02 00 7b 49 YNC...{ICR3...{I 55e0: 43 52 30 0a 02 00 53 44 54 31 7b 49 43 52 31 0a CR0...SDT1{ICR1. 55f0: 02 00 44 4d 41 31 a0 14 93 44 4d 41 31 0c ff ff ..DMA1...DMA1... 5600: ff ff 70 50 49 4f 31 44 4d 41 31 70 47 45 54 46 ..pPIO1DMA1pGETF 5610: 7b 53 59 4e 43 01 00 7b 53 59 4e 43 0a 02 00 50 {SYNC..{SYNC...P 5620: 52 49 54 46 4c 41 47 a0 2c 7b 93 50 49 4f 30 0c RITFLAG.,{.PIO0. 5630: ff ff ff ff 93 44 4d 41 30 0c ff ff ff ff 00 70 .....DMA0......p 5640: 0a 78 50 49 4f 30 70 0a 14 44 4d 41 30 70 0a 03 .xPIO0p..DMA0p.. 5650: 46 4c 41 47 a4 50 42 55 46 14 4c 2a 5f 53 54 4d FLAG.PBUF.L*_STM 5660: 03 8a 68 00 50 49 4f 30 8a 68 0a 04 44 4d 41 30 ..h.PIO0.h..DMA0 5670: 8a 68 0a 08 50 49 4f 31 8a 68 0a 0c 44 4d 41 31 .h..PIO1.h..DMA1 5680: 8a 68 0a 10 46 4c 41 47 a0 41 12 93 87 69 0b 00 .h..FLAG.A...i.. 5690: 02 7b 50 52 49 54 0b f0 c0 50 52 49 54 7b 53 59 .{PRIT...PRIT{SY 56a0: 4e 43 0a 02 53 59 4e 43 70 00 53 44 54 30 7b 49 NC..SYNCp.SDT0{I 56b0: 43 52 30 0a 02 49 43 52 30 7b 49 43 52 31 0a 02 CR0..ICR0{ICR1.. 56c0: 49 43 52 31 7b 49 43 52 33 0a 02 49 43 52 33 7b ICR1{ICR3..ICR3{ 56d0: 49 43 52 35 0a 02 49 43 52 35 8b 69 0a 62 57 34 ICR5..ICR5.i.bW4 56e0: 39 30 8b 69 0a 6a 57 35 33 30 8b 69 0a 7e 57 36 90.i.jW530.i.~W6 56f0: 33 30 8b 69 0a 80 57 36 34 30 8b 69 0a b0 57 38 30.i..W640.i..W8 5700: 38 30 8b 69 0a ba 57 39 33 30 7d 50 52 49 54 0b 80.i..W930}PRIT. 5710: 04 80 50 52 49 54 a0 1e 90 7b 46 4c 41 47 0a 02 ..PRIT...{FLAG.. 5720: 00 7b 57 34 39 30 0b 00 08 00 7d 50 52 49 54 0a .{W490....}PRIT. 5730: 02 50 52 49 54 7d 50 52 49 54 53 45 54 50 50 49 .PRIT}PRITSETPPI 5740: 4f 30 57 35 33 30 57 36 34 30 50 52 49 54 a0 4b O0W530W640PRIT.K 5750: 05 7b 46 4c 41 47 01 00 7d 53 59 4e 43 01 53 59 .{FLAG..}SYNC.SY 5760: 4e 43 70 53 44 4d 41 44 4d 41 30 53 44 54 30 a0 NCpSDMADMA0SDT0. 5770: 12 95 44 4d 41 30 0a 1e 7d 49 43 52 33 01 49 43 ..DMA0..}ICR3.IC 5780: 52 33 a0 12 95 44 4d 41 30 0a 3c 7d 49 43 52 30 R3...DMA0.<}ICR0 5790: 01 49 43 52 30 a0 14 7b 57 39 33 30 0b 00 20 00 .ICR0..{W930.. . 57a0: 7d 49 43 52 31 01 49 43 52 31 a0 4b 15 93 87 6a }ICR1.ICR1.K...j 57b0: 0b 00 02 7b 50 52 49 54 0b 0f bf 50 52 49 54 70 ...{PRIT...PRITp 57c0: 00 50 53 49 54 7b 53 59 4e 43 01 53 59 4e 43 70 .PSIT{SYNC.SYNCp 57d0: 00 53 44 54 31 7b 49 43 52 30 01 49 43 52 30 7b .SDT1{ICR0.ICR0{ 57e0: 49 43 52 31 01 49 43 52 31 7b 49 43 52 33 01 49 ICR1.ICR1{ICR3.I 57f0: 43 52 33 7b 49 43 52 35 01 49 43 52 35 8b 6a 0a CR3{ICR5.ICR5.j. 5800: 62 57 34 39 31 8b 6a 0a 6a 57 35 33 31 8b 6a 0a bW491.j.jW531.j. 5810: 7e 57 36 33 31 8b 6a 0a 80 57 36 34 31 8b 6a 0a ~W631.j..W641.j. 5820: b0 57 38 38 31 8b 6a 0a ba 57 39 33 31 7d 50 52 .W881.j..W931}PR 5830: 49 54 0b 40 80 50 52 49 54 a0 1e 90 7b 46 4c 41 IT.@.PRIT...{FLA 5840: 47 0a 08 00 7b 57 34 39 31 0b 00 08 00 7d 50 52 G...{W491....}PR 5850: 49 54 0a 20 50 52 49 54 a0 4c 04 7b 46 4c 41 47 IT. PRIT.L.{FLAG 5860: 0a 10 00 7d 50 52 49 54 0b 00 40 50 52 49 54 a0 ...}PRIT..@PRIT. 5870: 13 94 50 49 4f 31 0a f0 7d 50 52 49 54 0a 80 50 ..PIO1..}PRIT..P 5880: 52 49 54 a1 21 7d 50 52 49 54 0a 10 50 52 49 54 RIT.!}PRIT..PRIT 5890: 70 53 45 54 54 50 49 4f 31 57 35 33 31 57 36 34 pSETTPIO1W531W64 58a0: 31 50 53 49 54 a0 40 06 7b 46 4c 41 47 0a 04 00 1PSIT.@.{FLAG... 58b0: 7d 53 59 4e 43 0a 02 53 59 4e 43 70 53 44 4d 41 }SYNC..SYNCpSDMA 58c0: 44 4d 41 31 53 44 54 31 a0 13 95 44 4d 41 31 0a DMA1SDT1...DMA1. 58d0: 1e 7d 49 43 52 33 0a 02 49 43 52 33 a0 13 95 44 .}ICR3..ICR3...D 58e0: 4d 41 31 0a 3c 7d 49 43 52 30 0a 02 49 43 52 30 MA1.<}ICR0..ICR0 58f0: a0 15 7b 57 39 33 31 0b 00 20 00 7d 49 43 52 31 ..{W931.. .}ICR1 5900: 0a 02 49 43 52 31 5b 82 47 10 50 5f 44 30 08 5f ..ICR1[.G.P_D0._ 5910: 41 44 52 00 14 4a 0f 5f 47 54 46 00 08 50 49 42 ADR..J._GTF..PIB 5920: 30 11 11 0a 0e 03 00 00 00 00 a0 ef 03 00 00 00 0............... 5930: 00 a0 ef 8c 50 49 42 30 01 50 4d 44 30 8c 50 49 ....PIB0.PMD0.PI 5940: 42 30 0a 08 44 4d 44 30 a0 40 06 7b 50 52 49 54 B0..DMD0.@.{PRIT 5950: 0a 02 00 a0 13 93 7b 50 52 49 54 0a 09 00 0a 08 ......{PRIT..... 5960: 70 0a 08 50 4d 44 30 a1 41 04 70 0a 0a 50 4d 44 p..PMD0.A.p..PMD 5970: 30 7a 7b 50 52 49 54 0b 00 03 00 0a 08 60 7a 7b 0z{PRIT......`z{ 5980: 50 52 49 54 0b 00 30 00 0a 0c 61 72 60 61 62 a0 PRIT..0...ar`ab. 5990: 0c 93 0a 03 62 70 0a 0b 50 4d 44 30 a0 0c 93 0a ....bp..PMD0.... 59a0: 05 62 70 0a 0c 50 4d 44 30 a1 07 70 01 50 4d 44 .bp..PMD0..p.PMD 59b0: 30 a0 43 04 7b 53 59 4e 43 01 00 70 7d 53 44 54 0.C.{SYNC..p}SDT 59c0: 30 0a 40 00 44 4d 44 30 a0 2c 7b 49 43 52 31 01 0.@.DMD0.,{ICR1. 59d0: 00 a0 13 7b 49 43 52 30 01 00 72 44 4d 44 30 0a ...{ICR0..rDMD0. 59e0: 02 44 4d 44 30 a0 0f 7b 49 43 52 33 01 00 70 0a .DMD0..{ICR3..p. 59f0: 45 44 4d 44 30 a1 14 7d 74 7b 50 4d 44 30 0a 07 EDMD0..}t{PMD0.. 5a00: 00 0a 02 00 0a 20 44 4d 44 30 a4 50 49 42 30 5b ..... DMD0.PIB0[ 5a10: 82 46 10 50 5f 44 31 08 5f 41 44 52 01 14 49 0f .F.P_D1._ADR..I. 5a20: 5f 47 54 46 00 08 50 49 42 31 11 11 0a 0e 03 00 _GTF..PIB1...... 5a30: 00 00 00 b0 ef 03 00 00 00 00 b0 ef 8c 50 49 42 .............PIB 5a40: 31 01 50 4d 44 31 8c 50 49 42 31 0a 08 44 4d 44 1.PMD1.PIB1..DMD 5a50: 31 a0 4b 05 7b 50 52 49 54 0a 20 00 a0 13 93 7b 1.K.{PRIT. ....{ 5a60: 50 52 49 54 0a 90 00 0a 80 70 0a 08 50 4d 44 31 PRIT.....p..PMD1 5a70: a1 3c 72 7b 50 53 49 54 0a 03 00 7a 7b 50 53 49 .. 0050: 80 49 ee 6a 65 26 72 1e cd bf 5f 2f 96 d6 c0 0a .I.je&r..._/.... 0060: 92 f5 06 b5 00 b2 3b 29 02 e2 4c 8d c2 f2 bc 41 ......;)..L....A 0070: 77 9c 70 f0 f3 1b 09 d2 63 5a dc a8 83 f8 5e c9 w.p.....cZ....^. 0080: 15 95 f9 fa fd dc 05 b7 4d 67 7f 2d b3 84 33 20 ........Mg.-..3 0090: e1 d1 79 2a a7 6a 77 d1 b6 20 2a 76 42 c5 d5 e9 ..y*.jw.. *vB... 00a0: b6 43 40 55 44 c3 c9 37 99 5f 41 97 70 f3 d1 f6 .C@UD..7._A.p... 00b0: 07 ec 7b 1a 29 a1 c1 f1 91 fd 48 86 6e 3e ce cb ..{.).....H.n>.. 00c0: 01 00 00 00 b6 00 00 00 00 00 02 00 4c 45 4e 4f ............LENO 00d0: 56 4f 54 50 2d 36 38 20 20 20 57 49 4e 44 4f 57 VOTP-68 WINDOW 00e0: 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 S .............. 00f0: 00 00 00 00 00 00 8a 6e 2e c9 36 e6 7f 10 8a ea .......n..6..... 0100: 14 ad d2 93 b7 6d 9b 73 ad 83 36 b8 6c a7 a7 ee .....m.s..6.l... 0110: 37 47 16 fe f3 fc cd c7 89 84 06 16 91 0b 1e 81 7G.............. 0120: 11 42 b1 35 52 57 f6 6b bb 5f a5 81 e2 ff 89 8a .B.5RW.k._...... 0130: 95 c3 4d fc e9 56 4f 4c 34 cc 99 5e 62 e1 90 8a ..M..VOL4..^b... 0140: 54 be 4a 00 5c 9b a0 86 41 46 66 9d e2 f2 e7 36 T.J.\...AFf....6 0150: 9c 33 91 27 e7 8d 5c a1 d8 f9 a4 61 8a 1c 04 07 .3.'..\....a.... 0160: e3 2a 1e 14 f1 bd 7f 4c 09 ff 19 11 a9 d4 74 ca .*.....L......t. 0170: 11 9e dc 54 39 bf ...T9. APIC @ 0xbf6dff70 0000: 41 50 49 43 68 00 00 00 01 13 50 54 4c 54 44 20 APICh.....PTLTD 0010: 09 20 41 50 49 43 20 20 00 00 04 06 20 4c 54 50 . APIC .... LTP 0020: 00 00 00 00 00 00 e0 fe 01 00 00 00 00 08 00 00 ................ 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0c 02 00 ................ 0040: 00 00 c0 fe 00 00 00 00 04 06 00 05 00 01 04 06 ................ 0050: 01 05 00 01 02 0a 00 00 02 00 00 00 05 00 02 0a ................ 0060: 00 09 09 00 00 00 0d 00 ........ BOOT @ 0xbf6dffd8 0000: 42 4f 4f 54 28 00 00 00 01 a5 50 54 4c 54 44 20 BOOT(.....PTLTD 0010: 24 53 42 46 54 42 4c 24 00 00 04 06 20 4c 54 50 $SBFTBL$.... LTP 0020: 01 00 00 00 36 00 00 00 ....6... SSDT @ 0xbf6d98bd 0000: 53 53 44 54 ad 02 00 00 01 59 53 61 74 61 52 65 SSDT.....YSataRe 0010: 53 61 74 61 41 68 63 69 00 10 00 00 49 4e 54 4c SataAhci....INTL 0020: 24 06 05 20 10 48 28 5c 2f 03 5f 53 42 5f 50 43 $.. .H(\/._SB_PC 0030: 49 30 53 41 54 41 5b 82 4f 0c 50 52 54 30 08 5f I0SATA[.O.PRT0._ 0040: 41 44 52 0b ff ff 14 44 0b 5f 53 44 44 01 08 47 ADR....D._SDD..G 0050: 42 55 30 11 0a 0a 07 00 00 00 00 00 a0 00 8c 47 BU0............G 0060: 42 55 30 0a 00 47 42 30 30 8c 47 42 55 30 0a 01 BU0..GB00.GBU0.. 0070: 47 42 30 31 8c 47 42 55 30 0a 02 47 42 30 32 8c GB01.GBU0..GB02. 0080: 47 42 55 30 0a 03 47 42 30 33 8c 47 42 55 30 0a GBU0..GB03.GBU0. 0090: 04 47 42 30 34 8c 47 42 55 30 0a 05 47 42 30 35 .GB04.GBU0..GB05 00a0: 8c 47 42 55 30 0a 06 47 42 30 36 a0 46 04 93 87 .GBU0..GB06.F... 00b0: 68 0b 00 02 8b 68 0a 9c 57 37 38 30 a0 1e 7b 57 h....h..W780..{W 00c0: 37 38 30 0a 08 00 70 0a 10 47 42 30 30 70 0a 03 780...p..GB00p.. 00d0: 47 42 30 31 70 0a ef 47 42 30 36 a1 16 70 0a 90 GB01p..GB06..p.. 00e0: 47 42 30 30 70 0a 03 47 42 30 31 70 0a ef 47 42 GB00p..GB01p..GB 00f0: 30 36 70 47 42 55 30 47 54 46 30 14 0b 5f 47 54 06pGBU0GTF0.._GT 0100: 46 00 a4 47 54 46 30 5b 82 41 0d 50 52 54 31 08 F..GTF0[.A.PRT1. 0110: 5f 41 44 52 0c ff ff 01 00 14 44 0b 5f 53 44 44 _ADR......D._SDD 0120: 01 08 47 42 55 31 11 0a 0a 07 00 00 00 00 00 a0 ..GBU1.......... 0130: 00 8c 47 42 55 31 0a 00 47 42 31 30 8c 47 42 55 ..GBU1..GB10.GBU 0140: 31 0a 01 47 42 31 31 8c 47 42 55 31 0a 02 47 42 1..GB11.GBU1..GB 0150: 31 32 8c 47 42 55 31 0a 03 47 42 31 33 8c 47 42 12.GBU1..GB13.GB 0160: 55 31 0a 04 47 42 31 34 8c 47 42 55 31 0a 05 47 U1..GB14.GBU1..G 0170: 42 31 35 8c 47 42 55 31 0a 06 47 42 31 36 a0 46 B15.GBU1..GB16.F 0180: 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 38 31 a0 ...h....h..W781. 0190: 1e 7b 57 37 38 31 0a 08 00 70 0a 10 47 42 31 30 .{W781...p..GB10 01a0: 70 0a 03 47 42 31 31 70 0a ef 47 42 31 36 a1 16 p..GB11p..GB16.. 01b0: 70 0a 90 47 42 31 30 70 0a 03 47 42 31 31 70 0a p..GB10p..GB11p. 01c0: ef 47 42 31 36 70 47 42 55 31 47 54 46 31 14 0b .GB16pGBU1GTF1.. 01d0: 5f 47 54 46 00 a4 47 54 46 31 5b 82 41 0d 50 52 _GTF..GTF1[.A.PR 01e0: 54 32 08 5f 41 44 52 0c ff ff 02 00 14 44 0b 5f T2._ADR......D._ 01f0: 53 44 44 01 08 47 42 55 32 11 0a 0a 07 00 00 00 SDD..GBU2....... 0200: 00 00 a0 00 8c 47 42 55 32 0a 00 47 42 32 30 8c .....GBU2..GB20. 0210: 47 42 55 32 0a 01 47 42 32 31 8c 47 42 55 32 0a GBU2..GB21.GBU2. 0220: 02 47 42 32 32 8c 47 42 55 32 0a 03 47 42 32 33 .GB22.GBU2..GB23 0230: 8c 47 42 55 32 0a 04 47 42 32 34 8c 47 42 55 32 .GBU2..GB24.GBU2 0240: 0a 05 47 42 32 35 8c 47 42 55 32 0a 06 47 42 32 ..GB25.GBU2..GB2 0250: 36 a0 46 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 6.F...h....h..W7 0260: 38 32 a0 1e 7b 57 37 38 32 0a 08 00 70 0a 10 47 82..{W782...p..G 0270: 42 32 30 70 0a 03 47 42 32 31 70 0a ef 47 42 32 B20p..GB21p..GB2 0280: 36 a1 16 70 0a 90 47 42 32 30 70 0a 03 47 42 32 6..p..GB20p..GB2 0290: 31 70 0a ef 47 42 32 36 70 47 42 55 32 47 54 46 1p..GB26pGBU2GTF 02a0: 32 14 0b 5f 47 54 46 00 a4 47 54 46 32 2.._GTF..GTF2 SSDT @ 0xbf6d981a 0000: 53 53 44 54 a3 00 00 00 01 ed 42 72 74 52 65 66 SSDT......BrtRef 0010: 44 44 30 31 42 52 54 00 00 10 00 00 49 4e 54 4c DD01BRT.....INTL 0020: 24 06 05 20 10 4e 07 5c 2f 04 5f 53 42 5f 50 43 $.. .N.\/._SB_PC 0030: 49 30 47 46 58 30 44 44 30 33 14 1e 5f 42 43 4c I0GFX0DD03.._BCL 0040: 00 a4 12 16 0a 0a 46 0a 28 0a 00 0a 0a 0a 14 0a ......F.(....... 0050: 1e 0a 28 0a 32 0a 3c 0a 46 14 25 5f 42 43 4d 01 ..(.2.<.F.%_BCM. 0060: 78 68 0a 0a 60 61 70 61 5c 2f 05 5f 53 42 5f 50 xh..`apa\/._SB_P 0070: 43 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 14 CI0LPCBEC0_BRTS. 0080: 23 5f 42 51 43 00 77 5c 2f 05 5f 53 42 5f 50 43 #_BQC.w\/._SB_PC 0090: 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 0a 0a I0LPCBEC0_BRTS.. 00a0: 60 a4 60 `.` SSDT @ 0xbf6d8e10 0000: 53 53 44 54 5f 02 00 00 01 c8 50 6d 52 65 66 00 SSDT_.....PmRef. 0010: 43 70 75 30 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu0Tst..0..INTL 0020: 24 06 05 20 10 4a 23 5c 2e 5f 50 52 5f 43 50 55 $.. .J#\._PR_CPU 0030: 30 08 5f 54 50 43 0a 00 14 4d 06 5f 50 54 43 00 0._TPC...M._PTC. 0040: a0 37 7b 50 44 43 30 0a 04 00 a4 12 2c 02 11 14 .7{PDC0.....,... 0050: 0a 11 82 0c 00 7f 00 00 00 00 00 00 00 00 00 00 ................ 0060: 00 79 00 11 14 0a 11 82 0c 00 7f 00 00 00 00 00 .y.............. 0070: 00 00 00 00 00 00 79 00 a4 12 2c 02 11 14 0a 11 ......y...,..... 0080: 82 0c 00 01 04 01 00 10 10 00 00 00 00 00 00 79 ...............y 0090: 00 11 14 0a 11 82 0c 00 01 04 01 00 10 10 00 00 ................ 00a0: 00 00 00 00 79 00 08 54 53 53 49 12 41 07 08 12 ....y..TSSI.A... 00b0: 0d 05 0a 64 0b e8 03 0a 00 0a 00 0a 00 12 0d 05 ...d............ 00c0: 0a 58 0b 6b 03 0a 00 0a 0f 0a 00 12 0d 05 0a 4b .X.k...........K 00d0: 0b ee 02 0a 00 0a 0e 0a 00 12 0d 05 0a 3f 0b 71 .............?.q 00e0: 02 0a 00 0a 0d 0a 00 12 0d 05 0a 32 0b f4 01 0a ...........2.... 00f0: 00 0a 0c 0a 00 12 0d 05 0a 26 0b 77 01 0a 00 0a .........&.w.... 0100: 0b 0a 00 12 0c 05 0a 19 0a fa 0a 00 0a 0a 0a 00 ................ 0110: 12 0c 05 0a 0d 0a 7d 0a 00 0a 09 0a 00 08 54 53 ......}.......TS 0120: 53 4d 12 41 07 08 12 0d 05 0a 64 0b e8 03 0a 00 SM.A......d..... 0130: 0a 00 0a 00 12 0d 05 0a 58 0b 6b 03 0a 00 0a 1e ........X.k..... 0140: 0a 00 12 0d 05 0a 4b 0b ee 02 0a 00 0a 1c 0a 00 ......K......... 0150: 12 0d 05 0a 3f 0b 71 02 0a 00 0a 1a 0a 00 12 0d ....?.q......... 0160: 05 0a 32 0b f4 01 0a 00 0a 18 0a 00 12 0d 05 0a ..2............. 0170: 26 0b 77 01 0a 00 0a 16 0a 00 12 0c 05 0a 19 0a &.w............. 0180: fa 0a 00 0a 14 0a 00 12 0c 05 0a 0d 0a 7d 0a 00 .............}.. 0190: 0a 12 0a 00 08 54 53 53 46 0a 00 14 43 08 5f 54 .....TSSF...C._T 01a0: 53 53 00 a0 47 06 90 92 54 53 53 46 5b 12 5f 50 SS..G...TSSF[._P 01b0: 53 53 00 70 5f 50 53 53 60 70 87 60 61 76 61 70 SS.p_PSS`p.`avap 01c0: 83 88 83 88 60 61 00 0a 01 00 62 70 0a 00 63 a2 ....`a....bp..c. 01d0: 35 95 63 87 54 53 53 49 70 78 77 62 74 0a 08 63 5.c.TSSIpxwbt..c 01e0: 00 00 0a 08 00 00 64 70 64 88 83 88 54 53 53 49 ......dpd...TSSI 01f0: 63 00 0a 01 00 70 64 88 83 88 54 53 53 4d 63 00 c....pd...TSSMc. 0200: 0a 01 00 75 63 70 ff 54 53 53 46 a0 0e 7b 50 44 ...ucp.TSSF..{PD 0210: 43 30 0a 04 00 a4 54 53 53 4d a4 54 53 53 49 14 C0....TSSM.TSSI. 0220: 3f 5f 54 53 44 00 a0 27 90 7b 43 46 47 44 0c 00 ?_TSD..'.{CFGD.. 0230: 00 00 01 00 92 7b 50 44 43 30 0a 04 00 a4 12 0f .....{PDC0...... 0240: 01 12 0c 05 0a 05 0a 00 0a 00 0a fd 0a 02 a4 12 ................ 0250: 0f 01 12 0c 05 0a 05 0a 00 0a 00 0a fc 0a 01 ............... SSDT @ 0xbf6d8d6a 0000: 53 53 44 54 a6 00 00 00 01 6d 50 6d 52 65 66 00 SSDT.....mPmRef. 0010: 43 70 75 31 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu1Tst..0..INTL 0020: 24 06 05 20 10 41 08 5c 2e 5f 50 52 5f 43 50 55 $.. .A.\._PR_CPU 0030: 31 08 5f 54 50 43 0a 00 14 16 5f 50 54 43 00 a4 1._TPC...._PTC.. 0040: 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 54 43 14 \/._PR_CPU0_PTC. 0050: 16 5f 54 53 53 00 a4 5c 2f 03 5f 50 52 5f 43 50 ._TSS..\/._PR_CP 0060: 55 30 5f 54 53 53 14 3f 5f 54 53 44 00 a0 27 90 U0_TSS.?_TSD..'. 0070: 7b 43 46 47 44 0c 00 00 00 01 00 92 7b 50 44 43 {CFGD.......{PDC 0080: 31 0a 04 00 a4 12 0f 01 12 0c 05 0a 05 0a 00 0a 1............... 0090: 00 0a fd 0a 02 a4 12 0f 01 12 0c 05 0a 05 0a 00 ................ 00a0: 0a 01 0a fc 0a 01 ...... SSDT @ 0xbf6d8884 0000: 53 53 44 54 e6 04 00 00 01 df 50 6d 52 65 66 00 SSDT......PmRef. 0010: 43 70 75 50 6d 00 00 00 00 30 00 00 49 4e 54 4c CpuPm....0..INTL 0020: 24 06 05 20 10 45 08 5c 00 08 53 53 44 54 12 43 $.. .E.\..SSDT.C 0030: 05 0c 0d 43 50 55 30 49 53 54 20 00 0c 9e 95 6d ...CPU0IST ....m 0040: bf 0c b4 01 00 00 0d 43 50 55 31 49 53 54 20 00 .......CPU1IST . 0050: 0c 52 97 6d bf 0c c8 00 00 00 0d 43 50 55 30 43 .R.m.......CPU0C 0060: 53 54 20 00 0c 6f 90 6d bf 0c aa 04 00 00 0d 43 ST ..o.m.......C 0070: 50 55 31 43 53 54 20 00 0c 19 95 6d bf 0c 85 00 PU1CST ....m.... 0080: 00 00 08 43 46 47 44 0c f1 69 3f 11 08 5c 50 44 ...CFGD..i?..\PD 0090: 43 30 0c 00 00 00 80 08 5c 50 44 43 31 0c 00 00 C0......\PDC1... 00a0: 00 80 08 5c 53 44 54 4c 0a 00 10 4d 21 5c 2e 5f ...\SDTL...M!\._ 00b0: 50 52 5f 43 50 55 30 08 48 49 30 5f 0a 00 08 48 PR_CPU0.HI0_...H 00c0: 43 30 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a C0_...H._PDC..h. 00d0: 00 52 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 .REVS.h..SIZEp.h 00e0: 60 70 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a `pt`...a[.h.@wa. 00f0: 08 00 54 45 4d 50 08 53 54 53 30 11 07 0a 04 00 ..TEMP.STS0..... 0100: 00 00 00 73 53 54 53 30 54 45 4d 50 62 5f 4f 53 ...sSTS0TEMPb_OS 0110: 43 11 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 C......w@.).G... 0120: 70 58 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 pXq9SREVSSIZEb.I 0130: 19 5f 4f 53 43 04 8a 6b 0a 00 53 54 53 30 8a 6b ._OSC..k..STS0.k 0140: 0a 04 43 41 50 30 8a 68 0a 00 49 49 44 30 8a 68 ..CAP0.h..IID0.h 0150: 0a 04 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 ..IID1.h..IID2.h 0160: 0a 0c 49 49 44 33 08 55 49 44 30 11 13 0a 10 16 ..IID3.UID0..... 0170: a6 77 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a .w@.).G...pXq9S. 0180: 55 49 44 30 0a 00 45 49 44 30 8a 55 49 44 30 0a UID0..EID0.UID0. 0190: 04 45 49 44 31 8a 55 49 44 30 0a 08 45 49 44 32 .EID1.UID0..EID2 01a0: 8a 55 49 44 30 0a 0c 45 49 44 33 a0 32 92 90 90 .UID0..EID3.2... 01b0: 93 49 49 44 30 45 49 44 30 93 49 49 44 31 45 49 .IID0EID0.IID1EI 01c0: 44 31 90 93 49 49 44 32 45 49 44 32 93 49 49 44 D1..IID2EID2.IID 01d0: 33 45 49 44 33 70 0a 06 53 54 53 30 a4 6b a0 0f 3EID3p..STS0.k.. 01e0: 92 93 69 0a 01 70 0a 0a 53 54 53 30 a4 6b 7d 7b ..i..p..STS0.k}{ 01f0: 50 44 43 30 0c ff ff ff 7f 00 43 41 50 30 50 44 PDC0......CAP0PD 0200: 43 30 70 7b 50 44 43 30 0a ff 00 50 43 50 30 a0 C0p{PDC0...PCP0. 0210: 4c 05 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b L.{CFGD....A...{ 0220: 43 46 47 44 0c 00 00 00 01 00 93 7b 50 44 43 30 CFGD.......{PDC0 0230: 0a 09 00 0a 09 92 7b 53 44 54 4c 0a 01 00 7d 53 ......{SDTL...}S 0240: 44 54 4c 0a 01 53 44 54 4c 5b 80 49 53 54 30 00 DTL..SDTL[.IST0. 0250: 83 88 53 53 44 54 0a 01 00 83 88 53 53 44 54 0a ..SSDT.....SSDT. 0260: 02 00 5b 20 49 53 54 30 48 49 30 5f a0 49 05 7b ..[ IST0HI0_.I.{ 0270: 43 46 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 CFGD....N...{CFG 0280: 44 0c 00 00 00 01 00 7b 50 44 43 30 0a 18 00 92 D......{PDC0.... 0290: 7b 53 44 54 4c 0a 02 00 7d 53 44 54 4c 0a 02 53 {SDTL...}SDTL..S 02a0: 44 54 4c 5b 80 43 53 54 30 00 83 88 53 53 44 54 DTL[.CST0...SSDT 02b0: 0a 07 00 83 88 53 53 44 54 0a 08 00 5b 20 43 53 .....SSDT...[ CS 02c0: 54 30 48 43 30 5f a4 6b 10 4d 21 5c 2e 5f 50 52 T0HC0_.k.M!\._PR 02d0: 5f 43 50 55 31 08 48 49 31 5f 0a 00 08 48 43 31 _CPU1.HI1_...HC1 02e0: 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a 00 52 _...H._PDC..h..R 02f0: 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 60 70 EVS.h..SIZEp.h`p 0300: 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a 08 00 t`...a[.h.@wa... 0310: 54 45 4d 50 08 53 54 53 31 11 07 0a 04 00 00 00 TEMP.STS1....... 0320: 00 73 53 54 53 31 54 45 4d 50 62 5f 4f 53 43 11 .sSTS1TEMPb_OSC. 0330: 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 70 58 .....w@.).G...pX 0340: 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 19 5f q9SREVSSIZEb.I._ 0350: 4f 53 43 04 8a 6b 0a 00 53 54 53 31 8a 6b 0a 04 OSC..k..STS1.k.. 0360: 43 41 50 31 8a 68 0a 00 49 49 44 30 8a 68 0a 04 CAP1.h..IID0.h.. 0370: 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 0a 0c IID1.h..IID2.h.. 0380: 49 49 44 33 08 55 49 44 31 11 13 0a 10 16 a6 77 IID3.UID1......w 0390: 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a 55 49 @.).G...pXq9S.UI 03a0: 44 31 0a 00 45 49 44 30 8a 55 49 44 31 0a 04 45 D1..EID0.UID1..E 03b0: 49 44 31 8a 55 49 44 31 0a 08 45 49 44 32 8a 55 ID1.UID1..EID2.U 03c0: 49 44 31 0a 0c 45 49 44 33 a0 32 92 90 90 93 49 ID1..EID3.2....I 03d0: 49 44 30 45 49 44 30 93 49 49 44 31 45 49 44 31 ID0EID0.IID1EID1 03e0: 90 93 49 49 44 32 45 49 44 32 93 49 49 44 33 45 ..IID2EID2.IID3E 03f0: 49 44 33 70 0a 06 53 54 53 31 a4 6b a0 0f 92 93 ID3p..STS1.k.... 0400: 69 0a 01 70 0a 0a 53 54 53 31 a4 6b 7d 7b 50 44 i..p..STS1.k}{PD 0410: 43 31 0c ff ff ff 7f 00 43 41 50 31 50 44 43 31 C1......CAP1PDC1 0420: 70 7b 50 44 43 31 0a ff 00 50 43 50 31 a0 4c 05 p{PDC1...PCP1.L. 0430: 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b 43 46 {CFGD....A...{CF 0440: 47 44 0c 00 00 00 01 00 93 7b 50 44 43 31 0a 09 GD.......{PDC1.. 0450: 00 0a 09 92 7b 53 44 54 4c 0a 10 00 7d 53 44 54 ....{SDTL...}SDT 0460: 4c 0a 10 53 44 54 4c 5b 80 49 53 54 31 00 83 88 L..SDTL[.IST1... 0470: 53 53 44 54 0a 04 00 83 88 53 53 44 54 0a 05 00 SSDT.....SSDT... 0480: 5b 20 49 53 54 31 48 49 31 5f a0 49 05 7b 43 46 [ IST1HI1_.I.{CF 0490: 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 44 0c GD....N...{CFGD. 04a0: 00 00 00 01 00 7b 50 44 43 31 0a 18 00 92 7b 53 .....{PDC1....{S 04b0: 44 54 4c 0a 20 00 7d 53 44 54 4c 0a 20 53 44 54 DTL. .}SDTL. SDT 04c0: 4c 5b 80 43 53 54 31 00 83 88 53 53 44 54 0a 0a L[.CST1...SSDT.. 04d0: 00 83 88 53 53 44 54 0a 0b 00 5b 20 43 53 54 31 ...SSDT...[ CST1 04e0: 48 43 31 5f a4 6b HC1_.k XSDT @ 0xbf6d87f0 0000: 58 53 44 54 94 00 00 00 01 c2 4c 45 4e 4f 56 4f XSDT......LENOVO 0010: 54 50 2d 36 38 20 20 20 00 00 04 06 20 4c 54 50 TP-68 .... LTP 0020: 00 00 00 00 d2 fb 6d bf 00 00 00 00 c6 fc 6d bf ......m.......m. 0030: 00 00 00 00 2e fd 6d bf 00 00 00 00 66 fd 6d bf ......m.....f.m. 0040: 00 00 00 00 a2 fd 6d bf 00 00 00 00 d4 fd 6d bf ......m.......m. 0050: 00 00 00 00 fa fd 6d bf 00 00 00 00 70 ff 6d bf ......m.....p.m. 0060: 00 00 00 00 d8 ff 6d bf 00 00 00 00 bd 98 6d bf ......m.......m. 0070: 00 00 00 00 1a 98 6d bf 00 00 00 00 10 8e 6d bf ......m.......m. 0080: 00 00 00 00 6a 8d 6d bf 00 00 00 00 84 88 6d bf ....j.m.......m. 0090: 00 00 00 00 .... RSD PTR @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... fwts-test/acpitables-0001/acpitables-0001.log000066400000000000000000000043061465205512700207050ustar00rootroot00000000000000acpitables acpitables: ACPI table headers sanity tests. acpitables ---------------------------------------------------------- acpitables Test 1 of 2: Test ACPI headers. acpitables PASSED: Test 1, Table DSDT has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table FACP has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table APIC has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table HPET has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table MCFG has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table TCPA has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table TMOR has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table SLIC has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table APIC has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table BOOT has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table SSDT has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table SSDT has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table SSDT has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table SSDT has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table SSDT has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table XSDT has valid signature and ID acpitables strings. acpitables PASSED: Test 1, Table RSDT has valid signature and ID acpitables strings. acpitables acpitables Test 2 of 2: Test ACPI spec versus table revisions. acpitables System supports ACPI 0300 acpitables This test does not support ACPI 0300. acpitables acpitables ========================================================== acpitables 17 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 acpitables info only. acpitables ========================================================== fwts-test/acpitables-0001/results.log000066400000000000000000000000001465205512700177040ustar00rootroot00000000000000fwts-test/acpitables-0001/test-0001.sh000077500000000000000000000011131465205512700174020ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against known correct ACPI tables" NAME=test-0001.sh TMPLOG=$TMP/acpitables.log.$$ $FWTS --show-tests | grep acpitables > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/acpitables-0001/acpidump-0001.log acpitables - | grep "^[0-9]*[ ]*acpitables" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/acpitables-0001/acpitables-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/acpitables-0005/000077500000000000000000000000001465205512700155165ustar00rootroot00000000000000fwts-test/acpitables-0005/acpidump-0001.log000066400000000000000000000010341465205512700203770ustar00rootroot00000000000000MCFG @ 0xbf6dfd66 0000: 4d 43 46 47 3c 00 00 00 01 32 49 4e 54 45 4c 20 MCFG<....2INTEL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 4c 4f 48 52 CRESTLNE....LOHR 0020: 5a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e0 Z............... 0030: 00 00 00 00 00 00 00 ff 00 00 00 00 ............ RSD PTR @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... fwts-test/acpitables-0005/acpitables-0001.log000066400000000000000000000021571465205512700207130ustar00rootroot00000000000000acpitables acpitables: ACPI table settings sanity tests. acpitables ---------------------------------------------------------- acpitables Test 1 of 2: Test ACPI tables. acpitables Cannot find FACP. acpitables Table APIC not present to check. acpitables Table ECDT not present to check. acpitables Table FACP not present to check. acpitables Table GTDT not present to check. acpitables Table HPET not present to check. acpitables PASSED: Test 1, Table MCFG passed. acpitables Table RSDT not present to check. acpitables Table RSDP not present to check. acpitables Table SBST not present to check. acpitables Table XSDT not present to check. acpitables acpitables Test 2 of 2: Test ACPI headers. acpitables PASSED: Test 2, Table MCFG has valid signature and ID acpitables strings. acpitables acpitables ========================================================== acpitables 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 acpitables info only. acpitables ========================================================== fwts-test/aest-0001/000077500000000000000000000000001465205512700143375ustar00rootroot00000000000000fwts-test/aest-0001/acpidump-0001.log000066400000000000000000000114741465205512700172310ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... AEST @ 0x00000000 0000: 41 45 53 54 CC 02 00 00 01 2A 49 4E 54 45 4C 20 AEST.....*INTEL 0010: 54 65 6D 70 6C 61 74 65 01 00 00 00 49 4E 54 4C Template....INTL 0020: 04 06 21 20 00 80 00 00 2C 00 00 00 44 00 00 00 ..! ....,...D... 0030: 74 00 00 00 01 00 00 00 EF CD AB 89 67 45 23 01 t...........gE#. 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: CD FE 00 00 00 00 00 00 EF CD AB 89 67 45 23 01 ............gE#. 0060: 33 33 22 22 00 00 00 00 01 00 00 00 02 00 00 00 33""............ 0070: EF CD AB 89 67 45 23 01 00 00 00 00 01 00 00 00 ....gE#......... 0080: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0090: 11 11 11 01 00 00 00 00 01 00 00 00 EF CD AB 78 ...............x 00a0: 56 00 00 00 00 74 00 00 2C 00 00 00 44 00 00 00 V....t..,...D... 00b0: 00 00 00 00 00 00 00 00 EF CD AB 89 67 45 23 01 ............gE#. 00c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00d0: 11 11 00 00 01 00 01 00 EF CD AB 89 67 45 23 01 ............gE#. 00e0: 67 67 67 67 00 00 00 00 00 00 00 00 03 00 00 00 gggg............ 00f0: EF CD AB 89 67 45 23 01 00 00 00 00 01 00 00 00 ....gE#......... 0100: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0110: 11 11 11 01 00 00 00 00 01 60 00 00 2C 00 00 00 .........`..,... 0120: 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0............... 0130: 00 00 00 00 00 00 00 00 00 00 00 00 EF CD AB 89 ................ 0140: 67 45 23 01 AA AA 00 00 01 00 00 00 01 00 00 00 gE#............. 0150: EF CD AB 89 67 45 23 01 00 00 00 00 01 00 00 00 ....gE#......... 0160: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0170: 11 11 11 01 00 00 00 00 02 64 00 00 2C 00 00 00 .........d..,... 0180: 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4............... 0190: 00 00 00 00 00 00 00 00 00 00 00 00 EF CD AB 89 ................ 01a0: 67 45 23 01 55 55 55 55 66 66 66 66 01 00 00 00 gE#.UUUUffff.... 01b0: 03 00 00 00 EF CD AB 89 67 45 23 01 00 00 00 00 ........gE#..... 01c0: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ 01d0: 00 00 00 00 11 11 11 01 00 00 00 00 03 74 00 00 .............t.. 01e0: 2C 00 00 00 44 00 00 00 00 00 00 00 00 00 00 00 ,...D........... 01f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0200: EF CD AB 89 67 45 23 01 33 33 33 33 44 44 44 44 ....gE#.3333DDDD 0210: 12 23 34 45 56 67 78 89 9A AB BC CD DE EF FF 55 .#4EVgx........U 0220: 01 00 00 00 02 00 00 00 EF CD AB 89 67 45 23 01 ............gE#. 0230: 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 ................ 0240: 00 00 00 00 00 00 00 00 11 11 11 01 00 00 00 00 ................ 0250: 04 7C 00 00 2C 00 00 00 34 00 00 00 64 00 00 00 .|..,...4...d... 0260: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0270: 00 00 00 00 EF CD AB 89 67 45 23 01 03 00 00 00 ........gE#..... 0280: 88 88 77 77 00 00 00 00 03 00 00 00 EF CD AB 89 ..ww............ 0290: 67 45 23 01 00 00 00 00 01 00 00 00 01 00 00 00 gE#............. 02a0: 00 00 00 00 00 00 00 00 00 00 00 00 11 11 11 01 ................ 02b0: 00 00 00 00 00 00 00 00 BB BB AA AA CC 00 00 00 ................ 02c0: 01 00 00 01 EF CD AB 78 56 00 00 00 .......xV... fwts-test/aest-0001/acpidump-0002.log000066400000000000000000000114741465205512700172320ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... AEST @ 0x00000000 0000: 41 45 53 54 CC 02 00 00 01 2A 49 4E 54 45 4C 20 AEST.....*INTEL 0010: 54 65 6D 70 6C 61 74 65 01 00 00 00 49 4E 54 4C Template....INTL 0020: 04 06 21 20 00 80 00 02 2C 00 00 00 44 00 00 00 ..! ....,...D... 0030: 74 00 00 00 01 00 00 00 EF CD AB 89 67 45 23 01 t...........gE#. 0040: 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: CD FE 00 00 00 01 10 00 EF CD AB 89 67 45 23 01 ............gE#. 0060: 33 33 22 22 00 01 00 00 01 00 00 00 02 00 00 00 33""............ 0070: EF CD AB 89 67 45 23 01 00 00 00 00 01 00 00 00 ....gE#......... 0080: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0090: 11 11 11 01 00 00 00 00 05 01 00 03 EF CD AB 78 ...............x 00a0: 56 00 00 00 00 74 00 00 2C 00 00 00 44 00 00 00 V....t..,...D... 00b0: 00 00 00 00 00 00 00 00 EF CD AB 89 67 45 23 01 ............gE#. 00c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00d0: 11 11 00 00 01 00 01 00 EF CD AB 89 67 45 23 01 ............gE#. 00e0: 67 67 67 67 00 00 02 00 00 01 00 00 05 00 00 00 gggg............ 00f0: EF CD AB 89 67 45 23 01 00 00 00 00 01 00 00 00 ....gE#......... 0100: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0110: 11 11 11 01 00 00 00 00 01 60 00 00 2C 00 00 00 .........`..,... 0120: 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0............... 0130: 00 00 00 00 00 00 00 00 00 00 00 00 EF CD AB 89 ................ 0140: 67 45 23 01 AA AA 00 00 04 00 00 00 01 00 00 00 gE#............. 0150: EF CD AB 89 67 45 23 01 00 00 00 00 01 00 00 00 ....gE#......... 0160: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0170: 11 11 11 01 00 00 00 00 02 64 00 00 2C 00 00 00 .........d..,... 0180: 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4............... 0190: 00 00 00 00 00 00 00 00 00 00 00 00 EF CD AB 89 ................ 01a0: 67 45 23 01 55 55 55 55 66 66 66 66 01 00 00 00 gE#.UUUUffff.... 01b0: 03 00 00 00 EF CD AB 89 67 45 23 01 00 00 00 00 ........gE#..... 01c0: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ 01d0: 00 00 00 00 11 11 11 01 00 00 00 00 03 74 00 00 .............t.. 01e0: 2C 00 00 00 44 00 00 00 00 00 00 00 00 00 00 00 ,...D........... 01f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0200: EF CD AB 89 67 45 23 01 33 33 33 33 44 44 44 44 ....gE#.3333DDDD 0210: 12 23 34 45 56 67 78 89 9A AB BC CD DE EF FF 55 .#4EVgx........U 0220: 01 00 00 00 02 00 00 00 EF CD AB 89 67 45 23 01 ............gE#. 0230: 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 ................ 0240: 00 00 00 00 00 00 00 00 11 11 11 01 00 00 00 00 ................ 0250: 04 7C 00 00 2C 00 00 00 34 00 00 00 64 00 00 00 .|..,...4...d... 0260: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0270: 00 00 00 00 EF CD AB 89 67 45 23 01 03 00 00 00 ........gE#..... 0280: 88 88 77 77 00 00 00 00 03 00 00 00 EF CD AB 89 ..ww............ 0290: 67 45 23 01 00 00 00 00 01 00 00 00 01 00 00 00 gE#............. 02a0: 00 00 00 00 00 00 00 00 00 00 00 00 11 11 11 01 ................ 02b0: 00 00 00 00 00 00 00 00 BB BB AA AA CC 00 00 00 ................ 02c0: 01 00 00 01 EF CD AB 78 56 00 00 00 .......xV... fwts-test/aest-0001/aest-0001.log000066400000000000000000000263641465205512700163670ustar00rootroot00000000000000aest aest: AEST Arm Error Source Table test. aest ---------------------------------------------------------- aest Test 1 of 1: Validate AEST table. aest AEST Arm Error Source Table: aest AEST node structure: aest Type: 0x00 aest Length: 0x0080 aest Reserved: 0x00 aest Offset to Node-specific data: 0x0000002c aest Offset to Node Interface: 0x00000044 aest Offset to Node Interrupt Array: 0x00000074 aest Node Interrupt Array Size: 0x00000001 aest Timestamp Rate: 0x0123456789abcdef aest Reserved1: 0x0000000000000000 aest Error Injection Countdown Rate: 0x0000000000000000 aest Node-specific data (Processor): aest ACPI Processor ID: 0x0000fecd aest Resource Type: 0x00 aest Reserved: 0x00 aest Flags: 0x00 aest Revision: 0x00 aest Processor affinity lvl ind: 0x0123456789abcdef aest Cache Reference: 0x22223333 aest Reserved: 0x00000000 aest Interface: aest Interface Type: 0x01 aest Reserved: 0x00000000 aest Flags: 0x00000002 aest Base Address: 0x0123456789abcdef aest Start Error Record Index: 0x00000000 aest Number Of Error Records: 0x00000001 aest Error Record Implemented: 0x0000000000000001 aest Status Reporting Supported: 0x0000000000000000 aest Addressing Mode: 0x0000000001111111 aest Interrupt Array aest Interrupt Type: 0x01 aest Reserved: 0x0000 aest Interrupt Flags: 0x00 aest Interrupt GSIV: 0x78abcdef aest ID: 0x56 aest Reserved1: 0x00000000 aest aest AEST node structure: aest Type: 0x00 aest Length: 0x0074 aest Reserved: 0x00 aest Offset to Node-specific data: 0x0000002c aest Offset to Node Interface: 0x00000044 aest Offset to Node Interrupt Array: 0x00000000 aest Node Interrupt Array Size: 0x00000000 aest Timestamp Rate: 0x0123456789abcdef aest Reserved1: 0x0000000000000000 aest Error Injection Countdown Rate: 0x0000000000000000 aest Node-specific data (Processor): aest ACPI Processor ID: 0x00001111 aest Resource Type: 0x01 aest Reserved: 0x00 aest Flags: 0x01 aest Revision: 0x00 aest Processor affinity lvl ind: 0x0123456789abcdef aest TLB Reference: 0x67676767 aest Reserved: 0x00000000 aest Interface: aest Interface Type: 0x00 aest Reserved: 0x00000000 aest Flags: 0x00000003 aest Base Address: 0x0123456789abcdef aest Start Error Record Index: 0x00000000 aest Number Of Error Records: 0x00000001 aest Error Record Implemented: 0x0000000000000001 aest Status Reporting Supported: 0x0000000000000000 aest Addressing Mode: 0x0000000001111111 aest aest AEST node structure: aest Type: 0x01 aest Length: 0x0060 aest Reserved: 0x00 aest Offset to Node-specific data: 0x0000002c aest Offset to Node Interface: 0x00000030 aest Offset to Node Interrupt Array: 0x00000000 aest Node Interrupt Array Size: 0x00000000 aest Timestamp Rate: 0x0000000000000000 aest Reserved1: 0x0000000000000000 aest Error Injection Countdown Rate: 0x0123456789abcdef aest Node-specific data (Memory Controller): aest Proximity Domain: 0x0000aaaa aest Interface: aest Interface Type: 0x01 aest Reserved: 0x00000000 aest Flags: 0x00000001 aest Base Address: 0x0123456789abcdef aest Start Error Record Index: 0x00000000 aest Number Of Error Records: 0x00000001 aest Error Record Implemented: 0x0000000000000001 aest Status Reporting Supported: 0x0000000000000000 aest Addressing Mode: 0x0000000001111111 aest aest AEST node structure: aest Type: 0x02 aest Length: 0x0064 aest Reserved: 0x00 aest Offset to Node-specific data: 0x0000002c aest Offset to Node Interface: 0x00000034 aest Offset to Node Interrupt Array: 0x00000000 aest Node Interrupt Array Size: 0x00000000 aest Timestamp Rate: 0x0000000000000000 aest Reserved1: 0x0000000000000000 aest Error Injection Countdown Rate: 0x0123456789abcdef aest Node-specific data (SMMU): aest IORT Node Reference: 0x55555555 aest SMMU-specific Data Subcomponent Reference: 0x66666666 aest Interface: aest Interface Type: 0x01 aest Reserved: 0x00000000 aest Flags: 0x00000003 aest Base Address: 0x0123456789abcdef aest Start Error Record Index: 0x00000000 aest Number Of Error Records: 0x00000001 aest Error Record Implemented: 0x0000000000000001 aest Status Reporting Supported: 0x0000000000000000 aest Addressing Mode: 0x0000000001111111 aest aest AEST node structure: aest Type: 0x03 aest Length: 0x0074 aest Reserved: 0x00 aest Offset to Node-specific data: 0x0000002c aest Offset to Node Interface: 0x00000044 aest Offset to Node Interrupt Array: 0x00000000 aest Node Interrupt Array Size: 0x00000000 aest Timestamp Rate: 0x0000000000000000 aest Reserved1: 0x0000000000000000 aest Error Injection Countdown Rate: 0x0123456789abcdef aest Node-specific data (Vendor-defined): aest Hardware ID: 0x33333333 aest SMMU-specific Data Subcomponent Reference: 0x44444444 aest Vendor-specific data: aest 12 23 34 45 56 67 78 89 9A AB BC CD DE EF FF 55 aest Interface: aest Interface Type: 0x01 aest Reserved: 0x00000000 aest Flags: 0x00000002 aest Base Address: 0x0123456789abcdef aest Start Error Record Index: 0x00000000 aest Number Of Error Records: 0x00000001 aest Error Record Implemented: 0x0000000000000001 aest Status Reporting Supported: 0x0000000000000000 aest Addressing Mode: 0x0000000001111111 aest aest AEST node structure: aest Type: 0x04 aest Length: 0x007c aest Reserved: 0x00 aest Offset to Node-specific data: 0x0000002c aest Offset to Node Interface: 0x00000034 aest Offset to Node Interrupt Array: 0x00000064 aest Node Interrupt Array Size: 0x00000002 aest Timestamp Rate: 0x0000000000000000 aest Reserved1: 0x0000000000000000 aest Error Injection Countdown Rate: 0x0123456789abcdef aest Node-specific data (GIC): aest Interface Type: 0x00000003 aest Instance Identifier: 0x77778888 aest Interface: aest Interface Type: 0x00 aest Reserved: 0x00000000 aest Flags: 0x00000003 aest Base Address: 0x0123456789abcdef aest Start Error Record Index: 0x00000000 aest Number Of Error Records: 0x00000001 aest Error Record Implemented: 0x0000000000000001 aest Status Reporting Supported: 0x0000000000000000 aest Addressing Mode: 0x0000000001111111 aest Interrupt Array aest Interrupt Type: 0x00 aest Reserved: 0x0000 aest Interrupt Flags: 0x00 aest Interrupt GSIV: 0xaaaabbbb aest ID: 0xcc aest Reserved1: 0x00000000 aest Interrupt Array aest Interrupt Type: 0x01 aest Reserved: 0x0000 aest Interrupt Flags: 0x01 aest Interrupt GSIV: 0x78abcdef aest ID: 0x56 aest Reserved1: 0x00000000 aest aest PASSED: Test 1, No issues found in AEST table. aest aest ========================================================== aest 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 aest info only. aest ========================================================== fwts-test/aest-0001/aest-0002.log000066400000000000000000000316521465205512700163640ustar00rootroot00000000000000aest aest: AEST Arm Error Source Table test. aest ---------------------------------------------------------- aest Test 1 of 1: Validate AEST table. aest AEST Arm Error Source Table: aest AEST node structure: aest Type: 0x00 aest Length: 0x0080 aest Reserved: 0x02 aest Offset to Node-specific data: 0x0000002c aest Offset to Node Interface: 0x00000044 aest Offset to Node Interrupt Array: 0x00000074 aest Node Interrupt Array Size: 0x00000001 aest Timestamp Rate: 0x0123456789abcdef aest Reserved1: 0x0000000001000000 aest Error Injection Countdown Rate: 0x0000000000000000 aest FAILED [MEDIUM] AESTReservedNonZero: Test 1, AEST Reserved aest field must be zero, got 0x02 instead aest FAILED [MEDIUM] AESTReservedNonZero: Test 1, AEST aest Reserved1 field must be zero, got 0x0000000001000000 aest instead aest Node-specific data (Processor): aest ACPI Processor ID: 0x0000fecd aest Resource Type: 0x00 aest Reserved: 0x01 aest Flags: 0x10 aest Revision: 0x00 aest Processor affinity lvl ind: 0x0123456789abcdef aest FAILED [MEDIUM] AESTReservedNonZero: Test 1, AEST Reserved aest field must be zero, got 0x01 instead aest FAILED [HIGH] AESTReservedBitsNonZero: Test 1, AEST Flags aest Bits [7..2] must be zero, got 0x10 instead aest Cache Reference: 0x22223333 aest Reserved: 0x00000100 aest FAILED [MEDIUM] AESTReservedNonZero: Test 1, AEST Reserved aest field must be zero, got 0x00000100 instead aest Interface: aest Interface Type: 0x01 aest Reserved: 0x00000000 aest Flags: 0x00000002 aest Base Address: 0x0123456789abcdef aest Start Error Record Index: 0x00000000 aest Number Of Error Records: 0x00000001 aest Error Record Implemented: 0x0000000000000001 aest Status Reporting Supported: 0x0000000000000000 aest Addressing Mode: 0x0000000001111111 aest Interrupt Array aest Interrupt Type: 0x05 aest Reserved: 0x0001 aest Interrupt Flags: 0x03 aest Interrupt GSIV: 0x78abcdef aest ID: 0x56 aest Reserved1: 0x00000000 aest FAILED [MEDIUM] AESTReservedNonZero: Test 1, AEST Reserved aest field must be zero, got 0x0001 instead aest FAILED [HIGH] AESTReservedBitsNonZero: Test 1, AEST aest Interrupt Type Bits [7..2] must be zero, got 0x05 instead aest FAILED [HIGH] AESTReservedBitsNonZero: Test 1, AEST aest Interrupt Flags Bits [31..1] must be zero, got 0x03 aest instead aest FAILED [HIGH] AESTBadSubTableType: Test 1, AEST must have aest subtable with Type 0..1, got 5 instead aest aest AEST node structure: aest Type: 0x00 aest Length: 0x0074 aest Reserved: 0x00 aest Offset to Node-specific data: 0x0000002c aest Offset to Node Interface: 0x00000044 aest Offset to Node Interrupt Array: 0x00000000 aest Node Interrupt Array Size: 0x00000000 aest Timestamp Rate: 0x0123456789abcdef aest Reserved1: 0x0000000000000000 aest Error Injection Countdown Rate: 0x0000000000000000 aest Node-specific data (Processor): aest ACPI Processor ID: 0x00001111 aest Resource Type: 0x01 aest Reserved: 0x00 aest Flags: 0x01 aest Revision: 0x00 aest Processor affinity lvl ind: 0x0123456789abcdef aest TLB Reference: 0x67676767 aest Reserved: 0x00020000 aest FAILED [MEDIUM] AESTReservedNonZero: Test 1, AEST Reserved aest field must be zero, got 0x00020000 instead aest Interface: aest Interface Type: 0x00 aest Reserved: 0x00000001 aest Flags: 0x00000005 aest Base Address: 0x0123456789abcdef aest Start Error Record Index: 0x00000000 aest Number Of Error Records: 0x00000001 aest Error Record Implemented: 0x0000000000000001 aest Status Reporting Supported: 0x0000000000000000 aest Addressing Mode: 0x0000000001111111 aest FAILED [MEDIUM] AESTReservedNonZero: Test 1, AEST Reserved aest field must be zero, got 0x00000001 instead aest FAILED [HIGH] AESTReservedBitsNonZero: Test 1, AEST Flags aest Bits [31..2] must be zero, got 0x00000005 instead aest aest AEST node structure: aest Type: 0x01 aest Length: 0x0060 aest Reserved: 0x00 aest Offset to Node-specific data: 0x0000002c aest Offset to Node Interface: 0x00000030 aest Offset to Node Interrupt Array: 0x00000000 aest Node Interrupt Array Size: 0x00000000 aest Timestamp Rate: 0x0000000000000000 aest Reserved1: 0x0000000000000000 aest Error Injection Countdown Rate: 0x0123456789abcdef aest Node-specific data (Memory Controller): aest Proximity Domain: 0x0000aaaa aest Interface: aest Interface Type: 0x04 aest Reserved: 0x00000000 aest Flags: 0x00000001 aest Base Address: 0x0123456789abcdef aest Start Error Record Index: 0x00000000 aest Number Of Error Records: 0x00000001 aest Error Record Implemented: 0x0000000000000001 aest Status Reporting Supported: 0x0000000000000000 aest Addressing Mode: 0x0000000001111111 aest FAILED [HIGH] AESTBadSubTableType: Test 1, AEST must have aest subtable with Type 0..1, got 4 instead aest aest AEST node structure: aest Type: 0x02 aest Length: 0x0064 aest Reserved: 0x00 aest Offset to Node-specific data: 0x0000002c aest Offset to Node Interface: 0x00000034 aest Offset to Node Interrupt Array: 0x00000000 aest Node Interrupt Array Size: 0x00000000 aest Timestamp Rate: 0x0000000000000000 aest Reserved1: 0x0000000000000000 aest Error Injection Countdown Rate: 0x0123456789abcdef aest Node-specific data (SMMU): aest IORT Node Reference: 0x55555555 aest SMMU-specific Data Subcomponent Reference: 0x66666666 aest Interface: aest Interface Type: 0x01 aest Reserved: 0x00000000 aest Flags: 0x00000003 aest Base Address: 0x0123456789abcdef aest Start Error Record Index: 0x00000000 aest Number Of Error Records: 0x00000001 aest Error Record Implemented: 0x0000000000000001 aest Status Reporting Supported: 0x0000000000000000 aest Addressing Mode: 0x0000000001111111 aest aest AEST node structure: aest Type: 0x03 aest Length: 0x0074 aest Reserved: 0x00 aest Offset to Node-specific data: 0x0000002c aest Offset to Node Interface: 0x00000044 aest Offset to Node Interrupt Array: 0x00000000 aest Node Interrupt Array Size: 0x00000000 aest Timestamp Rate: 0x0000000000000000 aest Reserved1: 0x0000000000000000 aest Error Injection Countdown Rate: 0x0123456789abcdef aest Node-specific data (Vendor-defined): aest Hardware ID: 0x33333333 aest SMMU-specific Data Subcomponent Reference: 0x44444444 aest Vendor-specific data: aest 12 23 34 45 56 67 78 89 9A AB BC CD DE EF FF 55 aest Interface: aest Interface Type: 0x01 aest Reserved: 0x00000000 aest Flags: 0x00000002 aest Base Address: 0x0123456789abcdef aest Start Error Record Index: 0x00000000 aest Number Of Error Records: 0x00000001 aest Error Record Implemented: 0x0000000000000001 aest Status Reporting Supported: 0x0000000000000000 aest Addressing Mode: 0x0000000001111111 aest aest AEST node structure: aest Type: 0x04 aest Length: 0x007c aest Reserved: 0x00 aest Offset to Node-specific data: 0x0000002c aest Offset to Node Interface: 0x00000034 aest Offset to Node Interrupt Array: 0x00000064 aest Node Interrupt Array Size: 0x00000002 aest Timestamp Rate: 0x0000000000000000 aest Reserved1: 0x0000000000000000 aest Error Injection Countdown Rate: 0x0123456789abcdef aest Node-specific data (GIC): aest Interface Type: 0x00000003 aest Instance Identifier: 0x77778888 aest Interface: aest Interface Type: 0x00 aest Reserved: 0x00000000 aest Flags: 0x00000003 aest Base Address: 0x0123456789abcdef aest Start Error Record Index: 0x00000000 aest Number Of Error Records: 0x00000001 aest Error Record Implemented: 0x0000000000000001 aest Status Reporting Supported: 0x0000000000000000 aest Addressing Mode: 0x0000000001111111 aest Interrupt Array aest Interrupt Type: 0x00 aest Reserved: 0x0000 aest Interrupt Flags: 0x00 aest Interrupt GSIV: 0xaaaabbbb aest ID: 0xcc aest Reserved1: 0x00000000 aest Interrupt Array aest Interrupt Type: 0x01 aest Reserved: 0x0000 aest Interrupt Flags: 0x01 aest Interrupt GSIV: 0x78abcdef aest ID: 0x56 aest Reserved1: 0x00000000 aest aest aest ========================================================== aest 0 passed, 13 failed, 0 warning, 0 aborted, 0 skipped, 0 aest info only. aest ========================================================== fwts-test/aest-0001/test-0001.sh000077500000000000000000000010011465205512700162230ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against AEST" NAME=test-0001.sh TMPLOG=$TMP/aest.log.$$ $FWTS --show-tests | grep aest > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/aest-0001/acpidump-0001.log aest - | cut -c7- | grep "^aest" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/aest-0001/aest-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/aest-0001/test-0002.sh000077500000000000000000000010011465205512700162240ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against AEST" NAME=test-0001.sh TMPLOG=$TMP/aest.log.$$ $FWTS --show-tests | grep aest > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/aest-0001/acpidump-0002.log aest - | cut -c7- | grep "^aest" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/aest-0001/aest-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/apicinstance-0001/000077500000000000000000000000001465205512700160445ustar00rootroot00000000000000fwts-test/apicinstance-0001/acpidump-0001.log000066400000000000000000004054211465205512700207350ustar00rootroot00000000000000DSDT @ 0xbf6d9b6a 0000: 44 53 44 54 f4 5f 00 00 02 11 54 4f 53 43 50 4c DSDT._....TOSCPL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 49 4e 54 4c CRESTLNE....INTL 0020: 08 06 06 20 08 5a 30 30 30 01 08 5a 30 30 31 0a ... .Z000..Z001. 0030: 02 08 5a 30 30 32 0a 04 08 5a 30 30 33 0a 08 08 ..Z002...Z003... 0040: 5a 30 30 34 00 08 5a 30 30 35 0a 0f 08 5a 30 30 Z004..Z005...Z00 0050: 36 0a 0d 08 5a 30 30 37 0a 0b 08 5a 30 30 38 0a 6...Z007...Z008. 0060: 09 08 45 43 44 59 0a 07 5b 01 4d 55 54 58 00 5b ..ECDY..[.MUTX.[ 0070: 80 50 52 54 30 01 0a 80 0a 04 5b 81 0b 50 52 54 .PRT0.....[..PRT 0080: 30 13 50 38 30 48 20 14 4e 07 50 38 58 48 0a a0 0.P80H .N.P8XH.. 0090: 17 93 68 00 70 7d 7b 50 38 30 44 0c 00 ff ff ff ..h.p}{P80D..... 00a0: 00 69 00 50 38 30 44 a0 1b 93 68 01 70 7d 7b 50 .i.P80D...h.p}{P 00b0: 38 30 44 0c ff 00 ff ff 00 79 69 0a 08 00 00 50 80D......yi....P 00c0: 38 30 44 a0 1c 93 68 0a 02 70 7d 7b 50 38 30 44 80D...h..p}{P80D 00d0: 0c ff ff 00 ff 00 79 69 0a 10 00 00 50 38 30 44 ......yi....P80D 00e0: a0 1c 93 68 0a 03 70 7d 7b 50 38 30 44 0c ff ff ...h..p}{P80D... 00f0: ff 00 00 79 69 0a 18 00 00 50 38 30 44 70 50 38 ...yi....P80DpP8 0100: 30 44 50 38 30 48 14 0c 5f 50 49 43 01 70 68 47 0DP80H.._PIC.phG 0110: 50 49 43 14 46 06 5f 50 54 53 01 70 00 50 38 30 PIC.F._PTS.p.P80 0120: 44 50 38 58 48 00 68 a0 1e 93 68 0a 03 70 01 5c DP8XH.h...h..p.\ 0130: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0140: 30 5f 53 33 4c 44 a0 33 93 68 0a 04 70 01 5c 2f 0_S3LD.3.h..p.\/ 0150: 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 ._SB_PCI0LPCBEC0 0160: 5f 53 33 4c 44 5c 2f 04 5f 53 42 5f 50 43 49 30 _S3LD\/._SB_PCI0 0170: 4c 50 43 42 50 48 53 53 0a 0e 14 4c 1c 5f 57 41 LPCBPHSS...L._WA 0180: 4b 01 50 38 58 48 01 0a ab a0 30 91 93 68 0a 03 K.P8XH....0..h.. 0190: 93 68 0a 04 a0 25 7b 43 46 47 44 0c 00 00 00 01 .h...%{CFGD..... 01a0: 00 a0 18 90 7b 43 46 47 44 0a f0 00 93 4f 53 59 ....{CFGD....OSY 01b0: 53 0b d1 07 54 52 41 50 0a 3d a0 18 93 52 50 31 S...TRAP.=...RP1 01c0: 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 D..\/._SB_PCI0RP 01d0: 30 31 00 a0 18 93 52 50 32 44 00 86 5c 2f 03 5f 01....RP2D..\/._ 01e0: 53 42 5f 50 43 49 30 52 50 30 32 00 a0 18 93 52 SB_PCI0RP02....R 01f0: 50 33 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 P3D..\/._SB_PCI0 0200: 52 50 30 33 00 a0 18 93 52 50 34 44 00 86 5c 2f RP03....RP4D..\/ 0210: 03 5f 53 42 5f 50 43 49 30 52 50 30 34 00 a0 18 ._SB_PCI0RP04... 0220: 93 52 50 35 44 00 86 5c 2f 03 5f 53 42 5f 50 43 .RP5D..\/._SB_PC 0230: 49 30 52 50 30 35 00 a0 18 93 52 50 36 44 00 86 I0RP05....RP6D.. 0240: 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 36 00 \/._SB_PCI0RP06. 0250: a0 12 93 68 0a 03 50 38 58 48 00 0a 30 54 52 41 ...h..P8XH..0TRA 0260: 50 0a 46 a0 43 0d 93 68 0a 04 50 38 58 48 00 0a P.F.C..h..P8XH.. 0270: 40 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 @\/._SB_PCI0LPCB 0280: 50 48 53 53 0a 0f 70 57 41 4b 46 60 70 00 57 41 PHSS..pWAKF`p.WA 0290: 4b 46 7b 60 0a 05 60 a0 18 93 60 01 50 38 58 48 KF{`..`...`.P8XH 02a0: 00 0a 41 86 5c 2e 5f 53 42 5f 50 57 52 42 0a 02 ..A.\._SB_PWRB.. 02b0: a0 46 08 44 54 53 45 54 52 41 50 0a 47 a0 42 06 .F.DTSETRAP.G.B. 02c0: 90 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 .\/._SB_PCI0LPCB 02d0: 45 43 4f 4b 93 45 43 44 59 00 a0 27 92 95 44 54 ECOK.ECDY..'..DT 02e0: 53 31 44 54 53 32 70 44 54 53 31 5c 2f 05 5f 53 S1DTS2pDTS1\/._S 02f0: 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b B_PCI0LPCBEC0_SK 0300: 54 41 a1 1d 70 44 54 53 32 5c 2f 05 5f 53 42 5f TA..pDTS2\/._SB_ 0310: 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 PCI0LPCBEC0_SKTA 0320: a1 16 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 0330: 42 50 48 53 53 0a 10 5c 2e 5f 50 52 5f 52 50 50 BPHSS..\._PR_RPP 0340: 43 a4 12 04 02 00 00 14 1e 47 45 54 42 0b 77 68 C........GETB.wh 0350: 0a 08 60 77 69 0a 08 61 5b 13 6a 60 61 54 42 46 ..`wi..a[.j`aTBF 0360: 33 a4 54 42 46 33 14 42 09 50 4e 4f 54 08 a0 4a 3.TBF3.B.PNOT..J 0370: 06 4d 50 45 4e a0 31 7b 50 44 43 30 0a 08 00 86 .MPEN.1{PDC0.... 0380: 5c 2e 5f 50 52 5f 43 50 55 30 0a 80 a0 1a 7b 50 \._PR_CPU0....{P 0390: 44 43 30 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC0...[".d.\._PR 03a0: 5f 43 50 55 30 0a 81 a0 31 7b 50 44 43 31 0a 08 _CPU0...1{PDC1.. 03b0: 00 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 a0 1a ..\._PR_CPU1.... 03c0: 7b 50 44 43 31 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC1...[".d.\._ 03d0: 50 52 5f 43 50 55 31 0a 81 a1 1f 86 5c 2e 5f 50 PR_CPU1.....\._P 03e0: 52 5f 43 50 55 30 0a 80 5b 22 0a 64 86 5c 2e 5f R_CPU0..[".d.\._ 03f0: 50 52 5f 43 50 55 30 0a 81 14 17 54 52 41 50 09 PR_CPU0....TRAP. 0400: 70 68 53 4d 49 46 70 00 54 52 50 30 a4 53 4d 49 phSMIFp.TRP0.SMI 0410: 46 10 41 0f 5f 53 42 5f 14 4a 0e 5f 49 4e 49 00 F.A._SB_.J._INI. 0420: 70 0b 99 99 4d 41 52 4b a0 1c 44 54 53 45 54 52 p...MARK..DTSETR 0430: 41 50 0a 47 5e 2f 03 50 43 49 30 4c 50 43 42 50 AP.G^/.PCI0LPCBP 0440: 48 53 53 0a 10 70 0b d0 07 4f 53 59 53 a0 4a 09 HSS..p...OSYS.J. 0450: 5b 12 5f 4f 53 49 60 a0 18 5f 4f 53 49 0d 4c 69 [._OSI`.._OSI.Li 0460: 6e 75 78 00 70 01 4c 49 4e 58 70 00 45 43 44 59 nux.p.LINXp.ECDY 0470: a0 1b 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 .._OSI.Windows 2 0480: 30 30 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 001.p...OSYS.._O 0490: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04a0: 53 50 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f SP1.p...OSYS.._O 04b0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04c0: 53 50 32 00 70 0b d2 07 4f 53 59 53 a0 1b 5f 4f SP2.p...OSYS.._O 04d0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 00 SI.Windows 2006. 04e0: 70 0b d6 07 4f 53 59 53 a0 14 90 4d 50 45 4e 93 p...OSYS...MPEN. 04f0: 4f 53 59 53 0b d1 07 54 52 41 50 0a 3d 54 52 41 OSYS...TRAP.=TRA 0500: 50 0a 2b 5b 80 47 4e 56 53 00 0c bc 2d 6e bf 0b P.+[.GNVS...-n.. 0510: 00 01 5b 81 45 24 47 4e 56 53 10 4f 53 59 53 10 ..[.E$GNVS.OSYS. 0520: 53 4d 49 46 08 50 52 4d 30 08 50 52 4d 31 08 53 SMIF.PRM0.PRM1.S 0530: 43 49 46 08 50 52 4d 32 08 50 52 4d 33 08 4c 43 CIF.PRM2.PRM3.LC 0540: 4b 46 08 50 52 4d 34 08 50 52 4d 35 08 50 38 30 KF.PRM4.PRM5.P80 0550: 44 20 4c 49 44 53 08 50 57 52 53 08 44 42 47 53 D LIDS.PWRS.DBGS 0560: 08 4c 49 4e 58 08 00 08 41 43 54 31 08 41 43 54 .LINX...ACT1.ACT 0570: 54 08 50 53 56 54 08 54 43 31 56 08 54 43 32 56 T.PSVT.TC1V.TC2V 0580: 08 54 53 50 56 08 43 52 54 54 08 44 54 53 45 08 .TSPV.CRTT.DTSE. 0590: 44 54 53 31 08 44 54 53 32 08 00 40 05 41 50 49 DTS1.DTS2..@.API 05a0: 43 08 4d 50 45 4e 08 50 43 50 30 08 50 43 50 31 C.MPEN.PCP0.PCP1 05b0: 08 50 50 43 4d 08 00 28 43 4d 41 50 08 43 4d 42 .PPCM..(CMAP.CMB 05c0: 50 08 4c 50 54 50 08 46 44 43 50 08 00 30 49 47 P.LPTP.FDCP..0IG 05d0: 44 53 08 54 4c 53 54 08 43 41 44 4c 08 50 41 44 DS.TLST.CADL.PAD 05e0: 4c 08 43 53 54 45 10 4e 53 54 45 10 53 53 54 45 L.CSTE.NSTE.SSTE 05f0: 10 4e 44 49 44 08 44 49 44 31 20 44 49 44 32 20 .NDID.DID1 DID2 0600: 44 49 44 33 20 44 49 44 34 20 44 49 44 35 20 00 DID3 DID4 DID5 . 0610: 40 06 42 4c 43 53 08 42 52 54 4c 08 41 4c 53 45 @.BLCS.BRTL.ALSE 0620: 08 41 4c 41 46 08 4c 4c 4f 57 08 4c 48 49 48 08 .ALAF.LLOW.LHIH. 0630: 00 08 45 4d 41 45 08 45 4d 41 50 10 45 4d 41 4c ..EMAE.EMAP.EMAL 0640: 10 00 08 4d 45 46 45 08 00 18 54 50 4d 50 08 54 ...MEFE...TPMP.T 0650: 50 4d 45 08 00 40 04 47 54 46 30 38 47 54 46 32 PME..@.GTF08GTF2 0660: 38 49 44 45 4d 08 47 54 46 31 38 00 40 09 41 53 8IDEM.GTF18.@.AS 0670: 4c 42 20 49 42 54 54 08 49 50 41 54 08 49 54 56 LB IBTT.IPAT.ITV 0680: 46 08 49 54 56 4d 08 49 50 53 43 08 49 42 4c 43 F.ITVM.IPSC.IBLC 0690: 08 49 42 49 41 08 49 53 53 43 08 49 34 30 39 08 .IBIA.ISSC.I409. 06a0: 49 35 30 39 08 49 36 30 39 08 49 37 30 39 08 49 I509.I609.I709.I 06b0: 44 4d 4d 08 49 44 4d 53 08 49 46 31 45 08 48 56 DMM.IDMS.IF1E.HV 06c0: 43 4f 08 4e 58 44 31 20 4e 58 44 32 20 4d 41 52 CO.NXD1 NXD2 MAR 06d0: 4b 10 42 52 41 44 08 42 54 45 4e 08 56 56 45 4e K.BRAD.BTEN.VVEN 06e0: 08 42 47 54 4c 08 54 4d 45 45 01 00 07 53 43 55 .BGTL.TMEE...SCU 06f0: 30 01 53 43 55 31 01 53 43 55 32 01 53 43 55 33 0.SCU1.SCU2.SCU3 0700: 01 00 04 58 4b 53 50 01 58 4b 49 4e 01 58 4b 49 ...XKSP.XKIN.XKI 0710: 44 01 58 4b 4f 4b 01 00 04 42 47 55 31 08 42 53 D.XKOK...BGU1.BS 0720: 54 31 08 42 46 43 31 10 57 4b 4c 4e 08 57 41 4b T1.BFC1.WKLN.WAK 0730: 46 08 44 53 4d 44 08 42 41 59 53 08 48 41 50 45 F.DSMD.BAYS.HAPE 0740: 01 00 07 44 54 53 4d 01 00 07 4f 44 54 31 08 4f ...DTSM...ODT1.O 0750: 44 54 32 08 44 54 53 57 08 08 44 53 45 4e 01 08 DT2.DTSW..DSEN.. 0760: 45 43 4f 4e 00 08 47 50 49 43 00 08 43 54 59 50 ECON..GPIC..CTYP 0770: 00 08 4c 30 31 43 00 08 56 46 4e 30 00 08 56 46 ..L01C..VFN0..VF 0780: 4e 31 00 10 4a 7c 5f 47 50 45 14 46 35 5f 4c 30 N1..J|_GPE.F5_L0 0790: 31 00 72 4c 30 31 43 01 4c 30 31 43 50 38 58 48 1.rL01C.L01CP8XH 07a0: 00 01 50 38 58 48 01 4c 30 31 43 a0 48 08 90 93 ..P8XH.L01C.H... 07b0: 52 50 31 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 RP1D.\/._SB_PCI0 07c0: 52 50 30 31 48 50 53 58 5b 22 0a 64 a0 40 05 5c RP01HPSX[".d.@.\ 07d0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 /._SB_PCI0RP01PD 07e0: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 07f0: 50 30 31 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f P01PDCXp.\/._SB_ 0800: 50 43 49 30 52 50 30 31 48 50 53 58 86 5c 2f 03 PCI0RP01HPSX.\/. 0810: 5f 53 42 5f 50 43 49 30 52 50 30 31 00 a1 16 70 _SB_PCI0RP01...p 0820: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0830: 48 50 53 58 a0 48 08 90 93 52 50 32 44 00 5c 2f HPSX.H...RP2D.\/ 0840: 04 5f 53 42 5f 50 43 49 30 52 50 30 32 48 50 53 ._SB_PCI0RP02HPS 0850: 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 5f 50 X[".d.@.\/._SB_P 0860: 43 49 30 52 50 30 32 50 44 43 58 70 01 5c 2f 04 CI0RP02PDCXp.\/. 0870: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 44 43 58 _SB_PCI0RP02PDCX 0880: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 0890: 32 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 2HPSX.\/._SB_PCI 08a0: 30 52 50 30 32 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP02...p.\/._SB 08b0: 5f 50 43 49 30 52 50 30 32 48 50 53 58 a0 48 08 _PCI0RP02HPSX.H. 08c0: 90 93 52 50 33 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP3D.\/._SB_PC 08d0: 49 30 52 50 30 33 48 50 53 58 5b 22 0a 64 a0 40 I0RP03HPSX[".d.@ 08e0: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 .\/._SB_PCI0RP03 08f0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0900: 30 52 50 30 33 50 44 43 58 70 01 5c 2f 04 5f 53 0RP03PDCXp.\/._S 0910: 42 5f 50 43 49 30 52 50 30 33 48 50 53 58 86 5c B_PCI0RP03HPSX.\ 0920: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 33 00 a1 /._SB_PCI0RP03.. 0930: 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .p.\/._SB_PCI0RP 0940: 30 33 48 50 53 58 a0 48 08 90 93 52 50 34 44 00 03HPSX.H...RP4D. 0950: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 48 \/._SB_PCI0RP04H 0960: 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 PSX[".d.@.\/._SB 0970: 5f 50 43 49 30 52 50 30 34 50 44 43 58 70 01 5c _PCI0RP04PDCXp.\ 0980: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 44 /._SB_PCI0RP04PD 0990: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 09a0: 50 30 34 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 P04HPSX.\/._SB_P 09b0: 43 49 30 52 50 30 34 00 a1 16 70 01 5c 2f 04 5f CI0RP04...p.\/._ 09c0: 53 42 5f 50 43 49 30 52 50 30 34 48 50 53 58 a0 SB_PCI0RP04HPSX. 09d0: 48 08 90 93 52 50 35 44 00 5c 2f 04 5f 53 42 5f H...RP5D.\/._SB_ 09e0: 50 43 49 30 52 50 30 35 48 50 53 58 5b 22 0a 64 PCI0RP05HPSX[".d 09f0: a0 40 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .@.\/._SB_PCI0RP 0a00: 30 35 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 05PDCXp.\/._SB_P 0a10: 43 49 30 52 50 30 35 50 44 43 58 70 01 5c 2f 04 CI0RP05PDCXp.\/. 0a20: 5f 53 42 5f 50 43 49 30 52 50 30 35 48 50 53 58 _SB_PCI0RP05HPSX 0a30: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 35 .\/._SB_PCI0RP05 0a40: 00 a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ...p.\/._SB_PCI0 0a50: 52 50 30 35 48 50 53 58 a0 48 08 90 93 52 50 36 RP05HPSX.H...RP6 0a60: 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 D.\/._SB_PCI0RP0 0a70: 36 48 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 6HPSX[".d.@.\/._ 0a80: 53 42 5f 50 43 49 30 52 50 30 36 50 44 43 58 70 SB_PCI0RP06PDCXp 0a90: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 0aa0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0ab0: 30 52 50 30 36 48 50 53 58 86 5c 2f 03 5f 53 42 0RP06HPSX.\/._SB 0ac0: 5f 50 43 49 30 52 50 30 36 00 a1 16 70 01 5c 2f _PCI0RP06...p.\/ 0ad0: 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 50 53 ._SB_PCI0RP06HPS 0ae0: 58 14 42 0d 5f 4c 30 32 00 70 00 47 50 45 43 a0 X.B._L02.p.GPEC. 0af0: 4d 0a 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 M.\/._SB_PCI0LPC 0b00: 42 45 43 4f 4b a0 4e 04 93 44 54 53 57 01 a0 27 BECOK.N..DTSW..' 0b10: 92 95 44 54 53 31 44 54 53 32 70 44 54 53 31 5c ..DTS1DTS2pDTS1\ 0b20: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0b30: 30 5f 53 4b 54 41 a1 1d 70 44 54 53 32 5c 2f 05 0_SKTA..pDTS2\/. 0b40: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f _SB_PCI0LPCBEC0_ 0b50: 53 4b 54 41 a1 48 04 a0 27 92 95 4f 44 54 31 4f SKTA.H..'..ODT1O 0b60: 44 54 32 70 4f 44 54 31 5c 2f 05 5f 53 42 5f 50 DT2pODT1\/._SB_P 0b70: 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 CI0LPCBEC0_SKTA. 0b80: 1d 70 4f 44 54 32 5c 2f 05 5f 53 42 5f 50 43 49 .pODT2\/._SB_PCI 0b90: 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 16 5c 0LPCBEC0_SKTA..\ 0ba0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 50 48 /._SB_PCI0LPCBPH 0bb0: 53 53 0a 10 14 18 5f 4c 30 33 00 86 5c 2f 03 5f SS...._L03..\/._ 0bc0: 53 42 5f 50 43 49 30 55 53 42 31 0a 02 14 18 5f SB_PCI0USB1...._ 0bd0: 4c 30 34 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 L04..\/._SB_PCI0 0be0: 55 53 42 32 0a 02 14 18 5f 4c 30 35 00 86 5c 2f USB2...._L05..\/ 0bf0: 03 5f 53 42 5f 50 43 49 30 55 53 42 35 0a 02 14 ._SB_PCI0USB5... 0c00: 36 5f 4c 30 36 00 a0 27 5c 2f 04 5f 53 42 5f 50 6_L06..'\/._SB_P 0c10: 43 49 30 47 46 58 30 47 53 53 45 5c 2f 04 5f 53 CI0GFX0GSSE\/._S 0c20: 42 5f 50 43 49 30 47 46 58 30 47 53 43 49 a1 07 B_PCI0GFX0GSCI.. 0c30: 70 01 53 43 49 53 14 43 1f 5f 4c 30 39 00 a0 41 p.SCIS.C._L09..A 0c40: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0c50: 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PSPXp.\/._SB_PCI 0c60: 30 52 50 30 31 50 53 50 58 70 01 5c 2f 04 5f 53 0RP01PSPXp.\/._S 0c70: 42 5f 50 43 49 30 52 50 30 31 50 4d 53 58 86 5c B_PCI0RP01PMSX.\ 0c80: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 31 0a 02 /._SB_PCI0RP01.. 0c90: a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .A.\/._SB_PCI0RP 0ca0: 30 32 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 02PSPXp.\/._SB_P 0cb0: 43 49 30 52 50 30 32 50 53 50 58 70 01 5c 2f 04 CI0RP02PSPXp.\/. 0cc0: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 4d 53 58 _SB_PCI0RP02PMSX 0cd0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 0ce0: 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 ...A.\/._SB_PCI0 0cf0: 52 50 30 33 50 53 50 58 70 01 5c 2f 04 5f 53 42 RP03PSPXp.\/._SB 0d00: 5f 50 43 49 30 52 50 30 33 50 53 50 58 70 01 5c _PCI0RP03PSPXp.\ 0d10: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 50 4d /._SB_PCI0RP03PM 0d20: 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 SX.\/._SB_PCI0RP 0d30: 30 33 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 03...A.\/._SB_PC 0d40: 49 30 52 50 30 34 50 53 50 58 70 01 5c 2f 04 5f I0RP04PSPXp.\/._ 0d50: 53 42 5f 50 43 49 30 52 50 30 34 50 53 50 58 70 SB_PCI0RP04PSPXp 0d60: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 .\/._SB_PCI0RP04 0d70: 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 PMSX.\/._SB_PCI0 0d80: 52 50 30 34 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f RP04...A.\/._SB_ 0d90: 50 43 49 30 52 50 30 35 50 53 50 58 70 01 5c 2f PCI0RP05PSPXp.\/ 0da0: 04 5f 53 42 5f 50 43 49 30 52 50 30 35 50 53 50 ._SB_PCI0RP05PSP 0db0: 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 Xp.\/._SB_PCI0RP 0dc0: 30 35 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 05PMSX.\/._SB_PC 0dd0: 49 30 52 50 30 35 0a 02 a0 41 05 5c 2f 04 5f 53 I0RP05...A.\/._S 0de0: 42 5f 50 43 49 30 52 50 30 36 50 53 50 58 70 01 B_PCI0RP06PSPXp. 0df0: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 50 \/._SB_PCI0RP06P 0e00: 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 SPXp.\/._SB_PCI0 0e10: 52 50 30 36 50 4d 53 58 86 5c 2f 03 5f 53 42 5f RP06PMSX.\/._SB_ 0e20: 50 43 49 30 52 50 30 36 0a 02 14 18 5f 4c 30 42 PCI0RP06...._L0B 0e30: 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 50 43 49 ..\/._SB_PCI0PCI 0e40: 42 0a 02 14 18 5f 4c 30 43 00 86 5c 2f 03 5f 53 B...._L0C..\/._S 0e50: 42 5f 50 43 49 30 55 53 42 33 0a 02 14 4b 0b 5f B_PCI0USB3...K._ 0e60: 4c 30 44 00 a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 L0D..;\/._SB_PCI 0e70: 30 45 48 43 31 50 4d 45 53 70 01 5c 2f 04 5f 53 0EHC1PMESp.\/._S 0e80: 42 5f 50 43 49 30 45 48 43 31 50 4d 45 53 86 5c B_PCI0EHC1PMES.\ 0e90: 2f 03 5f 53 42 5f 50 43 49 30 45 48 43 31 0a 02 /._SB_PCI0EHC1.. 0ea0: a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 30 45 48 43 .;\/._SB_PCI0EHC 0eb0: 32 50 4d 45 53 70 01 5c 2f 04 5f 53 42 5f 50 43 2PMESp.\/._SB_PC 0ec0: 49 30 45 48 43 32 50 4d 45 53 86 5c 2f 03 5f 53 I0EHC2PMES.\/._S 0ed0: 42 5f 50 43 49 30 45 48 43 32 0a 02 a0 3b 5c 2f B_PCI0EHC2...;\/ 0ee0: 04 5f 53 42 5f 50 43 49 30 48 44 45 46 50 4d 45 ._SB_PCI0HDEFPME 0ef0: 53 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 48 44 Sp.\/._SB_PCI0HD 0f00: 45 46 50 4d 45 53 86 5c 2f 03 5f 53 42 5f 50 43 EFPMES.\/._SB_PC 0f10: 49 30 48 44 45 46 0a 02 14 18 5f 4c 30 45 00 86 I0HDEF...._L0E.. 0f20: 5c 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 34 0a \/._SB_PCI0USB4. 0f30: 02 14 1c 5f 4c 31 42 00 80 4c 50 4f 4c 4c 50 4f ..._L1B..LPOLLPO 0f40: 4c 86 5c 2e 5f 53 42 5f 4c 49 44 30 0a 80 10 46 L.\._SB_LID0...F 0f50: 0b 5f 50 52 5f 5b 83 0b 43 50 55 30 00 10 10 00 ._PR_[..CPU0.... 0f60: 00 06 5b 83 0b 43 50 55 31 01 10 10 00 00 06 14 ..[..CPU1....... 0f70: 45 09 52 50 50 43 00 a0 4d 08 93 4f 53 59 53 0b E.RPPC..M..OSYS. 0f80: d2 07 a0 42 08 7b 43 46 47 44 01 00 a0 42 04 94 ...B.{CFGD...B.. 0f90: 5e 2e 43 50 55 30 5f 50 50 43 00 74 5e 2e 43 50 ^.CPU0_PPC.t^.CP 0fa0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 0fb0: 43 50 4e 4f 54 72 5e 2e 43 50 55 30 5f 50 50 43 CPNOTr^.CPU0_PPC 0fc0: 01 5e 2e 43 50 55 30 5f 50 50 43 50 4e 4f 54 a1 .^.CPU0_PPCPNOT. 0fd0: 35 72 5e 2e 43 50 55 30 5f 50 50 43 01 5e 2e 43 5r^.CPU0_PPC.^.C 0fe0: 50 55 30 5f 50 50 43 50 4e 4f 54 74 5e 2e 43 50 PU0_PPCPNOTt^.CP 0ff0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 1000: 43 50 4e 4f 54 08 46 57 53 4f 0d 46 57 53 4f 00 CPNOT.FWSO.FWSO. 1010: 08 5f 50 53 43 00 14 12 5f 50 53 30 00 70 5f 50 ._PSC..._PS0.p_P 1020: 53 43 60 70 00 5f 50 53 43 14 0d 5f 50 53 33 00 SC`p._PSC.._PS3. 1030: 70 0a 03 5f 50 53 43 10 8c fb 04 5f 53 42 5f 5b p.._PSC...._SB_[ 1040: 82 4f 3e 41 4d 57 30 08 5f 48 49 44 0d 70 6e 70 .O>AMW0._HID.pnp 1050: 30 63 31 34 00 08 5f 55 49 44 00 08 5f 57 44 47 0c14.._UID.._WDG 1060: 11 3f 0a 3c a7 1d 85 2e 53 d0 5f 49 9d fa 1a 4a .?.<....S._I...J 1070: d6 2e 6a 86 41 43 01 00 3b 6d 43 71 dd fb 72 4c ..j.AC..;mCq..rL 1080: bc b8 43 5b fe 0d 64 f9 42 43 01 00 21 12 90 05 ..C[..d.BC..!... 1090: 66 d5 d1 11 b2 f0 00 a0 c9 06 29 10 42 41 01 00 f.........).BA.. 10a0: 08 53 54 41 43 11 07 0a 04 01 14 03 00 14 1f 57 .STAC..........W 10b0: 51 41 43 01 70 0d 4d 58 4d 54 43 43 6f 6e 66 69 QAC.p.MXMTCConfi 10c0: 67 44 61 74 61 00 5b 31 a4 53 54 41 43 08 53 54 gData.[1.STAC.ST 10d0: 42 43 11 07 0a 04 01 00 00 00 14 34 57 51 42 43 BC.........4WQBC 10e0: 01 70 0d 47 65 74 20 4d 58 4d 54 43 43 6f 6e 74 .p.Get MXMTCCont 10f0: 72 6f 6c 44 61 74 61 3a 20 53 54 42 43 20 3d 20 rolData: STBC = 1100: 00 5b 31 70 53 54 42 43 5b 31 a4 53 54 42 43 14 .[1pSTBC[1.STBC. 1110: 47 06 57 53 42 43 02 70 69 53 54 42 43 70 0d 53 G.WSBC.piSTBCp.S 1120: 65 74 20 4d 58 4d 54 43 43 6f 6e 74 72 6f 6c 44 et MXMTCControlD 1130: 61 74 61 3a 20 53 54 42 43 20 3d 20 00 5b 31 70 ata: STBC = .[1p 1140: 53 54 42 43 5b 31 a0 30 93 5e 5e 2f 03 50 43 49 STBC[1.0.^^/.PCI 1150: 30 4c 50 43 42 45 43 4f 4b 01 70 83 88 53 54 42 0LPCBECOK.p..STB 1160: 43 01 00 5e 5e 2f 04 50 43 49 30 4c 50 43 42 45 C..^^/.PCI0LPCBE 1170: 43 30 5f 53 4b 54 43 08 57 51 42 41 11 43 2b 0b C0_SKTC.WQBA.C+. 1180: ae 02 46 4f 4d 42 01 00 00 00 9e 02 00 00 c0 0b ..FOMB.......... 1190: 00 00 44 53 00 01 1a 7d da 54 28 d9 85 00 01 06 ..DS...}.T(..... 11a0: 18 42 10 07 10 0a 4b 61 02 c9 21 52 3c 18 94 05 .B....Ka..!R<... 11b0: 10 43 88 57 04 44 04 84 bc 0a b0 29 c0 24 88 fa .C.W.D.....).$.. 11c0: f7 87 28 09 0e 25 04 42 12 05 98 17 a0 5b 80 61 ..(..%.B.....[.a 11d0: 01 b6 05 98 16 e0 18 92 4a 03 a7 04 96 02 21 a1 ........J.....!. 11e0: 02 94 0b f0 2d 40 3b a2 24 0b b0 0c 23 02 8f 82 ....-@;.$...#... 11f0: a1 71 68 ec 30 2c 13 4c 83 38 8c b2 91 45 60 dc .qh.0,.L.8...E`. 1200: 4e 05 c8 15 20 4c 80 78 54 61 34 07 45 e0 42 63 N... L.xTa4.E.Bc 1210: 64 40 c8 a3 00 ab a3 d0 a4 12 d8 bd 00 65 02 2c d@...........e., 1220: 0a 10 27 c0 9a 00 63 48 32 28 40 9b 00 5b 20 42 ..'...cH2(@..[ B 1230: 0f d4 19 8a 46 70 02 51 6a 46 11 48 ac 1a 01 85 ....Fp.QjF.H.... 1240: 12 34 46 b0 10 81 c2 86 37 46 98 03 88 d1 fe 20 .4F.....7F..... 1250: 48 20 05 e3 66 91 46 83 1a 6b 82 63 f7 68 4e b8 H ..f.F..k.c.hN. 1260: 73 01 d2 e7 26 90 a3 3b b8 3a 07 4d 86 c7 b0 1e s...&..;.:.M.... 1270: 06 d8 29 00 ef 1a 50 d3 3f 78 26 08 0e 35 44 8f ..)...P.?x&..5D. 1280: 3a dc 09 1c fb 91 30 88 b3 3b 6e ac c3 c9 68 d0 :.....0..;n...h. 1290: a5 0a 30 7b 00 d0 d0 12 9c f6 99 84 7e 0f 38 9f ..0{........~.8. 12a0: 9e 21 89 fc 41 a0 46 e6 ff 3f b4 c7 78 5a 31 43 .!..A.F..?..xZ1C 12b0: 3e 0b 1c 16 13 0b a1 4d 6a 3c 40 40 e1 d1 40 08 >......Mj<@@..@. 12c0: 6f 06 9e af 09 46 86 90 93 f1 a0 06 e0 41 d7 3a o....F.......A.: 12d0: 32 8d 27 a6 21 cf e8 00 22 bf 32 78 0c 41 02 f9 2.'.!...".2x.A.. 12e0: c4 60 b8 c7 81 13 78 02 f0 59 40 10 92 00 21 51 .`....x..Y@...!Q 12f0: e3 a7 47 08 7e 7a 78 93 30 28 1f d2 99 f9 90 e1 ..G.~zx.0(...... 1300: 11 c2 07 c4 7b 9f 3b 19 c1 29 7b a4 e0 b0 7e 0e ....{.;..){...~. 1310: 20 c0 af 0f 8f 0d 09 7c ae 08 8c 1d aa fd 0a 40 ......|.......@ 1320: 08 1e ed 51 e0 54 23 1c 2d 78 08 8a 1c 03 4a cc ...Q.T#.-x....J. 1330: 18 50 03 38 85 d0 e7 73 04 47 14 25 f6 21 19 da .P.8...s.G.%.!.. 1340: 08 e1 1f 39 4e c1 f7 8b 23 3d ad 23 78 91 f0 08 ...9N...#=.#x... 1350: 30 e1 ce 28 a8 38 30 f4 ff 7f 4c 01 dc 7a 3b a6 0..(.80...L..z;. 1360: 80 3e c0 31 05 50 fc ff 3f a6 00 87 a8 c7 14 f4 .>.1.P..?....... 1370: 40 0c 7c 2e a1 0d ff 96 c1 8e 03 87 74 6a 8f 28 @.|.........tj.( 1380: 80 29 79 47 14 50 8c 14 d6 f1 04 18 05 3c 9b a0 .)yG.P.......<.. 1390: 22 1d 4f 80 ce ff ff 78 02 58 b8 9a bc 92 84 7d ".O....x.X.....} 13a0: 1e 78 1d 89 14 e3 41 e2 b5 e4 c1 24 46 98 08 8f .x....A....$F... 13b0: 27 1e 47 c0 b7 82 28 91 8e 3e c4 83 49 28 63 3e '.G...(..>..I(c> 13c0: a3 84 89 f9 04 70 22 ef 27 46 0a 73 2a 8f 27 2c .....p".'F.s*.', 13d0: c4 f1 04 a0 85 e2 e3 09 3a 2c 84 fe ff c7 13 dc ........:,...... 13e0: e1 c1 a7 0c fc 85 0c c6 f9 04 30 24 f0 7c 02 ca ..........0$.|.. 13f0: db 18 e6 80 02 8c 14 da f4 a9 d1 a8 55 83 32 35 ............U.25 1400: ca 34 a8 d5 a7 52 63 c6 4c 9c 52 bc 6c 8d df f2 .4...Rc.L.R.l... 1410: 9e 09 02 b1 20 0a 81 38 cc f3 42 20 96 a2 01 84 .... ..8..B .... 1420: 85 06 a1 42 a9 05 e2 98 20 34 92 0a 10 f6 ff 07 ...B.... 4...... 1430: 5b 82 1b 4c 49 44 30 08 5f 48 49 44 0c 41 d0 0c [..LID0._HID.A.. 1440: 0d 14 0b 5f 4c 49 44 00 a4 4c 50 4f 4c 5b 82 0f ..._LID..LPOL[.. 1450: 50 57 52 42 08 5f 48 49 44 0c 41 d0 0c 0c 5b 82 PWRB._HID.A...[. 1460: 84 b9 04 50 43 49 30 14 09 5f 53 33 44 00 a4 0a ...PCI0.._S3D... 1470: 02 14 09 5f 53 34 44 00 a4 0a 02 08 5f 48 49 44 ..._S4D....._HID 1480: 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 d0 0a 03 5b .A...._CID.A...[ 1490: 82 43 0e 4d 43 48 43 08 5f 41 44 52 00 5b 80 48 .C.MCHC._ADR.[.H 14a0: 42 55 53 02 0a 40 0a c0 5b 81 4a 0c 48 42 55 53 BUS..@..[.J.HBUS 14b0: 03 45 50 45 4e 01 00 0b 45 50 42 52 14 00 20 4d .EPEN...EPBR.. M 14c0: 48 45 4e 01 00 0d 4d 48 42 52 12 00 40 0a 50 58 HEN...MHBR..@.PX 14d0: 45 4e 01 50 58 53 5a 02 00 17 50 58 42 52 06 00 EN.PXSZ...PXBR.. 14e0: 20 44 49 45 4e 01 00 0b 44 49 42 52 14 00 20 49 DIEN...DIBR.. I 14f0: 50 45 4e 01 00 0b 49 50 42 52 14 00 40 0e 00 04 PEN...IPBR..@... 1500: 50 4d 30 48 02 00 02 50 4d 31 4c 02 00 02 50 4d PM0H...PM1L...PM 1510: 31 48 02 00 02 50 4d 32 4c 02 00 02 50 4d 32 48 1H...PM2L...PM2H 1520: 02 00 02 50 4d 33 4c 02 00 02 50 4d 33 48 02 00 ...PM3L...PM3H.. 1530: 02 50 4d 34 4c 02 00 02 50 4d 34 48 02 00 02 50 .PM4L...PM4H...P 1540: 4d 35 4c 02 00 02 50 4d 35 48 02 00 02 50 4d 36 M5L...PM5H...PM6 1550: 4c 02 00 02 50 4d 36 48 02 00 02 00 07 48 45 4e L...PM6H.....HEN 1560: 41 01 00 40 05 54 55 55 44 10 00 40 06 00 04 54 A..@.TUUD..@...T 1570: 4c 55 44 0c 08 42 55 46 30 11 4d 20 0b 08 02 88 LUD..BUF0.M .... 1580: 0d 00 02 0c 00 00 00 00 00 ff 00 00 00 00 01 87 ................ 1590: 17 00 01 0c 03 00 00 00 00 00 00 00 00 f7 0c 00 ................ 15a0: 00 00 00 00 00 f8 0c 00 00 47 01 f8 0c f8 0c 01 .........G...... 15b0: 08 87 17 00 01 0c 03 00 00 00 00 00 0d 00 00 ff ................ 15c0: ff 00 00 00 00 00 00 00 f3 00 00 87 17 00 00 0c ................ 15d0: 03 00 00 00 00 00 00 0a 00 ff ff 0b 00 00 00 00 ................ 15e0: 00 00 00 02 00 87 17 00 00 0c 03 00 00 00 00 00 ................ 15f0: 00 0c 00 ff 3f 0c 00 00 00 00 00 00 40 00 00 87 ....?.......@... 1600: 17 00 00 0c 03 00 00 00 00 00 40 0c 00 ff 7f 0c ..........@..... 1610: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 1620: 00 00 00 00 80 0c 00 ff bf 0c 00 00 00 00 00 00 ................ 1630: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0c @............... 1640: 00 ff ff 0c 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1650: 00 0c 03 00 00 00 00 00 00 0d 00 ff 3f 0d 00 00 ............?... 1660: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1670: 00 00 40 0d 00 ff 7f 0d 00 00 00 00 00 00 40 00 ..@...........@. 1680: 00 87 17 00 00 0c 03 00 00 00 00 00 80 0d 00 ff ................ 1690: bf 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c ........@....... 16a0: 03 00 00 00 00 00 c0 0d 00 ff ff 0d 00 00 00 00 ................ 16b0: 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 ..@............. 16c0: 00 0e 00 ff 3f 0e 00 00 00 00 00 00 40 00 00 87 ....?.......@... 16d0: 17 00 00 0c 03 00 00 00 00 00 40 0e 00 ff 7f 0e ..........@..... 16e0: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 16f0: 00 00 00 00 80 0e 00 ff bf 0e 00 00 00 00 00 00 ................ 1700: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0e @............... 1710: 00 ff ff 0e 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1720: 00 0c 03 00 00 00 00 00 00 0f 00 ff ff 0f 00 00 ................ 1730: 00 00 00 00 00 01 00 87 17 00 00 0c 03 00 00 00 ................ 1740: 00 00 00 00 00 ff ff ff df 00 00 00 00 00 00 00 ................ 1750: 00 87 17 00 00 0c 03 00 00 00 00 00 00 00 f0 ff ................ 1760: ff bf fe 00 00 00 00 00 00 c0 0e 87 17 00 00 0c ................ 1770: 03 00 00 00 00 00 00 d4 fe ff 4f d4 fe 00 00 00 ..........O..... 1780: 00 00 00 00 00 79 00 14 4b 3d 5f 43 52 53 08 a0 .....y..K=_CRS.. 1790: 1c 5e 2e 4d 43 48 43 50 4d 31 4c 8a 42 55 46 30 .^.MCHCPM1L.BUF0 17a0: 0a 7c 43 30 4c 4e 70 00 43 30 4c 4e a0 1f 93 5e .|C0LNp.C0LN...^ 17b0: 2e 4d 43 48 43 50 4d 31 4c 01 8d 42 55 46 30 0b .MCHCPM1L..BUF0. 17c0: 58 03 43 30 52 57 70 00 43 30 52 57 a0 1c 5e 2e X.C0RWp.C0RW..^. 17d0: 4d 43 48 43 50 4d 31 48 8a 42 55 46 30 0a 96 43 MCHCPM1H.BUF0..C 17e0: 34 4c 4e 70 00 43 34 4c 4e a0 1f 93 5e 2e 4d 43 4LNp.C4LN...^.MC 17f0: 48 43 50 4d 31 48 01 8d 42 55 46 30 0b 28 04 43 HCPM1H..BUF0.(.C 1800: 34 52 57 70 00 43 34 52 57 a0 1c 5e 2e 4d 43 48 4RWp.C4RW..^.MCH 1810: 43 50 4d 32 4c 8a 42 55 46 30 0a b0 43 38 4c 4e CPM2L.BUF0..C8LN 1820: 70 00 43 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 p.C8LN...^.MCHCP 1830: 4d 32 4c 01 8d 42 55 46 30 0b f8 04 43 38 52 57 M2L..BUF0...C8RW 1840: 70 00 43 38 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d p.C8RW..^.MCHCPM 1850: 32 48 8a 42 55 46 30 0a ca 43 43 4c 4e 70 00 43 2H.BUF0..CCLNp.C 1860: 43 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 32 48 CLN...^.MCHCPM2H 1870: 01 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 43 ..BUF0...CCRWp.C 1880: 43 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d 33 4c 8a CRW..^.MCHCPM3L. 1890: 42 55 46 30 0a e4 44 30 4c 4e 70 00 44 30 4c 4e BUF0..D0LNp.D0LN 18a0: a0 1f 93 5e 2e 4d 43 48 43 50 4d 33 4c 01 8d 42 ...^.MCHCPM3L..B 18b0: 55 46 30 0b 98 06 44 30 52 57 70 00 44 30 52 57 UF0...D0RWp.D0RW 18c0: a0 1c 5e 2e 4d 43 48 43 50 4d 33 48 8a 42 55 46 ..^.MCHCPM3H.BUF 18d0: 30 0a fe 44 34 4c 4e 70 00 44 34 4c 4e a0 1f 93 0..D4LNp.D4LN... 18e0: 5e 2e 4d 43 48 43 50 4d 33 48 01 8d 42 55 46 30 ^.MCHCPM3H..BUF0 18f0: 0b 68 07 44 34 52 57 70 00 44 34 52 57 a0 1d 5e .h.D4RWp.D4RW..^ 1900: 2e 4d 43 48 43 50 4d 34 4c 8a 42 55 46 30 0b 18 .MCHCPM4L.BUF0.. 1910: 01 44 38 4c 4e 70 00 44 38 4c 4e a0 1f 93 5e 2e .D8LNp.D8LN...^. 1920: 4d 43 48 43 50 4d 34 4c 01 8d 42 55 46 30 0b 38 MCHCPM4L..BUF0.8 1930: 08 44 38 52 57 70 00 44 38 52 57 a0 1d 5e 2e 4d .D8RWp.D8RW..^.M 1940: 43 48 43 50 4d 34 48 8a 42 55 46 30 0b 32 01 44 CHCPM4H.BUF0.2.D 1950: 43 4c 4e 70 00 44 43 4c 4e a0 1f 93 5e 2e 4d 43 CLNp.DCLN...^.MC 1960: 48 43 50 4d 34 48 01 8d 42 55 46 30 0b 08 09 44 HCPM4H..BUF0...D 1970: 43 52 57 70 00 44 43 52 57 a0 1d 5e 2e 4d 43 48 CRWp.DCRW..^.MCH 1980: 43 50 4d 35 4c 8a 42 55 46 30 0b 4c 01 45 30 4c CPM5L.BUF0.L.E0L 1990: 4e 70 00 45 30 4c 4e a0 1f 93 5e 2e 4d 43 48 43 Np.E0LN...^.MCHC 19a0: 50 4d 35 4c 01 8d 42 55 46 30 0b d8 09 45 30 52 PM5L..BUF0...E0R 19b0: 57 70 00 45 30 52 57 a0 1d 5e 2e 4d 43 48 43 50 Wp.E0RW..^.MCHCP 19c0: 4d 35 48 8a 42 55 46 30 0b 66 01 45 34 4c 4e 70 M5H.BUF0.f.E4LNp 19d0: 00 45 34 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d .E4LN...^.MCHCPM 19e0: 35 48 01 8d 42 55 46 30 0b a8 0a 45 34 52 57 70 5H..BUF0...E4RWp 19f0: 00 45 34 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 .E4RW..^.MCHCPM6 1a00: 4c 8a 42 55 46 30 0b 80 01 45 38 4c 4e 70 00 45 L.BUF0...E8LNp.E 1a10: 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 4c 8LN...^.MCHCPM6L 1a20: 01 8d 42 55 46 30 0b 78 0b 45 38 52 57 70 00 45 ..BUF0.x.E8RWp.E 1a30: 38 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 48 8a 8RW..^.MCHCPM6H. 1a40: 42 55 46 30 0b 9a 01 45 43 4c 4e 70 00 45 43 4c BUF0...ECLNp.ECL 1a50: 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 48 01 8d N...^.MCHCPM6H.. 1a60: 42 55 46 30 0b 48 0c 45 43 52 57 70 00 45 43 52 BUF0.H.ECRWp.ECR 1a70: 57 a0 1d 5e 2e 4d 43 48 43 50 4d 30 48 8a 42 55 W..^.MCHCPM0H.BU 1a80: 46 30 0b b4 01 46 30 4c 4e 70 00 46 30 4c 4e a0 F0...F0LNp.F0LN. 1a90: 1f 93 5e 2e 4d 43 48 43 50 4d 30 48 01 8d 42 55 ..^.MCHCPM0H..BU 1aa0: 46 30 0b 18 0d 46 30 52 57 70 00 46 30 52 57 8a F0...F0RWp.F0RW. 1ab0: 42 55 46 30 0b c2 01 4d 31 4d 4e 8a 42 55 46 30 BUF0...M1MN.BUF0 1ac0: 0b c6 01 4d 31 4d 58 8a 42 55 46 30 0b ce 01 4d ...M1MX.BUF0...M 1ad0: 31 4c 4e 8a 42 55 46 30 0b dc 01 4d 32 4d 4e 8a 1LN.BUF0...M2MN. 1ae0: 42 55 46 30 0b e0 01 4d 32 4d 58 8a 42 55 46 30 BUF0...M2MX.BUF0 1af0: 0b e8 01 4d 32 4c 4e 79 5e 2e 4d 43 48 43 50 58 ...M2LNy^.MCHCPX 1b00: 42 52 0a 1a 4d 31 4d 58 7a 0c 00 00 00 10 5e 2e BR..M1MXz.....^. 1b10: 4d 43 48 43 50 58 53 5a 60 72 4d 31 4d 58 60 4d MCHCPXSZ`rM1MX`M 1b20: 32 4d 4e 72 74 4d 32 4d 58 4d 32 4d 4e 00 01 4d 2MNrtM2MXM2MN..M 1b30: 32 4c 4e 74 4d 31 4d 58 01 4d 31 4d 58 79 5e 2e 2LNtM1MX.M1MXy^. 1b40: 4d 43 48 43 54 4c 55 44 0a 14 4d 31 4d 4e 72 74 MCHCTLUD..M1MNrt 1b50: 4d 31 4d 58 4d 31 4d 4e 00 01 4d 31 4c 4e a4 42 M1MXM1MN..M1LN.B 1b60: 55 46 30 14 47 28 5f 50 52 54 00 a0 45 0f 47 50 UF0.G(_PRT..E.GP 1b70: 49 43 a4 12 4d 0e 13 12 0b 04 0c ff ff 01 00 00 IC..M........... 1b80: 00 0a 10 12 0b 04 0c ff ff 02 00 00 00 0a 10 12 ................ 1b90: 0b 04 0c ff ff 07 00 00 00 0a 10 12 0b 04 0c ff ................ 1ba0: ff 19 00 00 00 0a 14 12 0b 04 0c ff ff 1a 00 00 ................ 1bb0: 00 0a 10 12 0b 04 0c ff ff 1a 00 01 00 0a 15 12 ................ 1bc0: 0c 04 0c ff ff 1a 00 0a 02 00 0a 12 12 0b 04 0c ................ 1bd0: ff ff 1b 00 00 00 0a 16 12 0b 04 0c ff ff 1c 00 ................ 1be0: 00 00 0a 11 12 0b 04 0c ff ff 1c 00 01 00 0a 10 ................ 1bf0: 12 0c 04 0c ff ff 1c 00 0a 02 00 0a 12 12 0c 04 ................ 1c00: 0c ff ff 1c 00 0a 03 00 0a 13 12 0b 04 0c ff ff ................ 1c10: 1d 00 00 00 0a 17 12 0b 04 0c ff ff 1d 00 01 00 ................ 1c20: 0a 13 12 0c 04 0c ff ff 1d 00 0a 02 00 0a 12 12 ................ 1c30: 0b 04 0c ff ff 1f 00 00 00 0a 13 12 0b 04 0c ff ................ 1c40: ff 1f 00 01 00 0a 13 12 0c 04 0c ff ff 1f 00 0a ................ 1c50: 02 00 0a 13 12 0c 04 0c ff ff 1f 00 0a 03 00 0a ................ 1c60: 10 a1 49 18 a4 12 45 18 13 12 13 04 0c ff ff 01 ..I...E......... 1c70: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1c80: 0c ff ff 02 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 ......^.LPCBLNKA 1c90: 00 12 13 04 0c ff ff 07 00 00 5e 2e 4c 50 43 42 ..........^.LPCB 1ca0: 4c 4e 4b 41 00 12 13 04 0c ff ff 19 00 00 5e 2e LNKA..........^. 1cb0: 4c 50 43 42 4c 4e 4b 45 00 12 13 04 0c ff ff 1a LPCBLNKE........ 1cc0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1cd0: 0c ff ff 1a 00 01 5e 2e 4c 50 43 42 4c 4e 4b 46 ......^.LPCBLNKF 1ce0: 00 12 14 04 0c ff ff 1a 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1cf0: 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1b 00 00 5e BLNKC..........^ 1d00: 2e 4c 50 43 42 4c 4e 4b 47 00 12 13 04 0c ff ff .LPCBLNKG....... 1d10: 1c 00 00 5e 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 ...^.LPCBLNKB... 1d20: 04 0c ff ff 1c 00 01 5e 2e 4c 50 43 42 4c 4e 4b .......^.LPCBLNK 1d30: 41 00 12 14 04 0c ff ff 1c 00 0a 02 5e 2e 4c 50 A...........^.LP 1d40: 43 42 4c 4e 4b 43 00 12 14 04 0c ff ff 1c 00 0a CBLNKC.......... 1d50: 03 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0c .^.LPCBLNKD..... 1d60: ff ff 1d 00 00 5e 2e 4c 50 43 42 4c 4e 4b 48 00 .....^.LPCBLNKH. 1d70: 12 13 04 0c ff ff 1d 00 01 5e 2e 4c 50 43 42 4c .........^.LPCBL 1d80: 4e 4b 44 00 12 14 04 0c ff ff 1d 00 0a 02 5e 2e NKD...........^. 1d90: 4c 50 43 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1f LPCBLNKC........ 1da0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 ..^.LPCBLNKD.... 1db0: 0c ff ff 1f 00 01 5e 2e 4c 50 43 42 4c 4e 4b 44 ......^.LPCBLNKD 1dc0: 00 12 14 04 0c ff ff 1f 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1dd0: 42 4c 4e 4b 44 00 12 14 04 0c ff ff 1f 00 0a 03 BLNKD........... 1de0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 40 14 50 ^.LPCBLNKA.[.@.P 1df0: 44 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 DRC._HID.A...._U 1e00: 49 44 01 08 42 55 46 30 11 46 06 0a 62 86 09 00 ID..BUF0.F..b... 1e10: 01 00 00 00 00 00 40 00 00 86 09 00 01 00 00 00 ......@......... 1e20: 00 00 40 00 00 86 09 00 01 00 00 00 00 00 10 00 ..@............. 1e30: 00 86 09 00 01 00 00 00 00 00 10 00 00 86 09 00 ................ 1e40: 01 00 00 00 00 00 00 00 00 86 09 00 01 00 00 d2 ................ 1e50: fe 00 00 02 00 86 09 00 01 00 00 d4 fe 00 50 00 ..............P. 1e60: 00 86 09 00 01 00 50 d4 fe 00 b0 04 00 79 00 14 ......P......y.. 1e70: 4d 0b 5f 43 52 53 08 8a 42 55 46 30 0a 04 52 42 M._CRS..BUF0..RB 1e80: 52 30 79 5e 5e 2e 4c 50 43 42 52 43 42 41 0a 0e R0y^^.LPCBRCBA.. 1e90: 52 42 52 30 8a 42 55 46 30 0a 10 4d 42 52 30 79 RBR0.BUF0..MBR0y 1ea0: 5e 5e 2e 4d 43 48 43 4d 48 42 52 0a 0e 4d 42 52 ^^.MCHCMHBR..MBR 1eb0: 30 8a 42 55 46 30 0a 1c 44 42 52 30 79 5e 5e 2e 0.BUF0..DBR0y^^. 1ec0: 4d 43 48 43 44 49 42 52 0a 0c 44 42 52 30 8a 42 MCHCDIBR..DBR0.B 1ed0: 55 46 30 0a 28 45 42 52 30 79 5e 5e 2e 4d 43 48 UF0.(EBR0y^^.MCH 1ee0: 43 45 50 42 52 0a 0c 45 42 52 30 8a 42 55 46 30 CEPBR..EBR0.BUF0 1ef0: 0a 34 58 42 52 30 79 5e 5e 2e 4d 43 48 43 50 58 .4XBR0y^^.MCHCPX 1f00: 42 52 0a 1a 58 42 52 30 8a 42 55 46 30 0a 38 58 BR..XBR0.BUF0.8X 1f10: 53 5a 30 7a 0c 00 00 00 10 5e 5e 2e 4d 43 48 43 SZ0z.....^^.MCHC 1f20: 50 58 53 5a 58 53 5a 30 a4 42 55 46 30 5b 82 4d PXSZXSZ0.BUF0[.M 1f30: 50 50 45 47 50 08 5f 41 44 52 0c 00 00 01 00 14 PPEGP._ADR...... 1f40: 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 2c A._PRT..3GPIC.., 1f50: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 1f60: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 1f70: 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 12 ............E... 1f80: 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 43 A.........^^.LPC 1f90: 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e 2e BLNKA........^^. 1fa0: 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff 0a LPCBLNKB........ 1fb0: 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 1fc0: 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 1fd0: 00 5b 82 49 46 56 47 41 5f 08 5f 41 44 52 00 08 .[.IFVGA_._ADR.. 1fe0: 53 57 49 54 01 08 43 52 54 41 01 08 4c 43 44 41 SWIT..CRTA..LCDA 1ff0: 01 08 54 56 41 41 01 08 56 4c 44 46 01 5b 80 56 ..TVAA..VLDF.[.V 2000: 49 44 53 02 00 0a c8 5b 81 0b 56 49 44 53 03 56 IDS....[..VIDS.V 2010: 44 49 44 20 14 09 5f 53 54 41 00 a4 0a 0f 08 5f DID .._STA....._ 2020: 50 53 43 00 14 0c 5f 50 53 30 00 70 00 5f 50 53 PSC..._PS0.p._PS 2030: 43 14 0c 5f 50 53 31 00 70 01 5f 50 53 43 14 0d C.._PS1.p._PSC.. 2040: 5f 50 53 33 00 70 0a 03 5f 50 53 43 14 10 5f 44 _PS3.p.._PSC.._D 2050: 4f 53 01 70 7b 68 0a 03 00 53 57 49 54 14 17 5f OS.p{h...SWIT.._ 2060: 44 4f 44 00 a4 12 0f 03 0c 00 01 01 00 0c 10 01 DOD............. 2070: 01 00 0b 00 02 5b 82 4d 08 43 52 54 5f 14 0a 5f .....[.M.CRT_.._ 2080: 41 44 52 00 a4 0b 00 01 14 41 06 5f 44 43 53 00 ADR......A._DCS. 2090: 5e 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 ^^^^.LPCBPHSS..p 20a0: 43 41 44 4c 60 70 43 53 54 45 61 7b 60 0a 02 60 CADL`pCSTEa{`..` 20b0: 7b 61 0a 02 61 a0 08 60 70 01 43 52 54 41 a1 07 {a..a..`p.CRTA.. 20c0: 70 00 43 52 54 41 a0 13 43 52 54 41 a0 08 93 61 p.CRTA..CRTA...a 20d0: 0a 02 a4 0a 1f a1 04 a4 0a 1d a1 0f a0 08 93 61 ...............a 20e0: 0a 02 a4 0a 0f a1 04 a4 0a 0d 14 12 5f 44 47 53 ............_DGS 20f0: 00 a0 07 43 52 54 41 a4 01 a1 03 a4 00 14 06 5f ...CRTA........_ 2100: 44 53 53 01 5b 82 47 0e 4c 43 44 5f 14 0a 5f 41 DSS.[.G.LCD_.._A 2110: 44 52 00 a4 0b 10 01 14 4d 05 5f 44 43 53 00 5e DR......M._DCS.^ 2120: 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 ^^^.LPCBPHSS..pC 2130: 41 44 4c 60 70 43 53 54 45 61 7b 60 01 60 7b 61 ADL`pCSTEa{`.`{a 2140: 01 61 a0 08 60 70 01 4c 43 44 41 a1 07 70 00 4c .a..`p.LCDA..p.L 2150: 43 44 41 a0 12 4c 43 44 41 a0 07 93 61 01 a4 0a CDA..LCDA...a... 2160: 1f a1 04 a4 0a 1d a1 0e a0 07 93 61 01 a4 0a 0f ...........a.... 2170: a1 04 a4 0a 0d 14 12 5f 44 47 53 00 a0 07 4c 43 ......._DGS...LC 2180: 44 41 a4 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 DA........_DSS.. 2190: 1d 5f 42 43 4c 00 a4 12 15 0a 0a 46 0a 28 00 0a ._BCL......F.(.. 21a0: 0a 0a 14 0a 1e 0a 28 0a 32 0a 3c 0a 46 14 20 5f ......(.2.<.F. _ 21b0: 42 43 4d 01 78 68 0a 0a 60 61 70 61 5e 5e 5e 5e BCM.xh..`apa^^^^ 21c0: 2f 03 4c 50 43 42 45 43 30 5f 42 52 54 53 14 1e /.LPCBEC0_BRTS.. 21d0: 5f 42 51 43 00 77 5e 5e 5e 5e 2f 03 4c 50 43 42 _BQC.w^^^^/.LPCB 21e0: 45 43 30 5f 42 52 54 53 0a 0a 60 a4 60 5b 82 4d EC0_BRTS..`.`[.M 21f0: 08 54 56 5f 5f 14 0a 5f 41 44 52 00 a4 0b 00 02 .TV__.._ADR..... 2200: 14 41 06 5f 44 43 53 00 5e 5e 5e 5e 2e 4c 50 43 .A._DCS.^^^^.LPC 2210: 42 50 48 53 53 0a 0c 70 43 41 44 4c 60 70 43 53 BPHSS..pCADL`pCS 2220: 54 45 61 7b 60 0a 04 60 7b 61 0a 04 61 a0 08 60 TEa{`..`{a..a..` 2230: 70 01 54 56 41 41 a1 07 70 00 54 56 41 41 a0 13 p.TVAA..p.TVAA.. 2240: 54 56 41 41 a0 08 93 61 0a 04 a4 0a 1f a1 04 a4 TVAA...a........ 2250: 0a 1d a1 0f a0 08 93 61 0a 04 a4 0a 0f a1 04 a4 .......a........ 2260: 0a 0d 14 12 5f 44 47 53 00 a0 07 54 56 41 41 a4 ...._DGS...TVAA. 2270: 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 49 10 44 ......._DSS..I.D 2280: 53 53 57 00 a0 4a 0e 93 53 57 49 54 00 5e 5e 5e SSW..J..SWIT.^^^ 2290: 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 41 44 4c .LPCBPHSS..pCADL 22a0: 60 70 43 53 54 45 61 a0 16 94 61 01 7b 60 61 56 `pCSTEa...a.{`aV 22b0: 4c 44 46 7b 56 4c 44 46 0a fe 56 4c 44 46 a0 43 LDF{VLDF..VLDF.C 22c0: 0a 56 4c 44 46 a0 27 93 60 0a 09 a0 0b 93 61 0a .VLDF.'.`.....a. 22d0: 08 53 54 42 4c 0a 02 a0 0a 93 61 01 53 54 42 4c .STBL.....a.STBL 22e0: 0a 03 a0 0a 93 61 0a 09 53 54 42 4c 01 a0 28 93 .....a..STBL..(. 22f0: 60 0a 0a a0 0b 93 61 0a 08 53 54 42 4c 0a 05 a0 `.....a..STBL... 2300: 0a 93 61 0a 02 53 54 42 4c 01 a0 0b 93 61 0a 0a ..a..STBL....a.. 2310: 53 54 42 4c 0a 04 a0 4b 04 93 60 0a 0b a0 0b 93 STBL...K..`..... 2320: 61 0a 08 53 54 42 4c 0a 02 a0 0b 93 61 0a 09 53 a..STBL.....a..S 2330: 54 42 4c 0a 05 a0 0a 93 61 01 53 54 42 4c 0a 03 TBL.....a.STBL.. 2340: a0 0b 93 61 0a 0a 53 54 42 4c 0a 04 a0 0a 93 61 ...a..STBL.....a 2350: 0a 02 53 54 42 4c 01 a0 0a 93 61 0a 0b 53 54 42 ..STBL....a..STB 2360: 4c 01 a1 0c 70 01 56 4c 44 46 53 54 42 4c 01 a1 L...p.VLDFSTBL.. 2370: 16 a0 14 93 53 57 49 54 01 5e 5e 5e 2e 4c 50 43 ....SWIT.^^^.LPC 2380: 42 50 48 53 53 01 14 45 0b 53 54 42 4c 01 a0 16 BPHSS..E.STBL... 2390: 93 68 01 70 00 43 52 54 41 70 01 4c 43 44 41 70 .h.p.CRTAp.LCDAp 23a0: 00 54 56 41 41 a0 17 93 68 0a 02 70 01 43 52 54 .TVAA...h..p.CRT 23b0: 41 70 00 4c 43 44 41 70 00 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23c0: 68 0a 03 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 23d0: 00 54 56 41 41 a0 17 93 68 0a 04 70 00 43 52 54 .TVAA...h..p.CRT 23e0: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23f0: 68 0a 05 70 00 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2400: 01 54 56 41 41 a0 17 93 68 0a 06 70 01 43 52 54 .TVAA...h..p.CRT 2410: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 2420: 68 0a 07 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2430: 01 54 56 41 41 86 56 47 41 5f 0a 80 5b 82 42 f8 .TVAA.VGA_..[.B. 2440: 47 46 58 30 08 5f 41 44 52 0c 00 00 02 00 14 10 GFX0._ADR....... 2450: 5f 44 4f 53 01 70 7b 68 0a 07 00 44 53 45 4e 14 _DOS.p{h...DSEN. 2460: 41 26 5f 44 4f 44 00 70 00 4e 44 49 44 a0 15 92 A&_DOD.p.NDID... 2470: 93 44 49 44 4c 00 70 53 44 44 4c 44 49 44 31 44 .DIDL.pSDDLDID1D 2480: 49 44 31 a0 15 92 93 44 44 4c 32 00 70 53 44 44 ID1....DDL2.pSDD 2490: 4c 44 49 44 32 44 49 44 32 a0 15 92 93 44 44 4c LDID2DID2....DDL 24a0: 33 00 70 53 44 44 4c 44 49 44 33 44 49 44 33 a0 3.pSDDLDID3DID3. 24b0: 15 92 93 44 44 4c 34 00 70 53 44 44 4c 44 49 44 ...DDL4.pSDDLDID 24c0: 34 44 49 44 34 a0 15 92 93 44 44 4c 35 00 70 53 4DID4....DDL5.pS 24d0: 44 44 4c 44 49 44 35 44 49 44 35 a0 2c 93 4e 44 DDLDID5DID5.,.ND 24e0: 49 44 01 08 54 4d 50 31 12 07 01 0c ff ff ff ff ID..TMP1........ 24f0: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2500: 31 00 00 a4 54 4d 50 31 a0 46 04 93 4e 44 49 44 1...TMP1.F..NDID 2510: 0a 02 08 54 4d 50 32 12 0c 02 0c ff ff ff ff 0c ...TMP2......... 2520: ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 ....p}.....DID1. 2530: 88 54 4d 50 32 00 00 70 7d 0c 00 00 01 00 44 49 .TMP2..p}.....DI 2540: 44 32 00 88 54 4d 50 32 01 00 a4 54 4d 50 32 a0 D2..TMP2...TMP2. 2550: 4f 05 93 4e 44 49 44 0a 03 08 54 4d 50 33 12 11 O..NDID...TMP3.. 2560: 03 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 2570: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2580: 33 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 3..p}.....DID2.. 2590: 54 4d 50 33 01 00 70 7d 0c 00 00 01 00 44 49 44 TMP3..p}.....DID 25a0: 33 00 88 54 4d 50 33 0a 02 00 a4 54 4d 50 33 a0 3..TMP3....TMP3. 25b0: 48 07 93 4e 44 49 44 0a 04 08 54 4d 50 34 12 16 H..NDID...TMP4.. 25c0: 04 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 25d0: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 25e0: 00 88 54 4d 50 34 00 00 70 7d 0c 00 00 01 00 44 ..TMP4..p}.....D 25f0: 49 44 32 00 88 54 4d 50 34 01 00 70 7d 0c 00 00 ID2..TMP4..p}... 2600: 01 00 44 49 44 33 00 88 54 4d 50 34 0a 02 00 70 ..DID3..TMP4...p 2610: 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d 50 34 }.....DID4..TMP4 2620: 0a 03 00 a4 54 4d 50 34 a0 41 09 94 4e 44 49 44 ....TMP4.A..NDID 2630: 0a 04 08 54 4d 50 35 12 1b 05 0c ff ff ff ff 0c ...TMP5......... 2640: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 2650: ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 88 ...p}.....DID1.. 2660: 54 4d 50 35 00 00 70 7d 0c 00 00 01 00 44 49 44 TMP5..p}.....DID 2670: 32 00 88 54 4d 50 35 01 00 70 7d 0c 00 00 01 00 2..TMP5..p}..... 2680: 44 49 44 33 00 88 54 4d 50 35 0a 02 00 70 7d 0c DID3..TMP5...p}. 2690: 00 00 01 00 44 49 44 34 00 88 54 4d 50 35 0a 03 ....DID4..TMP5.. 26a0: 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d .p}.....DID4..TM 26b0: 50 35 0a 04 00 a4 54 4d 50 35 a4 12 05 01 0b 00 P5....TMP5...... 26c0: 04 5b 82 43 06 44 44 30 31 14 1c 5f 41 44 52 08 .[.C.DD01.._ADR. 26d0: a0 09 93 44 49 44 31 00 a4 01 a1 0b a4 7b 0b ff ...DID1......{.. 26e0: ff 44 49 44 31 00 14 0f 5f 44 43 53 00 a4 43 44 .DID1..._DCS..CD 26f0: 44 53 44 49 44 31 14 0f 5f 44 47 53 00 a4 4e 44 DSDID1.._DGS..ND 2700: 44 53 44 49 44 31 14 1f 5f 44 53 53 01 a0 18 93 DSDID1.._DSS.... 2710: 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 {h...........pNS 2720: 54 45 43 53 54 45 5b 82 44 06 44 44 30 32 14 1d TECSTE[.D.DD02.. 2730: 5f 41 44 52 08 a0 0a 93 44 49 44 32 00 a4 0a 02 _ADR....DID2.... 2740: a1 0b a4 7b 0b ff ff 44 49 44 32 00 14 0f 5f 44 ...{...DID2..._D 2750: 43 53 00 a4 43 44 44 53 44 49 44 32 14 0f 5f 44 CS..CDDSDID2.._D 2760: 47 53 00 a4 4e 44 44 53 44 49 44 32 14 1f 5f 44 GS..NDDSDID2.._D 2770: 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 SS....{h........ 2780: 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 41 07 ...pNSTECSTE[.A. 2790: 44 44 30 33 14 1d 5f 41 44 52 08 a0 0a 93 44 49 DD03.._ADR....DI 27a0: 44 33 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 49 44 D3.......{...DID 27b0: 33 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 33 3..._DCS....DID3 27c0: 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 33 14 .......CDDSDID3. 27d0: 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 44 33 14 ._DGS..NDDSDID3. 27e0: 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 ._DSS....{h..... 27f0: 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 5b ......pNSTECSTE[ 2800: 82 41 07 44 44 30 34 14 1d 5f 41 44 52 08 a0 0a .A.DD04.._ADR... 2810: 93 44 49 44 34 00 a4 0a 04 a1 0b a4 7b 0b ff ff .DID4.......{... 2820: 44 49 44 34 00 14 1c 5f 44 43 53 00 a0 0a 93 44 DID4..._DCS....D 2830: 49 44 34 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 ID4.......CDDSDI 2840: 44 34 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 D4.._DGS..NDDSDI 2850: 44 34 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 D4.._DSS....{h.. 2860: 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 .........pNSTECS 2870: 54 45 5b 82 41 07 44 44 30 35 14 1d 5f 41 44 52 TE[.A.DD05.._ADR 2880: 08 a0 0a 93 44 49 44 35 00 a4 0a 05 a1 0b a4 7b ....DID5.......{ 2890: 0b ff ff 44 49 44 35 00 14 1c 5f 44 43 53 00 a0 ...DID5..._DCS.. 28a0: 0a 93 44 49 44 35 00 a4 0a 0b a1 0a a4 43 44 44 ..DID5.......CDD 28b0: 53 44 49 44 35 14 0f 5f 44 47 53 00 a4 4e 44 44 SDID5.._DGS..NDD 28c0: 53 44 49 44 35 14 1f 5f 44 53 53 01 a0 18 93 7b SDID5.._DSS....{ 28d0: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 28e0: 45 43 53 54 45 14 4e 06 53 44 44 4c 01 75 4e 44 ECSTE.N.SDDL.uND 28f0: 49 44 70 7b 68 0b 0f 0f 00 60 7d 0c 00 00 00 80 IDp{h....`}..... 2900: 60 61 a0 09 93 44 49 44 4c 60 a4 61 a0 09 93 44 `a...DIDL`.a...D 2910: 44 4c 32 60 a4 61 a0 09 93 44 44 4c 33 60 a4 61 DL2`.a...DDL3`.a 2920: a0 09 93 44 44 4c 34 60 a4 61 a0 09 93 44 44 4c ...DDL4`.a...DDL 2930: 35 60 a4 61 a0 09 93 44 44 4c 36 60 a4 61 a0 09 5`.a...DDL6`.a.. 2940: 93 44 44 4c 37 60 a4 61 a0 09 93 44 44 4c 38 60 .DDL7`.a...DDL8` 2950: a4 61 a4 00 14 4a 08 43 44 44 53 01 a0 0f 93 43 .a...J.CDDS....C 2960: 41 44 4c 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 ADL{h..........C 2970: 41 4c 32 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL2{h..........C 2980: 41 4c 33 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL3{h..........C 2990: 41 4c 34 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL4{h..........C 29a0: 41 4c 35 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL5{h..........C 29b0: 41 4c 36 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL6{h..........C 29c0: 41 4c 37 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL7{h..........C 29d0: 41 4c 38 7b 68 0b 0f 0f 00 a4 0a 1f a4 0a 1d 14 AL8{h........... 29e0: 41 08 4e 44 44 53 01 a0 0e 93 4e 41 44 4c 7b 68 A.NDDS....NADL{h 29f0: 0b 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 32 7b 68 0b .........NDL2{h. 2a00: 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 33 7b 68 0b 0f ........NDL3{h.. 2a10: 0f 00 a4 01 a0 0e 93 4e 44 4c 34 7b 68 0b 0f 0f .......NDL4{h... 2a20: 00 a4 01 a0 0e 93 4e 44 4c 35 7b 68 0b 0f 0f 00 ......NDL5{h.... 2a30: a4 01 a0 0e 93 4e 44 4c 36 7b 68 0b 0f 0f 00 a4 .....NDL6{h..... 2a40: 01 a0 0e 93 4e 44 4c 37 7b 68 0b 0f 0f 00 a4 01 ....NDL7{h...... 2a50: a0 0e 93 4e 44 4c 38 7b 68 0b 0f 0f 00 a4 01 a4 ...NDL8{h....... 2a60: 00 14 40 07 42 52 54 4e 09 a0 14 93 7b 44 49 44 ..@.BRTN....{DID 2a70: 31 0b 00 0f 00 0b 00 04 86 44 44 30 31 68 a0 14 1........DD01h.. 2a80: 93 7b 44 49 44 32 0b 00 0f 00 0b 00 04 86 44 44 .{DID2........DD 2a90: 30 32 68 a0 14 93 7b 44 49 44 33 0b 00 0f 00 0b 02h...{DID3..... 2aa0: 00 04 86 44 44 30 33 68 a0 14 93 7b 44 49 44 34 ...DD03h...{DID4 2ab0: 0b 00 0f 00 0b 00 04 86 44 44 30 34 68 a0 14 93 ........DD04h... 2ac0: 7b 44 49 44 35 0b 00 0f 00 0b 00 04 86 44 44 30 {DID5........DD0 2ad0: 35 68 10 24 5e 5e 50 43 49 30 5b 80 4d 43 48 50 5h.$^^PCI0[.MCHP 2ae0: 02 0a 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 ..@..[..MCHP..@0 2af0: 54 41 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 TASM...[.IGDP..@ 2b00: 0a c0 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 ..[.E.IGDP..@... 2b10: 47 49 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 GIVD...GUMA..... 2b20: 47 4d 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 GMFN....@FASLE.. 2b30: 18 47 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 .GSSE.GSSB.GSES. 2b40: 00 30 00 08 43 44 56 4c 05 00 03 00 18 4c 42 50 .0..CDVL.....LBP 2b50: 43 08 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 C..0ASLS [.IGDM. 2b60: 41 53 4c 42 0b 00 20 5b 81 4e 16 49 47 44 4d 00 ASLB.. [.N.IGDM. 2b70: 53 49 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 SIGN@.SIZE OVER 2b80: 53 56 45 52 40 10 56 56 45 52 40 08 47 56 45 52 SVER@.VVER@.GVER 2b90: 40 08 4d 42 4f 58 20 00 40 52 44 52 44 59 20 43 @.MBOX .@RDRDY C 2ba0: 53 54 53 20 43 45 56 54 20 00 40 0a 44 49 44 4c STS CEVT .@.DIDL 2bb0: 20 44 44 4c 32 20 44 44 4c 33 20 44 44 4c 34 20 DDL2 DDL3 DDL4 2bc0: 44 44 4c 35 20 44 44 4c 36 20 44 44 4c 37 20 44 DDL5 DDL6 DDL7 D 2bd0: 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 20 43 50 DL8 CPDL CPL2 CP 2be0: 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 43 50 4c L3 CPL4 CPL5 CPL 2bf0: 36 20 43 50 4c 37 20 43 50 4c 38 20 43 41 44 4c 6 CPL7 CPL8 CADL 2c00: 20 43 41 4c 32 20 43 41 4c 33 20 43 41 4c 34 20 CAL2 CAL3 CAL4 2c10: 43 41 4c 35 20 43 41 4c 36 20 43 41 4c 37 20 43 CAL5 CAL6 CAL7 C 2c20: 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 20 4e 44 AL8 NADL NDL2 ND 2c30: 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 4e 44 4c L3 NDL4 NDL5 NDL 2c40: 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 53 4c 50 6 NDL7 NDL8 ASLP 2c50: 20 54 49 44 58 20 43 48 50 44 20 43 4c 49 44 20 TIDX CHPD CLID 2c60: 43 44 43 4b 20 53 58 53 57 20 45 56 54 53 20 43 CDCK SXSW EVTS C 2c70: 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 43 49 45 NOT NRDY .@.SCIE 2c80: 01 47 45 46 43 04 47 58 46 43 03 47 45 53 46 08 .GEFC.GXFC.GESF. 2c90: 00 10 50 41 52 4d 20 44 53 4c 50 20 00 40 7a 41 ..PARM DSLP .@zA 2ca0: 52 44 59 20 41 53 4c 43 20 54 43 48 45 20 41 4c RDY ASLC TCHE AL 2cb0: 53 49 20 42 43 4c 50 20 50 46 49 54 20 43 42 4c SI BCLP PFIT CBL 2cc0: 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 00 40 5c V BCLM@.CPFM .@\ 2cd0: 47 56 44 31 80 00 0e 08 44 42 54 42 12 32 15 00 GVD1....DBTB.2.. 2ce0: 0a 07 0a 38 0b c0 01 0b 00 0e 0a 3f 0b c7 01 0b ...8.......?.... 2cf0: 07 0e 0b f8 01 0b 38 0e 0b c0 0f 00 00 00 00 00 ......8......... 2d00: 0b 00 70 0b 07 70 0b 38 70 0b c0 71 0b 00 7e 08 ..p..p.8p..q..~. 2d10: 43 44 43 54 12 23 03 12 0a 03 0a c8 0b 40 01 0b CDCT.#.......@.. 2d20: 90 01 12 0a 03 0a c8 0b 4d 01 0b 90 01 12 0a 03 ........M....... 2d30: 0a de 0b 4d 01 0b 7d 01 08 53 55 43 43 01 08 4e ...M..}..SUCC..N 2d40: 56 4c 44 0a 02 08 43 52 49 54 0a 04 08 4e 43 52 VLD...CRIT...NCR 2d50: 54 0a 06 14 4c 4a 47 53 43 49 08 14 44 1e 47 42 T...LJGSCI..D.GB 2d60: 44 41 08 a0 1a 93 47 45 53 46 00 70 0b 79 02 50 DA....GESF.p.y.P 2d70: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 1a ARMp.GESF.SUCC.. 2d80: 93 47 45 53 46 01 70 0b 40 02 50 41 52 4d 70 00 .GESF.p.@.PARMp. 2d90: 47 45 53 46 a4 53 55 43 43 a0 47 04 93 47 45 53 GESF.SUCC.G..GES 2da0: 46 0a 04 7b 50 41 52 4d 0c 00 00 ff ef 50 41 52 F..{PARM.....PAR 2db0: 4d 7b 50 41 52 4d 79 83 88 44 42 54 42 49 42 54 M{PARMy..DBTBIBT 2dc0: 54 00 0a 10 00 50 41 52 4d 7d 49 42 54 54 50 41 T....PARM}IBTTPA 2dd0: 52 4d 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 RMPARMp.GESF.SUC 2de0: 43 a0 4a 06 93 47 45 53 46 0a 05 70 49 50 53 43 C.J..GESF..pIPSC 2df0: 50 41 52 4d 7d 50 41 52 4d 79 49 50 41 54 0a 08 PARM}PARMyIPAT.. 2e00: 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 41 52 .PARMrPARM...PAR 2e10: 4d 7d 50 41 52 4d 79 4c 49 44 53 0a 10 00 50 41 M}PARMyLIDS...PA 2e20: 52 4d 72 50 41 52 4d 0c 00 00 01 00 50 41 52 4d RMrPARM.....PARM 2e30: 7d 50 41 52 4d 79 49 42 49 41 0a 14 00 50 41 52 }PARMyIBIA...PAR 2e40: 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 2d 93 47 Mp.GESF.SUCC.-.G 2e50: 45 53 46 0a 06 70 49 54 56 46 50 41 52 4d 7d 50 ESF..pITVFPARM}P 2e60: 41 52 4d 79 49 54 56 4d 0a 04 00 50 41 52 4d 70 ARMyITVM...PARMp 2e70: 00 47 45 53 46 a4 53 55 43 43 a0 4f 08 93 47 45 .GESF.SUCC.O..GE 2e80: 53 46 0a 07 70 47 49 56 44 50 41 52 4d 7f 50 41 SF..pGIVDPARM.PA 2e90: 52 4d 01 50 41 52 4d 7d 50 41 52 4d 79 47 4d 46 RM.PARM}PARMyGMF 2ea0: 4e 01 00 50 41 52 4d 7d 50 41 52 4d 0b 00 10 50 N..PARM}PARM...P 2eb0: 41 52 4d a0 16 49 44 4d 4d 7d 50 41 52 4d 79 49 ARM..IDMM}PARMyI 2ec0: 44 4d 53 0a 11 00 50 41 52 4d a1 12 7d 50 41 52 DMS...PARM..}PAR 2ed0: 4d 79 49 44 4d 53 0a 0d 00 50 41 52 4d 7d 79 83 MyIDMS...PARM}y. 2ee0: 88 83 88 43 44 43 54 48 56 43 4f 00 74 43 44 56 ...CDCTHVCO.tCDV 2ef0: 4c 01 00 00 0a 15 00 50 41 52 4d 50 41 52 4d 70 L......PARMPARMp 2f00: 01 47 45 53 46 a4 53 55 43 43 a0 2a 93 47 45 53 .GESF.SUCC.*.GES 2f10: 46 0a 0a 70 00 50 41 52 4d a0 10 49 53 53 43 7d F..p.PARM..ISSC} 2f20: 50 41 52 4d 0a 03 50 41 52 4d 70 00 47 45 53 46 PARM..PARMp.GESF 2f30: a4 53 55 43 43 70 00 47 45 53 46 a4 43 52 49 54 .SUCCp.GESF.CRIT 2f40: 14 41 28 53 42 43 42 08 a0 20 93 47 45 53 46 00 .A(SBCB.. .GESF. 2f50: 70 00 50 41 52 4d 70 0b 7d f7 50 41 52 4d 70 00 p.PARMp.}.PARMp. 2f60: 47 45 53 46 a4 53 55 43 43 a0 18 93 47 45 53 46 GESF.SUCC...GESF 2f70: 01 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 2f80: 43 43 a0 19 93 47 45 53 46 0a 03 70 00 47 45 53 CC...GESF..p.GES 2f90: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 Fp.PARM.SUCC...G 2fa0: 45 53 46 0a 04 70 00 47 45 53 46 70 00 50 41 52 ESF..p.GESFp.PAR 2fb0: 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 05 70 M.SUCC...GESF..p 2fc0: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 2fd0: a0 37 93 47 45 53 46 0a 06 70 7b 50 41 52 4d 0a .7.GESF..p{PARM. 2fe0: 0f 00 49 54 56 46 70 7a 7b 50 41 52 4d 0a f0 00 ..ITVFpz{PARM... 2ff0: 0a 04 00 49 54 56 4d 70 00 47 45 53 46 70 00 50 ...ITVMp.GESFp.P 3000: 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a ARM.SUCC...GESF. 3010: 07 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 3020: 43 43 a0 19 93 47 45 53 46 0a 08 70 00 47 45 53 CC...GESF..p.GES 3030: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 24 93 47 Fp.PARM.SUCC.$.G 3040: 45 53 46 0a 09 7b 50 41 52 4d 0a ff 49 42 54 54 ESF..{PARM..IBTT 3050: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 3060: 43 a0 46 05 93 47 45 53 46 0a 0a 7b 50 41 52 4d C.F..GESF..{PARM 3070: 0a ff 49 50 53 43 a0 21 7b 7a 50 41 52 4d 0a 08 ..IPSC.!{zPARM.. 3080: 00 0a ff 00 7b 7a 50 41 52 4d 0a 08 00 0a ff 49 ....{zPARM.....I 3090: 50 41 54 76 49 50 41 54 7b 7a 50 41 52 4d 0a 14 PATvIPAT{zPARM.. 30a0: 00 0a 07 49 42 49 41 70 00 47 45 53 46 70 00 50 ...IBIAp.GESFp.P 30b0: 41 52 4d a4 53 55 43 43 a0 40 06 93 47 45 53 46 ARM.SUCC.@..GESF 30c0: 0a 0b 7b 7a 50 41 52 4d 01 00 01 49 46 31 45 a0 ..{zPARM...IF1E. 30d0: 21 7b 50 41 52 4d 0c 00 e0 01 00 00 7b 7a 50 41 !{PARM......{zPA 30e0: 52 4d 0a 0d 00 0a 0f 49 44 4d 53 70 00 49 44 4d RM.....IDMSp.IDM 30f0: 4d a1 16 7b 7a 50 41 52 4d 0a 11 00 0a 0f 49 44 M..{zPARM.....ID 3100: 4d 53 70 01 49 44 4d 4d 70 00 47 45 53 46 70 00 MSp.IDMMp.GESFp. 3110: 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 PARM.SUCC...GESF 3120: 0a 10 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 ..p.GESFp.PARM.S 3130: 55 43 43 a0 1f 93 47 45 53 46 0a 11 7d 50 41 52 UCC...GESF..}PAR 3140: 4d 0b 00 01 50 41 52 4d 70 00 47 45 53 46 a4 53 M...PARMp.GESF.S 3150: 55 43 43 a0 49 04 93 47 45 53 46 0a 12 a0 26 7b UCC.I..GESF...&{ 3160: 50 41 52 4d 01 00 a0 10 93 7a 50 41 52 4d 01 00 PARM.....zPARM.. 3170: 01 70 01 49 53 53 43 a1 0c 70 00 47 45 53 46 a4 .p.ISSC..p.GESF. 3180: 43 52 49 54 a1 07 70 00 49 53 53 43 70 00 47 45 CRIT..p.ISSCp.GE 3190: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 SFp.PARM.SUCC... 31a0: 47 45 53 46 0a 13 70 00 47 45 53 46 70 00 50 41 GESF..p.GESFp.PA 31b0: 52 4d a4 53 55 43 43 70 00 47 45 53 46 a4 53 55 RM.SUCCp.GESF.SU 31c0: 43 43 a0 11 93 47 45 46 43 0a 04 70 47 42 44 41 CC...GEFC..pGBDA 31d0: 47 58 46 43 a0 11 93 47 45 46 43 0a 06 70 53 42 GXFC...GEFC..pSB 31e0: 43 42 47 58 46 43 70 00 47 45 46 43 70 01 53 43 CBGXFCp.GEFCp.SC 31f0: 49 53 70 00 47 53 53 45 70 00 53 43 49 45 a4 00 ISp.GSSEp.SCIE.. 3200: 14 19 50 44 52 44 00 a0 0c 92 44 52 44 59 5b 22 ..PDRD....DRDY[" 3210: 41 53 4c 50 a4 92 44 52 44 59 14 1d 50 53 54 53 ASLP..DRDY..PSTS 3220: 00 a0 0e 94 43 53 54 53 0a 02 5b 22 41 53 4c 50 ....CSTS..["ASLP 3230: a4 93 43 53 54 53 0a 03 14 47 06 47 4e 4f 54 02 ..CSTS...G.GNOT. 3240: a0 07 50 44 52 44 a4 01 a0 07 50 53 54 53 a4 01 ..PDRD....PSTS.. 3250: 70 68 43 45 56 54 70 0a 03 43 53 54 53 a0 2c 90 phCEVTp..CSTS.,. 3260: 93 43 48 50 44 00 93 69 00 a0 18 91 94 4f 53 59 .CHPD..i.....OSY 3270: 53 0b d0 07 95 4f 53 59 53 0b d6 07 86 50 43 49 S....OSYS....PCI 3280: 30 69 a1 07 86 47 46 58 30 69 86 47 46 58 30 0a 0i...GFX0i.GFX0. 3290: 80 a0 0c 92 50 53 54 53 70 00 43 45 56 54 a4 00 ....PSTSp.CEVT.. 32a0: 14 13 47 48 44 53 01 70 68 54 49 44 58 a4 47 4e ..GHDS.phTIDX.GN 32b0: 4f 54 01 00 14 14 47 4c 49 44 01 70 68 43 4c 49 OT....GLID.phCLI 32c0: 44 a4 47 4e 4f 54 0a 02 00 14 15 47 44 43 4b 01 D.GNOT.....GDCK. 32d0: 70 68 43 44 43 4b a4 47 4e 4f 54 0a 04 0a 80 14 phCDCK.GNOT..... 32e0: 19 50 41 52 44 00 a0 0c 92 41 52 44 59 5b 22 41 .PARD....ARDY["A 32f0: 53 4c 50 a4 92 41 52 44 59 14 46 0c 41 49 4e 54 SLP..ARDY.F.AINT 3300: 02 a0 0e 92 7b 54 43 48 45 79 01 68 00 00 a4 01 ....{TCHEy.h.... 3310: a0 07 50 41 52 44 a4 01 a0 4c 05 93 68 0a 02 a0 ..PARD...L..h... 3320: 33 43 50 46 4d a0 0e 93 43 50 46 4d 01 70 0a 06 3CPFM...CPFM.p.. 3330: 50 46 49 54 a0 0f 93 43 50 46 4d 0a 06 70 0a 08 PFIT...CPFM..p.. 3340: 50 46 49 54 a0 0e 93 43 50 46 4d 0a 08 70 01 50 PFIT...CPFM..p.P 3350: 46 49 54 a1 0c 7f 50 46 49 54 0a 07 50 46 49 54 FIT...PFIT..PFIT 3360: 7d 50 46 49 54 0c 00 00 00 80 50 46 49 54 70 0a }PFIT.....PFITp. 3370: 04 41 53 4c 43 a1 42 04 a0 28 93 68 01 70 78 77 .ASLC.B..(.h.pxw 3380: 69 0a ff 00 0a 64 00 00 42 43 4c 50 7d 42 43 4c i....d..BCLP}BCL 3390: 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 41 53 4c P.....BCLPp..ASL 33a0: 43 a1 16 a0 10 93 68 00 70 69 41 4c 53 49 70 01 C.....h.piALSIp. 33b0: 41 53 4c 43 a1 03 a4 01 70 00 4c 42 50 43 a4 00 ASLC....p.LBPC.. 33c0: 10 41 36 5c 00 5b 80 49 4f 5f 54 01 0b 00 08 0a .A6\.[.IO_T..... 33d0: 10 5b 81 0e 49 4f 5f 54 01 00 40 04 54 52 50 30 .[..IO_T..@.TRP0 33e0: 08 5b 80 50 4d 49 4f 01 0b 00 10 0a 80 5b 81 28 .[.PMIO......[.( 33f0: 50 4d 49 4f 01 00 40 15 00 08 00 02 41 43 50 57 PMIO..@.....ACPW 3400: 01 00 45 0b 00 01 47 50 45 43 01 00 4e 10 00 09 ..E...GPEC..N... 3410: 53 43 49 53 01 00 06 5b 80 47 50 49 4f 01 0b 80 SCIS...[.GPIO... 3420: 11 0a 3c 5b 81 40 0c 47 50 49 4f 01 47 55 30 30 ..<[.@.GPIO.GU00 3430: 08 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 .GU01.GU02.GU03. 3440: 47 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 GIO0.GIO1.GIO2.G 3450: 49 4f 33 08 00 20 47 4c 30 30 08 47 4c 30 31 08 IO3.. GL00.GL01. 3460: 47 4c 30 32 08 00 03 47 50 32 37 01 47 50 32 38 GL02...GP27.GP28 3470: 01 00 03 00 40 04 47 42 30 30 08 47 42 30 31 08 ....@.GB00.GB01. 3480: 47 42 30 32 08 47 42 30 33 08 00 40 08 47 49 56 GB02.GB03..@.GIV 3490: 30 08 00 03 4c 50 4f 4c 01 00 04 47 49 56 32 08 0...LPOL...GIV2. 34a0: 47 49 56 33 08 47 55 30 34 08 47 55 30 35 08 47 GIV3.GU04.GU05.G 34b0: 55 30 36 08 47 55 30 37 08 47 49 4f 34 08 47 49 U06.GU07.GIO4.GI 34c0: 4f 35 08 47 49 4f 36 08 47 49 4f 37 08 00 05 47 O5.GIO6.GIO7...G 34d0: 50 33 37 01 00 02 47 4c 30 35 08 47 4c 30 36 08 P37...GL05.GL06. 34e0: 47 4c 30 37 08 5b 80 52 43 52 42 00 0c 00 c0 d1 GL07.[.RCRB..... 34f0: fe 0b 00 40 5b 81 48 05 52 43 52 42 13 00 80 00 ...@[.H.RCRB.... 3500: 08 00 80 00 10 00 80 02 02 48 50 41 53 02 00 05 .........HPAS... 3510: 48 50 41 45 01 00 48 09 00 01 50 41 54 44 01 53 HPAE..H...PATD.S 3520: 41 54 44 01 53 4d 42 44 01 48 44 41 44 01 00 0b ATD.SMBD.HDAD... 3530: 52 50 31 44 01 52 50 32 44 01 52 50 33 44 01 52 RP1D.RP2D.RP3D.R 3540: 50 34 44 01 52 50 35 44 01 52 50 36 44 01 08 5f P4D.RP5D.RP6D.._ 3550: 53 30 5f 12 05 03 00 00 00 08 5f 53 33 5f 12 07 S0_......._S3_.. 3560: 03 0a 05 0a 05 00 08 5f 53 34 5f 12 07 03 0a 06 ......._S4_..... 3570: 0a 06 00 08 5f 53 35 5f 12 07 03 0a 07 0a 07 00 ...._S5_........ 3580: 14 45 04 47 45 54 50 09 a0 0e 93 7b 68 0a 09 00 .E.GETP....{h... 3590: 00 a4 0c ff ff ff ff a0 0d 93 7b 68 0a 09 00 0a ..........{h.... 35a0: 08 a4 0b 84 03 7a 7b 68 0b 00 03 00 0a 08 60 7a .....z{h......`z 35b0: 7b 68 0b 00 30 00 0a 0c 61 a4 77 0a 1e 74 0a 09 {h..0...a.w..t.. 35c0: 72 60 61 00 00 00 14 30 47 44 4d 41 0d a0 23 68 r`a....0GDMA..#h 35d0: a0 07 90 69 6c a4 0a 14 a0 0e 90 6a 6c a4 77 74 ...il......jl.wt 35e0: 0a 04 6b 00 0a 0f 00 a4 77 74 0a 04 6b 00 0a 1e ..k.....wt..k... 35f0: 00 a4 0c ff ff ff ff 14 1f 47 45 54 54 09 a4 77 .........GETT..w 3600: 0a 1e 74 0a 09 72 7b 7a 68 0a 02 00 0a 03 00 7b ..t..r{zh......{ 3610: 68 0a 03 00 00 00 00 14 44 06 47 45 54 46 0b 08 h.......D.GETF.. 3620: 54 4d 50 46 00 a0 0c 68 7d 54 4d 50 46 01 54 4d TMPF...h}TMPF.TM 3630: 50 46 a0 11 7b 6a 0a 02 00 7d 54 4d 50 46 0a 02 PF..{j...}TMPF.. 3640: 54 4d 50 46 a0 0d 69 7d 54 4d 50 46 0a 04 54 4d TMPF..i}TMPF..TM 3650: 50 46 a0 11 7b 6a 0a 20 00 7d 54 4d 50 46 0a 08 PF..{j. .}TMPF.. 3660: 54 4d 50 46 a0 12 7b 6a 0b 00 40 00 7d 54 4d 50 TMPF..{j..@.}TMP 3670: 46 0a 10 54 4d 50 46 a4 54 4d 50 46 14 3d 53 45 F..TMPF.TMPF.=SE 3680: 54 50 0b a0 08 94 68 0a f0 a4 0a 08 a1 2d a0 27 TP....h......-.' 3690: 7b 69 0a 02 00 a0 10 90 92 94 68 0a 78 7b 6a 0a {i........h.x{j. 36a0: 02 00 a4 0b 01 23 a0 0f 90 92 94 68 0a b4 7b 6a .....#.....h..{j 36b0: 01 00 a4 0b 01 21 a4 0b 01 10 14 37 53 44 4d 41 .....!.....7SDMA 36c0: 09 a0 08 92 94 68 0a 14 a4 01 a0 09 92 94 68 0a .....h........h. 36d0: 1e a4 0a 02 a0 08 92 94 68 0a 2d a4 01 a0 09 92 ........h.-..... 36e0: 94 68 0a 3c a4 0a 02 a0 08 92 94 68 0a 5a a4 01 .h.<.......h.Z.. 36f0: a4 00 14 2f 53 45 54 54 0b a0 25 7b 69 0a 02 00 .../SETT..%{i... 3700: a0 0f 90 92 94 68 0a 78 7b 6a 0a 02 00 a4 0a 0b .....h.x{j...... 3710: a0 0e 90 92 94 68 0a b4 7b 6a 01 00 a4 0a 09 a4 .....h..{j...... 3720: 0a 04 5b 82 4b 04 48 44 45 46 08 5f 41 44 52 0c ..[.K.HDEF._ADR. 3730: 00 00 1b 00 5b 80 48 44 41 52 02 0a 4c 0a 10 5b ....[.HDAR..L..[ 3740: 81 22 48 44 41 52 02 44 43 4b 41 01 00 07 44 43 ."HDAR.DCKA...DC 3750: 4b 4d 01 00 06 44 43 4b 53 01 00 30 00 0f 50 4d KM...DCKS..0..PM 3760: 45 53 01 08 5f 50 52 57 12 06 02 0a 0d 0a 03 5b ES.._PRW.......[ 3770: 82 41 10 52 50 30 31 08 5f 41 44 52 0c 00 00 1c .A.RP01._ADR.... 3780: 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 45 04 .[.PXCS..@..[.E. 3790: 50 58 43 53 40 00 40 09 00 0d 4c 41 53 58 01 00 PXCS@.@...LASX.. 37a0: 32 41 42 50 58 01 00 02 50 44 43 58 01 00 02 50 2ABPX...PDCX...P 37b0: 44 53 58 01 00 01 4c 53 43 58 01 00 27 00 10 50 DSX...LSCX..'..P 37c0: 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 01 50 4d SPX..O<..HPSX.PM 37d0: 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 44 52 00 SX.[..PXSX._ADR. 37e0: 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 .A._PRT..3GPIC.. 37f0: 2c 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ,............... 3800: ff ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a ................ 3810: 12 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 .............E.. 3820: 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 .A.........^^.LP 3830: 43 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e CBLNKA........^^ 3840: 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff .LPCBLNKB....... 3850: 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 ..^^.LPCBLNKC... 3860: 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b ......^^.LPCBLNK 3870: 44 00 5b 82 41 10 52 50 30 32 08 5f 41 44 52 0c D.[.A.RP02._ADR. 3880: 01 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b ....[.PXCS..@..[ 3890: 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c 41 53 .E.PXCS@.@...LAS 38a0: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 38b0: 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 ..PDSX...LSCX..' 38c0: 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 ..PSPX..O<..HPSX 38d0: 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 .PMSX.[..PXSX._A 38e0: 44 52 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 DR..A._PRT..3GPI 38f0: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 11 12 C..,............ 3900: 09 04 0b ff ff 01 00 0a 12 12 0a 04 0b ff ff 0a ................ 3910: 02 00 0a 13 12 0a 04 0b ff ff 0a 03 00 0a 10 a1 ................ 3920: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3930: 2e 4c 50 43 42 4c 4e 4b 42 00 12 12 04 0b ff ff .LPCBLNKB....... 3940: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 3950: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 3960: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3970: 4c 4e 4b 41 00 5b 82 4d 11 52 50 30 33 08 5f 41 LNKA.[.M.RP03._A 3980: 44 52 0c 02 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3990: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 39a0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 39b0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 39c0: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 39d0: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 39e0: 08 5f 41 44 52 00 08 2e 50 58 53 58 5f 52 4d 56 ._ADR...PXSX_RMV 39f0: 01 08 2e 50 58 53 58 5f 50 52 57 12 06 02 0a 09 ...PXSX_PRW..... 3a00: 0a 03 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 ...A._PRT..3GPIC 3a10: a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 12 12 09 ..,............. 3a20: 04 0b ff ff 01 00 0a 13 12 0a 04 0b ff ff 0a 02 ................ 3a30: 00 0a 10 12 0a 04 0b ff ff 0a 03 00 0a 11 a1 45 ...............E 3a40: 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e ...A.........^^. 3a50: 4c 50 43 42 4c 4e 4b 43 00 12 12 04 0b ff ff 01 LPCBLNKC........ 3a60: 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0b ^^.LPCBLNKD..... 3a70: ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 ....^^.LPCBLNKA. 3a80: 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3a90: 4e 4b 42 00 5b 82 4f 11 52 50 30 34 08 5f 41 44 NKB.[.O.RP04._AD 3aa0: 52 0c 03 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a R.....[.PXCS..@. 3ab0: c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c .[.E.PXCS@.@...L 3ac0: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 3ad0: 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 X...PDSX...LSCX. 3ae0: 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 .'..PSPX..O<..HP 3af0: 53 58 01 50 4d 53 58 01 5b 82 29 50 58 53 58 08 SX.PMSX.[.)PXSX. 3b00: 5f 41 44 52 00 14 1d 5f 50 52 57 00 a0 0d 57 4b _ADR..._PRW...WK 3b10: 4c 4e a4 12 06 02 0a 09 0a 03 a1 08 a4 12 05 02 LN.............. 3b20: 0a 09 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 ....A._PRT..3GPI 3b30: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 C..,............ 3b40: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 3b50: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 a1 ................ 3b60: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3b70: 2e 4c 50 43 42 4c 4e 4b 44 00 12 12 04 0b ff ff .LPCBLNKD....... 3b80: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 .^^.LPCBLNKA.... 3b90: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 .....^^.LPCBLNKB 3ba0: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3bb0: 4c 4e 4b 43 00 5b 82 41 10 52 50 30 35 08 5f 41 LNKC.[.A.RP05._A 3bc0: 44 52 0c 04 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3bd0: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 3be0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 3bf0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 3c00: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 3c10: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 3c20: 08 5f 41 44 52 00 14 41 09 5f 50 52 54 00 a0 33 ._ADR..A._PRT..3 3c30: 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 GPIC..,......... 3c40: 0a 10 12 09 04 0b ff ff 01 00 0a 11 12 0a 04 0b ................ 3c50: ff ff 0a 02 00 0a 12 12 0a 04 0b ff ff 0a 03 00 ................ 3c60: 0a 13 a1 45 05 a4 12 41 05 04 12 12 04 0b ff ff ...E...A........ 3c70: 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 12 04 .^^.LPCBLNKA.... 3c80: 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3c90: 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3ca0: 4e 4b 43 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c NKC.........^^.L 3cb0: 50 43 42 4c 4e 4b 44 00 5b 82 41 10 52 50 30 36 PCBLNKD.[.A.RP06 3cc0: 08 5f 41 44 52 0c 05 00 1c 00 5b 80 50 58 43 53 ._ADR.....[.PXCS 3cd0: 02 0a 40 0a c0 5b 81 45 04 50 58 43 53 40 00 40 ..@..[.E.PXCS@.@ 3ce0: 09 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 ...LASX..2ABPX.. 3cf0: 02 50 44 43 58 01 00 02 50 44 53 58 01 00 01 4c .PDCX...PDSX...L 3d00: 53 43 58 01 00 27 00 10 50 53 50 58 01 00 4f 3c SCX..'..PSPX..O< 3d10: 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 ..HPSX.PMSX.[..P 3d20: 58 53 58 08 5f 41 44 52 00 14 41 09 5f 50 52 54 XSX._ADR..A._PRT 3d30: 00 a0 33 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ..3GPIC..,...... 3d40: ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a 12 12 ................ 3d50: 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ff ff ................ 3d60: 0a 03 00 0a 10 a1 45 05 a4 12 41 05 04 12 12 04 ......E...A..... 3d70: 0b ff ff 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3d80: 12 12 04 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 3d90: 4b 43 00 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 KC.........^^.LP 3da0: 43 42 4c 4e 4b 44 00 12 13 04 0b ff ff 0a 03 5e CBLNKD.........^ 3db0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 4d 06 55 ^.LPCBLNKA.[.M.U 3dc0: 53 42 31 08 5f 41 44 52 0c 00 00 1d 00 5b 80 55 SB1._ADR.....[.U 3dd0: 31 43 53 02 0a c4 0a 04 5b 81 0b 55 31 43 53 03 1CS.....[..U1CS. 3de0: 55 31 45 4e 02 08 5f 50 52 57 12 06 02 0a 03 0a U1EN.._PRW...... 3df0: 03 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 ..$_PSW...hp.ACP 3e00: 57 a0 0c 41 43 50 57 70 0a 03 55 31 45 4e a1 07 W..ACPWp..U1EN.. 3e10: 70 00 55 31 45 4e 14 09 5f 53 33 44 00 a4 0a 02 p.U1EN.._S3D.... 3e20: 14 09 5f 53 34 44 00 a4 0a 02 5b 82 4c 06 55 53 .._S4D....[.L.US 3e30: 42 32 08 5f 41 44 52 0c 01 00 1d 00 5b 80 55 32 B2._ADR.....[.U2 3e40: 43 53 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 CS.....[..U2CS.U 3e50: 32 45 4e 02 08 5f 50 52 57 12 06 02 0a 04 0a 03 2EN.._PRW....... 3e60: 14 23 5f 50 53 57 01 a0 14 68 70 01 41 43 50 57 .#_PSW...hp.ACPW 3e70: a0 0b 41 43 50 57 70 01 55 32 45 4e a1 07 70 00 ..ACPWp.U2EN..p. 3e80: 55 32 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 U2EN.._S3D...... 3e90: 5f 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 33 _S4D....[.M.USB3 3ea0: 08 5f 41 44 52 0c 02 00 1d 00 5b 80 55 32 43 53 ._ADR.....[.U2CS 3eb0: 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 33 45 .....[..U2CS.U3E 3ec0: 4e 02 08 5f 50 52 57 12 06 02 0a 0c 0a 03 14 24 N.._PRW........$ 3ed0: 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c _PSW...hp.ACPW.. 3ee0: 41 43 50 57 70 0a 03 55 33 45 4e a1 07 70 00 55 ACPWp..U3EN..p.U 3ef0: 33 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 3EN.._S3D......_ 3f00: 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 34 08 S4D....[.M.USB4. 3f10: 5f 41 44 52 0c 00 00 1a 00 5b 80 55 34 43 53 02 _ADR.....[.U4CS. 3f20: 0a c4 0a 04 5b 81 0b 55 34 43 53 03 55 34 45 4e ....[..U4CS.U4EN 3f30: 02 08 5f 50 52 57 12 06 02 0a 0e 0a 03 14 24 5f .._PRW........$_ 3f40: 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c 41 PSW...hp.ACPW..A 3f50: 43 50 57 70 0a 03 55 34 45 4e a1 07 70 00 55 34 CPWp..U4EN..p.U4 3f60: 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 EN.._S3D......_S 3f70: 34 44 00 a4 0a 02 5b 82 41 06 55 53 42 35 08 5f 4D....[.A.USB5._ 3f80: 41 44 52 0c 01 00 1a 00 5b 80 55 35 43 53 02 0a ADR.....[.U5CS.. 3f90: c4 0a 04 5b 81 0b 55 35 43 53 03 55 35 45 4e 02 ...[..U5CS.U5EN. 3fa0: 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 .$_PSW...hp.ACPW 3fb0: a0 0c 41 43 50 57 70 0a 03 55 35 45 4e a1 07 70 ..ACPWp..U5EN..p 3fc0: 00 55 35 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 .U5EN.._S3D..... 3fd0: 09 5f 53 34 44 00 a4 0a 02 5b 82 4b 0a 45 48 43 ._S4D....[.K.EHC 3fe0: 31 08 5f 41 44 52 0c 07 00 1d 00 5b 80 55 37 43 1._ADR.....[.U7C 3ff0: 53 02 0a 54 0a 04 5b 81 0d 55 37 43 53 03 00 0f S..T..[..U7CS... 4000: 50 4d 45 53 01 5b 82 4f 05 48 55 42 37 08 5f 41 PMES.[.O.HUB7._A 4010: 44 52 00 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 DR.[..PRT1._ADR. 4020: 5b 82 0c 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 [..PRT2._ADR..[. 4030: 0c 50 52 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 .PRT3._ADR..[..P 4040: 52 54 34 08 5f 41 44 52 0a 04 5b 82 0c 50 52 54 RT4._ADR..[..PRT 4050: 35 08 5f 41 44 52 0a 05 5b 82 0c 50 52 54 36 08 5._ADR..[..PRT6. 4060: 5f 41 44 52 0a 06 08 5f 50 52 57 12 06 02 0a 0d _ADR..._PRW..... 4070: 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 ...._S3D......_S 4080: 34 44 00 a4 0a 02 5b 82 4f 08 45 48 43 32 08 5f 4D....[.O.EHC2._ 4090: 41 44 52 0c 07 00 1a 00 5b 80 55 46 43 53 02 0a ADR.....[.UFCS.. 40a0: 54 0a 04 5b 81 0d 55 46 43 53 03 00 0f 50 4d 45 T..[..UFCS...PME 40b0: 53 01 5b 82 43 04 48 55 42 37 08 5f 41 44 52 00 S.[.C.HUB7._ADR. 40c0: 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 5b 82 0c [..PRT1._ADR.[.. 40d0: 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 0c 50 52 PRT2._ADR..[..PR 40e0: 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 52 54 34 T3._ADR..[..PRT4 40f0: 08 5f 41 44 52 0a 04 08 5f 50 52 57 12 06 02 0a ._ADR..._PRW.... 4100: 0d 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f ....._S3D......_ 4110: 53 34 44 00 a4 0a 02 5b 82 4a 06 50 43 49 42 08 S4D....[.J.PCIB. 4120: 5f 41 44 52 0c 00 00 1e 00 14 49 05 5f 50 52 54 _ADR......I._PRT 4130: 00 a0 21 47 50 49 43 a4 12 1a 02 12 0b 04 0c ff ..!GPIC......... 4140: ff 06 00 00 00 0a 16 12 0b 04 0c ff ff 06 00 01 ................ 4150: 00 0a 17 a1 2f a4 12 2c 02 12 14 04 0c ff ff 06 ..../..,........ 4160: 00 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 47 00 12 14 ..^^.LPCBLNKG... 4170: 04 0c ff ff 06 00 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 4180: 4b 48 00 5b 82 8d 2e 01 4c 50 43 42 08 5f 41 44 KH.[....LPCB._AD 4190: 52 0c 00 00 1f 00 5b 80 4c 50 43 30 02 0a 40 0a R.....[.LPC0..@. 41a0: c0 5b 81 4d 07 4c 50 43 30 00 00 40 10 50 41 52 .[.M.LPC0..@.PAR 41b0: 43 08 50 42 52 43 08 50 43 52 43 08 50 44 52 43 C.PBRC.PCRC.PDRC 41c0: 08 00 20 50 45 52 43 08 50 46 52 43 08 50 47 52 .. PERC.PFRC.PGR 41d0: 43 08 50 48 52 43 08 00 40 0a 43 4d 41 52 03 00 C.PHRC..@.CMAR.. 41e0: 01 43 4d 42 52 03 00 01 4c 50 54 52 02 00 06 43 .CMBR...LPTR...C 41f0: 4d 41 44 01 43 4d 42 44 01 4c 50 54 44 01 46 44 MAD.CMBD.LPTD.FD 4200: 44 44 01 00 2c 49 4f 52 32 10 00 02 4c 47 52 4d DD..,IOR2...LGRM 4210: 06 00 48 32 52 41 45 4e 01 00 0d 52 43 42 41 12 ..H2RAEN...RCBA. 4220: 5b 80 53 4d 49 30 01 0c 00 fe 00 00 0c 02 00 00 [.SMI0.......... 4230: 00 5b 81 0b 53 4d 49 30 00 53 4d 49 43 08 5b 80 .[..SMI0.SMIC.[. 4240: 53 4d 49 31 00 0c bd 2e 6e bf 0c 90 00 00 00 5b SMI1....n......[ 4250: 81 16 53 4d 49 31 00 42 43 4d 44 08 44 49 44 5f ..SMI1.BCMD.DID_ 4260: 20 49 4e 46 4f 40 40 5b 81 15 53 4d 49 31 00 01 INFO@@[..SMI1.. 4270: 01 00 00 28 49 4e 46 5f 08 49 4e 46 31 20 5b 01 ...(INF_.INF1 [. 4280: 50 53 4d 58 00 14 27 50 48 53 53 01 5b 23 50 53 PSMX..'PHSS.[#PS 4290: 4d 58 ff ff 70 0a 80 42 43 4d 44 70 68 44 49 44 MX..p..BCMDphDID 42a0: 5f 70 00 53 4d 49 43 5b 27 50 53 4d 58 5b 82 41 _p.SMIC['PSMX[.A 42b0: 0a 4c 4e 4b 41 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKA._HID.A.... 42c0: 5f 55 49 44 01 14 0d 5f 44 49 53 08 70 0a 80 50 _UID..._DIS.p..P 42d0: 41 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ARC._PRS....#... 42e0: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 41 11 09 y..8_CRS..RTLA.. 42f0: 0a 06 23 00 00 18 79 00 8b 52 54 4c 41 01 49 52 ..#...y..RTLA.IR 4300: 51 30 70 00 49 52 51 30 79 01 7b 50 41 52 43 0a Q0p.IRQ0y.{PARC. 4310: 0f 00 49 52 51 30 a4 52 54 4c 41 14 1b 5f 53 52 ..IRQ0.RTLA.._SR 4320: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 4330: 60 70 60 50 41 52 43 14 18 5f 53 54 41 08 a0 0c `p`PARC.._STA... 4340: 7b 50 41 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PARC........... 4350: 5b 82 42 0a 4c 4e 4b 42 08 5f 48 49 44 0c 41 d0 [.B.LNKB._HID.A. 4360: 0c 0f 08 5f 55 49 44 0a 02 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4370: 70 0a 80 50 42 52 43 08 5f 50 52 53 11 09 0a 06 p..PBRC._PRS.... 4380: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4390: 4c 42 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LB....#...y..RTL 43a0: 42 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 B.IRQ0p.IRQ0y.{P 43b0: 42 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 42 14 BRC...IRQ0.RTLB. 43c0: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 43d0: 51 30 60 76 60 70 60 50 42 52 43 14 18 5f 53 54 Q0`v`p`PBRC.._ST 43e0: 41 08 a0 0c 7b 50 42 52 43 0a 80 00 a4 0a 09 a1 A...{PBRC....... 43f0: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 43 08 5f 48 49 ....[.B.LNKC._HI 4400: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 03 14 0d 5f D.A...._UID...._ 4410: 44 49 53 08 70 0a 80 50 43 52 43 08 5f 50 52 53 DIS.p..PCRC._PRS 4420: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 4430: 08 08 52 54 4c 43 11 09 0a 06 23 00 00 18 79 00 ..RTLC....#...y. 4440: 8b 52 54 4c 43 01 49 52 51 30 70 00 49 52 51 30 .RTLC.IRQ0p.IRQ0 4450: 79 01 7b 50 43 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PCRC...IRQ0.R 4460: 54 4c 43 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLC.._SRS..h.IRQ 4470: 30 82 49 52 51 30 60 76 60 70 60 50 43 52 43 14 0.IRQ0`v`p`PCRC. 4480: 18 5f 53 54 41 08 a0 0c 7b 50 43 52 43 0a 80 00 ._STA...{PCRC... 4490: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 44 ........[.B.LNKD 44a0: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 44b0: 04 14 0d 5f 44 49 53 08 70 0a 80 50 44 52 43 08 ..._DIS.p..PDRC. 44c0: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 44d0: 5f 43 52 53 08 08 52 54 4c 44 11 09 0a 06 23 00 _CRS..RTLD....#. 44e0: 00 18 79 00 8b 52 54 4c 44 01 49 52 51 30 70 00 ..y..RTLD.IRQ0p. 44f0: 49 52 51 30 79 01 7b 50 44 52 43 0a 0f 00 49 52 IRQ0y.{PDRC...IR 4500: 51 30 a4 52 54 4c 44 14 1b 5f 53 52 53 09 8b 68 Q0.RTLD.._SRS..h 4510: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 4520: 44 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 44 52 DRC.._STA...{PDR 4530: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a C...........[.B. 4540: 4c 4e 4b 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f LNKE._HID.A...._ 4550: 55 49 44 0a 05 14 0d 5f 44 49 53 08 70 0a 80 50 UID...._DIS.p..P 4560: 45 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ERC._PRS....#... 4570: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 45 11 09 y..8_CRS..RTLE.. 4580: 0a 06 23 00 00 18 79 00 8b 52 54 4c 45 01 49 52 ..#...y..RTLE.IR 4590: 51 30 70 00 49 52 51 30 79 01 7b 50 45 52 43 0a Q0p.IRQ0y.{PERC. 45a0: 0f 00 49 52 51 30 a4 52 54 4c 45 14 1b 5f 53 52 ..IRQ0.RTLE.._SR 45b0: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 45c0: 60 70 60 50 45 52 43 14 18 5f 53 54 41 08 a0 0c `p`PERC.._STA... 45d0: 7b 50 45 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PERC........... 45e0: 5b 82 42 0a 4c 4e 4b 46 08 5f 48 49 44 0c 41 d0 [.B.LNKF._HID.A. 45f0: 0c 0f 08 5f 55 49 44 0a 06 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4600: 70 0a 80 50 46 52 43 08 5f 50 52 53 11 09 0a 06 p..PFRC._PRS.... 4610: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4620: 4c 46 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LF....#...y..RTL 4630: 46 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 F.IRQ0p.IRQ0y.{P 4640: 46 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 46 14 FRC...IRQ0.RTLF. 4650: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 4660: 51 30 60 76 60 70 60 50 46 52 43 14 18 5f 53 54 Q0`v`p`PFRC.._ST 4670: 41 08 a0 0c 7b 50 46 52 43 0a 80 00 a4 0a 09 a1 A...{PFRC....... 4680: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 47 08 5f 48 49 ....[.B.LNKG._HI 4690: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 0d 5f D.A...._UID...._ 46a0: 44 49 53 08 70 0a 80 50 47 52 43 08 5f 50 52 53 DIS.p..PGRC._PRS 46b0: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 46c0: 08 08 52 54 4c 47 11 09 0a 06 23 00 00 18 79 00 ..RTLG....#...y. 46d0: 8b 52 54 4c 47 01 49 52 51 30 70 00 49 52 51 30 .RTLG.IRQ0p.IRQ0 46e0: 79 01 7b 50 47 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PGRC...IRQ0.R 46f0: 54 4c 47 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLG.._SRS..h.IRQ 4700: 30 82 49 52 51 30 60 76 60 70 60 50 47 52 43 14 0.IRQ0`v`p`PGRC. 4710: 18 5f 53 54 41 08 a0 0c 7b 50 47 52 43 0a 80 00 ._STA...{PGRC... 4720: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 48 ........[.B.LNKH 4730: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 4740: 08 14 0d 5f 44 49 53 08 70 0a 80 50 48 52 43 08 ..._DIS.p..PHRC. 4750: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 4760: 5f 43 52 53 08 08 52 54 4c 48 11 09 0a 06 23 00 _CRS..RTLH....#. 4770: 00 18 79 00 8b 52 54 4c 48 01 49 52 51 30 70 00 ..y..RTLH.IRQ0p. 4780: 49 52 51 30 79 01 7b 50 48 52 43 0a 0f 00 49 52 IRQ0y.{PHRC...IR 4790: 51 30 a4 52 54 4c 48 14 1b 5f 53 52 53 09 8b 68 Q0.RTLH.._SRS..h 47a0: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 47b0: 48 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 48 52 HRC.._STA...{PHR 47c0: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 3d 44 C...........[.=D 47d0: 4d 41 43 08 5f 48 49 44 0c 41 d0 02 00 08 5f 43 MAC._HID.A...._C 47e0: 52 53 11 28 0a 25 47 01 00 00 00 00 01 20 47 01 RS.(.%G...... G. 47f0: 81 00 81 00 01 11 47 01 93 00 93 00 01 0d 47 01 ......G.......G. 4800: c0 00 c0 00 01 20 2a 10 01 79 00 5b 82 26 46 57 ..... *..y.[.&FW 4810: 48 44 08 5f 48 49 44 0c 25 d4 08 00 08 5f 43 52 HD._HID.%...._CR 4820: 53 11 11 0a 0e 86 09 00 00 00 00 00 ff 00 00 00 S............... 4830: 01 79 00 5b 82 40 0b 48 50 45 54 08 5f 48 49 44 .y.[.@.HPET._HID 4840: 0c 41 d0 01 03 08 5f 43 49 44 0c 41 d0 0c 01 08 .A...._CID.A.... 4850: 42 55 46 30 11 11 0a 0e 86 09 00 00 00 00 d0 fe BUF0............ 4860: 00 04 00 00 79 00 14 27 5f 53 54 41 00 a0 13 92 ....y..'_STA.... 4870: 95 4f 53 59 53 0b d1 07 a0 08 48 50 41 45 a4 0a .OSYS.....HPAE.. 4880: 0f a1 0a a0 08 48 50 41 45 a4 0a 0b a4 00 14 46 .....HPAE......F 4890: 05 5f 43 52 53 08 a0 49 04 48 50 41 45 8a 42 55 ._CRS..I.HPAE.BU 48a0: 46 30 0a 04 48 50 54 30 a0 11 93 48 50 41 53 01 F0..HPT0...HPAS. 48b0: 70 0c 00 10 d0 fe 48 50 54 30 a0 12 93 48 50 41 p.....HPT0...HPA 48c0: 53 0a 02 70 0c 00 20 d0 fe 48 50 54 30 a0 12 93 S..p.. ..HPT0... 48d0: 48 50 41 53 0a 03 70 0c 00 30 d0 fe 48 50 54 30 HPAS..p..0..HPT0 48e0: a4 42 55 46 30 5b 82 45 0a 49 50 49 43 08 5f 48 .BUF0[.E.IPIC._H 48f0: 49 44 0b 41 d0 08 5f 43 52 53 11 41 09 0a 8d 47 ID.A.._CRS.A...G 4900: 01 20 00 20 00 01 02 47 01 24 00 24 00 01 02 47 . . ...G.$.$...G 4910: 01 28 00 28 00 01 02 47 01 2c 00 2c 00 01 02 47 .(.(...G.,.,...G 4920: 01 30 00 30 00 01 02 47 01 34 00 34 00 01 02 47 .0.0...G.4.4...G 4930: 01 38 00 38 00 01 02 47 01 3c 00 3c 00 01 02 47 .8.8...G.<.<...G 4940: 01 a0 00 a0 00 01 02 47 01 a4 00 a4 00 01 02 47 .......G.......G 4950: 01 a8 00 a8 00 01 02 47 01 ac 00 ac 00 01 02 47 .......G.......G 4960: 01 b0 00 b0 00 01 02 47 01 b4 00 b4 00 01 02 47 .......G.......G 4970: 01 b8 00 b8 00 01 02 47 01 bc 00 bc 00 01 02 47 .......G.......G 4980: 01 d0 04 d0 04 01 02 22 04 00 79 00 5b 82 25 4d ......."..y.[.%M 4990: 41 54 48 08 5f 48 49 44 0c 41 d0 0c 04 08 5f 43 ATH._HID.A...._C 49a0: 52 53 11 10 0a 0d 47 01 f0 00 f0 00 01 01 22 00 RS....G.......". 49b0: 20 79 00 5b 82 4b 09 4c 44 52 43 08 5f 48 49 44 y.[.K.LDRC._HID 49c0: 0c 41 d0 0c 02 08 5f 55 49 44 0a 02 08 5f 43 52 .A...._UID..._CR 49d0: 53 11 4e 07 0a 7a 47 01 2e 00 2e 00 01 02 47 01 S.N..zG.......G. 49e0: 4e 00 4e 00 01 02 47 01 61 00 61 00 01 01 47 01 N.N...G.a.a...G. 49f0: 63 00 63 00 01 01 47 01 65 00 65 00 01 01 47 01 c.c...G.e.e...G. 4a00: 67 00 67 00 01 01 47 01 80 00 80 00 01 01 47 01 g.g...G.......G. 4a10: 92 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 ......G.......G. 4a20: 80 06 80 06 01 20 47 01 00 08 00 08 01 10 47 01 ..... G.......G. 4a30: 00 10 00 10 01 80 47 01 80 11 80 11 01 40 47 01 ......G......@G. 4a40: 00 fe 00 fe 01 01 47 01 00 ff 00 ff 01 80 79 00 ......G.......y. 4a50: 5b 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b [.%RTC_._HID.A.. 4a60: 00 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 .._CRS....G.p.p. 4a70: 01 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f .."..y.[.-TIMR._ 4a80: 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a HID.A...._CRS... 4a90: 15 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 .G.@.@...G.P.P.. 4aa0: 04 22 01 00 79 00 5b 82 32 41 43 41 44 08 5f 48 ."..y.[.2ACAD._H 4ab0: 49 44 0d 41 43 50 49 30 30 30 33 00 08 5f 50 43 ID.ACPI0003.._PC 4ac0: 4c 12 06 01 5f 53 42 5f 14 11 5f 50 53 52 00 70 L..._SB_.._PSR.p 4ad0: 01 41 43 50 57 a4 41 43 50 57 14 1a 45 43 4f 4b .ACPW.ACPW..ECOK 4ae0: 00 a0 0f 93 5e 2e 45 43 30 5f 5a 30 30 39 01 a4 ....^.EC0_Z009.. 4af0: 01 a1 03 a4 00 5b 82 4e 6f 45 43 30 5f 08 5f 48 .....[.NoEC0_._H 4b00: 49 44 0c 41 d0 0c 09 08 5f 47 50 45 0a 1c 08 5a ID.A...._GPE...Z 4b10: 30 30 39 00 08 5f 43 52 53 11 15 0a 12 47 01 62 009.._CRS....G.b 4b20: 00 62 00 01 01 47 01 66 00 66 00 01 01 79 00 14 .b...G.f.f...y.. 4b30: 3b 5f 52 45 47 02 a0 34 93 68 0a 03 70 69 5a 30 ;_REG..4.h..piZ0 4b40: 30 39 a0 28 5b 12 5f 4f 53 49 60 70 00 42 54 44 09.([._OSI`p.BTD 4b50: 53 a0 19 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 S.._OSI.Windows 4b60: 32 30 30 36 00 70 01 42 54 44 53 5b 80 45 52 41 2006.p.BTDS[.ERA 4b70: 4d 03 00 0a ff 5b 81 4e 2e 45 52 41 4d 11 00 40 M....[.N.ERAM..@ 4b80: 30 53 4d 50 52 08 53 4d 53 54 08 53 4d 41 44 08 0SMPR.SMST.SMAD. 4b90: 53 4d 43 4d 08 53 4d 44 30 40 10 42 43 4e 54 08 SMCM.SMD0@.BCNT. 4ba0: 53 4d 41 41 18 00 40 04 43 48 47 4d 10 43 48 47 SMAA..@.CHGM.CHG 4bb0: 53 10 45 4e 49 44 08 45 4e 49 42 08 45 4e 44 44 S.ENID.ENIB.ENDD 4bc0: 08 43 48 47 56 08 43 48 47 41 10 42 41 4c 30 01 .CHGV.CHGA.BAL0. 4bd0: 42 41 4c 31 01 42 41 4c 32 01 42 41 4c 33 01 42 BAL1.BAL2.BAL3.B 4be0: 42 43 30 01 42 42 43 31 01 42 42 43 32 01 42 42 BC0.BBC1.BBC2.BB 4bf0: 43 33 01 00 08 50 48 44 44 01 49 46 44 44 01 49 C3...PHDD.IFDD.I 4c00: 4f 44 44 01 53 48 44 44 01 53 31 32 30 01 45 46 ODD.SHDD.S120.EF 4c10: 44 44 01 43 52 54 44 01 53 50 57 52 01 53 42 54 DD.CRTD.SPWR.SBT 4c20: 4e 01 56 49 44 4f 01 56 4f 4c 44 01 56 4f 4c 55 N.VIDO.VOLD.VOLU 4c30: 01 4d 55 54 45 01 43 4f 4e 54 01 42 52 47 54 01 .MUTE.CONT.BRGT. 4c40: 48 42 54 4e 01 53 34 53 54 01 53 4b 45 59 01 42 HBTN.S4ST.SKEY.B 4c50: 4b 45 59 01 54 4f 55 50 01 46 4e 42 4e 01 4c 49 KEY.TOUP.FNBN.LI 4c60: 44 46 01 44 49 47 4d 01 55 57 41 4b 01 00 08 44 DF.DIGM.UWAK...D 4c70: 4b 53 50 01 44 4b 49 4e 01 44 4b 49 44 01 44 4b KSP.DKIN.DKID.DK 4c80: 4f 4b 01 00 04 44 4b 50 57 01 00 07 42 54 4e 53 OK...DKPW...BTNS 4c90: 08 53 31 4c 44 01 53 33 4c 44 01 56 47 41 51 01 .S1LD.S3LD.VGAQ. 4ca0: 50 43 4d 51 01 50 43 4d 52 01 41 44 50 54 01 53 PCMQ.PCMR.ADPT.S 4cb0: 4c 4c 53 01 53 59 53 37 01 50 57 41 4b 01 4d 57 LLS.SYS7.PWAK.MW 4cc0: 41 4b 01 4c 57 41 4b 01 00 05 00 28 54 43 4e 4c AK.LWAK....(TCNL 4cd0: 08 54 4d 50 49 08 54 4d 53 44 08 46 41 53 4e 04 .TMPI.TMSD.FASN. 4ce0: 46 41 53 55 04 50 43 56 4c 04 00 02 53 57 54 4f FASU.PCVL...SWTO 4cf0: 01 48 57 54 4f 01 4d 4f 44 45 01 46 41 4e 53 02 .HWTO.MODE.FANS. 4d00: 49 4e 49 54 01 46 41 4e 31 01 46 41 4e 32 01 46 INIT.FAN1.FAN2.F 4d10: 41 4e 54 01 53 4b 4e 4d 01 43 54 4d 50 08 4c 49 ANT.SKNM.CTMP.LI 4d20: 44 45 01 50 4d 45 45 01 50 57 42 45 01 52 4e 47 DE.PMEE.PWBE.RNG 4d30: 45 01 42 54 57 45 01 44 43 4b 45 01 00 02 53 4b E.BTWE.DCKE...SK 4d40: 54 58 08 53 4b 54 42 08 53 4b 54 43 08 53 4b 54 TX.SKTB.SKTC.SKT 4d50: 41 08 00 08 48 41 50 4c 02 48 41 50 52 01 00 05 A...HAPL.HAPR... 4d60: 42 54 44 54 01 42 54 50 57 01 42 54 44 53 01 42 BTDT.BTPW.BTDS.B 4d70: 54 50 53 01 42 54 53 57 01 42 54 57 4b 01 42 54 TPS.BTSW.BTWK.BT 4d80: 4c 44 01 00 01 42 52 54 53 08 43 4e 54 53 08 57 LD...BRTS.CNTS.W 4d90: 4c 41 54 01 42 54 41 54 01 57 4c 45 58 01 42 54 LAT.BTAT.WLEX.BT 4da0: 45 58 01 4b 4c 53 57 01 57 4c 4f 4b 01 00 02 50 EX.KLSW.WLOK...P 4db0: 54 49 44 08 43 50 55 54 08 45 50 4b 54 08 47 48 TID.CPUT.EPKT.GH 4dc0: 49 44 08 00 04 42 4d 46 30 03 42 54 59 30 01 42 ID...BMF0.BTY0.B 4dd0: 53 54 30 08 42 52 43 30 10 42 53 4e 30 10 42 50 ST0.BRC0.BSN0.BP 4de0: 56 30 10 42 44 56 30 10 42 44 43 30 10 42 46 43 V0.BDV0.BDC0.BFC 4df0: 30 10 47 41 55 30 08 43 59 43 30 08 42 50 43 30 0.GAU0.CYC0.BPC0 4e00: 10 42 41 43 30 10 42 41 54 30 08 42 54 57 30 10 .BAC0.BAT0.BTW0. 4e10: 42 44 4e 30 08 00 40 04 00 04 42 4d 46 31 03 42 BDN0..@...BMF1.B 4e20: 54 59 31 01 42 53 54 31 08 42 52 43 31 10 42 53 TY1.BST1.BRC1.BS 4e30: 4e 31 10 42 50 56 31 10 42 44 56 31 10 42 44 43 N1.BPV1.BDV1.BDC 4e40: 31 10 42 46 43 31 10 47 41 55 31 08 43 59 43 31 1.BFC1.GAU1.CYC1 4e50: 08 42 50 43 31 10 42 41 43 31 10 42 41 54 31 08 .BPC1.BAC1.BAT1. 4e60: 42 54 57 31 10 14 37 5f 51 31 31 00 70 0a 87 50 BTW1..7_Q11.p..P 4e70: 38 30 48 a0 13 49 47 44 53 5e 5e 5e 2e 47 46 58 80H..IGDS^^^.GFX 4e80: 30 42 52 54 4e 0a 87 a1 15 86 5e 5e 5e 2f 03 50 0BRTN.....^^^/.P 4e90: 45 47 50 56 47 41 5f 4c 43 44 5f 0a 87 14 37 5f EGPVGA_LCD_...7_ 4ea0: 51 31 32 00 70 0a 86 50 38 30 48 a0 13 49 47 44 Q12.p..P80H..IGD 4eb0: 53 5e 5e 5e 2e 47 46 58 30 42 52 54 4e 0a 86 a1 S^^^.GFX0BRTN... 4ec0: 15 86 5e 5e 5e 2f 03 50 45 47 50 56 47 41 5f 4c ..^^^/.PEGPVGA_L 4ed0: 43 44 5f 0a 86 14 40 05 5f 51 31 43 00 70 0d 3d CD_...@._Q1C.p.= 4ee0: 3d 3d 3d 3d 51 55 45 52 59 5f 31 43 3d 3d 3d 3d ====QUERY_1C==== 4ef0: 3d 00 5b 31 a0 31 56 49 44 4f a0 12 49 47 44 53 =.[1.1VIDO..IGDS 4f00: 5e 5e 5e 2e 47 46 58 30 47 48 44 53 00 a1 12 5e ^^^.GFX0GHDS...^ 4f10: 5e 5e 2f 03 50 45 47 50 56 47 41 5f 44 53 53 57 ^^/.PEGPVGA_DSSW 4f20: 70 00 56 49 44 4f 14 21 5f 51 31 44 00 70 0d 3d p.VIDO.!_Q1D.p.= 4f30: 3d 3d 3d 3d 51 55 45 52 59 5f 31 44 3d 3d 3d 3d ====QUERY_1D==== 4f40: 3d 00 5b 31 50 43 4c 4b 14 21 5f 51 31 45 00 70 =.[1PCLK.!_Q1E.p 4f50: 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 31 45 3d 3d .=====QUERY_1E== 4f60: 3d 3d 3d 00 5b 31 50 43 4c 4b 14 39 5f 51 32 35 ===.[1PCLK.9_Q25 4f70: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 35 .p.=====QUERY_25 4f80: 3d 3d 3d 3d 3d 00 5b 31 5b 22 0b e8 03 86 5e 5e =====.[1["....^^ 4f90: 42 41 54 31 0a 81 5b 22 0b e8 03 86 5e 5e 42 41 BAT1..["....^^BA 4fa0: 54 31 0a 80 14 2f 5f 51 33 34 00 70 0d 3d 3d 3d T1.../_Q34.p.=== 4fb0: 3d 3d 51 55 45 52 59 5f 33 34 3d 3d 3d 3d 3d 00 ==QUERY_34=====. 4fc0: 5b 31 a0 11 42 4b 45 59 50 48 53 53 0a 71 70 00 [1..BKEYPHSS.qp. 4fd0: 42 4b 45 59 14 32 5f 51 33 37 00 70 0d 3d 3d 3d BKEY.2_Q37.p.=== 4fe0: 3d 3d 51 55 45 52 59 5f 33 37 3d 3d 3d 3d 3d 00 ==QUERY_37=====. 4ff0: 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 03 86 5e [1.ACAD..["....^ 5000: 5e 42 41 54 31 0a 80 14 32 5f 51 33 38 00 70 0d ^BAT1...2_Q38.p. 5010: 3d 3d 3d 3d 3d 51 55 45 52 59 5f 33 38 3d 3d 3d =====QUERY_38=== 5020: 3d 3d 00 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 ==.[1.ACAD..[".. 5030: 03 86 5e 5e 42 41 54 31 0a 80 14 29 5f 51 32 44 ..^^BAT1...)_Q2D 5040: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 44 .p.=====QUERY_2D 5050: 3d 3d 3d 3d 3d 00 5b 31 70 00 44 54 53 4d 54 52 =====.[1p.DTSMTR 5060: 41 50 0a 46 14 29 5f 51 32 45 00 70 0d 3d 3d 3d AP.F.)_Q2E.p.=== 5070: 3d 3d 51 55 45 52 59 5f 32 45 3d 3d 3d 3d 3d 00 ==QUERY_2E=====. 5080: 5b 31 70 01 44 54 53 4d 54 52 41 50 0a 46 5b 80 [1p.DTSMTRAP.F[. 5090: 43 43 4c 4b 01 0b 10 10 0a 04 5b 81 20 43 43 4c CCLK......[. CCL 50a0: 4b 03 00 01 44 55 54 59 03 54 48 45 4e 01 00 03 K...DUTY.THEN... 50b0: 46 54 54 5f 01 00 08 54 53 54 53 01 5b 80 45 43 FTT_...TSTS.[.EC 50c0: 52 4d 03 00 0a ff 5b 81 44 04 45 43 52 4d 11 00 RM....[.D.ECRM.. 50d0: 40 4a 45 52 49 42 10 45 52 42 44 08 00 48 0a 53 @JERIB.ERBD..H.S 50e0: 44 54 4d 08 46 53 53 4e 04 46 41 4e 55 04 50 54 DTM.FSSN.FANU.PT 50f0: 56 4c 03 00 04 54 54 48 52 01 00 48 06 50 4a 49 VL...TTHR..H.PJI 5100: 44 08 00 08 00 48 1d 52 46 52 44 10 5b 01 46 41 D....H.RFRD.[.FA 5110: 4d 58 00 14 22 46 41 4e 47 01 5b 23 46 41 4d 58 MX.."FANG.[#FAMX 5120: ff ff 70 68 45 52 49 42 70 45 52 42 44 60 5b 27 ..phERIBpERBD`[' 5130: 46 41 4d 58 a4 60 14 22 46 41 4e 57 02 5b 23 46 FAMX.`."FANW.[#F 5140: 41 4d 58 ff ff 70 68 45 52 49 42 70 69 45 52 42 AMX..phERIBpiERB 5150: 44 5b 27 46 41 4d 58 a4 69 14 09 54 55 56 52 01 D['FAMX.i..TUVR. 5160: a4 0a 03 14 2e 54 48 52 4f 01 a0 09 93 68 00 a4 .....THRO....h.. 5170: 54 48 45 4e a1 1d a0 09 93 68 01 a4 44 55 54 59 THEN.....h..DUTY 5180: a1 11 a0 0a 93 68 0a 02 a4 54 54 48 52 a1 04 a4 .....h...TTHR... 5190: 0a ff 14 2a 43 4c 43 4b 01 a0 10 93 68 00 70 00 ...*CLCK....h.p. 51a0: 54 48 45 4e 70 00 46 54 54 5f a1 0d 70 68 44 55 THENp.FTT_..phDU 51b0: 54 59 70 01 54 48 45 4e a4 54 48 45 4e 14 37 50 TYp.THEN.THEN.7P 51c0: 43 4c 4b 00 70 50 54 56 4c 60 a0 10 93 60 00 70 CLK.pPTVL`...`.p 51d0: 00 54 48 45 4e 70 00 46 54 54 5f a1 19 76 60 70 .THENp.FTT_..v`p 51e0: 80 60 00 61 7b 61 0a 07 61 70 61 44 55 54 59 70 .`.a{a..apaDUTYp 51f0: 01 54 48 45 4e 5b 82 4b 22 42 41 54 31 08 5f 48 .THEN[.K"BAT1._H 5200: 49 44 0c 41 d0 0c 0a 08 5f 55 49 44 01 08 5f 50 ID.A...._UID.._P 5210: 43 4c 12 06 01 5f 53 42 5f 14 39 5f 53 54 41 00 CL..._SB_.9_STA. 5220: a0 29 90 45 43 4f 4b 93 45 43 44 59 00 a0 13 5e .).ECOK.ECDY...^ 5230: 5e 2e 45 43 30 5f 42 41 4c 30 5b 22 0a 14 a4 0a ^.EC0_BAL0[".... 5240: 1f a1 08 5b 22 0a 14 a4 0a 0f a1 08 5b 22 0a 14 ...[".......[".. 5250: a4 0a 1f 14 48 10 5f 42 49 46 00 08 53 54 41 54 ....H._BIF..STAT 5260: 12 3a 0d 01 0b a0 0f 0b a0 0f 01 0b 5c 2b 0b a4 .:..........\+.. 5270: 01 0a 9c 0b 08 01 0b c4 0e 0d 50 41 33 34 36 35 ..........PA3465 5280: 55 20 00 0d 33 36 35 38 51 00 0d 4c 69 2d 49 6f U ..3658Q..Li-Io 5290: 6e 00 0d 43 4f 4d 50 41 4c 20 00 a0 4b 07 90 45 n..COMPAL ..K..E 52a0: 43 4f 4b 93 45 43 44 59 00 70 5e 5e 2e 45 43 30 COK.ECDY.p^^.EC0 52b0: 5f 42 44 4e 30 60 a0 23 93 60 0a 08 70 0a b4 88 _BDN0`.#.`..p... 52c0: 53 54 41 54 0a 06 00 70 0d 50 41 33 34 35 37 55 STAT...p.PA3457U 52d0: 20 00 88 53 54 41 54 0a 09 00 a0 24 93 60 0a 20 ..STAT....$.`. 52e0: 70 0b 02 01 88 53 54 41 54 0a 06 00 70 0d 50 41 p....STAT...p.PA 52f0: 33 34 35 37 55 20 00 88 53 54 41 54 0a 09 00 5b 3457U ..STAT...[ 5300: 22 0a 14 70 5e 5e 2e 45 43 30 5f 42 44 43 30 42 "..p^^.EC0_BDC0B 5310: 46 43 31 5b 22 0a 14 a1 12 70 0d 4c 69 2d 49 6f FC1["....p.Li-Io 5320: 6e 00 88 53 54 41 54 0a 0b 00 a0 2c 42 46 43 31 n..STAT....,BFC1 5330: 78 42 46 43 31 0a 64 60 61 77 61 0a 64 61 70 61 xBFC1.d`awa.dapa 5340: 42 46 43 31 70 61 88 53 54 41 54 01 00 70 61 88 BFC1pa.STAT..pa. 5350: 53 54 41 54 0a 02 00 a4 53 54 41 54 14 45 0c 5f STAT....STAT.E._ 5360: 42 53 54 00 08 50 42 53 54 12 10 04 00 0c ff ff BST..PBST....... 5370: ff ff 0c ff ff ff ff 0b 5c 2b 70 0b 5c 2b 63 a0 ........\+p.\+c. 5380: 38 90 45 43 4f 4b 93 45 43 44 59 00 5b 22 0a 14 8.ECOK.ECDY.[".. 5390: 70 5e 5e 2e 45 43 30 5f 42 53 54 30 42 53 54 31 p^^.EC0_BST0BST1 53a0: 5b 22 0a 14 70 5e 5e 2e 45 43 30 5f 47 41 55 30 ["..p^^.EC0_GAU0 53b0: 42 47 55 31 5b 22 0a 14 a0 15 42 46 43 31 77 42 BGU1["....BFC1wB 53c0: 47 55 31 42 46 43 31 62 78 62 0a 64 64 62 a1 09 GU1BFC1bxb.ddb.. 53d0: 77 42 47 55 31 0a 28 62 70 42 53 54 31 88 50 42 wBGU1.(bpBST1.PB 53e0: 53 54 00 00 70 00 88 50 42 53 54 01 00 70 62 88 ST..p..PBST..pb. 53f0: 50 42 53 54 0a 02 00 70 63 88 50 42 53 54 0a 03 PBST...pc.PBST.. 5400: 00 a0 1b 94 45 43 44 59 00 76 45 43 44 59 a0 0e ....ECDY.vECDY.. 5410: 93 45 43 44 59 00 86 42 41 54 31 0a 80 a4 50 42 .ECDY..BAT1...PB 5420: 53 54 5b 82 2e 50 53 32 4b 08 5f 48 49 44 0c 41 ST[..PS2K._HID.A 5430: d0 03 03 08 5f 43 52 53 11 19 0a 16 47 01 60 00 ...._CRS....G.`. 5440: 60 00 01 01 47 01 64 00 64 00 01 01 23 02 00 01 `...G.d.d...#... 5450: 79 00 5b 82 1e 50 53 32 4d 08 5f 48 49 44 0c 41 y.[..PS2M._HID.A 5460: d0 0f 13 08 5f 43 52 53 11 09 0a 06 23 00 10 01 ...._CRS....#... 5470: 79 00 5b 82 43 6a 50 41 54 41 08 5f 41 44 52 0c y.[.CjPATA._ADR. 5480: 01 00 1f 00 5b 80 50 41 43 53 02 0a 40 0a c0 5b ....[.PACS..@..[ 5490: 81 49 04 50 41 43 53 03 50 52 49 54 10 00 10 50 .I.PACS.PRIT...P 54a0: 53 49 54 04 00 1c 53 59 4e 43 04 00 0c 53 44 54 SIT...SYNC...SDT 54b0: 30 02 00 02 53 44 54 31 02 00 4a 04 49 43 52 30 0...SDT1..J.ICR0 54c0: 04 49 43 52 31 04 49 43 52 32 04 49 43 52 33 04 .ICR1.ICR2.ICR3. 54d0: 49 43 52 34 04 49 43 52 35 04 5b 82 4b 63 50 52 ICR4.ICR5.[.KcPR 54e0: 49 44 08 5f 41 44 52 00 14 40 17 5f 47 54 4d 00 ID._ADR..@._GTM. 54f0: 08 50 42 55 46 11 17 0a 14 00 00 00 00 00 00 00 .PBUF........... 5500: 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 50 42 ..............PB 5510: 55 46 00 50 49 4f 30 8a 50 42 55 46 0a 04 44 4d UF.PIO0.PBUF..DM 5520: 41 30 8a 50 42 55 46 0a 08 50 49 4f 31 8a 50 42 A0.PBUF..PIO1.PB 5530: 55 46 0a 0c 44 4d 41 31 8a 50 42 55 46 0a 10 46 UF..DMA1.PBUF..F 5540: 4c 41 47 70 47 45 54 50 50 52 49 54 50 49 4f 30 LAGpGETPPRITPIO0 5550: 70 47 44 4d 41 7b 53 59 4e 43 01 00 7b 49 43 52 pGDMA{SYNC..{ICR 5560: 33 01 00 7b 49 43 52 30 01 00 53 44 54 30 7b 49 3..{ICR0..SDT0{I 5570: 43 52 31 01 00 44 4d 41 30 a0 14 93 44 4d 41 30 CR1..DMA0...DMA0 5580: 0c ff ff ff ff 70 50 49 4f 30 44 4d 41 30 a0 2e .....pPIO0DMA0.. 5590: 7b 50 52 49 54 0b 00 40 00 a0 14 93 7b 50 52 49 {PRIT..@....{PRI 55a0: 54 0a 90 00 0a 80 70 0b 84 03 50 49 4f 31 a1 0e T.....p...PIO1.. 55b0: 70 47 45 54 54 50 53 49 54 50 49 4f 31 a1 0b 70 pGETTPSITPIO1..p 55c0: 0c ff ff ff ff 50 49 4f 31 70 47 44 4d 41 7b 53 .....PIO1pGDMA{S 55d0: 59 4e 43 0a 02 00 7b 49 43 52 33 0a 02 00 7b 49 YNC...{ICR3...{I 55e0: 43 52 30 0a 02 00 53 44 54 31 7b 49 43 52 31 0a CR0...SDT1{ICR1. 55f0: 02 00 44 4d 41 31 a0 14 93 44 4d 41 31 0c ff ff ..DMA1...DMA1... 5600: ff ff 70 50 49 4f 31 44 4d 41 31 70 47 45 54 46 ..pPIO1DMA1pGETF 5610: 7b 53 59 4e 43 01 00 7b 53 59 4e 43 0a 02 00 50 {SYNC..{SYNC...P 5620: 52 49 54 46 4c 41 47 a0 2c 7b 93 50 49 4f 30 0c RITFLAG.,{.PIO0. 5630: ff ff ff ff 93 44 4d 41 30 0c ff ff ff ff 00 70 .....DMA0......p 5640: 0a 78 50 49 4f 30 70 0a 14 44 4d 41 30 70 0a 03 .xPIO0p..DMA0p.. 5650: 46 4c 41 47 a4 50 42 55 46 14 4c 2a 5f 53 54 4d FLAG.PBUF.L*_STM 5660: 03 8a 68 00 50 49 4f 30 8a 68 0a 04 44 4d 41 30 ..h.PIO0.h..DMA0 5670: 8a 68 0a 08 50 49 4f 31 8a 68 0a 0c 44 4d 41 31 .h..PIO1.h..DMA1 5680: 8a 68 0a 10 46 4c 41 47 a0 41 12 93 87 69 0b 00 .h..FLAG.A...i.. 5690: 02 7b 50 52 49 54 0b f0 c0 50 52 49 54 7b 53 59 .{PRIT...PRIT{SY 56a0: 4e 43 0a 02 53 59 4e 43 70 00 53 44 54 30 7b 49 NC..SYNCp.SDT0{I 56b0: 43 52 30 0a 02 49 43 52 30 7b 49 43 52 31 0a 02 CR0..ICR0{ICR1.. 56c0: 49 43 52 31 7b 49 43 52 33 0a 02 49 43 52 33 7b ICR1{ICR3..ICR3{ 56d0: 49 43 52 35 0a 02 49 43 52 35 8b 69 0a 62 57 34 ICR5..ICR5.i.bW4 56e0: 39 30 8b 69 0a 6a 57 35 33 30 8b 69 0a 7e 57 36 90.i.jW530.i.~W6 56f0: 33 30 8b 69 0a 80 57 36 34 30 8b 69 0a b0 57 38 30.i..W640.i..W8 5700: 38 30 8b 69 0a ba 57 39 33 30 7d 50 52 49 54 0b 80.i..W930}PRIT. 5710: 04 80 50 52 49 54 a0 1e 90 7b 46 4c 41 47 0a 02 ..PRIT...{FLAG.. 5720: 00 7b 57 34 39 30 0b 00 08 00 7d 50 52 49 54 0a .{W490....}PRIT. 5730: 02 50 52 49 54 7d 50 52 49 54 53 45 54 50 50 49 .PRIT}PRITSETPPI 5740: 4f 30 57 35 33 30 57 36 34 30 50 52 49 54 a0 4b O0W530W640PRIT.K 5750: 05 7b 46 4c 41 47 01 00 7d 53 59 4e 43 01 53 59 .{FLAG..}SYNC.SY 5760: 4e 43 70 53 44 4d 41 44 4d 41 30 53 44 54 30 a0 NCpSDMADMA0SDT0. 5770: 12 95 44 4d 41 30 0a 1e 7d 49 43 52 33 01 49 43 ..DMA0..}ICR3.IC 5780: 52 33 a0 12 95 44 4d 41 30 0a 3c 7d 49 43 52 30 R3...DMA0.<}ICR0 5790: 01 49 43 52 30 a0 14 7b 57 39 33 30 0b 00 20 00 .ICR0..{W930.. . 57a0: 7d 49 43 52 31 01 49 43 52 31 a0 4b 15 93 87 6a }ICR1.ICR1.K...j 57b0: 0b 00 02 7b 50 52 49 54 0b 0f bf 50 52 49 54 70 ...{PRIT...PRITp 57c0: 00 50 53 49 54 7b 53 59 4e 43 01 53 59 4e 43 70 .PSIT{SYNC.SYNCp 57d0: 00 53 44 54 31 7b 49 43 52 30 01 49 43 52 30 7b .SDT1{ICR0.ICR0{ 57e0: 49 43 52 31 01 49 43 52 31 7b 49 43 52 33 01 49 ICR1.ICR1{ICR3.I 57f0: 43 52 33 7b 49 43 52 35 01 49 43 52 35 8b 6a 0a CR3{ICR5.ICR5.j. 5800: 62 57 34 39 31 8b 6a 0a 6a 57 35 33 31 8b 6a 0a bW491.j.jW531.j. 5810: 7e 57 36 33 31 8b 6a 0a 80 57 36 34 31 8b 6a 0a ~W631.j..W641.j. 5820: b0 57 38 38 31 8b 6a 0a ba 57 39 33 31 7d 50 52 .W881.j..W931}PR 5830: 49 54 0b 40 80 50 52 49 54 a0 1e 90 7b 46 4c 41 IT.@.PRIT...{FLA 5840: 47 0a 08 00 7b 57 34 39 31 0b 00 08 00 7d 50 52 G...{W491....}PR 5850: 49 54 0a 20 50 52 49 54 a0 4c 04 7b 46 4c 41 47 IT. PRIT.L.{FLAG 5860: 0a 10 00 7d 50 52 49 54 0b 00 40 50 52 49 54 a0 ...}PRIT..@PRIT. 5870: 13 94 50 49 4f 31 0a f0 7d 50 52 49 54 0a 80 50 ..PIO1..}PRIT..P 5880: 52 49 54 a1 21 7d 50 52 49 54 0a 10 50 52 49 54 RIT.!}PRIT..PRIT 5890: 70 53 45 54 54 50 49 4f 31 57 35 33 31 57 36 34 pSETTPIO1W531W64 58a0: 31 50 53 49 54 a0 40 06 7b 46 4c 41 47 0a 04 00 1PSIT.@.{FLAG... 58b0: 7d 53 59 4e 43 0a 02 53 59 4e 43 70 53 44 4d 41 }SYNC..SYNCpSDMA 58c0: 44 4d 41 31 53 44 54 31 a0 13 95 44 4d 41 31 0a DMA1SDT1...DMA1. 58d0: 1e 7d 49 43 52 33 0a 02 49 43 52 33 a0 13 95 44 .}ICR3..ICR3...D 58e0: 4d 41 31 0a 3c 7d 49 43 52 30 0a 02 49 43 52 30 MA1.<}ICR0..ICR0 58f0: a0 15 7b 57 39 33 31 0b 00 20 00 7d 49 43 52 31 ..{W931.. .}ICR1 5900: 0a 02 49 43 52 31 5b 82 47 10 50 5f 44 30 08 5f ..ICR1[.G.P_D0._ 5910: 41 44 52 00 14 4a 0f 5f 47 54 46 00 08 50 49 42 ADR..J._GTF..PIB 5920: 30 11 11 0a 0e 03 00 00 00 00 a0 ef 03 00 00 00 0............... 5930: 00 a0 ef 8c 50 49 42 30 01 50 4d 44 30 8c 50 49 ....PIB0.PMD0.PI 5940: 42 30 0a 08 44 4d 44 30 a0 40 06 7b 50 52 49 54 B0..DMD0.@.{PRIT 5950: 0a 02 00 a0 13 93 7b 50 52 49 54 0a 09 00 0a 08 ......{PRIT..... 5960: 70 0a 08 50 4d 44 30 a1 41 04 70 0a 0a 50 4d 44 p..PMD0.A.p..PMD 5970: 30 7a 7b 50 52 49 54 0b 00 03 00 0a 08 60 7a 7b 0z{PRIT......`z{ 5980: 50 52 49 54 0b 00 30 00 0a 0c 61 72 60 61 62 a0 PRIT..0...ar`ab. 5990: 0c 93 0a 03 62 70 0a 0b 50 4d 44 30 a0 0c 93 0a ....bp..PMD0.... 59a0: 05 62 70 0a 0c 50 4d 44 30 a1 07 70 01 50 4d 44 .bp..PMD0..p.PMD 59b0: 30 a0 43 04 7b 53 59 4e 43 01 00 70 7d 53 44 54 0.C.{SYNC..p}SDT 59c0: 30 0a 40 00 44 4d 44 30 a0 2c 7b 49 43 52 31 01 0.@.DMD0.,{ICR1. 59d0: 00 a0 13 7b 49 43 52 30 01 00 72 44 4d 44 30 0a ...{ICR0..rDMD0. 59e0: 02 44 4d 44 30 a0 0f 7b 49 43 52 33 01 00 70 0a .DMD0..{ICR3..p. 59f0: 45 44 4d 44 30 a1 14 7d 74 7b 50 4d 44 30 0a 07 EDMD0..}t{PMD0.. 5a00: 00 0a 02 00 0a 20 44 4d 44 30 a4 50 49 42 30 5b ..... DMD0.PIB0[ 5a10: 82 46 10 50 5f 44 31 08 5f 41 44 52 01 14 49 0f .F.P_D1._ADR..I. 5a20: 5f 47 54 46 00 08 50 49 42 31 11 11 0a 0e 03 00 _GTF..PIB1...... 5a30: 00 00 00 b0 ef 03 00 00 00 00 b0 ef 8c 50 49 42 .............PIB 5a40: 31 01 50 4d 44 31 8c 50 49 42 31 0a 08 44 4d 44 1.PMD1.PIB1..DMD 5a50: 31 a0 4b 05 7b 50 52 49 54 0a 20 00 a0 13 93 7b 1.K.{PRIT. ....{ 5a60: 50 52 49 54 0a 90 00 0a 80 70 0a 08 50 4d 44 31 PRIT.....p..PMD1 5a70: a1 3c 72 7b 50 53 49 54 0a 03 00 7a 7b 50 53 49 .. 0050: 80 49 ee 6a 65 26 72 1e cd bf 5f 2f 96 d6 c0 0a .I.je&r..._/.... 0060: 92 f5 06 b5 00 b2 3b 29 02 e2 4c 8d c2 f2 bc 41 ......;)..L....A 0070: 77 9c 70 f0 f3 1b 09 d2 63 5a dc a8 83 f8 5e c9 w.p.....cZ....^. 0080: 15 95 f9 fa fd dc 05 b7 4d 67 7f 2d b3 84 33 20 ........Mg.-..3 0090: e1 d1 79 2a a7 6a 77 d1 b6 20 2a 76 42 c5 d5 e9 ..y*.jw.. *vB... 00a0: b6 43 40 55 44 c3 c9 37 99 5f 41 97 70 f3 d1 f6 .C@UD..7._A.p... 00b0: 07 ec 7b 1a 29 a1 c1 f1 91 fd 48 86 6e 3e ce cb ..{.).....H.n>.. 00c0: 01 00 00 00 b6 00 00 00 00 00 02 00 4c 45 4e 4f ............LENO 00d0: 56 4f 54 50 2d 36 38 20 20 20 57 49 4e 44 4f 57 VOTP-68 WINDOW 00e0: 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 S .............. 00f0: 00 00 00 00 00 00 8a 6e 2e c9 36 e6 7f 10 8a ea .......n..6..... 0100: 14 ad d2 93 b7 6d 9b 73 ad 83 36 b8 6c a7 a7 ee .....m.s..6.l... 0110: 37 47 16 fe f3 fc cd c7 89 84 06 16 91 0b 1e 81 7G.............. 0120: 11 42 b1 35 52 57 f6 6b bb 5f a5 81 e2 ff 89 8a .B.5RW.k._...... 0130: 95 c3 4d fc e9 56 4f 4c 34 cc 99 5e 62 e1 90 8a ..M..VOL4..^b... 0140: 54 be 4a 00 5c 9b a0 86 41 46 66 9d e2 f2 e7 36 T.J.\...AFf....6 0150: 9c 33 91 27 e7 8d 5c a1 d8 f9 a4 61 8a 1c 04 07 .3.'..\....a.... 0160: e3 2a 1e 14 f1 bd 7f 4c 09 ff 19 11 a9 d4 74 ca .*.....L......t. 0170: 11 9e dc 54 39 bf ...T9. APIC @ 0xbf6dff70 0000: 41 50 49 43 68 00 00 00 01 13 50 54 4c 54 44 20 APICh.....PTLTD 0010: 09 20 41 50 49 43 20 20 00 00 04 06 20 4c 54 50 . APIC .... LTP 0020: 00 00 00 00 00 00 e0 fe 01 00 00 00 00 08 00 00 ................ 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0c 02 00 ................ 0040: 00 00 c0 fe 00 00 00 00 04 06 00 05 00 01 04 06 ................ 0050: 01 05 00 01 02 0a 00 00 02 00 00 00 05 00 02 0a ................ 0060: 00 09 09 00 00 00 0d 00 ........ BOOT @ 0xbf6dffd8 0000: 42 4f 4f 54 28 00 00 00 01 a5 50 54 4c 54 44 20 BOOT(.....PTLTD 0010: 24 53 42 46 54 42 4c 24 00 00 04 06 20 4c 54 50 $SBFTBL$.... LTP 0020: 01 00 00 00 36 00 00 00 ....6... SSDT @ 0xbf6d98bd 0000: 53 53 44 54 ad 02 00 00 01 59 53 61 74 61 52 65 SSDT.....YSataRe 0010: 53 61 74 61 41 68 63 69 00 10 00 00 49 4e 54 4c SataAhci....INTL 0020: 24 06 05 20 10 48 28 5c 2f 03 5f 53 42 5f 50 43 $.. .H(\/._SB_PC 0030: 49 30 53 41 54 41 5b 82 4f 0c 50 52 54 30 08 5f I0SATA[.O.PRT0._ 0040: 41 44 52 0b ff ff 14 44 0b 5f 53 44 44 01 08 47 ADR....D._SDD..G 0050: 42 55 30 11 0a 0a 07 00 00 00 00 00 a0 00 8c 47 BU0............G 0060: 42 55 30 0a 00 47 42 30 30 8c 47 42 55 30 0a 01 BU0..GB00.GBU0.. 0070: 47 42 30 31 8c 47 42 55 30 0a 02 47 42 30 32 8c GB01.GBU0..GB02. 0080: 47 42 55 30 0a 03 47 42 30 33 8c 47 42 55 30 0a GBU0..GB03.GBU0. 0090: 04 47 42 30 34 8c 47 42 55 30 0a 05 47 42 30 35 .GB04.GBU0..GB05 00a0: 8c 47 42 55 30 0a 06 47 42 30 36 a0 46 04 93 87 .GBU0..GB06.F... 00b0: 68 0b 00 02 8b 68 0a 9c 57 37 38 30 a0 1e 7b 57 h....h..W780..{W 00c0: 37 38 30 0a 08 00 70 0a 10 47 42 30 30 70 0a 03 780...p..GB00p.. 00d0: 47 42 30 31 70 0a ef 47 42 30 36 a1 16 70 0a 90 GB01p..GB06..p.. 00e0: 47 42 30 30 70 0a 03 47 42 30 31 70 0a ef 47 42 GB00p..GB01p..GB 00f0: 30 36 70 47 42 55 30 47 54 46 30 14 0b 5f 47 54 06pGBU0GTF0.._GT 0100: 46 00 a4 47 54 46 30 5b 82 41 0d 50 52 54 31 08 F..GTF0[.A.PRT1. 0110: 5f 41 44 52 0c ff ff 01 00 14 44 0b 5f 53 44 44 _ADR......D._SDD 0120: 01 08 47 42 55 31 11 0a 0a 07 00 00 00 00 00 a0 ..GBU1.......... 0130: 00 8c 47 42 55 31 0a 00 47 42 31 30 8c 47 42 55 ..GBU1..GB10.GBU 0140: 31 0a 01 47 42 31 31 8c 47 42 55 31 0a 02 47 42 1..GB11.GBU1..GB 0150: 31 32 8c 47 42 55 31 0a 03 47 42 31 33 8c 47 42 12.GBU1..GB13.GB 0160: 55 31 0a 04 47 42 31 34 8c 47 42 55 31 0a 05 47 U1..GB14.GBU1..G 0170: 42 31 35 8c 47 42 55 31 0a 06 47 42 31 36 a0 46 B15.GBU1..GB16.F 0180: 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 38 31 a0 ...h....h..W781. 0190: 1e 7b 57 37 38 31 0a 08 00 70 0a 10 47 42 31 30 .{W781...p..GB10 01a0: 70 0a 03 47 42 31 31 70 0a ef 47 42 31 36 a1 16 p..GB11p..GB16.. 01b0: 70 0a 90 47 42 31 30 70 0a 03 47 42 31 31 70 0a p..GB10p..GB11p. 01c0: ef 47 42 31 36 70 47 42 55 31 47 54 46 31 14 0b .GB16pGBU1GTF1.. 01d0: 5f 47 54 46 00 a4 47 54 46 31 5b 82 41 0d 50 52 _GTF..GTF1[.A.PR 01e0: 54 32 08 5f 41 44 52 0c ff ff 02 00 14 44 0b 5f T2._ADR......D._ 01f0: 53 44 44 01 08 47 42 55 32 11 0a 0a 07 00 00 00 SDD..GBU2....... 0200: 00 00 a0 00 8c 47 42 55 32 0a 00 47 42 32 30 8c .....GBU2..GB20. 0210: 47 42 55 32 0a 01 47 42 32 31 8c 47 42 55 32 0a GBU2..GB21.GBU2. 0220: 02 47 42 32 32 8c 47 42 55 32 0a 03 47 42 32 33 .GB22.GBU2..GB23 0230: 8c 47 42 55 32 0a 04 47 42 32 34 8c 47 42 55 32 .GBU2..GB24.GBU2 0240: 0a 05 47 42 32 35 8c 47 42 55 32 0a 06 47 42 32 ..GB25.GBU2..GB2 0250: 36 a0 46 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 6.F...h....h..W7 0260: 38 32 a0 1e 7b 57 37 38 32 0a 08 00 70 0a 10 47 82..{W782...p..G 0270: 42 32 30 70 0a 03 47 42 32 31 70 0a ef 47 42 32 B20p..GB21p..GB2 0280: 36 a1 16 70 0a 90 47 42 32 30 70 0a 03 47 42 32 6..p..GB20p..GB2 0290: 31 70 0a ef 47 42 32 36 70 47 42 55 32 47 54 46 1p..GB26pGBU2GTF 02a0: 32 14 0b 5f 47 54 46 00 a4 47 54 46 32 2.._GTF..GTF2 SSDT @ 0xbf6d981a 0000: 53 53 44 54 a3 00 00 00 01 ed 42 72 74 52 65 66 SSDT......BrtRef 0010: 44 44 30 31 42 52 54 00 00 10 00 00 49 4e 54 4c DD01BRT.....INTL 0020: 24 06 05 20 10 4e 07 5c 2f 04 5f 53 42 5f 50 43 $.. .N.\/._SB_PC 0030: 49 30 47 46 58 30 44 44 30 33 14 1e 5f 42 43 4c I0GFX0DD03.._BCL 0040: 00 a4 12 16 0a 0a 46 0a 28 0a 00 0a 0a 0a 14 0a ......F.(....... 0050: 1e 0a 28 0a 32 0a 3c 0a 46 14 25 5f 42 43 4d 01 ..(.2.<.F.%_BCM. 0060: 78 68 0a 0a 60 61 70 61 5c 2f 05 5f 53 42 5f 50 xh..`apa\/._SB_P 0070: 43 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 14 CI0LPCBEC0_BRTS. 0080: 23 5f 42 51 43 00 77 5c 2f 05 5f 53 42 5f 50 43 #_BQC.w\/._SB_PC 0090: 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 0a 0a I0LPCBEC0_BRTS.. 00a0: 60 a4 60 `.` SSDT @ 0xbf6d8e10 0000: 53 53 44 54 5f 02 00 00 01 c8 50 6d 52 65 66 00 SSDT_.....PmRef. 0010: 43 70 75 30 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu0Tst..0..INTL 0020: 24 06 05 20 10 4a 23 5c 2e 5f 50 52 5f 43 50 55 $.. .J#\._PR_CPU 0030: 30 08 5f 54 50 43 0a 00 14 4d 06 5f 50 54 43 00 0._TPC...M._PTC. 0040: a0 37 7b 50 44 43 30 0a 04 00 a4 12 2c 02 11 14 .7{PDC0.....,... 0050: 0a 11 82 0c 00 7f 00 00 00 00 00 00 00 00 00 00 ................ 0060: 00 79 00 11 14 0a 11 82 0c 00 7f 00 00 00 00 00 .y.............. 0070: 00 00 00 00 00 00 79 00 a4 12 2c 02 11 14 0a 11 ......y...,..... 0080: 82 0c 00 01 04 01 00 10 10 00 00 00 00 00 00 79 ...............y 0090: 00 11 14 0a 11 82 0c 00 01 04 01 00 10 10 00 00 ................ 00a0: 00 00 00 00 79 00 08 54 53 53 49 12 41 07 08 12 ....y..TSSI.A... 00b0: 0d 05 0a 64 0b e8 03 0a 00 0a 00 0a 00 12 0d 05 ...d............ 00c0: 0a 58 0b 6b 03 0a 00 0a 0f 0a 00 12 0d 05 0a 4b .X.k...........K 00d0: 0b ee 02 0a 00 0a 0e 0a 00 12 0d 05 0a 3f 0b 71 .............?.q 00e0: 02 0a 00 0a 0d 0a 00 12 0d 05 0a 32 0b f4 01 0a ...........2.... 00f0: 00 0a 0c 0a 00 12 0d 05 0a 26 0b 77 01 0a 00 0a .........&.w.... 0100: 0b 0a 00 12 0c 05 0a 19 0a fa 0a 00 0a 0a 0a 00 ................ 0110: 12 0c 05 0a 0d 0a 7d 0a 00 0a 09 0a 00 08 54 53 ......}.......TS 0120: 53 4d 12 41 07 08 12 0d 05 0a 64 0b e8 03 0a 00 SM.A......d..... 0130: 0a 00 0a 00 12 0d 05 0a 58 0b 6b 03 0a 00 0a 1e ........X.k..... 0140: 0a 00 12 0d 05 0a 4b 0b ee 02 0a 00 0a 1c 0a 00 ......K......... 0150: 12 0d 05 0a 3f 0b 71 02 0a 00 0a 1a 0a 00 12 0d ....?.q......... 0160: 05 0a 32 0b f4 01 0a 00 0a 18 0a 00 12 0d 05 0a ..2............. 0170: 26 0b 77 01 0a 00 0a 16 0a 00 12 0c 05 0a 19 0a &.w............. 0180: fa 0a 00 0a 14 0a 00 12 0c 05 0a 0d 0a 7d 0a 00 .............}.. 0190: 0a 12 0a 00 08 54 53 53 46 0a 00 14 43 08 5f 54 .....TSSF...C._T 01a0: 53 53 00 a0 47 06 90 92 54 53 53 46 5b 12 5f 50 SS..G...TSSF[._P 01b0: 53 53 00 70 5f 50 53 53 60 70 87 60 61 76 61 70 SS.p_PSS`p.`avap 01c0: 83 88 83 88 60 61 00 0a 01 00 62 70 0a 00 63 a2 ....`a....bp..c. 01d0: 35 95 63 87 54 53 53 49 70 78 77 62 74 0a 08 63 5.c.TSSIpxwbt..c 01e0: 00 00 0a 08 00 00 64 70 64 88 83 88 54 53 53 49 ......dpd...TSSI 01f0: 63 00 0a 01 00 70 64 88 83 88 54 53 53 4d 63 00 c....pd...TSSMc. 0200: 0a 01 00 75 63 70 ff 54 53 53 46 a0 0e 7b 50 44 ...ucp.TSSF..{PD 0210: 43 30 0a 04 00 a4 54 53 53 4d a4 54 53 53 49 14 C0....TSSM.TSSI. 0220: 3f 5f 54 53 44 00 a0 27 90 7b 43 46 47 44 0c 00 ?_TSD..'.{CFGD.. 0230: 00 00 01 00 92 7b 50 44 43 30 0a 04 00 a4 12 0f .....{PDC0...... 0240: 01 12 0c 05 0a 05 0a 00 0a 00 0a fd 0a 02 a4 12 ................ 0250: 0f 01 12 0c 05 0a 05 0a 00 0a 00 0a fc 0a 01 ............... SSDT @ 0xbf6d8d6a 0000: 53 53 44 54 a6 00 00 00 01 6d 50 6d 52 65 66 00 SSDT.....mPmRef. 0010: 43 70 75 31 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu1Tst..0..INTL 0020: 24 06 05 20 10 41 08 5c 2e 5f 50 52 5f 43 50 55 $.. .A.\._PR_CPU 0030: 31 08 5f 54 50 43 0a 00 14 16 5f 50 54 43 00 a4 1._TPC...._PTC.. 0040: 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 54 43 14 \/._PR_CPU0_PTC. 0050: 16 5f 54 53 53 00 a4 5c 2f 03 5f 50 52 5f 43 50 ._TSS..\/._PR_CP 0060: 55 30 5f 54 53 53 14 3f 5f 54 53 44 00 a0 27 90 U0_TSS.?_TSD..'. 0070: 7b 43 46 47 44 0c 00 00 00 01 00 92 7b 50 44 43 {CFGD.......{PDC 0080: 31 0a 04 00 a4 12 0f 01 12 0c 05 0a 05 0a 00 0a 1............... 0090: 00 0a fd 0a 02 a4 12 0f 01 12 0c 05 0a 05 0a 00 ................ 00a0: 0a 01 0a fc 0a 01 ...... SSDT @ 0xbf6d8884 0000: 53 53 44 54 e6 04 00 00 01 df 50 6d 52 65 66 00 SSDT......PmRef. 0010: 43 70 75 50 6d 00 00 00 00 30 00 00 49 4e 54 4c CpuPm....0..INTL 0020: 24 06 05 20 10 45 08 5c 00 08 53 53 44 54 12 43 $.. .E.\..SSDT.C 0030: 05 0c 0d 43 50 55 30 49 53 54 20 00 0c 9e 95 6d ...CPU0IST ....m 0040: bf 0c b4 01 00 00 0d 43 50 55 31 49 53 54 20 00 .......CPU1IST . 0050: 0c 52 97 6d bf 0c c8 00 00 00 0d 43 50 55 30 43 .R.m.......CPU0C 0060: 53 54 20 00 0c 6f 90 6d bf 0c aa 04 00 00 0d 43 ST ..o.m.......C 0070: 50 55 31 43 53 54 20 00 0c 19 95 6d bf 0c 85 00 PU1CST ....m.... 0080: 00 00 08 43 46 47 44 0c f1 69 3f 11 08 5c 50 44 ...CFGD..i?..\PD 0090: 43 30 0c 00 00 00 80 08 5c 50 44 43 31 0c 00 00 C0......\PDC1... 00a0: 00 80 08 5c 53 44 54 4c 0a 00 10 4d 21 5c 2e 5f ...\SDTL...M!\._ 00b0: 50 52 5f 43 50 55 30 08 48 49 30 5f 0a 00 08 48 PR_CPU0.HI0_...H 00c0: 43 30 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a C0_...H._PDC..h. 00d0: 00 52 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 .REVS.h..SIZEp.h 00e0: 60 70 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a `pt`...a[.h.@wa. 00f0: 08 00 54 45 4d 50 08 53 54 53 30 11 07 0a 04 00 ..TEMP.STS0..... 0100: 00 00 00 73 53 54 53 30 54 45 4d 50 62 5f 4f 53 ...sSTS0TEMPb_OS 0110: 43 11 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 C......w@.).G... 0120: 70 58 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 pXq9SREVSSIZEb.I 0130: 19 5f 4f 53 43 04 8a 6b 0a 00 53 54 53 30 8a 6b ._OSC..k..STS0.k 0140: 0a 04 43 41 50 30 8a 68 0a 00 49 49 44 30 8a 68 ..CAP0.h..IID0.h 0150: 0a 04 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 ..IID1.h..IID2.h 0160: 0a 0c 49 49 44 33 08 55 49 44 30 11 13 0a 10 16 ..IID3.UID0..... 0170: a6 77 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a .w@.).G...pXq9S. 0180: 55 49 44 30 0a 00 45 49 44 30 8a 55 49 44 30 0a UID0..EID0.UID0. 0190: 04 45 49 44 31 8a 55 49 44 30 0a 08 45 49 44 32 .EID1.UID0..EID2 01a0: 8a 55 49 44 30 0a 0c 45 49 44 33 a0 32 92 90 90 .UID0..EID3.2... 01b0: 93 49 49 44 30 45 49 44 30 93 49 49 44 31 45 49 .IID0EID0.IID1EI 01c0: 44 31 90 93 49 49 44 32 45 49 44 32 93 49 49 44 D1..IID2EID2.IID 01d0: 33 45 49 44 33 70 0a 06 53 54 53 30 a4 6b a0 0f 3EID3p..STS0.k.. 01e0: 92 93 69 0a 01 70 0a 0a 53 54 53 30 a4 6b 7d 7b ..i..p..STS0.k}{ 01f0: 50 44 43 30 0c ff ff ff 7f 00 43 41 50 30 50 44 PDC0......CAP0PD 0200: 43 30 70 7b 50 44 43 30 0a ff 00 50 43 50 30 a0 C0p{PDC0...PCP0. 0210: 4c 05 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b L.{CFGD....A...{ 0220: 43 46 47 44 0c 00 00 00 01 00 93 7b 50 44 43 30 CFGD.......{PDC0 0230: 0a 09 00 0a 09 92 7b 53 44 54 4c 0a 01 00 7d 53 ......{SDTL...}S 0240: 44 54 4c 0a 01 53 44 54 4c 5b 80 49 53 54 30 00 DTL..SDTL[.IST0. 0250: 83 88 53 53 44 54 0a 01 00 83 88 53 53 44 54 0a ..SSDT.....SSDT. 0260: 02 00 5b 20 49 53 54 30 48 49 30 5f a0 49 05 7b ..[ IST0HI0_.I.{ 0270: 43 46 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 CFGD....N...{CFG 0280: 44 0c 00 00 00 01 00 7b 50 44 43 30 0a 18 00 92 D......{PDC0.... 0290: 7b 53 44 54 4c 0a 02 00 7d 53 44 54 4c 0a 02 53 {SDTL...}SDTL..S 02a0: 44 54 4c 5b 80 43 53 54 30 00 83 88 53 53 44 54 DTL[.CST0...SSDT 02b0: 0a 07 00 83 88 53 53 44 54 0a 08 00 5b 20 43 53 .....SSDT...[ CS 02c0: 54 30 48 43 30 5f a4 6b 10 4d 21 5c 2e 5f 50 52 T0HC0_.k.M!\._PR 02d0: 5f 43 50 55 31 08 48 49 31 5f 0a 00 08 48 43 31 _CPU1.HI1_...HC1 02e0: 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a 00 52 _...H._PDC..h..R 02f0: 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 60 70 EVS.h..SIZEp.h`p 0300: 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a 08 00 t`...a[.h.@wa... 0310: 54 45 4d 50 08 53 54 53 31 11 07 0a 04 00 00 00 TEMP.STS1....... 0320: 00 73 53 54 53 31 54 45 4d 50 62 5f 4f 53 43 11 .sSTS1TEMPb_OSC. 0330: 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 70 58 .....w@.).G...pX 0340: 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 19 5f q9SREVSSIZEb.I._ 0350: 4f 53 43 04 8a 6b 0a 00 53 54 53 31 8a 6b 0a 04 OSC..k..STS1.k.. 0360: 43 41 50 31 8a 68 0a 00 49 49 44 30 8a 68 0a 04 CAP1.h..IID0.h.. 0370: 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 0a 0c IID1.h..IID2.h.. 0380: 49 49 44 33 08 55 49 44 31 11 13 0a 10 16 a6 77 IID3.UID1......w 0390: 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a 55 49 @.).G...pXq9S.UI 03a0: 44 31 0a 00 45 49 44 30 8a 55 49 44 31 0a 04 45 D1..EID0.UID1..E 03b0: 49 44 31 8a 55 49 44 31 0a 08 45 49 44 32 8a 55 ID1.UID1..EID2.U 03c0: 49 44 31 0a 0c 45 49 44 33 a0 32 92 90 90 93 49 ID1..EID3.2....I 03d0: 49 44 30 45 49 44 30 93 49 49 44 31 45 49 44 31 ID0EID0.IID1EID1 03e0: 90 93 49 49 44 32 45 49 44 32 93 49 49 44 33 45 ..IID2EID2.IID3E 03f0: 49 44 33 70 0a 06 53 54 53 31 a4 6b a0 0f 92 93 ID3p..STS1.k.... 0400: 69 0a 01 70 0a 0a 53 54 53 31 a4 6b 7d 7b 50 44 i..p..STS1.k}{PD 0410: 43 31 0c ff ff ff 7f 00 43 41 50 31 50 44 43 31 C1......CAP1PDC1 0420: 70 7b 50 44 43 31 0a ff 00 50 43 50 31 a0 4c 05 p{PDC1...PCP1.L. 0430: 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b 43 46 {CFGD....A...{CF 0440: 47 44 0c 00 00 00 01 00 93 7b 50 44 43 31 0a 09 GD.......{PDC1.. 0450: 00 0a 09 92 7b 53 44 54 4c 0a 10 00 7d 53 44 54 ....{SDTL...}SDT 0460: 4c 0a 10 53 44 54 4c 5b 80 49 53 54 31 00 83 88 L..SDTL[.IST1... 0470: 53 53 44 54 0a 04 00 83 88 53 53 44 54 0a 05 00 SSDT.....SSDT... 0480: 5b 20 49 53 54 31 48 49 31 5f a0 49 05 7b 43 46 [ IST1HI1_.I.{CF 0490: 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 44 0c GD....N...{CFGD. 04a0: 00 00 00 01 00 7b 50 44 43 31 0a 18 00 92 7b 53 .....{PDC1....{S 04b0: 44 54 4c 0a 20 00 7d 53 44 54 4c 0a 20 53 44 54 DTL. .}SDTL. SDT 04c0: 4c 5b 80 43 53 54 31 00 83 88 53 53 44 54 0a 0a L[.CST1...SSDT.. 04d0: 00 83 88 53 53 44 54 0a 0b 00 5b 20 43 53 54 31 ...SSDT...[ CST1 04e0: 48 43 31 5f a4 6b HC1_.k XSDT @ 0xbf6d87f0 0000: 58 53 44 54 94 00 00 00 01 c2 4c 45 4e 4f 56 4f XSDT......LENOVO 0010: 54 50 2d 36 38 20 20 20 00 00 04 06 20 4c 54 50 TP-68 .... LTP 0020: 00 00 00 00 d2 fb 6d bf 00 00 00 00 c6 fc 6d bf ......m.......m. 0030: 00 00 00 00 2e fd 6d bf 00 00 00 00 66 fd 6d bf ......m.....f.m. 0040: 00 00 00 00 a2 fd 6d bf 00 00 00 00 d4 fd 6d bf ......m.......m. 0050: 00 00 00 00 fa fd 6d bf 00 00 00 00 70 ff 6d bf ......m.....p.m. 0060: 00 00 00 00 d8 ff 6d bf 00 00 00 00 bd 98 6d bf ......m.......m. 0070: 00 00 00 00 1a 98 6d bf 00 00 00 00 10 8e 6d bf ......m.......m. 0080: 00 00 00 00 6a 8d 6d bf 00 00 00 00 84 88 6d bf ....j.m.......m. 0090: 00 00 00 00 .... RSD PTR @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... fwts-test/apicinstance-0001/acpidump-0002.log000066400000000000000000004044001465205512700207320ustar00rootroot00000000000000DSDT @ 0xbf6d9b6a 0000: 44 53 44 54 f4 5f 00 00 02 11 54 4f 53 43 50 4c DSDT._....TOSCPL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 49 4e 54 4c CRESTLNE....INTL 0020: 08 06 06 20 08 5a 30 30 30 01 08 5a 30 30 31 0a ... .Z000..Z001. 0030: 02 08 5a 30 30 32 0a 04 08 5a 30 30 33 0a 08 08 ..Z002...Z003... 0040: 5a 30 30 34 00 08 5a 30 30 35 0a 0f 08 5a 30 30 Z004..Z005...Z00 0050: 36 0a 0d 08 5a 30 30 37 0a 0b 08 5a 30 30 38 0a 6...Z007...Z008. 0060: 09 08 45 43 44 59 0a 07 5b 01 4d 55 54 58 00 5b ..ECDY..[.MUTX.[ 0070: 80 50 52 54 30 01 0a 80 0a 04 5b 81 0b 50 52 54 .PRT0.....[..PRT 0080: 30 13 50 38 30 48 20 14 4e 07 50 38 58 48 0a a0 0.P80H .N.P8XH.. 0090: 17 93 68 00 70 7d 7b 50 38 30 44 0c 00 ff ff ff ..h.p}{P80D..... 00a0: 00 69 00 50 38 30 44 a0 1b 93 68 01 70 7d 7b 50 .i.P80D...h.p}{P 00b0: 38 30 44 0c ff 00 ff ff 00 79 69 0a 08 00 00 50 80D......yi....P 00c0: 38 30 44 a0 1c 93 68 0a 02 70 7d 7b 50 38 30 44 80D...h..p}{P80D 00d0: 0c ff ff 00 ff 00 79 69 0a 10 00 00 50 38 30 44 ......yi....P80D 00e0: a0 1c 93 68 0a 03 70 7d 7b 50 38 30 44 0c ff ff ...h..p}{P80D... 00f0: ff 00 00 79 69 0a 18 00 00 50 38 30 44 70 50 38 ...yi....P80DpP8 0100: 30 44 50 38 30 48 14 0c 5f 50 49 43 01 70 68 47 0DP80H.._PIC.phG 0110: 50 49 43 14 46 06 5f 50 54 53 01 70 00 50 38 30 PIC.F._PTS.p.P80 0120: 44 50 38 58 48 00 68 a0 1e 93 68 0a 03 70 01 5c DP8XH.h...h..p.\ 0130: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0140: 30 5f 53 33 4c 44 a0 33 93 68 0a 04 70 01 5c 2f 0_S3LD.3.h..p.\/ 0150: 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 ._SB_PCI0LPCBEC0 0160: 5f 53 33 4c 44 5c 2f 04 5f 53 42 5f 50 43 49 30 _S3LD\/._SB_PCI0 0170: 4c 50 43 42 50 48 53 53 0a 0e 14 4c 1c 5f 57 41 LPCBPHSS...L._WA 0180: 4b 01 50 38 58 48 01 0a ab a0 30 91 93 68 0a 03 K.P8XH....0..h.. 0190: 93 68 0a 04 a0 25 7b 43 46 47 44 0c 00 00 00 01 .h...%{CFGD..... 01a0: 00 a0 18 90 7b 43 46 47 44 0a f0 00 93 4f 53 59 ....{CFGD....OSY 01b0: 53 0b d1 07 54 52 41 50 0a 3d a0 18 93 52 50 31 S...TRAP.=...RP1 01c0: 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 D..\/._SB_PCI0RP 01d0: 30 31 00 a0 18 93 52 50 32 44 00 86 5c 2f 03 5f 01....RP2D..\/._ 01e0: 53 42 5f 50 43 49 30 52 50 30 32 00 a0 18 93 52 SB_PCI0RP02....R 01f0: 50 33 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 P3D..\/._SB_PCI0 0200: 52 50 30 33 00 a0 18 93 52 50 34 44 00 86 5c 2f RP03....RP4D..\/ 0210: 03 5f 53 42 5f 50 43 49 30 52 50 30 34 00 a0 18 ._SB_PCI0RP04... 0220: 93 52 50 35 44 00 86 5c 2f 03 5f 53 42 5f 50 43 .RP5D..\/._SB_PC 0230: 49 30 52 50 30 35 00 a0 18 93 52 50 36 44 00 86 I0RP05....RP6D.. 0240: 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 36 00 \/._SB_PCI0RP06. 0250: a0 12 93 68 0a 03 50 38 58 48 00 0a 30 54 52 41 ...h..P8XH..0TRA 0260: 50 0a 46 a0 43 0d 93 68 0a 04 50 38 58 48 00 0a P.F.C..h..P8XH.. 0270: 40 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 @\/._SB_PCI0LPCB 0280: 50 48 53 53 0a 0f 70 57 41 4b 46 60 70 00 57 41 PHSS..pWAKF`p.WA 0290: 4b 46 7b 60 0a 05 60 a0 18 93 60 01 50 38 58 48 KF{`..`...`.P8XH 02a0: 00 0a 41 86 5c 2e 5f 53 42 5f 50 57 52 42 0a 02 ..A.\._SB_PWRB.. 02b0: a0 46 08 44 54 53 45 54 52 41 50 0a 47 a0 42 06 .F.DTSETRAP.G.B. 02c0: 90 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 .\/._SB_PCI0LPCB 02d0: 45 43 4f 4b 93 45 43 44 59 00 a0 27 92 95 44 54 ECOK.ECDY..'..DT 02e0: 53 31 44 54 53 32 70 44 54 53 31 5c 2f 05 5f 53 S1DTS2pDTS1\/._S 02f0: 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b B_PCI0LPCBEC0_SK 0300: 54 41 a1 1d 70 44 54 53 32 5c 2f 05 5f 53 42 5f TA..pDTS2\/._SB_ 0310: 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 PCI0LPCBEC0_SKTA 0320: a1 16 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 0330: 42 50 48 53 53 0a 10 5c 2e 5f 50 52 5f 52 50 50 BPHSS..\._PR_RPP 0340: 43 a4 12 04 02 00 00 14 1e 47 45 54 42 0b 77 68 C........GETB.wh 0350: 0a 08 60 77 69 0a 08 61 5b 13 6a 60 61 54 42 46 ..`wi..a[.j`aTBF 0360: 33 a4 54 42 46 33 14 42 09 50 4e 4f 54 08 a0 4a 3.TBF3.B.PNOT..J 0370: 06 4d 50 45 4e a0 31 7b 50 44 43 30 0a 08 00 86 .MPEN.1{PDC0.... 0380: 5c 2e 5f 50 52 5f 43 50 55 30 0a 80 a0 1a 7b 50 \._PR_CPU0....{P 0390: 44 43 30 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC0...[".d.\._PR 03a0: 5f 43 50 55 30 0a 81 a0 31 7b 50 44 43 31 0a 08 _CPU0...1{PDC1.. 03b0: 00 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 a0 1a ..\._PR_CPU1.... 03c0: 7b 50 44 43 31 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC1...[".d.\._ 03d0: 50 52 5f 43 50 55 31 0a 81 a1 1f 86 5c 2e 5f 50 PR_CPU1.....\._P 03e0: 52 5f 43 50 55 30 0a 80 5b 22 0a 64 86 5c 2e 5f R_CPU0..[".d.\._ 03f0: 50 52 5f 43 50 55 30 0a 81 14 17 54 52 41 50 09 PR_CPU0....TRAP. 0400: 70 68 53 4d 49 46 70 00 54 52 50 30 a4 53 4d 49 phSMIFp.TRP0.SMI 0410: 46 10 41 0f 5f 53 42 5f 14 4a 0e 5f 49 4e 49 00 F.A._SB_.J._INI. 0420: 70 0b 99 99 4d 41 52 4b a0 1c 44 54 53 45 54 52 p...MARK..DTSETR 0430: 41 50 0a 47 5e 2f 03 50 43 49 30 4c 50 43 42 50 AP.G^/.PCI0LPCBP 0440: 48 53 53 0a 10 70 0b d0 07 4f 53 59 53 a0 4a 09 HSS..p...OSYS.J. 0450: 5b 12 5f 4f 53 49 60 a0 18 5f 4f 53 49 0d 4c 69 [._OSI`.._OSI.Li 0460: 6e 75 78 00 70 01 4c 49 4e 58 70 00 45 43 44 59 nux.p.LINXp.ECDY 0470: a0 1b 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 .._OSI.Windows 2 0480: 30 30 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 001.p...OSYS.._O 0490: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04a0: 53 50 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f SP1.p...OSYS.._O 04b0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04c0: 53 50 32 00 70 0b d2 07 4f 53 59 53 a0 1b 5f 4f SP2.p...OSYS.._O 04d0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 00 SI.Windows 2006. 04e0: 70 0b d6 07 4f 53 59 53 a0 14 90 4d 50 45 4e 93 p...OSYS...MPEN. 04f0: 4f 53 59 53 0b d1 07 54 52 41 50 0a 3d 54 52 41 OSYS...TRAP.=TRA 0500: 50 0a 2b 5b 80 47 4e 56 53 00 0c bc 2d 6e bf 0b P.+[.GNVS...-n.. 0510: 00 01 5b 81 45 24 47 4e 56 53 10 4f 53 59 53 10 ..[.E$GNVS.OSYS. 0520: 53 4d 49 46 08 50 52 4d 30 08 50 52 4d 31 08 53 SMIF.PRM0.PRM1.S 0530: 43 49 46 08 50 52 4d 32 08 50 52 4d 33 08 4c 43 CIF.PRM2.PRM3.LC 0540: 4b 46 08 50 52 4d 34 08 50 52 4d 35 08 50 38 30 KF.PRM4.PRM5.P80 0550: 44 20 4c 49 44 53 08 50 57 52 53 08 44 42 47 53 D LIDS.PWRS.DBGS 0560: 08 4c 49 4e 58 08 00 08 41 43 54 31 08 41 43 54 .LINX...ACT1.ACT 0570: 54 08 50 53 56 54 08 54 43 31 56 08 54 43 32 56 T.PSVT.TC1V.TC2V 0580: 08 54 53 50 56 08 43 52 54 54 08 44 54 53 45 08 .TSPV.CRTT.DTSE. 0590: 44 54 53 31 08 44 54 53 32 08 00 40 05 41 50 49 DTS1.DTS2..@.API 05a0: 43 08 4d 50 45 4e 08 50 43 50 30 08 50 43 50 31 C.MPEN.PCP0.PCP1 05b0: 08 50 50 43 4d 08 00 28 43 4d 41 50 08 43 4d 42 .PPCM..(CMAP.CMB 05c0: 50 08 4c 50 54 50 08 46 44 43 50 08 00 30 49 47 P.LPTP.FDCP..0IG 05d0: 44 53 08 54 4c 53 54 08 43 41 44 4c 08 50 41 44 DS.TLST.CADL.PAD 05e0: 4c 08 43 53 54 45 10 4e 53 54 45 10 53 53 54 45 L.CSTE.NSTE.SSTE 05f0: 10 4e 44 49 44 08 44 49 44 31 20 44 49 44 32 20 .NDID.DID1 DID2 0600: 44 49 44 33 20 44 49 44 34 20 44 49 44 35 20 00 DID3 DID4 DID5 . 0610: 40 06 42 4c 43 53 08 42 52 54 4c 08 41 4c 53 45 @.BLCS.BRTL.ALSE 0620: 08 41 4c 41 46 08 4c 4c 4f 57 08 4c 48 49 48 08 .ALAF.LLOW.LHIH. 0630: 00 08 45 4d 41 45 08 45 4d 41 50 10 45 4d 41 4c ..EMAE.EMAP.EMAL 0640: 10 00 08 4d 45 46 45 08 00 18 54 50 4d 50 08 54 ...MEFE...TPMP.T 0650: 50 4d 45 08 00 40 04 47 54 46 30 38 47 54 46 32 PME..@.GTF08GTF2 0660: 38 49 44 45 4d 08 47 54 46 31 38 00 40 09 41 53 8IDEM.GTF18.@.AS 0670: 4c 42 20 49 42 54 54 08 49 50 41 54 08 49 54 56 LB IBTT.IPAT.ITV 0680: 46 08 49 54 56 4d 08 49 50 53 43 08 49 42 4c 43 F.ITVM.IPSC.IBLC 0690: 08 49 42 49 41 08 49 53 53 43 08 49 34 30 39 08 .IBIA.ISSC.I409. 06a0: 49 35 30 39 08 49 36 30 39 08 49 37 30 39 08 49 I509.I609.I709.I 06b0: 44 4d 4d 08 49 44 4d 53 08 49 46 31 45 08 48 56 DMM.IDMS.IF1E.HV 06c0: 43 4f 08 4e 58 44 31 20 4e 58 44 32 20 4d 41 52 CO.NXD1 NXD2 MAR 06d0: 4b 10 42 52 41 44 08 42 54 45 4e 08 56 56 45 4e K.BRAD.BTEN.VVEN 06e0: 08 42 47 54 4c 08 54 4d 45 45 01 00 07 53 43 55 .BGTL.TMEE...SCU 06f0: 30 01 53 43 55 31 01 53 43 55 32 01 53 43 55 33 0.SCU1.SCU2.SCU3 0700: 01 00 04 58 4b 53 50 01 58 4b 49 4e 01 58 4b 49 ...XKSP.XKIN.XKI 0710: 44 01 58 4b 4f 4b 01 00 04 42 47 55 31 08 42 53 D.XKOK...BGU1.BS 0720: 54 31 08 42 46 43 31 10 57 4b 4c 4e 08 57 41 4b T1.BFC1.WKLN.WAK 0730: 46 08 44 53 4d 44 08 42 41 59 53 08 48 41 50 45 F.DSMD.BAYS.HAPE 0740: 01 00 07 44 54 53 4d 01 00 07 4f 44 54 31 08 4f ...DTSM...ODT1.O 0750: 44 54 32 08 44 54 53 57 08 08 44 53 45 4e 01 08 DT2.DTSW..DSEN.. 0760: 45 43 4f 4e 00 08 47 50 49 43 00 08 43 54 59 50 ECON..GPIC..CTYP 0770: 00 08 4c 30 31 43 00 08 56 46 4e 30 00 08 56 46 ..L01C..VFN0..VF 0780: 4e 31 00 10 4a 7c 5f 47 50 45 14 46 35 5f 4c 30 N1..J|_GPE.F5_L0 0790: 31 00 72 4c 30 31 43 01 4c 30 31 43 50 38 58 48 1.rL01C.L01CP8XH 07a0: 00 01 50 38 58 48 01 4c 30 31 43 a0 48 08 90 93 ..P8XH.L01C.H... 07b0: 52 50 31 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 RP1D.\/._SB_PCI0 07c0: 52 50 30 31 48 50 53 58 5b 22 0a 64 a0 40 05 5c RP01HPSX[".d.@.\ 07d0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 /._SB_PCI0RP01PD 07e0: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 07f0: 50 30 31 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f P01PDCXp.\/._SB_ 0800: 50 43 49 30 52 50 30 31 48 50 53 58 86 5c 2f 03 PCI0RP01HPSX.\/. 0810: 5f 53 42 5f 50 43 49 30 52 50 30 31 00 a1 16 70 _SB_PCI0RP01...p 0820: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0830: 48 50 53 58 a0 48 08 90 93 52 50 32 44 00 5c 2f HPSX.H...RP2D.\/ 0840: 04 5f 53 42 5f 50 43 49 30 52 50 30 32 48 50 53 ._SB_PCI0RP02HPS 0850: 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 5f 50 X[".d.@.\/._SB_P 0860: 43 49 30 52 50 30 32 50 44 43 58 70 01 5c 2f 04 CI0RP02PDCXp.\/. 0870: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 44 43 58 _SB_PCI0RP02PDCX 0880: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 0890: 32 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 2HPSX.\/._SB_PCI 08a0: 30 52 50 30 32 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP02...p.\/._SB 08b0: 5f 50 43 49 30 52 50 30 32 48 50 53 58 a0 48 08 _PCI0RP02HPSX.H. 08c0: 90 93 52 50 33 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP3D.\/._SB_PC 08d0: 49 30 52 50 30 33 48 50 53 58 5b 22 0a 64 a0 40 I0RP03HPSX[".d.@ 08e0: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 .\/._SB_PCI0RP03 08f0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0900: 30 52 50 30 33 50 44 43 58 70 01 5c 2f 04 5f 53 0RP03PDCXp.\/._S 0910: 42 5f 50 43 49 30 52 50 30 33 48 50 53 58 86 5c B_PCI0RP03HPSX.\ 0920: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 33 00 a1 /._SB_PCI0RP03.. 0930: 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .p.\/._SB_PCI0RP 0940: 30 33 48 50 53 58 a0 48 08 90 93 52 50 34 44 00 03HPSX.H...RP4D. 0950: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 48 \/._SB_PCI0RP04H 0960: 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 PSX[".d.@.\/._SB 0970: 5f 50 43 49 30 52 50 30 34 50 44 43 58 70 01 5c _PCI0RP04PDCXp.\ 0980: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 44 /._SB_PCI0RP04PD 0990: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 09a0: 50 30 34 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 P04HPSX.\/._SB_P 09b0: 43 49 30 52 50 30 34 00 a1 16 70 01 5c 2f 04 5f CI0RP04...p.\/._ 09c0: 53 42 5f 50 43 49 30 52 50 30 34 48 50 53 58 a0 SB_PCI0RP04HPSX. 09d0: 48 08 90 93 52 50 35 44 00 5c 2f 04 5f 53 42 5f H...RP5D.\/._SB_ 09e0: 50 43 49 30 52 50 30 35 48 50 53 58 5b 22 0a 64 PCI0RP05HPSX[".d 09f0: a0 40 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .@.\/._SB_PCI0RP 0a00: 30 35 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 05PDCXp.\/._SB_P 0a10: 43 49 30 52 50 30 35 50 44 43 58 70 01 5c 2f 04 CI0RP05PDCXp.\/. 0a20: 5f 53 42 5f 50 43 49 30 52 50 30 35 48 50 53 58 _SB_PCI0RP05HPSX 0a30: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 35 .\/._SB_PCI0RP05 0a40: 00 a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ...p.\/._SB_PCI0 0a50: 52 50 30 35 48 50 53 58 a0 48 08 90 93 52 50 36 RP05HPSX.H...RP6 0a60: 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 D.\/._SB_PCI0RP0 0a70: 36 48 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 6HPSX[".d.@.\/._ 0a80: 53 42 5f 50 43 49 30 52 50 30 36 50 44 43 58 70 SB_PCI0RP06PDCXp 0a90: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 0aa0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0ab0: 30 52 50 30 36 48 50 53 58 86 5c 2f 03 5f 53 42 0RP06HPSX.\/._SB 0ac0: 5f 50 43 49 30 52 50 30 36 00 a1 16 70 01 5c 2f _PCI0RP06...p.\/ 0ad0: 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 50 53 ._SB_PCI0RP06HPS 0ae0: 58 14 42 0d 5f 4c 30 32 00 70 00 47 50 45 43 a0 X.B._L02.p.GPEC. 0af0: 4d 0a 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 M.\/._SB_PCI0LPC 0b00: 42 45 43 4f 4b a0 4e 04 93 44 54 53 57 01 a0 27 BECOK.N..DTSW..' 0b10: 92 95 44 54 53 31 44 54 53 32 70 44 54 53 31 5c ..DTS1DTS2pDTS1\ 0b20: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0b30: 30 5f 53 4b 54 41 a1 1d 70 44 54 53 32 5c 2f 05 0_SKTA..pDTS2\/. 0b40: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f _SB_PCI0LPCBEC0_ 0b50: 53 4b 54 41 a1 48 04 a0 27 92 95 4f 44 54 31 4f SKTA.H..'..ODT1O 0b60: 44 54 32 70 4f 44 54 31 5c 2f 05 5f 53 42 5f 50 DT2pODT1\/._SB_P 0b70: 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 CI0LPCBEC0_SKTA. 0b80: 1d 70 4f 44 54 32 5c 2f 05 5f 53 42 5f 50 43 49 .pODT2\/._SB_PCI 0b90: 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 16 5c 0LPCBEC0_SKTA..\ 0ba0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 50 48 /._SB_PCI0LPCBPH 0bb0: 53 53 0a 10 14 18 5f 4c 30 33 00 86 5c 2f 03 5f SS...._L03..\/._ 0bc0: 53 42 5f 50 43 49 30 55 53 42 31 0a 02 14 18 5f SB_PCI0USB1...._ 0bd0: 4c 30 34 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 L04..\/._SB_PCI0 0be0: 55 53 42 32 0a 02 14 18 5f 4c 30 35 00 86 5c 2f USB2...._L05..\/ 0bf0: 03 5f 53 42 5f 50 43 49 30 55 53 42 35 0a 02 14 ._SB_PCI0USB5... 0c00: 36 5f 4c 30 36 00 a0 27 5c 2f 04 5f 53 42 5f 50 6_L06..'\/._SB_P 0c10: 43 49 30 47 46 58 30 47 53 53 45 5c 2f 04 5f 53 CI0GFX0GSSE\/._S 0c20: 42 5f 50 43 49 30 47 46 58 30 47 53 43 49 a1 07 B_PCI0GFX0GSCI.. 0c30: 70 01 53 43 49 53 14 43 1f 5f 4c 30 39 00 a0 41 p.SCIS.C._L09..A 0c40: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0c50: 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PSPXp.\/._SB_PCI 0c60: 30 52 50 30 31 50 53 50 58 70 01 5c 2f 04 5f 53 0RP01PSPXp.\/._S 0c70: 42 5f 50 43 49 30 52 50 30 31 50 4d 53 58 86 5c B_PCI0RP01PMSX.\ 0c80: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 31 0a 02 /._SB_PCI0RP01.. 0c90: a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .A.\/._SB_PCI0RP 0ca0: 30 32 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 02PSPXp.\/._SB_P 0cb0: 43 49 30 52 50 30 32 50 53 50 58 70 01 5c 2f 04 CI0RP02PSPXp.\/. 0cc0: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 4d 53 58 _SB_PCI0RP02PMSX 0cd0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 0ce0: 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 ...A.\/._SB_PCI0 0cf0: 52 50 30 33 50 53 50 58 70 01 5c 2f 04 5f 53 42 RP03PSPXp.\/._SB 0d00: 5f 50 43 49 30 52 50 30 33 50 53 50 58 70 01 5c _PCI0RP03PSPXp.\ 0d10: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 50 4d /._SB_PCI0RP03PM 0d20: 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 SX.\/._SB_PCI0RP 0d30: 30 33 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 03...A.\/._SB_PC 0d40: 49 30 52 50 30 34 50 53 50 58 70 01 5c 2f 04 5f I0RP04PSPXp.\/._ 0d50: 53 42 5f 50 43 49 30 52 50 30 34 50 53 50 58 70 SB_PCI0RP04PSPXp 0d60: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 .\/._SB_PCI0RP04 0d70: 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 PMSX.\/._SB_PCI0 0d80: 52 50 30 34 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f RP04...A.\/._SB_ 0d90: 50 43 49 30 52 50 30 35 50 53 50 58 70 01 5c 2f PCI0RP05PSPXp.\/ 0da0: 04 5f 53 42 5f 50 43 49 30 52 50 30 35 50 53 50 ._SB_PCI0RP05PSP 0db0: 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 Xp.\/._SB_PCI0RP 0dc0: 30 35 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 05PMSX.\/._SB_PC 0dd0: 49 30 52 50 30 35 0a 02 a0 41 05 5c 2f 04 5f 53 I0RP05...A.\/._S 0de0: 42 5f 50 43 49 30 52 50 30 36 50 53 50 58 70 01 B_PCI0RP06PSPXp. 0df0: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 50 \/._SB_PCI0RP06P 0e00: 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 SPXp.\/._SB_PCI0 0e10: 52 50 30 36 50 4d 53 58 86 5c 2f 03 5f 53 42 5f RP06PMSX.\/._SB_ 0e20: 50 43 49 30 52 50 30 36 0a 02 14 18 5f 4c 30 42 PCI0RP06...._L0B 0e30: 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 50 43 49 ..\/._SB_PCI0PCI 0e40: 42 0a 02 14 18 5f 4c 30 43 00 86 5c 2f 03 5f 53 B...._L0C..\/._S 0e50: 42 5f 50 43 49 30 55 53 42 33 0a 02 14 4b 0b 5f B_PCI0USB3...K._ 0e60: 4c 30 44 00 a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 L0D..;\/._SB_PCI 0e70: 30 45 48 43 31 50 4d 45 53 70 01 5c 2f 04 5f 53 0EHC1PMESp.\/._S 0e80: 42 5f 50 43 49 30 45 48 43 31 50 4d 45 53 86 5c B_PCI0EHC1PMES.\ 0e90: 2f 03 5f 53 42 5f 50 43 49 30 45 48 43 31 0a 02 /._SB_PCI0EHC1.. 0ea0: a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 30 45 48 43 .;\/._SB_PCI0EHC 0eb0: 32 50 4d 45 53 70 01 5c 2f 04 5f 53 42 5f 50 43 2PMESp.\/._SB_PC 0ec0: 49 30 45 48 43 32 50 4d 45 53 86 5c 2f 03 5f 53 I0EHC2PMES.\/._S 0ed0: 42 5f 50 43 49 30 45 48 43 32 0a 02 a0 3b 5c 2f B_PCI0EHC2...;\/ 0ee0: 04 5f 53 42 5f 50 43 49 30 48 44 45 46 50 4d 45 ._SB_PCI0HDEFPME 0ef0: 53 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 48 44 Sp.\/._SB_PCI0HD 0f00: 45 46 50 4d 45 53 86 5c 2f 03 5f 53 42 5f 50 43 EFPMES.\/._SB_PC 0f10: 49 30 48 44 45 46 0a 02 14 18 5f 4c 30 45 00 86 I0HDEF...._L0E.. 0f20: 5c 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 34 0a \/._SB_PCI0USB4. 0f30: 02 14 1c 5f 4c 31 42 00 80 4c 50 4f 4c 4c 50 4f ..._L1B..LPOLLPO 0f40: 4c 86 5c 2e 5f 53 42 5f 4c 49 44 30 0a 80 10 46 L.\._SB_LID0...F 0f50: 0b 5f 50 52 5f 5b 83 0b 43 50 55 30 00 10 10 00 ._PR_[..CPU0.... 0f60: 00 06 5b 83 0b 43 50 55 31 01 10 10 00 00 06 14 ..[..CPU1....... 0f70: 45 09 52 50 50 43 00 a0 4d 08 93 4f 53 59 53 0b E.RPPC..M..OSYS. 0f80: d2 07 a0 42 08 7b 43 46 47 44 01 00 a0 42 04 94 ...B.{CFGD...B.. 0f90: 5e 2e 43 50 55 30 5f 50 50 43 00 74 5e 2e 43 50 ^.CPU0_PPC.t^.CP 0fa0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 0fb0: 43 50 4e 4f 54 72 5e 2e 43 50 55 30 5f 50 50 43 CPNOTr^.CPU0_PPC 0fc0: 01 5e 2e 43 50 55 30 5f 50 50 43 50 4e 4f 54 a1 .^.CPU0_PPCPNOT. 0fd0: 35 72 5e 2e 43 50 55 30 5f 50 50 43 01 5e 2e 43 5r^.CPU0_PPC.^.C 0fe0: 50 55 30 5f 50 50 43 50 4e 4f 54 74 5e 2e 43 50 PU0_PPCPNOTt^.CP 0ff0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 1000: 43 50 4e 4f 54 08 46 57 53 4f 0d 46 57 53 4f 00 CPNOT.FWSO.FWSO. 1010: 08 5f 50 53 43 00 14 12 5f 50 53 30 00 70 5f 50 ._PSC..._PS0.p_P 1020: 53 43 60 70 00 5f 50 53 43 14 0d 5f 50 53 33 00 SC`p._PSC.._PS3. 1030: 70 0a 03 5f 50 53 43 10 8c fb 04 5f 53 42 5f 5b p.._PSC...._SB_[ 1040: 82 4f 3e 41 4d 57 30 08 5f 48 49 44 0d 70 6e 70 .O>AMW0._HID.pnp 1050: 30 63 31 34 00 08 5f 55 49 44 00 08 5f 57 44 47 0c14.._UID.._WDG 1060: 11 3f 0a 3c a7 1d 85 2e 53 d0 5f 49 9d fa 1a 4a .?.<....S._I...J 1070: d6 2e 6a 86 41 43 01 00 3b 6d 43 71 dd fb 72 4c ..j.AC..;mCq..rL 1080: bc b8 43 5b fe 0d 64 f9 42 43 01 00 21 12 90 05 ..C[..d.BC..!... 1090: 66 d5 d1 11 b2 f0 00 a0 c9 06 29 10 42 41 01 00 f.........).BA.. 10a0: 08 53 54 41 43 11 07 0a 04 01 14 03 00 14 1f 57 .STAC..........W 10b0: 51 41 43 01 70 0d 4d 58 4d 54 43 43 6f 6e 66 69 QAC.p.MXMTCConfi 10c0: 67 44 61 74 61 00 5b 31 a4 53 54 41 43 08 53 54 gData.[1.STAC.ST 10d0: 42 43 11 07 0a 04 01 00 00 00 14 34 57 51 42 43 BC.........4WQBC 10e0: 01 70 0d 47 65 74 20 4d 58 4d 54 43 43 6f 6e 74 .p.Get MXMTCCont 10f0: 72 6f 6c 44 61 74 61 3a 20 53 54 42 43 20 3d 20 rolData: STBC = 1100: 00 5b 31 70 53 54 42 43 5b 31 a4 53 54 42 43 14 .[1pSTBC[1.STBC. 1110: 47 06 57 53 42 43 02 70 69 53 54 42 43 70 0d 53 G.WSBC.piSTBCp.S 1120: 65 74 20 4d 58 4d 54 43 43 6f 6e 74 72 6f 6c 44 et MXMTCControlD 1130: 61 74 61 3a 20 53 54 42 43 20 3d 20 00 5b 31 70 ata: STBC = .[1p 1140: 53 54 42 43 5b 31 a0 30 93 5e 5e 2f 03 50 43 49 STBC[1.0.^^/.PCI 1150: 30 4c 50 43 42 45 43 4f 4b 01 70 83 88 53 54 42 0LPCBECOK.p..STB 1160: 43 01 00 5e 5e 2f 04 50 43 49 30 4c 50 43 42 45 C..^^/.PCI0LPCBE 1170: 43 30 5f 53 4b 54 43 08 57 51 42 41 11 43 2b 0b C0_SKTC.WQBA.C+. 1180: ae 02 46 4f 4d 42 01 00 00 00 9e 02 00 00 c0 0b ..FOMB.......... 1190: 00 00 44 53 00 01 1a 7d da 54 28 d9 85 00 01 06 ..DS...}.T(..... 11a0: 18 42 10 07 10 0a 4b 61 02 c9 21 52 3c 18 94 05 .B....Ka..!R<... 11b0: 10 43 88 57 04 44 04 84 bc 0a b0 29 c0 24 88 fa .C.W.D.....).$.. 11c0: f7 87 28 09 0e 25 04 42 12 05 98 17 a0 5b 80 61 ..(..%.B.....[.a 11d0: 01 b6 05 98 16 e0 18 92 4a 03 a7 04 96 02 21 a1 ........J.....!. 11e0: 02 94 0b f0 2d 40 3b a2 24 0b b0 0c 23 02 8f 82 ....-@;.$...#... 11f0: a1 71 68 ec 30 2c 13 4c 83 38 8c b2 91 45 60 dc .qh.0,.L.8...E`. 1200: 4e 05 c8 15 20 4c 80 78 54 61 34 07 45 e0 42 63 N... L.xTa4.E.Bc 1210: 64 40 c8 a3 00 ab a3 d0 a4 12 d8 bd 00 65 02 2c d@...........e., 1220: 0a 10 27 c0 9a 00 63 48 32 28 40 9b 00 5b 20 42 ..'...cH2(@..[ B 1230: 0f d4 19 8a 46 70 02 51 6a 46 11 48 ac 1a 01 85 ....Fp.QjF.H.... 1240: 12 34 46 b0 10 81 c2 86 37 46 98 03 88 d1 fe 20 .4F.....7F..... 1250: 48 20 05 e3 66 91 46 83 1a 6b 82 63 f7 68 4e b8 H ..f.F..k.c.hN. 1260: 73 01 d2 e7 26 90 a3 3b b8 3a 07 4d 86 c7 b0 1e s...&..;.:.M.... 1270: 06 d8 29 00 ef 1a 50 d3 3f 78 26 08 0e 35 44 8f ..)...P.?x&..5D. 1280: 3a dc 09 1c fb 91 30 88 b3 3b 6e ac c3 c9 68 d0 :.....0..;n...h. 1290: a5 0a 30 7b 00 d0 d0 12 9c f6 99 84 7e 0f 38 9f ..0{........~.8. 12a0: 9e 21 89 fc 41 a0 46 e6 ff 3f b4 c7 78 5a 31 43 .!..A.F..?..xZ1C 12b0: 3e 0b 1c 16 13 0b a1 4d 6a 3c 40 40 e1 d1 40 08 >......Mj<@@..@. 12c0: 6f 06 9e af 09 46 86 90 93 f1 a0 06 e0 41 d7 3a o....F.......A.: 12d0: 32 8d 27 a6 21 cf e8 00 22 bf 32 78 0c 41 02 f9 2.'.!...".2x.A.. 12e0: c4 60 b8 c7 81 13 78 02 f0 59 40 10 92 00 21 51 .`....x..Y@...!Q 12f0: e3 a7 47 08 7e 7a 78 93 30 28 1f d2 99 f9 90 e1 ..G.~zx.0(...... 1300: 11 c2 07 c4 7b 9f 3b 19 c1 29 7b a4 e0 b0 7e 0e ....{.;..){...~. 1310: 20 c0 af 0f 8f 0d 09 7c ae 08 8c 1d aa fd 0a 40 ......|.......@ 1320: 08 1e ed 51 e0 54 23 1c 2d 78 08 8a 1c 03 4a cc ...Q.T#.-x....J. 1330: 18 50 03 38 85 d0 e7 73 04 47 14 25 f6 21 19 da .P.8...s.G.%.!.. 1340: 08 e1 1f 39 4e c1 f7 8b 23 3d ad 23 78 91 f0 08 ...9N...#=.#x... 1350: 30 e1 ce 28 a8 38 30 f4 ff 7f 4c 01 dc 7a 3b a6 0..(.80...L..z;. 1360: 80 3e c0 31 05 50 fc ff 3f a6 00 87 a8 c7 14 f4 .>.1.P..?....... 1370: 40 0c 7c 2e a1 0d ff 96 c1 8e 03 87 74 6a 8f 28 @.|.........tj.( 1380: 80 29 79 47 14 50 8c 14 d6 f1 04 18 05 3c 9b a0 .)yG.P.......<.. 1390: 22 1d 4f 80 ce ff ff 78 02 58 b8 9a bc 92 84 7d ".O....x.X.....} 13a0: 1e 78 1d 89 14 e3 41 e2 b5 e4 c1 24 46 98 08 8f .x....A....$F... 13b0: 27 1e 47 c0 b7 82 28 91 8e 3e c4 83 49 28 63 3e '.G...(..>..I(c> 13c0: a3 84 89 f9 04 70 22 ef 27 46 0a 73 2a 8f 27 2c .....p".'F.s*.', 13d0: c4 f1 04 a0 85 e2 e3 09 3a 2c 84 fe ff c7 13 dc ........:,...... 13e0: e1 c1 a7 0c fc 85 0c c6 f9 04 30 24 f0 7c 02 ca ..........0$.|.. 13f0: db 18 e6 80 02 8c 14 da f4 a9 d1 a8 55 83 32 35 ............U.25 1400: ca 34 a8 d5 a7 52 63 c6 4c 9c 52 bc 6c 8d df f2 .4...Rc.L.R.l... 1410: 9e 09 02 b1 20 0a 81 38 cc f3 42 20 96 a2 01 84 .... ..8..B .... 1420: 85 06 a1 42 a9 05 e2 98 20 34 92 0a 10 f6 ff 07 ...B.... 4...... 1430: 5b 82 1b 4c 49 44 30 08 5f 48 49 44 0c 41 d0 0c [..LID0._HID.A.. 1440: 0d 14 0b 5f 4c 49 44 00 a4 4c 50 4f 4c 5b 82 0f ..._LID..LPOL[.. 1450: 50 57 52 42 08 5f 48 49 44 0c 41 d0 0c 0c 5b 82 PWRB._HID.A...[. 1460: 84 b9 04 50 43 49 30 14 09 5f 53 33 44 00 a4 0a ...PCI0.._S3D... 1470: 02 14 09 5f 53 34 44 00 a4 0a 02 08 5f 48 49 44 ..._S4D....._HID 1480: 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 d0 0a 03 5b .A...._CID.A...[ 1490: 82 43 0e 4d 43 48 43 08 5f 41 44 52 00 5b 80 48 .C.MCHC._ADR.[.H 14a0: 42 55 53 02 0a 40 0a c0 5b 81 4a 0c 48 42 55 53 BUS..@..[.J.HBUS 14b0: 03 45 50 45 4e 01 00 0b 45 50 42 52 14 00 20 4d .EPEN...EPBR.. M 14c0: 48 45 4e 01 00 0d 4d 48 42 52 12 00 40 0a 50 58 HEN...MHBR..@.PX 14d0: 45 4e 01 50 58 53 5a 02 00 17 50 58 42 52 06 00 EN.PXSZ...PXBR.. 14e0: 20 44 49 45 4e 01 00 0b 44 49 42 52 14 00 20 49 DIEN...DIBR.. I 14f0: 50 45 4e 01 00 0b 49 50 42 52 14 00 40 0e 00 04 PEN...IPBR..@... 1500: 50 4d 30 48 02 00 02 50 4d 31 4c 02 00 02 50 4d PM0H...PM1L...PM 1510: 31 48 02 00 02 50 4d 32 4c 02 00 02 50 4d 32 48 1H...PM2L...PM2H 1520: 02 00 02 50 4d 33 4c 02 00 02 50 4d 33 48 02 00 ...PM3L...PM3H.. 1530: 02 50 4d 34 4c 02 00 02 50 4d 34 48 02 00 02 50 .PM4L...PM4H...P 1540: 4d 35 4c 02 00 02 50 4d 35 48 02 00 02 50 4d 36 M5L...PM5H...PM6 1550: 4c 02 00 02 50 4d 36 48 02 00 02 00 07 48 45 4e L...PM6H.....HEN 1560: 41 01 00 40 05 54 55 55 44 10 00 40 06 00 04 54 A..@.TUUD..@...T 1570: 4c 55 44 0c 08 42 55 46 30 11 4d 20 0b 08 02 88 LUD..BUF0.M .... 1580: 0d 00 02 0c 00 00 00 00 00 ff 00 00 00 00 01 87 ................ 1590: 17 00 01 0c 03 00 00 00 00 00 00 00 00 f7 0c 00 ................ 15a0: 00 00 00 00 00 f8 0c 00 00 47 01 f8 0c f8 0c 01 .........G...... 15b0: 08 87 17 00 01 0c 03 00 00 00 00 00 0d 00 00 ff ................ 15c0: ff 00 00 00 00 00 00 00 f3 00 00 87 17 00 00 0c ................ 15d0: 03 00 00 00 00 00 00 0a 00 ff ff 0b 00 00 00 00 ................ 15e0: 00 00 00 02 00 87 17 00 00 0c 03 00 00 00 00 00 ................ 15f0: 00 0c 00 ff 3f 0c 00 00 00 00 00 00 40 00 00 87 ....?.......@... 1600: 17 00 00 0c 03 00 00 00 00 00 40 0c 00 ff 7f 0c ..........@..... 1610: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 1620: 00 00 00 00 80 0c 00 ff bf 0c 00 00 00 00 00 00 ................ 1630: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0c @............... 1640: 00 ff ff 0c 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1650: 00 0c 03 00 00 00 00 00 00 0d 00 ff 3f 0d 00 00 ............?... 1660: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1670: 00 00 40 0d 00 ff 7f 0d 00 00 00 00 00 00 40 00 ..@...........@. 1680: 00 87 17 00 00 0c 03 00 00 00 00 00 80 0d 00 ff ................ 1690: bf 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c ........@....... 16a0: 03 00 00 00 00 00 c0 0d 00 ff ff 0d 00 00 00 00 ................ 16b0: 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 ..@............. 16c0: 00 0e 00 ff 3f 0e 00 00 00 00 00 00 40 00 00 87 ....?.......@... 16d0: 17 00 00 0c 03 00 00 00 00 00 40 0e 00 ff 7f 0e ..........@..... 16e0: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 16f0: 00 00 00 00 80 0e 00 ff bf 0e 00 00 00 00 00 00 ................ 1700: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0e @............... 1710: 00 ff ff 0e 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1720: 00 0c 03 00 00 00 00 00 00 0f 00 ff ff 0f 00 00 ................ 1730: 00 00 00 00 00 01 00 87 17 00 00 0c 03 00 00 00 ................ 1740: 00 00 00 00 00 ff ff ff df 00 00 00 00 00 00 00 ................ 1750: 00 87 17 00 00 0c 03 00 00 00 00 00 00 00 f0 ff ................ 1760: ff bf fe 00 00 00 00 00 00 c0 0e 87 17 00 00 0c ................ 1770: 03 00 00 00 00 00 00 d4 fe ff 4f d4 fe 00 00 00 ..........O..... 1780: 00 00 00 00 00 79 00 14 4b 3d 5f 43 52 53 08 a0 .....y..K=_CRS.. 1790: 1c 5e 2e 4d 43 48 43 50 4d 31 4c 8a 42 55 46 30 .^.MCHCPM1L.BUF0 17a0: 0a 7c 43 30 4c 4e 70 00 43 30 4c 4e a0 1f 93 5e .|C0LNp.C0LN...^ 17b0: 2e 4d 43 48 43 50 4d 31 4c 01 8d 42 55 46 30 0b .MCHCPM1L..BUF0. 17c0: 58 03 43 30 52 57 70 00 43 30 52 57 a0 1c 5e 2e X.C0RWp.C0RW..^. 17d0: 4d 43 48 43 50 4d 31 48 8a 42 55 46 30 0a 96 43 MCHCPM1H.BUF0..C 17e0: 34 4c 4e 70 00 43 34 4c 4e a0 1f 93 5e 2e 4d 43 4LNp.C4LN...^.MC 17f0: 48 43 50 4d 31 48 01 8d 42 55 46 30 0b 28 04 43 HCPM1H..BUF0.(.C 1800: 34 52 57 70 00 43 34 52 57 a0 1c 5e 2e 4d 43 48 4RWp.C4RW..^.MCH 1810: 43 50 4d 32 4c 8a 42 55 46 30 0a b0 43 38 4c 4e CPM2L.BUF0..C8LN 1820: 70 00 43 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 p.C8LN...^.MCHCP 1830: 4d 32 4c 01 8d 42 55 46 30 0b f8 04 43 38 52 57 M2L..BUF0...C8RW 1840: 70 00 43 38 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d p.C8RW..^.MCHCPM 1850: 32 48 8a 42 55 46 30 0a ca 43 43 4c 4e 70 00 43 2H.BUF0..CCLNp.C 1860: 43 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 32 48 CLN...^.MCHCPM2H 1870: 01 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 43 ..BUF0...CCRWp.C 1880: 43 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d 33 4c 8a CRW..^.MCHCPM3L. 1890: 42 55 46 30 0a e4 44 30 4c 4e 70 00 44 30 4c 4e BUF0..D0LNp.D0LN 18a0: a0 1f 93 5e 2e 4d 43 48 43 50 4d 33 4c 01 8d 42 ...^.MCHCPM3L..B 18b0: 55 46 30 0b 98 06 44 30 52 57 70 00 44 30 52 57 UF0...D0RWp.D0RW 18c0: a0 1c 5e 2e 4d 43 48 43 50 4d 33 48 8a 42 55 46 ..^.MCHCPM3H.BUF 18d0: 30 0a fe 44 34 4c 4e 70 00 44 34 4c 4e a0 1f 93 0..D4LNp.D4LN... 18e0: 5e 2e 4d 43 48 43 50 4d 33 48 01 8d 42 55 46 30 ^.MCHCPM3H..BUF0 18f0: 0b 68 07 44 34 52 57 70 00 44 34 52 57 a0 1d 5e .h.D4RWp.D4RW..^ 1900: 2e 4d 43 48 43 50 4d 34 4c 8a 42 55 46 30 0b 18 .MCHCPM4L.BUF0.. 1910: 01 44 38 4c 4e 70 00 44 38 4c 4e a0 1f 93 5e 2e .D8LNp.D8LN...^. 1920: 4d 43 48 43 50 4d 34 4c 01 8d 42 55 46 30 0b 38 MCHCPM4L..BUF0.8 1930: 08 44 38 52 57 70 00 44 38 52 57 a0 1d 5e 2e 4d .D8RWp.D8RW..^.M 1940: 43 48 43 50 4d 34 48 8a 42 55 46 30 0b 32 01 44 CHCPM4H.BUF0.2.D 1950: 43 4c 4e 70 00 44 43 4c 4e a0 1f 93 5e 2e 4d 43 CLNp.DCLN...^.MC 1960: 48 43 50 4d 34 48 01 8d 42 55 46 30 0b 08 09 44 HCPM4H..BUF0...D 1970: 43 52 57 70 00 44 43 52 57 a0 1d 5e 2e 4d 43 48 CRWp.DCRW..^.MCH 1980: 43 50 4d 35 4c 8a 42 55 46 30 0b 4c 01 45 30 4c CPM5L.BUF0.L.E0L 1990: 4e 70 00 45 30 4c 4e a0 1f 93 5e 2e 4d 43 48 43 Np.E0LN...^.MCHC 19a0: 50 4d 35 4c 01 8d 42 55 46 30 0b d8 09 45 30 52 PM5L..BUF0...E0R 19b0: 57 70 00 45 30 52 57 a0 1d 5e 2e 4d 43 48 43 50 Wp.E0RW..^.MCHCP 19c0: 4d 35 48 8a 42 55 46 30 0b 66 01 45 34 4c 4e 70 M5H.BUF0.f.E4LNp 19d0: 00 45 34 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d .E4LN...^.MCHCPM 19e0: 35 48 01 8d 42 55 46 30 0b a8 0a 45 34 52 57 70 5H..BUF0...E4RWp 19f0: 00 45 34 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 .E4RW..^.MCHCPM6 1a00: 4c 8a 42 55 46 30 0b 80 01 45 38 4c 4e 70 00 45 L.BUF0...E8LNp.E 1a10: 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 4c 8LN...^.MCHCPM6L 1a20: 01 8d 42 55 46 30 0b 78 0b 45 38 52 57 70 00 45 ..BUF0.x.E8RWp.E 1a30: 38 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 48 8a 8RW..^.MCHCPM6H. 1a40: 42 55 46 30 0b 9a 01 45 43 4c 4e 70 00 45 43 4c BUF0...ECLNp.ECL 1a50: 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 48 01 8d N...^.MCHCPM6H.. 1a60: 42 55 46 30 0b 48 0c 45 43 52 57 70 00 45 43 52 BUF0.H.ECRWp.ECR 1a70: 57 a0 1d 5e 2e 4d 43 48 43 50 4d 30 48 8a 42 55 W..^.MCHCPM0H.BU 1a80: 46 30 0b b4 01 46 30 4c 4e 70 00 46 30 4c 4e a0 F0...F0LNp.F0LN. 1a90: 1f 93 5e 2e 4d 43 48 43 50 4d 30 48 01 8d 42 55 ..^.MCHCPM0H..BU 1aa0: 46 30 0b 18 0d 46 30 52 57 70 00 46 30 52 57 8a F0...F0RWp.F0RW. 1ab0: 42 55 46 30 0b c2 01 4d 31 4d 4e 8a 42 55 46 30 BUF0...M1MN.BUF0 1ac0: 0b c6 01 4d 31 4d 58 8a 42 55 46 30 0b ce 01 4d ...M1MX.BUF0...M 1ad0: 31 4c 4e 8a 42 55 46 30 0b dc 01 4d 32 4d 4e 8a 1LN.BUF0...M2MN. 1ae0: 42 55 46 30 0b e0 01 4d 32 4d 58 8a 42 55 46 30 BUF0...M2MX.BUF0 1af0: 0b e8 01 4d 32 4c 4e 79 5e 2e 4d 43 48 43 50 58 ...M2LNy^.MCHCPX 1b00: 42 52 0a 1a 4d 31 4d 58 7a 0c 00 00 00 10 5e 2e BR..M1MXz.....^. 1b10: 4d 43 48 43 50 58 53 5a 60 72 4d 31 4d 58 60 4d MCHCPXSZ`rM1MX`M 1b20: 32 4d 4e 72 74 4d 32 4d 58 4d 32 4d 4e 00 01 4d 2MNrtM2MXM2MN..M 1b30: 32 4c 4e 74 4d 31 4d 58 01 4d 31 4d 58 79 5e 2e 2LNtM1MX.M1MXy^. 1b40: 4d 43 48 43 54 4c 55 44 0a 14 4d 31 4d 4e 72 74 MCHCTLUD..M1MNrt 1b50: 4d 31 4d 58 4d 31 4d 4e 00 01 4d 31 4c 4e a4 42 M1MXM1MN..M1LN.B 1b60: 55 46 30 14 47 28 5f 50 52 54 00 a0 45 0f 47 50 UF0.G(_PRT..E.GP 1b70: 49 43 a4 12 4d 0e 13 12 0b 04 0c ff ff 01 00 00 IC..M........... 1b80: 00 0a 10 12 0b 04 0c ff ff 02 00 00 00 0a 10 12 ................ 1b90: 0b 04 0c ff ff 07 00 00 00 0a 10 12 0b 04 0c ff ................ 1ba0: ff 19 00 00 00 0a 14 12 0b 04 0c ff ff 1a 00 00 ................ 1bb0: 00 0a 10 12 0b 04 0c ff ff 1a 00 01 00 0a 15 12 ................ 1bc0: 0c 04 0c ff ff 1a 00 0a 02 00 0a 12 12 0b 04 0c ................ 1bd0: ff ff 1b 00 00 00 0a 16 12 0b 04 0c ff ff 1c 00 ................ 1be0: 00 00 0a 11 12 0b 04 0c ff ff 1c 00 01 00 0a 10 ................ 1bf0: 12 0c 04 0c ff ff 1c 00 0a 02 00 0a 12 12 0c 04 ................ 1c00: 0c ff ff 1c 00 0a 03 00 0a 13 12 0b 04 0c ff ff ................ 1c10: 1d 00 00 00 0a 17 12 0b 04 0c ff ff 1d 00 01 00 ................ 1c20: 0a 13 12 0c 04 0c ff ff 1d 00 0a 02 00 0a 12 12 ................ 1c30: 0b 04 0c ff ff 1f 00 00 00 0a 13 12 0b 04 0c ff ................ 1c40: ff 1f 00 01 00 0a 13 12 0c 04 0c ff ff 1f 00 0a ................ 1c50: 02 00 0a 13 12 0c 04 0c ff ff 1f 00 0a 03 00 0a ................ 1c60: 10 a1 49 18 a4 12 45 18 13 12 13 04 0c ff ff 01 ..I...E......... 1c70: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1c80: 0c ff ff 02 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 ......^.LPCBLNKA 1c90: 00 12 13 04 0c ff ff 07 00 00 5e 2e 4c 50 43 42 ..........^.LPCB 1ca0: 4c 4e 4b 41 00 12 13 04 0c ff ff 19 00 00 5e 2e LNKA..........^. 1cb0: 4c 50 43 42 4c 4e 4b 45 00 12 13 04 0c ff ff 1a LPCBLNKE........ 1cc0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1cd0: 0c ff ff 1a 00 01 5e 2e 4c 50 43 42 4c 4e 4b 46 ......^.LPCBLNKF 1ce0: 00 12 14 04 0c ff ff 1a 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1cf0: 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1b 00 00 5e BLNKC..........^ 1d00: 2e 4c 50 43 42 4c 4e 4b 47 00 12 13 04 0c ff ff .LPCBLNKG....... 1d10: 1c 00 00 5e 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 ...^.LPCBLNKB... 1d20: 04 0c ff ff 1c 00 01 5e 2e 4c 50 43 42 4c 4e 4b .......^.LPCBLNK 1d30: 41 00 12 14 04 0c ff ff 1c 00 0a 02 5e 2e 4c 50 A...........^.LP 1d40: 43 42 4c 4e 4b 43 00 12 14 04 0c ff ff 1c 00 0a CBLNKC.......... 1d50: 03 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0c .^.LPCBLNKD..... 1d60: ff ff 1d 00 00 5e 2e 4c 50 43 42 4c 4e 4b 48 00 .....^.LPCBLNKH. 1d70: 12 13 04 0c ff ff 1d 00 01 5e 2e 4c 50 43 42 4c .........^.LPCBL 1d80: 4e 4b 44 00 12 14 04 0c ff ff 1d 00 0a 02 5e 2e NKD...........^. 1d90: 4c 50 43 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1f LPCBLNKC........ 1da0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 ..^.LPCBLNKD.... 1db0: 0c ff ff 1f 00 01 5e 2e 4c 50 43 42 4c 4e 4b 44 ......^.LPCBLNKD 1dc0: 00 12 14 04 0c ff ff 1f 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1dd0: 42 4c 4e 4b 44 00 12 14 04 0c ff ff 1f 00 0a 03 BLNKD........... 1de0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 40 14 50 ^.LPCBLNKA.[.@.P 1df0: 44 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 DRC._HID.A...._U 1e00: 49 44 01 08 42 55 46 30 11 46 06 0a 62 86 09 00 ID..BUF0.F..b... 1e10: 01 00 00 00 00 00 40 00 00 86 09 00 01 00 00 00 ......@......... 1e20: 00 00 40 00 00 86 09 00 01 00 00 00 00 00 10 00 ..@............. 1e30: 00 86 09 00 01 00 00 00 00 00 10 00 00 86 09 00 ................ 1e40: 01 00 00 00 00 00 00 00 00 86 09 00 01 00 00 d2 ................ 1e50: fe 00 00 02 00 86 09 00 01 00 00 d4 fe 00 50 00 ..............P. 1e60: 00 86 09 00 01 00 50 d4 fe 00 b0 04 00 79 00 14 ......P......y.. 1e70: 4d 0b 5f 43 52 53 08 8a 42 55 46 30 0a 04 52 42 M._CRS..BUF0..RB 1e80: 52 30 79 5e 5e 2e 4c 50 43 42 52 43 42 41 0a 0e R0y^^.LPCBRCBA.. 1e90: 52 42 52 30 8a 42 55 46 30 0a 10 4d 42 52 30 79 RBR0.BUF0..MBR0y 1ea0: 5e 5e 2e 4d 43 48 43 4d 48 42 52 0a 0e 4d 42 52 ^^.MCHCMHBR..MBR 1eb0: 30 8a 42 55 46 30 0a 1c 44 42 52 30 79 5e 5e 2e 0.BUF0..DBR0y^^. 1ec0: 4d 43 48 43 44 49 42 52 0a 0c 44 42 52 30 8a 42 MCHCDIBR..DBR0.B 1ed0: 55 46 30 0a 28 45 42 52 30 79 5e 5e 2e 4d 43 48 UF0.(EBR0y^^.MCH 1ee0: 43 45 50 42 52 0a 0c 45 42 52 30 8a 42 55 46 30 CEPBR..EBR0.BUF0 1ef0: 0a 34 58 42 52 30 79 5e 5e 2e 4d 43 48 43 50 58 .4XBR0y^^.MCHCPX 1f00: 42 52 0a 1a 58 42 52 30 8a 42 55 46 30 0a 38 58 BR..XBR0.BUF0.8X 1f10: 53 5a 30 7a 0c 00 00 00 10 5e 5e 2e 4d 43 48 43 SZ0z.....^^.MCHC 1f20: 50 58 53 5a 58 53 5a 30 a4 42 55 46 30 5b 82 4d PXSZXSZ0.BUF0[.M 1f30: 50 50 45 47 50 08 5f 41 44 52 0c 00 00 01 00 14 PPEGP._ADR...... 1f40: 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 2c A._PRT..3GPIC.., 1f50: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 1f60: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 1f70: 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 12 ............E... 1f80: 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 43 A.........^^.LPC 1f90: 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e 2e BLNKA........^^. 1fa0: 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff 0a LPCBLNKB........ 1fb0: 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 1fc0: 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 1fd0: 00 5b 82 49 46 56 47 41 5f 08 5f 41 44 52 00 08 .[.IFVGA_._ADR.. 1fe0: 53 57 49 54 01 08 43 52 54 41 01 08 4c 43 44 41 SWIT..CRTA..LCDA 1ff0: 01 08 54 56 41 41 01 08 56 4c 44 46 01 5b 80 56 ..TVAA..VLDF.[.V 2000: 49 44 53 02 00 0a c8 5b 81 0b 56 49 44 53 03 56 IDS....[..VIDS.V 2010: 44 49 44 20 14 09 5f 53 54 41 00 a4 0a 0f 08 5f DID .._STA....._ 2020: 50 53 43 00 14 0c 5f 50 53 30 00 70 00 5f 50 53 PSC..._PS0.p._PS 2030: 43 14 0c 5f 50 53 31 00 70 01 5f 50 53 43 14 0d C.._PS1.p._PSC.. 2040: 5f 50 53 33 00 70 0a 03 5f 50 53 43 14 10 5f 44 _PS3.p.._PSC.._D 2050: 4f 53 01 70 7b 68 0a 03 00 53 57 49 54 14 17 5f OS.p{h...SWIT.._ 2060: 44 4f 44 00 a4 12 0f 03 0c 00 01 01 00 0c 10 01 DOD............. 2070: 01 00 0b 00 02 5b 82 4d 08 43 52 54 5f 14 0a 5f .....[.M.CRT_.._ 2080: 41 44 52 00 a4 0b 00 01 14 41 06 5f 44 43 53 00 ADR......A._DCS. 2090: 5e 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 ^^^^.LPCBPHSS..p 20a0: 43 41 44 4c 60 70 43 53 54 45 61 7b 60 0a 02 60 CADL`pCSTEa{`..` 20b0: 7b 61 0a 02 61 a0 08 60 70 01 43 52 54 41 a1 07 {a..a..`p.CRTA.. 20c0: 70 00 43 52 54 41 a0 13 43 52 54 41 a0 08 93 61 p.CRTA..CRTA...a 20d0: 0a 02 a4 0a 1f a1 04 a4 0a 1d a1 0f a0 08 93 61 ...............a 20e0: 0a 02 a4 0a 0f a1 04 a4 0a 0d 14 12 5f 44 47 53 ............_DGS 20f0: 00 a0 07 43 52 54 41 a4 01 a1 03 a4 00 14 06 5f ...CRTA........_ 2100: 44 53 53 01 5b 82 47 0e 4c 43 44 5f 14 0a 5f 41 DSS.[.G.LCD_.._A 2110: 44 52 00 a4 0b 10 01 14 4d 05 5f 44 43 53 00 5e DR......M._DCS.^ 2120: 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 ^^^.LPCBPHSS..pC 2130: 41 44 4c 60 70 43 53 54 45 61 7b 60 01 60 7b 61 ADL`pCSTEa{`.`{a 2140: 01 61 a0 08 60 70 01 4c 43 44 41 a1 07 70 00 4c .a..`p.LCDA..p.L 2150: 43 44 41 a0 12 4c 43 44 41 a0 07 93 61 01 a4 0a CDA..LCDA...a... 2160: 1f a1 04 a4 0a 1d a1 0e a0 07 93 61 01 a4 0a 0f ...........a.... 2170: a1 04 a4 0a 0d 14 12 5f 44 47 53 00 a0 07 4c 43 ......._DGS...LC 2180: 44 41 a4 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 DA........_DSS.. 2190: 1d 5f 42 43 4c 00 a4 12 15 0a 0a 46 0a 28 00 0a ._BCL......F.(.. 21a0: 0a 0a 14 0a 1e 0a 28 0a 32 0a 3c 0a 46 14 20 5f ......(.2.<.F. _ 21b0: 42 43 4d 01 78 68 0a 0a 60 61 70 61 5e 5e 5e 5e BCM.xh..`apa^^^^ 21c0: 2f 03 4c 50 43 42 45 43 30 5f 42 52 54 53 14 1e /.LPCBEC0_BRTS.. 21d0: 5f 42 51 43 00 77 5e 5e 5e 5e 2f 03 4c 50 43 42 _BQC.w^^^^/.LPCB 21e0: 45 43 30 5f 42 52 54 53 0a 0a 60 a4 60 5b 82 4d EC0_BRTS..`.`[.M 21f0: 08 54 56 5f 5f 14 0a 5f 41 44 52 00 a4 0b 00 02 .TV__.._ADR..... 2200: 14 41 06 5f 44 43 53 00 5e 5e 5e 5e 2e 4c 50 43 .A._DCS.^^^^.LPC 2210: 42 50 48 53 53 0a 0c 70 43 41 44 4c 60 70 43 53 BPHSS..pCADL`pCS 2220: 54 45 61 7b 60 0a 04 60 7b 61 0a 04 61 a0 08 60 TEa{`..`{a..a..` 2230: 70 01 54 56 41 41 a1 07 70 00 54 56 41 41 a0 13 p.TVAA..p.TVAA.. 2240: 54 56 41 41 a0 08 93 61 0a 04 a4 0a 1f a1 04 a4 TVAA...a........ 2250: 0a 1d a1 0f a0 08 93 61 0a 04 a4 0a 0f a1 04 a4 .......a........ 2260: 0a 0d 14 12 5f 44 47 53 00 a0 07 54 56 41 41 a4 ...._DGS...TVAA. 2270: 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 49 10 44 ......._DSS..I.D 2280: 53 53 57 00 a0 4a 0e 93 53 57 49 54 00 5e 5e 5e SSW..J..SWIT.^^^ 2290: 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 41 44 4c .LPCBPHSS..pCADL 22a0: 60 70 43 53 54 45 61 a0 16 94 61 01 7b 60 61 56 `pCSTEa...a.{`aV 22b0: 4c 44 46 7b 56 4c 44 46 0a fe 56 4c 44 46 a0 43 LDF{VLDF..VLDF.C 22c0: 0a 56 4c 44 46 a0 27 93 60 0a 09 a0 0b 93 61 0a .VLDF.'.`.....a. 22d0: 08 53 54 42 4c 0a 02 a0 0a 93 61 01 53 54 42 4c .STBL.....a.STBL 22e0: 0a 03 a0 0a 93 61 0a 09 53 54 42 4c 01 a0 28 93 .....a..STBL..(. 22f0: 60 0a 0a a0 0b 93 61 0a 08 53 54 42 4c 0a 05 a0 `.....a..STBL... 2300: 0a 93 61 0a 02 53 54 42 4c 01 a0 0b 93 61 0a 0a ..a..STBL....a.. 2310: 53 54 42 4c 0a 04 a0 4b 04 93 60 0a 0b a0 0b 93 STBL...K..`..... 2320: 61 0a 08 53 54 42 4c 0a 02 a0 0b 93 61 0a 09 53 a..STBL.....a..S 2330: 54 42 4c 0a 05 a0 0a 93 61 01 53 54 42 4c 0a 03 TBL.....a.STBL.. 2340: a0 0b 93 61 0a 0a 53 54 42 4c 0a 04 a0 0a 93 61 ...a..STBL.....a 2350: 0a 02 53 54 42 4c 01 a0 0a 93 61 0a 0b 53 54 42 ..STBL....a..STB 2360: 4c 01 a1 0c 70 01 56 4c 44 46 53 54 42 4c 01 a1 L...p.VLDFSTBL.. 2370: 16 a0 14 93 53 57 49 54 01 5e 5e 5e 2e 4c 50 43 ....SWIT.^^^.LPC 2380: 42 50 48 53 53 01 14 45 0b 53 54 42 4c 01 a0 16 BPHSS..E.STBL... 2390: 93 68 01 70 00 43 52 54 41 70 01 4c 43 44 41 70 .h.p.CRTAp.LCDAp 23a0: 00 54 56 41 41 a0 17 93 68 0a 02 70 01 43 52 54 .TVAA...h..p.CRT 23b0: 41 70 00 4c 43 44 41 70 00 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23c0: 68 0a 03 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 23d0: 00 54 56 41 41 a0 17 93 68 0a 04 70 00 43 52 54 .TVAA...h..p.CRT 23e0: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23f0: 68 0a 05 70 00 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2400: 01 54 56 41 41 a0 17 93 68 0a 06 70 01 43 52 54 .TVAA...h..p.CRT 2410: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 2420: 68 0a 07 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2430: 01 54 56 41 41 86 56 47 41 5f 0a 80 5b 82 42 f8 .TVAA.VGA_..[.B. 2440: 47 46 58 30 08 5f 41 44 52 0c 00 00 02 00 14 10 GFX0._ADR....... 2450: 5f 44 4f 53 01 70 7b 68 0a 07 00 44 53 45 4e 14 _DOS.p{h...DSEN. 2460: 41 26 5f 44 4f 44 00 70 00 4e 44 49 44 a0 15 92 A&_DOD.p.NDID... 2470: 93 44 49 44 4c 00 70 53 44 44 4c 44 49 44 31 44 .DIDL.pSDDLDID1D 2480: 49 44 31 a0 15 92 93 44 44 4c 32 00 70 53 44 44 ID1....DDL2.pSDD 2490: 4c 44 49 44 32 44 49 44 32 a0 15 92 93 44 44 4c LDID2DID2....DDL 24a0: 33 00 70 53 44 44 4c 44 49 44 33 44 49 44 33 a0 3.pSDDLDID3DID3. 24b0: 15 92 93 44 44 4c 34 00 70 53 44 44 4c 44 49 44 ...DDL4.pSDDLDID 24c0: 34 44 49 44 34 a0 15 92 93 44 44 4c 35 00 70 53 4DID4....DDL5.pS 24d0: 44 44 4c 44 49 44 35 44 49 44 35 a0 2c 93 4e 44 DDLDID5DID5.,.ND 24e0: 49 44 01 08 54 4d 50 31 12 07 01 0c ff ff ff ff ID..TMP1........ 24f0: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2500: 31 00 00 a4 54 4d 50 31 a0 46 04 93 4e 44 49 44 1...TMP1.F..NDID 2510: 0a 02 08 54 4d 50 32 12 0c 02 0c ff ff ff ff 0c ...TMP2......... 2520: ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 ....p}.....DID1. 2530: 88 54 4d 50 32 00 00 70 7d 0c 00 00 01 00 44 49 .TMP2..p}.....DI 2540: 44 32 00 88 54 4d 50 32 01 00 a4 54 4d 50 32 a0 D2..TMP2...TMP2. 2550: 4f 05 93 4e 44 49 44 0a 03 08 54 4d 50 33 12 11 O..NDID...TMP3.. 2560: 03 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 2570: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2580: 33 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 3..p}.....DID2.. 2590: 54 4d 50 33 01 00 70 7d 0c 00 00 01 00 44 49 44 TMP3..p}.....DID 25a0: 33 00 88 54 4d 50 33 0a 02 00 a4 54 4d 50 33 a0 3..TMP3....TMP3. 25b0: 48 07 93 4e 44 49 44 0a 04 08 54 4d 50 34 12 16 H..NDID...TMP4.. 25c0: 04 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 25d0: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 25e0: 00 88 54 4d 50 34 00 00 70 7d 0c 00 00 01 00 44 ..TMP4..p}.....D 25f0: 49 44 32 00 88 54 4d 50 34 01 00 70 7d 0c 00 00 ID2..TMP4..p}... 2600: 01 00 44 49 44 33 00 88 54 4d 50 34 0a 02 00 70 ..DID3..TMP4...p 2610: 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d 50 34 }.....DID4..TMP4 2620: 0a 03 00 a4 54 4d 50 34 a0 41 09 94 4e 44 49 44 ....TMP4.A..NDID 2630: 0a 04 08 54 4d 50 35 12 1b 05 0c ff ff ff ff 0c ...TMP5......... 2640: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 2650: ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 88 ...p}.....DID1.. 2660: 54 4d 50 35 00 00 70 7d 0c 00 00 01 00 44 49 44 TMP5..p}.....DID 2670: 32 00 88 54 4d 50 35 01 00 70 7d 0c 00 00 01 00 2..TMP5..p}..... 2680: 44 49 44 33 00 88 54 4d 50 35 0a 02 00 70 7d 0c DID3..TMP5...p}. 2690: 00 00 01 00 44 49 44 34 00 88 54 4d 50 35 0a 03 ....DID4..TMP5.. 26a0: 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d .p}.....DID4..TM 26b0: 50 35 0a 04 00 a4 54 4d 50 35 a4 12 05 01 0b 00 P5....TMP5...... 26c0: 04 5b 82 43 06 44 44 30 31 14 1c 5f 41 44 52 08 .[.C.DD01.._ADR. 26d0: a0 09 93 44 49 44 31 00 a4 01 a1 0b a4 7b 0b ff ...DID1......{.. 26e0: ff 44 49 44 31 00 14 0f 5f 44 43 53 00 a4 43 44 .DID1..._DCS..CD 26f0: 44 53 44 49 44 31 14 0f 5f 44 47 53 00 a4 4e 44 DSDID1.._DGS..ND 2700: 44 53 44 49 44 31 14 1f 5f 44 53 53 01 a0 18 93 DSDID1.._DSS.... 2710: 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 {h...........pNS 2720: 54 45 43 53 54 45 5b 82 44 06 44 44 30 32 14 1d TECSTE[.D.DD02.. 2730: 5f 41 44 52 08 a0 0a 93 44 49 44 32 00 a4 0a 02 _ADR....DID2.... 2740: a1 0b a4 7b 0b ff ff 44 49 44 32 00 14 0f 5f 44 ...{...DID2..._D 2750: 43 53 00 a4 43 44 44 53 44 49 44 32 14 0f 5f 44 CS..CDDSDID2.._D 2760: 47 53 00 a4 4e 44 44 53 44 49 44 32 14 1f 5f 44 GS..NDDSDID2.._D 2770: 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 SS....{h........ 2780: 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 41 07 ...pNSTECSTE[.A. 2790: 44 44 30 33 14 1d 5f 41 44 52 08 a0 0a 93 44 49 DD03.._ADR....DI 27a0: 44 33 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 49 44 D3.......{...DID 27b0: 33 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 33 3..._DCS....DID3 27c0: 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 33 14 .......CDDSDID3. 27d0: 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 44 33 14 ._DGS..NDDSDID3. 27e0: 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 ._DSS....{h..... 27f0: 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 5b ......pNSTECSTE[ 2800: 82 41 07 44 44 30 34 14 1d 5f 41 44 52 08 a0 0a .A.DD04.._ADR... 2810: 93 44 49 44 34 00 a4 0a 04 a1 0b a4 7b 0b ff ff .DID4.......{... 2820: 44 49 44 34 00 14 1c 5f 44 43 53 00 a0 0a 93 44 DID4..._DCS....D 2830: 49 44 34 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 ID4.......CDDSDI 2840: 44 34 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 D4.._DGS..NDDSDI 2850: 44 34 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 D4.._DSS....{h.. 2860: 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 .........pNSTECS 2870: 54 45 5b 82 41 07 44 44 30 35 14 1d 5f 41 44 52 TE[.A.DD05.._ADR 2880: 08 a0 0a 93 44 49 44 35 00 a4 0a 05 a1 0b a4 7b ....DID5.......{ 2890: 0b ff ff 44 49 44 35 00 14 1c 5f 44 43 53 00 a0 ...DID5..._DCS.. 28a0: 0a 93 44 49 44 35 00 a4 0a 0b a1 0a a4 43 44 44 ..DID5.......CDD 28b0: 53 44 49 44 35 14 0f 5f 44 47 53 00 a4 4e 44 44 SDID5.._DGS..NDD 28c0: 53 44 49 44 35 14 1f 5f 44 53 53 01 a0 18 93 7b SDID5.._DSS....{ 28d0: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 28e0: 45 43 53 54 45 14 4e 06 53 44 44 4c 01 75 4e 44 ECSTE.N.SDDL.uND 28f0: 49 44 70 7b 68 0b 0f 0f 00 60 7d 0c 00 00 00 80 IDp{h....`}..... 2900: 60 61 a0 09 93 44 49 44 4c 60 a4 61 a0 09 93 44 `a...DIDL`.a...D 2910: 44 4c 32 60 a4 61 a0 09 93 44 44 4c 33 60 a4 61 DL2`.a...DDL3`.a 2920: a0 09 93 44 44 4c 34 60 a4 61 a0 09 93 44 44 4c ...DDL4`.a...DDL 2930: 35 60 a4 61 a0 09 93 44 44 4c 36 60 a4 61 a0 09 5`.a...DDL6`.a.. 2940: 93 44 44 4c 37 60 a4 61 a0 09 93 44 44 4c 38 60 .DDL7`.a...DDL8` 2950: a4 61 a4 00 14 4a 08 43 44 44 53 01 a0 0f 93 43 .a...J.CDDS....C 2960: 41 44 4c 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 ADL{h..........C 2970: 41 4c 32 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL2{h..........C 2980: 41 4c 33 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL3{h..........C 2990: 41 4c 34 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL4{h..........C 29a0: 41 4c 35 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL5{h..........C 29b0: 41 4c 36 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL6{h..........C 29c0: 41 4c 37 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL7{h..........C 29d0: 41 4c 38 7b 68 0b 0f 0f 00 a4 0a 1f a4 0a 1d 14 AL8{h........... 29e0: 41 08 4e 44 44 53 01 a0 0e 93 4e 41 44 4c 7b 68 A.NDDS....NADL{h 29f0: 0b 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 32 7b 68 0b .........NDL2{h. 2a00: 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 33 7b 68 0b 0f ........NDL3{h.. 2a10: 0f 00 a4 01 a0 0e 93 4e 44 4c 34 7b 68 0b 0f 0f .......NDL4{h... 2a20: 00 a4 01 a0 0e 93 4e 44 4c 35 7b 68 0b 0f 0f 00 ......NDL5{h.... 2a30: a4 01 a0 0e 93 4e 44 4c 36 7b 68 0b 0f 0f 00 a4 .....NDL6{h..... 2a40: 01 a0 0e 93 4e 44 4c 37 7b 68 0b 0f 0f 00 a4 01 ....NDL7{h...... 2a50: a0 0e 93 4e 44 4c 38 7b 68 0b 0f 0f 00 a4 01 a4 ...NDL8{h....... 2a60: 00 14 40 07 42 52 54 4e 09 a0 14 93 7b 44 49 44 ..@.BRTN....{DID 2a70: 31 0b 00 0f 00 0b 00 04 86 44 44 30 31 68 a0 14 1........DD01h.. 2a80: 93 7b 44 49 44 32 0b 00 0f 00 0b 00 04 86 44 44 .{DID2........DD 2a90: 30 32 68 a0 14 93 7b 44 49 44 33 0b 00 0f 00 0b 02h...{DID3..... 2aa0: 00 04 86 44 44 30 33 68 a0 14 93 7b 44 49 44 34 ...DD03h...{DID4 2ab0: 0b 00 0f 00 0b 00 04 86 44 44 30 34 68 a0 14 93 ........DD04h... 2ac0: 7b 44 49 44 35 0b 00 0f 00 0b 00 04 86 44 44 30 {DID5........DD0 2ad0: 35 68 10 24 5e 5e 50 43 49 30 5b 80 4d 43 48 50 5h.$^^PCI0[.MCHP 2ae0: 02 0a 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 ..@..[..MCHP..@0 2af0: 54 41 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 TASM...[.IGDP..@ 2b00: 0a c0 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 ..[.E.IGDP..@... 2b10: 47 49 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 GIVD...GUMA..... 2b20: 47 4d 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 GMFN....@FASLE.. 2b30: 18 47 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 .GSSE.GSSB.GSES. 2b40: 00 30 00 08 43 44 56 4c 05 00 03 00 18 4c 42 50 .0..CDVL.....LBP 2b50: 43 08 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 C..0ASLS [.IGDM. 2b60: 41 53 4c 42 0b 00 20 5b 81 4e 16 49 47 44 4d 00 ASLB.. [.N.IGDM. 2b70: 53 49 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 SIGN@.SIZE OVER 2b80: 53 56 45 52 40 10 56 56 45 52 40 08 47 56 45 52 SVER@.VVER@.GVER 2b90: 40 08 4d 42 4f 58 20 00 40 52 44 52 44 59 20 43 @.MBOX .@RDRDY C 2ba0: 53 54 53 20 43 45 56 54 20 00 40 0a 44 49 44 4c STS CEVT .@.DIDL 2bb0: 20 44 44 4c 32 20 44 44 4c 33 20 44 44 4c 34 20 DDL2 DDL3 DDL4 2bc0: 44 44 4c 35 20 44 44 4c 36 20 44 44 4c 37 20 44 DDL5 DDL6 DDL7 D 2bd0: 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 20 43 50 DL8 CPDL CPL2 CP 2be0: 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 43 50 4c L3 CPL4 CPL5 CPL 2bf0: 36 20 43 50 4c 37 20 43 50 4c 38 20 43 41 44 4c 6 CPL7 CPL8 CADL 2c00: 20 43 41 4c 32 20 43 41 4c 33 20 43 41 4c 34 20 CAL2 CAL3 CAL4 2c10: 43 41 4c 35 20 43 41 4c 36 20 43 41 4c 37 20 43 CAL5 CAL6 CAL7 C 2c20: 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 20 4e 44 AL8 NADL NDL2 ND 2c30: 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 4e 44 4c L3 NDL4 NDL5 NDL 2c40: 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 53 4c 50 6 NDL7 NDL8 ASLP 2c50: 20 54 49 44 58 20 43 48 50 44 20 43 4c 49 44 20 TIDX CHPD CLID 2c60: 43 44 43 4b 20 53 58 53 57 20 45 56 54 53 20 43 CDCK SXSW EVTS C 2c70: 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 43 49 45 NOT NRDY .@.SCIE 2c80: 01 47 45 46 43 04 47 58 46 43 03 47 45 53 46 08 .GEFC.GXFC.GESF. 2c90: 00 10 50 41 52 4d 20 44 53 4c 50 20 00 40 7a 41 ..PARM DSLP .@zA 2ca0: 52 44 59 20 41 53 4c 43 20 54 43 48 45 20 41 4c RDY ASLC TCHE AL 2cb0: 53 49 20 42 43 4c 50 20 50 46 49 54 20 43 42 4c SI BCLP PFIT CBL 2cc0: 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 00 40 5c V BCLM@.CPFM .@\ 2cd0: 47 56 44 31 80 00 0e 08 44 42 54 42 12 32 15 00 GVD1....DBTB.2.. 2ce0: 0a 07 0a 38 0b c0 01 0b 00 0e 0a 3f 0b c7 01 0b ...8.......?.... 2cf0: 07 0e 0b f8 01 0b 38 0e 0b c0 0f 00 00 00 00 00 ......8......... 2d00: 0b 00 70 0b 07 70 0b 38 70 0b c0 71 0b 00 7e 08 ..p..p.8p..q..~. 2d10: 43 44 43 54 12 23 03 12 0a 03 0a c8 0b 40 01 0b CDCT.#.......@.. 2d20: 90 01 12 0a 03 0a c8 0b 4d 01 0b 90 01 12 0a 03 ........M....... 2d30: 0a de 0b 4d 01 0b 7d 01 08 53 55 43 43 01 08 4e ...M..}..SUCC..N 2d40: 56 4c 44 0a 02 08 43 52 49 54 0a 04 08 4e 43 52 VLD...CRIT...NCR 2d50: 54 0a 06 14 4c 4a 47 53 43 49 08 14 44 1e 47 42 T...LJGSCI..D.GB 2d60: 44 41 08 a0 1a 93 47 45 53 46 00 70 0b 79 02 50 DA....GESF.p.y.P 2d70: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 1a ARMp.GESF.SUCC.. 2d80: 93 47 45 53 46 01 70 0b 40 02 50 41 52 4d 70 00 .GESF.p.@.PARMp. 2d90: 47 45 53 46 a4 53 55 43 43 a0 47 04 93 47 45 53 GESF.SUCC.G..GES 2da0: 46 0a 04 7b 50 41 52 4d 0c 00 00 ff ef 50 41 52 F..{PARM.....PAR 2db0: 4d 7b 50 41 52 4d 79 83 88 44 42 54 42 49 42 54 M{PARMy..DBTBIBT 2dc0: 54 00 0a 10 00 50 41 52 4d 7d 49 42 54 54 50 41 T....PARM}IBTTPA 2dd0: 52 4d 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 RMPARMp.GESF.SUC 2de0: 43 a0 4a 06 93 47 45 53 46 0a 05 70 49 50 53 43 C.J..GESF..pIPSC 2df0: 50 41 52 4d 7d 50 41 52 4d 79 49 50 41 54 0a 08 PARM}PARMyIPAT.. 2e00: 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 41 52 .PARMrPARM...PAR 2e10: 4d 7d 50 41 52 4d 79 4c 49 44 53 0a 10 00 50 41 M}PARMyLIDS...PA 2e20: 52 4d 72 50 41 52 4d 0c 00 00 01 00 50 41 52 4d RMrPARM.....PARM 2e30: 7d 50 41 52 4d 79 49 42 49 41 0a 14 00 50 41 52 }PARMyIBIA...PAR 2e40: 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 2d 93 47 Mp.GESF.SUCC.-.G 2e50: 45 53 46 0a 06 70 49 54 56 46 50 41 52 4d 7d 50 ESF..pITVFPARM}P 2e60: 41 52 4d 79 49 54 56 4d 0a 04 00 50 41 52 4d 70 ARMyITVM...PARMp 2e70: 00 47 45 53 46 a4 53 55 43 43 a0 4f 08 93 47 45 .GESF.SUCC.O..GE 2e80: 53 46 0a 07 70 47 49 56 44 50 41 52 4d 7f 50 41 SF..pGIVDPARM.PA 2e90: 52 4d 01 50 41 52 4d 7d 50 41 52 4d 79 47 4d 46 RM.PARM}PARMyGMF 2ea0: 4e 01 00 50 41 52 4d 7d 50 41 52 4d 0b 00 10 50 N..PARM}PARM...P 2eb0: 41 52 4d a0 16 49 44 4d 4d 7d 50 41 52 4d 79 49 ARM..IDMM}PARMyI 2ec0: 44 4d 53 0a 11 00 50 41 52 4d a1 12 7d 50 41 52 DMS...PARM..}PAR 2ed0: 4d 79 49 44 4d 53 0a 0d 00 50 41 52 4d 7d 79 83 MyIDMS...PARM}y. 2ee0: 88 83 88 43 44 43 54 48 56 43 4f 00 74 43 44 56 ...CDCTHVCO.tCDV 2ef0: 4c 01 00 00 0a 15 00 50 41 52 4d 50 41 52 4d 70 L......PARMPARMp 2f00: 01 47 45 53 46 a4 53 55 43 43 a0 2a 93 47 45 53 .GESF.SUCC.*.GES 2f10: 46 0a 0a 70 00 50 41 52 4d a0 10 49 53 53 43 7d F..p.PARM..ISSC} 2f20: 50 41 52 4d 0a 03 50 41 52 4d 70 00 47 45 53 46 PARM..PARMp.GESF 2f30: a4 53 55 43 43 70 00 47 45 53 46 a4 43 52 49 54 .SUCCp.GESF.CRIT 2f40: 14 41 28 53 42 43 42 08 a0 20 93 47 45 53 46 00 .A(SBCB.. .GESF. 2f50: 70 00 50 41 52 4d 70 0b 7d f7 50 41 52 4d 70 00 p.PARMp.}.PARMp. 2f60: 47 45 53 46 a4 53 55 43 43 a0 18 93 47 45 53 46 GESF.SUCC...GESF 2f70: 01 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 2f80: 43 43 a0 19 93 47 45 53 46 0a 03 70 00 47 45 53 CC...GESF..p.GES 2f90: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 Fp.PARM.SUCC...G 2fa0: 45 53 46 0a 04 70 00 47 45 53 46 70 00 50 41 52 ESF..p.GESFp.PAR 2fb0: 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 05 70 M.SUCC...GESF..p 2fc0: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 2fd0: a0 37 93 47 45 53 46 0a 06 70 7b 50 41 52 4d 0a .7.GESF..p{PARM. 2fe0: 0f 00 49 54 56 46 70 7a 7b 50 41 52 4d 0a f0 00 ..ITVFpz{PARM... 2ff0: 0a 04 00 49 54 56 4d 70 00 47 45 53 46 70 00 50 ...ITVMp.GESFp.P 3000: 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a ARM.SUCC...GESF. 3010: 07 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 3020: 43 43 a0 19 93 47 45 53 46 0a 08 70 00 47 45 53 CC...GESF..p.GES 3030: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 24 93 47 Fp.PARM.SUCC.$.G 3040: 45 53 46 0a 09 7b 50 41 52 4d 0a ff 49 42 54 54 ESF..{PARM..IBTT 3050: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 3060: 43 a0 46 05 93 47 45 53 46 0a 0a 7b 50 41 52 4d C.F..GESF..{PARM 3070: 0a ff 49 50 53 43 a0 21 7b 7a 50 41 52 4d 0a 08 ..IPSC.!{zPARM.. 3080: 00 0a ff 00 7b 7a 50 41 52 4d 0a 08 00 0a ff 49 ....{zPARM.....I 3090: 50 41 54 76 49 50 41 54 7b 7a 50 41 52 4d 0a 14 PATvIPAT{zPARM.. 30a0: 00 0a 07 49 42 49 41 70 00 47 45 53 46 70 00 50 ...IBIAp.GESFp.P 30b0: 41 52 4d a4 53 55 43 43 a0 40 06 93 47 45 53 46 ARM.SUCC.@..GESF 30c0: 0a 0b 7b 7a 50 41 52 4d 01 00 01 49 46 31 45 a0 ..{zPARM...IF1E. 30d0: 21 7b 50 41 52 4d 0c 00 e0 01 00 00 7b 7a 50 41 !{PARM......{zPA 30e0: 52 4d 0a 0d 00 0a 0f 49 44 4d 53 70 00 49 44 4d RM.....IDMSp.IDM 30f0: 4d a1 16 7b 7a 50 41 52 4d 0a 11 00 0a 0f 49 44 M..{zPARM.....ID 3100: 4d 53 70 01 49 44 4d 4d 70 00 47 45 53 46 70 00 MSp.IDMMp.GESFp. 3110: 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 PARM.SUCC...GESF 3120: 0a 10 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 ..p.GESFp.PARM.S 3130: 55 43 43 a0 1f 93 47 45 53 46 0a 11 7d 50 41 52 UCC...GESF..}PAR 3140: 4d 0b 00 01 50 41 52 4d 70 00 47 45 53 46 a4 53 M...PARMp.GESF.S 3150: 55 43 43 a0 49 04 93 47 45 53 46 0a 12 a0 26 7b UCC.I..GESF...&{ 3160: 50 41 52 4d 01 00 a0 10 93 7a 50 41 52 4d 01 00 PARM.....zPARM.. 3170: 01 70 01 49 53 53 43 a1 0c 70 00 47 45 53 46 a4 .p.ISSC..p.GESF. 3180: 43 52 49 54 a1 07 70 00 49 53 53 43 70 00 47 45 CRIT..p.ISSCp.GE 3190: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 SFp.PARM.SUCC... 31a0: 47 45 53 46 0a 13 70 00 47 45 53 46 70 00 50 41 GESF..p.GESFp.PA 31b0: 52 4d a4 53 55 43 43 70 00 47 45 53 46 a4 53 55 RM.SUCCp.GESF.SU 31c0: 43 43 a0 11 93 47 45 46 43 0a 04 70 47 42 44 41 CC...GEFC..pGBDA 31d0: 47 58 46 43 a0 11 93 47 45 46 43 0a 06 70 53 42 GXFC...GEFC..pSB 31e0: 43 42 47 58 46 43 70 00 47 45 46 43 70 01 53 43 CBGXFCp.GEFCp.SC 31f0: 49 53 70 00 47 53 53 45 70 00 53 43 49 45 a4 00 ISp.GSSEp.SCIE.. 3200: 14 19 50 44 52 44 00 a0 0c 92 44 52 44 59 5b 22 ..PDRD....DRDY[" 3210: 41 53 4c 50 a4 92 44 52 44 59 14 1d 50 53 54 53 ASLP..DRDY..PSTS 3220: 00 a0 0e 94 43 53 54 53 0a 02 5b 22 41 53 4c 50 ....CSTS..["ASLP 3230: a4 93 43 53 54 53 0a 03 14 47 06 47 4e 4f 54 02 ..CSTS...G.GNOT. 3240: a0 07 50 44 52 44 a4 01 a0 07 50 53 54 53 a4 01 ..PDRD....PSTS.. 3250: 70 68 43 45 56 54 70 0a 03 43 53 54 53 a0 2c 90 phCEVTp..CSTS.,. 3260: 93 43 48 50 44 00 93 69 00 a0 18 91 94 4f 53 59 .CHPD..i.....OSY 3270: 53 0b d0 07 95 4f 53 59 53 0b d6 07 86 50 43 49 S....OSYS....PCI 3280: 30 69 a1 07 86 47 46 58 30 69 86 47 46 58 30 0a 0i...GFX0i.GFX0. 3290: 80 a0 0c 92 50 53 54 53 70 00 43 45 56 54 a4 00 ....PSTSp.CEVT.. 32a0: 14 13 47 48 44 53 01 70 68 54 49 44 58 a4 47 4e ..GHDS.phTIDX.GN 32b0: 4f 54 01 00 14 14 47 4c 49 44 01 70 68 43 4c 49 OT....GLID.phCLI 32c0: 44 a4 47 4e 4f 54 0a 02 00 14 15 47 44 43 4b 01 D.GNOT.....GDCK. 32d0: 70 68 43 44 43 4b a4 47 4e 4f 54 0a 04 0a 80 14 phCDCK.GNOT..... 32e0: 19 50 41 52 44 00 a0 0c 92 41 52 44 59 5b 22 41 .PARD....ARDY["A 32f0: 53 4c 50 a4 92 41 52 44 59 14 46 0c 41 49 4e 54 SLP..ARDY.F.AINT 3300: 02 a0 0e 92 7b 54 43 48 45 79 01 68 00 00 a4 01 ....{TCHEy.h.... 3310: a0 07 50 41 52 44 a4 01 a0 4c 05 93 68 0a 02 a0 ..PARD...L..h... 3320: 33 43 50 46 4d a0 0e 93 43 50 46 4d 01 70 0a 06 3CPFM...CPFM.p.. 3330: 50 46 49 54 a0 0f 93 43 50 46 4d 0a 06 70 0a 08 PFIT...CPFM..p.. 3340: 50 46 49 54 a0 0e 93 43 50 46 4d 0a 08 70 01 50 PFIT...CPFM..p.P 3350: 46 49 54 a1 0c 7f 50 46 49 54 0a 07 50 46 49 54 FIT...PFIT..PFIT 3360: 7d 50 46 49 54 0c 00 00 00 80 50 46 49 54 70 0a }PFIT.....PFITp. 3370: 04 41 53 4c 43 a1 42 04 a0 28 93 68 01 70 78 77 .ASLC.B..(.h.pxw 3380: 69 0a ff 00 0a 64 00 00 42 43 4c 50 7d 42 43 4c i....d..BCLP}BCL 3390: 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 41 53 4c P.....BCLPp..ASL 33a0: 43 a1 16 a0 10 93 68 00 70 69 41 4c 53 49 70 01 C.....h.piALSIp. 33b0: 41 53 4c 43 a1 03 a4 01 70 00 4c 42 50 43 a4 00 ASLC....p.LBPC.. 33c0: 10 41 36 5c 00 5b 80 49 4f 5f 54 01 0b 00 08 0a .A6\.[.IO_T..... 33d0: 10 5b 81 0e 49 4f 5f 54 01 00 40 04 54 52 50 30 .[..IO_T..@.TRP0 33e0: 08 5b 80 50 4d 49 4f 01 0b 00 10 0a 80 5b 81 28 .[.PMIO......[.( 33f0: 50 4d 49 4f 01 00 40 15 00 08 00 02 41 43 50 57 PMIO..@.....ACPW 3400: 01 00 45 0b 00 01 47 50 45 43 01 00 4e 10 00 09 ..E...GPEC..N... 3410: 53 43 49 53 01 00 06 5b 80 47 50 49 4f 01 0b 80 SCIS...[.GPIO... 3420: 11 0a 3c 5b 81 40 0c 47 50 49 4f 01 47 55 30 30 ..<[.@.GPIO.GU00 3430: 08 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 .GU01.GU02.GU03. 3440: 47 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 GIO0.GIO1.GIO2.G 3450: 49 4f 33 08 00 20 47 4c 30 30 08 47 4c 30 31 08 IO3.. GL00.GL01. 3460: 47 4c 30 32 08 00 03 47 50 32 37 01 47 50 32 38 GL02...GP27.GP28 3470: 01 00 03 00 40 04 47 42 30 30 08 47 42 30 31 08 ....@.GB00.GB01. 3480: 47 42 30 32 08 47 42 30 33 08 00 40 08 47 49 56 GB02.GB03..@.GIV 3490: 30 08 00 03 4c 50 4f 4c 01 00 04 47 49 56 32 08 0...LPOL...GIV2. 34a0: 47 49 56 33 08 47 55 30 34 08 47 55 30 35 08 47 GIV3.GU04.GU05.G 34b0: 55 30 36 08 47 55 30 37 08 47 49 4f 34 08 47 49 U06.GU07.GIO4.GI 34c0: 4f 35 08 47 49 4f 36 08 47 49 4f 37 08 00 05 47 O5.GIO6.GIO7...G 34d0: 50 33 37 01 00 02 47 4c 30 35 08 47 4c 30 36 08 P37...GL05.GL06. 34e0: 47 4c 30 37 08 5b 80 52 43 52 42 00 0c 00 c0 d1 GL07.[.RCRB..... 34f0: fe 0b 00 40 5b 81 48 05 52 43 52 42 13 00 80 00 ...@[.H.RCRB.... 3500: 08 00 80 00 10 00 80 02 02 48 50 41 53 02 00 05 .........HPAS... 3510: 48 50 41 45 01 00 48 09 00 01 50 41 54 44 01 53 HPAE..H...PATD.S 3520: 41 54 44 01 53 4d 42 44 01 48 44 41 44 01 00 0b ATD.SMBD.HDAD... 3530: 52 50 31 44 01 52 50 32 44 01 52 50 33 44 01 52 RP1D.RP2D.RP3D.R 3540: 50 34 44 01 52 50 35 44 01 52 50 36 44 01 08 5f P4D.RP5D.RP6D.._ 3550: 53 30 5f 12 05 03 00 00 00 08 5f 53 33 5f 12 07 S0_......._S3_.. 3560: 03 0a 05 0a 05 00 08 5f 53 34 5f 12 07 03 0a 06 ......._S4_..... 3570: 0a 06 00 08 5f 53 35 5f 12 07 03 0a 07 0a 07 00 ...._S5_........ 3580: 14 45 04 47 45 54 50 09 a0 0e 93 7b 68 0a 09 00 .E.GETP....{h... 3590: 00 a4 0c ff ff ff ff a0 0d 93 7b 68 0a 09 00 0a ..........{h.... 35a0: 08 a4 0b 84 03 7a 7b 68 0b 00 03 00 0a 08 60 7a .....z{h......`z 35b0: 7b 68 0b 00 30 00 0a 0c 61 a4 77 0a 1e 74 0a 09 {h..0...a.w..t.. 35c0: 72 60 61 00 00 00 14 30 47 44 4d 41 0d a0 23 68 r`a....0GDMA..#h 35d0: a0 07 90 69 6c a4 0a 14 a0 0e 90 6a 6c a4 77 74 ...il......jl.wt 35e0: 0a 04 6b 00 0a 0f 00 a4 77 74 0a 04 6b 00 0a 1e ..k.....wt..k... 35f0: 00 a4 0c ff ff ff ff 14 1f 47 45 54 54 09 a4 77 .........GETT..w 3600: 0a 1e 74 0a 09 72 7b 7a 68 0a 02 00 0a 03 00 7b ..t..r{zh......{ 3610: 68 0a 03 00 00 00 00 14 44 06 47 45 54 46 0b 08 h.......D.GETF.. 3620: 54 4d 50 46 00 a0 0c 68 7d 54 4d 50 46 01 54 4d TMPF...h}TMPF.TM 3630: 50 46 a0 11 7b 6a 0a 02 00 7d 54 4d 50 46 0a 02 PF..{j...}TMPF.. 3640: 54 4d 50 46 a0 0d 69 7d 54 4d 50 46 0a 04 54 4d TMPF..i}TMPF..TM 3650: 50 46 a0 11 7b 6a 0a 20 00 7d 54 4d 50 46 0a 08 PF..{j. .}TMPF.. 3660: 54 4d 50 46 a0 12 7b 6a 0b 00 40 00 7d 54 4d 50 TMPF..{j..@.}TMP 3670: 46 0a 10 54 4d 50 46 a4 54 4d 50 46 14 3d 53 45 F..TMPF.TMPF.=SE 3680: 54 50 0b a0 08 94 68 0a f0 a4 0a 08 a1 2d a0 27 TP....h......-.' 3690: 7b 69 0a 02 00 a0 10 90 92 94 68 0a 78 7b 6a 0a {i........h.x{j. 36a0: 02 00 a4 0b 01 23 a0 0f 90 92 94 68 0a b4 7b 6a .....#.....h..{j 36b0: 01 00 a4 0b 01 21 a4 0b 01 10 14 37 53 44 4d 41 .....!.....7SDMA 36c0: 09 a0 08 92 94 68 0a 14 a4 01 a0 09 92 94 68 0a .....h........h. 36d0: 1e a4 0a 02 a0 08 92 94 68 0a 2d a4 01 a0 09 92 ........h.-..... 36e0: 94 68 0a 3c a4 0a 02 a0 08 92 94 68 0a 5a a4 01 .h.<.......h.Z.. 36f0: a4 00 14 2f 53 45 54 54 0b a0 25 7b 69 0a 02 00 .../SETT..%{i... 3700: a0 0f 90 92 94 68 0a 78 7b 6a 0a 02 00 a4 0a 0b .....h.x{j...... 3710: a0 0e 90 92 94 68 0a b4 7b 6a 01 00 a4 0a 09 a4 .....h..{j...... 3720: 0a 04 5b 82 4b 04 48 44 45 46 08 5f 41 44 52 0c ..[.K.HDEF._ADR. 3730: 00 00 1b 00 5b 80 48 44 41 52 02 0a 4c 0a 10 5b ....[.HDAR..L..[ 3740: 81 22 48 44 41 52 02 44 43 4b 41 01 00 07 44 43 ."HDAR.DCKA...DC 3750: 4b 4d 01 00 06 44 43 4b 53 01 00 30 00 0f 50 4d KM...DCKS..0..PM 3760: 45 53 01 08 5f 50 52 57 12 06 02 0a 0d 0a 03 5b ES.._PRW.......[ 3770: 82 41 10 52 50 30 31 08 5f 41 44 52 0c 00 00 1c .A.RP01._ADR.... 3780: 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 45 04 .[.PXCS..@..[.E. 3790: 50 58 43 53 40 00 40 09 00 0d 4c 41 53 58 01 00 PXCS@.@...LASX.. 37a0: 32 41 42 50 58 01 00 02 50 44 43 58 01 00 02 50 2ABPX...PDCX...P 37b0: 44 53 58 01 00 01 4c 53 43 58 01 00 27 00 10 50 DSX...LSCX..'..P 37c0: 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 01 50 4d SPX..O<..HPSX.PM 37d0: 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 44 52 00 SX.[..PXSX._ADR. 37e0: 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 .A._PRT..3GPIC.. 37f0: 2c 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ,............... 3800: ff ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a ................ 3810: 12 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 .............E.. 3820: 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 .A.........^^.LP 3830: 43 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e CBLNKA........^^ 3840: 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff .LPCBLNKB....... 3850: 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 ..^^.LPCBLNKC... 3860: 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b ......^^.LPCBLNK 3870: 44 00 5b 82 41 10 52 50 30 32 08 5f 41 44 52 0c D.[.A.RP02._ADR. 3880: 01 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b ....[.PXCS..@..[ 3890: 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c 41 53 .E.PXCS@.@...LAS 38a0: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 38b0: 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 ..PDSX...LSCX..' 38c0: 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 ..PSPX..O<..HPSX 38d0: 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 .PMSX.[..PXSX._A 38e0: 44 52 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 DR..A._PRT..3GPI 38f0: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 11 12 C..,............ 3900: 09 04 0b ff ff 01 00 0a 12 12 0a 04 0b ff ff 0a ................ 3910: 02 00 0a 13 12 0a 04 0b ff ff 0a 03 00 0a 10 a1 ................ 3920: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3930: 2e 4c 50 43 42 4c 4e 4b 42 00 12 12 04 0b ff ff .LPCBLNKB....... 3940: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 3950: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 3960: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3970: 4c 4e 4b 41 00 5b 82 4d 11 52 50 30 33 08 5f 41 LNKA.[.M.RP03._A 3980: 44 52 0c 02 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3990: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 39a0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 39b0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 39c0: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 39d0: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 39e0: 08 5f 41 44 52 00 08 2e 50 58 53 58 5f 52 4d 56 ._ADR...PXSX_RMV 39f0: 01 08 2e 50 58 53 58 5f 50 52 57 12 06 02 0a 09 ...PXSX_PRW..... 3a00: 0a 03 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 ...A._PRT..3GPIC 3a10: a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 12 12 09 ..,............. 3a20: 04 0b ff ff 01 00 0a 13 12 0a 04 0b ff ff 0a 02 ................ 3a30: 00 0a 10 12 0a 04 0b ff ff 0a 03 00 0a 11 a1 45 ...............E 3a40: 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e ...A.........^^. 3a50: 4c 50 43 42 4c 4e 4b 43 00 12 12 04 0b ff ff 01 LPCBLNKC........ 3a60: 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0b ^^.LPCBLNKD..... 3a70: ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 ....^^.LPCBLNKA. 3a80: 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3a90: 4e 4b 42 00 5b 82 4f 11 52 50 30 34 08 5f 41 44 NKB.[.O.RP04._AD 3aa0: 52 0c 03 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a R.....[.PXCS..@. 3ab0: c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c .[.E.PXCS@.@...L 3ac0: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 3ad0: 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 X...PDSX...LSCX. 3ae0: 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 .'..PSPX..O<..HP 3af0: 53 58 01 50 4d 53 58 01 5b 82 29 50 58 53 58 08 SX.PMSX.[.)PXSX. 3b00: 5f 41 44 52 00 14 1d 5f 50 52 57 00 a0 0d 57 4b _ADR..._PRW...WK 3b10: 4c 4e a4 12 06 02 0a 09 0a 03 a1 08 a4 12 05 02 LN.............. 3b20: 0a 09 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 ....A._PRT..3GPI 3b30: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 C..,............ 3b40: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 3b50: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 a1 ................ 3b60: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3b70: 2e 4c 50 43 42 4c 4e 4b 44 00 12 12 04 0b ff ff .LPCBLNKD....... 3b80: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 .^^.LPCBLNKA.... 3b90: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 .....^^.LPCBLNKB 3ba0: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3bb0: 4c 4e 4b 43 00 5b 82 41 10 52 50 30 35 08 5f 41 LNKC.[.A.RP05._A 3bc0: 44 52 0c 04 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3bd0: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 3be0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 3bf0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 3c00: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 3c10: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 3c20: 08 5f 41 44 52 00 14 41 09 5f 50 52 54 00 a0 33 ._ADR..A._PRT..3 3c30: 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 GPIC..,......... 3c40: 0a 10 12 09 04 0b ff ff 01 00 0a 11 12 0a 04 0b ................ 3c50: ff ff 0a 02 00 0a 12 12 0a 04 0b ff ff 0a 03 00 ................ 3c60: 0a 13 a1 45 05 a4 12 41 05 04 12 12 04 0b ff ff ...E...A........ 3c70: 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 12 04 .^^.LPCBLNKA.... 3c80: 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3c90: 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3ca0: 4e 4b 43 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c NKC.........^^.L 3cb0: 50 43 42 4c 4e 4b 44 00 5b 82 41 10 52 50 30 36 PCBLNKD.[.A.RP06 3cc0: 08 5f 41 44 52 0c 05 00 1c 00 5b 80 50 58 43 53 ._ADR.....[.PXCS 3cd0: 02 0a 40 0a c0 5b 81 45 04 50 58 43 53 40 00 40 ..@..[.E.PXCS@.@ 3ce0: 09 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 ...LASX..2ABPX.. 3cf0: 02 50 44 43 58 01 00 02 50 44 53 58 01 00 01 4c .PDCX...PDSX...L 3d00: 53 43 58 01 00 27 00 10 50 53 50 58 01 00 4f 3c SCX..'..PSPX..O< 3d10: 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 ..HPSX.PMSX.[..P 3d20: 58 53 58 08 5f 41 44 52 00 14 41 09 5f 50 52 54 XSX._ADR..A._PRT 3d30: 00 a0 33 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ..3GPIC..,...... 3d40: ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a 12 12 ................ 3d50: 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ff ff ................ 3d60: 0a 03 00 0a 10 a1 45 05 a4 12 41 05 04 12 12 04 ......E...A..... 3d70: 0b ff ff 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3d80: 12 12 04 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 3d90: 4b 43 00 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 KC.........^^.LP 3da0: 43 42 4c 4e 4b 44 00 12 13 04 0b ff ff 0a 03 5e CBLNKD.........^ 3db0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 4d 06 55 ^.LPCBLNKA.[.M.U 3dc0: 53 42 31 08 5f 41 44 52 0c 00 00 1d 00 5b 80 55 SB1._ADR.....[.U 3dd0: 31 43 53 02 0a c4 0a 04 5b 81 0b 55 31 43 53 03 1CS.....[..U1CS. 3de0: 55 31 45 4e 02 08 5f 50 52 57 12 06 02 0a 03 0a U1EN.._PRW...... 3df0: 03 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 ..$_PSW...hp.ACP 3e00: 57 a0 0c 41 43 50 57 70 0a 03 55 31 45 4e a1 07 W..ACPWp..U1EN.. 3e10: 70 00 55 31 45 4e 14 09 5f 53 33 44 00 a4 0a 02 p.U1EN.._S3D.... 3e20: 14 09 5f 53 34 44 00 a4 0a 02 5b 82 4c 06 55 53 .._S4D....[.L.US 3e30: 42 32 08 5f 41 44 52 0c 01 00 1d 00 5b 80 55 32 B2._ADR.....[.U2 3e40: 43 53 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 CS.....[..U2CS.U 3e50: 32 45 4e 02 08 5f 50 52 57 12 06 02 0a 04 0a 03 2EN.._PRW....... 3e60: 14 23 5f 50 53 57 01 a0 14 68 70 01 41 43 50 57 .#_PSW...hp.ACPW 3e70: a0 0b 41 43 50 57 70 01 55 32 45 4e a1 07 70 00 ..ACPWp.U2EN..p. 3e80: 55 32 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 U2EN.._S3D...... 3e90: 5f 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 33 _S4D....[.M.USB3 3ea0: 08 5f 41 44 52 0c 02 00 1d 00 5b 80 55 32 43 53 ._ADR.....[.U2CS 3eb0: 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 33 45 .....[..U2CS.U3E 3ec0: 4e 02 08 5f 50 52 57 12 06 02 0a 0c 0a 03 14 24 N.._PRW........$ 3ed0: 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c _PSW...hp.ACPW.. 3ee0: 41 43 50 57 70 0a 03 55 33 45 4e a1 07 70 00 55 ACPWp..U3EN..p.U 3ef0: 33 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 3EN.._S3D......_ 3f00: 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 34 08 S4D....[.M.USB4. 3f10: 5f 41 44 52 0c 00 00 1a 00 5b 80 55 34 43 53 02 _ADR.....[.U4CS. 3f20: 0a c4 0a 04 5b 81 0b 55 34 43 53 03 55 34 45 4e ....[..U4CS.U4EN 3f30: 02 08 5f 50 52 57 12 06 02 0a 0e 0a 03 14 24 5f .._PRW........$_ 3f40: 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c 41 PSW...hp.ACPW..A 3f50: 43 50 57 70 0a 03 55 34 45 4e a1 07 70 00 55 34 CPWp..U4EN..p.U4 3f60: 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 EN.._S3D......_S 3f70: 34 44 00 a4 0a 02 5b 82 41 06 55 53 42 35 08 5f 4D....[.A.USB5._ 3f80: 41 44 52 0c 01 00 1a 00 5b 80 55 35 43 53 02 0a ADR.....[.U5CS.. 3f90: c4 0a 04 5b 81 0b 55 35 43 53 03 55 35 45 4e 02 ...[..U5CS.U5EN. 3fa0: 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 .$_PSW...hp.ACPW 3fb0: a0 0c 41 43 50 57 70 0a 03 55 35 45 4e a1 07 70 ..ACPWp..U5EN..p 3fc0: 00 55 35 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 .U5EN.._S3D..... 3fd0: 09 5f 53 34 44 00 a4 0a 02 5b 82 4b 0a 45 48 43 ._S4D....[.K.EHC 3fe0: 31 08 5f 41 44 52 0c 07 00 1d 00 5b 80 55 37 43 1._ADR.....[.U7C 3ff0: 53 02 0a 54 0a 04 5b 81 0d 55 37 43 53 03 00 0f S..T..[..U7CS... 4000: 50 4d 45 53 01 5b 82 4f 05 48 55 42 37 08 5f 41 PMES.[.O.HUB7._A 4010: 44 52 00 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 DR.[..PRT1._ADR. 4020: 5b 82 0c 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 [..PRT2._ADR..[. 4030: 0c 50 52 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 .PRT3._ADR..[..P 4040: 52 54 34 08 5f 41 44 52 0a 04 5b 82 0c 50 52 54 RT4._ADR..[..PRT 4050: 35 08 5f 41 44 52 0a 05 5b 82 0c 50 52 54 36 08 5._ADR..[..PRT6. 4060: 5f 41 44 52 0a 06 08 5f 50 52 57 12 06 02 0a 0d _ADR..._PRW..... 4070: 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 ...._S3D......_S 4080: 34 44 00 a4 0a 02 5b 82 4f 08 45 48 43 32 08 5f 4D....[.O.EHC2._ 4090: 41 44 52 0c 07 00 1a 00 5b 80 55 46 43 53 02 0a ADR.....[.UFCS.. 40a0: 54 0a 04 5b 81 0d 55 46 43 53 03 00 0f 50 4d 45 T..[..UFCS...PME 40b0: 53 01 5b 82 43 04 48 55 42 37 08 5f 41 44 52 00 S.[.C.HUB7._ADR. 40c0: 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 5b 82 0c [..PRT1._ADR.[.. 40d0: 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 0c 50 52 PRT2._ADR..[..PR 40e0: 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 52 54 34 T3._ADR..[..PRT4 40f0: 08 5f 41 44 52 0a 04 08 5f 50 52 57 12 06 02 0a ._ADR..._PRW.... 4100: 0d 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f ....._S3D......_ 4110: 53 34 44 00 a4 0a 02 5b 82 4a 06 50 43 49 42 08 S4D....[.J.PCIB. 4120: 5f 41 44 52 0c 00 00 1e 00 14 49 05 5f 50 52 54 _ADR......I._PRT 4130: 00 a0 21 47 50 49 43 a4 12 1a 02 12 0b 04 0c ff ..!GPIC......... 4140: ff 06 00 00 00 0a 16 12 0b 04 0c ff ff 06 00 01 ................ 4150: 00 0a 17 a1 2f a4 12 2c 02 12 14 04 0c ff ff 06 ..../..,........ 4160: 00 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 47 00 12 14 ..^^.LPCBLNKG... 4170: 04 0c ff ff 06 00 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 4180: 4b 48 00 5b 82 8d 2e 01 4c 50 43 42 08 5f 41 44 KH.[....LPCB._AD 4190: 52 0c 00 00 1f 00 5b 80 4c 50 43 30 02 0a 40 0a R.....[.LPC0..@. 41a0: c0 5b 81 4d 07 4c 50 43 30 00 00 40 10 50 41 52 .[.M.LPC0..@.PAR 41b0: 43 08 50 42 52 43 08 50 43 52 43 08 50 44 52 43 C.PBRC.PCRC.PDRC 41c0: 08 00 20 50 45 52 43 08 50 46 52 43 08 50 47 52 .. PERC.PFRC.PGR 41d0: 43 08 50 48 52 43 08 00 40 0a 43 4d 41 52 03 00 C.PHRC..@.CMAR.. 41e0: 01 43 4d 42 52 03 00 01 4c 50 54 52 02 00 06 43 .CMBR...LPTR...C 41f0: 4d 41 44 01 43 4d 42 44 01 4c 50 54 44 01 46 44 MAD.CMBD.LPTD.FD 4200: 44 44 01 00 2c 49 4f 52 32 10 00 02 4c 47 52 4d DD..,IOR2...LGRM 4210: 06 00 48 32 52 41 45 4e 01 00 0d 52 43 42 41 12 ..H2RAEN...RCBA. 4220: 5b 80 53 4d 49 30 01 0c 00 fe 00 00 0c 02 00 00 [.SMI0.......... 4230: 00 5b 81 0b 53 4d 49 30 00 53 4d 49 43 08 5b 80 .[..SMI0.SMIC.[. 4240: 53 4d 49 31 00 0c bd 2e 6e bf 0c 90 00 00 00 5b SMI1....n......[ 4250: 81 16 53 4d 49 31 00 42 43 4d 44 08 44 49 44 5f ..SMI1.BCMD.DID_ 4260: 20 49 4e 46 4f 40 40 5b 81 15 53 4d 49 31 00 01 INFO@@[..SMI1.. 4270: 01 00 00 28 49 4e 46 5f 08 49 4e 46 31 20 5b 01 ...(INF_.INF1 [. 4280: 50 53 4d 58 00 14 27 50 48 53 53 01 5b 23 50 53 PSMX..'PHSS.[#PS 4290: 4d 58 ff ff 70 0a 80 42 43 4d 44 70 68 44 49 44 MX..p..BCMDphDID 42a0: 5f 70 00 53 4d 49 43 5b 27 50 53 4d 58 5b 82 41 _p.SMIC['PSMX[.A 42b0: 0a 4c 4e 4b 41 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKA._HID.A.... 42c0: 5f 55 49 44 01 14 0d 5f 44 49 53 08 70 0a 80 50 _UID..._DIS.p..P 42d0: 41 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ARC._PRS....#... 42e0: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 41 11 09 y..8_CRS..RTLA.. 42f0: 0a 06 23 00 00 18 79 00 8b 52 54 4c 41 01 49 52 ..#...y..RTLA.IR 4300: 51 30 70 00 49 52 51 30 79 01 7b 50 41 52 43 0a Q0p.IRQ0y.{PARC. 4310: 0f 00 49 52 51 30 a4 52 54 4c 41 14 1b 5f 53 52 ..IRQ0.RTLA.._SR 4320: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 4330: 60 70 60 50 41 52 43 14 18 5f 53 54 41 08 a0 0c `p`PARC.._STA... 4340: 7b 50 41 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PARC........... 4350: 5b 82 42 0a 4c 4e 4b 42 08 5f 48 49 44 0c 41 d0 [.B.LNKB._HID.A. 4360: 0c 0f 08 5f 55 49 44 0a 02 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4370: 70 0a 80 50 42 52 43 08 5f 50 52 53 11 09 0a 06 p..PBRC._PRS.... 4380: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4390: 4c 42 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LB....#...y..RTL 43a0: 42 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 B.IRQ0p.IRQ0y.{P 43b0: 42 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 42 14 BRC...IRQ0.RTLB. 43c0: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 43d0: 51 30 60 76 60 70 60 50 42 52 43 14 18 5f 53 54 Q0`v`p`PBRC.._ST 43e0: 41 08 a0 0c 7b 50 42 52 43 0a 80 00 a4 0a 09 a1 A...{PBRC....... 43f0: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 43 08 5f 48 49 ....[.B.LNKC._HI 4400: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 03 14 0d 5f D.A...._UID...._ 4410: 44 49 53 08 70 0a 80 50 43 52 43 08 5f 50 52 53 DIS.p..PCRC._PRS 4420: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 4430: 08 08 52 54 4c 43 11 09 0a 06 23 00 00 18 79 00 ..RTLC....#...y. 4440: 8b 52 54 4c 43 01 49 52 51 30 70 00 49 52 51 30 .RTLC.IRQ0p.IRQ0 4450: 79 01 7b 50 43 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PCRC...IRQ0.R 4460: 54 4c 43 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLC.._SRS..h.IRQ 4470: 30 82 49 52 51 30 60 76 60 70 60 50 43 52 43 14 0.IRQ0`v`p`PCRC. 4480: 18 5f 53 54 41 08 a0 0c 7b 50 43 52 43 0a 80 00 ._STA...{PCRC... 4490: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 44 ........[.B.LNKD 44a0: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 44b0: 04 14 0d 5f 44 49 53 08 70 0a 80 50 44 52 43 08 ..._DIS.p..PDRC. 44c0: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 44d0: 5f 43 52 53 08 08 52 54 4c 44 11 09 0a 06 23 00 _CRS..RTLD....#. 44e0: 00 18 79 00 8b 52 54 4c 44 01 49 52 51 30 70 00 ..y..RTLD.IRQ0p. 44f0: 49 52 51 30 79 01 7b 50 44 52 43 0a 0f 00 49 52 IRQ0y.{PDRC...IR 4500: 51 30 a4 52 54 4c 44 14 1b 5f 53 52 53 09 8b 68 Q0.RTLD.._SRS..h 4510: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 4520: 44 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 44 52 DRC.._STA...{PDR 4530: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a C...........[.B. 4540: 4c 4e 4b 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f LNKE._HID.A...._ 4550: 55 49 44 0a 05 14 0d 5f 44 49 53 08 70 0a 80 50 UID...._DIS.p..P 4560: 45 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ERC._PRS....#... 4570: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 45 11 09 y..8_CRS..RTLE.. 4580: 0a 06 23 00 00 18 79 00 8b 52 54 4c 45 01 49 52 ..#...y..RTLE.IR 4590: 51 30 70 00 49 52 51 30 79 01 7b 50 45 52 43 0a Q0p.IRQ0y.{PERC. 45a0: 0f 00 49 52 51 30 a4 52 54 4c 45 14 1b 5f 53 52 ..IRQ0.RTLE.._SR 45b0: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 45c0: 60 70 60 50 45 52 43 14 18 5f 53 54 41 08 a0 0c `p`PERC.._STA... 45d0: 7b 50 45 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PERC........... 45e0: 5b 82 42 0a 4c 4e 4b 46 08 5f 48 49 44 0c 41 d0 [.B.LNKF._HID.A. 45f0: 0c 0f 08 5f 55 49 44 0a 06 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4600: 70 0a 80 50 46 52 43 08 5f 50 52 53 11 09 0a 06 p..PFRC._PRS.... 4610: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4620: 4c 46 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LF....#...y..RTL 4630: 46 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 F.IRQ0p.IRQ0y.{P 4640: 46 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 46 14 FRC...IRQ0.RTLF. 4650: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 4660: 51 30 60 76 60 70 60 50 46 52 43 14 18 5f 53 54 Q0`v`p`PFRC.._ST 4670: 41 08 a0 0c 7b 50 46 52 43 0a 80 00 a4 0a 09 a1 A...{PFRC....... 4680: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 47 08 5f 48 49 ....[.B.LNKG._HI 4690: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 0d 5f D.A...._UID...._ 46a0: 44 49 53 08 70 0a 80 50 47 52 43 08 5f 50 52 53 DIS.p..PGRC._PRS 46b0: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 46c0: 08 08 52 54 4c 47 11 09 0a 06 23 00 00 18 79 00 ..RTLG....#...y. 46d0: 8b 52 54 4c 47 01 49 52 51 30 70 00 49 52 51 30 .RTLG.IRQ0p.IRQ0 46e0: 79 01 7b 50 47 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PGRC...IRQ0.R 46f0: 54 4c 47 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLG.._SRS..h.IRQ 4700: 30 82 49 52 51 30 60 76 60 70 60 50 47 52 43 14 0.IRQ0`v`p`PGRC. 4710: 18 5f 53 54 41 08 a0 0c 7b 50 47 52 43 0a 80 00 ._STA...{PGRC... 4720: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 48 ........[.B.LNKH 4730: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 4740: 08 14 0d 5f 44 49 53 08 70 0a 80 50 48 52 43 08 ..._DIS.p..PHRC. 4750: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 4760: 5f 43 52 53 08 08 52 54 4c 48 11 09 0a 06 23 00 _CRS..RTLH....#. 4770: 00 18 79 00 8b 52 54 4c 48 01 49 52 51 30 70 00 ..y..RTLH.IRQ0p. 4780: 49 52 51 30 79 01 7b 50 48 52 43 0a 0f 00 49 52 IRQ0y.{PHRC...IR 4790: 51 30 a4 52 54 4c 48 14 1b 5f 53 52 53 09 8b 68 Q0.RTLH.._SRS..h 47a0: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 47b0: 48 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 48 52 HRC.._STA...{PHR 47c0: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 3d 44 C...........[.=D 47d0: 4d 41 43 08 5f 48 49 44 0c 41 d0 02 00 08 5f 43 MAC._HID.A...._C 47e0: 52 53 11 28 0a 25 47 01 00 00 00 00 01 20 47 01 RS.(.%G...... G. 47f0: 81 00 81 00 01 11 47 01 93 00 93 00 01 0d 47 01 ......G.......G. 4800: c0 00 c0 00 01 20 2a 10 01 79 00 5b 82 26 46 57 ..... *..y.[.&FW 4810: 48 44 08 5f 48 49 44 0c 25 d4 08 00 08 5f 43 52 HD._HID.%...._CR 4820: 53 11 11 0a 0e 86 09 00 00 00 00 00 ff 00 00 00 S............... 4830: 01 79 00 5b 82 40 0b 48 50 45 54 08 5f 48 49 44 .y.[.@.HPET._HID 4840: 0c 41 d0 01 03 08 5f 43 49 44 0c 41 d0 0c 01 08 .A...._CID.A.... 4850: 42 55 46 30 11 11 0a 0e 86 09 00 00 00 00 d0 fe BUF0............ 4860: 00 04 00 00 79 00 14 27 5f 53 54 41 00 a0 13 92 ....y..'_STA.... 4870: 95 4f 53 59 53 0b d1 07 a0 08 48 50 41 45 a4 0a .OSYS.....HPAE.. 4880: 0f a1 0a a0 08 48 50 41 45 a4 0a 0b a4 00 14 46 .....HPAE......F 4890: 05 5f 43 52 53 08 a0 49 04 48 50 41 45 8a 42 55 ._CRS..I.HPAE.BU 48a0: 46 30 0a 04 48 50 54 30 a0 11 93 48 50 41 53 01 F0..HPT0...HPAS. 48b0: 70 0c 00 10 d0 fe 48 50 54 30 a0 12 93 48 50 41 p.....HPT0...HPA 48c0: 53 0a 02 70 0c 00 20 d0 fe 48 50 54 30 a0 12 93 S..p.. ..HPT0... 48d0: 48 50 41 53 0a 03 70 0c 00 30 d0 fe 48 50 54 30 HPAS..p..0..HPT0 48e0: a4 42 55 46 30 5b 82 45 0a 49 50 49 43 08 5f 48 .BUF0[.E.IPIC._H 48f0: 49 44 0b 41 d0 08 5f 43 52 53 11 41 09 0a 8d 47 ID.A.._CRS.A...G 4900: 01 20 00 20 00 01 02 47 01 24 00 24 00 01 02 47 . . ...G.$.$...G 4910: 01 28 00 28 00 01 02 47 01 2c 00 2c 00 01 02 47 .(.(...G.,.,...G 4920: 01 30 00 30 00 01 02 47 01 34 00 34 00 01 02 47 .0.0...G.4.4...G 4930: 01 38 00 38 00 01 02 47 01 3c 00 3c 00 01 02 47 .8.8...G.<.<...G 4940: 01 a0 00 a0 00 01 02 47 01 a4 00 a4 00 01 02 47 .......G.......G 4950: 01 a8 00 a8 00 01 02 47 01 ac 00 ac 00 01 02 47 .......G.......G 4960: 01 b0 00 b0 00 01 02 47 01 b4 00 b4 00 01 02 47 .......G.......G 4970: 01 b8 00 b8 00 01 02 47 01 bc 00 bc 00 01 02 47 .......G.......G 4980: 01 d0 04 d0 04 01 02 22 04 00 79 00 5b 82 25 4d ......."..y.[.%M 4990: 41 54 48 08 5f 48 49 44 0c 41 d0 0c 04 08 5f 43 ATH._HID.A...._C 49a0: 52 53 11 10 0a 0d 47 01 f0 00 f0 00 01 01 22 00 RS....G.......". 49b0: 20 79 00 5b 82 4b 09 4c 44 52 43 08 5f 48 49 44 y.[.K.LDRC._HID 49c0: 0c 41 d0 0c 02 08 5f 55 49 44 0a 02 08 5f 43 52 .A...._UID..._CR 49d0: 53 11 4e 07 0a 7a 47 01 2e 00 2e 00 01 02 47 01 S.N..zG.......G. 49e0: 4e 00 4e 00 01 02 47 01 61 00 61 00 01 01 47 01 N.N...G.a.a...G. 49f0: 63 00 63 00 01 01 47 01 65 00 65 00 01 01 47 01 c.c...G.e.e...G. 4a00: 67 00 67 00 01 01 47 01 80 00 80 00 01 01 47 01 g.g...G.......G. 4a10: 92 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 ......G.......G. 4a20: 80 06 80 06 01 20 47 01 00 08 00 08 01 10 47 01 ..... G.......G. 4a30: 00 10 00 10 01 80 47 01 80 11 80 11 01 40 47 01 ......G......@G. 4a40: 00 fe 00 fe 01 01 47 01 00 ff 00 ff 01 80 79 00 ......G.......y. 4a50: 5b 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b [.%RTC_._HID.A.. 4a60: 00 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 .._CRS....G.p.p. 4a70: 01 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f .."..y.[.-TIMR._ 4a80: 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a HID.A...._CRS... 4a90: 15 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 .G.@.@...G.P.P.. 4aa0: 04 22 01 00 79 00 5b 82 32 41 43 41 44 08 5f 48 ."..y.[.2ACAD._H 4ab0: 49 44 0d 41 43 50 49 30 30 30 33 00 08 5f 50 43 ID.ACPI0003.._PC 4ac0: 4c 12 06 01 5f 53 42 5f 14 11 5f 50 53 52 00 70 L..._SB_.._PSR.p 4ad0: 01 41 43 50 57 a4 41 43 50 57 14 1a 45 43 4f 4b .ACPW.ACPW..ECOK 4ae0: 00 a0 0f 93 5e 2e 45 43 30 5f 5a 30 30 39 01 a4 ....^.EC0_Z009.. 4af0: 01 a1 03 a4 00 5b 82 4e 6f 45 43 30 5f 08 5f 48 .....[.NoEC0_._H 4b00: 49 44 0c 41 d0 0c 09 08 5f 47 50 45 0a 1c 08 5a ID.A...._GPE...Z 4b10: 30 30 39 00 08 5f 43 52 53 11 15 0a 12 47 01 62 009.._CRS....G.b 4b20: 00 62 00 01 01 47 01 66 00 66 00 01 01 79 00 14 .b...G.f.f...y.. 4b30: 3b 5f 52 45 47 02 a0 34 93 68 0a 03 70 69 5a 30 ;_REG..4.h..piZ0 4b40: 30 39 a0 28 5b 12 5f 4f 53 49 60 70 00 42 54 44 09.([._OSI`p.BTD 4b50: 53 a0 19 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 S.._OSI.Windows 4b60: 32 30 30 36 00 70 01 42 54 44 53 5b 80 45 52 41 2006.p.BTDS[.ERA 4b70: 4d 03 00 0a ff 5b 81 4e 2e 45 52 41 4d 11 00 40 M....[.N.ERAM..@ 4b80: 30 53 4d 50 52 08 53 4d 53 54 08 53 4d 41 44 08 0SMPR.SMST.SMAD. 4b90: 53 4d 43 4d 08 53 4d 44 30 40 10 42 43 4e 54 08 SMCM.SMD0@.BCNT. 4ba0: 53 4d 41 41 18 00 40 04 43 48 47 4d 10 43 48 47 SMAA..@.CHGM.CHG 4bb0: 53 10 45 4e 49 44 08 45 4e 49 42 08 45 4e 44 44 S.ENID.ENIB.ENDD 4bc0: 08 43 48 47 56 08 43 48 47 41 10 42 41 4c 30 01 .CHGV.CHGA.BAL0. 4bd0: 42 41 4c 31 01 42 41 4c 32 01 42 41 4c 33 01 42 BAL1.BAL2.BAL3.B 4be0: 42 43 30 01 42 42 43 31 01 42 42 43 32 01 42 42 BC0.BBC1.BBC2.BB 4bf0: 43 33 01 00 08 50 48 44 44 01 49 46 44 44 01 49 C3...PHDD.IFDD.I 4c00: 4f 44 44 01 53 48 44 44 01 53 31 32 30 01 45 46 ODD.SHDD.S120.EF 4c10: 44 44 01 43 52 54 44 01 53 50 57 52 01 53 42 54 DD.CRTD.SPWR.SBT 4c20: 4e 01 56 49 44 4f 01 56 4f 4c 44 01 56 4f 4c 55 N.VIDO.VOLD.VOLU 4c30: 01 4d 55 54 45 01 43 4f 4e 54 01 42 52 47 54 01 .MUTE.CONT.BRGT. 4c40: 48 42 54 4e 01 53 34 53 54 01 53 4b 45 59 01 42 HBTN.S4ST.SKEY.B 4c50: 4b 45 59 01 54 4f 55 50 01 46 4e 42 4e 01 4c 49 KEY.TOUP.FNBN.LI 4c60: 44 46 01 44 49 47 4d 01 55 57 41 4b 01 00 08 44 DF.DIGM.UWAK...D 4c70: 4b 53 50 01 44 4b 49 4e 01 44 4b 49 44 01 44 4b KSP.DKIN.DKID.DK 4c80: 4f 4b 01 00 04 44 4b 50 57 01 00 07 42 54 4e 53 OK...DKPW...BTNS 4c90: 08 53 31 4c 44 01 53 33 4c 44 01 56 47 41 51 01 .S1LD.S3LD.VGAQ. 4ca0: 50 43 4d 51 01 50 43 4d 52 01 41 44 50 54 01 53 PCMQ.PCMR.ADPT.S 4cb0: 4c 4c 53 01 53 59 53 37 01 50 57 41 4b 01 4d 57 LLS.SYS7.PWAK.MW 4cc0: 41 4b 01 4c 57 41 4b 01 00 05 00 28 54 43 4e 4c AK.LWAK....(TCNL 4cd0: 08 54 4d 50 49 08 54 4d 53 44 08 46 41 53 4e 04 .TMPI.TMSD.FASN. 4ce0: 46 41 53 55 04 50 43 56 4c 04 00 02 53 57 54 4f FASU.PCVL...SWTO 4cf0: 01 48 57 54 4f 01 4d 4f 44 45 01 46 41 4e 53 02 .HWTO.MODE.FANS. 4d00: 49 4e 49 54 01 46 41 4e 31 01 46 41 4e 32 01 46 INIT.FAN1.FAN2.F 4d10: 41 4e 54 01 53 4b 4e 4d 01 43 54 4d 50 08 4c 49 ANT.SKNM.CTMP.LI 4d20: 44 45 01 50 4d 45 45 01 50 57 42 45 01 52 4e 47 DE.PMEE.PWBE.RNG 4d30: 45 01 42 54 57 45 01 44 43 4b 45 01 00 02 53 4b E.BTWE.DCKE...SK 4d40: 54 58 08 53 4b 54 42 08 53 4b 54 43 08 53 4b 54 TX.SKTB.SKTC.SKT 4d50: 41 08 00 08 48 41 50 4c 02 48 41 50 52 01 00 05 A...HAPL.HAPR... 4d60: 42 54 44 54 01 42 54 50 57 01 42 54 44 53 01 42 BTDT.BTPW.BTDS.B 4d70: 54 50 53 01 42 54 53 57 01 42 54 57 4b 01 42 54 TPS.BTSW.BTWK.BT 4d80: 4c 44 01 00 01 42 52 54 53 08 43 4e 54 53 08 57 LD...BRTS.CNTS.W 4d90: 4c 41 54 01 42 54 41 54 01 57 4c 45 58 01 42 54 LAT.BTAT.WLEX.BT 4da0: 45 58 01 4b 4c 53 57 01 57 4c 4f 4b 01 00 02 50 EX.KLSW.WLOK...P 4db0: 54 49 44 08 43 50 55 54 08 45 50 4b 54 08 47 48 TID.CPUT.EPKT.GH 4dc0: 49 44 08 00 04 42 4d 46 30 03 42 54 59 30 01 42 ID...BMF0.BTY0.B 4dd0: 53 54 30 08 42 52 43 30 10 42 53 4e 30 10 42 50 ST0.BRC0.BSN0.BP 4de0: 56 30 10 42 44 56 30 10 42 44 43 30 10 42 46 43 V0.BDV0.BDC0.BFC 4df0: 30 10 47 41 55 30 08 43 59 43 30 08 42 50 43 30 0.GAU0.CYC0.BPC0 4e00: 10 42 41 43 30 10 42 41 54 30 08 42 54 57 30 10 .BAC0.BAT0.BTW0. 4e10: 42 44 4e 30 08 00 40 04 00 04 42 4d 46 31 03 42 BDN0..@...BMF1.B 4e20: 54 59 31 01 42 53 54 31 08 42 52 43 31 10 42 53 TY1.BST1.BRC1.BS 4e30: 4e 31 10 42 50 56 31 10 42 44 56 31 10 42 44 43 N1.BPV1.BDV1.BDC 4e40: 31 10 42 46 43 31 10 47 41 55 31 08 43 59 43 31 1.BFC1.GAU1.CYC1 4e50: 08 42 50 43 31 10 42 41 43 31 10 42 41 54 31 08 .BPC1.BAC1.BAT1. 4e60: 42 54 57 31 10 14 37 5f 51 31 31 00 70 0a 87 50 BTW1..7_Q11.p..P 4e70: 38 30 48 a0 13 49 47 44 53 5e 5e 5e 2e 47 46 58 80H..IGDS^^^.GFX 4e80: 30 42 52 54 4e 0a 87 a1 15 86 5e 5e 5e 2f 03 50 0BRTN.....^^^/.P 4e90: 45 47 50 56 47 41 5f 4c 43 44 5f 0a 87 14 37 5f EGPVGA_LCD_...7_ 4ea0: 51 31 32 00 70 0a 86 50 38 30 48 a0 13 49 47 44 Q12.p..P80H..IGD 4eb0: 53 5e 5e 5e 2e 47 46 58 30 42 52 54 4e 0a 86 a1 S^^^.GFX0BRTN... 4ec0: 15 86 5e 5e 5e 2f 03 50 45 47 50 56 47 41 5f 4c ..^^^/.PEGPVGA_L 4ed0: 43 44 5f 0a 86 14 40 05 5f 51 31 43 00 70 0d 3d CD_...@._Q1C.p.= 4ee0: 3d 3d 3d 3d 51 55 45 52 59 5f 31 43 3d 3d 3d 3d ====QUERY_1C==== 4ef0: 3d 00 5b 31 a0 31 56 49 44 4f a0 12 49 47 44 53 =.[1.1VIDO..IGDS 4f00: 5e 5e 5e 2e 47 46 58 30 47 48 44 53 00 a1 12 5e ^^^.GFX0GHDS...^ 4f10: 5e 5e 2f 03 50 45 47 50 56 47 41 5f 44 53 53 57 ^^/.PEGPVGA_DSSW 4f20: 70 00 56 49 44 4f 14 21 5f 51 31 44 00 70 0d 3d p.VIDO.!_Q1D.p.= 4f30: 3d 3d 3d 3d 51 55 45 52 59 5f 31 44 3d 3d 3d 3d ====QUERY_1D==== 4f40: 3d 00 5b 31 50 43 4c 4b 14 21 5f 51 31 45 00 70 =.[1PCLK.!_Q1E.p 4f50: 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 31 45 3d 3d .=====QUERY_1E== 4f60: 3d 3d 3d 00 5b 31 50 43 4c 4b 14 39 5f 51 32 35 ===.[1PCLK.9_Q25 4f70: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 35 .p.=====QUERY_25 4f80: 3d 3d 3d 3d 3d 00 5b 31 5b 22 0b e8 03 86 5e 5e =====.[1["....^^ 4f90: 42 41 54 31 0a 81 5b 22 0b e8 03 86 5e 5e 42 41 BAT1..["....^^BA 4fa0: 54 31 0a 80 14 2f 5f 51 33 34 00 70 0d 3d 3d 3d T1.../_Q34.p.=== 4fb0: 3d 3d 51 55 45 52 59 5f 33 34 3d 3d 3d 3d 3d 00 ==QUERY_34=====. 4fc0: 5b 31 a0 11 42 4b 45 59 50 48 53 53 0a 71 70 00 [1..BKEYPHSS.qp. 4fd0: 42 4b 45 59 14 32 5f 51 33 37 00 70 0d 3d 3d 3d BKEY.2_Q37.p.=== 4fe0: 3d 3d 51 55 45 52 59 5f 33 37 3d 3d 3d 3d 3d 00 ==QUERY_37=====. 4ff0: 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 03 86 5e [1.ACAD..["....^ 5000: 5e 42 41 54 31 0a 80 14 32 5f 51 33 38 00 70 0d ^BAT1...2_Q38.p. 5010: 3d 3d 3d 3d 3d 51 55 45 52 59 5f 33 38 3d 3d 3d =====QUERY_38=== 5020: 3d 3d 00 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 ==.[1.ACAD..[".. 5030: 03 86 5e 5e 42 41 54 31 0a 80 14 29 5f 51 32 44 ..^^BAT1...)_Q2D 5040: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 44 .p.=====QUERY_2D 5050: 3d 3d 3d 3d 3d 00 5b 31 70 00 44 54 53 4d 54 52 =====.[1p.DTSMTR 5060: 41 50 0a 46 14 29 5f 51 32 45 00 70 0d 3d 3d 3d AP.F.)_Q2E.p.=== 5070: 3d 3d 51 55 45 52 59 5f 32 45 3d 3d 3d 3d 3d 00 ==QUERY_2E=====. 5080: 5b 31 70 01 44 54 53 4d 54 52 41 50 0a 46 5b 80 [1p.DTSMTRAP.F[. 5090: 43 43 4c 4b 01 0b 10 10 0a 04 5b 81 20 43 43 4c CCLK......[. CCL 50a0: 4b 03 00 01 44 55 54 59 03 54 48 45 4e 01 00 03 K...DUTY.THEN... 50b0: 46 54 54 5f 01 00 08 54 53 54 53 01 5b 80 45 43 FTT_...TSTS.[.EC 50c0: 52 4d 03 00 0a ff 5b 81 44 04 45 43 52 4d 11 00 RM....[.D.ECRM.. 50d0: 40 4a 45 52 49 42 10 45 52 42 44 08 00 48 0a 53 @JERIB.ERBD..H.S 50e0: 44 54 4d 08 46 53 53 4e 04 46 41 4e 55 04 50 54 DTM.FSSN.FANU.PT 50f0: 56 4c 03 00 04 54 54 48 52 01 00 48 06 50 4a 49 VL...TTHR..H.PJI 5100: 44 08 00 08 00 48 1d 52 46 52 44 10 5b 01 46 41 D....H.RFRD.[.FA 5110: 4d 58 00 14 22 46 41 4e 47 01 5b 23 46 41 4d 58 MX.."FANG.[#FAMX 5120: ff ff 70 68 45 52 49 42 70 45 52 42 44 60 5b 27 ..phERIBpERBD`[' 5130: 46 41 4d 58 a4 60 14 22 46 41 4e 57 02 5b 23 46 FAMX.`."FANW.[#F 5140: 41 4d 58 ff ff 70 68 45 52 49 42 70 69 45 52 42 AMX..phERIBpiERB 5150: 44 5b 27 46 41 4d 58 a4 69 14 09 54 55 56 52 01 D['FAMX.i..TUVR. 5160: a4 0a 03 14 2e 54 48 52 4f 01 a0 09 93 68 00 a4 .....THRO....h.. 5170: 54 48 45 4e a1 1d a0 09 93 68 01 a4 44 55 54 59 THEN.....h..DUTY 5180: a1 11 a0 0a 93 68 0a 02 a4 54 54 48 52 a1 04 a4 .....h...TTHR... 5190: 0a ff 14 2a 43 4c 43 4b 01 a0 10 93 68 00 70 00 ...*CLCK....h.p. 51a0: 54 48 45 4e 70 00 46 54 54 5f a1 0d 70 68 44 55 THENp.FTT_..phDU 51b0: 54 59 70 01 54 48 45 4e a4 54 48 45 4e 14 37 50 TYp.THEN.THEN.7P 51c0: 43 4c 4b 00 70 50 54 56 4c 60 a0 10 93 60 00 70 CLK.pPTVL`...`.p 51d0: 00 54 48 45 4e 70 00 46 54 54 5f a1 19 76 60 70 .THENp.FTT_..v`p 51e0: 80 60 00 61 7b 61 0a 07 61 70 61 44 55 54 59 70 .`.a{a..apaDUTYp 51f0: 01 54 48 45 4e 5b 82 4b 22 42 41 54 31 08 5f 48 .THEN[.K"BAT1._H 5200: 49 44 0c 41 d0 0c 0a 08 5f 55 49 44 01 08 5f 50 ID.A...._UID.._P 5210: 43 4c 12 06 01 5f 53 42 5f 14 39 5f 53 54 41 00 CL..._SB_.9_STA. 5220: a0 29 90 45 43 4f 4b 93 45 43 44 59 00 a0 13 5e .).ECOK.ECDY...^ 5230: 5e 2e 45 43 30 5f 42 41 4c 30 5b 22 0a 14 a4 0a ^.EC0_BAL0[".... 5240: 1f a1 08 5b 22 0a 14 a4 0a 0f a1 08 5b 22 0a 14 ...[".......[".. 5250: a4 0a 1f 14 48 10 5f 42 49 46 00 08 53 54 41 54 ....H._BIF..STAT 5260: 12 3a 0d 01 0b a0 0f 0b a0 0f 01 0b 5c 2b 0b a4 .:..........\+.. 5270: 01 0a 9c 0b 08 01 0b c4 0e 0d 50 41 33 34 36 35 ..........PA3465 5280: 55 20 00 0d 33 36 35 38 51 00 0d 4c 69 2d 49 6f U ..3658Q..Li-Io 5290: 6e 00 0d 43 4f 4d 50 41 4c 20 00 a0 4b 07 90 45 n..COMPAL ..K..E 52a0: 43 4f 4b 93 45 43 44 59 00 70 5e 5e 2e 45 43 30 COK.ECDY.p^^.EC0 52b0: 5f 42 44 4e 30 60 a0 23 93 60 0a 08 70 0a b4 88 _BDN0`.#.`..p... 52c0: 53 54 41 54 0a 06 00 70 0d 50 41 33 34 35 37 55 STAT...p.PA3457U 52d0: 20 00 88 53 54 41 54 0a 09 00 a0 24 93 60 0a 20 ..STAT....$.`. 52e0: 70 0b 02 01 88 53 54 41 54 0a 06 00 70 0d 50 41 p....STAT...p.PA 52f0: 33 34 35 37 55 20 00 88 53 54 41 54 0a 09 00 5b 3457U ..STAT...[ 5300: 22 0a 14 70 5e 5e 2e 45 43 30 5f 42 44 43 30 42 "..p^^.EC0_BDC0B 5310: 46 43 31 5b 22 0a 14 a1 12 70 0d 4c 69 2d 49 6f FC1["....p.Li-Io 5320: 6e 00 88 53 54 41 54 0a 0b 00 a0 2c 42 46 43 31 n..STAT....,BFC1 5330: 78 42 46 43 31 0a 64 60 61 77 61 0a 64 61 70 61 xBFC1.d`awa.dapa 5340: 42 46 43 31 70 61 88 53 54 41 54 01 00 70 61 88 BFC1pa.STAT..pa. 5350: 53 54 41 54 0a 02 00 a4 53 54 41 54 14 45 0c 5f STAT....STAT.E._ 5360: 42 53 54 00 08 50 42 53 54 12 10 04 00 0c ff ff BST..PBST....... 5370: ff ff 0c ff ff ff ff 0b 5c 2b 70 0b 5c 2b 63 a0 ........\+p.\+c. 5380: 38 90 45 43 4f 4b 93 45 43 44 59 00 5b 22 0a 14 8.ECOK.ECDY.[".. 5390: 70 5e 5e 2e 45 43 30 5f 42 53 54 30 42 53 54 31 p^^.EC0_BST0BST1 53a0: 5b 22 0a 14 70 5e 5e 2e 45 43 30 5f 47 41 55 30 ["..p^^.EC0_GAU0 53b0: 42 47 55 31 5b 22 0a 14 a0 15 42 46 43 31 77 42 BGU1["....BFC1wB 53c0: 47 55 31 42 46 43 31 62 78 62 0a 64 64 62 a1 09 GU1BFC1bxb.ddb.. 53d0: 77 42 47 55 31 0a 28 62 70 42 53 54 31 88 50 42 wBGU1.(bpBST1.PB 53e0: 53 54 00 00 70 00 88 50 42 53 54 01 00 70 62 88 ST..p..PBST..pb. 53f0: 50 42 53 54 0a 02 00 70 63 88 50 42 53 54 0a 03 PBST...pc.PBST.. 5400: 00 a0 1b 94 45 43 44 59 00 76 45 43 44 59 a0 0e ....ECDY.vECDY.. 5410: 93 45 43 44 59 00 86 42 41 54 31 0a 80 a4 50 42 .ECDY..BAT1...PB 5420: 53 54 5b 82 2e 50 53 32 4b 08 5f 48 49 44 0c 41 ST[..PS2K._HID.A 5430: d0 03 03 08 5f 43 52 53 11 19 0a 16 47 01 60 00 ...._CRS....G.`. 5440: 60 00 01 01 47 01 64 00 64 00 01 01 23 02 00 01 `...G.d.d...#... 5450: 79 00 5b 82 1e 50 53 32 4d 08 5f 48 49 44 0c 41 y.[..PS2M._HID.A 5460: d0 0f 13 08 5f 43 52 53 11 09 0a 06 23 00 10 01 ...._CRS....#... 5470: 79 00 5b 82 43 6a 50 41 54 41 08 5f 41 44 52 0c y.[.CjPATA._ADR. 5480: 01 00 1f 00 5b 80 50 41 43 53 02 0a 40 0a c0 5b ....[.PACS..@..[ 5490: 81 49 04 50 41 43 53 03 50 52 49 54 10 00 10 50 .I.PACS.PRIT...P 54a0: 53 49 54 04 00 1c 53 59 4e 43 04 00 0c 53 44 54 SIT...SYNC...SDT 54b0: 30 02 00 02 53 44 54 31 02 00 4a 04 49 43 52 30 0...SDT1..J.ICR0 54c0: 04 49 43 52 31 04 49 43 52 32 04 49 43 52 33 04 .ICR1.ICR2.ICR3. 54d0: 49 43 52 34 04 49 43 52 35 04 5b 82 4b 63 50 52 ICR4.ICR5.[.KcPR 54e0: 49 44 08 5f 41 44 52 00 14 40 17 5f 47 54 4d 00 ID._ADR..@._GTM. 54f0: 08 50 42 55 46 11 17 0a 14 00 00 00 00 00 00 00 .PBUF........... 5500: 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 50 42 ..............PB 5510: 55 46 00 50 49 4f 30 8a 50 42 55 46 0a 04 44 4d UF.PIO0.PBUF..DM 5520: 41 30 8a 50 42 55 46 0a 08 50 49 4f 31 8a 50 42 A0.PBUF..PIO1.PB 5530: 55 46 0a 0c 44 4d 41 31 8a 50 42 55 46 0a 10 46 UF..DMA1.PBUF..F 5540: 4c 41 47 70 47 45 54 50 50 52 49 54 50 49 4f 30 LAGpGETPPRITPIO0 5550: 70 47 44 4d 41 7b 53 59 4e 43 01 00 7b 49 43 52 pGDMA{SYNC..{ICR 5560: 33 01 00 7b 49 43 52 30 01 00 53 44 54 30 7b 49 3..{ICR0..SDT0{I 5570: 43 52 31 01 00 44 4d 41 30 a0 14 93 44 4d 41 30 CR1..DMA0...DMA0 5580: 0c ff ff ff ff 70 50 49 4f 30 44 4d 41 30 a0 2e .....pPIO0DMA0.. 5590: 7b 50 52 49 54 0b 00 40 00 a0 14 93 7b 50 52 49 {PRIT..@....{PRI 55a0: 54 0a 90 00 0a 80 70 0b 84 03 50 49 4f 31 a1 0e T.....p...PIO1.. 55b0: 70 47 45 54 54 50 53 49 54 50 49 4f 31 a1 0b 70 pGETTPSITPIO1..p 55c0: 0c ff ff ff ff 50 49 4f 31 70 47 44 4d 41 7b 53 .....PIO1pGDMA{S 55d0: 59 4e 43 0a 02 00 7b 49 43 52 33 0a 02 00 7b 49 YNC...{ICR3...{I 55e0: 43 52 30 0a 02 00 53 44 54 31 7b 49 43 52 31 0a CR0...SDT1{ICR1. 55f0: 02 00 44 4d 41 31 a0 14 93 44 4d 41 31 0c ff ff ..DMA1...DMA1... 5600: ff ff 70 50 49 4f 31 44 4d 41 31 70 47 45 54 46 ..pPIO1DMA1pGETF 5610: 7b 53 59 4e 43 01 00 7b 53 59 4e 43 0a 02 00 50 {SYNC..{SYNC...P 5620: 52 49 54 46 4c 41 47 a0 2c 7b 93 50 49 4f 30 0c RITFLAG.,{.PIO0. 5630: ff ff ff ff 93 44 4d 41 30 0c ff ff ff ff 00 70 .....DMA0......p 5640: 0a 78 50 49 4f 30 70 0a 14 44 4d 41 30 70 0a 03 .xPIO0p..DMA0p.. 5650: 46 4c 41 47 a4 50 42 55 46 14 4c 2a 5f 53 54 4d FLAG.PBUF.L*_STM 5660: 03 8a 68 00 50 49 4f 30 8a 68 0a 04 44 4d 41 30 ..h.PIO0.h..DMA0 5670: 8a 68 0a 08 50 49 4f 31 8a 68 0a 0c 44 4d 41 31 .h..PIO1.h..DMA1 5680: 8a 68 0a 10 46 4c 41 47 a0 41 12 93 87 69 0b 00 .h..FLAG.A...i.. 5690: 02 7b 50 52 49 54 0b f0 c0 50 52 49 54 7b 53 59 .{PRIT...PRIT{SY 56a0: 4e 43 0a 02 53 59 4e 43 70 00 53 44 54 30 7b 49 NC..SYNCp.SDT0{I 56b0: 43 52 30 0a 02 49 43 52 30 7b 49 43 52 31 0a 02 CR0..ICR0{ICR1.. 56c0: 49 43 52 31 7b 49 43 52 33 0a 02 49 43 52 33 7b ICR1{ICR3..ICR3{ 56d0: 49 43 52 35 0a 02 49 43 52 35 8b 69 0a 62 57 34 ICR5..ICR5.i.bW4 56e0: 39 30 8b 69 0a 6a 57 35 33 30 8b 69 0a 7e 57 36 90.i.jW530.i.~W6 56f0: 33 30 8b 69 0a 80 57 36 34 30 8b 69 0a b0 57 38 30.i..W640.i..W8 5700: 38 30 8b 69 0a ba 57 39 33 30 7d 50 52 49 54 0b 80.i..W930}PRIT. 5710: 04 80 50 52 49 54 a0 1e 90 7b 46 4c 41 47 0a 02 ..PRIT...{FLAG.. 5720: 00 7b 57 34 39 30 0b 00 08 00 7d 50 52 49 54 0a .{W490....}PRIT. 5730: 02 50 52 49 54 7d 50 52 49 54 53 45 54 50 50 49 .PRIT}PRITSETPPI 5740: 4f 30 57 35 33 30 57 36 34 30 50 52 49 54 a0 4b O0W530W640PRIT.K 5750: 05 7b 46 4c 41 47 01 00 7d 53 59 4e 43 01 53 59 .{FLAG..}SYNC.SY 5760: 4e 43 70 53 44 4d 41 44 4d 41 30 53 44 54 30 a0 NCpSDMADMA0SDT0. 5770: 12 95 44 4d 41 30 0a 1e 7d 49 43 52 33 01 49 43 ..DMA0..}ICR3.IC 5780: 52 33 a0 12 95 44 4d 41 30 0a 3c 7d 49 43 52 30 R3...DMA0.<}ICR0 5790: 01 49 43 52 30 a0 14 7b 57 39 33 30 0b 00 20 00 .ICR0..{W930.. . 57a0: 7d 49 43 52 31 01 49 43 52 31 a0 4b 15 93 87 6a }ICR1.ICR1.K...j 57b0: 0b 00 02 7b 50 52 49 54 0b 0f bf 50 52 49 54 70 ...{PRIT...PRITp 57c0: 00 50 53 49 54 7b 53 59 4e 43 01 53 59 4e 43 70 .PSIT{SYNC.SYNCp 57d0: 00 53 44 54 31 7b 49 43 52 30 01 49 43 52 30 7b .SDT1{ICR0.ICR0{ 57e0: 49 43 52 31 01 49 43 52 31 7b 49 43 52 33 01 49 ICR1.ICR1{ICR3.I 57f0: 43 52 33 7b 49 43 52 35 01 49 43 52 35 8b 6a 0a CR3{ICR5.ICR5.j. 5800: 62 57 34 39 31 8b 6a 0a 6a 57 35 33 31 8b 6a 0a bW491.j.jW531.j. 5810: 7e 57 36 33 31 8b 6a 0a 80 57 36 34 31 8b 6a 0a ~W631.j..W641.j. 5820: b0 57 38 38 31 8b 6a 0a ba 57 39 33 31 7d 50 52 .W881.j..W931}PR 5830: 49 54 0b 40 80 50 52 49 54 a0 1e 90 7b 46 4c 41 IT.@.PRIT...{FLA 5840: 47 0a 08 00 7b 57 34 39 31 0b 00 08 00 7d 50 52 G...{W491....}PR 5850: 49 54 0a 20 50 52 49 54 a0 4c 04 7b 46 4c 41 47 IT. PRIT.L.{FLAG 5860: 0a 10 00 7d 50 52 49 54 0b 00 40 50 52 49 54 a0 ...}PRIT..@PRIT. 5870: 13 94 50 49 4f 31 0a f0 7d 50 52 49 54 0a 80 50 ..PIO1..}PRIT..P 5880: 52 49 54 a1 21 7d 50 52 49 54 0a 10 50 52 49 54 RIT.!}PRIT..PRIT 5890: 70 53 45 54 54 50 49 4f 31 57 35 33 31 57 36 34 pSETTPIO1W531W64 58a0: 31 50 53 49 54 a0 40 06 7b 46 4c 41 47 0a 04 00 1PSIT.@.{FLAG... 58b0: 7d 53 59 4e 43 0a 02 53 59 4e 43 70 53 44 4d 41 }SYNC..SYNCpSDMA 58c0: 44 4d 41 31 53 44 54 31 a0 13 95 44 4d 41 31 0a DMA1SDT1...DMA1. 58d0: 1e 7d 49 43 52 33 0a 02 49 43 52 33 a0 13 95 44 .}ICR3..ICR3...D 58e0: 4d 41 31 0a 3c 7d 49 43 52 30 0a 02 49 43 52 30 MA1.<}ICR0..ICR0 58f0: a0 15 7b 57 39 33 31 0b 00 20 00 7d 49 43 52 31 ..{W931.. .}ICR1 5900: 0a 02 49 43 52 31 5b 82 47 10 50 5f 44 30 08 5f ..ICR1[.G.P_D0._ 5910: 41 44 52 00 14 4a 0f 5f 47 54 46 00 08 50 49 42 ADR..J._GTF..PIB 5920: 30 11 11 0a 0e 03 00 00 00 00 a0 ef 03 00 00 00 0............... 5930: 00 a0 ef 8c 50 49 42 30 01 50 4d 44 30 8c 50 49 ....PIB0.PMD0.PI 5940: 42 30 0a 08 44 4d 44 30 a0 40 06 7b 50 52 49 54 B0..DMD0.@.{PRIT 5950: 0a 02 00 a0 13 93 7b 50 52 49 54 0a 09 00 0a 08 ......{PRIT..... 5960: 70 0a 08 50 4d 44 30 a1 41 04 70 0a 0a 50 4d 44 p..PMD0.A.p..PMD 5970: 30 7a 7b 50 52 49 54 0b 00 03 00 0a 08 60 7a 7b 0z{PRIT......`z{ 5980: 50 52 49 54 0b 00 30 00 0a 0c 61 72 60 61 62 a0 PRIT..0...ar`ab. 5990: 0c 93 0a 03 62 70 0a 0b 50 4d 44 30 a0 0c 93 0a ....bp..PMD0.... 59a0: 05 62 70 0a 0c 50 4d 44 30 a1 07 70 01 50 4d 44 .bp..PMD0..p.PMD 59b0: 30 a0 43 04 7b 53 59 4e 43 01 00 70 7d 53 44 54 0.C.{SYNC..p}SDT 59c0: 30 0a 40 00 44 4d 44 30 a0 2c 7b 49 43 52 31 01 0.@.DMD0.,{ICR1. 59d0: 00 a0 13 7b 49 43 52 30 01 00 72 44 4d 44 30 0a ...{ICR0..rDMD0. 59e0: 02 44 4d 44 30 a0 0f 7b 49 43 52 33 01 00 70 0a .DMD0..{ICR3..p. 59f0: 45 44 4d 44 30 a1 14 7d 74 7b 50 4d 44 30 0a 07 EDMD0..}t{PMD0.. 5a00: 00 0a 02 00 0a 20 44 4d 44 30 a4 50 49 42 30 5b ..... DMD0.PIB0[ 5a10: 82 46 10 50 5f 44 31 08 5f 41 44 52 01 14 49 0f .F.P_D1._ADR..I. 5a20: 5f 47 54 46 00 08 50 49 42 31 11 11 0a 0e 03 00 _GTF..PIB1...... 5a30: 00 00 00 b0 ef 03 00 00 00 00 b0 ef 8c 50 49 42 .............PIB 5a40: 31 01 50 4d 44 31 8c 50 49 42 31 0a 08 44 4d 44 1.PMD1.PIB1..DMD 5a50: 31 a0 4b 05 7b 50 52 49 54 0a 20 00 a0 13 93 7b 1.K.{PRIT. ....{ 5a60: 50 52 49 54 0a 90 00 0a 80 70 0a 08 50 4d 44 31 PRIT.....p..PMD1 5a70: a1 3c 72 7b 50 53 49 54 0a 03 00 7a 7b 50 53 49 .. 0050: 80 49 ee 6a 65 26 72 1e cd bf 5f 2f 96 d6 c0 0a .I.je&r..._/.... 0060: 92 f5 06 b5 00 b2 3b 29 02 e2 4c 8d c2 f2 bc 41 ......;)..L....A 0070: 77 9c 70 f0 f3 1b 09 d2 63 5a dc a8 83 f8 5e c9 w.p.....cZ....^. 0080: 15 95 f9 fa fd dc 05 b7 4d 67 7f 2d b3 84 33 20 ........Mg.-..3 0090: e1 d1 79 2a a7 6a 77 d1 b6 20 2a 76 42 c5 d5 e9 ..y*.jw.. *vB... 00a0: b6 43 40 55 44 c3 c9 37 99 5f 41 97 70 f3 d1 f6 .C@UD..7._A.p... 00b0: 07 ec 7b 1a 29 a1 c1 f1 91 fd 48 86 6e 3e ce cb ..{.).....H.n>.. 00c0: 01 00 00 00 b6 00 00 00 00 00 02 00 4c 45 4e 4f ............LENO 00d0: 56 4f 54 50 2d 36 38 20 20 20 57 49 4e 44 4f 57 VOTP-68 WINDOW 00e0: 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 S .............. 00f0: 00 00 00 00 00 00 8a 6e 2e c9 36 e6 7f 10 8a ea .......n..6..... 0100: 14 ad d2 93 b7 6d 9b 73 ad 83 36 b8 6c a7 a7 ee .....m.s..6.l... 0110: 37 47 16 fe f3 fc cd c7 89 84 06 16 91 0b 1e 81 7G.............. 0120: 11 42 b1 35 52 57 f6 6b bb 5f a5 81 e2 ff 89 8a .B.5RW.k._...... 0130: 95 c3 4d fc e9 56 4f 4c 34 cc 99 5e 62 e1 90 8a ..M..VOL4..^b... 0140: 54 be 4a 00 5c 9b a0 86 41 46 66 9d e2 f2 e7 36 T.J.\...AFf....6 0150: 9c 33 91 27 e7 8d 5c a1 d8 f9 a4 61 8a 1c 04 07 .3.'..\....a.... 0160: e3 2a 1e 14 f1 bd 7f 4c 09 ff 19 11 a9 d4 74 ca .*.....L......t. 0170: 11 9e dc 54 39 bf ...T9. BOOT @ 0xbf6dffd8 0000: 42 4f 4f 54 28 00 00 00 01 a5 50 54 4c 54 44 20 BOOT(.....PTLTD 0010: 24 53 42 46 54 42 4c 24 00 00 04 06 20 4c 54 50 $SBFTBL$.... LTP 0020: 01 00 00 00 36 00 00 00 ....6... SSDT @ 0xbf6d98bd 0000: 53 53 44 54 ad 02 00 00 01 59 53 61 74 61 52 65 SSDT.....YSataRe 0010: 53 61 74 61 41 68 63 69 00 10 00 00 49 4e 54 4c SataAhci....INTL 0020: 24 06 05 20 10 48 28 5c 2f 03 5f 53 42 5f 50 43 $.. .H(\/._SB_PC 0030: 49 30 53 41 54 41 5b 82 4f 0c 50 52 54 30 08 5f I0SATA[.O.PRT0._ 0040: 41 44 52 0b ff ff 14 44 0b 5f 53 44 44 01 08 47 ADR....D._SDD..G 0050: 42 55 30 11 0a 0a 07 00 00 00 00 00 a0 00 8c 47 BU0............G 0060: 42 55 30 0a 00 47 42 30 30 8c 47 42 55 30 0a 01 BU0..GB00.GBU0.. 0070: 47 42 30 31 8c 47 42 55 30 0a 02 47 42 30 32 8c GB01.GBU0..GB02. 0080: 47 42 55 30 0a 03 47 42 30 33 8c 47 42 55 30 0a GBU0..GB03.GBU0. 0090: 04 47 42 30 34 8c 47 42 55 30 0a 05 47 42 30 35 .GB04.GBU0..GB05 00a0: 8c 47 42 55 30 0a 06 47 42 30 36 a0 46 04 93 87 .GBU0..GB06.F... 00b0: 68 0b 00 02 8b 68 0a 9c 57 37 38 30 a0 1e 7b 57 h....h..W780..{W 00c0: 37 38 30 0a 08 00 70 0a 10 47 42 30 30 70 0a 03 780...p..GB00p.. 00d0: 47 42 30 31 70 0a ef 47 42 30 36 a1 16 70 0a 90 GB01p..GB06..p.. 00e0: 47 42 30 30 70 0a 03 47 42 30 31 70 0a ef 47 42 GB00p..GB01p..GB 00f0: 30 36 70 47 42 55 30 47 54 46 30 14 0b 5f 47 54 06pGBU0GTF0.._GT 0100: 46 00 a4 47 54 46 30 5b 82 41 0d 50 52 54 31 08 F..GTF0[.A.PRT1. 0110: 5f 41 44 52 0c ff ff 01 00 14 44 0b 5f 53 44 44 _ADR......D._SDD 0120: 01 08 47 42 55 31 11 0a 0a 07 00 00 00 00 00 a0 ..GBU1.......... 0130: 00 8c 47 42 55 31 0a 00 47 42 31 30 8c 47 42 55 ..GBU1..GB10.GBU 0140: 31 0a 01 47 42 31 31 8c 47 42 55 31 0a 02 47 42 1..GB11.GBU1..GB 0150: 31 32 8c 47 42 55 31 0a 03 47 42 31 33 8c 47 42 12.GBU1..GB13.GB 0160: 55 31 0a 04 47 42 31 34 8c 47 42 55 31 0a 05 47 U1..GB14.GBU1..G 0170: 42 31 35 8c 47 42 55 31 0a 06 47 42 31 36 a0 46 B15.GBU1..GB16.F 0180: 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 38 31 a0 ...h....h..W781. 0190: 1e 7b 57 37 38 31 0a 08 00 70 0a 10 47 42 31 30 .{W781...p..GB10 01a0: 70 0a 03 47 42 31 31 70 0a ef 47 42 31 36 a1 16 p..GB11p..GB16.. 01b0: 70 0a 90 47 42 31 30 70 0a 03 47 42 31 31 70 0a p..GB10p..GB11p. 01c0: ef 47 42 31 36 70 47 42 55 31 47 54 46 31 14 0b .GB16pGBU1GTF1.. 01d0: 5f 47 54 46 00 a4 47 54 46 31 5b 82 41 0d 50 52 _GTF..GTF1[.A.PR 01e0: 54 32 08 5f 41 44 52 0c ff ff 02 00 14 44 0b 5f T2._ADR......D._ 01f0: 53 44 44 01 08 47 42 55 32 11 0a 0a 07 00 00 00 SDD..GBU2....... 0200: 00 00 a0 00 8c 47 42 55 32 0a 00 47 42 32 30 8c .....GBU2..GB20. 0210: 47 42 55 32 0a 01 47 42 32 31 8c 47 42 55 32 0a GBU2..GB21.GBU2. 0220: 02 47 42 32 32 8c 47 42 55 32 0a 03 47 42 32 33 .GB22.GBU2..GB23 0230: 8c 47 42 55 32 0a 04 47 42 32 34 8c 47 42 55 32 .GBU2..GB24.GBU2 0240: 0a 05 47 42 32 35 8c 47 42 55 32 0a 06 47 42 32 ..GB25.GBU2..GB2 0250: 36 a0 46 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 6.F...h....h..W7 0260: 38 32 a0 1e 7b 57 37 38 32 0a 08 00 70 0a 10 47 82..{W782...p..G 0270: 42 32 30 70 0a 03 47 42 32 31 70 0a ef 47 42 32 B20p..GB21p..GB2 0280: 36 a1 16 70 0a 90 47 42 32 30 70 0a 03 47 42 32 6..p..GB20p..GB2 0290: 31 70 0a ef 47 42 32 36 70 47 42 55 32 47 54 46 1p..GB26pGBU2GTF 02a0: 32 14 0b 5f 47 54 46 00 a4 47 54 46 32 2.._GTF..GTF2 SSDT @ 0xbf6d981a 0000: 53 53 44 54 a3 00 00 00 01 ed 42 72 74 52 65 66 SSDT......BrtRef 0010: 44 44 30 31 42 52 54 00 00 10 00 00 49 4e 54 4c DD01BRT.....INTL 0020: 24 06 05 20 10 4e 07 5c 2f 04 5f 53 42 5f 50 43 $.. .N.\/._SB_PC 0030: 49 30 47 46 58 30 44 44 30 33 14 1e 5f 42 43 4c I0GFX0DD03.._BCL 0040: 00 a4 12 16 0a 0a 46 0a 28 0a 00 0a 0a 0a 14 0a ......F.(....... 0050: 1e 0a 28 0a 32 0a 3c 0a 46 14 25 5f 42 43 4d 01 ..(.2.<.F.%_BCM. 0060: 78 68 0a 0a 60 61 70 61 5c 2f 05 5f 53 42 5f 50 xh..`apa\/._SB_P 0070: 43 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 14 CI0LPCBEC0_BRTS. 0080: 23 5f 42 51 43 00 77 5c 2f 05 5f 53 42 5f 50 43 #_BQC.w\/._SB_PC 0090: 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 0a 0a I0LPCBEC0_BRTS.. 00a0: 60 a4 60 `.` SSDT @ 0xbf6d8e10 0000: 53 53 44 54 5f 02 00 00 01 c8 50 6d 52 65 66 00 SSDT_.....PmRef. 0010: 43 70 75 30 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu0Tst..0..INTL 0020: 24 06 05 20 10 4a 23 5c 2e 5f 50 52 5f 43 50 55 $.. .J#\._PR_CPU 0030: 30 08 5f 54 50 43 0a 00 14 4d 06 5f 50 54 43 00 0._TPC...M._PTC. 0040: a0 37 7b 50 44 43 30 0a 04 00 a4 12 2c 02 11 14 .7{PDC0.....,... 0050: 0a 11 82 0c 00 7f 00 00 00 00 00 00 00 00 00 00 ................ 0060: 00 79 00 11 14 0a 11 82 0c 00 7f 00 00 00 00 00 .y.............. 0070: 00 00 00 00 00 00 79 00 a4 12 2c 02 11 14 0a 11 ......y...,..... 0080: 82 0c 00 01 04 01 00 10 10 00 00 00 00 00 00 79 ...............y 0090: 00 11 14 0a 11 82 0c 00 01 04 01 00 10 10 00 00 ................ 00a0: 00 00 00 00 79 00 08 54 53 53 49 12 41 07 08 12 ....y..TSSI.A... 00b0: 0d 05 0a 64 0b e8 03 0a 00 0a 00 0a 00 12 0d 05 ...d............ 00c0: 0a 58 0b 6b 03 0a 00 0a 0f 0a 00 12 0d 05 0a 4b .X.k...........K 00d0: 0b ee 02 0a 00 0a 0e 0a 00 12 0d 05 0a 3f 0b 71 .............?.q 00e0: 02 0a 00 0a 0d 0a 00 12 0d 05 0a 32 0b f4 01 0a ...........2.... 00f0: 00 0a 0c 0a 00 12 0d 05 0a 26 0b 77 01 0a 00 0a .........&.w.... 0100: 0b 0a 00 12 0c 05 0a 19 0a fa 0a 00 0a 0a 0a 00 ................ 0110: 12 0c 05 0a 0d 0a 7d 0a 00 0a 09 0a 00 08 54 53 ......}.......TS 0120: 53 4d 12 41 07 08 12 0d 05 0a 64 0b e8 03 0a 00 SM.A......d..... 0130: 0a 00 0a 00 12 0d 05 0a 58 0b 6b 03 0a 00 0a 1e ........X.k..... 0140: 0a 00 12 0d 05 0a 4b 0b ee 02 0a 00 0a 1c 0a 00 ......K......... 0150: 12 0d 05 0a 3f 0b 71 02 0a 00 0a 1a 0a 00 12 0d ....?.q......... 0160: 05 0a 32 0b f4 01 0a 00 0a 18 0a 00 12 0d 05 0a ..2............. 0170: 26 0b 77 01 0a 00 0a 16 0a 00 12 0c 05 0a 19 0a &.w............. 0180: fa 0a 00 0a 14 0a 00 12 0c 05 0a 0d 0a 7d 0a 00 .............}.. 0190: 0a 12 0a 00 08 54 53 53 46 0a 00 14 43 08 5f 54 .....TSSF...C._T 01a0: 53 53 00 a0 47 06 90 92 54 53 53 46 5b 12 5f 50 SS..G...TSSF[._P 01b0: 53 53 00 70 5f 50 53 53 60 70 87 60 61 76 61 70 SS.p_PSS`p.`avap 01c0: 83 88 83 88 60 61 00 0a 01 00 62 70 0a 00 63 a2 ....`a....bp..c. 01d0: 35 95 63 87 54 53 53 49 70 78 77 62 74 0a 08 63 5.c.TSSIpxwbt..c 01e0: 00 00 0a 08 00 00 64 70 64 88 83 88 54 53 53 49 ......dpd...TSSI 01f0: 63 00 0a 01 00 70 64 88 83 88 54 53 53 4d 63 00 c....pd...TSSMc. 0200: 0a 01 00 75 63 70 ff 54 53 53 46 a0 0e 7b 50 44 ...ucp.TSSF..{PD 0210: 43 30 0a 04 00 a4 54 53 53 4d a4 54 53 53 49 14 C0....TSSM.TSSI. 0220: 3f 5f 54 53 44 00 a0 27 90 7b 43 46 47 44 0c 00 ?_TSD..'.{CFGD.. 0230: 00 00 01 00 92 7b 50 44 43 30 0a 04 00 a4 12 0f .....{PDC0...... 0240: 01 12 0c 05 0a 05 0a 00 0a 00 0a fd 0a 02 a4 12 ................ 0250: 0f 01 12 0c 05 0a 05 0a 00 0a 00 0a fc 0a 01 ............... SSDT @ 0xbf6d8d6a 0000: 53 53 44 54 a6 00 00 00 01 6d 50 6d 52 65 66 00 SSDT.....mPmRef. 0010: 43 70 75 31 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu1Tst..0..INTL 0020: 24 06 05 20 10 41 08 5c 2e 5f 50 52 5f 43 50 55 $.. .A.\._PR_CPU 0030: 31 08 5f 54 50 43 0a 00 14 16 5f 50 54 43 00 a4 1._TPC...._PTC.. 0040: 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 54 43 14 \/._PR_CPU0_PTC. 0050: 16 5f 54 53 53 00 a4 5c 2f 03 5f 50 52 5f 43 50 ._TSS..\/._PR_CP 0060: 55 30 5f 54 53 53 14 3f 5f 54 53 44 00 a0 27 90 U0_TSS.?_TSD..'. 0070: 7b 43 46 47 44 0c 00 00 00 01 00 92 7b 50 44 43 {CFGD.......{PDC 0080: 31 0a 04 00 a4 12 0f 01 12 0c 05 0a 05 0a 00 0a 1............... 0090: 00 0a fd 0a 02 a4 12 0f 01 12 0c 05 0a 05 0a 00 ................ 00a0: 0a 01 0a fc 0a 01 ...... SSDT @ 0xbf6d8884 0000: 53 53 44 54 e6 04 00 00 01 df 50 6d 52 65 66 00 SSDT......PmRef. 0010: 43 70 75 50 6d 00 00 00 00 30 00 00 49 4e 54 4c CpuPm....0..INTL 0020: 24 06 05 20 10 45 08 5c 00 08 53 53 44 54 12 43 $.. .E.\..SSDT.C 0030: 05 0c 0d 43 50 55 30 49 53 54 20 00 0c 9e 95 6d ...CPU0IST ....m 0040: bf 0c b4 01 00 00 0d 43 50 55 31 49 53 54 20 00 .......CPU1IST . 0050: 0c 52 97 6d bf 0c c8 00 00 00 0d 43 50 55 30 43 .R.m.......CPU0C 0060: 53 54 20 00 0c 6f 90 6d bf 0c aa 04 00 00 0d 43 ST ..o.m.......C 0070: 50 55 31 43 53 54 20 00 0c 19 95 6d bf 0c 85 00 PU1CST ....m.... 0080: 00 00 08 43 46 47 44 0c f1 69 3f 11 08 5c 50 44 ...CFGD..i?..\PD 0090: 43 30 0c 00 00 00 80 08 5c 50 44 43 31 0c 00 00 C0......\PDC1... 00a0: 00 80 08 5c 53 44 54 4c 0a 00 10 4d 21 5c 2e 5f ...\SDTL...M!\._ 00b0: 50 52 5f 43 50 55 30 08 48 49 30 5f 0a 00 08 48 PR_CPU0.HI0_...H 00c0: 43 30 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a C0_...H._PDC..h. 00d0: 00 52 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 .REVS.h..SIZEp.h 00e0: 60 70 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a `pt`...a[.h.@wa. 00f0: 08 00 54 45 4d 50 08 53 54 53 30 11 07 0a 04 00 ..TEMP.STS0..... 0100: 00 00 00 73 53 54 53 30 54 45 4d 50 62 5f 4f 53 ...sSTS0TEMPb_OS 0110: 43 11 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 C......w@.).G... 0120: 70 58 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 pXq9SREVSSIZEb.I 0130: 19 5f 4f 53 43 04 8a 6b 0a 00 53 54 53 30 8a 6b ._OSC..k..STS0.k 0140: 0a 04 43 41 50 30 8a 68 0a 00 49 49 44 30 8a 68 ..CAP0.h..IID0.h 0150: 0a 04 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 ..IID1.h..IID2.h 0160: 0a 0c 49 49 44 33 08 55 49 44 30 11 13 0a 10 16 ..IID3.UID0..... 0170: a6 77 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a .w@.).G...pXq9S. 0180: 55 49 44 30 0a 00 45 49 44 30 8a 55 49 44 30 0a UID0..EID0.UID0. 0190: 04 45 49 44 31 8a 55 49 44 30 0a 08 45 49 44 32 .EID1.UID0..EID2 01a0: 8a 55 49 44 30 0a 0c 45 49 44 33 a0 32 92 90 90 .UID0..EID3.2... 01b0: 93 49 49 44 30 45 49 44 30 93 49 49 44 31 45 49 .IID0EID0.IID1EI 01c0: 44 31 90 93 49 49 44 32 45 49 44 32 93 49 49 44 D1..IID2EID2.IID 01d0: 33 45 49 44 33 70 0a 06 53 54 53 30 a4 6b a0 0f 3EID3p..STS0.k.. 01e0: 92 93 69 0a 01 70 0a 0a 53 54 53 30 a4 6b 7d 7b ..i..p..STS0.k}{ 01f0: 50 44 43 30 0c ff ff ff 7f 00 43 41 50 30 50 44 PDC0......CAP0PD 0200: 43 30 70 7b 50 44 43 30 0a ff 00 50 43 50 30 a0 C0p{PDC0...PCP0. 0210: 4c 05 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b L.{CFGD....A...{ 0220: 43 46 47 44 0c 00 00 00 01 00 93 7b 50 44 43 30 CFGD.......{PDC0 0230: 0a 09 00 0a 09 92 7b 53 44 54 4c 0a 01 00 7d 53 ......{SDTL...}S 0240: 44 54 4c 0a 01 53 44 54 4c 5b 80 49 53 54 30 00 DTL..SDTL[.IST0. 0250: 83 88 53 53 44 54 0a 01 00 83 88 53 53 44 54 0a ..SSDT.....SSDT. 0260: 02 00 5b 20 49 53 54 30 48 49 30 5f a0 49 05 7b ..[ IST0HI0_.I.{ 0270: 43 46 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 CFGD....N...{CFG 0280: 44 0c 00 00 00 01 00 7b 50 44 43 30 0a 18 00 92 D......{PDC0.... 0290: 7b 53 44 54 4c 0a 02 00 7d 53 44 54 4c 0a 02 53 {SDTL...}SDTL..S 02a0: 44 54 4c 5b 80 43 53 54 30 00 83 88 53 53 44 54 DTL[.CST0...SSDT 02b0: 0a 07 00 83 88 53 53 44 54 0a 08 00 5b 20 43 53 .....SSDT...[ CS 02c0: 54 30 48 43 30 5f a4 6b 10 4d 21 5c 2e 5f 50 52 T0HC0_.k.M!\._PR 02d0: 5f 43 50 55 31 08 48 49 31 5f 0a 00 08 48 43 31 _CPU1.HI1_...HC1 02e0: 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a 00 52 _...H._PDC..h..R 02f0: 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 60 70 EVS.h..SIZEp.h`p 0300: 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a 08 00 t`...a[.h.@wa... 0310: 54 45 4d 50 08 53 54 53 31 11 07 0a 04 00 00 00 TEMP.STS1....... 0320: 00 73 53 54 53 31 54 45 4d 50 62 5f 4f 53 43 11 .sSTS1TEMPb_OSC. 0330: 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 70 58 .....w@.).G...pX 0340: 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 19 5f q9SREVSSIZEb.I._ 0350: 4f 53 43 04 8a 6b 0a 00 53 54 53 31 8a 6b 0a 04 OSC..k..STS1.k.. 0360: 43 41 50 31 8a 68 0a 00 49 49 44 30 8a 68 0a 04 CAP1.h..IID0.h.. 0370: 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 0a 0c IID1.h..IID2.h.. 0380: 49 49 44 33 08 55 49 44 31 11 13 0a 10 16 a6 77 IID3.UID1......w 0390: 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a 55 49 @.).G...pXq9S.UI 03a0: 44 31 0a 00 45 49 44 30 8a 55 49 44 31 0a 04 45 D1..EID0.UID1..E 03b0: 49 44 31 8a 55 49 44 31 0a 08 45 49 44 32 8a 55 ID1.UID1..EID2.U 03c0: 49 44 31 0a 0c 45 49 44 33 a0 32 92 90 90 93 49 ID1..EID3.2....I 03d0: 49 44 30 45 49 44 30 93 49 49 44 31 45 49 44 31 ID0EID0.IID1EID1 03e0: 90 93 49 49 44 32 45 49 44 32 93 49 49 44 33 45 ..IID2EID2.IID3E 03f0: 49 44 33 70 0a 06 53 54 53 31 a4 6b a0 0f 92 93 ID3p..STS1.k.... 0400: 69 0a 01 70 0a 0a 53 54 53 31 a4 6b 7d 7b 50 44 i..p..STS1.k}{PD 0410: 43 31 0c ff ff ff 7f 00 43 41 50 31 50 44 43 31 C1......CAP1PDC1 0420: 70 7b 50 44 43 31 0a ff 00 50 43 50 31 a0 4c 05 p{PDC1...PCP1.L. 0430: 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b 43 46 {CFGD....A...{CF 0440: 47 44 0c 00 00 00 01 00 93 7b 50 44 43 31 0a 09 GD.......{PDC1.. 0450: 00 0a 09 92 7b 53 44 54 4c 0a 10 00 7d 53 44 54 ....{SDTL...}SDT 0460: 4c 0a 10 53 44 54 4c 5b 80 49 53 54 31 00 83 88 L..SDTL[.IST1... 0470: 53 53 44 54 0a 04 00 83 88 53 53 44 54 0a 05 00 SSDT.....SSDT... 0480: 5b 20 49 53 54 31 48 49 31 5f a0 49 05 7b 43 46 [ IST1HI1_.I.{CF 0490: 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 44 0c GD....N...{CFGD. 04a0: 00 00 00 01 00 7b 50 44 43 31 0a 18 00 92 7b 53 .....{PDC1....{S 04b0: 44 54 4c 0a 20 00 7d 53 44 54 4c 0a 20 53 44 54 DTL. .}SDTL. SDT 04c0: 4c 5b 80 43 53 54 31 00 83 88 53 53 44 54 0a 0a L[.CST1...SSDT.. 04d0: 00 83 88 53 53 44 54 0a 0b 00 5b 20 43 53 54 31 ...SSDT...[ CST1 04e0: 48 43 31 5f a4 6b HC1_.k XSDT @ 0xbf6d87f0 0000: 58 53 44 54 94 00 00 00 01 c2 4c 45 4e 4f 56 4f XSDT......LENOVO 0010: 54 50 2d 36 38 20 20 20 00 00 04 06 20 4c 54 50 TP-68 .... LTP 0020: 00 00 00 00 d2 fb 6d bf 00 00 00 00 c6 fc 6d bf ......m.......m. 0030: 00 00 00 00 2e fd 6d bf 00 00 00 00 66 fd 6d bf ......m.....f.m. 0040: 00 00 00 00 a2 fd 6d bf 00 00 00 00 d4 fd 6d bf ......m.......m. 0050: 00 00 00 00 fa fd 6d bf 00 00 00 00 70 ff 6d bf ......m.....p.m. 0060: 00 00 00 00 d8 ff 6d bf 00 00 00 00 bd 98 6d bf ......m.......m. 0070: 00 00 00 00 1a 98 6d bf 00 00 00 00 10 8e 6d bf ......m.......m. 0080: 00 00 00 00 6a 8d 6d bf 00 00 00 00 84 88 6d bf ....j.m.......m. 0090: 00 00 00 00 .... RSD PTR @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... fwts-test/apicinstance-0001/apicinstance-0001.log000066400000000000000000000016161465205512700215720ustar00rootroot00000000000000apicinstance apicinstance: Test for single instance of APIC/MADT table. apicinstance ---------------------------------------------------------- apicinstance Test 1 of 1: Test for single instance of APIC/MADT table. apicinstance Found APIC/MADT table APIC @ bf6dfcc6, length 0x68 apicinstance Found APIC/MADT table APIC @ bf6dff70, length 0x68 apicinstance (and differs from first APIC/MADT table). apicinstance FAILED [HIGH] MultipleAPICMADT: Test 1, Found 2 APIC/MADT apicinstance tables, the kernel expects just one. apicinstance If you find any APIC issues, perhaps try using apicinstance acpi_apic_instance=2. apicinstance apicinstance ========================================================== apicinstance 0 passed, 1 failed, 0 warning, 0 aborted, 0 skipped, 0 apicinstance info only. apicinstance ========================================================== fwts-test/apicinstance-0001/apicinstance-0002.log000066400000000000000000000011651465205512700215720ustar00rootroot00000000000000apicinstance apicinstance: Test for single instance of APIC/MADT table. apicinstance ---------------------------------------------------------- apicinstance Test 1 of 1: Test for single instance of APIC/MADT table. apicinstance Found APIC/MADT table APIC @ bf6dfcc6, length 0x68 apicinstance PASSED: Test 1, Found 1 APIC/MADT table(s), as expected. apicinstance apicinstance ========================================================== apicinstance 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 apicinstance info only. apicinstance ========================================================== fwts-test/apicinstance-0001/test-0001.sh000077500000000000000000000011351465205512700177400ustar00rootroot00000000000000#!/bin/bash # TEST="Test apicinstance against known incorrect ACPI tables" NAME=test-0001.sh TMPLOG=$TMP/apicinstance.log.$$ $FWTS --show-tests | grep apicinstance > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/apicinstance-0001/acpidump-0001.log apicinstance - | grep "^[0-9]*[ ]*apicinstance" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/apicinstance-0001/apicinstance-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/apicinstance-0001/test-0002.sh000077500000000000000000000011331465205512700177370ustar00rootroot00000000000000#!/bin/bash # TEST="Test apicinstance against known correct ACPI tables" NAME=test-0002.sh TMPLOG=$TMP/apicinstance.log.$$ $FWTS --show-tests | grep apicinstance > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/apicinstance-0001/acpidump-0002.log apicinstance - | grep "^[0-9]*[ ]*apicinstance" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/apicinstance-0001/apicinstance-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-help-0001/000077500000000000000000000000001465205512700151025ustar00rootroot00000000000000fwts-test/arg-help-0001/arg-help-0001.log000066400000000000000000000311741465205512700176700ustar00rootroot00000000000000--acpica Enable ACPICA run time options. --acpica-debug Enable ACPICA debug /warning messages. --acpicompliance Run ACPI tests for spec compliance. --acpitests Run general ACPI tests. -a, --all Run all tests. --arch Specify arch of the tables being tested (defaults to current host). -b, --batch Run non-Interactive tests. --batch-experimental Run Batch Experimental tests. --clog Specify a coreboot logfile dump --disassemble-aml Disassemble AML from DSDT and SSDT tables. -d, --dump Dump out dmesg, dmidecode, lspci, ACPI tables to logs. --dumpfile Load ACPI tables using file generated by acpidump, e.g. --dumpfile=acpidump.dat --ebbr Run EBBR tests. --filter-error-discard Discard errors that match any of the specified labels. --filter-error-keep Keep errors that match any of the specified labels. -f, --force-clean Force a clean results log file. -h, -?, --help Get help. --ifv Run tests in firmware-vendor modes. -i, --interactive Just run Interactive tests. --interactive-experimental Just run Interactive Experimental tests. -J, --json-data-file Specify the file to use for pattern matching on --olog, you may need to specify the json-data-path also if non-default location. -j, --json-data-path Specify path to fwts json data files - default is /usr/share /fwts. -k, --klog Specify kernel log file rather than reading it from the kernel, e.g. --klog=dmesg.log --log-fields Show available log filtering fields. --log-filter Define filters to dump out specific log fields: --log-filter=RES,SUM - dump out results and summary, --log-filter=ALL,~INF - dump out all fields except info fields. --log-format Define output log format: e.g. --log-format="%date %time [%field] (%owner): ". Fields are: %time - time, %field - filter field , %owner - name of test, %level - failure error level, %line - log line number. --log-level Specify error level to report failed test messages, --log-type Specify log type (plaintext, json, html or xml). -w, --log-width Define the output log width in characters. --lspci Specify path to lspci , e.g. --lspci=path. -o, --olog Specify Other logs to be analyzed, main usage is for custom log analysis, best to use custom json file for pattern matching, e.g. -o /var/log /my_opal_msglog --json-data-file=olog.json --json-data-path=/home/myuser , on PPC this will default to dumping the OPAL msglog for analysis. --pm-method Select the power method to use. Accepted values are "logind", "pm-utils", "sysfs" -P, --power-states Test S3, S4 power states. -q, --quiet Run quietly. --results-no-separators No horizontal separators in results log. -r, --results-output Output results to a named file. Filename can also be stout or stderr, e.g. --results-output=myresults.log , -r stdout. -R, --rsdp Specify the physical address of the ACPI RSDP. --s3-delay-delta Time to be added to delay between S3 iterations. Used in conjunction with --s3-min-delay and --s3-max-delay, e.g. --s3-delay-delta=2.5 --s3-device-check Check differences between device configurations over a S3 cycle. Note we add a default of 15 seconds to allow wifi to re-associate. Cannot be used with --s3-min-delay, --s3-max-delay and --s3-delay-delta. --s3-device-check-delay Sleep N seconds before we run a device check after waking up from suspend. Default is 15 seconds, e.g. --s3-device-check-delay=20 --s3-dump-wakeup-src dump the all device wakeup sources suspend/resume.(For debug) --s3-hybrid Run S3 with hybrid sleep, i.e. saving system states as S4 does. --s3-max-delay Maximum time between S3 iterations, e.g. --s3-max-delay=20 --s3-min-delay Minimum time between S3 iterations, e.g. --s3-min-delay=10 --s3-multiple Run S3 tests multiple times, e.g. --s3-multiple=10. --s3-quirks Comma separated list of quirk arguments to pass to pm-suspend. --s3-resume-hook hook Run a hook script after each S3 resume, 0 exit indicates success. --s3-resume-time Maximum expected resume time in seconds, e.g. --s3-resume-time=5.1 --s3-sleep-delay Sleep N seconds between start of suspend and wakeup, e.g. --s3-sleep-delay=60 --s3-sleep-type Set the sleep type for testing S3 or s2idle. --s3-suspend-time Maximum expected suspend time in seconds, e.g. --s3-suspend-time=3.5 --s3power-sleep-delay Sleep N seconds between start of suspend and wakeup, e.g. --s3power-sleep-delay=600 --s4-delay-delta Time to be added to delay between S4 iterations. Used in conjunction with --s4-min-delay and --s4-max-delay. --s4-device-check Check differences between device configurations over a S4 cycle. Note we add a default of 15 seconds to allow wifi to re-associate. Cannot be used with --s4-min-delay, --s4-max-delay and --s4-delay-delta. --s4-device-check-delay Sleep N seconds before we run a device check after waking up from hibernate. Default is 15 seconds. --s4-max-delay Maximum time between S4 iterations. --s4-min-delay Minimum time between S4 iterations. --s4-multiple Run S4 tests multiple times, e.g. --s4-multiple=10. --s4-quirks Comma separated list of quirk arguments to pass to pm-hibernate. --s4-sleep-delay Sleep N seconds between start of hibernate and wakeup. --sbbr Run ARM SBBR tests. -p, --show-progress Output test progress report to stderr. -D, --show-progress-dialog Output test progress for use in dialog tool. -s, --show-tests Show available tests. --show-tests-categories Show tests and associated categories. --show-tests-full Show available tests including all minor tests. -S, --skip-test Skip listed tests, e.g. --skip-test=s3 ,nx,method --stdout-summary Output SUCCESS or FAILED to stdout at end of tests. -t, --table-path Path to ACPI tables dumped by acpidump and then acpixtract, e.g. --table-path= /some/path/to/acpidumps --uefi-get-mn-count-multiple Run uefirtmisc getnexthighmonotoniccount test multiple times. --uefi-get-var-multiple Run uefirtvariable get variable test multiple times. --uefi-query-var-multiple Run uefirtvariable query variable test multiple times. --uefi-set-var-multiple Run uefirtvariable set variable test multiple times. --uefitests Run UEFI tests. -U, --unsafe Unsafe tests (tests that can potentially cause kernel oopses). -u, --utils Run Utility 'tests'. (Vxx.xx.xx). fwts-test/arg-help-0001/arg-help-0002.log000066400000000000000000000311741465205512700176710ustar00rootroot00000000000000--acpica Enable ACPICA run time options. --acpica-debug Enable ACPICA debug /warning messages. --acpicompliance Run ACPI tests for spec compliance. --acpitests Run general ACPI tests. -a, --all Run all tests. --arch Specify arch of the tables being tested (defaults to current host). -b, --batch Run non-Interactive tests. --batch-experimental Run Batch Experimental tests. --clog Specify a coreboot logfile dump --disassemble-aml Disassemble AML from DSDT and SSDT tables. -d, --dump Dump out dmesg, dmidecode, lspci, ACPI tables to logs. --dumpfile Load ACPI tables using file generated by acpidump, e.g. --dumpfile=acpidump.dat --ebbr Run EBBR tests. --filter-error-discard Discard errors that match any of the specified labels. --filter-error-keep Keep errors that match any of the specified labels. -f, --force-clean Force a clean results log file. -h, -?, --help Get help. --ifv Run tests in firmware-vendor modes. -i, --interactive Just run Interactive tests. --interactive-experimental Just run Interactive Experimental tests. -J, --json-data-file Specify the file to use for pattern matching on --olog, you may need to specify the json-data-path also if non-default location. -j, --json-data-path Specify path to fwts json data files - default is /usr/share /fwts. -k, --klog Specify kernel log file rather than reading it from the kernel, e.g. --klog=dmesg.log --log-fields Show available log filtering fields. --log-filter Define filters to dump out specific log fields: --log-filter=RES,SUM - dump out results and summary, --log-filter=ALL,~INF - dump out all fields except info fields. --log-format Define output log format: e.g. --log-format="%date %time [%field] (%owner): ". Fields are: %time - time, %field - filter field , %owner - name of test, %level - failure error level, %line - log line number. --log-level Specify error level to report failed test messages, --log-type Specify log type (plaintext, json, html or xml). -w, --log-width Define the output log width in characters. --lspci Specify path to lspci , e.g. --lspci=path. -o, --olog Specify Other logs to be analyzed, main usage is for custom log analysis, best to use custom json file for pattern matching, e.g. -o /var/log /my_opal_msglog --json-data-file=olog.json --json-data-path=/home/myuser , on PPC this will default to dumping the OPAL msglog for analysis. --pm-method Select the power method to use. Accepted values are "logind", "pm-utils", "sysfs" -P, --power-states Test S3, S4 power states. -q, --quiet Run quietly. --results-no-separators No horizontal separators in results log. -r, --results-output Output results to a named file. Filename can also be stout or stderr, e.g. --results-output=myresults.log , -r stdout. -R, --rsdp Specify the physical address of the ACPI RSDP. --s3-delay-delta Time to be added to delay between S3 iterations. Used in conjunction with --s3-min-delay and --s3-max-delay, e.g. --s3-delay-delta=2.5 --s3-device-check Check differences between device configurations over a S3 cycle. Note we add a default of 15 seconds to allow wifi to re-associate. Cannot be used with --s3-min-delay, --s3-max-delay and --s3-delay-delta. --s3-device-check-delay Sleep N seconds before we run a device check after waking up from suspend. Default is 15 seconds, e.g. --s3-device-check-delay=20 --s3-dump-wakeup-src dump the all device wakeup sources suspend/resume.(For debug) --s3-hybrid Run S3 with hybrid sleep, i.e. saving system states as S4 does. --s3-max-delay Maximum time between S3 iterations, e.g. --s3-max-delay=20 --s3-min-delay Minimum time between S3 iterations, e.g. --s3-min-delay=10 --s3-multiple Run S3 tests multiple times, e.g. --s3-multiple=10. --s3-quirks Comma separated list of quirk arguments to pass to pm-suspend. --s3-resume-hook hook Run a hook script after each S3 resume, 0 exit indicates success. --s3-resume-time Maximum expected resume time in seconds, e.g. --s3-resume-time=5.1 --s3-sleep-delay Sleep N seconds between start of suspend and wakeup, e.g. --s3-sleep-delay=60 --s3-sleep-type Set the sleep type for testing S3 or s2idle. --s3-suspend-time Maximum expected suspend time in seconds, e.g. --s3-suspend-time=3.5 --s3power-sleep-delay Sleep N seconds between start of suspend and wakeup, e.g. --s3power-sleep-delay=600 --s4-delay-delta Time to be added to delay between S4 iterations. Used in conjunction with --s4-min-delay and --s4-max-delay. --s4-device-check Check differences between device configurations over a S4 cycle. Note we add a default of 15 seconds to allow wifi to re-associate. Cannot be used with --s4-min-delay, --s4-max-delay and --s4-delay-delta. --s4-device-check-delay Sleep N seconds before we run a device check after waking up from hibernate. Default is 15 seconds. --s4-max-delay Maximum time between S4 iterations. --s4-min-delay Minimum time between S4 iterations. --s4-multiple Run S4 tests multiple times, e.g. --s4-multiple=10. --s4-quirks Comma separated list of quirk arguments to pass to pm-hibernate. --s4-sleep-delay Sleep N seconds between start of hibernate and wakeup. --sbbr Run ARM SBBR tests. -p, --show-progress Output test progress report to stderr. -D, --show-progress-dialog Output test progress for use in dialog tool. -s, --show-tests Show available tests. --show-tests-categories Show tests and associated categories. --show-tests-full Show available tests including all minor tests. -S, --skip-test Skip listed tests, e.g. --skip-test=s3 ,nx,method --stdout-summary Output SUCCESS or FAILED to stdout at end of tests. -t, --table-path Path to ACPI tables dumped by acpidump and then acpixtract, e.g. --table-path= /some/path/to/acpidumps --uefi-get-mn-count-multiple Run uefirtmisc getnexthighmonotoniccount test multiple times. --uefi-get-var-multiple Run uefirtvariable get variable test multiple times. --uefi-query-var-multiple Run uefirtvariable query variable test multiple times. --uefi-set-var-multiple Run uefirtvariable set variable test multiple times. --uefitests Run UEFI tests. -U, --unsafe Unsafe tests (tests that can potentially cause kernel oopses). -u, --utils Run Utility 'tests'. (Vxx.xx.xx). fwts-test/arg-help-0001/test-0001.sh000077500000000000000000000017671465205512700170110ustar00rootroot00000000000000#!/bin/bash # TEST="Test -h option" NAME=test-0001.sh TMPLOG=$TMP/help.log.$$ HERE=`pwd` # # Non-x86 tests don't have WMI so skip this test # $FWTS --show-tests | grep WMI > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi cols=$(stty -a | tr ';' '\n' | grep "columns" | cut -d' ' -f3) 2> /dev/null # # If we can't set the tty then we can't test # stty cols 50 2> /dev/null if [ $? -eq 1 ]; then tset 2> /dev/null echo SKIP: $TEST, $NAME exit 77 fi $FWTS -h | grep -v "Show version" | grep -v "Usage" | grep -v "Copyright" | sed s/\([Vv][0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\)/\(Vxx\.xx\.xx\)/ > $TMPLOG grep -v "Copyright" $FWTSTESTDIR/arg-help-0001/arg-help-0001.log | sed s/\([Vv][0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\)/\(Vxx\.xx\.xx\)/ > $TMP/help.log.$$.orig diff $TMPLOG $TMP/help.log.$$.orig >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi stty cols $cols 2> /dev/null tset 2> /dev/null rm $TMPLOG ${TMPLOG}.orig exit $ret fwts-test/arg-help-0001/test-0002.sh000077500000000000000000000020351465205512700167770ustar00rootroot00000000000000#!/bin/bash # TEST="Test --help option" NAME=test-0002.sh TMPLOG=$TMP/help.log.$$ HERE=`pwd` # # Non-x86 tests don't have WMI so skip this test # $FWTS --show-tests | grep WMI > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi cols=$(stty -a | tr ';' '\n' | grep "columns" | cut -d' ' -f3) 2> /dev/null # # If we can't set the tty then we can't test # stty cols 50 2> /dev/null if [ $? -eq 1 ]; then tset 2> /dev/null echo SKIP: $TEST, $NAME exit 77 fi $FWTS --help | grep -v "Show version" | grep -v "Usage" | grep -v "Copyright" | sed s/\([Vv][0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\)/\(Vxx\.xx\.xx\)/ > $TMPLOG grep -v "Copyright" $FWTSTESTDIR/arg-help-0001/arg-help-0002.log | sed s/\([Vv][0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\)/\(Vxx\.xx\.xx\)/ > $TMP/help.log.$$.orig diff $TMPLOG $TMP/help.log.$$.orig >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi if [ $cols -ne 0 ]; then stty cols $cols 2> /dev/null fi tset 2> /dev/null rm $TMPLOG ${TMPLOG}.orig exit $ret fwts-test/arg-json-0001/000077500000000000000000000000001465205512700151235ustar00rootroot00000000000000fwts-test/arg-json-0001/klog-0001.log000066400000000000000000000057051465205512700171470ustar00rootroot00000000000000klog klog: Scan kernel log for errors and warnings. klog ---------------------------------------------------------- klog Test 1 of 1: Kernel log error check. klog FAILED [MEDIUM] KlogAcpiMultipleMadt: Test 1, MEDIUM klog Kernel message: [ 0.000000] ACPI: BIOS bug: multiple APIC klog /MADT found, using 0 klog klog ADVICE: The BIOS is supposed to supply just one APIC/MADT, klog however, more than one has been found. One can use klog acpi_apic_instance=N to specify the Nth ACPI/MADT to use klog as an override if required. klog klog Kernel message: [ 0.228089] [Firmware Bug]: ACPI: BIOS klog _OSI(Linux) query ignored klog klog ADVICE: This is not exactly a failure mode but a warning klog from the kernel. The _OSI() method has implemented a match klog to the 'Linux' query in the DSDT and this is redundant klog because the ACPI driver matches onto the Windows _OSI klog strings by default. klog klog FAILED [CRITICAL] KlogPciAcpiOscRequestFailed: Test 1, klog CRITICAL Kernel message: [ 0.396181] pci0000:00: ACPI _OSC klog request failed (AE_NOT_FOUND), returned control mask: 0x1d klog klog ADVICE: The _OSC method evaluation failed, which will klog result in disabling PCIe functionality, for example, the klog Linux kernel has to disable Active State Power Management klog (ASPM) which means that PCIe power management is not klog optimally configured. klog klog FAILED [LOW] KlogAcpiDeprecatedProcfsInterface: Test 1, klog LOW Kernel message: [ 0.534105] ACPI: Deprecated procfs I klog /F for AC is loaded, please retry with klog CONFIG_ACPI_PROCFS_POWER cleared klog klog ADVICE: Using an old procfs interface for ACPI AC Adapter, klog this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This klog should be disabled for kernels > 2.6.37. klog klog FAILED [LOW] KlogAcpiDeprecatedProcfsInterface: Test 1, klog LOW Kernel message: [ 0.576306] ACPI: Deprecated procfs I klog /F for battery is loaded, please retry with klog CONFIG_ACPI_PROCFS_POWER cleared klog klog ADVICE: Using an old procfs interface for ACPI battery, klog this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This klog should be disabled for kernels > 2.6.37. klog klog Found 4 unique errors in kernel log. klog klog ========================================================== klog 0 passed, 4 failed, 0 warning, 0 aborted, 0 skipped, 0 klog info only. klog ========================================================== fwts-test/arg-json-0001/klog-0002.log000066400000000000000000000057051465205512700171500ustar00rootroot00000000000000klog klog: Scan kernel log for errors and warnings. klog ---------------------------------------------------------- klog Test 1 of 1: Kernel log error check. klog FAILED [MEDIUM] KlogAcpiMultipleMadt: Test 1, MEDIUM klog Kernel message: [ 0.000000] ACPI: BIOS bug: multiple APIC klog /MADT found, using 0 klog klog ADVICE: The BIOS is supposed to supply just one APIC/MADT, klog however, more than one has been found. One can use klog acpi_apic_instance=N to specify the Nth ACPI/MADT to use klog as an override if required. klog klog Kernel message: [ 0.228089] [Firmware Bug]: ACPI: BIOS klog _OSI(Linux) query ignored klog klog ADVICE: This is not exactly a failure mode but a warning klog from the kernel. The _OSI() method has implemented a match klog to the 'Linux' query in the DSDT and this is redundant klog because the ACPI driver matches onto the Windows _OSI klog strings by default. klog klog FAILED [CRITICAL] KlogPciAcpiOscRequestFailed: Test 1, klog CRITICAL Kernel message: [ 0.396181] pci0000:00: ACPI _OSC klog request failed (AE_NOT_FOUND), returned control mask: 0x1d klog klog ADVICE: The _OSC method evaluation failed, which will klog result in disabling PCIe functionality, for example, the klog Linux kernel has to disable Active State Power Management klog (ASPM) which means that PCIe power management is not klog optimally configured. klog klog FAILED [LOW] KlogAcpiDeprecatedProcfsInterface: Test 1, klog LOW Kernel message: [ 0.534105] ACPI: Deprecated procfs I klog /F for AC is loaded, please retry with klog CONFIG_ACPI_PROCFS_POWER cleared klog klog ADVICE: Using an old procfs interface for ACPI AC Adapter, klog this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This klog should be disabled for kernels > 2.6.37. klog klog FAILED [LOW] KlogAcpiDeprecatedProcfsInterface: Test 1, klog LOW Kernel message: [ 0.576306] ACPI: Deprecated procfs I klog /F for battery is loaded, please retry with klog CONFIG_ACPI_PROCFS_POWER cleared klog klog ADVICE: Using an old procfs interface for ACPI battery, klog this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This klog should be disabled for kernels > 2.6.37. klog klog Found 4 unique errors in kernel log. klog klog ========================================================== klog 0 passed, 4 failed, 0 warning, 0 aborted, 0 skipped, 0 klog info only. klog ========================================================== fwts-test/arg-json-0001/klog-0003.log000066400000000000000000000012321465205512700171400ustar00rootroot00000000000000klog klog: Scan kernel log for errors and warnings. klog ---------------------------------------------------------- klog Test 1 of 1: Kernel log error check. klog Cannot read file /xxxx/fooo/klog.json, check the path and klog check that the file exists, you may need to specify -j or klog -J. klog Error parsing kernel log. klog klog ========================================================== klog 0 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 klog info only. klog ========================================================== fwts-test/arg-json-0001/klog-0004.log000066400000000000000000000012321465205512700171410ustar00rootroot00000000000000klog klog: Scan kernel log for errors and warnings. klog ---------------------------------------------------------- klog Test 1 of 1: Kernel log error check. klog Cannot read file /xxxx/fooo/klog.json, check the path and klog check that the file exists, you may need to specify -j or klog -J. klog Error parsing kernel log. klog klog ========================================================== klog 0 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 klog info only. klog ========================================================== fwts-test/arg-json-0001/klog.txt000066400000000000000000002225711465205512700166310ustar00rootroot00000000000000[ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 3.0.0-12-generic (buildd@crested) (gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3) ) #19-Ubuntu SMP Fri Sep 23 21:23:39 UTC 2011 (Ubuntu 3.0.0-12.19-generic 3.0.4) [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.0.0-12-generic root=UUID=08ed6ce0-0907-4d06-b1e1-b9c3ec647fe2 ro crashkernel=384M-2G:64M,2G-:128M quiet splash vt.handoff=7 [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] Centaur CentaurHauls [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009f800 (usable) [ 0.000000] BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000d2000 - 00000000000d4000 (reserved) [ 0.000000] BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000bf6d0000 (usable) [ 0.000000] BIOS-e820: 00000000bf6d0000 - 00000000bf6e3000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000bf6e3000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved) [ 0.000000] BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved) [ 0.000000] BIOS-e820: 00000000fed14000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1c000 - 00000000fed90000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ff000000 - 0000000100000000 (reserved) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI present. [ 0.000000] DMI: LENOVO 0769BMG/IEL10, BIOS 68ET27WW 11/14/2007 [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0xbf6d0 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask F80000000 write-back [ 0.000000] 1 base 080000000 mask FC0000000 write-back [ 0.000000] 2 base 0BF700000 mask FFFF00000 uncachable [ 0.000000] 3 base 0BF800000 mask FFF800000 uncachable [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] original variable MTRRs [ 0.000000] reg 0, base: 0GB, range: 2GB, type WB [ 0.000000] reg 1, base: 2GB, range: 1GB, type WB [ 0.000000] reg 2, base: 3063MB, range: 1MB, type UC [ 0.000000] reg 3, base: 3064MB, range: 8MB, type UC [ 0.000000] total RAM covered: 3063M [ 0.000000] Found optimal setting for mtrr clean up [ 0.000000] gran_size: 64K chunk_size: 16M num_reg: 4 lose cover RAM: 0G [ 0.000000] New variable MTRRs [ 0.000000] reg 0, base: 0GB, range: 2GB, type WB [ 0.000000] reg 1, base: 2GB, range: 1GB, type WB [ 0.000000] reg 2, base: 3063MB, range: 1MB, type UC [ 0.000000] reg 3, base: 3064MB, range: 8MB, type UC [ 0.000000] found SMP MP-table at [ffff8800000f72c0] f72c0 [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] Base memory trampoline at [ffff88000009a000] 9a000 size 20480 [ 0.000000] init_memory_mapping: 0000000000000000-00000000bf6d0000 [ 0.000000] 0000000000 - 00bf600000 page 2M [ 0.000000] 00bf600000 - 00bf6d0000 page 4k [ 0.000000] kernel direct mapping tables up to bf6d0000 @ bf6cb000-bf6d0000 [ 0.000000] RAMDISK: 359ec000 - 36cee000 [ 0.000000] Reserving 128MB of memory at 720MB for crashkernel (System RAM: 3062MB) [ 0.000000] ACPI: RSDP 00000000000f7240 00024 (v02 LENOVO) [ 0.000000] ACPI: XSDT 00000000bf6d87f0 00094 (v01 LENOVO TP-68 06040000 LTP 00000000) [ 0.000000] ACPI: FACP 00000000bf6dfbd2 000F4 (v03 TOSCPL CRESTLNE 06040000 ALAN 00000001) [ 0.000000] ACPI: DSDT 00000000bf6d9b6a 05FF4 (v02 TOSCPL CRESTLNE 06040000 INTL 20060608) [ 0.000000] ACPI: FACS 00000000bf6e2fc0 00040 [ 0.000000] ACPI: APIC 00000000bf6dfcc6 00068 (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: HPET 00000000bf6dfd2e 00038 (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: MCFG 00000000bf6dfd66 0003C (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: TCPA 00000000bf6dfda2 00032 (v01 Intel CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: TMOR 00000000bf6dfdd4 00026 (v01 PTLTD 06040000 PTL 00000003) [ 0.000000] ACPI: SLIC 00000000bf6dfdfa 00176 (v01 LENOVO TP-68 06040000 TBD 00000001) [ 0.000000] ACPI: APIC 00000000bf6dff70 00068 (v01 PTLTD ? APIC 06040000 LTP 00000000) [ 0.000000] ACPI: BOOT 00000000bf6dffd8 00028 (v01 PTLTD $SBFTBL$ 06040000 LTP 00000001) [ 0.000000] ACPI: SSDT 00000000bf6d98bd 002AD (v01 SataRe SataAhci 00001000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d981a 000A3 (v01 BrtRef DD01BRT 00001000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8e10 0025F (v01 PmRef Cpu0Tst 00003000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8d6a 000A6 (v01 PmRef Cpu1Tst 00003000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8884 004E6 (v01 PmRef CpuPm 00003000 INTL 20050624) [ 0.000000] ACPI: BIOS bug: multiple APIC/MADT found, using 0 [ 0.000000] ACPI: If "acpi_apic_instance=2" works better, notify linux-acpi@vger.kernel.org [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-00000000bf6d0000 [ 0.000000] Initmem setup node 0 0000000000000000-00000000bf6d0000 [ 0.000000] NODE_DATA [00000000bf6c6000 - 00000000bf6cafff] [ 0.000000] [ffffea0000000000-ffffea00029fffff] PMD -> [ffff8800bbe00000-ffff8800be7fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal empty [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x000bf6d0 [ 0.000000] On node 0 totalpages: 783967 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 5 pages reserved [ 0.000000] DMA zone: 3922 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 10664 pages used for memmap [ 0.000000] DMA32 zone: 769320 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x1008 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000d2000 [ 0.000000] PM: Registered nosave memory: 00000000000d2000 - 00000000000d4000 [ 0.000000] PM: Registered nosave memory: 00000000000d4000 - 00000000000dc000 [ 0.000000] PM: Registered nosave memory: 00000000000dc000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:20000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:256 nr_cpumask_bits:256 nr_cpu_ids:2 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 27 pages/cpu @ffff8800bf400000 s79616 r8192 d22784 u1048576 [ 0.000000] pcpu-alloc: s79616 r8192 d22784 u1048576 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 773242 [ 0.000000] Policy zone: DMA32 [ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-3.0.0-12-generic root=UUID=08ed6ce0-0907-4d06-b1e1-b9c3ec647fe2 ro crashkernel=384M-2G:64M,2G-:128M quiet splash vt.handoff=7 [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Memory: 2928536k/3136320k available (6104k kernel code, 452k absent, 207332k reserved, 4880k data, 984k init) [ 0.000000] SLUB: Genslabs=15, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] NR_IRQS:16640 nr_irqs:512 16 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] vt handoff: transparent VT on vt#7 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 25165824 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1496.217 MHz processor. [ 0.004006] Calibrating delay loop (skipped), value calculated using timer frequency.. 2992.43 BogoMIPS (lpj=5984868) [ 0.004013] pid_max: default: 32768 minimum: 301 [ 0.004056] Security Framework initialized [ 0.004080] AppArmor: AppArmor initialized [ 0.004083] Yama: becoming mindful. [ 0.004759] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.010636] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.012341] Mount-cache hash table entries: 256 [ 0.012557] Initializing cgroup subsys cpuacct [ 0.012565] Initializing cgroup subsys memory [ 0.012580] Initializing cgroup subsys devices [ 0.012583] Initializing cgroup subsys freezer [ 0.012586] Initializing cgroup subsys net_cls [ 0.012589] Initializing cgroup subsys blkio [ 0.012598] Initializing cgroup subsys perf_event [ 0.012643] CPU: Physical Processor ID: 0 [ 0.012645] CPU: Processor Core ID: 0 [ 0.012649] mce: CPU supports 6 MCE banks [ 0.012661] CPU0: Thermal monitoring handled by SMI [ 0.012667] using mwait in idle threads. [ 0.016288] ACPI: Core revision 20110413 [ 0.024040] ftrace: allocating 25651 entries in 101 pages [ 0.028444] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.071627] CPU0: Intel(R) Core(TM)2 Duo CPU T5250 @ 1.50GHz stepping 0d [ 0.072003] Performance Events: PEBS fmt0+, Core2 events, Intel PMU driver. [ 0.072003] PEBS disabled due to CPU errata. [ 0.072003] ... version: 2 [ 0.072003] ... bit width: 40 [ 0.072003] ... generic registers: 2 [ 0.072003] ... value mask: 000000ffffffffff [ 0.072003] ... max period: 000000007fffffff [ 0.072003] ... fixed-purpose events: 3 [ 0.072003] ... event mask: 0000000700000003 [ 0.072003] Booting Node 0, Processors #1 Ok. [ 0.072003] smpboot cpu 1: start_ip = 9a000 [ 0.008000] CPU1: Thermal monitoring handled by SMI [ 0.160029] Brought up 2 CPUs [ 0.160033] Total of 2 processors activated (5984.88 BogoMIPS). [ 0.161224] devtmpfs: initialized [ 0.161224] PM: Registering ACPI NVS region at bf6d0000 (77824 bytes) [ 0.162075] print_constraints: dummy: [ 0.162115] Time: 7:34:42 Date: 10/05/11 [ 0.162171] NET: Registered protocol family 16 [ 0.162209] Trying to unpack rootfs image as initramfs... [ 0.164047] ACPI: bus type pci registered [ 0.164133] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.164138] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.220043] PCI: Using configuration type 1 for base access [ 0.221379] bio: create slab at 0 [ 0.223506] ACPI: EC: Look up EC in DSDT [ 0.228089] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query ignored [ 0.229039] ACPI: SSDT 00000000bf6d959e 001B4 (v01 PmRef Cpu0Ist 00003000 INTL 20050624) [ 0.229543] ACPI: Dynamic OEM Table Load: [ 0.229548] ACPI: SSDT (null) 001B4 (v01 PmRef Cpu0Ist 00003000 INTL 20050624) [ 0.229696] ACPI: SSDT 00000000bf6d906f 004AA (v01 PmRef Cpu0Cst 00003001 INTL 20050624) [ 0.230165] ACPI: Dynamic OEM Table Load: [ 0.230169] ACPI: SSDT (null) 004AA (v01 PmRef Cpu0Cst 00003001 INTL 20050624) [ 0.230454] ACPI: SSDT 00000000bf6d9752 000C8 (v01 PmRef Cpu1Ist 00003000 INTL 20050624) [ 0.232427] ACPI: Dynamic OEM Table Load: [ 0.232432] ACPI: SSDT (null) 000C8 (v01 PmRef Cpu1Ist 00003000 INTL 20050624) [ 0.232541] ACPI: SSDT 00000000bf6d9519 00085 (v01 PmRef Cpu1Cst 00003000 INTL 20050624) [ 0.233011] ACPI: Dynamic OEM Table Load: [ 0.233015] ACPI: SSDT (null) 00085 (v01 PmRef Cpu1Cst 00003000 INTL 20050624) [ 0.238295] ACPI: EC: GPE storm detected, transactions will use polling mode [ 0.344070] ACPI: Interpreter enabled [ 0.344078] ACPI: (supports S0 S3 S4 S5) [ 0.344118] ACPI: Using IOAPIC for interrupt routing [ 0.389051] ACPI: EC: GPE = 0x1c, I/O: command/status = 0x66, data = 0x62 [ 0.389294] ACPI: No dock devices found. [ 0.389298] HEST: Table not found. [ 0.389303] PCI: Ignoring host bridge windows from ACPI; if necessary, use "pci=use_crs" and report a bug [ 0.389762] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.390623] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] (ignored) [ 0.390628] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] (ignored) [ 0.390632] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] (ignored) [ 0.390636] pci_root PNP0A08:00: host bridge window [mem 0x000d4000-0x000d7fff] (ignored) [ 0.390640] pci_root PNP0A08:00: host bridge window [mem 0x000d8000-0x000dbfff] (ignored) [ 0.390645] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xdfffffff] (ignored) [ 0.390648] pci_root PNP0A08:00: host bridge window [mem 0xf0000000-0xfebfffff] (ignored) [ 0.390665] pci 0000:00:00.0: [8086:2a00] type 0 class 0x000600 [ 0.390726] pci 0000:00:02.0: [8086:2a02] type 0 class 0x000300 [ 0.390746] pci 0000:00:02.0: reg 10: [mem 0xfc000000-0xfc0fffff 64bit] [ 0.390758] pci 0000:00:02.0: reg 18: [mem 0xd0000000-0xdfffffff 64bit pref] [ 0.390767] pci 0000:00:02.0: reg 20: [io 0x1800-0x1807] [ 0.390812] pci 0000:00:02.1: [8086:2a03] type 0 class 0x000380 [ 0.390829] pci 0000:00:02.1: reg 10: [mem 0xfc100000-0xfc1fffff 64bit] [ 0.390937] pci 0000:00:1a.0: [8086:2834] type 0 class 0x000c03 [ 0.391013] pci 0000:00:1a.0: reg 20: [io 0x1820-0x183f] [ 0.391065] pci 0000:00:1a.1: [8086:2835] type 0 class 0x000c03 [ 0.391126] pci 0000:00:1a.1: reg 20: [io 0x1840-0x185f] [ 0.391187] pci 0000:00:1a.7: [8086:283a] type 0 class 0x000c03 [ 0.391216] pci 0000:00:1a.7: reg 10: [mem 0xfc504800-0xfc504bff] [ 0.391321] pci 0000:00:1a.7: PME# supported from D0 D3hot D3cold [ 0.391328] pci 0000:00:1a.7: PME# disabled [ 0.391362] pci 0000:00:1b.0: [8086:284b] type 0 class 0x000403 [ 0.391386] pci 0000:00:1b.0: reg 10: [mem 0xfc300000-0xfc303fff 64bit] [ 0.391473] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.391479] pci 0000:00:1b.0: PME# disabled [ 0.391514] pci 0000:00:1c.0: [8086:283f] type 1 class 0x000604 [ 0.391605] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.391611] pci 0000:00:1c.0: PME# disabled [ 0.391647] pci 0000:00:1c.1: [8086:2841] type 1 class 0x000604 [ 0.391735] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 0.391741] pci 0000:00:1c.1: PME# disabled [ 0.391775] pci 0000:00:1c.2: [8086:2843] type 1 class 0x000604 [ 0.391868] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 0.391874] pci 0000:00:1c.2: PME# disabled [ 0.391911] pci 0000:00:1c.3: [8086:2845] type 1 class 0x000604 [ 0.391999] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold [ 0.392005] pci 0000:00:1c.3: PME# disabled [ 0.392053] pci 0000:00:1d.0: [8086:2830] type 0 class 0x000c03 [ 0.392114] pci 0000:00:1d.0: reg 20: [io 0x1860-0x187f] [ 0.392162] pci 0000:00:1d.1: [8086:2831] type 0 class 0x000c03 [ 0.392238] pci 0000:00:1d.1: reg 20: [io 0x1880-0x189f] [ 0.392293] pci 0000:00:1d.2: [8086:2832] type 0 class 0x000c03 [ 0.392371] pci 0000:00:1d.2: reg 20: [io 0x18a0-0x18bf] [ 0.392438] pci 0000:00:1d.7: [8086:2836] type 0 class 0x000c03 [ 0.392466] pci 0000:00:1d.7: reg 10: [mem 0xfc504c00-0xfc504fff] [ 0.392567] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.392573] pci 0000:00:1d.7: PME# disabled [ 0.392603] pci 0000:00:1e.0: [8086:2448] type 1 class 0x000604 [ 0.392698] pci 0000:00:1f.0: [8086:2815] type 0 class 0x000601 [ 0.392816] pci 0000:00:1f.0: quirk: [io 0x1000-0x107f] claimed by ICH6 ACPI/GPIO/TCO [ 0.392824] pci 0000:00:1f.0: quirk: [io 0x1180-0x11bf] claimed by ICH6 GPIO [ 0.392829] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 1 PIO at 0680 (mask 007f) [ 0.392835] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 2 PIO at 1640 (mask 000f) [ 0.392884] pci 0000:00:1f.1: [8086:2850] type 0 class 0x000101 [ 0.392903] pci 0000:00:1f.1: reg 10: [io 0x0000-0x0007] [ 0.392918] pci 0000:00:1f.1: reg 14: [io 0x0000-0x0003] [ 0.392931] pci 0000:00:1f.1: reg 18: [io 0x0000-0x0007] [ 0.392944] pci 0000:00:1f.1: reg 1c: [io 0x0000-0x0003] [ 0.392958] pci 0000:00:1f.1: reg 20: [io 0x1810-0x181f] [ 0.393014] pci 0000:00:1f.2: [8086:2829] type 0 class 0x000106 [ 0.393042] pci 0000:00:1f.2: reg 10: [io 0x1c00-0x1c07] [ 0.393056] pci 0000:00:1f.2: reg 14: [io 0x18d4-0x18d7] [ 0.393069] pci 0000:00:1f.2: reg 18: [io 0x18d8-0x18df] [ 0.393082] pci 0000:00:1f.2: reg 1c: [io 0x18d0-0x18d3] [ 0.393095] pci 0000:00:1f.2: reg 20: [io 0x18e0-0x18ff] [ 0.393108] pci 0000:00:1f.2: reg 24: [mem 0xfc504000-0xfc5047ff] [ 0.393157] pci 0000:00:1f.2: PME# supported from D3hot [ 0.393163] pci 0000:00:1f.2: PME# disabled [ 0.393188] pci 0000:00:1f.3: [8086:283e] type 0 class 0x000c05 [ 0.393206] pci 0000:00:1f.3: reg 10: [mem 0x00000000-0x000000ff] [ 0.393250] pci 0000:00:1f.3: reg 20: [io 0x1c20-0x1c3f] [ 0.393354] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.393360] pci 0000:00:1c.0: bridge window [io 0x2000-0x2fff] [ 0.393367] pci 0000:00:1c.0: bridge window [mem 0xf6000000-0xf7ffffff] [ 0.393376] pci 0000:00:1c.0: bridge window [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.393501] pci 0000:04:00.0: [8086:4227] type 0 class 0x000280 [ 0.393557] pci 0000:04:00.0: reg 10: [mem 0xf8000000-0xf8000fff] [ 0.393895] pci 0000:04:00.0: PME# supported from D0 D3hot D3cold [ 0.393908] pci 0000:04:00.0: PME# disabled [ 0.393979] pci 0000:04:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 0.394021] pci 0000:00:1c.1: PCI bridge to [bus 04-04] [ 0.394027] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.394033] pci 0000:00:1c.1: bridge window [mem 0xf8000000-0xf9ffffff] [ 0.394043] pci 0000:00:1c.1: bridge window [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.394110] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 0.394116] pci 0000:00:1c.2: bridge window [io 0x4000-0x4fff] [ 0.394122] pci 0000:00:1c.2: bridge window [mem 0xfa000000-0xfbffffff] [ 0.394132] pci 0000:00:1c.2: bridge window [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.394268] pci 0000:06:00.0: [14e4:1713] type 0 class 0x000200 [ 0.394336] pci 0000:06:00.0: reg 10: [mem 0xc8000000-0xc800ffff 64bit] [ 0.394639] pci 0000:06:00.0: PME# supported from D3hot D3cold [ 0.394651] pci 0000:06:00.0: PME# disabled [ 0.394783] pci 0000:00:1c.3: PCI bridge to [bus 06-06] [ 0.394789] pci 0000:00:1c.3: bridge window [io 0x5000-0x5fff] [ 0.394796] pci 0000:00:1c.3: bridge window [mem 0xc8000000-0xc9ffffff] [ 0.394806] pci 0000:00:1c.3: bridge window [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.394868] pci 0000:08:06.0: [1180:0832] type 0 class 0x000c00 [ 0.394886] pci 0000:08:06.0: proprietary Ricoh MMC controller disabled (via firewire function) [ 0.394890] pci 0000:08:06.0: MMC cards are now supported by standard SDHCI controller [ 0.394909] pci 0000:08:06.0: reg 10: [mem 0xfc200000-0xfc2007ff] [ 0.395006] pci 0000:08:06.0: supports D1 D2 [ 0.395009] pci 0000:08:06.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395016] pci 0000:08:06.0: PME# disabled [ 0.395045] pci 0000:08:06.1: [1180:0822] type 0 class 0x000805 [ 0.395069] pci 0000:08:06.1: reg 10: [mem 0xfc200800-0xfc2008ff] [ 0.395165] pci 0000:08:06.1: supports D1 D2 [ 0.395168] pci 0000:08:06.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395174] pci 0000:08:06.1: PME# disabled [ 0.395199] pci 0000:08:06.2: [1180:0592] type 0 class 0x000880 [ 0.395224] pci 0000:08:06.2: reg 10: [mem 0xfc201000-0xfc2010ff] [ 0.395317] pci 0000:08:06.2: supports D1 D2 [ 0.395320] pci 0000:08:06.2: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395326] pci 0000:08:06.2: PME# disabled [ 0.395350] pci 0000:08:06.3: [1180:0852] type 0 class 0x000880 [ 0.395376] pci 0000:08:06.3: reg 10: [mem 0xfc201400-0xfc2014ff] [ 0.395474] pci 0000:08:06.3: supports D1 D2 [ 0.395477] pci 0000:08:06.3: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395484] pci 0000:08:06.3: PME# disabled [ 0.395549] pci 0000:00:1e.0: PCI bridge to [bus 08-08] (subtractive decode) [ 0.395556] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.395562] pci 0000:00:1e.0: bridge window [mem 0xfc200000-0xfc2fffff] [ 0.395572] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.395576] pci 0000:00:1e.0: bridge window [io 0x0000-0xffff] (subtractive decode) [ 0.395580] pci 0000:00:1e.0: bridge window [mem 0x00000000-0xfffffffff] (subtractive decode) [ 0.395619] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.395828] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP01._PRT] [ 0.395887] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP02._PRT] [ 0.395944] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP03._PRT] [ 0.395999] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP04._PRT] [ 0.396116] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCIB._PRT] [ 0.396176] pci0000:00: Requesting ACPI _OSC control (0x1d) [ 0.396181] pci0000:00: ACPI _OSC request failed (AE_NOT_FOUND), returned control mask: 0x1d [ 0.396184] ACPI _OSC control for PCIe not granted, disabling ASPM [ 0.404002] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 *5 6 7 10 12 14 15) [ 0.404086] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404153] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 *7 10 12 14 15) [ 0.404217] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404282] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled. [ 0.404353] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404419] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 7 10 12 14 15) *11 [ 0.404484] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 5 6 7 *11 12 14 15) [ 0.404647] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 0.404670] vgaarb: loaded [ 0.404672] vgaarb: bridge control possible 0000:00:02.0 [ 0.404971] SCSI subsystem initialized [ 0.405069] libata version 3.00 loaded. [ 0.405143] usbcore: registered new interface driver usbfs [ 0.405158] usbcore: registered new interface driver hub [ 0.405200] usbcore: registered new device driver usb [ 0.405322] PCI: Using ACPI for IRQ routing [ 0.416330] PCI: pci_cache_line_size set to 64 bytes [ 0.416509] reserve RAM buffer: 000000000009f800 - 000000000009ffff [ 0.416513] reserve RAM buffer: 00000000bf6d0000 - 00000000bfffffff [ 0.416683] NetLabel: Initializing [ 0.416686] NetLabel: domain hash size = 128 [ 0.416688] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.416706] NetLabel: unlabeled traffic allowed by default [ 0.416770] HPET: 3 timers in total, 0 timers will be used for per-cpu timer [ 0.416777] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 [ 0.416784] hpet0: 3 comparators, 64-bit 14.318180 MHz counter [ 0.420524] Switching to clocksource hpet [ 0.423392] Switched to NOHz mode on CPU #0 [ 0.423487] Switched to NOHz mode on CPU #1 [ 0.430603] AppArmor: AppArmor Filesystem Enabled [ 0.430649] pnp: PnP ACPI init [ 0.430672] ACPI: bus type pnp registered [ 0.431166] pnp 00:00: [bus 00-ff] [ 0.431171] pnp 00:00: [io 0x0000-0x0cf7 window] [ 0.431174] pnp 00:00: [io 0x0cf8-0x0cff] [ 0.431177] pnp 00:00: [io 0x0d00-0xffff window] [ 0.431181] pnp 00:00: [mem 0x000a0000-0x000bffff window] [ 0.431184] pnp 00:00: [mem 0x000c0000-0x000c3fff window] [ 0.431187] pnp 00:00: [mem 0x000c4000-0x000c7fff window] [ 0.431190] pnp 00:00: [mem 0x000c8000-0x000cbfff window] [ 0.431197] pnp 00:00: [mem 0x000cc000-0x000cffff window] [ 0.431201] pnp 00:00: [mem 0x000d0000-0x000d3fff window] [ 0.431204] pnp 00:00: [mem 0x000d4000-0x000d7fff window] [ 0.431207] pnp 00:00: [mem 0x000d8000-0x000dbfff window] [ 0.431210] pnp 00:00: [mem 0x000dc000-0x000dffff window] [ 0.431213] pnp 00:00: [mem 0x000e0000-0x000e3fff window] [ 0.431216] pnp 00:00: [mem 0x000e4000-0x000e7fff window] [ 0.431219] pnp 00:00: [mem 0x000e8000-0x000ebfff window] [ 0.431222] pnp 00:00: [mem 0x000ec000-0x000effff window] [ 0.431225] pnp 00:00: [mem 0x000f0000-0x000fffff window] [ 0.431229] pnp 00:00: [mem 0xc0000000-0xdfffffff window] [ 0.431232] pnp 00:00: [mem 0xf0000000-0xfebfffff window] [ 0.431235] pnp 00:00: [mem 0xfed40000-0xfed44fff window] [ 0.431344] pnp 00:00: Plug and Play ACPI device, IDs PNP0a08 PNP0a03 (active) [ 0.431447] pnp 00:01: [mem 0xfed1c000-0xfed1ffff] [ 0.431450] pnp 00:01: [mem 0xfed14000-0xfed17fff] [ 0.431453] pnp 00:01: [mem 0xfed18000-0xfed18fff] [ 0.431456] pnp 00:01: [mem 0xfed19000-0xfed19fff] [ 0.431458] pnp 00:01: [mem 0xe0000000-0xefffffff] [ 0.431461] pnp 00:01: [mem 0xfed20000-0xfed3ffff] [ 0.431464] pnp 00:01: [mem 0xfed40000-0xfed44fff] [ 0.431467] pnp 00:01: [mem 0xfed45000-0xfed8ffff] [ 0.431559] system 00:01: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.431564] system 00:01: [mem 0xfed14000-0xfed17fff] has been reserved [ 0.431568] system 00:01: [mem 0xfed18000-0xfed18fff] has been reserved [ 0.431572] system 00:01: [mem 0xfed19000-0xfed19fff] has been reserved [ 0.431576] system 00:01: [mem 0xe0000000-0xefffffff] has been reserved [ 0.431580] system 00:01: [mem 0xfed20000-0xfed3ffff] has been reserved [ 0.431584] system 00:01: [mem 0xfed40000-0xfed44fff] has been reserved [ 0.431588] system 00:01: [mem 0xfed45000-0xfed8ffff] has been reserved [ 0.431593] system 00:01: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.431859] pnp 00:02: [io 0x0000-0x001f] [ 0.431862] pnp 00:02: [io 0x0081-0x0091] [ 0.431864] pnp 00:02: [io 0x0093-0x009f] [ 0.431867] pnp 00:02: [io 0x00c0-0x00df] [ 0.431870] pnp 00:02: [dma 4] [ 0.431931] pnp 00:02: Plug and Play ACPI device, IDs PNP0200 (active) [ 0.431946] pnp 00:03: [mem 0xff000000-0xffffffff] [ 0.432030] pnp 00:03: Plug and Play ACPI device, IDs INT0800 (active) [ 0.432131] pnp 00:04: [mem 0xfed00000-0xfed003ff] [ 0.432218] system 00:04: [mem 0xfed00000-0xfed003ff] has been reserved [ 0.432223] system 00:04: Plug and Play ACPI device, IDs PNP0103 PNP0c01 (active) [ 0.432239] pnp 00:05: [io 0x00f0] [ 0.432256] pnp 00:05: [irq 13] [ 0.432321] pnp 00:05: Plug and Play ACPI device, IDs PNP0c04 (active) [ 0.432337] pnp 00:06: [io 0x002e-0x002f] [ 0.432340] pnp 00:06: [io 0x004e-0x004f] [ 0.432343] pnp 00:06: [io 0x0061] [ 0.432345] pnp 00:06: [io 0x0063] [ 0.432348] pnp 00:06: [io 0x0065] [ 0.432351] pnp 00:06: [io 0x0067] [ 0.432353] pnp 00:06: [io 0x0080] [ 0.432355] pnp 00:06: [io 0x0092] [ 0.432358] pnp 00:06: [io 0x00b2-0x00b3] [ 0.432361] pnp 00:06: [io 0x0680-0x069f] [ 0.432363] pnp 00:06: [io 0x0800-0x080f] [ 0.432366] pnp 00:06: [io 0x1000-0x107f] [ 0.432373] pnp 00:06: [io 0x1180-0x11bf] [ 0.432375] pnp 00:06: [io 0xfe00] [ 0.432378] pnp 00:06: [io 0xff00-0xff7f] [ 0.432479] system 00:06: [io 0x0680-0x069f] has been reserved [ 0.432484] system 00:06: [io 0x0800-0x080f] has been reserved [ 0.432487] system 00:06: [io 0x1000-0x107f] has been reserved [ 0.432491] system 00:06: [io 0x1180-0x11bf] has been reserved [ 0.432495] system 00:06: [io 0xfe00] has been reserved [ 0.432499] system 00:06: [io 0xff00-0xff7f] has been reserved [ 0.432504] system 00:06: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.432517] pnp 00:07: [io 0x0070-0x0077] [ 0.432525] pnp 00:07: [irq 8] [ 0.432587] pnp 00:07: Plug and Play ACPI device, IDs PNP0b00 (active) [ 0.452092] pnp 00:08: [io 0x0060] [ 0.452096] pnp 00:08: [io 0x0064] [ 0.452112] pnp 00:08: [irq 1] [ 0.452226] pnp 00:08: Plug and Play ACPI device, IDs PNP0303 (active) [ 0.452246] pnp 00:09: [irq 12] [ 0.452305] pnp 00:09: Plug and Play ACPI device, IDs PNP0f13 (active) [ 0.452340] pnp: PnP ACPI: found 10 devices [ 0.452343] ACPI: ACPI bus type pnp unregistered [ 0.459104] PCI: max bus depth: 1 pci_try_num: 2 [ 0.459195] pci 0000:00:1f.3: BAR 0: assigned [mem 0xc0000000-0xc00000ff] [ 0.459204] pci 0000:00:1f.3: BAR 0: set to [mem 0xc0000000-0xc00000ff] (PCI address [0xc0000000-0xc00000ff]) [ 0.459209] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.459214] pci 0000:00:1c.0: bridge window [io 0x2000-0x2fff] [ 0.459222] pci 0000:00:1c.0: bridge window [mem 0xf6000000-0xf7ffffff] [ 0.459229] pci 0000:00:1c.0: bridge window [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.459239] pci 0000:00:1c.1: PCI bridge to [bus 04-04] [ 0.459244] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.459252] pci 0000:00:1c.1: bridge window [mem 0xf8000000-0xf9ffffff] [ 0.459259] pci 0000:00:1c.1: bridge window [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.459268] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 0.459272] pci 0000:00:1c.2: bridge window [io 0x4000-0x4fff] [ 0.459280] pci 0000:00:1c.2: bridge window [mem 0xfa000000-0xfbffffff] [ 0.459287] pci 0000:00:1c.2: bridge window [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.459296] pci 0000:00:1c.3: PCI bridge to [bus 06-06] [ 0.459301] pci 0000:00:1c.3: bridge window [io 0x5000-0x5fff] [ 0.459308] pci 0000:00:1c.3: bridge window [mem 0xc8000000-0xc9ffffff] [ 0.459314] pci 0000:00:1c.3: bridge window [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.459324] pci 0000:00:1e.0: PCI bridge to [bus 08-08] [ 0.459327] pci 0000:00:1e.0: bridge window [io disabled] [ 0.459334] pci 0000:00:1e.0: bridge window [mem 0xfc200000-0xfc2fffff] [ 0.459340] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.459373] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 0.459380] pci 0000:00:1c.0: setting latency timer to 64 [ 0.459399] pci 0000:00:1c.1: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 0.459405] pci 0000:00:1c.1: setting latency timer to 64 [ 0.459419] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.459425] pci 0000:00:1c.2: setting latency timer to 64 [ 0.459438] pci 0000:00:1c.3: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 0.459444] pci 0000:00:1c.3: setting latency timer to 64 [ 0.459455] pci 0000:00:1e.0: setting latency timer to 64 [ 0.459460] pci_bus 0000:00: resource 0 [io 0x0000-0xffff] [ 0.459464] pci_bus 0000:00: resource 1 [mem 0x00000000-0xfffffffff] [ 0.459467] pci_bus 0000:02: resource 0 [io 0x2000-0x2fff] [ 0.459470] pci_bus 0000:02: resource 1 [mem 0xf6000000-0xf7ffffff] [ 0.459474] pci_bus 0000:02: resource 2 [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.459478] pci_bus 0000:04: resource 0 [io 0x3000-0x3fff] [ 0.459481] pci_bus 0000:04: resource 1 [mem 0xf8000000-0xf9ffffff] [ 0.459484] pci_bus 0000:04: resource 2 [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.459488] pci_bus 0000:05: resource 0 [io 0x4000-0x4fff] [ 0.459491] pci_bus 0000:05: resource 1 [mem 0xfa000000-0xfbffffff] [ 0.459495] pci_bus 0000:05: resource 2 [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.459498] pci_bus 0000:06: resource 0 [io 0x5000-0x5fff] [ 0.459501] pci_bus 0000:06: resource 1 [mem 0xc8000000-0xc9ffffff] [ 0.459505] pci_bus 0000:06: resource 2 [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.459508] pci_bus 0000:08: resource 1 [mem 0xfc200000-0xfc2fffff] [ 0.459512] pci_bus 0000:08: resource 4 [io 0x0000-0xffff] [ 0.459515] pci_bus 0000:08: resource 5 [mem 0x00000000-0xfffffffff] [ 0.459580] NET: Registered protocol family 2 [ 0.459816] IP route cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.461759] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 0.468207] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 0.469024] TCP: Hash tables configured (established 524288 bind 65536) [ 0.469028] TCP reno registered [ 0.469052] UDP hash table entries: 2048 (order: 4, 65536 bytes) [ 0.469120] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) [ 0.469325] NET: Registered protocol family 1 [ 0.469358] pci 0000:00:02.0: Boot video device [ 0.469577] PCI: CLS 64 bytes, default 64 [ 0.469604] Simple Boot Flag at 0x36 set to 0x1 [ 0.470069] audit: initializing netlink socket (disabled) [ 0.470088] type=2000 audit(1317800082.464:1): initialized [ 0.509918] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.531362] VFS: Disk quotas dquot_6.5.2 [ 0.531454] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.532343] fuse init (API version 7.16) [ 0.532465] msgmni has been set to 5719 [ 0.532931] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.532975] io scheduler noop registered [ 0.532978] io scheduler deadline registered [ 0.533033] io scheduler cfq registered (default) [ 0.533206] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.533281] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 0.533378] pcieport 0000:00:1c.1: setting latency timer to 64 [ 0.533444] pcieport 0000:00:1c.1: irq 41 for MSI/MSI-X [ 0.533540] pcieport 0000:00:1c.2: setting latency timer to 64 [ 0.533607] pcieport 0000:00:1c.2: irq 42 for MSI/MSI-X [ 0.533705] pcieport 0000:00:1c.3: setting latency timer to 64 [ 0.533770] pcieport 0000:00:1c.3: irq 43 for MSI/MSI-X [ 0.533898] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.533934] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.533994] intel_idle: MWAIT substates: 0x22220 [ 0.533997] intel_idle: does not run on family 6 model 15 [ 0.534105] ACPI: Deprecated procfs I/F for AC is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared [ 0.534186] ACPI: AC Adapter [ACAD] (on-line) [ 0.534267] input: Lid Switch as /devices/LNXSYSTM:00/device:00/PNP0C0D:00/input/input0 [ 0.534291] ACPI: Lid Switch [LID0] [ 0.534348] input: Power Button as /devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input1 [ 0.534353] ACPI: Power Button [PWRB] [ 0.534429] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2 [ 0.534434] ACPI: Power Button [PWRF] [ 0.534479] ACPI: acpi_idle registered with cpuidle [ 0.536970] Monitor-Mwait will be used to enter C-1 state [ 0.537024] Monitor-Mwait will be used to enter C-2 state [ 0.537059] Monitor-Mwait will be used to enter C-3 state [ 0.537066] Marking TSC unstable due to TSC halts in idle [ 0.576306] ACPI: Deprecated procfs I/F for battery is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared [ 0.576339] ERST: Table is not found! [ 0.576477] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled [ 0.596514] ACPI: Battery Slot [BAT1] (battery present) [ 0.756873] Freeing initrd memory: 19464k freed [ 0.789948] Linux agpgart interface v0.103 [ 0.790084] agpgart-intel 0000:00:00.0: Intel 965GM Chipset [ 0.790242] agpgart-intel 0000:00:00.0: detected gtt size: 524288K total, 262144K mappable [ 0.791097] agpgart-intel 0000:00:00.0: detected 8192K stolen memory [ 0.791250] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xd0000000 [ 0.792794] brd: module loaded [ 0.793486] loop: module loaded [ 0.793683] ata_piix 0000:00:1f.1: version 2.13 [ 0.793701] ata_piix 0000:00:1f.1: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 0.793746] ata_piix 0000:00:1f.1: setting latency timer to 64 [ 0.794143] scsi0 : ata_piix [ 0.794282] scsi1 : ata_piix [ 0.794784] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0x1810 irq 14 [ 0.794789] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x1818 irq 15 [ 0.795227] Fixed MDIO Bus: probed [ 0.795261] PPP generic driver version 2.4.2 [ 0.795315] tun: Universal TUN/TAP device driver, 1.6 [ 0.795318] tun: (C) 1999-2004 Max Krasnyansky [ 0.795429] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.795451] ehci_hcd 0000:00:1a.7: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.795472] ehci_hcd 0000:00:1a.7: setting latency timer to 64 [ 0.795477] ehci_hcd 0000:00:1a.7: EHCI Host Controller [ 0.795524] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 1 [ 0.795567] ehci_hcd 0000:00:1a.7: debug port 1 [ 0.799463] ehci_hcd 0000:00:1a.7: cache line size of 64 is not supported [ 0.799485] ehci_hcd 0000:00:1a.7: irq 18, io mem 0xfc504800 [ 0.812020] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00 [ 0.812182] hub 1-0:1.0: USB hub found [ 0.812189] hub 1-0:1.0: 4 ports detected [ 0.812291] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.812305] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 0.812310] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 0.812363] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 2 [ 0.812398] ehci_hcd 0000:00:1d.7: debug port 1 [ 0.816279] ehci_hcd 0000:00:1d.7: cache line size of 64 is not supported [ 0.816301] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xfc504c00 [ 0.832023] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 0.832151] hub 2-0:1.0: USB hub found [ 0.832157] hub 2-0:1.0: 6 ports detected [ 0.832258] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.832276] uhci_hcd: USB Universal Host Controller Interface driver [ 0.832305] uhci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.832314] uhci_hcd 0000:00:1a.0: setting latency timer to 64 [ 0.832319] uhci_hcd 0000:00:1a.0: UHCI Host Controller [ 0.832366] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 3 [ 0.832412] uhci_hcd 0000:00:1a.0: irq 16, io base 0x00001820 [ 0.832569] hub 3-0:1.0: USB hub found [ 0.832575] hub 3-0:1.0: 2 ports detected [ 0.832668] uhci_hcd 0000:00:1a.1: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 0.832679] uhci_hcd 0000:00:1a.1: setting latency timer to 64 [ 0.832684] uhci_hcd 0000:00:1a.1: UHCI Host Controller [ 0.832731] uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 4 [ 0.832775] uhci_hcd 0000:00:1a.1: irq 21, io base 0x00001840 [ 0.832936] hub 4-0:1.0: USB hub found [ 0.832941] hub 4-0:1.0: 2 ports detected [ 0.833028] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.833037] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 0.833042] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 0.833099] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 5 [ 0.833134] uhci_hcd 0000:00:1d.0: irq 23, io base 0x00001860 [ 0.833291] hub 5-0:1.0: USB hub found [ 0.833296] hub 5-0:1.0: 2 ports detected [ 0.833384] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.833392] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 0.833397] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 0.833448] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 6 [ 0.833493] uhci_hcd 0000:00:1d.1: irq 19, io base 0x00001880 [ 0.833649] hub 6-0:1.0: USB hub found [ 0.833655] hub 6-0:1.0: 2 ports detected [ 0.833737] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.833746] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 0.833750] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 0.833797] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 7 [ 0.833832] uhci_hcd 0000:00:1d.2: irq 18, io base 0x000018a0 [ 0.833984] hub 7-0:1.0: USB hub found [ 0.833990] hub 7-0:1.0: 2 ports detected [ 0.834133] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 0.858635] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.858644] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.858792] mousedev: PS/2 mouse device common for all mice [ 0.860515] rtc_cmos 00:07: RTC can wake from S4 [ 0.860650] rtc_cmos 00:07: rtc core: registered rtc_cmos as rtc0 [ 0.860686] rtc0: alarms up to one month, y3k, 242 bytes nvram, hpet irqs [ 0.860821] device-mapper: uevent: version 1.0.3 [ 0.860928] device-mapper: ioctl: 4.20.0-ioctl (2011-02-02) initialised: dm-devel@redhat.com [ 0.861015] cpuidle: using governor ladder [ 0.861137] cpuidle: using governor menu [ 0.861140] EFI Variables Facility v0.08 2004-May-17 [ 0.861497] TCP cubic registered [ 0.861666] NET: Registered protocol family 10 [ 0.862339] NET: Registered protocol family 17 [ 0.862362] Registering the dns_resolver key type [ 0.862505] PM: Hibernation image not present or could not be loaded. [ 0.862521] registered taskstats version 1 [ 0.881709] Magic number: 15:169:571 [ 0.881852] rtc_cmos 00:07: setting system clock to 2011-10-05 07:34:43 UTC (1317800083) [ 0.882695] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.882699] EDD information not available. [ 0.885384] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3 [ 0.964510] ata1.00: ATAPI: MATSHITADVD-RAM UJ-850 z, RB32, max UDMA/33 [ 0.980374] ata1.00: configured for UDMA/33 [ 0.983110] scsi 0:0:0:0: CD-ROM MATSHITA DVD-RAM UJ-850 z RB32 PQ: 0 ANSI: 5 [ 0.985684] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 0.985690] cdrom: Uniform CD-ROM driver Revision: 3.20 [ 0.985886] sr 0:0:0:0: Attached scsi CD-ROM sr0 [ 0.985957] sr 0:0:0:0: Attached scsi generic sg0 type 5 [ 0.988684] Freeing unused kernel memory: 984k freed [ 0.989019] Write protecting the kernel read-only data: 10240k [ 0.989354] Freeing unused kernel memory: 20k freed [ 0.996526] Freeing unused kernel memory: 1400k freed [ 1.023090] udevd[92]: starting version 173 [ 1.095474] [drm] Initialized drm 1.1.0 20060810 [ 1.111223] tg3.c:v3.119 (May 18, 2011) [ 1.111255] tg3 0000:06:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 1.111275] tg3 0000:06:00.0: setting latency timer to 64 [ 1.123354] wmi: Mapper loaded [ 1.135292] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.135301] i915 0000:00:02.0: setting latency timer to 64 [ 1.229432] i915 0000:00:02.0: irq 44 for MSI/MSI-X [ 1.229442] [drm] Supports vblank timestamp caching Rev 1 (10.10.2010). [ 1.229444] [drm] Driver supports precise vblank timestamp query. [ 1.229504] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=io+mem,decodes=io+mem:owns=io+mem [ 1.231431] sdhci: Secure Digital Host Controller Interface driver [ 1.231435] sdhci: Copyright(c) Pierre Ossman [ 1.231761] sdhci-pci 0000:08:06.1: SDHCI controller found [1180:0822] (rev 19) [ 1.231780] sdhci-pci 0000:08:06.1: PCI INT B -> GSI 23 (level, low) -> IRQ 23 [ 1.232804] sdhci-pci 0000:08:06.1: Will use DMA mode even though HW doesn't fully claim to support it. [ 1.251222] mmc0: no vmmc regulator found [ 1.252265] Registered led device: mmc0:: [ 1.258216] mmc0: SDHCI controller on PCI [0000:08:06.1] using DMA [ 1.278826] tg3 0000:06:00.0: eth0: Tigon3 [partno(BCM95906) rev c002] (PCI Express) MAC address 00:1b:38:0c:7f:47 [ 1.278833] tg3 0000:06:00.0: eth0: attached PHY is 5906 (10/100Base-TX Ethernet) (WireSpeed[0], EEE[0]) [ 1.278838] tg3 0000:06:00.0: eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1] [ 1.278842] tg3 0000:06:00.0: eth0: dma_rwctrl[76180000] dma_mask[64-bit] [ 1.288114] firewire_ohci 0000:08:06.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 1.288352] fixme: max PWM is zero. [ 1.321105] [drm] initialized overlay support [ 1.363095] firewire_ohci: Added fw-ohci device 0000:08:06.0, OHCI v1.10, 4 IR + 4 IT contexts, quirks 0x1 [ 1.429305] usb 1-4: new high speed USB device number 4 using ehci_hcd [ 1.510188] fbcon: inteldrmfb (fb0) is primary device [ 1.510267] Console: switching to colour frame buffer device 160x50 [ 1.510301] fb0: inteldrmfb frame buffer device [ 1.510304] drm: registered panic notifier [ 1.596139] acpi device:08: registered as cooling_device2 [ 1.596350] input: Video Bus as /devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:01/input/input4 [ 1.596428] ACPI: Video Device [GFX0] (multi-head: yes rom: no post: no) [ 1.596505] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 1.596723] ahci 0000:00:1f.2: version 3.0 [ 1.596748] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.596832] ahci 0000:00:1f.2: irq 45 for MSI/MSI-X [ 1.596928] ahci 0000:00:1f.2: AHCI 0001.0100 32 slots 3 ports 3 Gbps 0x7 impl SATA mode [ 1.596934] ahci 0000:00:1f.2: flags: 64bit ncq sntf pm led clo pio slum part ccc [ 1.596941] ahci 0000:00:1f.2: setting latency timer to 64 [ 1.600697] scsi2 : ahci [ 1.601002] scsi3 : ahci [ 1.601154] scsi4 : ahci [ 1.601328] ata3: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504100 irq 45 [ 1.601335] ata4: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504180 irq 45 [ 1.601340] ata5: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504200 irq 45 [ 1.860262] firewire_core: created device fw0: GUID 00023f7bac4040de, S400 [ 1.920122] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.921792] ata3.00: unexpected _GTF length (8) [ 1.922070] ata3.00: ATA-8: WDC WD2500BEKT-75PVMT0, 01.01A01, max UDMA/133 [ 1.922077] ata3.00: 488397168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA [ 1.923756] ata3.00: unexpected _GTF length (8) [ 1.924053] ata4: SATA link down (SStatus 0 SControl 300) [ 1.924081] ata3.00: configured for UDMA/133 [ 1.924106] ata5: SATA link down (SStatus 0 SControl 300) [ 1.924318] scsi 2:0:0:0: Direct-Access ATA WDC WD2500BEKT-7 01.0 PQ: 0 ANSI: 5 [ 1.924525] sd 2:0:0:0: Attached scsi generic sg1 type 0 [ 1.924642] sd 2:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB) [ 1.924823] sd 2:0:0:0: [sda] Write Protect is off [ 1.924828] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.924898] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.020840] sda: sda1 sda2 sda3 sda4 < sda5 > [ 2.021461] sd 2:0:0:0: [sda] Attached SCSI disk [ 2.032059] usb 3-1: new full speed USB device number 2 using uhci_hcd [ 2.464056] usb 4-1: new full speed USB device number 2 using uhci_hcd [ 2.872042] usb 6-1: new low speed USB device number 2 using uhci_hcd [ 3.093235] input: MLK Trust Mouse as /devices/pci0000:00/0000:00:1d.1/usb6/6-1/6-1:1.0/input/input5 [ 3.093727] generic-usb 0003:04FC:05DA.0001: input,hiddev0,hidraw0: USB HID v1.10 Mouse [MLK Trust Mouse] on usb-0000:00:1d.1-1/input0 [ 3.093905] usbcore: registered new interface driver usbhid [ 3.093909] usbhid: USB HID core driver [ 3.288960] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null) [ 3.308073] usb 6-2: new full speed USB device number 3 using uhci_hcd [ 3.720052] usb 7-1: new low speed USB device number 2 using uhci_hcd [ 3.918393] input: LITEON Technology USB Multimedia Keyboard as /devices/pci0000:00/0000:00:1d.2/usb7/7-1/7-1:1.0/input/input6 [ 3.918495] generic-usb 0003:046D:C312.0002: input,hidraw1: USB HID v1.10 Keyboard [LITEON Technology USB Multimedia Keyboard] on usb-0000:00:1d.2-1/input0 [ 5.565904] Adding 15999996k swap on /dev/sda3. Priority:-1 extents:1 across:15999996k [ 5.691364] udevd[373]: starting version 173 [ 6.303871] lp: driver loaded but no devices found [ 7.040655] cfg80211: Calling CRDA to update world regulatory domain [ 7.159284] r852 0000:08:06.3: PCI INT B -> GSI 23 (level, low) -> IRQ 23 [ 7.159297] r852 0000:08:06.3: setting latency timer to 64 [ 7.159394] r852: Non dma capable device detected, dma disabled [ 7.159411] r852: driver loaded successfully [ 7.169632] iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, in-tree:s [ 7.169637] iwl3945: Copyright(c) 2003-2011 Intel Corporation [ 7.169734] iwl3945 0000:04:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 7.169751] iwl3945 0000:04:00.0: setting latency timer to 64 [ 7.225063] iwl3945 0000:04:00.0: Tunable channels: 13 802.11bg, 23 802.11a channels [ 7.225067] iwl3945 0000:04:00.0: Detected Intel Wireless WiFi Link 3945ABG [ 7.225225] iwl3945 0000:04:00.0: irq 46 for MSI/MSI-X [ 7.225470] Registered led device: phy0-led [ 7.225511] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 7.521071] ieee80211 phy0: Selected rate control algorithm 'iwl-3945-rs' [ 7.728682] udevd[389]: renamed network interface eth0 to eth1 [ 7.785421] udevd[392]: renamed network interface wlan0 to wlan1 [ 7.839555] device-mapper: multipath: version 1.3.0 loaded [ 7.920206] Synaptics Touchpad, model: 1, fw: 6.3, id: 0x25c0b1, caps: 0xa04713/0x200000/0x0 [ 8.001393] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input7 [ 8.103705] Linux video capture interface: v2.00 [ 8.142601] uvcvideo: Found UVC 1.00 device USB 2.0 Camera (04f2:b013) [ 8.145395] input: USB 2.0 Camera as /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/input/input8 [ 8.145503] usbcore: registered new interface driver uvcvideo [ 8.145506] USB Video Class driver (v1.1.0) [ 8.268868] gspca: v2.13.0 registered [ 8.426860] Bluetooth: Core ver 2.16 [ 8.426898] NET: Registered protocol family 31 [ 8.426901] Bluetooth: HCI device and connection manager initialized [ 8.426905] Bluetooth: HCI socket layer initialized [ 8.426908] Bluetooth: L2CAP socket layer initialized [ 8.426983] Bluetooth: SCO socket layer initialized [ 8.445120] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 8.445873] usbcore: registered new interface driver btusb [ 8.596127] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 8.596132] cfg80211: World regulatory domain updated: [ 8.596135] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 8.596139] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.596144] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 8.596147] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 8.596151] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.596155] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.713241] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 8.713332] HDA Intel 0000:00:1b.0: irq 47 for MSI/MSI-X [ 8.713375] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 9.214524] type=1400 audit(1317800091.827:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient" pid=762 comm="apparmor_parser" [ 9.214539] type=1400 audit(1317800091.827:3): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=760 comm="apparmor_parser" [ 9.214899] type=1400 audit(1317800091.827:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=762 comm="apparmor_parser" [ 9.214917] type=1400 audit(1317800091.827:5): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=760 comm="apparmor_parser" [ 9.215139] type=1400 audit(1317800091.827:6): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=762 comm="apparmor_parser" [ 9.215162] type=1400 audit(1317800091.827:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=760 comm="apparmor_parser" [ 9.215989] type=1400 audit(1317800091.827:8): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=761 comm="apparmor_parser" [ 9.216386] type=1400 audit(1317800091.831:9): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=761 comm="apparmor_parser" [ 9.216637] type=1400 audit(1317800091.831:10): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=761 comm="apparmor_parser" [ 9.565602] input: zc3xx as /devices/pci0000:00/0000:00:1a.0/usb3/3-1/input/input9 [ 9.565840] usbcore: registered new interface driver zc3xx [ 9.567768] usbcore: registered new interface driver snd-usb-audio [ 10.957262] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro [ 11.498897] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 11.610016] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null) [ 13.338782] type=1400 audit(1317800095.951:11): apparmor="STATUS" operation="profile_load" name="/usr/lib/lightdm/lightdm-guest-session-wrapper" pid=1170 comm="apparmor_parser" [ 14.107842] ppdev: user-space parallel port driver [ 16.201248] microcode: CPU0 sig=0x6fd, pf=0x80, revision=0xa1 [ 16.241864] microcode: CPU1 sig=0x6fd, pf=0x80, revision=0xa1 [ 16.244584] microcode: Microcode Update Driver: v2.00 , Peter Oruba [ 16.257389] iwl3945 0000:04:00.0: loaded firmware version 15.32.2.9 [ 16.319712] microcode: CPU0 updated to revision 0xa4, date = 2010-10-02 [ 16.320392] microcode: CPU1 updated to revision 0xa4, date = 2010-10-02 [ 16.327663] ADDRCONF(NETDEV_UP): wlan1: link is not ready [ 16.411245] tg3 0000:06:00.0: irq 48 for MSI/MSI-X [ 16.441602] ADDRCONF(NETDEV_UP): eth1: link is not ready [ 17.163336] init: failsafe main process (1112) killed by TERM signal [ 17.369512] init: gdm main process (1340) killed by TERM signal [ 18.121686] tg3 0000:06:00.0: eth1: Link is up at 100 Mbps, full duplex [ 18.121691] tg3 0000:06:00.0: eth1: Flow control is on for TX and on for RX [ 18.122295] ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready [ 21.210518] RPC: Registered named UNIX socket transport module. [ 21.210523] RPC: Registered udp transport module. [ 21.210525] RPC: Registered tcp transport module. [ 21.210528] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 21.445931] Installing knfsd (copyright (C) 1996 okir@monad.swb.de). [ 21.627527] NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory [ 21.636586] NFSD: starting 90-second grace period [ 24.852307] vboxdrv: Found 2 processor cores. [ 24.852593] vboxdrv: fAsync=0 offMin=0x1c2 offMax=0xae6 [ 24.852666] vboxdrv: TSC mode is 'synchronous', kernel timer mode is 'normal'. [ 24.852669] vboxdrv: Successfully loaded version 4.1.2_Ubuntu (interface 0x00190000). [ 25.101599] vboxpci: IOMMU not found (not registered) [ 27.046401] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 27.046405] Bluetooth: BNEP filters: protocol multicast [ 27.081903] Bluetooth: RFCOMM TTY layer initialized [ 27.081919] Bluetooth: RFCOMM socket layer initialized [ 27.081921] Bluetooth: RFCOMM ver 1.11 [ 28.752057] eth1: no IPv6 routers present [ 33.139443] init: plymouth-stop pre-start process (2005) terminated with status 1 [ 33.628053] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro,commit=0 [ 34.056830] EXT4-fs (sda1): re-mounted. Opts: commit=0 [ 34.217110] EXT4-fs (sda5): re-mounted. Opts: commit=0 [ 45.192742] wlan1: authenticate with 00:1a:c1:38:47:d4 (try 1) [ 45.196319] wlan1: authenticated [ 45.199717] wlan1: associate with 00:1a:c1:38:47:d4 (try 1) [ 45.202749] wlan1: RX AssocResp from 00:1a:c1:38:47:d4 (capab=0x431 status=0 aid=2) [ 45.202758] wlan1: associated [ 45.206342] ADDRCONF(NETDEV_CHANGE): wlan1: link becomes ready [ 45.206456] cfg80211: Calling CRDA for country: GB [ 45.213483] cfg80211: Updating information on frequency 2412 MHz for a 20 MHz width channel with regulatory rule: [ 45.213493] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213498] cfg80211: Updating information on frequency 2417 MHz for a 20 MHz width channel with regulatory rule: [ 45.213505] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213509] cfg80211: Updating information on frequency 2422 MHz for a 20 MHz width channel with regulatory rule: [ 45.213516] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213520] cfg80211: Updating information on frequency 2427 MHz for a 20 MHz width channel with regulatory rule: [ 45.213526] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213531] cfg80211: Updating information on frequency 2432 MHz for a 20 MHz width channel with regulatory rule: [ 45.213537] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213542] cfg80211: Updating information on frequency 2437 MHz for a 20 MHz width channel with regulatory rule: [ 45.213547] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213552] cfg80211: Updating information on frequency 2442 MHz for a 20 MHz width channel with regulatory rule: [ 45.213558] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213563] cfg80211: Updating information on frequency 2447 MHz for a 20 MHz width channel with regulatory rule: [ 45.213569] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213573] cfg80211: Updating information on frequency 2452 MHz for a 20 MHz width channel with regulatory rule: [ 45.213579] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213584] cfg80211: Updating information on frequency 2457 MHz for a 20 MHz width channel with regulatory rule: [ 45.213590] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213594] cfg80211: Updating information on frequency 2462 MHz for a 20 MHz width channel with regulatory rule: [ 45.213600] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213605] cfg80211: Updating information on frequency 2467 MHz for a 20 MHz width channel with regulatory rule: [ 45.213611] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213615] cfg80211: Updating information on frequency 2472 MHz for a 20 MHz width channel with regulatory rule: [ 45.213621] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213626] cfg80211: Disabling freq 5170 MHz [ 45.213630] cfg80211: Updating information on frequency 5180 MHz for a 20 MHz width channel with regulatory rule: [ 45.213636] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213640] cfg80211: Updating information on frequency 5190 MHz for a 20 MHz width channel with regulatory rule: [ 45.213646] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213651] cfg80211: Updating information on frequency 5200 MHz for a 20 MHz width channel with regulatory rule: [ 45.213657] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213662] cfg80211: Updating information on frequency 5210 MHz for a 20 MHz width channel with regulatory rule: [ 45.213667] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213672] cfg80211: Updating information on frequency 5220 MHz for a 20 MHz width channel with regulatory rule: [ 45.213678] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213683] cfg80211: Updating information on frequency 5230 MHz for a 20 MHz width channel with regulatory rule: [ 45.213688] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213693] cfg80211: Updating information on frequency 5240 MHz for a 20 MHz width channel with regulatory rule: [ 45.213699] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213704] cfg80211: Updating information on frequency 5260 MHz for a 20 MHz width channel with regulatory rule: [ 45.213710] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213714] cfg80211: Updating information on frequency 5280 MHz for a 20 MHz width channel with regulatory rule: [ 45.213720] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213725] cfg80211: Updating information on frequency 5300 MHz for a 20 MHz width channel with regulatory rule: [ 45.213731] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213736] cfg80211: Updating information on frequency 5320 MHz for a 20 MHz width channel with regulatory rule: [ 45.213742] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213746] cfg80211: Updating information on frequency 5500 MHz for a 20 MHz width channel with regulatory rule: [ 45.213752] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213757] cfg80211: Updating information on frequency 5520 MHz for a 20 MHz width channel with regulatory rule: [ 45.213763] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213768] cfg80211: Updating information on frequency 5540 MHz for a 20 MHz width channel with regulatory rule: [ 45.213774] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213779] cfg80211: Updating information on frequency 5560 MHz for a 20 MHz width channel with regulatory rule: [ 45.213785] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213789] cfg80211: Updating information on frequency 5580 MHz for a 20 MHz width channel with regulatory rule: [ 45.213795] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213800] cfg80211: Updating information on frequency 5600 MHz for a 20 MHz width channel with regulatory rule: [ 45.213806] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213810] cfg80211: Updating information on frequency 5620 MHz for a 20 MHz width channel with regulatory rule: [ 45.213816] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213821] cfg80211: Updating information on frequency 5640 MHz for a 20 MHz width channel with regulatory rule: [ 45.213827] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213831] cfg80211: Updating information on frequency 5660 MHz for a 20 MHz width channel with regulatory rule: [ 45.213837] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213842] cfg80211: Updating information on frequency 5680 MHz for a 20 MHz width channel with regulatory rule: [ 45.213848] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213852] cfg80211: Updating information on frequency 5700 MHz for a 20 MHz width channel with regulatory rule: [ 45.213858] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213864] cfg80211: Regulatory domain changed to country: GB [ 45.213868] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 45.213873] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213879] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213884] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213889] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm) [ 52.640123] eth1: no IPv6 routers present [ 55.208282] wlan1: disassociating from 00:1a:c1:38:47:d4 by local choice (reason=3) [ 55.214021] cfg80211: All devices are disconnected, going to restore regulatory settings [ 55.214032] cfg80211: Restoring regulatory settings [ 55.214052] cfg80211: Calling CRDA to update world regulatory domain [ 55.214778] wlan1: deauthenticating from 00:1a:c1:38:47:d4 by local choice (reason=3) [ 55.221291] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 55.221299] cfg80211: World regulatory domain updated: [ 55.221303] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 55.221309] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.221315] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 55.221321] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 55.221327] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.221333] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.392119] wlan1: no IPv6 routers present [ 58.763822] wlan1: authenticate with 00:1a:c1:38:47:d4 (try 1) [ 58.765582] wlan1: authenticated [ 58.766582] wlan1: associate with 00:1a:c1:38:47:d4 (try 1) [ 58.769972] wlan1: RX ReassocResp from 00:1a:c1:38:47:d4 (capab=0x431 status=0 aid=2) [ 58.769980] wlan1: associated [ 58.773587] cfg80211: Calling CRDA for country: GB [ 58.778304] cfg80211: Updating information on frequency 2412 MHz for a 20 MHz width channel with regulatory rule: [ 58.778310] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778314] cfg80211: Updating information on frequency 2417 MHz for a 20 MHz width channel with regulatory rule: [ 58.778318] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778321] cfg80211: Updating information on frequency 2422 MHz for a 20 MHz width channel with regulatory rule: [ 58.778325] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778328] cfg80211: Updating information on frequency 2427 MHz for a 20 MHz width channel with regulatory rule: [ 58.778332] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778335] cfg80211: Updating information on frequency 2432 MHz for a 20 MHz width channel with regulatory rule: [ 58.778340] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778343] cfg80211: Updating information on frequency 2437 MHz for a 20 MHz width channel with regulatory rule: [ 58.778347] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778350] cfg80211: Updating information on frequency 2442 MHz for a 20 MHz width channel with regulatory rule: [ 58.778354] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778357] cfg80211: Updating information on frequency 2447 MHz for a 20 MHz width channel with regulatory rule: [ 58.778361] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778364] cfg80211: Updating information on frequency 2452 MHz for a 20 MHz width channel with regulatory rule: [ 58.778368] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778371] cfg80211: Updating information on frequency 2457 MHz for a 20 MHz width channel with regulatory rule: [ 58.778375] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778378] cfg80211: Updating information on frequency 2462 MHz for a 20 MHz width channel with regulatory rule: [ 58.778382] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778385] cfg80211: Updating information on frequency 2467 MHz for a 20 MHz width channel with regulatory rule: [ 58.778389] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778392] cfg80211: Updating information on frequency 2472 MHz for a 20 MHz width channel with regulatory rule: [ 58.778396] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778399] cfg80211: Disabling freq 5170 MHz [ 58.778402] cfg80211: Updating information on frequency 5180 MHz for a 20 MHz width channel with regulatory rule: [ 58.778406] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778409] cfg80211: Updating information on frequency 5190 MHz for a 20 MHz width channel with regulatory rule: [ 58.778413] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778416] cfg80211: Updating information on frequency 5200 MHz for a 20 MHz width channel with regulatory rule: [ 58.778420] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778423] cfg80211: Updating information on frequency 5210 MHz for a 20 MHz width channel with regulatory rule: [ 58.778427] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778430] cfg80211: Updating information on frequency 5220 MHz for a 20 MHz width channel with regulatory rule: [ 58.778434] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778437] cfg80211: Updating information on frequency 5230 MHz for a 20 MHz width channel with regulatory rule: [ 58.778441] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778444] cfg80211: Updating information on frequency 5240 MHz for a 20 MHz width channel with regulatory rule: [ 58.778448] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778452] cfg80211: Updating information on frequency 5260 MHz for a 20 MHz width channel with regulatory rule: [ 58.778456] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778459] cfg80211: Updating information on frequency 5280 MHz for a 20 MHz width channel with regulatory rule: [ 58.778463] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778466] cfg80211: Updating information on frequency 5300 MHz for a 20 MHz width channel with regulatory rule: [ 58.778470] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778473] cfg80211: Updating information on frequency 5320 MHz for a 20 MHz width channel with regulatory rule: [ 58.778477] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778480] cfg80211: Updating information on frequency 5500 MHz for a 20 MHz width channel with regulatory rule: [ 58.778484] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778487] cfg80211: Updating information on frequency 5520 MHz for a 20 MHz width channel with regulatory rule: [ 58.778491] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778494] cfg80211: Updating information on frequency 5540 MHz for a 20 MHz width channel with regulatory rule: [ 58.778498] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778501] cfg80211: Updating information on frequency 5560 MHz for a 20 MHz width channel with regulatory rule: [ 58.778505] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778508] cfg80211: Updating information on frequency 5580 MHz for a 20 MHz width channel with regulatory rule: [ 58.778512] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778515] cfg80211: Updating information on frequency 5600 MHz for a 20 MHz width channel with regulatory rule: [ 58.778519] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778522] cfg80211: Updating information on frequency 5620 MHz for a 20 MHz width channel with regulatory rule: [ 58.778526] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778529] cfg80211: Updating information on frequency 5640 MHz for a 20 MHz width channel with regulatory rule: [ 58.778533] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778536] cfg80211: Updating information on frequency 5660 MHz for a 20 MHz width channel with regulatory rule: [ 58.778540] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778543] cfg80211: Updating information on frequency 5680 MHz for a 20 MHz width channel with regulatory rule: [ 58.778547] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778550] cfg80211: Updating information on frequency 5700 MHz for a 20 MHz width channel with regulatory rule: [ 58.778554] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778558] cfg80211: Regulatory domain changed to country: GB [ 58.778560] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 58.778564] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778568] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778571] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778575] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm) [ 70.176124] wlan1: no IPv6 routers present [ 75.152080] eth1: no IPv6 routers present [ 98.736094] eth1: no IPv6 routers present [ 648.357292] ecryptfs_mount: kern_path() failed [ 648.388155] Reading sb failed; rc = [-2] [ 670.016019] eth1: no IPv6 routers present [ 688.176048] eth1: no IPv6 routers present [ 711.096140] eth1: no IPv6 routers present fwts-test/arg-json-0001/test-0001.sh000077500000000000000000000007201465205512700170160ustar00rootroot00000000000000#!/bin/bash # TEST="Test --json-data-path option" NAME=test-0001.sh TMPLOG=$TMP/klog.log.$$ HERE=$FWTSTESTDIR/../data $FWTS --log-format="%line %owner " -w 80 --json-data-path=$HERE --klog=$FWTSTESTDIR/arg-json-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-json-0001/klog-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-json-0001/test-0002.sh000077500000000000000000000006641465205512700170260ustar00rootroot00000000000000#!/bin/bash # TEST="Test -j option" NAME=test-0002.sh TMPLOG=$TMP/klog.log.$$ HERE=$FWTSTESTDIR/../data $FWTS --log-format="%line %owner " -w 80 -j $HERE --klog=$FWTSTESTDIR/arg-json-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-json-0001/klog-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-json-0001/test-0003.sh000077500000000000000000000007251465205512700170250ustar00rootroot00000000000000#!/bin/bash # TEST="Test --json-data-path option with bad path" NAME=test-0003.sh TMPLOG=$TMP/klog.log.$$ HERE=`pwd` $FWTS --log-format="%line %owner " -w 80 --json-data-path=/xxxx/fooo --klog=$FWTSTESTDIR/arg-json-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-json-0001/klog-0003.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-json-0001/test-0004.sh000077500000000000000000000006711465205512700170260ustar00rootroot00000000000000#!/bin/bash # TEST="Test -j option with bad path" NAME=test-0004.sh TMPLOG=$TMP/klog.log.$$ HERE=`pwd` $FWTS --log-format="%line %owner " -w 80 -j /xxxx/fooo --klog=$FWTSTESTDIR/arg-json-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-json-0001/klog-0004.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-klog-0001/000077500000000000000000000000001465205512700151065ustar00rootroot00000000000000fwts-test/arg-klog-0001/klog-0001.log000066400000000000000000000057051465205512700171320ustar00rootroot00000000000000klog klog: Scan kernel log for errors and warnings. klog ---------------------------------------------------------- klog Test 1 of 1: Kernel log error check. klog FAILED [MEDIUM] KlogAcpiMultipleMadt: Test 1, MEDIUM klog Kernel message: [ 0.000000] ACPI: BIOS bug: multiple APIC klog /MADT found, using 0 klog klog ADVICE: The BIOS is supposed to supply just one APIC/MADT, klog however, more than one has been found. One can use klog acpi_apic_instance=N to specify the Nth ACPI/MADT to use klog as an override if required. klog klog Kernel message: [ 0.228089] [Firmware Bug]: ACPI: BIOS klog _OSI(Linux) query ignored klog klog ADVICE: This is not exactly a failure mode but a warning klog from the kernel. The _OSI() method has implemented a match klog to the 'Linux' query in the DSDT and this is redundant klog because the ACPI driver matches onto the Windows _OSI klog strings by default. klog klog FAILED [CRITICAL] KlogPciAcpiOscRequestFailed: Test 1, klog CRITICAL Kernel message: [ 0.396181] pci0000:00: ACPI _OSC klog request failed (AE_NOT_FOUND), returned control mask: 0x1d klog klog ADVICE: The _OSC method evaluation failed, which will klog result in disabling PCIe functionality, for example, the klog Linux kernel has to disable Active State Power Management klog (ASPM) which means that PCIe power management is not klog optimally configured. klog klog FAILED [LOW] KlogAcpiDeprecatedProcfsInterface: Test 1, klog LOW Kernel message: [ 0.534105] ACPI: Deprecated procfs I klog /F for AC is loaded, please retry with klog CONFIG_ACPI_PROCFS_POWER cleared klog klog ADVICE: Using an old procfs interface for ACPI AC Adapter, klog this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This klog should be disabled for kernels > 2.6.37. klog klog FAILED [LOW] KlogAcpiDeprecatedProcfsInterface: Test 1, klog LOW Kernel message: [ 0.576306] ACPI: Deprecated procfs I klog /F for battery is loaded, please retry with klog CONFIG_ACPI_PROCFS_POWER cleared klog klog ADVICE: Using an old procfs interface for ACPI battery, klog this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This klog should be disabled for kernels > 2.6.37. klog klog Found 4 unique errors in kernel log. klog klog ========================================================== klog 0 passed, 4 failed, 0 warning, 0 aborted, 0 skipped, 0 klog info only. klog ========================================================== fwts-test/arg-klog-0001/klog.txt000066400000000000000000002225711465205512700166140ustar00rootroot00000000000000[ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 3.0.0-12-generic (buildd@crested) (gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3) ) #19-Ubuntu SMP Fri Sep 23 21:23:39 UTC 2011 (Ubuntu 3.0.0-12.19-generic 3.0.4) [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.0.0-12-generic root=UUID=08ed6ce0-0907-4d06-b1e1-b9c3ec647fe2 ro crashkernel=384M-2G:64M,2G-:128M quiet splash vt.handoff=7 [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] Centaur CentaurHauls [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009f800 (usable) [ 0.000000] BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000d2000 - 00000000000d4000 (reserved) [ 0.000000] BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000bf6d0000 (usable) [ 0.000000] BIOS-e820: 00000000bf6d0000 - 00000000bf6e3000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000bf6e3000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved) [ 0.000000] BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved) [ 0.000000] BIOS-e820: 00000000fed14000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1c000 - 00000000fed90000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ff000000 - 0000000100000000 (reserved) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI present. [ 0.000000] DMI: LENOVO 0769BMG/IEL10, BIOS 68ET27WW 11/14/2007 [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0xbf6d0 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask F80000000 write-back [ 0.000000] 1 base 080000000 mask FC0000000 write-back [ 0.000000] 2 base 0BF700000 mask FFFF00000 uncachable [ 0.000000] 3 base 0BF800000 mask FFF800000 uncachable [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] original variable MTRRs [ 0.000000] reg 0, base: 0GB, range: 2GB, type WB [ 0.000000] reg 1, base: 2GB, range: 1GB, type WB [ 0.000000] reg 2, base: 3063MB, range: 1MB, type UC [ 0.000000] reg 3, base: 3064MB, range: 8MB, type UC [ 0.000000] total RAM covered: 3063M [ 0.000000] Found optimal setting for mtrr clean up [ 0.000000] gran_size: 64K chunk_size: 16M num_reg: 4 lose cover RAM: 0G [ 0.000000] New variable MTRRs [ 0.000000] reg 0, base: 0GB, range: 2GB, type WB [ 0.000000] reg 1, base: 2GB, range: 1GB, type WB [ 0.000000] reg 2, base: 3063MB, range: 1MB, type UC [ 0.000000] reg 3, base: 3064MB, range: 8MB, type UC [ 0.000000] found SMP MP-table at [ffff8800000f72c0] f72c0 [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] Base memory trampoline at [ffff88000009a000] 9a000 size 20480 [ 0.000000] init_memory_mapping: 0000000000000000-00000000bf6d0000 [ 0.000000] 0000000000 - 00bf600000 page 2M [ 0.000000] 00bf600000 - 00bf6d0000 page 4k [ 0.000000] kernel direct mapping tables up to bf6d0000 @ bf6cb000-bf6d0000 [ 0.000000] RAMDISK: 359ec000 - 36cee000 [ 0.000000] Reserving 128MB of memory at 720MB for crashkernel (System RAM: 3062MB) [ 0.000000] ACPI: RSDP 00000000000f7240 00024 (v02 LENOVO) [ 0.000000] ACPI: XSDT 00000000bf6d87f0 00094 (v01 LENOVO TP-68 06040000 LTP 00000000) [ 0.000000] ACPI: FACP 00000000bf6dfbd2 000F4 (v03 TOSCPL CRESTLNE 06040000 ALAN 00000001) [ 0.000000] ACPI: DSDT 00000000bf6d9b6a 05FF4 (v02 TOSCPL CRESTLNE 06040000 INTL 20060608) [ 0.000000] ACPI: FACS 00000000bf6e2fc0 00040 [ 0.000000] ACPI: APIC 00000000bf6dfcc6 00068 (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: HPET 00000000bf6dfd2e 00038 (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: MCFG 00000000bf6dfd66 0003C (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: TCPA 00000000bf6dfda2 00032 (v01 Intel CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: TMOR 00000000bf6dfdd4 00026 (v01 PTLTD 06040000 PTL 00000003) [ 0.000000] ACPI: SLIC 00000000bf6dfdfa 00176 (v01 LENOVO TP-68 06040000 TBD 00000001) [ 0.000000] ACPI: APIC 00000000bf6dff70 00068 (v01 PTLTD ? APIC 06040000 LTP 00000000) [ 0.000000] ACPI: BOOT 00000000bf6dffd8 00028 (v01 PTLTD $SBFTBL$ 06040000 LTP 00000001) [ 0.000000] ACPI: SSDT 00000000bf6d98bd 002AD (v01 SataRe SataAhci 00001000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d981a 000A3 (v01 BrtRef DD01BRT 00001000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8e10 0025F (v01 PmRef Cpu0Tst 00003000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8d6a 000A6 (v01 PmRef Cpu1Tst 00003000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8884 004E6 (v01 PmRef CpuPm 00003000 INTL 20050624) [ 0.000000] ACPI: BIOS bug: multiple APIC/MADT found, using 0 [ 0.000000] ACPI: If "acpi_apic_instance=2" works better, notify linux-acpi@vger.kernel.org [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-00000000bf6d0000 [ 0.000000] Initmem setup node 0 0000000000000000-00000000bf6d0000 [ 0.000000] NODE_DATA [00000000bf6c6000 - 00000000bf6cafff] [ 0.000000] [ffffea0000000000-ffffea00029fffff] PMD -> [ffff8800bbe00000-ffff8800be7fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal empty [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x000bf6d0 [ 0.000000] On node 0 totalpages: 783967 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 5 pages reserved [ 0.000000] DMA zone: 3922 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 10664 pages used for memmap [ 0.000000] DMA32 zone: 769320 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x1008 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000d2000 [ 0.000000] PM: Registered nosave memory: 00000000000d2000 - 00000000000d4000 [ 0.000000] PM: Registered nosave memory: 00000000000d4000 - 00000000000dc000 [ 0.000000] PM: Registered nosave memory: 00000000000dc000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:20000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:256 nr_cpumask_bits:256 nr_cpu_ids:2 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 27 pages/cpu @ffff8800bf400000 s79616 r8192 d22784 u1048576 [ 0.000000] pcpu-alloc: s79616 r8192 d22784 u1048576 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 773242 [ 0.000000] Policy zone: DMA32 [ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-3.0.0-12-generic root=UUID=08ed6ce0-0907-4d06-b1e1-b9c3ec647fe2 ro crashkernel=384M-2G:64M,2G-:128M quiet splash vt.handoff=7 [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Memory: 2928536k/3136320k available (6104k kernel code, 452k absent, 207332k reserved, 4880k data, 984k init) [ 0.000000] SLUB: Genslabs=15, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] NR_IRQS:16640 nr_irqs:512 16 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] vt handoff: transparent VT on vt#7 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 25165824 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1496.217 MHz processor. [ 0.004006] Calibrating delay loop (skipped), value calculated using timer frequency.. 2992.43 BogoMIPS (lpj=5984868) [ 0.004013] pid_max: default: 32768 minimum: 301 [ 0.004056] Security Framework initialized [ 0.004080] AppArmor: AppArmor initialized [ 0.004083] Yama: becoming mindful. [ 0.004759] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.010636] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.012341] Mount-cache hash table entries: 256 [ 0.012557] Initializing cgroup subsys cpuacct [ 0.012565] Initializing cgroup subsys memory [ 0.012580] Initializing cgroup subsys devices [ 0.012583] Initializing cgroup subsys freezer [ 0.012586] Initializing cgroup subsys net_cls [ 0.012589] Initializing cgroup subsys blkio [ 0.012598] Initializing cgroup subsys perf_event [ 0.012643] CPU: Physical Processor ID: 0 [ 0.012645] CPU: Processor Core ID: 0 [ 0.012649] mce: CPU supports 6 MCE banks [ 0.012661] CPU0: Thermal monitoring handled by SMI [ 0.012667] using mwait in idle threads. [ 0.016288] ACPI: Core revision 20110413 [ 0.024040] ftrace: allocating 25651 entries in 101 pages [ 0.028444] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.071627] CPU0: Intel(R) Core(TM)2 Duo CPU T5250 @ 1.50GHz stepping 0d [ 0.072003] Performance Events: PEBS fmt0+, Core2 events, Intel PMU driver. [ 0.072003] PEBS disabled due to CPU errata. [ 0.072003] ... version: 2 [ 0.072003] ... bit width: 40 [ 0.072003] ... generic registers: 2 [ 0.072003] ... value mask: 000000ffffffffff [ 0.072003] ... max period: 000000007fffffff [ 0.072003] ... fixed-purpose events: 3 [ 0.072003] ... event mask: 0000000700000003 [ 0.072003] Booting Node 0, Processors #1 Ok. [ 0.072003] smpboot cpu 1: start_ip = 9a000 [ 0.008000] CPU1: Thermal monitoring handled by SMI [ 0.160029] Brought up 2 CPUs [ 0.160033] Total of 2 processors activated (5984.88 BogoMIPS). [ 0.161224] devtmpfs: initialized [ 0.161224] PM: Registering ACPI NVS region at bf6d0000 (77824 bytes) [ 0.162075] print_constraints: dummy: [ 0.162115] Time: 7:34:42 Date: 10/05/11 [ 0.162171] NET: Registered protocol family 16 [ 0.162209] Trying to unpack rootfs image as initramfs... [ 0.164047] ACPI: bus type pci registered [ 0.164133] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.164138] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.220043] PCI: Using configuration type 1 for base access [ 0.221379] bio: create slab at 0 [ 0.223506] ACPI: EC: Look up EC in DSDT [ 0.228089] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query ignored [ 0.229039] ACPI: SSDT 00000000bf6d959e 001B4 (v01 PmRef Cpu0Ist 00003000 INTL 20050624) [ 0.229543] ACPI: Dynamic OEM Table Load: [ 0.229548] ACPI: SSDT (null) 001B4 (v01 PmRef Cpu0Ist 00003000 INTL 20050624) [ 0.229696] ACPI: SSDT 00000000bf6d906f 004AA (v01 PmRef Cpu0Cst 00003001 INTL 20050624) [ 0.230165] ACPI: Dynamic OEM Table Load: [ 0.230169] ACPI: SSDT (null) 004AA (v01 PmRef Cpu0Cst 00003001 INTL 20050624) [ 0.230454] ACPI: SSDT 00000000bf6d9752 000C8 (v01 PmRef Cpu1Ist 00003000 INTL 20050624) [ 0.232427] ACPI: Dynamic OEM Table Load: [ 0.232432] ACPI: SSDT (null) 000C8 (v01 PmRef Cpu1Ist 00003000 INTL 20050624) [ 0.232541] ACPI: SSDT 00000000bf6d9519 00085 (v01 PmRef Cpu1Cst 00003000 INTL 20050624) [ 0.233011] ACPI: Dynamic OEM Table Load: [ 0.233015] ACPI: SSDT (null) 00085 (v01 PmRef Cpu1Cst 00003000 INTL 20050624) [ 0.238295] ACPI: EC: GPE storm detected, transactions will use polling mode [ 0.344070] ACPI: Interpreter enabled [ 0.344078] ACPI: (supports S0 S3 S4 S5) [ 0.344118] ACPI: Using IOAPIC for interrupt routing [ 0.389051] ACPI: EC: GPE = 0x1c, I/O: command/status = 0x66, data = 0x62 [ 0.389294] ACPI: No dock devices found. [ 0.389298] HEST: Table not found. [ 0.389303] PCI: Ignoring host bridge windows from ACPI; if necessary, use "pci=use_crs" and report a bug [ 0.389762] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.390623] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] (ignored) [ 0.390628] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] (ignored) [ 0.390632] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] (ignored) [ 0.390636] pci_root PNP0A08:00: host bridge window [mem 0x000d4000-0x000d7fff] (ignored) [ 0.390640] pci_root PNP0A08:00: host bridge window [mem 0x000d8000-0x000dbfff] (ignored) [ 0.390645] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xdfffffff] (ignored) [ 0.390648] pci_root PNP0A08:00: host bridge window [mem 0xf0000000-0xfebfffff] (ignored) [ 0.390665] pci 0000:00:00.0: [8086:2a00] type 0 class 0x000600 [ 0.390726] pci 0000:00:02.0: [8086:2a02] type 0 class 0x000300 [ 0.390746] pci 0000:00:02.0: reg 10: [mem 0xfc000000-0xfc0fffff 64bit] [ 0.390758] pci 0000:00:02.0: reg 18: [mem 0xd0000000-0xdfffffff 64bit pref] [ 0.390767] pci 0000:00:02.0: reg 20: [io 0x1800-0x1807] [ 0.390812] pci 0000:00:02.1: [8086:2a03] type 0 class 0x000380 [ 0.390829] pci 0000:00:02.1: reg 10: [mem 0xfc100000-0xfc1fffff 64bit] [ 0.390937] pci 0000:00:1a.0: [8086:2834] type 0 class 0x000c03 [ 0.391013] pci 0000:00:1a.0: reg 20: [io 0x1820-0x183f] [ 0.391065] pci 0000:00:1a.1: [8086:2835] type 0 class 0x000c03 [ 0.391126] pci 0000:00:1a.1: reg 20: [io 0x1840-0x185f] [ 0.391187] pci 0000:00:1a.7: [8086:283a] type 0 class 0x000c03 [ 0.391216] pci 0000:00:1a.7: reg 10: [mem 0xfc504800-0xfc504bff] [ 0.391321] pci 0000:00:1a.7: PME# supported from D0 D3hot D3cold [ 0.391328] pci 0000:00:1a.7: PME# disabled [ 0.391362] pci 0000:00:1b.0: [8086:284b] type 0 class 0x000403 [ 0.391386] pci 0000:00:1b.0: reg 10: [mem 0xfc300000-0xfc303fff 64bit] [ 0.391473] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.391479] pci 0000:00:1b.0: PME# disabled [ 0.391514] pci 0000:00:1c.0: [8086:283f] type 1 class 0x000604 [ 0.391605] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.391611] pci 0000:00:1c.0: PME# disabled [ 0.391647] pci 0000:00:1c.1: [8086:2841] type 1 class 0x000604 [ 0.391735] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 0.391741] pci 0000:00:1c.1: PME# disabled [ 0.391775] pci 0000:00:1c.2: [8086:2843] type 1 class 0x000604 [ 0.391868] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 0.391874] pci 0000:00:1c.2: PME# disabled [ 0.391911] pci 0000:00:1c.3: [8086:2845] type 1 class 0x000604 [ 0.391999] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold [ 0.392005] pci 0000:00:1c.3: PME# disabled [ 0.392053] pci 0000:00:1d.0: [8086:2830] type 0 class 0x000c03 [ 0.392114] pci 0000:00:1d.0: reg 20: [io 0x1860-0x187f] [ 0.392162] pci 0000:00:1d.1: [8086:2831] type 0 class 0x000c03 [ 0.392238] pci 0000:00:1d.1: reg 20: [io 0x1880-0x189f] [ 0.392293] pci 0000:00:1d.2: [8086:2832] type 0 class 0x000c03 [ 0.392371] pci 0000:00:1d.2: reg 20: [io 0x18a0-0x18bf] [ 0.392438] pci 0000:00:1d.7: [8086:2836] type 0 class 0x000c03 [ 0.392466] pci 0000:00:1d.7: reg 10: [mem 0xfc504c00-0xfc504fff] [ 0.392567] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.392573] pci 0000:00:1d.7: PME# disabled [ 0.392603] pci 0000:00:1e.0: [8086:2448] type 1 class 0x000604 [ 0.392698] pci 0000:00:1f.0: [8086:2815] type 0 class 0x000601 [ 0.392816] pci 0000:00:1f.0: quirk: [io 0x1000-0x107f] claimed by ICH6 ACPI/GPIO/TCO [ 0.392824] pci 0000:00:1f.0: quirk: [io 0x1180-0x11bf] claimed by ICH6 GPIO [ 0.392829] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 1 PIO at 0680 (mask 007f) [ 0.392835] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 2 PIO at 1640 (mask 000f) [ 0.392884] pci 0000:00:1f.1: [8086:2850] type 0 class 0x000101 [ 0.392903] pci 0000:00:1f.1: reg 10: [io 0x0000-0x0007] [ 0.392918] pci 0000:00:1f.1: reg 14: [io 0x0000-0x0003] [ 0.392931] pci 0000:00:1f.1: reg 18: [io 0x0000-0x0007] [ 0.392944] pci 0000:00:1f.1: reg 1c: [io 0x0000-0x0003] [ 0.392958] pci 0000:00:1f.1: reg 20: [io 0x1810-0x181f] [ 0.393014] pci 0000:00:1f.2: [8086:2829] type 0 class 0x000106 [ 0.393042] pci 0000:00:1f.2: reg 10: [io 0x1c00-0x1c07] [ 0.393056] pci 0000:00:1f.2: reg 14: [io 0x18d4-0x18d7] [ 0.393069] pci 0000:00:1f.2: reg 18: [io 0x18d8-0x18df] [ 0.393082] pci 0000:00:1f.2: reg 1c: [io 0x18d0-0x18d3] [ 0.393095] pci 0000:00:1f.2: reg 20: [io 0x18e0-0x18ff] [ 0.393108] pci 0000:00:1f.2: reg 24: [mem 0xfc504000-0xfc5047ff] [ 0.393157] pci 0000:00:1f.2: PME# supported from D3hot [ 0.393163] pci 0000:00:1f.2: PME# disabled [ 0.393188] pci 0000:00:1f.3: [8086:283e] type 0 class 0x000c05 [ 0.393206] pci 0000:00:1f.3: reg 10: [mem 0x00000000-0x000000ff] [ 0.393250] pci 0000:00:1f.3: reg 20: [io 0x1c20-0x1c3f] [ 0.393354] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.393360] pci 0000:00:1c.0: bridge window [io 0x2000-0x2fff] [ 0.393367] pci 0000:00:1c.0: bridge window [mem 0xf6000000-0xf7ffffff] [ 0.393376] pci 0000:00:1c.0: bridge window [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.393501] pci 0000:04:00.0: [8086:4227] type 0 class 0x000280 [ 0.393557] pci 0000:04:00.0: reg 10: [mem 0xf8000000-0xf8000fff] [ 0.393895] pci 0000:04:00.0: PME# supported from D0 D3hot D3cold [ 0.393908] pci 0000:04:00.0: PME# disabled [ 0.393979] pci 0000:04:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 0.394021] pci 0000:00:1c.1: PCI bridge to [bus 04-04] [ 0.394027] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.394033] pci 0000:00:1c.1: bridge window [mem 0xf8000000-0xf9ffffff] [ 0.394043] pci 0000:00:1c.1: bridge window [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.394110] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 0.394116] pci 0000:00:1c.2: bridge window [io 0x4000-0x4fff] [ 0.394122] pci 0000:00:1c.2: bridge window [mem 0xfa000000-0xfbffffff] [ 0.394132] pci 0000:00:1c.2: bridge window [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.394268] pci 0000:06:00.0: [14e4:1713] type 0 class 0x000200 [ 0.394336] pci 0000:06:00.0: reg 10: [mem 0xc8000000-0xc800ffff 64bit] [ 0.394639] pci 0000:06:00.0: PME# supported from D3hot D3cold [ 0.394651] pci 0000:06:00.0: PME# disabled [ 0.394783] pci 0000:00:1c.3: PCI bridge to [bus 06-06] [ 0.394789] pci 0000:00:1c.3: bridge window [io 0x5000-0x5fff] [ 0.394796] pci 0000:00:1c.3: bridge window [mem 0xc8000000-0xc9ffffff] [ 0.394806] pci 0000:00:1c.3: bridge window [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.394868] pci 0000:08:06.0: [1180:0832] type 0 class 0x000c00 [ 0.394886] pci 0000:08:06.0: proprietary Ricoh MMC controller disabled (via firewire function) [ 0.394890] pci 0000:08:06.0: MMC cards are now supported by standard SDHCI controller [ 0.394909] pci 0000:08:06.0: reg 10: [mem 0xfc200000-0xfc2007ff] [ 0.395006] pci 0000:08:06.0: supports D1 D2 [ 0.395009] pci 0000:08:06.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395016] pci 0000:08:06.0: PME# disabled [ 0.395045] pci 0000:08:06.1: [1180:0822] type 0 class 0x000805 [ 0.395069] pci 0000:08:06.1: reg 10: [mem 0xfc200800-0xfc2008ff] [ 0.395165] pci 0000:08:06.1: supports D1 D2 [ 0.395168] pci 0000:08:06.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395174] pci 0000:08:06.1: PME# disabled [ 0.395199] pci 0000:08:06.2: [1180:0592] type 0 class 0x000880 [ 0.395224] pci 0000:08:06.2: reg 10: [mem 0xfc201000-0xfc2010ff] [ 0.395317] pci 0000:08:06.2: supports D1 D2 [ 0.395320] pci 0000:08:06.2: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395326] pci 0000:08:06.2: PME# disabled [ 0.395350] pci 0000:08:06.3: [1180:0852] type 0 class 0x000880 [ 0.395376] pci 0000:08:06.3: reg 10: [mem 0xfc201400-0xfc2014ff] [ 0.395474] pci 0000:08:06.3: supports D1 D2 [ 0.395477] pci 0000:08:06.3: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395484] pci 0000:08:06.3: PME# disabled [ 0.395549] pci 0000:00:1e.0: PCI bridge to [bus 08-08] (subtractive decode) [ 0.395556] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.395562] pci 0000:00:1e.0: bridge window [mem 0xfc200000-0xfc2fffff] [ 0.395572] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.395576] pci 0000:00:1e.0: bridge window [io 0x0000-0xffff] (subtractive decode) [ 0.395580] pci 0000:00:1e.0: bridge window [mem 0x00000000-0xfffffffff] (subtractive decode) [ 0.395619] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.395828] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP01._PRT] [ 0.395887] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP02._PRT] [ 0.395944] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP03._PRT] [ 0.395999] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP04._PRT] [ 0.396116] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCIB._PRT] [ 0.396176] pci0000:00: Requesting ACPI _OSC control (0x1d) [ 0.396181] pci0000:00: ACPI _OSC request failed (AE_NOT_FOUND), returned control mask: 0x1d [ 0.396184] ACPI _OSC control for PCIe not granted, disabling ASPM [ 0.404002] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 *5 6 7 10 12 14 15) [ 0.404086] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404153] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 *7 10 12 14 15) [ 0.404217] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404282] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled. [ 0.404353] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404419] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 7 10 12 14 15) *11 [ 0.404484] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 5 6 7 *11 12 14 15) [ 0.404647] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 0.404670] vgaarb: loaded [ 0.404672] vgaarb: bridge control possible 0000:00:02.0 [ 0.404971] SCSI subsystem initialized [ 0.405069] libata version 3.00 loaded. [ 0.405143] usbcore: registered new interface driver usbfs [ 0.405158] usbcore: registered new interface driver hub [ 0.405200] usbcore: registered new device driver usb [ 0.405322] PCI: Using ACPI for IRQ routing [ 0.416330] PCI: pci_cache_line_size set to 64 bytes [ 0.416509] reserve RAM buffer: 000000000009f800 - 000000000009ffff [ 0.416513] reserve RAM buffer: 00000000bf6d0000 - 00000000bfffffff [ 0.416683] NetLabel: Initializing [ 0.416686] NetLabel: domain hash size = 128 [ 0.416688] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.416706] NetLabel: unlabeled traffic allowed by default [ 0.416770] HPET: 3 timers in total, 0 timers will be used for per-cpu timer [ 0.416777] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 [ 0.416784] hpet0: 3 comparators, 64-bit 14.318180 MHz counter [ 0.420524] Switching to clocksource hpet [ 0.423392] Switched to NOHz mode on CPU #0 [ 0.423487] Switched to NOHz mode on CPU #1 [ 0.430603] AppArmor: AppArmor Filesystem Enabled [ 0.430649] pnp: PnP ACPI init [ 0.430672] ACPI: bus type pnp registered [ 0.431166] pnp 00:00: [bus 00-ff] [ 0.431171] pnp 00:00: [io 0x0000-0x0cf7 window] [ 0.431174] pnp 00:00: [io 0x0cf8-0x0cff] [ 0.431177] pnp 00:00: [io 0x0d00-0xffff window] [ 0.431181] pnp 00:00: [mem 0x000a0000-0x000bffff window] [ 0.431184] pnp 00:00: [mem 0x000c0000-0x000c3fff window] [ 0.431187] pnp 00:00: [mem 0x000c4000-0x000c7fff window] [ 0.431190] pnp 00:00: [mem 0x000c8000-0x000cbfff window] [ 0.431197] pnp 00:00: [mem 0x000cc000-0x000cffff window] [ 0.431201] pnp 00:00: [mem 0x000d0000-0x000d3fff window] [ 0.431204] pnp 00:00: [mem 0x000d4000-0x000d7fff window] [ 0.431207] pnp 00:00: [mem 0x000d8000-0x000dbfff window] [ 0.431210] pnp 00:00: [mem 0x000dc000-0x000dffff window] [ 0.431213] pnp 00:00: [mem 0x000e0000-0x000e3fff window] [ 0.431216] pnp 00:00: [mem 0x000e4000-0x000e7fff window] [ 0.431219] pnp 00:00: [mem 0x000e8000-0x000ebfff window] [ 0.431222] pnp 00:00: [mem 0x000ec000-0x000effff window] [ 0.431225] pnp 00:00: [mem 0x000f0000-0x000fffff window] [ 0.431229] pnp 00:00: [mem 0xc0000000-0xdfffffff window] [ 0.431232] pnp 00:00: [mem 0xf0000000-0xfebfffff window] [ 0.431235] pnp 00:00: [mem 0xfed40000-0xfed44fff window] [ 0.431344] pnp 00:00: Plug and Play ACPI device, IDs PNP0a08 PNP0a03 (active) [ 0.431447] pnp 00:01: [mem 0xfed1c000-0xfed1ffff] [ 0.431450] pnp 00:01: [mem 0xfed14000-0xfed17fff] [ 0.431453] pnp 00:01: [mem 0xfed18000-0xfed18fff] [ 0.431456] pnp 00:01: [mem 0xfed19000-0xfed19fff] [ 0.431458] pnp 00:01: [mem 0xe0000000-0xefffffff] [ 0.431461] pnp 00:01: [mem 0xfed20000-0xfed3ffff] [ 0.431464] pnp 00:01: [mem 0xfed40000-0xfed44fff] [ 0.431467] pnp 00:01: [mem 0xfed45000-0xfed8ffff] [ 0.431559] system 00:01: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.431564] system 00:01: [mem 0xfed14000-0xfed17fff] has been reserved [ 0.431568] system 00:01: [mem 0xfed18000-0xfed18fff] has been reserved [ 0.431572] system 00:01: [mem 0xfed19000-0xfed19fff] has been reserved [ 0.431576] system 00:01: [mem 0xe0000000-0xefffffff] has been reserved [ 0.431580] system 00:01: [mem 0xfed20000-0xfed3ffff] has been reserved [ 0.431584] system 00:01: [mem 0xfed40000-0xfed44fff] has been reserved [ 0.431588] system 00:01: [mem 0xfed45000-0xfed8ffff] has been reserved [ 0.431593] system 00:01: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.431859] pnp 00:02: [io 0x0000-0x001f] [ 0.431862] pnp 00:02: [io 0x0081-0x0091] [ 0.431864] pnp 00:02: [io 0x0093-0x009f] [ 0.431867] pnp 00:02: [io 0x00c0-0x00df] [ 0.431870] pnp 00:02: [dma 4] [ 0.431931] pnp 00:02: Plug and Play ACPI device, IDs PNP0200 (active) [ 0.431946] pnp 00:03: [mem 0xff000000-0xffffffff] [ 0.432030] pnp 00:03: Plug and Play ACPI device, IDs INT0800 (active) [ 0.432131] pnp 00:04: [mem 0xfed00000-0xfed003ff] [ 0.432218] system 00:04: [mem 0xfed00000-0xfed003ff] has been reserved [ 0.432223] system 00:04: Plug and Play ACPI device, IDs PNP0103 PNP0c01 (active) [ 0.432239] pnp 00:05: [io 0x00f0] [ 0.432256] pnp 00:05: [irq 13] [ 0.432321] pnp 00:05: Plug and Play ACPI device, IDs PNP0c04 (active) [ 0.432337] pnp 00:06: [io 0x002e-0x002f] [ 0.432340] pnp 00:06: [io 0x004e-0x004f] [ 0.432343] pnp 00:06: [io 0x0061] [ 0.432345] pnp 00:06: [io 0x0063] [ 0.432348] pnp 00:06: [io 0x0065] [ 0.432351] pnp 00:06: [io 0x0067] [ 0.432353] pnp 00:06: [io 0x0080] [ 0.432355] pnp 00:06: [io 0x0092] [ 0.432358] pnp 00:06: [io 0x00b2-0x00b3] [ 0.432361] pnp 00:06: [io 0x0680-0x069f] [ 0.432363] pnp 00:06: [io 0x0800-0x080f] [ 0.432366] pnp 00:06: [io 0x1000-0x107f] [ 0.432373] pnp 00:06: [io 0x1180-0x11bf] [ 0.432375] pnp 00:06: [io 0xfe00] [ 0.432378] pnp 00:06: [io 0xff00-0xff7f] [ 0.432479] system 00:06: [io 0x0680-0x069f] has been reserved [ 0.432484] system 00:06: [io 0x0800-0x080f] has been reserved [ 0.432487] system 00:06: [io 0x1000-0x107f] has been reserved [ 0.432491] system 00:06: [io 0x1180-0x11bf] has been reserved [ 0.432495] system 00:06: [io 0xfe00] has been reserved [ 0.432499] system 00:06: [io 0xff00-0xff7f] has been reserved [ 0.432504] system 00:06: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.432517] pnp 00:07: [io 0x0070-0x0077] [ 0.432525] pnp 00:07: [irq 8] [ 0.432587] pnp 00:07: Plug and Play ACPI device, IDs PNP0b00 (active) [ 0.452092] pnp 00:08: [io 0x0060] [ 0.452096] pnp 00:08: [io 0x0064] [ 0.452112] pnp 00:08: [irq 1] [ 0.452226] pnp 00:08: Plug and Play ACPI device, IDs PNP0303 (active) [ 0.452246] pnp 00:09: [irq 12] [ 0.452305] pnp 00:09: Plug and Play ACPI device, IDs PNP0f13 (active) [ 0.452340] pnp: PnP ACPI: found 10 devices [ 0.452343] ACPI: ACPI bus type pnp unregistered [ 0.459104] PCI: max bus depth: 1 pci_try_num: 2 [ 0.459195] pci 0000:00:1f.3: BAR 0: assigned [mem 0xc0000000-0xc00000ff] [ 0.459204] pci 0000:00:1f.3: BAR 0: set to [mem 0xc0000000-0xc00000ff] (PCI address [0xc0000000-0xc00000ff]) [ 0.459209] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.459214] pci 0000:00:1c.0: bridge window [io 0x2000-0x2fff] [ 0.459222] pci 0000:00:1c.0: bridge window [mem 0xf6000000-0xf7ffffff] [ 0.459229] pci 0000:00:1c.0: bridge window [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.459239] pci 0000:00:1c.1: PCI bridge to [bus 04-04] [ 0.459244] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.459252] pci 0000:00:1c.1: bridge window [mem 0xf8000000-0xf9ffffff] [ 0.459259] pci 0000:00:1c.1: bridge window [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.459268] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 0.459272] pci 0000:00:1c.2: bridge window [io 0x4000-0x4fff] [ 0.459280] pci 0000:00:1c.2: bridge window [mem 0xfa000000-0xfbffffff] [ 0.459287] pci 0000:00:1c.2: bridge window [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.459296] pci 0000:00:1c.3: PCI bridge to [bus 06-06] [ 0.459301] pci 0000:00:1c.3: bridge window [io 0x5000-0x5fff] [ 0.459308] pci 0000:00:1c.3: bridge window [mem 0xc8000000-0xc9ffffff] [ 0.459314] pci 0000:00:1c.3: bridge window [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.459324] pci 0000:00:1e.0: PCI bridge to [bus 08-08] [ 0.459327] pci 0000:00:1e.0: bridge window [io disabled] [ 0.459334] pci 0000:00:1e.0: bridge window [mem 0xfc200000-0xfc2fffff] [ 0.459340] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.459373] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 0.459380] pci 0000:00:1c.0: setting latency timer to 64 [ 0.459399] pci 0000:00:1c.1: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 0.459405] pci 0000:00:1c.1: setting latency timer to 64 [ 0.459419] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.459425] pci 0000:00:1c.2: setting latency timer to 64 [ 0.459438] pci 0000:00:1c.3: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 0.459444] pci 0000:00:1c.3: setting latency timer to 64 [ 0.459455] pci 0000:00:1e.0: setting latency timer to 64 [ 0.459460] pci_bus 0000:00: resource 0 [io 0x0000-0xffff] [ 0.459464] pci_bus 0000:00: resource 1 [mem 0x00000000-0xfffffffff] [ 0.459467] pci_bus 0000:02: resource 0 [io 0x2000-0x2fff] [ 0.459470] pci_bus 0000:02: resource 1 [mem 0xf6000000-0xf7ffffff] [ 0.459474] pci_bus 0000:02: resource 2 [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.459478] pci_bus 0000:04: resource 0 [io 0x3000-0x3fff] [ 0.459481] pci_bus 0000:04: resource 1 [mem 0xf8000000-0xf9ffffff] [ 0.459484] pci_bus 0000:04: resource 2 [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.459488] pci_bus 0000:05: resource 0 [io 0x4000-0x4fff] [ 0.459491] pci_bus 0000:05: resource 1 [mem 0xfa000000-0xfbffffff] [ 0.459495] pci_bus 0000:05: resource 2 [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.459498] pci_bus 0000:06: resource 0 [io 0x5000-0x5fff] [ 0.459501] pci_bus 0000:06: resource 1 [mem 0xc8000000-0xc9ffffff] [ 0.459505] pci_bus 0000:06: resource 2 [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.459508] pci_bus 0000:08: resource 1 [mem 0xfc200000-0xfc2fffff] [ 0.459512] pci_bus 0000:08: resource 4 [io 0x0000-0xffff] [ 0.459515] pci_bus 0000:08: resource 5 [mem 0x00000000-0xfffffffff] [ 0.459580] NET: Registered protocol family 2 [ 0.459816] IP route cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.461759] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 0.468207] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 0.469024] TCP: Hash tables configured (established 524288 bind 65536) [ 0.469028] TCP reno registered [ 0.469052] UDP hash table entries: 2048 (order: 4, 65536 bytes) [ 0.469120] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) [ 0.469325] NET: Registered protocol family 1 [ 0.469358] pci 0000:00:02.0: Boot video device [ 0.469577] PCI: CLS 64 bytes, default 64 [ 0.469604] Simple Boot Flag at 0x36 set to 0x1 [ 0.470069] audit: initializing netlink socket (disabled) [ 0.470088] type=2000 audit(1317800082.464:1): initialized [ 0.509918] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.531362] VFS: Disk quotas dquot_6.5.2 [ 0.531454] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.532343] fuse init (API version 7.16) [ 0.532465] msgmni has been set to 5719 [ 0.532931] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.532975] io scheduler noop registered [ 0.532978] io scheduler deadline registered [ 0.533033] io scheduler cfq registered (default) [ 0.533206] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.533281] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 0.533378] pcieport 0000:00:1c.1: setting latency timer to 64 [ 0.533444] pcieport 0000:00:1c.1: irq 41 for MSI/MSI-X [ 0.533540] pcieport 0000:00:1c.2: setting latency timer to 64 [ 0.533607] pcieport 0000:00:1c.2: irq 42 for MSI/MSI-X [ 0.533705] pcieport 0000:00:1c.3: setting latency timer to 64 [ 0.533770] pcieport 0000:00:1c.3: irq 43 for MSI/MSI-X [ 0.533898] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.533934] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.533994] intel_idle: MWAIT substates: 0x22220 [ 0.533997] intel_idle: does not run on family 6 model 15 [ 0.534105] ACPI: Deprecated procfs I/F for AC is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared [ 0.534186] ACPI: AC Adapter [ACAD] (on-line) [ 0.534267] input: Lid Switch as /devices/LNXSYSTM:00/device:00/PNP0C0D:00/input/input0 [ 0.534291] ACPI: Lid Switch [LID0] [ 0.534348] input: Power Button as /devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input1 [ 0.534353] ACPI: Power Button [PWRB] [ 0.534429] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2 [ 0.534434] ACPI: Power Button [PWRF] [ 0.534479] ACPI: acpi_idle registered with cpuidle [ 0.536970] Monitor-Mwait will be used to enter C-1 state [ 0.537024] Monitor-Mwait will be used to enter C-2 state [ 0.537059] Monitor-Mwait will be used to enter C-3 state [ 0.537066] Marking TSC unstable due to TSC halts in idle [ 0.576306] ACPI: Deprecated procfs I/F for battery is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared [ 0.576339] ERST: Table is not found! [ 0.576477] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled [ 0.596514] ACPI: Battery Slot [BAT1] (battery present) [ 0.756873] Freeing initrd memory: 19464k freed [ 0.789948] Linux agpgart interface v0.103 [ 0.790084] agpgart-intel 0000:00:00.0: Intel 965GM Chipset [ 0.790242] agpgart-intel 0000:00:00.0: detected gtt size: 524288K total, 262144K mappable [ 0.791097] agpgart-intel 0000:00:00.0: detected 8192K stolen memory [ 0.791250] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xd0000000 [ 0.792794] brd: module loaded [ 0.793486] loop: module loaded [ 0.793683] ata_piix 0000:00:1f.1: version 2.13 [ 0.793701] ata_piix 0000:00:1f.1: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 0.793746] ata_piix 0000:00:1f.1: setting latency timer to 64 [ 0.794143] scsi0 : ata_piix [ 0.794282] scsi1 : ata_piix [ 0.794784] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0x1810 irq 14 [ 0.794789] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x1818 irq 15 [ 0.795227] Fixed MDIO Bus: probed [ 0.795261] PPP generic driver version 2.4.2 [ 0.795315] tun: Universal TUN/TAP device driver, 1.6 [ 0.795318] tun: (C) 1999-2004 Max Krasnyansky [ 0.795429] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.795451] ehci_hcd 0000:00:1a.7: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.795472] ehci_hcd 0000:00:1a.7: setting latency timer to 64 [ 0.795477] ehci_hcd 0000:00:1a.7: EHCI Host Controller [ 0.795524] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 1 [ 0.795567] ehci_hcd 0000:00:1a.7: debug port 1 [ 0.799463] ehci_hcd 0000:00:1a.7: cache line size of 64 is not supported [ 0.799485] ehci_hcd 0000:00:1a.7: irq 18, io mem 0xfc504800 [ 0.812020] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00 [ 0.812182] hub 1-0:1.0: USB hub found [ 0.812189] hub 1-0:1.0: 4 ports detected [ 0.812291] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.812305] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 0.812310] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 0.812363] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 2 [ 0.812398] ehci_hcd 0000:00:1d.7: debug port 1 [ 0.816279] ehci_hcd 0000:00:1d.7: cache line size of 64 is not supported [ 0.816301] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xfc504c00 [ 0.832023] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 0.832151] hub 2-0:1.0: USB hub found [ 0.832157] hub 2-0:1.0: 6 ports detected [ 0.832258] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.832276] uhci_hcd: USB Universal Host Controller Interface driver [ 0.832305] uhci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.832314] uhci_hcd 0000:00:1a.0: setting latency timer to 64 [ 0.832319] uhci_hcd 0000:00:1a.0: UHCI Host Controller [ 0.832366] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 3 [ 0.832412] uhci_hcd 0000:00:1a.0: irq 16, io base 0x00001820 [ 0.832569] hub 3-0:1.0: USB hub found [ 0.832575] hub 3-0:1.0: 2 ports detected [ 0.832668] uhci_hcd 0000:00:1a.1: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 0.832679] uhci_hcd 0000:00:1a.1: setting latency timer to 64 [ 0.832684] uhci_hcd 0000:00:1a.1: UHCI Host Controller [ 0.832731] uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 4 [ 0.832775] uhci_hcd 0000:00:1a.1: irq 21, io base 0x00001840 [ 0.832936] hub 4-0:1.0: USB hub found [ 0.832941] hub 4-0:1.0: 2 ports detected [ 0.833028] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.833037] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 0.833042] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 0.833099] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 5 [ 0.833134] uhci_hcd 0000:00:1d.0: irq 23, io base 0x00001860 [ 0.833291] hub 5-0:1.0: USB hub found [ 0.833296] hub 5-0:1.0: 2 ports detected [ 0.833384] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.833392] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 0.833397] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 0.833448] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 6 [ 0.833493] uhci_hcd 0000:00:1d.1: irq 19, io base 0x00001880 [ 0.833649] hub 6-0:1.0: USB hub found [ 0.833655] hub 6-0:1.0: 2 ports detected [ 0.833737] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.833746] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 0.833750] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 0.833797] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 7 [ 0.833832] uhci_hcd 0000:00:1d.2: irq 18, io base 0x000018a0 [ 0.833984] hub 7-0:1.0: USB hub found [ 0.833990] hub 7-0:1.0: 2 ports detected [ 0.834133] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 0.858635] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.858644] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.858792] mousedev: PS/2 mouse device common for all mice [ 0.860515] rtc_cmos 00:07: RTC can wake from S4 [ 0.860650] rtc_cmos 00:07: rtc core: registered rtc_cmos as rtc0 [ 0.860686] rtc0: alarms up to one month, y3k, 242 bytes nvram, hpet irqs [ 0.860821] device-mapper: uevent: version 1.0.3 [ 0.860928] device-mapper: ioctl: 4.20.0-ioctl (2011-02-02) initialised: dm-devel@redhat.com [ 0.861015] cpuidle: using governor ladder [ 0.861137] cpuidle: using governor menu [ 0.861140] EFI Variables Facility v0.08 2004-May-17 [ 0.861497] TCP cubic registered [ 0.861666] NET: Registered protocol family 10 [ 0.862339] NET: Registered protocol family 17 [ 0.862362] Registering the dns_resolver key type [ 0.862505] PM: Hibernation image not present or could not be loaded. [ 0.862521] registered taskstats version 1 [ 0.881709] Magic number: 15:169:571 [ 0.881852] rtc_cmos 00:07: setting system clock to 2011-10-05 07:34:43 UTC (1317800083) [ 0.882695] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.882699] EDD information not available. [ 0.885384] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3 [ 0.964510] ata1.00: ATAPI: MATSHITADVD-RAM UJ-850 z, RB32, max UDMA/33 [ 0.980374] ata1.00: configured for UDMA/33 [ 0.983110] scsi 0:0:0:0: CD-ROM MATSHITA DVD-RAM UJ-850 z RB32 PQ: 0 ANSI: 5 [ 0.985684] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 0.985690] cdrom: Uniform CD-ROM driver Revision: 3.20 [ 0.985886] sr 0:0:0:0: Attached scsi CD-ROM sr0 [ 0.985957] sr 0:0:0:0: Attached scsi generic sg0 type 5 [ 0.988684] Freeing unused kernel memory: 984k freed [ 0.989019] Write protecting the kernel read-only data: 10240k [ 0.989354] Freeing unused kernel memory: 20k freed [ 0.996526] Freeing unused kernel memory: 1400k freed [ 1.023090] udevd[92]: starting version 173 [ 1.095474] [drm] Initialized drm 1.1.0 20060810 [ 1.111223] tg3.c:v3.119 (May 18, 2011) [ 1.111255] tg3 0000:06:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 1.111275] tg3 0000:06:00.0: setting latency timer to 64 [ 1.123354] wmi: Mapper loaded [ 1.135292] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.135301] i915 0000:00:02.0: setting latency timer to 64 [ 1.229432] i915 0000:00:02.0: irq 44 for MSI/MSI-X [ 1.229442] [drm] Supports vblank timestamp caching Rev 1 (10.10.2010). [ 1.229444] [drm] Driver supports precise vblank timestamp query. [ 1.229504] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=io+mem,decodes=io+mem:owns=io+mem [ 1.231431] sdhci: Secure Digital Host Controller Interface driver [ 1.231435] sdhci: Copyright(c) Pierre Ossman [ 1.231761] sdhci-pci 0000:08:06.1: SDHCI controller found [1180:0822] (rev 19) [ 1.231780] sdhci-pci 0000:08:06.1: PCI INT B -> GSI 23 (level, low) -> IRQ 23 [ 1.232804] sdhci-pci 0000:08:06.1: Will use DMA mode even though HW doesn't fully claim to support it. [ 1.251222] mmc0: no vmmc regulator found [ 1.252265] Registered led device: mmc0:: [ 1.258216] mmc0: SDHCI controller on PCI [0000:08:06.1] using DMA [ 1.278826] tg3 0000:06:00.0: eth0: Tigon3 [partno(BCM95906) rev c002] (PCI Express) MAC address 00:1b:38:0c:7f:47 [ 1.278833] tg3 0000:06:00.0: eth0: attached PHY is 5906 (10/100Base-TX Ethernet) (WireSpeed[0], EEE[0]) [ 1.278838] tg3 0000:06:00.0: eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1] [ 1.278842] tg3 0000:06:00.0: eth0: dma_rwctrl[76180000] dma_mask[64-bit] [ 1.288114] firewire_ohci 0000:08:06.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 1.288352] fixme: max PWM is zero. [ 1.321105] [drm] initialized overlay support [ 1.363095] firewire_ohci: Added fw-ohci device 0000:08:06.0, OHCI v1.10, 4 IR + 4 IT contexts, quirks 0x1 [ 1.429305] usb 1-4: new high speed USB device number 4 using ehci_hcd [ 1.510188] fbcon: inteldrmfb (fb0) is primary device [ 1.510267] Console: switching to colour frame buffer device 160x50 [ 1.510301] fb0: inteldrmfb frame buffer device [ 1.510304] drm: registered panic notifier [ 1.596139] acpi device:08: registered as cooling_device2 [ 1.596350] input: Video Bus as /devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:01/input/input4 [ 1.596428] ACPI: Video Device [GFX0] (multi-head: yes rom: no post: no) [ 1.596505] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 1.596723] ahci 0000:00:1f.2: version 3.0 [ 1.596748] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.596832] ahci 0000:00:1f.2: irq 45 for MSI/MSI-X [ 1.596928] ahci 0000:00:1f.2: AHCI 0001.0100 32 slots 3 ports 3 Gbps 0x7 impl SATA mode [ 1.596934] ahci 0000:00:1f.2: flags: 64bit ncq sntf pm led clo pio slum part ccc [ 1.596941] ahci 0000:00:1f.2: setting latency timer to 64 [ 1.600697] scsi2 : ahci [ 1.601002] scsi3 : ahci [ 1.601154] scsi4 : ahci [ 1.601328] ata3: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504100 irq 45 [ 1.601335] ata4: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504180 irq 45 [ 1.601340] ata5: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504200 irq 45 [ 1.860262] firewire_core: created device fw0: GUID 00023f7bac4040de, S400 [ 1.920122] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.921792] ata3.00: unexpected _GTF length (8) [ 1.922070] ata3.00: ATA-8: WDC WD2500BEKT-75PVMT0, 01.01A01, max UDMA/133 [ 1.922077] ata3.00: 488397168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA [ 1.923756] ata3.00: unexpected _GTF length (8) [ 1.924053] ata4: SATA link down (SStatus 0 SControl 300) [ 1.924081] ata3.00: configured for UDMA/133 [ 1.924106] ata5: SATA link down (SStatus 0 SControl 300) [ 1.924318] scsi 2:0:0:0: Direct-Access ATA WDC WD2500BEKT-7 01.0 PQ: 0 ANSI: 5 [ 1.924525] sd 2:0:0:0: Attached scsi generic sg1 type 0 [ 1.924642] sd 2:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB) [ 1.924823] sd 2:0:0:0: [sda] Write Protect is off [ 1.924828] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.924898] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.020840] sda: sda1 sda2 sda3 sda4 < sda5 > [ 2.021461] sd 2:0:0:0: [sda] Attached SCSI disk [ 2.032059] usb 3-1: new full speed USB device number 2 using uhci_hcd [ 2.464056] usb 4-1: new full speed USB device number 2 using uhci_hcd [ 2.872042] usb 6-1: new low speed USB device number 2 using uhci_hcd [ 3.093235] input: MLK Trust Mouse as /devices/pci0000:00/0000:00:1d.1/usb6/6-1/6-1:1.0/input/input5 [ 3.093727] generic-usb 0003:04FC:05DA.0001: input,hiddev0,hidraw0: USB HID v1.10 Mouse [MLK Trust Mouse] on usb-0000:00:1d.1-1/input0 [ 3.093905] usbcore: registered new interface driver usbhid [ 3.093909] usbhid: USB HID core driver [ 3.288960] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null) [ 3.308073] usb 6-2: new full speed USB device number 3 using uhci_hcd [ 3.720052] usb 7-1: new low speed USB device number 2 using uhci_hcd [ 3.918393] input: LITEON Technology USB Multimedia Keyboard as /devices/pci0000:00/0000:00:1d.2/usb7/7-1/7-1:1.0/input/input6 [ 3.918495] generic-usb 0003:046D:C312.0002: input,hidraw1: USB HID v1.10 Keyboard [LITEON Technology USB Multimedia Keyboard] on usb-0000:00:1d.2-1/input0 [ 5.565904] Adding 15999996k swap on /dev/sda3. Priority:-1 extents:1 across:15999996k [ 5.691364] udevd[373]: starting version 173 [ 6.303871] lp: driver loaded but no devices found [ 7.040655] cfg80211: Calling CRDA to update world regulatory domain [ 7.159284] r852 0000:08:06.3: PCI INT B -> GSI 23 (level, low) -> IRQ 23 [ 7.159297] r852 0000:08:06.3: setting latency timer to 64 [ 7.159394] r852: Non dma capable device detected, dma disabled [ 7.159411] r852: driver loaded successfully [ 7.169632] iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, in-tree:s [ 7.169637] iwl3945: Copyright(c) 2003-2011 Intel Corporation [ 7.169734] iwl3945 0000:04:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 7.169751] iwl3945 0000:04:00.0: setting latency timer to 64 [ 7.225063] iwl3945 0000:04:00.0: Tunable channels: 13 802.11bg, 23 802.11a channels [ 7.225067] iwl3945 0000:04:00.0: Detected Intel Wireless WiFi Link 3945ABG [ 7.225225] iwl3945 0000:04:00.0: irq 46 for MSI/MSI-X [ 7.225470] Registered led device: phy0-led [ 7.225511] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 7.521071] ieee80211 phy0: Selected rate control algorithm 'iwl-3945-rs' [ 7.728682] udevd[389]: renamed network interface eth0 to eth1 [ 7.785421] udevd[392]: renamed network interface wlan0 to wlan1 [ 7.839555] device-mapper: multipath: version 1.3.0 loaded [ 7.920206] Synaptics Touchpad, model: 1, fw: 6.3, id: 0x25c0b1, caps: 0xa04713/0x200000/0x0 [ 8.001393] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input7 [ 8.103705] Linux video capture interface: v2.00 [ 8.142601] uvcvideo: Found UVC 1.00 device USB 2.0 Camera (04f2:b013) [ 8.145395] input: USB 2.0 Camera as /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/input/input8 [ 8.145503] usbcore: registered new interface driver uvcvideo [ 8.145506] USB Video Class driver (v1.1.0) [ 8.268868] gspca: v2.13.0 registered [ 8.426860] Bluetooth: Core ver 2.16 [ 8.426898] NET: Registered protocol family 31 [ 8.426901] Bluetooth: HCI device and connection manager initialized [ 8.426905] Bluetooth: HCI socket layer initialized [ 8.426908] Bluetooth: L2CAP socket layer initialized [ 8.426983] Bluetooth: SCO socket layer initialized [ 8.445120] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 8.445873] usbcore: registered new interface driver btusb [ 8.596127] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 8.596132] cfg80211: World regulatory domain updated: [ 8.596135] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 8.596139] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.596144] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 8.596147] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 8.596151] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.596155] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.713241] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 8.713332] HDA Intel 0000:00:1b.0: irq 47 for MSI/MSI-X [ 8.713375] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 9.214524] type=1400 audit(1317800091.827:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient" pid=762 comm="apparmor_parser" [ 9.214539] type=1400 audit(1317800091.827:3): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=760 comm="apparmor_parser" [ 9.214899] type=1400 audit(1317800091.827:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=762 comm="apparmor_parser" [ 9.214917] type=1400 audit(1317800091.827:5): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=760 comm="apparmor_parser" [ 9.215139] type=1400 audit(1317800091.827:6): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=762 comm="apparmor_parser" [ 9.215162] type=1400 audit(1317800091.827:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=760 comm="apparmor_parser" [ 9.215989] type=1400 audit(1317800091.827:8): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=761 comm="apparmor_parser" [ 9.216386] type=1400 audit(1317800091.831:9): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=761 comm="apparmor_parser" [ 9.216637] type=1400 audit(1317800091.831:10): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=761 comm="apparmor_parser" [ 9.565602] input: zc3xx as /devices/pci0000:00/0000:00:1a.0/usb3/3-1/input/input9 [ 9.565840] usbcore: registered new interface driver zc3xx [ 9.567768] usbcore: registered new interface driver snd-usb-audio [ 10.957262] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro [ 11.498897] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 11.610016] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null) [ 13.338782] type=1400 audit(1317800095.951:11): apparmor="STATUS" operation="profile_load" name="/usr/lib/lightdm/lightdm-guest-session-wrapper" pid=1170 comm="apparmor_parser" [ 14.107842] ppdev: user-space parallel port driver [ 16.201248] microcode: CPU0 sig=0x6fd, pf=0x80, revision=0xa1 [ 16.241864] microcode: CPU1 sig=0x6fd, pf=0x80, revision=0xa1 [ 16.244584] microcode: Microcode Update Driver: v2.00 , Peter Oruba [ 16.257389] iwl3945 0000:04:00.0: loaded firmware version 15.32.2.9 [ 16.319712] microcode: CPU0 updated to revision 0xa4, date = 2010-10-02 [ 16.320392] microcode: CPU1 updated to revision 0xa4, date = 2010-10-02 [ 16.327663] ADDRCONF(NETDEV_UP): wlan1: link is not ready [ 16.411245] tg3 0000:06:00.0: irq 48 for MSI/MSI-X [ 16.441602] ADDRCONF(NETDEV_UP): eth1: link is not ready [ 17.163336] init: failsafe main process (1112) killed by TERM signal [ 17.369512] init: gdm main process (1340) killed by TERM signal [ 18.121686] tg3 0000:06:00.0: eth1: Link is up at 100 Mbps, full duplex [ 18.121691] tg3 0000:06:00.0: eth1: Flow control is on for TX and on for RX [ 18.122295] ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready [ 21.210518] RPC: Registered named UNIX socket transport module. [ 21.210523] RPC: Registered udp transport module. [ 21.210525] RPC: Registered tcp transport module. [ 21.210528] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 21.445931] Installing knfsd (copyright (C) 1996 okir@monad.swb.de). [ 21.627527] NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory [ 21.636586] NFSD: starting 90-second grace period [ 24.852307] vboxdrv: Found 2 processor cores. [ 24.852593] vboxdrv: fAsync=0 offMin=0x1c2 offMax=0xae6 [ 24.852666] vboxdrv: TSC mode is 'synchronous', kernel timer mode is 'normal'. [ 24.852669] vboxdrv: Successfully loaded version 4.1.2_Ubuntu (interface 0x00190000). [ 25.101599] vboxpci: IOMMU not found (not registered) [ 27.046401] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 27.046405] Bluetooth: BNEP filters: protocol multicast [ 27.081903] Bluetooth: RFCOMM TTY layer initialized [ 27.081919] Bluetooth: RFCOMM socket layer initialized [ 27.081921] Bluetooth: RFCOMM ver 1.11 [ 28.752057] eth1: no IPv6 routers present [ 33.139443] init: plymouth-stop pre-start process (2005) terminated with status 1 [ 33.628053] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro,commit=0 [ 34.056830] EXT4-fs (sda1): re-mounted. Opts: commit=0 [ 34.217110] EXT4-fs (sda5): re-mounted. Opts: commit=0 [ 45.192742] wlan1: authenticate with 00:1a:c1:38:47:d4 (try 1) [ 45.196319] wlan1: authenticated [ 45.199717] wlan1: associate with 00:1a:c1:38:47:d4 (try 1) [ 45.202749] wlan1: RX AssocResp from 00:1a:c1:38:47:d4 (capab=0x431 status=0 aid=2) [ 45.202758] wlan1: associated [ 45.206342] ADDRCONF(NETDEV_CHANGE): wlan1: link becomes ready [ 45.206456] cfg80211: Calling CRDA for country: GB [ 45.213483] cfg80211: Updating information on frequency 2412 MHz for a 20 MHz width channel with regulatory rule: [ 45.213493] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213498] cfg80211: Updating information on frequency 2417 MHz for a 20 MHz width channel with regulatory rule: [ 45.213505] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213509] cfg80211: Updating information on frequency 2422 MHz for a 20 MHz width channel with regulatory rule: [ 45.213516] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213520] cfg80211: Updating information on frequency 2427 MHz for a 20 MHz width channel with regulatory rule: [ 45.213526] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213531] cfg80211: Updating information on frequency 2432 MHz for a 20 MHz width channel with regulatory rule: [ 45.213537] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213542] cfg80211: Updating information on frequency 2437 MHz for a 20 MHz width channel with regulatory rule: [ 45.213547] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213552] cfg80211: Updating information on frequency 2442 MHz for a 20 MHz width channel with regulatory rule: [ 45.213558] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213563] cfg80211: Updating information on frequency 2447 MHz for a 20 MHz width channel with regulatory rule: [ 45.213569] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213573] cfg80211: Updating information on frequency 2452 MHz for a 20 MHz width channel with regulatory rule: [ 45.213579] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213584] cfg80211: Updating information on frequency 2457 MHz for a 20 MHz width channel with regulatory rule: [ 45.213590] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213594] cfg80211: Updating information on frequency 2462 MHz for a 20 MHz width channel with regulatory rule: [ 45.213600] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213605] cfg80211: Updating information on frequency 2467 MHz for a 20 MHz width channel with regulatory rule: [ 45.213611] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213615] cfg80211: Updating information on frequency 2472 MHz for a 20 MHz width channel with regulatory rule: [ 45.213621] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213626] cfg80211: Disabling freq 5170 MHz [ 45.213630] cfg80211: Updating information on frequency 5180 MHz for a 20 MHz width channel with regulatory rule: [ 45.213636] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213640] cfg80211: Updating information on frequency 5190 MHz for a 20 MHz width channel with regulatory rule: [ 45.213646] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213651] cfg80211: Updating information on frequency 5200 MHz for a 20 MHz width channel with regulatory rule: [ 45.213657] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213662] cfg80211: Updating information on frequency 5210 MHz for a 20 MHz width channel with regulatory rule: [ 45.213667] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213672] cfg80211: Updating information on frequency 5220 MHz for a 20 MHz width channel with regulatory rule: [ 45.213678] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213683] cfg80211: Updating information on frequency 5230 MHz for a 20 MHz width channel with regulatory rule: [ 45.213688] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213693] cfg80211: Updating information on frequency 5240 MHz for a 20 MHz width channel with regulatory rule: [ 45.213699] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213704] cfg80211: Updating information on frequency 5260 MHz for a 20 MHz width channel with regulatory rule: [ 45.213710] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213714] cfg80211: Updating information on frequency 5280 MHz for a 20 MHz width channel with regulatory rule: [ 45.213720] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213725] cfg80211: Updating information on frequency 5300 MHz for a 20 MHz width channel with regulatory rule: [ 45.213731] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213736] cfg80211: Updating information on frequency 5320 MHz for a 20 MHz width channel with regulatory rule: [ 45.213742] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213746] cfg80211: Updating information on frequency 5500 MHz for a 20 MHz width channel with regulatory rule: [ 45.213752] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213757] cfg80211: Updating information on frequency 5520 MHz for a 20 MHz width channel with regulatory rule: [ 45.213763] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213768] cfg80211: Updating information on frequency 5540 MHz for a 20 MHz width channel with regulatory rule: [ 45.213774] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213779] cfg80211: Updating information on frequency 5560 MHz for a 20 MHz width channel with regulatory rule: [ 45.213785] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213789] cfg80211: Updating information on frequency 5580 MHz for a 20 MHz width channel with regulatory rule: [ 45.213795] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213800] cfg80211: Updating information on frequency 5600 MHz for a 20 MHz width channel with regulatory rule: [ 45.213806] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213810] cfg80211: Updating information on frequency 5620 MHz for a 20 MHz width channel with regulatory rule: [ 45.213816] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213821] cfg80211: Updating information on frequency 5640 MHz for a 20 MHz width channel with regulatory rule: [ 45.213827] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213831] cfg80211: Updating information on frequency 5660 MHz for a 20 MHz width channel with regulatory rule: [ 45.213837] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213842] cfg80211: Updating information on frequency 5680 MHz for a 20 MHz width channel with regulatory rule: [ 45.213848] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213852] cfg80211: Updating information on frequency 5700 MHz for a 20 MHz width channel with regulatory rule: [ 45.213858] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213864] cfg80211: Regulatory domain changed to country: GB [ 45.213868] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 45.213873] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213879] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213884] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213889] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm) [ 52.640123] eth1: no IPv6 routers present [ 55.208282] wlan1: disassociating from 00:1a:c1:38:47:d4 by local choice (reason=3) [ 55.214021] cfg80211: All devices are disconnected, going to restore regulatory settings [ 55.214032] cfg80211: Restoring regulatory settings [ 55.214052] cfg80211: Calling CRDA to update world regulatory domain [ 55.214778] wlan1: deauthenticating from 00:1a:c1:38:47:d4 by local choice (reason=3) [ 55.221291] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 55.221299] cfg80211: World regulatory domain updated: [ 55.221303] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 55.221309] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.221315] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 55.221321] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 55.221327] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.221333] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.392119] wlan1: no IPv6 routers present [ 58.763822] wlan1: authenticate with 00:1a:c1:38:47:d4 (try 1) [ 58.765582] wlan1: authenticated [ 58.766582] wlan1: associate with 00:1a:c1:38:47:d4 (try 1) [ 58.769972] wlan1: RX ReassocResp from 00:1a:c1:38:47:d4 (capab=0x431 status=0 aid=2) [ 58.769980] wlan1: associated [ 58.773587] cfg80211: Calling CRDA for country: GB [ 58.778304] cfg80211: Updating information on frequency 2412 MHz for a 20 MHz width channel with regulatory rule: [ 58.778310] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778314] cfg80211: Updating information on frequency 2417 MHz for a 20 MHz width channel with regulatory rule: [ 58.778318] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778321] cfg80211: Updating information on frequency 2422 MHz for a 20 MHz width channel with regulatory rule: [ 58.778325] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778328] cfg80211: Updating information on frequency 2427 MHz for a 20 MHz width channel with regulatory rule: [ 58.778332] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778335] cfg80211: Updating information on frequency 2432 MHz for a 20 MHz width channel with regulatory rule: [ 58.778340] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778343] cfg80211: Updating information on frequency 2437 MHz for a 20 MHz width channel with regulatory rule: [ 58.778347] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778350] cfg80211: Updating information on frequency 2442 MHz for a 20 MHz width channel with regulatory rule: [ 58.778354] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778357] cfg80211: Updating information on frequency 2447 MHz for a 20 MHz width channel with regulatory rule: [ 58.778361] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778364] cfg80211: Updating information on frequency 2452 MHz for a 20 MHz width channel with regulatory rule: [ 58.778368] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778371] cfg80211: Updating information on frequency 2457 MHz for a 20 MHz width channel with regulatory rule: [ 58.778375] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778378] cfg80211: Updating information on frequency 2462 MHz for a 20 MHz width channel with regulatory rule: [ 58.778382] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778385] cfg80211: Updating information on frequency 2467 MHz for a 20 MHz width channel with regulatory rule: [ 58.778389] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778392] cfg80211: Updating information on frequency 2472 MHz for a 20 MHz width channel with regulatory rule: [ 58.778396] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778399] cfg80211: Disabling freq 5170 MHz [ 58.778402] cfg80211: Updating information on frequency 5180 MHz for a 20 MHz width channel with regulatory rule: [ 58.778406] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778409] cfg80211: Updating information on frequency 5190 MHz for a 20 MHz width channel with regulatory rule: [ 58.778413] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778416] cfg80211: Updating information on frequency 5200 MHz for a 20 MHz width channel with regulatory rule: [ 58.778420] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778423] cfg80211: Updating information on frequency 5210 MHz for a 20 MHz width channel with regulatory rule: [ 58.778427] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778430] cfg80211: Updating information on frequency 5220 MHz for a 20 MHz width channel with regulatory rule: [ 58.778434] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778437] cfg80211: Updating information on frequency 5230 MHz for a 20 MHz width channel with regulatory rule: [ 58.778441] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778444] cfg80211: Updating information on frequency 5240 MHz for a 20 MHz width channel with regulatory rule: [ 58.778448] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778452] cfg80211: Updating information on frequency 5260 MHz for a 20 MHz width channel with regulatory rule: [ 58.778456] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778459] cfg80211: Updating information on frequency 5280 MHz for a 20 MHz width channel with regulatory rule: [ 58.778463] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778466] cfg80211: Updating information on frequency 5300 MHz for a 20 MHz width channel with regulatory rule: [ 58.778470] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778473] cfg80211: Updating information on frequency 5320 MHz for a 20 MHz width channel with regulatory rule: [ 58.778477] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778480] cfg80211: Updating information on frequency 5500 MHz for a 20 MHz width channel with regulatory rule: [ 58.778484] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778487] cfg80211: Updating information on frequency 5520 MHz for a 20 MHz width channel with regulatory rule: [ 58.778491] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778494] cfg80211: Updating information on frequency 5540 MHz for a 20 MHz width channel with regulatory rule: [ 58.778498] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778501] cfg80211: Updating information on frequency 5560 MHz for a 20 MHz width channel with regulatory rule: [ 58.778505] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778508] cfg80211: Updating information on frequency 5580 MHz for a 20 MHz width channel with regulatory rule: [ 58.778512] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778515] cfg80211: Updating information on frequency 5600 MHz for a 20 MHz width channel with regulatory rule: [ 58.778519] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778522] cfg80211: Updating information on frequency 5620 MHz for a 20 MHz width channel with regulatory rule: [ 58.778526] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778529] cfg80211: Updating information on frequency 5640 MHz for a 20 MHz width channel with regulatory rule: [ 58.778533] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778536] cfg80211: Updating information on frequency 5660 MHz for a 20 MHz width channel with regulatory rule: [ 58.778540] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778543] cfg80211: Updating information on frequency 5680 MHz for a 20 MHz width channel with regulatory rule: [ 58.778547] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778550] cfg80211: Updating information on frequency 5700 MHz for a 20 MHz width channel with regulatory rule: [ 58.778554] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778558] cfg80211: Regulatory domain changed to country: GB [ 58.778560] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 58.778564] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778568] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778571] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778575] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm) [ 70.176124] wlan1: no IPv6 routers present [ 75.152080] eth1: no IPv6 routers present [ 98.736094] eth1: no IPv6 routers present [ 648.357292] ecryptfs_mount: kern_path() failed [ 648.388155] Reading sb failed; rc = [-2] [ 670.016019] eth1: no IPv6 routers present [ 688.176048] eth1: no IPv6 routers present [ 711.096140] eth1: no IPv6 routers present fwts-test/arg-klog-0001/test-0001.sh000077500000000000000000000006561465205512700170110ustar00rootroot00000000000000#!/bin/bash # TEST="Test --klog option" NAME=test-0001.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-klog-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-klog-0001/klog-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-klog-0001/test-0002.sh000077500000000000000000000006461465205512700170110ustar00rootroot00000000000000#!/bin/bash # TEST="Test -k option" NAME=test-0001.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data -k $FWTSTESTDIR/arg-klog-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-klog-0001/klog-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-log-fields-0001/000077500000000000000000000000001465205512700161775ustar00rootroot00000000000000fwts-test/arg-log-fields-0001/logfields-0001.log000066400000000000000000000001161465205512700212260ustar00rootroot00000000000000Available fields: RES,ERR,WRN,DBG,INF,SUM,SEP,NLN,ADV,HED,PAS,FAL,SKP,ABT,INO fwts-test/arg-log-fields-0001/test-0001.sh000077500000000000000000000004711465205512700200750ustar00rootroot00000000000000#!/bin/bash # TEST="Test --log-fields" NAME=test-0001.sh TMPLOG=$TMP/logfields.log.$$ $FWTS --log-fields > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-log-fields-0001/logfields-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-log-format-0001/000077500000000000000000000000001465205512700162215ustar00rootroot00000000000000fwts-test/arg-log-format-0001/klog-0001.log000066400000000000000000000453571465205512700202540ustar00rootroot00000000000000klog (00023) <27/07/16> HED : klog: Scan kernel log for errors and klog (00024) <27/07/16> HED : warnings. klog (00025) <27/07/16> SEP : -------------------------------------- klog (00026) <27/07/16> INF : Test 1 of 1: Kernel log error check. klog (00027) <27/07/16> FAL M: FAILED [MEDIUM] KlogAcpiMultipleMadt: klog (00028) <27/07/16> FAL M: Test 1, MEDIUM Kernel message: [ klog (00029) <27/07/16> FAL M: 0.000000] ACPI: BIOS bug: multiple klog (00030) <27/07/16> FAL M: APIC/MADT found, using 0 klog (00031) <27/07/16> NLN : klog (00032) <27/07/16> ADV : ADVICE: The BIOS is supposed to supply klog (00033) <27/07/16> ADV : just one APIC/MADT, however, more than klog (00034) <27/07/16> ADV : one has been found. One can use klog (00035) <27/07/16> ADV : acpi_apic_instance=N to specify the klog (00036) <27/07/16> ADV : Nth ACPI/MADT to use as an override if klog (00037) <27/07/16> ADV : required. klog (00038) <27/07/16> NLN : klog (00039) <27/07/16> FAL H: FAILED [HIGH] klog (00040) <27/07/16> FAL H: KlogAcpi32Bit64BitAddressMismatch: klog (00041) <27/07/16> FAL H: Test 1, HIGH Kernel message: [ klog (00042) <27/07/16> FAL H: 0.000000] ACPI Error: 32/64X address klog (00043) <27/07/16> FAL H: mismatch in Gpe0Block: 00008018 klog (00044) <27/07/16> FAL H: /0000000000008028, using 32 (20090903 klog (00045) <27/07/16> FAL H: /tbfadt-427) klog (00046) <27/07/16> NLN : klog (00047) <27/07/16> ADV : ADVICE: The FADT table contains a klog (00048) <27/07/16> ADV : mismatch between a 32 bit pointer and klog (00049) <27/07/16> ADV : a 64 bit Generic Address pointer. klog (00050) <27/07/16> ADV : Because these pointers are different, klog (00051) <27/07/16> ADV : it suggests either one of them is klog (00052) <27/07/16> ADV : incorrect. If a non-null 32 bit klog (00053) <27/07/16> ADV : pointer exists, then the kernel will klog (00054) <27/07/16> ADV : opt for this in preference to the 64 klog (00055) <27/07/16> ADV : bit pointer even though this is not in klog (00056) <27/07/16> ADV : accordance to the ACPI specification. klog (00057) <27/07/16> NLN : klog (00058) <27/07/16> FAL C: FAILED [CRITICAL] klog (00059) <27/07/16> FAL C: KlogAcpiValidRsdpNotFound: Test 1, klog (00060) <27/07/16> FAL C: CRITICAL Kernel message: [ 0.000000] klog (00061) <27/07/16> FAL C: ACPI Error: A valid RSDP was not found klog (00062) <27/07/16> FAL C: (20090903/tbxfroot-219) klog (00063) <27/07/16> NLN : klog (00064) <27/07/16> ADV : ADVICE: An ACPI compatible system must klog (00065) <27/07/16> ADV : provide an RSDP (Root System klog (00066) <27/07/16> ADV : Description Pointer). This structure klog (00067) <27/07/16> ADV : provides the physical address of the klog (00068) <27/07/16> ADV : RSDT and XSDT. Since this could not be klog (00069) <27/07/16> ADV : found, the ACPI driver has had to klog (00070) <27/07/16> ADV : disable ACPI support. klog (00071) <27/07/16> NLN : klog (00072) <27/07/16> FAL H: FAILED [HIGH] KlogAcpiTwoFacs: Test 1, klog (00073) <27/07/16> FAL H: HIGH Kernel message: [ 0.000000] ACPI klog (00074) <27/07/16> FAL H: Warning: 32/64 FACS address mismatch klog (00075) <27/07/16> FAL H: in FADT - two FACS tables! (20090903 klog (00076) <27/07/16> FAL H: /tbfadt-369) klog (00077) <27/07/16> NLN : klog (00078) <27/07/16> ADV : ADVICE: The FADT table contains a klog (00079) <27/07/16> ADV : mismatch between the 32 bit pointer klog (00080) <27/07/16> ADV : (FIRMWARE_CTRL) and 64 bit pointer klog (00081) <27/07/16> ADV : (X_FIRMWARE_CTRL) pointer to the FACS klog (00082) <27/07/16> ADV : table. Section 5.2.9 of version 4.0a klog (00083) <27/07/16> ADV : of the ACPI specification states that klog (00084) <27/07/16> ADV : X_FIRMWARE_CTRL should be zero if klog (00085) <27/07/16> ADV : FIRMWARE_CTRL is defined, or klog (00086) <27/07/16> ADV : FIRMWARE_CTRL should be zero if klog (00087) <27/07/16> ADV : X_FIRMWARE_CTRL is zero. With two klog (00088) <27/07/16> ADV : different pointers defined, the kernel klog (00089) <27/07/16> ADV : has to make a choice, and opts for the klog (00090) <27/07/16> ADV : 32 bit pointer. Because these pointers klog (00091) <27/07/16> ADV : are different, it suggests either one klog (00092) <27/07/16> ADV : of them is incorrect, or different 32 klog (00093) <27/07/16> ADV : bit and 64 bit FACS tables are present klog (00094) <27/07/16> ADV : in your system, which is NOT complaint klog (00095) <27/07/16> ADV : with the ACPI specification. The klog (00096) <27/07/16> ADV : kernel has to make a choice and opts klog (00097) <27/07/16> ADV : for the 32 bit FIRMWARE_CTRL. klog (00098) <27/07/16> NLN : klog (00099) <27/07/16> FAL H: FAILED [HIGH] klog (00100) <27/07/16> FAL H: KlogAcpi32Bit64BitAddressMismatchInFadt klog (00101) <27/07/16> FAL H: : Test 1, HIGH Kernel message: [ klog (00102) <27/07/16> FAL H: 0.000000] ACPI Warning: 32/64X FACS klog (00103) <27/07/16> FAL H: address mismatch in FADT - DEF2DF40 klog (00104) <27/07/16> FAL H: /00000000DEF30D40, using 32 (20090903 klog (00105) <27/07/16> FAL H: /tbfadt-486) klog (00106) <27/07/16> NLN : klog (00107) <27/07/16> ADV : ADVICE: The FADT table contains klog (00108) <27/07/16> ADV : Generic Address Structure that has a klog (00109) <27/07/16> ADV : mismatch between the 32 bit and 64 bit klog (00110) <27/07/16> ADV : versions of an address. This should be klog (00111) <27/07/16> ADV : fixed so there are no mismatches. klog (00112) <27/07/16> NLN : klog (00113) <27/07/16> FAL H: FAILED [HIGH] klog (00114) <27/07/16> FAL H: KlogAcpi32Bit64BitAddressMismatchInFadt klog (00115) <27/07/16> FAL H: : Test 1, HIGH Kernel message: [ klog (00116) <27/07/16> FAL H: 0.000000] ACPI Warning: 32/64X length klog (00117) <27/07/16> FAL H: mismatch in Gpe1Block: 0/32 20090521 klog (00118) <27/07/16> FAL H: tbfadt-527 klog (00119) <27/07/16> NLN : klog (00120) <27/07/16> ADV : ADVICE: The FADT table contains klog (00121) <27/07/16> ADV : Generic Address Structure that has a klog (00122) <27/07/16> ADV : mismatch between the 32 bit and 64 bit klog (00123) <27/07/16> ADV : versions of an address. This should be klog (00124) <27/07/16> ADV : fixed so there are no mismatches. klog (00125) <27/07/16> NLN : klog (00126) <27/07/16> FAL H: FAILED [HIGH] KlogAcpiBadAmlCode: Test klog (00127) <27/07/16> FAL H: 1, HIGH Kernel message: [ 0.000000] klog (00128) <27/07/16> FAL H: ACPI Warning: BIOS XSDT has NULL entry klog (00129) <27/07/16> FAL H: , using RSDT (20110112/tbutils-663) klog (00130) <27/07/16> NLN : klog (00131) <27/07/16> ADV : ADVICE: ACPI AML interpreter has found klog (00132) <27/07/16> ADV : some non-conforming AML code. This klog (00133) <27/07/16> ADV : should be investigated and fixed. klog (00134) <27/07/16> NLN : klog (00135) <27/07/16> FAL H: FAILED [HIGH] klog (00136) <27/07/16> FAL H: KlogAcpiFadtInvalidLength: Test 1, klog (00137) <27/07/16> FAL H: HIGH Kernel message: [ 0.000000] ACPI klog (00138) <27/07/16> FAL H: Warning: Invalid length for klog (00139) <27/07/16> FAL H: Pm1aControlBlock: 32, using default 16 klog (00140) <27/07/16> FAL H: (20090903/tbfadt-607) klog (00141) <27/07/16> NLN : klog (00142) <27/07/16> ADV : ADVICE: This item in the FADT is the klog (00143) <27/07/16> ADV : incorrect length. Should be corrected. klog (00144) <27/07/16> NLN : klog (00145) <27/07/16> FAL H: FAILED [HIGH] klog (00146) <27/07/16> FAL H: KlogAcpiOptionalFieldZeroAddressOrLength klog (00147) <27/07/16> FAL H: : Test 1, HIGH Kernel message: [ klog (00148) <27/07/16> FAL H: 0.000000] ACPI Warning: Optional field klog (00149) <27/07/16> FAL H: Gpe1Block has zero address or length: klog (00150) <27/07/16> FAL H: 000000000000102C/0 20090521 tbfadt-558 klog (00151) <27/07/16> NLN : klog (00152) <27/07/16> ADV : ADVICE: An ACPI table contains Generic klog (00153) <27/07/16> ADV : Address Structure that has an address klog (00154) <27/07/16> ADV : that is incorrectly set to zero, or a klog (00155) <27/07/16> ADV : zero length. This needs to be fixed. klog (00156) <27/07/16> NLN : klog (00157) <27/07/16> FAL H: FAILED [HIGH] klog (00158) <27/07/16> FAL H: KlogAcpiOptionalFieldZeroAddressOrLength klog (00159) <27/07/16> FAL H: : Test 1, HIGH Kernel message: [ klog (00160) <27/07/16> FAL H: 0.000000] ACPI Warning: Optional field klog (00161) <27/07/16> FAL H: Pm2ControlBlock has zero address or klog (00162) <27/07/16> FAL H: length: 0000000000000000/1 20090521 klog (00163) <27/07/16> FAL H: tbfadt-558 klog (00164) <27/07/16> NLN : klog (00165) <27/07/16> ADV : ADVICE: An ACPI table contains Generic klog (00166) <27/07/16> ADV : Address Structure that has an address klog (00167) <27/07/16> ADV : that is incorrectly set to zero, or a klog (00168) <27/07/16> ADV : zero length. This needs to be fixed. klog (00169) <27/07/16> NLN : klog (00170) <27/07/16> FAL H: FAILED [HIGH] klog (00171) <27/07/16> FAL H: KlogAcpiOptionalFieldZeroAddressOrLength klog (00172) <27/07/16> FAL H: : Test 1, HIGH Kernel message: [ klog (00173) <27/07/16> FAL H: 0.000000] ACPI Warning (tbfadt-0460): klog (00174) <27/07/16> FAL H: Optional field "Gpe1Block" has zero klog (00175) <27/07/16> FAL H: address or length: 000000000000102C/0 klog (00176) <27/07/16> FAL H: [20080926] klog (00177) <27/07/16> NLN : klog (00178) <27/07/16> ADV : ADVICE: An ACPI table contains Generic klog (00179) <27/07/16> ADV : Address Structure that has an address klog (00180) <27/07/16> ADV : that is incorrectly set to zero, or a klog (00181) <27/07/16> ADV : zero length. This needs to be fixed. klog (00182) <27/07/16> NLN : klog (00183) <27/07/16> FAL M: FAILED [MEDIUM] klog (00184) <27/07/16> FAL M: KlogBiosMtrrIncorrectMask: Test 1, klog (00185) <27/07/16> FAL M: MEDIUM Kernel message: [ 0.000000] klog (00186) <27/07/16> FAL M: mtrr: your BIOS has configured an klog (00187) <27/07/16> FAL M: incorrect mask, fixing it. klog (00188) <27/07/16> NLN : klog (00189) <27/07/16> ADV : ADVICE: The Memory Type Range klog (00190) <27/07/16> ADV : Registers (MTRRs) which define memory klog (00191) <27/07/16> ADV : caching policy are misconfigued by the klog (00192) <27/07/16> ADV : BIOS. In this case, the mask is klog (00193) <27/07/16> ADV : incorrectly set and the kernel has klog (00194) <27/07/16> ADV : detected this and worked around the klog (00195) <27/07/16> ADV : firmware bug. klog (00196) <27/07/16> NLN : klog (00197) <27/07/16> FAL C: FAILED [CRITICAL] klog (00198) <27/07/16> FAL C: KlogBiosCpuMtrrMisconfigured: Test 1, klog (00199) <27/07/16> FAL C: CRITICAL Kernel message: [ 0.000000] klog (00200) <27/07/16> FAL C: WARNING: BIOS bug: CPU MTRRs don't klog (00201) <27/07/16> FAL C: cover all of memory, losing 1408MB of klog (00202) <27/07/16> FAL C: RAM. klog (00203) <27/07/16> NLN : klog (00204) <27/07/16> ADV : ADVICE: The Memory Type Range klog (00205) <27/07/16> ADV : Registers (MTRRs) which define memory klog (00206) <27/07/16> ADV : caching policy are misconfigued by the klog (00207) <27/07/16> ADV : BIOS and don't appear to cover all klog (00208) <27/07/16> ADV : available physical memory. The kernel klog (00209) <27/07/16> ADV : has detected this and has reduced the klog (00210) <27/07/16> ADV : amount of memory available to be safe. klog (00211) <27/07/16> ADV : Either check that the BIOS memory klog (00212) <27/07/16> ADV : caching options are set correctly or klog (00213) <27/07/16> ADV : contact your BIOS vendor to get this klog (00214) <27/07/16> ADV : fixed. klog (00215) <27/07/16> NLN : klog (00216) <27/07/16> FAL H: FAILED [HIGH] KlogAcpiUnknownAmlOpcode klog (00217) <27/07/16> FAL H: : Test 1, HIGH Kernel message: [ klog (00218) <27/07/16> FAL H: 0.022719] ACPI Error: Found unknown klog (00219) <27/07/16> FAL H: opcode 0xFD at AML address f7ffe14c klog (00220) <27/07/16> FAL H: offset 0xE8, ignoring (20110112 klog (00221) <27/07/16> FAL H: /psloop-141) klog (00222) <27/07/16> NLN : klog (00223) <27/07/16> ADV : ADVICE: ACPI execution run time error: klog (00224) <27/07/16> ADV : The ACPI interpreter has reached an klog (00225) <27/07/16> ADV : opcode that is unknown, this normally klog (00226) <27/07/16> ADV : is a bug in the underlying AML code klog (00227) <27/07/16> ADV : either because of badly written AML klog (00228) <27/07/16> ADV : code or the compiler has produced code klog (00229) <27/07/16> ADV : that is incorrect or the ACPI klog (00230) <27/07/16> ADV : interpreter does not support this klog (00231) <27/07/16> ADV : valid opcode. klog (00232) <27/07/16> NLN : klog (00233) <27/07/16> FAL C: FAILED [CRITICAL] klog (00234) <27/07/16> FAL C: KlogAcpiDetectedUnsupportedOpCode: klog (00235) <27/07/16> FAL C: Test 1, CRITICAL Kernel message: [ klog (00236) <27/07/16> FAL C: 0.025463] ACPI Warning: Detected an klog (00237) <27/07/16> FAL C: unsupported executable opcode at klog (00238) <27/07/16> FAL C: module-level: [0x007B] at table offset klog (00239) <27/07/16> FAL C: 0x00C3 (20110112/psloop-526) klog (00240) <27/07/16> NLN : klog (00241) <27/07/16> ADV : ADVICE: An illegal AML opcode has been klog (00242) <27/07/16> ADV : found and is ignored. This indicates klog (00243) <27/07/16> ADV : either badly compiled code or opcode klog (00244) <27/07/16> ADV : corruption in the DSDT or SSDT tables klog (00245) <27/07/16> ADV : or a bug in the ACPI execution engine. klog (00246) <27/07/16> ADV : Recommend disassembing using iasl to klog (00247) <27/07/16> ADV : find any offending code. klog (00248) <27/07/16> NLN : klog (00249) <27/07/16> FAL H: FAILED [HIGH] klog (00250) <27/07/16> FAL H: KlogAcpiObjectAlreadyExists: Test 1, klog (00251) <27/07/16> FAL H: HIGH Kernel message: [ 0.034090] ACPI klog (00252) <27/07/16> FAL H: Error: Method parse/execution failed klog (00253) <27/07/16> FAL H: [_SB_.PCI0._OSC] (Node ee025630), klog (00254) <27/07/16> FAL H: AE_ALREADY_EXISTS (20110112 klog (00255) <27/07/16> FAL H: /psparse-536) klog (00256) <27/07/16> NLN : klog (00257) <27/07/16> ADV : ADVICE: This is a bug picked up by the klog (00258) <27/07/16> ADV : kernel, but as yet, the firmware test klog (00259) <27/07/16> ADV : suite has no diagnostic advice for klog (00260) <27/07/16> ADV : this particular problem. klog (00261) <27/07/16> NLN : klog (00262) <27/07/16> FAL H: FAILED [HIGH] KlogAcpiFirmwareError: klog (00263) <27/07/16> FAL H: Test 1, HIGH Kernel message: [ klog (00264) <27/07/16> FAL H: 0.040119] [Firmware Bug]: the BIOS has klog (00265) <27/07/16> FAL H: corrupted hw-PMU resources (MSR 186 is klog (00266) <27/07/16> FAL H: 400000) klog (00267) <27/07/16> NLN : klog (00268) <27/07/16> ADV : ADVICE: The kernel has detected a klog (00269) <27/07/16> ADV : Firmware bug in the BIOS or ACPI which klog (00270) <27/07/16> ADV : needs investigating and fixing. klog (00271) <27/07/16> NLN : klog (00272) <27/07/16> FAL C: FAILED [CRITICAL] klog (00273) <27/07/16> FAL C: KlogAcpiDetectedUnsupportedOpCode: klog (00274) <27/07/16> FAL C: Test 1, CRITICAL Kernel message: [ klog (00275) <27/07/16> FAL C: 0.042222] ACPI Warning: Detected an klog (00276) <27/07/16> FAL C: unsupported executable opcode at klog (00277) <27/07/16> FAL C: module-level: [0x0070] at table offset klog (00278) <27/07/16> FAL C: 0x2366 (20100121/psloop-526) klog (00279) <27/07/16> NLN : klog (00280) <27/07/16> ADV : ADVICE: An illegal AML opcode has been klog (00281) <27/07/16> ADV : found and is ignored. This indicates klog (00282) <27/07/16> ADV : either badly compiled code or opcode klog (00283) <27/07/16> ADV : corruption in the DSDT or SSDT tables klog (00284) <27/07/16> ADV : or a bug in the ACPI execution engine. klog (00285) <27/07/16> ADV : Recommend disassembing using iasl to klog (00286) <27/07/16> ADV : find any offending code. klog (00287) <27/07/16> NLN : klog (00288) <27/07/16> INF : Found 18 unique errors in kernel log. klog (00289) <27/07/16> NLN : klog (00290) <27/07/16> SEP : ====================================== klog (00291) <27/07/16> SUM : 0 passed, 18 failed, 0 warning, 0 klog (00292) <27/07/16> SUM : aborted, 0 skipped, 0 info only. klog (00293) <27/07/16> SEP : ====================================== fwts-test/arg-log-format-0001/klog-0002.log000066400000000000000000000253401465205512700202430ustar00rootroot00000000000000klog : klog: Scan kernel log for errors and warnings. klog : --------------------------------------------------------------- klog : Test 1 of 1: Kernel log error check. klog : FAILED [MEDIUM] KlogAcpiMultipleMadt: Test 1, MEDIUM Kernel klog : message: [ 0.000000] ACPI: BIOS bug: multiple APIC/MADT found, klog : using 0 klog : klog : ADVICE: The BIOS is supposed to supply just one APIC/MADT, klog : however, more than one has been found. One can use klog : acpi_apic_instance=N to specify the Nth ACPI/MADT to use as an klog : override if required. klog : klog : FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatch: Test 1, HIGH klog : Kernel message: [ 0.000000] ACPI Error: 32/64X address mismatch klog : in Gpe0Block: 00008018/0000000000008028, using 32 (20090903 klog : /tbfadt-427) klog : klog : ADVICE: The FADT table contains a mismatch between a 32 bit klog : pointer and a 64 bit Generic Address pointer. Because these klog : pointers are different, it suggests either one of them is klog : incorrect. If a non-null 32 bit pointer exists, then the kernel klog : will opt for this in preference to the 64 bit pointer even klog : though this is not in accordance to the ACPI specification. klog : klog : FAILED [CRITICAL] KlogAcpiValidRsdpNotFound: Test 1, CRITICAL klog : Kernel message: [ 0.000000] ACPI Error: A valid RSDP was not klog : found (20090903/tbxfroot-219) klog : klog : ADVICE: An ACPI compatible system must provide an RSDP (Root klog : System Description Pointer). This structure provides the klog : physical address of the RSDT and XSDT. Since this could not be klog : found, the ACPI driver has had to disable ACPI support. klog : klog : FAILED [HIGH] KlogAcpiTwoFacs: Test 1, HIGH Kernel message: [ klog : 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - klog : two FACS tables! (20090903/tbfadt-369) klog : klog : ADVICE: The FADT table contains a mismatch between the 32 bit klog : pointer (FIRMWARE_CTRL) and 64 bit pointer (X_FIRMWARE_CTRL) klog : pointer to the FACS table. Section 5.2.9 of version 4.0a of the klog : ACPI specification states that X_FIRMWARE_CTRL should be zero klog : if FIRMWARE_CTRL is defined, or FIRMWARE_CTRL should be zero if klog : X_FIRMWARE_CTRL is zero. With two different pointers defined, klog : the kernel has to make a choice, and opts for the 32 bit klog : pointer. Because these pointers are different, it suggests klog : either one of them is incorrect, or different 32 bit and 64 bit klog : FACS tables are present in your system, which is NOT complaint klog : with the ACPI specification. The kernel has to make a choice klog : and opts for the 32 bit FIRMWARE_CTRL. klog : klog : FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: Test 1, klog : HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS klog : address mismatch in FADT - DEF2DF40/00000000DEF30D40, using 32 klog : (20090903/tbfadt-486) klog : klog : ADVICE: The FADT table contains Generic Address Structure that klog : has a mismatch between the 32 bit and 64 bit versions of an klog : address. This should be fixed so there are no mismatches. klog : klog : FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: Test 1, klog : HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X length klog : mismatch in Gpe1Block: 0/32 20090521 tbfadt-527 klog : klog : ADVICE: The FADT table contains Generic Address Structure that klog : has a mismatch between the 32 bit and 64 bit versions of an klog : address. This should be fixed so there are no mismatches. klog : klog : FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel message: klog : [ 0.000000] ACPI Warning: BIOS XSDT has NULL entry, using RSDT klog : (20110112/tbutils-663) klog : klog : ADVICE: ACPI AML interpreter has found some non-conforming AML klog : code. This should be investigated and fixed. klog : klog : FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH Kernel klog : message: [ 0.000000] ACPI Warning: Invalid length for klog : Pm1aControlBlock: 32, using default 16 (20090903/tbfadt-607) klog : klog : ADVICE: This item in the FADT is the incorrect length. Should klog : be corrected. klog : klog : FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: Test 1, klog : HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field klog : Gpe1Block has zero address or length: 000000000000102C/0 klog : 20090521 tbfadt-558 klog : klog : ADVICE: An ACPI table contains Generic Address Structure that klog : has an address that is incorrectly set to zero, or a zero klog : length. This needs to be fixed. klog : klog : FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: Test 1, klog : HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field klog : Pm2ControlBlock has zero address or length: 0000000000000000/1 klog : 20090521 tbfadt-558 klog : klog : ADVICE: An ACPI table contains Generic Address Structure that klog : has an address that is incorrectly set to zero, or a zero klog : length. This needs to be fixed. klog : klog : FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: Test 1, klog : HIGH Kernel message: [ 0.000000] ACPI Warning (tbfadt-0460): klog : Optional field "Gpe1Block" has zero address or length: klog : 000000000000102C/0 [20080926] klog : klog : ADVICE: An ACPI table contains Generic Address Structure that klog : has an address that is incorrectly set to zero, or a zero klog : length. This needs to be fixed. klog : klog : FAILED [MEDIUM] KlogBiosMtrrIncorrectMask: Test 1, MEDIUM klog : Kernel message: [ 0.000000] mtrr: your BIOS has configured an klog : incorrect mask, fixing it. klog : klog : ADVICE: The Memory Type Range Registers (MTRRs) which define klog : memory caching policy are misconfigued by the BIOS. In this klog : case, the mask is incorrectly set and the kernel has detected klog : this and worked around the firmware bug. klog : klog : FAILED [CRITICAL] KlogBiosCpuMtrrMisconfigured: Test 1, klog : CRITICAL Kernel message: [ 0.000000] WARNING: BIOS bug: CPU klog : MTRRs don't cover all of memory, losing 1408MB of RAM. klog : klog : ADVICE: The Memory Type Range Registers (MTRRs) which define klog : memory caching policy are misconfigued by the BIOS and don't klog : appear to cover all available physical memory. The kernel has klog : detected this and has reduced the amount of memory available to klog : be safe. Either check that the BIOS memory caching options are klog : set correctly or contact your BIOS vendor to get this fixed. klog : klog : FAILED [HIGH] KlogAcpiUnknownAmlOpcode: Test 1, HIGH Kernel klog : message: [ 0.022719] ACPI Error: Found unknown opcode 0xFD at klog : AML address f7ffe14c offset 0xE8, ignoring (20110112 klog : /psloop-141) klog : klog : ADVICE: ACPI execution run time error: The ACPI interpreter has klog : reached an opcode that is unknown, this normally is a bug in klog : the underlying AML code either because of badly written AML klog : code or the compiler has produced code that is incorrect or the klog : ACPI interpreter does not support this valid opcode. klog : klog : FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test 1, klog : CRITICAL Kernel message: [ 0.025463] ACPI Warning: Detected an klog : unsupported executable opcode at module-level: [0x007B] at klog : table offset 0x00C3 (20110112/psloop-526) klog : klog : ADVICE: An illegal AML opcode has been found and is ignored. klog : This indicates either badly compiled code or opcode corruption klog : in the DSDT or SSDT tables or a bug in the ACPI execution klog : engine. Recommend disassembing using iasl to find any offending klog : code. klog : klog : FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH Kernel klog : message: [ 0.034090] ACPI Error: Method parse/execution failed klog : [_SB_.PCI0._OSC] (Node ee025630), AE_ALREADY_EXISTS (20110112 klog : /psparse-536) klog : klog : ADVICE: This is a bug picked up by the kernel, but as yet, the klog : firmware test suite has no diagnostic advice for this klog : particular problem. klog : klog : FAILED [HIGH] KlogAcpiFirmwareError: Test 1, HIGH Kernel klog : message: [ 0.040119] [Firmware Bug]: the BIOS has corrupted klog : hw-PMU resources (MSR 186 is 400000) klog : klog : ADVICE: The kernel has detected a Firmware bug in the BIOS or klog : ACPI which needs investigating and fixing. klog : klog : FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test 1, klog : CRITICAL Kernel message: [ 0.042222] ACPI Warning: Detected an klog : unsupported executable opcode at module-level: [0x0070] at klog : table offset 0x2366 (20100121/psloop-526) klog : klog : ADVICE: An illegal AML opcode has been found and is ignored. klog : This indicates either badly compiled code or opcode corruption klog : in the DSDT or SSDT tables or a bug in the ACPI execution klog : engine. Recommend disassembing using iasl to find any offending klog : code. klog : klog : Found 18 unique errors in kernel log. klog : klog : =============================================================== klog : 0 passed, 18 failed, 0 warning, 0 aborted, 0 skipped, 0 info klog : only. klog : =============================================================== fwts-test/arg-log-format-0001/klog-0003.log000066400000000000000000000301131465205512700202360ustar00rootroot00000000000000klog 00016: klog: Scan kernel log for errors and warnings. klog 00017: --------------------------------------------------------- klog 00018: Test 1 of 1: Kernel log error check. klog 00019: FAILED [MEDIUM] KlogAcpiMultipleMadt: Test 1, MEDIUM klog 00020: Kernel message: [ 0.000000] ACPI: BIOS bug: multiple APIC klog 00021: /MADT found, using 0 klog 00022: klog 00023: ADVICE: The BIOS is supposed to supply just one APIC/MADT klog 00024: , however, more than one has been found. One can use klog 00025: acpi_apic_instance=N to specify the Nth ACPI/MADT to use klog 00026: as an override if required. klog 00027: klog 00028: FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatch: Test 1, klog 00029: HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X klog 00030: address mismatch in Gpe0Block: 00008018/0000000000008028, klog 00031: using 32 (20090903/tbfadt-427) klog 00032: klog 00033: ADVICE: The FADT table contains a mismatch between a 32 klog 00034: bit pointer and a 64 bit Generic Address pointer. Because klog 00035: these pointers are different, it suggests either one of klog 00036: them is incorrect. If a non-null 32 bit pointer exists, klog 00037: then the kernel will opt for this in preference to the 64 klog 00038: bit pointer even though this is not in accordance to the klog 00039: ACPI specification. klog 00040: klog 00041: FAILED [CRITICAL] KlogAcpiValidRsdpNotFound: Test 1, klog 00042: CRITICAL Kernel message: [ 0.000000] ACPI Error: A valid klog 00043: RSDP was not found (20090903/tbxfroot-219) klog 00044: klog 00045: ADVICE: An ACPI compatible system must provide an RSDP klog 00046: (Root System Description Pointer). This structure klog 00047: provides the physical address of the RSDT and XSDT. Since klog 00048: this could not be found, the ACPI driver has had to klog 00049: disable ACPI support. klog 00050: klog 00051: FAILED [HIGH] KlogAcpiTwoFacs: Test 1, HIGH Kernel klog 00052: message: [ 0.000000] ACPI Warning: 32/64 FACS address klog 00053: mismatch in FADT - two FACS tables! (20090903/tbfadt-369) klog 00054: klog 00055: ADVICE: The FADT table contains a mismatch between the 32 klog 00056: bit pointer (FIRMWARE_CTRL) and 64 bit pointer klog 00057: (X_FIRMWARE_CTRL) pointer to the FACS table. Section klog 00058: 5.2.9 of version 4.0a of the ACPI specification states klog 00059: that X_FIRMWARE_CTRL should be zero if FIRMWARE_CTRL is klog 00060: defined, or FIRMWARE_CTRL should be zero if klog 00061: X_FIRMWARE_CTRL is zero. With two different pointers klog 00062: defined, the kernel has to make a choice, and opts for klog 00063: the 32 bit pointer. Because these pointers are different, klog 00064: it suggests either one of them is incorrect, or different klog 00065: 32 bit and 64 bit FACS tables are present in your system, klog 00066: which is NOT complaint with the ACPI specification. The klog 00067: kernel has to make a choice and opts for the 32 bit klog 00068: FIRMWARE_CTRL. klog 00069: klog 00070: FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog 00071: Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog 00072: /64X FACS address mismatch in FADT - DEF2DF40 klog 00073: /00000000DEF30D40, using 32 (20090903/tbfadt-486) klog 00074: klog 00075: ADVICE: The FADT table contains Generic Address Structure klog 00076: that has a mismatch between the 32 bit and 64 bit klog 00077: versions of an address. This should be fixed so there are klog 00078: no mismatches. klog 00079: klog 00080: FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog 00081: Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog 00082: /64X length mismatch in Gpe1Block: 0/32 20090521 klog 00083: tbfadt-527 klog 00084: klog 00085: ADVICE: The FADT table contains Generic Address Structure klog 00086: that has a mismatch between the 32 bit and 64 bit klog 00087: versions of an address. This should be fixed so there are klog 00088: no mismatches. klog 00089: klog 00090: FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog 00091: message: [ 0.000000] ACPI Warning: BIOS XSDT has NULL klog 00092: entry, using RSDT (20110112/tbutils-663) klog 00093: klog 00094: ADVICE: ACPI AML interpreter has found some klog 00095: non-conforming AML code. This should be investigated and klog 00096: fixed. klog 00096: klog 00097: FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog 00098: Kernel message: [ 0.000000] ACPI Warning: Invalid length klog 00099: for Pm1aControlBlock: 32, using default 16 (20090903 klog 00100: /tbfadt-607) klog 00101: klog 00102: ADVICE: This item in the FADT is the incorrect length. klog 00103: Should be corrected. klog 00104: klog 00105: FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog 00106: Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog 00107: Optional field Gpe1Block has zero address or length: klog 00108: 000000000000102C/0 20090521 tbfadt-558 klog 00109: klog 00110: ADVICE: An ACPI table contains Generic Address Structure klog 00111: that has an address that is incorrectly set to zero, or a klog 00112: zero length. This needs to be fixed. klog 00113: klog 00114: FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog 00115: Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog 00116: Optional field Pm2ControlBlock has zero address or length klog 00117: : 0000000000000000/1 20090521 tbfadt-558 klog 00118: klog 00119: ADVICE: An ACPI table contains Generic Address Structure klog 00120: that has an address that is incorrectly set to zero, or a klog 00121: zero length. This needs to be fixed. klog 00122: klog 00123: FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog 00124: Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning klog 00125: (tbfadt-0460): Optional field "Gpe1Block" has zero klog 00126: address or length: 000000000000102C/0 [20080926] klog 00127: klog 00128: ADVICE: An ACPI table contains Generic Address Structure klog 00129: that has an address that is incorrectly set to zero, or a klog 00130: zero length. This needs to be fixed. klog 00131: klog 00132: FAILED [MEDIUM] KlogBiosMtrrIncorrectMask: Test 1, MEDIUM klog 00133: Kernel message: [ 0.000000] mtrr: your BIOS has klog 00134: configured an incorrect mask, fixing it. klog 00135: klog 00136: ADVICE: The Memory Type Range Registers (MTRRs) which klog 00137: define memory caching policy are misconfigued by the klog 00138: BIOS. In this case, the mask is incorrectly set and the klog 00139: kernel has detected this and worked around the firmware klog 00140: bug. klog 00141: klog 00142: FAILED [CRITICAL] KlogBiosCpuMtrrMisconfigured: Test 1, klog 00143: CRITICAL Kernel message: [ 0.000000] WARNING: BIOS bug: klog 00144: CPU MTRRs don't cover all of memory, losing 1408MB of klog 00145: RAM. klog 00146: klog 00147: ADVICE: The Memory Type Range Registers (MTRRs) which klog 00148: define memory caching policy are misconfigued by the BIOS klog 00149: and don't appear to cover all available physical memory. klog 00150: The kernel has detected this and has reduced the amount klog 00151: of memory available to be safe. Either check that the klog 00152: BIOS memory caching options are set correctly or contact klog 00153: your BIOS vendor to get this fixed. klog 00154: klog 00155: FAILED [HIGH] KlogAcpiUnknownAmlOpcode: Test 1, HIGH klog 00156: Kernel message: [ 0.022719] ACPI Error: Found unknown klog 00157: opcode 0xFD at AML address f7ffe14c offset 0xE8, ignoring klog 00158: (20110112/psloop-141) klog 00159: klog 00160: ADVICE: ACPI execution run time error: The ACPI klog 00161: interpreter has reached an opcode that is unknown, this klog 00162: normally is a bug in the underlying AML code either klog 00163: because of badly written AML code or the compiler has klog 00164: produced code that is incorrect or the ACPI interpreter klog 00165: does not support this valid opcode. klog 00166: klog 00167: FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test klog 00168: 1, CRITICAL Kernel message: [ 0.025463] ACPI Warning: klog 00169: Detected an unsupported executable opcode at module-level klog 00170: : [0x007B] at table offset 0x00C3 (20110112/psloop-526) klog 00171: klog 00172: ADVICE: An illegal AML opcode has been found and is klog 00173: ignored. This indicates either badly compiled code or klog 00174: opcode corruption in the DSDT or SSDT tables or a bug in klog 00175: the ACPI execution engine. Recommend disassembing using klog 00176: iasl to find any offending code. klog 00177: klog 00178: FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog 00179: Kernel message: [ 0.034090] ACPI Error: Method parse klog 00180: /execution failed [_SB_.PCI0._OSC] (Node ee025630), klog 00181: AE_ALREADY_EXISTS (20110112/psparse-536) klog 00182: klog 00183: ADVICE: This is a bug picked up by the kernel, but as yet klog 00184: , the firmware test suite has no diagnostic advice for klog 00185: this particular problem. klog 00186: klog 00187: FAILED [HIGH] KlogAcpiFirmwareError: Test 1, HIGH Kernel klog 00188: message: [ 0.040119] [Firmware Bug]: the BIOS has klog 00189: corrupted hw-PMU resources (MSR 186 is 400000) klog 00190: klog 00191: ADVICE: The kernel has detected a Firmware bug in the klog 00192: BIOS or ACPI which needs investigating and fixing. klog 00193: klog 00194: FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test klog 00195: 1, CRITICAL Kernel message: [ 0.042222] ACPI Warning: klog 00196: Detected an unsupported executable opcode at module-level klog 00197: : [0x0070] at table offset 0x2366 (20100121/psloop-526) klog 00198: klog 00199: ADVICE: An illegal AML opcode has been found and is klog 00200: ignored. This indicates either badly compiled code or klog 00201: opcode corruption in the DSDT or SSDT tables or a bug in klog 00202: the ACPI execution engine. Recommend disassembing using klog 00203: iasl to find any offending code. klog 00204: klog 00205: Found 18 unique errors in kernel log. klog 00206: klog 00207: ========================================================= klog 00208: 0 passed, 18 failed, 0 warning, 0 aborted, 0 skipped, 0 klog 00209: info only. klog 00210: ========================================================= fwts-test/arg-log-format-0001/klog-0004.log000066400000000000000000000326601465205512700202500ustar00rootroot00000000000000klog 27/07/16 : klog: Scan kernel log for errors and warnings. klog 27/07/16 : ---------------------------------------------------- klog 27/07/16 : Test 1 of 1: Kernel log error check. klog 27/07/16 M: FAILED [MEDIUM] KlogAcpiMultipleMadt: Test 1, MEDIUM klog 27/07/16 M: Kernel message: [ 0.000000] ACPI: BIOS bug: multiple klog 27/07/16 M: APIC/MADT found, using 0 klog 27/07/16 : klog 27/07/16 : ADVICE: The BIOS is supposed to supply just one APIC klog 27/07/16 : /MADT, however, more than one has been found. One klog 27/07/16 : can use acpi_apic_instance=N to specify the Nth ACPI klog 27/07/16 : /MADT to use as an override if required. klog 27/07/16 : klog 27/07/16 H: FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatch: klog 27/07/16 H: Test 1, HIGH Kernel message: [ 0.000000] ACPI Error: klog 27/07/16 H: 32/64X address mismatch in Gpe0Block: 00008018 klog 27/07/16 H: /0000000000008028, using 32 (20090903/tbfadt-427) klog 27/07/16 : klog 27/07/16 : ADVICE: The FADT table contains a mismatch between a klog 27/07/16 : 32 bit pointer and a 64 bit Generic Address pointer. klog 27/07/16 : Because these pointers are different, it suggests klog 27/07/16 : either one of them is incorrect. If a non-null 32 klog 27/07/16 : bit pointer exists, then the kernel will opt for klog 27/07/16 : this in preference to the 64 bit pointer even though klog 27/07/16 : this is not in accordance to the ACPI specification. klog 27/07/16 : klog 27/07/16 C: FAILED [CRITICAL] KlogAcpiValidRsdpNotFound: Test 1, klog 27/07/16 C: CRITICAL Kernel message: [ 0.000000] ACPI Error: A klog 27/07/16 C: valid RSDP was not found (20090903/tbxfroot-219) klog 27/07/16 : klog 27/07/16 : ADVICE: An ACPI compatible system must provide an klog 27/07/16 : RSDP (Root System Description Pointer). This klog 27/07/16 : structure provides the physical address of the RSDT klog 27/07/16 : and XSDT. Since this could not be found, the ACPI klog 27/07/16 : driver has had to disable ACPI support. klog 27/07/16 : klog 27/07/16 H: FAILED [HIGH] KlogAcpiTwoFacs: Test 1, HIGH Kernel klog 27/07/16 H: message: [ 0.000000] ACPI Warning: 32/64 FACS klog 27/07/16 H: address mismatch in FADT - two FACS tables! klog 27/07/16 H: (20090903/tbfadt-369) klog 27/07/16 : klog 27/07/16 : ADVICE: The FADT table contains a mismatch between klog 27/07/16 : the 32 bit pointer (FIRMWARE_CTRL) and 64 bit klog 27/07/16 : pointer (X_FIRMWARE_CTRL) pointer to the FACS table. klog 27/07/16 : Section 5.2.9 of version 4.0a of the ACPI klog 27/07/16 : specification states that X_FIRMWARE_CTRL should be klog 27/07/16 : zero if FIRMWARE_CTRL is defined, or FIRMWARE_CTRL klog 27/07/16 : should be zero if X_FIRMWARE_CTRL is zero. With two klog 27/07/16 : different pointers defined, the kernel has to make a klog 27/07/16 : choice, and opts for the 32 bit pointer. Because klog 27/07/16 : these pointers are different, it suggests either one klog 27/07/16 : of them is incorrect, or different 32 bit and 64 bit klog 27/07/16 : FACS tables are present in your system, which is NOT klog 27/07/16 : complaint with the ACPI specification. The kernel klog 27/07/16 : has to make a choice and opts for the 32 bit klog 27/07/16 : FIRMWARE_CTRL. klog 27/07/16 : klog 27/07/16 H: FAILED [HIGH] klog 27/07/16 H: KlogAcpi32Bit64BitAddressMismatchInFadt: Test 1, klog 27/07/16 H: HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog 27/07/16 H: /64X FACS address mismatch in FADT - DEF2DF40 klog 27/07/16 H: /00000000DEF30D40, using 32 (20090903/tbfadt-486) klog 27/07/16 : klog 27/07/16 : ADVICE: The FADT table contains Generic Address klog 27/07/16 : Structure that has a mismatch between the 32 bit and klog 27/07/16 : 64 bit versions of an address. This should be fixed klog 27/07/16 : so there are no mismatches. klog 27/07/16 : klog 27/07/16 H: FAILED [HIGH] klog 27/07/16 H: KlogAcpi32Bit64BitAddressMismatchInFadt: Test 1, klog 27/07/16 H: HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog 27/07/16 H: /64X length mismatch in Gpe1Block: 0/32 20090521 klog 27/07/16 H: tbfadt-527 klog 27/07/16 : klog 27/07/16 : ADVICE: The FADT table contains Generic Address klog 27/07/16 : Structure that has a mismatch between the 32 bit and klog 27/07/16 : 64 bit versions of an address. This should be fixed klog 27/07/16 : so there are no mismatches. klog 27/07/16 : klog 27/07/16 H: FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH klog 27/07/16 H: Kernel message: [ 0.000000] ACPI Warning: BIOS XSDT klog 27/07/16 H: has NULL entry, using RSDT (20110112/tbutils-663) klog 27/07/16 : klog 27/07/16 : ADVICE: ACPI AML interpreter has found some klog 27/07/16 : non-conforming AML code. This should be investigated klog 27/07/16 : and fixed. klog 27/07/16 : klog 27/07/16 H: FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, klog 27/07/16 H: HIGH Kernel message: [ 0.000000] ACPI Warning: klog 27/07/16 H: Invalid length for Pm1aControlBlock: 32, using klog 27/07/16 H: default 16 (20090903/tbfadt-607) klog 27/07/16 : klog 27/07/16 : ADVICE: This item in the FADT is the incorrect klog 27/07/16 : length. Should be corrected. klog 27/07/16 : klog 27/07/16 H: FAILED [HIGH] klog 27/07/16 H: KlogAcpiOptionalFieldZeroAddressOrLength: Test 1, klog 27/07/16 H: HIGH Kernel message: [ 0.000000] ACPI Warning: klog 27/07/16 H: Optional field Gpe1Block has zero address or length: klog 27/07/16 H: 000000000000102C/0 20090521 tbfadt-558 klog 27/07/16 : klog 27/07/16 : ADVICE: An ACPI table contains Generic Address klog 27/07/16 : Structure that has an address that is incorrectly klog 27/07/16 : set to zero, or a zero length. This needs to be klog 27/07/16 : fixed. klog 27/07/16 : klog 27/07/16 H: FAILED [HIGH] klog 27/07/16 H: KlogAcpiOptionalFieldZeroAddressOrLength: Test 1, klog 27/07/16 H: HIGH Kernel message: [ 0.000000] ACPI Warning: klog 27/07/16 H: Optional field Pm2ControlBlock has zero address or klog 27/07/16 H: length: 0000000000000000/1 20090521 tbfadt-558 klog 27/07/16 : klog 27/07/16 : ADVICE: An ACPI table contains Generic Address klog 27/07/16 : Structure that has an address that is incorrectly klog 27/07/16 : set to zero, or a zero length. This needs to be klog 27/07/16 : fixed. klog 27/07/16 : klog 27/07/16 H: FAILED [HIGH] klog 27/07/16 H: KlogAcpiOptionalFieldZeroAddressOrLength: Test 1, klog 27/07/16 H: HIGH Kernel message: [ 0.000000] ACPI Warning klog 27/07/16 H: (tbfadt-0460): Optional field "Gpe1Block" has zero klog 27/07/16 H: address or length: 000000000000102C/0 [20080926] klog 27/07/16 : klog 27/07/16 : ADVICE: An ACPI table contains Generic Address klog 27/07/16 : Structure that has an address that is incorrectly klog 27/07/16 : set to zero, or a zero length. This needs to be klog 27/07/16 : fixed. klog 27/07/16 : klog 27/07/16 M: FAILED [MEDIUM] KlogBiosMtrrIncorrectMask: Test 1, klog 27/07/16 M: MEDIUM Kernel message: [ 0.000000] mtrr: your BIOS klog 27/07/16 M: has configured an incorrect mask, fixing it. klog 27/07/16 : klog 27/07/16 : ADVICE: The Memory Type Range Registers (MTRRs) klog 27/07/16 : which define memory caching policy are misconfigued klog 27/07/16 : by the BIOS. In this case, the mask is incorrectly klog 27/07/16 : set and the kernel has detected this and worked klog 27/07/16 : around the firmware bug. klog 27/07/16 : klog 27/07/16 C: FAILED [CRITICAL] KlogBiosCpuMtrrMisconfigured: Test klog 27/07/16 C: 1, CRITICAL Kernel message: [ 0.000000] WARNING: klog 27/07/16 C: BIOS bug: CPU MTRRs don't cover all of memory, klog 27/07/16 C: losing 1408MB of RAM. klog 27/07/16 : klog 27/07/16 : ADVICE: The Memory Type Range Registers (MTRRs) klog 27/07/16 : which define memory caching policy are misconfigued klog 27/07/16 : by the BIOS and don't appear to cover all available klog 27/07/16 : physical memory. The kernel has detected this and klog 27/07/16 : has reduced the amount of memory available to be klog 27/07/16 : safe. Either check that the BIOS memory caching klog 27/07/16 : options are set correctly or contact your BIOS klog 27/07/16 : vendor to get this fixed. klog 27/07/16 : klog 27/07/16 H: FAILED [HIGH] KlogAcpiUnknownAmlOpcode: Test 1, HIGH klog 27/07/16 H: Kernel message: [ 0.022719] ACPI Error: Found klog 27/07/16 H: unknown opcode 0xFD at AML address f7ffe14c offset klog 27/07/16 H: 0xE8, ignoring (20110112/psloop-141) klog 27/07/16 : klog 27/07/16 : ADVICE: ACPI execution run time error: The ACPI klog 27/07/16 : interpreter has reached an opcode that is unknown, klog 27/07/16 : this normally is a bug in the underlying AML code klog 27/07/16 : either because of badly written AML code or the klog 27/07/16 : compiler has produced code that is incorrect or the klog 27/07/16 : ACPI interpreter does not support this valid opcode. klog 27/07/16 : klog 27/07/16 : klog 27/07/16 C: FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: klog 27/07/16 C: Test 1, CRITICAL Kernel message: [ 0.025463] ACPI klog 27/07/16 C: Warning: Detected an unsupported executable opcode klog 27/07/16 C: at module-level: [0x007B] at table offset 0x00C3 klog 27/07/16 C: (20110112/psloop-526) klog 27/07/16 : klog 27/07/16 : ADVICE: An illegal AML opcode has been found and is klog 27/07/16 : ignored. This indicates either badly compiled code klog 27/07/16 : or opcode corruption in the DSDT or SSDT tables or a klog 27/07/16 : bug in the ACPI execution engine. Recommend klog 27/07/16 : disassembing using iasl to find any offending code. klog 27/07/16 : klog 27/07/16 H: FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, klog 27/07/16 H: HIGH Kernel message: [ 0.034090] ACPI Error: Method klog 27/07/16 H: parse/execution failed [_SB_.PCI0._OSC] (Node klog 27/07/16 H: ee025630), AE_ALREADY_EXISTS (20110112/psparse-536) klog 27/07/16 : klog 27/07/16 : ADVICE: This is a bug picked up by the kernel, but klog 27/07/16 : as yet, the firmware test suite has no diagnostic klog 27/07/16 : advice for this particular problem. klog 27/07/16 : klog 27/07/16 H: FAILED [HIGH] KlogAcpiFirmwareError: Test 1, HIGH klog 27/07/16 H: Kernel message: [ 0.040119] [Firmware Bug]: the BIOS klog 27/07/16 H: has corrupted hw-PMU resources (MSR 186 is 400000) klog 27/07/16 : klog 27/07/16 : ADVICE: The kernel has detected a Firmware bug in klog 27/07/16 : the BIOS or ACPI which needs investigating and klog 27/07/16 : fixing. klog 27/07/16 : klog 27/07/16 C: FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: klog 27/07/16 C: Test 1, CRITICAL Kernel message: [ 0.042222] ACPI klog 27/07/16 C: Warning: Detected an unsupported executable opcode klog 27/07/16 C: at module-level: [0x0070] at table offset 0x2366 klog 27/07/16 C: (20100121/psloop-526) klog 27/07/16 : klog 27/07/16 : ADVICE: An illegal AML opcode has been found and is klog 27/07/16 : ignored. This indicates either badly compiled code klog 27/07/16 : or opcode corruption in the DSDT or SSDT tables or a klog 27/07/16 : bug in the ACPI execution engine. Recommend klog 27/07/16 : disassembing using iasl to find any offending code. klog 27/07/16 : klog 27/07/16 : Found 18 unique errors in kernel log. klog 27/07/16 : klog 27/07/16 : ==================================================== klog 27/07/16 : 0 passed, 18 failed, 0 warning, 0 aborted, 0 skipped klog 27/07/16 : , 0 info only. klog 27/07/16 : ==================================================== fwts-test/arg-log-format-0001/klog.txt000066400000000000000000000035621465205512700177240ustar00rootroot00000000000000[ 0.000000] ACPI: BIOS bug: multiple APIC/MADT found, using 0 [ 0.000000] ACPI Error: 32/64X address mismatch in Gpe0Block: 00008018/0000000000008028, using 32 (20090903/tbfadt-427) [ 0.000000] ACPI Error: A valid RSDP was not found (20090903/tbxfroot-219) [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20090903/tbfadt-369) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - DEF2DF40/00000000DEF30D40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 20090521 tbfadt-527 [ 0.000000] ACPI Warning: BIOS XSDT has NULL entry, using RSDT (20110112/tbutils-663) [ 0.000000] ACPI Warning: Invalid length for Pm1aControlBlock: 32, using default 16 (20090903/tbfadt-607) [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 000000000000102C/0 20090521 tbfadt-558 [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0000000000000000/1 20090521 tbfadt-558 [ 0.000000] ACPI Warning (tbfadt-0460): Optional field "Gpe1Block" has zero address or length: 000000000000102C/0 [20080926] [ 0.000000] mtrr: your BIOS has configured an incorrect mask, fixing it. [ 0.000000] WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 1408MB of RAM. [ 0.022719] ACPI Error: Found unknown opcode 0xFD at AML address f7ffe14c offset 0xE8, ignoring (20110112/psloop-141) [ 0.025463] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x00C3 (20110112/psloop-526) [ 0.034090] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ee025630), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.040119] [Firmware Bug]: the BIOS has corrupted hw-PMU resources (MSR 186 is 400000) [ 0.042222] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x2366 (20100121/psloop-526) fwts-test/arg-log-format-0001/test-0001.sh000077500000000000000000000014051465205512700201150ustar00rootroot00000000000000#!/bin/bash # TEST="Test --log-format, all field operators" NAME=test-0001.sh TMPLOG=$TMP/klog.log.$$ TMPLOG_ORIG=$TMP/klog-0001.log.$$ TODAY=`date +%d/%m/%y` $FWTS -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-log-format-0001/klog.txt --log-format="%owner (%line) <%date> %field %level: " klog - | grep "^klog" | sed "sx([0-9][0-9][0-9][0-9][0-9])x(XXXXX)x" > $TMPLOG # # Need to adjust reference log to today's date # cat $FWTSTESTDIR/arg-log-format-0001/klog-0001.log | sed "sx<[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9]>x<${TODAY}>x" | sed "sx([0-9][0-9][0-9][0-9][0-9])x(XXXXX)x" > $TMPLOG_ORIG diff $TMPLOG $TMPLOG_ORIG >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG $TMPLOG_ORIG exit $ret fwts-test/arg-log-format-0001/test-0002.sh000077500000000000000000000006551465205512700201240ustar00rootroot00000000000000#!/bin/bash # TEST="Test --log-format, %owner field" NAME=test-0002.sh TMPLOG=$TMP/klog.log.$$ $FWTS -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-log-format-0001/klog.txt --log-format="%owner: " klog - | grep "^klog" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-log-format-0001/klog-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-log-format-0001/test-0003.sh000077500000000000000000000012351465205512700201200ustar00rootroot00000000000000#!/bin/bash # TEST="Test --log-format, %line field" NAME=test-0003.sh TMPLOG=$TMP/klog.log.$$ TMPLOG_ORIG=$TMP/klog-0003.log.$$ TODAY=`date +%d/%m/%y` $FWTS -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-log-format-0001/klog.txt --log-format="%owner %line: " klog - | grep "^klog" | sed sx12\/10\/11x${TODAY}x | sed "sx[0-9][0-9][0-9][0-9][0-9]:xXXXXX:x" > $TMPLOG sed "sx[0-9][0-9][0-9][0-9][0-9]:xXXXXX:x" < $FWTSTESTDIR/arg-log-format-0001/klog-0003.log > $TMPLOG_ORIG diff $TMPLOG $TMPLOG_ORIG >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME cat $FAILURE_LOG fi rm $TMPLOG $TMPLOG_ORIG exit $ret fwts-test/arg-log-format-0001/test-0004.sh000077500000000000000000000012571465205512700201250ustar00rootroot00000000000000#!/bin/bash # TEST="Test --log-format, %date %level field operators" NAME=test-0004.sh TMPLOG=$TMP/klog.log.$$ TODAY=`date +%d/%m/%y` TMPLOG_ORIG=$TMP/klog-0004.log.$$ TODAY=`date +%d/%m/%y` # # Need to adjust reference log to today's date # $FWTS -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-log-format-0001/klog.txt --log-format="%owner %date %%level: " klog - | grep "^klog" > $TMPLOG sed "sx[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9]x${TODAY}x" < $FWTSTESTDIR/arg-log-format-0001/klog-0004.log > $TMPLOG_ORIG diff $TMPLOG $TMPLOG_ORIG >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG $TMPLOG_ORIG exit $ret fwts-test/arg-log-format-0001/testcase.txt000066400000000000000000000000371465205512700205750ustar00rootroot00000000000000Test fwts --log-format options fwts-test/arg-quiet-0001/000077500000000000000000000000001465205512700153015ustar00rootroot00000000000000fwts-test/arg-quiet-0001/klog.txt000066400000000000000000000021311465205512700167730ustar00rootroot00000000000000[ 0.000000] ACPI: BIOS bug: multiple APIC/MADT found, using 0 [ 0.000000] ACPI Error: 32/64X address mismatch in Gpe0Block: 00008018/0000000000008028, using 32 (20090903/tbfadt-427) [ 0.000000] ACPI Error: A valid RSDP was not found (20110112/tbxfroot-219) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3776BF40/0x000000003776ED40, using 32 (20100428/tbfadt-486) [ 30.140475] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node ffff880217052420), AE_TIME [ 42.490181] ACPI Error: [_SB_.VDRV] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 42.490202] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC0.H_EC._Q51] (Node ffff88003d9b1e60), AE_NOT_FOUND (20110112/psparse-536) [ 44.661543] ACPI Warning for _SB_.PCI0.GFX0.DD01._BCL: Return type mismatch - found Integer, expected Package (20090903/nspredef-1006) [ 50.737630] ACPI Warning for _SB_.PCI0.AGP_.VID_.MXMI: Excess arguments - needs 1, found 2 (20090903/nspredef-303) [ 50.737686] ACPI Warning for _SB_.PCI0.AGP_.VID_.MXMS: Excess arguments - needs 1, found 2 (20090903/nspredef-303) fwts-test/arg-quiet-0001/test-0001.sh000077500000000000000000000005431465205512700171770ustar00rootroot00000000000000#!/bin/bash # TEST="Test --quiet option" NAME=test-0001.sh TMPLOG=$TMP/klog.log.$$ $FWTS --quiet -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-quiet-0001/klog.txt klog -r /dev/null > $TMPLOG diff $TMPLOG /dev/null >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-quiet-0001/test-0002.sh000077500000000000000000000005311465205512700171750ustar00rootroot00000000000000#!/bin/bash # TEST="Test -q option" NAME=test-0001.sh TMPLOG=$TMP/klog.log.$$ $FWTS -q -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-quiet-0001/klog.txt klog -r /dev/null > $TMPLOG diff $TMPLOG /dev/null >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-quiet-0001/testcase.txt000066400000000000000000000000411465205512700176500ustar00rootroot00000000000000Test fwts -q and --quiet options fwts-test/arg-results-0001/000077500000000000000000000000001465205512700156535ustar00rootroot00000000000000fwts-test/arg-results-0001/klog.txt000066400000000000000000002225711465205512700173610ustar00rootroot00000000000000[ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 3.0.0-12-generic (buildd@crested) (gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3) ) #19-Ubuntu SMP Fri Sep 23 21:23:39 UTC 2011 (Ubuntu 3.0.0-12.19-generic 3.0.4) [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.0.0-12-generic root=UUID=08ed6ce0-0907-4d06-b1e1-b9c3ec647fe2 ro crashkernel=384M-2G:64M,2G-:128M quiet splash vt.handoff=7 [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] Centaur CentaurHauls [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009f800 (usable) [ 0.000000] BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000d2000 - 00000000000d4000 (reserved) [ 0.000000] BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000bf6d0000 (usable) [ 0.000000] BIOS-e820: 00000000bf6d0000 - 00000000bf6e3000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000bf6e3000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved) [ 0.000000] BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved) [ 0.000000] BIOS-e820: 00000000fed14000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1c000 - 00000000fed90000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ff000000 - 0000000100000000 (reserved) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI present. [ 0.000000] DMI: LENOVO 0769BMG/IEL10, BIOS 68ET27WW 11/14/2007 [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0xbf6d0 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask F80000000 write-back [ 0.000000] 1 base 080000000 mask FC0000000 write-back [ 0.000000] 2 base 0BF700000 mask FFFF00000 uncachable [ 0.000000] 3 base 0BF800000 mask FFF800000 uncachable [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] original variable MTRRs [ 0.000000] reg 0, base: 0GB, range: 2GB, type WB [ 0.000000] reg 1, base: 2GB, range: 1GB, type WB [ 0.000000] reg 2, base: 3063MB, range: 1MB, type UC [ 0.000000] reg 3, base: 3064MB, range: 8MB, type UC [ 0.000000] total RAM covered: 3063M [ 0.000000] Found optimal setting for mtrr clean up [ 0.000000] gran_size: 64K chunk_size: 16M num_reg: 4 lose cover RAM: 0G [ 0.000000] New variable MTRRs [ 0.000000] reg 0, base: 0GB, range: 2GB, type WB [ 0.000000] reg 1, base: 2GB, range: 1GB, type WB [ 0.000000] reg 2, base: 3063MB, range: 1MB, type UC [ 0.000000] reg 3, base: 3064MB, range: 8MB, type UC [ 0.000000] found SMP MP-table at [ffff8800000f72c0] f72c0 [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] Base memory trampoline at [ffff88000009a000] 9a000 size 20480 [ 0.000000] init_memory_mapping: 0000000000000000-00000000bf6d0000 [ 0.000000] 0000000000 - 00bf600000 page 2M [ 0.000000] 00bf600000 - 00bf6d0000 page 4k [ 0.000000] kernel direct mapping tables up to bf6d0000 @ bf6cb000-bf6d0000 [ 0.000000] RAMDISK: 359ec000 - 36cee000 [ 0.000000] Reserving 128MB of memory at 720MB for crashkernel (System RAM: 3062MB) [ 0.000000] ACPI: RSDP 00000000000f7240 00024 (v02 LENOVO) [ 0.000000] ACPI: XSDT 00000000bf6d87f0 00094 (v01 LENOVO TP-68 06040000 LTP 00000000) [ 0.000000] ACPI: FACP 00000000bf6dfbd2 000F4 (v03 TOSCPL CRESTLNE 06040000 ALAN 00000001) [ 0.000000] ACPI: DSDT 00000000bf6d9b6a 05FF4 (v02 TOSCPL CRESTLNE 06040000 INTL 20060608) [ 0.000000] ACPI: FACS 00000000bf6e2fc0 00040 [ 0.000000] ACPI: APIC 00000000bf6dfcc6 00068 (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: HPET 00000000bf6dfd2e 00038 (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: MCFG 00000000bf6dfd66 0003C (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: TCPA 00000000bf6dfda2 00032 (v01 Intel CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: TMOR 00000000bf6dfdd4 00026 (v01 PTLTD 06040000 PTL 00000003) [ 0.000000] ACPI: SLIC 00000000bf6dfdfa 00176 (v01 LENOVO TP-68 06040000 TBD 00000001) [ 0.000000] ACPI: APIC 00000000bf6dff70 00068 (v01 PTLTD ? APIC 06040000 LTP 00000000) [ 0.000000] ACPI: BOOT 00000000bf6dffd8 00028 (v01 PTLTD $SBFTBL$ 06040000 LTP 00000001) [ 0.000000] ACPI: SSDT 00000000bf6d98bd 002AD (v01 SataRe SataAhci 00001000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d981a 000A3 (v01 BrtRef DD01BRT 00001000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8e10 0025F (v01 PmRef Cpu0Tst 00003000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8d6a 000A6 (v01 PmRef Cpu1Tst 00003000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8884 004E6 (v01 PmRef CpuPm 00003000 INTL 20050624) [ 0.000000] ACPI: BIOS bug: multiple APIC/MADT found, using 0 [ 0.000000] ACPI: If "acpi_apic_instance=2" works better, notify linux-acpi@vger.kernel.org [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-00000000bf6d0000 [ 0.000000] Initmem setup node 0 0000000000000000-00000000bf6d0000 [ 0.000000] NODE_DATA [00000000bf6c6000 - 00000000bf6cafff] [ 0.000000] [ffffea0000000000-ffffea00029fffff] PMD -> [ffff8800bbe00000-ffff8800be7fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal empty [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x000bf6d0 [ 0.000000] On node 0 totalpages: 783967 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 5 pages reserved [ 0.000000] DMA zone: 3922 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 10664 pages used for memmap [ 0.000000] DMA32 zone: 769320 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x1008 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000d2000 [ 0.000000] PM: Registered nosave memory: 00000000000d2000 - 00000000000d4000 [ 0.000000] PM: Registered nosave memory: 00000000000d4000 - 00000000000dc000 [ 0.000000] PM: Registered nosave memory: 00000000000dc000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:20000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:256 nr_cpumask_bits:256 nr_cpu_ids:2 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 27 pages/cpu @ffff8800bf400000 s79616 r8192 d22784 u1048576 [ 0.000000] pcpu-alloc: s79616 r8192 d22784 u1048576 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 773242 [ 0.000000] Policy zone: DMA32 [ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-3.0.0-12-generic root=UUID=08ed6ce0-0907-4d06-b1e1-b9c3ec647fe2 ro crashkernel=384M-2G:64M,2G-:128M quiet splash vt.handoff=7 [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Memory: 2928536k/3136320k available (6104k kernel code, 452k absent, 207332k reserved, 4880k data, 984k init) [ 0.000000] SLUB: Genslabs=15, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] NR_IRQS:16640 nr_irqs:512 16 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] vt handoff: transparent VT on vt#7 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 25165824 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1496.217 MHz processor. [ 0.004006] Calibrating delay loop (skipped), value calculated using timer frequency.. 2992.43 BogoMIPS (lpj=5984868) [ 0.004013] pid_max: default: 32768 minimum: 301 [ 0.004056] Security Framework initialized [ 0.004080] AppArmor: AppArmor initialized [ 0.004083] Yama: becoming mindful. [ 0.004759] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.010636] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.012341] Mount-cache hash table entries: 256 [ 0.012557] Initializing cgroup subsys cpuacct [ 0.012565] Initializing cgroup subsys memory [ 0.012580] Initializing cgroup subsys devices [ 0.012583] Initializing cgroup subsys freezer [ 0.012586] Initializing cgroup subsys net_cls [ 0.012589] Initializing cgroup subsys blkio [ 0.012598] Initializing cgroup subsys perf_event [ 0.012643] CPU: Physical Processor ID: 0 [ 0.012645] CPU: Processor Core ID: 0 [ 0.012649] mce: CPU supports 6 MCE banks [ 0.012661] CPU0: Thermal monitoring handled by SMI [ 0.012667] using mwait in idle threads. [ 0.016288] ACPI: Core revision 20110413 [ 0.024040] ftrace: allocating 25651 entries in 101 pages [ 0.028444] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.071627] CPU0: Intel(R) Core(TM)2 Duo CPU T5250 @ 1.50GHz stepping 0d [ 0.072003] Performance Events: PEBS fmt0+, Core2 events, Intel PMU driver. [ 0.072003] PEBS disabled due to CPU errata. [ 0.072003] ... version: 2 [ 0.072003] ... bit width: 40 [ 0.072003] ... generic registers: 2 [ 0.072003] ... value mask: 000000ffffffffff [ 0.072003] ... max period: 000000007fffffff [ 0.072003] ... fixed-purpose events: 3 [ 0.072003] ... event mask: 0000000700000003 [ 0.072003] Booting Node 0, Processors #1 Ok. [ 0.072003] smpboot cpu 1: start_ip = 9a000 [ 0.008000] CPU1: Thermal monitoring handled by SMI [ 0.160029] Brought up 2 CPUs [ 0.160033] Total of 2 processors activated (5984.88 BogoMIPS). [ 0.161224] devtmpfs: initialized [ 0.161224] PM: Registering ACPI NVS region at bf6d0000 (77824 bytes) [ 0.162075] print_constraints: dummy: [ 0.162115] Time: 7:34:42 Date: 10/05/11 [ 0.162171] NET: Registered protocol family 16 [ 0.162209] Trying to unpack rootfs image as initramfs... [ 0.164047] ACPI: bus type pci registered [ 0.164133] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.164138] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.220043] PCI: Using configuration type 1 for base access [ 0.221379] bio: create slab at 0 [ 0.223506] ACPI: EC: Look up EC in DSDT [ 0.228089] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query ignored [ 0.229039] ACPI: SSDT 00000000bf6d959e 001B4 (v01 PmRef Cpu0Ist 00003000 INTL 20050624) [ 0.229543] ACPI: Dynamic OEM Table Load: [ 0.229548] ACPI: SSDT (null) 001B4 (v01 PmRef Cpu0Ist 00003000 INTL 20050624) [ 0.229696] ACPI: SSDT 00000000bf6d906f 004AA (v01 PmRef Cpu0Cst 00003001 INTL 20050624) [ 0.230165] ACPI: Dynamic OEM Table Load: [ 0.230169] ACPI: SSDT (null) 004AA (v01 PmRef Cpu0Cst 00003001 INTL 20050624) [ 0.230454] ACPI: SSDT 00000000bf6d9752 000C8 (v01 PmRef Cpu1Ist 00003000 INTL 20050624) [ 0.232427] ACPI: Dynamic OEM Table Load: [ 0.232432] ACPI: SSDT (null) 000C8 (v01 PmRef Cpu1Ist 00003000 INTL 20050624) [ 0.232541] ACPI: SSDT 00000000bf6d9519 00085 (v01 PmRef Cpu1Cst 00003000 INTL 20050624) [ 0.233011] ACPI: Dynamic OEM Table Load: [ 0.233015] ACPI: SSDT (null) 00085 (v01 PmRef Cpu1Cst 00003000 INTL 20050624) [ 0.238295] ACPI: EC: GPE storm detected, transactions will use polling mode [ 0.344070] ACPI: Interpreter enabled [ 0.344078] ACPI: (supports S0 S3 S4 S5) [ 0.344118] ACPI: Using IOAPIC for interrupt routing [ 0.389051] ACPI: EC: GPE = 0x1c, I/O: command/status = 0x66, data = 0x62 [ 0.389294] ACPI: No dock devices found. [ 0.389298] HEST: Table not found. [ 0.389303] PCI: Ignoring host bridge windows from ACPI; if necessary, use "pci=use_crs" and report a bug [ 0.389762] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.390623] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] (ignored) [ 0.390628] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] (ignored) [ 0.390632] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] (ignored) [ 0.390636] pci_root PNP0A08:00: host bridge window [mem 0x000d4000-0x000d7fff] (ignored) [ 0.390640] pci_root PNP0A08:00: host bridge window [mem 0x000d8000-0x000dbfff] (ignored) [ 0.390645] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xdfffffff] (ignored) [ 0.390648] pci_root PNP0A08:00: host bridge window [mem 0xf0000000-0xfebfffff] (ignored) [ 0.390665] pci 0000:00:00.0: [8086:2a00] type 0 class 0x000600 [ 0.390726] pci 0000:00:02.0: [8086:2a02] type 0 class 0x000300 [ 0.390746] pci 0000:00:02.0: reg 10: [mem 0xfc000000-0xfc0fffff 64bit] [ 0.390758] pci 0000:00:02.0: reg 18: [mem 0xd0000000-0xdfffffff 64bit pref] [ 0.390767] pci 0000:00:02.0: reg 20: [io 0x1800-0x1807] [ 0.390812] pci 0000:00:02.1: [8086:2a03] type 0 class 0x000380 [ 0.390829] pci 0000:00:02.1: reg 10: [mem 0xfc100000-0xfc1fffff 64bit] [ 0.390937] pci 0000:00:1a.0: [8086:2834] type 0 class 0x000c03 [ 0.391013] pci 0000:00:1a.0: reg 20: [io 0x1820-0x183f] [ 0.391065] pci 0000:00:1a.1: [8086:2835] type 0 class 0x000c03 [ 0.391126] pci 0000:00:1a.1: reg 20: [io 0x1840-0x185f] [ 0.391187] pci 0000:00:1a.7: [8086:283a] type 0 class 0x000c03 [ 0.391216] pci 0000:00:1a.7: reg 10: [mem 0xfc504800-0xfc504bff] [ 0.391321] pci 0000:00:1a.7: PME# supported from D0 D3hot D3cold [ 0.391328] pci 0000:00:1a.7: PME# disabled [ 0.391362] pci 0000:00:1b.0: [8086:284b] type 0 class 0x000403 [ 0.391386] pci 0000:00:1b.0: reg 10: [mem 0xfc300000-0xfc303fff 64bit] [ 0.391473] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.391479] pci 0000:00:1b.0: PME# disabled [ 0.391514] pci 0000:00:1c.0: [8086:283f] type 1 class 0x000604 [ 0.391605] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.391611] pci 0000:00:1c.0: PME# disabled [ 0.391647] pci 0000:00:1c.1: [8086:2841] type 1 class 0x000604 [ 0.391735] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 0.391741] pci 0000:00:1c.1: PME# disabled [ 0.391775] pci 0000:00:1c.2: [8086:2843] type 1 class 0x000604 [ 0.391868] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 0.391874] pci 0000:00:1c.2: PME# disabled [ 0.391911] pci 0000:00:1c.3: [8086:2845] type 1 class 0x000604 [ 0.391999] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold [ 0.392005] pci 0000:00:1c.3: PME# disabled [ 0.392053] pci 0000:00:1d.0: [8086:2830] type 0 class 0x000c03 [ 0.392114] pci 0000:00:1d.0: reg 20: [io 0x1860-0x187f] [ 0.392162] pci 0000:00:1d.1: [8086:2831] type 0 class 0x000c03 [ 0.392238] pci 0000:00:1d.1: reg 20: [io 0x1880-0x189f] [ 0.392293] pci 0000:00:1d.2: [8086:2832] type 0 class 0x000c03 [ 0.392371] pci 0000:00:1d.2: reg 20: [io 0x18a0-0x18bf] [ 0.392438] pci 0000:00:1d.7: [8086:2836] type 0 class 0x000c03 [ 0.392466] pci 0000:00:1d.7: reg 10: [mem 0xfc504c00-0xfc504fff] [ 0.392567] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.392573] pci 0000:00:1d.7: PME# disabled [ 0.392603] pci 0000:00:1e.0: [8086:2448] type 1 class 0x000604 [ 0.392698] pci 0000:00:1f.0: [8086:2815] type 0 class 0x000601 [ 0.392816] pci 0000:00:1f.0: quirk: [io 0x1000-0x107f] claimed by ICH6 ACPI/GPIO/TCO [ 0.392824] pci 0000:00:1f.0: quirk: [io 0x1180-0x11bf] claimed by ICH6 GPIO [ 0.392829] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 1 PIO at 0680 (mask 007f) [ 0.392835] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 2 PIO at 1640 (mask 000f) [ 0.392884] pci 0000:00:1f.1: [8086:2850] type 0 class 0x000101 [ 0.392903] pci 0000:00:1f.1: reg 10: [io 0x0000-0x0007] [ 0.392918] pci 0000:00:1f.1: reg 14: [io 0x0000-0x0003] [ 0.392931] pci 0000:00:1f.1: reg 18: [io 0x0000-0x0007] [ 0.392944] pci 0000:00:1f.1: reg 1c: [io 0x0000-0x0003] [ 0.392958] pci 0000:00:1f.1: reg 20: [io 0x1810-0x181f] [ 0.393014] pci 0000:00:1f.2: [8086:2829] type 0 class 0x000106 [ 0.393042] pci 0000:00:1f.2: reg 10: [io 0x1c00-0x1c07] [ 0.393056] pci 0000:00:1f.2: reg 14: [io 0x18d4-0x18d7] [ 0.393069] pci 0000:00:1f.2: reg 18: [io 0x18d8-0x18df] [ 0.393082] pci 0000:00:1f.2: reg 1c: [io 0x18d0-0x18d3] [ 0.393095] pci 0000:00:1f.2: reg 20: [io 0x18e0-0x18ff] [ 0.393108] pci 0000:00:1f.2: reg 24: [mem 0xfc504000-0xfc5047ff] [ 0.393157] pci 0000:00:1f.2: PME# supported from D3hot [ 0.393163] pci 0000:00:1f.2: PME# disabled [ 0.393188] pci 0000:00:1f.3: [8086:283e] type 0 class 0x000c05 [ 0.393206] pci 0000:00:1f.3: reg 10: [mem 0x00000000-0x000000ff] [ 0.393250] pci 0000:00:1f.3: reg 20: [io 0x1c20-0x1c3f] [ 0.393354] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.393360] pci 0000:00:1c.0: bridge window [io 0x2000-0x2fff] [ 0.393367] pci 0000:00:1c.0: bridge window [mem 0xf6000000-0xf7ffffff] [ 0.393376] pci 0000:00:1c.0: bridge window [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.393501] pci 0000:04:00.0: [8086:4227] type 0 class 0x000280 [ 0.393557] pci 0000:04:00.0: reg 10: [mem 0xf8000000-0xf8000fff] [ 0.393895] pci 0000:04:00.0: PME# supported from D0 D3hot D3cold [ 0.393908] pci 0000:04:00.0: PME# disabled [ 0.393979] pci 0000:04:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 0.394021] pci 0000:00:1c.1: PCI bridge to [bus 04-04] [ 0.394027] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.394033] pci 0000:00:1c.1: bridge window [mem 0xf8000000-0xf9ffffff] [ 0.394043] pci 0000:00:1c.1: bridge window [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.394110] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 0.394116] pci 0000:00:1c.2: bridge window [io 0x4000-0x4fff] [ 0.394122] pci 0000:00:1c.2: bridge window [mem 0xfa000000-0xfbffffff] [ 0.394132] pci 0000:00:1c.2: bridge window [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.394268] pci 0000:06:00.0: [14e4:1713] type 0 class 0x000200 [ 0.394336] pci 0000:06:00.0: reg 10: [mem 0xc8000000-0xc800ffff 64bit] [ 0.394639] pci 0000:06:00.0: PME# supported from D3hot D3cold [ 0.394651] pci 0000:06:00.0: PME# disabled [ 0.394783] pci 0000:00:1c.3: PCI bridge to [bus 06-06] [ 0.394789] pci 0000:00:1c.3: bridge window [io 0x5000-0x5fff] [ 0.394796] pci 0000:00:1c.3: bridge window [mem 0xc8000000-0xc9ffffff] [ 0.394806] pci 0000:00:1c.3: bridge window [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.394868] pci 0000:08:06.0: [1180:0832] type 0 class 0x000c00 [ 0.394886] pci 0000:08:06.0: proprietary Ricoh MMC controller disabled (via firewire function) [ 0.394890] pci 0000:08:06.0: MMC cards are now supported by standard SDHCI controller [ 0.394909] pci 0000:08:06.0: reg 10: [mem 0xfc200000-0xfc2007ff] [ 0.395006] pci 0000:08:06.0: supports D1 D2 [ 0.395009] pci 0000:08:06.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395016] pci 0000:08:06.0: PME# disabled [ 0.395045] pci 0000:08:06.1: [1180:0822] type 0 class 0x000805 [ 0.395069] pci 0000:08:06.1: reg 10: [mem 0xfc200800-0xfc2008ff] [ 0.395165] pci 0000:08:06.1: supports D1 D2 [ 0.395168] pci 0000:08:06.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395174] pci 0000:08:06.1: PME# disabled [ 0.395199] pci 0000:08:06.2: [1180:0592] type 0 class 0x000880 [ 0.395224] pci 0000:08:06.2: reg 10: [mem 0xfc201000-0xfc2010ff] [ 0.395317] pci 0000:08:06.2: supports D1 D2 [ 0.395320] pci 0000:08:06.2: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395326] pci 0000:08:06.2: PME# disabled [ 0.395350] pci 0000:08:06.3: [1180:0852] type 0 class 0x000880 [ 0.395376] pci 0000:08:06.3: reg 10: [mem 0xfc201400-0xfc2014ff] [ 0.395474] pci 0000:08:06.3: supports D1 D2 [ 0.395477] pci 0000:08:06.3: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395484] pci 0000:08:06.3: PME# disabled [ 0.395549] pci 0000:00:1e.0: PCI bridge to [bus 08-08] (subtractive decode) [ 0.395556] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.395562] pci 0000:00:1e.0: bridge window [mem 0xfc200000-0xfc2fffff] [ 0.395572] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.395576] pci 0000:00:1e.0: bridge window [io 0x0000-0xffff] (subtractive decode) [ 0.395580] pci 0000:00:1e.0: bridge window [mem 0x00000000-0xfffffffff] (subtractive decode) [ 0.395619] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.395828] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP01._PRT] [ 0.395887] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP02._PRT] [ 0.395944] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP03._PRT] [ 0.395999] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP04._PRT] [ 0.396116] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCIB._PRT] [ 0.396176] pci0000:00: Requesting ACPI _OSC control (0x1d) [ 0.396181] pci0000:00: ACPI _OSC request failed (AE_NOT_FOUND), returned control mask: 0x1d [ 0.396184] ACPI _OSC control for PCIe not granted, disabling ASPM [ 0.404002] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 *5 6 7 10 12 14 15) [ 0.404086] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404153] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 *7 10 12 14 15) [ 0.404217] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404282] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled. [ 0.404353] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404419] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 7 10 12 14 15) *11 [ 0.404484] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 5 6 7 *11 12 14 15) [ 0.404647] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 0.404670] vgaarb: loaded [ 0.404672] vgaarb: bridge control possible 0000:00:02.0 [ 0.404971] SCSI subsystem initialized [ 0.405069] libata version 3.00 loaded. [ 0.405143] usbcore: registered new interface driver usbfs [ 0.405158] usbcore: registered new interface driver hub [ 0.405200] usbcore: registered new device driver usb [ 0.405322] PCI: Using ACPI for IRQ routing [ 0.416330] PCI: pci_cache_line_size set to 64 bytes [ 0.416509] reserve RAM buffer: 000000000009f800 - 000000000009ffff [ 0.416513] reserve RAM buffer: 00000000bf6d0000 - 00000000bfffffff [ 0.416683] NetLabel: Initializing [ 0.416686] NetLabel: domain hash size = 128 [ 0.416688] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.416706] NetLabel: unlabeled traffic allowed by default [ 0.416770] HPET: 3 timers in total, 0 timers will be used for per-cpu timer [ 0.416777] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 [ 0.416784] hpet0: 3 comparators, 64-bit 14.318180 MHz counter [ 0.420524] Switching to clocksource hpet [ 0.423392] Switched to NOHz mode on CPU #0 [ 0.423487] Switched to NOHz mode on CPU #1 [ 0.430603] AppArmor: AppArmor Filesystem Enabled [ 0.430649] pnp: PnP ACPI init [ 0.430672] ACPI: bus type pnp registered [ 0.431166] pnp 00:00: [bus 00-ff] [ 0.431171] pnp 00:00: [io 0x0000-0x0cf7 window] [ 0.431174] pnp 00:00: [io 0x0cf8-0x0cff] [ 0.431177] pnp 00:00: [io 0x0d00-0xffff window] [ 0.431181] pnp 00:00: [mem 0x000a0000-0x000bffff window] [ 0.431184] pnp 00:00: [mem 0x000c0000-0x000c3fff window] [ 0.431187] pnp 00:00: [mem 0x000c4000-0x000c7fff window] [ 0.431190] pnp 00:00: [mem 0x000c8000-0x000cbfff window] [ 0.431197] pnp 00:00: [mem 0x000cc000-0x000cffff window] [ 0.431201] pnp 00:00: [mem 0x000d0000-0x000d3fff window] [ 0.431204] pnp 00:00: [mem 0x000d4000-0x000d7fff window] [ 0.431207] pnp 00:00: [mem 0x000d8000-0x000dbfff window] [ 0.431210] pnp 00:00: [mem 0x000dc000-0x000dffff window] [ 0.431213] pnp 00:00: [mem 0x000e0000-0x000e3fff window] [ 0.431216] pnp 00:00: [mem 0x000e4000-0x000e7fff window] [ 0.431219] pnp 00:00: [mem 0x000e8000-0x000ebfff window] [ 0.431222] pnp 00:00: [mem 0x000ec000-0x000effff window] [ 0.431225] pnp 00:00: [mem 0x000f0000-0x000fffff window] [ 0.431229] pnp 00:00: [mem 0xc0000000-0xdfffffff window] [ 0.431232] pnp 00:00: [mem 0xf0000000-0xfebfffff window] [ 0.431235] pnp 00:00: [mem 0xfed40000-0xfed44fff window] [ 0.431344] pnp 00:00: Plug and Play ACPI device, IDs PNP0a08 PNP0a03 (active) [ 0.431447] pnp 00:01: [mem 0xfed1c000-0xfed1ffff] [ 0.431450] pnp 00:01: [mem 0xfed14000-0xfed17fff] [ 0.431453] pnp 00:01: [mem 0xfed18000-0xfed18fff] [ 0.431456] pnp 00:01: [mem 0xfed19000-0xfed19fff] [ 0.431458] pnp 00:01: [mem 0xe0000000-0xefffffff] [ 0.431461] pnp 00:01: [mem 0xfed20000-0xfed3ffff] [ 0.431464] pnp 00:01: [mem 0xfed40000-0xfed44fff] [ 0.431467] pnp 00:01: [mem 0xfed45000-0xfed8ffff] [ 0.431559] system 00:01: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.431564] system 00:01: [mem 0xfed14000-0xfed17fff] has been reserved [ 0.431568] system 00:01: [mem 0xfed18000-0xfed18fff] has been reserved [ 0.431572] system 00:01: [mem 0xfed19000-0xfed19fff] has been reserved [ 0.431576] system 00:01: [mem 0xe0000000-0xefffffff] has been reserved [ 0.431580] system 00:01: [mem 0xfed20000-0xfed3ffff] has been reserved [ 0.431584] system 00:01: [mem 0xfed40000-0xfed44fff] has been reserved [ 0.431588] system 00:01: [mem 0xfed45000-0xfed8ffff] has been reserved [ 0.431593] system 00:01: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.431859] pnp 00:02: [io 0x0000-0x001f] [ 0.431862] pnp 00:02: [io 0x0081-0x0091] [ 0.431864] pnp 00:02: [io 0x0093-0x009f] [ 0.431867] pnp 00:02: [io 0x00c0-0x00df] [ 0.431870] pnp 00:02: [dma 4] [ 0.431931] pnp 00:02: Plug and Play ACPI device, IDs PNP0200 (active) [ 0.431946] pnp 00:03: [mem 0xff000000-0xffffffff] [ 0.432030] pnp 00:03: Plug and Play ACPI device, IDs INT0800 (active) [ 0.432131] pnp 00:04: [mem 0xfed00000-0xfed003ff] [ 0.432218] system 00:04: [mem 0xfed00000-0xfed003ff] has been reserved [ 0.432223] system 00:04: Plug and Play ACPI device, IDs PNP0103 PNP0c01 (active) [ 0.432239] pnp 00:05: [io 0x00f0] [ 0.432256] pnp 00:05: [irq 13] [ 0.432321] pnp 00:05: Plug and Play ACPI device, IDs PNP0c04 (active) [ 0.432337] pnp 00:06: [io 0x002e-0x002f] [ 0.432340] pnp 00:06: [io 0x004e-0x004f] [ 0.432343] pnp 00:06: [io 0x0061] [ 0.432345] pnp 00:06: [io 0x0063] [ 0.432348] pnp 00:06: [io 0x0065] [ 0.432351] pnp 00:06: [io 0x0067] [ 0.432353] pnp 00:06: [io 0x0080] [ 0.432355] pnp 00:06: [io 0x0092] [ 0.432358] pnp 00:06: [io 0x00b2-0x00b3] [ 0.432361] pnp 00:06: [io 0x0680-0x069f] [ 0.432363] pnp 00:06: [io 0x0800-0x080f] [ 0.432366] pnp 00:06: [io 0x1000-0x107f] [ 0.432373] pnp 00:06: [io 0x1180-0x11bf] [ 0.432375] pnp 00:06: [io 0xfe00] [ 0.432378] pnp 00:06: [io 0xff00-0xff7f] [ 0.432479] system 00:06: [io 0x0680-0x069f] has been reserved [ 0.432484] system 00:06: [io 0x0800-0x080f] has been reserved [ 0.432487] system 00:06: [io 0x1000-0x107f] has been reserved [ 0.432491] system 00:06: [io 0x1180-0x11bf] has been reserved [ 0.432495] system 00:06: [io 0xfe00] has been reserved [ 0.432499] system 00:06: [io 0xff00-0xff7f] has been reserved [ 0.432504] system 00:06: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.432517] pnp 00:07: [io 0x0070-0x0077] [ 0.432525] pnp 00:07: [irq 8] [ 0.432587] pnp 00:07: Plug and Play ACPI device, IDs PNP0b00 (active) [ 0.452092] pnp 00:08: [io 0x0060] [ 0.452096] pnp 00:08: [io 0x0064] [ 0.452112] pnp 00:08: [irq 1] [ 0.452226] pnp 00:08: Plug and Play ACPI device, IDs PNP0303 (active) [ 0.452246] pnp 00:09: [irq 12] [ 0.452305] pnp 00:09: Plug and Play ACPI device, IDs PNP0f13 (active) [ 0.452340] pnp: PnP ACPI: found 10 devices [ 0.452343] ACPI: ACPI bus type pnp unregistered [ 0.459104] PCI: max bus depth: 1 pci_try_num: 2 [ 0.459195] pci 0000:00:1f.3: BAR 0: assigned [mem 0xc0000000-0xc00000ff] [ 0.459204] pci 0000:00:1f.3: BAR 0: set to [mem 0xc0000000-0xc00000ff] (PCI address [0xc0000000-0xc00000ff]) [ 0.459209] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.459214] pci 0000:00:1c.0: bridge window [io 0x2000-0x2fff] [ 0.459222] pci 0000:00:1c.0: bridge window [mem 0xf6000000-0xf7ffffff] [ 0.459229] pci 0000:00:1c.0: bridge window [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.459239] pci 0000:00:1c.1: PCI bridge to [bus 04-04] [ 0.459244] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.459252] pci 0000:00:1c.1: bridge window [mem 0xf8000000-0xf9ffffff] [ 0.459259] pci 0000:00:1c.1: bridge window [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.459268] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 0.459272] pci 0000:00:1c.2: bridge window [io 0x4000-0x4fff] [ 0.459280] pci 0000:00:1c.2: bridge window [mem 0xfa000000-0xfbffffff] [ 0.459287] pci 0000:00:1c.2: bridge window [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.459296] pci 0000:00:1c.3: PCI bridge to [bus 06-06] [ 0.459301] pci 0000:00:1c.3: bridge window [io 0x5000-0x5fff] [ 0.459308] pci 0000:00:1c.3: bridge window [mem 0xc8000000-0xc9ffffff] [ 0.459314] pci 0000:00:1c.3: bridge window [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.459324] pci 0000:00:1e.0: PCI bridge to [bus 08-08] [ 0.459327] pci 0000:00:1e.0: bridge window [io disabled] [ 0.459334] pci 0000:00:1e.0: bridge window [mem 0xfc200000-0xfc2fffff] [ 0.459340] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.459373] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 0.459380] pci 0000:00:1c.0: setting latency timer to 64 [ 0.459399] pci 0000:00:1c.1: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 0.459405] pci 0000:00:1c.1: setting latency timer to 64 [ 0.459419] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.459425] pci 0000:00:1c.2: setting latency timer to 64 [ 0.459438] pci 0000:00:1c.3: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 0.459444] pci 0000:00:1c.3: setting latency timer to 64 [ 0.459455] pci 0000:00:1e.0: setting latency timer to 64 [ 0.459460] pci_bus 0000:00: resource 0 [io 0x0000-0xffff] [ 0.459464] pci_bus 0000:00: resource 1 [mem 0x00000000-0xfffffffff] [ 0.459467] pci_bus 0000:02: resource 0 [io 0x2000-0x2fff] [ 0.459470] pci_bus 0000:02: resource 1 [mem 0xf6000000-0xf7ffffff] [ 0.459474] pci_bus 0000:02: resource 2 [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.459478] pci_bus 0000:04: resource 0 [io 0x3000-0x3fff] [ 0.459481] pci_bus 0000:04: resource 1 [mem 0xf8000000-0xf9ffffff] [ 0.459484] pci_bus 0000:04: resource 2 [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.459488] pci_bus 0000:05: resource 0 [io 0x4000-0x4fff] [ 0.459491] pci_bus 0000:05: resource 1 [mem 0xfa000000-0xfbffffff] [ 0.459495] pci_bus 0000:05: resource 2 [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.459498] pci_bus 0000:06: resource 0 [io 0x5000-0x5fff] [ 0.459501] pci_bus 0000:06: resource 1 [mem 0xc8000000-0xc9ffffff] [ 0.459505] pci_bus 0000:06: resource 2 [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.459508] pci_bus 0000:08: resource 1 [mem 0xfc200000-0xfc2fffff] [ 0.459512] pci_bus 0000:08: resource 4 [io 0x0000-0xffff] [ 0.459515] pci_bus 0000:08: resource 5 [mem 0x00000000-0xfffffffff] [ 0.459580] NET: Registered protocol family 2 [ 0.459816] IP route cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.461759] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 0.468207] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 0.469024] TCP: Hash tables configured (established 524288 bind 65536) [ 0.469028] TCP reno registered [ 0.469052] UDP hash table entries: 2048 (order: 4, 65536 bytes) [ 0.469120] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) [ 0.469325] NET: Registered protocol family 1 [ 0.469358] pci 0000:00:02.0: Boot video device [ 0.469577] PCI: CLS 64 bytes, default 64 [ 0.469604] Simple Boot Flag at 0x36 set to 0x1 [ 0.470069] audit: initializing netlink socket (disabled) [ 0.470088] type=2000 audit(1317800082.464:1): initialized [ 0.509918] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.531362] VFS: Disk quotas dquot_6.5.2 [ 0.531454] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.532343] fuse init (API version 7.16) [ 0.532465] msgmni has been set to 5719 [ 0.532931] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.532975] io scheduler noop registered [ 0.532978] io scheduler deadline registered [ 0.533033] io scheduler cfq registered (default) [ 0.533206] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.533281] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 0.533378] pcieport 0000:00:1c.1: setting latency timer to 64 [ 0.533444] pcieport 0000:00:1c.1: irq 41 for MSI/MSI-X [ 0.533540] pcieport 0000:00:1c.2: setting latency timer to 64 [ 0.533607] pcieport 0000:00:1c.2: irq 42 for MSI/MSI-X [ 0.533705] pcieport 0000:00:1c.3: setting latency timer to 64 [ 0.533770] pcieport 0000:00:1c.3: irq 43 for MSI/MSI-X [ 0.533898] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.533934] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.533994] intel_idle: MWAIT substates: 0x22220 [ 0.533997] intel_idle: does not run on family 6 model 15 [ 0.534105] ACPI: Deprecated procfs I/F for AC is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared [ 0.534186] ACPI: AC Adapter [ACAD] (on-line) [ 0.534267] input: Lid Switch as /devices/LNXSYSTM:00/device:00/PNP0C0D:00/input/input0 [ 0.534291] ACPI: Lid Switch [LID0] [ 0.534348] input: Power Button as /devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input1 [ 0.534353] ACPI: Power Button [PWRB] [ 0.534429] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2 [ 0.534434] ACPI: Power Button [PWRF] [ 0.534479] ACPI: acpi_idle registered with cpuidle [ 0.536970] Monitor-Mwait will be used to enter C-1 state [ 0.537024] Monitor-Mwait will be used to enter C-2 state [ 0.537059] Monitor-Mwait will be used to enter C-3 state [ 0.537066] Marking TSC unstable due to TSC halts in idle [ 0.576306] ACPI: Deprecated procfs I/F for battery is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared [ 0.576339] ERST: Table is not found! [ 0.576477] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled [ 0.596514] ACPI: Battery Slot [BAT1] (battery present) [ 0.756873] Freeing initrd memory: 19464k freed [ 0.789948] Linux agpgart interface v0.103 [ 0.790084] agpgart-intel 0000:00:00.0: Intel 965GM Chipset [ 0.790242] agpgart-intel 0000:00:00.0: detected gtt size: 524288K total, 262144K mappable [ 0.791097] agpgart-intel 0000:00:00.0: detected 8192K stolen memory [ 0.791250] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xd0000000 [ 0.792794] brd: module loaded [ 0.793486] loop: module loaded [ 0.793683] ata_piix 0000:00:1f.1: version 2.13 [ 0.793701] ata_piix 0000:00:1f.1: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 0.793746] ata_piix 0000:00:1f.1: setting latency timer to 64 [ 0.794143] scsi0 : ata_piix [ 0.794282] scsi1 : ata_piix [ 0.794784] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0x1810 irq 14 [ 0.794789] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x1818 irq 15 [ 0.795227] Fixed MDIO Bus: probed [ 0.795261] PPP generic driver version 2.4.2 [ 0.795315] tun: Universal TUN/TAP device driver, 1.6 [ 0.795318] tun: (C) 1999-2004 Max Krasnyansky [ 0.795429] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.795451] ehci_hcd 0000:00:1a.7: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.795472] ehci_hcd 0000:00:1a.7: setting latency timer to 64 [ 0.795477] ehci_hcd 0000:00:1a.7: EHCI Host Controller [ 0.795524] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 1 [ 0.795567] ehci_hcd 0000:00:1a.7: debug port 1 [ 0.799463] ehci_hcd 0000:00:1a.7: cache line size of 64 is not supported [ 0.799485] ehci_hcd 0000:00:1a.7: irq 18, io mem 0xfc504800 [ 0.812020] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00 [ 0.812182] hub 1-0:1.0: USB hub found [ 0.812189] hub 1-0:1.0: 4 ports detected [ 0.812291] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.812305] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 0.812310] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 0.812363] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 2 [ 0.812398] ehci_hcd 0000:00:1d.7: debug port 1 [ 0.816279] ehci_hcd 0000:00:1d.7: cache line size of 64 is not supported [ 0.816301] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xfc504c00 [ 0.832023] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 0.832151] hub 2-0:1.0: USB hub found [ 0.832157] hub 2-0:1.0: 6 ports detected [ 0.832258] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.832276] uhci_hcd: USB Universal Host Controller Interface driver [ 0.832305] uhci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.832314] uhci_hcd 0000:00:1a.0: setting latency timer to 64 [ 0.832319] uhci_hcd 0000:00:1a.0: UHCI Host Controller [ 0.832366] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 3 [ 0.832412] uhci_hcd 0000:00:1a.0: irq 16, io base 0x00001820 [ 0.832569] hub 3-0:1.0: USB hub found [ 0.832575] hub 3-0:1.0: 2 ports detected [ 0.832668] uhci_hcd 0000:00:1a.1: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 0.832679] uhci_hcd 0000:00:1a.1: setting latency timer to 64 [ 0.832684] uhci_hcd 0000:00:1a.1: UHCI Host Controller [ 0.832731] uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 4 [ 0.832775] uhci_hcd 0000:00:1a.1: irq 21, io base 0x00001840 [ 0.832936] hub 4-0:1.0: USB hub found [ 0.832941] hub 4-0:1.0: 2 ports detected [ 0.833028] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.833037] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 0.833042] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 0.833099] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 5 [ 0.833134] uhci_hcd 0000:00:1d.0: irq 23, io base 0x00001860 [ 0.833291] hub 5-0:1.0: USB hub found [ 0.833296] hub 5-0:1.0: 2 ports detected [ 0.833384] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.833392] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 0.833397] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 0.833448] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 6 [ 0.833493] uhci_hcd 0000:00:1d.1: irq 19, io base 0x00001880 [ 0.833649] hub 6-0:1.0: USB hub found [ 0.833655] hub 6-0:1.0: 2 ports detected [ 0.833737] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.833746] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 0.833750] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 0.833797] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 7 [ 0.833832] uhci_hcd 0000:00:1d.2: irq 18, io base 0x000018a0 [ 0.833984] hub 7-0:1.0: USB hub found [ 0.833990] hub 7-0:1.0: 2 ports detected [ 0.834133] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 0.858635] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.858644] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.858792] mousedev: PS/2 mouse device common for all mice [ 0.860515] rtc_cmos 00:07: RTC can wake from S4 [ 0.860650] rtc_cmos 00:07: rtc core: registered rtc_cmos as rtc0 [ 0.860686] rtc0: alarms up to one month, y3k, 242 bytes nvram, hpet irqs [ 0.860821] device-mapper: uevent: version 1.0.3 [ 0.860928] device-mapper: ioctl: 4.20.0-ioctl (2011-02-02) initialised: dm-devel@redhat.com [ 0.861015] cpuidle: using governor ladder [ 0.861137] cpuidle: using governor menu [ 0.861140] EFI Variables Facility v0.08 2004-May-17 [ 0.861497] TCP cubic registered [ 0.861666] NET: Registered protocol family 10 [ 0.862339] NET: Registered protocol family 17 [ 0.862362] Registering the dns_resolver key type [ 0.862505] PM: Hibernation image not present or could not be loaded. [ 0.862521] registered taskstats version 1 [ 0.881709] Magic number: 15:169:571 [ 0.881852] rtc_cmos 00:07: setting system clock to 2011-10-05 07:34:43 UTC (1317800083) [ 0.882695] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.882699] EDD information not available. [ 0.885384] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3 [ 0.964510] ata1.00: ATAPI: MATSHITADVD-RAM UJ-850 z, RB32, max UDMA/33 [ 0.980374] ata1.00: configured for UDMA/33 [ 0.983110] scsi 0:0:0:0: CD-ROM MATSHITA DVD-RAM UJ-850 z RB32 PQ: 0 ANSI: 5 [ 0.985684] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 0.985690] cdrom: Uniform CD-ROM driver Revision: 3.20 [ 0.985886] sr 0:0:0:0: Attached scsi CD-ROM sr0 [ 0.985957] sr 0:0:0:0: Attached scsi generic sg0 type 5 [ 0.988684] Freeing unused kernel memory: 984k freed [ 0.989019] Write protecting the kernel read-only data: 10240k [ 0.989354] Freeing unused kernel memory: 20k freed [ 0.996526] Freeing unused kernel memory: 1400k freed [ 1.023090] udevd[92]: starting version 173 [ 1.095474] [drm] Initialized drm 1.1.0 20060810 [ 1.111223] tg3.c:v3.119 (May 18, 2011) [ 1.111255] tg3 0000:06:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 1.111275] tg3 0000:06:00.0: setting latency timer to 64 [ 1.123354] wmi: Mapper loaded [ 1.135292] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.135301] i915 0000:00:02.0: setting latency timer to 64 [ 1.229432] i915 0000:00:02.0: irq 44 for MSI/MSI-X [ 1.229442] [drm] Supports vblank timestamp caching Rev 1 (10.10.2010). [ 1.229444] [drm] Driver supports precise vblank timestamp query. [ 1.229504] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=io+mem,decodes=io+mem:owns=io+mem [ 1.231431] sdhci: Secure Digital Host Controller Interface driver [ 1.231435] sdhci: Copyright(c) Pierre Ossman [ 1.231761] sdhci-pci 0000:08:06.1: SDHCI controller found [1180:0822] (rev 19) [ 1.231780] sdhci-pci 0000:08:06.1: PCI INT B -> GSI 23 (level, low) -> IRQ 23 [ 1.232804] sdhci-pci 0000:08:06.1: Will use DMA mode even though HW doesn't fully claim to support it. [ 1.251222] mmc0: no vmmc regulator found [ 1.252265] Registered led device: mmc0:: [ 1.258216] mmc0: SDHCI controller on PCI [0000:08:06.1] using DMA [ 1.278826] tg3 0000:06:00.0: eth0: Tigon3 [partno(BCM95906) rev c002] (PCI Express) MAC address 00:1b:38:0c:7f:47 [ 1.278833] tg3 0000:06:00.0: eth0: attached PHY is 5906 (10/100Base-TX Ethernet) (WireSpeed[0], EEE[0]) [ 1.278838] tg3 0000:06:00.0: eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1] [ 1.278842] tg3 0000:06:00.0: eth0: dma_rwctrl[76180000] dma_mask[64-bit] [ 1.288114] firewire_ohci 0000:08:06.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 1.288352] fixme: max PWM is zero. [ 1.321105] [drm] initialized overlay support [ 1.363095] firewire_ohci: Added fw-ohci device 0000:08:06.0, OHCI v1.10, 4 IR + 4 IT contexts, quirks 0x1 [ 1.429305] usb 1-4: new high speed USB device number 4 using ehci_hcd [ 1.510188] fbcon: inteldrmfb (fb0) is primary device [ 1.510267] Console: switching to colour frame buffer device 160x50 [ 1.510301] fb0: inteldrmfb frame buffer device [ 1.510304] drm: registered panic notifier [ 1.596139] acpi device:08: registered as cooling_device2 [ 1.596350] input: Video Bus as /devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:01/input/input4 [ 1.596428] ACPI: Video Device [GFX0] (multi-head: yes rom: no post: no) [ 1.596505] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 1.596723] ahci 0000:00:1f.2: version 3.0 [ 1.596748] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.596832] ahci 0000:00:1f.2: irq 45 for MSI/MSI-X [ 1.596928] ahci 0000:00:1f.2: AHCI 0001.0100 32 slots 3 ports 3 Gbps 0x7 impl SATA mode [ 1.596934] ahci 0000:00:1f.2: flags: 64bit ncq sntf pm led clo pio slum part ccc [ 1.596941] ahci 0000:00:1f.2: setting latency timer to 64 [ 1.600697] scsi2 : ahci [ 1.601002] scsi3 : ahci [ 1.601154] scsi4 : ahci [ 1.601328] ata3: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504100 irq 45 [ 1.601335] ata4: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504180 irq 45 [ 1.601340] ata5: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504200 irq 45 [ 1.860262] firewire_core: created device fw0: GUID 00023f7bac4040de, S400 [ 1.920122] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.921792] ata3.00: unexpected _GTF length (8) [ 1.922070] ata3.00: ATA-8: WDC WD2500BEKT-75PVMT0, 01.01A01, max UDMA/133 [ 1.922077] ata3.00: 488397168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA [ 1.923756] ata3.00: unexpected _GTF length (8) [ 1.924053] ata4: SATA link down (SStatus 0 SControl 300) [ 1.924081] ata3.00: configured for UDMA/133 [ 1.924106] ata5: SATA link down (SStatus 0 SControl 300) [ 1.924318] scsi 2:0:0:0: Direct-Access ATA WDC WD2500BEKT-7 01.0 PQ: 0 ANSI: 5 [ 1.924525] sd 2:0:0:0: Attached scsi generic sg1 type 0 [ 1.924642] sd 2:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB) [ 1.924823] sd 2:0:0:0: [sda] Write Protect is off [ 1.924828] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.924898] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.020840] sda: sda1 sda2 sda3 sda4 < sda5 > [ 2.021461] sd 2:0:0:0: [sda] Attached SCSI disk [ 2.032059] usb 3-1: new full speed USB device number 2 using uhci_hcd [ 2.464056] usb 4-1: new full speed USB device number 2 using uhci_hcd [ 2.872042] usb 6-1: new low speed USB device number 2 using uhci_hcd [ 3.093235] input: MLK Trust Mouse as /devices/pci0000:00/0000:00:1d.1/usb6/6-1/6-1:1.0/input/input5 [ 3.093727] generic-usb 0003:04FC:05DA.0001: input,hiddev0,hidraw0: USB HID v1.10 Mouse [MLK Trust Mouse] on usb-0000:00:1d.1-1/input0 [ 3.093905] usbcore: registered new interface driver usbhid [ 3.093909] usbhid: USB HID core driver [ 3.288960] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null) [ 3.308073] usb 6-2: new full speed USB device number 3 using uhci_hcd [ 3.720052] usb 7-1: new low speed USB device number 2 using uhci_hcd [ 3.918393] input: LITEON Technology USB Multimedia Keyboard as /devices/pci0000:00/0000:00:1d.2/usb7/7-1/7-1:1.0/input/input6 [ 3.918495] generic-usb 0003:046D:C312.0002: input,hidraw1: USB HID v1.10 Keyboard [LITEON Technology USB Multimedia Keyboard] on usb-0000:00:1d.2-1/input0 [ 5.565904] Adding 15999996k swap on /dev/sda3. Priority:-1 extents:1 across:15999996k [ 5.691364] udevd[373]: starting version 173 [ 6.303871] lp: driver loaded but no devices found [ 7.040655] cfg80211: Calling CRDA to update world regulatory domain [ 7.159284] r852 0000:08:06.3: PCI INT B -> GSI 23 (level, low) -> IRQ 23 [ 7.159297] r852 0000:08:06.3: setting latency timer to 64 [ 7.159394] r852: Non dma capable device detected, dma disabled [ 7.159411] r852: driver loaded successfully [ 7.169632] iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, in-tree:s [ 7.169637] iwl3945: Copyright(c) 2003-2011 Intel Corporation [ 7.169734] iwl3945 0000:04:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 7.169751] iwl3945 0000:04:00.0: setting latency timer to 64 [ 7.225063] iwl3945 0000:04:00.0: Tunable channels: 13 802.11bg, 23 802.11a channels [ 7.225067] iwl3945 0000:04:00.0: Detected Intel Wireless WiFi Link 3945ABG [ 7.225225] iwl3945 0000:04:00.0: irq 46 for MSI/MSI-X [ 7.225470] Registered led device: phy0-led [ 7.225511] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 7.521071] ieee80211 phy0: Selected rate control algorithm 'iwl-3945-rs' [ 7.728682] udevd[389]: renamed network interface eth0 to eth1 [ 7.785421] udevd[392]: renamed network interface wlan0 to wlan1 [ 7.839555] device-mapper: multipath: version 1.3.0 loaded [ 7.920206] Synaptics Touchpad, model: 1, fw: 6.3, id: 0x25c0b1, caps: 0xa04713/0x200000/0x0 [ 8.001393] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input7 [ 8.103705] Linux video capture interface: v2.00 [ 8.142601] uvcvideo: Found UVC 1.00 device USB 2.0 Camera (04f2:b013) [ 8.145395] input: USB 2.0 Camera as /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/input/input8 [ 8.145503] usbcore: registered new interface driver uvcvideo [ 8.145506] USB Video Class driver (v1.1.0) [ 8.268868] gspca: v2.13.0 registered [ 8.426860] Bluetooth: Core ver 2.16 [ 8.426898] NET: Registered protocol family 31 [ 8.426901] Bluetooth: HCI device and connection manager initialized [ 8.426905] Bluetooth: HCI socket layer initialized [ 8.426908] Bluetooth: L2CAP socket layer initialized [ 8.426983] Bluetooth: SCO socket layer initialized [ 8.445120] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 8.445873] usbcore: registered new interface driver btusb [ 8.596127] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 8.596132] cfg80211: World regulatory domain updated: [ 8.596135] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 8.596139] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.596144] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 8.596147] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 8.596151] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.596155] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.713241] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 8.713332] HDA Intel 0000:00:1b.0: irq 47 for MSI/MSI-X [ 8.713375] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 9.214524] type=1400 audit(1317800091.827:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient" pid=762 comm="apparmor_parser" [ 9.214539] type=1400 audit(1317800091.827:3): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=760 comm="apparmor_parser" [ 9.214899] type=1400 audit(1317800091.827:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=762 comm="apparmor_parser" [ 9.214917] type=1400 audit(1317800091.827:5): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=760 comm="apparmor_parser" [ 9.215139] type=1400 audit(1317800091.827:6): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=762 comm="apparmor_parser" [ 9.215162] type=1400 audit(1317800091.827:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=760 comm="apparmor_parser" [ 9.215989] type=1400 audit(1317800091.827:8): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=761 comm="apparmor_parser" [ 9.216386] type=1400 audit(1317800091.831:9): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=761 comm="apparmor_parser" [ 9.216637] type=1400 audit(1317800091.831:10): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=761 comm="apparmor_parser" [ 9.565602] input: zc3xx as /devices/pci0000:00/0000:00:1a.0/usb3/3-1/input/input9 [ 9.565840] usbcore: registered new interface driver zc3xx [ 9.567768] usbcore: registered new interface driver snd-usb-audio [ 10.957262] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro [ 11.498897] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 11.610016] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null) [ 13.338782] type=1400 audit(1317800095.951:11): apparmor="STATUS" operation="profile_load" name="/usr/lib/lightdm/lightdm-guest-session-wrapper" pid=1170 comm="apparmor_parser" [ 14.107842] ppdev: user-space parallel port driver [ 16.201248] microcode: CPU0 sig=0x6fd, pf=0x80, revision=0xa1 [ 16.241864] microcode: CPU1 sig=0x6fd, pf=0x80, revision=0xa1 [ 16.244584] microcode: Microcode Update Driver: v2.00 , Peter Oruba [ 16.257389] iwl3945 0000:04:00.0: loaded firmware version 15.32.2.9 [ 16.319712] microcode: CPU0 updated to revision 0xa4, date = 2010-10-02 [ 16.320392] microcode: CPU1 updated to revision 0xa4, date = 2010-10-02 [ 16.327663] ADDRCONF(NETDEV_UP): wlan1: link is not ready [ 16.411245] tg3 0000:06:00.0: irq 48 for MSI/MSI-X [ 16.441602] ADDRCONF(NETDEV_UP): eth1: link is not ready [ 17.163336] init: failsafe main process (1112) killed by TERM signal [ 17.369512] init: gdm main process (1340) killed by TERM signal [ 18.121686] tg3 0000:06:00.0: eth1: Link is up at 100 Mbps, full duplex [ 18.121691] tg3 0000:06:00.0: eth1: Flow control is on for TX and on for RX [ 18.122295] ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready [ 21.210518] RPC: Registered named UNIX socket transport module. [ 21.210523] RPC: Registered udp transport module. [ 21.210525] RPC: Registered tcp transport module. [ 21.210528] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 21.445931] Installing knfsd (copyright (C) 1996 okir@monad.swb.de). [ 21.627527] NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory [ 21.636586] NFSD: starting 90-second grace period [ 24.852307] vboxdrv: Found 2 processor cores. [ 24.852593] vboxdrv: fAsync=0 offMin=0x1c2 offMax=0xae6 [ 24.852666] vboxdrv: TSC mode is 'synchronous', kernel timer mode is 'normal'. [ 24.852669] vboxdrv: Successfully loaded version 4.1.2_Ubuntu (interface 0x00190000). [ 25.101599] vboxpci: IOMMU not found (not registered) [ 27.046401] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 27.046405] Bluetooth: BNEP filters: protocol multicast [ 27.081903] Bluetooth: RFCOMM TTY layer initialized [ 27.081919] Bluetooth: RFCOMM socket layer initialized [ 27.081921] Bluetooth: RFCOMM ver 1.11 [ 28.752057] eth1: no IPv6 routers present [ 33.139443] init: plymouth-stop pre-start process (2005) terminated with status 1 [ 33.628053] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro,commit=0 [ 34.056830] EXT4-fs (sda1): re-mounted. Opts: commit=0 [ 34.217110] EXT4-fs (sda5): re-mounted. Opts: commit=0 [ 45.192742] wlan1: authenticate with 00:1a:c1:38:47:d4 (try 1) [ 45.196319] wlan1: authenticated [ 45.199717] wlan1: associate with 00:1a:c1:38:47:d4 (try 1) [ 45.202749] wlan1: RX AssocResp from 00:1a:c1:38:47:d4 (capab=0x431 status=0 aid=2) [ 45.202758] wlan1: associated [ 45.206342] ADDRCONF(NETDEV_CHANGE): wlan1: link becomes ready [ 45.206456] cfg80211: Calling CRDA for country: GB [ 45.213483] cfg80211: Updating information on frequency 2412 MHz for a 20 MHz width channel with regulatory rule: [ 45.213493] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213498] cfg80211: Updating information on frequency 2417 MHz for a 20 MHz width channel with regulatory rule: [ 45.213505] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213509] cfg80211: Updating information on frequency 2422 MHz for a 20 MHz width channel with regulatory rule: [ 45.213516] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213520] cfg80211: Updating information on frequency 2427 MHz for a 20 MHz width channel with regulatory rule: [ 45.213526] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213531] cfg80211: Updating information on frequency 2432 MHz for a 20 MHz width channel with regulatory rule: [ 45.213537] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213542] cfg80211: Updating information on frequency 2437 MHz for a 20 MHz width channel with regulatory rule: [ 45.213547] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213552] cfg80211: Updating information on frequency 2442 MHz for a 20 MHz width channel with regulatory rule: [ 45.213558] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213563] cfg80211: Updating information on frequency 2447 MHz for a 20 MHz width channel with regulatory rule: [ 45.213569] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213573] cfg80211: Updating information on frequency 2452 MHz for a 20 MHz width channel with regulatory rule: [ 45.213579] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213584] cfg80211: Updating information on frequency 2457 MHz for a 20 MHz width channel with regulatory rule: [ 45.213590] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213594] cfg80211: Updating information on frequency 2462 MHz for a 20 MHz width channel with regulatory rule: [ 45.213600] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213605] cfg80211: Updating information on frequency 2467 MHz for a 20 MHz width channel with regulatory rule: [ 45.213611] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213615] cfg80211: Updating information on frequency 2472 MHz for a 20 MHz width channel with regulatory rule: [ 45.213621] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213626] cfg80211: Disabling freq 5170 MHz [ 45.213630] cfg80211: Updating information on frequency 5180 MHz for a 20 MHz width channel with regulatory rule: [ 45.213636] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213640] cfg80211: Updating information on frequency 5190 MHz for a 20 MHz width channel with regulatory rule: [ 45.213646] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213651] cfg80211: Updating information on frequency 5200 MHz for a 20 MHz width channel with regulatory rule: [ 45.213657] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213662] cfg80211: Updating information on frequency 5210 MHz for a 20 MHz width channel with regulatory rule: [ 45.213667] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213672] cfg80211: Updating information on frequency 5220 MHz for a 20 MHz width channel with regulatory rule: [ 45.213678] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213683] cfg80211: Updating information on frequency 5230 MHz for a 20 MHz width channel with regulatory rule: [ 45.213688] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213693] cfg80211: Updating information on frequency 5240 MHz for a 20 MHz width channel with regulatory rule: [ 45.213699] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213704] cfg80211: Updating information on frequency 5260 MHz for a 20 MHz width channel with regulatory rule: [ 45.213710] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213714] cfg80211: Updating information on frequency 5280 MHz for a 20 MHz width channel with regulatory rule: [ 45.213720] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213725] cfg80211: Updating information on frequency 5300 MHz for a 20 MHz width channel with regulatory rule: [ 45.213731] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213736] cfg80211: Updating information on frequency 5320 MHz for a 20 MHz width channel with regulatory rule: [ 45.213742] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213746] cfg80211: Updating information on frequency 5500 MHz for a 20 MHz width channel with regulatory rule: [ 45.213752] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213757] cfg80211: Updating information on frequency 5520 MHz for a 20 MHz width channel with regulatory rule: [ 45.213763] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213768] cfg80211: Updating information on frequency 5540 MHz for a 20 MHz width channel with regulatory rule: [ 45.213774] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213779] cfg80211: Updating information on frequency 5560 MHz for a 20 MHz width channel with regulatory rule: [ 45.213785] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213789] cfg80211: Updating information on frequency 5580 MHz for a 20 MHz width channel with regulatory rule: [ 45.213795] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213800] cfg80211: Updating information on frequency 5600 MHz for a 20 MHz width channel with regulatory rule: [ 45.213806] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213810] cfg80211: Updating information on frequency 5620 MHz for a 20 MHz width channel with regulatory rule: [ 45.213816] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213821] cfg80211: Updating information on frequency 5640 MHz for a 20 MHz width channel with regulatory rule: [ 45.213827] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213831] cfg80211: Updating information on frequency 5660 MHz for a 20 MHz width channel with regulatory rule: [ 45.213837] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213842] cfg80211: Updating information on frequency 5680 MHz for a 20 MHz width channel with regulatory rule: [ 45.213848] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213852] cfg80211: Updating information on frequency 5700 MHz for a 20 MHz width channel with regulatory rule: [ 45.213858] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213864] cfg80211: Regulatory domain changed to country: GB [ 45.213868] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 45.213873] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213879] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213884] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213889] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm) [ 52.640123] eth1: no IPv6 routers present [ 55.208282] wlan1: disassociating from 00:1a:c1:38:47:d4 by local choice (reason=3) [ 55.214021] cfg80211: All devices are disconnected, going to restore regulatory settings [ 55.214032] cfg80211: Restoring regulatory settings [ 55.214052] cfg80211: Calling CRDA to update world regulatory domain [ 55.214778] wlan1: deauthenticating from 00:1a:c1:38:47:d4 by local choice (reason=3) [ 55.221291] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 55.221299] cfg80211: World regulatory domain updated: [ 55.221303] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 55.221309] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.221315] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 55.221321] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 55.221327] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.221333] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.392119] wlan1: no IPv6 routers present [ 58.763822] wlan1: authenticate with 00:1a:c1:38:47:d4 (try 1) [ 58.765582] wlan1: authenticated [ 58.766582] wlan1: associate with 00:1a:c1:38:47:d4 (try 1) [ 58.769972] wlan1: RX ReassocResp from 00:1a:c1:38:47:d4 (capab=0x431 status=0 aid=2) [ 58.769980] wlan1: associated [ 58.773587] cfg80211: Calling CRDA for country: GB [ 58.778304] cfg80211: Updating information on frequency 2412 MHz for a 20 MHz width channel with regulatory rule: [ 58.778310] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778314] cfg80211: Updating information on frequency 2417 MHz for a 20 MHz width channel with regulatory rule: [ 58.778318] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778321] cfg80211: Updating information on frequency 2422 MHz for a 20 MHz width channel with regulatory rule: [ 58.778325] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778328] cfg80211: Updating information on frequency 2427 MHz for a 20 MHz width channel with regulatory rule: [ 58.778332] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778335] cfg80211: Updating information on frequency 2432 MHz for a 20 MHz width channel with regulatory rule: [ 58.778340] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778343] cfg80211: Updating information on frequency 2437 MHz for a 20 MHz width channel with regulatory rule: [ 58.778347] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778350] cfg80211: Updating information on frequency 2442 MHz for a 20 MHz width channel with regulatory rule: [ 58.778354] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778357] cfg80211: Updating information on frequency 2447 MHz for a 20 MHz width channel with regulatory rule: [ 58.778361] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778364] cfg80211: Updating information on frequency 2452 MHz for a 20 MHz width channel with regulatory rule: [ 58.778368] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778371] cfg80211: Updating information on frequency 2457 MHz for a 20 MHz width channel with regulatory rule: [ 58.778375] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778378] cfg80211: Updating information on frequency 2462 MHz for a 20 MHz width channel with regulatory rule: [ 58.778382] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778385] cfg80211: Updating information on frequency 2467 MHz for a 20 MHz width channel with regulatory rule: [ 58.778389] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778392] cfg80211: Updating information on frequency 2472 MHz for a 20 MHz width channel with regulatory rule: [ 58.778396] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778399] cfg80211: Disabling freq 5170 MHz [ 58.778402] cfg80211: Updating information on frequency 5180 MHz for a 20 MHz width channel with regulatory rule: [ 58.778406] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778409] cfg80211: Updating information on frequency 5190 MHz for a 20 MHz width channel with regulatory rule: [ 58.778413] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778416] cfg80211: Updating information on frequency 5200 MHz for a 20 MHz width channel with regulatory rule: [ 58.778420] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778423] cfg80211: Updating information on frequency 5210 MHz for a 20 MHz width channel with regulatory rule: [ 58.778427] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778430] cfg80211: Updating information on frequency 5220 MHz for a 20 MHz width channel with regulatory rule: [ 58.778434] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778437] cfg80211: Updating information on frequency 5230 MHz for a 20 MHz width channel with regulatory rule: [ 58.778441] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778444] cfg80211: Updating information on frequency 5240 MHz for a 20 MHz width channel with regulatory rule: [ 58.778448] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778452] cfg80211: Updating information on frequency 5260 MHz for a 20 MHz width channel with regulatory rule: [ 58.778456] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778459] cfg80211: Updating information on frequency 5280 MHz for a 20 MHz width channel with regulatory rule: [ 58.778463] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778466] cfg80211: Updating information on frequency 5300 MHz for a 20 MHz width channel with regulatory rule: [ 58.778470] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778473] cfg80211: Updating information on frequency 5320 MHz for a 20 MHz width channel with regulatory rule: [ 58.778477] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778480] cfg80211: Updating information on frequency 5500 MHz for a 20 MHz width channel with regulatory rule: [ 58.778484] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778487] cfg80211: Updating information on frequency 5520 MHz for a 20 MHz width channel with regulatory rule: [ 58.778491] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778494] cfg80211: Updating information on frequency 5540 MHz for a 20 MHz width channel with regulatory rule: [ 58.778498] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778501] cfg80211: Updating information on frequency 5560 MHz for a 20 MHz width channel with regulatory rule: [ 58.778505] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778508] cfg80211: Updating information on frequency 5580 MHz for a 20 MHz width channel with regulatory rule: [ 58.778512] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778515] cfg80211: Updating information on frequency 5600 MHz for a 20 MHz width channel with regulatory rule: [ 58.778519] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778522] cfg80211: Updating information on frequency 5620 MHz for a 20 MHz width channel with regulatory rule: [ 58.778526] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778529] cfg80211: Updating information on frequency 5640 MHz for a 20 MHz width channel with regulatory rule: [ 58.778533] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778536] cfg80211: Updating information on frequency 5660 MHz for a 20 MHz width channel with regulatory rule: [ 58.778540] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778543] cfg80211: Updating information on frequency 5680 MHz for a 20 MHz width channel with regulatory rule: [ 58.778547] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778550] cfg80211: Updating information on frequency 5700 MHz for a 20 MHz width channel with regulatory rule: [ 58.778554] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778558] cfg80211: Regulatory domain changed to country: GB [ 58.778560] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 58.778564] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778568] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778571] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778575] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm) [ 70.176124] wlan1: no IPv6 routers present [ 75.152080] eth1: no IPv6 routers present [ 98.736094] eth1: no IPv6 routers present [ 648.357292] ecryptfs_mount: kern_path() failed [ 648.388155] Reading sb failed; rc = [-2] [ 670.016019] eth1: no IPv6 routers present [ 688.176048] eth1: no IPv6 routers present [ 711.096140] eth1: no IPv6 routers present fwts-test/arg-results-0001/results-0005.log000066400000000000000000000136121465205512700204440ustar00rootroot00000000000000klog klog: Scan kernel log for errors and warnings. klog ---------------------------------------------------------- klog Test 1 of 1: Kernel log error check. klog FAILED [MEDIUM] KlogAcpiMultipleMadt: Test 1, MEDIUM klog Kernel message: [ 0.000000] ACPI: BIOS bug: multiple APIC klog /MADT found, using 0 klog klog ADVICE: The BIOS is supposed to supply just one APIC/MADT, klog however, more than one has been found. One can use klog acpi_apic_instance=N to specify the Nth ACPI/MADT to use klog as an override if required. klog klog Kernel message: [ 0.228089] [Firmware Bug]: ACPI: BIOS klog _OSI(Linux) query ignored klog klog ADVICE: This is not exactly a failure mode but a warning klog from the kernel. The _OSI() method has implemented a match klog to the 'Linux' query in the DSDT and this is redundant klog because the ACPI driver matches onto the Windows _OSI klog strings by default. klog klog FAILED [CRITICAL] KlogPciAcpiOscRequestFailed: Test 1, klog CRITICAL Kernel message: [ 0.396181] pci0000:00: ACPI _OSC klog request failed (AE_NOT_FOUND), returned control mask: 0x1d klog klog ADVICE: The _OSC method evaluation failed, which will klog result in disabling PCIe functionality, for example, the klog Linux kernel has to disable Active State Power Management klog (ASPM) which means that PCIe power management is not klog optimally configured. klog klog FAILED [LOW] KlogAcpiDeprecatedProcfsInterface: Test 1, klog LOW Kernel message: [ 0.534105] ACPI: Deprecated procfs I klog /F for AC is loaded, please retry with klog CONFIG_ACPI_PROCFS_POWER cleared klog klog ADVICE: Using an old procfs interface for ACPI AC Adapter, klog this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This klog should be disabled for kernels > 2.6.37. klog klog FAILED [LOW] KlogAcpiDeprecatedProcfsInterface: Test 1, klog LOW Kernel message: [ 0.576306] ACPI: Deprecated procfs I klog /F for battery is loaded, please retry with klog CONFIG_ACPI_PROCFS_POWER cleared klog klog ADVICE: Using an old procfs interface for ACPI battery, klog this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This klog should be disabled for kernels > 2.6.37. klog klog Found 4 unique errors in kernel log. klog klog ========================================================== klog 0 passed, 4 failed, 0 warning, 0 aborted, 0 skipped, 0 klog info only. klog ========================================================== klog klog: Scan kernel log for errors and warnings. klog ---------------------------------------------------------- klog Test 1 of 1: Kernel log error check. klog FAILED [MEDIUM] KlogAcpiMultipleMadt: Test 1, MEDIUM klog Kernel message: [ 0.000000] ACPI: BIOS bug: multiple APIC klog /MADT found, using 0 klog klog ADVICE: The BIOS is supposed to supply just one APIC/MADT, klog however, more than one has been found. One can use klog acpi_apic_instance=N to specify the Nth ACPI/MADT to use klog as an override if required. klog klog Kernel message: [ 0.228089] [Firmware Bug]: ACPI: BIOS klog _OSI(Linux) query ignored klog klog ADVICE: This is not exactly a failure mode but a warning klog from the kernel. The _OSI() method has implemented a match klog to the 'Linux' query in the DSDT and this is redundant klog because the ACPI driver matches onto the Windows _OSI klog strings by default. klog klog FAILED [CRITICAL] KlogPciAcpiOscRequestFailed: Test 1, klog CRITICAL Kernel message: [ 0.396181] pci0000:00: ACPI _OSC klog request failed (AE_NOT_FOUND), returned control mask: 0x1d klog klog ADVICE: The _OSC method evaluation failed, which will klog result in disabling PCIe functionality, for example, the klog Linux kernel has to disable Active State Power Management klog (ASPM) which means that PCIe power management is not klog optimally configured. klog klog FAILED [LOW] KlogAcpiDeprecatedProcfsInterface: Test 1, klog LOW Kernel message: [ 0.534105] ACPI: Deprecated procfs I klog /F for AC is loaded, please retry with klog CONFIG_ACPI_PROCFS_POWER cleared klog klog ADVICE: Using an old procfs interface for ACPI AC Adapter, klog this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This klog should be disabled for kernels > 2.6.37. klog klog FAILED [LOW] KlogAcpiDeprecatedProcfsInterface: Test 1, klog LOW Kernel message: [ 0.576306] ACPI: Deprecated procfs I klog /F for battery is loaded, please retry with klog CONFIG_ACPI_PROCFS_POWER cleared klog klog ADVICE: Using an old procfs interface for ACPI battery, klog this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This klog should be disabled for kernels > 2.6.37. klog klog Found 4 unique errors in kernel log. klog klog ========================================================== klog 0 passed, 4 failed, 0 warning, 0 aborted, 0 skipped, 0 klog info only. klog ========================================================== fwts-test/arg-results-0001/results.log000066400000000000000000000057051465205512700200660ustar00rootroot00000000000000klog klog: Scan kernel log for errors and warnings. klog ---------------------------------------------------------- klog Test 1 of 1: Kernel log error check. klog FAILED [MEDIUM] KlogAcpiMultipleMadt: Test 1, MEDIUM klog Kernel message: [ 0.000000] ACPI: BIOS bug: multiple APIC klog /MADT found, using 0 klog klog ADVICE: The BIOS is supposed to supply just one APIC/MADT, klog however, more than one has been found. One can use klog acpi_apic_instance=N to specify the Nth ACPI/MADT to use klog as an override if required. klog klog Kernel message: [ 0.228089] [Firmware Bug]: ACPI: BIOS klog _OSI(Linux) query ignored klog klog ADVICE: This is not exactly a failure mode but a warning klog from the kernel. The _OSI() method has implemented a match klog to the 'Linux' query in the DSDT and this is redundant klog because the ACPI driver matches onto the Windows _OSI klog strings by default. klog klog FAILED [CRITICAL] KlogPciAcpiOscRequestFailed: Test 1, klog CRITICAL Kernel message: [ 0.396181] pci0000:00: ACPI _OSC klog request failed (AE_NOT_FOUND), returned control mask: 0x1d klog klog ADVICE: The _OSC method evaluation failed, which will klog result in disabling PCIe functionality, for example, the klog Linux kernel has to disable Active State Power Management klog (ASPM) which means that PCIe power management is not klog optimally configured. klog klog FAILED [LOW] KlogAcpiDeprecatedProcfsInterface: Test 1, klog LOW Kernel message: [ 0.534105] ACPI: Deprecated procfs I klog /F for AC is loaded, please retry with klog CONFIG_ACPI_PROCFS_POWER cleared klog klog ADVICE: Using an old procfs interface for ACPI AC Adapter, klog this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This klog should be disabled for kernels > 2.6.37. klog klog FAILED [LOW] KlogAcpiDeprecatedProcfsInterface: Test 1, klog LOW Kernel message: [ 0.576306] ACPI: Deprecated procfs I klog /F for battery is loaded, please retry with klog CONFIG_ACPI_PROCFS_POWER cleared klog klog ADVICE: Using an old procfs interface for ACPI battery, klog this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This klog should be disabled for kernels > 2.6.37. klog klog Found 4 unique errors in kernel log. klog klog ========================================================== klog 0 passed, 4 failed, 0 warning, 0 aborted, 0 skipped, 0 klog info only. klog ========================================================== fwts-test/arg-results-0001/test-0001.sh000077500000000000000000000010141465205512700175430ustar00rootroot00000000000000#!/bin/bash # TEST="Test --results-output option" NAME=test-0001.sh TMPLOG=$TMP/results_$$.log $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-results-0001/klog.txt klog --results-output=$TMPLOG >& /dev/null grep "^[0-9]*[ ]*klog" $TMPLOG | cut -c7- > $TMPLOG.filtered diff $TMPLOG.filtered $FWTSTESTDIR/arg-results-0001/results.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG $TMPLOG.filtered exit $ret fwts-test/arg-results-0001/test-0002.sh000077500000000000000000000007601465205512700175530ustar00rootroot00000000000000#!/bin/bash # TEST="Test -r option" NAME=test-0002.sh TMPLOG=$TMP/results_$$.log $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-results-0001/klog.txt klog -r $TMPLOG >& /dev/null grep "^[0-9]*[ ]*klog" $TMPLOG | cut -c7- > $TMPLOG.filtered diff $TMPLOG.filtered $FWTSTESTDIR/arg-results-0001/results.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG $TMPLOG.filtered exit $ret fwts-test/arg-results-0001/test-0003.sh000077500000000000000000000007541465205512700175570ustar00rootroot00000000000000#!/bin/bash # TEST="Test --results-output stdout option" NAME=test-0003.sh TMPLOG=$TMP/results_$$.log ($FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-results-0001/klog.txt klog --results-output=stdout | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG ) >& /dev/null diff $TMPLOG $FWTSTESTDIR/arg-results-0001/results.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-results-0001/test-0004.sh000077500000000000000000000007201465205512700175510ustar00rootroot00000000000000#!/bin/bash # TEST="Test -r stdout option" NAME=test-0004.sh TMPLOG=$TMP/results_$$.log ($FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-results-0001/klog.txt klog -r stdout | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG ) >& /dev/null diff $TMPLOG $FWTSTESTDIR/arg-results-0001/results.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-results-0001/test-0005.sh000077500000000000000000000012641465205512700175560ustar00rootroot00000000000000#!/bin/bash # TEST="Test --results-output option (append)" NAME=test-0005.sh TMPLOG=$TMP/results_$$.log $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-results-0001/klog.txt klog --results-output=$TMPLOG >& /dev/null $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-results-0001/klog.txt klog --results-output=$TMPLOG >& /dev/null grep "^[0-9]*[ ]*klog" $TMPLOG | cut -c7- > $TMPLOG.filtered diff $TMPLOG.filtered $FWTSTESTDIR/arg-results-0001/results-0005.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG $TMPLOG.filtered exit $ret fwts-test/arg-results-0001/test-0006.sh000077500000000000000000000012121465205512700175500ustar00rootroot00000000000000#!/bin/bash # TEST="Test -r option (append)" NAME=test-0006.sh TMPLOG=$TMP/results_$$.log $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-results-0001/klog.txt klog -r $TMPLOG >& /dev/null $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-results-0001/klog.txt klog -r $TMPLOG >& /dev/null grep "^[0-9]*[ ]*klog" $TMPLOG | cut -c7- > $TMPLOG.filtered diff $TMPLOG.filtered $FWTSTESTDIR/arg-results-0001/results-0005.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG $TMPLOG.filtered exit $ret fwts-test/arg-results-no-separators-0001/000077500000000000000000000000001465205512700204465ustar00rootroot00000000000000fwts-test/arg-results-no-separators-0001/klog-0001.log000066400000000000000000000053441465205512700224710ustar00rootroot00000000000000klog klog: Scan kernel log for errors and warnings. klog Test 1 of 1: Kernel log error check. klog FAILED [MEDIUM] KlogAcpiMultipleMadt: Test 1, MEDIUM klog Kernel message: [ 0.000000] ACPI: BIOS bug: multiple APIC klog /MADT found, using 0 klog klog ADVICE: The BIOS is supposed to supply just one APIC/MADT, klog however, more than one has been found. One can use klog acpi_apic_instance=N to specify the Nth ACPI/MADT to use klog as an override if required. klog klog Kernel message: [ 0.228089] [Firmware Bug]: ACPI: BIOS klog _OSI(Linux) query ignored klog klog ADVICE: This is not exactly a failure mode but a warning klog from the kernel. The _OSI() method has implemented a match klog to the 'Linux' query in the DSDT and this is redundant klog because the ACPI driver matches onto the Windows _OSI klog strings by default. klog klog FAILED [CRITICAL] KlogPciAcpiOscRequestFailed: Test 1, klog CRITICAL Kernel message: [ 0.396181] pci0000:00: ACPI _OSC klog request failed (AE_NOT_FOUND), returned control mask: 0x1d klog klog ADVICE: The _OSC method evaluation failed, which will klog result in disabling PCIe functionality, for example, the klog Linux kernel has to disable Active State Power Management klog (ASPM) which means that PCIe power management is not klog optimally configured. klog klog FAILED [LOW] KlogAcpiDeprecatedProcfsInterface: Test 1, klog LOW Kernel message: [ 0.534105] ACPI: Deprecated procfs I klog /F for AC is loaded, please retry with klog CONFIG_ACPI_PROCFS_POWER cleared klog klog ADVICE: Using an old procfs interface for ACPI AC Adapter, klog this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This klog should be disabled for kernels > 2.6.37. klog klog FAILED [LOW] KlogAcpiDeprecatedProcfsInterface: Test 1, klog LOW Kernel message: [ 0.576306] ACPI: Deprecated procfs I klog /F for battery is loaded, please retry with klog CONFIG_ACPI_PROCFS_POWER cleared klog klog ADVICE: Using an old procfs interface for ACPI battery, klog this occurs if CONFIG_ACPI_PROCFS_POWER is enabled. This klog should be disabled for kernels > 2.6.37. klog klog Found 4 unique errors in kernel log. klog klog 0 passed, 4 failed, 0 warning, 0 aborted, 0 skipped, 0 klog info only. fwts-test/arg-results-no-separators-0001/klog.txt000066400000000000000000002225711465205512700221540ustar00rootroot00000000000000[ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 3.0.0-12-generic (buildd@crested) (gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3) ) #19-Ubuntu SMP Fri Sep 23 21:23:39 UTC 2011 (Ubuntu 3.0.0-12.19-generic 3.0.4) [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.0.0-12-generic root=UUID=08ed6ce0-0907-4d06-b1e1-b9c3ec647fe2 ro crashkernel=384M-2G:64M,2G-:128M quiet splash vt.handoff=7 [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] Centaur CentaurHauls [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009f800 (usable) [ 0.000000] BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000d2000 - 00000000000d4000 (reserved) [ 0.000000] BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000bf6d0000 (usable) [ 0.000000] BIOS-e820: 00000000bf6d0000 - 00000000bf6e3000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000bf6e3000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved) [ 0.000000] BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved) [ 0.000000] BIOS-e820: 00000000fed14000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1c000 - 00000000fed90000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ff000000 - 0000000100000000 (reserved) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI present. [ 0.000000] DMI: LENOVO 0769BMG/IEL10, BIOS 68ET27WW 11/14/2007 [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0xbf6d0 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask F80000000 write-back [ 0.000000] 1 base 080000000 mask FC0000000 write-back [ 0.000000] 2 base 0BF700000 mask FFFF00000 uncachable [ 0.000000] 3 base 0BF800000 mask FFF800000 uncachable [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] original variable MTRRs [ 0.000000] reg 0, base: 0GB, range: 2GB, type WB [ 0.000000] reg 1, base: 2GB, range: 1GB, type WB [ 0.000000] reg 2, base: 3063MB, range: 1MB, type UC [ 0.000000] reg 3, base: 3064MB, range: 8MB, type UC [ 0.000000] total RAM covered: 3063M [ 0.000000] Found optimal setting for mtrr clean up [ 0.000000] gran_size: 64K chunk_size: 16M num_reg: 4 lose cover RAM: 0G [ 0.000000] New variable MTRRs [ 0.000000] reg 0, base: 0GB, range: 2GB, type WB [ 0.000000] reg 1, base: 2GB, range: 1GB, type WB [ 0.000000] reg 2, base: 3063MB, range: 1MB, type UC [ 0.000000] reg 3, base: 3064MB, range: 8MB, type UC [ 0.000000] found SMP MP-table at [ffff8800000f72c0] f72c0 [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] Base memory trampoline at [ffff88000009a000] 9a000 size 20480 [ 0.000000] init_memory_mapping: 0000000000000000-00000000bf6d0000 [ 0.000000] 0000000000 - 00bf600000 page 2M [ 0.000000] 00bf600000 - 00bf6d0000 page 4k [ 0.000000] kernel direct mapping tables up to bf6d0000 @ bf6cb000-bf6d0000 [ 0.000000] RAMDISK: 359ec000 - 36cee000 [ 0.000000] Reserving 128MB of memory at 720MB for crashkernel (System RAM: 3062MB) [ 0.000000] ACPI: RSDP 00000000000f7240 00024 (v02 LENOVO) [ 0.000000] ACPI: XSDT 00000000bf6d87f0 00094 (v01 LENOVO TP-68 06040000 LTP 00000000) [ 0.000000] ACPI: FACP 00000000bf6dfbd2 000F4 (v03 TOSCPL CRESTLNE 06040000 ALAN 00000001) [ 0.000000] ACPI: DSDT 00000000bf6d9b6a 05FF4 (v02 TOSCPL CRESTLNE 06040000 INTL 20060608) [ 0.000000] ACPI: FACS 00000000bf6e2fc0 00040 [ 0.000000] ACPI: APIC 00000000bf6dfcc6 00068 (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: HPET 00000000bf6dfd2e 00038 (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: MCFG 00000000bf6dfd66 0003C (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: TCPA 00000000bf6dfda2 00032 (v01 Intel CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: TMOR 00000000bf6dfdd4 00026 (v01 PTLTD 06040000 PTL 00000003) [ 0.000000] ACPI: SLIC 00000000bf6dfdfa 00176 (v01 LENOVO TP-68 06040000 TBD 00000001) [ 0.000000] ACPI: APIC 00000000bf6dff70 00068 (v01 PTLTD ? APIC 06040000 LTP 00000000) [ 0.000000] ACPI: BOOT 00000000bf6dffd8 00028 (v01 PTLTD $SBFTBL$ 06040000 LTP 00000001) [ 0.000000] ACPI: SSDT 00000000bf6d98bd 002AD (v01 SataRe SataAhci 00001000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d981a 000A3 (v01 BrtRef DD01BRT 00001000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8e10 0025F (v01 PmRef Cpu0Tst 00003000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8d6a 000A6 (v01 PmRef Cpu1Tst 00003000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8884 004E6 (v01 PmRef CpuPm 00003000 INTL 20050624) [ 0.000000] ACPI: BIOS bug: multiple APIC/MADT found, using 0 [ 0.000000] ACPI: If "acpi_apic_instance=2" works better, notify linux-acpi@vger.kernel.org [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-00000000bf6d0000 [ 0.000000] Initmem setup node 0 0000000000000000-00000000bf6d0000 [ 0.000000] NODE_DATA [00000000bf6c6000 - 00000000bf6cafff] [ 0.000000] [ffffea0000000000-ffffea00029fffff] PMD -> [ffff8800bbe00000-ffff8800be7fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal empty [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x000bf6d0 [ 0.000000] On node 0 totalpages: 783967 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 5 pages reserved [ 0.000000] DMA zone: 3922 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 10664 pages used for memmap [ 0.000000] DMA32 zone: 769320 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x1008 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000d2000 [ 0.000000] PM: Registered nosave memory: 00000000000d2000 - 00000000000d4000 [ 0.000000] PM: Registered nosave memory: 00000000000d4000 - 00000000000dc000 [ 0.000000] PM: Registered nosave memory: 00000000000dc000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:20000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:256 nr_cpumask_bits:256 nr_cpu_ids:2 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 27 pages/cpu @ffff8800bf400000 s79616 r8192 d22784 u1048576 [ 0.000000] pcpu-alloc: s79616 r8192 d22784 u1048576 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 773242 [ 0.000000] Policy zone: DMA32 [ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-3.0.0-12-generic root=UUID=08ed6ce0-0907-4d06-b1e1-b9c3ec647fe2 ro crashkernel=384M-2G:64M,2G-:128M quiet splash vt.handoff=7 [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Memory: 2928536k/3136320k available (6104k kernel code, 452k absent, 207332k reserved, 4880k data, 984k init) [ 0.000000] SLUB: Genslabs=15, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] NR_IRQS:16640 nr_irqs:512 16 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] vt handoff: transparent VT on vt#7 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 25165824 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1496.217 MHz processor. [ 0.004006] Calibrating delay loop (skipped), value calculated using timer frequency.. 2992.43 BogoMIPS (lpj=5984868) [ 0.004013] pid_max: default: 32768 minimum: 301 [ 0.004056] Security Framework initialized [ 0.004080] AppArmor: AppArmor initialized [ 0.004083] Yama: becoming mindful. [ 0.004759] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.010636] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.012341] Mount-cache hash table entries: 256 [ 0.012557] Initializing cgroup subsys cpuacct [ 0.012565] Initializing cgroup subsys memory [ 0.012580] Initializing cgroup subsys devices [ 0.012583] Initializing cgroup subsys freezer [ 0.012586] Initializing cgroup subsys net_cls [ 0.012589] Initializing cgroup subsys blkio [ 0.012598] Initializing cgroup subsys perf_event [ 0.012643] CPU: Physical Processor ID: 0 [ 0.012645] CPU: Processor Core ID: 0 [ 0.012649] mce: CPU supports 6 MCE banks [ 0.012661] CPU0: Thermal monitoring handled by SMI [ 0.012667] using mwait in idle threads. [ 0.016288] ACPI: Core revision 20110413 [ 0.024040] ftrace: allocating 25651 entries in 101 pages [ 0.028444] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.071627] CPU0: Intel(R) Core(TM)2 Duo CPU T5250 @ 1.50GHz stepping 0d [ 0.072003] Performance Events: PEBS fmt0+, Core2 events, Intel PMU driver. [ 0.072003] PEBS disabled due to CPU errata. [ 0.072003] ... version: 2 [ 0.072003] ... bit width: 40 [ 0.072003] ... generic registers: 2 [ 0.072003] ... value mask: 000000ffffffffff [ 0.072003] ... max period: 000000007fffffff [ 0.072003] ... fixed-purpose events: 3 [ 0.072003] ... event mask: 0000000700000003 [ 0.072003] Booting Node 0, Processors #1 Ok. [ 0.072003] smpboot cpu 1: start_ip = 9a000 [ 0.008000] CPU1: Thermal monitoring handled by SMI [ 0.160029] Brought up 2 CPUs [ 0.160033] Total of 2 processors activated (5984.88 BogoMIPS). [ 0.161224] devtmpfs: initialized [ 0.161224] PM: Registering ACPI NVS region at bf6d0000 (77824 bytes) [ 0.162075] print_constraints: dummy: [ 0.162115] Time: 7:34:42 Date: 10/05/11 [ 0.162171] NET: Registered protocol family 16 [ 0.162209] Trying to unpack rootfs image as initramfs... [ 0.164047] ACPI: bus type pci registered [ 0.164133] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.164138] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.220043] PCI: Using configuration type 1 for base access [ 0.221379] bio: create slab at 0 [ 0.223506] ACPI: EC: Look up EC in DSDT [ 0.228089] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query ignored [ 0.229039] ACPI: SSDT 00000000bf6d959e 001B4 (v01 PmRef Cpu0Ist 00003000 INTL 20050624) [ 0.229543] ACPI: Dynamic OEM Table Load: [ 0.229548] ACPI: SSDT (null) 001B4 (v01 PmRef Cpu0Ist 00003000 INTL 20050624) [ 0.229696] ACPI: SSDT 00000000bf6d906f 004AA (v01 PmRef Cpu0Cst 00003001 INTL 20050624) [ 0.230165] ACPI: Dynamic OEM Table Load: [ 0.230169] ACPI: SSDT (null) 004AA (v01 PmRef Cpu0Cst 00003001 INTL 20050624) [ 0.230454] ACPI: SSDT 00000000bf6d9752 000C8 (v01 PmRef Cpu1Ist 00003000 INTL 20050624) [ 0.232427] ACPI: Dynamic OEM Table Load: [ 0.232432] ACPI: SSDT (null) 000C8 (v01 PmRef Cpu1Ist 00003000 INTL 20050624) [ 0.232541] ACPI: SSDT 00000000bf6d9519 00085 (v01 PmRef Cpu1Cst 00003000 INTL 20050624) [ 0.233011] ACPI: Dynamic OEM Table Load: [ 0.233015] ACPI: SSDT (null) 00085 (v01 PmRef Cpu1Cst 00003000 INTL 20050624) [ 0.238295] ACPI: EC: GPE storm detected, transactions will use polling mode [ 0.344070] ACPI: Interpreter enabled [ 0.344078] ACPI: (supports S0 S3 S4 S5) [ 0.344118] ACPI: Using IOAPIC for interrupt routing [ 0.389051] ACPI: EC: GPE = 0x1c, I/O: command/status = 0x66, data = 0x62 [ 0.389294] ACPI: No dock devices found. [ 0.389298] HEST: Table not found. [ 0.389303] PCI: Ignoring host bridge windows from ACPI; if necessary, use "pci=use_crs" and report a bug [ 0.389762] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.390623] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] (ignored) [ 0.390628] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] (ignored) [ 0.390632] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] (ignored) [ 0.390636] pci_root PNP0A08:00: host bridge window [mem 0x000d4000-0x000d7fff] (ignored) [ 0.390640] pci_root PNP0A08:00: host bridge window [mem 0x000d8000-0x000dbfff] (ignored) [ 0.390645] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xdfffffff] (ignored) [ 0.390648] pci_root PNP0A08:00: host bridge window [mem 0xf0000000-0xfebfffff] (ignored) [ 0.390665] pci 0000:00:00.0: [8086:2a00] type 0 class 0x000600 [ 0.390726] pci 0000:00:02.0: [8086:2a02] type 0 class 0x000300 [ 0.390746] pci 0000:00:02.0: reg 10: [mem 0xfc000000-0xfc0fffff 64bit] [ 0.390758] pci 0000:00:02.0: reg 18: [mem 0xd0000000-0xdfffffff 64bit pref] [ 0.390767] pci 0000:00:02.0: reg 20: [io 0x1800-0x1807] [ 0.390812] pci 0000:00:02.1: [8086:2a03] type 0 class 0x000380 [ 0.390829] pci 0000:00:02.1: reg 10: [mem 0xfc100000-0xfc1fffff 64bit] [ 0.390937] pci 0000:00:1a.0: [8086:2834] type 0 class 0x000c03 [ 0.391013] pci 0000:00:1a.0: reg 20: [io 0x1820-0x183f] [ 0.391065] pci 0000:00:1a.1: [8086:2835] type 0 class 0x000c03 [ 0.391126] pci 0000:00:1a.1: reg 20: [io 0x1840-0x185f] [ 0.391187] pci 0000:00:1a.7: [8086:283a] type 0 class 0x000c03 [ 0.391216] pci 0000:00:1a.7: reg 10: [mem 0xfc504800-0xfc504bff] [ 0.391321] pci 0000:00:1a.7: PME# supported from D0 D3hot D3cold [ 0.391328] pci 0000:00:1a.7: PME# disabled [ 0.391362] pci 0000:00:1b.0: [8086:284b] type 0 class 0x000403 [ 0.391386] pci 0000:00:1b.0: reg 10: [mem 0xfc300000-0xfc303fff 64bit] [ 0.391473] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.391479] pci 0000:00:1b.0: PME# disabled [ 0.391514] pci 0000:00:1c.0: [8086:283f] type 1 class 0x000604 [ 0.391605] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.391611] pci 0000:00:1c.0: PME# disabled [ 0.391647] pci 0000:00:1c.1: [8086:2841] type 1 class 0x000604 [ 0.391735] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 0.391741] pci 0000:00:1c.1: PME# disabled [ 0.391775] pci 0000:00:1c.2: [8086:2843] type 1 class 0x000604 [ 0.391868] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 0.391874] pci 0000:00:1c.2: PME# disabled [ 0.391911] pci 0000:00:1c.3: [8086:2845] type 1 class 0x000604 [ 0.391999] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold [ 0.392005] pci 0000:00:1c.3: PME# disabled [ 0.392053] pci 0000:00:1d.0: [8086:2830] type 0 class 0x000c03 [ 0.392114] pci 0000:00:1d.0: reg 20: [io 0x1860-0x187f] [ 0.392162] pci 0000:00:1d.1: [8086:2831] type 0 class 0x000c03 [ 0.392238] pci 0000:00:1d.1: reg 20: [io 0x1880-0x189f] [ 0.392293] pci 0000:00:1d.2: [8086:2832] type 0 class 0x000c03 [ 0.392371] pci 0000:00:1d.2: reg 20: [io 0x18a0-0x18bf] [ 0.392438] pci 0000:00:1d.7: [8086:2836] type 0 class 0x000c03 [ 0.392466] pci 0000:00:1d.7: reg 10: [mem 0xfc504c00-0xfc504fff] [ 0.392567] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.392573] pci 0000:00:1d.7: PME# disabled [ 0.392603] pci 0000:00:1e.0: [8086:2448] type 1 class 0x000604 [ 0.392698] pci 0000:00:1f.0: [8086:2815] type 0 class 0x000601 [ 0.392816] pci 0000:00:1f.0: quirk: [io 0x1000-0x107f] claimed by ICH6 ACPI/GPIO/TCO [ 0.392824] pci 0000:00:1f.0: quirk: [io 0x1180-0x11bf] claimed by ICH6 GPIO [ 0.392829] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 1 PIO at 0680 (mask 007f) [ 0.392835] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 2 PIO at 1640 (mask 000f) [ 0.392884] pci 0000:00:1f.1: [8086:2850] type 0 class 0x000101 [ 0.392903] pci 0000:00:1f.1: reg 10: [io 0x0000-0x0007] [ 0.392918] pci 0000:00:1f.1: reg 14: [io 0x0000-0x0003] [ 0.392931] pci 0000:00:1f.1: reg 18: [io 0x0000-0x0007] [ 0.392944] pci 0000:00:1f.1: reg 1c: [io 0x0000-0x0003] [ 0.392958] pci 0000:00:1f.1: reg 20: [io 0x1810-0x181f] [ 0.393014] pci 0000:00:1f.2: [8086:2829] type 0 class 0x000106 [ 0.393042] pci 0000:00:1f.2: reg 10: [io 0x1c00-0x1c07] [ 0.393056] pci 0000:00:1f.2: reg 14: [io 0x18d4-0x18d7] [ 0.393069] pci 0000:00:1f.2: reg 18: [io 0x18d8-0x18df] [ 0.393082] pci 0000:00:1f.2: reg 1c: [io 0x18d0-0x18d3] [ 0.393095] pci 0000:00:1f.2: reg 20: [io 0x18e0-0x18ff] [ 0.393108] pci 0000:00:1f.2: reg 24: [mem 0xfc504000-0xfc5047ff] [ 0.393157] pci 0000:00:1f.2: PME# supported from D3hot [ 0.393163] pci 0000:00:1f.2: PME# disabled [ 0.393188] pci 0000:00:1f.3: [8086:283e] type 0 class 0x000c05 [ 0.393206] pci 0000:00:1f.3: reg 10: [mem 0x00000000-0x000000ff] [ 0.393250] pci 0000:00:1f.3: reg 20: [io 0x1c20-0x1c3f] [ 0.393354] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.393360] pci 0000:00:1c.0: bridge window [io 0x2000-0x2fff] [ 0.393367] pci 0000:00:1c.0: bridge window [mem 0xf6000000-0xf7ffffff] [ 0.393376] pci 0000:00:1c.0: bridge window [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.393501] pci 0000:04:00.0: [8086:4227] type 0 class 0x000280 [ 0.393557] pci 0000:04:00.0: reg 10: [mem 0xf8000000-0xf8000fff] [ 0.393895] pci 0000:04:00.0: PME# supported from D0 D3hot D3cold [ 0.393908] pci 0000:04:00.0: PME# disabled [ 0.393979] pci 0000:04:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 0.394021] pci 0000:00:1c.1: PCI bridge to [bus 04-04] [ 0.394027] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.394033] pci 0000:00:1c.1: bridge window [mem 0xf8000000-0xf9ffffff] [ 0.394043] pci 0000:00:1c.1: bridge window [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.394110] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 0.394116] pci 0000:00:1c.2: bridge window [io 0x4000-0x4fff] [ 0.394122] pci 0000:00:1c.2: bridge window [mem 0xfa000000-0xfbffffff] [ 0.394132] pci 0000:00:1c.2: bridge window [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.394268] pci 0000:06:00.0: [14e4:1713] type 0 class 0x000200 [ 0.394336] pci 0000:06:00.0: reg 10: [mem 0xc8000000-0xc800ffff 64bit] [ 0.394639] pci 0000:06:00.0: PME# supported from D3hot D3cold [ 0.394651] pci 0000:06:00.0: PME# disabled [ 0.394783] pci 0000:00:1c.3: PCI bridge to [bus 06-06] [ 0.394789] pci 0000:00:1c.3: bridge window [io 0x5000-0x5fff] [ 0.394796] pci 0000:00:1c.3: bridge window [mem 0xc8000000-0xc9ffffff] [ 0.394806] pci 0000:00:1c.3: bridge window [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.394868] pci 0000:08:06.0: [1180:0832] type 0 class 0x000c00 [ 0.394886] pci 0000:08:06.0: proprietary Ricoh MMC controller disabled (via firewire function) [ 0.394890] pci 0000:08:06.0: MMC cards are now supported by standard SDHCI controller [ 0.394909] pci 0000:08:06.0: reg 10: [mem 0xfc200000-0xfc2007ff] [ 0.395006] pci 0000:08:06.0: supports D1 D2 [ 0.395009] pci 0000:08:06.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395016] pci 0000:08:06.0: PME# disabled [ 0.395045] pci 0000:08:06.1: [1180:0822] type 0 class 0x000805 [ 0.395069] pci 0000:08:06.1: reg 10: [mem 0xfc200800-0xfc2008ff] [ 0.395165] pci 0000:08:06.1: supports D1 D2 [ 0.395168] pci 0000:08:06.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395174] pci 0000:08:06.1: PME# disabled [ 0.395199] pci 0000:08:06.2: [1180:0592] type 0 class 0x000880 [ 0.395224] pci 0000:08:06.2: reg 10: [mem 0xfc201000-0xfc2010ff] [ 0.395317] pci 0000:08:06.2: supports D1 D2 [ 0.395320] pci 0000:08:06.2: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395326] pci 0000:08:06.2: PME# disabled [ 0.395350] pci 0000:08:06.3: [1180:0852] type 0 class 0x000880 [ 0.395376] pci 0000:08:06.3: reg 10: [mem 0xfc201400-0xfc2014ff] [ 0.395474] pci 0000:08:06.3: supports D1 D2 [ 0.395477] pci 0000:08:06.3: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395484] pci 0000:08:06.3: PME# disabled [ 0.395549] pci 0000:00:1e.0: PCI bridge to [bus 08-08] (subtractive decode) [ 0.395556] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.395562] pci 0000:00:1e.0: bridge window [mem 0xfc200000-0xfc2fffff] [ 0.395572] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.395576] pci 0000:00:1e.0: bridge window [io 0x0000-0xffff] (subtractive decode) [ 0.395580] pci 0000:00:1e.0: bridge window [mem 0x00000000-0xfffffffff] (subtractive decode) [ 0.395619] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.395828] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP01._PRT] [ 0.395887] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP02._PRT] [ 0.395944] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP03._PRT] [ 0.395999] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP04._PRT] [ 0.396116] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCIB._PRT] [ 0.396176] pci0000:00: Requesting ACPI _OSC control (0x1d) [ 0.396181] pci0000:00: ACPI _OSC request failed (AE_NOT_FOUND), returned control mask: 0x1d [ 0.396184] ACPI _OSC control for PCIe not granted, disabling ASPM [ 0.404002] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 *5 6 7 10 12 14 15) [ 0.404086] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404153] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 *7 10 12 14 15) [ 0.404217] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404282] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled. [ 0.404353] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404419] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 7 10 12 14 15) *11 [ 0.404484] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 5 6 7 *11 12 14 15) [ 0.404647] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 0.404670] vgaarb: loaded [ 0.404672] vgaarb: bridge control possible 0000:00:02.0 [ 0.404971] SCSI subsystem initialized [ 0.405069] libata version 3.00 loaded. [ 0.405143] usbcore: registered new interface driver usbfs [ 0.405158] usbcore: registered new interface driver hub [ 0.405200] usbcore: registered new device driver usb [ 0.405322] PCI: Using ACPI for IRQ routing [ 0.416330] PCI: pci_cache_line_size set to 64 bytes [ 0.416509] reserve RAM buffer: 000000000009f800 - 000000000009ffff [ 0.416513] reserve RAM buffer: 00000000bf6d0000 - 00000000bfffffff [ 0.416683] NetLabel: Initializing [ 0.416686] NetLabel: domain hash size = 128 [ 0.416688] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.416706] NetLabel: unlabeled traffic allowed by default [ 0.416770] HPET: 3 timers in total, 0 timers will be used for per-cpu timer [ 0.416777] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 [ 0.416784] hpet0: 3 comparators, 64-bit 14.318180 MHz counter [ 0.420524] Switching to clocksource hpet [ 0.423392] Switched to NOHz mode on CPU #0 [ 0.423487] Switched to NOHz mode on CPU #1 [ 0.430603] AppArmor: AppArmor Filesystem Enabled [ 0.430649] pnp: PnP ACPI init [ 0.430672] ACPI: bus type pnp registered [ 0.431166] pnp 00:00: [bus 00-ff] [ 0.431171] pnp 00:00: [io 0x0000-0x0cf7 window] [ 0.431174] pnp 00:00: [io 0x0cf8-0x0cff] [ 0.431177] pnp 00:00: [io 0x0d00-0xffff window] [ 0.431181] pnp 00:00: [mem 0x000a0000-0x000bffff window] [ 0.431184] pnp 00:00: [mem 0x000c0000-0x000c3fff window] [ 0.431187] pnp 00:00: [mem 0x000c4000-0x000c7fff window] [ 0.431190] pnp 00:00: [mem 0x000c8000-0x000cbfff window] [ 0.431197] pnp 00:00: [mem 0x000cc000-0x000cffff window] [ 0.431201] pnp 00:00: [mem 0x000d0000-0x000d3fff window] [ 0.431204] pnp 00:00: [mem 0x000d4000-0x000d7fff window] [ 0.431207] pnp 00:00: [mem 0x000d8000-0x000dbfff window] [ 0.431210] pnp 00:00: [mem 0x000dc000-0x000dffff window] [ 0.431213] pnp 00:00: [mem 0x000e0000-0x000e3fff window] [ 0.431216] pnp 00:00: [mem 0x000e4000-0x000e7fff window] [ 0.431219] pnp 00:00: [mem 0x000e8000-0x000ebfff window] [ 0.431222] pnp 00:00: [mem 0x000ec000-0x000effff window] [ 0.431225] pnp 00:00: [mem 0x000f0000-0x000fffff window] [ 0.431229] pnp 00:00: [mem 0xc0000000-0xdfffffff window] [ 0.431232] pnp 00:00: [mem 0xf0000000-0xfebfffff window] [ 0.431235] pnp 00:00: [mem 0xfed40000-0xfed44fff window] [ 0.431344] pnp 00:00: Plug and Play ACPI device, IDs PNP0a08 PNP0a03 (active) [ 0.431447] pnp 00:01: [mem 0xfed1c000-0xfed1ffff] [ 0.431450] pnp 00:01: [mem 0xfed14000-0xfed17fff] [ 0.431453] pnp 00:01: [mem 0xfed18000-0xfed18fff] [ 0.431456] pnp 00:01: [mem 0xfed19000-0xfed19fff] [ 0.431458] pnp 00:01: [mem 0xe0000000-0xefffffff] [ 0.431461] pnp 00:01: [mem 0xfed20000-0xfed3ffff] [ 0.431464] pnp 00:01: [mem 0xfed40000-0xfed44fff] [ 0.431467] pnp 00:01: [mem 0xfed45000-0xfed8ffff] [ 0.431559] system 00:01: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.431564] system 00:01: [mem 0xfed14000-0xfed17fff] has been reserved [ 0.431568] system 00:01: [mem 0xfed18000-0xfed18fff] has been reserved [ 0.431572] system 00:01: [mem 0xfed19000-0xfed19fff] has been reserved [ 0.431576] system 00:01: [mem 0xe0000000-0xefffffff] has been reserved [ 0.431580] system 00:01: [mem 0xfed20000-0xfed3ffff] has been reserved [ 0.431584] system 00:01: [mem 0xfed40000-0xfed44fff] has been reserved [ 0.431588] system 00:01: [mem 0xfed45000-0xfed8ffff] has been reserved [ 0.431593] system 00:01: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.431859] pnp 00:02: [io 0x0000-0x001f] [ 0.431862] pnp 00:02: [io 0x0081-0x0091] [ 0.431864] pnp 00:02: [io 0x0093-0x009f] [ 0.431867] pnp 00:02: [io 0x00c0-0x00df] [ 0.431870] pnp 00:02: [dma 4] [ 0.431931] pnp 00:02: Plug and Play ACPI device, IDs PNP0200 (active) [ 0.431946] pnp 00:03: [mem 0xff000000-0xffffffff] [ 0.432030] pnp 00:03: Plug and Play ACPI device, IDs INT0800 (active) [ 0.432131] pnp 00:04: [mem 0xfed00000-0xfed003ff] [ 0.432218] system 00:04: [mem 0xfed00000-0xfed003ff] has been reserved [ 0.432223] system 00:04: Plug and Play ACPI device, IDs PNP0103 PNP0c01 (active) [ 0.432239] pnp 00:05: [io 0x00f0] [ 0.432256] pnp 00:05: [irq 13] [ 0.432321] pnp 00:05: Plug and Play ACPI device, IDs PNP0c04 (active) [ 0.432337] pnp 00:06: [io 0x002e-0x002f] [ 0.432340] pnp 00:06: [io 0x004e-0x004f] [ 0.432343] pnp 00:06: [io 0x0061] [ 0.432345] pnp 00:06: [io 0x0063] [ 0.432348] pnp 00:06: [io 0x0065] [ 0.432351] pnp 00:06: [io 0x0067] [ 0.432353] pnp 00:06: [io 0x0080] [ 0.432355] pnp 00:06: [io 0x0092] [ 0.432358] pnp 00:06: [io 0x00b2-0x00b3] [ 0.432361] pnp 00:06: [io 0x0680-0x069f] [ 0.432363] pnp 00:06: [io 0x0800-0x080f] [ 0.432366] pnp 00:06: [io 0x1000-0x107f] [ 0.432373] pnp 00:06: [io 0x1180-0x11bf] [ 0.432375] pnp 00:06: [io 0xfe00] [ 0.432378] pnp 00:06: [io 0xff00-0xff7f] [ 0.432479] system 00:06: [io 0x0680-0x069f] has been reserved [ 0.432484] system 00:06: [io 0x0800-0x080f] has been reserved [ 0.432487] system 00:06: [io 0x1000-0x107f] has been reserved [ 0.432491] system 00:06: [io 0x1180-0x11bf] has been reserved [ 0.432495] system 00:06: [io 0xfe00] has been reserved [ 0.432499] system 00:06: [io 0xff00-0xff7f] has been reserved [ 0.432504] system 00:06: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.432517] pnp 00:07: [io 0x0070-0x0077] [ 0.432525] pnp 00:07: [irq 8] [ 0.432587] pnp 00:07: Plug and Play ACPI device, IDs PNP0b00 (active) [ 0.452092] pnp 00:08: [io 0x0060] [ 0.452096] pnp 00:08: [io 0x0064] [ 0.452112] pnp 00:08: [irq 1] [ 0.452226] pnp 00:08: Plug and Play ACPI device, IDs PNP0303 (active) [ 0.452246] pnp 00:09: [irq 12] [ 0.452305] pnp 00:09: Plug and Play ACPI device, IDs PNP0f13 (active) [ 0.452340] pnp: PnP ACPI: found 10 devices [ 0.452343] ACPI: ACPI bus type pnp unregistered [ 0.459104] PCI: max bus depth: 1 pci_try_num: 2 [ 0.459195] pci 0000:00:1f.3: BAR 0: assigned [mem 0xc0000000-0xc00000ff] [ 0.459204] pci 0000:00:1f.3: BAR 0: set to [mem 0xc0000000-0xc00000ff] (PCI address [0xc0000000-0xc00000ff]) [ 0.459209] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.459214] pci 0000:00:1c.0: bridge window [io 0x2000-0x2fff] [ 0.459222] pci 0000:00:1c.0: bridge window [mem 0xf6000000-0xf7ffffff] [ 0.459229] pci 0000:00:1c.0: bridge window [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.459239] pci 0000:00:1c.1: PCI bridge to [bus 04-04] [ 0.459244] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.459252] pci 0000:00:1c.1: bridge window [mem 0xf8000000-0xf9ffffff] [ 0.459259] pci 0000:00:1c.1: bridge window [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.459268] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 0.459272] pci 0000:00:1c.2: bridge window [io 0x4000-0x4fff] [ 0.459280] pci 0000:00:1c.2: bridge window [mem 0xfa000000-0xfbffffff] [ 0.459287] pci 0000:00:1c.2: bridge window [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.459296] pci 0000:00:1c.3: PCI bridge to [bus 06-06] [ 0.459301] pci 0000:00:1c.3: bridge window [io 0x5000-0x5fff] [ 0.459308] pci 0000:00:1c.3: bridge window [mem 0xc8000000-0xc9ffffff] [ 0.459314] pci 0000:00:1c.3: bridge window [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.459324] pci 0000:00:1e.0: PCI bridge to [bus 08-08] [ 0.459327] pci 0000:00:1e.0: bridge window [io disabled] [ 0.459334] pci 0000:00:1e.0: bridge window [mem 0xfc200000-0xfc2fffff] [ 0.459340] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.459373] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 0.459380] pci 0000:00:1c.0: setting latency timer to 64 [ 0.459399] pci 0000:00:1c.1: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 0.459405] pci 0000:00:1c.1: setting latency timer to 64 [ 0.459419] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.459425] pci 0000:00:1c.2: setting latency timer to 64 [ 0.459438] pci 0000:00:1c.3: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 0.459444] pci 0000:00:1c.3: setting latency timer to 64 [ 0.459455] pci 0000:00:1e.0: setting latency timer to 64 [ 0.459460] pci_bus 0000:00: resource 0 [io 0x0000-0xffff] [ 0.459464] pci_bus 0000:00: resource 1 [mem 0x00000000-0xfffffffff] [ 0.459467] pci_bus 0000:02: resource 0 [io 0x2000-0x2fff] [ 0.459470] pci_bus 0000:02: resource 1 [mem 0xf6000000-0xf7ffffff] [ 0.459474] pci_bus 0000:02: resource 2 [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.459478] pci_bus 0000:04: resource 0 [io 0x3000-0x3fff] [ 0.459481] pci_bus 0000:04: resource 1 [mem 0xf8000000-0xf9ffffff] [ 0.459484] pci_bus 0000:04: resource 2 [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.459488] pci_bus 0000:05: resource 0 [io 0x4000-0x4fff] [ 0.459491] pci_bus 0000:05: resource 1 [mem 0xfa000000-0xfbffffff] [ 0.459495] pci_bus 0000:05: resource 2 [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.459498] pci_bus 0000:06: resource 0 [io 0x5000-0x5fff] [ 0.459501] pci_bus 0000:06: resource 1 [mem 0xc8000000-0xc9ffffff] [ 0.459505] pci_bus 0000:06: resource 2 [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.459508] pci_bus 0000:08: resource 1 [mem 0xfc200000-0xfc2fffff] [ 0.459512] pci_bus 0000:08: resource 4 [io 0x0000-0xffff] [ 0.459515] pci_bus 0000:08: resource 5 [mem 0x00000000-0xfffffffff] [ 0.459580] NET: Registered protocol family 2 [ 0.459816] IP route cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.461759] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 0.468207] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 0.469024] TCP: Hash tables configured (established 524288 bind 65536) [ 0.469028] TCP reno registered [ 0.469052] UDP hash table entries: 2048 (order: 4, 65536 bytes) [ 0.469120] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) [ 0.469325] NET: Registered protocol family 1 [ 0.469358] pci 0000:00:02.0: Boot video device [ 0.469577] PCI: CLS 64 bytes, default 64 [ 0.469604] Simple Boot Flag at 0x36 set to 0x1 [ 0.470069] audit: initializing netlink socket (disabled) [ 0.470088] type=2000 audit(1317800082.464:1): initialized [ 0.509918] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.531362] VFS: Disk quotas dquot_6.5.2 [ 0.531454] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.532343] fuse init (API version 7.16) [ 0.532465] msgmni has been set to 5719 [ 0.532931] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.532975] io scheduler noop registered [ 0.532978] io scheduler deadline registered [ 0.533033] io scheduler cfq registered (default) [ 0.533206] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.533281] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 0.533378] pcieport 0000:00:1c.1: setting latency timer to 64 [ 0.533444] pcieport 0000:00:1c.1: irq 41 for MSI/MSI-X [ 0.533540] pcieport 0000:00:1c.2: setting latency timer to 64 [ 0.533607] pcieport 0000:00:1c.2: irq 42 for MSI/MSI-X [ 0.533705] pcieport 0000:00:1c.3: setting latency timer to 64 [ 0.533770] pcieport 0000:00:1c.3: irq 43 for MSI/MSI-X [ 0.533898] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.533934] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.533994] intel_idle: MWAIT substates: 0x22220 [ 0.533997] intel_idle: does not run on family 6 model 15 [ 0.534105] ACPI: Deprecated procfs I/F for AC is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared [ 0.534186] ACPI: AC Adapter [ACAD] (on-line) [ 0.534267] input: Lid Switch as /devices/LNXSYSTM:00/device:00/PNP0C0D:00/input/input0 [ 0.534291] ACPI: Lid Switch [LID0] [ 0.534348] input: Power Button as /devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input1 [ 0.534353] ACPI: Power Button [PWRB] [ 0.534429] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2 [ 0.534434] ACPI: Power Button [PWRF] [ 0.534479] ACPI: acpi_idle registered with cpuidle [ 0.536970] Monitor-Mwait will be used to enter C-1 state [ 0.537024] Monitor-Mwait will be used to enter C-2 state [ 0.537059] Monitor-Mwait will be used to enter C-3 state [ 0.537066] Marking TSC unstable due to TSC halts in idle [ 0.576306] ACPI: Deprecated procfs I/F for battery is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared [ 0.576339] ERST: Table is not found! [ 0.576477] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled [ 0.596514] ACPI: Battery Slot [BAT1] (battery present) [ 0.756873] Freeing initrd memory: 19464k freed [ 0.789948] Linux agpgart interface v0.103 [ 0.790084] agpgart-intel 0000:00:00.0: Intel 965GM Chipset [ 0.790242] agpgart-intel 0000:00:00.0: detected gtt size: 524288K total, 262144K mappable [ 0.791097] agpgart-intel 0000:00:00.0: detected 8192K stolen memory [ 0.791250] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xd0000000 [ 0.792794] brd: module loaded [ 0.793486] loop: module loaded [ 0.793683] ata_piix 0000:00:1f.1: version 2.13 [ 0.793701] ata_piix 0000:00:1f.1: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 0.793746] ata_piix 0000:00:1f.1: setting latency timer to 64 [ 0.794143] scsi0 : ata_piix [ 0.794282] scsi1 : ata_piix [ 0.794784] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0x1810 irq 14 [ 0.794789] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x1818 irq 15 [ 0.795227] Fixed MDIO Bus: probed [ 0.795261] PPP generic driver version 2.4.2 [ 0.795315] tun: Universal TUN/TAP device driver, 1.6 [ 0.795318] tun: (C) 1999-2004 Max Krasnyansky [ 0.795429] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.795451] ehci_hcd 0000:00:1a.7: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.795472] ehci_hcd 0000:00:1a.7: setting latency timer to 64 [ 0.795477] ehci_hcd 0000:00:1a.7: EHCI Host Controller [ 0.795524] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 1 [ 0.795567] ehci_hcd 0000:00:1a.7: debug port 1 [ 0.799463] ehci_hcd 0000:00:1a.7: cache line size of 64 is not supported [ 0.799485] ehci_hcd 0000:00:1a.7: irq 18, io mem 0xfc504800 [ 0.812020] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00 [ 0.812182] hub 1-0:1.0: USB hub found [ 0.812189] hub 1-0:1.0: 4 ports detected [ 0.812291] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.812305] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 0.812310] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 0.812363] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 2 [ 0.812398] ehci_hcd 0000:00:1d.7: debug port 1 [ 0.816279] ehci_hcd 0000:00:1d.7: cache line size of 64 is not supported [ 0.816301] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xfc504c00 [ 0.832023] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 0.832151] hub 2-0:1.0: USB hub found [ 0.832157] hub 2-0:1.0: 6 ports detected [ 0.832258] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.832276] uhci_hcd: USB Universal Host Controller Interface driver [ 0.832305] uhci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.832314] uhci_hcd 0000:00:1a.0: setting latency timer to 64 [ 0.832319] uhci_hcd 0000:00:1a.0: UHCI Host Controller [ 0.832366] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 3 [ 0.832412] uhci_hcd 0000:00:1a.0: irq 16, io base 0x00001820 [ 0.832569] hub 3-0:1.0: USB hub found [ 0.832575] hub 3-0:1.0: 2 ports detected [ 0.832668] uhci_hcd 0000:00:1a.1: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 0.832679] uhci_hcd 0000:00:1a.1: setting latency timer to 64 [ 0.832684] uhci_hcd 0000:00:1a.1: UHCI Host Controller [ 0.832731] uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 4 [ 0.832775] uhci_hcd 0000:00:1a.1: irq 21, io base 0x00001840 [ 0.832936] hub 4-0:1.0: USB hub found [ 0.832941] hub 4-0:1.0: 2 ports detected [ 0.833028] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.833037] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 0.833042] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 0.833099] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 5 [ 0.833134] uhci_hcd 0000:00:1d.0: irq 23, io base 0x00001860 [ 0.833291] hub 5-0:1.0: USB hub found [ 0.833296] hub 5-0:1.0: 2 ports detected [ 0.833384] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.833392] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 0.833397] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 0.833448] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 6 [ 0.833493] uhci_hcd 0000:00:1d.1: irq 19, io base 0x00001880 [ 0.833649] hub 6-0:1.0: USB hub found [ 0.833655] hub 6-0:1.0: 2 ports detected [ 0.833737] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.833746] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 0.833750] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 0.833797] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 7 [ 0.833832] uhci_hcd 0000:00:1d.2: irq 18, io base 0x000018a0 [ 0.833984] hub 7-0:1.0: USB hub found [ 0.833990] hub 7-0:1.0: 2 ports detected [ 0.834133] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 0.858635] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.858644] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.858792] mousedev: PS/2 mouse device common for all mice [ 0.860515] rtc_cmos 00:07: RTC can wake from S4 [ 0.860650] rtc_cmos 00:07: rtc core: registered rtc_cmos as rtc0 [ 0.860686] rtc0: alarms up to one month, y3k, 242 bytes nvram, hpet irqs [ 0.860821] device-mapper: uevent: version 1.0.3 [ 0.860928] device-mapper: ioctl: 4.20.0-ioctl (2011-02-02) initialised: dm-devel@redhat.com [ 0.861015] cpuidle: using governor ladder [ 0.861137] cpuidle: using governor menu [ 0.861140] EFI Variables Facility v0.08 2004-May-17 [ 0.861497] TCP cubic registered [ 0.861666] NET: Registered protocol family 10 [ 0.862339] NET: Registered protocol family 17 [ 0.862362] Registering the dns_resolver key type [ 0.862505] PM: Hibernation image not present or could not be loaded. [ 0.862521] registered taskstats version 1 [ 0.881709] Magic number: 15:169:571 [ 0.881852] rtc_cmos 00:07: setting system clock to 2011-10-05 07:34:43 UTC (1317800083) [ 0.882695] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.882699] EDD information not available. [ 0.885384] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3 [ 0.964510] ata1.00: ATAPI: MATSHITADVD-RAM UJ-850 z, RB32, max UDMA/33 [ 0.980374] ata1.00: configured for UDMA/33 [ 0.983110] scsi 0:0:0:0: CD-ROM MATSHITA DVD-RAM UJ-850 z RB32 PQ: 0 ANSI: 5 [ 0.985684] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 0.985690] cdrom: Uniform CD-ROM driver Revision: 3.20 [ 0.985886] sr 0:0:0:0: Attached scsi CD-ROM sr0 [ 0.985957] sr 0:0:0:0: Attached scsi generic sg0 type 5 [ 0.988684] Freeing unused kernel memory: 984k freed [ 0.989019] Write protecting the kernel read-only data: 10240k [ 0.989354] Freeing unused kernel memory: 20k freed [ 0.996526] Freeing unused kernel memory: 1400k freed [ 1.023090] udevd[92]: starting version 173 [ 1.095474] [drm] Initialized drm 1.1.0 20060810 [ 1.111223] tg3.c:v3.119 (May 18, 2011) [ 1.111255] tg3 0000:06:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 1.111275] tg3 0000:06:00.0: setting latency timer to 64 [ 1.123354] wmi: Mapper loaded [ 1.135292] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.135301] i915 0000:00:02.0: setting latency timer to 64 [ 1.229432] i915 0000:00:02.0: irq 44 for MSI/MSI-X [ 1.229442] [drm] Supports vblank timestamp caching Rev 1 (10.10.2010). [ 1.229444] [drm] Driver supports precise vblank timestamp query. [ 1.229504] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=io+mem,decodes=io+mem:owns=io+mem [ 1.231431] sdhci: Secure Digital Host Controller Interface driver [ 1.231435] sdhci: Copyright(c) Pierre Ossman [ 1.231761] sdhci-pci 0000:08:06.1: SDHCI controller found [1180:0822] (rev 19) [ 1.231780] sdhci-pci 0000:08:06.1: PCI INT B -> GSI 23 (level, low) -> IRQ 23 [ 1.232804] sdhci-pci 0000:08:06.1: Will use DMA mode even though HW doesn't fully claim to support it. [ 1.251222] mmc0: no vmmc regulator found [ 1.252265] Registered led device: mmc0:: [ 1.258216] mmc0: SDHCI controller on PCI [0000:08:06.1] using DMA [ 1.278826] tg3 0000:06:00.0: eth0: Tigon3 [partno(BCM95906) rev c002] (PCI Express) MAC address 00:1b:38:0c:7f:47 [ 1.278833] tg3 0000:06:00.0: eth0: attached PHY is 5906 (10/100Base-TX Ethernet) (WireSpeed[0], EEE[0]) [ 1.278838] tg3 0000:06:00.0: eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1] [ 1.278842] tg3 0000:06:00.0: eth0: dma_rwctrl[76180000] dma_mask[64-bit] [ 1.288114] firewire_ohci 0000:08:06.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 1.288352] fixme: max PWM is zero. [ 1.321105] [drm] initialized overlay support [ 1.363095] firewire_ohci: Added fw-ohci device 0000:08:06.0, OHCI v1.10, 4 IR + 4 IT contexts, quirks 0x1 [ 1.429305] usb 1-4: new high speed USB device number 4 using ehci_hcd [ 1.510188] fbcon: inteldrmfb (fb0) is primary device [ 1.510267] Console: switching to colour frame buffer device 160x50 [ 1.510301] fb0: inteldrmfb frame buffer device [ 1.510304] drm: registered panic notifier [ 1.596139] acpi device:08: registered as cooling_device2 [ 1.596350] input: Video Bus as /devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:01/input/input4 [ 1.596428] ACPI: Video Device [GFX0] (multi-head: yes rom: no post: no) [ 1.596505] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 1.596723] ahci 0000:00:1f.2: version 3.0 [ 1.596748] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.596832] ahci 0000:00:1f.2: irq 45 for MSI/MSI-X [ 1.596928] ahci 0000:00:1f.2: AHCI 0001.0100 32 slots 3 ports 3 Gbps 0x7 impl SATA mode [ 1.596934] ahci 0000:00:1f.2: flags: 64bit ncq sntf pm led clo pio slum part ccc [ 1.596941] ahci 0000:00:1f.2: setting latency timer to 64 [ 1.600697] scsi2 : ahci [ 1.601002] scsi3 : ahci [ 1.601154] scsi4 : ahci [ 1.601328] ata3: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504100 irq 45 [ 1.601335] ata4: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504180 irq 45 [ 1.601340] ata5: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504200 irq 45 [ 1.860262] firewire_core: created device fw0: GUID 00023f7bac4040de, S400 [ 1.920122] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.921792] ata3.00: unexpected _GTF length (8) [ 1.922070] ata3.00: ATA-8: WDC WD2500BEKT-75PVMT0, 01.01A01, max UDMA/133 [ 1.922077] ata3.00: 488397168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA [ 1.923756] ata3.00: unexpected _GTF length (8) [ 1.924053] ata4: SATA link down (SStatus 0 SControl 300) [ 1.924081] ata3.00: configured for UDMA/133 [ 1.924106] ata5: SATA link down (SStatus 0 SControl 300) [ 1.924318] scsi 2:0:0:0: Direct-Access ATA WDC WD2500BEKT-7 01.0 PQ: 0 ANSI: 5 [ 1.924525] sd 2:0:0:0: Attached scsi generic sg1 type 0 [ 1.924642] sd 2:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB) [ 1.924823] sd 2:0:0:0: [sda] Write Protect is off [ 1.924828] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.924898] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.020840] sda: sda1 sda2 sda3 sda4 < sda5 > [ 2.021461] sd 2:0:0:0: [sda] Attached SCSI disk [ 2.032059] usb 3-1: new full speed USB device number 2 using uhci_hcd [ 2.464056] usb 4-1: new full speed USB device number 2 using uhci_hcd [ 2.872042] usb 6-1: new low speed USB device number 2 using uhci_hcd [ 3.093235] input: MLK Trust Mouse as /devices/pci0000:00/0000:00:1d.1/usb6/6-1/6-1:1.0/input/input5 [ 3.093727] generic-usb 0003:04FC:05DA.0001: input,hiddev0,hidraw0: USB HID v1.10 Mouse [MLK Trust Mouse] on usb-0000:00:1d.1-1/input0 [ 3.093905] usbcore: registered new interface driver usbhid [ 3.093909] usbhid: USB HID core driver [ 3.288960] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null) [ 3.308073] usb 6-2: new full speed USB device number 3 using uhci_hcd [ 3.720052] usb 7-1: new low speed USB device number 2 using uhci_hcd [ 3.918393] input: LITEON Technology USB Multimedia Keyboard as /devices/pci0000:00/0000:00:1d.2/usb7/7-1/7-1:1.0/input/input6 [ 3.918495] generic-usb 0003:046D:C312.0002: input,hidraw1: USB HID v1.10 Keyboard [LITEON Technology USB Multimedia Keyboard] on usb-0000:00:1d.2-1/input0 [ 5.565904] Adding 15999996k swap on /dev/sda3. Priority:-1 extents:1 across:15999996k [ 5.691364] udevd[373]: starting version 173 [ 6.303871] lp: driver loaded but no devices found [ 7.040655] cfg80211: Calling CRDA to update world regulatory domain [ 7.159284] r852 0000:08:06.3: PCI INT B -> GSI 23 (level, low) -> IRQ 23 [ 7.159297] r852 0000:08:06.3: setting latency timer to 64 [ 7.159394] r852: Non dma capable device detected, dma disabled [ 7.159411] r852: driver loaded successfully [ 7.169632] iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, in-tree:s [ 7.169637] iwl3945: Copyright(c) 2003-2011 Intel Corporation [ 7.169734] iwl3945 0000:04:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 7.169751] iwl3945 0000:04:00.0: setting latency timer to 64 [ 7.225063] iwl3945 0000:04:00.0: Tunable channels: 13 802.11bg, 23 802.11a channels [ 7.225067] iwl3945 0000:04:00.0: Detected Intel Wireless WiFi Link 3945ABG [ 7.225225] iwl3945 0000:04:00.0: irq 46 for MSI/MSI-X [ 7.225470] Registered led device: phy0-led [ 7.225511] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 7.521071] ieee80211 phy0: Selected rate control algorithm 'iwl-3945-rs' [ 7.728682] udevd[389]: renamed network interface eth0 to eth1 [ 7.785421] udevd[392]: renamed network interface wlan0 to wlan1 [ 7.839555] device-mapper: multipath: version 1.3.0 loaded [ 7.920206] Synaptics Touchpad, model: 1, fw: 6.3, id: 0x25c0b1, caps: 0xa04713/0x200000/0x0 [ 8.001393] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input7 [ 8.103705] Linux video capture interface: v2.00 [ 8.142601] uvcvideo: Found UVC 1.00 device USB 2.0 Camera (04f2:b013) [ 8.145395] input: USB 2.0 Camera as /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/input/input8 [ 8.145503] usbcore: registered new interface driver uvcvideo [ 8.145506] USB Video Class driver (v1.1.0) [ 8.268868] gspca: v2.13.0 registered [ 8.426860] Bluetooth: Core ver 2.16 [ 8.426898] NET: Registered protocol family 31 [ 8.426901] Bluetooth: HCI device and connection manager initialized [ 8.426905] Bluetooth: HCI socket layer initialized [ 8.426908] Bluetooth: L2CAP socket layer initialized [ 8.426983] Bluetooth: SCO socket layer initialized [ 8.445120] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 8.445873] usbcore: registered new interface driver btusb [ 8.596127] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 8.596132] cfg80211: World regulatory domain updated: [ 8.596135] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 8.596139] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.596144] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 8.596147] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 8.596151] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.596155] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.713241] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 8.713332] HDA Intel 0000:00:1b.0: irq 47 for MSI/MSI-X [ 8.713375] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 9.214524] type=1400 audit(1317800091.827:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient" pid=762 comm="apparmor_parser" [ 9.214539] type=1400 audit(1317800091.827:3): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=760 comm="apparmor_parser" [ 9.214899] type=1400 audit(1317800091.827:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=762 comm="apparmor_parser" [ 9.214917] type=1400 audit(1317800091.827:5): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=760 comm="apparmor_parser" [ 9.215139] type=1400 audit(1317800091.827:6): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=762 comm="apparmor_parser" [ 9.215162] type=1400 audit(1317800091.827:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=760 comm="apparmor_parser" [ 9.215989] type=1400 audit(1317800091.827:8): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=761 comm="apparmor_parser" [ 9.216386] type=1400 audit(1317800091.831:9): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=761 comm="apparmor_parser" [ 9.216637] type=1400 audit(1317800091.831:10): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=761 comm="apparmor_parser" [ 9.565602] input: zc3xx as /devices/pci0000:00/0000:00:1a.0/usb3/3-1/input/input9 [ 9.565840] usbcore: registered new interface driver zc3xx [ 9.567768] usbcore: registered new interface driver snd-usb-audio [ 10.957262] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro [ 11.498897] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 11.610016] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null) [ 13.338782] type=1400 audit(1317800095.951:11): apparmor="STATUS" operation="profile_load" name="/usr/lib/lightdm/lightdm-guest-session-wrapper" pid=1170 comm="apparmor_parser" [ 14.107842] ppdev: user-space parallel port driver [ 16.201248] microcode: CPU0 sig=0x6fd, pf=0x80, revision=0xa1 [ 16.241864] microcode: CPU1 sig=0x6fd, pf=0x80, revision=0xa1 [ 16.244584] microcode: Microcode Update Driver: v2.00 , Peter Oruba [ 16.257389] iwl3945 0000:04:00.0: loaded firmware version 15.32.2.9 [ 16.319712] microcode: CPU0 updated to revision 0xa4, date = 2010-10-02 [ 16.320392] microcode: CPU1 updated to revision 0xa4, date = 2010-10-02 [ 16.327663] ADDRCONF(NETDEV_UP): wlan1: link is not ready [ 16.411245] tg3 0000:06:00.0: irq 48 for MSI/MSI-X [ 16.441602] ADDRCONF(NETDEV_UP): eth1: link is not ready [ 17.163336] init: failsafe main process (1112) killed by TERM signal [ 17.369512] init: gdm main process (1340) killed by TERM signal [ 18.121686] tg3 0000:06:00.0: eth1: Link is up at 100 Mbps, full duplex [ 18.121691] tg3 0000:06:00.0: eth1: Flow control is on for TX and on for RX [ 18.122295] ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready [ 21.210518] RPC: Registered named UNIX socket transport module. [ 21.210523] RPC: Registered udp transport module. [ 21.210525] RPC: Registered tcp transport module. [ 21.210528] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 21.445931] Installing knfsd (copyright (C) 1996 okir@monad.swb.de). [ 21.627527] NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory [ 21.636586] NFSD: starting 90-second grace period [ 24.852307] vboxdrv: Found 2 processor cores. [ 24.852593] vboxdrv: fAsync=0 offMin=0x1c2 offMax=0xae6 [ 24.852666] vboxdrv: TSC mode is 'synchronous', kernel timer mode is 'normal'. [ 24.852669] vboxdrv: Successfully loaded version 4.1.2_Ubuntu (interface 0x00190000). [ 25.101599] vboxpci: IOMMU not found (not registered) [ 27.046401] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 27.046405] Bluetooth: BNEP filters: protocol multicast [ 27.081903] Bluetooth: RFCOMM TTY layer initialized [ 27.081919] Bluetooth: RFCOMM socket layer initialized [ 27.081921] Bluetooth: RFCOMM ver 1.11 [ 28.752057] eth1: no IPv6 routers present [ 33.139443] init: plymouth-stop pre-start process (2005) terminated with status 1 [ 33.628053] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro,commit=0 [ 34.056830] EXT4-fs (sda1): re-mounted. Opts: commit=0 [ 34.217110] EXT4-fs (sda5): re-mounted. Opts: commit=0 [ 45.192742] wlan1: authenticate with 00:1a:c1:38:47:d4 (try 1) [ 45.196319] wlan1: authenticated [ 45.199717] wlan1: associate with 00:1a:c1:38:47:d4 (try 1) [ 45.202749] wlan1: RX AssocResp from 00:1a:c1:38:47:d4 (capab=0x431 status=0 aid=2) [ 45.202758] wlan1: associated [ 45.206342] ADDRCONF(NETDEV_CHANGE): wlan1: link becomes ready [ 45.206456] cfg80211: Calling CRDA for country: GB [ 45.213483] cfg80211: Updating information on frequency 2412 MHz for a 20 MHz width channel with regulatory rule: [ 45.213493] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213498] cfg80211: Updating information on frequency 2417 MHz for a 20 MHz width channel with regulatory rule: [ 45.213505] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213509] cfg80211: Updating information on frequency 2422 MHz for a 20 MHz width channel with regulatory rule: [ 45.213516] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213520] cfg80211: Updating information on frequency 2427 MHz for a 20 MHz width channel with regulatory rule: [ 45.213526] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213531] cfg80211: Updating information on frequency 2432 MHz for a 20 MHz width channel with regulatory rule: [ 45.213537] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213542] cfg80211: Updating information on frequency 2437 MHz for a 20 MHz width channel with regulatory rule: [ 45.213547] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213552] cfg80211: Updating information on frequency 2442 MHz for a 20 MHz width channel with regulatory rule: [ 45.213558] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213563] cfg80211: Updating information on frequency 2447 MHz for a 20 MHz width channel with regulatory rule: [ 45.213569] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213573] cfg80211: Updating information on frequency 2452 MHz for a 20 MHz width channel with regulatory rule: [ 45.213579] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213584] cfg80211: Updating information on frequency 2457 MHz for a 20 MHz width channel with regulatory rule: [ 45.213590] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213594] cfg80211: Updating information on frequency 2462 MHz for a 20 MHz width channel with regulatory rule: [ 45.213600] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213605] cfg80211: Updating information on frequency 2467 MHz for a 20 MHz width channel with regulatory rule: [ 45.213611] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213615] cfg80211: Updating information on frequency 2472 MHz for a 20 MHz width channel with regulatory rule: [ 45.213621] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213626] cfg80211: Disabling freq 5170 MHz [ 45.213630] cfg80211: Updating information on frequency 5180 MHz for a 20 MHz width channel with regulatory rule: [ 45.213636] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213640] cfg80211: Updating information on frequency 5190 MHz for a 20 MHz width channel with regulatory rule: [ 45.213646] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213651] cfg80211: Updating information on frequency 5200 MHz for a 20 MHz width channel with regulatory rule: [ 45.213657] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213662] cfg80211: Updating information on frequency 5210 MHz for a 20 MHz width channel with regulatory rule: [ 45.213667] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213672] cfg80211: Updating information on frequency 5220 MHz for a 20 MHz width channel with regulatory rule: [ 45.213678] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213683] cfg80211: Updating information on frequency 5230 MHz for a 20 MHz width channel with regulatory rule: [ 45.213688] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213693] cfg80211: Updating information on frequency 5240 MHz for a 20 MHz width channel with regulatory rule: [ 45.213699] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213704] cfg80211: Updating information on frequency 5260 MHz for a 20 MHz width channel with regulatory rule: [ 45.213710] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213714] cfg80211: Updating information on frequency 5280 MHz for a 20 MHz width channel with regulatory rule: [ 45.213720] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213725] cfg80211: Updating information on frequency 5300 MHz for a 20 MHz width channel with regulatory rule: [ 45.213731] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213736] cfg80211: Updating information on frequency 5320 MHz for a 20 MHz width channel with regulatory rule: [ 45.213742] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213746] cfg80211: Updating information on frequency 5500 MHz for a 20 MHz width channel with regulatory rule: [ 45.213752] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213757] cfg80211: Updating information on frequency 5520 MHz for a 20 MHz width channel with regulatory rule: [ 45.213763] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213768] cfg80211: Updating information on frequency 5540 MHz for a 20 MHz width channel with regulatory rule: [ 45.213774] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213779] cfg80211: Updating information on frequency 5560 MHz for a 20 MHz width channel with regulatory rule: [ 45.213785] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213789] cfg80211: Updating information on frequency 5580 MHz for a 20 MHz width channel with regulatory rule: [ 45.213795] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213800] cfg80211: Updating information on frequency 5600 MHz for a 20 MHz width channel with regulatory rule: [ 45.213806] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213810] cfg80211: Updating information on frequency 5620 MHz for a 20 MHz width channel with regulatory rule: [ 45.213816] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213821] cfg80211: Updating information on frequency 5640 MHz for a 20 MHz width channel with regulatory rule: [ 45.213827] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213831] cfg80211: Updating information on frequency 5660 MHz for a 20 MHz width channel with regulatory rule: [ 45.213837] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213842] cfg80211: Updating information on frequency 5680 MHz for a 20 MHz width channel with regulatory rule: [ 45.213848] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213852] cfg80211: Updating information on frequency 5700 MHz for a 20 MHz width channel with regulatory rule: [ 45.213858] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213864] cfg80211: Regulatory domain changed to country: GB [ 45.213868] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 45.213873] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213879] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213884] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213889] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm) [ 52.640123] eth1: no IPv6 routers present [ 55.208282] wlan1: disassociating from 00:1a:c1:38:47:d4 by local choice (reason=3) [ 55.214021] cfg80211: All devices are disconnected, going to restore regulatory settings [ 55.214032] cfg80211: Restoring regulatory settings [ 55.214052] cfg80211: Calling CRDA to update world regulatory domain [ 55.214778] wlan1: deauthenticating from 00:1a:c1:38:47:d4 by local choice (reason=3) [ 55.221291] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 55.221299] cfg80211: World regulatory domain updated: [ 55.221303] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 55.221309] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.221315] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 55.221321] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 55.221327] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.221333] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.392119] wlan1: no IPv6 routers present [ 58.763822] wlan1: authenticate with 00:1a:c1:38:47:d4 (try 1) [ 58.765582] wlan1: authenticated [ 58.766582] wlan1: associate with 00:1a:c1:38:47:d4 (try 1) [ 58.769972] wlan1: RX ReassocResp from 00:1a:c1:38:47:d4 (capab=0x431 status=0 aid=2) [ 58.769980] wlan1: associated [ 58.773587] cfg80211: Calling CRDA for country: GB [ 58.778304] cfg80211: Updating information on frequency 2412 MHz for a 20 MHz width channel with regulatory rule: [ 58.778310] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778314] cfg80211: Updating information on frequency 2417 MHz for a 20 MHz width channel with regulatory rule: [ 58.778318] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778321] cfg80211: Updating information on frequency 2422 MHz for a 20 MHz width channel with regulatory rule: [ 58.778325] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778328] cfg80211: Updating information on frequency 2427 MHz for a 20 MHz width channel with regulatory rule: [ 58.778332] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778335] cfg80211: Updating information on frequency 2432 MHz for a 20 MHz width channel with regulatory rule: [ 58.778340] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778343] cfg80211: Updating information on frequency 2437 MHz for a 20 MHz width channel with regulatory rule: [ 58.778347] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778350] cfg80211: Updating information on frequency 2442 MHz for a 20 MHz width channel with regulatory rule: [ 58.778354] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778357] cfg80211: Updating information on frequency 2447 MHz for a 20 MHz width channel with regulatory rule: [ 58.778361] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778364] cfg80211: Updating information on frequency 2452 MHz for a 20 MHz width channel with regulatory rule: [ 58.778368] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778371] cfg80211: Updating information on frequency 2457 MHz for a 20 MHz width channel with regulatory rule: [ 58.778375] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778378] cfg80211: Updating information on frequency 2462 MHz for a 20 MHz width channel with regulatory rule: [ 58.778382] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778385] cfg80211: Updating information on frequency 2467 MHz for a 20 MHz width channel with regulatory rule: [ 58.778389] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778392] cfg80211: Updating information on frequency 2472 MHz for a 20 MHz width channel with regulatory rule: [ 58.778396] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778399] cfg80211: Disabling freq 5170 MHz [ 58.778402] cfg80211: Updating information on frequency 5180 MHz for a 20 MHz width channel with regulatory rule: [ 58.778406] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778409] cfg80211: Updating information on frequency 5190 MHz for a 20 MHz width channel with regulatory rule: [ 58.778413] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778416] cfg80211: Updating information on frequency 5200 MHz for a 20 MHz width channel with regulatory rule: [ 58.778420] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778423] cfg80211: Updating information on frequency 5210 MHz for a 20 MHz width channel with regulatory rule: [ 58.778427] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778430] cfg80211: Updating information on frequency 5220 MHz for a 20 MHz width channel with regulatory rule: [ 58.778434] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778437] cfg80211: Updating information on frequency 5230 MHz for a 20 MHz width channel with regulatory rule: [ 58.778441] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778444] cfg80211: Updating information on frequency 5240 MHz for a 20 MHz width channel with regulatory rule: [ 58.778448] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778452] cfg80211: Updating information on frequency 5260 MHz for a 20 MHz width channel with regulatory rule: [ 58.778456] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778459] cfg80211: Updating information on frequency 5280 MHz for a 20 MHz width channel with regulatory rule: [ 58.778463] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778466] cfg80211: Updating information on frequency 5300 MHz for a 20 MHz width channel with regulatory rule: [ 58.778470] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778473] cfg80211: Updating information on frequency 5320 MHz for a 20 MHz width channel with regulatory rule: [ 58.778477] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778480] cfg80211: Updating information on frequency 5500 MHz for a 20 MHz width channel with regulatory rule: [ 58.778484] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778487] cfg80211: Updating information on frequency 5520 MHz for a 20 MHz width channel with regulatory rule: [ 58.778491] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778494] cfg80211: Updating information on frequency 5540 MHz for a 20 MHz width channel with regulatory rule: [ 58.778498] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778501] cfg80211: Updating information on frequency 5560 MHz for a 20 MHz width channel with regulatory rule: [ 58.778505] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778508] cfg80211: Updating information on frequency 5580 MHz for a 20 MHz width channel with regulatory rule: [ 58.778512] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778515] cfg80211: Updating information on frequency 5600 MHz for a 20 MHz width channel with regulatory rule: [ 58.778519] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778522] cfg80211: Updating information on frequency 5620 MHz for a 20 MHz width channel with regulatory rule: [ 58.778526] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778529] cfg80211: Updating information on frequency 5640 MHz for a 20 MHz width channel with regulatory rule: [ 58.778533] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778536] cfg80211: Updating information on frequency 5660 MHz for a 20 MHz width channel with regulatory rule: [ 58.778540] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778543] cfg80211: Updating information on frequency 5680 MHz for a 20 MHz width channel with regulatory rule: [ 58.778547] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778550] cfg80211: Updating information on frequency 5700 MHz for a 20 MHz width channel with regulatory rule: [ 58.778554] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778558] cfg80211: Regulatory domain changed to country: GB [ 58.778560] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 58.778564] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778568] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778571] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778575] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm) [ 70.176124] wlan1: no IPv6 routers present [ 75.152080] eth1: no IPv6 routers present [ 98.736094] eth1: no IPv6 routers present [ 648.357292] ecryptfs_mount: kern_path() failed [ 648.388155] Reading sb failed; rc = [-2] [ 670.016019] eth1: no IPv6 routers present [ 688.176048] eth1: no IPv6 routers present [ 711.096140] eth1: no IPv6 routers present fwts-test/arg-results-no-separators-0001/test-0001.sh000077500000000000000000000007711465205512700223470ustar00rootroot00000000000000#!/bin/bash # TEST="Test --results-no-separators option" NAME=test-0001.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --results-no-separators --klog=$FWTSTESTDIR/arg-results-no-separators-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-results-no-separators-0001/klog-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-show-progress-dialog-0001/000077500000000000000000000000001465205512700202315ustar00rootroot00000000000000fwts-test/arg-show-progress-dialog-0001/klog.txt000066400000000000000000002225711465205512700217370ustar00rootroot00000000000000[ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 3.0.0-12-generic (buildd@crested) (gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3) ) #19-Ubuntu SMP Fri Sep 23 21:23:39 UTC 2011 (Ubuntu 3.0.0-12.19-generic 3.0.4) [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.0.0-12-generic root=UUID=08ed6ce0-0907-4d06-b1e1-b9c3ec647fe2 ro crashkernel=384M-2G:64M,2G-:128M quiet splash vt.handoff=7 [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] Centaur CentaurHauls [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009f800 (usable) [ 0.000000] BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000d2000 - 00000000000d4000 (reserved) [ 0.000000] BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000bf6d0000 (usable) [ 0.000000] BIOS-e820: 00000000bf6d0000 - 00000000bf6e3000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000bf6e3000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved) [ 0.000000] BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved) [ 0.000000] BIOS-e820: 00000000fed14000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1c000 - 00000000fed90000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ff000000 - 0000000100000000 (reserved) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI present. [ 0.000000] DMI: LENOVO 0769BMG/IEL10, BIOS 68ET27WW 11/14/2007 [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0xbf6d0 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask F80000000 write-back [ 0.000000] 1 base 080000000 mask FC0000000 write-back [ 0.000000] 2 base 0BF700000 mask FFFF00000 uncachable [ 0.000000] 3 base 0BF800000 mask FFF800000 uncachable [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] original variable MTRRs [ 0.000000] reg 0, base: 0GB, range: 2GB, type WB [ 0.000000] reg 1, base: 2GB, range: 1GB, type WB [ 0.000000] reg 2, base: 3063MB, range: 1MB, type UC [ 0.000000] reg 3, base: 3064MB, range: 8MB, type UC [ 0.000000] total RAM covered: 3063M [ 0.000000] Found optimal setting for mtrr clean up [ 0.000000] gran_size: 64K chunk_size: 16M num_reg: 4 lose cover RAM: 0G [ 0.000000] New variable MTRRs [ 0.000000] reg 0, base: 0GB, range: 2GB, type WB [ 0.000000] reg 1, base: 2GB, range: 1GB, type WB [ 0.000000] reg 2, base: 3063MB, range: 1MB, type UC [ 0.000000] reg 3, base: 3064MB, range: 8MB, type UC [ 0.000000] found SMP MP-table at [ffff8800000f72c0] f72c0 [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] Base memory trampoline at [ffff88000009a000] 9a000 size 20480 [ 0.000000] init_memory_mapping: 0000000000000000-00000000bf6d0000 [ 0.000000] 0000000000 - 00bf600000 page 2M [ 0.000000] 00bf600000 - 00bf6d0000 page 4k [ 0.000000] kernel direct mapping tables up to bf6d0000 @ bf6cb000-bf6d0000 [ 0.000000] RAMDISK: 359ec000 - 36cee000 [ 0.000000] Reserving 128MB of memory at 720MB for crashkernel (System RAM: 3062MB) [ 0.000000] ACPI: RSDP 00000000000f7240 00024 (v02 LENOVO) [ 0.000000] ACPI: XSDT 00000000bf6d87f0 00094 (v01 LENOVO TP-68 06040000 LTP 00000000) [ 0.000000] ACPI: FACP 00000000bf6dfbd2 000F4 (v03 TOSCPL CRESTLNE 06040000 ALAN 00000001) [ 0.000000] ACPI: DSDT 00000000bf6d9b6a 05FF4 (v02 TOSCPL CRESTLNE 06040000 INTL 20060608) [ 0.000000] ACPI: FACS 00000000bf6e2fc0 00040 [ 0.000000] ACPI: APIC 00000000bf6dfcc6 00068 (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: HPET 00000000bf6dfd2e 00038 (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: MCFG 00000000bf6dfd66 0003C (v01 INTEL CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: TCPA 00000000bf6dfda2 00032 (v01 Intel CRESTLNE 06040000 LOHR 0000005A) [ 0.000000] ACPI: TMOR 00000000bf6dfdd4 00026 (v01 PTLTD 06040000 PTL 00000003) [ 0.000000] ACPI: SLIC 00000000bf6dfdfa 00176 (v01 LENOVO TP-68 06040000 TBD 00000001) [ 0.000000] ACPI: APIC 00000000bf6dff70 00068 (v01 PTLTD ? APIC 06040000 LTP 00000000) [ 0.000000] ACPI: BOOT 00000000bf6dffd8 00028 (v01 PTLTD $SBFTBL$ 06040000 LTP 00000001) [ 0.000000] ACPI: SSDT 00000000bf6d98bd 002AD (v01 SataRe SataAhci 00001000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d981a 000A3 (v01 BrtRef DD01BRT 00001000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8e10 0025F (v01 PmRef Cpu0Tst 00003000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8d6a 000A6 (v01 PmRef Cpu1Tst 00003000 INTL 20050624) [ 0.000000] ACPI: SSDT 00000000bf6d8884 004E6 (v01 PmRef CpuPm 00003000 INTL 20050624) [ 0.000000] ACPI: BIOS bug: multiple APIC/MADT found, using 0 [ 0.000000] ACPI: If "acpi_apic_instance=2" works better, notify linux-acpi@vger.kernel.org [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-00000000bf6d0000 [ 0.000000] Initmem setup node 0 0000000000000000-00000000bf6d0000 [ 0.000000] NODE_DATA [00000000bf6c6000 - 00000000bf6cafff] [ 0.000000] [ffffea0000000000-ffffea00029fffff] PMD -> [ffff8800bbe00000-ffff8800be7fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal empty [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x000bf6d0 [ 0.000000] On node 0 totalpages: 783967 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 5 pages reserved [ 0.000000] DMA zone: 3922 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 10664 pages used for memmap [ 0.000000] DMA32 zone: 769320 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x1008 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000d2000 [ 0.000000] PM: Registered nosave memory: 00000000000d2000 - 00000000000d4000 [ 0.000000] PM: Registered nosave memory: 00000000000d4000 - 00000000000dc000 [ 0.000000] PM: Registered nosave memory: 00000000000dc000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:20000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:256 nr_cpumask_bits:256 nr_cpu_ids:2 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 27 pages/cpu @ffff8800bf400000 s79616 r8192 d22784 u1048576 [ 0.000000] pcpu-alloc: s79616 r8192 d22784 u1048576 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 773242 [ 0.000000] Policy zone: DMA32 [ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-3.0.0-12-generic root=UUID=08ed6ce0-0907-4d06-b1e1-b9c3ec647fe2 ro crashkernel=384M-2G:64M,2G-:128M quiet splash vt.handoff=7 [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Memory: 2928536k/3136320k available (6104k kernel code, 452k absent, 207332k reserved, 4880k data, 984k init) [ 0.000000] SLUB: Genslabs=15, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] NR_IRQS:16640 nr_irqs:512 16 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] vt handoff: transparent VT on vt#7 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 25165824 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1496.217 MHz processor. [ 0.004006] Calibrating delay loop (skipped), value calculated using timer frequency.. 2992.43 BogoMIPS (lpj=5984868) [ 0.004013] pid_max: default: 32768 minimum: 301 [ 0.004056] Security Framework initialized [ 0.004080] AppArmor: AppArmor initialized [ 0.004083] Yama: becoming mindful. [ 0.004759] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.010636] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.012341] Mount-cache hash table entries: 256 [ 0.012557] Initializing cgroup subsys cpuacct [ 0.012565] Initializing cgroup subsys memory [ 0.012580] Initializing cgroup subsys devices [ 0.012583] Initializing cgroup subsys freezer [ 0.012586] Initializing cgroup subsys net_cls [ 0.012589] Initializing cgroup subsys blkio [ 0.012598] Initializing cgroup subsys perf_event [ 0.012643] CPU: Physical Processor ID: 0 [ 0.012645] CPU: Processor Core ID: 0 [ 0.012649] mce: CPU supports 6 MCE banks [ 0.012661] CPU0: Thermal monitoring handled by SMI [ 0.012667] using mwait in idle threads. [ 0.016288] ACPI: Core revision 20110413 [ 0.024040] ftrace: allocating 25651 entries in 101 pages [ 0.028444] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.071627] CPU0: Intel(R) Core(TM)2 Duo CPU T5250 @ 1.50GHz stepping 0d [ 0.072003] Performance Events: PEBS fmt0+, Core2 events, Intel PMU driver. [ 0.072003] PEBS disabled due to CPU errata. [ 0.072003] ... version: 2 [ 0.072003] ... bit width: 40 [ 0.072003] ... generic registers: 2 [ 0.072003] ... value mask: 000000ffffffffff [ 0.072003] ... max period: 000000007fffffff [ 0.072003] ... fixed-purpose events: 3 [ 0.072003] ... event mask: 0000000700000003 [ 0.072003] Booting Node 0, Processors #1 Ok. [ 0.072003] smpboot cpu 1: start_ip = 9a000 [ 0.008000] CPU1: Thermal monitoring handled by SMI [ 0.160029] Brought up 2 CPUs [ 0.160033] Total of 2 processors activated (5984.88 BogoMIPS). [ 0.161224] devtmpfs: initialized [ 0.161224] PM: Registering ACPI NVS region at bf6d0000 (77824 bytes) [ 0.162075] print_constraints: dummy: [ 0.162115] Time: 7:34:42 Date: 10/05/11 [ 0.162171] NET: Registered protocol family 16 [ 0.162209] Trying to unpack rootfs image as initramfs... [ 0.164047] ACPI: bus type pci registered [ 0.164133] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.164138] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.220043] PCI: Using configuration type 1 for base access [ 0.221379] bio: create slab at 0 [ 0.223506] ACPI: EC: Look up EC in DSDT [ 0.228089] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query ignored [ 0.229039] ACPI: SSDT 00000000bf6d959e 001B4 (v01 PmRef Cpu0Ist 00003000 INTL 20050624) [ 0.229543] ACPI: Dynamic OEM Table Load: [ 0.229548] ACPI: SSDT (null) 001B4 (v01 PmRef Cpu0Ist 00003000 INTL 20050624) [ 0.229696] ACPI: SSDT 00000000bf6d906f 004AA (v01 PmRef Cpu0Cst 00003001 INTL 20050624) [ 0.230165] ACPI: Dynamic OEM Table Load: [ 0.230169] ACPI: SSDT (null) 004AA (v01 PmRef Cpu0Cst 00003001 INTL 20050624) [ 0.230454] ACPI: SSDT 00000000bf6d9752 000C8 (v01 PmRef Cpu1Ist 00003000 INTL 20050624) [ 0.232427] ACPI: Dynamic OEM Table Load: [ 0.232432] ACPI: SSDT (null) 000C8 (v01 PmRef Cpu1Ist 00003000 INTL 20050624) [ 0.232541] ACPI: SSDT 00000000bf6d9519 00085 (v01 PmRef Cpu1Cst 00003000 INTL 20050624) [ 0.233011] ACPI: Dynamic OEM Table Load: [ 0.233015] ACPI: SSDT (null) 00085 (v01 PmRef Cpu1Cst 00003000 INTL 20050624) [ 0.238295] ACPI: EC: GPE storm detected, transactions will use polling mode [ 0.344070] ACPI: Interpreter enabled [ 0.344078] ACPI: (supports S0 S3 S4 S5) [ 0.344118] ACPI: Using IOAPIC for interrupt routing [ 0.389051] ACPI: EC: GPE = 0x1c, I/O: command/status = 0x66, data = 0x62 [ 0.389294] ACPI: No dock devices found. [ 0.389298] HEST: Table not found. [ 0.389303] PCI: Ignoring host bridge windows from ACPI; if necessary, use "pci=use_crs" and report a bug [ 0.389762] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.390623] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] (ignored) [ 0.390628] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] (ignored) [ 0.390632] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] (ignored) [ 0.390636] pci_root PNP0A08:00: host bridge window [mem 0x000d4000-0x000d7fff] (ignored) [ 0.390640] pci_root PNP0A08:00: host bridge window [mem 0x000d8000-0x000dbfff] (ignored) [ 0.390645] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xdfffffff] (ignored) [ 0.390648] pci_root PNP0A08:00: host bridge window [mem 0xf0000000-0xfebfffff] (ignored) [ 0.390665] pci 0000:00:00.0: [8086:2a00] type 0 class 0x000600 [ 0.390726] pci 0000:00:02.0: [8086:2a02] type 0 class 0x000300 [ 0.390746] pci 0000:00:02.0: reg 10: [mem 0xfc000000-0xfc0fffff 64bit] [ 0.390758] pci 0000:00:02.0: reg 18: [mem 0xd0000000-0xdfffffff 64bit pref] [ 0.390767] pci 0000:00:02.0: reg 20: [io 0x1800-0x1807] [ 0.390812] pci 0000:00:02.1: [8086:2a03] type 0 class 0x000380 [ 0.390829] pci 0000:00:02.1: reg 10: [mem 0xfc100000-0xfc1fffff 64bit] [ 0.390937] pci 0000:00:1a.0: [8086:2834] type 0 class 0x000c03 [ 0.391013] pci 0000:00:1a.0: reg 20: [io 0x1820-0x183f] [ 0.391065] pci 0000:00:1a.1: [8086:2835] type 0 class 0x000c03 [ 0.391126] pci 0000:00:1a.1: reg 20: [io 0x1840-0x185f] [ 0.391187] pci 0000:00:1a.7: [8086:283a] type 0 class 0x000c03 [ 0.391216] pci 0000:00:1a.7: reg 10: [mem 0xfc504800-0xfc504bff] [ 0.391321] pci 0000:00:1a.7: PME# supported from D0 D3hot D3cold [ 0.391328] pci 0000:00:1a.7: PME# disabled [ 0.391362] pci 0000:00:1b.0: [8086:284b] type 0 class 0x000403 [ 0.391386] pci 0000:00:1b.0: reg 10: [mem 0xfc300000-0xfc303fff 64bit] [ 0.391473] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.391479] pci 0000:00:1b.0: PME# disabled [ 0.391514] pci 0000:00:1c.0: [8086:283f] type 1 class 0x000604 [ 0.391605] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.391611] pci 0000:00:1c.0: PME# disabled [ 0.391647] pci 0000:00:1c.1: [8086:2841] type 1 class 0x000604 [ 0.391735] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 0.391741] pci 0000:00:1c.1: PME# disabled [ 0.391775] pci 0000:00:1c.2: [8086:2843] type 1 class 0x000604 [ 0.391868] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 0.391874] pci 0000:00:1c.2: PME# disabled [ 0.391911] pci 0000:00:1c.3: [8086:2845] type 1 class 0x000604 [ 0.391999] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold [ 0.392005] pci 0000:00:1c.3: PME# disabled [ 0.392053] pci 0000:00:1d.0: [8086:2830] type 0 class 0x000c03 [ 0.392114] pci 0000:00:1d.0: reg 20: [io 0x1860-0x187f] [ 0.392162] pci 0000:00:1d.1: [8086:2831] type 0 class 0x000c03 [ 0.392238] pci 0000:00:1d.1: reg 20: [io 0x1880-0x189f] [ 0.392293] pci 0000:00:1d.2: [8086:2832] type 0 class 0x000c03 [ 0.392371] pci 0000:00:1d.2: reg 20: [io 0x18a0-0x18bf] [ 0.392438] pci 0000:00:1d.7: [8086:2836] type 0 class 0x000c03 [ 0.392466] pci 0000:00:1d.7: reg 10: [mem 0xfc504c00-0xfc504fff] [ 0.392567] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.392573] pci 0000:00:1d.7: PME# disabled [ 0.392603] pci 0000:00:1e.0: [8086:2448] type 1 class 0x000604 [ 0.392698] pci 0000:00:1f.0: [8086:2815] type 0 class 0x000601 [ 0.392816] pci 0000:00:1f.0: quirk: [io 0x1000-0x107f] claimed by ICH6 ACPI/GPIO/TCO [ 0.392824] pci 0000:00:1f.0: quirk: [io 0x1180-0x11bf] claimed by ICH6 GPIO [ 0.392829] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 1 PIO at 0680 (mask 007f) [ 0.392835] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 2 PIO at 1640 (mask 000f) [ 0.392884] pci 0000:00:1f.1: [8086:2850] type 0 class 0x000101 [ 0.392903] pci 0000:00:1f.1: reg 10: [io 0x0000-0x0007] [ 0.392918] pci 0000:00:1f.1: reg 14: [io 0x0000-0x0003] [ 0.392931] pci 0000:00:1f.1: reg 18: [io 0x0000-0x0007] [ 0.392944] pci 0000:00:1f.1: reg 1c: [io 0x0000-0x0003] [ 0.392958] pci 0000:00:1f.1: reg 20: [io 0x1810-0x181f] [ 0.393014] pci 0000:00:1f.2: [8086:2829] type 0 class 0x000106 [ 0.393042] pci 0000:00:1f.2: reg 10: [io 0x1c00-0x1c07] [ 0.393056] pci 0000:00:1f.2: reg 14: [io 0x18d4-0x18d7] [ 0.393069] pci 0000:00:1f.2: reg 18: [io 0x18d8-0x18df] [ 0.393082] pci 0000:00:1f.2: reg 1c: [io 0x18d0-0x18d3] [ 0.393095] pci 0000:00:1f.2: reg 20: [io 0x18e0-0x18ff] [ 0.393108] pci 0000:00:1f.2: reg 24: [mem 0xfc504000-0xfc5047ff] [ 0.393157] pci 0000:00:1f.2: PME# supported from D3hot [ 0.393163] pci 0000:00:1f.2: PME# disabled [ 0.393188] pci 0000:00:1f.3: [8086:283e] type 0 class 0x000c05 [ 0.393206] pci 0000:00:1f.3: reg 10: [mem 0x00000000-0x000000ff] [ 0.393250] pci 0000:00:1f.3: reg 20: [io 0x1c20-0x1c3f] [ 0.393354] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.393360] pci 0000:00:1c.0: bridge window [io 0x2000-0x2fff] [ 0.393367] pci 0000:00:1c.0: bridge window [mem 0xf6000000-0xf7ffffff] [ 0.393376] pci 0000:00:1c.0: bridge window [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.393501] pci 0000:04:00.0: [8086:4227] type 0 class 0x000280 [ 0.393557] pci 0000:04:00.0: reg 10: [mem 0xf8000000-0xf8000fff] [ 0.393895] pci 0000:04:00.0: PME# supported from D0 D3hot D3cold [ 0.393908] pci 0000:04:00.0: PME# disabled [ 0.393979] pci 0000:04:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 0.394021] pci 0000:00:1c.1: PCI bridge to [bus 04-04] [ 0.394027] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.394033] pci 0000:00:1c.1: bridge window [mem 0xf8000000-0xf9ffffff] [ 0.394043] pci 0000:00:1c.1: bridge window [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.394110] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 0.394116] pci 0000:00:1c.2: bridge window [io 0x4000-0x4fff] [ 0.394122] pci 0000:00:1c.2: bridge window [mem 0xfa000000-0xfbffffff] [ 0.394132] pci 0000:00:1c.2: bridge window [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.394268] pci 0000:06:00.0: [14e4:1713] type 0 class 0x000200 [ 0.394336] pci 0000:06:00.0: reg 10: [mem 0xc8000000-0xc800ffff 64bit] [ 0.394639] pci 0000:06:00.0: PME# supported from D3hot D3cold [ 0.394651] pci 0000:06:00.0: PME# disabled [ 0.394783] pci 0000:00:1c.3: PCI bridge to [bus 06-06] [ 0.394789] pci 0000:00:1c.3: bridge window [io 0x5000-0x5fff] [ 0.394796] pci 0000:00:1c.3: bridge window [mem 0xc8000000-0xc9ffffff] [ 0.394806] pci 0000:00:1c.3: bridge window [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.394868] pci 0000:08:06.0: [1180:0832] type 0 class 0x000c00 [ 0.394886] pci 0000:08:06.0: proprietary Ricoh MMC controller disabled (via firewire function) [ 0.394890] pci 0000:08:06.0: MMC cards are now supported by standard SDHCI controller [ 0.394909] pci 0000:08:06.0: reg 10: [mem 0xfc200000-0xfc2007ff] [ 0.395006] pci 0000:08:06.0: supports D1 D2 [ 0.395009] pci 0000:08:06.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395016] pci 0000:08:06.0: PME# disabled [ 0.395045] pci 0000:08:06.1: [1180:0822] type 0 class 0x000805 [ 0.395069] pci 0000:08:06.1: reg 10: [mem 0xfc200800-0xfc2008ff] [ 0.395165] pci 0000:08:06.1: supports D1 D2 [ 0.395168] pci 0000:08:06.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395174] pci 0000:08:06.1: PME# disabled [ 0.395199] pci 0000:08:06.2: [1180:0592] type 0 class 0x000880 [ 0.395224] pci 0000:08:06.2: reg 10: [mem 0xfc201000-0xfc2010ff] [ 0.395317] pci 0000:08:06.2: supports D1 D2 [ 0.395320] pci 0000:08:06.2: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395326] pci 0000:08:06.2: PME# disabled [ 0.395350] pci 0000:08:06.3: [1180:0852] type 0 class 0x000880 [ 0.395376] pci 0000:08:06.3: reg 10: [mem 0xfc201400-0xfc2014ff] [ 0.395474] pci 0000:08:06.3: supports D1 D2 [ 0.395477] pci 0000:08:06.3: PME# supported from D0 D1 D2 D3hot D3cold [ 0.395484] pci 0000:08:06.3: PME# disabled [ 0.395549] pci 0000:00:1e.0: PCI bridge to [bus 08-08] (subtractive decode) [ 0.395556] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.395562] pci 0000:00:1e.0: bridge window [mem 0xfc200000-0xfc2fffff] [ 0.395572] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.395576] pci 0000:00:1e.0: bridge window [io 0x0000-0xffff] (subtractive decode) [ 0.395580] pci 0000:00:1e.0: bridge window [mem 0x00000000-0xfffffffff] (subtractive decode) [ 0.395619] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.395828] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP01._PRT] [ 0.395887] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP02._PRT] [ 0.395944] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP03._PRT] [ 0.395999] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP04._PRT] [ 0.396116] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCIB._PRT] [ 0.396176] pci0000:00: Requesting ACPI _OSC control (0x1d) [ 0.396181] pci0000:00: ACPI _OSC request failed (AE_NOT_FOUND), returned control mask: 0x1d [ 0.396184] ACPI _OSC control for PCIe not granted, disabling ASPM [ 0.404002] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 *5 6 7 10 12 14 15) [ 0.404086] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404153] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 *7 10 12 14 15) [ 0.404217] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404282] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled. [ 0.404353] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.404419] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 7 10 12 14 15) *11 [ 0.404484] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 5 6 7 *11 12 14 15) [ 0.404647] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 0.404670] vgaarb: loaded [ 0.404672] vgaarb: bridge control possible 0000:00:02.0 [ 0.404971] SCSI subsystem initialized [ 0.405069] libata version 3.00 loaded. [ 0.405143] usbcore: registered new interface driver usbfs [ 0.405158] usbcore: registered new interface driver hub [ 0.405200] usbcore: registered new device driver usb [ 0.405322] PCI: Using ACPI for IRQ routing [ 0.416330] PCI: pci_cache_line_size set to 64 bytes [ 0.416509] reserve RAM buffer: 000000000009f800 - 000000000009ffff [ 0.416513] reserve RAM buffer: 00000000bf6d0000 - 00000000bfffffff [ 0.416683] NetLabel: Initializing [ 0.416686] NetLabel: domain hash size = 128 [ 0.416688] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.416706] NetLabel: unlabeled traffic allowed by default [ 0.416770] HPET: 3 timers in total, 0 timers will be used for per-cpu timer [ 0.416777] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 [ 0.416784] hpet0: 3 comparators, 64-bit 14.318180 MHz counter [ 0.420524] Switching to clocksource hpet [ 0.423392] Switched to NOHz mode on CPU #0 [ 0.423487] Switched to NOHz mode on CPU #1 [ 0.430603] AppArmor: AppArmor Filesystem Enabled [ 0.430649] pnp: PnP ACPI init [ 0.430672] ACPI: bus type pnp registered [ 0.431166] pnp 00:00: [bus 00-ff] [ 0.431171] pnp 00:00: [io 0x0000-0x0cf7 window] [ 0.431174] pnp 00:00: [io 0x0cf8-0x0cff] [ 0.431177] pnp 00:00: [io 0x0d00-0xffff window] [ 0.431181] pnp 00:00: [mem 0x000a0000-0x000bffff window] [ 0.431184] pnp 00:00: [mem 0x000c0000-0x000c3fff window] [ 0.431187] pnp 00:00: [mem 0x000c4000-0x000c7fff window] [ 0.431190] pnp 00:00: [mem 0x000c8000-0x000cbfff window] [ 0.431197] pnp 00:00: [mem 0x000cc000-0x000cffff window] [ 0.431201] pnp 00:00: [mem 0x000d0000-0x000d3fff window] [ 0.431204] pnp 00:00: [mem 0x000d4000-0x000d7fff window] [ 0.431207] pnp 00:00: [mem 0x000d8000-0x000dbfff window] [ 0.431210] pnp 00:00: [mem 0x000dc000-0x000dffff window] [ 0.431213] pnp 00:00: [mem 0x000e0000-0x000e3fff window] [ 0.431216] pnp 00:00: [mem 0x000e4000-0x000e7fff window] [ 0.431219] pnp 00:00: [mem 0x000e8000-0x000ebfff window] [ 0.431222] pnp 00:00: [mem 0x000ec000-0x000effff window] [ 0.431225] pnp 00:00: [mem 0x000f0000-0x000fffff window] [ 0.431229] pnp 00:00: [mem 0xc0000000-0xdfffffff window] [ 0.431232] pnp 00:00: [mem 0xf0000000-0xfebfffff window] [ 0.431235] pnp 00:00: [mem 0xfed40000-0xfed44fff window] [ 0.431344] pnp 00:00: Plug and Play ACPI device, IDs PNP0a08 PNP0a03 (active) [ 0.431447] pnp 00:01: [mem 0xfed1c000-0xfed1ffff] [ 0.431450] pnp 00:01: [mem 0xfed14000-0xfed17fff] [ 0.431453] pnp 00:01: [mem 0xfed18000-0xfed18fff] [ 0.431456] pnp 00:01: [mem 0xfed19000-0xfed19fff] [ 0.431458] pnp 00:01: [mem 0xe0000000-0xefffffff] [ 0.431461] pnp 00:01: [mem 0xfed20000-0xfed3ffff] [ 0.431464] pnp 00:01: [mem 0xfed40000-0xfed44fff] [ 0.431467] pnp 00:01: [mem 0xfed45000-0xfed8ffff] [ 0.431559] system 00:01: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.431564] system 00:01: [mem 0xfed14000-0xfed17fff] has been reserved [ 0.431568] system 00:01: [mem 0xfed18000-0xfed18fff] has been reserved [ 0.431572] system 00:01: [mem 0xfed19000-0xfed19fff] has been reserved [ 0.431576] system 00:01: [mem 0xe0000000-0xefffffff] has been reserved [ 0.431580] system 00:01: [mem 0xfed20000-0xfed3ffff] has been reserved [ 0.431584] system 00:01: [mem 0xfed40000-0xfed44fff] has been reserved [ 0.431588] system 00:01: [mem 0xfed45000-0xfed8ffff] has been reserved [ 0.431593] system 00:01: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.431859] pnp 00:02: [io 0x0000-0x001f] [ 0.431862] pnp 00:02: [io 0x0081-0x0091] [ 0.431864] pnp 00:02: [io 0x0093-0x009f] [ 0.431867] pnp 00:02: [io 0x00c0-0x00df] [ 0.431870] pnp 00:02: [dma 4] [ 0.431931] pnp 00:02: Plug and Play ACPI device, IDs PNP0200 (active) [ 0.431946] pnp 00:03: [mem 0xff000000-0xffffffff] [ 0.432030] pnp 00:03: Plug and Play ACPI device, IDs INT0800 (active) [ 0.432131] pnp 00:04: [mem 0xfed00000-0xfed003ff] [ 0.432218] system 00:04: [mem 0xfed00000-0xfed003ff] has been reserved [ 0.432223] system 00:04: Plug and Play ACPI device, IDs PNP0103 PNP0c01 (active) [ 0.432239] pnp 00:05: [io 0x00f0] [ 0.432256] pnp 00:05: [irq 13] [ 0.432321] pnp 00:05: Plug and Play ACPI device, IDs PNP0c04 (active) [ 0.432337] pnp 00:06: [io 0x002e-0x002f] [ 0.432340] pnp 00:06: [io 0x004e-0x004f] [ 0.432343] pnp 00:06: [io 0x0061] [ 0.432345] pnp 00:06: [io 0x0063] [ 0.432348] pnp 00:06: [io 0x0065] [ 0.432351] pnp 00:06: [io 0x0067] [ 0.432353] pnp 00:06: [io 0x0080] [ 0.432355] pnp 00:06: [io 0x0092] [ 0.432358] pnp 00:06: [io 0x00b2-0x00b3] [ 0.432361] pnp 00:06: [io 0x0680-0x069f] [ 0.432363] pnp 00:06: [io 0x0800-0x080f] [ 0.432366] pnp 00:06: [io 0x1000-0x107f] [ 0.432373] pnp 00:06: [io 0x1180-0x11bf] [ 0.432375] pnp 00:06: [io 0xfe00] [ 0.432378] pnp 00:06: [io 0xff00-0xff7f] [ 0.432479] system 00:06: [io 0x0680-0x069f] has been reserved [ 0.432484] system 00:06: [io 0x0800-0x080f] has been reserved [ 0.432487] system 00:06: [io 0x1000-0x107f] has been reserved [ 0.432491] system 00:06: [io 0x1180-0x11bf] has been reserved [ 0.432495] system 00:06: [io 0xfe00] has been reserved [ 0.432499] system 00:06: [io 0xff00-0xff7f] has been reserved [ 0.432504] system 00:06: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.432517] pnp 00:07: [io 0x0070-0x0077] [ 0.432525] pnp 00:07: [irq 8] [ 0.432587] pnp 00:07: Plug and Play ACPI device, IDs PNP0b00 (active) [ 0.452092] pnp 00:08: [io 0x0060] [ 0.452096] pnp 00:08: [io 0x0064] [ 0.452112] pnp 00:08: [irq 1] [ 0.452226] pnp 00:08: Plug and Play ACPI device, IDs PNP0303 (active) [ 0.452246] pnp 00:09: [irq 12] [ 0.452305] pnp 00:09: Plug and Play ACPI device, IDs PNP0f13 (active) [ 0.452340] pnp: PnP ACPI: found 10 devices [ 0.452343] ACPI: ACPI bus type pnp unregistered [ 0.459104] PCI: max bus depth: 1 pci_try_num: 2 [ 0.459195] pci 0000:00:1f.3: BAR 0: assigned [mem 0xc0000000-0xc00000ff] [ 0.459204] pci 0000:00:1f.3: BAR 0: set to [mem 0xc0000000-0xc00000ff] (PCI address [0xc0000000-0xc00000ff]) [ 0.459209] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.459214] pci 0000:00:1c.0: bridge window [io 0x2000-0x2fff] [ 0.459222] pci 0000:00:1c.0: bridge window [mem 0xf6000000-0xf7ffffff] [ 0.459229] pci 0000:00:1c.0: bridge window [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.459239] pci 0000:00:1c.1: PCI bridge to [bus 04-04] [ 0.459244] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.459252] pci 0000:00:1c.1: bridge window [mem 0xf8000000-0xf9ffffff] [ 0.459259] pci 0000:00:1c.1: bridge window [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.459268] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 0.459272] pci 0000:00:1c.2: bridge window [io 0x4000-0x4fff] [ 0.459280] pci 0000:00:1c.2: bridge window [mem 0xfa000000-0xfbffffff] [ 0.459287] pci 0000:00:1c.2: bridge window [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.459296] pci 0000:00:1c.3: PCI bridge to [bus 06-06] [ 0.459301] pci 0000:00:1c.3: bridge window [io 0x5000-0x5fff] [ 0.459308] pci 0000:00:1c.3: bridge window [mem 0xc8000000-0xc9ffffff] [ 0.459314] pci 0000:00:1c.3: bridge window [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.459324] pci 0000:00:1e.0: PCI bridge to [bus 08-08] [ 0.459327] pci 0000:00:1e.0: bridge window [io disabled] [ 0.459334] pci 0000:00:1e.0: bridge window [mem 0xfc200000-0xfc2fffff] [ 0.459340] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.459373] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 0.459380] pci 0000:00:1c.0: setting latency timer to 64 [ 0.459399] pci 0000:00:1c.1: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 0.459405] pci 0000:00:1c.1: setting latency timer to 64 [ 0.459419] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.459425] pci 0000:00:1c.2: setting latency timer to 64 [ 0.459438] pci 0000:00:1c.3: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 0.459444] pci 0000:00:1c.3: setting latency timer to 64 [ 0.459455] pci 0000:00:1e.0: setting latency timer to 64 [ 0.459460] pci_bus 0000:00: resource 0 [io 0x0000-0xffff] [ 0.459464] pci_bus 0000:00: resource 1 [mem 0x00000000-0xfffffffff] [ 0.459467] pci_bus 0000:02: resource 0 [io 0x2000-0x2fff] [ 0.459470] pci_bus 0000:02: resource 1 [mem 0xf6000000-0xf7ffffff] [ 0.459474] pci_bus 0000:02: resource 2 [mem 0xf0000000-0xf1ffffff 64bit pref] [ 0.459478] pci_bus 0000:04: resource 0 [io 0x3000-0x3fff] [ 0.459481] pci_bus 0000:04: resource 1 [mem 0xf8000000-0xf9ffffff] [ 0.459484] pci_bus 0000:04: resource 2 [mem 0xf2000000-0xf3ffffff 64bit pref] [ 0.459488] pci_bus 0000:05: resource 0 [io 0x4000-0x4fff] [ 0.459491] pci_bus 0000:05: resource 1 [mem 0xfa000000-0xfbffffff] [ 0.459495] pci_bus 0000:05: resource 2 [mem 0xf4000000-0xf5ffffff 64bit pref] [ 0.459498] pci_bus 0000:06: resource 0 [io 0x5000-0x5fff] [ 0.459501] pci_bus 0000:06: resource 1 [mem 0xc8000000-0xc9ffffff] [ 0.459505] pci_bus 0000:06: resource 2 [mem 0xcc000000-0xcdffffff 64bit pref] [ 0.459508] pci_bus 0000:08: resource 1 [mem 0xfc200000-0xfc2fffff] [ 0.459512] pci_bus 0000:08: resource 4 [io 0x0000-0xffff] [ 0.459515] pci_bus 0000:08: resource 5 [mem 0x00000000-0xfffffffff] [ 0.459580] NET: Registered protocol family 2 [ 0.459816] IP route cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.461759] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 0.468207] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 0.469024] TCP: Hash tables configured (established 524288 bind 65536) [ 0.469028] TCP reno registered [ 0.469052] UDP hash table entries: 2048 (order: 4, 65536 bytes) [ 0.469120] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) [ 0.469325] NET: Registered protocol family 1 [ 0.469358] pci 0000:00:02.0: Boot video device [ 0.469577] PCI: CLS 64 bytes, default 64 [ 0.469604] Simple Boot Flag at 0x36 set to 0x1 [ 0.470069] audit: initializing netlink socket (disabled) [ 0.470088] type=2000 audit(1317800082.464:1): initialized [ 0.509918] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.531362] VFS: Disk quotas dquot_6.5.2 [ 0.531454] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.532343] fuse init (API version 7.16) [ 0.532465] msgmni has been set to 5719 [ 0.532931] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.532975] io scheduler noop registered [ 0.532978] io scheduler deadline registered [ 0.533033] io scheduler cfq registered (default) [ 0.533206] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.533281] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 0.533378] pcieport 0000:00:1c.1: setting latency timer to 64 [ 0.533444] pcieport 0000:00:1c.1: irq 41 for MSI/MSI-X [ 0.533540] pcieport 0000:00:1c.2: setting latency timer to 64 [ 0.533607] pcieport 0000:00:1c.2: irq 42 for MSI/MSI-X [ 0.533705] pcieport 0000:00:1c.3: setting latency timer to 64 [ 0.533770] pcieport 0000:00:1c.3: irq 43 for MSI/MSI-X [ 0.533898] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.533934] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.533994] intel_idle: MWAIT substates: 0x22220 [ 0.533997] intel_idle: does not run on family 6 model 15 [ 0.534105] ACPI: Deprecated procfs I/F for AC is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared [ 0.534186] ACPI: AC Adapter [ACAD] (on-line) [ 0.534267] input: Lid Switch as /devices/LNXSYSTM:00/device:00/PNP0C0D:00/input/input0 [ 0.534291] ACPI: Lid Switch [LID0] [ 0.534348] input: Power Button as /devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input1 [ 0.534353] ACPI: Power Button [PWRB] [ 0.534429] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2 [ 0.534434] ACPI: Power Button [PWRF] [ 0.534479] ACPI: acpi_idle registered with cpuidle [ 0.536970] Monitor-Mwait will be used to enter C-1 state [ 0.537024] Monitor-Mwait will be used to enter C-2 state [ 0.537059] Monitor-Mwait will be used to enter C-3 state [ 0.537066] Marking TSC unstable due to TSC halts in idle [ 0.576306] ACPI: Deprecated procfs I/F for battery is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared [ 0.576339] ERST: Table is not found! [ 0.576477] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled [ 0.596514] ACPI: Battery Slot [BAT1] (battery present) [ 0.756873] Freeing initrd memory: 19464k freed [ 0.789948] Linux agpgart interface v0.103 [ 0.790084] agpgart-intel 0000:00:00.0: Intel 965GM Chipset [ 0.790242] agpgart-intel 0000:00:00.0: detected gtt size: 524288K total, 262144K mappable [ 0.791097] agpgart-intel 0000:00:00.0: detected 8192K stolen memory [ 0.791250] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xd0000000 [ 0.792794] brd: module loaded [ 0.793486] loop: module loaded [ 0.793683] ata_piix 0000:00:1f.1: version 2.13 [ 0.793701] ata_piix 0000:00:1f.1: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 0.793746] ata_piix 0000:00:1f.1: setting latency timer to 64 [ 0.794143] scsi0 : ata_piix [ 0.794282] scsi1 : ata_piix [ 0.794784] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0x1810 irq 14 [ 0.794789] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x1818 irq 15 [ 0.795227] Fixed MDIO Bus: probed [ 0.795261] PPP generic driver version 2.4.2 [ 0.795315] tun: Universal TUN/TAP device driver, 1.6 [ 0.795318] tun: (C) 1999-2004 Max Krasnyansky [ 0.795429] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.795451] ehci_hcd 0000:00:1a.7: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.795472] ehci_hcd 0000:00:1a.7: setting latency timer to 64 [ 0.795477] ehci_hcd 0000:00:1a.7: EHCI Host Controller [ 0.795524] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 1 [ 0.795567] ehci_hcd 0000:00:1a.7: debug port 1 [ 0.799463] ehci_hcd 0000:00:1a.7: cache line size of 64 is not supported [ 0.799485] ehci_hcd 0000:00:1a.7: irq 18, io mem 0xfc504800 [ 0.812020] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00 [ 0.812182] hub 1-0:1.0: USB hub found [ 0.812189] hub 1-0:1.0: 4 ports detected [ 0.812291] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.812305] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 0.812310] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 0.812363] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 2 [ 0.812398] ehci_hcd 0000:00:1d.7: debug port 1 [ 0.816279] ehci_hcd 0000:00:1d.7: cache line size of 64 is not supported [ 0.816301] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xfc504c00 [ 0.832023] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 0.832151] hub 2-0:1.0: USB hub found [ 0.832157] hub 2-0:1.0: 6 ports detected [ 0.832258] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.832276] uhci_hcd: USB Universal Host Controller Interface driver [ 0.832305] uhci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.832314] uhci_hcd 0000:00:1a.0: setting latency timer to 64 [ 0.832319] uhci_hcd 0000:00:1a.0: UHCI Host Controller [ 0.832366] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 3 [ 0.832412] uhci_hcd 0000:00:1a.0: irq 16, io base 0x00001820 [ 0.832569] hub 3-0:1.0: USB hub found [ 0.832575] hub 3-0:1.0: 2 ports detected [ 0.832668] uhci_hcd 0000:00:1a.1: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 0.832679] uhci_hcd 0000:00:1a.1: setting latency timer to 64 [ 0.832684] uhci_hcd 0000:00:1a.1: UHCI Host Controller [ 0.832731] uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 4 [ 0.832775] uhci_hcd 0000:00:1a.1: irq 21, io base 0x00001840 [ 0.832936] hub 4-0:1.0: USB hub found [ 0.832941] hub 4-0:1.0: 2 ports detected [ 0.833028] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.833037] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 0.833042] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 0.833099] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 5 [ 0.833134] uhci_hcd 0000:00:1d.0: irq 23, io base 0x00001860 [ 0.833291] hub 5-0:1.0: USB hub found [ 0.833296] hub 5-0:1.0: 2 ports detected [ 0.833384] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.833392] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 0.833397] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 0.833448] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 6 [ 0.833493] uhci_hcd 0000:00:1d.1: irq 19, io base 0x00001880 [ 0.833649] hub 6-0:1.0: USB hub found [ 0.833655] hub 6-0:1.0: 2 ports detected [ 0.833737] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.833746] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 0.833750] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 0.833797] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 7 [ 0.833832] uhci_hcd 0000:00:1d.2: irq 18, io base 0x000018a0 [ 0.833984] hub 7-0:1.0: USB hub found [ 0.833990] hub 7-0:1.0: 2 ports detected [ 0.834133] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 0.858635] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.858644] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.858792] mousedev: PS/2 mouse device common for all mice [ 0.860515] rtc_cmos 00:07: RTC can wake from S4 [ 0.860650] rtc_cmos 00:07: rtc core: registered rtc_cmos as rtc0 [ 0.860686] rtc0: alarms up to one month, y3k, 242 bytes nvram, hpet irqs [ 0.860821] device-mapper: uevent: version 1.0.3 [ 0.860928] device-mapper: ioctl: 4.20.0-ioctl (2011-02-02) initialised: dm-devel@redhat.com [ 0.861015] cpuidle: using governor ladder [ 0.861137] cpuidle: using governor menu [ 0.861140] EFI Variables Facility v0.08 2004-May-17 [ 0.861497] TCP cubic registered [ 0.861666] NET: Registered protocol family 10 [ 0.862339] NET: Registered protocol family 17 [ 0.862362] Registering the dns_resolver key type [ 0.862505] PM: Hibernation image not present or could not be loaded. [ 0.862521] registered taskstats version 1 [ 0.881709] Magic number: 15:169:571 [ 0.881852] rtc_cmos 00:07: setting system clock to 2011-10-05 07:34:43 UTC (1317800083) [ 0.882695] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.882699] EDD information not available. [ 0.885384] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3 [ 0.964510] ata1.00: ATAPI: MATSHITADVD-RAM UJ-850 z, RB32, max UDMA/33 [ 0.980374] ata1.00: configured for UDMA/33 [ 0.983110] scsi 0:0:0:0: CD-ROM MATSHITA DVD-RAM UJ-850 z RB32 PQ: 0 ANSI: 5 [ 0.985684] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 0.985690] cdrom: Uniform CD-ROM driver Revision: 3.20 [ 0.985886] sr 0:0:0:0: Attached scsi CD-ROM sr0 [ 0.985957] sr 0:0:0:0: Attached scsi generic sg0 type 5 [ 0.988684] Freeing unused kernel memory: 984k freed [ 0.989019] Write protecting the kernel read-only data: 10240k [ 0.989354] Freeing unused kernel memory: 20k freed [ 0.996526] Freeing unused kernel memory: 1400k freed [ 1.023090] udevd[92]: starting version 173 [ 1.095474] [drm] Initialized drm 1.1.0 20060810 [ 1.111223] tg3.c:v3.119 (May 18, 2011) [ 1.111255] tg3 0000:06:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 1.111275] tg3 0000:06:00.0: setting latency timer to 64 [ 1.123354] wmi: Mapper loaded [ 1.135292] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.135301] i915 0000:00:02.0: setting latency timer to 64 [ 1.229432] i915 0000:00:02.0: irq 44 for MSI/MSI-X [ 1.229442] [drm] Supports vblank timestamp caching Rev 1 (10.10.2010). [ 1.229444] [drm] Driver supports precise vblank timestamp query. [ 1.229504] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=io+mem,decodes=io+mem:owns=io+mem [ 1.231431] sdhci: Secure Digital Host Controller Interface driver [ 1.231435] sdhci: Copyright(c) Pierre Ossman [ 1.231761] sdhci-pci 0000:08:06.1: SDHCI controller found [1180:0822] (rev 19) [ 1.231780] sdhci-pci 0000:08:06.1: PCI INT B -> GSI 23 (level, low) -> IRQ 23 [ 1.232804] sdhci-pci 0000:08:06.1: Will use DMA mode even though HW doesn't fully claim to support it. [ 1.251222] mmc0: no vmmc regulator found [ 1.252265] Registered led device: mmc0:: [ 1.258216] mmc0: SDHCI controller on PCI [0000:08:06.1] using DMA [ 1.278826] tg3 0000:06:00.0: eth0: Tigon3 [partno(BCM95906) rev c002] (PCI Express) MAC address 00:1b:38:0c:7f:47 [ 1.278833] tg3 0000:06:00.0: eth0: attached PHY is 5906 (10/100Base-TX Ethernet) (WireSpeed[0], EEE[0]) [ 1.278838] tg3 0000:06:00.0: eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1] [ 1.278842] tg3 0000:06:00.0: eth0: dma_rwctrl[76180000] dma_mask[64-bit] [ 1.288114] firewire_ohci 0000:08:06.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 1.288352] fixme: max PWM is zero. [ 1.321105] [drm] initialized overlay support [ 1.363095] firewire_ohci: Added fw-ohci device 0000:08:06.0, OHCI v1.10, 4 IR + 4 IT contexts, quirks 0x1 [ 1.429305] usb 1-4: new high speed USB device number 4 using ehci_hcd [ 1.510188] fbcon: inteldrmfb (fb0) is primary device [ 1.510267] Console: switching to colour frame buffer device 160x50 [ 1.510301] fb0: inteldrmfb frame buffer device [ 1.510304] drm: registered panic notifier [ 1.596139] acpi device:08: registered as cooling_device2 [ 1.596350] input: Video Bus as /devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:01/input/input4 [ 1.596428] ACPI: Video Device [GFX0] (multi-head: yes rom: no post: no) [ 1.596505] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 1.596723] ahci 0000:00:1f.2: version 3.0 [ 1.596748] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.596832] ahci 0000:00:1f.2: irq 45 for MSI/MSI-X [ 1.596928] ahci 0000:00:1f.2: AHCI 0001.0100 32 slots 3 ports 3 Gbps 0x7 impl SATA mode [ 1.596934] ahci 0000:00:1f.2: flags: 64bit ncq sntf pm led clo pio slum part ccc [ 1.596941] ahci 0000:00:1f.2: setting latency timer to 64 [ 1.600697] scsi2 : ahci [ 1.601002] scsi3 : ahci [ 1.601154] scsi4 : ahci [ 1.601328] ata3: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504100 irq 45 [ 1.601335] ata4: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504180 irq 45 [ 1.601340] ata5: SATA max UDMA/133 abar m2048@0xfc504000 port 0xfc504200 irq 45 [ 1.860262] firewire_core: created device fw0: GUID 00023f7bac4040de, S400 [ 1.920122] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.921792] ata3.00: unexpected _GTF length (8) [ 1.922070] ata3.00: ATA-8: WDC WD2500BEKT-75PVMT0, 01.01A01, max UDMA/133 [ 1.922077] ata3.00: 488397168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA [ 1.923756] ata3.00: unexpected _GTF length (8) [ 1.924053] ata4: SATA link down (SStatus 0 SControl 300) [ 1.924081] ata3.00: configured for UDMA/133 [ 1.924106] ata5: SATA link down (SStatus 0 SControl 300) [ 1.924318] scsi 2:0:0:0: Direct-Access ATA WDC WD2500BEKT-7 01.0 PQ: 0 ANSI: 5 [ 1.924525] sd 2:0:0:0: Attached scsi generic sg1 type 0 [ 1.924642] sd 2:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB) [ 1.924823] sd 2:0:0:0: [sda] Write Protect is off [ 1.924828] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.924898] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.020840] sda: sda1 sda2 sda3 sda4 < sda5 > [ 2.021461] sd 2:0:0:0: [sda] Attached SCSI disk [ 2.032059] usb 3-1: new full speed USB device number 2 using uhci_hcd [ 2.464056] usb 4-1: new full speed USB device number 2 using uhci_hcd [ 2.872042] usb 6-1: new low speed USB device number 2 using uhci_hcd [ 3.093235] input: MLK Trust Mouse as /devices/pci0000:00/0000:00:1d.1/usb6/6-1/6-1:1.0/input/input5 [ 3.093727] generic-usb 0003:04FC:05DA.0001: input,hiddev0,hidraw0: USB HID v1.10 Mouse [MLK Trust Mouse] on usb-0000:00:1d.1-1/input0 [ 3.093905] usbcore: registered new interface driver usbhid [ 3.093909] usbhid: USB HID core driver [ 3.288960] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null) [ 3.308073] usb 6-2: new full speed USB device number 3 using uhci_hcd [ 3.720052] usb 7-1: new low speed USB device number 2 using uhci_hcd [ 3.918393] input: LITEON Technology USB Multimedia Keyboard as /devices/pci0000:00/0000:00:1d.2/usb7/7-1/7-1:1.0/input/input6 [ 3.918495] generic-usb 0003:046D:C312.0002: input,hidraw1: USB HID v1.10 Keyboard [LITEON Technology USB Multimedia Keyboard] on usb-0000:00:1d.2-1/input0 [ 5.565904] Adding 15999996k swap on /dev/sda3. Priority:-1 extents:1 across:15999996k [ 5.691364] udevd[373]: starting version 173 [ 6.303871] lp: driver loaded but no devices found [ 7.040655] cfg80211: Calling CRDA to update world regulatory domain [ 7.159284] r852 0000:08:06.3: PCI INT B -> GSI 23 (level, low) -> IRQ 23 [ 7.159297] r852 0000:08:06.3: setting latency timer to 64 [ 7.159394] r852: Non dma capable device detected, dma disabled [ 7.159411] r852: driver loaded successfully [ 7.169632] iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, in-tree:s [ 7.169637] iwl3945: Copyright(c) 2003-2011 Intel Corporation [ 7.169734] iwl3945 0000:04:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 7.169751] iwl3945 0000:04:00.0: setting latency timer to 64 [ 7.225063] iwl3945 0000:04:00.0: Tunable channels: 13 802.11bg, 23 802.11a channels [ 7.225067] iwl3945 0000:04:00.0: Detected Intel Wireless WiFi Link 3945ABG [ 7.225225] iwl3945 0000:04:00.0: irq 46 for MSI/MSI-X [ 7.225470] Registered led device: phy0-led [ 7.225511] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 7.521071] ieee80211 phy0: Selected rate control algorithm 'iwl-3945-rs' [ 7.728682] udevd[389]: renamed network interface eth0 to eth1 [ 7.785421] udevd[392]: renamed network interface wlan0 to wlan1 [ 7.839555] device-mapper: multipath: version 1.3.0 loaded [ 7.920206] Synaptics Touchpad, model: 1, fw: 6.3, id: 0x25c0b1, caps: 0xa04713/0x200000/0x0 [ 8.001393] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input7 [ 8.103705] Linux video capture interface: v2.00 [ 8.142601] uvcvideo: Found UVC 1.00 device USB 2.0 Camera (04f2:b013) [ 8.145395] input: USB 2.0 Camera as /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/input/input8 [ 8.145503] usbcore: registered new interface driver uvcvideo [ 8.145506] USB Video Class driver (v1.1.0) [ 8.268868] gspca: v2.13.0 registered [ 8.426860] Bluetooth: Core ver 2.16 [ 8.426898] NET: Registered protocol family 31 [ 8.426901] Bluetooth: HCI device and connection manager initialized [ 8.426905] Bluetooth: HCI socket layer initialized [ 8.426908] Bluetooth: L2CAP socket layer initialized [ 8.426983] Bluetooth: SCO socket layer initialized [ 8.445120] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 8.445873] usbcore: registered new interface driver btusb [ 8.596127] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 8.596132] cfg80211: World regulatory domain updated: [ 8.596135] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 8.596139] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.596144] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 8.596147] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 8.596151] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.596155] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.713241] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 8.713332] HDA Intel 0000:00:1b.0: irq 47 for MSI/MSI-X [ 8.713375] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 9.214524] type=1400 audit(1317800091.827:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient" pid=762 comm="apparmor_parser" [ 9.214539] type=1400 audit(1317800091.827:3): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=760 comm="apparmor_parser" [ 9.214899] type=1400 audit(1317800091.827:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=762 comm="apparmor_parser" [ 9.214917] type=1400 audit(1317800091.827:5): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=760 comm="apparmor_parser" [ 9.215139] type=1400 audit(1317800091.827:6): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=762 comm="apparmor_parser" [ 9.215162] type=1400 audit(1317800091.827:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=760 comm="apparmor_parser" [ 9.215989] type=1400 audit(1317800091.827:8): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=761 comm="apparmor_parser" [ 9.216386] type=1400 audit(1317800091.831:9): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=761 comm="apparmor_parser" [ 9.216637] type=1400 audit(1317800091.831:10): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=761 comm="apparmor_parser" [ 9.565602] input: zc3xx as /devices/pci0000:00/0000:00:1a.0/usb3/3-1/input/input9 [ 9.565840] usbcore: registered new interface driver zc3xx [ 9.567768] usbcore: registered new interface driver snd-usb-audio [ 10.957262] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro [ 11.498897] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 11.610016] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null) [ 13.338782] type=1400 audit(1317800095.951:11): apparmor="STATUS" operation="profile_load" name="/usr/lib/lightdm/lightdm-guest-session-wrapper" pid=1170 comm="apparmor_parser" [ 14.107842] ppdev: user-space parallel port driver [ 16.201248] microcode: CPU0 sig=0x6fd, pf=0x80, revision=0xa1 [ 16.241864] microcode: CPU1 sig=0x6fd, pf=0x80, revision=0xa1 [ 16.244584] microcode: Microcode Update Driver: v2.00 , Peter Oruba [ 16.257389] iwl3945 0000:04:00.0: loaded firmware version 15.32.2.9 [ 16.319712] microcode: CPU0 updated to revision 0xa4, date = 2010-10-02 [ 16.320392] microcode: CPU1 updated to revision 0xa4, date = 2010-10-02 [ 16.327663] ADDRCONF(NETDEV_UP): wlan1: link is not ready [ 16.411245] tg3 0000:06:00.0: irq 48 for MSI/MSI-X [ 16.441602] ADDRCONF(NETDEV_UP): eth1: link is not ready [ 17.163336] init: failsafe main process (1112) killed by TERM signal [ 17.369512] init: gdm main process (1340) killed by TERM signal [ 18.121686] tg3 0000:06:00.0: eth1: Link is up at 100 Mbps, full duplex [ 18.121691] tg3 0000:06:00.0: eth1: Flow control is on for TX and on for RX [ 18.122295] ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready [ 21.210518] RPC: Registered named UNIX socket transport module. [ 21.210523] RPC: Registered udp transport module. [ 21.210525] RPC: Registered tcp transport module. [ 21.210528] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 21.445931] Installing knfsd (copyright (C) 1996 okir@monad.swb.de). [ 21.627527] NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory [ 21.636586] NFSD: starting 90-second grace period [ 24.852307] vboxdrv: Found 2 processor cores. [ 24.852593] vboxdrv: fAsync=0 offMin=0x1c2 offMax=0xae6 [ 24.852666] vboxdrv: TSC mode is 'synchronous', kernel timer mode is 'normal'. [ 24.852669] vboxdrv: Successfully loaded version 4.1.2_Ubuntu (interface 0x00190000). [ 25.101599] vboxpci: IOMMU not found (not registered) [ 27.046401] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 27.046405] Bluetooth: BNEP filters: protocol multicast [ 27.081903] Bluetooth: RFCOMM TTY layer initialized [ 27.081919] Bluetooth: RFCOMM socket layer initialized [ 27.081921] Bluetooth: RFCOMM ver 1.11 [ 28.752057] eth1: no IPv6 routers present [ 33.139443] init: plymouth-stop pre-start process (2005) terminated with status 1 [ 33.628053] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro,commit=0 [ 34.056830] EXT4-fs (sda1): re-mounted. Opts: commit=0 [ 34.217110] EXT4-fs (sda5): re-mounted. Opts: commit=0 [ 45.192742] wlan1: authenticate with 00:1a:c1:38:47:d4 (try 1) [ 45.196319] wlan1: authenticated [ 45.199717] wlan1: associate with 00:1a:c1:38:47:d4 (try 1) [ 45.202749] wlan1: RX AssocResp from 00:1a:c1:38:47:d4 (capab=0x431 status=0 aid=2) [ 45.202758] wlan1: associated [ 45.206342] ADDRCONF(NETDEV_CHANGE): wlan1: link becomes ready [ 45.206456] cfg80211: Calling CRDA for country: GB [ 45.213483] cfg80211: Updating information on frequency 2412 MHz for a 20 MHz width channel with regulatory rule: [ 45.213493] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213498] cfg80211: Updating information on frequency 2417 MHz for a 20 MHz width channel with regulatory rule: [ 45.213505] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213509] cfg80211: Updating information on frequency 2422 MHz for a 20 MHz width channel with regulatory rule: [ 45.213516] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213520] cfg80211: Updating information on frequency 2427 MHz for a 20 MHz width channel with regulatory rule: [ 45.213526] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213531] cfg80211: Updating information on frequency 2432 MHz for a 20 MHz width channel with regulatory rule: [ 45.213537] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213542] cfg80211: Updating information on frequency 2437 MHz for a 20 MHz width channel with regulatory rule: [ 45.213547] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213552] cfg80211: Updating information on frequency 2442 MHz for a 20 MHz width channel with regulatory rule: [ 45.213558] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213563] cfg80211: Updating information on frequency 2447 MHz for a 20 MHz width channel with regulatory rule: [ 45.213569] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213573] cfg80211: Updating information on frequency 2452 MHz for a 20 MHz width channel with regulatory rule: [ 45.213579] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213584] cfg80211: Updating information on frequency 2457 MHz for a 20 MHz width channel with regulatory rule: [ 45.213590] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213594] cfg80211: Updating information on frequency 2462 MHz for a 20 MHz width channel with regulatory rule: [ 45.213600] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213605] cfg80211: Updating information on frequency 2467 MHz for a 20 MHz width channel with regulatory rule: [ 45.213611] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213615] cfg80211: Updating information on frequency 2472 MHz for a 20 MHz width channel with regulatory rule: [ 45.213621] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213626] cfg80211: Disabling freq 5170 MHz [ 45.213630] cfg80211: Updating information on frequency 5180 MHz for a 20 MHz width channel with regulatory rule: [ 45.213636] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213640] cfg80211: Updating information on frequency 5190 MHz for a 20 MHz width channel with regulatory rule: [ 45.213646] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213651] cfg80211: Updating information on frequency 5200 MHz for a 20 MHz width channel with regulatory rule: [ 45.213657] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213662] cfg80211: Updating information on frequency 5210 MHz for a 20 MHz width channel with regulatory rule: [ 45.213667] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213672] cfg80211: Updating information on frequency 5220 MHz for a 20 MHz width channel with regulatory rule: [ 45.213678] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213683] cfg80211: Updating information on frequency 5230 MHz for a 20 MHz width channel with regulatory rule: [ 45.213688] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213693] cfg80211: Updating information on frequency 5240 MHz for a 20 MHz width channel with regulatory rule: [ 45.213699] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213704] cfg80211: Updating information on frequency 5260 MHz for a 20 MHz width channel with regulatory rule: [ 45.213710] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213714] cfg80211: Updating information on frequency 5280 MHz for a 20 MHz width channel with regulatory rule: [ 45.213720] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213725] cfg80211: Updating information on frequency 5300 MHz for a 20 MHz width channel with regulatory rule: [ 45.213731] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213736] cfg80211: Updating information on frequency 5320 MHz for a 20 MHz width channel with regulatory rule: [ 45.213742] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 45.213746] cfg80211: Updating information on frequency 5500 MHz for a 20 MHz width channel with regulatory rule: [ 45.213752] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213757] cfg80211: Updating information on frequency 5520 MHz for a 20 MHz width channel with regulatory rule: [ 45.213763] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213768] cfg80211: Updating information on frequency 5540 MHz for a 20 MHz width channel with regulatory rule: [ 45.213774] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213779] cfg80211: Updating information on frequency 5560 MHz for a 20 MHz width channel with regulatory rule: [ 45.213785] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213789] cfg80211: Updating information on frequency 5580 MHz for a 20 MHz width channel with regulatory rule: [ 45.213795] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213800] cfg80211: Updating information on frequency 5600 MHz for a 20 MHz width channel with regulatory rule: [ 45.213806] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213810] cfg80211: Updating information on frequency 5620 MHz for a 20 MHz width channel with regulatory rule: [ 45.213816] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213821] cfg80211: Updating information on frequency 5640 MHz for a 20 MHz width channel with regulatory rule: [ 45.213827] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213831] cfg80211: Updating information on frequency 5660 MHz for a 20 MHz width channel with regulatory rule: [ 45.213837] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213842] cfg80211: Updating information on frequency 5680 MHz for a 20 MHz width channel with regulatory rule: [ 45.213848] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213852] cfg80211: Updating information on frequency 5700 MHz for a 20 MHz width channel with regulatory rule: [ 45.213858] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 45.213864] cfg80211: Regulatory domain changed to country: GB [ 45.213868] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 45.213873] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213879] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213884] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 45.213889] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm) [ 52.640123] eth1: no IPv6 routers present [ 55.208282] wlan1: disassociating from 00:1a:c1:38:47:d4 by local choice (reason=3) [ 55.214021] cfg80211: All devices are disconnected, going to restore regulatory settings [ 55.214032] cfg80211: Restoring regulatory settings [ 55.214052] cfg80211: Calling CRDA to update world regulatory domain [ 55.214778] wlan1: deauthenticating from 00:1a:c1:38:47:d4 by local choice (reason=3) [ 55.221291] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 55.221299] cfg80211: World regulatory domain updated: [ 55.221303] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 55.221309] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.221315] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 55.221321] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 55.221327] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.221333] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 55.392119] wlan1: no IPv6 routers present [ 58.763822] wlan1: authenticate with 00:1a:c1:38:47:d4 (try 1) [ 58.765582] wlan1: authenticated [ 58.766582] wlan1: associate with 00:1a:c1:38:47:d4 (try 1) [ 58.769972] wlan1: RX ReassocResp from 00:1a:c1:38:47:d4 (capab=0x431 status=0 aid=2) [ 58.769980] wlan1: associated [ 58.773587] cfg80211: Calling CRDA for country: GB [ 58.778304] cfg80211: Updating information on frequency 2412 MHz for a 20 MHz width channel with regulatory rule: [ 58.778310] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778314] cfg80211: Updating information on frequency 2417 MHz for a 20 MHz width channel with regulatory rule: [ 58.778318] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778321] cfg80211: Updating information on frequency 2422 MHz for a 20 MHz width channel with regulatory rule: [ 58.778325] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778328] cfg80211: Updating information on frequency 2427 MHz for a 20 MHz width channel with regulatory rule: [ 58.778332] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778335] cfg80211: Updating information on frequency 2432 MHz for a 20 MHz width channel with regulatory rule: [ 58.778340] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778343] cfg80211: Updating information on frequency 2437 MHz for a 20 MHz width channel with regulatory rule: [ 58.778347] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778350] cfg80211: Updating information on frequency 2442 MHz for a 20 MHz width channel with regulatory rule: [ 58.778354] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778357] cfg80211: Updating information on frequency 2447 MHz for a 20 MHz width channel with regulatory rule: [ 58.778361] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778364] cfg80211: Updating information on frequency 2452 MHz for a 20 MHz width channel with regulatory rule: [ 58.778368] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778371] cfg80211: Updating information on frequency 2457 MHz for a 20 MHz width channel with regulatory rule: [ 58.778375] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778378] cfg80211: Updating information on frequency 2462 MHz for a 20 MHz width channel with regulatory rule: [ 58.778382] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778385] cfg80211: Updating information on frequency 2467 MHz for a 20 MHz width channel with regulatory rule: [ 58.778389] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778392] cfg80211: Updating information on frequency 2472 MHz for a 20 MHz width channel with regulatory rule: [ 58.778396] cfg80211: 2402000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778399] cfg80211: Disabling freq 5170 MHz [ 58.778402] cfg80211: Updating information on frequency 5180 MHz for a 20 MHz width channel with regulatory rule: [ 58.778406] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778409] cfg80211: Updating information on frequency 5190 MHz for a 20 MHz width channel with regulatory rule: [ 58.778413] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778416] cfg80211: Updating information on frequency 5200 MHz for a 20 MHz width channel with regulatory rule: [ 58.778420] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778423] cfg80211: Updating information on frequency 5210 MHz for a 20 MHz width channel with regulatory rule: [ 58.778427] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778430] cfg80211: Updating information on frequency 5220 MHz for a 20 MHz width channel with regulatory rule: [ 58.778434] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778437] cfg80211: Updating information on frequency 5230 MHz for a 20 MHz width channel with regulatory rule: [ 58.778441] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778444] cfg80211: Updating information on frequency 5240 MHz for a 20 MHz width channel with regulatory rule: [ 58.778448] cfg80211: 5170000 KHz - 5250000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778452] cfg80211: Updating information on frequency 5260 MHz for a 20 MHz width channel with regulatory rule: [ 58.778456] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778459] cfg80211: Updating information on frequency 5280 MHz for a 20 MHz width channel with regulatory rule: [ 58.778463] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778466] cfg80211: Updating information on frequency 5300 MHz for a 20 MHz width channel with regulatory rule: [ 58.778470] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778473] cfg80211: Updating information on frequency 5320 MHz for a 20 MHz width channel with regulatory rule: [ 58.778477] cfg80211: 5250000 KHz - 5330000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 58.778480] cfg80211: Updating information on frequency 5500 MHz for a 20 MHz width channel with regulatory rule: [ 58.778484] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778487] cfg80211: Updating information on frequency 5520 MHz for a 20 MHz width channel with regulatory rule: [ 58.778491] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778494] cfg80211: Updating information on frequency 5540 MHz for a 20 MHz width channel with regulatory rule: [ 58.778498] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778501] cfg80211: Updating information on frequency 5560 MHz for a 20 MHz width channel with regulatory rule: [ 58.778505] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778508] cfg80211: Updating information on frequency 5580 MHz for a 20 MHz width channel with regulatory rule: [ 58.778512] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778515] cfg80211: Updating information on frequency 5600 MHz for a 20 MHz width channel with regulatory rule: [ 58.778519] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778522] cfg80211: Updating information on frequency 5620 MHz for a 20 MHz width channel with regulatory rule: [ 58.778526] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778529] cfg80211: Updating information on frequency 5640 MHz for a 20 MHz width channel with regulatory rule: [ 58.778533] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778536] cfg80211: Updating information on frequency 5660 MHz for a 20 MHz width channel with regulatory rule: [ 58.778540] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778543] cfg80211: Updating information on frequency 5680 MHz for a 20 MHz width channel with regulatory rule: [ 58.778547] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778550] cfg80211: Updating information on frequency 5700 MHz for a 20 MHz width channel with regulatory rule: [ 58.778554] cfg80211: 5490000 KHz - 5710000 KHz @ KHz), (N/A mBi, 2700 mBm) [ 58.778558] cfg80211: Regulatory domain changed to country: GB [ 58.778560] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 58.778564] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778568] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778571] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm) [ 58.778575] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm) [ 70.176124] wlan1: no IPv6 routers present [ 75.152080] eth1: no IPv6 routers present [ 98.736094] eth1: no IPv6 routers present [ 648.357292] ecryptfs_mount: kern_path() failed [ 648.388155] Reading sb failed; rc = [-2] [ 670.016019] eth1: no IPv6 routers present [ 688.176048] eth1: no IPv6 routers present [ 711.096140] eth1: no IPv6 routers present fwts-test/arg-show-progress-dialog-0001/progress-0001.log000066400000000000000000000424361465205512700231670ustar00rootroot00000000000000Running 2 tests, results appended to results.log XXX 0 0 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 0.00% total run complete (0 seconds). Scan kernel log for Oopses. Running test #1 of 2: XXX XXX 0 0 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 0.00% total run complete (0 seconds). Scan kernel log for Oopses. Running test #1 of 2: Kernel log oops check. XXX XXX 100 0 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 50.00% total run complete (0 seconds). Scan kernel log for Oopses. Running test #1 of 2: Kernel log oops check. XXX XXX 0 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 50.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: XXX XXX 0 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 50.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 0 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 50.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 1 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 50.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 2 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 51.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 3 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 51.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 4 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 52.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 5 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 52.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 7 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 53.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 8 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 54.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 9 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 54.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 10 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 55.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 11 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 55.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 12 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 56.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 14 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 57.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 15 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 57.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 16 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 58.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 17 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 58.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 18 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 59.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 19 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 59.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 21 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 60.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 22 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 61.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 23 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 61.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 24 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 62.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 25 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 62.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 27 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 63.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 28 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 64.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 29 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 64.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 30 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 65.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 31 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 65.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 32 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 66.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 34 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 67.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 35 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 67.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 36 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 68.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 37 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 68.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 38 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 69.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 39 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 69.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 41 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 70.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 42 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 71.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 43 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 71.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 44 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 72.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 45 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 72.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 47 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 73.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 48 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 74.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 49 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 74.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 0 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 50.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 1 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 50.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 2 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 51.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 4 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 52.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 5 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 52.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 6 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 53.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 8 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 54.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 9 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 54.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 11 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 55.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 12 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 56.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 13 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 56.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 15 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 57.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 16 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 58.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 18 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 59.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 19 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 59.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 20 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 60.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 22 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 61.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 23 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 61.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 24 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 62.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 26 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 63.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 27 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 63.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 29 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 64.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 30 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 65.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 31 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 65.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 33 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 66.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 34 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 67.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 35 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 67.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 37 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 68.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 38 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 69.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 40 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 70.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 41 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 70.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 42 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 71.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 44 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 72.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 45 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 72.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 47 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 73.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 48 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 74.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 49 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 74.50% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 100 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 100.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX XXX 100 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. 100.00% total run complete (0 seconds). Scan kernel log for errors and warnings. Running test #2 of 2: Kernel log error check. XXX fwts-test/arg-show-progress-dialog-0001/test-0001.sh000077500000000000000000000014051465205512700221250ustar00rootroot00000000000000#!/bin/bash # TEST="Test --show-progress-dialog option" NAME=test-0001.sh TMPLOG=$TMP/progress.log.$$ TMPLOG_ORIG=$TMP/progress-0001.log.$$ # # Normalise % progress and seconds to run so it works OK # with different progress roundings and test durations on # different architectures. # fixup() { sed s'X[0-9]*\.[0-9]*%X00.00%X' | sed s'X[0-9]* secondsX0 secondsX' } $FWTS -w 80 --show-progress-dialog -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-show-progress-dialog-0001/klog.txt oops klog | fixup > $TMPLOG fixup < $FWTSTESTDIR/arg-show-progress-dialog-0001/progress-0001.log > $TMPLOG_ORIG diff $TMPLOG $TMPLOG_ORIG >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG $TMPLOG_ORIG exit $ret fwts-test/arg-show-progress-dialog-0001/test-0002.sh000077500000000000000000000013351465205512700221300ustar00rootroot00000000000000#!/bin/bash # TEST="Test -D option" NAME=test-0002.sh TMPLOG=$TMP/progress.log.$$ TMPLOG_ORIG=$TMP/progress-0001.log.$$ # # Normalise % progress and seconds to run so it works OK # with different progress roundings and test durations on # different architectures. # fixup() { sed s'X[0-9]*\.[0-9]*%X00.00%X' | sed s'X[0-9]* secondsX0 secondsX' } $FWTS -w 80 -D -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-show-progress-dialog-0001/klog.txt oops klog | fixup > $TMPLOG fixup < $FWTSTESTDIR/arg-show-progress-dialog-0001/progress-0001.log > $TMPLOG_ORIG diff $TMPLOG $TMPLOG_ORIG >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG $TMPLOG_ORIG exit $ret fwts-test/arg-table-path-0001/000077500000000000000000000000001465205512700161735ustar00rootroot00000000000000fwts-test/arg-table-path-0001/APIC1.dat000066400000000000000000000001501465205512700174560ustar00rootroot00000000000000APIChÌINTEL CRESTLNELOHRZàþ Àþ  fwts-test/arg-table-path-0001/APIC2.dat000066400000000000000000000001501465205512700174570ustar00rootroot00000000000000APIChPTLTD APIC  LTPàþ Àþ  fwts-test/arg-table-path-0001/BOOT.dat000066400000000000000000000000501465205512700174230ustar00rootroot00000000000000BOOT(¥PTLTD $SBFTBL$ LTP6fwts-test/arg-table-path-0001/DSDT.dat000066400000000000000000000577641465205512700174460ustar00rootroot00000000000000DSDTô_TOSCPLCRESTLNEINTL Z000Z001 Z002 Z003 Z004Z005 Z006 Z007 Z008 ECDY [MUTX[€PRT0 € [ PRT0P80H NP8XH  “hp}{P80D ÿÿÿiP80D “hp}{P80D ÿÿÿyi P80D “h p}{P80D ÿÿÿyi P80D “h p}{P80D ÿÿÿyi P80DpP80DP80H _PICphGPICF_PTSpP80DP8XHh “h p\/_SB_PCI0LPCBEC0_S3LD 3“h p\/_SB_PCI0LPCBEC0_S3LD\/_SB_PCI0LPCBPHSS L_WAKP8XH « 0‘“h “h  %{CFGD  {CFGD ð“OSYS ÑTRAP = “RP1D†\/_SB_PCI0RP01 “RP2D†\/_SB_PCI0RP02 “RP3D†\/_SB_PCI0RP03 “RP4D†\/_SB_PCI0RP04 “RP5D†\/_SB_PCI0RP05 “RP6D†\/_SB_PCI0RP06 “h P8XH 0TRAP F C “h P8XH @\/_SB_PCI0LPCBPHSS pWAKF`pWAKF{` ` “`P8XH A†\._SB_PWRB  FDTSETRAP G B\/_SB_PCI0LPCBECOK“ECDY '’•DTS1DTS2pDTS1\/_SB_PCI0LPCBEC0_SKTA¡pDTS2\/_SB_PCI0LPCBEC0_SKTA¡\/_SB_PCI0LPCBPHSS \._PR_RPPC¤GETB wh `wi a[j`aTBF3¤TBF3B PNOT JMPEN 1{PDC0 †\._PR_CPU0 € {PDC0 [" d†\._PR_CPU0  1{PDC1 †\._PR_CPU1 € {PDC1 [" d†\._PR_CPU1 ¡†\._PR_CPU0 €[" d†\._PR_CPU0 TRAP phSMIFpTRP0¤SMIFA_SB_J_INIp ™™MARK DTSETRAP G^/PCI0LPCBPHSS p ÐOSYS J [_OSI` _OSI LinuxpLINXpECDY _OSI Windows 2001p ÑOSYS _OSI Windows 2001 SP1p ÑOSYS _OSI Windows 2001 SP2p ÒOSYS _OSI Windows 2006p ÖOSYS MPEN“OSYS ÑTRAP =TRAP +[€GNVS ¼-n¿ [E$GNVSOSYSSMIFPRM0PRM1SCIFPRM2PRM3LCKFPRM4PRM5P80D LIDSPWRSDBGSLINXACT1ACTTPSVTTC1VTC2VTSPVCRTTDTSEDTS1DTS2@APICMPENPCP0PCP1PPCM(CMAPCMBPLPTPFDCP0IGDSTLSTCADLPADLCSTENSTESSTENDIDDID1 DID2 DID3 DID4 DID5 @BLCSBRTLALSEALAFLLOWLHIHEMAEEMAPEMALMEFETPMPTPME@GTF08GTF28IDEMGTF18@ ASLB IBTTIPATITVFITVMIPSCIBLCIBIAISSCI409I509I609I709IDMMIDMSIF1EHVCONXD1 NXD2 MARKBRADBTENVVENBGTLTMEESCU0SCU1SCU2SCU3XKSPXKINXKIDXKOKBGU1BST1BFC1WKLNWAKFDSMDBAYSHAPEDTSMODT1ODT2DTSWDSENECONGPICCTYPL01CVFN0VFN1J|_GPEF5_L01rL01CL01CP8XHP8XHL01C H“RP1D\/_SB_PCI0RP01HPSX[" d @\/_SB_PCI0RP01PDCXp\/_SB_PCI0RP01PDCXp\/_SB_PCI0RP01HPSX†\/_SB_PCI0RP01¡p\/_SB_PCI0RP01HPSX H“RP2D\/_SB_PCI0RP02HPSX[" d @\/_SB_PCI0RP02PDCXp\/_SB_PCI0RP02PDCXp\/_SB_PCI0RP02HPSX†\/_SB_PCI0RP02¡p\/_SB_PCI0RP02HPSX H“RP3D\/_SB_PCI0RP03HPSX[" d @\/_SB_PCI0RP03PDCXp\/_SB_PCI0RP03PDCXp\/_SB_PCI0RP03HPSX†\/_SB_PCI0RP03¡p\/_SB_PCI0RP03HPSX H“RP4D\/_SB_PCI0RP04HPSX[" d @\/_SB_PCI0RP04PDCXp\/_SB_PCI0RP04PDCXp\/_SB_PCI0RP04HPSX†\/_SB_PCI0RP04¡p\/_SB_PCI0RP04HPSX H“RP5D\/_SB_PCI0RP05HPSX[" d @\/_SB_PCI0RP05PDCXp\/_SB_PCI0RP05PDCXp\/_SB_PCI0RP05HPSX†\/_SB_PCI0RP05¡p\/_SB_PCI0RP05HPSX H“RP6D\/_SB_PCI0RP06HPSX[" d @\/_SB_PCI0RP06PDCXp\/_SB_PCI0RP06PDCXp\/_SB_PCI0RP06HPSX†\/_SB_PCI0RP06¡p\/_SB_PCI0RP06HPSXB _L02pGPEC M \/_SB_PCI0LPCBECOK N“DTSW '’•DTS1DTS2pDTS1\/_SB_PCI0LPCBEC0_SKTA¡pDTS2\/_SB_PCI0LPCBEC0_SKTA¡H '’•ODT1ODT2pODT1\/_SB_PCI0LPCBEC0_SKTA¡pODT2\/_SB_PCI0LPCBEC0_SKTA¡\/_SB_PCI0LPCBPHSS _L03†\/_SB_PCI0USB1 _L04†\/_SB_PCI0USB2 _L05†\/_SB_PCI0USB5 6_L06 '\/_SB_PCI0GFX0GSSE\/_SB_PCI0GFX0GSCI¡pSCISC_L09 A\/_SB_PCI0RP01PSPXp\/_SB_PCI0RP01PSPXp\/_SB_PCI0RP01PMSX†\/_SB_PCI0RP01  A\/_SB_PCI0RP02PSPXp\/_SB_PCI0RP02PSPXp\/_SB_PCI0RP02PMSX†\/_SB_PCI0RP02  A\/_SB_PCI0RP03PSPXp\/_SB_PCI0RP03PSPXp\/_SB_PCI0RP03PMSX†\/_SB_PCI0RP03  A\/_SB_PCI0RP04PSPXp\/_SB_PCI0RP04PSPXp\/_SB_PCI0RP04PMSX†\/_SB_PCI0RP04  A\/_SB_PCI0RP05PSPXp\/_SB_PCI0RP05PSPXp\/_SB_PCI0RP05PMSX†\/_SB_PCI0RP05  A\/_SB_PCI0RP06PSPXp\/_SB_PCI0RP06PSPXp\/_SB_PCI0RP06PMSX†\/_SB_PCI0RP06 _L0B†\/_SB_PCI0PCIB _L0C†\/_SB_PCI0USB3 K _L0D ;\/_SB_PCI0EHC1PMESp\/_SB_PCI0EHC1PMES†\/_SB_PCI0EHC1  ;\/_SB_PCI0EHC2PMESp\/_SB_PCI0EHC2PMES†\/_SB_PCI0EHC2  ;\/_SB_PCI0HDEFPMESp\/_SB_PCI0HDEFPMES†\/_SB_PCI0HDEF _L0E†\/_SB_PCI0USB4 _L1B€LPOLLPOL†\._SB_LID0 €F _PR_[ƒ CPU0[ƒ CPU1E RPPC M“OSYS Ò B{CFGD B”^.CPU0_PPCt^.CPU0_PPC^.CPU0_PPCPNOTr^.CPU0_PPC^.CPU0_PPCPNOT¡5r^.CPU0_PPC^.CPU0_PPCPNOTt^.CPU0_PPC^.CPU0_PPCPNOTFWSO FWSO_PSC_PS0p_PSC`p_PSC _PS3p _PSCŒû_SB_[‚O>AMW0_HID pnp0c14_UID_WDG? <§….SÐ_IúJÖ.j†AC;mCqÝûrL¼¸C[þ dùBC!fÕѲð É)BASTAC WQACp MXMTCConfigData[1¤STACSTBC 4WQBCp Get MXMTCControlData: STBC = [1pSTBC[1¤STBCGWSBCpiSTBCp Set MXMTCControlData: STBC = [1pSTBC[1 0“^^/PCI0LPCBECOKpƒˆSTBC^^/PCI0LPCBEC0_SKTCWQBAC+ ®FOMBžÀ DS}ÚT(Ù…B KaÉ!R<”CˆWD„¼ °)À$ˆú÷‡( %B˜ [€a¶˜à’J§–!¡” ð-@;¢$ ° #‚¡qhì0,Lƒ8Œ²‘E`ÜNÈ L€xTa4EàBcd@È£«£Ð¤ؽe, 'ÀšcH2(@›[ BÔŠFpQjFH¬…4F°†7F˜ˆÑþ H ãf‘Fƒk‚c÷hN¸sÒç&£;¸:M†Ç°Ø)ïPÓ?x&5D:Ü û‘0ˆ³;n¬ÃÉhÐ¥ 0{ÐМö™„~8Ÿž!‰üA Fæÿ?´ÇxZ1C>  ¡Mj<@@áÑ@ož¯ F†“ñ àA×:2'¦!Ïè"¿2x AùÄ`¸ÇxðY@’!Qã§G~zx“0(Ò™ùáÂÄ{Ÿ;Á){¤à°~ À¯ |®Œªý @íQàT#-xŠJÌP8…ÐçsG%ö!Úá9NÁ÷‹#=­#x‘ð0áÎ(¨80ôÿLÜz;¦€>À1Püÿ?¦‡¨Çô@ |.¡ ÿ–Áއtj(€)yGPŒÖñ<› "O€ÎÿÿxX¸š¼’„}x‰ãAâµäÁ$F˜'GÀ·‚(‘Ž>ăI(c>£„‰ùp"ï'F s*',Äñ …âã :,„þÿÇÜáÁ§ ü… Æù0$ð|ÊÛæ€ŒÚô©Ñ¨Uƒ25Ê4¨Õ§RcÆLœR¼lßòž ± 8ÌóB –¢„…¡B©☠4’ öÿ[‚LID0_HID AÐ  _LID¤LPOL[‚PWRB_HID AÐ [‚„¹PCI0 _S3D¤  _S4D¤ _HID AÐ _CID AÐ [‚CMCHC_ADR[€HBUS @ À[J HBUSEPEN EPBR MHEN MHBR@ PXENPXSZPXBR DIEN DIBR IPEN IPBR@PM0HPM1LPM1HPM2LPM2HPM3LPM3HPM4LPM4HPM5LPM5HPM6LPM6HHENA@TUUD@TLUD BUF0M ˆ  ÿ‡ ÷ ø Gø ø ‡  ÿÿó‡  ÿÿ ‡  ÿ? @‡ @ ÿ @‡ € ÿ¿ @‡ À ÿÿ @‡  ÿ? @‡ @ ÿ @‡ € ÿ¿ @‡ À ÿÿ @‡ ÿ?@‡ @ÿ@‡ €ÿ¿@‡ Àÿÿ@‡ ÿÿ‡ ÿÿÿ߇ ðÿÿ¿þÀ‡ ÔþÿOÔþyK=_CRS ^.MCHCPM1LŠBUF0 |C0LNpC0LN “^.MCHCPM1LBUF0 XC0RWpC0RW ^.MCHCPM1HŠBUF0 –C4LNpC4LN “^.MCHCPM1HBUF0 (C4RWpC4RW ^.MCHCPM2LŠBUF0 °C8LNpC8LN “^.MCHCPM2LBUF0 øC8RWpC8RW ^.MCHCPM2HŠBUF0 ÊCCLNpCCLN “^.MCHCPM2HBUF0 ÈCCRWpCCRW ^.MCHCPM3LŠBUF0 äD0LNpD0LN “^.MCHCPM3LBUF0 ˜D0RWpD0RW ^.MCHCPM3HŠBUF0 þD4LNpD4LN “^.MCHCPM3HBUF0 hD4RWpD4RW ^.MCHCPM4LŠBUF0 D8LNpD8LN “^.MCHCPM4LBUF0 8D8RWpD8RW ^.MCHCPM4HŠBUF0 2DCLNpDCLN “^.MCHCPM4HBUF0  DCRWpDCRW ^.MCHCPM5LŠBUF0 LE0LNpE0LN “^.MCHCPM5LBUF0 Ø E0RWpE0RW ^.MCHCPM5HŠBUF0 fE4LNpE4LN “^.MCHCPM5HBUF0 ¨ E4RWpE4RW ^.MCHCPM6LŠBUF0 €E8LNpE8LN “^.MCHCPM6LBUF0 x E8RWpE8RW ^.MCHCPM6HŠBUF0 šECLNpECLN “^.MCHCPM6HBUF0 H ECRWpECRW ^.MCHCPM0HŠBUF0 ´F0LNpF0LN “^.MCHCPM0HBUF0  F0RWpF0RWŠBUF0 ÂM1MNŠBUF0 ÆM1MXŠBUF0 ÎM1LNŠBUF0 ÜM2MNŠBUF0 àM2MXŠBUF0 èM2LNy^.MCHCPXBR M1MXz ^.MCHCPXSZ`rM1MX`M2MNrtM2MXM2MNM2LNtM1MXM1MXy^.MCHCTLUD M1MNrtM1MXM1MNM1LN¤BUF0G(_PRT EGPIC¤M  ÿÿ   ÿÿ   ÿÿ   ÿÿ   ÿÿ   ÿÿ   ÿÿ    ÿÿ   ÿÿ   ÿÿ   ÿÿ    ÿÿ    ÿÿ   ÿÿ   ÿÿ    ÿÿ   ÿÿ   ÿÿ    ÿÿ  ¡I¤E ÿÿ^.LPCBLNKA ÿÿ^.LPCBLNKA ÿÿ^.LPCBLNKA ÿÿ^.LPCBLNKE ÿÿ^.LPCBLNKA ÿÿ^.LPCBLNKF ÿÿ ^.LPCBLNKC ÿÿ^.LPCBLNKG ÿÿ^.LPCBLNKB ÿÿ^.LPCBLNKA ÿÿ ^.LPCBLNKC ÿÿ ^.LPCBLNKD ÿÿ^.LPCBLNKH ÿÿ^.LPCBLNKD ÿÿ ^.LPCBLNKC ÿÿ^.LPCBLNKD ÿÿ^.LPCBLNKD ÿÿ ^.LPCBLNKD ÿÿ ^.LPCBLNKA[‚@PDRC_HID AÐ _UIDBUF0F b† @† @† † † † Òþ† ÔþP† PÔþ°yM _CRSŠBUF0 RBR0y^^.LPCBRCBA RBR0ŠBUF0 MBR0y^^.MCHCMHBR MBR0ŠBUF0 DBR0y^^.MCHCDIBR DBR0ŠBUF0 (EBR0y^^.MCHCEPBR EBR0ŠBUF0 4XBR0y^^.MCHCPXBR XBR0ŠBUF0 8XSZ0z ^^.MCHCPXSZXSZ0¤BUF0[‚MPPEGP_ADR A _PRT 3GPIC¤,  ÿÿ   ÿÿ   ÿÿ    ÿÿ  ¡E¤A ÿÿ^^.LPCBLNKA ÿÿ^^.LPCBLNKB ÿÿ ^^.LPCBLNKC ÿÿ ^^.LPCBLNKD[‚IFVGA__ADRSWITCRTALCDATVAAVLDF[€VIDS È[ VIDSVDID  _STA¤ _PSC _PS0p_PSC _PS1p_PSC _PS3p _PSC_DOSp{h SWIT_DOD¤   [‚MCRT_ _ADR¤ A_DCS^^^^.LPCBPHSS pCADL`pCSTEa{` `{a a `pCRTA¡pCRTA CRTA “a ¤ ¡¤ ¡ “a ¤ ¡¤ _DGS CRTA¤¡¤_DSS[‚GLCD_ _ADR¤ M_DCS^^^^.LPCBPHSS pCADL`pCSTEa{``{aa `pLCDA¡pLCDA LCDA “a¤ ¡¤ ¡ “a¤ ¡¤ _DGS LCDA¤¡¤_DSS_BCL¤ F (   ( 2 < F _BCMxh `apa^^^^/LPCBEC0_BRTS_BQCw^^^^/LPCBEC0_BRTS `¤`[‚MTV__ _ADR¤ A_DCS^^^^.LPCBPHSS pCADL`pCSTEa{` `{a a `pTVAA¡pTVAA TVAA “a ¤ ¡¤ ¡ “a ¤ ¡¤ _DGS TVAA¤¡¤_DSSIDSSW J“SWIT^^^.LPCBPHSS pCADL`pCSTEa ”a{`aVLDF{VLDF þVLDF C VLDF '“`   “a STBL   “aSTBL   “a STBL (“`   “a STBL   “a STBL  “a STBL  K“`   “a STBL   “a STBL   “aSTBL   “a STBL   “a STBL  “a STBL¡ pVLDFSTBL¡ “SWIT^^^.LPCBPHSSE STBL “hpCRTApLCDApTVAA “h pCRTApLCDApTVAA “h pCRTApLCDApTVAA “h pCRTApLCDApTVAA “h pCRTApLCDApTVAA “h pCRTApLCDApTVAA “h pCRTApLCDApTVAA†VGA_ €[‚BøGFX0_ADR _DOSp{h DSENA&_DODpNDID ’“DIDLpSDDLDID1DID1 ’“DDL2pSDDLDID2DID2 ’“DDL3pSDDLDID3DID3 ’“DDL4pSDDLDID4DID4 ’“DDL5pSDDLDID5DID5 ,“NDIDTMP1 ÿÿÿÿp} DID1ˆTMP1¤TMP1 F“NDID TMP2  ÿÿÿÿ ÿÿÿÿp} DID1ˆTMP2p} DID2ˆTMP2¤TMP2 O“NDID TMP3 ÿÿÿÿ ÿÿÿÿ ÿÿÿÿp} DID1ˆTMP3p} DID2ˆTMP3p} DID3ˆTMP3 ¤TMP3 H“NDID TMP4 ÿÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿp} DID1ˆTMP4p} DID2ˆTMP4p} DID3ˆTMP4 p} DID4ˆTMP4 ¤TMP4 A ”NDID TMP5 ÿÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿp} DID1ˆTMP5p} DID2ˆTMP5p} DID3ˆTMP5 p} DID4ˆTMP5 p} DID4ˆTMP5 ¤TMP5¤ [‚CDD01_ADR  “DID1¤¡ ¤{ ÿÿDID1_DCS¤CDDSDID1_DGS¤NDDSDID1_DSS “{h À ÀpNSTECSTE[‚DDD02_ADR  “DID2¤ ¡ ¤{ ÿÿDID2_DCS¤CDDSDID2_DGS¤NDDSDID2_DSS “{h À ÀpNSTECSTE[‚ADD03_ADR  “DID3¤ ¡ ¤{ ÿÿDID3_DCS  “DID3¤ ¡ ¤CDDSDID3_DGS¤NDDSDID3_DSS “{h À ÀpNSTECSTE[‚ADD04_ADR  “DID4¤ ¡ ¤{ ÿÿDID4_DCS  “DID4¤ ¡ ¤CDDSDID4_DGS¤NDDSDID4_DSS “{h À ÀpNSTECSTE[‚ADD05_ADR  “DID5¤ ¡ ¤{ ÿÿDID5_DCS  “DID5¤ ¡ ¤CDDSDID5_DGS¤NDDSDID5_DSS “{h À ÀpNSTECSTENSDDLuNDIDp{h `} €`a  “DIDL`¤a  “DDL2`¤a  “DDL3`¤a  “DDL4`¤a  “DDL5`¤a  “DDL6`¤a  “DDL7`¤a  “DDL8`¤a¤JCDDS “CADL{h ¤  “CAL2{h ¤  “CAL3{h ¤  “CAL4{h ¤  “CAL5{h ¤  “CAL6{h ¤  “CAL7{h ¤  “CAL8{h ¤ ¤ ANDDS “NADL{h ¤ “NDL2{h ¤ “NDL3{h ¤ “NDL4{h ¤ “NDL5{h ¤ “NDL6{h ¤ “NDL7{h ¤ “NDL8{h ¤¤@BRTN  “{DID1  †DD01h “{DID2  †DD02h “{DID3  †DD03h “{DID4  †DD04h “{DID5  †DD05h$^^PCI0[€MCHP @ À[MCHP@0TASM [€IGDP @ À[EIGDP@ GIVDGUMA GMFN@FASLEGSSEGSSBGSES0CDVLLBPC0ASLS [€IGDMASLB [NIGDMSIGN@SIZE OVER SVER@VVER@GVER@MBOX @RDRDY CSTS CEVT @ DIDL DDL2 DDL3 DDL4 DDL5 DDL6 DDL7 DDL8 CPDL CPL2 CPL3 CPL4 CPL5 CPL6 CPL7 CPL8 CADL CAL2 CAL3 CAL4 CAL5 CAL6 CAL7 CAL8 NADL NDL2 NDL3 NDL4 NDL5 NDL6 NDL7 NDL8 ASLP TIDX CHPD CLID CDCK SXSW EVTS CNOT NRDY @SCIEGEFCGXFCGESFPARM DSLP @zARDY ASLC TCHE ALSI BCLP PFIT CBLV BCLM@CPFM @\GVD1€DBTB2  8 À  ? Ç  ø 8 À p p 8p Àq ~CDCT#  È @   È M   Þ M }SUCCNVLD CRIT NCRT LJGSCIDGBDA “GESFp yPARMpGESF¤SUCC “GESFp @PARMpGESF¤SUCC G“GESF {PARM ÿïPARM{PARMyƒˆDBTBIBTT PARM}IBTTPARMPARMpGESF¤SUCC J“GESF pIPSCPARM}PARMyIPAT PARMrPARM PARM}PARMyLIDS PARMrPARM PARM}PARMyIBIA PARMpGESF¤SUCC -“GESF pITVFPARM}PARMyITVM PARMpGESF¤SUCC O“GESF pGIVDPARMPARMPARM}PARMyGMFNPARM}PARM PARM IDMM}PARMyIDMS PARM¡}PARMyIDMS PARM}yƒˆƒˆCDCTHVCOtCDVL PARMPARMpGESF¤SUCC *“GESF pPARM ISSC}PARM PARMpGESF¤SUCCpGESF¤CRITA(SBCB  “GESFpPARMp }÷PARMpGESF¤SUCC “GESFpGESFpPARM¤SUCC “GESF pGESFpPARM¤SUCC “GESF pGESFpPARM¤SUCC “GESF pGESFpPARM¤SUCC 7“GESF p{PARM ITVFpz{PARM ð ITVMpGESFpPARM¤SUCC “GESF pGESFpPARM¤SUCC “GESF pGESFpPARM¤SUCC $“GESF {PARM ÿIBTTpGESFpPARM¤SUCC F“GESF {PARM ÿIPSC !{zPARM  ÿ{zPARM  ÿIPATvIPAT{zPARM  IBIApGESFpPARM¤SUCC @“GESF {zPARMIF1E !{PARM à{zPARM IDMSpIDMM¡{zPARM  IDMSpIDMMpGESFpPARM¤SUCC “GESF pGESFpPARM¤SUCC “GESF }PARM PARMpGESF¤SUCC I“GESF  &{PARM “zPARMpISSC¡ pGESF¤CRIT¡pISSCpGESFpPARM¤SUCC “GESF pGESFpPARM¤SUCCpGESF¤SUCC “GEFC pGBDAGXFC “GEFC pSBCBGXFCpGEFCpSCISpGSSEpSCIE¤PDRD  ’DRDY["ASLP¤’DRDYPSTS ”CSTS ["ASLP¤“CSTS GGNOT PDRD¤ PSTS¤phCEVTp CSTS ,“CHPD“i ‘”OSYS ЕOSYS Ö†PCI0i¡†GFX0i†GFX0 €  ’PSTSpCEVT¤GHDSphTIDX¤GNOTGLIDphCLID¤GNOT GDCKphCDCK¤GNOT  €PARD  ’ARDY["ASLP¤’ARDYF AINT ’{TCHEyh¤ PARD¤ L“h  3CPFM “CPFMp PFIT “CPFM p PFIT “CPFM pPFIT¡ PFIT PFIT}PFIT €PFITp ASLC¡B (“hpxwi ÿ dBCLP}BCLP €BCLPp ASLC¡ “hpiALSIpASLC¡¤pLBPC¤A6\[€IO_T  [IO_T@TRP0[€PMIO  €[(PMIO@ACPWE GPECN SCIS[€GPIO € <[@ GPIOGU00GU01GU02GU03GIO0GIO1GIO2GIO3 GL00GL01GL02GP27GP28@GB00GB01GB02GB03@GIV0LPOLGIV2GIV3GU04GU05GU06GU07GIO4GIO5GIO6GIO7GP37GL05GL06GL07[€RCRB ÀÑþ @[HRCRB€€€HPASHPAEH PATDSATDSMBDHDAD RP1DRP2DRP3DRP4DRP5DRP6D_S0__S3_  _S4_  _S5_  EGETP  “{h ¤ ÿÿÿÿ  “{h ¤ „z{h  `z{h 0 a¤w t r`a0GDMA  #h il¤  jl¤wt k ¤wt k ¤ ÿÿÿÿGETT ¤w t r{zh  {h DGETF TMPF  h}TMPFTMPF {j }TMPF TMPF  i}TMPF TMPF {j }TMPF TMPF {j @}TMPF TMPF¤TMPF=SETP  ”h 𤠡- '{i  ’”h x{j ¤ # ’”h ´{j¤ !¤ 7SDMA  ’”h ¤  ’”h ¤  ’”h -¤  ’”h <¤  ’”h Z¤¤/SETT  %{i  ’”h x{j ¤  ’”h ´{j¤ ¤ [‚KHDEF_ADR [€HDAR L ["HDARDCKADCKMDCKS0PMES_PRW [‚ARP01_ADR [€PXCS @ À[EPXCS@@ LASX2ABPXPDCXPDSXLSCX'PSPXO<HPSXPMSX[‚ PXSX_ADRA _PRT 3GPIC¤,  ÿÿ   ÿÿ   ÿÿ    ÿÿ  ¡E¤A ÿÿ^^.LPCBLNKA ÿÿ^^.LPCBLNKB ÿÿ ^^.LPCBLNKC ÿÿ ^^.LPCBLNKD[‚ARP02_ADR [€PXCS @ À[EPXCS@@ LASX2ABPXPDCXPDSXLSCX'PSPXO<HPSXPMSX[‚ PXSX_ADRA _PRT 3GPIC¤,  ÿÿ   ÿÿ   ÿÿ    ÿÿ  ¡E¤A ÿÿ^^.LPCBLNKB ÿÿ^^.LPCBLNKC ÿÿ ^^.LPCBLNKD ÿÿ ^^.LPCBLNKA[‚MRP03_ADR [€PXCS @ À[EPXCS@@ LASX2ABPXPDCXPDSXLSCX'PSPXO<HPSXPMSX[‚ PXSX_ADR.PXSX_RMV.PXSX_PRW A _PRT 3GPIC¤,  ÿÿ   ÿÿ   ÿÿ    ÿÿ  ¡E¤A ÿÿ^^.LPCBLNKC ÿÿ^^.LPCBLNKD ÿÿ ^^.LPCBLNKA ÿÿ ^^.LPCBLNKB[‚ORP04_ADR [€PXCS @ À[EPXCS@@ LASX2ABPXPDCXPDSXLSCX'PSPXO<HPSXPMSX[‚)PXSX_ADR_PRW  WKLN¤ ¡¤ A _PRT 3GPIC¤,  ÿÿ   ÿÿ   ÿÿ    ÿÿ  ¡E¤A ÿÿ^^.LPCBLNKD ÿÿ^^.LPCBLNKA ÿÿ ^^.LPCBLNKB ÿÿ ^^.LPCBLNKC[‚ARP05_ADR [€PXCS @ À[EPXCS@@ LASX2ABPXPDCXPDSXLSCX'PSPXO<HPSXPMSX[‚ PXSX_ADRA _PRT 3GPIC¤,  ÿÿ   ÿÿ   ÿÿ    ÿÿ  ¡E¤A ÿÿ^^.LPCBLNKA ÿÿ^^.LPCBLNKB ÿÿ ^^.LPCBLNKC ÿÿ ^^.LPCBLNKD[‚ARP06_ADR [€PXCS @ À[EPXCS@@ LASX2ABPXPDCXPDSXLSCX'PSPXO<HPSXPMSX[‚ PXSX_ADRA _PRT 3GPIC¤,  ÿÿ   ÿÿ   ÿÿ    ÿÿ  ¡E¤A ÿÿ^^.LPCBLNKB ÿÿ^^.LPCBLNKC ÿÿ ^^.LPCBLNKD ÿÿ ^^.LPCBLNKA[‚MUSB1_ADR [€U1CS Ä [ U1CSU1EN_PRW  $_PSW hpACPW  ACPWp U1EN¡pU1EN _S3D¤  _S4D¤ [‚LUSB2_ADR [€U2CS Ä [ U2CSU2EN_PRW  #_PSW hpACPW  ACPWpU2EN¡pU2EN _S3D¤  _S4D¤ [‚MUSB3_ADR [€U2CS Ä [ U2CSU3EN_PRW $_PSW hpACPW  ACPWp U3EN¡pU3EN _S3D¤  _S4D¤ [‚MUSB4_ADR [€U4CS Ä [ U4CSU4EN_PRW  $_PSW hpACPW  ACPWp U4EN¡pU4EN _S3D¤  _S4D¤ [‚AUSB5_ADR [€U5CS Ä [ U5CSU5EN$_PSW hpACPW  ACPWp U5EN¡pU5EN _S3D¤  _S4D¤ [‚K EHC1_ADR [€U7CS T [ U7CSPMES[‚OHUB7_ADR[‚ PRT1_ADR[‚ PRT2_ADR [‚ PRT3_ADR [‚ PRT4_ADR [‚ PRT5_ADR [‚ PRT6_ADR _PRW  _S3D¤  _S4D¤ [‚OEHC2_ADR [€UFCS T [ UFCSPMES[‚CHUB7_ADR[‚ PRT1_ADR[‚ PRT2_ADR [‚ PRT3_ADR [‚ PRT4_ADR _PRW  _S3D¤  _S4D¤ [‚JPCIB_ADR I_PRT !GPIC¤  ÿÿ   ÿÿ ¡/¤, ÿÿ^^.LPCBLNKG ÿÿ^^.LPCBLNKH[‚.LPCB_ADR [€LPC0 @ À[MLPC0@PARCPBRCPCRCPDRC PERCPFRCPGRCPHRC@ CMARCMBRLPTRCMADCMBDLPTDFDDD,IOR2LGRMH2RAEN RCBA[€SMI0 þ [ SMI0SMIC[€SMI1 ½.n¿ [SMI1BCMDDID_ INFO@@[SMI1(INF_INF1 [PSMX'PHSS[#PSMXÿÿp €BCMDphDID_pSMIC['PSMX[‚A LNKA_HID AÐ _UID _DISp €PARC_PRS #úÔy8_CRSRTLA #y‹RTLAIRQ0pIRQ0y{PARC IRQ0¤RTLA_SRS ‹hIRQ0‚IRQ0`v`p`PARC_STA  {PARC €¤ ¡¤ [‚B LNKB_HID AÐ _UID  _DISp €PBRC_PRS #úØy8_CRSRTLB #y‹RTLBIRQ0pIRQ0y{PBRC IRQ0¤RTLB_SRS ‹hIRQ0‚IRQ0`v`p`PBRC_STA  {PBRC €¤ ¡¤ [‚B LNKC_HID AÐ _UID  _DISp €PCRC_PRS #úÔy8_CRSRTLC #y‹RTLCIRQ0pIRQ0y{PCRC IRQ0¤RTLC_SRS ‹hIRQ0‚IRQ0`v`p`PCRC_STA  {PCRC €¤ ¡¤ [‚B LNKD_HID AÐ _UID  _DISp €PDRC_PRS #úØy8_CRSRTLD #y‹RTLDIRQ0pIRQ0y{PDRC IRQ0¤RTLD_SRS ‹hIRQ0‚IRQ0`v`p`PDRC_STA  {PDRC €¤ ¡¤ [‚B LNKE_HID AÐ _UID  _DISp €PERC_PRS #úÔy8_CRSRTLE #y‹RTLEIRQ0pIRQ0y{PERC IRQ0¤RTLE_SRS ‹hIRQ0‚IRQ0`v`p`PERC_STA  {PERC €¤ ¡¤ [‚B LNKF_HID AÐ _UID  _DISp €PFRC_PRS #úØy8_CRSRTLF #y‹RTLFIRQ0pIRQ0y{PFRC IRQ0¤RTLF_SRS ‹hIRQ0‚IRQ0`v`p`PFRC_STA  {PFRC €¤ ¡¤ [‚B LNKG_HID AÐ _UID  _DISp €PGRC_PRS #úÔy8_CRSRTLG #y‹RTLGIRQ0pIRQ0y{PGRC IRQ0¤RTLG_SRS ‹hIRQ0‚IRQ0`v`p`PGRC_STA  {PGRC €¤ ¡¤ [‚B LNKH_HID AÐ _UID  _DISp €PHRC_PRS #úØy8_CRSRTLH #y‹RTLHIRQ0pIRQ0y{PHRC IRQ0¤RTLH_SRS ‹hIRQ0‚IRQ0`v`p`PHRC_STA  {PHRC €¤ ¡¤ [‚=DMAC_HID AÐ_CRS( %G GG““ GÀÀ *y[‚&FWHD_HID %Ô_CRS † ÿy[‚@ HPET_HID AÐ_CID AÐ BUF0 † Ðþy'_STA ’•OSYS Ñ HPAE¤ ¡  HPAE¤ ¤F_CRS IHPAEŠBUF0 HPT0 “HPASp ÐþHPT0 “HPAS p ÐþHPT0 “HPAS p 0ÐþHPT0¤BUF0[‚E IPIC_HID AÐ_CRSA G G$$G((G,,G00G44G88G<<G  G¤¤G¨¨G¬¬G°°G´´G¸¸G¼¼GÐÐ"y[‚%MATH_HID AÐ _CRS Gðð" y[‚K LDRC_HID AÐ _UID _CRSN zG..GNNGaaGccGeeGggG€€G’’G²²G€€ GG€G€€@GþþGÿÿ€y[‚%RTC__HID AÐ _CRS Gpp"y[‚-TIMR_HID AÐ_CRS G@@GPP"y[‚2ACAD_HID ACPI0003_PCL_SB__PSRpACPW¤ACPWECOK “^.EC0_Z009¤¡¤[‚NoEC0__HID AÐ _GPE Z009_CRS GbbGffy;_REG 4“h piZ009 ([_OSI`pBTDS _OSI Windows 2006pBTDS[€ERAM ÿ[N.ERAM@0SMPRSMSTSMADSMCMSMD0@BCNTSMAA@CHGMCHGSENIDENIBENDDCHGVCHGABAL0BAL1BAL2BAL3BBC0BBC1BBC2BBC3PHDDIFDDIODDSHDDS120EFDDCRTDSPWRSBTNVIDOVOLDVOLUMUTECONTBRGTHBTNS4STSKEYBKEYTOUPFNBNLIDFDIGMUWAKDKSPDKINDKIDDKOKDKPWBTNSS1LDS3LDVGAQPCMQPCMRADPTSLLSSYS7PWAKMWAKLWAK(TCNLTMPITMSDFASNFASUPCVLSWTOHWTOMODEFANSINITFAN1FAN2FANTSKNMCTMPLIDEPMEEPWBERNGEBTWEDCKESKTXSKTBSKTCSKTAHAPLHAPRBTDTBTPWBTDSBTPSBTSWBTWKBTLDBRTSCNTSWLATBTATWLEXBTEXKLSWWLOKPTIDCPUTEPKTGHIDBMF0BTY0BST0BRC0BSN0BPV0BDV0BDC0BFC0GAU0CYC0BPC0BAC0BAT0BTW0BDN0@BMF1BTY1BST1BRC1BSN1BPV1BDV1BDC1BFC1GAU1CYC1BPC1BAC1BAT1BTW17_Q11p ‡P80H IGDS^^^.GFX0BRTN ‡¡†^^^/PEGPVGA_LCD_ ‡7_Q12p †P80H IGDS^^^.GFX0BRTN †¡†^^^/PEGPVGA_LCD_ †@_Q1Cp =====QUERY_1C=====[1 1VIDO IGDS^^^.GFX0GHDS¡^^^/PEGPVGA_DSSWpVIDO!_Q1Dp =====QUERY_1D=====[1PCLK!_Q1Ep =====QUERY_1E=====[1PCLK9_Q25p =====QUERY_25=====[1[" è†^^BAT1 [" è†^^BAT1 €/_Q34p =====QUERY_34=====[1 BKEYPHSS qpBKEY2_Q37p =====QUERY_37=====[1†ACAD €[" è†^^BAT1 €2_Q38p =====QUERY_38=====[1†ACAD €[" è†^^BAT1 €)_Q2Dp =====QUERY_2D=====[1pDTSMTRAP F)_Q2Ep =====QUERY_2E=====[1pDTSMTRAP F[€CCLK  [ CCLKDUTYTHENFTT_TSTS[€ECRM ÿ[DECRM@JERIBERBDH SDTMFSSNFANUPTVLTTHRHPJIDHRFRD[FAMX"FANG[#FAMXÿÿphERIBpERBD`['FAMX¤`"FANW[#FAMXÿÿphERIBpiERBD['FAMX¤i TUVR¤ .THRO  “h¤THEN¡  “h¤DUTY¡  “h ¤TTHR¡¤ ÿ*CLCK “hpTHENpFTT_¡ phDUTYpTHEN¤THEN7PCLKpPTVL` “`pTHENpFTT_¡v`p€`a{a apaDUTYpTHEN[‚K"BAT1_HID AÐ _UID_PCL_SB_9_STA )ECOK“ECDY ^^.EC0_BAL0[" ¤ ¡[" ¤ ¡[" ¤ H_BIFSTAT:      \+ ¤ œ  Ä PA3465U 3658Q Li-Ion COMPAL  KECOK“ECDYp^^.EC0_BDN0` #“` p ´ˆSTAT p PA3457U ˆSTAT  $“` p ˆSTAT p PA3457U ˆSTAT [" p^^.EC0_BDC0BFC1[" ¡p Li-IonˆSTAT  ,BFC1xBFC1 d`awa dapaBFC1paˆSTATpaˆSTAT ¤STATE _BSTPBST ÿÿÿÿ ÿÿÿÿ \+p \+c 8ECOK“ECDY[" p^^.EC0_BST0BST1[" p^^.EC0_GAU0BGU1["  BFC1wBGU1BFC1bxb ddb¡ wBGU1 (bpBST1ˆPBSTpˆPBSTpbˆPBST pcˆPBST  ”ECDYvECDY “ECDY†BAT1 €¤PBST[‚.PS2K_HID AÐ_CRS G``Gdd#y[‚PS2M_HID AÐ_CRS #y[‚CjPATA_ADR [€PACS @ À[IPACSPRITPSITSYNC SDT0SDT1JICR0ICR1ICR2ICR3ICR4ICR5[‚KcPRID_ADR@_GTMPBUF ŠPBUFPIO0ŠPBUF DMA0ŠPBUF PIO1ŠPBUF DMA1ŠPBUF FLAGpGETPPRITPIO0pGDMA{SYNC{ICR3{ICR0SDT0{ICR1DMA0 “DMA0 ÿÿÿÿpPIO0DMA0 .{PRIT @ “{PRIT €p „PIO1¡pGETTPSITPIO1¡ p ÿÿÿÿPIO1pGDMA{SYNC {ICR3 {ICR0 SDT1{ICR1 DMA1 “DMA1 ÿÿÿÿpPIO1DMA1pGETF{SYNC{SYNC PRITFLAG ,{“PIO0 ÿÿÿÿ“DMA0 ÿÿÿÿp xPIO0p DMA0p FLAG¤PBUFL*_STMŠhPIO0Šh DMA0Šh PIO1Šh DMA1Šh FLAG A“‡i {PRIT ðÀPRIT{SYNC SYNCpSDT0{ICR0 ICR0{ICR1 ICR1{ICR3 ICR3{ICR5 ICR5‹i bW490‹i jW530‹i ~W630‹i €W640‹i °W880‹i ºW930}PRIT €PRIT {FLAG {W490 }PRIT PRIT}PRITSETPPIO0W530W640PRIT K{FLAG}SYNCSYNCpSDMADMA0SDT0 •DMA0 }ICR3ICR3 •DMA0 <}ICR0ICR0 {W930 }ICR1ICR1 K“‡j {PRIT ¿PRITpPSIT{SYNCSYNCpSDT1{ICR0ICR0{ICR1ICR1{ICR3ICR3{ICR5ICR5‹j bW491‹j jW531‹j ~W631‹j €W641‹j °W881‹j ºW931}PRIT @€PRIT {FLAG {W491 }PRIT PRIT L{FLAG }PRIT @PRIT ”PIO1 ð}PRIT €PRIT¡!}PRIT PRITpSETTPIO1W531W641PSIT @{FLAG }SYNC SYNCpSDMADMA1SDT1 •DMA1 }ICR3 ICR3 •DMA1 <}ICR0 ICR0 {W931 }ICR1 ICR1[‚GP_D0_ADRJ_GTFPIB0  ï ïŒPIB0PMD0ŒPIB0 DMD0 @{PRIT  “{PRIT p PMD0¡Ap PMD0z{PRIT  `z{PRIT 0 ar`ab  “ bp PMD0  “ bp PMD0¡pPMD0 C{SYNCp}SDT0 @DMD0 ,{ICR1 {ICR0rDMD0 DMD0 {ICR3p EDMD0¡}t{PMD0   DMD0¤PIB0[‚FP_D1_ADRI_GTFPIB1 °ï°ïŒPIB1PMD1ŒPIB1 DMD1 K{PRIT  “{PRIT €p PMD1¡Á€Iîje&rÍ¿_/–ÖÀ ’õµ²;)âLÂò¼Awœpðó ÒcZܨƒø^É•ùúýÜ·Mg-³„3 áÑy*§jwѶ *vBÅÕé¶C@UDÃÉ7™_A—póÑöì{)¡Áñ‘ýH†n>Î˶LENOVOTP-68 WINDOWS Šn.É6æŠê­Ò“·m›s­ƒ6¸l§§î7GþóüÍlj„‘ B±5RWök»_¥âÿ‰Š•ÃMüéVOL4Ì™^báŠT¾J\› †AFfâòç6œ3‘'ç\¡Øù¤aŠã*ñ½L ÿ©ÔtÊžÜT9¿fwts-test/arg-table-path-0001/SSDT1.dat000066400000000000000000000012551465205512700175260ustar00rootroot00000000000000SSDT­YSataReSataAhciINTL$ H(\/_SB_PCI0SATA[‚O PRT0_ADR ÿÿD _SDDGBU0  ŒGBU0 GB00ŒGBU0 GB01ŒGBU0 GB02ŒGBU0 GB03ŒGBU0 GB04ŒGBU0 GB05ŒGBU0 GB06 F“‡h ‹h œW780 {W780 p GB00p GB01p ïGB06¡p GB00p GB01p ïGB06pGBU0GTF0 _GTF¤GTF0[‚A PRT1_ADR ÿÿD _SDDGBU1  ŒGBU1 GB10ŒGBU1 GB11ŒGBU1 GB12ŒGBU1 GB13ŒGBU1 GB14ŒGBU1 GB15ŒGBU1 GB16 F“‡h ‹h œW781 {W781 p GB10p GB11p ïGB16¡p GB10p GB11p ïGB16pGBU1GTF1 _GTF¤GTF1[‚A PRT2_ADR ÿÿD _SDDGBU2  ŒGBU2 GB20ŒGBU2 GB21ŒGBU2 GB22ŒGBU2 GB23ŒGBU2 GB24ŒGBU2 GB25ŒGBU2 GB26 F“‡h ‹h œW782 {W782 p GB20p GB21p ïGB26¡p GB20p GB21p ïGB26pGBU2GTF2 _GTF¤GTF2fwts-test/arg-table-path-0001/SSDT2.dat000066400000000000000000000002431465205512700175230ustar00rootroot00000000000000SSDT£íBrtRefDD01BRTINTL$ N\/_SB_PCI0GFX0DD03_BCL¤ F (   ( 2 < F%_BCMxh `apa\/_SB_PCI0LPCBEC0_BRTS#_BQCw\/_SB_PCI0LPCBEC0_BRTS `¤`fwts-test/arg-table-path-0001/SSDT3.dat000066400000000000000000000011371465205512700175270ustar00rootroot00000000000000SSDT_ÈPmRefCpu0Tst0INTL$ J#\._PR_CPU0_TPC M_PTC 7{PDC0 ¤, ‚ y ‚ y¤, ‚ y ‚ yTSSIA  d è   X k    K î    ? q   2 ô   & w    ú   } TSSMA  d è   X k    K î    ? q    2 ô    & w     ú    }  TSSF C_TSS G’TSSF[_PSSp_PSS`p‡`avapƒˆƒˆ`a bp c¢5•c‡TSSIpxwbt c dpdˆƒˆTSSIc pdˆƒˆTSSMc ucpÿTSSF {PDC0 ¤TSSM¤TSSI?_TSD '{CFGD ’{PDC0 ¤   ý ¤   ü fwts-test/arg-table-path-0001/SSDT4.dat000066400000000000000000000002461465205512700175300ustar00rootroot00000000000000SSDT¦mPmRefCpu1Tst0INTL$ A\._PR_CPU1_TPC _PTC¤\/_PR_CPU0_PTC_TSS¤\/_PR_CPU0_TSS?_TSD '{CFGD ’{PDC1 ¤   ý ¤    ü fwts-test/arg-table-path-0001/SSDT5.dat000066400000000000000000000023461465205512700175340ustar00rootroot00000000000000SSDTæßPmRefCpuPm0INTL$ E\SSDTC CPU0IST ž•m¿ ´ CPU1IST R—m¿ È CPU0CST om¿ ª CPU1CST •m¿ …CFGD ñi?\PDC0 €\PDC1 €\SDTL M!\._PR_CPU0HI0_ HC0_ H_PDCŠh REVSŠh SIZEp‡h`pt` a[h @wa TEMPSTS0 sSTS0TEMPb_OSC ¦w@ )¾Gž½ØpXq9SREVSSIZEbI_OSCŠk STS0Šk CAP0Šh IID0Šh IID1Šh IID2Šh IID3UID0 ¦w@ )¾Gž½ØpXq9SŠUID0 EID0ŠUID0 EID1ŠUID0 EID2ŠUID0 EID3 2’“IID0EID0“IID1EID1“IID2EID2“IID3EID3p STS0¤k ’“i p STS0¤k}{PDC0 ÿÿÿCAP0PDC0p{PDC0 ÿPCP0 L{CFGD  A{CFGD “{PDC0 ’{SDTL }SDTL SDTL[€IST0ƒˆSSDT ƒˆSSDT [ IST0HI0_ I{CFGD ð N{CFGD {PDC0 ’{SDTL }SDTL SDTL[€CST0ƒˆSSDT ƒˆSSDT [ CST0HC0_¤kM!\._PR_CPU1HI1_ HC1_ H_PDCŠh REVSŠh SIZEp‡h`pt` a[h @wa TEMPSTS1 sSTS1TEMPb_OSC ¦w@ )¾Gž½ØpXq9SREVSSIZEbI_OSCŠk STS1Šk CAP1Šh IID0Šh IID1Šh IID2Šh IID3UID1 ¦w@ )¾Gž½ØpXq9SŠUID1 EID0ŠUID1 EID1ŠUID1 EID2ŠUID1 EID3 2’“IID0EID0“IID1EID1“IID2EID2“IID3EID3p STS1¤k ’“i p STS1¤k}{PDC1 ÿÿÿCAP1PDC1p{PDC1 ÿPCP1 L{CFGD  A{CFGD “{PDC1 ’{SDTL }SDTL SDTL[€IST1ƒˆSSDT ƒˆSSDT [ IST1HI1_ I{CFGD ð N{CFGD {PDC1 ’{SDTL }SDTL SDTL[€CST1ƒˆSSDT ƒˆSSDT [ CST1HC1_¤kfwts-test/arg-table-path-0001/TCPA.dat000066400000000000000000000000621465205512700174120ustar00rootroot00000000000000TCPA2Intel CRESTLNELOHRZfwts-test/arg-table-path-0001/TMOR.dat000066400000000000000000000000461465205512700174460ustar00rootroot00000000000000TMOR&ëPTLTD PTL óôfwts-test/arg-table-path-0001/XSDT.dat000066400000000000000000000002241465205512700174450ustar00rootroot00000000000000XSDT”ÂLENOVOTP-68  LTPÒûm¿Æüm¿.ým¿fým¿¢ým¿Ôým¿úým¿pÿm¿Øÿm¿½˜m¿˜m¿Žm¿jm¿„ˆm¿fwts-test/arg-table-path-0001/acpidump-0001.log000066400000000000000000001027501465205512700210630ustar00rootroot00000000000000acpidump acpidump Polarity : 0 acpidump Polarity : 1 acpidump Trigger Mode : 0 acpidump Trigger Mode : 1 acpidump Trigger Mode : 3 acpidump PSCI Compliant : 0 acpidump 4K Page Protect : 0 acpidump 64K Page Protect : 0 acpidump Sealed Case (V3) : 0 acpidump Processor Enabled : 1 acpidump PC-AT Compatibility : 1 acpidump 32-bit PM Timer (V1) : 0 acpidump VGA Not Present (V4) : 0 acpidump Hardware Reduced (V5) : 0 acpidump Must use HVC for PSCI : 0 acpidump Docking Supported (V1) : 0 acpidump Low Power S0 Idle (V5) : 0 acpidump MSI Not Supported (V4) : 0 acpidump Runtime Online Capable : 0 acpidump S4BIOS Support Present : 0 acpidump Use Platform Timer (V4) : 0 acpidump All CPUs support C1 (V1) : 1 acpidump Headless - No Video (V3) : 0 acpidump CMOS RTC Not Present (V5) : 0 acpidump 64-bit Wake Supported (V2) : 0 acpidump C2 works on MP system (V1) : 0 acpidump Use APIC Cluster Model (V4) : 0 acpidump PCIe ASPM Not Supported (V4) : 0 acpidump Remote Power-on capable (V4) : 0 acpidump 64-bit Wake Env Required (V2) : 0 acpidump Legacy Devices Supported (V2) : 0 acpidump RTC_STS valid on S4 wake (V4) : 0 acpidump Reset Register Supported (V2) : 0 acpidump PCIEXP_WAK Bits Supported (V4) : 0 acpidump WBINVD flushes all caches (V1) : 0 acpidump 8042 Present on ports 60/64 (V2) : 0 acpidump Control Method Power Button (V1) : 0 acpidump Control Method Sleep Button (V1) : 1 acpidump RTC can wake system from S4 (V1) : 1 acpidump RTC wake not in fixed reg space (V1) : 0 acpidump Use native instr after SLP_TYPx (V3) : 0 acpidump WBINVD instruction is operational (V1) : 1 acpidump Use APIC Physical Destination Mode (V4) : 0 acpidump 0000: 41 50 49 43 68 00 00 00 01 13 50 54 4C 54 44 20 // APICh.....PTLTD acpidump 0000: 41 50 49 43 68 00 00 00 01 CC 49 4E 54 45 4C 20 // APICh.....INTEL acpidump 0000: 42 4F 4F 54 28 00 00 00 01 A5 50 54 4C 54 44 20 // BOOT(.....PTLTD acpidump 0000: 46 41 43 50 F4 00 00 00 03 52 54 4F 53 43 50 4C // FACP.....RTOSCPL acpidump 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... acpidump 0000: 48 50 45 54 38 00 00 00 01 0A 49 4E 54 45 4C 20 // HPET8.....INTEL acpidump 0000: 4D 43 46 47 3C 00 00 00 01 32 49 4E 54 45 4C 20 // MCFG<....2INTEL acpidump 0000: 52 53 44 54 68 00 00 00 01 AF 46 57 54 53 49 44 // RSDTh.....FWTSID acpidump 0000: 54 43 50 41 32 00 00 00 01 8F 49 6E 74 65 6C 20 // TCPA2.....Intel acpidump 0000: 58 53 44 54 AC 00 00 00 01 65 46 57 54 53 49 44 // XSDT.....eFWTSID acpidump 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump 0010: 09 20 41 50 49 43 20 20 00 00 04 06 20 4C 54 50 // . APIC .... LTP acpidump 0010: 24 53 42 46 54 42 4C 24 00 00 04 06 20 4C 54 50 // $SBFTBL$.... LTP acpidump 0010: 43 52 45 53 54 4C 4E 45 00 00 04 06 41 4C 41 4E // CRESTLNE....ALAN acpidump 0010: 43 52 45 53 54 4C 4E 45 00 00 04 06 4C 4F 48 52 // CRESTLNE....LOHR acpidump 0010: 43 52 45 53 54 4C 4E 45 01 00 00 00 46 57 54 53 // CRESTLNE....FWTS acpidump 0020: 00 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ acpidump 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump 0020: 01 00 00 00 00 00 F0 BF 00 00 00 00 78 00 F0 BF // ............x... acpidump 0020: 01 00 00 00 00 00 F0 BF 78 00 F0 BF F0 00 F0 BF // ........x....... acpidump 0020: 01 00 00 00 36 00 00 00 // ....6... acpidump 0020: 01 00 00 00 C0 2F 6E BF 6A 9B 6D BF 00 02 09 00 // ...../n.j.m..... acpidump 0020: 5A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E0 // Z............... acpidump 0020: 5A 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 // Z............... acpidump 0020: 5A 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // Z............... acpidump 0020: 5A 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // Z............... acpidump 0030: 00 00 // .. acpidump 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump 0030: 00 00 00 00 00 00 00 FF 00 00 00 00 // ............ acpidump 0030: 00 00 00 00 00 80 00 00 // ........ acpidump 0030: 00 00 00 00 F0 00 F0 BF 00 00 00 00 6A 9B 6D BF // ............j.m. acpidump 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0C 01 00 // ................ acpidump 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0C 02 00 // ................ acpidump 0030: 6A 9B 6D BF 2C 61 F0 BF C0 2F 6E BF 80 62 F0 BF // j.m.,a.../n..b.. acpidump 0030: B2 00 00 00 F0 F1 00 80 00 10 00 00 00 00 00 00 // ................ acpidump 0040: 00 00 00 00 2C 61 F0 BF 00 00 00 00 C0 2F 6E BF // ....,a......./n. acpidump 0040: 00 00 C0 FE 00 00 00 00 02 0A 00 00 02 00 00 00 // ................ acpidump 0040: 00 00 C0 FE 00 00 00 00 04 06 00 05 00 01 04 06 // ................ acpidump 0040: 04 10 00 00 00 00 00 00 20 10 00 00 08 10 00 00 // ........ ....... acpidump 0040: C8 62 F0 BF 14 63 F0 BF 48 63 F0 BF CE 64 F0 BF // .b...c..Hc...d.. acpidump 0050: 00 00 00 00 80 62 F0 BF 00 00 00 00 C8 62 F0 BF // .....b.......b.. acpidump 0050: 00 00 02 0A 00 09 09 00 00 00 0D 00 04 06 00 05 // ................ acpidump 0050: 01 05 00 01 02 0A 00 00 02 00 00 00 05 00 02 0A // ................ acpidump 0050: 28 10 00 00 00 00 00 00 04 02 01 04 08 00 00 85 // (............... acpidump 0050: 8B 67 F0 BF 3E 68 F0 BF AD 6A F0 BF 63 6B F0 BF // .g..>h...j..ck.. acpidump 0060: 00 00 00 00 14 63 F0 BF 00 00 00 00 48 63 F0 BF // .....c......Hc.. acpidump 0060: 00 01 04 06 01 05 00 01 // ........ acpidump 0060: 00 09 09 00 00 00 0D 00 // ........ acpidump 0060: 01 00 23 00 00 00 00 00 01 03 0D 00 32 00 00 00 // ..#.........2... acpidump 0060: 59 70 F0 BF 9B 70 F0 BF // Yp...p.. acpidump 0070: 00 00 00 00 CE 64 F0 BF 00 00 00 00 8B 67 F0 BF // .....d.......g.. acpidump 0070: A5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump 0080: 00 00 00 00 3E 68 F0 BF 00 00 00 00 AD 6A F0 BF // ....>h.......j.. acpidump 0080: 00 00 00 00 C0 2F 6E BF 00 00 00 00 6A 9B 6D BF // ...../n.....j.m. acpidump 0090: 00 00 00 00 01 20 00 00 00 10 00 00 00 00 00 00 // ..... .......... acpidump 0090: 00 00 00 00 63 6B F0 BF 00 00 00 00 59 70 F0 BF // ....ck......Yp.. acpidump 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 // ................ acpidump 00A0: 00 00 00 00 9B 70 F0 BF 00 00 00 00 // .....p...... acpidump 00B0: 04 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump 00C0: 00 00 00 00 01 08 00 00 20 10 00 00 00 00 00 00 // ........ ....... acpidump 00D0: 01 20 00 00 08 10 00 00 00 00 00 00 01 40 00 00 // . ...........@.. acpidump 00E0: 28 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // (............... acpidump 00F0: 00 00 00 00 // .... acpidump 0000: 54 4D 4F 52 26 00 00 00 01 EB 50 54 4C 54 44 20 TMOR&.....PTLTD acpidump 0010: 20 20 20 20 20 20 20 20 00 00 04 06 50 54 4C 20 ....PTL acpidump 0020: 03 00 00 00 F3 F4 ...... acpidump ---- acpidump ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- acpidump APIC @ bff00000 (104 bytes) (loaded from file) acpidump APIC @ bff00078 (104 bytes) (loaded from file) acpidump BOOT @ bff000f0 (40 bytes) (loaded from file) acpidump Contains AML Object Code. acpidump DSDT @ bf6d9b6a (24564 bytes) (loaded from file) acpidump FACP @ bff0612c (244 bytes) (loaded from file) acpidump FACS @ bf6e2fc0 (64 bytes) (loaded from file) acpidump HPET @ bff06280 (56 bytes) (loaded from file) acpidump MCFG @ bff062c8 (60 bytes) (loaded from file) acpidump RSDP @ bff06314 (36 bytes) (loaded from file) acpidump RSDT @ bff070d1 (104 bytes) (generated by fwts) acpidump SLIC @ bff06348 (374 bytes) (loaded from file) acpidump SSDT @ bff064ce (685 bytes) (loaded from file) acpidump SSDT @ bff0678b (163 bytes) (loaded from file) acpidump SSDT @ bff0683e (607 bytes) (loaded from file) acpidump SSDT @ bff06aad (166 bytes) (loaded from file) acpidump SSDT @ bff06b63 (1254 bytes) (loaded from file) acpidump TCPA @ bff07059 (50 bytes) (loaded from file) acpidump TMOR @ bff0709b (38 bytes) (loaded from file) acpidump Test 1 of 1: Dump ACPI tables. acpidump XSDT @ bff07149 (172 bytes) (generated by fwts) acpidump [000h 0000 4] Signature : "DSDT" acpidump [000h 0000 4] Signature : "SSDT" acpidump [000h 0000 8] Signature : "RSD PTR " acpidump [000h 0000 004h] Signature : "APIC" [Multiple APIC Description Table (MADT)] acpidump [000h 0000 004h] Signature : "BOOT" [Simple Boot Flag Table] acpidump [000h 0000 004h] Signature : "FACP" [Fixed ACPI Description Table (FADT)] acpidump [000h 0000 004h] Signature : "FACS" acpidump [000h 0000 004h] Signature : "HPET" [High Precision Event Timer Table] acpidump [000h 0000 004h] Signature : "MCFG" [Memory Mapped Configuration Table] acpidump [000h 0000 004h] Signature : "RSDT" [Root System Description Table] acpidump [000h 0000 004h] Signature : "SLIC" [Software Licensing Description Table] acpidump [000h 0000 004h] Signature : "TCPA" [Trusted Computing Platform Alliance Table] acpidump [000h 0000 004h] Signature : "TMOR" acpidump [000h 0000 004h] Signature : "XSDT" [Extended System Description Table] acpidump [004h 0004 4] Table Length : 000000a3 acpidump [004h 0004 4] Table Length : 000000a6 acpidump [004h 0004 4] Table Length : 0000025f acpidump [004h 0004 4] Table Length : 000002ad acpidump [004h 0004 4] Table Length : 000004e6 acpidump [004h 0004 4] Table Length : 00005ff4 acpidump [004h 0004 004h] Length : 00000040 acpidump [004h 0004 004h] Table Length : 00000026 acpidump [004h 0004 004h] Table Length : 00000028 acpidump [004h 0004 004h] Table Length : 00000032 acpidump [004h 0004 004h] Table Length : 00000038 acpidump [004h 0004 004h] Table Length : 0000003C acpidump [004h 0004 004h] Table Length : 00000068 acpidump [004h 0004 004h] Table Length : 000000AC acpidump [004h 0004 004h] Table Length : 000000F4 acpidump [004h 0004 004h] Table Length : 00000176 acpidump [008h 0008 1] Checksum : 1c acpidump [008h 0008 1] Revision : 01 acpidump [008h 0008 1] Revision : 02 acpidump [008h 0008 001h] Revision : 01 acpidump [008h 0008 001h] Revision : 03 acpidump [008h 0008 004h] Hardware Signature : 00000000 acpidump [009h 0009 1] Checksum : 11 acpidump [009h 0009 1] Checksum : 59 acpidump [009h 0009 1] Checksum : 6d acpidump [009h 0009 1] Checksum : c8 acpidump [009h 0009 1] Checksum : df acpidump [009h 0009 1] Checksum : ed acpidump [009h 0009 6] Oem ID : "LENOVO" acpidump [009h 0009 001h] Checksum : 0A acpidump [009h 0009 001h] Checksum : 13 acpidump [009h 0009 001h] Checksum : 32 acpidump [009h 0009 001h] Checksum : 52 acpidump [009h 0009 001h] Checksum : 65 acpidump [009h 0009 001h] Checksum : 8F acpidump [009h 0009 001h] Checksum : 99 acpidump [009h 0009 001h] Checksum : A5 acpidump [009h 0009 001h] Checksum : AF acpidump [009h 0009 001h] Checksum : CC acpidump [009h 0009 001h] Checksum : EB acpidump [00Ah 0010 6] Oem ID : " PmRef" acpidump [00Ah 0010 6] Oem ID : "BrtRef" acpidump [00Ah 0010 6] Oem ID : "SataRe" acpidump [00Ah 0010 6] Oem ID : "TOSCPL" acpidump [00Ah 0010 006h] Oem ID : "FWTSID" acpidump [00Ah 0010 006h] Oem ID : "INTEL " acpidump [00Ah 0010 006h] Oem ID : "Intel " acpidump [00Ah 0010 006h] Oem ID : "LENOVO" acpidump [00Ah 0010 006h] Oem ID : "PTLTD " acpidump [00Ah 0010 006h] Oem ID : "TOSCPL" acpidump [00Ch 0012 004h] 32 Firmware Waking Vector : 00000000 acpidump [00fh 0015 1] Revision : 02 acpidump [010h 0016 4] RSDT Address : bff070d1 acpidump [010h 0016 8] Oem Table ID : " CpuPm" acpidump [010h 0016 8] Oem Table ID : " Cpu0Tst" acpidump [010h 0016 8] Oem Table ID : " Cpu1Tst" acpidump [010h 0016 8] Oem Table ID : " DD01BRT" acpidump [010h 0016 8] Oem Table ID : "CRESTLNE" acpidump [010h 0016 8] Oem Table ID : "SataAhci" acpidump [010h 0016 004h] Global Lock : 00000000 acpidump [010h 0016 008h] Oem Table ID : " " acpidump [010h 0016 008h] Oem Table ID : " APIC " acpidump [010h 0016 008h] Oem Table ID : "$SBFTBL$" acpidump [010h 0016 008h] Oem Table ID : "CRESTLNE" acpidump [010h 0016 008h] Oem Table ID : "TP-68 " acpidump [014h 0020 4] Table Length : 00000024 acpidump [014h 0020 004h] Flags (decoded below) : 00000000 acpidump [018h 0024 4] Oem Revision : 00001000 acpidump [018h 0024 4] Oem Revision : 00003000 acpidump [018h 0024 4] Oem Revision : 06040000 acpidump [018h 0024 8] XSDT Address : 00000000bff07149 acpidump [018h 0024 004h] Oem Revision : 00000001 acpidump [018h 0024 004h] Oem Revision : 06040000 acpidump [018h 0024 008h] 64 Firmware Waking Vector : 0000000000000000 acpidump [01Ch 0028 4] Asl Compiler ID : "INTL" acpidump [01Ch 0028 004h] Asl Compiler ID : " LTP" acpidump [01Ch 0028 004h] Asl Compiler ID : "ALAN" acpidump [01Ch 0028 004h] Asl Compiler ID : "FWTS" acpidump [01Ch 0028 004h] Asl Compiler ID : "LOHR" acpidump [01Ch 0028 004h] Asl Compiler ID : "PTL " acpidump [01Ch 0028 004h] Asl Compiler ID : "TBD " acpidump [020h 0032 1] Extended Checksum : 73 acpidump [020h 0032 4] Asl Compiler Revision : 20050624 acpidump [020h 0032 4] Asl Compiler Revision : 20060608 acpidump [020h 0032 001h] Version : 01 acpidump [020h 0032 004h] Asl Compiler Revision : 00000000 acpidump [020h 0032 004h] Asl Compiler Revision : 00000001 acpidump [020h 0032 004h] Asl Compiler Revision : 00000003 acpidump [020h 0032 004h] Asl Compiler Revision : 0000005A acpidump [021h 0033 3] Reserved : 00 00 00 acpidump [021h 0033 003h] Reserved : 000000 acpidump [024h 0036 001h] Boot Register Index : 36 acpidump [024h 0036 002h] Platform Class : 0000 acpidump [024h 0036 004h] FACS Address : BF6E2FC0 acpidump [024h 0036 004h] Hardware Block ID : 8086A201 acpidump [024h 0036 004h] Local Apic Address : FEE00000 acpidump [024h 0036 004h] ACPI Table Address 0 : BFF00000 acpidump [024h 0036 004h] OspmFlags (decoded below) : 00000000 acpidump [024h 0036 008h] Reserved : 0000000000000000 acpidump [024h 0036 008h] ACPI Table Address 0 : 00000000BFF00000 acpidump [024h 0036 152h] Software Licensing Structure : 53 4C 49 43 76 01 00 00 01 99 4C 45 4E 4F 56 4F /* SLICv.....LENOVO */\ acpidump [025h 0037 003h] Reserved : 000000 acpidump [026h 0038 004h] Min Event Log Length : 00010000 acpidump [028h 0040 001h] Space ID : 00 [SystemMemory] acpidump [028h 0040 004h] DSDT Address : BF6D9B6A acpidump [028h 0040 004h] ACPI Table Address 1 : BFF00078 acpidump [028h 0040 004h] Flags (decoded below) : 00000001 acpidump [028h 0040 00Ch] Timer Block Register : [Generic Address Structure] acpidump [029h 0041 001h] Bit Width : 00 acpidump [02Ah 0042 001h] Bit Offset : 00 acpidump [02Ah 0042 008h] Event Log Address : 0000000000000000 acpidump [02Bh 0043 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [02Ch 0044 001h] Model : 00 acpidump [02Ch 0044 001h] Subtable Type : 00 [Processor Local APIC] acpidump [02Ch 0044 004h] ACPI Table Address 2 : BFF000F0 acpidump [02Ch 0044 008h] Address : 00000000FED00000 acpidump [02Ch 0044 008h] Base Address : 00000000E0000000 acpidump [02Ch 0044 008h] ACPI Table Address 1 : 00000000BFF00078 acpidump [02Dh 0045 001h] Length : 08 acpidump [02Dh 0045 001h] PM Profile : 02 [Mobile] acpidump [02Eh 0046 001h] Processor ID : 00 acpidump [02Eh 0046 002h] SCI Interrupt : 0009 acpidump [02Fh 0047 001h] Local Apic ID : 00 acpidump [030h 0048 004h] SMI Command Port : 000000B2 acpidump [030h 0048 004h] ACPI Table Address 3 : BF6D9B6A acpidump [030h 0048 004h] Flags (decoded below) : 00000001 acpidump [034h 0052 001h] Subtable Type : 00 [Processor Local APIC] acpidump [034h 0052 001h] Sequence Number : 00 acpidump [034h 0052 001h] ACPI Enable Value : F0 acpidump [034h 0052 002h] Segment Group Number : 0000 acpidump [034h 0052 004h] ACPI Table Address 4 : BFF0612C acpidump [034h 0052 008h] ACPI Table Address 2 : 00000000BFF000F0 acpidump [035h 0053 001h] Length : 08 acpidump [035h 0053 001h] ACPI Disable Value : F1 acpidump [035h 0053 002h] Minimum Clock Ticks : 0080 acpidump [036h 0054 001h] Processor ID : 01 acpidump [036h 0054 001h] S4BIOS Command : 00 acpidump [036h 0054 001h] Start Bus Number : 00 acpidump [037h 0055 001h] Local Apic ID : 01 acpidump [037h 0055 001h] End Bus Number : FF acpidump [037h 0055 001h] P-State Control : 80 acpidump [037h 0055 001h] Flags (decoded below) : 00 acpidump [038h 0056 004h] Reserved : 00000000 acpidump [038h 0056 004h] ACPI Table Address 5 : BF6E2FC0 acpidump [038h 0056 004h] Flags (decoded below) : 00000001 acpidump [038h 0056 004h] PM1A Event Block Address : 00001000 acpidump [03Ch 0060 001h] Subtable Type : 01 [I/O APIC] acpidump [03Ch 0060 004h] ACPI Table Address 6 : BFF06280 acpidump [03Ch 0060 004h] PM1B Event Block Address : 00000000 acpidump [03Ch 0060 008h] ACPI Table Address 3 : 00000000BF6D9B6A acpidump [03Dh 0061 001h] Length : 0C acpidump [03Eh 0062 001h] I/O Apic ID : 01 acpidump [03Eh 0062 001h] I/O Apic ID : 02 acpidump [03Fh 0063 001h] Reserved : 00 acpidump [040h 0064 004h] Address : FEC00000 acpidump [040h 0064 004h] ACPI Table Address 7 : BFF062C8 acpidump [040h 0064 004h] PM1A Control Block Address : 00001004 acpidump [044h 0068 004h] Interrupt : 00000000 acpidump [044h 0068 004h] ACPI Table Address 8 : BFF06314 acpidump [044h 0068 004h] PM1B Control Block Address : 00000000 acpidump [044h 0068 008h] ACPI Table Address 4 : 00000000BFF0612C acpidump [048h 0072 001h] Subtable Type : 02 [Interrupt Source Override] acpidump [048h 0072 001h] Subtable Type : 04 [Local APIC NMI] acpidump [048h 0072 004h] ACPI Table Address 9 : BFF06348 acpidump [048h 0072 004h] PM2 Control Block Address : 00001020 acpidump [049h 0073 001h] Length : 06 acpidump [049h 0073 001h] Length : 0A acpidump [04Ah 0074 001h] Bus : 00 acpidump [04Ah 0074 001h] Processor ID : 00 acpidump [04Bh 0075 001h] Source : 00 acpidump [04Bh 0075 002h] Flags (decoded below) : 0005 acpidump [04Ch 0076 004h] Interrupt : 00000002 acpidump [04Ch 0076 004h] ACPI Table Address 10 : BFF064CE acpidump [04Ch 0076 004h] PM Timer Block Address : 00001008 acpidump [04Ch 0076 008h] ACPI Table Address 5 : 00000000BF6E2FC0 acpidump [04Dh 0077 001h] Interrupt Input LINT : 01 acpidump [04Eh 0078 001h] Subtable Type : 04 [Local APIC NMI] acpidump [04Fh 0079 001h] Length : 06 acpidump [050h 0080 001h] Processor ID : 01 acpidump [050h 0080 002h] Flags (decoded below) : 0000 acpidump [050h 0080 004h] GPE0 Block Address : 00001028 acpidump [050h 0080 004h] ACPI Table Address 11 : BFF0678B acpidump [051h 0081 002h] Flags (decoded below) : 0005 acpidump [052h 0082 001h] Subtable Type : 02 [Interrupt Source Override] acpidump [053h 0083 001h] Length : 0A acpidump [053h 0083 001h] Interrupt Input LINT : 01 acpidump [054h 0084 001h] Bus : 00 acpidump [054h 0084 001h] Subtable Type : 02 [Interrupt Source Override] acpidump [054h 0084 004h] GPE1 Block Address : 00000000 acpidump [054h 0084 004h] ACPI Table Address 12 : BFF0683E acpidump [054h 0084 008h] ACPI Table Address 6 : 00000000BFF06280 acpidump [055h 0085 001h] Length : 0A acpidump [055h 0085 001h] Source : 09 acpidump [056h 0086 001h] Bus : 00 acpidump [056h 0086 004h] Interrupt : 00000009 acpidump [057h 0087 001h] Source : 00 acpidump [058h 0088 001h] PM1 Event Block Length : 04 acpidump [058h 0088 004h] Interrupt : 00000002 acpidump [058h 0088 004h] ACPI Table Address 13 : BFF06AAD acpidump [059h 0089 001h] PM1 Control Block Length : 02 acpidump [05Ah 0090 001h] PM2 Control Block Length : 01 acpidump [05Ah 0090 002h] Flags (decoded below) : 000D acpidump [05Bh 0091 001h] PM Timer Block Length : 04 acpidump [05Ch 0092 001h] Subtable Type : 04 [Local APIC NMI] acpidump [05Ch 0092 001h] GPE0 Block Length : 08 acpidump [05Ch 0092 002h] Flags (decoded below) : 0005 acpidump [05Ch 0092 004h] ACPI Table Address 14 : BFF06B63 acpidump [05Ch 0092 008h] ACPI Table Address 7 : 00000000BFF062C8 acpidump [05Dh 0093 001h] Length : 06 acpidump [05Dh 0093 001h] GPE1 Block Length : 00 acpidump [05Eh 0094 001h] Processor ID : 00 acpidump [05Eh 0094 001h] Subtable Type : 02 [Interrupt Source Override] acpidump [05Eh 0094 001h] GPE1 Base Offset : 00 acpidump [05Fh 0095 001h] Length : 0A acpidump [05Fh 0095 001h] _CST Support : 85 acpidump [05Fh 0095 002h] Flags (decoded below) : 0005 acpidump [060h 0096 001h] Bus : 00 acpidump [060h 0096 002h] C2 Latency : 0001 acpidump [060h 0096 004h] ACPI Table Address 15 : BFF07059 acpidump [061h 0097 001h] Source : 09 acpidump [061h 0097 001h] Interrupt Input LINT : 01 acpidump [062h 0098 001h] Subtable Type : 04 [Local APIC NMI] acpidump [062h 0098 002h] C3 Latency : 0023 acpidump [062h 0098 004h] Interrupt : 00000009 acpidump [063h 0099 001h] Length : 06 acpidump [064h 0100 001h] Processor ID : 01 acpidump [064h 0100 002h] CPU Cache Size : 0000 acpidump [064h 0100 004h] ACPI Table Address 16 : BFF0709B acpidump [064h 0100 008h] ACPI Table Address 8 : 00000000BFF06314 acpidump [065h 0101 002h] Flags (decoded below) : 0005 acpidump [066h 0102 002h] Cache Flush Stride : 0000 acpidump [066h 0102 002h] Flags (decoded below) : 000D acpidump [067h 0103 001h] Interrupt Input LINT : 01 acpidump [068h 0104 001h] Duty Cycle Offset : 01 acpidump [069h 0105 001h] Duty Cycle Width : 03 acpidump [06Ah 0106 001h] RTC Day Alarm Index : 0D acpidump [06Bh 0107 001h] RTC Month Alarm Index : 00 acpidump [06Ch 0108 001h] RTC Century Index : 32 acpidump [06Ch 0108 008h] ACPI Table Address 9 : 00000000BFF06348 acpidump [06Dh 0109 002h] Boot Flags (decoded below) : 0000 acpidump [06Fh 0111 001h] Reserved : 00 acpidump [070h 0112 004h] Flags (decoded below) : 000000A5 acpidump [074h 0116 001h] Space ID : 00 [SystemMemory] acpidump [074h 0116 008h] ACPI Table Address 10 : 00000000BFF064CE acpidump [074h 0116 00Ch] Reset Register : [Generic Address Structure] acpidump [075h 0117 001h] Bit Width : 00 acpidump [076h 0118 001h] Bit Offset : 00 acpidump [077h 0119 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [078h 0120 008h] Address : 0000000000000000 acpidump [07Ch 0124 008h] ACPI Table Address 11 : 00000000BFF0678B acpidump [080h 0128 001h] Value to cause reset : 00 acpidump [081h 0129 002h] ARM Flags (decoded below) : 0000 acpidump [083h 0131 001h] FADT Minor Revision : 00 acpidump [084h 0132 008h] FACS Address : 00000000BF6E2FC0 acpidump [084h 0132 008h] ACPI Table Address 12 : 00000000BFF0683E acpidump [08Ch 0140 008h] DSDT Address : 00000000BF6D9B6A acpidump [08Ch 0140 008h] ACPI Table Address 13 : 00000000BFF06AAD acpidump [094h 0148 001h] Space ID : 01 [SystemIO] acpidump [094h 0148 008h] ACPI Table Address 14 : 00000000BFF06B63 acpidump [094h 0148 00Ch] PM1A Event Block : [Generic Address Structure] acpidump [095h 0149 001h] Bit Width : 20 acpidump [096h 0150 001h] Bit Offset : 00 acpidump [097h 0151 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [098h 0152 008h] Address : 0000000000001000 acpidump [09Ch 0156 008h] ACPI Table Address 15 : 00000000BFF07059 acpidump [0A0h 0160 001h] Space ID : 00 [SystemMemory] acpidump [0A0h 0160 00Ch] PM1B Event Block : [Generic Address Structure] acpidump [0A1h 0161 001h] Bit Width : 00 acpidump [0A2h 0162 001h] Bit Offset : 00 acpidump [0A3h 0163 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0A4h 0164 008h] Address : 0000000000000000 acpidump [0A4h 0164 008h] ACPI Table Address 16 : 00000000BFF0709B acpidump [0ACh 0172 001h] Space ID : 01 [SystemIO] acpidump [0ACh 0172 00Ch] PM1A Control Block : [Generic Address Structure] acpidump [0ADh 0173 001h] Bit Width : 10 acpidump [0AEh 0174 001h] Bit Offset : 00 acpidump [0AFh 0175 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0B0h 0176 008h] Address : 0000000000001004 acpidump [0B8h 0184 001h] Space ID : 00 [SystemMemory] acpidump [0B8h 0184 00Ch] PM1B Control Block : [Generic Address Structure] acpidump [0B9h 0185 001h] Bit Width : 00 acpidump [0BAh 0186 001h] Bit Offset : 00 acpidump [0BBh 0187 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0BCh 0188 008h] Address : 0000000000000000 acpidump [0C4h 0196 001h] Space ID : 01 [SystemIO] acpidump [0C4h 0196 00Ch] PM2 Control Block : [Generic Address Structure] acpidump [0C5h 0197 001h] Bit Width : 08 acpidump [0C6h 0198 001h] Bit Offset : 00 acpidump [0C7h 0199 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0C8h 0200 008h] Address : 0000000000001020 acpidump [0D0h 0208 001h] Space ID : 01 [SystemIO] acpidump [0D0h 0208 00Ch] PM Timer Block : [Generic Address Structure] acpidump [0D1h 0209 001h] Bit Width : 20 acpidump [0D2h 0210 001h] Bit Offset : 00 acpidump [0D3h 0211 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0D4h 0212 008h] Address : 0000000000001008 acpidump [0DCh 0220 001h] Space ID : 01 [SystemIO] acpidump [0DCh 0220 00Ch] GPE0 Block : [Generic Address Structure] acpidump [0DDh 0221 001h] Bit Width : 40 acpidump [0DEh 0222 001h] Bit Offset : 00 acpidump [0DFh 0223 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0E0h 0224 008h] Address : 0000000000001028 acpidump [0E8h 0232 001h] Space ID : 00 [SystemMemory] acpidump [0E8h 0232 00Ch] GPE1 Block : [Generic Address Structure] acpidump [0E9h 0233 001h] Bit Width : 00 acpidump [0EAh 0234 001h] Bit Offset : 00 acpidump [0EBh 0235 001h] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0ECh 0236 008h] Address : 0000000000000000 acpidump acpidump: Dump ACPI tables. fwts-test/arg-table-path-0001/acpidump-0002.log000066400000000000000000001114321465205512700210610ustar00rootroot00000000000000acpidump acpidump Polarity : 0 acpidump Polarity : 1 acpidump Trigger Mode : 0 acpidump Trigger Mode : 1 acpidump Trigger Mode : 3 acpidump PSCI Compliant : 0 acpidump 4K Page Protect : 0 acpidump 64K Page Protect : 0 acpidump Sealed Case (V3) : 0 acpidump Processor Enabled : 1 acpidump PC-AT Compatibility : 1 acpidump 32-bit PM Timer (V1) : 0 acpidump VGA Not Present (V4) : 0 acpidump Hardware Reduced (V5) : 0 acpidump Must use HVC for PSCI : 0 acpidump Docking Supported (V1) : 0 acpidump Low Power S0 Idle (V5) : 0 acpidump MSI Not Supported (V4) : 0 acpidump Runtime Online Capable : 0 acpidump S4BIOS Support Present : 0 acpidump Use Platform Timer (V4) : 0 acpidump All CPUs support C1 (V1) : 1 acpidump Headless - No Video (V3) : 0 acpidump CMOS RTC Not Present (V5) : 0 acpidump 64-bit Wake Supported (V2) : 0 acpidump C2 works on MP system (V1) : 0 acpidump Use APIC Cluster Model (V4) : 0 acpidump PCIe ASPM Not Supported (V4) : 0 acpidump Remote Power-on capable (V4) : 0 acpidump 64-bit Wake Env Required (V2) : 0 acpidump Legacy Devices Supported (V2) : 0 acpidump RTC_STS valid on S4 wake (V4) : 0 acpidump Reset Register Supported (V2) : 0 acpidump PCIEXP_WAK Bits Supported (V4) : 0 acpidump WBINVD flushes all caches (V1) : 0 acpidump 8042 Present on ports 60/64 (V2) : 0 acpidump Control Method Power Button (V1) : 0 acpidump Control Method Sleep Button (V1) : 1 acpidump RTC can wake system from S4 (V1) : 1 acpidump RTC wake not in fixed reg space (V1) : 0 acpidump Use native instr after SLP_TYPx (V3) : 0 acpidump WBINVD instruction is operational (V1) : 1 acpidump Use APIC Physical Destination Mode (V4) : 0 acpidump 00 00 00 00 00 00 8A 6E 2E C9 36 E6 7F 10 8A EA \ acpidump 00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00 \ acpidump 0000: 41 50 49 43 68 00 00 00 01 13 50 54 4C 54 44 20 // APICh.....PTLTD acpidump 0000: 41 50 49 43 68 00 00 00 01 CC 49 4E 54 45 4C 20 // APICh.....INTEL acpidump 0000: 42 4F 4F 54 28 00 00 00 01 A5 50 54 4C 54 44 20 // BOOT(.....PTLTD acpidump 0000: 46 41 43 50 F4 00 00 00 03 52 54 4F 53 43 50 4C // FACP.....RTOSCPL acpidump 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... acpidump 0000: 48 50 45 54 38 00 00 00 01 0A 49 4E 54 45 4C 20 // HPET8.....INTEL acpidump 0000: 4D 43 46 47 3C 00 00 00 01 32 49 4E 54 45 4C 20 // MCFG<....2INTEL acpidump 0000: 52 53 44 54 68 00 00 00 01 AF 46 57 54 53 49 44 // RSDTh.....FWTSID acpidump 0000: 53 4C 49 43 76 01 00 00 01 99 4C 45 4E 4F 56 4F // SLICv.....LENOVO acpidump 0000: 54 43 50 41 32 00 00 00 01 8F 49 6E 74 65 6C 20 // TCPA2.....Intel acpidump 0000: 58 53 44 54 AC 00 00 00 01 65 46 57 54 53 49 44 // XSDT.....eFWTSID acpidump 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump 0010: 09 20 41 50 49 43 20 20 00 00 04 06 20 4C 54 50 // . APIC .... LTP acpidump 0010: 24 53 42 46 54 42 4C 24 00 00 04 06 20 4C 54 50 // $SBFTBL$.... LTP acpidump 0010: 43 52 45 53 54 4C 4E 45 00 00 04 06 41 4C 41 4E // CRESTLNE....ALAN acpidump 0010: 43 52 45 53 54 4C 4E 45 00 00 04 06 4C 4F 48 52 // CRESTLNE....LOHR acpidump 0010: 43 52 45 53 54 4C 4E 45 01 00 00 00 46 57 54 53 // CRESTLNE....FWTS acpidump 0010: 54 50 2D 36 38 20 20 20 00 00 04 06 54 42 44 20 // TP-68 ....TBD acpidump 0020: 00 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ acpidump 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump 0020: 01 00 00 00 00 00 00 00 9C 00 00 00 06 02 00 00 // ................ acpidump 0020: 01 00 00 00 00 00 F0 BF 00 00 00 00 78 00 F0 BF // ............x... acpidump 0020: 01 00 00 00 00 00 F0 BF 78 00 F0 BF F0 00 F0 BF // ........x....... acpidump 0020: 01 00 00 00 36 00 00 00 // ....6... acpidump 0020: 01 00 00 00 C0 2F 6E BF 6A 9B 6D BF 00 02 09 00 // ...../n.j.m..... acpidump 0020: 5A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E0 // Z............... acpidump 0020: 5A 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 // Z............... acpidump 0020: 5A 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // Z............... acpidump 0020: 5A 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // Z............... acpidump 0030: 00 00 // .. acpidump 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump 0030: 00 00 00 00 00 00 00 FF 00 00 00 00 // ............ acpidump 0030: 00 00 00 00 00 80 00 00 // ........ acpidump 0030: 00 00 00 00 F0 00 F0 BF 00 00 00 00 6A 9B 6D BF // ............j.m. acpidump 0030: 00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00 // .$..RSA1........ acpidump 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0C 01 00 // ................ acpidump 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0C 02 00 // ................ acpidump 0030: 6A 9B 6D BF 2C 61 F0 BF C0 2F 6E BF 80 62 F0 BF // j.m.,a.../n..b.. acpidump 0030: B2 00 00 00 F0 F1 00 80 00 10 00 00 00 00 00 00 // ................ acpidump 0040: 00 00 00 00 2C 61 F0 BF 00 00 00 00 C0 2F 6E BF // ....,a......./n. acpidump 0040: 00 00 C0 FE 00 00 00 00 02 0A 00 00 02 00 00 00 // ................ acpidump 0040: 00 00 C0 FE 00 00 00 00 04 06 00 05 00 01 04 06 // ................ acpidump 0040: 04 10 00 00 00 00 00 00 20 10 00 00 08 10 00 00 // ........ ....... acpidump 0040: 69 16 4A 9F B1 4B 3A FB 80 20 AA AF C4 F9 3E C1 // i.J..K:.. ....>. acpidump 0040: C8 62 F0 BF 14 63 F0 BF 48 63 F0 BF CE 64 F0 BF // .b...c..Hc...d.. acpidump 0050: 00 00 00 00 80 62 F0 BF 00 00 00 00 C8 62 F0 BF // .....b.......b.. acpidump 0050: 00 00 02 0A 00 09 09 00 00 00 0D 00 04 06 00 05 // ................ acpidump 0050: 01 05 00 01 02 0A 00 00 02 00 00 00 05 00 02 0A // ................ acpidump 0050: 28 10 00 00 00 00 00 00 04 02 01 04 08 00 00 85 // (............... acpidump 0050: 80 49 EE 6A 65 26 72 1E CD BF 5F 2F 96 D6 C0 0A // .I.je&r..._/.... acpidump 0050: 8B 67 F0 BF 3E 68 F0 BF AD 6A F0 BF 63 6B F0 BF // .g..>h...j..ck.. acpidump 0060: 00 00 00 00 14 63 F0 BF 00 00 00 00 48 63 F0 BF // .....c......Hc.. acpidump 0060: 00 01 04 06 01 05 00 01 // ........ acpidump 0060: 00 09 09 00 00 00 0D 00 // ........ acpidump 0060: 01 00 23 00 00 00 00 00 01 03 0D 00 32 00 00 00 // ..#.........2... acpidump 0060: 59 70 F0 BF 9B 70 F0 BF // Yp...p.. acpidump 0060: 92 F5 06 B5 00 B2 3B 29 02 E2 4C 8D C2 F2 BC 41 // ......;)..L....A acpidump 0070: 00 00 00 00 CE 64 F0 BF 00 00 00 00 8B 67 F0 BF // .....d.......g.. acpidump 0070: 77 9C 70 F0 F3 1B 09 D2 63 5A DC A8 83 F8 5E C9 // w.p.....cZ....^. acpidump 0070: A5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump 0080: 00 00 00 00 3E 68 F0 BF 00 00 00 00 AD 6A F0 BF // ....>h.......j.. acpidump 0080: 00 00 00 00 C0 2F 6E BF 00 00 00 00 6A 9B 6D BF // ...../n.....j.m. acpidump 0080: 15 95 F9 FA FD DC 05 B7 4D 67 7F 2D B3 84 33 20 // ........Mg.-..3 acpidump 0090: 00 00 00 00 01 20 00 00 00 10 00 00 00 00 00 00 // ..... .......... acpidump 0090: 00 00 00 00 63 6B F0 BF 00 00 00 00 59 70 F0 BF // ....ck......Yp.. acpidump 0090: E1 D1 79 2A A7 6A 77 D1 B6 20 2A 76 42 C5 D5 E9 // ..y*.jw.. *vB... acpidump 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 // ................ acpidump 00A0: 00 00 00 00 9B 70 F0 BF 00 00 00 00 // .....p...... acpidump 00A0: B6 43 40 55 44 C3 C9 37 99 5F 41 97 70 F3 D1 F6 // .C@UD..7._A.p... acpidump 00B0: 04 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ acpidump 00B0: 07 EC 7B 1A 29 A1 C1 F1 91 FD 48 86 6E 3E CE CB // ..{.).....H.n>.. acpidump 00C0: 00 00 00 00 01 08 00 00 20 10 00 00 00 00 00 00 // ........ ....... acpidump 00C0: 01 00 00 00 B6 00 00 00 00 00 02 00 4C 45 4E 4F // ............LENO acpidump 00D0: 01 20 00 00 08 10 00 00 00 00 00 00 01 40 00 00 // . ...........@.. acpidump 00D0: 56 4F 54 50 2D 36 38 20 20 20 57 49 4E 44 4F 57 // VOTP-68 WINDOW acpidump 00E0: 28 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // (............... acpidump 00E0: 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // S .............. acpidump 00F0: 00 00 00 00 // .... acpidump 00F0: 00 00 00 00 00 00 8A 6E 2E C9 36 E6 7F 10 8A EA // .......n..6..... acpidump 01 00 00 00 00 00 00 00 9C 00 00 00 06 02 00 00 \ acpidump 01 00 00 00 B6 00 00 00 00 00 02 00 4C 45 4E 4F \ acpidump 0100: 14 AD D2 93 B7 6D 9B 73 AD 83 36 B8 6C A7 A7 EE // .....m.s..6.l... acpidump 0110: 37 47 16 FE F3 FC CD C7 89 84 06 16 91 0B 1E 81 // 7G.............. acpidump 0120: 11 42 B1 35 52 57 F6 6B BB 5F A5 81 E2 FF 89 8A // .B.5RW.k._...... acpidump 0130: 95 C3 4D FC E9 56 4F 4C 34 CC 99 5E 62 E1 90 8A // ..M..VOL4..^b... acpidump 0140: 54 BE 4A 00 5C 9B A0 86 41 46 66 9D E2 F2 E7 36 // T.J.\...AFf....6 acpidump 0150: 9C 33 91 27 E7 8D 5C A1 D8 F9 A4 61 8A 1C 04 07 // .3.'..\....a.... acpidump 0160: E3 2A 1E 14 F1 BD 7F 4C 09 FF 19 11 A9 D4 74 CA // .*.....L......t. acpidump 0170: 11 9E DC 54 39 BF // ...T9. acpidump 07 EC 7B 1A 29 A1 C1 F1 91 FD 48 86 6E 3E CE CB \ acpidump 11 42 B1 35 52 57 F6 6B BB 5F A5 81 E2 FF 89 8A \ acpidump 14 AD D2 93 B7 6D 9B 73 AD 83 36 B8 6C A7 A7 EE \ acpidump 15 95 F9 FA FD DC 05 B7 4D 67 7F 2D B3 84 33 20 \ acpidump 37 47 16 FE F3 FC CD C7 89 84 06 16 91 0B 1E 81 \ acpidump 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 \ acpidump 53 4C 49 43 76 01 00 00 01 99 4C 45 4E 4F 56 4F \ acpidump 54 50 2D 36 38 20 20 20 00 00 04 06 54 42 44 20 \ acpidump 54 BE 4A 00 5C 9B A0 86 41 46 66 9D E2 F2 E7 36 \ acpidump 56 4F 54 50 2D 36 38 20 20 20 57 49 4E 44 4F 57 \ acpidump 69 16 4A 9F B1 4B 3A FB 80 20 AA AF C4 F9 3E C1 \ acpidump 77 9C 70 F0 F3 1B 09 D2 63 5A DC A8 83 F8 5E C9 \ acpidump 80 49 EE 6A 65 26 72 1E CD BF 5F 2F 96 D6 C0 0A \ acpidump 92 F5 06 B5 00 B2 3B 29 02 E2 4C 8D C2 F2 BC 41 \ acpidump 95 C3 4D FC E9 56 4F 4C 34 CC 99 5E 62 E1 90 8A \ acpidump 9C 33 acpidump B6 43 40 55 44 C3 C9 37 99 5F 41 97 70 F3 D1 F6 \ acpidump E1 D1 79 2A A7 6A 77 D1 B6 20 2A 76 42 C5 D5 E9 \ acpidump 0000: 54 4D 4F 52 26 00 00 00 01 EB 50 54 4C 54 44 20 TMOR&.....PTLTD acpidump 0010: 20 20 20 20 20 20 20 20 00 00 04 06 50 54 4C 20 ....PTL acpidump 0020: 03 00 00 00 F3 F4 ...... acpidump ---- acpidump ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- acpidump APIC @ bff00000 (104 bytes) (loaded from file) acpidump APIC @ bff00078 (104 bytes) (loaded from file) acpidump BOOT @ bff000f0 (40 bytes) (loaded from file) acpidump Contains AML Object Code. acpidump DSDT @ bf6d9b6a (24564 bytes) (loaded from file) acpidump FACP @ bff0612c (244 bytes) (loaded from file) acpidump FACS @ bf6e2fc0 (64 bytes) (loaded from file) acpidump HPET @ bff06280 (56 bytes) (loaded from file) acpidump MCFG @ bff062c8 (60 bytes) (loaded from file) acpidump RSDP @ bff06314 (36 bytes) (loaded from file) acpidump RSDT @ bff070d1 (104 bytes) (generated by fwts) acpidump SLIC @ bff06348 (374 bytes) (loaded from file) acpidump SSDT @ bff064ce (685 bytes) (loaded from file) acpidump SSDT @ bff0678b (163 bytes) (loaded from file) acpidump SSDT @ bff0683e (607 bytes) (loaded from file) acpidump SSDT @ bff06aad (166 bytes) (loaded from file) acpidump SSDT @ bff06b63 (1254 bytes) (loaded from file) acpidump TCPA @ bff07059 (50 bytes) (loaded from file) acpidump TMOR @ bff0709b (38 bytes) (loaded from file) acpidump Test 1 of 1: Dump ACPI tables. acpidump XSDT @ bff07149 (172 bytes) (generated by fwts) acpidump [000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] acpidump [000h 0000 4] Signature : "BOOT" [Simple Boot Flag Table] acpidump [000h 0000 4] Signature : "DSDT" acpidump [000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] acpidump [000h 0000 4] Signature : "FACS" acpidump [000h 0000 4] Signature : "HPET" [High Precision Event Timer table] acpidump [000h 0000 4] Signature : "MCFG" [Memory Mapped Configuration table] acpidump [000h 0000 4] Signature : "RSDT" [Root System Description Table] acpidump [000h 0000 4] Signature : "SLIC" [Software Licensing Description Table] acpidump [000h 0000 4] Signature : "SSDT" acpidump [000h 0000 4] Signature : "TCPA" [Trusted Computing Platform Alliance table] acpidump [000h 0000 4] Signature : "TMOR" acpidump [000h 0000 4] Signature : "XSDT" [Extended System Description Table] acpidump [000h 0000 8] Signature : "RSD PTR " acpidump [004h 0004 4] Length : 00000040 acpidump [004h 0004 4] Table Length : 00000026 acpidump [004h 0004 4] Table Length : 00000028 acpidump [004h 0004 4] Table Length : 00000032 acpidump [004h 0004 4] Table Length : 00000038 acpidump [004h 0004 4] Table Length : 0000003C acpidump [004h 0004 4] Table Length : 00000068 acpidump [004h 0004 4] Table Length : 000000AC acpidump [004h 0004 4] Table Length : 000000F4 acpidump [004h 0004 4] Table Length : 000000a3 acpidump [004h 0004 4] Table Length : 000000a6 acpidump [004h 0004 4] Table Length : 00000176 acpidump [004h 0004 4] Table Length : 0000025f acpidump [004h 0004 4] Table Length : 000002ad acpidump [004h 0004 4] Table Length : 000004e6 acpidump [004h 0004 4] Table Length : 00005ff4 acpidump [008h 0008 1] Checksum : 1c acpidump [008h 0008 1] Revision : 01 acpidump [008h 0008 1] Revision : 02 acpidump [008h 0008 1] Revision : 03 acpidump [008h 0008 4] Hardware Signature : 00000000 acpidump [009h 0009 1] Checksum : 0A acpidump [009h 0009 1] Checksum : 11 acpidump [009h 0009 1] Checksum : 13 acpidump [009h 0009 1] Checksum : 32 acpidump [009h 0009 1] Checksum : 52 acpidump [009h 0009 1] Checksum : 59 acpidump [009h 0009 1] Checksum : 65 acpidump [009h 0009 1] Checksum : 6d acpidump [009h 0009 1] Checksum : 8F acpidump [009h 0009 1] Checksum : 99 acpidump [009h 0009 1] Checksum : A5 acpidump [009h 0009 1] Checksum : AF acpidump [009h 0009 1] Checksum : CC acpidump [009h 0009 1] Checksum : EB acpidump [009h 0009 1] Checksum : c8 acpidump [009h 0009 1] Checksum : df acpidump [009h 0009 1] Checksum : ed acpidump [009h 0009 6] Oem ID : "LENOVO" acpidump [00Ah 0010 6] Oem ID : " PmRef" acpidump [00Ah 0010 6] Oem ID : "BrtRef" acpidump [00Ah 0010 6] Oem ID : "FWTSID" acpidump [00Ah 0010 6] Oem ID : "INTEL " acpidump [00Ah 0010 6] Oem ID : "Intel " acpidump [00Ah 0010 6] Oem ID : "LENOVO" acpidump [00Ah 0010 6] Oem ID : "PTLTD " acpidump [00Ah 0010 6] Oem ID : "SataRe" acpidump [00Ah 0010 6] Oem ID : "TOSCPL" acpidump [00Ch 0012 4] 32 Firmware Waking Vector : 00000000 acpidump [00fh 0015 1] Revision : 02 acpidump [010h 0016 4] Global Lock : 00000000 acpidump [010h 0016 4] RSDT Address : bff070d1 acpidump [010h 0016 8] Oem Table ID : " " acpidump [010h 0016 8] Oem Table ID : " CpuPm" acpidump [010h 0016 8] Oem Table ID : " APIC " acpidump [010h 0016 8] Oem Table ID : " Cpu0Tst" acpidump [010h 0016 8] Oem Table ID : " Cpu1Tst" acpidump [010h 0016 8] Oem Table ID : " DD01BRT" acpidump [010h 0016 8] Oem Table ID : "$SBFTBL$" acpidump [010h 0016 8] Oem Table ID : "CRESTLNE" acpidump [010h 0016 8] Oem Table ID : "SataAhci" acpidump [010h 0016 8] Oem Table ID : "TP-68 " acpidump [014h 0020 4] Table Length : 00000024 acpidump [014h 0020 4] Flags (decoded below) : 00000000 acpidump [018h 0024 4] Oem Revision : 00000001 acpidump [018h 0024 4] Oem Revision : 00001000 acpidump [018h 0024 4] Oem Revision : 00003000 acpidump [018h 0024 4] Oem Revision : 06040000 acpidump [018h 0024 8] XSDT Address : 00000000bff07149 acpidump [018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 acpidump [01Ch 0028 4] Asl Compiler ID : " LTP" acpidump [01Ch 0028 4] Asl Compiler ID : "ALAN" acpidump [01Ch 0028 4] Asl Compiler ID : "FWTS" acpidump [01Ch 0028 4] Asl Compiler ID : "INTL" acpidump [01Ch 0028 4] Asl Compiler ID : "LOHR" acpidump [01Ch 0028 4] Asl Compiler ID : "PTL " acpidump [01Ch 0028 4] Asl Compiler ID : "TBD " acpidump [020h 0032 1] Version : 01 acpidump [020h 0032 1] Extended Checksum : 73 acpidump [020h 0032 4] Asl Compiler Revision : 00000000 acpidump [020h 0032 4] Asl Compiler Revision : 00000001 acpidump [020h 0032 4] Asl Compiler Revision : 00000003 acpidump [020h 0032 4] Asl Compiler Revision : 0000005A acpidump [020h 0032 4] Asl Compiler Revision : 20050624 acpidump [020h 0032 4] Asl Compiler Revision : 20060608 acpidump [021h 0033 3] Reserved : 00 00 00 acpidump [021h 0033 3] Reserved : 000000 acpidump [024h 0036 1] Boot Register Index : 36 acpidump [024h 0036 2] Platform Class : 0000 acpidump [024h 0036 4] FACS Address : BF6E2FC0 acpidump [024h 0036 4] Hardware Block ID : 8086A201 acpidump [024h 0036 4] Local Apic Address : FEE00000 acpidump [024h 0036 4] ACPI Table Address 0 : BFF00000 acpidump [024h 0036 4] OspmFlags (decoded below) : 00000000 acpidump [024h 0036 8] Reserved : 0000000000000000 acpidump [024h 0036 8] ACPI Table Address 0 : 00000000BFF00000 acpidump [024h 0036 338] Software Licensing Structure : \ acpidump [025h 0037 3] Reserved : 000000 acpidump [026h 0038 4] Min Event Log Length : 00010000 acpidump [028h 0040 1] Space ID : 00 [SystemMemory] acpidump [028h 0040 4] DSDT Address : BF6D9B6A acpidump [028h 0040 4] Flags (decoded below) : 00000001 acpidump [028h 0040 4] ACPI Table Address 1 : BFF00078 acpidump [028h 0040 12] Timer Block Register : [Generic Address Structure] acpidump [029h 0041 1] Bit Width : 00 acpidump [02Ah 0042 1] Bit Offset : 00 acpidump [02Ah 0042 8] Event Log Address : 0000000000000000 acpidump [02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] acpidump [02Ch 0044 1] Model : 00 acpidump [02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] acpidump [02Ch 0044 4] ACPI Table Address 2 : BFF000F0 acpidump [02Ch 0044 8] Address : 00000000FED00000 acpidump [02Ch 0044 8] Base Address : 00000000E0000000 acpidump [02Ch 0044 8] ACPI Table Address 1 : 00000000BFF00078 acpidump [02Dh 0045 1] Length : 08 acpidump [02Dh 0045 1] PM Profile : 02 [Mobile] acpidump [02Eh 0046 1] Processor ID : 00 acpidump [02Eh 0046 2] SCI Interrupt : 0009 acpidump [02Fh 0047 1] Local Apic ID : 00 acpidump [030h 0048 4] SMI Command Port : 000000B2 acpidump [030h 0048 4] Flags (decoded below) : 00000001 acpidump [030h 0048 4] ACPI Table Address 3 : BF6D9B6A acpidump [034h 0052 1] Subtable Type : 00 [Processor Local APIC] acpidump [034h 0052 1] Sequence Number : 00 acpidump [034h 0052 1] ACPI Enable Value : F0 acpidump [034h 0052 2] Segment Group Number : 0000 acpidump [034h 0052 4] ACPI Table Address 4 : BFF0612C acpidump [034h 0052 8] ACPI Table Address 2 : 00000000BFF000F0 acpidump [035h 0053 1] Length : 08 acpidump [035h 0053 1] ACPI Disable Value : F1 acpidump [035h 0053 2] Minimum Clock Ticks : 0080 acpidump [036h 0054 1] Processor ID : 01 acpidump [036h 0054 1] S4BIOS Command : 00 acpidump [036h 0054 1] Start Bus Number : 00 acpidump [037h 0055 1] Local Apic ID : 01 acpidump [037h 0055 1] End Bus Number : FF acpidump [037h 0055 1] P-State Control : 80 acpidump [037h 0055 1] Flags (decoded below) : 00 acpidump [038h 0056 4] Reserved : 00000000 acpidump [038h 0056 4] Flags (decoded below) : 00000001 acpidump [038h 0056 4] ACPI Table Address 5 : BF6E2FC0 acpidump [038h 0056 4] PM1A Event Block Address : 00001000 acpidump [03Ch 0060 1] Subtable Type : 01 [I/O APIC] acpidump [03Ch 0060 4] ACPI Table Address 6 : BFF06280 acpidump [03Ch 0060 4] PM1B Event Block Address : 00000000 acpidump [03Ch 0060 8] ACPI Table Address 3 : 00000000BF6D9B6A acpidump [03Dh 0061 1] Length : 0C acpidump [03Eh 0062 1] I/O Apic ID : 01 acpidump [03Eh 0062 1] I/O Apic ID : 02 acpidump [03Fh 0063 1] Reserved : 00 acpidump [040h 0064 4] Address : FEC00000 acpidump [040h 0064 4] ACPI Table Address 7 : BFF062C8 acpidump [040h 0064 4] PM1A Control Block Address : 00001004 acpidump [044h 0068 4] Interrupt : 00000000 acpidump [044h 0068 4] ACPI Table Address 8 : BFF06314 acpidump [044h 0068 4] PM1B Control Block Address : 00000000 acpidump [044h 0068 8] ACPI Table Address 4 : 00000000BFF0612C acpidump [048h 0072 1] Subtable Type : 02 [Interrupt Source Override] acpidump [048h 0072 1] Subtable Type : 04 [Local APIC NMI] acpidump [048h 0072 4] ACPI Table Address 9 : BFF06348 acpidump [048h 0072 4] PM2 Control Block Address : 00001020 acpidump [049h 0073 1] Length : 06 acpidump [049h 0073 1] Length : 0A acpidump [04Ah 0074 1] Bus : 00 acpidump [04Ah 0074 1] Processor ID : 00 acpidump [04Bh 0075 1] Source : 00 acpidump [04Bh 0075 2] Flags (decoded below) : 0005 acpidump [04Ch 0076 4] Interrupt : 00000002 acpidump [04Ch 0076 4] ACPI Table Address 10 : BFF064CE acpidump [04Ch 0076 4] PM Timer Block Address : 00001008 acpidump [04Ch 0076 8] ACPI Table Address 5 : 00000000BF6E2FC0 acpidump [04Dh 0077 1] Interrupt Input LINT : 01 acpidump [04Eh 0078 1] Subtable Type : 04 [Local APIC NMI] acpidump [04Fh 0079 1] Length : 06 acpidump [050h 0080 1] Processor ID : 01 acpidump [050h 0080 2] Flags (decoded below) : 0000 acpidump [050h 0080 4] GPE0 Block Address : 00001028 acpidump [050h 0080 4] ACPI Table Address 11 : BFF0678B acpidump [051h 0081 2] Flags (decoded below) : 0005 acpidump [052h 0082 1] Subtable Type : 02 [Interrupt Source Override] acpidump [053h 0083 1] Length : 0A acpidump [053h 0083 1] Interrupt Input LINT : 01 acpidump [054h 0084 1] Bus : 00 acpidump [054h 0084 1] Subtable Type : 02 [Interrupt Source Override] acpidump [054h 0084 4] GPE1 Block Address : 00000000 acpidump [054h 0084 4] ACPI Table Address 12 : BFF0683E acpidump [054h 0084 8] ACPI Table Address 6 : 00000000BFF06280 acpidump [055h 0085 1] Length : 0A acpidump [055h 0085 1] Source : 09 acpidump [056h 0086 1] Bus : 00 acpidump [056h 0086 4] Interrupt : 00000009 acpidump [057h 0087 1] Source : 00 acpidump [058h 0088 1] PM1 Event Block Length : 04 acpidump [058h 0088 4] Interrupt : 00000002 acpidump [058h 0088 4] ACPI Table Address 13 : BFF06AAD acpidump [059h 0089 1] PM1 Control Block Length : 02 acpidump [05Ah 0090 1] PM2 Control Block Length : 01 acpidump [05Ah 0090 2] Flags (decoded below) : 000D acpidump [05Bh 0091 1] PM Timer Block Length : 04 acpidump [05Ch 0092 1] Subtable Type : 04 [Local APIC NMI] acpidump [05Ch 0092 1] GPE0 Block Length : 08 acpidump [05Ch 0092 2] Flags (decoded below) : 0005 acpidump [05Ch 0092 4] ACPI Table Address 14 : BFF06B63 acpidump [05Ch 0092 8] ACPI Table Address 7 : 00000000BFF062C8 acpidump [05Dh 0093 1] Length : 06 acpidump [05Dh 0093 1] GPE1 Block Length : 00 acpidump [05Eh 0094 1] Processor ID : 00 acpidump [05Eh 0094 1] Subtable Type : 02 [Interrupt Source Override] acpidump [05Eh 0094 1] GPE1 Base Offset : 00 acpidump [05Fh 0095 1] Length : 0A acpidump [05Fh 0095 1] _CST Support : 85 acpidump [05Fh 0095 2] Flags (decoded below) : 0005 acpidump [060h 0096 1] Bus : 00 acpidump [060h 0096 2] C2 Latency : 0001 acpidump [060h 0096 4] ACPI Table Address 15 : BFF07059 acpidump [061h 0097 1] Source : 09 acpidump [061h 0097 1] Interrupt Input LINT : 01 acpidump [062h 0098 1] Subtable Type : 04 [Local APIC NMI] acpidump [062h 0098 2] C3 Latency : 0023 acpidump [062h 0098 4] Interrupt : 00000009 acpidump [063h 0099 1] Length : 06 acpidump [064h 0100 1] Processor ID : 01 acpidump [064h 0100 2] CPU Cache Size : 0000 acpidump [064h 0100 4] ACPI Table Address 16 : BFF0709B acpidump [064h 0100 8] ACPI Table Address 8 : 00000000BFF06314 acpidump [065h 0101 2] Flags (decoded below) : 0005 acpidump [066h 0102 2] Cache Flush Stride : 0000 acpidump [066h 0102 2] Flags (decoded below) : 000D acpidump [067h 0103 1] Interrupt Input LINT : 01 acpidump [068h 0104 1] Duty Cycle Offset : 01 acpidump [069h 0105 1] Duty Cycle Width : 03 acpidump [06Ah 0106 1] RTC Day Alarm Index : 0D acpidump [06Bh 0107 1] RTC Month Alarm Index : 00 acpidump [06Ch 0108 1] RTC Century Index : 32 acpidump [06Ch 0108 8] ACPI Table Address 9 : 00000000BFF06348 acpidump [06Dh 0109 2] Boot Flags (decoded below) : 0000 acpidump [06Fh 0111 1] Reserved : 00 acpidump [070h 0112 4] Flags (decoded below) : 000000A5 acpidump [074h 0116 1] Space ID : 00 [SystemMemory] acpidump [074h 0116 8] ACPI Table Address 10 : 00000000BFF064CE acpidump [074h 0116 12] Reset Register : [Generic Address Structure] acpidump [075h 0117 1] Bit Width : 00 acpidump [076h 0118 1] Bit Offset : 00 acpidump [077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] acpidump [078h 0120 8] Address : 0000000000000000 acpidump [07Ch 0124 8] ACPI Table Address 11 : 00000000BFF0678B acpidump [080h 0128 1] Value to cause reset : 00 acpidump [081h 0129 2] ARM Flags (decoded below) : 0000 acpidump [083h 0131 1] FADT Minor Revision : 00 acpidump [084h 0132 8] FACS Address : 00000000BF6E2FC0 acpidump [084h 0132 8] ACPI Table Address 12 : 00000000BFF0683E acpidump [08Ch 0140 8] DSDT Address : 00000000BF6D9B6A acpidump [08Ch 0140 8] ACPI Table Address 13 : 00000000BFF06AAD acpidump [094h 0148 1] Space ID : 01 [SystemIO] acpidump [094h 0148 8] ACPI Table Address 14 : 00000000BFF06B63 acpidump [094h 0148 12] PM1A Event Block : [Generic Address Structure] acpidump [095h 0149 1] Bit Width : 20 acpidump [096h 0150 1] Bit Offset : 00 acpidump [097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] acpidump [098h 0152 8] Address : 0000000000001000 acpidump [09Ch 0156 8] ACPI Table Address 15 : 00000000BFF07059 acpidump [0A0h 0160 1] Space ID : 00 [SystemMemory] acpidump [0A0h 0160 12] PM1B Event Block : [Generic Address Structure] acpidump [0A1h 0161 1] Bit Width : 00 acpidump [0A2h 0162 1] Bit Offset : 00 acpidump [0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0A4h 0164 8] Address : 0000000000000000 acpidump [0A4h 0164 8] ACPI Table Address 16 : 00000000BFF0709B acpidump [0ACh 0172 1] Space ID : 01 [SystemIO] acpidump [0ACh 0172 12] PM1A Control Block : [Generic Address Structure] acpidump [0ADh 0173 1] Bit Width : 10 acpidump [0AEh 0174 1] Bit Offset : 00 acpidump [0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0B0h 0176 8] Address : 0000000000001004 acpidump [0B8h 0184 1] Space ID : 00 [SystemMemory] acpidump [0B8h 0184 12] PM1B Control Block : [Generic Address Structure] acpidump [0B9h 0185 1] Bit Width : 00 acpidump [0BAh 0186 1] Bit Offset : 00 acpidump [0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0BCh 0188 8] Address : 0000000000000000 acpidump [0C4h 0196 1] Space ID : 01 [SystemIO] acpidump [0C4h 0196 12] PM2 Control Block : [Generic Address Structure] acpidump [0C5h 0197 1] Bit Width : 08 acpidump [0C6h 0198 1] Bit Offset : 00 acpidump [0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0C8h 0200 8] Address : 0000000000001020 acpidump [0D0h 0208 1] Space ID : 01 [SystemIO] acpidump [0D0h 0208 12] PM Timer Block : [Generic Address Structure] acpidump [0D1h 0209 1] Bit Width : 20 acpidump [0D2h 0210 1] Bit Offset : 00 acpidump [0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0D4h 0212 8] Address : 0000000000001008 acpidump [0DCh 0220 1] Space ID : 01 [SystemIO] acpidump [0DCh 0220 12] GPE0 Block : [Generic Address Structure] acpidump [0DDh 0221 1] Bit Width : 40 acpidump [0DEh 0222 1] Bit Offset : 00 acpidump [0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0E0h 0224 8] Address : 0000000000001028 acpidump [0E8h 0232 1] Space ID : 00 [SystemMemory] acpidump [0E8h 0232 12] GPE1 Block : [Generic Address Structure] acpidump [0E9h 0233 1] Bit Width : 00 acpidump [0EAh 0234 1] Bit Offset : 00 acpidump [0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] acpidump [0ECh 0236 8] Address : 0000000000000000 acpidump acpidump: Dump ACPI tables. fwts-test/arg-table-path-0001/test-0001.sh000077500000000000000000000020661465205512700200730ustar00rootroot00000000000000#!/bin/bash # TEST="Test --table-path to load dumped tables produced by acpixtract" NAME=test-0001.sh TMPLOG=$TMP/acpidump.log.$$ HERE=$FWTSTESTDIR/arg-table-path-0001 $FWTS --show-tests | grep acpidump > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi machine=$(uname -m) case $machine in x86 | x86_32 | x86_64 | i686 ) ;; *) echo SKIP: $TEST, $NAME exit 77 ;; esac # # Unfortunately we can pull in the tables in different order depending # on the way the tables are stored in the directory. Since we only care # about output content and not necessary table order, we sort and uniq # the output before we diff. # $FWTS --log-format="%line %owner " -w 200 --table-path=$HERE acpidump - | grep "^[0-9]*[ ]*acpidump" | cut -c7- | LC_ALL=C sort | uniq > $TMPLOG cat $HERE/acpidump-0001.log | grep "^[0-9]*[ ]*acpidump" | cut -c1- | LC_ALL=C sort | uniq > $TMPLOG.orig diff $TMPLOG $TMPLOG.orig >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG $TMPLOG.orig exit $ret fwts-test/arg-table-path-0001/test-0002.sh000077500000000000000000000020421465205512700200660ustar00rootroot00000000000000#!/bin/bash # TEST="Test -t to load dumped tables produced by acpixtract" NAME=test-0002.sh TMPLOG=$TMP/acpidump.log.$$ HERE=$FWTSTESTDIR/arg-table-path-0001 $FWTS --show-tests | grep acpidump > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi machine=$(uname -m) case $machine in x86 | x86_32 | x86_64 | i686 ) ;; *) echo SKIP: $TEST, $NAME exit 77 ;; esac # # Unfortunately we can pull in the tables in different order depending # on the way the tables are stored in the directory. Since we only care # about output content and not necessary table order, we sort and uniq # the output before we diff. # $FWTS --log-format="%line %owner " -w 200 -t $HERE acpidump - | grep "^[0-9]*[ ]*acpidump" | cut -c7- | LC_ALL=C sort | uniq > $TMPLOG cat $HERE/acpidump-0001.log | grep "^[0-9]*[ ]*acpidump" | cut -c1- | LC_ALL=C sort | uniq > $TMPLOG.orig diff $TMPLOG $TMPLOG.orig >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG $TMPLOG.orig exit $ret fwts-test/arg-width-0001/000077500000000000000000000000001465205512700152715ustar00rootroot00000000000000fwts-test/arg-width-0001/klog-0001.log000066400000000000000000000010071465205512700173040ustar00rootroot00000000000000klog klog: Scan kernel log for errors and warnings. klog ---------------------------------------------------------- klog Test 1 of 1: Kernel log error check. klog PASSED: Test 1, Found no errors in kernel log. klog klog ========================================================== klog 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 klog info only. klog ========================================================== fwts-test/arg-width-0001/klog-0002.log000066400000000000000000000010251465205512700173050ustar00rootroot00000000000000klog klog: Scan kernel log for errors and warnings. klog -------------------------------------------------------------------- klog Test 1 of 1: Kernel log error check. klog PASSED: Test 1, Found no errors in kernel log. klog klog ==================================================================== klog 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. klog ==================================================================== fwts-test/arg-width-0001/klog-0003.log000066400000000000000000000010631465205512700173100ustar00rootroot00000000000000klog klog: Scan kernel log for errors and warnings. klog ------------------------------------------------------------------------------ klog Test 1 of 1: Kernel log error check. klog PASSED: Test 1, Found no errors in kernel log. klog klog ============================================================================== klog 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. klog ============================================================================== fwts-test/arg-width-0001/klog-0004.log000066400000000000000000000062771465205512700173250ustar00rootroot00000000000000klog klog: Scan kernel log for errors and warnings. klog ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ klog Test 1 of 1: Kernel log error check. klog PASSED: Test 1, Found no errors in kernel log. klog klog ================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== klog 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. klog ================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== fwts-test/arg-width-0001/klog.txt000066400000000000000000000010071465205512700167640ustar00rootroot0000000000000000014 klog Scan kernel log for errors and warnings. 00015 klog --------------------------------------------------------- 00016 klog Cannot read kernel log. 00017 klog Aborted test, initialisation failed. 00018 klog ========================================================= 00019 klog 0 passed, 0 failed, 0 warnings, 1 aborted, 0 skipped, 0 00020 klog info only. 00021 klog ========================================================= fwts-test/arg-width-0001/test-0001.sh000077500000000000000000000006501465205512700171660ustar00rootroot00000000000000#!/bin/bash # TEST="Test -w 80" NAME=test-0001.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-width-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-width-0001/klog-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-width-0001/test-0002.sh000077500000000000000000000006521465205512700171710ustar00rootroot00000000000000#!/bin/bash # TEST="Test -w 90" NAME=test-0002.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " -w 90 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-width-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-width-0001/klog-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-width-0001/test-0003.sh000077500000000000000000000006531465205512700171730ustar00rootroot00000000000000#!/bin/bash # TEST="Test -w 100" NAME=test-0003.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " -w 100 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-width-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-width-0001/klog-0003.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-width-0001/test-0004.sh000077500000000000000000000006551465205512700171760ustar00rootroot00000000000000#!/bin/bash # TEST="Test -w 1000" NAME=test-0004.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " -w 1000 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-width-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-width-0001/klog-0004.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-width-0001/test-0005.sh000077500000000000000000000006731465205512700171770ustar00rootroot00000000000000#!/bin/bash # TEST="Test --log-width=80" NAME=test-0005.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " --log-width=80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-width-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-width-0001/klog-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-width-0001/test-0006.sh000077500000000000000000000006721465205512700171770ustar00rootroot00000000000000#!/bin/bash # TEST="Test --log-width=90" NAME=test-0006.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " --log-width=90 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-width-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-width-0001/klog-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-width-0001/test-0007.sh000077500000000000000000000006751465205512700172030ustar00rootroot00000000000000#!/bin/bash # TEST="Test --log-width=100" NAME=test-0007.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " --log-width=100 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-width-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-width-0001/klog-0003.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/arg-width-0001/test-0008.sh000077500000000000000000000006761465205512700172050ustar00rootroot00000000000000#!/bin/bash # TEST="Test --log-width=1000" NAME=test-0008.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " --log-width=1000 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/arg-width-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/arg-width-0001/klog-0004.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/asf-0001/000077500000000000000000000000001465205512700141545ustar00rootroot00000000000000fwts-test/asf-0001/acpidump-0001.log000066400000000000000000000045411465205512700170430ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... ASF! @ 0x00000000 0000: 41 53 46 21 A5 00 00 00 20 3D 4C 45 4E 4F 56 4F ASF!.... =LENOVO 0010: 54 50 2D 47 32 20 20 20 10 11 00 00 50 54 4C 20 TP-G2 ....PTL 0020: 02 00 00 00 00 00 10 00 FF FF 17 20 00 00 4A 66 ........... ..Jf 0030: 00 00 00 00 01 00 2C 00 00 00 03 0C 00 00 00 00 ......,......... 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0060: 02 00 18 00 04 04 00 00 00 88 00 03 01 88 00 02 ................ 0070: 02 88 00 01 03 88 00 04 03 00 17 00 00 F8 00 00 ................ 0080: 00 13 F0 01 00 00 00 00 00 00 00 00 00 00 00 84 ................ 0090: 00 16 00 00 10 5C 68 88 C2 D2 DC A0 A2 A4 A6 C8 .....\h......... 00A0: 00 00 00 00 00 ..... fwts-test/asf-0001/acpidump-0002.log000066400000000000000000000045411465205512700170440ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... ASF! @ 0x00000000 0000: 41 53 46 21 A5 00 00 00 20 3D 4C 45 4E 4F 56 4F ASF!.... =LENOVO 0010: 54 50 2D 47 32 20 20 20 10 11 00 00 50 54 4C 20 TP-G2 ....PTL 0020: 02 00 00 00 00 00 10 00 00 00 17 20 00 00 4A 66 ........... ..Jf 0030: ff 10 20 40 01 00 2C 00 00 00 23 0C 00 00 00 00 ......,......... 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0060: 02 00 18 00 04 05 00 00 08 88 00 03 01 88 00 02 ................ 0070: 02 88 00 01 03 88 00 04 03 00 17 00 00 F8 00 00 ................ 0080: 00 13 F0 01 00 00 00 00 00 00 00 00 00 00 00 84 ................ 0090: 00 18 00 00 10 5C 68 88 C2 D2 DC A0 A2 A4 A6 C8 .....\h......... 00A0: 00 00 00 00 00 ..... fwts-test/asf-0001/asf-0001.log000066400000000000000000000152601465205512700160120ustar00rootroot00000000000000asf asf: ASF! Alert Standard Format Table test. asf ---------------------------------------------------------- asf Test 1 of 1: ASF! Alert Standard Format Table test. asf ASF! Hardware Error Source Table asf Type: 0x00 asf Reserved: 0x00 asf Length: 0x0010 asf ASF! ASF_INFO Record: asf Min Watchdog Reset Value: 0xff asf Min Poll Wait Time: 0xff asf System ID: 0x2017 asf IANA Manufacturer ID: 0x664a0000 asf Feature Flags: 0x00 asf Reserved: 0x00 asf Reserved: 0x00 asf Reserved: 0x00 asf PASSED: Test 1, No issues found in ASF! ASF_INFO record. asf asf Type: 0x01 asf Reserved: 0x00 asf Length: 0x002c asf ASF! ASF_ALRT Record: asf Assertion Event Mask: 0x00 asf De-Assertion Event Mask: 0x00 asf Number of Alerts: 0x03 asf Array Element Length: 0x0c asf ASF! ASF_ALRT Element 0: asf Device Address: 0x00 asf Alert Command: 0x00 asf Alert Data Mask: 0x00 asf Alert Compare Value: 0x00 asf Alert Event Sensor Type: 0x00 asf Alert Event Type: 0x00 asf Alert Event Offset: 0x00 asf Alert Source Type: 0x00 asf Alert Event Severity: 0x00 asf Alert Sensor Number: 0x00 asf Alert Entity: 0x00 asf Alert Entity Instance: 0x00 asf ASF! ASF_ALRT Element 1: asf Device Address: 0x00 asf Alert Command: 0x00 asf Alert Data Mask: 0x00 asf Alert Compare Value: 0x00 asf Alert Event Sensor Type: 0x00 asf Alert Event Type: 0x00 asf Alert Event Offset: 0x00 asf Alert Source Type: 0x00 asf Alert Event Severity: 0x00 asf Alert Sensor Number: 0x00 asf Alert Entity: 0x00 asf Alert Entity Instance: 0x00 asf ASF! ASF_ALRT Element 2: asf Device Address: 0x00 asf Alert Command: 0x00 asf Alert Data Mask: 0x00 asf Alert Compare Value: 0x00 asf Alert Event Sensor Type: 0x00 asf Alert Event Type: 0x00 asf Alert Event Offset: 0x00 asf Alert Source Type: 0x00 asf Alert Event Severity: 0x00 asf Alert Sensor Number: 0x00 asf Alert Entity: 0x00 asf Alert Entity Instance: 0x00 asf PASSED: Test 1, No issues found in ASF! ASF_ALRT record. asf asf Type: 0x02 asf Reserved: 0x00 asf Length: 0x0018 asf ASF! ASF_RCTL Record: asf Number of Controls: 0x04 asf Array Element Length: 0x04 asf Reserved: 0x0004 asf ASF! ASF_RCTL Element 0: asf Control Function: 0x00 asf Control Device Address: 0x88 asf Control Command: 0x00 asf Control Value: 0x03 asf ASF! ASF_RCTL Element 1: asf Control Function: 0x01 asf Control Device Address: 0x88 asf Control Command: 0x00 asf Control Value: 0x02 asf ASF! ASF_RCTL Element 2: asf Control Function: 0x02 asf Control Device Address: 0x88 asf Control Command: 0x00 asf Control Value: 0x01 asf ASF! ASF_RCTL Element 3: asf Control Function: 0x03 asf Control Device Address: 0x88 asf Control Command: 0x00 asf Control Value: 0x04 asf PASSED: Test 1, No issues found in ASF! ASF_RCTL record. asf asf Type: 0x03 asf Reserved: 0x00 asf Length: 0x0017 asf ASF! ASF_RMCP Record: asf Remote Control Cap.: 0x00 0xf8 0x00 0x00 0x00 0x13 0xf0 asf Boot Opt. Completion Code:0x01 asf IANA Enterprise ID: 0x00000000 asf Special Command: 0x00 asf Special Command Parameter:0x0000 asf Boot Options: 0x00 0x00 asf OEM Parameters: 0x0000 asf PASSED: Test 1, No issues found in ASF! ASF_RMCP record. asf asf Type: 0x84 asf Reserved: 0x00 asf Length: 0x0016 asf ASF! ASF_ADDR Record: asf SEEPROM Address: 0x00 asf Number of Devices: 0x10 asf Fixed SMBus Address 0x5c asf Fixed SMBus Address 0x68 asf Fixed SMBus Address 0x88 asf Fixed SMBus Address 0xc2 asf Fixed SMBus Address 0xd2 asf Fixed SMBus Address 0xdc asf Fixed SMBus Address 0xa0 asf Fixed SMBus Address 0xa2 asf Fixed SMBus Address 0xa4 asf Fixed SMBus Address 0xa6 asf Fixed SMBus Address 0xc8 asf Fixed SMBus Address 0x00 asf Fixed SMBus Address 0x00 asf Fixed SMBus Address 0x00 asf Fixed SMBus Address 0x00 asf Fixed SMBus Address 0x00 asf PASSED: Test 1, No issues found in ASF! ASF_ADDR record. asf asf asf PASSED: Test 1, No issues found in ASF! table. asf asf ========================================================== asf 6 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 asf info only. asf ========================================================== fwts-test/asf-0001/asf-0002.log000066400000000000000000000120751465205512700160140ustar00rootroot00000000000000asf asf: ASF! Alert Standard Format Table test. asf ---------------------------------------------------------- asf Test 1 of 1: ASF! Alert Standard Format Table test. asf ASF! Hardware Error Source Table asf Type: 0x00 asf Reserved: 0x00 asf Length: 0x0010 asf ASF! ASF_INFO Record: asf Min Watchdog Reset Value: 0x00 asf Min Poll Wait Time: 0x00 asf System ID: 0x2017 asf IANA Manufacturer ID: 0x664a0000 asf Feature Flags: 0xff asf Reserved: 0x10 asf Reserved: 0x20 asf Reserved: 0x40 asf FAILED [HIGH] ASF!InfoMinPollWaitTimeInvalid: Test 1, ASF! asf ASF_INFO Minimum Poll Wait Time is 0x0 and must be in the asf range 0x02..0xff asf FAILED [HIGH] ASF!ReservedBitsNonZero: Test 1, ASF! asf ASF_INFO Feature Flags Bits [7..1] must be zero, got 0xff asf instead asf FAILED [MEDIUM] ASF!ReservedNonZero: Test 1, ASF! ASF_INFO asf Reserved1 field must be zero, got 0x10 instead asf FAILED [MEDIUM] ASF!ReservedNonZero: Test 1, ASF! ASF_INFO asf Reserved2 field must be zero, got 0x20 instead asf FAILED [MEDIUM] ASF!ReservedNonZero: Test 1, ASF! ASF_INFO asf Reserved3 field must be zero, got 0x40 instead asf asf Type: 0x01 asf Reserved: 0x00 asf Length: 0x002c asf ASF! ASF_ALRT Record: asf Assertion Event Mask: 0x00 asf De-Assertion Event Mask: 0x00 asf Number of Alerts: 0x23 asf Array Element Length: 0x0c asf FAILED [HIGH] ASF!AlrtNumOfAlertsInvalid: Test 1, ASF! asf ASF_ALRT Number of Alerts field is 0x23 and must be in the asf range 0x01..0x08 asf asf Type: 0x02 asf Reserved: 0x00 asf Length: 0x0018 asf ASF! ASF_RCTL Record: asf Number of Controls: 0x04 asf Array Element Length: 0x05 asf Reserved: 0x0005 asf FAILED [HIGH] ASF!RctlArrayElementLengthInvalid: Test 1, asf ASF! ASF_RCTL Array Element Length is 0x5 and must be asf instead 0x4 asf ASF! ASF_RCTL Element 0: asf Control Function: 0x08 asf Control Device Address: 0x88 asf Control Command: 0x00 asf Control Value: 0x03 asf FAILED [HIGH] ASF!RctlCtrlFuncInvalid: Test 1, ASF! asf ASF_RCTL Control Function is 0x8 and must be in the range asf 0x00..0x03 asf ASF! ASF_RCTL Element 1: asf Control Function: 0x01 asf Control Device Address: 0x88 asf Control Command: 0x00 asf Control Value: 0x02 asf ASF! ASF_RCTL Element 2: asf Control Function: 0x02 asf Control Device Address: 0x88 asf Control Command: 0x00 asf Control Value: 0x01 asf ASF! ASF_RCTL Element 3: asf Control Function: 0x03 asf Control Device Address: 0x88 asf Control Command: 0x00 asf Control Value: 0x04 asf asf Type: 0x03 asf Reserved: 0x00 asf Length: 0x0017 asf ASF! ASF_RMCP Record: asf Remote Control Cap.: 0x00 0xf8 0x00 0x00 0x00 0x13 0xf0 asf Boot Opt. Completion Code:0x01 asf IANA Enterprise ID: 0x00000000 asf Special Command: 0x00 asf Special Command Parameter:0x0000 asf Boot Options: 0x00 0x00 asf OEM Parameters: 0x0000 asf PASSED: Test 1, No issues found in ASF! ASF_RMCP record. asf asf Type: 0x84 asf Reserved: 0x00 asf Length: 0x0018 asf FAILED [HIGH] ASF!InfoRecordLengthTooLong: Test 1, ASF! asf Information Record Reserved length is 24 and this is too asf long for the size given by the ASF! table. Expected at asf most 22 bytes. asf asf asf ========================================================== asf 1 passed, 9 failed, 0 warning, 0 aborted, 0 skipped, 0 asf info only. asf ========================================================== fwts-test/asf-0001/test-0001.sh000077500000000000000000000007721465205512700160560ustar00rootroot00000000000000#!/bin/bash # TEST="Test apci table against ASF!" NAME=test-0001.sh TMPLOG=$TMP/asf.log.$$ $FWTS --show-tests | grep ASF > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/asf-0001/acpidump-0001.log asf - | cut -c7- | grep "^asf" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/asf-0001/asf-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/asf-0001/test-0002.sh000077500000000000000000000007741465205512700160610ustar00rootroot00000000000000#!/bin/bash # TEST="Test apci against invalid ASF!" NAME=test-0002.sh TMPLOG=$TMP/asf.log.$$ $FWTS --show-tests | grep ASF > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/asf-0001/acpidump-0002.log asf - | cut -c7- | grep "^asf" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/asf-0001/asf-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/aspt-0001/000077500000000000000000000000001465205512700143525ustar00rootroot00000000000000fwts-test/aspt-0001/acpidump-0001.log000066400000000000000000000034651465205512700172450ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... ASPT @ 0x00000000 0000: 41 53 50 54 34 00 00 00 04 8b 41 43 52 53 59 53 ASPT4.....ACRSYS 0010: 41 43 52 50 52 44 43 54 01 00 00 00 31 30 32 35 ACRPRDCT....1025 0020: 13 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 fwts-test/aspt-0001/acpidump-0002.log000066400000000000000000000034651465205512700172460ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... ASPT @ 0x00000000 0000: 41 53 50 54 34 00 00 00 04 8b 41 43 52 53 59 53 ASPT4.....ACRSYS 0010: 41 43 52 50 52 44 43 54 01 00 00 00 31 30 32 35 ACRPRDCT....1025 0020: 13 00 00 01 20 00 00 f0 00 00 00 f0 10 00 00 e0 ................ 0030: 00 00 00 e0 fwts-test/aspt-0001/aspt-0001.log000066400000000000000000000013311465205512700164000ustar00rootroot00000000000000aspt aspt: ASPT Table test. aspt ---------------------------------------------------------- aspt Test 1 of 1: ASPT Table test. aspt ASPT Table: aspt SPTT Start Address: 0x00000000 aspt SPTT End Address: 0x00000000 aspt AMRT Start Address: 0x00000000 aspt AMRT End Address: 0x00000000 aspt aspt PASSED: Test 1, No issues found in ASPT table. aspt aspt ========================================================== aspt 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 aspt info only. aspt ========================================================== fwts-test/aspt-0001/aspt-0002.log000066400000000000000000000016401465205512700164040ustar00rootroot00000000000000aspt aspt: ASPT Table test. aspt ---------------------------------------------------------- aspt Test 1 of 1: ASPT Table test. aspt ASPT Table: aspt SPTT Start Address: 0xf0000020 aspt SPTT End Address: 0xf0000000 aspt AMRT Start Address: 0xe0000010 aspt AMRT End Address: 0xe0000000 aspt aspt FAILED [HIGH] ASPTSpttEndError: Test 1, ASPT SPTT end aspt address is less than the SPTT start address. aspt FAILED [HIGH] ASPTAmrtEndError: Test 1, ASPT AMRT end aspt address is less than the AMRT start address. aspt aspt ========================================================== aspt 0 passed, 2 failed, 0 warning, 0 aborted, 0 skipped, 0 aspt info only. aspt ========================================================== fwts-test/aspt-0001/test-0001.sh000077500000000000000000000010011465205512700162360ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against ASPT" NAME=test-0001.sh TMPLOG=$TMP/aspt.log.$$ $FWTS --show-tests | grep ASPT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/aspt-0001/acpidump-0001.log aspt - | cut -c7- | grep "^aspt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/aspt-0001/aspt-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/aspt-0001/test-0002.sh000077500000000000000000000010111465205512700162400ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid ASPT" NAME=test-0001.sh TMPLOG=$TMP/aspt.log.$$ $FWTS --show-tests | grep ASPT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/aspt-0001/acpidump-0002.log aspt - | cut -c7- | grep "^aspt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/aspt-0001/aspt-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/bert-0001/000077500000000000000000000000001465205512700143375ustar00rootroot00000000000000fwts-test/bert-0001/acpidump-0001.log000066400000000000000000000034341465205512700172260ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... BERT @ 0x00000000 0000: 42 45 52 54 30 00 00 00 01 06 50 54 4c 20 20 20 BERT0.....PTL 0010: 57 48 45 41 50 54 4c 20 00 00 04 06 50 54 4c 20 WHEAPTL ....PTL 0020: 01 00 00 00 00 04 00 00 00 60 e9 af 00 00 00 00 .........`...... fwts-test/bert-0001/acpidump-0002.log000066400000000000000000000034341465205512700172270ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... BERT @ 0x00000000 0000: 42 45 52 54 30 00 00 00 01 06 50 54 4c 20 20 20 BERT0.....PTL 0010: 57 48 45 41 50 54 4c 20 00 00 04 06 50 54 4c 20 WHEAPTL ....PTL 0020: 01 00 00 00 00 00 00 00 00 60 e9 af 00 00 00 00 .........`...... fwts-test/bert-0001/bert-0001.log000066400000000000000000000015711465205512700163600ustar00rootroot00000000000000bert bert: BERT Boot Error Record Table test. bert ---------------------------------------------------------- bert Test 1 of 1: BERT Boot Error Record Table test. bert Boot Error Record Table: bert Error Region Length 0x00000400 bert Error Region 0x00000000afe96000 bert bert ACPI table loaded from file so fwts will not memory map bert BERT boot error region 0x00000000afe96000, skipping boot bert error region sanity checks. bert PASSED: Test 1, No issues found in BERT table. bert bert ========================================================== bert 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 bert info only. bert ========================================================== fwts-test/bert-0001/bert-0002.log000066400000000000000000000014671465205512700163650ustar00rootroot00000000000000bert bert: BERT Boot Error Record Table test. bert ---------------------------------------------------------- bert Test 1 of 1: BERT Boot Error Record Table test. bert Boot Error Record Table: bert Error Region Length 0x00000000 bert Error Region 0x00000000afe96000 bert bert FAILED [HIGH] BERTBootErrorRegionDataLength: Test 1, BERT bert Boot Error Region Length 0 is smaller than the minimum bert allowed size of 20 bytes bert bert ========================================================== bert 0 passed, 1 failed, 0 warning, 0 aborted, 0 skipped, 0 bert info only. bert ========================================================== fwts-test/bert-0001/test-0001.sh000077500000000000000000000010011465205512700162230ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against BERT" NAME=test-0001.sh TMPLOG=$TMP/bert.log.$$ $FWTS --show-tests | grep BERT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/bert-0001/acpidump-0001.log bert - | cut -c7- | grep "^bert" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/bert-0001/bert-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/bert-0001/test-0002.sh000077500000000000000000000010111465205512700162250ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid BERT" NAME=test-0001.sh TMPLOG=$TMP/bert.log.$$ $FWTS --show-tests | grep BERT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/bert-0001/acpidump-0002.log bert - | cut -c7- | grep "^bert" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/bert-0001/bert-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/bgrt-0001/000077500000000000000000000000001465205512700143415ustar00rootroot00000000000000fwts-test/bgrt-0001/acpidump-0001.log000066400000000000000000000036541465205512700172340ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... BGRT @ 0x00000000 0000: 42 47 52 54 3c 00 00 00 00 a9 41 4c 41 53 4b 41 BGRT<.....ALASKA 0010: 41 20 4d 20 49 00 00 00 09 20 07 01 41 4d 49 20 A M I.... ..AMI 0020: 13 00 01 00 01 00 00 00 01 00 00 00 18 70 5f 03 .............p_. 0030: 00 00 00 00 00 00 00 00 00 00 00 00 ............ fwts-test/bgrt-0001/acpidump-0002.log000066400000000000000000000036541465205512700172350ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... BGRT @ 0x00000000 0000: 42 47 52 54 3c 00 00 00 00 a9 41 4c 41 53 4b 41 BGRT<.....ALASKA 0010: 41 20 4d 20 49 00 00 00 09 20 07 01 41 4d 49 20 A M I.... ..AMI 0020: 13 00 01 00 02 00 ff 01 00 00 00 00 18 70 5f 03 .............p_. 0030: 00 00 00 00 00 00 00 00 00 00 00 00 ............ fwts-test/bgrt-0001/bgrt-0001.log000066400000000000000000000016131465205512700163610ustar00rootroot00000000000000bgrt bgrt: BGRT Boot Graphics Resource Table test. bgrt ---------------------------------------------------------- bgrt Test 1 of 1: BGRT Boot Graphics Resource Table test. bgrt BGRT Boot Graphics Resource Table: bgrt Version: 0x0001 bgrt Status: 0x00 bgrt Image Type: 0x00 bgrt Image Memory Address: 0x035f701800000001 bgrt Image Offset X: 0x00000000 bgrt Image Offset Y: 0x00000000 bgrt PASSED: Test 1, No issues found in BGRT table. bgrt bgrt ========================================================== bgrt 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 bgrt info only. bgrt ========================================================== fwts-test/bgrt-0001/bgrt-0002.log000066400000000000000000000023121465205512700163570ustar00rootroot00000000000000bgrt bgrt: BGRT Boot Graphics Resource Table test. bgrt ---------------------------------------------------------- bgrt Test 1 of 1: BGRT Boot Graphics Resource Table test. bgrt BGRT Boot Graphics Resource Table: bgrt Version: 0x0002 bgrt Status: 0xff bgrt Image Type: 0x01 bgrt Image Memory Address: 0x035f701800000000 bgrt Image Offset X: 0x00000000 bgrt Image Offset Y: 0x00000000 bgrt FAILED [MEDIUM] BGRTBadFieldValue: Test 1, BGRT Version bgrt field must be 1, got 2 instead. bgrt FAILED [HIGH] BGRTReservedBitsNonZero: Test 1, BGRT BGRT bgrt Status Bits [7..3] must be zero, got 0xff instead bgrt FAILED [MEDIUM] BGRTBadFieldValue: Test 1, BGRT Image Type bgrt field must be 0, got 1 instead. bgrt bgrt ========================================================== bgrt 0 passed, 3 failed, 0 warning, 0 aborted, 0 skipped, 0 bgrt info only. bgrt ========================================================== fwts-test/bgrt-0001/test-0001.sh000077500000000000000000000010011465205512700162250ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against BGRT" NAME=test-0001.sh TMPLOG=$TMP/bgrt.log.$$ $FWTS --show-tests | grep bgrt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/bgrt-0001/acpidump-0001.log bgrt - | cut -c7- | grep "^bgrt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/bgrt-0001/bgrt-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/bgrt-0001/test-0002.sh000077500000000000000000000010111465205512700162270ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid BGRT" NAME=test-0001.sh TMPLOG=$TMP/bgrt.log.$$ $FWTS --show-tests | grep bgrt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/bgrt-0001/acpidump-0002.log bgrt - | cut -c7- | grep "^bgrt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/bgrt-0001/bgrt-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/boot-0001/000077500000000000000000000000001465205512700143465ustar00rootroot00000000000000fwts-test/boot-0001/acpidump-0001.log000066400000000000000000000034241465205512700172340ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... BOOT @ 0x00000000 0000: 42 4f 4f 54 28 00 00 00 01 5a 41 43 52 53 59 53 BOOT(....ZACRSYS 0010: 41 43 52 50 52 44 43 54 01 00 00 00 31 30 32 35 ACRPRDCT....1025 0020: 13 00 00 01 44 00 00 00 ....D... fwts-test/boot-0001/acpidump-0002.log000066400000000000000000000034221465205512700172330ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... BOOT @ 0x00000000 0000: 42 4f 4f 54 26 00 00 00 01 5a 41 43 52 53 59 53 BOOT(....ZACRSYS 0010: 41 43 52 50 52 44 43 54 01 00 00 00 31 30 32 35 ACRPRDCT....1025 0020: 13 00 00 01 44 00 ....D. fwts-test/boot-0001/boot-0001-efi.log000066400000000000000000000007101465205512700171310ustar00rootroot00000000000000boot boot: BOOT Table test. boot ---------------------------------------------------------- boot ACPI BOOT table is deprecated on UEFI firmware, skipping boot test boot ========================================================== boot 0 passed, 0 failed, 0 warning, 0 aborted, 1 skipped, 0 boot info only. boot ========================================================== fwts-test/boot-0001/boot-0001.log000066400000000000000000000015121465205512700163710ustar00rootroot00000000000000boot boot: BOOT Table test. boot ---------------------------------------------------------- boot Test 1 of 1: BOOT Table test. boot BOOT Table: boot CMOS Index: 0x44 boot Reserved: 0x00 boot Reserved: 0x00 boot Reserved: 0x00 boot boot ACPI table loaded from file so fwts will skip the read of boot the CMOS boot register boot PASSED: Test 1, No issues found in BOOT table. boot boot ========================================================== boot 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 boot info only. boot ========================================================== fwts-test/boot-0001/boot-0002-efi.log000066400000000000000000000007101465205512700171320ustar00rootroot00000000000000boot boot: BOOT Table test. boot ---------------------------------------------------------- boot ACPI BOOT table is deprecated on UEFI firmware, skipping boot test boot ========================================================== boot 0 passed, 0 failed, 0 warning, 0 aborted, 1 skipped, 0 boot info only. boot ========================================================== fwts-test/boot-0001/boot-0002.log000066400000000000000000000010541465205512700163730ustar00rootroot00000000000000boot boot: BOOT Table test. boot ---------------------------------------------------------- boot Test 1 of 1: BOOT Table test. boot FAILED [HIGH] BOOTTooShort: Test 1, BOOT table too short, boot expecting 40 bytes, instead got 38 bytes boot boot ========================================================== boot 0 passed, 1 failed, 0 warning, 0 aborted, 0 skipped, 0 boot info only. boot ========================================================== fwts-test/boot-0001/test-0001.sh000077500000000000000000000011301465205512700162350ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against BOOT" NAME=test-0001.sh TMPLOG=$TMP/boot.log.$$ $FWTS --show-tests | grep BOOT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi if [ -d /sys/firmware/efi ]; then FILE=boot-0001-efi.log else FILE=boot-0001.log fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/boot-0001/acpidump-0001.log boot - | cut -c7- | grep "^boot" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/boot-0001/$FILE >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/boot-0001/test-0002.sh000077500000000000000000000011461465205512700162450ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid BOOT" NAME=test-0001.sh TMPLOG=$TMP/boot.log.$$ $FWTS --show-tests | grep BOOT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi if [ -d /sys/firmware/efi ]; then FILE=boot-0002-efi.log else FILE=boot-0002.log fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/boot-0001/acpidump-0002.log boot - | cut -c7- | grep "^boot" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/boot-0001/$FILE >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/ccel-0001/000077500000000000000000000000001465205512700143115ustar00rootroot00000000000000fwts-test/ccel-0001/acpidump-0001.log000066400000000000000000000035361465205512700172030ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... CCEL @ 0x00000000 0000: 43 43 45 4C 38 00 00 00 04 1C 49 4E 54 45 4C 20 CCEL8.....INTEL 0010: 54 65 6D 70 6C 61 74 65 00 00 00 00 49 4E 54 4C Template....INTL 0020: 30 09 21 20 01 00 00 00 EF CD AB 78 56 34 12 00 0.! .......xV4.. 0030: 78 56 34 12 EF CD AB 00 xV4..... fwts-test/ccel-0001/acpidump-0002.log000066400000000000000000000035361465205512700172040ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... CCEL @ 0x00000000 0000: 43 43 45 4C 38 00 00 00 04 1C 49 4E 54 45 4C 20 CCEL8.....INTEL 0010: 54 65 6D 70 6C 61 74 65 00 00 00 00 49 4E 54 4C Template....INTL 0020: 30 09 21 20 05 00 FF FF EF CD AB 78 56 34 12 00 0.! .......xV4.. 0030: 78 56 34 12 EF CD AB 00 xV4..... fwts-test/ccel-0001/ccel-0001.log000066400000000000000000000015441465205512700163040ustar00rootroot00000000000000ccel ccel: CCEL CC Event Log ACPI Table test. ccel ---------------------------------------------------------- ccel Test 1 of 1: Validate CCEL table. ccel CC Event Log ACPI Table: ccel CC Type: 0x01 ccel CC Subtype: 0x00 ccel Reserved: 0x0000 ccel Log Area Minimum Length(LAML): 0x0012345678abcdef ccel Log Area Start Address(LASA): 0x00abcdef12345678 ccel ccel PASSED: Test 1, No issues found in CCEL table. ccel ccel ========================================================== ccel 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 ccel info only. ccel ========================================================== fwts-test/ccel-0001/ccel-0002.log000066400000000000000000000021151465205512700163000ustar00rootroot00000000000000ccel ccel: CCEL CC Event Log ACPI Table test. ccel ---------------------------------------------------------- ccel Test 1 of 1: Validate CCEL table. ccel CC Event Log ACPI Table: ccel CC Type: 0x05 ccel FAILED [HIGH] CCELBadCCType: Test 1, CCEL CC types must ccel not have the reaserved value 0, 0x03..0xff, got 0x05 ccel instead. ccel CC Subtype: 0x00 ccel Reserved: 0xffff ccel FAILED [MEDIUM] CCELReservedNonZero: Test 1, CCEL Reserved ccel field must be zero, got 0xffff instead ccel Log Area Minimum Length(LAML): 0x0012345678abcdef ccel Log Area Start Address(LASA): 0x00abcdef12345678 ccel ccel ccel ========================================================== ccel 0 passed, 2 failed, 0 warning, 0 aborted, 0 skipped, 0 ccel info only. ccel ========================================================== fwts-test/ccel-0001/test-0001.sh000077500000000000000000000010011465205512700161750ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against CCEL" NAME=test-0001.sh TMPLOG=$TMP/ccel.log.$$ $FWTS --show-tests | grep ccel > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/ccel-0001/acpidump-0001.log ccel - | cut -c7- | grep "^ccel" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/ccel-0001/ccel-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/ccel-0001/test-0002.sh000077500000000000000000000010011465205512700161760ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against CCEL" NAME=test-0002.sh TMPLOG=$TMP/ccel.log.$$ $FWTS --show-tests | grep ccel > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/ccel-0001/acpidump-0002.log ccel - | cut -c7- | grep "^ccel" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/ccel-0001/ccel-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/cedt-0001/000077500000000000000000000000001465205512700143225ustar00rootroot00000000000000fwts-test/cedt-0001/acpidump-0001.log000066400000000000000000000044361465205512700172140ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... CEDT @ 0x0000000000000000 0000: 43 45 44 54 94 00 00 00 01 87 49 4e 54 45 4c 20 CEDT......INTEL 0010: 54 45 4d 50 4c 41 54 45 00 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 17 12 21 20 00 00 20 00 00 5e ba 00 00 00 00 00 ..! .. ..^...... 0030: 00 00 00 00 00 10 00 00 00 00 00 00 00 20 00 00 ............. .. 0040: 00 00 00 00 01 00 28 00 00 00 00 00 00 00 00 00 ......(......... 0050: 00 01 00 00 00 00 00 00 00 01 00 00 01 00 00 00 ................ 0060: 03 00 00 00 06 00 01 00 00 5e ba 00 02 00 18 00 .....^...^...... 0070: 00 00 03 02 01 02 03 04 05 06 07 08 01 02 03 04 ................ 0080: 05 06 07 08 03 00 10 00 01 09 00 00 00 00 00 00 ................ 0090: 01 00 00 00 .... fwts-test/cedt-0001/acpidump-0002.log000066400000000000000000000051061465205512700172100ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... CEDT @ 0x0000000000000000 0000: 43 45 44 54 d4 00 00 00 01 87 49 4e 54 45 4c 20 CEDT......INTEL 0010: 54 45 4d 50 4c 41 54 45 00 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 17 12 21 20 00 00 20 00 00 5e ba 00 00 00 00 00 ..! .. ..^...... 0030: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 ............. .. 0040: 00 00 00 00 00 00 20 00 00 5e ba 00 01 00 00 00 ..! .. ..^...... 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 ............. .. 0060: 00 00 00 00 00 00 20 00 00 5e ba 00 02 00 00 00 ..! .. ..^...... 0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 ............. .. 0080: 00 00 00 00 01 00 28 00 01 00 00 00 00 00 00 00 ......(......... 0090: 00 01 00 00 00 00 00 00 00 01 00 00 00 00 02 00 ................ 00a0: 03 00 00 00 06 01 01 00 00 5e ba 00 02 00 18 00 .....^...^...... 00b0: 01 00 03 02 01 02 03 04 05 06 07 08 01 02 03 04 ................ 00c0: 05 06 07 08 03 00 10 00 00 00 09 01 02 00 00 00 ................ 00d0: 01 00 00 00 .... fwts-test/cedt-0001/cedt-0001.log000066400000000000000000000060251465205512700163250ustar00rootroot00000000000000cedt cedt: CEDT CXL Early Discovery Table test cedt ---------------------------------------------------------- cedt Test 1 of 1: Validate CEDT table. cedt CEDT CXL Early Discovery Table: cedt CXL Host Bridge Structure (CHBS): cedt Type: 0x00 cedt Reserved: 0x00 cedt Record Length: 0x0020 cedt UID: 0x00ba5e00 cedt CXL Version: 0x00000000 cedt Reserved: 0x00000000 cedt Base: 0x0000000000001000 cedt Length: 0x0000000000002000 cedt cedt CXL Fixed Memory Window Structure (CFMWS): cedt Type: 0x01 cedt Reserved: 0x00 cedt Record Length: 0x0028 cedt Reserved: 0x00000000 cedt Base HPA: 0x0000010000000000 cedt Window Size: 0x0000010000000000 cedt ENIW: 0x01 cedt Interleave Arithmetic: 0x00 cedt Reserved: 0x0000 cedt HBIG: 0x00000003 cedt Window Restrictions: 0x0006 cedt QTG ID: 0x0001 cedt Interleave Target List: cedt 00 5E BA 00 cedt cedt CXL XOR Interleave Math Structure (CXIMS): cedt Type: 0x02 cedt Reserved: 0x00 cedt Record Length: 0x0018 cedt Reserved: 0x0000 cedt HBIG: 0x03 cedt Number of Bitmap Entries(NIB): 0x02 cedt XORMAP List 0x0807060504030201 cedt XORMAP List 0x0807060504030201 cedt cedt RCEC Downstream Port Association Structure (RDPAS): cedt Type: 0x03 cedt Reserved: 0x00 cedt Record Length: 0x0010 cedt RCEC Segment Number 0x0901 cedt RCEC BDF: 0x0000 cedt Protocol Type: 0x00 cedt Base Address 0x0000000001000000 cedt cedt PASSED: Test 1, No issues found in CEDT table. cedt cedt ========================================================== cedt 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 cedt info only. cedt ========================================================== fwts-test/cedt-0001/cedt-0002.log000066400000000000000000000123731465205512700163310ustar00rootroot00000000000000cedt cedt: CEDT CXL Early Discovery Table test cedt ---------------------------------------------------------- cedt Test 1 of 1: Validate CEDT table. cedt CEDT CXL Early Discovery Table: cedt CXL Host Bridge Structure (CHBS): cedt Type: 0x00 cedt Reserved: 0x00 cedt Record Length: 0x0020 cedt UID: 0x00ba5e00 cedt CXL Version: 0x00000000 cedt Reserved: 0x00000001 cedt Base: 0x0000000000000000 cedt Length: 0x0000000000010000 cedt FAILED [MEDIUM] CEDTReservedNonZero: Test 1, CEDT Reserved cedt field must be zero, got 0x00000001 instead cedt FAILED [HIGH] CEDTBadCHBSLength: Test 1, CEDT CHBS Length cedt must be 0x2000, got 0x10000 instead cedt cedt CXL Host Bridge Structure (CHBS): cedt Type: 0x00 cedt Reserved: 0x00 cedt Record Length: 0x0020 cedt UID: 0x00ba5e00 cedt CXL Version: 0x00000001 cedt Reserved: 0x00000000 cedt Base: 0x0000000000000000 cedt Length: 0x0000000000002000 cedt FAILED [HIGH] CEDTBadCHBSLength: Test 1, CEDT CHBS Length cedt must be 0x10000, got 0x2000 instead cedt cedt CXL Host Bridge Structure (CHBS): cedt Type: 0x00 cedt Reserved: 0x00 cedt Record Length: 0x0020 cedt UID: 0x00ba5e00 cedt CXL Version: 0x00000002 cedt Reserved: 0x00000000 cedt Base: 0x0000000000000000 cedt Length: 0x0000000000002000 cedt FAILED [HIGH] CEDTBadCXLVersion: Test 1, CXL Version must cedt have the value with 0 or 1, got 0x2 instead cedt cedt CXL Fixed Memory Window Structure (CFMWS): cedt Type: 0x01 cedt Reserved: 0x00 cedt Record Length: 0x0028 cedt Reserved: 0x00000001 cedt Base HPA: 0x0000010000000000 cedt Window Size: 0x0000010000000000 cedt ENIW: 0x00 cedt Interleave Arithmetic: 0x00 cedt Reserved: 0x0002 cedt HBIG: 0x00000003 cedt Window Restrictions: 0x0106 cedt QTG ID: 0x0001 cedt Interleave Target List: cedt FAILED [MEDIUM] CEDTReservedNonZero: Test 1, CEDT Reserved cedt field must be zero, got 0x00000001 instead cedt FAILED [MEDIUM] CEDTReservedNonZero: Test 1, CEDT Reserved cedt field must be zero, got 0x0002 instead cedt FAILED [HIGH] CEDTReservedBitsNonZero: Test 1, CEDT Window cedt Restrictions Bits [15..5] must be zero, got 0x0106 instead cedt cedt CXL XOR Interleave Math Structure (CXIMS): cedt Type: 0x02 cedt Reserved: 0x00 cedt Record Length: 0x0018 cedt Reserved: 0x0001 cedt HBIG: 0x03 cedt Number of Bitmap Entries(NIB): 0x02 cedt XORMAP List 0x0807060504030201 cedt XORMAP List 0x0807060504030201 cedt FAILED [MEDIUM] CEDTReservedNonZero: Test 1, CEDT Reserved cedt field must be zero, got 0x0001 instead cedt cedt RCEC Downstream Port Association Structure (RDPAS): cedt Type: 0x03 cedt Reserved: 0x00 cedt Record Length: 0x0010 cedt RCEC Segment Number 0x0000 cedt RCEC BDF: 0x0109 cedt Protocol Type: 0x02 cedt Base Address 0x0000000001000000 cedt FAILED [HIGH] CEDTBadProtocolType: Test 1, CEDT CFMWS cedt protocol type must have the value with 0 or 1, got 0x02 cedt instead cedt cedt cedt ========================================================== cedt 0 passed, 9 failed, 0 warning, 0 aborted, 0 skipped, 0 cedt info only. cedt ========================================================== fwts-test/cedt-0001/test-0001.sh000077500000000000000000000010011465205512700162060ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against CEDT" NAME=test-0001.sh TMPLOG=$TMP/cedt.log.$$ $FWTS --show-tests | grep cedt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/cedt-0001/acpidump-0001.log cedt - | cut -c7- | grep "^cedt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/cedt-0001/cedt-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/cedt-0001/test-0002.sh000077500000000000000000000010011465205512700162070ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against CEDT" NAME=test-0001.sh TMPLOG=$TMP/cedt.log.$$ $FWTS --show-tests | grep cedt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/cedt-0001/acpidump-0002.log cedt - | cut -c7- | grep "^cedt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/cedt-0001/cedt-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/checksum-0001/000077500000000000000000000000001465205512700152055ustar00rootroot00000000000000fwts-test/checksum-0001/acpidump-0001.log000066400000000000000000004054211465205512700200760ustar00rootroot00000000000000DSDT @ 0xbf6d9b6a 0000: 44 53 44 54 f4 5f 00 00 02 11 54 4f 53 43 50 4c DSDT._....TOSCPL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 49 4e 54 4c CRESTLNE....INTL 0020: 08 06 06 20 08 5a 30 30 30 01 08 5a 30 30 31 0a ... .Z000..Z001. 0030: 02 08 5a 30 30 32 0a 04 08 5a 30 30 33 0a 08 08 ..Z002...Z003... 0040: 5a 30 30 34 00 08 5a 30 30 35 0a 0f 08 5a 30 30 Z004..Z005...Z00 0050: 36 0a 0d 08 5a 30 30 37 0a 0b 08 5a 30 30 38 0a 6...Z007...Z008. 0060: 09 08 45 43 44 59 0a 07 5b 01 4d 55 54 58 00 5b ..ECDY..[.MUTX.[ 0070: 80 50 52 54 30 01 0a 80 0a 04 5b 81 0b 50 52 54 .PRT0.....[..PRT 0080: 30 13 50 38 30 48 20 14 4e 07 50 38 58 48 0a a0 0.P80H .N.P8XH.. 0090: 17 93 68 00 70 7d 7b 50 38 30 44 0c 00 ff ff ff ..h.p}{P80D..... 00a0: 00 69 00 50 38 30 44 a0 1b 93 68 01 70 7d 7b 50 .i.P80D...h.p}{P 00b0: 38 30 44 0c ff 00 ff ff 00 79 69 0a 08 00 00 50 80D......yi....P 00c0: 38 30 44 a0 1c 93 68 0a 02 70 7d 7b 50 38 30 44 80D...h..p}{P80D 00d0: 0c ff ff 00 ff 00 79 69 0a 10 00 00 50 38 30 44 ......yi....P80D 00e0: a0 1c 93 68 0a 03 70 7d 7b 50 38 30 44 0c ff ff ...h..p}{P80D... 00f0: ff 00 00 79 69 0a 18 00 00 50 38 30 44 70 50 38 ...yi....P80DpP8 0100: 30 44 50 38 30 48 14 0c 5f 50 49 43 01 70 68 47 0DP80H.._PIC.phG 0110: 50 49 43 14 46 06 5f 50 54 53 01 70 00 50 38 30 PIC.F._PTS.p.P80 0120: 44 50 38 58 48 00 68 a0 1e 93 68 0a 03 70 01 5c DP8XH.h...h..p.\ 0130: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0140: 30 5f 53 33 4c 44 a0 33 93 68 0a 04 70 01 5c 2f 0_S3LD.3.h..p.\/ 0150: 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 ._SB_PCI0LPCBEC0 0160: 5f 53 33 4c 44 5c 2f 04 5f 53 42 5f 50 43 49 30 _S3LD\/._SB_PCI0 0170: 4c 50 43 42 50 48 53 53 0a 0e 14 4c 1c 5f 57 41 LPCBPHSS...L._WA 0180: 4b 01 50 38 58 48 01 0a ab a0 30 91 93 68 0a 03 K.P8XH....0..h.. 0190: 93 68 0a 04 a0 25 7b 43 46 47 44 0c 00 00 00 01 .h...%{CFGD..... 01a0: 00 a0 18 90 7b 43 46 47 44 0a f0 00 93 4f 53 59 ....{CFGD....OSY 01b0: 53 0b d1 07 54 52 41 50 0a 3d a0 18 93 52 50 31 S...TRAP.=...RP1 01c0: 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 D..\/._SB_PCI0RP 01d0: 30 31 00 a0 18 93 52 50 32 44 00 86 5c 2f 03 5f 01....RP2D..\/._ 01e0: 53 42 5f 50 43 49 30 52 50 30 32 00 a0 18 93 52 SB_PCI0RP02....R 01f0: 50 33 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 P3D..\/._SB_PCI0 0200: 52 50 30 33 00 a0 18 93 52 50 34 44 00 86 5c 2f RP03....RP4D..\/ 0210: 03 5f 53 42 5f 50 43 49 30 52 50 30 34 00 a0 18 ._SB_PCI0RP04... 0220: 93 52 50 35 44 00 86 5c 2f 03 5f 53 42 5f 50 43 .RP5D..\/._SB_PC 0230: 49 30 52 50 30 35 00 a0 18 93 52 50 36 44 00 86 I0RP05....RP6D.. 0240: 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 36 00 \/._SB_PCI0RP06. 0250: a0 12 93 68 0a 03 50 38 58 48 00 0a 30 54 52 41 ...h..P8XH..0TRA 0260: 50 0a 46 a0 43 0d 93 68 0a 04 50 38 58 48 00 0a P.F.C..h..P8XH.. 0270: 40 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 @\/._SB_PCI0LPCB 0280: 50 48 53 53 0a 0f 70 57 41 4b 46 60 70 00 57 41 PHSS..pWAKF`p.WA 0290: 4b 46 7b 60 0a 05 60 a0 18 93 60 01 50 38 58 48 KF{`..`...`.P8XH 02a0: 00 0a 41 86 5c 2e 5f 53 42 5f 50 57 52 42 0a 02 ..A.\._SB_PWRB.. 02b0: a0 46 08 44 54 53 45 54 52 41 50 0a 47 a0 42 06 .F.DTSETRAP.G.B. 02c0: 90 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 .\/._SB_PCI0LPCB 02d0: 45 43 4f 4b 93 45 43 44 59 00 a0 27 92 95 44 54 ECOK.ECDY..'..DT 02e0: 53 31 44 54 53 32 70 44 54 53 31 5c 2f 05 5f 53 S1DTS2pDTS1\/._S 02f0: 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b B_PCI0LPCBEC0_SK 0300: 54 41 a1 1d 70 44 54 53 32 5c 2f 05 5f 53 42 5f TA..pDTS2\/._SB_ 0310: 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 PCI0LPCBEC0_SKTA 0320: a1 16 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 0330: 42 50 48 53 53 0a 10 5c 2e 5f 50 52 5f 52 50 50 BPHSS..\._PR_RPP 0340: 43 a4 12 04 02 00 00 14 1e 47 45 54 42 0b 77 68 C........GETB.wh 0350: 0a 08 60 77 69 0a 08 61 5b 13 6a 60 61 54 42 46 ..`wi..a[.j`aTBF 0360: 33 a4 54 42 46 33 14 42 09 50 4e 4f 54 08 a0 4a 3.TBF3.B.PNOT..J 0370: 06 4d 50 45 4e a0 31 7b 50 44 43 30 0a 08 00 86 .MPEN.1{PDC0.... 0380: 5c 2e 5f 50 52 5f 43 50 55 30 0a 80 a0 1a 7b 50 \._PR_CPU0....{P 0390: 44 43 30 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC0...[".d.\._PR 03a0: 5f 43 50 55 30 0a 81 a0 31 7b 50 44 43 31 0a 08 _CPU0...1{PDC1.. 03b0: 00 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 a0 1a ..\._PR_CPU1.... 03c0: 7b 50 44 43 31 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC1...[".d.\._ 03d0: 50 52 5f 43 50 55 31 0a 81 a1 1f 86 5c 2e 5f 50 PR_CPU1.....\._P 03e0: 52 5f 43 50 55 30 0a 80 5b 22 0a 64 86 5c 2e 5f R_CPU0..[".d.\._ 03f0: 50 52 5f 43 50 55 30 0a 81 14 17 54 52 41 50 09 PR_CPU0....TRAP. 0400: 70 68 53 4d 49 46 70 00 54 52 50 30 a4 53 4d 49 phSMIFp.TRP0.SMI 0410: 46 10 41 0f 5f 53 42 5f 14 4a 0e 5f 49 4e 49 00 F.A._SB_.J._INI. 0420: 70 0b 99 99 4d 41 52 4b a0 1c 44 54 53 45 54 52 p...MARK..DTSETR 0430: 41 50 0a 47 5e 2f 03 50 43 49 30 4c 50 43 42 50 AP.G^/.PCI0LPCBP 0440: 48 53 53 0a 10 70 0b d0 07 4f 53 59 53 a0 4a 09 HSS..p...OSYS.J. 0450: 5b 12 5f 4f 53 49 60 a0 18 5f 4f 53 49 0d 4c 69 [._OSI`.._OSI.Li 0460: 6e 75 78 00 70 01 4c 49 4e 58 70 00 45 43 44 59 nux.p.LINXp.ECDY 0470: a0 1b 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 .._OSI.Windows 2 0480: 30 30 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 001.p...OSYS.._O 0490: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04a0: 53 50 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f SP1.p...OSYS.._O 04b0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04c0: 53 50 32 00 70 0b d2 07 4f 53 59 53 a0 1b 5f 4f SP2.p...OSYS.._O 04d0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 00 SI.Windows 2006. 04e0: 70 0b d6 07 4f 53 59 53 a0 14 90 4d 50 45 4e 93 p...OSYS...MPEN. 04f0: 4f 53 59 53 0b d1 07 54 52 41 50 0a 3d 54 52 41 OSYS...TRAP.=TRA 0500: 50 0a 2b 5b 80 47 4e 56 53 00 0c bc 2d 6e bf 0b P.+[.GNVS...-n.. 0510: 00 01 5b 81 45 24 47 4e 56 53 10 4f 53 59 53 10 ..[.E$GNVS.OSYS. 0520: 53 4d 49 46 08 50 52 4d 30 08 50 52 4d 31 08 53 SMIF.PRM0.PRM1.S 0530: 43 49 46 08 50 52 4d 32 08 50 52 4d 33 08 4c 43 CIF.PRM2.PRM3.LC 0540: 4b 46 08 50 52 4d 34 08 50 52 4d 35 08 50 38 30 KF.PRM4.PRM5.P80 0550: 44 20 4c 49 44 53 08 50 57 52 53 08 44 42 47 53 D LIDS.PWRS.DBGS 0560: 08 4c 49 4e 58 08 00 08 41 43 54 31 08 41 43 54 .LINX...ACT1.ACT 0570: 54 08 50 53 56 54 08 54 43 31 56 08 54 43 32 56 T.PSVT.TC1V.TC2V 0580: 08 54 53 50 56 08 43 52 54 54 08 44 54 53 45 08 .TSPV.CRTT.DTSE. 0590: 44 54 53 31 08 44 54 53 32 08 00 40 05 41 50 49 DTS1.DTS2..@.API 05a0: 43 08 4d 50 45 4e 08 50 43 50 30 08 50 43 50 31 C.MPEN.PCP0.PCP1 05b0: 08 50 50 43 4d 08 00 28 43 4d 41 50 08 43 4d 42 .PPCM..(CMAP.CMB 05c0: 50 08 4c 50 54 50 08 46 44 43 50 08 00 30 49 47 P.LPTP.FDCP..0IG 05d0: 44 53 08 54 4c 53 54 08 43 41 44 4c 08 50 41 44 DS.TLST.CADL.PAD 05e0: 4c 08 43 53 54 45 10 4e 53 54 45 10 53 53 54 45 L.CSTE.NSTE.SSTE 05f0: 10 4e 44 49 44 08 44 49 44 31 20 44 49 44 32 20 .NDID.DID1 DID2 0600: 44 49 44 33 20 44 49 44 34 20 44 49 44 35 20 00 DID3 DID4 DID5 . 0610: 40 06 42 4c 43 53 08 42 52 54 4c 08 41 4c 53 45 @.BLCS.BRTL.ALSE 0620: 08 41 4c 41 46 08 4c 4c 4f 57 08 4c 48 49 48 08 .ALAF.LLOW.LHIH. 0630: 00 08 45 4d 41 45 08 45 4d 41 50 10 45 4d 41 4c ..EMAE.EMAP.EMAL 0640: 10 00 08 4d 45 46 45 08 00 18 54 50 4d 50 08 54 ...MEFE...TPMP.T 0650: 50 4d 45 08 00 40 04 47 54 46 30 38 47 54 46 32 PME..@.GTF08GTF2 0660: 38 49 44 45 4d 08 47 54 46 31 38 00 40 09 41 53 8IDEM.GTF18.@.AS 0670: 4c 42 20 49 42 54 54 08 49 50 41 54 08 49 54 56 LB IBTT.IPAT.ITV 0680: 46 08 49 54 56 4d 08 49 50 53 43 08 49 42 4c 43 F.ITVM.IPSC.IBLC 0690: 08 49 42 49 41 08 49 53 53 43 08 49 34 30 39 08 .IBIA.ISSC.I409. 06a0: 49 35 30 39 08 49 36 30 39 08 49 37 30 39 08 49 I509.I609.I709.I 06b0: 44 4d 4d 08 49 44 4d 53 08 49 46 31 45 08 48 56 DMM.IDMS.IF1E.HV 06c0: 43 4f 08 4e 58 44 31 20 4e 58 44 32 20 4d 41 52 CO.NXD1 NXD2 MAR 06d0: 4b 10 42 52 41 44 08 42 54 45 4e 08 56 56 45 4e K.BRAD.BTEN.VVEN 06e0: 08 42 47 54 4c 08 54 4d 45 45 01 00 07 53 43 55 .BGTL.TMEE...SCU 06f0: 30 01 53 43 55 31 01 53 43 55 32 01 53 43 55 33 0.SCU1.SCU2.SCU3 0700: 01 00 04 58 4b 53 50 01 58 4b 49 4e 01 58 4b 49 ...XKSP.XKIN.XKI 0710: 44 01 58 4b 4f 4b 01 00 04 42 47 55 31 08 42 53 D.XKOK...BGU1.BS 0720: 54 31 08 42 46 43 31 10 57 4b 4c 4e 08 57 41 4b T1.BFC1.WKLN.WAK 0730: 46 08 44 53 4d 44 08 42 41 59 53 08 48 41 50 45 F.DSMD.BAYS.HAPE 0740: 01 00 07 44 54 53 4d 01 00 07 4f 44 54 31 08 4f ...DTSM...ODT1.O 0750: 44 54 32 08 44 54 53 57 08 08 44 53 45 4e 01 08 DT2.DTSW..DSEN.. 0760: 45 43 4f 4e 00 08 47 50 49 43 00 08 43 54 59 50 ECON..GPIC..CTYP 0770: 00 08 4c 30 31 43 00 08 56 46 4e 30 00 08 56 46 ..L01C..VFN0..VF 0780: 4e 31 00 10 4a 7c 5f 47 50 45 14 46 35 5f 4c 30 N1..J|_GPE.F5_L0 0790: 31 00 72 4c 30 31 43 01 4c 30 31 43 50 38 58 48 1.rL01C.L01CP8XH 07a0: 00 01 50 38 58 48 01 4c 30 31 43 a0 48 08 90 93 ..P8XH.L01C.H... 07b0: 52 50 31 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 RP1D.\/._SB_PCI0 07c0: 52 50 30 31 48 50 53 58 5b 22 0a 64 a0 40 05 5c RP01HPSX[".d.@.\ 07d0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 /._SB_PCI0RP01PD 07e0: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 07f0: 50 30 31 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f P01PDCXp.\/._SB_ 0800: 50 43 49 30 52 50 30 31 48 50 53 58 86 5c 2f 03 PCI0RP01HPSX.\/. 0810: 5f 53 42 5f 50 43 49 30 52 50 30 31 00 a1 16 70 _SB_PCI0RP01...p 0820: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0830: 48 50 53 58 a0 48 08 90 93 52 50 32 44 00 5c 2f HPSX.H...RP2D.\/ 0840: 04 5f 53 42 5f 50 43 49 30 52 50 30 32 48 50 53 ._SB_PCI0RP02HPS 0850: 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 5f 50 X[".d.@.\/._SB_P 0860: 43 49 30 52 50 30 32 50 44 43 58 70 01 5c 2f 04 CI0RP02PDCXp.\/. 0870: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 44 43 58 _SB_PCI0RP02PDCX 0880: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 0890: 32 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 2HPSX.\/._SB_PCI 08a0: 30 52 50 30 32 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP02...p.\/._SB 08b0: 5f 50 43 49 30 52 50 30 32 48 50 53 58 a0 48 08 _PCI0RP02HPSX.H. 08c0: 90 93 52 50 33 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP3D.\/._SB_PC 08d0: 49 30 52 50 30 33 48 50 53 58 5b 22 0a 64 a0 40 I0RP03HPSX[".d.@ 08e0: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 .\/._SB_PCI0RP03 08f0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0900: 30 52 50 30 33 50 44 43 58 70 01 5c 2f 04 5f 53 0RP03PDCXp.\/._S 0910: 42 5f 50 43 49 30 52 50 30 33 48 50 53 58 86 5c B_PCI0RP03HPSX.\ 0920: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 33 00 a1 /._SB_PCI0RP03.. 0930: 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .p.\/._SB_PCI0RP 0940: 30 33 48 50 53 58 a0 48 08 90 93 52 50 34 44 00 03HPSX.H...RP4D. 0950: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 48 \/._SB_PCI0RP04H 0960: 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 PSX[".d.@.\/._SB 0970: 5f 50 43 49 30 52 50 30 34 50 44 43 58 70 01 5c _PCI0RP04PDCXp.\ 0980: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 44 /._SB_PCI0RP04PD 0990: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 09a0: 50 30 34 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 P04HPSX.\/._SB_P 09b0: 43 49 30 52 50 30 34 00 a1 16 70 01 5c 2f 04 5f CI0RP04...p.\/._ 09c0: 53 42 5f 50 43 49 30 52 50 30 34 48 50 53 58 a0 SB_PCI0RP04HPSX. 09d0: 48 08 90 93 52 50 35 44 00 5c 2f 04 5f 53 42 5f H...RP5D.\/._SB_ 09e0: 50 43 49 30 52 50 30 35 48 50 53 58 5b 22 0a 64 PCI0RP05HPSX[".d 09f0: a0 40 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .@.\/._SB_PCI0RP 0a00: 30 35 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 05PDCXp.\/._SB_P 0a10: 43 49 30 52 50 30 35 50 44 43 58 70 01 5c 2f 04 CI0RP05PDCXp.\/. 0a20: 5f 53 42 5f 50 43 49 30 52 50 30 35 48 50 53 58 _SB_PCI0RP05HPSX 0a30: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 35 .\/._SB_PCI0RP05 0a40: 00 a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ...p.\/._SB_PCI0 0a50: 52 50 30 35 48 50 53 58 a0 48 08 90 93 52 50 36 RP05HPSX.H...RP6 0a60: 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 D.\/._SB_PCI0RP0 0a70: 36 48 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 6HPSX[".d.@.\/._ 0a80: 53 42 5f 50 43 49 30 52 50 30 36 50 44 43 58 70 SB_PCI0RP06PDCXp 0a90: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 0aa0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0ab0: 30 52 50 30 36 48 50 53 58 86 5c 2f 03 5f 53 42 0RP06HPSX.\/._SB 0ac0: 5f 50 43 49 30 52 50 30 36 00 a1 16 70 01 5c 2f _PCI0RP06...p.\/ 0ad0: 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 50 53 ._SB_PCI0RP06HPS 0ae0: 58 14 42 0d 5f 4c 30 32 00 70 00 47 50 45 43 a0 X.B._L02.p.GPEC. 0af0: 4d 0a 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 M.\/._SB_PCI0LPC 0b00: 42 45 43 4f 4b a0 4e 04 93 44 54 53 57 01 a0 27 BECOK.N..DTSW..' 0b10: 92 95 44 54 53 31 44 54 53 32 70 44 54 53 31 5c ..DTS1DTS2pDTS1\ 0b20: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0b30: 30 5f 53 4b 54 41 a1 1d 70 44 54 53 32 5c 2f 05 0_SKTA..pDTS2\/. 0b40: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f _SB_PCI0LPCBEC0_ 0b50: 53 4b 54 41 a1 48 04 a0 27 92 95 4f 44 54 31 4f SKTA.H..'..ODT1O 0b60: 44 54 32 70 4f 44 54 31 5c 2f 05 5f 53 42 5f 50 DT2pODT1\/._SB_P 0b70: 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 CI0LPCBEC0_SKTA. 0b80: 1d 70 4f 44 54 32 5c 2f 05 5f 53 42 5f 50 43 49 .pODT2\/._SB_PCI 0b90: 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 16 5c 0LPCBEC0_SKTA..\ 0ba0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 50 48 /._SB_PCI0LPCBPH 0bb0: 53 53 0a 10 14 18 5f 4c 30 33 00 86 5c 2f 03 5f SS...._L03..\/._ 0bc0: 53 42 5f 50 43 49 30 55 53 42 31 0a 02 14 18 5f SB_PCI0USB1...._ 0bd0: 4c 30 34 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 L04..\/._SB_PCI0 0be0: 55 53 42 32 0a 02 14 18 5f 4c 30 35 00 86 5c 2f USB2...._L05..\/ 0bf0: 03 5f 53 42 5f 50 43 49 30 55 53 42 35 0a 02 14 ._SB_PCI0USB5... 0c00: 36 5f 4c 30 36 00 a0 27 5c 2f 04 5f 53 42 5f 50 6_L06..'\/._SB_P 0c10: 43 49 30 47 46 58 30 47 53 53 45 5c 2f 04 5f 53 CI0GFX0GSSE\/._S 0c20: 42 5f 50 43 49 30 47 46 58 30 47 53 43 49 a1 07 B_PCI0GFX0GSCI.. 0c30: 70 01 53 43 49 53 14 43 1f 5f 4c 30 39 00 a0 41 p.SCIS.C._L09..A 0c40: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0c50: 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PSPXp.\/._SB_PCI 0c60: 30 52 50 30 31 50 53 50 58 70 01 5c 2f 04 5f 53 0RP01PSPXp.\/._S 0c70: 42 5f 50 43 49 30 52 50 30 31 50 4d 53 58 86 5c B_PCI0RP01PMSX.\ 0c80: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 31 0a 02 /._SB_PCI0RP01.. 0c90: a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .A.\/._SB_PCI0RP 0ca0: 30 32 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 02PSPXp.\/._SB_P 0cb0: 43 49 30 52 50 30 32 50 53 50 58 70 01 5c 2f 04 CI0RP02PSPXp.\/. 0cc0: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 4d 53 58 _SB_PCI0RP02PMSX 0cd0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 0ce0: 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 ...A.\/._SB_PCI0 0cf0: 52 50 30 33 50 53 50 58 70 01 5c 2f 04 5f 53 42 RP03PSPXp.\/._SB 0d00: 5f 50 43 49 30 52 50 30 33 50 53 50 58 70 01 5c _PCI0RP03PSPXp.\ 0d10: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 50 4d /._SB_PCI0RP03PM 0d20: 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 SX.\/._SB_PCI0RP 0d30: 30 33 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 03...A.\/._SB_PC 0d40: 49 30 52 50 30 34 50 53 50 58 70 01 5c 2f 04 5f I0RP04PSPXp.\/._ 0d50: 53 42 5f 50 43 49 30 52 50 30 34 50 53 50 58 70 SB_PCI0RP04PSPXp 0d60: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 .\/._SB_PCI0RP04 0d70: 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 PMSX.\/._SB_PCI0 0d80: 52 50 30 34 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f RP04...A.\/._SB_ 0d90: 50 43 49 30 52 50 30 35 50 53 50 58 70 01 5c 2f PCI0RP05PSPXp.\/ 0da0: 04 5f 53 42 5f 50 43 49 30 52 50 30 35 50 53 50 ._SB_PCI0RP05PSP 0db0: 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 Xp.\/._SB_PCI0RP 0dc0: 30 35 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 05PMSX.\/._SB_PC 0dd0: 49 30 52 50 30 35 0a 02 a0 41 05 5c 2f 04 5f 53 I0RP05...A.\/._S 0de0: 42 5f 50 43 49 30 52 50 30 36 50 53 50 58 70 01 B_PCI0RP06PSPXp. 0df0: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 50 \/._SB_PCI0RP06P 0e00: 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 SPXp.\/._SB_PCI0 0e10: 52 50 30 36 50 4d 53 58 86 5c 2f 03 5f 53 42 5f RP06PMSX.\/._SB_ 0e20: 50 43 49 30 52 50 30 36 0a 02 14 18 5f 4c 30 42 PCI0RP06...._L0B 0e30: 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 50 43 49 ..\/._SB_PCI0PCI 0e40: 42 0a 02 14 18 5f 4c 30 43 00 86 5c 2f 03 5f 53 B...._L0C..\/._S 0e50: 42 5f 50 43 49 30 55 53 42 33 0a 02 14 4b 0b 5f B_PCI0USB3...K._ 0e60: 4c 30 44 00 a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 L0D..;\/._SB_PCI 0e70: 30 45 48 43 31 50 4d 45 53 70 01 5c 2f 04 5f 53 0EHC1PMESp.\/._S 0e80: 42 5f 50 43 49 30 45 48 43 31 50 4d 45 53 86 5c B_PCI0EHC1PMES.\ 0e90: 2f 03 5f 53 42 5f 50 43 49 30 45 48 43 31 0a 02 /._SB_PCI0EHC1.. 0ea0: a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 30 45 48 43 .;\/._SB_PCI0EHC 0eb0: 32 50 4d 45 53 70 01 5c 2f 04 5f 53 42 5f 50 43 2PMESp.\/._SB_PC 0ec0: 49 30 45 48 43 32 50 4d 45 53 86 5c 2f 03 5f 53 I0EHC2PMES.\/._S 0ed0: 42 5f 50 43 49 30 45 48 43 32 0a 02 a0 3b 5c 2f B_PCI0EHC2...;\/ 0ee0: 04 5f 53 42 5f 50 43 49 30 48 44 45 46 50 4d 45 ._SB_PCI0HDEFPME 0ef0: 53 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 48 44 Sp.\/._SB_PCI0HD 0f00: 45 46 50 4d 45 53 86 5c 2f 03 5f 53 42 5f 50 43 EFPMES.\/._SB_PC 0f10: 49 30 48 44 45 46 0a 02 14 18 5f 4c 30 45 00 86 I0HDEF...._L0E.. 0f20: 5c 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 34 0a \/._SB_PCI0USB4. 0f30: 02 14 1c 5f 4c 31 42 00 80 4c 50 4f 4c 4c 50 4f ..._L1B..LPOLLPO 0f40: 4c 86 5c 2e 5f 53 42 5f 4c 49 44 30 0a 80 10 46 L.\._SB_LID0...F 0f50: 0b 5f 50 52 5f 5b 83 0b 43 50 55 30 00 10 10 00 ._PR_[..CPU0.... 0f60: 00 06 5b 83 0b 43 50 55 31 01 10 10 00 00 06 14 ..[..CPU1....... 0f70: 45 09 52 50 50 43 00 a0 4d 08 93 4f 53 59 53 0b E.RPPC..M..OSYS. 0f80: d2 07 a0 42 08 7b 43 46 47 44 01 00 a0 42 04 94 ...B.{CFGD...B.. 0f90: 5e 2e 43 50 55 30 5f 50 50 43 00 74 5e 2e 43 50 ^.CPU0_PPC.t^.CP 0fa0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 0fb0: 43 50 4e 4f 54 72 5e 2e 43 50 55 30 5f 50 50 43 CPNOTr^.CPU0_PPC 0fc0: 01 5e 2e 43 50 55 30 5f 50 50 43 50 4e 4f 54 a1 .^.CPU0_PPCPNOT. 0fd0: 35 72 5e 2e 43 50 55 30 5f 50 50 43 01 5e 2e 43 5r^.CPU0_PPC.^.C 0fe0: 50 55 30 5f 50 50 43 50 4e 4f 54 74 5e 2e 43 50 PU0_PPCPNOTt^.CP 0ff0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 1000: 43 50 4e 4f 54 08 46 57 53 4f 0d 46 57 53 4f 00 CPNOT.FWSO.FWSO. 1010: 08 5f 50 53 43 00 14 12 5f 50 53 30 00 70 5f 50 ._PSC..._PS0.p_P 1020: 53 43 60 70 00 5f 50 53 43 14 0d 5f 50 53 33 00 SC`p._PSC.._PS3. 1030: 70 0a 03 5f 50 53 43 10 8c fb 04 5f 53 42 5f 5b p.._PSC...._SB_[ 1040: 82 4f 3e 41 4d 57 30 08 5f 48 49 44 0d 70 6e 70 .O>AMW0._HID.pnp 1050: 30 63 31 34 00 08 5f 55 49 44 00 08 5f 57 44 47 0c14.._UID.._WDG 1060: 11 3f 0a 3c a7 1d 85 2e 53 d0 5f 49 9d fa 1a 4a .?.<....S._I...J 1070: d6 2e 6a 86 41 43 01 00 3b 6d 43 71 dd fb 72 4c ..j.AC..;mCq..rL 1080: bc b8 43 5b fe 0d 64 f9 42 43 01 00 21 12 90 05 ..C[..d.BC..!... 1090: 66 d5 d1 11 b2 f0 00 a0 c9 06 29 10 42 41 01 00 f.........).BA.. 10a0: 08 53 54 41 43 11 07 0a 04 01 14 03 00 14 1f 57 .STAC..........W 10b0: 51 41 43 01 70 0d 4d 58 4d 54 43 43 6f 6e 66 69 QAC.p.MXMTCConfi 10c0: 67 44 61 74 61 00 5b 31 a4 53 54 41 43 08 53 54 gData.[1.STAC.ST 10d0: 42 43 11 07 0a 04 01 00 00 00 14 34 57 51 42 43 BC.........4WQBC 10e0: 01 70 0d 47 65 74 20 4d 58 4d 54 43 43 6f 6e 74 .p.Get MXMTCCont 10f0: 72 6f 6c 44 61 74 61 3a 20 53 54 42 43 20 3d 20 rolData: STBC = 1100: 00 5b 31 70 53 54 42 43 5b 31 a4 53 54 42 43 14 .[1pSTBC[1.STBC. 1110: 47 06 57 53 42 43 02 70 69 53 54 42 43 70 0d 53 G.WSBC.piSTBCp.S 1120: 65 74 20 4d 58 4d 54 43 43 6f 6e 74 72 6f 6c 44 et MXMTCControlD 1130: 61 74 61 3a 20 53 54 42 43 20 3d 20 00 5b 31 70 ata: STBC = .[1p 1140: 53 54 42 43 5b 31 a0 30 93 5e 5e 2f 03 50 43 49 STBC[1.0.^^/.PCI 1150: 30 4c 50 43 42 45 43 4f 4b 01 70 83 88 53 54 42 0LPCBECOK.p..STB 1160: 43 01 00 5e 5e 2f 04 50 43 49 30 4c 50 43 42 45 C..^^/.PCI0LPCBE 1170: 43 30 5f 53 4b 54 43 08 57 51 42 41 11 43 2b 0b C0_SKTC.WQBA.C+. 1180: ae 02 46 4f 4d 42 01 00 00 00 9e 02 00 00 c0 0b ..FOMB.......... 1190: 00 00 44 53 00 01 1a 7d da 54 28 d9 85 00 01 06 ..DS...}.T(..... 11a0: 18 42 10 07 10 0a 4b 61 02 c9 21 52 3c 18 94 05 .B....Ka..!R<... 11b0: 10 43 88 57 04 44 04 84 bc 0a b0 29 c0 24 88 fa .C.W.D.....).$.. 11c0: f7 87 28 09 0e 25 04 42 12 05 98 17 a0 5b 80 61 ..(..%.B.....[.a 11d0: 01 b6 05 98 16 e0 18 92 4a 03 a7 04 96 02 21 a1 ........J.....!. 11e0: 02 94 0b f0 2d 40 3b a2 24 0b b0 0c 23 02 8f 82 ....-@;.$...#... 11f0: a1 71 68 ec 30 2c 13 4c 83 38 8c b2 91 45 60 dc .qh.0,.L.8...E`. 1200: 4e 05 c8 15 20 4c 80 78 54 61 34 07 45 e0 42 63 N... L.xTa4.E.Bc 1210: 64 40 c8 a3 00 ab a3 d0 a4 12 d8 bd 00 65 02 2c d@...........e., 1220: 0a 10 27 c0 9a 00 63 48 32 28 40 9b 00 5b 20 42 ..'...cH2(@..[ B 1230: 0f d4 19 8a 46 70 02 51 6a 46 11 48 ac 1a 01 85 ....Fp.QjF.H.... 1240: 12 34 46 b0 10 81 c2 86 37 46 98 03 88 d1 fe 20 .4F.....7F..... 1250: 48 20 05 e3 66 91 46 83 1a 6b 82 63 f7 68 4e b8 H ..f.F..k.c.hN. 1260: 73 01 d2 e7 26 90 a3 3b b8 3a 07 4d 86 c7 b0 1e s...&..;.:.M.... 1270: 06 d8 29 00 ef 1a 50 d3 3f 78 26 08 0e 35 44 8f ..)...P.?x&..5D. 1280: 3a dc 09 1c fb 91 30 88 b3 3b 6e ac c3 c9 68 d0 :.....0..;n...h. 1290: a5 0a 30 7b 00 d0 d0 12 9c f6 99 84 7e 0f 38 9f ..0{........~.8. 12a0: 9e 21 89 fc 41 a0 46 e6 ff 3f b4 c7 78 5a 31 43 .!..A.F..?..xZ1C 12b0: 3e 0b 1c 16 13 0b a1 4d 6a 3c 40 40 e1 d1 40 08 >......Mj<@@..@. 12c0: 6f 06 9e af 09 46 86 90 93 f1 a0 06 e0 41 d7 3a o....F.......A.: 12d0: 32 8d 27 a6 21 cf e8 00 22 bf 32 78 0c 41 02 f9 2.'.!...".2x.A.. 12e0: c4 60 b8 c7 81 13 78 02 f0 59 40 10 92 00 21 51 .`....x..Y@...!Q 12f0: e3 a7 47 08 7e 7a 78 93 30 28 1f d2 99 f9 90 e1 ..G.~zx.0(...... 1300: 11 c2 07 c4 7b 9f 3b 19 c1 29 7b a4 e0 b0 7e 0e ....{.;..){...~. 1310: 20 c0 af 0f 8f 0d 09 7c ae 08 8c 1d aa fd 0a 40 ......|.......@ 1320: 08 1e ed 51 e0 54 23 1c 2d 78 08 8a 1c 03 4a cc ...Q.T#.-x....J. 1330: 18 50 03 38 85 d0 e7 73 04 47 14 25 f6 21 19 da .P.8...s.G.%.!.. 1340: 08 e1 1f 39 4e c1 f7 8b 23 3d ad 23 78 91 f0 08 ...9N...#=.#x... 1350: 30 e1 ce 28 a8 38 30 f4 ff 7f 4c 01 dc 7a 3b a6 0..(.80...L..z;. 1360: 80 3e c0 31 05 50 fc ff 3f a6 00 87 a8 c7 14 f4 .>.1.P..?....... 1370: 40 0c 7c 2e a1 0d ff 96 c1 8e 03 87 74 6a 8f 28 @.|.........tj.( 1380: 80 29 79 47 14 50 8c 14 d6 f1 04 18 05 3c 9b a0 .)yG.P.......<.. 1390: 22 1d 4f 80 ce ff ff 78 02 58 b8 9a bc 92 84 7d ".O....x.X.....} 13a0: 1e 78 1d 89 14 e3 41 e2 b5 e4 c1 24 46 98 08 8f .x....A....$F... 13b0: 27 1e 47 c0 b7 82 28 91 8e 3e c4 83 49 28 63 3e '.G...(..>..I(c> 13c0: a3 84 89 f9 04 70 22 ef 27 46 0a 73 2a 8f 27 2c .....p".'F.s*.', 13d0: c4 f1 04 a0 85 e2 e3 09 3a 2c 84 fe ff c7 13 dc ........:,...... 13e0: e1 c1 a7 0c fc 85 0c c6 f9 04 30 24 f0 7c 02 ca ..........0$.|.. 13f0: db 18 e6 80 02 8c 14 da f4 a9 d1 a8 55 83 32 35 ............U.25 1400: ca 34 a8 d5 a7 52 63 c6 4c 9c 52 bc 6c 8d df f2 .4...Rc.L.R.l... 1410: 9e 09 02 b1 20 0a 81 38 cc f3 42 20 96 a2 01 84 .... ..8..B .... 1420: 85 06 a1 42 a9 05 e2 98 20 34 92 0a 10 f6 ff 07 ...B.... 4...... 1430: 5b 82 1b 4c 49 44 30 08 5f 48 49 44 0c 41 d0 0c [..LID0._HID.A.. 1440: 0d 14 0b 5f 4c 49 44 00 a4 4c 50 4f 4c 5b 82 0f ..._LID..LPOL[.. 1450: 50 57 52 42 08 5f 48 49 44 0c 41 d0 0c 0c 5b 82 PWRB._HID.A...[. 1460: 84 b9 04 50 43 49 30 14 09 5f 53 33 44 00 a4 0a ...PCI0.._S3D... 1470: 02 14 09 5f 53 34 44 00 a4 0a 02 08 5f 48 49 44 ..._S4D....._HID 1480: 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 d0 0a 03 5b .A...._CID.A...[ 1490: 82 43 0e 4d 43 48 43 08 5f 41 44 52 00 5b 80 48 .C.MCHC._ADR.[.H 14a0: 42 55 53 02 0a 40 0a c0 5b 81 4a 0c 48 42 55 53 BUS..@..[.J.HBUS 14b0: 03 45 50 45 4e 01 00 0b 45 50 42 52 14 00 20 4d .EPEN...EPBR.. M 14c0: 48 45 4e 01 00 0d 4d 48 42 52 12 00 40 0a 50 58 HEN...MHBR..@.PX 14d0: 45 4e 01 50 58 53 5a 02 00 17 50 58 42 52 06 00 EN.PXSZ...PXBR.. 14e0: 20 44 49 45 4e 01 00 0b 44 49 42 52 14 00 20 49 DIEN...DIBR.. I 14f0: 50 45 4e 01 00 0b 49 50 42 52 14 00 40 0e 00 04 PEN...IPBR..@... 1500: 50 4d 30 48 02 00 02 50 4d 31 4c 02 00 02 50 4d PM0H...PM1L...PM 1510: 31 48 02 00 02 50 4d 32 4c 02 00 02 50 4d 32 48 1H...PM2L...PM2H 1520: 02 00 02 50 4d 33 4c 02 00 02 50 4d 33 48 02 00 ...PM3L...PM3H.. 1530: 02 50 4d 34 4c 02 00 02 50 4d 34 48 02 00 02 50 .PM4L...PM4H...P 1540: 4d 35 4c 02 00 02 50 4d 35 48 02 00 02 50 4d 36 M5L...PM5H...PM6 1550: 4c 02 00 02 50 4d 36 48 02 00 02 00 07 48 45 4e L...PM6H.....HEN 1560: 41 01 00 40 05 54 55 55 44 10 00 40 06 00 04 54 A..@.TUUD..@...T 1570: 4c 55 44 0c 08 42 55 46 30 11 4d 20 0b 08 02 88 LUD..BUF0.M .... 1580: 0d 00 02 0c 00 00 00 00 00 ff 00 00 00 00 01 87 ................ 1590: 17 00 01 0c 03 00 00 00 00 00 00 00 00 f7 0c 00 ................ 15a0: 00 00 00 00 00 f8 0c 00 00 47 01 f8 0c f8 0c 01 .........G...... 15b0: 08 87 17 00 01 0c 03 00 00 00 00 00 0d 00 00 ff ................ 15c0: ff 00 00 00 00 00 00 00 f3 00 00 87 17 00 00 0c ................ 15d0: 03 00 00 00 00 00 00 0a 00 ff ff 0b 00 00 00 00 ................ 15e0: 00 00 00 02 00 87 17 00 00 0c 03 00 00 00 00 00 ................ 15f0: 00 0c 00 ff 3f 0c 00 00 00 00 00 00 40 00 00 87 ....?.......@... 1600: 17 00 00 0c 03 00 00 00 00 00 40 0c 00 ff 7f 0c ..........@..... 1610: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 1620: 00 00 00 00 80 0c 00 ff bf 0c 00 00 00 00 00 00 ................ 1630: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0c @............... 1640: 00 ff ff 0c 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1650: 00 0c 03 00 00 00 00 00 00 0d 00 ff 3f 0d 00 00 ............?... 1660: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1670: 00 00 40 0d 00 ff 7f 0d 00 00 00 00 00 00 40 00 ..@...........@. 1680: 00 87 17 00 00 0c 03 00 00 00 00 00 80 0d 00 ff ................ 1690: bf 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c ........@....... 16a0: 03 00 00 00 00 00 c0 0d 00 ff ff 0d 00 00 00 00 ................ 16b0: 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 ..@............. 16c0: 00 0e 00 ff 3f 0e 00 00 00 00 00 00 40 00 00 87 ....?.......@... 16d0: 17 00 00 0c 03 00 00 00 00 00 40 0e 00 ff 7f 0e ..........@..... 16e0: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 16f0: 00 00 00 00 80 0e 00 ff bf 0e 00 00 00 00 00 00 ................ 1700: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0e @............... 1710: 00 ff ff 0e 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1720: 00 0c 03 00 00 00 00 00 00 0f 00 ff ff 0f 00 00 ................ 1730: 00 00 00 00 00 01 00 87 17 00 00 0c 03 00 00 00 ................ 1740: 00 00 00 00 00 ff ff ff df 00 00 00 00 00 00 00 ................ 1750: 00 87 17 00 00 0c 03 00 00 00 00 00 00 00 f0 ff ................ 1760: ff bf fe 00 00 00 00 00 00 c0 0e 87 17 00 00 0c ................ 1770: 03 00 00 00 00 00 00 d4 fe ff 4f d4 fe 00 00 00 ..........O..... 1780: 00 00 00 00 00 79 00 14 4b 3d 5f 43 52 53 08 a0 .....y..K=_CRS.. 1790: 1c 5e 2e 4d 43 48 43 50 4d 31 4c 8a 42 55 46 30 .^.MCHCPM1L.BUF0 17a0: 0a 7c 43 30 4c 4e 70 00 43 30 4c 4e a0 1f 93 5e .|C0LNp.C0LN...^ 17b0: 2e 4d 43 48 43 50 4d 31 4c 01 8d 42 55 46 30 0b .MCHCPM1L..BUF0. 17c0: 58 03 43 30 52 57 70 00 43 30 52 57 a0 1c 5e 2e X.C0RWp.C0RW..^. 17d0: 4d 43 48 43 50 4d 31 48 8a 42 55 46 30 0a 96 43 MCHCPM1H.BUF0..C 17e0: 34 4c 4e 70 00 43 34 4c 4e a0 1f 93 5e 2e 4d 43 4LNp.C4LN...^.MC 17f0: 48 43 50 4d 31 48 01 8d 42 55 46 30 0b 28 04 43 HCPM1H..BUF0.(.C 1800: 34 52 57 70 00 43 34 52 57 a0 1c 5e 2e 4d 43 48 4RWp.C4RW..^.MCH 1810: 43 50 4d 32 4c 8a 42 55 46 30 0a b0 43 38 4c 4e CPM2L.BUF0..C8LN 1820: 70 00 43 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 p.C8LN...^.MCHCP 1830: 4d 32 4c 01 8d 42 55 46 30 0b f8 04 43 38 52 57 M2L..BUF0...C8RW 1840: 70 00 43 38 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d p.C8RW..^.MCHCPM 1850: 32 48 8a 42 55 46 30 0a ca 43 43 4c 4e 70 00 43 2H.BUF0..CCLNp.C 1860: 43 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 32 48 CLN...^.MCHCPM2H 1870: 01 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 43 ..BUF0...CCRWp.C 1880: 43 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d 33 4c 8a CRW..^.MCHCPM3L. 1890: 42 55 46 30 0a e4 44 30 4c 4e 70 00 44 30 4c 4e BUF0..D0LNp.D0LN 18a0: a0 1f 93 5e 2e 4d 43 48 43 50 4d 33 4c 01 8d 42 ...^.MCHCPM3L..B 18b0: 55 46 30 0b 98 06 44 30 52 57 70 00 44 30 52 57 UF0...D0RWp.D0RW 18c0: a0 1c 5e 2e 4d 43 48 43 50 4d 33 48 8a 42 55 46 ..^.MCHCPM3H.BUF 18d0: 30 0a fe 44 34 4c 4e 70 00 44 34 4c 4e a0 1f 93 0..D4LNp.D4LN... 18e0: 5e 2e 4d 43 48 43 50 4d 33 48 01 8d 42 55 46 30 ^.MCHCPM3H..BUF0 18f0: 0b 68 07 44 34 52 57 70 00 44 34 52 57 a0 1d 5e .h.D4RWp.D4RW..^ 1900: 2e 4d 43 48 43 50 4d 34 4c 8a 42 55 46 30 0b 18 .MCHCPM4L.BUF0.. 1910: 01 44 38 4c 4e 70 00 44 38 4c 4e a0 1f 93 5e 2e .D8LNp.D8LN...^. 1920: 4d 43 48 43 50 4d 34 4c 01 8d 42 55 46 30 0b 38 MCHCPM4L..BUF0.8 1930: 08 44 38 52 57 70 00 44 38 52 57 a0 1d 5e 2e 4d .D8RWp.D8RW..^.M 1940: 43 48 43 50 4d 34 48 8a 42 55 46 30 0b 32 01 44 CHCPM4H.BUF0.2.D 1950: 43 4c 4e 70 00 44 43 4c 4e a0 1f 93 5e 2e 4d 43 CLNp.DCLN...^.MC 1960: 48 43 50 4d 34 48 01 8d 42 55 46 30 0b 08 09 44 HCPM4H..BUF0...D 1970: 43 52 57 70 00 44 43 52 57 a0 1d 5e 2e 4d 43 48 CRWp.DCRW..^.MCH 1980: 43 50 4d 35 4c 8a 42 55 46 30 0b 4c 01 45 30 4c CPM5L.BUF0.L.E0L 1990: 4e 70 00 45 30 4c 4e a0 1f 93 5e 2e 4d 43 48 43 Np.E0LN...^.MCHC 19a0: 50 4d 35 4c 01 8d 42 55 46 30 0b d8 09 45 30 52 PM5L..BUF0...E0R 19b0: 57 70 00 45 30 52 57 a0 1d 5e 2e 4d 43 48 43 50 Wp.E0RW..^.MCHCP 19c0: 4d 35 48 8a 42 55 46 30 0b 66 01 45 34 4c 4e 70 M5H.BUF0.f.E4LNp 19d0: 00 45 34 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d .E4LN...^.MCHCPM 19e0: 35 48 01 8d 42 55 46 30 0b a8 0a 45 34 52 57 70 5H..BUF0...E4RWp 19f0: 00 45 34 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 .E4RW..^.MCHCPM6 1a00: 4c 8a 42 55 46 30 0b 80 01 45 38 4c 4e 70 00 45 L.BUF0...E8LNp.E 1a10: 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 4c 8LN...^.MCHCPM6L 1a20: 01 8d 42 55 46 30 0b 78 0b 45 38 52 57 70 00 45 ..BUF0.x.E8RWp.E 1a30: 38 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 48 8a 8RW..^.MCHCPM6H. 1a40: 42 55 46 30 0b 9a 01 45 43 4c 4e 70 00 45 43 4c BUF0...ECLNp.ECL 1a50: 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 48 01 8d N...^.MCHCPM6H.. 1a60: 42 55 46 30 0b 48 0c 45 43 52 57 70 00 45 43 52 BUF0.H.ECRWp.ECR 1a70: 57 a0 1d 5e 2e 4d 43 48 43 50 4d 30 48 8a 42 55 W..^.MCHCPM0H.BU 1a80: 46 30 0b b4 01 46 30 4c 4e 70 00 46 30 4c 4e a0 F0...F0LNp.F0LN. 1a90: 1f 93 5e 2e 4d 43 48 43 50 4d 30 48 01 8d 42 55 ..^.MCHCPM0H..BU 1aa0: 46 30 0b 18 0d 46 30 52 57 70 00 46 30 52 57 8a F0...F0RWp.F0RW. 1ab0: 42 55 46 30 0b c2 01 4d 31 4d 4e 8a 42 55 46 30 BUF0...M1MN.BUF0 1ac0: 0b c6 01 4d 31 4d 58 8a 42 55 46 30 0b ce 01 4d ...M1MX.BUF0...M 1ad0: 31 4c 4e 8a 42 55 46 30 0b dc 01 4d 32 4d 4e 8a 1LN.BUF0...M2MN. 1ae0: 42 55 46 30 0b e0 01 4d 32 4d 58 8a 42 55 46 30 BUF0...M2MX.BUF0 1af0: 0b e8 01 4d 32 4c 4e 79 5e 2e 4d 43 48 43 50 58 ...M2LNy^.MCHCPX 1b00: 42 52 0a 1a 4d 31 4d 58 7a 0c 00 00 00 10 5e 2e BR..M1MXz.....^. 1b10: 4d 43 48 43 50 58 53 5a 60 72 4d 31 4d 58 60 4d MCHCPXSZ`rM1MX`M 1b20: 32 4d 4e 72 74 4d 32 4d 58 4d 32 4d 4e 00 01 4d 2MNrtM2MXM2MN..M 1b30: 32 4c 4e 74 4d 31 4d 58 01 4d 31 4d 58 79 5e 2e 2LNtM1MX.M1MXy^. 1b40: 4d 43 48 43 54 4c 55 44 0a 14 4d 31 4d 4e 72 74 MCHCTLUD..M1MNrt 1b50: 4d 31 4d 58 4d 31 4d 4e 00 01 4d 31 4c 4e a4 42 M1MXM1MN..M1LN.B 1b60: 55 46 30 14 47 28 5f 50 52 54 00 a0 45 0f 47 50 UF0.G(_PRT..E.GP 1b70: 49 43 a4 12 4d 0e 13 12 0b 04 0c ff ff 01 00 00 IC..M........... 1b80: 00 0a 10 12 0b 04 0c ff ff 02 00 00 00 0a 10 12 ................ 1b90: 0b 04 0c ff ff 07 00 00 00 0a 10 12 0b 04 0c ff ................ 1ba0: ff 19 00 00 00 0a 14 12 0b 04 0c ff ff 1a 00 00 ................ 1bb0: 00 0a 10 12 0b 04 0c ff ff 1a 00 01 00 0a 15 12 ................ 1bc0: 0c 04 0c ff ff 1a 00 0a 02 00 0a 12 12 0b 04 0c ................ 1bd0: ff ff 1b 00 00 00 0a 16 12 0b 04 0c ff ff 1c 00 ................ 1be0: 00 00 0a 11 12 0b 04 0c ff ff 1c 00 01 00 0a 10 ................ 1bf0: 12 0c 04 0c ff ff 1c 00 0a 02 00 0a 12 12 0c 04 ................ 1c00: 0c ff ff 1c 00 0a 03 00 0a 13 12 0b 04 0c ff ff ................ 1c10: 1d 00 00 00 0a 17 12 0b 04 0c ff ff 1d 00 01 00 ................ 1c20: 0a 13 12 0c 04 0c ff ff 1d 00 0a 02 00 0a 12 12 ................ 1c30: 0b 04 0c ff ff 1f 00 00 00 0a 13 12 0b 04 0c ff ................ 1c40: ff 1f 00 01 00 0a 13 12 0c 04 0c ff ff 1f 00 0a ................ 1c50: 02 00 0a 13 12 0c 04 0c ff ff 1f 00 0a 03 00 0a ................ 1c60: 10 a1 49 18 a4 12 45 18 13 12 13 04 0c ff ff 01 ..I...E......... 1c70: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1c80: 0c ff ff 02 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 ......^.LPCBLNKA 1c90: 00 12 13 04 0c ff ff 07 00 00 5e 2e 4c 50 43 42 ..........^.LPCB 1ca0: 4c 4e 4b 41 00 12 13 04 0c ff ff 19 00 00 5e 2e LNKA..........^. 1cb0: 4c 50 43 42 4c 4e 4b 45 00 12 13 04 0c ff ff 1a LPCBLNKE........ 1cc0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1cd0: 0c ff ff 1a 00 01 5e 2e 4c 50 43 42 4c 4e 4b 46 ......^.LPCBLNKF 1ce0: 00 12 14 04 0c ff ff 1a 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1cf0: 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1b 00 00 5e BLNKC..........^ 1d00: 2e 4c 50 43 42 4c 4e 4b 47 00 12 13 04 0c ff ff .LPCBLNKG....... 1d10: 1c 00 00 5e 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 ...^.LPCBLNKB... 1d20: 04 0c ff ff 1c 00 01 5e 2e 4c 50 43 42 4c 4e 4b .......^.LPCBLNK 1d30: 41 00 12 14 04 0c ff ff 1c 00 0a 02 5e 2e 4c 50 A...........^.LP 1d40: 43 42 4c 4e 4b 43 00 12 14 04 0c ff ff 1c 00 0a CBLNKC.......... 1d50: 03 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0c .^.LPCBLNKD..... 1d60: ff ff 1d 00 00 5e 2e 4c 50 43 42 4c 4e 4b 48 00 .....^.LPCBLNKH. 1d70: 12 13 04 0c ff ff 1d 00 01 5e 2e 4c 50 43 42 4c .........^.LPCBL 1d80: 4e 4b 44 00 12 14 04 0c ff ff 1d 00 0a 02 5e 2e NKD...........^. 1d90: 4c 50 43 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1f LPCBLNKC........ 1da0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 ..^.LPCBLNKD.... 1db0: 0c ff ff 1f 00 01 5e 2e 4c 50 43 42 4c 4e 4b 44 ......^.LPCBLNKD 1dc0: 00 12 14 04 0c ff ff 1f 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1dd0: 42 4c 4e 4b 44 00 12 14 04 0c ff ff 1f 00 0a 03 BLNKD........... 1de0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 40 14 50 ^.LPCBLNKA.[.@.P 1df0: 44 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 DRC._HID.A...._U 1e00: 49 44 01 08 42 55 46 30 11 46 06 0a 62 86 09 00 ID..BUF0.F..b... 1e10: 01 00 00 00 00 00 40 00 00 86 09 00 01 00 00 00 ......@......... 1e20: 00 00 40 00 00 86 09 00 01 00 00 00 00 00 10 00 ..@............. 1e30: 00 86 09 00 01 00 00 00 00 00 10 00 00 86 09 00 ................ 1e40: 01 00 00 00 00 00 00 00 00 86 09 00 01 00 00 d2 ................ 1e50: fe 00 00 02 00 86 09 00 01 00 00 d4 fe 00 50 00 ..............P. 1e60: 00 86 09 00 01 00 50 d4 fe 00 b0 04 00 79 00 14 ......P......y.. 1e70: 4d 0b 5f 43 52 53 08 8a 42 55 46 30 0a 04 52 42 M._CRS..BUF0..RB 1e80: 52 30 79 5e 5e 2e 4c 50 43 42 52 43 42 41 0a 0e R0y^^.LPCBRCBA.. 1e90: 52 42 52 30 8a 42 55 46 30 0a 10 4d 42 52 30 79 RBR0.BUF0..MBR0y 1ea0: 5e 5e 2e 4d 43 48 43 4d 48 42 52 0a 0e 4d 42 52 ^^.MCHCMHBR..MBR 1eb0: 30 8a 42 55 46 30 0a 1c 44 42 52 30 79 5e 5e 2e 0.BUF0..DBR0y^^. 1ec0: 4d 43 48 43 44 49 42 52 0a 0c 44 42 52 30 8a 42 MCHCDIBR..DBR0.B 1ed0: 55 46 30 0a 28 45 42 52 30 79 5e 5e 2e 4d 43 48 UF0.(EBR0y^^.MCH 1ee0: 43 45 50 42 52 0a 0c 45 42 52 30 8a 42 55 46 30 CEPBR..EBR0.BUF0 1ef0: 0a 34 58 42 52 30 79 5e 5e 2e 4d 43 48 43 50 58 .4XBR0y^^.MCHCPX 1f00: 42 52 0a 1a 58 42 52 30 8a 42 55 46 30 0a 38 58 BR..XBR0.BUF0.8X 1f10: 53 5a 30 7a 0c 00 00 00 10 5e 5e 2e 4d 43 48 43 SZ0z.....^^.MCHC 1f20: 50 58 53 5a 58 53 5a 30 a4 42 55 46 30 5b 82 4d PXSZXSZ0.BUF0[.M 1f30: 50 50 45 47 50 08 5f 41 44 52 0c 00 00 01 00 14 PPEGP._ADR...... 1f40: 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 2c A._PRT..3GPIC.., 1f50: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 1f60: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 1f70: 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 12 ............E... 1f80: 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 43 A.........^^.LPC 1f90: 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e 2e BLNKA........^^. 1fa0: 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff 0a LPCBLNKB........ 1fb0: 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 1fc0: 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 1fd0: 00 5b 82 49 46 56 47 41 5f 08 5f 41 44 52 00 08 .[.IFVGA_._ADR.. 1fe0: 53 57 49 54 01 08 43 52 54 41 01 08 4c 43 44 41 SWIT..CRTA..LCDA 1ff0: 01 08 54 56 41 41 01 08 56 4c 44 46 01 5b 80 56 ..TVAA..VLDF.[.V 2000: 49 44 53 02 00 0a c8 5b 81 0b 56 49 44 53 03 56 IDS....[..VIDS.V 2010: 44 49 44 20 14 09 5f 53 54 41 00 a4 0a 0f 08 5f DID .._STA....._ 2020: 50 53 43 00 14 0c 5f 50 53 30 00 70 00 5f 50 53 PSC..._PS0.p._PS 2030: 43 14 0c 5f 50 53 31 00 70 01 5f 50 53 43 14 0d C.._PS1.p._PSC.. 2040: 5f 50 53 33 00 70 0a 03 5f 50 53 43 14 10 5f 44 _PS3.p.._PSC.._D 2050: 4f 53 01 70 7b 68 0a 03 00 53 57 49 54 14 17 5f OS.p{h...SWIT.._ 2060: 44 4f 44 00 a4 12 0f 03 0c 00 01 01 00 0c 10 01 DOD............. 2070: 01 00 0b 00 02 5b 82 4d 08 43 52 54 5f 14 0a 5f .....[.M.CRT_.._ 2080: 41 44 52 00 a4 0b 00 01 14 41 06 5f 44 43 53 00 ADR......A._DCS. 2090: 5e 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 ^^^^.LPCBPHSS..p 20a0: 43 41 44 4c 60 70 43 53 54 45 61 7b 60 0a 02 60 CADL`pCSTEa{`..` 20b0: 7b 61 0a 02 61 a0 08 60 70 01 43 52 54 41 a1 07 {a..a..`p.CRTA.. 20c0: 70 00 43 52 54 41 a0 13 43 52 54 41 a0 08 93 61 p.CRTA..CRTA...a 20d0: 0a 02 a4 0a 1f a1 04 a4 0a 1d a1 0f a0 08 93 61 ...............a 20e0: 0a 02 a4 0a 0f a1 04 a4 0a 0d 14 12 5f 44 47 53 ............_DGS 20f0: 00 a0 07 43 52 54 41 a4 01 a1 03 a4 00 14 06 5f ...CRTA........_ 2100: 44 53 53 01 5b 82 47 0e 4c 43 44 5f 14 0a 5f 41 DSS.[.G.LCD_.._A 2110: 44 52 00 a4 0b 10 01 14 4d 05 5f 44 43 53 00 5e DR......M._DCS.^ 2120: 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 ^^^.LPCBPHSS..pC 2130: 41 44 4c 60 70 43 53 54 45 61 7b 60 01 60 7b 61 ADL`pCSTEa{`.`{a 2140: 01 61 a0 08 60 70 01 4c 43 44 41 a1 07 70 00 4c .a..`p.LCDA..p.L 2150: 43 44 41 a0 12 4c 43 44 41 a0 07 93 61 01 a4 0a CDA..LCDA...a... 2160: 1f a1 04 a4 0a 1d a1 0e a0 07 93 61 01 a4 0a 0f ...........a.... 2170: a1 04 a4 0a 0d 14 12 5f 44 47 53 00 a0 07 4c 43 ......._DGS...LC 2180: 44 41 a4 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 DA........_DSS.. 2190: 1d 5f 42 43 4c 00 a4 12 15 0a 0a 46 0a 28 00 0a ._BCL......F.(.. 21a0: 0a 0a 14 0a 1e 0a 28 0a 32 0a 3c 0a 46 14 20 5f ......(.2.<.F. _ 21b0: 42 43 4d 01 78 68 0a 0a 60 61 70 61 5e 5e 5e 5e BCM.xh..`apa^^^^ 21c0: 2f 03 4c 50 43 42 45 43 30 5f 42 52 54 53 14 1e /.LPCBEC0_BRTS.. 21d0: 5f 42 51 43 00 77 5e 5e 5e 5e 2f 03 4c 50 43 42 _BQC.w^^^^/.LPCB 21e0: 45 43 30 5f 42 52 54 53 0a 0a 60 a4 60 5b 82 4d EC0_BRTS..`.`[.M 21f0: 08 54 56 5f 5f 14 0a 5f 41 44 52 00 a4 0b 00 02 .TV__.._ADR..... 2200: 14 41 06 5f 44 43 53 00 5e 5e 5e 5e 2e 4c 50 43 .A._DCS.^^^^.LPC 2210: 42 50 48 53 53 0a 0c 70 43 41 44 4c 60 70 43 53 BPHSS..pCADL`pCS 2220: 54 45 61 7b 60 0a 04 60 7b 61 0a 04 61 a0 08 60 TEa{`..`{a..a..` 2230: 70 01 54 56 41 41 a1 07 70 00 54 56 41 41 a0 13 p.TVAA..p.TVAA.. 2240: 54 56 41 41 a0 08 93 61 0a 04 a4 0a 1f a1 04 a4 TVAA...a........ 2250: 0a 1d a1 0f a0 08 93 61 0a 04 a4 0a 0f a1 04 a4 .......a........ 2260: 0a 0d 14 12 5f 44 47 53 00 a0 07 54 56 41 41 a4 ...._DGS...TVAA. 2270: 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 49 10 44 ......._DSS..I.D 2280: 53 53 57 00 a0 4a 0e 93 53 57 49 54 00 5e 5e 5e SSW..J..SWIT.^^^ 2290: 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 41 44 4c .LPCBPHSS..pCADL 22a0: 60 70 43 53 54 45 61 a0 16 94 61 01 7b 60 61 56 `pCSTEa...a.{`aV 22b0: 4c 44 46 7b 56 4c 44 46 0a fe 56 4c 44 46 a0 43 LDF{VLDF..VLDF.C 22c0: 0a 56 4c 44 46 a0 27 93 60 0a 09 a0 0b 93 61 0a .VLDF.'.`.....a. 22d0: 08 53 54 42 4c 0a 02 a0 0a 93 61 01 53 54 42 4c .STBL.....a.STBL 22e0: 0a 03 a0 0a 93 61 0a 09 53 54 42 4c 01 a0 28 93 .....a..STBL..(. 22f0: 60 0a 0a a0 0b 93 61 0a 08 53 54 42 4c 0a 05 a0 `.....a..STBL... 2300: 0a 93 61 0a 02 53 54 42 4c 01 a0 0b 93 61 0a 0a ..a..STBL....a.. 2310: 53 54 42 4c 0a 04 a0 4b 04 93 60 0a 0b a0 0b 93 STBL...K..`..... 2320: 61 0a 08 53 54 42 4c 0a 02 a0 0b 93 61 0a 09 53 a..STBL.....a..S 2330: 54 42 4c 0a 05 a0 0a 93 61 01 53 54 42 4c 0a 03 TBL.....a.STBL.. 2340: a0 0b 93 61 0a 0a 53 54 42 4c 0a 04 a0 0a 93 61 ...a..STBL.....a 2350: 0a 02 53 54 42 4c 01 a0 0a 93 61 0a 0b 53 54 42 ..STBL....a..STB 2360: 4c 01 a1 0c 70 01 56 4c 44 46 53 54 42 4c 01 a1 L...p.VLDFSTBL.. 2370: 16 a0 14 93 53 57 49 54 01 5e 5e 5e 2e 4c 50 43 ....SWIT.^^^.LPC 2380: 42 50 48 53 53 01 14 45 0b 53 54 42 4c 01 a0 16 BPHSS..E.STBL... 2390: 93 68 01 70 00 43 52 54 41 70 01 4c 43 44 41 70 .h.p.CRTAp.LCDAp 23a0: 00 54 56 41 41 a0 17 93 68 0a 02 70 01 43 52 54 .TVAA...h..p.CRT 23b0: 41 70 00 4c 43 44 41 70 00 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23c0: 68 0a 03 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 23d0: 00 54 56 41 41 a0 17 93 68 0a 04 70 00 43 52 54 .TVAA...h..p.CRT 23e0: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23f0: 68 0a 05 70 00 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2400: 01 54 56 41 41 a0 17 93 68 0a 06 70 01 43 52 54 .TVAA...h..p.CRT 2410: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 2420: 68 0a 07 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2430: 01 54 56 41 41 86 56 47 41 5f 0a 80 5b 82 42 f8 .TVAA.VGA_..[.B. 2440: 47 46 58 30 08 5f 41 44 52 0c 00 00 02 00 14 10 GFX0._ADR....... 2450: 5f 44 4f 53 01 70 7b 68 0a 07 00 44 53 45 4e 14 _DOS.p{h...DSEN. 2460: 41 26 5f 44 4f 44 00 70 00 4e 44 49 44 a0 15 92 A&_DOD.p.NDID... 2470: 93 44 49 44 4c 00 70 53 44 44 4c 44 49 44 31 44 .DIDL.pSDDLDID1D 2480: 49 44 31 a0 15 92 93 44 44 4c 32 00 70 53 44 44 ID1....DDL2.pSDD 2490: 4c 44 49 44 32 44 49 44 32 a0 15 92 93 44 44 4c LDID2DID2....DDL 24a0: 33 00 70 53 44 44 4c 44 49 44 33 44 49 44 33 a0 3.pSDDLDID3DID3. 24b0: 15 92 93 44 44 4c 34 00 70 53 44 44 4c 44 49 44 ...DDL4.pSDDLDID 24c0: 34 44 49 44 34 a0 15 92 93 44 44 4c 35 00 70 53 4DID4....DDL5.pS 24d0: 44 44 4c 44 49 44 35 44 49 44 35 a0 2c 93 4e 44 DDLDID5DID5.,.ND 24e0: 49 44 01 08 54 4d 50 31 12 07 01 0c ff ff ff ff ID..TMP1........ 24f0: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2500: 31 00 00 a4 54 4d 50 31 a0 46 04 93 4e 44 49 44 1...TMP1.F..NDID 2510: 0a 02 08 54 4d 50 32 12 0c 02 0c ff ff ff ff 0c ...TMP2......... 2520: ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 ....p}.....DID1. 2530: 88 54 4d 50 32 00 00 70 7d 0c 00 00 01 00 44 49 .TMP2..p}.....DI 2540: 44 32 00 88 54 4d 50 32 01 00 a4 54 4d 50 32 a0 D2..TMP2...TMP2. 2550: 4f 05 93 4e 44 49 44 0a 03 08 54 4d 50 33 12 11 O..NDID...TMP3.. 2560: 03 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 2570: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2580: 33 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 3..p}.....DID2.. 2590: 54 4d 50 33 01 00 70 7d 0c 00 00 01 00 44 49 44 TMP3..p}.....DID 25a0: 33 00 88 54 4d 50 33 0a 02 00 a4 54 4d 50 33 a0 3..TMP3....TMP3. 25b0: 48 07 93 4e 44 49 44 0a 04 08 54 4d 50 34 12 16 H..NDID...TMP4.. 25c0: 04 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 25d0: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 25e0: 00 88 54 4d 50 34 00 00 70 7d 0c 00 00 01 00 44 ..TMP4..p}.....D 25f0: 49 44 32 00 88 54 4d 50 34 01 00 70 7d 0c 00 00 ID2..TMP4..p}... 2600: 01 00 44 49 44 33 00 88 54 4d 50 34 0a 02 00 70 ..DID3..TMP4...p 2610: 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d 50 34 }.....DID4..TMP4 2620: 0a 03 00 a4 54 4d 50 34 a0 41 09 94 4e 44 49 44 ....TMP4.A..NDID 2630: 0a 04 08 54 4d 50 35 12 1b 05 0c ff ff ff ff 0c ...TMP5......... 2640: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 2650: ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 88 ...p}.....DID1.. 2660: 54 4d 50 35 00 00 70 7d 0c 00 00 01 00 44 49 44 TMP5..p}.....DID 2670: 32 00 88 54 4d 50 35 01 00 70 7d 0c 00 00 01 00 2..TMP5..p}..... 2680: 44 49 44 33 00 88 54 4d 50 35 0a 02 00 70 7d 0c DID3..TMP5...p}. 2690: 00 00 01 00 44 49 44 34 00 88 54 4d 50 35 0a 03 ....DID4..TMP5.. 26a0: 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d .p}.....DID4..TM 26b0: 50 35 0a 04 00 a4 54 4d 50 35 a4 12 05 01 0b 00 P5....TMP5...... 26c0: 04 5b 82 43 06 44 44 30 31 14 1c 5f 41 44 52 08 .[.C.DD01.._ADR. 26d0: a0 09 93 44 49 44 31 00 a4 01 a1 0b a4 7b 0b ff ...DID1......{.. 26e0: ff 44 49 44 31 00 14 0f 5f 44 43 53 00 a4 43 44 .DID1..._DCS..CD 26f0: 44 53 44 49 44 31 14 0f 5f 44 47 53 00 a4 4e 44 DSDID1.._DGS..ND 2700: 44 53 44 49 44 31 14 1f 5f 44 53 53 01 a0 18 93 DSDID1.._DSS.... 2710: 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 {h...........pNS 2720: 54 45 43 53 54 45 5b 82 44 06 44 44 30 32 14 1d TECSTE[.D.DD02.. 2730: 5f 41 44 52 08 a0 0a 93 44 49 44 32 00 a4 0a 02 _ADR....DID2.... 2740: a1 0b a4 7b 0b ff ff 44 49 44 32 00 14 0f 5f 44 ...{...DID2..._D 2750: 43 53 00 a4 43 44 44 53 44 49 44 32 14 0f 5f 44 CS..CDDSDID2.._D 2760: 47 53 00 a4 4e 44 44 53 44 49 44 32 14 1f 5f 44 GS..NDDSDID2.._D 2770: 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 SS....{h........ 2780: 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 41 07 ...pNSTECSTE[.A. 2790: 44 44 30 33 14 1d 5f 41 44 52 08 a0 0a 93 44 49 DD03.._ADR....DI 27a0: 44 33 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 49 44 D3.......{...DID 27b0: 33 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 33 3..._DCS....DID3 27c0: 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 33 14 .......CDDSDID3. 27d0: 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 44 33 14 ._DGS..NDDSDID3. 27e0: 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 ._DSS....{h..... 27f0: 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 5b ......pNSTECSTE[ 2800: 82 41 07 44 44 30 34 14 1d 5f 41 44 52 08 a0 0a .A.DD04.._ADR... 2810: 93 44 49 44 34 00 a4 0a 04 a1 0b a4 7b 0b ff ff .DID4.......{... 2820: 44 49 44 34 00 14 1c 5f 44 43 53 00 a0 0a 93 44 DID4..._DCS....D 2830: 49 44 34 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 ID4.......CDDSDI 2840: 44 34 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 D4.._DGS..NDDSDI 2850: 44 34 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 D4.._DSS....{h.. 2860: 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 .........pNSTECS 2870: 54 45 5b 82 41 07 44 44 30 35 14 1d 5f 41 44 52 TE[.A.DD05.._ADR 2880: 08 a0 0a 93 44 49 44 35 00 a4 0a 05 a1 0b a4 7b ....DID5.......{ 2890: 0b ff ff 44 49 44 35 00 14 1c 5f 44 43 53 00 a0 ...DID5..._DCS.. 28a0: 0a 93 44 49 44 35 00 a4 0a 0b a1 0a a4 43 44 44 ..DID5.......CDD 28b0: 53 44 49 44 35 14 0f 5f 44 47 53 00 a4 4e 44 44 SDID5.._DGS..NDD 28c0: 53 44 49 44 35 14 1f 5f 44 53 53 01 a0 18 93 7b SDID5.._DSS....{ 28d0: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 28e0: 45 43 53 54 45 14 4e 06 53 44 44 4c 01 75 4e 44 ECSTE.N.SDDL.uND 28f0: 49 44 70 7b 68 0b 0f 0f 00 60 7d 0c 00 00 00 80 IDp{h....`}..... 2900: 60 61 a0 09 93 44 49 44 4c 60 a4 61 a0 09 93 44 `a...DIDL`.a...D 2910: 44 4c 32 60 a4 61 a0 09 93 44 44 4c 33 60 a4 61 DL2`.a...DDL3`.a 2920: a0 09 93 44 44 4c 34 60 a4 61 a0 09 93 44 44 4c ...DDL4`.a...DDL 2930: 35 60 a4 61 a0 09 93 44 44 4c 36 60 a4 61 a0 09 5`.a...DDL6`.a.. 2940: 93 44 44 4c 37 60 a4 61 a0 09 93 44 44 4c 38 60 .DDL7`.a...DDL8` 2950: a4 61 a4 00 14 4a 08 43 44 44 53 01 a0 0f 93 43 .a...J.CDDS....C 2960: 41 44 4c 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 ADL{h..........C 2970: 41 4c 32 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL2{h..........C 2980: 41 4c 33 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL3{h..........C 2990: 41 4c 34 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL4{h..........C 29a0: 41 4c 35 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL5{h..........C 29b0: 41 4c 36 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL6{h..........C 29c0: 41 4c 37 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL7{h..........C 29d0: 41 4c 38 7b 68 0b 0f 0f 00 a4 0a 1f a4 0a 1d 14 AL8{h........... 29e0: 41 08 4e 44 44 53 01 a0 0e 93 4e 41 44 4c 7b 68 A.NDDS....NADL{h 29f0: 0b 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 32 7b 68 0b .........NDL2{h. 2a00: 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 33 7b 68 0b 0f ........NDL3{h.. 2a10: 0f 00 a4 01 a0 0e 93 4e 44 4c 34 7b 68 0b 0f 0f .......NDL4{h... 2a20: 00 a4 01 a0 0e 93 4e 44 4c 35 7b 68 0b 0f 0f 00 ......NDL5{h.... 2a30: a4 01 a0 0e 93 4e 44 4c 36 7b 68 0b 0f 0f 00 a4 .....NDL6{h..... 2a40: 01 a0 0e 93 4e 44 4c 37 7b 68 0b 0f 0f 00 a4 01 ....NDL7{h...... 2a50: a0 0e 93 4e 44 4c 38 7b 68 0b 0f 0f 00 a4 01 a4 ...NDL8{h....... 2a60: 00 14 40 07 42 52 54 4e 09 a0 14 93 7b 44 49 44 ..@.BRTN....{DID 2a70: 31 0b 00 0f 00 0b 00 04 86 44 44 30 31 68 a0 14 1........DD01h.. 2a80: 93 7b 44 49 44 32 0b 00 0f 00 0b 00 04 86 44 44 .{DID2........DD 2a90: 30 32 68 a0 14 93 7b 44 49 44 33 0b 00 0f 00 0b 02h...{DID3..... 2aa0: 00 04 86 44 44 30 33 68 a0 14 93 7b 44 49 44 34 ...DD03h...{DID4 2ab0: 0b 00 0f 00 0b 00 04 86 44 44 30 34 68 a0 14 93 ........DD04h... 2ac0: 7b 44 49 44 35 0b 00 0f 00 0b 00 04 86 44 44 30 {DID5........DD0 2ad0: 35 68 10 24 5e 5e 50 43 49 30 5b 80 4d 43 48 50 5h.$^^PCI0[.MCHP 2ae0: 02 0a 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 ..@..[..MCHP..@0 2af0: 54 41 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 TASM...[.IGDP..@ 2b00: 0a c0 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 ..[.E.IGDP..@... 2b10: 47 49 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 GIVD...GUMA..... 2b20: 47 4d 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 GMFN....@FASLE.. 2b30: 18 47 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 .GSSE.GSSB.GSES. 2b40: 00 30 00 08 43 44 56 4c 05 00 03 00 18 4c 42 50 .0..CDVL.....LBP 2b50: 43 08 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 C..0ASLS [.IGDM. 2b60: 41 53 4c 42 0b 00 20 5b 81 4e 16 49 47 44 4d 00 ASLB.. [.N.IGDM. 2b70: 53 49 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 SIGN@.SIZE OVER 2b80: 53 56 45 52 40 10 56 56 45 52 40 08 47 56 45 52 SVER@.VVER@.GVER 2b90: 40 08 4d 42 4f 58 20 00 40 52 44 52 44 59 20 43 @.MBOX .@RDRDY C 2ba0: 53 54 53 20 43 45 56 54 20 00 40 0a 44 49 44 4c STS CEVT .@.DIDL 2bb0: 20 44 44 4c 32 20 44 44 4c 33 20 44 44 4c 34 20 DDL2 DDL3 DDL4 2bc0: 44 44 4c 35 20 44 44 4c 36 20 44 44 4c 37 20 44 DDL5 DDL6 DDL7 D 2bd0: 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 20 43 50 DL8 CPDL CPL2 CP 2be0: 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 43 50 4c L3 CPL4 CPL5 CPL 2bf0: 36 20 43 50 4c 37 20 43 50 4c 38 20 43 41 44 4c 6 CPL7 CPL8 CADL 2c00: 20 43 41 4c 32 20 43 41 4c 33 20 43 41 4c 34 20 CAL2 CAL3 CAL4 2c10: 43 41 4c 35 20 43 41 4c 36 20 43 41 4c 37 20 43 CAL5 CAL6 CAL7 C 2c20: 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 20 4e 44 AL8 NADL NDL2 ND 2c30: 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 4e 44 4c L3 NDL4 NDL5 NDL 2c40: 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 53 4c 50 6 NDL7 NDL8 ASLP 2c50: 20 54 49 44 58 20 43 48 50 44 20 43 4c 49 44 20 TIDX CHPD CLID 2c60: 43 44 43 4b 20 53 58 53 57 20 45 56 54 53 20 43 CDCK SXSW EVTS C 2c70: 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 43 49 45 NOT NRDY .@.SCIE 2c80: 01 47 45 46 43 04 47 58 46 43 03 47 45 53 46 08 .GEFC.GXFC.GESF. 2c90: 00 10 50 41 52 4d 20 44 53 4c 50 20 00 40 7a 41 ..PARM DSLP .@zA 2ca0: 52 44 59 20 41 53 4c 43 20 54 43 48 45 20 41 4c RDY ASLC TCHE AL 2cb0: 53 49 20 42 43 4c 50 20 50 46 49 54 20 43 42 4c SI BCLP PFIT CBL 2cc0: 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 00 40 5c V BCLM@.CPFM .@\ 2cd0: 47 56 44 31 80 00 0e 08 44 42 54 42 12 32 15 00 GVD1....DBTB.2.. 2ce0: 0a 07 0a 38 0b c0 01 0b 00 0e 0a 3f 0b c7 01 0b ...8.......?.... 2cf0: 07 0e 0b f8 01 0b 38 0e 0b c0 0f 00 00 00 00 00 ......8......... 2d00: 0b 00 70 0b 07 70 0b 38 70 0b c0 71 0b 00 7e 08 ..p..p.8p..q..~. 2d10: 43 44 43 54 12 23 03 12 0a 03 0a c8 0b 40 01 0b CDCT.#.......@.. 2d20: 90 01 12 0a 03 0a c8 0b 4d 01 0b 90 01 12 0a 03 ........M....... 2d30: 0a de 0b 4d 01 0b 7d 01 08 53 55 43 43 01 08 4e ...M..}..SUCC..N 2d40: 56 4c 44 0a 02 08 43 52 49 54 0a 04 08 4e 43 52 VLD...CRIT...NCR 2d50: 54 0a 06 14 4c 4a 47 53 43 49 08 14 44 1e 47 42 T...LJGSCI..D.GB 2d60: 44 41 08 a0 1a 93 47 45 53 46 00 70 0b 79 02 50 DA....GESF.p.y.P 2d70: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 1a ARMp.GESF.SUCC.. 2d80: 93 47 45 53 46 01 70 0b 40 02 50 41 52 4d 70 00 .GESF.p.@.PARMp. 2d90: 47 45 53 46 a4 53 55 43 43 a0 47 04 93 47 45 53 GESF.SUCC.G..GES 2da0: 46 0a 04 7b 50 41 52 4d 0c 00 00 ff ef 50 41 52 F..{PARM.....PAR 2db0: 4d 7b 50 41 52 4d 79 83 88 44 42 54 42 49 42 54 M{PARMy..DBTBIBT 2dc0: 54 00 0a 10 00 50 41 52 4d 7d 49 42 54 54 50 41 T....PARM}IBTTPA 2dd0: 52 4d 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 RMPARMp.GESF.SUC 2de0: 43 a0 4a 06 93 47 45 53 46 0a 05 70 49 50 53 43 C.J..GESF..pIPSC 2df0: 50 41 52 4d 7d 50 41 52 4d 79 49 50 41 54 0a 08 PARM}PARMyIPAT.. 2e00: 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 41 52 .PARMrPARM...PAR 2e10: 4d 7d 50 41 52 4d 79 4c 49 44 53 0a 10 00 50 41 M}PARMyLIDS...PA 2e20: 52 4d 72 50 41 52 4d 0c 00 00 01 00 50 41 52 4d RMrPARM.....PARM 2e30: 7d 50 41 52 4d 79 49 42 49 41 0a 14 00 50 41 52 }PARMyIBIA...PAR 2e40: 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 2d 93 47 Mp.GESF.SUCC.-.G 2e50: 45 53 46 0a 06 70 49 54 56 46 50 41 52 4d 7d 50 ESF..pITVFPARM}P 2e60: 41 52 4d 79 49 54 56 4d 0a 04 00 50 41 52 4d 70 ARMyITVM...PARMp 2e70: 00 47 45 53 46 a4 53 55 43 43 a0 4f 08 93 47 45 .GESF.SUCC.O..GE 2e80: 53 46 0a 07 70 47 49 56 44 50 41 52 4d 7f 50 41 SF..pGIVDPARM.PA 2e90: 52 4d 01 50 41 52 4d 7d 50 41 52 4d 79 47 4d 46 RM.PARM}PARMyGMF 2ea0: 4e 01 00 50 41 52 4d 7d 50 41 52 4d 0b 00 10 50 N..PARM}PARM...P 2eb0: 41 52 4d a0 16 49 44 4d 4d 7d 50 41 52 4d 79 49 ARM..IDMM}PARMyI 2ec0: 44 4d 53 0a 11 00 50 41 52 4d a1 12 7d 50 41 52 DMS...PARM..}PAR 2ed0: 4d 79 49 44 4d 53 0a 0d 00 50 41 52 4d 7d 79 83 MyIDMS...PARM}y. 2ee0: 88 83 88 43 44 43 54 48 56 43 4f 00 74 43 44 56 ...CDCTHVCO.tCDV 2ef0: 4c 01 00 00 0a 15 00 50 41 52 4d 50 41 52 4d 70 L......PARMPARMp 2f00: 01 47 45 53 46 a4 53 55 43 43 a0 2a 93 47 45 53 .GESF.SUCC.*.GES 2f10: 46 0a 0a 70 00 50 41 52 4d a0 10 49 53 53 43 7d F..p.PARM..ISSC} 2f20: 50 41 52 4d 0a 03 50 41 52 4d 70 00 47 45 53 46 PARM..PARMp.GESF 2f30: a4 53 55 43 43 70 00 47 45 53 46 a4 43 52 49 54 .SUCCp.GESF.CRIT 2f40: 14 41 28 53 42 43 42 08 a0 20 93 47 45 53 46 00 .A(SBCB.. .GESF. 2f50: 70 00 50 41 52 4d 70 0b 7d f7 50 41 52 4d 70 00 p.PARMp.}.PARMp. 2f60: 47 45 53 46 a4 53 55 43 43 a0 18 93 47 45 53 46 GESF.SUCC...GESF 2f70: 01 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 2f80: 43 43 a0 19 93 47 45 53 46 0a 03 70 00 47 45 53 CC...GESF..p.GES 2f90: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 Fp.PARM.SUCC...G 2fa0: 45 53 46 0a 04 70 00 47 45 53 46 70 00 50 41 52 ESF..p.GESFp.PAR 2fb0: 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 05 70 M.SUCC...GESF..p 2fc0: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 2fd0: a0 37 93 47 45 53 46 0a 06 70 7b 50 41 52 4d 0a .7.GESF..p{PARM. 2fe0: 0f 00 49 54 56 46 70 7a 7b 50 41 52 4d 0a f0 00 ..ITVFpz{PARM... 2ff0: 0a 04 00 49 54 56 4d 70 00 47 45 53 46 70 00 50 ...ITVMp.GESFp.P 3000: 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a ARM.SUCC...GESF. 3010: 07 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 3020: 43 43 a0 19 93 47 45 53 46 0a 08 70 00 47 45 53 CC...GESF..p.GES 3030: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 24 93 47 Fp.PARM.SUCC.$.G 3040: 45 53 46 0a 09 7b 50 41 52 4d 0a ff 49 42 54 54 ESF..{PARM..IBTT 3050: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 3060: 43 a0 46 05 93 47 45 53 46 0a 0a 7b 50 41 52 4d C.F..GESF..{PARM 3070: 0a ff 49 50 53 43 a0 21 7b 7a 50 41 52 4d 0a 08 ..IPSC.!{zPARM.. 3080: 00 0a ff 00 7b 7a 50 41 52 4d 0a 08 00 0a ff 49 ....{zPARM.....I 3090: 50 41 54 76 49 50 41 54 7b 7a 50 41 52 4d 0a 14 PATvIPAT{zPARM.. 30a0: 00 0a 07 49 42 49 41 70 00 47 45 53 46 70 00 50 ...IBIAp.GESFp.P 30b0: 41 52 4d a4 53 55 43 43 a0 40 06 93 47 45 53 46 ARM.SUCC.@..GESF 30c0: 0a 0b 7b 7a 50 41 52 4d 01 00 01 49 46 31 45 a0 ..{zPARM...IF1E. 30d0: 21 7b 50 41 52 4d 0c 00 e0 01 00 00 7b 7a 50 41 !{PARM......{zPA 30e0: 52 4d 0a 0d 00 0a 0f 49 44 4d 53 70 00 49 44 4d RM.....IDMSp.IDM 30f0: 4d a1 16 7b 7a 50 41 52 4d 0a 11 00 0a 0f 49 44 M..{zPARM.....ID 3100: 4d 53 70 01 49 44 4d 4d 70 00 47 45 53 46 70 00 MSp.IDMMp.GESFp. 3110: 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 PARM.SUCC...GESF 3120: 0a 10 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 ..p.GESFp.PARM.S 3130: 55 43 43 a0 1f 93 47 45 53 46 0a 11 7d 50 41 52 UCC...GESF..}PAR 3140: 4d 0b 00 01 50 41 52 4d 70 00 47 45 53 46 a4 53 M...PARMp.GESF.S 3150: 55 43 43 a0 49 04 93 47 45 53 46 0a 12 a0 26 7b UCC.I..GESF...&{ 3160: 50 41 52 4d 01 00 a0 10 93 7a 50 41 52 4d 01 00 PARM.....zPARM.. 3170: 01 70 01 49 53 53 43 a1 0c 70 00 47 45 53 46 a4 .p.ISSC..p.GESF. 3180: 43 52 49 54 a1 07 70 00 49 53 53 43 70 00 47 45 CRIT..p.ISSCp.GE 3190: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 SFp.PARM.SUCC... 31a0: 47 45 53 46 0a 13 70 00 47 45 53 46 70 00 50 41 GESF..p.GESFp.PA 31b0: 52 4d a4 53 55 43 43 70 00 47 45 53 46 a4 53 55 RM.SUCCp.GESF.SU 31c0: 43 43 a0 11 93 47 45 46 43 0a 04 70 47 42 44 41 CC...GEFC..pGBDA 31d0: 47 58 46 43 a0 11 93 47 45 46 43 0a 06 70 53 42 GXFC...GEFC..pSB 31e0: 43 42 47 58 46 43 70 00 47 45 46 43 70 01 53 43 CBGXFCp.GEFCp.SC 31f0: 49 53 70 00 47 53 53 45 70 00 53 43 49 45 a4 00 ISp.GSSEp.SCIE.. 3200: 14 19 50 44 52 44 00 a0 0c 92 44 52 44 59 5b 22 ..PDRD....DRDY[" 3210: 41 53 4c 50 a4 92 44 52 44 59 14 1d 50 53 54 53 ASLP..DRDY..PSTS 3220: 00 a0 0e 94 43 53 54 53 0a 02 5b 22 41 53 4c 50 ....CSTS..["ASLP 3230: a4 93 43 53 54 53 0a 03 14 47 06 47 4e 4f 54 02 ..CSTS...G.GNOT. 3240: a0 07 50 44 52 44 a4 01 a0 07 50 53 54 53 a4 01 ..PDRD....PSTS.. 3250: 70 68 43 45 56 54 70 0a 03 43 53 54 53 a0 2c 90 phCEVTp..CSTS.,. 3260: 93 43 48 50 44 00 93 69 00 a0 18 91 94 4f 53 59 .CHPD..i.....OSY 3270: 53 0b d0 07 95 4f 53 59 53 0b d6 07 86 50 43 49 S....OSYS....PCI 3280: 30 69 a1 07 86 47 46 58 30 69 86 47 46 58 30 0a 0i...GFX0i.GFX0. 3290: 80 a0 0c 92 50 53 54 53 70 00 43 45 56 54 a4 00 ....PSTSp.CEVT.. 32a0: 14 13 47 48 44 53 01 70 68 54 49 44 58 a4 47 4e ..GHDS.phTIDX.GN 32b0: 4f 54 01 00 14 14 47 4c 49 44 01 70 68 43 4c 49 OT....GLID.phCLI 32c0: 44 a4 47 4e 4f 54 0a 02 00 14 15 47 44 43 4b 01 D.GNOT.....GDCK. 32d0: 70 68 43 44 43 4b a4 47 4e 4f 54 0a 04 0a 80 14 phCDCK.GNOT..... 32e0: 19 50 41 52 44 00 a0 0c 92 41 52 44 59 5b 22 41 .PARD....ARDY["A 32f0: 53 4c 50 a4 92 41 52 44 59 14 46 0c 41 49 4e 54 SLP..ARDY.F.AINT 3300: 02 a0 0e 92 7b 54 43 48 45 79 01 68 00 00 a4 01 ....{TCHEy.h.... 3310: a0 07 50 41 52 44 a4 01 a0 4c 05 93 68 0a 02 a0 ..PARD...L..h... 3320: 33 43 50 46 4d a0 0e 93 43 50 46 4d 01 70 0a 06 3CPFM...CPFM.p.. 3330: 50 46 49 54 a0 0f 93 43 50 46 4d 0a 06 70 0a 08 PFIT...CPFM..p.. 3340: 50 46 49 54 a0 0e 93 43 50 46 4d 0a 08 70 01 50 PFIT...CPFM..p.P 3350: 46 49 54 a1 0c 7f 50 46 49 54 0a 07 50 46 49 54 FIT...PFIT..PFIT 3360: 7d 50 46 49 54 0c 00 00 00 80 50 46 49 54 70 0a }PFIT.....PFITp. 3370: 04 41 53 4c 43 a1 42 04 a0 28 93 68 01 70 78 77 .ASLC.B..(.h.pxw 3380: 69 0a ff 00 0a 64 00 00 42 43 4c 50 7d 42 43 4c i....d..BCLP}BCL 3390: 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 41 53 4c P.....BCLPp..ASL 33a0: 43 a1 16 a0 10 93 68 00 70 69 41 4c 53 49 70 01 C.....h.piALSIp. 33b0: 41 53 4c 43 a1 03 a4 01 70 00 4c 42 50 43 a4 00 ASLC....p.LBPC.. 33c0: 10 41 36 5c 00 5b 80 49 4f 5f 54 01 0b 00 08 0a .A6\.[.IO_T..... 33d0: 10 5b 81 0e 49 4f 5f 54 01 00 40 04 54 52 50 30 .[..IO_T..@.TRP0 33e0: 08 5b 80 50 4d 49 4f 01 0b 00 10 0a 80 5b 81 28 .[.PMIO......[.( 33f0: 50 4d 49 4f 01 00 40 15 00 08 00 02 41 43 50 57 PMIO..@.....ACPW 3400: 01 00 45 0b 00 01 47 50 45 43 01 00 4e 10 00 09 ..E...GPEC..N... 3410: 53 43 49 53 01 00 06 5b 80 47 50 49 4f 01 0b 80 SCIS...[.GPIO... 3420: 11 0a 3c 5b 81 40 0c 47 50 49 4f 01 47 55 30 30 ..<[.@.GPIO.GU00 3430: 08 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 .GU01.GU02.GU03. 3440: 47 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 GIO0.GIO1.GIO2.G 3450: 49 4f 33 08 00 20 47 4c 30 30 08 47 4c 30 31 08 IO3.. GL00.GL01. 3460: 47 4c 30 32 08 00 03 47 50 32 37 01 47 50 32 38 GL02...GP27.GP28 3470: 01 00 03 00 40 04 47 42 30 30 08 47 42 30 31 08 ....@.GB00.GB01. 3480: 47 42 30 32 08 47 42 30 33 08 00 40 08 47 49 56 GB02.GB03..@.GIV 3490: 30 08 00 03 4c 50 4f 4c 01 00 04 47 49 56 32 08 0...LPOL...GIV2. 34a0: 47 49 56 33 08 47 55 30 34 08 47 55 30 35 08 47 GIV3.GU04.GU05.G 34b0: 55 30 36 08 47 55 30 37 08 47 49 4f 34 08 47 49 U06.GU07.GIO4.GI 34c0: 4f 35 08 47 49 4f 36 08 47 49 4f 37 08 00 05 47 O5.GIO6.GIO7...G 34d0: 50 33 37 01 00 02 47 4c 30 35 08 47 4c 30 36 08 P37...GL05.GL06. 34e0: 47 4c 30 37 08 5b 80 52 43 52 42 00 0c 00 c0 d1 GL07.[.RCRB..... 34f0: fe 0b 00 40 5b 81 48 05 52 43 52 42 13 00 80 00 ...@[.H.RCRB.... 3500: 08 00 80 00 10 00 80 02 02 48 50 41 53 02 00 05 .........HPAS... 3510: 48 50 41 45 01 00 48 09 00 01 50 41 54 44 01 53 HPAE..H...PATD.S 3520: 41 54 44 01 53 4d 42 44 01 48 44 41 44 01 00 0b ATD.SMBD.HDAD... 3530: 52 50 31 44 01 52 50 32 44 01 52 50 33 44 01 52 RP1D.RP2D.RP3D.R 3540: 50 34 44 01 52 50 35 44 01 52 50 36 44 01 08 5f P4D.RP5D.RP6D.._ 3550: 53 30 5f 12 05 03 00 00 00 08 5f 53 33 5f 12 07 S0_......._S3_.. 3560: 03 0a 05 0a 05 00 08 5f 53 34 5f 12 07 03 0a 06 ......._S4_..... 3570: 0a 06 00 08 5f 53 35 5f 12 07 03 0a 07 0a 07 00 ...._S5_........ 3580: 14 45 04 47 45 54 50 09 a0 0e 93 7b 68 0a 09 00 .E.GETP....{h... 3590: 00 a4 0c ff ff ff ff a0 0d 93 7b 68 0a 09 00 0a ..........{h.... 35a0: 08 a4 0b 84 03 7a 7b 68 0b 00 03 00 0a 08 60 7a .....z{h......`z 35b0: 7b 68 0b 00 30 00 0a 0c 61 a4 77 0a 1e 74 0a 09 {h..0...a.w..t.. 35c0: 72 60 61 00 00 00 14 30 47 44 4d 41 0d a0 23 68 r`a....0GDMA..#h 35d0: a0 07 90 69 6c a4 0a 14 a0 0e 90 6a 6c a4 77 74 ...il......jl.wt 35e0: 0a 04 6b 00 0a 0f 00 a4 77 74 0a 04 6b 00 0a 1e ..k.....wt..k... 35f0: 00 a4 0c ff ff ff ff 14 1f 47 45 54 54 09 a4 77 .........GETT..w 3600: 0a 1e 74 0a 09 72 7b 7a 68 0a 02 00 0a 03 00 7b ..t..r{zh......{ 3610: 68 0a 03 00 00 00 00 14 44 06 47 45 54 46 0b 08 h.......D.GETF.. 3620: 54 4d 50 46 00 a0 0c 68 7d 54 4d 50 46 01 54 4d TMPF...h}TMPF.TM 3630: 50 46 a0 11 7b 6a 0a 02 00 7d 54 4d 50 46 0a 02 PF..{j...}TMPF.. 3640: 54 4d 50 46 a0 0d 69 7d 54 4d 50 46 0a 04 54 4d TMPF..i}TMPF..TM 3650: 50 46 a0 11 7b 6a 0a 20 00 7d 54 4d 50 46 0a 08 PF..{j. .}TMPF.. 3660: 54 4d 50 46 a0 12 7b 6a 0b 00 40 00 7d 54 4d 50 TMPF..{j..@.}TMP 3670: 46 0a 10 54 4d 50 46 a4 54 4d 50 46 14 3d 53 45 F..TMPF.TMPF.=SE 3680: 54 50 0b a0 08 94 68 0a f0 a4 0a 08 a1 2d a0 27 TP....h......-.' 3690: 7b 69 0a 02 00 a0 10 90 92 94 68 0a 78 7b 6a 0a {i........h.x{j. 36a0: 02 00 a4 0b 01 23 a0 0f 90 92 94 68 0a b4 7b 6a .....#.....h..{j 36b0: 01 00 a4 0b 01 21 a4 0b 01 10 14 37 53 44 4d 41 .....!.....7SDMA 36c0: 09 a0 08 92 94 68 0a 14 a4 01 a0 09 92 94 68 0a .....h........h. 36d0: 1e a4 0a 02 a0 08 92 94 68 0a 2d a4 01 a0 09 92 ........h.-..... 36e0: 94 68 0a 3c a4 0a 02 a0 08 92 94 68 0a 5a a4 01 .h.<.......h.Z.. 36f0: a4 00 14 2f 53 45 54 54 0b a0 25 7b 69 0a 02 00 .../SETT..%{i... 3700: a0 0f 90 92 94 68 0a 78 7b 6a 0a 02 00 a4 0a 0b .....h.x{j...... 3710: a0 0e 90 92 94 68 0a b4 7b 6a 01 00 a4 0a 09 a4 .....h..{j...... 3720: 0a 04 5b 82 4b 04 48 44 45 46 08 5f 41 44 52 0c ..[.K.HDEF._ADR. 3730: 00 00 1b 00 5b 80 48 44 41 52 02 0a 4c 0a 10 5b ....[.HDAR..L..[ 3740: 81 22 48 44 41 52 02 44 43 4b 41 01 00 07 44 43 ."HDAR.DCKA...DC 3750: 4b 4d 01 00 06 44 43 4b 53 01 00 30 00 0f 50 4d KM...DCKS..0..PM 3760: 45 53 01 08 5f 50 52 57 12 06 02 0a 0d 0a 03 5b ES.._PRW.......[ 3770: 82 41 10 52 50 30 31 08 5f 41 44 52 0c 00 00 1c .A.RP01._ADR.... 3780: 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 45 04 .[.PXCS..@..[.E. 3790: 50 58 43 53 40 00 40 09 00 0d 4c 41 53 58 01 00 PXCS@.@...LASX.. 37a0: 32 41 42 50 58 01 00 02 50 44 43 58 01 00 02 50 2ABPX...PDCX...P 37b0: 44 53 58 01 00 01 4c 53 43 58 01 00 27 00 10 50 DSX...LSCX..'..P 37c0: 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 01 50 4d SPX..O<..HPSX.PM 37d0: 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 44 52 00 SX.[..PXSX._ADR. 37e0: 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 .A._PRT..3GPIC.. 37f0: 2c 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ,............... 3800: ff ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a ................ 3810: 12 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 .............E.. 3820: 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 .A.........^^.LP 3830: 43 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e CBLNKA........^^ 3840: 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff .LPCBLNKB....... 3850: 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 ..^^.LPCBLNKC... 3860: 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b ......^^.LPCBLNK 3870: 44 00 5b 82 41 10 52 50 30 32 08 5f 41 44 52 0c D.[.A.RP02._ADR. 3880: 01 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b ....[.PXCS..@..[ 3890: 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c 41 53 .E.PXCS@.@...LAS 38a0: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 38b0: 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 ..PDSX...LSCX..' 38c0: 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 ..PSPX..O<..HPSX 38d0: 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 .PMSX.[..PXSX._A 38e0: 44 52 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 DR..A._PRT..3GPI 38f0: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 11 12 C..,............ 3900: 09 04 0b ff ff 01 00 0a 12 12 0a 04 0b ff ff 0a ................ 3910: 02 00 0a 13 12 0a 04 0b ff ff 0a 03 00 0a 10 a1 ................ 3920: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3930: 2e 4c 50 43 42 4c 4e 4b 42 00 12 12 04 0b ff ff .LPCBLNKB....... 3940: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 3950: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 3960: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3970: 4c 4e 4b 41 00 5b 82 4d 11 52 50 30 33 08 5f 41 LNKA.[.M.RP03._A 3980: 44 52 0c 02 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3990: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 39a0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 39b0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 39c0: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 39d0: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 39e0: 08 5f 41 44 52 00 08 2e 50 58 53 58 5f 52 4d 56 ._ADR...PXSX_RMV 39f0: 01 08 2e 50 58 53 58 5f 50 52 57 12 06 02 0a 09 ...PXSX_PRW..... 3a00: 0a 03 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 ...A._PRT..3GPIC 3a10: a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 12 12 09 ..,............. 3a20: 04 0b ff ff 01 00 0a 13 12 0a 04 0b ff ff 0a 02 ................ 3a30: 00 0a 10 12 0a 04 0b ff ff 0a 03 00 0a 11 a1 45 ...............E 3a40: 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e ...A.........^^. 3a50: 4c 50 43 42 4c 4e 4b 43 00 12 12 04 0b ff ff 01 LPCBLNKC........ 3a60: 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0b ^^.LPCBLNKD..... 3a70: ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 ....^^.LPCBLNKA. 3a80: 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3a90: 4e 4b 42 00 5b 82 4f 11 52 50 30 34 08 5f 41 44 NKB.[.O.RP04._AD 3aa0: 52 0c 03 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a R.....[.PXCS..@. 3ab0: c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c .[.E.PXCS@.@...L 3ac0: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 3ad0: 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 X...PDSX...LSCX. 3ae0: 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 .'..PSPX..O<..HP 3af0: 53 58 01 50 4d 53 58 01 5b 82 29 50 58 53 58 08 SX.PMSX.[.)PXSX. 3b00: 5f 41 44 52 00 14 1d 5f 50 52 57 00 a0 0d 57 4b _ADR..._PRW...WK 3b10: 4c 4e a4 12 06 02 0a 09 0a 03 a1 08 a4 12 05 02 LN.............. 3b20: 0a 09 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 ....A._PRT..3GPI 3b30: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 C..,............ 3b40: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 3b50: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 a1 ................ 3b60: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3b70: 2e 4c 50 43 42 4c 4e 4b 44 00 12 12 04 0b ff ff .LPCBLNKD....... 3b80: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 .^^.LPCBLNKA.... 3b90: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 .....^^.LPCBLNKB 3ba0: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3bb0: 4c 4e 4b 43 00 5b 82 41 10 52 50 30 35 08 5f 41 LNKC.[.A.RP05._A 3bc0: 44 52 0c 04 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3bd0: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 3be0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 3bf0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 3c00: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 3c10: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 3c20: 08 5f 41 44 52 00 14 41 09 5f 50 52 54 00 a0 33 ._ADR..A._PRT..3 3c30: 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 GPIC..,......... 3c40: 0a 10 12 09 04 0b ff ff 01 00 0a 11 12 0a 04 0b ................ 3c50: ff ff 0a 02 00 0a 12 12 0a 04 0b ff ff 0a 03 00 ................ 3c60: 0a 13 a1 45 05 a4 12 41 05 04 12 12 04 0b ff ff ...E...A........ 3c70: 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 12 04 .^^.LPCBLNKA.... 3c80: 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3c90: 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3ca0: 4e 4b 43 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c NKC.........^^.L 3cb0: 50 43 42 4c 4e 4b 44 00 5b 82 41 10 52 50 30 36 PCBLNKD.[.A.RP06 3cc0: 08 5f 41 44 52 0c 05 00 1c 00 5b 80 50 58 43 53 ._ADR.....[.PXCS 3cd0: 02 0a 40 0a c0 5b 81 45 04 50 58 43 53 40 00 40 ..@..[.E.PXCS@.@ 3ce0: 09 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 ...LASX..2ABPX.. 3cf0: 02 50 44 43 58 01 00 02 50 44 53 58 01 00 01 4c .PDCX...PDSX...L 3d00: 53 43 58 01 00 27 00 10 50 53 50 58 01 00 4f 3c SCX..'..PSPX..O< 3d10: 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 ..HPSX.PMSX.[..P 3d20: 58 53 58 08 5f 41 44 52 00 14 41 09 5f 50 52 54 XSX._ADR..A._PRT 3d30: 00 a0 33 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ..3GPIC..,...... 3d40: ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a 12 12 ................ 3d50: 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ff ff ................ 3d60: 0a 03 00 0a 10 a1 45 05 a4 12 41 05 04 12 12 04 ......E...A..... 3d70: 0b ff ff 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3d80: 12 12 04 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 3d90: 4b 43 00 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 KC.........^^.LP 3da0: 43 42 4c 4e 4b 44 00 12 13 04 0b ff ff 0a 03 5e CBLNKD.........^ 3db0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 4d 06 55 ^.LPCBLNKA.[.M.U 3dc0: 53 42 31 08 5f 41 44 52 0c 00 00 1d 00 5b 80 55 SB1._ADR.....[.U 3dd0: 31 43 53 02 0a c4 0a 04 5b 81 0b 55 31 43 53 03 1CS.....[..U1CS. 3de0: 55 31 45 4e 02 08 5f 50 52 57 12 06 02 0a 03 0a U1EN.._PRW...... 3df0: 03 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 ..$_PSW...hp.ACP 3e00: 57 a0 0c 41 43 50 57 70 0a 03 55 31 45 4e a1 07 W..ACPWp..U1EN.. 3e10: 70 00 55 31 45 4e 14 09 5f 53 33 44 00 a4 0a 02 p.U1EN.._S3D.... 3e20: 14 09 5f 53 34 44 00 a4 0a 02 5b 82 4c 06 55 53 .._S4D....[.L.US 3e30: 42 32 08 5f 41 44 52 0c 01 00 1d 00 5b 80 55 32 B2._ADR.....[.U2 3e40: 43 53 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 CS.....[..U2CS.U 3e50: 32 45 4e 02 08 5f 50 52 57 12 06 02 0a 04 0a 03 2EN.._PRW....... 3e60: 14 23 5f 50 53 57 01 a0 14 68 70 01 41 43 50 57 .#_PSW...hp.ACPW 3e70: a0 0b 41 43 50 57 70 01 55 32 45 4e a1 07 70 00 ..ACPWp.U2EN..p. 3e80: 55 32 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 U2EN.._S3D...... 3e90: 5f 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 33 _S4D....[.M.USB3 3ea0: 08 5f 41 44 52 0c 02 00 1d 00 5b 80 55 32 43 53 ._ADR.....[.U2CS 3eb0: 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 33 45 .....[..U2CS.U3E 3ec0: 4e 02 08 5f 50 52 57 12 06 02 0a 0c 0a 03 14 24 N.._PRW........$ 3ed0: 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c _PSW...hp.ACPW.. 3ee0: 41 43 50 57 70 0a 03 55 33 45 4e a1 07 70 00 55 ACPWp..U3EN..p.U 3ef0: 33 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 3EN.._S3D......_ 3f00: 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 34 08 S4D....[.M.USB4. 3f10: 5f 41 44 52 0c 00 00 1a 00 5b 80 55 34 43 53 02 _ADR.....[.U4CS. 3f20: 0a c4 0a 04 5b 81 0b 55 34 43 53 03 55 34 45 4e ....[..U4CS.U4EN 3f30: 02 08 5f 50 52 57 12 06 02 0a 0e 0a 03 14 24 5f .._PRW........$_ 3f40: 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c 41 PSW...hp.ACPW..A 3f50: 43 50 57 70 0a 03 55 34 45 4e a1 07 70 00 55 34 CPWp..U4EN..p.U4 3f60: 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 EN.._S3D......_S 3f70: 34 44 00 a4 0a 02 5b 82 41 06 55 53 42 35 08 5f 4D....[.A.USB5._ 3f80: 41 44 52 0c 01 00 1a 00 5b 80 55 35 43 53 02 0a ADR.....[.U5CS.. 3f90: c4 0a 04 5b 81 0b 55 35 43 53 03 55 35 45 4e 02 ...[..U5CS.U5EN. 3fa0: 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 .$_PSW...hp.ACPW 3fb0: a0 0c 41 43 50 57 70 0a 03 55 35 45 4e a1 07 70 ..ACPWp..U5EN..p 3fc0: 00 55 35 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 .U5EN.._S3D..... 3fd0: 09 5f 53 34 44 00 a4 0a 02 5b 82 4b 0a 45 48 43 ._S4D....[.K.EHC 3fe0: 31 08 5f 41 44 52 0c 07 00 1d 00 5b 80 55 37 43 1._ADR.....[.U7C 3ff0: 53 02 0a 54 0a 04 5b 81 0d 55 37 43 53 03 00 0f S..T..[..U7CS... 4000: 50 4d 45 53 01 5b 82 4f 05 48 55 42 37 08 5f 41 PMES.[.O.HUB7._A 4010: 44 52 00 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 DR.[..PRT1._ADR. 4020: 5b 82 0c 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 [..PRT2._ADR..[. 4030: 0c 50 52 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 .PRT3._ADR..[..P 4040: 52 54 34 08 5f 41 44 52 0a 04 5b 82 0c 50 52 54 RT4._ADR..[..PRT 4050: 35 08 5f 41 44 52 0a 05 5b 82 0c 50 52 54 36 08 5._ADR..[..PRT6. 4060: 5f 41 44 52 0a 06 08 5f 50 52 57 12 06 02 0a 0d _ADR..._PRW..... 4070: 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 ...._S3D......_S 4080: 34 44 00 a4 0a 02 5b 82 4f 08 45 48 43 32 08 5f 4D....[.O.EHC2._ 4090: 41 44 52 0c 07 00 1a 00 5b 80 55 46 43 53 02 0a ADR.....[.UFCS.. 40a0: 54 0a 04 5b 81 0d 55 46 43 53 03 00 0f 50 4d 45 T..[..UFCS...PME 40b0: 53 01 5b 82 43 04 48 55 42 37 08 5f 41 44 52 00 S.[.C.HUB7._ADR. 40c0: 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 5b 82 0c [..PRT1._ADR.[.. 40d0: 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 0c 50 52 PRT2._ADR..[..PR 40e0: 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 52 54 34 T3._ADR..[..PRT4 40f0: 08 5f 41 44 52 0a 04 08 5f 50 52 57 12 06 02 0a ._ADR..._PRW.... 4100: 0d 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f ....._S3D......_ 4110: 53 34 44 00 a4 0a 02 5b 82 4a 06 50 43 49 42 08 S4D....[.J.PCIB. 4120: 5f 41 44 52 0c 00 00 1e 00 14 49 05 5f 50 52 54 _ADR......I._PRT 4130: 00 a0 21 47 50 49 43 a4 12 1a 02 12 0b 04 0c ff ..!GPIC......... 4140: ff 06 00 00 00 0a 16 12 0b 04 0c ff ff 06 00 01 ................ 4150: 00 0a 17 a1 2f a4 12 2c 02 12 14 04 0c ff ff 06 ..../..,........ 4160: 00 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 47 00 12 14 ..^^.LPCBLNKG... 4170: 04 0c ff ff 06 00 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 4180: 4b 48 00 5b 82 8d 2e 01 4c 50 43 42 08 5f 41 44 KH.[....LPCB._AD 4190: 52 0c 00 00 1f 00 5b 80 4c 50 43 30 02 0a 40 0a R.....[.LPC0..@. 41a0: c0 5b 81 4d 07 4c 50 43 30 00 00 40 10 50 41 52 .[.M.LPC0..@.PAR 41b0: 43 08 50 42 52 43 08 50 43 52 43 08 50 44 52 43 C.PBRC.PCRC.PDRC 41c0: 08 00 20 50 45 52 43 08 50 46 52 43 08 50 47 52 .. PERC.PFRC.PGR 41d0: 43 08 50 48 52 43 08 00 40 0a 43 4d 41 52 03 00 C.PHRC..@.CMAR.. 41e0: 01 43 4d 42 52 03 00 01 4c 50 54 52 02 00 06 43 .CMBR...LPTR...C 41f0: 4d 41 44 01 43 4d 42 44 01 4c 50 54 44 01 46 44 MAD.CMBD.LPTD.FD 4200: 44 44 01 00 2c 49 4f 52 32 10 00 02 4c 47 52 4d DD..,IOR2...LGRM 4210: 06 00 48 32 52 41 45 4e 01 00 0d 52 43 42 41 12 ..H2RAEN...RCBA. 4220: 5b 80 53 4d 49 30 01 0c 00 fe 00 00 0c 02 00 00 [.SMI0.......... 4230: 00 5b 81 0b 53 4d 49 30 00 53 4d 49 43 08 5b 80 .[..SMI0.SMIC.[. 4240: 53 4d 49 31 00 0c bd 2e 6e bf 0c 90 00 00 00 5b SMI1....n......[ 4250: 81 16 53 4d 49 31 00 42 43 4d 44 08 44 49 44 5f ..SMI1.BCMD.DID_ 4260: 20 49 4e 46 4f 40 40 5b 81 15 53 4d 49 31 00 01 INFO@@[..SMI1.. 4270: 01 00 00 28 49 4e 46 5f 08 49 4e 46 31 20 5b 01 ...(INF_.INF1 [. 4280: 50 53 4d 58 00 14 27 50 48 53 53 01 5b 23 50 53 PSMX..'PHSS.[#PS 4290: 4d 58 ff ff 70 0a 80 42 43 4d 44 70 68 44 49 44 MX..p..BCMDphDID 42a0: 5f 70 00 53 4d 49 43 5b 27 50 53 4d 58 5b 82 41 _p.SMIC['PSMX[.A 42b0: 0a 4c 4e 4b 41 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKA._HID.A.... 42c0: 5f 55 49 44 01 14 0d 5f 44 49 53 08 70 0a 80 50 _UID..._DIS.p..P 42d0: 41 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ARC._PRS....#... 42e0: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 41 11 09 y..8_CRS..RTLA.. 42f0: 0a 06 23 00 00 18 79 00 8b 52 54 4c 41 01 49 52 ..#...y..RTLA.IR 4300: 51 30 70 00 49 52 51 30 79 01 7b 50 41 52 43 0a Q0p.IRQ0y.{PARC. 4310: 0f 00 49 52 51 30 a4 52 54 4c 41 14 1b 5f 53 52 ..IRQ0.RTLA.._SR 4320: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 4330: 60 70 60 50 41 52 43 14 18 5f 53 54 41 08 a0 0c `p`PARC.._STA... 4340: 7b 50 41 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PARC........... 4350: 5b 82 42 0a 4c 4e 4b 42 08 5f 48 49 44 0c 41 d0 [.B.LNKB._HID.A. 4360: 0c 0f 08 5f 55 49 44 0a 02 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4370: 70 0a 80 50 42 52 43 08 5f 50 52 53 11 09 0a 06 p..PBRC._PRS.... 4380: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4390: 4c 42 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LB....#...y..RTL 43a0: 42 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 B.IRQ0p.IRQ0y.{P 43b0: 42 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 42 14 BRC...IRQ0.RTLB. 43c0: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 43d0: 51 30 60 76 60 70 60 50 42 52 43 14 18 5f 53 54 Q0`v`p`PBRC.._ST 43e0: 41 08 a0 0c 7b 50 42 52 43 0a 80 00 a4 0a 09 a1 A...{PBRC....... 43f0: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 43 08 5f 48 49 ....[.B.LNKC._HI 4400: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 03 14 0d 5f D.A...._UID...._ 4410: 44 49 53 08 70 0a 80 50 43 52 43 08 5f 50 52 53 DIS.p..PCRC._PRS 4420: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 4430: 08 08 52 54 4c 43 11 09 0a 06 23 00 00 18 79 00 ..RTLC....#...y. 4440: 8b 52 54 4c 43 01 49 52 51 30 70 00 49 52 51 30 .RTLC.IRQ0p.IRQ0 4450: 79 01 7b 50 43 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PCRC...IRQ0.R 4460: 54 4c 43 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLC.._SRS..h.IRQ 4470: 30 82 49 52 51 30 60 76 60 70 60 50 43 52 43 14 0.IRQ0`v`p`PCRC. 4480: 18 5f 53 54 41 08 a0 0c 7b 50 43 52 43 0a 80 00 ._STA...{PCRC... 4490: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 44 ........[.B.LNKD 44a0: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 44b0: 04 14 0d 5f 44 49 53 08 70 0a 80 50 44 52 43 08 ..._DIS.p..PDRC. 44c0: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 44d0: 5f 43 52 53 08 08 52 54 4c 44 11 09 0a 06 23 00 _CRS..RTLD....#. 44e0: 00 18 79 00 8b 52 54 4c 44 01 49 52 51 30 70 00 ..y..RTLD.IRQ0p. 44f0: 49 52 51 30 79 01 7b 50 44 52 43 0a 0f 00 49 52 IRQ0y.{PDRC...IR 4500: 51 30 a4 52 54 4c 44 14 1b 5f 53 52 53 09 8b 68 Q0.RTLD.._SRS..h 4510: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 4520: 44 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 44 52 DRC.._STA...{PDR 4530: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a C...........[.B. 4540: 4c 4e 4b 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f LNKE._HID.A...._ 4550: 55 49 44 0a 05 14 0d 5f 44 49 53 08 70 0a 80 50 UID...._DIS.p..P 4560: 45 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ERC._PRS....#... 4570: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 45 11 09 y..8_CRS..RTLE.. 4580: 0a 06 23 00 00 18 79 00 8b 52 54 4c 45 01 49 52 ..#...y..RTLE.IR 4590: 51 30 70 00 49 52 51 30 79 01 7b 50 45 52 43 0a Q0p.IRQ0y.{PERC. 45a0: 0f 00 49 52 51 30 a4 52 54 4c 45 14 1b 5f 53 52 ..IRQ0.RTLE.._SR 45b0: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 45c0: 60 70 60 50 45 52 43 14 18 5f 53 54 41 08 a0 0c `p`PERC.._STA... 45d0: 7b 50 45 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PERC........... 45e0: 5b 82 42 0a 4c 4e 4b 46 08 5f 48 49 44 0c 41 d0 [.B.LNKF._HID.A. 45f0: 0c 0f 08 5f 55 49 44 0a 06 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4600: 70 0a 80 50 46 52 43 08 5f 50 52 53 11 09 0a 06 p..PFRC._PRS.... 4610: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4620: 4c 46 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LF....#...y..RTL 4630: 46 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 F.IRQ0p.IRQ0y.{P 4640: 46 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 46 14 FRC...IRQ0.RTLF. 4650: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 4660: 51 30 60 76 60 70 60 50 46 52 43 14 18 5f 53 54 Q0`v`p`PFRC.._ST 4670: 41 08 a0 0c 7b 50 46 52 43 0a 80 00 a4 0a 09 a1 A...{PFRC....... 4680: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 47 08 5f 48 49 ....[.B.LNKG._HI 4690: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 0d 5f D.A...._UID...._ 46a0: 44 49 53 08 70 0a 80 50 47 52 43 08 5f 50 52 53 DIS.p..PGRC._PRS 46b0: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 46c0: 08 08 52 54 4c 47 11 09 0a 06 23 00 00 18 79 00 ..RTLG....#...y. 46d0: 8b 52 54 4c 47 01 49 52 51 30 70 00 49 52 51 30 .RTLG.IRQ0p.IRQ0 46e0: 79 01 7b 50 47 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PGRC...IRQ0.R 46f0: 54 4c 47 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLG.._SRS..h.IRQ 4700: 30 82 49 52 51 30 60 76 60 70 60 50 47 52 43 14 0.IRQ0`v`p`PGRC. 4710: 18 5f 53 54 41 08 a0 0c 7b 50 47 52 43 0a 80 00 ._STA...{PGRC... 4720: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 48 ........[.B.LNKH 4730: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 4740: 08 14 0d 5f 44 49 53 08 70 0a 80 50 48 52 43 08 ..._DIS.p..PHRC. 4750: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 4760: 5f 43 52 53 08 08 52 54 4c 48 11 09 0a 06 23 00 _CRS..RTLH....#. 4770: 00 18 79 00 8b 52 54 4c 48 01 49 52 51 30 70 00 ..y..RTLH.IRQ0p. 4780: 49 52 51 30 79 01 7b 50 48 52 43 0a 0f 00 49 52 IRQ0y.{PHRC...IR 4790: 51 30 a4 52 54 4c 48 14 1b 5f 53 52 53 09 8b 68 Q0.RTLH.._SRS..h 47a0: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 47b0: 48 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 48 52 HRC.._STA...{PHR 47c0: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 3d 44 C...........[.=D 47d0: 4d 41 43 08 5f 48 49 44 0c 41 d0 02 00 08 5f 43 MAC._HID.A...._C 47e0: 52 53 11 28 0a 25 47 01 00 00 00 00 01 20 47 01 RS.(.%G...... G. 47f0: 81 00 81 00 01 11 47 01 93 00 93 00 01 0d 47 01 ......G.......G. 4800: c0 00 c0 00 01 20 2a 10 01 79 00 5b 82 26 46 57 ..... *..y.[.&FW 4810: 48 44 08 5f 48 49 44 0c 25 d4 08 00 08 5f 43 52 HD._HID.%...._CR 4820: 53 11 11 0a 0e 86 09 00 00 00 00 00 ff 00 00 00 S............... 4830: 01 79 00 5b 82 40 0b 48 50 45 54 08 5f 48 49 44 .y.[.@.HPET._HID 4840: 0c 41 d0 01 03 08 5f 43 49 44 0c 41 d0 0c 01 08 .A...._CID.A.... 4850: 42 55 46 30 11 11 0a 0e 86 09 00 00 00 00 d0 fe BUF0............ 4860: 00 04 00 00 79 00 14 27 5f 53 54 41 00 a0 13 92 ....y..'_STA.... 4870: 95 4f 53 59 53 0b d1 07 a0 08 48 50 41 45 a4 0a .OSYS.....HPAE.. 4880: 0f a1 0a a0 08 48 50 41 45 a4 0a 0b a4 00 14 46 .....HPAE......F 4890: 05 5f 43 52 53 08 a0 49 04 48 50 41 45 8a 42 55 ._CRS..I.HPAE.BU 48a0: 46 30 0a 04 48 50 54 30 a0 11 93 48 50 41 53 01 F0..HPT0...HPAS. 48b0: 70 0c 00 10 d0 fe 48 50 54 30 a0 12 93 48 50 41 p.....HPT0...HPA 48c0: 53 0a 02 70 0c 00 20 d0 fe 48 50 54 30 a0 12 93 S..p.. ..HPT0... 48d0: 48 50 41 53 0a 03 70 0c 00 30 d0 fe 48 50 54 30 HPAS..p..0..HPT0 48e0: a4 42 55 46 30 5b 82 45 0a 49 50 49 43 08 5f 48 .BUF0[.E.IPIC._H 48f0: 49 44 0b 41 d0 08 5f 43 52 53 11 41 09 0a 8d 47 ID.A.._CRS.A...G 4900: 01 20 00 20 00 01 02 47 01 24 00 24 00 01 02 47 . . ...G.$.$...G 4910: 01 28 00 28 00 01 02 47 01 2c 00 2c 00 01 02 47 .(.(...G.,.,...G 4920: 01 30 00 30 00 01 02 47 01 34 00 34 00 01 02 47 .0.0...G.4.4...G 4930: 01 38 00 38 00 01 02 47 01 3c 00 3c 00 01 02 47 .8.8...G.<.<...G 4940: 01 a0 00 a0 00 01 02 47 01 a4 00 a4 00 01 02 47 .......G.......G 4950: 01 a8 00 a8 00 01 02 47 01 ac 00 ac 00 01 02 47 .......G.......G 4960: 01 b0 00 b0 00 01 02 47 01 b4 00 b4 00 01 02 47 .......G.......G 4970: 01 b8 00 b8 00 01 02 47 01 bc 00 bc 00 01 02 47 .......G.......G 4980: 01 d0 04 d0 04 01 02 22 04 00 79 00 5b 82 25 4d ......."..y.[.%M 4990: 41 54 48 08 5f 48 49 44 0c 41 d0 0c 04 08 5f 43 ATH._HID.A...._C 49a0: 52 53 11 10 0a 0d 47 01 f0 00 f0 00 01 01 22 00 RS....G.......". 49b0: 20 79 00 5b 82 4b 09 4c 44 52 43 08 5f 48 49 44 y.[.K.LDRC._HID 49c0: 0c 41 d0 0c 02 08 5f 55 49 44 0a 02 08 5f 43 52 .A...._UID..._CR 49d0: 53 11 4e 07 0a 7a 47 01 2e 00 2e 00 01 02 47 01 S.N..zG.......G. 49e0: 4e 00 4e 00 01 02 47 01 61 00 61 00 01 01 47 01 N.N...G.a.a...G. 49f0: 63 00 63 00 01 01 47 01 65 00 65 00 01 01 47 01 c.c...G.e.e...G. 4a00: 67 00 67 00 01 01 47 01 80 00 80 00 01 01 47 01 g.g...G.......G. 4a10: 92 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 ......G.......G. 4a20: 80 06 80 06 01 20 47 01 00 08 00 08 01 10 47 01 ..... G.......G. 4a30: 00 10 00 10 01 80 47 01 80 11 80 11 01 40 47 01 ......G......@G. 4a40: 00 fe 00 fe 01 01 47 01 00 ff 00 ff 01 80 79 00 ......G.......y. 4a50: 5b 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b [.%RTC_._HID.A.. 4a60: 00 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 .._CRS....G.p.p. 4a70: 01 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f .."..y.[.-TIMR._ 4a80: 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a HID.A...._CRS... 4a90: 15 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 .G.@.@...G.P.P.. 4aa0: 04 22 01 00 79 00 5b 82 32 41 43 41 44 08 5f 48 ."..y.[.2ACAD._H 4ab0: 49 44 0d 41 43 50 49 30 30 30 33 00 08 5f 50 43 ID.ACPI0003.._PC 4ac0: 4c 12 06 01 5f 53 42 5f 14 11 5f 50 53 52 00 70 L..._SB_.._PSR.p 4ad0: 01 41 43 50 57 a4 41 43 50 57 14 1a 45 43 4f 4b .ACPW.ACPW..ECOK 4ae0: 00 a0 0f 93 5e 2e 45 43 30 5f 5a 30 30 39 01 a4 ....^.EC0_Z009.. 4af0: 01 a1 03 a4 00 5b 82 4e 6f 45 43 30 5f 08 5f 48 .....[.NoEC0_._H 4b00: 49 44 0c 41 d0 0c 09 08 5f 47 50 45 0a 1c 08 5a ID.A...._GPE...Z 4b10: 30 30 39 00 08 5f 43 52 53 11 15 0a 12 47 01 62 009.._CRS....G.b 4b20: 00 62 00 01 01 47 01 66 00 66 00 01 01 79 00 14 .b...G.f.f...y.. 4b30: 3b 5f 52 45 47 02 a0 34 93 68 0a 03 70 69 5a 30 ;_REG..4.h..piZ0 4b40: 30 39 a0 28 5b 12 5f 4f 53 49 60 70 00 42 54 44 09.([._OSI`p.BTD 4b50: 53 a0 19 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 S.._OSI.Windows 4b60: 32 30 30 36 00 70 01 42 54 44 53 5b 80 45 52 41 2006.p.BTDS[.ERA 4b70: 4d 03 00 0a ff 5b 81 4e 2e 45 52 41 4d 11 00 40 M....[.N.ERAM..@ 4b80: 30 53 4d 50 52 08 53 4d 53 54 08 53 4d 41 44 08 0SMPR.SMST.SMAD. 4b90: 53 4d 43 4d 08 53 4d 44 30 40 10 42 43 4e 54 08 SMCM.SMD0@.BCNT. 4ba0: 53 4d 41 41 18 00 40 04 43 48 47 4d 10 43 48 47 SMAA..@.CHGM.CHG 4bb0: 53 10 45 4e 49 44 08 45 4e 49 42 08 45 4e 44 44 S.ENID.ENIB.ENDD 4bc0: 08 43 48 47 56 08 43 48 47 41 10 42 41 4c 30 01 .CHGV.CHGA.BAL0. 4bd0: 42 41 4c 31 01 42 41 4c 32 01 42 41 4c 33 01 42 BAL1.BAL2.BAL3.B 4be0: 42 43 30 01 42 42 43 31 01 42 42 43 32 01 42 42 BC0.BBC1.BBC2.BB 4bf0: 43 33 01 00 08 50 48 44 44 01 49 46 44 44 01 49 C3...PHDD.IFDD.I 4c00: 4f 44 44 01 53 48 44 44 01 53 31 32 30 01 45 46 ODD.SHDD.S120.EF 4c10: 44 44 01 43 52 54 44 01 53 50 57 52 01 53 42 54 DD.CRTD.SPWR.SBT 4c20: 4e 01 56 49 44 4f 01 56 4f 4c 44 01 56 4f 4c 55 N.VIDO.VOLD.VOLU 4c30: 01 4d 55 54 45 01 43 4f 4e 54 01 42 52 47 54 01 .MUTE.CONT.BRGT. 4c40: 48 42 54 4e 01 53 34 53 54 01 53 4b 45 59 01 42 HBTN.S4ST.SKEY.B 4c50: 4b 45 59 01 54 4f 55 50 01 46 4e 42 4e 01 4c 49 KEY.TOUP.FNBN.LI 4c60: 44 46 01 44 49 47 4d 01 55 57 41 4b 01 00 08 44 DF.DIGM.UWAK...D 4c70: 4b 53 50 01 44 4b 49 4e 01 44 4b 49 44 01 44 4b KSP.DKIN.DKID.DK 4c80: 4f 4b 01 00 04 44 4b 50 57 01 00 07 42 54 4e 53 OK...DKPW...BTNS 4c90: 08 53 31 4c 44 01 53 33 4c 44 01 56 47 41 51 01 .S1LD.S3LD.VGAQ. 4ca0: 50 43 4d 51 01 50 43 4d 52 01 41 44 50 54 01 53 PCMQ.PCMR.ADPT.S 4cb0: 4c 4c 53 01 53 59 53 37 01 50 57 41 4b 01 4d 57 LLS.SYS7.PWAK.MW 4cc0: 41 4b 01 4c 57 41 4b 01 00 05 00 28 54 43 4e 4c AK.LWAK....(TCNL 4cd0: 08 54 4d 50 49 08 54 4d 53 44 08 46 41 53 4e 04 .TMPI.TMSD.FASN. 4ce0: 46 41 53 55 04 50 43 56 4c 04 00 02 53 57 54 4f FASU.PCVL...SWTO 4cf0: 01 48 57 54 4f 01 4d 4f 44 45 01 46 41 4e 53 02 .HWTO.MODE.FANS. 4d00: 49 4e 49 54 01 46 41 4e 31 01 46 41 4e 32 01 46 INIT.FAN1.FAN2.F 4d10: 41 4e 54 01 53 4b 4e 4d 01 43 54 4d 50 08 4c 49 ANT.SKNM.CTMP.LI 4d20: 44 45 01 50 4d 45 45 01 50 57 42 45 01 52 4e 47 DE.PMEE.PWBE.RNG 4d30: 45 01 42 54 57 45 01 44 43 4b 45 01 00 02 53 4b E.BTWE.DCKE...SK 4d40: 54 58 08 53 4b 54 42 08 53 4b 54 43 08 53 4b 54 TX.SKTB.SKTC.SKT 4d50: 41 08 00 08 48 41 50 4c 02 48 41 50 52 01 00 05 A...HAPL.HAPR... 4d60: 42 54 44 54 01 42 54 50 57 01 42 54 44 53 01 42 BTDT.BTPW.BTDS.B 4d70: 54 50 53 01 42 54 53 57 01 42 54 57 4b 01 42 54 TPS.BTSW.BTWK.BT 4d80: 4c 44 01 00 01 42 52 54 53 08 43 4e 54 53 08 57 LD...BRTS.CNTS.W 4d90: 4c 41 54 01 42 54 41 54 01 57 4c 45 58 01 42 54 LAT.BTAT.WLEX.BT 4da0: 45 58 01 4b 4c 53 57 01 57 4c 4f 4b 01 00 02 50 EX.KLSW.WLOK...P 4db0: 54 49 44 08 43 50 55 54 08 45 50 4b 54 08 47 48 TID.CPUT.EPKT.GH 4dc0: 49 44 08 00 04 42 4d 46 30 03 42 54 59 30 01 42 ID...BMF0.BTY0.B 4dd0: 53 54 30 08 42 52 43 30 10 42 53 4e 30 10 42 50 ST0.BRC0.BSN0.BP 4de0: 56 30 10 42 44 56 30 10 42 44 43 30 10 42 46 43 V0.BDV0.BDC0.BFC 4df0: 30 10 47 41 55 30 08 43 59 43 30 08 42 50 43 30 0.GAU0.CYC0.BPC0 4e00: 10 42 41 43 30 10 42 41 54 30 08 42 54 57 30 10 .BAC0.BAT0.BTW0. 4e10: 42 44 4e 30 08 00 40 04 00 04 42 4d 46 31 03 42 BDN0..@...BMF1.B 4e20: 54 59 31 01 42 53 54 31 08 42 52 43 31 10 42 53 TY1.BST1.BRC1.BS 4e30: 4e 31 10 42 50 56 31 10 42 44 56 31 10 42 44 43 N1.BPV1.BDV1.BDC 4e40: 31 10 42 46 43 31 10 47 41 55 31 08 43 59 43 31 1.BFC1.GAU1.CYC1 4e50: 08 42 50 43 31 10 42 41 43 31 10 42 41 54 31 08 .BPC1.BAC1.BAT1. 4e60: 42 54 57 31 10 14 37 5f 51 31 31 00 70 0a 87 50 BTW1..7_Q11.p..P 4e70: 38 30 48 a0 13 49 47 44 53 5e 5e 5e 2e 47 46 58 80H..IGDS^^^.GFX 4e80: 30 42 52 54 4e 0a 87 a1 15 86 5e 5e 5e 2f 03 50 0BRTN.....^^^/.P 4e90: 45 47 50 56 47 41 5f 4c 43 44 5f 0a 87 14 37 5f EGPVGA_LCD_...7_ 4ea0: 51 31 32 00 70 0a 86 50 38 30 48 a0 13 49 47 44 Q12.p..P80H..IGD 4eb0: 53 5e 5e 5e 2e 47 46 58 30 42 52 54 4e 0a 86 a1 S^^^.GFX0BRTN... 4ec0: 15 86 5e 5e 5e 2f 03 50 45 47 50 56 47 41 5f 4c ..^^^/.PEGPVGA_L 4ed0: 43 44 5f 0a 86 14 40 05 5f 51 31 43 00 70 0d 3d CD_...@._Q1C.p.= 4ee0: 3d 3d 3d 3d 51 55 45 52 59 5f 31 43 3d 3d 3d 3d ====QUERY_1C==== 4ef0: 3d 00 5b 31 a0 31 56 49 44 4f a0 12 49 47 44 53 =.[1.1VIDO..IGDS 4f00: 5e 5e 5e 2e 47 46 58 30 47 48 44 53 00 a1 12 5e ^^^.GFX0GHDS...^ 4f10: 5e 5e 2f 03 50 45 47 50 56 47 41 5f 44 53 53 57 ^^/.PEGPVGA_DSSW 4f20: 70 00 56 49 44 4f 14 21 5f 51 31 44 00 70 0d 3d p.VIDO.!_Q1D.p.= 4f30: 3d 3d 3d 3d 51 55 45 52 59 5f 31 44 3d 3d 3d 3d ====QUERY_1D==== 4f40: 3d 00 5b 31 50 43 4c 4b 14 21 5f 51 31 45 00 70 =.[1PCLK.!_Q1E.p 4f50: 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 31 45 3d 3d .=====QUERY_1E== 4f60: 3d 3d 3d 00 5b 31 50 43 4c 4b 14 39 5f 51 32 35 ===.[1PCLK.9_Q25 4f70: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 35 .p.=====QUERY_25 4f80: 3d 3d 3d 3d 3d 00 5b 31 5b 22 0b e8 03 86 5e 5e =====.[1["....^^ 4f90: 42 41 54 31 0a 81 5b 22 0b e8 03 86 5e 5e 42 41 BAT1..["....^^BA 4fa0: 54 31 0a 80 14 2f 5f 51 33 34 00 70 0d 3d 3d 3d T1.../_Q34.p.=== 4fb0: 3d 3d 51 55 45 52 59 5f 33 34 3d 3d 3d 3d 3d 00 ==QUERY_34=====. 4fc0: 5b 31 a0 11 42 4b 45 59 50 48 53 53 0a 71 70 00 [1..BKEYPHSS.qp. 4fd0: 42 4b 45 59 14 32 5f 51 33 37 00 70 0d 3d 3d 3d BKEY.2_Q37.p.=== 4fe0: 3d 3d 51 55 45 52 59 5f 33 37 3d 3d 3d 3d 3d 00 ==QUERY_37=====. 4ff0: 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 03 86 5e [1.ACAD..["....^ 5000: 5e 42 41 54 31 0a 80 14 32 5f 51 33 38 00 70 0d ^BAT1...2_Q38.p. 5010: 3d 3d 3d 3d 3d 51 55 45 52 59 5f 33 38 3d 3d 3d =====QUERY_38=== 5020: 3d 3d 00 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 ==.[1.ACAD..[".. 5030: 03 86 5e 5e 42 41 54 31 0a 80 14 29 5f 51 32 44 ..^^BAT1...)_Q2D 5040: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 44 .p.=====QUERY_2D 5050: 3d 3d 3d 3d 3d 00 5b 31 70 00 44 54 53 4d 54 52 =====.[1p.DTSMTR 5060: 41 50 0a 46 14 29 5f 51 32 45 00 70 0d 3d 3d 3d AP.F.)_Q2E.p.=== 5070: 3d 3d 51 55 45 52 59 5f 32 45 3d 3d 3d 3d 3d 00 ==QUERY_2E=====. 5080: 5b 31 70 01 44 54 53 4d 54 52 41 50 0a 46 5b 80 [1p.DTSMTRAP.F[. 5090: 43 43 4c 4b 01 0b 10 10 0a 04 5b 81 20 43 43 4c CCLK......[. CCL 50a0: 4b 03 00 01 44 55 54 59 03 54 48 45 4e 01 00 03 K...DUTY.THEN... 50b0: 46 54 54 5f 01 00 08 54 53 54 53 01 5b 80 45 43 FTT_...TSTS.[.EC 50c0: 52 4d 03 00 0a ff 5b 81 44 04 45 43 52 4d 11 00 RM....[.D.ECRM.. 50d0: 40 4a 45 52 49 42 10 45 52 42 44 08 00 48 0a 53 @JERIB.ERBD..H.S 50e0: 44 54 4d 08 46 53 53 4e 04 46 41 4e 55 04 50 54 DTM.FSSN.FANU.PT 50f0: 56 4c 03 00 04 54 54 48 52 01 00 48 06 50 4a 49 VL...TTHR..H.PJI 5100: 44 08 00 08 00 48 1d 52 46 52 44 10 5b 01 46 41 D....H.RFRD.[.FA 5110: 4d 58 00 14 22 46 41 4e 47 01 5b 23 46 41 4d 58 MX.."FANG.[#FAMX 5120: ff ff 70 68 45 52 49 42 70 45 52 42 44 60 5b 27 ..phERIBpERBD`[' 5130: 46 41 4d 58 a4 60 14 22 46 41 4e 57 02 5b 23 46 FAMX.`."FANW.[#F 5140: 41 4d 58 ff ff 70 68 45 52 49 42 70 69 45 52 42 AMX..phERIBpiERB 5150: 44 5b 27 46 41 4d 58 a4 69 14 09 54 55 56 52 01 D['FAMX.i..TUVR. 5160: a4 0a 03 14 2e 54 48 52 4f 01 a0 09 93 68 00 a4 .....THRO....h.. 5170: 54 48 45 4e a1 1d a0 09 93 68 01 a4 44 55 54 59 THEN.....h..DUTY 5180: a1 11 a0 0a 93 68 0a 02 a4 54 54 48 52 a1 04 a4 .....h...TTHR... 5190: 0a ff 14 2a 43 4c 43 4b 01 a0 10 93 68 00 70 00 ...*CLCK....h.p. 51a0: 54 48 45 4e 70 00 46 54 54 5f a1 0d 70 68 44 55 THENp.FTT_..phDU 51b0: 54 59 70 01 54 48 45 4e a4 54 48 45 4e 14 37 50 TYp.THEN.THEN.7P 51c0: 43 4c 4b 00 70 50 54 56 4c 60 a0 10 93 60 00 70 CLK.pPTVL`...`.p 51d0: 00 54 48 45 4e 70 00 46 54 54 5f a1 19 76 60 70 .THENp.FTT_..v`p 51e0: 80 60 00 61 7b 61 0a 07 61 70 61 44 55 54 59 70 .`.a{a..apaDUTYp 51f0: 01 54 48 45 4e 5b 82 4b 22 42 41 54 31 08 5f 48 .THEN[.K"BAT1._H 5200: 49 44 0c 41 d0 0c 0a 08 5f 55 49 44 01 08 5f 50 ID.A...._UID.._P 5210: 43 4c 12 06 01 5f 53 42 5f 14 39 5f 53 54 41 00 CL..._SB_.9_STA. 5220: a0 29 90 45 43 4f 4b 93 45 43 44 59 00 a0 13 5e .).ECOK.ECDY...^ 5230: 5e 2e 45 43 30 5f 42 41 4c 30 5b 22 0a 14 a4 0a ^.EC0_BAL0[".... 5240: 1f a1 08 5b 22 0a 14 a4 0a 0f a1 08 5b 22 0a 14 ...[".......[".. 5250: a4 0a 1f 14 48 10 5f 42 49 46 00 08 53 54 41 54 ....H._BIF..STAT 5260: 12 3a 0d 01 0b a0 0f 0b a0 0f 01 0b 5c 2b 0b a4 .:..........\+.. 5270: 01 0a 9c 0b 08 01 0b c4 0e 0d 50 41 33 34 36 35 ..........PA3465 5280: 55 20 00 0d 33 36 35 38 51 00 0d 4c 69 2d 49 6f U ..3658Q..Li-Io 5290: 6e 00 0d 43 4f 4d 50 41 4c 20 00 a0 4b 07 90 45 n..COMPAL ..K..E 52a0: 43 4f 4b 93 45 43 44 59 00 70 5e 5e 2e 45 43 30 COK.ECDY.p^^.EC0 52b0: 5f 42 44 4e 30 60 a0 23 93 60 0a 08 70 0a b4 88 _BDN0`.#.`..p... 52c0: 53 54 41 54 0a 06 00 70 0d 50 41 33 34 35 37 55 STAT...p.PA3457U 52d0: 20 00 88 53 54 41 54 0a 09 00 a0 24 93 60 0a 20 ..STAT....$.`. 52e0: 70 0b 02 01 88 53 54 41 54 0a 06 00 70 0d 50 41 p....STAT...p.PA 52f0: 33 34 35 37 55 20 00 88 53 54 41 54 0a 09 00 5b 3457U ..STAT...[ 5300: 22 0a 14 70 5e 5e 2e 45 43 30 5f 42 44 43 30 42 "..p^^.EC0_BDC0B 5310: 46 43 31 5b 22 0a 14 a1 12 70 0d 4c 69 2d 49 6f FC1["....p.Li-Io 5320: 6e 00 88 53 54 41 54 0a 0b 00 a0 2c 42 46 43 31 n..STAT....,BFC1 5330: 78 42 46 43 31 0a 64 60 61 77 61 0a 64 61 70 61 xBFC1.d`awa.dapa 5340: 42 46 43 31 70 61 88 53 54 41 54 01 00 70 61 88 BFC1pa.STAT..pa. 5350: 53 54 41 54 0a 02 00 a4 53 54 41 54 14 45 0c 5f STAT....STAT.E._ 5360: 42 53 54 00 08 50 42 53 54 12 10 04 00 0c ff ff BST..PBST....... 5370: ff ff 0c ff ff ff ff 0b 5c 2b 70 0b 5c 2b 63 a0 ........\+p.\+c. 5380: 38 90 45 43 4f 4b 93 45 43 44 59 00 5b 22 0a 14 8.ECOK.ECDY.[".. 5390: 70 5e 5e 2e 45 43 30 5f 42 53 54 30 42 53 54 31 p^^.EC0_BST0BST1 53a0: 5b 22 0a 14 70 5e 5e 2e 45 43 30 5f 47 41 55 30 ["..p^^.EC0_GAU0 53b0: 42 47 55 31 5b 22 0a 14 a0 15 42 46 43 31 77 42 BGU1["....BFC1wB 53c0: 47 55 31 42 46 43 31 62 78 62 0a 64 64 62 a1 09 GU1BFC1bxb.ddb.. 53d0: 77 42 47 55 31 0a 28 62 70 42 53 54 31 88 50 42 wBGU1.(bpBST1.PB 53e0: 53 54 00 00 70 00 88 50 42 53 54 01 00 70 62 88 ST..p..PBST..pb. 53f0: 50 42 53 54 0a 02 00 70 63 88 50 42 53 54 0a 03 PBST...pc.PBST.. 5400: 00 a0 1b 94 45 43 44 59 00 76 45 43 44 59 a0 0e ....ECDY.vECDY.. 5410: 93 45 43 44 59 00 86 42 41 54 31 0a 80 a4 50 42 .ECDY..BAT1...PB 5420: 53 54 5b 82 2e 50 53 32 4b 08 5f 48 49 44 0c 41 ST[..PS2K._HID.A 5430: d0 03 03 08 5f 43 52 53 11 19 0a 16 47 01 60 00 ...._CRS....G.`. 5440: 60 00 01 01 47 01 64 00 64 00 01 01 23 02 00 01 `...G.d.d...#... 5450: 79 00 5b 82 1e 50 53 32 4d 08 5f 48 49 44 0c 41 y.[..PS2M._HID.A 5460: d0 0f 13 08 5f 43 52 53 11 09 0a 06 23 00 10 01 ...._CRS....#... 5470: 79 00 5b 82 43 6a 50 41 54 41 08 5f 41 44 52 0c y.[.CjPATA._ADR. 5480: 01 00 1f 00 5b 80 50 41 43 53 02 0a 40 0a c0 5b ....[.PACS..@..[ 5490: 81 49 04 50 41 43 53 03 50 52 49 54 10 00 10 50 .I.PACS.PRIT...P 54a0: 53 49 54 04 00 1c 53 59 4e 43 04 00 0c 53 44 54 SIT...SYNC...SDT 54b0: 30 02 00 02 53 44 54 31 02 00 4a 04 49 43 52 30 0...SDT1..J.ICR0 54c0: 04 49 43 52 31 04 49 43 52 32 04 49 43 52 33 04 .ICR1.ICR2.ICR3. 54d0: 49 43 52 34 04 49 43 52 35 04 5b 82 4b 63 50 52 ICR4.ICR5.[.KcPR 54e0: 49 44 08 5f 41 44 52 00 14 40 17 5f 47 54 4d 00 ID._ADR..@._GTM. 54f0: 08 50 42 55 46 11 17 0a 14 00 00 00 00 00 00 00 .PBUF........... 5500: 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 50 42 ..............PB 5510: 55 46 00 50 49 4f 30 8a 50 42 55 46 0a 04 44 4d UF.PIO0.PBUF..DM 5520: 41 30 8a 50 42 55 46 0a 08 50 49 4f 31 8a 50 42 A0.PBUF..PIO1.PB 5530: 55 46 0a 0c 44 4d 41 31 8a 50 42 55 46 0a 10 46 UF..DMA1.PBUF..F 5540: 4c 41 47 70 47 45 54 50 50 52 49 54 50 49 4f 30 LAGpGETPPRITPIO0 5550: 70 47 44 4d 41 7b 53 59 4e 43 01 00 7b 49 43 52 pGDMA{SYNC..{ICR 5560: 33 01 00 7b 49 43 52 30 01 00 53 44 54 30 7b 49 3..{ICR0..SDT0{I 5570: 43 52 31 01 00 44 4d 41 30 a0 14 93 44 4d 41 30 CR1..DMA0...DMA0 5580: 0c ff ff ff ff 70 50 49 4f 30 44 4d 41 30 a0 2e .....pPIO0DMA0.. 5590: 7b 50 52 49 54 0b 00 40 00 a0 14 93 7b 50 52 49 {PRIT..@....{PRI 55a0: 54 0a 90 00 0a 80 70 0b 84 03 50 49 4f 31 a1 0e T.....p...PIO1.. 55b0: 70 47 45 54 54 50 53 49 54 50 49 4f 31 a1 0b 70 pGETTPSITPIO1..p 55c0: 0c ff ff ff ff 50 49 4f 31 70 47 44 4d 41 7b 53 .....PIO1pGDMA{S 55d0: 59 4e 43 0a 02 00 7b 49 43 52 33 0a 02 00 7b 49 YNC...{ICR3...{I 55e0: 43 52 30 0a 02 00 53 44 54 31 7b 49 43 52 31 0a CR0...SDT1{ICR1. 55f0: 02 00 44 4d 41 31 a0 14 93 44 4d 41 31 0c ff ff ..DMA1...DMA1... 5600: ff ff 70 50 49 4f 31 44 4d 41 31 70 47 45 54 46 ..pPIO1DMA1pGETF 5610: 7b 53 59 4e 43 01 00 7b 53 59 4e 43 0a 02 00 50 {SYNC..{SYNC...P 5620: 52 49 54 46 4c 41 47 a0 2c 7b 93 50 49 4f 30 0c RITFLAG.,{.PIO0. 5630: ff ff ff ff 93 44 4d 41 30 0c ff ff ff ff 00 70 .....DMA0......p 5640: 0a 78 50 49 4f 30 70 0a 14 44 4d 41 30 70 0a 03 .xPIO0p..DMA0p.. 5650: 46 4c 41 47 a4 50 42 55 46 14 4c 2a 5f 53 54 4d FLAG.PBUF.L*_STM 5660: 03 8a 68 00 50 49 4f 30 8a 68 0a 04 44 4d 41 30 ..h.PIO0.h..DMA0 5670: 8a 68 0a 08 50 49 4f 31 8a 68 0a 0c 44 4d 41 31 .h..PIO1.h..DMA1 5680: 8a 68 0a 10 46 4c 41 47 a0 41 12 93 87 69 0b 00 .h..FLAG.A...i.. 5690: 02 7b 50 52 49 54 0b f0 c0 50 52 49 54 7b 53 59 .{PRIT...PRIT{SY 56a0: 4e 43 0a 02 53 59 4e 43 70 00 53 44 54 30 7b 49 NC..SYNCp.SDT0{I 56b0: 43 52 30 0a 02 49 43 52 30 7b 49 43 52 31 0a 02 CR0..ICR0{ICR1.. 56c0: 49 43 52 31 7b 49 43 52 33 0a 02 49 43 52 33 7b ICR1{ICR3..ICR3{ 56d0: 49 43 52 35 0a 02 49 43 52 35 8b 69 0a 62 57 34 ICR5..ICR5.i.bW4 56e0: 39 30 8b 69 0a 6a 57 35 33 30 8b 69 0a 7e 57 36 90.i.jW530.i.~W6 56f0: 33 30 8b 69 0a 80 57 36 34 30 8b 69 0a b0 57 38 30.i..W640.i..W8 5700: 38 30 8b 69 0a ba 57 39 33 30 7d 50 52 49 54 0b 80.i..W930}PRIT. 5710: 04 80 50 52 49 54 a0 1e 90 7b 46 4c 41 47 0a 02 ..PRIT...{FLAG.. 5720: 00 7b 57 34 39 30 0b 00 08 00 7d 50 52 49 54 0a .{W490....}PRIT. 5730: 02 50 52 49 54 7d 50 52 49 54 53 45 54 50 50 49 .PRIT}PRITSETPPI 5740: 4f 30 57 35 33 30 57 36 34 30 50 52 49 54 a0 4b O0W530W640PRIT.K 5750: 05 7b 46 4c 41 47 01 00 7d 53 59 4e 43 01 53 59 .{FLAG..}SYNC.SY 5760: 4e 43 70 53 44 4d 41 44 4d 41 30 53 44 54 30 a0 NCpSDMADMA0SDT0. 5770: 12 95 44 4d 41 30 0a 1e 7d 49 43 52 33 01 49 43 ..DMA0..}ICR3.IC 5780: 52 33 a0 12 95 44 4d 41 30 0a 3c 7d 49 43 52 30 R3...DMA0.<}ICR0 5790: 01 49 43 52 30 a0 14 7b 57 39 33 30 0b 00 20 00 .ICR0..{W930.. . 57a0: 7d 49 43 52 31 01 49 43 52 31 a0 4b 15 93 87 6a }ICR1.ICR1.K...j 57b0: 0b 00 02 7b 50 52 49 54 0b 0f bf 50 52 49 54 70 ...{PRIT...PRITp 57c0: 00 50 53 49 54 7b 53 59 4e 43 01 53 59 4e 43 70 .PSIT{SYNC.SYNCp 57d0: 00 53 44 54 31 7b 49 43 52 30 01 49 43 52 30 7b .SDT1{ICR0.ICR0{ 57e0: 49 43 52 31 01 49 43 52 31 7b 49 43 52 33 01 49 ICR1.ICR1{ICR3.I 57f0: 43 52 33 7b 49 43 52 35 01 49 43 52 35 8b 6a 0a CR3{ICR5.ICR5.j. 5800: 62 57 34 39 31 8b 6a 0a 6a 57 35 33 31 8b 6a 0a bW491.j.jW531.j. 5810: 7e 57 36 33 31 8b 6a 0a 80 57 36 34 31 8b 6a 0a ~W631.j..W641.j. 5820: b0 57 38 38 31 8b 6a 0a ba 57 39 33 31 7d 50 52 .W881.j..W931}PR 5830: 49 54 0b 40 80 50 52 49 54 a0 1e 90 7b 46 4c 41 IT.@.PRIT...{FLA 5840: 47 0a 08 00 7b 57 34 39 31 0b 00 08 00 7d 50 52 G...{W491....}PR 5850: 49 54 0a 20 50 52 49 54 a0 4c 04 7b 46 4c 41 47 IT. PRIT.L.{FLAG 5860: 0a 10 00 7d 50 52 49 54 0b 00 40 50 52 49 54 a0 ...}PRIT..@PRIT. 5870: 13 94 50 49 4f 31 0a f0 7d 50 52 49 54 0a 80 50 ..PIO1..}PRIT..P 5880: 52 49 54 a1 21 7d 50 52 49 54 0a 10 50 52 49 54 RIT.!}PRIT..PRIT 5890: 70 53 45 54 54 50 49 4f 31 57 35 33 31 57 36 34 pSETTPIO1W531W64 58a0: 31 50 53 49 54 a0 40 06 7b 46 4c 41 47 0a 04 00 1PSIT.@.{FLAG... 58b0: 7d 53 59 4e 43 0a 02 53 59 4e 43 70 53 44 4d 41 }SYNC..SYNCpSDMA 58c0: 44 4d 41 31 53 44 54 31 a0 13 95 44 4d 41 31 0a DMA1SDT1...DMA1. 58d0: 1e 7d 49 43 52 33 0a 02 49 43 52 33 a0 13 95 44 .}ICR3..ICR3...D 58e0: 4d 41 31 0a 3c 7d 49 43 52 30 0a 02 49 43 52 30 MA1.<}ICR0..ICR0 58f0: a0 15 7b 57 39 33 31 0b 00 20 00 7d 49 43 52 31 ..{W931.. .}ICR1 5900: 0a 02 49 43 52 31 5b 82 47 10 50 5f 44 30 08 5f ..ICR1[.G.P_D0._ 5910: 41 44 52 00 14 4a 0f 5f 47 54 46 00 08 50 49 42 ADR..J._GTF..PIB 5920: 30 11 11 0a 0e 03 00 00 00 00 a0 ef 03 00 00 00 0............... 5930: 00 a0 ef 8c 50 49 42 30 01 50 4d 44 30 8c 50 49 ....PIB0.PMD0.PI 5940: 42 30 0a 08 44 4d 44 30 a0 40 06 7b 50 52 49 54 B0..DMD0.@.{PRIT 5950: 0a 02 00 a0 13 93 7b 50 52 49 54 0a 09 00 0a 08 ......{PRIT..... 5960: 70 0a 08 50 4d 44 30 a1 41 04 70 0a 0a 50 4d 44 p..PMD0.A.p..PMD 5970: 30 7a 7b 50 52 49 54 0b 00 03 00 0a 08 60 7a 7b 0z{PRIT......`z{ 5980: 50 52 49 54 0b 00 30 00 0a 0c 61 72 60 61 62 a0 PRIT..0...ar`ab. 5990: 0c 93 0a 03 62 70 0a 0b 50 4d 44 30 a0 0c 93 0a ....bp..PMD0.... 59a0: 05 62 70 0a 0c 50 4d 44 30 a1 07 70 01 50 4d 44 .bp..PMD0..p.PMD 59b0: 30 a0 43 04 7b 53 59 4e 43 01 00 70 7d 53 44 54 0.C.{SYNC..p}SDT 59c0: 30 0a 40 00 44 4d 44 30 a0 2c 7b 49 43 52 31 01 0.@.DMD0.,{ICR1. 59d0: 00 a0 13 7b 49 43 52 30 01 00 72 44 4d 44 30 0a ...{ICR0..rDMD0. 59e0: 02 44 4d 44 30 a0 0f 7b 49 43 52 33 01 00 70 0a .DMD0..{ICR3..p. 59f0: 45 44 4d 44 30 a1 14 7d 74 7b 50 4d 44 30 0a 07 EDMD0..}t{PMD0.. 5a00: 00 0a 02 00 0a 20 44 4d 44 30 a4 50 49 42 30 5b ..... DMD0.PIB0[ 5a10: 82 46 10 50 5f 44 31 08 5f 41 44 52 01 14 49 0f .F.P_D1._ADR..I. 5a20: 5f 47 54 46 00 08 50 49 42 31 11 11 0a 0e 03 00 _GTF..PIB1...... 5a30: 00 00 00 b0 ef 03 00 00 00 00 b0 ef 8c 50 49 42 .............PIB 5a40: 31 01 50 4d 44 31 8c 50 49 42 31 0a 08 44 4d 44 1.PMD1.PIB1..DMD 5a50: 31 a0 4b 05 7b 50 52 49 54 0a 20 00 a0 13 93 7b 1.K.{PRIT. ....{ 5a60: 50 52 49 54 0a 90 00 0a 80 70 0a 08 50 4d 44 31 PRIT.....p..PMD1 5a70: a1 3c 72 7b 50 53 49 54 0a 03 00 7a 7b 50 53 49 .. 0050: 80 49 ee 6a 65 26 72 1e cd bf 5f 2f 96 d6 c0 0a .I.je&r..._/.... 0060: 92 f5 06 b5 00 b2 3b 29 02 e2 4c 8d c2 f2 bc 41 ......;)..L....A 0070: 77 9c 70 f0 f3 1b 09 d2 63 5a dc a8 83 f8 5e c9 w.p.....cZ....^. 0080: 15 95 f9 fa fd dc 05 b7 4d 67 7f 2d b3 84 33 20 ........Mg.-..3 0090: e1 d1 79 2a a7 6a 77 d1 b6 20 2a 76 42 c5 d5 e9 ..y*.jw.. *vB... 00a0: b6 43 40 55 44 c3 c9 37 99 5f 41 97 70 f3 d1 f6 .C@UD..7._A.p... 00b0: 07 ec 7b 1a 29 a1 c1 f1 91 fd 48 86 6e 3e ce cb ..{.).....H.n>.. 00c0: 01 00 00 00 b6 00 00 00 00 00 02 00 4c 45 4e 4f ............LENO 00d0: 56 4f 54 50 2d 36 38 20 20 20 57 49 4e 44 4f 57 VOTP-68 WINDOW 00e0: 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 S .............. 00f0: 00 00 00 00 00 00 8a 6e 2e c9 36 e6 7f 10 8a ea .......n..6..... 0100: 14 ad d2 93 b7 6d 9b 73 ad 83 36 b8 6c a7 a7 ee .....m.s..6.l... 0110: 37 47 16 fe f3 fc cd c7 89 84 06 16 91 0b 1e 81 7G.............. 0120: 11 42 b1 35 52 57 f6 6b bb 5f a5 81 e2 ff 89 8a .B.5RW.k._...... 0130: 95 c3 4d fc e9 56 4f 4c 34 cc 99 5e 62 e1 90 8a ..M..VOL4..^b... 0140: 54 be 4a 00 5c 9b a0 86 41 46 66 9d e2 f2 e7 36 T.J.\...AFf....6 0150: 9c 33 91 27 e7 8d 5c a1 d8 f9 a4 61 8a 1c 04 07 .3.'..\....a.... 0160: e3 2a 1e 14 f1 bd 7f 4c 09 ff 19 11 a9 d4 74 ca .*.....L......t. 0170: 11 9e dc 54 39 bf ...T9. APIC @ 0xbf6dff70 0000: 41 50 49 43 68 00 00 00 01 13 50 54 4c 54 44 20 APICh.....PTLTD 0010: 09 20 41 50 49 43 20 20 00 00 04 06 20 4c 54 50 . APIC .... LTP 0020: 00 00 00 00 00 00 e0 fe 01 00 00 00 00 08 00 00 ................ 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0c 02 00 ................ 0040: 00 00 c0 fe 00 00 00 00 04 06 00 05 00 01 04 06 ................ 0050: 01 05 00 01 02 0a 00 00 02 00 00 00 05 00 02 0a ................ 0060: 00 09 09 00 00 00 0d 00 ........ BOOT @ 0xbf6dffd8 0000: 42 4f 4f 54 28 00 00 00 01 a5 50 54 4c 54 44 20 BOOT(.....PTLTD 0010: 24 53 42 46 54 42 4c 24 00 00 04 06 20 4c 54 50 $SBFTBL$.... LTP 0020: 01 00 00 00 36 00 00 00 ....6... SSDT @ 0xbf6d98bd 0000: 53 53 44 54 ad 02 00 00 01 59 53 61 74 61 52 65 SSDT.....YSataRe 0010: 53 61 74 61 41 68 63 69 00 10 00 00 49 4e 54 4c SataAhci....INTL 0020: 24 06 05 20 10 48 28 5c 2f 03 5f 53 42 5f 50 43 $.. .H(\/._SB_PC 0030: 49 30 53 41 54 41 5b 82 4f 0c 50 52 54 30 08 5f I0SATA[.O.PRT0._ 0040: 41 44 52 0b ff ff 14 44 0b 5f 53 44 44 01 08 47 ADR....D._SDD..G 0050: 42 55 30 11 0a 0a 07 00 00 00 00 00 a0 00 8c 47 BU0............G 0060: 42 55 30 0a 00 47 42 30 30 8c 47 42 55 30 0a 01 BU0..GB00.GBU0.. 0070: 47 42 30 31 8c 47 42 55 30 0a 02 47 42 30 32 8c GB01.GBU0..GB02. 0080: 47 42 55 30 0a 03 47 42 30 33 8c 47 42 55 30 0a GBU0..GB03.GBU0. 0090: 04 47 42 30 34 8c 47 42 55 30 0a 05 47 42 30 35 .GB04.GBU0..GB05 00a0: 8c 47 42 55 30 0a 06 47 42 30 36 a0 46 04 93 87 .GBU0..GB06.F... 00b0: 68 0b 00 02 8b 68 0a 9c 57 37 38 30 a0 1e 7b 57 h....h..W780..{W 00c0: 37 38 30 0a 08 00 70 0a 10 47 42 30 30 70 0a 03 780...p..GB00p.. 00d0: 47 42 30 31 70 0a ef 47 42 30 36 a1 16 70 0a 90 GB01p..GB06..p.. 00e0: 47 42 30 30 70 0a 03 47 42 30 31 70 0a ef 47 42 GB00p..GB01p..GB 00f0: 30 36 70 47 42 55 30 47 54 46 30 14 0b 5f 47 54 06pGBU0GTF0.._GT 0100: 46 00 a4 47 54 46 30 5b 82 41 0d 50 52 54 31 08 F..GTF0[.A.PRT1. 0110: 5f 41 44 52 0c ff ff 01 00 14 44 0b 5f 53 44 44 _ADR......D._SDD 0120: 01 08 47 42 55 31 11 0a 0a 07 00 00 00 00 00 a0 ..GBU1.......... 0130: 00 8c 47 42 55 31 0a 00 47 42 31 30 8c 47 42 55 ..GBU1..GB10.GBU 0140: 31 0a 01 47 42 31 31 8c 47 42 55 31 0a 02 47 42 1..GB11.GBU1..GB 0150: 31 32 8c 47 42 55 31 0a 03 47 42 31 33 8c 47 42 12.GBU1..GB13.GB 0160: 55 31 0a 04 47 42 31 34 8c 47 42 55 31 0a 05 47 U1..GB14.GBU1..G 0170: 42 31 35 8c 47 42 55 31 0a 06 47 42 31 36 a0 46 B15.GBU1..GB16.F 0180: 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 38 31 a0 ...h....h..W781. 0190: 1e 7b 57 37 38 31 0a 08 00 70 0a 10 47 42 31 30 .{W781...p..GB10 01a0: 70 0a 03 47 42 31 31 70 0a ef 47 42 31 36 a1 16 p..GB11p..GB16.. 01b0: 70 0a 90 47 42 31 30 70 0a 03 47 42 31 31 70 0a p..GB10p..GB11p. 01c0: ef 47 42 31 36 70 47 42 55 31 47 54 46 31 14 0b .GB16pGBU1GTF1.. 01d0: 5f 47 54 46 00 a4 47 54 46 31 5b 82 41 0d 50 52 _GTF..GTF1[.A.PR 01e0: 54 32 08 5f 41 44 52 0c ff ff 02 00 14 44 0b 5f T2._ADR......D._ 01f0: 53 44 44 01 08 47 42 55 32 11 0a 0a 07 00 00 00 SDD..GBU2....... 0200: 00 00 a0 00 8c 47 42 55 32 0a 00 47 42 32 30 8c .....GBU2..GB20. 0210: 47 42 55 32 0a 01 47 42 32 31 8c 47 42 55 32 0a GBU2..GB21.GBU2. 0220: 02 47 42 32 32 8c 47 42 55 32 0a 03 47 42 32 33 .GB22.GBU2..GB23 0230: 8c 47 42 55 32 0a 04 47 42 32 34 8c 47 42 55 32 .GBU2..GB24.GBU2 0240: 0a 05 47 42 32 35 8c 47 42 55 32 0a 06 47 42 32 ..GB25.GBU2..GB2 0250: 36 a0 46 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 6.F...h....h..W7 0260: 38 32 a0 1e 7b 57 37 38 32 0a 08 00 70 0a 10 47 82..{W782...p..G 0270: 42 32 30 70 0a 03 47 42 32 31 70 0a ef 47 42 32 B20p..GB21p..GB2 0280: 36 a1 16 70 0a 90 47 42 32 30 70 0a 03 47 42 32 6..p..GB20p..GB2 0290: 31 70 0a ef 47 42 32 36 70 47 42 55 32 47 54 46 1p..GB26pGBU2GTF 02a0: 32 14 0b 5f 47 54 46 00 a4 47 54 46 32 2.._GTF..GTF2 SSDT @ 0xbf6d981a 0000: 53 53 44 54 a3 00 00 00 01 ed 42 72 74 52 65 66 SSDT......BrtRef 0010: 44 44 30 31 42 52 54 00 00 10 00 00 49 4e 54 4c DD01BRT.....INTL 0020: 24 06 05 20 10 4e 07 5c 2f 04 5f 53 42 5f 50 43 $.. .N.\/._SB_PC 0030: 49 30 47 46 58 30 44 44 30 33 14 1e 5f 42 43 4c I0GFX0DD03.._BCL 0040: 00 a4 12 16 0a 0a 46 0a 28 0a 00 0a 0a 0a 14 0a ......F.(....... 0050: 1e 0a 28 0a 32 0a 3c 0a 46 14 25 5f 42 43 4d 01 ..(.2.<.F.%_BCM. 0060: 78 68 0a 0a 60 61 70 61 5c 2f 05 5f 53 42 5f 50 xh..`apa\/._SB_P 0070: 43 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 14 CI0LPCBEC0_BRTS. 0080: 23 5f 42 51 43 00 77 5c 2f 05 5f 53 42 5f 50 43 #_BQC.w\/._SB_PC 0090: 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 0a 0a I0LPCBEC0_BRTS.. 00a0: 60 a4 60 `.` SSDT @ 0xbf6d8e10 0000: 53 53 44 54 5f 02 00 00 01 c8 50 6d 52 65 66 00 SSDT_.....PmRef. 0010: 43 70 75 30 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu0Tst..0..INTL 0020: 24 06 05 20 10 4a 23 5c 2e 5f 50 52 5f 43 50 55 $.. .J#\._PR_CPU 0030: 30 08 5f 54 50 43 0a 00 14 4d 06 5f 50 54 43 00 0._TPC...M._PTC. 0040: a0 37 7b 50 44 43 30 0a 04 00 a4 12 2c 02 11 14 .7{PDC0.....,... 0050: 0a 11 82 0c 00 7f 00 00 00 00 00 00 00 00 00 00 ................ 0060: 00 79 00 11 14 0a 11 82 0c 00 7f 00 00 00 00 00 .y.............. 0070: 00 00 00 00 00 00 79 00 a4 12 2c 02 11 14 0a 11 ......y...,..... 0080: 82 0c 00 01 04 01 00 10 10 00 00 00 00 00 00 79 ...............y 0090: 00 11 14 0a 11 82 0c 00 01 04 01 00 10 10 00 00 ................ 00a0: 00 00 00 00 79 00 08 54 53 53 49 12 41 07 08 12 ....y..TSSI.A... 00b0: 0d 05 0a 64 0b e8 03 0a 00 0a 00 0a 00 12 0d 05 ...d............ 00c0: 0a 58 0b 6b 03 0a 00 0a 0f 0a 00 12 0d 05 0a 4b .X.k...........K 00d0: 0b ee 02 0a 00 0a 0e 0a 00 12 0d 05 0a 3f 0b 71 .............?.q 00e0: 02 0a 00 0a 0d 0a 00 12 0d 05 0a 32 0b f4 01 0a ...........2.... 00f0: 00 0a 0c 0a 00 12 0d 05 0a 26 0b 77 01 0a 00 0a .........&.w.... 0100: 0b 0a 00 12 0c 05 0a 19 0a fa 0a 00 0a 0a 0a 00 ................ 0110: 12 0c 05 0a 0d 0a 7d 0a 00 0a 09 0a 00 08 54 53 ......}.......TS 0120: 53 4d 12 41 07 08 12 0d 05 0a 64 0b e8 03 0a 00 SM.A......d..... 0130: 0a 00 0a 00 12 0d 05 0a 58 0b 6b 03 0a 00 0a 1e ........X.k..... 0140: 0a 00 12 0d 05 0a 4b 0b ee 02 0a 00 0a 1c 0a 00 ......K......... 0150: 12 0d 05 0a 3f 0b 71 02 0a 00 0a 1a 0a 00 12 0d ....?.q......... 0160: 05 0a 32 0b f4 01 0a 00 0a 18 0a 00 12 0d 05 0a ..2............. 0170: 26 0b 77 01 0a 00 0a 16 0a 00 12 0c 05 0a 19 0a &.w............. 0180: fa 0a 00 0a 14 0a 00 12 0c 05 0a 0d 0a 7d 0a 00 .............}.. 0190: 0a 12 0a 00 08 54 53 53 46 0a 00 14 43 08 5f 54 .....TSSF...C._T 01a0: 53 53 00 a0 47 06 90 92 54 53 53 46 5b 12 5f 50 SS..G...TSSF[._P 01b0: 53 53 00 70 5f 50 53 53 60 70 87 60 61 76 61 70 SS.p_PSS`p.`avap 01c0: 83 88 83 88 60 61 00 0a 01 00 62 70 0a 00 63 a2 ....`a....bp..c. 01d0: 35 95 63 87 54 53 53 49 70 78 77 62 74 0a 08 63 5.c.TSSIpxwbt..c 01e0: 00 00 0a 08 00 00 64 70 64 88 83 88 54 53 53 49 ......dpd...TSSI 01f0: 63 00 0a 01 00 70 64 88 83 88 54 53 53 4d 63 00 c....pd...TSSMc. 0200: 0a 01 00 75 63 70 ff 54 53 53 46 a0 0e 7b 50 44 ...ucp.TSSF..{PD 0210: 43 30 0a 04 00 a4 54 53 53 4d a4 54 53 53 49 14 C0....TSSM.TSSI. 0220: 3f 5f 54 53 44 00 a0 27 90 7b 43 46 47 44 0c 00 ?_TSD..'.{CFGD.. 0230: 00 00 01 00 92 7b 50 44 43 30 0a 04 00 a4 12 0f .....{PDC0...... 0240: 01 12 0c 05 0a 05 0a 00 0a 00 0a fd 0a 02 a4 12 ................ 0250: 0f 01 12 0c 05 0a 05 0a 00 0a 00 0a fc 0a 01 ............... SSDT @ 0xbf6d8d6a 0000: 53 53 44 54 a6 00 00 00 01 6d 50 6d 52 65 66 00 SSDT.....mPmRef. 0010: 43 70 75 31 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu1Tst..0..INTL 0020: 24 06 05 20 10 41 08 5c 2e 5f 50 52 5f 43 50 55 $.. .A.\._PR_CPU 0030: 31 08 5f 54 50 43 0a 00 14 16 5f 50 54 43 00 a4 1._TPC...._PTC.. 0040: 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 54 43 14 \/._PR_CPU0_PTC. 0050: 16 5f 54 53 53 00 a4 5c 2f 03 5f 50 52 5f 43 50 ._TSS..\/._PR_CP 0060: 55 30 5f 54 53 53 14 3f 5f 54 53 44 00 a0 27 90 U0_TSS.?_TSD..'. 0070: 7b 43 46 47 44 0c 00 00 00 01 00 92 7b 50 44 43 {CFGD.......{PDC 0080: 31 0a 04 00 a4 12 0f 01 12 0c 05 0a 05 0a 00 0a 1............... 0090: 00 0a fd 0a 02 a4 12 0f 01 12 0c 05 0a 05 0a 00 ................ 00a0: 0a 01 0a fc 0a 01 ...... SSDT @ 0xbf6d8884 0000: 53 53 44 54 e6 04 00 00 01 df 50 6d 52 65 66 00 SSDT......PmRef. 0010: 43 70 75 50 6d 00 00 00 00 30 00 00 49 4e 54 4c CpuPm....0..INTL 0020: 24 06 05 20 10 45 08 5c 00 08 53 53 44 54 12 43 $.. .E.\..SSDT.C 0030: 05 0c 0d 43 50 55 30 49 53 54 20 00 0c 9e 95 6d ...CPU0IST ....m 0040: bf 0c b4 01 00 00 0d 43 50 55 31 49 53 54 20 00 .......CPU1IST . 0050: 0c 52 97 6d bf 0c c8 00 00 00 0d 43 50 55 30 43 .R.m.......CPU0C 0060: 53 54 20 00 0c 6f 90 6d bf 0c aa 04 00 00 0d 43 ST ..o.m.......C 0070: 50 55 31 43 53 54 20 00 0c 19 95 6d bf 0c 85 00 PU1CST ....m.... 0080: 00 00 08 43 46 47 44 0c f1 69 3f 11 08 5c 50 44 ...CFGD..i?..\PD 0090: 43 30 0c 00 00 00 80 08 5c 50 44 43 31 0c 00 00 C0......\PDC1... 00a0: 00 80 08 5c 53 44 54 4c 0a 00 10 4d 21 5c 2e 5f ...\SDTL...M!\._ 00b0: 50 52 5f 43 50 55 30 08 48 49 30 5f 0a 00 08 48 PR_CPU0.HI0_...H 00c0: 43 30 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a C0_...H._PDC..h. 00d0: 00 52 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 .REVS.h..SIZEp.h 00e0: 60 70 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a `pt`...a[.h.@wa. 00f0: 08 00 54 45 4d 50 08 53 54 53 30 11 07 0a 04 00 ..TEMP.STS0..... 0100: 00 00 00 73 53 54 53 30 54 45 4d 50 62 5f 4f 53 ...sSTS0TEMPb_OS 0110: 43 11 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 C......w@.).G... 0120: 70 58 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 pXq9SREVSSIZEb.I 0130: 19 5f 4f 53 43 04 8a 6b 0a 00 53 54 53 30 8a 6b ._OSC..k..STS0.k 0140: 0a 04 43 41 50 30 8a 68 0a 00 49 49 44 30 8a 68 ..CAP0.h..IID0.h 0150: 0a 04 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 ..IID1.h..IID2.h 0160: 0a 0c 49 49 44 33 08 55 49 44 30 11 13 0a 10 16 ..IID3.UID0..... 0170: a6 77 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a .w@.).G...pXq9S. 0180: 55 49 44 30 0a 00 45 49 44 30 8a 55 49 44 30 0a UID0..EID0.UID0. 0190: 04 45 49 44 31 8a 55 49 44 30 0a 08 45 49 44 32 .EID1.UID0..EID2 01a0: 8a 55 49 44 30 0a 0c 45 49 44 33 a0 32 92 90 90 .UID0..EID3.2... 01b0: 93 49 49 44 30 45 49 44 30 93 49 49 44 31 45 49 .IID0EID0.IID1EI 01c0: 44 31 90 93 49 49 44 32 45 49 44 32 93 49 49 44 D1..IID2EID2.IID 01d0: 33 45 49 44 33 70 0a 06 53 54 53 30 a4 6b a0 0f 3EID3p..STS0.k.. 01e0: 92 93 69 0a 01 70 0a 0a 53 54 53 30 a4 6b 7d 7b ..i..p..STS0.k}{ 01f0: 50 44 43 30 0c ff ff ff 7f 00 43 41 50 30 50 44 PDC0......CAP0PD 0200: 43 30 70 7b 50 44 43 30 0a ff 00 50 43 50 30 a0 C0p{PDC0...PCP0. 0210: 4c 05 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b L.{CFGD....A...{ 0220: 43 46 47 44 0c 00 00 00 01 00 93 7b 50 44 43 30 CFGD.......{PDC0 0230: 0a 09 00 0a 09 92 7b 53 44 54 4c 0a 01 00 7d 53 ......{SDTL...}S 0240: 44 54 4c 0a 01 53 44 54 4c 5b 80 49 53 54 30 00 DTL..SDTL[.IST0. 0250: 83 88 53 53 44 54 0a 01 00 83 88 53 53 44 54 0a ..SSDT.....SSDT. 0260: 02 00 5b 20 49 53 54 30 48 49 30 5f a0 49 05 7b ..[ IST0HI0_.I.{ 0270: 43 46 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 CFGD....N...{CFG 0280: 44 0c 00 00 00 01 00 7b 50 44 43 30 0a 18 00 92 D......{PDC0.... 0290: 7b 53 44 54 4c 0a 02 00 7d 53 44 54 4c 0a 02 53 {SDTL...}SDTL..S 02a0: 44 54 4c 5b 80 43 53 54 30 00 83 88 53 53 44 54 DTL[.CST0...SSDT 02b0: 0a 07 00 83 88 53 53 44 54 0a 08 00 5b 20 43 53 .....SSDT...[ CS 02c0: 54 30 48 43 30 5f a4 6b 10 4d 21 5c 2e 5f 50 52 T0HC0_.k.M!\._PR 02d0: 5f 43 50 55 31 08 48 49 31 5f 0a 00 08 48 43 31 _CPU1.HI1_...HC1 02e0: 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a 00 52 _...H._PDC..h..R 02f0: 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 60 70 EVS.h..SIZEp.h`p 0300: 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a 08 00 t`...a[.h.@wa... 0310: 54 45 4d 50 08 53 54 53 31 11 07 0a 04 00 00 00 TEMP.STS1....... 0320: 00 73 53 54 53 31 54 45 4d 50 62 5f 4f 53 43 11 .sSTS1TEMPb_OSC. 0330: 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 70 58 .....w@.).G...pX 0340: 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 19 5f q9SREVSSIZEb.I._ 0350: 4f 53 43 04 8a 6b 0a 00 53 54 53 31 8a 6b 0a 04 OSC..k..STS1.k.. 0360: 43 41 50 31 8a 68 0a 00 49 49 44 30 8a 68 0a 04 CAP1.h..IID0.h.. 0370: 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 0a 0c IID1.h..IID2.h.. 0380: 49 49 44 33 08 55 49 44 31 11 13 0a 10 16 a6 77 IID3.UID1......w 0390: 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a 55 49 @.).G...pXq9S.UI 03a0: 44 31 0a 00 45 49 44 30 8a 55 49 44 31 0a 04 45 D1..EID0.UID1..E 03b0: 49 44 31 8a 55 49 44 31 0a 08 45 49 44 32 8a 55 ID1.UID1..EID2.U 03c0: 49 44 31 0a 0c 45 49 44 33 a0 32 92 90 90 93 49 ID1..EID3.2....I 03d0: 49 44 30 45 49 44 30 93 49 49 44 31 45 49 44 31 ID0EID0.IID1EID1 03e0: 90 93 49 49 44 32 45 49 44 32 93 49 49 44 33 45 ..IID2EID2.IID3E 03f0: 49 44 33 70 0a 06 53 54 53 31 a4 6b a0 0f 92 93 ID3p..STS1.k.... 0400: 69 0a 01 70 0a 0a 53 54 53 31 a4 6b 7d 7b 50 44 i..p..STS1.k}{PD 0410: 43 31 0c ff ff ff 7f 00 43 41 50 31 50 44 43 31 C1......CAP1PDC1 0420: 70 7b 50 44 43 31 0a ff 00 50 43 50 31 a0 4c 05 p{PDC1...PCP1.L. 0430: 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b 43 46 {CFGD....A...{CF 0440: 47 44 0c 00 00 00 01 00 93 7b 50 44 43 31 0a 09 GD.......{PDC1.. 0450: 00 0a 09 92 7b 53 44 54 4c 0a 10 00 7d 53 44 54 ....{SDTL...}SDT 0460: 4c 0a 10 53 44 54 4c 5b 80 49 53 54 31 00 83 88 L..SDTL[.IST1... 0470: 53 53 44 54 0a 04 00 83 88 53 53 44 54 0a 05 00 SSDT.....SSDT... 0480: 5b 20 49 53 54 31 48 49 31 5f a0 49 05 7b 43 46 [ IST1HI1_.I.{CF 0490: 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 44 0c GD....N...{CFGD. 04a0: 00 00 00 01 00 7b 50 44 43 31 0a 18 00 92 7b 53 .....{PDC1....{S 04b0: 44 54 4c 0a 20 00 7d 53 44 54 4c 0a 20 53 44 54 DTL. .}SDTL. SDT 04c0: 4c 5b 80 43 53 54 31 00 83 88 53 53 44 54 0a 0a L[.CST1...SSDT.. 04d0: 00 83 88 53 53 44 54 0a 0b 00 5b 20 43 53 54 31 ...SSDT...[ CST1 04e0: 48 43 31 5f a4 6b HC1_.k XSDT @ 0xbf6d87f0 0000: 58 53 44 54 94 00 00 00 01 c2 4c 45 4e 4f 56 4f XSDT......LENOVO 0010: 54 50 2d 36 38 20 20 20 00 00 04 06 20 4c 54 50 TP-68 .... LTP 0020: 00 00 00 00 d2 fb 6d bf 00 00 00 00 c6 fc 6d bf ......m.......m. 0030: 00 00 00 00 2e fd 6d bf 00 00 00 00 66 fd 6d bf ......m.....f.m. 0040: 00 00 00 00 a2 fd 6d bf 00 00 00 00 d4 fd 6d bf ......m.......m. 0050: 00 00 00 00 fa fd 6d bf 00 00 00 00 70 ff 6d bf ......m.....p.m. 0060: 00 00 00 00 d8 ff 6d bf 00 00 00 00 bd 98 6d bf ......m.......m. 0070: 00 00 00 00 1a 98 6d bf 00 00 00 00 10 8e 6d bf ......m.......m. 0080: 00 00 00 00 6a 8d 6d bf 00 00 00 00 84 88 6d bf ....j.m.......m. 0090: 00 00 00 00 .... RSD PTR @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... fwts-test/checksum-0001/acpidump-0003.log000066400000000000000000004054211465205512700201000ustar00rootroot00000000000000DSDT @ 0xbf6d9b6a 0000: 44 53 44 54 f4 5f 00 00 02 10 54 4f 53 43 50 4c DSDT._....TOSCPL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 49 4e 54 4c CRESTLNE....INTL 0020: 08 06 06 20 08 5a 30 30 30 01 08 5a 30 30 31 0a ... .Z000..Z001. 0030: 02 08 5a 30 30 32 0a 04 08 5a 30 30 33 0a 08 08 ..Z002...Z003... 0040: 5a 30 30 34 00 08 5a 30 30 35 0a 0f 08 5a 30 30 Z004..Z005...Z00 0050: 36 0a 0d 08 5a 30 30 37 0a 0b 08 5a 30 30 38 0a 6...Z007...Z008. 0060: 09 08 45 43 44 59 0a 07 5b 01 4d 55 54 58 00 5b ..ECDY..[.MUTX.[ 0070: 80 50 52 54 30 01 0a 80 0a 04 5b 81 0b 50 52 54 .PRT0.....[..PRT 0080: 30 13 50 38 30 48 20 14 4e 07 50 38 58 48 0a a0 0.P80H .N.P8XH.. 0090: 17 93 68 00 70 7d 7b 50 38 30 44 0c 00 ff ff ff ..h.p}{P80D..... 00a0: 00 69 00 50 38 30 44 a0 1b 93 68 01 70 7d 7b 50 .i.P80D...h.p}{P 00b0: 38 30 44 0c ff 00 ff ff 00 79 69 0a 08 00 00 50 80D......yi....P 00c0: 38 30 44 a0 1c 93 68 0a 02 70 7d 7b 50 38 30 44 80D...h..p}{P80D 00d0: 0c ff ff 00 ff 00 79 69 0a 10 00 00 50 38 30 44 ......yi....P80D 00e0: a0 1c 93 68 0a 03 70 7d 7b 50 38 30 44 0c ff ff ...h..p}{P80D... 00f0: ff 00 00 79 69 0a 18 00 00 50 38 30 44 70 50 38 ...yi....P80DpP8 0100: 30 44 50 38 30 48 14 0c 5f 50 49 43 01 70 68 47 0DP80H.._PIC.phG 0110: 50 49 43 14 46 06 5f 50 54 53 01 70 00 50 38 30 PIC.F._PTS.p.P80 0120: 44 50 38 58 48 00 68 a0 1e 93 68 0a 03 70 01 5c DP8XH.h...h..p.\ 0130: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0140: 30 5f 53 33 4c 44 a0 33 93 68 0a 04 70 01 5c 2f 0_S3LD.3.h..p.\/ 0150: 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 ._SB_PCI0LPCBEC0 0160: 5f 53 33 4c 44 5c 2f 04 5f 53 42 5f 50 43 49 30 _S3LD\/._SB_PCI0 0170: 4c 50 43 42 50 48 53 53 0a 0e 14 4c 1c 5f 57 41 LPCBPHSS...L._WA 0180: 4b 01 50 38 58 48 01 0a ab a0 30 91 93 68 0a 03 K.P8XH....0..h.. 0190: 93 68 0a 04 a0 25 7b 43 46 47 44 0c 00 00 00 01 .h...%{CFGD..... 01a0: 00 a0 18 90 7b 43 46 47 44 0a f0 00 93 4f 53 59 ....{CFGD....OSY 01b0: 53 0b d1 07 54 52 41 50 0a 3d a0 18 93 52 50 31 S...TRAP.=...RP1 01c0: 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 D..\/._SB_PCI0RP 01d0: 30 31 00 a0 18 93 52 50 32 44 00 86 5c 2f 03 5f 01....RP2D..\/._ 01e0: 53 42 5f 50 43 49 30 52 50 30 32 00 a0 18 93 52 SB_PCI0RP02....R 01f0: 50 33 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 P3D..\/._SB_PCI0 0200: 52 50 30 33 00 a0 18 93 52 50 34 44 00 86 5c 2f RP03....RP4D..\/ 0210: 03 5f 53 42 5f 50 43 49 30 52 50 30 34 00 a0 18 ._SB_PCI0RP04... 0220: 93 52 50 35 44 00 86 5c 2f 03 5f 53 42 5f 50 43 .RP5D..\/._SB_PC 0230: 49 30 52 50 30 35 00 a0 18 93 52 50 36 44 00 86 I0RP05....RP6D.. 0240: 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 36 00 \/._SB_PCI0RP06. 0250: a0 12 93 68 0a 03 50 38 58 48 00 0a 30 54 52 41 ...h..P8XH..0TRA 0260: 50 0a 46 a0 43 0d 93 68 0a 04 50 38 58 48 00 0a P.F.C..h..P8XH.. 0270: 40 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 @\/._SB_PCI0LPCB 0280: 50 48 53 53 0a 0f 70 57 41 4b 46 60 70 00 57 41 PHSS..pWAKF`p.WA 0290: 4b 46 7b 60 0a 05 60 a0 18 93 60 01 50 38 58 48 KF{`..`...`.P8XH 02a0: 00 0a 41 86 5c 2e 5f 53 42 5f 50 57 52 42 0a 02 ..A.\._SB_PWRB.. 02b0: a0 46 08 44 54 53 45 54 52 41 50 0a 47 a0 42 06 .F.DTSETRAP.G.B. 02c0: 90 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 .\/._SB_PCI0LPCB 02d0: 45 43 4f 4b 93 45 43 44 59 00 a0 27 92 95 44 54 ECOK.ECDY..'..DT 02e0: 53 31 44 54 53 32 70 44 54 53 31 5c 2f 05 5f 53 S1DTS2pDTS1\/._S 02f0: 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b B_PCI0LPCBEC0_SK 0300: 54 41 a1 1d 70 44 54 53 32 5c 2f 05 5f 53 42 5f TA..pDTS2\/._SB_ 0310: 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 PCI0LPCBEC0_SKTA 0320: a1 16 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 0330: 42 50 48 53 53 0a 10 5c 2e 5f 50 52 5f 52 50 50 BPHSS..\._PR_RPP 0340: 43 a4 12 04 02 00 00 14 1e 47 45 54 42 0b 77 68 C........GETB.wh 0350: 0a 08 60 77 69 0a 08 61 5b 13 6a 60 61 54 42 46 ..`wi..a[.j`aTBF 0360: 33 a4 54 42 46 33 14 42 09 50 4e 4f 54 08 a0 4a 3.TBF3.B.PNOT..J 0370: 06 4d 50 45 4e a0 31 7b 50 44 43 30 0a 08 00 86 .MPEN.1{PDC0.... 0380: 5c 2e 5f 50 52 5f 43 50 55 30 0a 80 a0 1a 7b 50 \._PR_CPU0....{P 0390: 44 43 30 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC0...[".d.\._PR 03a0: 5f 43 50 55 30 0a 81 a0 31 7b 50 44 43 31 0a 08 _CPU0...1{PDC1.. 03b0: 00 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 a0 1a ..\._PR_CPU1.... 03c0: 7b 50 44 43 31 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC1...[".d.\._ 03d0: 50 52 5f 43 50 55 31 0a 81 a1 1f 86 5c 2e 5f 50 PR_CPU1.....\._P 03e0: 52 5f 43 50 55 30 0a 80 5b 22 0a 64 86 5c 2e 5f R_CPU0..[".d.\._ 03f0: 50 52 5f 43 50 55 30 0a 81 14 17 54 52 41 50 09 PR_CPU0....TRAP. 0400: 70 68 53 4d 49 46 70 00 54 52 50 30 a4 53 4d 49 phSMIFp.TRP0.SMI 0410: 46 10 41 0f 5f 53 42 5f 14 4a 0e 5f 49 4e 49 00 F.A._SB_.J._INI. 0420: 70 0b 99 99 4d 41 52 4b a0 1c 44 54 53 45 54 52 p...MARK..DTSETR 0430: 41 50 0a 47 5e 2f 03 50 43 49 30 4c 50 43 42 50 AP.G^/.PCI0LPCBP 0440: 48 53 53 0a 10 70 0b d0 07 4f 53 59 53 a0 4a 09 HSS..p...OSYS.J. 0450: 5b 12 5f 4f 53 49 60 a0 18 5f 4f 53 49 0d 4c 69 [._OSI`.._OSI.Li 0460: 6e 75 78 00 70 01 4c 49 4e 58 70 00 45 43 44 59 nux.p.LINXp.ECDY 0470: a0 1b 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 .._OSI.Windows 2 0480: 30 30 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 001.p...OSYS.._O 0490: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04a0: 53 50 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f SP1.p...OSYS.._O 04b0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04c0: 53 50 32 00 70 0b d2 07 4f 53 59 53 a0 1b 5f 4f SP2.p...OSYS.._O 04d0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 00 SI.Windows 2006. 04e0: 70 0b d6 07 4f 53 59 53 a0 14 90 4d 50 45 4e 93 p...OSYS...MPEN. 04f0: 4f 53 59 53 0b d1 07 54 52 41 50 0a 3d 54 52 41 OSYS...TRAP.=TRA 0500: 50 0a 2b 5b 80 47 4e 56 53 00 0c bc 2d 6e bf 0b P.+[.GNVS...-n.. 0510: 00 01 5b 81 45 24 47 4e 56 53 10 4f 53 59 53 10 ..[.E$GNVS.OSYS. 0520: 53 4d 49 46 08 50 52 4d 30 08 50 52 4d 31 08 53 SMIF.PRM0.PRM1.S 0530: 43 49 46 08 50 52 4d 32 08 50 52 4d 33 08 4c 43 CIF.PRM2.PRM3.LC 0540: 4b 46 08 50 52 4d 34 08 50 52 4d 35 08 50 38 30 KF.PRM4.PRM5.P80 0550: 44 20 4c 49 44 53 08 50 57 52 53 08 44 42 47 53 D LIDS.PWRS.DBGS 0560: 08 4c 49 4e 58 08 00 08 41 43 54 31 08 41 43 54 .LINX...ACT1.ACT 0570: 54 08 50 53 56 54 08 54 43 31 56 08 54 43 32 56 T.PSVT.TC1V.TC2V 0580: 08 54 53 50 56 08 43 52 54 54 08 44 54 53 45 08 .TSPV.CRTT.DTSE. 0590: 44 54 53 31 08 44 54 53 32 08 00 40 05 41 50 49 DTS1.DTS2..@.API 05a0: 43 08 4d 50 45 4e 08 50 43 50 30 08 50 43 50 31 C.MPEN.PCP0.PCP1 05b0: 08 50 50 43 4d 08 00 28 43 4d 41 50 08 43 4d 42 .PPCM..(CMAP.CMB 05c0: 50 08 4c 50 54 50 08 46 44 43 50 08 00 30 49 47 P.LPTP.FDCP..0IG 05d0: 44 53 08 54 4c 53 54 08 43 41 44 4c 08 50 41 44 DS.TLST.CADL.PAD 05e0: 4c 08 43 53 54 45 10 4e 53 54 45 10 53 53 54 45 L.CSTE.NSTE.SSTE 05f0: 10 4e 44 49 44 08 44 49 44 31 20 44 49 44 32 20 .NDID.DID1 DID2 0600: 44 49 44 33 20 44 49 44 34 20 44 49 44 35 20 00 DID3 DID4 DID5 . 0610: 40 06 42 4c 43 53 08 42 52 54 4c 08 41 4c 53 45 @.BLCS.BRTL.ALSE 0620: 08 41 4c 41 46 08 4c 4c 4f 57 08 4c 48 49 48 08 .ALAF.LLOW.LHIH. 0630: 00 08 45 4d 41 45 08 45 4d 41 50 10 45 4d 41 4c ..EMAE.EMAP.EMAL 0640: 10 00 08 4d 45 46 45 08 00 18 54 50 4d 50 08 54 ...MEFE...TPMP.T 0650: 50 4d 45 08 00 40 04 47 54 46 30 38 47 54 46 32 PME..@.GTF08GTF2 0660: 38 49 44 45 4d 08 47 54 46 31 38 00 40 09 41 53 8IDEM.GTF18.@.AS 0670: 4c 42 20 49 42 54 54 08 49 50 41 54 08 49 54 56 LB IBTT.IPAT.ITV 0680: 46 08 49 54 56 4d 08 49 50 53 43 08 49 42 4c 43 F.ITVM.IPSC.IBLC 0690: 08 49 42 49 41 08 49 53 53 43 08 49 34 30 39 08 .IBIA.ISSC.I409. 06a0: 49 35 30 39 08 49 36 30 39 08 49 37 30 39 08 49 I509.I609.I709.I 06b0: 44 4d 4d 08 49 44 4d 53 08 49 46 31 45 08 48 56 DMM.IDMS.IF1E.HV 06c0: 43 4f 08 4e 58 44 31 20 4e 58 44 32 20 4d 41 52 CO.NXD1 NXD2 MAR 06d0: 4b 10 42 52 41 44 08 42 54 45 4e 08 56 56 45 4e K.BRAD.BTEN.VVEN 06e0: 08 42 47 54 4c 08 54 4d 45 45 01 00 07 53 43 55 .BGTL.TMEE...SCU 06f0: 30 01 53 43 55 31 01 53 43 55 32 01 53 43 55 33 0.SCU1.SCU2.SCU3 0700: 01 00 04 58 4b 53 50 01 58 4b 49 4e 01 58 4b 49 ...XKSP.XKIN.XKI 0710: 44 01 58 4b 4f 4b 01 00 04 42 47 55 31 08 42 53 D.XKOK...BGU1.BS 0720: 54 31 08 42 46 43 31 10 57 4b 4c 4e 08 57 41 4b T1.BFC1.WKLN.WAK 0730: 46 08 44 53 4d 44 08 42 41 59 53 08 48 41 50 45 F.DSMD.BAYS.HAPE 0740: 01 00 07 44 54 53 4d 01 00 07 4f 44 54 31 08 4f ...DTSM...ODT1.O 0750: 44 54 32 08 44 54 53 57 08 08 44 53 45 4e 01 08 DT2.DTSW..DSEN.. 0760: 45 43 4f 4e 00 08 47 50 49 43 00 08 43 54 59 50 ECON..GPIC..CTYP 0770: 00 08 4c 30 31 43 00 08 56 46 4e 30 00 08 56 46 ..L01C..VFN0..VF 0780: 4e 31 00 10 4a 7c 5f 47 50 45 14 46 35 5f 4c 30 N1..J|_GPE.F5_L0 0790: 31 00 72 4c 30 31 43 01 4c 30 31 43 50 38 58 48 1.rL01C.L01CP8XH 07a0: 00 01 50 38 58 48 01 4c 30 31 43 a0 48 08 90 93 ..P8XH.L01C.H... 07b0: 52 50 31 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 RP1D.\/._SB_PCI0 07c0: 52 50 30 31 48 50 53 58 5b 22 0a 64 a0 40 05 5c RP01HPSX[".d.@.\ 07d0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 /._SB_PCI0RP01PD 07e0: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 07f0: 50 30 31 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f P01PDCXp.\/._SB_ 0800: 50 43 49 30 52 50 30 31 48 50 53 58 86 5c 2f 03 PCI0RP01HPSX.\/. 0810: 5f 53 42 5f 50 43 49 30 52 50 30 31 00 a1 16 70 _SB_PCI0RP01...p 0820: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0830: 48 50 53 58 a0 48 08 90 93 52 50 32 44 00 5c 2f HPSX.H...RP2D.\/ 0840: 04 5f 53 42 5f 50 43 49 30 52 50 30 32 48 50 53 ._SB_PCI0RP02HPS 0850: 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 5f 50 X[".d.@.\/._SB_P 0860: 43 49 30 52 50 30 32 50 44 43 58 70 01 5c 2f 04 CI0RP02PDCXp.\/. 0870: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 44 43 58 _SB_PCI0RP02PDCX 0880: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 0890: 32 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 2HPSX.\/._SB_PCI 08a0: 30 52 50 30 32 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP02...p.\/._SB 08b0: 5f 50 43 49 30 52 50 30 32 48 50 53 58 a0 48 08 _PCI0RP02HPSX.H. 08c0: 90 93 52 50 33 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP3D.\/._SB_PC 08d0: 49 30 52 50 30 33 48 50 53 58 5b 22 0a 64 a0 40 I0RP03HPSX[".d.@ 08e0: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 .\/._SB_PCI0RP03 08f0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0900: 30 52 50 30 33 50 44 43 58 70 01 5c 2f 04 5f 53 0RP03PDCXp.\/._S 0910: 42 5f 50 43 49 30 52 50 30 33 48 50 53 58 86 5c B_PCI0RP03HPSX.\ 0920: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 33 00 a1 /._SB_PCI0RP03.. 0930: 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .p.\/._SB_PCI0RP 0940: 30 33 48 50 53 58 a0 48 08 90 93 52 50 34 44 00 03HPSX.H...RP4D. 0950: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 48 \/._SB_PCI0RP04H 0960: 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 PSX[".d.@.\/._SB 0970: 5f 50 43 49 30 52 50 30 34 50 44 43 58 70 01 5c _PCI0RP04PDCXp.\ 0980: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 44 /._SB_PCI0RP04PD 0990: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 09a0: 50 30 34 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 P04HPSX.\/._SB_P 09b0: 43 49 30 52 50 30 34 00 a1 16 70 01 5c 2f 04 5f CI0RP04...p.\/._ 09c0: 53 42 5f 50 43 49 30 52 50 30 34 48 50 53 58 a0 SB_PCI0RP04HPSX. 09d0: 48 08 90 93 52 50 35 44 00 5c 2f 04 5f 53 42 5f H...RP5D.\/._SB_ 09e0: 50 43 49 30 52 50 30 35 48 50 53 58 5b 22 0a 64 PCI0RP05HPSX[".d 09f0: a0 40 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .@.\/._SB_PCI0RP 0a00: 30 35 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 05PDCXp.\/._SB_P 0a10: 43 49 30 52 50 30 35 50 44 43 58 70 01 5c 2f 04 CI0RP05PDCXp.\/. 0a20: 5f 53 42 5f 50 43 49 30 52 50 30 35 48 50 53 58 _SB_PCI0RP05HPSX 0a30: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 35 .\/._SB_PCI0RP05 0a40: 00 a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ...p.\/._SB_PCI0 0a50: 52 50 30 35 48 50 53 58 a0 48 08 90 93 52 50 36 RP05HPSX.H...RP6 0a60: 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 D.\/._SB_PCI0RP0 0a70: 36 48 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 6HPSX[".d.@.\/._ 0a80: 53 42 5f 50 43 49 30 52 50 30 36 50 44 43 58 70 SB_PCI0RP06PDCXp 0a90: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 0aa0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0ab0: 30 52 50 30 36 48 50 53 58 86 5c 2f 03 5f 53 42 0RP06HPSX.\/._SB 0ac0: 5f 50 43 49 30 52 50 30 36 00 a1 16 70 01 5c 2f _PCI0RP06...p.\/ 0ad0: 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 50 53 ._SB_PCI0RP06HPS 0ae0: 58 14 42 0d 5f 4c 30 32 00 70 00 47 50 45 43 a0 X.B._L02.p.GPEC. 0af0: 4d 0a 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 M.\/._SB_PCI0LPC 0b00: 42 45 43 4f 4b a0 4e 04 93 44 54 53 57 01 a0 27 BECOK.N..DTSW..' 0b10: 92 95 44 54 53 31 44 54 53 32 70 44 54 53 31 5c ..DTS1DTS2pDTS1\ 0b20: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0b30: 30 5f 53 4b 54 41 a1 1d 70 44 54 53 32 5c 2f 05 0_SKTA..pDTS2\/. 0b40: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f _SB_PCI0LPCBEC0_ 0b50: 53 4b 54 41 a1 48 04 a0 27 92 95 4f 44 54 31 4f SKTA.H..'..ODT1O 0b60: 44 54 32 70 4f 44 54 31 5c 2f 05 5f 53 42 5f 50 DT2pODT1\/._SB_P 0b70: 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 CI0LPCBEC0_SKTA. 0b80: 1d 70 4f 44 54 32 5c 2f 05 5f 53 42 5f 50 43 49 .pODT2\/._SB_PCI 0b90: 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 16 5c 0LPCBEC0_SKTA..\ 0ba0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 50 48 /._SB_PCI0LPCBPH 0bb0: 53 53 0a 10 14 18 5f 4c 30 33 00 86 5c 2f 03 5f SS...._L03..\/._ 0bc0: 53 42 5f 50 43 49 30 55 53 42 31 0a 02 14 18 5f SB_PCI0USB1...._ 0bd0: 4c 30 34 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 L04..\/._SB_PCI0 0be0: 55 53 42 32 0a 02 14 18 5f 4c 30 35 00 86 5c 2f USB2...._L05..\/ 0bf0: 03 5f 53 42 5f 50 43 49 30 55 53 42 35 0a 02 14 ._SB_PCI0USB5... 0c00: 36 5f 4c 30 36 00 a0 27 5c 2f 04 5f 53 42 5f 50 6_L06..'\/._SB_P 0c10: 43 49 30 47 46 58 30 47 53 53 45 5c 2f 04 5f 53 CI0GFX0GSSE\/._S 0c20: 42 5f 50 43 49 30 47 46 58 30 47 53 43 49 a1 07 B_PCI0GFX0GSCI.. 0c30: 70 01 53 43 49 53 14 43 1f 5f 4c 30 39 00 a0 41 p.SCIS.C._L09..A 0c40: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0c50: 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PSPXp.\/._SB_PCI 0c60: 30 52 50 30 31 50 53 50 58 70 01 5c 2f 04 5f 53 0RP01PSPXp.\/._S 0c70: 42 5f 50 43 49 30 52 50 30 31 50 4d 53 58 86 5c B_PCI0RP01PMSX.\ 0c80: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 31 0a 02 /._SB_PCI0RP01.. 0c90: a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .A.\/._SB_PCI0RP 0ca0: 30 32 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 02PSPXp.\/._SB_P 0cb0: 43 49 30 52 50 30 32 50 53 50 58 70 01 5c 2f 04 CI0RP02PSPXp.\/. 0cc0: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 4d 53 58 _SB_PCI0RP02PMSX 0cd0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 0ce0: 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 ...A.\/._SB_PCI0 0cf0: 52 50 30 33 50 53 50 58 70 01 5c 2f 04 5f 53 42 RP03PSPXp.\/._SB 0d00: 5f 50 43 49 30 52 50 30 33 50 53 50 58 70 01 5c _PCI0RP03PSPXp.\ 0d10: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 50 4d /._SB_PCI0RP03PM 0d20: 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 SX.\/._SB_PCI0RP 0d30: 30 33 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 03...A.\/._SB_PC 0d40: 49 30 52 50 30 34 50 53 50 58 70 01 5c 2f 04 5f I0RP04PSPXp.\/._ 0d50: 53 42 5f 50 43 49 30 52 50 30 34 50 53 50 58 70 SB_PCI0RP04PSPXp 0d60: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 .\/._SB_PCI0RP04 0d70: 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 PMSX.\/._SB_PCI0 0d80: 52 50 30 34 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f RP04...A.\/._SB_ 0d90: 50 43 49 30 52 50 30 35 50 53 50 58 70 01 5c 2f PCI0RP05PSPXp.\/ 0da0: 04 5f 53 42 5f 50 43 49 30 52 50 30 35 50 53 50 ._SB_PCI0RP05PSP 0db0: 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 Xp.\/._SB_PCI0RP 0dc0: 30 35 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 05PMSX.\/._SB_PC 0dd0: 49 30 52 50 30 35 0a 02 a0 41 05 5c 2f 04 5f 53 I0RP05...A.\/._S 0de0: 42 5f 50 43 49 30 52 50 30 36 50 53 50 58 70 01 B_PCI0RP06PSPXp. 0df0: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 50 \/._SB_PCI0RP06P 0e00: 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 SPXp.\/._SB_PCI0 0e10: 52 50 30 36 50 4d 53 58 86 5c 2f 03 5f 53 42 5f RP06PMSX.\/._SB_ 0e20: 50 43 49 30 52 50 30 36 0a 02 14 18 5f 4c 30 42 PCI0RP06...._L0B 0e30: 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 50 43 49 ..\/._SB_PCI0PCI 0e40: 42 0a 02 14 18 5f 4c 30 43 00 86 5c 2f 03 5f 53 B...._L0C..\/._S 0e50: 42 5f 50 43 49 30 55 53 42 33 0a 02 14 4b 0b 5f B_PCI0USB3...K._ 0e60: 4c 30 44 00 a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 L0D..;\/._SB_PCI 0e70: 30 45 48 43 31 50 4d 45 53 70 01 5c 2f 04 5f 53 0EHC1PMESp.\/._S 0e80: 42 5f 50 43 49 30 45 48 43 31 50 4d 45 53 86 5c B_PCI0EHC1PMES.\ 0e90: 2f 03 5f 53 42 5f 50 43 49 30 45 48 43 31 0a 02 /._SB_PCI0EHC1.. 0ea0: a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 30 45 48 43 .;\/._SB_PCI0EHC 0eb0: 32 50 4d 45 53 70 01 5c 2f 04 5f 53 42 5f 50 43 2PMESp.\/._SB_PC 0ec0: 49 30 45 48 43 32 50 4d 45 53 86 5c 2f 03 5f 53 I0EHC2PMES.\/._S 0ed0: 42 5f 50 43 49 30 45 48 43 32 0a 02 a0 3b 5c 2f B_PCI0EHC2...;\/ 0ee0: 04 5f 53 42 5f 50 43 49 30 48 44 45 46 50 4d 45 ._SB_PCI0HDEFPME 0ef0: 53 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 48 44 Sp.\/._SB_PCI0HD 0f00: 45 46 50 4d 45 53 86 5c 2f 03 5f 53 42 5f 50 43 EFPMES.\/._SB_PC 0f10: 49 30 48 44 45 46 0a 02 14 18 5f 4c 30 45 00 86 I0HDEF...._L0E.. 0f20: 5c 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 34 0a \/._SB_PCI0USB4. 0f30: 02 14 1c 5f 4c 31 42 00 80 4c 50 4f 4c 4c 50 4f ..._L1B..LPOLLPO 0f40: 4c 86 5c 2e 5f 53 42 5f 4c 49 44 30 0a 80 10 46 L.\._SB_LID0...F 0f50: 0b 5f 50 52 5f 5b 83 0b 43 50 55 30 00 10 10 00 ._PR_[..CPU0.... 0f60: 00 06 5b 83 0b 43 50 55 31 01 10 10 00 00 06 14 ..[..CPU1....... 0f70: 45 09 52 50 50 43 00 a0 4d 08 93 4f 53 59 53 0b E.RPPC..M..OSYS. 0f80: d2 07 a0 42 08 7b 43 46 47 44 01 00 a0 42 04 94 ...B.{CFGD...B.. 0f90: 5e 2e 43 50 55 30 5f 50 50 43 00 74 5e 2e 43 50 ^.CPU0_PPC.t^.CP 0fa0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 0fb0: 43 50 4e 4f 54 72 5e 2e 43 50 55 30 5f 50 50 43 CPNOTr^.CPU0_PPC 0fc0: 01 5e 2e 43 50 55 30 5f 50 50 43 50 4e 4f 54 a1 .^.CPU0_PPCPNOT. 0fd0: 35 72 5e 2e 43 50 55 30 5f 50 50 43 01 5e 2e 43 5r^.CPU0_PPC.^.C 0fe0: 50 55 30 5f 50 50 43 50 4e 4f 54 74 5e 2e 43 50 PU0_PPCPNOTt^.CP 0ff0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 1000: 43 50 4e 4f 54 08 46 57 53 4f 0d 46 57 53 4f 00 CPNOT.FWSO.FWSO. 1010: 08 5f 50 53 43 00 14 12 5f 50 53 30 00 70 5f 50 ._PSC..._PS0.p_P 1020: 53 43 60 70 00 5f 50 53 43 14 0d 5f 50 53 33 00 SC`p._PSC.._PS3. 1030: 70 0a 03 5f 50 53 43 10 8c fb 04 5f 53 42 5f 5b p.._PSC...._SB_[ 1040: 82 4f 3e 41 4d 57 30 08 5f 48 49 44 0d 70 6e 70 .O>AMW0._HID.pnp 1050: 30 63 31 34 00 08 5f 55 49 44 00 08 5f 57 44 47 0c14.._UID.._WDG 1060: 11 3f 0a 3c a7 1d 85 2e 53 d0 5f 49 9d fa 1a 4a .?.<....S._I...J 1070: d6 2e 6a 86 41 43 01 00 3b 6d 43 71 dd fb 72 4c ..j.AC..;mCq..rL 1080: bc b8 43 5b fe 0d 64 f9 42 43 01 00 21 12 90 05 ..C[..d.BC..!... 1090: 66 d5 d1 11 b2 f0 00 a0 c9 06 29 10 42 41 01 00 f.........).BA.. 10a0: 08 53 54 41 43 11 07 0a 04 01 14 03 00 14 1f 57 .STAC..........W 10b0: 51 41 43 01 70 0d 4d 58 4d 54 43 43 6f 6e 66 69 QAC.p.MXMTCConfi 10c0: 67 44 61 74 61 00 5b 31 a4 53 54 41 43 08 53 54 gData.[1.STAC.ST 10d0: 42 43 11 07 0a 04 01 00 00 00 14 34 57 51 42 43 BC.........4WQBC 10e0: 01 70 0d 47 65 74 20 4d 58 4d 54 43 43 6f 6e 74 .p.Get MXMTCCont 10f0: 72 6f 6c 44 61 74 61 3a 20 53 54 42 43 20 3d 20 rolData: STBC = 1100: 00 5b 31 70 53 54 42 43 5b 31 a4 53 54 42 43 14 .[1pSTBC[1.STBC. 1110: 47 06 57 53 42 43 02 70 69 53 54 42 43 70 0d 53 G.WSBC.piSTBCp.S 1120: 65 74 20 4d 58 4d 54 43 43 6f 6e 74 72 6f 6c 44 et MXMTCControlD 1130: 61 74 61 3a 20 53 54 42 43 20 3d 20 00 5b 31 70 ata: STBC = .[1p 1140: 53 54 42 43 5b 31 a0 30 93 5e 5e 2f 03 50 43 49 STBC[1.0.^^/.PCI 1150: 30 4c 50 43 42 45 43 4f 4b 01 70 83 88 53 54 42 0LPCBECOK.p..STB 1160: 43 01 00 5e 5e 2f 04 50 43 49 30 4c 50 43 42 45 C..^^/.PCI0LPCBE 1170: 43 30 5f 53 4b 54 43 08 57 51 42 41 11 43 2b 0b C0_SKTC.WQBA.C+. 1180: ae 02 46 4f 4d 42 01 00 00 00 9e 02 00 00 c0 0b ..FOMB.......... 1190: 00 00 44 53 00 01 1a 7d da 54 28 d9 85 00 01 06 ..DS...}.T(..... 11a0: 18 42 10 07 10 0a 4b 61 02 c9 21 52 3c 18 94 05 .B....Ka..!R<... 11b0: 10 43 88 57 04 44 04 84 bc 0a b0 29 c0 24 88 fa .C.W.D.....).$.. 11c0: f7 87 28 09 0e 25 04 42 12 05 98 17 a0 5b 80 61 ..(..%.B.....[.a 11d0: 01 b6 05 98 16 e0 18 92 4a 03 a7 04 96 02 21 a1 ........J.....!. 11e0: 02 94 0b f0 2d 40 3b a2 24 0b b0 0c 23 02 8f 82 ....-@;.$...#... 11f0: a1 71 68 ec 30 2c 13 4c 83 38 8c b2 91 45 60 dc .qh.0,.L.8...E`. 1200: 4e 05 c8 15 20 4c 80 78 54 61 34 07 45 e0 42 63 N... L.xTa4.E.Bc 1210: 64 40 c8 a3 00 ab a3 d0 a4 12 d8 bd 00 65 02 2c d@...........e., 1220: 0a 10 27 c0 9a 00 63 48 32 28 40 9b 00 5b 20 42 ..'...cH2(@..[ B 1230: 0f d4 19 8a 46 70 02 51 6a 46 11 48 ac 1a 01 85 ....Fp.QjF.H.... 1240: 12 34 46 b0 10 81 c2 86 37 46 98 03 88 d1 fe 20 .4F.....7F..... 1250: 48 20 05 e3 66 91 46 83 1a 6b 82 63 f7 68 4e b8 H ..f.F..k.c.hN. 1260: 73 01 d2 e7 26 90 a3 3b b8 3a 07 4d 86 c7 b0 1e s...&..;.:.M.... 1270: 06 d8 29 00 ef 1a 50 d3 3f 78 26 08 0e 35 44 8f ..)...P.?x&..5D. 1280: 3a dc 09 1c fb 91 30 88 b3 3b 6e ac c3 c9 68 d0 :.....0..;n...h. 1290: a5 0a 30 7b 00 d0 d0 12 9c f6 99 84 7e 0f 38 9f ..0{........~.8. 12a0: 9e 21 89 fc 41 a0 46 e6 ff 3f b4 c7 78 5a 31 43 .!..A.F..?..xZ1C 12b0: 3e 0b 1c 16 13 0b a1 4d 6a 3c 40 40 e1 d1 40 08 >......Mj<@@..@. 12c0: 6f 06 9e af 09 46 86 90 93 f1 a0 06 e0 41 d7 3a o....F.......A.: 12d0: 32 8d 27 a6 21 cf e8 00 22 bf 32 78 0c 41 02 f9 2.'.!...".2x.A.. 12e0: c4 60 b8 c7 81 13 78 02 f0 59 40 10 92 00 21 51 .`....x..Y@...!Q 12f0: e3 a7 47 08 7e 7a 78 93 30 28 1f d2 99 f9 90 e1 ..G.~zx.0(...... 1300: 11 c2 07 c4 7b 9f 3b 19 c1 29 7b a4 e0 b0 7e 0e ....{.;..){...~. 1310: 20 c0 af 0f 8f 0d 09 7c ae 08 8c 1d aa fd 0a 40 ......|.......@ 1320: 08 1e ed 51 e0 54 23 1c 2d 78 08 8a 1c 03 4a cc ...Q.T#.-x....J. 1330: 18 50 03 38 85 d0 e7 73 04 47 14 25 f6 21 19 da .P.8...s.G.%.!.. 1340: 08 e1 1f 39 4e c1 f7 8b 23 3d ad 23 78 91 f0 08 ...9N...#=.#x... 1350: 30 e1 ce 28 a8 38 30 f4 ff 7f 4c 01 dc 7a 3b a6 0..(.80...L..z;. 1360: 80 3e c0 31 05 50 fc ff 3f a6 00 87 a8 c7 14 f4 .>.1.P..?....... 1370: 40 0c 7c 2e a1 0d ff 96 c1 8e 03 87 74 6a 8f 28 @.|.........tj.( 1380: 80 29 79 47 14 50 8c 14 d6 f1 04 18 05 3c 9b a0 .)yG.P.......<.. 1390: 22 1d 4f 80 ce ff ff 78 02 58 b8 9a bc 92 84 7d ".O....x.X.....} 13a0: 1e 78 1d 89 14 e3 41 e2 b5 e4 c1 24 46 98 08 8f .x....A....$F... 13b0: 27 1e 47 c0 b7 82 28 91 8e 3e c4 83 49 28 63 3e '.G...(..>..I(c> 13c0: a3 84 89 f9 04 70 22 ef 27 46 0a 73 2a 8f 27 2c .....p".'F.s*.', 13d0: c4 f1 04 a0 85 e2 e3 09 3a 2c 84 fe ff c7 13 dc ........:,...... 13e0: e1 c1 a7 0c fc 85 0c c6 f9 04 30 24 f0 7c 02 ca ..........0$.|.. 13f0: db 18 e6 80 02 8c 14 da f4 a9 d1 a8 55 83 32 35 ............U.25 1400: ca 34 a8 d5 a7 52 63 c6 4c 9c 52 bc 6c 8d df f2 .4...Rc.L.R.l... 1410: 9e 09 02 b1 20 0a 81 38 cc f3 42 20 96 a2 01 84 .... ..8..B .... 1420: 85 06 a1 42 a9 05 e2 98 20 34 92 0a 10 f6 ff 07 ...B.... 4...... 1430: 5b 82 1b 4c 49 44 30 08 5f 48 49 44 0c 41 d0 0c [..LID0._HID.A.. 1440: 0d 14 0b 5f 4c 49 44 00 a4 4c 50 4f 4c 5b 82 0f ..._LID..LPOL[.. 1450: 50 57 52 42 08 5f 48 49 44 0c 41 d0 0c 0c 5b 82 PWRB._HID.A...[. 1460: 84 b9 04 50 43 49 30 14 09 5f 53 33 44 00 a4 0a ...PCI0.._S3D... 1470: 02 14 09 5f 53 34 44 00 a4 0a 02 08 5f 48 49 44 ..._S4D....._HID 1480: 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 d0 0a 03 5b .A...._CID.A...[ 1490: 82 43 0e 4d 43 48 43 08 5f 41 44 52 00 5b 80 48 .C.MCHC._ADR.[.H 14a0: 42 55 53 02 0a 40 0a c0 5b 81 4a 0c 48 42 55 53 BUS..@..[.J.HBUS 14b0: 03 45 50 45 4e 01 00 0b 45 50 42 52 14 00 20 4d .EPEN...EPBR.. M 14c0: 48 45 4e 01 00 0d 4d 48 42 52 12 00 40 0a 50 58 HEN...MHBR..@.PX 14d0: 45 4e 01 50 58 53 5a 02 00 17 50 58 42 52 06 00 EN.PXSZ...PXBR.. 14e0: 20 44 49 45 4e 01 00 0b 44 49 42 52 14 00 20 49 DIEN...DIBR.. I 14f0: 50 45 4e 01 00 0b 49 50 42 52 14 00 40 0e 00 04 PEN...IPBR..@... 1500: 50 4d 30 48 02 00 02 50 4d 31 4c 02 00 02 50 4d PM0H...PM1L...PM 1510: 31 48 02 00 02 50 4d 32 4c 02 00 02 50 4d 32 48 1H...PM2L...PM2H 1520: 02 00 02 50 4d 33 4c 02 00 02 50 4d 33 48 02 00 ...PM3L...PM3H.. 1530: 02 50 4d 34 4c 02 00 02 50 4d 34 48 02 00 02 50 .PM4L...PM4H...P 1540: 4d 35 4c 02 00 02 50 4d 35 48 02 00 02 50 4d 36 M5L...PM5H...PM6 1550: 4c 02 00 02 50 4d 36 48 02 00 02 00 07 48 45 4e L...PM6H.....HEN 1560: 41 01 00 40 05 54 55 55 44 10 00 40 06 00 04 54 A..@.TUUD..@...T 1570: 4c 55 44 0c 08 42 55 46 30 11 4d 20 0b 08 02 88 LUD..BUF0.M .... 1580: 0d 00 02 0c 00 00 00 00 00 ff 00 00 00 00 01 87 ................ 1590: 17 00 01 0c 03 00 00 00 00 00 00 00 00 f7 0c 00 ................ 15a0: 00 00 00 00 00 f8 0c 00 00 47 01 f8 0c f8 0c 01 .........G...... 15b0: 08 87 17 00 01 0c 03 00 00 00 00 00 0d 00 00 ff ................ 15c0: ff 00 00 00 00 00 00 00 f3 00 00 87 17 00 00 0c ................ 15d0: 03 00 00 00 00 00 00 0a 00 ff ff 0b 00 00 00 00 ................ 15e0: 00 00 00 02 00 87 17 00 00 0c 03 00 00 00 00 00 ................ 15f0: 00 0c 00 ff 3f 0c 00 00 00 00 00 00 40 00 00 87 ....?.......@... 1600: 17 00 00 0c 03 00 00 00 00 00 40 0c 00 ff 7f 0c ..........@..... 1610: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 1620: 00 00 00 00 80 0c 00 ff bf 0c 00 00 00 00 00 00 ................ 1630: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0c @............... 1640: 00 ff ff 0c 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1650: 00 0c 03 00 00 00 00 00 00 0d 00 ff 3f 0d 00 00 ............?... 1660: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1670: 00 00 40 0d 00 ff 7f 0d 00 00 00 00 00 00 40 00 ..@...........@. 1680: 00 87 17 00 00 0c 03 00 00 00 00 00 80 0d 00 ff ................ 1690: bf 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c ........@....... 16a0: 03 00 00 00 00 00 c0 0d 00 ff ff 0d 00 00 00 00 ................ 16b0: 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 ..@............. 16c0: 00 0e 00 ff 3f 0e 00 00 00 00 00 00 40 00 00 87 ....?.......@... 16d0: 17 00 00 0c 03 00 00 00 00 00 40 0e 00 ff 7f 0e ..........@..... 16e0: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 16f0: 00 00 00 00 80 0e 00 ff bf 0e 00 00 00 00 00 00 ................ 1700: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0e @............... 1710: 00 ff ff 0e 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1720: 00 0c 03 00 00 00 00 00 00 0f 00 ff ff 0f 00 00 ................ 1730: 00 00 00 00 00 01 00 87 17 00 00 0c 03 00 00 00 ................ 1740: 00 00 00 00 00 ff ff ff df 00 00 00 00 00 00 00 ................ 1750: 00 87 17 00 00 0c 03 00 00 00 00 00 00 00 f0 ff ................ 1760: ff bf fe 00 00 00 00 00 00 c0 0e 87 17 00 00 0c ................ 1770: 03 00 00 00 00 00 00 d4 fe ff 4f d4 fe 00 00 00 ..........O..... 1780: 00 00 00 00 00 79 00 14 4b 3d 5f 43 52 53 08 a0 .....y..K=_CRS.. 1790: 1c 5e 2e 4d 43 48 43 50 4d 31 4c 8a 42 55 46 30 .^.MCHCPM1L.BUF0 17a0: 0a 7c 43 30 4c 4e 70 00 43 30 4c 4e a0 1f 93 5e .|C0LNp.C0LN...^ 17b0: 2e 4d 43 48 43 50 4d 31 4c 01 8d 42 55 46 30 0b .MCHCPM1L..BUF0. 17c0: 58 03 43 30 52 57 70 00 43 30 52 57 a0 1c 5e 2e X.C0RWp.C0RW..^. 17d0: 4d 43 48 43 50 4d 31 48 8a 42 55 46 30 0a 96 43 MCHCPM1H.BUF0..C 17e0: 34 4c 4e 70 00 43 34 4c 4e a0 1f 93 5e 2e 4d 43 4LNp.C4LN...^.MC 17f0: 48 43 50 4d 31 48 01 8d 42 55 46 30 0b 28 04 43 HCPM1H..BUF0.(.C 1800: 34 52 57 70 00 43 34 52 57 a0 1c 5e 2e 4d 43 48 4RWp.C4RW..^.MCH 1810: 43 50 4d 32 4c 8a 42 55 46 30 0a b0 43 38 4c 4e CPM2L.BUF0..C8LN 1820: 70 00 43 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 p.C8LN...^.MCHCP 1830: 4d 32 4c 01 8d 42 55 46 30 0b f8 04 43 38 52 57 M2L..BUF0...C8RW 1840: 70 00 43 38 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d p.C8RW..^.MCHCPM 1850: 32 48 8a 42 55 46 30 0a ca 43 43 4c 4e 70 00 43 2H.BUF0..CCLNp.C 1860: 43 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 32 48 CLN...^.MCHCPM2H 1870: 01 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 43 ..BUF0...CCRWp.C 1880: 43 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d 33 4c 8a CRW..^.MCHCPM3L. 1890: 42 55 46 30 0a e4 44 30 4c 4e 70 00 44 30 4c 4e BUF0..D0LNp.D0LN 18a0: a0 1f 93 5e 2e 4d 43 48 43 50 4d 33 4c 01 8d 42 ...^.MCHCPM3L..B 18b0: 55 46 30 0b 98 06 44 30 52 57 70 00 44 30 52 57 UF0...D0RWp.D0RW 18c0: a0 1c 5e 2e 4d 43 48 43 50 4d 33 48 8a 42 55 46 ..^.MCHCPM3H.BUF 18d0: 30 0a fe 44 34 4c 4e 70 00 44 34 4c 4e a0 1f 93 0..D4LNp.D4LN... 18e0: 5e 2e 4d 43 48 43 50 4d 33 48 01 8d 42 55 46 30 ^.MCHCPM3H..BUF0 18f0: 0b 68 07 44 34 52 57 70 00 44 34 52 57 a0 1d 5e .h.D4RWp.D4RW..^ 1900: 2e 4d 43 48 43 50 4d 34 4c 8a 42 55 46 30 0b 18 .MCHCPM4L.BUF0.. 1910: 01 44 38 4c 4e 70 00 44 38 4c 4e a0 1f 93 5e 2e .D8LNp.D8LN...^. 1920: 4d 43 48 43 50 4d 34 4c 01 8d 42 55 46 30 0b 38 MCHCPM4L..BUF0.8 1930: 08 44 38 52 57 70 00 44 38 52 57 a0 1d 5e 2e 4d .D8RWp.D8RW..^.M 1940: 43 48 43 50 4d 34 48 8a 42 55 46 30 0b 32 01 44 CHCPM4H.BUF0.2.D 1950: 43 4c 4e 70 00 44 43 4c 4e a0 1f 93 5e 2e 4d 43 CLNp.DCLN...^.MC 1960: 48 43 50 4d 34 48 01 8d 42 55 46 30 0b 08 09 44 HCPM4H..BUF0...D 1970: 43 52 57 70 00 44 43 52 57 a0 1d 5e 2e 4d 43 48 CRWp.DCRW..^.MCH 1980: 43 50 4d 35 4c 8a 42 55 46 30 0b 4c 01 45 30 4c CPM5L.BUF0.L.E0L 1990: 4e 70 00 45 30 4c 4e a0 1f 93 5e 2e 4d 43 48 43 Np.E0LN...^.MCHC 19a0: 50 4d 35 4c 01 8d 42 55 46 30 0b d8 09 45 30 52 PM5L..BUF0...E0R 19b0: 57 70 00 45 30 52 57 a0 1d 5e 2e 4d 43 48 43 50 Wp.E0RW..^.MCHCP 19c0: 4d 35 48 8a 42 55 46 30 0b 66 01 45 34 4c 4e 70 M5H.BUF0.f.E4LNp 19d0: 00 45 34 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d .E4LN...^.MCHCPM 19e0: 35 48 01 8d 42 55 46 30 0b a8 0a 45 34 52 57 70 5H..BUF0...E4RWp 19f0: 00 45 34 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 .E4RW..^.MCHCPM6 1a00: 4c 8a 42 55 46 30 0b 80 01 45 38 4c 4e 70 00 45 L.BUF0...E8LNp.E 1a10: 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 4c 8LN...^.MCHCPM6L 1a20: 01 8d 42 55 46 30 0b 78 0b 45 38 52 57 70 00 45 ..BUF0.x.E8RWp.E 1a30: 38 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 48 8a 8RW..^.MCHCPM6H. 1a40: 42 55 46 30 0b 9a 01 45 43 4c 4e 70 00 45 43 4c BUF0...ECLNp.ECL 1a50: 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 48 01 8d N...^.MCHCPM6H.. 1a60: 42 55 46 30 0b 48 0c 45 43 52 57 70 00 45 43 52 BUF0.H.ECRWp.ECR 1a70: 57 a0 1d 5e 2e 4d 43 48 43 50 4d 30 48 8a 42 55 W..^.MCHCPM0H.BU 1a80: 46 30 0b b4 01 46 30 4c 4e 70 00 46 30 4c 4e a0 F0...F0LNp.F0LN. 1a90: 1f 93 5e 2e 4d 43 48 43 50 4d 30 48 01 8d 42 55 ..^.MCHCPM0H..BU 1aa0: 46 30 0b 18 0d 46 30 52 57 70 00 46 30 52 57 8a F0...F0RWp.F0RW. 1ab0: 42 55 46 30 0b c2 01 4d 31 4d 4e 8a 42 55 46 30 BUF0...M1MN.BUF0 1ac0: 0b c6 01 4d 31 4d 58 8a 42 55 46 30 0b ce 01 4d ...M1MX.BUF0...M 1ad0: 31 4c 4e 8a 42 55 46 30 0b dc 01 4d 32 4d 4e 8a 1LN.BUF0...M2MN. 1ae0: 42 55 46 30 0b e0 01 4d 32 4d 58 8a 42 55 46 30 BUF0...M2MX.BUF0 1af0: 0b e8 01 4d 32 4c 4e 79 5e 2e 4d 43 48 43 50 58 ...M2LNy^.MCHCPX 1b00: 42 52 0a 1a 4d 31 4d 58 7a 0c 00 00 00 10 5e 2e BR..M1MXz.....^. 1b10: 4d 43 48 43 50 58 53 5a 60 72 4d 31 4d 58 60 4d MCHCPXSZ`rM1MX`M 1b20: 32 4d 4e 72 74 4d 32 4d 58 4d 32 4d 4e 00 01 4d 2MNrtM2MXM2MN..M 1b30: 32 4c 4e 74 4d 31 4d 58 01 4d 31 4d 58 79 5e 2e 2LNtM1MX.M1MXy^. 1b40: 4d 43 48 43 54 4c 55 44 0a 14 4d 31 4d 4e 72 74 MCHCTLUD..M1MNrt 1b50: 4d 31 4d 58 4d 31 4d 4e 00 01 4d 31 4c 4e a4 42 M1MXM1MN..M1LN.B 1b60: 55 46 30 14 47 28 5f 50 52 54 00 a0 45 0f 47 50 UF0.G(_PRT..E.GP 1b70: 49 43 a4 12 4d 0e 13 12 0b 04 0c ff ff 01 00 00 IC..M........... 1b80: 00 0a 10 12 0b 04 0c ff ff 02 00 00 00 0a 10 12 ................ 1b90: 0b 04 0c ff ff 07 00 00 00 0a 10 12 0b 04 0c ff ................ 1ba0: ff 19 00 00 00 0a 14 12 0b 04 0c ff ff 1a 00 00 ................ 1bb0: 00 0a 10 12 0b 04 0c ff ff 1a 00 01 00 0a 15 12 ................ 1bc0: 0c 04 0c ff ff 1a 00 0a 02 00 0a 12 12 0b 04 0c ................ 1bd0: ff ff 1b 00 00 00 0a 16 12 0b 04 0c ff ff 1c 00 ................ 1be0: 00 00 0a 11 12 0b 04 0c ff ff 1c 00 01 00 0a 10 ................ 1bf0: 12 0c 04 0c ff ff 1c 00 0a 02 00 0a 12 12 0c 04 ................ 1c00: 0c ff ff 1c 00 0a 03 00 0a 13 12 0b 04 0c ff ff ................ 1c10: 1d 00 00 00 0a 17 12 0b 04 0c ff ff 1d 00 01 00 ................ 1c20: 0a 13 12 0c 04 0c ff ff 1d 00 0a 02 00 0a 12 12 ................ 1c30: 0b 04 0c ff ff 1f 00 00 00 0a 13 12 0b 04 0c ff ................ 1c40: ff 1f 00 01 00 0a 13 12 0c 04 0c ff ff 1f 00 0a ................ 1c50: 02 00 0a 13 12 0c 04 0c ff ff 1f 00 0a 03 00 0a ................ 1c60: 10 a1 49 18 a4 12 45 18 13 12 13 04 0c ff ff 01 ..I...E......... 1c70: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1c80: 0c ff ff 02 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 ......^.LPCBLNKA 1c90: 00 12 13 04 0c ff ff 07 00 00 5e 2e 4c 50 43 42 ..........^.LPCB 1ca0: 4c 4e 4b 41 00 12 13 04 0c ff ff 19 00 00 5e 2e LNKA..........^. 1cb0: 4c 50 43 42 4c 4e 4b 45 00 12 13 04 0c ff ff 1a LPCBLNKE........ 1cc0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1cd0: 0c ff ff 1a 00 01 5e 2e 4c 50 43 42 4c 4e 4b 46 ......^.LPCBLNKF 1ce0: 00 12 14 04 0c ff ff 1a 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1cf0: 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1b 00 00 5e BLNKC..........^ 1d00: 2e 4c 50 43 42 4c 4e 4b 47 00 12 13 04 0c ff ff .LPCBLNKG....... 1d10: 1c 00 00 5e 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 ...^.LPCBLNKB... 1d20: 04 0c ff ff 1c 00 01 5e 2e 4c 50 43 42 4c 4e 4b .......^.LPCBLNK 1d30: 41 00 12 14 04 0c ff ff 1c 00 0a 02 5e 2e 4c 50 A...........^.LP 1d40: 43 42 4c 4e 4b 43 00 12 14 04 0c ff ff 1c 00 0a CBLNKC.......... 1d50: 03 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0c .^.LPCBLNKD..... 1d60: ff ff 1d 00 00 5e 2e 4c 50 43 42 4c 4e 4b 48 00 .....^.LPCBLNKH. 1d70: 12 13 04 0c ff ff 1d 00 01 5e 2e 4c 50 43 42 4c .........^.LPCBL 1d80: 4e 4b 44 00 12 14 04 0c ff ff 1d 00 0a 02 5e 2e NKD...........^. 1d90: 4c 50 43 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1f LPCBLNKC........ 1da0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 ..^.LPCBLNKD.... 1db0: 0c ff ff 1f 00 01 5e 2e 4c 50 43 42 4c 4e 4b 44 ......^.LPCBLNKD 1dc0: 00 12 14 04 0c ff ff 1f 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1dd0: 42 4c 4e 4b 44 00 12 14 04 0c ff ff 1f 00 0a 03 BLNKD........... 1de0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 40 14 50 ^.LPCBLNKA.[.@.P 1df0: 44 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 DRC._HID.A...._U 1e00: 49 44 01 08 42 55 46 30 11 46 06 0a 62 86 09 00 ID..BUF0.F..b... 1e10: 01 00 00 00 00 00 40 00 00 86 09 00 01 00 00 00 ......@......... 1e20: 00 00 40 00 00 86 09 00 01 00 00 00 00 00 10 00 ..@............. 1e30: 00 86 09 00 01 00 00 00 00 00 10 00 00 86 09 00 ................ 1e40: 01 00 00 00 00 00 00 00 00 86 09 00 01 00 00 d2 ................ 1e50: fe 00 00 02 00 86 09 00 01 00 00 d4 fe 00 50 00 ..............P. 1e60: 00 86 09 00 01 00 50 d4 fe 00 b0 04 00 79 00 14 ......P......y.. 1e70: 4d 0b 5f 43 52 53 08 8a 42 55 46 30 0a 04 52 42 M._CRS..BUF0..RB 1e80: 52 30 79 5e 5e 2e 4c 50 43 42 52 43 42 41 0a 0e R0y^^.LPCBRCBA.. 1e90: 52 42 52 30 8a 42 55 46 30 0a 10 4d 42 52 30 79 RBR0.BUF0..MBR0y 1ea0: 5e 5e 2e 4d 43 48 43 4d 48 42 52 0a 0e 4d 42 52 ^^.MCHCMHBR..MBR 1eb0: 30 8a 42 55 46 30 0a 1c 44 42 52 30 79 5e 5e 2e 0.BUF0..DBR0y^^. 1ec0: 4d 43 48 43 44 49 42 52 0a 0c 44 42 52 30 8a 42 MCHCDIBR..DBR0.B 1ed0: 55 46 30 0a 28 45 42 52 30 79 5e 5e 2e 4d 43 48 UF0.(EBR0y^^.MCH 1ee0: 43 45 50 42 52 0a 0c 45 42 52 30 8a 42 55 46 30 CEPBR..EBR0.BUF0 1ef0: 0a 34 58 42 52 30 79 5e 5e 2e 4d 43 48 43 50 58 .4XBR0y^^.MCHCPX 1f00: 42 52 0a 1a 58 42 52 30 8a 42 55 46 30 0a 38 58 BR..XBR0.BUF0.8X 1f10: 53 5a 30 7a 0c 00 00 00 10 5e 5e 2e 4d 43 48 43 SZ0z.....^^.MCHC 1f20: 50 58 53 5a 58 53 5a 30 a4 42 55 46 30 5b 82 4d PXSZXSZ0.BUF0[.M 1f30: 50 50 45 47 50 08 5f 41 44 52 0c 00 00 01 00 14 PPEGP._ADR...... 1f40: 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 2c A._PRT..3GPIC.., 1f50: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 1f60: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 1f70: 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 12 ............E... 1f80: 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 43 A.........^^.LPC 1f90: 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e 2e BLNKA........^^. 1fa0: 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff 0a LPCBLNKB........ 1fb0: 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 1fc0: 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 1fd0: 00 5b 82 49 46 56 47 41 5f 08 5f 41 44 52 00 08 .[.IFVGA_._ADR.. 1fe0: 53 57 49 54 01 08 43 52 54 41 01 08 4c 43 44 41 SWIT..CRTA..LCDA 1ff0: 01 08 54 56 41 41 01 08 56 4c 44 46 01 5b 80 56 ..TVAA..VLDF.[.V 2000: 49 44 53 02 00 0a c8 5b 81 0b 56 49 44 53 03 56 IDS....[..VIDS.V 2010: 44 49 44 20 14 09 5f 53 54 41 00 a4 0a 0f 08 5f DID .._STA....._ 2020: 50 53 43 00 14 0c 5f 50 53 30 00 70 00 5f 50 53 PSC..._PS0.p._PS 2030: 43 14 0c 5f 50 53 31 00 70 01 5f 50 53 43 14 0d C.._PS1.p._PSC.. 2040: 5f 50 53 33 00 70 0a 03 5f 50 53 43 14 10 5f 44 _PS3.p.._PSC.._D 2050: 4f 53 01 70 7b 68 0a 03 00 53 57 49 54 14 17 5f OS.p{h...SWIT.._ 2060: 44 4f 44 00 a4 12 0f 03 0c 00 01 01 00 0c 10 01 DOD............. 2070: 01 00 0b 00 02 5b 82 4d 08 43 52 54 5f 14 0a 5f .....[.M.CRT_.._ 2080: 41 44 52 00 a4 0b 00 01 14 41 06 5f 44 43 53 00 ADR......A._DCS. 2090: 5e 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 ^^^^.LPCBPHSS..p 20a0: 43 41 44 4c 60 70 43 53 54 45 61 7b 60 0a 02 60 CADL`pCSTEa{`..` 20b0: 7b 61 0a 02 61 a0 08 60 70 01 43 52 54 41 a1 07 {a..a..`p.CRTA.. 20c0: 70 00 43 52 54 41 a0 13 43 52 54 41 a0 08 93 61 p.CRTA..CRTA...a 20d0: 0a 02 a4 0a 1f a1 04 a4 0a 1d a1 0f a0 08 93 61 ...............a 20e0: 0a 02 a4 0a 0f a1 04 a4 0a 0d 14 12 5f 44 47 53 ............_DGS 20f0: 00 a0 07 43 52 54 41 a4 01 a1 03 a4 00 14 06 5f ...CRTA........_ 2100: 44 53 53 01 5b 82 47 0e 4c 43 44 5f 14 0a 5f 41 DSS.[.G.LCD_.._A 2110: 44 52 00 a4 0b 10 01 14 4d 05 5f 44 43 53 00 5e DR......M._DCS.^ 2120: 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 ^^^.LPCBPHSS..pC 2130: 41 44 4c 60 70 43 53 54 45 61 7b 60 01 60 7b 61 ADL`pCSTEa{`.`{a 2140: 01 61 a0 08 60 70 01 4c 43 44 41 a1 07 70 00 4c .a..`p.LCDA..p.L 2150: 43 44 41 a0 12 4c 43 44 41 a0 07 93 61 01 a4 0a CDA..LCDA...a... 2160: 1f a1 04 a4 0a 1d a1 0e a0 07 93 61 01 a4 0a 0f ...........a.... 2170: a1 04 a4 0a 0d 14 12 5f 44 47 53 00 a0 07 4c 43 ......._DGS...LC 2180: 44 41 a4 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 DA........_DSS.. 2190: 1d 5f 42 43 4c 00 a4 12 15 0a 0a 46 0a 28 00 0a ._BCL......F.(.. 21a0: 0a 0a 14 0a 1e 0a 28 0a 32 0a 3c 0a 46 14 20 5f ......(.2.<.F. _ 21b0: 42 43 4d 01 78 68 0a 0a 60 61 70 61 5e 5e 5e 5e BCM.xh..`apa^^^^ 21c0: 2f 03 4c 50 43 42 45 43 30 5f 42 52 54 53 14 1e /.LPCBEC0_BRTS.. 21d0: 5f 42 51 43 00 77 5e 5e 5e 5e 2f 03 4c 50 43 42 _BQC.w^^^^/.LPCB 21e0: 45 43 30 5f 42 52 54 53 0a 0a 60 a4 60 5b 82 4d EC0_BRTS..`.`[.M 21f0: 08 54 56 5f 5f 14 0a 5f 41 44 52 00 a4 0b 00 02 .TV__.._ADR..... 2200: 14 41 06 5f 44 43 53 00 5e 5e 5e 5e 2e 4c 50 43 .A._DCS.^^^^.LPC 2210: 42 50 48 53 53 0a 0c 70 43 41 44 4c 60 70 43 53 BPHSS..pCADL`pCS 2220: 54 45 61 7b 60 0a 04 60 7b 61 0a 04 61 a0 08 60 TEa{`..`{a..a..` 2230: 70 01 54 56 41 41 a1 07 70 00 54 56 41 41 a0 13 p.TVAA..p.TVAA.. 2240: 54 56 41 41 a0 08 93 61 0a 04 a4 0a 1f a1 04 a4 TVAA...a........ 2250: 0a 1d a1 0f a0 08 93 61 0a 04 a4 0a 0f a1 04 a4 .......a........ 2260: 0a 0d 14 12 5f 44 47 53 00 a0 07 54 56 41 41 a4 ...._DGS...TVAA. 2270: 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 49 10 44 ......._DSS..I.D 2280: 53 53 57 00 a0 4a 0e 93 53 57 49 54 00 5e 5e 5e SSW..J..SWIT.^^^ 2290: 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 41 44 4c .LPCBPHSS..pCADL 22a0: 60 70 43 53 54 45 61 a0 16 94 61 01 7b 60 61 56 `pCSTEa...a.{`aV 22b0: 4c 44 46 7b 56 4c 44 46 0a fe 56 4c 44 46 a0 43 LDF{VLDF..VLDF.C 22c0: 0a 56 4c 44 46 a0 27 93 60 0a 09 a0 0b 93 61 0a .VLDF.'.`.....a. 22d0: 08 53 54 42 4c 0a 02 a0 0a 93 61 01 53 54 42 4c .STBL.....a.STBL 22e0: 0a 03 a0 0a 93 61 0a 09 53 54 42 4c 01 a0 28 93 .....a..STBL..(. 22f0: 60 0a 0a a0 0b 93 61 0a 08 53 54 42 4c 0a 05 a0 `.....a..STBL... 2300: 0a 93 61 0a 02 53 54 42 4c 01 a0 0b 93 61 0a 0a ..a..STBL....a.. 2310: 53 54 42 4c 0a 04 a0 4b 04 93 60 0a 0b a0 0b 93 STBL...K..`..... 2320: 61 0a 08 53 54 42 4c 0a 02 a0 0b 93 61 0a 09 53 a..STBL.....a..S 2330: 54 42 4c 0a 05 a0 0a 93 61 01 53 54 42 4c 0a 03 TBL.....a.STBL.. 2340: a0 0b 93 61 0a 0a 53 54 42 4c 0a 04 a0 0a 93 61 ...a..STBL.....a 2350: 0a 02 53 54 42 4c 01 a0 0a 93 61 0a 0b 53 54 42 ..STBL....a..STB 2360: 4c 01 a1 0c 70 01 56 4c 44 46 53 54 42 4c 01 a1 L...p.VLDFSTBL.. 2370: 16 a0 14 93 53 57 49 54 01 5e 5e 5e 2e 4c 50 43 ....SWIT.^^^.LPC 2380: 42 50 48 53 53 01 14 45 0b 53 54 42 4c 01 a0 16 BPHSS..E.STBL... 2390: 93 68 01 70 00 43 52 54 41 70 01 4c 43 44 41 70 .h.p.CRTAp.LCDAp 23a0: 00 54 56 41 41 a0 17 93 68 0a 02 70 01 43 52 54 .TVAA...h..p.CRT 23b0: 41 70 00 4c 43 44 41 70 00 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23c0: 68 0a 03 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 23d0: 00 54 56 41 41 a0 17 93 68 0a 04 70 00 43 52 54 .TVAA...h..p.CRT 23e0: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23f0: 68 0a 05 70 00 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2400: 01 54 56 41 41 a0 17 93 68 0a 06 70 01 43 52 54 .TVAA...h..p.CRT 2410: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 2420: 68 0a 07 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2430: 01 54 56 41 41 86 56 47 41 5f 0a 80 5b 82 42 f8 .TVAA.VGA_..[.B. 2440: 47 46 58 30 08 5f 41 44 52 0c 00 00 02 00 14 10 GFX0._ADR....... 2450: 5f 44 4f 53 01 70 7b 68 0a 07 00 44 53 45 4e 14 _DOS.p{h...DSEN. 2460: 41 26 5f 44 4f 44 00 70 00 4e 44 49 44 a0 15 92 A&_DOD.p.NDID... 2470: 93 44 49 44 4c 00 70 53 44 44 4c 44 49 44 31 44 .DIDL.pSDDLDID1D 2480: 49 44 31 a0 15 92 93 44 44 4c 32 00 70 53 44 44 ID1....DDL2.pSDD 2490: 4c 44 49 44 32 44 49 44 32 a0 15 92 93 44 44 4c LDID2DID2....DDL 24a0: 33 00 70 53 44 44 4c 44 49 44 33 44 49 44 33 a0 3.pSDDLDID3DID3. 24b0: 15 92 93 44 44 4c 34 00 70 53 44 44 4c 44 49 44 ...DDL4.pSDDLDID 24c0: 34 44 49 44 34 a0 15 92 93 44 44 4c 35 00 70 53 4DID4....DDL5.pS 24d0: 44 44 4c 44 49 44 35 44 49 44 35 a0 2c 93 4e 44 DDLDID5DID5.,.ND 24e0: 49 44 01 08 54 4d 50 31 12 07 01 0c ff ff ff ff ID..TMP1........ 24f0: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2500: 31 00 00 a4 54 4d 50 31 a0 46 04 93 4e 44 49 44 1...TMP1.F..NDID 2510: 0a 02 08 54 4d 50 32 12 0c 02 0c ff ff ff ff 0c ...TMP2......... 2520: ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 ....p}.....DID1. 2530: 88 54 4d 50 32 00 00 70 7d 0c 00 00 01 00 44 49 .TMP2..p}.....DI 2540: 44 32 00 88 54 4d 50 32 01 00 a4 54 4d 50 32 a0 D2..TMP2...TMP2. 2550: 4f 05 93 4e 44 49 44 0a 03 08 54 4d 50 33 12 11 O..NDID...TMP3.. 2560: 03 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 2570: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2580: 33 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 3..p}.....DID2.. 2590: 54 4d 50 33 01 00 70 7d 0c 00 00 01 00 44 49 44 TMP3..p}.....DID 25a0: 33 00 88 54 4d 50 33 0a 02 00 a4 54 4d 50 33 a0 3..TMP3....TMP3. 25b0: 48 07 93 4e 44 49 44 0a 04 08 54 4d 50 34 12 16 H..NDID...TMP4.. 25c0: 04 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 25d0: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 25e0: 00 88 54 4d 50 34 00 00 70 7d 0c 00 00 01 00 44 ..TMP4..p}.....D 25f0: 49 44 32 00 88 54 4d 50 34 01 00 70 7d 0c 00 00 ID2..TMP4..p}... 2600: 01 00 44 49 44 33 00 88 54 4d 50 34 0a 02 00 70 ..DID3..TMP4...p 2610: 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d 50 34 }.....DID4..TMP4 2620: 0a 03 00 a4 54 4d 50 34 a0 41 09 94 4e 44 49 44 ....TMP4.A..NDID 2630: 0a 04 08 54 4d 50 35 12 1b 05 0c ff ff ff ff 0c ...TMP5......... 2640: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 2650: ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 88 ...p}.....DID1.. 2660: 54 4d 50 35 00 00 70 7d 0c 00 00 01 00 44 49 44 TMP5..p}.....DID 2670: 32 00 88 54 4d 50 35 01 00 70 7d 0c 00 00 01 00 2..TMP5..p}..... 2680: 44 49 44 33 00 88 54 4d 50 35 0a 02 00 70 7d 0c DID3..TMP5...p}. 2690: 00 00 01 00 44 49 44 34 00 88 54 4d 50 35 0a 03 ....DID4..TMP5.. 26a0: 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d .p}.....DID4..TM 26b0: 50 35 0a 04 00 a4 54 4d 50 35 a4 12 05 01 0b 00 P5....TMP5...... 26c0: 04 5b 82 43 06 44 44 30 31 14 1c 5f 41 44 52 08 .[.C.DD01.._ADR. 26d0: a0 09 93 44 49 44 31 00 a4 01 a1 0b a4 7b 0b ff ...DID1......{.. 26e0: ff 44 49 44 31 00 14 0f 5f 44 43 53 00 a4 43 44 .DID1..._DCS..CD 26f0: 44 53 44 49 44 31 14 0f 5f 44 47 53 00 a4 4e 44 DSDID1.._DGS..ND 2700: 44 53 44 49 44 31 14 1f 5f 44 53 53 01 a0 18 93 DSDID1.._DSS.... 2710: 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 {h...........pNS 2720: 54 45 43 53 54 45 5b 82 44 06 44 44 30 32 14 1d TECSTE[.D.DD02.. 2730: 5f 41 44 52 08 a0 0a 93 44 49 44 32 00 a4 0a 02 _ADR....DID2.... 2740: a1 0b a4 7b 0b ff ff 44 49 44 32 00 14 0f 5f 44 ...{...DID2..._D 2750: 43 53 00 a4 43 44 44 53 44 49 44 32 14 0f 5f 44 CS..CDDSDID2.._D 2760: 47 53 00 a4 4e 44 44 53 44 49 44 32 14 1f 5f 44 GS..NDDSDID2.._D 2770: 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 SS....{h........ 2780: 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 41 07 ...pNSTECSTE[.A. 2790: 44 44 30 33 14 1d 5f 41 44 52 08 a0 0a 93 44 49 DD03.._ADR....DI 27a0: 44 33 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 49 44 D3.......{...DID 27b0: 33 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 33 3..._DCS....DID3 27c0: 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 33 14 .......CDDSDID3. 27d0: 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 44 33 14 ._DGS..NDDSDID3. 27e0: 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 ._DSS....{h..... 27f0: 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 5b ......pNSTECSTE[ 2800: 82 41 07 44 44 30 34 14 1d 5f 41 44 52 08 a0 0a .A.DD04.._ADR... 2810: 93 44 49 44 34 00 a4 0a 04 a1 0b a4 7b 0b ff ff .DID4.......{... 2820: 44 49 44 34 00 14 1c 5f 44 43 53 00 a0 0a 93 44 DID4..._DCS....D 2830: 49 44 34 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 ID4.......CDDSDI 2840: 44 34 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 D4.._DGS..NDDSDI 2850: 44 34 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 D4.._DSS....{h.. 2860: 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 .........pNSTECS 2870: 54 45 5b 82 41 07 44 44 30 35 14 1d 5f 41 44 52 TE[.A.DD05.._ADR 2880: 08 a0 0a 93 44 49 44 35 00 a4 0a 05 a1 0b a4 7b ....DID5.......{ 2890: 0b ff ff 44 49 44 35 00 14 1c 5f 44 43 53 00 a0 ...DID5..._DCS.. 28a0: 0a 93 44 49 44 35 00 a4 0a 0b a1 0a a4 43 44 44 ..DID5.......CDD 28b0: 53 44 49 44 35 14 0f 5f 44 47 53 00 a4 4e 44 44 SDID5.._DGS..NDD 28c0: 53 44 49 44 35 14 1f 5f 44 53 53 01 a0 18 93 7b SDID5.._DSS....{ 28d0: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 28e0: 45 43 53 54 45 14 4e 06 53 44 44 4c 01 75 4e 44 ECSTE.N.SDDL.uND 28f0: 49 44 70 7b 68 0b 0f 0f 00 60 7d 0c 00 00 00 80 IDp{h....`}..... 2900: 60 61 a0 09 93 44 49 44 4c 60 a4 61 a0 09 93 44 `a...DIDL`.a...D 2910: 44 4c 32 60 a4 61 a0 09 93 44 44 4c 33 60 a4 61 DL2`.a...DDL3`.a 2920: a0 09 93 44 44 4c 34 60 a4 61 a0 09 93 44 44 4c ...DDL4`.a...DDL 2930: 35 60 a4 61 a0 09 93 44 44 4c 36 60 a4 61 a0 09 5`.a...DDL6`.a.. 2940: 93 44 44 4c 37 60 a4 61 a0 09 93 44 44 4c 38 60 .DDL7`.a...DDL8` 2950: a4 61 a4 00 14 4a 08 43 44 44 53 01 a0 0f 93 43 .a...J.CDDS....C 2960: 41 44 4c 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 ADL{h..........C 2970: 41 4c 32 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL2{h..........C 2980: 41 4c 33 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL3{h..........C 2990: 41 4c 34 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL4{h..........C 29a0: 41 4c 35 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL5{h..........C 29b0: 41 4c 36 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL6{h..........C 29c0: 41 4c 37 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL7{h..........C 29d0: 41 4c 38 7b 68 0b 0f 0f 00 a4 0a 1f a4 0a 1d 14 AL8{h........... 29e0: 41 08 4e 44 44 53 01 a0 0e 93 4e 41 44 4c 7b 68 A.NDDS....NADL{h 29f0: 0b 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 32 7b 68 0b .........NDL2{h. 2a00: 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 33 7b 68 0b 0f ........NDL3{h.. 2a10: 0f 00 a4 01 a0 0e 93 4e 44 4c 34 7b 68 0b 0f 0f .......NDL4{h... 2a20: 00 a4 01 a0 0e 93 4e 44 4c 35 7b 68 0b 0f 0f 00 ......NDL5{h.... 2a30: a4 01 a0 0e 93 4e 44 4c 36 7b 68 0b 0f 0f 00 a4 .....NDL6{h..... 2a40: 01 a0 0e 93 4e 44 4c 37 7b 68 0b 0f 0f 00 a4 01 ....NDL7{h...... 2a50: a0 0e 93 4e 44 4c 38 7b 68 0b 0f 0f 00 a4 01 a4 ...NDL8{h....... 2a60: 00 14 40 07 42 52 54 4e 09 a0 14 93 7b 44 49 44 ..@.BRTN....{DID 2a70: 31 0b 00 0f 00 0b 00 04 86 44 44 30 31 68 a0 14 1........DD01h.. 2a80: 93 7b 44 49 44 32 0b 00 0f 00 0b 00 04 86 44 44 .{DID2........DD 2a90: 30 32 68 a0 14 93 7b 44 49 44 33 0b 00 0f 00 0b 02h...{DID3..... 2aa0: 00 04 86 44 44 30 33 68 a0 14 93 7b 44 49 44 34 ...DD03h...{DID4 2ab0: 0b 00 0f 00 0b 00 04 86 44 44 30 34 68 a0 14 93 ........DD04h... 2ac0: 7b 44 49 44 35 0b 00 0f 00 0b 00 04 86 44 44 30 {DID5........DD0 2ad0: 35 68 10 24 5e 5e 50 43 49 30 5b 80 4d 43 48 50 5h.$^^PCI0[.MCHP 2ae0: 02 0a 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 ..@..[..MCHP..@0 2af0: 54 41 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 TASM...[.IGDP..@ 2b00: 0a c0 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 ..[.E.IGDP..@... 2b10: 47 49 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 GIVD...GUMA..... 2b20: 47 4d 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 GMFN....@FASLE.. 2b30: 18 47 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 .GSSE.GSSB.GSES. 2b40: 00 30 00 08 43 44 56 4c 05 00 03 00 18 4c 42 50 .0..CDVL.....LBP 2b50: 43 08 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 C..0ASLS [.IGDM. 2b60: 41 53 4c 42 0b 00 20 5b 81 4e 16 49 47 44 4d 00 ASLB.. [.N.IGDM. 2b70: 53 49 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 SIGN@.SIZE OVER 2b80: 53 56 45 52 40 10 56 56 45 52 40 08 47 56 45 52 SVER@.VVER@.GVER 2b90: 40 08 4d 42 4f 58 20 00 40 52 44 52 44 59 20 43 @.MBOX .@RDRDY C 2ba0: 53 54 53 20 43 45 56 54 20 00 40 0a 44 49 44 4c STS CEVT .@.DIDL 2bb0: 20 44 44 4c 32 20 44 44 4c 33 20 44 44 4c 34 20 DDL2 DDL3 DDL4 2bc0: 44 44 4c 35 20 44 44 4c 36 20 44 44 4c 37 20 44 DDL5 DDL6 DDL7 D 2bd0: 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 20 43 50 DL8 CPDL CPL2 CP 2be0: 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 43 50 4c L3 CPL4 CPL5 CPL 2bf0: 36 20 43 50 4c 37 20 43 50 4c 38 20 43 41 44 4c 6 CPL7 CPL8 CADL 2c00: 20 43 41 4c 32 20 43 41 4c 33 20 43 41 4c 34 20 CAL2 CAL3 CAL4 2c10: 43 41 4c 35 20 43 41 4c 36 20 43 41 4c 37 20 43 CAL5 CAL6 CAL7 C 2c20: 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 20 4e 44 AL8 NADL NDL2 ND 2c30: 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 4e 44 4c L3 NDL4 NDL5 NDL 2c40: 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 53 4c 50 6 NDL7 NDL8 ASLP 2c50: 20 54 49 44 58 20 43 48 50 44 20 43 4c 49 44 20 TIDX CHPD CLID 2c60: 43 44 43 4b 20 53 58 53 57 20 45 56 54 53 20 43 CDCK SXSW EVTS C 2c70: 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 43 49 45 NOT NRDY .@.SCIE 2c80: 01 47 45 46 43 04 47 58 46 43 03 47 45 53 46 08 .GEFC.GXFC.GESF. 2c90: 00 10 50 41 52 4d 20 44 53 4c 50 20 00 40 7a 41 ..PARM DSLP .@zA 2ca0: 52 44 59 20 41 53 4c 43 20 54 43 48 45 20 41 4c RDY ASLC TCHE AL 2cb0: 53 49 20 42 43 4c 50 20 50 46 49 54 20 43 42 4c SI BCLP PFIT CBL 2cc0: 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 00 40 5c V BCLM@.CPFM .@\ 2cd0: 47 56 44 31 80 00 0e 08 44 42 54 42 12 32 15 00 GVD1....DBTB.2.. 2ce0: 0a 07 0a 38 0b c0 01 0b 00 0e 0a 3f 0b c7 01 0b ...8.......?.... 2cf0: 07 0e 0b f8 01 0b 38 0e 0b c0 0f 00 00 00 00 00 ......8......... 2d00: 0b 00 70 0b 07 70 0b 38 70 0b c0 71 0b 00 7e 08 ..p..p.8p..q..~. 2d10: 43 44 43 54 12 23 03 12 0a 03 0a c8 0b 40 01 0b CDCT.#.......@.. 2d20: 90 01 12 0a 03 0a c8 0b 4d 01 0b 90 01 12 0a 03 ........M....... 2d30: 0a de 0b 4d 01 0b 7d 01 08 53 55 43 43 01 08 4e ...M..}..SUCC..N 2d40: 56 4c 44 0a 02 08 43 52 49 54 0a 04 08 4e 43 52 VLD...CRIT...NCR 2d50: 54 0a 06 14 4c 4a 47 53 43 49 08 14 44 1e 47 42 T...LJGSCI..D.GB 2d60: 44 41 08 a0 1a 93 47 45 53 46 00 70 0b 79 02 50 DA....GESF.p.y.P 2d70: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 1a ARMp.GESF.SUCC.. 2d80: 93 47 45 53 46 01 70 0b 40 02 50 41 52 4d 70 00 .GESF.p.@.PARMp. 2d90: 47 45 53 46 a4 53 55 43 43 a0 47 04 93 47 45 53 GESF.SUCC.G..GES 2da0: 46 0a 04 7b 50 41 52 4d 0c 00 00 ff ef 50 41 52 F..{PARM.....PAR 2db0: 4d 7b 50 41 52 4d 79 83 88 44 42 54 42 49 42 54 M{PARMy..DBTBIBT 2dc0: 54 00 0a 10 00 50 41 52 4d 7d 49 42 54 54 50 41 T....PARM}IBTTPA 2dd0: 52 4d 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 RMPARMp.GESF.SUC 2de0: 43 a0 4a 06 93 47 45 53 46 0a 05 70 49 50 53 43 C.J..GESF..pIPSC 2df0: 50 41 52 4d 7d 50 41 52 4d 79 49 50 41 54 0a 08 PARM}PARMyIPAT.. 2e00: 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 41 52 .PARMrPARM...PAR 2e10: 4d 7d 50 41 52 4d 79 4c 49 44 53 0a 10 00 50 41 M}PARMyLIDS...PA 2e20: 52 4d 72 50 41 52 4d 0c 00 00 01 00 50 41 52 4d RMrPARM.....PARM 2e30: 7d 50 41 52 4d 79 49 42 49 41 0a 14 00 50 41 52 }PARMyIBIA...PAR 2e40: 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 2d 93 47 Mp.GESF.SUCC.-.G 2e50: 45 53 46 0a 06 70 49 54 56 46 50 41 52 4d 7d 50 ESF..pITVFPARM}P 2e60: 41 52 4d 79 49 54 56 4d 0a 04 00 50 41 52 4d 70 ARMyITVM...PARMp 2e70: 00 47 45 53 46 a4 53 55 43 43 a0 4f 08 93 47 45 .GESF.SUCC.O..GE 2e80: 53 46 0a 07 70 47 49 56 44 50 41 52 4d 7f 50 41 SF..pGIVDPARM.PA 2e90: 52 4d 01 50 41 52 4d 7d 50 41 52 4d 79 47 4d 46 RM.PARM}PARMyGMF 2ea0: 4e 01 00 50 41 52 4d 7d 50 41 52 4d 0b 00 10 50 N..PARM}PARM...P 2eb0: 41 52 4d a0 16 49 44 4d 4d 7d 50 41 52 4d 79 49 ARM..IDMM}PARMyI 2ec0: 44 4d 53 0a 11 00 50 41 52 4d a1 12 7d 50 41 52 DMS...PARM..}PAR 2ed0: 4d 79 49 44 4d 53 0a 0d 00 50 41 52 4d 7d 79 83 MyIDMS...PARM}y. 2ee0: 88 83 88 43 44 43 54 48 56 43 4f 00 74 43 44 56 ...CDCTHVCO.tCDV 2ef0: 4c 01 00 00 0a 15 00 50 41 52 4d 50 41 52 4d 70 L......PARMPARMp 2f00: 01 47 45 53 46 a4 53 55 43 43 a0 2a 93 47 45 53 .GESF.SUCC.*.GES 2f10: 46 0a 0a 70 00 50 41 52 4d a0 10 49 53 53 43 7d F..p.PARM..ISSC} 2f20: 50 41 52 4d 0a 03 50 41 52 4d 70 00 47 45 53 46 PARM..PARMp.GESF 2f30: a4 53 55 43 43 70 00 47 45 53 46 a4 43 52 49 54 .SUCCp.GESF.CRIT 2f40: 14 41 28 53 42 43 42 08 a0 20 93 47 45 53 46 00 .A(SBCB.. .GESF. 2f50: 70 00 50 41 52 4d 70 0b 7d f7 50 41 52 4d 70 00 p.PARMp.}.PARMp. 2f60: 47 45 53 46 a4 53 55 43 43 a0 18 93 47 45 53 46 GESF.SUCC...GESF 2f70: 01 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 2f80: 43 43 a0 19 93 47 45 53 46 0a 03 70 00 47 45 53 CC...GESF..p.GES 2f90: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 Fp.PARM.SUCC...G 2fa0: 45 53 46 0a 04 70 00 47 45 53 46 70 00 50 41 52 ESF..p.GESFp.PAR 2fb0: 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 05 70 M.SUCC...GESF..p 2fc0: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 2fd0: a0 37 93 47 45 53 46 0a 06 70 7b 50 41 52 4d 0a .7.GESF..p{PARM. 2fe0: 0f 00 49 54 56 46 70 7a 7b 50 41 52 4d 0a f0 00 ..ITVFpz{PARM... 2ff0: 0a 04 00 49 54 56 4d 70 00 47 45 53 46 70 00 50 ...ITVMp.GESFp.P 3000: 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a ARM.SUCC...GESF. 3010: 07 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 3020: 43 43 a0 19 93 47 45 53 46 0a 08 70 00 47 45 53 CC...GESF..p.GES 3030: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 24 93 47 Fp.PARM.SUCC.$.G 3040: 45 53 46 0a 09 7b 50 41 52 4d 0a ff 49 42 54 54 ESF..{PARM..IBTT 3050: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 3060: 43 a0 46 05 93 47 45 53 46 0a 0a 7b 50 41 52 4d C.F..GESF..{PARM 3070: 0a ff 49 50 53 43 a0 21 7b 7a 50 41 52 4d 0a 08 ..IPSC.!{zPARM.. 3080: 00 0a ff 00 7b 7a 50 41 52 4d 0a 08 00 0a ff 49 ....{zPARM.....I 3090: 50 41 54 76 49 50 41 54 7b 7a 50 41 52 4d 0a 14 PATvIPAT{zPARM.. 30a0: 00 0a 07 49 42 49 41 70 00 47 45 53 46 70 00 50 ...IBIAp.GESFp.P 30b0: 41 52 4d a4 53 55 43 43 a0 40 06 93 47 45 53 46 ARM.SUCC.@..GESF 30c0: 0a 0b 7b 7a 50 41 52 4d 01 00 01 49 46 31 45 a0 ..{zPARM...IF1E. 30d0: 21 7b 50 41 52 4d 0c 00 e0 01 00 00 7b 7a 50 41 !{PARM......{zPA 30e0: 52 4d 0a 0d 00 0a 0f 49 44 4d 53 70 00 49 44 4d RM.....IDMSp.IDM 30f0: 4d a1 16 7b 7a 50 41 52 4d 0a 11 00 0a 0f 49 44 M..{zPARM.....ID 3100: 4d 53 70 01 49 44 4d 4d 70 00 47 45 53 46 70 00 MSp.IDMMp.GESFp. 3110: 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 PARM.SUCC...GESF 3120: 0a 10 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 ..p.GESFp.PARM.S 3130: 55 43 43 a0 1f 93 47 45 53 46 0a 11 7d 50 41 52 UCC...GESF..}PAR 3140: 4d 0b 00 01 50 41 52 4d 70 00 47 45 53 46 a4 53 M...PARMp.GESF.S 3150: 55 43 43 a0 49 04 93 47 45 53 46 0a 12 a0 26 7b UCC.I..GESF...&{ 3160: 50 41 52 4d 01 00 a0 10 93 7a 50 41 52 4d 01 00 PARM.....zPARM.. 3170: 01 70 01 49 53 53 43 a1 0c 70 00 47 45 53 46 a4 .p.ISSC..p.GESF. 3180: 43 52 49 54 a1 07 70 00 49 53 53 43 70 00 47 45 CRIT..p.ISSCp.GE 3190: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 SFp.PARM.SUCC... 31a0: 47 45 53 46 0a 13 70 00 47 45 53 46 70 00 50 41 GESF..p.GESFp.PA 31b0: 52 4d a4 53 55 43 43 70 00 47 45 53 46 a4 53 55 RM.SUCCp.GESF.SU 31c0: 43 43 a0 11 93 47 45 46 43 0a 04 70 47 42 44 41 CC...GEFC..pGBDA 31d0: 47 58 46 43 a0 11 93 47 45 46 43 0a 06 70 53 42 GXFC...GEFC..pSB 31e0: 43 42 47 58 46 43 70 00 47 45 46 43 70 01 53 43 CBGXFCp.GEFCp.SC 31f0: 49 53 70 00 47 53 53 45 70 00 53 43 49 45 a4 00 ISp.GSSEp.SCIE.. 3200: 14 19 50 44 52 44 00 a0 0c 92 44 52 44 59 5b 22 ..PDRD....DRDY[" 3210: 41 53 4c 50 a4 92 44 52 44 59 14 1d 50 53 54 53 ASLP..DRDY..PSTS 3220: 00 a0 0e 94 43 53 54 53 0a 02 5b 22 41 53 4c 50 ....CSTS..["ASLP 3230: a4 93 43 53 54 53 0a 03 14 47 06 47 4e 4f 54 02 ..CSTS...G.GNOT. 3240: a0 07 50 44 52 44 a4 01 a0 07 50 53 54 53 a4 01 ..PDRD....PSTS.. 3250: 70 68 43 45 56 54 70 0a 03 43 53 54 53 a0 2c 90 phCEVTp..CSTS.,. 3260: 93 43 48 50 44 00 93 69 00 a0 18 91 94 4f 53 59 .CHPD..i.....OSY 3270: 53 0b d0 07 95 4f 53 59 53 0b d6 07 86 50 43 49 S....OSYS....PCI 3280: 30 69 a1 07 86 47 46 58 30 69 86 47 46 58 30 0a 0i...GFX0i.GFX0. 3290: 80 a0 0c 92 50 53 54 53 70 00 43 45 56 54 a4 00 ....PSTSp.CEVT.. 32a0: 14 13 47 48 44 53 01 70 68 54 49 44 58 a4 47 4e ..GHDS.phTIDX.GN 32b0: 4f 54 01 00 14 14 47 4c 49 44 01 70 68 43 4c 49 OT....GLID.phCLI 32c0: 44 a4 47 4e 4f 54 0a 02 00 14 15 47 44 43 4b 01 D.GNOT.....GDCK. 32d0: 70 68 43 44 43 4b a4 47 4e 4f 54 0a 04 0a 80 14 phCDCK.GNOT..... 32e0: 19 50 41 52 44 00 a0 0c 92 41 52 44 59 5b 22 41 .PARD....ARDY["A 32f0: 53 4c 50 a4 92 41 52 44 59 14 46 0c 41 49 4e 54 SLP..ARDY.F.AINT 3300: 02 a0 0e 92 7b 54 43 48 45 79 01 68 00 00 a4 01 ....{TCHEy.h.... 3310: a0 07 50 41 52 44 a4 01 a0 4c 05 93 68 0a 02 a0 ..PARD...L..h... 3320: 33 43 50 46 4d a0 0e 93 43 50 46 4d 01 70 0a 06 3CPFM...CPFM.p.. 3330: 50 46 49 54 a0 0f 93 43 50 46 4d 0a 06 70 0a 08 PFIT...CPFM..p.. 3340: 50 46 49 54 a0 0e 93 43 50 46 4d 0a 08 70 01 50 PFIT...CPFM..p.P 3350: 46 49 54 a1 0c 7f 50 46 49 54 0a 07 50 46 49 54 FIT...PFIT..PFIT 3360: 7d 50 46 49 54 0c 00 00 00 80 50 46 49 54 70 0a }PFIT.....PFITp. 3370: 04 41 53 4c 43 a1 42 04 a0 28 93 68 01 70 78 77 .ASLC.B..(.h.pxw 3380: 69 0a ff 00 0a 64 00 00 42 43 4c 50 7d 42 43 4c i....d..BCLP}BCL 3390: 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 41 53 4c P.....BCLPp..ASL 33a0: 43 a1 16 a0 10 93 68 00 70 69 41 4c 53 49 70 01 C.....h.piALSIp. 33b0: 41 53 4c 43 a1 03 a4 01 70 00 4c 42 50 43 a4 00 ASLC....p.LBPC.. 33c0: 10 41 36 5c 00 5b 80 49 4f 5f 54 01 0b 00 08 0a .A6\.[.IO_T..... 33d0: 10 5b 81 0e 49 4f 5f 54 01 00 40 04 54 52 50 30 .[..IO_T..@.TRP0 33e0: 08 5b 80 50 4d 49 4f 01 0b 00 10 0a 80 5b 81 28 .[.PMIO......[.( 33f0: 50 4d 49 4f 01 00 40 15 00 08 00 02 41 43 50 57 PMIO..@.....ACPW 3400: 01 00 45 0b 00 01 47 50 45 43 01 00 4e 10 00 09 ..E...GPEC..N... 3410: 53 43 49 53 01 00 06 5b 80 47 50 49 4f 01 0b 80 SCIS...[.GPIO... 3420: 11 0a 3c 5b 81 40 0c 47 50 49 4f 01 47 55 30 30 ..<[.@.GPIO.GU00 3430: 08 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 .GU01.GU02.GU03. 3440: 47 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 GIO0.GIO1.GIO2.G 3450: 49 4f 33 08 00 20 47 4c 30 30 08 47 4c 30 31 08 IO3.. GL00.GL01. 3460: 47 4c 30 32 08 00 03 47 50 32 37 01 47 50 32 38 GL02...GP27.GP28 3470: 01 00 03 00 40 04 47 42 30 30 08 47 42 30 31 08 ....@.GB00.GB01. 3480: 47 42 30 32 08 47 42 30 33 08 00 40 08 47 49 56 GB02.GB03..@.GIV 3490: 30 08 00 03 4c 50 4f 4c 01 00 04 47 49 56 32 08 0...LPOL...GIV2. 34a0: 47 49 56 33 08 47 55 30 34 08 47 55 30 35 08 47 GIV3.GU04.GU05.G 34b0: 55 30 36 08 47 55 30 37 08 47 49 4f 34 08 47 49 U06.GU07.GIO4.GI 34c0: 4f 35 08 47 49 4f 36 08 47 49 4f 37 08 00 05 47 O5.GIO6.GIO7...G 34d0: 50 33 37 01 00 02 47 4c 30 35 08 47 4c 30 36 08 P37...GL05.GL06. 34e0: 47 4c 30 37 08 5b 80 52 43 52 42 00 0c 00 c0 d1 GL07.[.RCRB..... 34f0: fe 0b 00 40 5b 81 48 05 52 43 52 42 13 00 80 00 ...@[.H.RCRB.... 3500: 08 00 80 00 10 00 80 02 02 48 50 41 53 02 00 05 .........HPAS... 3510: 48 50 41 45 01 00 48 09 00 01 50 41 54 44 01 53 HPAE..H...PATD.S 3520: 41 54 44 01 53 4d 42 44 01 48 44 41 44 01 00 0b ATD.SMBD.HDAD... 3530: 52 50 31 44 01 52 50 32 44 01 52 50 33 44 01 52 RP1D.RP2D.RP3D.R 3540: 50 34 44 01 52 50 35 44 01 52 50 36 44 01 08 5f P4D.RP5D.RP6D.._ 3550: 53 30 5f 12 05 03 00 00 00 08 5f 53 33 5f 12 07 S0_......._S3_.. 3560: 03 0a 05 0a 05 00 08 5f 53 34 5f 12 07 03 0a 06 ......._S4_..... 3570: 0a 06 00 08 5f 53 35 5f 12 07 03 0a 07 0a 07 00 ...._S5_........ 3580: 14 45 04 47 45 54 50 09 a0 0e 93 7b 68 0a 09 00 .E.GETP....{h... 3590: 00 a4 0c ff ff ff ff a0 0d 93 7b 68 0a 09 00 0a ..........{h.... 35a0: 08 a4 0b 84 03 7a 7b 68 0b 00 03 00 0a 08 60 7a .....z{h......`z 35b0: 7b 68 0b 00 30 00 0a 0c 61 a4 77 0a 1e 74 0a 09 {h..0...a.w..t.. 35c0: 72 60 61 00 00 00 14 30 47 44 4d 41 0d a0 23 68 r`a....0GDMA..#h 35d0: a0 07 90 69 6c a4 0a 14 a0 0e 90 6a 6c a4 77 74 ...il......jl.wt 35e0: 0a 04 6b 00 0a 0f 00 a4 77 74 0a 04 6b 00 0a 1e ..k.....wt..k... 35f0: 00 a4 0c ff ff ff ff 14 1f 47 45 54 54 09 a4 77 .........GETT..w 3600: 0a 1e 74 0a 09 72 7b 7a 68 0a 02 00 0a 03 00 7b ..t..r{zh......{ 3610: 68 0a 03 00 00 00 00 14 44 06 47 45 54 46 0b 08 h.......D.GETF.. 3620: 54 4d 50 46 00 a0 0c 68 7d 54 4d 50 46 01 54 4d TMPF...h}TMPF.TM 3630: 50 46 a0 11 7b 6a 0a 02 00 7d 54 4d 50 46 0a 02 PF..{j...}TMPF.. 3640: 54 4d 50 46 a0 0d 69 7d 54 4d 50 46 0a 04 54 4d TMPF..i}TMPF..TM 3650: 50 46 a0 11 7b 6a 0a 20 00 7d 54 4d 50 46 0a 08 PF..{j. .}TMPF.. 3660: 54 4d 50 46 a0 12 7b 6a 0b 00 40 00 7d 54 4d 50 TMPF..{j..@.}TMP 3670: 46 0a 10 54 4d 50 46 a4 54 4d 50 46 14 3d 53 45 F..TMPF.TMPF.=SE 3680: 54 50 0b a0 08 94 68 0a f0 a4 0a 08 a1 2d a0 27 TP....h......-.' 3690: 7b 69 0a 02 00 a0 10 90 92 94 68 0a 78 7b 6a 0a {i........h.x{j. 36a0: 02 00 a4 0b 01 23 a0 0f 90 92 94 68 0a b4 7b 6a .....#.....h..{j 36b0: 01 00 a4 0b 01 21 a4 0b 01 10 14 37 53 44 4d 41 .....!.....7SDMA 36c0: 09 a0 08 92 94 68 0a 14 a4 01 a0 09 92 94 68 0a .....h........h. 36d0: 1e a4 0a 02 a0 08 92 94 68 0a 2d a4 01 a0 09 92 ........h.-..... 36e0: 94 68 0a 3c a4 0a 02 a0 08 92 94 68 0a 5a a4 01 .h.<.......h.Z.. 36f0: a4 00 14 2f 53 45 54 54 0b a0 25 7b 69 0a 02 00 .../SETT..%{i... 3700: a0 0f 90 92 94 68 0a 78 7b 6a 0a 02 00 a4 0a 0b .....h.x{j...... 3710: a0 0e 90 92 94 68 0a b4 7b 6a 01 00 a4 0a 09 a4 .....h..{j...... 3720: 0a 04 5b 82 4b 04 48 44 45 46 08 5f 41 44 52 0c ..[.K.HDEF._ADR. 3730: 00 00 1b 00 5b 80 48 44 41 52 02 0a 4c 0a 10 5b ....[.HDAR..L..[ 3740: 81 22 48 44 41 52 02 44 43 4b 41 01 00 07 44 43 ."HDAR.DCKA...DC 3750: 4b 4d 01 00 06 44 43 4b 53 01 00 30 00 0f 50 4d KM...DCKS..0..PM 3760: 45 53 01 08 5f 50 52 57 12 06 02 0a 0d 0a 03 5b ES.._PRW.......[ 3770: 82 41 10 52 50 30 31 08 5f 41 44 52 0c 00 00 1c .A.RP01._ADR.... 3780: 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 45 04 .[.PXCS..@..[.E. 3790: 50 58 43 53 40 00 40 09 00 0d 4c 41 53 58 01 00 PXCS@.@...LASX.. 37a0: 32 41 42 50 58 01 00 02 50 44 43 58 01 00 02 50 2ABPX...PDCX...P 37b0: 44 53 58 01 00 01 4c 53 43 58 01 00 27 00 10 50 DSX...LSCX..'..P 37c0: 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 01 50 4d SPX..O<..HPSX.PM 37d0: 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 44 52 00 SX.[..PXSX._ADR. 37e0: 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 .A._PRT..3GPIC.. 37f0: 2c 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ,............... 3800: ff ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a ................ 3810: 12 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 .............E.. 3820: 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 .A.........^^.LP 3830: 43 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e CBLNKA........^^ 3840: 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff .LPCBLNKB....... 3850: 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 ..^^.LPCBLNKC... 3860: 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b ......^^.LPCBLNK 3870: 44 00 5b 82 41 10 52 50 30 32 08 5f 41 44 52 0c D.[.A.RP02._ADR. 3880: 01 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b ....[.PXCS..@..[ 3890: 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c 41 53 .E.PXCS@.@...LAS 38a0: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 38b0: 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 ..PDSX...LSCX..' 38c0: 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 ..PSPX..O<..HPSX 38d0: 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 .PMSX.[..PXSX._A 38e0: 44 52 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 DR..A._PRT..3GPI 38f0: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 11 12 C..,............ 3900: 09 04 0b ff ff 01 00 0a 12 12 0a 04 0b ff ff 0a ................ 3910: 02 00 0a 13 12 0a 04 0b ff ff 0a 03 00 0a 10 a1 ................ 3920: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3930: 2e 4c 50 43 42 4c 4e 4b 42 00 12 12 04 0b ff ff .LPCBLNKB....... 3940: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 3950: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 3960: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3970: 4c 4e 4b 41 00 5b 82 4d 11 52 50 30 33 08 5f 41 LNKA.[.M.RP03._A 3980: 44 52 0c 02 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3990: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 39a0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 39b0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 39c0: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 39d0: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 39e0: 08 5f 41 44 52 00 08 2e 50 58 53 58 5f 52 4d 56 ._ADR...PXSX_RMV 39f0: 01 08 2e 50 58 53 58 5f 50 52 57 12 06 02 0a 09 ...PXSX_PRW..... 3a00: 0a 03 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 ...A._PRT..3GPIC 3a10: a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 12 12 09 ..,............. 3a20: 04 0b ff ff 01 00 0a 13 12 0a 04 0b ff ff 0a 02 ................ 3a30: 00 0a 10 12 0a 04 0b ff ff 0a 03 00 0a 11 a1 45 ...............E 3a40: 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e ...A.........^^. 3a50: 4c 50 43 42 4c 4e 4b 43 00 12 12 04 0b ff ff 01 LPCBLNKC........ 3a60: 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0b ^^.LPCBLNKD..... 3a70: ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 ....^^.LPCBLNKA. 3a80: 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3a90: 4e 4b 42 00 5b 82 4f 11 52 50 30 34 08 5f 41 44 NKB.[.O.RP04._AD 3aa0: 52 0c 03 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a R.....[.PXCS..@. 3ab0: c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c .[.E.PXCS@.@...L 3ac0: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 3ad0: 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 X...PDSX...LSCX. 3ae0: 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 .'..PSPX..O<..HP 3af0: 53 58 01 50 4d 53 58 01 5b 82 29 50 58 53 58 08 SX.PMSX.[.)PXSX. 3b00: 5f 41 44 52 00 14 1d 5f 50 52 57 00 a0 0d 57 4b _ADR..._PRW...WK 3b10: 4c 4e a4 12 06 02 0a 09 0a 03 a1 08 a4 12 05 02 LN.............. 3b20: 0a 09 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 ....A._PRT..3GPI 3b30: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 C..,............ 3b40: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 3b50: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 a1 ................ 3b60: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3b70: 2e 4c 50 43 42 4c 4e 4b 44 00 12 12 04 0b ff ff .LPCBLNKD....... 3b80: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 .^^.LPCBLNKA.... 3b90: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 .....^^.LPCBLNKB 3ba0: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3bb0: 4c 4e 4b 43 00 5b 82 41 10 52 50 30 35 08 5f 41 LNKC.[.A.RP05._A 3bc0: 44 52 0c 04 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3bd0: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 3be0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 3bf0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 3c00: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 3c10: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 3c20: 08 5f 41 44 52 00 14 41 09 5f 50 52 54 00 a0 33 ._ADR..A._PRT..3 3c30: 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 GPIC..,......... 3c40: 0a 10 12 09 04 0b ff ff 01 00 0a 11 12 0a 04 0b ................ 3c50: ff ff 0a 02 00 0a 12 12 0a 04 0b ff ff 0a 03 00 ................ 3c60: 0a 13 a1 45 05 a4 12 41 05 04 12 12 04 0b ff ff ...E...A........ 3c70: 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 12 04 .^^.LPCBLNKA.... 3c80: 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3c90: 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3ca0: 4e 4b 43 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c NKC.........^^.L 3cb0: 50 43 42 4c 4e 4b 44 00 5b 82 41 10 52 50 30 36 PCBLNKD.[.A.RP06 3cc0: 08 5f 41 44 52 0c 05 00 1c 00 5b 80 50 58 43 53 ._ADR.....[.PXCS 3cd0: 02 0a 40 0a c0 5b 81 45 04 50 58 43 53 40 00 40 ..@..[.E.PXCS@.@ 3ce0: 09 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 ...LASX..2ABPX.. 3cf0: 02 50 44 43 58 01 00 02 50 44 53 58 01 00 01 4c .PDCX...PDSX...L 3d00: 53 43 58 01 00 27 00 10 50 53 50 58 01 00 4f 3c SCX..'..PSPX..O< 3d10: 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 ..HPSX.PMSX.[..P 3d20: 58 53 58 08 5f 41 44 52 00 14 41 09 5f 50 52 54 XSX._ADR..A._PRT 3d30: 00 a0 33 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ..3GPIC..,...... 3d40: ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a 12 12 ................ 3d50: 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ff ff ................ 3d60: 0a 03 00 0a 10 a1 45 05 a4 12 41 05 04 12 12 04 ......E...A..... 3d70: 0b ff ff 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3d80: 12 12 04 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 3d90: 4b 43 00 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 KC.........^^.LP 3da0: 43 42 4c 4e 4b 44 00 12 13 04 0b ff ff 0a 03 5e CBLNKD.........^ 3db0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 4d 06 55 ^.LPCBLNKA.[.M.U 3dc0: 53 42 31 08 5f 41 44 52 0c 00 00 1d 00 5b 80 55 SB1._ADR.....[.U 3dd0: 31 43 53 02 0a c4 0a 04 5b 81 0b 55 31 43 53 03 1CS.....[..U1CS. 3de0: 55 31 45 4e 02 08 5f 50 52 57 12 06 02 0a 03 0a U1EN.._PRW...... 3df0: 03 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 ..$_PSW...hp.ACP 3e00: 57 a0 0c 41 43 50 57 70 0a 03 55 31 45 4e a1 07 W..ACPWp..U1EN.. 3e10: 70 00 55 31 45 4e 14 09 5f 53 33 44 00 a4 0a 02 p.U1EN.._S3D.... 3e20: 14 09 5f 53 34 44 00 a4 0a 02 5b 82 4c 06 55 53 .._S4D....[.L.US 3e30: 42 32 08 5f 41 44 52 0c 01 00 1d 00 5b 80 55 32 B2._ADR.....[.U2 3e40: 43 53 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 CS.....[..U2CS.U 3e50: 32 45 4e 02 08 5f 50 52 57 12 06 02 0a 04 0a 03 2EN.._PRW....... 3e60: 14 23 5f 50 53 57 01 a0 14 68 70 01 41 43 50 57 .#_PSW...hp.ACPW 3e70: a0 0b 41 43 50 57 70 01 55 32 45 4e a1 07 70 00 ..ACPWp.U2EN..p. 3e80: 55 32 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 U2EN.._S3D...... 3e90: 5f 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 33 _S4D....[.M.USB3 3ea0: 08 5f 41 44 52 0c 02 00 1d 00 5b 80 55 32 43 53 ._ADR.....[.U2CS 3eb0: 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 33 45 .....[..U2CS.U3E 3ec0: 4e 02 08 5f 50 52 57 12 06 02 0a 0c 0a 03 14 24 N.._PRW........$ 3ed0: 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c _PSW...hp.ACPW.. 3ee0: 41 43 50 57 70 0a 03 55 33 45 4e a1 07 70 00 55 ACPWp..U3EN..p.U 3ef0: 33 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 3EN.._S3D......_ 3f00: 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 34 08 S4D....[.M.USB4. 3f10: 5f 41 44 52 0c 00 00 1a 00 5b 80 55 34 43 53 02 _ADR.....[.U4CS. 3f20: 0a c4 0a 04 5b 81 0b 55 34 43 53 03 55 34 45 4e ....[..U4CS.U4EN 3f30: 02 08 5f 50 52 57 12 06 02 0a 0e 0a 03 14 24 5f .._PRW........$_ 3f40: 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c 41 PSW...hp.ACPW..A 3f50: 43 50 57 70 0a 03 55 34 45 4e a1 07 70 00 55 34 CPWp..U4EN..p.U4 3f60: 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 EN.._S3D......_S 3f70: 34 44 00 a4 0a 02 5b 82 41 06 55 53 42 35 08 5f 4D....[.A.USB5._ 3f80: 41 44 52 0c 01 00 1a 00 5b 80 55 35 43 53 02 0a ADR.....[.U5CS.. 3f90: c4 0a 04 5b 81 0b 55 35 43 53 03 55 35 45 4e 02 ...[..U5CS.U5EN. 3fa0: 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 .$_PSW...hp.ACPW 3fb0: a0 0c 41 43 50 57 70 0a 03 55 35 45 4e a1 07 70 ..ACPWp..U5EN..p 3fc0: 00 55 35 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 .U5EN.._S3D..... 3fd0: 09 5f 53 34 44 00 a4 0a 02 5b 82 4b 0a 45 48 43 ._S4D....[.K.EHC 3fe0: 31 08 5f 41 44 52 0c 07 00 1d 00 5b 80 55 37 43 1._ADR.....[.U7C 3ff0: 53 02 0a 54 0a 04 5b 81 0d 55 37 43 53 03 00 0f S..T..[..U7CS... 4000: 50 4d 45 53 01 5b 82 4f 05 48 55 42 37 08 5f 41 PMES.[.O.HUB7._A 4010: 44 52 00 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 DR.[..PRT1._ADR. 4020: 5b 82 0c 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 [..PRT2._ADR..[. 4030: 0c 50 52 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 .PRT3._ADR..[..P 4040: 52 54 34 08 5f 41 44 52 0a 04 5b 82 0c 50 52 54 RT4._ADR..[..PRT 4050: 35 08 5f 41 44 52 0a 05 5b 82 0c 50 52 54 36 08 5._ADR..[..PRT6. 4060: 5f 41 44 52 0a 06 08 5f 50 52 57 12 06 02 0a 0d _ADR..._PRW..... 4070: 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 ...._S3D......_S 4080: 34 44 00 a4 0a 02 5b 82 4f 08 45 48 43 32 08 5f 4D....[.O.EHC2._ 4090: 41 44 52 0c 07 00 1a 00 5b 80 55 46 43 53 02 0a ADR.....[.UFCS.. 40a0: 54 0a 04 5b 81 0d 55 46 43 53 03 00 0f 50 4d 45 T..[..UFCS...PME 40b0: 53 01 5b 82 43 04 48 55 42 37 08 5f 41 44 52 00 S.[.C.HUB7._ADR. 40c0: 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 5b 82 0c [..PRT1._ADR.[.. 40d0: 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 0c 50 52 PRT2._ADR..[..PR 40e0: 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 52 54 34 T3._ADR..[..PRT4 40f0: 08 5f 41 44 52 0a 04 08 5f 50 52 57 12 06 02 0a ._ADR..._PRW.... 4100: 0d 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f ....._S3D......_ 4110: 53 34 44 00 a4 0a 02 5b 82 4a 06 50 43 49 42 08 S4D....[.J.PCIB. 4120: 5f 41 44 52 0c 00 00 1e 00 14 49 05 5f 50 52 54 _ADR......I._PRT 4130: 00 a0 21 47 50 49 43 a4 12 1a 02 12 0b 04 0c ff ..!GPIC......... 4140: ff 06 00 00 00 0a 16 12 0b 04 0c ff ff 06 00 01 ................ 4150: 00 0a 17 a1 2f a4 12 2c 02 12 14 04 0c ff ff 06 ..../..,........ 4160: 00 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 47 00 12 14 ..^^.LPCBLNKG... 4170: 04 0c ff ff 06 00 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 4180: 4b 48 00 5b 82 8d 2e 01 4c 50 43 42 08 5f 41 44 KH.[....LPCB._AD 4190: 52 0c 00 00 1f 00 5b 80 4c 50 43 30 02 0a 40 0a R.....[.LPC0..@. 41a0: c0 5b 81 4d 07 4c 50 43 30 00 00 40 10 50 41 52 .[.M.LPC0..@.PAR 41b0: 43 08 50 42 52 43 08 50 43 52 43 08 50 44 52 43 C.PBRC.PCRC.PDRC 41c0: 08 00 20 50 45 52 43 08 50 46 52 43 08 50 47 52 .. PERC.PFRC.PGR 41d0: 43 08 50 48 52 43 08 00 40 0a 43 4d 41 52 03 00 C.PHRC..@.CMAR.. 41e0: 01 43 4d 42 52 03 00 01 4c 50 54 52 02 00 06 43 .CMBR...LPTR...C 41f0: 4d 41 44 01 43 4d 42 44 01 4c 50 54 44 01 46 44 MAD.CMBD.LPTD.FD 4200: 44 44 01 00 2c 49 4f 52 32 10 00 02 4c 47 52 4d DD..,IOR2...LGRM 4210: 06 00 48 32 52 41 45 4e 01 00 0d 52 43 42 41 12 ..H2RAEN...RCBA. 4220: 5b 80 53 4d 49 30 01 0c 00 fe 00 00 0c 02 00 00 [.SMI0.......... 4230: 00 5b 81 0b 53 4d 49 30 00 53 4d 49 43 08 5b 80 .[..SMI0.SMIC.[. 4240: 53 4d 49 31 00 0c bd 2e 6e bf 0c 90 00 00 00 5b SMI1....n......[ 4250: 81 16 53 4d 49 31 00 42 43 4d 44 08 44 49 44 5f ..SMI1.BCMD.DID_ 4260: 20 49 4e 46 4f 40 40 5b 81 15 53 4d 49 31 00 01 INFO@@[..SMI1.. 4270: 01 00 00 28 49 4e 46 5f 08 49 4e 46 31 20 5b 01 ...(INF_.INF1 [. 4280: 50 53 4d 58 00 14 27 50 48 53 53 01 5b 23 50 53 PSMX..'PHSS.[#PS 4290: 4d 58 ff ff 70 0a 80 42 43 4d 44 70 68 44 49 44 MX..p..BCMDphDID 42a0: 5f 70 00 53 4d 49 43 5b 27 50 53 4d 58 5b 82 41 _p.SMIC['PSMX[.A 42b0: 0a 4c 4e 4b 41 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKA._HID.A.... 42c0: 5f 55 49 44 01 14 0d 5f 44 49 53 08 70 0a 80 50 _UID..._DIS.p..P 42d0: 41 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ARC._PRS....#... 42e0: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 41 11 09 y..8_CRS..RTLA.. 42f0: 0a 06 23 00 00 18 79 00 8b 52 54 4c 41 01 49 52 ..#...y..RTLA.IR 4300: 51 30 70 00 49 52 51 30 79 01 7b 50 41 52 43 0a Q0p.IRQ0y.{PARC. 4310: 0f 00 49 52 51 30 a4 52 54 4c 41 14 1b 5f 53 52 ..IRQ0.RTLA.._SR 4320: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 4330: 60 70 60 50 41 52 43 14 18 5f 53 54 41 08 a0 0c `p`PARC.._STA... 4340: 7b 50 41 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PARC........... 4350: 5b 82 42 0a 4c 4e 4b 42 08 5f 48 49 44 0c 41 d0 [.B.LNKB._HID.A. 4360: 0c 0f 08 5f 55 49 44 0a 02 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4370: 70 0a 80 50 42 52 43 08 5f 50 52 53 11 09 0a 06 p..PBRC._PRS.... 4380: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4390: 4c 42 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LB....#...y..RTL 43a0: 42 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 B.IRQ0p.IRQ0y.{P 43b0: 42 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 42 14 BRC...IRQ0.RTLB. 43c0: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 43d0: 51 30 60 76 60 70 60 50 42 52 43 14 18 5f 53 54 Q0`v`p`PBRC.._ST 43e0: 41 08 a0 0c 7b 50 42 52 43 0a 80 00 a4 0a 09 a1 A...{PBRC....... 43f0: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 43 08 5f 48 49 ....[.B.LNKC._HI 4400: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 03 14 0d 5f D.A...._UID...._ 4410: 44 49 53 08 70 0a 80 50 43 52 43 08 5f 50 52 53 DIS.p..PCRC._PRS 4420: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 4430: 08 08 52 54 4c 43 11 09 0a 06 23 00 00 18 79 00 ..RTLC....#...y. 4440: 8b 52 54 4c 43 01 49 52 51 30 70 00 49 52 51 30 .RTLC.IRQ0p.IRQ0 4450: 79 01 7b 50 43 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PCRC...IRQ0.R 4460: 54 4c 43 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLC.._SRS..h.IRQ 4470: 30 82 49 52 51 30 60 76 60 70 60 50 43 52 43 14 0.IRQ0`v`p`PCRC. 4480: 18 5f 53 54 41 08 a0 0c 7b 50 43 52 43 0a 80 00 ._STA...{PCRC... 4490: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 44 ........[.B.LNKD 44a0: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 44b0: 04 14 0d 5f 44 49 53 08 70 0a 80 50 44 52 43 08 ..._DIS.p..PDRC. 44c0: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 44d0: 5f 43 52 53 08 08 52 54 4c 44 11 09 0a 06 23 00 _CRS..RTLD....#. 44e0: 00 18 79 00 8b 52 54 4c 44 01 49 52 51 30 70 00 ..y..RTLD.IRQ0p. 44f0: 49 52 51 30 79 01 7b 50 44 52 43 0a 0f 00 49 52 IRQ0y.{PDRC...IR 4500: 51 30 a4 52 54 4c 44 14 1b 5f 53 52 53 09 8b 68 Q0.RTLD.._SRS..h 4510: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 4520: 44 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 44 52 DRC.._STA...{PDR 4530: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a C...........[.B. 4540: 4c 4e 4b 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f LNKE._HID.A...._ 4550: 55 49 44 0a 05 14 0d 5f 44 49 53 08 70 0a 80 50 UID...._DIS.p..P 4560: 45 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ERC._PRS....#... 4570: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 45 11 09 y..8_CRS..RTLE.. 4580: 0a 06 23 00 00 18 79 00 8b 52 54 4c 45 01 49 52 ..#...y..RTLE.IR 4590: 51 30 70 00 49 52 51 30 79 01 7b 50 45 52 43 0a Q0p.IRQ0y.{PERC. 45a0: 0f 00 49 52 51 30 a4 52 54 4c 45 14 1b 5f 53 52 ..IRQ0.RTLE.._SR 45b0: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 45c0: 60 70 60 50 45 52 43 14 18 5f 53 54 41 08 a0 0c `p`PERC.._STA... 45d0: 7b 50 45 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PERC........... 45e0: 5b 82 42 0a 4c 4e 4b 46 08 5f 48 49 44 0c 41 d0 [.B.LNKF._HID.A. 45f0: 0c 0f 08 5f 55 49 44 0a 06 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4600: 70 0a 80 50 46 52 43 08 5f 50 52 53 11 09 0a 06 p..PFRC._PRS.... 4610: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4620: 4c 46 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LF....#...y..RTL 4630: 46 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 F.IRQ0p.IRQ0y.{P 4640: 46 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 46 14 FRC...IRQ0.RTLF. 4650: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 4660: 51 30 60 76 60 70 60 50 46 52 43 14 18 5f 53 54 Q0`v`p`PFRC.._ST 4670: 41 08 a0 0c 7b 50 46 52 43 0a 80 00 a4 0a 09 a1 A...{PFRC....... 4680: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 47 08 5f 48 49 ....[.B.LNKG._HI 4690: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 0d 5f D.A...._UID...._ 46a0: 44 49 53 08 70 0a 80 50 47 52 43 08 5f 50 52 53 DIS.p..PGRC._PRS 46b0: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 46c0: 08 08 52 54 4c 47 11 09 0a 06 23 00 00 18 79 00 ..RTLG....#...y. 46d0: 8b 52 54 4c 47 01 49 52 51 30 70 00 49 52 51 30 .RTLG.IRQ0p.IRQ0 46e0: 79 01 7b 50 47 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PGRC...IRQ0.R 46f0: 54 4c 47 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLG.._SRS..h.IRQ 4700: 30 82 49 52 51 30 60 76 60 70 60 50 47 52 43 14 0.IRQ0`v`p`PGRC. 4710: 18 5f 53 54 41 08 a0 0c 7b 50 47 52 43 0a 80 00 ._STA...{PGRC... 4720: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 48 ........[.B.LNKH 4730: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 4740: 08 14 0d 5f 44 49 53 08 70 0a 80 50 48 52 43 08 ..._DIS.p..PHRC. 4750: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 4760: 5f 43 52 53 08 08 52 54 4c 48 11 09 0a 06 23 00 _CRS..RTLH....#. 4770: 00 18 79 00 8b 52 54 4c 48 01 49 52 51 30 70 00 ..y..RTLH.IRQ0p. 4780: 49 52 51 30 79 01 7b 50 48 52 43 0a 0f 00 49 52 IRQ0y.{PHRC...IR 4790: 51 30 a4 52 54 4c 48 14 1b 5f 53 52 53 09 8b 68 Q0.RTLH.._SRS..h 47a0: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 47b0: 48 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 48 52 HRC.._STA...{PHR 47c0: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 3d 44 C...........[.=D 47d0: 4d 41 43 08 5f 48 49 44 0c 41 d0 02 00 08 5f 43 MAC._HID.A...._C 47e0: 52 53 11 28 0a 25 47 01 00 00 00 00 01 20 47 01 RS.(.%G...... G. 47f0: 81 00 81 00 01 11 47 01 93 00 93 00 01 0d 47 01 ......G.......G. 4800: c0 00 c0 00 01 20 2a 10 01 79 00 5b 82 26 46 57 ..... *..y.[.&FW 4810: 48 44 08 5f 48 49 44 0c 25 d4 08 00 08 5f 43 52 HD._HID.%...._CR 4820: 53 11 11 0a 0e 86 09 00 00 00 00 00 ff 00 00 00 S............... 4830: 01 79 00 5b 82 40 0b 48 50 45 54 08 5f 48 49 44 .y.[.@.HPET._HID 4840: 0c 41 d0 01 03 08 5f 43 49 44 0c 41 d0 0c 01 08 .A...._CID.A.... 4850: 42 55 46 30 11 11 0a 0e 86 09 00 00 00 00 d0 fe BUF0............ 4860: 00 04 00 00 79 00 14 27 5f 53 54 41 00 a0 13 92 ....y..'_STA.... 4870: 95 4f 53 59 53 0b d1 07 a0 08 48 50 41 45 a4 0a .OSYS.....HPAE.. 4880: 0f a1 0a a0 08 48 50 41 45 a4 0a 0b a4 00 14 46 .....HPAE......F 4890: 05 5f 43 52 53 08 a0 49 04 48 50 41 45 8a 42 55 ._CRS..I.HPAE.BU 48a0: 46 30 0a 04 48 50 54 30 a0 11 93 48 50 41 53 01 F0..HPT0...HPAS. 48b0: 70 0c 00 10 d0 fe 48 50 54 30 a0 12 93 48 50 41 p.....HPT0...HPA 48c0: 53 0a 02 70 0c 00 20 d0 fe 48 50 54 30 a0 12 93 S..p.. ..HPT0... 48d0: 48 50 41 53 0a 03 70 0c 00 30 d0 fe 48 50 54 30 HPAS..p..0..HPT0 48e0: a4 42 55 46 30 5b 82 45 0a 49 50 49 43 08 5f 48 .BUF0[.E.IPIC._H 48f0: 49 44 0b 41 d0 08 5f 43 52 53 11 41 09 0a 8d 47 ID.A.._CRS.A...G 4900: 01 20 00 20 00 01 02 47 01 24 00 24 00 01 02 47 . . ...G.$.$...G 4910: 01 28 00 28 00 01 02 47 01 2c 00 2c 00 01 02 47 .(.(...G.,.,...G 4920: 01 30 00 30 00 01 02 47 01 34 00 34 00 01 02 47 .0.0...G.4.4...G 4930: 01 38 00 38 00 01 02 47 01 3c 00 3c 00 01 02 47 .8.8...G.<.<...G 4940: 01 a0 00 a0 00 01 02 47 01 a4 00 a4 00 01 02 47 .......G.......G 4950: 01 a8 00 a8 00 01 02 47 01 ac 00 ac 00 01 02 47 .......G.......G 4960: 01 b0 00 b0 00 01 02 47 01 b4 00 b4 00 01 02 47 .......G.......G 4970: 01 b8 00 b8 00 01 02 47 01 bc 00 bc 00 01 02 47 .......G.......G 4980: 01 d0 04 d0 04 01 02 22 04 00 79 00 5b 82 25 4d ......."..y.[.%M 4990: 41 54 48 08 5f 48 49 44 0c 41 d0 0c 04 08 5f 43 ATH._HID.A...._C 49a0: 52 53 11 10 0a 0d 47 01 f0 00 f0 00 01 01 22 00 RS....G.......". 49b0: 20 79 00 5b 82 4b 09 4c 44 52 43 08 5f 48 49 44 y.[.K.LDRC._HID 49c0: 0c 41 d0 0c 02 08 5f 55 49 44 0a 02 08 5f 43 52 .A...._UID..._CR 49d0: 53 11 4e 07 0a 7a 47 01 2e 00 2e 00 01 02 47 01 S.N..zG.......G. 49e0: 4e 00 4e 00 01 02 47 01 61 00 61 00 01 01 47 01 N.N...G.a.a...G. 49f0: 63 00 63 00 01 01 47 01 65 00 65 00 01 01 47 01 c.c...G.e.e...G. 4a00: 67 00 67 00 01 01 47 01 80 00 80 00 01 01 47 01 g.g...G.......G. 4a10: 92 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 ......G.......G. 4a20: 80 06 80 06 01 20 47 01 00 08 00 08 01 10 47 01 ..... G.......G. 4a30: 00 10 00 10 01 80 47 01 80 11 80 11 01 40 47 01 ......G......@G. 4a40: 00 fe 00 fe 01 01 47 01 00 ff 00 ff 01 80 79 00 ......G.......y. 4a50: 5b 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b [.%RTC_._HID.A.. 4a60: 00 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 .._CRS....G.p.p. 4a70: 01 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f .."..y.[.-TIMR._ 4a80: 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a HID.A...._CRS... 4a90: 15 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 .G.@.@...G.P.P.. 4aa0: 04 22 01 00 79 00 5b 82 32 41 43 41 44 08 5f 48 ."..y.[.2ACAD._H 4ab0: 49 44 0d 41 43 50 49 30 30 30 33 00 08 5f 50 43 ID.ACPI0003.._PC 4ac0: 4c 12 06 01 5f 53 42 5f 14 11 5f 50 53 52 00 70 L..._SB_.._PSR.p 4ad0: 01 41 43 50 57 a4 41 43 50 57 14 1a 45 43 4f 4b .ACPW.ACPW..ECOK 4ae0: 00 a0 0f 93 5e 2e 45 43 30 5f 5a 30 30 39 01 a4 ....^.EC0_Z009.. 4af0: 01 a1 03 a4 00 5b 82 4e 6f 45 43 30 5f 08 5f 48 .....[.NoEC0_._H 4b00: 49 44 0c 41 d0 0c 09 08 5f 47 50 45 0a 1c 08 5a ID.A...._GPE...Z 4b10: 30 30 39 00 08 5f 43 52 53 11 15 0a 12 47 01 62 009.._CRS....G.b 4b20: 00 62 00 01 01 47 01 66 00 66 00 01 01 79 00 14 .b...G.f.f...y.. 4b30: 3b 5f 52 45 47 02 a0 34 93 68 0a 03 70 69 5a 30 ;_REG..4.h..piZ0 4b40: 30 39 a0 28 5b 12 5f 4f 53 49 60 70 00 42 54 44 09.([._OSI`p.BTD 4b50: 53 a0 19 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 S.._OSI.Windows 4b60: 32 30 30 36 00 70 01 42 54 44 53 5b 80 45 52 41 2006.p.BTDS[.ERA 4b70: 4d 03 00 0a ff 5b 81 4e 2e 45 52 41 4d 11 00 40 M....[.N.ERAM..@ 4b80: 30 53 4d 50 52 08 53 4d 53 54 08 53 4d 41 44 08 0SMPR.SMST.SMAD. 4b90: 53 4d 43 4d 08 53 4d 44 30 40 10 42 43 4e 54 08 SMCM.SMD0@.BCNT. 4ba0: 53 4d 41 41 18 00 40 04 43 48 47 4d 10 43 48 47 SMAA..@.CHGM.CHG 4bb0: 53 10 45 4e 49 44 08 45 4e 49 42 08 45 4e 44 44 S.ENID.ENIB.ENDD 4bc0: 08 43 48 47 56 08 43 48 47 41 10 42 41 4c 30 01 .CHGV.CHGA.BAL0. 4bd0: 42 41 4c 31 01 42 41 4c 32 01 42 41 4c 33 01 42 BAL1.BAL2.BAL3.B 4be0: 42 43 30 01 42 42 43 31 01 42 42 43 32 01 42 42 BC0.BBC1.BBC2.BB 4bf0: 43 33 01 00 08 50 48 44 44 01 49 46 44 44 01 49 C3...PHDD.IFDD.I 4c00: 4f 44 44 01 53 48 44 44 01 53 31 32 30 01 45 46 ODD.SHDD.S120.EF 4c10: 44 44 01 43 52 54 44 01 53 50 57 52 01 53 42 54 DD.CRTD.SPWR.SBT 4c20: 4e 01 56 49 44 4f 01 56 4f 4c 44 01 56 4f 4c 55 N.VIDO.VOLD.VOLU 4c30: 01 4d 55 54 45 01 43 4f 4e 54 01 42 52 47 54 01 .MUTE.CONT.BRGT. 4c40: 48 42 54 4e 01 53 34 53 54 01 53 4b 45 59 01 42 HBTN.S4ST.SKEY.B 4c50: 4b 45 59 01 54 4f 55 50 01 46 4e 42 4e 01 4c 49 KEY.TOUP.FNBN.LI 4c60: 44 46 01 44 49 47 4d 01 55 57 41 4b 01 00 08 44 DF.DIGM.UWAK...D 4c70: 4b 53 50 01 44 4b 49 4e 01 44 4b 49 44 01 44 4b KSP.DKIN.DKID.DK 4c80: 4f 4b 01 00 04 44 4b 50 57 01 00 07 42 54 4e 53 OK...DKPW...BTNS 4c90: 08 53 31 4c 44 01 53 33 4c 44 01 56 47 41 51 01 .S1LD.S3LD.VGAQ. 4ca0: 50 43 4d 51 01 50 43 4d 52 01 41 44 50 54 01 53 PCMQ.PCMR.ADPT.S 4cb0: 4c 4c 53 01 53 59 53 37 01 50 57 41 4b 01 4d 57 LLS.SYS7.PWAK.MW 4cc0: 41 4b 01 4c 57 41 4b 01 00 05 00 28 54 43 4e 4c AK.LWAK....(TCNL 4cd0: 08 54 4d 50 49 08 54 4d 53 44 08 46 41 53 4e 04 .TMPI.TMSD.FASN. 4ce0: 46 41 53 55 04 50 43 56 4c 04 00 02 53 57 54 4f FASU.PCVL...SWTO 4cf0: 01 48 57 54 4f 01 4d 4f 44 45 01 46 41 4e 53 02 .HWTO.MODE.FANS. 4d00: 49 4e 49 54 01 46 41 4e 31 01 46 41 4e 32 01 46 INIT.FAN1.FAN2.F 4d10: 41 4e 54 01 53 4b 4e 4d 01 43 54 4d 50 08 4c 49 ANT.SKNM.CTMP.LI 4d20: 44 45 01 50 4d 45 45 01 50 57 42 45 01 52 4e 47 DE.PMEE.PWBE.RNG 4d30: 45 01 42 54 57 45 01 44 43 4b 45 01 00 02 53 4b E.BTWE.DCKE...SK 4d40: 54 58 08 53 4b 54 42 08 53 4b 54 43 08 53 4b 54 TX.SKTB.SKTC.SKT 4d50: 41 08 00 08 48 41 50 4c 02 48 41 50 52 01 00 05 A...HAPL.HAPR... 4d60: 42 54 44 54 01 42 54 50 57 01 42 54 44 53 01 42 BTDT.BTPW.BTDS.B 4d70: 54 50 53 01 42 54 53 57 01 42 54 57 4b 01 42 54 TPS.BTSW.BTWK.BT 4d80: 4c 44 01 00 01 42 52 54 53 08 43 4e 54 53 08 57 LD...BRTS.CNTS.W 4d90: 4c 41 54 01 42 54 41 54 01 57 4c 45 58 01 42 54 LAT.BTAT.WLEX.BT 4da0: 45 58 01 4b 4c 53 57 01 57 4c 4f 4b 01 00 02 50 EX.KLSW.WLOK...P 4db0: 54 49 44 08 43 50 55 54 08 45 50 4b 54 08 47 48 TID.CPUT.EPKT.GH 4dc0: 49 44 08 00 04 42 4d 46 30 03 42 54 59 30 01 42 ID...BMF0.BTY0.B 4dd0: 53 54 30 08 42 52 43 30 10 42 53 4e 30 10 42 50 ST0.BRC0.BSN0.BP 4de0: 56 30 10 42 44 56 30 10 42 44 43 30 10 42 46 43 V0.BDV0.BDC0.BFC 4df0: 30 10 47 41 55 30 08 43 59 43 30 08 42 50 43 30 0.GAU0.CYC0.BPC0 4e00: 10 42 41 43 30 10 42 41 54 30 08 42 54 57 30 10 .BAC0.BAT0.BTW0. 4e10: 42 44 4e 30 08 00 40 04 00 04 42 4d 46 31 03 42 BDN0..@...BMF1.B 4e20: 54 59 31 01 42 53 54 31 08 42 52 43 31 10 42 53 TY1.BST1.BRC1.BS 4e30: 4e 31 10 42 50 56 31 10 42 44 56 31 10 42 44 43 N1.BPV1.BDV1.BDC 4e40: 31 10 42 46 43 31 10 47 41 55 31 08 43 59 43 31 1.BFC1.GAU1.CYC1 4e50: 08 42 50 43 31 10 42 41 43 31 10 42 41 54 31 08 .BPC1.BAC1.BAT1. 4e60: 42 54 57 31 10 14 37 5f 51 31 31 00 70 0a 87 50 BTW1..7_Q11.p..P 4e70: 38 30 48 a0 13 49 47 44 53 5e 5e 5e 2e 47 46 58 80H..IGDS^^^.GFX 4e80: 30 42 52 54 4e 0a 87 a1 15 86 5e 5e 5e 2f 03 50 0BRTN.....^^^/.P 4e90: 45 47 50 56 47 41 5f 4c 43 44 5f 0a 87 14 37 5f EGPVGA_LCD_...7_ 4ea0: 51 31 32 00 70 0a 86 50 38 30 48 a0 13 49 47 44 Q12.p..P80H..IGD 4eb0: 53 5e 5e 5e 2e 47 46 58 30 42 52 54 4e 0a 86 a1 S^^^.GFX0BRTN... 4ec0: 15 86 5e 5e 5e 2f 03 50 45 47 50 56 47 41 5f 4c ..^^^/.PEGPVGA_L 4ed0: 43 44 5f 0a 86 14 40 05 5f 51 31 43 00 70 0d 3d CD_...@._Q1C.p.= 4ee0: 3d 3d 3d 3d 51 55 45 52 59 5f 31 43 3d 3d 3d 3d ====QUERY_1C==== 4ef0: 3d 00 5b 31 a0 31 56 49 44 4f a0 12 49 47 44 53 =.[1.1VIDO..IGDS 4f00: 5e 5e 5e 2e 47 46 58 30 47 48 44 53 00 a1 12 5e ^^^.GFX0GHDS...^ 4f10: 5e 5e 2f 03 50 45 47 50 56 47 41 5f 44 53 53 57 ^^/.PEGPVGA_DSSW 4f20: 70 00 56 49 44 4f 14 21 5f 51 31 44 00 70 0d 3d p.VIDO.!_Q1D.p.= 4f30: 3d 3d 3d 3d 51 55 45 52 59 5f 31 44 3d 3d 3d 3d ====QUERY_1D==== 4f40: 3d 00 5b 31 50 43 4c 4b 14 21 5f 51 31 45 00 70 =.[1PCLK.!_Q1E.p 4f50: 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 31 45 3d 3d .=====QUERY_1E== 4f60: 3d 3d 3d 00 5b 31 50 43 4c 4b 14 39 5f 51 32 35 ===.[1PCLK.9_Q25 4f70: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 35 .p.=====QUERY_25 4f80: 3d 3d 3d 3d 3d 00 5b 31 5b 22 0b e8 03 86 5e 5e =====.[1["....^^ 4f90: 42 41 54 31 0a 81 5b 22 0b e8 03 86 5e 5e 42 41 BAT1..["....^^BA 4fa0: 54 31 0a 80 14 2f 5f 51 33 34 00 70 0d 3d 3d 3d T1.../_Q34.p.=== 4fb0: 3d 3d 51 55 45 52 59 5f 33 34 3d 3d 3d 3d 3d 00 ==QUERY_34=====. 4fc0: 5b 31 a0 11 42 4b 45 59 50 48 53 53 0a 71 70 00 [1..BKEYPHSS.qp. 4fd0: 42 4b 45 59 14 32 5f 51 33 37 00 70 0d 3d 3d 3d BKEY.2_Q37.p.=== 4fe0: 3d 3d 51 55 45 52 59 5f 33 37 3d 3d 3d 3d 3d 00 ==QUERY_37=====. 4ff0: 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 03 86 5e [1.ACAD..["....^ 5000: 5e 42 41 54 31 0a 80 14 32 5f 51 33 38 00 70 0d ^BAT1...2_Q38.p. 5010: 3d 3d 3d 3d 3d 51 55 45 52 59 5f 33 38 3d 3d 3d =====QUERY_38=== 5020: 3d 3d 00 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 ==.[1.ACAD..[".. 5030: 03 86 5e 5e 42 41 54 31 0a 80 14 29 5f 51 32 44 ..^^BAT1...)_Q2D 5040: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 44 .p.=====QUERY_2D 5050: 3d 3d 3d 3d 3d 00 5b 31 70 00 44 54 53 4d 54 52 =====.[1p.DTSMTR 5060: 41 50 0a 46 14 29 5f 51 32 45 00 70 0d 3d 3d 3d AP.F.)_Q2E.p.=== 5070: 3d 3d 51 55 45 52 59 5f 32 45 3d 3d 3d 3d 3d 00 ==QUERY_2E=====. 5080: 5b 31 70 01 44 54 53 4d 54 52 41 50 0a 46 5b 80 [1p.DTSMTRAP.F[. 5090: 43 43 4c 4b 01 0b 10 10 0a 04 5b 81 20 43 43 4c CCLK......[. CCL 50a0: 4b 03 00 01 44 55 54 59 03 54 48 45 4e 01 00 03 K...DUTY.THEN... 50b0: 46 54 54 5f 01 00 08 54 53 54 53 01 5b 80 45 43 FTT_...TSTS.[.EC 50c0: 52 4d 03 00 0a ff 5b 81 44 04 45 43 52 4d 11 00 RM....[.D.ECRM.. 50d0: 40 4a 45 52 49 42 10 45 52 42 44 08 00 48 0a 53 @JERIB.ERBD..H.S 50e0: 44 54 4d 08 46 53 53 4e 04 46 41 4e 55 04 50 54 DTM.FSSN.FANU.PT 50f0: 56 4c 03 00 04 54 54 48 52 01 00 48 06 50 4a 49 VL...TTHR..H.PJI 5100: 44 08 00 08 00 48 1d 52 46 52 44 10 5b 01 46 41 D....H.RFRD.[.FA 5110: 4d 58 00 14 22 46 41 4e 47 01 5b 23 46 41 4d 58 MX.."FANG.[#FAMX 5120: ff ff 70 68 45 52 49 42 70 45 52 42 44 60 5b 27 ..phERIBpERBD`[' 5130: 46 41 4d 58 a4 60 14 22 46 41 4e 57 02 5b 23 46 FAMX.`."FANW.[#F 5140: 41 4d 58 ff ff 70 68 45 52 49 42 70 69 45 52 42 AMX..phERIBpiERB 5150: 44 5b 27 46 41 4d 58 a4 69 14 09 54 55 56 52 01 D['FAMX.i..TUVR. 5160: a4 0a 03 14 2e 54 48 52 4f 01 a0 09 93 68 00 a4 .....THRO....h.. 5170: 54 48 45 4e a1 1d a0 09 93 68 01 a4 44 55 54 59 THEN.....h..DUTY 5180: a1 11 a0 0a 93 68 0a 02 a4 54 54 48 52 a1 04 a4 .....h...TTHR... 5190: 0a ff 14 2a 43 4c 43 4b 01 a0 10 93 68 00 70 00 ...*CLCK....h.p. 51a0: 54 48 45 4e 70 00 46 54 54 5f a1 0d 70 68 44 55 THENp.FTT_..phDU 51b0: 54 59 70 01 54 48 45 4e a4 54 48 45 4e 14 37 50 TYp.THEN.THEN.7P 51c0: 43 4c 4b 00 70 50 54 56 4c 60 a0 10 93 60 00 70 CLK.pPTVL`...`.p 51d0: 00 54 48 45 4e 70 00 46 54 54 5f a1 19 76 60 70 .THENp.FTT_..v`p 51e0: 80 60 00 61 7b 61 0a 07 61 70 61 44 55 54 59 70 .`.a{a..apaDUTYp 51f0: 01 54 48 45 4e 5b 82 4b 22 42 41 54 31 08 5f 48 .THEN[.K"BAT1._H 5200: 49 44 0c 41 d0 0c 0a 08 5f 55 49 44 01 08 5f 50 ID.A...._UID.._P 5210: 43 4c 12 06 01 5f 53 42 5f 14 39 5f 53 54 41 00 CL..._SB_.9_STA. 5220: a0 29 90 45 43 4f 4b 93 45 43 44 59 00 a0 13 5e .).ECOK.ECDY...^ 5230: 5e 2e 45 43 30 5f 42 41 4c 30 5b 22 0a 14 a4 0a ^.EC0_BAL0[".... 5240: 1f a1 08 5b 22 0a 14 a4 0a 0f a1 08 5b 22 0a 14 ...[".......[".. 5250: a4 0a 1f 14 48 10 5f 42 49 46 00 08 53 54 41 54 ....H._BIF..STAT 5260: 12 3a 0d 01 0b a0 0f 0b a0 0f 01 0b 5c 2b 0b a4 .:..........\+.. 5270: 01 0a 9c 0b 08 01 0b c4 0e 0d 50 41 33 34 36 35 ..........PA3465 5280: 55 20 00 0d 33 36 35 38 51 00 0d 4c 69 2d 49 6f U ..3658Q..Li-Io 5290: 6e 00 0d 43 4f 4d 50 41 4c 20 00 a0 4b 07 90 45 n..COMPAL ..K..E 52a0: 43 4f 4b 93 45 43 44 59 00 70 5e 5e 2e 45 43 30 COK.ECDY.p^^.EC0 52b0: 5f 42 44 4e 30 60 a0 23 93 60 0a 08 70 0a b4 88 _BDN0`.#.`..p... 52c0: 53 54 41 54 0a 06 00 70 0d 50 41 33 34 35 37 55 STAT...p.PA3457U 52d0: 20 00 88 53 54 41 54 0a 09 00 a0 24 93 60 0a 20 ..STAT....$.`. 52e0: 70 0b 02 01 88 53 54 41 54 0a 06 00 70 0d 50 41 p....STAT...p.PA 52f0: 33 34 35 37 55 20 00 88 53 54 41 54 0a 09 00 5b 3457U ..STAT...[ 5300: 22 0a 14 70 5e 5e 2e 45 43 30 5f 42 44 43 30 42 "..p^^.EC0_BDC0B 5310: 46 43 31 5b 22 0a 14 a1 12 70 0d 4c 69 2d 49 6f FC1["....p.Li-Io 5320: 6e 00 88 53 54 41 54 0a 0b 00 a0 2c 42 46 43 31 n..STAT....,BFC1 5330: 78 42 46 43 31 0a 64 60 61 77 61 0a 64 61 70 61 xBFC1.d`awa.dapa 5340: 42 46 43 31 70 61 88 53 54 41 54 01 00 70 61 88 BFC1pa.STAT..pa. 5350: 53 54 41 54 0a 02 00 a4 53 54 41 54 14 45 0c 5f STAT....STAT.E._ 5360: 42 53 54 00 08 50 42 53 54 12 10 04 00 0c ff ff BST..PBST....... 5370: ff ff 0c ff ff ff ff 0b 5c 2b 70 0b 5c 2b 63 a0 ........\+p.\+c. 5380: 38 90 45 43 4f 4b 93 45 43 44 59 00 5b 22 0a 14 8.ECOK.ECDY.[".. 5390: 70 5e 5e 2e 45 43 30 5f 42 53 54 30 42 53 54 31 p^^.EC0_BST0BST1 53a0: 5b 22 0a 14 70 5e 5e 2e 45 43 30 5f 47 41 55 30 ["..p^^.EC0_GAU0 53b0: 42 47 55 31 5b 22 0a 14 a0 15 42 46 43 31 77 42 BGU1["....BFC1wB 53c0: 47 55 31 42 46 43 31 62 78 62 0a 64 64 62 a1 09 GU1BFC1bxb.ddb.. 53d0: 77 42 47 55 31 0a 28 62 70 42 53 54 31 88 50 42 wBGU1.(bpBST1.PB 53e0: 53 54 00 00 70 00 88 50 42 53 54 01 00 70 62 88 ST..p..PBST..pb. 53f0: 50 42 53 54 0a 02 00 70 63 88 50 42 53 54 0a 03 PBST...pc.PBST.. 5400: 00 a0 1b 94 45 43 44 59 00 76 45 43 44 59 a0 0e ....ECDY.vECDY.. 5410: 93 45 43 44 59 00 86 42 41 54 31 0a 80 a4 50 42 .ECDY..BAT1...PB 5420: 53 54 5b 82 2e 50 53 32 4b 08 5f 48 49 44 0c 41 ST[..PS2K._HID.A 5430: d0 03 03 08 5f 43 52 53 11 19 0a 16 47 01 60 00 ...._CRS....G.`. 5440: 60 00 01 01 47 01 64 00 64 00 01 01 23 02 00 01 `...G.d.d...#... 5450: 79 00 5b 82 1e 50 53 32 4d 08 5f 48 49 44 0c 41 y.[..PS2M._HID.A 5460: d0 0f 13 08 5f 43 52 53 11 09 0a 06 23 00 10 01 ...._CRS....#... 5470: 79 00 5b 82 43 6a 50 41 54 41 08 5f 41 44 52 0c y.[.CjPATA._ADR. 5480: 01 00 1f 00 5b 80 50 41 43 53 02 0a 40 0a c0 5b ....[.PACS..@..[ 5490: 81 49 04 50 41 43 53 03 50 52 49 54 10 00 10 50 .I.PACS.PRIT...P 54a0: 53 49 54 04 00 1c 53 59 4e 43 04 00 0c 53 44 54 SIT...SYNC...SDT 54b0: 30 02 00 02 53 44 54 31 02 00 4a 04 49 43 52 30 0...SDT1..J.ICR0 54c0: 04 49 43 52 31 04 49 43 52 32 04 49 43 52 33 04 .ICR1.ICR2.ICR3. 54d0: 49 43 52 34 04 49 43 52 35 04 5b 82 4b 63 50 52 ICR4.ICR5.[.KcPR 54e0: 49 44 08 5f 41 44 52 00 14 40 17 5f 47 54 4d 00 ID._ADR..@._GTM. 54f0: 08 50 42 55 46 11 17 0a 14 00 00 00 00 00 00 00 .PBUF........... 5500: 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 50 42 ..............PB 5510: 55 46 00 50 49 4f 30 8a 50 42 55 46 0a 04 44 4d UF.PIO0.PBUF..DM 5520: 41 30 8a 50 42 55 46 0a 08 50 49 4f 31 8a 50 42 A0.PBUF..PIO1.PB 5530: 55 46 0a 0c 44 4d 41 31 8a 50 42 55 46 0a 10 46 UF..DMA1.PBUF..F 5540: 4c 41 47 70 47 45 54 50 50 52 49 54 50 49 4f 30 LAGpGETPPRITPIO0 5550: 70 47 44 4d 41 7b 53 59 4e 43 01 00 7b 49 43 52 pGDMA{SYNC..{ICR 5560: 33 01 00 7b 49 43 52 30 01 00 53 44 54 30 7b 49 3..{ICR0..SDT0{I 5570: 43 52 31 01 00 44 4d 41 30 a0 14 93 44 4d 41 30 CR1..DMA0...DMA0 5580: 0c ff ff ff ff 70 50 49 4f 30 44 4d 41 30 a0 2e .....pPIO0DMA0.. 5590: 7b 50 52 49 54 0b 00 40 00 a0 14 93 7b 50 52 49 {PRIT..@....{PRI 55a0: 54 0a 90 00 0a 80 70 0b 84 03 50 49 4f 31 a1 0e T.....p...PIO1.. 55b0: 70 47 45 54 54 50 53 49 54 50 49 4f 31 a1 0b 70 pGETTPSITPIO1..p 55c0: 0c ff ff ff ff 50 49 4f 31 70 47 44 4d 41 7b 53 .....PIO1pGDMA{S 55d0: 59 4e 43 0a 02 00 7b 49 43 52 33 0a 02 00 7b 49 YNC...{ICR3...{I 55e0: 43 52 30 0a 02 00 53 44 54 31 7b 49 43 52 31 0a CR0...SDT1{ICR1. 55f0: 02 00 44 4d 41 31 a0 14 93 44 4d 41 31 0c ff ff ..DMA1...DMA1... 5600: ff ff 70 50 49 4f 31 44 4d 41 31 70 47 45 54 46 ..pPIO1DMA1pGETF 5610: 7b 53 59 4e 43 01 00 7b 53 59 4e 43 0a 02 00 50 {SYNC..{SYNC...P 5620: 52 49 54 46 4c 41 47 a0 2c 7b 93 50 49 4f 30 0c RITFLAG.,{.PIO0. 5630: ff ff ff ff 93 44 4d 41 30 0c ff ff ff ff 00 70 .....DMA0......p 5640: 0a 78 50 49 4f 30 70 0a 14 44 4d 41 30 70 0a 03 .xPIO0p..DMA0p.. 5650: 46 4c 41 47 a4 50 42 55 46 14 4c 2a 5f 53 54 4d FLAG.PBUF.L*_STM 5660: 03 8a 68 00 50 49 4f 30 8a 68 0a 04 44 4d 41 30 ..h.PIO0.h..DMA0 5670: 8a 68 0a 08 50 49 4f 31 8a 68 0a 0c 44 4d 41 31 .h..PIO1.h..DMA1 5680: 8a 68 0a 10 46 4c 41 47 a0 41 12 93 87 69 0b 00 .h..FLAG.A...i.. 5690: 02 7b 50 52 49 54 0b f0 c0 50 52 49 54 7b 53 59 .{PRIT...PRIT{SY 56a0: 4e 43 0a 02 53 59 4e 43 70 00 53 44 54 30 7b 49 NC..SYNCp.SDT0{I 56b0: 43 52 30 0a 02 49 43 52 30 7b 49 43 52 31 0a 02 CR0..ICR0{ICR1.. 56c0: 49 43 52 31 7b 49 43 52 33 0a 02 49 43 52 33 7b ICR1{ICR3..ICR3{ 56d0: 49 43 52 35 0a 02 49 43 52 35 8b 69 0a 62 57 34 ICR5..ICR5.i.bW4 56e0: 39 30 8b 69 0a 6a 57 35 33 30 8b 69 0a 7e 57 36 90.i.jW530.i.~W6 56f0: 33 30 8b 69 0a 80 57 36 34 30 8b 69 0a b0 57 38 30.i..W640.i..W8 5700: 38 30 8b 69 0a ba 57 39 33 30 7d 50 52 49 54 0b 80.i..W930}PRIT. 5710: 04 80 50 52 49 54 a0 1e 90 7b 46 4c 41 47 0a 02 ..PRIT...{FLAG.. 5720: 00 7b 57 34 39 30 0b 00 08 00 7d 50 52 49 54 0a .{W490....}PRIT. 5730: 02 50 52 49 54 7d 50 52 49 54 53 45 54 50 50 49 .PRIT}PRITSETPPI 5740: 4f 30 57 35 33 30 57 36 34 30 50 52 49 54 a0 4b O0W530W640PRIT.K 5750: 05 7b 46 4c 41 47 01 00 7d 53 59 4e 43 01 53 59 .{FLAG..}SYNC.SY 5760: 4e 43 70 53 44 4d 41 44 4d 41 30 53 44 54 30 a0 NCpSDMADMA0SDT0. 5770: 12 95 44 4d 41 30 0a 1e 7d 49 43 52 33 01 49 43 ..DMA0..}ICR3.IC 5780: 52 33 a0 12 95 44 4d 41 30 0a 3c 7d 49 43 52 30 R3...DMA0.<}ICR0 5790: 01 49 43 52 30 a0 14 7b 57 39 33 30 0b 00 20 00 .ICR0..{W930.. . 57a0: 7d 49 43 52 31 01 49 43 52 31 a0 4b 15 93 87 6a }ICR1.ICR1.K...j 57b0: 0b 00 02 7b 50 52 49 54 0b 0f bf 50 52 49 54 70 ...{PRIT...PRITp 57c0: 00 50 53 49 54 7b 53 59 4e 43 01 53 59 4e 43 70 .PSIT{SYNC.SYNCp 57d0: 00 53 44 54 31 7b 49 43 52 30 01 49 43 52 30 7b .SDT1{ICR0.ICR0{ 57e0: 49 43 52 31 01 49 43 52 31 7b 49 43 52 33 01 49 ICR1.ICR1{ICR3.I 57f0: 43 52 33 7b 49 43 52 35 01 49 43 52 35 8b 6a 0a CR3{ICR5.ICR5.j. 5800: 62 57 34 39 31 8b 6a 0a 6a 57 35 33 31 8b 6a 0a bW491.j.jW531.j. 5810: 7e 57 36 33 31 8b 6a 0a 80 57 36 34 31 8b 6a 0a ~W631.j..W641.j. 5820: b0 57 38 38 31 8b 6a 0a ba 57 39 33 31 7d 50 52 .W881.j..W931}PR 5830: 49 54 0b 40 80 50 52 49 54 a0 1e 90 7b 46 4c 41 IT.@.PRIT...{FLA 5840: 47 0a 08 00 7b 57 34 39 31 0b 00 08 00 7d 50 52 G...{W491....}PR 5850: 49 54 0a 20 50 52 49 54 a0 4c 04 7b 46 4c 41 47 IT. PRIT.L.{FLAG 5860: 0a 10 00 7d 50 52 49 54 0b 00 40 50 52 49 54 a0 ...}PRIT..@PRIT. 5870: 13 94 50 49 4f 31 0a f0 7d 50 52 49 54 0a 80 50 ..PIO1..}PRIT..P 5880: 52 49 54 a1 21 7d 50 52 49 54 0a 10 50 52 49 54 RIT.!}PRIT..PRIT 5890: 70 53 45 54 54 50 49 4f 31 57 35 33 31 57 36 34 pSETTPIO1W531W64 58a0: 31 50 53 49 54 a0 40 06 7b 46 4c 41 47 0a 04 00 1PSIT.@.{FLAG... 58b0: 7d 53 59 4e 43 0a 02 53 59 4e 43 70 53 44 4d 41 }SYNC..SYNCpSDMA 58c0: 44 4d 41 31 53 44 54 31 a0 13 95 44 4d 41 31 0a DMA1SDT1...DMA1. 58d0: 1e 7d 49 43 52 33 0a 02 49 43 52 33 a0 13 95 44 .}ICR3..ICR3...D 58e0: 4d 41 31 0a 3c 7d 49 43 52 30 0a 02 49 43 52 30 MA1.<}ICR0..ICR0 58f0: a0 15 7b 57 39 33 31 0b 00 20 00 7d 49 43 52 31 ..{W931.. .}ICR1 5900: 0a 02 49 43 52 31 5b 82 47 10 50 5f 44 30 08 5f ..ICR1[.G.P_D0._ 5910: 41 44 52 00 14 4a 0f 5f 47 54 46 00 08 50 49 42 ADR..J._GTF..PIB 5920: 30 11 11 0a 0e 03 00 00 00 00 a0 ef 03 00 00 00 0............... 5930: 00 a0 ef 8c 50 49 42 30 01 50 4d 44 30 8c 50 49 ....PIB0.PMD0.PI 5940: 42 30 0a 08 44 4d 44 30 a0 40 06 7b 50 52 49 54 B0..DMD0.@.{PRIT 5950: 0a 02 00 a0 13 93 7b 50 52 49 54 0a 09 00 0a 08 ......{PRIT..... 5960: 70 0a 08 50 4d 44 30 a1 41 04 70 0a 0a 50 4d 44 p..PMD0.A.p..PMD 5970: 30 7a 7b 50 52 49 54 0b 00 03 00 0a 08 60 7a 7b 0z{PRIT......`z{ 5980: 50 52 49 54 0b 00 30 00 0a 0c 61 72 60 61 62 a0 PRIT..0...ar`ab. 5990: 0c 93 0a 03 62 70 0a 0b 50 4d 44 30 a0 0c 93 0a ....bp..PMD0.... 59a0: 05 62 70 0a 0c 50 4d 44 30 a1 07 70 01 50 4d 44 .bp..PMD0..p.PMD 59b0: 30 a0 43 04 7b 53 59 4e 43 01 00 70 7d 53 44 54 0.C.{SYNC..p}SDT 59c0: 30 0a 40 00 44 4d 44 30 a0 2c 7b 49 43 52 31 01 0.@.DMD0.,{ICR1. 59d0: 00 a0 13 7b 49 43 52 30 01 00 72 44 4d 44 30 0a ...{ICR0..rDMD0. 59e0: 02 44 4d 44 30 a0 0f 7b 49 43 52 33 01 00 70 0a .DMD0..{ICR3..p. 59f0: 45 44 4d 44 30 a1 14 7d 74 7b 50 4d 44 30 0a 07 EDMD0..}t{PMD0.. 5a00: 00 0a 02 00 0a 20 44 4d 44 30 a4 50 49 42 30 5b ..... DMD0.PIB0[ 5a10: 82 46 10 50 5f 44 31 08 5f 41 44 52 01 14 49 0f .F.P_D1._ADR..I. 5a20: 5f 47 54 46 00 08 50 49 42 31 11 11 0a 0e 03 00 _GTF..PIB1...... 5a30: 00 00 00 b0 ef 03 00 00 00 00 b0 ef 8c 50 49 42 .............PIB 5a40: 31 01 50 4d 44 31 8c 50 49 42 31 0a 08 44 4d 44 1.PMD1.PIB1..DMD 5a50: 31 a0 4b 05 7b 50 52 49 54 0a 20 00 a0 13 93 7b 1.K.{PRIT. ....{ 5a60: 50 52 49 54 0a 90 00 0a 80 70 0a 08 50 4d 44 31 PRIT.....p..PMD1 5a70: a1 3c 72 7b 50 53 49 54 0a 03 00 7a 7b 50 53 49 .. 0050: 80 49 ee 6a 65 26 72 1e cd bf 5f 2f 96 d6 c0 0a .I.je&r..._/.... 0060: 92 f5 06 b5 00 b2 3b 29 02 e2 4c 8d c2 f2 bc 41 ......;)..L....A 0070: 77 9c 70 f0 f3 1b 09 d2 63 5a dc a8 83 f8 5e c9 w.p.....cZ....^. 0080: 15 95 f9 fa fd dc 05 b7 4d 67 7f 2d b3 84 33 20 ........Mg.-..3 0090: e1 d1 79 2a a7 6a 77 d1 b6 20 2a 76 42 c5 d5 e9 ..y*.jw.. *vB... 00a0: b6 43 40 55 44 c3 c9 37 99 5f 41 97 70 f3 d1 f6 .C@UD..7._A.p... 00b0: 07 ec 7b 1a 29 a1 c1 f1 91 fd 48 86 6e 3e ce cb ..{.).....H.n>.. 00c0: 01 00 00 00 b6 00 00 00 00 00 02 00 4c 45 4e 4f ............LENO 00d0: 56 4f 54 50 2d 36 38 20 20 20 57 49 4e 44 4f 57 VOTP-68 WINDOW 00e0: 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 S .............. 00f0: 00 00 00 00 00 00 8a 6e 2e c9 36 e6 7f 10 8a ea .......n..6..... 0100: 14 ad d2 93 b7 6d 9b 73 ad 83 36 b8 6c a7 a7 ee .....m.s..6.l... 0110: 37 47 16 fe f3 fc cd c7 89 84 06 16 91 0b 1e 81 7G.............. 0120: 11 42 b1 35 52 57 f6 6b bb 5f a5 81 e2 ff 89 8a .B.5RW.k._...... 0130: 95 c3 4d fc e9 56 4f 4c 34 cc 99 5e 62 e1 90 8a ..M..VOL4..^b... 0140: 54 be 4a 00 5c 9b a0 86 41 46 66 9d e2 f2 e7 36 T.J.\...AFf....6 0150: 9c 33 91 27 e7 8d 5c a1 d8 f9 a4 61 8a 1c 04 07 .3.'..\....a.... 0160: e3 2a 1e 14 f1 bd 7f 4c 09 ff 19 11 a9 d4 74 ca .*.....L......t. 0170: 11 9e dc 54 39 bf ...T9. APIC @ 0xbf6dff70 0000: 41 50 49 43 68 00 00 00 01 13 50 54 4c 54 44 20 APICh.....PTLTD 0010: 09 20 41 50 49 43 20 20 00 00 04 06 20 4c 54 50 . APIC .... LTP 0020: 00 00 00 00 00 00 e0 fe 01 00 00 00 00 08 00 00 ................ 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0c 02 00 ................ 0040: 00 00 c0 fe 00 00 00 00 04 06 00 05 00 01 04 06 ................ 0050: 01 05 00 01 02 0a 00 00 02 00 00 00 05 00 02 0a ................ 0060: 00 09 09 00 00 00 0d 00 ........ BOOT @ 0xbf6dffd8 0000: 42 4f 4f 54 28 00 00 00 01 a5 50 54 4c 54 44 20 BOOT(.....PTLTD 0010: 24 53 42 46 54 42 4c 24 00 00 04 06 20 4c 54 50 $SBFTBL$.... LTP 0020: 01 00 00 00 36 00 00 00 ....6... SSDT @ 0xbf6d98bd 0000: 53 53 44 54 ad 02 00 00 01 59 53 61 74 61 52 65 SSDT.....YSataRe 0010: 53 61 74 61 41 68 63 69 00 10 00 00 49 4e 54 4c SataAhci....INTL 0020: 24 06 05 20 10 48 28 5c 2f 03 5f 53 42 5f 50 43 $.. .H(\/._SB_PC 0030: 49 30 53 41 54 41 5b 82 4f 0c 50 52 54 30 08 5f I0SATA[.O.PRT0._ 0040: 41 44 52 0b ff ff 14 44 0b 5f 53 44 44 01 08 47 ADR....D._SDD..G 0050: 42 55 30 11 0a 0a 07 00 00 00 00 00 a0 00 8c 47 BU0............G 0060: 42 55 30 0a 00 47 42 30 30 8c 47 42 55 30 0a 01 BU0..GB00.GBU0.. 0070: 47 42 30 31 8c 47 42 55 30 0a 02 47 42 30 32 8c GB01.GBU0..GB02. 0080: 47 42 55 30 0a 03 47 42 30 33 8c 47 42 55 30 0a GBU0..GB03.GBU0. 0090: 04 47 42 30 34 8c 47 42 55 30 0a 05 47 42 30 35 .GB04.GBU0..GB05 00a0: 8c 47 42 55 30 0a 06 47 42 30 36 a0 46 04 93 87 .GBU0..GB06.F... 00b0: 68 0b 00 02 8b 68 0a 9c 57 37 38 30 a0 1e 7b 57 h....h..W780..{W 00c0: 37 38 30 0a 08 00 70 0a 10 47 42 30 30 70 0a 03 780...p..GB00p.. 00d0: 47 42 30 31 70 0a ef 47 42 30 36 a1 16 70 0a 90 GB01p..GB06..p.. 00e0: 47 42 30 30 70 0a 03 47 42 30 31 70 0a ef 47 42 GB00p..GB01p..GB 00f0: 30 36 70 47 42 55 30 47 54 46 30 14 0b 5f 47 54 06pGBU0GTF0.._GT 0100: 46 00 a4 47 54 46 30 5b 82 41 0d 50 52 54 31 08 F..GTF0[.A.PRT1. 0110: 5f 41 44 52 0c ff ff 01 00 14 44 0b 5f 53 44 44 _ADR......D._SDD 0120: 01 08 47 42 55 31 11 0a 0a 07 00 00 00 00 00 a0 ..GBU1.......... 0130: 00 8c 47 42 55 31 0a 00 47 42 31 30 8c 47 42 55 ..GBU1..GB10.GBU 0140: 31 0a 01 47 42 31 31 8c 47 42 55 31 0a 02 47 42 1..GB11.GBU1..GB 0150: 31 32 8c 47 42 55 31 0a 03 47 42 31 33 8c 47 42 12.GBU1..GB13.GB 0160: 55 31 0a 04 47 42 31 34 8c 47 42 55 31 0a 05 47 U1..GB14.GBU1..G 0170: 42 31 35 8c 47 42 55 31 0a 06 47 42 31 36 a0 46 B15.GBU1..GB16.F 0180: 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 38 31 a0 ...h....h..W781. 0190: 1e 7b 57 37 38 31 0a 08 00 70 0a 10 47 42 31 30 .{W781...p..GB10 01a0: 70 0a 03 47 42 31 31 70 0a ef 47 42 31 36 a1 16 p..GB11p..GB16.. 01b0: 70 0a 90 47 42 31 30 70 0a 03 47 42 31 31 70 0a p..GB10p..GB11p. 01c0: ef 47 42 31 36 70 47 42 55 31 47 54 46 31 14 0b .GB16pGBU1GTF1.. 01d0: 5f 47 54 46 00 a4 47 54 46 31 5b 82 41 0d 50 52 _GTF..GTF1[.A.PR 01e0: 54 32 08 5f 41 44 52 0c ff ff 02 00 14 44 0b 5f T2._ADR......D._ 01f0: 53 44 44 01 08 47 42 55 32 11 0a 0a 07 00 00 00 SDD..GBU2....... 0200: 00 00 a0 00 8c 47 42 55 32 0a 00 47 42 32 30 8c .....GBU2..GB20. 0210: 47 42 55 32 0a 01 47 42 32 31 8c 47 42 55 32 0a GBU2..GB21.GBU2. 0220: 02 47 42 32 32 8c 47 42 55 32 0a 03 47 42 32 33 .GB22.GBU2..GB23 0230: 8c 47 42 55 32 0a 04 47 42 32 34 8c 47 42 55 32 .GBU2..GB24.GBU2 0240: 0a 05 47 42 32 35 8c 47 42 55 32 0a 06 47 42 32 ..GB25.GBU2..GB2 0250: 36 a0 46 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 6.F...h....h..W7 0260: 38 32 a0 1e 7b 57 37 38 32 0a 08 00 70 0a 10 47 82..{W782...p..G 0270: 42 32 30 70 0a 03 47 42 32 31 70 0a ef 47 42 32 B20p..GB21p..GB2 0280: 36 a1 16 70 0a 90 47 42 32 30 70 0a 03 47 42 32 6..p..GB20p..GB2 0290: 31 70 0a ef 47 42 32 36 70 47 42 55 32 47 54 46 1p..GB26pGBU2GTF 02a0: 32 14 0b 5f 47 54 46 00 a4 47 54 46 32 2.._GTF..GTF2 SSDT @ 0xbf6d981a 0000: 53 53 44 54 a3 00 00 00 01 ed 42 72 74 52 65 66 SSDT......BrtRef 0010: 44 44 30 31 42 52 54 00 00 10 00 00 49 4e 54 4c DD01BRT.....INTL 0020: 24 06 05 20 10 4e 07 5c 2f 04 5f 53 42 5f 50 43 $.. .N.\/._SB_PC 0030: 49 30 47 46 58 30 44 44 30 33 14 1e 5f 42 43 4c I0GFX0DD03.._BCL 0040: 00 a4 12 16 0a 0a 46 0a 28 0a 00 0a 0a 0a 14 0a ......F.(....... 0050: 1e 0a 28 0a 32 0a 3c 0a 46 14 25 5f 42 43 4d 01 ..(.2.<.F.%_BCM. 0060: 78 68 0a 0a 60 61 70 61 5c 2f 05 5f 53 42 5f 50 xh..`apa\/._SB_P 0070: 43 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 14 CI0LPCBEC0_BRTS. 0080: 23 5f 42 51 43 00 77 5c 2f 05 5f 53 42 5f 50 43 #_BQC.w\/._SB_PC 0090: 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 0a 0a I0LPCBEC0_BRTS.. 00a0: 60 a4 60 `.` SSDT @ 0xbf6d8e10 0000: 53 53 44 54 5f 02 00 00 01 c8 50 6d 52 65 66 00 SSDT_.....PmRef. 0010: 43 70 75 30 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu0Tst..0..INTL 0020: 24 06 05 20 10 4a 23 5c 2e 5f 50 52 5f 43 50 55 $.. .J#\._PR_CPU 0030: 30 08 5f 54 50 43 0a 00 14 4d 06 5f 50 54 43 00 0._TPC...M._PTC. 0040: a0 37 7b 50 44 43 30 0a 04 00 a4 12 2c 02 11 14 .7{PDC0.....,... 0050: 0a 11 82 0c 00 7f 00 00 00 00 00 00 00 00 00 00 ................ 0060: 00 79 00 11 14 0a 11 82 0c 00 7f 00 00 00 00 00 .y.............. 0070: 00 00 00 00 00 00 79 00 a4 12 2c 02 11 14 0a 11 ......y...,..... 0080: 82 0c 00 01 04 01 00 10 10 00 00 00 00 00 00 79 ...............y 0090: 00 11 14 0a 11 82 0c 00 01 04 01 00 10 10 00 00 ................ 00a0: 00 00 00 00 79 00 08 54 53 53 49 12 41 07 08 12 ....y..TSSI.A... 00b0: 0d 05 0a 64 0b e8 03 0a 00 0a 00 0a 00 12 0d 05 ...d............ 00c0: 0a 58 0b 6b 03 0a 00 0a 0f 0a 00 12 0d 05 0a 4b .X.k...........K 00d0: 0b ee 02 0a 00 0a 0e 0a 00 12 0d 05 0a 3f 0b 71 .............?.q 00e0: 02 0a 00 0a 0d 0a 00 12 0d 05 0a 32 0b f4 01 0a ...........2.... 00f0: 00 0a 0c 0a 00 12 0d 05 0a 26 0b 77 01 0a 00 0a .........&.w.... 0100: 0b 0a 00 12 0c 05 0a 19 0a fa 0a 00 0a 0a 0a 00 ................ 0110: 12 0c 05 0a 0d 0a 7d 0a 00 0a 09 0a 00 08 54 53 ......}.......TS 0120: 53 4d 12 41 07 08 12 0d 05 0a 64 0b e8 03 0a 00 SM.A......d..... 0130: 0a 00 0a 00 12 0d 05 0a 58 0b 6b 03 0a 00 0a 1e ........X.k..... 0140: 0a 00 12 0d 05 0a 4b 0b ee 02 0a 00 0a 1c 0a 00 ......K......... 0150: 12 0d 05 0a 3f 0b 71 02 0a 00 0a 1a 0a 00 12 0d ....?.q......... 0160: 05 0a 32 0b f4 01 0a 00 0a 18 0a 00 12 0d 05 0a ..2............. 0170: 26 0b 77 01 0a 00 0a 16 0a 00 12 0c 05 0a 19 0a &.w............. 0180: fa 0a 00 0a 14 0a 00 12 0c 05 0a 0d 0a 7d 0a 00 .............}.. 0190: 0a 12 0a 00 08 54 53 53 46 0a 00 14 43 08 5f 54 .....TSSF...C._T 01a0: 53 53 00 a0 47 06 90 92 54 53 53 46 5b 12 5f 50 SS..G...TSSF[._P 01b0: 53 53 00 70 5f 50 53 53 60 70 87 60 61 76 61 70 SS.p_PSS`p.`avap 01c0: 83 88 83 88 60 61 00 0a 01 00 62 70 0a 00 63 a2 ....`a....bp..c. 01d0: 35 95 63 87 54 53 53 49 70 78 77 62 74 0a 08 63 5.c.TSSIpxwbt..c 01e0: 00 00 0a 08 00 00 64 70 64 88 83 88 54 53 53 49 ......dpd...TSSI 01f0: 63 00 0a 01 00 70 64 88 83 88 54 53 53 4d 63 00 c....pd...TSSMc. 0200: 0a 01 00 75 63 70 ff 54 53 53 46 a0 0e 7b 50 44 ...ucp.TSSF..{PD 0210: 43 30 0a 04 00 a4 54 53 53 4d a4 54 53 53 49 14 C0....TSSM.TSSI. 0220: 3f 5f 54 53 44 00 a0 27 90 7b 43 46 47 44 0c 00 ?_TSD..'.{CFGD.. 0230: 00 00 01 00 92 7b 50 44 43 30 0a 04 00 a4 12 0f .....{PDC0...... 0240: 01 12 0c 05 0a 05 0a 00 0a 00 0a fd 0a 02 a4 12 ................ 0250: 0f 01 12 0c 05 0a 05 0a 00 0a 00 0a fc 0a 01 ............... SSDT @ 0xbf6d8d6a 0000: 53 53 44 54 a6 00 00 00 01 6d 50 6d 52 65 66 00 SSDT.....mPmRef. 0010: 43 70 75 31 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu1Tst..0..INTL 0020: 24 06 05 20 10 41 08 5c 2e 5f 50 52 5f 43 50 55 $.. .A.\._PR_CPU 0030: 31 08 5f 54 50 43 0a 00 14 16 5f 50 54 43 00 a4 1._TPC...._PTC.. 0040: 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 54 43 14 \/._PR_CPU0_PTC. 0050: 16 5f 54 53 53 00 a4 5c 2f 03 5f 50 52 5f 43 50 ._TSS..\/._PR_CP 0060: 55 30 5f 54 53 53 14 3f 5f 54 53 44 00 a0 27 90 U0_TSS.?_TSD..'. 0070: 7b 43 46 47 44 0c 00 00 00 01 00 92 7b 50 44 43 {CFGD.......{PDC 0080: 31 0a 04 00 a4 12 0f 01 12 0c 05 0a 05 0a 00 0a 1............... 0090: 00 0a fd 0a 02 a4 12 0f 01 12 0c 05 0a 05 0a 00 ................ 00a0: 0a 01 0a fc 0a 01 ...... SSDT @ 0xbf6d8884 0000: 53 53 44 54 e6 04 00 00 01 df 50 6d 52 65 66 00 SSDT......PmRef. 0010: 43 70 75 50 6d 00 00 00 00 30 00 00 49 4e 54 4c CpuPm....0..INTL 0020: 24 06 05 20 10 45 08 5c 00 08 53 53 44 54 12 43 $.. .E.\..SSDT.C 0030: 05 0c 0d 43 50 55 30 49 53 54 20 00 0c 9e 95 6d ...CPU0IST ....m 0040: bf 0c b4 01 00 00 0d 43 50 55 31 49 53 54 20 00 .......CPU1IST . 0050: 0c 52 97 6d bf 0c c8 00 00 00 0d 43 50 55 30 43 .R.m.......CPU0C 0060: 53 54 20 00 0c 6f 90 6d bf 0c aa 04 00 00 0d 43 ST ..o.m.......C 0070: 50 55 31 43 53 54 20 00 0c 19 95 6d bf 0c 85 00 PU1CST ....m.... 0080: 00 00 08 43 46 47 44 0c f1 69 3f 11 08 5c 50 44 ...CFGD..i?..\PD 0090: 43 30 0c 00 00 00 80 08 5c 50 44 43 31 0c 00 00 C0......\PDC1... 00a0: 00 80 08 5c 53 44 54 4c 0a 00 10 4d 21 5c 2e 5f ...\SDTL...M!\._ 00b0: 50 52 5f 43 50 55 30 08 48 49 30 5f 0a 00 08 48 PR_CPU0.HI0_...H 00c0: 43 30 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a C0_...H._PDC..h. 00d0: 00 52 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 .REVS.h..SIZEp.h 00e0: 60 70 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a `pt`...a[.h.@wa. 00f0: 08 00 54 45 4d 50 08 53 54 53 30 11 07 0a 04 00 ..TEMP.STS0..... 0100: 00 00 00 73 53 54 53 30 54 45 4d 50 62 5f 4f 53 ...sSTS0TEMPb_OS 0110: 43 11 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 C......w@.).G... 0120: 70 58 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 pXq9SREVSSIZEb.I 0130: 19 5f 4f 53 43 04 8a 6b 0a 00 53 54 53 30 8a 6b ._OSC..k..STS0.k 0140: 0a 04 43 41 50 30 8a 68 0a 00 49 49 44 30 8a 68 ..CAP0.h..IID0.h 0150: 0a 04 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 ..IID1.h..IID2.h 0160: 0a 0c 49 49 44 33 08 55 49 44 30 11 13 0a 10 16 ..IID3.UID0..... 0170: a6 77 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a .w@.).G...pXq9S. 0180: 55 49 44 30 0a 00 45 49 44 30 8a 55 49 44 30 0a UID0..EID0.UID0. 0190: 04 45 49 44 31 8a 55 49 44 30 0a 08 45 49 44 32 .EID1.UID0..EID2 01a0: 8a 55 49 44 30 0a 0c 45 49 44 33 a0 32 92 90 90 .UID0..EID3.2... 01b0: 93 49 49 44 30 45 49 44 30 93 49 49 44 31 45 49 .IID0EID0.IID1EI 01c0: 44 31 90 93 49 49 44 32 45 49 44 32 93 49 49 44 D1..IID2EID2.IID 01d0: 33 45 49 44 33 70 0a 06 53 54 53 30 a4 6b a0 0f 3EID3p..STS0.k.. 01e0: 92 93 69 0a 01 70 0a 0a 53 54 53 30 a4 6b 7d 7b ..i..p..STS0.k}{ 01f0: 50 44 43 30 0c ff ff ff 7f 00 43 41 50 30 50 44 PDC0......CAP0PD 0200: 43 30 70 7b 50 44 43 30 0a ff 00 50 43 50 30 a0 C0p{PDC0...PCP0. 0210: 4c 05 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b L.{CFGD....A...{ 0220: 43 46 47 44 0c 00 00 00 01 00 93 7b 50 44 43 30 CFGD.......{PDC0 0230: 0a 09 00 0a 09 92 7b 53 44 54 4c 0a 01 00 7d 53 ......{SDTL...}S 0240: 44 54 4c 0a 01 53 44 54 4c 5b 80 49 53 54 30 00 DTL..SDTL[.IST0. 0250: 83 88 53 53 44 54 0a 01 00 83 88 53 53 44 54 0a ..SSDT.....SSDT. 0260: 02 00 5b 20 49 53 54 30 48 49 30 5f a0 49 05 7b ..[ IST0HI0_.I.{ 0270: 43 46 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 CFGD....N...{CFG 0280: 44 0c 00 00 00 01 00 7b 50 44 43 30 0a 18 00 92 D......{PDC0.... 0290: 7b 53 44 54 4c 0a 02 00 7d 53 44 54 4c 0a 02 53 {SDTL...}SDTL..S 02a0: 44 54 4c 5b 80 43 53 54 30 00 83 88 53 53 44 54 DTL[.CST0...SSDT 02b0: 0a 07 00 83 88 53 53 44 54 0a 08 00 5b 20 43 53 .....SSDT...[ CS 02c0: 54 30 48 43 30 5f a4 6b 10 4d 21 5c 2e 5f 50 52 T0HC0_.k.M!\._PR 02d0: 5f 43 50 55 31 08 48 49 31 5f 0a 00 08 48 43 31 _CPU1.HI1_...HC1 02e0: 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a 00 52 _...H._PDC..h..R 02f0: 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 60 70 EVS.h..SIZEp.h`p 0300: 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a 08 00 t`...a[.h.@wa... 0310: 54 45 4d 50 08 53 54 53 31 11 07 0a 04 00 00 00 TEMP.STS1....... 0320: 00 73 53 54 53 31 54 45 4d 50 62 5f 4f 53 43 11 .sSTS1TEMPb_OSC. 0330: 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 70 58 .....w@.).G...pX 0340: 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 19 5f q9SREVSSIZEb.I._ 0350: 4f 53 43 04 8a 6b 0a 00 53 54 53 31 8a 6b 0a 04 OSC..k..STS1.k.. 0360: 43 41 50 31 8a 68 0a 00 49 49 44 30 8a 68 0a 04 CAP1.h..IID0.h.. 0370: 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 0a 0c IID1.h..IID2.h.. 0380: 49 49 44 33 08 55 49 44 31 11 13 0a 10 16 a6 77 IID3.UID1......w 0390: 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a 55 49 @.).G...pXq9S.UI 03a0: 44 31 0a 00 45 49 44 30 8a 55 49 44 31 0a 04 45 D1..EID0.UID1..E 03b0: 49 44 31 8a 55 49 44 31 0a 08 45 49 44 32 8a 55 ID1.UID1..EID2.U 03c0: 49 44 31 0a 0c 45 49 44 33 a0 32 92 90 90 93 49 ID1..EID3.2....I 03d0: 49 44 30 45 49 44 30 93 49 49 44 31 45 49 44 31 ID0EID0.IID1EID1 03e0: 90 93 49 49 44 32 45 49 44 32 93 49 49 44 33 45 ..IID2EID2.IID3E 03f0: 49 44 33 70 0a 06 53 54 53 31 a4 6b a0 0f 92 93 ID3p..STS1.k.... 0400: 69 0a 01 70 0a 0a 53 54 53 31 a4 6b 7d 7b 50 44 i..p..STS1.k}{PD 0410: 43 31 0c ff ff ff 7f 00 43 41 50 31 50 44 43 31 C1......CAP1PDC1 0420: 70 7b 50 44 43 31 0a ff 00 50 43 50 31 a0 4c 05 p{PDC1...PCP1.L. 0430: 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b 43 46 {CFGD....A...{CF 0440: 47 44 0c 00 00 00 01 00 93 7b 50 44 43 31 0a 09 GD.......{PDC1.. 0450: 00 0a 09 92 7b 53 44 54 4c 0a 10 00 7d 53 44 54 ....{SDTL...}SDT 0460: 4c 0a 10 53 44 54 4c 5b 80 49 53 54 31 00 83 88 L..SDTL[.IST1... 0470: 53 53 44 54 0a 04 00 83 88 53 53 44 54 0a 05 00 SSDT.....SSDT... 0480: 5b 20 49 53 54 31 48 49 31 5f a0 49 05 7b 43 46 [ IST1HI1_.I.{CF 0490: 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 44 0c GD....N...{CFGD. 04a0: 00 00 00 01 00 7b 50 44 43 31 0a 18 00 92 7b 53 .....{PDC1....{S 04b0: 44 54 4c 0a 20 00 7d 53 44 54 4c 0a 20 53 44 54 DTL. .}SDTL. SDT 04c0: 4c 5b 80 43 53 54 31 00 83 88 53 53 44 54 0a 0a L[.CST1...SSDT.. 04d0: 00 83 88 53 53 44 54 0a 0b 00 5b 20 43 53 54 31 ...SSDT...[ CST1 04e0: 48 43 31 5f a4 6b HC1_.k XSDT @ 0xbf6d87f0 0000: 58 53 44 54 94 00 00 00 01 c2 4c 45 4e 4f 56 4f XSDT......LENOVO 0010: 54 50 2d 36 38 20 20 20 00 00 04 06 20 4c 54 50 TP-68 .... LTP 0020: 00 00 00 00 d2 fb 6d bf 00 00 00 00 c6 fc 6d bf ......m.......m. 0030: 00 00 00 00 2e fd 6d bf 00 00 00 00 66 fd 6d bf ......m.....f.m. 0040: 00 00 00 00 a2 fd 6d bf 00 00 00 00 d4 fd 6d bf ......m.......m. 0050: 00 00 00 00 fa fd 6d bf 00 00 00 00 70 ff 6d bf ......m.....p.m. 0060: 00 00 00 00 d8 ff 6d bf 00 00 00 00 bd 98 6d bf ......m.......m. 0070: 00 00 00 00 1a 98 6d bf 00 00 00 00 10 8e 6d bf ......m.......m. 0080: 00 00 00 00 6a 8d 6d bf 00 00 00 00 84 88 6d bf ....j.m.......m. 0090: 00 00 00 00 .... RSD PTR @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... fwts-test/checksum-0001/acpidump-0004.log000066400000000000000000004054211465205512700201010ustar00rootroot00000000000000DSDT @ 0xbf6d9b6a 0000: 44 53 44 54 f4 5f 00 00 02 11 54 4f 53 43 50 4c DSDT._....TOSCPL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 49 4e 54 4c CRESTLNE....INTL 0020: 08 06 06 20 08 5a 30 30 30 01 08 5a 30 30 31 0a ... .Z000..Z001. 0030: 02 08 5a 30 30 32 0a 04 08 5a 30 30 33 0a 08 08 ..Z002...Z003... 0040: 5a 30 30 34 00 08 5a 30 30 35 0a 0f 08 5a 30 30 Z004..Z005...Z00 0050: 36 0a 0d 08 5a 30 30 37 0a 0b 08 5a 30 30 38 0a 6...Z007...Z008. 0060: 09 08 45 43 44 59 0a 07 5b 01 4d 55 54 58 00 5b ..ECDY..[.MUTX.[ 0070: 80 50 52 54 30 01 0a 80 0a 04 5b 81 0b 50 52 54 .PRT0.....[..PRT 0080: 30 13 50 38 30 48 20 14 4e 07 50 38 58 48 0a a0 0.P80H .N.P8XH.. 0090: 17 93 68 00 70 7d 7b 50 38 30 44 0c 00 ff ff ff ..h.p}{P80D..... 00a0: 00 69 00 50 38 30 44 a0 1b 93 68 01 70 7d 7b 50 .i.P80D...h.p}{P 00b0: 38 30 44 0c ff 00 ff ff 00 79 69 0a 08 00 00 50 80D......yi....P 00c0: 38 30 44 a0 1c 93 68 0a 02 70 7d 7b 50 38 30 44 80D...h..p}{P80D 00d0: 0c ff ff 00 ff 00 79 69 0a 10 00 00 50 38 30 44 ......yi....P80D 00e0: a0 1c 93 68 0a 03 70 7d 7b 50 38 30 44 0c ff ff ...h..p}{P80D... 00f0: ff 00 00 79 69 0a 18 00 00 50 38 30 44 70 50 38 ...yi....P80DpP8 0100: 30 44 50 38 30 48 14 0c 5f 50 49 43 01 70 68 47 0DP80H.._PIC.phG 0110: 50 49 43 14 46 06 5f 50 54 53 01 70 00 50 38 30 PIC.F._PTS.p.P80 0120: 44 50 38 58 48 00 68 a0 1e 93 68 0a 03 70 01 5c DP8XH.h...h..p.\ 0130: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0140: 30 5f 53 33 4c 44 a0 33 93 68 0a 04 70 01 5c 2f 0_S3LD.3.h..p.\/ 0150: 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 ._SB_PCI0LPCBEC0 0160: 5f 53 33 4c 44 5c 2f 04 5f 53 42 5f 50 43 49 30 _S3LD\/._SB_PCI0 0170: 4c 50 43 42 50 48 53 53 0a 0e 14 4c 1c 5f 57 41 LPCBPHSS...L._WA 0180: 4b 01 50 38 58 48 01 0a ab a0 30 91 93 68 0a 03 K.P8XH....0..h.. 0190: 93 68 0a 04 a0 25 7b 43 46 47 44 0c 00 00 00 01 .h...%{CFGD..... 01a0: 00 a0 18 90 7b 43 46 47 44 0a f0 00 93 4f 53 59 ....{CFGD....OSY 01b0: 53 0b d1 07 54 52 41 50 0a 3d a0 18 93 52 50 31 S...TRAP.=...RP1 01c0: 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 D..\/._SB_PCI0RP 01d0: 30 31 00 a0 18 93 52 50 32 44 00 86 5c 2f 03 5f 01....RP2D..\/._ 01e0: 53 42 5f 50 43 49 30 52 50 30 32 00 a0 18 93 52 SB_PCI0RP02....R 01f0: 50 33 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 P3D..\/._SB_PCI0 0200: 52 50 30 33 00 a0 18 93 52 50 34 44 00 86 5c 2f RP03....RP4D..\/ 0210: 03 5f 53 42 5f 50 43 49 30 52 50 30 34 00 a0 18 ._SB_PCI0RP04... 0220: 93 52 50 35 44 00 86 5c 2f 03 5f 53 42 5f 50 43 .RP5D..\/._SB_PC 0230: 49 30 52 50 30 35 00 a0 18 93 52 50 36 44 00 86 I0RP05....RP6D.. 0240: 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 36 00 \/._SB_PCI0RP06. 0250: a0 12 93 68 0a 03 50 38 58 48 00 0a 30 54 52 41 ...h..P8XH..0TRA 0260: 50 0a 46 a0 43 0d 93 68 0a 04 50 38 58 48 00 0a P.F.C..h..P8XH.. 0270: 40 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 @\/._SB_PCI0LPCB 0280: 50 48 53 53 0a 0f 70 57 41 4b 46 60 70 00 57 41 PHSS..pWAKF`p.WA 0290: 4b 46 7b 60 0a 05 60 a0 18 93 60 01 50 38 58 48 KF{`..`...`.P8XH 02a0: 00 0a 41 86 5c 2e 5f 53 42 5f 50 57 52 42 0a 02 ..A.\._SB_PWRB.. 02b0: a0 46 08 44 54 53 45 54 52 41 50 0a 47 a0 42 06 .F.DTSETRAP.G.B. 02c0: 90 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 .\/._SB_PCI0LPCB 02d0: 45 43 4f 4b 93 45 43 44 59 00 a0 27 92 95 44 54 ECOK.ECDY..'..DT 02e0: 53 31 44 54 53 32 70 44 54 53 31 5c 2f 05 5f 53 S1DTS2pDTS1\/._S 02f0: 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b B_PCI0LPCBEC0_SK 0300: 54 41 a1 1d 70 44 54 53 32 5c 2f 05 5f 53 42 5f TA..pDTS2\/._SB_ 0310: 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 PCI0LPCBEC0_SKTA 0320: a1 16 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 0330: 42 50 48 53 53 0a 10 5c 2e 5f 50 52 5f 52 50 50 BPHSS..\._PR_RPP 0340: 43 a4 12 04 02 00 00 14 1e 47 45 54 42 0b 77 68 C........GETB.wh 0350: 0a 08 60 77 69 0a 08 61 5b 13 6a 60 61 54 42 46 ..`wi..a[.j`aTBF 0360: 33 a4 54 42 46 33 14 42 09 50 4e 4f 54 08 a0 4a 3.TBF3.B.PNOT..J 0370: 06 4d 50 45 4e a0 31 7b 50 44 43 30 0a 08 00 86 .MPEN.1{PDC0.... 0380: 5c 2e 5f 50 52 5f 43 50 55 30 0a 80 a0 1a 7b 50 \._PR_CPU0....{P 0390: 44 43 30 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC0...[".d.\._PR 03a0: 5f 43 50 55 30 0a 81 a0 31 7b 50 44 43 31 0a 08 _CPU0...1{PDC1.. 03b0: 00 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 a0 1a ..\._PR_CPU1.... 03c0: 7b 50 44 43 31 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC1...[".d.\._ 03d0: 50 52 5f 43 50 55 31 0a 81 a1 1f 86 5c 2e 5f 50 PR_CPU1.....\._P 03e0: 52 5f 43 50 55 30 0a 80 5b 22 0a 64 86 5c 2e 5f R_CPU0..[".d.\._ 03f0: 50 52 5f 43 50 55 30 0a 81 14 17 54 52 41 50 09 PR_CPU0....TRAP. 0400: 70 68 53 4d 49 46 70 00 54 52 50 30 a4 53 4d 49 phSMIFp.TRP0.SMI 0410: 46 10 41 0f 5f 53 42 5f 14 4a 0e 5f 49 4e 49 00 F.A._SB_.J._INI. 0420: 70 0b 99 99 4d 41 52 4b a0 1c 44 54 53 45 54 52 p...MARK..DTSETR 0430: 41 50 0a 47 5e 2f 03 50 43 49 30 4c 50 43 42 50 AP.G^/.PCI0LPCBP 0440: 48 53 53 0a 10 70 0b d0 07 4f 53 59 53 a0 4a 09 HSS..p...OSYS.J. 0450: 5b 12 5f 4f 53 49 60 a0 18 5f 4f 53 49 0d 4c 69 [._OSI`.._OSI.Li 0460: 6e 75 78 00 70 01 4c 49 4e 58 70 00 45 43 44 59 nux.p.LINXp.ECDY 0470: a0 1b 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 .._OSI.Windows 2 0480: 30 30 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 001.p...OSYS.._O 0490: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04a0: 53 50 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f SP1.p...OSYS.._O 04b0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04c0: 53 50 32 00 70 0b d2 07 4f 53 59 53 a0 1b 5f 4f SP2.p...OSYS.._O 04d0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 00 SI.Windows 2006. 04e0: 70 0b d6 07 4f 53 59 53 a0 14 90 4d 50 45 4e 93 p...OSYS...MPEN. 04f0: 4f 53 59 53 0b d1 07 54 52 41 50 0a 3d 54 52 41 OSYS...TRAP.=TRA 0500: 50 0a 2b 5b 80 47 4e 56 53 00 0c bc 2d 6e bf 0b P.+[.GNVS...-n.. 0510: 00 01 5b 81 45 24 47 4e 56 53 10 4f 53 59 53 10 ..[.E$GNVS.OSYS. 0520: 53 4d 49 46 08 50 52 4d 30 08 50 52 4d 31 08 53 SMIF.PRM0.PRM1.S 0530: 43 49 46 08 50 52 4d 32 08 50 52 4d 33 08 4c 43 CIF.PRM2.PRM3.LC 0540: 4b 46 08 50 52 4d 34 08 50 52 4d 35 08 50 38 30 KF.PRM4.PRM5.P80 0550: 44 20 4c 49 44 53 08 50 57 52 53 08 44 42 47 53 D LIDS.PWRS.DBGS 0560: 08 4c 49 4e 58 08 00 08 41 43 54 31 08 41 43 54 .LINX...ACT1.ACT 0570: 54 08 50 53 56 54 08 54 43 31 56 08 54 43 32 56 T.PSVT.TC1V.TC2V 0580: 08 54 53 50 56 08 43 52 54 54 08 44 54 53 45 08 .TSPV.CRTT.DTSE. 0590: 44 54 53 31 08 44 54 53 32 08 00 40 05 41 50 49 DTS1.DTS2..@.API 05a0: 43 08 4d 50 45 4e 08 50 43 50 30 08 50 43 50 31 C.MPEN.PCP0.PCP1 05b0: 08 50 50 43 4d 08 00 28 43 4d 41 50 08 43 4d 42 .PPCM..(CMAP.CMB 05c0: 50 08 4c 50 54 50 08 46 44 43 50 08 00 30 49 47 P.LPTP.FDCP..0IG 05d0: 44 53 08 54 4c 53 54 08 43 41 44 4c 08 50 41 44 DS.TLST.CADL.PAD 05e0: 4c 08 43 53 54 45 10 4e 53 54 45 10 53 53 54 45 L.CSTE.NSTE.SSTE 05f0: 10 4e 44 49 44 08 44 49 44 31 20 44 49 44 32 20 .NDID.DID1 DID2 0600: 44 49 44 33 20 44 49 44 34 20 44 49 44 35 20 00 DID3 DID4 DID5 . 0610: 40 06 42 4c 43 53 08 42 52 54 4c 08 41 4c 53 45 @.BLCS.BRTL.ALSE 0620: 08 41 4c 41 46 08 4c 4c 4f 57 08 4c 48 49 48 08 .ALAF.LLOW.LHIH. 0630: 00 08 45 4d 41 45 08 45 4d 41 50 10 45 4d 41 4c ..EMAE.EMAP.EMAL 0640: 10 00 08 4d 45 46 45 08 00 18 54 50 4d 50 08 54 ...MEFE...TPMP.T 0650: 50 4d 45 08 00 40 04 47 54 46 30 38 47 54 46 32 PME..@.GTF08GTF2 0660: 38 49 44 45 4d 08 47 54 46 31 38 00 40 09 41 53 8IDEM.GTF18.@.AS 0670: 4c 42 20 49 42 54 54 08 49 50 41 54 08 49 54 56 LB IBTT.IPAT.ITV 0680: 46 08 49 54 56 4d 08 49 50 53 43 08 49 42 4c 43 F.ITVM.IPSC.IBLC 0690: 08 49 42 49 41 08 49 53 53 43 08 49 34 30 39 08 .IBIA.ISSC.I409. 06a0: 49 35 30 39 08 49 36 30 39 08 49 37 30 39 08 49 I509.I609.I709.I 06b0: 44 4d 4d 08 49 44 4d 53 08 49 46 31 45 08 48 56 DMM.IDMS.IF1E.HV 06c0: 43 4f 08 4e 58 44 31 20 4e 58 44 32 20 4d 41 52 CO.NXD1 NXD2 MAR 06d0: 4b 10 42 52 41 44 08 42 54 45 4e 08 56 56 45 4e K.BRAD.BTEN.VVEN 06e0: 08 42 47 54 4c 08 54 4d 45 45 01 00 07 53 43 55 .BGTL.TMEE...SCU 06f0: 30 01 53 43 55 31 01 53 43 55 32 01 53 43 55 33 0.SCU1.SCU2.SCU3 0700: 01 00 04 58 4b 53 50 01 58 4b 49 4e 01 58 4b 49 ...XKSP.XKIN.XKI 0710: 44 01 58 4b 4f 4b 01 00 04 42 47 55 31 08 42 53 D.XKOK...BGU1.BS 0720: 54 31 08 42 46 43 31 10 57 4b 4c 4e 08 57 41 4b T1.BFC1.WKLN.WAK 0730: 46 08 44 53 4d 44 08 42 41 59 53 08 48 41 50 45 F.DSMD.BAYS.HAPE 0740: 01 00 07 44 54 53 4d 01 00 07 4f 44 54 31 08 4f ...DTSM...ODT1.O 0750: 44 54 32 08 44 54 53 57 08 08 44 53 45 4e 01 08 DT2.DTSW..DSEN.. 0760: 45 43 4f 4e 00 08 47 50 49 43 00 08 43 54 59 50 ECON..GPIC..CTYP 0770: 00 08 4c 30 31 43 00 08 56 46 4e 30 00 08 56 46 ..L01C..VFN0..VF 0780: 4e 31 00 10 4a 7c 5f 47 50 45 14 46 35 5f 4c 30 N1..J|_GPE.F5_L0 0790: 31 00 72 4c 30 31 43 01 4c 30 31 43 50 38 58 48 1.rL01C.L01CP8XH 07a0: 00 01 50 38 58 48 01 4c 30 31 43 a0 48 08 90 93 ..P8XH.L01C.H... 07b0: 52 50 31 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 RP1D.\/._SB_PCI0 07c0: 52 50 30 31 48 50 53 58 5b 22 0a 64 a0 40 05 5c RP01HPSX[".d.@.\ 07d0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 /._SB_PCI0RP01PD 07e0: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 07f0: 50 30 31 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f P01PDCXp.\/._SB_ 0800: 50 43 49 30 52 50 30 31 48 50 53 58 86 5c 2f 03 PCI0RP01HPSX.\/. 0810: 5f 53 42 5f 50 43 49 30 52 50 30 31 00 a1 16 70 _SB_PCI0RP01...p 0820: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0830: 48 50 53 58 a0 48 08 90 93 52 50 32 44 00 5c 2f HPSX.H...RP2D.\/ 0840: 04 5f 53 42 5f 50 43 49 30 52 50 30 32 48 50 53 ._SB_PCI0RP02HPS 0850: 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 5f 50 X[".d.@.\/._SB_P 0860: 43 49 30 52 50 30 32 50 44 43 58 70 01 5c 2f 04 CI0RP02PDCXp.\/. 0870: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 44 43 58 _SB_PCI0RP02PDCX 0880: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 0890: 32 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 2HPSX.\/._SB_PCI 08a0: 30 52 50 30 32 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP02...p.\/._SB 08b0: 5f 50 43 49 30 52 50 30 32 48 50 53 58 a0 48 08 _PCI0RP02HPSX.H. 08c0: 90 93 52 50 33 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP3D.\/._SB_PC 08d0: 49 30 52 50 30 33 48 50 53 58 5b 22 0a 64 a0 40 I0RP03HPSX[".d.@ 08e0: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 .\/._SB_PCI0RP03 08f0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0900: 30 52 50 30 33 50 44 43 58 70 01 5c 2f 04 5f 53 0RP03PDCXp.\/._S 0910: 42 5f 50 43 49 30 52 50 30 33 48 50 53 58 86 5c B_PCI0RP03HPSX.\ 0920: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 33 00 a1 /._SB_PCI0RP03.. 0930: 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .p.\/._SB_PCI0RP 0940: 30 33 48 50 53 58 a0 48 08 90 93 52 50 34 44 00 03HPSX.H...RP4D. 0950: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 48 \/._SB_PCI0RP04H 0960: 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 PSX[".d.@.\/._SB 0970: 5f 50 43 49 30 52 50 30 34 50 44 43 58 70 01 5c _PCI0RP04PDCXp.\ 0980: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 44 /._SB_PCI0RP04PD 0990: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 09a0: 50 30 34 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 P04HPSX.\/._SB_P 09b0: 43 49 30 52 50 30 34 00 a1 16 70 01 5c 2f 04 5f CI0RP04...p.\/._ 09c0: 53 42 5f 50 43 49 30 52 50 30 34 48 50 53 58 a0 SB_PCI0RP04HPSX. 09d0: 48 08 90 93 52 50 35 44 00 5c 2f 04 5f 53 42 5f H...RP5D.\/._SB_ 09e0: 50 43 49 30 52 50 30 35 48 50 53 58 5b 22 0a 64 PCI0RP05HPSX[".d 09f0: a0 40 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .@.\/._SB_PCI0RP 0a00: 30 35 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 05PDCXp.\/._SB_P 0a10: 43 49 30 52 50 30 35 50 44 43 58 70 01 5c 2f 04 CI0RP05PDCXp.\/. 0a20: 5f 53 42 5f 50 43 49 30 52 50 30 35 48 50 53 58 _SB_PCI0RP05HPSX 0a30: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 35 .\/._SB_PCI0RP05 0a40: 00 a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ...p.\/._SB_PCI0 0a50: 52 50 30 35 48 50 53 58 a0 48 08 90 93 52 50 36 RP05HPSX.H...RP6 0a60: 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 D.\/._SB_PCI0RP0 0a70: 36 48 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 6HPSX[".d.@.\/._ 0a80: 53 42 5f 50 43 49 30 52 50 30 36 50 44 43 58 70 SB_PCI0RP06PDCXp 0a90: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 0aa0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0ab0: 30 52 50 30 36 48 50 53 58 86 5c 2f 03 5f 53 42 0RP06HPSX.\/._SB 0ac0: 5f 50 43 49 30 52 50 30 36 00 a1 16 70 01 5c 2f _PCI0RP06...p.\/ 0ad0: 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 50 53 ._SB_PCI0RP06HPS 0ae0: 58 14 42 0d 5f 4c 30 32 00 70 00 47 50 45 43 a0 X.B._L02.p.GPEC. 0af0: 4d 0a 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 M.\/._SB_PCI0LPC 0b00: 42 45 43 4f 4b a0 4e 04 93 44 54 53 57 01 a0 27 BECOK.N..DTSW..' 0b10: 92 95 44 54 53 31 44 54 53 32 70 44 54 53 31 5c ..DTS1DTS2pDTS1\ 0b20: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0b30: 30 5f 53 4b 54 41 a1 1d 70 44 54 53 32 5c 2f 05 0_SKTA..pDTS2\/. 0b40: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f _SB_PCI0LPCBEC0_ 0b50: 53 4b 54 41 a1 48 04 a0 27 92 95 4f 44 54 31 4f SKTA.H..'..ODT1O 0b60: 44 54 32 70 4f 44 54 31 5c 2f 05 5f 53 42 5f 50 DT2pODT1\/._SB_P 0b70: 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 CI0LPCBEC0_SKTA. 0b80: 1d 70 4f 44 54 32 5c 2f 05 5f 53 42 5f 50 43 49 .pODT2\/._SB_PCI 0b90: 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 16 5c 0LPCBEC0_SKTA..\ 0ba0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 50 48 /._SB_PCI0LPCBPH 0bb0: 53 53 0a 10 14 18 5f 4c 30 33 00 86 5c 2f 03 5f SS...._L03..\/._ 0bc0: 53 42 5f 50 43 49 30 55 53 42 31 0a 02 14 18 5f SB_PCI0USB1...._ 0bd0: 4c 30 34 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 L04..\/._SB_PCI0 0be0: 55 53 42 32 0a 02 14 18 5f 4c 30 35 00 86 5c 2f USB2...._L05..\/ 0bf0: 03 5f 53 42 5f 50 43 49 30 55 53 42 35 0a 02 14 ._SB_PCI0USB5... 0c00: 36 5f 4c 30 36 00 a0 27 5c 2f 04 5f 53 42 5f 50 6_L06..'\/._SB_P 0c10: 43 49 30 47 46 58 30 47 53 53 45 5c 2f 04 5f 53 CI0GFX0GSSE\/._S 0c20: 42 5f 50 43 49 30 47 46 58 30 47 53 43 49 a1 07 B_PCI0GFX0GSCI.. 0c30: 70 01 53 43 49 53 14 43 1f 5f 4c 30 39 00 a0 41 p.SCIS.C._L09..A 0c40: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0c50: 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PSPXp.\/._SB_PCI 0c60: 30 52 50 30 31 50 53 50 58 70 01 5c 2f 04 5f 53 0RP01PSPXp.\/._S 0c70: 42 5f 50 43 49 30 52 50 30 31 50 4d 53 58 86 5c B_PCI0RP01PMSX.\ 0c80: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 31 0a 02 /._SB_PCI0RP01.. 0c90: a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .A.\/._SB_PCI0RP 0ca0: 30 32 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 02PSPXp.\/._SB_P 0cb0: 43 49 30 52 50 30 32 50 53 50 58 70 01 5c 2f 04 CI0RP02PSPXp.\/. 0cc0: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 4d 53 58 _SB_PCI0RP02PMSX 0cd0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 0ce0: 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 ...A.\/._SB_PCI0 0cf0: 52 50 30 33 50 53 50 58 70 01 5c 2f 04 5f 53 42 RP03PSPXp.\/._SB 0d00: 5f 50 43 49 30 52 50 30 33 50 53 50 58 70 01 5c _PCI0RP03PSPXp.\ 0d10: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 50 4d /._SB_PCI0RP03PM 0d20: 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 SX.\/._SB_PCI0RP 0d30: 30 33 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 03...A.\/._SB_PC 0d40: 49 30 52 50 30 34 50 53 50 58 70 01 5c 2f 04 5f I0RP04PSPXp.\/._ 0d50: 53 42 5f 50 43 49 30 52 50 30 34 50 53 50 58 70 SB_PCI0RP04PSPXp 0d60: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 .\/._SB_PCI0RP04 0d70: 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 PMSX.\/._SB_PCI0 0d80: 52 50 30 34 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f RP04...A.\/._SB_ 0d90: 50 43 49 30 52 50 30 35 50 53 50 58 70 01 5c 2f PCI0RP05PSPXp.\/ 0da0: 04 5f 53 42 5f 50 43 49 30 52 50 30 35 50 53 50 ._SB_PCI0RP05PSP 0db0: 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 Xp.\/._SB_PCI0RP 0dc0: 30 35 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 05PMSX.\/._SB_PC 0dd0: 49 30 52 50 30 35 0a 02 a0 41 05 5c 2f 04 5f 53 I0RP05...A.\/._S 0de0: 42 5f 50 43 49 30 52 50 30 36 50 53 50 58 70 01 B_PCI0RP06PSPXp. 0df0: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 50 \/._SB_PCI0RP06P 0e00: 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 SPXp.\/._SB_PCI0 0e10: 52 50 30 36 50 4d 53 58 86 5c 2f 03 5f 53 42 5f RP06PMSX.\/._SB_ 0e20: 50 43 49 30 52 50 30 36 0a 02 14 18 5f 4c 30 42 PCI0RP06...._L0B 0e30: 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 50 43 49 ..\/._SB_PCI0PCI 0e40: 42 0a 02 14 18 5f 4c 30 43 00 86 5c 2f 03 5f 53 B...._L0C..\/._S 0e50: 42 5f 50 43 49 30 55 53 42 33 0a 02 14 4b 0b 5f B_PCI0USB3...K._ 0e60: 4c 30 44 00 a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 L0D..;\/._SB_PCI 0e70: 30 45 48 43 31 50 4d 45 53 70 01 5c 2f 04 5f 53 0EHC1PMESp.\/._S 0e80: 42 5f 50 43 49 30 45 48 43 31 50 4d 45 53 86 5c B_PCI0EHC1PMES.\ 0e90: 2f 03 5f 53 42 5f 50 43 49 30 45 48 43 31 0a 02 /._SB_PCI0EHC1.. 0ea0: a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 30 45 48 43 .;\/._SB_PCI0EHC 0eb0: 32 50 4d 45 53 70 01 5c 2f 04 5f 53 42 5f 50 43 2PMESp.\/._SB_PC 0ec0: 49 30 45 48 43 32 50 4d 45 53 86 5c 2f 03 5f 53 I0EHC2PMES.\/._S 0ed0: 42 5f 50 43 49 30 45 48 43 32 0a 02 a0 3b 5c 2f B_PCI0EHC2...;\/ 0ee0: 04 5f 53 42 5f 50 43 49 30 48 44 45 46 50 4d 45 ._SB_PCI0HDEFPME 0ef0: 53 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 48 44 Sp.\/._SB_PCI0HD 0f00: 45 46 50 4d 45 53 86 5c 2f 03 5f 53 42 5f 50 43 EFPMES.\/._SB_PC 0f10: 49 30 48 44 45 46 0a 02 14 18 5f 4c 30 45 00 86 I0HDEF...._L0E.. 0f20: 5c 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 34 0a \/._SB_PCI0USB4. 0f30: 02 14 1c 5f 4c 31 42 00 80 4c 50 4f 4c 4c 50 4f ..._L1B..LPOLLPO 0f40: 4c 86 5c 2e 5f 53 42 5f 4c 49 44 30 0a 80 10 46 L.\._SB_LID0...F 0f50: 0b 5f 50 52 5f 5b 83 0b 43 50 55 30 00 10 10 00 ._PR_[..CPU0.... 0f60: 00 06 5b 83 0b 43 50 55 31 01 10 10 00 00 06 14 ..[..CPU1....... 0f70: 45 09 52 50 50 43 00 a0 4d 08 93 4f 53 59 53 0b E.RPPC..M..OSYS. 0f80: d2 07 a0 42 08 7b 43 46 47 44 01 00 a0 42 04 94 ...B.{CFGD...B.. 0f90: 5e 2e 43 50 55 30 5f 50 50 43 00 74 5e 2e 43 50 ^.CPU0_PPC.t^.CP 0fa0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 0fb0: 43 50 4e 4f 54 72 5e 2e 43 50 55 30 5f 50 50 43 CPNOTr^.CPU0_PPC 0fc0: 01 5e 2e 43 50 55 30 5f 50 50 43 50 4e 4f 54 a1 .^.CPU0_PPCPNOT. 0fd0: 35 72 5e 2e 43 50 55 30 5f 50 50 43 01 5e 2e 43 5r^.CPU0_PPC.^.C 0fe0: 50 55 30 5f 50 50 43 50 4e 4f 54 74 5e 2e 43 50 PU0_PPCPNOTt^.CP 0ff0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 1000: 43 50 4e 4f 54 08 46 57 53 4f 0d 46 57 53 4f 00 CPNOT.FWSO.FWSO. 1010: 08 5f 50 53 43 00 14 12 5f 50 53 30 00 70 5f 50 ._PSC..._PS0.p_P 1020: 53 43 60 70 00 5f 50 53 43 14 0d 5f 50 53 33 00 SC`p._PSC.._PS3. 1030: 70 0a 03 5f 50 53 43 10 8c fb 04 5f 53 42 5f 5b p.._PSC...._SB_[ 1040: 82 4f 3e 41 4d 57 30 08 5f 48 49 44 0d 70 6e 70 .O>AMW0._HID.pnp 1050: 30 63 31 34 00 08 5f 55 49 44 00 08 5f 57 44 47 0c14.._UID.._WDG 1060: 11 3f 0a 3c a7 1d 85 2e 53 d0 5f 49 9d fa 1a 4a .?.<....S._I...J 1070: d6 2e 6a 86 41 43 01 00 3b 6d 43 71 dd fb 72 4c ..j.AC..;mCq..rL 1080: bc b8 43 5b fe 0d 64 f9 42 43 01 00 21 12 90 05 ..C[..d.BC..!... 1090: 66 d5 d1 11 b2 f0 00 a0 c9 06 29 10 42 41 01 00 f.........).BA.. 10a0: 08 53 54 41 43 11 07 0a 04 01 14 03 00 14 1f 57 .STAC..........W 10b0: 51 41 43 01 70 0d 4d 58 4d 54 43 43 6f 6e 66 69 QAC.p.MXMTCConfi 10c0: 67 44 61 74 61 00 5b 31 a4 53 54 41 43 08 53 54 gData.[1.STAC.ST 10d0: 42 43 11 07 0a 04 01 00 00 00 14 34 57 51 42 43 BC.........4WQBC 10e0: 01 70 0d 47 65 74 20 4d 58 4d 54 43 43 6f 6e 74 .p.Get MXMTCCont 10f0: 72 6f 6c 44 61 74 61 3a 20 53 54 42 43 20 3d 20 rolData: STBC = 1100: 00 5b 31 70 53 54 42 43 5b 31 a4 53 54 42 43 14 .[1pSTBC[1.STBC. 1110: 47 06 57 53 42 43 02 70 69 53 54 42 43 70 0d 53 G.WSBC.piSTBCp.S 1120: 65 74 20 4d 58 4d 54 43 43 6f 6e 74 72 6f 6c 44 et MXMTCControlD 1130: 61 74 61 3a 20 53 54 42 43 20 3d 20 00 5b 31 70 ata: STBC = .[1p 1140: 53 54 42 43 5b 31 a0 30 93 5e 5e 2f 03 50 43 49 STBC[1.0.^^/.PCI 1150: 30 4c 50 43 42 45 43 4f 4b 01 70 83 88 53 54 42 0LPCBECOK.p..STB 1160: 43 01 00 5e 5e 2f 04 50 43 49 30 4c 50 43 42 45 C..^^/.PCI0LPCBE 1170: 43 30 5f 53 4b 54 43 08 57 51 42 41 11 43 2b 0b C0_SKTC.WQBA.C+. 1180: ae 02 46 4f 4d 42 01 00 00 00 9e 02 00 00 c0 0b ..FOMB.......... 1190: 00 00 44 53 00 01 1a 7d da 54 28 d9 85 00 01 06 ..DS...}.T(..... 11a0: 18 42 10 07 10 0a 4b 61 02 c9 21 52 3c 18 94 05 .B....Ka..!R<... 11b0: 10 43 88 57 04 44 04 84 bc 0a b0 29 c0 24 88 fa .C.W.D.....).$.. 11c0: f7 87 28 09 0e 25 04 42 12 05 98 17 a0 5b 80 61 ..(..%.B.....[.a 11d0: 01 b6 05 98 16 e0 18 92 4a 03 a7 04 96 02 21 a1 ........J.....!. 11e0: 02 94 0b f0 2d 40 3b a2 24 0b b0 0c 23 02 8f 82 ....-@;.$...#... 11f0: a1 71 68 ec 30 2c 13 4c 83 38 8c b2 91 45 60 dc .qh.0,.L.8...E`. 1200: 4e 05 c8 15 20 4c 80 78 54 61 34 07 45 e0 42 63 N... L.xTa4.E.Bc 1210: 64 40 c8 a3 00 ab a3 d0 a4 12 d8 bd 00 65 02 2c d@...........e., 1220: 0a 10 27 c0 9a 00 63 48 32 28 40 9b 00 5b 20 42 ..'...cH2(@..[ B 1230: 0f d4 19 8a 46 70 02 51 6a 46 11 48 ac 1a 01 85 ....Fp.QjF.H.... 1240: 12 34 46 b0 10 81 c2 86 37 46 98 03 88 d1 fe 20 .4F.....7F..... 1250: 48 20 05 e3 66 91 46 83 1a 6b 82 63 f7 68 4e b8 H ..f.F..k.c.hN. 1260: 73 01 d2 e7 26 90 a3 3b b8 3a 07 4d 86 c7 b0 1e s...&..;.:.M.... 1270: 06 d8 29 00 ef 1a 50 d3 3f 78 26 08 0e 35 44 8f ..)...P.?x&..5D. 1280: 3a dc 09 1c fb 91 30 88 b3 3b 6e ac c3 c9 68 d0 :.....0..;n...h. 1290: a5 0a 30 7b 00 d0 d0 12 9c f6 99 84 7e 0f 38 9f ..0{........~.8. 12a0: 9e 21 89 fc 41 a0 46 e6 ff 3f b4 c7 78 5a 31 43 .!..A.F..?..xZ1C 12b0: 3e 0b 1c 16 13 0b a1 4d 6a 3c 40 40 e1 d1 40 08 >......Mj<@@..@. 12c0: 6f 06 9e af 09 46 86 90 93 f1 a0 06 e0 41 d7 3a o....F.......A.: 12d0: 32 8d 27 a6 21 cf e8 00 22 bf 32 78 0c 41 02 f9 2.'.!...".2x.A.. 12e0: c4 60 b8 c7 81 13 78 02 f0 59 40 10 92 00 21 51 .`....x..Y@...!Q 12f0: e3 a7 47 08 7e 7a 78 93 30 28 1f d2 99 f9 90 e1 ..G.~zx.0(...... 1300: 11 c2 07 c4 7b 9f 3b 19 c1 29 7b a4 e0 b0 7e 0e ....{.;..){...~. 1310: 20 c0 af 0f 8f 0d 09 7c ae 08 8c 1d aa fd 0a 40 ......|.......@ 1320: 08 1e ed 51 e0 54 23 1c 2d 78 08 8a 1c 03 4a cc ...Q.T#.-x....J. 1330: 18 50 03 38 85 d0 e7 73 04 47 14 25 f6 21 19 da .P.8...s.G.%.!.. 1340: 08 e1 1f 39 4e c1 f7 8b 23 3d ad 23 78 91 f0 08 ...9N...#=.#x... 1350: 30 e1 ce 28 a8 38 30 f4 ff 7f 4c 01 dc 7a 3b a6 0..(.80...L..z;. 1360: 80 3e c0 31 05 50 fc ff 3f a6 00 87 a8 c7 14 f4 .>.1.P..?....... 1370: 40 0c 7c 2e a1 0d ff 96 c1 8e 03 87 74 6a 8f 28 @.|.........tj.( 1380: 80 29 79 47 14 50 8c 14 d6 f1 04 18 05 3c 9b a0 .)yG.P.......<.. 1390: 22 1d 4f 80 ce ff ff 78 02 58 b8 9a bc 92 84 7d ".O....x.X.....} 13a0: 1e 78 1d 89 14 e3 41 e2 b5 e4 c1 24 46 98 08 8f .x....A....$F... 13b0: 27 1e 47 c0 b7 82 28 91 8e 3e c4 83 49 28 63 3e '.G...(..>..I(c> 13c0: a3 84 89 f9 04 70 22 ef 27 46 0a 73 2a 8f 27 2c .....p".'F.s*.', 13d0: c4 f1 04 a0 85 e2 e3 09 3a 2c 84 fe ff c7 13 dc ........:,...... 13e0: e1 c1 a7 0c fc 85 0c c6 f9 04 30 24 f0 7c 02 ca ..........0$.|.. 13f0: db 18 e6 80 02 8c 14 da f4 a9 d1 a8 55 83 32 35 ............U.25 1400: ca 34 a8 d5 a7 52 63 c6 4c 9c 52 bc 6c 8d df f2 .4...Rc.L.R.l... 1410: 9e 09 02 b1 20 0a 81 38 cc f3 42 20 96 a2 01 84 .... ..8..B .... 1420: 85 06 a1 42 a9 05 e2 98 20 34 92 0a 10 f6 ff 07 ...B.... 4...... 1430: 5b 82 1b 4c 49 44 30 08 5f 48 49 44 0c 41 d0 0c [..LID0._HID.A.. 1440: 0d 14 0b 5f 4c 49 44 00 a4 4c 50 4f 4c 5b 82 0f ..._LID..LPOL[.. 1450: 50 57 52 42 08 5f 48 49 44 0c 41 d0 0c 0c 5b 82 PWRB._HID.A...[. 1460: 84 b9 04 50 43 49 30 14 09 5f 53 33 44 00 a4 0a ...PCI0.._S3D... 1470: 02 14 09 5f 53 34 44 00 a4 0a 02 08 5f 48 49 44 ..._S4D....._HID 1480: 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 d0 0a 03 5b .A...._CID.A...[ 1490: 82 43 0e 4d 43 48 43 08 5f 41 44 52 00 5b 80 48 .C.MCHC._ADR.[.H 14a0: 42 55 53 02 0a 40 0a c0 5b 81 4a 0c 48 42 55 53 BUS..@..[.J.HBUS 14b0: 03 45 50 45 4e 01 00 0b 45 50 42 52 14 00 20 4d .EPEN...EPBR.. M 14c0: 48 45 4e 01 00 0d 4d 48 42 52 12 00 40 0a 50 58 HEN...MHBR..@.PX 14d0: 45 4e 01 50 58 53 5a 02 00 17 50 58 42 52 06 00 EN.PXSZ...PXBR.. 14e0: 20 44 49 45 4e 01 00 0b 44 49 42 52 14 00 20 49 DIEN...DIBR.. I 14f0: 50 45 4e 01 00 0b 49 50 42 52 14 00 40 0e 00 04 PEN...IPBR..@... 1500: 50 4d 30 48 02 00 02 50 4d 31 4c 02 00 02 50 4d PM0H...PM1L...PM 1510: 31 48 02 00 02 50 4d 32 4c 02 00 02 50 4d 32 48 1H...PM2L...PM2H 1520: 02 00 02 50 4d 33 4c 02 00 02 50 4d 33 48 02 00 ...PM3L...PM3H.. 1530: 02 50 4d 34 4c 02 00 02 50 4d 34 48 02 00 02 50 .PM4L...PM4H...P 1540: 4d 35 4c 02 00 02 50 4d 35 48 02 00 02 50 4d 36 M5L...PM5H...PM6 1550: 4c 02 00 02 50 4d 36 48 02 00 02 00 07 48 45 4e L...PM6H.....HEN 1560: 41 01 00 40 05 54 55 55 44 10 00 40 06 00 04 54 A..@.TUUD..@...T 1570: 4c 55 44 0c 08 42 55 46 30 11 4d 20 0b 08 02 88 LUD..BUF0.M .... 1580: 0d 00 02 0c 00 00 00 00 00 ff 00 00 00 00 01 87 ................ 1590: 17 00 01 0c 03 00 00 00 00 00 00 00 00 f7 0c 00 ................ 15a0: 00 00 00 00 00 f8 0c 00 00 47 01 f8 0c f8 0c 01 .........G...... 15b0: 08 87 17 00 01 0c 03 00 00 00 00 00 0d 00 00 ff ................ 15c0: ff 00 00 00 00 00 00 00 f3 00 00 87 17 00 00 0c ................ 15d0: 03 00 00 00 00 00 00 0a 00 ff ff 0b 00 00 00 00 ................ 15e0: 00 00 00 02 00 87 17 00 00 0c 03 00 00 00 00 00 ................ 15f0: 00 0c 00 ff 3f 0c 00 00 00 00 00 00 40 00 00 87 ....?.......@... 1600: 17 00 00 0c 03 00 00 00 00 00 40 0c 00 ff 7f 0c ..........@..... 1610: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 1620: 00 00 00 00 80 0c 00 ff bf 0c 00 00 00 00 00 00 ................ 1630: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0c @............... 1640: 00 ff ff 0c 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1650: 00 0c 03 00 00 00 00 00 00 0d 00 ff 3f 0d 00 00 ............?... 1660: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1670: 00 00 40 0d 00 ff 7f 0d 00 00 00 00 00 00 40 00 ..@...........@. 1680: 00 87 17 00 00 0c 03 00 00 00 00 00 80 0d 00 ff ................ 1690: bf 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c ........@....... 16a0: 03 00 00 00 00 00 c0 0d 00 ff ff 0d 00 00 00 00 ................ 16b0: 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 ..@............. 16c0: 00 0e 00 ff 3f 0e 00 00 00 00 00 00 40 00 00 87 ....?.......@... 16d0: 17 00 00 0c 03 00 00 00 00 00 40 0e 00 ff 7f 0e ..........@..... 16e0: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 16f0: 00 00 00 00 80 0e 00 ff bf 0e 00 00 00 00 00 00 ................ 1700: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0e @............... 1710: 00 ff ff 0e 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1720: 00 0c 03 00 00 00 00 00 00 0f 00 ff ff 0f 00 00 ................ 1730: 00 00 00 00 00 01 00 87 17 00 00 0c 03 00 00 00 ................ 1740: 00 00 00 00 00 ff ff ff df 00 00 00 00 00 00 00 ................ 1750: 00 87 17 00 00 0c 03 00 00 00 00 00 00 00 f0 ff ................ 1760: ff bf fe 00 00 00 00 00 00 c0 0e 87 17 00 00 0c ................ 1770: 03 00 00 00 00 00 00 d4 fe ff 4f d4 fe 00 00 00 ..........O..... 1780: 00 00 00 00 00 79 00 14 4b 3d 5f 43 52 53 08 a0 .....y..K=_CRS.. 1790: 1c 5e 2e 4d 43 48 43 50 4d 31 4c 8a 42 55 46 30 .^.MCHCPM1L.BUF0 17a0: 0a 7c 43 30 4c 4e 70 00 43 30 4c 4e a0 1f 93 5e .|C0LNp.C0LN...^ 17b0: 2e 4d 43 48 43 50 4d 31 4c 01 8d 42 55 46 30 0b .MCHCPM1L..BUF0. 17c0: 58 03 43 30 52 57 70 00 43 30 52 57 a0 1c 5e 2e X.C0RWp.C0RW..^. 17d0: 4d 43 48 43 50 4d 31 48 8a 42 55 46 30 0a 96 43 MCHCPM1H.BUF0..C 17e0: 34 4c 4e 70 00 43 34 4c 4e a0 1f 93 5e 2e 4d 43 4LNp.C4LN...^.MC 17f0: 48 43 50 4d 31 48 01 8d 42 55 46 30 0b 28 04 43 HCPM1H..BUF0.(.C 1800: 34 52 57 70 00 43 34 52 57 a0 1c 5e 2e 4d 43 48 4RWp.C4RW..^.MCH 1810: 43 50 4d 32 4c 8a 42 55 46 30 0a b0 43 38 4c 4e CPM2L.BUF0..C8LN 1820: 70 00 43 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 p.C8LN...^.MCHCP 1830: 4d 32 4c 01 8d 42 55 46 30 0b f8 04 43 38 52 57 M2L..BUF0...C8RW 1840: 70 00 43 38 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d p.C8RW..^.MCHCPM 1850: 32 48 8a 42 55 46 30 0a ca 43 43 4c 4e 70 00 43 2H.BUF0..CCLNp.C 1860: 43 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 32 48 CLN...^.MCHCPM2H 1870: 01 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 43 ..BUF0...CCRWp.C 1880: 43 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d 33 4c 8a CRW..^.MCHCPM3L. 1890: 42 55 46 30 0a e4 44 30 4c 4e 70 00 44 30 4c 4e BUF0..D0LNp.D0LN 18a0: a0 1f 93 5e 2e 4d 43 48 43 50 4d 33 4c 01 8d 42 ...^.MCHCPM3L..B 18b0: 55 46 30 0b 98 06 44 30 52 57 70 00 44 30 52 57 UF0...D0RWp.D0RW 18c0: a0 1c 5e 2e 4d 43 48 43 50 4d 33 48 8a 42 55 46 ..^.MCHCPM3H.BUF 18d0: 30 0a fe 44 34 4c 4e 70 00 44 34 4c 4e a0 1f 93 0..D4LNp.D4LN... 18e0: 5e 2e 4d 43 48 43 50 4d 33 48 01 8d 42 55 46 30 ^.MCHCPM3H..BUF0 18f0: 0b 68 07 44 34 52 57 70 00 44 34 52 57 a0 1d 5e .h.D4RWp.D4RW..^ 1900: 2e 4d 43 48 43 50 4d 34 4c 8a 42 55 46 30 0b 18 .MCHCPM4L.BUF0.. 1910: 01 44 38 4c 4e 70 00 44 38 4c 4e a0 1f 93 5e 2e .D8LNp.D8LN...^. 1920: 4d 43 48 43 50 4d 34 4c 01 8d 42 55 46 30 0b 38 MCHCPM4L..BUF0.8 1930: 08 44 38 52 57 70 00 44 38 52 57 a0 1d 5e 2e 4d .D8RWp.D8RW..^.M 1940: 43 48 43 50 4d 34 48 8a 42 55 46 30 0b 32 01 44 CHCPM4H.BUF0.2.D 1950: 43 4c 4e 70 00 44 43 4c 4e a0 1f 93 5e 2e 4d 43 CLNp.DCLN...^.MC 1960: 48 43 50 4d 34 48 01 8d 42 55 46 30 0b 08 09 44 HCPM4H..BUF0...D 1970: 43 52 57 70 00 44 43 52 57 a0 1d 5e 2e 4d 43 48 CRWp.DCRW..^.MCH 1980: 43 50 4d 35 4c 8a 42 55 46 30 0b 4c 01 45 30 4c CPM5L.BUF0.L.E0L 1990: 4e 70 00 45 30 4c 4e a0 1f 93 5e 2e 4d 43 48 43 Np.E0LN...^.MCHC 19a0: 50 4d 35 4c 01 8d 42 55 46 30 0b d8 09 45 30 52 PM5L..BUF0...E0R 19b0: 57 70 00 45 30 52 57 a0 1d 5e 2e 4d 43 48 43 50 Wp.E0RW..^.MCHCP 19c0: 4d 35 48 8a 42 55 46 30 0b 66 01 45 34 4c 4e 70 M5H.BUF0.f.E4LNp 19d0: 00 45 34 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d .E4LN...^.MCHCPM 19e0: 35 48 01 8d 42 55 46 30 0b a8 0a 45 34 52 57 70 5H..BUF0...E4RWp 19f0: 00 45 34 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 .E4RW..^.MCHCPM6 1a00: 4c 8a 42 55 46 30 0b 80 01 45 38 4c 4e 70 00 45 L.BUF0...E8LNp.E 1a10: 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 4c 8LN...^.MCHCPM6L 1a20: 01 8d 42 55 46 30 0b 78 0b 45 38 52 57 70 00 45 ..BUF0.x.E8RWp.E 1a30: 38 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 48 8a 8RW..^.MCHCPM6H. 1a40: 42 55 46 30 0b 9a 01 45 43 4c 4e 70 00 45 43 4c BUF0...ECLNp.ECL 1a50: 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 48 01 8d N...^.MCHCPM6H.. 1a60: 42 55 46 30 0b 48 0c 45 43 52 57 70 00 45 43 52 BUF0.H.ECRWp.ECR 1a70: 57 a0 1d 5e 2e 4d 43 48 43 50 4d 30 48 8a 42 55 W..^.MCHCPM0H.BU 1a80: 46 30 0b b4 01 46 30 4c 4e 70 00 46 30 4c 4e a0 F0...F0LNp.F0LN. 1a90: 1f 93 5e 2e 4d 43 48 43 50 4d 30 48 01 8d 42 55 ..^.MCHCPM0H..BU 1aa0: 46 30 0b 18 0d 46 30 52 57 70 00 46 30 52 57 8a F0...F0RWp.F0RW. 1ab0: 42 55 46 30 0b c2 01 4d 31 4d 4e 8a 42 55 46 30 BUF0...M1MN.BUF0 1ac0: 0b c6 01 4d 31 4d 58 8a 42 55 46 30 0b ce 01 4d ...M1MX.BUF0...M 1ad0: 31 4c 4e 8a 42 55 46 30 0b dc 01 4d 32 4d 4e 8a 1LN.BUF0...M2MN. 1ae0: 42 55 46 30 0b e0 01 4d 32 4d 58 8a 42 55 46 30 BUF0...M2MX.BUF0 1af0: 0b e8 01 4d 32 4c 4e 79 5e 2e 4d 43 48 43 50 58 ...M2LNy^.MCHCPX 1b00: 42 52 0a 1a 4d 31 4d 58 7a 0c 00 00 00 10 5e 2e BR..M1MXz.....^. 1b10: 4d 43 48 43 50 58 53 5a 60 72 4d 31 4d 58 60 4d MCHCPXSZ`rM1MX`M 1b20: 32 4d 4e 72 74 4d 32 4d 58 4d 32 4d 4e 00 01 4d 2MNrtM2MXM2MN..M 1b30: 32 4c 4e 74 4d 31 4d 58 01 4d 31 4d 58 79 5e 2e 2LNtM1MX.M1MXy^. 1b40: 4d 43 48 43 54 4c 55 44 0a 14 4d 31 4d 4e 72 74 MCHCTLUD..M1MNrt 1b50: 4d 31 4d 58 4d 31 4d 4e 00 01 4d 31 4c 4e a4 42 M1MXM1MN..M1LN.B 1b60: 55 46 30 14 47 28 5f 50 52 54 00 a0 45 0f 47 50 UF0.G(_PRT..E.GP 1b70: 49 43 a4 12 4d 0e 13 12 0b 04 0c ff ff 01 00 00 IC..M........... 1b80: 00 0a 10 12 0b 04 0c ff ff 02 00 00 00 0a 10 12 ................ 1b90: 0b 04 0c ff ff 07 00 00 00 0a 10 12 0b 04 0c ff ................ 1ba0: ff 19 00 00 00 0a 14 12 0b 04 0c ff ff 1a 00 00 ................ 1bb0: 00 0a 10 12 0b 04 0c ff ff 1a 00 01 00 0a 15 12 ................ 1bc0: 0c 04 0c ff ff 1a 00 0a 02 00 0a 12 12 0b 04 0c ................ 1bd0: ff ff 1b 00 00 00 0a 16 12 0b 04 0c ff ff 1c 00 ................ 1be0: 00 00 0a 11 12 0b 04 0c ff ff 1c 00 01 00 0a 10 ................ 1bf0: 12 0c 04 0c ff ff 1c 00 0a 02 00 0a 12 12 0c 04 ................ 1c00: 0c ff ff 1c 00 0a 03 00 0a 13 12 0b 04 0c ff ff ................ 1c10: 1d 00 00 00 0a 17 12 0b 04 0c ff ff 1d 00 01 00 ................ 1c20: 0a 13 12 0c 04 0c ff ff 1d 00 0a 02 00 0a 12 12 ................ 1c30: 0b 04 0c ff ff 1f 00 00 00 0a 13 12 0b 04 0c ff ................ 1c40: ff 1f 00 01 00 0a 13 12 0c 04 0c ff ff 1f 00 0a ................ 1c50: 02 00 0a 13 12 0c 04 0c ff ff 1f 00 0a 03 00 0a ................ 1c60: 10 a1 49 18 a4 12 45 18 13 12 13 04 0c ff ff 01 ..I...E......... 1c70: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1c80: 0c ff ff 02 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 ......^.LPCBLNKA 1c90: 00 12 13 04 0c ff ff 07 00 00 5e 2e 4c 50 43 42 ..........^.LPCB 1ca0: 4c 4e 4b 41 00 12 13 04 0c ff ff 19 00 00 5e 2e LNKA..........^. 1cb0: 4c 50 43 42 4c 4e 4b 45 00 12 13 04 0c ff ff 1a LPCBLNKE........ 1cc0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1cd0: 0c ff ff 1a 00 01 5e 2e 4c 50 43 42 4c 4e 4b 46 ......^.LPCBLNKF 1ce0: 00 12 14 04 0c ff ff 1a 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1cf0: 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1b 00 00 5e BLNKC..........^ 1d00: 2e 4c 50 43 42 4c 4e 4b 47 00 12 13 04 0c ff ff .LPCBLNKG....... 1d10: 1c 00 00 5e 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 ...^.LPCBLNKB... 1d20: 04 0c ff ff 1c 00 01 5e 2e 4c 50 43 42 4c 4e 4b .......^.LPCBLNK 1d30: 41 00 12 14 04 0c ff ff 1c 00 0a 02 5e 2e 4c 50 A...........^.LP 1d40: 43 42 4c 4e 4b 43 00 12 14 04 0c ff ff 1c 00 0a CBLNKC.......... 1d50: 03 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0c .^.LPCBLNKD..... 1d60: ff ff 1d 00 00 5e 2e 4c 50 43 42 4c 4e 4b 48 00 .....^.LPCBLNKH. 1d70: 12 13 04 0c ff ff 1d 00 01 5e 2e 4c 50 43 42 4c .........^.LPCBL 1d80: 4e 4b 44 00 12 14 04 0c ff ff 1d 00 0a 02 5e 2e NKD...........^. 1d90: 4c 50 43 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1f LPCBLNKC........ 1da0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 ..^.LPCBLNKD.... 1db0: 0c ff ff 1f 00 01 5e 2e 4c 50 43 42 4c 4e 4b 44 ......^.LPCBLNKD 1dc0: 00 12 14 04 0c ff ff 1f 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1dd0: 42 4c 4e 4b 44 00 12 14 04 0c ff ff 1f 00 0a 03 BLNKD........... 1de0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 40 14 50 ^.LPCBLNKA.[.@.P 1df0: 44 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 DRC._HID.A...._U 1e00: 49 44 01 08 42 55 46 30 11 46 06 0a 62 86 09 00 ID..BUF0.F..b... 1e10: 01 00 00 00 00 00 40 00 00 86 09 00 01 00 00 00 ......@......... 1e20: 00 00 40 00 00 86 09 00 01 00 00 00 00 00 10 00 ..@............. 1e30: 00 86 09 00 01 00 00 00 00 00 10 00 00 86 09 00 ................ 1e40: 01 00 00 00 00 00 00 00 00 86 09 00 01 00 00 d2 ................ 1e50: fe 00 00 02 00 86 09 00 01 00 00 d4 fe 00 50 00 ..............P. 1e60: 00 86 09 00 01 00 50 d4 fe 00 b0 04 00 79 00 14 ......P......y.. 1e70: 4d 0b 5f 43 52 53 08 8a 42 55 46 30 0a 04 52 42 M._CRS..BUF0..RB 1e80: 52 30 79 5e 5e 2e 4c 50 43 42 52 43 42 41 0a 0e R0y^^.LPCBRCBA.. 1e90: 52 42 52 30 8a 42 55 46 30 0a 10 4d 42 52 30 79 RBR0.BUF0..MBR0y 1ea0: 5e 5e 2e 4d 43 48 43 4d 48 42 52 0a 0e 4d 42 52 ^^.MCHCMHBR..MBR 1eb0: 30 8a 42 55 46 30 0a 1c 44 42 52 30 79 5e 5e 2e 0.BUF0..DBR0y^^. 1ec0: 4d 43 48 43 44 49 42 52 0a 0c 44 42 52 30 8a 42 MCHCDIBR..DBR0.B 1ed0: 55 46 30 0a 28 45 42 52 30 79 5e 5e 2e 4d 43 48 UF0.(EBR0y^^.MCH 1ee0: 43 45 50 42 52 0a 0c 45 42 52 30 8a 42 55 46 30 CEPBR..EBR0.BUF0 1ef0: 0a 34 58 42 52 30 79 5e 5e 2e 4d 43 48 43 50 58 .4XBR0y^^.MCHCPX 1f00: 42 52 0a 1a 58 42 52 30 8a 42 55 46 30 0a 38 58 BR..XBR0.BUF0.8X 1f10: 53 5a 30 7a 0c 00 00 00 10 5e 5e 2e 4d 43 48 43 SZ0z.....^^.MCHC 1f20: 50 58 53 5a 58 53 5a 30 a4 42 55 46 30 5b 82 4d PXSZXSZ0.BUF0[.M 1f30: 50 50 45 47 50 08 5f 41 44 52 0c 00 00 01 00 14 PPEGP._ADR...... 1f40: 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 2c A._PRT..3GPIC.., 1f50: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 1f60: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 1f70: 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 12 ............E... 1f80: 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 43 A.........^^.LPC 1f90: 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e 2e BLNKA........^^. 1fa0: 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff 0a LPCBLNKB........ 1fb0: 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 1fc0: 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 1fd0: 00 5b 82 49 46 56 47 41 5f 08 5f 41 44 52 00 08 .[.IFVGA_._ADR.. 1fe0: 53 57 49 54 01 08 43 52 54 41 01 08 4c 43 44 41 SWIT..CRTA..LCDA 1ff0: 01 08 54 56 41 41 01 08 56 4c 44 46 01 5b 80 56 ..TVAA..VLDF.[.V 2000: 49 44 53 02 00 0a c8 5b 81 0b 56 49 44 53 03 56 IDS....[..VIDS.V 2010: 44 49 44 20 14 09 5f 53 54 41 00 a4 0a 0f 08 5f DID .._STA....._ 2020: 50 53 43 00 14 0c 5f 50 53 30 00 70 00 5f 50 53 PSC..._PS0.p._PS 2030: 43 14 0c 5f 50 53 31 00 70 01 5f 50 53 43 14 0d C.._PS1.p._PSC.. 2040: 5f 50 53 33 00 70 0a 03 5f 50 53 43 14 10 5f 44 _PS3.p.._PSC.._D 2050: 4f 53 01 70 7b 68 0a 03 00 53 57 49 54 14 17 5f OS.p{h...SWIT.._ 2060: 44 4f 44 00 a4 12 0f 03 0c 00 01 01 00 0c 10 01 DOD............. 2070: 01 00 0b 00 02 5b 82 4d 08 43 52 54 5f 14 0a 5f .....[.M.CRT_.._ 2080: 41 44 52 00 a4 0b 00 01 14 41 06 5f 44 43 53 00 ADR......A._DCS. 2090: 5e 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 ^^^^.LPCBPHSS..p 20a0: 43 41 44 4c 60 70 43 53 54 45 61 7b 60 0a 02 60 CADL`pCSTEa{`..` 20b0: 7b 61 0a 02 61 a0 08 60 70 01 43 52 54 41 a1 07 {a..a..`p.CRTA.. 20c0: 70 00 43 52 54 41 a0 13 43 52 54 41 a0 08 93 61 p.CRTA..CRTA...a 20d0: 0a 02 a4 0a 1f a1 04 a4 0a 1d a1 0f a0 08 93 61 ...............a 20e0: 0a 02 a4 0a 0f a1 04 a4 0a 0d 14 12 5f 44 47 53 ............_DGS 20f0: 00 a0 07 43 52 54 41 a4 01 a1 03 a4 00 14 06 5f ...CRTA........_ 2100: 44 53 53 01 5b 82 47 0e 4c 43 44 5f 14 0a 5f 41 DSS.[.G.LCD_.._A 2110: 44 52 00 a4 0b 10 01 14 4d 05 5f 44 43 53 00 5e DR......M._DCS.^ 2120: 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 ^^^.LPCBPHSS..pC 2130: 41 44 4c 60 70 43 53 54 45 61 7b 60 01 60 7b 61 ADL`pCSTEa{`.`{a 2140: 01 61 a0 08 60 70 01 4c 43 44 41 a1 07 70 00 4c .a..`p.LCDA..p.L 2150: 43 44 41 a0 12 4c 43 44 41 a0 07 93 61 01 a4 0a CDA..LCDA...a... 2160: 1f a1 04 a4 0a 1d a1 0e a0 07 93 61 01 a4 0a 0f ...........a.... 2170: a1 04 a4 0a 0d 14 12 5f 44 47 53 00 a0 07 4c 43 ......._DGS...LC 2180: 44 41 a4 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 DA........_DSS.. 2190: 1d 5f 42 43 4c 00 a4 12 15 0a 0a 46 0a 28 00 0a ._BCL......F.(.. 21a0: 0a 0a 14 0a 1e 0a 28 0a 32 0a 3c 0a 46 14 20 5f ......(.2.<.F. _ 21b0: 42 43 4d 01 78 68 0a 0a 60 61 70 61 5e 5e 5e 5e BCM.xh..`apa^^^^ 21c0: 2f 03 4c 50 43 42 45 43 30 5f 42 52 54 53 14 1e /.LPCBEC0_BRTS.. 21d0: 5f 42 51 43 00 77 5e 5e 5e 5e 2f 03 4c 50 43 42 _BQC.w^^^^/.LPCB 21e0: 45 43 30 5f 42 52 54 53 0a 0a 60 a4 60 5b 82 4d EC0_BRTS..`.`[.M 21f0: 08 54 56 5f 5f 14 0a 5f 41 44 52 00 a4 0b 00 02 .TV__.._ADR..... 2200: 14 41 06 5f 44 43 53 00 5e 5e 5e 5e 2e 4c 50 43 .A._DCS.^^^^.LPC 2210: 42 50 48 53 53 0a 0c 70 43 41 44 4c 60 70 43 53 BPHSS..pCADL`pCS 2220: 54 45 61 7b 60 0a 04 60 7b 61 0a 04 61 a0 08 60 TEa{`..`{a..a..` 2230: 70 01 54 56 41 41 a1 07 70 00 54 56 41 41 a0 13 p.TVAA..p.TVAA.. 2240: 54 56 41 41 a0 08 93 61 0a 04 a4 0a 1f a1 04 a4 TVAA...a........ 2250: 0a 1d a1 0f a0 08 93 61 0a 04 a4 0a 0f a1 04 a4 .......a........ 2260: 0a 0d 14 12 5f 44 47 53 00 a0 07 54 56 41 41 a4 ...._DGS...TVAA. 2270: 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 49 10 44 ......._DSS..I.D 2280: 53 53 57 00 a0 4a 0e 93 53 57 49 54 00 5e 5e 5e SSW..J..SWIT.^^^ 2290: 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 41 44 4c .LPCBPHSS..pCADL 22a0: 60 70 43 53 54 45 61 a0 16 94 61 01 7b 60 61 56 `pCSTEa...a.{`aV 22b0: 4c 44 46 7b 56 4c 44 46 0a fe 56 4c 44 46 a0 43 LDF{VLDF..VLDF.C 22c0: 0a 56 4c 44 46 a0 27 93 60 0a 09 a0 0b 93 61 0a .VLDF.'.`.....a. 22d0: 08 53 54 42 4c 0a 02 a0 0a 93 61 01 53 54 42 4c .STBL.....a.STBL 22e0: 0a 03 a0 0a 93 61 0a 09 53 54 42 4c 01 a0 28 93 .....a..STBL..(. 22f0: 60 0a 0a a0 0b 93 61 0a 08 53 54 42 4c 0a 05 a0 `.....a..STBL... 2300: 0a 93 61 0a 02 53 54 42 4c 01 a0 0b 93 61 0a 0a ..a..STBL....a.. 2310: 53 54 42 4c 0a 04 a0 4b 04 93 60 0a 0b a0 0b 93 STBL...K..`..... 2320: 61 0a 08 53 54 42 4c 0a 02 a0 0b 93 61 0a 09 53 a..STBL.....a..S 2330: 54 42 4c 0a 05 a0 0a 93 61 01 53 54 42 4c 0a 03 TBL.....a.STBL.. 2340: a0 0b 93 61 0a 0a 53 54 42 4c 0a 04 a0 0a 93 61 ...a..STBL.....a 2350: 0a 02 53 54 42 4c 01 a0 0a 93 61 0a 0b 53 54 42 ..STBL....a..STB 2360: 4c 01 a1 0c 70 01 56 4c 44 46 53 54 42 4c 01 a1 L...p.VLDFSTBL.. 2370: 16 a0 14 93 53 57 49 54 01 5e 5e 5e 2e 4c 50 43 ....SWIT.^^^.LPC 2380: 42 50 48 53 53 01 14 45 0b 53 54 42 4c 01 a0 16 BPHSS..E.STBL... 2390: 93 68 01 70 00 43 52 54 41 70 01 4c 43 44 41 70 .h.p.CRTAp.LCDAp 23a0: 00 54 56 41 41 a0 17 93 68 0a 02 70 01 43 52 54 .TVAA...h..p.CRT 23b0: 41 70 00 4c 43 44 41 70 00 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23c0: 68 0a 03 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 23d0: 00 54 56 41 41 a0 17 93 68 0a 04 70 00 43 52 54 .TVAA...h..p.CRT 23e0: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23f0: 68 0a 05 70 00 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2400: 01 54 56 41 41 a0 17 93 68 0a 06 70 01 43 52 54 .TVAA...h..p.CRT 2410: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 2420: 68 0a 07 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2430: 01 54 56 41 41 86 56 47 41 5f 0a 80 5b 82 42 f8 .TVAA.VGA_..[.B. 2440: 47 46 58 30 08 5f 41 44 52 0c 00 00 02 00 14 10 GFX0._ADR....... 2450: 5f 44 4f 53 01 70 7b 68 0a 07 00 44 53 45 4e 14 _DOS.p{h...DSEN. 2460: 41 26 5f 44 4f 44 00 70 00 4e 44 49 44 a0 15 92 A&_DOD.p.NDID... 2470: 93 44 49 44 4c 00 70 53 44 44 4c 44 49 44 31 44 .DIDL.pSDDLDID1D 2480: 49 44 31 a0 15 92 93 44 44 4c 32 00 70 53 44 44 ID1....DDL2.pSDD 2490: 4c 44 49 44 32 44 49 44 32 a0 15 92 93 44 44 4c LDID2DID2....DDL 24a0: 33 00 70 53 44 44 4c 44 49 44 33 44 49 44 33 a0 3.pSDDLDID3DID3. 24b0: 15 92 93 44 44 4c 34 00 70 53 44 44 4c 44 49 44 ...DDL4.pSDDLDID 24c0: 34 44 49 44 34 a0 15 92 93 44 44 4c 35 00 70 53 4DID4....DDL5.pS 24d0: 44 44 4c 44 49 44 35 44 49 44 35 a0 2c 93 4e 44 DDLDID5DID5.,.ND 24e0: 49 44 01 08 54 4d 50 31 12 07 01 0c ff ff ff ff ID..TMP1........ 24f0: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2500: 31 00 00 a4 54 4d 50 31 a0 46 04 93 4e 44 49 44 1...TMP1.F..NDID 2510: 0a 02 08 54 4d 50 32 12 0c 02 0c ff ff ff ff 0c ...TMP2......... 2520: ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 ....p}.....DID1. 2530: 88 54 4d 50 32 00 00 70 7d 0c 00 00 01 00 44 49 .TMP2..p}.....DI 2540: 44 32 00 88 54 4d 50 32 01 00 a4 54 4d 50 32 a0 D2..TMP2...TMP2. 2550: 4f 05 93 4e 44 49 44 0a 03 08 54 4d 50 33 12 11 O..NDID...TMP3.. 2560: 03 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 2570: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2580: 33 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 3..p}.....DID2.. 2590: 54 4d 50 33 01 00 70 7d 0c 00 00 01 00 44 49 44 TMP3..p}.....DID 25a0: 33 00 88 54 4d 50 33 0a 02 00 a4 54 4d 50 33 a0 3..TMP3....TMP3. 25b0: 48 07 93 4e 44 49 44 0a 04 08 54 4d 50 34 12 16 H..NDID...TMP4.. 25c0: 04 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 25d0: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 25e0: 00 88 54 4d 50 34 00 00 70 7d 0c 00 00 01 00 44 ..TMP4..p}.....D 25f0: 49 44 32 00 88 54 4d 50 34 01 00 70 7d 0c 00 00 ID2..TMP4..p}... 2600: 01 00 44 49 44 33 00 88 54 4d 50 34 0a 02 00 70 ..DID3..TMP4...p 2610: 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d 50 34 }.....DID4..TMP4 2620: 0a 03 00 a4 54 4d 50 34 a0 41 09 94 4e 44 49 44 ....TMP4.A..NDID 2630: 0a 04 08 54 4d 50 35 12 1b 05 0c ff ff ff ff 0c ...TMP5......... 2640: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 2650: ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 88 ...p}.....DID1.. 2660: 54 4d 50 35 00 00 70 7d 0c 00 00 01 00 44 49 44 TMP5..p}.....DID 2670: 32 00 88 54 4d 50 35 01 00 70 7d 0c 00 00 01 00 2..TMP5..p}..... 2680: 44 49 44 33 00 88 54 4d 50 35 0a 02 00 70 7d 0c DID3..TMP5...p}. 2690: 00 00 01 00 44 49 44 34 00 88 54 4d 50 35 0a 03 ....DID4..TMP5.. 26a0: 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d .p}.....DID4..TM 26b0: 50 35 0a 04 00 a4 54 4d 50 35 a4 12 05 01 0b 00 P5....TMP5...... 26c0: 04 5b 82 43 06 44 44 30 31 14 1c 5f 41 44 52 08 .[.C.DD01.._ADR. 26d0: a0 09 93 44 49 44 31 00 a4 01 a1 0b a4 7b 0b ff ...DID1......{.. 26e0: ff 44 49 44 31 00 14 0f 5f 44 43 53 00 a4 43 44 .DID1..._DCS..CD 26f0: 44 53 44 49 44 31 14 0f 5f 44 47 53 00 a4 4e 44 DSDID1.._DGS..ND 2700: 44 53 44 49 44 31 14 1f 5f 44 53 53 01 a0 18 93 DSDID1.._DSS.... 2710: 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 {h...........pNS 2720: 54 45 43 53 54 45 5b 82 44 06 44 44 30 32 14 1d TECSTE[.D.DD02.. 2730: 5f 41 44 52 08 a0 0a 93 44 49 44 32 00 a4 0a 02 _ADR....DID2.... 2740: a1 0b a4 7b 0b ff ff 44 49 44 32 00 14 0f 5f 44 ...{...DID2..._D 2750: 43 53 00 a4 43 44 44 53 44 49 44 32 14 0f 5f 44 CS..CDDSDID2.._D 2760: 47 53 00 a4 4e 44 44 53 44 49 44 32 14 1f 5f 44 GS..NDDSDID2.._D 2770: 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 SS....{h........ 2780: 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 41 07 ...pNSTECSTE[.A. 2790: 44 44 30 33 14 1d 5f 41 44 52 08 a0 0a 93 44 49 DD03.._ADR....DI 27a0: 44 33 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 49 44 D3.......{...DID 27b0: 33 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 33 3..._DCS....DID3 27c0: 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 33 14 .......CDDSDID3. 27d0: 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 44 33 14 ._DGS..NDDSDID3. 27e0: 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 ._DSS....{h..... 27f0: 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 5b ......pNSTECSTE[ 2800: 82 41 07 44 44 30 34 14 1d 5f 41 44 52 08 a0 0a .A.DD04.._ADR... 2810: 93 44 49 44 34 00 a4 0a 04 a1 0b a4 7b 0b ff ff .DID4.......{... 2820: 44 49 44 34 00 14 1c 5f 44 43 53 00 a0 0a 93 44 DID4..._DCS....D 2830: 49 44 34 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 ID4.......CDDSDI 2840: 44 34 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 D4.._DGS..NDDSDI 2850: 44 34 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 D4.._DSS....{h.. 2860: 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 .........pNSTECS 2870: 54 45 5b 82 41 07 44 44 30 35 14 1d 5f 41 44 52 TE[.A.DD05.._ADR 2880: 08 a0 0a 93 44 49 44 35 00 a4 0a 05 a1 0b a4 7b ....DID5.......{ 2890: 0b ff ff 44 49 44 35 00 14 1c 5f 44 43 53 00 a0 ...DID5..._DCS.. 28a0: 0a 93 44 49 44 35 00 a4 0a 0b a1 0a a4 43 44 44 ..DID5.......CDD 28b0: 53 44 49 44 35 14 0f 5f 44 47 53 00 a4 4e 44 44 SDID5.._DGS..NDD 28c0: 53 44 49 44 35 14 1f 5f 44 53 53 01 a0 18 93 7b SDID5.._DSS....{ 28d0: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 28e0: 45 43 53 54 45 14 4e 06 53 44 44 4c 01 75 4e 44 ECSTE.N.SDDL.uND 28f0: 49 44 70 7b 68 0b 0f 0f 00 60 7d 0c 00 00 00 80 IDp{h....`}..... 2900: 60 61 a0 09 93 44 49 44 4c 60 a4 61 a0 09 93 44 `a...DIDL`.a...D 2910: 44 4c 32 60 a4 61 a0 09 93 44 44 4c 33 60 a4 61 DL2`.a...DDL3`.a 2920: a0 09 93 44 44 4c 34 60 a4 61 a0 09 93 44 44 4c ...DDL4`.a...DDL 2930: 35 60 a4 61 a0 09 93 44 44 4c 36 60 a4 61 a0 09 5`.a...DDL6`.a.. 2940: 93 44 44 4c 37 60 a4 61 a0 09 93 44 44 4c 38 60 .DDL7`.a...DDL8` 2950: a4 61 a4 00 14 4a 08 43 44 44 53 01 a0 0f 93 43 .a...J.CDDS....C 2960: 41 44 4c 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 ADL{h..........C 2970: 41 4c 32 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL2{h..........C 2980: 41 4c 33 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL3{h..........C 2990: 41 4c 34 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL4{h..........C 29a0: 41 4c 35 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL5{h..........C 29b0: 41 4c 36 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL6{h..........C 29c0: 41 4c 37 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL7{h..........C 29d0: 41 4c 38 7b 68 0b 0f 0f 00 a4 0a 1f a4 0a 1d 14 AL8{h........... 29e0: 41 08 4e 44 44 53 01 a0 0e 93 4e 41 44 4c 7b 68 A.NDDS....NADL{h 29f0: 0b 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 32 7b 68 0b .........NDL2{h. 2a00: 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 33 7b 68 0b 0f ........NDL3{h.. 2a10: 0f 00 a4 01 a0 0e 93 4e 44 4c 34 7b 68 0b 0f 0f .......NDL4{h... 2a20: 00 a4 01 a0 0e 93 4e 44 4c 35 7b 68 0b 0f 0f 00 ......NDL5{h.... 2a30: a4 01 a0 0e 93 4e 44 4c 36 7b 68 0b 0f 0f 00 a4 .....NDL6{h..... 2a40: 01 a0 0e 93 4e 44 4c 37 7b 68 0b 0f 0f 00 a4 01 ....NDL7{h...... 2a50: a0 0e 93 4e 44 4c 38 7b 68 0b 0f 0f 00 a4 01 a4 ...NDL8{h....... 2a60: 00 14 40 07 42 52 54 4e 09 a0 14 93 7b 44 49 44 ..@.BRTN....{DID 2a70: 31 0b 00 0f 00 0b 00 04 86 44 44 30 31 68 a0 14 1........DD01h.. 2a80: 93 7b 44 49 44 32 0b 00 0f 00 0b 00 04 86 44 44 .{DID2........DD 2a90: 30 32 68 a0 14 93 7b 44 49 44 33 0b 00 0f 00 0b 02h...{DID3..... 2aa0: 00 04 86 44 44 30 33 68 a0 14 93 7b 44 49 44 34 ...DD03h...{DID4 2ab0: 0b 00 0f 00 0b 00 04 86 44 44 30 34 68 a0 14 93 ........DD04h... 2ac0: 7b 44 49 44 35 0b 00 0f 00 0b 00 04 86 44 44 30 {DID5........DD0 2ad0: 35 68 10 24 5e 5e 50 43 49 30 5b 80 4d 43 48 50 5h.$^^PCI0[.MCHP 2ae0: 02 0a 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 ..@..[..MCHP..@0 2af0: 54 41 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 TASM...[.IGDP..@ 2b00: 0a c0 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 ..[.E.IGDP..@... 2b10: 47 49 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 GIVD...GUMA..... 2b20: 47 4d 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 GMFN....@FASLE.. 2b30: 18 47 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 .GSSE.GSSB.GSES. 2b40: 00 30 00 08 43 44 56 4c 05 00 03 00 18 4c 42 50 .0..CDVL.....LBP 2b50: 43 08 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 C..0ASLS [.IGDM. 2b60: 41 53 4c 42 0b 00 20 5b 81 4e 16 49 47 44 4d 00 ASLB.. [.N.IGDM. 2b70: 53 49 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 SIGN@.SIZE OVER 2b80: 53 56 45 52 40 10 56 56 45 52 40 08 47 56 45 52 SVER@.VVER@.GVER 2b90: 40 08 4d 42 4f 58 20 00 40 52 44 52 44 59 20 43 @.MBOX .@RDRDY C 2ba0: 53 54 53 20 43 45 56 54 20 00 40 0a 44 49 44 4c STS CEVT .@.DIDL 2bb0: 20 44 44 4c 32 20 44 44 4c 33 20 44 44 4c 34 20 DDL2 DDL3 DDL4 2bc0: 44 44 4c 35 20 44 44 4c 36 20 44 44 4c 37 20 44 DDL5 DDL6 DDL7 D 2bd0: 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 20 43 50 DL8 CPDL CPL2 CP 2be0: 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 43 50 4c L3 CPL4 CPL5 CPL 2bf0: 36 20 43 50 4c 37 20 43 50 4c 38 20 43 41 44 4c 6 CPL7 CPL8 CADL 2c00: 20 43 41 4c 32 20 43 41 4c 33 20 43 41 4c 34 20 CAL2 CAL3 CAL4 2c10: 43 41 4c 35 20 43 41 4c 36 20 43 41 4c 37 20 43 CAL5 CAL6 CAL7 C 2c20: 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 20 4e 44 AL8 NADL NDL2 ND 2c30: 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 4e 44 4c L3 NDL4 NDL5 NDL 2c40: 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 53 4c 50 6 NDL7 NDL8 ASLP 2c50: 20 54 49 44 58 20 43 48 50 44 20 43 4c 49 44 20 TIDX CHPD CLID 2c60: 43 44 43 4b 20 53 58 53 57 20 45 56 54 53 20 43 CDCK SXSW EVTS C 2c70: 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 43 49 45 NOT NRDY .@.SCIE 2c80: 01 47 45 46 43 04 47 58 46 43 03 47 45 53 46 08 .GEFC.GXFC.GESF. 2c90: 00 10 50 41 52 4d 20 44 53 4c 50 20 00 40 7a 41 ..PARM DSLP .@zA 2ca0: 52 44 59 20 41 53 4c 43 20 54 43 48 45 20 41 4c RDY ASLC TCHE AL 2cb0: 53 49 20 42 43 4c 50 20 50 46 49 54 20 43 42 4c SI BCLP PFIT CBL 2cc0: 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 00 40 5c V BCLM@.CPFM .@\ 2cd0: 47 56 44 31 80 00 0e 08 44 42 54 42 12 32 15 00 GVD1....DBTB.2.. 2ce0: 0a 07 0a 38 0b c0 01 0b 00 0e 0a 3f 0b c7 01 0b ...8.......?.... 2cf0: 07 0e 0b f8 01 0b 38 0e 0b c0 0f 00 00 00 00 00 ......8......... 2d00: 0b 00 70 0b 07 70 0b 38 70 0b c0 71 0b 00 7e 08 ..p..p.8p..q..~. 2d10: 43 44 43 54 12 23 03 12 0a 03 0a c8 0b 40 01 0b CDCT.#.......@.. 2d20: 90 01 12 0a 03 0a c8 0b 4d 01 0b 90 01 12 0a 03 ........M....... 2d30: 0a de 0b 4d 01 0b 7d 01 08 53 55 43 43 01 08 4e ...M..}..SUCC..N 2d40: 56 4c 44 0a 02 08 43 52 49 54 0a 04 08 4e 43 52 VLD...CRIT...NCR 2d50: 54 0a 06 14 4c 4a 47 53 43 49 08 14 44 1e 47 42 T...LJGSCI..D.GB 2d60: 44 41 08 a0 1a 93 47 45 53 46 00 70 0b 79 02 50 DA....GESF.p.y.P 2d70: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 1a ARMp.GESF.SUCC.. 2d80: 93 47 45 53 46 01 70 0b 40 02 50 41 52 4d 70 00 .GESF.p.@.PARMp. 2d90: 47 45 53 46 a4 53 55 43 43 a0 47 04 93 47 45 53 GESF.SUCC.G..GES 2da0: 46 0a 04 7b 50 41 52 4d 0c 00 00 ff ef 50 41 52 F..{PARM.....PAR 2db0: 4d 7b 50 41 52 4d 79 83 88 44 42 54 42 49 42 54 M{PARMy..DBTBIBT 2dc0: 54 00 0a 10 00 50 41 52 4d 7d 49 42 54 54 50 41 T....PARM}IBTTPA 2dd0: 52 4d 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 RMPARMp.GESF.SUC 2de0: 43 a0 4a 06 93 47 45 53 46 0a 05 70 49 50 53 43 C.J..GESF..pIPSC 2df0: 50 41 52 4d 7d 50 41 52 4d 79 49 50 41 54 0a 08 PARM}PARMyIPAT.. 2e00: 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 41 52 .PARMrPARM...PAR 2e10: 4d 7d 50 41 52 4d 79 4c 49 44 53 0a 10 00 50 41 M}PARMyLIDS...PA 2e20: 52 4d 72 50 41 52 4d 0c 00 00 01 00 50 41 52 4d RMrPARM.....PARM 2e30: 7d 50 41 52 4d 79 49 42 49 41 0a 14 00 50 41 52 }PARMyIBIA...PAR 2e40: 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 2d 93 47 Mp.GESF.SUCC.-.G 2e50: 45 53 46 0a 06 70 49 54 56 46 50 41 52 4d 7d 50 ESF..pITVFPARM}P 2e60: 41 52 4d 79 49 54 56 4d 0a 04 00 50 41 52 4d 70 ARMyITVM...PARMp 2e70: 00 47 45 53 46 a4 53 55 43 43 a0 4f 08 93 47 45 .GESF.SUCC.O..GE 2e80: 53 46 0a 07 70 47 49 56 44 50 41 52 4d 7f 50 41 SF..pGIVDPARM.PA 2e90: 52 4d 01 50 41 52 4d 7d 50 41 52 4d 79 47 4d 46 RM.PARM}PARMyGMF 2ea0: 4e 01 00 50 41 52 4d 7d 50 41 52 4d 0b 00 10 50 N..PARM}PARM...P 2eb0: 41 52 4d a0 16 49 44 4d 4d 7d 50 41 52 4d 79 49 ARM..IDMM}PARMyI 2ec0: 44 4d 53 0a 11 00 50 41 52 4d a1 12 7d 50 41 52 DMS...PARM..}PAR 2ed0: 4d 79 49 44 4d 53 0a 0d 00 50 41 52 4d 7d 79 83 MyIDMS...PARM}y. 2ee0: 88 83 88 43 44 43 54 48 56 43 4f 00 74 43 44 56 ...CDCTHVCO.tCDV 2ef0: 4c 01 00 00 0a 15 00 50 41 52 4d 50 41 52 4d 70 L......PARMPARMp 2f00: 01 47 45 53 46 a4 53 55 43 43 a0 2a 93 47 45 53 .GESF.SUCC.*.GES 2f10: 46 0a 0a 70 00 50 41 52 4d a0 10 49 53 53 43 7d F..p.PARM..ISSC} 2f20: 50 41 52 4d 0a 03 50 41 52 4d 70 00 47 45 53 46 PARM..PARMp.GESF 2f30: a4 53 55 43 43 70 00 47 45 53 46 a4 43 52 49 54 .SUCCp.GESF.CRIT 2f40: 14 41 28 53 42 43 42 08 a0 20 93 47 45 53 46 00 .A(SBCB.. .GESF. 2f50: 70 00 50 41 52 4d 70 0b 7d f7 50 41 52 4d 70 00 p.PARMp.}.PARMp. 2f60: 47 45 53 46 a4 53 55 43 43 a0 18 93 47 45 53 46 GESF.SUCC...GESF 2f70: 01 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 2f80: 43 43 a0 19 93 47 45 53 46 0a 03 70 00 47 45 53 CC...GESF..p.GES 2f90: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 Fp.PARM.SUCC...G 2fa0: 45 53 46 0a 04 70 00 47 45 53 46 70 00 50 41 52 ESF..p.GESFp.PAR 2fb0: 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 05 70 M.SUCC...GESF..p 2fc0: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 2fd0: a0 37 93 47 45 53 46 0a 06 70 7b 50 41 52 4d 0a .7.GESF..p{PARM. 2fe0: 0f 00 49 54 56 46 70 7a 7b 50 41 52 4d 0a f0 00 ..ITVFpz{PARM... 2ff0: 0a 04 00 49 54 56 4d 70 00 47 45 53 46 70 00 50 ...ITVMp.GESFp.P 3000: 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a ARM.SUCC...GESF. 3010: 07 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 3020: 43 43 a0 19 93 47 45 53 46 0a 08 70 00 47 45 53 CC...GESF..p.GES 3030: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 24 93 47 Fp.PARM.SUCC.$.G 3040: 45 53 46 0a 09 7b 50 41 52 4d 0a ff 49 42 54 54 ESF..{PARM..IBTT 3050: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 3060: 43 a0 46 05 93 47 45 53 46 0a 0a 7b 50 41 52 4d C.F..GESF..{PARM 3070: 0a ff 49 50 53 43 a0 21 7b 7a 50 41 52 4d 0a 08 ..IPSC.!{zPARM.. 3080: 00 0a ff 00 7b 7a 50 41 52 4d 0a 08 00 0a ff 49 ....{zPARM.....I 3090: 50 41 54 76 49 50 41 54 7b 7a 50 41 52 4d 0a 14 PATvIPAT{zPARM.. 30a0: 00 0a 07 49 42 49 41 70 00 47 45 53 46 70 00 50 ...IBIAp.GESFp.P 30b0: 41 52 4d a4 53 55 43 43 a0 40 06 93 47 45 53 46 ARM.SUCC.@..GESF 30c0: 0a 0b 7b 7a 50 41 52 4d 01 00 01 49 46 31 45 a0 ..{zPARM...IF1E. 30d0: 21 7b 50 41 52 4d 0c 00 e0 01 00 00 7b 7a 50 41 !{PARM......{zPA 30e0: 52 4d 0a 0d 00 0a 0f 49 44 4d 53 70 00 49 44 4d RM.....IDMSp.IDM 30f0: 4d a1 16 7b 7a 50 41 52 4d 0a 11 00 0a 0f 49 44 M..{zPARM.....ID 3100: 4d 53 70 01 49 44 4d 4d 70 00 47 45 53 46 70 00 MSp.IDMMp.GESFp. 3110: 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 PARM.SUCC...GESF 3120: 0a 10 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 ..p.GESFp.PARM.S 3130: 55 43 43 a0 1f 93 47 45 53 46 0a 11 7d 50 41 52 UCC...GESF..}PAR 3140: 4d 0b 00 01 50 41 52 4d 70 00 47 45 53 46 a4 53 M...PARMp.GESF.S 3150: 55 43 43 a0 49 04 93 47 45 53 46 0a 12 a0 26 7b UCC.I..GESF...&{ 3160: 50 41 52 4d 01 00 a0 10 93 7a 50 41 52 4d 01 00 PARM.....zPARM.. 3170: 01 70 01 49 53 53 43 a1 0c 70 00 47 45 53 46 a4 .p.ISSC..p.GESF. 3180: 43 52 49 54 a1 07 70 00 49 53 53 43 70 00 47 45 CRIT..p.ISSCp.GE 3190: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 SFp.PARM.SUCC... 31a0: 47 45 53 46 0a 13 70 00 47 45 53 46 70 00 50 41 GESF..p.GESFp.PA 31b0: 52 4d a4 53 55 43 43 70 00 47 45 53 46 a4 53 55 RM.SUCCp.GESF.SU 31c0: 43 43 a0 11 93 47 45 46 43 0a 04 70 47 42 44 41 CC...GEFC..pGBDA 31d0: 47 58 46 43 a0 11 93 47 45 46 43 0a 06 70 53 42 GXFC...GEFC..pSB 31e0: 43 42 47 58 46 43 70 00 47 45 46 43 70 01 53 43 CBGXFCp.GEFCp.SC 31f0: 49 53 70 00 47 53 53 45 70 00 53 43 49 45 a4 00 ISp.GSSEp.SCIE.. 3200: 14 19 50 44 52 44 00 a0 0c 92 44 52 44 59 5b 22 ..PDRD....DRDY[" 3210: 41 53 4c 50 a4 92 44 52 44 59 14 1d 50 53 54 53 ASLP..DRDY..PSTS 3220: 00 a0 0e 94 43 53 54 53 0a 02 5b 22 41 53 4c 50 ....CSTS..["ASLP 3230: a4 93 43 53 54 53 0a 03 14 47 06 47 4e 4f 54 02 ..CSTS...G.GNOT. 3240: a0 07 50 44 52 44 a4 01 a0 07 50 53 54 53 a4 01 ..PDRD....PSTS.. 3250: 70 68 43 45 56 54 70 0a 03 43 53 54 53 a0 2c 90 phCEVTp..CSTS.,. 3260: 93 43 48 50 44 00 93 69 00 a0 18 91 94 4f 53 59 .CHPD..i.....OSY 3270: 53 0b d0 07 95 4f 53 59 53 0b d6 07 86 50 43 49 S....OSYS....PCI 3280: 30 69 a1 07 86 47 46 58 30 69 86 47 46 58 30 0a 0i...GFX0i.GFX0. 3290: 80 a0 0c 92 50 53 54 53 70 00 43 45 56 54 a4 00 ....PSTSp.CEVT.. 32a0: 14 13 47 48 44 53 01 70 68 54 49 44 58 a4 47 4e ..GHDS.phTIDX.GN 32b0: 4f 54 01 00 14 14 47 4c 49 44 01 70 68 43 4c 49 OT....GLID.phCLI 32c0: 44 a4 47 4e 4f 54 0a 02 00 14 15 47 44 43 4b 01 D.GNOT.....GDCK. 32d0: 70 68 43 44 43 4b a4 47 4e 4f 54 0a 04 0a 80 14 phCDCK.GNOT..... 32e0: 19 50 41 52 44 00 a0 0c 92 41 52 44 59 5b 22 41 .PARD....ARDY["A 32f0: 53 4c 50 a4 92 41 52 44 59 14 46 0c 41 49 4e 54 SLP..ARDY.F.AINT 3300: 02 a0 0e 92 7b 54 43 48 45 79 01 68 00 00 a4 01 ....{TCHEy.h.... 3310: a0 07 50 41 52 44 a4 01 a0 4c 05 93 68 0a 02 a0 ..PARD...L..h... 3320: 33 43 50 46 4d a0 0e 93 43 50 46 4d 01 70 0a 06 3CPFM...CPFM.p.. 3330: 50 46 49 54 a0 0f 93 43 50 46 4d 0a 06 70 0a 08 PFIT...CPFM..p.. 3340: 50 46 49 54 a0 0e 93 43 50 46 4d 0a 08 70 01 50 PFIT...CPFM..p.P 3350: 46 49 54 a1 0c 7f 50 46 49 54 0a 07 50 46 49 54 FIT...PFIT..PFIT 3360: 7d 50 46 49 54 0c 00 00 00 80 50 46 49 54 70 0a }PFIT.....PFITp. 3370: 04 41 53 4c 43 a1 42 04 a0 28 93 68 01 70 78 77 .ASLC.B..(.h.pxw 3380: 69 0a ff 00 0a 64 00 00 42 43 4c 50 7d 42 43 4c i....d..BCLP}BCL 3390: 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 41 53 4c P.....BCLPp..ASL 33a0: 43 a1 16 a0 10 93 68 00 70 69 41 4c 53 49 70 01 C.....h.piALSIp. 33b0: 41 53 4c 43 a1 03 a4 01 70 00 4c 42 50 43 a4 00 ASLC....p.LBPC.. 33c0: 10 41 36 5c 00 5b 80 49 4f 5f 54 01 0b 00 08 0a .A6\.[.IO_T..... 33d0: 10 5b 81 0e 49 4f 5f 54 01 00 40 04 54 52 50 30 .[..IO_T..@.TRP0 33e0: 08 5b 80 50 4d 49 4f 01 0b 00 10 0a 80 5b 81 28 .[.PMIO......[.( 33f0: 50 4d 49 4f 01 00 40 15 00 08 00 02 41 43 50 57 PMIO..@.....ACPW 3400: 01 00 45 0b 00 01 47 50 45 43 01 00 4e 10 00 09 ..E...GPEC..N... 3410: 53 43 49 53 01 00 06 5b 80 47 50 49 4f 01 0b 80 SCIS...[.GPIO... 3420: 11 0a 3c 5b 81 40 0c 47 50 49 4f 01 47 55 30 30 ..<[.@.GPIO.GU00 3430: 08 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 .GU01.GU02.GU03. 3440: 47 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 GIO0.GIO1.GIO2.G 3450: 49 4f 33 08 00 20 47 4c 30 30 08 47 4c 30 31 08 IO3.. GL00.GL01. 3460: 47 4c 30 32 08 00 03 47 50 32 37 01 47 50 32 38 GL02...GP27.GP28 3470: 01 00 03 00 40 04 47 42 30 30 08 47 42 30 31 08 ....@.GB00.GB01. 3480: 47 42 30 32 08 47 42 30 33 08 00 40 08 47 49 56 GB02.GB03..@.GIV 3490: 30 08 00 03 4c 50 4f 4c 01 00 04 47 49 56 32 08 0...LPOL...GIV2. 34a0: 47 49 56 33 08 47 55 30 34 08 47 55 30 35 08 47 GIV3.GU04.GU05.G 34b0: 55 30 36 08 47 55 30 37 08 47 49 4f 34 08 47 49 U06.GU07.GIO4.GI 34c0: 4f 35 08 47 49 4f 36 08 47 49 4f 37 08 00 05 47 O5.GIO6.GIO7...G 34d0: 50 33 37 01 00 02 47 4c 30 35 08 47 4c 30 36 08 P37...GL05.GL06. 34e0: 47 4c 30 37 08 5b 80 52 43 52 42 00 0c 00 c0 d1 GL07.[.RCRB..... 34f0: fe 0b 00 40 5b 81 48 05 52 43 52 42 13 00 80 00 ...@[.H.RCRB.... 3500: 08 00 80 00 10 00 80 02 02 48 50 41 53 02 00 05 .........HPAS... 3510: 48 50 41 45 01 00 48 09 00 01 50 41 54 44 01 53 HPAE..H...PATD.S 3520: 41 54 44 01 53 4d 42 44 01 48 44 41 44 01 00 0b ATD.SMBD.HDAD... 3530: 52 50 31 44 01 52 50 32 44 01 52 50 33 44 01 52 RP1D.RP2D.RP3D.R 3540: 50 34 44 01 52 50 35 44 01 52 50 36 44 01 08 5f P4D.RP5D.RP6D.._ 3550: 53 30 5f 12 05 03 00 00 00 08 5f 53 33 5f 12 07 S0_......._S3_.. 3560: 03 0a 05 0a 05 00 08 5f 53 34 5f 12 07 03 0a 06 ......._S4_..... 3570: 0a 06 00 08 5f 53 35 5f 12 07 03 0a 07 0a 07 00 ...._S5_........ 3580: 14 45 04 47 45 54 50 09 a0 0e 93 7b 68 0a 09 00 .E.GETP....{h... 3590: 00 a4 0c ff ff ff ff a0 0d 93 7b 68 0a 09 00 0a ..........{h.... 35a0: 08 a4 0b 84 03 7a 7b 68 0b 00 03 00 0a 08 60 7a .....z{h......`z 35b0: 7b 68 0b 00 30 00 0a 0c 61 a4 77 0a 1e 74 0a 09 {h..0...a.w..t.. 35c0: 72 60 61 00 00 00 14 30 47 44 4d 41 0d a0 23 68 r`a....0GDMA..#h 35d0: a0 07 90 69 6c a4 0a 14 a0 0e 90 6a 6c a4 77 74 ...il......jl.wt 35e0: 0a 04 6b 00 0a 0f 00 a4 77 74 0a 04 6b 00 0a 1e ..k.....wt..k... 35f0: 00 a4 0c ff ff ff ff 14 1f 47 45 54 54 09 a4 77 .........GETT..w 3600: 0a 1e 74 0a 09 72 7b 7a 68 0a 02 00 0a 03 00 7b ..t..r{zh......{ 3610: 68 0a 03 00 00 00 00 14 44 06 47 45 54 46 0b 08 h.......D.GETF.. 3620: 54 4d 50 46 00 a0 0c 68 7d 54 4d 50 46 01 54 4d TMPF...h}TMPF.TM 3630: 50 46 a0 11 7b 6a 0a 02 00 7d 54 4d 50 46 0a 02 PF..{j...}TMPF.. 3640: 54 4d 50 46 a0 0d 69 7d 54 4d 50 46 0a 04 54 4d TMPF..i}TMPF..TM 3650: 50 46 a0 11 7b 6a 0a 20 00 7d 54 4d 50 46 0a 08 PF..{j. .}TMPF.. 3660: 54 4d 50 46 a0 12 7b 6a 0b 00 40 00 7d 54 4d 50 TMPF..{j..@.}TMP 3670: 46 0a 10 54 4d 50 46 a4 54 4d 50 46 14 3d 53 45 F..TMPF.TMPF.=SE 3680: 54 50 0b a0 08 94 68 0a f0 a4 0a 08 a1 2d a0 27 TP....h......-.' 3690: 7b 69 0a 02 00 a0 10 90 92 94 68 0a 78 7b 6a 0a {i........h.x{j. 36a0: 02 00 a4 0b 01 23 a0 0f 90 92 94 68 0a b4 7b 6a .....#.....h..{j 36b0: 01 00 a4 0b 01 21 a4 0b 01 10 14 37 53 44 4d 41 .....!.....7SDMA 36c0: 09 a0 08 92 94 68 0a 14 a4 01 a0 09 92 94 68 0a .....h........h. 36d0: 1e a4 0a 02 a0 08 92 94 68 0a 2d a4 01 a0 09 92 ........h.-..... 36e0: 94 68 0a 3c a4 0a 02 a0 08 92 94 68 0a 5a a4 01 .h.<.......h.Z.. 36f0: a4 00 14 2f 53 45 54 54 0b a0 25 7b 69 0a 02 00 .../SETT..%{i... 3700: a0 0f 90 92 94 68 0a 78 7b 6a 0a 02 00 a4 0a 0b .....h.x{j...... 3710: a0 0e 90 92 94 68 0a b4 7b 6a 01 00 a4 0a 09 a4 .....h..{j...... 3720: 0a 04 5b 82 4b 04 48 44 45 46 08 5f 41 44 52 0c ..[.K.HDEF._ADR. 3730: 00 00 1b 00 5b 80 48 44 41 52 02 0a 4c 0a 10 5b ....[.HDAR..L..[ 3740: 81 22 48 44 41 52 02 44 43 4b 41 01 00 07 44 43 ."HDAR.DCKA...DC 3750: 4b 4d 01 00 06 44 43 4b 53 01 00 30 00 0f 50 4d KM...DCKS..0..PM 3760: 45 53 01 08 5f 50 52 57 12 06 02 0a 0d 0a 03 5b ES.._PRW.......[ 3770: 82 41 10 52 50 30 31 08 5f 41 44 52 0c 00 00 1c .A.RP01._ADR.... 3780: 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 45 04 .[.PXCS..@..[.E. 3790: 50 58 43 53 40 00 40 09 00 0d 4c 41 53 58 01 00 PXCS@.@...LASX.. 37a0: 32 41 42 50 58 01 00 02 50 44 43 58 01 00 02 50 2ABPX...PDCX...P 37b0: 44 53 58 01 00 01 4c 53 43 58 01 00 27 00 10 50 DSX...LSCX..'..P 37c0: 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 01 50 4d SPX..O<..HPSX.PM 37d0: 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 44 52 00 SX.[..PXSX._ADR. 37e0: 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 .A._PRT..3GPIC.. 37f0: 2c 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ,............... 3800: ff ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a ................ 3810: 12 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 .............E.. 3820: 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 .A.........^^.LP 3830: 43 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e CBLNKA........^^ 3840: 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff .LPCBLNKB....... 3850: 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 ..^^.LPCBLNKC... 3860: 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b ......^^.LPCBLNK 3870: 44 00 5b 82 41 10 52 50 30 32 08 5f 41 44 52 0c D.[.A.RP02._ADR. 3880: 01 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b ....[.PXCS..@..[ 3890: 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c 41 53 .E.PXCS@.@...LAS 38a0: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 38b0: 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 ..PDSX...LSCX..' 38c0: 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 ..PSPX..O<..HPSX 38d0: 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 .PMSX.[..PXSX._A 38e0: 44 52 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 DR..A._PRT..3GPI 38f0: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 11 12 C..,............ 3900: 09 04 0b ff ff 01 00 0a 12 12 0a 04 0b ff ff 0a ................ 3910: 02 00 0a 13 12 0a 04 0b ff ff 0a 03 00 0a 10 a1 ................ 3920: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3930: 2e 4c 50 43 42 4c 4e 4b 42 00 12 12 04 0b ff ff .LPCBLNKB....... 3940: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 3950: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 3960: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3970: 4c 4e 4b 41 00 5b 82 4d 11 52 50 30 33 08 5f 41 LNKA.[.M.RP03._A 3980: 44 52 0c 02 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3990: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 39a0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 39b0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 39c0: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 39d0: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 39e0: 08 5f 41 44 52 00 08 2e 50 58 53 58 5f 52 4d 56 ._ADR...PXSX_RMV 39f0: 01 08 2e 50 58 53 58 5f 50 52 57 12 06 02 0a 09 ...PXSX_PRW..... 3a00: 0a 03 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 ...A._PRT..3GPIC 3a10: a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 12 12 09 ..,............. 3a20: 04 0b ff ff 01 00 0a 13 12 0a 04 0b ff ff 0a 02 ................ 3a30: 00 0a 10 12 0a 04 0b ff ff 0a 03 00 0a 11 a1 45 ...............E 3a40: 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e ...A.........^^. 3a50: 4c 50 43 42 4c 4e 4b 43 00 12 12 04 0b ff ff 01 LPCBLNKC........ 3a60: 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0b ^^.LPCBLNKD..... 3a70: ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 ....^^.LPCBLNKA. 3a80: 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3a90: 4e 4b 42 00 5b 82 4f 11 52 50 30 34 08 5f 41 44 NKB.[.O.RP04._AD 3aa0: 52 0c 03 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a R.....[.PXCS..@. 3ab0: c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c .[.E.PXCS@.@...L 3ac0: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 3ad0: 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 X...PDSX...LSCX. 3ae0: 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 .'..PSPX..O<..HP 3af0: 53 58 01 50 4d 53 58 01 5b 82 29 50 58 53 58 08 SX.PMSX.[.)PXSX. 3b00: 5f 41 44 52 00 14 1d 5f 50 52 57 00 a0 0d 57 4b _ADR..._PRW...WK 3b10: 4c 4e a4 12 06 02 0a 09 0a 03 a1 08 a4 12 05 02 LN.............. 3b20: 0a 09 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 ....A._PRT..3GPI 3b30: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 C..,............ 3b40: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 3b50: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 a1 ................ 3b60: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3b70: 2e 4c 50 43 42 4c 4e 4b 44 00 12 12 04 0b ff ff .LPCBLNKD....... 3b80: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 .^^.LPCBLNKA.... 3b90: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 .....^^.LPCBLNKB 3ba0: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3bb0: 4c 4e 4b 43 00 5b 82 41 10 52 50 30 35 08 5f 41 LNKC.[.A.RP05._A 3bc0: 44 52 0c 04 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3bd0: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 3be0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 3bf0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 3c00: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 3c10: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 3c20: 08 5f 41 44 52 00 14 41 09 5f 50 52 54 00 a0 33 ._ADR..A._PRT..3 3c30: 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 GPIC..,......... 3c40: 0a 10 12 09 04 0b ff ff 01 00 0a 11 12 0a 04 0b ................ 3c50: ff ff 0a 02 00 0a 12 12 0a 04 0b ff ff 0a 03 00 ................ 3c60: 0a 13 a1 45 05 a4 12 41 05 04 12 12 04 0b ff ff ...E...A........ 3c70: 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 12 04 .^^.LPCBLNKA.... 3c80: 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3c90: 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3ca0: 4e 4b 43 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c NKC.........^^.L 3cb0: 50 43 42 4c 4e 4b 44 00 5b 82 41 10 52 50 30 36 PCBLNKD.[.A.RP06 3cc0: 08 5f 41 44 52 0c 05 00 1c 00 5b 80 50 58 43 53 ._ADR.....[.PXCS 3cd0: 02 0a 40 0a c0 5b 81 45 04 50 58 43 53 40 00 40 ..@..[.E.PXCS@.@ 3ce0: 09 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 ...LASX..2ABPX.. 3cf0: 02 50 44 43 58 01 00 02 50 44 53 58 01 00 01 4c .PDCX...PDSX...L 3d00: 53 43 58 01 00 27 00 10 50 53 50 58 01 00 4f 3c SCX..'..PSPX..O< 3d10: 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 ..HPSX.PMSX.[..P 3d20: 58 53 58 08 5f 41 44 52 00 14 41 09 5f 50 52 54 XSX._ADR..A._PRT 3d30: 00 a0 33 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ..3GPIC..,...... 3d40: ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a 12 12 ................ 3d50: 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ff ff ................ 3d60: 0a 03 00 0a 10 a1 45 05 a4 12 41 05 04 12 12 04 ......E...A..... 3d70: 0b ff ff 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3d80: 12 12 04 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 3d90: 4b 43 00 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 KC.........^^.LP 3da0: 43 42 4c 4e 4b 44 00 12 13 04 0b ff ff 0a 03 5e CBLNKD.........^ 3db0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 4d 06 55 ^.LPCBLNKA.[.M.U 3dc0: 53 42 31 08 5f 41 44 52 0c 00 00 1d 00 5b 80 55 SB1._ADR.....[.U 3dd0: 31 43 53 02 0a c4 0a 04 5b 81 0b 55 31 43 53 03 1CS.....[..U1CS. 3de0: 55 31 45 4e 02 08 5f 50 52 57 12 06 02 0a 03 0a U1EN.._PRW...... 3df0: 03 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 ..$_PSW...hp.ACP 3e00: 57 a0 0c 41 43 50 57 70 0a 03 55 31 45 4e a1 07 W..ACPWp..U1EN.. 3e10: 70 00 55 31 45 4e 14 09 5f 53 33 44 00 a4 0a 02 p.U1EN.._S3D.... 3e20: 14 09 5f 53 34 44 00 a4 0a 02 5b 82 4c 06 55 53 .._S4D....[.L.US 3e30: 42 32 08 5f 41 44 52 0c 01 00 1d 00 5b 80 55 32 B2._ADR.....[.U2 3e40: 43 53 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 CS.....[..U2CS.U 3e50: 32 45 4e 02 08 5f 50 52 57 12 06 02 0a 04 0a 03 2EN.._PRW....... 3e60: 14 23 5f 50 53 57 01 a0 14 68 70 01 41 43 50 57 .#_PSW...hp.ACPW 3e70: a0 0b 41 43 50 57 70 01 55 32 45 4e a1 07 70 00 ..ACPWp.U2EN..p. 3e80: 55 32 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 U2EN.._S3D...... 3e90: 5f 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 33 _S4D....[.M.USB3 3ea0: 08 5f 41 44 52 0c 02 00 1d 00 5b 80 55 32 43 53 ._ADR.....[.U2CS 3eb0: 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 33 45 .....[..U2CS.U3E 3ec0: 4e 02 08 5f 50 52 57 12 06 02 0a 0c 0a 03 14 24 N.._PRW........$ 3ed0: 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c _PSW...hp.ACPW.. 3ee0: 41 43 50 57 70 0a 03 55 33 45 4e a1 07 70 00 55 ACPWp..U3EN..p.U 3ef0: 33 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 3EN.._S3D......_ 3f00: 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 34 08 S4D....[.M.USB4. 3f10: 5f 41 44 52 0c 00 00 1a 00 5b 80 55 34 43 53 02 _ADR.....[.U4CS. 3f20: 0a c4 0a 04 5b 81 0b 55 34 43 53 03 55 34 45 4e ....[..U4CS.U4EN 3f30: 02 08 5f 50 52 57 12 06 02 0a 0e 0a 03 14 24 5f .._PRW........$_ 3f40: 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c 41 PSW...hp.ACPW..A 3f50: 43 50 57 70 0a 03 55 34 45 4e a1 07 70 00 55 34 CPWp..U4EN..p.U4 3f60: 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 EN.._S3D......_S 3f70: 34 44 00 a4 0a 02 5b 82 41 06 55 53 42 35 08 5f 4D....[.A.USB5._ 3f80: 41 44 52 0c 01 00 1a 00 5b 80 55 35 43 53 02 0a ADR.....[.U5CS.. 3f90: c4 0a 04 5b 81 0b 55 35 43 53 03 55 35 45 4e 02 ...[..U5CS.U5EN. 3fa0: 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 .$_PSW...hp.ACPW 3fb0: a0 0c 41 43 50 57 70 0a 03 55 35 45 4e a1 07 70 ..ACPWp..U5EN..p 3fc0: 00 55 35 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 .U5EN.._S3D..... 3fd0: 09 5f 53 34 44 00 a4 0a 02 5b 82 4b 0a 45 48 43 ._S4D....[.K.EHC 3fe0: 31 08 5f 41 44 52 0c 07 00 1d 00 5b 80 55 37 43 1._ADR.....[.U7C 3ff0: 53 02 0a 54 0a 04 5b 81 0d 55 37 43 53 03 00 0f S..T..[..U7CS... 4000: 50 4d 45 53 01 5b 82 4f 05 48 55 42 37 08 5f 41 PMES.[.O.HUB7._A 4010: 44 52 00 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 DR.[..PRT1._ADR. 4020: 5b 82 0c 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 [..PRT2._ADR..[. 4030: 0c 50 52 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 .PRT3._ADR..[..P 4040: 52 54 34 08 5f 41 44 52 0a 04 5b 82 0c 50 52 54 RT4._ADR..[..PRT 4050: 35 08 5f 41 44 52 0a 05 5b 82 0c 50 52 54 36 08 5._ADR..[..PRT6. 4060: 5f 41 44 52 0a 06 08 5f 50 52 57 12 06 02 0a 0d _ADR..._PRW..... 4070: 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 ...._S3D......_S 4080: 34 44 00 a4 0a 02 5b 82 4f 08 45 48 43 32 08 5f 4D....[.O.EHC2._ 4090: 41 44 52 0c 07 00 1a 00 5b 80 55 46 43 53 02 0a ADR.....[.UFCS.. 40a0: 54 0a 04 5b 81 0d 55 46 43 53 03 00 0f 50 4d 45 T..[..UFCS...PME 40b0: 53 01 5b 82 43 04 48 55 42 37 08 5f 41 44 52 00 S.[.C.HUB7._ADR. 40c0: 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 5b 82 0c [..PRT1._ADR.[.. 40d0: 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 0c 50 52 PRT2._ADR..[..PR 40e0: 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 52 54 34 T3._ADR..[..PRT4 40f0: 08 5f 41 44 52 0a 04 08 5f 50 52 57 12 06 02 0a ._ADR..._PRW.... 4100: 0d 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f ....._S3D......_ 4110: 53 34 44 00 a4 0a 02 5b 82 4a 06 50 43 49 42 08 S4D....[.J.PCIB. 4120: 5f 41 44 52 0c 00 00 1e 00 14 49 05 5f 50 52 54 _ADR......I._PRT 4130: 00 a0 21 47 50 49 43 a4 12 1a 02 12 0b 04 0c ff ..!GPIC......... 4140: ff 06 00 00 00 0a 16 12 0b 04 0c ff ff 06 00 01 ................ 4150: 00 0a 17 a1 2f a4 12 2c 02 12 14 04 0c ff ff 06 ..../..,........ 4160: 00 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 47 00 12 14 ..^^.LPCBLNKG... 4170: 04 0c ff ff 06 00 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 4180: 4b 48 00 5b 82 8d 2e 01 4c 50 43 42 08 5f 41 44 KH.[....LPCB._AD 4190: 52 0c 00 00 1f 00 5b 80 4c 50 43 30 02 0a 40 0a R.....[.LPC0..@. 41a0: c0 5b 81 4d 07 4c 50 43 30 00 00 40 10 50 41 52 .[.M.LPC0..@.PAR 41b0: 43 08 50 42 52 43 08 50 43 52 43 08 50 44 52 43 C.PBRC.PCRC.PDRC 41c0: 08 00 20 50 45 52 43 08 50 46 52 43 08 50 47 52 .. PERC.PFRC.PGR 41d0: 43 08 50 48 52 43 08 00 40 0a 43 4d 41 52 03 00 C.PHRC..@.CMAR.. 41e0: 01 43 4d 42 52 03 00 01 4c 50 54 52 02 00 06 43 .CMBR...LPTR...C 41f0: 4d 41 44 01 43 4d 42 44 01 4c 50 54 44 01 46 44 MAD.CMBD.LPTD.FD 4200: 44 44 01 00 2c 49 4f 52 32 10 00 02 4c 47 52 4d DD..,IOR2...LGRM 4210: 06 00 48 32 52 41 45 4e 01 00 0d 52 43 42 41 12 ..H2RAEN...RCBA. 4220: 5b 80 53 4d 49 30 01 0c 00 fe 00 00 0c 02 00 00 [.SMI0.......... 4230: 00 5b 81 0b 53 4d 49 30 00 53 4d 49 43 08 5b 80 .[..SMI0.SMIC.[. 4240: 53 4d 49 31 00 0c bd 2e 6e bf 0c 90 00 00 00 5b SMI1....n......[ 4250: 81 16 53 4d 49 31 00 42 43 4d 44 08 44 49 44 5f ..SMI1.BCMD.DID_ 4260: 20 49 4e 46 4f 40 40 5b 81 15 53 4d 49 31 00 01 INFO@@[..SMI1.. 4270: 01 00 00 28 49 4e 46 5f 08 49 4e 46 31 20 5b 01 ...(INF_.INF1 [. 4280: 50 53 4d 58 00 14 27 50 48 53 53 01 5b 23 50 53 PSMX..'PHSS.[#PS 4290: 4d 58 ff ff 70 0a 80 42 43 4d 44 70 68 44 49 44 MX..p..BCMDphDID 42a0: 5f 70 00 53 4d 49 43 5b 27 50 53 4d 58 5b 82 41 _p.SMIC['PSMX[.A 42b0: 0a 4c 4e 4b 41 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKA._HID.A.... 42c0: 5f 55 49 44 01 14 0d 5f 44 49 53 08 70 0a 80 50 _UID..._DIS.p..P 42d0: 41 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ARC._PRS....#... 42e0: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 41 11 09 y..8_CRS..RTLA.. 42f0: 0a 06 23 00 00 18 79 00 8b 52 54 4c 41 01 49 52 ..#...y..RTLA.IR 4300: 51 30 70 00 49 52 51 30 79 01 7b 50 41 52 43 0a Q0p.IRQ0y.{PARC. 4310: 0f 00 49 52 51 30 a4 52 54 4c 41 14 1b 5f 53 52 ..IRQ0.RTLA.._SR 4320: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 4330: 60 70 60 50 41 52 43 14 18 5f 53 54 41 08 a0 0c `p`PARC.._STA... 4340: 7b 50 41 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PARC........... 4350: 5b 82 42 0a 4c 4e 4b 42 08 5f 48 49 44 0c 41 d0 [.B.LNKB._HID.A. 4360: 0c 0f 08 5f 55 49 44 0a 02 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4370: 70 0a 80 50 42 52 43 08 5f 50 52 53 11 09 0a 06 p..PBRC._PRS.... 4380: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4390: 4c 42 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LB....#...y..RTL 43a0: 42 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 B.IRQ0p.IRQ0y.{P 43b0: 42 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 42 14 BRC...IRQ0.RTLB. 43c0: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 43d0: 51 30 60 76 60 70 60 50 42 52 43 14 18 5f 53 54 Q0`v`p`PBRC.._ST 43e0: 41 08 a0 0c 7b 50 42 52 43 0a 80 00 a4 0a 09 a1 A...{PBRC....... 43f0: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 43 08 5f 48 49 ....[.B.LNKC._HI 4400: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 03 14 0d 5f D.A...._UID...._ 4410: 44 49 53 08 70 0a 80 50 43 52 43 08 5f 50 52 53 DIS.p..PCRC._PRS 4420: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 4430: 08 08 52 54 4c 43 11 09 0a 06 23 00 00 18 79 00 ..RTLC....#...y. 4440: 8b 52 54 4c 43 01 49 52 51 30 70 00 49 52 51 30 .RTLC.IRQ0p.IRQ0 4450: 79 01 7b 50 43 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PCRC...IRQ0.R 4460: 54 4c 43 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLC.._SRS..h.IRQ 4470: 30 82 49 52 51 30 60 76 60 70 60 50 43 52 43 14 0.IRQ0`v`p`PCRC. 4480: 18 5f 53 54 41 08 a0 0c 7b 50 43 52 43 0a 80 00 ._STA...{PCRC... 4490: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 44 ........[.B.LNKD 44a0: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 44b0: 04 14 0d 5f 44 49 53 08 70 0a 80 50 44 52 43 08 ..._DIS.p..PDRC. 44c0: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 44d0: 5f 43 52 53 08 08 52 54 4c 44 11 09 0a 06 23 00 _CRS..RTLD....#. 44e0: 00 18 79 00 8b 52 54 4c 44 01 49 52 51 30 70 00 ..y..RTLD.IRQ0p. 44f0: 49 52 51 30 79 01 7b 50 44 52 43 0a 0f 00 49 52 IRQ0y.{PDRC...IR 4500: 51 30 a4 52 54 4c 44 14 1b 5f 53 52 53 09 8b 68 Q0.RTLD.._SRS..h 4510: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 4520: 44 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 44 52 DRC.._STA...{PDR 4530: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a C...........[.B. 4540: 4c 4e 4b 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f LNKE._HID.A...._ 4550: 55 49 44 0a 05 14 0d 5f 44 49 53 08 70 0a 80 50 UID...._DIS.p..P 4560: 45 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ERC._PRS....#... 4570: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 45 11 09 y..8_CRS..RTLE.. 4580: 0a 06 23 00 00 18 79 00 8b 52 54 4c 45 01 49 52 ..#...y..RTLE.IR 4590: 51 30 70 00 49 52 51 30 79 01 7b 50 45 52 43 0a Q0p.IRQ0y.{PERC. 45a0: 0f 00 49 52 51 30 a4 52 54 4c 45 14 1b 5f 53 52 ..IRQ0.RTLE.._SR 45b0: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 45c0: 60 70 60 50 45 52 43 14 18 5f 53 54 41 08 a0 0c `p`PERC.._STA... 45d0: 7b 50 45 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PERC........... 45e0: 5b 82 42 0a 4c 4e 4b 46 08 5f 48 49 44 0c 41 d0 [.B.LNKF._HID.A. 45f0: 0c 0f 08 5f 55 49 44 0a 06 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4600: 70 0a 80 50 46 52 43 08 5f 50 52 53 11 09 0a 06 p..PFRC._PRS.... 4610: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4620: 4c 46 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LF....#...y..RTL 4630: 46 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 F.IRQ0p.IRQ0y.{P 4640: 46 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 46 14 FRC...IRQ0.RTLF. 4650: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 4660: 51 30 60 76 60 70 60 50 46 52 43 14 18 5f 53 54 Q0`v`p`PFRC.._ST 4670: 41 08 a0 0c 7b 50 46 52 43 0a 80 00 a4 0a 09 a1 A...{PFRC....... 4680: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 47 08 5f 48 49 ....[.B.LNKG._HI 4690: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 0d 5f D.A...._UID...._ 46a0: 44 49 53 08 70 0a 80 50 47 52 43 08 5f 50 52 53 DIS.p..PGRC._PRS 46b0: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 46c0: 08 08 52 54 4c 47 11 09 0a 06 23 00 00 18 79 00 ..RTLG....#...y. 46d0: 8b 52 54 4c 47 01 49 52 51 30 70 00 49 52 51 30 .RTLG.IRQ0p.IRQ0 46e0: 79 01 7b 50 47 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PGRC...IRQ0.R 46f0: 54 4c 47 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLG.._SRS..h.IRQ 4700: 30 82 49 52 51 30 60 76 60 70 60 50 47 52 43 14 0.IRQ0`v`p`PGRC. 4710: 18 5f 53 54 41 08 a0 0c 7b 50 47 52 43 0a 80 00 ._STA...{PGRC... 4720: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 48 ........[.B.LNKH 4730: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 4740: 08 14 0d 5f 44 49 53 08 70 0a 80 50 48 52 43 08 ..._DIS.p..PHRC. 4750: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 4760: 5f 43 52 53 08 08 52 54 4c 48 11 09 0a 06 23 00 _CRS..RTLH....#. 4770: 00 18 79 00 8b 52 54 4c 48 01 49 52 51 30 70 00 ..y..RTLH.IRQ0p. 4780: 49 52 51 30 79 01 7b 50 48 52 43 0a 0f 00 49 52 IRQ0y.{PHRC...IR 4790: 51 30 a4 52 54 4c 48 14 1b 5f 53 52 53 09 8b 68 Q0.RTLH.._SRS..h 47a0: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 47b0: 48 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 48 52 HRC.._STA...{PHR 47c0: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 3d 44 C...........[.=D 47d0: 4d 41 43 08 5f 48 49 44 0c 41 d0 02 00 08 5f 43 MAC._HID.A...._C 47e0: 52 53 11 28 0a 25 47 01 00 00 00 00 01 20 47 01 RS.(.%G...... G. 47f0: 81 00 81 00 01 11 47 01 93 00 93 00 01 0d 47 01 ......G.......G. 4800: c0 00 c0 00 01 20 2a 10 01 79 00 5b 82 26 46 57 ..... *..y.[.&FW 4810: 48 44 08 5f 48 49 44 0c 25 d4 08 00 08 5f 43 52 HD._HID.%...._CR 4820: 53 11 11 0a 0e 86 09 00 00 00 00 00 ff 00 00 00 S............... 4830: 01 79 00 5b 82 40 0b 48 50 45 54 08 5f 48 49 44 .y.[.@.HPET._HID 4840: 0c 41 d0 01 03 08 5f 43 49 44 0c 41 d0 0c 01 08 .A...._CID.A.... 4850: 42 55 46 30 11 11 0a 0e 86 09 00 00 00 00 d0 fe BUF0............ 4860: 00 04 00 00 79 00 14 27 5f 53 54 41 00 a0 13 92 ....y..'_STA.... 4870: 95 4f 53 59 53 0b d1 07 a0 08 48 50 41 45 a4 0a .OSYS.....HPAE.. 4880: 0f a1 0a a0 08 48 50 41 45 a4 0a 0b a4 00 14 46 .....HPAE......F 4890: 05 5f 43 52 53 08 a0 49 04 48 50 41 45 8a 42 55 ._CRS..I.HPAE.BU 48a0: 46 30 0a 04 48 50 54 30 a0 11 93 48 50 41 53 01 F0..HPT0...HPAS. 48b0: 70 0c 00 10 d0 fe 48 50 54 30 a0 12 93 48 50 41 p.....HPT0...HPA 48c0: 53 0a 02 70 0c 00 20 d0 fe 48 50 54 30 a0 12 93 S..p.. ..HPT0... 48d0: 48 50 41 53 0a 03 70 0c 00 30 d0 fe 48 50 54 30 HPAS..p..0..HPT0 48e0: a4 42 55 46 30 5b 82 45 0a 49 50 49 43 08 5f 48 .BUF0[.E.IPIC._H 48f0: 49 44 0b 41 d0 08 5f 43 52 53 11 41 09 0a 8d 47 ID.A.._CRS.A...G 4900: 01 20 00 20 00 01 02 47 01 24 00 24 00 01 02 47 . . ...G.$.$...G 4910: 01 28 00 28 00 01 02 47 01 2c 00 2c 00 01 02 47 .(.(...G.,.,...G 4920: 01 30 00 30 00 01 02 47 01 34 00 34 00 01 02 47 .0.0...G.4.4...G 4930: 01 38 00 38 00 01 02 47 01 3c 00 3c 00 01 02 47 .8.8...G.<.<...G 4940: 01 a0 00 a0 00 01 02 47 01 a4 00 a4 00 01 02 47 .......G.......G 4950: 01 a8 00 a8 00 01 02 47 01 ac 00 ac 00 01 02 47 .......G.......G 4960: 01 b0 00 b0 00 01 02 47 01 b4 00 b4 00 01 02 47 .......G.......G 4970: 01 b8 00 b8 00 01 02 47 01 bc 00 bc 00 01 02 47 .......G.......G 4980: 01 d0 04 d0 04 01 02 22 04 00 79 00 5b 82 25 4d ......."..y.[.%M 4990: 41 54 48 08 5f 48 49 44 0c 41 d0 0c 04 08 5f 43 ATH._HID.A...._C 49a0: 52 53 11 10 0a 0d 47 01 f0 00 f0 00 01 01 22 00 RS....G.......". 49b0: 20 79 00 5b 82 4b 09 4c 44 52 43 08 5f 48 49 44 y.[.K.LDRC._HID 49c0: 0c 41 d0 0c 02 08 5f 55 49 44 0a 02 08 5f 43 52 .A...._UID..._CR 49d0: 53 11 4e 07 0a 7a 47 01 2e 00 2e 00 01 02 47 01 S.N..zG.......G. 49e0: 4e 00 4e 00 01 02 47 01 61 00 61 00 01 01 47 01 N.N...G.a.a...G. 49f0: 63 00 63 00 01 01 47 01 65 00 65 00 01 01 47 01 c.c...G.e.e...G. 4a00: 67 00 67 00 01 01 47 01 80 00 80 00 01 01 47 01 g.g...G.......G. 4a10: 92 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 ......G.......G. 4a20: 80 06 80 06 01 20 47 01 00 08 00 08 01 10 47 01 ..... G.......G. 4a30: 00 10 00 10 01 80 47 01 80 11 80 11 01 40 47 01 ......G......@G. 4a40: 00 fe 00 fe 01 01 47 01 00 ff 00 ff 01 80 79 00 ......G.......y. 4a50: 5b 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b [.%RTC_._HID.A.. 4a60: 00 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 .._CRS....G.p.p. 4a70: 01 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f .."..y.[.-TIMR._ 4a80: 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a HID.A...._CRS... 4a90: 15 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 .G.@.@...G.P.P.. 4aa0: 04 22 01 00 79 00 5b 82 32 41 43 41 44 08 5f 48 ."..y.[.2ACAD._H 4ab0: 49 44 0d 41 43 50 49 30 30 30 33 00 08 5f 50 43 ID.ACPI0003.._PC 4ac0: 4c 12 06 01 5f 53 42 5f 14 11 5f 50 53 52 00 70 L..._SB_.._PSR.p 4ad0: 01 41 43 50 57 a4 41 43 50 57 14 1a 45 43 4f 4b .ACPW.ACPW..ECOK 4ae0: 00 a0 0f 93 5e 2e 45 43 30 5f 5a 30 30 39 01 a4 ....^.EC0_Z009.. 4af0: 01 a1 03 a4 00 5b 82 4e 6f 45 43 30 5f 08 5f 48 .....[.NoEC0_._H 4b00: 49 44 0c 41 d0 0c 09 08 5f 47 50 45 0a 1c 08 5a ID.A...._GPE...Z 4b10: 30 30 39 00 08 5f 43 52 53 11 15 0a 12 47 01 62 009.._CRS....G.b 4b20: 00 62 00 01 01 47 01 66 00 66 00 01 01 79 00 14 .b...G.f.f...y.. 4b30: 3b 5f 52 45 47 02 a0 34 93 68 0a 03 70 69 5a 30 ;_REG..4.h..piZ0 4b40: 30 39 a0 28 5b 12 5f 4f 53 49 60 70 00 42 54 44 09.([._OSI`p.BTD 4b50: 53 a0 19 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 S.._OSI.Windows 4b60: 32 30 30 36 00 70 01 42 54 44 53 5b 80 45 52 41 2006.p.BTDS[.ERA 4b70: 4d 03 00 0a ff 5b 81 4e 2e 45 52 41 4d 11 00 40 M....[.N.ERAM..@ 4b80: 30 53 4d 50 52 08 53 4d 53 54 08 53 4d 41 44 08 0SMPR.SMST.SMAD. 4b90: 53 4d 43 4d 08 53 4d 44 30 40 10 42 43 4e 54 08 SMCM.SMD0@.BCNT. 4ba0: 53 4d 41 41 18 00 40 04 43 48 47 4d 10 43 48 47 SMAA..@.CHGM.CHG 4bb0: 53 10 45 4e 49 44 08 45 4e 49 42 08 45 4e 44 44 S.ENID.ENIB.ENDD 4bc0: 08 43 48 47 56 08 43 48 47 41 10 42 41 4c 30 01 .CHGV.CHGA.BAL0. 4bd0: 42 41 4c 31 01 42 41 4c 32 01 42 41 4c 33 01 42 BAL1.BAL2.BAL3.B 4be0: 42 43 30 01 42 42 43 31 01 42 42 43 32 01 42 42 BC0.BBC1.BBC2.BB 4bf0: 43 33 01 00 08 50 48 44 44 01 49 46 44 44 01 49 C3...PHDD.IFDD.I 4c00: 4f 44 44 01 53 48 44 44 01 53 31 32 30 01 45 46 ODD.SHDD.S120.EF 4c10: 44 44 01 43 52 54 44 01 53 50 57 52 01 53 42 54 DD.CRTD.SPWR.SBT 4c20: 4e 01 56 49 44 4f 01 56 4f 4c 44 01 56 4f 4c 55 N.VIDO.VOLD.VOLU 4c30: 01 4d 55 54 45 01 43 4f 4e 54 01 42 52 47 54 01 .MUTE.CONT.BRGT. 4c40: 48 42 54 4e 01 53 34 53 54 01 53 4b 45 59 01 42 HBTN.S4ST.SKEY.B 4c50: 4b 45 59 01 54 4f 55 50 01 46 4e 42 4e 01 4c 49 KEY.TOUP.FNBN.LI 4c60: 44 46 01 44 49 47 4d 01 55 57 41 4b 01 00 08 44 DF.DIGM.UWAK...D 4c70: 4b 53 50 01 44 4b 49 4e 01 44 4b 49 44 01 44 4b KSP.DKIN.DKID.DK 4c80: 4f 4b 01 00 04 44 4b 50 57 01 00 07 42 54 4e 53 OK...DKPW...BTNS 4c90: 08 53 31 4c 44 01 53 33 4c 44 01 56 47 41 51 01 .S1LD.S3LD.VGAQ. 4ca0: 50 43 4d 51 01 50 43 4d 52 01 41 44 50 54 01 53 PCMQ.PCMR.ADPT.S 4cb0: 4c 4c 53 01 53 59 53 37 01 50 57 41 4b 01 4d 57 LLS.SYS7.PWAK.MW 4cc0: 41 4b 01 4c 57 41 4b 01 00 05 00 28 54 43 4e 4c AK.LWAK....(TCNL 4cd0: 08 54 4d 50 49 08 54 4d 53 44 08 46 41 53 4e 04 .TMPI.TMSD.FASN. 4ce0: 46 41 53 55 04 50 43 56 4c 04 00 02 53 57 54 4f FASU.PCVL...SWTO 4cf0: 01 48 57 54 4f 01 4d 4f 44 45 01 46 41 4e 53 02 .HWTO.MODE.FANS. 4d00: 49 4e 49 54 01 46 41 4e 31 01 46 41 4e 32 01 46 INIT.FAN1.FAN2.F 4d10: 41 4e 54 01 53 4b 4e 4d 01 43 54 4d 50 08 4c 49 ANT.SKNM.CTMP.LI 4d20: 44 45 01 50 4d 45 45 01 50 57 42 45 01 52 4e 47 DE.PMEE.PWBE.RNG 4d30: 45 01 42 54 57 45 01 44 43 4b 45 01 00 02 53 4b E.BTWE.DCKE...SK 4d40: 54 58 08 53 4b 54 42 08 53 4b 54 43 08 53 4b 54 TX.SKTB.SKTC.SKT 4d50: 41 08 00 08 48 41 50 4c 02 48 41 50 52 01 00 05 A...HAPL.HAPR... 4d60: 42 54 44 54 01 42 54 50 57 01 42 54 44 53 01 42 BTDT.BTPW.BTDS.B 4d70: 54 50 53 01 42 54 53 57 01 42 54 57 4b 01 42 54 TPS.BTSW.BTWK.BT 4d80: 4c 44 01 00 01 42 52 54 53 08 43 4e 54 53 08 57 LD...BRTS.CNTS.W 4d90: 4c 41 54 01 42 54 41 54 01 57 4c 45 58 01 42 54 LAT.BTAT.WLEX.BT 4da0: 45 58 01 4b 4c 53 57 01 57 4c 4f 4b 01 00 02 50 EX.KLSW.WLOK...P 4db0: 54 49 44 08 43 50 55 54 08 45 50 4b 54 08 47 48 TID.CPUT.EPKT.GH 4dc0: 49 44 08 00 04 42 4d 46 30 03 42 54 59 30 01 42 ID...BMF0.BTY0.B 4dd0: 53 54 30 08 42 52 43 30 10 42 53 4e 30 10 42 50 ST0.BRC0.BSN0.BP 4de0: 56 30 10 42 44 56 30 10 42 44 43 30 10 42 46 43 V0.BDV0.BDC0.BFC 4df0: 30 10 47 41 55 30 08 43 59 43 30 08 42 50 43 30 0.GAU0.CYC0.BPC0 4e00: 10 42 41 43 30 10 42 41 54 30 08 42 54 57 30 10 .BAC0.BAT0.BTW0. 4e10: 42 44 4e 30 08 00 40 04 00 04 42 4d 46 31 03 42 BDN0..@...BMF1.B 4e20: 54 59 31 01 42 53 54 31 08 42 52 43 31 10 42 53 TY1.BST1.BRC1.BS 4e30: 4e 31 10 42 50 56 31 10 42 44 56 31 10 42 44 43 N1.BPV1.BDV1.BDC 4e40: 31 10 42 46 43 31 10 47 41 55 31 08 43 59 43 31 1.BFC1.GAU1.CYC1 4e50: 08 42 50 43 31 10 42 41 43 31 10 42 41 54 31 08 .BPC1.BAC1.BAT1. 4e60: 42 54 57 31 10 14 37 5f 51 31 31 00 70 0a 87 50 BTW1..7_Q11.p..P 4e70: 38 30 48 a0 13 49 47 44 53 5e 5e 5e 2e 47 46 58 80H..IGDS^^^.GFX 4e80: 30 42 52 54 4e 0a 87 a1 15 86 5e 5e 5e 2f 03 50 0BRTN.....^^^/.P 4e90: 45 47 50 56 47 41 5f 4c 43 44 5f 0a 87 14 37 5f EGPVGA_LCD_...7_ 4ea0: 51 31 32 00 70 0a 86 50 38 30 48 a0 13 49 47 44 Q12.p..P80H..IGD 4eb0: 53 5e 5e 5e 2e 47 46 58 30 42 52 54 4e 0a 86 a1 S^^^.GFX0BRTN... 4ec0: 15 86 5e 5e 5e 2f 03 50 45 47 50 56 47 41 5f 4c ..^^^/.PEGPVGA_L 4ed0: 43 44 5f 0a 86 14 40 05 5f 51 31 43 00 70 0d 3d CD_...@._Q1C.p.= 4ee0: 3d 3d 3d 3d 51 55 45 52 59 5f 31 43 3d 3d 3d 3d ====QUERY_1C==== 4ef0: 3d 00 5b 31 a0 31 56 49 44 4f a0 12 49 47 44 53 =.[1.1VIDO..IGDS 4f00: 5e 5e 5e 2e 47 46 58 30 47 48 44 53 00 a1 12 5e ^^^.GFX0GHDS...^ 4f10: 5e 5e 2f 03 50 45 47 50 56 47 41 5f 44 53 53 57 ^^/.PEGPVGA_DSSW 4f20: 70 00 56 49 44 4f 14 21 5f 51 31 44 00 70 0d 3d p.VIDO.!_Q1D.p.= 4f30: 3d 3d 3d 3d 51 55 45 52 59 5f 31 44 3d 3d 3d 3d ====QUERY_1D==== 4f40: 3d 00 5b 31 50 43 4c 4b 14 21 5f 51 31 45 00 70 =.[1PCLK.!_Q1E.p 4f50: 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 31 45 3d 3d .=====QUERY_1E== 4f60: 3d 3d 3d 00 5b 31 50 43 4c 4b 14 39 5f 51 32 35 ===.[1PCLK.9_Q25 4f70: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 35 .p.=====QUERY_25 4f80: 3d 3d 3d 3d 3d 00 5b 31 5b 22 0b e8 03 86 5e 5e =====.[1["....^^ 4f90: 42 41 54 31 0a 81 5b 22 0b e8 03 86 5e 5e 42 41 BAT1..["....^^BA 4fa0: 54 31 0a 80 14 2f 5f 51 33 34 00 70 0d 3d 3d 3d T1.../_Q34.p.=== 4fb0: 3d 3d 51 55 45 52 59 5f 33 34 3d 3d 3d 3d 3d 00 ==QUERY_34=====. 4fc0: 5b 31 a0 11 42 4b 45 59 50 48 53 53 0a 71 70 00 [1..BKEYPHSS.qp. 4fd0: 42 4b 45 59 14 32 5f 51 33 37 00 70 0d 3d 3d 3d BKEY.2_Q37.p.=== 4fe0: 3d 3d 51 55 45 52 59 5f 33 37 3d 3d 3d 3d 3d 00 ==QUERY_37=====. 4ff0: 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 03 86 5e [1.ACAD..["....^ 5000: 5e 42 41 54 31 0a 80 14 32 5f 51 33 38 00 70 0d ^BAT1...2_Q38.p. 5010: 3d 3d 3d 3d 3d 51 55 45 52 59 5f 33 38 3d 3d 3d =====QUERY_38=== 5020: 3d 3d 00 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 ==.[1.ACAD..[".. 5030: 03 86 5e 5e 42 41 54 31 0a 80 14 29 5f 51 32 44 ..^^BAT1...)_Q2D 5040: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 44 .p.=====QUERY_2D 5050: 3d 3d 3d 3d 3d 00 5b 31 70 00 44 54 53 4d 54 52 =====.[1p.DTSMTR 5060: 41 50 0a 46 14 29 5f 51 32 45 00 70 0d 3d 3d 3d AP.F.)_Q2E.p.=== 5070: 3d 3d 51 55 45 52 59 5f 32 45 3d 3d 3d 3d 3d 00 ==QUERY_2E=====. 5080: 5b 31 70 01 44 54 53 4d 54 52 41 50 0a 46 5b 80 [1p.DTSMTRAP.F[. 5090: 43 43 4c 4b 01 0b 10 10 0a 04 5b 81 20 43 43 4c CCLK......[. CCL 50a0: 4b 03 00 01 44 55 54 59 03 54 48 45 4e 01 00 03 K...DUTY.THEN... 50b0: 46 54 54 5f 01 00 08 54 53 54 53 01 5b 80 45 43 FTT_...TSTS.[.EC 50c0: 52 4d 03 00 0a ff 5b 81 44 04 45 43 52 4d 11 00 RM....[.D.ECRM.. 50d0: 40 4a 45 52 49 42 10 45 52 42 44 08 00 48 0a 53 @JERIB.ERBD..H.S 50e0: 44 54 4d 08 46 53 53 4e 04 46 41 4e 55 04 50 54 DTM.FSSN.FANU.PT 50f0: 56 4c 03 00 04 54 54 48 52 01 00 48 06 50 4a 49 VL...TTHR..H.PJI 5100: 44 08 00 08 00 48 1d 52 46 52 44 10 5b 01 46 41 D....H.RFRD.[.FA 5110: 4d 58 00 14 22 46 41 4e 47 01 5b 23 46 41 4d 58 MX.."FANG.[#FAMX 5120: ff ff 70 68 45 52 49 42 70 45 52 42 44 60 5b 27 ..phERIBpERBD`[' 5130: 46 41 4d 58 a4 60 14 22 46 41 4e 57 02 5b 23 46 FAMX.`."FANW.[#F 5140: 41 4d 58 ff ff 70 68 45 52 49 42 70 69 45 52 42 AMX..phERIBpiERB 5150: 44 5b 27 46 41 4d 58 a4 69 14 09 54 55 56 52 01 D['FAMX.i..TUVR. 5160: a4 0a 03 14 2e 54 48 52 4f 01 a0 09 93 68 00 a4 .....THRO....h.. 5170: 54 48 45 4e a1 1d a0 09 93 68 01 a4 44 55 54 59 THEN.....h..DUTY 5180: a1 11 a0 0a 93 68 0a 02 a4 54 54 48 52 a1 04 a4 .....h...TTHR... 5190: 0a ff 14 2a 43 4c 43 4b 01 a0 10 93 68 00 70 00 ...*CLCK....h.p. 51a0: 54 48 45 4e 70 00 46 54 54 5f a1 0d 70 68 44 55 THENp.FTT_..phDU 51b0: 54 59 70 01 54 48 45 4e a4 54 48 45 4e 14 37 50 TYp.THEN.THEN.7P 51c0: 43 4c 4b 00 70 50 54 56 4c 60 a0 10 93 60 00 70 CLK.pPTVL`...`.p 51d0: 00 54 48 45 4e 70 00 46 54 54 5f a1 19 76 60 70 .THENp.FTT_..v`p 51e0: 80 60 00 61 7b 61 0a 07 61 70 61 44 55 54 59 70 .`.a{a..apaDUTYp 51f0: 01 54 48 45 4e 5b 82 4b 22 42 41 54 31 08 5f 48 .THEN[.K"BAT1._H 5200: 49 44 0c 41 d0 0c 0a 08 5f 55 49 44 01 08 5f 50 ID.A...._UID.._P 5210: 43 4c 12 06 01 5f 53 42 5f 14 39 5f 53 54 41 00 CL..._SB_.9_STA. 5220: a0 29 90 45 43 4f 4b 93 45 43 44 59 00 a0 13 5e .).ECOK.ECDY...^ 5230: 5e 2e 45 43 30 5f 42 41 4c 30 5b 22 0a 14 a4 0a ^.EC0_BAL0[".... 5240: 1f a1 08 5b 22 0a 14 a4 0a 0f a1 08 5b 22 0a 14 ...[".......[".. 5250: a4 0a 1f 14 48 10 5f 42 49 46 00 08 53 54 41 54 ....H._BIF..STAT 5260: 12 3a 0d 01 0b a0 0f 0b a0 0f 01 0b 5c 2b 0b a4 .:..........\+.. 5270: 01 0a 9c 0b 08 01 0b c4 0e 0d 50 41 33 34 36 35 ..........PA3465 5280: 55 20 00 0d 33 36 35 38 51 00 0d 4c 69 2d 49 6f U ..3658Q..Li-Io 5290: 6e 00 0d 43 4f 4d 50 41 4c 20 00 a0 4b 07 90 45 n..COMPAL ..K..E 52a0: 43 4f 4b 93 45 43 44 59 00 70 5e 5e 2e 45 43 30 COK.ECDY.p^^.EC0 52b0: 5f 42 44 4e 30 60 a0 23 93 60 0a 08 70 0a b4 88 _BDN0`.#.`..p... 52c0: 53 54 41 54 0a 06 00 70 0d 50 41 33 34 35 37 55 STAT...p.PA3457U 52d0: 20 00 88 53 54 41 54 0a 09 00 a0 24 93 60 0a 20 ..STAT....$.`. 52e0: 70 0b 02 01 88 53 54 41 54 0a 06 00 70 0d 50 41 p....STAT...p.PA 52f0: 33 34 35 37 55 20 00 88 53 54 41 54 0a 09 00 5b 3457U ..STAT...[ 5300: 22 0a 14 70 5e 5e 2e 45 43 30 5f 42 44 43 30 42 "..p^^.EC0_BDC0B 5310: 46 43 31 5b 22 0a 14 a1 12 70 0d 4c 69 2d 49 6f FC1["....p.Li-Io 5320: 6e 00 88 53 54 41 54 0a 0b 00 a0 2c 42 46 43 31 n..STAT....,BFC1 5330: 78 42 46 43 31 0a 64 60 61 77 61 0a 64 61 70 61 xBFC1.d`awa.dapa 5340: 42 46 43 31 70 61 88 53 54 41 54 01 00 70 61 88 BFC1pa.STAT..pa. 5350: 53 54 41 54 0a 02 00 a4 53 54 41 54 14 45 0c 5f STAT....STAT.E._ 5360: 42 53 54 00 08 50 42 53 54 12 10 04 00 0c ff ff BST..PBST....... 5370: ff ff 0c ff ff ff ff 0b 5c 2b 70 0b 5c 2b 63 a0 ........\+p.\+c. 5380: 38 90 45 43 4f 4b 93 45 43 44 59 00 5b 22 0a 14 8.ECOK.ECDY.[".. 5390: 70 5e 5e 2e 45 43 30 5f 42 53 54 30 42 53 54 31 p^^.EC0_BST0BST1 53a0: 5b 22 0a 14 70 5e 5e 2e 45 43 30 5f 47 41 55 30 ["..p^^.EC0_GAU0 53b0: 42 47 55 31 5b 22 0a 14 a0 15 42 46 43 31 77 42 BGU1["....BFC1wB 53c0: 47 55 31 42 46 43 31 62 78 62 0a 64 64 62 a1 09 GU1BFC1bxb.ddb.. 53d0: 77 42 47 55 31 0a 28 62 70 42 53 54 31 88 50 42 wBGU1.(bpBST1.PB 53e0: 53 54 00 00 70 00 88 50 42 53 54 01 00 70 62 88 ST..p..PBST..pb. 53f0: 50 42 53 54 0a 02 00 70 63 88 50 42 53 54 0a 03 PBST...pc.PBST.. 5400: 00 a0 1b 94 45 43 44 59 00 76 45 43 44 59 a0 0e ....ECDY.vECDY.. 5410: 93 45 43 44 59 00 86 42 41 54 31 0a 80 a4 50 42 .ECDY..BAT1...PB 5420: 53 54 5b 82 2e 50 53 32 4b 08 5f 48 49 44 0c 41 ST[..PS2K._HID.A 5430: d0 03 03 08 5f 43 52 53 11 19 0a 16 47 01 60 00 ...._CRS....G.`. 5440: 60 00 01 01 47 01 64 00 64 00 01 01 23 02 00 01 `...G.d.d...#... 5450: 79 00 5b 82 1e 50 53 32 4d 08 5f 48 49 44 0c 41 y.[..PS2M._HID.A 5460: d0 0f 13 08 5f 43 52 53 11 09 0a 06 23 00 10 01 ...._CRS....#... 5470: 79 00 5b 82 43 6a 50 41 54 41 08 5f 41 44 52 0c y.[.CjPATA._ADR. 5480: 01 00 1f 00 5b 80 50 41 43 53 02 0a 40 0a c0 5b ....[.PACS..@..[ 5490: 81 49 04 50 41 43 53 03 50 52 49 54 10 00 10 50 .I.PACS.PRIT...P 54a0: 53 49 54 04 00 1c 53 59 4e 43 04 00 0c 53 44 54 SIT...SYNC...SDT 54b0: 30 02 00 02 53 44 54 31 02 00 4a 04 49 43 52 30 0...SDT1..J.ICR0 54c0: 04 49 43 52 31 04 49 43 52 32 04 49 43 52 33 04 .ICR1.ICR2.ICR3. 54d0: 49 43 52 34 04 49 43 52 35 04 5b 82 4b 63 50 52 ICR4.ICR5.[.KcPR 54e0: 49 44 08 5f 41 44 52 00 14 40 17 5f 47 54 4d 00 ID._ADR..@._GTM. 54f0: 08 50 42 55 46 11 17 0a 14 00 00 00 00 00 00 00 .PBUF........... 5500: 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 50 42 ..............PB 5510: 55 46 00 50 49 4f 30 8a 50 42 55 46 0a 04 44 4d UF.PIO0.PBUF..DM 5520: 41 30 8a 50 42 55 46 0a 08 50 49 4f 31 8a 50 42 A0.PBUF..PIO1.PB 5530: 55 46 0a 0c 44 4d 41 31 8a 50 42 55 46 0a 10 46 UF..DMA1.PBUF..F 5540: 4c 41 47 70 47 45 54 50 50 52 49 54 50 49 4f 30 LAGpGETPPRITPIO0 5550: 70 47 44 4d 41 7b 53 59 4e 43 01 00 7b 49 43 52 pGDMA{SYNC..{ICR 5560: 33 01 00 7b 49 43 52 30 01 00 53 44 54 30 7b 49 3..{ICR0..SDT0{I 5570: 43 52 31 01 00 44 4d 41 30 a0 14 93 44 4d 41 30 CR1..DMA0...DMA0 5580: 0c ff ff ff ff 70 50 49 4f 30 44 4d 41 30 a0 2e .....pPIO0DMA0.. 5590: 7b 50 52 49 54 0b 00 40 00 a0 14 93 7b 50 52 49 {PRIT..@....{PRI 55a0: 54 0a 90 00 0a 80 70 0b 84 03 50 49 4f 31 a1 0e T.....p...PIO1.. 55b0: 70 47 45 54 54 50 53 49 54 50 49 4f 31 a1 0b 70 pGETTPSITPIO1..p 55c0: 0c ff ff ff ff 50 49 4f 31 70 47 44 4d 41 7b 53 .....PIO1pGDMA{S 55d0: 59 4e 43 0a 02 00 7b 49 43 52 33 0a 02 00 7b 49 YNC...{ICR3...{I 55e0: 43 52 30 0a 02 00 53 44 54 31 7b 49 43 52 31 0a CR0...SDT1{ICR1. 55f0: 02 00 44 4d 41 31 a0 14 93 44 4d 41 31 0c ff ff ..DMA1...DMA1... 5600: ff ff 70 50 49 4f 31 44 4d 41 31 70 47 45 54 46 ..pPIO1DMA1pGETF 5610: 7b 53 59 4e 43 01 00 7b 53 59 4e 43 0a 02 00 50 {SYNC..{SYNC...P 5620: 52 49 54 46 4c 41 47 a0 2c 7b 93 50 49 4f 30 0c RITFLAG.,{.PIO0. 5630: ff ff ff ff 93 44 4d 41 30 0c ff ff ff ff 00 70 .....DMA0......p 5640: 0a 78 50 49 4f 30 70 0a 14 44 4d 41 30 70 0a 03 .xPIO0p..DMA0p.. 5650: 46 4c 41 47 a4 50 42 55 46 14 4c 2a 5f 53 54 4d FLAG.PBUF.L*_STM 5660: 03 8a 68 00 50 49 4f 30 8a 68 0a 04 44 4d 41 30 ..h.PIO0.h..DMA0 5670: 8a 68 0a 08 50 49 4f 31 8a 68 0a 0c 44 4d 41 31 .h..PIO1.h..DMA1 5680: 8a 68 0a 10 46 4c 41 47 a0 41 12 93 87 69 0b 00 .h..FLAG.A...i.. 5690: 02 7b 50 52 49 54 0b f0 c0 50 52 49 54 7b 53 59 .{PRIT...PRIT{SY 56a0: 4e 43 0a 02 53 59 4e 43 70 00 53 44 54 30 7b 49 NC..SYNCp.SDT0{I 56b0: 43 52 30 0a 02 49 43 52 30 7b 49 43 52 31 0a 02 CR0..ICR0{ICR1.. 56c0: 49 43 52 31 7b 49 43 52 33 0a 02 49 43 52 33 7b ICR1{ICR3..ICR3{ 56d0: 49 43 52 35 0a 02 49 43 52 35 8b 69 0a 62 57 34 ICR5..ICR5.i.bW4 56e0: 39 30 8b 69 0a 6a 57 35 33 30 8b 69 0a 7e 57 36 90.i.jW530.i.~W6 56f0: 33 30 8b 69 0a 80 57 36 34 30 8b 69 0a b0 57 38 30.i..W640.i..W8 5700: 38 30 8b 69 0a ba 57 39 33 30 7d 50 52 49 54 0b 80.i..W930}PRIT. 5710: 04 80 50 52 49 54 a0 1e 90 7b 46 4c 41 47 0a 02 ..PRIT...{FLAG.. 5720: 00 7b 57 34 39 30 0b 00 08 00 7d 50 52 49 54 0a .{W490....}PRIT. 5730: 02 50 52 49 54 7d 50 52 49 54 53 45 54 50 50 49 .PRIT}PRITSETPPI 5740: 4f 30 57 35 33 30 57 36 34 30 50 52 49 54 a0 4b O0W530W640PRIT.K 5750: 05 7b 46 4c 41 47 01 00 7d 53 59 4e 43 01 53 59 .{FLAG..}SYNC.SY 5760: 4e 43 70 53 44 4d 41 44 4d 41 30 53 44 54 30 a0 NCpSDMADMA0SDT0. 5770: 12 95 44 4d 41 30 0a 1e 7d 49 43 52 33 01 49 43 ..DMA0..}ICR3.IC 5780: 52 33 a0 12 95 44 4d 41 30 0a 3c 7d 49 43 52 30 R3...DMA0.<}ICR0 5790: 01 49 43 52 30 a0 14 7b 57 39 33 30 0b 00 20 00 .ICR0..{W930.. . 57a0: 7d 49 43 52 31 01 49 43 52 31 a0 4b 15 93 87 6a }ICR1.ICR1.K...j 57b0: 0b 00 02 7b 50 52 49 54 0b 0f bf 50 52 49 54 70 ...{PRIT...PRITp 57c0: 00 50 53 49 54 7b 53 59 4e 43 01 53 59 4e 43 70 .PSIT{SYNC.SYNCp 57d0: 00 53 44 54 31 7b 49 43 52 30 01 49 43 52 30 7b .SDT1{ICR0.ICR0{ 57e0: 49 43 52 31 01 49 43 52 31 7b 49 43 52 33 01 49 ICR1.ICR1{ICR3.I 57f0: 43 52 33 7b 49 43 52 35 01 49 43 52 35 8b 6a 0a CR3{ICR5.ICR5.j. 5800: 62 57 34 39 31 8b 6a 0a 6a 57 35 33 31 8b 6a 0a bW491.j.jW531.j. 5810: 7e 57 36 33 31 8b 6a 0a 80 57 36 34 31 8b 6a 0a ~W631.j..W641.j. 5820: b0 57 38 38 31 8b 6a 0a ba 57 39 33 31 7d 50 52 .W881.j..W931}PR 5830: 49 54 0b 40 80 50 52 49 54 a0 1e 90 7b 46 4c 41 IT.@.PRIT...{FLA 5840: 47 0a 08 00 7b 57 34 39 31 0b 00 08 00 7d 50 52 G...{W491....}PR 5850: 49 54 0a 20 50 52 49 54 a0 4c 04 7b 46 4c 41 47 IT. PRIT.L.{FLAG 5860: 0a 10 00 7d 50 52 49 54 0b 00 40 50 52 49 54 a0 ...}PRIT..@PRIT. 5870: 13 94 50 49 4f 31 0a f0 7d 50 52 49 54 0a 80 50 ..PIO1..}PRIT..P 5880: 52 49 54 a1 21 7d 50 52 49 54 0a 10 50 52 49 54 RIT.!}PRIT..PRIT 5890: 70 53 45 54 54 50 49 4f 31 57 35 33 31 57 36 34 pSETTPIO1W531W64 58a0: 31 50 53 49 54 a0 40 06 7b 46 4c 41 47 0a 04 00 1PSIT.@.{FLAG... 58b0: 7d 53 59 4e 43 0a 02 53 59 4e 43 70 53 44 4d 41 }SYNC..SYNCpSDMA 58c0: 44 4d 41 31 53 44 54 31 a0 13 95 44 4d 41 31 0a DMA1SDT1...DMA1. 58d0: 1e 7d 49 43 52 33 0a 02 49 43 52 33 a0 13 95 44 .}ICR3..ICR3...D 58e0: 4d 41 31 0a 3c 7d 49 43 52 30 0a 02 49 43 52 30 MA1.<}ICR0..ICR0 58f0: a0 15 7b 57 39 33 31 0b 00 20 00 7d 49 43 52 31 ..{W931.. .}ICR1 5900: 0a 02 49 43 52 31 5b 82 47 10 50 5f 44 30 08 5f ..ICR1[.G.P_D0._ 5910: 41 44 52 00 14 4a 0f 5f 47 54 46 00 08 50 49 42 ADR..J._GTF..PIB 5920: 30 11 11 0a 0e 03 00 00 00 00 a0 ef 03 00 00 00 0............... 5930: 00 a0 ef 8c 50 49 42 30 01 50 4d 44 30 8c 50 49 ....PIB0.PMD0.PI 5940: 42 30 0a 08 44 4d 44 30 a0 40 06 7b 50 52 49 54 B0..DMD0.@.{PRIT 5950: 0a 02 00 a0 13 93 7b 50 52 49 54 0a 09 00 0a 08 ......{PRIT..... 5960: 70 0a 08 50 4d 44 30 a1 41 04 70 0a 0a 50 4d 44 p..PMD0.A.p..PMD 5970: 30 7a 7b 50 52 49 54 0b 00 03 00 0a 08 60 7a 7b 0z{PRIT......`z{ 5980: 50 52 49 54 0b 00 30 00 0a 0c 61 72 60 61 62 a0 PRIT..0...ar`ab. 5990: 0c 93 0a 03 62 70 0a 0b 50 4d 44 30 a0 0c 93 0a ....bp..PMD0.... 59a0: 05 62 70 0a 0c 50 4d 44 30 a1 07 70 01 50 4d 44 .bp..PMD0..p.PMD 59b0: 30 a0 43 04 7b 53 59 4e 43 01 00 70 7d 53 44 54 0.C.{SYNC..p}SDT 59c0: 30 0a 40 00 44 4d 44 30 a0 2c 7b 49 43 52 31 01 0.@.DMD0.,{ICR1. 59d0: 00 a0 13 7b 49 43 52 30 01 00 72 44 4d 44 30 0a ...{ICR0..rDMD0. 59e0: 02 44 4d 44 30 a0 0f 7b 49 43 52 33 01 00 70 0a .DMD0..{ICR3..p. 59f0: 45 44 4d 44 30 a1 14 7d 74 7b 50 4d 44 30 0a 07 EDMD0..}t{PMD0.. 5a00: 00 0a 02 00 0a 20 44 4d 44 30 a4 50 49 42 30 5b ..... DMD0.PIB0[ 5a10: 82 46 10 50 5f 44 31 08 5f 41 44 52 01 14 49 0f .F.P_D1._ADR..I. 5a20: 5f 47 54 46 00 08 50 49 42 31 11 11 0a 0e 03 00 _GTF..PIB1...... 5a30: 00 00 00 b0 ef 03 00 00 00 00 b0 ef 8c 50 49 42 .............PIB 5a40: 31 01 50 4d 44 31 8c 50 49 42 31 0a 08 44 4d 44 1.PMD1.PIB1..DMD 5a50: 31 a0 4b 05 7b 50 52 49 54 0a 20 00 a0 13 93 7b 1.K.{PRIT. ....{ 5a60: 50 52 49 54 0a 90 00 0a 80 70 0a 08 50 4d 44 31 PRIT.....p..PMD1 5a70: a1 3c 72 7b 50 53 49 54 0a 03 00 7a 7b 50 53 49 .. 0050: 80 49 ee 6a 65 26 72 1e cd bf 5f 2f 96 d6 c0 0a .I.je&r..._/.... 0060: 92 f5 06 b5 00 b2 3b 29 02 e2 4c 8d c2 f2 bc 41 ......;)..L....A 0070: 77 9c 70 f0 f3 1b 09 d2 63 5a dc a8 83 f8 5e c9 w.p.....cZ....^. 0080: 15 95 f9 fa fd dc 05 b7 4d 67 7f 2d b3 84 33 20 ........Mg.-..3 0090: e1 d1 79 2a a7 6a 77 d1 b6 20 2a 76 42 c5 d5 e9 ..y*.jw.. *vB... 00a0: b6 43 40 55 44 c3 c9 37 99 5f 41 97 70 f3 d1 f6 .C@UD..7._A.p... 00b0: 07 ec 7b 1a 29 a1 c1 f1 91 fd 48 86 6e 3e ce cb ..{.).....H.n>.. 00c0: 01 00 00 00 b6 00 00 00 00 00 02 00 4c 45 4e 4f ............LENO 00d0: 56 4f 54 50 2d 36 38 20 20 20 57 49 4e 44 4f 57 VOTP-68 WINDOW 00e0: 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 S .............. 00f0: 00 00 00 00 00 00 8a 6e 2e c9 36 e6 7f 10 8a ea .......n..6..... 0100: 14 ad d2 93 b7 6d 9b 73 ad 83 36 b8 6c a7 a7 ee .....m.s..6.l... 0110: 37 47 16 fe f3 fc cd c7 89 84 06 16 91 0b 1e 81 7G.............. 0120: 11 42 b1 35 52 57 f6 6b bb 5f a5 81 e2 ff 89 8a .B.5RW.k._...... 0130: 95 c3 4d fc e9 56 4f 4c 34 cc 99 5e 62 e1 90 8a ..M..VOL4..^b... 0140: 54 be 4a 00 5c 9b a0 86 41 46 66 9d e2 f2 e7 36 T.J.\...AFf....6 0150: 9c 33 91 27 e7 8d 5c a1 d8 f9 a4 61 8a 1c 04 07 .3.'..\....a.... 0160: e3 2a 1e 14 f1 bd 7f 4c 09 ff 19 11 a9 d4 74 ca .*.....L......t. 0170: 11 9e dc 54 39 bf ...T9. APIC @ 0xbf6dff70 0000: 41 50 49 43 68 00 00 00 01 12 50 54 4c 54 44 20 APICh.....PTLTD 0010: 09 20 41 50 49 43 20 20 00 00 04 06 20 4c 54 50 . APIC .... LTP 0020: 00 00 00 00 00 00 e0 fe 01 00 00 00 00 08 00 00 ................ 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0c 02 00 ................ 0040: 00 00 c0 fe 00 00 00 00 04 06 00 05 00 01 04 06 ................ 0050: 01 05 00 01 02 0a 00 00 02 00 00 00 05 00 02 0a ................ 0060: 00 09 09 00 00 00 0d 00 ........ BOOT @ 0xbf6dffd8 0000: 42 4f 4f 54 28 00 00 00 01 a6 50 54 4c 54 44 20 BOOT(.....PTLTD 0010: 24 53 42 46 54 42 4c 24 00 00 04 06 20 4c 54 50 $SBFTBL$.... LTP 0020: 01 00 00 00 36 00 00 00 ....6... SSDT @ 0xbf6d98bd 0000: 53 53 44 54 ad 02 00 00 01 01 53 61 74 61 52 65 SSDT.....YSataRe 0010: 53 61 74 61 41 68 63 69 00 10 00 00 49 4e 54 4c SataAhci....INTL 0020: 24 06 05 20 10 48 28 5c 2f 03 5f 53 42 5f 50 43 $.. .H(\/._SB_PC 0030: 49 30 53 41 54 41 5b 82 4f 0c 50 52 54 30 08 5f I0SATA[.O.PRT0._ 0040: 41 44 52 0b ff ff 14 44 0b 5f 53 44 44 01 08 47 ADR....D._SDD..G 0050: 42 55 30 11 0a 0a 07 00 00 00 00 00 a0 00 8c 47 BU0............G 0060: 42 55 30 0a 00 47 42 30 30 8c 47 42 55 30 0a 01 BU0..GB00.GBU0.. 0070: 47 42 30 31 8c 47 42 55 30 0a 02 47 42 30 32 8c GB01.GBU0..GB02. 0080: 47 42 55 30 0a 03 47 42 30 33 8c 47 42 55 30 0a GBU0..GB03.GBU0. 0090: 04 47 42 30 34 8c 47 42 55 30 0a 05 47 42 30 35 .GB04.GBU0..GB05 00a0: 8c 47 42 55 30 0a 06 47 42 30 36 a0 46 04 93 87 .GBU0..GB06.F... 00b0: 68 0b 00 02 8b 68 0a 9c 57 37 38 30 a0 1e 7b 57 h....h..W780..{W 00c0: 37 38 30 0a 08 00 70 0a 10 47 42 30 30 70 0a 03 780...p..GB00p.. 00d0: 47 42 30 31 70 0a ef 47 42 30 36 a1 16 70 0a 90 GB01p..GB06..p.. 00e0: 47 42 30 30 70 0a 03 47 42 30 31 70 0a ef 47 42 GB00p..GB01p..GB 00f0: 30 36 70 47 42 55 30 47 54 46 30 14 0b 5f 47 54 06pGBU0GTF0.._GT 0100: 46 00 a4 47 54 46 30 5b 82 41 0d 50 52 54 31 08 F..GTF0[.A.PRT1. 0110: 5f 41 44 52 0c ff ff 01 00 14 44 0b 5f 53 44 44 _ADR......D._SDD 0120: 01 08 47 42 55 31 11 0a 0a 07 00 00 00 00 00 a0 ..GBU1.......... 0130: 00 8c 47 42 55 31 0a 00 47 42 31 30 8c 47 42 55 ..GBU1..GB10.GBU 0140: 31 0a 01 47 42 31 31 8c 47 42 55 31 0a 02 47 42 1..GB11.GBU1..GB 0150: 31 32 8c 47 42 55 31 0a 03 47 42 31 33 8c 47 42 12.GBU1..GB13.GB 0160: 55 31 0a 04 47 42 31 34 8c 47 42 55 31 0a 05 47 U1..GB14.GBU1..G 0170: 42 31 35 8c 47 42 55 31 0a 06 47 42 31 36 a0 46 B15.GBU1..GB16.F 0180: 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 38 31 a0 ...h....h..W781. 0190: 1e 7b 57 37 38 31 0a 08 00 70 0a 10 47 42 31 30 .{W781...p..GB10 01a0: 70 0a 03 47 42 31 31 70 0a ef 47 42 31 36 a1 16 p..GB11p..GB16.. 01b0: 70 0a 90 47 42 31 30 70 0a 03 47 42 31 31 70 0a p..GB10p..GB11p. 01c0: ef 47 42 31 36 70 47 42 55 31 47 54 46 31 14 0b .GB16pGBU1GTF1.. 01d0: 5f 47 54 46 00 a4 47 54 46 31 5b 82 41 0d 50 52 _GTF..GTF1[.A.PR 01e0: 54 32 08 5f 41 44 52 0c ff ff 02 00 14 44 0b 5f T2._ADR......D._ 01f0: 53 44 44 01 08 47 42 55 32 11 0a 0a 07 00 00 00 SDD..GBU2....... 0200: 00 00 a0 00 8c 47 42 55 32 0a 00 47 42 32 30 8c .....GBU2..GB20. 0210: 47 42 55 32 0a 01 47 42 32 31 8c 47 42 55 32 0a GBU2..GB21.GBU2. 0220: 02 47 42 32 32 8c 47 42 55 32 0a 03 47 42 32 33 .GB22.GBU2..GB23 0230: 8c 47 42 55 32 0a 04 47 42 32 34 8c 47 42 55 32 .GBU2..GB24.GBU2 0240: 0a 05 47 42 32 35 8c 47 42 55 32 0a 06 47 42 32 ..GB25.GBU2..GB2 0250: 36 a0 46 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 6.F...h....h..W7 0260: 38 32 a0 1e 7b 57 37 38 32 0a 08 00 70 0a 10 47 82..{W782...p..G 0270: 42 32 30 70 0a 03 47 42 32 31 70 0a ef 47 42 32 B20p..GB21p..GB2 0280: 36 a1 16 70 0a 90 47 42 32 30 70 0a 03 47 42 32 6..p..GB20p..GB2 0290: 31 70 0a ef 47 42 32 36 70 47 42 55 32 47 54 46 1p..GB26pGBU2GTF 02a0: 32 14 0b 5f 47 54 46 00 a4 47 54 46 32 2.._GTF..GTF2 SSDT @ 0xbf6d981a 0000: 53 53 44 54 a3 00 00 00 01 ef 42 72 74 52 65 66 SSDT......BrtRef 0010: 44 44 30 31 42 52 54 00 00 10 00 00 49 4e 54 4c DD01BRT.....INTL 0020: 24 06 05 20 10 4e 07 5c 2f 04 5f 53 42 5f 50 43 $.. .N.\/._SB_PC 0030: 49 30 47 46 58 30 44 44 30 33 14 1e 5f 42 43 4c I0GFX0DD03.._BCL 0040: 00 a4 12 16 0a 0a 46 0a 28 0a 00 0a 0a 0a 14 0a ......F.(....... 0050: 1e 0a 28 0a 32 0a 3c 0a 46 14 25 5f 42 43 4d 01 ..(.2.<.F.%_BCM. 0060: 78 68 0a 0a 60 61 70 61 5c 2f 05 5f 53 42 5f 50 xh..`apa\/._SB_P 0070: 43 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 14 CI0LPCBEC0_BRTS. 0080: 23 5f 42 51 43 00 77 5c 2f 05 5f 53 42 5f 50 43 #_BQC.w\/._SB_PC 0090: 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 0a 0a I0LPCBEC0_BRTS.. 00a0: 60 a4 60 `.` SSDT @ 0xbf6d8e10 0000: 53 53 44 54 5f 02 00 00 01 00 50 6d 52 65 66 00 SSDT_.....PmRef. 0010: 43 70 75 30 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu0Tst..0..INTL 0020: 24 06 05 20 10 4a 23 5c 2e 5f 50 52 5f 43 50 55 $.. .J#\._PR_CPU 0030: 30 08 5f 54 50 43 0a 00 14 4d 06 5f 50 54 43 00 0._TPC...M._PTC. 0040: a0 37 7b 50 44 43 30 0a 04 00 a4 12 2c 02 11 14 .7{PDC0.....,... 0050: 0a 11 82 0c 00 7f 00 00 00 00 00 00 00 00 00 00 ................ 0060: 00 79 00 11 14 0a 11 82 0c 00 7f 00 00 00 00 00 .y.............. 0070: 00 00 00 00 00 00 79 00 a4 12 2c 02 11 14 0a 11 ......y...,..... 0080: 82 0c 00 01 04 01 00 10 10 00 00 00 00 00 00 79 ...............y 0090: 00 11 14 0a 11 82 0c 00 01 04 01 00 10 10 00 00 ................ 00a0: 00 00 00 00 79 00 08 54 53 53 49 12 41 07 08 12 ....y..TSSI.A... 00b0: 0d 05 0a 64 0b e8 03 0a 00 0a 00 0a 00 12 0d 05 ...d............ 00c0: 0a 58 0b 6b 03 0a 00 0a 0f 0a 00 12 0d 05 0a 4b .X.k...........K 00d0: 0b ee 02 0a 00 0a 0e 0a 00 12 0d 05 0a 3f 0b 71 .............?.q 00e0: 02 0a 00 0a 0d 0a 00 12 0d 05 0a 32 0b f4 01 0a ...........2.... 00f0: 00 0a 0c 0a 00 12 0d 05 0a 26 0b 77 01 0a 00 0a .........&.w.... 0100: 0b 0a 00 12 0c 05 0a 19 0a fa 0a 00 0a 0a 0a 00 ................ 0110: 12 0c 05 0a 0d 0a 7d 0a 00 0a 09 0a 00 08 54 53 ......}.......TS 0120: 53 4d 12 41 07 08 12 0d 05 0a 64 0b e8 03 0a 00 SM.A......d..... 0130: 0a 00 0a 00 12 0d 05 0a 58 0b 6b 03 0a 00 0a 1e ........X.k..... 0140: 0a 00 12 0d 05 0a 4b 0b ee 02 0a 00 0a 1c 0a 00 ......K......... 0150: 12 0d 05 0a 3f 0b 71 02 0a 00 0a 1a 0a 00 12 0d ....?.q......... 0160: 05 0a 32 0b f4 01 0a 00 0a 18 0a 00 12 0d 05 0a ..2............. 0170: 26 0b 77 01 0a 00 0a 16 0a 00 12 0c 05 0a 19 0a &.w............. 0180: fa 0a 00 0a 14 0a 00 12 0c 05 0a 0d 0a 7d 0a 00 .............}.. 0190: 0a 12 0a 00 08 54 53 53 46 0a 00 14 43 08 5f 54 .....TSSF...C._T 01a0: 53 53 00 a0 47 06 90 92 54 53 53 46 5b 12 5f 50 SS..G...TSSF[._P 01b0: 53 53 00 70 5f 50 53 53 60 70 87 60 61 76 61 70 SS.p_PSS`p.`avap 01c0: 83 88 83 88 60 61 00 0a 01 00 62 70 0a 00 63 a2 ....`a....bp..c. 01d0: 35 95 63 87 54 53 53 49 70 78 77 62 74 0a 08 63 5.c.TSSIpxwbt..c 01e0: 00 00 0a 08 00 00 64 70 64 88 83 88 54 53 53 49 ......dpd...TSSI 01f0: 63 00 0a 01 00 70 64 88 83 88 54 53 53 4d 63 00 c....pd...TSSMc. 0200: 0a 01 00 75 63 70 ff 54 53 53 46 a0 0e 7b 50 44 ...ucp.TSSF..{PD 0210: 43 30 0a 04 00 a4 54 53 53 4d a4 54 53 53 49 14 C0....TSSM.TSSI. 0220: 3f 5f 54 53 44 00 a0 27 90 7b 43 46 47 44 0c 00 ?_TSD..'.{CFGD.. 0230: 00 00 01 00 92 7b 50 44 43 30 0a 04 00 a4 12 0f .....{PDC0...... 0240: 01 12 0c 05 0a 05 0a 00 0a 00 0a fd 0a 02 a4 12 ................ 0250: 0f 01 12 0c 05 0a 05 0a 00 0a 00 0a fc 0a 01 ............... SSDT @ 0xbf6d8d6a 0000: 53 53 44 54 a6 00 00 00 01 dd 50 6d 52 65 66 00 SSDT.....mPmRef. 0010: 43 70 75 31 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu1Tst..0..INTL 0020: 24 06 05 20 10 41 08 5c 2e 5f 50 52 5f 43 50 55 $.. .A.\._PR_CPU 0030: 31 08 5f 54 50 43 0a 00 14 16 5f 50 54 43 00 a4 1._TPC...._PTC.. 0040: 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 54 43 14 \/._PR_CPU0_PTC. 0050: 16 5f 54 53 53 00 a4 5c 2f 03 5f 50 52 5f 43 50 ._TSS..\/._PR_CP 0060: 55 30 5f 54 53 53 14 3f 5f 54 53 44 00 a0 27 90 U0_TSS.?_TSD..'. 0070: 7b 43 46 47 44 0c 00 00 00 01 00 92 7b 50 44 43 {CFGD.......{PDC 0080: 31 0a 04 00 a4 12 0f 01 12 0c 05 0a 05 0a 00 0a 1............... 0090: 00 0a fd 0a 02 a4 12 0f 01 12 0c 05 0a 05 0a 00 ................ 00a0: 0a 01 0a fc 0a 01 ...... SSDT @ 0xbf6d8884 0000: 53 53 44 54 e6 04 00 00 01 de 50 6d 52 65 66 00 SSDT......PmRef. 0010: 43 70 75 50 6d 00 00 00 00 30 00 00 49 4e 54 4c CpuPm....0..INTL 0020: 24 06 05 20 10 45 08 5c 00 08 53 53 44 54 12 43 $.. .E.\..SSDT.C 0030: 05 0c 0d 43 50 55 30 49 53 54 20 00 0c 9e 95 6d ...CPU0IST ....m 0040: bf 0c b4 01 00 00 0d 43 50 55 31 49 53 54 20 00 .......CPU1IST . 0050: 0c 52 97 6d bf 0c c8 00 00 00 0d 43 50 55 30 43 .R.m.......CPU0C 0060: 53 54 20 00 0c 6f 90 6d bf 0c aa 04 00 00 0d 43 ST ..o.m.......C 0070: 50 55 31 43 53 54 20 00 0c 19 95 6d bf 0c 85 00 PU1CST ....m.... 0080: 00 00 08 43 46 47 44 0c f1 69 3f 11 08 5c 50 44 ...CFGD..i?..\PD 0090: 43 30 0c 00 00 00 80 08 5c 50 44 43 31 0c 00 00 C0......\PDC1... 00a0: 00 80 08 5c 53 44 54 4c 0a 00 10 4d 21 5c 2e 5f ...\SDTL...M!\._ 00b0: 50 52 5f 43 50 55 30 08 48 49 30 5f 0a 00 08 48 PR_CPU0.HI0_...H 00c0: 43 30 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a C0_...H._PDC..h. 00d0: 00 52 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 .REVS.h..SIZEp.h 00e0: 60 70 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a `pt`...a[.h.@wa. 00f0: 08 00 54 45 4d 50 08 53 54 53 30 11 07 0a 04 00 ..TEMP.STS0..... 0100: 00 00 00 73 53 54 53 30 54 45 4d 50 62 5f 4f 53 ...sSTS0TEMPb_OS 0110: 43 11 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 C......w@.).G... 0120: 70 58 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 pXq9SREVSSIZEb.I 0130: 19 5f 4f 53 43 04 8a 6b 0a 00 53 54 53 30 8a 6b ._OSC..k..STS0.k 0140: 0a 04 43 41 50 30 8a 68 0a 00 49 49 44 30 8a 68 ..CAP0.h..IID0.h 0150: 0a 04 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 ..IID1.h..IID2.h 0160: 0a 0c 49 49 44 33 08 55 49 44 30 11 13 0a 10 16 ..IID3.UID0..... 0170: a6 77 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a .w@.).G...pXq9S. 0180: 55 49 44 30 0a 00 45 49 44 30 8a 55 49 44 30 0a UID0..EID0.UID0. 0190: 04 45 49 44 31 8a 55 49 44 30 0a 08 45 49 44 32 .EID1.UID0..EID2 01a0: 8a 55 49 44 30 0a 0c 45 49 44 33 a0 32 92 90 90 .UID0..EID3.2... 01b0: 93 49 49 44 30 45 49 44 30 93 49 49 44 31 45 49 .IID0EID0.IID1EI 01c0: 44 31 90 93 49 49 44 32 45 49 44 32 93 49 49 44 D1..IID2EID2.IID 01d0: 33 45 49 44 33 70 0a 06 53 54 53 30 a4 6b a0 0f 3EID3p..STS0.k.. 01e0: 92 93 69 0a 01 70 0a 0a 53 54 53 30 a4 6b 7d 7b ..i..p..STS0.k}{ 01f0: 50 44 43 30 0c ff ff ff 7f 00 43 41 50 30 50 44 PDC0......CAP0PD 0200: 43 30 70 7b 50 44 43 30 0a ff 00 50 43 50 30 a0 C0p{PDC0...PCP0. 0210: 4c 05 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b L.{CFGD....A...{ 0220: 43 46 47 44 0c 00 00 00 01 00 93 7b 50 44 43 30 CFGD.......{PDC0 0230: 0a 09 00 0a 09 92 7b 53 44 54 4c 0a 01 00 7d 53 ......{SDTL...}S 0240: 44 54 4c 0a 01 53 44 54 4c 5b 80 49 53 54 30 00 DTL..SDTL[.IST0. 0250: 83 88 53 53 44 54 0a 01 00 83 88 53 53 44 54 0a ..SSDT.....SSDT. 0260: 02 00 5b 20 49 53 54 30 48 49 30 5f a0 49 05 7b ..[ IST0HI0_.I.{ 0270: 43 46 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 CFGD....N...{CFG 0280: 44 0c 00 00 00 01 00 7b 50 44 43 30 0a 18 00 92 D......{PDC0.... 0290: 7b 53 44 54 4c 0a 02 00 7d 53 44 54 4c 0a 02 53 {SDTL...}SDTL..S 02a0: 44 54 4c 5b 80 43 53 54 30 00 83 88 53 53 44 54 DTL[.CST0...SSDT 02b0: 0a 07 00 83 88 53 53 44 54 0a 08 00 5b 20 43 53 .....SSDT...[ CS 02c0: 54 30 48 43 30 5f a4 6b 10 4d 21 5c 2e 5f 50 52 T0HC0_.k.M!\._PR 02d0: 5f 43 50 55 31 08 48 49 31 5f 0a 00 08 48 43 31 _CPU1.HI1_...HC1 02e0: 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a 00 52 _...H._PDC..h..R 02f0: 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 60 70 EVS.h..SIZEp.h`p 0300: 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a 08 00 t`...a[.h.@wa... 0310: 54 45 4d 50 08 53 54 53 31 11 07 0a 04 00 00 00 TEMP.STS1....... 0320: 00 73 53 54 53 31 54 45 4d 50 62 5f 4f 53 43 11 .sSTS1TEMPb_OSC. 0330: 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 70 58 .....w@.).G...pX 0340: 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 19 5f q9SREVSSIZEb.I._ 0350: 4f 53 43 04 8a 6b 0a 00 53 54 53 31 8a 6b 0a 04 OSC..k..STS1.k.. 0360: 43 41 50 31 8a 68 0a 00 49 49 44 30 8a 68 0a 04 CAP1.h..IID0.h.. 0370: 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 0a 0c IID1.h..IID2.h.. 0380: 49 49 44 33 08 55 49 44 31 11 13 0a 10 16 a6 77 IID3.UID1......w 0390: 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a 55 49 @.).G...pXq9S.UI 03a0: 44 31 0a 00 45 49 44 30 8a 55 49 44 31 0a 04 45 D1..EID0.UID1..E 03b0: 49 44 31 8a 55 49 44 31 0a 08 45 49 44 32 8a 55 ID1.UID1..EID2.U 03c0: 49 44 31 0a 0c 45 49 44 33 a0 32 92 90 90 93 49 ID1..EID3.2....I 03d0: 49 44 30 45 49 44 30 93 49 49 44 31 45 49 44 31 ID0EID0.IID1EID1 03e0: 90 93 49 49 44 32 45 49 44 32 93 49 49 44 33 45 ..IID2EID2.IID3E 03f0: 49 44 33 70 0a 06 53 54 53 31 a4 6b a0 0f 92 93 ID3p..STS1.k.... 0400: 69 0a 01 70 0a 0a 53 54 53 31 a4 6b 7d 7b 50 44 i..p..STS1.k}{PD 0410: 43 31 0c ff ff ff 7f 00 43 41 50 31 50 44 43 31 C1......CAP1PDC1 0420: 70 7b 50 44 43 31 0a ff 00 50 43 50 31 a0 4c 05 p{PDC1...PCP1.L. 0430: 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b 43 46 {CFGD....A...{CF 0440: 47 44 0c 00 00 00 01 00 93 7b 50 44 43 31 0a 09 GD.......{PDC1.. 0450: 00 0a 09 92 7b 53 44 54 4c 0a 10 00 7d 53 44 54 ....{SDTL...}SDT 0460: 4c 0a 10 53 44 54 4c 5b 80 49 53 54 31 00 83 88 L..SDTL[.IST1... 0470: 53 53 44 54 0a 04 00 83 88 53 53 44 54 0a 05 00 SSDT.....SSDT... 0480: 5b 20 49 53 54 31 48 49 31 5f a0 49 05 7b 43 46 [ IST1HI1_.I.{CF 0490: 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 44 0c GD....N...{CFGD. 04a0: 00 00 00 01 00 7b 50 44 43 31 0a 18 00 92 7b 53 .....{PDC1....{S 04b0: 44 54 4c 0a 20 00 7d 53 44 54 4c 0a 20 53 44 54 DTL. .}SDTL. SDT 04c0: 4c 5b 80 43 53 54 31 00 83 88 53 53 44 54 0a 0a L[.CST1...SSDT.. 04d0: 00 83 88 53 53 44 54 0a 0b 00 5b 20 43 53 54 31 ...SSDT...[ CST1 04e0: 48 43 31 5f a4 6b HC1_.k XSDT @ 0xbf6d87f0 0000: 58 53 44 54 94 00 00 00 01 c3 4c 45 4e 4f 56 4f XSDT......LENOVO 0010: 54 50 2d 36 38 20 20 20 00 00 04 06 20 4c 54 50 TP-68 .... LTP 0020: 00 00 00 00 d2 fb 6d bf 00 00 00 00 c6 fc 6d bf ......m.......m. 0030: 00 00 00 00 2e fd 6d bf 00 00 00 00 66 fd 6d bf ......m.....f.m. 0040: 00 00 00 00 a2 fd 6d bf 00 00 00 00 d4 fd 6d bf ......m.......m. 0050: 00 00 00 00 fa fd 6d bf 00 00 00 00 70 ff 6d bf ......m.....p.m. 0060: 00 00 00 00 d8 ff 6d bf 00 00 00 00 bd 98 6d bf ......m.......m. 0070: 00 00 00 00 1a 98 6d bf 00 00 00 00 10 8e 6d bf ......m.......m. 0080: 00 00 00 00 6a 8d 6d bf 00 00 00 00 84 88 6d bf ....j.m.......m. 0090: 00 00 00 00 .... RSD PTR @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... fwts-test/checksum-0001/checksum-0001.log000066400000000000000000000032751465205512700200770ustar00rootroot00000000000000checksum checksum: ACPI table checksum test. checksum -------------------------------------------------------------------------------------------------- checksum Test 1 of 1: ACPI table checksum test. checksum PASSED: Test 1, Table DSDT has correct checksum 0x11 checksum PASSED: Test 1, Table FACP has correct checksum 0x52 checksum PASSED: Test 1, Table APIC has correct checksum 0xcc checksum PASSED: Test 1, Table HPET has correct checksum 0x0a checksum PASSED: Test 1, Table MCFG has correct checksum 0x32 checksum PASSED: Test 1, Table TCPA has correct checksum 0x8f checksum PASSED: Test 1, Table TMOR has correct checksum 0xeb checksum PASSED: Test 1, Table SLIC has correct checksum 0x99 checksum PASSED: Test 1, Table APIC has correct checksum 0x13 checksum PASSED: Test 1, Table BOOT has correct checksum 0xa5 checksum PASSED: Test 1, Table SSDT has correct checksum 0x59 checksum PASSED: Test 1, Table SSDT has correct checksum 0xed checksum PASSED: Test 1, Table SSDT has correct checksum 0xc8 checksum PASSED: Test 1, Table SSDT has correct checksum 0x6d checksum PASSED: Test 1, Table SSDT has correct checksum 0xdf checksum PASSED: Test 1, Table XSDT has correct checksum 0xc2 checksum PASSED: Test 1, Table RSDT has correct checksum 0xc0 checksum checksum ================================================================================================== checksum 19 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. checksum ================================================================================================== fwts-test/checksum-0001/checksum-0003.log000066400000000000000000000040401465205512700200700ustar00rootroot00000000000000checksum checksum: ACPI table checksum test. checksum -------------------------------------------------------------------------------------------------- checksum Test 1 of 1: ACPI table checksum test. checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table DSDT has incorrect checksum, expected 0x11, got checksum 0x10. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum PASSED: Test 1, Table FACP has correct checksum 0x52 checksum PASSED: Test 1, Table APIC has correct checksum 0xcc checksum PASSED: Test 1, Table HPET has correct checksum 0x0a checksum PASSED: Test 1, Table MCFG has correct checksum 0x32 checksum PASSED: Test 1, Table TCPA has correct checksum 0x8f checksum PASSED: Test 1, Table TMOR has correct checksum 0xeb checksum PASSED: Test 1, Table SLIC has correct checksum 0x99 checksum PASSED: Test 1, Table APIC has correct checksum 0x13 checksum PASSED: Test 1, Table BOOT has correct checksum 0xa5 checksum PASSED: Test 1, Table SSDT has correct checksum 0x59 checksum PASSED: Test 1, Table SSDT has correct checksum 0xed checksum PASSED: Test 1, Table SSDT has correct checksum 0xc8 checksum PASSED: Test 1, Table SSDT has correct checksum 0x6d checksum PASSED: Test 1, Table SSDT has correct checksum 0xdf checksum PASSED: Test 1, Table XSDT has correct checksum 0xc2 checksum PASSED: Test 1, Table RSDT has correct checksum 0xc0 checksum checksum ================================================================================================== checksum 18 passed, 1 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. checksum ================================================================================================== fwts-test/checksum-0001/checksum-0004.log000066400000000000000000000156121465205512700201000ustar00rootroot00000000000000checksum checksum: ACPI table checksum test. checksum -------------------------------------------------------------------------------------------------- checksum Test 1 of 1: ACPI table checksum test. checksum PASSED: Test 1, Table DSDT has correct checksum 0x11 checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table FACP has incorrect checksum, expected 0x52, got checksum 0x53. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table APIC has incorrect checksum, expected 0xcc, got checksum 0xcb. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table HPET has incorrect checksum, expected 0x0a, got checksum 0x09. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table MCFG has incorrect checksum, expected 0x32, got checksum 0x33. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table TCPA has incorrect checksum, expected 0x8f, got checksum 0xff. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table TMOR has incorrect checksum, expected 0xeb, got checksum 0xbe. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table SLIC has incorrect checksum, expected 0x99, got checksum 0x88. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table APIC has incorrect checksum, expected 0x13, got checksum 0x12. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table BOOT has incorrect checksum, expected 0xa5, got checksum 0xa6. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table SSDT has incorrect checksum, expected 0x59, got checksum 0x01. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table SSDT has incorrect checksum, expected 0xed, got checksum 0xef. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table SSDT has incorrect checksum, expected 0xc8, got checksum 0x00. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table SSDT has incorrect checksum, expected 0x6d, got checksum 0xdd. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table SSDT has incorrect checksum, expected 0xdf, got checksum 0xde. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum FAILED [MEDIUM] ACPITableChecksum: Test 1, Table XSDT has incorrect checksum, expected 0xc2, got checksum 0xc3. checksum checksum ADVICE: The kernel will warn that this table has an invalid checksum but will ignore the error and checksum still load it. This is not a critical issue, but should be fixed if possible to avoid the warning checksum messages. checksum checksum PASSED: Test 1, Table RSDT has correct checksum 0xc0 checksum checksum ================================================================================================== checksum 4 passed, 15 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. checksum ================================================================================================== fwts-test/checksum-0001/test-0001.sh000077500000000000000000000011121465205512700170740ustar00rootroot00000000000000#!/bin/bash # TEST="Test checksum against known correct ACPI tables" NAME=test-0001.sh TMPLOG=$TMP/checksum.log.$$ $FWTS --show-tests | grep checksum > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 120 --dumpfile=$FWTSTESTDIR/checksum-0001/acpidump-0001.log checksum - | grep "^[0-9]*[ ]*checksum" | grep -v RSDP | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/checksum-0001/checksum-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/checksum-0001/test-0003.sh000077500000000000000000000011131465205512700170770ustar00rootroot00000000000000#!/bin/bash # TEST="Test checksum against incorrect ACPI DSDT table" NAME=test-0003.sh TMPLOG=$TMP/checksum.log.$$ $FWTS --show-tests | grep checksum > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 120 --dumpfile=$FWTSTESTDIR/checksum-0001/acpidump-0003.log checksum - | grep "^[0-9]*[ ]*checksum" | grep -v RSDP | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/checksum-0001/checksum-0003.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/checksum-0001/test-0004.sh000077500000000000000000000011131465205512700171000ustar00rootroot00000000000000#!/bin/bash # TEST="Test checksum against incorrect ACPI DSDT table" NAME=test-0004.sh TMPLOG=$TMP/checksum.log.$$ $FWTS --show-tests | grep checksum > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 120 --dumpfile=$FWTSTESTDIR/checksum-0001/acpidump-0004.log checksum - | grep "^[0-9]*[ ]*checksum" | grep -v RSDP | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/checksum-0001/checksum-0004.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/cpep-0001/000077500000000000000000000000001465205512700143325ustar00rootroot00000000000000fwts-test/cpep-0001/acpidump-0001.log000066400000000000000000000037561465205512700172300ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... CPEP @ 0x00000000 0000: 43 50 45 50 44 00 00 00 00 a9 41 4c 41 53 4b 41 CPEP<.....ALASKA 0010: 41 20 4d 20 49 00 00 00 09 20 07 01 41 4d 49 20 A M I.... ..AMI 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 .............p_. 0030: 20 00 00 00 00 08 01 01 21 00 00 00 00 08 02 02 ................ 0040: 20 00 00 00 .... fwts-test/cpep-0001/acpidump-0002.log000066400000000000000000000037561465205512700172310ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... CPEP @ 0x00000000 0000: 43 50 45 50 44 00 00 00 00 a9 41 4c 41 53 4b 41 CPEP<.....ALASKA 0010: 41 20 4d 20 49 00 00 00 09 20 07 01 41 4d 49 20 A M I.... ..AMI 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 .............p_. 0030: 00 00 00 00 02 00 01 01 ff ff ff ff 23 ff 02 02 ................ 0040: 04 00 00 00 .... fwts-test/cpep-0001/cpep-0001.log000066400000000000000000000015601465205512700163440ustar00rootroot00000000000000cpep cpep: CPEP Corrected Platform Error Polling Table test. cpep ---------------------------------------------------------- cpep Test 1 of 1: CPEP Corrected Platform Error Polling Table cpep test. cpep CPEP Corrected Platform Error Polling Table: cpep Reserved: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 cpep CPEP Processor Structure 0 looks sane. cpep CPEP Processor Structure 1 looks sane. cpep CPEP Processor Structure 2 looks sane. cpep PASSED: Test 1, No issues found in CPEP table. cpep cpep ========================================================== cpep 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 cpep info only. cpep ========================================================== fwts-test/cpep-0001/cpep-0002.log000066400000000000000000000035131465205512700163450ustar00rootroot00000000000000cpep cpep: CPEP Corrected Platform Error Polling Table test. cpep ---------------------------------------------------------- cpep Test 1 of 1: CPEP Corrected Platform Error Polling Table cpep test. cpep CPEP Corrected Platform Error Polling Table: cpep Reserved: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 cpep FAILED [HIGH] CPEPBadFieldValue: Test 1, CPEP Processor cpep Structure 0 Type field must be 0, got 1 instead. cpep FAILED [MEDIUM] CPEPBadFieldValue: Test 1, CPEP Processor cpep Structure 0 Length field must be 8, got 16 instead. cpep WARNING: Test 1, CPEP Processor Structure 0 Polling cpep Interval of 0 milliseconds is relatively short and may cpep cause excessive polling CPU load cpep FAILED [HIGH] CPEPBadFieldValue: Test 1, CPEP Processor cpep Structure 1 Type field must be 0, got 2 instead. cpep FAILED [MEDIUM] CPEPBadFieldValue: Test 1, CPEP Processor cpep Structure 1 Length field must be 8, got 0 instead. cpep FAILED [HIGH] CPEPBadFieldValue: Test 1, CPEP Processor cpep Structure 2 Type field must be 0, got 35 instead. cpep FAILED [MEDIUM] CPEPBadFieldValue: Test 1, CPEP Processor cpep Structure 2 Length field must be 8, got 255 instead. cpep WARNING: Test 1, CPEP Processor Structure 2 Polling cpep Interval of 4 milliseconds is relatively short and may cpep cause excessive polling CPU load cpep cpep ========================================================== cpep 0 passed, 6 failed, 2 warnings, 0 aborted, 0 skipped, 0 cpep info only. cpep ========================================================== fwts-test/cpep-0001/test-0001.sh000077500000000000000000000007741465205512700162360ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against CPEP" NAME=test-0001.sh TMPLOG=$TMP/cpep.log.$$ $FWTS --show-tests | grep CPEP > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/cpep-0001/acpidump-0001.log cpep - | cut -c7- | grep "^cpep" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/cpep-0001/cpep-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/cpep-0001/test-0002.sh000077500000000000000000000010041465205512700162220ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid CPEP" NAME=test-0001.sh TMPLOG=$TMP/cpep.log.$$ $FWTS --show-tests | grep CPEP > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/cpep-0001/acpidump-0002.log cpep - | cut -c7- | grep "^cpep" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/cpep-0001/cpep-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/csrt-0001/000077500000000000000000000000001465205512700143565ustar00rootroot00000000000000fwts-test/csrt-0001/acpidump-0001.log000066400000000000000000000046651465205512700172540ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... CSRT @ 0x00000000 0000: 43 53 52 54 b8 00 00 00 01 20 41 4d 44 20 20 20 CSRT............ 0010: 41 47 45 53 41 20 20 20 01 00 00 00 41 4d 44 20 ................ 0020: 01 00 00 00 24 00 00 00 44 43 42 41 5a 59 58 57 ........DCBAZYXW 0030: be ef de ad ff fe 00 00 00 00 00 00 0c 00 00 00 ................ 0040: 01 00 00 00 ff fe fd fc 30 00 00 00 44 43 42 41 ............DCBA 0050: 5a 49 58 57 be ef de ad ff fd 00 00 00 00 00 00 ZYXW............ 0060: 0c 00 00 00 01 00 01 00 10 20 30 40 0c 00 00 00 ................ 0070: 02 00 00 00 50 60 70 80 40 00 00 00 03 00 00 00 ................ 0080: 03 00 00 00 f0 f1 f2 f3 00 00 00 00 1c 00 00 00 ................ 0090: a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af ................ 00a0: b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb 28 00 00 00 ................ 00b0: 01 00 01 00 fe ff ff ff ............... fwts-test/csrt-0001/acpidump-0002.log000066400000000000000000000046651465205512700172550ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... CSRT @ 0x00000000 0000: 43 53 52 54 b8 00 00 00 01 20 41 4d 44 20 20 20 CSRT............ 0010: 41 47 45 53 41 20 20 20 01 00 00 00 41 4d 44 20 ................ 0020: 01 00 00 00 24 00 00 00 44 43 42 41 5a 59 58 57 ........DCBAZYXW 0030: be ef de ad ff fe 17 23 00 00 00 00 0c 00 00 00 ................ 0040: 01 00 00 00 ff fe fd fc 30 00 00 00 44 43 42 41 ............DCBA 0050: 5a 49 58 57 be ef de ad ff fd 00 00 00 00 00 00 ZYXW............ 0060: 0c 00 00 00 00 00 00 00 10 20 30 40 0c 00 00 00 ................ 0070: 02 00 00 00 50 60 70 80 40 00 00 00 03 00 00 00 ................ 0080: 03 00 00 00 f0 f1 f2 f3 00 00 00 00 1c 00 00 00 ................ 0090: a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af ................ 00a0: b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb 28 00 00 00 ................ 00b0: 01 00 08 00 ff ff ff ff ............... fwts-test/csrt-0001/csrt-0001.log000066400000000000000000000010221465205512700164050ustar00rootroot00000000000000csrt csrt: CSRT Core System Resource Table test. csrt ---------------------------------------------------------- csrt Test 1 of 1: CSRT Core System Resource Table test. csrt PASSED: Test 1, No issues found in CSRT table. csrt csrt ========================================================== csrt 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 csrt info only. csrt ========================================================== fwts-test/csrt-0001/csrt-0002.log000066400000000000000000000024701465205512700164160ustar00rootroot00000000000000csrt csrt: CSRT Core System Resource Table test. csrt ---------------------------------------------------------- csrt Test 1 of 1: CSRT Core System Resource Table test. csrt FAILED [HIGH] CSRTResourceGroupReservedFieldNonZero: Test csrt 1, CSRT Resource Group 0 Reserved Field is 0x2317 and was csrt expecting a zero value csrt FAILED [HIGH] CSRTResourceDescriptorResourceTypeInvalid: csrt Test 1, CSRT Resource Group 1 Descriptor 0 Resource Type csrt is 0x0000 which is a reserved type csrt FAILED [HIGH] CSRTResourceDescriptorResourceSubTypeInvalid csrt : Test 1, CSRT Resource Group 2 Descriptor 0 Resource csrt Subtype is 0x0008 which is a reserved type, expecting csrt 0x0000 (Interrupt Line) or 0x0001 (Interrupt Controller) csrt FAILED [HIGH] CSRTResourceDescriptorReservedUID: Test 1, csrt CSRT Resource Group 2 Descriptor 0 UID Field is 0xffffffff csrt and this is a reserved UID value csrt csrt ========================================================== csrt 0 passed, 4 failed, 0 warning, 0 aborted, 0 skipped, 0 csrt info only. csrt ========================================================== fwts-test/csrt-0001/test-0001.sh000077500000000000000000000007741465205512700162620ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against CSRT" NAME=test-0001.sh TMPLOG=$TMP/csrt.log.$$ $FWTS --show-tests | grep CSRT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/csrt-0001/acpidump-0001.log csrt - | cut -c7- | grep "^csrt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/csrt-0001/csrt-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/csrt-0001/test-0002.sh000077500000000000000000000010041465205512700162460ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid CSRT" NAME=test-0002.sh TMPLOG=$TMP/csrt.log.$$ $FWTS --show-tests | grep CSRT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/csrt-0001/acpidump-0002.log csrt - | cut -c7- | grep "^csrt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/csrt-0001/csrt-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/dbg2-0001/000077500000000000000000000000001465205512700142215ustar00rootroot00000000000000fwts-test/dbg2-0001/acpidump-0001.log000066400000000000000000010272371465205512700171200ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... DBG2 @ 0x00000000 0000: 44 42 47 32 6b 00 00 00 00 42 4c 45 4e 4f 56 4f DBG2k....BLENOVO 0010: 54 50 2d 48 36 20 20 20 20 20 00 00 50 54 4c 20 TP-H6 ..PTL 0020: 02 00 00 00 2c 00 00 00 01 00 00 00 00 3f 00 01 ....,........?.. 0030: 19 00 26 00 00 00 00 00 02 80 01 00 00 00 16 00 ..&............. 0040: 22 00 00 20 00 00 a0 90 81 f1 00 00 00 00 0c 00 ".. ............ 0050: 00 00 5c 5f 53 42 2e 50 43 49 30 2e 45 48 43 31 ..\_SB.PCI0.EHC1 0060: 2e 48 55 42 30 2e 50 52 54 31 00 .HUB0.PRT1. DSDT @ 0x00000000 0000: 44 53 44 54 b0 e5 00 00 02 cf 4c 45 4e 4f 56 4f DSDT......LENOVO 0010: 49 56 42 2d 43 50 54 00 00 00 00 00 49 4e 54 4c IVB-CPT.....INTL 0020: 09 11 06 20 08 53 53 31 5f 00 08 53 53 32 5f 00 ... .SS1_..SS2_. 0030: 08 53 53 33 5f 01 08 53 53 34 5f 01 08 49 4f 53 .SS3_..SS4_..IOS 0040: 54 0b ff ff 08 53 50 32 4f 0a 4e 08 53 50 31 4f T....SP2O.N.SP1O 0050: 0b 4e 16 08 49 4f 31 42 0b 00 06 08 49 4f 31 4c .N..IO1B....IO1L 0060: 0a 70 08 49 4f 32 42 0b 80 06 08 49 4f 32 4c 0a .p.IO2B....IO2L. 0070: 20 08 49 4f 33 42 0b 90 02 08 49 4f 33 4c 0a 10 .IO3B....IO3L.. 0080: 08 53 50 33 4f 0a 2e 08 49 4f 34 42 0b 20 0a 08 .SP3O...IO4B. .. 0090: 49 4f 34 4c 0a 20 08 4d 43 48 42 0c 00 00 d1 fe IO4L. .MCHB..... 00a0: 08 4d 43 48 4c 0b 00 80 08 45 47 50 42 0c 00 90 .MCHL....EGPB... 00b0: d1 fe 08 45 47 50 4c 0b 00 10 08 44 4d 49 42 0c ...EGPL....DMIB. 00c0: 00 80 d1 fe 08 44 4d 49 4c 0b 00 10 08 49 46 50 .....DMIL....IFP 00d0: 42 0c 00 40 d1 fe 08 49 46 50 4c 0b 00 10 08 50 B..@...IFPL....P 00e0: 45 42 53 0c 00 00 00 f8 08 50 45 4c 4e 0c 00 00 EBS......PELN... 00f0: 00 04 08 53 4d 42 53 0b 80 05 08 53 4d 42 4c 0a ...SMBS....SMBL. 0100: 20 08 50 42 4c 4b 0b 10 04 08 50 4d 42 53 0b 00 .PBLK....PMBS.. 0110: 04 08 50 4d 4c 4e 0a 80 08 4c 56 4c 32 0b 14 04 ..PMLN...LVL2... 0120: 08 4c 56 4c 33 0b 15 04 08 4c 56 4c 34 0b 16 04 .LVL3....LVL4... 0130: 08 53 4d 49 50 0a b2 08 47 50 42 53 0b 00 05 08 .SMIP...GPBS.... 0140: 47 50 4c 4e 0a 80 08 41 50 43 42 0c 00 00 c0 fe GPLN...APCB..... 0150: 08 41 50 43 4c 0b 00 10 08 50 4d 33 30 0b 30 04 .APCL....PM30.0. 0160: 08 53 52 43 42 0c 00 c0 d1 fe 08 53 52 43 4c 0b .SRCB......SRCL. 0170: 00 40 08 48 50 54 42 0c 00 00 d0 fe 08 48 50 54 .@.HPTB......HPT 0180: 43 0c 04 f4 d1 fe 08 41 43 50 48 0a de 08 41 53 C......ACPH...AS 0190: 53 42 00 08 41 4f 54 42 00 08 41 41 58 42 00 08 SB..AOTB..AAXB.. 01a0: 50 45 48 50 01 08 53 48 50 43 01 08 50 45 50 4d PEHP..SHPC..PEPM 01b0: 01 08 50 45 45 52 01 08 50 45 43 53 01 08 44 53 ..PEER..PECS..DS 01c0: 53 50 00 08 46 48 50 50 00 08 46 4d 42 4c 01 08 SP..FHPP..FMBL.. 01d0: 46 44 54 50 0a 02 08 46 55 50 53 0a 03 08 42 53 FDTP...FUPS...BS 01e0: 48 5f 00 08 42 45 4c 5f 01 08 42 45 48 5f 0a 02 H_..BEL_..BEH_.. 01f0: 08 42 52 48 5f 0a 03 08 42 54 46 5f 0a 04 08 42 .BRH_...BTF_...B 0200: 48 43 5f 0a 05 08 42 59 42 5f 0a 06 08 42 57 42 HC_...BYB_...BWB 0210: 5f 0a 06 08 42 50 48 5f 0a 07 08 42 53 48 53 0a _...BPH_...BSHS. 0220: 08 08 42 45 4c 43 0a 09 08 42 52 48 50 0a 0a 08 ..BELC...BRHP... 0230: 42 54 46 43 0a 0b 08 42 45 48 50 0a 0c 08 42 45 BTFC...BEHP...BE 0240: 4c 50 0a 0e 08 42 54 4c 5f 0a 10 08 42 54 46 50 LP...BTL_...BTFP 0250: 0a 11 08 42 53 52 5f 0a 14 08 42 43 43 5f 0a 1c ...BSR_...BCC_.. 0260: 08 42 4f 46 5f 0a 20 08 42 45 46 5f 0a 21 08 42 .BOF_. .BEF_.!.B 0270: 4c 4c 45 0a 22 08 42 4c 4c 43 0a 23 08 42 4c 43 LLE.".BLLC.#.BLC 0280: 41 0a 24 08 42 4c 4c 53 0a 25 08 42 4c 4c 50 0a A.$.BLLS.%.BLLP. 0290: 26 08 42 4c 4c 44 0a 27 08 42 4b 46 5f 0a 28 08 &.BLLD.'.BKF_.(. 02a0: 42 48 42 45 0a 30 08 42 48 42 43 0a 31 08 42 48 BHBE.0.BHBC.1.BH 02b0: 42 4e 0a 32 08 42 48 42 4d 0a 33 08 54 43 47 4d BN.2.BHBM.3.TCGM 02c0: 01 08 54 52 54 50 01 08 57 44 54 45 01 08 54 52 ..TRTP..WDTE..TR 02d0: 54 44 0a 02 08 54 52 54 49 0a 03 08 47 43 44 44 TD...TRTI...GCDD 02e0: 01 08 44 53 54 41 0a 0a 08 44 53 4c 4f 0a 0c 08 ..DSTA...DSLO... 02f0: 44 53 4c 43 0a 0e 08 50 49 54 53 0a 10 08 53 42 DSLC...PITS...SB 0300: 43 53 0a 12 08 53 41 4c 53 0a 13 08 4c 53 53 53 CS...SALS...LSSS 0310: 0a 2a 08 53 4f 4f 54 0a 35 08 50 44 42 52 0a 4d .*.SOOT.5.PDBR.M 0320: 08 44 50 50 42 0c 00 80 d9 fe 08 44 50 50 4c 0b .DPPB......DPPL. 0330: 00 80 08 53 50 52 32 00 08 53 50 52 33 00 5b 80 ...SPR2..SPR3.[. 0340: 47 4e 56 53 00 0c 18 8e f6 da 0b c8 01 5b 81 4c GNVS.........[.L 0350: 3f 47 4e 56 53 10 4f 53 59 53 10 53 4d 49 46 08 ?GNVS.OSYS.SMIF. 0360: 50 52 4d 30 08 50 52 4d 31 08 53 43 49 46 08 50 PRM0.PRM1.SCIF.P 0370: 52 4d 32 08 50 52 4d 33 08 4c 43 4b 46 08 50 52 RM2.PRM3.LCKF.PR 0380: 4d 34 08 50 52 4d 35 08 50 38 30 44 20 4c 49 44 M4.PRM5.P80D LID 0390: 53 08 50 57 52 53 08 44 42 47 53 08 54 48 4f 46 S.PWRS.DBGS.THOF 03a0: 08 41 43 54 31 08 41 43 54 54 08 50 53 56 54 08 .ACT1.ACTT.PSVT. 03b0: 54 43 31 56 08 54 43 32 56 08 54 53 50 56 08 43 TC1V.TC2V.TSPV.C 03c0: 52 54 54 08 44 54 53 45 08 44 54 53 31 08 44 54 RTT.DTSE.DTS1.DT 03d0: 53 32 08 44 54 53 46 08 00 38 52 45 56 4e 08 49 S2.DTSF..8REVN.I 03e0: 46 46 53 08 00 08 41 50 49 43 08 54 43 4e 54 08 FFS...APIC.TCNT. 03f0: 50 43 50 30 08 50 43 50 31 08 50 50 43 4d 08 50 PCP0.PCP1.PPCM.P 0400: 50 4d 46 20 43 36 37 4c 08 4e 41 54 50 08 43 4d PMF C67L.NATP.CM 0410: 41 50 08 43 4d 42 50 08 4c 50 54 50 08 46 44 43 AP.CMBP.LPTP.FDC 0420: 50 08 43 4d 43 50 08 43 49 52 50 08 53 4d 53 43 P.CMCP.CIRP.SMSC 0430: 08 57 33 38 31 08 53 4d 43 31 08 49 47 44 53 08 .W381.SMC1.IGDS. 0440: 54 4c 53 54 08 43 41 44 4c 08 50 41 44 4c 08 43 TLST.CADL.PADL.C 0450: 53 54 45 10 4e 53 54 45 10 53 53 54 45 10 4e 44 STE.NSTE.SSTE.ND 0460: 49 44 08 44 49 44 31 20 44 49 44 32 20 44 49 44 ID.DID1 DID2 DID 0470: 33 20 44 49 44 34 20 44 49 44 35 20 4b 53 56 30 3 DID4 DID5 KSV0 0480: 20 4b 53 56 31 08 00 38 42 4c 43 53 08 42 52 54 KSV1..8BLCS.BRT 0490: 4c 08 41 4c 53 45 08 41 4c 41 46 08 4c 4c 4f 57 L.ALSE.ALAF.LLOW 04a0: 08 4c 48 49 48 08 00 08 45 4d 41 45 08 45 4d 41 .LHIH...EMAE.EMA 04b0: 50 10 45 4d 41 4c 10 00 08 4d 45 46 45 08 44 53 P.EMAL...MEFE.DS 04c0: 54 53 08 00 10 54 50 4d 50 08 00 08 4d 4f 52 44 TS...TPMP...MORD 04d0: 08 54 43 47 50 08 50 50 52 50 20 50 50 52 51 08 .TCGP.PPRP PPRQ. 04e0: 4c 50 50 52 08 47 54 46 30 38 47 54 46 32 38 49 LPPR.GTF08GTF28I 04f0: 44 45 4d 08 47 54 46 31 38 42 49 44 5f 08 50 4c DEM.GTF18BID_.PL 0500: 49 44 08 41 4f 41 43 08 53 4c 44 52 20 57 41 4b ID.AOAC.SLDR WAK 0510: 52 08 00 40 05 41 53 4c 42 20 49 42 54 54 08 49 R..@.ASLB IBTT.I 0520: 50 41 54 08 49 54 56 46 08 49 54 56 4d 08 49 50 PAT.ITVF.ITVM.IP 0530: 53 43 08 49 42 4c 43 08 49 42 49 41 08 49 53 53 SC.IBLC.IBIA.ISS 0540: 43 08 49 34 30 39 08 49 35 30 39 08 49 36 30 39 C.I409.I509.I609 0550: 08 49 37 30 39 08 49 50 43 46 08 49 44 4d 53 08 .I709.IPCF.IDMS. 0560: 49 46 31 45 08 48 56 43 4f 08 4e 58 44 31 20 4e IF1E.HVCO.NXD1 N 0570: 58 44 32 20 4e 58 44 33 20 4e 58 44 34 20 4e 58 XD2 NXD3 NXD4 NX 0580: 44 35 20 4e 58 44 36 20 4e 58 44 37 20 4e 58 44 D5 NXD6 NXD7 NXD 0590: 38 20 47 53 4d 49 08 50 41 56 50 08 00 08 4f 53 8 GSMI.PAVP...OS 05a0: 43 43 08 4e 45 58 50 08 53 42 56 31 08 53 42 56 CC.NEXP.SBV1.SBV 05b0: 32 08 00 30 44 53 45 4e 08 45 43 4f 4e 08 47 50 2..0DSEN.ECON.GP 05c0: 49 43 08 43 54 59 50 08 4c 30 31 43 08 56 46 4e IC.CTYP.L01C.VFN 05d0: 30 08 56 46 4e 31 08 56 46 4e 32 08 56 46 4e 33 0.VFN1.VFN2.VFN3 05e0: 08 56 46 4e 34 08 00 48 05 4e 56 47 41 20 4e 56 .VFN4..H.NVGA NV 05f0: 48 41 20 41 4d 44 41 20 44 49 44 36 20 44 49 44 HA AMDA DID6 DID 0600: 37 20 44 49 44 38 20 45 42 41 53 20 43 50 53 50 7 DID8 EBAS CPSP 0610: 20 45 45 43 50 20 45 56 43 50 20 58 42 41 53 20 EECP EVCP XBAS 0620: 4f 42 53 31 20 4f 42 53 32 20 4f 42 53 33 20 4f OBS1 OBS2 OBS3 O 0630: 42 53 34 20 4f 42 53 35 20 4f 42 53 36 20 4f 42 BS4 OBS5 OBS6 OB 0640: 53 37 20 4f 42 53 38 20 00 48 05 41 54 4d 43 08 S7 OBS8 .H.ATMC. 0650: 50 54 4d 43 08 41 54 52 41 08 50 54 52 41 08 50 PTMC.ATRA.PTRA.P 0660: 4e 48 4d 20 54 42 41 42 20 54 42 41 48 20 52 54 NHM TBAB TBAH RT 0670: 49 50 08 54 53 4f 44 08 41 54 50 43 08 50 54 50 IP.TSOD.ATPC.PTP 0680: 43 08 50 46 4c 56 08 42 52 45 56 08 53 47 4d 44 C.PFLV.BREV.SGMD 0690: 08 53 47 46 4c 08 50 57 4f 4b 08 48 4c 52 53 08 .SGFL.PWOK.HLRS. 06a0: 44 53 45 4c 08 45 53 45 4c 08 50 53 45 4c 08 50 DSEL.ESEL.PSEL.P 06b0: 57 45 4e 08 50 52 53 54 08 4d 58 44 31 20 4d 58 WEN.PRST.MXD1 MX 06c0: 44 32 20 4d 58 44 33 20 4d 58 44 34 20 4d 58 44 D2 MXD3 MXD4 MXD 06d0: 35 20 4d 58 44 36 20 4d 58 44 37 20 4d 58 44 38 5 MXD6 MXD7 MXD8 06e0: 20 47 42 41 53 10 53 47 47 50 08 00 20 41 4c 46 GBAS.SGGP.. ALF 06f0: 50 08 49 4d 4f 4e 08 50 44 54 53 08 50 4b 47 41 P.IMON.PDTS.PKGA 0700: 08 50 41 4d 54 08 41 43 30 46 08 41 43 31 46 08 .PAMT.AC0F.AC1F. 0710: 44 54 53 33 08 44 54 53 34 08 00 40 06 58 48 43 DTS3.DTS4..@.XHC 0720: 49 08 58 48 50 4d 08 00 18 58 54 55 42 20 58 54 I.XHPM...XTUB XT 0730: 55 53 20 58 4d 50 42 20 00 08 4c 50 4d 56 08 00 US XMPB ..LPMV.. 0740: 08 44 44 52 46 08 4d 4d 36 34 08 5b 80 51 4e 56 .DDRF.MM64.[.QNV 0750: 53 00 0c 18 d0 f9 da 0b 00 10 5b 81 4b 30 51 4e S.........[.K0QN 0760: 56 53 00 00 80 80 01 57 4f 4c 4e 08 42 52 4e 53 VS.....WOLN.BRNS 0770: 08 41 43 53 54 01 42 54 4c 41 01 57 4c 4c 41 01 .ACST.BTLA.WLLA. 0780: 00 01 00 01 54 4d 43 4d 01 4c 49 44 46 01 00 01 ....TMCM.LIDF... 0790: 55 53 42 50 08 55 53 47 30 01 55 53 47 31 01 55 USBP.USG0.USG1.U 07a0: 53 47 32 01 55 53 47 33 01 45 53 47 30 01 45 53 SG2.USG3.ESG0.ES 07b0: 47 31 01 45 53 47 32 01 45 53 47 33 01 4c 41 4e G1.ESG2.ESG3.LAN 07c0: 4f 01 56 43 44 42 01 43 34 57 52 01 43 34 41 43 O.VCDB.C4WR.C4AC 07d0: 01 4f 53 43 34 01 53 50 45 4e 01 53 43 52 4d 01 .OSC4.SPEN.SCRM. 07e0: 4f 44 44 53 01 42 54 4d 44 01 57 4c 4e 50 01 57 ODDS.BTMD.WLNP.W 07f0: 41 4e 50 01 4d 43 4d 55 01 43 4d 41 42 01 57 4f ANP.MCMU.CMAB.WO 0800: 46 46 01 43 4d 41 54 01 42 54 48 41 01 43 42 43 FF.CMAT.BTHA.CBC 0810: 49 01 43 57 41 49 01 43 42 54 50 01 57 57 41 50 I.CWAI.CBTP.WWAP 0820: 01 57 41 4e 41 01 57 57 4e 41 01 57 41 4c 41 01 .WANA.WWNA.WALA. 0830: 42 54 48 47 01 4f 53 46 47 01 42 41 54 42 01 53 BTHG.OSFG.BATB.S 0840: 57 44 54 01 4e 56 4d 44 01 4e 56 4f 4e 01 00 03 WDT.NVMD.NVON... 0850: 00 08 54 4a 39 30 08 53 58 46 47 08 46 54 50 53 ..TJ90.SXFG.FTPS 0860: 08 43 57 41 43 01 43 57 41 53 01 43 57 55 45 01 .CWAC.CWAS.CWUE. 0870: 43 57 55 53 01 43 34 4e 41 01 00 03 42 46 41 44 CWUS.C4NA...BFAD 0880: 01 00 07 00 08 00 08 00 08 00 08 00 08 47 43 44 .............GCD 0890: 45 04 44 41 44 44 04 49 50 4d 53 08 49 50 4d 42 E.DADD.IPMS.IPMB 08a0: 48 07 49 50 4d 52 18 49 50 4d 4f 18 49 50 4d 41 H.IPMR.IPMO.IPMA 08b0: 08 4c 49 44 58 01 00 07 57 38 4b 42 01 00 07 44 .LIDX...W8KB...D 08c0: 50 50 30 01 44 50 50 31 01 44 50 50 32 01 44 50 PP0.DPP1.DPP2.DP 08d0: 50 33 01 44 50 50 34 01 44 50 50 35 01 00 02 50 P3.DPP4.DPP5...P 08e0: 50 43 50 08 42 46 57 42 48 12 00 48 05 46 57 30 PCP.BFWBH..H.FW0 08f0: 30 40 08 43 57 41 50 10 43 57 41 54 10 00 40 06 0@.CWAP.CWAT..@. 0900: 54 50 4d 45 08 54 43 47 30 01 54 43 47 31 01 00 TPME.TCG0.TCG1.. 0910: 06 49 53 53 50 01 49 53 57 4b 02 00 05 46 46 44 .ISSP.ISWK...FFD 0920: 54 01 00 07 49 53 43 47 20 00 10 4f 56 38 47 08 T...ISCG ..OV8G. 0930: 00 08 54 4d 43 50 10 43 52 43 50 10 00 20 00 20 ..TMCP.CRCP.. . 0940: 00 20 00 20 00 40 20 4d 48 30 31 40 08 4d 48 30 . . .@ MH01@.MH0 0950: 38 40 08 43 4d 44 5f 08 45 52 52 5f 20 50 41 52 8@.CMD_.ERR_ PAR 0960: 30 20 50 41 52 31 20 50 41 52 32 20 50 41 52 33 0 PAR1 PAR2 PAR3 0970: 20 00 48 75 49 46 30 30 40 08 49 46 30 31 40 08 .HuIF00@.IF01@. 0980: 49 46 30 32 40 08 49 46 30 33 40 08 49 46 30 34 IF02@.IF03@.IF04 0990: 40 08 49 46 30 35 40 08 49 46 30 36 40 08 49 46 @.IF05@.IF06@.IF 09a0: 30 37 40 08 49 46 30 38 40 08 49 46 30 39 40 08 07@.IF08@.IF09@. 09b0: 49 46 30 41 40 08 49 46 30 42 40 08 49 46 30 43 IF0A@.IF0B@.IF0C 09c0: 40 08 49 46 30 44 40 08 49 46 30 45 40 08 49 46 @.IF0D@.IF0E@.IF 09d0: 30 46 40 08 57 49 54 4d 08 57 53 45 4c 08 57 4c 0F@.WITM.WSEL.WL 09e0: 53 30 08 57 4c 53 31 08 57 4c 53 32 08 57 4c 53 S0.WLS1.WLS2.WLS 09f0: 33 08 57 4c 53 34 08 57 4c 53 35 08 57 4c 53 36 3.WLS4.WLS5.WLS6 0a00: 08 57 4c 53 37 08 57 4c 53 38 08 57 4c 53 39 08 .WLS7.WLS8.WLS9. 0a10: 57 4c 53 41 08 57 4c 53 42 08 57 4c 53 43 08 57 WLSA.WLSB.WLSC.W 0a20: 4c 53 44 08 57 45 4e 43 08 57 4b 42 44 08 57 50 LSD.WENC.WKBD.WP 0a30: 54 59 08 57 50 41 53 48 40 57 50 4e 57 48 40 57 TY.WPASH@WPNWH@W 0a40: 53 50 4d 08 57 53 50 53 08 57 53 4d 4e 08 57 53 SPM.WSPS.WSMN.WS 0a50: 4d 58 08 57 53 45 4e 08 57 53 4b 42 08 00 88 72 MX.WSEN.WSKB...r 0a60: 02 56 45 44 49 40 40 10 84 32 02 5f 53 42 5f 08 .VEDI@@..2._SB_. 0a70: 50 52 30 30 12 41 1c 1f 12 0d 04 0c ff ff 1f 00 PR00.A.......... 0a80: 00 4c 4e 4b 46 00 12 0d 04 0c ff ff 1f 00 01 4c .LNKF..........L 0a90: 4e 4b 44 00 12 0e 04 0c ff ff 1f 00 0a 02 4c 4e NKD...........LN 0aa0: 4b 43 00 12 0e 04 0c ff ff 1f 00 0a 03 4c 4e 4b KC...........LNK 0ab0: 41 00 12 0d 04 0c ff ff 14 00 00 4c 4e 4b 41 00 A..........LNKA. 0ac0: 12 0d 04 0c ff ff 1d 00 00 4c 4e 4b 48 00 12 0d .........LNKH... 0ad0: 04 0c ff ff 1a 00 00 4c 4e 4b 41 00 12 0d 04 0c .......LNKA..... 0ae0: ff ff 1b 00 00 4c 4e 4b 47 00 12 0d 04 0c ff ff .....LNKG....... 0af0: 18 00 00 4c 4e 4b 45 00 12 0d 04 0c ff ff 19 00 ...LNKE......... 0b00: 00 4c 4e 4b 45 00 12 0d 04 0c ff ff 16 00 00 4c .LNKE..........L 0b10: 4e 4b 41 00 12 0d 04 0c ff ff 16 00 01 4c 4e 4b NKA..........LNK 0b20: 44 00 12 0e 04 0c ff ff 16 00 0a 02 4c 4e 4b 43 D...........LNKC 0b30: 00 12 0e 04 0c ff ff 16 00 0a 03 4c 4e 4b 42 00 ...........LNKB. 0b40: 12 0d 04 0c ff ff 1c 00 00 4c 4e 4b 41 00 12 0d .........LNKA... 0b50: 04 0c ff ff 1c 00 01 4c 4e 4b 42 00 12 0e 04 0c .......LNKB..... 0b60: ff ff 1c 00 0a 02 4c 4e 4b 43 00 12 0e 04 0c ff ......LNKC...... 0b70: ff 1c 00 0a 03 4c 4e 4b 44 00 12 0d 04 0c ff ff .....LNKD....... 0b80: 01 00 00 4c 4e 4b 41 00 12 0d 04 0c ff ff 01 00 ...LNKA......... 0b90: 01 4c 4e 4b 42 00 12 0e 04 0c ff ff 01 00 0a 02 .LNKB........... 0ba0: 4c 4e 4b 43 00 12 0e 04 0c ff ff 01 00 0a 03 4c LNKC...........L 0bb0: 4e 4b 44 00 12 0d 04 0c ff ff 06 00 00 4c 4e 4b NKD..........LNK 0bc0: 44 00 12 0d 04 0c ff ff 06 00 01 4c 4e 4b 41 00 D..........LNKA. 0bd0: 12 0e 04 0c ff ff 06 00 0a 02 4c 4e 4b 42 00 12 ..........LNKB.. 0be0: 0e 04 0c ff ff 06 00 0a 03 4c 4e 4b 43 00 12 0d .........LNKC... 0bf0: 04 0c ff ff 02 00 00 4c 4e 4b 41 00 12 0d 04 0c .......LNKA..... 0c00: ff ff 04 00 00 4c 4e 4b 41 00 12 0d 04 0c ff ff .....LNKA....... 0c10: 04 00 01 4c 4e 4b 42 00 12 0e 04 0c ff ff 04 00 ...LNKB......... 0c20: 0a 02 4c 4e 4b 43 00 12 0e 04 0c ff ff 04 00 0a ..LNKC.......... 0c30: 03 4c 4e 4b 44 00 08 41 52 30 30 12 43 18 1f 12 .LNKD..AR00.C... 0c40: 0b 04 0c ff ff 1f 00 00 00 0a 15 12 0b 04 0c ff ................ 0c50: ff 1f 00 01 00 0a 13 12 0c 04 0c ff ff 1f 00 0a ................ 0c60: 02 00 0a 12 12 0c 04 0c ff ff 1f 00 0a 03 00 0a ................ 0c70: 10 12 0b 04 0c ff ff 14 00 00 00 0a 15 12 0b 04 ................ 0c80: 0c ff ff 1d 00 00 00 0a 17 12 0b 04 0c ff ff 1a ................ 0c90: 00 00 00 0a 10 12 0b 04 0c ff ff 1b 00 00 00 0a ................ 0ca0: 16 12 0b 04 0c ff ff 18 00 00 00 0a 14 12 0b 04 ................ 0cb0: 0c ff ff 19 00 00 00 0a 14 12 0b 04 0c ff ff 16 ................ 0cc0: 00 00 00 0a 10 12 0b 04 0c ff ff 16 00 01 00 0a ................ 0cd0: 13 12 0c 04 0c ff ff 16 00 0a 02 00 0a 12 12 0c ................ 0ce0: 04 0c ff ff 16 00 0a 03 00 0a 11 12 0b 04 0c ff ................ 0cf0: ff 1c 00 00 00 0a 10 12 0b 04 0c ff ff 1c 00 01 ................ 0d00: 00 0a 11 12 0c 04 0c ff ff 1c 00 0a 02 00 0a 12 ................ 0d10: 12 0c 04 0c ff ff 1c 00 0a 03 00 0a 13 12 0b 04 ................ 0d20: 0c ff ff 01 00 00 00 0a 10 12 0b 04 0c ff ff 01 ................ 0d30: 00 01 00 0a 11 12 0c 04 0c ff ff 01 00 0a 02 00 ................ 0d40: 0a 12 12 0c 04 0c ff ff 01 00 0a 03 00 0a 13 12 ................ 0d50: 0b 04 0c ff ff 06 00 00 00 0a 13 12 0b 04 0c ff ................ 0d60: ff 06 00 01 00 0a 10 12 0c 04 0c ff ff 06 00 0a ................ 0d70: 02 00 0a 11 12 0c 04 0c ff ff 06 00 0a 03 00 0a ................ 0d80: 12 12 0b 04 0c ff ff 02 00 00 00 0a 10 12 0b 04 ................ 0d90: 0c ff ff 04 00 00 00 0a 10 12 0b 04 0c ff ff 04 ................ 0da0: 00 01 00 0a 11 12 0c 04 0c ff ff 04 00 0a 02 00 ................ 0db0: 0a 12 12 0c 04 0c ff ff 04 00 0a 03 00 0a 13 08 ................ 0dc0: 50 52 30 34 12 34 04 12 0b 04 0b ff ff 00 4c 4e PR04.4........LN 0dd0: 4b 41 00 12 0b 04 0b ff ff 01 4c 4e 4b 42 00 12 KA........LNKB.. 0de0: 0c 04 0b ff ff 0a 02 4c 4e 4b 43 00 12 0c 04 0b .......LNKC..... 0df0: ff ff 0a 03 4c 4e 4b 44 00 08 41 52 30 34 12 2c ....LNKD..AR04., 0e00: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 0e10: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 0e20: 12 0a 04 0b ff ff 0a 03 00 0a 13 08 50 52 30 35 ............PR05 0e30: 12 34 04 12 0b 04 0b ff ff 00 4c 4e 4b 42 00 12 .4........LNKB.. 0e40: 0b 04 0b ff ff 01 4c 4e 4b 43 00 12 0c 04 0b ff ......LNKC...... 0e50: ff 0a 02 4c 4e 4b 44 00 12 0c 04 0b ff ff 0a 03 ...LNKD......... 0e60: 4c 4e 4b 41 00 08 41 52 30 35 12 2c 04 12 09 04 LNKA..AR05.,.... 0e70: 0b ff ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a ................ 0e80: 12 12 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ................ 0e90: ff ff 0a 03 00 0a 10 08 50 52 30 36 12 34 04 12 ........PR06.4.. 0ea0: 0b 04 0b ff ff 00 4c 4e 4b 43 00 12 0b 04 0b ff ......LNKC...... 0eb0: ff 01 4c 4e 4b 44 00 12 0c 04 0b ff ff 0a 02 4c ..LNKD.........L 0ec0: 4e 4b 41 00 12 0c 04 0b ff ff 0a 03 4c 4e 4b 42 NKA.........LNKB 0ed0: 00 08 41 52 30 36 12 2c 04 12 09 04 0b ff ff 00 ..AR06.,........ 0ee0: 00 0a 12 12 09 04 0b ff ff 01 00 0a 13 12 0a 04 ................ 0ef0: 0b ff ff 0a 02 00 0a 10 12 0a 04 0b ff ff 0a 03 ................ 0f00: 00 0a 11 08 50 52 30 37 12 34 04 12 0b 04 0b ff ....PR07.4...... 0f10: ff 00 4c 4e 4b 44 00 12 0b 04 0b ff ff 01 4c 4e ..LNKD........LN 0f20: 4b 41 00 12 0c 04 0b ff ff 0a 02 4c 4e 4b 42 00 KA.........LNKB. 0f30: 12 0c 04 0b ff ff 0a 03 4c 4e 4b 43 00 08 41 52 ........LNKC..AR 0f40: 30 37 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 07.,............ 0f50: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 0f60: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 08 ................ 0f70: 50 52 30 38 12 34 04 12 0b 04 0b ff ff 00 4c 4e PR08.4........LN 0f80: 4b 41 00 12 0b 04 0b ff ff 01 4c 4e 4b 42 00 12 KA........LNKB.. 0f90: 0c 04 0b ff ff 0a 02 4c 4e 4b 43 00 12 0c 04 0b .......LNKC..... 0fa0: ff ff 0a 03 4c 4e 4b 44 00 08 41 52 30 38 12 2c ....LNKD..AR08., 0fb0: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 0fc0: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 0fd0: 12 0a 04 0b ff ff 0a 03 00 0a 13 08 50 52 30 39 ............PR09 0fe0: 12 34 04 12 0b 04 0b ff ff 00 4c 4e 4b 42 00 12 .4........LNKB.. 0ff0: 0b 04 0b ff ff 01 4c 4e 4b 43 00 12 0c 04 0b ff ......LNKC...... 1000: ff 0a 02 4c 4e 4b 44 00 12 0c 04 0b ff ff 0a 03 ...LNKD......... 1010: 4c 4e 4b 41 00 08 41 52 30 39 12 2c 04 12 09 04 LNKA..AR09.,.... 1020: 0b ff ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a ................ 1030: 12 12 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ................ 1040: ff ff 0a 03 00 0a 10 08 50 52 30 45 12 34 04 12 ........PR0E.4.. 1050: 0b 04 0b ff ff 00 4c 4e 4b 43 00 12 0b 04 0b ff ......LNKC...... 1060: ff 01 4c 4e 4b 44 00 12 0c 04 0b ff ff 0a 02 4c ..LNKD.........L 1070: 4e 4b 41 00 12 0c 04 0b ff ff 0a 03 4c 4e 4b 42 NKA.........LNKB 1080: 00 08 41 52 30 45 12 2c 04 12 09 04 0b ff ff 00 ..AR0E.,........ 1090: 00 0a 12 12 09 04 0b ff ff 01 00 0a 13 12 0a 04 ................ 10a0: 0b ff ff 0a 02 00 0a 10 12 0a 04 0b ff ff 0a 03 ................ 10b0: 00 0a 11 08 50 52 30 46 12 34 04 12 0b 04 0b ff ....PR0F.4...... 10c0: ff 00 4c 4e 4b 44 00 12 0b 04 0b ff ff 01 4c 4e ..LNKD........LN 10d0: 4b 41 00 12 0c 04 0b ff ff 0a 02 4c 4e 4b 42 00 KA.........LNKB. 10e0: 12 0c 04 0b ff ff 0a 03 4c 4e 4b 43 00 08 41 52 ........LNKC..AR 10f0: 30 46 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 0F.,............ 1100: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 1110: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 08 ................ 1120: 50 52 30 32 12 34 04 12 0b 04 0b ff ff 00 4c 4e PR02.4........LN 1130: 4b 41 00 12 0b 04 0b ff ff 01 4c 4e 4b 42 00 12 KA........LNKB.. 1140: 0c 04 0b ff ff 0a 02 4c 4e 4b 43 00 12 0c 04 0b .......LNKC..... 1150: ff ff 0a 03 4c 4e 4b 44 00 08 41 52 30 32 12 2c ....LNKD..AR02., 1160: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 1170: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 1180: 12 0a 04 0b ff ff 0a 03 00 0a 13 08 50 52 30 41 ............PR0A 1190: 12 34 04 12 0b 04 0b ff ff 00 4c 4e 4b 42 00 12 .4........LNKB.. 11a0: 0b 04 0b ff ff 01 4c 4e 4b 43 00 12 0c 04 0b ff ......LNKC...... 11b0: ff 0a 02 4c 4e 4b 44 00 12 0c 04 0b ff ff 0a 03 ...LNKD......... 11c0: 4c 4e 4b 41 00 08 41 52 30 41 12 2c 04 12 09 04 LNKA..AR0A.,.... 11d0: 0b ff ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a ................ 11e0: 12 12 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ................ 11f0: ff ff 0a 03 00 0a 10 08 50 52 30 42 12 34 04 12 ........PR0B.4.. 1200: 0b 04 0b ff ff 00 4c 4e 4b 43 00 12 0b 04 0b ff ......LNKC...... 1210: ff 01 4c 4e 4b 44 00 12 0c 04 0b ff ff 0a 02 4c ..LNKD.........L 1220: 4e 4b 41 00 12 0c 04 0b ff ff 0a 03 4c 4e 4b 42 NKA.........LNKB 1230: 00 08 41 52 30 42 12 2c 04 12 09 04 0b ff ff 00 ..AR0B.,........ 1240: 00 0a 12 12 09 04 0b ff ff 01 00 0a 13 12 0a 04 ................ 1250: 0b ff ff 0a 02 00 0a 10 12 0a 04 0b ff ff 0a 03 ................ 1260: 00 0a 11 08 50 52 30 43 12 34 04 12 0b 04 0b ff ....PR0C.4...... 1270: ff 00 4c 4e 4b 44 00 12 0b 04 0b ff ff 01 4c 4e ..LNKD........LN 1280: 4b 41 00 12 0c 04 0b ff ff 0a 02 4c 4e 4b 42 00 KA.........LNKB. 1290: 12 0c 04 0b ff ff 0a 03 4c 4e 4b 43 00 08 41 52 ........LNKC..AR 12a0: 30 43 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 0C.,............ 12b0: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 12c0: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 08 ................ 12d0: 50 52 30 31 12 49 0a 0c 12 0b 04 0b ff ff 00 4c PR01.I.........L 12e0: 4e 4b 46 00 12 0b 04 0b ff ff 01 4c 4e 4b 47 00 NKF........LNKG. 12f0: 12 0c 04 0b ff ff 0a 02 4c 4e 4b 48 00 12 0c 04 ........LNKH.... 1300: 0b ff ff 0a 03 4c 4e 4b 45 00 12 0d 04 0c ff ff .....LNKE....... 1310: 01 00 00 4c 4e 4b 47 00 12 0d 04 0c ff ff 01 00 ...LNKG......... 1320: 01 4c 4e 4b 46 00 12 0e 04 0c ff ff 01 00 0a 02 .LNKF........... 1330: 4c 4e 4b 45 00 12 0e 04 0c ff ff 01 00 0a 03 4c LNKE...........L 1340: 4e 4b 48 00 12 0d 04 0c ff ff 05 00 00 4c 4e 4b NKH..........LNK 1350: 43 00 12 0d 04 0c ff ff 05 00 01 4c 4e 4b 45 00 C..........LNKE. 1360: 12 0e 04 0c ff ff 05 00 0a 02 4c 4e 4b 47 00 12 ..........LNKG.. 1370: 0e 04 0c ff ff 05 00 0a 03 4c 4e 4b 46 00 08 41 .........LNKF..A 1380: 52 30 31 12 41 09 0c 12 09 04 0b ff ff 00 00 0a R01.A........... 1390: 15 12 09 04 0b ff ff 01 00 0a 16 12 0a 04 0b ff ................ 13a0: ff 0a 02 00 0a 17 12 0a 04 0b ff ff 0a 03 00 0a ................ 13b0: 14 12 0b 04 0c ff ff 01 00 00 00 0a 16 12 0b 04 ................ 13c0: 0c ff ff 01 00 01 00 0a 15 12 0c 04 0c ff ff 01 ................ 13d0: 00 0a 02 00 0a 14 12 0c 04 0c ff ff 01 00 0a 03 ................ 13e0: 00 0a 17 12 0b 04 0c ff ff 05 00 00 00 0a 12 12 ................ 13f0: 0b 04 0c ff ff 05 00 01 00 0a 14 12 0c 04 0c ff ................ 1400: ff 05 00 0a 02 00 0a 16 12 0c 04 0c ff ff 05 00 ................ 1410: 0a 03 00 0a 15 08 50 52 53 41 11 09 0a 06 23 7a ......PRSA....#z 1420: dc 18 79 00 06 50 52 53 41 50 52 53 42 06 50 52 ..y..PRSAPRSB.PR 1430: 53 41 50 52 53 43 06 50 52 53 41 50 52 53 44 06 SAPRSC.PRSAPRSD. 1440: 50 52 53 41 50 52 53 45 06 50 52 53 41 50 52 53 PRSAPRSE.PRSAPRS 1450: 46 06 50 52 53 41 50 52 53 47 06 50 52 53 41 50 F.PRSAPRSG.PRSAP 1460: 52 53 48 5b 82 87 92 01 50 43 49 30 08 5f 48 49 RSH[....PCI0._HI 1470: 44 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 d0 0a 03 D.A...._CID.A... 1480: 08 5f 41 44 52 00 14 09 5e 42 4e 30 30 00 a4 00 ._ADR...^BN00... 1490: 14 0b 5f 42 42 4e 00 a4 42 4e 30 30 08 5f 55 49 .._BBN..BN00._UI 14a0: 44 00 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 D..._PRT...PICM. 14b0: 41 52 30 30 a4 50 52 30 30 5b 80 48 42 55 53 02 AR00.PR00[.HBUS. 14c0: 00 0b 00 01 5b 81 4b 0d 48 42 55 53 03 00 40 20 ....[.K.HBUS..@ 14d0: 45 50 45 4e 01 00 0b 45 50 42 52 14 00 20 4d 48 EPEN...EPBR.. MH 14e0: 45 4e 01 00 0e 4d 48 42 52 11 00 20 47 43 4c 4b EN...MHBR.. GCLK 14f0: 01 00 1f 44 30 45 4e 01 00 4f 05 50 58 45 4e 01 ...D0EN..O.PXEN. 1500: 50 58 53 5a 02 00 17 50 58 42 52 06 00 20 44 49 PXSZ...PXBR.. DI 1510: 45 4e 01 00 0b 44 49 42 52 14 00 20 00 14 4d 45 EN...DIBR.. ..ME 1520: 42 52 0c 00 40 06 00 04 50 4d 30 48 02 00 02 50 BR..@...PM0H...P 1530: 4d 31 4c 02 00 02 50 4d 31 48 02 00 02 50 4d 32 M1L...PM1H...PM2 1540: 4c 02 00 02 50 4d 32 48 02 00 02 50 4d 33 4c 02 L...PM2H...PM3L. 1550: 00 02 50 4d 33 48 02 00 02 50 4d 34 4c 02 00 02 ..PM3H...PM4L... 1560: 50 4d 34 48 02 00 02 50 4d 35 4c 02 00 02 50 4d PM4H...PM5L...PM 1570: 35 48 02 00 02 50 4d 36 4c 02 00 02 50 4d 36 48 5H...PM6L...PM6H 1580: 02 00 02 00 48 10 00 14 54 55 55 44 13 00 49 07 ....H...TUUD..I. 1590: 00 14 54 4c 55 44 0c 00 40 04 00 07 48 54 53 45 ..TLUD..@...HTSE 15a0: 01 5b 80 4d 43 48 54 00 0c 00 00 d1 fe 0b 00 11 .[.MCHT......... 15b0: 5b 81 06 4d 43 48 54 01 08 42 55 46 30 11 43 1f [..MCHT..BUF0.C. 15c0: 0b ee 01 88 0d 00 02 0c 00 00 00 00 00 ff 00 00 ................ 15d0: 00 00 01 87 17 00 01 0c 03 00 00 00 00 00 00 00 ................ 15e0: 00 f7 0c 00 00 00 00 00 00 f8 0c 00 00 47 01 f8 .............G.. 15f0: 0c f8 0c 01 08 87 17 00 01 0c 03 00 00 00 00 00 ................ 1600: 0d 00 00 ff ff 00 00 00 00 00 00 00 f3 00 00 87 ................ 1610: 17 00 00 0c 03 00 00 00 00 00 00 0a 00 ff ff 0b ................ 1620: 00 00 00 00 00 00 00 02 00 87 17 00 00 0c 03 00 ................ 1630: 00 00 00 00 00 0c 00 ff 3f 0c 00 00 00 00 00 00 ........?....... 1640: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 40 0c @.............@. 1650: 00 ff 7f 0c 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1660: 00 0c 03 00 00 00 00 00 80 0c 00 ff bf 0c 00 00 ................ 1670: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1680: 00 00 c0 0c 00 ff ff 0c 00 00 00 00 00 00 40 00 ..............@. 1690: 00 87 17 00 00 0c 03 00 00 00 00 00 00 0d 00 ff ................ 16a0: 3f 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c ?.......@....... 16b0: 03 00 00 00 00 00 40 0d 00 ff 7f 0d 00 00 00 00 ......@......... 16c0: 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 ..@............. 16d0: 80 0d 00 ff bf 0d 00 00 00 00 00 00 40 00 00 87 ............@... 16e0: 17 00 00 0c 03 00 00 00 00 00 c0 0d 00 ff ff 0d ................ 16f0: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 1700: 00 00 00 00 00 0e 00 ff 3f 0e 00 00 00 00 00 00 ........?....... 1710: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 40 0e @.............@. 1720: 00 ff 7f 0e 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1730: 00 0c 03 00 00 00 00 00 80 0e 00 ff bf 0e 00 00 ................ 1740: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1750: 00 00 c0 0e 00 ff ff 0e 00 00 00 00 00 00 40 00 ..............@. 1760: 00 87 17 00 00 0c 03 00 00 00 00 00 00 0f 00 ff ................ 1770: ff 0f 00 00 00 00 00 00 00 01 00 87 17 00 00 0c ................ 1780: 03 00 00 00 00 00 00 00 00 ff ff af fe 00 00 00 ................ 1790: 00 00 00 b0 fe 87 17 00 00 0c 03 00 00 00 00 00 ................ 17a0: 00 d4 fe ff 4f d4 fe 00 00 00 00 00 50 00 00 79 ....O.......P..y 17b0: 00 14 46 30 5f 43 52 53 08 8b 42 55 46 30 0a 0a ..F0_CRS..BUF0.. 17c0: 50 42 4d 58 70 74 7a 50 45 4c 4e 0a 14 00 0a 02 PBMXptzPELN..... 17d0: 00 50 42 4d 58 8b 42 55 46 30 0a 0e 50 42 4c 4e .PBMX.BUF0..PBLN 17e0: 70 74 7a 50 45 4c 4e 0a 14 00 01 00 50 42 4c 4e ptzPELN.....PBLN 17f0: a0 16 50 4d 31 4c 8a 42 55 46 30 0a 7c 43 30 4c ..PM1L.BUF0.|C0L 1800: 4e 70 00 43 30 4c 4e a0 19 93 50 4d 31 4c 01 8d Np.C0LN...PM1L.. 1810: 42 55 46 30 0b 58 03 43 30 52 57 70 00 43 30 52 BUF0.X.C0RWp.C0R 1820: 57 a0 16 50 4d 31 48 8a 42 55 46 30 0a 96 43 34 W..PM1H.BUF0..C4 1830: 4c 4e 70 00 43 34 4c 4e a0 19 93 50 4d 31 48 01 LNp.C4LN...PM1H. 1840: 8d 42 55 46 30 0b 28 04 43 34 52 57 70 00 43 34 .BUF0.(.C4RWp.C4 1850: 52 57 a0 16 50 4d 32 4c 8a 42 55 46 30 0a b0 43 RW..PM2L.BUF0..C 1860: 38 4c 4e 70 00 43 38 4c 4e a0 19 93 50 4d 32 4c 8LNp.C8LN...PM2L 1870: 01 8d 42 55 46 30 0b f8 04 43 38 52 57 70 00 43 ..BUF0...C8RWp.C 1880: 38 52 57 a0 16 50 4d 32 48 8a 42 55 46 30 0a ca 8RW..PM2H.BUF0.. 1890: 43 43 4c 4e 70 00 43 43 4c 4e a0 19 93 50 4d 32 CCLNp.CCLN...PM2 18a0: 48 01 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 H..BUF0...CCRWp. 18b0: 43 43 52 57 a0 16 50 4d 33 4c 8a 42 55 46 30 0a CCRW..PM3L.BUF0. 18c0: e4 44 30 4c 4e 70 00 44 30 4c 4e a0 19 93 50 4d .D0LNp.D0LN...PM 18d0: 33 4c 01 8d 42 55 46 30 0b 98 06 44 30 52 57 70 3L..BUF0...D0RWp 18e0: 00 44 30 52 57 a0 16 50 4d 33 48 8a 42 55 46 30 .D0RW..PM3H.BUF0 18f0: 0a fe 44 34 4c 4e 70 00 44 34 4c 4e a0 19 93 50 ..D4LNp.D4LN...P 1900: 4d 33 48 01 8d 42 55 46 30 0b 68 07 44 34 52 57 M3H..BUF0.h.D4RW 1910: 70 00 44 34 52 57 a0 17 50 4d 34 4c 8a 42 55 46 p.D4RW..PM4L.BUF 1920: 30 0b 18 01 44 38 4c 4e 70 00 44 38 4c 4e a0 19 0...D8LNp.D8LN.. 1930: 93 50 4d 34 4c 01 8d 42 55 46 30 0b 38 08 44 38 .PM4L..BUF0.8.D8 1940: 52 57 70 00 44 38 52 57 a0 17 50 4d 34 48 8a 42 RWp.D8RW..PM4H.B 1950: 55 46 30 0b 32 01 44 43 4c 4e 70 00 44 43 4c 4e UF0.2.DCLNp.DCLN 1960: a0 19 93 50 4d 34 48 01 8d 42 55 46 30 0b 08 09 ...PM4H..BUF0... 1970: 44 43 52 57 70 00 44 43 52 57 a0 17 50 4d 35 4c DCRWp.DCRW..PM5L 1980: 8a 42 55 46 30 0b 4c 01 45 30 4c 4e 70 00 45 30 .BUF0.L.E0LNp.E0 1990: 4c 4e a0 19 93 50 4d 35 4c 01 8d 42 55 46 30 0b LN...PM5L..BUF0. 19a0: d8 09 45 30 52 57 70 00 45 30 52 57 a0 17 50 4d ..E0RWp.E0RW..PM 19b0: 35 48 8a 42 55 46 30 0b 66 01 45 34 4c 4e 70 00 5H.BUF0.f.E4LNp. 19c0: 45 34 4c 4e a0 19 93 50 4d 35 48 01 8d 42 55 46 E4LN...PM5H..BUF 19d0: 30 0b a8 0a 45 34 52 57 70 00 45 34 52 57 a0 17 0...E4RWp.E4RW.. 19e0: 50 4d 36 4c 8a 42 55 46 30 0b 80 01 45 38 4c 4e PM6L.BUF0...E8LN 19f0: 70 00 45 38 4c 4e a0 19 93 50 4d 36 4c 01 8d 42 p.E8LN...PM6L..B 1a00: 55 46 30 0b 78 0b 45 38 52 57 70 00 45 38 52 57 UF0.x.E8RWp.E8RW 1a10: a0 17 50 4d 36 48 8a 42 55 46 30 0b 9a 01 45 43 ..PM6H.BUF0...EC 1a20: 4c 4e 70 00 45 43 4c 4e a0 19 93 50 4d 36 48 01 LNp.ECLN...PM6H. 1a30: 8d 42 55 46 30 0b 48 0c 45 43 52 57 70 00 45 43 .BUF0.H.ECRWp.EC 1a40: 52 57 a0 17 50 4d 30 48 8a 42 55 46 30 0b b4 01 RW..PM0H.BUF0... 1a50: 46 30 4c 4e 70 00 46 30 4c 4e a0 19 93 50 4d 30 F0LNp.F0LN...PM0 1a60: 48 01 8d 42 55 46 30 0b 18 0d 46 30 52 57 70 00 H..BUF0...F0RWp. 1a70: 46 30 52 57 8a 42 55 46 30 0b c2 01 4d 31 4d 4e F0RW.BUF0...M1MN 1a80: 8a 42 55 46 30 0b c6 01 4d 31 4d 58 8a 42 55 46 .BUF0...M1MX.BUF 1a90: 30 0b ce 01 4d 31 4c 4e 79 54 4c 55 44 0a 14 4d 0...M1LNyTLUD..M 1aa0: 31 4d 4e 72 74 4d 31 4d 58 4d 31 4d 4e 00 01 4d 1MNrtM1MXM1MN..M 1ab0: 31 4c 4e a4 42 55 46 30 08 47 55 49 44 11 13 0a 1LN.BUF0.GUID... 1ac0: 10 5b 4d db 33 f7 1f 1c 40 96 57 74 41 c0 3d d7 .[M.3...@.WtA.=. 1ad0: 66 08 53 55 50 50 00 08 43 54 52 4c 00 08 58 43 f.SUPP..CTRL..XC 1ae0: 4e 54 00 14 4a 0f 5f 4f 53 43 0c 70 6b 60 8a 60 NT..J._OSC.pk`.` 1af0: 00 43 44 57 31 8a 60 0a 04 43 44 57 32 8a 60 0a .CDW1.`..CDW2.`. 1b00: 08 43 44 57 33 a0 1a 5e 2e 58 48 43 5f 43 55 49 .CDW3..^.XHC_CUI 1b10: 44 68 a4 5e 2e 58 48 43 5f 50 4f 53 43 69 6a 6b Dh.^.XHC_POSCijk 1b20: a1 2c a0 2a 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 .,.*_OSI.Windows 1b30: 20 32 30 31 32 00 a0 16 93 58 43 4e 54 00 5e 2e 2012....XCNT.^. 1b40: 58 48 43 5f 58 53 45 4c 75 58 43 4e 54 a0 41 08 XHC_XSELuXCNT.A. 1b50: 90 93 68 47 55 49 44 4e 45 58 50 70 43 44 57 32 ..hGUIDNEXPpCDW2 1b60: 53 55 50 50 70 43 44 57 33 43 54 52 4c a0 25 80 SUPPpCDW3CTRL.%. 1b70: 7b 43 44 57 31 01 00 00 a0 0c 7b 43 54 52 4c 01 {CDW1.....{CTRL. 1b80: 00 4e 48 50 47 a0 0d 7b 43 54 52 4c 0a 04 00 4e .NHPG..{CTRL...N 1b90: 50 4d 45 a0 10 92 93 69 01 7d 43 44 57 31 0a 08 PME....i.}CDW1.. 1ba0: 43 44 57 31 a0 16 92 93 43 44 57 33 43 54 52 4c CDW1....CDW3CTRL 1bb0: 7d 43 44 57 31 0a 10 43 44 57 31 70 43 54 52 4c }CDW1..CDW1pCTRL 1bc0: 43 44 57 33 70 43 54 52 4c 4f 53 43 43 a4 60 a1 CDW3pCTRLOSCC.`. 1bd0: 0e 7d 43 44 57 31 0a 04 43 44 57 31 a4 60 10 40 .}CDW1..CDW1.`.@ 1be0: 14 5c 2e 5f 53 42 5f 50 43 49 30 14 0d 41 52 30 .\._SB_PCI0..AR0 1bf0: 30 00 a4 5e 5e 41 52 30 30 14 0d 50 52 30 30 00 0..^^AR00..PR00. 1c00: a4 5e 5e 50 52 30 30 14 0d 41 52 30 31 00 a4 5e .^^PR00..AR01..^ 1c10: 5e 41 52 30 31 14 0d 50 52 30 31 00 a4 5e 5e 50 ^AR01..PR01..^^P 1c20: 52 30 31 14 0d 41 52 30 32 00 a4 5e 5e 41 52 30 R01..AR02..^^AR0 1c30: 32 14 0d 50 52 30 32 00 a4 5e 5e 50 52 30 32 14 2..PR02..^^PR02. 1c40: 0d 41 52 30 34 00 a4 5e 5e 41 52 30 34 14 0d 50 .AR04..^^AR04..P 1c50: 52 30 34 00 a4 5e 5e 50 52 30 34 14 0d 41 52 30 R04..^^PR04..AR0 1c60: 35 00 a4 5e 5e 41 52 30 35 14 0d 50 52 30 35 00 5..^^AR05..PR05. 1c70: a4 5e 5e 50 52 30 35 14 0d 41 52 30 36 00 a4 5e .^^PR05..AR06..^ 1c80: 5e 41 52 30 36 14 0d 50 52 30 36 00 a4 5e 5e 50 ^AR06..PR06..^^P 1c90: 52 30 36 14 0d 41 52 30 37 00 a4 5e 5e 41 52 30 R06..AR07..^^AR0 1ca0: 37 14 0d 50 52 30 37 00 a4 5e 5e 50 52 30 37 14 7..PR07..^^PR07. 1cb0: 0d 41 52 30 38 00 a4 5e 5e 41 52 30 38 14 0d 50 .AR08..^^AR08..P 1cc0: 52 30 38 00 a4 5e 5e 50 52 30 38 14 0d 41 52 30 R08..^^PR08..AR0 1cd0: 39 00 a4 5e 5e 41 52 30 39 14 0d 50 52 30 39 00 9..^^AR09..PR09. 1ce0: a4 5e 5e 50 52 30 39 14 0d 41 52 30 41 00 a4 5e .^^PR09..AR0A..^ 1cf0: 5e 41 52 30 41 14 0d 50 52 30 41 00 a4 5e 5e 50 ^AR0A..PR0A..^^P 1d00: 52 30 41 14 0d 41 52 30 42 00 a4 5e 5e 41 52 30 R0A..AR0B..^^AR0 1d10: 42 14 0d 50 52 30 42 00 a4 5e 5e 50 52 30 42 5b B..PR0B..^^PR0B[ 1d20: 82 36 50 30 50 31 08 5f 41 44 52 0c 00 00 1e 00 .6P0P1._ADR..... 1d30: 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 0b 0a 04 .._PRW..GPRW.... 1d40: 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 41 52 .._PRT...PICM.AR 1d50: 30 31 a4 50 52 30 31 5b 82 83 03 01 4c 50 43 42 01.PR01[....LPCB 1d60: 08 5f 41 44 52 0c 00 00 1f 00 10 4e 64 5c 5f 53 ._ADR......Nd\_S 1d70: 42 5f 08 54 43 47 50 11 0b 0a 08 1f e0 1f 01 02 B_.TCGP......... 1d80: 04 08 f0 8c 54 43 47 50 00 50 50 52 51 8c 54 43 ....TCGP.PPRQ.TC 1d90: 47 50 01 50 50 4c 31 8c 54 43 47 50 0a 02 50 50 GP.PPL1.TCGP..PP 1da0: 52 50 8c 54 43 47 50 0a 03 54 50 52 53 8c 54 43 RP.TCGP..TPRS.TC 1db0: 47 50 0a 04 50 50 4f 52 8c 54 43 47 50 0a 05 54 GP..PPOR.TCGP..T 1dc0: 50 4d 56 8c 54 43 47 50 0a 06 4d 4f 52 5f 8c 54 PMV.TCGP..MOR_.T 1dd0: 43 47 50 0a 07 54 56 45 4e 5b 80 54 43 47 43 01 CGP..TVEN[.TCGC. 1de0: 0a 72 0a 02 5b 81 10 54 43 47 43 11 54 49 44 58 .r..[..TCGC.TIDX 1df0: 08 54 50 44 41 08 5b 86 1c 54 49 44 58 54 50 44 .TPDA.[..TIDXTPD 1e00: 41 11 00 40 20 54 50 50 31 08 50 50 4c 4f 08 54 A..@ TPP1.PPLO.T 1e10: 50 50 33 08 5b 80 53 4d 49 50 01 0a b2 0a 02 5b PP3.[.SMIP.....[ 1e20: 81 10 53 4d 49 50 02 53 4d 49 54 08 53 4d 49 44 ..SMIP.SMIT.SMID 1e30: 08 5b 80 2f 03 50 43 49 30 4c 50 43 42 4c 50 43 .[./.PCI0LPCBLPC 1e40: 31 02 0a 40 0a c0 5b 81 4a 04 2f 03 50 43 49 30 1..@..[.J./.PCI0 1e50: 4c 50 43 42 4c 50 43 31 00 00 40 10 50 41 52 43 LPCBLPC1..@.PARC 1e60: 08 50 42 52 43 08 50 43 52 43 08 50 44 52 43 08 .PBRC.PCRC.PDRC. 1e70: 00 20 50 45 52 43 08 50 46 52 43 08 50 47 52 43 . PERC.PFRC.PGRC 1e80: 08 50 48 52 43 08 00 40 20 00 08 00 08 58 55 53 .PHRC..@ ....XUS 1e90: 42 01 5b 82 42 0a 4c 4e 4b 41 08 5f 48 49 44 0c B.[.B.LNKA._HID. 1ea0: 41 d0 0c 0f 08 5f 55 49 44 01 14 11 5f 44 49 53 A...._UID..._DIS 1eb0: 08 7d 50 41 52 43 0a 80 50 41 52 43 14 0b 5f 50 .}PARC..PARC.._P 1ec0: 52 53 08 a4 50 52 53 41 14 38 5f 43 52 53 08 08 RS..PRSA.8_CRS.. 1ed0: 52 54 4c 41 11 09 0a 06 23 00 00 18 79 00 8b 52 RTLA....#...y..R 1ee0: 54 4c 41 01 49 52 51 30 70 00 49 52 51 30 79 01 TLA.IRQ0p.IRQ0y. 1ef0: 7b 50 41 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c {PARC...IRQ0.RTL 1f00: 41 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 A.._SRS..h.IRQ0. 1f10: 49 52 51 30 60 76 60 70 60 50 41 52 43 14 18 5f IRQ0`v`p`PARC.._ 1f20: 53 54 41 08 a0 0c 7b 50 41 52 43 0a 80 00 a4 0a STA...{PARC..... 1f30: 09 a1 04 a4 0a 0b 5b 82 43 0a 4c 4e 4b 42 08 5f ......[.C.LNKB._ 1f40: 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 02 14 HID.A...._UID... 1f50: 11 5f 44 49 53 08 7d 50 42 52 43 0a 80 50 42 52 ._DIS.}PBRC..PBR 1f60: 43 14 0b 5f 50 52 53 08 a4 50 52 53 42 14 38 5f C.._PRS..PRSB.8_ 1f70: 43 52 53 08 08 52 54 4c 42 11 09 0a 06 23 00 00 CRS..RTLB....#.. 1f80: 18 79 00 8b 52 54 4c 42 01 49 52 51 30 70 00 49 .y..RTLB.IRQ0p.I 1f90: 52 51 30 79 01 7b 50 42 52 43 0a 0f 00 49 52 51 RQ0y.{PBRC...IRQ 1fa0: 30 a4 52 54 4c 42 14 1b 5f 53 52 53 09 8b 68 01 0.RTLB.._SRS..h. 1fb0: 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 42 IRQ0.IRQ0`v`p`PB 1fc0: 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 42 52 43 RC.._STA...{PBRC 1fd0: 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 43 0a 4c ...........[.C.L 1fe0: 4e 4b 43 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 NKC._HID.A...._U 1ff0: 49 44 0a 03 14 11 5f 44 49 53 08 7d 50 43 52 43 ID...._DIS.}PCRC 2000: 0a 80 50 43 52 43 14 0b 5f 50 52 53 08 a4 50 52 ..PCRC.._PRS..PR 2010: 53 43 14 38 5f 43 52 53 08 08 52 54 4c 43 11 09 SC.8_CRS..RTLC.. 2020: 0a 06 23 00 00 18 79 00 8b 52 54 4c 43 01 49 52 ..#...y..RTLC.IR 2030: 51 30 70 00 49 52 51 30 79 01 7b 50 43 52 43 0a Q0p.IRQ0y.{PCRC. 2040: 0f 00 49 52 51 30 a4 52 54 4c 43 14 1b 5f 53 52 ..IRQ0.RTLC.._SR 2050: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 2060: 60 70 60 50 43 52 43 14 18 5f 53 54 41 08 a0 0c `p`PCRC.._STA... 2070: 7b 50 43 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PCRC........... 2080: 5b 82 43 0a 4c 4e 4b 44 08 5f 48 49 44 0c 41 d0 [.C.LNKD._HID.A. 2090: 0c 0f 08 5f 55 49 44 0a 04 14 11 5f 44 49 53 08 ..._UID...._DIS. 20a0: 7d 50 44 52 43 0a 80 50 44 52 43 14 0b 5f 50 52 }PDRC..PDRC.._PR 20b0: 53 08 a4 50 52 53 44 14 38 5f 43 52 53 08 08 52 S..PRSD.8_CRS..R 20c0: 54 4c 44 11 09 0a 06 23 00 00 18 79 00 8b 52 54 TLD....#...y..RT 20d0: 4c 44 01 49 52 51 30 70 00 49 52 51 30 79 01 7b LD.IRQ0p.IRQ0y.{ 20e0: 50 44 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 44 PDRC...IRQ0.RTLD 20f0: 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 .._SRS..h.IRQ0.I 2100: 52 51 30 60 76 60 70 60 50 44 52 43 14 18 5f 53 RQ0`v`p`PDRC.._S 2110: 54 41 08 a0 0c 7b 50 44 52 43 0a 80 00 a4 0a 09 TA...{PDRC...... 2120: a1 04 a4 0a 0b 5b 82 43 0a 4c 4e 4b 45 08 5f 48 .....[.C.LNKE._H 2130: 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 05 14 11 ID.A...._UID.... 2140: 5f 44 49 53 08 7d 50 45 52 43 0a 80 50 45 52 43 _DIS.}PERC..PERC 2150: 14 0b 5f 50 52 53 08 a4 50 52 53 45 14 38 5f 43 .._PRS..PRSE.8_C 2160: 52 53 08 08 52 54 4c 45 11 09 0a 06 23 00 00 18 RS..RTLE....#... 2170: 79 00 8b 52 54 4c 45 01 49 52 51 30 70 00 49 52 y..RTLE.IRQ0p.IR 2180: 51 30 79 01 7b 50 45 52 43 0a 0f 00 49 52 51 30 Q0y.{PERC...IRQ0 2190: a4 52 54 4c 45 14 1b 5f 53 52 53 09 8b 68 01 49 .RTLE.._SRS..h.I 21a0: 52 51 30 82 49 52 51 30 60 76 60 70 60 50 45 52 RQ0.IRQ0`v`p`PER 21b0: 43 14 18 5f 53 54 41 08 a0 0c 7b 50 45 52 43 0a C.._STA...{PERC. 21c0: 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 43 0a 4c 4e ..........[.C.LN 21d0: 4b 46 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 KF._HID.A...._UI 21e0: 44 0a 06 14 11 5f 44 49 53 08 7d 50 46 52 43 0a D...._DIS.}PFRC. 21f0: 80 50 46 52 43 14 0b 5f 50 52 53 08 a4 50 52 53 .PFRC.._PRS..PRS 2200: 46 14 38 5f 43 52 53 08 08 52 54 4c 46 11 09 0a F.8_CRS..RTLF... 2210: 06 23 00 00 18 79 00 8b 52 54 4c 46 01 49 52 51 .#...y..RTLF.IRQ 2220: 30 70 00 49 52 51 30 79 01 7b 50 46 52 43 0a 0f 0p.IRQ0y.{PFRC.. 2230: 00 49 52 51 30 a4 52 54 4c 46 14 1b 5f 53 52 53 .IRQ0.RTLF.._SRS 2240: 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 60 ..h.IRQ0.IRQ0`v` 2250: 70 60 50 46 52 43 14 18 5f 53 54 41 08 a0 0c 7b p`PFRC.._STA...{ 2260: 50 46 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b PFRC...........[ 2270: 82 43 0a 4c 4e 4b 47 08 5f 48 49 44 0c 41 d0 0c .C.LNKG._HID.A.. 2280: 0f 08 5f 55 49 44 0a 07 14 11 5f 44 49 53 08 7d .._UID...._DIS.} 2290: 50 47 52 43 0a 80 50 47 52 43 14 0b 5f 50 52 53 PGRC..PGRC.._PRS 22a0: 08 a4 50 52 53 47 14 38 5f 43 52 53 08 08 52 54 ..PRSG.8_CRS..RT 22b0: 4c 47 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LG....#...y..RTL 22c0: 47 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 G.IRQ0p.IRQ0y.{P 22d0: 47 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 47 14 GRC...IRQ0.RTLG. 22e0: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 22f0: 51 30 60 76 60 70 60 50 47 52 43 14 18 5f 53 54 Q0`v`p`PGRC.._ST 2300: 41 08 a0 0c 7b 50 47 52 43 0a 80 00 a4 0a 09 a1 A...{PGRC....... 2310: 04 a4 0a 0b 5b 82 43 0a 4c 4e 4b 48 08 5f 48 49 ....[.C.LNKH._HI 2320: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 08 14 11 5f D.A...._UID...._ 2330: 44 49 53 08 7d 50 48 52 43 0a 80 50 48 52 43 14 DIS.}PHRC..PHRC. 2340: 0b 5f 50 52 53 08 a4 50 52 53 48 14 38 5f 43 52 ._PRS..PRSH.8_CR 2350: 53 08 08 52 54 4c 48 11 09 0a 06 23 00 00 18 79 S..RTLH....#...y 2360: 00 8b 52 54 4c 48 01 49 52 51 30 70 00 49 52 51 ..RTLH.IRQ0p.IRQ 2370: 30 79 01 7b 50 48 52 43 0a 0f 00 49 52 51 30 a4 0y.{PHRC...IRQ0. 2380: 52 54 4c 48 14 1b 5f 53 52 53 09 8b 68 01 49 52 RTLH.._SRS..h.IR 2390: 51 30 82 49 52 51 30 60 76 60 70 60 50 48 52 43 Q0.IRQ0`v`p`PHRC 23a0: 14 18 5f 53 54 41 08 a0 0c 7b 50 48 52 43 0a 80 .._STA...{PHRC.. 23b0: 00 a4 0a 09 a1 04 a4 0a 0b 5b 80 4c 50 43 30 02 .........[.LPC0. 23c0: 0a 40 0a c0 5b 81 22 4c 50 43 30 00 00 40 20 49 .@..[."LPC0..@ I 23d0: 4f 44 30 08 49 4f 44 31 08 00 40 37 52 41 45 4e OD0.IOD1..@7RAEN 23e0: 01 00 0d 52 43 42 41 12 5b 82 3d 44 4d 41 43 08 ...RCBA.[.=DMAC. 23f0: 5f 48 49 44 0c 41 d0 02 00 08 5f 43 52 53 11 28 _HID.A...._CRS.( 2400: 0a 25 47 01 00 00 00 00 01 20 47 01 81 00 81 00 .%G...... G..... 2410: 01 11 47 01 93 00 93 00 01 0d 47 01 c0 00 c0 00 ..G.......G..... 2420: 01 20 2a 10 01 79 00 5b 82 26 46 57 48 44 08 5f . *..y.[.&FWHD._ 2430: 48 49 44 0c 25 d4 08 00 08 5f 43 52 53 11 11 0a HID.%...._CRS... 2440: 0e 86 09 00 00 00 00 00 ff 00 00 00 01 79 00 5b .............y.[ 2450: 82 4c 0a 48 50 45 54 08 5f 48 49 44 0c 41 d0 01 .L.HPET._HID.A.. 2460: 03 08 5f 55 49 44 00 08 42 55 46 30 11 11 0a 0e .._UID..BUF0.... 2470: 86 09 00 01 00 00 d0 fe 00 04 00 00 79 00 14 27 ............y..' 2480: 5f 53 54 41 00 a0 13 92 95 4f 53 59 53 0b d1 07 _STA.....OSYS... 2490: a0 08 48 50 41 45 a4 0a 0f a1 0a a0 08 48 50 41 ..HPAE.......HPA 24a0: 45 a4 0a 0b a4 00 14 46 05 5f 43 52 53 08 a0 49 E......F._CRS..I 24b0: 04 48 50 41 45 8a 42 55 46 30 0a 04 48 50 54 30 .HPAE.BUF0..HPT0 24c0: a0 11 93 48 50 41 53 01 70 0c 00 10 d0 fe 48 50 ...HPAS.p.....HP 24d0: 54 30 a0 12 93 48 50 41 53 0a 02 70 0c 00 20 d0 T0...HPAS..p.. . 24e0: fe 48 50 54 30 a0 12 93 48 50 41 53 0a 03 70 0c .HPT0...HPAS..p. 24f0: 00 30 d0 fe 48 50 54 30 a4 42 55 46 30 5b 82 45 .0..HPT0.BUF0[.E 2500: 0a 49 50 49 43 08 5f 48 49 44 0b 41 d0 08 5f 43 .IPIC._HID.A.._C 2510: 52 53 11 41 09 0a 8d 47 01 20 00 20 00 01 02 47 RS.A...G. . ...G 2520: 01 24 00 24 00 01 02 47 01 28 00 28 00 01 02 47 .$.$...G.(.(...G 2530: 01 2c 00 2c 00 01 02 47 01 30 00 30 00 01 02 47 .,.,...G.0.0...G 2540: 01 34 00 34 00 01 02 47 01 38 00 38 00 01 02 47 .4.4...G.8.8...G 2550: 01 3c 00 3c 00 01 02 47 01 a0 00 a0 00 01 02 47 .<.<...G.......G 2560: 01 a4 00 a4 00 01 02 47 01 a8 00 a8 00 01 02 47 .......G.......G 2570: 01 ac 00 ac 00 01 02 47 01 b0 00 b0 00 01 02 47 .......G.......G 2580: 01 b4 00 b4 00 01 02 47 01 b8 00 b8 00 01 02 47 .......G.......G 2590: 01 bc 00 bc 00 01 02 47 01 d0 04 d0 04 01 02 22 .......G......." 25a0: 04 00 79 00 5b 82 25 4d 41 54 48 08 5f 48 49 44 ..y.[.%MATH._HID 25b0: 0c 41 d0 0c 04 08 5f 43 52 53 11 10 0a 0d 47 01 .A...._CRS....G. 25c0: f0 00 f0 00 01 01 22 00 20 79 00 5b 82 43 0d 4c ......". y.[.C.L 25d0: 44 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 DRC._HID.A...._U 25e0: 49 44 0a 02 08 5f 43 52 53 11 46 0b 0a b2 47 01 ID..._CRS.F...G. 25f0: 2e 00 2e 00 01 02 47 01 4e 00 4e 00 01 02 47 01 ......G.N.N...G. 2600: 61 00 61 00 01 01 47 01 63 00 63 00 01 01 47 01 a.a...G.c.c...G. 2610: 65 00 65 00 01 01 47 01 67 00 67 00 01 01 47 01 e.e...G.g.g...G. 2620: 70 00 70 00 01 01 47 01 80 00 80 00 01 01 47 01 p.p...G.......G. 2630: 92 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 ......G.......G. 2640: 80 06 80 06 01 20 47 01 00 20 00 20 01 04 47 01 ..... G.. . ..G. 2650: 00 08 00 08 01 10 47 01 ff ff ff ff 01 01 47 01 ......G.......G. 2660: 00 04 00 04 01 54 47 01 58 04 58 04 01 28 47 01 .....TG.X.X..(G. 2670: 00 05 00 05 01 80 47 01 00 16 00 16 01 ff 47 01 ......G.......G. 2680: 00 fe 00 fe 01 01 47 01 68 00 68 00 01 01 47 01 ......G.h.h...G. 2690: 6c 00 6c 00 01 01 47 01 00 07 00 07 01 10 79 00 l.l...G.......y. 26a0: 5b 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b [.%RTC_._HID.A.. 26b0: 00 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 .._CRS....G.p.p. 26c0: 01 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f .."..y.[.-TIMR._ 26d0: 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a HID.A...._CRS... 26e0: 15 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 .G.@.@...G.P.P.. 26f0: 04 22 01 00 79 00 5b 82 4f 04 43 57 44 54 08 5f ."..y.[.O.CWDT._ 2700: 48 49 44 0c 25 d4 3f 0d 08 5f 43 49 44 0c 41 d0 HID.%.?.._CID.A. 2710: 0c 02 08 42 55 46 30 11 0d 0a 0a 47 01 54 04 54 ...BUF0....G.T.T 2720: 04 04 04 79 00 14 15 5f 53 54 41 08 a0 0a 93 57 ...y..._STA....W 2730: 44 54 45 01 a4 0a 0f a1 03 a4 00 14 0b 5f 43 52 DTE.........._CR 2740: 53 08 a4 42 55 46 30 5b 82 45 06 50 53 4b 32 14 S..BUF0[.E.PSK2. 2750: 1c 5f 48 49 44 00 a0 0f 93 4f 53 59 53 0b dc 07 ._HID....OSYS... 2760: a4 0c 36 66 00 01 a4 0c 41 d0 03 03 08 5f 43 49 ..6f....A...._CI 2770: 44 0c 41 d0 03 03 08 5f 43 52 53 11 19 0a 16 47 D.A...._CRS....G 2780: 01 60 00 60 00 01 01 47 01 64 00 64 00 01 01 23 .`.`...G.d.d...# 2790: 02 00 01 79 00 08 5f 50 52 53 11 13 0a 10 31 00 ...y.._PRS....1. 27a0: 4b 60 00 01 4b 64 00 01 22 02 00 38 79 00 5b 82 K`..Kd.."..8y.[. 27b0: 4b 04 50 53 32 4d 08 5f 48 49 44 0c 4f 2e 2a 08 K.PS2M._HID.O.*. 27c0: 08 5f 43 49 44 0c 41 d0 0f 13 08 5f 43 52 53 11 ._CID.A...._CRS. 27d0: 09 0a 06 23 00 10 01 79 00 08 5f 50 52 53 11 0b ...#...y.._PRS.. 27e0: 0a 08 31 00 22 00 10 38 79 00 14 10 4d 48 49 44 ..1."..8y...MHID 27f0: 00 70 0c 30 ae 00 51 5f 48 49 44 5b 82 4f 58 54 .p.0..Q_HID[.OXT 2800: 50 4d 5f 08 54 4d 50 56 00 14 46 08 5f 48 49 44 PM_.TMPV..F._HID 2810: 00 a0 0f 93 54 56 49 44 0b d1 15 a4 0c 24 d8 01 ....TVID.....$.. 2820: 02 a0 18 91 93 54 56 49 44 0b 50 10 93 54 56 49 .....TVID.P..TVI 2830: 44 0b 0b 10 a4 0c 5c a3 10 00 a0 0f 93 54 56 49 D.....\......TVI 2840: 44 0b fa 19 a4 0c 4d cf 35 04 a0 0f 93 54 44 49 D.....M.5....TDI 2850: 44 0b 02 10 a4 0c 08 6d 01 02 a0 0f 93 54 44 49 D......m.....TDI 2860: 44 0b 01 10 a4 0c 08 6d 01 01 a0 0f 93 54 56 49 D......m.....TVI 2870: 44 0b 14 11 a4 0c 06 8d 12 00 a0 0f 93 54 56 49 D............TVI 2880: 44 0b 4a 10 a4 0c 4d af 12 00 a4 0c 41 d0 0c 31 D.J...M.....A..1 2890: 08 5f 43 49 44 0c 41 d0 0c 31 08 5f 55 49 44 01 ._CID.A..1._UID. 28a0: 5b 80 54 4d 4d 42 00 0c 00 00 d4 fe 0b 00 10 5b [.TMMB.........[ 28b0: 81 26 54 4d 4d 42 11 41 43 43 53 08 00 48 0b 54 .&TMMB.ACCS..H.T 28c0: 53 54 41 08 54 42 43 41 08 00 80 73 07 54 56 49 STA.TBCA...s.TVI 28d0: 44 10 54 44 49 44 10 14 20 5f 53 54 41 00 a0 0a D.TDID.. _STA... 28e0: 93 41 43 43 53 0a ff a4 00 a1 0b a0 09 93 54 50 .ACCS.........TP 28f0: 4d 45 00 a4 00 a4 0a 0f 08 42 55 46 31 11 11 0a ME.......BUF1... 2900: 0e 86 09 00 00 00 00 d4 fe 00 50 00 00 79 00 14 ..........P..y.. 2910: 0b 5f 43 52 53 08 a4 42 55 46 31 14 37 55 43 4d ._CRS..BUF1.7UCM 2920: 50 02 a0 09 92 93 0a 10 87 68 a4 00 a0 09 92 93 P........h...... 2930: 0a 10 87 69 a4 00 70 00 60 a2 17 95 60 0a 10 a0 ...i..p.`...`... 2940: 0f 92 93 83 88 68 60 00 83 88 69 60 00 a4 00 75 .....h`...i`...u 2950: 60 a4 01 14 4d 41 5f 44 53 4d 0c 08 54 54 4d 50 `...MA_DSM..TTMP 2960: 11 03 01 00 8c 54 54 4d 50 00 54 4d 50 56 a0 41 .....TTMP.TMPV.A 2970: 36 93 55 43 4d 50 68 11 13 0a 10 a6 fa dd 3d 1b 6.UCMPh.......=. 2980: 36 b4 4e a4 24 8d 10 08 9d 16 53 01 a0 0b 93 6a 6.N.$.....S....j 2990: 00 a4 11 05 0a 02 ff 01 a0 0d 93 6a 01 a4 11 07 ...........j.... 29a0: 0a 04 31 2e 32 00 a0 4c 09 93 6a 0a 02 a0 42 09 ..1.2..L..j...B. 29b0: 54 50 52 53 a0 27 92 94 83 88 6b 00 00 0a 0b 70 TPRS.'....k....p 29c0: 83 88 6b 00 00 53 4d 49 44 70 0a c1 53 4d 49 54 ..k..SMIDp..SMIT 29d0: 70 83 88 6b 00 00 54 50 50 31 a4 00 a0 31 90 92 p..k..TPP1...1.. 29e0: 95 83 88 6b 00 00 0a 0e 92 94 83 88 6b 00 00 0a ...k........k... 29f0: 12 70 83 88 6b 00 00 53 4d 49 44 70 0a c1 53 4d .p..k..SMIDp..SM 2a00: 49 54 70 83 88 6b 00 00 54 50 50 31 a4 00 a0 2f ITp..k..TPP1.../ 2a10: 91 93 83 88 6b 00 00 0a 15 93 83 88 6b 00 00 0a ....k.......k... 2a20: 16 70 83 88 6b 00 00 53 4d 49 44 70 0a c1 53 4d .p..k..SMIDp..SM 2a30: 49 54 70 83 88 6b 00 00 54 50 50 31 a4 00 a4 01 ITp..k..TPP1.... 2a40: a4 0a 02 a0 36 93 6a 0a 03 08 54 4d 50 31 12 08 ....6.j...TMP1.. 2a50: 02 00 0c ff ff ff ff 70 54 50 50 31 54 4d 50 56 .......pTPP1TMPV 2a60: 70 7b 54 4d 50 56 50 50 52 51 54 4d 50 56 88 54 p{TMPVPPRQTMPV.T 2a70: 4d 50 31 01 00 a4 54 4d 50 31 a0 08 93 6a 0a 04 MP1...TMP1...j.. 2a80: a4 0a 02 a0 42 0a 93 6a 0a 05 08 54 4d 50 32 12 ....B..j...TMP2. 2a90: 0d 03 00 0c ff ff ff ff 0c ff ff ff ff 70 50 50 .............pPP 2aa0: 4c 4f 88 54 4d 50 32 01 00 a0 2b 91 91 94 50 50 LO.TMP2...+...PP 2ab0: 4c 4f 0a 16 93 50 50 4c 4f 0a 0c 93 50 50 4c 4f LO...PPLO...PPLO 2ac0: 0a 0d 70 0c f1 ff ff ff 88 54 4d 50 32 0a 02 00 ..p......TMP2... 2ad0: a4 54 4d 50 32 a0 1b 93 50 50 52 51 0a ff 70 0c .TMP2...PPRQ..p. 2ae0: f1 ff ff ff 88 54 4d 50 32 0a 02 00 a4 54 4d 50 .....TMP2....TMP 2af0: 32 70 54 50 50 33 54 4d 50 56 a0 1c 7b 54 4d 50 2pTPP3TMPV..{TMP 2b00: 56 0a 04 00 70 0c f0 ff ff ff 88 54 4d 50 32 0a V...p......TMP2. 2b10: 02 00 a4 54 4d 50 32 70 00 88 54 4d 50 32 0a 02 ...TMP2p..TMP2.. 2b20: 00 a4 54 4d 50 32 a0 08 93 6a 0a 06 a4 0a 03 a0 ..TMP2...j...... 2b30: 4c 09 93 6a 0a 07 a0 42 09 54 50 52 53 a0 27 92 L..j...B.TPRS.'. 2b40: 94 83 88 6b 00 00 0a 0b 70 83 88 6b 00 00 53 4d ...k....p..k..SM 2b50: 49 44 70 0a c1 53 4d 49 54 70 83 88 6b 00 00 54 IDp..SMITp..k..T 2b60: 50 50 31 a4 00 a0 31 90 92 95 83 88 6b 00 00 0a PP1...1.....k... 2b70: 0e 92 94 83 88 6b 00 00 0a 12 70 83 88 6b 00 00 .....k....p..k.. 2b80: 53 4d 49 44 70 0a c1 53 4d 49 54 70 83 88 6b 00 SMIDp..SMITp..k. 2b90: 00 54 50 50 31 a4 00 a0 2f 91 93 83 88 6b 00 00 .TPP1.../....k.. 2ba0: 0a 15 93 83 88 6b 00 00 0a 16 70 83 88 6b 00 00 .....k....p..k.. 2bb0: 53 4d 49 44 70 0a c1 53 4d 49 54 70 83 88 6b 00 SMIDp..SMITp..k. 2bc0: 00 54 50 50 31 a4 00 a4 01 a4 0a 02 a0 41 10 93 .TPP1........A.. 2bd0: 6a 0a 08 08 50 50 49 50 00 08 50 50 49 43 00 70 j...PPIP..PPIC.p 2be0: 54 50 50 33 54 4d 50 56 a0 0f 7b 54 4d 50 56 0a TPP3TMPV..{TMPV. 2bf0: 10 00 70 01 50 50 49 50 a0 0f 7b 54 4d 50 56 0a ..p.PPIP..{TMPV. 2c00: 20 00 70 01 50 50 49 43 a0 17 93 83 88 6b 00 00 .p.PPIC.....k.. 2c10: 0a 05 a0 0a 94 50 50 49 43 00 a4 0a 04 a4 0a 03 .....PPIC....... 2c20: a0 21 90 92 95 83 88 6b 00 00 01 92 94 83 88 6b .!.....k.......k 2c30: 00 00 0a 04 a0 0a 94 50 50 49 50 00 a4 0a 04 a4 .......PPIP..... 2c40: 0a 03 a0 22 90 92 95 83 88 6b 00 00 0a 06 92 94 ...".....k...... 2c50: 83 88 6b 00 00 0a 0b a0 0a 94 50 50 49 50 00 a4 ..k.......PPIP.. 2c60: 0a 04 a4 0a 03 a0 32 91 93 83 88 6b 00 00 0a 0e ......2....k.... 2c70: 90 92 95 83 88 6b 00 00 0a 15 92 94 83 88 6b 00 .....k........k. 2c80: 00 0a 16 a0 11 90 94 50 50 49 50 00 94 50 50 49 .......PPIP..PPI 2c90: 43 00 a4 0a 04 a4 0a 03 a0 15 91 93 83 88 6b 00 C.............k. 2ca0: 00 0a 10 93 83 88 6b 00 00 0a 12 a4 0a 03 a0 1d ......k......... 2cb0: 91 93 83 88 6b 00 00 00 91 93 83 88 6b 00 00 0a ....k.......k... 2cc0: 0f 93 83 88 6b 00 00 0a 11 a4 0a 04 a4 00 a4 01 ....k........... 2cd0: a0 4b 09 93 55 43 4d 50 68 11 13 0a 10 ed 54 60 .K..UCMPh.....T` 2ce0: 37 13 cc 75 46 90 1c 47 56 d7 f2 d4 5d 01 a0 09 7..uF..GV...]... 2cf0: 93 6a 00 a4 11 03 01 01 a0 41 07 93 6a 01 a0 38 .j.......A..j..8 2d00: 7b 83 88 6b 00 00 01 00 70 01 4d 4f 52 44 a0 18 {..k....p.MORD.. 2d10: 7b 83 88 6b 00 00 0a 10 00 70 0a 83 53 4d 49 44 {..k.....p..SMID 2d20: 70 0a c1 53 4d 49 54 a1 0f 70 0a 81 53 4d 49 44 p..SMIT..p..SMID 2d30: 70 0a c1 53 4d 49 54 a1 30 70 00 4d 4f 52 44 a0 p..SMIT.0p.MORD. 2d40: 18 7b 83 88 6b 00 00 0a 10 00 70 0a 82 53 4d 49 .{..k.....p..SMI 2d50: 44 70 0a c1 53 4d 49 54 a1 0f 70 0a 80 53 4d 49 Dp..SMIT..p..SMI 2d60: 44 70 0a c1 53 4d 49 54 a4 00 a4 01 a4 11 03 01 Dp..SMIT........ 2d70: 00 14 1a 43 4d 4f 52 00 70 00 4d 4f 52 44 70 0a ...CMOR.p.MORDp. 2d80: 80 53 4d 49 44 70 0a c1 53 4d 49 54 10 4e 06 5f .SMIDp..SMIT.N._ 2d90: 50 52 5f 5b 83 0b 43 50 55 30 01 10 04 00 00 06 PR_[..CPU0...... 2da0: 5b 83 0b 43 50 55 31 02 10 04 00 00 06 5b 83 0b [..CPU1......[.. 2db0: 43 50 55 32 03 10 04 00 00 06 5b 83 0b 43 50 55 CPU2......[..CPU 2dc0: 33 04 10 04 00 00 06 5b 83 0b 43 50 55 34 05 10 3......[..CPU4.. 2dd0: 04 00 00 06 5b 83 0b 43 50 55 35 06 10 04 00 00 ....[..CPU5..... 2de0: 06 5b 83 0b 43 50 55 36 07 10 04 00 00 06 5b 83 .[..CPU6......[. 2df0: 0b 43 50 55 37 08 10 04 00 00 06 10 4e 1f 5c 00 .CPU7.......N.\. 2e00: 14 49 1f 50 4e 54 46 01 a0 4d 17 7b 50 50 4d 46 .I.PNTF..M.{PPMF 2e10: 0c 00 00 00 01 00 a0 2d 91 90 7b 50 44 43 30 0a .......-..{PDC0. 2e20: 08 00 91 93 68 0a 80 93 68 0a 82 90 7b 50 44 43 ....h...h...{PDC 2e30: 30 0a 10 00 93 68 0a 81 86 5c 2e 5f 50 52 5f 43 0....h...\._PR_C 2e40: 50 55 30 68 a0 2d 91 90 7b 50 44 43 31 0a 08 00 PU0h.-..{PDC1... 2e50: 91 93 68 0a 80 93 68 0a 82 90 7b 50 44 43 31 0a ..h...h...{PDC1. 2e60: 10 00 93 68 0a 81 86 5c 2e 5f 50 52 5f 43 50 55 ...h...\._PR_CPU 2e70: 31 68 a0 2d 91 90 7b 50 44 43 32 0a 08 00 91 93 1h.-..{PDC2..... 2e80: 68 0a 80 93 68 0a 82 90 7b 50 44 43 32 0a 10 00 h...h...{PDC2... 2e90: 93 68 0a 81 86 5c 2e 5f 50 52 5f 43 50 55 32 68 .h...\._PR_CPU2h 2ea0: a0 2d 91 90 7b 50 44 43 33 0a 08 00 91 93 68 0a .-..{PDC3.....h. 2eb0: 80 93 68 0a 82 90 7b 50 44 43 33 0a 10 00 93 68 ..h...{PDC3....h 2ec0: 0a 81 86 5c 2e 5f 50 52 5f 43 50 55 33 68 a0 2d ...\._PR_CPU3h.- 2ed0: 91 90 7b 50 44 43 34 0a 08 00 91 93 68 0a 80 93 ..{PDC4.....h... 2ee0: 68 0a 82 90 7b 50 44 43 34 0a 10 00 93 68 0a 81 h...{PDC4....h.. 2ef0: 86 5c 2e 5f 50 52 5f 43 50 55 34 68 a0 2d 91 90 .\._PR_CPU4h.-.. 2f00: 7b 50 44 43 35 0a 08 00 91 93 68 0a 80 93 68 0a {PDC5.....h...h. 2f10: 82 90 7b 50 44 43 35 0a 10 00 93 68 0a 81 86 5c ..{PDC5....h...\ 2f20: 2e 5f 50 52 5f 43 50 55 35 68 a0 2d 91 90 7b 50 ._PR_CPU5h.-..{P 2f30: 44 43 36 0a 08 00 91 93 68 0a 80 93 68 0a 82 90 DC6.....h...h... 2f40: 7b 50 44 43 36 0a 10 00 93 68 0a 81 86 5c 2e 5f {PDC6....h...\._ 2f50: 50 52 5f 43 50 55 36 68 a0 2d 91 90 7b 50 44 43 PR_CPU6h.-..{PDC 2f60: 37 0a 08 00 91 93 68 0a 80 93 68 0a 82 90 7b 50 7.....h...h...{P 2f70: 44 43 37 0a 10 00 93 68 0a 81 86 5c 2e 5f 50 52 DC7....h...\._PR 2f80: 5f 43 50 55 37 68 a1 43 07 a0 40 07 91 93 68 0a _CPU7h.C..@...h. 2f90: 80 91 93 68 0a 81 93 68 0a 82 86 5c 2e 5f 50 52 ...h...h...\._PR 2fa0: 5f 43 50 55 30 68 86 5c 2e 5f 50 52 5f 43 50 55 _CPU0h.\._PR_CPU 2fb0: 31 68 86 5c 2e 5f 50 52 5f 43 50 55 32 68 86 5c 1h.\._PR_CPU2h.\ 2fc0: 2e 5f 50 52 5f 43 50 55 33 68 86 5c 2e 5f 50 52 ._PR_CPU3h.\._PR 2fd0: 5f 43 50 55 34 68 86 5c 2e 5f 50 52 5f 43 50 55 _CPU4h.\._PR_CPU 2fe0: 35 68 86 5c 2e 5f 50 52 5f 43 50 55 36 68 86 5c 5h.\._PR_CPU6h.\ 2ff0: 2e 5f 50 52 5f 43 50 55 37 68 5b 01 4d 55 54 58 ._PR_CPU7h[.MUTX 3000: 00 5b 80 50 52 54 30 01 0a 80 0a 04 5b 81 0b 50 .[.PRT0.....[..P 3010: 52 54 30 13 50 38 30 48 20 14 4e 07 50 38 58 48 RT0.P80H .N.P8XH 3020: 0a a0 17 93 68 00 70 7d 7b 50 38 30 44 0c 00 ff ....h.p}{P80D... 3030: ff ff 00 69 00 50 38 30 44 a0 1b 93 68 01 70 7d ...i.P80D...h.p} 3040: 7b 50 38 30 44 0c ff 00 ff ff 00 79 69 0a 08 00 {P80D......yi... 3050: 00 50 38 30 44 a0 1c 93 68 0a 02 70 7d 7b 50 38 .P80D...h..p}{P8 3060: 30 44 0c ff ff 00 ff 00 79 69 0a 10 00 00 50 38 0D......yi....P8 3070: 30 44 a0 1c 93 68 0a 03 70 7d 7b 50 38 30 44 0c 0D...h..p}{P80D. 3080: ff ff ff 00 00 79 69 0a 18 00 00 50 38 30 44 70 .....yi....P80Dp 3090: 50 38 30 44 50 38 30 48 5b 80 53 50 52 54 01 0a P80DP80H[.SPRT.. 30a0: b2 0a 02 5b 81 0b 53 50 52 54 11 53 53 4d 50 08 ...[..SPRT.SSMP. 30b0: 14 12 5f 50 49 43 01 70 68 47 50 49 43 70 68 50 .._PIC.phGPICphP 30c0: 49 43 4d 14 41 10 5f 50 54 53 01 70 00 50 38 30 ICM.A._PTS.p.P80 30d0: 44 70 68 50 38 30 48 a0 1c 93 68 0a 03 a0 16 90 DphP80H...h..... 30e0: 44 54 53 45 94 54 43 4e 54 01 54 52 41 50 54 52 DTSE.TCNT.TRAPTR 30f0: 54 44 0a 1e a0 12 90 95 4f 53 59 53 0b d6 07 93 TD......OSYS.... 3100: 68 0a 03 5b 22 0a 64 a0 4a 07 91 93 68 0a 03 93 h..[".d.J...h... 3110: 68 0a 04 70 01 5c 2f 05 5f 53 42 5f 50 43 49 30 h..p.\/._SB_PCI0 3120: 4c 50 43 42 45 43 5f 5f 53 33 46 47 70 83 88 5c LPCBEC__S3FGp..\ 3130: 2f 03 5f 53 42 5f 50 43 49 30 50 4e 4c 53 42 52 /._SB_PCI0PNLSBR 3140: 4e 53 00 5c 2f 04 5f 53 42 5f 50 43 49 30 47 46 NS.\/._SB_PCI0GF 3150: 58 30 42 43 4c 50 7d 5c 2f 04 5f 53 42 5f 50 43 X0BCLP}\/._SB_PC 3160: 49 30 47 46 58 30 42 43 4c 50 0c 00 00 00 80 5c I0GFX0BCLP.....\ 3170: 2f 04 5f 53 42 5f 50 43 49 30 47 46 58 30 42 43 /._SB_PCI0GFX0BC 3180: 4c 50 a0 12 90 95 4f 53 59 53 0b d6 07 93 68 0a LP....OSYS....h. 3190: 03 5b 22 0a 64 70 5c 2f 04 5f 53 42 5f 50 43 49 .[".dp\/._SB_PCI 31a0: 30 58 48 43 5f 50 52 32 5f 53 50 52 32 70 5c 2f 0XHC_PR2_SPR2p\/ 31b0: 04 5f 53 42 5f 50 43 49 30 58 48 43 5f 50 52 33 ._SB_PCI0XHC_PR3 31c0: 5f 53 50 52 33 14 4d 38 5f 57 41 4b 09 70 0a ab _SPR3.M8_WAK.p.. 31d0: 50 38 30 48 a0 37 4e 45 58 50 a0 18 7b 4f 53 43 P80H.7NEXP..{OSC 31e0: 43 0a 02 00 5c 2f 03 5f 53 42 5f 50 43 49 30 4e C...\/._SB_PCI0N 31f0: 48 50 47 a0 18 7b 4f 53 43 43 0a 04 00 5c 2f 03 HPG..{OSCC...\/. 3200: 5f 53 42 5f 50 43 49 30 4e 50 4d 45 70 00 4c 49 _SB_PCI0NPMEp.LI 3210: 44 58 a0 49 05 49 47 44 53 a0 35 93 5c 2f 05 5f DX.I.IGDS.5.\/._ 3220: 53 42 5f 50 43 49 30 4c 50 43 42 45 43 5f 5f 48 SB_PCI0LPCBEC__H 3230: 50 4c 44 01 70 01 4c 49 44 53 70 01 5c 2f 04 5f PLD.p.LIDSp.\/._ 3240: 53 42 5f 50 43 49 30 47 46 58 30 43 4c 49 44 a1 SB_PCI0GFX0CLID. 3250: 1c 70 00 4c 49 44 53 70 00 5c 2f 04 5f 53 42 5f .p.LIDSp.\/._SB_ 3260: 50 43 49 30 47 46 58 30 43 4c 49 44 a0 44 17 91 PCI0GFX0CLID.D.. 3270: 93 68 0a 03 93 68 0a 04 a0 16 90 44 54 53 45 94 .h...h.....DTSE. 3280: 54 43 4e 54 01 54 52 41 50 54 52 54 44 0a 14 a0 TCNT.TRAPTRTD... 3290: 4b 0b 93 4f 53 59 53 0b d2 07 a0 40 0b 7b 43 46 K..OSYS....@.{CF 32a0: 47 44 01 00 a0 4b 05 94 5c 2f 03 5f 50 52 5f 43 GD...K..\/._PR_C 32b0: 50 55 30 5f 50 50 43 00 74 5c 2f 03 5f 50 52 5f PU0_PPC.t\/._PR_ 32c0: 43 50 55 30 5f 50 50 43 01 5c 2f 03 5f 50 52 5f CPU0_PPC.\/._PR_ 32d0: 43 50 55 30 5f 50 50 43 50 4e 4f 54 72 5c 2f 03 CPU0_PPCPNOTr\/. 32e0: 5f 50 52 5f 43 50 55 30 5f 50 50 43 01 5c 2f 03 _PR_CPU0_PPC.\/. 32f0: 5f 50 52 5f 43 50 55 30 5f 50 50 43 50 4e 4f 54 _PR_CPU0_PPCPNOT 3300: a1 4a 04 72 5c 2f 03 5f 50 52 5f 43 50 55 30 5f .J.r\/._PR_CPU0_ 3310: 50 50 43 01 5c 2f 03 5f 50 52 5f 43 50 55 30 5f PPC.\/._PR_CPU0_ 3320: 50 50 43 50 4e 4f 54 74 5c 2f 03 5f 50 52 5f 43 PPCPNOTt\/._PR_C 3330: 50 55 30 5f 50 50 43 01 5c 2f 03 5f 50 52 5f 43 PU0_PPC.\/._PR_C 3340: 50 55 30 5f 50 50 43 50 4e 4f 54 a0 18 93 52 50 PU0_PPCPNOT...RP 3350: 31 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 1D..\/._SB_PCI0R 3360: 50 30 31 00 a0 18 93 52 50 32 44 00 86 5c 2f 03 P01....RP2D..\/. 3370: 5f 53 42 5f 50 43 49 30 52 50 30 32 00 a0 18 93 _SB_PCI0RP02.... 3380: 52 50 33 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 RP3D..\/._SB_PCI 3390: 30 52 50 30 33 00 a0 18 93 52 50 34 44 00 86 5c 0RP03....RP4D..\ 33a0: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 34 00 a0 /._SB_PCI0RP04.. 33b0: 18 93 52 50 35 44 00 86 5c 2f 03 5f 53 42 5f 50 ..RP5D..\/._SB_P 33c0: 43 49 30 52 50 30 35 00 a0 18 93 52 50 36 44 00 CI0RP05....RP6D. 33d0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 33e0: 00 70 01 5c 2e 5f 53 42 5f 42 41 53 43 a0 4d 0b .p.\._SB_BASC.M. 33f0: 95 68 0a 04 a0 42 05 90 93 7b 5c 2f 05 5f 53 42 .h...B...{\/._SB 3400: 5f 50 43 49 30 4c 50 43 42 45 43 5f 5f 48 42 30 _PCI0LPCBEC__HB0 3410: 53 0a 0f 61 00 92 5c 2f 05 5f 53 42 5f 50 43 49 S..a..\/._SB_PCI 3420: 30 4c 50 43 42 45 43 5f 5f 41 43 50 57 70 0a 0a 0LPCBEC__ACPWp.. 3430: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 \/._SB_PCI0LPCBE 3440: 43 5f 5f 45 54 48 42 5c 2f 06 5f 53 42 5f 50 43 C__ETHB\/._SB_PC 3450: 49 30 4c 50 43 42 45 43 5f 5f 48 4b 45 59 48 4b I0LPCBEC__HKEYHK 3460: 53 33 4e 56 53 53 00 a0 43 04 93 49 53 57 4b 01 S3NVSS..C..ISWK. 3470: a0 3a 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 .:\/._SB_PCI0LPC 3480: 42 45 43 5f 5f 48 4b 45 59 44 48 4b 43 5c 2f 06 BEC__HKEYDHKC\/. 3490: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 5f 5f _SB_PCI0LPCBEC__ 34a0: 48 4b 45 59 4d 48 4b 51 0b 70 60 a0 4a 06 93 68 HKEYMHKQ.p`.J..h 34b0: 0a 04 70 0a 0a 5c 2f 05 5f 53 42 5f 50 43 49 30 ..p..\/._SB_PCI0 34c0: 4c 50 43 42 45 43 5f 5f 45 54 48 42 4e 56 53 53 LPCBEC__ETHBNVSS 34d0: 00 a0 44 04 93 49 53 57 4b 0a 02 a0 3a 5c 2f 06 ..D..ISWK...:\/. 34e0: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 5f 5f _SB_PCI0LPCBEC__ 34f0: 48 4b 45 59 44 48 4b 43 5c 2f 06 5f 53 42 5f 50 HKEYDHKC\/._SB_P 3500: 43 49 30 4c 50 43 42 45 43 5f 5f 48 4b 45 59 4d CI0LPCBEC__HKEYM 3510: 48 4b 51 0b 80 60 70 53 50 52 32 5c 2f 04 5f 53 HKQ..`pSPR2\/._S 3520: 42 5f 50 43 49 30 58 48 43 5f 50 52 32 5f 70 53 B_PCI0XHC_PR2_pS 3530: 50 52 33 5c 2f 04 5f 53 42 5f 50 43 49 30 58 48 PR3\/._SB_PCI0XH 3540: 43 5f 50 52 33 5f 70 0a cd 50 38 30 48 a4 12 04 C_PR3_p..P80H... 3550: 02 00 00 14 1e 47 45 54 42 0b 77 68 0a 08 60 77 .....GETB.wh..`w 3560: 69 0a 08 61 5b 13 6a 60 61 54 42 46 33 a4 54 42 i..a[.j`aTBF3.TB 3570: 46 33 14 40 1c 50 4e 4f 54 08 a0 48 19 94 54 43 F3.@.PNOT..H..TC 3580: 4e 54 01 a0 31 7b 50 44 43 30 0a 08 00 86 5c 2e NT..1{PDC0....\. 3590: 5f 50 52 5f 43 50 55 30 0a 80 a0 1a 7b 50 44 43 _PR_CPU0....{PDC 35a0: 30 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 5f 43 0...[".d.\._PR_C 35b0: 50 55 30 0a 81 a0 31 7b 50 44 43 31 0a 08 00 86 PU0...1{PDC1.... 35c0: 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 a0 1a 7b 50 \._PR_CPU1....{P 35d0: 44 43 31 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC1...[".d.\._PR 35e0: 5f 43 50 55 31 0a 81 a0 31 7b 50 44 43 32 0a 08 _CPU1...1{PDC2.. 35f0: 00 86 5c 2e 5f 50 52 5f 43 50 55 32 0a 80 a0 1a ..\._PR_CPU2.... 3600: 7b 50 44 43 32 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC2...[".d.\._ 3610: 50 52 5f 43 50 55 32 0a 81 a0 31 7b 50 44 43 33 PR_CPU2...1{PDC3 3620: 0a 08 00 86 5c 2e 5f 50 52 5f 43 50 55 33 0a 80 ....\._PR_CPU3.. 3630: a0 1a 7b 50 44 43 33 0a 10 00 5b 22 0a 64 86 5c ..{PDC3...[".d.\ 3640: 2e 5f 50 52 5f 43 50 55 33 0a 81 a0 31 7b 50 44 ._PR_CPU3...1{PD 3650: 43 34 0a 08 00 86 5c 2e 5f 50 52 5f 43 50 55 34 C4....\._PR_CPU4 3660: 0a 80 a0 1a 7b 50 44 43 34 0a 10 00 5b 22 0a 64 ....{PDC4...[".d 3670: 86 5c 2e 5f 50 52 5f 43 50 55 34 0a 81 a0 31 7b .\._PR_CPU4...1{ 3680: 50 44 43 35 0a 08 00 86 5c 2e 5f 50 52 5f 43 50 PDC5....\._PR_CP 3690: 55 35 0a 80 a0 1a 7b 50 44 43 35 0a 10 00 5b 22 U5....{PDC5...[" 36a0: 0a 64 86 5c 2e 5f 50 52 5f 43 50 55 35 0a 81 a0 .d.\._PR_CPU5... 36b0: 31 7b 50 44 43 36 0a 08 00 86 5c 2e 5f 50 52 5f 1{PDC6....\._PR_ 36c0: 43 50 55 36 0a 80 a0 1a 7b 50 44 43 36 0a 10 00 CPU6....{PDC6... 36d0: 5b 22 0a 64 86 5c 2e 5f 50 52 5f 43 50 55 36 0a [".d.\._PR_CPU6. 36e0: 81 a0 31 7b 50 44 43 37 0a 08 00 86 5c 2e 5f 50 ..1{PDC7....\._P 36f0: 52 5f 43 50 55 37 0a 80 a0 1a 7b 50 44 43 37 0a R_CPU7....{PDC7. 3700: 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 5f 43 50 55 ..[".d.\._PR_CPU 3710: 37 0a 81 a1 1f 86 5c 2e 5f 50 52 5f 43 50 55 30 7.....\._PR_CPU0 3720: 0a 80 5b 22 0a 64 86 5c 2e 5f 50 52 5f 43 50 55 ..[".d.\._PR_CPU 3730: 30 0a 81 14 47 04 54 52 41 50 0a 70 69 53 4d 49 0...G.TRAP.piSMI 3740: 46 a0 0d 93 68 54 52 54 50 70 00 54 52 50 30 a0 F...hTRTPp.TRP0. 3750: 18 93 68 54 52 54 44 70 69 44 54 53 46 70 00 54 ..hTRTDpiDTSFp.T 3760: 52 50 44 a4 44 54 53 46 a0 0d 93 68 54 52 54 49 RPD.DTSF...hTRTI 3770: 70 00 54 52 50 48 a4 53 4d 49 46 10 49 28 2e 5f p.TRPH.SMIF.I(._ 3780: 53 42 5f 50 43 49 30 14 4d 14 5f 49 4e 49 00 70 SB_PCI0.M._INI.p 3790: 01 49 47 44 53 70 0b d0 07 4f 53 59 53 a0 48 12 .IGDSp...OSYS.H. 37a0: 5b 12 5f 4f 53 49 60 a0 14 5f 4f 53 49 0d 4c 69 [._OSI`.._OSI.Li 37b0: 6e 75 78 00 70 0b e8 03 4f 53 59 53 a0 1b 5f 4f nux.p...OSYS.._O 37c0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 00 SI.Windows 2001. 37d0: 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 53 49 0d 57 p...OSYS.._OSI.W 37e0: 69 6e 64 6f 77 73 20 32 30 30 31 20 53 50 31 00 indows 2001 SP1. 37f0: 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 53 49 0d 57 p...OSYS.._OSI.W 3800: 69 6e 64 6f 77 73 20 32 30 30 31 20 53 50 32 00 indows 2001 SP2. 3810: 70 0b d2 07 4f 53 59 53 a0 1d 5f 4f 53 49 0d 57 p...OSYS.._OSI.W 3820: 69 6e 64 6f 77 73 20 32 30 30 31 2e 31 00 70 0b indows 2001.1.p. 3830: d3 07 4f 53 59 53 a0 1b 5f 4f 53 49 0d 57 69 6e ..OSYS.._OSI.Win 3840: 64 6f 77 73 20 32 30 30 36 00 70 0b d6 07 4f 53 dows 2006.p...OS 3850: 59 53 a0 1b 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 YS.._OSI.Windows 3860: 20 32 30 30 39 00 70 0b d9 07 4f 53 59 53 a0 21 2009.p...OSYS.! 3870: 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 31 _OSI.Windows 201 3880: 32 00 70 01 57 49 4e 38 70 0b dc 07 4f 53 59 53 2.p.WIN8p...OSYS 3890: a0 1f 92 95 4f 53 59 53 0b d9 07 a0 14 53 57 44 ....OSYS.....SWD 38a0: 54 a0 0e 92 93 4e 56 4d 44 01 56 48 59 42 0a 02 T....NVMD.VHYB.. 38b0: a1 15 a0 13 53 57 44 54 a0 0d 92 93 4e 56 4d 44 ....SWDT....NVMD 38c0: 00 56 48 59 42 00 5e 2f 03 4c 50 43 42 50 53 32 .VHYB.^/.LPCBPS2 38d0: 4d 4d 48 49 44 14 47 06 4e 48 50 47 08 70 00 5e MMHID.G.NHPG.p.^ 38e0: 2e 52 50 30 31 48 50 45 58 70 00 5e 2e 52 50 30 .RP01HPEXp.^.RP0 38f0: 32 48 50 45 58 70 00 5e 2e 52 50 30 33 48 50 45 2HPEXp.^.RP03HPE 3900: 58 70 00 5e 2e 52 50 30 34 48 50 45 58 70 01 5e Xp.^.RP04HPEXp.^ 3910: 2e 52 50 30 31 48 50 53 58 70 01 5e 2e 52 50 30 .RP01HPSXp.^.RP0 3920: 32 48 50 53 58 70 01 5e 2e 52 50 30 33 48 50 53 2HPSXp.^.RP03HPS 3930: 58 70 01 5e 2e 52 50 30 34 48 50 53 58 14 47 0c Xp.^.RP04HPSX.G. 3940: 4e 50 4d 45 08 70 00 5e 2e 52 50 30 31 50 4d 45 NPME.p.^.RP01PME 3950: 58 70 00 5e 2e 52 50 30 32 50 4d 45 58 70 00 5e Xp.^.RP02PMEXp.^ 3960: 2e 52 50 30 33 50 4d 45 58 70 00 5e 2e 52 50 30 .RP03PMEXp.^.RP0 3970: 34 50 4d 45 58 70 00 5e 2e 52 50 30 35 50 4d 45 4PMEXp.^.RP05PME 3980: 58 70 00 5e 2e 52 50 30 36 50 4d 45 58 70 00 5e Xp.^.RP06PMEXp.^ 3990: 2e 52 50 30 37 50 4d 45 58 70 00 5e 2e 52 50 30 .RP07PMEXp.^.RP0 39a0: 38 50 4d 45 58 70 01 5e 2e 52 50 30 31 50 4d 53 8PMEXp.^.RP01PMS 39b0: 58 70 01 5e 2e 52 50 30 32 50 4d 53 58 70 01 5e Xp.^.RP02PMSXp.^ 39c0: 2e 52 50 30 33 50 4d 53 58 70 01 5e 2e 52 50 30 .RP03PMSXp.^.RP0 39d0: 34 50 4d 53 58 70 01 5e 2e 52 50 30 35 50 4d 53 4PMSXp.^.RP05PMS 39e0: 58 70 01 5e 2e 52 50 30 36 50 4d 53 58 70 01 5e Xp.^.RP06PMSXp.^ 39f0: 2e 52 50 30 37 50 4d 53 58 70 01 5e 2e 52 50 30 .RP07PMSXp.^.RP0 3a00: 38 50 4d 53 58 10 45 07 5c 00 08 50 49 43 4d 00 8PMSX.E.\..PICM. 3a10: 08 50 52 57 50 12 04 02 00 00 14 40 06 47 50 52 .PRWP......@.GPR 3a20: 57 02 70 68 88 50 52 57 50 00 00 70 79 53 53 31 W.ph.PRWP..pySS1 3a30: 5f 01 00 60 7d 60 79 53 53 32 5f 0a 02 00 60 7d _..`}`ySS2_...`} 3a40: 60 79 53 53 33 5f 0a 03 00 60 7d 60 79 53 53 34 `ySS3_...`}`ySS4 3a50: 5f 0a 04 00 60 a0 11 7b 79 01 69 00 60 00 70 69 _...`..{y.i.`.pi 3a60: 88 50 52 57 50 01 00 a1 0e 7a 60 01 60 81 60 88 .PRWP....z`.`.`. 3a70: 50 52 57 50 01 00 a4 50 52 57 50 5b 80 53 4d 49 PRWP...PRWP[.SMI 3a80: 32 01 0a b2 01 5b 81 0b 53 4d 49 32 01 41 50 4d 2....[..SMI2.APM 3a90: 43 08 5b 01 4d 53 4d 49 07 14 4a 05 53 4d 49 5f C.[.MSMI..J.SMI_ 3aa0: 05 5b 23 4d 53 4d 49 ff ff 70 68 43 4d 44 5f 70 .[#MSMI..phCMD_p 3ab0: 01 45 52 52 5f 70 69 50 41 52 30 70 6a 50 41 52 .ERR_piPAR0pjPAR 3ac0: 31 70 6b 50 41 52 32 70 6c 50 41 52 33 70 0a f5 1pkPAR2plPAR3p.. 3ad0: 41 50 4d 43 a2 11 93 45 52 52 5f 01 5b 22 01 70 APMC...ERR_.[".p 3ae0: 0a f5 41 50 4d 43 70 50 41 52 30 60 5b 27 4d 53 ..APMCpPAR0`['MS 3af0: 4d 49 a4 60 14 11 52 42 45 43 01 a4 53 4d 49 5f MI.`..RBEC..SMI_ 3b00: 00 0a 03 68 00 00 14 10 57 42 45 43 02 53 4d 49 ...h....WBEC.SMI 3b10: 5f 00 0a 04 68 69 00 14 10 4d 42 45 43 03 53 4d _...hi...MBEC.SM 3b20: 49 5f 00 0a 05 68 69 6a 14 0f 56 55 50 53 00 53 I_...hij..VUPS.S 3b30: 4d 49 5f 01 01 00 00 00 14 11 56 45 56 54 01 a4 MI_.......VEVT.. 3b40: 53 4d 49 5f 01 0a 08 68 00 00 14 10 56 42 52 43 SMI_...h....VBRC 3b50: 01 53 4d 49 5f 01 0a 0a 68 00 00 14 10 56 42 52 .SMI_...h....VBR 3b60: 44 00 53 4d 49 5f 01 0a 0b 00 00 00 14 10 56 42 D.SMI_........VB 3b70: 52 55 00 53 4d 49 5f 01 0a 0c 00 00 00 14 10 56 RU.SMI_........V 3b80: 42 52 53 01 53 4d 49 5f 01 0a 0d 68 00 00 14 11 BRS.SMI_...h.... 3b90: 56 42 52 47 00 a4 53 4d 49 5f 01 0a 0e 00 00 00 VBRG..SMI_...... 3ba0: 14 11 56 48 59 42 01 a4 53 4d 49 5f 01 0a 10 68 ..VHYB..SMI_...h 3bb0: 00 00 14 11 56 44 59 4e 02 a4 53 4d 49 5f 01 0a ....VDYN..SMI_.. 3bc0: 11 68 69 00 14 11 55 43 4d 53 01 a4 53 4d 49 5f .hi...UCMS..SMI_ 3bd0: 0a 02 68 00 00 00 14 12 42 43 48 4b 00 a4 53 4d ..h.....BCHK..SM 3be0: 49 5f 0a 05 0a 04 00 00 00 14 11 42 4c 54 48 01 I_.........BLTH. 3bf0: a4 53 4d 49 5f 0a 06 68 00 00 00 14 11 50 52 53 .SMI_..h.....PRS 3c00: 4d 02 a4 53 4d 49 5f 0a 07 00 68 69 00 14 11 49 M..SMI_...hi...I 3c10: 46 52 53 02 a4 53 4d 49 5f 0a 07 01 68 69 00 14 FRS..SMI_...hi.. 3c20: 11 4e 56 53 53 01 a4 53 4d 49 5f 0a 08 68 00 00 .NVSS..SMI_..h.. 3c30: 00 14 11 57 47 53 56 01 a4 53 4d 49 5f 0a 09 68 ...WGSV..SMI_..h 3c40: 00 00 00 14 12 54 53 44 4c 00 a4 53 4d 49 5f 0a .....TSDL..SMI_. 3c50: 0a 0a 03 00 00 00 14 10 54 50 48 59 01 53 4d 49 ........TPHY.SMI 3c60: 5f 0a 0c 68 00 00 00 14 10 54 4d 4f 52 01 53 4d _..h.....TMOR.SM 3c70: 49 5f 0a 0d 68 00 00 00 14 11 54 48 52 4f 01 a4 I_..h.....THRO.. 3c80: 53 4d 49 5f 0a 0e 68 00 00 00 14 11 43 48 46 4e SMI_..h.....CHFN 3c90: 02 a4 53 4d 49 5f 0a 0f 68 69 00 00 14 11 57 4d ..SMI_..hi....WM 3ca0: 49 53 02 a4 53 4d 49 5f 0a 10 68 69 00 00 14 11 IS..SMI_..hi.... 3cb0: 55 41 57 53 01 a4 53 4d 49 5f 0a 13 68 00 00 00 UAWS..SMI_..h... 3cc0: 14 11 42 46 57 43 01 a4 53 4d 49 5f 0a 14 00 68 ..BFWC..SMI_...h 3cd0: 00 00 14 11 42 46 57 50 00 a4 53 4d 49 5f 0a 14 ....BFWP..SMI_.. 3ce0: 01 00 00 00 14 11 42 46 57 47 01 53 4d 49 5f 0a ......BFWG.SMI_. 3cf0: 14 0a 03 68 00 00 14 11 42 44 4d 43 01 53 4d 49 ...h....BDMC.SMI 3d00: 5f 0a 14 0a 04 68 00 00 14 12 50 53 49 46 02 a4 _....h....PSIF.. 3d10: 53 4d 49 5f 0a 14 0a 05 68 69 00 14 12 46 4e 53 SMI_....hi...FNS 3d20: 43 02 a4 53 4d 49 5f 0a 14 0a 06 68 69 00 14 12 C..SMI_....hi... 3d30: 41 55 44 43 02 a4 53 4d 49 5f 0a 14 0a 07 68 69 AUDC..SMI_....hi 3d40: 00 14 12 53 59 42 43 02 a4 53 4d 49 5f 0a 14 0a ...SYBC..SMI_... 3d50: 08 68 69 00 14 12 43 42 49 46 02 a4 53 4d 49 5f .hi...CBIF..SMI_ 3d60: 0a 14 0a 0f 68 69 00 14 12 42 46 55 44 00 a4 53 ....hi...BFUD..S 3d70: 4d 49 5f 0a 14 0a 10 00 00 00 14 11 57 4d 49 51 MI_.........WMIQ 3d80: 02 a4 53 4d 49 5f 0a 15 68 69 00 00 14 11 48 42 ..SMI_..hi....HB 3d90: 43 4b 00 a4 53 4d 49 5f 0a 16 00 00 00 00 14 11 CK..SMI_........ 3da0: 43 54 44 50 00 a4 53 4d 49 5f 0a 17 00 00 00 00 CTDP..SMI_...... 3db0: 14 11 54 42 43 54 01 a4 53 4d 49 5f 0a 18 68 00 ..TBCT..SMI_..h. 3dc0: 00 00 10 40 33 5f 54 5a 5f 08 54 50 41 53 0a 62 ...@3_TZ_.TPAS.b 3dd0: 08 54 50 43 5f 0a 82 08 54 39 30 53 0a 53 08 54 .TPC_...T90S.S.T 3de0: 39 30 43 0a 55 5b 85 4c 30 54 5a 30 30 14 42 05 90C.U[.L0TZ00.B. 3df0: 5f 43 52 54 08 a0 28 93 54 4a 39 30 0a 55 70 72 _CRT..(.TJ90.Upr 3e00: 0b ac 0a 77 54 39 30 43 0a 0a 00 00 54 4d 43 50 ...wT90C....TMCP 3e10: a4 72 0b ac 0a 77 54 39 30 43 0a 0a 00 00 a1 21 .r...wT90C.....! 3e20: 70 72 0b ac 0a 77 54 50 43 5f 0a 0a 00 00 54 4d pr...wTPC_....TM 3e30: 43 50 a4 72 0b ac 0a 77 54 50 43 5f 0a 0a 00 00 CP.r...wTPC_.... 3e40: 14 0c 5f 53 43 50 09 70 68 43 54 59 50 14 4e 18 .._SCP.phCTYP.N. 3e50: 5f 54 4d 50 08 70 0b b8 0b 43 52 43 50 a0 49 16 _TMP.p...CRCP.I. 3e60: 45 43 4f 4e a0 4a 0d 44 54 53 45 a0 11 92 95 44 ECON.J.DTSE....D 3e70: 54 53 31 44 54 53 32 70 44 54 53 31 61 a1 07 70 TS1DTS2pDTS1a..p 3e80: 44 54 53 32 61 a0 40 07 92 93 5c 2f 05 5f 53 42 DTS2a.@...\/._SB 3e90: 5f 50 43 49 30 4c 50 43 42 45 43 5f 5f 54 4d 50 _PCI0LPCBEC__TMP 3ea0: 32 00 a0 35 92 95 61 5c 2f 05 5f 53 42 5f 50 43 2..5..a\/._SB_PC 3eb0: 49 30 4c 50 43 42 45 43 5f 5f 54 4d 50 32 74 61 I0LPCBEC__TMP2ta 3ec0: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 \/._SB_PCI0LPCBE 3ed0: 43 5f 5f 54 4d 50 32 67 a1 1d 70 00 67 70 5c 2f C__TMP2g..p.gp\/ 3ee0: 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 5f ._SB_PCI0LPCBEC_ 3ef0: 5f 54 4d 50 32 61 a0 1d 94 61 5c 2f 05 5f 53 42 _TMP2a...a\/._SB 3f00: 5f 50 43 49 30 4c 50 43 42 45 43 5f 5f 54 4d 50 _PCI0LPCBEC__TMP 3f10: 31 70 61 60 a1 1a 70 5c 2f 05 5f 53 42 5f 50 43 1pa`..p\/._SB_PC 3f20: 49 30 4c 50 43 42 45 43 5f 5f 54 4d 50 31 60 a0 I0LPCBEC__TMP1`. 3f30: 0f 7d 95 60 0a 23 94 60 0a 73 00 70 0a 23 60 a1 .}.`.#.`.s.p.#`. 3f40: 48 07 a0 4a 04 94 5c 2f 05 5f 53 42 5f 50 43 49 H..J..\/._SB_PCI 3f50: 30 4c 50 43 42 45 43 5f 5f 54 4d 50 32 5c 2f 05 0LPCBEC__TMP2\/. 3f60: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 5f 5f _SB_PCI0LPCBEC__ 3f70: 54 4d 50 31 70 5c 2f 05 5f 53 42 5f 50 43 49 30 TMP1p\/._SB_PCI0 3f80: 4c 50 43 42 45 43 5f 5f 54 4d 50 32 60 a1 1a 70 LPCBEC__TMP2`..p 3f90: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 \/._SB_PCI0LPCBE 3fa0: 43 5f 5f 54 4d 50 31 60 a0 0f 7d 95 60 0a 23 94 C__TMP1`..}.`.#. 3fb0: 60 0a 73 00 70 0a 23 60 70 72 0b ac 0a 77 60 0a `.s.p.#`pr...w`. 3fc0: 0a 00 00 43 52 43 50 a0 0f 92 95 43 52 43 50 54 ...CRCP....CRCPT 3fd0: 4d 43 50 54 53 44 4c a4 43 52 43 50 14 4a 0c 5f MCPTSDL.CRCP.J._ 3fe0: 50 53 4c 08 a0 4e 05 93 54 43 4e 54 0a 08 a4 12 PSL..N..TCNT.... 3ff0: 43 05 08 5c 2e 5f 50 52 5f 43 50 55 30 5c 2e 5f C..\._PR_CPU0\._ 4000: 50 52 5f 43 50 55 31 5c 2e 5f 50 52 5f 43 50 55 PR_CPU1\._PR_CPU 4010: 32 5c 2e 5f 50 52 5f 43 50 55 33 5c 2e 5f 50 52 2\._PR_CPU3\._PR 4020: 5f 43 50 55 34 5c 2e 5f 50 52 5f 43 50 55 35 5c _CPU4\._PR_CPU5\ 4030: 2e 5f 50 52 5f 43 50 55 36 5c 2e 5f 50 52 5f 43 ._PR_CPU6\._PR_C 4040: 50 55 37 a0 34 93 54 43 4e 54 0a 04 a4 12 2a 04 PU7.4.TCNT....*. 4050: 5c 2e 5f 50 52 5f 43 50 55 30 5c 2e 5f 50 52 5f \._PR_CPU0\._PR_ 4060: 43 50 55 31 5c 2e 5f 50 52 5f 43 50 55 32 5c 2e CPU1\._PR_CPU2\. 4070: 5f 50 52 5f 43 50 55 33 a0 20 93 54 43 4e 54 0a _PR_CPU3. .TCNT. 4080: 02 a4 12 16 02 5c 2e 5f 50 52 5f 43 50 55 30 5c .....\._PR_CPU0\ 4090: 2e 5f 50 52 5f 43 50 55 31 a4 12 0c 01 5c 2e 5f ._PR_CPU1....\._ 40a0: 50 52 5f 43 50 55 30 14 2d 5f 50 53 56 08 a0 16 PR_CPU0.-_PSV... 40b0: 93 54 4a 39 30 0a 55 a4 72 0b ac 0a 77 54 39 30 .TJ90.U.r...wT90 40c0: 53 0a 0a 00 00 a1 0f a4 72 0b ac 0a 77 54 50 41 S.......r...wTPA 40d0: 53 0a 0a 00 00 14 09 5f 54 43 31 08 a4 0a 02 14 S......_TC1..... 40e0: 09 5f 54 43 32 08 a4 0a 03 14 09 5f 54 53 50 08 ._TC2......_TSP. 40f0: a4 0a 64 10 4b 17 2e 5f 53 42 5f 50 43 49 30 5b ..d.K.._SB_PCI0[ 4100: 82 4e 16 50 44 52 43 08 5f 48 49 44 0c 41 d0 0c .N.PDRC._HID.A.. 4110: 02 08 5f 55 49 44 01 08 42 55 46 30 11 4a 08 0a .._UID..BUF0.J.. 4120: 86 86 09 00 01 00 00 00 00 00 40 00 00 86 09 00 ..........@..... 4130: 01 00 00 00 00 00 80 00 00 86 09 00 01 00 00 00 ................ 4140: 00 00 10 00 00 86 09 00 01 00 00 00 00 00 10 00 ................ 4150: 00 86 09 00 01 00 00 00 00 00 00 00 00 86 09 00 ................ 4160: 01 00 00 d2 fe 00 00 02 00 86 09 00 00 00 00 d9 ................ 4170: fe 00 40 00 00 86 09 00 01 00 50 d4 fe 00 b0 04 ..@.......P..... 4180: 00 86 09 00 00 00 00 00 ff 00 00 00 01 86 09 00 ................ 4190: 00 00 00 e0 fe 00 00 10 00 86 09 00 01 00 00 00 ................ 41a0: 00 00 10 00 00 79 00 14 47 0c 5f 43 52 53 08 8a .....y..G._CRS.. 41b0: 42 55 46 30 0a 04 52 42 52 30 79 5e 5e 2e 4c 50 BUF0..RBR0y^^.LP 41c0: 43 42 52 43 42 41 0a 0e 52 42 52 30 8a 42 55 46 CBRCBA..RBR0.BUF 41d0: 30 0a 7c 54 42 52 30 70 54 42 41 42 54 42 52 30 0.|TBR0pTBABTBR0 41e0: 8a 42 55 46 30 0a 80 54 42 4c 4e a0 0d 93 54 42 .BUF0..TBLN...TB 41f0: 41 42 00 70 00 54 42 4c 4e 8a 42 55 46 30 0a 10 AB.p.TBLN.BUF0.. 4200: 4d 42 52 30 79 4d 48 42 52 0a 0f 4d 42 52 30 8a MBR0yMHBR..MBR0. 4210: 42 55 46 30 0a 1c 44 42 52 30 79 44 49 42 52 0a BUF0..DBR0yDIBR. 4220: 0c 44 42 52 30 8a 42 55 46 30 0a 28 45 42 52 30 .DBR0.BUF0.(EBR0 4230: 79 45 50 42 52 0a 0c 45 42 52 30 8a 42 55 46 30 yEPBR..EBR0.BUF0 4240: 0a 34 58 42 52 30 79 50 58 42 52 0a 1a 58 42 52 .4XBR0yPXBR..XBR 4250: 30 8a 42 55 46 30 0a 38 58 53 5a 30 7a 0c 00 00 0.BUF0.8XSZ0z... 4260: 00 10 50 58 53 5a 58 53 5a 30 a4 42 55 46 30 10 ..PXSZXSZ0.BUF0. 4270: 48 85 5f 47 50 45 14 18 5f 4c 30 42 00 86 5c 2f H._GPE.._L0B..\/ 4280: 03 5f 53 42 5f 50 43 49 30 50 30 50 31 0a 02 14 ._SB_PCI0P0P1... 4290: 4d 1c 5f 4c 30 39 00 a0 2c 93 52 50 31 44 00 5c M._L09..,.RP1D.\ 42a0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 48 50 /._SB_PCI0RP01HP 42b0: 4d 45 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 ME.\/._SB_PCI0RP 42c0: 30 31 0a 02 a0 2c 93 52 50 32 44 00 5c 2f 04 5f 01...,.RP2D.\/._ 42d0: 53 42 5f 50 43 49 30 52 50 30 32 48 50 4d 45 86 SB_PCI0RP02HPME. 42e0: 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 32 0a \/._SB_PCI0RP02. 42f0: 02 a0 2c 93 52 50 33 44 00 5c 2f 04 5f 53 42 5f ..,.RP3D.\/._SB_ 4300: 50 43 49 30 52 50 30 33 48 50 4d 45 86 5c 2f 03 PCI0RP03HPME.\/. 4310: 5f 53 42 5f 50 43 49 30 52 50 30 33 0a 02 a0 2c _SB_PCI0RP03..., 4320: 93 52 50 34 44 00 5c 2f 04 5f 53 42 5f 50 43 49 .RP4D.\/._SB_PCI 4330: 30 52 50 30 34 48 50 4d 45 86 5c 2f 03 5f 53 42 0RP04HPME.\/._SB 4340: 5f 50 43 49 30 52 50 30 34 0a 02 a0 2c 93 52 50 _PCI0RP04...,.RP 4350: 35 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 5D.\/._SB_PCI0RP 4360: 30 35 48 50 4d 45 86 5c 2f 03 5f 53 42 5f 50 43 05HPME.\/._SB_PC 4370: 49 30 52 50 30 35 0a 02 a0 2c 93 52 50 36 44 00 I0RP05...,.RP6D. 4380: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 \/._SB_PCI0RP06H 4390: 50 4d 45 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 PME.\/._SB_PCI0R 43a0: 50 30 36 0a 02 a0 2c 93 52 50 37 44 00 5c 2f 04 P06...,.RP7D.\/. 43b0: 5f 53 42 5f 50 43 49 30 52 50 30 37 48 50 4d 45 _SB_PCI0RP07HPME 43c0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 37 .\/._SB_PCI0RP07 43d0: 0a 02 a0 2c 93 52 50 38 44 00 5c 2f 04 5f 53 42 ...,.RP8D.\/._SB 43e0: 5f 50 43 49 30 52 50 30 38 48 50 4d 45 86 5c 2f _PCI0RP08HPME.\/ 43f0: 03 5f 53 42 5f 50 43 49 30 52 50 30 38 0a 02 86 ._SB_PCI0RP08... 4400: 5c 2f 03 5f 53 42 5f 50 43 49 30 50 45 47 30 0a \/._SB_PCI0PEG0. 4410: 02 86 5c 2f 04 5f 53 42 5f 50 43 49 30 50 45 47 ..\/._SB_PCI0PEG 4420: 30 50 45 47 50 0a 02 86 5c 2f 03 5f 53 42 5f 50 0PEGP...\/._SB_P 4430: 43 49 30 50 45 47 31 0a 02 86 5c 2f 03 5f 53 42 CI0PEG1...\/._SB 4440: 5f 50 43 49 30 50 45 47 32 0a 02 86 5c 2f 03 5f _PCI0PEG2...\/._ 4450: 53 42 5f 50 43 49 30 50 45 47 33 0a 02 14 4a 04 SB_PCI0PEG3...J. 4460: 5f 4c 30 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 _L0D..\/._SB_PCI 4470: 30 45 48 43 31 0a 02 86 5c 2f 03 5f 53 42 5f 50 0EHC1...\/._SB_P 4480: 43 49 30 45 48 43 32 0a 02 86 5c 2f 03 5f 53 42 CI0EHC2...\/._SB 4490: 5f 50 43 49 30 48 44 45 46 0a 02 86 5c 2e 5f 53 _PCI0HDEF...\._S 44a0: 42 5f 50 57 52 42 0a 02 14 4e 59 5f 4c 30 31 00 B_PWRB...NY_L01. 44b0: 72 4c 30 31 43 01 4c 30 31 43 70 01 50 38 30 48 rL01C.L01Cp.P80H 44c0: 70 4c 30 31 43 50 38 30 48 a0 43 0b 90 93 52 50 pL01CP80H.C...RP 44d0: 31 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 1D.\/._SB_PCI0RP 44e0: 30 31 48 50 53 58 5b 22 0a 64 a0 4b 07 5c 2f 04 01HPSX[".d.K.\/. 44f0: 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 43 58 _SB_PCI0RP01PDCX 4500: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 4510: 31 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 1PDCXp.\/._SB_PC 4520: 49 30 52 50 30 31 48 50 53 58 a0 2a 92 5c 2f 04 I0RP01HPSX.*.\/. 4530: 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 53 58 _SB_PCI0RP01PDSX 4540: 70 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 4550: 31 4c 30 53 45 86 5c 2f 03 5f 53 42 5f 50 43 49 1L0SE.\/._SB_PCI 4560: 30 52 50 30 31 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP01...p.\/._SB 4570: 5f 50 43 49 30 52 50 30 31 48 50 53 58 a0 43 0b _PCI0RP01HPSX.C. 4580: 90 93 52 50 32 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP2D.\/._SB_PC 4590: 49 30 52 50 30 32 48 50 53 58 5b 22 0a 64 a0 4b I0RP02HPSX[".d.K 45a0: 07 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 45b0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 45c0: 30 52 50 30 32 50 44 43 58 70 01 5c 2f 04 5f 53 0RP02PDCXp.\/._S 45d0: 42 5f 50 43 49 30 52 50 30 32 48 50 53 58 a0 2a B_PCI0RP02HPSX.* 45e0: 92 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 45f0: 50 44 53 58 70 00 5c 2f 04 5f 53 42 5f 50 43 49 PDSXp.\/._SB_PCI 4600: 30 52 50 30 32 4c 30 53 45 86 5c 2f 03 5f 53 42 0RP02L0SE.\/._SB 4610: 5f 50 43 49 30 52 50 30 32 00 a1 16 70 01 5c 2f _PCI0RP02...p.\/ 4620: 04 5f 53 42 5f 50 43 49 30 52 50 30 32 48 50 53 ._SB_PCI0RP02HPS 4630: 58 a0 43 0b 90 93 52 50 33 44 00 5c 2f 04 5f 53 X.C...RP3D.\/._S 4640: 42 5f 50 43 49 30 52 50 30 33 48 50 53 58 5b 22 B_PCI0RP03HPSX[" 4650: 0a 64 a0 4b 07 5c 2f 04 5f 53 42 5f 50 43 49 30 .d.K.\/._SB_PCI0 4660: 52 50 30 33 50 44 43 58 70 01 5c 2f 04 5f 53 42 RP03PDCXp.\/._SB 4670: 5f 50 43 49 30 52 50 30 33 50 44 43 58 70 01 5c _PCI0RP03PDCXp.\ 4680: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 48 50 /._SB_PCI0RP03HP 4690: 53 58 a0 2a 92 5c 2f 04 5f 53 42 5f 50 43 49 30 SX.*.\/._SB_PCI0 46a0: 52 50 30 33 50 44 53 58 70 00 5c 2f 04 5f 53 42 RP03PDSXp.\/._SB 46b0: 5f 50 43 49 30 52 50 30 33 4c 30 53 45 86 5c 2f _PCI0RP03L0SE.\/ 46c0: 03 5f 53 42 5f 50 43 49 30 52 50 30 33 00 a1 16 ._SB_PCI0RP03... 46d0: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 46e0: 33 48 50 53 58 a0 43 0b 90 93 52 50 34 44 00 5c 3HPSX.C...RP4D.\ 46f0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 48 50 /._SB_PCI0RP04HP 4700: 53 58 5b 22 0a 64 a0 4b 07 5c 2f 04 5f 53 42 5f SX[".d.K.\/._SB_ 4710: 50 43 49 30 52 50 30 34 50 44 43 58 70 01 5c 2f PCI0RP04PDCXp.\/ 4720: 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 44 43 ._SB_PCI0RP04PDC 4730: 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 Xp.\/._SB_PCI0RP 4740: 30 34 48 50 53 58 a0 2a 92 5c 2f 04 5f 53 42 5f 04HPSX.*.\/._SB_ 4750: 50 43 49 30 52 50 30 34 50 44 53 58 70 00 5c 2f PCI0RP04PDSXp.\/ 4760: 04 5f 53 42 5f 50 43 49 30 52 50 30 34 4c 30 53 ._SB_PCI0RP04L0S 4770: 45 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 E.\/._SB_PCI0RP0 4780: 34 00 a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 4...p.\/._SB_PCI 4790: 30 52 50 30 34 48 50 53 58 a0 43 0b 90 93 52 50 0RP04HPSX.C...RP 47a0: 35 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 5D.\/._SB_PCI0RP 47b0: 30 35 48 50 53 58 5b 22 0a 64 a0 4b 07 5c 2f 04 05HPSX[".d.K.\/. 47c0: 5f 53 42 5f 50 43 49 30 52 50 30 35 50 44 43 58 _SB_PCI0RP05PDCX 47d0: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 47e0: 35 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 5PDCXp.\/._SB_PC 47f0: 49 30 52 50 30 35 48 50 53 58 a0 2a 92 5c 2f 04 I0RP05HPSX.*.\/. 4800: 5f 53 42 5f 50 43 49 30 52 50 30 35 50 44 53 58 _SB_PCI0RP05PDSX 4810: 70 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 4820: 35 4c 30 53 45 86 5c 2f 03 5f 53 42 5f 50 43 49 5L0SE.\/._SB_PCI 4830: 30 52 50 30 35 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP05...p.\/._SB 4840: 5f 50 43 49 30 52 50 30 35 48 50 53 58 a0 43 0b _PCI0RP05HPSX.C. 4850: 90 93 52 50 36 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP6D.\/._SB_PC 4860: 49 30 52 50 30 36 48 50 53 58 5b 22 0a 64 a0 4b I0RP06HPSX[".d.K 4870: 07 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 4880: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 4890: 30 52 50 30 36 50 44 43 58 70 01 5c 2f 04 5f 53 0RP06PDCXp.\/._S 48a0: 42 5f 50 43 49 30 52 50 30 36 48 50 53 58 a0 2a B_PCI0RP06HPSX.* 48b0: 92 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 48c0: 50 44 53 58 70 00 5c 2f 04 5f 53 42 5f 50 43 49 PDSXp.\/._SB_PCI 48d0: 30 52 50 30 36 4c 30 53 45 86 5c 2f 03 5f 53 42 0RP06L0SE.\/._SB 48e0: 5f 50 43 49 30 52 50 30 36 00 a1 16 70 01 5c 2f _PCI0RP06...p.\/ 48f0: 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 50 53 ._SB_PCI0RP06HPS 4900: 58 a0 42 0a 90 93 52 50 37 44 00 5c 2f 04 5f 53 X.B...RP7D.\/._S 4910: 42 5f 50 43 49 30 52 50 30 37 48 50 53 58 5b 22 B_PCI0RP07HPSX[" 4920: 0a 64 a0 4a 06 5c 2f 04 5f 53 42 5f 50 43 49 30 .d.J.\/._SB_PCI0 4930: 52 50 30 37 50 44 43 58 70 01 5c 2f 04 5f 53 42 RP07PDCXp.\/._SB 4940: 5f 50 43 49 30 52 50 30 37 50 44 43 58 70 01 5c _PCI0RP07PDCXp.\ 4950: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 37 48 50 /._SB_PCI0RP07HP 4960: 53 58 a0 2a 92 5c 2f 04 5f 53 42 5f 50 43 49 30 SX.*.\/._SB_PCI0 4970: 52 50 30 37 50 44 53 58 70 00 5c 2f 04 5f 53 42 RP07PDSXp.\/._SB 4980: 5f 50 43 49 30 52 50 30 37 4c 30 53 45 a1 16 70 _PCI0RP07L0SE..p 4990: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 37 .\/._SB_PCI0RP07 49a0: 48 50 53 58 a0 42 0a 90 93 52 50 38 44 00 5c 2f HPSX.B...RP8D.\/ 49b0: 04 5f 53 42 5f 50 43 49 30 52 50 30 38 48 50 53 ._SB_PCI0RP08HPS 49c0: 58 5b 22 0a 64 a0 4a 06 5c 2f 04 5f 53 42 5f 50 X[".d.J.\/._SB_P 49d0: 43 49 30 52 50 30 38 50 44 43 58 70 01 5c 2f 04 CI0RP08PDCXp.\/. 49e0: 5f 53 42 5f 50 43 49 30 52 50 30 38 50 44 43 58 _SB_PCI0RP08PDCX 49f0: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 4a00: 38 48 50 53 58 a0 2a 92 5c 2f 04 5f 53 42 5f 50 8HPSX.*.\/._SB_P 4a10: 43 49 30 52 50 30 38 50 44 53 58 70 00 5c 2f 04 CI0RP08PDSXp.\/. 4a20: 5f 53 42 5f 50 43 49 30 52 50 30 38 4c 30 53 45 _SB_PCI0RP08L0SE 4a30: a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 ..p.\/._SB_PCI0R 4a40: 50 30 38 48 50 53 58 14 26 5f 4c 30 32 00 70 00 P08HPSX.&_L02.p. 4a50: 47 50 45 43 86 5c 2e 5f 54 5a 5f 54 5a 30 30 0a GPEC.\._TZ_TZ00. 4a60: 80 a0 0c 5b 12 54 4e 4f 54 00 54 4e 4f 54 14 3c ...[.TNOT.TNOT.< 4a70: 5f 4c 30 36 00 a0 2d 90 5c 2f 04 5f 53 42 5f 50 _L06..-.\/._SB_P 4a80: 43 49 30 47 46 58 30 47 53 53 45 92 47 53 4d 49 CI0GFX0GSSE.GSMI 4a90: 5c 2f 04 5f 53 42 5f 50 43 49 30 47 46 58 30 47 \/._SB_PCI0GFX0G 4aa0: 53 43 49 a1 07 70 01 53 43 49 53 14 1c 5f 4c 30 SCI..p.SCIS.._L0 4ab0: 37 00 70 0a 20 5c 2f 04 5f 53 42 5f 50 43 49 30 7.p. \/._SB_PCI0 4ac0: 53 42 55 53 48 53 54 53 10 4c 53 5c 00 5b 80 49 SBUSHSTS.LS\.[.I 4ad0: 4f 5f 54 01 0b 00 08 0a 10 5b 81 24 49 4f 5f 54 O_T......[.$IO_T 4ae0: 01 54 52 50 49 10 00 10 00 10 00 10 54 52 50 30 .TRPI.......TRP0 4af0: 08 00 08 00 08 00 08 00 08 00 08 00 08 00 08 5b ...............[ 4b00: 80 49 4f 5f 44 01 0b 00 20 0a 04 5b 81 0b 49 4f .IO_D... ..[..IO 4b10: 5f 44 01 54 52 50 44 08 5b 80 49 4f 5f 48 01 0b _D.TRPD.[.IO_H.. 4b20: 00 10 0a 04 5b 81 0b 49 4f 5f 48 01 54 52 50 48 ....[..IO_H.TRPH 4b30: 08 5b 80 50 4d 49 4f 01 50 4d 42 53 0a 80 5b 81 .[.PMIO.PMBS..[. 4b40: 25 50 4d 49 4f 01 00 40 14 00 10 00 03 47 50 45 %PMIO..@.....GPE 4b50: 33 01 00 4c 08 00 01 55 50 52 57 01 00 2e 00 01 3..L...UPRW..... 4b60: 47 50 45 43 01 5b 81 1e 50 4d 49 4f 41 00 40 10 GPEC.[..PMIOA.@. 4b70: 00 10 00 03 47 50 53 33 01 00 4c 20 00 09 53 43 ....GPS3..L ..SC 4b80: 49 53 01 00 06 5b 80 47 50 49 4f 01 47 50 42 53 IS...[.GPIO.GPBS 4b90: 0a 64 5b 81 4c 15 47 50 49 4f 01 47 55 30 30 08 .d[.L.GPIO.GU00. 4ba0: 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 47 GU01.GU02.GU03.G 4bb0: 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 49 IO0.GIO1.GIO2.GI 4bc0: 4f 33 08 00 20 00 01 00 01 47 49 30 32 01 47 49 O3.. ....GI02.GI 4bd0: 30 33 01 47 49 30 34 01 00 01 00 01 00 01 00 01 03.GI04......... 4be0: 00 01 00 01 00 01 00 01 00 01 00 01 00 01 47 4f ..............GO 4bf0: 31 36 01 47 4f 31 37 01 00 01 00 01 00 01 00 01 16.GO17......... 4c00: 4d 44 49 44 01 42 4b 4c 54 01 00 03 47 50 32 37 MDID.BKLT...GP27 4c10: 01 47 50 32 38 01 47 4f 32 39 01 00 02 00 40 04 .GP28.GO29....@. 4c20: 00 40 0a 47 49 56 30 08 47 49 56 31 08 47 49 56 .@.GIV0.GIV1.GIV 4c30: 32 08 47 49 56 33 08 47 55 30 34 08 47 55 30 35 2.GIV3.GU04.GU05 4c40: 08 47 55 30 36 08 00 01 00 01 47 55 30 37 01 00 .GU06.....GU07.. 4c50: 05 47 49 4f 34 08 47 49 4f 35 08 47 49 4f 36 08 .GIO4.GIO5.GIO6. 4c60: 47 49 4f 37 08 00 01 00 01 47 4f 33 34 01 47 4f GIO7.....GO34.GO 4c70: 33 35 01 00 01 00 01 00 01 00 01 00 08 47 4f 34 35...........GO4 4c80: 38 01 00 01 47 4f 35 30 01 00 01 00 01 00 01 47 8...GO50.......G 4c90: 4f 35 34 01 00 01 00 28 47 55 30 38 08 47 55 30 O54....(GU08.GU0 4ca0: 39 08 47 55 30 41 08 47 55 30 42 08 47 49 4f 38 9.GU0A.GU0B.GIO8 4cb0: 08 47 49 4f 39 08 47 49 4f 41 08 47 49 4f 42 08 .GIO9.GIOA.GIOB. 4cc0: 00 01 00 01 00 01 00 01 00 01 00 01 47 4f 37 30 ............GO70 4cd0: 01 47 4f 37 31 01 00 01 00 01 00 01 00 01 00 01 .GO71........... 4ce0: 00 01 00 01 00 01 47 4c 30 41 08 47 4c 30 42 08 ......GL0A.GL0B. 4cf0: 5b 80 52 43 52 42 00 53 52 43 42 0b 00 40 5b 81 [.RCRB.SRCB..@[. 4d00: 4c 0a 52 43 52 42 13 00 80 00 08 00 80 00 10 00 L.RCRB.......... 4d10: 80 02 02 48 50 41 53 02 00 05 48 50 41 45 01 00 ...HPAS...HPAE.. 4d20: 48 09 00 01 00 01 53 41 54 44 01 53 4d 42 44 01 H.....SATD.SMBD. 4d30: 48 44 41 44 01 00 0b 52 50 31 44 01 52 50 32 44 HDAD...RP1D.RP2D 4d40: 01 52 50 33 44 01 52 50 34 44 01 52 50 35 44 01 .RP3D.RP4D.RP5D. 4d50: 52 50 36 44 01 52 50 37 44 01 52 50 38 44 01 00 RP6D.RP7D.RP8D.. 4d60: 48 c0 55 50 30 44 01 55 50 31 44 01 55 50 32 44 H.UP0D.UP1D.UP2D 4d70: 01 55 50 33 44 01 55 50 34 44 01 55 50 35 44 01 .UP3D.UP4D.UP5D. 4d80: 55 50 36 44 01 55 50 37 44 01 55 50 38 44 01 55 UP6D.UP7D.UP8D.U 4d90: 50 39 44 01 55 50 41 44 01 55 50 42 44 01 55 50 P9D.UPAD.UPBD.UP 4da0: 43 44 01 55 50 44 44 01 00 01 00 01 14 45 04 47 CD.UPDD......E.G 4db0: 45 54 50 09 a0 0e 93 7b 68 0a 09 00 00 a4 0c ff ETP....{h....... 4dc0: ff ff ff a0 0d 93 7b 68 0a 09 00 0a 08 a4 0b 84 ......{h........ 4dd0: 03 7a 7b 68 0b 00 03 00 0a 08 60 7a 7b 68 0b 00 .z{h......`z{h.. 4de0: 30 00 0a 0c 61 a4 77 0a 1e 74 0a 09 72 60 61 00 0...a.w..t..r`a. 4df0: 00 00 14 30 47 44 4d 41 0d a0 23 68 a0 07 90 69 ...0GDMA..#h...i 4e00: 6c a4 0a 14 a0 0e 90 6a 6c a4 77 74 0a 04 6b 00 l......jl.wt..k. 4e10: 0a 0f 00 a4 77 74 0a 04 6b 00 0a 1e 00 a4 0c ff ....wt..k....... 4e20: ff ff ff 14 1f 47 45 54 54 09 a4 77 0a 1e 74 0a .....GETT..w..t. 4e30: 09 72 7b 7a 68 0a 02 00 0a 03 00 7b 68 0a 03 00 .r{zh......{h... 4e40: 00 00 00 14 44 06 47 45 54 46 0b 08 54 4d 50 46 ....D.GETF..TMPF 4e50: 00 a0 0c 68 7d 54 4d 50 46 01 54 4d 50 46 a0 11 ...h}TMPF.TMPF.. 4e60: 7b 6a 0a 02 00 7d 54 4d 50 46 0a 02 54 4d 50 46 {j...}TMPF..TMPF 4e70: a0 0d 69 7d 54 4d 50 46 0a 04 54 4d 50 46 a0 11 ..i}TMPF..TMPF.. 4e80: 7b 6a 0a 20 00 7d 54 4d 50 46 0a 08 54 4d 50 46 {j. .}TMPF..TMPF 4e90: a0 12 7b 6a 0b 00 40 00 7d 54 4d 50 46 0a 10 54 ..{j..@.}TMPF..T 4ea0: 4d 50 46 a4 54 4d 50 46 14 3d 53 45 54 50 0b a0 MPF.TMPF.=SETP.. 4eb0: 08 94 68 0a f0 a4 0a 08 a1 2d a0 27 7b 69 0a 02 ..h......-.'{i.. 4ec0: 00 a0 10 90 92 94 68 0a 78 7b 6a 0a 02 00 a4 0b ......h.x{j..... 4ed0: 01 23 a0 0f 90 92 94 68 0a b4 7b 6a 01 00 a4 0b .#.....h..{j.... 4ee0: 01 21 a4 0b 01 10 14 37 53 44 4d 41 09 a0 08 92 .!.....7SDMA.... 4ef0: 94 68 0a 14 a4 01 a0 09 92 94 68 0a 1e a4 0a 02 .h........h..... 4f00: a0 08 92 94 68 0a 2d a4 01 a0 09 92 94 68 0a 3c ....h.-......h.< 4f10: a4 0a 02 a0 08 92 94 68 0a 5a a4 01 a4 00 14 2f .......h.Z...../ 4f20: 53 45 54 54 0b a0 25 7b 69 0a 02 00 a0 0f 90 92 SETT..%{i....... 4f30: 94 68 0a 78 7b 6a 0a 02 00 a4 0a 0b a0 0e 90 92 .h.x{j.......... 4f40: 94 68 0a b4 7b 6a 01 00 a4 0a 09 a4 0a 04 14 30 .h..{j.........0 4f50: 44 50 49 4f 02 a0 05 92 68 a4 00 a0 07 94 68 0a DPIO....h.....h. 4f60: f0 a4 00 a0 0f 94 68 0a b4 a0 05 69 a4 0a 02 a1 ......h....i.... 4f70: 03 a4 01 a0 08 94 68 0a 78 a4 0a 03 a4 0a 04 14 ......h.x....... 4f80: 3b 44 55 44 4d 02 a0 06 92 69 a4 0a ff a0 07 94 ;DUDM....i...... 4f90: 68 0a 5a a4 00 a0 07 94 68 0a 3c a4 01 a0 08 94 h.Z.....h.<..... 4fa0: 68 0a 2d a4 0a 02 a0 08 94 68 0a 1e a4 0a 03 a0 h.-......h...... 4fb0: 08 94 68 0a 14 a4 0a 04 a4 0a 05 14 2c 46 44 4d ..h.........,FDM 4fc0: 41 02 a0 0c 92 93 69 0a ff a4 7d 69 0a 40 00 a0 A.....i...}i.@.. 4fd0: 10 92 95 68 0a 03 a4 7d 74 68 0a 02 00 0a 20 00 ...h...}th.... . 4fe0: a0 05 68 a4 0a 12 a4 00 14 1c 46 50 49 4f 01 a0 ..h.......FPIO.. 4ff0: 0c 92 95 68 0a 03 a4 7d 68 0a 08 00 a0 06 93 68 ...h...}h......h 5000: 01 a4 01 a4 00 10 86 d3 01 2e 5f 53 42 5f 50 43 .........._SB_PC 5010: 49 30 5b 82 41 12 45 48 43 31 08 5f 41 44 52 0c I0[.A.EHC1._ADR. 5020: 00 00 1d 00 5b 80 50 57 4b 45 02 0a 62 0a 04 5b ....[.PWKE..b..[ 5030: 81 0d 50 57 4b 45 03 00 01 50 57 55 43 08 14 1d ..PWKE...PWUC... 5040: 5f 50 53 57 01 a0 08 68 70 ff 50 57 55 43 a1 07 _PSW...hp.PWUC.. 5050: 70 00 50 57 55 43 70 68 45 53 47 30 14 09 5f 53 p.PWUCphESG0.._S 5060: 33 44 00 a4 0a 02 14 09 5f 53 34 44 00 a4 0a 02 3D......_S4D.... 5070: 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 0d 0a 03 .._PRW..GPRW.... 5080: 5b 82 43 0b 48 55 42 30 08 5f 41 44 52 00 5b 82 [.C.HUB0._ADR.[. 5090: 45 0a 50 52 54 31 08 5f 41 44 52 01 08 5f 55 50 E.PRT1._ADR.._UP 50a0: 43 12 07 04 00 0a ff 00 00 5b 82 44 05 50 52 4f C........[.D.PRO 50b0: 34 08 5f 41 44 52 0a 04 08 5f 55 50 43 12 07 04 4._ADR..._UPC... 50c0: 00 0a ff 00 00 5b 82 38 43 41 4d 45 08 5f 41 44 .....[.8CAME._AD 50d0: 52 0a 04 14 2b 5f 50 4c 44 08 08 50 4c 44 50 12 R...+_PLD..PLDP. 50e0: 1a 01 11 17 0a 14 82 00 00 00 00 00 00 00 24 01 ..............$. 50f0: 00 00 00 00 00 00 9b 00 c3 00 a4 50 4c 44 50 5b ...........PLDP[ 5100: 82 19 50 52 4f 35 08 5f 41 44 52 0a 05 08 5f 55 ..PRO5._ADR..._U 5110: 50 43 12 07 04 00 0a ff 00 00 5b 82 19 50 52 4f PC........[..PRO 5120: 36 08 5f 41 44 52 0a 06 08 5f 55 50 43 12 07 04 6._ADR..._UPC... 5130: 00 0a ff 00 00 5b 82 4b 0c 45 48 43 32 08 5f 41 .....[.K.EHC2._A 5140: 44 52 0c 00 00 1a 00 5b 80 50 57 4b 45 02 0a 62 DR.....[.PWKE..b 5150: 0a 04 5b 81 0d 50 57 4b 45 03 00 01 50 57 55 43 ..[..PWKE...PWUC 5160: 06 14 1d 5f 50 53 57 01 a0 08 68 70 ff 50 57 55 ..._PSW...hp.PWU 5170: 43 a1 07 70 00 50 57 55 43 70 68 45 53 47 31 14 C..p.PWUCphESG1. 5180: 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 34 44 00 ._S3D......_S4D. 5190: a4 0a 02 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a ....._PRW..GPRW. 51a0: 0d 0a 03 5b 82 4d 05 48 55 42 30 08 5f 41 44 52 ...[.M.HUB0._ADR 51b0: 00 5b 82 4f 04 50 52 54 31 08 5f 41 44 52 01 08 .[.O.PRT1._ADR.. 51c0: 5f 55 50 43 12 07 04 00 0a ff 00 00 5b 82 19 50 _UPC........[..P 51d0: 4f 52 33 08 5f 41 44 52 0a 03 08 5f 55 50 43 12 OR3._ADR..._UPC. 51e0: 07 04 00 0a ff 00 00 5b 82 19 50 4f 52 36 08 5f .......[..POR6._ 51f0: 41 44 52 0a 06 08 5f 55 50 43 12 07 04 00 0a ff ADR..._UPC...... 5200: 00 00 5b 82 43 61 58 48 43 5f 08 5f 41 44 52 0c ..[.CaXHC_._ADR. 5210: 00 00 14 00 5b 80 58 50 52 54 02 0a 74 0a 6c 5b ....[.XPRT..t.l[ 5220: 81 2b 58 50 52 54 03 00 08 50 4d 45 45 01 00 06 .+XPRT...PMEE... 5230: 50 4d 45 53 01 00 40 2d 50 52 32 5f 20 50 52 32 PMES..@-PR2_ PR2 5240: 4d 20 50 52 33 5f 20 50 52 33 4d 20 08 58 52 53 M PR3_ PR3M .XRS 5250: 54 00 14 22 43 55 49 44 09 a0 19 93 68 11 13 0a T.."CUID....h... 5260: 10 a9 12 95 7c 05 17 b4 4c af 7d 50 6a 24 23 ab ....|...L.}Pj$#. 5270: 71 a4 01 a4 00 14 49 05 50 4f 53 43 0b 8a 6a 00 q.....I.POSC..j. 5280: 43 44 57 31 8a 6a 0a 08 43 44 57 33 a0 10 92 93 CDW1.j..CDW3.... 5290: 69 01 7d 43 44 57 31 0a 08 43 44 57 31 a0 12 93 i.}CDW1..CDW1... 52a0: 58 48 43 49 00 7d 43 44 57 31 0a 02 43 44 57 31 XHCI.}CDW1..CDW1 52b0: a0 1c 92 7b 43 44 57 31 01 00 a0 0c 7b 43 44 57 ...{CDW1....{CDW 52c0: 33 01 00 45 53 45 4c a1 05 58 53 45 4c a4 6a 14 3..ESEL..XSEL.j. 52d0: 43 06 58 53 45 4c 08 a0 4b 05 91 93 58 48 43 49 C.XSEL..K...XHCI 52e0: 0a 02 93 58 48 43 49 0a 03 70 01 58 55 53 42 70 ...XHCI..p.XUSBp 52f0: 01 58 52 53 54 70 00 60 7b 50 52 33 5f 0c f0 ff .XRSTp.`{PR3_... 5300: ff ff 60 7d 60 58 48 50 4d 60 7b 60 50 52 33 4d ..`}`XHPM`{`PR3M 5310: 50 52 33 5f 70 00 60 7b 50 52 32 5f 0c f0 ff ff PR3_p.`{PR2_.... 5320: ff 60 7d 60 58 48 50 4d 60 7b 60 50 52 32 4d 50 .`}`XHPM`{`PR2MP 5330: 52 32 5f 14 3f 45 53 45 4c 08 a0 38 91 93 58 48 R2_.?ESEL..8..XH 5340: 43 49 0a 02 93 58 48 43 49 0a 03 7b 50 52 33 5f CI...XHCI..{PR3_ 5350: 0c f0 ff ff ff 50 52 33 5f 7b 50 52 32 5f 0c f0 .....PR3_{PR2_.. 5360: ff ff ff 50 52 32 5f 70 00 58 55 53 42 70 00 58 ...PR2_p.XUSBp.X 5370: 52 53 54 14 19 58 57 41 4b 08 a0 12 91 93 58 55 RST..XWAK.....XU 5380: 53 42 01 93 58 52 53 54 01 58 53 45 4c 14 09 5f SB..XRST.XSEL.._ 5390: 53 33 44 00 a4 0a 02 14 09 5f 53 34 44 00 a4 0a S3D......_S4D... 53a0: 02 5b 82 47 45 52 48 55 42 08 5f 41 44 52 00 5b .[.GERHUB._ADR.[ 53b0: 82 45 08 48 53 50 31 08 5f 41 44 52 01 14 2c 5f .E.HSP1._ADR..,_ 53c0: 55 50 43 08 08 55 50 43 50 12 08 04 0a ff 0a 03 UPC..UPCP....... 53d0: 00 00 a0 12 92 7b 50 52 32 5f 01 00 70 00 88 55 .....{PR2_..p..U 53e0: 50 43 50 00 00 a4 55 50 43 50 14 4b 04 5f 50 4c PCP...UPCP.K._PL 53f0: 44 08 08 50 4c 44 50 12 16 01 11 13 0a 10 01 c6 D..PLDP......... 5400: 72 00 00 00 00 00 69 0c 80 00 00 00 00 00 8d 83 r.....i......... 5410: 88 50 4c 44 50 00 00 0a 40 56 49 53 5f a0 13 92 .PLDP...@VIS_... 5420: 7b 50 52 32 5f 01 00 7b 56 49 53 5f 00 56 49 53 {PR2_..{VIS_.VIS 5430: 5f a4 50 4c 44 50 5b 82 48 08 48 53 50 32 08 5f _.PLDP[.H.HSP2._ 5440: 41 44 52 0a 02 14 2d 5f 55 50 43 08 08 55 50 43 ADR...-_UPC..UPC 5450: 50 12 08 04 0a ff 0a 03 00 00 a0 13 92 7b 50 52 P............{PR 5460: 32 5f 0a 02 00 70 00 88 55 50 43 50 00 00 a4 55 2_...p..UPCP...U 5470: 50 43 50 14 4c 04 5f 50 4c 44 08 08 50 4c 44 50 PCP.L._PLD..PLDP 5480: 12 16 01 11 13 0a 10 01 c6 72 00 00 00 00 00 69 .........r.....i 5490: 0c 00 01 00 00 00 00 8d 83 88 50 4c 44 50 00 00 ..........PLDP.. 54a0: 0a 40 56 49 53 5f a0 14 92 7b 50 52 32 5f 0a 02 .@VIS_...{PR2_.. 54b0: 00 7b 56 49 53 5f 00 56 49 53 5f a4 50 4c 44 50 .{VIS_.VIS_.PLDP 54c0: 5b 82 48 08 48 53 50 33 08 5f 41 44 52 0a 03 14 [.H.HSP3._ADR... 54d0: 2d 5f 55 50 43 08 08 55 50 43 50 12 08 04 0a ff -_UPC..UPCP..... 54e0: 0a 03 00 00 a0 13 92 7b 50 52 32 5f 0a 04 00 70 .......{PR2_...p 54f0: 00 88 55 50 43 50 00 00 a4 55 50 43 50 14 4c 04 ..UPCP...UPCP.L. 5500: 5f 50 4c 44 08 08 50 4c 44 50 12 16 01 11 13 0a _PLD..PLDP...... 5510: 10 01 c6 72 00 00 00 00 00 69 0c 80 01 00 00 00 ...r.....i...... 5520: 00 8d 83 88 50 4c 44 50 00 00 0a 40 56 49 53 5f ....PLDP...@VIS_ 5530: a0 14 92 7b 50 52 32 5f 0a 04 00 7b 56 49 53 5f ...{PR2_...{VIS_ 5540: 00 56 49 53 5f a4 50 4c 44 50 5b 82 48 08 48 53 .VIS_.PLDP[.H.HS 5550: 50 34 08 5f 41 44 52 0a 04 14 2d 5f 55 50 43 08 P4._ADR...-_UPC. 5560: 08 55 50 43 50 12 08 04 0a ff 0a 03 00 00 a0 13 .UPCP........... 5570: 92 7b 50 52 32 5f 0a 08 00 70 00 88 55 50 43 50 .{PR2_...p..UPCP 5580: 00 00 a4 55 50 43 50 14 4c 04 5f 50 4c 44 08 08 ...UPCP.L._PLD.. 5590: 50 4c 44 50 12 16 01 11 13 0a 10 01 c6 72 00 00 PLDP.........r.. 55a0: 00 00 00 69 0c 00 02 00 00 00 00 8d 83 88 50 4c ...i..........PL 55b0: 44 50 00 00 0a 40 56 49 53 5f a0 14 92 7b 50 52 DP...@VIS_...{PR 55c0: 32 5f 0a 08 00 7b 56 49 53 5f 00 56 49 53 5f a4 2_...{VIS_.VIS_. 55d0: 50 4c 44 50 5b 82 46 08 53 53 50 31 08 5f 41 44 PLDP[.F.SSP1._AD 55e0: 52 0a 05 14 2c 5f 55 50 43 08 08 55 50 43 50 12 R...,_UPC..UPCP. 55f0: 08 04 0a ff 0a 03 00 00 a0 12 92 7b 50 52 33 5f ...........{PR3_ 5600: 01 00 70 00 88 55 50 43 50 00 00 a4 55 50 43 50 ..p..UPCP...UPCP 5610: 14 4b 04 5f 50 4c 44 08 08 50 4c 44 50 12 16 01 .K._PLD..PLDP... 5620: 11 13 0a 10 01 c6 72 00 00 00 00 00 69 0c 80 00 ......r.....i... 5630: 00 00 00 00 8d 83 88 50 4c 44 50 00 00 0a 40 56 .......PLDP...@V 5640: 49 53 5f a0 13 92 7b 50 52 33 5f 01 00 7b 56 49 IS_...{PR3_..{VI 5650: 53 5f 00 56 49 53 5f a4 50 4c 44 50 5b 82 48 08 S_.VIS_.PLDP[.H. 5660: 53 53 50 32 08 5f 41 44 52 0a 06 14 2d 5f 55 50 SSP2._ADR...-_UP 5670: 43 08 08 55 50 43 50 12 08 04 0a ff 0a 03 00 00 C..UPCP......... 5680: a0 13 92 7b 50 52 33 5f 0a 02 00 70 00 88 55 50 ...{PR3_...p..UP 5690: 43 50 00 00 a4 55 50 43 50 14 4c 04 5f 50 4c 44 CP...UPCP.L._PLD 56a0: 08 08 50 4c 44 50 12 16 01 11 13 0a 10 01 c6 72 ..PLDP.........r 56b0: 00 00 00 00 00 69 0c 00 01 00 00 00 00 8d 83 88 .....i.......... 56c0: 50 4c 44 50 00 00 0a 40 56 49 53 5f a0 14 92 7b PLDP...@VIS_...{ 56d0: 50 52 33 5f 0a 02 00 7b 56 49 53 5f 00 56 49 53 PR3_...{VIS_.VIS 56e0: 5f a4 50 4c 44 50 5b 82 48 08 53 53 50 33 08 5f _.PLDP[.H.SSP3._ 56f0: 41 44 52 0a 07 14 2d 5f 55 50 43 08 08 55 50 43 ADR...-_UPC..UPC 5700: 50 12 08 04 0a ff 0a 03 00 00 a0 13 92 7b 50 52 P............{PR 5710: 33 5f 0a 04 00 70 00 88 55 50 43 50 00 00 a4 55 3_...p..UPCP...U 5720: 50 43 50 14 4c 04 5f 50 4c 44 08 08 50 4c 44 50 PCP.L._PLD..PLDP 5730: 12 16 01 11 13 0a 10 01 c6 72 00 00 00 00 00 69 .........r.....i 5740: 0c 80 01 00 00 00 00 8d 83 88 50 4c 44 50 00 00 ..........PLDP.. 5750: 0a 40 56 49 53 5f a0 14 92 7b 50 52 33 5f 0a 04 .@VIS_...{PR3_.. 5760: 00 7b 56 49 53 5f 00 56 49 53 5f a4 50 4c 44 50 .{VIS_.VIS_.PLDP 5770: 5b 82 48 08 53 53 50 34 08 5f 41 44 52 0a 08 14 [.H.SSP4._ADR... 5780: 2d 5f 55 50 43 08 08 55 50 43 50 12 08 04 0a ff -_UPC..UPCP..... 5790: 0a 03 00 00 a0 13 92 7b 50 52 33 5f 0a 08 00 70 .......{PR3_...p 57a0: 00 88 55 50 43 50 00 00 a4 55 50 43 50 14 4c 04 ..UPCP...UPCP.L. 57b0: 5f 50 4c 44 08 08 50 4c 44 50 12 16 01 11 13 0a _PLD..PLDP...... 57c0: 10 01 c6 72 00 00 00 00 00 69 0c 00 02 00 00 00 ...r.....i...... 57d0: 00 8d 83 88 50 4c 44 50 00 00 0a 40 56 49 53 5f ....PLDP...@VIS_ 57e0: a0 14 92 7b 50 52 33 5f 0a 08 00 7b 56 49 53 5f ...{PR3_...{VIS_ 57f0: 00 56 49 53 5f a4 50 4c 44 50 14 0f 5f 50 52 57 .VIS_.PLDP.._PRW 5800: 00 a4 47 50 52 57 0a 0d 0a 03 14 0c 5f 50 53 57 ..GPRW......_PSW 5810: 01 70 68 45 53 47 32 5b 82 4f 04 48 44 45 46 08 .phESG2[.O.HDEF. 5820: 5f 41 44 52 0c 00 00 1b 00 5b 80 48 44 41 52 02 _ADR.....[.HDAR. 5830: 0a 4c 0a 10 5b 81 22 48 44 41 52 02 44 43 4b 41 .L..[."HDAR.DCKA 5840: 01 00 07 44 43 4b 4d 01 00 06 44 43 4b 53 01 00 ...DCKM...DCKS.. 5850: 30 00 0f 50 4d 45 53 01 14 0f 5f 50 52 57 00 a4 0..PMES..._PRW.. 5860: 47 50 52 57 0a 0d 0a 04 5b 82 4f 0c 52 50 30 31 GPRW....[.O.RP01 5870: 08 5f 41 44 52 0c 00 00 1c 00 5b 80 50 58 43 53 ._ADR.....[.PXCS 5880: 02 0a 40 0a c0 5b 81 49 04 50 58 43 53 00 00 40 ..@..[.I.PXCS..@ 5890: 08 4c 30 53 45 01 00 07 00 08 00 0d 4c 41 53 58 .L0SE.......LASX 58a0: 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 00 ..2ABPX...PDCX.. 58b0: 02 50 44 53 58 01 00 01 00 28 00 10 50 53 50 58 .PDSX....(..PSPX 58c0: 01 00 4f 3a 00 1e 48 50 45 58 01 50 4d 45 58 01 ..O:..HPEX.PMEX. 58d0: 5b 81 15 50 58 43 53 40 00 40 4e 00 1e 48 50 53 [..PXCS@.@N..HPS 58e0: 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 5f X.PMSX.[..PXSX._ 58f0: 41 44 52 00 14 2d 48 50 4d 45 08 a0 26 50 4d 53 ADR..-HPME..&PMS 5900: 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 58 a0 07 Xp..`..`p.PMSX.. 5910: 50 4d 53 58 76 60 a1 04 70 00 60 86 50 58 53 58 PMSXv`..p.`.PXSX 5920: 0a 02 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 ...._PRT...PICM. 5930: 41 52 30 34 a4 50 52 30 34 5b 82 4f 0c 52 50 30 AR04.PR04[.O.RP0 5940: 32 08 5f 41 44 52 0c 01 00 1c 00 5b 80 50 58 43 2._ADR.....[.PXC 5950: 53 02 0a 40 0a c0 5b 81 49 04 50 58 43 53 00 00 S..@..[.I.PXCS.. 5960: 40 08 4c 30 53 45 01 00 07 00 08 00 0d 4c 41 53 @.L0SE.......LAS 5970: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 5980: 00 02 50 44 53 58 01 00 01 00 28 00 10 50 53 50 ..PDSX....(..PSP 5990: 58 01 00 4f 3a 00 1e 48 50 45 58 01 50 4d 45 58 X..O:..HPEX.PMEX 59a0: 01 5b 81 15 50 58 43 53 40 00 40 4e 00 1e 48 50 .[..PXCS@.@N..HP 59b0: 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 SX.PMSX.[..PXSX. 59c0: 5f 41 44 52 00 14 2d 48 50 4d 45 08 a0 26 50 4d _ADR..-HPME..&PM 59d0: 53 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 58 a0 SXp..`..`p.PMSX. 59e0: 07 50 4d 53 58 76 60 a1 04 70 00 60 86 50 58 53 .PMSXv`..p.`.PXS 59f0: 58 0a 02 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d X...._PRT...PICM 5a00: a4 41 52 30 35 a4 50 52 30 35 5b 82 4f 0c 52 50 .AR05.PR05[.O.RP 5a10: 30 33 08 5f 41 44 52 0c 02 00 1c 00 5b 80 50 58 03._ADR.....[.PX 5a20: 43 53 02 0a 40 0a c0 5b 81 49 04 50 58 43 53 00 CS..@..[.I.PXCS. 5a30: 00 40 08 4c 30 53 45 01 00 07 00 08 00 0d 4c 41 .@.L0SE.......LA 5a40: 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 SX..2ABPX...PDCX 5a50: 01 00 02 50 44 53 58 01 00 01 00 28 00 10 50 53 ...PDSX....(..PS 5a60: 50 58 01 00 4f 3a 00 1e 48 50 45 58 01 50 4d 45 PX..O:..HPEX.PME 5a70: 58 01 5b 81 15 50 58 43 53 40 00 40 4e 00 1e 48 X.[..PXCS@.@N..H 5a80: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 5a90: 08 5f 41 44 52 00 14 2d 48 50 4d 45 08 a0 26 50 ._ADR..-HPME..&P 5aa0: 4d 53 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 58 MSXp..`..`p.PMSX 5ab0: a0 07 50 4d 53 58 76 60 a1 04 70 00 60 86 50 58 ..PMSXv`..p.`.PX 5ac0: 53 58 0a 02 14 16 5f 50 52 54 00 a0 0a 50 49 43 SX...._PRT...PIC 5ad0: 4d a4 41 52 30 36 a4 50 52 30 36 5b 82 4f 0d 52 M.AR06.PR06[.O.R 5ae0: 50 30 34 08 5f 41 44 52 0c 03 00 1c 00 5b 80 50 P04._ADR.....[.P 5af0: 58 43 53 02 0a 40 0a c0 5b 81 49 04 50 58 43 53 XCS..@..[.I.PXCS 5b00: 00 00 40 08 4c 30 53 45 01 00 07 00 08 00 0d 4c ..@.L0SE.......L 5b10: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 5b20: 58 01 00 02 50 44 53 58 01 00 01 00 28 00 10 50 X...PDSX....(..P 5b30: 53 50 58 01 00 4f 3a 00 1e 48 50 45 58 01 50 4d SPX..O:..HPEX.PM 5b40: 45 58 01 5b 81 15 50 58 43 53 40 00 40 4e 00 1e EX.[..PXCS@.@N.. 5b50: 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 HPSX.PMSX.[..PXS 5b60: 58 08 5f 41 44 52 00 14 2d 48 50 4d 45 08 a0 26 X._ADR..-HPME..& 5b70: 50 4d 53 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 PMSXp..`..`p.PMS 5b80: 58 a0 07 50 4d 53 58 76 60 a1 04 70 00 60 86 50 X..PMSXv`..p.`.P 5b90: 58 53 58 0a 02 14 0f 5f 50 52 57 00 a4 47 50 52 XSX...._PRW..GPR 5ba0: 57 0a 09 0a 04 14 16 5f 50 52 54 00 a0 0a 50 49 W......_PRT...PI 5bb0: 43 4d a4 41 52 30 37 a4 50 52 30 37 5b 82 4f 0c CM.AR07.PR07[.O. 5bc0: 52 50 30 35 08 5f 41 44 52 0c 04 00 1c 00 5b 80 RP05._ADR.....[. 5bd0: 50 58 43 53 02 0a 40 0a c0 5b 81 49 04 50 58 43 PXCS..@..[.I.PXC 5be0: 53 00 00 40 08 4c 30 53 45 01 00 07 00 08 00 0d S..@.L0SE....... 5bf0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 5c00: 43 58 01 00 02 50 44 53 58 01 00 01 00 28 00 10 CX...PDSX....(.. 5c10: 50 53 50 58 01 00 4f 3a 00 1e 48 50 45 58 01 50 PSPX..O:..HPEX.P 5c20: 4d 45 58 01 5b 81 15 50 58 43 53 40 00 40 4e 00 MEX.[..PXCS@.@N. 5c30: 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 .HPSX.PMSX.[..PX 5c40: 53 58 08 5f 41 44 52 00 14 2d 48 50 4d 45 08 a0 SX._ADR..-HPME.. 5c50: 26 50 4d 53 58 70 0a c8 60 a2 15 60 70 01 50 4d &PMSXp..`..`p.PM 5c60: 53 58 a0 07 50 4d 53 58 76 60 a1 04 70 00 60 86 SX..PMSXv`..p.`. 5c70: 50 58 53 58 0a 02 14 16 5f 50 52 54 00 a0 0a 50 PXSX...._PRT...P 5c80: 49 43 4d a4 41 52 30 38 a4 50 52 30 38 5b 82 4b ICM.AR08.PR08[.K 5c90: 0e 52 50 30 36 08 5f 41 44 52 0c 05 00 1c 00 5b .RP06._ADR.....[ 5ca0: 80 50 58 43 53 02 0a 40 0a c0 5b 81 49 04 50 58 .PXCS..@..[.I.PX 5cb0: 43 53 00 00 40 08 4c 30 53 45 01 00 07 00 08 00 CS..@.L0SE...... 5cc0: 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 .LASX..2ABPX...P 5cd0: 44 43 58 01 00 02 50 44 53 58 01 00 01 00 28 00 DCX...PDSX....(. 5ce0: 10 50 53 50 58 01 00 4f 3a 00 1e 48 50 45 58 01 .PSPX..O:..HPEX. 5cf0: 50 4d 45 58 01 5b 81 15 50 58 43 53 40 00 40 4e PMEX.[..PXCS@.@N 5d00: 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 17 50 ..HPSX.PMSX.[..P 5d10: 58 53 58 08 5f 41 44 52 00 08 5f 50 52 57 12 06 XSX._ADR.._PRW.. 5d20: 02 0a 09 0a 04 14 2d 48 50 4d 45 08 a0 26 50 4d ......-HPME..&PM 5d30: 53 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 58 a0 SXp..`..`p.PMSX. 5d40: 07 50 4d 53 58 76 60 a1 04 70 00 60 86 50 58 53 .PMSXv`..p.`.PXS 5d50: 58 0a 02 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a X...._PRW..GPRW. 5d60: 09 0a 04 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d ....._PRT...PICM 5d70: a4 41 52 30 39 a4 50 52 30 39 5b 82 4f 0c 52 50 .AR09.PR09[.O.RP 5d80: 30 37 08 5f 41 44 52 0c 06 00 1c 00 5b 80 50 58 07._ADR.....[.PX 5d90: 43 53 02 0a 40 0a c0 5b 81 49 04 50 58 43 53 00 CS..@..[.I.PXCS. 5da0: 00 40 08 4c 30 53 45 01 00 07 00 08 00 0d 4c 41 .@.L0SE.......LA 5db0: 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 SX..2ABPX...PDCX 5dc0: 01 00 02 50 44 53 58 01 00 01 00 28 00 10 50 53 ...PDSX....(..PS 5dd0: 50 58 01 00 4f 3a 00 1e 48 50 45 58 01 50 4d 45 PX..O:..HPEX.PME 5de0: 58 01 5b 81 15 50 58 43 53 40 00 40 4e 00 1e 48 X.[..PXCS@.@N..H 5df0: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 5e00: 08 5f 41 44 52 00 14 2d 48 50 4d 45 08 a0 26 50 ._ADR..-HPME..&P 5e10: 4d 53 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 58 MSXp..`..`p.PMSX 5e20: a0 07 50 4d 53 58 76 60 a1 04 70 00 60 86 50 58 ..PMSXv`..p.`.PX 5e30: 53 58 0a 02 14 16 5f 50 52 54 00 a0 0a 50 49 43 SX...._PRT...PIC 5e40: 4d a4 41 52 30 45 a4 50 52 30 45 5b 82 4f 0c 52 M.AR0E.PR0E[.O.R 5e50: 50 30 38 08 5f 41 44 52 0c 07 00 1c 00 5b 80 50 P08._ADR.....[.P 5e60: 58 43 53 02 0a 40 0a c0 5b 81 49 04 50 58 43 53 XCS..@..[.I.PXCS 5e70: 00 00 40 08 4c 30 53 45 01 00 07 00 08 00 0d 4c ..@.L0SE.......L 5e80: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 5e90: 58 01 00 02 50 44 53 58 01 00 01 00 28 00 10 50 X...PDSX....(..P 5ea0: 53 50 58 01 00 4f 3a 00 1e 48 50 45 58 01 50 4d SPX..O:..HPEX.PM 5eb0: 45 58 01 5b 81 15 50 58 43 53 40 00 40 4e 00 1e EX.[..PXCS@.@N.. 5ec0: 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 HPSX.PMSX.[..PXS 5ed0: 58 08 5f 41 44 52 00 14 2d 48 50 4d 45 08 a0 26 X._ADR..-HPME..& 5ee0: 50 4d 53 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 PMSXp..`..`p.PMS 5ef0: 58 a0 07 50 4d 53 58 76 60 a1 04 70 00 60 86 50 X..PMSXv`..p.`.P 5f00: 58 53 58 0a 02 14 16 5f 50 52 54 00 a0 0a 50 49 XSX...._PRT...PI 5f10: 43 4d a4 41 52 30 46 a4 50 52 30 46 5b 82 44 8f CM.AR0F.PR0F[.D. 5f20: 53 41 54 30 08 5f 41 44 52 0c 02 00 1f 00 5b 80 SAT0._ADR.....[. 5f30: 53 41 43 53 02 0a 40 0a c0 5b 81 4f 06 53 41 43 SACS..@..[.O.SAC 5f40: 53 03 50 52 49 54 10 53 45 43 54 10 50 53 49 54 S.PRIT.SECT.PSIT 5f50: 04 53 53 49 54 04 00 18 53 59 4e 43 04 00 0c 53 .SSIT...SYNC...S 5f60: 44 54 30 02 00 02 53 44 54 31 02 00 02 53 44 54 DT0...SDT1...SDT 5f70: 32 02 00 02 53 44 54 33 02 00 42 04 49 43 52 30 2...SDT3..B.ICR0 5f80: 04 49 43 52 31 04 49 43 52 32 04 49 43 52 33 04 .ICR1.ICR2.ICR3. 5f90: 49 43 52 34 04 49 43 52 35 04 00 48 0e 48 44 50 ICR4.ICR5..H.HDP 5fa0: 53 02 00 4e 0d 4d 41 50 56 02 08 5f 50 53 43 00 S..N.MAPV.._PSC. 5fb0: 14 0c 5f 50 53 30 00 70 00 5f 50 53 43 14 12 5f .._PS0.p._PSC.._ 5fc0: 50 53 33 00 70 00 48 44 50 53 70 00 5f 50 53 43 PS3.p.HDPSp._PSC 5fd0: 5b 82 4d 08 50 52 54 30 08 5f 41 44 52 0b ff ff [.M.PRT0._ADR... 5fe0: 08 44 49 50 30 00 08 48 44 54 46 11 11 0a 0e 02 .DIP0..HDTF..... 5ff0: 00 00 00 00 a0 ef 00 00 00 00 00 a0 f5 08 48 50 ..............HP 6000: 54 46 11 18 0a 15 02 00 00 00 00 a0 ef 00 00 00 TF.............. 6010: 00 00 a0 f5 10 03 00 00 00 a0 ef 14 2c 5f 53 44 ............,_SD 6020: 44 01 a0 25 93 87 68 0b 00 02 8b 68 0a 9c 57 37 D..%..h....h..W7 6030: 38 30 a0 15 7b 57 37 38 30 0a 08 00 70 01 44 49 80..{W780...p.DI 6040: 50 30 70 01 44 50 50 30 14 16 5f 47 54 46 00 a0 P0p.DPP0.._GTF.. 6050: 0a 44 49 50 30 a4 48 50 54 46 a4 48 44 54 46 5b .DIP0.HPTF.HDTF[ 6060: 82 4f 08 50 52 54 31 08 5f 41 44 52 0c ff ff 01 .O.PRT1._ADR.... 6070: 00 08 44 49 50 31 00 08 48 44 54 46 11 11 0a 0e ..DIP1..HDTF.... 6080: 02 00 00 00 00 a0 ef 00 00 00 00 00 a0 f5 08 48 ...............H 6090: 50 54 46 11 18 0a 15 02 00 00 00 00 a0 ef 00 00 PTF............. 60a0: 00 00 00 a0 f5 10 03 00 00 00 a0 ef 14 2c 5f 53 .............,_S 60b0: 44 44 01 a0 25 93 87 68 0b 00 02 8b 68 0a 9c 57 DD..%..h....h..W 60c0: 37 38 30 a0 15 7b 57 37 38 30 0a 08 00 70 01 44 780..{W780...p.D 60d0: 49 50 31 70 01 44 50 50 31 14 16 5f 47 54 46 00 IP1p.DPP1.._GTF. 60e0: a0 0a 44 49 50 31 a4 48 50 54 46 a4 48 44 54 46 ..DIP1.HPTF.HDTF 60f0: 5b 82 48 09 50 52 54 32 08 5f 41 44 52 0c ff ff [.H.PRT2._ADR... 6100: 02 00 14 08 5f 52 4d 56 00 a4 01 08 44 49 50 32 ...._RMV....DIP2 6110: 00 08 48 44 54 46 11 11 0a 0e 02 00 00 00 00 a0 ..HDTF.......... 6120: ef 00 00 00 00 00 a0 f5 08 48 50 54 46 11 18 0a .........HPTF... 6130: 15 02 00 00 00 00 a0 ef 00 00 00 00 00 a0 f5 10 ................ 6140: 03 00 00 00 a0 ef 14 2c 5f 53 44 44 01 a0 25 93 .......,_SDD..%. 6150: 87 68 0b 00 02 8b 68 0a 9c 57 37 38 30 a0 15 7b .h....h..W780..{ 6160: 57 37 38 30 0a 08 00 70 01 44 49 50 32 70 01 44 W780...p.DIP2p.D 6170: 50 50 32 14 16 5f 47 54 46 00 a0 0a 44 49 50 32 PP2.._GTF...DIP2 6180: a4 48 50 54 46 a4 48 44 54 46 5b 82 42 34 50 52 .HPTF.HDTF[.B4PR 6190: 49 44 08 5f 41 44 52 00 08 42 50 49 30 00 08 42 ID._ADR..BPI0..B 61a0: 44 4d 30 00 08 42 50 49 31 00 08 42 44 4d 31 00 DM0..BPI1..BDM1. 61b0: 08 44 49 50 30 00 08 44 49 50 31 00 14 41 0a 5f .DIP0..DIP1..A._ 61c0: 47 54 4d 00 08 50 42 55 46 11 17 0a 14 00 00 00 GTM..PBUF....... 61d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 61e0: 00 08 47 54 4d 45 00 8a 50 42 55 46 00 47 54 50 ..GTME..PBUF.GTP 61f0: 30 8a 50 42 55 46 0a 04 47 54 44 30 8a 50 42 55 0.PBUF..GTD0.PBU 6200: 46 0a 08 47 54 50 31 8a 50 42 55 46 0a 0c 47 54 F..GTP1.PBUF..GT 6210: 44 31 8a 50 42 55 46 0a 10 47 54 4d 46 a0 35 92 D1.PBUF..GTMF.5. 6220: 47 54 4d 45 7d 47 54 4d 46 01 47 54 4d 46 70 0a GTME}GTMF.GTMFp. 6230: 78 47 54 50 30 70 0a 14 47 54 44 30 70 00 47 54 xGTP0p..GTD0p.GT 6240: 50 31 70 00 47 54 44 31 7d 47 54 4d 46 0a 10 47 P1p.GTD1}GTMF..G 6250: 54 4d 46 70 01 47 54 4d 45 a4 50 42 55 46 14 41 TMFp.GTME.PBUF.A 6260: 0e 5f 53 54 4d 03 8a 68 00 53 54 50 30 8a 68 0a ._STM..h.STP0.h. 6270: 04 53 54 44 30 8a 68 0a 08 53 54 50 31 8a 68 0a .STD0.h..STP1.h. 6280: 0c 53 54 44 31 8a 68 0a 10 53 54 4d 46 a0 48 05 .STD1.h..STMF.H. 6290: 93 87 69 0b 00 02 70 44 50 49 4f 53 54 50 30 7b ..i...pDPIOSTP0{ 62a0: 53 54 4d 46 0a 02 00 60 70 44 55 44 4d 53 54 44 STMF...`pDUDMSTD 62b0: 30 7b 53 54 4d 46 01 00 61 8b 69 0a 9c 4d 30 37 0{STMF..a.i..M07 62c0: 38 a0 0f 7b 4d 30 37 38 0a 08 00 70 01 44 49 50 8..{M078...p.DIP 62d0: 30 70 46 44 4d 41 60 61 42 44 4d 30 70 46 50 49 0pFDMA`aBDM0pFPI 62e0: 4f 60 42 50 49 30 a0 49 05 93 87 6a 0b 00 02 70 O`BPI0.I...j...p 62f0: 44 50 49 4f 53 54 50 31 7b 53 54 4d 46 0a 08 00 DPIOSTP1{STMF... 6300: 60 70 44 55 44 4d 53 54 44 31 7b 53 54 4d 46 0a `pDUDMSTD1{STMF. 6310: 04 00 61 8b 6a 0a 9c 53 30 37 38 a0 0f 7b 53 30 ..a.j..S078..{S0 6320: 37 38 0a 08 00 70 01 44 49 50 31 70 46 44 4d 41 78...p.DIP1pFDMA 6330: 60 61 42 44 4d 31 70 46 50 49 4f 60 42 50 49 31 `aBDM1pFPIO`BPI1 6340: 5b 82 45 0c 50 5f 44 30 08 5f 41 44 52 00 14 48 [.E.P_D0._ADR..H 6350: 0b 5f 47 54 46 00 08 48 44 54 46 11 1f 0a 1c 02 ._GTF..HDTF..... 6360: 00 00 00 00 a0 ef 00 00 00 00 00 a0 f5 03 00 00 ................ 6370: 00 00 a0 ef 03 00 00 00 00 a0 ef 8c 48 44 54 46 ............HDTF 6380: 0a 0f 48 44 4d 41 8c 48 44 54 46 0a 16 48 50 49 ..HDMA.HDTF..HPI 6390: 4f 08 48 50 54 46 11 26 0a 23 02 00 00 00 00 a0 O.HPTF.&.#...... 63a0: ef 00 00 00 00 00 a0 f5 03 00 00 00 00 a0 ef 03 ................ 63b0: 00 00 00 00 a0 ef 10 03 00 00 00 a0 ef 8c 48 50 ..............HP 63c0: 54 46 0a 0f 50 44 4d 41 8c 48 50 54 46 0a 16 50 TF..PDMA.HPTF..P 63d0: 50 49 4f a0 1c 44 49 50 30 70 42 44 4d 30 50 44 PIO..DIP0pBDM0PD 63e0: 4d 41 70 42 50 49 30 50 50 49 4f a4 48 50 54 46 MApBPI0PPIO.HPTF 63f0: 70 42 44 4d 30 48 44 4d 41 70 42 50 49 30 48 50 pBDM0HDMApBPI0HP 6400: 49 4f a4 48 44 54 46 5b 82 45 0c 50 5f 44 31 08 IO.HDTF[.E.P_D1. 6410: 5f 41 44 52 01 14 48 0b 5f 47 54 46 00 08 48 44 _ADR..H._GTF..HD 6420: 54 46 11 1f 0a 1c 02 00 00 00 00 b0 ef 00 00 00 TF.............. 6430: 00 00 b0 f5 03 00 00 00 00 b0 ef 03 00 00 00 00 ................ 6440: b0 ef 8c 48 44 54 46 0a 0f 48 44 4d 41 8c 48 44 ...HDTF..HDMA.HD 6450: 54 46 0a 16 48 50 49 4f 08 48 50 54 46 11 26 0a TF..HPIO.HPTF.&. 6460: 23 02 00 00 00 00 b0 ef 00 00 00 00 00 b0 f5 03 #............... 6470: 00 00 00 00 b0 ef 03 00 00 00 00 b0 ef 10 03 00 ................ 6480: 00 00 b0 ef 8c 48 50 54 46 0a 0f 50 44 4d 41 8c .....HPTF..PDMA. 6490: 48 50 54 46 0a 16 50 50 49 4f a0 1c 44 49 50 31 HPTF..PPIO..DIP1 64a0: 70 42 44 4d 31 50 44 4d 41 70 42 50 49 31 50 50 pBDM1PDMApBPI1PP 64b0: 49 4f a4 48 50 54 46 70 42 44 4d 31 48 44 4d 41 IO.HPTFpBDM1HDMA 64c0: 70 42 50 49 31 48 50 49 4f a4 48 44 54 46 5b 82 pBPI1HPIO.HDTF[. 64d0: 42 34 53 45 43 44 08 5f 41 44 52 01 08 42 50 49 B4SECD._ADR..BPI 64e0: 30 00 08 42 44 4d 30 00 08 42 50 49 31 00 08 42 0..BDM0..BPI1..B 64f0: 44 4d 31 00 08 44 49 50 30 00 08 44 49 50 31 00 DM1..DIP0..DIP1. 6500: 14 41 0a 5f 47 54 4d 00 08 53 42 55 46 11 17 0a .A._GTM..SBUF... 6510: 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 6520: 00 00 00 00 00 08 47 54 4d 45 00 8a 53 42 55 46 ......GTME..SBUF 6530: 00 47 54 50 30 8a 53 42 55 46 0a 04 47 54 44 30 .GTP0.SBUF..GTD0 6540: 8a 53 42 55 46 0a 08 47 54 50 31 8a 53 42 55 46 .SBUF..GTP1.SBUF 6550: 0a 0c 47 54 44 31 8a 53 42 55 46 0a 10 47 54 4d ..GTD1.SBUF..GTM 6560: 46 a0 35 92 47 54 4d 45 7d 47 54 4d 46 01 47 54 F.5.GTME}GTMF.GT 6570: 4d 46 70 0a 78 47 54 50 30 70 0a 14 47 54 44 30 MFp.xGTP0p..GTD0 6580: 70 00 47 54 50 31 70 00 47 54 44 31 7d 47 54 4d p.GTP1p.GTD1}GTM 6590: 46 0a 10 47 54 4d 46 70 01 47 54 4d 45 a4 53 42 F..GTMFp.GTME.SB 65a0: 55 46 14 41 0e 5f 53 54 4d 03 8a 68 00 53 54 50 UF.A._STM..h.STP 65b0: 30 8a 68 0a 04 53 54 44 30 8a 68 0a 08 53 54 50 0.h..STD0.h..STP 65c0: 31 8a 68 0a 0c 53 54 44 31 8a 68 0a 10 53 54 4d 1.h..STD1.h..STM 65d0: 46 a0 48 05 93 87 69 0b 00 02 70 44 50 49 4f 53 F.H...i...pDPIOS 65e0: 54 50 30 7b 53 54 4d 46 0a 02 00 60 70 44 55 44 TP0{STMF...`pDUD 65f0: 4d 53 54 44 30 7b 53 54 4d 46 01 00 61 8b 69 0a MSTD0{STMF..a.i. 6600: 9c 4d 30 37 38 a0 0f 7b 4d 30 37 38 0a 08 00 70 .M078..{M078...p 6610: 01 44 49 50 30 70 46 44 4d 41 60 61 42 44 4d 30 .DIP0pFDMA`aBDM0 6620: 70 46 50 49 4f 60 42 50 49 30 a0 49 05 93 87 6a pFPIO`BPI0.I...j 6630: 0b 00 02 70 44 50 49 4f 53 54 50 31 7b 53 54 4d ...pDPIOSTP1{STM 6640: 46 0a 08 00 60 70 44 55 44 4d 53 54 44 31 7b 53 F...`pDUDMSTD1{S 6650: 54 4d 46 0a 04 00 61 8b 6a 0a 9c 53 30 37 38 a0 TMF...a.j..S078. 6660: 0f 7b 53 30 37 38 0a 08 00 70 01 44 49 50 31 70 .{S078...p.DIP1p 6670: 46 44 4d 41 60 61 42 44 4d 31 70 46 50 49 4f 60 FDMA`aBDM1pFPIO` 6680: 42 50 49 31 5b 82 45 0c 53 5f 44 30 08 5f 41 44 BPI1[.E.S_D0._AD 6690: 52 00 14 48 0b 5f 47 54 46 00 08 48 44 54 46 11 R..H._GTF..HDTF. 66a0: 1f 0a 1c 02 00 00 00 00 a0 ef 00 00 00 00 00 a0 ................ 66b0: f5 03 00 00 00 00 a0 ef 03 00 00 00 00 a0 ef 8c ................ 66c0: 48 44 54 46 0a 0f 48 44 4d 41 8c 48 44 54 46 0a HDTF..HDMA.HDTF. 66d0: 16 48 50 49 4f 08 48 50 54 46 11 26 0a 23 02 00 .HPIO.HPTF.&.#.. 66e0: 00 00 00 a0 ef 00 00 00 00 00 a0 f5 03 00 00 00 ................ 66f0: 00 a0 ef 03 00 00 00 00 a0 ef 10 03 00 00 00 a0 ................ 6700: ef 8c 48 50 54 46 0a 0f 50 44 4d 41 8c 48 50 54 ..HPTF..PDMA.HPT 6710: 46 0a 16 50 50 49 4f a0 1c 44 49 50 30 70 42 44 F..PPIO..DIP0pBD 6720: 4d 30 50 44 4d 41 70 42 50 49 30 50 50 49 4f a4 M0PDMApBPI0PPIO. 6730: 48 50 54 46 70 42 44 4d 30 48 44 4d 41 70 42 50 HPTFpBDM0HDMApBP 6740: 49 30 48 50 49 4f a4 48 44 54 46 5b 82 45 0c 53 I0HPIO.HDTF[.E.S 6750: 5f 44 31 08 5f 41 44 52 01 14 48 0b 5f 47 54 46 _D1._ADR..H._GTF 6760: 00 08 48 44 54 46 11 1f 0a 1c 02 00 00 00 00 b0 ..HDTF.......... 6770: ef 00 00 00 00 00 b0 f5 03 00 00 00 00 b0 ef 03 ................ 6780: 00 00 00 00 b0 ef 8c 48 44 54 46 0a 0f 48 44 4d .......HDTF..HDM 6790: 41 8c 48 44 54 46 0a 16 48 50 49 4f 08 48 50 54 A.HDTF..HPIO.HPT 67a0: 46 11 26 0a 23 02 00 00 00 00 b0 ef 00 00 00 00 F.&.#........... 67b0: 00 b0 f5 03 00 00 00 00 b0 ef 03 00 00 00 00 b0 ................ 67c0: ef 10 03 00 00 00 b0 ef 8c 48 50 54 46 0a 0f 50 .........HPTF..P 67d0: 44 4d 41 8c 48 50 54 46 0a 16 50 50 49 4f a0 1c DMA.HPTF..PPIO.. 67e0: 44 49 50 31 70 42 44 4d 31 50 44 4d 41 70 42 50 DIP1pBDM1PDMApBP 67f0: 49 31 50 50 49 4f a4 48 50 54 46 70 42 44 4d 31 I1PPIO.HPTFpBDM1 6800: 48 44 4d 41 70 42 50 49 31 48 50 49 4f a4 48 44 HDMApBPI1HPIO.HD 6810: 54 46 5b 82 42 0b 53 41 54 31 08 5f 41 44 52 0c TF[.B.SAT1._ADR. 6820: 05 00 1f 00 5b 80 53 41 43 53 02 0a 40 0a c0 5b ....[.SACS..@..[ 6830: 81 4f 06 53 41 43 53 03 50 52 49 54 10 53 45 43 .O.SACS.PRIT.SEC 6840: 54 10 50 53 49 54 04 53 53 49 54 04 00 18 53 59 T.PSIT.SSIT...SY 6850: 4e 43 04 00 0c 53 44 54 30 02 00 02 53 44 54 31 NC...SDT0...SDT1 6860: 02 00 02 53 44 54 32 02 00 02 53 44 54 33 02 00 ...SDT2...SDT3.. 6870: 42 04 49 43 52 30 04 49 43 52 31 04 49 43 52 32 B.ICR0.ICR1.ICR2 6880: 04 49 43 52 33 04 49 43 52 34 04 49 43 52 35 04 .ICR3.ICR4.ICR5. 6890: 00 48 0e 48 44 50 53 02 00 4e 0d 4d 41 50 56 02 .H.HDPS..N.MAPV. 68a0: 08 5f 50 53 43 00 14 0c 5f 50 53 30 00 70 00 5f ._PSC..._PS0.p._ 68b0: 50 53 43 14 12 5f 50 53 33 00 70 00 48 44 50 53 PSC.._PS3.p.HDPS 68c0: 70 00 5f 50 53 43 5b 82 44 47 53 42 55 53 08 5f p._PSC[.DGSBUS._ 68d0: 41 44 52 0c 03 00 1f 00 5b 80 53 4d 42 50 02 0a ADR.....[.SMBP.. 68e0: 40 0a c0 5b 81 0d 53 4d 42 50 03 00 02 49 32 43 @..[..SMBP...I2C 68f0: 45 01 5b 80 53 4d 50 42 02 0a 20 0a 04 5b 81 0d E.[.SMPB.. ..[.. 6900: 53 4d 50 42 03 00 05 53 42 41 52 0b 5b 80 53 4d SMPB...SBAR.[.SM 6910: 42 49 01 79 53 42 41 52 0a 05 00 0a 10 5b 81 3a BI.ySBAR.....[.: 6920: 53 4d 42 49 01 48 53 54 53 08 00 08 48 43 4f 4e SMBI.HSTS...HCON 6930: 08 48 43 4f 4d 08 54 58 53 41 08 44 41 54 30 08 .HCOM.TXSA.DAT0. 6940: 44 41 54 31 08 48 42 44 52 08 50 45 43 52 08 52 DAT1.HBDR.PECR.R 6950: 58 53 41 08 53 44 41 54 10 14 44 04 53 53 58 42 XSA.SDAT..D.SSXB 6960: 0a a0 07 53 54 52 54 a4 00 70 00 49 32 43 45 70 ...STRT..p.I2CEp 6970: 0a bf 48 53 54 53 70 68 54 58 53 41 70 69 48 43 ..HSTSphTXSApiHC 6980: 4f 4d 70 0a 48 48 43 4f 4e a0 12 43 4f 4d 50 7d OMp.HHCON..COMP} 6990: 48 53 54 53 0a ff 48 53 54 53 a4 01 a4 00 14 48 HSTS..HSTS.....H 69a0: 04 53 52 58 42 09 a0 09 53 54 52 54 a4 0b ff ff .SRXB...STRT.... 69b0: 70 00 49 32 43 45 70 0a bf 48 53 54 53 70 7d 68 p.I2CEp..HSTSp}h 69c0: 01 00 54 58 53 41 70 0a 44 48 43 4f 4e a0 15 43 ..TXSAp.DHCON..C 69d0: 4f 4d 50 7d 48 53 54 53 0a ff 48 53 54 53 a4 44 OMP}HSTS..HSTS.D 69e0: 41 54 30 a4 0b ff ff 14 4a 04 53 57 52 42 0b a0 AT0.....J.SWRB.. 69f0: 07 53 54 52 54 a4 00 70 00 49 32 43 45 70 0a bf .STRT..p.I2CEp.. 6a00: 48 53 54 53 70 68 54 58 53 41 70 69 48 43 4f 4d HSTSphTXSApiHCOM 6a10: 70 6a 44 41 54 30 70 0a 48 48 43 4f 4e a0 12 43 pjDAT0p.HHCON..C 6a20: 4f 4d 50 7d 48 53 54 53 0a ff 48 53 54 53 a4 01 OMP}HSTS..HSTS.. 6a30: a4 00 14 4e 04 53 52 44 42 0a a0 09 53 54 52 54 ...N.SRDB...STRT 6a40: a4 0b ff ff 70 00 49 32 43 45 70 0a bf 48 53 54 ....p.I2CEp..HST 6a50: 53 70 7d 68 01 00 54 58 53 41 70 69 48 43 4f 4d Sp}h..TXSApiHCOM 6a60: 70 0a 48 48 43 4f 4e a0 15 43 4f 4d 50 7d 48 53 p.HHCON..COMP}HS 6a70: 54 53 0a ff 48 53 54 53 a4 44 41 54 30 a4 0b ff TS..HSTS.DAT0... 6a80: ff 14 48 05 53 57 52 57 0b a0 07 53 54 52 54 a4 ..H.SWRW...STRT. 6a90: 00 70 00 49 32 43 45 70 0a bf 48 53 54 53 70 68 .p.I2CEp..HSTSph 6aa0: 54 58 53 41 70 69 48 43 4f 4d 7b 6a 0a ff 44 41 TXSApiHCOM{j..DA 6ab0: 54 31 7b 7a 6a 0a 08 00 0a ff 44 41 54 30 70 0a T1{zj.....DAT0p. 6ac0: 4c 48 43 4f 4e a0 12 43 4f 4d 50 7d 48 53 54 53 LHCON..COMP}HSTS 6ad0: 0a ff 48 53 54 53 a4 01 a4 00 14 4a 05 53 52 44 ..HSTS.....J.SRD 6ae0: 57 0a a0 09 53 54 52 54 a4 0b ff ff 70 00 49 32 W...STRT....p.I2 6af0: 43 45 70 0a bf 48 53 54 53 70 7d 68 01 00 54 58 CEp..HSTSp}h..TX 6b00: 53 41 70 69 48 43 4f 4d 70 0a 4c 48 43 4f 4e a0 SApiHCOMp.LHCON. 6b10: 1f 43 4f 4d 50 7d 48 53 54 53 0a ff 48 53 54 53 .COMP}HSTS..HSTS 6b20: a4 7d 79 44 41 54 30 0a 08 00 44 41 54 31 00 a4 .}yDAT0...DAT1.. 6b30: 0c ff ff ff ff 14 4a 09 53 42 4c 57 0c a0 07 53 ......J.SBLW...S 6b40: 54 52 54 a4 00 70 6b 49 32 43 45 70 0a bf 48 53 TRT..pkI2CEp..HS 6b50: 54 53 70 68 54 58 53 41 70 69 48 43 4f 4d 70 87 TSphTXSApiHCOMp. 6b60: 6a 44 41 54 30 70 00 61 70 83 88 6a 00 00 48 42 jDAT0p.ap..j..HB 6b70: 44 52 70 0a 54 48 43 4f 4e a2 41 04 94 87 6a 61 DRp.THCON.A...ja 6b80: 70 0b a0 0f 60 a2 12 90 92 7b 48 53 54 53 0a 80 p...`....{HSTS.. 6b90: 00 60 76 60 5b 21 0a 32 a0 09 92 60 4b 49 4c 4c .`v`[!.2...`KILL 6ba0: a4 00 70 0a 80 48 53 54 53 75 61 a0 0f 94 87 6a ..p..HSTSua....j 6bb0: 61 70 83 88 6a 61 00 48 42 44 52 a0 12 43 4f 4d ap..ja.HBDR..COM 6bc0: 50 7d 48 53 54 53 0a ff 48 53 54 53 a4 01 a4 00 P}HSTS..HSTS.... 6bd0: 14 40 0d 53 42 4c 52 0b 08 54 42 55 46 11 04 0b .@.SBLR..TBUF... 6be0: 00 01 a0 07 53 54 52 54 a4 00 70 6a 49 32 43 45 ....STRT..pjI2CE 6bf0: 70 0a bf 48 53 54 53 70 7d 68 01 00 54 58 53 41 p..HSTSp}h..TXSA 6c00: 70 69 48 43 4f 4d 70 0a 54 48 43 4f 4e 70 0b a0 piHCOMp.THCONp.. 6c10: 0f 60 a2 12 90 92 7b 48 53 54 53 0a 80 00 60 76 .`....{HSTS...`v 6c20: 60 5b 21 0a 32 a0 09 92 60 4b 49 4c 4c a4 00 70 `[!.2...`KILL..p 6c30: 44 41 54 30 88 54 42 55 46 00 00 70 0a 80 48 53 DAT0.TBUF..p..HS 6c40: 54 53 70 01 61 a2 43 04 95 61 83 88 54 42 55 46 TSp.a.C..a..TBUF 6c50: 00 00 70 0b a0 0f 60 a2 12 90 92 7b 48 53 54 53 ..p...`....{HSTS 6c60: 0a 80 00 60 76 60 5b 21 0a 32 a0 09 92 60 4b 49 ...`v`[!.2...`KI 6c70: 4c 4c a4 00 70 48 42 44 52 88 54 42 55 46 61 00 LL..pHBDR.TBUFa. 6c80: 70 0a 80 48 53 54 53 75 61 a0 15 43 4f 4d 50 7d p..HSTSua..COMP} 6c90: 48 53 54 53 0a ff 48 53 54 53 a4 54 42 55 46 a4 HSTS..HSTS.TBUF. 6ca0: 00 14 4f 04 53 54 52 54 08 70 0a c8 60 a2 1d 60 ..O.STRT.p..`..` 6cb0: a0 15 7b 48 53 54 53 0a 40 00 76 60 5b 22 01 a0 ..{HSTS.@.v`[".. 6cc0: 06 93 60 00 a4 01 a1 04 70 00 60 70 0b a0 0f 60 ..`.....p.`p...` 6cd0: a2 1e 60 a0 17 7b 48 53 54 53 01 00 76 60 5b 21 ..`..{HSTS..v`[! 6ce0: 0a 32 a0 08 93 60 00 4b 49 4c 4c a1 03 a4 00 a4 .2...`.KILL..... 6cf0: 01 14 2d 43 4f 4d 50 08 70 0b a0 0f 60 a2 1f 60 ..-COMP.p...`..` 6d00: a0 0b 7b 48 53 54 53 0a 02 00 a4 01 a1 10 76 60 ..{HSTS.......v` 6d10: 5b 21 0a 32 a0 08 93 60 00 4b 49 4c 4c a4 00 14 [!.2...`.KILL... 6d20: 1c 4b 49 4c 4c 08 7d 48 43 4f 4e 0a 02 48 43 4f .KILL.}HCON..HCO 6d30: 4e 7d 48 53 54 53 0a ff 48 53 54 53 10 8b 83 01 N}HSTS..HSTS.... 6d40: 2e 5f 53 42 5f 50 43 49 30 5b 82 44 05 50 45 47 ._SB_PCI0[.D.PEG 6d50: 30 08 5f 41 44 52 0c 00 00 01 00 14 0f 5f 50 52 0._ADR......._PR 6d60: 57 00 a4 47 50 52 57 0a 09 0a 04 14 16 5f 50 52 W..GPRW......_PR 6d70: 54 00 a0 0a 50 49 43 4d a4 41 52 30 32 a4 50 52 T...PICM.AR02.PR 6d80: 30 32 5b 82 1b 50 45 47 50 08 5f 41 44 52 00 14 02[..PEGP._ADR.. 6d90: 0f 5f 50 52 57 00 a4 47 50 52 57 0a 09 0a 04 5b ._PRW..GPRW....[ 6da0: 82 36 50 45 47 31 08 5f 41 44 52 0c 01 00 01 00 .6PEG1._ADR..... 6db0: 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 09 0a 04 .._PRW..GPRW.... 6dc0: 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 41 52 .._PRT...PICM.AR 6dd0: 30 41 a4 50 52 30 41 5b 82 36 50 45 47 32 08 5f 0A.PR0A[.6PEG2._ 6de0: 41 44 52 0c 02 00 01 00 14 0f 5f 50 52 57 00 a4 ADR......._PRW.. 6df0: 47 50 52 57 0a 09 0a 04 14 16 5f 50 52 54 00 a0 GPRW......_PRT.. 6e00: 0a 50 49 43 4d a4 41 52 30 42 a4 50 52 30 42 5b .PICM.AR0B.PR0B[ 6e10: 82 36 50 45 47 33 08 5f 41 44 52 0c 00 00 06 00 .6PEG3._ADR..... 6e20: 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 09 0a 04 .._PRW..GPRW.... 6e30: 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 41 52 .._PRT...PICM.AR 6e40: 30 43 a4 50 52 30 43 5b 82 0f 42 30 44 34 08 5f 0C.PR0C[..B0D4._ 6e50: 41 44 52 0c 00 00 04 00 5b 82 8e 71 01 47 46 58 ADR.....[..q.GFX 6e60: 30 08 5f 41 44 52 0c 00 00 02 00 14 26 5f 44 4f 0._ADR......&_DO 6e70: 53 01 70 7b 68 0a 07 00 44 53 45 4e a0 15 93 7b S.p{h...DSEN...{ 6e80: 68 0a 03 00 00 a0 0c 5b 12 48 44 4f 53 00 48 44 h......[.HDOS.HD 6e90: 4f 53 14 46 51 5f 44 4f 44 00 a0 0c 5b 12 49 44 OS.FQ_DOD...[.ID 6ea0: 41 42 00 49 44 41 42 a1 48 0b 70 00 4e 44 49 44 AB.IDAB.H.p.NDID 6eb0: a0 15 92 93 44 49 44 4c 00 70 53 44 44 4c 44 49 ....DIDL.pSDDLDI 6ec0: 44 4c 44 49 44 31 a0 15 92 93 44 44 4c 32 00 70 DLDID1....DDL2.p 6ed0: 53 44 44 4c 44 44 4c 32 44 49 44 32 a0 15 92 93 SDDLDDL2DID2.... 6ee0: 44 44 4c 33 00 70 53 44 44 4c 44 44 4c 33 44 49 DDL3.pSDDLDDL3DI 6ef0: 44 33 a0 15 92 93 44 44 4c 34 00 70 53 44 44 4c D3....DDL4.pSDDL 6f00: 44 44 4c 34 44 49 44 34 a0 15 92 93 44 44 4c 35 DDL4DID4....DDL5 6f10: 00 70 53 44 44 4c 44 44 4c 35 44 49 44 35 a0 15 .pSDDLDDL5DID5.. 6f20: 92 93 44 44 4c 36 00 70 53 44 44 4c 44 44 4c 36 ..DDL6.pSDDLDDL6 6f30: 44 49 44 36 a0 15 92 93 44 44 4c 37 00 70 53 44 DID6....DDL7.pSD 6f40: 44 4c 44 44 4c 37 44 49 44 37 a0 15 92 93 44 44 DLDDL7DID7....DD 6f50: 4c 38 00 70 53 44 44 4c 44 44 4c 38 44 49 44 38 L8.pSDDLDDL8DID8 6f60: a0 2c 93 4e 44 49 44 01 08 54 4d 50 31 12 07 01 .,.NDID..TMP1... 6f70: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 6f80: 00 88 54 4d 50 31 00 00 a4 54 4d 50 31 a0 46 04 ..TMP1...TMP1.F. 6f90: 93 4e 44 49 44 0a 02 08 54 4d 50 32 12 0c 02 0c .NDID...TMP2.... 6fa0: ff ff ff ff 0c ff ff ff ff 70 7d 0c 00 00 01 00 .........p}..... 6fb0: 44 49 44 31 00 88 54 4d 50 32 00 00 70 7d 0c 00 DID1..TMP2..p}.. 6fc0: 00 01 00 44 49 44 32 00 88 54 4d 50 32 01 00 a4 ...DID2..TMP2... 6fd0: 54 4d 50 32 a0 4f 05 93 4e 44 49 44 0a 03 08 54 TMP2.O..NDID...T 6fe0: 4d 50 33 12 11 03 0c ff ff ff ff 0c ff ff ff ff MP3............. 6ff0: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 7000: 00 88 54 4d 50 33 00 00 70 7d 0c 00 00 01 00 44 ..TMP3..p}.....D 7010: 49 44 32 00 88 54 4d 50 33 01 00 70 7d 0c 00 00 ID2..TMP3..p}... 7020: 01 00 44 49 44 33 00 88 54 4d 50 33 0a 02 00 a4 ..DID3..TMP3.... 7030: 54 4d 50 33 a0 48 07 93 4e 44 49 44 0a 04 08 54 TMP3.H..NDID...T 7040: 4d 50 34 12 16 04 0c ff ff ff ff 0c ff ff ff ff MP4............. 7050: 0c ff ff ff ff 0c ff ff ff ff 70 7d 0c 00 00 01 ..........p}.... 7060: 00 44 49 44 31 00 88 54 4d 50 34 00 00 70 7d 0c .DID1..TMP4..p}. 7070: 00 00 01 00 44 49 44 32 00 88 54 4d 50 34 01 00 ....DID2..TMP4.. 7080: 70 7d 0c 00 00 01 00 44 49 44 33 00 88 54 4d 50 p}.....DID3..TMP 7090: 34 0a 02 00 70 7d 0c 00 00 01 00 44 49 44 34 00 4...p}.....DID4. 70a0: 88 54 4d 50 34 0a 03 00 a4 54 4d 50 34 a0 41 09 .TMP4....TMP4.A. 70b0: 93 4e 44 49 44 0a 05 08 54 4d 50 35 12 1b 05 0c .NDID...TMP5.... 70c0: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 70d0: ff ff ff 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 ........p}.....D 70e0: 49 44 31 00 88 54 4d 50 35 00 00 70 7d 0c 00 00 ID1..TMP5..p}... 70f0: 01 00 44 49 44 32 00 88 54 4d 50 35 01 00 70 7d ..DID2..TMP5..p} 7100: 0c 00 00 01 00 44 49 44 33 00 88 54 4d 50 35 0a .....DID3..TMP5. 7110: 02 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 ..p}.....DID4..T 7120: 4d 50 35 0a 03 00 70 7d 0c 00 00 01 00 44 49 44 MP5...p}.....DID 7130: 35 00 88 54 4d 50 35 0a 04 00 a4 54 4d 50 35 a0 5..TMP5....TMP5. 7140: 4a 0a 93 4e 44 49 44 0a 06 08 54 4d 50 36 12 20 J..NDID...TMP6. 7150: 06 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 7160: 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 70 ...............p 7170: 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 36 }.....DID1..TMP6 7180: 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 54 ..p}.....DID2..T 7190: 4d 50 36 01 00 70 7d 0c 00 00 01 00 44 49 44 33 MP6..p}.....DID3 71a0: 00 88 54 4d 50 36 0a 02 00 70 7d 0c 00 00 01 00 ..TMP6...p}..... 71b0: 44 49 44 34 00 88 54 4d 50 36 0a 03 00 70 7d 0c DID4..TMP6...p}. 71c0: 00 00 01 00 44 49 44 35 00 88 54 4d 50 36 0a 04 ....DID5..TMP6.. 71d0: 00 70 7d 0c 00 00 01 00 44 49 44 36 00 88 54 4d .p}.....DID6..TM 71e0: 50 36 0a 05 00 a4 54 4d 50 36 a0 43 0c 93 4e 44 P6....TMP6.C..ND 71f0: 49 44 0a 07 08 54 4d 50 37 12 25 07 0c ff ff ff ID...TMP7.%..... 7200: ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 7210: 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 70 ...............p 7220: 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 37 }.....DID1..TMP7 7230: 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 54 ..p}.....DID2..T 7240: 4d 50 37 01 00 70 7d 0c 00 00 01 00 44 49 44 33 MP7..p}.....DID3 7250: 00 88 54 4d 50 37 0a 02 00 70 7d 0c 00 00 01 00 ..TMP7...p}..... 7260: 44 49 44 34 00 88 54 4d 50 37 0a 03 00 70 7d 0c DID4..TMP7...p}. 7270: 00 00 01 00 44 49 44 35 00 88 54 4d 50 37 0a 04 ....DID5..TMP7.. 7280: 00 70 7d 0c 00 00 01 00 44 49 44 36 00 88 54 4d .p}.....DID6..TM 7290: 50 37 0a 05 00 70 7d 0c 00 00 01 00 44 49 44 37 P7...p}.....DID7 72a0: 00 88 54 4d 50 37 0a 06 00 a4 54 4d 50 37 a0 4c ..TMP7....TMP7.L 72b0: 0d 93 4e 44 49 44 0a 08 08 54 4d 50 38 12 2a 08 ..NDID...TMP8.*. 72c0: 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ................ 72d0: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 72e0: ff ff ff 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 ........p}.....D 72f0: 49 44 31 00 88 54 4d 50 38 00 00 70 7d 0c 00 00 ID1..TMP8..p}... 7300: 01 00 44 49 44 32 00 88 54 4d 50 38 01 00 70 7d ..DID2..TMP8..p} 7310: 0c 00 00 01 00 44 49 44 33 00 88 54 4d 50 38 0a .....DID3..TMP8. 7320: 02 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 ..p}.....DID4..T 7330: 4d 50 38 0a 03 00 70 7d 0c 00 00 01 00 44 49 44 MP8...p}.....DID 7340: 35 00 88 54 4d 50 38 0a 04 00 70 7d 0c 00 00 01 5..TMP8...p}.... 7350: 00 44 49 44 36 00 88 54 4d 50 38 0a 05 00 70 7d .DID6..TMP8...p} 7360: 0c 00 00 01 00 44 49 44 37 00 88 54 4d 50 38 0a .....DID7..TMP8. 7370: 06 00 70 7d 0c 00 00 01 00 44 49 44 38 00 88 54 ..p}.....DID8..T 7380: 4d 50 38 0a 07 00 a4 54 4d 50 38 a0 16 93 4e 44 MP8....TMP8...ND 7390: 49 44 0a 09 a0 0d 5b 12 48 57 49 44 00 a4 48 57 ID....[.HWID..HW 73a0: 49 44 a4 12 05 01 0b 00 04 5b 82 4c 07 44 44 30 ID.......[.L.DD0 73b0: 31 14 1c 5f 41 44 52 08 a0 09 93 44 49 44 31 00 1.._ADR....DID1. 73c0: a4 01 a1 0b a4 7b 0b ff ff 44 49 44 31 00 14 0f .....{...DID1... 73d0: 5f 44 43 53 00 a4 43 44 44 53 44 49 44 31 14 28 _DCS..CDDSDID1.( 73e0: 5f 44 47 53 00 a0 18 90 93 7b 53 47 4d 44 0a 7f _DGS.....{SGMD.. 73f0: 00 01 5b 12 53 4e 58 44 00 a4 4e 58 44 31 a4 4e ..[.SNXD..NXD1.N 7400: 44 44 53 44 49 44 31 14 1f 5f 44 53 53 01 a0 18 DDSDID1.._DSS... 7410: 93 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e .{h...........pN 7420: 53 54 45 43 53 54 45 5b 82 44 1f 44 44 30 32 14 STECSTE[.D.DD02. 7430: 1d 5f 41 44 52 08 a0 0a 93 44 49 44 32 00 a4 0a ._ADR....DID2... 7440: 02 a1 0b a4 7b 0b ff ff 44 49 44 32 00 14 19 5f ....{...DID2..._ 7450: 44 43 53 00 a0 09 93 4c 49 44 53 00 a4 00 a4 43 DCS....LIDS....C 7460: 44 44 53 44 49 44 32 14 28 5f 44 47 53 00 a0 18 DDSDID2.(_DGS... 7470: 90 93 7b 53 47 4d 44 0a 7f 00 01 5b 12 53 4e 58 ..{SGMD....[.SNX 7480: 44 00 a4 4e 58 44 32 a4 4e 44 44 53 44 49 44 32 D..NXD2.NDDSDID2 7490: 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 .._DSS....{h.... 74a0: c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 .......pNSTECSTE 74b0: 14 4b 10 5f 42 43 4c 00 a0 4b 0d 93 4f 53 59 53 .K._BCL..K..OSYS 74c0: 0b dc 07 a4 12 4f 0c 67 0a 64 0a 64 00 01 0a 02 .....O.g.d.d.... 74d0: 0a 03 0a 04 0a 05 0a 06 0a 07 0a 08 0a 09 0a 0a ................ 74e0: 0a 0b 0a 0c 0a 0d 0a 0e 0a 0f 0a 10 0a 11 0a 12 ................ 74f0: 0a 13 0a 14 0a 15 0a 16 0a 17 0a 18 0a 19 0a 1a ................ 7500: 0a 1b 0a 1c 0a 1d 0a 1e 0a 1f 0a 20 0a 21 0a 22 ........... .!." 7510: 0a 23 0a 24 0a 25 0a 26 0a 27 0a 28 0a 29 0a 2a .#.$.%.&.'.(.).* 7520: 0a 2b 0a 2c 0a 2d 0a 2e 0a 2f 0a 30 0a 31 0a 32 .+.,.-.../.0.1.2 7530: 0a 33 0a 34 0a 35 0a 36 0a 37 0a 38 0a 39 0a 3a .3.4.5.6.7.8.9.: 7540: 0a 3b 0a 3c 0a 3d 0a 3e 0a 3f 0a 40 0a 41 0a 42 .;.<.=.>.?.@.A.B 7550: 0a 43 0a 44 0a 45 0a 46 0a 47 0a 48 0a 49 0a 4a .C.D.E.F.G.H.I.J 7560: 0a 4b 0a 4c 0a 4d 0a 4e 0a 4f 0a 50 0a 51 0a 52 .K.L.M.N.O.P.Q.R 7570: 0a 53 0a 54 0a 55 0a 56 0a 57 0a 58 0a 59 0a 5a .S.T.U.V.W.X.Y.Z 7580: 0a 5b 0a 5c 0a 5d 0a 5e 0a 5f 0a 60 0a 61 0a 62 .[.\.].^._.`.a.b 7590: 0a 63 0a 64 a4 12 26 12 0a 64 0a 23 0a 05 0a 0a .c.d..&..d.#.... 75a0: 0a 14 0a 19 0a 1e 0a 23 0a 28 0a 2d 0a 32 0a 37 .......#.(.-.2.7 75b0: 0a 3c 0a 41 0a 46 0a 50 0a 5a 0a 64 14 34 5f 42 .<.A.F.P.Z.d.4_B 75c0: 43 4d 01 a0 2d 90 92 95 68 00 92 94 68 0a 64 49 CM..-...h...h.dI 75d0: 42 43 4d 68 55 43 4d 53 0a 14 5e 5e 5e 2f 03 4c BCMhUCMS..^^^/.L 75e0: 50 43 42 45 43 5f 5f 42 4c 43 4c 70 68 42 52 54 PCBEC__BLCLphBRT 75f0: 4c 14 0b 5f 42 51 43 00 a4 42 52 54 4c 14 1f 5f L.._BQC..BRTL.._ 7600: 44 44 43 01 a0 09 93 68 01 a4 56 45 44 49 a1 0c DDC....h..VEDI.. 7610: a0 0a 93 68 0a 02 a4 56 45 44 49 a4 00 5b 82 4a ...h...VEDI..[.J 7620: 08 44 44 30 33 14 1d 5f 41 44 52 08 a0 0a 93 44 .DD03.._ADR....D 7630: 49 44 33 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 49 ID3.......{...DI 7640: 44 33 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 D3..._DCS....DID 7650: 33 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 33 3.......CDDSDID3 7660: 14 28 5f 44 47 53 00 a0 18 90 93 7b 53 47 4d 44 .(_DGS.....{SGMD 7670: 0a 7f 00 01 5b 12 53 4e 58 44 00 a4 4e 58 44 33 ....[.SNXD..NXD3 7680: a4 4e 44 44 53 44 49 44 33 14 1f 5f 44 53 53 01 .NDDSDID3.._DSS. 7690: a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 ...{h........... 76a0: 70 4e 53 54 45 43 53 54 45 5b 82 4a 08 44 44 30 pNSTECSTE[.J.DD0 76b0: 34 14 1d 5f 41 44 52 08 a0 0a 93 44 49 44 34 00 4.._ADR....DID4. 76c0: a4 0a 04 a1 0b a4 7b 0b ff ff 44 49 44 34 00 14 ......{...DID4.. 76d0: 1c 5f 44 43 53 00 a0 0a 93 44 49 44 34 00 a4 0a ._DCS....DID4... 76e0: 0b a1 0a a4 43 44 44 53 44 49 44 34 14 28 5f 44 ....CDDSDID4.(_D 76f0: 47 53 00 a0 18 90 93 7b 53 47 4d 44 0a 7f 00 01 GS.....{SGMD.... 7700: 5b 12 53 4e 58 44 00 a4 4e 58 44 34 a4 4e 44 44 [.SNXD..NXD4.NDD 7710: 53 44 49 44 34 14 1f 5f 44 53 53 01 a0 18 93 7b SDID4.._DSS....{ 7720: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 7730: 45 43 53 54 45 5b 82 4a 08 44 44 30 35 14 1d 5f ECSTE[.J.DD05.._ 7740: 41 44 52 08 a0 0a 93 44 49 44 35 00 a4 0a 05 a1 ADR....DID5..... 7750: 0b a4 7b 0b ff ff 44 49 44 35 00 14 1c 5f 44 43 ..{...DID5..._DC 7760: 53 00 a0 0a 93 44 49 44 35 00 a4 0a 0b a1 0a a4 S....DID5....... 7770: 43 44 44 53 44 49 44 35 14 28 5f 44 47 53 00 a0 CDDSDID5.(_DGS.. 7780: 18 90 93 7b 53 47 4d 44 0a 7f 00 01 5b 12 53 4e ...{SGMD....[.SN 7790: 58 44 00 a4 4e 58 44 35 a4 4e 44 44 53 44 49 44 XD..NXD5.NDDSDID 77a0: 35 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 5.._DSS....{h... 77b0: 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 ........pNSTECST 77c0: 45 5b 82 4a 08 44 44 30 36 14 1d 5f 41 44 52 08 E[.J.DD06.._ADR. 77d0: a0 0a 93 44 49 44 36 00 a4 0a 06 a1 0b a4 7b 0b ...DID6.......{. 77e0: ff ff 44 49 44 36 00 14 1c 5f 44 43 53 00 a0 0a ..DID6..._DCS... 77f0: 93 44 49 44 36 00 a4 0a 0b a1 0a a4 43 44 44 53 .DID6.......CDDS 7800: 44 49 44 36 14 28 5f 44 47 53 00 a0 18 90 93 7b DID6.(_DGS.....{ 7810: 53 47 4d 44 0a 7f 00 01 5b 12 53 4e 58 44 00 a4 SGMD....[.SNXD.. 7820: 4e 58 44 36 a4 4e 44 44 53 44 49 44 36 14 1f 5f NXD6.NDDSDID6.._ 7830: 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c DSS....{h....... 7840: 00 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 4a ....pNSTECSTE[.J 7850: 08 44 44 30 37 14 1d 5f 41 44 52 08 a0 0a 93 44 .DD07.._ADR....D 7860: 49 44 37 00 a4 0a 07 a1 0b a4 7b 0b ff ff 44 49 ID7.......{...DI 7870: 44 37 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 D7..._DCS....DID 7880: 37 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 37 7.......CDDSDID7 7890: 14 28 5f 44 47 53 00 a0 18 90 93 7b 53 47 4d 44 .(_DGS.....{SGMD 78a0: 0a 7f 00 01 5b 12 53 4e 58 44 00 a4 4e 58 44 37 ....[.SNXD..NXD7 78b0: a4 4e 44 44 53 44 49 44 37 14 1f 5f 44 53 53 01 .NDDSDID7.._DSS. 78c0: a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 ...{h........... 78d0: 70 4e 53 54 45 43 53 54 45 5b 82 4a 08 44 44 30 pNSTECSTE[.J.DD0 78e0: 38 14 1d 5f 41 44 52 08 a0 0a 93 44 49 44 38 00 8.._ADR....DID8. 78f0: a4 0a 08 a1 0b a4 7b 0b ff ff 44 49 44 38 00 14 ......{...DID8.. 7900: 1c 5f 44 43 53 00 a0 0a 93 44 49 44 38 00 a4 0a ._DCS....DID8... 7910: 0b a1 0a a4 43 44 44 53 44 49 44 38 14 28 5f 44 ....CDDSDID8.(_D 7920: 47 53 00 a0 18 90 93 7b 53 47 4d 44 0a 7f 00 01 GS.....{SGMD.... 7930: 5b 12 53 4e 58 44 00 a4 4e 58 44 38 a4 4e 44 44 [.SNXD..NXD8.NDD 7940: 53 44 49 44 38 14 1f 5f 44 53 53 01 a0 18 93 7b SDID8.._DSS....{ 7950: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 7960: 45 43 53 54 45 14 4e 06 53 44 44 4c 01 75 4e 44 ECSTE.N.SDDL.uND 7970: 49 44 70 7b 68 0b 0f 0f 00 60 7d 0c 00 00 00 80 IDp{h....`}..... 7980: 60 61 a0 09 93 44 49 44 4c 60 a4 61 a0 09 93 44 `a...DIDL`.a...D 7990: 44 4c 32 60 a4 61 a0 09 93 44 44 4c 33 60 a4 61 DL2`.a...DDL3`.a 79a0: a0 09 93 44 44 4c 34 60 a4 61 a0 09 93 44 44 4c ...DDL4`.a...DDL 79b0: 35 60 a4 61 a0 09 93 44 44 4c 36 60 a4 61 a0 09 5`.a...DDL6`.a.. 79c0: 93 44 44 4c 37 60 a4 61 a0 09 93 44 44 4c 38 60 .DDL7`.a...DDL8` 79d0: a4 61 a4 00 14 42 07 43 44 44 53 01 70 7b 68 0b .a...B.CDDS.p{h. 79e0: 0f 0f 00 60 a0 07 93 00 60 a4 0a 1d a0 0a 93 43 ...`....`......C 79f0: 41 44 4c 60 a4 0a 1f a0 0a 93 43 41 4c 32 60 a4 ADL`......CAL2`. 7a00: 0a 1f a0 0a 93 43 41 4c 33 60 a4 0a 1f a0 0a 93 .....CAL3`...... 7a10: 43 41 4c 34 60 a4 0a 1f a0 0a 93 43 41 4c 35 60 CAL4`......CAL5` 7a20: a4 0a 1f a0 0a 93 43 41 4c 36 60 a4 0a 1f a0 0a ......CAL6`..... 7a30: 93 43 41 4c 37 60 a4 0a 1f a0 0a 93 43 41 4c 38 .CAL7`......CAL8 7a40: 60 a4 0a 1f a4 0a 1d 14 48 06 4e 44 44 53 01 70 `.......H.NDDS.p 7a50: 7b 68 0b 0f 0f 00 60 a0 06 93 00 60 a4 00 a0 09 {h....`....`.... 7a60: 93 4e 41 44 4c 60 a4 01 a0 09 93 4e 44 4c 32 60 .NADL`.....NDL2` 7a70: a4 01 a0 09 93 4e 44 4c 33 60 a4 01 a0 09 93 4e .....NDL3`.....N 7a80: 44 4c 34 60 a4 01 a0 09 93 4e 44 4c 35 60 a4 01 DL4`.....NDL5`.. 7a90: a0 09 93 4e 44 4c 36 60 a4 01 a0 09 93 4e 44 4c ...NDL6`.....NDL 7aa0: 37 60 a4 01 a0 09 93 4e 44 4c 38 60 a4 01 a4 00 7`.....NDL8`.... 7ab0: 10 24 5e 5e 50 43 49 30 5b 80 4d 43 48 50 02 0a .$^^PCI0[.MCHP.. 7ac0: 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 54 41 @..[..MCHP..@0TA 7ad0: 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 0a c0 SM...[.IGDP..@.. 7ae0: 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 47 49 [.E.IGDP..@...GI 7af0: 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 47 4d VD...GUMA.....GM 7b00: 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 18 47 FN....@FASLE...G 7b10: 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 00 30 SSE.GSSB.GSES..0 7b20: 00 0c 43 44 56 4c 01 00 03 00 18 4c 42 50 43 08 ..CDVL.....LBPC. 7b30: 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 41 53 .0ASLS [.IGDM.AS 7b40: 4c 42 0b 00 20 5b 81 48 19 49 47 44 4d 00 53 49 LB.. [.H.IGDM.SI 7b50: 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 53 56 GN@.SIZE OVER SV 7b60: 45 52 40 10 56 56 45 52 40 08 47 56 45 52 40 08 ER@.VVER@.GVER@. 7b70: 4d 42 4f 58 20 44 4d 4f 44 20 00 40 50 44 52 44 MBOX DMOD .@PDRD 7b80: 59 20 43 53 54 53 20 43 45 56 54 20 00 40 0a 44 Y CSTS CEVT .@.D 7b90: 49 44 4c 20 44 44 4c 32 20 44 44 4c 33 20 44 44 IDL DDL2 DDL3 DD 7ba0: 4c 34 20 44 44 4c 35 20 44 44 4c 36 20 44 44 4c L4 DDL5 DDL6 DDL 7bb0: 37 20 44 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 7 DDL8 CPDL CPL2 7bc0: 20 43 50 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 CPL3 CPL4 CPL5 7bd0: 43 50 4c 36 20 43 50 4c 37 20 43 50 4c 38 20 43 CPL6 CPL7 CPL8 C 7be0: 41 44 4c 20 43 41 4c 32 20 43 41 4c 33 20 43 41 ADL CAL2 CAL3 CA 7bf0: 4c 34 20 43 41 4c 35 20 43 41 4c 36 20 43 41 4c L4 CAL5 CAL6 CAL 7c00: 37 20 43 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 7 CAL8 NADL NDL2 7c10: 20 4e 44 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 NDL3 NDL4 NDL5 7c20: 4e 44 4c 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 NDL6 NDL7 NDL8 A 7c30: 53 4c 50 20 54 49 44 58 20 43 48 50 44 20 43 4c SLP TIDX CHPD CL 7c40: 49 44 20 43 44 43 4b 20 53 58 53 57 20 45 56 54 ID CDCK SXSW EVT 7c50: 53 20 43 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 S CNOT NRDY .@.S 7c60: 43 49 45 01 47 45 46 43 04 47 58 46 43 03 47 45 CIE.GEFC.GXFC.GE 7c70: 53 46 08 00 10 50 41 52 4d 20 44 53 4c 50 20 00 SF...PARM DSLP . 7c80: 40 7a 41 52 44 59 20 41 53 4c 43 20 54 43 48 45 @zARDY ASLC TCHE 7c90: 20 41 4c 53 49 20 42 43 4c 50 20 50 46 49 54 20 ALSI BCLP PFIT 7ca0: 43 42 4c 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 CBLV BCLM@.CPFM 7cb0: 45 50 46 4d 20 50 4c 55 54 40 25 50 46 4d 42 20 EPFM PLUT@%PFMB 7cc0: 43 43 44 56 20 50 43 46 54 20 00 40 2f 47 56 44 CCDV PCFT .@/GVD 7cd0: 31 80 00 0c 50 48 45 44 20 42 44 44 43 40 80 08 1...PHED BDDC@.. 7ce0: 44 42 54 42 12 32 15 00 0a 07 0a 38 0b c0 01 0b DBTB.2.....8.... 7cf0: 00 0e 0a 3f 0b c7 01 0b 07 0e 0b f8 01 0b 38 0e ...?..........8. 7d00: 0b c0 0f 00 00 00 00 00 0b 00 70 0b 07 70 0b 38 ..........p..p.8 7d10: 70 0b c0 71 0b 00 7e 08 43 44 43 54 12 27 05 12 p..q..~.CDCT.'.. 7d20: 07 02 0a e4 0b 40 01 12 07 02 0a de 0b 4d 01 12 .....@.......M.. 7d30: 07 02 0a de 0b 4d 01 12 04 02 00 00 12 07 02 0a .....M.......... 7d40: de 0b 4d 01 08 53 55 43 43 01 08 4e 56 4c 44 0a ..M..SUCC..NVLD. 7d50: 02 08 43 52 49 54 0a 04 08 4e 43 52 54 0a 06 14 ..CRIT...NCRT... 7d60: 40 51 47 53 43 49 08 14 44 1f 47 42 44 41 08 a0 @QGSCI..D.GBDA.. 7d70: 1a 93 47 45 53 46 00 70 0b 79 06 50 41 52 4d 70 ..GESF.p.y.PARMp 7d80: 00 47 45 53 46 a4 53 55 43 43 a0 1a 93 47 45 53 .GESF.SUCC...GES 7d90: 46 01 70 0b 40 02 50 41 52 4d 70 00 47 45 53 46 F.p.@.PARMp.GESF 7da0: a4 53 55 43 43 a0 47 04 93 47 45 53 46 0a 04 7b .SUCC.G..GESF..{ 7db0: 50 41 52 4d 0c 00 00 ff ef 50 41 52 4d 7b 50 41 PARM.....PARM{PA 7dc0: 52 4d 79 83 88 44 42 54 42 49 42 54 54 00 0a 10 RMy..DBTBIBTT... 7dd0: 00 50 41 52 4d 7d 49 42 54 54 50 41 52 4d 50 41 .PARM}IBTTPARMPA 7de0: 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 46 07 RMp.GESF.SUCC.F. 7df0: 93 47 45 53 46 0a 05 a0 14 5e 5e 5e 5e 2e 4c 49 .GESF....^^^^.LI 7e00: 44 5f 5f 4c 49 44 70 01 4c 49 44 53 a1 07 70 00 D__LIDp.LIDS..p. 7e10: 4c 49 44 53 70 49 50 53 43 50 41 52 4d 7d 50 41 LIDSpIPSCPARM}PA 7e20: 52 4d 79 49 50 41 54 0a 08 00 50 41 52 4d 72 50 RMyIPAT...PARMrP 7e30: 41 52 4d 0b 00 01 50 41 52 4d 7d 50 41 52 4d 79 ARM...PARM}PARMy 7e40: 4c 49 44 53 0a 10 00 50 41 52 4d 72 50 41 52 4d LIDS...PARMrPARM 7e50: 0c 00 00 01 00 50 41 52 4d 70 00 47 45 53 46 a4 .....PARMp.GESF. 7e60: 53 55 43 43 a0 2d 93 47 45 53 46 0a 06 70 49 54 SUCC.-.GESF..pIT 7e70: 56 46 50 41 52 4d 7d 50 41 52 4d 79 49 54 56 4d VFPARM}PARMyITVM 7e80: 0a 04 00 50 41 52 4d 70 00 47 45 53 46 a4 53 55 ...PARMp.GESF.SU 7e90: 43 43 a0 43 07 93 47 45 53 46 0a 07 70 47 49 56 CC.C..GESF..pGIV 7ea0: 44 50 41 52 4d 7f 50 41 52 4d 01 50 41 52 4d 7d DPARM.PARM.PARM} 7eb0: 50 41 52 4d 79 47 4d 46 4e 01 00 50 41 52 4d 7d PARMyGMFN..PARM} 7ec0: 50 41 52 4d 0b 00 18 50 41 52 4d 7d 50 41 52 4d PARM...PARM}PARM 7ed0: 79 49 44 4d 53 0a 11 00 50 41 52 4d 7d 79 83 88 yIDMS...PARM}y.. 7ee0: 83 88 43 44 43 54 48 56 43 4f 00 43 44 56 4c 00 ..CDCTHVCO.CDVL. 7ef0: 0a 15 00 50 41 52 4d 50 41 52 4d 70 01 47 45 53 ...PARMPARMp.GES 7f00: 46 a4 53 55 43 43 a0 2a 93 47 45 53 46 0a 0a 70 F.SUCC.*.GESF..p 7f10: 00 50 41 52 4d a0 10 49 53 53 43 7d 50 41 52 4d .PARM..ISSC}PARM 7f20: 0a 03 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 ..PARMp.GESF.SUC 7f30: 43 a0 1f 93 47 45 53 46 0a 0b 70 4b 53 56 30 50 C...GESF..pKSV0P 7f40: 41 52 4d 70 4b 53 56 31 47 45 53 46 a4 53 55 43 ARMpKSV1GESF.SUC 7f50: 43 70 00 47 45 53 46 a4 43 52 49 54 14 45 2d 53 Cp.GESF.CRIT.E-S 7f60: 42 43 42 08 a0 22 93 47 45 53 46 00 70 00 50 41 BCB..".GESF.p.PA 7f70: 52 4d 70 0c fd 87 0f 00 50 41 52 4d 70 00 47 45 RMp.....PARMp.GE 7f80: 53 46 a4 53 55 43 43 a0 18 93 47 45 53 46 01 70 SF.SUCC...GESF.p 7f90: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 7fa0: a0 19 93 47 45 53 46 0a 03 70 00 47 45 53 46 70 ...GESF..p.GESFp 7fb0: 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 .PARM.SUCC...GES 7fc0: 46 0a 04 70 00 47 45 53 46 70 00 50 41 52 4d a4 F..p.GESFp.PARM. 7fd0: 53 55 43 43 a0 19 93 47 45 53 46 0a 05 70 00 47 SUCC...GESF..p.G 7fe0: 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 37 ESFp.PARM.SUCC.7 7ff0: 93 47 45 53 46 0a 06 70 7b 50 41 52 4d 0a 0f 00 .GESF..p{PARM... 8000: 49 54 56 46 70 7a 7b 50 41 52 4d 0a f0 00 0a 04 ITVFpz{PARM..... 8010: 00 49 54 56 4d 70 00 47 45 53 46 70 00 50 41 52 .ITVMp.GESFp.PAR 8020: 4d a4 53 55 43 43 a0 45 04 93 47 45 53 46 0a 07 M.SUCC.E..GESF.. 8030: a0 2a 93 50 41 52 4d 00 70 43 4c 49 44 60 a0 1c .*.PARM.pCLID`.. 8040: 7b 0c 00 00 00 80 60 00 7b 43 4c 49 44 0a 0f 43 {.....`.{CLID..C 8050: 4c 49 44 47 4c 49 44 43 4c 49 44 70 00 47 45 53 LIDGLIDCLIDp.GES 8060: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 Fp.PARM.SUCC...G 8070: 45 53 46 0a 08 70 00 47 45 53 46 70 00 50 41 52 ESF..p.GESFp.PAR 8080: 4d a4 53 55 43 43 a0 24 93 47 45 53 46 0a 09 7b M.SUCC.$.GESF..{ 8090: 50 41 52 4d 0a ff 49 42 54 54 70 00 47 45 53 46 PARM..IBTTp.GESF 80a0: 70 00 50 41 52 4d a4 53 55 43 43 a0 46 05 93 47 p.PARM.SUCC.F..G 80b0: 45 53 46 0a 0a 7b 50 41 52 4d 0a ff 49 50 53 43 ESF..{PARM..IPSC 80c0: a0 21 7b 7a 50 41 52 4d 0a 08 00 0a ff 00 7b 7a .!{zPARM......{z 80d0: 50 41 52 4d 0a 08 00 0a ff 49 50 41 54 76 49 50 PARM.....IPATvIP 80e0: 41 54 7b 7a 50 41 52 4d 0a 14 00 0a 07 49 42 49 AT{zPARM.....IBI 80f0: 41 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 Ap.GESFp.PARM.SU 8100: 43 43 a0 44 05 93 47 45 53 46 0a 0b 7b 7a 50 41 CC.D..GESF..{zPA 8110: 52 4d 01 00 01 49 46 31 45 a0 1b 7b 50 41 52 4d RM...IF1E..{PARM 8120: 0c 00 e0 01 00 00 7b 7a 50 41 52 4d 0a 0d 00 0a ......{zPARM.... 8130: 0f 49 44 4d 53 a1 10 7b 7a 50 41 52 4d 0a 11 00 .IDMS..{zPARM... 8140: 0a 0f 49 44 4d 53 70 00 47 45 53 46 70 00 50 41 ..IDMSp.GESFp.PA 8150: 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 10 RM.SUCC...GESF.. 8160: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 8170: 43 a0 2c 93 47 45 53 46 0a 11 70 79 4c 49 44 53 C.,.GESF..pyLIDS 8180: 0a 08 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 ...PARMrPARM...P 8190: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 49 ARMp.GESF.SUCC.I 81a0: 04 93 47 45 53 46 0a 12 a0 26 7b 50 41 52 4d 01 ..GESF...&{PARM. 81b0: 00 a0 10 93 7a 50 41 52 4d 01 00 01 70 01 49 53 ....zPARM...p.IS 81c0: 53 43 a1 0c 70 00 47 45 53 46 a4 43 52 49 54 a1 SC..p.GESF.CRIT. 81d0: 07 70 00 49 53 53 43 70 00 47 45 53 46 70 00 50 .p.ISSCp.GESFp.P 81e0: 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a ARM.SUCC...GESF. 81f0: 13 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 8200: 43 43 a0 24 93 47 45 53 46 0a 14 7b 50 41 52 4d CC.$.GESF..{PARM 8210: 0a 0f 50 41 56 50 70 00 47 45 53 46 70 00 50 41 ..PAVPp.GESFp.PA 8220: 52 4d a4 53 55 43 43 70 00 47 45 53 46 a4 53 55 RM.SUCCp.GESF.SU 8230: 43 43 a0 11 93 47 45 46 43 0a 04 70 47 42 44 41 CC...GEFC..pGBDA 8240: 47 58 46 43 a0 11 93 47 45 46 43 0a 06 70 53 42 GXFC...GEFC..pSB 8250: 43 42 47 58 46 43 70 00 47 45 46 43 70 01 53 43 CBGXFCp.GEFCp.SC 8260: 49 53 70 00 47 53 53 45 70 00 53 43 49 45 a4 00 ISp.GSSEp.SCIE.. 8270: 14 19 50 44 52 44 00 a0 0c 92 44 52 44 59 5b 22 ..PDRD....DRDY[" 8280: 41 53 4c 50 a4 92 44 52 44 59 14 1d 50 53 54 53 ASLP..DRDY..PSTS 8290: 00 a0 0e 94 43 53 54 53 0a 02 5b 22 41 53 4c 50 ....CSTS..["ASLP 82a0: a4 93 43 53 54 53 0a 03 14 42 06 47 4e 4f 54 02 ..CSTS...B.GNOT. 82b0: a0 07 50 44 52 44 a4 01 70 68 43 45 56 54 70 0a ..PDRD..phCEVTp. 82c0: 03 43 53 54 53 a0 2c 90 93 43 48 50 44 00 93 69 .CSTS.,..CHPD..i 82d0: 00 a0 18 91 94 4f 53 59 53 0b d0 07 95 4f 53 59 .....OSYS....OSY 82e0: 53 0b d6 07 86 50 43 49 30 69 a1 07 86 47 46 58 S....PCI0i...GFX 82f0: 30 69 a0 0d 5b 12 48 4e 4f 54 00 48 4e 4f 54 68 0i..[.HNOT.HNOTh 8300: a1 08 86 47 46 58 30 0a 80 a4 00 14 13 47 48 44 ...GFX0......GHD 8310: 53 01 70 68 54 49 44 58 a4 47 4e 4f 54 01 00 14 S.phTIDX.GNOT... 8320: 22 47 4c 49 44 01 a0 0b 93 68 01 70 0a 03 43 4c "GLID....h.p..CL 8330: 49 44 a1 07 70 68 43 4c 49 44 a4 47 4e 4f 54 0a ID..phCLID.GNOT. 8340: 02 00 14 14 47 44 43 4b 01 70 68 43 44 43 4b a4 ....GDCK.phCDCK. 8350: 47 4e 4f 54 0a 04 00 14 19 50 41 52 44 00 a0 0c GNOT.....PARD... 8360: 92 41 52 44 59 5b 22 41 53 4c 50 a4 92 41 52 44 .ARDY["ASLP..ARD 8370: 59 14 40 12 41 49 4e 54 02 a0 0e 92 7b 54 43 48 Y.@.AINT....{TCH 8380: 45 79 01 68 00 00 a4 01 a0 07 50 41 52 44 a4 01 Ey.h......PARD.. 8390: a0 40 0c 93 68 0a 02 a0 47 09 43 50 46 4d 7b 43 .@..h...G.CPFM{C 83a0: 50 46 4d 0a 0f 60 7b 45 50 46 4d 0a 0f 61 a0 2a PFM..`{EPFM..a.* 83b0: 93 60 01 a0 0d 7b 61 0a 06 00 70 0a 06 50 46 49 .`...{a...p..PFI 83c0: 54 a1 17 a0 0d 7b 61 0a 08 00 70 0a 08 50 46 49 T....{a...p..PFI 83d0: 54 a1 07 70 01 50 46 49 54 a0 2a 93 60 0a 06 a0 T..p.PFIT.*.`... 83e0: 0d 7b 61 0a 08 00 70 0a 08 50 46 49 54 a1 16 a0 .{a...p..PFIT... 83f0: 0b 7b 61 01 00 70 01 50 46 49 54 a1 08 70 0a 06 .{a..p.PFIT..p.. 8400: 50 46 49 54 a0 2a 93 60 0a 08 a0 0b 7b 61 01 00 PFIT.*.`....{a.. 8410: 70 01 50 46 49 54 a1 18 a0 0d 7b 61 0a 06 00 70 p.PFIT....{a...p 8420: 0a 06 50 46 49 54 a1 08 70 0a 08 50 46 49 54 a1 ..PFIT..p..PFIT. 8430: 0c 7f 50 46 49 54 0a 07 50 46 49 54 7d 50 46 49 ..PFIT..PFIT}PFI 8440: 54 0c 00 00 00 80 50 46 49 54 70 0a 04 41 53 4c T.....PFITp..ASL 8450: 43 a1 38 a0 1f 93 68 01 70 69 42 43 4c 50 7d 42 C.8...h.piBCLP}B 8460: 43 4c 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 41 CLP.....BCLPp..A 8470: 53 4c 43 a1 16 a0 10 93 68 00 70 69 41 4c 53 49 SLC.....h.piALSI 8480: 70 01 41 53 4c 43 a1 03 a4 01 70 01 41 53 4c 45 p.ASLC....p.ASLE 8490: a4 00 14 17 53 43 49 50 00 a0 0e 92 93 4f 56 45 ....SCIP.....OVE 84a0: 52 00 a4 92 47 53 4d 49 a4 00 5b 82 4c 0c 5e 5e R...GSMI..[.L.^^ 84b0: 4d 45 4d 32 08 5f 48 49 44 0c 41 d0 0c 01 08 5f MEM2._HID.A...._ 84c0: 55 49 44 0a 02 08 43 52 53 31 11 1d 0a 1a 86 09 UID...CRS1...... 84d0: 00 01 00 00 00 20 00 00 20 00 86 09 00 01 00 00 ..... .. ....... 84e0: 00 40 00 00 20 00 79 00 08 43 52 53 32 11 1d 0a .@.. .y..CRS2... 84f0: 1a 86 09 00 01 00 00 00 20 00 00 20 00 86 09 00 ........ .. .... 8500: 01 00 40 00 40 00 10 00 00 79 00 14 36 5f 53 54 ..@.@....y..6_ST 8510: 41 00 a0 2d 49 47 44 53 a0 27 91 93 7b 50 4e 48 A..-IGDS.'..{PNH 8520: 4d 0c f0 0f ff 0f 00 0c a0 06 02 00 93 7b 50 4e M............{PN 8530: 48 4d 0c ff 0f ff 0f 00 0c a0 06 03 00 a4 0a 0f HM.............. 8540: a4 00 14 35 5f 43 52 53 00 a0 29 91 93 7b 50 4e ...5_CRS..)..{PN 8550: 48 4d 0c f0 0f ff 0f 00 0c a0 06 02 00 93 7b 50 HM............{P 8560: 4e 48 4d 0c ff 0f ff 0f 00 0c a0 06 03 00 a4 43 NHM............C 8570: 52 53 31 a4 43 52 53 32 10 84 67 02 2f 03 5f 53 RS1.CRS2..g./._S 8580: 42 5f 50 43 49 30 4c 50 43 42 5b 82 81 66 02 45 B_PCI0LPCB[..f.E 8590: 43 5f 5f 08 5f 48 49 44 0c 41 d0 0c 09 08 5f 55 C__._HID.A...._U 85a0: 49 44 01 08 5f 47 50 45 0a 16 14 26 5f 43 52 53 ID.._GPE...&_CRS 85b0: 00 08 42 46 46 52 11 15 0a 12 47 01 62 00 62 00 ..BFFR....G.b.b. 85c0: 00 01 47 01 66 00 66 00 00 01 79 00 a4 42 46 46 ..G.f.f...y..BFF 85d0: 52 5b 80 45 52 41 4d 03 00 0a ff 5b 81 49 4f 45 R[.ERAM....[.IOE 85e0: 52 41 4d 01 44 53 42 59 01 45 4e 47 41 01 45 4e RAM.DSBY.ENGA.EN 85f0: 48 59 01 48 46 4e 45 01 44 53 45 4d 01 45 4e 33 HY.HFNE.DSEM.EN3 8600: 52 01 52 45 42 59 01 45 4e 54 4d 01 45 4e 42 4b R.REBY.ENTM.ENBK 8610: 01 45 4e 46 50 01 00 01 49 44 4d 49 01 57 50 53 .ENFP...IDMI.WPS 8620: 57 01 42 59 4f 4e 01 45 4e 42 54 01 4e 54 4b 59 W.BYON.ENBT.NTKY 8630: 01 44 4b 4f 4e 01 44 53 53 4b 01 4d 54 45 53 01 .DKON.DSSK.MTES. 8640: 55 53 42 4f 01 44 53 4d 43 01 53 4e 4c 43 01 4e USBO.DSMC.SNLC.N 8650: 4c 53 46 01 54 4e 4b 42 01 44 53 48 50 01 49 47 LSF.TNKB.DSHP.IG 8660: 50 4b 01 43 48 47 52 01 00 01 43 42 41 54 01 41 PK.CHGR...CBAT.A 8670: 44 4f 30 01 41 44 4f 31 01 00 01 00 01 43 4c 42 DO0.ADO1.....CLB 8680: 41 01 4c 57 42 41 01 53 55 42 45 01 50 55 42 45 A.LWBA.SUBE.PUBE 8690: 01 52 53 42 45 01 44 43 42 45 01 50 46 42 45 01 .RSBE.DCBE.PFBE. 86a0: 48 53 50 41 01 4e 48 44 44 01 44 45 41 44 01 42 HSPA.NHDD.DEAD.B 86b0: 34 34 30 01 42 33 31 35 01 54 33 31 35 01 52 33 440.B315.T315.R3 86c0: 31 35 01 42 59 41 4d 01 48 53 55 4e 08 48 53 52 15.BYAM.HSUN.HSR 86d0: 50 08 00 01 44 45 4c 59 01 00 06 00 08 00 08 54 P...DELY.......T 86e0: 50 53 45 02 00 06 48 4c 43 4c 04 00 02 42 4c 49 PSE...HLCL...BLI 86f0: 4b 01 54 4f 4e 46 01 55 4f 4e 45 01 00 01 55 4f K.TONF.UONE...UO 8700: 4e 4d 02 45 43 42 4b 04 48 46 4e 53 02 47 53 45 NM.ECBK.HFNS.GSE 8710: 52 01 50 53 43 53 01 50 53 44 53 01 47 53 55 44 R.PSCS.PSDS.GSUD 8720: 01 47 53 49 44 02 4d 42 43 47 01 53 42 43 47 01 .GSID.MBCG.SBCG. 8730: 4d 42 52 46 01 53 42 52 46 01 48 44 53 55 01 42 MBRF.SBRF.HDSU.B 8740: 59 53 55 01 00 01 54 4d 4f 44 01 48 41 4d 30 08 YSU...TMOD.HAM0. 8750: 48 41 4d 31 08 48 41 4d 32 08 48 41 4d 33 08 48 HAM1.HAM2.HAM3.H 8760: 41 4d 34 08 48 41 4d 35 08 48 41 4d 36 08 48 41 AM4.HAM5.HAM6.HA 8770: 4d 37 08 48 41 4d 38 08 48 41 4d 39 08 48 41 4d M7.HAM8.HAM9.HAM 8780: 41 08 48 41 4d 42 08 48 41 4d 43 08 48 41 4d 44 A.HAMB.HAMC.HAMD 8790: 08 48 41 4d 45 08 48 41 4d 46 08 48 54 30 30 01 .HAME.HAMF.HT00. 87a0: 48 54 30 31 01 48 54 30 32 01 48 54 30 33 01 48 HT01.HT02.HT03.H 87b0: 54 31 30 01 48 54 31 31 01 48 54 31 32 01 48 54 T10.HT11.HT12.HT 87c0: 31 33 01 00 10 45 58 43 4d 08 00 08 00 08 55 53 13...EXCM.....US 87d0: 50 30 01 55 53 50 33 01 55 53 50 34 01 45 48 50 P0.USP3.USP4.EHP 87e0: 30 01 45 48 50 31 01 00 03 00 08 49 44 30 30 01 0.EHP1.....ID00. 87f0: 49 44 30 31 01 49 44 30 32 01 49 44 30 33 01 00 ID01.ID02.ID03.. 8800: 02 53 45 42 54 01 43 4d 44 53 01 00 08 48 41 54 .SEBT.CMDS...HAT 8810: 52 08 48 54 30 48 08 48 54 30 4c 08 48 54 31 48 R.HT0H.HT0L.HT1H 8820: 08 48 54 31 4c 08 48 46 53 50 08 00 06 53 4d 55 .HT1L.HFSP...SMU 8830: 54 01 00 01 46 41 4e 53 02 48 55 57 42 01 45 4e T...FANS.HUWB.EN 8840: 53 34 01 44 53 45 58 01 41 59 49 44 01 4d 4d 55 S4.DSEX.AYID.MMU 8850: 54 01 4f 44 44 50 01 48 57 50 4d 01 48 57 4c 42 T.ODDP.HWPM.HWLB 8860: 01 48 57 4c 4f 01 48 57 44 4b 01 48 57 46 4e 01 .HWLO.HWDK.HWFN. 8870: 48 57 42 54 01 48 57 52 49 01 48 57 42 55 01 00 HWBT.HWRI.HWBU.. 8880: 08 00 07 48 50 4c 4f 01 00 08 00 08 00 08 48 42 ...HPLO.......HB 8890: 30 53 07 4d 42 54 53 01 00 08 4d 55 54 45 01 49 0S.MBTS...MUTE.I 88a0: 32 43 53 01 50 57 52 46 01 57 41 4e 4f 01 44 43 2CS.PWRF.WANO.DC 88b0: 42 44 01 44 43 57 4c 01 44 43 57 57 01 00 01 53 BD.DCWL.DCWW...S 88c0: 50 4b 4d 01 4b 42 4c 48 01 00 01 42 54 44 48 01 PKM.KBLH...BTDH. 88d0: 55 53 42 4e 01 00 02 53 33 46 47 01 00 08 00 08 USBN...S3FG..... 88e0: 00 18 00 07 50 46 4c 47 01 00 20 46 4e 4b 59 01 ....PFLG.. FNKY. 88f0: 00 01 48 50 4c 44 01 50 52 4f 46 01 41 43 50 57 ..HPLD.PROF.ACPW 8900: 01 00 02 43 41 4c 52 01 48 50 42 55 01 44 4b 45 ...CALR.HPBU.DKE 8910: 56 01 42 59 4e 4f 01 48 44 49 42 01 00 04 48 50 V.BYNO.HDIB...HP 8920: 48 49 01 47 53 54 53 01 00 02 45 58 47 43 01 44 HI.GSTS...EXGC.D 8930: 4f 4b 49 01 48 44 44 54 01 00 01 00 01 4e 55 4d OKI.HDDT.....NUM 8940: 4b 01 00 06 00 08 00 08 45 54 48 42 08 45 54 4c K.......ETHB.ETL 8950: 42 08 00 01 41 43 4f 56 01 52 4d 43 53 01 00 01 B...ACOV.RMCS... 8960: 54 34 45 34 01 54 34 45 35 01 00 02 00 08 53 4d T4E4.T4E5.....SM 8970: 50 52 08 53 4d 53 54 08 53 4d 41 44 08 53 4d 43 PR.SMST.SMAD.SMC 8980: 4d 08 53 4d 44 30 44 06 00 4c 09 42 43 4e 54 08 M.SMD0D..L.BCNT. 8990: 53 4d 41 41 08 42 41 54 44 10 54 4d 50 30 08 54 SMAA.BATD.TMP0.T 89a0: 4d 50 31 08 54 4d 50 32 08 54 4d 50 33 08 54 4d MP1.TMP2.TMP3.TM 89b0: 50 34 08 54 4d 50 35 08 54 4d 50 36 08 54 4d 50 P4.TMP5.TMP6.TMP 89c0: 37 08 00 08 48 49 49 44 08 00 08 48 46 4e 49 08 7...HIID...HFNI. 89d0: 00 10 00 08 00 08 53 43 52 53 01 00 02 43 50 55 ......SCRS...CPU 89e0: 54 01 00 03 44 47 54 52 01 48 44 45 4f 08 00 08 T...DGTR.HDEO... 89f0: 4c 4f 4d 44 01 43 42 44 45 01 00 06 4e 56 50 52 LOMD.CBDE...NVPR 8a00: 01 54 4c 4c 45 01 00 06 48 44 41 41 03 48 44 41 .TLLE...HDAA.HDA 8a10: 42 03 48 44 41 43 02 00 08 00 08 45 52 4d 43 08 B.HDAC.....ERMC. 8a20: 00 08 41 4d 53 42 08 41 4c 53 42 08 44 4d 53 42 ..AMSB.ALSB.DMSB 8a30: 08 44 4c 53 42 08 00 40 05 42 41 49 46 40 08 48 .DLSB..@.BAIF@.H 8a40: 44 45 4e 20 44 42 54 53 08 00 18 48 44 45 4d 08 DEN DBTS...HDEM. 8a50: 48 44 45 53 08 00 30 00 08 4d 43 55 52 10 4d 42 HDES..0..MCUR.MB 8a60: 52 4d 10 4d 42 56 47 10 00 08 41 54 4d 58 08 41 RM.MBVG...ATMX.A 8a70: 43 36 35 08 00 08 42 46 55 44 01 00 07 50 57 4d C65...BFUD...PWM 8a80: 48 08 50 57 4d 4c 08 53 48 53 43 08 48 53 49 44 H.PWML.SHSC.HSID 8a90: 08 00 40 08 45 43 52 43 10 45 43 41 43 10 45 43 ..@.ECRC.ECAC.EC 8aa0: 56 4f 10 00 10 00 08 00 08 00 08 00 08 00 08 00 VO.............. 8ab0: 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 4d ...............M 8ac0: 42 54 48 04 53 42 54 48 04 00 08 00 40 04 00 04 BTH.SBTH....@... 8ad0: 00 04 00 08 00 10 5b 81 31 45 52 41 4d 01 00 40 ......[.1ERAM..@ 8ae0: 50 53 42 52 43 10 53 42 46 43 10 53 42 41 45 10 PSBRC.SBFC.SBAE. 8af0: 53 42 52 53 10 53 42 41 43 10 53 42 56 4f 10 53 SBRS.SBAC.SBVO.S 8b00: 42 41 46 10 53 42 42 53 10 5b 81 1a 45 52 41 4d BAF.SBBS.[..ERAM 8b10: 01 00 40 50 00 0f 53 42 43 4d 01 53 42 4d 44 10 ..@P..SBCM.SBMD. 8b20: 53 42 43 43 10 5b 81 27 45 52 41 4d 01 00 40 50 SBCC.[.'ERAM..@P 8b30: 53 42 44 43 10 53 42 44 56 10 53 42 4f 4d 10 53 SBDC.SBDV.SBOM.S 8b40: 42 53 49 10 53 42 44 54 10 53 42 53 4e 10 5b 81 BSI.SBDT.SBSN.[. 8b50: 0e 45 52 41 4d 01 00 40 50 53 42 43 48 20 5b 81 .ERAM..@PSBCH [. 8b60: 0f 45 52 41 4d 01 00 40 50 53 42 4d 4e 40 08 5b .ERAM..@PSBMN@.[ 8b70: 81 0f 45 52 41 4d 01 00 40 50 53 42 44 4e 40 08 ..ERAM..@PSBDN@. 8b80: 08 42 41 54 4f 00 08 42 41 54 4e 00 08 42 41 54 .BATO..BATN..BAT 8b90: 46 0a c0 14 4b 05 5f 52 45 47 02 56 42 52 47 56 F...K._REG.VBRGV 8ba0: 42 52 53 42 52 4e 53 a0 3d 90 93 68 0a 03 93 69 BRSBRNS.=..h...i 8bb0: 01 70 01 45 43 4f 4e 70 0a ff 53 58 46 47 70 00 .p.ECONp..SXFGp. 8bc0: 4c 49 44 58 70 41 43 50 57 41 43 53 54 70 41 43 LIDXpACPWACSTpAC 8bd0: 53 54 50 57 52 53 57 47 53 56 00 5e 2e 48 4b 45 STPWRSWGSV.^.HKE 8be0: 59 57 47 49 4e 86 42 41 54 31 00 50 4e 4f 54 14 YWGIN.BAT1.PNOT. 8bf0: 1f 4c 45 44 5f 02 7d 68 69 60 a0 0b 45 43 4f 4e .LED_.}hi`..ECON 8c00: 70 60 48 4c 43 4c a1 08 57 42 45 43 0a 0c 60 08 p`HLCL..WBEC..`. 8c10: 42 41 4f 4e 00 08 57 42 4f 4e 00 14 43 0d 42 45 BAON..WBON..C.BE 8c20: 45 50 01 a0 0b 93 68 0a 0f 70 00 57 42 4f 4e 70 EP....h..p.WBONp 8c30: 57 42 4f 4e 62 70 68 60 70 0a ff 61 a0 11 93 68 WBONbph`p..a...h 8c40: 0a 11 70 00 60 70 00 61 70 00 57 42 4f 4e a0 13 ..p.`p.ap.WBON.. 8c50: 93 68 0a 10 70 0a 03 60 70 0a 08 61 70 01 57 42 .h..p..`p..ap.WB 8c60: 4f 4e a0 2e 93 68 0a 03 70 00 57 42 4f 4e a0 22 ON...h..p.WBON." 8c70: 62 70 0a 07 60 a0 1b 91 93 53 50 53 5f 0a 03 93 bp..`....SPS_... 8c80: 53 50 53 5f 0a 04 70 00 62 70 0a ff 60 70 0a ff SPS_..p.bp..`p.. 8c90: 61 a0 13 93 68 0a 07 a0 0d 62 70 00 62 70 0a ff a...h....bp.bp.. 8ca0: 60 70 0a ff 61 a0 38 45 43 4f 4e a0 18 90 62 92 `p..a.8ECON...b. 8cb0: 57 42 4f 4e 70 00 48 53 52 50 70 00 48 53 55 4e WBONp.HSRPp.HSUN 8cc0: 5b 22 0a 64 a0 0c 92 93 61 0a ff 70 61 48 53 52 [".d....a..paHSR 8cd0: 50 a0 0c 92 93 60 0a ff 70 60 48 53 55 4e a0 05 P....`..p`HSUN.. 8ce0: 93 68 0a 03 a0 0a 93 68 0a 07 5b 22 0b f4 01 14 .h.....h..[".... 8cf0: 40 06 46 4e 53 54 00 a0 11 45 43 4f 4e 70 48 46 @.FNST...ECONpHF 8d00: 4e 53 60 70 48 46 4e 45 61 a1 14 7b 52 42 45 43 NS`pHFNEa..{RBEC 8d10: 0a 0e 0a 03 60 7b 52 42 45 43 00 0a 08 61 a0 31 ....`{RBEC...a.1 8d20: 61 a0 0a 93 60 00 55 43 4d 53 0a 11 a0 0a 93 60 a...`.UCMS.....` 8d30: 01 55 43 4d 53 0a 0f a0 0b 93 60 0a 02 55 43 4d .UCMS.....`..UCM 8d40: 53 0a 10 5e 2e 48 4b 45 59 4d 48 4b 51 0b 05 60 S..^.HKEYMHKQ..` 8d50: 14 32 43 48 4b 53 00 70 0b e8 03 60 a2 12 53 4d .2CHKS.p...`..SM 8d60: 50 52 5b 22 01 76 60 a0 07 92 60 a4 0b 80 80 7b PR[".v`...`....{ 8d70: 53 4d 53 54 0a 80 61 a0 07 93 61 0a 80 a4 00 a4 SMST..a...a..... 8d80: 0b 81 80 14 1a 42 46 57 4c 00 70 53 4d 44 30 46 .....BFWL.pSMD0F 8d90: 57 30 30 53 4d 49 5f 0a 14 0a 02 00 00 00 14 47 W00SMI_........G 8da0: 09 42 4c 43 4c 00 70 42 52 4e 53 60 a0 49 08 5e .BLCL.pBRNS`.I.^ 8db0: 5e 5e 2e 47 46 58 30 44 52 44 59 a0 23 93 00 60 ^^.GFX0DRDY.#..` 8dc0: 70 83 88 83 88 42 52 54 42 0a 02 00 0a 03 00 61 p....BRTB......a 8dd0: 70 83 88 83 88 42 52 54 42 0a 02 00 00 00 62 a1 p....BRTB.....b. 8de0: 20 70 83 88 83 88 42 52 54 42 0a 02 00 0a 04 00 p....BRTB...... 8df0: 61 70 83 88 83 88 42 52 54 42 0a 02 00 01 00 62 ap....BRTB.....b 8e00: 7d 61 79 62 0a 09 00 62 5e 5e 5e 2e 47 46 58 30 }ayb...b^^^.GFX0 8e10: 41 49 4e 54 0a 03 62 70 00 61 70 83 88 83 88 42 AINT..bp.ap....B 8e20: 52 54 42 61 00 60 00 62 5e 5e 5e 2e 47 46 58 30 RTBa.`.b^^^.GFX0 8e30: 41 49 4e 54 01 62 14 0c 5f 51 30 31 00 70 01 50 AINT.b.._Q01.p.P 8e40: 38 30 48 14 0d 5f 51 30 32 00 70 0a 02 50 38 30 80H.._Q02.p..P80 8e50: 48 14 0d 5f 51 30 33 00 70 0a 03 50 38 30 48 14 H.._Q03.p..P80H. 8e60: 0d 5f 51 30 34 00 70 0a 04 50 38 30 48 14 0d 5f ._Q04.p..P80H.._ 8e70: 51 30 35 00 70 0a 05 50 38 30 48 14 0d 5f 51 30 Q05.p..P80H.._Q0 8e80: 36 00 70 0a 06 50 38 30 48 14 0d 5f 51 30 37 00 6.p..P80H.._Q07. 8e90: 70 0a 07 50 38 30 48 14 0d 5f 51 30 38 00 70 0a p..P80H.._Q08.p. 8ea0: 08 50 38 30 48 14 0d 5f 51 30 39 00 70 0a 09 50 .P80H.._Q09.p..P 8eb0: 38 30 48 14 0d 5f 51 30 41 00 70 0a 0a 50 38 30 80H.._Q0A.p..P80 8ec0: 48 14 0d 5f 51 30 42 00 70 0a 0b 50 38 30 48 14 H.._Q0B.p..P80H. 8ed0: 0d 5f 51 30 43 00 70 0a 0c 50 38 30 48 14 0d 5f ._Q0C.p..P80H.._ 8ee0: 51 30 44 00 70 0a 0d 50 38 30 48 14 0d 5f 51 30 Q0D.p..P80H.._Q0 8ef0: 45 00 70 0a 0e 50 38 30 48 14 0d 5f 51 30 46 00 E.p..P80H.._Q0F. 8f00: 70 0a 0f 50 38 30 48 14 27 5f 51 31 30 00 70 0a p..P80H.'_Q10.p. 8f10: 10 50 38 30 48 a0 19 5e 2e 48 4b 45 59 4d 48 4b .P80H..^.HKEYMHK 8f20: 4b 01 5e 2e 48 4b 45 59 4d 48 4b 51 0b 01 10 14 K.^.HKEYMHKQ.... 8f30: 2b 5f 51 31 31 00 70 0a 11 50 38 30 48 a0 1a 5e +_Q11.p..P80H..^ 8f40: 2e 48 4b 45 59 4d 48 4b 4b 0a 02 5e 2e 48 4b 45 .HKEYMHKK..^.HKE 8f50: 59 4d 48 4b 51 0b 02 10 a1 02 a3 14 1a 5f 51 31 YMHKQ........_Q1 8f60: 32 00 70 0a 12 50 38 30 48 5e 2e 48 4b 45 59 4d 2.p..P80H^.HKEYM 8f70: 48 4b 51 0b 03 10 14 2f 5f 51 31 33 00 70 0a 13 HKQ..../_Q13.p.. 8f80: 50 38 30 48 a0 18 5e 2e 48 4b 45 59 44 48 4b 43 P80H..^.HKEYDHKC 8f90: 5e 2e 48 4b 45 59 4d 48 4b 51 0b 04 10 a1 08 86 ^.HKEYMHKQ...... 8fa0: 53 4c 50 42 0a 80 14 0d 5f 51 31 34 00 70 0a 14 SLPB...._Q14.p.. 8fb0: 50 38 30 48 14 0d 5f 51 31 35 00 70 0a 15 50 38 P80H.._Q15.p..P8 8fc0: 30 48 14 3d 5f 51 31 36 00 70 0a 16 50 38 30 48 0H.=_Q16.p..P80H 8fd0: a0 1a 5e 2e 48 4b 45 59 4d 48 4b 4b 0a 40 5e 2e ..^.HKEYMHKK.@^. 8fe0: 48 4b 45 59 4d 48 4b 51 0b 07 10 a1 14 a0 12 49 HKEYMHKQ.......I 8ff0: 47 44 53 5e 5e 5e 2e 47 46 58 30 47 48 44 53 00 GDS^^^.GFX0GHDS. 9000: 14 46 09 5f 51 31 37 00 70 0a 17 50 38 30 48 a0 .F._Q17.p..P80H. 9010: 1d 5e 2e 48 4b 45 59 4d 48 4b 4b 0c 00 00 01 00 .^.HKEYMHKK..... 9020: 5e 2e 48 4b 45 59 4d 48 4b 51 0b 11 10 a0 29 92 ^.HKEYMHKQ....). 9030: 95 4f 53 59 53 0b d6 07 a0 18 49 47 44 53 86 5e .OSYS.....IGDS.^ 9040: 5e 5e 2e 47 46 58 30 44 44 30 32 0a 87 5b 22 0a ^^.GFX0DD02..[". 9050: 50 55 43 4d 53 0a 16 a1 3f 70 42 52 4e 53 60 a0 PUCMS...?pBRNS`. 9060: 2a 94 60 00 76 60 70 60 42 52 4e 53 56 42 52 53 *.`.v`p`BRNSVBRS 9070: 60 70 83 88 49 42 43 4c 72 60 0a 02 00 00 45 42 `p..IBCLr`....EB 9080: 52 4c 49 42 43 4d 45 42 52 4c 5e 2e 48 4b 45 59 RLIBCMEBRL^.HKEY 9090: 4d 48 4b 51 0b 50 60 14 47 09 5f 51 31 38 00 70 MHKQ.P`.G._Q18.p 90a0: 0a 18 50 38 30 48 a0 1b 5e 2e 48 4b 45 59 4d 48 ..P80H..^.HKEYMH 90b0: 4b 4b 0b 00 80 5e 2e 48 4b 45 59 4d 48 4b 51 0b KK...^.HKEYMHKQ. 90c0: 10 10 a0 29 92 95 4f 53 59 53 0b d6 07 a0 18 49 ...)..OSYS.....I 90d0: 47 44 53 86 5e 5e 5e 2e 47 46 58 30 44 44 30 32 GDS.^^^.GFX0DD02 90e0: 0a 86 5b 22 0a 50 55 43 4d 53 0a 16 a1 42 04 70 ..[".PUCMS...B.p 90f0: 42 52 4e 53 60 a0 2c 92 94 60 0a 0e 75 60 70 60 BRNS`.,..`..u`p` 9100: 42 52 4e 53 56 42 52 53 60 70 83 88 49 42 43 4c BRNSVBRS`p..IBCL 9110: 72 60 0a 02 00 00 45 42 52 4c 49 42 43 4d 45 42 r`....EBRLIBCMEB 9120: 52 4c 5e 2e 48 4b 45 59 4d 48 4b 51 0b 50 60 14 RL^.HKEYMHKQ.P`. 9130: 31 5f 51 31 39 00 70 0a 19 50 38 30 48 a0 1d 5e 1_Q19.p..P80H..^ 9140: 2e 48 4b 45 59 4d 48 4b 4b 0c 00 00 80 00 5e 2e .HKEYMHKK.....^. 9150: 48 4b 45 59 4d 48 4b 51 0b 18 10 55 43 4d 53 0a HKEYMHKQ...UCMS. 9160: 03 14 29 5f 51 31 41 00 70 0a 1a 50 38 30 48 a0 ..)_Q1A.p..P80H. 9170: 1b 5e 2e 48 4b 45 59 4d 48 4b 4b 0b 00 04 5e 2e .^.HKEYMHKK...^. 9180: 48 4b 45 59 4d 48 4b 51 0b 0b 10 14 1a 5f 51 31 HKEYMHKQ....._Q1 9190: 42 00 70 0a 1b 50 38 30 48 5e 2e 48 4b 45 59 4d B.p..P80H^.HKEYM 91a0: 48 4b 51 0b 0c 10 14 29 5f 51 31 43 00 a0 1d 5e HKQ....)_Q1C...^ 91b0: 2e 48 4b 45 59 4d 48 4b 4b 0c 00 00 20 00 5e 2e .HKEYMHKK... .^. 91c0: 48 4b 45 59 4d 48 4b 51 0b 16 10 55 43 4d 53 00 HKEYMHKQ...UCMS. 91d0: 14 29 5f 51 31 44 00 a0 1d 5e 2e 48 4b 45 59 4d .)_Q1D...^.HKEYM 91e0: 48 4b 4b 0c 00 00 10 00 5e 2e 48 4b 45 59 4d 48 HKK.....^.HKEYMH 91f0: 4b 51 0b 15 10 55 43 4d 53 01 14 12 5f 51 31 45 KQ...UCMS..._Q1E 9200: 00 70 01 41 44 4f 30 70 01 41 44 4f 31 14 06 5f .p.ADO0p.ADO1.._ 9210: 51 31 46 00 14 20 5f 51 32 32 00 70 0a 22 50 38 Q1F.. _Q22.p."P8 9220: 30 48 a0 12 4d 42 54 53 86 42 41 54 31 0a 80 86 0H..MBTS.BAT1... 9230: 42 41 54 31 00 14 0d 5f 51 32 34 00 86 42 41 54 BAT1..._Q24..BAT 9240: 31 0a 80 14 3e 5f 51 32 36 00 70 0a 26 50 38 30 1...>_Q26.p.&P80 9250: 48 5b 22 0b f4 01 86 41 43 41 44 0a 80 86 42 41 H["....ACAD...BA 9260: 54 31 0a 80 86 5c 2e 5f 54 5a 5f 54 5a 30 30 0a T1...\._TZ_TZ00. 9270: 80 5e 2e 48 4b 45 59 4d 48 4b 51 0b 40 60 50 4e .^.HKEYMHKQ.@`PN 9280: 4f 54 14 2a 5f 51 32 37 00 70 0a 27 50 38 30 48 OT.*_Q27.p.'P80H 9290: 5b 22 0b f4 01 86 41 43 41 44 0a 80 5e 2e 48 4b ["....ACAD..^.HK 92a0: 45 59 4d 48 4b 51 0b 40 60 50 4e 4f 54 14 0d 5f EYMHKQ.@`PNOT.._ 92b0: 51 32 38 00 70 0a 28 50 38 30 48 14 0d 5f 51 32 Q28.p.(P80H.._Q2 92c0: 39 00 70 0a 29 50 38 30 48 14 1a 5f 51 32 41 00 9.p.)P80H.._Q2A. 92d0: 5e 2e 48 4b 45 59 4d 48 4b 51 0b 02 50 86 4c 49 ^.HKEYMHKQ..P.LI 92e0: 44 5f 0a 80 14 1a 5f 51 32 42 00 5e 2e 48 4b 45 D_...._Q2B.^.HKE 92f0: 59 4d 48 4b 51 0b 01 50 86 4c 49 44 5f 0a 80 14 YMHKQ..P.LID_... 9300: 30 5f 51 33 34 00 a0 25 90 93 7b 48 42 30 53 0a 0_Q34..%..{HB0S. 9310: 0f 61 00 92 41 43 50 57 70 0a 34 50 38 30 48 5e .a..ACPWp.4P80H^ 9320: 2e 48 4b 45 59 4d 48 4b 51 0b 13 23 46 4e 53 54 .HKEYMHKQ..#FNST 9330: 14 34 5f 51 33 37 00 70 0a 37 50 38 30 48 5b 22 .4_Q37.p.7P80H[" 9340: 0b f4 01 a0 12 44 4f 4b 49 5e 2e 48 4b 45 59 4d .....DOKI^.HKEYM 9350: 48 4b 51 0b 10 40 a1 0e 5e 2e 48 4b 45 59 4d 48 HKQ..@..^.HKEYMH 9360: 4b 51 0b 11 40 14 18 5f 51 33 46 00 5b 22 0b f4 KQ..@.._Q3F.[".. 9370: 01 5e 2e 48 4b 45 59 4d 48 4b 51 0b 00 60 14 0d .^.HKEYMHKQ..`.. 9380: 5f 51 34 30 00 70 0a 40 50 38 30 48 14 41 06 5f _Q40.p.@P80H.A._ 9390: 51 34 31 00 5b 22 0b f4 01 5e 2e 48 4b 45 59 4d Q41.["...^.HKEYM 93a0: 48 4b 51 0b 00 70 a0 18 92 47 53 54 53 70 00 47 HKQ..p...GSTSp.G 93b0: 4f 37 30 70 00 47 4f 33 35 70 00 47 4f 37 31 a1 O70p.GO35p.GO71. 93c0: 2e a0 0e 57 4c 4e 50 70 44 43 57 4c 47 4f 37 30 ...WLNPpDCWLGO70 93d0: a0 0e 42 54 4d 44 70 44 43 42 44 47 4f 33 35 a0 ..BTMDpDCBDGO35. 93e0: 0e 57 41 4e 50 70 44 43 57 57 47 4f 37 31 14 13 .WANPpDCWWGO71.. 93f0: 5f 51 34 33 00 70 0a 43 50 38 30 48 55 43 4d 53 _Q43.p.CP80HUCMS 9400: 0a 18 14 06 5f 51 34 34 00 14 0d 5f 51 34 35 00 ...._Q44..._Q45. 9410: 70 0a 45 50 38 30 48 14 25 5f 51 34 41 00 70 0a p.EP80H.%_Q4A.p. 9420: 4a 50 38 30 48 48 42 43 4b 70 01 42 46 41 44 5b JP80HHBCKp.BFAD[ 9430: 22 0a c8 86 42 41 54 31 00 50 4e 4f 54 14 18 5f "...BAT1.PNOT.._ 9440: 51 34 42 00 70 0a 4b 50 38 30 48 86 42 41 54 31 Q4B.p.KP80H.BAT1 9450: 0a 80 50 4e 4f 54 14 1a 5f 51 34 45 00 70 0a 4e ..PNOT.._Q4E.p.N 9460: 50 38 30 48 5e 2e 48 4b 45 59 4d 48 4b 51 0b 11 P80H^.HKEYMHKQ.. 9470: 60 14 1a 5f 51 34 46 00 70 0a 4f 50 38 30 48 5e `.._Q4F.p.OP80H^ 9480: 2e 48 4b 45 59 4d 48 4b 51 0b 12 60 14 29 5f 51 .HKEYMHKQ..`.)_Q 9490: 36 30 00 70 0a 60 50 38 30 48 a0 1b 5e 2e 48 4b 60.p.`P80H..^.HK 94a0: 45 59 4d 48 4b 4b 0b 00 20 5e 2e 48 4b 45 59 4d EYMHKK.. ^.HKEYM 94b0: 48 4b 51 0b 0e 10 14 0d 5f 51 36 31 00 70 0a 61 HKQ....._Q61.p.a 94c0: 50 38 30 48 14 0d 5f 51 36 32 00 70 0a 62 50 38 P80H.._Q62.p.bP8 94d0: 30 48 14 2b 5f 51 36 33 00 70 0a 63 50 38 30 48 0H.+_Q63.p.cP80H 94e0: a0 1d 5e 2e 48 4b 45 59 4d 48 4b 4b 0c 00 00 02 ..^.HKEYMHKK.... 94f0: 00 5e 2e 48 4b 45 59 4d 48 4b 51 0b 12 10 14 4c .^.HKEYMHKQ....L 9500: 06 5f 51 36 34 00 70 0a 64 50 38 30 48 a0 1a 5e ._Q64.p.dP80H..^ 9510: 2e 48 4b 45 59 4d 48 4b 4b 0a 10 5e 2e 48 4b 45 .HKEYMHKK..^.HKE 9520: 59 4d 48 4b 51 0b 05 10 a0 14 57 57 4e 41 70 44 YMHKQ.....WWNApD 9530: 43 57 57 47 4f 37 31 70 00 57 57 4e 41 a1 2d a0 CWWGO71p.WWNA.-. 9540: 14 57 41 4e 41 70 44 43 57 4c 47 4f 37 30 70 00 .WANApDCWLGO70p. 9550: 57 41 4e 41 a1 16 a0 14 42 54 48 41 70 44 43 42 WANA....BTHApDCB 9560: 44 47 4f 33 35 70 00 42 54 48 41 14 28 5f 51 36 DGO35p.BTHA.(_Q6 9570: 35 00 70 0a 65 50 38 30 48 a0 1a 5e 2e 48 4b 45 5.p.eP80H..^.HKE 9580: 59 4d 48 4b 4b 0a 20 5e 2e 48 4b 45 59 4d 48 4b YMHKK. ^.HKEYMHK 9590: 51 0b 06 10 14 2f 5f 51 36 36 00 70 0a 66 50 38 Q..../_Q66.p.fP8 95a0: 30 48 a0 1b 5e 2e 48 4b 45 59 4d 48 4b 4b 0b 00 0H..^.HKEYMHKK.. 95b0: 02 5e 2e 48 4b 45 59 4d 48 4b 51 0b 0a 10 55 43 .^.HKEYMHKQ...UC 95c0: 4d 53 0a 02 14 24 5f 51 36 37 00 a0 1d 5e 2e 48 MS...$_Q67...^.H 95d0: 4b 45 59 4d 48 4b 4b 0c 00 00 04 00 5e 2e 48 4b KEYMHKK.....^.HK 95e0: 45 59 4d 48 4b 51 0b 13 10 14 0d 5f 51 36 38 00 EYMHKQ....._Q68. 95f0: 70 0a 68 50 38 30 48 14 0d 5f 51 36 39 00 70 0a p.hP80H.._Q69.p. 9600: 69 50 38 30 48 14 1a 5f 51 36 41 00 70 0a 6a 50 iP80H.._Q6A.p.jP 9610: 38 30 48 5e 2e 48 4b 45 59 4d 48 4b 51 0b 1b 10 80H^.HKEYMHKQ... 9620: 14 0d 5f 51 36 42 00 70 0a 6b 50 38 30 48 14 0d .._Q6B.p.kP80H.. 9630: 5f 51 36 43 00 70 0a 6c 50 38 30 48 14 0d 5f 51 _Q6C.p.lP80H.._Q 9640: 36 44 00 70 0a 6d 50 38 30 48 14 0d 5f 51 36 45 6D.p.mP80H.._Q6E 9650: 00 70 0a 6e 50 38 30 48 14 0d 5f 51 36 46 00 70 .p.nP80H.._Q6F.p 9660: 0a 6f 50 38 30 48 14 11 5f 51 37 30 00 70 0a 70 .oP80H.._Q70.p.p 9670: 50 38 30 48 46 4e 53 54 14 11 5f 51 37 32 00 70 P80HFNST.._Q72.p 9680: 0a 72 50 38 30 48 46 4e 53 54 14 11 5f 51 37 33 .rP80HFNST.._Q73 9690: 00 70 0a 73 50 38 30 48 46 4e 53 54 14 2b 5f 51 .p.sP80HFNST.+_Q 96a0: 37 34 00 70 0a 74 50 38 30 48 a0 1d 5e 2e 48 4b 74.p.tP80H..^.HK 96b0: 45 59 4d 48 4b 4b 0c 00 00 00 08 5e 2e 48 4b 45 EYMHKK.....^.HKE 96c0: 59 4d 48 4b 51 0b 60 60 14 0d 5f 51 37 36 00 70 YMHKQ.``.._Q76.p 96d0: 0a 76 50 38 30 48 14 0d 5f 51 37 37 00 70 0a 77 .vP80H.._Q77.p.w 96e0: 50 38 30 48 14 1a 5f 51 39 35 00 70 0a 95 50 38 P80H.._Q95.p..P8 96f0: 30 48 86 5c 2e 5f 54 5a 5f 54 5a 30 30 0a 80 14 0H.\._TZ_TZ00... 9700: 4a 04 5f 51 45 41 00 70 0a ea 50 38 30 48 a0 23 J._QEA.p..P80H.# 9710: 93 54 34 45 34 00 70 01 54 34 45 34 70 00 54 34 .T4E4.p.T4E4p.T4 9720: 45 35 54 48 52 4f 0a 91 5b 22 0a 1e 54 48 52 4f E5THRO..["..THRO 9730: 0a 95 a1 17 70 01 54 34 45 35 54 48 52 4f 0a 92 ....p.T4E5THRO.. 9740: 5b 22 0a 1e 54 48 52 4f 0a 95 14 29 5f 51 45 43 ["..THRO...)_QEC 9750: 00 70 0a ec 50 38 30 48 70 01 54 34 45 34 70 00 .p..P80Hp.T4E4p. 9760: 54 34 45 35 54 48 52 4f 0a 91 5b 22 0a 1e 54 48 T4E5THRO..["..TH 9770: 52 4f 0a 95 14 2e 5f 51 45 42 00 70 0a eb 50 38 RO...._QEB.p..P8 9780: 30 48 70 01 41 43 4f 56 a0 10 93 54 48 52 4f 0a 0Hp.ACOV...THRO. 9790: 93 0a 12 70 01 52 4d 43 53 5b 22 0a 1e 54 48 52 ...p.RMCS["..THR 97a0: 4f 0a 95 14 35 5f 51 45 44 00 70 0a ed 50 38 30 O...5_QED.p..P80 97b0: 48 70 00 41 43 4f 56 70 00 52 4d 43 53 70 00 54 Hp.ACOVp.RMCSp.T 97c0: 34 45 34 70 00 54 34 45 35 54 48 52 4f 0a 94 5b 4E4p.T4E5THRO..[ 97d0: 22 0a 1e 54 48 52 4f 0a 95 14 44 04 5f 51 46 30 "..THRO...D._QF0 97e0: 00 70 0a f0 50 38 30 48 43 54 44 50 70 50 50 43 .p..P80HCTDPpPPC 97f0: 50 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 50 43 P\/._PR_CPU0_PPC 9800: 50 4e 4f 54 86 5c 2e 5f 50 52 5f 43 50 55 30 0a PNOT.\._PR_CPU0. 9810: 80 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 14 18 ..\._PR_CPU1.... 9820: 5f 51 46 31 00 70 0a f1 50 38 30 48 54 42 43 54 _QF1.p..P80HTBCT 9830: 00 70 00 43 50 55 54 14 18 5f 51 46 32 00 70 0a .p.CPUT.._QF2.p. 9840: f2 50 38 30 48 54 42 43 54 01 70 01 43 50 55 54 .P80HTBCT.p.CPUT 9850: 14 22 5f 51 46 35 00 70 0a f5 50 38 30 48 86 5e ."_QF5.p..P80H.^ 9860: 5e 5e 2e 50 45 47 30 50 45 47 50 0a d4 70 01 44 ^^.PEG0PEGP..p.D 9870: 47 54 52 14 22 5f 51 46 36 00 70 0a f6 50 38 30 GTR."_QF6.p..P80 9880: 48 86 5e 5e 5e 2e 50 45 47 30 50 45 47 50 0a d1 H.^^^.PEG0PEGP.. 9890: 70 00 44 47 54 52 5b 82 85 35 01 48 4b 45 59 08 p.DGTR[..5.HKEY. 98a0: 5f 48 49 44 0c 30 ae 00 68 14 09 5f 53 54 41 00 _HID.0..h.._STA. 98b0: a4 0a 0f 14 0a 4d 48 4b 56 00 a4 0b 00 01 08 44 .....MHKV......D 98c0: 48 4b 43 00 08 44 48 4b 42 01 5b 01 58 44 48 4b HKC..DHKB.[.XDHK 98d0: 07 08 44 48 4b 48 00 08 44 48 4b 57 00 08 44 48 ..DHKH..DHKW..DH 98e0: 4b 53 00 08 44 48 4b 44 00 08 44 48 4b 4e 0c 08 KS..DHKD..DHKN.. 98f0: 08 02 00 08 44 48 4b 54 00 08 44 48 57 57 00 14 ....DHKT..DHWW.. 9900: 0c 4d 48 4b 41 00 a4 0c f8 88 0b 04 14 0b 4d 48 .MHKA.........MH 9910: 4b 4e 00 a4 44 48 4b 4e 14 18 4d 48 4b 4b 01 a0 KN..DHKN..MHKK.. 9920: 0d 44 48 4b 43 a4 7b 44 48 4b 4e 68 00 a1 03 a4 .DHKC.{DHKNh.... 9930: 00 14 40 05 4d 48 4b 4d 02 5b 23 58 44 48 4b ff ..@.MHKM.[#XDHK. 9940: ff a0 06 94 68 0a 20 a3 a1 33 79 01 76 68 60 a0 ....h. ..3y.vh`. 9950: 29 7b 60 0c f8 88 0b 04 00 a0 0c 69 7d 60 44 48 ){`........i}`DH 9960: 4b 4e 44 48 4b 4e a1 12 7b 44 48 4b 4e 7f 60 0c KNDHKN..{DHKN.`. 9970: ff ff ff ff 00 44 48 4b 4e a1 02 a3 5b 27 58 44 .....DHKN...['XD 9980: 48 4b 14 0d 4d 48 4b 53 00 86 53 4c 50 42 0a 80 HK..MHKS..SLPB.. 9990: 14 0c 4d 48 4b 43 01 70 68 44 48 4b 43 14 49 08 ..MHKC.phDHKC.I. 99a0: 4d 48 4b 50 00 5b 23 58 44 48 4b ff ff a0 11 44 MHKP.[#XDHK....D 99b0: 48 57 57 70 44 48 57 57 61 70 00 44 48 57 57 a1 HWWpDHWWap.DHWW. 99c0: 4f 05 a0 11 44 48 4b 57 70 44 48 4b 57 61 70 00 O...DHKWpDHKWap. 99d0: 44 48 4b 57 a1 4a 04 a0 11 44 48 4b 44 70 44 48 DHKW.J...DHKDpDH 99e0: 4b 44 61 70 00 44 48 4b 44 a1 35 a0 11 44 48 4b KDap.DHKD.5..DHK 99f0: 53 70 44 48 4b 53 61 70 00 44 48 4b 53 a1 21 a0 SpDHKSap.DHKS.!. 9a00: 11 44 48 4b 54 70 44 48 4b 54 61 70 00 44 48 4b .DHKTpDHKTap.DHK 9a10: 54 a1 0d 70 44 48 4b 48 61 70 00 44 48 4b 48 5b T..pDHKHap.DHKH[ 9a20: 27 58 44 48 4b a4 61 14 21 4b 4c 43 47 01 70 00 'XDHK.a.!KLCG.p. 9a30: 60 a0 0c 54 4c 4c 45 70 0c 01 01 03 00 60 a1 08 `..TLLEp.....`.. 9a40: 70 0c 00 01 03 00 60 a4 60 14 32 4b 4c 43 53 01 p.....`.`.2KLCS. 9a50: 7b 68 0a ff 60 a0 0a 93 60 00 70 00 54 4c 4c 45 {h..`...`.p.TLLE 9a60: a1 07 70 01 54 4c 4c 45 a0 11 4d 48 4b 4b 0c 00 ..p.TLLE..MHKK.. 9a70: 00 02 00 4d 48 4b 51 0b 12 10 a4 00 14 3e 4d 48 ...MHKQ......>MH 9a80: 4b 45 01 70 68 44 48 4b 42 5b 23 58 44 48 4b ff KE.phDHKB[#XDHK. 9a90: ff 70 00 44 48 4b 48 70 00 44 48 4b 57 70 00 44 .p.DHKHp.DHKWp.D 9aa0: 48 4b 53 70 00 44 48 4b 44 70 00 44 48 4b 54 70 HKSp.DHKDp.DHKTp 9ab0: 00 44 48 57 57 5b 27 58 44 48 4b 14 4f 0a 4d 48 .DHWW['XDHK.O.MH 9ac0: 4b 51 01 a0 47 0a 44 48 4b 42 a0 40 09 44 48 4b KQ..G.DHKB.@.DHK 9ad0: 43 5b 23 58 44 48 4b ff ff a0 06 95 68 0b 00 10 C[#XDHK.....h... 9ae0: a1 4d 06 a0 0c 95 68 0b 00 20 70 68 44 48 4b 48 .M....h.. phDHKH 9af0: a1 4d 05 a0 0c 95 68 0b 00 30 70 68 44 48 4b 57 .M....h..0phDHKW 9b00: a1 4d 04 a0 0c 95 68 0b 00 40 70 68 44 48 4b 53 .M....h..@phDHKS 9b10: a1 3d a0 0c 95 68 0b 00 50 70 68 44 48 4b 44 a1 .=...h..PphDHKD. 9b20: 2e a0 0c 95 68 0b 00 60 70 68 44 48 4b 48 a1 1f ....h..`phDHKH.. 9b30: a0 0c 95 68 0b 00 70 70 68 44 48 4b 54 a1 10 a0 ...h..pphDHKT... 9b40: 0c 95 68 0b 00 80 70 68 44 48 57 57 a1 01 5b 27 ..h...phDHWW..[' 9b50: 58 44 48 4b 86 48 4b 45 59 0a 80 a1 0f a0 0d 93 XDHK.HKEY....... 9b60: 68 0b 04 10 86 53 4c 50 42 0a 80 14 06 4d 48 4b h....SLPB....MHK 9b70: 44 00 14 37 4d 48 51 43 01 a0 2b 57 4e 54 46 a0 D..7MHQC..+WNTF. 9b80: 09 93 68 00 a4 43 57 41 43 a1 1b a0 09 93 68 01 ..h..CWAC.....h. 9b90: a4 43 57 41 50 a1 0f a0 0a 93 68 0a 02 a4 43 57 .CWAP.....h...CW 9ba0: 41 54 a1 02 a3 a1 02 a3 a4 00 14 32 4d 48 47 43 AT.........2MHGC 9bb0: 00 a0 26 57 4e 54 46 5b 23 58 44 48 4b ff ff a0 ..&WNTF[#XDHK... 9bc0: 0a 43 4b 43 34 00 70 0a 03 60 a1 05 70 0a 04 60 .CKC4.p..`..p..` 9bd0: 5b 27 58 44 48 4b a4 60 a1 02 a3 a4 00 14 40 06 ['XDHK.`......@. 9be0: 4d 48 53 43 01 a0 45 05 90 43 57 41 43 57 4e 54 MHSC..E..CWACWNT 9bf0: 46 5b 23 58 44 48 4b ff ff a0 3b 4f 53 43 34 a0 F[#XDHK...;OSC4. 9c00: 18 93 68 0a 03 a0 12 92 43 57 41 53 50 4e 54 46 ..h.....CWASPNTF 9c10: 0a 81 70 01 43 57 41 53 a1 1c a0 17 93 68 0a 04 ..p.CWAS.....h.. 9c20: a0 11 43 57 41 53 50 4e 54 46 0a 81 70 00 43 57 ..CWASPNTF..p.CW 9c30: 41 53 a1 02 a3 5b 27 58 44 48 4b a1 02 a3 14 24 AS...['XDHK....$ 9c40: 49 53 53 47 01 a0 07 4f 56 38 47 a4 00 70 49 53 ISSG...OV8G..pIS 9c50: 53 50 60 7d 60 00 60 7d 60 7b 49 53 43 47 00 00 SP`}`.`}`{ISCG.. 9c60: 60 a4 60 14 0e 49 53 53 53 01 70 68 49 53 43 47 `.`..ISSS.phISCG 9c70: a4 00 14 15 46 46 53 47 01 a0 07 4f 56 38 47 a4 ....FFSG...OV8G. 9c80: 00 a4 49 46 52 53 00 00 14 0e 46 46 53 53 01 49 ..IFRS....FFSS.I 9c90: 46 52 53 01 68 a4 00 14 08 4d 48 4b 47 00 a4 00 FRS.h....MHKG... 9ca0: 14 06 4d 48 53 54 00 14 06 4d 48 54 54 00 14 06 ..MHST...MHTT... 9cb0: 4d 48 42 54 00 14 06 4d 48 46 54 01 14 06 4d 48 MHBT...MHFT...MH 9cc0: 43 54 01 14 1e 4d 4d 54 47 00 70 00 60 7d 60 01 CT...MMTG.p.`}`. 9cd0: 60 a0 0e 92 4d 43 4d 55 7d 60 0c 00 00 01 00 60 `...MCMU}`.....` 9ce0: a4 60 14 06 4d 4d 54 53 01 08 49 4e 44 56 00 14 .`..MMTS..INDV.. 9cf0: 41 08 4d 48 51 49 00 a0 12 7b 49 50 4d 53 01 00 A.MHQI...{IPMS.. 9d00: 7d 49 4e 44 56 01 49 4e 44 56 a0 14 7b 49 50 4d }INDV.INDV..{IPM 9d10: 53 0a 02 00 7d 49 4e 44 56 0a 02 49 4e 44 56 a0 S...}INDV..INDV. 9d20: 15 7b 49 50 4d 53 0a 04 00 7d 49 4e 44 56 0b 00 .{IPMS...}INDV.. 9d30: 01 49 4e 44 56 a0 15 7b 49 50 4d 53 0a 08 00 7d .INDV..{IPMS...} 9d40: 49 4e 44 56 0b 00 02 49 4e 44 56 a0 14 7b 49 50 INDV...INDV..{IP 9d50: 4d 53 0a 10 00 7d 49 4e 44 56 0a 04 49 4e 44 56 MS...}INDV..INDV 9d60: 7d 49 4e 44 56 0b 03 03 49 4e 44 56 a4 49 4e 44 }INDV...INDV.IND 9d70: 56 14 49 12 4d 48 47 49 01 08 52 45 54 42 11 03 V.I.MHGI..RETB.. 9d80: 0a 10 8c 52 45 54 42 00 4d 48 47 53 79 01 68 60 ...RETB.MHGSy.h` 9d90: a0 45 10 7b 49 4e 44 56 60 00 a0 22 93 68 00 5b .E.{INDV`..".h.[ 9da0: 13 52 45 54 42 0a 08 0a 78 42 52 42 55 70 49 50 .RETB...xBRBUpIP 9db0: 4d 42 42 52 42 55 70 0a 10 4d 48 47 53 a1 48 0d MBBRBUp..MHGS.H. 9dc0: a0 22 93 68 01 5b 13 52 45 54 42 0a 08 0a 18 52 .".h.[.RETB....R 9dd0: 52 42 55 70 49 50 4d 52 52 52 42 55 70 0a 04 4d RBUpIPMRRRBUp..M 9de0: 48 47 53 a1 42 0b a0 4c 04 93 68 0a 08 5b 13 52 HGS.B..L..h..[.R 9df0: 45 54 42 0a 10 0a 18 4f 44 42 55 8c 52 45 54 42 ETB....ODBU.RETB 9e00: 01 4d 48 47 5a 70 49 50 4d 4f 4f 44 42 55 7d 0a .MHGZpIPMOODBU}. 9e10: 04 4d 48 47 5a 4d 48 47 5a a0 12 93 4f 44 44 53 .MHGZMHGZ...ODDS 9e20: 00 7d 0a 03 4d 48 47 5a 4d 48 47 5a 70 0a 05 4d .}..MHGZMHGZp..M 9e30: 48 47 53 a1 42 06 a0 2c 93 68 0a 09 5b 13 52 45 HGS.B..,.h..[.RE 9e40: 54 42 0a 10 0a 08 41 55 42 55 70 49 50 4d 41 41 TB....AUBUpIPMAA 9e50: 55 42 55 70 01 88 52 45 54 42 01 00 70 0a 03 4d UBUp..RETB..p..M 9e60: 48 47 53 a1 32 a0 30 93 68 0a 02 70 56 44 59 4e HGS.2.0.h..pVDYN 9e70: 00 00 61 7b 61 0a 0f 88 52 45 54 42 0a 02 00 7a ..a{a...RETB...z 9e80: 61 0a 04 61 7b 61 0a 0f 88 52 45 54 42 01 00 70 a..a{a...RETB..p 9e90: 0a 03 4d 48 47 53 a4 52 45 54 42 14 06 4d 48 53 ..MHGS.RETB..MHS 9ea0: 49 02 14 31 49 52 44 59 00 70 0b f4 01 60 70 0a I..1IRDY.p...`p. 9eb0: 3c 61 70 00 62 a2 1c 61 5b 22 60 70 42 43 48 4b .M b630: b7 41 30 80 05 64 9a 47 98 f5 33 33 4e a7 07 8e .A0..d.G..33N... b640: 25 1e bb c3 a1 41 31 01 06 ef 54 4b 6a ed a5 33 %....A1...TKj..3 b650: 4d 94 55 b0 d9 b4 8d f4 b3 41 32 01 06 b6 eb f1 M.U......A2..... b660: 74 7a 92 7d 4c 95 df 69 8e 21 e8 0e b5 41 33 01 tz.}L..i.!...A3. b670: 06 ff 04 ef 7e 28 43 7c 44 b5 bb d4 49 92 5d 53 ....~(C|D...I.]S b680: 8d 41 34 01 06 9e 15 db 8a 32 1e 5c 45 bc 93 30 .A4......2.\E..0 b690: 8a 7e d9 82 46 41 35 01 01 fd d9 51 26 1c 91 69 .~..FA5....Q&..i b6a0: 4b b9 4e d0 de d5 96 3b d7 41 36 01 06 1a 65 64 K.N....;.A6...ed b6b0: 73 2f 13 e7 4f ad aa 40 c6 c7 ee 2e 3b 41 37 01 s/..O..@....;A7. b6c0: 06 21 12 90 05 66 d5 d1 11 b2 f0 00 a0 c9 06 29 .!...f.........) b6d0: 10 42 41 01 00 08 52 45 54 4e 12 4a 04 05 0d 53 .BA...RETN.J...S b6e0: 75 63 63 65 73 73 00 0d 4e 6f 74 20 53 75 70 70 uccess..Not Supp b6f0: 6f 72 74 65 64 00 0d 49 6e 76 61 6c 69 64 20 50 orted..Invalid P b700: 61 72 61 6d 65 74 65 72 00 0d 41 63 63 65 73 73 arameter..Access b710: 20 44 65 6e 69 65 64 00 0d 53 79 73 74 65 6d 20 Denied..System b720: 42 75 73 79 00 08 49 54 45 4d 12 49 7d 54 12 0f Busy..ITEM.I}T.. b730: 02 0a 0e 0d 57 61 6b 65 4f 6e 4c 41 4e 00 12 19 ....WakeOnLAN... b740: 02 00 0d 45 74 68 65 72 6e 65 74 4c 41 4e 4f 70 ...EthernetLANOp b750: 74 69 6f 6e 52 4f 4d 00 12 13 02 00 0d 55 53 42 tionROM......USB b760: 42 49 4f 53 53 75 70 70 6f 72 74 00 12 10 02 00 BIOSSupport..... b770: 0d 41 6c 77 61 79 73 4f 6e 55 53 42 00 12 0f 02 .AlwaysOnUSB.... b780: 01 0d 54 72 61 63 6b 50 6f 69 6e 74 00 12 0d 02 ..TrackPoint.... b790: 01 0d 54 6f 75 63 68 50 61 64 00 12 0e 02 00 0d ..TouchPad...... b7a0: 46 6e 4b 65 79 4c 6f 63 6b 00 12 15 02 0a 04 0d FnKeyLock....... b7b0: 54 68 69 6e 6b 50 61 64 4e 75 6d 4c 6f 63 6b 00 ThinkPadNumLock. b7c0: 12 14 02 0a 0c 0d 50 6f 77 65 72 4f 6e 4e 75 6d ......PowerOnNum b7d0: 4c 6f 63 6b 00 12 17 02 0a 05 0d 42 6f 6f 74 44 Lock.......BootD b7e0: 69 73 70 6c 61 79 44 65 76 69 63 65 00 12 0e 02 isplayDevice.... b7f0: 00 0d 53 70 65 65 64 53 74 65 70 00 12 21 02 0a ..SpeedStep..!.. b800: 09 0d 41 64 61 70 74 69 76 65 54 68 65 72 6d 61 ..AdaptiveTherma b810: 6c 4d 61 6e 61 67 65 6d 65 6e 74 41 43 00 12 26 lManagementAC..& b820: 02 0a 09 0d 41 64 61 70 74 69 76 65 54 68 65 72 ....AdaptiveTher b830: 6d 61 6c 4d 61 6e 61 67 65 6d 65 6e 74 42 61 74 malManagementBat b840: 74 65 72 79 00 12 10 02 0a 06 0d 43 44 52 4f 4d tery.......CDROM b850: 53 70 65 65 64 00 12 17 02 01 0d 43 50 55 50 6f Speed......CPUPo b860: 77 65 72 4d 61 6e 61 67 65 6d 65 6e 74 00 12 15 werManagement... b870: 02 00 0d 50 6f 77 65 72 43 6f 6e 74 72 6f 6c 42 ...PowerControlB b880: 65 65 70 00 12 14 02 00 0d 4c 6f 77 42 61 74 74 eep......LowBatt b890: 65 72 79 41 6c 61 72 6d 00 12 11 02 00 0d 50 61 eryAlarm......Pa b8a0: 73 73 77 6f 72 64 42 65 65 70 00 12 11 02 00 0d sswordBeep...... b8b0: 4b 65 79 62 6f 61 72 64 42 65 65 70 00 12 17 02 KeyboardBeep.... b8c0: 00 0d 45 78 74 65 6e 64 65 64 4d 65 6d 6f 72 79 ..ExtendedMemory b8d0: 54 65 73 74 00 12 18 02 0a 07 0d 53 41 54 41 43 Test.......SATAC b8e0: 6f 6e 74 72 6f 6c 6c 65 72 4d 6f 64 65 00 12 18 ontrollerMode... b8f0: 02 00 0d 43 6f 72 65 4d 75 6c 74 69 50 72 6f 63 ...CoreMultiProc b900: 65 73 73 69 6e 67 00 12 1d 02 00 0d 56 69 72 74 essing......Virt b910: 75 61 6c 69 7a 61 74 69 6f 6e 54 65 63 68 6e 6f ualizationTechno b920: 6c 6f 67 79 00 12 14 02 00 0d 4c 6f 63 6b 42 49 logy......LockBI b930: 4f 53 53 65 74 74 69 6e 67 00 12 1b 02 0a 0b 0d OSSetting....... b940: 4d 69 6e 69 6d 75 6d 50 61 73 73 77 6f 72 64 4c MinimumPasswordL b950: 65 6e 67 74 68 00 12 21 02 00 0d 42 49 4f 53 50 ength..!...BIOSP b960: 61 73 73 77 6f 72 64 41 74 55 6e 61 74 74 65 6e asswordAtUnatten b970: 64 65 64 42 6f 6f 74 00 12 28 02 00 0d 46 69 6e dedBoot..(...Fin b980: 67 65 72 70 72 69 6e 74 50 72 65 64 65 73 6b 74 gerprintPredeskt b990: 6f 70 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e opAuthentication b9a0: 00 12 1f 02 0a 08 0d 46 69 6e 67 65 72 70 72 69 .......Fingerpri b9b0: 6e 74 52 65 61 64 65 72 50 72 69 6f 72 69 74 79 ntReaderPriority b9c0: 00 12 1d 02 0a 03 0d 46 69 6e 67 65 72 70 72 69 .......Fingerpri b9d0: 6e 74 53 65 63 75 72 69 74 79 4d 6f 64 65 00 12 ntSecurityMode.. b9e0: 12 02 0a 02 0d 53 65 63 75 72 69 74 79 43 68 69 .....SecurityChi b9f0: 70 00 12 19 02 00 0d 42 49 4f 53 55 70 64 61 74 p......BIOSUpdat ba00: 65 42 79 45 6e 64 55 73 65 72 73 00 12 1c 02 00 eByEndUsers..... ba10: 0d 44 61 74 61 45 78 65 63 75 74 69 6f 6e 50 72 .DataExecutionPr ba20: 65 76 65 6e 74 69 6f 6e 00 12 16 02 00 0d 45 74 evention......Et ba30: 68 65 72 6e 65 74 4c 41 4e 41 63 63 65 73 73 00 hernetLANAccess. ba40: 12 16 02 00 0d 57 69 72 65 6c 65 73 73 4c 41 4e .....WirelessLAN ba50: 41 63 63 65 73 73 00 12 16 02 00 0d 57 69 72 65 Access......Wire ba60: 6c 65 73 73 57 41 4e 41 63 63 65 73 73 00 12 14 lessWANAccess... ba70: 02 00 0d 42 6c 75 65 74 6f 6f 74 68 41 63 63 65 ...BluetoothAcce ba80: 73 73 00 12 16 02 00 0d 57 69 72 65 6c 65 73 73 ss......Wireless ba90: 55 53 42 41 63 63 65 73 73 00 12 10 02 00 0d 4d USBAccess......M baa0: 6f 64 65 6d 41 63 63 65 73 73 00 12 12 02 00 0d odemAccess...... bab0: 55 53 42 50 6f 72 74 41 63 63 65 73 73 00 12 13 USBPortAccess... bac0: 02 00 0d 49 45 45 45 31 33 39 34 41 63 63 65 73 ...IEEE1394Acces bad0: 73 00 12 16 02 00 0d 45 78 70 72 65 73 73 43 61 s......ExpressCa bae0: 72 64 41 63 63 65 73 73 00 12 19 02 00 0d 50 43 rdAccess......PC baf0: 49 45 78 70 72 65 73 73 53 6c 6f 74 41 63 63 65 IExpressSlotAcce bb00: 73 73 00 12 13 02 00 0d 55 6c 74 72 61 62 61 79 ss......Ultrabay bb10: 41 63 63 65 73 73 00 12 19 02 00 0d 4d 65 6d 6f Access......Memo bb20: 72 79 43 61 72 64 53 6c 6f 74 41 63 63 65 73 73 ryCardSlotAccess bb30: 00 12 18 02 00 0d 53 6d 61 72 74 43 61 72 64 53 ......SmartCardS bb40: 6c 6f 74 41 63 63 65 73 73 00 12 1b 02 00 0d 49 lotAccess......I bb50: 6e 74 65 67 72 61 74 65 64 43 61 6d 65 72 61 41 ntegratedCameraA bb60: 63 63 65 73 73 00 12 15 02 00 0d 4d 69 63 72 6f ccess......Micro bb70: 70 68 6f 6e 65 41 63 63 65 73 73 00 12 0e 02 0a phoneAccess..... bb80: 0a 0d 42 6f 6f 74 4d 6f 64 65 00 12 16 02 00 0d ..BootMode...... bb90: 53 74 61 72 74 75 70 4f 70 74 69 6f 6e 4b 65 79 StartupOptionKey bba0: 73 00 12 1c 02 00 0d 42 6f 6f 74 44 65 76 69 63 s......BootDevic bbb0: 65 4c 69 73 74 46 31 32 4f 70 74 69 6f 6e 00 12 eListF12Option.. bbc0: 0f 02 0a 64 0d 42 6f 6f 74 4f 72 64 65 72 00 12 ...d.BootOrder.. bbd0: 10 02 00 0d 57 69 4d 41 58 41 63 63 65 73 73 00 ....WiMAXAccess. bbe0: 12 14 02 0a 0d 0d 47 72 61 70 68 69 63 73 44 65 ......GraphicsDe bbf0: 76 69 63 65 00 12 0f 02 00 0d 54 58 54 46 65 61 vice......TXTFea bc00: 74 75 72 65 00 12 0f 02 00 0d 56 54 64 46 65 61 ture......VTdFea bc10: 74 75 72 65 00 12 10 02 0a 0f 0d 41 4d 54 43 6f ture.......AMTCo bc20: 6e 74 72 6f 6c 00 12 26 02 00 0d 46 69 6e 67 65 ntrol..&...Finge bc30: 72 70 72 69 6e 74 50 61 73 73 77 6f 72 64 41 75 rprintPasswordAu bc40: 74 68 65 6e 74 69 63 61 74 69 6f 6e 00 12 1c 02 thentication.... bc50: 00 0d 46 69 6e 67 65 72 70 72 69 6e 74 52 65 61 ..FingerprintRea bc60: 64 65 72 41 63 63 65 73 73 00 12 25 02 00 0d 4f derAccess..%...O bc70: 73 44 65 74 65 63 74 69 6f 6e 46 6f 72 53 77 69 sDetectionForSwi bc80: 74 63 68 61 62 6c 65 47 72 61 70 68 69 63 73 00 tchableGraphics. bc90: 12 20 02 0a 0f 0d 43 6f 6d 70 75 74 72 61 63 65 . ....Computrace bca0: 4d 6f 64 75 6c 65 41 63 74 69 76 61 74 69 6f 6e ModuleActivation bcb0: 00 12 1e 02 01 0d 50 43 49 45 78 70 72 65 73 73 ......PCIExpress bcc0: 50 6f 77 65 72 4d 61 6e 61 67 65 6d 65 6e 74 00 PowerManagement. bcd0: 12 19 02 0a 0f 0d 41 54 70 4d 6f 64 75 6c 65 41 ......ATpModuleA bce0: 63 74 69 76 61 74 69 6f 6e 00 12 14 02 00 0d 65 ctivation......e bcf0: 53 41 54 41 50 6f 72 74 41 63 63 65 73 73 00 12 SATAPortAccess.. bd00: 1c 02 00 0d 48 61 72 64 77 61 72 65 50 61 73 73 ....HardwarePass bd10: 77 6f 72 64 4d 61 6e 61 67 65 72 00 12 1d 02 00 wordManager..... bd20: 0d 48 79 70 65 72 54 68 72 65 61 64 69 6e 67 54 .HyperThreadingT bd30: 65 63 68 6e 6f 6c 6f 67 79 00 12 12 02 00 0d 46 echnology......F bd40: 6e 43 74 72 6c 4b 65 79 53 77 61 70 00 12 19 02 nCtrlKeySwap.... bd50: 00 0d 42 49 4f 53 50 61 73 73 77 6f 72 64 41 74 ..BIOSPasswordAt bd60: 52 65 62 6f 6f 74 00 12 11 02 00 0d 4f 6e 42 79 Reboot......OnBy bd70: 41 63 41 74 74 61 63 68 00 12 11 02 0a 64 0d 4e AcAttach.....d.N bd80: 65 74 77 6f 72 6b 42 6f 6f 74 00 12 12 02 00 0d etworkBoot...... bd90: 42 6f 6f 74 4f 72 64 65 72 4c 6f 63 6b 00 12 0f BootOrderLock... bda0: 02 0a 10 0d 55 53 42 33 30 4d 6f 64 65 00 12 16 ....USB30Mode... bdb0: 02 0a 11 0d 45 78 70 72 65 73 73 43 61 72 64 53 ....ExpressCardS bdc0: 70 65 65 64 00 12 19 02 00 0d 52 61 70 69 64 53 peed......RapidS bdd0: 74 61 72 74 54 65 63 68 6e 6f 6c 6f 67 79 00 12 tartTechnology.. bde0: 1a 02 0a 12 0d 4b 65 79 62 6f 61 72 64 49 6c 6c .....KeyboardIll bdf0: 75 6d 69 6e 61 74 69 6f 6e 00 12 15 02 00 0d 49 umination......I be00: 50 76 34 4e 65 74 77 6f 72 6b 53 74 61 63 6b 00 Pv4NetworkStack. be10: 12 15 02 00 0d 49 50 76 36 4e 65 74 77 6f 72 6b .....IPv6Network be20: 53 74 61 63 6b 00 12 19 02 0a 13 0d 55 65 66 69 Stack.......Uefi be30: 50 78 65 42 6f 6f 74 50 72 69 6f 72 69 74 79 00 PxeBootPriority. be40: 12 24 02 00 0d 50 68 79 73 69 63 61 6c 50 72 65 .$...PhysicalPre be50: 73 65 6e 63 65 46 6f 72 54 70 6d 50 72 6f 76 69 senceForTpmProvi be60: 73 69 6f 6e 00 12 20 02 00 0d 50 68 79 73 69 63 sion.. ...Physic be70: 61 6c 50 72 65 73 65 6e 63 65 46 6f 72 54 70 6d alPresenceForTpm be80: 43 6c 65 61 72 00 12 1d 02 00 0d 53 65 63 75 72 Clear......Secur be90: 65 52 6f 6c 6c 42 61 63 6b 50 72 65 76 65 6e 74 eRollBackPrevent bea0: 69 6f 6e 00 12 17 02 00 0d 52 65 45 6e 74 72 79 ion......ReEntry beb0: 42 6f 6f 74 4d 61 6e 61 67 65 72 00 12 1f 02 0a BootManager..... bec0: 14 0d 57 69 72 65 6c 65 73 73 4c 41 4e 61 6e 64 ..WirelessLANand bed0: 57 69 4d 41 58 52 61 64 69 6f 73 00 12 17 02 0a WiMAXRadios..... bee0: 15 0d 43 68 61 6e 67 65 54 6f 46 31 46 31 32 4b ..ChangeToF1F12K bef0: 65 79 73 00 12 0f 02 00 0d 53 65 63 75 72 65 42 eys......SecureB bf00: 6f 6f 74 00 08 56 53 45 4c 12 42 28 16 12 13 02 oot..VSEL.B(.... bf10: 0d 44 69 73 61 62 6c 65 00 0d 45 6e 61 62 6c 65 .Disable..Enable bf20: 00 12 16 02 0d 44 69 73 61 62 6c 65 00 0d 41 75 .....Disable..Au bf30: 74 6f 6d 61 74 69 63 00 12 1d 03 0d 41 63 74 69 tomatic.....Acti bf40: 76 65 00 0d 49 6e 61 63 74 69 76 65 00 0d 44 69 ve..Inactive..Di bf50: 73 61 62 6c 65 00 12 10 02 0d 4e 6f 72 6d 61 6c sable.....Normal bf60: 00 0d 48 69 67 68 00 12 1d 02 0d 49 6e 64 65 70 ..High.....Indep bf70: 65 6e 64 65 6e 74 00 0d 53 79 6e 63 68 72 6f 6e endent..Synchron bf80: 69 7a 65 64 00 12 35 05 0d 4c 43 44 00 0d 56 47 ized..5..LCD..VG bf90: 41 00 0d 44 69 67 69 74 61 6c 00 0d 44 69 67 69 A..Digital..Digi bfa0: 74 61 6c 31 6f 6e 44 6f 63 6b 00 0d 44 69 67 69 tal1onDock..Digi bfb0: 74 61 6c 32 6f 6e 44 6f 63 6b 00 12 18 03 0d 48 tal2onDock.....H bfc0: 69 67 68 00 0d 4e 6f 72 6d 61 6c 00 0d 53 69 6c igh..Normal..Sil bfd0: 65 6e 74 00 12 17 02 0d 43 6f 6d 70 61 74 69 62 ent.....Compatib bfe0: 69 6c 69 74 79 00 0d 41 48 43 49 00 12 1a 02 0d ility..AHCI..... bff0: 45 78 74 65 72 6e 61 6c 00 0d 49 6e 74 65 72 6e External..Intern c000: 61 6c 4f 6e 6c 79 00 12 21 02 0d 4d 61 78 69 6d alOnly..!..Maxim c010: 69 7a 65 50 65 72 66 6f 72 6d 61 6e 63 65 00 0d izePerformance.. c020: 42 61 6c 61 6e 63 65 64 00 12 16 02 0d 51 75 69 Balanced.....Qui c030: 63 6b 00 0d 44 69 61 67 6e 6f 73 74 69 63 73 00 ck..Diagnostics. c040: 12 29 0a 0d 44 69 73 61 62 6c 65 00 0d 34 00 0d .)..Disable..4.. c050: 35 00 0d 36 00 0d 37 00 0d 38 00 0d 39 00 0d 31 5..6..7..8..9..1 c060: 30 00 0d 31 31 00 0d 31 32 00 12 11 03 0d 41 75 0..11..12.....Au c070: 74 6f 00 0d 4f 6e 00 0d 4f 66 66 00 12 2d 03 0d to..On..Off..-.. c080: 49 6e 74 65 67 72 61 74 65 64 47 66 78 00 0d 44 IntegratedGfx..D c090: 69 73 63 72 65 74 65 47 66 78 00 0d 53 77 69 74 iscreteGfx..Swit c0a0: 63 68 61 62 6c 65 47 66 78 00 12 29 04 0d 44 69 chableGfx..)..Di c0b0: 73 61 62 6c 65 00 0d 41 43 4f 6e 6c 79 00 0d 41 sable..ACOnly..A c0c0: 43 61 6e 64 42 61 74 74 65 72 79 00 0d 45 6e 61 CandBattery..Ena c0d0: 62 6c 65 00 12 1c 03 0d 44 69 73 61 62 6c 65 00 ble.....Disable. c0e0: 0d 45 6e 61 62 6c 65 00 0d 44 69 73 61 62 6c 65 .Enable..Disable c0f0: 00 12 1e 03 0d 44 69 73 61 62 6c 65 00 0d 45 6e .....Disable..En c100: 61 62 6c 65 00 0d 41 75 74 6f 6d 61 74 69 63 00 able..Automatic. c110: 12 1a 02 0d 47 65 6e 65 72 61 74 69 6f 6e 31 00 ....Generation1. c120: 0d 41 75 74 6f 6d 61 74 69 63 00 12 27 03 0d 54 .Automatic..'..T c130: 68 69 6e 6b 4c 69 67 68 74 4f 6e 6c 79 00 0d 42 hinkLightOnly..B c140: 61 63 6b 6c 69 67 68 74 4f 6e 6c 79 00 0d 42 6f acklightOnly..Bo c150: 74 68 00 12 18 02 0d 49 50 76 34 46 69 72 73 74 th.....IPv4First c160: 00 0d 49 50 76 36 46 69 72 73 74 00 12 0b 02 0d ..IPv6First..... c170: 4f 66 66 00 0d 4f 6e 00 12 13 02 0d 44 65 66 61 Off..On.....Defa c180: 75 6c 74 00 0d 4c 65 67 61 63 79 00 08 56 4c 53 ult..Legacy..VLS c190: 54 12 48 07 0f 0d 48 44 44 30 00 0d 48 44 44 31 T.H...HDD0..HDD1 c1a0: 00 0d 48 44 44 32 00 0d 48 44 44 33 00 0d 48 44 ..HDD2..HDD3..HD c1b0: 44 34 00 0d 50 43 49 4c 41 4e 00 0d 41 54 41 50 D4..PCILAN..ATAP c1c0: 49 43 44 30 00 0d 41 54 41 50 49 43 44 31 00 0d ICD0..ATAPICD1.. c1d0: 41 54 41 50 49 43 44 32 00 0d 55 53 42 46 44 44 ATAPICD2..USBFDD c1e0: 00 0d 55 53 42 43 44 00 0d 55 53 42 48 44 44 00 ..USBCD..USBHDD. c1f0: 0d 4f 74 68 65 72 48 44 44 00 0d 4f 74 68 65 72 .OtherHDD..Other c200: 43 44 00 0d 4e 4f 44 45 56 00 08 50 45 4e 43 12 CD..NODEV..PENC. c210: 13 02 0d 61 73 63 69 69 00 0d 73 63 61 6e 63 6f ...ascii..scanco c220: 64 65 00 08 50 4b 42 44 12 0e 03 0d 75 73 00 0d de..PKBD....us.. c230: 66 72 00 0d 67 72 00 08 50 54 59 50 12 36 08 0d fr..gr..PTYP.6.. c240: 70 61 70 00 0d 70 6f 70 00 0d 75 68 64 70 31 00 pap..pop..uhdp1. c250: 0d 6d 68 64 70 31 00 0d 75 68 64 70 32 00 0d 6d .mhdp1..uhdp2..m c260: 68 64 70 32 00 0d 75 68 64 70 33 00 0d 6d 68 64 hdp2..uhdp3..mhd c270: 70 33 00 5b 01 4d 57 4d 49 07 08 50 43 46 47 11 p3.[.MWMI..PCFG. c280: 03 0a 18 08 49 42 55 46 11 04 0b 00 01 08 49 4c ....IBUF......IL c290: 45 4e 00 08 50 53 54 52 11 03 0a 81 14 4a 20 57 EN..PSTR.....J W c2a0: 51 41 30 01 5b 23 4d 57 4d 49 ff ff a0 13 92 93 QA0.[#MWMI...... c2b0: 57 4d 49 53 00 68 00 5b 27 4d 57 4d 49 a4 0d 00 WMIS.h.['MWMI... c2c0: 70 83 88 49 54 45 4d 57 49 54 4d 00 60 70 83 88 p..ITEMWITM.`p.. c2d0: 60 00 00 61 70 83 88 60 01 00 62 a0 20 95 61 0a `..ap..`..b. .a. c2e0: 64 73 62 0d 2c 00 66 70 83 88 56 53 45 4c 61 00 dsb.,.fp..VSELa. c2f0: 63 73 66 83 88 63 57 53 45 4c 00 67 a1 42 1a 70 csf..cWSEL.g.B.p c300: 87 56 4c 53 54 63 a0 1c 92 94 57 4c 53 30 63 73 .VLSTc....WLS0cs c310: 62 0d 2c 00 67 73 67 83 88 56 4c 53 54 57 4c 53 b.,.gsg..VLSTWLS c320: 30 00 62 a0 1c 92 94 57 4c 53 31 63 73 62 0d 3a 0.b....WLS1csb.: c330: 00 67 73 67 83 88 56 4c 53 54 57 4c 53 31 00 62 .gsg..VLSTWLS1.b c340: a0 1c 92 94 57 4c 53 32 63 73 62 0d 3a 00 67 73 ....WLS2csb.:.gs c350: 67 83 88 56 4c 53 54 57 4c 53 32 00 62 a0 1c 92 g..VLSTWLS2.b... c360: 94 57 4c 53 33 63 73 62 0d 3a 00 67 73 67 83 88 .WLS3csb.:.gsg.. c370: 56 4c 53 54 57 4c 53 33 00 62 a0 1c 92 94 57 4c VLSTWLS3.b....WL c380: 53 34 63 73 62 0d 3a 00 67 73 67 83 88 56 4c 53 S4csb.:.gsg..VLS c390: 54 57 4c 53 34 00 62 a0 1c 92 94 57 4c 53 35 63 TWLS4.b....WLS5c c3a0: 73 62 0d 3a 00 67 73 67 83 88 56 4c 53 54 57 4c sb.:.gsg..VLSTWL c3b0: 53 35 00 62 a0 1c 92 94 57 4c 53 36 63 73 62 0d S5.b....WLS6csb. c3c0: 3a 00 67 73 67 83 88 56 4c 53 54 57 4c 53 36 00 :.gsg..VLSTWLS6. c3d0: 62 a0 1c 92 94 57 4c 53 37 63 73 62 0d 3a 00 67 b....WLS7csb.:.g c3e0: 73 67 83 88 56 4c 53 54 57 4c 53 37 00 62 a0 1c sg..VLSTWLS7.b.. c3f0: 92 94 57 4c 53 38 63 73 62 0d 3a 00 67 73 67 83 ..WLS8csb.:.gsg. c400: 88 56 4c 53 54 57 4c 53 38 00 62 a0 1c 92 94 57 .VLSTWLS8.b....W c410: 4c 53 39 63 73 62 0d 3a 00 67 73 67 83 88 56 4c LS9csb.:.gsg..VL c420: 53 54 57 4c 53 39 00 62 a0 1c 92 94 57 4c 53 41 STWLS9.b....WLSA c430: 63 73 62 0d 3a 00 67 73 67 83 88 56 4c 53 54 57 csb.:.gsg..VLSTW c440: 4c 53 41 00 62 a0 1c 92 94 57 4c 53 42 63 73 62 LSA.b....WLSBcsb c450: 0d 3a 00 67 73 67 83 88 56 4c 53 54 57 4c 53 42 .:.gsg..VLSTWLSB c460: 00 62 a0 1c 92 94 57 4c 53 43 63 73 62 0d 3a 00 .b....WLSCcsb.:. c470: 67 73 67 83 88 56 4c 53 54 57 4c 53 43 00 62 a0 gsg..VLSTWLSC.b. c480: 1c 92 94 57 4c 53 44 63 73 62 0d 3a 00 67 73 67 ...WLSDcsb.:.gsg c490: 83 88 56 4c 53 54 57 4c 53 44 00 62 70 62 67 5b ..VLSTWLSD.bpbg[ c4a0: 27 4d 57 4d 49 a4 67 14 41 05 57 4d 41 31 03 5b 'MWMI.g.A.WMA1.[ c4b0: 23 4d 57 4d 49 ff ff a0 09 93 87 6a 00 70 0a 02 #MWMI......j.p.. c4c0: 60 a1 28 70 43 41 52 47 6a 60 a0 1f 93 60 00 70 `.(pCARGj`...`.p c4d0: 57 53 45 54 49 54 45 4d 56 53 45 4c 60 a0 0c 93 WSETITEMVSEL`... c4e0: 60 00 70 57 4d 49 53 01 00 60 5b 27 4d 57 4d 49 `.pWMIS..`['MWMI c4f0: a4 83 88 52 45 54 4e 60 00 14 4c 04 57 4d 41 32 ...RETN`..L.WMA2 c500: 03 5b 23 4d 57 4d 49 ff ff 70 43 41 52 47 6a 60 .[#MWMI..pCARGj` c510: a0 26 93 60 00 a0 13 92 93 49 4c 45 4e 00 70 43 .&.`.....ILEN.pC c520: 50 41 53 49 42 55 46 00 60 a0 0d 93 60 00 70 57 PASIBUF.`...`.pW c530: 4d 49 53 0a 02 00 60 5b 27 4d 57 4d 49 a4 83 88 MIS...`['MWMI... c540: 52 45 54 4e 60 00 14 4c 04 57 4d 41 33 03 5b 23 RETN`..L.WMA3.[# c550: 4d 57 4d 49 ff ff 70 43 41 52 47 6a 60 a0 26 93 MWMI..pCARGj`.&. c560: 60 00 a0 13 92 93 49 4c 45 4e 00 70 43 50 41 53 `.....ILEN.pCPAS c570: 49 42 55 46 00 60 a0 0d 93 60 00 70 57 4d 49 53 IBUF.`...`.pWMIS c580: 0a 03 00 60 5b 27 4d 57 4d 49 a4 83 88 52 45 54 ...`['MWMI...RET c590: 4e 60 00 14 4c 04 57 4d 41 34 03 5b 23 4d 57 4d N`..L.WMA4.[#MWM c5a0: 49 ff ff 70 43 41 52 47 6a 60 a0 26 93 60 00 a0 I..pCARGj`.&.`.. c5b0: 13 92 93 49 4c 45 4e 00 70 43 50 41 53 49 42 55 ...ILEN.pCPASIBU c5c0: 46 00 60 a0 0d 93 60 00 70 57 4d 49 53 0a 04 00 F.`...`.pWMIS... c5d0: 60 5b 27 4d 57 4d 49 a4 83 88 52 45 54 4e 60 00 `['MWMI...RETN`. c5e0: 14 40 07 57 51 41 35 01 5b 23 4d 57 4d 49 ff ff .@.WQA5.[#MWMI.. c5f0: 70 57 4d 49 53 0a 05 00 60 70 57 53 50 4d 88 50 pWMIS...`pWSPM.P c600: 43 46 47 00 00 70 57 53 50 53 88 50 43 46 47 0a CFG..pWSPS.PCFG. c610: 04 00 70 57 53 4d 4e 88 50 43 46 47 0a 08 00 70 ..pWSMN.PCFG...p c620: 57 53 4d 58 88 50 43 46 47 0a 0c 00 70 57 53 45 WSMX.PCFG...pWSE c630: 4e 88 50 43 46 47 0a 10 00 70 57 53 4b 42 88 50 N.PCFG...pWSKB.P c640: 43 46 47 0a 14 00 5b 27 4d 57 4d 49 a4 50 43 46 CFG...['MWMI.PCF c650: 47 14 47 05 57 4d 41 36 03 5b 23 4d 57 4d 49 ff G.G.WMA6.[#MWMI. c660: ff a0 09 93 87 6a 00 70 0a 02 60 a1 2e 70 43 41 .....j.p..`..pCA c670: 52 47 6a 60 a0 25 93 60 00 a0 12 92 93 49 4c 45 RGj`.%.`.....ILE c680: 4e 00 70 53 50 41 53 49 42 55 46 60 a0 0d 93 60 N.pSPASIBUF`...` c690: 00 70 57 4d 49 53 0a 06 00 60 5b 27 4d 57 4d 49 .pWMIS...`['MWMI c6a0: a4 83 88 52 45 54 4e 60 00 14 44 0b 57 4d 41 37 ...RETN`..D.WMA7 c6b0: 03 a0 08 93 87 6a 00 a4 0d 00 70 43 41 52 47 6a .....j....pCARGj c6c0: 60 a0 4a 09 93 60 00 70 47 49 54 4d 49 42 55 46 `.J..`.pGITMIBUF c6d0: 49 54 45 4d 61 a0 07 93 61 ff a4 0d 00 70 83 88 ITEMa...a....p.. c6e0: 49 54 45 4d 61 00 60 70 83 88 60 00 00 61 a0 3c ITEMa.`p..`..a.< c6f0: 95 61 0a 64 70 83 88 56 53 45 4c 61 00 63 70 83 .a.dp..VSELa.cp. c700: 88 63 00 00 62 70 87 63 64 70 01 65 a2 1e 95 65 .c..bp.cdp.e...e c710: 64 70 83 88 63 65 00 66 a0 10 92 93 87 66 00 73 dp..ce.f.....f.s c720: 62 0d 2c 00 67 73 67 66 62 75 65 a1 30 70 83 88 b.,.gsgfbue.0p.. c730: 56 4c 53 54 00 00 62 70 87 56 4c 53 54 64 70 01 VLST..bp.VLSTdp. c740: 65 a2 1a 95 65 64 70 83 88 56 4c 53 54 65 00 66 e...edp..VLSTe.f c750: 73 62 0d 2c 00 67 73 67 66 62 75 65 a4 62 14 4a sb.,.gsgfbue.b.J c760: 06 43 41 52 47 01 70 87 68 60 a0 12 93 60 00 70 .CARG.p.h`...`.p c770: 00 49 42 55 46 70 00 49 4c 45 4e a4 00 a0 0a 92 .IBUFp.ILEN..... c780: 93 8e 68 0a 02 a4 0a 02 a0 09 92 95 60 0a ff a4 ..h.........`... c790: 0a 02 70 68 49 42 55 46 76 60 70 83 88 49 42 55 ..phIBUFv`p..IBU c7a0: 46 60 00 61 a0 19 91 93 61 0a 3b 93 61 0a 2a 70 F`.a....a.;.a.*p c7b0: 00 88 49 42 55 46 60 00 70 60 49 4c 45 4e a1 08 ..IBUF`.p`ILEN.. c7c0: 70 87 68 49 4c 45 4e a4 00 14 49 06 53 43 4d 50 p.hILEN...I.SCMP c7d0: 03 70 87 68 60 a0 06 93 60 00 a4 00 75 60 08 53 .p.h`...`...u`.S c7e0: 54 52 31 11 02 60 70 68 53 54 52 31 76 60 70 00 TR1..`phSTR1v`p. c7f0: 61 70 6a 62 a2 21 95 61 60 70 83 88 53 54 52 31 apjb.!.a`p..STR1 c800: 61 00 63 70 83 88 69 62 00 64 a0 07 92 93 63 64 a.cp..ib.d....cd c810: a4 00 75 61 75 62 70 83 88 69 62 00 64 a0 06 93 ..uaubp..ib.d... c820: 64 00 a4 01 a0 0c 91 93 64 0a 2c 93 64 0a 3a a4 d.......d.,.d.:. c830: 01 a4 00 14 2c 47 49 54 4d 02 70 00 60 70 87 69 ....,GITM.p.`p.i c840: 61 a2 1c 95 60 61 70 83 88 83 88 69 60 00 01 00 a...`ap....i`... c850: 63 a0 0a 53 43 4d 50 63 68 00 a4 60 75 60 a4 ff c..SCMPch..`u`.. c860: 14 28 47 53 45 4c 03 70 00 60 70 87 68 61 a2 18 .(GSEL.p.`p.ha.. c870: 95 60 61 70 83 88 68 60 00 62 a0 0a 53 43 4d 50 .`ap..h`.b..SCMP c880: 62 69 6a a4 60 75 60 a4 ff 14 10 53 4c 45 4e 02 bij.`u`....SLEN. c890: 70 83 88 68 69 00 60 a4 87 60 14 12 43 4c 52 50 p..hi.`..`..CLRP c8a0: 00 70 00 57 50 41 53 70 00 57 50 4e 57 14 48 04 .p.WPASp.WPNW.H. c8b0: 47 50 41 53 02 70 69 60 70 00 61 a2 2f 92 94 61 GPAS.pi`p.a./..a c8c0: 0a 80 70 83 88 68 60 00 62 a0 14 91 93 62 0a 2c ..p..h`.b....b., c8d0: 93 62 00 70 00 88 50 53 54 52 61 00 a4 61 70 62 .b.p..PSTRa..apb c8e0: 88 50 53 54 52 61 00 75 60 75 61 70 00 88 50 53 .PSTRa.u`uap..PS c8f0: 54 52 61 00 a4 ff 14 4c 08 43 50 41 53 02 43 4c TRa....L.CPAS.CL c900: 52 50 70 69 60 70 47 50 41 53 68 60 61 a0 07 93 RPpi`pGPASh`a... c910: 61 ff a4 0a 02 a0 07 93 61 00 a4 0a 02 70 50 53 a.......a....pPS c920: 54 52 57 50 41 53 72 60 61 60 75 60 70 47 53 45 TRWPASr`a`u`pGSE c930: 4c 50 45 4e 43 68 60 66 a0 07 93 66 ff a4 0a 02 LPENCh`f...f.... c940: 70 66 57 45 4e 43 a0 3a 93 66 00 72 60 53 4c 45 pfWENC.:.f.r`SLE c950: 4e 50 45 4e 43 00 60 a0 0d 92 93 83 88 68 60 00 NPENC.`......h`. c960: 0a 2c a4 0a 02 75 60 70 47 53 45 4c 50 4b 42 44 .,...u`pGSELPKBD c970: 68 60 66 a0 07 93 66 ff a4 0a 02 70 66 57 4b 42 h`f...f....pfWKB c980: 44 a4 00 14 42 0f 53 50 41 53 01 43 4c 52 50 70 D...B.SPAS.CLRPp c990: 47 53 45 4c 50 54 59 50 68 00 66 a0 07 93 66 ff GSELPTYPh.f...f. c9a0: a4 0a 02 70 66 57 50 54 59 70 53 4c 45 4e 50 54 ...pfWPTYpSLENPT c9b0: 59 50 66 60 a0 0d 92 93 83 88 68 60 00 0a 2c a4 YPf`......h`..,. c9c0: 0a 02 75 60 70 47 50 41 53 68 60 61 a0 0b 91 93 ..u`pGPASh`a.... c9d0: 61 ff 93 61 00 a4 0a 02 70 50 53 54 52 57 50 41 a..a....pPSTRWPA c9e0: 53 72 60 61 60 a0 0d 92 93 83 88 68 60 00 0a 2c Sr`a`......h`.., c9f0: a4 0a 02 75 60 70 47 50 41 53 68 60 61 a0 07 93 ...u`pGPASh`a... ca00: 61 ff a4 0a 02 a0 0a 93 61 00 70 00 50 53 54 52 a.......a.p.PSTR ca10: 70 50 53 54 52 57 50 4e 57 72 60 61 60 75 60 70 pPSTRWPNWr`a`u`p ca20: 47 53 45 4c 50 45 4e 43 68 60 66 a0 07 93 66 ff GSELPENCh`f...f. ca30: a4 0a 02 70 66 57 45 4e 43 a0 3a 93 66 00 72 60 ...pfWENC.:.f.r` ca40: 53 4c 45 4e 50 45 4e 43 00 60 a0 0d 92 93 83 88 SLENPENC.`...... ca50: 68 60 00 0a 2c a4 0a 02 75 60 70 47 53 45 4c 50 h`..,...u`pGSELP ca60: 4b 42 44 68 60 66 a0 07 93 66 ff a4 0a 02 70 66 KBDh`f...f....pf ca70: 57 4b 42 44 a4 00 14 49 46 57 53 45 54 02 70 49 WKBD...IFWSET.pI ca80: 4c 45 4e 60 75 60 70 47 49 54 4d 49 42 55 46 68 LEN`u`pGITMIBUFh ca90: 61 a0 07 93 61 ff a4 0a 02 70 61 57 49 54 4d 70 a...a....paWITMp caa0: 83 88 68 61 00 63 70 83 88 63 01 00 64 70 87 64 ..ha.cp..c..dp.d cab0: 62 75 62 70 83 88 63 00 00 64 a0 39 95 64 0a 64 bubp..c..d.9.d.d cac0: 70 83 88 69 64 00 65 70 47 53 45 4c 65 49 42 55 p..id.epGSELeIBU cad0: 46 62 66 a0 07 93 66 ff a4 0a 02 70 66 57 53 45 Fbf...f....pfWSE cae0: 4c 72 62 53 4c 45 4e 65 66 62 70 83 88 49 42 55 LrbSLENefbp..IBU caf0: 46 62 00 64 a1 4a 3c 70 0a 3f 57 4c 53 30 70 0a Fb.d.J.. cb90: 62 60 93 64 0a 3a 75 62 70 47 53 45 4c 56 4c 53 b`.d.:ubpGSELVLS cba0: 54 49 42 55 46 62 66 a0 07 93 66 ff a4 0a 02 70 TIBUFbf...f....p cbb0: 66 57 4c 53 31 72 62 53 4c 45 4e 56 4c 53 54 66 fWLS1rbSLENVLSTf cbc0: 62 70 83 88 49 42 55 46 62 00 64 a0 3e 90 95 62 bp..IBUFb.d.>..b cbd0: 60 93 64 0a 3a 75 62 70 47 53 45 4c 56 4c 53 54 `.d.:ubpGSELVLST cbe0: 49 42 55 46 62 66 a0 07 93 66 ff a4 0a 02 70 66 IBUFbf...f....pf cbf0: 57 4c 53 32 72 62 53 4c 45 4e 56 4c 53 54 66 62 WLS2rbSLENVLSTfb cc00: 70 83 88 49 42 55 46 62 00 64 a0 3e 90 95 62 60 p..IBUFb.d.>..b` cc10: 93 64 0a 3a 75 62 70 47 53 45 4c 56 4c 53 54 49 .d.:ubpGSELVLSTI cc20: 42 55 46 62 66 a0 07 93 66 ff a4 0a 02 70 66 57 BUFbf...f....pfW cc30: 4c 53 33 72 62 53 4c 45 4e 56 4c 53 54 66 62 70 LS3rbSLENVLSTfbp cc40: 83 88 49 42 55 46 62 00 64 a0 3e 90 95 62 60 93 ..IBUFb.d.>..b`. cc50: 64 0a 3a 75 62 70 47 53 45 4c 56 4c 53 54 49 42 d.:ubpGSELVLSTIB cc60: 55 46 62 66 a0 07 93 66 ff a4 0a 02 70 66 57 4c UFbf...f....pfWL cc70: 53 34 72 62 53 4c 45 4e 56 4c 53 54 66 62 70 83 S4rbSLENVLSTfbp. cc80: 88 49 42 55 46 62 00 64 a0 3e 90 95 62 60 93 64 .IBUFb.d.>..b`.d cc90: 0a 3a 75 62 70 47 53 45 4c 56 4c 53 54 49 42 55 .:ubpGSELVLSTIBU cca0: 46 62 66 a0 07 93 66 ff a4 0a 02 70 66 57 4c 53 Fbf...f....pfWLS ccb0: 35 72 62 53 4c 45 4e 56 4c 53 54 66 62 70 83 88 5rbSLENVLSTfbp.. ccc0: 49 42 55 46 62 00 64 a0 3e 90 95 62 60 93 64 0a IBUFb.d.>..b`.d. ccd0: 3a 75 62 70 47 53 45 4c 56 4c 53 54 49 42 55 46 :ubpGSELVLSTIBUF cce0: 62 66 a0 07 93 66 ff a4 0a 02 70 66 57 4c 53 36 bf...f....pfWLS6 ccf0: 72 62 53 4c 45 4e 56 4c 53 54 66 62 70 83 88 49 rbSLENVLSTfbp..I cd00: 42 55 46 62 00 64 a0 3e 90 95 62 60 93 64 0a 3a BUFb.d.>..b`.d.: cd10: 75 62 70 47 53 45 4c 56 4c 53 54 49 42 55 46 62 ubpGSELVLSTIBUFb cd20: 66 a0 07 93 66 ff a4 0a 02 70 66 57 4c 53 37 72 f...f....pfWLS7r cd30: 62 53 4c 45 4e 56 4c 53 54 66 62 70 83 88 49 42 bSLENVLSTfbp..IB cd40: 55 46 62 00 64 a0 3e 90 95 62 60 93 64 0a 3a 75 UFb.d.>..b`.d.:u cd50: 62 70 47 53 45 4c 56 4c 53 54 49 42 55 46 62 66 bpGSELVLSTIBUFbf cd60: a0 07 93 66 ff a4 0a 02 70 66 57 4c 53 38 72 62 ...f....pfWLS8rb cd70: 53 4c 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 SLENVLSTfbp..IBU cd80: 46 62 00 64 a0 3e 90 95 62 60 93 64 0a 3a 75 62 Fb.d.>..b`.d.:ub cd90: 70 47 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 pGSELVLSTIBUFbf. cda0: 07 93 66 ff a4 0a 02 70 66 57 4c 53 39 72 62 53 ..f....pfWLS9rbS cdb0: 4c 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 LENVLSTfbp..IBUF cdc0: 62 00 64 a0 3e 90 95 62 60 93 64 0a 3a 75 62 70 b.d.>..b`.d.:ubp cdd0: 47 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 GSELVLSTIBUFbf.. cde0: 93 66 ff a4 0a 02 70 66 57 4c 53 41 72 62 53 4c .f....pfWLSArbSL cdf0: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb ce00: 00 64 a0 3e 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.>..b`.d.:ubpG ce10: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... ce20: 66 ff a4 0a 02 70 66 57 4c 53 42 72 62 53 4c 45 f....pfWLSBrbSLE ce30: 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 00 NVLSTfbp..IBUFb. ce40: 64 a0 3e 90 95 62 60 93 64 0a 3a 75 62 70 47 53 d.>..b`.d.:ubpGS ce50: 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 66 ELVLSTIBUFbf...f ce60: ff a4 0a 02 70 66 57 4c 53 43 72 62 53 4c 45 4e ....pfWLSCrbSLEN ce70: 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 00 64 VLSTfbp..IBUFb.d ce80: a0 3e 90 95 62 60 93 64 0a 3a 75 62 70 47 53 45 .>..b`.d.:ubpGSE ce90: 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 66 ff LVLSTIBUFbf...f. cea0: a4 0a 02 70 66 57 4c 53 44 72 62 53 4c 45 4e 56 ...pfWLSDrbSLENV ceb0: 4c 53 54 66 62 70 83 88 49 42 55 46 62 00 64 a0 LSTfbp..IBUFb.d. cec0: 1e 90 93 64 0a 2c 95 62 60 75 62 70 43 50 41 53 ...d.,.b`ubpCPAS ced0: 49 42 55 46 62 60 a0 07 92 93 60 00 a4 60 a4 00 IBUFb`....`..`.. cee0: 08 57 51 42 41 11 42 8a 0b 9d 08 46 4f 4d 42 01 .WQBA.B....FOMB. cef0: 00 00 00 8d 08 00 00 f2 36 00 00 44 53 00 01 1a ........6..DS... cf00: 7d da 54 a8 c9 9a 00 01 06 18 42 10 13 10 0a 0d }.T.......B..... cf10: 21 02 0b 83 50 4c 18 14 a0 45 41 c8 05 14 95 02 !...PL...EA..... cf20: 21 c3 02 14 0b 70 2e 40 ba 00 e5 28 72 0c 22 02 !....p.@...(r.". cf30: f7 ef 0f 31 0e 88 14 40 48 26 84 44 00 53 21 70 ...1...@H&.D.S!p cf40: 84 a0 5f 01 08 1d a2 c9 a0 00 a7 08 82 b4 65 01 .._...........e. cf50: ba 05 f8 16 a0 1d 42 68 15 0a 30 29 c0 27 98 2c ......Bh..0).'., cf60: 0a 90 0d 26 db 70 64 18 4c e4 18 50 62 c6 80 d2 ...&.pd.L..Pb... cf70: 39 05 d9 04 16 74 a1 28 9a 46 94 04 07 75 0c 11 9....t.(.F...u.. cf80: 82 97 2b 40 f2 04 a4 79 5e b2 3e 08 0d 81 8d 80 ..+@...y^.>..... cf90: 47 91 00 c2 62 2c 53 e2 61 50 1e 40 24 67 a8 28 G...b,S.aP.@$g.( cfa0: 60 7b 9d 88 86 75 9c 4c 12 1c 6a 94 96 28 c0 fc `{...u.L..j..(.. cfb0: c8 34 91 63 6b 7a c4 82 64 d2 86 82 1a ba a7 75 .4.ckz..d......u cfc0: 52 9e 68 c4 83 32 4c 02 8f 82 a1 71 82 b2 20 e4 R.h..2L....q.. . cfd0: 60 a0 28 c0 93 f0 1c 8b 17 20 7c c6 e4 28 10 23 `.(...... |..(.# cfe0: 81 8f 04 1e cd 31 63 81 c2 05 3c 9f 63 88 1c f7 .....1c...<.c... cff0: 50 63 1c 45 e4 04 ef 00 51 8c 56 d0 bc 85 18 2c Pc.E....Q.V...., d000: 9a c1 7a 06 27 83 4e f0 ff 3f 02 2e 03 42 1e 05 ..z.'.N..?...B.. d010: 58 1d 94 a6 61 82 ee 05 bc 1a 1a 13 a0 11 43 ca X...a.........C. d020: 04 38 bb 2f 68 46 6d 09 30 27 40 9b 00 6f 08 42 .8./hFm.0'@..o.B d030: 39 cf 28 c7 72 8a 51 1e 06 62 be 0c 04 8d 12 23 9.(.r.Q..b.....# d040: e6 b9 c4 35 6c 84 18 21 4f 21 50 dc f6 07 41 06 ...5l..!O!P...A. d050: 8d 1b bd 4f 0b 67 75 02 47 ff a4 60 02 4f f9 c0 ...O.gu.G..`.O.. d060: 9e 0d 4e e0 58 a3 c6 38 95 04 8e fd 80 90 06 10 ..N.X..8........ d070: 45 82 47 9d 16 7c 2e f0 d0 0e da 73 3c 81 20 87 E.G..|.....s<. . d080: 70 04 4f 0c 0f 04 1e 03 bb 29 f8 08 e0 13 02 de p.O......)...... d090: 35 a0 ae 06 0f 06 6c d0 e1 30 e3 f5 f0 c3 9d c0 5.....l..0...... d0a0: 49 3e 60 f0 c3 86 07 87 9b e7 c9 1c 59 a9 02 cc I>`.........Y... d0b0: 1e 0e 74 90 f0 69 83 9d 01 30 f2 07 81 1a 99 a1 ..t..i...0...... d0c0: 3d ee 97 0e 43 3e 27 1c 16 13 7b ea a0 e3 01 ff =...C>'...{..... d0d0: 65 e4 39 c3 d3 f7 7c 4d 30 ec c0 d1 03 31 f4 c3 e.9...|M0....1.. d0e0: c6 61 9c 86 ef 1f 3e 2f c0 38 05 78 e4 fe ff 1f .a....>/.8.x.... d0f0: 52 7c 9a e0 47 0b 9f 26 d8 f5 e0 34 9e 03 3c 9c R|..G..&...4..<. d100: b3 f2 61 02 6c f7 13 36 a2 77 0b 8f 06 7b 0a 00 ..a.l..6.w...{.. d110: df f9 05 9c 77 0d 36 58 18 e7 17 e0 71 42 f0 10 ....w.6X....qB.. d120: f8 41 c2 43 e0 03 78 fe 38 43 2b 9d 17 72 60 f0 .A.C..x.8C+..r`. d130: ce 39 30 46 c1 f3 3c 36 4c a0 20 af 01 85 7a 16 .90F..<6L. ...z. d140: 50 18 9f 6a 80 d7 ff ff 54 03 5c 0e 07 b8 93 03 P..j....T.\..... d150: dc 7b 01 bb 38 3c d7 c0 15 7d ae 81 7a 6f 29 6e .{..8<...}..zo)n d160: 8c ba c6 04 79 14 78 a4 89 f2 3c f3 2e 13 e1 d9 ....y.x...<..... d170: c6 d7 1a 4f 21 8e af 35 46 7c 99 78 b7 31 ee c1 ...O!..5F|.x.1.. d180: 3d d6 3c e4 18 e4 68 22 bc 18 04 7c bc f1 b1 06 =.<...h"...|.... d190: bc 62 5e 28 b2 70 ac 01 34 fe ff 8f 35 c0 0d eb .b^(.p..4...5... d1a0: 01 05 7c 47 06 76 43 81 77 42 01 fc 24 7e 01 e8 ..|G.vC.wB..$~.. d1b0: c8 e1 b4 20 b2 f1 06 f0 29 80 aa 01 d2 34 61 13 ... ....)....4a. d1c0: 4c 4f 2e 78 1f 09 9c 9b 44 c9 87 45 e1 9c f5 20 LO.x....D..E... d1d0: 42 41 0c e8 20 c7 09 f4 19 c5 07 91 13 7d 22 f4 BA.. ........}". d1e0: a0 3c 8c 77 14 76 02 f1 61 c2 63 f7 31 81 ff 63 .<.w.v..a.c.1..c d1f0: 3c 1b a3 5b 0d 86 fe ff e7 14 0e e6 83 08 27 a8 <..[..........'. d200: eb 26 01 32 7d 47 05 50 00 f9 5e e0 73 c0 b3 01 .&.2}G.P..^.s... d210: 1b c3 a3 80 d1 8c ce c3 4f 16 15 77 b2 14 c4 93 ........O..w.... d220: 75 94 c9 a2 67 e2 7b 85 67 f4 a6 e5 39 7a c2 be u...g.{.g...9z.. d230: 87 c0 3a 0c 84 7c 30 f0 34 0c e7 c9 72 38 4f 96 ..:..|0.4...r8O. d240: 8f c5 d7 10 f0 09 9c 2d c8 e1 31 b1 46 45 af 42 .......-..1.FE.B d250: 1e 1e bf 1c 78 3e cf 08 47 f9 24 81 c3 78 26 f1 ....x>..G.$..x&. d260: 10 7d 2b 82 35 91 93 f6 6d e1 64 83 be 9e 61 6e .}+.5...m.d...an d270: 45 b0 ff ff b7 22 38 17 34 98 99 ee 55 a8 58 f7 E...."8.4...U.X. d280: 2a 40 ec b0 5e 7b 7c b0 82 7b af 82 7b a9 7a 56 *@..^{|..{..{.zV d290: 38 c6 f0 0f 53 31 4e e9 b5 d3 40 61 a2 c4 7b af 8...S1N...@a..{. d2a0: f2 18 df ab d8 15 2a 4c ac 97 2b a3 be 4e 84 0b ......*L..+..N.. d2b0: 14 24 d2 ab 55 94 c8 f1 0d f9 5e 05 5e 39 f7 2a .$..U.....^.^9.* d2c0: 90 fd ff ef 55 80 79 b4 f7 2a 30 5e 1b d8 0d 09 ....U.y..*0^.... d2d0: 16 d0 8b 15 60 28 f3 c5 8a e6 bd 58 21 fe ff e7 ....`(.....X!... d2e0: 12 a6 e7 62 45 e6 09 ff 66 05 70 fa ff 7f b3 02 ...bE...f.p..... d2f0: 8c dd 8b 30 47 2b 78 29 6f 56 34 ce 32 14 70 41 ...0G+x)oV4.2.pA d300: 14 c6 37 2b c0 d1 75 05 37 64 b8 60 51 82 f9 10 ..7+..u.7d.`Q... d310: e2 e9 1c f1 43 c2 4b c0 63 8e 07 fc 40 e0 cb 15 ....C.K.c...@... d320: 98 fe ff 04 3e f9 9e e5 db d4 7b 2f 3f 60 bd 57 ....>.....{/?`.W d330: f9 f0 1b eb 9d e1 e5 ca 23 89 72 12 a1 7c b7 7a ........#.r..|.z d340: af 32 4a c4 17 62 9f 82 0d 6d 94 a7 8a e8 c6 7b .2J..b...m.....{ d350: b9 02 af a4 cb 15 40 93 e1 bf 5c 81 ef e6 80 bd ......@...\..... d360: 26 c1 f9 ff 5f 93 f8 f5 0a f0 93 fd 7a 45 73 5f &..._.......zEs_ d370: af 50 a2 20 a4 08 48 33 05 cf fd 0a e0 c4 ff ff .P. ..H3........ d380: 7e 05 58 0e 77 bf 02 7a b7 23 f0 a2 bc 1d 61 af ~.X.w..z.#....a. d390: 58 f8 8c 57 2c 1a 66 25 8a b7 26 0a e3 2b 16 30 X..W,.f%..&..+.0 d3a0: f9 ff 5f b1 80 d9 41 14 37 6a b8 17 27 df 7a 3c .._...A.7j..'.z< d3b0: df 88 be c3 60 4e 58 30 6e 58 f0 87 f4 30 ec 93 ....`NX0nX...0.. d3c0: c4 3b 96 8f 56 06 79 03 7e b2 7a b0 8a 62 84 80 .;..V.y.~.z..b.. d3d0: c7 f3 2e ec a3 d5 9b 96 51 62 c7 f2 85 ea 59 cb ........Qb....Y. d3e0: d7 2c 43 c4 7d 20 f6 0d 0b b0 fd ff bf 61 01 8e .,C.} .......a.. d3f0: 2e 0e fc e0 80 bd 61 01 3e 67 0a 9e 1b 16 b0 f9 ......a.>g...... d400: ff df b0 00 fe ff ff 6f 58 c0 e1 76 85 bd 65 61 .......oX..v..ea d410: 6f 2f 64 15 34 d4 4a 14 fc 7b 65 18 7a c3 02 1c o/d.4.J..{e.z... d420: 8d db a3 06 c7 d9 e0 49 02 73 ae c6 cd e6 e0 02 .......I.s...... d430: 47 e8 1d 54 73 67 97 14 18 b7 2c b8 97 aa 87 86 G..Tsg....,..... d440: 28 07 f1 2a fc 60 f5 28 75 64 8f 57 4f c3 3e 66 (..*.`.(ud.WO.>f d450: f9 96 65 a8 08 6f 59 ec 0c 11 2f 56 94 10 ef 15 ..e..oY.../V.... d460: a1 7d e7 32 f8 a3 b1 51 83 be 1c bf 65 c1 fb ff .}.2...Q....e... d470: df b2 e0 8b fc ab e8 44 e0 5b 16 c0 8f 60 10 72 .......D.[...`.r d480: 32 70 f4 79 01 3f 80 87 11 0f 89 05 18 38 bd 2f 2p.y.?.......8./ d490: f9 4c c1 0f 18 3e 53 b0 eb 41 f4 c7 00 9f 4b 30 .L...>S..A....K0 d4a0: 83 03 ff b5 e2 d0 3d 8a d7 07 13 78 70 fc ff 3f ......=....xp..? d4b0: 38 b8 77 86 23 f2 1d c6 83 03 db 41 00 38 0c 0e 8.w.#......A.8.. d4c0: 1f 6a 70 e8 f1 18 38 a4 cf 63 ec c2 f0 90 e3 a1 .jp...8..c...... d4d0: 81 0d d0 43 03 96 93 78 0a 39 34 30 4b 18 1a 50 ...C...x.940K..P d4e0: 8a 37 34 fa ff 1f 1a 1f 92 0f 0b 31 9f 72 22 bc .74........1.r". d4f0: 2f f8 04 c5 d0 5f 53 7c bb f0 4d 10 37 3e 70 5d /...._S|..M.7>p] d500: 3a 3d 3e e0 73 e4 f2 f8 70 47 27 8f 0f 86 cb ab :=>.s...pG'..... d510: 0c 39 9a f8 68 c5 86 07 b6 9b 9e 87 07 7c ae 9b .9..h........|.. d520: 60 bc 42 f2 6b 09 8c 13 14 fe ba 09 de ff ff 75 `.B.k..........u d530: 13 78 8e 82 6b bd 64 d3 20 af 1c c5 7a 11 50 18 .x..k.d. ...z.P. d540: 9f d9 00 47 63 7d 66 03 cb bd 80 dd d8 e0 9e d6 ...Gc}f......... d550: 60 df 1d 1e ce 1e d3 1e d5 1e d0 7c c4 8e f1 96 `..........|.... d560: 16 24 4e 84 d7 81 a7 35 5f 32 e2 05 7a 5a 33 46 .$N....5_2..zZ3F d570: 9c 97 36 23 be 52 84 78 58 f3 c9 cd 78 0f 13 e1 ..6#.R.xX...x... d580: c2 bc b0 3d ad 81 e3 ff 7f 5a 83 23 e7 8a 0d d0 ...=.....Z.#.... d590: e4 a2 8f 3b a4 80 e5 da c0 6e 29 f0 2e d8 c0 f9 ...;.....n)..... d5a0: ff 7f 44 01 5f 96 0b 36 cd 71 c1 46 71 58 0d 90 ..D._..6.q.FqX.. d5b0: e6 09 ff 7a 0d fe 49 f8 7a 0d d8 be c5 e2 ae d7 ...z..I.z....... d5c0: c0 ea ff 7f bd 06 96 82 47 4a ef d4 e0 ba 69 e3 ........GJ....i. d5d0: 41 df b4 61 0a be 45 d1 28 e4 8a b6 10 0a e3 5b A..a..E.(......[ d5e0: 14 e0 08 fb 2d 0a 2c 17 a7 b7 28 fc 0c 3c 68 df ....-.,...(..H d600: f9 70 f0 fc f4 ff 8f f1 5e e7 9b d4 6b 94 2f 30 .p......^...k./0 d610: c7 10 31 ca cb b4 21 e2 f9 d4 e4 b3 42 dc 10 0f ..1...!.....B... d620: d1 46 88 fa 3c ed 09 bd 46 81 57 d0 35 0a a0 c9 .F..<...F.W.5... d630: fd 08 77 8d 02 cb bd 81 9d 87 f8 95 c8 d7 06 18 ..w............. d640: f7 28 38 ff ff 7b 14 60 23 cc 3d 8a 06 b9 47 a1 .(8..{.`#.=...G. d650: 4e 26 be d4 79 a2 e0 08 7f 91 42 c5 26 51 e8 c3 N&..y.....B.&Q.. d660: 10 2a e6 61 84 82 18 d0 19 4e 14 68 15 27 0a 72 .*.a.....N.h.'.r d670: 8b f1 a4 1e a3 00 5f cb f4 50 79 e4 a1 52 10 0f ......_..Py..R.. d680: d5 71 86 8a 9e a4 e7 8f f9 ff 1f 1c b0 07 29 80 .q............). d690: 17 0a 6d fa d4 68 d4 aa 41 99 1a 65 1a d4 ea 53 ..m..h..A..e...S d6a0: a9 31 63 e7 50 4b 3b 4b 50 31 8b d1 68 1c 05 84 .1c.PK;KP1..h... d6b0: ca fe 9b 0b c4 21 9f 3a 02 74 b0 17 95 80 2c 6b .....!.:.t....,k d6c0: 6d 02 71 7c 13 10 8d 80 48 cb 63 42 40 ce 0d 22 m.q|....H.cB@.." d6d0: 20 ab 58 93 80 ac f9 01 23 70 eb d4 01 c4 52 82 .X.....#p....R. d6e0: d0 44 0b 17 a8 e3 81 68 30 84 46 40 0e 46 21 20 .D.....h0.F@.F! d6f0: cb f8 74 0b dc 02 ac 00 31 f9 20 54 b0 17 50 a6 ..t.....1. T..P. d700: 1e 44 40 56 ba 56 01 59 37 88 80 fe ff 2f 83 32 .D@V.V.Y7..../.2 d710: 03 ce 32 ba 01 62 0a 1f 0a 02 b1 26 3d a0 4c 20 ..2..b.....&=.L d720: 88 ae 1c c4 0f 10 93 06 22 20 c7 39 98 08 dc 71 ........" .9...q d730: 14 01 52 47 c3 a5 20 54 fc f3 44 20 16 64 09 8c ..RG.. T..D .d.. d740: 82 d0 08 9a 40 98 3c 4f 20 2c d4 9f 5c a7 15 a2 ....@..x... dc10: 1d 51 b8 80 e7 73 0c 91 e3 1e 6a 8c a3 88 7c 38 .Q...s....j...|8 dc20: 0c ed 74 e3 1c d8 e9 14 04 2e 90 60 3d cf 59 20 ..t........`=.Y dc30: ff ff 18 07 c1 f0 8e 01 23 03 42 1e 05 58 1d 96 ........#.B..X.. dc40: 26 91 c0 ee 05 68 bc 04 48 e1 20 a5 0c 42 30 8d &....h..H. ..B0. dc50: 09 b0 75 68 90 37 01 d6 ae 02 42 89 74 02 71 42 ..uh.7....B.t.qB dc60: 44 89 18 d4 40 51 6a 43 15 4c 67 c3 13 66 dc 10 D...@QjC.Lg..f.. dc70: 31 0c 14 b7 fd 41 90 61 e3 c6 ef 41 9d d6 d9 1d 1....A.a...A.... dc80: d3 ab 82 09 3c e9 37 84 a7 83 a3 38 da a8 31 9a ....<.7....8..1. dc90: 23 65 ab d6 b9 c2 91 e0 51 e7 05 9f 0c 3c b4 c3 #e......Q....<.. dca0: f6 60 cf d2 43 38 82 67 86 47 02 8f 81 dd 15 7c .`..C8.g.G.....| dcb0: 08 f0 19 01 ef 1a 50 97 83 47 03 36 e9 70 98 f1 ......P..G.6.p.. dcc0: 7a ee 9e ba cf 18 fc bc e1 c1 e1 46 7a 32 47 56 z..........Fz2GV dcd0: aa 00 b3 d7 00 1d 25 7c e0 60 77 81 a7 00 13 58 ......%|.`w....X dce0: fe 20 50 23 33 b4 c7 fb de 61 c8 27 85 c3 62 62 . P#3....a.'..bb dcf0: 0f 1e 74 3c e0 bf 8f 3c 69 78 fa 9e af 09 06 86 ..t<.....y./.o dd40: 0f 26 88 f6 10 03 c6 19 e1 ce 1b 70 4e 31 c0 03 .&.........pN1.. dd50: ea 10 30 87 09 0f 81 0f e0 19 e4 1c 7d cc 39 33 ..0.........}.93 dd60: dc 71 07 6c c3 e0 91 2d 80 b0 38 4f 02 05 7c 1b .q.l...-..8O..|. dd70: 50 18 1f 6e c0 fb ff 3f dc 00 d7 f3 01 ee f8 00 P..n...?........ dd80: f7 62 c1 0e 0f 8f 37 c0 60 48 8f 34 6f 35 31 5e .b....7.`H.4o51^ dd90: 6d 42 44 78 a8 79 b7 31 52 bc c7 1b 76 8d 39 8b mBDx.y.1R...v.9. dda0: 07 90 28 c5 a1 e9 62 13 23 ca 9b 8d 61 df 74 0c ..(...b.#...a.t. ddb0: 14 2a 52 84 30 2f 16 21 1e 6f c0 2c e9 a5 a2 cf .*R.0/.!.o.,.... ddc0: 81 8f 37 80 97 ff ff f1 06 f0 30 0c 1f 53 c0 76 ..7.......0..S.v ddd0: 73 60 f7 14 f8 e7 14 c0 91 90 47 80 0e 1e 16 01 s`........G..... dde0: 22 1b cf 00 9f 89 a8 40 2a cd 14 2c e3 14 ac 4e "......@*..,...N ddf0: 88 5c 06 85 44 40 68 64 86 f3 21 d1 60 06 f1 f9 .\..D@hd..!.`... de00: c0 67 0a 9f 9c f8 ff ff e4 04 9e 83 c9 43 05 2c .g...........C., de10: 44 9f 16 38 9c cf 2c 1c ce 47 12 7e 80 e4 47 25 D..8..,..G.~..G% de20: 70 09 3c 34 80 02 c8 f7 03 9f 03 9e 11 d8 1c 1e p.<4............ de30: 09 7c 20 60 f0 3c da a8 e8 d1 c6 c3 e3 47 06 cf .| `.<.......G.. de40: e7 81 e0 28 1f 09 70 18 ef 17 1e a2 4f 39 b0 26 ...(..p.....O9.& de50: 72 d4 16 7d 22 10 e8 33 17 e6 94 03 9c 82 8f 1e r..}"..3........ de60: 15 f5 40 0a da 93 82 cf 0a 3e 7c c1 ff ff 1f be ..@......>|..... de70: e0 cc eb 65 cd 07 8e 38 67 71 ba ef 16 f8 13 29 ...e...8gq.....) de80: 30 0b 72 22 45 c1 f8 44 0a d8 bc 05 60 af 0b 4f 0.r"E..D....`..O de90: 22 30 ce 11 cf 58 30 0f 55 a7 f8 52 f5 c6 10 e1 "0...X0.U..R.... dea0: c9 ea 35 ea 01 cb 60 2f 02 86 79 c5 f2 e9 2a c4 ..5...`/..y...*. deb0: 03 96 cf 5a d1 42 84 8c 12 ec 15 eb 55 c6 47 2a ...Z.B......U.G* dec0: 83 07 0c 1b 2d 52 84 47 2c fc ff ff 88 05 1e 09 ....-R.G,....... ded0: 07 52 80 2a 03 c7 1d 48 81 fd 69 02 7f bd f0 78 .R.*...H..i....x dee0: b0 ff ff 73 00 f8 0e 31 c0 60 c0 30 0e 31 c0 43 ...s...1.`.0.1.C def0: f0 c9 0c f4 c7 1d f8 e3 e0 19 9f 1c 26 50 98 13 ............&P.. df00: 29 0a c6 27 52 c0 d9 ff ff 70 05 86 e3 0d f8 6f )..'R....p.....o df10: 33 3e 84 fa 7c e3 0b a9 21 5e 6c de d4 5e 09 5e 3>..|...!^l..^.^ df20: df d9 b5 e6 f5 dd a7 82 27 d1 08 21 a3 bc e4 18 ........'..!.... df30: 24 c4 eb a8 01 83 05 89 78 0a 4f 3b 8f 37 e0 15 $.......x.O;.7.. df40: 75 20 05 e8 f1 ff 3f 90 02 83 7b 0a ec 73 0a e0 u ....?...{..s.. df50: 29 f9 89 94 a6 3e 91 a2 15 01 69 aa 60 21 98 fe )....>....i.`!.. df60: 44 4a 0f 06 ce 4d a2 e4 43 a3 70 ce 7a 20 a1 20 DJ...M..C.p.z . df70: 06 74 90 43 05 fa ac e2 03 c9 81 3c 22 7a 58 3e .t.C.......<"zX> df80: 54 fa ae e2 73 88 8f 14 1e bf 0f 0b fc 3f e3 e3 T...s........?.. df90: 28 03 af e6 bc 82 02 f3 69 14 a3 eb 3e 01 92 ff (.......i...>... dfa0: ff fc b8 be c3 28 c8 d1 79 f8 c9 a2 e2 4e 96 82 .....(..y....N.. dfb0: 78 b2 8e 32 59 f4 4c 7c bb f0 8c de bb 7c 83 65 x..2Y.L|.....|.e dfc0: 37 59 78 97 81 90 8f 06 be c9 c2 1d 8b 2f 23 e0 7Yx........../#. dfd0: bb c9 02 5e 47 e3 b3 05 3b 85 f8 ba 06 4b a1 4d ...^G...;....K.M dfe0: 9f 1a 8d 5a fd ff 1b 94 a9 51 a6 41 ad 3e 95 1a ...Z.....Q.A.>.. dff0: 33 76 a1 b0 b8 0b 06 95 b4 2c 8d cb 81 40 68 80 3v.......,...@h. e000: 5b a9 40 1c fa 0b a4 53 02 f9 6a 09 c8 62 57 25 [.@....S..j..bW% e010: 10 cb 54 01 d1 c8 dd c2 20 02 72 bc 4f 8d 40 1d ..T..... .r.O.@. e020: 49 07 10 13 e4 63 ac f4 25 20 10 cb a6 15 a0 e5 I....c..% ...... e030: 3a 01 62 61 41 68 c0 5f b5 86 e0 b4 20 02 72 32 :.baAh._.... .r2 e040: 2d 40 2c 27 88 80 fc ff 07 5b 82 0f 50 57 52 42 -@,'.....[..PWRB e050: 08 5f 48 49 44 0c 41 d0 0c 0c 5b 82 25 53 4c 50 ._HID.A...[.%SLP e060: 42 08 5f 48 49 44 0c 41 d0 0c 0e 14 0e 5f 50 52 B._HID.A....._PR e070: 57 00 a4 12 06 02 0a 18 0a 03 14 06 5f 50 53 57 W..........._PSW e080: 01 10 41 10 2f 03 5f 53 42 5f 50 43 49 30 52 50 ..A./._SB_PCI0RP e090: 30 34 5b 82 4f 0e 42 4c 41 4e 08 5f 41 44 52 00 04[.O.BLAN._ADR. e0a0: 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 49 04 50 [.PXCS..@..[.I.P e0b0: 58 43 53 00 00 40 08 4c 30 53 45 01 00 07 00 08 XCS..@.L0SE..... e0c0: 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 ..LASX..2ABPX... e0d0: 50 44 43 58 01 00 02 50 44 53 58 01 00 01 00 28 PDCX...PDSX....( e0e0: 00 10 50 53 50 58 01 00 4f 3a 00 1e 48 50 45 58 ..PSPX..O:..HPEX e0f0: 01 50 4d 45 58 01 5b 81 15 50 58 43 53 40 00 40 .PMEX.[..PXCS@.@ e100: 4e 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 17 N..HPSX.PMSX.[.. e110: 50 58 53 58 08 5f 41 44 52 00 08 5f 50 52 57 12 PXSX._ADR.._PRW. e120: 06 02 0a 09 0a 04 14 2d 48 50 4d 45 08 a0 26 50 .......-HPME..&P e130: 4d 53 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 58 MSXp..`..`p.PMSX e140: a0 07 50 4d 53 58 76 60 a1 04 70 00 60 86 50 58 ..PMSXv`..p.`.PX e150: 53 58 0a 02 08 5f 50 52 57 12 06 02 0a 09 0a 04 SX..._PRW....... e160: 14 22 5f 50 53 57 01 a0 13 57 4f 4c 4e 70 01 5e ."_PSW...WOLNp.^ e170: 5e 50 4d 53 58 70 68 4c 41 4e 4f a1 07 70 00 4c ^PMSXphLANO..p.L e180: 41 4e 4f 08 53 50 53 5f 00 08 4f 53 49 46 00 08 ANO.SPS_..OSIF.. e190: 57 39 38 46 00 08 57 4e 54 46 00 08 57 4d 45 46 W98F..WNTF..WMEF e1a0: 00 08 57 58 50 46 00 08 57 56 49 53 00 08 57 53 ..WXPF..WVIS..WS e1b0: 50 56 00 08 4c 4e 55 58 00 08 57 49 4e 38 00 08 PV..LNUX..WIN8.. e1c0: 48 38 44 52 00 08 4d 45 4d 58 00 08 46 4e 49 44 H8DR..MEMX..FNID e1d0: 00 08 52 52 42 46 00 08 4e 42 43 46 00 10 1a 2f ..RRBF..NBCF.../ e1e0: 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 5f ._SB_PCI0LPCBEC_ e1f0: 5f 14 06 44 47 53 59 01 10 46 36 2e 5f 53 42 5f _..DGSY..F6._SB_ e200: 50 43 49 30 08 45 42 52 4c 0a 64 08 45 42 52 56 PCI0.EBRL.d.EBRV e210: 00 08 49 42 43 4c 12 26 12 0a 64 0a 23 0a 05 0a ..IBCL.&..d.#... e220: 0a 0a 14 0a 19 0a 1e 0a 23 0a 28 0a 2d 0a 32 0a ........#.(.-.2. e230: 37 0a 3c 0a 41 0a 46 0a 50 0a 5a 0a 64 14 4b 23 7.<.A.F.P.Z.d.K# e240: 49 42 43 4d 01 70 68 45 42 52 4c a0 18 95 45 42 IBCM.phEBRL...EB e250: 52 4c 72 83 88 49 42 43 4c 0a 02 00 01 00 70 00 RLr..IBCL.....p. e260: 42 52 4e 53 a1 4f 1a a0 18 95 45 42 52 4c 72 83 BRNS.O....EBRLr. e270: 88 49 42 43 4c 0a 03 00 01 00 70 01 42 52 4e 53 .IBCL.....p.BRNS e280: a1 43 19 a0 19 95 45 42 52 4c 72 83 88 49 42 43 .C....EBRLr..IBC e290: 4c 0a 04 00 01 00 70 0a 02 42 52 4e 53 a1 46 17 L.....p..BRNS.F. e2a0: a0 19 95 45 42 52 4c 72 83 88 49 42 43 4c 0a 05 ...EBRLr..IBCL.. e2b0: 00 01 00 70 0a 03 42 52 4e 53 a1 49 15 a0 19 95 ...p..BRNS.I.... e2c0: 45 42 52 4c 72 83 88 49 42 43 4c 0a 06 00 01 00 EBRLr..IBCL..... e2d0: 70 0a 04 42 52 4e 53 a1 4c 13 a0 19 95 45 42 52 p..BRNS.L....EBR e2e0: 4c 72 83 88 49 42 43 4c 0a 07 00 01 00 70 0a 05 Lr..IBCL.....p.. e2f0: 42 52 4e 53 a1 4f 11 a0 19 95 45 42 52 4c 72 83 BRNS.O....EBRLr. e300: 88 49 42 43 4c 0a 08 00 01 00 70 0a 06 42 52 4e .IBCL.....p..BRN e310: 53 a1 42 10 a0 19 95 45 42 52 4c 72 83 88 49 42 S.B....EBRLr..IB e320: 43 4c 0a 09 00 01 00 70 0a 07 42 52 4e 53 a1 45 CL.....p..BRNS.E e330: 0e a0 19 95 45 42 52 4c 72 83 88 49 42 43 4c 0a ....EBRLr..IBCL. e340: 0a 00 01 00 70 0a 08 42 52 4e 53 a1 48 0c a0 19 ....p..BRNS.H... e350: 95 45 42 52 4c 72 83 88 49 42 43 4c 0a 0b 00 01 .EBRLr..IBCL.... e360: 00 70 0a 09 42 52 4e 53 a1 4b 0a a0 19 95 45 42 .p..BRNS.K....EB e370: 52 4c 72 83 88 49 42 43 4c 0a 0c 00 01 00 70 0a RLr..IBCL.....p. e380: 0a 42 52 4e 53 a1 4e 08 a0 19 95 45 42 52 4c 72 .BRNS.N....EBRLr e390: 83 88 49 42 43 4c 0a 0d 00 01 00 70 0a 0b 42 52 ..IBCL.....p..BR e3a0: 4e 53 a1 41 07 a0 19 95 45 42 52 4c 72 83 88 49 NS.A....EBRLr..I e3b0: 42 43 4c 0a 0e 00 01 00 70 0a 0c 42 52 4e 53 a1 BCL.....p..BRNS. e3c0: 44 05 a0 19 95 45 42 52 4c 72 83 88 49 42 43 4c D....EBRLr..IBCL e3d0: 0a 0f 00 01 00 70 0a 0d 42 52 4e 53 a1 37 a0 19 .....p..BRNS.7.. e3e0: 95 45 42 52 4c 72 83 88 49 42 43 4c 0a 10 00 01 .EBRLr..IBCL.... e3f0: 00 70 0a 0e 42 52 4e 53 a1 1b a0 19 95 45 42 52 .p..BRNS.....EBR e400: 4c 72 83 88 49 42 43 4c 0a 11 00 01 00 70 0a 0f Lr..IBCL.....p.. e410: 42 52 4e 53 a0 10 92 95 4f 53 59 53 0b d6 07 55 BRNS....OSYS...U e420: 43 4d 53 0a 14 a0 36 49 47 44 53 55 43 4d 53 0a CMS...6IGDSUCMS. e430: 06 70 83 88 50 4e 4c 53 42 52 4e 53 00 42 52 54 .p..PNLSBRNS.BRT e440: 4c 49 53 42 43 83 88 50 4e 4c 53 42 52 4e 53 00 LISBC..PNLSBRNS. e450: 70 01 5e 2e 47 46 58 30 41 53 4c 45 a1 13 a0 11 p.^.GFX0ASLE.... e460: 92 93 45 42 52 56 42 52 4e 53 55 43 4d 53 0a 06 ..EBRVBRNSUCMS.. e470: 70 42 52 4e 53 45 42 52 56 08 49 53 43 54 00 14 pBRNSEBRV.ISCT.. e480: 4d 06 49 53 42 43 01 5e 2e 47 46 58 30 50 41 52 M.ISBC.^.GFX0PAR e490: 44 70 68 5e 2e 47 46 58 30 42 43 4c 50 7d 5e 2e Dph^.GFX0BCLP}^. e4a0: 47 46 58 30 42 43 4c 50 0c 00 00 00 80 5e 2e 47 GFX0BCLP.....^.G e4b0: 46 58 30 42 43 4c 50 70 0a 02 5e 2e 47 46 58 30 FX0BCLPp..^.GFX0 e4c0: 41 53 4c 43 70 0a 05 49 53 43 54 a2 21 90 5e 2e ASLCp..ISCT.!.^. e4d0: 47 46 58 30 41 53 4c 43 49 53 43 54 70 00 5e 2e GFX0ASLCISCTp.^. e4e0: 47 46 58 30 4c 42 50 43 76 49 53 43 54 08 50 4e GFX0LBPCvISCT.PN e4f0: 4c 53 11 13 0a 10 04 07 09 0c 10 15 1c 25 32 40 LS...........%2@ e500: 50 64 82 a5 cd ff 08 42 52 54 42 12 43 05 03 12 Pd.....BRTB.C... e510: 22 10 0a 04 0a 07 0a 09 0a 0c 0a 10 0a 15 0a 1c "............... e520: 0a 25 0a 32 0a 40 0a 50 0a 64 0a 82 0a a5 0a cd .%.2.@.P.d...... e530: 0a ff 12 22 10 0a 04 0a 07 0a 09 0a 0c 0a 10 0a ..."............ e540: 15 0a 1c 0a 25 0a 32 0a 40 0a 50 0a 64 0a 82 0a ....%.2.@.P.d... e550: a5 0a cd 0a ff 12 09 05 0a dc 0a dc 00 00 00 08 ................ e560: 5f 53 30 5f 12 06 04 00 00 00 00 a0 11 53 53 31 _S0_.........SS1 e570: 5f 08 5f 53 31 5f 12 06 04 01 00 00 00 a0 12 53 _._S1_.........S e580: 53 33 5f 08 5f 53 33 5f 12 07 04 0a 05 00 00 00 S3_._S3_........ e590: a0 12 53 53 34 5f 08 5f 53 34 5f 12 07 04 0a 06 ..SS4_._S4_..... e5a0: 00 00 00 08 5f 53 35 5f 12 07 04 0a 07 00 00 00 ...._S5_........ fwts-test/dbg2-0001/acpidump-0002.log000066400000000000000000010272371465205512700171210ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... DBG2 @ 0x00000000 0000: 44 42 47 32 6b 00 00 00 00 42 4c 45 4e 4f 56 4f DBG2k....BLENOVO 0010: 54 50 2d 48 36 20 20 20 20 20 00 00 50 54 4c 20 TP-H6 ..PTL 0020: 02 00 00 00 2c 00 00 00 01 00 00 00 01 3f 00 07 ....,........?.. 0030: 19 00 26 00 30 40 ff fe 02 80 08 00 f0 00 16 00 ..&............. 0040: 22 30 00 20 00 00 a0 90 81 f1 00 00 00 00 0c 00 ".. ............ 0050: 00 00 5c 5f 53 42 2e 50 43 49 30 2e 45 48 43 31 ..\_SB.PCI0.EHC1 0060: 2e 48 55 42 30 2e 50 52 54 32 00 .HUB0.PRT2. DSDT @ 0x00000000 0000: 44 53 44 54 b0 e5 00 00 02 cf 4c 45 4e 4f 56 4f DSDT......LENOVO 0010: 49 56 42 2d 43 50 54 00 00 00 00 00 49 4e 54 4c IVB-CPT.....INTL 0020: 09 11 06 20 08 53 53 31 5f 00 08 53 53 32 5f 00 ... .SS1_..SS2_. 0030: 08 53 53 33 5f 01 08 53 53 34 5f 01 08 49 4f 53 .SS3_..SS4_..IOS 0040: 54 0b ff ff 08 53 50 32 4f 0a 4e 08 53 50 31 4f T....SP2O.N.SP1O 0050: 0b 4e 16 08 49 4f 31 42 0b 00 06 08 49 4f 31 4c .N..IO1B....IO1L 0060: 0a 70 08 49 4f 32 42 0b 80 06 08 49 4f 32 4c 0a .p.IO2B....IO2L. 0070: 20 08 49 4f 33 42 0b 90 02 08 49 4f 33 4c 0a 10 .IO3B....IO3L.. 0080: 08 53 50 33 4f 0a 2e 08 49 4f 34 42 0b 20 0a 08 .SP3O...IO4B. .. 0090: 49 4f 34 4c 0a 20 08 4d 43 48 42 0c 00 00 d1 fe IO4L. .MCHB..... 00a0: 08 4d 43 48 4c 0b 00 80 08 45 47 50 42 0c 00 90 .MCHL....EGPB... 00b0: d1 fe 08 45 47 50 4c 0b 00 10 08 44 4d 49 42 0c ...EGPL....DMIB. 00c0: 00 80 d1 fe 08 44 4d 49 4c 0b 00 10 08 49 46 50 .....DMIL....IFP 00d0: 42 0c 00 40 d1 fe 08 49 46 50 4c 0b 00 10 08 50 B..@...IFPL....P 00e0: 45 42 53 0c 00 00 00 f8 08 50 45 4c 4e 0c 00 00 EBS......PELN... 00f0: 00 04 08 53 4d 42 53 0b 80 05 08 53 4d 42 4c 0a ...SMBS....SMBL. 0100: 20 08 50 42 4c 4b 0b 10 04 08 50 4d 42 53 0b 00 .PBLK....PMBS.. 0110: 04 08 50 4d 4c 4e 0a 80 08 4c 56 4c 32 0b 14 04 ..PMLN...LVL2... 0120: 08 4c 56 4c 33 0b 15 04 08 4c 56 4c 34 0b 16 04 .LVL3....LVL4... 0130: 08 53 4d 49 50 0a b2 08 47 50 42 53 0b 00 05 08 .SMIP...GPBS.... 0140: 47 50 4c 4e 0a 80 08 41 50 43 42 0c 00 00 c0 fe GPLN...APCB..... 0150: 08 41 50 43 4c 0b 00 10 08 50 4d 33 30 0b 30 04 .APCL....PM30.0. 0160: 08 53 52 43 42 0c 00 c0 d1 fe 08 53 52 43 4c 0b .SRCB......SRCL. 0170: 00 40 08 48 50 54 42 0c 00 00 d0 fe 08 48 50 54 .@.HPTB......HPT 0180: 43 0c 04 f4 d1 fe 08 41 43 50 48 0a de 08 41 53 C......ACPH...AS 0190: 53 42 00 08 41 4f 54 42 00 08 41 41 58 42 00 08 SB..AOTB..AAXB.. 01a0: 50 45 48 50 01 08 53 48 50 43 01 08 50 45 50 4d PEHP..SHPC..PEPM 01b0: 01 08 50 45 45 52 01 08 50 45 43 53 01 08 44 53 ..PEER..PECS..DS 01c0: 53 50 00 08 46 48 50 50 00 08 46 4d 42 4c 01 08 SP..FHPP..FMBL.. 01d0: 46 44 54 50 0a 02 08 46 55 50 53 0a 03 08 42 53 FDTP...FUPS...BS 01e0: 48 5f 00 08 42 45 4c 5f 01 08 42 45 48 5f 0a 02 H_..BEL_..BEH_.. 01f0: 08 42 52 48 5f 0a 03 08 42 54 46 5f 0a 04 08 42 .BRH_...BTF_...B 0200: 48 43 5f 0a 05 08 42 59 42 5f 0a 06 08 42 57 42 HC_...BYB_...BWB 0210: 5f 0a 06 08 42 50 48 5f 0a 07 08 42 53 48 53 0a _...BPH_...BSHS. 0220: 08 08 42 45 4c 43 0a 09 08 42 52 48 50 0a 0a 08 ..BELC...BRHP... 0230: 42 54 46 43 0a 0b 08 42 45 48 50 0a 0c 08 42 45 BTFC...BEHP...BE 0240: 4c 50 0a 0e 08 42 54 4c 5f 0a 10 08 42 54 46 50 LP...BTL_...BTFP 0250: 0a 11 08 42 53 52 5f 0a 14 08 42 43 43 5f 0a 1c ...BSR_...BCC_.. 0260: 08 42 4f 46 5f 0a 20 08 42 45 46 5f 0a 21 08 42 .BOF_. .BEF_.!.B 0270: 4c 4c 45 0a 22 08 42 4c 4c 43 0a 23 08 42 4c 43 LLE.".BLLC.#.BLC 0280: 41 0a 24 08 42 4c 4c 53 0a 25 08 42 4c 4c 50 0a A.$.BLLS.%.BLLP. 0290: 26 08 42 4c 4c 44 0a 27 08 42 4b 46 5f 0a 28 08 &.BLLD.'.BKF_.(. 02a0: 42 48 42 45 0a 30 08 42 48 42 43 0a 31 08 42 48 BHBE.0.BHBC.1.BH 02b0: 42 4e 0a 32 08 42 48 42 4d 0a 33 08 54 43 47 4d BN.2.BHBM.3.TCGM 02c0: 01 08 54 52 54 50 01 08 57 44 54 45 01 08 54 52 ..TRTP..WDTE..TR 02d0: 54 44 0a 02 08 54 52 54 49 0a 03 08 47 43 44 44 TD...TRTI...GCDD 02e0: 01 08 44 53 54 41 0a 0a 08 44 53 4c 4f 0a 0c 08 ..DSTA...DSLO... 02f0: 44 53 4c 43 0a 0e 08 50 49 54 53 0a 10 08 53 42 DSLC...PITS...SB 0300: 43 53 0a 12 08 53 41 4c 53 0a 13 08 4c 53 53 53 CS...SALS...LSSS 0310: 0a 2a 08 53 4f 4f 54 0a 35 08 50 44 42 52 0a 4d .*.SOOT.5.PDBR.M 0320: 08 44 50 50 42 0c 00 80 d9 fe 08 44 50 50 4c 0b .DPPB......DPPL. 0330: 00 80 08 53 50 52 32 00 08 53 50 52 33 00 5b 80 ...SPR2..SPR3.[. 0340: 47 4e 56 53 00 0c 18 8e f6 da 0b c8 01 5b 81 4c GNVS.........[.L 0350: 3f 47 4e 56 53 10 4f 53 59 53 10 53 4d 49 46 08 ?GNVS.OSYS.SMIF. 0360: 50 52 4d 30 08 50 52 4d 31 08 53 43 49 46 08 50 PRM0.PRM1.SCIF.P 0370: 52 4d 32 08 50 52 4d 33 08 4c 43 4b 46 08 50 52 RM2.PRM3.LCKF.PR 0380: 4d 34 08 50 52 4d 35 08 50 38 30 44 20 4c 49 44 M4.PRM5.P80D LID 0390: 53 08 50 57 52 53 08 44 42 47 53 08 54 48 4f 46 S.PWRS.DBGS.THOF 03a0: 08 41 43 54 31 08 41 43 54 54 08 50 53 56 54 08 .ACT1.ACTT.PSVT. 03b0: 54 43 31 56 08 54 43 32 56 08 54 53 50 56 08 43 TC1V.TC2V.TSPV.C 03c0: 52 54 54 08 44 54 53 45 08 44 54 53 31 08 44 54 RTT.DTSE.DTS1.DT 03d0: 53 32 08 44 54 53 46 08 00 38 52 45 56 4e 08 49 S2.DTSF..8REVN.I 03e0: 46 46 53 08 00 08 41 50 49 43 08 54 43 4e 54 08 FFS...APIC.TCNT. 03f0: 50 43 50 30 08 50 43 50 31 08 50 50 43 4d 08 50 PCP0.PCP1.PPCM.P 0400: 50 4d 46 20 43 36 37 4c 08 4e 41 54 50 08 43 4d PMF C67L.NATP.CM 0410: 41 50 08 43 4d 42 50 08 4c 50 54 50 08 46 44 43 AP.CMBP.LPTP.FDC 0420: 50 08 43 4d 43 50 08 43 49 52 50 08 53 4d 53 43 P.CMCP.CIRP.SMSC 0430: 08 57 33 38 31 08 53 4d 43 31 08 49 47 44 53 08 .W381.SMC1.IGDS. 0440: 54 4c 53 54 08 43 41 44 4c 08 50 41 44 4c 08 43 TLST.CADL.PADL.C 0450: 53 54 45 10 4e 53 54 45 10 53 53 54 45 10 4e 44 STE.NSTE.SSTE.ND 0460: 49 44 08 44 49 44 31 20 44 49 44 32 20 44 49 44 ID.DID1 DID2 DID 0470: 33 20 44 49 44 34 20 44 49 44 35 20 4b 53 56 30 3 DID4 DID5 KSV0 0480: 20 4b 53 56 31 08 00 38 42 4c 43 53 08 42 52 54 KSV1..8BLCS.BRT 0490: 4c 08 41 4c 53 45 08 41 4c 41 46 08 4c 4c 4f 57 L.ALSE.ALAF.LLOW 04a0: 08 4c 48 49 48 08 00 08 45 4d 41 45 08 45 4d 41 .LHIH...EMAE.EMA 04b0: 50 10 45 4d 41 4c 10 00 08 4d 45 46 45 08 44 53 P.EMAL...MEFE.DS 04c0: 54 53 08 00 10 54 50 4d 50 08 00 08 4d 4f 52 44 TS...TPMP...MORD 04d0: 08 54 43 47 50 08 50 50 52 50 20 50 50 52 51 08 .TCGP.PPRP PPRQ. 04e0: 4c 50 50 52 08 47 54 46 30 38 47 54 46 32 38 49 LPPR.GTF08GTF28I 04f0: 44 45 4d 08 47 54 46 31 38 42 49 44 5f 08 50 4c DEM.GTF18BID_.PL 0500: 49 44 08 41 4f 41 43 08 53 4c 44 52 20 57 41 4b ID.AOAC.SLDR WAK 0510: 52 08 00 40 05 41 53 4c 42 20 49 42 54 54 08 49 R..@.ASLB IBTT.I 0520: 50 41 54 08 49 54 56 46 08 49 54 56 4d 08 49 50 PAT.ITVF.ITVM.IP 0530: 53 43 08 49 42 4c 43 08 49 42 49 41 08 49 53 53 SC.IBLC.IBIA.ISS 0540: 43 08 49 34 30 39 08 49 35 30 39 08 49 36 30 39 C.I409.I509.I609 0550: 08 49 37 30 39 08 49 50 43 46 08 49 44 4d 53 08 .I709.IPCF.IDMS. 0560: 49 46 31 45 08 48 56 43 4f 08 4e 58 44 31 20 4e IF1E.HVCO.NXD1 N 0570: 58 44 32 20 4e 58 44 33 20 4e 58 44 34 20 4e 58 XD2 NXD3 NXD4 NX 0580: 44 35 20 4e 58 44 36 20 4e 58 44 37 20 4e 58 44 D5 NXD6 NXD7 NXD 0590: 38 20 47 53 4d 49 08 50 41 56 50 08 00 08 4f 53 8 GSMI.PAVP...OS 05a0: 43 43 08 4e 45 58 50 08 53 42 56 31 08 53 42 56 CC.NEXP.SBV1.SBV 05b0: 32 08 00 30 44 53 45 4e 08 45 43 4f 4e 08 47 50 2..0DSEN.ECON.GP 05c0: 49 43 08 43 54 59 50 08 4c 30 31 43 08 56 46 4e IC.CTYP.L01C.VFN 05d0: 30 08 56 46 4e 31 08 56 46 4e 32 08 56 46 4e 33 0.VFN1.VFN2.VFN3 05e0: 08 56 46 4e 34 08 00 48 05 4e 56 47 41 20 4e 56 .VFN4..H.NVGA NV 05f0: 48 41 20 41 4d 44 41 20 44 49 44 36 20 44 49 44 HA AMDA DID6 DID 0600: 37 20 44 49 44 38 20 45 42 41 53 20 43 50 53 50 7 DID8 EBAS CPSP 0610: 20 45 45 43 50 20 45 56 43 50 20 58 42 41 53 20 EECP EVCP XBAS 0620: 4f 42 53 31 20 4f 42 53 32 20 4f 42 53 33 20 4f OBS1 OBS2 OBS3 O 0630: 42 53 34 20 4f 42 53 35 20 4f 42 53 36 20 4f 42 BS4 OBS5 OBS6 OB 0640: 53 37 20 4f 42 53 38 20 00 48 05 41 54 4d 43 08 S7 OBS8 .H.ATMC. 0650: 50 54 4d 43 08 41 54 52 41 08 50 54 52 41 08 50 PTMC.ATRA.PTRA.P 0660: 4e 48 4d 20 54 42 41 42 20 54 42 41 48 20 52 54 NHM TBAB TBAH RT 0670: 49 50 08 54 53 4f 44 08 41 54 50 43 08 50 54 50 IP.TSOD.ATPC.PTP 0680: 43 08 50 46 4c 56 08 42 52 45 56 08 53 47 4d 44 C.PFLV.BREV.SGMD 0690: 08 53 47 46 4c 08 50 57 4f 4b 08 48 4c 52 53 08 .SGFL.PWOK.HLRS. 06a0: 44 53 45 4c 08 45 53 45 4c 08 50 53 45 4c 08 50 DSEL.ESEL.PSEL.P 06b0: 57 45 4e 08 50 52 53 54 08 4d 58 44 31 20 4d 58 WEN.PRST.MXD1 MX 06c0: 44 32 20 4d 58 44 33 20 4d 58 44 34 20 4d 58 44 D2 MXD3 MXD4 MXD 06d0: 35 20 4d 58 44 36 20 4d 58 44 37 20 4d 58 44 38 5 MXD6 MXD7 MXD8 06e0: 20 47 42 41 53 10 53 47 47 50 08 00 20 41 4c 46 GBAS.SGGP.. ALF 06f0: 50 08 49 4d 4f 4e 08 50 44 54 53 08 50 4b 47 41 P.IMON.PDTS.PKGA 0700: 08 50 41 4d 54 08 41 43 30 46 08 41 43 31 46 08 .PAMT.AC0F.AC1F. 0710: 44 54 53 33 08 44 54 53 34 08 00 40 06 58 48 43 DTS3.DTS4..@.XHC 0720: 49 08 58 48 50 4d 08 00 18 58 54 55 42 20 58 54 I.XHPM...XTUB XT 0730: 55 53 20 58 4d 50 42 20 00 08 4c 50 4d 56 08 00 US XMPB ..LPMV.. 0740: 08 44 44 52 46 08 4d 4d 36 34 08 5b 80 51 4e 56 .DDRF.MM64.[.QNV 0750: 53 00 0c 18 d0 f9 da 0b 00 10 5b 81 4b 30 51 4e S.........[.K0QN 0760: 56 53 00 00 80 80 01 57 4f 4c 4e 08 42 52 4e 53 VS.....WOLN.BRNS 0770: 08 41 43 53 54 01 42 54 4c 41 01 57 4c 4c 41 01 .ACST.BTLA.WLLA. 0780: 00 01 00 01 54 4d 43 4d 01 4c 49 44 46 01 00 01 ....TMCM.LIDF... 0790: 55 53 42 50 08 55 53 47 30 01 55 53 47 31 01 55 USBP.USG0.USG1.U 07a0: 53 47 32 01 55 53 47 33 01 45 53 47 30 01 45 53 SG2.USG3.ESG0.ES 07b0: 47 31 01 45 53 47 32 01 45 53 47 33 01 4c 41 4e G1.ESG2.ESG3.LAN 07c0: 4f 01 56 43 44 42 01 43 34 57 52 01 43 34 41 43 O.VCDB.C4WR.C4AC 07d0: 01 4f 53 43 34 01 53 50 45 4e 01 53 43 52 4d 01 .OSC4.SPEN.SCRM. 07e0: 4f 44 44 53 01 42 54 4d 44 01 57 4c 4e 50 01 57 ODDS.BTMD.WLNP.W 07f0: 41 4e 50 01 4d 43 4d 55 01 43 4d 41 42 01 57 4f ANP.MCMU.CMAB.WO 0800: 46 46 01 43 4d 41 54 01 42 54 48 41 01 43 42 43 FF.CMAT.BTHA.CBC 0810: 49 01 43 57 41 49 01 43 42 54 50 01 57 57 41 50 I.CWAI.CBTP.WWAP 0820: 01 57 41 4e 41 01 57 57 4e 41 01 57 41 4c 41 01 .WANA.WWNA.WALA. 0830: 42 54 48 47 01 4f 53 46 47 01 42 41 54 42 01 53 BTHG.OSFG.BATB.S 0840: 57 44 54 01 4e 56 4d 44 01 4e 56 4f 4e 01 00 03 WDT.NVMD.NVON... 0850: 00 08 54 4a 39 30 08 53 58 46 47 08 46 54 50 53 ..TJ90.SXFG.FTPS 0860: 08 43 57 41 43 01 43 57 41 53 01 43 57 55 45 01 .CWAC.CWAS.CWUE. 0870: 43 57 55 53 01 43 34 4e 41 01 00 03 42 46 41 44 CWUS.C4NA...BFAD 0880: 01 00 07 00 08 00 08 00 08 00 08 00 08 47 43 44 .............GCD 0890: 45 04 44 41 44 44 04 49 50 4d 53 08 49 50 4d 42 E.DADD.IPMS.IPMB 08a0: 48 07 49 50 4d 52 18 49 50 4d 4f 18 49 50 4d 41 H.IPMR.IPMO.IPMA 08b0: 08 4c 49 44 58 01 00 07 57 38 4b 42 01 00 07 44 .LIDX...W8KB...D 08c0: 50 50 30 01 44 50 50 31 01 44 50 50 32 01 44 50 PP0.DPP1.DPP2.DP 08d0: 50 33 01 44 50 50 34 01 44 50 50 35 01 00 02 50 P3.DPP4.DPP5...P 08e0: 50 43 50 08 42 46 57 42 48 12 00 48 05 46 57 30 PCP.BFWBH..H.FW0 08f0: 30 40 08 43 57 41 50 10 43 57 41 54 10 00 40 06 0@.CWAP.CWAT..@. 0900: 54 50 4d 45 08 54 43 47 30 01 54 43 47 31 01 00 TPME.TCG0.TCG1.. 0910: 06 49 53 53 50 01 49 53 57 4b 02 00 05 46 46 44 .ISSP.ISWK...FFD 0920: 54 01 00 07 49 53 43 47 20 00 10 4f 56 38 47 08 T...ISCG ..OV8G. 0930: 00 08 54 4d 43 50 10 43 52 43 50 10 00 20 00 20 ..TMCP.CRCP.. . 0940: 00 20 00 20 00 40 20 4d 48 30 31 40 08 4d 48 30 . . .@ MH01@.MH0 0950: 38 40 08 43 4d 44 5f 08 45 52 52 5f 20 50 41 52 8@.CMD_.ERR_ PAR 0960: 30 20 50 41 52 31 20 50 41 52 32 20 50 41 52 33 0 PAR1 PAR2 PAR3 0970: 20 00 48 75 49 46 30 30 40 08 49 46 30 31 40 08 .HuIF00@.IF01@. 0980: 49 46 30 32 40 08 49 46 30 33 40 08 49 46 30 34 IF02@.IF03@.IF04 0990: 40 08 49 46 30 35 40 08 49 46 30 36 40 08 49 46 @.IF05@.IF06@.IF 09a0: 30 37 40 08 49 46 30 38 40 08 49 46 30 39 40 08 07@.IF08@.IF09@. 09b0: 49 46 30 41 40 08 49 46 30 42 40 08 49 46 30 43 IF0A@.IF0B@.IF0C 09c0: 40 08 49 46 30 44 40 08 49 46 30 45 40 08 49 46 @.IF0D@.IF0E@.IF 09d0: 30 46 40 08 57 49 54 4d 08 57 53 45 4c 08 57 4c 0F@.WITM.WSEL.WL 09e0: 53 30 08 57 4c 53 31 08 57 4c 53 32 08 57 4c 53 S0.WLS1.WLS2.WLS 09f0: 33 08 57 4c 53 34 08 57 4c 53 35 08 57 4c 53 36 3.WLS4.WLS5.WLS6 0a00: 08 57 4c 53 37 08 57 4c 53 38 08 57 4c 53 39 08 .WLS7.WLS8.WLS9. 0a10: 57 4c 53 41 08 57 4c 53 42 08 57 4c 53 43 08 57 WLSA.WLSB.WLSC.W 0a20: 4c 53 44 08 57 45 4e 43 08 57 4b 42 44 08 57 50 LSD.WENC.WKBD.WP 0a30: 54 59 08 57 50 41 53 48 40 57 50 4e 57 48 40 57 TY.WPASH@WPNWH@W 0a40: 53 50 4d 08 57 53 50 53 08 57 53 4d 4e 08 57 53 SPM.WSPS.WSMN.WS 0a50: 4d 58 08 57 53 45 4e 08 57 53 4b 42 08 00 88 72 MX.WSEN.WSKB...r 0a60: 02 56 45 44 49 40 40 10 84 32 02 5f 53 42 5f 08 .VEDI@@..2._SB_. 0a70: 50 52 30 30 12 41 1c 1f 12 0d 04 0c ff ff 1f 00 PR00.A.......... 0a80: 00 4c 4e 4b 46 00 12 0d 04 0c ff ff 1f 00 01 4c .LNKF..........L 0a90: 4e 4b 44 00 12 0e 04 0c ff ff 1f 00 0a 02 4c 4e NKD...........LN 0aa0: 4b 43 00 12 0e 04 0c ff ff 1f 00 0a 03 4c 4e 4b KC...........LNK 0ab0: 41 00 12 0d 04 0c ff ff 14 00 00 4c 4e 4b 41 00 A..........LNKA. 0ac0: 12 0d 04 0c ff ff 1d 00 00 4c 4e 4b 48 00 12 0d .........LNKH... 0ad0: 04 0c ff ff 1a 00 00 4c 4e 4b 41 00 12 0d 04 0c .......LNKA..... 0ae0: ff ff 1b 00 00 4c 4e 4b 47 00 12 0d 04 0c ff ff .....LNKG....... 0af0: 18 00 00 4c 4e 4b 45 00 12 0d 04 0c ff ff 19 00 ...LNKE......... 0b00: 00 4c 4e 4b 45 00 12 0d 04 0c ff ff 16 00 00 4c .LNKE..........L 0b10: 4e 4b 41 00 12 0d 04 0c ff ff 16 00 01 4c 4e 4b NKA..........LNK 0b20: 44 00 12 0e 04 0c ff ff 16 00 0a 02 4c 4e 4b 43 D...........LNKC 0b30: 00 12 0e 04 0c ff ff 16 00 0a 03 4c 4e 4b 42 00 ...........LNKB. 0b40: 12 0d 04 0c ff ff 1c 00 00 4c 4e 4b 41 00 12 0d .........LNKA... 0b50: 04 0c ff ff 1c 00 01 4c 4e 4b 42 00 12 0e 04 0c .......LNKB..... 0b60: ff ff 1c 00 0a 02 4c 4e 4b 43 00 12 0e 04 0c ff ......LNKC...... 0b70: ff 1c 00 0a 03 4c 4e 4b 44 00 12 0d 04 0c ff ff .....LNKD....... 0b80: 01 00 00 4c 4e 4b 41 00 12 0d 04 0c ff ff 01 00 ...LNKA......... 0b90: 01 4c 4e 4b 42 00 12 0e 04 0c ff ff 01 00 0a 02 .LNKB........... 0ba0: 4c 4e 4b 43 00 12 0e 04 0c ff ff 01 00 0a 03 4c LNKC...........L 0bb0: 4e 4b 44 00 12 0d 04 0c ff ff 06 00 00 4c 4e 4b NKD..........LNK 0bc0: 44 00 12 0d 04 0c ff ff 06 00 01 4c 4e 4b 41 00 D..........LNKA. 0bd0: 12 0e 04 0c ff ff 06 00 0a 02 4c 4e 4b 42 00 12 ..........LNKB.. 0be0: 0e 04 0c ff ff 06 00 0a 03 4c 4e 4b 43 00 12 0d .........LNKC... 0bf0: 04 0c ff ff 02 00 00 4c 4e 4b 41 00 12 0d 04 0c .......LNKA..... 0c00: ff ff 04 00 00 4c 4e 4b 41 00 12 0d 04 0c ff ff .....LNKA....... 0c10: 04 00 01 4c 4e 4b 42 00 12 0e 04 0c ff ff 04 00 ...LNKB......... 0c20: 0a 02 4c 4e 4b 43 00 12 0e 04 0c ff ff 04 00 0a ..LNKC.......... 0c30: 03 4c 4e 4b 44 00 08 41 52 30 30 12 43 18 1f 12 .LNKD..AR00.C... 0c40: 0b 04 0c ff ff 1f 00 00 00 0a 15 12 0b 04 0c ff ................ 0c50: ff 1f 00 01 00 0a 13 12 0c 04 0c ff ff 1f 00 0a ................ 0c60: 02 00 0a 12 12 0c 04 0c ff ff 1f 00 0a 03 00 0a ................ 0c70: 10 12 0b 04 0c ff ff 14 00 00 00 0a 15 12 0b 04 ................ 0c80: 0c ff ff 1d 00 00 00 0a 17 12 0b 04 0c ff ff 1a ................ 0c90: 00 00 00 0a 10 12 0b 04 0c ff ff 1b 00 00 00 0a ................ 0ca0: 16 12 0b 04 0c ff ff 18 00 00 00 0a 14 12 0b 04 ................ 0cb0: 0c ff ff 19 00 00 00 0a 14 12 0b 04 0c ff ff 16 ................ 0cc0: 00 00 00 0a 10 12 0b 04 0c ff ff 16 00 01 00 0a ................ 0cd0: 13 12 0c 04 0c ff ff 16 00 0a 02 00 0a 12 12 0c ................ 0ce0: 04 0c ff ff 16 00 0a 03 00 0a 11 12 0b 04 0c ff ................ 0cf0: ff 1c 00 00 00 0a 10 12 0b 04 0c ff ff 1c 00 01 ................ 0d00: 00 0a 11 12 0c 04 0c ff ff 1c 00 0a 02 00 0a 12 ................ 0d10: 12 0c 04 0c ff ff 1c 00 0a 03 00 0a 13 12 0b 04 ................ 0d20: 0c ff ff 01 00 00 00 0a 10 12 0b 04 0c ff ff 01 ................ 0d30: 00 01 00 0a 11 12 0c 04 0c ff ff 01 00 0a 02 00 ................ 0d40: 0a 12 12 0c 04 0c ff ff 01 00 0a 03 00 0a 13 12 ................ 0d50: 0b 04 0c ff ff 06 00 00 00 0a 13 12 0b 04 0c ff ................ 0d60: ff 06 00 01 00 0a 10 12 0c 04 0c ff ff 06 00 0a ................ 0d70: 02 00 0a 11 12 0c 04 0c ff ff 06 00 0a 03 00 0a ................ 0d80: 12 12 0b 04 0c ff ff 02 00 00 00 0a 10 12 0b 04 ................ 0d90: 0c ff ff 04 00 00 00 0a 10 12 0b 04 0c ff ff 04 ................ 0da0: 00 01 00 0a 11 12 0c 04 0c ff ff 04 00 0a 02 00 ................ 0db0: 0a 12 12 0c 04 0c ff ff 04 00 0a 03 00 0a 13 08 ................ 0dc0: 50 52 30 34 12 34 04 12 0b 04 0b ff ff 00 4c 4e PR04.4........LN 0dd0: 4b 41 00 12 0b 04 0b ff ff 01 4c 4e 4b 42 00 12 KA........LNKB.. 0de0: 0c 04 0b ff ff 0a 02 4c 4e 4b 43 00 12 0c 04 0b .......LNKC..... 0df0: ff ff 0a 03 4c 4e 4b 44 00 08 41 52 30 34 12 2c ....LNKD..AR04., 0e00: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 0e10: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 0e20: 12 0a 04 0b ff ff 0a 03 00 0a 13 08 50 52 30 35 ............PR05 0e30: 12 34 04 12 0b 04 0b ff ff 00 4c 4e 4b 42 00 12 .4........LNKB.. 0e40: 0b 04 0b ff ff 01 4c 4e 4b 43 00 12 0c 04 0b ff ......LNKC...... 0e50: ff 0a 02 4c 4e 4b 44 00 12 0c 04 0b ff ff 0a 03 ...LNKD......... 0e60: 4c 4e 4b 41 00 08 41 52 30 35 12 2c 04 12 09 04 LNKA..AR05.,.... 0e70: 0b ff ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a ................ 0e80: 12 12 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ................ 0e90: ff ff 0a 03 00 0a 10 08 50 52 30 36 12 34 04 12 ........PR06.4.. 0ea0: 0b 04 0b ff ff 00 4c 4e 4b 43 00 12 0b 04 0b ff ......LNKC...... 0eb0: ff 01 4c 4e 4b 44 00 12 0c 04 0b ff ff 0a 02 4c ..LNKD.........L 0ec0: 4e 4b 41 00 12 0c 04 0b ff ff 0a 03 4c 4e 4b 42 NKA.........LNKB 0ed0: 00 08 41 52 30 36 12 2c 04 12 09 04 0b ff ff 00 ..AR06.,........ 0ee0: 00 0a 12 12 09 04 0b ff ff 01 00 0a 13 12 0a 04 ................ 0ef0: 0b ff ff 0a 02 00 0a 10 12 0a 04 0b ff ff 0a 03 ................ 0f00: 00 0a 11 08 50 52 30 37 12 34 04 12 0b 04 0b ff ....PR07.4...... 0f10: ff 00 4c 4e 4b 44 00 12 0b 04 0b ff ff 01 4c 4e ..LNKD........LN 0f20: 4b 41 00 12 0c 04 0b ff ff 0a 02 4c 4e 4b 42 00 KA.........LNKB. 0f30: 12 0c 04 0b ff ff 0a 03 4c 4e 4b 43 00 08 41 52 ........LNKC..AR 0f40: 30 37 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 07.,............ 0f50: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 0f60: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 08 ................ 0f70: 50 52 30 38 12 34 04 12 0b 04 0b ff ff 00 4c 4e PR08.4........LN 0f80: 4b 41 00 12 0b 04 0b ff ff 01 4c 4e 4b 42 00 12 KA........LNKB.. 0f90: 0c 04 0b ff ff 0a 02 4c 4e 4b 43 00 12 0c 04 0b .......LNKC..... 0fa0: ff ff 0a 03 4c 4e 4b 44 00 08 41 52 30 38 12 2c ....LNKD..AR08., 0fb0: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 0fc0: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 0fd0: 12 0a 04 0b ff ff 0a 03 00 0a 13 08 50 52 30 39 ............PR09 0fe0: 12 34 04 12 0b 04 0b ff ff 00 4c 4e 4b 42 00 12 .4........LNKB.. 0ff0: 0b 04 0b ff ff 01 4c 4e 4b 43 00 12 0c 04 0b ff ......LNKC...... 1000: ff 0a 02 4c 4e 4b 44 00 12 0c 04 0b ff ff 0a 03 ...LNKD......... 1010: 4c 4e 4b 41 00 08 41 52 30 39 12 2c 04 12 09 04 LNKA..AR09.,.... 1020: 0b ff ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a ................ 1030: 12 12 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ................ 1040: ff ff 0a 03 00 0a 10 08 50 52 30 45 12 34 04 12 ........PR0E.4.. 1050: 0b 04 0b ff ff 00 4c 4e 4b 43 00 12 0b 04 0b ff ......LNKC...... 1060: ff 01 4c 4e 4b 44 00 12 0c 04 0b ff ff 0a 02 4c ..LNKD.........L 1070: 4e 4b 41 00 12 0c 04 0b ff ff 0a 03 4c 4e 4b 42 NKA.........LNKB 1080: 00 08 41 52 30 45 12 2c 04 12 09 04 0b ff ff 00 ..AR0E.,........ 1090: 00 0a 12 12 09 04 0b ff ff 01 00 0a 13 12 0a 04 ................ 10a0: 0b ff ff 0a 02 00 0a 10 12 0a 04 0b ff ff 0a 03 ................ 10b0: 00 0a 11 08 50 52 30 46 12 34 04 12 0b 04 0b ff ....PR0F.4...... 10c0: ff 00 4c 4e 4b 44 00 12 0b 04 0b ff ff 01 4c 4e ..LNKD........LN 10d0: 4b 41 00 12 0c 04 0b ff ff 0a 02 4c 4e 4b 42 00 KA.........LNKB. 10e0: 12 0c 04 0b ff ff 0a 03 4c 4e 4b 43 00 08 41 52 ........LNKC..AR 10f0: 30 46 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 0F.,............ 1100: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 1110: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 08 ................ 1120: 50 52 30 32 12 34 04 12 0b 04 0b ff ff 00 4c 4e PR02.4........LN 1130: 4b 41 00 12 0b 04 0b ff ff 01 4c 4e 4b 42 00 12 KA........LNKB.. 1140: 0c 04 0b ff ff 0a 02 4c 4e 4b 43 00 12 0c 04 0b .......LNKC..... 1150: ff ff 0a 03 4c 4e 4b 44 00 08 41 52 30 32 12 2c ....LNKD..AR02., 1160: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 1170: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 1180: 12 0a 04 0b ff ff 0a 03 00 0a 13 08 50 52 30 41 ............PR0A 1190: 12 34 04 12 0b 04 0b ff ff 00 4c 4e 4b 42 00 12 .4........LNKB.. 11a0: 0b 04 0b ff ff 01 4c 4e 4b 43 00 12 0c 04 0b ff ......LNKC...... 11b0: ff 0a 02 4c 4e 4b 44 00 12 0c 04 0b ff ff 0a 03 ...LNKD......... 11c0: 4c 4e 4b 41 00 08 41 52 30 41 12 2c 04 12 09 04 LNKA..AR0A.,.... 11d0: 0b ff ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a ................ 11e0: 12 12 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ................ 11f0: ff ff 0a 03 00 0a 10 08 50 52 30 42 12 34 04 12 ........PR0B.4.. 1200: 0b 04 0b ff ff 00 4c 4e 4b 43 00 12 0b 04 0b ff ......LNKC...... 1210: ff 01 4c 4e 4b 44 00 12 0c 04 0b ff ff 0a 02 4c ..LNKD.........L 1220: 4e 4b 41 00 12 0c 04 0b ff ff 0a 03 4c 4e 4b 42 NKA.........LNKB 1230: 00 08 41 52 30 42 12 2c 04 12 09 04 0b ff ff 00 ..AR0B.,........ 1240: 00 0a 12 12 09 04 0b ff ff 01 00 0a 13 12 0a 04 ................ 1250: 0b ff ff 0a 02 00 0a 10 12 0a 04 0b ff ff 0a 03 ................ 1260: 00 0a 11 08 50 52 30 43 12 34 04 12 0b 04 0b ff ....PR0C.4...... 1270: ff 00 4c 4e 4b 44 00 12 0b 04 0b ff ff 01 4c 4e ..LNKD........LN 1280: 4b 41 00 12 0c 04 0b ff ff 0a 02 4c 4e 4b 42 00 KA.........LNKB. 1290: 12 0c 04 0b ff ff 0a 03 4c 4e 4b 43 00 08 41 52 ........LNKC..AR 12a0: 30 43 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 0C.,............ 12b0: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 12c0: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 08 ................ 12d0: 50 52 30 31 12 49 0a 0c 12 0b 04 0b ff ff 00 4c PR01.I.........L 12e0: 4e 4b 46 00 12 0b 04 0b ff ff 01 4c 4e 4b 47 00 NKF........LNKG. 12f0: 12 0c 04 0b ff ff 0a 02 4c 4e 4b 48 00 12 0c 04 ........LNKH.... 1300: 0b ff ff 0a 03 4c 4e 4b 45 00 12 0d 04 0c ff ff .....LNKE....... 1310: 01 00 00 4c 4e 4b 47 00 12 0d 04 0c ff ff 01 00 ...LNKG......... 1320: 01 4c 4e 4b 46 00 12 0e 04 0c ff ff 01 00 0a 02 .LNKF........... 1330: 4c 4e 4b 45 00 12 0e 04 0c ff ff 01 00 0a 03 4c LNKE...........L 1340: 4e 4b 48 00 12 0d 04 0c ff ff 05 00 00 4c 4e 4b NKH..........LNK 1350: 43 00 12 0d 04 0c ff ff 05 00 01 4c 4e 4b 45 00 C..........LNKE. 1360: 12 0e 04 0c ff ff 05 00 0a 02 4c 4e 4b 47 00 12 ..........LNKG.. 1370: 0e 04 0c ff ff 05 00 0a 03 4c 4e 4b 46 00 08 41 .........LNKF..A 1380: 52 30 31 12 41 09 0c 12 09 04 0b ff ff 00 00 0a R01.A........... 1390: 15 12 09 04 0b ff ff 01 00 0a 16 12 0a 04 0b ff ................ 13a0: ff 0a 02 00 0a 17 12 0a 04 0b ff ff 0a 03 00 0a ................ 13b0: 14 12 0b 04 0c ff ff 01 00 00 00 0a 16 12 0b 04 ................ 13c0: 0c ff ff 01 00 01 00 0a 15 12 0c 04 0c ff ff 01 ................ 13d0: 00 0a 02 00 0a 14 12 0c 04 0c ff ff 01 00 0a 03 ................ 13e0: 00 0a 17 12 0b 04 0c ff ff 05 00 00 00 0a 12 12 ................ 13f0: 0b 04 0c ff ff 05 00 01 00 0a 14 12 0c 04 0c ff ................ 1400: ff 05 00 0a 02 00 0a 16 12 0c 04 0c ff ff 05 00 ................ 1410: 0a 03 00 0a 15 08 50 52 53 41 11 09 0a 06 23 7a ......PRSA....#z 1420: dc 18 79 00 06 50 52 53 41 50 52 53 42 06 50 52 ..y..PRSAPRSB.PR 1430: 53 41 50 52 53 43 06 50 52 53 41 50 52 53 44 06 SAPRSC.PRSAPRSD. 1440: 50 52 53 41 50 52 53 45 06 50 52 53 41 50 52 53 PRSAPRSE.PRSAPRS 1450: 46 06 50 52 53 41 50 52 53 47 06 50 52 53 41 50 F.PRSAPRSG.PRSAP 1460: 52 53 48 5b 82 87 92 01 50 43 49 30 08 5f 48 49 RSH[....PCI0._HI 1470: 44 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 d0 0a 03 D.A...._CID.A... 1480: 08 5f 41 44 52 00 14 09 5e 42 4e 30 30 00 a4 00 ._ADR...^BN00... 1490: 14 0b 5f 42 42 4e 00 a4 42 4e 30 30 08 5f 55 49 .._BBN..BN00._UI 14a0: 44 00 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 D..._PRT...PICM. 14b0: 41 52 30 30 a4 50 52 30 30 5b 80 48 42 55 53 02 AR00.PR00[.HBUS. 14c0: 00 0b 00 01 5b 81 4b 0d 48 42 55 53 03 00 40 20 ....[.K.HBUS..@ 14d0: 45 50 45 4e 01 00 0b 45 50 42 52 14 00 20 4d 48 EPEN...EPBR.. MH 14e0: 45 4e 01 00 0e 4d 48 42 52 11 00 20 47 43 4c 4b EN...MHBR.. GCLK 14f0: 01 00 1f 44 30 45 4e 01 00 4f 05 50 58 45 4e 01 ...D0EN..O.PXEN. 1500: 50 58 53 5a 02 00 17 50 58 42 52 06 00 20 44 49 PXSZ...PXBR.. DI 1510: 45 4e 01 00 0b 44 49 42 52 14 00 20 00 14 4d 45 EN...DIBR.. ..ME 1520: 42 52 0c 00 40 06 00 04 50 4d 30 48 02 00 02 50 BR..@...PM0H...P 1530: 4d 31 4c 02 00 02 50 4d 31 48 02 00 02 50 4d 32 M1L...PM1H...PM2 1540: 4c 02 00 02 50 4d 32 48 02 00 02 50 4d 33 4c 02 L...PM2H...PM3L. 1550: 00 02 50 4d 33 48 02 00 02 50 4d 34 4c 02 00 02 ..PM3H...PM4L... 1560: 50 4d 34 48 02 00 02 50 4d 35 4c 02 00 02 50 4d PM4H...PM5L...PM 1570: 35 48 02 00 02 50 4d 36 4c 02 00 02 50 4d 36 48 5H...PM6L...PM6H 1580: 02 00 02 00 48 10 00 14 54 55 55 44 13 00 49 07 ....H...TUUD..I. 1590: 00 14 54 4c 55 44 0c 00 40 04 00 07 48 54 53 45 ..TLUD..@...HTSE 15a0: 01 5b 80 4d 43 48 54 00 0c 00 00 d1 fe 0b 00 11 .[.MCHT......... 15b0: 5b 81 06 4d 43 48 54 01 08 42 55 46 30 11 43 1f [..MCHT..BUF0.C. 15c0: 0b ee 01 88 0d 00 02 0c 00 00 00 00 00 ff 00 00 ................ 15d0: 00 00 01 87 17 00 01 0c 03 00 00 00 00 00 00 00 ................ 15e0: 00 f7 0c 00 00 00 00 00 00 f8 0c 00 00 47 01 f8 .............G.. 15f0: 0c f8 0c 01 08 87 17 00 01 0c 03 00 00 00 00 00 ................ 1600: 0d 00 00 ff ff 00 00 00 00 00 00 00 f3 00 00 87 ................ 1610: 17 00 00 0c 03 00 00 00 00 00 00 0a 00 ff ff 0b ................ 1620: 00 00 00 00 00 00 00 02 00 87 17 00 00 0c 03 00 ................ 1630: 00 00 00 00 00 0c 00 ff 3f 0c 00 00 00 00 00 00 ........?....... 1640: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 40 0c @.............@. 1650: 00 ff 7f 0c 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1660: 00 0c 03 00 00 00 00 00 80 0c 00 ff bf 0c 00 00 ................ 1670: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1680: 00 00 c0 0c 00 ff ff 0c 00 00 00 00 00 00 40 00 ..............@. 1690: 00 87 17 00 00 0c 03 00 00 00 00 00 00 0d 00 ff ................ 16a0: 3f 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c ?.......@....... 16b0: 03 00 00 00 00 00 40 0d 00 ff 7f 0d 00 00 00 00 ......@......... 16c0: 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 ..@............. 16d0: 80 0d 00 ff bf 0d 00 00 00 00 00 00 40 00 00 87 ............@... 16e0: 17 00 00 0c 03 00 00 00 00 00 c0 0d 00 ff ff 0d ................ 16f0: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 1700: 00 00 00 00 00 0e 00 ff 3f 0e 00 00 00 00 00 00 ........?....... 1710: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 40 0e @.............@. 1720: 00 ff 7f 0e 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1730: 00 0c 03 00 00 00 00 00 80 0e 00 ff bf 0e 00 00 ................ 1740: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1750: 00 00 c0 0e 00 ff ff 0e 00 00 00 00 00 00 40 00 ..............@. 1760: 00 87 17 00 00 0c 03 00 00 00 00 00 00 0f 00 ff ................ 1770: ff 0f 00 00 00 00 00 00 00 01 00 87 17 00 00 0c ................ 1780: 03 00 00 00 00 00 00 00 00 ff ff af fe 00 00 00 ................ 1790: 00 00 00 b0 fe 87 17 00 00 0c 03 00 00 00 00 00 ................ 17a0: 00 d4 fe ff 4f d4 fe 00 00 00 00 00 50 00 00 79 ....O.......P..y 17b0: 00 14 46 30 5f 43 52 53 08 8b 42 55 46 30 0a 0a ..F0_CRS..BUF0.. 17c0: 50 42 4d 58 70 74 7a 50 45 4c 4e 0a 14 00 0a 02 PBMXptzPELN..... 17d0: 00 50 42 4d 58 8b 42 55 46 30 0a 0e 50 42 4c 4e .PBMX.BUF0..PBLN 17e0: 70 74 7a 50 45 4c 4e 0a 14 00 01 00 50 42 4c 4e ptzPELN.....PBLN 17f0: a0 16 50 4d 31 4c 8a 42 55 46 30 0a 7c 43 30 4c ..PM1L.BUF0.|C0L 1800: 4e 70 00 43 30 4c 4e a0 19 93 50 4d 31 4c 01 8d Np.C0LN...PM1L.. 1810: 42 55 46 30 0b 58 03 43 30 52 57 70 00 43 30 52 BUF0.X.C0RWp.C0R 1820: 57 a0 16 50 4d 31 48 8a 42 55 46 30 0a 96 43 34 W..PM1H.BUF0..C4 1830: 4c 4e 70 00 43 34 4c 4e a0 19 93 50 4d 31 48 01 LNp.C4LN...PM1H. 1840: 8d 42 55 46 30 0b 28 04 43 34 52 57 70 00 43 34 .BUF0.(.C4RWp.C4 1850: 52 57 a0 16 50 4d 32 4c 8a 42 55 46 30 0a b0 43 RW..PM2L.BUF0..C 1860: 38 4c 4e 70 00 43 38 4c 4e a0 19 93 50 4d 32 4c 8LNp.C8LN...PM2L 1870: 01 8d 42 55 46 30 0b f8 04 43 38 52 57 70 00 43 ..BUF0...C8RWp.C 1880: 38 52 57 a0 16 50 4d 32 48 8a 42 55 46 30 0a ca 8RW..PM2H.BUF0.. 1890: 43 43 4c 4e 70 00 43 43 4c 4e a0 19 93 50 4d 32 CCLNp.CCLN...PM2 18a0: 48 01 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 H..BUF0...CCRWp. 18b0: 43 43 52 57 a0 16 50 4d 33 4c 8a 42 55 46 30 0a CCRW..PM3L.BUF0. 18c0: e4 44 30 4c 4e 70 00 44 30 4c 4e a0 19 93 50 4d .D0LNp.D0LN...PM 18d0: 33 4c 01 8d 42 55 46 30 0b 98 06 44 30 52 57 70 3L..BUF0...D0RWp 18e0: 00 44 30 52 57 a0 16 50 4d 33 48 8a 42 55 46 30 .D0RW..PM3H.BUF0 18f0: 0a fe 44 34 4c 4e 70 00 44 34 4c 4e a0 19 93 50 ..D4LNp.D4LN...P 1900: 4d 33 48 01 8d 42 55 46 30 0b 68 07 44 34 52 57 M3H..BUF0.h.D4RW 1910: 70 00 44 34 52 57 a0 17 50 4d 34 4c 8a 42 55 46 p.D4RW..PM4L.BUF 1920: 30 0b 18 01 44 38 4c 4e 70 00 44 38 4c 4e a0 19 0...D8LNp.D8LN.. 1930: 93 50 4d 34 4c 01 8d 42 55 46 30 0b 38 08 44 38 .PM4L..BUF0.8.D8 1940: 52 57 70 00 44 38 52 57 a0 17 50 4d 34 48 8a 42 RWp.D8RW..PM4H.B 1950: 55 46 30 0b 32 01 44 43 4c 4e 70 00 44 43 4c 4e UF0.2.DCLNp.DCLN 1960: a0 19 93 50 4d 34 48 01 8d 42 55 46 30 0b 08 09 ...PM4H..BUF0... 1970: 44 43 52 57 70 00 44 43 52 57 a0 17 50 4d 35 4c DCRWp.DCRW..PM5L 1980: 8a 42 55 46 30 0b 4c 01 45 30 4c 4e 70 00 45 30 .BUF0.L.E0LNp.E0 1990: 4c 4e a0 19 93 50 4d 35 4c 01 8d 42 55 46 30 0b LN...PM5L..BUF0. 19a0: d8 09 45 30 52 57 70 00 45 30 52 57 a0 17 50 4d ..E0RWp.E0RW..PM 19b0: 35 48 8a 42 55 46 30 0b 66 01 45 34 4c 4e 70 00 5H.BUF0.f.E4LNp. 19c0: 45 34 4c 4e a0 19 93 50 4d 35 48 01 8d 42 55 46 E4LN...PM5H..BUF 19d0: 30 0b a8 0a 45 34 52 57 70 00 45 34 52 57 a0 17 0...E4RWp.E4RW.. 19e0: 50 4d 36 4c 8a 42 55 46 30 0b 80 01 45 38 4c 4e PM6L.BUF0...E8LN 19f0: 70 00 45 38 4c 4e a0 19 93 50 4d 36 4c 01 8d 42 p.E8LN...PM6L..B 1a00: 55 46 30 0b 78 0b 45 38 52 57 70 00 45 38 52 57 UF0.x.E8RWp.E8RW 1a10: a0 17 50 4d 36 48 8a 42 55 46 30 0b 9a 01 45 43 ..PM6H.BUF0...EC 1a20: 4c 4e 70 00 45 43 4c 4e a0 19 93 50 4d 36 48 01 LNp.ECLN...PM6H. 1a30: 8d 42 55 46 30 0b 48 0c 45 43 52 57 70 00 45 43 .BUF0.H.ECRWp.EC 1a40: 52 57 a0 17 50 4d 30 48 8a 42 55 46 30 0b b4 01 RW..PM0H.BUF0... 1a50: 46 30 4c 4e 70 00 46 30 4c 4e a0 19 93 50 4d 30 F0LNp.F0LN...PM0 1a60: 48 01 8d 42 55 46 30 0b 18 0d 46 30 52 57 70 00 H..BUF0...F0RWp. 1a70: 46 30 52 57 8a 42 55 46 30 0b c2 01 4d 31 4d 4e F0RW.BUF0...M1MN 1a80: 8a 42 55 46 30 0b c6 01 4d 31 4d 58 8a 42 55 46 .BUF0...M1MX.BUF 1a90: 30 0b ce 01 4d 31 4c 4e 79 54 4c 55 44 0a 14 4d 0...M1LNyTLUD..M 1aa0: 31 4d 4e 72 74 4d 31 4d 58 4d 31 4d 4e 00 01 4d 1MNrtM1MXM1MN..M 1ab0: 31 4c 4e a4 42 55 46 30 08 47 55 49 44 11 13 0a 1LN.BUF0.GUID... 1ac0: 10 5b 4d db 33 f7 1f 1c 40 96 57 74 41 c0 3d d7 .[M.3...@.WtA.=. 1ad0: 66 08 53 55 50 50 00 08 43 54 52 4c 00 08 58 43 f.SUPP..CTRL..XC 1ae0: 4e 54 00 14 4a 0f 5f 4f 53 43 0c 70 6b 60 8a 60 NT..J._OSC.pk`.` 1af0: 00 43 44 57 31 8a 60 0a 04 43 44 57 32 8a 60 0a .CDW1.`..CDW2.`. 1b00: 08 43 44 57 33 a0 1a 5e 2e 58 48 43 5f 43 55 49 .CDW3..^.XHC_CUI 1b10: 44 68 a4 5e 2e 58 48 43 5f 50 4f 53 43 69 6a 6b Dh.^.XHC_POSCijk 1b20: a1 2c a0 2a 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 .,.*_OSI.Windows 1b30: 20 32 30 31 32 00 a0 16 93 58 43 4e 54 00 5e 2e 2012....XCNT.^. 1b40: 58 48 43 5f 58 53 45 4c 75 58 43 4e 54 a0 41 08 XHC_XSELuXCNT.A. 1b50: 90 93 68 47 55 49 44 4e 45 58 50 70 43 44 57 32 ..hGUIDNEXPpCDW2 1b60: 53 55 50 50 70 43 44 57 33 43 54 52 4c a0 25 80 SUPPpCDW3CTRL.%. 1b70: 7b 43 44 57 31 01 00 00 a0 0c 7b 43 54 52 4c 01 {CDW1.....{CTRL. 1b80: 00 4e 48 50 47 a0 0d 7b 43 54 52 4c 0a 04 00 4e .NHPG..{CTRL...N 1b90: 50 4d 45 a0 10 92 93 69 01 7d 43 44 57 31 0a 08 PME....i.}CDW1.. 1ba0: 43 44 57 31 a0 16 92 93 43 44 57 33 43 54 52 4c CDW1....CDW3CTRL 1bb0: 7d 43 44 57 31 0a 10 43 44 57 31 70 43 54 52 4c }CDW1..CDW1pCTRL 1bc0: 43 44 57 33 70 43 54 52 4c 4f 53 43 43 a4 60 a1 CDW3pCTRLOSCC.`. 1bd0: 0e 7d 43 44 57 31 0a 04 43 44 57 31 a4 60 10 40 .}CDW1..CDW1.`.@ 1be0: 14 5c 2e 5f 53 42 5f 50 43 49 30 14 0d 41 52 30 .\._SB_PCI0..AR0 1bf0: 30 00 a4 5e 5e 41 52 30 30 14 0d 50 52 30 30 00 0..^^AR00..PR00. 1c00: a4 5e 5e 50 52 30 30 14 0d 41 52 30 31 00 a4 5e .^^PR00..AR01..^ 1c10: 5e 41 52 30 31 14 0d 50 52 30 31 00 a4 5e 5e 50 ^AR01..PR01..^^P 1c20: 52 30 31 14 0d 41 52 30 32 00 a4 5e 5e 41 52 30 R01..AR02..^^AR0 1c30: 32 14 0d 50 52 30 32 00 a4 5e 5e 50 52 30 32 14 2..PR02..^^PR02. 1c40: 0d 41 52 30 34 00 a4 5e 5e 41 52 30 34 14 0d 50 .AR04..^^AR04..P 1c50: 52 30 34 00 a4 5e 5e 50 52 30 34 14 0d 41 52 30 R04..^^PR04..AR0 1c60: 35 00 a4 5e 5e 41 52 30 35 14 0d 50 52 30 35 00 5..^^AR05..PR05. 1c70: a4 5e 5e 50 52 30 35 14 0d 41 52 30 36 00 a4 5e .^^PR05..AR06..^ 1c80: 5e 41 52 30 36 14 0d 50 52 30 36 00 a4 5e 5e 50 ^AR06..PR06..^^P 1c90: 52 30 36 14 0d 41 52 30 37 00 a4 5e 5e 41 52 30 R06..AR07..^^AR0 1ca0: 37 14 0d 50 52 30 37 00 a4 5e 5e 50 52 30 37 14 7..PR07..^^PR07. 1cb0: 0d 41 52 30 38 00 a4 5e 5e 41 52 30 38 14 0d 50 .AR08..^^AR08..P 1cc0: 52 30 38 00 a4 5e 5e 50 52 30 38 14 0d 41 52 30 R08..^^PR08..AR0 1cd0: 39 00 a4 5e 5e 41 52 30 39 14 0d 50 52 30 39 00 9..^^AR09..PR09. 1ce0: a4 5e 5e 50 52 30 39 14 0d 41 52 30 41 00 a4 5e .^^PR09..AR0A..^ 1cf0: 5e 41 52 30 41 14 0d 50 52 30 41 00 a4 5e 5e 50 ^AR0A..PR0A..^^P 1d00: 52 30 41 14 0d 41 52 30 42 00 a4 5e 5e 41 52 30 R0A..AR0B..^^AR0 1d10: 42 14 0d 50 52 30 42 00 a4 5e 5e 50 52 30 42 5b B..PR0B..^^PR0B[ 1d20: 82 36 50 30 50 31 08 5f 41 44 52 0c 00 00 1e 00 .6P0P1._ADR..... 1d30: 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 0b 0a 04 .._PRW..GPRW.... 1d40: 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 41 52 .._PRT...PICM.AR 1d50: 30 31 a4 50 52 30 31 5b 82 83 03 01 4c 50 43 42 01.PR01[....LPCB 1d60: 08 5f 41 44 52 0c 00 00 1f 00 10 4e 64 5c 5f 53 ._ADR......Nd\_S 1d70: 42 5f 08 54 43 47 50 11 0b 0a 08 1f e0 1f 01 02 B_.TCGP......... 1d80: 04 08 f0 8c 54 43 47 50 00 50 50 52 51 8c 54 43 ....TCGP.PPRQ.TC 1d90: 47 50 01 50 50 4c 31 8c 54 43 47 50 0a 02 50 50 GP.PPL1.TCGP..PP 1da0: 52 50 8c 54 43 47 50 0a 03 54 50 52 53 8c 54 43 RP.TCGP..TPRS.TC 1db0: 47 50 0a 04 50 50 4f 52 8c 54 43 47 50 0a 05 54 GP..PPOR.TCGP..T 1dc0: 50 4d 56 8c 54 43 47 50 0a 06 4d 4f 52 5f 8c 54 PMV.TCGP..MOR_.T 1dd0: 43 47 50 0a 07 54 56 45 4e 5b 80 54 43 47 43 01 CGP..TVEN[.TCGC. 1de0: 0a 72 0a 02 5b 81 10 54 43 47 43 11 54 49 44 58 .r..[..TCGC.TIDX 1df0: 08 54 50 44 41 08 5b 86 1c 54 49 44 58 54 50 44 .TPDA.[..TIDXTPD 1e00: 41 11 00 40 20 54 50 50 31 08 50 50 4c 4f 08 54 A..@ TPP1.PPLO.T 1e10: 50 50 33 08 5b 80 53 4d 49 50 01 0a b2 0a 02 5b PP3.[.SMIP.....[ 1e20: 81 10 53 4d 49 50 02 53 4d 49 54 08 53 4d 49 44 ..SMIP.SMIT.SMID 1e30: 08 5b 80 2f 03 50 43 49 30 4c 50 43 42 4c 50 43 .[./.PCI0LPCBLPC 1e40: 31 02 0a 40 0a c0 5b 81 4a 04 2f 03 50 43 49 30 1..@..[.J./.PCI0 1e50: 4c 50 43 42 4c 50 43 31 00 00 40 10 50 41 52 43 LPCBLPC1..@.PARC 1e60: 08 50 42 52 43 08 50 43 52 43 08 50 44 52 43 08 .PBRC.PCRC.PDRC. 1e70: 00 20 50 45 52 43 08 50 46 52 43 08 50 47 52 43 . PERC.PFRC.PGRC 1e80: 08 50 48 52 43 08 00 40 20 00 08 00 08 58 55 53 .PHRC..@ ....XUS 1e90: 42 01 5b 82 42 0a 4c 4e 4b 41 08 5f 48 49 44 0c B.[.B.LNKA._HID. 1ea0: 41 d0 0c 0f 08 5f 55 49 44 01 14 11 5f 44 49 53 A...._UID..._DIS 1eb0: 08 7d 50 41 52 43 0a 80 50 41 52 43 14 0b 5f 50 .}PARC..PARC.._P 1ec0: 52 53 08 a4 50 52 53 41 14 38 5f 43 52 53 08 08 RS..PRSA.8_CRS.. 1ed0: 52 54 4c 41 11 09 0a 06 23 00 00 18 79 00 8b 52 RTLA....#...y..R 1ee0: 54 4c 41 01 49 52 51 30 70 00 49 52 51 30 79 01 TLA.IRQ0p.IRQ0y. 1ef0: 7b 50 41 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c {PARC...IRQ0.RTL 1f00: 41 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 A.._SRS..h.IRQ0. 1f10: 49 52 51 30 60 76 60 70 60 50 41 52 43 14 18 5f IRQ0`v`p`PARC.._ 1f20: 53 54 41 08 a0 0c 7b 50 41 52 43 0a 80 00 a4 0a STA...{PARC..... 1f30: 09 a1 04 a4 0a 0b 5b 82 43 0a 4c 4e 4b 42 08 5f ......[.C.LNKB._ 1f40: 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 02 14 HID.A...._UID... 1f50: 11 5f 44 49 53 08 7d 50 42 52 43 0a 80 50 42 52 ._DIS.}PBRC..PBR 1f60: 43 14 0b 5f 50 52 53 08 a4 50 52 53 42 14 38 5f C.._PRS..PRSB.8_ 1f70: 43 52 53 08 08 52 54 4c 42 11 09 0a 06 23 00 00 CRS..RTLB....#.. 1f80: 18 79 00 8b 52 54 4c 42 01 49 52 51 30 70 00 49 .y..RTLB.IRQ0p.I 1f90: 52 51 30 79 01 7b 50 42 52 43 0a 0f 00 49 52 51 RQ0y.{PBRC...IRQ 1fa0: 30 a4 52 54 4c 42 14 1b 5f 53 52 53 09 8b 68 01 0.RTLB.._SRS..h. 1fb0: 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 42 IRQ0.IRQ0`v`p`PB 1fc0: 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 42 52 43 RC.._STA...{PBRC 1fd0: 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 43 0a 4c ...........[.C.L 1fe0: 4e 4b 43 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 NKC._HID.A...._U 1ff0: 49 44 0a 03 14 11 5f 44 49 53 08 7d 50 43 52 43 ID...._DIS.}PCRC 2000: 0a 80 50 43 52 43 14 0b 5f 50 52 53 08 a4 50 52 ..PCRC.._PRS..PR 2010: 53 43 14 38 5f 43 52 53 08 08 52 54 4c 43 11 09 SC.8_CRS..RTLC.. 2020: 0a 06 23 00 00 18 79 00 8b 52 54 4c 43 01 49 52 ..#...y..RTLC.IR 2030: 51 30 70 00 49 52 51 30 79 01 7b 50 43 52 43 0a Q0p.IRQ0y.{PCRC. 2040: 0f 00 49 52 51 30 a4 52 54 4c 43 14 1b 5f 53 52 ..IRQ0.RTLC.._SR 2050: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 2060: 60 70 60 50 43 52 43 14 18 5f 53 54 41 08 a0 0c `p`PCRC.._STA... 2070: 7b 50 43 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PCRC........... 2080: 5b 82 43 0a 4c 4e 4b 44 08 5f 48 49 44 0c 41 d0 [.C.LNKD._HID.A. 2090: 0c 0f 08 5f 55 49 44 0a 04 14 11 5f 44 49 53 08 ..._UID...._DIS. 20a0: 7d 50 44 52 43 0a 80 50 44 52 43 14 0b 5f 50 52 }PDRC..PDRC.._PR 20b0: 53 08 a4 50 52 53 44 14 38 5f 43 52 53 08 08 52 S..PRSD.8_CRS..R 20c0: 54 4c 44 11 09 0a 06 23 00 00 18 79 00 8b 52 54 TLD....#...y..RT 20d0: 4c 44 01 49 52 51 30 70 00 49 52 51 30 79 01 7b LD.IRQ0p.IRQ0y.{ 20e0: 50 44 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 44 PDRC...IRQ0.RTLD 20f0: 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 .._SRS..h.IRQ0.I 2100: 52 51 30 60 76 60 70 60 50 44 52 43 14 18 5f 53 RQ0`v`p`PDRC.._S 2110: 54 41 08 a0 0c 7b 50 44 52 43 0a 80 00 a4 0a 09 TA...{PDRC...... 2120: a1 04 a4 0a 0b 5b 82 43 0a 4c 4e 4b 45 08 5f 48 .....[.C.LNKE._H 2130: 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 05 14 11 ID.A...._UID.... 2140: 5f 44 49 53 08 7d 50 45 52 43 0a 80 50 45 52 43 _DIS.}PERC..PERC 2150: 14 0b 5f 50 52 53 08 a4 50 52 53 45 14 38 5f 43 .._PRS..PRSE.8_C 2160: 52 53 08 08 52 54 4c 45 11 09 0a 06 23 00 00 18 RS..RTLE....#... 2170: 79 00 8b 52 54 4c 45 01 49 52 51 30 70 00 49 52 y..RTLE.IRQ0p.IR 2180: 51 30 79 01 7b 50 45 52 43 0a 0f 00 49 52 51 30 Q0y.{PERC...IRQ0 2190: a4 52 54 4c 45 14 1b 5f 53 52 53 09 8b 68 01 49 .RTLE.._SRS..h.I 21a0: 52 51 30 82 49 52 51 30 60 76 60 70 60 50 45 52 RQ0.IRQ0`v`p`PER 21b0: 43 14 18 5f 53 54 41 08 a0 0c 7b 50 45 52 43 0a C.._STA...{PERC. 21c0: 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 43 0a 4c 4e ..........[.C.LN 21d0: 4b 46 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 KF._HID.A...._UI 21e0: 44 0a 06 14 11 5f 44 49 53 08 7d 50 46 52 43 0a D...._DIS.}PFRC. 21f0: 80 50 46 52 43 14 0b 5f 50 52 53 08 a4 50 52 53 .PFRC.._PRS..PRS 2200: 46 14 38 5f 43 52 53 08 08 52 54 4c 46 11 09 0a F.8_CRS..RTLF... 2210: 06 23 00 00 18 79 00 8b 52 54 4c 46 01 49 52 51 .#...y..RTLF.IRQ 2220: 30 70 00 49 52 51 30 79 01 7b 50 46 52 43 0a 0f 0p.IRQ0y.{PFRC.. 2230: 00 49 52 51 30 a4 52 54 4c 46 14 1b 5f 53 52 53 .IRQ0.RTLF.._SRS 2240: 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 60 ..h.IRQ0.IRQ0`v` 2250: 70 60 50 46 52 43 14 18 5f 53 54 41 08 a0 0c 7b p`PFRC.._STA...{ 2260: 50 46 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b PFRC...........[ 2270: 82 43 0a 4c 4e 4b 47 08 5f 48 49 44 0c 41 d0 0c .C.LNKG._HID.A.. 2280: 0f 08 5f 55 49 44 0a 07 14 11 5f 44 49 53 08 7d .._UID...._DIS.} 2290: 50 47 52 43 0a 80 50 47 52 43 14 0b 5f 50 52 53 PGRC..PGRC.._PRS 22a0: 08 a4 50 52 53 47 14 38 5f 43 52 53 08 08 52 54 ..PRSG.8_CRS..RT 22b0: 4c 47 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LG....#...y..RTL 22c0: 47 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 G.IRQ0p.IRQ0y.{P 22d0: 47 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 47 14 GRC...IRQ0.RTLG. 22e0: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 22f0: 51 30 60 76 60 70 60 50 47 52 43 14 18 5f 53 54 Q0`v`p`PGRC.._ST 2300: 41 08 a0 0c 7b 50 47 52 43 0a 80 00 a4 0a 09 a1 A...{PGRC....... 2310: 04 a4 0a 0b 5b 82 43 0a 4c 4e 4b 48 08 5f 48 49 ....[.C.LNKH._HI 2320: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 08 14 11 5f D.A...._UID...._ 2330: 44 49 53 08 7d 50 48 52 43 0a 80 50 48 52 43 14 DIS.}PHRC..PHRC. 2340: 0b 5f 50 52 53 08 a4 50 52 53 48 14 38 5f 43 52 ._PRS..PRSH.8_CR 2350: 53 08 08 52 54 4c 48 11 09 0a 06 23 00 00 18 79 S..RTLH....#...y 2360: 00 8b 52 54 4c 48 01 49 52 51 30 70 00 49 52 51 ..RTLH.IRQ0p.IRQ 2370: 30 79 01 7b 50 48 52 43 0a 0f 00 49 52 51 30 a4 0y.{PHRC...IRQ0. 2380: 52 54 4c 48 14 1b 5f 53 52 53 09 8b 68 01 49 52 RTLH.._SRS..h.IR 2390: 51 30 82 49 52 51 30 60 76 60 70 60 50 48 52 43 Q0.IRQ0`v`p`PHRC 23a0: 14 18 5f 53 54 41 08 a0 0c 7b 50 48 52 43 0a 80 .._STA...{PHRC.. 23b0: 00 a4 0a 09 a1 04 a4 0a 0b 5b 80 4c 50 43 30 02 .........[.LPC0. 23c0: 0a 40 0a c0 5b 81 22 4c 50 43 30 00 00 40 20 49 .@..[."LPC0..@ I 23d0: 4f 44 30 08 49 4f 44 31 08 00 40 37 52 41 45 4e OD0.IOD1..@7RAEN 23e0: 01 00 0d 52 43 42 41 12 5b 82 3d 44 4d 41 43 08 ...RCBA.[.=DMAC. 23f0: 5f 48 49 44 0c 41 d0 02 00 08 5f 43 52 53 11 28 _HID.A...._CRS.( 2400: 0a 25 47 01 00 00 00 00 01 20 47 01 81 00 81 00 .%G...... G..... 2410: 01 11 47 01 93 00 93 00 01 0d 47 01 c0 00 c0 00 ..G.......G..... 2420: 01 20 2a 10 01 79 00 5b 82 26 46 57 48 44 08 5f . *..y.[.&FWHD._ 2430: 48 49 44 0c 25 d4 08 00 08 5f 43 52 53 11 11 0a HID.%...._CRS... 2440: 0e 86 09 00 00 00 00 00 ff 00 00 00 01 79 00 5b .............y.[ 2450: 82 4c 0a 48 50 45 54 08 5f 48 49 44 0c 41 d0 01 .L.HPET._HID.A.. 2460: 03 08 5f 55 49 44 00 08 42 55 46 30 11 11 0a 0e .._UID..BUF0.... 2470: 86 09 00 01 00 00 d0 fe 00 04 00 00 79 00 14 27 ............y..' 2480: 5f 53 54 41 00 a0 13 92 95 4f 53 59 53 0b d1 07 _STA.....OSYS... 2490: a0 08 48 50 41 45 a4 0a 0f a1 0a a0 08 48 50 41 ..HPAE.......HPA 24a0: 45 a4 0a 0b a4 00 14 46 05 5f 43 52 53 08 a0 49 E......F._CRS..I 24b0: 04 48 50 41 45 8a 42 55 46 30 0a 04 48 50 54 30 .HPAE.BUF0..HPT0 24c0: a0 11 93 48 50 41 53 01 70 0c 00 10 d0 fe 48 50 ...HPAS.p.....HP 24d0: 54 30 a0 12 93 48 50 41 53 0a 02 70 0c 00 20 d0 T0...HPAS..p.. . 24e0: fe 48 50 54 30 a0 12 93 48 50 41 53 0a 03 70 0c .HPT0...HPAS..p. 24f0: 00 30 d0 fe 48 50 54 30 a4 42 55 46 30 5b 82 45 .0..HPT0.BUF0[.E 2500: 0a 49 50 49 43 08 5f 48 49 44 0b 41 d0 08 5f 43 .IPIC._HID.A.._C 2510: 52 53 11 41 09 0a 8d 47 01 20 00 20 00 01 02 47 RS.A...G. . ...G 2520: 01 24 00 24 00 01 02 47 01 28 00 28 00 01 02 47 .$.$...G.(.(...G 2530: 01 2c 00 2c 00 01 02 47 01 30 00 30 00 01 02 47 .,.,...G.0.0...G 2540: 01 34 00 34 00 01 02 47 01 38 00 38 00 01 02 47 .4.4...G.8.8...G 2550: 01 3c 00 3c 00 01 02 47 01 a0 00 a0 00 01 02 47 .<.<...G.......G 2560: 01 a4 00 a4 00 01 02 47 01 a8 00 a8 00 01 02 47 .......G.......G 2570: 01 ac 00 ac 00 01 02 47 01 b0 00 b0 00 01 02 47 .......G.......G 2580: 01 b4 00 b4 00 01 02 47 01 b8 00 b8 00 01 02 47 .......G.......G 2590: 01 bc 00 bc 00 01 02 47 01 d0 04 d0 04 01 02 22 .......G......." 25a0: 04 00 79 00 5b 82 25 4d 41 54 48 08 5f 48 49 44 ..y.[.%MATH._HID 25b0: 0c 41 d0 0c 04 08 5f 43 52 53 11 10 0a 0d 47 01 .A...._CRS....G. 25c0: f0 00 f0 00 01 01 22 00 20 79 00 5b 82 43 0d 4c ......". y.[.C.L 25d0: 44 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 DRC._HID.A...._U 25e0: 49 44 0a 02 08 5f 43 52 53 11 46 0b 0a b2 47 01 ID..._CRS.F...G. 25f0: 2e 00 2e 00 01 02 47 01 4e 00 4e 00 01 02 47 01 ......G.N.N...G. 2600: 61 00 61 00 01 01 47 01 63 00 63 00 01 01 47 01 a.a...G.c.c...G. 2610: 65 00 65 00 01 01 47 01 67 00 67 00 01 01 47 01 e.e...G.g.g...G. 2620: 70 00 70 00 01 01 47 01 80 00 80 00 01 01 47 01 p.p...G.......G. 2630: 92 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 ......G.......G. 2640: 80 06 80 06 01 20 47 01 00 20 00 20 01 04 47 01 ..... G.. . ..G. 2650: 00 08 00 08 01 10 47 01 ff ff ff ff 01 01 47 01 ......G.......G. 2660: 00 04 00 04 01 54 47 01 58 04 58 04 01 28 47 01 .....TG.X.X..(G. 2670: 00 05 00 05 01 80 47 01 00 16 00 16 01 ff 47 01 ......G.......G. 2680: 00 fe 00 fe 01 01 47 01 68 00 68 00 01 01 47 01 ......G.h.h...G. 2690: 6c 00 6c 00 01 01 47 01 00 07 00 07 01 10 79 00 l.l...G.......y. 26a0: 5b 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b [.%RTC_._HID.A.. 26b0: 00 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 .._CRS....G.p.p. 26c0: 01 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f .."..y.[.-TIMR._ 26d0: 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a HID.A...._CRS... 26e0: 15 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 .G.@.@...G.P.P.. 26f0: 04 22 01 00 79 00 5b 82 4f 04 43 57 44 54 08 5f ."..y.[.O.CWDT._ 2700: 48 49 44 0c 25 d4 3f 0d 08 5f 43 49 44 0c 41 d0 HID.%.?.._CID.A. 2710: 0c 02 08 42 55 46 30 11 0d 0a 0a 47 01 54 04 54 ...BUF0....G.T.T 2720: 04 04 04 79 00 14 15 5f 53 54 41 08 a0 0a 93 57 ...y..._STA....W 2730: 44 54 45 01 a4 0a 0f a1 03 a4 00 14 0b 5f 43 52 DTE.........._CR 2740: 53 08 a4 42 55 46 30 5b 82 45 06 50 53 4b 32 14 S..BUF0[.E.PSK2. 2750: 1c 5f 48 49 44 00 a0 0f 93 4f 53 59 53 0b dc 07 ._HID....OSYS... 2760: a4 0c 36 66 00 01 a4 0c 41 d0 03 03 08 5f 43 49 ..6f....A...._CI 2770: 44 0c 41 d0 03 03 08 5f 43 52 53 11 19 0a 16 47 D.A...._CRS....G 2780: 01 60 00 60 00 01 01 47 01 64 00 64 00 01 01 23 .`.`...G.d.d...# 2790: 02 00 01 79 00 08 5f 50 52 53 11 13 0a 10 31 00 ...y.._PRS....1. 27a0: 4b 60 00 01 4b 64 00 01 22 02 00 38 79 00 5b 82 K`..Kd.."..8y.[. 27b0: 4b 04 50 53 32 4d 08 5f 48 49 44 0c 4f 2e 2a 08 K.PS2M._HID.O.*. 27c0: 08 5f 43 49 44 0c 41 d0 0f 13 08 5f 43 52 53 11 ._CID.A...._CRS. 27d0: 09 0a 06 23 00 10 01 79 00 08 5f 50 52 53 11 0b ...#...y.._PRS.. 27e0: 0a 08 31 00 22 00 10 38 79 00 14 10 4d 48 49 44 ..1."..8y...MHID 27f0: 00 70 0c 30 ae 00 51 5f 48 49 44 5b 82 4f 58 54 .p.0..Q_HID[.OXT 2800: 50 4d 5f 08 54 4d 50 56 00 14 46 08 5f 48 49 44 PM_.TMPV..F._HID 2810: 00 a0 0f 93 54 56 49 44 0b d1 15 a4 0c 24 d8 01 ....TVID.....$.. 2820: 02 a0 18 91 93 54 56 49 44 0b 50 10 93 54 56 49 .....TVID.P..TVI 2830: 44 0b 0b 10 a4 0c 5c a3 10 00 a0 0f 93 54 56 49 D.....\......TVI 2840: 44 0b fa 19 a4 0c 4d cf 35 04 a0 0f 93 54 44 49 D.....M.5....TDI 2850: 44 0b 02 10 a4 0c 08 6d 01 02 a0 0f 93 54 44 49 D......m.....TDI 2860: 44 0b 01 10 a4 0c 08 6d 01 01 a0 0f 93 54 56 49 D......m.....TVI 2870: 44 0b 14 11 a4 0c 06 8d 12 00 a0 0f 93 54 56 49 D............TVI 2880: 44 0b 4a 10 a4 0c 4d af 12 00 a4 0c 41 d0 0c 31 D.J...M.....A..1 2890: 08 5f 43 49 44 0c 41 d0 0c 31 08 5f 55 49 44 01 ._CID.A..1._UID. 28a0: 5b 80 54 4d 4d 42 00 0c 00 00 d4 fe 0b 00 10 5b [.TMMB.........[ 28b0: 81 26 54 4d 4d 42 11 41 43 43 53 08 00 48 0b 54 .&TMMB.ACCS..H.T 28c0: 53 54 41 08 54 42 43 41 08 00 80 73 07 54 56 49 STA.TBCA...s.TVI 28d0: 44 10 54 44 49 44 10 14 20 5f 53 54 41 00 a0 0a D.TDID.. _STA... 28e0: 93 41 43 43 53 0a ff a4 00 a1 0b a0 09 93 54 50 .ACCS.........TP 28f0: 4d 45 00 a4 00 a4 0a 0f 08 42 55 46 31 11 11 0a ME.......BUF1... 2900: 0e 86 09 00 00 00 00 d4 fe 00 50 00 00 79 00 14 ..........P..y.. 2910: 0b 5f 43 52 53 08 a4 42 55 46 31 14 37 55 43 4d ._CRS..BUF1.7UCM 2920: 50 02 a0 09 92 93 0a 10 87 68 a4 00 a0 09 92 93 P........h...... 2930: 0a 10 87 69 a4 00 70 00 60 a2 17 95 60 0a 10 a0 ...i..p.`...`... 2940: 0f 92 93 83 88 68 60 00 83 88 69 60 00 a4 00 75 .....h`...i`...u 2950: 60 a4 01 14 4d 41 5f 44 53 4d 0c 08 54 54 4d 50 `...MA_DSM..TTMP 2960: 11 03 01 00 8c 54 54 4d 50 00 54 4d 50 56 a0 41 .....TTMP.TMPV.A 2970: 36 93 55 43 4d 50 68 11 13 0a 10 a6 fa dd 3d 1b 6.UCMPh.......=. 2980: 36 b4 4e a4 24 8d 10 08 9d 16 53 01 a0 0b 93 6a 6.N.$.....S....j 2990: 00 a4 11 05 0a 02 ff 01 a0 0d 93 6a 01 a4 11 07 ...........j.... 29a0: 0a 04 31 2e 32 00 a0 4c 09 93 6a 0a 02 a0 42 09 ..1.2..L..j...B. 29b0: 54 50 52 53 a0 27 92 94 83 88 6b 00 00 0a 0b 70 TPRS.'....k....p 29c0: 83 88 6b 00 00 53 4d 49 44 70 0a c1 53 4d 49 54 ..k..SMIDp..SMIT 29d0: 70 83 88 6b 00 00 54 50 50 31 a4 00 a0 31 90 92 p..k..TPP1...1.. 29e0: 95 83 88 6b 00 00 0a 0e 92 94 83 88 6b 00 00 0a ...k........k... 29f0: 12 70 83 88 6b 00 00 53 4d 49 44 70 0a c1 53 4d .p..k..SMIDp..SM 2a00: 49 54 70 83 88 6b 00 00 54 50 50 31 a4 00 a0 2f ITp..k..TPP1.../ 2a10: 91 93 83 88 6b 00 00 0a 15 93 83 88 6b 00 00 0a ....k.......k... 2a20: 16 70 83 88 6b 00 00 53 4d 49 44 70 0a c1 53 4d .p..k..SMIDp..SM 2a30: 49 54 70 83 88 6b 00 00 54 50 50 31 a4 00 a4 01 ITp..k..TPP1.... 2a40: a4 0a 02 a0 36 93 6a 0a 03 08 54 4d 50 31 12 08 ....6.j...TMP1.. 2a50: 02 00 0c ff ff ff ff 70 54 50 50 31 54 4d 50 56 .......pTPP1TMPV 2a60: 70 7b 54 4d 50 56 50 50 52 51 54 4d 50 56 88 54 p{TMPVPPRQTMPV.T 2a70: 4d 50 31 01 00 a4 54 4d 50 31 a0 08 93 6a 0a 04 MP1...TMP1...j.. 2a80: a4 0a 02 a0 42 0a 93 6a 0a 05 08 54 4d 50 32 12 ....B..j...TMP2. 2a90: 0d 03 00 0c ff ff ff ff 0c ff ff ff ff 70 50 50 .............pPP 2aa0: 4c 4f 88 54 4d 50 32 01 00 a0 2b 91 91 94 50 50 LO.TMP2...+...PP 2ab0: 4c 4f 0a 16 93 50 50 4c 4f 0a 0c 93 50 50 4c 4f LO...PPLO...PPLO 2ac0: 0a 0d 70 0c f1 ff ff ff 88 54 4d 50 32 0a 02 00 ..p......TMP2... 2ad0: a4 54 4d 50 32 a0 1b 93 50 50 52 51 0a ff 70 0c .TMP2...PPRQ..p. 2ae0: f1 ff ff ff 88 54 4d 50 32 0a 02 00 a4 54 4d 50 .....TMP2....TMP 2af0: 32 70 54 50 50 33 54 4d 50 56 a0 1c 7b 54 4d 50 2pTPP3TMPV..{TMP 2b00: 56 0a 04 00 70 0c f0 ff ff ff 88 54 4d 50 32 0a V...p......TMP2. 2b10: 02 00 a4 54 4d 50 32 70 00 88 54 4d 50 32 0a 02 ...TMP2p..TMP2.. 2b20: 00 a4 54 4d 50 32 a0 08 93 6a 0a 06 a4 0a 03 a0 ..TMP2...j...... 2b30: 4c 09 93 6a 0a 07 a0 42 09 54 50 52 53 a0 27 92 L..j...B.TPRS.'. 2b40: 94 83 88 6b 00 00 0a 0b 70 83 88 6b 00 00 53 4d ...k....p..k..SM 2b50: 49 44 70 0a c1 53 4d 49 54 70 83 88 6b 00 00 54 IDp..SMITp..k..T 2b60: 50 50 31 a4 00 a0 31 90 92 95 83 88 6b 00 00 0a PP1...1.....k... 2b70: 0e 92 94 83 88 6b 00 00 0a 12 70 83 88 6b 00 00 .....k....p..k.. 2b80: 53 4d 49 44 70 0a c1 53 4d 49 54 70 83 88 6b 00 SMIDp..SMITp..k. 2b90: 00 54 50 50 31 a4 00 a0 2f 91 93 83 88 6b 00 00 .TPP1.../....k.. 2ba0: 0a 15 93 83 88 6b 00 00 0a 16 70 83 88 6b 00 00 .....k....p..k.. 2bb0: 53 4d 49 44 70 0a c1 53 4d 49 54 70 83 88 6b 00 SMIDp..SMITp..k. 2bc0: 00 54 50 50 31 a4 00 a4 01 a4 0a 02 a0 41 10 93 .TPP1........A.. 2bd0: 6a 0a 08 08 50 50 49 50 00 08 50 50 49 43 00 70 j...PPIP..PPIC.p 2be0: 54 50 50 33 54 4d 50 56 a0 0f 7b 54 4d 50 56 0a TPP3TMPV..{TMPV. 2bf0: 10 00 70 01 50 50 49 50 a0 0f 7b 54 4d 50 56 0a ..p.PPIP..{TMPV. 2c00: 20 00 70 01 50 50 49 43 a0 17 93 83 88 6b 00 00 .p.PPIC.....k.. 2c10: 0a 05 a0 0a 94 50 50 49 43 00 a4 0a 04 a4 0a 03 .....PPIC....... 2c20: a0 21 90 92 95 83 88 6b 00 00 01 92 94 83 88 6b .!.....k.......k 2c30: 00 00 0a 04 a0 0a 94 50 50 49 50 00 a4 0a 04 a4 .......PPIP..... 2c40: 0a 03 a0 22 90 92 95 83 88 6b 00 00 0a 06 92 94 ...".....k...... 2c50: 83 88 6b 00 00 0a 0b a0 0a 94 50 50 49 50 00 a4 ..k.......PPIP.. 2c60: 0a 04 a4 0a 03 a0 32 91 93 83 88 6b 00 00 0a 0e ......2....k.... 2c70: 90 92 95 83 88 6b 00 00 0a 15 92 94 83 88 6b 00 .....k........k. 2c80: 00 0a 16 a0 11 90 94 50 50 49 50 00 94 50 50 49 .......PPIP..PPI 2c90: 43 00 a4 0a 04 a4 0a 03 a0 15 91 93 83 88 6b 00 C.............k. 2ca0: 00 0a 10 93 83 88 6b 00 00 0a 12 a4 0a 03 a0 1d ......k......... 2cb0: 91 93 83 88 6b 00 00 00 91 93 83 88 6b 00 00 0a ....k.......k... 2cc0: 0f 93 83 88 6b 00 00 0a 11 a4 0a 04 a4 00 a4 01 ....k........... 2cd0: a0 4b 09 93 55 43 4d 50 68 11 13 0a 10 ed 54 60 .K..UCMPh.....T` 2ce0: 37 13 cc 75 46 90 1c 47 56 d7 f2 d4 5d 01 a0 09 7..uF..GV...]... 2cf0: 93 6a 00 a4 11 03 01 01 a0 41 07 93 6a 01 a0 38 .j.......A..j..8 2d00: 7b 83 88 6b 00 00 01 00 70 01 4d 4f 52 44 a0 18 {..k....p.MORD.. 2d10: 7b 83 88 6b 00 00 0a 10 00 70 0a 83 53 4d 49 44 {..k.....p..SMID 2d20: 70 0a c1 53 4d 49 54 a1 0f 70 0a 81 53 4d 49 44 p..SMIT..p..SMID 2d30: 70 0a c1 53 4d 49 54 a1 30 70 00 4d 4f 52 44 a0 p..SMIT.0p.MORD. 2d40: 18 7b 83 88 6b 00 00 0a 10 00 70 0a 82 53 4d 49 .{..k.....p..SMI 2d50: 44 70 0a c1 53 4d 49 54 a1 0f 70 0a 80 53 4d 49 Dp..SMIT..p..SMI 2d60: 44 70 0a c1 53 4d 49 54 a4 00 a4 01 a4 11 03 01 Dp..SMIT........ 2d70: 00 14 1a 43 4d 4f 52 00 70 00 4d 4f 52 44 70 0a ...CMOR.p.MORDp. 2d80: 80 53 4d 49 44 70 0a c1 53 4d 49 54 10 4e 06 5f .SMIDp..SMIT.N._ 2d90: 50 52 5f 5b 83 0b 43 50 55 30 01 10 04 00 00 06 PR_[..CPU0...... 2da0: 5b 83 0b 43 50 55 31 02 10 04 00 00 06 5b 83 0b [..CPU1......[.. 2db0: 43 50 55 32 03 10 04 00 00 06 5b 83 0b 43 50 55 CPU2......[..CPU 2dc0: 33 04 10 04 00 00 06 5b 83 0b 43 50 55 34 05 10 3......[..CPU4.. 2dd0: 04 00 00 06 5b 83 0b 43 50 55 35 06 10 04 00 00 ....[..CPU5..... 2de0: 06 5b 83 0b 43 50 55 36 07 10 04 00 00 06 5b 83 .[..CPU6......[. 2df0: 0b 43 50 55 37 08 10 04 00 00 06 10 4e 1f 5c 00 .CPU7.......N.\. 2e00: 14 49 1f 50 4e 54 46 01 a0 4d 17 7b 50 50 4d 46 .I.PNTF..M.{PPMF 2e10: 0c 00 00 00 01 00 a0 2d 91 90 7b 50 44 43 30 0a .......-..{PDC0. 2e20: 08 00 91 93 68 0a 80 93 68 0a 82 90 7b 50 44 43 ....h...h...{PDC 2e30: 30 0a 10 00 93 68 0a 81 86 5c 2e 5f 50 52 5f 43 0....h...\._PR_C 2e40: 50 55 30 68 a0 2d 91 90 7b 50 44 43 31 0a 08 00 PU0h.-..{PDC1... 2e50: 91 93 68 0a 80 93 68 0a 82 90 7b 50 44 43 31 0a ..h...h...{PDC1. 2e60: 10 00 93 68 0a 81 86 5c 2e 5f 50 52 5f 43 50 55 ...h...\._PR_CPU 2e70: 31 68 a0 2d 91 90 7b 50 44 43 32 0a 08 00 91 93 1h.-..{PDC2..... 2e80: 68 0a 80 93 68 0a 82 90 7b 50 44 43 32 0a 10 00 h...h...{PDC2... 2e90: 93 68 0a 81 86 5c 2e 5f 50 52 5f 43 50 55 32 68 .h...\._PR_CPU2h 2ea0: a0 2d 91 90 7b 50 44 43 33 0a 08 00 91 93 68 0a .-..{PDC3.....h. 2eb0: 80 93 68 0a 82 90 7b 50 44 43 33 0a 10 00 93 68 ..h...{PDC3....h 2ec0: 0a 81 86 5c 2e 5f 50 52 5f 43 50 55 33 68 a0 2d ...\._PR_CPU3h.- 2ed0: 91 90 7b 50 44 43 34 0a 08 00 91 93 68 0a 80 93 ..{PDC4.....h... 2ee0: 68 0a 82 90 7b 50 44 43 34 0a 10 00 93 68 0a 81 h...{PDC4....h.. 2ef0: 86 5c 2e 5f 50 52 5f 43 50 55 34 68 a0 2d 91 90 .\._PR_CPU4h.-.. 2f00: 7b 50 44 43 35 0a 08 00 91 93 68 0a 80 93 68 0a {PDC5.....h...h. 2f10: 82 90 7b 50 44 43 35 0a 10 00 93 68 0a 81 86 5c ..{PDC5....h...\ 2f20: 2e 5f 50 52 5f 43 50 55 35 68 a0 2d 91 90 7b 50 ._PR_CPU5h.-..{P 2f30: 44 43 36 0a 08 00 91 93 68 0a 80 93 68 0a 82 90 DC6.....h...h... 2f40: 7b 50 44 43 36 0a 10 00 93 68 0a 81 86 5c 2e 5f {PDC6....h...\._ 2f50: 50 52 5f 43 50 55 36 68 a0 2d 91 90 7b 50 44 43 PR_CPU6h.-..{PDC 2f60: 37 0a 08 00 91 93 68 0a 80 93 68 0a 82 90 7b 50 7.....h...h...{P 2f70: 44 43 37 0a 10 00 93 68 0a 81 86 5c 2e 5f 50 52 DC7....h...\._PR 2f80: 5f 43 50 55 37 68 a1 43 07 a0 40 07 91 93 68 0a _CPU7h.C..@...h. 2f90: 80 91 93 68 0a 81 93 68 0a 82 86 5c 2e 5f 50 52 ...h...h...\._PR 2fa0: 5f 43 50 55 30 68 86 5c 2e 5f 50 52 5f 43 50 55 _CPU0h.\._PR_CPU 2fb0: 31 68 86 5c 2e 5f 50 52 5f 43 50 55 32 68 86 5c 1h.\._PR_CPU2h.\ 2fc0: 2e 5f 50 52 5f 43 50 55 33 68 86 5c 2e 5f 50 52 ._PR_CPU3h.\._PR 2fd0: 5f 43 50 55 34 68 86 5c 2e 5f 50 52 5f 43 50 55 _CPU4h.\._PR_CPU 2fe0: 35 68 86 5c 2e 5f 50 52 5f 43 50 55 36 68 86 5c 5h.\._PR_CPU6h.\ 2ff0: 2e 5f 50 52 5f 43 50 55 37 68 5b 01 4d 55 54 58 ._PR_CPU7h[.MUTX 3000: 00 5b 80 50 52 54 30 01 0a 80 0a 04 5b 81 0b 50 .[.PRT0.....[..P 3010: 52 54 30 13 50 38 30 48 20 14 4e 07 50 38 58 48 RT0.P80H .N.P8XH 3020: 0a a0 17 93 68 00 70 7d 7b 50 38 30 44 0c 00 ff ....h.p}{P80D... 3030: ff ff 00 69 00 50 38 30 44 a0 1b 93 68 01 70 7d ...i.P80D...h.p} 3040: 7b 50 38 30 44 0c ff 00 ff ff 00 79 69 0a 08 00 {P80D......yi... 3050: 00 50 38 30 44 a0 1c 93 68 0a 02 70 7d 7b 50 38 .P80D...h..p}{P8 3060: 30 44 0c ff ff 00 ff 00 79 69 0a 10 00 00 50 38 0D......yi....P8 3070: 30 44 a0 1c 93 68 0a 03 70 7d 7b 50 38 30 44 0c 0D...h..p}{P80D. 3080: ff ff ff 00 00 79 69 0a 18 00 00 50 38 30 44 70 .....yi....P80Dp 3090: 50 38 30 44 50 38 30 48 5b 80 53 50 52 54 01 0a P80DP80H[.SPRT.. 30a0: b2 0a 02 5b 81 0b 53 50 52 54 11 53 53 4d 50 08 ...[..SPRT.SSMP. 30b0: 14 12 5f 50 49 43 01 70 68 47 50 49 43 70 68 50 .._PIC.phGPICphP 30c0: 49 43 4d 14 41 10 5f 50 54 53 01 70 00 50 38 30 ICM.A._PTS.p.P80 30d0: 44 70 68 50 38 30 48 a0 1c 93 68 0a 03 a0 16 90 DphP80H...h..... 30e0: 44 54 53 45 94 54 43 4e 54 01 54 52 41 50 54 52 DTSE.TCNT.TRAPTR 30f0: 54 44 0a 1e a0 12 90 95 4f 53 59 53 0b d6 07 93 TD......OSYS.... 3100: 68 0a 03 5b 22 0a 64 a0 4a 07 91 93 68 0a 03 93 h..[".d.J...h... 3110: 68 0a 04 70 01 5c 2f 05 5f 53 42 5f 50 43 49 30 h..p.\/._SB_PCI0 3120: 4c 50 43 42 45 43 5f 5f 53 33 46 47 70 83 88 5c LPCBEC__S3FGp..\ 3130: 2f 03 5f 53 42 5f 50 43 49 30 50 4e 4c 53 42 52 /._SB_PCI0PNLSBR 3140: 4e 53 00 5c 2f 04 5f 53 42 5f 50 43 49 30 47 46 NS.\/._SB_PCI0GF 3150: 58 30 42 43 4c 50 7d 5c 2f 04 5f 53 42 5f 50 43 X0BCLP}\/._SB_PC 3160: 49 30 47 46 58 30 42 43 4c 50 0c 00 00 00 80 5c I0GFX0BCLP.....\ 3170: 2f 04 5f 53 42 5f 50 43 49 30 47 46 58 30 42 43 /._SB_PCI0GFX0BC 3180: 4c 50 a0 12 90 95 4f 53 59 53 0b d6 07 93 68 0a LP....OSYS....h. 3190: 03 5b 22 0a 64 70 5c 2f 04 5f 53 42 5f 50 43 49 .[".dp\/._SB_PCI 31a0: 30 58 48 43 5f 50 52 32 5f 53 50 52 32 70 5c 2f 0XHC_PR2_SPR2p\/ 31b0: 04 5f 53 42 5f 50 43 49 30 58 48 43 5f 50 52 33 ._SB_PCI0XHC_PR3 31c0: 5f 53 50 52 33 14 4d 38 5f 57 41 4b 09 70 0a ab _SPR3.M8_WAK.p.. 31d0: 50 38 30 48 a0 37 4e 45 58 50 a0 18 7b 4f 53 43 P80H.7NEXP..{OSC 31e0: 43 0a 02 00 5c 2f 03 5f 53 42 5f 50 43 49 30 4e C...\/._SB_PCI0N 31f0: 48 50 47 a0 18 7b 4f 53 43 43 0a 04 00 5c 2f 03 HPG..{OSCC...\/. 3200: 5f 53 42 5f 50 43 49 30 4e 50 4d 45 70 00 4c 49 _SB_PCI0NPMEp.LI 3210: 44 58 a0 49 05 49 47 44 53 a0 35 93 5c 2f 05 5f DX.I.IGDS.5.\/._ 3220: 53 42 5f 50 43 49 30 4c 50 43 42 45 43 5f 5f 48 SB_PCI0LPCBEC__H 3230: 50 4c 44 01 70 01 4c 49 44 53 70 01 5c 2f 04 5f PLD.p.LIDSp.\/._ 3240: 53 42 5f 50 43 49 30 47 46 58 30 43 4c 49 44 a1 SB_PCI0GFX0CLID. 3250: 1c 70 00 4c 49 44 53 70 00 5c 2f 04 5f 53 42 5f .p.LIDSp.\/._SB_ 3260: 50 43 49 30 47 46 58 30 43 4c 49 44 a0 44 17 91 PCI0GFX0CLID.D.. 3270: 93 68 0a 03 93 68 0a 04 a0 16 90 44 54 53 45 94 .h...h.....DTSE. 3280: 54 43 4e 54 01 54 52 41 50 54 52 54 44 0a 14 a0 TCNT.TRAPTRTD... 3290: 4b 0b 93 4f 53 59 53 0b d2 07 a0 40 0b 7b 43 46 K..OSYS....@.{CF 32a0: 47 44 01 00 a0 4b 05 94 5c 2f 03 5f 50 52 5f 43 GD...K..\/._PR_C 32b0: 50 55 30 5f 50 50 43 00 74 5c 2f 03 5f 50 52 5f PU0_PPC.t\/._PR_ 32c0: 43 50 55 30 5f 50 50 43 01 5c 2f 03 5f 50 52 5f CPU0_PPC.\/._PR_ 32d0: 43 50 55 30 5f 50 50 43 50 4e 4f 54 72 5c 2f 03 CPU0_PPCPNOTr\/. 32e0: 5f 50 52 5f 43 50 55 30 5f 50 50 43 01 5c 2f 03 _PR_CPU0_PPC.\/. 32f0: 5f 50 52 5f 43 50 55 30 5f 50 50 43 50 4e 4f 54 _PR_CPU0_PPCPNOT 3300: a1 4a 04 72 5c 2f 03 5f 50 52 5f 43 50 55 30 5f .J.r\/._PR_CPU0_ 3310: 50 50 43 01 5c 2f 03 5f 50 52 5f 43 50 55 30 5f PPC.\/._PR_CPU0_ 3320: 50 50 43 50 4e 4f 54 74 5c 2f 03 5f 50 52 5f 43 PPCPNOTt\/._PR_C 3330: 50 55 30 5f 50 50 43 01 5c 2f 03 5f 50 52 5f 43 PU0_PPC.\/._PR_C 3340: 50 55 30 5f 50 50 43 50 4e 4f 54 a0 18 93 52 50 PU0_PPCPNOT...RP 3350: 31 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 1D..\/._SB_PCI0R 3360: 50 30 31 00 a0 18 93 52 50 32 44 00 86 5c 2f 03 P01....RP2D..\/. 3370: 5f 53 42 5f 50 43 49 30 52 50 30 32 00 a0 18 93 _SB_PCI0RP02.... 3380: 52 50 33 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 RP3D..\/._SB_PCI 3390: 30 52 50 30 33 00 a0 18 93 52 50 34 44 00 86 5c 0RP03....RP4D..\ 33a0: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 34 00 a0 /._SB_PCI0RP04.. 33b0: 18 93 52 50 35 44 00 86 5c 2f 03 5f 53 42 5f 50 ..RP5D..\/._SB_P 33c0: 43 49 30 52 50 30 35 00 a0 18 93 52 50 36 44 00 CI0RP05....RP6D. 33d0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 33e0: 00 70 01 5c 2e 5f 53 42 5f 42 41 53 43 a0 4d 0b .p.\._SB_BASC.M. 33f0: 95 68 0a 04 a0 42 05 90 93 7b 5c 2f 05 5f 53 42 .h...B...{\/._SB 3400: 5f 50 43 49 30 4c 50 43 42 45 43 5f 5f 48 42 30 _PCI0LPCBEC__HB0 3410: 53 0a 0f 61 00 92 5c 2f 05 5f 53 42 5f 50 43 49 S..a..\/._SB_PCI 3420: 30 4c 50 43 42 45 43 5f 5f 41 43 50 57 70 0a 0a 0LPCBEC__ACPWp.. 3430: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 \/._SB_PCI0LPCBE 3440: 43 5f 5f 45 54 48 42 5c 2f 06 5f 53 42 5f 50 43 C__ETHB\/._SB_PC 3450: 49 30 4c 50 43 42 45 43 5f 5f 48 4b 45 59 48 4b I0LPCBEC__HKEYHK 3460: 53 33 4e 56 53 53 00 a0 43 04 93 49 53 57 4b 01 S3NVSS..C..ISWK. 3470: a0 3a 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 .:\/._SB_PCI0LPC 3480: 42 45 43 5f 5f 48 4b 45 59 44 48 4b 43 5c 2f 06 BEC__HKEYDHKC\/. 3490: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 5f 5f _SB_PCI0LPCBEC__ 34a0: 48 4b 45 59 4d 48 4b 51 0b 70 60 a0 4a 06 93 68 HKEYMHKQ.p`.J..h 34b0: 0a 04 70 0a 0a 5c 2f 05 5f 53 42 5f 50 43 49 30 ..p..\/._SB_PCI0 34c0: 4c 50 43 42 45 43 5f 5f 45 54 48 42 4e 56 53 53 LPCBEC__ETHBNVSS 34d0: 00 a0 44 04 93 49 53 57 4b 0a 02 a0 3a 5c 2f 06 ..D..ISWK...:\/. 34e0: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 5f 5f _SB_PCI0LPCBEC__ 34f0: 48 4b 45 59 44 48 4b 43 5c 2f 06 5f 53 42 5f 50 HKEYDHKC\/._SB_P 3500: 43 49 30 4c 50 43 42 45 43 5f 5f 48 4b 45 59 4d CI0LPCBEC__HKEYM 3510: 48 4b 51 0b 80 60 70 53 50 52 32 5c 2f 04 5f 53 HKQ..`pSPR2\/._S 3520: 42 5f 50 43 49 30 58 48 43 5f 50 52 32 5f 70 53 B_PCI0XHC_PR2_pS 3530: 50 52 33 5c 2f 04 5f 53 42 5f 50 43 49 30 58 48 PR3\/._SB_PCI0XH 3540: 43 5f 50 52 33 5f 70 0a cd 50 38 30 48 a4 12 04 C_PR3_p..P80H... 3550: 02 00 00 14 1e 47 45 54 42 0b 77 68 0a 08 60 77 .....GETB.wh..`w 3560: 69 0a 08 61 5b 13 6a 60 61 54 42 46 33 a4 54 42 i..a[.j`aTBF3.TB 3570: 46 33 14 40 1c 50 4e 4f 54 08 a0 48 19 94 54 43 F3.@.PNOT..H..TC 3580: 4e 54 01 a0 31 7b 50 44 43 30 0a 08 00 86 5c 2e NT..1{PDC0....\. 3590: 5f 50 52 5f 43 50 55 30 0a 80 a0 1a 7b 50 44 43 _PR_CPU0....{PDC 35a0: 30 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 5f 43 0...[".d.\._PR_C 35b0: 50 55 30 0a 81 a0 31 7b 50 44 43 31 0a 08 00 86 PU0...1{PDC1.... 35c0: 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 a0 1a 7b 50 \._PR_CPU1....{P 35d0: 44 43 31 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC1...[".d.\._PR 35e0: 5f 43 50 55 31 0a 81 a0 31 7b 50 44 43 32 0a 08 _CPU1...1{PDC2.. 35f0: 00 86 5c 2e 5f 50 52 5f 43 50 55 32 0a 80 a0 1a ..\._PR_CPU2.... 3600: 7b 50 44 43 32 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC2...[".d.\._ 3610: 50 52 5f 43 50 55 32 0a 81 a0 31 7b 50 44 43 33 PR_CPU2...1{PDC3 3620: 0a 08 00 86 5c 2e 5f 50 52 5f 43 50 55 33 0a 80 ....\._PR_CPU3.. 3630: a0 1a 7b 50 44 43 33 0a 10 00 5b 22 0a 64 86 5c ..{PDC3...[".d.\ 3640: 2e 5f 50 52 5f 43 50 55 33 0a 81 a0 31 7b 50 44 ._PR_CPU3...1{PD 3650: 43 34 0a 08 00 86 5c 2e 5f 50 52 5f 43 50 55 34 C4....\._PR_CPU4 3660: 0a 80 a0 1a 7b 50 44 43 34 0a 10 00 5b 22 0a 64 ....{PDC4...[".d 3670: 86 5c 2e 5f 50 52 5f 43 50 55 34 0a 81 a0 31 7b .\._PR_CPU4...1{ 3680: 50 44 43 35 0a 08 00 86 5c 2e 5f 50 52 5f 43 50 PDC5....\._PR_CP 3690: 55 35 0a 80 a0 1a 7b 50 44 43 35 0a 10 00 5b 22 U5....{PDC5...[" 36a0: 0a 64 86 5c 2e 5f 50 52 5f 43 50 55 35 0a 81 a0 .d.\._PR_CPU5... 36b0: 31 7b 50 44 43 36 0a 08 00 86 5c 2e 5f 50 52 5f 1{PDC6....\._PR_ 36c0: 43 50 55 36 0a 80 a0 1a 7b 50 44 43 36 0a 10 00 CPU6....{PDC6... 36d0: 5b 22 0a 64 86 5c 2e 5f 50 52 5f 43 50 55 36 0a [".d.\._PR_CPU6. 36e0: 81 a0 31 7b 50 44 43 37 0a 08 00 86 5c 2e 5f 50 ..1{PDC7....\._P 36f0: 52 5f 43 50 55 37 0a 80 a0 1a 7b 50 44 43 37 0a R_CPU7....{PDC7. 3700: 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 5f 43 50 55 ..[".d.\._PR_CPU 3710: 37 0a 81 a1 1f 86 5c 2e 5f 50 52 5f 43 50 55 30 7.....\._PR_CPU0 3720: 0a 80 5b 22 0a 64 86 5c 2e 5f 50 52 5f 43 50 55 ..[".d.\._PR_CPU 3730: 30 0a 81 14 47 04 54 52 41 50 0a 70 69 53 4d 49 0...G.TRAP.piSMI 3740: 46 a0 0d 93 68 54 52 54 50 70 00 54 52 50 30 a0 F...hTRTPp.TRP0. 3750: 18 93 68 54 52 54 44 70 69 44 54 53 46 70 00 54 ..hTRTDpiDTSFp.T 3760: 52 50 44 a4 44 54 53 46 a0 0d 93 68 54 52 54 49 RPD.DTSF...hTRTI 3770: 70 00 54 52 50 48 a4 53 4d 49 46 10 49 28 2e 5f p.TRPH.SMIF.I(._ 3780: 53 42 5f 50 43 49 30 14 4d 14 5f 49 4e 49 00 70 SB_PCI0.M._INI.p 3790: 01 49 47 44 53 70 0b d0 07 4f 53 59 53 a0 48 12 .IGDSp...OSYS.H. 37a0: 5b 12 5f 4f 53 49 60 a0 14 5f 4f 53 49 0d 4c 69 [._OSI`.._OSI.Li 37b0: 6e 75 78 00 70 0b e8 03 4f 53 59 53 a0 1b 5f 4f nux.p...OSYS.._O 37c0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 00 SI.Windows 2001. 37d0: 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 53 49 0d 57 p...OSYS.._OSI.W 37e0: 69 6e 64 6f 77 73 20 32 30 30 31 20 53 50 31 00 indows 2001 SP1. 37f0: 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 53 49 0d 57 p...OSYS.._OSI.W 3800: 69 6e 64 6f 77 73 20 32 30 30 31 20 53 50 32 00 indows 2001 SP2. 3810: 70 0b d2 07 4f 53 59 53 a0 1d 5f 4f 53 49 0d 57 p...OSYS.._OSI.W 3820: 69 6e 64 6f 77 73 20 32 30 30 31 2e 31 00 70 0b indows 2001.1.p. 3830: d3 07 4f 53 59 53 a0 1b 5f 4f 53 49 0d 57 69 6e ..OSYS.._OSI.Win 3840: 64 6f 77 73 20 32 30 30 36 00 70 0b d6 07 4f 53 dows 2006.p...OS 3850: 59 53 a0 1b 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 YS.._OSI.Windows 3860: 20 32 30 30 39 00 70 0b d9 07 4f 53 59 53 a0 21 2009.p...OSYS.! 3870: 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 31 _OSI.Windows 201 3880: 32 00 70 01 57 49 4e 38 70 0b dc 07 4f 53 59 53 2.p.WIN8p...OSYS 3890: a0 1f 92 95 4f 53 59 53 0b d9 07 a0 14 53 57 44 ....OSYS.....SWD 38a0: 54 a0 0e 92 93 4e 56 4d 44 01 56 48 59 42 0a 02 T....NVMD.VHYB.. 38b0: a1 15 a0 13 53 57 44 54 a0 0d 92 93 4e 56 4d 44 ....SWDT....NVMD 38c0: 00 56 48 59 42 00 5e 2f 03 4c 50 43 42 50 53 32 .VHYB.^/.LPCBPS2 38d0: 4d 4d 48 49 44 14 47 06 4e 48 50 47 08 70 00 5e MMHID.G.NHPG.p.^ 38e0: 2e 52 50 30 31 48 50 45 58 70 00 5e 2e 52 50 30 .RP01HPEXp.^.RP0 38f0: 32 48 50 45 58 70 00 5e 2e 52 50 30 33 48 50 45 2HPEXp.^.RP03HPE 3900: 58 70 00 5e 2e 52 50 30 34 48 50 45 58 70 01 5e Xp.^.RP04HPEXp.^ 3910: 2e 52 50 30 31 48 50 53 58 70 01 5e 2e 52 50 30 .RP01HPSXp.^.RP0 3920: 32 48 50 53 58 70 01 5e 2e 52 50 30 33 48 50 53 2HPSXp.^.RP03HPS 3930: 58 70 01 5e 2e 52 50 30 34 48 50 53 58 14 47 0c Xp.^.RP04HPSX.G. 3940: 4e 50 4d 45 08 70 00 5e 2e 52 50 30 31 50 4d 45 NPME.p.^.RP01PME 3950: 58 70 00 5e 2e 52 50 30 32 50 4d 45 58 70 00 5e Xp.^.RP02PMEXp.^ 3960: 2e 52 50 30 33 50 4d 45 58 70 00 5e 2e 52 50 30 .RP03PMEXp.^.RP0 3970: 34 50 4d 45 58 70 00 5e 2e 52 50 30 35 50 4d 45 4PMEXp.^.RP05PME 3980: 58 70 00 5e 2e 52 50 30 36 50 4d 45 58 70 00 5e Xp.^.RP06PMEXp.^ 3990: 2e 52 50 30 37 50 4d 45 58 70 00 5e 2e 52 50 30 .RP07PMEXp.^.RP0 39a0: 38 50 4d 45 58 70 01 5e 2e 52 50 30 31 50 4d 53 8PMEXp.^.RP01PMS 39b0: 58 70 01 5e 2e 52 50 30 32 50 4d 53 58 70 01 5e Xp.^.RP02PMSXp.^ 39c0: 2e 52 50 30 33 50 4d 53 58 70 01 5e 2e 52 50 30 .RP03PMSXp.^.RP0 39d0: 34 50 4d 53 58 70 01 5e 2e 52 50 30 35 50 4d 53 4PMSXp.^.RP05PMS 39e0: 58 70 01 5e 2e 52 50 30 36 50 4d 53 58 70 01 5e Xp.^.RP06PMSXp.^ 39f0: 2e 52 50 30 37 50 4d 53 58 70 01 5e 2e 52 50 30 .RP07PMSXp.^.RP0 3a00: 38 50 4d 53 58 10 45 07 5c 00 08 50 49 43 4d 00 8PMSX.E.\..PICM. 3a10: 08 50 52 57 50 12 04 02 00 00 14 40 06 47 50 52 .PRWP......@.GPR 3a20: 57 02 70 68 88 50 52 57 50 00 00 70 79 53 53 31 W.ph.PRWP..pySS1 3a30: 5f 01 00 60 7d 60 79 53 53 32 5f 0a 02 00 60 7d _..`}`ySS2_...`} 3a40: 60 79 53 53 33 5f 0a 03 00 60 7d 60 79 53 53 34 `ySS3_...`}`ySS4 3a50: 5f 0a 04 00 60 a0 11 7b 79 01 69 00 60 00 70 69 _...`..{y.i.`.pi 3a60: 88 50 52 57 50 01 00 a1 0e 7a 60 01 60 81 60 88 .PRWP....z`.`.`. 3a70: 50 52 57 50 01 00 a4 50 52 57 50 5b 80 53 4d 49 PRWP...PRWP[.SMI 3a80: 32 01 0a b2 01 5b 81 0b 53 4d 49 32 01 41 50 4d 2....[..SMI2.APM 3a90: 43 08 5b 01 4d 53 4d 49 07 14 4a 05 53 4d 49 5f C.[.MSMI..J.SMI_ 3aa0: 05 5b 23 4d 53 4d 49 ff ff 70 68 43 4d 44 5f 70 .[#MSMI..phCMD_p 3ab0: 01 45 52 52 5f 70 69 50 41 52 30 70 6a 50 41 52 .ERR_piPAR0pjPAR 3ac0: 31 70 6b 50 41 52 32 70 6c 50 41 52 33 70 0a f5 1pkPAR2plPAR3p.. 3ad0: 41 50 4d 43 a2 11 93 45 52 52 5f 01 5b 22 01 70 APMC...ERR_.[".p 3ae0: 0a f5 41 50 4d 43 70 50 41 52 30 60 5b 27 4d 53 ..APMCpPAR0`['MS 3af0: 4d 49 a4 60 14 11 52 42 45 43 01 a4 53 4d 49 5f MI.`..RBEC..SMI_ 3b00: 00 0a 03 68 00 00 14 10 57 42 45 43 02 53 4d 49 ...h....WBEC.SMI 3b10: 5f 00 0a 04 68 69 00 14 10 4d 42 45 43 03 53 4d _...hi...MBEC.SM 3b20: 49 5f 00 0a 05 68 69 6a 14 0f 56 55 50 53 00 53 I_...hij..VUPS.S 3b30: 4d 49 5f 01 01 00 00 00 14 11 56 45 56 54 01 a4 MI_.......VEVT.. 3b40: 53 4d 49 5f 01 0a 08 68 00 00 14 10 56 42 52 43 SMI_...h....VBRC 3b50: 01 53 4d 49 5f 01 0a 0a 68 00 00 14 10 56 42 52 .SMI_...h....VBR 3b60: 44 00 53 4d 49 5f 01 0a 0b 00 00 00 14 10 56 42 D.SMI_........VB 3b70: 52 55 00 53 4d 49 5f 01 0a 0c 00 00 00 14 10 56 RU.SMI_........V 3b80: 42 52 53 01 53 4d 49 5f 01 0a 0d 68 00 00 14 11 BRS.SMI_...h.... 3b90: 56 42 52 47 00 a4 53 4d 49 5f 01 0a 0e 00 00 00 VBRG..SMI_...... 3ba0: 14 11 56 48 59 42 01 a4 53 4d 49 5f 01 0a 10 68 ..VHYB..SMI_...h 3bb0: 00 00 14 11 56 44 59 4e 02 a4 53 4d 49 5f 01 0a ....VDYN..SMI_.. 3bc0: 11 68 69 00 14 11 55 43 4d 53 01 a4 53 4d 49 5f .hi...UCMS..SMI_ 3bd0: 0a 02 68 00 00 00 14 12 42 43 48 4b 00 a4 53 4d ..h.....BCHK..SM 3be0: 49 5f 0a 05 0a 04 00 00 00 14 11 42 4c 54 48 01 I_.........BLTH. 3bf0: a4 53 4d 49 5f 0a 06 68 00 00 00 14 11 50 52 53 .SMI_..h.....PRS 3c00: 4d 02 a4 53 4d 49 5f 0a 07 00 68 69 00 14 11 49 M..SMI_...hi...I 3c10: 46 52 53 02 a4 53 4d 49 5f 0a 07 01 68 69 00 14 FRS..SMI_...hi.. 3c20: 11 4e 56 53 53 01 a4 53 4d 49 5f 0a 08 68 00 00 .NVSS..SMI_..h.. 3c30: 00 14 11 57 47 53 56 01 a4 53 4d 49 5f 0a 09 68 ...WGSV..SMI_..h 3c40: 00 00 00 14 12 54 53 44 4c 00 a4 53 4d 49 5f 0a .....TSDL..SMI_. 3c50: 0a 0a 03 00 00 00 14 10 54 50 48 59 01 53 4d 49 ........TPHY.SMI 3c60: 5f 0a 0c 68 00 00 00 14 10 54 4d 4f 52 01 53 4d _..h.....TMOR.SM 3c70: 49 5f 0a 0d 68 00 00 00 14 11 54 48 52 4f 01 a4 I_..h.....THRO.. 3c80: 53 4d 49 5f 0a 0e 68 00 00 00 14 11 43 48 46 4e SMI_..h.....CHFN 3c90: 02 a4 53 4d 49 5f 0a 0f 68 69 00 00 14 11 57 4d ..SMI_..hi....WM 3ca0: 49 53 02 a4 53 4d 49 5f 0a 10 68 69 00 00 14 11 IS..SMI_..hi.... 3cb0: 55 41 57 53 01 a4 53 4d 49 5f 0a 13 68 00 00 00 UAWS..SMI_..h... 3cc0: 14 11 42 46 57 43 01 a4 53 4d 49 5f 0a 14 00 68 ..BFWC..SMI_...h 3cd0: 00 00 14 11 42 46 57 50 00 a4 53 4d 49 5f 0a 14 ....BFWP..SMI_.. 3ce0: 01 00 00 00 14 11 42 46 57 47 01 53 4d 49 5f 0a ......BFWG.SMI_. 3cf0: 14 0a 03 68 00 00 14 11 42 44 4d 43 01 53 4d 49 ...h....BDMC.SMI 3d00: 5f 0a 14 0a 04 68 00 00 14 12 50 53 49 46 02 a4 _....h....PSIF.. 3d10: 53 4d 49 5f 0a 14 0a 05 68 69 00 14 12 46 4e 53 SMI_....hi...FNS 3d20: 43 02 a4 53 4d 49 5f 0a 14 0a 06 68 69 00 14 12 C..SMI_....hi... 3d30: 41 55 44 43 02 a4 53 4d 49 5f 0a 14 0a 07 68 69 AUDC..SMI_....hi 3d40: 00 14 12 53 59 42 43 02 a4 53 4d 49 5f 0a 14 0a ...SYBC..SMI_... 3d50: 08 68 69 00 14 12 43 42 49 46 02 a4 53 4d 49 5f .hi...CBIF..SMI_ 3d60: 0a 14 0a 0f 68 69 00 14 12 42 46 55 44 00 a4 53 ....hi...BFUD..S 3d70: 4d 49 5f 0a 14 0a 10 00 00 00 14 11 57 4d 49 51 MI_.........WMIQ 3d80: 02 a4 53 4d 49 5f 0a 15 68 69 00 00 14 11 48 42 ..SMI_..hi....HB 3d90: 43 4b 00 a4 53 4d 49 5f 0a 16 00 00 00 00 14 11 CK..SMI_........ 3da0: 43 54 44 50 00 a4 53 4d 49 5f 0a 17 00 00 00 00 CTDP..SMI_...... 3db0: 14 11 54 42 43 54 01 a4 53 4d 49 5f 0a 18 68 00 ..TBCT..SMI_..h. 3dc0: 00 00 10 40 33 5f 54 5a 5f 08 54 50 41 53 0a 62 ...@3_TZ_.TPAS.b 3dd0: 08 54 50 43 5f 0a 82 08 54 39 30 53 0a 53 08 54 .TPC_...T90S.S.T 3de0: 39 30 43 0a 55 5b 85 4c 30 54 5a 30 30 14 42 05 90C.U[.L0TZ00.B. 3df0: 5f 43 52 54 08 a0 28 93 54 4a 39 30 0a 55 70 72 _CRT..(.TJ90.Upr 3e00: 0b ac 0a 77 54 39 30 43 0a 0a 00 00 54 4d 43 50 ...wT90C....TMCP 3e10: a4 72 0b ac 0a 77 54 39 30 43 0a 0a 00 00 a1 21 .r...wT90C.....! 3e20: 70 72 0b ac 0a 77 54 50 43 5f 0a 0a 00 00 54 4d pr...wTPC_....TM 3e30: 43 50 a4 72 0b ac 0a 77 54 50 43 5f 0a 0a 00 00 CP.r...wTPC_.... 3e40: 14 0c 5f 53 43 50 09 70 68 43 54 59 50 14 4e 18 .._SCP.phCTYP.N. 3e50: 5f 54 4d 50 08 70 0b b8 0b 43 52 43 50 a0 49 16 _TMP.p...CRCP.I. 3e60: 45 43 4f 4e a0 4a 0d 44 54 53 45 a0 11 92 95 44 ECON.J.DTSE....D 3e70: 54 53 31 44 54 53 32 70 44 54 53 31 61 a1 07 70 TS1DTS2pDTS1a..p 3e80: 44 54 53 32 61 a0 40 07 92 93 5c 2f 05 5f 53 42 DTS2a.@...\/._SB 3e90: 5f 50 43 49 30 4c 50 43 42 45 43 5f 5f 54 4d 50 _PCI0LPCBEC__TMP 3ea0: 32 00 a0 35 92 95 61 5c 2f 05 5f 53 42 5f 50 43 2..5..a\/._SB_PC 3eb0: 49 30 4c 50 43 42 45 43 5f 5f 54 4d 50 32 74 61 I0LPCBEC__TMP2ta 3ec0: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 \/._SB_PCI0LPCBE 3ed0: 43 5f 5f 54 4d 50 32 67 a1 1d 70 00 67 70 5c 2f C__TMP2g..p.gp\/ 3ee0: 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 5f ._SB_PCI0LPCBEC_ 3ef0: 5f 54 4d 50 32 61 a0 1d 94 61 5c 2f 05 5f 53 42 _TMP2a...a\/._SB 3f00: 5f 50 43 49 30 4c 50 43 42 45 43 5f 5f 54 4d 50 _PCI0LPCBEC__TMP 3f10: 31 70 61 60 a1 1a 70 5c 2f 05 5f 53 42 5f 50 43 1pa`..p\/._SB_PC 3f20: 49 30 4c 50 43 42 45 43 5f 5f 54 4d 50 31 60 a0 I0LPCBEC__TMP1`. 3f30: 0f 7d 95 60 0a 23 94 60 0a 73 00 70 0a 23 60 a1 .}.`.#.`.s.p.#`. 3f40: 48 07 a0 4a 04 94 5c 2f 05 5f 53 42 5f 50 43 49 H..J..\/._SB_PCI 3f50: 30 4c 50 43 42 45 43 5f 5f 54 4d 50 32 5c 2f 05 0LPCBEC__TMP2\/. 3f60: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 5f 5f _SB_PCI0LPCBEC__ 3f70: 54 4d 50 31 70 5c 2f 05 5f 53 42 5f 50 43 49 30 TMP1p\/._SB_PCI0 3f80: 4c 50 43 42 45 43 5f 5f 54 4d 50 32 60 a1 1a 70 LPCBEC__TMP2`..p 3f90: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 \/._SB_PCI0LPCBE 3fa0: 43 5f 5f 54 4d 50 31 60 a0 0f 7d 95 60 0a 23 94 C__TMP1`..}.`.#. 3fb0: 60 0a 73 00 70 0a 23 60 70 72 0b ac 0a 77 60 0a `.s.p.#`pr...w`. 3fc0: 0a 00 00 43 52 43 50 a0 0f 92 95 43 52 43 50 54 ...CRCP....CRCPT 3fd0: 4d 43 50 54 53 44 4c a4 43 52 43 50 14 4a 0c 5f MCPTSDL.CRCP.J._ 3fe0: 50 53 4c 08 a0 4e 05 93 54 43 4e 54 0a 08 a4 12 PSL..N..TCNT.... 3ff0: 43 05 08 5c 2e 5f 50 52 5f 43 50 55 30 5c 2e 5f C..\._PR_CPU0\._ 4000: 50 52 5f 43 50 55 31 5c 2e 5f 50 52 5f 43 50 55 PR_CPU1\._PR_CPU 4010: 32 5c 2e 5f 50 52 5f 43 50 55 33 5c 2e 5f 50 52 2\._PR_CPU3\._PR 4020: 5f 43 50 55 34 5c 2e 5f 50 52 5f 43 50 55 35 5c _CPU4\._PR_CPU5\ 4030: 2e 5f 50 52 5f 43 50 55 36 5c 2e 5f 50 52 5f 43 ._PR_CPU6\._PR_C 4040: 50 55 37 a0 34 93 54 43 4e 54 0a 04 a4 12 2a 04 PU7.4.TCNT....*. 4050: 5c 2e 5f 50 52 5f 43 50 55 30 5c 2e 5f 50 52 5f \._PR_CPU0\._PR_ 4060: 43 50 55 31 5c 2e 5f 50 52 5f 43 50 55 32 5c 2e CPU1\._PR_CPU2\. 4070: 5f 50 52 5f 43 50 55 33 a0 20 93 54 43 4e 54 0a _PR_CPU3. .TCNT. 4080: 02 a4 12 16 02 5c 2e 5f 50 52 5f 43 50 55 30 5c .....\._PR_CPU0\ 4090: 2e 5f 50 52 5f 43 50 55 31 a4 12 0c 01 5c 2e 5f ._PR_CPU1....\._ 40a0: 50 52 5f 43 50 55 30 14 2d 5f 50 53 56 08 a0 16 PR_CPU0.-_PSV... 40b0: 93 54 4a 39 30 0a 55 a4 72 0b ac 0a 77 54 39 30 .TJ90.U.r...wT90 40c0: 53 0a 0a 00 00 a1 0f a4 72 0b ac 0a 77 54 50 41 S.......r...wTPA 40d0: 53 0a 0a 00 00 14 09 5f 54 43 31 08 a4 0a 02 14 S......_TC1..... 40e0: 09 5f 54 43 32 08 a4 0a 03 14 09 5f 54 53 50 08 ._TC2......_TSP. 40f0: a4 0a 64 10 4b 17 2e 5f 53 42 5f 50 43 49 30 5b ..d.K.._SB_PCI0[ 4100: 82 4e 16 50 44 52 43 08 5f 48 49 44 0c 41 d0 0c .N.PDRC._HID.A.. 4110: 02 08 5f 55 49 44 01 08 42 55 46 30 11 4a 08 0a .._UID..BUF0.J.. 4120: 86 86 09 00 01 00 00 00 00 00 40 00 00 86 09 00 ..........@..... 4130: 01 00 00 00 00 00 80 00 00 86 09 00 01 00 00 00 ................ 4140: 00 00 10 00 00 86 09 00 01 00 00 00 00 00 10 00 ................ 4150: 00 86 09 00 01 00 00 00 00 00 00 00 00 86 09 00 ................ 4160: 01 00 00 d2 fe 00 00 02 00 86 09 00 00 00 00 d9 ................ 4170: fe 00 40 00 00 86 09 00 01 00 50 d4 fe 00 b0 04 ..@.......P..... 4180: 00 86 09 00 00 00 00 00 ff 00 00 00 01 86 09 00 ................ 4190: 00 00 00 e0 fe 00 00 10 00 86 09 00 01 00 00 00 ................ 41a0: 00 00 10 00 00 79 00 14 47 0c 5f 43 52 53 08 8a .....y..G._CRS.. 41b0: 42 55 46 30 0a 04 52 42 52 30 79 5e 5e 2e 4c 50 BUF0..RBR0y^^.LP 41c0: 43 42 52 43 42 41 0a 0e 52 42 52 30 8a 42 55 46 CBRCBA..RBR0.BUF 41d0: 30 0a 7c 54 42 52 30 70 54 42 41 42 54 42 52 30 0.|TBR0pTBABTBR0 41e0: 8a 42 55 46 30 0a 80 54 42 4c 4e a0 0d 93 54 42 .BUF0..TBLN...TB 41f0: 41 42 00 70 00 54 42 4c 4e 8a 42 55 46 30 0a 10 AB.p.TBLN.BUF0.. 4200: 4d 42 52 30 79 4d 48 42 52 0a 0f 4d 42 52 30 8a MBR0yMHBR..MBR0. 4210: 42 55 46 30 0a 1c 44 42 52 30 79 44 49 42 52 0a BUF0..DBR0yDIBR. 4220: 0c 44 42 52 30 8a 42 55 46 30 0a 28 45 42 52 30 .DBR0.BUF0.(EBR0 4230: 79 45 50 42 52 0a 0c 45 42 52 30 8a 42 55 46 30 yEPBR..EBR0.BUF0 4240: 0a 34 58 42 52 30 79 50 58 42 52 0a 1a 58 42 52 .4XBR0yPXBR..XBR 4250: 30 8a 42 55 46 30 0a 38 58 53 5a 30 7a 0c 00 00 0.BUF0.8XSZ0z... 4260: 00 10 50 58 53 5a 58 53 5a 30 a4 42 55 46 30 10 ..PXSZXSZ0.BUF0. 4270: 48 85 5f 47 50 45 14 18 5f 4c 30 42 00 86 5c 2f H._GPE.._L0B..\/ 4280: 03 5f 53 42 5f 50 43 49 30 50 30 50 31 0a 02 14 ._SB_PCI0P0P1... 4290: 4d 1c 5f 4c 30 39 00 a0 2c 93 52 50 31 44 00 5c M._L09..,.RP1D.\ 42a0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 48 50 /._SB_PCI0RP01HP 42b0: 4d 45 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 ME.\/._SB_PCI0RP 42c0: 30 31 0a 02 a0 2c 93 52 50 32 44 00 5c 2f 04 5f 01...,.RP2D.\/._ 42d0: 53 42 5f 50 43 49 30 52 50 30 32 48 50 4d 45 86 SB_PCI0RP02HPME. 42e0: 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 32 0a \/._SB_PCI0RP02. 42f0: 02 a0 2c 93 52 50 33 44 00 5c 2f 04 5f 53 42 5f ..,.RP3D.\/._SB_ 4300: 50 43 49 30 52 50 30 33 48 50 4d 45 86 5c 2f 03 PCI0RP03HPME.\/. 4310: 5f 53 42 5f 50 43 49 30 52 50 30 33 0a 02 a0 2c _SB_PCI0RP03..., 4320: 93 52 50 34 44 00 5c 2f 04 5f 53 42 5f 50 43 49 .RP4D.\/._SB_PCI 4330: 30 52 50 30 34 48 50 4d 45 86 5c 2f 03 5f 53 42 0RP04HPME.\/._SB 4340: 5f 50 43 49 30 52 50 30 34 0a 02 a0 2c 93 52 50 _PCI0RP04...,.RP 4350: 35 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 5D.\/._SB_PCI0RP 4360: 30 35 48 50 4d 45 86 5c 2f 03 5f 53 42 5f 50 43 05HPME.\/._SB_PC 4370: 49 30 52 50 30 35 0a 02 a0 2c 93 52 50 36 44 00 I0RP05...,.RP6D. 4380: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 \/._SB_PCI0RP06H 4390: 50 4d 45 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 PME.\/._SB_PCI0R 43a0: 50 30 36 0a 02 a0 2c 93 52 50 37 44 00 5c 2f 04 P06...,.RP7D.\/. 43b0: 5f 53 42 5f 50 43 49 30 52 50 30 37 48 50 4d 45 _SB_PCI0RP07HPME 43c0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 37 .\/._SB_PCI0RP07 43d0: 0a 02 a0 2c 93 52 50 38 44 00 5c 2f 04 5f 53 42 ...,.RP8D.\/._SB 43e0: 5f 50 43 49 30 52 50 30 38 48 50 4d 45 86 5c 2f _PCI0RP08HPME.\/ 43f0: 03 5f 53 42 5f 50 43 49 30 52 50 30 38 0a 02 86 ._SB_PCI0RP08... 4400: 5c 2f 03 5f 53 42 5f 50 43 49 30 50 45 47 30 0a \/._SB_PCI0PEG0. 4410: 02 86 5c 2f 04 5f 53 42 5f 50 43 49 30 50 45 47 ..\/._SB_PCI0PEG 4420: 30 50 45 47 50 0a 02 86 5c 2f 03 5f 53 42 5f 50 0PEGP...\/._SB_P 4430: 43 49 30 50 45 47 31 0a 02 86 5c 2f 03 5f 53 42 CI0PEG1...\/._SB 4440: 5f 50 43 49 30 50 45 47 32 0a 02 86 5c 2f 03 5f _PCI0PEG2...\/._ 4450: 53 42 5f 50 43 49 30 50 45 47 33 0a 02 14 4a 04 SB_PCI0PEG3...J. 4460: 5f 4c 30 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 _L0D..\/._SB_PCI 4470: 30 45 48 43 31 0a 02 86 5c 2f 03 5f 53 42 5f 50 0EHC1...\/._SB_P 4480: 43 49 30 45 48 43 32 0a 02 86 5c 2f 03 5f 53 42 CI0EHC2...\/._SB 4490: 5f 50 43 49 30 48 44 45 46 0a 02 86 5c 2e 5f 53 _PCI0HDEF...\._S 44a0: 42 5f 50 57 52 42 0a 02 14 4e 59 5f 4c 30 31 00 B_PWRB...NY_L01. 44b0: 72 4c 30 31 43 01 4c 30 31 43 70 01 50 38 30 48 rL01C.L01Cp.P80H 44c0: 70 4c 30 31 43 50 38 30 48 a0 43 0b 90 93 52 50 pL01CP80H.C...RP 44d0: 31 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 1D.\/._SB_PCI0RP 44e0: 30 31 48 50 53 58 5b 22 0a 64 a0 4b 07 5c 2f 04 01HPSX[".d.K.\/. 44f0: 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 43 58 _SB_PCI0RP01PDCX 4500: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 4510: 31 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 1PDCXp.\/._SB_PC 4520: 49 30 52 50 30 31 48 50 53 58 a0 2a 92 5c 2f 04 I0RP01HPSX.*.\/. 4530: 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 53 58 _SB_PCI0RP01PDSX 4540: 70 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 4550: 31 4c 30 53 45 86 5c 2f 03 5f 53 42 5f 50 43 49 1L0SE.\/._SB_PCI 4560: 30 52 50 30 31 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP01...p.\/._SB 4570: 5f 50 43 49 30 52 50 30 31 48 50 53 58 a0 43 0b _PCI0RP01HPSX.C. 4580: 90 93 52 50 32 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP2D.\/._SB_PC 4590: 49 30 52 50 30 32 48 50 53 58 5b 22 0a 64 a0 4b I0RP02HPSX[".d.K 45a0: 07 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 45b0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 45c0: 30 52 50 30 32 50 44 43 58 70 01 5c 2f 04 5f 53 0RP02PDCXp.\/._S 45d0: 42 5f 50 43 49 30 52 50 30 32 48 50 53 58 a0 2a B_PCI0RP02HPSX.* 45e0: 92 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 45f0: 50 44 53 58 70 00 5c 2f 04 5f 53 42 5f 50 43 49 PDSXp.\/._SB_PCI 4600: 30 52 50 30 32 4c 30 53 45 86 5c 2f 03 5f 53 42 0RP02L0SE.\/._SB 4610: 5f 50 43 49 30 52 50 30 32 00 a1 16 70 01 5c 2f _PCI0RP02...p.\/ 4620: 04 5f 53 42 5f 50 43 49 30 52 50 30 32 48 50 53 ._SB_PCI0RP02HPS 4630: 58 a0 43 0b 90 93 52 50 33 44 00 5c 2f 04 5f 53 X.C...RP3D.\/._S 4640: 42 5f 50 43 49 30 52 50 30 33 48 50 53 58 5b 22 B_PCI0RP03HPSX[" 4650: 0a 64 a0 4b 07 5c 2f 04 5f 53 42 5f 50 43 49 30 .d.K.\/._SB_PCI0 4660: 52 50 30 33 50 44 43 58 70 01 5c 2f 04 5f 53 42 RP03PDCXp.\/._SB 4670: 5f 50 43 49 30 52 50 30 33 50 44 43 58 70 01 5c _PCI0RP03PDCXp.\ 4680: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 48 50 /._SB_PCI0RP03HP 4690: 53 58 a0 2a 92 5c 2f 04 5f 53 42 5f 50 43 49 30 SX.*.\/._SB_PCI0 46a0: 52 50 30 33 50 44 53 58 70 00 5c 2f 04 5f 53 42 RP03PDSXp.\/._SB 46b0: 5f 50 43 49 30 52 50 30 33 4c 30 53 45 86 5c 2f _PCI0RP03L0SE.\/ 46c0: 03 5f 53 42 5f 50 43 49 30 52 50 30 33 00 a1 16 ._SB_PCI0RP03... 46d0: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 46e0: 33 48 50 53 58 a0 43 0b 90 93 52 50 34 44 00 5c 3HPSX.C...RP4D.\ 46f0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 48 50 /._SB_PCI0RP04HP 4700: 53 58 5b 22 0a 64 a0 4b 07 5c 2f 04 5f 53 42 5f SX[".d.K.\/._SB_ 4710: 50 43 49 30 52 50 30 34 50 44 43 58 70 01 5c 2f PCI0RP04PDCXp.\/ 4720: 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 44 43 ._SB_PCI0RP04PDC 4730: 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 Xp.\/._SB_PCI0RP 4740: 30 34 48 50 53 58 a0 2a 92 5c 2f 04 5f 53 42 5f 04HPSX.*.\/._SB_ 4750: 50 43 49 30 52 50 30 34 50 44 53 58 70 00 5c 2f PCI0RP04PDSXp.\/ 4760: 04 5f 53 42 5f 50 43 49 30 52 50 30 34 4c 30 53 ._SB_PCI0RP04L0S 4770: 45 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 E.\/._SB_PCI0RP0 4780: 34 00 a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 4...p.\/._SB_PCI 4790: 30 52 50 30 34 48 50 53 58 a0 43 0b 90 93 52 50 0RP04HPSX.C...RP 47a0: 35 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 5D.\/._SB_PCI0RP 47b0: 30 35 48 50 53 58 5b 22 0a 64 a0 4b 07 5c 2f 04 05HPSX[".d.K.\/. 47c0: 5f 53 42 5f 50 43 49 30 52 50 30 35 50 44 43 58 _SB_PCI0RP05PDCX 47d0: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 47e0: 35 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 5PDCXp.\/._SB_PC 47f0: 49 30 52 50 30 35 48 50 53 58 a0 2a 92 5c 2f 04 I0RP05HPSX.*.\/. 4800: 5f 53 42 5f 50 43 49 30 52 50 30 35 50 44 53 58 _SB_PCI0RP05PDSX 4810: 70 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 4820: 35 4c 30 53 45 86 5c 2f 03 5f 53 42 5f 50 43 49 5L0SE.\/._SB_PCI 4830: 30 52 50 30 35 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP05...p.\/._SB 4840: 5f 50 43 49 30 52 50 30 35 48 50 53 58 a0 43 0b _PCI0RP05HPSX.C. 4850: 90 93 52 50 36 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP6D.\/._SB_PC 4860: 49 30 52 50 30 36 48 50 53 58 5b 22 0a 64 a0 4b I0RP06HPSX[".d.K 4870: 07 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 4880: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 4890: 30 52 50 30 36 50 44 43 58 70 01 5c 2f 04 5f 53 0RP06PDCXp.\/._S 48a0: 42 5f 50 43 49 30 52 50 30 36 48 50 53 58 a0 2a B_PCI0RP06HPSX.* 48b0: 92 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 48c0: 50 44 53 58 70 00 5c 2f 04 5f 53 42 5f 50 43 49 PDSXp.\/._SB_PCI 48d0: 30 52 50 30 36 4c 30 53 45 86 5c 2f 03 5f 53 42 0RP06L0SE.\/._SB 48e0: 5f 50 43 49 30 52 50 30 36 00 a1 16 70 01 5c 2f _PCI0RP06...p.\/ 48f0: 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 50 53 ._SB_PCI0RP06HPS 4900: 58 a0 42 0a 90 93 52 50 37 44 00 5c 2f 04 5f 53 X.B...RP7D.\/._S 4910: 42 5f 50 43 49 30 52 50 30 37 48 50 53 58 5b 22 B_PCI0RP07HPSX[" 4920: 0a 64 a0 4a 06 5c 2f 04 5f 53 42 5f 50 43 49 30 .d.J.\/._SB_PCI0 4930: 52 50 30 37 50 44 43 58 70 01 5c 2f 04 5f 53 42 RP07PDCXp.\/._SB 4940: 5f 50 43 49 30 52 50 30 37 50 44 43 58 70 01 5c _PCI0RP07PDCXp.\ 4950: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 37 48 50 /._SB_PCI0RP07HP 4960: 53 58 a0 2a 92 5c 2f 04 5f 53 42 5f 50 43 49 30 SX.*.\/._SB_PCI0 4970: 52 50 30 37 50 44 53 58 70 00 5c 2f 04 5f 53 42 RP07PDSXp.\/._SB 4980: 5f 50 43 49 30 52 50 30 37 4c 30 53 45 a1 16 70 _PCI0RP07L0SE..p 4990: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 37 .\/._SB_PCI0RP07 49a0: 48 50 53 58 a0 42 0a 90 93 52 50 38 44 00 5c 2f HPSX.B...RP8D.\/ 49b0: 04 5f 53 42 5f 50 43 49 30 52 50 30 38 48 50 53 ._SB_PCI0RP08HPS 49c0: 58 5b 22 0a 64 a0 4a 06 5c 2f 04 5f 53 42 5f 50 X[".d.J.\/._SB_P 49d0: 43 49 30 52 50 30 38 50 44 43 58 70 01 5c 2f 04 CI0RP08PDCXp.\/. 49e0: 5f 53 42 5f 50 43 49 30 52 50 30 38 50 44 43 58 _SB_PCI0RP08PDCX 49f0: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 4a00: 38 48 50 53 58 a0 2a 92 5c 2f 04 5f 53 42 5f 50 8HPSX.*.\/._SB_P 4a10: 43 49 30 52 50 30 38 50 44 53 58 70 00 5c 2f 04 CI0RP08PDSXp.\/. 4a20: 5f 53 42 5f 50 43 49 30 52 50 30 38 4c 30 53 45 _SB_PCI0RP08L0SE 4a30: a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 ..p.\/._SB_PCI0R 4a40: 50 30 38 48 50 53 58 14 26 5f 4c 30 32 00 70 00 P08HPSX.&_L02.p. 4a50: 47 50 45 43 86 5c 2e 5f 54 5a 5f 54 5a 30 30 0a GPEC.\._TZ_TZ00. 4a60: 80 a0 0c 5b 12 54 4e 4f 54 00 54 4e 4f 54 14 3c ...[.TNOT.TNOT.< 4a70: 5f 4c 30 36 00 a0 2d 90 5c 2f 04 5f 53 42 5f 50 _L06..-.\/._SB_P 4a80: 43 49 30 47 46 58 30 47 53 53 45 92 47 53 4d 49 CI0GFX0GSSE.GSMI 4a90: 5c 2f 04 5f 53 42 5f 50 43 49 30 47 46 58 30 47 \/._SB_PCI0GFX0G 4aa0: 53 43 49 a1 07 70 01 53 43 49 53 14 1c 5f 4c 30 SCI..p.SCIS.._L0 4ab0: 37 00 70 0a 20 5c 2f 04 5f 53 42 5f 50 43 49 30 7.p. \/._SB_PCI0 4ac0: 53 42 55 53 48 53 54 53 10 4c 53 5c 00 5b 80 49 SBUSHSTS.LS\.[.I 4ad0: 4f 5f 54 01 0b 00 08 0a 10 5b 81 24 49 4f 5f 54 O_T......[.$IO_T 4ae0: 01 54 52 50 49 10 00 10 00 10 00 10 54 52 50 30 .TRPI.......TRP0 4af0: 08 00 08 00 08 00 08 00 08 00 08 00 08 00 08 5b ...............[ 4b00: 80 49 4f 5f 44 01 0b 00 20 0a 04 5b 81 0b 49 4f .IO_D... ..[..IO 4b10: 5f 44 01 54 52 50 44 08 5b 80 49 4f 5f 48 01 0b _D.TRPD.[.IO_H.. 4b20: 00 10 0a 04 5b 81 0b 49 4f 5f 48 01 54 52 50 48 ....[..IO_H.TRPH 4b30: 08 5b 80 50 4d 49 4f 01 50 4d 42 53 0a 80 5b 81 .[.PMIO.PMBS..[. 4b40: 25 50 4d 49 4f 01 00 40 14 00 10 00 03 47 50 45 %PMIO..@.....GPE 4b50: 33 01 00 4c 08 00 01 55 50 52 57 01 00 2e 00 01 3..L...UPRW..... 4b60: 47 50 45 43 01 5b 81 1e 50 4d 49 4f 41 00 40 10 GPEC.[..PMIOA.@. 4b70: 00 10 00 03 47 50 53 33 01 00 4c 20 00 09 53 43 ....GPS3..L ..SC 4b80: 49 53 01 00 06 5b 80 47 50 49 4f 01 47 50 42 53 IS...[.GPIO.GPBS 4b90: 0a 64 5b 81 4c 15 47 50 49 4f 01 47 55 30 30 08 .d[.L.GPIO.GU00. 4ba0: 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 47 GU01.GU02.GU03.G 4bb0: 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 49 IO0.GIO1.GIO2.GI 4bc0: 4f 33 08 00 20 00 01 00 01 47 49 30 32 01 47 49 O3.. ....GI02.GI 4bd0: 30 33 01 47 49 30 34 01 00 01 00 01 00 01 00 01 03.GI04......... 4be0: 00 01 00 01 00 01 00 01 00 01 00 01 00 01 47 4f ..............GO 4bf0: 31 36 01 47 4f 31 37 01 00 01 00 01 00 01 00 01 16.GO17......... 4c00: 4d 44 49 44 01 42 4b 4c 54 01 00 03 47 50 32 37 MDID.BKLT...GP27 4c10: 01 47 50 32 38 01 47 4f 32 39 01 00 02 00 40 04 .GP28.GO29....@. 4c20: 00 40 0a 47 49 56 30 08 47 49 56 31 08 47 49 56 .@.GIV0.GIV1.GIV 4c30: 32 08 47 49 56 33 08 47 55 30 34 08 47 55 30 35 2.GIV3.GU04.GU05 4c40: 08 47 55 30 36 08 00 01 00 01 47 55 30 37 01 00 .GU06.....GU07.. 4c50: 05 47 49 4f 34 08 47 49 4f 35 08 47 49 4f 36 08 .GIO4.GIO5.GIO6. 4c60: 47 49 4f 37 08 00 01 00 01 47 4f 33 34 01 47 4f GIO7.....GO34.GO 4c70: 33 35 01 00 01 00 01 00 01 00 01 00 08 47 4f 34 35...........GO4 4c80: 38 01 00 01 47 4f 35 30 01 00 01 00 01 00 01 47 8...GO50.......G 4c90: 4f 35 34 01 00 01 00 28 47 55 30 38 08 47 55 30 O54....(GU08.GU0 4ca0: 39 08 47 55 30 41 08 47 55 30 42 08 47 49 4f 38 9.GU0A.GU0B.GIO8 4cb0: 08 47 49 4f 39 08 47 49 4f 41 08 47 49 4f 42 08 .GIO9.GIOA.GIOB. 4cc0: 00 01 00 01 00 01 00 01 00 01 00 01 47 4f 37 30 ............GO70 4cd0: 01 47 4f 37 31 01 00 01 00 01 00 01 00 01 00 01 .GO71........... 4ce0: 00 01 00 01 00 01 47 4c 30 41 08 47 4c 30 42 08 ......GL0A.GL0B. 4cf0: 5b 80 52 43 52 42 00 53 52 43 42 0b 00 40 5b 81 [.RCRB.SRCB..@[. 4d00: 4c 0a 52 43 52 42 13 00 80 00 08 00 80 00 10 00 L.RCRB.......... 4d10: 80 02 02 48 50 41 53 02 00 05 48 50 41 45 01 00 ...HPAS...HPAE.. 4d20: 48 09 00 01 00 01 53 41 54 44 01 53 4d 42 44 01 H.....SATD.SMBD. 4d30: 48 44 41 44 01 00 0b 52 50 31 44 01 52 50 32 44 HDAD...RP1D.RP2D 4d40: 01 52 50 33 44 01 52 50 34 44 01 52 50 35 44 01 .RP3D.RP4D.RP5D. 4d50: 52 50 36 44 01 52 50 37 44 01 52 50 38 44 01 00 RP6D.RP7D.RP8D.. 4d60: 48 c0 55 50 30 44 01 55 50 31 44 01 55 50 32 44 H.UP0D.UP1D.UP2D 4d70: 01 55 50 33 44 01 55 50 34 44 01 55 50 35 44 01 .UP3D.UP4D.UP5D. 4d80: 55 50 36 44 01 55 50 37 44 01 55 50 38 44 01 55 UP6D.UP7D.UP8D.U 4d90: 50 39 44 01 55 50 41 44 01 55 50 42 44 01 55 50 P9D.UPAD.UPBD.UP 4da0: 43 44 01 55 50 44 44 01 00 01 00 01 14 45 04 47 CD.UPDD......E.G 4db0: 45 54 50 09 a0 0e 93 7b 68 0a 09 00 00 a4 0c ff ETP....{h....... 4dc0: ff ff ff a0 0d 93 7b 68 0a 09 00 0a 08 a4 0b 84 ......{h........ 4dd0: 03 7a 7b 68 0b 00 03 00 0a 08 60 7a 7b 68 0b 00 .z{h......`z{h.. 4de0: 30 00 0a 0c 61 a4 77 0a 1e 74 0a 09 72 60 61 00 0...a.w..t..r`a. 4df0: 00 00 14 30 47 44 4d 41 0d a0 23 68 a0 07 90 69 ...0GDMA..#h...i 4e00: 6c a4 0a 14 a0 0e 90 6a 6c a4 77 74 0a 04 6b 00 l......jl.wt..k. 4e10: 0a 0f 00 a4 77 74 0a 04 6b 00 0a 1e 00 a4 0c ff ....wt..k....... 4e20: ff ff ff 14 1f 47 45 54 54 09 a4 77 0a 1e 74 0a .....GETT..w..t. 4e30: 09 72 7b 7a 68 0a 02 00 0a 03 00 7b 68 0a 03 00 .r{zh......{h... 4e40: 00 00 00 14 44 06 47 45 54 46 0b 08 54 4d 50 46 ....D.GETF..TMPF 4e50: 00 a0 0c 68 7d 54 4d 50 46 01 54 4d 50 46 a0 11 ...h}TMPF.TMPF.. 4e60: 7b 6a 0a 02 00 7d 54 4d 50 46 0a 02 54 4d 50 46 {j...}TMPF..TMPF 4e70: a0 0d 69 7d 54 4d 50 46 0a 04 54 4d 50 46 a0 11 ..i}TMPF..TMPF.. 4e80: 7b 6a 0a 20 00 7d 54 4d 50 46 0a 08 54 4d 50 46 {j. .}TMPF..TMPF 4e90: a0 12 7b 6a 0b 00 40 00 7d 54 4d 50 46 0a 10 54 ..{j..@.}TMPF..T 4ea0: 4d 50 46 a4 54 4d 50 46 14 3d 53 45 54 50 0b a0 MPF.TMPF.=SETP.. 4eb0: 08 94 68 0a f0 a4 0a 08 a1 2d a0 27 7b 69 0a 02 ..h......-.'{i.. 4ec0: 00 a0 10 90 92 94 68 0a 78 7b 6a 0a 02 00 a4 0b ......h.x{j..... 4ed0: 01 23 a0 0f 90 92 94 68 0a b4 7b 6a 01 00 a4 0b .#.....h..{j.... 4ee0: 01 21 a4 0b 01 10 14 37 53 44 4d 41 09 a0 08 92 .!.....7SDMA.... 4ef0: 94 68 0a 14 a4 01 a0 09 92 94 68 0a 1e a4 0a 02 .h........h..... 4f00: a0 08 92 94 68 0a 2d a4 01 a0 09 92 94 68 0a 3c ....h.-......h.< 4f10: a4 0a 02 a0 08 92 94 68 0a 5a a4 01 a4 00 14 2f .......h.Z...../ 4f20: 53 45 54 54 0b a0 25 7b 69 0a 02 00 a0 0f 90 92 SETT..%{i....... 4f30: 94 68 0a 78 7b 6a 0a 02 00 a4 0a 0b a0 0e 90 92 .h.x{j.......... 4f40: 94 68 0a b4 7b 6a 01 00 a4 0a 09 a4 0a 04 14 30 .h..{j.........0 4f50: 44 50 49 4f 02 a0 05 92 68 a4 00 a0 07 94 68 0a DPIO....h.....h. 4f60: f0 a4 00 a0 0f 94 68 0a b4 a0 05 69 a4 0a 02 a1 ......h....i.... 4f70: 03 a4 01 a0 08 94 68 0a 78 a4 0a 03 a4 0a 04 14 ......h.x....... 4f80: 3b 44 55 44 4d 02 a0 06 92 69 a4 0a ff a0 07 94 ;DUDM....i...... 4f90: 68 0a 5a a4 00 a0 07 94 68 0a 3c a4 01 a0 08 94 h.Z.....h.<..... 4fa0: 68 0a 2d a4 0a 02 a0 08 94 68 0a 1e a4 0a 03 a0 h.-......h...... 4fb0: 08 94 68 0a 14 a4 0a 04 a4 0a 05 14 2c 46 44 4d ..h.........,FDM 4fc0: 41 02 a0 0c 92 93 69 0a ff a4 7d 69 0a 40 00 a0 A.....i...}i.@.. 4fd0: 10 92 95 68 0a 03 a4 7d 74 68 0a 02 00 0a 20 00 ...h...}th.... . 4fe0: a0 05 68 a4 0a 12 a4 00 14 1c 46 50 49 4f 01 a0 ..h.......FPIO.. 4ff0: 0c 92 95 68 0a 03 a4 7d 68 0a 08 00 a0 06 93 68 ...h...}h......h 5000: 01 a4 01 a4 00 10 86 d3 01 2e 5f 53 42 5f 50 43 .........._SB_PC 5010: 49 30 5b 82 41 12 45 48 43 31 08 5f 41 44 52 0c I0[.A.EHC1._ADR. 5020: 00 00 1d 00 5b 80 50 57 4b 45 02 0a 62 0a 04 5b ....[.PWKE..b..[ 5030: 81 0d 50 57 4b 45 03 00 01 50 57 55 43 08 14 1d ..PWKE...PWUC... 5040: 5f 50 53 57 01 a0 08 68 70 ff 50 57 55 43 a1 07 _PSW...hp.PWUC.. 5050: 70 00 50 57 55 43 70 68 45 53 47 30 14 09 5f 53 p.PWUCphESG0.._S 5060: 33 44 00 a4 0a 02 14 09 5f 53 34 44 00 a4 0a 02 3D......_S4D.... 5070: 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 0d 0a 03 .._PRW..GPRW.... 5080: 5b 82 43 0b 48 55 42 30 08 5f 41 44 52 00 5b 82 [.C.HUB0._ADR.[. 5090: 45 0a 50 52 54 31 08 5f 41 44 52 01 08 5f 55 50 E.PRT1._ADR.._UP 50a0: 43 12 07 04 00 0a ff 00 00 5b 82 44 05 50 52 4f C........[.D.PRO 50b0: 34 08 5f 41 44 52 0a 04 08 5f 55 50 43 12 07 04 4._ADR..._UPC... 50c0: 00 0a ff 00 00 5b 82 38 43 41 4d 45 08 5f 41 44 .....[.8CAME._AD 50d0: 52 0a 04 14 2b 5f 50 4c 44 08 08 50 4c 44 50 12 R...+_PLD..PLDP. 50e0: 1a 01 11 17 0a 14 82 00 00 00 00 00 00 00 24 01 ..............$. 50f0: 00 00 00 00 00 00 9b 00 c3 00 a4 50 4c 44 50 5b ...........PLDP[ 5100: 82 19 50 52 4f 35 08 5f 41 44 52 0a 05 08 5f 55 ..PRO5._ADR..._U 5110: 50 43 12 07 04 00 0a ff 00 00 5b 82 19 50 52 4f PC........[..PRO 5120: 36 08 5f 41 44 52 0a 06 08 5f 55 50 43 12 07 04 6._ADR..._UPC... 5130: 00 0a ff 00 00 5b 82 4b 0c 45 48 43 32 08 5f 41 .....[.K.EHC2._A 5140: 44 52 0c 00 00 1a 00 5b 80 50 57 4b 45 02 0a 62 DR.....[.PWKE..b 5150: 0a 04 5b 81 0d 50 57 4b 45 03 00 01 50 57 55 43 ..[..PWKE...PWUC 5160: 06 14 1d 5f 50 53 57 01 a0 08 68 70 ff 50 57 55 ..._PSW...hp.PWU 5170: 43 a1 07 70 00 50 57 55 43 70 68 45 53 47 31 14 C..p.PWUCphESG1. 5180: 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 34 44 00 ._S3D......_S4D. 5190: a4 0a 02 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a ....._PRW..GPRW. 51a0: 0d 0a 03 5b 82 4d 05 48 55 42 30 08 5f 41 44 52 ...[.M.HUB0._ADR 51b0: 00 5b 82 4f 04 50 52 54 31 08 5f 41 44 52 01 08 .[.O.PRT1._ADR.. 51c0: 5f 55 50 43 12 07 04 00 0a ff 00 00 5b 82 19 50 _UPC........[..P 51d0: 4f 52 33 08 5f 41 44 52 0a 03 08 5f 55 50 43 12 OR3._ADR..._UPC. 51e0: 07 04 00 0a ff 00 00 5b 82 19 50 4f 52 36 08 5f .......[..POR6._ 51f0: 41 44 52 0a 06 08 5f 55 50 43 12 07 04 00 0a ff ADR..._UPC...... 5200: 00 00 5b 82 43 61 58 48 43 5f 08 5f 41 44 52 0c ..[.CaXHC_._ADR. 5210: 00 00 14 00 5b 80 58 50 52 54 02 0a 74 0a 6c 5b ....[.XPRT..t.l[ 5220: 81 2b 58 50 52 54 03 00 08 50 4d 45 45 01 00 06 .+XPRT...PMEE... 5230: 50 4d 45 53 01 00 40 2d 50 52 32 5f 20 50 52 32 PMES..@-PR2_ PR2 5240: 4d 20 50 52 33 5f 20 50 52 33 4d 20 08 58 52 53 M PR3_ PR3M .XRS 5250: 54 00 14 22 43 55 49 44 09 a0 19 93 68 11 13 0a T.."CUID....h... 5260: 10 a9 12 95 7c 05 17 b4 4c af 7d 50 6a 24 23 ab ....|...L.}Pj$#. 5270: 71 a4 01 a4 00 14 49 05 50 4f 53 43 0b 8a 6a 00 q.....I.POSC..j. 5280: 43 44 57 31 8a 6a 0a 08 43 44 57 33 a0 10 92 93 CDW1.j..CDW3.... 5290: 69 01 7d 43 44 57 31 0a 08 43 44 57 31 a0 12 93 i.}CDW1..CDW1... 52a0: 58 48 43 49 00 7d 43 44 57 31 0a 02 43 44 57 31 XHCI.}CDW1..CDW1 52b0: a0 1c 92 7b 43 44 57 31 01 00 a0 0c 7b 43 44 57 ...{CDW1....{CDW 52c0: 33 01 00 45 53 45 4c a1 05 58 53 45 4c a4 6a 14 3..ESEL..XSEL.j. 52d0: 43 06 58 53 45 4c 08 a0 4b 05 91 93 58 48 43 49 C.XSEL..K...XHCI 52e0: 0a 02 93 58 48 43 49 0a 03 70 01 58 55 53 42 70 ...XHCI..p.XUSBp 52f0: 01 58 52 53 54 70 00 60 7b 50 52 33 5f 0c f0 ff .XRSTp.`{PR3_... 5300: ff ff 60 7d 60 58 48 50 4d 60 7b 60 50 52 33 4d ..`}`XHPM`{`PR3M 5310: 50 52 33 5f 70 00 60 7b 50 52 32 5f 0c f0 ff ff PR3_p.`{PR2_.... 5320: ff 60 7d 60 58 48 50 4d 60 7b 60 50 52 32 4d 50 .`}`XHPM`{`PR2MP 5330: 52 32 5f 14 3f 45 53 45 4c 08 a0 38 91 93 58 48 R2_.?ESEL..8..XH 5340: 43 49 0a 02 93 58 48 43 49 0a 03 7b 50 52 33 5f CI...XHCI..{PR3_ 5350: 0c f0 ff ff ff 50 52 33 5f 7b 50 52 32 5f 0c f0 .....PR3_{PR2_.. 5360: ff ff ff 50 52 32 5f 70 00 58 55 53 42 70 00 58 ...PR2_p.XUSBp.X 5370: 52 53 54 14 19 58 57 41 4b 08 a0 12 91 93 58 55 RST..XWAK.....XU 5380: 53 42 01 93 58 52 53 54 01 58 53 45 4c 14 09 5f SB..XRST.XSEL.._ 5390: 53 33 44 00 a4 0a 02 14 09 5f 53 34 44 00 a4 0a S3D......_S4D... 53a0: 02 5b 82 47 45 52 48 55 42 08 5f 41 44 52 00 5b .[.GERHUB._ADR.[ 53b0: 82 45 08 48 53 50 31 08 5f 41 44 52 01 14 2c 5f .E.HSP1._ADR..,_ 53c0: 55 50 43 08 08 55 50 43 50 12 08 04 0a ff 0a 03 UPC..UPCP....... 53d0: 00 00 a0 12 92 7b 50 52 32 5f 01 00 70 00 88 55 .....{PR2_..p..U 53e0: 50 43 50 00 00 a4 55 50 43 50 14 4b 04 5f 50 4c PCP...UPCP.K._PL 53f0: 44 08 08 50 4c 44 50 12 16 01 11 13 0a 10 01 c6 D..PLDP......... 5400: 72 00 00 00 00 00 69 0c 80 00 00 00 00 00 8d 83 r.....i......... 5410: 88 50 4c 44 50 00 00 0a 40 56 49 53 5f a0 13 92 .PLDP...@VIS_... 5420: 7b 50 52 32 5f 01 00 7b 56 49 53 5f 00 56 49 53 {PR2_..{VIS_.VIS 5430: 5f a4 50 4c 44 50 5b 82 48 08 48 53 50 32 08 5f _.PLDP[.H.HSP2._ 5440: 41 44 52 0a 02 14 2d 5f 55 50 43 08 08 55 50 43 ADR...-_UPC..UPC 5450: 50 12 08 04 0a ff 0a 03 00 00 a0 13 92 7b 50 52 P............{PR 5460: 32 5f 0a 02 00 70 00 88 55 50 43 50 00 00 a4 55 2_...p..UPCP...U 5470: 50 43 50 14 4c 04 5f 50 4c 44 08 08 50 4c 44 50 PCP.L._PLD..PLDP 5480: 12 16 01 11 13 0a 10 01 c6 72 00 00 00 00 00 69 .........r.....i 5490: 0c 00 01 00 00 00 00 8d 83 88 50 4c 44 50 00 00 ..........PLDP.. 54a0: 0a 40 56 49 53 5f a0 14 92 7b 50 52 32 5f 0a 02 .@VIS_...{PR2_.. 54b0: 00 7b 56 49 53 5f 00 56 49 53 5f a4 50 4c 44 50 .{VIS_.VIS_.PLDP 54c0: 5b 82 48 08 48 53 50 33 08 5f 41 44 52 0a 03 14 [.H.HSP3._ADR... 54d0: 2d 5f 55 50 43 08 08 55 50 43 50 12 08 04 0a ff -_UPC..UPCP..... 54e0: 0a 03 00 00 a0 13 92 7b 50 52 32 5f 0a 04 00 70 .......{PR2_...p 54f0: 00 88 55 50 43 50 00 00 a4 55 50 43 50 14 4c 04 ..UPCP...UPCP.L. 5500: 5f 50 4c 44 08 08 50 4c 44 50 12 16 01 11 13 0a _PLD..PLDP...... 5510: 10 01 c6 72 00 00 00 00 00 69 0c 80 01 00 00 00 ...r.....i...... 5520: 00 8d 83 88 50 4c 44 50 00 00 0a 40 56 49 53 5f ....PLDP...@VIS_ 5530: a0 14 92 7b 50 52 32 5f 0a 04 00 7b 56 49 53 5f ...{PR2_...{VIS_ 5540: 00 56 49 53 5f a4 50 4c 44 50 5b 82 48 08 48 53 .VIS_.PLDP[.H.HS 5550: 50 34 08 5f 41 44 52 0a 04 14 2d 5f 55 50 43 08 P4._ADR...-_UPC. 5560: 08 55 50 43 50 12 08 04 0a ff 0a 03 00 00 a0 13 .UPCP........... 5570: 92 7b 50 52 32 5f 0a 08 00 70 00 88 55 50 43 50 .{PR2_...p..UPCP 5580: 00 00 a4 55 50 43 50 14 4c 04 5f 50 4c 44 08 08 ...UPCP.L._PLD.. 5590: 50 4c 44 50 12 16 01 11 13 0a 10 01 c6 72 00 00 PLDP.........r.. 55a0: 00 00 00 69 0c 00 02 00 00 00 00 8d 83 88 50 4c ...i..........PL 55b0: 44 50 00 00 0a 40 56 49 53 5f a0 14 92 7b 50 52 DP...@VIS_...{PR 55c0: 32 5f 0a 08 00 7b 56 49 53 5f 00 56 49 53 5f a4 2_...{VIS_.VIS_. 55d0: 50 4c 44 50 5b 82 46 08 53 53 50 31 08 5f 41 44 PLDP[.F.SSP1._AD 55e0: 52 0a 05 14 2c 5f 55 50 43 08 08 55 50 43 50 12 R...,_UPC..UPCP. 55f0: 08 04 0a ff 0a 03 00 00 a0 12 92 7b 50 52 33 5f ...........{PR3_ 5600: 01 00 70 00 88 55 50 43 50 00 00 a4 55 50 43 50 ..p..UPCP...UPCP 5610: 14 4b 04 5f 50 4c 44 08 08 50 4c 44 50 12 16 01 .K._PLD..PLDP... 5620: 11 13 0a 10 01 c6 72 00 00 00 00 00 69 0c 80 00 ......r.....i... 5630: 00 00 00 00 8d 83 88 50 4c 44 50 00 00 0a 40 56 .......PLDP...@V 5640: 49 53 5f a0 13 92 7b 50 52 33 5f 01 00 7b 56 49 IS_...{PR3_..{VI 5650: 53 5f 00 56 49 53 5f a4 50 4c 44 50 5b 82 48 08 S_.VIS_.PLDP[.H. 5660: 53 53 50 32 08 5f 41 44 52 0a 06 14 2d 5f 55 50 SSP2._ADR...-_UP 5670: 43 08 08 55 50 43 50 12 08 04 0a ff 0a 03 00 00 C..UPCP......... 5680: a0 13 92 7b 50 52 33 5f 0a 02 00 70 00 88 55 50 ...{PR3_...p..UP 5690: 43 50 00 00 a4 55 50 43 50 14 4c 04 5f 50 4c 44 CP...UPCP.L._PLD 56a0: 08 08 50 4c 44 50 12 16 01 11 13 0a 10 01 c6 72 ..PLDP.........r 56b0: 00 00 00 00 00 69 0c 00 01 00 00 00 00 8d 83 88 .....i.......... 56c0: 50 4c 44 50 00 00 0a 40 56 49 53 5f a0 14 92 7b PLDP...@VIS_...{ 56d0: 50 52 33 5f 0a 02 00 7b 56 49 53 5f 00 56 49 53 PR3_...{VIS_.VIS 56e0: 5f a4 50 4c 44 50 5b 82 48 08 53 53 50 33 08 5f _.PLDP[.H.SSP3._ 56f0: 41 44 52 0a 07 14 2d 5f 55 50 43 08 08 55 50 43 ADR...-_UPC..UPC 5700: 50 12 08 04 0a ff 0a 03 00 00 a0 13 92 7b 50 52 P............{PR 5710: 33 5f 0a 04 00 70 00 88 55 50 43 50 00 00 a4 55 3_...p..UPCP...U 5720: 50 43 50 14 4c 04 5f 50 4c 44 08 08 50 4c 44 50 PCP.L._PLD..PLDP 5730: 12 16 01 11 13 0a 10 01 c6 72 00 00 00 00 00 69 .........r.....i 5740: 0c 80 01 00 00 00 00 8d 83 88 50 4c 44 50 00 00 ..........PLDP.. 5750: 0a 40 56 49 53 5f a0 14 92 7b 50 52 33 5f 0a 04 .@VIS_...{PR3_.. 5760: 00 7b 56 49 53 5f 00 56 49 53 5f a4 50 4c 44 50 .{VIS_.VIS_.PLDP 5770: 5b 82 48 08 53 53 50 34 08 5f 41 44 52 0a 08 14 [.H.SSP4._ADR... 5780: 2d 5f 55 50 43 08 08 55 50 43 50 12 08 04 0a ff -_UPC..UPCP..... 5790: 0a 03 00 00 a0 13 92 7b 50 52 33 5f 0a 08 00 70 .......{PR3_...p 57a0: 00 88 55 50 43 50 00 00 a4 55 50 43 50 14 4c 04 ..UPCP...UPCP.L. 57b0: 5f 50 4c 44 08 08 50 4c 44 50 12 16 01 11 13 0a _PLD..PLDP...... 57c0: 10 01 c6 72 00 00 00 00 00 69 0c 00 02 00 00 00 ...r.....i...... 57d0: 00 8d 83 88 50 4c 44 50 00 00 0a 40 56 49 53 5f ....PLDP...@VIS_ 57e0: a0 14 92 7b 50 52 33 5f 0a 08 00 7b 56 49 53 5f ...{PR3_...{VIS_ 57f0: 00 56 49 53 5f a4 50 4c 44 50 14 0f 5f 50 52 57 .VIS_.PLDP.._PRW 5800: 00 a4 47 50 52 57 0a 0d 0a 03 14 0c 5f 50 53 57 ..GPRW......_PSW 5810: 01 70 68 45 53 47 32 5b 82 4f 04 48 44 45 46 08 .phESG2[.O.HDEF. 5820: 5f 41 44 52 0c 00 00 1b 00 5b 80 48 44 41 52 02 _ADR.....[.HDAR. 5830: 0a 4c 0a 10 5b 81 22 48 44 41 52 02 44 43 4b 41 .L..[."HDAR.DCKA 5840: 01 00 07 44 43 4b 4d 01 00 06 44 43 4b 53 01 00 ...DCKM...DCKS.. 5850: 30 00 0f 50 4d 45 53 01 14 0f 5f 50 52 57 00 a4 0..PMES..._PRW.. 5860: 47 50 52 57 0a 0d 0a 04 5b 82 4f 0c 52 50 30 31 GPRW....[.O.RP01 5870: 08 5f 41 44 52 0c 00 00 1c 00 5b 80 50 58 43 53 ._ADR.....[.PXCS 5880: 02 0a 40 0a c0 5b 81 49 04 50 58 43 53 00 00 40 ..@..[.I.PXCS..@ 5890: 08 4c 30 53 45 01 00 07 00 08 00 0d 4c 41 53 58 .L0SE.......LASX 58a0: 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 00 ..2ABPX...PDCX.. 58b0: 02 50 44 53 58 01 00 01 00 28 00 10 50 53 50 58 .PDSX....(..PSPX 58c0: 01 00 4f 3a 00 1e 48 50 45 58 01 50 4d 45 58 01 ..O:..HPEX.PMEX. 58d0: 5b 81 15 50 58 43 53 40 00 40 4e 00 1e 48 50 53 [..PXCS@.@N..HPS 58e0: 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 5f X.PMSX.[..PXSX._ 58f0: 41 44 52 00 14 2d 48 50 4d 45 08 a0 26 50 4d 53 ADR..-HPME..&PMS 5900: 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 58 a0 07 Xp..`..`p.PMSX.. 5910: 50 4d 53 58 76 60 a1 04 70 00 60 86 50 58 53 58 PMSXv`..p.`.PXSX 5920: 0a 02 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 ...._PRT...PICM. 5930: 41 52 30 34 a4 50 52 30 34 5b 82 4f 0c 52 50 30 AR04.PR04[.O.RP0 5940: 32 08 5f 41 44 52 0c 01 00 1c 00 5b 80 50 58 43 2._ADR.....[.PXC 5950: 53 02 0a 40 0a c0 5b 81 49 04 50 58 43 53 00 00 S..@..[.I.PXCS.. 5960: 40 08 4c 30 53 45 01 00 07 00 08 00 0d 4c 41 53 @.L0SE.......LAS 5970: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 5980: 00 02 50 44 53 58 01 00 01 00 28 00 10 50 53 50 ..PDSX....(..PSP 5990: 58 01 00 4f 3a 00 1e 48 50 45 58 01 50 4d 45 58 X..O:..HPEX.PMEX 59a0: 01 5b 81 15 50 58 43 53 40 00 40 4e 00 1e 48 50 .[..PXCS@.@N..HP 59b0: 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 SX.PMSX.[..PXSX. 59c0: 5f 41 44 52 00 14 2d 48 50 4d 45 08 a0 26 50 4d _ADR..-HPME..&PM 59d0: 53 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 58 a0 SXp..`..`p.PMSX. 59e0: 07 50 4d 53 58 76 60 a1 04 70 00 60 86 50 58 53 .PMSXv`..p.`.PXS 59f0: 58 0a 02 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d X...._PRT...PICM 5a00: a4 41 52 30 35 a4 50 52 30 35 5b 82 4f 0c 52 50 .AR05.PR05[.O.RP 5a10: 30 33 08 5f 41 44 52 0c 02 00 1c 00 5b 80 50 58 03._ADR.....[.PX 5a20: 43 53 02 0a 40 0a c0 5b 81 49 04 50 58 43 53 00 CS..@..[.I.PXCS. 5a30: 00 40 08 4c 30 53 45 01 00 07 00 08 00 0d 4c 41 .@.L0SE.......LA 5a40: 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 SX..2ABPX...PDCX 5a50: 01 00 02 50 44 53 58 01 00 01 00 28 00 10 50 53 ...PDSX....(..PS 5a60: 50 58 01 00 4f 3a 00 1e 48 50 45 58 01 50 4d 45 PX..O:..HPEX.PME 5a70: 58 01 5b 81 15 50 58 43 53 40 00 40 4e 00 1e 48 X.[..PXCS@.@N..H 5a80: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 5a90: 08 5f 41 44 52 00 14 2d 48 50 4d 45 08 a0 26 50 ._ADR..-HPME..&P 5aa0: 4d 53 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 58 MSXp..`..`p.PMSX 5ab0: a0 07 50 4d 53 58 76 60 a1 04 70 00 60 86 50 58 ..PMSXv`..p.`.PX 5ac0: 53 58 0a 02 14 16 5f 50 52 54 00 a0 0a 50 49 43 SX...._PRT...PIC 5ad0: 4d a4 41 52 30 36 a4 50 52 30 36 5b 82 4f 0d 52 M.AR06.PR06[.O.R 5ae0: 50 30 34 08 5f 41 44 52 0c 03 00 1c 00 5b 80 50 P04._ADR.....[.P 5af0: 58 43 53 02 0a 40 0a c0 5b 81 49 04 50 58 43 53 XCS..@..[.I.PXCS 5b00: 00 00 40 08 4c 30 53 45 01 00 07 00 08 00 0d 4c ..@.L0SE.......L 5b10: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 5b20: 58 01 00 02 50 44 53 58 01 00 01 00 28 00 10 50 X...PDSX....(..P 5b30: 53 50 58 01 00 4f 3a 00 1e 48 50 45 58 01 50 4d SPX..O:..HPEX.PM 5b40: 45 58 01 5b 81 15 50 58 43 53 40 00 40 4e 00 1e EX.[..PXCS@.@N.. 5b50: 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 HPSX.PMSX.[..PXS 5b60: 58 08 5f 41 44 52 00 14 2d 48 50 4d 45 08 a0 26 X._ADR..-HPME..& 5b70: 50 4d 53 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 PMSXp..`..`p.PMS 5b80: 58 a0 07 50 4d 53 58 76 60 a1 04 70 00 60 86 50 X..PMSXv`..p.`.P 5b90: 58 53 58 0a 02 14 0f 5f 50 52 57 00 a4 47 50 52 XSX...._PRW..GPR 5ba0: 57 0a 09 0a 04 14 16 5f 50 52 54 00 a0 0a 50 49 W......_PRT...PI 5bb0: 43 4d a4 41 52 30 37 a4 50 52 30 37 5b 82 4f 0c CM.AR07.PR07[.O. 5bc0: 52 50 30 35 08 5f 41 44 52 0c 04 00 1c 00 5b 80 RP05._ADR.....[. 5bd0: 50 58 43 53 02 0a 40 0a c0 5b 81 49 04 50 58 43 PXCS..@..[.I.PXC 5be0: 53 00 00 40 08 4c 30 53 45 01 00 07 00 08 00 0d S..@.L0SE....... 5bf0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 5c00: 43 58 01 00 02 50 44 53 58 01 00 01 00 28 00 10 CX...PDSX....(.. 5c10: 50 53 50 58 01 00 4f 3a 00 1e 48 50 45 58 01 50 PSPX..O:..HPEX.P 5c20: 4d 45 58 01 5b 81 15 50 58 43 53 40 00 40 4e 00 MEX.[..PXCS@.@N. 5c30: 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 .HPSX.PMSX.[..PX 5c40: 53 58 08 5f 41 44 52 00 14 2d 48 50 4d 45 08 a0 SX._ADR..-HPME.. 5c50: 26 50 4d 53 58 70 0a c8 60 a2 15 60 70 01 50 4d &PMSXp..`..`p.PM 5c60: 53 58 a0 07 50 4d 53 58 76 60 a1 04 70 00 60 86 SX..PMSXv`..p.`. 5c70: 50 58 53 58 0a 02 14 16 5f 50 52 54 00 a0 0a 50 PXSX...._PRT...P 5c80: 49 43 4d a4 41 52 30 38 a4 50 52 30 38 5b 82 4b ICM.AR08.PR08[.K 5c90: 0e 52 50 30 36 08 5f 41 44 52 0c 05 00 1c 00 5b .RP06._ADR.....[ 5ca0: 80 50 58 43 53 02 0a 40 0a c0 5b 81 49 04 50 58 .PXCS..@..[.I.PX 5cb0: 43 53 00 00 40 08 4c 30 53 45 01 00 07 00 08 00 CS..@.L0SE...... 5cc0: 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 .LASX..2ABPX...P 5cd0: 44 43 58 01 00 02 50 44 53 58 01 00 01 00 28 00 DCX...PDSX....(. 5ce0: 10 50 53 50 58 01 00 4f 3a 00 1e 48 50 45 58 01 .PSPX..O:..HPEX. 5cf0: 50 4d 45 58 01 5b 81 15 50 58 43 53 40 00 40 4e PMEX.[..PXCS@.@N 5d00: 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 17 50 ..HPSX.PMSX.[..P 5d10: 58 53 58 08 5f 41 44 52 00 08 5f 50 52 57 12 06 XSX._ADR.._PRW.. 5d20: 02 0a 09 0a 04 14 2d 48 50 4d 45 08 a0 26 50 4d ......-HPME..&PM 5d30: 53 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 58 a0 SXp..`..`p.PMSX. 5d40: 07 50 4d 53 58 76 60 a1 04 70 00 60 86 50 58 53 .PMSXv`..p.`.PXS 5d50: 58 0a 02 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a X...._PRW..GPRW. 5d60: 09 0a 04 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d ....._PRT...PICM 5d70: a4 41 52 30 39 a4 50 52 30 39 5b 82 4f 0c 52 50 .AR09.PR09[.O.RP 5d80: 30 37 08 5f 41 44 52 0c 06 00 1c 00 5b 80 50 58 07._ADR.....[.PX 5d90: 43 53 02 0a 40 0a c0 5b 81 49 04 50 58 43 53 00 CS..@..[.I.PXCS. 5da0: 00 40 08 4c 30 53 45 01 00 07 00 08 00 0d 4c 41 .@.L0SE.......LA 5db0: 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 SX..2ABPX...PDCX 5dc0: 01 00 02 50 44 53 58 01 00 01 00 28 00 10 50 53 ...PDSX....(..PS 5dd0: 50 58 01 00 4f 3a 00 1e 48 50 45 58 01 50 4d 45 PX..O:..HPEX.PME 5de0: 58 01 5b 81 15 50 58 43 53 40 00 40 4e 00 1e 48 X.[..PXCS@.@N..H 5df0: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 5e00: 08 5f 41 44 52 00 14 2d 48 50 4d 45 08 a0 26 50 ._ADR..-HPME..&P 5e10: 4d 53 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 58 MSXp..`..`p.PMSX 5e20: a0 07 50 4d 53 58 76 60 a1 04 70 00 60 86 50 58 ..PMSXv`..p.`.PX 5e30: 53 58 0a 02 14 16 5f 50 52 54 00 a0 0a 50 49 43 SX...._PRT...PIC 5e40: 4d a4 41 52 30 45 a4 50 52 30 45 5b 82 4f 0c 52 M.AR0E.PR0E[.O.R 5e50: 50 30 38 08 5f 41 44 52 0c 07 00 1c 00 5b 80 50 P08._ADR.....[.P 5e60: 58 43 53 02 0a 40 0a c0 5b 81 49 04 50 58 43 53 XCS..@..[.I.PXCS 5e70: 00 00 40 08 4c 30 53 45 01 00 07 00 08 00 0d 4c ..@.L0SE.......L 5e80: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 5e90: 58 01 00 02 50 44 53 58 01 00 01 00 28 00 10 50 X...PDSX....(..P 5ea0: 53 50 58 01 00 4f 3a 00 1e 48 50 45 58 01 50 4d SPX..O:..HPEX.PM 5eb0: 45 58 01 5b 81 15 50 58 43 53 40 00 40 4e 00 1e EX.[..PXCS@.@N.. 5ec0: 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 HPSX.PMSX.[..PXS 5ed0: 58 08 5f 41 44 52 00 14 2d 48 50 4d 45 08 a0 26 X._ADR..-HPME..& 5ee0: 50 4d 53 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 PMSXp..`..`p.PMS 5ef0: 58 a0 07 50 4d 53 58 76 60 a1 04 70 00 60 86 50 X..PMSXv`..p.`.P 5f00: 58 53 58 0a 02 14 16 5f 50 52 54 00 a0 0a 50 49 XSX...._PRT...PI 5f10: 43 4d a4 41 52 30 46 a4 50 52 30 46 5b 82 44 8f CM.AR0F.PR0F[.D. 5f20: 53 41 54 30 08 5f 41 44 52 0c 02 00 1f 00 5b 80 SAT0._ADR.....[. 5f30: 53 41 43 53 02 0a 40 0a c0 5b 81 4f 06 53 41 43 SACS..@..[.O.SAC 5f40: 53 03 50 52 49 54 10 53 45 43 54 10 50 53 49 54 S.PRIT.SECT.PSIT 5f50: 04 53 53 49 54 04 00 18 53 59 4e 43 04 00 0c 53 .SSIT...SYNC...S 5f60: 44 54 30 02 00 02 53 44 54 31 02 00 02 53 44 54 DT0...SDT1...SDT 5f70: 32 02 00 02 53 44 54 33 02 00 42 04 49 43 52 30 2...SDT3..B.ICR0 5f80: 04 49 43 52 31 04 49 43 52 32 04 49 43 52 33 04 .ICR1.ICR2.ICR3. 5f90: 49 43 52 34 04 49 43 52 35 04 00 48 0e 48 44 50 ICR4.ICR5..H.HDP 5fa0: 53 02 00 4e 0d 4d 41 50 56 02 08 5f 50 53 43 00 S..N.MAPV.._PSC. 5fb0: 14 0c 5f 50 53 30 00 70 00 5f 50 53 43 14 12 5f .._PS0.p._PSC.._ 5fc0: 50 53 33 00 70 00 48 44 50 53 70 00 5f 50 53 43 PS3.p.HDPSp._PSC 5fd0: 5b 82 4d 08 50 52 54 30 08 5f 41 44 52 0b ff ff [.M.PRT0._ADR... 5fe0: 08 44 49 50 30 00 08 48 44 54 46 11 11 0a 0e 02 .DIP0..HDTF..... 5ff0: 00 00 00 00 a0 ef 00 00 00 00 00 a0 f5 08 48 50 ..............HP 6000: 54 46 11 18 0a 15 02 00 00 00 00 a0 ef 00 00 00 TF.............. 6010: 00 00 a0 f5 10 03 00 00 00 a0 ef 14 2c 5f 53 44 ............,_SD 6020: 44 01 a0 25 93 87 68 0b 00 02 8b 68 0a 9c 57 37 D..%..h....h..W7 6030: 38 30 a0 15 7b 57 37 38 30 0a 08 00 70 01 44 49 80..{W780...p.DI 6040: 50 30 70 01 44 50 50 30 14 16 5f 47 54 46 00 a0 P0p.DPP0.._GTF.. 6050: 0a 44 49 50 30 a4 48 50 54 46 a4 48 44 54 46 5b .DIP0.HPTF.HDTF[ 6060: 82 4f 08 50 52 54 31 08 5f 41 44 52 0c ff ff 01 .O.PRT1._ADR.... 6070: 00 08 44 49 50 31 00 08 48 44 54 46 11 11 0a 0e ..DIP1..HDTF.... 6080: 02 00 00 00 00 a0 ef 00 00 00 00 00 a0 f5 08 48 ...............H 6090: 50 54 46 11 18 0a 15 02 00 00 00 00 a0 ef 00 00 PTF............. 60a0: 00 00 00 a0 f5 10 03 00 00 00 a0 ef 14 2c 5f 53 .............,_S 60b0: 44 44 01 a0 25 93 87 68 0b 00 02 8b 68 0a 9c 57 DD..%..h....h..W 60c0: 37 38 30 a0 15 7b 57 37 38 30 0a 08 00 70 01 44 780..{W780...p.D 60d0: 49 50 31 70 01 44 50 50 31 14 16 5f 47 54 46 00 IP1p.DPP1.._GTF. 60e0: a0 0a 44 49 50 31 a4 48 50 54 46 a4 48 44 54 46 ..DIP1.HPTF.HDTF 60f0: 5b 82 48 09 50 52 54 32 08 5f 41 44 52 0c ff ff [.H.PRT2._ADR... 6100: 02 00 14 08 5f 52 4d 56 00 a4 01 08 44 49 50 32 ...._RMV....DIP2 6110: 00 08 48 44 54 46 11 11 0a 0e 02 00 00 00 00 a0 ..HDTF.......... 6120: ef 00 00 00 00 00 a0 f5 08 48 50 54 46 11 18 0a .........HPTF... 6130: 15 02 00 00 00 00 a0 ef 00 00 00 00 00 a0 f5 10 ................ 6140: 03 00 00 00 a0 ef 14 2c 5f 53 44 44 01 a0 25 93 .......,_SDD..%. 6150: 87 68 0b 00 02 8b 68 0a 9c 57 37 38 30 a0 15 7b .h....h..W780..{ 6160: 57 37 38 30 0a 08 00 70 01 44 49 50 32 70 01 44 W780...p.DIP2p.D 6170: 50 50 32 14 16 5f 47 54 46 00 a0 0a 44 49 50 32 PP2.._GTF...DIP2 6180: a4 48 50 54 46 a4 48 44 54 46 5b 82 42 34 50 52 .HPTF.HDTF[.B4PR 6190: 49 44 08 5f 41 44 52 00 08 42 50 49 30 00 08 42 ID._ADR..BPI0..B 61a0: 44 4d 30 00 08 42 50 49 31 00 08 42 44 4d 31 00 DM0..BPI1..BDM1. 61b0: 08 44 49 50 30 00 08 44 49 50 31 00 14 41 0a 5f .DIP0..DIP1..A._ 61c0: 47 54 4d 00 08 50 42 55 46 11 17 0a 14 00 00 00 GTM..PBUF....... 61d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 61e0: 00 08 47 54 4d 45 00 8a 50 42 55 46 00 47 54 50 ..GTME..PBUF.GTP 61f0: 30 8a 50 42 55 46 0a 04 47 54 44 30 8a 50 42 55 0.PBUF..GTD0.PBU 6200: 46 0a 08 47 54 50 31 8a 50 42 55 46 0a 0c 47 54 F..GTP1.PBUF..GT 6210: 44 31 8a 50 42 55 46 0a 10 47 54 4d 46 a0 35 92 D1.PBUF..GTMF.5. 6220: 47 54 4d 45 7d 47 54 4d 46 01 47 54 4d 46 70 0a GTME}GTMF.GTMFp. 6230: 78 47 54 50 30 70 0a 14 47 54 44 30 70 00 47 54 xGTP0p..GTD0p.GT 6240: 50 31 70 00 47 54 44 31 7d 47 54 4d 46 0a 10 47 P1p.GTD1}GTMF..G 6250: 54 4d 46 70 01 47 54 4d 45 a4 50 42 55 46 14 41 TMFp.GTME.PBUF.A 6260: 0e 5f 53 54 4d 03 8a 68 00 53 54 50 30 8a 68 0a ._STM..h.STP0.h. 6270: 04 53 54 44 30 8a 68 0a 08 53 54 50 31 8a 68 0a .STD0.h..STP1.h. 6280: 0c 53 54 44 31 8a 68 0a 10 53 54 4d 46 a0 48 05 .STD1.h..STMF.H. 6290: 93 87 69 0b 00 02 70 44 50 49 4f 53 54 50 30 7b ..i...pDPIOSTP0{ 62a0: 53 54 4d 46 0a 02 00 60 70 44 55 44 4d 53 54 44 STMF...`pDUDMSTD 62b0: 30 7b 53 54 4d 46 01 00 61 8b 69 0a 9c 4d 30 37 0{STMF..a.i..M07 62c0: 38 a0 0f 7b 4d 30 37 38 0a 08 00 70 01 44 49 50 8..{M078...p.DIP 62d0: 30 70 46 44 4d 41 60 61 42 44 4d 30 70 46 50 49 0pFDMA`aBDM0pFPI 62e0: 4f 60 42 50 49 30 a0 49 05 93 87 6a 0b 00 02 70 O`BPI0.I...j...p 62f0: 44 50 49 4f 53 54 50 31 7b 53 54 4d 46 0a 08 00 DPIOSTP1{STMF... 6300: 60 70 44 55 44 4d 53 54 44 31 7b 53 54 4d 46 0a `pDUDMSTD1{STMF. 6310: 04 00 61 8b 6a 0a 9c 53 30 37 38 a0 0f 7b 53 30 ..a.j..S078..{S0 6320: 37 38 0a 08 00 70 01 44 49 50 31 70 46 44 4d 41 78...p.DIP1pFDMA 6330: 60 61 42 44 4d 31 70 46 50 49 4f 60 42 50 49 31 `aBDM1pFPIO`BPI1 6340: 5b 82 45 0c 50 5f 44 30 08 5f 41 44 52 00 14 48 [.E.P_D0._ADR..H 6350: 0b 5f 47 54 46 00 08 48 44 54 46 11 1f 0a 1c 02 ._GTF..HDTF..... 6360: 00 00 00 00 a0 ef 00 00 00 00 00 a0 f5 03 00 00 ................ 6370: 00 00 a0 ef 03 00 00 00 00 a0 ef 8c 48 44 54 46 ............HDTF 6380: 0a 0f 48 44 4d 41 8c 48 44 54 46 0a 16 48 50 49 ..HDMA.HDTF..HPI 6390: 4f 08 48 50 54 46 11 26 0a 23 02 00 00 00 00 a0 O.HPTF.&.#...... 63a0: ef 00 00 00 00 00 a0 f5 03 00 00 00 00 a0 ef 03 ................ 63b0: 00 00 00 00 a0 ef 10 03 00 00 00 a0 ef 8c 48 50 ..............HP 63c0: 54 46 0a 0f 50 44 4d 41 8c 48 50 54 46 0a 16 50 TF..PDMA.HPTF..P 63d0: 50 49 4f a0 1c 44 49 50 30 70 42 44 4d 30 50 44 PIO..DIP0pBDM0PD 63e0: 4d 41 70 42 50 49 30 50 50 49 4f a4 48 50 54 46 MApBPI0PPIO.HPTF 63f0: 70 42 44 4d 30 48 44 4d 41 70 42 50 49 30 48 50 pBDM0HDMApBPI0HP 6400: 49 4f a4 48 44 54 46 5b 82 45 0c 50 5f 44 31 08 IO.HDTF[.E.P_D1. 6410: 5f 41 44 52 01 14 48 0b 5f 47 54 46 00 08 48 44 _ADR..H._GTF..HD 6420: 54 46 11 1f 0a 1c 02 00 00 00 00 b0 ef 00 00 00 TF.............. 6430: 00 00 b0 f5 03 00 00 00 00 b0 ef 03 00 00 00 00 ................ 6440: b0 ef 8c 48 44 54 46 0a 0f 48 44 4d 41 8c 48 44 ...HDTF..HDMA.HD 6450: 54 46 0a 16 48 50 49 4f 08 48 50 54 46 11 26 0a TF..HPIO.HPTF.&. 6460: 23 02 00 00 00 00 b0 ef 00 00 00 00 00 b0 f5 03 #............... 6470: 00 00 00 00 b0 ef 03 00 00 00 00 b0 ef 10 03 00 ................ 6480: 00 00 b0 ef 8c 48 50 54 46 0a 0f 50 44 4d 41 8c .....HPTF..PDMA. 6490: 48 50 54 46 0a 16 50 50 49 4f a0 1c 44 49 50 31 HPTF..PPIO..DIP1 64a0: 70 42 44 4d 31 50 44 4d 41 70 42 50 49 31 50 50 pBDM1PDMApBPI1PP 64b0: 49 4f a4 48 50 54 46 70 42 44 4d 31 48 44 4d 41 IO.HPTFpBDM1HDMA 64c0: 70 42 50 49 31 48 50 49 4f a4 48 44 54 46 5b 82 pBPI1HPIO.HDTF[. 64d0: 42 34 53 45 43 44 08 5f 41 44 52 01 08 42 50 49 B4SECD._ADR..BPI 64e0: 30 00 08 42 44 4d 30 00 08 42 50 49 31 00 08 42 0..BDM0..BPI1..B 64f0: 44 4d 31 00 08 44 49 50 30 00 08 44 49 50 31 00 DM1..DIP0..DIP1. 6500: 14 41 0a 5f 47 54 4d 00 08 53 42 55 46 11 17 0a .A._GTM..SBUF... 6510: 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 6520: 00 00 00 00 00 08 47 54 4d 45 00 8a 53 42 55 46 ......GTME..SBUF 6530: 00 47 54 50 30 8a 53 42 55 46 0a 04 47 54 44 30 .GTP0.SBUF..GTD0 6540: 8a 53 42 55 46 0a 08 47 54 50 31 8a 53 42 55 46 .SBUF..GTP1.SBUF 6550: 0a 0c 47 54 44 31 8a 53 42 55 46 0a 10 47 54 4d ..GTD1.SBUF..GTM 6560: 46 a0 35 92 47 54 4d 45 7d 47 54 4d 46 01 47 54 F.5.GTME}GTMF.GT 6570: 4d 46 70 0a 78 47 54 50 30 70 0a 14 47 54 44 30 MFp.xGTP0p..GTD0 6580: 70 00 47 54 50 31 70 00 47 54 44 31 7d 47 54 4d p.GTP1p.GTD1}GTM 6590: 46 0a 10 47 54 4d 46 70 01 47 54 4d 45 a4 53 42 F..GTMFp.GTME.SB 65a0: 55 46 14 41 0e 5f 53 54 4d 03 8a 68 00 53 54 50 UF.A._STM..h.STP 65b0: 30 8a 68 0a 04 53 54 44 30 8a 68 0a 08 53 54 50 0.h..STD0.h..STP 65c0: 31 8a 68 0a 0c 53 54 44 31 8a 68 0a 10 53 54 4d 1.h..STD1.h..STM 65d0: 46 a0 48 05 93 87 69 0b 00 02 70 44 50 49 4f 53 F.H...i...pDPIOS 65e0: 54 50 30 7b 53 54 4d 46 0a 02 00 60 70 44 55 44 TP0{STMF...`pDUD 65f0: 4d 53 54 44 30 7b 53 54 4d 46 01 00 61 8b 69 0a MSTD0{STMF..a.i. 6600: 9c 4d 30 37 38 a0 0f 7b 4d 30 37 38 0a 08 00 70 .M078..{M078...p 6610: 01 44 49 50 30 70 46 44 4d 41 60 61 42 44 4d 30 .DIP0pFDMA`aBDM0 6620: 70 46 50 49 4f 60 42 50 49 30 a0 49 05 93 87 6a pFPIO`BPI0.I...j 6630: 0b 00 02 70 44 50 49 4f 53 54 50 31 7b 53 54 4d ...pDPIOSTP1{STM 6640: 46 0a 08 00 60 70 44 55 44 4d 53 54 44 31 7b 53 F...`pDUDMSTD1{S 6650: 54 4d 46 0a 04 00 61 8b 6a 0a 9c 53 30 37 38 a0 TMF...a.j..S078. 6660: 0f 7b 53 30 37 38 0a 08 00 70 01 44 49 50 31 70 .{S078...p.DIP1p 6670: 46 44 4d 41 60 61 42 44 4d 31 70 46 50 49 4f 60 FDMA`aBDM1pFPIO` 6680: 42 50 49 31 5b 82 45 0c 53 5f 44 30 08 5f 41 44 BPI1[.E.S_D0._AD 6690: 52 00 14 48 0b 5f 47 54 46 00 08 48 44 54 46 11 R..H._GTF..HDTF. 66a0: 1f 0a 1c 02 00 00 00 00 a0 ef 00 00 00 00 00 a0 ................ 66b0: f5 03 00 00 00 00 a0 ef 03 00 00 00 00 a0 ef 8c ................ 66c0: 48 44 54 46 0a 0f 48 44 4d 41 8c 48 44 54 46 0a HDTF..HDMA.HDTF. 66d0: 16 48 50 49 4f 08 48 50 54 46 11 26 0a 23 02 00 .HPIO.HPTF.&.#.. 66e0: 00 00 00 a0 ef 00 00 00 00 00 a0 f5 03 00 00 00 ................ 66f0: 00 a0 ef 03 00 00 00 00 a0 ef 10 03 00 00 00 a0 ................ 6700: ef 8c 48 50 54 46 0a 0f 50 44 4d 41 8c 48 50 54 ..HPTF..PDMA.HPT 6710: 46 0a 16 50 50 49 4f a0 1c 44 49 50 30 70 42 44 F..PPIO..DIP0pBD 6720: 4d 30 50 44 4d 41 70 42 50 49 30 50 50 49 4f a4 M0PDMApBPI0PPIO. 6730: 48 50 54 46 70 42 44 4d 30 48 44 4d 41 70 42 50 HPTFpBDM0HDMApBP 6740: 49 30 48 50 49 4f a4 48 44 54 46 5b 82 45 0c 53 I0HPIO.HDTF[.E.S 6750: 5f 44 31 08 5f 41 44 52 01 14 48 0b 5f 47 54 46 _D1._ADR..H._GTF 6760: 00 08 48 44 54 46 11 1f 0a 1c 02 00 00 00 00 b0 ..HDTF.......... 6770: ef 00 00 00 00 00 b0 f5 03 00 00 00 00 b0 ef 03 ................ 6780: 00 00 00 00 b0 ef 8c 48 44 54 46 0a 0f 48 44 4d .......HDTF..HDM 6790: 41 8c 48 44 54 46 0a 16 48 50 49 4f 08 48 50 54 A.HDTF..HPIO.HPT 67a0: 46 11 26 0a 23 02 00 00 00 00 b0 ef 00 00 00 00 F.&.#........... 67b0: 00 b0 f5 03 00 00 00 00 b0 ef 03 00 00 00 00 b0 ................ 67c0: ef 10 03 00 00 00 b0 ef 8c 48 50 54 46 0a 0f 50 .........HPTF..P 67d0: 44 4d 41 8c 48 50 54 46 0a 16 50 50 49 4f a0 1c DMA.HPTF..PPIO.. 67e0: 44 49 50 31 70 42 44 4d 31 50 44 4d 41 70 42 50 DIP1pBDM1PDMApBP 67f0: 49 31 50 50 49 4f a4 48 50 54 46 70 42 44 4d 31 I1PPIO.HPTFpBDM1 6800: 48 44 4d 41 70 42 50 49 31 48 50 49 4f a4 48 44 HDMApBPI1HPIO.HD 6810: 54 46 5b 82 42 0b 53 41 54 31 08 5f 41 44 52 0c TF[.B.SAT1._ADR. 6820: 05 00 1f 00 5b 80 53 41 43 53 02 0a 40 0a c0 5b ....[.SACS..@..[ 6830: 81 4f 06 53 41 43 53 03 50 52 49 54 10 53 45 43 .O.SACS.PRIT.SEC 6840: 54 10 50 53 49 54 04 53 53 49 54 04 00 18 53 59 T.PSIT.SSIT...SY 6850: 4e 43 04 00 0c 53 44 54 30 02 00 02 53 44 54 31 NC...SDT0...SDT1 6860: 02 00 02 53 44 54 32 02 00 02 53 44 54 33 02 00 ...SDT2...SDT3.. 6870: 42 04 49 43 52 30 04 49 43 52 31 04 49 43 52 32 B.ICR0.ICR1.ICR2 6880: 04 49 43 52 33 04 49 43 52 34 04 49 43 52 35 04 .ICR3.ICR4.ICR5. 6890: 00 48 0e 48 44 50 53 02 00 4e 0d 4d 41 50 56 02 .H.HDPS..N.MAPV. 68a0: 08 5f 50 53 43 00 14 0c 5f 50 53 30 00 70 00 5f ._PSC..._PS0.p._ 68b0: 50 53 43 14 12 5f 50 53 33 00 70 00 48 44 50 53 PSC.._PS3.p.HDPS 68c0: 70 00 5f 50 53 43 5b 82 44 47 53 42 55 53 08 5f p._PSC[.DGSBUS._ 68d0: 41 44 52 0c 03 00 1f 00 5b 80 53 4d 42 50 02 0a ADR.....[.SMBP.. 68e0: 40 0a c0 5b 81 0d 53 4d 42 50 03 00 02 49 32 43 @..[..SMBP...I2C 68f0: 45 01 5b 80 53 4d 50 42 02 0a 20 0a 04 5b 81 0d E.[.SMPB.. ..[.. 6900: 53 4d 50 42 03 00 05 53 42 41 52 0b 5b 80 53 4d SMPB...SBAR.[.SM 6910: 42 49 01 79 53 42 41 52 0a 05 00 0a 10 5b 81 3a BI.ySBAR.....[.: 6920: 53 4d 42 49 01 48 53 54 53 08 00 08 48 43 4f 4e SMBI.HSTS...HCON 6930: 08 48 43 4f 4d 08 54 58 53 41 08 44 41 54 30 08 .HCOM.TXSA.DAT0. 6940: 44 41 54 31 08 48 42 44 52 08 50 45 43 52 08 52 DAT1.HBDR.PECR.R 6950: 58 53 41 08 53 44 41 54 10 14 44 04 53 53 58 42 XSA.SDAT..D.SSXB 6960: 0a a0 07 53 54 52 54 a4 00 70 00 49 32 43 45 70 ...STRT..p.I2CEp 6970: 0a bf 48 53 54 53 70 68 54 58 53 41 70 69 48 43 ..HSTSphTXSApiHC 6980: 4f 4d 70 0a 48 48 43 4f 4e a0 12 43 4f 4d 50 7d OMp.HHCON..COMP} 6990: 48 53 54 53 0a ff 48 53 54 53 a4 01 a4 00 14 48 HSTS..HSTS.....H 69a0: 04 53 52 58 42 09 a0 09 53 54 52 54 a4 0b ff ff .SRXB...STRT.... 69b0: 70 00 49 32 43 45 70 0a bf 48 53 54 53 70 7d 68 p.I2CEp..HSTSp}h 69c0: 01 00 54 58 53 41 70 0a 44 48 43 4f 4e a0 15 43 ..TXSAp.DHCON..C 69d0: 4f 4d 50 7d 48 53 54 53 0a ff 48 53 54 53 a4 44 OMP}HSTS..HSTS.D 69e0: 41 54 30 a4 0b ff ff 14 4a 04 53 57 52 42 0b a0 AT0.....J.SWRB.. 69f0: 07 53 54 52 54 a4 00 70 00 49 32 43 45 70 0a bf .STRT..p.I2CEp.. 6a00: 48 53 54 53 70 68 54 58 53 41 70 69 48 43 4f 4d HSTSphTXSApiHCOM 6a10: 70 6a 44 41 54 30 70 0a 48 48 43 4f 4e a0 12 43 pjDAT0p.HHCON..C 6a20: 4f 4d 50 7d 48 53 54 53 0a ff 48 53 54 53 a4 01 OMP}HSTS..HSTS.. 6a30: a4 00 14 4e 04 53 52 44 42 0a a0 09 53 54 52 54 ...N.SRDB...STRT 6a40: a4 0b ff ff 70 00 49 32 43 45 70 0a bf 48 53 54 ....p.I2CEp..HST 6a50: 53 70 7d 68 01 00 54 58 53 41 70 69 48 43 4f 4d Sp}h..TXSApiHCOM 6a60: 70 0a 48 48 43 4f 4e a0 15 43 4f 4d 50 7d 48 53 p.HHCON..COMP}HS 6a70: 54 53 0a ff 48 53 54 53 a4 44 41 54 30 a4 0b ff TS..HSTS.DAT0... 6a80: ff 14 48 05 53 57 52 57 0b a0 07 53 54 52 54 a4 ..H.SWRW...STRT. 6a90: 00 70 00 49 32 43 45 70 0a bf 48 53 54 53 70 68 .p.I2CEp..HSTSph 6aa0: 54 58 53 41 70 69 48 43 4f 4d 7b 6a 0a ff 44 41 TXSApiHCOM{j..DA 6ab0: 54 31 7b 7a 6a 0a 08 00 0a ff 44 41 54 30 70 0a T1{zj.....DAT0p. 6ac0: 4c 48 43 4f 4e a0 12 43 4f 4d 50 7d 48 53 54 53 LHCON..COMP}HSTS 6ad0: 0a ff 48 53 54 53 a4 01 a4 00 14 4a 05 53 52 44 ..HSTS.....J.SRD 6ae0: 57 0a a0 09 53 54 52 54 a4 0b ff ff 70 00 49 32 W...STRT....p.I2 6af0: 43 45 70 0a bf 48 53 54 53 70 7d 68 01 00 54 58 CEp..HSTSp}h..TX 6b00: 53 41 70 69 48 43 4f 4d 70 0a 4c 48 43 4f 4e a0 SApiHCOMp.LHCON. 6b10: 1f 43 4f 4d 50 7d 48 53 54 53 0a ff 48 53 54 53 .COMP}HSTS..HSTS 6b20: a4 7d 79 44 41 54 30 0a 08 00 44 41 54 31 00 a4 .}yDAT0...DAT1.. 6b30: 0c ff ff ff ff 14 4a 09 53 42 4c 57 0c a0 07 53 ......J.SBLW...S 6b40: 54 52 54 a4 00 70 6b 49 32 43 45 70 0a bf 48 53 TRT..pkI2CEp..HS 6b50: 54 53 70 68 54 58 53 41 70 69 48 43 4f 4d 70 87 TSphTXSApiHCOMp. 6b60: 6a 44 41 54 30 70 00 61 70 83 88 6a 00 00 48 42 jDAT0p.ap..j..HB 6b70: 44 52 70 0a 54 48 43 4f 4e a2 41 04 94 87 6a 61 DRp.THCON.A...ja 6b80: 70 0b a0 0f 60 a2 12 90 92 7b 48 53 54 53 0a 80 p...`....{HSTS.. 6b90: 00 60 76 60 5b 21 0a 32 a0 09 92 60 4b 49 4c 4c .`v`[!.2...`KILL 6ba0: a4 00 70 0a 80 48 53 54 53 75 61 a0 0f 94 87 6a ..p..HSTSua....j 6bb0: 61 70 83 88 6a 61 00 48 42 44 52 a0 12 43 4f 4d ap..ja.HBDR..COM 6bc0: 50 7d 48 53 54 53 0a ff 48 53 54 53 a4 01 a4 00 P}HSTS..HSTS.... 6bd0: 14 40 0d 53 42 4c 52 0b 08 54 42 55 46 11 04 0b .@.SBLR..TBUF... 6be0: 00 01 a0 07 53 54 52 54 a4 00 70 6a 49 32 43 45 ....STRT..pjI2CE 6bf0: 70 0a bf 48 53 54 53 70 7d 68 01 00 54 58 53 41 p..HSTSp}h..TXSA 6c00: 70 69 48 43 4f 4d 70 0a 54 48 43 4f 4e 70 0b a0 piHCOMp.THCONp.. 6c10: 0f 60 a2 12 90 92 7b 48 53 54 53 0a 80 00 60 76 .`....{HSTS...`v 6c20: 60 5b 21 0a 32 a0 09 92 60 4b 49 4c 4c a4 00 70 `[!.2...`KILL..p 6c30: 44 41 54 30 88 54 42 55 46 00 00 70 0a 80 48 53 DAT0.TBUF..p..HS 6c40: 54 53 70 01 61 a2 43 04 95 61 83 88 54 42 55 46 TSp.a.C..a..TBUF 6c50: 00 00 70 0b a0 0f 60 a2 12 90 92 7b 48 53 54 53 ..p...`....{HSTS 6c60: 0a 80 00 60 76 60 5b 21 0a 32 a0 09 92 60 4b 49 ...`v`[!.2...`KI 6c70: 4c 4c a4 00 70 48 42 44 52 88 54 42 55 46 61 00 LL..pHBDR.TBUFa. 6c80: 70 0a 80 48 53 54 53 75 61 a0 15 43 4f 4d 50 7d p..HSTSua..COMP} 6c90: 48 53 54 53 0a ff 48 53 54 53 a4 54 42 55 46 a4 HSTS..HSTS.TBUF. 6ca0: 00 14 4f 04 53 54 52 54 08 70 0a c8 60 a2 1d 60 ..O.STRT.p..`..` 6cb0: a0 15 7b 48 53 54 53 0a 40 00 76 60 5b 22 01 a0 ..{HSTS.@.v`[".. 6cc0: 06 93 60 00 a4 01 a1 04 70 00 60 70 0b a0 0f 60 ..`.....p.`p...` 6cd0: a2 1e 60 a0 17 7b 48 53 54 53 01 00 76 60 5b 21 ..`..{HSTS..v`[! 6ce0: 0a 32 a0 08 93 60 00 4b 49 4c 4c a1 03 a4 00 a4 .2...`.KILL..... 6cf0: 01 14 2d 43 4f 4d 50 08 70 0b a0 0f 60 a2 1f 60 ..-COMP.p...`..` 6d00: a0 0b 7b 48 53 54 53 0a 02 00 a4 01 a1 10 76 60 ..{HSTS.......v` 6d10: 5b 21 0a 32 a0 08 93 60 00 4b 49 4c 4c a4 00 14 [!.2...`.KILL... 6d20: 1c 4b 49 4c 4c 08 7d 48 43 4f 4e 0a 02 48 43 4f .KILL.}HCON..HCO 6d30: 4e 7d 48 53 54 53 0a ff 48 53 54 53 10 8b 83 01 N}HSTS..HSTS.... 6d40: 2e 5f 53 42 5f 50 43 49 30 5b 82 44 05 50 45 47 ._SB_PCI0[.D.PEG 6d50: 30 08 5f 41 44 52 0c 00 00 01 00 14 0f 5f 50 52 0._ADR......._PR 6d60: 57 00 a4 47 50 52 57 0a 09 0a 04 14 16 5f 50 52 W..GPRW......_PR 6d70: 54 00 a0 0a 50 49 43 4d a4 41 52 30 32 a4 50 52 T...PICM.AR02.PR 6d80: 30 32 5b 82 1b 50 45 47 50 08 5f 41 44 52 00 14 02[..PEGP._ADR.. 6d90: 0f 5f 50 52 57 00 a4 47 50 52 57 0a 09 0a 04 5b ._PRW..GPRW....[ 6da0: 82 36 50 45 47 31 08 5f 41 44 52 0c 01 00 01 00 .6PEG1._ADR..... 6db0: 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 09 0a 04 .._PRW..GPRW.... 6dc0: 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 41 52 .._PRT...PICM.AR 6dd0: 30 41 a4 50 52 30 41 5b 82 36 50 45 47 32 08 5f 0A.PR0A[.6PEG2._ 6de0: 41 44 52 0c 02 00 01 00 14 0f 5f 50 52 57 00 a4 ADR......._PRW.. 6df0: 47 50 52 57 0a 09 0a 04 14 16 5f 50 52 54 00 a0 GPRW......_PRT.. 6e00: 0a 50 49 43 4d a4 41 52 30 42 a4 50 52 30 42 5b .PICM.AR0B.PR0B[ 6e10: 82 36 50 45 47 33 08 5f 41 44 52 0c 00 00 06 00 .6PEG3._ADR..... 6e20: 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 09 0a 04 .._PRW..GPRW.... 6e30: 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 41 52 .._PRT...PICM.AR 6e40: 30 43 a4 50 52 30 43 5b 82 0f 42 30 44 34 08 5f 0C.PR0C[..B0D4._ 6e50: 41 44 52 0c 00 00 04 00 5b 82 8e 71 01 47 46 58 ADR.....[..q.GFX 6e60: 30 08 5f 41 44 52 0c 00 00 02 00 14 26 5f 44 4f 0._ADR......&_DO 6e70: 53 01 70 7b 68 0a 07 00 44 53 45 4e a0 15 93 7b S.p{h...DSEN...{ 6e80: 68 0a 03 00 00 a0 0c 5b 12 48 44 4f 53 00 48 44 h......[.HDOS.HD 6e90: 4f 53 14 46 51 5f 44 4f 44 00 a0 0c 5b 12 49 44 OS.FQ_DOD...[.ID 6ea0: 41 42 00 49 44 41 42 a1 48 0b 70 00 4e 44 49 44 AB.IDAB.H.p.NDID 6eb0: a0 15 92 93 44 49 44 4c 00 70 53 44 44 4c 44 49 ....DIDL.pSDDLDI 6ec0: 44 4c 44 49 44 31 a0 15 92 93 44 44 4c 32 00 70 DLDID1....DDL2.p 6ed0: 53 44 44 4c 44 44 4c 32 44 49 44 32 a0 15 92 93 SDDLDDL2DID2.... 6ee0: 44 44 4c 33 00 70 53 44 44 4c 44 44 4c 33 44 49 DDL3.pSDDLDDL3DI 6ef0: 44 33 a0 15 92 93 44 44 4c 34 00 70 53 44 44 4c D3....DDL4.pSDDL 6f00: 44 44 4c 34 44 49 44 34 a0 15 92 93 44 44 4c 35 DDL4DID4....DDL5 6f10: 00 70 53 44 44 4c 44 44 4c 35 44 49 44 35 a0 15 .pSDDLDDL5DID5.. 6f20: 92 93 44 44 4c 36 00 70 53 44 44 4c 44 44 4c 36 ..DDL6.pSDDLDDL6 6f30: 44 49 44 36 a0 15 92 93 44 44 4c 37 00 70 53 44 DID6....DDL7.pSD 6f40: 44 4c 44 44 4c 37 44 49 44 37 a0 15 92 93 44 44 DLDDL7DID7....DD 6f50: 4c 38 00 70 53 44 44 4c 44 44 4c 38 44 49 44 38 L8.pSDDLDDL8DID8 6f60: a0 2c 93 4e 44 49 44 01 08 54 4d 50 31 12 07 01 .,.NDID..TMP1... 6f70: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 6f80: 00 88 54 4d 50 31 00 00 a4 54 4d 50 31 a0 46 04 ..TMP1...TMP1.F. 6f90: 93 4e 44 49 44 0a 02 08 54 4d 50 32 12 0c 02 0c .NDID...TMP2.... 6fa0: ff ff ff ff 0c ff ff ff ff 70 7d 0c 00 00 01 00 .........p}..... 6fb0: 44 49 44 31 00 88 54 4d 50 32 00 00 70 7d 0c 00 DID1..TMP2..p}.. 6fc0: 00 01 00 44 49 44 32 00 88 54 4d 50 32 01 00 a4 ...DID2..TMP2... 6fd0: 54 4d 50 32 a0 4f 05 93 4e 44 49 44 0a 03 08 54 TMP2.O..NDID...T 6fe0: 4d 50 33 12 11 03 0c ff ff ff ff 0c ff ff ff ff MP3............. 6ff0: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 7000: 00 88 54 4d 50 33 00 00 70 7d 0c 00 00 01 00 44 ..TMP3..p}.....D 7010: 49 44 32 00 88 54 4d 50 33 01 00 70 7d 0c 00 00 ID2..TMP3..p}... 7020: 01 00 44 49 44 33 00 88 54 4d 50 33 0a 02 00 a4 ..DID3..TMP3.... 7030: 54 4d 50 33 a0 48 07 93 4e 44 49 44 0a 04 08 54 TMP3.H..NDID...T 7040: 4d 50 34 12 16 04 0c ff ff ff ff 0c ff ff ff ff MP4............. 7050: 0c ff ff ff ff 0c ff ff ff ff 70 7d 0c 00 00 01 ..........p}.... 7060: 00 44 49 44 31 00 88 54 4d 50 34 00 00 70 7d 0c .DID1..TMP4..p}. 7070: 00 00 01 00 44 49 44 32 00 88 54 4d 50 34 01 00 ....DID2..TMP4.. 7080: 70 7d 0c 00 00 01 00 44 49 44 33 00 88 54 4d 50 p}.....DID3..TMP 7090: 34 0a 02 00 70 7d 0c 00 00 01 00 44 49 44 34 00 4...p}.....DID4. 70a0: 88 54 4d 50 34 0a 03 00 a4 54 4d 50 34 a0 41 09 .TMP4....TMP4.A. 70b0: 93 4e 44 49 44 0a 05 08 54 4d 50 35 12 1b 05 0c .NDID...TMP5.... 70c0: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 70d0: ff ff ff 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 ........p}.....D 70e0: 49 44 31 00 88 54 4d 50 35 00 00 70 7d 0c 00 00 ID1..TMP5..p}... 70f0: 01 00 44 49 44 32 00 88 54 4d 50 35 01 00 70 7d ..DID2..TMP5..p} 7100: 0c 00 00 01 00 44 49 44 33 00 88 54 4d 50 35 0a .....DID3..TMP5. 7110: 02 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 ..p}.....DID4..T 7120: 4d 50 35 0a 03 00 70 7d 0c 00 00 01 00 44 49 44 MP5...p}.....DID 7130: 35 00 88 54 4d 50 35 0a 04 00 a4 54 4d 50 35 a0 5..TMP5....TMP5. 7140: 4a 0a 93 4e 44 49 44 0a 06 08 54 4d 50 36 12 20 J..NDID...TMP6. 7150: 06 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 7160: 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 70 ...............p 7170: 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 36 }.....DID1..TMP6 7180: 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 54 ..p}.....DID2..T 7190: 4d 50 36 01 00 70 7d 0c 00 00 01 00 44 49 44 33 MP6..p}.....DID3 71a0: 00 88 54 4d 50 36 0a 02 00 70 7d 0c 00 00 01 00 ..TMP6...p}..... 71b0: 44 49 44 34 00 88 54 4d 50 36 0a 03 00 70 7d 0c DID4..TMP6...p}. 71c0: 00 00 01 00 44 49 44 35 00 88 54 4d 50 36 0a 04 ....DID5..TMP6.. 71d0: 00 70 7d 0c 00 00 01 00 44 49 44 36 00 88 54 4d .p}.....DID6..TM 71e0: 50 36 0a 05 00 a4 54 4d 50 36 a0 43 0c 93 4e 44 P6....TMP6.C..ND 71f0: 49 44 0a 07 08 54 4d 50 37 12 25 07 0c ff ff ff ID...TMP7.%..... 7200: ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 7210: 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 70 ...............p 7220: 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 37 }.....DID1..TMP7 7230: 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 54 ..p}.....DID2..T 7240: 4d 50 37 01 00 70 7d 0c 00 00 01 00 44 49 44 33 MP7..p}.....DID3 7250: 00 88 54 4d 50 37 0a 02 00 70 7d 0c 00 00 01 00 ..TMP7...p}..... 7260: 44 49 44 34 00 88 54 4d 50 37 0a 03 00 70 7d 0c DID4..TMP7...p}. 7270: 00 00 01 00 44 49 44 35 00 88 54 4d 50 37 0a 04 ....DID5..TMP7.. 7280: 00 70 7d 0c 00 00 01 00 44 49 44 36 00 88 54 4d .p}.....DID6..TM 7290: 50 37 0a 05 00 70 7d 0c 00 00 01 00 44 49 44 37 P7...p}.....DID7 72a0: 00 88 54 4d 50 37 0a 06 00 a4 54 4d 50 37 a0 4c ..TMP7....TMP7.L 72b0: 0d 93 4e 44 49 44 0a 08 08 54 4d 50 38 12 2a 08 ..NDID...TMP8.*. 72c0: 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ................ 72d0: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 72e0: ff ff ff 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 ........p}.....D 72f0: 49 44 31 00 88 54 4d 50 38 00 00 70 7d 0c 00 00 ID1..TMP8..p}... 7300: 01 00 44 49 44 32 00 88 54 4d 50 38 01 00 70 7d ..DID2..TMP8..p} 7310: 0c 00 00 01 00 44 49 44 33 00 88 54 4d 50 38 0a .....DID3..TMP8. 7320: 02 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 ..p}.....DID4..T 7330: 4d 50 38 0a 03 00 70 7d 0c 00 00 01 00 44 49 44 MP8...p}.....DID 7340: 35 00 88 54 4d 50 38 0a 04 00 70 7d 0c 00 00 01 5..TMP8...p}.... 7350: 00 44 49 44 36 00 88 54 4d 50 38 0a 05 00 70 7d .DID6..TMP8...p} 7360: 0c 00 00 01 00 44 49 44 37 00 88 54 4d 50 38 0a .....DID7..TMP8. 7370: 06 00 70 7d 0c 00 00 01 00 44 49 44 38 00 88 54 ..p}.....DID8..T 7380: 4d 50 38 0a 07 00 a4 54 4d 50 38 a0 16 93 4e 44 MP8....TMP8...ND 7390: 49 44 0a 09 a0 0d 5b 12 48 57 49 44 00 a4 48 57 ID....[.HWID..HW 73a0: 49 44 a4 12 05 01 0b 00 04 5b 82 4c 07 44 44 30 ID.......[.L.DD0 73b0: 31 14 1c 5f 41 44 52 08 a0 09 93 44 49 44 31 00 1.._ADR....DID1. 73c0: a4 01 a1 0b a4 7b 0b ff ff 44 49 44 31 00 14 0f .....{...DID1... 73d0: 5f 44 43 53 00 a4 43 44 44 53 44 49 44 31 14 28 _DCS..CDDSDID1.( 73e0: 5f 44 47 53 00 a0 18 90 93 7b 53 47 4d 44 0a 7f _DGS.....{SGMD.. 73f0: 00 01 5b 12 53 4e 58 44 00 a4 4e 58 44 31 a4 4e ..[.SNXD..NXD1.N 7400: 44 44 53 44 49 44 31 14 1f 5f 44 53 53 01 a0 18 DDSDID1.._DSS... 7410: 93 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e .{h...........pN 7420: 53 54 45 43 53 54 45 5b 82 44 1f 44 44 30 32 14 STECSTE[.D.DD02. 7430: 1d 5f 41 44 52 08 a0 0a 93 44 49 44 32 00 a4 0a ._ADR....DID2... 7440: 02 a1 0b a4 7b 0b ff ff 44 49 44 32 00 14 19 5f ....{...DID2..._ 7450: 44 43 53 00 a0 09 93 4c 49 44 53 00 a4 00 a4 43 DCS....LIDS....C 7460: 44 44 53 44 49 44 32 14 28 5f 44 47 53 00 a0 18 DDSDID2.(_DGS... 7470: 90 93 7b 53 47 4d 44 0a 7f 00 01 5b 12 53 4e 58 ..{SGMD....[.SNX 7480: 44 00 a4 4e 58 44 32 a4 4e 44 44 53 44 49 44 32 D..NXD2.NDDSDID2 7490: 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 .._DSS....{h.... 74a0: c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 .......pNSTECSTE 74b0: 14 4b 10 5f 42 43 4c 00 a0 4b 0d 93 4f 53 59 53 .K._BCL..K..OSYS 74c0: 0b dc 07 a4 12 4f 0c 67 0a 64 0a 64 00 01 0a 02 .....O.g.d.d.... 74d0: 0a 03 0a 04 0a 05 0a 06 0a 07 0a 08 0a 09 0a 0a ................ 74e0: 0a 0b 0a 0c 0a 0d 0a 0e 0a 0f 0a 10 0a 11 0a 12 ................ 74f0: 0a 13 0a 14 0a 15 0a 16 0a 17 0a 18 0a 19 0a 1a ................ 7500: 0a 1b 0a 1c 0a 1d 0a 1e 0a 1f 0a 20 0a 21 0a 22 ........... .!." 7510: 0a 23 0a 24 0a 25 0a 26 0a 27 0a 28 0a 29 0a 2a .#.$.%.&.'.(.).* 7520: 0a 2b 0a 2c 0a 2d 0a 2e 0a 2f 0a 30 0a 31 0a 32 .+.,.-.../.0.1.2 7530: 0a 33 0a 34 0a 35 0a 36 0a 37 0a 38 0a 39 0a 3a .3.4.5.6.7.8.9.: 7540: 0a 3b 0a 3c 0a 3d 0a 3e 0a 3f 0a 40 0a 41 0a 42 .;.<.=.>.?.@.A.B 7550: 0a 43 0a 44 0a 45 0a 46 0a 47 0a 48 0a 49 0a 4a .C.D.E.F.G.H.I.J 7560: 0a 4b 0a 4c 0a 4d 0a 4e 0a 4f 0a 50 0a 51 0a 52 .K.L.M.N.O.P.Q.R 7570: 0a 53 0a 54 0a 55 0a 56 0a 57 0a 58 0a 59 0a 5a .S.T.U.V.W.X.Y.Z 7580: 0a 5b 0a 5c 0a 5d 0a 5e 0a 5f 0a 60 0a 61 0a 62 .[.\.].^._.`.a.b 7590: 0a 63 0a 64 a4 12 26 12 0a 64 0a 23 0a 05 0a 0a .c.d..&..d.#.... 75a0: 0a 14 0a 19 0a 1e 0a 23 0a 28 0a 2d 0a 32 0a 37 .......#.(.-.2.7 75b0: 0a 3c 0a 41 0a 46 0a 50 0a 5a 0a 64 14 34 5f 42 .<.A.F.P.Z.d.4_B 75c0: 43 4d 01 a0 2d 90 92 95 68 00 92 94 68 0a 64 49 CM..-...h...h.dI 75d0: 42 43 4d 68 55 43 4d 53 0a 14 5e 5e 5e 2f 03 4c BCMhUCMS..^^^/.L 75e0: 50 43 42 45 43 5f 5f 42 4c 43 4c 70 68 42 52 54 PCBEC__BLCLphBRT 75f0: 4c 14 0b 5f 42 51 43 00 a4 42 52 54 4c 14 1f 5f L.._BQC..BRTL.._ 7600: 44 44 43 01 a0 09 93 68 01 a4 56 45 44 49 a1 0c DDC....h..VEDI.. 7610: a0 0a 93 68 0a 02 a4 56 45 44 49 a4 00 5b 82 4a ...h...VEDI..[.J 7620: 08 44 44 30 33 14 1d 5f 41 44 52 08 a0 0a 93 44 .DD03.._ADR....D 7630: 49 44 33 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 49 ID3.......{...DI 7640: 44 33 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 D3..._DCS....DID 7650: 33 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 33 3.......CDDSDID3 7660: 14 28 5f 44 47 53 00 a0 18 90 93 7b 53 47 4d 44 .(_DGS.....{SGMD 7670: 0a 7f 00 01 5b 12 53 4e 58 44 00 a4 4e 58 44 33 ....[.SNXD..NXD3 7680: a4 4e 44 44 53 44 49 44 33 14 1f 5f 44 53 53 01 .NDDSDID3.._DSS. 7690: a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 ...{h........... 76a0: 70 4e 53 54 45 43 53 54 45 5b 82 4a 08 44 44 30 pNSTECSTE[.J.DD0 76b0: 34 14 1d 5f 41 44 52 08 a0 0a 93 44 49 44 34 00 4.._ADR....DID4. 76c0: a4 0a 04 a1 0b a4 7b 0b ff ff 44 49 44 34 00 14 ......{...DID4.. 76d0: 1c 5f 44 43 53 00 a0 0a 93 44 49 44 34 00 a4 0a ._DCS....DID4... 76e0: 0b a1 0a a4 43 44 44 53 44 49 44 34 14 28 5f 44 ....CDDSDID4.(_D 76f0: 47 53 00 a0 18 90 93 7b 53 47 4d 44 0a 7f 00 01 GS.....{SGMD.... 7700: 5b 12 53 4e 58 44 00 a4 4e 58 44 34 a4 4e 44 44 [.SNXD..NXD4.NDD 7710: 53 44 49 44 34 14 1f 5f 44 53 53 01 a0 18 93 7b SDID4.._DSS....{ 7720: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 7730: 45 43 53 54 45 5b 82 4a 08 44 44 30 35 14 1d 5f ECSTE[.J.DD05.._ 7740: 41 44 52 08 a0 0a 93 44 49 44 35 00 a4 0a 05 a1 ADR....DID5..... 7750: 0b a4 7b 0b ff ff 44 49 44 35 00 14 1c 5f 44 43 ..{...DID5..._DC 7760: 53 00 a0 0a 93 44 49 44 35 00 a4 0a 0b a1 0a a4 S....DID5....... 7770: 43 44 44 53 44 49 44 35 14 28 5f 44 47 53 00 a0 CDDSDID5.(_DGS.. 7780: 18 90 93 7b 53 47 4d 44 0a 7f 00 01 5b 12 53 4e ...{SGMD....[.SN 7790: 58 44 00 a4 4e 58 44 35 a4 4e 44 44 53 44 49 44 XD..NXD5.NDDSDID 77a0: 35 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 5.._DSS....{h... 77b0: 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 ........pNSTECST 77c0: 45 5b 82 4a 08 44 44 30 36 14 1d 5f 41 44 52 08 E[.J.DD06.._ADR. 77d0: a0 0a 93 44 49 44 36 00 a4 0a 06 a1 0b a4 7b 0b ...DID6.......{. 77e0: ff ff 44 49 44 36 00 14 1c 5f 44 43 53 00 a0 0a ..DID6..._DCS... 77f0: 93 44 49 44 36 00 a4 0a 0b a1 0a a4 43 44 44 53 .DID6.......CDDS 7800: 44 49 44 36 14 28 5f 44 47 53 00 a0 18 90 93 7b DID6.(_DGS.....{ 7810: 53 47 4d 44 0a 7f 00 01 5b 12 53 4e 58 44 00 a4 SGMD....[.SNXD.. 7820: 4e 58 44 36 a4 4e 44 44 53 44 49 44 36 14 1f 5f NXD6.NDDSDID6.._ 7830: 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c DSS....{h....... 7840: 00 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 4a ....pNSTECSTE[.J 7850: 08 44 44 30 37 14 1d 5f 41 44 52 08 a0 0a 93 44 .DD07.._ADR....D 7860: 49 44 37 00 a4 0a 07 a1 0b a4 7b 0b ff ff 44 49 ID7.......{...DI 7870: 44 37 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 D7..._DCS....DID 7880: 37 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 37 7.......CDDSDID7 7890: 14 28 5f 44 47 53 00 a0 18 90 93 7b 53 47 4d 44 .(_DGS.....{SGMD 78a0: 0a 7f 00 01 5b 12 53 4e 58 44 00 a4 4e 58 44 37 ....[.SNXD..NXD7 78b0: a4 4e 44 44 53 44 49 44 37 14 1f 5f 44 53 53 01 .NDDSDID7.._DSS. 78c0: a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 ...{h........... 78d0: 70 4e 53 54 45 43 53 54 45 5b 82 4a 08 44 44 30 pNSTECSTE[.J.DD0 78e0: 38 14 1d 5f 41 44 52 08 a0 0a 93 44 49 44 38 00 8.._ADR....DID8. 78f0: a4 0a 08 a1 0b a4 7b 0b ff ff 44 49 44 38 00 14 ......{...DID8.. 7900: 1c 5f 44 43 53 00 a0 0a 93 44 49 44 38 00 a4 0a ._DCS....DID8... 7910: 0b a1 0a a4 43 44 44 53 44 49 44 38 14 28 5f 44 ....CDDSDID8.(_D 7920: 47 53 00 a0 18 90 93 7b 53 47 4d 44 0a 7f 00 01 GS.....{SGMD.... 7930: 5b 12 53 4e 58 44 00 a4 4e 58 44 38 a4 4e 44 44 [.SNXD..NXD8.NDD 7940: 53 44 49 44 38 14 1f 5f 44 53 53 01 a0 18 93 7b SDID8.._DSS....{ 7950: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 7960: 45 43 53 54 45 14 4e 06 53 44 44 4c 01 75 4e 44 ECSTE.N.SDDL.uND 7970: 49 44 70 7b 68 0b 0f 0f 00 60 7d 0c 00 00 00 80 IDp{h....`}..... 7980: 60 61 a0 09 93 44 49 44 4c 60 a4 61 a0 09 93 44 `a...DIDL`.a...D 7990: 44 4c 32 60 a4 61 a0 09 93 44 44 4c 33 60 a4 61 DL2`.a...DDL3`.a 79a0: a0 09 93 44 44 4c 34 60 a4 61 a0 09 93 44 44 4c ...DDL4`.a...DDL 79b0: 35 60 a4 61 a0 09 93 44 44 4c 36 60 a4 61 a0 09 5`.a...DDL6`.a.. 79c0: 93 44 44 4c 37 60 a4 61 a0 09 93 44 44 4c 38 60 .DDL7`.a...DDL8` 79d0: a4 61 a4 00 14 42 07 43 44 44 53 01 70 7b 68 0b .a...B.CDDS.p{h. 79e0: 0f 0f 00 60 a0 07 93 00 60 a4 0a 1d a0 0a 93 43 ...`....`......C 79f0: 41 44 4c 60 a4 0a 1f a0 0a 93 43 41 4c 32 60 a4 ADL`......CAL2`. 7a00: 0a 1f a0 0a 93 43 41 4c 33 60 a4 0a 1f a0 0a 93 .....CAL3`...... 7a10: 43 41 4c 34 60 a4 0a 1f a0 0a 93 43 41 4c 35 60 CAL4`......CAL5` 7a20: a4 0a 1f a0 0a 93 43 41 4c 36 60 a4 0a 1f a0 0a ......CAL6`..... 7a30: 93 43 41 4c 37 60 a4 0a 1f a0 0a 93 43 41 4c 38 .CAL7`......CAL8 7a40: 60 a4 0a 1f a4 0a 1d 14 48 06 4e 44 44 53 01 70 `.......H.NDDS.p 7a50: 7b 68 0b 0f 0f 00 60 a0 06 93 00 60 a4 00 a0 09 {h....`....`.... 7a60: 93 4e 41 44 4c 60 a4 01 a0 09 93 4e 44 4c 32 60 .NADL`.....NDL2` 7a70: a4 01 a0 09 93 4e 44 4c 33 60 a4 01 a0 09 93 4e .....NDL3`.....N 7a80: 44 4c 34 60 a4 01 a0 09 93 4e 44 4c 35 60 a4 01 DL4`.....NDL5`.. 7a90: a0 09 93 4e 44 4c 36 60 a4 01 a0 09 93 4e 44 4c ...NDL6`.....NDL 7aa0: 37 60 a4 01 a0 09 93 4e 44 4c 38 60 a4 01 a4 00 7`.....NDL8`.... 7ab0: 10 24 5e 5e 50 43 49 30 5b 80 4d 43 48 50 02 0a .$^^PCI0[.MCHP.. 7ac0: 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 54 41 @..[..MCHP..@0TA 7ad0: 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 0a c0 SM...[.IGDP..@.. 7ae0: 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 47 49 [.E.IGDP..@...GI 7af0: 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 47 4d VD...GUMA.....GM 7b00: 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 18 47 FN....@FASLE...G 7b10: 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 00 30 SSE.GSSB.GSES..0 7b20: 00 0c 43 44 56 4c 01 00 03 00 18 4c 42 50 43 08 ..CDVL.....LBPC. 7b30: 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 41 53 .0ASLS [.IGDM.AS 7b40: 4c 42 0b 00 20 5b 81 48 19 49 47 44 4d 00 53 49 LB.. [.H.IGDM.SI 7b50: 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 53 56 GN@.SIZE OVER SV 7b60: 45 52 40 10 56 56 45 52 40 08 47 56 45 52 40 08 ER@.VVER@.GVER@. 7b70: 4d 42 4f 58 20 44 4d 4f 44 20 00 40 50 44 52 44 MBOX DMOD .@PDRD 7b80: 59 20 43 53 54 53 20 43 45 56 54 20 00 40 0a 44 Y CSTS CEVT .@.D 7b90: 49 44 4c 20 44 44 4c 32 20 44 44 4c 33 20 44 44 IDL DDL2 DDL3 DD 7ba0: 4c 34 20 44 44 4c 35 20 44 44 4c 36 20 44 44 4c L4 DDL5 DDL6 DDL 7bb0: 37 20 44 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 7 DDL8 CPDL CPL2 7bc0: 20 43 50 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 CPL3 CPL4 CPL5 7bd0: 43 50 4c 36 20 43 50 4c 37 20 43 50 4c 38 20 43 CPL6 CPL7 CPL8 C 7be0: 41 44 4c 20 43 41 4c 32 20 43 41 4c 33 20 43 41 ADL CAL2 CAL3 CA 7bf0: 4c 34 20 43 41 4c 35 20 43 41 4c 36 20 43 41 4c L4 CAL5 CAL6 CAL 7c00: 37 20 43 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 7 CAL8 NADL NDL2 7c10: 20 4e 44 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 NDL3 NDL4 NDL5 7c20: 4e 44 4c 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 NDL6 NDL7 NDL8 A 7c30: 53 4c 50 20 54 49 44 58 20 43 48 50 44 20 43 4c SLP TIDX CHPD CL 7c40: 49 44 20 43 44 43 4b 20 53 58 53 57 20 45 56 54 ID CDCK SXSW EVT 7c50: 53 20 43 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 S CNOT NRDY .@.S 7c60: 43 49 45 01 47 45 46 43 04 47 58 46 43 03 47 45 CIE.GEFC.GXFC.GE 7c70: 53 46 08 00 10 50 41 52 4d 20 44 53 4c 50 20 00 SF...PARM DSLP . 7c80: 40 7a 41 52 44 59 20 41 53 4c 43 20 54 43 48 45 @zARDY ASLC TCHE 7c90: 20 41 4c 53 49 20 42 43 4c 50 20 50 46 49 54 20 ALSI BCLP PFIT 7ca0: 43 42 4c 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 CBLV BCLM@.CPFM 7cb0: 45 50 46 4d 20 50 4c 55 54 40 25 50 46 4d 42 20 EPFM PLUT@%PFMB 7cc0: 43 43 44 56 20 50 43 46 54 20 00 40 2f 47 56 44 CCDV PCFT .@/GVD 7cd0: 31 80 00 0c 50 48 45 44 20 42 44 44 43 40 80 08 1...PHED BDDC@.. 7ce0: 44 42 54 42 12 32 15 00 0a 07 0a 38 0b c0 01 0b DBTB.2.....8.... 7cf0: 00 0e 0a 3f 0b c7 01 0b 07 0e 0b f8 01 0b 38 0e ...?..........8. 7d00: 0b c0 0f 00 00 00 00 00 0b 00 70 0b 07 70 0b 38 ..........p..p.8 7d10: 70 0b c0 71 0b 00 7e 08 43 44 43 54 12 27 05 12 p..q..~.CDCT.'.. 7d20: 07 02 0a e4 0b 40 01 12 07 02 0a de 0b 4d 01 12 .....@.......M.. 7d30: 07 02 0a de 0b 4d 01 12 04 02 00 00 12 07 02 0a .....M.......... 7d40: de 0b 4d 01 08 53 55 43 43 01 08 4e 56 4c 44 0a ..M..SUCC..NVLD. 7d50: 02 08 43 52 49 54 0a 04 08 4e 43 52 54 0a 06 14 ..CRIT...NCRT... 7d60: 40 51 47 53 43 49 08 14 44 1f 47 42 44 41 08 a0 @QGSCI..D.GBDA.. 7d70: 1a 93 47 45 53 46 00 70 0b 79 06 50 41 52 4d 70 ..GESF.p.y.PARMp 7d80: 00 47 45 53 46 a4 53 55 43 43 a0 1a 93 47 45 53 .GESF.SUCC...GES 7d90: 46 01 70 0b 40 02 50 41 52 4d 70 00 47 45 53 46 F.p.@.PARMp.GESF 7da0: a4 53 55 43 43 a0 47 04 93 47 45 53 46 0a 04 7b .SUCC.G..GESF..{ 7db0: 50 41 52 4d 0c 00 00 ff ef 50 41 52 4d 7b 50 41 PARM.....PARM{PA 7dc0: 52 4d 79 83 88 44 42 54 42 49 42 54 54 00 0a 10 RMy..DBTBIBTT... 7dd0: 00 50 41 52 4d 7d 49 42 54 54 50 41 52 4d 50 41 .PARM}IBTTPARMPA 7de0: 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 46 07 RMp.GESF.SUCC.F. 7df0: 93 47 45 53 46 0a 05 a0 14 5e 5e 5e 5e 2e 4c 49 .GESF....^^^^.LI 7e00: 44 5f 5f 4c 49 44 70 01 4c 49 44 53 a1 07 70 00 D__LIDp.LIDS..p. 7e10: 4c 49 44 53 70 49 50 53 43 50 41 52 4d 7d 50 41 LIDSpIPSCPARM}PA 7e20: 52 4d 79 49 50 41 54 0a 08 00 50 41 52 4d 72 50 RMyIPAT...PARMrP 7e30: 41 52 4d 0b 00 01 50 41 52 4d 7d 50 41 52 4d 79 ARM...PARM}PARMy 7e40: 4c 49 44 53 0a 10 00 50 41 52 4d 72 50 41 52 4d LIDS...PARMrPARM 7e50: 0c 00 00 01 00 50 41 52 4d 70 00 47 45 53 46 a4 .....PARMp.GESF. 7e60: 53 55 43 43 a0 2d 93 47 45 53 46 0a 06 70 49 54 SUCC.-.GESF..pIT 7e70: 56 46 50 41 52 4d 7d 50 41 52 4d 79 49 54 56 4d VFPARM}PARMyITVM 7e80: 0a 04 00 50 41 52 4d 70 00 47 45 53 46 a4 53 55 ...PARMp.GESF.SU 7e90: 43 43 a0 43 07 93 47 45 53 46 0a 07 70 47 49 56 CC.C..GESF..pGIV 7ea0: 44 50 41 52 4d 7f 50 41 52 4d 01 50 41 52 4d 7d DPARM.PARM.PARM} 7eb0: 50 41 52 4d 79 47 4d 46 4e 01 00 50 41 52 4d 7d PARMyGMFN..PARM} 7ec0: 50 41 52 4d 0b 00 18 50 41 52 4d 7d 50 41 52 4d PARM...PARM}PARM 7ed0: 79 49 44 4d 53 0a 11 00 50 41 52 4d 7d 79 83 88 yIDMS...PARM}y.. 7ee0: 83 88 43 44 43 54 48 56 43 4f 00 43 44 56 4c 00 ..CDCTHVCO.CDVL. 7ef0: 0a 15 00 50 41 52 4d 50 41 52 4d 70 01 47 45 53 ...PARMPARMp.GES 7f00: 46 a4 53 55 43 43 a0 2a 93 47 45 53 46 0a 0a 70 F.SUCC.*.GESF..p 7f10: 00 50 41 52 4d a0 10 49 53 53 43 7d 50 41 52 4d .PARM..ISSC}PARM 7f20: 0a 03 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 ..PARMp.GESF.SUC 7f30: 43 a0 1f 93 47 45 53 46 0a 0b 70 4b 53 56 30 50 C...GESF..pKSV0P 7f40: 41 52 4d 70 4b 53 56 31 47 45 53 46 a4 53 55 43 ARMpKSV1GESF.SUC 7f50: 43 70 00 47 45 53 46 a4 43 52 49 54 14 45 2d 53 Cp.GESF.CRIT.E-S 7f60: 42 43 42 08 a0 22 93 47 45 53 46 00 70 00 50 41 BCB..".GESF.p.PA 7f70: 52 4d 70 0c fd 87 0f 00 50 41 52 4d 70 00 47 45 RMp.....PARMp.GE 7f80: 53 46 a4 53 55 43 43 a0 18 93 47 45 53 46 01 70 SF.SUCC...GESF.p 7f90: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 7fa0: a0 19 93 47 45 53 46 0a 03 70 00 47 45 53 46 70 ...GESF..p.GESFp 7fb0: 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 .PARM.SUCC...GES 7fc0: 46 0a 04 70 00 47 45 53 46 70 00 50 41 52 4d a4 F..p.GESFp.PARM. 7fd0: 53 55 43 43 a0 19 93 47 45 53 46 0a 05 70 00 47 SUCC...GESF..p.G 7fe0: 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 37 ESFp.PARM.SUCC.7 7ff0: 93 47 45 53 46 0a 06 70 7b 50 41 52 4d 0a 0f 00 .GESF..p{PARM... 8000: 49 54 56 46 70 7a 7b 50 41 52 4d 0a f0 00 0a 04 ITVFpz{PARM..... 8010: 00 49 54 56 4d 70 00 47 45 53 46 70 00 50 41 52 .ITVMp.GESFp.PAR 8020: 4d a4 53 55 43 43 a0 45 04 93 47 45 53 46 0a 07 M.SUCC.E..GESF.. 8030: a0 2a 93 50 41 52 4d 00 70 43 4c 49 44 60 a0 1c .*.PARM.pCLID`.. 8040: 7b 0c 00 00 00 80 60 00 7b 43 4c 49 44 0a 0f 43 {.....`.{CLID..C 8050: 4c 49 44 47 4c 49 44 43 4c 49 44 70 00 47 45 53 LIDGLIDCLIDp.GES 8060: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 Fp.PARM.SUCC...G 8070: 45 53 46 0a 08 70 00 47 45 53 46 70 00 50 41 52 ESF..p.GESFp.PAR 8080: 4d a4 53 55 43 43 a0 24 93 47 45 53 46 0a 09 7b M.SUCC.$.GESF..{ 8090: 50 41 52 4d 0a ff 49 42 54 54 70 00 47 45 53 46 PARM..IBTTp.GESF 80a0: 70 00 50 41 52 4d a4 53 55 43 43 a0 46 05 93 47 p.PARM.SUCC.F..G 80b0: 45 53 46 0a 0a 7b 50 41 52 4d 0a ff 49 50 53 43 ESF..{PARM..IPSC 80c0: a0 21 7b 7a 50 41 52 4d 0a 08 00 0a ff 00 7b 7a .!{zPARM......{z 80d0: 50 41 52 4d 0a 08 00 0a ff 49 50 41 54 76 49 50 PARM.....IPATvIP 80e0: 41 54 7b 7a 50 41 52 4d 0a 14 00 0a 07 49 42 49 AT{zPARM.....IBI 80f0: 41 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 Ap.GESFp.PARM.SU 8100: 43 43 a0 44 05 93 47 45 53 46 0a 0b 7b 7a 50 41 CC.D..GESF..{zPA 8110: 52 4d 01 00 01 49 46 31 45 a0 1b 7b 50 41 52 4d RM...IF1E..{PARM 8120: 0c 00 e0 01 00 00 7b 7a 50 41 52 4d 0a 0d 00 0a ......{zPARM.... 8130: 0f 49 44 4d 53 a1 10 7b 7a 50 41 52 4d 0a 11 00 .IDMS..{zPARM... 8140: 0a 0f 49 44 4d 53 70 00 47 45 53 46 70 00 50 41 ..IDMSp.GESFp.PA 8150: 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 10 RM.SUCC...GESF.. 8160: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 8170: 43 a0 2c 93 47 45 53 46 0a 11 70 79 4c 49 44 53 C.,.GESF..pyLIDS 8180: 0a 08 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 ...PARMrPARM...P 8190: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 49 ARMp.GESF.SUCC.I 81a0: 04 93 47 45 53 46 0a 12 a0 26 7b 50 41 52 4d 01 ..GESF...&{PARM. 81b0: 00 a0 10 93 7a 50 41 52 4d 01 00 01 70 01 49 53 ....zPARM...p.IS 81c0: 53 43 a1 0c 70 00 47 45 53 46 a4 43 52 49 54 a1 SC..p.GESF.CRIT. 81d0: 07 70 00 49 53 53 43 70 00 47 45 53 46 70 00 50 .p.ISSCp.GESFp.P 81e0: 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a ARM.SUCC...GESF. 81f0: 13 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 8200: 43 43 a0 24 93 47 45 53 46 0a 14 7b 50 41 52 4d CC.$.GESF..{PARM 8210: 0a 0f 50 41 56 50 70 00 47 45 53 46 70 00 50 41 ..PAVPp.GESFp.PA 8220: 52 4d a4 53 55 43 43 70 00 47 45 53 46 a4 53 55 RM.SUCCp.GESF.SU 8230: 43 43 a0 11 93 47 45 46 43 0a 04 70 47 42 44 41 CC...GEFC..pGBDA 8240: 47 58 46 43 a0 11 93 47 45 46 43 0a 06 70 53 42 GXFC...GEFC..pSB 8250: 43 42 47 58 46 43 70 00 47 45 46 43 70 01 53 43 CBGXFCp.GEFCp.SC 8260: 49 53 70 00 47 53 53 45 70 00 53 43 49 45 a4 00 ISp.GSSEp.SCIE.. 8270: 14 19 50 44 52 44 00 a0 0c 92 44 52 44 59 5b 22 ..PDRD....DRDY[" 8280: 41 53 4c 50 a4 92 44 52 44 59 14 1d 50 53 54 53 ASLP..DRDY..PSTS 8290: 00 a0 0e 94 43 53 54 53 0a 02 5b 22 41 53 4c 50 ....CSTS..["ASLP 82a0: a4 93 43 53 54 53 0a 03 14 42 06 47 4e 4f 54 02 ..CSTS...B.GNOT. 82b0: a0 07 50 44 52 44 a4 01 70 68 43 45 56 54 70 0a ..PDRD..phCEVTp. 82c0: 03 43 53 54 53 a0 2c 90 93 43 48 50 44 00 93 69 .CSTS.,..CHPD..i 82d0: 00 a0 18 91 94 4f 53 59 53 0b d0 07 95 4f 53 59 .....OSYS....OSY 82e0: 53 0b d6 07 86 50 43 49 30 69 a1 07 86 47 46 58 S....PCI0i...GFX 82f0: 30 69 a0 0d 5b 12 48 4e 4f 54 00 48 4e 4f 54 68 0i..[.HNOT.HNOTh 8300: a1 08 86 47 46 58 30 0a 80 a4 00 14 13 47 48 44 ...GFX0......GHD 8310: 53 01 70 68 54 49 44 58 a4 47 4e 4f 54 01 00 14 S.phTIDX.GNOT... 8320: 22 47 4c 49 44 01 a0 0b 93 68 01 70 0a 03 43 4c "GLID....h.p..CL 8330: 49 44 a1 07 70 68 43 4c 49 44 a4 47 4e 4f 54 0a ID..phCLID.GNOT. 8340: 02 00 14 14 47 44 43 4b 01 70 68 43 44 43 4b a4 ....GDCK.phCDCK. 8350: 47 4e 4f 54 0a 04 00 14 19 50 41 52 44 00 a0 0c GNOT.....PARD... 8360: 92 41 52 44 59 5b 22 41 53 4c 50 a4 92 41 52 44 .ARDY["ASLP..ARD 8370: 59 14 40 12 41 49 4e 54 02 a0 0e 92 7b 54 43 48 Y.@.AINT....{TCH 8380: 45 79 01 68 00 00 a4 01 a0 07 50 41 52 44 a4 01 Ey.h......PARD.. 8390: a0 40 0c 93 68 0a 02 a0 47 09 43 50 46 4d 7b 43 .@..h...G.CPFM{C 83a0: 50 46 4d 0a 0f 60 7b 45 50 46 4d 0a 0f 61 a0 2a PFM..`{EPFM..a.* 83b0: 93 60 01 a0 0d 7b 61 0a 06 00 70 0a 06 50 46 49 .`...{a...p..PFI 83c0: 54 a1 17 a0 0d 7b 61 0a 08 00 70 0a 08 50 46 49 T....{a...p..PFI 83d0: 54 a1 07 70 01 50 46 49 54 a0 2a 93 60 0a 06 a0 T..p.PFIT.*.`... 83e0: 0d 7b 61 0a 08 00 70 0a 08 50 46 49 54 a1 16 a0 .{a...p..PFIT... 83f0: 0b 7b 61 01 00 70 01 50 46 49 54 a1 08 70 0a 06 .{a..p.PFIT..p.. 8400: 50 46 49 54 a0 2a 93 60 0a 08 a0 0b 7b 61 01 00 PFIT.*.`....{a.. 8410: 70 01 50 46 49 54 a1 18 a0 0d 7b 61 0a 06 00 70 p.PFIT....{a...p 8420: 0a 06 50 46 49 54 a1 08 70 0a 08 50 46 49 54 a1 ..PFIT..p..PFIT. 8430: 0c 7f 50 46 49 54 0a 07 50 46 49 54 7d 50 46 49 ..PFIT..PFIT}PFI 8440: 54 0c 00 00 00 80 50 46 49 54 70 0a 04 41 53 4c T.....PFITp..ASL 8450: 43 a1 38 a0 1f 93 68 01 70 69 42 43 4c 50 7d 42 C.8...h.piBCLP}B 8460: 43 4c 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 41 CLP.....BCLPp..A 8470: 53 4c 43 a1 16 a0 10 93 68 00 70 69 41 4c 53 49 SLC.....h.piALSI 8480: 70 01 41 53 4c 43 a1 03 a4 01 70 01 41 53 4c 45 p.ASLC....p.ASLE 8490: a4 00 14 17 53 43 49 50 00 a0 0e 92 93 4f 56 45 ....SCIP.....OVE 84a0: 52 00 a4 92 47 53 4d 49 a4 00 5b 82 4c 0c 5e 5e R...GSMI..[.L.^^ 84b0: 4d 45 4d 32 08 5f 48 49 44 0c 41 d0 0c 01 08 5f MEM2._HID.A...._ 84c0: 55 49 44 0a 02 08 43 52 53 31 11 1d 0a 1a 86 09 UID...CRS1...... 84d0: 00 01 00 00 00 20 00 00 20 00 86 09 00 01 00 00 ..... .. ....... 84e0: 00 40 00 00 20 00 79 00 08 43 52 53 32 11 1d 0a .@.. .y..CRS2... 84f0: 1a 86 09 00 01 00 00 00 20 00 00 20 00 86 09 00 ........ .. .... 8500: 01 00 40 00 40 00 10 00 00 79 00 14 36 5f 53 54 ..@.@....y..6_ST 8510: 41 00 a0 2d 49 47 44 53 a0 27 91 93 7b 50 4e 48 A..-IGDS.'..{PNH 8520: 4d 0c f0 0f ff 0f 00 0c a0 06 02 00 93 7b 50 4e M............{PN 8530: 48 4d 0c ff 0f ff 0f 00 0c a0 06 03 00 a4 0a 0f HM.............. 8540: a4 00 14 35 5f 43 52 53 00 a0 29 91 93 7b 50 4e ...5_CRS..)..{PN 8550: 48 4d 0c f0 0f ff 0f 00 0c a0 06 02 00 93 7b 50 HM............{P 8560: 4e 48 4d 0c ff 0f ff 0f 00 0c a0 06 03 00 a4 43 NHM............C 8570: 52 53 31 a4 43 52 53 32 10 84 67 02 2f 03 5f 53 RS1.CRS2..g./._S 8580: 42 5f 50 43 49 30 4c 50 43 42 5b 82 81 66 02 45 B_PCI0LPCB[..f.E 8590: 43 5f 5f 08 5f 48 49 44 0c 41 d0 0c 09 08 5f 55 C__._HID.A...._U 85a0: 49 44 01 08 5f 47 50 45 0a 16 14 26 5f 43 52 53 ID.._GPE...&_CRS 85b0: 00 08 42 46 46 52 11 15 0a 12 47 01 62 00 62 00 ..BFFR....G.b.b. 85c0: 00 01 47 01 66 00 66 00 00 01 79 00 a4 42 46 46 ..G.f.f...y..BFF 85d0: 52 5b 80 45 52 41 4d 03 00 0a ff 5b 81 49 4f 45 R[.ERAM....[.IOE 85e0: 52 41 4d 01 44 53 42 59 01 45 4e 47 41 01 45 4e RAM.DSBY.ENGA.EN 85f0: 48 59 01 48 46 4e 45 01 44 53 45 4d 01 45 4e 33 HY.HFNE.DSEM.EN3 8600: 52 01 52 45 42 59 01 45 4e 54 4d 01 45 4e 42 4b R.REBY.ENTM.ENBK 8610: 01 45 4e 46 50 01 00 01 49 44 4d 49 01 57 50 53 .ENFP...IDMI.WPS 8620: 57 01 42 59 4f 4e 01 45 4e 42 54 01 4e 54 4b 59 W.BYON.ENBT.NTKY 8630: 01 44 4b 4f 4e 01 44 53 53 4b 01 4d 54 45 53 01 .DKON.DSSK.MTES. 8640: 55 53 42 4f 01 44 53 4d 43 01 53 4e 4c 43 01 4e USBO.DSMC.SNLC.N 8650: 4c 53 46 01 54 4e 4b 42 01 44 53 48 50 01 49 47 LSF.TNKB.DSHP.IG 8660: 50 4b 01 43 48 47 52 01 00 01 43 42 41 54 01 41 PK.CHGR...CBAT.A 8670: 44 4f 30 01 41 44 4f 31 01 00 01 00 01 43 4c 42 DO0.ADO1.....CLB 8680: 41 01 4c 57 42 41 01 53 55 42 45 01 50 55 42 45 A.LWBA.SUBE.PUBE 8690: 01 52 53 42 45 01 44 43 42 45 01 50 46 42 45 01 .RSBE.DCBE.PFBE. 86a0: 48 53 50 41 01 4e 48 44 44 01 44 45 41 44 01 42 HSPA.NHDD.DEAD.B 86b0: 34 34 30 01 42 33 31 35 01 54 33 31 35 01 52 33 440.B315.T315.R3 86c0: 31 35 01 42 59 41 4d 01 48 53 55 4e 08 48 53 52 15.BYAM.HSUN.HSR 86d0: 50 08 00 01 44 45 4c 59 01 00 06 00 08 00 08 54 P...DELY.......T 86e0: 50 53 45 02 00 06 48 4c 43 4c 04 00 02 42 4c 49 PSE...HLCL...BLI 86f0: 4b 01 54 4f 4e 46 01 55 4f 4e 45 01 00 01 55 4f K.TONF.UONE...UO 8700: 4e 4d 02 45 43 42 4b 04 48 46 4e 53 02 47 53 45 NM.ECBK.HFNS.GSE 8710: 52 01 50 53 43 53 01 50 53 44 53 01 47 53 55 44 R.PSCS.PSDS.GSUD 8720: 01 47 53 49 44 02 4d 42 43 47 01 53 42 43 47 01 .GSID.MBCG.SBCG. 8730: 4d 42 52 46 01 53 42 52 46 01 48 44 53 55 01 42 MBRF.SBRF.HDSU.B 8740: 59 53 55 01 00 01 54 4d 4f 44 01 48 41 4d 30 08 YSU...TMOD.HAM0. 8750: 48 41 4d 31 08 48 41 4d 32 08 48 41 4d 33 08 48 HAM1.HAM2.HAM3.H 8760: 41 4d 34 08 48 41 4d 35 08 48 41 4d 36 08 48 41 AM4.HAM5.HAM6.HA 8770: 4d 37 08 48 41 4d 38 08 48 41 4d 39 08 48 41 4d M7.HAM8.HAM9.HAM 8780: 41 08 48 41 4d 42 08 48 41 4d 43 08 48 41 4d 44 A.HAMB.HAMC.HAMD 8790: 08 48 41 4d 45 08 48 41 4d 46 08 48 54 30 30 01 .HAME.HAMF.HT00. 87a0: 48 54 30 31 01 48 54 30 32 01 48 54 30 33 01 48 HT01.HT02.HT03.H 87b0: 54 31 30 01 48 54 31 31 01 48 54 31 32 01 48 54 T10.HT11.HT12.HT 87c0: 31 33 01 00 10 45 58 43 4d 08 00 08 00 08 55 53 13...EXCM.....US 87d0: 50 30 01 55 53 50 33 01 55 53 50 34 01 45 48 50 P0.USP3.USP4.EHP 87e0: 30 01 45 48 50 31 01 00 03 00 08 49 44 30 30 01 0.EHP1.....ID00. 87f0: 49 44 30 31 01 49 44 30 32 01 49 44 30 33 01 00 ID01.ID02.ID03.. 8800: 02 53 45 42 54 01 43 4d 44 53 01 00 08 48 41 54 .SEBT.CMDS...HAT 8810: 52 08 48 54 30 48 08 48 54 30 4c 08 48 54 31 48 R.HT0H.HT0L.HT1H 8820: 08 48 54 31 4c 08 48 46 53 50 08 00 06 53 4d 55 .HT1L.HFSP...SMU 8830: 54 01 00 01 46 41 4e 53 02 48 55 57 42 01 45 4e T...FANS.HUWB.EN 8840: 53 34 01 44 53 45 58 01 41 59 49 44 01 4d 4d 55 S4.DSEX.AYID.MMU 8850: 54 01 4f 44 44 50 01 48 57 50 4d 01 48 57 4c 42 T.ODDP.HWPM.HWLB 8860: 01 48 57 4c 4f 01 48 57 44 4b 01 48 57 46 4e 01 .HWLO.HWDK.HWFN. 8870: 48 57 42 54 01 48 57 52 49 01 48 57 42 55 01 00 HWBT.HWRI.HWBU.. 8880: 08 00 07 48 50 4c 4f 01 00 08 00 08 00 08 48 42 ...HPLO.......HB 8890: 30 53 07 4d 42 54 53 01 00 08 4d 55 54 45 01 49 0S.MBTS...MUTE.I 88a0: 32 43 53 01 50 57 52 46 01 57 41 4e 4f 01 44 43 2CS.PWRF.WANO.DC 88b0: 42 44 01 44 43 57 4c 01 44 43 57 57 01 00 01 53 BD.DCWL.DCWW...S 88c0: 50 4b 4d 01 4b 42 4c 48 01 00 01 42 54 44 48 01 PKM.KBLH...BTDH. 88d0: 55 53 42 4e 01 00 02 53 33 46 47 01 00 08 00 08 USBN...S3FG..... 88e0: 00 18 00 07 50 46 4c 47 01 00 20 46 4e 4b 59 01 ....PFLG.. FNKY. 88f0: 00 01 48 50 4c 44 01 50 52 4f 46 01 41 43 50 57 ..HPLD.PROF.ACPW 8900: 01 00 02 43 41 4c 52 01 48 50 42 55 01 44 4b 45 ...CALR.HPBU.DKE 8910: 56 01 42 59 4e 4f 01 48 44 49 42 01 00 04 48 50 V.BYNO.HDIB...HP 8920: 48 49 01 47 53 54 53 01 00 02 45 58 47 43 01 44 HI.GSTS...EXGC.D 8930: 4f 4b 49 01 48 44 44 54 01 00 01 00 01 4e 55 4d OKI.HDDT.....NUM 8940: 4b 01 00 06 00 08 00 08 45 54 48 42 08 45 54 4c K.......ETHB.ETL 8950: 42 08 00 01 41 43 4f 56 01 52 4d 43 53 01 00 01 B...ACOV.RMCS... 8960: 54 34 45 34 01 54 34 45 35 01 00 02 00 08 53 4d T4E4.T4E5.....SM 8970: 50 52 08 53 4d 53 54 08 53 4d 41 44 08 53 4d 43 PR.SMST.SMAD.SMC 8980: 4d 08 53 4d 44 30 44 06 00 4c 09 42 43 4e 54 08 M.SMD0D..L.BCNT. 8990: 53 4d 41 41 08 42 41 54 44 10 54 4d 50 30 08 54 SMAA.BATD.TMP0.T 89a0: 4d 50 31 08 54 4d 50 32 08 54 4d 50 33 08 54 4d MP1.TMP2.TMP3.TM 89b0: 50 34 08 54 4d 50 35 08 54 4d 50 36 08 54 4d 50 P4.TMP5.TMP6.TMP 89c0: 37 08 00 08 48 49 49 44 08 00 08 48 46 4e 49 08 7...HIID...HFNI. 89d0: 00 10 00 08 00 08 53 43 52 53 01 00 02 43 50 55 ......SCRS...CPU 89e0: 54 01 00 03 44 47 54 52 01 48 44 45 4f 08 00 08 T...DGTR.HDEO... 89f0: 4c 4f 4d 44 01 43 42 44 45 01 00 06 4e 56 50 52 LOMD.CBDE...NVPR 8a00: 01 54 4c 4c 45 01 00 06 48 44 41 41 03 48 44 41 .TLLE...HDAA.HDA 8a10: 42 03 48 44 41 43 02 00 08 00 08 45 52 4d 43 08 B.HDAC.....ERMC. 8a20: 00 08 41 4d 53 42 08 41 4c 53 42 08 44 4d 53 42 ..AMSB.ALSB.DMSB 8a30: 08 44 4c 53 42 08 00 40 05 42 41 49 46 40 08 48 .DLSB..@.BAIF@.H 8a40: 44 45 4e 20 44 42 54 53 08 00 18 48 44 45 4d 08 DEN DBTS...HDEM. 8a50: 48 44 45 53 08 00 30 00 08 4d 43 55 52 10 4d 42 HDES..0..MCUR.MB 8a60: 52 4d 10 4d 42 56 47 10 00 08 41 54 4d 58 08 41 RM.MBVG...ATMX.A 8a70: 43 36 35 08 00 08 42 46 55 44 01 00 07 50 57 4d C65...BFUD...PWM 8a80: 48 08 50 57 4d 4c 08 53 48 53 43 08 48 53 49 44 H.PWML.SHSC.HSID 8a90: 08 00 40 08 45 43 52 43 10 45 43 41 43 10 45 43 ..@.ECRC.ECAC.EC 8aa0: 56 4f 10 00 10 00 08 00 08 00 08 00 08 00 08 00 VO.............. 8ab0: 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 4d ...............M 8ac0: 42 54 48 04 53 42 54 48 04 00 08 00 40 04 00 04 BTH.SBTH....@... 8ad0: 00 04 00 08 00 10 5b 81 31 45 52 41 4d 01 00 40 ......[.1ERAM..@ 8ae0: 50 53 42 52 43 10 53 42 46 43 10 53 42 41 45 10 PSBRC.SBFC.SBAE. 8af0: 53 42 52 53 10 53 42 41 43 10 53 42 56 4f 10 53 SBRS.SBAC.SBVO.S 8b00: 42 41 46 10 53 42 42 53 10 5b 81 1a 45 52 41 4d BAF.SBBS.[..ERAM 8b10: 01 00 40 50 00 0f 53 42 43 4d 01 53 42 4d 44 10 ..@P..SBCM.SBMD. 8b20: 53 42 43 43 10 5b 81 27 45 52 41 4d 01 00 40 50 SBCC.[.'ERAM..@P 8b30: 53 42 44 43 10 53 42 44 56 10 53 42 4f 4d 10 53 SBDC.SBDV.SBOM.S 8b40: 42 53 49 10 53 42 44 54 10 53 42 53 4e 10 5b 81 BSI.SBDT.SBSN.[. 8b50: 0e 45 52 41 4d 01 00 40 50 53 42 43 48 20 5b 81 .ERAM..@PSBCH [. 8b60: 0f 45 52 41 4d 01 00 40 50 53 42 4d 4e 40 08 5b .ERAM..@PSBMN@.[ 8b70: 81 0f 45 52 41 4d 01 00 40 50 53 42 44 4e 40 08 ..ERAM..@PSBDN@. 8b80: 08 42 41 54 4f 00 08 42 41 54 4e 00 08 42 41 54 .BATO..BATN..BAT 8b90: 46 0a c0 14 4b 05 5f 52 45 47 02 56 42 52 47 56 F...K._REG.VBRGV 8ba0: 42 52 53 42 52 4e 53 a0 3d 90 93 68 0a 03 93 69 BRSBRNS.=..h...i 8bb0: 01 70 01 45 43 4f 4e 70 0a ff 53 58 46 47 70 00 .p.ECONp..SXFGp. 8bc0: 4c 49 44 58 70 41 43 50 57 41 43 53 54 70 41 43 LIDXpACPWACSTpAC 8bd0: 53 54 50 57 52 53 57 47 53 56 00 5e 2e 48 4b 45 STPWRSWGSV.^.HKE 8be0: 59 57 47 49 4e 86 42 41 54 31 00 50 4e 4f 54 14 YWGIN.BAT1.PNOT. 8bf0: 1f 4c 45 44 5f 02 7d 68 69 60 a0 0b 45 43 4f 4e .LED_.}hi`..ECON 8c00: 70 60 48 4c 43 4c a1 08 57 42 45 43 0a 0c 60 08 p`HLCL..WBEC..`. 8c10: 42 41 4f 4e 00 08 57 42 4f 4e 00 14 43 0d 42 45 BAON..WBON..C.BE 8c20: 45 50 01 a0 0b 93 68 0a 0f 70 00 57 42 4f 4e 70 EP....h..p.WBONp 8c30: 57 42 4f 4e 62 70 68 60 70 0a ff 61 a0 11 93 68 WBONbph`p..a...h 8c40: 0a 11 70 00 60 70 00 61 70 00 57 42 4f 4e a0 13 ..p.`p.ap.WBON.. 8c50: 93 68 0a 10 70 0a 03 60 70 0a 08 61 70 01 57 42 .h..p..`p..ap.WB 8c60: 4f 4e a0 2e 93 68 0a 03 70 00 57 42 4f 4e a0 22 ON...h..p.WBON." 8c70: 62 70 0a 07 60 a0 1b 91 93 53 50 53 5f 0a 03 93 bp..`....SPS_... 8c80: 53 50 53 5f 0a 04 70 00 62 70 0a ff 60 70 0a ff SPS_..p.bp..`p.. 8c90: 61 a0 13 93 68 0a 07 a0 0d 62 70 00 62 70 0a ff a...h....bp.bp.. 8ca0: 60 70 0a ff 61 a0 38 45 43 4f 4e a0 18 90 62 92 `p..a.8ECON...b. 8cb0: 57 42 4f 4e 70 00 48 53 52 50 70 00 48 53 55 4e WBONp.HSRPp.HSUN 8cc0: 5b 22 0a 64 a0 0c 92 93 61 0a ff 70 61 48 53 52 [".d....a..paHSR 8cd0: 50 a0 0c 92 93 60 0a ff 70 60 48 53 55 4e a0 05 P....`..p`HSUN.. 8ce0: 93 68 0a 03 a0 0a 93 68 0a 07 5b 22 0b f4 01 14 .h.....h..[".... 8cf0: 40 06 46 4e 53 54 00 a0 11 45 43 4f 4e 70 48 46 @.FNST...ECONpHF 8d00: 4e 53 60 70 48 46 4e 45 61 a1 14 7b 52 42 45 43 NS`pHFNEa..{RBEC 8d10: 0a 0e 0a 03 60 7b 52 42 45 43 00 0a 08 61 a0 31 ....`{RBEC...a.1 8d20: 61 a0 0a 93 60 00 55 43 4d 53 0a 11 a0 0a 93 60 a...`.UCMS.....` 8d30: 01 55 43 4d 53 0a 0f a0 0b 93 60 0a 02 55 43 4d .UCMS.....`..UCM 8d40: 53 0a 10 5e 2e 48 4b 45 59 4d 48 4b 51 0b 05 60 S..^.HKEYMHKQ..` 8d50: 14 32 43 48 4b 53 00 70 0b e8 03 60 a2 12 53 4d .2CHKS.p...`..SM 8d60: 50 52 5b 22 01 76 60 a0 07 92 60 a4 0b 80 80 7b PR[".v`...`....{ 8d70: 53 4d 53 54 0a 80 61 a0 07 93 61 0a 80 a4 00 a4 SMST..a...a..... 8d80: 0b 81 80 14 1a 42 46 57 4c 00 70 53 4d 44 30 46 .....BFWL.pSMD0F 8d90: 57 30 30 53 4d 49 5f 0a 14 0a 02 00 00 00 14 47 W00SMI_........G 8da0: 09 42 4c 43 4c 00 70 42 52 4e 53 60 a0 49 08 5e .BLCL.pBRNS`.I.^ 8db0: 5e 5e 2e 47 46 58 30 44 52 44 59 a0 23 93 00 60 ^^.GFX0DRDY.#..` 8dc0: 70 83 88 83 88 42 52 54 42 0a 02 00 0a 03 00 61 p....BRTB......a 8dd0: 70 83 88 83 88 42 52 54 42 0a 02 00 00 00 62 a1 p....BRTB.....b. 8de0: 20 70 83 88 83 88 42 52 54 42 0a 02 00 0a 04 00 p....BRTB...... 8df0: 61 70 83 88 83 88 42 52 54 42 0a 02 00 01 00 62 ap....BRTB.....b 8e00: 7d 61 79 62 0a 09 00 62 5e 5e 5e 2e 47 46 58 30 }ayb...b^^^.GFX0 8e10: 41 49 4e 54 0a 03 62 70 00 61 70 83 88 83 88 42 AINT..bp.ap....B 8e20: 52 54 42 61 00 60 00 62 5e 5e 5e 2e 47 46 58 30 RTBa.`.b^^^.GFX0 8e30: 41 49 4e 54 01 62 14 0c 5f 51 30 31 00 70 01 50 AINT.b.._Q01.p.P 8e40: 38 30 48 14 0d 5f 51 30 32 00 70 0a 02 50 38 30 80H.._Q02.p..P80 8e50: 48 14 0d 5f 51 30 33 00 70 0a 03 50 38 30 48 14 H.._Q03.p..P80H. 8e60: 0d 5f 51 30 34 00 70 0a 04 50 38 30 48 14 0d 5f ._Q04.p..P80H.._ 8e70: 51 30 35 00 70 0a 05 50 38 30 48 14 0d 5f 51 30 Q05.p..P80H.._Q0 8e80: 36 00 70 0a 06 50 38 30 48 14 0d 5f 51 30 37 00 6.p..P80H.._Q07. 8e90: 70 0a 07 50 38 30 48 14 0d 5f 51 30 38 00 70 0a p..P80H.._Q08.p. 8ea0: 08 50 38 30 48 14 0d 5f 51 30 39 00 70 0a 09 50 .P80H.._Q09.p..P 8eb0: 38 30 48 14 0d 5f 51 30 41 00 70 0a 0a 50 38 30 80H.._Q0A.p..P80 8ec0: 48 14 0d 5f 51 30 42 00 70 0a 0b 50 38 30 48 14 H.._Q0B.p..P80H. 8ed0: 0d 5f 51 30 43 00 70 0a 0c 50 38 30 48 14 0d 5f ._Q0C.p..P80H.._ 8ee0: 51 30 44 00 70 0a 0d 50 38 30 48 14 0d 5f 51 30 Q0D.p..P80H.._Q0 8ef0: 45 00 70 0a 0e 50 38 30 48 14 0d 5f 51 30 46 00 E.p..P80H.._Q0F. 8f00: 70 0a 0f 50 38 30 48 14 27 5f 51 31 30 00 70 0a p..P80H.'_Q10.p. 8f10: 10 50 38 30 48 a0 19 5e 2e 48 4b 45 59 4d 48 4b .P80H..^.HKEYMHK 8f20: 4b 01 5e 2e 48 4b 45 59 4d 48 4b 51 0b 01 10 14 K.^.HKEYMHKQ.... 8f30: 2b 5f 51 31 31 00 70 0a 11 50 38 30 48 a0 1a 5e +_Q11.p..P80H..^ 8f40: 2e 48 4b 45 59 4d 48 4b 4b 0a 02 5e 2e 48 4b 45 .HKEYMHKK..^.HKE 8f50: 59 4d 48 4b 51 0b 02 10 a1 02 a3 14 1a 5f 51 31 YMHKQ........_Q1 8f60: 32 00 70 0a 12 50 38 30 48 5e 2e 48 4b 45 59 4d 2.p..P80H^.HKEYM 8f70: 48 4b 51 0b 03 10 14 2f 5f 51 31 33 00 70 0a 13 HKQ..../_Q13.p.. 8f80: 50 38 30 48 a0 18 5e 2e 48 4b 45 59 44 48 4b 43 P80H..^.HKEYDHKC 8f90: 5e 2e 48 4b 45 59 4d 48 4b 51 0b 04 10 a1 08 86 ^.HKEYMHKQ...... 8fa0: 53 4c 50 42 0a 80 14 0d 5f 51 31 34 00 70 0a 14 SLPB...._Q14.p.. 8fb0: 50 38 30 48 14 0d 5f 51 31 35 00 70 0a 15 50 38 P80H.._Q15.p..P8 8fc0: 30 48 14 3d 5f 51 31 36 00 70 0a 16 50 38 30 48 0H.=_Q16.p..P80H 8fd0: a0 1a 5e 2e 48 4b 45 59 4d 48 4b 4b 0a 40 5e 2e ..^.HKEYMHKK.@^. 8fe0: 48 4b 45 59 4d 48 4b 51 0b 07 10 a1 14 a0 12 49 HKEYMHKQ.......I 8ff0: 47 44 53 5e 5e 5e 2e 47 46 58 30 47 48 44 53 00 GDS^^^.GFX0GHDS. 9000: 14 46 09 5f 51 31 37 00 70 0a 17 50 38 30 48 a0 .F._Q17.p..P80H. 9010: 1d 5e 2e 48 4b 45 59 4d 48 4b 4b 0c 00 00 01 00 .^.HKEYMHKK..... 9020: 5e 2e 48 4b 45 59 4d 48 4b 51 0b 11 10 a0 29 92 ^.HKEYMHKQ....). 9030: 95 4f 53 59 53 0b d6 07 a0 18 49 47 44 53 86 5e .OSYS.....IGDS.^ 9040: 5e 5e 2e 47 46 58 30 44 44 30 32 0a 87 5b 22 0a ^^.GFX0DD02..[". 9050: 50 55 43 4d 53 0a 16 a1 3f 70 42 52 4e 53 60 a0 PUCMS...?pBRNS`. 9060: 2a 94 60 00 76 60 70 60 42 52 4e 53 56 42 52 53 *.`.v`p`BRNSVBRS 9070: 60 70 83 88 49 42 43 4c 72 60 0a 02 00 00 45 42 `p..IBCLr`....EB 9080: 52 4c 49 42 43 4d 45 42 52 4c 5e 2e 48 4b 45 59 RLIBCMEBRL^.HKEY 9090: 4d 48 4b 51 0b 50 60 14 47 09 5f 51 31 38 00 70 MHKQ.P`.G._Q18.p 90a0: 0a 18 50 38 30 48 a0 1b 5e 2e 48 4b 45 59 4d 48 ..P80H..^.HKEYMH 90b0: 4b 4b 0b 00 80 5e 2e 48 4b 45 59 4d 48 4b 51 0b KK...^.HKEYMHKQ. 90c0: 10 10 a0 29 92 95 4f 53 59 53 0b d6 07 a0 18 49 ...)..OSYS.....I 90d0: 47 44 53 86 5e 5e 5e 2e 47 46 58 30 44 44 30 32 GDS.^^^.GFX0DD02 90e0: 0a 86 5b 22 0a 50 55 43 4d 53 0a 16 a1 42 04 70 ..[".PUCMS...B.p 90f0: 42 52 4e 53 60 a0 2c 92 94 60 0a 0e 75 60 70 60 BRNS`.,..`..u`p` 9100: 42 52 4e 53 56 42 52 53 60 70 83 88 49 42 43 4c BRNSVBRS`p..IBCL 9110: 72 60 0a 02 00 00 45 42 52 4c 49 42 43 4d 45 42 r`....EBRLIBCMEB 9120: 52 4c 5e 2e 48 4b 45 59 4d 48 4b 51 0b 50 60 14 RL^.HKEYMHKQ.P`. 9130: 31 5f 51 31 39 00 70 0a 19 50 38 30 48 a0 1d 5e 1_Q19.p..P80H..^ 9140: 2e 48 4b 45 59 4d 48 4b 4b 0c 00 00 80 00 5e 2e .HKEYMHKK.....^. 9150: 48 4b 45 59 4d 48 4b 51 0b 18 10 55 43 4d 53 0a HKEYMHKQ...UCMS. 9160: 03 14 29 5f 51 31 41 00 70 0a 1a 50 38 30 48 a0 ..)_Q1A.p..P80H. 9170: 1b 5e 2e 48 4b 45 59 4d 48 4b 4b 0b 00 04 5e 2e .^.HKEYMHKK...^. 9180: 48 4b 45 59 4d 48 4b 51 0b 0b 10 14 1a 5f 51 31 HKEYMHKQ....._Q1 9190: 42 00 70 0a 1b 50 38 30 48 5e 2e 48 4b 45 59 4d B.p..P80H^.HKEYM 91a0: 48 4b 51 0b 0c 10 14 29 5f 51 31 43 00 a0 1d 5e HKQ....)_Q1C...^ 91b0: 2e 48 4b 45 59 4d 48 4b 4b 0c 00 00 20 00 5e 2e .HKEYMHKK... .^. 91c0: 48 4b 45 59 4d 48 4b 51 0b 16 10 55 43 4d 53 00 HKEYMHKQ...UCMS. 91d0: 14 29 5f 51 31 44 00 a0 1d 5e 2e 48 4b 45 59 4d .)_Q1D...^.HKEYM 91e0: 48 4b 4b 0c 00 00 10 00 5e 2e 48 4b 45 59 4d 48 HKK.....^.HKEYMH 91f0: 4b 51 0b 15 10 55 43 4d 53 01 14 12 5f 51 31 45 KQ...UCMS..._Q1E 9200: 00 70 01 41 44 4f 30 70 01 41 44 4f 31 14 06 5f .p.ADO0p.ADO1.._ 9210: 51 31 46 00 14 20 5f 51 32 32 00 70 0a 22 50 38 Q1F.. _Q22.p."P8 9220: 30 48 a0 12 4d 42 54 53 86 42 41 54 31 0a 80 86 0H..MBTS.BAT1... 9230: 42 41 54 31 00 14 0d 5f 51 32 34 00 86 42 41 54 BAT1..._Q24..BAT 9240: 31 0a 80 14 3e 5f 51 32 36 00 70 0a 26 50 38 30 1...>_Q26.p.&P80 9250: 48 5b 22 0b f4 01 86 41 43 41 44 0a 80 86 42 41 H["....ACAD...BA 9260: 54 31 0a 80 86 5c 2e 5f 54 5a 5f 54 5a 30 30 0a T1...\._TZ_TZ00. 9270: 80 5e 2e 48 4b 45 59 4d 48 4b 51 0b 40 60 50 4e .^.HKEYMHKQ.@`PN 9280: 4f 54 14 2a 5f 51 32 37 00 70 0a 27 50 38 30 48 OT.*_Q27.p.'P80H 9290: 5b 22 0b f4 01 86 41 43 41 44 0a 80 5e 2e 48 4b ["....ACAD..^.HK 92a0: 45 59 4d 48 4b 51 0b 40 60 50 4e 4f 54 14 0d 5f EYMHKQ.@`PNOT.._ 92b0: 51 32 38 00 70 0a 28 50 38 30 48 14 0d 5f 51 32 Q28.p.(P80H.._Q2 92c0: 39 00 70 0a 29 50 38 30 48 14 1a 5f 51 32 41 00 9.p.)P80H.._Q2A. 92d0: 5e 2e 48 4b 45 59 4d 48 4b 51 0b 02 50 86 4c 49 ^.HKEYMHKQ..P.LI 92e0: 44 5f 0a 80 14 1a 5f 51 32 42 00 5e 2e 48 4b 45 D_...._Q2B.^.HKE 92f0: 59 4d 48 4b 51 0b 01 50 86 4c 49 44 5f 0a 80 14 YMHKQ..P.LID_... 9300: 30 5f 51 33 34 00 a0 25 90 93 7b 48 42 30 53 0a 0_Q34..%..{HB0S. 9310: 0f 61 00 92 41 43 50 57 70 0a 34 50 38 30 48 5e .a..ACPWp.4P80H^ 9320: 2e 48 4b 45 59 4d 48 4b 51 0b 13 23 46 4e 53 54 .HKEYMHKQ..#FNST 9330: 14 34 5f 51 33 37 00 70 0a 37 50 38 30 48 5b 22 .4_Q37.p.7P80H[" 9340: 0b f4 01 a0 12 44 4f 4b 49 5e 2e 48 4b 45 59 4d .....DOKI^.HKEYM 9350: 48 4b 51 0b 10 40 a1 0e 5e 2e 48 4b 45 59 4d 48 HKQ..@..^.HKEYMH 9360: 4b 51 0b 11 40 14 18 5f 51 33 46 00 5b 22 0b f4 KQ..@.._Q3F.[".. 9370: 01 5e 2e 48 4b 45 59 4d 48 4b 51 0b 00 60 14 0d .^.HKEYMHKQ..`.. 9380: 5f 51 34 30 00 70 0a 40 50 38 30 48 14 41 06 5f _Q40.p.@P80H.A._ 9390: 51 34 31 00 5b 22 0b f4 01 5e 2e 48 4b 45 59 4d Q41.["...^.HKEYM 93a0: 48 4b 51 0b 00 70 a0 18 92 47 53 54 53 70 00 47 HKQ..p...GSTSp.G 93b0: 4f 37 30 70 00 47 4f 33 35 70 00 47 4f 37 31 a1 O70p.GO35p.GO71. 93c0: 2e a0 0e 57 4c 4e 50 70 44 43 57 4c 47 4f 37 30 ...WLNPpDCWLGO70 93d0: a0 0e 42 54 4d 44 70 44 43 42 44 47 4f 33 35 a0 ..BTMDpDCBDGO35. 93e0: 0e 57 41 4e 50 70 44 43 57 57 47 4f 37 31 14 13 .WANPpDCWWGO71.. 93f0: 5f 51 34 33 00 70 0a 43 50 38 30 48 55 43 4d 53 _Q43.p.CP80HUCMS 9400: 0a 18 14 06 5f 51 34 34 00 14 0d 5f 51 34 35 00 ...._Q44..._Q45. 9410: 70 0a 45 50 38 30 48 14 25 5f 51 34 41 00 70 0a p.EP80H.%_Q4A.p. 9420: 4a 50 38 30 48 48 42 43 4b 70 01 42 46 41 44 5b JP80HHBCKp.BFAD[ 9430: 22 0a c8 86 42 41 54 31 00 50 4e 4f 54 14 18 5f "...BAT1.PNOT.._ 9440: 51 34 42 00 70 0a 4b 50 38 30 48 86 42 41 54 31 Q4B.p.KP80H.BAT1 9450: 0a 80 50 4e 4f 54 14 1a 5f 51 34 45 00 70 0a 4e ..PNOT.._Q4E.p.N 9460: 50 38 30 48 5e 2e 48 4b 45 59 4d 48 4b 51 0b 11 P80H^.HKEYMHKQ.. 9470: 60 14 1a 5f 51 34 46 00 70 0a 4f 50 38 30 48 5e `.._Q4F.p.OP80H^ 9480: 2e 48 4b 45 59 4d 48 4b 51 0b 12 60 14 29 5f 51 .HKEYMHKQ..`.)_Q 9490: 36 30 00 70 0a 60 50 38 30 48 a0 1b 5e 2e 48 4b 60.p.`P80H..^.HK 94a0: 45 59 4d 48 4b 4b 0b 00 20 5e 2e 48 4b 45 59 4d EYMHKK.. ^.HKEYM 94b0: 48 4b 51 0b 0e 10 14 0d 5f 51 36 31 00 70 0a 61 HKQ....._Q61.p.a 94c0: 50 38 30 48 14 0d 5f 51 36 32 00 70 0a 62 50 38 P80H.._Q62.p.bP8 94d0: 30 48 14 2b 5f 51 36 33 00 70 0a 63 50 38 30 48 0H.+_Q63.p.cP80H 94e0: a0 1d 5e 2e 48 4b 45 59 4d 48 4b 4b 0c 00 00 02 ..^.HKEYMHKK.... 94f0: 00 5e 2e 48 4b 45 59 4d 48 4b 51 0b 12 10 14 4c .^.HKEYMHKQ....L 9500: 06 5f 51 36 34 00 70 0a 64 50 38 30 48 a0 1a 5e ._Q64.p.dP80H..^ 9510: 2e 48 4b 45 59 4d 48 4b 4b 0a 10 5e 2e 48 4b 45 .HKEYMHKK..^.HKE 9520: 59 4d 48 4b 51 0b 05 10 a0 14 57 57 4e 41 70 44 YMHKQ.....WWNApD 9530: 43 57 57 47 4f 37 31 70 00 57 57 4e 41 a1 2d a0 CWWGO71p.WWNA.-. 9540: 14 57 41 4e 41 70 44 43 57 4c 47 4f 37 30 70 00 .WANApDCWLGO70p. 9550: 57 41 4e 41 a1 16 a0 14 42 54 48 41 70 44 43 42 WANA....BTHApDCB 9560: 44 47 4f 33 35 70 00 42 54 48 41 14 28 5f 51 36 DGO35p.BTHA.(_Q6 9570: 35 00 70 0a 65 50 38 30 48 a0 1a 5e 2e 48 4b 45 5.p.eP80H..^.HKE 9580: 59 4d 48 4b 4b 0a 20 5e 2e 48 4b 45 59 4d 48 4b YMHKK. ^.HKEYMHK 9590: 51 0b 06 10 14 2f 5f 51 36 36 00 70 0a 66 50 38 Q..../_Q66.p.fP8 95a0: 30 48 a0 1b 5e 2e 48 4b 45 59 4d 48 4b 4b 0b 00 0H..^.HKEYMHKK.. 95b0: 02 5e 2e 48 4b 45 59 4d 48 4b 51 0b 0a 10 55 43 .^.HKEYMHKQ...UC 95c0: 4d 53 0a 02 14 24 5f 51 36 37 00 a0 1d 5e 2e 48 MS...$_Q67...^.H 95d0: 4b 45 59 4d 48 4b 4b 0c 00 00 04 00 5e 2e 48 4b KEYMHKK.....^.HK 95e0: 45 59 4d 48 4b 51 0b 13 10 14 0d 5f 51 36 38 00 EYMHKQ....._Q68. 95f0: 70 0a 68 50 38 30 48 14 0d 5f 51 36 39 00 70 0a p.hP80H.._Q69.p. 9600: 69 50 38 30 48 14 1a 5f 51 36 41 00 70 0a 6a 50 iP80H.._Q6A.p.jP 9610: 38 30 48 5e 2e 48 4b 45 59 4d 48 4b 51 0b 1b 10 80H^.HKEYMHKQ... 9620: 14 0d 5f 51 36 42 00 70 0a 6b 50 38 30 48 14 0d .._Q6B.p.kP80H.. 9630: 5f 51 36 43 00 70 0a 6c 50 38 30 48 14 0d 5f 51 _Q6C.p.lP80H.._Q 9640: 36 44 00 70 0a 6d 50 38 30 48 14 0d 5f 51 36 45 6D.p.mP80H.._Q6E 9650: 00 70 0a 6e 50 38 30 48 14 0d 5f 51 36 46 00 70 .p.nP80H.._Q6F.p 9660: 0a 6f 50 38 30 48 14 11 5f 51 37 30 00 70 0a 70 .oP80H.._Q70.p.p 9670: 50 38 30 48 46 4e 53 54 14 11 5f 51 37 32 00 70 P80HFNST.._Q72.p 9680: 0a 72 50 38 30 48 46 4e 53 54 14 11 5f 51 37 33 .rP80HFNST.._Q73 9690: 00 70 0a 73 50 38 30 48 46 4e 53 54 14 2b 5f 51 .p.sP80HFNST.+_Q 96a0: 37 34 00 70 0a 74 50 38 30 48 a0 1d 5e 2e 48 4b 74.p.tP80H..^.HK 96b0: 45 59 4d 48 4b 4b 0c 00 00 00 08 5e 2e 48 4b 45 EYMHKK.....^.HKE 96c0: 59 4d 48 4b 51 0b 60 60 14 0d 5f 51 37 36 00 70 YMHKQ.``.._Q76.p 96d0: 0a 76 50 38 30 48 14 0d 5f 51 37 37 00 70 0a 77 .vP80H.._Q77.p.w 96e0: 50 38 30 48 14 1a 5f 51 39 35 00 70 0a 95 50 38 P80H.._Q95.p..P8 96f0: 30 48 86 5c 2e 5f 54 5a 5f 54 5a 30 30 0a 80 14 0H.\._TZ_TZ00... 9700: 4a 04 5f 51 45 41 00 70 0a ea 50 38 30 48 a0 23 J._QEA.p..P80H.# 9710: 93 54 34 45 34 00 70 01 54 34 45 34 70 00 54 34 .T4E4.p.T4E4p.T4 9720: 45 35 54 48 52 4f 0a 91 5b 22 0a 1e 54 48 52 4f E5THRO..["..THRO 9730: 0a 95 a1 17 70 01 54 34 45 35 54 48 52 4f 0a 92 ....p.T4E5THRO.. 9740: 5b 22 0a 1e 54 48 52 4f 0a 95 14 29 5f 51 45 43 ["..THRO...)_QEC 9750: 00 70 0a ec 50 38 30 48 70 01 54 34 45 34 70 00 .p..P80Hp.T4E4p. 9760: 54 34 45 35 54 48 52 4f 0a 91 5b 22 0a 1e 54 48 T4E5THRO..["..TH 9770: 52 4f 0a 95 14 2e 5f 51 45 42 00 70 0a eb 50 38 RO...._QEB.p..P8 9780: 30 48 70 01 41 43 4f 56 a0 10 93 54 48 52 4f 0a 0Hp.ACOV...THRO. 9790: 93 0a 12 70 01 52 4d 43 53 5b 22 0a 1e 54 48 52 ...p.RMCS["..THR 97a0: 4f 0a 95 14 35 5f 51 45 44 00 70 0a ed 50 38 30 O...5_QED.p..P80 97b0: 48 70 00 41 43 4f 56 70 00 52 4d 43 53 70 00 54 Hp.ACOVp.RMCSp.T 97c0: 34 45 34 70 00 54 34 45 35 54 48 52 4f 0a 94 5b 4E4p.T4E5THRO..[ 97d0: 22 0a 1e 54 48 52 4f 0a 95 14 44 04 5f 51 46 30 "..THRO...D._QF0 97e0: 00 70 0a f0 50 38 30 48 43 54 44 50 70 50 50 43 .p..P80HCTDPpPPC 97f0: 50 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 50 43 P\/._PR_CPU0_PPC 9800: 50 4e 4f 54 86 5c 2e 5f 50 52 5f 43 50 55 30 0a PNOT.\._PR_CPU0. 9810: 80 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 14 18 ..\._PR_CPU1.... 9820: 5f 51 46 31 00 70 0a f1 50 38 30 48 54 42 43 54 _QF1.p..P80HTBCT 9830: 00 70 00 43 50 55 54 14 18 5f 51 46 32 00 70 0a .p.CPUT.._QF2.p. 9840: f2 50 38 30 48 54 42 43 54 01 70 01 43 50 55 54 .P80HTBCT.p.CPUT 9850: 14 22 5f 51 46 35 00 70 0a f5 50 38 30 48 86 5e ."_QF5.p..P80H.^ 9860: 5e 5e 2e 50 45 47 30 50 45 47 50 0a d4 70 01 44 ^^.PEG0PEGP..p.D 9870: 47 54 52 14 22 5f 51 46 36 00 70 0a f6 50 38 30 GTR."_QF6.p..P80 9880: 48 86 5e 5e 5e 2e 50 45 47 30 50 45 47 50 0a d1 H.^^^.PEG0PEGP.. 9890: 70 00 44 47 54 52 5b 82 85 35 01 48 4b 45 59 08 p.DGTR[..5.HKEY. 98a0: 5f 48 49 44 0c 30 ae 00 68 14 09 5f 53 54 41 00 _HID.0..h.._STA. 98b0: a4 0a 0f 14 0a 4d 48 4b 56 00 a4 0b 00 01 08 44 .....MHKV......D 98c0: 48 4b 43 00 08 44 48 4b 42 01 5b 01 58 44 48 4b HKC..DHKB.[.XDHK 98d0: 07 08 44 48 4b 48 00 08 44 48 4b 57 00 08 44 48 ..DHKH..DHKW..DH 98e0: 4b 53 00 08 44 48 4b 44 00 08 44 48 4b 4e 0c 08 KS..DHKD..DHKN.. 98f0: 08 02 00 08 44 48 4b 54 00 08 44 48 57 57 00 14 ....DHKT..DHWW.. 9900: 0c 4d 48 4b 41 00 a4 0c f8 88 0b 04 14 0b 4d 48 .MHKA.........MH 9910: 4b 4e 00 a4 44 48 4b 4e 14 18 4d 48 4b 4b 01 a0 KN..DHKN..MHKK.. 9920: 0d 44 48 4b 43 a4 7b 44 48 4b 4e 68 00 a1 03 a4 .DHKC.{DHKNh.... 9930: 00 14 40 05 4d 48 4b 4d 02 5b 23 58 44 48 4b ff ..@.MHKM.[#XDHK. 9940: ff a0 06 94 68 0a 20 a3 a1 33 79 01 76 68 60 a0 ....h. ..3y.vh`. 9950: 29 7b 60 0c f8 88 0b 04 00 a0 0c 69 7d 60 44 48 ){`........i}`DH 9960: 4b 4e 44 48 4b 4e a1 12 7b 44 48 4b 4e 7f 60 0c KNDHKN..{DHKN.`. 9970: ff ff ff ff 00 44 48 4b 4e a1 02 a3 5b 27 58 44 .....DHKN...['XD 9980: 48 4b 14 0d 4d 48 4b 53 00 86 53 4c 50 42 0a 80 HK..MHKS..SLPB.. 9990: 14 0c 4d 48 4b 43 01 70 68 44 48 4b 43 14 49 08 ..MHKC.phDHKC.I. 99a0: 4d 48 4b 50 00 5b 23 58 44 48 4b ff ff a0 11 44 MHKP.[#XDHK....D 99b0: 48 57 57 70 44 48 57 57 61 70 00 44 48 57 57 a1 HWWpDHWWap.DHWW. 99c0: 4f 05 a0 11 44 48 4b 57 70 44 48 4b 57 61 70 00 O...DHKWpDHKWap. 99d0: 44 48 4b 57 a1 4a 04 a0 11 44 48 4b 44 70 44 48 DHKW.J...DHKDpDH 99e0: 4b 44 61 70 00 44 48 4b 44 a1 35 a0 11 44 48 4b KDap.DHKD.5..DHK 99f0: 53 70 44 48 4b 53 61 70 00 44 48 4b 53 a1 21 a0 SpDHKSap.DHKS.!. 9a00: 11 44 48 4b 54 70 44 48 4b 54 61 70 00 44 48 4b .DHKTpDHKTap.DHK 9a10: 54 a1 0d 70 44 48 4b 48 61 70 00 44 48 4b 48 5b T..pDHKHap.DHKH[ 9a20: 27 58 44 48 4b a4 61 14 21 4b 4c 43 47 01 70 00 'XDHK.a.!KLCG.p. 9a30: 60 a0 0c 54 4c 4c 45 70 0c 01 01 03 00 60 a1 08 `..TLLEp.....`.. 9a40: 70 0c 00 01 03 00 60 a4 60 14 32 4b 4c 43 53 01 p.....`.`.2KLCS. 9a50: 7b 68 0a ff 60 a0 0a 93 60 00 70 00 54 4c 4c 45 {h..`...`.p.TLLE 9a60: a1 07 70 01 54 4c 4c 45 a0 11 4d 48 4b 4b 0c 00 ..p.TLLE..MHKK.. 9a70: 00 02 00 4d 48 4b 51 0b 12 10 a4 00 14 3e 4d 48 ...MHKQ......>MH 9a80: 4b 45 01 70 68 44 48 4b 42 5b 23 58 44 48 4b ff KE.phDHKB[#XDHK. 9a90: ff 70 00 44 48 4b 48 70 00 44 48 4b 57 70 00 44 .p.DHKHp.DHKWp.D 9aa0: 48 4b 53 70 00 44 48 4b 44 70 00 44 48 4b 54 70 HKSp.DHKDp.DHKTp 9ab0: 00 44 48 57 57 5b 27 58 44 48 4b 14 4f 0a 4d 48 .DHWW['XDHK.O.MH 9ac0: 4b 51 01 a0 47 0a 44 48 4b 42 a0 40 09 44 48 4b KQ..G.DHKB.@.DHK 9ad0: 43 5b 23 58 44 48 4b ff ff a0 06 95 68 0b 00 10 C[#XDHK.....h... 9ae0: a1 4d 06 a0 0c 95 68 0b 00 20 70 68 44 48 4b 48 .M....h.. phDHKH 9af0: a1 4d 05 a0 0c 95 68 0b 00 30 70 68 44 48 4b 57 .M....h..0phDHKW 9b00: a1 4d 04 a0 0c 95 68 0b 00 40 70 68 44 48 4b 53 .M....h..@phDHKS 9b10: a1 3d a0 0c 95 68 0b 00 50 70 68 44 48 4b 44 a1 .=...h..PphDHKD. 9b20: 2e a0 0c 95 68 0b 00 60 70 68 44 48 4b 48 a1 1f ....h..`phDHKH.. 9b30: a0 0c 95 68 0b 00 70 70 68 44 48 4b 54 a1 10 a0 ...h..pphDHKT... 9b40: 0c 95 68 0b 00 80 70 68 44 48 57 57 a1 01 5b 27 ..h...phDHWW..[' 9b50: 58 44 48 4b 86 48 4b 45 59 0a 80 a1 0f a0 0d 93 XDHK.HKEY....... 9b60: 68 0b 04 10 86 53 4c 50 42 0a 80 14 06 4d 48 4b h....SLPB....MHK 9b70: 44 00 14 37 4d 48 51 43 01 a0 2b 57 4e 54 46 a0 D..7MHQC..+WNTF. 9b80: 09 93 68 00 a4 43 57 41 43 a1 1b a0 09 93 68 01 ..h..CWAC.....h. 9b90: a4 43 57 41 50 a1 0f a0 0a 93 68 0a 02 a4 43 57 .CWAP.....h...CW 9ba0: 41 54 a1 02 a3 a1 02 a3 a4 00 14 32 4d 48 47 43 AT.........2MHGC 9bb0: 00 a0 26 57 4e 54 46 5b 23 58 44 48 4b ff ff a0 ..&WNTF[#XDHK... 9bc0: 0a 43 4b 43 34 00 70 0a 03 60 a1 05 70 0a 04 60 .CKC4.p..`..p..` 9bd0: 5b 27 58 44 48 4b a4 60 a1 02 a3 a4 00 14 40 06 ['XDHK.`......@. 9be0: 4d 48 53 43 01 a0 45 05 90 43 57 41 43 57 4e 54 MHSC..E..CWACWNT 9bf0: 46 5b 23 58 44 48 4b ff ff a0 3b 4f 53 43 34 a0 F[#XDHK...;OSC4. 9c00: 18 93 68 0a 03 a0 12 92 43 57 41 53 50 4e 54 46 ..h.....CWASPNTF 9c10: 0a 81 70 01 43 57 41 53 a1 1c a0 17 93 68 0a 04 ..p.CWAS.....h.. 9c20: a0 11 43 57 41 53 50 4e 54 46 0a 81 70 00 43 57 ..CWASPNTF..p.CW 9c30: 41 53 a1 02 a3 5b 27 58 44 48 4b a1 02 a3 14 24 AS...['XDHK....$ 9c40: 49 53 53 47 01 a0 07 4f 56 38 47 a4 00 70 49 53 ISSG...OV8G..pIS 9c50: 53 50 60 7d 60 00 60 7d 60 7b 49 53 43 47 00 00 SP`}`.`}`{ISCG.. 9c60: 60 a4 60 14 0e 49 53 53 53 01 70 68 49 53 43 47 `.`..ISSS.phISCG 9c70: a4 00 14 15 46 46 53 47 01 a0 07 4f 56 38 47 a4 ....FFSG...OV8G. 9c80: 00 a4 49 46 52 53 00 00 14 0e 46 46 53 53 01 49 ..IFRS....FFSS.I 9c90: 46 52 53 01 68 a4 00 14 08 4d 48 4b 47 00 a4 00 FRS.h....MHKG... 9ca0: 14 06 4d 48 53 54 00 14 06 4d 48 54 54 00 14 06 ..MHST...MHTT... 9cb0: 4d 48 42 54 00 14 06 4d 48 46 54 01 14 06 4d 48 MHBT...MHFT...MH 9cc0: 43 54 01 14 1e 4d 4d 54 47 00 70 00 60 7d 60 01 CT...MMTG.p.`}`. 9cd0: 60 a0 0e 92 4d 43 4d 55 7d 60 0c 00 00 01 00 60 `...MCMU}`.....` 9ce0: a4 60 14 06 4d 4d 54 53 01 08 49 4e 44 56 00 14 .`..MMTS..INDV.. 9cf0: 41 08 4d 48 51 49 00 a0 12 7b 49 50 4d 53 01 00 A.MHQI...{IPMS.. 9d00: 7d 49 4e 44 56 01 49 4e 44 56 a0 14 7b 49 50 4d }INDV.INDV..{IPM 9d10: 53 0a 02 00 7d 49 4e 44 56 0a 02 49 4e 44 56 a0 S...}INDV..INDV. 9d20: 15 7b 49 50 4d 53 0a 04 00 7d 49 4e 44 56 0b 00 .{IPMS...}INDV.. 9d30: 01 49 4e 44 56 a0 15 7b 49 50 4d 53 0a 08 00 7d .INDV..{IPMS...} 9d40: 49 4e 44 56 0b 00 02 49 4e 44 56 a0 14 7b 49 50 INDV...INDV..{IP 9d50: 4d 53 0a 10 00 7d 49 4e 44 56 0a 04 49 4e 44 56 MS...}INDV..INDV 9d60: 7d 49 4e 44 56 0b 03 03 49 4e 44 56 a4 49 4e 44 }INDV...INDV.IND 9d70: 56 14 49 12 4d 48 47 49 01 08 52 45 54 42 11 03 V.I.MHGI..RETB.. 9d80: 0a 10 8c 52 45 54 42 00 4d 48 47 53 79 01 68 60 ...RETB.MHGSy.h` 9d90: a0 45 10 7b 49 4e 44 56 60 00 a0 22 93 68 00 5b .E.{INDV`..".h.[ 9da0: 13 52 45 54 42 0a 08 0a 78 42 52 42 55 70 49 50 .RETB...xBRBUpIP 9db0: 4d 42 42 52 42 55 70 0a 10 4d 48 47 53 a1 48 0d MBBRBUp..MHGS.H. 9dc0: a0 22 93 68 01 5b 13 52 45 54 42 0a 08 0a 18 52 .".h.[.RETB....R 9dd0: 52 42 55 70 49 50 4d 52 52 52 42 55 70 0a 04 4d RBUpIPMRRRBUp..M 9de0: 48 47 53 a1 42 0b a0 4c 04 93 68 0a 08 5b 13 52 HGS.B..L..h..[.R 9df0: 45 54 42 0a 10 0a 18 4f 44 42 55 8c 52 45 54 42 ETB....ODBU.RETB 9e00: 01 4d 48 47 5a 70 49 50 4d 4f 4f 44 42 55 7d 0a .MHGZpIPMOODBU}. 9e10: 04 4d 48 47 5a 4d 48 47 5a a0 12 93 4f 44 44 53 .MHGZMHGZ...ODDS 9e20: 00 7d 0a 03 4d 48 47 5a 4d 48 47 5a 70 0a 05 4d .}..MHGZMHGZp..M 9e30: 48 47 53 a1 42 06 a0 2c 93 68 0a 09 5b 13 52 45 HGS.B..,.h..[.RE 9e40: 54 42 0a 10 0a 08 41 55 42 55 70 49 50 4d 41 41 TB....AUBUpIPMAA 9e50: 55 42 55 70 01 88 52 45 54 42 01 00 70 0a 03 4d UBUp..RETB..p..M 9e60: 48 47 53 a1 32 a0 30 93 68 0a 02 70 56 44 59 4e HGS.2.0.h..pVDYN 9e70: 00 00 61 7b 61 0a 0f 88 52 45 54 42 0a 02 00 7a ..a{a...RETB...z 9e80: 61 0a 04 61 7b 61 0a 0f 88 52 45 54 42 01 00 70 a..a{a...RETB..p 9e90: 0a 03 4d 48 47 53 a4 52 45 54 42 14 06 4d 48 53 ..MHGS.RETB..MHS 9ea0: 49 02 14 31 49 52 44 59 00 70 0b f4 01 60 70 0a I..1IRDY.p...`p. 9eb0: 3c 61 70 00 62 a2 1c 61 5b 22 60 70 42 43 48 4b .M b630: b7 41 30 80 05 64 9a 47 98 f5 33 33 4e a7 07 8e .A0..d.G..33N... b640: 25 1e bb c3 a1 41 31 01 06 ef 54 4b 6a ed a5 33 %....A1...TKj..3 b650: 4d 94 55 b0 d9 b4 8d f4 b3 41 32 01 06 b6 eb f1 M.U......A2..... b660: 74 7a 92 7d 4c 95 df 69 8e 21 e8 0e b5 41 33 01 tz.}L..i.!...A3. b670: 06 ff 04 ef 7e 28 43 7c 44 b5 bb d4 49 92 5d 53 ....~(C|D...I.]S b680: 8d 41 34 01 06 9e 15 db 8a 32 1e 5c 45 bc 93 30 .A4......2.\E..0 b690: 8a 7e d9 82 46 41 35 01 01 fd d9 51 26 1c 91 69 .~..FA5....Q&..i b6a0: 4b b9 4e d0 de d5 96 3b d7 41 36 01 06 1a 65 64 K.N....;.A6...ed b6b0: 73 2f 13 e7 4f ad aa 40 c6 c7 ee 2e 3b 41 37 01 s/..O..@....;A7. b6c0: 06 21 12 90 05 66 d5 d1 11 b2 f0 00 a0 c9 06 29 .!...f.........) b6d0: 10 42 41 01 00 08 52 45 54 4e 12 4a 04 05 0d 53 .BA...RETN.J...S b6e0: 75 63 63 65 73 73 00 0d 4e 6f 74 20 53 75 70 70 uccess..Not Supp b6f0: 6f 72 74 65 64 00 0d 49 6e 76 61 6c 69 64 20 50 orted..Invalid P b700: 61 72 61 6d 65 74 65 72 00 0d 41 63 63 65 73 73 arameter..Access b710: 20 44 65 6e 69 65 64 00 0d 53 79 73 74 65 6d 20 Denied..System b720: 42 75 73 79 00 08 49 54 45 4d 12 49 7d 54 12 0f Busy..ITEM.I}T.. b730: 02 0a 0e 0d 57 61 6b 65 4f 6e 4c 41 4e 00 12 19 ....WakeOnLAN... b740: 02 00 0d 45 74 68 65 72 6e 65 74 4c 41 4e 4f 70 ...EthernetLANOp b750: 74 69 6f 6e 52 4f 4d 00 12 13 02 00 0d 55 53 42 tionROM......USB b760: 42 49 4f 53 53 75 70 70 6f 72 74 00 12 10 02 00 BIOSSupport..... b770: 0d 41 6c 77 61 79 73 4f 6e 55 53 42 00 12 0f 02 .AlwaysOnUSB.... b780: 01 0d 54 72 61 63 6b 50 6f 69 6e 74 00 12 0d 02 ..TrackPoint.... b790: 01 0d 54 6f 75 63 68 50 61 64 00 12 0e 02 00 0d ..TouchPad...... b7a0: 46 6e 4b 65 79 4c 6f 63 6b 00 12 15 02 0a 04 0d FnKeyLock....... b7b0: 54 68 69 6e 6b 50 61 64 4e 75 6d 4c 6f 63 6b 00 ThinkPadNumLock. b7c0: 12 14 02 0a 0c 0d 50 6f 77 65 72 4f 6e 4e 75 6d ......PowerOnNum b7d0: 4c 6f 63 6b 00 12 17 02 0a 05 0d 42 6f 6f 74 44 Lock.......BootD b7e0: 69 73 70 6c 61 79 44 65 76 69 63 65 00 12 0e 02 isplayDevice.... b7f0: 00 0d 53 70 65 65 64 53 74 65 70 00 12 21 02 0a ..SpeedStep..!.. b800: 09 0d 41 64 61 70 74 69 76 65 54 68 65 72 6d 61 ..AdaptiveTherma b810: 6c 4d 61 6e 61 67 65 6d 65 6e 74 41 43 00 12 26 lManagementAC..& b820: 02 0a 09 0d 41 64 61 70 74 69 76 65 54 68 65 72 ....AdaptiveTher b830: 6d 61 6c 4d 61 6e 61 67 65 6d 65 6e 74 42 61 74 malManagementBat b840: 74 65 72 79 00 12 10 02 0a 06 0d 43 44 52 4f 4d tery.......CDROM b850: 53 70 65 65 64 00 12 17 02 01 0d 43 50 55 50 6f Speed......CPUPo b860: 77 65 72 4d 61 6e 61 67 65 6d 65 6e 74 00 12 15 werManagement... b870: 02 00 0d 50 6f 77 65 72 43 6f 6e 74 72 6f 6c 42 ...PowerControlB b880: 65 65 70 00 12 14 02 00 0d 4c 6f 77 42 61 74 74 eep......LowBatt b890: 65 72 79 41 6c 61 72 6d 00 12 11 02 00 0d 50 61 eryAlarm......Pa b8a0: 73 73 77 6f 72 64 42 65 65 70 00 12 11 02 00 0d sswordBeep...... b8b0: 4b 65 79 62 6f 61 72 64 42 65 65 70 00 12 17 02 KeyboardBeep.... b8c0: 00 0d 45 78 74 65 6e 64 65 64 4d 65 6d 6f 72 79 ..ExtendedMemory b8d0: 54 65 73 74 00 12 18 02 0a 07 0d 53 41 54 41 43 Test.......SATAC b8e0: 6f 6e 74 72 6f 6c 6c 65 72 4d 6f 64 65 00 12 18 ontrollerMode... b8f0: 02 00 0d 43 6f 72 65 4d 75 6c 74 69 50 72 6f 63 ...CoreMultiProc b900: 65 73 73 69 6e 67 00 12 1d 02 00 0d 56 69 72 74 essing......Virt b910: 75 61 6c 69 7a 61 74 69 6f 6e 54 65 63 68 6e 6f ualizationTechno b920: 6c 6f 67 79 00 12 14 02 00 0d 4c 6f 63 6b 42 49 logy......LockBI b930: 4f 53 53 65 74 74 69 6e 67 00 12 1b 02 0a 0b 0d OSSetting....... b940: 4d 69 6e 69 6d 75 6d 50 61 73 73 77 6f 72 64 4c MinimumPasswordL b950: 65 6e 67 74 68 00 12 21 02 00 0d 42 49 4f 53 50 ength..!...BIOSP b960: 61 73 73 77 6f 72 64 41 74 55 6e 61 74 74 65 6e asswordAtUnatten b970: 64 65 64 42 6f 6f 74 00 12 28 02 00 0d 46 69 6e dedBoot..(...Fin b980: 67 65 72 70 72 69 6e 74 50 72 65 64 65 73 6b 74 gerprintPredeskt b990: 6f 70 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e opAuthentication b9a0: 00 12 1f 02 0a 08 0d 46 69 6e 67 65 72 70 72 69 .......Fingerpri b9b0: 6e 74 52 65 61 64 65 72 50 72 69 6f 72 69 74 79 ntReaderPriority b9c0: 00 12 1d 02 0a 03 0d 46 69 6e 67 65 72 70 72 69 .......Fingerpri b9d0: 6e 74 53 65 63 75 72 69 74 79 4d 6f 64 65 00 12 ntSecurityMode.. b9e0: 12 02 0a 02 0d 53 65 63 75 72 69 74 79 43 68 69 .....SecurityChi b9f0: 70 00 12 19 02 00 0d 42 49 4f 53 55 70 64 61 74 p......BIOSUpdat ba00: 65 42 79 45 6e 64 55 73 65 72 73 00 12 1c 02 00 eByEndUsers..... ba10: 0d 44 61 74 61 45 78 65 63 75 74 69 6f 6e 50 72 .DataExecutionPr ba20: 65 76 65 6e 74 69 6f 6e 00 12 16 02 00 0d 45 74 evention......Et ba30: 68 65 72 6e 65 74 4c 41 4e 41 63 63 65 73 73 00 hernetLANAccess. ba40: 12 16 02 00 0d 57 69 72 65 6c 65 73 73 4c 41 4e .....WirelessLAN ba50: 41 63 63 65 73 73 00 12 16 02 00 0d 57 69 72 65 Access......Wire ba60: 6c 65 73 73 57 41 4e 41 63 63 65 73 73 00 12 14 lessWANAccess... ba70: 02 00 0d 42 6c 75 65 74 6f 6f 74 68 41 63 63 65 ...BluetoothAcce ba80: 73 73 00 12 16 02 00 0d 57 69 72 65 6c 65 73 73 ss......Wireless ba90: 55 53 42 41 63 63 65 73 73 00 12 10 02 00 0d 4d USBAccess......M baa0: 6f 64 65 6d 41 63 63 65 73 73 00 12 12 02 00 0d odemAccess...... bab0: 55 53 42 50 6f 72 74 41 63 63 65 73 73 00 12 13 USBPortAccess... bac0: 02 00 0d 49 45 45 45 31 33 39 34 41 63 63 65 73 ...IEEE1394Acces bad0: 73 00 12 16 02 00 0d 45 78 70 72 65 73 73 43 61 s......ExpressCa bae0: 72 64 41 63 63 65 73 73 00 12 19 02 00 0d 50 43 rdAccess......PC baf0: 49 45 78 70 72 65 73 73 53 6c 6f 74 41 63 63 65 IExpressSlotAcce bb00: 73 73 00 12 13 02 00 0d 55 6c 74 72 61 62 61 79 ss......Ultrabay bb10: 41 63 63 65 73 73 00 12 19 02 00 0d 4d 65 6d 6f Access......Memo bb20: 72 79 43 61 72 64 53 6c 6f 74 41 63 63 65 73 73 ryCardSlotAccess bb30: 00 12 18 02 00 0d 53 6d 61 72 74 43 61 72 64 53 ......SmartCardS bb40: 6c 6f 74 41 63 63 65 73 73 00 12 1b 02 00 0d 49 lotAccess......I bb50: 6e 74 65 67 72 61 74 65 64 43 61 6d 65 72 61 41 ntegratedCameraA bb60: 63 63 65 73 73 00 12 15 02 00 0d 4d 69 63 72 6f ccess......Micro bb70: 70 68 6f 6e 65 41 63 63 65 73 73 00 12 0e 02 0a phoneAccess..... bb80: 0a 0d 42 6f 6f 74 4d 6f 64 65 00 12 16 02 00 0d ..BootMode...... bb90: 53 74 61 72 74 75 70 4f 70 74 69 6f 6e 4b 65 79 StartupOptionKey bba0: 73 00 12 1c 02 00 0d 42 6f 6f 74 44 65 76 69 63 s......BootDevic bbb0: 65 4c 69 73 74 46 31 32 4f 70 74 69 6f 6e 00 12 eListF12Option.. bbc0: 0f 02 0a 64 0d 42 6f 6f 74 4f 72 64 65 72 00 12 ...d.BootOrder.. bbd0: 10 02 00 0d 57 69 4d 41 58 41 63 63 65 73 73 00 ....WiMAXAccess. bbe0: 12 14 02 0a 0d 0d 47 72 61 70 68 69 63 73 44 65 ......GraphicsDe bbf0: 76 69 63 65 00 12 0f 02 00 0d 54 58 54 46 65 61 vice......TXTFea bc00: 74 75 72 65 00 12 0f 02 00 0d 56 54 64 46 65 61 ture......VTdFea bc10: 74 75 72 65 00 12 10 02 0a 0f 0d 41 4d 54 43 6f ture.......AMTCo bc20: 6e 74 72 6f 6c 00 12 26 02 00 0d 46 69 6e 67 65 ntrol..&...Finge bc30: 72 70 72 69 6e 74 50 61 73 73 77 6f 72 64 41 75 rprintPasswordAu bc40: 74 68 65 6e 74 69 63 61 74 69 6f 6e 00 12 1c 02 thentication.... bc50: 00 0d 46 69 6e 67 65 72 70 72 69 6e 74 52 65 61 ..FingerprintRea bc60: 64 65 72 41 63 63 65 73 73 00 12 25 02 00 0d 4f derAccess..%...O bc70: 73 44 65 74 65 63 74 69 6f 6e 46 6f 72 53 77 69 sDetectionForSwi bc80: 74 63 68 61 62 6c 65 47 72 61 70 68 69 63 73 00 tchableGraphics. bc90: 12 20 02 0a 0f 0d 43 6f 6d 70 75 74 72 61 63 65 . ....Computrace bca0: 4d 6f 64 75 6c 65 41 63 74 69 76 61 74 69 6f 6e ModuleActivation bcb0: 00 12 1e 02 01 0d 50 43 49 45 78 70 72 65 73 73 ......PCIExpress bcc0: 50 6f 77 65 72 4d 61 6e 61 67 65 6d 65 6e 74 00 PowerManagement. bcd0: 12 19 02 0a 0f 0d 41 54 70 4d 6f 64 75 6c 65 41 ......ATpModuleA bce0: 63 74 69 76 61 74 69 6f 6e 00 12 14 02 00 0d 65 ctivation......e bcf0: 53 41 54 41 50 6f 72 74 41 63 63 65 73 73 00 12 SATAPortAccess.. bd00: 1c 02 00 0d 48 61 72 64 77 61 72 65 50 61 73 73 ....HardwarePass bd10: 77 6f 72 64 4d 61 6e 61 67 65 72 00 12 1d 02 00 wordManager..... bd20: 0d 48 79 70 65 72 54 68 72 65 61 64 69 6e 67 54 .HyperThreadingT bd30: 65 63 68 6e 6f 6c 6f 67 79 00 12 12 02 00 0d 46 echnology......F bd40: 6e 43 74 72 6c 4b 65 79 53 77 61 70 00 12 19 02 nCtrlKeySwap.... bd50: 00 0d 42 49 4f 53 50 61 73 73 77 6f 72 64 41 74 ..BIOSPasswordAt bd60: 52 65 62 6f 6f 74 00 12 11 02 00 0d 4f 6e 42 79 Reboot......OnBy bd70: 41 63 41 74 74 61 63 68 00 12 11 02 0a 64 0d 4e AcAttach.....d.N bd80: 65 74 77 6f 72 6b 42 6f 6f 74 00 12 12 02 00 0d etworkBoot...... bd90: 42 6f 6f 74 4f 72 64 65 72 4c 6f 63 6b 00 12 0f BootOrderLock... bda0: 02 0a 10 0d 55 53 42 33 30 4d 6f 64 65 00 12 16 ....USB30Mode... bdb0: 02 0a 11 0d 45 78 70 72 65 73 73 43 61 72 64 53 ....ExpressCardS bdc0: 70 65 65 64 00 12 19 02 00 0d 52 61 70 69 64 53 peed......RapidS bdd0: 74 61 72 74 54 65 63 68 6e 6f 6c 6f 67 79 00 12 tartTechnology.. bde0: 1a 02 0a 12 0d 4b 65 79 62 6f 61 72 64 49 6c 6c .....KeyboardIll bdf0: 75 6d 69 6e 61 74 69 6f 6e 00 12 15 02 00 0d 49 umination......I be00: 50 76 34 4e 65 74 77 6f 72 6b 53 74 61 63 6b 00 Pv4NetworkStack. be10: 12 15 02 00 0d 49 50 76 36 4e 65 74 77 6f 72 6b .....IPv6Network be20: 53 74 61 63 6b 00 12 19 02 0a 13 0d 55 65 66 69 Stack.......Uefi be30: 50 78 65 42 6f 6f 74 50 72 69 6f 72 69 74 79 00 PxeBootPriority. be40: 12 24 02 00 0d 50 68 79 73 69 63 61 6c 50 72 65 .$...PhysicalPre be50: 73 65 6e 63 65 46 6f 72 54 70 6d 50 72 6f 76 69 senceForTpmProvi be60: 73 69 6f 6e 00 12 20 02 00 0d 50 68 79 73 69 63 sion.. ...Physic be70: 61 6c 50 72 65 73 65 6e 63 65 46 6f 72 54 70 6d alPresenceForTpm be80: 43 6c 65 61 72 00 12 1d 02 00 0d 53 65 63 75 72 Clear......Secur be90: 65 52 6f 6c 6c 42 61 63 6b 50 72 65 76 65 6e 74 eRollBackPrevent bea0: 69 6f 6e 00 12 17 02 00 0d 52 65 45 6e 74 72 79 ion......ReEntry beb0: 42 6f 6f 74 4d 61 6e 61 67 65 72 00 12 1f 02 0a BootManager..... bec0: 14 0d 57 69 72 65 6c 65 73 73 4c 41 4e 61 6e 64 ..WirelessLANand bed0: 57 69 4d 41 58 52 61 64 69 6f 73 00 12 17 02 0a WiMAXRadios..... bee0: 15 0d 43 68 61 6e 67 65 54 6f 46 31 46 31 32 4b ..ChangeToF1F12K bef0: 65 79 73 00 12 0f 02 00 0d 53 65 63 75 72 65 42 eys......SecureB bf00: 6f 6f 74 00 08 56 53 45 4c 12 42 28 16 12 13 02 oot..VSEL.B(.... bf10: 0d 44 69 73 61 62 6c 65 00 0d 45 6e 61 62 6c 65 .Disable..Enable bf20: 00 12 16 02 0d 44 69 73 61 62 6c 65 00 0d 41 75 .....Disable..Au bf30: 74 6f 6d 61 74 69 63 00 12 1d 03 0d 41 63 74 69 tomatic.....Acti bf40: 76 65 00 0d 49 6e 61 63 74 69 76 65 00 0d 44 69 ve..Inactive..Di bf50: 73 61 62 6c 65 00 12 10 02 0d 4e 6f 72 6d 61 6c sable.....Normal bf60: 00 0d 48 69 67 68 00 12 1d 02 0d 49 6e 64 65 70 ..High.....Indep bf70: 65 6e 64 65 6e 74 00 0d 53 79 6e 63 68 72 6f 6e endent..Synchron bf80: 69 7a 65 64 00 12 35 05 0d 4c 43 44 00 0d 56 47 ized..5..LCD..VG bf90: 41 00 0d 44 69 67 69 74 61 6c 00 0d 44 69 67 69 A..Digital..Digi bfa0: 74 61 6c 31 6f 6e 44 6f 63 6b 00 0d 44 69 67 69 tal1onDock..Digi bfb0: 74 61 6c 32 6f 6e 44 6f 63 6b 00 12 18 03 0d 48 tal2onDock.....H bfc0: 69 67 68 00 0d 4e 6f 72 6d 61 6c 00 0d 53 69 6c igh..Normal..Sil bfd0: 65 6e 74 00 12 17 02 0d 43 6f 6d 70 61 74 69 62 ent.....Compatib bfe0: 69 6c 69 74 79 00 0d 41 48 43 49 00 12 1a 02 0d ility..AHCI..... bff0: 45 78 74 65 72 6e 61 6c 00 0d 49 6e 74 65 72 6e External..Intern c000: 61 6c 4f 6e 6c 79 00 12 21 02 0d 4d 61 78 69 6d alOnly..!..Maxim c010: 69 7a 65 50 65 72 66 6f 72 6d 61 6e 63 65 00 0d izePerformance.. c020: 42 61 6c 61 6e 63 65 64 00 12 16 02 0d 51 75 69 Balanced.....Qui c030: 63 6b 00 0d 44 69 61 67 6e 6f 73 74 69 63 73 00 ck..Diagnostics. c040: 12 29 0a 0d 44 69 73 61 62 6c 65 00 0d 34 00 0d .)..Disable..4.. c050: 35 00 0d 36 00 0d 37 00 0d 38 00 0d 39 00 0d 31 5..6..7..8..9..1 c060: 30 00 0d 31 31 00 0d 31 32 00 12 11 03 0d 41 75 0..11..12.....Au c070: 74 6f 00 0d 4f 6e 00 0d 4f 66 66 00 12 2d 03 0d to..On..Off..-.. c080: 49 6e 74 65 67 72 61 74 65 64 47 66 78 00 0d 44 IntegratedGfx..D c090: 69 73 63 72 65 74 65 47 66 78 00 0d 53 77 69 74 iscreteGfx..Swit c0a0: 63 68 61 62 6c 65 47 66 78 00 12 29 04 0d 44 69 chableGfx..)..Di c0b0: 73 61 62 6c 65 00 0d 41 43 4f 6e 6c 79 00 0d 41 sable..ACOnly..A c0c0: 43 61 6e 64 42 61 74 74 65 72 79 00 0d 45 6e 61 CandBattery..Ena c0d0: 62 6c 65 00 12 1c 03 0d 44 69 73 61 62 6c 65 00 ble.....Disable. c0e0: 0d 45 6e 61 62 6c 65 00 0d 44 69 73 61 62 6c 65 .Enable..Disable c0f0: 00 12 1e 03 0d 44 69 73 61 62 6c 65 00 0d 45 6e .....Disable..En c100: 61 62 6c 65 00 0d 41 75 74 6f 6d 61 74 69 63 00 able..Automatic. c110: 12 1a 02 0d 47 65 6e 65 72 61 74 69 6f 6e 31 00 ....Generation1. c120: 0d 41 75 74 6f 6d 61 74 69 63 00 12 27 03 0d 54 .Automatic..'..T c130: 68 69 6e 6b 4c 69 67 68 74 4f 6e 6c 79 00 0d 42 hinkLightOnly..B c140: 61 63 6b 6c 69 67 68 74 4f 6e 6c 79 00 0d 42 6f acklightOnly..Bo c150: 74 68 00 12 18 02 0d 49 50 76 34 46 69 72 73 74 th.....IPv4First c160: 00 0d 49 50 76 36 46 69 72 73 74 00 12 0b 02 0d ..IPv6First..... c170: 4f 66 66 00 0d 4f 6e 00 12 13 02 0d 44 65 66 61 Off..On.....Defa c180: 75 6c 74 00 0d 4c 65 67 61 63 79 00 08 56 4c 53 ult..Legacy..VLS c190: 54 12 48 07 0f 0d 48 44 44 30 00 0d 48 44 44 31 T.H...HDD0..HDD1 c1a0: 00 0d 48 44 44 32 00 0d 48 44 44 33 00 0d 48 44 ..HDD2..HDD3..HD c1b0: 44 34 00 0d 50 43 49 4c 41 4e 00 0d 41 54 41 50 D4..PCILAN..ATAP c1c0: 49 43 44 30 00 0d 41 54 41 50 49 43 44 31 00 0d ICD0..ATAPICD1.. c1d0: 41 54 41 50 49 43 44 32 00 0d 55 53 42 46 44 44 ATAPICD2..USBFDD c1e0: 00 0d 55 53 42 43 44 00 0d 55 53 42 48 44 44 00 ..USBCD..USBHDD. c1f0: 0d 4f 74 68 65 72 48 44 44 00 0d 4f 74 68 65 72 .OtherHDD..Other c200: 43 44 00 0d 4e 4f 44 45 56 00 08 50 45 4e 43 12 CD..NODEV..PENC. c210: 13 02 0d 61 73 63 69 69 00 0d 73 63 61 6e 63 6f ...ascii..scanco c220: 64 65 00 08 50 4b 42 44 12 0e 03 0d 75 73 00 0d de..PKBD....us.. c230: 66 72 00 0d 67 72 00 08 50 54 59 50 12 36 08 0d fr..gr..PTYP.6.. c240: 70 61 70 00 0d 70 6f 70 00 0d 75 68 64 70 31 00 pap..pop..uhdp1. c250: 0d 6d 68 64 70 31 00 0d 75 68 64 70 32 00 0d 6d .mhdp1..uhdp2..m c260: 68 64 70 32 00 0d 75 68 64 70 33 00 0d 6d 68 64 hdp2..uhdp3..mhd c270: 70 33 00 5b 01 4d 57 4d 49 07 08 50 43 46 47 11 p3.[.MWMI..PCFG. c280: 03 0a 18 08 49 42 55 46 11 04 0b 00 01 08 49 4c ....IBUF......IL c290: 45 4e 00 08 50 53 54 52 11 03 0a 81 14 4a 20 57 EN..PSTR.....J W c2a0: 51 41 30 01 5b 23 4d 57 4d 49 ff ff a0 13 92 93 QA0.[#MWMI...... c2b0: 57 4d 49 53 00 68 00 5b 27 4d 57 4d 49 a4 0d 00 WMIS.h.['MWMI... c2c0: 70 83 88 49 54 45 4d 57 49 54 4d 00 60 70 83 88 p..ITEMWITM.`p.. c2d0: 60 00 00 61 70 83 88 60 01 00 62 a0 20 95 61 0a `..ap..`..b. .a. c2e0: 64 73 62 0d 2c 00 66 70 83 88 56 53 45 4c 61 00 dsb.,.fp..VSELa. c2f0: 63 73 66 83 88 63 57 53 45 4c 00 67 a1 42 1a 70 csf..cWSEL.g.B.p c300: 87 56 4c 53 54 63 a0 1c 92 94 57 4c 53 30 63 73 .VLSTc....WLS0cs c310: 62 0d 2c 00 67 73 67 83 88 56 4c 53 54 57 4c 53 b.,.gsg..VLSTWLS c320: 30 00 62 a0 1c 92 94 57 4c 53 31 63 73 62 0d 3a 0.b....WLS1csb.: c330: 00 67 73 67 83 88 56 4c 53 54 57 4c 53 31 00 62 .gsg..VLSTWLS1.b c340: a0 1c 92 94 57 4c 53 32 63 73 62 0d 3a 00 67 73 ....WLS2csb.:.gs c350: 67 83 88 56 4c 53 54 57 4c 53 32 00 62 a0 1c 92 g..VLSTWLS2.b... c360: 94 57 4c 53 33 63 73 62 0d 3a 00 67 73 67 83 88 .WLS3csb.:.gsg.. c370: 56 4c 53 54 57 4c 53 33 00 62 a0 1c 92 94 57 4c VLSTWLS3.b....WL c380: 53 34 63 73 62 0d 3a 00 67 73 67 83 88 56 4c 53 S4csb.:.gsg..VLS c390: 54 57 4c 53 34 00 62 a0 1c 92 94 57 4c 53 35 63 TWLS4.b....WLS5c c3a0: 73 62 0d 3a 00 67 73 67 83 88 56 4c 53 54 57 4c sb.:.gsg..VLSTWL c3b0: 53 35 00 62 a0 1c 92 94 57 4c 53 36 63 73 62 0d S5.b....WLS6csb. c3c0: 3a 00 67 73 67 83 88 56 4c 53 54 57 4c 53 36 00 :.gsg..VLSTWLS6. c3d0: 62 a0 1c 92 94 57 4c 53 37 63 73 62 0d 3a 00 67 b....WLS7csb.:.g c3e0: 73 67 83 88 56 4c 53 54 57 4c 53 37 00 62 a0 1c sg..VLSTWLS7.b.. c3f0: 92 94 57 4c 53 38 63 73 62 0d 3a 00 67 73 67 83 ..WLS8csb.:.gsg. c400: 88 56 4c 53 54 57 4c 53 38 00 62 a0 1c 92 94 57 .VLSTWLS8.b....W c410: 4c 53 39 63 73 62 0d 3a 00 67 73 67 83 88 56 4c LS9csb.:.gsg..VL c420: 53 54 57 4c 53 39 00 62 a0 1c 92 94 57 4c 53 41 STWLS9.b....WLSA c430: 63 73 62 0d 3a 00 67 73 67 83 88 56 4c 53 54 57 csb.:.gsg..VLSTW c440: 4c 53 41 00 62 a0 1c 92 94 57 4c 53 42 63 73 62 LSA.b....WLSBcsb c450: 0d 3a 00 67 73 67 83 88 56 4c 53 54 57 4c 53 42 .:.gsg..VLSTWLSB c460: 00 62 a0 1c 92 94 57 4c 53 43 63 73 62 0d 3a 00 .b....WLSCcsb.:. c470: 67 73 67 83 88 56 4c 53 54 57 4c 53 43 00 62 a0 gsg..VLSTWLSC.b. c480: 1c 92 94 57 4c 53 44 63 73 62 0d 3a 00 67 73 67 ...WLSDcsb.:.gsg c490: 83 88 56 4c 53 54 57 4c 53 44 00 62 70 62 67 5b ..VLSTWLSD.bpbg[ c4a0: 27 4d 57 4d 49 a4 67 14 41 05 57 4d 41 31 03 5b 'MWMI.g.A.WMA1.[ c4b0: 23 4d 57 4d 49 ff ff a0 09 93 87 6a 00 70 0a 02 #MWMI......j.p.. c4c0: 60 a1 28 70 43 41 52 47 6a 60 a0 1f 93 60 00 70 `.(pCARGj`...`.p c4d0: 57 53 45 54 49 54 45 4d 56 53 45 4c 60 a0 0c 93 WSETITEMVSEL`... c4e0: 60 00 70 57 4d 49 53 01 00 60 5b 27 4d 57 4d 49 `.pWMIS..`['MWMI c4f0: a4 83 88 52 45 54 4e 60 00 14 4c 04 57 4d 41 32 ...RETN`..L.WMA2 c500: 03 5b 23 4d 57 4d 49 ff ff 70 43 41 52 47 6a 60 .[#MWMI..pCARGj` c510: a0 26 93 60 00 a0 13 92 93 49 4c 45 4e 00 70 43 .&.`.....ILEN.pC c520: 50 41 53 49 42 55 46 00 60 a0 0d 93 60 00 70 57 PASIBUF.`...`.pW c530: 4d 49 53 0a 02 00 60 5b 27 4d 57 4d 49 a4 83 88 MIS...`['MWMI... c540: 52 45 54 4e 60 00 14 4c 04 57 4d 41 33 03 5b 23 RETN`..L.WMA3.[# c550: 4d 57 4d 49 ff ff 70 43 41 52 47 6a 60 a0 26 93 MWMI..pCARGj`.&. c560: 60 00 a0 13 92 93 49 4c 45 4e 00 70 43 50 41 53 `.....ILEN.pCPAS c570: 49 42 55 46 00 60 a0 0d 93 60 00 70 57 4d 49 53 IBUF.`...`.pWMIS c580: 0a 03 00 60 5b 27 4d 57 4d 49 a4 83 88 52 45 54 ...`['MWMI...RET c590: 4e 60 00 14 4c 04 57 4d 41 34 03 5b 23 4d 57 4d N`..L.WMA4.[#MWM c5a0: 49 ff ff 70 43 41 52 47 6a 60 a0 26 93 60 00 a0 I..pCARGj`.&.`.. c5b0: 13 92 93 49 4c 45 4e 00 70 43 50 41 53 49 42 55 ...ILEN.pCPASIBU c5c0: 46 00 60 a0 0d 93 60 00 70 57 4d 49 53 0a 04 00 F.`...`.pWMIS... c5d0: 60 5b 27 4d 57 4d 49 a4 83 88 52 45 54 4e 60 00 `['MWMI...RETN`. c5e0: 14 40 07 57 51 41 35 01 5b 23 4d 57 4d 49 ff ff .@.WQA5.[#MWMI.. c5f0: 70 57 4d 49 53 0a 05 00 60 70 57 53 50 4d 88 50 pWMIS...`pWSPM.P c600: 43 46 47 00 00 70 57 53 50 53 88 50 43 46 47 0a CFG..pWSPS.PCFG. c610: 04 00 70 57 53 4d 4e 88 50 43 46 47 0a 08 00 70 ..pWSMN.PCFG...p c620: 57 53 4d 58 88 50 43 46 47 0a 0c 00 70 57 53 45 WSMX.PCFG...pWSE c630: 4e 88 50 43 46 47 0a 10 00 70 57 53 4b 42 88 50 N.PCFG...pWSKB.P c640: 43 46 47 0a 14 00 5b 27 4d 57 4d 49 a4 50 43 46 CFG...['MWMI.PCF c650: 47 14 47 05 57 4d 41 36 03 5b 23 4d 57 4d 49 ff G.G.WMA6.[#MWMI. c660: ff a0 09 93 87 6a 00 70 0a 02 60 a1 2e 70 43 41 .....j.p..`..pCA c670: 52 47 6a 60 a0 25 93 60 00 a0 12 92 93 49 4c 45 RGj`.%.`.....ILE c680: 4e 00 70 53 50 41 53 49 42 55 46 60 a0 0d 93 60 N.pSPASIBUF`...` c690: 00 70 57 4d 49 53 0a 06 00 60 5b 27 4d 57 4d 49 .pWMIS...`['MWMI c6a0: a4 83 88 52 45 54 4e 60 00 14 44 0b 57 4d 41 37 ...RETN`..D.WMA7 c6b0: 03 a0 08 93 87 6a 00 a4 0d 00 70 43 41 52 47 6a .....j....pCARGj c6c0: 60 a0 4a 09 93 60 00 70 47 49 54 4d 49 42 55 46 `.J..`.pGITMIBUF c6d0: 49 54 45 4d 61 a0 07 93 61 ff a4 0d 00 70 83 88 ITEMa...a....p.. c6e0: 49 54 45 4d 61 00 60 70 83 88 60 00 00 61 a0 3c ITEMa.`p..`..a.< c6f0: 95 61 0a 64 70 83 88 56 53 45 4c 61 00 63 70 83 .a.dp..VSELa.cp. c700: 88 63 00 00 62 70 87 63 64 70 01 65 a2 1e 95 65 .c..bp.cdp.e...e c710: 64 70 83 88 63 65 00 66 a0 10 92 93 87 66 00 73 dp..ce.f.....f.s c720: 62 0d 2c 00 67 73 67 66 62 75 65 a1 30 70 83 88 b.,.gsgfbue.0p.. c730: 56 4c 53 54 00 00 62 70 87 56 4c 53 54 64 70 01 VLST..bp.VLSTdp. c740: 65 a2 1a 95 65 64 70 83 88 56 4c 53 54 65 00 66 e...edp..VLSTe.f c750: 73 62 0d 2c 00 67 73 67 66 62 75 65 a4 62 14 4a sb.,.gsgfbue.b.J c760: 06 43 41 52 47 01 70 87 68 60 a0 12 93 60 00 70 .CARG.p.h`...`.p c770: 00 49 42 55 46 70 00 49 4c 45 4e a4 00 a0 0a 92 .IBUFp.ILEN..... c780: 93 8e 68 0a 02 a4 0a 02 a0 09 92 95 60 0a ff a4 ..h.........`... c790: 0a 02 70 68 49 42 55 46 76 60 70 83 88 49 42 55 ..phIBUFv`p..IBU c7a0: 46 60 00 61 a0 19 91 93 61 0a 3b 93 61 0a 2a 70 F`.a....a.;.a.*p c7b0: 00 88 49 42 55 46 60 00 70 60 49 4c 45 4e a1 08 ..IBUF`.p`ILEN.. c7c0: 70 87 68 49 4c 45 4e a4 00 14 49 06 53 43 4d 50 p.hILEN...I.SCMP c7d0: 03 70 87 68 60 a0 06 93 60 00 a4 00 75 60 08 53 .p.h`...`...u`.S c7e0: 54 52 31 11 02 60 70 68 53 54 52 31 76 60 70 00 TR1..`phSTR1v`p. c7f0: 61 70 6a 62 a2 21 95 61 60 70 83 88 53 54 52 31 apjb.!.a`p..STR1 c800: 61 00 63 70 83 88 69 62 00 64 a0 07 92 93 63 64 a.cp..ib.d....cd c810: a4 00 75 61 75 62 70 83 88 69 62 00 64 a0 06 93 ..uaubp..ib.d... c820: 64 00 a4 01 a0 0c 91 93 64 0a 2c 93 64 0a 3a a4 d.......d.,.d.:. c830: 01 a4 00 14 2c 47 49 54 4d 02 70 00 60 70 87 69 ....,GITM.p.`p.i c840: 61 a2 1c 95 60 61 70 83 88 83 88 69 60 00 01 00 a...`ap....i`... c850: 63 a0 0a 53 43 4d 50 63 68 00 a4 60 75 60 a4 ff c..SCMPch..`u`.. c860: 14 28 47 53 45 4c 03 70 00 60 70 87 68 61 a2 18 .(GSEL.p.`p.ha.. c870: 95 60 61 70 83 88 68 60 00 62 a0 0a 53 43 4d 50 .`ap..h`.b..SCMP c880: 62 69 6a a4 60 75 60 a4 ff 14 10 53 4c 45 4e 02 bij.`u`....SLEN. c890: 70 83 88 68 69 00 60 a4 87 60 14 12 43 4c 52 50 p..hi.`..`..CLRP c8a0: 00 70 00 57 50 41 53 70 00 57 50 4e 57 14 48 04 .p.WPASp.WPNW.H. c8b0: 47 50 41 53 02 70 69 60 70 00 61 a2 2f 92 94 61 GPAS.pi`p.a./..a c8c0: 0a 80 70 83 88 68 60 00 62 a0 14 91 93 62 0a 2c ..p..h`.b....b., c8d0: 93 62 00 70 00 88 50 53 54 52 61 00 a4 61 70 62 .b.p..PSTRa..apb c8e0: 88 50 53 54 52 61 00 75 60 75 61 70 00 88 50 53 .PSTRa.u`uap..PS c8f0: 54 52 61 00 a4 ff 14 4c 08 43 50 41 53 02 43 4c TRa....L.CPAS.CL c900: 52 50 70 69 60 70 47 50 41 53 68 60 61 a0 07 93 RPpi`pGPASh`a... c910: 61 ff a4 0a 02 a0 07 93 61 00 a4 0a 02 70 50 53 a.......a....pPS c920: 54 52 57 50 41 53 72 60 61 60 75 60 70 47 53 45 TRWPASr`a`u`pGSE c930: 4c 50 45 4e 43 68 60 66 a0 07 93 66 ff a4 0a 02 LPENCh`f...f.... c940: 70 66 57 45 4e 43 a0 3a 93 66 00 72 60 53 4c 45 pfWENC.:.f.r`SLE c950: 4e 50 45 4e 43 00 60 a0 0d 92 93 83 88 68 60 00 NPENC.`......h`. c960: 0a 2c a4 0a 02 75 60 70 47 53 45 4c 50 4b 42 44 .,...u`pGSELPKBD c970: 68 60 66 a0 07 93 66 ff a4 0a 02 70 66 57 4b 42 h`f...f....pfWKB c980: 44 a4 00 14 42 0f 53 50 41 53 01 43 4c 52 50 70 D...B.SPAS.CLRPp c990: 47 53 45 4c 50 54 59 50 68 00 66 a0 07 93 66 ff GSELPTYPh.f...f. c9a0: a4 0a 02 70 66 57 50 54 59 70 53 4c 45 4e 50 54 ...pfWPTYpSLENPT c9b0: 59 50 66 60 a0 0d 92 93 83 88 68 60 00 0a 2c a4 YPf`......h`..,. c9c0: 0a 02 75 60 70 47 50 41 53 68 60 61 a0 0b 91 93 ..u`pGPASh`a.... c9d0: 61 ff 93 61 00 a4 0a 02 70 50 53 54 52 57 50 41 a..a....pPSTRWPA c9e0: 53 72 60 61 60 a0 0d 92 93 83 88 68 60 00 0a 2c Sr`a`......h`.., c9f0: a4 0a 02 75 60 70 47 50 41 53 68 60 61 a0 07 93 ...u`pGPASh`a... ca00: 61 ff a4 0a 02 a0 0a 93 61 00 70 00 50 53 54 52 a.......a.p.PSTR ca10: 70 50 53 54 52 57 50 4e 57 72 60 61 60 75 60 70 pPSTRWPNWr`a`u`p ca20: 47 53 45 4c 50 45 4e 43 68 60 66 a0 07 93 66 ff GSELPENCh`f...f. ca30: a4 0a 02 70 66 57 45 4e 43 a0 3a 93 66 00 72 60 ...pfWENC.:.f.r` ca40: 53 4c 45 4e 50 45 4e 43 00 60 a0 0d 92 93 83 88 SLENPENC.`...... ca50: 68 60 00 0a 2c a4 0a 02 75 60 70 47 53 45 4c 50 h`..,...u`pGSELP ca60: 4b 42 44 68 60 66 a0 07 93 66 ff a4 0a 02 70 66 KBDh`f...f....pf ca70: 57 4b 42 44 a4 00 14 49 46 57 53 45 54 02 70 49 WKBD...IFWSET.pI ca80: 4c 45 4e 60 75 60 70 47 49 54 4d 49 42 55 46 68 LEN`u`pGITMIBUFh ca90: 61 a0 07 93 61 ff a4 0a 02 70 61 57 49 54 4d 70 a...a....paWITMp caa0: 83 88 68 61 00 63 70 83 88 63 01 00 64 70 87 64 ..ha.cp..c..dp.d cab0: 62 75 62 70 83 88 63 00 00 64 a0 39 95 64 0a 64 bubp..c..d.9.d.d cac0: 70 83 88 69 64 00 65 70 47 53 45 4c 65 49 42 55 p..id.epGSELeIBU cad0: 46 62 66 a0 07 93 66 ff a4 0a 02 70 66 57 53 45 Fbf...f....pfWSE cae0: 4c 72 62 53 4c 45 4e 65 66 62 70 83 88 49 42 55 LrbSLENefbp..IBU caf0: 46 62 00 64 a1 4a 3c 70 0a 3f 57 4c 53 30 70 0a Fb.d.J.. cb90: 62 60 93 64 0a 3a 75 62 70 47 53 45 4c 56 4c 53 b`.d.:ubpGSELVLS cba0: 54 49 42 55 46 62 66 a0 07 93 66 ff a4 0a 02 70 TIBUFbf...f....p cbb0: 66 57 4c 53 31 72 62 53 4c 45 4e 56 4c 53 54 66 fWLS1rbSLENVLSTf cbc0: 62 70 83 88 49 42 55 46 62 00 64 a0 3e 90 95 62 bp..IBUFb.d.>..b cbd0: 60 93 64 0a 3a 75 62 70 47 53 45 4c 56 4c 53 54 `.d.:ubpGSELVLST cbe0: 49 42 55 46 62 66 a0 07 93 66 ff a4 0a 02 70 66 IBUFbf...f....pf cbf0: 57 4c 53 32 72 62 53 4c 45 4e 56 4c 53 54 66 62 WLS2rbSLENVLSTfb cc00: 70 83 88 49 42 55 46 62 00 64 a0 3e 90 95 62 60 p..IBUFb.d.>..b` cc10: 93 64 0a 3a 75 62 70 47 53 45 4c 56 4c 53 54 49 .d.:ubpGSELVLSTI cc20: 42 55 46 62 66 a0 07 93 66 ff a4 0a 02 70 66 57 BUFbf...f....pfW cc30: 4c 53 33 72 62 53 4c 45 4e 56 4c 53 54 66 62 70 LS3rbSLENVLSTfbp cc40: 83 88 49 42 55 46 62 00 64 a0 3e 90 95 62 60 93 ..IBUFb.d.>..b`. cc50: 64 0a 3a 75 62 70 47 53 45 4c 56 4c 53 54 49 42 d.:ubpGSELVLSTIB cc60: 55 46 62 66 a0 07 93 66 ff a4 0a 02 70 66 57 4c UFbf...f....pfWL cc70: 53 34 72 62 53 4c 45 4e 56 4c 53 54 66 62 70 83 S4rbSLENVLSTfbp. cc80: 88 49 42 55 46 62 00 64 a0 3e 90 95 62 60 93 64 .IBUFb.d.>..b`.d cc90: 0a 3a 75 62 70 47 53 45 4c 56 4c 53 54 49 42 55 .:ubpGSELVLSTIBU cca0: 46 62 66 a0 07 93 66 ff a4 0a 02 70 66 57 4c 53 Fbf...f....pfWLS ccb0: 35 72 62 53 4c 45 4e 56 4c 53 54 66 62 70 83 88 5rbSLENVLSTfbp.. ccc0: 49 42 55 46 62 00 64 a0 3e 90 95 62 60 93 64 0a IBUFb.d.>..b`.d. ccd0: 3a 75 62 70 47 53 45 4c 56 4c 53 54 49 42 55 46 :ubpGSELVLSTIBUF cce0: 62 66 a0 07 93 66 ff a4 0a 02 70 66 57 4c 53 36 bf...f....pfWLS6 ccf0: 72 62 53 4c 45 4e 56 4c 53 54 66 62 70 83 88 49 rbSLENVLSTfbp..I cd00: 42 55 46 62 00 64 a0 3e 90 95 62 60 93 64 0a 3a BUFb.d.>..b`.d.: cd10: 75 62 70 47 53 45 4c 56 4c 53 54 49 42 55 46 62 ubpGSELVLSTIBUFb cd20: 66 a0 07 93 66 ff a4 0a 02 70 66 57 4c 53 37 72 f...f....pfWLS7r cd30: 62 53 4c 45 4e 56 4c 53 54 66 62 70 83 88 49 42 bSLENVLSTfbp..IB cd40: 55 46 62 00 64 a0 3e 90 95 62 60 93 64 0a 3a 75 UFb.d.>..b`.d.:u cd50: 62 70 47 53 45 4c 56 4c 53 54 49 42 55 46 62 66 bpGSELVLSTIBUFbf cd60: a0 07 93 66 ff a4 0a 02 70 66 57 4c 53 38 72 62 ...f....pfWLS8rb cd70: 53 4c 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 SLENVLSTfbp..IBU cd80: 46 62 00 64 a0 3e 90 95 62 60 93 64 0a 3a 75 62 Fb.d.>..b`.d.:ub cd90: 70 47 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 pGSELVLSTIBUFbf. cda0: 07 93 66 ff a4 0a 02 70 66 57 4c 53 39 72 62 53 ..f....pfWLS9rbS cdb0: 4c 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 LENVLSTfbp..IBUF cdc0: 62 00 64 a0 3e 90 95 62 60 93 64 0a 3a 75 62 70 b.d.>..b`.d.:ubp cdd0: 47 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 GSELVLSTIBUFbf.. cde0: 93 66 ff a4 0a 02 70 66 57 4c 53 41 72 62 53 4c .f....pfWLSArbSL cdf0: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb ce00: 00 64 a0 3e 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.>..b`.d.:ubpG ce10: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... ce20: 66 ff a4 0a 02 70 66 57 4c 53 42 72 62 53 4c 45 f....pfWLSBrbSLE ce30: 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 00 NVLSTfbp..IBUFb. ce40: 64 a0 3e 90 95 62 60 93 64 0a 3a 75 62 70 47 53 d.>..b`.d.:ubpGS ce50: 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 66 ELVLSTIBUFbf...f ce60: ff a4 0a 02 70 66 57 4c 53 43 72 62 53 4c 45 4e ....pfWLSCrbSLEN ce70: 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 00 64 VLSTfbp..IBUFb.d ce80: a0 3e 90 95 62 60 93 64 0a 3a 75 62 70 47 53 45 .>..b`.d.:ubpGSE ce90: 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 66 ff LVLSTIBUFbf...f. cea0: a4 0a 02 70 66 57 4c 53 44 72 62 53 4c 45 4e 56 ...pfWLSDrbSLENV ceb0: 4c 53 54 66 62 70 83 88 49 42 55 46 62 00 64 a0 LSTfbp..IBUFb.d. cec0: 1e 90 93 64 0a 2c 95 62 60 75 62 70 43 50 41 53 ...d.,.b`ubpCPAS ced0: 49 42 55 46 62 60 a0 07 92 93 60 00 a4 60 a4 00 IBUFb`....`..`.. cee0: 08 57 51 42 41 11 42 8a 0b 9d 08 46 4f 4d 42 01 .WQBA.B....FOMB. cef0: 00 00 00 8d 08 00 00 f2 36 00 00 44 53 00 01 1a ........6..DS... cf00: 7d da 54 a8 c9 9a 00 01 06 18 42 10 13 10 0a 0d }.T.......B..... cf10: 21 02 0b 83 50 4c 18 14 a0 45 41 c8 05 14 95 02 !...PL...EA..... cf20: 21 c3 02 14 0b 70 2e 40 ba 00 e5 28 72 0c 22 02 !....p.@...(r.". cf30: f7 ef 0f 31 0e 88 14 40 48 26 84 44 00 53 21 70 ...1...@H&.D.S!p cf40: 84 a0 5f 01 08 1d a2 c9 a0 00 a7 08 82 b4 65 01 .._...........e. cf50: ba 05 f8 16 a0 1d 42 68 15 0a 30 29 c0 27 98 2c ......Bh..0).'., cf60: 0a 90 0d 26 db 70 64 18 4c e4 18 50 62 c6 80 d2 ...&.pd.L..Pb... cf70: 39 05 d9 04 16 74 a1 28 9a 46 94 04 07 75 0c 11 9....t.(.F...u.. cf80: 82 97 2b 40 f2 04 a4 79 5e b2 3e 08 0d 81 8d 80 ..+@...y^.>..... cf90: 47 91 00 c2 62 2c 53 e2 61 50 1e 40 24 67 a8 28 G...b,S.aP.@$g.( cfa0: 60 7b 9d 88 86 75 9c 4c 12 1c 6a 94 96 28 c0 fc `{...u.L..j..(.. cfb0: c8 34 91 63 6b 7a c4 82 64 d2 86 82 1a ba a7 75 .4.ckz..d......u cfc0: 52 9e 68 c4 83 32 4c 02 8f 82 a1 71 82 b2 20 e4 R.h..2L....q.. . cfd0: 60 a0 28 c0 93 f0 1c 8b 17 20 7c c6 e4 28 10 23 `.(...... |..(.# cfe0: 81 8f 04 1e cd 31 63 81 c2 05 3c 9f 63 88 1c f7 .....1c...<.c... cff0: 50 63 1c 45 e4 04 ef 00 51 8c 56 d0 bc 85 18 2c Pc.E....Q.V...., d000: 9a c1 7a 06 27 83 4e f0 ff 3f 02 2e 03 42 1e 05 ..z.'.N..?...B.. d010: 58 1d 94 a6 61 82 ee 05 bc 1a 1a 13 a0 11 43 ca X...a.........C. d020: 04 38 bb 2f 68 46 6d 09 30 27 40 9b 00 6f 08 42 .8./hFm.0'@..o.B d030: 39 cf 28 c7 72 8a 51 1e 06 62 be 0c 04 8d 12 23 9.(.r.Q..b.....# d040: e6 b9 c4 35 6c 84 18 21 4f 21 50 dc f6 07 41 06 ...5l..!O!P...A. d050: 8d 1b bd 4f 0b 67 75 02 47 ff a4 60 02 4f f9 c0 ...O.gu.G..`.O.. d060: 9e 0d 4e e0 58 a3 c6 38 95 04 8e fd 80 90 06 10 ..N.X..8........ d070: 45 82 47 9d 16 7c 2e f0 d0 0e da 73 3c 81 20 87 E.G..|.....s<. . d080: 70 04 4f 0c 0f 04 1e 03 bb 29 f8 08 e0 13 02 de p.O......)...... d090: 35 a0 ae 06 0f 06 6c d0 e1 30 e3 f5 f0 c3 9d c0 5.....l..0...... d0a0: 49 3e 60 f0 c3 86 07 87 9b e7 c9 1c 59 a9 02 cc I>`.........Y... d0b0: 1e 0e 74 90 f0 69 83 9d 01 30 f2 07 81 1a 99 a1 ..t..i...0...... d0c0: 3d ee 97 0e 43 3e 27 1c 16 13 7b ea a0 e3 01 ff =...C>'...{..... d0d0: 65 e4 39 c3 d3 f7 7c 4d 30 ec c0 d1 03 31 f4 c3 e.9...|M0....1.. d0e0: c6 61 9c 86 ef 1f 3e 2f c0 38 05 78 e4 fe ff 1f .a....>/.8.x.... d0f0: 52 7c 9a e0 47 0b 9f 26 d8 f5 e0 34 9e 03 3c 9c R|..G..&...4..<. d100: b3 f2 61 02 6c f7 13 36 a2 77 0b 8f 06 7b 0a 00 ..a.l..6.w...{.. d110: df f9 05 9c 77 0d 36 58 18 e7 17 e0 71 42 f0 10 ....w.6X....qB.. d120: f8 41 c2 43 e0 03 78 fe 38 43 2b 9d 17 72 60 f0 .A.C..x.8C+..r`. d130: ce 39 30 46 c1 f3 3c 36 4c a0 20 af 01 85 7a 16 .90F..<6L. ...z. d140: 50 18 9f 6a 80 d7 ff ff 54 03 5c 0e 07 b8 93 03 P..j....T.\..... d150: dc 7b 01 bb 38 3c d7 c0 15 7d ae 81 7a 6f 29 6e .{..8<...}..zo)n d160: 8c ba c6 04 79 14 78 a4 89 f2 3c f3 2e 13 e1 d9 ....y.x...<..... d170: c6 d7 1a 4f 21 8e af 35 46 7c 99 78 b7 31 ee c1 ...O!..5F|.x.1.. d180: 3d d6 3c e4 18 e4 68 22 bc 18 04 7c bc f1 b1 06 =.<...h"...|.... d190: bc 62 5e 28 b2 70 ac 01 34 fe ff 8f 35 c0 0d eb .b^(.p..4...5... d1a0: 01 05 7c 47 06 76 43 81 77 42 01 fc 24 7e 01 e8 ..|G.vC.wB..$~.. d1b0: c8 e1 b4 20 b2 f1 06 f0 29 80 aa 01 d2 34 61 13 ... ....)....4a. d1c0: 4c 4f 2e 78 1f 09 9c 9b 44 c9 87 45 e1 9c f5 20 LO.x....D..E... d1d0: 42 41 0c e8 20 c7 09 f4 19 c5 07 91 13 7d 22 f4 BA.. ........}". d1e0: a0 3c 8c 77 14 76 02 f1 61 c2 63 f7 31 81 ff 63 .<.w.v..a.c.1..c d1f0: 3c 1b a3 5b 0d 86 fe ff e7 14 0e e6 83 08 27 a8 <..[..........'. d200: eb 26 01 32 7d 47 05 50 00 f9 5e e0 73 c0 b3 01 .&.2}G.P..^.s... d210: 1b c3 a3 80 d1 8c ce c3 4f 16 15 77 b2 14 c4 93 ........O..w.... d220: 75 94 c9 a2 67 e2 7b 85 67 f4 a6 e5 39 7a c2 be u...g.{.g...9z.. d230: 87 c0 3a 0c 84 7c 30 f0 34 0c e7 c9 72 38 4f 96 ..:..|0.4...r8O. d240: 8f c5 d7 10 f0 09 9c 2d c8 e1 31 b1 46 45 af 42 .......-..1.FE.B d250: 1e 1e bf 1c 78 3e cf 08 47 f9 24 81 c3 78 26 f1 ....x>..G.$..x&. d260: 10 7d 2b 82 35 91 93 f6 6d e1 64 83 be 9e 61 6e .}+.5...m.d...an d270: 45 b0 ff ff b7 22 38 17 34 98 99 ee 55 a8 58 f7 E...."8.4...U.X. d280: 2a 40 ec b0 5e 7b 7c b0 82 7b af 82 7b a9 7a 56 *@..^{|..{..{.zV d290: 38 c6 f0 0f 53 31 4e e9 b5 d3 40 61 a2 c4 7b af 8...S1N...@a..{. d2a0: f2 18 df ab d8 15 2a 4c ac 97 2b a3 be 4e 84 0b ......*L..+..N.. d2b0: 14 24 d2 ab 55 94 c8 f1 0d f9 5e 05 5e 39 f7 2a .$..U.....^.^9.* d2c0: 90 fd ff ef 55 80 79 b4 f7 2a 30 5e 1b d8 0d 09 ....U.y..*0^.... d2d0: 16 d0 8b 15 60 28 f3 c5 8a e6 bd 58 21 fe ff e7 ....`(.....X!... d2e0: 12 a6 e7 62 45 e6 09 ff 66 05 70 fa ff 7f b3 02 ...bE...f.p..... d2f0: 8c dd 8b 30 47 2b 78 29 6f 56 34 ce 32 14 70 41 ...0G+x)oV4.2.pA d300: 14 c6 37 2b c0 d1 75 05 37 64 b8 60 51 82 f9 10 ..7+..u.7d.`Q... d310: e2 e9 1c f1 43 c2 4b c0 63 8e 07 fc 40 e0 cb 15 ....C.K.c...@... d320: 98 fe ff 04 3e f9 9e e5 db d4 7b 2f 3f 60 bd 57 ....>.....{/?`.W d330: f9 f0 1b eb 9d e1 e5 ca 23 89 72 12 a1 7c b7 7a ........#.r..|.z d340: af 32 4a c4 17 62 9f 82 0d 6d 94 a7 8a e8 c6 7b .2J..b...m.....{ d350: b9 02 af a4 cb 15 40 93 e1 bf 5c 81 ef e6 80 bd ......@...\..... d360: 26 c1 f9 ff 5f 93 f8 f5 0a f0 93 fd 7a 45 73 5f &..._.......zEs_ d370: af 50 a2 20 a4 08 48 33 05 cf fd 0a e0 c4 ff ff .P. ..H3........ d380: 7e 05 58 0e 77 bf 02 7a b7 23 f0 a2 bc 1d 61 af ~.X.w..z.#....a. d390: 58 f8 8c 57 2c 1a 66 25 8a b7 26 0a e3 2b 16 30 X..W,.f%..&..+.0 d3a0: f9 ff 5f b1 80 d9 41 14 37 6a b8 17 27 df 7a 3c .._...A.7j..'.z< d3b0: df 88 be c3 60 4e 58 30 6e 58 f0 87 f4 30 ec 93 ....`NX0nX...0.. d3c0: c4 3b 96 8f 56 06 79 03 7e b2 7a b0 8a 62 84 80 .;..V.y.~.z..b.. d3d0: c7 f3 2e ec a3 d5 9b 96 51 62 c7 f2 85 ea 59 cb ........Qb....Y. d3e0: d7 2c 43 c4 7d 20 f6 0d 0b b0 fd ff bf 61 01 8e .,C.} .......a.. d3f0: 2e 0e fc e0 80 bd 61 01 3e 67 0a 9e 1b 16 b0 f9 ......a.>g...... d400: ff df b0 00 fe ff ff 6f 58 c0 e1 76 85 bd 65 61 .......oX..v..ea d410: 6f 2f 64 15 34 d4 4a 14 fc 7b 65 18 7a c3 02 1c o/d.4.J..{e.z... d420: 8d db a3 06 c7 d9 e0 49 02 73 ae c6 cd e6 e0 02 .......I.s...... d430: 47 e8 1d 54 73 67 97 14 18 b7 2c b8 97 aa 87 86 G..Tsg....,..... d440: 28 07 f1 2a fc 60 f5 28 75 64 8f 57 4f c3 3e 66 (..*.`.(ud.WO.>f d450: f9 96 65 a8 08 6f 59 ec 0c 11 2f 56 94 10 ef 15 ..e..oY.../V.... d460: a1 7d e7 32 f8 a3 b1 51 83 be 1c bf 65 c1 fb ff .}.2...Q....e... d470: df b2 e0 8b fc ab e8 44 e0 5b 16 c0 8f 60 10 72 .......D.[...`.r d480: 32 70 f4 79 01 3f 80 87 11 0f 89 05 18 38 bd 2f 2p.y.?.......8./ d490: f9 4c c1 0f 18 3e 53 b0 eb 41 f4 c7 00 9f 4b 30 .L...>S..A....K0 d4a0: 83 03 ff b5 e2 d0 3d 8a d7 07 13 78 70 fc ff 3f ......=....xp..? d4b0: 38 b8 77 86 23 f2 1d c6 83 03 db 41 00 38 0c 0e 8.w.#......A.8.. d4c0: 1f 6a 70 e8 f1 18 38 a4 cf 63 ec c2 f0 90 e3 a1 .jp...8..c...... d4d0: 81 0d d0 43 03 96 93 78 0a 39 34 30 4b 18 1a 50 ...C...x.940K..P d4e0: 8a 37 34 fa ff 1f 1a 1f 92 0f 0b 31 9f 72 22 bc .74........1.r". d4f0: 2f f8 04 c5 d0 5f 53 7c bb f0 4d 10 37 3e 70 5d /...._S|..M.7>p] d500: 3a 3d 3e e0 73 e4 f2 f8 70 47 27 8f 0f 86 cb ab :=>.s...pG'..... d510: 0c 39 9a f8 68 c5 86 07 b6 9b 9e 87 07 7c ae 9b .9..h........|.. d520: 60 bc 42 f2 6b 09 8c 13 14 fe ba 09 de ff ff 75 `.B.k..........u d530: 13 78 8e 82 6b bd 64 d3 20 af 1c c5 7a 11 50 18 .x..k.d. ...z.P. d540: 9f d9 00 47 63 7d 66 03 cb bd 80 dd d8 e0 9e d6 ...Gc}f......... d550: 60 df 1d 1e ce 1e d3 1e d5 1e d0 7c c4 8e f1 96 `..........|.... d560: 16 24 4e 84 d7 81 a7 35 5f 32 e2 05 7a 5a 33 46 .$N....5_2..zZ3F d570: 9c 97 36 23 be 52 84 78 58 f3 c9 cd 78 0f 13 e1 ..6#.R.xX...x... d580: c2 bc b0 3d ad 81 e3 ff 7f 5a 83 23 e7 8a 0d d0 ...=.....Z.#.... d590: e4 a2 8f 3b a4 80 e5 da c0 6e 29 f0 2e d8 c0 f9 ...;.....n)..... d5a0: ff 7f 44 01 5f 96 0b 36 cd 71 c1 46 71 58 0d 90 ..D._..6.q.FqX.. d5b0: e6 09 ff 7a 0d fe 49 f8 7a 0d d8 be c5 e2 ae d7 ...z..I.z....... d5c0: c0 ea ff 7f bd 06 96 82 47 4a ef d4 e0 ba 69 e3 ........GJ....i. d5d0: 41 df b4 61 0a be 45 d1 28 e4 8a b6 10 0a e3 5b A..a..E.(......[ d5e0: 14 e0 08 fb 2d 0a 2c 17 a7 b7 28 fc 0c 3c 68 df ....-.,...(..H d600: f9 70 f0 fc f4 ff 8f f1 5e e7 9b d4 6b 94 2f 30 .p......^...k./0 d610: c7 10 31 ca cb b4 21 e2 f9 d4 e4 b3 42 dc 10 0f ..1...!.....B... d620: d1 46 88 fa 3c ed 09 bd 46 81 57 d0 35 0a a0 c9 .F..<...F.W.5... d630: fd 08 77 8d 02 cb bd 81 9d 87 f8 95 c8 d7 06 18 ..w............. d640: f7 28 38 ff ff 7b 14 60 23 cc 3d 8a 06 b9 47 a1 .(8..{.`#.=...G. d650: 4e 26 be d4 79 a2 e0 08 7f 91 42 c5 26 51 e8 c3 N&..y.....B.&Q.. d660: 10 2a e6 61 84 82 18 d0 19 4e 14 68 15 27 0a 72 .*.a.....N.h.'.r d670: 8b f1 a4 1e a3 00 5f cb f4 50 79 e4 a1 52 10 0f ......_..Py..R.. d680: d5 71 86 8a 9e a4 e7 8f f9 ff 1f 1c b0 07 29 80 .q............). d690: 17 0a 6d fa d4 68 d4 aa 41 99 1a 65 1a d4 ea 53 ..m..h..A..e...S d6a0: a9 31 63 e7 50 4b 3b 4b 50 31 8b d1 68 1c 05 84 .1c.PK;KP1..h... d6b0: ca fe 9b 0b c4 21 9f 3a 02 74 b0 17 95 80 2c 6b .....!.:.t....,k d6c0: 6d 02 71 7c 13 10 8d 80 48 cb 63 42 40 ce 0d 22 m.q|....H.cB@.." d6d0: 20 ab 58 93 80 ac f9 01 23 70 eb d4 01 c4 52 82 .X.....#p....R. d6e0: d0 44 0b 17 a8 e3 81 68 30 84 46 40 0e 46 21 20 .D.....h0.F@.F! d6f0: cb f8 74 0b dc 02 ac 00 31 f9 20 54 b0 17 50 a6 ..t.....1. T..P. d700: 1e 44 40 56 ba 56 01 59 37 88 80 fe ff 2f 83 32 .D@V.V.Y7..../.2 d710: 03 ce 32 ba 01 62 0a 1f 0a 02 b1 26 3d a0 4c 20 ..2..b.....&=.L d720: 88 ae 1c c4 0f 10 93 06 22 20 c7 39 98 08 dc 71 ........" .9...q d730: 14 01 52 47 c3 a5 20 54 fc f3 44 20 16 64 09 8c ..RG.. T..D .d.. d740: 82 d0 08 9a 40 98 3c 4f 20 2c d4 9f 5c a7 15 a2 ....@..x... dc10: 1d 51 b8 80 e7 73 0c 91 e3 1e 6a 8c a3 88 7c 38 .Q...s....j...|8 dc20: 0c ed 74 e3 1c d8 e9 14 04 2e 90 60 3d cf 59 20 ..t........`=.Y dc30: ff ff 18 07 c1 f0 8e 01 23 03 42 1e 05 58 1d 96 ........#.B..X.. dc40: 26 91 c0 ee 05 68 bc 04 48 e1 20 a5 0c 42 30 8d &....h..H. ..B0. dc50: 09 b0 75 68 90 37 01 d6 ae 02 42 89 74 02 71 42 ..uh.7....B.t.qB dc60: 44 89 18 d4 40 51 6a 43 15 4c 67 c3 13 66 dc 10 D...@QjC.Lg..f.. dc70: 31 0c 14 b7 fd 41 90 61 e3 c6 ef 41 9d d6 d9 1d 1....A.a...A.... dc80: d3 ab 82 09 3c e9 37 84 a7 83 a3 38 da a8 31 9a ....<.7....8..1. dc90: 23 65 ab d6 b9 c2 91 e0 51 e7 05 9f 0c 3c b4 c3 #e......Q....<.. dca0: f6 60 cf d2 43 38 82 67 86 47 02 8f 81 dd 15 7c .`..C8.g.G.....| dcb0: 08 f0 19 01 ef 1a 50 97 83 47 03 36 e9 70 98 f1 ......P..G.6.p.. dcc0: 7a ee 9e ba cf 18 fc bc e1 c1 e1 46 7a 32 47 56 z..........Fz2GV dcd0: aa 00 b3 d7 00 1d 25 7c e0 60 77 81 a7 00 13 58 ......%|.`w....X dce0: fe 20 50 23 33 b4 c7 fb de 61 c8 27 85 c3 62 62 . P#3....a.'..bb dcf0: 0f 1e 74 3c e0 bf 8f 3c 69 78 fa 9e af 09 06 86 ..t<.....y./.o dd40: 0f 26 88 f6 10 03 c6 19 e1 ce 1b 70 4e 31 c0 03 .&.........pN1.. dd50: ea 10 30 87 09 0f 81 0f e0 19 e4 1c 7d cc 39 33 ..0.........}.93 dd60: dc 71 07 6c c3 e0 91 2d 80 b0 38 4f 02 05 7c 1b .q.l...-..8O..|. dd70: 50 18 1f 6e c0 fb ff 3f dc 00 d7 f3 01 ee f8 00 P..n...?........ dd80: f7 62 c1 0e 0f 8f 37 c0 60 48 8f 34 6f 35 31 5e .b....7.`H.4o51^ dd90: 6d 42 44 78 a8 79 b7 31 52 bc c7 1b 76 8d 39 8b mBDx.y.1R...v.9. dda0: 07 90 28 c5 a1 e9 62 13 23 ca 9b 8d 61 df 74 0c ..(...b.#...a.t. ddb0: 14 2a 52 84 30 2f 16 21 1e 6f c0 2c e9 a5 a2 cf .*R.0/.!.o.,.... ddc0: 81 8f 37 80 97 ff ff f1 06 f0 30 0c 1f 53 c0 76 ..7.......0..S.v ddd0: 73 60 f7 14 f8 e7 14 c0 91 90 47 80 0e 1e 16 01 s`........G..... dde0: 22 1b cf 00 9f 89 a8 40 2a cd 14 2c e3 14 ac 4e "......@*..,...N ddf0: 88 5c 06 85 44 40 68 64 86 f3 21 d1 60 06 f1 f9 .\..D@hd..!.`... de00: c0 67 0a 9f 9c f8 ff ff e4 04 9e 83 c9 43 05 2c .g...........C., de10: 44 9f 16 38 9c cf 2c 1c ce 47 12 7e 80 e4 47 25 D..8..,..G.~..G% de20: 70 09 3c 34 80 02 c8 f7 03 9f 03 9e 11 d8 1c 1e p.<4............ de30: 09 7c 20 60 f0 3c da a8 e8 d1 c6 c3 e3 47 06 cf .| `.<.......G.. de40: e7 81 e0 28 1f 09 70 18 ef 17 1e a2 4f 39 b0 26 ...(..p.....O9.& de50: 72 d4 16 7d 22 10 e8 33 17 e6 94 03 9c 82 8f 1e r..}"..3........ de60: 15 f5 40 0a da 93 82 cf 0a 3e 7c c1 ff ff 1f be ..@......>|..... de70: e0 cc eb 65 cd 07 8e 38 67 71 ba ef 16 f8 13 29 ...e...8gq.....) de80: 30 0b 72 22 45 c1 f8 44 0a d8 bc 05 60 af 0b 4f 0.r"E..D....`..O de90: 22 30 ce 11 cf 58 30 0f 55 a7 f8 52 f5 c6 10 e1 "0...X0.U..R.... dea0: c9 ea 35 ea 01 cb 60 2f 02 86 79 c5 f2 e9 2a c4 ..5...`/..y...*. deb0: 03 96 cf 5a d1 42 84 8c 12 ec 15 eb 55 c6 47 2a ...Z.B......U.G* dec0: 83 07 0c 1b 2d 52 84 47 2c fc ff ff 88 05 1e 09 ....-R.G,....... ded0: 07 52 80 2a 03 c7 1d 48 81 fd 69 02 7f bd f0 78 .R.*...H..i....x dee0: b0 ff ff 73 00 f8 0e 31 c0 60 c0 30 0e 31 c0 43 ...s...1.`.0.1.C def0: f0 c9 0c f4 c7 1d f8 e3 e0 19 9f 1c 26 50 98 13 ............&P.. df00: 29 0a c6 27 52 c0 d9 ff ff 70 05 86 e3 0d f8 6f )..'R....p.....o df10: 33 3e 84 fa 7c e3 0b a9 21 5e 6c de d4 5e 09 5e 3>..|...!^l..^.^ df20: df d9 b5 e6 f5 dd a7 82 27 d1 08 21 a3 bc e4 18 ........'..!.... df30: 24 c4 eb a8 01 83 05 89 78 0a 4f 3b 8f 37 e0 15 $.......x.O;.7.. df40: 75 20 05 e8 f1 ff 3f 90 02 83 7b 0a ec 73 0a e0 u ....?...{..s.. df50: 29 f9 89 94 a6 3e 91 a2 15 01 69 aa 60 21 98 fe )....>....i.`!.. df60: 44 4a 0f 06 ce 4d a2 e4 43 a3 70 ce 7a 20 a1 20 DJ...M..C.p.z . df70: 06 74 90 43 05 fa ac e2 03 c9 81 3c 22 7a 58 3e .t.C.......<"zX> df80: 54 fa ae e2 73 88 8f 14 1e bf 0f 0b fc 3f e3 e3 T...s........?.. df90: 28 03 af e6 bc 82 02 f3 69 14 a3 eb 3e 01 92 ff (.......i...>... dfa0: ff fc b8 be c3 28 c8 d1 79 f8 c9 a2 e2 4e 96 82 .....(..y....N.. dfb0: 78 b2 8e 32 59 f4 4c 7c bb f0 8c de bb 7c 83 65 x..2Y.L|.....|.e dfc0: 37 59 78 97 81 90 8f 06 be c9 c2 1d 8b 2f 23 e0 7Yx........../#. dfd0: bb c9 02 5e 47 e3 b3 05 3b 85 f8 ba 06 4b a1 4d ...^G...;....K.M dfe0: 9f 1a 8d 5a fd ff 1b 94 a9 51 a6 41 ad 3e 95 1a ...Z.....Q.A.>.. dff0: 33 76 a1 b0 b8 0b 06 95 b4 2c 8d cb 81 40 68 80 3v.......,...@h. e000: 5b a9 40 1c fa 0b a4 53 02 f9 6a 09 c8 62 57 25 [.@....S..j..bW% e010: 10 cb 54 01 d1 c8 dd c2 20 02 72 bc 4f 8d 40 1d ..T..... .r.O.@. e020: 49 07 10 13 e4 63 ac f4 25 20 10 cb a6 15 a0 e5 I....c..% ...... e030: 3a 01 62 61 41 68 c0 5f b5 86 e0 b4 20 02 72 32 :.baAh._.... .r2 e040: 2d 40 2c 27 88 80 fc ff 07 5b 82 0f 50 57 52 42 -@,'.....[..PWRB e050: 08 5f 48 49 44 0c 41 d0 0c 0c 5b 82 25 53 4c 50 ._HID.A...[.%SLP e060: 42 08 5f 48 49 44 0c 41 d0 0c 0e 14 0e 5f 50 52 B._HID.A....._PR e070: 57 00 a4 12 06 02 0a 18 0a 03 14 06 5f 50 53 57 W..........._PSW e080: 01 10 41 10 2f 03 5f 53 42 5f 50 43 49 30 52 50 ..A./._SB_PCI0RP e090: 30 34 5b 82 4f 0e 42 4c 41 4e 08 5f 41 44 52 00 04[.O.BLAN._ADR. e0a0: 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 49 04 50 [.PXCS..@..[.I.P e0b0: 58 43 53 00 00 40 08 4c 30 53 45 01 00 07 00 08 XCS..@.L0SE..... e0c0: 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 ..LASX..2ABPX... e0d0: 50 44 43 58 01 00 02 50 44 53 58 01 00 01 00 28 PDCX...PDSX....( e0e0: 00 10 50 53 50 58 01 00 4f 3a 00 1e 48 50 45 58 ..PSPX..O:..HPEX e0f0: 01 50 4d 45 58 01 5b 81 15 50 58 43 53 40 00 40 .PMEX.[..PXCS@.@ e100: 4e 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 17 N..HPSX.PMSX.[.. e110: 50 58 53 58 08 5f 41 44 52 00 08 5f 50 52 57 12 PXSX._ADR.._PRW. e120: 06 02 0a 09 0a 04 14 2d 48 50 4d 45 08 a0 26 50 .......-HPME..&P e130: 4d 53 58 70 0a c8 60 a2 15 60 70 01 50 4d 53 58 MSXp..`..`p.PMSX e140: a0 07 50 4d 53 58 76 60 a1 04 70 00 60 86 50 58 ..PMSXv`..p.`.PX e150: 53 58 0a 02 08 5f 50 52 57 12 06 02 0a 09 0a 04 SX..._PRW....... e160: 14 22 5f 50 53 57 01 a0 13 57 4f 4c 4e 70 01 5e ."_PSW...WOLNp.^ e170: 5e 50 4d 53 58 70 68 4c 41 4e 4f a1 07 70 00 4c ^PMSXphLANO..p.L e180: 41 4e 4f 08 53 50 53 5f 00 08 4f 53 49 46 00 08 ANO.SPS_..OSIF.. e190: 57 39 38 46 00 08 57 4e 54 46 00 08 57 4d 45 46 W98F..WNTF..WMEF e1a0: 00 08 57 58 50 46 00 08 57 56 49 53 00 08 57 53 ..WXPF..WVIS..WS e1b0: 50 56 00 08 4c 4e 55 58 00 08 57 49 4e 38 00 08 PV..LNUX..WIN8.. e1c0: 48 38 44 52 00 08 4d 45 4d 58 00 08 46 4e 49 44 H8DR..MEMX..FNID e1d0: 00 08 52 52 42 46 00 08 4e 42 43 46 00 10 1a 2f ..RRBF..NBCF.../ e1e0: 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 5f ._SB_PCI0LPCBEC_ e1f0: 5f 14 06 44 47 53 59 01 10 46 36 2e 5f 53 42 5f _..DGSY..F6._SB_ e200: 50 43 49 30 08 45 42 52 4c 0a 64 08 45 42 52 56 PCI0.EBRL.d.EBRV e210: 00 08 49 42 43 4c 12 26 12 0a 64 0a 23 0a 05 0a ..IBCL.&..d.#... e220: 0a 0a 14 0a 19 0a 1e 0a 23 0a 28 0a 2d 0a 32 0a ........#.(.-.2. e230: 37 0a 3c 0a 41 0a 46 0a 50 0a 5a 0a 64 14 4b 23 7.<.A.F.P.Z.d.K# e240: 49 42 43 4d 01 70 68 45 42 52 4c a0 18 95 45 42 IBCM.phEBRL...EB e250: 52 4c 72 83 88 49 42 43 4c 0a 02 00 01 00 70 00 RLr..IBCL.....p. e260: 42 52 4e 53 a1 4f 1a a0 18 95 45 42 52 4c 72 83 BRNS.O....EBRLr. e270: 88 49 42 43 4c 0a 03 00 01 00 70 01 42 52 4e 53 .IBCL.....p.BRNS e280: a1 43 19 a0 19 95 45 42 52 4c 72 83 88 49 42 43 .C....EBRLr..IBC e290: 4c 0a 04 00 01 00 70 0a 02 42 52 4e 53 a1 46 17 L.....p..BRNS.F. e2a0: a0 19 95 45 42 52 4c 72 83 88 49 42 43 4c 0a 05 ...EBRLr..IBCL.. e2b0: 00 01 00 70 0a 03 42 52 4e 53 a1 49 15 a0 19 95 ...p..BRNS.I.... e2c0: 45 42 52 4c 72 83 88 49 42 43 4c 0a 06 00 01 00 EBRLr..IBCL..... e2d0: 70 0a 04 42 52 4e 53 a1 4c 13 a0 19 95 45 42 52 p..BRNS.L....EBR e2e0: 4c 72 83 88 49 42 43 4c 0a 07 00 01 00 70 0a 05 Lr..IBCL.....p.. e2f0: 42 52 4e 53 a1 4f 11 a0 19 95 45 42 52 4c 72 83 BRNS.O....EBRLr. e300: 88 49 42 43 4c 0a 08 00 01 00 70 0a 06 42 52 4e .IBCL.....p..BRN e310: 53 a1 42 10 a0 19 95 45 42 52 4c 72 83 88 49 42 S.B....EBRLr..IB e320: 43 4c 0a 09 00 01 00 70 0a 07 42 52 4e 53 a1 45 CL.....p..BRNS.E e330: 0e a0 19 95 45 42 52 4c 72 83 88 49 42 43 4c 0a ....EBRLr..IBCL. e340: 0a 00 01 00 70 0a 08 42 52 4e 53 a1 48 0c a0 19 ....p..BRNS.H... e350: 95 45 42 52 4c 72 83 88 49 42 43 4c 0a 0b 00 01 .EBRLr..IBCL.... e360: 00 70 0a 09 42 52 4e 53 a1 4b 0a a0 19 95 45 42 .p..BRNS.K....EB e370: 52 4c 72 83 88 49 42 43 4c 0a 0c 00 01 00 70 0a RLr..IBCL.....p. e380: 0a 42 52 4e 53 a1 4e 08 a0 19 95 45 42 52 4c 72 .BRNS.N....EBRLr e390: 83 88 49 42 43 4c 0a 0d 00 01 00 70 0a 0b 42 52 ..IBCL.....p..BR e3a0: 4e 53 a1 41 07 a0 19 95 45 42 52 4c 72 83 88 49 NS.A....EBRLr..I e3b0: 42 43 4c 0a 0e 00 01 00 70 0a 0c 42 52 4e 53 a1 BCL.....p..BRNS. e3c0: 44 05 a0 19 95 45 42 52 4c 72 83 88 49 42 43 4c D....EBRLr..IBCL e3d0: 0a 0f 00 01 00 70 0a 0d 42 52 4e 53 a1 37 a0 19 .....p..BRNS.7.. e3e0: 95 45 42 52 4c 72 83 88 49 42 43 4c 0a 10 00 01 .EBRLr..IBCL.... e3f0: 00 70 0a 0e 42 52 4e 53 a1 1b a0 19 95 45 42 52 .p..BRNS.....EBR e400: 4c 72 83 88 49 42 43 4c 0a 11 00 01 00 70 0a 0f Lr..IBCL.....p.. e410: 42 52 4e 53 a0 10 92 95 4f 53 59 53 0b d6 07 55 BRNS....OSYS...U e420: 43 4d 53 0a 14 a0 36 49 47 44 53 55 43 4d 53 0a CMS...6IGDSUCMS. e430: 06 70 83 88 50 4e 4c 53 42 52 4e 53 00 42 52 54 .p..PNLSBRNS.BRT e440: 4c 49 53 42 43 83 88 50 4e 4c 53 42 52 4e 53 00 LISBC..PNLSBRNS. e450: 70 01 5e 2e 47 46 58 30 41 53 4c 45 a1 13 a0 11 p.^.GFX0ASLE.... e460: 92 93 45 42 52 56 42 52 4e 53 55 43 4d 53 0a 06 ..EBRVBRNSUCMS.. e470: 70 42 52 4e 53 45 42 52 56 08 49 53 43 54 00 14 pBRNSEBRV.ISCT.. e480: 4d 06 49 53 42 43 01 5e 2e 47 46 58 30 50 41 52 M.ISBC.^.GFX0PAR e490: 44 70 68 5e 2e 47 46 58 30 42 43 4c 50 7d 5e 2e Dph^.GFX0BCLP}^. e4a0: 47 46 58 30 42 43 4c 50 0c 00 00 00 80 5e 2e 47 GFX0BCLP.....^.G e4b0: 46 58 30 42 43 4c 50 70 0a 02 5e 2e 47 46 58 30 FX0BCLPp..^.GFX0 e4c0: 41 53 4c 43 70 0a 05 49 53 43 54 a2 21 90 5e 2e ASLCp..ISCT.!.^. e4d0: 47 46 58 30 41 53 4c 43 49 53 43 54 70 00 5e 2e GFX0ASLCISCTp.^. e4e0: 47 46 58 30 4c 42 50 43 76 49 53 43 54 08 50 4e GFX0LBPCvISCT.PN e4f0: 4c 53 11 13 0a 10 04 07 09 0c 10 15 1c 25 32 40 LS...........%2@ e500: 50 64 82 a5 cd ff 08 42 52 54 42 12 43 05 03 12 Pd.....BRTB.C... e510: 22 10 0a 04 0a 07 0a 09 0a 0c 0a 10 0a 15 0a 1c "............... e520: 0a 25 0a 32 0a 40 0a 50 0a 64 0a 82 0a a5 0a cd .%.2.@.P.d...... e530: 0a ff 12 22 10 0a 04 0a 07 0a 09 0a 0c 0a 10 0a ..."............ e540: 15 0a 1c 0a 25 0a 32 0a 40 0a 50 0a 64 0a 82 0a ....%.2.@.P.d... e550: a5 0a cd 0a ff 12 09 05 0a dc 0a dc 00 00 00 08 ................ e560: 5f 53 30 5f 12 06 04 00 00 00 00 a0 11 53 53 31 _S0_.........SS1 e570: 5f 08 5f 53 31 5f 12 06 04 01 00 00 00 a0 12 53 _._S1_.........S e580: 53 33 5f 08 5f 53 33 5f 12 07 04 0a 05 00 00 00 S3_._S3_........ e590: a0 12 53 53 34 5f 08 5f 53 34 5f 12 07 04 0a 06 ..SS4_._S4_..... e5a0: 00 00 00 08 5f 53 35 5f 12 07 04 0a 07 00 00 00 ...._S5_........ fwts-test/dbg2-0001/dbg2-0001.log000066400000000000000000000033741465205512700161270ustar00rootroot00000000000000dbg2 dbg2: DBG2 (Debug Port Table 2) test. dbg2 ---------------------------------------------------------- dbg2 Test 1 of 2: DBG2 (Debug Port Table 2) test. dbg2 DBG2 Table: dbg2 Info Offset: 0x0000002c dbg2 Info Count: 0x00000001 dbg2 dbg2 DBG2 Info Structure 0: dbg2 Revision: 0x00 dbg2 Length: 0x003f dbg2 Number of Registers 0x01 dbg2 Namespace String Length: 0x0019 dbg2 Namespace String Offset: 0x0026 dbg2 OEM Data Length: 0x0000 dbg2 OEM Data Offset: 0x0000 dbg2 Port Type: 0x8002 (USB) dbg2 Port Subtype: 0x0001 (EHCI controller) dbg2 Reserved: 0x0000 dbg2 Base Address Offset: 0x0016 dbg2 Address Size Offset: 0x0022 dbg2 dbg2 Namespace String: '\_SB.PCI0.EHC1.HUB0.PRT1' dbg2 Address Space ID: 0x00 dbg2 Register Bit Width 0x20 dbg2 Register Bit Offset 0x00 dbg2 Access Size 0x00 dbg2 Address 0x00000000f18190a0 dbg2 dbg2 PASSED: Test 1, No issues found in DBG2 table. dbg2 dbg2 Test 2 of 2: DBG2 ARM BSA compliant UART test, dbg2 dbg2 ========================================================== dbg2 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 dbg2 info only. dbg2 ========================================================== fwts-test/dbg2-0001/dbg2-0002.log000066400000000000000000000060061465205512700161230ustar00rootroot00000000000000dbg2 dbg2: DBG2 (Debug Port Table 2) test. dbg2 ---------------------------------------------------------- dbg2 Test 1 of 2: DBG2 (Debug Port Table 2) test. dbg2 DBG2 Table: dbg2 Info Offset: 0x0000002c dbg2 Info Count: 0x00000001 dbg2 dbg2 DBG2 Info Structure 0: dbg2 Revision: 0x01 dbg2 Length: 0x003f dbg2 Number of Registers 0x07 dbg2 Namespace String Length: 0x0019 dbg2 Namespace String Offset: 0x0026 dbg2 OEM Data Length: 0x4030 dbg2 OEM Data Offset: 0xfeff dbg2 Port Type: 0x8002 (USB) dbg2 Port Subtype: 0x0008 ((Reserved)) dbg2 Reserved: 0x00f0 dbg2 Base Address Offset: 0x0016 dbg2 Address Size Offset: 0x3022 dbg2 dbg2 FAILED [HIGH] DBG2BadFieldValue: Test 1, DBG2 Info dbg2 Structure Revision field must be 0, got 1 instead. dbg2 FAILED [HIGH] DBG2PortSubTypeReserved: Test 1, DBG2 Info dbg2 Structure Port Subtype is 0x0008 which is a reserved type. dbg2 FAILED [MEDIUM] DBG2ReservedNonZero: Test 1, DBG2 Info dbg2 Structure Reserved field must be zero, got 0x00f0 instead dbg2 Namespace String: '\_SB.PCI0.EHC1.HUB0.PRT2' dbg2 FAILED [HIGH] DBG2DeviceNotFound: Test 1, DBG2 Device dbg2 '\_SB.PCI0.EHC1.HUB0.PRT2' not found in ACPI object name dbg2 space. dbg2 FAILED [HIGH] DBG2TooShort: Test 1, DBG2 table too short, dbg2 expecting 65323 bytes, instead got 107 bytes for a DBG2 dbg2 table and DBG2 Info Structure OEM Data Offset dbg2 FAILED [HIGH] DBG2TooShort: Test 1, DBG2 table too short, dbg2 expecting 81755 bytes, instead got 107 bytes for a DBG2 dbg2 table and DBG2 Info Structure OEM Data End dbg2 FAILED [HIGH] DBG2TooShort: Test 1, DBG2 table too short, dbg2 expecting 150 bytes, instead got 107 bytes for a DBG2 dbg2 table and DBG2 Info Structure Base Address End dbg2 FAILED [HIGH] DBG2TooShort: Test 1, DBG2 table too short, dbg2 expecting 12366 bytes, instead got 107 bytes for a DBG2 dbg2 table and DBG2 Info Structure Address Size Offset dbg2 FAILED [HIGH] DBG2TooShort: Test 1, DBG2 table too short, dbg2 expecting 12394 bytes, instead got 107 bytes for a DBG2 dbg2 table and DBG2 Info Structure Address Size End dbg2 dbg2 Test 2 of 2: DBG2 ARM BSA compliant UART test, dbg2 dbg2 ========================================================== dbg2 0 passed, 9 failed, 0 warning, 0 aborted, 0 skipped, 0 dbg2 info only. dbg2 ========================================================== fwts-test/dbg2-0001/test-0001.sh000077500000000000000000000010011465205512700161050ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against DBG2" NAME=test-0001.sh TMPLOG=$TMP/dbg2.log.$$ $FWTS --show-tests | grep DBG2 > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/dbg2-0001/acpidump-0001.log dbg2 - | cut -c7- | grep "^dbg2" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/dbg2-0001/dbg2-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/dbg2-0001/test-0002.sh000077500000000000000000000010111465205512700161070ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid DBG2" NAME=test-0001.sh TMPLOG=$TMP/dbg2.log.$$ $FWTS --show-tests | grep DBG2 > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/dbg2-0001/acpidump-0002.log dbg2 - | cut -c7- | grep "^dbg2" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/dbg2-0001/dbg2-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/dbgp-0001/000077500000000000000000000000001465205512700143175ustar00rootroot00000000000000fwts-test/dbgp-0001/acpidump-0001.log000066400000000000000000000034621465205512700172070ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... DBGP @ 0x00000000 0000: 44 42 47 50 34 00 00 00 01 82 4c 45 4e 4f 56 4f DBGP4.....LENOVO 0010: 54 50 2d 36 41 20 20 20 70 05 00 00 4d 53 46 54 TP-6A p...MSFT 0020: 97 00 00 00 00 00 00 00 01 08 00 00 60 02 00 00 ............`... 0030: 00 00 00 00 fwts-test/dbgp-0001/acpidump-0002.log000066400000000000000000000034621465205512700172100ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... DBGP @ 0x00000000 0000: 44 42 47 50 34 00 00 00 01 82 4c 45 4e 4f 56 4f DBGP4.....LENOVO 0010: 54 50 2d 36 41 20 20 20 70 05 00 00 4d 53 46 54 TP-6A p...MSFT 0020: 97 00 00 00 04 00 00 00 05 00 00 00 60 02 00 00 ............`... 0030: 00 00 00 00 fwts-test/dbgp-0001/dbgp-0001.log000066400000000000000000000017211465205512700163150ustar00rootroot00000000000000dbgp dbgp: DBGP (Debug Port) Table test. dbgp ---------------------------------------------------------- dbgp Test 1 of 1: DBGP (Debug Port) Table test. dbgp DBGP Table: dbgp Interface Type 0x00 (Full 16550 interface) dbgp Reserved: 0x00000000 dbgp Base Address: dbgp Address Space ID: 0x01 dbgp Register Bit Width 0x08 dbgp Register Bit Offset 0x00 dbgp Access Size 0x00 dbgp Address 0x0000000000000260 dbgp dbgp PASSED: Test 1, No issues found in DBGP table. dbgp dbgp ========================================================== dbgp 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 dbgp info only. dbgp ========================================================== fwts-test/dbgp-0001/dbgp-0002.log000066400000000000000000000031271465205512700163200ustar00rootroot00000000000000dbgp dbgp: DBGP (Debug Port) Table test. dbgp ---------------------------------------------------------- dbgp Test 1 of 1: DBGP (Debug Port) Table test. dbgp DBGP Table: dbgp Interface Type 0x04 (Reserved) dbgp Reserved: 0x00000000 dbgp Base Address: dbgp Address Space ID: 0x05 dbgp Register Bit Width 0x00 dbgp Register Bit Offset 0x00 dbgp Access Size 0x00 dbgp Address 0x0000000000000260 dbgp dbgp FAILED [HIGH] DBGPReservedInterfaceType: Test 1, DBGP dbgp Interface Type is 0x04 which is a reserved interface type. dbgp Expecting 0x00 (Full 16550) or 0x01 (16550 subset) dbgp FAILED [HIGH] DBGPBaseAddrBitWidthZero: Test 1, DBGP Base dbgp Address Bit Width is zero. dbgp FAILED [HIGH] DBGPBadAddressSpaceId: Test 1, DBGP Base dbgp Address Space ID must be one of System Memory (0x0), dbgp System I/O (0x1), PCI Configuration (0x2), Embedded dbgp Controller (0x3), SMBus (0x4), Platform Communications dbgp Channel (0xa) or Functional Fixed Hardware (0x7f), got dbgp SystemCMOS (0x5) instead. dbgp dbgp ========================================================== dbgp 0 passed, 3 failed, 0 warning, 0 aborted, 0 skipped, 0 dbgp info only. dbgp ========================================================== fwts-test/dbgp-0001/test-0001.sh000077500000000000000000000010011465205512700162030ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against DBGP" NAME=test-0001.sh TMPLOG=$TMP/dbgp.log.$$ $FWTS --show-tests | grep DBGP > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/dbgp-0001/acpidump-0001.log dbgp - | cut -c7- | grep "^dbgp" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/dbgp-0001/dbgp-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/dbgp-0001/test-0002.sh000077500000000000000000000010111465205512700162050ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid DBGP" NAME=test-0001.sh TMPLOG=$TMP/dbgp.log.$$ $FWTS --show-tests | grep DBGP > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/dbgp-0001/acpidump-0002.log dbgp - | cut -c7- | grep "^dbgp" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/dbgp-0001/dbgp-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/disassemble-0001/000077500000000000000000000000001465205512700156765ustar00rootroot00000000000000fwts-test/disassemble-0001/DSDT0.dsl.original000066400000000000000000007442701465205512700210410ustar00rootroot00000000000000/* * Intel ACPI Component Architecture * AML/ASL+ Disassembler version 20181213 (64-bit version) * Copyright (c) 2000 - 2018 Intel Corporation * * Disassembling to non-symbolic legacy ASL operators * * Disassembly of /tmp/fwts_tmp_table_26691_DSDT_2.dsl, Thu Dec 13 17:05:02 2018 * * Original Table Header: * Signature "DSDT" * Length 0x00005FF4 (24564) * Revision 0x02 * Checksum 0x11 * OEM ID "TOSCPL" * OEM Table ID "CRESTLNE" * OEM Revision 0x06040000 (100925440) * Compiler ID "INTL" * Compiler Version 0x20060608 (537265672) */ DefinitionBlock ("", "DSDT", 2, "TOSCPL", "CRESTLNE", 0x06040000) { External (_PR_.CPU0._PPC, UnknownObj) External (CFGD, IntObj) External (PDC0, IntObj) External (PDC1, IntObj) Name (Z000, One) Name (Z001, 0x02) Name (Z002, 0x04) Name (Z003, 0x08) Name (Z004, Zero) Name (Z005, 0x0F) Name (Z006, 0x0D) Name (Z007, 0x0B) Name (Z008, 0x09) Name (ECDY, 0x07) Mutex (MUTX, 0x00) OperationRegion (PRT0, SystemIO, 0x80, 0x04) Field (PRT0, DWordAcc, Lock, Preserve) { P80H, 32 } Method (P8XH, 2, Serialized) { If (LEqual (Arg0, Zero)) { Store (Or (And (P80D, 0xFFFFFF00), Arg1), P80D) /* \P80D */ } If (LEqual (Arg0, One)) { Store (Or (And (P80D, 0xFFFF00FF), ShiftLeft (Arg1, 0x08)), P80D) /* \P80D */ } If (LEqual (Arg0, 0x02)) { Store (Or (And (P80D, 0xFF00FFFF), ShiftLeft (Arg1, 0x10)), P80D) /* \P80D */ } If (LEqual (Arg0, 0x03)) { Store (Or (And (P80D, 0x00FFFFFF), ShiftLeft (Arg1, 0x18)), P80D) /* \P80D */ } Store (P80D, P80H) /* \P80H */ } Method (_PIC, 1, NotSerialized) // _PIC: Interrupt Model { Store (Arg0, GPIC) /* \GPIC */ } Method (_PTS, 1, NotSerialized) // _PTS: Prepare To Sleep { Store (Zero, P80D) /* \P80D */ P8XH (Zero, Arg0) If (LEqual (Arg0, 0x03)) { Store (One, \_SB.PCI0.LPCB.EC0.S3LD) } If (LEqual (Arg0, 0x04)) { Store (One, \_SB.PCI0.LPCB.EC0.S3LD) \_SB.PCI0.LPCB.PHSS (0x0E) } } Method (_WAK, 1, NotSerialized) // _WAK: Wake { P8XH (One, 0xAB) If (LOr (LEqual (Arg0, 0x03), LEqual (Arg0, 0x04))) { If (And (CFGD, 0x01000000)) { If (LAnd (And (CFGD, 0xF0), LEqual (OSYS, 0x07D1))) { TRAP (0x3D) } } } If (LEqual (RP1D, Zero)) { Notify (\_SB.PCI0.RP01, Zero) // Bus Check } If (LEqual (RP2D, Zero)) { Notify (\_SB.PCI0.RP02, Zero) // Bus Check } If (LEqual (RP3D, Zero)) { Notify (\_SB.PCI0.RP03, Zero) // Bus Check } If (LEqual (RP4D, Zero)) { Notify (\_SB.PCI0.RP04, Zero) // Bus Check } If (LEqual (RP5D, Zero)) { Notify (\_SB.PCI0.RP05, Zero) // Bus Check } If (LEqual (RP6D, Zero)) { Notify (\_SB.PCI0.RP06, Zero) // Bus Check } If (LEqual (Arg0, 0x03)) { P8XH (Zero, 0x30) TRAP (0x46) } If (LEqual (Arg0, 0x04)) { P8XH (Zero, 0x40) \_SB.PCI0.LPCB.PHSS (0x0F) Store (WAKF, Local0) Store (Zero, WAKF) /* \WAKF */ And (Local0, 0x05, Local0) If (LEqual (Local0, One)) { P8XH (Zero, 0x41) Notify (\_SB.PWRB, 0x02) // Device Wake } If (DTSE) { TRAP (0x47) If (LAnd (\_SB.PCI0.LPCB.ECOK (), LEqual (ECDY, Zero))) { If (LGreaterEqual (DTS1, DTS2)) { Store (DTS1, \_SB.PCI0.LPCB.EC0.SKTA) } Else { Store (DTS2, \_SB.PCI0.LPCB.EC0.SKTA) } } Else { \_SB.PCI0.LPCB.PHSS (0x10) } } } \_PR.RPPC () Return (Package (0x02) { Zero, Zero }) } Method (GETB, 3, Serialized) { Multiply (Arg0, 0x08, Local0) Multiply (Arg1, 0x08, Local1) CreateField (Arg2, Local0, Local1, TBF3) Return (TBF3) /* \GETB.TBF3 */ } Method (PNOT, 0, Serialized) { If (MPEN) { If (And (PDC0, 0x08)) { Notify (\_PR.CPU0, 0x80) // Performance Capability Change If (And (PDC0, 0x10)) { Sleep (0x64) Notify (\_PR.CPU0, 0x81) // C-State Change } } If (And (PDC1, 0x08)) { Notify (\_PR.CPU1, 0x80) // Performance Capability Change If (And (PDC1, 0x10)) { Sleep (0x64) Notify (\_PR.CPU1, 0x81) // C-State Change } } } Else { Notify (\_PR.CPU0, 0x80) // Performance Capability Change Sleep (0x64) Notify (\_PR.CPU0, 0x81) // C-State Change } } Method (TRAP, 1, Serialized) { Store (Arg0, SMIF) /* \SMIF */ Store (Zero, TRP0) /* \TRP0 */ Return (SMIF) /* \SMIF */ } Scope (_SB) { Method (_INI, 0, NotSerialized) // _INI: Initialize { Store (0x9999, MARK) /* \MARK */ If (DTSE) { TRAP (0x47) ^PCI0.LPCB.PHSS (0x10) } Store (0x07D0, OSYS) /* \OSYS */ If (CondRefOf (_OSI, Local0)) { If (_OSI ("Linux")) { Store (One, LINX) /* \LINX */ Store (Zero, ECDY) /* \ECDY */ } If (_OSI ("Windows 2001")) { Store (0x07D1, OSYS) /* \OSYS */ } If (_OSI ("Windows 2001 SP1")) { Store (0x07D1, OSYS) /* \OSYS */ } If (_OSI ("Windows 2001 SP2")) { Store (0x07D2, OSYS) /* \OSYS */ } If (_OSI ("Windows 2006")) { Store (0x07D6, OSYS) /* \OSYS */ } } If (LAnd (MPEN, LEqual (OSYS, 0x07D1))) { TRAP (0x3D) } TRAP (0x2B) } } OperationRegion (GNVS, SystemMemory, 0xBF6E2DBC, 0x0100) Field (GNVS, AnyAcc, Lock, Preserve) { OSYS, 16, SMIF, 8, PRM0, 8, PRM1, 8, SCIF, 8, PRM2, 8, PRM3, 8, LCKF, 8, PRM4, 8, PRM5, 8, P80D, 32, LIDS, 8, PWRS, 8, DBGS, 8, LINX, 8, Offset (0x14), ACT1, 8, ACTT, 8, PSVT, 8, TC1V, 8, TC2V, 8, TSPV, 8, CRTT, 8, DTSE, 8, DTS1, 8, DTS2, 8, Offset (0x28), APIC, 8, MPEN, 8, PCP0, 8, PCP1, 8, PPCM, 8, Offset (0x32), CMAP, 8, CMBP, 8, LPTP, 8, FDCP, 8, Offset (0x3C), IGDS, 8, TLST, 8, CADL, 8, PADL, 8, CSTE, 16, NSTE, 16, SSTE, 16, NDID, 8, DID1, 32, DID2, 32, DID3, 32, DID4, 32, DID5, 32, Offset (0x67), BLCS, 8, BRTL, 8, ALSE, 8, ALAF, 8, LLOW, 8, LHIH, 8, Offset (0x6E), EMAE, 8, EMAP, 16, EMAL, 16, Offset (0x74), MEFE, 8, Offset (0x78), TPMP, 8, TPME, 8, Offset (0x82), GTF0, 56, GTF2, 56, IDEM, 8, GTF1, 56, Offset (0xAA), ASLB, 32, IBTT, 8, IPAT, 8, ITVF, 8, ITVM, 8, IPSC, 8, IBLC, 8, IBIA, 8, ISSC, 8, I409, 8, I509, 8, I609, 8, I709, 8, IDMM, 8, IDMS, 8, IF1E, 8, HVCO, 8, NXD1, 32, NXD2, 32, MARK, 16, BRAD, 8, BTEN, 8, VVEN, 8, BGTL, 8, TMEE, 1, Offset (0xCD), SCU0, 1, SCU1, 1, SCU2, 1, SCU3, 1, Offset (0xCE), XKSP, 1, XKIN, 1, XKID, 1, XKOK, 1, Offset (0xCF), BGU1, 8, BST1, 8, BFC1, 16, WKLN, 8, WAKF, 8, DSMD, 8, BAYS, 8, HAPE, 1, Offset (0xD8), DTSM, 1, Offset (0xD9), ODT1, 8, ODT2, 8, DTSW, 8 } Name (DSEN, One) Name (ECON, Zero) Name (GPIC, Zero) Name (CTYP, Zero) Name (L01C, Zero) Name (VFN0, Zero) Name (VFN1, Zero) Scope (_GPE) { Method (_L01, 0, NotSerialized) // _Lxx: Level-Triggered GPE, xx=0x00-0xFF { Add (L01C, One, L01C) /* \L01C */ P8XH (Zero, One) P8XH (One, L01C) If (LAnd (LEqual (RP1D, Zero), \_SB.PCI0.RP01.HPSX)) { Sleep (0x64) If (\_SB.PCI0.RP01.PDCX) { Store (One, \_SB.PCI0.RP01.PDCX) Store (One, \_SB.PCI0.RP01.HPSX) Notify (\_SB.PCI0.RP01, Zero) // Bus Check } Else { Store (One, \_SB.PCI0.RP01.HPSX) } } If (LAnd (LEqual (RP2D, Zero), \_SB.PCI0.RP02.HPSX)) { Sleep (0x64) If (\_SB.PCI0.RP02.PDCX) { Store (One, \_SB.PCI0.RP02.PDCX) Store (One, \_SB.PCI0.RP02.HPSX) Notify (\_SB.PCI0.RP02, Zero) // Bus Check } Else { Store (One, \_SB.PCI0.RP02.HPSX) } } If (LAnd (LEqual (RP3D, Zero), \_SB.PCI0.RP03.HPSX)) { Sleep (0x64) If (\_SB.PCI0.RP03.PDCX) { Store (One, \_SB.PCI0.RP03.PDCX) Store (One, \_SB.PCI0.RP03.HPSX) Notify (\_SB.PCI0.RP03, Zero) // Bus Check } Else { Store (One, \_SB.PCI0.RP03.HPSX) } } If (LAnd (LEqual (RP4D, Zero), \_SB.PCI0.RP04.HPSX)) { Sleep (0x64) If (\_SB.PCI0.RP04.PDCX) { Store (One, \_SB.PCI0.RP04.PDCX) Store (One, \_SB.PCI0.RP04.HPSX) Notify (\_SB.PCI0.RP04, Zero) // Bus Check } Else { Store (One, \_SB.PCI0.RP04.HPSX) } } If (LAnd (LEqual (RP5D, Zero), \_SB.PCI0.RP05.HPSX)) { Sleep (0x64) If (\_SB.PCI0.RP05.PDCX) { Store (One, \_SB.PCI0.RP05.PDCX) Store (One, \_SB.PCI0.RP05.HPSX) Notify (\_SB.PCI0.RP05, Zero) // Bus Check } Else { Store (One, \_SB.PCI0.RP05.HPSX) } } If (LAnd (LEqual (RP6D, Zero), \_SB.PCI0.RP06.HPSX)) { Sleep (0x64) If (\_SB.PCI0.RP06.PDCX) { Store (One, \_SB.PCI0.RP06.PDCX) Store (One, \_SB.PCI0.RP06.HPSX) Notify (\_SB.PCI0.RP06, Zero) // Bus Check } Else { Store (One, \_SB.PCI0.RP06.HPSX) } } } Method (_L02, 0, NotSerialized) // _Lxx: Level-Triggered GPE, xx=0x00-0xFF { Store (Zero, GPEC) /* \GPEC */ If (\_SB.PCI0.LPCB.ECOK ()) { If (LEqual (DTSW, One)) { If (LGreaterEqual (DTS1, DTS2)) { Store (DTS1, \_SB.PCI0.LPCB.EC0.SKTA) } Else { Store (DTS2, \_SB.PCI0.LPCB.EC0.SKTA) } } ElseIf (LGreaterEqual (ODT1, ODT2)) { Store (ODT1, \_SB.PCI0.LPCB.EC0.SKTA) } Else { Store (ODT2, \_SB.PCI0.LPCB.EC0.SKTA) } } Else { \_SB.PCI0.LPCB.PHSS (0x10) } } Method (_L03, 0, NotSerialized) // _Lxx: Level-Triggered GPE, xx=0x00-0xFF { Notify (\_SB.PCI0.USB1, 0x02) // Device Wake } Method (_L04, 0, NotSerialized) // _Lxx: Level-Triggered GPE, xx=0x00-0xFF { Notify (\_SB.PCI0.USB2, 0x02) // Device Wake } Method (_L05, 0, NotSerialized) // _Lxx: Level-Triggered GPE, xx=0x00-0xFF { Notify (\_SB.PCI0.USB5, 0x02) // Device Wake } Method (_L06, 0, NotSerialized) // _Lxx: Level-Triggered GPE, xx=0x00-0xFF { If (\_SB.PCI0.GFX0.GSSE) { \_SB.PCI0.GFX0.GSCI () } Else { Store (One, SCIS) /* \SCIS */ } } Method (_L09, 0, NotSerialized) // _Lxx: Level-Triggered GPE, xx=0x00-0xFF { If (\_SB.PCI0.RP01.PSPX) { Store (One, \_SB.PCI0.RP01.PSPX) Store (One, \_SB.PCI0.RP01.PMSX) Notify (\_SB.PCI0.RP01, 0x02) // Device Wake } If (\_SB.PCI0.RP02.PSPX) { Store (One, \_SB.PCI0.RP02.PSPX) Store (One, \_SB.PCI0.RP02.PMSX) Notify (\_SB.PCI0.RP02, 0x02) // Device Wake } If (\_SB.PCI0.RP03.PSPX) { Store (One, \_SB.PCI0.RP03.PSPX) Store (One, \_SB.PCI0.RP03.PMSX) Notify (\_SB.PCI0.RP03, 0x02) // Device Wake } If (\_SB.PCI0.RP04.PSPX) { Store (One, \_SB.PCI0.RP04.PSPX) Store (One, \_SB.PCI0.RP04.PMSX) Notify (\_SB.PCI0.RP04, 0x02) // Device Wake } If (\_SB.PCI0.RP05.PSPX) { Store (One, \_SB.PCI0.RP05.PSPX) Store (One, \_SB.PCI0.RP05.PMSX) Notify (\_SB.PCI0.RP05, 0x02) // Device Wake } If (\_SB.PCI0.RP06.PSPX) { Store (One, \_SB.PCI0.RP06.PSPX) Store (One, \_SB.PCI0.RP06.PMSX) Notify (\_SB.PCI0.RP06, 0x02) // Device Wake } } Method (_L0B, 0, NotSerialized) // _Lxx: Level-Triggered GPE, xx=0x00-0xFF { Notify (\_SB.PCI0.PCIB, 0x02) // Device Wake } Method (_L0C, 0, NotSerialized) // _Lxx: Level-Triggered GPE, xx=0x00-0xFF { Notify (\_SB.PCI0.USB3, 0x02) // Device Wake } Method (_L0D, 0, NotSerialized) // _Lxx: Level-Triggered GPE, xx=0x00-0xFF { If (\_SB.PCI0.EHC1.PMES) { Store (One, \_SB.PCI0.EHC1.PMES) Notify (\_SB.PCI0.EHC1, 0x02) // Device Wake } If (\_SB.PCI0.EHC2.PMES) { Store (One, \_SB.PCI0.EHC2.PMES) Notify (\_SB.PCI0.EHC2, 0x02) // Device Wake } If (\_SB.PCI0.HDEF.PMES) { Store (One, \_SB.PCI0.HDEF.PMES) Notify (\_SB.PCI0.HDEF, 0x02) // Device Wake } } Method (_L0E, 0, NotSerialized) // _Lxx: Level-Triggered GPE, xx=0x00-0xFF { Notify (\_SB.PCI0.USB4, 0x02) // Device Wake } Method (_L1B, 0, NotSerialized) // _Lxx: Level-Triggered GPE, xx=0x00-0xFF { Not (LPOL, LPOL) /* \LPOL */ Notify (\_SB.LID0, 0x80) // Status Change } } Scope (_PR) { Processor (CPU0, 0x00, 0x00001010, 0x06){} Processor (CPU1, 0x01, 0x00001010, 0x06){} Method (RPPC, 0, NotSerialized) { If (LEqual (OSYS, 0x07D2)) { If (And (CFGD, One)) { If (LGreater (^CPU0._PPC, Zero)) { Subtract (^CPU0._PPC, One, ^CPU0._PPC) /* External reference */ PNOT () Add (^CPU0._PPC, One, ^CPU0._PPC) /* External reference */ PNOT () } Else { Add (^CPU0._PPC, One, ^CPU0._PPC) /* External reference */ PNOT () Subtract (^CPU0._PPC, One, ^CPU0._PPC) /* External reference */ PNOT () } } } } } Name (FWSO, "FWSO") Name (_PSC, Zero) // _PSC: Power State Current Method (_PS0, 0, NotSerialized) // _PS0: Power State 0 { Store (_PSC, Local0) Store (Zero, _PSC) /* \_PSC */ } Method (_PS3, 0, NotSerialized) // _PS3: Power State 3 { Store (0x03, _PSC) /* \_PSC */ } Scope (_SB) { Device (AMW0) { Name (_HID, "pnp0c14") // _HID: Hardware ID Name (_UID, Zero) // _UID: Unique ID Name (_WDG, Buffer (0x3C) { /* 0000 */ 0xA7, 0x1D, 0x85, 0x2E, 0x53, 0xD0, 0x5F, 0x49, // ....S._I /* 0008 */ 0x9D, 0xFA, 0x1A, 0x4A, 0xD6, 0x2E, 0x6A, 0x86, // ...J..j. /* 0010 */ 0x41, 0x43, 0x01, 0x00, 0x3B, 0x6D, 0x43, 0x71, // AC..;mCq /* 0018 */ 0xDD, 0xFB, 0x72, 0x4C, 0xBC, 0xB8, 0x43, 0x5B, // ..rL..C[ /* 0020 */ 0xFE, 0x0D, 0x64, 0xF9, 0x42, 0x43, 0x01, 0x00, // ..d.BC.. /* 0028 */ 0x21, 0x12, 0x90, 0x05, 0x66, 0xD5, 0xD1, 0x11, // !...f... /* 0030 */ 0xB2, 0xF0, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0x10, // ......). /* 0038 */ 0x42, 0x41, 0x01, 0x00 // BA.. }) Name (STAC, Buffer (0x04) { 0x01, 0x14, 0x03, 0x00 // .... }) Method (WQAC, 1, NotSerialized) { Store ("MXMTCConfigData", Debug) Return (STAC) /* \_SB_.AMW0.STAC */ } Name (STBC, Buffer (0x04) { 0x01, 0x00, 0x00, 0x00 // .... }) Method (WQBC, 1, NotSerialized) { Store ("Get MXMTCControlData: STBC = ", Debug) Store (STBC, Debug) Return (STBC) /* \_SB_.AMW0.STBC */ } Method (WSBC, 2, NotSerialized) { Store (Arg1, STBC) /* \_SB_.AMW0.STBC */ Store ("Set MXMTCControlData: STBC = ", Debug) Store (STBC, Debug) If (LEqual (^^PCI0.LPCB.ECOK (), One)) { Store (DerefOf (Index (STBC, One)), ^^PCI0.LPCB.EC0.SKTC) /* \_SB_.PCI0.LPCB.EC0_.SKTC */ } } Name (WQBA, Buffer (0x02AE) { /* 0000 */ 0x46, 0x4F, 0x4D, 0x42, 0x01, 0x00, 0x00, 0x00, // FOMB.... /* 0008 */ 0x9E, 0x02, 0x00, 0x00, 0xC0, 0x0B, 0x00, 0x00, // ........ /* 0010 */ 0x44, 0x53, 0x00, 0x01, 0x1A, 0x7D, 0xDA, 0x54, // DS...}.T /* 0018 */ 0x28, 0xD9, 0x85, 0x00, 0x01, 0x06, 0x18, 0x42, // (......B /* 0020 */ 0x10, 0x07, 0x10, 0x0A, 0x4B, 0x61, 0x02, 0xC9, // ....Ka.. /* 0028 */ 0x21, 0x52, 0x3C, 0x18, 0x94, 0x05, 0x10, 0x43, // !R<....C /* 0030 */ 0x88, 0x57, 0x04, 0x44, 0x04, 0x84, 0xBC, 0x0A, // .W.D.... /* 0038 */ 0xB0, 0x29, 0xC0, 0x24, 0x88, 0xFA, 0xF7, 0x87, // .).$.... /* 0040 */ 0x28, 0x09, 0x0E, 0x25, 0x04, 0x42, 0x12, 0x05, // (..%.B.. /* 0048 */ 0x98, 0x17, 0xA0, 0x5B, 0x80, 0x61, 0x01, 0xB6, // ...[.a.. /* 0050 */ 0x05, 0x98, 0x16, 0xE0, 0x18, 0x92, 0x4A, 0x03, // ......J. /* 0058 */ 0xA7, 0x04, 0x96, 0x02, 0x21, 0xA1, 0x02, 0x94, // ....!... /* 0060 */ 0x0B, 0xF0, 0x2D, 0x40, 0x3B, 0xA2, 0x24, 0x0B, // ..-@;.$. /* 0068 */ 0xB0, 0x0C, 0x23, 0x02, 0x8F, 0x82, 0xA1, 0x71, // ..#....q /* 0070 */ 0x68, 0xEC, 0x30, 0x2C, 0x13, 0x4C, 0x83, 0x38, // h.0,.L.8 /* 0078 */ 0x8C, 0xB2, 0x91, 0x45, 0x60, 0xDC, 0x4E, 0x05, // ...E`.N. /* 0080 */ 0xC8, 0x15, 0x20, 0x4C, 0x80, 0x78, 0x54, 0x61, // .. L.xTa /* 0088 */ 0x34, 0x07, 0x45, 0xE0, 0x42, 0x63, 0x64, 0x40, // 4.E.Bcd@ /* 0090 */ 0xC8, 0xA3, 0x00, 0xAB, 0xA3, 0xD0, 0xA4, 0x12, // ........ /* 0098 */ 0xD8, 0xBD, 0x00, 0x65, 0x02, 0x2C, 0x0A, 0x10, // ...e.,.. /* 00A0 */ 0x27, 0xC0, 0x9A, 0x00, 0x63, 0x48, 0x32, 0x28, // '...cH2( /* 00A8 */ 0x40, 0x9B, 0x00, 0x5B, 0x20, 0x42, 0x0F, 0xD4, // @..[ B.. /* 00B0 */ 0x19, 0x8A, 0x46, 0x70, 0x02, 0x51, 0x6A, 0x46, // ..Fp.QjF /* 00B8 */ 0x11, 0x48, 0xAC, 0x1A, 0x01, 0x85, 0x12, 0x34, // .H.....4 /* 00C0 */ 0x46, 0xB0, 0x10, 0x81, 0xC2, 0x86, 0x37, 0x46, // F.....7F /* 00C8 */ 0x98, 0x03, 0x88, 0xD1, 0xFE, 0x20, 0x48, 0x20, // ..... H /* 00D0 */ 0x05, 0xE3, 0x66, 0x91, 0x46, 0x83, 0x1A, 0x6B, // ..f.F..k /* 00D8 */ 0x82, 0x63, 0xF7, 0x68, 0x4E, 0xB8, 0x73, 0x01, // .c.hN.s. /* 00E0 */ 0xD2, 0xE7, 0x26, 0x90, 0xA3, 0x3B, 0xB8, 0x3A, // ..&..;.: /* 00E8 */ 0x07, 0x4D, 0x86, 0xC7, 0xB0, 0x1E, 0x06, 0xD8, // .M...... /* 00F0 */ 0x29, 0x00, 0xEF, 0x1A, 0x50, 0xD3, 0x3F, 0x78, // )...P.?x /* 00F8 */ 0x26, 0x08, 0x0E, 0x35, 0x44, 0x8F, 0x3A, 0xDC, // &..5D.:. /* 0100 */ 0x09, 0x1C, 0xFB, 0x91, 0x30, 0x88, 0xB3, 0x3B, // ....0..; /* 0108 */ 0x6E, 0xAC, 0xC3, 0xC9, 0x68, 0xD0, 0xA5, 0x0A, // n...h... /* 0110 */ 0x30, 0x7B, 0x00, 0xD0, 0xD0, 0x12, 0x9C, 0xF6, // 0{...... /* 0118 */ 0x99, 0x84, 0x7E, 0x0F, 0x38, 0x9F, 0x9E, 0x21, // ..~.8..! /* 0120 */ 0x89, 0xFC, 0x41, 0xA0, 0x46, 0xE6, 0xFF, 0x3F, // ..A.F..? /* 0128 */ 0xB4, 0xC7, 0x78, 0x5A, 0x31, 0x43, 0x3E, 0x0B, // ..xZ1C>. /* 0130 */ 0x1C, 0x16, 0x13, 0x0B, 0xA1, 0x4D, 0x6A, 0x3C, // .....Mj< /* 0138 */ 0x40, 0x40, 0xE1, 0xD1, 0x40, 0x08, 0x6F, 0x06, // @@..@.o. /* 0140 */ 0x9E, 0xAF, 0x09, 0x46, 0x86, 0x90, 0x93, 0xF1, // ...F.... /* 0148 */ 0xA0, 0x06, 0xE0, 0x41, 0xD7, 0x3A, 0x32, 0x8D, // ...A.:2. /* 0150 */ 0x27, 0xA6, 0x21, 0xCF, 0xE8, 0x00, 0x22, 0xBF, // '.!...". /* 0158 */ 0x32, 0x78, 0x0C, 0x41, 0x02, 0xF9, 0xC4, 0x60, // 2x.A...` /* 0160 */ 0xB8, 0xC7, 0x81, 0x13, 0x78, 0x02, 0xF0, 0x59, // ....x..Y /* 0168 */ 0x40, 0x10, 0x92, 0x00, 0x21, 0x51, 0xE3, 0xA7, // @...!Q.. /* 0170 */ 0x47, 0x08, 0x7E, 0x7A, 0x78, 0x93, 0x30, 0x28, // G.~zx.0( /* 0178 */ 0x1F, 0xD2, 0x99, 0xF9, 0x90, 0xE1, 0x11, 0xC2, // ........ /* 0180 */ 0x07, 0xC4, 0x7B, 0x9F, 0x3B, 0x19, 0xC1, 0x29, // ..{.;..) /* 0188 */ 0x7B, 0xA4, 0xE0, 0xB0, 0x7E, 0x0E, 0x20, 0xC0, // {...~. . /* 0190 */ 0xAF, 0x0F, 0x8F, 0x0D, 0x09, 0x7C, 0xAE, 0x08, // .....|.. /* 0198 */ 0x8C, 0x1D, 0xAA, 0xFD, 0x0A, 0x40, 0x08, 0x1E, // .....@.. /* 01A0 */ 0xED, 0x51, 0xE0, 0x54, 0x23, 0x1C, 0x2D, 0x78, // .Q.T#.-x /* 01A8 */ 0x08, 0x8A, 0x1C, 0x03, 0x4A, 0xCC, 0x18, 0x50, // ....J..P /* 01B0 */ 0x03, 0x38, 0x85, 0xD0, 0xE7, 0x73, 0x04, 0x47, // .8...s.G /* 01B8 */ 0x14, 0x25, 0xF6, 0x21, 0x19, 0xDA, 0x08, 0xE1, // .%.!.... /* 01C0 */ 0x1F, 0x39, 0x4E, 0xC1, 0xF7, 0x8B, 0x23, 0x3D, // .9N...#= /* 01C8 */ 0xAD, 0x23, 0x78, 0x91, 0xF0, 0x08, 0x30, 0xE1, // .#x...0. /* 01D0 */ 0xCE, 0x28, 0xA8, 0x38, 0x30, 0xF4, 0xFF, 0x7F, // .(.80... /* 01D8 */ 0x4C, 0x01, 0xDC, 0x7A, 0x3B, 0xA6, 0x80, 0x3E, // L..z;..> /* 01E0 */ 0xC0, 0x31, 0x05, 0x50, 0xFC, 0xFF, 0x3F, 0xA6, // .1.P..?. /* 01E8 */ 0x00, 0x87, 0xA8, 0xC7, 0x14, 0xF4, 0x40, 0x0C, // ......@. /* 01F0 */ 0x7C, 0x2E, 0xA1, 0x0D, 0xFF, 0x96, 0xC1, 0x8E, // |....... /* 01F8 */ 0x03, 0x87, 0x74, 0x6A, 0x8F, 0x28, 0x80, 0x29, // ..tj.(.) /* 0200 */ 0x79, 0x47, 0x14, 0x50, 0x8C, 0x14, 0xD6, 0xF1, // yG.P.... /* 0208 */ 0x04, 0x18, 0x05, 0x3C, 0x9B, 0xA0, 0x22, 0x1D, // ...<..". /* 0210 */ 0x4F, 0x80, 0xCE, 0xFF, 0xFF, 0x78, 0x02, 0x58, // O....x.X /* 0218 */ 0xB8, 0x9A, 0xBC, 0x92, 0x84, 0x7D, 0x1E, 0x78, // .....}.x /* 0220 */ 0x1D, 0x89, 0x14, 0xE3, 0x41, 0xE2, 0xB5, 0xE4, // ....A... /* 0228 */ 0xC1, 0x24, 0x46, 0x98, 0x08, 0x8F, 0x27, 0x1E, // .$F...'. /* 0230 */ 0x47, 0xC0, 0xB7, 0x82, 0x28, 0x91, 0x8E, 0x3E, // G...(..> /* 0238 */ 0xC4, 0x83, 0x49, 0x28, 0x63, 0x3E, 0xA3, 0x84, // ..I(c>.. /* 0240 */ 0x89, 0xF9, 0x04, 0x70, 0x22, 0xEF, 0x27, 0x46, // ...p".'F /* 0248 */ 0x0A, 0x73, 0x2A, 0x8F, 0x27, 0x2C, 0xC4, 0xF1, // .s*.',.. /* 0250 */ 0x04, 0xA0, 0x85, 0xE2, 0xE3, 0x09, 0x3A, 0x2C, // ......:, /* 0258 */ 0x84, 0xFE, 0xFF, 0xC7, 0x13, 0xDC, 0xE1, 0xC1, // ........ /* 0260 */ 0xA7, 0x0C, 0xFC, 0x85, 0x0C, 0xC6, 0xF9, 0x04, // ........ /* 0268 */ 0x30, 0x24, 0xF0, 0x7C, 0x02, 0xCA, 0xDB, 0x18, // 0$.|.... /* 0270 */ 0xE6, 0x80, 0x02, 0x8C, 0x14, 0xDA, 0xF4, 0xA9, // ........ /* 0278 */ 0xD1, 0xA8, 0x55, 0x83, 0x32, 0x35, 0xCA, 0x34, // ..U.25.4 /* 0280 */ 0xA8, 0xD5, 0xA7, 0x52, 0x63, 0xC6, 0x4C, 0x9C, // ...Rc.L. /* 0288 */ 0x52, 0xBC, 0x6C, 0x8D, 0xDF, 0xF2, 0x9E, 0x09, // R.l..... /* 0290 */ 0x02, 0xB1, 0x20, 0x0A, 0x81, 0x38, 0xCC, 0xF3, // .. ..8.. /* 0298 */ 0x42, 0x20, 0x96, 0xA2, 0x01, 0x84, 0x85, 0x06, // B ...... /* 02A0 */ 0xA1, 0x42, 0xA9, 0x05, 0xE2, 0x98, 0x20, 0x34, // .B.... 4 /* 02A8 */ 0x92, 0x0A, 0x10, 0xF6, 0xFF, 0x07 // ...... }) } Device (LID0) { Name (_HID, EisaId ("PNP0C0D") /* Lid Device */) // _HID: Hardware ID Method (_LID, 0, NotSerialized) // _LID: Lid Status { Return (LPOL) /* \LPOL */ } } Device (PWRB) { Name (_HID, EisaId ("PNP0C0C") /* Power Button Device */) // _HID: Hardware ID } Device (PCI0) { Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State { Return (0x02) } Method (_S4D, 0, NotSerialized) // _S4D: S4 Device State { Return (0x02) } Name (_HID, EisaId ("PNP0A08") /* PCI Express Bus */) // _HID: Hardware ID Name (_CID, EisaId ("PNP0A03") /* PCI Bus */) // _CID: Compatible ID Device (MCHC) { Name (_ADR, Zero) // _ADR: Address OperationRegion (HBUS, PCI_Config, 0x40, 0xC0) Field (HBUS, DWordAcc, NoLock, Preserve) { EPEN, 1, , 11, EPBR, 20, Offset (0x08), MHEN, 1, , 13, MHBR, 18, Offset (0x20), PXEN, 1, PXSZ, 2, , 23, PXBR, 6, Offset (0x28), DIEN, 1, , 11, DIBR, 20, Offset (0x30), IPEN, 1, , 11, IPBR, 20, Offset (0x50), , 4, PM0H, 2, Offset (0x51), PM1L, 2, , 2, PM1H, 2, Offset (0x52), PM2L, 2, , 2, PM2H, 2, Offset (0x53), PM3L, 2, , 2, PM3H, 2, Offset (0x54), PM4L, 2, , 2, PM4H, 2, Offset (0x55), PM5L, 2, , 2, PM5H, 2, Offset (0x56), PM6L, 2, , 2, PM6H, 2, Offset (0x57), , 7, HENA, 1, Offset (0x62), TUUD, 16, Offset (0x70), , 4, TLUD, 12 } } Name (BUF0, ResourceTemplate () { WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, 0x0000, // Granularity 0x0000, // Range Minimum 0x00FF, // Range Maximum 0x0000, // Translation Offset 0x0100, // Length ,, ) DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, 0x00000000, // Granularity 0x00000000, // Range Minimum 0x00000CF7, // Range Maximum 0x00000000, // Translation Offset 0x00000CF8, // Length ,, , TypeStatic, DenseTranslation) IO (Decode16, 0x0CF8, // Range Minimum 0x0CF8, // Range Maximum 0x01, // Alignment 0x08, // Length ) DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, 0x00000000, // Granularity 0x00000D00, // Range Minimum 0x0000FFFF, // Range Maximum 0x00000000, // Translation Offset 0x0000F300, // Length ,, , TypeStatic, DenseTranslation) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000A0000, // Range Minimum 0x000BFFFF, // Range Maximum 0x00000000, // Translation Offset 0x00020000, // Length ,, , AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000C0000, // Range Minimum 0x000C3FFF, // Range Maximum 0x00000000, // Translation Offset 0x00004000, // Length ,, _Y00, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000C4000, // Range Minimum 0x000C7FFF, // Range Maximum 0x00000000, // Translation Offset 0x00004000, // Length ,, _Y01, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000C8000, // Range Minimum 0x000CBFFF, // Range Maximum 0x00000000, // Translation Offset 0x00004000, // Length ,, _Y02, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000CC000, // Range Minimum 0x000CFFFF, // Range Maximum 0x00000000, // Translation Offset 0x00004000, // Length ,, _Y03, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000D0000, // Range Minimum 0x000D3FFF, // Range Maximum 0x00000000, // Translation Offset 0x00004000, // Length ,, _Y04, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000D4000, // Range Minimum 0x000D7FFF, // Range Maximum 0x00000000, // Translation Offset 0x00004000, // Length ,, _Y05, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000D8000, // Range Minimum 0x000DBFFF, // Range Maximum 0x00000000, // Translation Offset 0x00004000, // Length ,, _Y06, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000DC000, // Range Minimum 0x000DFFFF, // Range Maximum 0x00000000, // Translation Offset 0x00004000, // Length ,, _Y07, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000E0000, // Range Minimum 0x000E3FFF, // Range Maximum 0x00000000, // Translation Offset 0x00004000, // Length ,, _Y08, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000E4000, // Range Minimum 0x000E7FFF, // Range Maximum 0x00000000, // Translation Offset 0x00004000, // Length ,, _Y09, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000E8000, // Range Minimum 0x000EBFFF, // Range Maximum 0x00000000, // Translation Offset 0x00004000, // Length ,, _Y0A, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000EC000, // Range Minimum 0x000EFFFF, // Range Maximum 0x00000000, // Translation Offset 0x00004000, // Length ,, _Y0B, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000F0000, // Range Minimum 0x000FFFFF, // Range Maximum 0x00000000, // Translation Offset 0x00010000, // Length ,, _Y0C, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x00000000, // Range Minimum 0xDFFFFFFF, // Range Maximum 0x00000000, // Translation Offset 0x00000000, // Length ,, _Y0D, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0xF0000000, // Range Minimum 0xFEBFFFFF, // Range Maximum 0x00000000, // Translation Offset 0x0EC00000, // Length ,, _Y0E, AddressRangeMemory, TypeStatic) DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0xFED40000, // Range Minimum 0xFED44FFF, // Range Maximum 0x00000000, // Translation Offset 0x00000000, // Length ,, , AddressRangeMemory, TypeStatic) }) Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings { If (^MCHC.PM1L) { CreateDWordField (BUF0, \_SB.PCI0._Y00._LEN, C0LN) // _LEN: Length Store (Zero, C0LN) /* \_SB_.PCI0._CRS.C0LN */ } If (LEqual (^MCHC.PM1L, One)) { CreateBitField (BUF0, \_SB.PCI0._Y00._RW, C0RW) // _RW_: Read-Write Status Store (Zero, C0RW) /* \_SB_.PCI0._CRS.C0RW */ } If (^MCHC.PM1H) { CreateDWordField (BUF0, \_SB.PCI0._Y01._LEN, C4LN) // _LEN: Length Store (Zero, C4LN) /* \_SB_.PCI0._CRS.C4LN */ } If (LEqual (^MCHC.PM1H, One)) { CreateBitField (BUF0, \_SB.PCI0._Y01._RW, C4RW) // _RW_: Read-Write Status Store (Zero, C4RW) /* \_SB_.PCI0._CRS.C4RW */ } If (^MCHC.PM2L) { CreateDWordField (BUF0, \_SB.PCI0._Y02._LEN, C8LN) // _LEN: Length Store (Zero, C8LN) /* \_SB_.PCI0._CRS.C8LN */ } If (LEqual (^MCHC.PM2L, One)) { CreateBitField (BUF0, \_SB.PCI0._Y02._RW, C8RW) // _RW_: Read-Write Status Store (Zero, C8RW) /* \_SB_.PCI0._CRS.C8RW */ } If (^MCHC.PM2H) { CreateDWordField (BUF0, \_SB.PCI0._Y03._LEN, CCLN) // _LEN: Length Store (Zero, CCLN) /* \_SB_.PCI0._CRS.CCLN */ } If (LEqual (^MCHC.PM2H, One)) { CreateBitField (BUF0, \_SB.PCI0._Y03._RW, CCRW) // _RW_: Read-Write Status Store (Zero, CCRW) /* \_SB_.PCI0._CRS.CCRW */ } If (^MCHC.PM3L) { CreateDWordField (BUF0, \_SB.PCI0._Y04._LEN, D0LN) // _LEN: Length Store (Zero, D0LN) /* \_SB_.PCI0._CRS.D0LN */ } If (LEqual (^MCHC.PM3L, One)) { CreateBitField (BUF0, \_SB.PCI0._Y04._RW, D0RW) // _RW_: Read-Write Status Store (Zero, D0RW) /* \_SB_.PCI0._CRS.D0RW */ } If (^MCHC.PM3H) { CreateDWordField (BUF0, \_SB.PCI0._Y05._LEN, D4LN) // _LEN: Length Store (Zero, D4LN) /* \_SB_.PCI0._CRS.D4LN */ } If (LEqual (^MCHC.PM3H, One)) { CreateBitField (BUF0, \_SB.PCI0._Y05._RW, D4RW) // _RW_: Read-Write Status Store (Zero, D4RW) /* \_SB_.PCI0._CRS.D4RW */ } If (^MCHC.PM4L) { CreateDWordField (BUF0, \_SB.PCI0._Y06._LEN, D8LN) // _LEN: Length Store (Zero, D8LN) /* \_SB_.PCI0._CRS.D8LN */ } If (LEqual (^MCHC.PM4L, One)) { CreateBitField (BUF0, \_SB.PCI0._Y06._RW, D8RW) // _RW_: Read-Write Status Store (Zero, D8RW) /* \_SB_.PCI0._CRS.D8RW */ } If (^MCHC.PM4H) { CreateDWordField (BUF0, \_SB.PCI0._Y07._LEN, DCLN) // _LEN: Length Store (Zero, DCLN) /* \_SB_.PCI0._CRS.DCLN */ } If (LEqual (^MCHC.PM4H, One)) { CreateBitField (BUF0, \_SB.PCI0._Y07._RW, DCRW) // _RW_: Read-Write Status Store (Zero, DCRW) /* \_SB_.PCI0._CRS.DCRW */ } If (^MCHC.PM5L) { CreateDWordField (BUF0, \_SB.PCI0._Y08._LEN, E0LN) // _LEN: Length Store (Zero, E0LN) /* \_SB_.PCI0._CRS.E0LN */ } If (LEqual (^MCHC.PM5L, One)) { CreateBitField (BUF0, \_SB.PCI0._Y08._RW, E0RW) // _RW_: Read-Write Status Store (Zero, E0RW) /* \_SB_.PCI0._CRS.E0RW */ } If (^MCHC.PM5H) { CreateDWordField (BUF0, \_SB.PCI0._Y09._LEN, E4LN) // _LEN: Length Store (Zero, E4LN) /* \_SB_.PCI0._CRS.E4LN */ } If (LEqual (^MCHC.PM5H, One)) { CreateBitField (BUF0, \_SB.PCI0._Y09._RW, E4RW) // _RW_: Read-Write Status Store (Zero, E4RW) /* \_SB_.PCI0._CRS.E4RW */ } If (^MCHC.PM6L) { CreateDWordField (BUF0, \_SB.PCI0._Y0A._LEN, E8LN) // _LEN: Length Store (Zero, E8LN) /* \_SB_.PCI0._CRS.E8LN */ } If (LEqual (^MCHC.PM6L, One)) { CreateBitField (BUF0, \_SB.PCI0._Y0A._RW, E8RW) // _RW_: Read-Write Status Store (Zero, E8RW) /* \_SB_.PCI0._CRS.E8RW */ } If (^MCHC.PM6H) { CreateDWordField (BUF0, \_SB.PCI0._Y0B._LEN, ECLN) // _LEN: Length Store (Zero, ECLN) /* \_SB_.PCI0._CRS.ECLN */ } If (LEqual (^MCHC.PM6H, One)) { CreateBitField (BUF0, \_SB.PCI0._Y0B._RW, ECRW) // _RW_: Read-Write Status Store (Zero, ECRW) /* \_SB_.PCI0._CRS.ECRW */ } If (^MCHC.PM0H) { CreateDWordField (BUF0, \_SB.PCI0._Y0C._LEN, F0LN) // _LEN: Length Store (Zero, F0LN) /* \_SB_.PCI0._CRS.F0LN */ } If (LEqual (^MCHC.PM0H, One)) { CreateBitField (BUF0, \_SB.PCI0._Y0C._RW, F0RW) // _RW_: Read-Write Status Store (Zero, F0RW) /* \_SB_.PCI0._CRS.F0RW */ } CreateDWordField (BUF0, \_SB.PCI0._Y0D._MIN, M1MN) // _MIN: Minimum Base Address CreateDWordField (BUF0, \_SB.PCI0._Y0D._MAX, M1MX) // _MAX: Maximum Base Address CreateDWordField (BUF0, \_SB.PCI0._Y0D._LEN, M1LN) // _LEN: Length CreateDWordField (BUF0, \_SB.PCI0._Y0E._MIN, M2MN) // _MIN: Minimum Base Address CreateDWordField (BUF0, \_SB.PCI0._Y0E._MAX, M2MX) // _MAX: Maximum Base Address CreateDWordField (BUF0, \_SB.PCI0._Y0E._LEN, M2LN) // _LEN: Length ShiftLeft (^MCHC.PXBR, 0x1A, M1MX) /* \_SB_.PCI0._CRS.M1MX */ ShiftRight (0x10000000, ^MCHC.PXSZ, Local0) Add (M1MX, Local0, M2MN) /* \_SB_.PCI0._CRS.M2MN */ Add (Subtract (M2MX, M2MN), One, M2LN) /* \_SB_.PCI0._CRS.M2LN */ Subtract (M1MX, One, M1MX) /* \_SB_.PCI0._CRS.M1MX */ ShiftLeft (^MCHC.TLUD, 0x14, M1MN) /* \_SB_.PCI0._CRS.M1MN */ Add (Subtract (M1MX, M1MN), One, M1LN) /* \_SB_.PCI0._CRS.M1LN */ Return (BUF0) /* \_SB_.PCI0.BUF0 */ } Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table { If (GPIC) { Return (Package (0x13) { Package (0x04) { 0x0001FFFF, Zero, Zero, 0x10 }, Package (0x04) { 0x0002FFFF, Zero, Zero, 0x10 }, Package (0x04) { 0x0007FFFF, Zero, Zero, 0x10 }, Package (0x04) { 0x0019FFFF, Zero, Zero, 0x14 }, Package (0x04) { 0x001AFFFF, Zero, Zero, 0x10 }, Package (0x04) { 0x001AFFFF, One, Zero, 0x15 }, Package (0x04) { 0x001AFFFF, 0x02, Zero, 0x12 }, Package (0x04) { 0x001BFFFF, Zero, Zero, 0x16 }, Package (0x04) { 0x001CFFFF, Zero, Zero, 0x11 }, Package (0x04) { 0x001CFFFF, One, Zero, 0x10 }, Package (0x04) { 0x001CFFFF, 0x02, Zero, 0x12 }, Package (0x04) { 0x001CFFFF, 0x03, Zero, 0x13 }, Package (0x04) { 0x001DFFFF, Zero, Zero, 0x17 }, Package (0x04) { 0x001DFFFF, One, Zero, 0x13 }, Package (0x04) { 0x001DFFFF, 0x02, Zero, 0x12 }, Package (0x04) { 0x001FFFFF, Zero, Zero, 0x13 }, Package (0x04) { 0x001FFFFF, One, Zero, 0x13 }, Package (0x04) { 0x001FFFFF, 0x02, Zero, 0x13 }, Package (0x04) { 0x001FFFFF, 0x03, Zero, 0x10 } }) } Else { Return (Package (0x13) { Package (0x04) { 0x0001FFFF, Zero, ^LPCB.LNKA, Zero }, Package (0x04) { 0x0002FFFF, Zero, ^LPCB.LNKA, Zero }, Package (0x04) { 0x0007FFFF, Zero, ^LPCB.LNKA, Zero }, Package (0x04) { 0x0019FFFF, Zero, ^LPCB.LNKE, Zero }, Package (0x04) { 0x001AFFFF, Zero, ^LPCB.LNKA, Zero }, Package (0x04) { 0x001AFFFF, One, ^LPCB.LNKF, Zero }, Package (0x04) { 0x001AFFFF, 0x02, ^LPCB.LNKC, Zero }, Package (0x04) { 0x001BFFFF, Zero, ^LPCB.LNKG, Zero }, Package (0x04) { 0x001CFFFF, Zero, ^LPCB.LNKB, Zero }, Package (0x04) { 0x001CFFFF, One, ^LPCB.LNKA, Zero }, Package (0x04) { 0x001CFFFF, 0x02, ^LPCB.LNKC, Zero }, Package (0x04) { 0x001CFFFF, 0x03, ^LPCB.LNKD, Zero }, Package (0x04) { 0x001DFFFF, Zero, ^LPCB.LNKH, Zero }, Package (0x04) { 0x001DFFFF, One, ^LPCB.LNKD, Zero }, Package (0x04) { 0x001DFFFF, 0x02, ^LPCB.LNKC, Zero }, Package (0x04) { 0x001FFFFF, Zero, ^LPCB.LNKD, Zero }, Package (0x04) { 0x001FFFFF, One, ^LPCB.LNKD, Zero }, Package (0x04) { 0x001FFFFF, 0x02, ^LPCB.LNKD, Zero }, Package (0x04) { 0x001FFFFF, 0x03, ^LPCB.LNKA, Zero } }) } } Device (PDRC) { Name (_HID, EisaId ("PNP0C02") /* PNP Motherboard Resources */) // _HID: Hardware ID Name (_UID, One) // _UID: Unique ID Name (BUF0, ResourceTemplate () { Memory32Fixed (ReadWrite, 0x00000000, // Address Base 0x00004000, // Address Length _Y0F) Memory32Fixed (ReadWrite, 0x00000000, // Address Base 0x00004000, // Address Length _Y10) Memory32Fixed (ReadWrite, 0x00000000, // Address Base 0x00001000, // Address Length _Y11) Memory32Fixed (ReadWrite, 0x00000000, // Address Base 0x00001000, // Address Length _Y12) Memory32Fixed (ReadWrite, 0x00000000, // Address Base 0x00000000, // Address Length _Y13) Memory32Fixed (ReadWrite, 0xFED20000, // Address Base 0x00020000, // Address Length ) Memory32Fixed (ReadWrite, 0xFED40000, // Address Base 0x00005000, // Address Length ) Memory32Fixed (ReadWrite, 0xFED45000, // Address Base 0x0004B000, // Address Length ) }) Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings { CreateDWordField (BUF0, \_SB.PCI0.PDRC._Y0F._BAS, RBR0) // _BAS: Base Address ShiftLeft (^^LPCB.RCBA, 0x0E, RBR0) /* \_SB_.PCI0.PDRC._CRS.RBR0 */ CreateDWordField (BUF0, \_SB.PCI0.PDRC._Y10._BAS, MBR0) // _BAS: Base Address ShiftLeft (^^MCHC.MHBR, 0x0E, MBR0) /* \_SB_.PCI0.PDRC._CRS.MBR0 */ CreateDWordField (BUF0, \_SB.PCI0.PDRC._Y11._BAS, DBR0) // _BAS: Base Address ShiftLeft (^^MCHC.DIBR, 0x0C, DBR0) /* \_SB_.PCI0.PDRC._CRS.DBR0 */ CreateDWordField (BUF0, \_SB.PCI0.PDRC._Y12._BAS, EBR0) // _BAS: Base Address ShiftLeft (^^MCHC.EPBR, 0x0C, EBR0) /* \_SB_.PCI0.PDRC._CRS.EBR0 */ CreateDWordField (BUF0, \_SB.PCI0.PDRC._Y13._BAS, XBR0) // _BAS: Base Address ShiftLeft (^^MCHC.PXBR, 0x1A, XBR0) /* \_SB_.PCI0.PDRC._CRS.XBR0 */ CreateDWordField (BUF0, \_SB.PCI0.PDRC._Y13._LEN, XSZ0) // _LEN: Length ShiftRight (0x10000000, ^^MCHC.PXSZ, XSZ0) /* \_SB_.PCI0.PDRC._CRS.XSZ0 */ Return (BUF0) /* \_SB_.PCI0.PDRC.BUF0 */ } } Device (PEGP) { Name (_ADR, 0x00010000) // _ADR: Address Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table { If (GPIC) { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, Zero, 0x10 }, Package (0x04) { 0xFFFF, One, Zero, 0x11 }, Package (0x04) { 0xFFFF, 0x02, Zero, 0x12 }, Package (0x04) { 0xFFFF, 0x03, Zero, 0x13 } }) } Else { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, ^^LPCB.LNKA, Zero }, Package (0x04) { 0xFFFF, One, ^^LPCB.LNKB, Zero }, Package (0x04) { 0xFFFF, 0x02, ^^LPCB.LNKC, Zero }, Package (0x04) { 0xFFFF, 0x03, ^^LPCB.LNKD, Zero } }) } } Device (VGA) { Name (_ADR, Zero) // _ADR: Address Name (SWIT, One) Name (CRTA, One) Name (LCDA, One) Name (TVAA, One) Name (VLDF, One) OperationRegion (VIDS, PCI_Config, Zero, 0xC8) Field (VIDS, DWordAcc, NoLock, Preserve) { VDID, 32 } Method (_STA, 0, NotSerialized) // _STA: Status { Return (0x0F) } Name (_PSC, Zero) // _PSC: Power State Current Method (_PS0, 0, NotSerialized) // _PS0: Power State 0 { Store (Zero, _PSC) /* \_SB_.PCI0.PEGP.VGA_._PSC */ } Method (_PS1, 0, NotSerialized) // _PS1: Power State 1 { Store (One, _PSC) /* \_SB_.PCI0.PEGP.VGA_._PSC */ } Method (_PS3, 0, NotSerialized) // _PS3: Power State 3 { Store (0x03, _PSC) /* \_SB_.PCI0.PEGP.VGA_._PSC */ } Method (_DOS, 1, NotSerialized) // _DOS: Disable Output Switching { Store (And (Arg0, 0x03), SWIT) /* \_SB_.PCI0.PEGP.VGA_.SWIT */ } Method (_DOD, 0, NotSerialized) // _DOD: Display Output Devices { Return (Package (0x03) { 0x00010100, 0x00010110, 0x0200 }) } Device (CRT) { Method (_ADR, 0, NotSerialized) // _ADR: Address { Return (0x0100) } Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status { ^^^^LPCB.PHSS (0x0C) Store (CADL, Local0) Store (CSTE, Local1) And (Local0, 0x02, Local0) And (Local1, 0x02, Local1) If (Local0) { Store (One, CRTA) /* \_SB_.PCI0.PEGP.VGA_.CRTA */ } Else { Store (Zero, CRTA) /* \_SB_.PCI0.PEGP.VGA_.CRTA */ } If (CRTA) { If (LEqual (Local1, 0x02)) { Return (0x1F) } Else { Return (0x1D) } } ElseIf (LEqual (Local1, 0x02)) { Return (0x0F) } Else { Return (0x0D) } } Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State { If (CRTA) { Return (One) } Else { Return (Zero) } } Method (_DSS, 1, NotSerialized) // _DSS: Device Set State { } } Device (LCD) { Method (_ADR, 0, NotSerialized) // _ADR: Address { Return (0x0110) } Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status { ^^^^LPCB.PHSS (0x0C) Store (CADL, Local0) Store (CSTE, Local1) And (Local0, One, Local0) And (Local1, One, Local1) If (Local0) { Store (One, LCDA) /* \_SB_.PCI0.PEGP.VGA_.LCDA */ } Else { Store (Zero, LCDA) /* \_SB_.PCI0.PEGP.VGA_.LCDA */ } If (LCDA) { If (LEqual (Local1, One)) { Return (0x1F) } Else { Return (0x1D) } } ElseIf (LEqual (Local1, One)) { Return (0x0F) } Else { Return (0x0D) } } Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State { If (LCDA) { Return (One) } Else { Return (Zero) } } Method (_DSS, 1, NotSerialized) // _DSS: Device Set State { } Method (_BCL, 0, NotSerialized) // _BCL: Brightness Control Levels { Return (Package (0x0A) { 0x46, 0x28, Zero, 0x0A, 0x14, 0x1E, 0x28, 0x32, 0x3C, 0x46 }) } Method (_BCM, 1, NotSerialized) // _BCM: Brightness Control Method { Divide (Arg0, 0x0A, Local0, Local1) Store (Local1, ^^^^LPCB.EC0.BRTS) /* \_SB_.PCI0.LPCB.EC0_.BRTS */ } Method (_BQC, 0, NotSerialized) // _BQC: Brightness Query Current { Multiply (^^^^LPCB.EC0.BRTS, 0x0A, Local0) Return (Local0) } } Device (TV) { Method (_ADR, 0, NotSerialized) // _ADR: Address { Return (0x0200) } Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status { ^^^^LPCB.PHSS (0x0C) Store (CADL, Local0) Store (CSTE, Local1) And (Local0, 0x04, Local0) And (Local1, 0x04, Local1) If (Local0) { Store (One, TVAA) /* \_SB_.PCI0.PEGP.VGA_.TVAA */ } Else { Store (Zero, TVAA) /* \_SB_.PCI0.PEGP.VGA_.TVAA */ } If (TVAA) { If (LEqual (Local1, 0x04)) { Return (0x1F) } Else { Return (0x1D) } } ElseIf (LEqual (Local1, 0x04)) { Return (0x0F) } Else { Return (0x0D) } } Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State { If (TVAA) { Return (One) } Else { Return (Zero) } } Method (_DSS, 1, NotSerialized) // _DSS: Device Set State { } } Method (DSSW, 0, NotSerialized) { If (LEqual (SWIT, Zero)) { ^^^LPCB.PHSS (0x0C) Store (CADL, Local0) Store (CSTE, Local1) If (LGreater (Local1, One)) { And (Local0, Local1, VLDF) /* \_SB_.PCI0.PEGP.VGA_.VLDF */ And (VLDF, 0xFE, VLDF) /* \_SB_.PCI0.PEGP.VGA_.VLDF */ } If (VLDF) { If (LEqual (Local0, 0x09)) { If (LEqual (Local1, 0x08)) { STBL (0x02) } If (LEqual (Local1, One)) { STBL (0x03) } If (LEqual (Local1, 0x09)) { STBL (One) } } If (LEqual (Local0, 0x0A)) { If (LEqual (Local1, 0x08)) { STBL (0x05) } If (LEqual (Local1, 0x02)) { STBL (One) } If (LEqual (Local1, 0x0A)) { STBL (0x04) } } If (LEqual (Local0, 0x0B)) { If (LEqual (Local1, 0x08)) { STBL (0x02) } If (LEqual (Local1, 0x09)) { STBL (0x05) } If (LEqual (Local1, One)) { STBL (0x03) } If (LEqual (Local1, 0x0A)) { STBL (0x04) } If (LEqual (Local1, 0x02)) { STBL (One) } If (LEqual (Local1, 0x0B)) { STBL (One) } } } Else { Store (One, VLDF) /* \_SB_.PCI0.PEGP.VGA_.VLDF */ STBL (One) } } ElseIf (LEqual (SWIT, One)) { ^^^LPCB.PHSS (One) } } Method (STBL, 1, NotSerialized) { If (LEqual (Arg0, One)) { Store (Zero, CRTA) /* \_SB_.PCI0.PEGP.VGA_.CRTA */ Store (One, LCDA) /* \_SB_.PCI0.PEGP.VGA_.LCDA */ Store (Zero, TVAA) /* \_SB_.PCI0.PEGP.VGA_.TVAA */ } If (LEqual (Arg0, 0x02)) { Store (One, CRTA) /* \_SB_.PCI0.PEGP.VGA_.CRTA */ Store (Zero, LCDA) /* \_SB_.PCI0.PEGP.VGA_.LCDA */ Store (Zero, TVAA) /* \_SB_.PCI0.PEGP.VGA_.TVAA */ } If (LEqual (Arg0, 0x03)) { Store (One, CRTA) /* \_SB_.PCI0.PEGP.VGA_.CRTA */ Store (One, LCDA) /* \_SB_.PCI0.PEGP.VGA_.LCDA */ Store (Zero, TVAA) /* \_SB_.PCI0.PEGP.VGA_.TVAA */ } If (LEqual (Arg0, 0x04)) { Store (Zero, CRTA) /* \_SB_.PCI0.PEGP.VGA_.CRTA */ Store (Zero, LCDA) /* \_SB_.PCI0.PEGP.VGA_.LCDA */ Store (One, TVAA) /* \_SB_.PCI0.PEGP.VGA_.TVAA */ } If (LEqual (Arg0, 0x05)) { Store (Zero, CRTA) /* \_SB_.PCI0.PEGP.VGA_.CRTA */ Store (One, LCDA) /* \_SB_.PCI0.PEGP.VGA_.LCDA */ Store (One, TVAA) /* \_SB_.PCI0.PEGP.VGA_.TVAA */ } If (LEqual (Arg0, 0x06)) { Store (One, CRTA) /* \_SB_.PCI0.PEGP.VGA_.CRTA */ Store (Zero, LCDA) /* \_SB_.PCI0.PEGP.VGA_.LCDA */ Store (One, TVAA) /* \_SB_.PCI0.PEGP.VGA_.TVAA */ } If (LEqual (Arg0, 0x07)) { Store (One, CRTA) /* \_SB_.PCI0.PEGP.VGA_.CRTA */ Store (One, LCDA) /* \_SB_.PCI0.PEGP.VGA_.LCDA */ Store (One, TVAA) /* \_SB_.PCI0.PEGP.VGA_.TVAA */ } Notify (VGA, 0x80) // Status Change } } } Device (GFX0) { Name (_ADR, 0x00020000) // _ADR: Address Method (_DOS, 1, NotSerialized) // _DOS: Disable Output Switching { Store (And (Arg0, 0x07), DSEN) /* \DSEN */ } Method (_DOD, 0, NotSerialized) // _DOD: Display Output Devices { Store (Zero, NDID) /* \NDID */ If (LNotEqual (DIDL, Zero)) { Store (SDDL (DID1), DID1) /* \DID1 */ } If (LNotEqual (DDL2, Zero)) { Store (SDDL (DID2), DID2) /* \DID2 */ } If (LNotEqual (DDL3, Zero)) { Store (SDDL (DID3), DID3) /* \DID3 */ } If (LNotEqual (DDL4, Zero)) { Store (SDDL (DID4), DID4) /* \DID4 */ } If (LNotEqual (DDL5, Zero)) { Store (SDDL (DID5), DID5) /* \DID5 */ } If (LEqual (NDID, One)) { Name (TMP1, Package (0x01) { 0xFFFFFFFF }) Store (Or (0x00010000, DID1), Index (TMP1, Zero)) Return (TMP1) /* \_SB_.PCI0.GFX0._DOD.TMP1 */ } If (LEqual (NDID, 0x02)) { Name (TMP2, Package (0x02) { 0xFFFFFFFF, 0xFFFFFFFF }) Store (Or (0x00010000, DID1), Index (TMP2, Zero)) Store (Or (0x00010000, DID2), Index (TMP2, One)) Return (TMP2) /* \_SB_.PCI0.GFX0._DOD.TMP2 */ } If (LEqual (NDID, 0x03)) { Name (TMP3, Package (0x03) { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }) Store (Or (0x00010000, DID1), Index (TMP3, Zero)) Store (Or (0x00010000, DID2), Index (TMP3, One)) Store (Or (0x00010000, DID3), Index (TMP3, 0x02)) Return (TMP3) /* \_SB_.PCI0.GFX0._DOD.TMP3 */ } If (LEqual (NDID, 0x04)) { Name (TMP4, Package (0x04) { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }) Store (Or (0x00010000, DID1), Index (TMP4, Zero)) Store (Or (0x00010000, DID2), Index (TMP4, One)) Store (Or (0x00010000, DID3), Index (TMP4, 0x02)) Store (Or (0x00010000, DID4), Index (TMP4, 0x03)) Return (TMP4) /* \_SB_.PCI0.GFX0._DOD.TMP4 */ } If (LGreater (NDID, 0x04)) { Name (TMP5, Package (0x05) { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }) Store (Or (0x00010000, DID1), Index (TMP5, Zero)) Store (Or (0x00010000, DID2), Index (TMP5, One)) Store (Or (0x00010000, DID3), Index (TMP5, 0x02)) Store (Or (0x00010000, DID4), Index (TMP5, 0x03)) Store (Or (0x00010000, DID4), Index (TMP5, 0x04)) Return (TMP5) /* \_SB_.PCI0.GFX0._DOD.TMP5 */ } Return (Package (0x01) { 0x0400 }) } Device (DD01) { Method (_ADR, 0, Serialized) // _ADR: Address { If (LEqual (DID1, Zero)) { Return (One) } Else { Return (And (0xFFFF, DID1)) } } Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status { Return (CDDS (DID1)) } Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State { Return (NDDS (DID1)) } Method (_DSS, 1, NotSerialized) // _DSS: Device Set State { If (LEqual (And (Arg0, 0xC0000000), 0xC0000000)) { Store (NSTE, CSTE) /* \CSTE */ } } } Device (DD02) { Method (_ADR, 0, Serialized) // _ADR: Address { If (LEqual (DID2, Zero)) { Return (0x02) } Else { Return (And (0xFFFF, DID2)) } } Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status { Return (CDDS (DID2)) } Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State { Return (NDDS (DID2)) } Method (_DSS, 1, NotSerialized) // _DSS: Device Set State { If (LEqual (And (Arg0, 0xC0000000), 0xC0000000)) { Store (NSTE, CSTE) /* \CSTE */ } } } Device (DD03) { Method (_ADR, 0, Serialized) // _ADR: Address { If (LEqual (DID3, Zero)) { Return (0x03) } Else { Return (And (0xFFFF, DID3)) } } Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status { If (LEqual (DID3, Zero)) { Return (0x0B) } Else { Return (CDDS (DID3)) } } Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State { Return (NDDS (DID3)) } Method (_DSS, 1, NotSerialized) // _DSS: Device Set State { If (LEqual (And (Arg0, 0xC0000000), 0xC0000000)) { Store (NSTE, CSTE) /* \CSTE */ } } } Device (DD04) { Method (_ADR, 0, Serialized) // _ADR: Address { If (LEqual (DID4, Zero)) { Return (0x04) } Else { Return (And (0xFFFF, DID4)) } } Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status { If (LEqual (DID4, Zero)) { Return (0x0B) } Else { Return (CDDS (DID4)) } } Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State { Return (NDDS (DID4)) } Method (_DSS, 1, NotSerialized) // _DSS: Device Set State { If (LEqual (And (Arg0, 0xC0000000), 0xC0000000)) { Store (NSTE, CSTE) /* \CSTE */ } } } Device (DD05) { Method (_ADR, 0, Serialized) // _ADR: Address { If (LEqual (DID5, Zero)) { Return (0x05) } Else { Return (And (0xFFFF, DID5)) } } Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status { If (LEqual (DID5, Zero)) { Return (0x0B) } Else { Return (CDDS (DID5)) } } Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State { Return (NDDS (DID5)) } Method (_DSS, 1, NotSerialized) // _DSS: Device Set State { If (LEqual (And (Arg0, 0xC0000000), 0xC0000000)) { Store (NSTE, CSTE) /* \CSTE */ } } } Method (SDDL, 1, NotSerialized) { Increment (NDID) Store (And (Arg0, 0x0F0F), Local0) Or (0x80000000, Local0, Local1) If (LEqual (DIDL, Local0)) { Return (Local1) } If (LEqual (DDL2, Local0)) { Return (Local1) } If (LEqual (DDL3, Local0)) { Return (Local1) } If (LEqual (DDL4, Local0)) { Return (Local1) } If (LEqual (DDL5, Local0)) { Return (Local1) } If (LEqual (DDL6, Local0)) { Return (Local1) } If (LEqual (DDL7, Local0)) { Return (Local1) } If (LEqual (DDL8, Local0)) { Return (Local1) } Return (Zero) } Method (CDDS, 1, NotSerialized) { If (LEqual (CADL, And (Arg0, 0x0F0F))) { Return (0x1F) } If (LEqual (CAL2, And (Arg0, 0x0F0F))) { Return (0x1F) } If (LEqual (CAL3, And (Arg0, 0x0F0F))) { Return (0x1F) } If (LEqual (CAL4, And (Arg0, 0x0F0F))) { Return (0x1F) } If (LEqual (CAL5, And (Arg0, 0x0F0F))) { Return (0x1F) } If (LEqual (CAL6, And (Arg0, 0x0F0F))) { Return (0x1F) } If (LEqual (CAL7, And (Arg0, 0x0F0F))) { Return (0x1F) } If (LEqual (CAL8, And (Arg0, 0x0F0F))) { Return (0x1F) } Return (0x1D) } Method (NDDS, 1, NotSerialized) { If (LEqual (NADL, And (Arg0, 0x0F0F))) { Return (One) } If (LEqual (NDL2, And (Arg0, 0x0F0F))) { Return (One) } If (LEqual (NDL3, And (Arg0, 0x0F0F))) { Return (One) } If (LEqual (NDL4, And (Arg0, 0x0F0F))) { Return (One) } If (LEqual (NDL5, And (Arg0, 0x0F0F))) { Return (One) } If (LEqual (NDL6, And (Arg0, 0x0F0F))) { Return (One) } If (LEqual (NDL7, And (Arg0, 0x0F0F))) { Return (One) } If (LEqual (NDL8, And (Arg0, 0x0F0F))) { Return (One) } Return (Zero) } Method (BRTN, 1, Serialized) { If (LEqual (And (DID1, 0x0F00), 0x0400)) { Notify (DD01, Arg0) } If (LEqual (And (DID2, 0x0F00), 0x0400)) { Notify (DD02, Arg0) } If (LEqual (And (DID3, 0x0F00), 0x0400)) { Notify (DD03, Arg0) } If (LEqual (And (DID4, 0x0F00), 0x0400)) { Notify (DD04, Arg0) } If (LEqual (And (DID5, 0x0F00), 0x0400)) { Notify (DD05, Arg0) } } Scope (^^PCI0) { OperationRegion (MCHP, PCI_Config, 0x40, 0xC0) Field (MCHP, AnyAcc, NoLock, Preserve) { Offset (0x60), TASM, 10, Offset (0x62) } } OperationRegion (IGDP, PCI_Config, 0x40, 0xC0) Field (IGDP, AnyAcc, NoLock, Preserve) { Offset (0x12), , 1, GIVD, 1, , 2, GUMA, 3, Offset (0x14), , 4, GMFN, 1, Offset (0x18), Offset (0xA4), ASLE, 8, Offset (0xA8), GSSE, 1, GSSB, 14, GSES, 1, Offset (0xB0), Offset (0xB1), CDVL, 5, Offset (0xB2), Offset (0xB5), LBPC, 8, Offset (0xBC), ASLS, 32 } OperationRegion (IGDM, SystemMemory, ASLB, 0x2000) Field (IGDM, AnyAcc, NoLock, Preserve) { SIGN, 128, SIZE, 32, OVER, 32, SVER, 256, VVER, 128, GVER, 128, MBOX, 32, Offset (0x100), DRDY, 32, CSTS, 32, CEVT, 32, Offset (0x120), DIDL, 32, DDL2, 32, DDL3, 32, DDL4, 32, DDL5, 32, DDL6, 32, DDL7, 32, DDL8, 32, CPDL, 32, CPL2, 32, CPL3, 32, CPL4, 32, CPL5, 32, CPL6, 32, CPL7, 32, CPL8, 32, CADL, 32, CAL2, 32, CAL3, 32, CAL4, 32, CAL5, 32, CAL6, 32, CAL7, 32, CAL8, 32, NADL, 32, NDL2, 32, NDL3, 32, NDL4, 32, NDL5, 32, NDL6, 32, NDL7, 32, NDL8, 32, ASLP, 32, TIDX, 32, CHPD, 32, CLID, 32, CDCK, 32, SXSW, 32, EVTS, 32, CNOT, 32, NRDY, 32, Offset (0x200), SCIE, 1, GEFC, 4, GXFC, 3, GESF, 8, Offset (0x204), PARM, 32, DSLP, 32, Offset (0x300), ARDY, 32, ASLC, 32, TCHE, 32, ALSI, 32, BCLP, 32, PFIT, 32, CBLV, 32, BCLM, 320, CPFM, 32, Offset (0x400), GVD1, 57344 } Name (DBTB, Package (0x15) { Zero, 0x07, 0x38, 0x01C0, 0x0E00, 0x3F, 0x01C7, 0x0E07, 0x01F8, 0x0E38, 0x0FC0, Zero, Zero, Zero, Zero, Zero, 0x7000, 0x7007, 0x7038, 0x71C0, 0x7E00 }) Name (CDCT, Package (0x03) { Package (0x03) { 0xC8, 0x0140, 0x0190 }, Package (0x03) { 0xC8, 0x014D, 0x0190 }, Package (0x03) { 0xDE, 0x014D, 0x017D } }) Name (SUCC, One) Name (NVLD, 0x02) Name (CRIT, 0x04) Name (NCRT, 0x06) Method (GSCI, 0, Serialized) { Method (GBDA, 0, Serialized) { If (LEqual (GESF, Zero)) { Store (0x0279, PARM) /* \_SB_.PCI0.GFX0.PARM */ Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, One)) { Store (0x0240, PARM) /* \_SB_.PCI0.GFX0.PARM */ Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x04)) { And (PARM, 0xEFFF0000, PARM) /* \_SB_.PCI0.GFX0.PARM */ And (PARM, ShiftLeft (DerefOf (Index (DBTB, IBTT)), 0x10), PARM) /* \_SB_.PCI0.GFX0.PARM */ Or (IBTT, PARM, PARM) /* \_SB_.PCI0.GFX0.PARM */ Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x05)) { Store (IPSC, PARM) /* \_SB_.PCI0.GFX0.PARM */ Or (PARM, ShiftLeft (IPAT, 0x08), PARM) /* \_SB_.PCI0.GFX0.PARM */ Add (PARM, 0x0100, PARM) /* \_SB_.PCI0.GFX0.PARM */ Or (PARM, ShiftLeft (LIDS, 0x10), PARM) /* \_SB_.PCI0.GFX0.PARM */ Add (PARM, 0x00010000, PARM) /* \_SB_.PCI0.GFX0.PARM */ Or (PARM, ShiftLeft (IBIA, 0x14), PARM) /* \_SB_.PCI0.GFX0.PARM */ Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x06)) { Store (ITVF, PARM) /* \_SB_.PCI0.GFX0.PARM */ Or (PARM, ShiftLeft (ITVM, 0x04), PARM) /* \_SB_.PCI0.GFX0.PARM */ Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x07)) { Store (GIVD, PARM) /* \_SB_.PCI0.GFX0.PARM */ XOr (PARM, One, PARM) /* \_SB_.PCI0.GFX0.PARM */ Or (PARM, ShiftLeft (GMFN, One), PARM) /* \_SB_.PCI0.GFX0.PARM */ Or (PARM, 0x1000, PARM) /* \_SB_.PCI0.GFX0.PARM */ If (IDMM) { Or (PARM, ShiftLeft (IDMS, 0x11), PARM) /* \_SB_.PCI0.GFX0.PARM */ } Else { Or (PARM, ShiftLeft (IDMS, 0x0D), PARM) /* \_SB_.PCI0.GFX0.PARM */ } Or (ShiftLeft (DerefOf (Index (DerefOf (Index (CDCT, HVCO)), Subtract (CDVL, One ))), 0x15), PARM, PARM) /* \_SB_.PCI0.GFX0.PARM */ Store (One, GESF) /* \_SB_.PCI0.GFX0.GESF */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x0A)) { Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ If (ISSC) { Or (PARM, 0x03, PARM) /* \_SB_.PCI0.GFX0.PARM */ } Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Return (CRIT) /* \_SB_.PCI0.GFX0.CRIT */ } Method (SBCB, 0, Serialized) { If (LEqual (GESF, Zero)) { Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ Store (0xF77D, PARM) /* \_SB_.PCI0.GFX0.PARM */ Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, One)) { Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x03)) { Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x04)) { Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x05)) { Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x06)) { Store (And (PARM, 0x0F), ITVF) /* \ITVF */ Store (ShiftRight (And (PARM, 0xF0), 0x04), ITVM) /* \ITVM */ Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x07)) { Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x08)) { Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x09)) { And (PARM, 0xFF, IBTT) /* \IBTT */ Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x0A)) { And (PARM, 0xFF, IPSC) /* \IPSC */ If (And (ShiftRight (PARM, 0x08), 0xFF)) { And (ShiftRight (PARM, 0x08), 0xFF, IPAT) /* \IPAT */ Decrement (IPAT) } And (ShiftRight (PARM, 0x14), 0x07, IBIA) /* \IBIA */ Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x0B)) { And (ShiftRight (PARM, One), One, IF1E) /* \IF1E */ If (And (PARM, 0x0001E000)) { And (ShiftRight (PARM, 0x0D), 0x0F, IDMS) /* \IDMS */ Store (Zero, IDMM) /* \IDMM */ } Else { And (ShiftRight (PARM, 0x11), 0x0F, IDMS) /* \IDMS */ Store (One, IDMM) /* \IDMM */ } Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x10)) { Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x11)) { Or (PARM, 0x0100, PARM) /* \_SB_.PCI0.GFX0.PARM */ Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x12)) { If (And (PARM, One)) { If (LEqual (ShiftRight (PARM, One), One)) { Store (One, ISSC) /* \ISSC */ } Else { Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Return (CRIT) /* \_SB_.PCI0.GFX0.CRIT */ } } Else { Store (Zero, ISSC) /* \ISSC */ } Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GESF, 0x13)) { Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Store (Zero, PARM) /* \_SB_.PCI0.GFX0.PARM */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } Store (Zero, GESF) /* \_SB_.PCI0.GFX0.GESF */ Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */ } If (LEqual (GEFC, 0x04)) { Store (GBDA (), GXFC) /* \_SB_.PCI0.GFX0.GXFC */ } If (LEqual (GEFC, 0x06)) { Store (SBCB (), GXFC) /* \_SB_.PCI0.GFX0.GXFC */ } Store (Zero, GEFC) /* \_SB_.PCI0.GFX0.GEFC */ Store (One, SCIS) /* \SCIS */ Store (Zero, GSSE) /* \_SB_.PCI0.GFX0.GSSE */ Store (Zero, SCIE) /* \_SB_.PCI0.GFX0.SCIE */ Return (Zero) } Method (PDRD, 0, NotSerialized) { If (LNot (DRDY)) { Sleep (ASLP) } Return (LNot (DRDY)) } Method (PSTS, 0, NotSerialized) { If (LGreater (CSTS, 0x02)) { Sleep (ASLP) } Return (LEqual (CSTS, 0x03)) } Method (GNOT, 2, NotSerialized) { If (PDRD ()) { Return (One) } If (PSTS ()) { Return (One) } Store (Arg0, CEVT) /* \_SB_.PCI0.GFX0.CEVT */ Store (0x03, CSTS) /* \_SB_.PCI0.GFX0.CSTS */ If (LAnd (LEqual (CHPD, Zero), LEqual (Arg1, Zero))) { If (LOr (LGreater (OSYS, 0x07D0), LLess (OSYS, 0x07D6))) { Notify (PCI0, Arg1) } Else { Notify (GFX0, Arg1) } } Notify (GFX0, 0x80) // Status Change If (LNot (PSTS ())) { Store (Zero, CEVT) /* \_SB_.PCI0.GFX0.CEVT */ } Return (Zero) } Method (GHDS, 1, NotSerialized) { Store (Arg0, TIDX) /* \_SB_.PCI0.GFX0.TIDX */ Return (GNOT (One, Zero)) } Method (GLID, 1, NotSerialized) { Store (Arg0, CLID) /* \_SB_.PCI0.GFX0.CLID */ Return (GNOT (0x02, Zero)) } Method (GDCK, 1, NotSerialized) { Store (Arg0, CDCK) /* \_SB_.PCI0.GFX0.CDCK */ Return (GNOT (0x04, 0x80)) } Method (PARD, 0, NotSerialized) { If (LNot (ARDY)) { Sleep (ASLP) } Return (LNot (ARDY)) } Method (AINT, 2, NotSerialized) { If (LNot (And (TCHE, ShiftLeft (One, Arg0)))) { Return (One) } If (PARD ()) { Return (One) } If (LEqual (Arg0, 0x02)) { If (CPFM) { If (LEqual (CPFM, One)) { Store (0x06, PFIT) /* \_SB_.PCI0.GFX0.PFIT */ } If (LEqual (CPFM, 0x06)) { Store (0x08, PFIT) /* \_SB_.PCI0.GFX0.PFIT */ } If (LEqual (CPFM, 0x08)) { Store (One, PFIT) /* \_SB_.PCI0.GFX0.PFIT */ } } Else { XOr (PFIT, 0x07, PFIT) /* \_SB_.PCI0.GFX0.PFIT */ } Or (PFIT, 0x80000000, PFIT) /* \_SB_.PCI0.GFX0.PFIT */ Store (0x04, ASLC) /* \_SB_.PCI0.GFX0.ASLC */ } ElseIf (LEqual (Arg0, One)) { Store (Divide (Multiply (Arg1, 0xFF), 0x64, ), BCLP) /* \_SB_.PCI0.GFX0.BCLP */ Or (BCLP, 0x80000000, BCLP) /* \_SB_.PCI0.GFX0.BCLP */ Store (0x02, ASLC) /* \_SB_.PCI0.GFX0.ASLC */ } ElseIf (LEqual (Arg0, Zero)) { Store (Arg1, ALSI) /* \_SB_.PCI0.GFX0.ALSI */ Store (One, ASLC) /* \_SB_.PCI0.GFX0.ASLC */ } Else { Return (One) } Store (Zero, LBPC) /* \_SB_.PCI0.GFX0.LBPC */ Return (Zero) } } Scope (\) { OperationRegion (IO_T, SystemIO, 0x0800, 0x10) Field (IO_T, ByteAcc, NoLock, Preserve) { Offset (0x08), TRP0, 8 } OperationRegion (PMIO, SystemIO, 0x1000, 0x80) Field (PMIO, ByteAcc, NoLock, Preserve) { Offset (0x2A), Offset (0x2B), , 2, ACPW, 1, Offset (0x42), , 1, GPEC, 1, Offset (0x64), , 9, SCIS, 1, Offset (0x66) } OperationRegion (GPIO, SystemIO, 0x1180, 0x3C) Field (GPIO, ByteAcc, NoLock, Preserve) { GU00, 8, GU01, 8, GU02, 8, GU03, 8, GIO0, 8, GIO1, 8, GIO2, 8, GIO3, 8, Offset (0x0C), GL00, 8, GL01, 8, GL02, 8, , 3, GP27, 1, GP28, 1, Offset (0x10), Offset (0x18), GB00, 8, GB01, 8, GB02, 8, GB03, 8, Offset (0x2C), GIV0, 8, , 3, LPOL, 1, Offset (0x2E), GIV2, 8, GIV3, 8, GU04, 8, GU05, 8, GU06, 8, GU07, 8, GIO4, 8, GIO5, 8, GIO6, 8, GIO7, 8, , 5, GP37, 1, Offset (0x39), GL05, 8, GL06, 8, GL07, 8 } OperationRegion (RCRB, SystemMemory, 0xFED1C000, 0x4000) Field (RCRB, DWordAcc, Lock, Preserve) { Offset (0x1000), Offset (0x3000), Offset (0x3404), HPAS, 2, , 5, HPAE, 1, Offset (0x3418), , 1, PATD, 1, SATD, 1, SMBD, 1, HDAD, 1, Offset (0x341A), RP1D, 1, RP2D, 1, RP3D, 1, RP4D, 1, RP5D, 1, RP6D, 1 } Name (_S0, Package (0x03) // _S0_: S0 System State { Zero, Zero, Zero }) Name (_S3, Package (0x03) // _S3_: S3 System State { 0x05, 0x05, Zero }) Name (_S4, Package (0x03) // _S4_: S4 System State { 0x06, 0x06, Zero }) Name (_S5, Package (0x03) // _S5_: S5 System State { 0x07, 0x07, Zero }) Method (GETP, 1, Serialized) { If (LEqual (And (Arg0, 0x09), Zero)) { Return (0xFFFFFFFF) } If (LEqual (And (Arg0, 0x09), 0x08)) { Return (0x0384) } ShiftRight (And (Arg0, 0x0300), 0x08, Local0) ShiftRight (And (Arg0, 0x3000), 0x0C, Local1) Return (Multiply (0x1E, Subtract (0x09, Add (Local0, Local1)))) } Method (GDMA, 5, Serialized) { If (Arg0) { If (LAnd (Arg1, Arg4)) { Return (0x14) } If (LAnd (Arg2, Arg4)) { Return (Multiply (Subtract (0x04, Arg3), 0x0F)) } Return (Multiply (Subtract (0x04, Arg3), 0x1E)) } Return (0xFFFFFFFF) } Method (GETT, 1, Serialized) { Return (Multiply (0x1E, Subtract (0x09, Add (And (ShiftRight (Arg0, 0x02), 0x03 ), And (Arg0, 0x03))))) } Method (GETF, 3, Serialized) { Name (TMPF, Zero) If (Arg0) { Or (TMPF, One, TMPF) /* \GETF.TMPF */ } If (And (Arg2, 0x02)) { Or (TMPF, 0x02, TMPF) /* \GETF.TMPF */ } If (Arg1) { Or (TMPF, 0x04, TMPF) /* \GETF.TMPF */ } If (And (Arg2, 0x20)) { Or (TMPF, 0x08, TMPF) /* \GETF.TMPF */ } If (And (Arg2, 0x4000)) { Or (TMPF, 0x10, TMPF) /* \GETF.TMPF */ } Return (TMPF) /* \GETF.TMPF */ } Method (SETP, 3, Serialized) { If (LGreater (Arg0, 0xF0)) { Return (0x08) } Else { If (And (Arg1, 0x02)) { If (LAnd (LLessEqual (Arg0, 0x78), And (Arg2, 0x02))) { Return (0x2301) } If (LAnd (LLessEqual (Arg0, 0xB4), And (Arg2, One))) { Return (0x2101) } } Return (0x1001) } } Method (SDMA, 1, Serialized) { If (LLessEqual (Arg0, 0x14)) { Return (One) } If (LLessEqual (Arg0, 0x1E)) { Return (0x02) } If (LLessEqual (Arg0, 0x2D)) { Return (One) } If (LLessEqual (Arg0, 0x3C)) { Return (0x02) } If (LLessEqual (Arg0, 0x5A)) { Return (One) } Return (Zero) } Method (SETT, 3, Serialized) { If (And (Arg1, 0x02)) { If (LAnd (LLessEqual (Arg0, 0x78), And (Arg2, 0x02))) { Return (0x0B) } If (LAnd (LLessEqual (Arg0, 0xB4), And (Arg2, One))) { Return (0x09) } } Return (0x04) } } Device (HDEF) { Name (_ADR, 0x001B0000) // _ADR: Address OperationRegion (HDAR, PCI_Config, 0x4C, 0x10) Field (HDAR, WordAcc, NoLock, Preserve) { DCKA, 1, Offset (0x01), DCKM, 1, , 6, DCKS, 1, Offset (0x08), , 15, PMES, 1 } Name (_PRW, Package (0x02) // _PRW: Power Resources for Wake { 0x0D, 0x03 }) } Device (RP01) { Name (_ADR, 0x001C0000) // _ADR: Address OperationRegion (PXCS, PCI_Config, 0x40, 0xC0) Field (PXCS, AnyAcc, NoLock, WriteAsZeros) { Offset (0x12), , 13, LASX, 1, Offset (0x1A), ABPX, 1, , 2, PDCX, 1, , 2, PDSX, 1, Offset (0x1B), LSCX, 1, Offset (0x20), Offset (0x22), PSPX, 1, Offset (0x9C), , 30, HPSX, 1, PMSX, 1 } Device (PXSX) { Name (_ADR, Zero) // _ADR: Address } Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table { If (GPIC) { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, Zero, 0x10 }, Package (0x04) { 0xFFFF, One, Zero, 0x11 }, Package (0x04) { 0xFFFF, 0x02, Zero, 0x12 }, Package (0x04) { 0xFFFF, 0x03, Zero, 0x13 } }) } Else { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, ^^LPCB.LNKA, Zero }, Package (0x04) { 0xFFFF, One, ^^LPCB.LNKB, Zero }, Package (0x04) { 0xFFFF, 0x02, ^^LPCB.LNKC, Zero }, Package (0x04) { 0xFFFF, 0x03, ^^LPCB.LNKD, Zero } }) } } } Device (RP02) { Name (_ADR, 0x001C0001) // _ADR: Address OperationRegion (PXCS, PCI_Config, 0x40, 0xC0) Field (PXCS, AnyAcc, NoLock, WriteAsZeros) { Offset (0x12), , 13, LASX, 1, Offset (0x1A), ABPX, 1, , 2, PDCX, 1, , 2, PDSX, 1, Offset (0x1B), LSCX, 1, Offset (0x20), Offset (0x22), PSPX, 1, Offset (0x9C), , 30, HPSX, 1, PMSX, 1 } Device (PXSX) { Name (_ADR, Zero) // _ADR: Address } Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table { If (GPIC) { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, Zero, 0x11 }, Package (0x04) { 0xFFFF, One, Zero, 0x12 }, Package (0x04) { 0xFFFF, 0x02, Zero, 0x13 }, Package (0x04) { 0xFFFF, 0x03, Zero, 0x10 } }) } Else { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, ^^LPCB.LNKB, Zero }, Package (0x04) { 0xFFFF, One, ^^LPCB.LNKC, Zero }, Package (0x04) { 0xFFFF, 0x02, ^^LPCB.LNKD, Zero }, Package (0x04) { 0xFFFF, 0x03, ^^LPCB.LNKA, Zero } }) } } } Device (RP03) { Name (_ADR, 0x001C0002) // _ADR: Address OperationRegion (PXCS, PCI_Config, 0x40, 0xC0) Field (PXCS, AnyAcc, NoLock, WriteAsZeros) { Offset (0x12), , 13, LASX, 1, Offset (0x1A), ABPX, 1, , 2, PDCX, 1, , 2, PDSX, 1, Offset (0x1B), LSCX, 1, Offset (0x20), Offset (0x22), PSPX, 1, Offset (0x9C), , 30, HPSX, 1, PMSX, 1 } Device (PXSX) { Name (_ADR, Zero) // _ADR: Address } Name (PXSX._RMV, One) // _RMV: Removal Status Name (PXSX._PRW, Package (0x02) // _PRW: Power Resources for Wake { 0x09, 0x03 }) Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table { If (GPIC) { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, Zero, 0x12 }, Package (0x04) { 0xFFFF, One, Zero, 0x13 }, Package (0x04) { 0xFFFF, 0x02, Zero, 0x10 }, Package (0x04) { 0xFFFF, 0x03, Zero, 0x11 } }) } Else { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, ^^LPCB.LNKC, Zero }, Package (0x04) { 0xFFFF, One, ^^LPCB.LNKD, Zero }, Package (0x04) { 0xFFFF, 0x02, ^^LPCB.LNKA, Zero }, Package (0x04) { 0xFFFF, 0x03, ^^LPCB.LNKB, Zero } }) } } } Device (RP04) { Name (_ADR, 0x001C0003) // _ADR: Address OperationRegion (PXCS, PCI_Config, 0x40, 0xC0) Field (PXCS, AnyAcc, NoLock, WriteAsZeros) { Offset (0x12), , 13, LASX, 1, Offset (0x1A), ABPX, 1, , 2, PDCX, 1, , 2, PDSX, 1, Offset (0x1B), LSCX, 1, Offset (0x20), Offset (0x22), PSPX, 1, Offset (0x9C), , 30, HPSX, 1, PMSX, 1 } Device (PXSX) { Name (_ADR, Zero) // _ADR: Address Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake { If (WKLN) { Return (Package (0x02) { 0x09, 0x03 }) } Else { Return (Package (0x02) { 0x09, Zero }) } } } Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table { If (GPIC) { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, Zero, 0x13 }, Package (0x04) { 0xFFFF, One, Zero, 0x10 }, Package (0x04) { 0xFFFF, 0x02, Zero, 0x11 }, Package (0x04) { 0xFFFF, 0x03, Zero, 0x12 } }) } Else { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, ^^LPCB.LNKD, Zero }, Package (0x04) { 0xFFFF, One, ^^LPCB.LNKA, Zero }, Package (0x04) { 0xFFFF, 0x02, ^^LPCB.LNKB, Zero }, Package (0x04) { 0xFFFF, 0x03, ^^LPCB.LNKC, Zero } }) } } } Device (RP05) { Name (_ADR, 0x001C0004) // _ADR: Address OperationRegion (PXCS, PCI_Config, 0x40, 0xC0) Field (PXCS, AnyAcc, NoLock, WriteAsZeros) { Offset (0x12), , 13, LASX, 1, Offset (0x1A), ABPX, 1, , 2, PDCX, 1, , 2, PDSX, 1, Offset (0x1B), LSCX, 1, Offset (0x20), Offset (0x22), PSPX, 1, Offset (0x9C), , 30, HPSX, 1, PMSX, 1 } Device (PXSX) { Name (_ADR, Zero) // _ADR: Address } Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table { If (GPIC) { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, Zero, 0x10 }, Package (0x04) { 0xFFFF, One, Zero, 0x11 }, Package (0x04) { 0xFFFF, 0x02, Zero, 0x12 }, Package (0x04) { 0xFFFF, 0x03, Zero, 0x13 } }) } Else { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, ^^LPCB.LNKA, Zero }, Package (0x04) { 0xFFFF, One, ^^LPCB.LNKB, Zero }, Package (0x04) { 0xFFFF, 0x02, ^^LPCB.LNKC, Zero }, Package (0x04) { 0xFFFF, 0x03, ^^LPCB.LNKD, Zero } }) } } } Device (RP06) { Name (_ADR, 0x001C0005) // _ADR: Address OperationRegion (PXCS, PCI_Config, 0x40, 0xC0) Field (PXCS, AnyAcc, NoLock, WriteAsZeros) { Offset (0x12), , 13, LASX, 1, Offset (0x1A), ABPX, 1, , 2, PDCX, 1, , 2, PDSX, 1, Offset (0x1B), LSCX, 1, Offset (0x20), Offset (0x22), PSPX, 1, Offset (0x9C), , 30, HPSX, 1, PMSX, 1 } Device (PXSX) { Name (_ADR, Zero) // _ADR: Address } Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table { If (GPIC) { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, Zero, 0x11 }, Package (0x04) { 0xFFFF, One, Zero, 0x12 }, Package (0x04) { 0xFFFF, 0x02, Zero, 0x13 }, Package (0x04) { 0xFFFF, 0x03, Zero, 0x10 } }) } Else { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, ^^LPCB.LNKB, Zero }, Package (0x04) { 0xFFFF, One, ^^LPCB.LNKC, Zero }, Package (0x04) { 0xFFFF, 0x02, ^^LPCB.LNKD, Zero }, Package (0x04) { 0xFFFF, 0x03, ^^LPCB.LNKA, Zero } }) } } } Device (USB1) { Name (_ADR, 0x001D0000) // _ADR: Address OperationRegion (U1CS, PCI_Config, 0xC4, 0x04) Field (U1CS, DWordAcc, NoLock, Preserve) { U1EN, 2 } Name (_PRW, Package (0x02) // _PRW: Power Resources for Wake { 0x03, 0x03 }) Method (_PSW, 1, NotSerialized) // _PSW: Power State Wake { If (Arg0) { Store (One, ACPW) /* \ACPW */ If (ACPW) { Store (0x03, U1EN) /* \_SB_.PCI0.USB1.U1EN */ } } Else { Store (Zero, U1EN) /* \_SB_.PCI0.USB1.U1EN */ } } Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State { Return (0x02) } Method (_S4D, 0, NotSerialized) // _S4D: S4 Device State { Return (0x02) } } Device (USB2) { Name (_ADR, 0x001D0001) // _ADR: Address OperationRegion (U2CS, PCI_Config, 0xC4, 0x04) Field (U2CS, DWordAcc, NoLock, Preserve) { U2EN, 2 } Name (_PRW, Package (0x02) // _PRW: Power Resources for Wake { 0x04, 0x03 }) Method (_PSW, 1, NotSerialized) // _PSW: Power State Wake { If (Arg0) { Store (One, ACPW) /* \ACPW */ If (ACPW) { Store (One, U2EN) /* \_SB_.PCI0.USB2.U2EN */ } } Else { Store (Zero, U2EN) /* \_SB_.PCI0.USB2.U2EN */ } } Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State { Return (0x02) } Method (_S4D, 0, NotSerialized) // _S4D: S4 Device State { Return (0x02) } } Device (USB3) { Name (_ADR, 0x001D0002) // _ADR: Address OperationRegion (U2CS, PCI_Config, 0xC4, 0x04) Field (U2CS, DWordAcc, NoLock, Preserve) { U3EN, 2 } Name (_PRW, Package (0x02) // _PRW: Power Resources for Wake { 0x0C, 0x03 }) Method (_PSW, 1, NotSerialized) // _PSW: Power State Wake { If (Arg0) { Store (One, ACPW) /* \ACPW */ If (ACPW) { Store (0x03, U3EN) /* \_SB_.PCI0.USB3.U3EN */ } } Else { Store (Zero, U3EN) /* \_SB_.PCI0.USB3.U3EN */ } } Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State { Return (0x02) } Method (_S4D, 0, NotSerialized) // _S4D: S4 Device State { Return (0x02) } } Device (USB4) { Name (_ADR, 0x001A0000) // _ADR: Address OperationRegion (U4CS, PCI_Config, 0xC4, 0x04) Field (U4CS, DWordAcc, NoLock, Preserve) { U4EN, 2 } Name (_PRW, Package (0x02) // _PRW: Power Resources for Wake { 0x0E, 0x03 }) Method (_PSW, 1, NotSerialized) // _PSW: Power State Wake { If (Arg0) { Store (One, ACPW) /* \ACPW */ If (ACPW) { Store (0x03, U4EN) /* \_SB_.PCI0.USB4.U4EN */ } } Else { Store (Zero, U4EN) /* \_SB_.PCI0.USB4.U4EN */ } } Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State { Return (0x02) } Method (_S4D, 0, NotSerialized) // _S4D: S4 Device State { Return (0x02) } } Device (USB5) { Name (_ADR, 0x001A0001) // _ADR: Address OperationRegion (U5CS, PCI_Config, 0xC4, 0x04) Field (U5CS, DWordAcc, NoLock, Preserve) { U5EN, 2 } Method (_PSW, 1, NotSerialized) // _PSW: Power State Wake { If (Arg0) { Store (One, ACPW) /* \ACPW */ If (ACPW) { Store (0x03, U5EN) /* \_SB_.PCI0.USB5.U5EN */ } } Else { Store (Zero, U5EN) /* \_SB_.PCI0.USB5.U5EN */ } } Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State { Return (0x02) } Method (_S4D, 0, NotSerialized) // _S4D: S4 Device State { Return (0x02) } } Device (EHC1) { Name (_ADR, 0x001D0007) // _ADR: Address OperationRegion (U7CS, PCI_Config, 0x54, 0x04) Field (U7CS, DWordAcc, NoLock, Preserve) { , 15, PMES, 1 } Device (HUB7) { Name (_ADR, Zero) // _ADR: Address Device (PRT1) { Name (_ADR, One) // _ADR: Address } Device (PRT2) { Name (_ADR, 0x02) // _ADR: Address } Device (PRT3) { Name (_ADR, 0x03) // _ADR: Address } Device (PRT4) { Name (_ADR, 0x04) // _ADR: Address } Device (PRT5) { Name (_ADR, 0x05) // _ADR: Address } Device (PRT6) { Name (_ADR, 0x06) // _ADR: Address } } Name (_PRW, Package (0x02) // _PRW: Power Resources for Wake { 0x0D, 0x03 }) Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State { Return (0x02) } Method (_S4D, 0, NotSerialized) // _S4D: S4 Device State { Return (0x02) } } Device (EHC2) { Name (_ADR, 0x001A0007) // _ADR: Address OperationRegion (UFCS, PCI_Config, 0x54, 0x04) Field (UFCS, DWordAcc, NoLock, Preserve) { , 15, PMES, 1 } Device (HUB7) { Name (_ADR, Zero) // _ADR: Address Device (PRT1) { Name (_ADR, One) // _ADR: Address } Device (PRT2) { Name (_ADR, 0x02) // _ADR: Address } Device (PRT3) { Name (_ADR, 0x03) // _ADR: Address } Device (PRT4) { Name (_ADR, 0x04) // _ADR: Address } } Name (_PRW, Package (0x02) // _PRW: Power Resources for Wake { 0x0D, 0x03 }) Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State { Return (0x02) } Method (_S4D, 0, NotSerialized) // _S4D: S4 Device State { Return (0x02) } } Device (PCIB) { Name (_ADR, 0x001E0000) // _ADR: Address Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table { If (GPIC) { Return (Package (0x02) { Package (0x04) { 0x0006FFFF, Zero, Zero, 0x16 }, Package (0x04) { 0x0006FFFF, One, Zero, 0x17 } }) } Else { Return (Package (0x02) { Package (0x04) { 0x0006FFFF, Zero, ^^LPCB.LNKG, Zero }, Package (0x04) { 0x0006FFFF, One, ^^LPCB.LNKH, Zero } }) } } } Device (LPCB) { Name (_ADR, 0x001F0000) // _ADR: Address OperationRegion (LPC0, PCI_Config, 0x40, 0xC0) Field (LPC0, AnyAcc, NoLock, Preserve) { Offset (0x20), PARC, 8, PBRC, 8, PCRC, 8, PDRC, 8, Offset (0x28), PERC, 8, PFRC, 8, PGRC, 8, PHRC, 8, Offset (0x40), CMAR, 3, , 1, CMBR, 3, Offset (0x41), LPTR, 2, Offset (0x42), CMAD, 1, CMBD, 1, LPTD, 1, FDDD, 1, Offset (0x48), IOR2, 16, , 2, LGRM, 6, Offset (0xB0), RAEN, 1, , 13, RCBA, 18 } OperationRegion (SMI0, SystemIO, 0x0000FE00, 0x00000002) Field (SMI0, AnyAcc, NoLock, Preserve) { SMIC, 8 } OperationRegion (SMI1, SystemMemory, 0xBF6E2EBD, 0x00000090) Field (SMI1, AnyAcc, NoLock, Preserve) { BCMD, 8, DID, 32, INFO, 1024 } Field (SMI1, AnyAcc, NoLock, Preserve) { AccessAs (ByteAcc, 0x00), Offset (0x05), INF, 8, INF1, 32 } Mutex (PSMX, 0x00) Method (PHSS, 1, NotSerialized) { Acquire (PSMX, 0xFFFF) Store (0x80, BCMD) /* \_SB_.PCI0.LPCB.BCMD */ Store (Arg0, DID) /* \_SB_.PCI0.LPCB.DID_ */ Store (Zero, SMIC) /* \_SB_.PCI0.LPCB.SMIC */ Release (PSMX) } Device (LNKA) { Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID Name (_UID, One) // _UID: Unique ID Method (_DIS, 0, Serialized) // _DIS: Disable Device { Store (0x80, PARC) /* \_SB_.PCI0.LPCB.PARC */ } Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings { IRQ (Level, ActiveLow, Shared, ) {1,3,4,5,6,7,10,12,14,15} }) Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings { Name (RTLA, ResourceTemplate () { IRQ (Level, ActiveLow, Shared, ) {} }) CreateWordField (RTLA, One, IRQ0) Store (Zero, IRQ0) /* \_SB_.PCI0.LPCB.LNKA._CRS.IRQ0 */ ShiftLeft (One, And (PARC, 0x0F), IRQ0) /* \_SB_.PCI0.LPCB.LNKA._CRS.IRQ0 */ Return (RTLA) /* \_SB_.PCI0.LPCB.LNKA._CRS.RTLA */ } Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings { CreateWordField (Arg0, One, IRQ0) FindSetRightBit (IRQ0, Local0) Decrement (Local0) Store (Local0, PARC) /* \_SB_.PCI0.LPCB.PARC */ } Method (_STA, 0, Serialized) // _STA: Status { If (And (PARC, 0x80)) { Return (0x09) } Else { Return (0x0B) } } } Device (LNKB) { Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID Name (_UID, 0x02) // _UID: Unique ID Method (_DIS, 0, Serialized) // _DIS: Disable Device { Store (0x80, PBRC) /* \_SB_.PCI0.LPCB.PBRC */ } Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings { IRQ (Level, ActiveLow, Shared, ) {1,3,4,5,6,7,11,12,14,15} }) Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings { Name (RTLB, ResourceTemplate () { IRQ (Level, ActiveLow, Shared, ) {} }) CreateWordField (RTLB, One, IRQ0) Store (Zero, IRQ0) /* \_SB_.PCI0.LPCB.LNKB._CRS.IRQ0 */ ShiftLeft (One, And (PBRC, 0x0F), IRQ0) /* \_SB_.PCI0.LPCB.LNKB._CRS.IRQ0 */ Return (RTLB) /* \_SB_.PCI0.LPCB.LNKB._CRS.RTLB */ } Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings { CreateWordField (Arg0, One, IRQ0) FindSetRightBit (IRQ0, Local0) Decrement (Local0) Store (Local0, PBRC) /* \_SB_.PCI0.LPCB.PBRC */ } Method (_STA, 0, Serialized) // _STA: Status { If (And (PBRC, 0x80)) { Return (0x09) } Else { Return (0x0B) } } } Device (LNKC) { Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID Name (_UID, 0x03) // _UID: Unique ID Method (_DIS, 0, Serialized) // _DIS: Disable Device { Store (0x80, PCRC) /* \_SB_.PCI0.LPCB.PCRC */ } Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings { IRQ (Level, ActiveLow, Shared, ) {1,3,4,5,6,7,10,12,14,15} }) Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings { Name (RTLC, ResourceTemplate () { IRQ (Level, ActiveLow, Shared, ) {} }) CreateWordField (RTLC, One, IRQ0) Store (Zero, IRQ0) /* \_SB_.PCI0.LPCB.LNKC._CRS.IRQ0 */ ShiftLeft (One, And (PCRC, 0x0F), IRQ0) /* \_SB_.PCI0.LPCB.LNKC._CRS.IRQ0 */ Return (RTLC) /* \_SB_.PCI0.LPCB.LNKC._CRS.RTLC */ } Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings { CreateWordField (Arg0, One, IRQ0) FindSetRightBit (IRQ0, Local0) Decrement (Local0) Store (Local0, PCRC) /* \_SB_.PCI0.LPCB.PCRC */ } Method (_STA, 0, Serialized) // _STA: Status { If (And (PCRC, 0x80)) { Return (0x09) } Else { Return (0x0B) } } } Device (LNKD) { Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID Name (_UID, 0x04) // _UID: Unique ID Method (_DIS, 0, Serialized) // _DIS: Disable Device { Store (0x80, PDRC) /* \_SB_.PCI0.LPCB.PDRC */ } Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings { IRQ (Level, ActiveLow, Shared, ) {1,3,4,5,6,7,11,12,14,15} }) Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings { Name (RTLD, ResourceTemplate () { IRQ (Level, ActiveLow, Shared, ) {} }) CreateWordField (RTLD, One, IRQ0) Store (Zero, IRQ0) /* \_SB_.PCI0.LPCB.LNKD._CRS.IRQ0 */ ShiftLeft (One, And (PDRC, 0x0F), IRQ0) /* \_SB_.PCI0.LPCB.LNKD._CRS.IRQ0 */ Return (RTLD) /* \_SB_.PCI0.LPCB.LNKD._CRS.RTLD */ } Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings { CreateWordField (Arg0, One, IRQ0) FindSetRightBit (IRQ0, Local0) Decrement (Local0) Store (Local0, PDRC) /* \_SB_.PCI0.LPCB.PDRC */ } Method (_STA, 0, Serialized) // _STA: Status { If (And (PDRC, 0x80)) { Return (0x09) } Else { Return (0x0B) } } } Device (LNKE) { Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID Name (_UID, 0x05) // _UID: Unique ID Method (_DIS, 0, Serialized) // _DIS: Disable Device { Store (0x80, PERC) /* \_SB_.PCI0.LPCB.PERC */ } Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings { IRQ (Level, ActiveLow, Shared, ) {1,3,4,5,6,7,10,12,14,15} }) Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings { Name (RTLE, ResourceTemplate () { IRQ (Level, ActiveLow, Shared, ) {} }) CreateWordField (RTLE, One, IRQ0) Store (Zero, IRQ0) /* \_SB_.PCI0.LPCB.LNKE._CRS.IRQ0 */ ShiftLeft (One, And (PERC, 0x0F), IRQ0) /* \_SB_.PCI0.LPCB.LNKE._CRS.IRQ0 */ Return (RTLE) /* \_SB_.PCI0.LPCB.LNKE._CRS.RTLE */ } Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings { CreateWordField (Arg0, One, IRQ0) FindSetRightBit (IRQ0, Local0) Decrement (Local0) Store (Local0, PERC) /* \_SB_.PCI0.LPCB.PERC */ } Method (_STA, 0, Serialized) // _STA: Status { If (And (PERC, 0x80)) { Return (0x09) } Else { Return (0x0B) } } } Device (LNKF) { Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID Name (_UID, 0x06) // _UID: Unique ID Method (_DIS, 0, Serialized) // _DIS: Disable Device { Store (0x80, PFRC) /* \_SB_.PCI0.LPCB.PFRC */ } Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings { IRQ (Level, ActiveLow, Shared, ) {1,3,4,5,6,7,11,12,14,15} }) Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings { Name (RTLF, ResourceTemplate () { IRQ (Level, ActiveLow, Shared, ) {} }) CreateWordField (RTLF, One, IRQ0) Store (Zero, IRQ0) /* \_SB_.PCI0.LPCB.LNKF._CRS.IRQ0 */ ShiftLeft (One, And (PFRC, 0x0F), IRQ0) /* \_SB_.PCI0.LPCB.LNKF._CRS.IRQ0 */ Return (RTLF) /* \_SB_.PCI0.LPCB.LNKF._CRS.RTLF */ } Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings { CreateWordField (Arg0, One, IRQ0) FindSetRightBit (IRQ0, Local0) Decrement (Local0) Store (Local0, PFRC) /* \_SB_.PCI0.LPCB.PFRC */ } Method (_STA, 0, Serialized) // _STA: Status { If (And (PFRC, 0x80)) { Return (0x09) } Else { Return (0x0B) } } } Device (LNKG) { Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID Name (_UID, 0x07) // _UID: Unique ID Method (_DIS, 0, Serialized) // _DIS: Disable Device { Store (0x80, PGRC) /* \_SB_.PCI0.LPCB.PGRC */ } Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings { IRQ (Level, ActiveLow, Shared, ) {1,3,4,5,6,7,10,12,14,15} }) Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings { Name (RTLG, ResourceTemplate () { IRQ (Level, ActiveLow, Shared, ) {} }) CreateWordField (RTLG, One, IRQ0) Store (Zero, IRQ0) /* \_SB_.PCI0.LPCB.LNKG._CRS.IRQ0 */ ShiftLeft (One, And (PGRC, 0x0F), IRQ0) /* \_SB_.PCI0.LPCB.LNKG._CRS.IRQ0 */ Return (RTLG) /* \_SB_.PCI0.LPCB.LNKG._CRS.RTLG */ } Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings { CreateWordField (Arg0, One, IRQ0) FindSetRightBit (IRQ0, Local0) Decrement (Local0) Store (Local0, PGRC) /* \_SB_.PCI0.LPCB.PGRC */ } Method (_STA, 0, Serialized) // _STA: Status { If (And (PGRC, 0x80)) { Return (0x09) } Else { Return (0x0B) } } } Device (LNKH) { Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID Name (_UID, 0x08) // _UID: Unique ID Method (_DIS, 0, Serialized) // _DIS: Disable Device { Store (0x80, PHRC) /* \_SB_.PCI0.LPCB.PHRC */ } Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings { IRQ (Level, ActiveLow, Shared, ) {1,3,4,5,6,7,11,12,14,15} }) Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings { Name (RTLH, ResourceTemplate () { IRQ (Level, ActiveLow, Shared, ) {} }) CreateWordField (RTLH, One, IRQ0) Store (Zero, IRQ0) /* \_SB_.PCI0.LPCB.LNKH._CRS.IRQ0 */ ShiftLeft (One, And (PHRC, 0x0F), IRQ0) /* \_SB_.PCI0.LPCB.LNKH._CRS.IRQ0 */ Return (RTLH) /* \_SB_.PCI0.LPCB.LNKH._CRS.RTLH */ } Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings { CreateWordField (Arg0, One, IRQ0) FindSetRightBit (IRQ0, Local0) Decrement (Local0) Store (Local0, PHRC) /* \_SB_.PCI0.LPCB.PHRC */ } Method (_STA, 0, Serialized) // _STA: Status { If (And (PHRC, 0x80)) { Return (0x09) } Else { Return (0x0B) } } } Device (DMAC) { Name (_HID, EisaId ("PNP0200") /* PC-class DMA Controller */) // _HID: Hardware ID Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { IO (Decode16, 0x0000, // Range Minimum 0x0000, // Range Maximum 0x01, // Alignment 0x20, // Length ) IO (Decode16, 0x0081, // Range Minimum 0x0081, // Range Maximum 0x01, // Alignment 0x11, // Length ) IO (Decode16, 0x0093, // Range Minimum 0x0093, // Range Maximum 0x01, // Alignment 0x0D, // Length ) IO (Decode16, 0x00C0, // Range Minimum 0x00C0, // Range Maximum 0x01, // Alignment 0x20, // Length ) DMA (Compatibility, NotBusMaster, Transfer8_16, ) {4} }) } Device (FWHD) { Name (_HID, EisaId ("INT0800") /* Intel 82802 Firmware Hub Device */) // _HID: Hardware ID Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { Memory32Fixed (ReadOnly, 0xFF000000, // Address Base 0x01000000, // Address Length ) }) } Device (HPET) { Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID Name (_CID, EisaId ("PNP0C01") /* System Board */) // _CID: Compatible ID Name (BUF0, ResourceTemplate () { Memory32Fixed (ReadOnly, 0xFED00000, // Address Base 0x00000400, // Address Length _Y14) }) Method (_STA, 0, NotSerialized) // _STA: Status { If (LGreaterEqual (OSYS, 0x07D1)) { If (HPAE) { Return (0x0F) } } ElseIf (HPAE) { Return (0x0B) } Return (Zero) } Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings { If (HPAE) { CreateDWordField (BUF0, \_SB.PCI0.LPCB.HPET._Y14._BAS, HPT0) // _BAS: Base Address If (LEqual (HPAS, One)) { Store (0xFED01000, HPT0) /* \_SB_.PCI0.LPCB.HPET._CRS.HPT0 */ } If (LEqual (HPAS, 0x02)) { Store (0xFED02000, HPT0) /* \_SB_.PCI0.LPCB.HPET._CRS.HPT0 */ } If (LEqual (HPAS, 0x03)) { Store (0xFED03000, HPT0) /* \_SB_.PCI0.LPCB.HPET._CRS.HPT0 */ } } Return (BUF0) /* \_SB_.PCI0.LPCB.HPET.BUF0 */ } } Device (IPIC) { Name (_HID, EisaId ("PNP0000") /* 8259-compatible Programmable Interrupt Controller */) // _HID: Hardware ID Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { IO (Decode16, 0x0020, // Range Minimum 0x0020, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x0024, // Range Minimum 0x0024, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x0028, // Range Minimum 0x0028, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x002C, // Range Minimum 0x002C, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x0030, // Range Minimum 0x0030, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x0034, // Range Minimum 0x0034, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x0038, // Range Minimum 0x0038, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x003C, // Range Minimum 0x003C, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x00A0, // Range Minimum 0x00A0, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x00A4, // Range Minimum 0x00A4, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x00A8, // Range Minimum 0x00A8, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x00AC, // Range Minimum 0x00AC, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x00B0, // Range Minimum 0x00B0, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x00B4, // Range Minimum 0x00B4, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x00B8, // Range Minimum 0x00B8, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x00BC, // Range Minimum 0x00BC, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x04D0, // Range Minimum 0x04D0, // Range Maximum 0x01, // Alignment 0x02, // Length ) IRQNoFlags () {2} }) } Device (MATH) { Name (_HID, EisaId ("PNP0C04") /* x87-compatible Floating Point Processing Unit */) // _HID: Hardware ID Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { IO (Decode16, 0x00F0, // Range Minimum 0x00F0, // Range Maximum 0x01, // Alignment 0x01, // Length ) IRQNoFlags () {13} }) } Device (LDRC) { Name (_HID, EisaId ("PNP0C02") /* PNP Motherboard Resources */) // _HID: Hardware ID Name (_UID, 0x02) // _UID: Unique ID Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { IO (Decode16, 0x002E, // Range Minimum 0x002E, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x004E, // Range Minimum 0x004E, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x0061, // Range Minimum 0x0061, // Range Maximum 0x01, // Alignment 0x01, // Length ) IO (Decode16, 0x0063, // Range Minimum 0x0063, // Range Maximum 0x01, // Alignment 0x01, // Length ) IO (Decode16, 0x0065, // Range Minimum 0x0065, // Range Maximum 0x01, // Alignment 0x01, // Length ) IO (Decode16, 0x0067, // Range Minimum 0x0067, // Range Maximum 0x01, // Alignment 0x01, // Length ) IO (Decode16, 0x0080, // Range Minimum 0x0080, // Range Maximum 0x01, // Alignment 0x01, // Length ) IO (Decode16, 0x0092, // Range Minimum 0x0092, // Range Maximum 0x01, // Alignment 0x01, // Length ) IO (Decode16, 0x00B2, // Range Minimum 0x00B2, // Range Maximum 0x01, // Alignment 0x02, // Length ) IO (Decode16, 0x0680, // Range Minimum 0x0680, // Range Maximum 0x01, // Alignment 0x20, // Length ) IO (Decode16, 0x0800, // Range Minimum 0x0800, // Range Maximum 0x01, // Alignment 0x10, // Length ) IO (Decode16, 0x1000, // Range Minimum 0x1000, // Range Maximum 0x01, // Alignment 0x80, // Length ) IO (Decode16, 0x1180, // Range Minimum 0x1180, // Range Maximum 0x01, // Alignment 0x40, // Length ) IO (Decode16, 0xFE00, // Range Minimum 0xFE00, // Range Maximum 0x01, // Alignment 0x01, // Length ) IO (Decode16, 0xFF00, // Range Minimum 0xFF00, // Range Maximum 0x01, // Alignment 0x80, // Length ) }) } Device (RTC) { Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { IO (Decode16, 0x0070, // Range Minimum 0x0070, // Range Maximum 0x01, // Alignment 0x08, // Length ) IRQNoFlags () {8} }) } Device (TIMR) { Name (_HID, EisaId ("PNP0100") /* PC-class System Timer */) // _HID: Hardware ID Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { IO (Decode16, 0x0040, // Range Minimum 0x0040, // Range Maximum 0x01, // Alignment 0x04, // Length ) IO (Decode16, 0x0050, // Range Minimum 0x0050, // Range Maximum 0x10, // Alignment 0x04, // Length ) IRQNoFlags () {0} }) } Device (ACAD) { Name (_HID, "ACPI0003" /* Power Source Device */) // _HID: Hardware ID Name (_PCL, Package (0x01) // _PCL: Power Consumer List { _SB }) Method (_PSR, 0, NotSerialized) // _PSR: Power Source { Store (One, ACPW) /* \ACPW */ Return (ACPW) /* \ACPW */ } } Method (ECOK, 0, NotSerialized) { If (LEqual (^EC0.Z009, One)) { Return (One) } Else { Return (Zero) } } Device (EC0) { Name (_HID, EisaId ("PNP0C09") /* Embedded Controller Device */) // _HID: Hardware ID Name (_GPE, 0x1C) // _GPE: General Purpose Events Name (Z009, Zero) Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { IO (Decode16, 0x0062, // Range Minimum 0x0062, // Range Maximum 0x01, // Alignment 0x01, // Length ) IO (Decode16, 0x0066, // Range Minimum 0x0066, // Range Maximum 0x01, // Alignment 0x01, // Length ) }) Method (_REG, 2, NotSerialized) // _REG: Region Availability { If (LEqual (Arg0, 0x03)) { Store (Arg1, Z009) /* \_SB_.PCI0.LPCB.EC0_.Z009 */ If (CondRefOf (_OSI, Local0)) { Store (Zero, BTDS) /* \_SB_.PCI0.LPCB.EC0_.BTDS */ If (_OSI ("Windows 2006")) { Store (One, BTDS) /* \_SB_.PCI0.LPCB.EC0_.BTDS */ } } } } OperationRegion (ERAM, EmbeddedControl, Zero, 0xFF) Field (ERAM, ByteAcc, Lock, Preserve) { Offset (0x60), SMPR, 8, SMST, 8, SMAD, 8, SMCM, 8, SMD0, 256, BCNT, 8, SMAA, 24, Offset (0x90), CHGM, 16, CHGS, 16, ENID, 8, ENIB, 8, ENDD, 8, CHGV, 8, CHGA, 16, BAL0, 1, BAL1, 1, BAL2, 1, BAL3, 1, BBC0, 1, BBC1, 1, BBC2, 1, BBC3, 1, Offset (0x9C), PHDD, 1, IFDD, 1, IODD, 1, SHDD, 1, S120, 1, EFDD, 1, CRTD, 1, SPWR, 1, SBTN, 1, VIDO, 1, VOLD, 1, VOLU, 1, MUTE, 1, CONT, 1, BRGT, 1, HBTN, 1, S4ST, 1, SKEY, 1, BKEY, 1, TOUP, 1, FNBN, 1, LIDF, 1, DIGM, 1, UWAK, 1, Offset (0xA0), DKSP, 1, DKIN, 1, DKID, 1, DKOK, 1, Offset (0xA1), DKPW, 1, Offset (0xA2), BTNS, 8, S1LD, 1, S3LD, 1, VGAQ, 1, PCMQ, 1, PCMR, 1, ADPT, 1, SLLS, 1, SYS7, 1, PWAK, 1, MWAK, 1, LWAK, 1, Offset (0xA5), Offset (0xAA), TCNL, 8, TMPI, 8, TMSD, 8, FASN, 4, FASU, 4, PCVL, 4, , 2, SWTO, 1, HWTO, 1, MODE, 1, FANS, 2, INIT, 1, FAN1, 1, FAN2, 1, FANT, 1, SKNM, 1, CTMP, 8, LIDE, 1, PMEE, 1, PWBE, 1, RNGE, 1, BTWE, 1, DCKE, 1, Offset (0xB2), SKTX, 8, SKTB, 8, SKTC, 8, SKTA, 8, Offset (0xB7), HAPL, 2, HAPR, 1, Offset (0xB8), BTDT, 1, BTPW, 1, BTDS, 1, BTPS, 1, BTSW, 1, BTWK, 1, BTLD, 1, Offset (0xB9), BRTS, 8, CNTS, 8, WLAT, 1, BTAT, 1, WLEX, 1, BTEX, 1, KLSW, 1, WLOK, 1, Offset (0xBC), PTID, 8, CPUT, 8, EPKT, 8, GHID, 8, , 4, BMF0, 3, BTY0, 1, BST0, 8, BRC0, 16, BSN0, 16, BPV0, 16, BDV0, 16, BDC0, 16, BFC0, 16, GAU0, 8, CYC0, 8, BPC0, 16, BAC0, 16, BAT0, 8, BTW0, 16, BDN0, 8, Offset (0xE0), , 4, BMF1, 3, BTY1, 1, BST1, 8, BRC1, 16, BSN1, 16, BPV1, 16, BDV1, 16, BDC1, 16, BFC1, 16, GAU1, 8, CYC1, 8, BPC1, 16, BAC1, 16, BAT1, 8, BTW1, 16 } Method (_Q11, 0, NotSerialized) // _Qxx: EC Query, xx=0x00-0xFF { Store (0x87, P80H) /* \P80H */ If (IGDS) { ^^^GFX0.BRTN (0x87) } Else { Notify (^^^PEGP.VGA.LCD, 0x87) // Device-Specific } } Method (_Q12, 0, NotSerialized) // _Qxx: EC Query, xx=0x00-0xFF { Store (0x86, P80H) /* \P80H */ If (IGDS) { ^^^GFX0.BRTN (0x86) } Else { Notify (^^^PEGP.VGA.LCD, 0x86) // Device-Specific } } Method (_Q1C, 0, NotSerialized) // _Qxx: EC Query, xx=0x00-0xFF { Store ("=====QUERY_1C=====", Debug) If (VIDO) { If (IGDS) { ^^^GFX0.GHDS (Zero) } Else { ^^^PEGP.VGA.DSSW () } Store (Zero, VIDO) /* \_SB_.PCI0.LPCB.EC0_.VIDO */ } } Method (_Q1D, 0, NotSerialized) // _Qxx: EC Query, xx=0x00-0xFF { Store ("=====QUERY_1D=====", Debug) PCLK () } Method (_Q1E, 0, NotSerialized) // _Qxx: EC Query, xx=0x00-0xFF { Store ("=====QUERY_1E=====", Debug) PCLK () } Method (_Q25, 0, NotSerialized) // _Qxx: EC Query, xx=0x00-0xFF { Store ("=====QUERY_25=====", Debug) Sleep (0x03E8) Notify (^^BAT1, 0x81) // Information Change Sleep (0x03E8) Notify (^^BAT1, 0x80) // Status Change } Method (_Q34, 0, NotSerialized) // _Qxx: EC Query, xx=0x00-0xFF { Store ("=====QUERY_34=====", Debug) If (BKEY) { PHSS (0x71) Store (Zero, BKEY) /* \_SB_.PCI0.LPCB.EC0_.BKEY */ } } Method (_Q37, 0, NotSerialized) // _Qxx: EC Query, xx=0x00-0xFF { Store ("=====QUERY_37=====", Debug) Notify (ACAD, 0x80) // Status Change Sleep (0x03E8) Notify (^^BAT1, 0x80) // Status Change } Method (_Q38, 0, NotSerialized) // _Qxx: EC Query, xx=0x00-0xFF { Store ("=====QUERY_38=====", Debug) Notify (ACAD, 0x80) // Status Change Sleep (0x03E8) Notify (^^BAT1, 0x80) // Status Change } Method (_Q2D, 0, NotSerialized) // _Qxx: EC Query, xx=0x00-0xFF { Store ("=====QUERY_2D=====", Debug) Store (Zero, DTSM) /* \DTSM */ TRAP (0x46) } Method (_Q2E, 0, NotSerialized) // _Qxx: EC Query, xx=0x00-0xFF { Store ("=====QUERY_2E=====", Debug) Store (One, DTSM) /* \DTSM */ TRAP (0x46) } OperationRegion (CCLK, SystemIO, 0x1010, 0x04) Field (CCLK, DWordAcc, NoLock, Preserve) { , 1, DUTY, 3, THEN, 1, Offset (0x01), FTT, 1, , 8, TSTS, 1 } OperationRegion (ECRM, EmbeddedControl, Zero, 0xFF) Field (ECRM, ByteAcc, Lock, Preserve) { Offset (0x94), ERIB, 16, ERBD, 8, Offset (0xAC), SDTM, 8, FSSN, 4, FANU, 4, PTVL, 3, , 4, TTHR, 1, Offset (0xBC), PJID, 8, Offset (0xBE), Offset (0xF9), RFRD, 16 } Mutex (FAMX, 0x00) Method (FANG, 1, NotSerialized) { Acquire (FAMX, 0xFFFF) Store (Arg0, ERIB) /* \_SB_.PCI0.LPCB.EC0_.ERIB */ Store (ERBD, Local0) Release (FAMX) Return (Local0) } Method (FANW, 2, NotSerialized) { Acquire (FAMX, 0xFFFF) Store (Arg0, ERIB) /* \_SB_.PCI0.LPCB.EC0_.ERIB */ Store (Arg1, ERBD) /* \_SB_.PCI0.LPCB.EC0_.ERBD */ Release (FAMX) Return (Arg1) } Method (TUVR, 1, NotSerialized) { Return (0x03) } Method (THRO, 1, NotSerialized) { If (LEqual (Arg0, Zero)) { Return (THEN) /* \_SB_.PCI0.LPCB.EC0_.THEN */ } ElseIf (LEqual (Arg0, One)) { Return (DUTY) /* \_SB_.PCI0.LPCB.EC0_.DUTY */ } ElseIf (LEqual (Arg0, 0x02)) { Return (TTHR) /* \_SB_.PCI0.LPCB.EC0_.TTHR */ } Else { Return (0xFF) } } Method (CLCK, 1, NotSerialized) { If (LEqual (Arg0, Zero)) { Store (Zero, THEN) /* \_SB_.PCI0.LPCB.EC0_.THEN */ Store (Zero, FTT) /* \_SB_.PCI0.LPCB.EC0_.FTT_ */ } Else { Store (Arg0, DUTY) /* \_SB_.PCI0.LPCB.EC0_.DUTY */ Store (One, THEN) /* \_SB_.PCI0.LPCB.EC0_.THEN */ } Return (THEN) /* \_SB_.PCI0.LPCB.EC0_.THEN */ } Method (PCLK, 0, NotSerialized) { Store (PTVL, Local0) If (LEqual (Local0, Zero)) { Store (Zero, THEN) /* \_SB_.PCI0.LPCB.EC0_.THEN */ Store (Zero, FTT) /* \_SB_.PCI0.LPCB.EC0_.FTT_ */ } Else { Decrement (Local0) Store (Not (Local0), Local1) And (Local1, 0x07, Local1) Store (Local1, DUTY) /* \_SB_.PCI0.LPCB.EC0_.DUTY */ Store (One, THEN) /* \_SB_.PCI0.LPCB.EC0_.THEN */ } } } Device (BAT1) { Name (_HID, EisaId ("PNP0C0A") /* Control Method Battery */) // _HID: Hardware ID Name (_UID, One) // _UID: Unique ID Name (_PCL, Package (0x01) // _PCL: Power Consumer List { _SB }) Method (_STA, 0, NotSerialized) // _STA: Status { If (LAnd (ECOK (), LEqual (ECDY, Zero))) { If (^^EC0.BAL0) { Sleep (0x14) Return (0x1F) } Else { Sleep (0x14) Return (0x0F) } } Else { Sleep (0x14) Return (0x1F) } } Method (_BIF, 0, NotSerialized) // _BIF: Battery Information { Name (STAT, Package (0x0D) { One, 0x0FA0, 0x0FA0, One, 0x2B5C, 0x01A4, 0x9C, 0x0108, 0x0EC4, "PA3465U ", "3658Q", "Li-Ion", "COMPAL " }) If (LAnd (ECOK (), LEqual (ECDY, Zero))) { Store (^^EC0.BDN0, Local0) If (LEqual (Local0, 0x08)) { Store (0xB4, Index (STAT, 0x06)) Store ("PA3457U ", Index (STAT, 0x09)) } If (LEqual (Local0, 0x20)) { Store (0x0102, Index (STAT, 0x06)) Store ("PA3457U ", Index (STAT, 0x09)) } Sleep (0x14) Store (^^EC0.BDC0, BFC1) /* \BFC1 */ Sleep (0x14) } Else { Store ("Li-Ion", Index (STAT, 0x0B)) } If (BFC1) { Divide (BFC1, 0x64, Local0, Local1) Multiply (Local1, 0x64, Local1) Store (Local1, BFC1) /* \BFC1 */ Store (Local1, Index (STAT, One)) Store (Local1, Index (STAT, 0x02)) } Return (STAT) /* \_SB_.PCI0.LPCB.BAT1._BIF.STAT */ } Method (_BST, 0, NotSerialized) // _BST: Battery Status { Name (PBST, Package (0x04) { Zero, 0xFFFFFFFF, 0xFFFFFFFF, 0x2B5C }) Store (0x2B5C, Local3) If (LAnd (ECOK (), LEqual (ECDY, Zero))) { Sleep (0x14) Store (^^EC0.BST0, BST1) /* \BST1 */ Sleep (0x14) Store (^^EC0.GAU0, BGU1) /* \BGU1 */ Sleep (0x14) } If (BFC1) { Multiply (BGU1, BFC1, Local2) Divide (Local2, 0x64, Local4, Local2) } Else { Multiply (BGU1, 0x28, Local2) } Store (BST1, Index (PBST, Zero)) Store (Zero, Index (PBST, One)) Store (Local2, Index (PBST, 0x02)) Store (Local3, Index (PBST, 0x03)) If (LGreater (ECDY, Zero)) { Decrement (ECDY) If (LEqual (ECDY, Zero)) { Notify (BAT1, 0x80) // Status Change } } Return (PBST) /* \_SB_.PCI0.LPCB.BAT1._BST.PBST */ } } Device (PS2K) { Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { IO (Decode16, 0x0060, // Range Minimum 0x0060, // Range Maximum 0x01, // Alignment 0x01, // Length ) IO (Decode16, 0x0064, // Range Minimum 0x0064, // Range Maximum 0x01, // Alignment 0x01, // Length ) IRQ (Edge, ActiveHigh, Exclusive, ) {1} }) } Device (PS2M) { Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { IRQ (Edge, ActiveHigh, Exclusive, ) {12} }) } } Device (PATA) { Name (_ADR, 0x001F0001) // _ADR: Address OperationRegion (PACS, PCI_Config, 0x40, 0xC0) Field (PACS, DWordAcc, NoLock, Preserve) { PRIT, 16, Offset (0x04), PSIT, 4, Offset (0x08), SYNC, 4, Offset (0x0A), SDT0, 2, , 2, SDT1, 2, Offset (0x14), ICR0, 4, ICR1, 4, ICR2, 4, ICR3, 4, ICR4, 4, ICR5, 4 } Device (PRID) { Name (_ADR, Zero) // _ADR: Address Method (_GTM, 0, NotSerialized) // _GTM: Get Timing Mode { Name (PBUF, Buffer (0x14) { /* 0000 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ /* 0010 */ 0x00, 0x00, 0x00, 0x00 // .... }) CreateDWordField (PBUF, Zero, PIO0) CreateDWordField (PBUF, 0x04, DMA0) CreateDWordField (PBUF, 0x08, PIO1) CreateDWordField (PBUF, 0x0C, DMA1) CreateDWordField (PBUF, 0x10, FLAG) Store (GETP (PRIT), PIO0) /* \_SB_.PCI0.PATA.PRID._GTM.PIO0 */ Store (GDMA (And (SYNC, One), And (ICR3, One), And (ICR0, One), SDT0, And (ICR1, One)), DMA0) /* \_SB_.PCI0.PATA.PRID._GTM.DMA0 */ If (LEqual (DMA0, 0xFFFFFFFF)) { Store (PIO0, DMA0) /* \_SB_.PCI0.PATA.PRID._GTM.DMA0 */ } If (And (PRIT, 0x4000)) { If (LEqual (And (PRIT, 0x90), 0x80)) { Store (0x0384, PIO1) /* \_SB_.PCI0.PATA.PRID._GTM.PIO1 */ } Else { Store (GETT (PSIT), PIO1) /* \_SB_.PCI0.PATA.PRID._GTM.PIO1 */ } } Else { Store (0xFFFFFFFF, PIO1) /* \_SB_.PCI0.PATA.PRID._GTM.PIO1 */ } Store (GDMA (And (SYNC, 0x02), And (ICR3, 0x02), And (ICR0, 0x02), SDT1, And (ICR1, 0x02)), DMA1) /* \_SB_.PCI0.PATA.PRID._GTM.DMA1 */ If (LEqual (DMA1, 0xFFFFFFFF)) { Store (PIO1, DMA1) /* \_SB_.PCI0.PATA.PRID._GTM.DMA1 */ } Store (GETF (And (SYNC, One), And (SYNC, 0x02), PRIT), FLAG) /* \_SB_.PCI0.PATA.PRID._GTM.FLAG */ If (And (LEqual (PIO0, 0xFFFFFFFF), LEqual (DMA0, 0xFFFFFFFF))) { Store (0x78, PIO0) /* \_SB_.PCI0.PATA.PRID._GTM.PIO0 */ Store (0x14, DMA0) /* \_SB_.PCI0.PATA.PRID._GTM.DMA0 */ Store (0x03, FLAG) /* \_SB_.PCI0.PATA.PRID._GTM.FLAG */ } Return (PBUF) /* \_SB_.PCI0.PATA.PRID._GTM.PBUF */ } Method (_STM, 3, NotSerialized) // _STM: Set Timing Mode { CreateDWordField (Arg0, Zero, PIO0) CreateDWordField (Arg0, 0x04, DMA0) CreateDWordField (Arg0, 0x08, PIO1) CreateDWordField (Arg0, 0x0C, DMA1) CreateDWordField (Arg0, 0x10, FLAG) If (LEqual (SizeOf (Arg1), 0x0200)) { And (PRIT, 0xC0F0, PRIT) /* \_SB_.PCI0.PATA.PRIT */ And (SYNC, 0x02, SYNC) /* \_SB_.PCI0.PATA.SYNC */ Store (Zero, SDT0) /* \_SB_.PCI0.PATA.SDT0 */ And (ICR0, 0x02, ICR0) /* \_SB_.PCI0.PATA.ICR0 */ And (ICR1, 0x02, ICR1) /* \_SB_.PCI0.PATA.ICR1 */ And (ICR3, 0x02, ICR3) /* \_SB_.PCI0.PATA.ICR3 */ And (ICR5, 0x02, ICR5) /* \_SB_.PCI0.PATA.ICR5 */ CreateWordField (Arg1, 0x62, W490) CreateWordField (Arg1, 0x6A, W530) CreateWordField (Arg1, 0x7E, W630) CreateWordField (Arg1, 0x80, W640) CreateWordField (Arg1, 0xB0, W880) CreateWordField (Arg1, 0xBA, W930) Or (PRIT, 0x8004, PRIT) /* \_SB_.PCI0.PATA.PRIT */ If (LAnd (And (FLAG, 0x02), And (W490, 0x0800))) { Or (PRIT, 0x02, PRIT) /* \_SB_.PCI0.PATA.PRIT */ } Or (PRIT, SETP (PIO0, W530, W640), PRIT) /* \_SB_.PCI0.PATA.PRIT */ If (And (FLAG, One)) { Or (SYNC, One, SYNC) /* \_SB_.PCI0.PATA.SYNC */ Store (SDMA (DMA0), SDT0) /* \_SB_.PCI0.PATA.SDT0 */ If (LLess (DMA0, 0x1E)) { Or (ICR3, One, ICR3) /* \_SB_.PCI0.PATA.ICR3 */ } If (LLess (DMA0, 0x3C)) { Or (ICR0, One, ICR0) /* \_SB_.PCI0.PATA.ICR0 */ } If (And (W930, 0x2000)) { Or (ICR1, One, ICR1) /* \_SB_.PCI0.PATA.ICR1 */ } } } If (LEqual (SizeOf (Arg2), 0x0200)) { And (PRIT, 0xBF0F, PRIT) /* \_SB_.PCI0.PATA.PRIT */ Store (Zero, PSIT) /* \_SB_.PCI0.PATA.PSIT */ And (SYNC, One, SYNC) /* \_SB_.PCI0.PATA.SYNC */ Store (Zero, SDT1) /* \_SB_.PCI0.PATA.SDT1 */ And (ICR0, One, ICR0) /* \_SB_.PCI0.PATA.ICR0 */ And (ICR1, One, ICR1) /* \_SB_.PCI0.PATA.ICR1 */ And (ICR3, One, ICR3) /* \_SB_.PCI0.PATA.ICR3 */ And (ICR5, One, ICR5) /* \_SB_.PCI0.PATA.ICR5 */ CreateWordField (Arg2, 0x62, W491) CreateWordField (Arg2, 0x6A, W531) CreateWordField (Arg2, 0x7E, W631) CreateWordField (Arg2, 0x80, W641) CreateWordField (Arg2, 0xB0, W881) CreateWordField (Arg2, 0xBA, W931) Or (PRIT, 0x8040, PRIT) /* \_SB_.PCI0.PATA.PRIT */ If (LAnd (And (FLAG, 0x08), And (W491, 0x0800))) { Or (PRIT, 0x20, PRIT) /* \_SB_.PCI0.PATA.PRIT */ } If (And (FLAG, 0x10)) { Or (PRIT, 0x4000, PRIT) /* \_SB_.PCI0.PATA.PRIT */ If (LGreater (PIO1, 0xF0)) { Or (PRIT, 0x80, PRIT) /* \_SB_.PCI0.PATA.PRIT */ } Else { Or (PRIT, 0x10, PRIT) /* \_SB_.PCI0.PATA.PRIT */ Store (SETT (PIO1, W531, W641), PSIT) /* \_SB_.PCI0.PATA.PSIT */ } } If (And (FLAG, 0x04)) { Or (SYNC, 0x02, SYNC) /* \_SB_.PCI0.PATA.SYNC */ Store (SDMA (DMA1), SDT1) /* \_SB_.PCI0.PATA.SDT1 */ If (LLess (DMA1, 0x1E)) { Or (ICR3, 0x02, ICR3) /* \_SB_.PCI0.PATA.ICR3 */ } If (LLess (DMA1, 0x3C)) { Or (ICR0, 0x02, ICR0) /* \_SB_.PCI0.PATA.ICR0 */ } If (And (W931, 0x2000)) { Or (ICR1, 0x02, ICR1) /* \_SB_.PCI0.PATA.ICR1 */ } } } } Device (P_D0) { Name (_ADR, Zero) // _ADR: Address Method (_GTF, 0, NotSerialized) // _GTF: Get Task File { Name (PIB0, Buffer (0x0E) { /* 0000 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xEF, 0x03, // ........ /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0xA0, 0xEF // ...... }) CreateByteField (PIB0, One, PMD0) CreateByteField (PIB0, 0x08, DMD0) If (And (PRIT, 0x02)) { If (LEqual (And (PRIT, 0x09), 0x08)) { Store (0x08, PMD0) /* \_SB_.PCI0.PATA.PRID.P_D0._GTF.PMD0 */ } Else { Store (0x0A, PMD0) /* \_SB_.PCI0.PATA.PRID.P_D0._GTF.PMD0 */ ShiftRight (And (PRIT, 0x0300), 0x08, Local0) ShiftRight (And (PRIT, 0x3000), 0x0C, Local1) Add (Local0, Local1, Local2) If (LEqual (0x03, Local2)) { Store (0x0B, PMD0) /* \_SB_.PCI0.PATA.PRID.P_D0._GTF.PMD0 */ } If (LEqual (0x05, Local2)) { Store (0x0C, PMD0) /* \_SB_.PCI0.PATA.PRID.P_D0._GTF.PMD0 */ } } } Else { Store (One, PMD0) /* \_SB_.PCI0.PATA.PRID.P_D0._GTF.PMD0 */ } If (And (SYNC, One)) { Store (Or (SDT0, 0x40), DMD0) /* \_SB_.PCI0.PATA.PRID.P_D0._GTF.DMD0 */ If (And (ICR1, One)) { If (And (ICR0, One)) { Add (DMD0, 0x02, DMD0) /* \_SB_.PCI0.PATA.PRID.P_D0._GTF.DMD0 */ } If (And (ICR3, One)) { Store (0x45, DMD0) /* \_SB_.PCI0.PATA.PRID.P_D0._GTF.DMD0 */ } } } Else { Or (Subtract (And (PMD0, 0x07), 0x02), 0x20, DMD0) /* \_SB_.PCI0.PATA.PRID.P_D0._GTF.DMD0 */ } Return (PIB0) /* \_SB_.PCI0.PATA.PRID.P_D0._GTF.PIB0 */ } } Device (P_D1) { Name (_ADR, One) // _ADR: Address Method (_GTF, 0, NotSerialized) // _GTF: Get Task File { Name (PIB1, Buffer (0x0E) { /* 0000 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xEF, 0x03, // ........ /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0xB0, 0xEF // ...... }) CreateByteField (PIB1, One, PMD1) CreateByteField (PIB1, 0x08, DMD1) If (And (PRIT, 0x20)) { If (LEqual (And (PRIT, 0x90), 0x80)) { Store (0x08, PMD1) /* \_SB_.PCI0.PATA.PRID.P_D1._GTF.PMD1 */ } Else { Add (And (PSIT, 0x03), ShiftRight (And (PSIT, 0x0C), 0x02), Local0) If (LEqual (0x05, Local0)) { Store (0x0C, PMD1) /* \_SB_.PCI0.PATA.PRID.P_D1._GTF.PMD1 */ } ElseIf (LEqual (0x03, Local0)) { Store (0x0B, PMD1) /* \_SB_.PCI0.PATA.PRID.P_D1._GTF.PMD1 */ } Else { Store (0x0A, PMD1) /* \_SB_.PCI0.PATA.PRID.P_D1._GTF.PMD1 */ } } } Else { Store (One, PMD1) /* \_SB_.PCI0.PATA.PRID.P_D1._GTF.PMD1 */ } If (And (SYNC, 0x02)) { Store (Or (SDT1, 0x40), DMD1) /* \_SB_.PCI0.PATA.PRID.P_D1._GTF.DMD1 */ If (And (ICR1, 0x02)) { If (And (ICR0, 0x02)) { Add (DMD1, 0x02, DMD1) /* \_SB_.PCI0.PATA.PRID.P_D1._GTF.DMD1 */ } If (And (ICR3, 0x02)) { Store (0x45, DMD1) /* \_SB_.PCI0.PATA.PRID.P_D1._GTF.DMD1 */ } } } Else { Or (Subtract (And (PMD1, 0x07), 0x02), 0x20, DMD1) /* \_SB_.PCI0.PATA.PRID.P_D1._GTF.DMD1 */ } Return (PIB1) /* \_SB_.PCI0.PATA.PRID.P_D1._GTF.PIB1 */ } } } } Device (SATA) { Name (_ADR, 0x001F0002) // _ADR: Address OperationRegion (SACS, PCI_Config, 0x40, 0xC0) Field (SACS, DWordAcc, NoLock, Preserve) { PRIT, 16, SECT, 16, PSIT, 4, SSIT, 4, Offset (0x08), SYNC, 4, Offset (0x0A), SDT0, 2, , 2, SDT1, 2, Offset (0x0B), SDT2, 2, , 2, SDT3, 2, Offset (0x14), ICR0, 4, ICR1, 4, ICR2, 4, ICR3, 4, ICR4, 4, ICR5, 4, Offset (0x50), MAPV, 2 } } Device (SBUS) { Name (_ADR, 0x001F0003) // _ADR: Address OperationRegion (SMBP, PCI_Config, 0x40, 0xC0) Field (SMBP, DWordAcc, NoLock, Preserve) { , 2, I2CE, 1 } OperationRegion (SMBI, SystemIO, 0x1C20, 0x10) Field (SMBI, ByteAcc, NoLock, Preserve) { HSTS, 8, Offset (0x02), HCON, 8, HCOM, 8, TXSA, 8, DAT0, 8, DAT1, 8, HBDR, 8, PECR, 8, RXSA, 8, SDAT, 16 } Method (SSXB, 2, Serialized) { If (STRT ()) { Return (Zero) } Store (Zero, I2CE) /* \_SB_.PCI0.SBUS.I2CE */ Store (0xBF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Store (Arg0, TXSA) /* \_SB_.PCI0.SBUS.TXSA */ Store (Arg1, HCOM) /* \_SB_.PCI0.SBUS.HCOM */ Store (0x48, HCON) /* \_SB_.PCI0.SBUS.HCON */ If (COMP ()) { Or (HSTS, 0xFF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Return (One) } Return (Zero) } Method (SRXB, 1, Serialized) { If (STRT ()) { Return (0xFFFF) } Store (Zero, I2CE) /* \_SB_.PCI0.SBUS.I2CE */ Store (0xBF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Store (Or (Arg0, One), TXSA) /* \_SB_.PCI0.SBUS.TXSA */ Store (0x44, HCON) /* \_SB_.PCI0.SBUS.HCON */ If (COMP ()) { Or (HSTS, 0xFF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Return (DAT0) /* \_SB_.PCI0.SBUS.DAT0 */ } Return (0xFFFF) } Method (SWRB, 3, Serialized) { If (STRT ()) { Return (Zero) } Store (Zero, I2CE) /* \_SB_.PCI0.SBUS.I2CE */ Store (0xBF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Store (Arg0, TXSA) /* \_SB_.PCI0.SBUS.TXSA */ Store (Arg1, HCOM) /* \_SB_.PCI0.SBUS.HCOM */ Store (Arg2, DAT0) /* \_SB_.PCI0.SBUS.DAT0 */ Store (0x48, HCON) /* \_SB_.PCI0.SBUS.HCON */ If (COMP ()) { Or (HSTS, 0xFF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Return (One) } Return (Zero) } Method (SRDB, 2, Serialized) { If (STRT ()) { Return (0xFFFF) } Store (Zero, I2CE) /* \_SB_.PCI0.SBUS.I2CE */ Store (0xBF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Store (Or (Arg0, One), TXSA) /* \_SB_.PCI0.SBUS.TXSA */ Store (Arg1, HCOM) /* \_SB_.PCI0.SBUS.HCOM */ Store (0x48, HCON) /* \_SB_.PCI0.SBUS.HCON */ If (COMP ()) { Or (HSTS, 0xFF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Return (DAT0) /* \_SB_.PCI0.SBUS.DAT0 */ } Return (0xFFFF) } Method (SWRW, 3, Serialized) { If (STRT ()) { Return (Zero) } Store (Zero, I2CE) /* \_SB_.PCI0.SBUS.I2CE */ Store (0xBF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Store (Arg0, TXSA) /* \_SB_.PCI0.SBUS.TXSA */ Store (Arg1, HCOM) /* \_SB_.PCI0.SBUS.HCOM */ And (Arg2, 0xFF, DAT0) /* \_SB_.PCI0.SBUS.DAT0 */ And (ShiftRight (Arg2, 0x08), 0xFF, DAT1) /* \_SB_.PCI0.SBUS.DAT1 */ Store (0x4C, HCON) /* \_SB_.PCI0.SBUS.HCON */ If (COMP ()) { Or (HSTS, 0xFF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Return (One) } Return (Zero) } Method (SRDW, 2, Serialized) { If (STRT ()) { Return (0xFFFF) } Store (Zero, I2CE) /* \_SB_.PCI0.SBUS.I2CE */ Store (0xBF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Store (Or (Arg0, One), TXSA) /* \_SB_.PCI0.SBUS.TXSA */ Store (Arg1, HCOM) /* \_SB_.PCI0.SBUS.HCOM */ Store (0x4C, HCON) /* \_SB_.PCI0.SBUS.HCON */ If (COMP ()) { Or (HSTS, 0xFF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Return (Or (ShiftLeft (DAT1, 0x08), DAT0)) } Return (0xFFFFFFFF) } Method (SBLW, 4, Serialized) { If (STRT ()) { Return (Zero) } Store (Arg3, I2CE) /* \_SB_.PCI0.SBUS.I2CE */ Store (0xBF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Store (Arg0, TXSA) /* \_SB_.PCI0.SBUS.TXSA */ Store (Arg1, HCOM) /* \_SB_.PCI0.SBUS.HCOM */ Store (SizeOf (Arg2), DAT0) /* \_SB_.PCI0.SBUS.DAT0 */ Store (Zero, Local1) Store (DerefOf (Index (Arg2, Zero)), HBDR) /* \_SB_.PCI0.SBUS.HBDR */ Store (0x54, HCON) /* \_SB_.PCI0.SBUS.HCON */ While (LGreater (SizeOf (Arg2), Local1)) { Store (0x0FA0, Local0) While (LAnd (LNot (And (HSTS, 0x80)), Local0)) { Decrement (Local0) Stall (0x32) } If (LNot (Local0)) { KILL () Return (Zero) } Store (0x80, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Increment (Local1) If (LGreater (SizeOf (Arg2), Local1)) { Store (DerefOf (Index (Arg2, Local1)), HBDR) /* \_SB_.PCI0.SBUS.HBDR */ } } If (COMP ()) { Or (HSTS, 0xFF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Return (One) } Return (Zero) } Method (SBLR, 3, Serialized) { Name (TBUF, Buffer (0x0100){}) If (STRT ()) { Return (Zero) } Store (Arg2, I2CE) /* \_SB_.PCI0.SBUS.I2CE */ Store (0xBF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Store (Or (Arg0, One), TXSA) /* \_SB_.PCI0.SBUS.TXSA */ Store (Arg1, HCOM) /* \_SB_.PCI0.SBUS.HCOM */ Store (0x54, HCON) /* \_SB_.PCI0.SBUS.HCON */ Store (0x0FA0, Local0) While (LAnd (LNot (And (HSTS, 0x80)), Local0)) { Decrement (Local0) Stall (0x32) } If (LNot (Local0)) { KILL () Return (Zero) } Store (DAT0, Index (TBUF, Zero)) Store (0x80, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Store (One, Local1) While (LLess (Local1, DerefOf (Index (TBUF, Zero)))) { Store (0x0FA0, Local0) While (LAnd (LNot (And (HSTS, 0x80)), Local0)) { Decrement (Local0) Stall (0x32) } If (LNot (Local0)) { KILL () Return (Zero) } Store (HBDR, Index (TBUF, Local1)) Store (0x80, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Increment (Local1) } If (COMP ()) { Or (HSTS, 0xFF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ Return (TBUF) /* \_SB_.PCI0.SBUS.SBLR.TBUF */ } Return (Zero) } Method (STRT, 0, Serialized) { Store (0xC8, Local0) While (Local0) { If (And (HSTS, 0x40)) { Decrement (Local0) Sleep (One) If (LEqual (Local0, Zero)) { Return (One) } } Else { Store (Zero, Local0) } } Store (0x0FA0, Local0) While (Local0) { If (And (HSTS, One)) { Decrement (Local0) Stall (0x32) If (LEqual (Local0, Zero)) { KILL () } } Else { Return (Zero) } } Return (One) } Method (COMP, 0, Serialized) { Store (0x0FA0, Local0) While (Local0) { If (And (HSTS, 0x02)) { Return (One) } Else { Decrement (Local0) Stall (0x32) If (LEqual (Local0, Zero)) { KILL () } } } Return (Zero) } Method (KILL, 0, Serialized) { Or (HCON, 0x02, HCON) /* \_SB_.PCI0.SBUS.HCON */ Or (HSTS, 0xFF, HSTS) /* \_SB_.PCI0.SBUS.HSTS */ } } } } } fwts-test/disassemble-0001/SSDT1.dsl.original000066400000000000000000000134401465205512700210450ustar00rootroot00000000000000/* * Intel ACPI Component Architecture * AML/ASL+ Disassembler version 20170531 (64-bit version) * Copyright (c) 2000 - 2017 Intel Corporation * * Disassembling to non-symbolic legacy ASL operators * * Disassembly of /tmp/fwts_tmp_table_11901_SSDT_12.dsl, Thu Jun 1 11:20:40 2017 * * Original Table Header: * Signature "SSDT" * Length 0x000002AD (685) * Revision 0x01 * Checksum 0x59 * OEM ID "SataRe" * OEM Table ID "SataAhci" * OEM Revision 0x00001000 (4096) * Compiler ID "INTL" * Compiler Version 0x20050624 (537200164) */ DefinitionBlock ("", "SSDT", 1, "SataRe", "SataAhci", 0x00001000) { External (_SB_.PCI0.SATA, DeviceObj) External (GTF0, FieldUnitObj) External (GTF1, FieldUnitObj) External (GTF2, FieldUnitObj) Scope (\_SB.PCI0.SATA) { Device (PRT0) { Name (_ADR, 0xFFFF) // _ADR: Address Method (_SDD, 1, NotSerialized) // _SDD: Set Device Data { Name (GBU0, Buffer (0x07) { 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00 // ....... }) CreateByteField (GBU0, 0x00, GB00) CreateByteField (GBU0, 0x01, GB01) CreateByteField (GBU0, 0x02, GB02) CreateByteField (GBU0, 0x03, GB03) CreateByteField (GBU0, 0x04, GB04) CreateByteField (GBU0, 0x05, GB05) CreateByteField (GBU0, 0x06, GB06) If (LEqual (SizeOf (Arg0), 0x0200)) { CreateWordField (Arg0, 0x9C, W780) If (And (W780, 0x08)) { Store (0x10, GB00) /* \_SB_.PCI0.SATA.PRT0._SDD.GB00 */ Store (0x03, GB01) /* \_SB_.PCI0.SATA.PRT0._SDD.GB01 */ Store (0xEF, GB06) /* \_SB_.PCI0.SATA.PRT0._SDD.GB06 */ } Else { Store (0x90, GB00) /* \_SB_.PCI0.SATA.PRT0._SDD.GB00 */ Store (0x03, GB01) /* \_SB_.PCI0.SATA.PRT0._SDD.GB01 */ Store (0xEF, GB06) /* \_SB_.PCI0.SATA.PRT0._SDD.GB06 */ } } Store (GBU0, GTF0) /* \GTF0 */ } Method (_GTF, 0, NotSerialized) // _GTF: Get Task File { Return (GTF0) /* \GTF0 */ } } Device (PRT1) { Name (_ADR, 0x0001FFFF) // _ADR: Address Method (_SDD, 1, NotSerialized) // _SDD: Set Device Data { Name (GBU1, Buffer (0x07) { 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00 // ....... }) CreateByteField (GBU1, 0x00, GB10) CreateByteField (GBU1, 0x01, GB11) CreateByteField (GBU1, 0x02, GB12) CreateByteField (GBU1, 0x03, GB13) CreateByteField (GBU1, 0x04, GB14) CreateByteField (GBU1, 0x05, GB15) CreateByteField (GBU1, 0x06, GB16) If (LEqual (SizeOf (Arg0), 0x0200)) { CreateWordField (Arg0, 0x9C, W781) If (And (W781, 0x08)) { Store (0x10, GB10) /* \_SB_.PCI0.SATA.PRT1._SDD.GB10 */ Store (0x03, GB11) /* \_SB_.PCI0.SATA.PRT1._SDD.GB11 */ Store (0xEF, GB16) /* \_SB_.PCI0.SATA.PRT1._SDD.GB16 */ } Else { Store (0x90, GB10) /* \_SB_.PCI0.SATA.PRT1._SDD.GB10 */ Store (0x03, GB11) /* \_SB_.PCI0.SATA.PRT1._SDD.GB11 */ Store (0xEF, GB16) /* \_SB_.PCI0.SATA.PRT1._SDD.GB16 */ } } Store (GBU1, GTF1) /* \GTF1 */ } Method (_GTF, 0, NotSerialized) // _GTF: Get Task File { Return (GTF1) /* \GTF1 */ } } Device (PRT2) { Name (_ADR, 0x0002FFFF) // _ADR: Address Method (_SDD, 1, NotSerialized) // _SDD: Set Device Data { Name (GBU2, Buffer (0x07) { 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00 // ....... }) CreateByteField (GBU2, 0x00, GB20) CreateByteField (GBU2, 0x01, GB21) CreateByteField (GBU2, 0x02, GB22) CreateByteField (GBU2, 0x03, GB23) CreateByteField (GBU2, 0x04, GB24) CreateByteField (GBU2, 0x05, GB25) CreateByteField (GBU2, 0x06, GB26) If (LEqual (SizeOf (Arg0), 0x0200)) { CreateWordField (Arg0, 0x9C, W782) If (And (W782, 0x08)) { Store (0x10, GB20) /* \_SB_.PCI0.SATA.PRT2._SDD.GB20 */ Store (0x03, GB21) /* \_SB_.PCI0.SATA.PRT2._SDD.GB21 */ Store (0xEF, GB26) /* \_SB_.PCI0.SATA.PRT2._SDD.GB26 */ } Else { Store (0x90, GB20) /* \_SB_.PCI0.SATA.PRT2._SDD.GB20 */ Store (0x03, GB21) /* \_SB_.PCI0.SATA.PRT2._SDD.GB21 */ Store (0xEF, GB26) /* \_SB_.PCI0.SATA.PRT2._SDD.GB26 */ } } Store (GBU2, GTF2) /* \GTF2 */ } Method (_GTF, 0, NotSerialized) // _GTF: Get Task File { Return (GTF2) /* \GTF2 */ } } } } fwts-test/disassemble-0001/SSDT2.dsl.original000066400000000000000000000031301465205512700210410ustar00rootroot00000000000000/* * Intel ACPI Component Architecture * AML/ASL+ Disassembler version 20170531 (64-bit version) * Copyright (c) 2000 - 2017 Intel Corporation * * Disassembling to non-symbolic legacy ASL operators * * Disassembly of /tmp/fwts_tmp_table_11901_SSDT_13.dsl, Thu Jun 1 11:20:40 2017 * * Original Table Header: * Signature "SSDT" * Length 0x000000A3 (163) * Revision 0x01 * Checksum 0xED * OEM ID "BrtRef" * OEM Table ID "DD01BRT" * OEM Revision 0x00001000 (4096) * Compiler ID "INTL" * Compiler Version 0x20050624 (537200164) */ DefinitionBlock ("", "SSDT", 1, "BrtRef", "DD01BRT", 0x00001000) { External (_SB_.PCI0.GFX0.DD03, DeviceObj) External (_SB_.PCI0.LPCB.EC0_.BRTS, FieldUnitObj) Scope (\_SB.PCI0.GFX0.DD03) { Method (_BCL, 0, NotSerialized) // _BCL: Brightness Control Levels { Return (Package (0x0A) { 0x46, 0x28, 0x00, 0x0A, 0x14, 0x1E, 0x28, 0x32, 0x3C, 0x46 }) } Method (_BCM, 1, NotSerialized) // _BCM: Brightness Control Method { Divide (Arg0, 0x0A, Local0, Local1) Store (Local1, \_SB.PCI0.LPCB.EC0.BRTS) } Method (_BQC, 0, NotSerialized) // _BQC: Brightness Query Current { Multiply (\_SB.PCI0.LPCB.EC0.BRTS, 0x0A, Local0) Return (Local0) } } } fwts-test/disassemble-0001/SSDT3.dsl.original000066400000000000000000000161511465205512700210510ustar00rootroot00000000000000/* * Intel ACPI Component Architecture * AML/ASL+ Disassembler version 20170531 (64-bit version) * Copyright (c) 2000 - 2017 Intel Corporation * * Disassembling to non-symbolic legacy ASL operators * * Disassembly of /tmp/fwts_tmp_table_11901_SSDT_14.dsl, Thu Jun 1 11:20:40 2017 * * Original Table Header: * Signature "SSDT" * Length 0x0000025F (607) * Revision 0x01 * Checksum 0xC8 * OEM ID "PmRef" * OEM Table ID "Cpu0Tst" * OEM Revision 0x00003000 (12288) * Compiler ID "INTL" * Compiler Version 0x20050624 (537200164) */ DefinitionBlock ("", "SSDT", 1, "PmRef", "Cpu0Tst", 0x00003000) { External (_PR_.CPU0, ProcessorObj) External (_PSS, IntObj) External (CFGD, IntObj) External (PDC0, IntObj) Scope (\_PR.CPU0) { Name (_TPC, 0x00) // _TPC: Throttling Present Capabilities Method (_PTC, 0, NotSerialized) // _PTC: Processor Throttling Control { If (And (PDC0, 0x04)) { Return (Package (0x02) { ResourceTemplate () { Register (FFixedHW, 0x00, // Bit Width 0x00, // Bit Offset 0x0000000000000000, // Address ,) }, ResourceTemplate () { Register (FFixedHW, 0x00, // Bit Width 0x00, // Bit Offset 0x0000000000000000, // Address ,) } }) } Return (Package (0x02) { ResourceTemplate () { Register (SystemIO, 0x04, // Bit Width 0x01, // Bit Offset 0x0000000000001010, // Address ,) }, ResourceTemplate () { Register (SystemIO, 0x04, // Bit Width 0x01, // Bit Offset 0x0000000000001010, // Address ,) } }) } Name (TSSI, Package (0x08) { Package (0x05) { 0x64, 0x03E8, 0x00, 0x00, 0x00 }, Package (0x05) { 0x58, 0x036B, 0x00, 0x0F, 0x00 }, Package (0x05) { 0x4B, 0x02EE, 0x00, 0x0E, 0x00 }, Package (0x05) { 0x3F, 0x0271, 0x00, 0x0D, 0x00 }, Package (0x05) { 0x32, 0x01F4, 0x00, 0x0C, 0x00 }, Package (0x05) { 0x26, 0x0177, 0x00, 0x0B, 0x00 }, Package (0x05) { 0x19, 0xFA, 0x00, 0x0A, 0x00 }, Package (0x05) { 0x0D, 0x7D, 0x00, 0x09, 0x00 } }) Name (TSSM, Package (0x08) { Package (0x05) { 0x64, 0x03E8, 0x00, 0x00, 0x00 }, Package (0x05) { 0x58, 0x036B, 0x00, 0x1E, 0x00 }, Package (0x05) { 0x4B, 0x02EE, 0x00, 0x1C, 0x00 }, Package (0x05) { 0x3F, 0x0271, 0x00, 0x1A, 0x00 }, Package (0x05) { 0x32, 0x01F4, 0x00, 0x18, 0x00 }, Package (0x05) { 0x26, 0x0177, 0x00, 0x16, 0x00 }, Package (0x05) { 0x19, 0xFA, 0x00, 0x14, 0x00 }, Package (0x05) { 0x0D, 0x7D, 0x00, 0x12, 0x00 } }) Name (TSSF, 0x00) Method (_TSS, 0, NotSerialized) // _TSS: Throttling Supported States { If (LAnd (LNot (TSSF), CondRefOf (_PSS))) { Store (_PSS, Local0) Store (SizeOf (Local0), Local1) Decrement (Local1) Store (DerefOf (Index (DerefOf (Index (Local0, Local1)), 0x01)), Local2) Store (0x00, Local3) While (LLess (Local3, SizeOf (TSSI))) { Store (Divide (Multiply (Local2, Subtract (0x08, Local3)), 0x08, ), Local4) Store (Local4, Index (DerefOf (Index (TSSI, Local3)), 0x01)) Store (Local4, Index (DerefOf (Index (TSSM, Local3)), 0x01)) Increment (Local3) } Store (Ones, TSSF) /* \_PR_.CPU0.TSSF */ } If (And (PDC0, 0x04)) { Return (TSSM) /* \_PR_.CPU0.TSSM */ } Return (TSSI) /* \_PR_.CPU0.TSSI */ } Method (_TSD, 0, NotSerialized) // _TSD: Throttling State Dependencies { If (LAnd (And (CFGD, 0x01000000), LNot (And (PDC0, 0x04)))) { Return (Package (0x01) { Package (0x05) { 0x05, 0x00, 0x00, 0xFD, 0x02 } }) } Return (Package (0x01) { Package (0x05) { 0x05, 0x00, 0x00, 0xFC, 0x01 } }) } } } fwts-test/disassemble-0001/SSDT4.dsl.original000066400000000000000000000040321465205512700210450ustar00rootroot00000000000000/* * Intel ACPI Component Architecture * AML/ASL+ Disassembler version 20170531 (64-bit version) * Copyright (c) 2000 - 2017 Intel Corporation * * Disassembling to non-symbolic legacy ASL operators * * Disassembly of /tmp/fwts_tmp_table_11901_SSDT_15.dsl, Thu Jun 1 11:20:40 2017 * * Original Table Header: * Signature "SSDT" * Length 0x000000A6 (166) * Revision 0x01 * Checksum 0x6D * OEM ID "PmRef" * OEM Table ID "Cpu1Tst" * OEM Revision 0x00003000 (12288) * Compiler ID "INTL" * Compiler Version 0x20050624 (537200164) */ DefinitionBlock ("", "SSDT", 1, "PmRef", "Cpu1Tst", 0x00003000) { External (_PR_.CPU0._PTC, MethodObj) // 0 Arguments External (_PR_.CPU0._TSS, MethodObj) // 0 Arguments External (_PR_.CPU1, ProcessorObj) External (CFGD, IntObj) External (PDC1, IntObj) Scope (\_PR.CPU1) { Name (_TPC, 0x00) // _TPC: Throttling Present Capabilities Method (_PTC, 0, NotSerialized) // _PTC: Processor Throttling Control { Return (\_PR.CPU0._PTC ()) } Method (_TSS, 0, NotSerialized) // _TSS: Throttling Supported States { Return (\_PR.CPU0._TSS ()) } Method (_TSD, 0, NotSerialized) // _TSD: Throttling State Dependencies { If (LAnd (And (CFGD, 0x01000000), LNot (And (PDC1, 0x04)))) { Return (Package (0x01) { Package (0x05) { 0x05, 0x00, 0x00, 0xFD, 0x02 } }) } Return (Package (0x01) { Package (0x05) { 0x05, 0x00, 0x01, 0xFC, 0x01 } }) } } } fwts-test/disassemble-0001/SSDT5.dsl.original000066400000000000000000000157601465205512700210600ustar00rootroot00000000000000/* * Intel ACPI Component Architecture * AML/ASL+ Disassembler version 20200925 (64-bit version) * Copyright (c) 2000 - 2021 Intel Corporation * * Disassembling to non-symbolic legacy ASL operators * * Disassembly of /tmp/fwts_tmp_table_134815_SSDT_16.dsl, Thu Oct 8 17:07:40 2020 * * Original Table Header: * Signature "SSDT" * Length 0x000004E6 (1254) * Revision 0x01 * Checksum 0xDF * OEM ID "PmRef" * OEM Table ID "CpuPm" * OEM Revision 0x00003000 (12288) * Compiler ID "INTL" * Compiler Version 0x20050624 (537200164) */ DefinitionBlock ("", "SSDT", 1, "PmRef", "CpuPm", 0x00003000) { External (_PR_.CPU0, ProcessorObj) External (_PR_.CPU1, ProcessorObj) External (PCP0, FieldUnitObj) External (PCP1, FieldUnitObj) Scope (\) { Name (SSDT, Package (0x0C) { "CPU0IST ", 0xBF6D959E, 0x000001B4, "CPU1IST ", 0xBF6D9752, 0x000000C8, "CPU0CST ", 0xBF6D906F, 0x000004AA, "CPU1CST ", 0xBF6D9519, 0x00000085 }) Name (CFGD, 0x113F69F1) Name (\PDC0, 0x80000000) Name (\PDC1, 0x80000000) Name (\SDTL, 0x00) } Scope (\_PR.CPU0) { Name (HI0, 0x00) Name (HC0, 0x00) Method (_PDC, 1, NotSerialized) // _PDC: Processor Driver Capabilities { CreateDWordField (Arg0, 0x00, REVS) CreateDWordField (Arg0, 0x04, SIZE) Store (SizeOf (Arg0), Local0) Store (Subtract (Local0, 0x08), Local1) CreateField (Arg0, 0x40, Multiply (Local1, 0x08), TEMP) Name (STS0, Buffer (0x04) { 0x00, 0x00, 0x00, 0x00 // .... }) Concatenate (STS0, TEMP, Local2) _OSC (ToUUID ("4077a616-290c-47be-9ebd-d87058713953") /* Unknown UUID */, REVS, SIZE, Local2) } Method (_OSC, 4, NotSerialized) // _OSC: Operating System Capabilities { CreateDWordField (Arg3, 0x00, STS0) CreateDWordField (Arg3, 0x04, CAP0) CreateDWordField (Arg0, 0x00, IID0) CreateDWordField (Arg0, 0x04, IID1) CreateDWordField (Arg0, 0x08, IID2) CreateDWordField (Arg0, 0x0C, IID3) Name (UID0, ToUUID ("4077a616-290c-47be-9ebd-d87058713953") /* Unknown UUID */) CreateDWordField (UID0, 0x00, EID0) CreateDWordField (UID0, 0x04, EID1) CreateDWordField (UID0, 0x08, EID2) CreateDWordField (UID0, 0x0C, EID3) If (LNot (LAnd (LAnd (LEqual (IID0, EID0), LEqual (IID1, EID1)), LAnd (LEqual ( IID2, EID2), LEqual (IID3, EID3))))) { Store (0x06, STS0) /* \_PR_.CPU0._OSC.STS0 */ Return (Arg3) } If (LNotEqual (Arg1, 0x01)) { Store (0x0A, STS0) /* \_PR_.CPU0._OSC.STS0 */ Return (Arg3) } Or (And (PDC0, 0x7FFFFFFF), CAP0, PDC0) /* \PDC0 */ Store (And (PDC0, 0xFF), PCP0) /* \PCP0 */ If (And (CFGD, 0x01)) { If (LAnd (LAnd (And (CFGD, 0x01000000), LEqual (And (PDC0, 0x09), 0x09)), LNot (And (SDTL, 0x01)))) { Or (SDTL, 0x01, SDTL) /* \SDTL */ OperationRegion (IST0, SystemMemory, DerefOf (Index (SSDT, 0x01)), DerefOf (Index (SSDT, 0x02))) Load (IST0, HI0) /* \_PR_.CPU0.HI0_ */ } } If (And (CFGD, 0xF0)) { If (LAnd (LAnd (And (CFGD, 0x01000000), And (PDC0, 0x18)), LNot ( And (SDTL, 0x02)))) { Or (SDTL, 0x02, SDTL) /* \SDTL */ OperationRegion (CST0, SystemMemory, DerefOf (Index (SSDT, 0x07)), DerefOf (Index (SSDT, 0x08))) Load (CST0, HC0) /* \_PR_.CPU0.HC0_ */ } } Return (Arg3) } } Scope (\_PR.CPU1) { Name (HI1, 0x00) Name (HC1, 0x00) Method (_PDC, 1, NotSerialized) // _PDC: Processor Driver Capabilities { CreateDWordField (Arg0, 0x00, REVS) CreateDWordField (Arg0, 0x04, SIZE) Store (SizeOf (Arg0), Local0) Store (Subtract (Local0, 0x08), Local1) CreateField (Arg0, 0x40, Multiply (Local1, 0x08), TEMP) Name (STS1, Buffer (0x04) { 0x00, 0x00, 0x00, 0x00 // .... }) Concatenate (STS1, TEMP, Local2) _OSC (ToUUID ("4077a616-290c-47be-9ebd-d87058713953") /* Unknown UUID */, REVS, SIZE, Local2) } Method (_OSC, 4, NotSerialized) // _OSC: Operating System Capabilities { CreateDWordField (Arg3, 0x00, STS1) CreateDWordField (Arg3, 0x04, CAP1) CreateDWordField (Arg0, 0x00, IID0) CreateDWordField (Arg0, 0x04, IID1) CreateDWordField (Arg0, 0x08, IID2) CreateDWordField (Arg0, 0x0C, IID3) Name (UID1, ToUUID ("4077a616-290c-47be-9ebd-d87058713953") /* Unknown UUID */) CreateDWordField (UID1, 0x00, EID0) CreateDWordField (UID1, 0x04, EID1) CreateDWordField (UID1, 0x08, EID2) CreateDWordField (UID1, 0x0C, EID3) If (LNot (LAnd (LAnd (LEqual (IID0, EID0), LEqual (IID1, EID1)), LAnd (LEqual ( IID2, EID2), LEqual (IID3, EID3))))) { Store (0x06, STS1) /* \_PR_.CPU1._OSC.STS1 */ Return (Arg3) } If (LNotEqual (Arg1, 0x01)) { Store (0x0A, STS1) /* \_PR_.CPU1._OSC.STS1 */ Return (Arg3) } Or (And (PDC1, 0x7FFFFFFF), CAP1, PDC1) /* \PDC1 */ Store (And (PDC1, 0xFF), PCP1) /* \PCP1 */ If (And (CFGD, 0x01)) { If (LAnd (LAnd (And (CFGD, 0x01000000), LEqual (And (PDC1, 0x09), 0x09)), LNot (And (SDTL, 0x10)))) { Or (SDTL, 0x10, SDTL) /* \SDTL */ OperationRegion (IST1, SystemMemory, DerefOf (Index (SSDT, 0x04)), DerefOf (Index (SSDT, 0x05))) Load (IST1, HI1) /* \_PR_.CPU1.HI1_ */ } } If (And (CFGD, 0xF0)) { If (LAnd (LAnd (And (CFGD, 0x01000000), And (PDC1, 0x18)), LNot ( And (SDTL, 0x20)))) { Or (SDTL, 0x20, SDTL) /* \SDTL */ OperationRegion (CST1, SystemMemory, DerefOf (Index (SSDT, 0x0A)), DerefOf (Index (SSDT, 0x0B))) Load (CST1, HC1) /* \_PR_.CPU1.HC1_ */ } } Return (Arg3) } } } fwts-test/disassemble-0001/acpidump.log000066400000000000000000004074541465205512700202210ustar00rootroot00000000000000RSDP @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... RSDT @ 0xbf6d8794 0000: 52 53 44 54 58 00 00 00 01 43 4c 45 4e 4f 56 4f RSDTX....CLENOVO 0010: 54 50 2d 36 38 20 20 20 00 00 04 06 20 4c 54 50 TP-68 .... LTP 0020: 00 00 00 00 5e fb 6d bf c6 fc 6d bf 2e fd 6d bf ....^.m...m...m. 0030: 66 fd 6d bf d8 ff 6d bf d4 fd 6d bf fa fd 6d bf f.m...m...m...m. 0040: 70 ff 6d bf bd 98 6d bf 1a 98 6d bf 10 8e 6d bf p.m...m...m...m. 0050: 6a 8d 6d bf 84 88 6d bf j.m...m. DSDT @ 0xbf6d9b6a 0000: 44 53 44 54 f4 5f 00 00 02 11 54 4f 53 43 50 4c DSDT._....TOSCPL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 49 4e 54 4c CRESTLNE....INTL 0020: 08 06 06 20 08 5a 30 30 30 01 08 5a 30 30 31 0a ... .Z000..Z001. 0030: 02 08 5a 30 30 32 0a 04 08 5a 30 30 33 0a 08 08 ..Z002...Z003... 0040: 5a 30 30 34 00 08 5a 30 30 35 0a 0f 08 5a 30 30 Z004..Z005...Z00 0050: 36 0a 0d 08 5a 30 30 37 0a 0b 08 5a 30 30 38 0a 6...Z007...Z008. 0060: 09 08 45 43 44 59 0a 07 5b 01 4d 55 54 58 00 5b ..ECDY..[.MUTX.[ 0070: 80 50 52 54 30 01 0a 80 0a 04 5b 81 0b 50 52 54 .PRT0.....[..PRT 0080: 30 13 50 38 30 48 20 14 4e 07 50 38 58 48 0a a0 0.P80H .N.P8XH.. 0090: 17 93 68 00 70 7d 7b 50 38 30 44 0c 00 ff ff ff ..h.p}{P80D..... 00a0: 00 69 00 50 38 30 44 a0 1b 93 68 01 70 7d 7b 50 .i.P80D...h.p}{P 00b0: 38 30 44 0c ff 00 ff ff 00 79 69 0a 08 00 00 50 80D......yi....P 00c0: 38 30 44 a0 1c 93 68 0a 02 70 7d 7b 50 38 30 44 80D...h..p}{P80D 00d0: 0c ff ff 00 ff 00 79 69 0a 10 00 00 50 38 30 44 ......yi....P80D 00e0: a0 1c 93 68 0a 03 70 7d 7b 50 38 30 44 0c ff ff ...h..p}{P80D... 00f0: ff 00 00 79 69 0a 18 00 00 50 38 30 44 70 50 38 ...yi....P80DpP8 0100: 30 44 50 38 30 48 14 0c 5f 50 49 43 01 70 68 47 0DP80H.._PIC.phG 0110: 50 49 43 14 46 06 5f 50 54 53 01 70 00 50 38 30 PIC.F._PTS.p.P80 0120: 44 50 38 58 48 00 68 a0 1e 93 68 0a 03 70 01 5c DP8XH.h...h..p.\ 0130: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0140: 30 5f 53 33 4c 44 a0 33 93 68 0a 04 70 01 5c 2f 0_S3LD.3.h..p.\/ 0150: 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 ._SB_PCI0LPCBEC0 0160: 5f 53 33 4c 44 5c 2f 04 5f 53 42 5f 50 43 49 30 _S3LD\/._SB_PCI0 0170: 4c 50 43 42 50 48 53 53 0a 0e 14 4c 1c 5f 57 41 LPCBPHSS...L._WA 0180: 4b 01 50 38 58 48 01 0a ab a0 30 91 93 68 0a 03 K.P8XH....0..h.. 0190: 93 68 0a 04 a0 25 7b 43 46 47 44 0c 00 00 00 01 .h...%{CFGD..... 01a0: 00 a0 18 90 7b 43 46 47 44 0a f0 00 93 4f 53 59 ....{CFGD....OSY 01b0: 53 0b d1 07 54 52 41 50 0a 3d a0 18 93 52 50 31 S...TRAP.=...RP1 01c0: 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 D..\/._SB_PCI0RP 01d0: 30 31 00 a0 18 93 52 50 32 44 00 86 5c 2f 03 5f 01....RP2D..\/._ 01e0: 53 42 5f 50 43 49 30 52 50 30 32 00 a0 18 93 52 SB_PCI0RP02....R 01f0: 50 33 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 P3D..\/._SB_PCI0 0200: 52 50 30 33 00 a0 18 93 52 50 34 44 00 86 5c 2f RP03....RP4D..\/ 0210: 03 5f 53 42 5f 50 43 49 30 52 50 30 34 00 a0 18 ._SB_PCI0RP04... 0220: 93 52 50 35 44 00 86 5c 2f 03 5f 53 42 5f 50 43 .RP5D..\/._SB_PC 0230: 49 30 52 50 30 35 00 a0 18 93 52 50 36 44 00 86 I0RP05....RP6D.. 0240: 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 36 00 \/._SB_PCI0RP06. 0250: a0 12 93 68 0a 03 50 38 58 48 00 0a 30 54 52 41 ...h..P8XH..0TRA 0260: 50 0a 46 a0 43 0d 93 68 0a 04 50 38 58 48 00 0a P.F.C..h..P8XH.. 0270: 40 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 @\/._SB_PCI0LPCB 0280: 50 48 53 53 0a 0f 70 57 41 4b 46 60 70 00 57 41 PHSS..pWAKF`p.WA 0290: 4b 46 7b 60 0a 05 60 a0 18 93 60 01 50 38 58 48 KF{`..`...`.P8XH 02a0: 00 0a 41 86 5c 2e 5f 53 42 5f 50 57 52 42 0a 02 ..A.\._SB_PWRB.. 02b0: a0 46 08 44 54 53 45 54 52 41 50 0a 47 a0 42 06 .F.DTSETRAP.G.B. 02c0: 90 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 .\/._SB_PCI0LPCB 02d0: 45 43 4f 4b 93 45 43 44 59 00 a0 27 92 95 44 54 ECOK.ECDY..'..DT 02e0: 53 31 44 54 53 32 70 44 54 53 31 5c 2f 05 5f 53 S1DTS2pDTS1\/._S 02f0: 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b B_PCI0LPCBEC0_SK 0300: 54 41 a1 1d 70 44 54 53 32 5c 2f 05 5f 53 42 5f TA..pDTS2\/._SB_ 0310: 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 PCI0LPCBEC0_SKTA 0320: a1 16 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 0330: 42 50 48 53 53 0a 10 5c 2e 5f 50 52 5f 52 50 50 BPHSS..\._PR_RPP 0340: 43 a4 12 04 02 00 00 14 1e 47 45 54 42 0b 77 68 C........GETB.wh 0350: 0a 08 60 77 69 0a 08 61 5b 13 6a 60 61 54 42 46 ..`wi..a[.j`aTBF 0360: 33 a4 54 42 46 33 14 42 09 50 4e 4f 54 08 a0 4a 3.TBF3.B.PNOT..J 0370: 06 4d 50 45 4e a0 31 7b 50 44 43 30 0a 08 00 86 .MPEN.1{PDC0.... 0380: 5c 2e 5f 50 52 5f 43 50 55 30 0a 80 a0 1a 7b 50 \._PR_CPU0....{P 0390: 44 43 30 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC0...[".d.\._PR 03a0: 5f 43 50 55 30 0a 81 a0 31 7b 50 44 43 31 0a 08 _CPU0...1{PDC1.. 03b0: 00 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 a0 1a ..\._PR_CPU1.... 03c0: 7b 50 44 43 31 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC1...[".d.\._ 03d0: 50 52 5f 43 50 55 31 0a 81 a1 1f 86 5c 2e 5f 50 PR_CPU1.....\._P 03e0: 52 5f 43 50 55 30 0a 80 5b 22 0a 64 86 5c 2e 5f R_CPU0..[".d.\._ 03f0: 50 52 5f 43 50 55 30 0a 81 14 17 54 52 41 50 09 PR_CPU0....TRAP. 0400: 70 68 53 4d 49 46 70 00 54 52 50 30 a4 53 4d 49 phSMIFp.TRP0.SMI 0410: 46 10 41 0f 5f 53 42 5f 14 4a 0e 5f 49 4e 49 00 F.A._SB_.J._INI. 0420: 70 0b 99 99 4d 41 52 4b a0 1c 44 54 53 45 54 52 p...MARK..DTSETR 0430: 41 50 0a 47 5e 2f 03 50 43 49 30 4c 50 43 42 50 AP.G^/.PCI0LPCBP 0440: 48 53 53 0a 10 70 0b d0 07 4f 53 59 53 a0 4a 09 HSS..p...OSYS.J. 0450: 5b 12 5f 4f 53 49 60 a0 18 5f 4f 53 49 0d 4c 69 [._OSI`.._OSI.Li 0460: 6e 75 78 00 70 01 4c 49 4e 58 70 00 45 43 44 59 nux.p.LINXp.ECDY 0470: a0 1b 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 .._OSI.Windows 2 0480: 30 30 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 001.p...OSYS.._O 0490: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04a0: 53 50 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f SP1.p...OSYS.._O 04b0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04c0: 53 50 32 00 70 0b d2 07 4f 53 59 53 a0 1b 5f 4f SP2.p...OSYS.._O 04d0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 00 SI.Windows 2006. 04e0: 70 0b d6 07 4f 53 59 53 a0 14 90 4d 50 45 4e 93 p...OSYS...MPEN. 04f0: 4f 53 59 53 0b d1 07 54 52 41 50 0a 3d 54 52 41 OSYS...TRAP.=TRA 0500: 50 0a 2b 5b 80 47 4e 56 53 00 0c bc 2d 6e bf 0b P.+[.GNVS...-n.. 0510: 00 01 5b 81 45 24 47 4e 56 53 10 4f 53 59 53 10 ..[.E$GNVS.OSYS. 0520: 53 4d 49 46 08 50 52 4d 30 08 50 52 4d 31 08 53 SMIF.PRM0.PRM1.S 0530: 43 49 46 08 50 52 4d 32 08 50 52 4d 33 08 4c 43 CIF.PRM2.PRM3.LC 0540: 4b 46 08 50 52 4d 34 08 50 52 4d 35 08 50 38 30 KF.PRM4.PRM5.P80 0550: 44 20 4c 49 44 53 08 50 57 52 53 08 44 42 47 53 D LIDS.PWRS.DBGS 0560: 08 4c 49 4e 58 08 00 08 41 43 54 31 08 41 43 54 .LINX...ACT1.ACT 0570: 54 08 50 53 56 54 08 54 43 31 56 08 54 43 32 56 T.PSVT.TC1V.TC2V 0580: 08 54 53 50 56 08 43 52 54 54 08 44 54 53 45 08 .TSPV.CRTT.DTSE. 0590: 44 54 53 31 08 44 54 53 32 08 00 40 05 41 50 49 DTS1.DTS2..@.API 05a0: 43 08 4d 50 45 4e 08 50 43 50 30 08 50 43 50 31 C.MPEN.PCP0.PCP1 05b0: 08 50 50 43 4d 08 00 28 43 4d 41 50 08 43 4d 42 .PPCM..(CMAP.CMB 05c0: 50 08 4c 50 54 50 08 46 44 43 50 08 00 30 49 47 P.LPTP.FDCP..0IG 05d0: 44 53 08 54 4c 53 54 08 43 41 44 4c 08 50 41 44 DS.TLST.CADL.PAD 05e0: 4c 08 43 53 54 45 10 4e 53 54 45 10 53 53 54 45 L.CSTE.NSTE.SSTE 05f0: 10 4e 44 49 44 08 44 49 44 31 20 44 49 44 32 20 .NDID.DID1 DID2 0600: 44 49 44 33 20 44 49 44 34 20 44 49 44 35 20 00 DID3 DID4 DID5 . 0610: 40 06 42 4c 43 53 08 42 52 54 4c 08 41 4c 53 45 @.BLCS.BRTL.ALSE 0620: 08 41 4c 41 46 08 4c 4c 4f 57 08 4c 48 49 48 08 .ALAF.LLOW.LHIH. 0630: 00 08 45 4d 41 45 08 45 4d 41 50 10 45 4d 41 4c ..EMAE.EMAP.EMAL 0640: 10 00 08 4d 45 46 45 08 00 18 54 50 4d 50 08 54 ...MEFE...TPMP.T 0650: 50 4d 45 08 00 40 04 47 54 46 30 38 47 54 46 32 PME..@.GTF08GTF2 0660: 38 49 44 45 4d 08 47 54 46 31 38 00 40 09 41 53 8IDEM.GTF18.@.AS 0670: 4c 42 20 49 42 54 54 08 49 50 41 54 08 49 54 56 LB IBTT.IPAT.ITV 0680: 46 08 49 54 56 4d 08 49 50 53 43 08 49 42 4c 43 F.ITVM.IPSC.IBLC 0690: 08 49 42 49 41 08 49 53 53 43 08 49 34 30 39 08 .IBIA.ISSC.I409. 06a0: 49 35 30 39 08 49 36 30 39 08 49 37 30 39 08 49 I509.I609.I709.I 06b0: 44 4d 4d 08 49 44 4d 53 08 49 46 31 45 08 48 56 DMM.IDMS.IF1E.HV 06c0: 43 4f 08 4e 58 44 31 20 4e 58 44 32 20 4d 41 52 CO.NXD1 NXD2 MAR 06d0: 4b 10 42 52 41 44 08 42 54 45 4e 08 56 56 45 4e K.BRAD.BTEN.VVEN 06e0: 08 42 47 54 4c 08 54 4d 45 45 01 00 07 53 43 55 .BGTL.TMEE...SCU 06f0: 30 01 53 43 55 31 01 53 43 55 32 01 53 43 55 33 0.SCU1.SCU2.SCU3 0700: 01 00 04 58 4b 53 50 01 58 4b 49 4e 01 58 4b 49 ...XKSP.XKIN.XKI 0710: 44 01 58 4b 4f 4b 01 00 04 42 47 55 31 08 42 53 D.XKOK...BGU1.BS 0720: 54 31 08 42 46 43 31 10 57 4b 4c 4e 08 57 41 4b T1.BFC1.WKLN.WAK 0730: 46 08 44 53 4d 44 08 42 41 59 53 08 48 41 50 45 F.DSMD.BAYS.HAPE 0740: 01 00 07 44 54 53 4d 01 00 07 4f 44 54 31 08 4f ...DTSM...ODT1.O 0750: 44 54 32 08 44 54 53 57 08 08 44 53 45 4e 01 08 DT2.DTSW..DSEN.. 0760: 45 43 4f 4e 00 08 47 50 49 43 00 08 43 54 59 50 ECON..GPIC..CTYP 0770: 00 08 4c 30 31 43 00 08 56 46 4e 30 00 08 56 46 ..L01C..VFN0..VF 0780: 4e 31 00 10 4a 7c 5f 47 50 45 14 46 35 5f 4c 30 N1..J|_GPE.F5_L0 0790: 31 00 72 4c 30 31 43 01 4c 30 31 43 50 38 58 48 1.rL01C.L01CP8XH 07a0: 00 01 50 38 58 48 01 4c 30 31 43 a0 48 08 90 93 ..P8XH.L01C.H... 07b0: 52 50 31 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 RP1D.\/._SB_PCI0 07c0: 52 50 30 31 48 50 53 58 5b 22 0a 64 a0 40 05 5c RP01HPSX[".d.@.\ 07d0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 /._SB_PCI0RP01PD 07e0: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 07f0: 50 30 31 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f P01PDCXp.\/._SB_ 0800: 50 43 49 30 52 50 30 31 48 50 53 58 86 5c 2f 03 PCI0RP01HPSX.\/. 0810: 5f 53 42 5f 50 43 49 30 52 50 30 31 00 a1 16 70 _SB_PCI0RP01...p 0820: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0830: 48 50 53 58 a0 48 08 90 93 52 50 32 44 00 5c 2f HPSX.H...RP2D.\/ 0840: 04 5f 53 42 5f 50 43 49 30 52 50 30 32 48 50 53 ._SB_PCI0RP02HPS 0850: 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 5f 50 X[".d.@.\/._SB_P 0860: 43 49 30 52 50 30 32 50 44 43 58 70 01 5c 2f 04 CI0RP02PDCXp.\/. 0870: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 44 43 58 _SB_PCI0RP02PDCX 0880: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 0890: 32 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 2HPSX.\/._SB_PCI 08a0: 30 52 50 30 32 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP02...p.\/._SB 08b0: 5f 50 43 49 30 52 50 30 32 48 50 53 58 a0 48 08 _PCI0RP02HPSX.H. 08c0: 90 93 52 50 33 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP3D.\/._SB_PC 08d0: 49 30 52 50 30 33 48 50 53 58 5b 22 0a 64 a0 40 I0RP03HPSX[".d.@ 08e0: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 .\/._SB_PCI0RP03 08f0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0900: 30 52 50 30 33 50 44 43 58 70 01 5c 2f 04 5f 53 0RP03PDCXp.\/._S 0910: 42 5f 50 43 49 30 52 50 30 33 48 50 53 58 86 5c B_PCI0RP03HPSX.\ 0920: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 33 00 a1 /._SB_PCI0RP03.. 0930: 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .p.\/._SB_PCI0RP 0940: 30 33 48 50 53 58 a0 48 08 90 93 52 50 34 44 00 03HPSX.H...RP4D. 0950: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 48 \/._SB_PCI0RP04H 0960: 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 PSX[".d.@.\/._SB 0970: 5f 50 43 49 30 52 50 30 34 50 44 43 58 70 01 5c _PCI0RP04PDCXp.\ 0980: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 44 /._SB_PCI0RP04PD 0990: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 09a0: 50 30 34 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 P04HPSX.\/._SB_P 09b0: 43 49 30 52 50 30 34 00 a1 16 70 01 5c 2f 04 5f CI0RP04...p.\/._ 09c0: 53 42 5f 50 43 49 30 52 50 30 34 48 50 53 58 a0 SB_PCI0RP04HPSX. 09d0: 48 08 90 93 52 50 35 44 00 5c 2f 04 5f 53 42 5f H...RP5D.\/._SB_ 09e0: 50 43 49 30 52 50 30 35 48 50 53 58 5b 22 0a 64 PCI0RP05HPSX[".d 09f0: a0 40 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .@.\/._SB_PCI0RP 0a00: 30 35 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 05PDCXp.\/._SB_P 0a10: 43 49 30 52 50 30 35 50 44 43 58 70 01 5c 2f 04 CI0RP05PDCXp.\/. 0a20: 5f 53 42 5f 50 43 49 30 52 50 30 35 48 50 53 58 _SB_PCI0RP05HPSX 0a30: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 35 .\/._SB_PCI0RP05 0a40: 00 a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ...p.\/._SB_PCI0 0a50: 52 50 30 35 48 50 53 58 a0 48 08 90 93 52 50 36 RP05HPSX.H...RP6 0a60: 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 D.\/._SB_PCI0RP0 0a70: 36 48 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 6HPSX[".d.@.\/._ 0a80: 53 42 5f 50 43 49 30 52 50 30 36 50 44 43 58 70 SB_PCI0RP06PDCXp 0a90: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 0aa0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0ab0: 30 52 50 30 36 48 50 53 58 86 5c 2f 03 5f 53 42 0RP06HPSX.\/._SB 0ac0: 5f 50 43 49 30 52 50 30 36 00 a1 16 70 01 5c 2f _PCI0RP06...p.\/ 0ad0: 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 50 53 ._SB_PCI0RP06HPS 0ae0: 58 14 42 0d 5f 4c 30 32 00 70 00 47 50 45 43 a0 X.B._L02.p.GPEC. 0af0: 4d 0a 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 M.\/._SB_PCI0LPC 0b00: 42 45 43 4f 4b a0 4e 04 93 44 54 53 57 01 a0 27 BECOK.N..DTSW..' 0b10: 92 95 44 54 53 31 44 54 53 32 70 44 54 53 31 5c ..DTS1DTS2pDTS1\ 0b20: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0b30: 30 5f 53 4b 54 41 a1 1d 70 44 54 53 32 5c 2f 05 0_SKTA..pDTS2\/. 0b40: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f _SB_PCI0LPCBEC0_ 0b50: 53 4b 54 41 a1 48 04 a0 27 92 95 4f 44 54 31 4f SKTA.H..'..ODT1O 0b60: 44 54 32 70 4f 44 54 31 5c 2f 05 5f 53 42 5f 50 DT2pODT1\/._SB_P 0b70: 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 CI0LPCBEC0_SKTA. 0b80: 1d 70 4f 44 54 32 5c 2f 05 5f 53 42 5f 50 43 49 .pODT2\/._SB_PCI 0b90: 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 16 5c 0LPCBEC0_SKTA..\ 0ba0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 50 48 /._SB_PCI0LPCBPH 0bb0: 53 53 0a 10 14 18 5f 4c 30 33 00 86 5c 2f 03 5f SS...._L03..\/._ 0bc0: 53 42 5f 50 43 49 30 55 53 42 31 0a 02 14 18 5f SB_PCI0USB1...._ 0bd0: 4c 30 34 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 L04..\/._SB_PCI0 0be0: 55 53 42 32 0a 02 14 18 5f 4c 30 35 00 86 5c 2f USB2...._L05..\/ 0bf0: 03 5f 53 42 5f 50 43 49 30 55 53 42 35 0a 02 14 ._SB_PCI0USB5... 0c00: 36 5f 4c 30 36 00 a0 27 5c 2f 04 5f 53 42 5f 50 6_L06..'\/._SB_P 0c10: 43 49 30 47 46 58 30 47 53 53 45 5c 2f 04 5f 53 CI0GFX0GSSE\/._S 0c20: 42 5f 50 43 49 30 47 46 58 30 47 53 43 49 a1 07 B_PCI0GFX0GSCI.. 0c30: 70 01 53 43 49 53 14 43 1f 5f 4c 30 39 00 a0 41 p.SCIS.C._L09..A 0c40: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0c50: 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PSPXp.\/._SB_PCI 0c60: 30 52 50 30 31 50 53 50 58 70 01 5c 2f 04 5f 53 0RP01PSPXp.\/._S 0c70: 42 5f 50 43 49 30 52 50 30 31 50 4d 53 58 86 5c B_PCI0RP01PMSX.\ 0c80: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 31 0a 02 /._SB_PCI0RP01.. 0c90: a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .A.\/._SB_PCI0RP 0ca0: 30 32 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 02PSPXp.\/._SB_P 0cb0: 43 49 30 52 50 30 32 50 53 50 58 70 01 5c 2f 04 CI0RP02PSPXp.\/. 0cc0: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 4d 53 58 _SB_PCI0RP02PMSX 0cd0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 0ce0: 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 ...A.\/._SB_PCI0 0cf0: 52 50 30 33 50 53 50 58 70 01 5c 2f 04 5f 53 42 RP03PSPXp.\/._SB 0d00: 5f 50 43 49 30 52 50 30 33 50 53 50 58 70 01 5c _PCI0RP03PSPXp.\ 0d10: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 50 4d /._SB_PCI0RP03PM 0d20: 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 SX.\/._SB_PCI0RP 0d30: 30 33 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 03...A.\/._SB_PC 0d40: 49 30 52 50 30 34 50 53 50 58 70 01 5c 2f 04 5f I0RP04PSPXp.\/._ 0d50: 53 42 5f 50 43 49 30 52 50 30 34 50 53 50 58 70 SB_PCI0RP04PSPXp 0d60: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 .\/._SB_PCI0RP04 0d70: 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 PMSX.\/._SB_PCI0 0d80: 52 50 30 34 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f RP04...A.\/._SB_ 0d90: 50 43 49 30 52 50 30 35 50 53 50 58 70 01 5c 2f PCI0RP05PSPXp.\/ 0da0: 04 5f 53 42 5f 50 43 49 30 52 50 30 35 50 53 50 ._SB_PCI0RP05PSP 0db0: 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 Xp.\/._SB_PCI0RP 0dc0: 30 35 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 05PMSX.\/._SB_PC 0dd0: 49 30 52 50 30 35 0a 02 a0 41 05 5c 2f 04 5f 53 I0RP05...A.\/._S 0de0: 42 5f 50 43 49 30 52 50 30 36 50 53 50 58 70 01 B_PCI0RP06PSPXp. 0df0: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 50 \/._SB_PCI0RP06P 0e00: 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 SPXp.\/._SB_PCI0 0e10: 52 50 30 36 50 4d 53 58 86 5c 2f 03 5f 53 42 5f RP06PMSX.\/._SB_ 0e20: 50 43 49 30 52 50 30 36 0a 02 14 18 5f 4c 30 42 PCI0RP06...._L0B 0e30: 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 50 43 49 ..\/._SB_PCI0PCI 0e40: 42 0a 02 14 18 5f 4c 30 43 00 86 5c 2f 03 5f 53 B...._L0C..\/._S 0e50: 42 5f 50 43 49 30 55 53 42 33 0a 02 14 4b 0b 5f B_PCI0USB3...K._ 0e60: 4c 30 44 00 a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 L0D..;\/._SB_PCI 0e70: 30 45 48 43 31 50 4d 45 53 70 01 5c 2f 04 5f 53 0EHC1PMESp.\/._S 0e80: 42 5f 50 43 49 30 45 48 43 31 50 4d 45 53 86 5c B_PCI0EHC1PMES.\ 0e90: 2f 03 5f 53 42 5f 50 43 49 30 45 48 43 31 0a 02 /._SB_PCI0EHC1.. 0ea0: a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 30 45 48 43 .;\/._SB_PCI0EHC 0eb0: 32 50 4d 45 53 70 01 5c 2f 04 5f 53 42 5f 50 43 2PMESp.\/._SB_PC 0ec0: 49 30 45 48 43 32 50 4d 45 53 86 5c 2f 03 5f 53 I0EHC2PMES.\/._S 0ed0: 42 5f 50 43 49 30 45 48 43 32 0a 02 a0 3b 5c 2f B_PCI0EHC2...;\/ 0ee0: 04 5f 53 42 5f 50 43 49 30 48 44 45 46 50 4d 45 ._SB_PCI0HDEFPME 0ef0: 53 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 48 44 Sp.\/._SB_PCI0HD 0f00: 45 46 50 4d 45 53 86 5c 2f 03 5f 53 42 5f 50 43 EFPMES.\/._SB_PC 0f10: 49 30 48 44 45 46 0a 02 14 18 5f 4c 30 45 00 86 I0HDEF...._L0E.. 0f20: 5c 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 34 0a \/._SB_PCI0USB4. 0f30: 02 14 1c 5f 4c 31 42 00 80 4c 50 4f 4c 4c 50 4f ..._L1B..LPOLLPO 0f40: 4c 86 5c 2e 5f 53 42 5f 4c 49 44 30 0a 80 10 46 L.\._SB_LID0...F 0f50: 0b 5f 50 52 5f 5b 83 0b 43 50 55 30 00 10 10 00 ._PR_[..CPU0.... 0f60: 00 06 5b 83 0b 43 50 55 31 01 10 10 00 00 06 14 ..[..CPU1....... 0f70: 45 09 52 50 50 43 00 a0 4d 08 93 4f 53 59 53 0b E.RPPC..M..OSYS. 0f80: d2 07 a0 42 08 7b 43 46 47 44 01 00 a0 42 04 94 ...B.{CFGD...B.. 0f90: 5e 2e 43 50 55 30 5f 50 50 43 00 74 5e 2e 43 50 ^.CPU0_PPC.t^.CP 0fa0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 0fb0: 43 50 4e 4f 54 72 5e 2e 43 50 55 30 5f 50 50 43 CPNOTr^.CPU0_PPC 0fc0: 01 5e 2e 43 50 55 30 5f 50 50 43 50 4e 4f 54 a1 .^.CPU0_PPCPNOT. 0fd0: 35 72 5e 2e 43 50 55 30 5f 50 50 43 01 5e 2e 43 5r^.CPU0_PPC.^.C 0fe0: 50 55 30 5f 50 50 43 50 4e 4f 54 74 5e 2e 43 50 PU0_PPCPNOTt^.CP 0ff0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 1000: 43 50 4e 4f 54 08 46 57 53 4f 0d 46 57 53 4f 00 CPNOT.FWSO.FWSO. 1010: 08 5f 50 53 43 00 14 12 5f 50 53 30 00 70 5f 50 ._PSC..._PS0.p_P 1020: 53 43 60 70 00 5f 50 53 43 14 0d 5f 50 53 33 00 SC`p._PSC.._PS3. 1030: 70 0a 03 5f 50 53 43 10 8c fb 04 5f 53 42 5f 5b p.._PSC...._SB_[ 1040: 82 4f 3e 41 4d 57 30 08 5f 48 49 44 0d 70 6e 70 .O>AMW0._HID.pnp 1050: 30 63 31 34 00 08 5f 55 49 44 00 08 5f 57 44 47 0c14.._UID.._WDG 1060: 11 3f 0a 3c a7 1d 85 2e 53 d0 5f 49 9d fa 1a 4a .?.<....S._I...J 1070: d6 2e 6a 86 41 43 01 00 3b 6d 43 71 dd fb 72 4c ..j.AC..;mCq..rL 1080: bc b8 43 5b fe 0d 64 f9 42 43 01 00 21 12 90 05 ..C[..d.BC..!... 1090: 66 d5 d1 11 b2 f0 00 a0 c9 06 29 10 42 41 01 00 f.........).BA.. 10a0: 08 53 54 41 43 11 07 0a 04 01 14 03 00 14 1f 57 .STAC..........W 10b0: 51 41 43 01 70 0d 4d 58 4d 54 43 43 6f 6e 66 69 QAC.p.MXMTCConfi 10c0: 67 44 61 74 61 00 5b 31 a4 53 54 41 43 08 53 54 gData.[1.STAC.ST 10d0: 42 43 11 07 0a 04 01 00 00 00 14 34 57 51 42 43 BC.........4WQBC 10e0: 01 70 0d 47 65 74 20 4d 58 4d 54 43 43 6f 6e 74 .p.Get MXMTCCont 10f0: 72 6f 6c 44 61 74 61 3a 20 53 54 42 43 20 3d 20 rolData: STBC = 1100: 00 5b 31 70 53 54 42 43 5b 31 a4 53 54 42 43 14 .[1pSTBC[1.STBC. 1110: 47 06 57 53 42 43 02 70 69 53 54 42 43 70 0d 53 G.WSBC.piSTBCp.S 1120: 65 74 20 4d 58 4d 54 43 43 6f 6e 74 72 6f 6c 44 et MXMTCControlD 1130: 61 74 61 3a 20 53 54 42 43 20 3d 20 00 5b 31 70 ata: STBC = .[1p 1140: 53 54 42 43 5b 31 a0 30 93 5e 5e 2f 03 50 43 49 STBC[1.0.^^/.PCI 1150: 30 4c 50 43 42 45 43 4f 4b 01 70 83 88 53 54 42 0LPCBECOK.p..STB 1160: 43 01 00 5e 5e 2f 04 50 43 49 30 4c 50 43 42 45 C..^^/.PCI0LPCBE 1170: 43 30 5f 53 4b 54 43 08 57 51 42 41 11 43 2b 0b C0_SKTC.WQBA.C+. 1180: ae 02 46 4f 4d 42 01 00 00 00 9e 02 00 00 c0 0b ..FOMB.......... 1190: 00 00 44 53 00 01 1a 7d da 54 28 d9 85 00 01 06 ..DS...}.T(..... 11a0: 18 42 10 07 10 0a 4b 61 02 c9 21 52 3c 18 94 05 .B....Ka..!R<... 11b0: 10 43 88 57 04 44 04 84 bc 0a b0 29 c0 24 88 fa .C.W.D.....).$.. 11c0: f7 87 28 09 0e 25 04 42 12 05 98 17 a0 5b 80 61 ..(..%.B.....[.a 11d0: 01 b6 05 98 16 e0 18 92 4a 03 a7 04 96 02 21 a1 ........J.....!. 11e0: 02 94 0b f0 2d 40 3b a2 24 0b b0 0c 23 02 8f 82 ....-@;.$...#... 11f0: a1 71 68 ec 30 2c 13 4c 83 38 8c b2 91 45 60 dc .qh.0,.L.8...E`. 1200: 4e 05 c8 15 20 4c 80 78 54 61 34 07 45 e0 42 63 N... L.xTa4.E.Bc 1210: 64 40 c8 a3 00 ab a3 d0 a4 12 d8 bd 00 65 02 2c d@...........e., 1220: 0a 10 27 c0 9a 00 63 48 32 28 40 9b 00 5b 20 42 ..'...cH2(@..[ B 1230: 0f d4 19 8a 46 70 02 51 6a 46 11 48 ac 1a 01 85 ....Fp.QjF.H.... 1240: 12 34 46 b0 10 81 c2 86 37 46 98 03 88 d1 fe 20 .4F.....7F..... 1250: 48 20 05 e3 66 91 46 83 1a 6b 82 63 f7 68 4e b8 H ..f.F..k.c.hN. 1260: 73 01 d2 e7 26 90 a3 3b b8 3a 07 4d 86 c7 b0 1e s...&..;.:.M.... 1270: 06 d8 29 00 ef 1a 50 d3 3f 78 26 08 0e 35 44 8f ..)...P.?x&..5D. 1280: 3a dc 09 1c fb 91 30 88 b3 3b 6e ac c3 c9 68 d0 :.....0..;n...h. 1290: a5 0a 30 7b 00 d0 d0 12 9c f6 99 84 7e 0f 38 9f ..0{........~.8. 12a0: 9e 21 89 fc 41 a0 46 e6 ff 3f b4 c7 78 5a 31 43 .!..A.F..?..xZ1C 12b0: 3e 0b 1c 16 13 0b a1 4d 6a 3c 40 40 e1 d1 40 08 >......Mj<@@..@. 12c0: 6f 06 9e af 09 46 86 90 93 f1 a0 06 e0 41 d7 3a o....F.......A.: 12d0: 32 8d 27 a6 21 cf e8 00 22 bf 32 78 0c 41 02 f9 2.'.!...".2x.A.. 12e0: c4 60 b8 c7 81 13 78 02 f0 59 40 10 92 00 21 51 .`....x..Y@...!Q 12f0: e3 a7 47 08 7e 7a 78 93 30 28 1f d2 99 f9 90 e1 ..G.~zx.0(...... 1300: 11 c2 07 c4 7b 9f 3b 19 c1 29 7b a4 e0 b0 7e 0e ....{.;..){...~. 1310: 20 c0 af 0f 8f 0d 09 7c ae 08 8c 1d aa fd 0a 40 ......|.......@ 1320: 08 1e ed 51 e0 54 23 1c 2d 78 08 8a 1c 03 4a cc ...Q.T#.-x....J. 1330: 18 50 03 38 85 d0 e7 73 04 47 14 25 f6 21 19 da .P.8...s.G.%.!.. 1340: 08 e1 1f 39 4e c1 f7 8b 23 3d ad 23 78 91 f0 08 ...9N...#=.#x... 1350: 30 e1 ce 28 a8 38 30 f4 ff 7f 4c 01 dc 7a 3b a6 0..(.80...L..z;. 1360: 80 3e c0 31 05 50 fc ff 3f a6 00 87 a8 c7 14 f4 .>.1.P..?....... 1370: 40 0c 7c 2e a1 0d ff 96 c1 8e 03 87 74 6a 8f 28 @.|.........tj.( 1380: 80 29 79 47 14 50 8c 14 d6 f1 04 18 05 3c 9b a0 .)yG.P.......<.. 1390: 22 1d 4f 80 ce ff ff 78 02 58 b8 9a bc 92 84 7d ".O....x.X.....} 13a0: 1e 78 1d 89 14 e3 41 e2 b5 e4 c1 24 46 98 08 8f .x....A....$F... 13b0: 27 1e 47 c0 b7 82 28 91 8e 3e c4 83 49 28 63 3e '.G...(..>..I(c> 13c0: a3 84 89 f9 04 70 22 ef 27 46 0a 73 2a 8f 27 2c .....p".'F.s*.', 13d0: c4 f1 04 a0 85 e2 e3 09 3a 2c 84 fe ff c7 13 dc ........:,...... 13e0: e1 c1 a7 0c fc 85 0c c6 f9 04 30 24 f0 7c 02 ca ..........0$.|.. 13f0: db 18 e6 80 02 8c 14 da f4 a9 d1 a8 55 83 32 35 ............U.25 1400: ca 34 a8 d5 a7 52 63 c6 4c 9c 52 bc 6c 8d df f2 .4...Rc.L.R.l... 1410: 9e 09 02 b1 20 0a 81 38 cc f3 42 20 96 a2 01 84 .... ..8..B .... 1420: 85 06 a1 42 a9 05 e2 98 20 34 92 0a 10 f6 ff 07 ...B.... 4...... 1430: 5b 82 1b 4c 49 44 30 08 5f 48 49 44 0c 41 d0 0c [..LID0._HID.A.. 1440: 0d 14 0b 5f 4c 49 44 00 a4 4c 50 4f 4c 5b 82 0f ..._LID..LPOL[.. 1450: 50 57 52 42 08 5f 48 49 44 0c 41 d0 0c 0c 5b 82 PWRB._HID.A...[. 1460: 84 b9 04 50 43 49 30 14 09 5f 53 33 44 00 a4 0a ...PCI0.._S3D... 1470: 02 14 09 5f 53 34 44 00 a4 0a 02 08 5f 48 49 44 ..._S4D....._HID 1480: 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 d0 0a 03 5b .A...._CID.A...[ 1490: 82 43 0e 4d 43 48 43 08 5f 41 44 52 00 5b 80 48 .C.MCHC._ADR.[.H 14a0: 42 55 53 02 0a 40 0a c0 5b 81 4a 0c 48 42 55 53 BUS..@..[.J.HBUS 14b0: 03 45 50 45 4e 01 00 0b 45 50 42 52 14 00 20 4d .EPEN...EPBR.. M 14c0: 48 45 4e 01 00 0d 4d 48 42 52 12 00 40 0a 50 58 HEN...MHBR..@.PX 14d0: 45 4e 01 50 58 53 5a 02 00 17 50 58 42 52 06 00 EN.PXSZ...PXBR.. 14e0: 20 44 49 45 4e 01 00 0b 44 49 42 52 14 00 20 49 DIEN...DIBR.. I 14f0: 50 45 4e 01 00 0b 49 50 42 52 14 00 40 0e 00 04 PEN...IPBR..@... 1500: 50 4d 30 48 02 00 02 50 4d 31 4c 02 00 02 50 4d PM0H...PM1L...PM 1510: 31 48 02 00 02 50 4d 32 4c 02 00 02 50 4d 32 48 1H...PM2L...PM2H 1520: 02 00 02 50 4d 33 4c 02 00 02 50 4d 33 48 02 00 ...PM3L...PM3H.. 1530: 02 50 4d 34 4c 02 00 02 50 4d 34 48 02 00 02 50 .PM4L...PM4H...P 1540: 4d 35 4c 02 00 02 50 4d 35 48 02 00 02 50 4d 36 M5L...PM5H...PM6 1550: 4c 02 00 02 50 4d 36 48 02 00 02 00 07 48 45 4e L...PM6H.....HEN 1560: 41 01 00 40 05 54 55 55 44 10 00 40 06 00 04 54 A..@.TUUD..@...T 1570: 4c 55 44 0c 08 42 55 46 30 11 4d 20 0b 08 02 88 LUD..BUF0.M .... 1580: 0d 00 02 0c 00 00 00 00 00 ff 00 00 00 00 01 87 ................ 1590: 17 00 01 0c 03 00 00 00 00 00 00 00 00 f7 0c 00 ................ 15a0: 00 00 00 00 00 f8 0c 00 00 47 01 f8 0c f8 0c 01 .........G...... 15b0: 08 87 17 00 01 0c 03 00 00 00 00 00 0d 00 00 ff ................ 15c0: ff 00 00 00 00 00 00 00 f3 00 00 87 17 00 00 0c ................ 15d0: 03 00 00 00 00 00 00 0a 00 ff ff 0b 00 00 00 00 ................ 15e0: 00 00 00 02 00 87 17 00 00 0c 03 00 00 00 00 00 ................ 15f0: 00 0c 00 ff 3f 0c 00 00 00 00 00 00 40 00 00 87 ....?.......@... 1600: 17 00 00 0c 03 00 00 00 00 00 40 0c 00 ff 7f 0c ..........@..... 1610: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 1620: 00 00 00 00 80 0c 00 ff bf 0c 00 00 00 00 00 00 ................ 1630: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0c @............... 1640: 00 ff ff 0c 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1650: 00 0c 03 00 00 00 00 00 00 0d 00 ff 3f 0d 00 00 ............?... 1660: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1670: 00 00 40 0d 00 ff 7f 0d 00 00 00 00 00 00 40 00 ..@...........@. 1680: 00 87 17 00 00 0c 03 00 00 00 00 00 80 0d 00 ff ................ 1690: bf 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c ........@....... 16a0: 03 00 00 00 00 00 c0 0d 00 ff ff 0d 00 00 00 00 ................ 16b0: 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 ..@............. 16c0: 00 0e 00 ff 3f 0e 00 00 00 00 00 00 40 00 00 87 ....?.......@... 16d0: 17 00 00 0c 03 00 00 00 00 00 40 0e 00 ff 7f 0e ..........@..... 16e0: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 16f0: 00 00 00 00 80 0e 00 ff bf 0e 00 00 00 00 00 00 ................ 1700: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0e @............... 1710: 00 ff ff 0e 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1720: 00 0c 03 00 00 00 00 00 00 0f 00 ff ff 0f 00 00 ................ 1730: 00 00 00 00 00 01 00 87 17 00 00 0c 03 00 00 00 ................ 1740: 00 00 00 00 00 ff ff ff df 00 00 00 00 00 00 00 ................ 1750: 00 87 17 00 00 0c 03 00 00 00 00 00 00 00 f0 ff ................ 1760: ff bf fe 00 00 00 00 00 00 c0 0e 87 17 00 00 0c ................ 1770: 03 00 00 00 00 00 00 d4 fe ff 4f d4 fe 00 00 00 ..........O..... 1780: 00 00 00 00 00 79 00 14 4b 3d 5f 43 52 53 08 a0 .....y..K=_CRS.. 1790: 1c 5e 2e 4d 43 48 43 50 4d 31 4c 8a 42 55 46 30 .^.MCHCPM1L.BUF0 17a0: 0a 7c 43 30 4c 4e 70 00 43 30 4c 4e a0 1f 93 5e .|C0LNp.C0LN...^ 17b0: 2e 4d 43 48 43 50 4d 31 4c 01 8d 42 55 46 30 0b .MCHCPM1L..BUF0. 17c0: 58 03 43 30 52 57 70 00 43 30 52 57 a0 1c 5e 2e X.C0RWp.C0RW..^. 17d0: 4d 43 48 43 50 4d 31 48 8a 42 55 46 30 0a 96 43 MCHCPM1H.BUF0..C 17e0: 34 4c 4e 70 00 43 34 4c 4e a0 1f 93 5e 2e 4d 43 4LNp.C4LN...^.MC 17f0: 48 43 50 4d 31 48 01 8d 42 55 46 30 0b 28 04 43 HCPM1H..BUF0.(.C 1800: 34 52 57 70 00 43 34 52 57 a0 1c 5e 2e 4d 43 48 4RWp.C4RW..^.MCH 1810: 43 50 4d 32 4c 8a 42 55 46 30 0a b0 43 38 4c 4e CPM2L.BUF0..C8LN 1820: 70 00 43 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 p.C8LN...^.MCHCP 1830: 4d 32 4c 01 8d 42 55 46 30 0b f8 04 43 38 52 57 M2L..BUF0...C8RW 1840: 70 00 43 38 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d p.C8RW..^.MCHCPM 1850: 32 48 8a 42 55 46 30 0a ca 43 43 4c 4e 70 00 43 2H.BUF0..CCLNp.C 1860: 43 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 32 48 CLN...^.MCHCPM2H 1870: 01 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 43 ..BUF0...CCRWp.C 1880: 43 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d 33 4c 8a CRW..^.MCHCPM3L. 1890: 42 55 46 30 0a e4 44 30 4c 4e 70 00 44 30 4c 4e BUF0..D0LNp.D0LN 18a0: a0 1f 93 5e 2e 4d 43 48 43 50 4d 33 4c 01 8d 42 ...^.MCHCPM3L..B 18b0: 55 46 30 0b 98 06 44 30 52 57 70 00 44 30 52 57 UF0...D0RWp.D0RW 18c0: a0 1c 5e 2e 4d 43 48 43 50 4d 33 48 8a 42 55 46 ..^.MCHCPM3H.BUF 18d0: 30 0a fe 44 34 4c 4e 70 00 44 34 4c 4e a0 1f 93 0..D4LNp.D4LN... 18e0: 5e 2e 4d 43 48 43 50 4d 33 48 01 8d 42 55 46 30 ^.MCHCPM3H..BUF0 18f0: 0b 68 07 44 34 52 57 70 00 44 34 52 57 a0 1d 5e .h.D4RWp.D4RW..^ 1900: 2e 4d 43 48 43 50 4d 34 4c 8a 42 55 46 30 0b 18 .MCHCPM4L.BUF0.. 1910: 01 44 38 4c 4e 70 00 44 38 4c 4e a0 1f 93 5e 2e .D8LNp.D8LN...^. 1920: 4d 43 48 43 50 4d 34 4c 01 8d 42 55 46 30 0b 38 MCHCPM4L..BUF0.8 1930: 08 44 38 52 57 70 00 44 38 52 57 a0 1d 5e 2e 4d .D8RWp.D8RW..^.M 1940: 43 48 43 50 4d 34 48 8a 42 55 46 30 0b 32 01 44 CHCPM4H.BUF0.2.D 1950: 43 4c 4e 70 00 44 43 4c 4e a0 1f 93 5e 2e 4d 43 CLNp.DCLN...^.MC 1960: 48 43 50 4d 34 48 01 8d 42 55 46 30 0b 08 09 44 HCPM4H..BUF0...D 1970: 43 52 57 70 00 44 43 52 57 a0 1d 5e 2e 4d 43 48 CRWp.DCRW..^.MCH 1980: 43 50 4d 35 4c 8a 42 55 46 30 0b 4c 01 45 30 4c CPM5L.BUF0.L.E0L 1990: 4e 70 00 45 30 4c 4e a0 1f 93 5e 2e 4d 43 48 43 Np.E0LN...^.MCHC 19a0: 50 4d 35 4c 01 8d 42 55 46 30 0b d8 09 45 30 52 PM5L..BUF0...E0R 19b0: 57 70 00 45 30 52 57 a0 1d 5e 2e 4d 43 48 43 50 Wp.E0RW..^.MCHCP 19c0: 4d 35 48 8a 42 55 46 30 0b 66 01 45 34 4c 4e 70 M5H.BUF0.f.E4LNp 19d0: 00 45 34 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d .E4LN...^.MCHCPM 19e0: 35 48 01 8d 42 55 46 30 0b a8 0a 45 34 52 57 70 5H..BUF0...E4RWp 19f0: 00 45 34 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 .E4RW..^.MCHCPM6 1a00: 4c 8a 42 55 46 30 0b 80 01 45 38 4c 4e 70 00 45 L.BUF0...E8LNp.E 1a10: 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 4c 8LN...^.MCHCPM6L 1a20: 01 8d 42 55 46 30 0b 78 0b 45 38 52 57 70 00 45 ..BUF0.x.E8RWp.E 1a30: 38 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 48 8a 8RW..^.MCHCPM6H. 1a40: 42 55 46 30 0b 9a 01 45 43 4c 4e 70 00 45 43 4c BUF0...ECLNp.ECL 1a50: 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 48 01 8d N...^.MCHCPM6H.. 1a60: 42 55 46 30 0b 48 0c 45 43 52 57 70 00 45 43 52 BUF0.H.ECRWp.ECR 1a70: 57 a0 1d 5e 2e 4d 43 48 43 50 4d 30 48 8a 42 55 W..^.MCHCPM0H.BU 1a80: 46 30 0b b4 01 46 30 4c 4e 70 00 46 30 4c 4e a0 F0...F0LNp.F0LN. 1a90: 1f 93 5e 2e 4d 43 48 43 50 4d 30 48 01 8d 42 55 ..^.MCHCPM0H..BU 1aa0: 46 30 0b 18 0d 46 30 52 57 70 00 46 30 52 57 8a F0...F0RWp.F0RW. 1ab0: 42 55 46 30 0b c2 01 4d 31 4d 4e 8a 42 55 46 30 BUF0...M1MN.BUF0 1ac0: 0b c6 01 4d 31 4d 58 8a 42 55 46 30 0b ce 01 4d ...M1MX.BUF0...M 1ad0: 31 4c 4e 8a 42 55 46 30 0b dc 01 4d 32 4d 4e 8a 1LN.BUF0...M2MN. 1ae0: 42 55 46 30 0b e0 01 4d 32 4d 58 8a 42 55 46 30 BUF0...M2MX.BUF0 1af0: 0b e8 01 4d 32 4c 4e 79 5e 2e 4d 43 48 43 50 58 ...M2LNy^.MCHCPX 1b00: 42 52 0a 1a 4d 31 4d 58 7a 0c 00 00 00 10 5e 2e BR..M1MXz.....^. 1b10: 4d 43 48 43 50 58 53 5a 60 72 4d 31 4d 58 60 4d MCHCPXSZ`rM1MX`M 1b20: 32 4d 4e 72 74 4d 32 4d 58 4d 32 4d 4e 00 01 4d 2MNrtM2MXM2MN..M 1b30: 32 4c 4e 74 4d 31 4d 58 01 4d 31 4d 58 79 5e 2e 2LNtM1MX.M1MXy^. 1b40: 4d 43 48 43 54 4c 55 44 0a 14 4d 31 4d 4e 72 74 MCHCTLUD..M1MNrt 1b50: 4d 31 4d 58 4d 31 4d 4e 00 01 4d 31 4c 4e a4 42 M1MXM1MN..M1LN.B 1b60: 55 46 30 14 47 28 5f 50 52 54 00 a0 45 0f 47 50 UF0.G(_PRT..E.GP 1b70: 49 43 a4 12 4d 0e 13 12 0b 04 0c ff ff 01 00 00 IC..M........... 1b80: 00 0a 10 12 0b 04 0c ff ff 02 00 00 00 0a 10 12 ................ 1b90: 0b 04 0c ff ff 07 00 00 00 0a 10 12 0b 04 0c ff ................ 1ba0: ff 19 00 00 00 0a 14 12 0b 04 0c ff ff 1a 00 00 ................ 1bb0: 00 0a 10 12 0b 04 0c ff ff 1a 00 01 00 0a 15 12 ................ 1bc0: 0c 04 0c ff ff 1a 00 0a 02 00 0a 12 12 0b 04 0c ................ 1bd0: ff ff 1b 00 00 00 0a 16 12 0b 04 0c ff ff 1c 00 ................ 1be0: 00 00 0a 11 12 0b 04 0c ff ff 1c 00 01 00 0a 10 ................ 1bf0: 12 0c 04 0c ff ff 1c 00 0a 02 00 0a 12 12 0c 04 ................ 1c00: 0c ff ff 1c 00 0a 03 00 0a 13 12 0b 04 0c ff ff ................ 1c10: 1d 00 00 00 0a 17 12 0b 04 0c ff ff 1d 00 01 00 ................ 1c20: 0a 13 12 0c 04 0c ff ff 1d 00 0a 02 00 0a 12 12 ................ 1c30: 0b 04 0c ff ff 1f 00 00 00 0a 13 12 0b 04 0c ff ................ 1c40: ff 1f 00 01 00 0a 13 12 0c 04 0c ff ff 1f 00 0a ................ 1c50: 02 00 0a 13 12 0c 04 0c ff ff 1f 00 0a 03 00 0a ................ 1c60: 10 a1 49 18 a4 12 45 18 13 12 13 04 0c ff ff 01 ..I...E......... 1c70: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1c80: 0c ff ff 02 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 ......^.LPCBLNKA 1c90: 00 12 13 04 0c ff ff 07 00 00 5e 2e 4c 50 43 42 ..........^.LPCB 1ca0: 4c 4e 4b 41 00 12 13 04 0c ff ff 19 00 00 5e 2e LNKA..........^. 1cb0: 4c 50 43 42 4c 4e 4b 45 00 12 13 04 0c ff ff 1a LPCBLNKE........ 1cc0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1cd0: 0c ff ff 1a 00 01 5e 2e 4c 50 43 42 4c 4e 4b 46 ......^.LPCBLNKF 1ce0: 00 12 14 04 0c ff ff 1a 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1cf0: 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1b 00 00 5e BLNKC..........^ 1d00: 2e 4c 50 43 42 4c 4e 4b 47 00 12 13 04 0c ff ff .LPCBLNKG....... 1d10: 1c 00 00 5e 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 ...^.LPCBLNKB... 1d20: 04 0c ff ff 1c 00 01 5e 2e 4c 50 43 42 4c 4e 4b .......^.LPCBLNK 1d30: 41 00 12 14 04 0c ff ff 1c 00 0a 02 5e 2e 4c 50 A...........^.LP 1d40: 43 42 4c 4e 4b 43 00 12 14 04 0c ff ff 1c 00 0a CBLNKC.......... 1d50: 03 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0c .^.LPCBLNKD..... 1d60: ff ff 1d 00 00 5e 2e 4c 50 43 42 4c 4e 4b 48 00 .....^.LPCBLNKH. 1d70: 12 13 04 0c ff ff 1d 00 01 5e 2e 4c 50 43 42 4c .........^.LPCBL 1d80: 4e 4b 44 00 12 14 04 0c ff ff 1d 00 0a 02 5e 2e NKD...........^. 1d90: 4c 50 43 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1f LPCBLNKC........ 1da0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 ..^.LPCBLNKD.... 1db0: 0c ff ff 1f 00 01 5e 2e 4c 50 43 42 4c 4e 4b 44 ......^.LPCBLNKD 1dc0: 00 12 14 04 0c ff ff 1f 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1dd0: 42 4c 4e 4b 44 00 12 14 04 0c ff ff 1f 00 0a 03 BLNKD........... 1de0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 40 14 50 ^.LPCBLNKA.[.@.P 1df0: 44 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 DRC._HID.A...._U 1e00: 49 44 01 08 42 55 46 30 11 46 06 0a 62 86 09 00 ID..BUF0.F..b... 1e10: 01 00 00 00 00 00 40 00 00 86 09 00 01 00 00 00 ......@......... 1e20: 00 00 40 00 00 86 09 00 01 00 00 00 00 00 10 00 ..@............. 1e30: 00 86 09 00 01 00 00 00 00 00 10 00 00 86 09 00 ................ 1e40: 01 00 00 00 00 00 00 00 00 86 09 00 01 00 00 d2 ................ 1e50: fe 00 00 02 00 86 09 00 01 00 00 d4 fe 00 50 00 ..............P. 1e60: 00 86 09 00 01 00 50 d4 fe 00 b0 04 00 79 00 14 ......P......y.. 1e70: 4d 0b 5f 43 52 53 08 8a 42 55 46 30 0a 04 52 42 M._CRS..BUF0..RB 1e80: 52 30 79 5e 5e 2e 4c 50 43 42 52 43 42 41 0a 0e R0y^^.LPCBRCBA.. 1e90: 52 42 52 30 8a 42 55 46 30 0a 10 4d 42 52 30 79 RBR0.BUF0..MBR0y 1ea0: 5e 5e 2e 4d 43 48 43 4d 48 42 52 0a 0e 4d 42 52 ^^.MCHCMHBR..MBR 1eb0: 30 8a 42 55 46 30 0a 1c 44 42 52 30 79 5e 5e 2e 0.BUF0..DBR0y^^. 1ec0: 4d 43 48 43 44 49 42 52 0a 0c 44 42 52 30 8a 42 MCHCDIBR..DBR0.B 1ed0: 55 46 30 0a 28 45 42 52 30 79 5e 5e 2e 4d 43 48 UF0.(EBR0y^^.MCH 1ee0: 43 45 50 42 52 0a 0c 45 42 52 30 8a 42 55 46 30 CEPBR..EBR0.BUF0 1ef0: 0a 34 58 42 52 30 79 5e 5e 2e 4d 43 48 43 50 58 .4XBR0y^^.MCHCPX 1f00: 42 52 0a 1a 58 42 52 30 8a 42 55 46 30 0a 38 58 BR..XBR0.BUF0.8X 1f10: 53 5a 30 7a 0c 00 00 00 10 5e 5e 2e 4d 43 48 43 SZ0z.....^^.MCHC 1f20: 50 58 53 5a 58 53 5a 30 a4 42 55 46 30 5b 82 4d PXSZXSZ0.BUF0[.M 1f30: 50 50 45 47 50 08 5f 41 44 52 0c 00 00 01 00 14 PPEGP._ADR...... 1f40: 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 2c A._PRT..3GPIC.., 1f50: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 1f60: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 1f70: 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 12 ............E... 1f80: 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 43 A.........^^.LPC 1f90: 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e 2e BLNKA........^^. 1fa0: 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff 0a LPCBLNKB........ 1fb0: 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 1fc0: 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 1fd0: 00 5b 82 49 46 56 47 41 5f 08 5f 41 44 52 00 08 .[.IFVGA_._ADR.. 1fe0: 53 57 49 54 01 08 43 52 54 41 01 08 4c 43 44 41 SWIT..CRTA..LCDA 1ff0: 01 08 54 56 41 41 01 08 56 4c 44 46 01 5b 80 56 ..TVAA..VLDF.[.V 2000: 49 44 53 02 00 0a c8 5b 81 0b 56 49 44 53 03 56 IDS....[..VIDS.V 2010: 44 49 44 20 14 09 5f 53 54 41 00 a4 0a 0f 08 5f DID .._STA....._ 2020: 50 53 43 00 14 0c 5f 50 53 30 00 70 00 5f 50 53 PSC..._PS0.p._PS 2030: 43 14 0c 5f 50 53 31 00 70 01 5f 50 53 43 14 0d C.._PS1.p._PSC.. 2040: 5f 50 53 33 00 70 0a 03 5f 50 53 43 14 10 5f 44 _PS3.p.._PSC.._D 2050: 4f 53 01 70 7b 68 0a 03 00 53 57 49 54 14 17 5f OS.p{h...SWIT.._ 2060: 44 4f 44 00 a4 12 0f 03 0c 00 01 01 00 0c 10 01 DOD............. 2070: 01 00 0b 00 02 5b 82 4d 08 43 52 54 5f 14 0a 5f .....[.M.CRT_.._ 2080: 41 44 52 00 a4 0b 00 01 14 41 06 5f 44 43 53 00 ADR......A._DCS. 2090: 5e 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 ^^^^.LPCBPHSS..p 20a0: 43 41 44 4c 60 70 43 53 54 45 61 7b 60 0a 02 60 CADL`pCSTEa{`..` 20b0: 7b 61 0a 02 61 a0 08 60 70 01 43 52 54 41 a1 07 {a..a..`p.CRTA.. 20c0: 70 00 43 52 54 41 a0 13 43 52 54 41 a0 08 93 61 p.CRTA..CRTA...a 20d0: 0a 02 a4 0a 1f a1 04 a4 0a 1d a1 0f a0 08 93 61 ...............a 20e0: 0a 02 a4 0a 0f a1 04 a4 0a 0d 14 12 5f 44 47 53 ............_DGS 20f0: 00 a0 07 43 52 54 41 a4 01 a1 03 a4 00 14 06 5f ...CRTA........_ 2100: 44 53 53 01 5b 82 47 0e 4c 43 44 5f 14 0a 5f 41 DSS.[.G.LCD_.._A 2110: 44 52 00 a4 0b 10 01 14 4d 05 5f 44 43 53 00 5e DR......M._DCS.^ 2120: 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 ^^^.LPCBPHSS..pC 2130: 41 44 4c 60 70 43 53 54 45 61 7b 60 01 60 7b 61 ADL`pCSTEa{`.`{a 2140: 01 61 a0 08 60 70 01 4c 43 44 41 a1 07 70 00 4c .a..`p.LCDA..p.L 2150: 43 44 41 a0 12 4c 43 44 41 a0 07 93 61 01 a4 0a CDA..LCDA...a... 2160: 1f a1 04 a4 0a 1d a1 0e a0 07 93 61 01 a4 0a 0f ...........a.... 2170: a1 04 a4 0a 0d 14 12 5f 44 47 53 00 a0 07 4c 43 ......._DGS...LC 2180: 44 41 a4 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 DA........_DSS.. 2190: 1d 5f 42 43 4c 00 a4 12 15 0a 0a 46 0a 28 00 0a ._BCL......F.(.. 21a0: 0a 0a 14 0a 1e 0a 28 0a 32 0a 3c 0a 46 14 20 5f ......(.2.<.F. _ 21b0: 42 43 4d 01 78 68 0a 0a 60 61 70 61 5e 5e 5e 5e BCM.xh..`apa^^^^ 21c0: 2f 03 4c 50 43 42 45 43 30 5f 42 52 54 53 14 1e /.LPCBEC0_BRTS.. 21d0: 5f 42 51 43 00 77 5e 5e 5e 5e 2f 03 4c 50 43 42 _BQC.w^^^^/.LPCB 21e0: 45 43 30 5f 42 52 54 53 0a 0a 60 a4 60 5b 82 4d EC0_BRTS..`.`[.M 21f0: 08 54 56 5f 5f 14 0a 5f 41 44 52 00 a4 0b 00 02 .TV__.._ADR..... 2200: 14 41 06 5f 44 43 53 00 5e 5e 5e 5e 2e 4c 50 43 .A._DCS.^^^^.LPC 2210: 42 50 48 53 53 0a 0c 70 43 41 44 4c 60 70 43 53 BPHSS..pCADL`pCS 2220: 54 45 61 7b 60 0a 04 60 7b 61 0a 04 61 a0 08 60 TEa{`..`{a..a..` 2230: 70 01 54 56 41 41 a1 07 70 00 54 56 41 41 a0 13 p.TVAA..p.TVAA.. 2240: 54 56 41 41 a0 08 93 61 0a 04 a4 0a 1f a1 04 a4 TVAA...a........ 2250: 0a 1d a1 0f a0 08 93 61 0a 04 a4 0a 0f a1 04 a4 .......a........ 2260: 0a 0d 14 12 5f 44 47 53 00 a0 07 54 56 41 41 a4 ...._DGS...TVAA. 2270: 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 49 10 44 ......._DSS..I.D 2280: 53 53 57 00 a0 4a 0e 93 53 57 49 54 00 5e 5e 5e SSW..J..SWIT.^^^ 2290: 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 41 44 4c .LPCBPHSS..pCADL 22a0: 60 70 43 53 54 45 61 a0 16 94 61 01 7b 60 61 56 `pCSTEa...a.{`aV 22b0: 4c 44 46 7b 56 4c 44 46 0a fe 56 4c 44 46 a0 43 LDF{VLDF..VLDF.C 22c0: 0a 56 4c 44 46 a0 27 93 60 0a 09 a0 0b 93 61 0a .VLDF.'.`.....a. 22d0: 08 53 54 42 4c 0a 02 a0 0a 93 61 01 53 54 42 4c .STBL.....a.STBL 22e0: 0a 03 a0 0a 93 61 0a 09 53 54 42 4c 01 a0 28 93 .....a..STBL..(. 22f0: 60 0a 0a a0 0b 93 61 0a 08 53 54 42 4c 0a 05 a0 `.....a..STBL... 2300: 0a 93 61 0a 02 53 54 42 4c 01 a0 0b 93 61 0a 0a ..a..STBL....a.. 2310: 53 54 42 4c 0a 04 a0 4b 04 93 60 0a 0b a0 0b 93 STBL...K..`..... 2320: 61 0a 08 53 54 42 4c 0a 02 a0 0b 93 61 0a 09 53 a..STBL.....a..S 2330: 54 42 4c 0a 05 a0 0a 93 61 01 53 54 42 4c 0a 03 TBL.....a.STBL.. 2340: a0 0b 93 61 0a 0a 53 54 42 4c 0a 04 a0 0a 93 61 ...a..STBL.....a 2350: 0a 02 53 54 42 4c 01 a0 0a 93 61 0a 0b 53 54 42 ..STBL....a..STB 2360: 4c 01 a1 0c 70 01 56 4c 44 46 53 54 42 4c 01 a1 L...p.VLDFSTBL.. 2370: 16 a0 14 93 53 57 49 54 01 5e 5e 5e 2e 4c 50 43 ....SWIT.^^^.LPC 2380: 42 50 48 53 53 01 14 45 0b 53 54 42 4c 01 a0 16 BPHSS..E.STBL... 2390: 93 68 01 70 00 43 52 54 41 70 01 4c 43 44 41 70 .h.p.CRTAp.LCDAp 23a0: 00 54 56 41 41 a0 17 93 68 0a 02 70 01 43 52 54 .TVAA...h..p.CRT 23b0: 41 70 00 4c 43 44 41 70 00 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23c0: 68 0a 03 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 23d0: 00 54 56 41 41 a0 17 93 68 0a 04 70 00 43 52 54 .TVAA...h..p.CRT 23e0: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23f0: 68 0a 05 70 00 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2400: 01 54 56 41 41 a0 17 93 68 0a 06 70 01 43 52 54 .TVAA...h..p.CRT 2410: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 2420: 68 0a 07 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2430: 01 54 56 41 41 86 56 47 41 5f 0a 80 5b 82 42 f8 .TVAA.VGA_..[.B. 2440: 47 46 58 30 08 5f 41 44 52 0c 00 00 02 00 14 10 GFX0._ADR....... 2450: 5f 44 4f 53 01 70 7b 68 0a 07 00 44 53 45 4e 14 _DOS.p{h...DSEN. 2460: 41 26 5f 44 4f 44 00 70 00 4e 44 49 44 a0 15 92 A&_DOD.p.NDID... 2470: 93 44 49 44 4c 00 70 53 44 44 4c 44 49 44 31 44 .DIDL.pSDDLDID1D 2480: 49 44 31 a0 15 92 93 44 44 4c 32 00 70 53 44 44 ID1....DDL2.pSDD 2490: 4c 44 49 44 32 44 49 44 32 a0 15 92 93 44 44 4c LDID2DID2....DDL 24a0: 33 00 70 53 44 44 4c 44 49 44 33 44 49 44 33 a0 3.pSDDLDID3DID3. 24b0: 15 92 93 44 44 4c 34 00 70 53 44 44 4c 44 49 44 ...DDL4.pSDDLDID 24c0: 34 44 49 44 34 a0 15 92 93 44 44 4c 35 00 70 53 4DID4....DDL5.pS 24d0: 44 44 4c 44 49 44 35 44 49 44 35 a0 2c 93 4e 44 DDLDID5DID5.,.ND 24e0: 49 44 01 08 54 4d 50 31 12 07 01 0c ff ff ff ff ID..TMP1........ 24f0: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2500: 31 00 00 a4 54 4d 50 31 a0 46 04 93 4e 44 49 44 1...TMP1.F..NDID 2510: 0a 02 08 54 4d 50 32 12 0c 02 0c ff ff ff ff 0c ...TMP2......... 2520: ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 ....p}.....DID1. 2530: 88 54 4d 50 32 00 00 70 7d 0c 00 00 01 00 44 49 .TMP2..p}.....DI 2540: 44 32 00 88 54 4d 50 32 01 00 a4 54 4d 50 32 a0 D2..TMP2...TMP2. 2550: 4f 05 93 4e 44 49 44 0a 03 08 54 4d 50 33 12 11 O..NDID...TMP3.. 2560: 03 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 2570: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2580: 33 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 3..p}.....DID2.. 2590: 54 4d 50 33 01 00 70 7d 0c 00 00 01 00 44 49 44 TMP3..p}.....DID 25a0: 33 00 88 54 4d 50 33 0a 02 00 a4 54 4d 50 33 a0 3..TMP3....TMP3. 25b0: 48 07 93 4e 44 49 44 0a 04 08 54 4d 50 34 12 16 H..NDID...TMP4.. 25c0: 04 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 25d0: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 25e0: 00 88 54 4d 50 34 00 00 70 7d 0c 00 00 01 00 44 ..TMP4..p}.....D 25f0: 49 44 32 00 88 54 4d 50 34 01 00 70 7d 0c 00 00 ID2..TMP4..p}... 2600: 01 00 44 49 44 33 00 88 54 4d 50 34 0a 02 00 70 ..DID3..TMP4...p 2610: 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d 50 34 }.....DID4..TMP4 2620: 0a 03 00 a4 54 4d 50 34 a0 41 09 94 4e 44 49 44 ....TMP4.A..NDID 2630: 0a 04 08 54 4d 50 35 12 1b 05 0c ff ff ff ff 0c ...TMP5......... 2640: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 2650: ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 88 ...p}.....DID1.. 2660: 54 4d 50 35 00 00 70 7d 0c 00 00 01 00 44 49 44 TMP5..p}.....DID 2670: 32 00 88 54 4d 50 35 01 00 70 7d 0c 00 00 01 00 2..TMP5..p}..... 2680: 44 49 44 33 00 88 54 4d 50 35 0a 02 00 70 7d 0c DID3..TMP5...p}. 2690: 00 00 01 00 44 49 44 34 00 88 54 4d 50 35 0a 03 ....DID4..TMP5.. 26a0: 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d .p}.....DID4..TM 26b0: 50 35 0a 04 00 a4 54 4d 50 35 a4 12 05 01 0b 00 P5....TMP5...... 26c0: 04 5b 82 43 06 44 44 30 31 14 1c 5f 41 44 52 08 .[.C.DD01.._ADR. 26d0: a0 09 93 44 49 44 31 00 a4 01 a1 0b a4 7b 0b ff ...DID1......{.. 26e0: ff 44 49 44 31 00 14 0f 5f 44 43 53 00 a4 43 44 .DID1..._DCS..CD 26f0: 44 53 44 49 44 31 14 0f 5f 44 47 53 00 a4 4e 44 DSDID1.._DGS..ND 2700: 44 53 44 49 44 31 14 1f 5f 44 53 53 01 a0 18 93 DSDID1.._DSS.... 2710: 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 {h...........pNS 2720: 54 45 43 53 54 45 5b 82 44 06 44 44 30 32 14 1d TECSTE[.D.DD02.. 2730: 5f 41 44 52 08 a0 0a 93 44 49 44 32 00 a4 0a 02 _ADR....DID2.... 2740: a1 0b a4 7b 0b ff ff 44 49 44 32 00 14 0f 5f 44 ...{...DID2..._D 2750: 43 53 00 a4 43 44 44 53 44 49 44 32 14 0f 5f 44 CS..CDDSDID2.._D 2760: 47 53 00 a4 4e 44 44 53 44 49 44 32 14 1f 5f 44 GS..NDDSDID2.._D 2770: 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 SS....{h........ 2780: 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 41 07 ...pNSTECSTE[.A. 2790: 44 44 30 33 14 1d 5f 41 44 52 08 a0 0a 93 44 49 DD03.._ADR....DI 27a0: 44 33 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 49 44 D3.......{...DID 27b0: 33 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 33 3..._DCS....DID3 27c0: 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 33 14 .......CDDSDID3. 27d0: 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 44 33 14 ._DGS..NDDSDID3. 27e0: 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 ._DSS....{h..... 27f0: 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 5b ......pNSTECSTE[ 2800: 82 41 07 44 44 30 34 14 1d 5f 41 44 52 08 a0 0a .A.DD04.._ADR... 2810: 93 44 49 44 34 00 a4 0a 04 a1 0b a4 7b 0b ff ff .DID4.......{... 2820: 44 49 44 34 00 14 1c 5f 44 43 53 00 a0 0a 93 44 DID4..._DCS....D 2830: 49 44 34 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 ID4.......CDDSDI 2840: 44 34 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 D4.._DGS..NDDSDI 2850: 44 34 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 D4.._DSS....{h.. 2860: 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 .........pNSTECS 2870: 54 45 5b 82 41 07 44 44 30 35 14 1d 5f 41 44 52 TE[.A.DD05.._ADR 2880: 08 a0 0a 93 44 49 44 35 00 a4 0a 05 a1 0b a4 7b ....DID5.......{ 2890: 0b ff ff 44 49 44 35 00 14 1c 5f 44 43 53 00 a0 ...DID5..._DCS.. 28a0: 0a 93 44 49 44 35 00 a4 0a 0b a1 0a a4 43 44 44 ..DID5.......CDD 28b0: 53 44 49 44 35 14 0f 5f 44 47 53 00 a4 4e 44 44 SDID5.._DGS..NDD 28c0: 53 44 49 44 35 14 1f 5f 44 53 53 01 a0 18 93 7b SDID5.._DSS....{ 28d0: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 28e0: 45 43 53 54 45 14 4e 06 53 44 44 4c 01 75 4e 44 ECSTE.N.SDDL.uND 28f0: 49 44 70 7b 68 0b 0f 0f 00 60 7d 0c 00 00 00 80 IDp{h....`}..... 2900: 60 61 a0 09 93 44 49 44 4c 60 a4 61 a0 09 93 44 `a...DIDL`.a...D 2910: 44 4c 32 60 a4 61 a0 09 93 44 44 4c 33 60 a4 61 DL2`.a...DDL3`.a 2920: a0 09 93 44 44 4c 34 60 a4 61 a0 09 93 44 44 4c ...DDL4`.a...DDL 2930: 35 60 a4 61 a0 09 93 44 44 4c 36 60 a4 61 a0 09 5`.a...DDL6`.a.. 2940: 93 44 44 4c 37 60 a4 61 a0 09 93 44 44 4c 38 60 .DDL7`.a...DDL8` 2950: a4 61 a4 00 14 4a 08 43 44 44 53 01 a0 0f 93 43 .a...J.CDDS....C 2960: 41 44 4c 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 ADL{h..........C 2970: 41 4c 32 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL2{h..........C 2980: 41 4c 33 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL3{h..........C 2990: 41 4c 34 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL4{h..........C 29a0: 41 4c 35 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL5{h..........C 29b0: 41 4c 36 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL6{h..........C 29c0: 41 4c 37 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL7{h..........C 29d0: 41 4c 38 7b 68 0b 0f 0f 00 a4 0a 1f a4 0a 1d 14 AL8{h........... 29e0: 41 08 4e 44 44 53 01 a0 0e 93 4e 41 44 4c 7b 68 A.NDDS....NADL{h 29f0: 0b 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 32 7b 68 0b .........NDL2{h. 2a00: 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 33 7b 68 0b 0f ........NDL3{h.. 2a10: 0f 00 a4 01 a0 0e 93 4e 44 4c 34 7b 68 0b 0f 0f .......NDL4{h... 2a20: 00 a4 01 a0 0e 93 4e 44 4c 35 7b 68 0b 0f 0f 00 ......NDL5{h.... 2a30: a4 01 a0 0e 93 4e 44 4c 36 7b 68 0b 0f 0f 00 a4 .....NDL6{h..... 2a40: 01 a0 0e 93 4e 44 4c 37 7b 68 0b 0f 0f 00 a4 01 ....NDL7{h...... 2a50: a0 0e 93 4e 44 4c 38 7b 68 0b 0f 0f 00 a4 01 a4 ...NDL8{h....... 2a60: 00 14 40 07 42 52 54 4e 09 a0 14 93 7b 44 49 44 ..@.BRTN....{DID 2a70: 31 0b 00 0f 00 0b 00 04 86 44 44 30 31 68 a0 14 1........DD01h.. 2a80: 93 7b 44 49 44 32 0b 00 0f 00 0b 00 04 86 44 44 .{DID2........DD 2a90: 30 32 68 a0 14 93 7b 44 49 44 33 0b 00 0f 00 0b 02h...{DID3..... 2aa0: 00 04 86 44 44 30 33 68 a0 14 93 7b 44 49 44 34 ...DD03h...{DID4 2ab0: 0b 00 0f 00 0b 00 04 86 44 44 30 34 68 a0 14 93 ........DD04h... 2ac0: 7b 44 49 44 35 0b 00 0f 00 0b 00 04 86 44 44 30 {DID5........DD0 2ad0: 35 68 10 24 5e 5e 50 43 49 30 5b 80 4d 43 48 50 5h.$^^PCI0[.MCHP 2ae0: 02 0a 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 ..@..[..MCHP..@0 2af0: 54 41 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 TASM...[.IGDP..@ 2b00: 0a c0 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 ..[.E.IGDP..@... 2b10: 47 49 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 GIVD...GUMA..... 2b20: 47 4d 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 GMFN....@FASLE.. 2b30: 18 47 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 .GSSE.GSSB.GSES. 2b40: 00 30 00 08 43 44 56 4c 05 00 03 00 18 4c 42 50 .0..CDVL.....LBP 2b50: 43 08 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 C..0ASLS [.IGDM. 2b60: 41 53 4c 42 0b 00 20 5b 81 4e 16 49 47 44 4d 00 ASLB.. [.N.IGDM. 2b70: 53 49 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 SIGN@.SIZE OVER 2b80: 53 56 45 52 40 10 56 56 45 52 40 08 47 56 45 52 SVER@.VVER@.GVER 2b90: 40 08 4d 42 4f 58 20 00 40 52 44 52 44 59 20 43 @.MBOX .@RDRDY C 2ba0: 53 54 53 20 43 45 56 54 20 00 40 0a 44 49 44 4c STS CEVT .@.DIDL 2bb0: 20 44 44 4c 32 20 44 44 4c 33 20 44 44 4c 34 20 DDL2 DDL3 DDL4 2bc0: 44 44 4c 35 20 44 44 4c 36 20 44 44 4c 37 20 44 DDL5 DDL6 DDL7 D 2bd0: 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 20 43 50 DL8 CPDL CPL2 CP 2be0: 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 43 50 4c L3 CPL4 CPL5 CPL 2bf0: 36 20 43 50 4c 37 20 43 50 4c 38 20 43 41 44 4c 6 CPL7 CPL8 CADL 2c00: 20 43 41 4c 32 20 43 41 4c 33 20 43 41 4c 34 20 CAL2 CAL3 CAL4 2c10: 43 41 4c 35 20 43 41 4c 36 20 43 41 4c 37 20 43 CAL5 CAL6 CAL7 C 2c20: 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 20 4e 44 AL8 NADL NDL2 ND 2c30: 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 4e 44 4c L3 NDL4 NDL5 NDL 2c40: 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 53 4c 50 6 NDL7 NDL8 ASLP 2c50: 20 54 49 44 58 20 43 48 50 44 20 43 4c 49 44 20 TIDX CHPD CLID 2c60: 43 44 43 4b 20 53 58 53 57 20 45 56 54 53 20 43 CDCK SXSW EVTS C 2c70: 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 43 49 45 NOT NRDY .@.SCIE 2c80: 01 47 45 46 43 04 47 58 46 43 03 47 45 53 46 08 .GEFC.GXFC.GESF. 2c90: 00 10 50 41 52 4d 20 44 53 4c 50 20 00 40 7a 41 ..PARM DSLP .@zA 2ca0: 52 44 59 20 41 53 4c 43 20 54 43 48 45 20 41 4c RDY ASLC TCHE AL 2cb0: 53 49 20 42 43 4c 50 20 50 46 49 54 20 43 42 4c SI BCLP PFIT CBL 2cc0: 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 00 40 5c V BCLM@.CPFM .@\ 2cd0: 47 56 44 31 80 00 0e 08 44 42 54 42 12 32 15 00 GVD1....DBTB.2.. 2ce0: 0a 07 0a 38 0b c0 01 0b 00 0e 0a 3f 0b c7 01 0b ...8.......?.... 2cf0: 07 0e 0b f8 01 0b 38 0e 0b c0 0f 00 00 00 00 00 ......8......... 2d00: 0b 00 70 0b 07 70 0b 38 70 0b c0 71 0b 00 7e 08 ..p..p.8p..q..~. 2d10: 43 44 43 54 12 23 03 12 0a 03 0a c8 0b 40 01 0b CDCT.#.......@.. 2d20: 90 01 12 0a 03 0a c8 0b 4d 01 0b 90 01 12 0a 03 ........M....... 2d30: 0a de 0b 4d 01 0b 7d 01 08 53 55 43 43 01 08 4e ...M..}..SUCC..N 2d40: 56 4c 44 0a 02 08 43 52 49 54 0a 04 08 4e 43 52 VLD...CRIT...NCR 2d50: 54 0a 06 14 4c 4a 47 53 43 49 08 14 44 1e 47 42 T...LJGSCI..D.GB 2d60: 44 41 08 a0 1a 93 47 45 53 46 00 70 0b 79 02 50 DA....GESF.p.y.P 2d70: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 1a ARMp.GESF.SUCC.. 2d80: 93 47 45 53 46 01 70 0b 40 02 50 41 52 4d 70 00 .GESF.p.@.PARMp. 2d90: 47 45 53 46 a4 53 55 43 43 a0 47 04 93 47 45 53 GESF.SUCC.G..GES 2da0: 46 0a 04 7b 50 41 52 4d 0c 00 00 ff ef 50 41 52 F..{PARM.....PAR 2db0: 4d 7b 50 41 52 4d 79 83 88 44 42 54 42 49 42 54 M{PARMy..DBTBIBT 2dc0: 54 00 0a 10 00 50 41 52 4d 7d 49 42 54 54 50 41 T....PARM}IBTTPA 2dd0: 52 4d 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 RMPARMp.GESF.SUC 2de0: 43 a0 4a 06 93 47 45 53 46 0a 05 70 49 50 53 43 C.J..GESF..pIPSC 2df0: 50 41 52 4d 7d 50 41 52 4d 79 49 50 41 54 0a 08 PARM}PARMyIPAT.. 2e00: 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 41 52 .PARMrPARM...PAR 2e10: 4d 7d 50 41 52 4d 79 4c 49 44 53 0a 10 00 50 41 M}PARMyLIDS...PA 2e20: 52 4d 72 50 41 52 4d 0c 00 00 01 00 50 41 52 4d RMrPARM.....PARM 2e30: 7d 50 41 52 4d 79 49 42 49 41 0a 14 00 50 41 52 }PARMyIBIA...PAR 2e40: 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 2d 93 47 Mp.GESF.SUCC.-.G 2e50: 45 53 46 0a 06 70 49 54 56 46 50 41 52 4d 7d 50 ESF..pITVFPARM}P 2e60: 41 52 4d 79 49 54 56 4d 0a 04 00 50 41 52 4d 70 ARMyITVM...PARMp 2e70: 00 47 45 53 46 a4 53 55 43 43 a0 4f 08 93 47 45 .GESF.SUCC.O..GE 2e80: 53 46 0a 07 70 47 49 56 44 50 41 52 4d 7f 50 41 SF..pGIVDPARM.PA 2e90: 52 4d 01 50 41 52 4d 7d 50 41 52 4d 79 47 4d 46 RM.PARM}PARMyGMF 2ea0: 4e 01 00 50 41 52 4d 7d 50 41 52 4d 0b 00 10 50 N..PARM}PARM...P 2eb0: 41 52 4d a0 16 49 44 4d 4d 7d 50 41 52 4d 79 49 ARM..IDMM}PARMyI 2ec0: 44 4d 53 0a 11 00 50 41 52 4d a1 12 7d 50 41 52 DMS...PARM..}PAR 2ed0: 4d 79 49 44 4d 53 0a 0d 00 50 41 52 4d 7d 79 83 MyIDMS...PARM}y. 2ee0: 88 83 88 43 44 43 54 48 56 43 4f 00 74 43 44 56 ...CDCTHVCO.tCDV 2ef0: 4c 01 00 00 0a 15 00 50 41 52 4d 50 41 52 4d 70 L......PARMPARMp 2f00: 01 47 45 53 46 a4 53 55 43 43 a0 2a 93 47 45 53 .GESF.SUCC.*.GES 2f10: 46 0a 0a 70 00 50 41 52 4d a0 10 49 53 53 43 7d F..p.PARM..ISSC} 2f20: 50 41 52 4d 0a 03 50 41 52 4d 70 00 47 45 53 46 PARM..PARMp.GESF 2f30: a4 53 55 43 43 70 00 47 45 53 46 a4 43 52 49 54 .SUCCp.GESF.CRIT 2f40: 14 41 28 53 42 43 42 08 a0 20 93 47 45 53 46 00 .A(SBCB.. .GESF. 2f50: 70 00 50 41 52 4d 70 0b 7d f7 50 41 52 4d 70 00 p.PARMp.}.PARMp. 2f60: 47 45 53 46 a4 53 55 43 43 a0 18 93 47 45 53 46 GESF.SUCC...GESF 2f70: 01 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 2f80: 43 43 a0 19 93 47 45 53 46 0a 03 70 00 47 45 53 CC...GESF..p.GES 2f90: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 Fp.PARM.SUCC...G 2fa0: 45 53 46 0a 04 70 00 47 45 53 46 70 00 50 41 52 ESF..p.GESFp.PAR 2fb0: 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 05 70 M.SUCC...GESF..p 2fc0: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 2fd0: a0 37 93 47 45 53 46 0a 06 70 7b 50 41 52 4d 0a .7.GESF..p{PARM. 2fe0: 0f 00 49 54 56 46 70 7a 7b 50 41 52 4d 0a f0 00 ..ITVFpz{PARM... 2ff0: 0a 04 00 49 54 56 4d 70 00 47 45 53 46 70 00 50 ...ITVMp.GESFp.P 3000: 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a ARM.SUCC...GESF. 3010: 07 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 3020: 43 43 a0 19 93 47 45 53 46 0a 08 70 00 47 45 53 CC...GESF..p.GES 3030: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 24 93 47 Fp.PARM.SUCC.$.G 3040: 45 53 46 0a 09 7b 50 41 52 4d 0a ff 49 42 54 54 ESF..{PARM..IBTT 3050: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 3060: 43 a0 46 05 93 47 45 53 46 0a 0a 7b 50 41 52 4d C.F..GESF..{PARM 3070: 0a ff 49 50 53 43 a0 21 7b 7a 50 41 52 4d 0a 08 ..IPSC.!{zPARM.. 3080: 00 0a ff 00 7b 7a 50 41 52 4d 0a 08 00 0a ff 49 ....{zPARM.....I 3090: 50 41 54 76 49 50 41 54 7b 7a 50 41 52 4d 0a 14 PATvIPAT{zPARM.. 30a0: 00 0a 07 49 42 49 41 70 00 47 45 53 46 70 00 50 ...IBIAp.GESFp.P 30b0: 41 52 4d a4 53 55 43 43 a0 40 06 93 47 45 53 46 ARM.SUCC.@..GESF 30c0: 0a 0b 7b 7a 50 41 52 4d 01 00 01 49 46 31 45 a0 ..{zPARM...IF1E. 30d0: 21 7b 50 41 52 4d 0c 00 e0 01 00 00 7b 7a 50 41 !{PARM......{zPA 30e0: 52 4d 0a 0d 00 0a 0f 49 44 4d 53 70 00 49 44 4d RM.....IDMSp.IDM 30f0: 4d a1 16 7b 7a 50 41 52 4d 0a 11 00 0a 0f 49 44 M..{zPARM.....ID 3100: 4d 53 70 01 49 44 4d 4d 70 00 47 45 53 46 70 00 MSp.IDMMp.GESFp. 3110: 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 PARM.SUCC...GESF 3120: 0a 10 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 ..p.GESFp.PARM.S 3130: 55 43 43 a0 1f 93 47 45 53 46 0a 11 7d 50 41 52 UCC...GESF..}PAR 3140: 4d 0b 00 01 50 41 52 4d 70 00 47 45 53 46 a4 53 M...PARMp.GESF.S 3150: 55 43 43 a0 49 04 93 47 45 53 46 0a 12 a0 26 7b UCC.I..GESF...&{ 3160: 50 41 52 4d 01 00 a0 10 93 7a 50 41 52 4d 01 00 PARM.....zPARM.. 3170: 01 70 01 49 53 53 43 a1 0c 70 00 47 45 53 46 a4 .p.ISSC..p.GESF. 3180: 43 52 49 54 a1 07 70 00 49 53 53 43 70 00 47 45 CRIT..p.ISSCp.GE 3190: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 SFp.PARM.SUCC... 31a0: 47 45 53 46 0a 13 70 00 47 45 53 46 70 00 50 41 GESF..p.GESFp.PA 31b0: 52 4d a4 53 55 43 43 70 00 47 45 53 46 a4 53 55 RM.SUCCp.GESF.SU 31c0: 43 43 a0 11 93 47 45 46 43 0a 04 70 47 42 44 41 CC...GEFC..pGBDA 31d0: 47 58 46 43 a0 11 93 47 45 46 43 0a 06 70 53 42 GXFC...GEFC..pSB 31e0: 43 42 47 58 46 43 70 00 47 45 46 43 70 01 53 43 CBGXFCp.GEFCp.SC 31f0: 49 53 70 00 47 53 53 45 70 00 53 43 49 45 a4 00 ISp.GSSEp.SCIE.. 3200: 14 19 50 44 52 44 00 a0 0c 92 44 52 44 59 5b 22 ..PDRD....DRDY[" 3210: 41 53 4c 50 a4 92 44 52 44 59 14 1d 50 53 54 53 ASLP..DRDY..PSTS 3220: 00 a0 0e 94 43 53 54 53 0a 02 5b 22 41 53 4c 50 ....CSTS..["ASLP 3230: a4 93 43 53 54 53 0a 03 14 47 06 47 4e 4f 54 02 ..CSTS...G.GNOT. 3240: a0 07 50 44 52 44 a4 01 a0 07 50 53 54 53 a4 01 ..PDRD....PSTS.. 3250: 70 68 43 45 56 54 70 0a 03 43 53 54 53 a0 2c 90 phCEVTp..CSTS.,. 3260: 93 43 48 50 44 00 93 69 00 a0 18 91 94 4f 53 59 .CHPD..i.....OSY 3270: 53 0b d0 07 95 4f 53 59 53 0b d6 07 86 50 43 49 S....OSYS....PCI 3280: 30 69 a1 07 86 47 46 58 30 69 86 47 46 58 30 0a 0i...GFX0i.GFX0. 3290: 80 a0 0c 92 50 53 54 53 70 00 43 45 56 54 a4 00 ....PSTSp.CEVT.. 32a0: 14 13 47 48 44 53 01 70 68 54 49 44 58 a4 47 4e ..GHDS.phTIDX.GN 32b0: 4f 54 01 00 14 14 47 4c 49 44 01 70 68 43 4c 49 OT....GLID.phCLI 32c0: 44 a4 47 4e 4f 54 0a 02 00 14 15 47 44 43 4b 01 D.GNOT.....GDCK. 32d0: 70 68 43 44 43 4b a4 47 4e 4f 54 0a 04 0a 80 14 phCDCK.GNOT..... 32e0: 19 50 41 52 44 00 a0 0c 92 41 52 44 59 5b 22 41 .PARD....ARDY["A 32f0: 53 4c 50 a4 92 41 52 44 59 14 46 0c 41 49 4e 54 SLP..ARDY.F.AINT 3300: 02 a0 0e 92 7b 54 43 48 45 79 01 68 00 00 a4 01 ....{TCHEy.h.... 3310: a0 07 50 41 52 44 a4 01 a0 4c 05 93 68 0a 02 a0 ..PARD...L..h... 3320: 33 43 50 46 4d a0 0e 93 43 50 46 4d 01 70 0a 06 3CPFM...CPFM.p.. 3330: 50 46 49 54 a0 0f 93 43 50 46 4d 0a 06 70 0a 08 PFIT...CPFM..p.. 3340: 50 46 49 54 a0 0e 93 43 50 46 4d 0a 08 70 01 50 PFIT...CPFM..p.P 3350: 46 49 54 a1 0c 7f 50 46 49 54 0a 07 50 46 49 54 FIT...PFIT..PFIT 3360: 7d 50 46 49 54 0c 00 00 00 80 50 46 49 54 70 0a }PFIT.....PFITp. 3370: 04 41 53 4c 43 a1 42 04 a0 28 93 68 01 70 78 77 .ASLC.B..(.h.pxw 3380: 69 0a ff 00 0a 64 00 00 42 43 4c 50 7d 42 43 4c i....d..BCLP}BCL 3390: 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 41 53 4c P.....BCLPp..ASL 33a0: 43 a1 16 a0 10 93 68 00 70 69 41 4c 53 49 70 01 C.....h.piALSIp. 33b0: 41 53 4c 43 a1 03 a4 01 70 00 4c 42 50 43 a4 00 ASLC....p.LBPC.. 33c0: 10 41 36 5c 00 5b 80 49 4f 5f 54 01 0b 00 08 0a .A6\.[.IO_T..... 33d0: 10 5b 81 0e 49 4f 5f 54 01 00 40 04 54 52 50 30 .[..IO_T..@.TRP0 33e0: 08 5b 80 50 4d 49 4f 01 0b 00 10 0a 80 5b 81 28 .[.PMIO......[.( 33f0: 50 4d 49 4f 01 00 40 15 00 08 00 02 41 43 50 57 PMIO..@.....ACPW 3400: 01 00 45 0b 00 01 47 50 45 43 01 00 4e 10 00 09 ..E...GPEC..N... 3410: 53 43 49 53 01 00 06 5b 80 47 50 49 4f 01 0b 80 SCIS...[.GPIO... 3420: 11 0a 3c 5b 81 40 0c 47 50 49 4f 01 47 55 30 30 ..<[.@.GPIO.GU00 3430: 08 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 .GU01.GU02.GU03. 3440: 47 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 GIO0.GIO1.GIO2.G 3450: 49 4f 33 08 00 20 47 4c 30 30 08 47 4c 30 31 08 IO3.. GL00.GL01. 3460: 47 4c 30 32 08 00 03 47 50 32 37 01 47 50 32 38 GL02...GP27.GP28 3470: 01 00 03 00 40 04 47 42 30 30 08 47 42 30 31 08 ....@.GB00.GB01. 3480: 47 42 30 32 08 47 42 30 33 08 00 40 08 47 49 56 GB02.GB03..@.GIV 3490: 30 08 00 03 4c 50 4f 4c 01 00 04 47 49 56 32 08 0...LPOL...GIV2. 34a0: 47 49 56 33 08 47 55 30 34 08 47 55 30 35 08 47 GIV3.GU04.GU05.G 34b0: 55 30 36 08 47 55 30 37 08 47 49 4f 34 08 47 49 U06.GU07.GIO4.GI 34c0: 4f 35 08 47 49 4f 36 08 47 49 4f 37 08 00 05 47 O5.GIO6.GIO7...G 34d0: 50 33 37 01 00 02 47 4c 30 35 08 47 4c 30 36 08 P37...GL05.GL06. 34e0: 47 4c 30 37 08 5b 80 52 43 52 42 00 0c 00 c0 d1 GL07.[.RCRB..... 34f0: fe 0b 00 40 5b 81 48 05 52 43 52 42 13 00 80 00 ...@[.H.RCRB.... 3500: 08 00 80 00 10 00 80 02 02 48 50 41 53 02 00 05 .........HPAS... 3510: 48 50 41 45 01 00 48 09 00 01 50 41 54 44 01 53 HPAE..H...PATD.S 3520: 41 54 44 01 53 4d 42 44 01 48 44 41 44 01 00 0b ATD.SMBD.HDAD... 3530: 52 50 31 44 01 52 50 32 44 01 52 50 33 44 01 52 RP1D.RP2D.RP3D.R 3540: 50 34 44 01 52 50 35 44 01 52 50 36 44 01 08 5f P4D.RP5D.RP6D.._ 3550: 53 30 5f 12 05 03 00 00 00 08 5f 53 33 5f 12 07 S0_......._S3_.. 3560: 03 0a 05 0a 05 00 08 5f 53 34 5f 12 07 03 0a 06 ......._S4_..... 3570: 0a 06 00 08 5f 53 35 5f 12 07 03 0a 07 0a 07 00 ...._S5_........ 3580: 14 45 04 47 45 54 50 09 a0 0e 93 7b 68 0a 09 00 .E.GETP....{h... 3590: 00 a4 0c ff ff ff ff a0 0d 93 7b 68 0a 09 00 0a ..........{h.... 35a0: 08 a4 0b 84 03 7a 7b 68 0b 00 03 00 0a 08 60 7a .....z{h......`z 35b0: 7b 68 0b 00 30 00 0a 0c 61 a4 77 0a 1e 74 0a 09 {h..0...a.w..t.. 35c0: 72 60 61 00 00 00 14 30 47 44 4d 41 0d a0 23 68 r`a....0GDMA..#h 35d0: a0 07 90 69 6c a4 0a 14 a0 0e 90 6a 6c a4 77 74 ...il......jl.wt 35e0: 0a 04 6b 00 0a 0f 00 a4 77 74 0a 04 6b 00 0a 1e ..k.....wt..k... 35f0: 00 a4 0c ff ff ff ff 14 1f 47 45 54 54 09 a4 77 .........GETT..w 3600: 0a 1e 74 0a 09 72 7b 7a 68 0a 02 00 0a 03 00 7b ..t..r{zh......{ 3610: 68 0a 03 00 00 00 00 14 44 06 47 45 54 46 0b 08 h.......D.GETF.. 3620: 54 4d 50 46 00 a0 0c 68 7d 54 4d 50 46 01 54 4d TMPF...h}TMPF.TM 3630: 50 46 a0 11 7b 6a 0a 02 00 7d 54 4d 50 46 0a 02 PF..{j...}TMPF.. 3640: 54 4d 50 46 a0 0d 69 7d 54 4d 50 46 0a 04 54 4d TMPF..i}TMPF..TM 3650: 50 46 a0 11 7b 6a 0a 20 00 7d 54 4d 50 46 0a 08 PF..{j. .}TMPF.. 3660: 54 4d 50 46 a0 12 7b 6a 0b 00 40 00 7d 54 4d 50 TMPF..{j..@.}TMP 3670: 46 0a 10 54 4d 50 46 a4 54 4d 50 46 14 3d 53 45 F..TMPF.TMPF.=SE 3680: 54 50 0b a0 08 94 68 0a f0 a4 0a 08 a1 2d a0 27 TP....h......-.' 3690: 7b 69 0a 02 00 a0 10 90 92 94 68 0a 78 7b 6a 0a {i........h.x{j. 36a0: 02 00 a4 0b 01 23 a0 0f 90 92 94 68 0a b4 7b 6a .....#.....h..{j 36b0: 01 00 a4 0b 01 21 a4 0b 01 10 14 37 53 44 4d 41 .....!.....7SDMA 36c0: 09 a0 08 92 94 68 0a 14 a4 01 a0 09 92 94 68 0a .....h........h. 36d0: 1e a4 0a 02 a0 08 92 94 68 0a 2d a4 01 a0 09 92 ........h.-..... 36e0: 94 68 0a 3c a4 0a 02 a0 08 92 94 68 0a 5a a4 01 .h.<.......h.Z.. 36f0: a4 00 14 2f 53 45 54 54 0b a0 25 7b 69 0a 02 00 .../SETT..%{i... 3700: a0 0f 90 92 94 68 0a 78 7b 6a 0a 02 00 a4 0a 0b .....h.x{j...... 3710: a0 0e 90 92 94 68 0a b4 7b 6a 01 00 a4 0a 09 a4 .....h..{j...... 3720: 0a 04 5b 82 4b 04 48 44 45 46 08 5f 41 44 52 0c ..[.K.HDEF._ADR. 3730: 00 00 1b 00 5b 80 48 44 41 52 02 0a 4c 0a 10 5b ....[.HDAR..L..[ 3740: 81 22 48 44 41 52 02 44 43 4b 41 01 00 07 44 43 ."HDAR.DCKA...DC 3750: 4b 4d 01 00 06 44 43 4b 53 01 00 30 00 0f 50 4d KM...DCKS..0..PM 3760: 45 53 01 08 5f 50 52 57 12 06 02 0a 0d 0a 03 5b ES.._PRW.......[ 3770: 82 41 10 52 50 30 31 08 5f 41 44 52 0c 00 00 1c .A.RP01._ADR.... 3780: 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 45 04 .[.PXCS..@..[.E. 3790: 50 58 43 53 40 00 40 09 00 0d 4c 41 53 58 01 00 PXCS@.@...LASX.. 37a0: 32 41 42 50 58 01 00 02 50 44 43 58 01 00 02 50 2ABPX...PDCX...P 37b0: 44 53 58 01 00 01 4c 53 43 58 01 00 27 00 10 50 DSX...LSCX..'..P 37c0: 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 01 50 4d SPX..O<..HPSX.PM 37d0: 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 44 52 00 SX.[..PXSX._ADR. 37e0: 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 .A._PRT..3GPIC.. 37f0: 2c 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ,............... 3800: ff ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a ................ 3810: 12 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 .............E.. 3820: 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 .A.........^^.LP 3830: 43 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e CBLNKA........^^ 3840: 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff .LPCBLNKB....... 3850: 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 ..^^.LPCBLNKC... 3860: 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b ......^^.LPCBLNK 3870: 44 00 5b 82 41 10 52 50 30 32 08 5f 41 44 52 0c D.[.A.RP02._ADR. 3880: 01 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b ....[.PXCS..@..[ 3890: 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c 41 53 .E.PXCS@.@...LAS 38a0: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 38b0: 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 ..PDSX...LSCX..' 38c0: 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 ..PSPX..O<..HPSX 38d0: 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 .PMSX.[..PXSX._A 38e0: 44 52 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 DR..A._PRT..3GPI 38f0: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 11 12 C..,............ 3900: 09 04 0b ff ff 01 00 0a 12 12 0a 04 0b ff ff 0a ................ 3910: 02 00 0a 13 12 0a 04 0b ff ff 0a 03 00 0a 10 a1 ................ 3920: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3930: 2e 4c 50 43 42 4c 4e 4b 42 00 12 12 04 0b ff ff .LPCBLNKB....... 3940: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 3950: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 3960: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3970: 4c 4e 4b 41 00 5b 82 4d 11 52 50 30 33 08 5f 41 LNKA.[.M.RP03._A 3980: 44 52 0c 02 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3990: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 39a0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 39b0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 39c0: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 39d0: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 39e0: 08 5f 41 44 52 00 08 2e 50 58 53 58 5f 52 4d 56 ._ADR...PXSX_RMV 39f0: 01 08 2e 50 58 53 58 5f 50 52 57 12 06 02 0a 09 ...PXSX_PRW..... 3a00: 0a 03 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 ...A._PRT..3GPIC 3a10: a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 12 12 09 ..,............. 3a20: 04 0b ff ff 01 00 0a 13 12 0a 04 0b ff ff 0a 02 ................ 3a30: 00 0a 10 12 0a 04 0b ff ff 0a 03 00 0a 11 a1 45 ...............E 3a40: 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e ...A.........^^. 3a50: 4c 50 43 42 4c 4e 4b 43 00 12 12 04 0b ff ff 01 LPCBLNKC........ 3a60: 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0b ^^.LPCBLNKD..... 3a70: ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 ....^^.LPCBLNKA. 3a80: 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3a90: 4e 4b 42 00 5b 82 4f 11 52 50 30 34 08 5f 41 44 NKB.[.O.RP04._AD 3aa0: 52 0c 03 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a R.....[.PXCS..@. 3ab0: c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c .[.E.PXCS@.@...L 3ac0: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 3ad0: 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 X...PDSX...LSCX. 3ae0: 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 .'..PSPX..O<..HP 3af0: 53 58 01 50 4d 53 58 01 5b 82 29 50 58 53 58 08 SX.PMSX.[.)PXSX. 3b00: 5f 41 44 52 00 14 1d 5f 50 52 57 00 a0 0d 57 4b _ADR..._PRW...WK 3b10: 4c 4e a4 12 06 02 0a 09 0a 03 a1 08 a4 12 05 02 LN.............. 3b20: 0a 09 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 ....A._PRT..3GPI 3b30: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 C..,............ 3b40: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 3b50: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 a1 ................ 3b60: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3b70: 2e 4c 50 43 42 4c 4e 4b 44 00 12 12 04 0b ff ff .LPCBLNKD....... 3b80: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 .^^.LPCBLNKA.... 3b90: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 .....^^.LPCBLNKB 3ba0: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3bb0: 4c 4e 4b 43 00 5b 82 41 10 52 50 30 35 08 5f 41 LNKC.[.A.RP05._A 3bc0: 44 52 0c 04 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3bd0: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 3be0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 3bf0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 3c00: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 3c10: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 3c20: 08 5f 41 44 52 00 14 41 09 5f 50 52 54 00 a0 33 ._ADR..A._PRT..3 3c30: 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 GPIC..,......... 3c40: 0a 10 12 09 04 0b ff ff 01 00 0a 11 12 0a 04 0b ................ 3c50: ff ff 0a 02 00 0a 12 12 0a 04 0b ff ff 0a 03 00 ................ 3c60: 0a 13 a1 45 05 a4 12 41 05 04 12 12 04 0b ff ff ...E...A........ 3c70: 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 12 04 .^^.LPCBLNKA.... 3c80: 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3c90: 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3ca0: 4e 4b 43 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c NKC.........^^.L 3cb0: 50 43 42 4c 4e 4b 44 00 5b 82 41 10 52 50 30 36 PCBLNKD.[.A.RP06 3cc0: 08 5f 41 44 52 0c 05 00 1c 00 5b 80 50 58 43 53 ._ADR.....[.PXCS 3cd0: 02 0a 40 0a c0 5b 81 45 04 50 58 43 53 40 00 40 ..@..[.E.PXCS@.@ 3ce0: 09 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 ...LASX..2ABPX.. 3cf0: 02 50 44 43 58 01 00 02 50 44 53 58 01 00 01 4c .PDCX...PDSX...L 3d00: 53 43 58 01 00 27 00 10 50 53 50 58 01 00 4f 3c SCX..'..PSPX..O< 3d10: 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 ..HPSX.PMSX.[..P 3d20: 58 53 58 08 5f 41 44 52 00 14 41 09 5f 50 52 54 XSX._ADR..A._PRT 3d30: 00 a0 33 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ..3GPIC..,...... 3d40: ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a 12 12 ................ 3d50: 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ff ff ................ 3d60: 0a 03 00 0a 10 a1 45 05 a4 12 41 05 04 12 12 04 ......E...A..... 3d70: 0b ff ff 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3d80: 12 12 04 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 3d90: 4b 43 00 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 KC.........^^.LP 3da0: 43 42 4c 4e 4b 44 00 12 13 04 0b ff ff 0a 03 5e CBLNKD.........^ 3db0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 4d 06 55 ^.LPCBLNKA.[.M.U 3dc0: 53 42 31 08 5f 41 44 52 0c 00 00 1d 00 5b 80 55 SB1._ADR.....[.U 3dd0: 31 43 53 02 0a c4 0a 04 5b 81 0b 55 31 43 53 03 1CS.....[..U1CS. 3de0: 55 31 45 4e 02 08 5f 50 52 57 12 06 02 0a 03 0a U1EN.._PRW...... 3df0: 03 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 ..$_PSW...hp.ACP 3e00: 57 a0 0c 41 43 50 57 70 0a 03 55 31 45 4e a1 07 W..ACPWp..U1EN.. 3e10: 70 00 55 31 45 4e 14 09 5f 53 33 44 00 a4 0a 02 p.U1EN.._S3D.... 3e20: 14 09 5f 53 34 44 00 a4 0a 02 5b 82 4c 06 55 53 .._S4D....[.L.US 3e30: 42 32 08 5f 41 44 52 0c 01 00 1d 00 5b 80 55 32 B2._ADR.....[.U2 3e40: 43 53 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 CS.....[..U2CS.U 3e50: 32 45 4e 02 08 5f 50 52 57 12 06 02 0a 04 0a 03 2EN.._PRW....... 3e60: 14 23 5f 50 53 57 01 a0 14 68 70 01 41 43 50 57 .#_PSW...hp.ACPW 3e70: a0 0b 41 43 50 57 70 01 55 32 45 4e a1 07 70 00 ..ACPWp.U2EN..p. 3e80: 55 32 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 U2EN.._S3D...... 3e90: 5f 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 33 _S4D....[.M.USB3 3ea0: 08 5f 41 44 52 0c 02 00 1d 00 5b 80 55 32 43 53 ._ADR.....[.U2CS 3eb0: 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 33 45 .....[..U2CS.U3E 3ec0: 4e 02 08 5f 50 52 57 12 06 02 0a 0c 0a 03 14 24 N.._PRW........$ 3ed0: 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c _PSW...hp.ACPW.. 3ee0: 41 43 50 57 70 0a 03 55 33 45 4e a1 07 70 00 55 ACPWp..U3EN..p.U 3ef0: 33 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 3EN.._S3D......_ 3f00: 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 34 08 S4D....[.M.USB4. 3f10: 5f 41 44 52 0c 00 00 1a 00 5b 80 55 34 43 53 02 _ADR.....[.U4CS. 3f20: 0a c4 0a 04 5b 81 0b 55 34 43 53 03 55 34 45 4e ....[..U4CS.U4EN 3f30: 02 08 5f 50 52 57 12 06 02 0a 0e 0a 03 14 24 5f .._PRW........$_ 3f40: 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c 41 PSW...hp.ACPW..A 3f50: 43 50 57 70 0a 03 55 34 45 4e a1 07 70 00 55 34 CPWp..U4EN..p.U4 3f60: 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 EN.._S3D......_S 3f70: 34 44 00 a4 0a 02 5b 82 41 06 55 53 42 35 08 5f 4D....[.A.USB5._ 3f80: 41 44 52 0c 01 00 1a 00 5b 80 55 35 43 53 02 0a ADR.....[.U5CS.. 3f90: c4 0a 04 5b 81 0b 55 35 43 53 03 55 35 45 4e 02 ...[..U5CS.U5EN. 3fa0: 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 .$_PSW...hp.ACPW 3fb0: a0 0c 41 43 50 57 70 0a 03 55 35 45 4e a1 07 70 ..ACPWp..U5EN..p 3fc0: 00 55 35 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 .U5EN.._S3D..... 3fd0: 09 5f 53 34 44 00 a4 0a 02 5b 82 4b 0a 45 48 43 ._S4D....[.K.EHC 3fe0: 31 08 5f 41 44 52 0c 07 00 1d 00 5b 80 55 37 43 1._ADR.....[.U7C 3ff0: 53 02 0a 54 0a 04 5b 81 0d 55 37 43 53 03 00 0f S..T..[..U7CS... 4000: 50 4d 45 53 01 5b 82 4f 05 48 55 42 37 08 5f 41 PMES.[.O.HUB7._A 4010: 44 52 00 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 DR.[..PRT1._ADR. 4020: 5b 82 0c 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 [..PRT2._ADR..[. 4030: 0c 50 52 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 .PRT3._ADR..[..P 4040: 52 54 34 08 5f 41 44 52 0a 04 5b 82 0c 50 52 54 RT4._ADR..[..PRT 4050: 35 08 5f 41 44 52 0a 05 5b 82 0c 50 52 54 36 08 5._ADR..[..PRT6. 4060: 5f 41 44 52 0a 06 08 5f 50 52 57 12 06 02 0a 0d _ADR..._PRW..... 4070: 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 ...._S3D......_S 4080: 34 44 00 a4 0a 02 5b 82 4f 08 45 48 43 32 08 5f 4D....[.O.EHC2._ 4090: 41 44 52 0c 07 00 1a 00 5b 80 55 46 43 53 02 0a ADR.....[.UFCS.. 40a0: 54 0a 04 5b 81 0d 55 46 43 53 03 00 0f 50 4d 45 T..[..UFCS...PME 40b0: 53 01 5b 82 43 04 48 55 42 37 08 5f 41 44 52 00 S.[.C.HUB7._ADR. 40c0: 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 5b 82 0c [..PRT1._ADR.[.. 40d0: 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 0c 50 52 PRT2._ADR..[..PR 40e0: 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 52 54 34 T3._ADR..[..PRT4 40f0: 08 5f 41 44 52 0a 04 08 5f 50 52 57 12 06 02 0a ._ADR..._PRW.... 4100: 0d 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f ....._S3D......_ 4110: 53 34 44 00 a4 0a 02 5b 82 4a 06 50 43 49 42 08 S4D....[.J.PCIB. 4120: 5f 41 44 52 0c 00 00 1e 00 14 49 05 5f 50 52 54 _ADR......I._PRT 4130: 00 a0 21 47 50 49 43 a4 12 1a 02 12 0b 04 0c ff ..!GPIC......... 4140: ff 06 00 00 00 0a 16 12 0b 04 0c ff ff 06 00 01 ................ 4150: 00 0a 17 a1 2f a4 12 2c 02 12 14 04 0c ff ff 06 ..../..,........ 4160: 00 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 47 00 12 14 ..^^.LPCBLNKG... 4170: 04 0c ff ff 06 00 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 4180: 4b 48 00 5b 82 8d 2e 01 4c 50 43 42 08 5f 41 44 KH.[....LPCB._AD 4190: 52 0c 00 00 1f 00 5b 80 4c 50 43 30 02 0a 40 0a R.....[.LPC0..@. 41a0: c0 5b 81 4d 07 4c 50 43 30 00 00 40 10 50 41 52 .[.M.LPC0..@.PAR 41b0: 43 08 50 42 52 43 08 50 43 52 43 08 50 44 52 43 C.PBRC.PCRC.PDRC 41c0: 08 00 20 50 45 52 43 08 50 46 52 43 08 50 47 52 .. PERC.PFRC.PGR 41d0: 43 08 50 48 52 43 08 00 40 0a 43 4d 41 52 03 00 C.PHRC..@.CMAR.. 41e0: 01 43 4d 42 52 03 00 01 4c 50 54 52 02 00 06 43 .CMBR...LPTR...C 41f0: 4d 41 44 01 43 4d 42 44 01 4c 50 54 44 01 46 44 MAD.CMBD.LPTD.FD 4200: 44 44 01 00 2c 49 4f 52 32 10 00 02 4c 47 52 4d DD..,IOR2...LGRM 4210: 06 00 48 32 52 41 45 4e 01 00 0d 52 43 42 41 12 ..H2RAEN...RCBA. 4220: 5b 80 53 4d 49 30 01 0c 00 fe 00 00 0c 02 00 00 [.SMI0.......... 4230: 00 5b 81 0b 53 4d 49 30 00 53 4d 49 43 08 5b 80 .[..SMI0.SMIC.[. 4240: 53 4d 49 31 00 0c bd 2e 6e bf 0c 90 00 00 00 5b SMI1....n......[ 4250: 81 16 53 4d 49 31 00 42 43 4d 44 08 44 49 44 5f ..SMI1.BCMD.DID_ 4260: 20 49 4e 46 4f 40 40 5b 81 15 53 4d 49 31 00 01 INFO@@[..SMI1.. 4270: 01 00 00 28 49 4e 46 5f 08 49 4e 46 31 20 5b 01 ...(INF_.INF1 [. 4280: 50 53 4d 58 00 14 27 50 48 53 53 01 5b 23 50 53 PSMX..'PHSS.[#PS 4290: 4d 58 ff ff 70 0a 80 42 43 4d 44 70 68 44 49 44 MX..p..BCMDphDID 42a0: 5f 70 00 53 4d 49 43 5b 27 50 53 4d 58 5b 82 41 _p.SMIC['PSMX[.A 42b0: 0a 4c 4e 4b 41 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKA._HID.A.... 42c0: 5f 55 49 44 01 14 0d 5f 44 49 53 08 70 0a 80 50 _UID..._DIS.p..P 42d0: 41 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ARC._PRS....#... 42e0: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 41 11 09 y..8_CRS..RTLA.. 42f0: 0a 06 23 00 00 18 79 00 8b 52 54 4c 41 01 49 52 ..#...y..RTLA.IR 4300: 51 30 70 00 49 52 51 30 79 01 7b 50 41 52 43 0a Q0p.IRQ0y.{PARC. 4310: 0f 00 49 52 51 30 a4 52 54 4c 41 14 1b 5f 53 52 ..IRQ0.RTLA.._SR 4320: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 4330: 60 70 60 50 41 52 43 14 18 5f 53 54 41 08 a0 0c `p`PARC.._STA... 4340: 7b 50 41 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PARC........... 4350: 5b 82 42 0a 4c 4e 4b 42 08 5f 48 49 44 0c 41 d0 [.B.LNKB._HID.A. 4360: 0c 0f 08 5f 55 49 44 0a 02 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4370: 70 0a 80 50 42 52 43 08 5f 50 52 53 11 09 0a 06 p..PBRC._PRS.... 4380: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4390: 4c 42 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LB....#...y..RTL 43a0: 42 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 B.IRQ0p.IRQ0y.{P 43b0: 42 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 42 14 BRC...IRQ0.RTLB. 43c0: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 43d0: 51 30 60 76 60 70 60 50 42 52 43 14 18 5f 53 54 Q0`v`p`PBRC.._ST 43e0: 41 08 a0 0c 7b 50 42 52 43 0a 80 00 a4 0a 09 a1 A...{PBRC....... 43f0: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 43 08 5f 48 49 ....[.B.LNKC._HI 4400: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 03 14 0d 5f D.A...._UID...._ 4410: 44 49 53 08 70 0a 80 50 43 52 43 08 5f 50 52 53 DIS.p..PCRC._PRS 4420: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 4430: 08 08 52 54 4c 43 11 09 0a 06 23 00 00 18 79 00 ..RTLC....#...y. 4440: 8b 52 54 4c 43 01 49 52 51 30 70 00 49 52 51 30 .RTLC.IRQ0p.IRQ0 4450: 79 01 7b 50 43 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PCRC...IRQ0.R 4460: 54 4c 43 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLC.._SRS..h.IRQ 4470: 30 82 49 52 51 30 60 76 60 70 60 50 43 52 43 14 0.IRQ0`v`p`PCRC. 4480: 18 5f 53 54 41 08 a0 0c 7b 50 43 52 43 0a 80 00 ._STA...{PCRC... 4490: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 44 ........[.B.LNKD 44a0: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 44b0: 04 14 0d 5f 44 49 53 08 70 0a 80 50 44 52 43 08 ..._DIS.p..PDRC. 44c0: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 44d0: 5f 43 52 53 08 08 52 54 4c 44 11 09 0a 06 23 00 _CRS..RTLD....#. 44e0: 00 18 79 00 8b 52 54 4c 44 01 49 52 51 30 70 00 ..y..RTLD.IRQ0p. 44f0: 49 52 51 30 79 01 7b 50 44 52 43 0a 0f 00 49 52 IRQ0y.{PDRC...IR 4500: 51 30 a4 52 54 4c 44 14 1b 5f 53 52 53 09 8b 68 Q0.RTLD.._SRS..h 4510: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 4520: 44 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 44 52 DRC.._STA...{PDR 4530: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a C...........[.B. 4540: 4c 4e 4b 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f LNKE._HID.A...._ 4550: 55 49 44 0a 05 14 0d 5f 44 49 53 08 70 0a 80 50 UID...._DIS.p..P 4560: 45 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ERC._PRS....#... 4570: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 45 11 09 y..8_CRS..RTLE.. 4580: 0a 06 23 00 00 18 79 00 8b 52 54 4c 45 01 49 52 ..#...y..RTLE.IR 4590: 51 30 70 00 49 52 51 30 79 01 7b 50 45 52 43 0a Q0p.IRQ0y.{PERC. 45a0: 0f 00 49 52 51 30 a4 52 54 4c 45 14 1b 5f 53 52 ..IRQ0.RTLE.._SR 45b0: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 45c0: 60 70 60 50 45 52 43 14 18 5f 53 54 41 08 a0 0c `p`PERC.._STA... 45d0: 7b 50 45 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PERC........... 45e0: 5b 82 42 0a 4c 4e 4b 46 08 5f 48 49 44 0c 41 d0 [.B.LNKF._HID.A. 45f0: 0c 0f 08 5f 55 49 44 0a 06 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4600: 70 0a 80 50 46 52 43 08 5f 50 52 53 11 09 0a 06 p..PFRC._PRS.... 4610: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4620: 4c 46 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LF....#...y..RTL 4630: 46 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 F.IRQ0p.IRQ0y.{P 4640: 46 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 46 14 FRC...IRQ0.RTLF. 4650: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 4660: 51 30 60 76 60 70 60 50 46 52 43 14 18 5f 53 54 Q0`v`p`PFRC.._ST 4670: 41 08 a0 0c 7b 50 46 52 43 0a 80 00 a4 0a 09 a1 A...{PFRC....... 4680: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 47 08 5f 48 49 ....[.B.LNKG._HI 4690: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 0d 5f D.A...._UID...._ 46a0: 44 49 53 08 70 0a 80 50 47 52 43 08 5f 50 52 53 DIS.p..PGRC._PRS 46b0: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 46c0: 08 08 52 54 4c 47 11 09 0a 06 23 00 00 18 79 00 ..RTLG....#...y. 46d0: 8b 52 54 4c 47 01 49 52 51 30 70 00 49 52 51 30 .RTLG.IRQ0p.IRQ0 46e0: 79 01 7b 50 47 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PGRC...IRQ0.R 46f0: 54 4c 47 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLG.._SRS..h.IRQ 4700: 30 82 49 52 51 30 60 76 60 70 60 50 47 52 43 14 0.IRQ0`v`p`PGRC. 4710: 18 5f 53 54 41 08 a0 0c 7b 50 47 52 43 0a 80 00 ._STA...{PGRC... 4720: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 48 ........[.B.LNKH 4730: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 4740: 08 14 0d 5f 44 49 53 08 70 0a 80 50 48 52 43 08 ..._DIS.p..PHRC. 4750: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 4760: 5f 43 52 53 08 08 52 54 4c 48 11 09 0a 06 23 00 _CRS..RTLH....#. 4770: 00 18 79 00 8b 52 54 4c 48 01 49 52 51 30 70 00 ..y..RTLH.IRQ0p. 4780: 49 52 51 30 79 01 7b 50 48 52 43 0a 0f 00 49 52 IRQ0y.{PHRC...IR 4790: 51 30 a4 52 54 4c 48 14 1b 5f 53 52 53 09 8b 68 Q0.RTLH.._SRS..h 47a0: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 47b0: 48 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 48 52 HRC.._STA...{PHR 47c0: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 3d 44 C...........[.=D 47d0: 4d 41 43 08 5f 48 49 44 0c 41 d0 02 00 08 5f 43 MAC._HID.A...._C 47e0: 52 53 11 28 0a 25 47 01 00 00 00 00 01 20 47 01 RS.(.%G...... G. 47f0: 81 00 81 00 01 11 47 01 93 00 93 00 01 0d 47 01 ......G.......G. 4800: c0 00 c0 00 01 20 2a 10 01 79 00 5b 82 26 46 57 ..... *..y.[.&FW 4810: 48 44 08 5f 48 49 44 0c 25 d4 08 00 08 5f 43 52 HD._HID.%...._CR 4820: 53 11 11 0a 0e 86 09 00 00 00 00 00 ff 00 00 00 S............... 4830: 01 79 00 5b 82 40 0b 48 50 45 54 08 5f 48 49 44 .y.[.@.HPET._HID 4840: 0c 41 d0 01 03 08 5f 43 49 44 0c 41 d0 0c 01 08 .A...._CID.A.... 4850: 42 55 46 30 11 11 0a 0e 86 09 00 00 00 00 d0 fe BUF0............ 4860: 00 04 00 00 79 00 14 27 5f 53 54 41 00 a0 13 92 ....y..'_STA.... 4870: 95 4f 53 59 53 0b d1 07 a0 08 48 50 41 45 a4 0a .OSYS.....HPAE.. 4880: 0f a1 0a a0 08 48 50 41 45 a4 0a 0b a4 00 14 46 .....HPAE......F 4890: 05 5f 43 52 53 08 a0 49 04 48 50 41 45 8a 42 55 ._CRS..I.HPAE.BU 48a0: 46 30 0a 04 48 50 54 30 a0 11 93 48 50 41 53 01 F0..HPT0...HPAS. 48b0: 70 0c 00 10 d0 fe 48 50 54 30 a0 12 93 48 50 41 p.....HPT0...HPA 48c0: 53 0a 02 70 0c 00 20 d0 fe 48 50 54 30 a0 12 93 S..p.. ..HPT0... 48d0: 48 50 41 53 0a 03 70 0c 00 30 d0 fe 48 50 54 30 HPAS..p..0..HPT0 48e0: a4 42 55 46 30 5b 82 45 0a 49 50 49 43 08 5f 48 .BUF0[.E.IPIC._H 48f0: 49 44 0b 41 d0 08 5f 43 52 53 11 41 09 0a 8d 47 ID.A.._CRS.A...G 4900: 01 20 00 20 00 01 02 47 01 24 00 24 00 01 02 47 . . ...G.$.$...G 4910: 01 28 00 28 00 01 02 47 01 2c 00 2c 00 01 02 47 .(.(...G.,.,...G 4920: 01 30 00 30 00 01 02 47 01 34 00 34 00 01 02 47 .0.0...G.4.4...G 4930: 01 38 00 38 00 01 02 47 01 3c 00 3c 00 01 02 47 .8.8...G.<.<...G 4940: 01 a0 00 a0 00 01 02 47 01 a4 00 a4 00 01 02 47 .......G.......G 4950: 01 a8 00 a8 00 01 02 47 01 ac 00 ac 00 01 02 47 .......G.......G 4960: 01 b0 00 b0 00 01 02 47 01 b4 00 b4 00 01 02 47 .......G.......G 4970: 01 b8 00 b8 00 01 02 47 01 bc 00 bc 00 01 02 47 .......G.......G 4980: 01 d0 04 d0 04 01 02 22 04 00 79 00 5b 82 25 4d ......."..y.[.%M 4990: 41 54 48 08 5f 48 49 44 0c 41 d0 0c 04 08 5f 43 ATH._HID.A...._C 49a0: 52 53 11 10 0a 0d 47 01 f0 00 f0 00 01 01 22 00 RS....G.......". 49b0: 20 79 00 5b 82 4b 09 4c 44 52 43 08 5f 48 49 44 y.[.K.LDRC._HID 49c0: 0c 41 d0 0c 02 08 5f 55 49 44 0a 02 08 5f 43 52 .A...._UID..._CR 49d0: 53 11 4e 07 0a 7a 47 01 2e 00 2e 00 01 02 47 01 S.N..zG.......G. 49e0: 4e 00 4e 00 01 02 47 01 61 00 61 00 01 01 47 01 N.N...G.a.a...G. 49f0: 63 00 63 00 01 01 47 01 65 00 65 00 01 01 47 01 c.c...G.e.e...G. 4a00: 67 00 67 00 01 01 47 01 80 00 80 00 01 01 47 01 g.g...G.......G. 4a10: 92 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 ......G.......G. 4a20: 80 06 80 06 01 20 47 01 00 08 00 08 01 10 47 01 ..... G.......G. 4a30: 00 10 00 10 01 80 47 01 80 11 80 11 01 40 47 01 ......G......@G. 4a40: 00 fe 00 fe 01 01 47 01 00 ff 00 ff 01 80 79 00 ......G.......y. 4a50: 5b 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b [.%RTC_._HID.A.. 4a60: 00 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 .._CRS....G.p.p. 4a70: 01 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f .."..y.[.-TIMR._ 4a80: 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a HID.A...._CRS... 4a90: 15 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 .G.@.@...G.P.P.. 4aa0: 04 22 01 00 79 00 5b 82 32 41 43 41 44 08 5f 48 ."..y.[.2ACAD._H 4ab0: 49 44 0d 41 43 50 49 30 30 30 33 00 08 5f 50 43 ID.ACPI0003.._PC 4ac0: 4c 12 06 01 5f 53 42 5f 14 11 5f 50 53 52 00 70 L..._SB_.._PSR.p 4ad0: 01 41 43 50 57 a4 41 43 50 57 14 1a 45 43 4f 4b .ACPW.ACPW..ECOK 4ae0: 00 a0 0f 93 5e 2e 45 43 30 5f 5a 30 30 39 01 a4 ....^.EC0_Z009.. 4af0: 01 a1 03 a4 00 5b 82 4e 6f 45 43 30 5f 08 5f 48 .....[.NoEC0_._H 4b00: 49 44 0c 41 d0 0c 09 08 5f 47 50 45 0a 1c 08 5a ID.A...._GPE...Z 4b10: 30 30 39 00 08 5f 43 52 53 11 15 0a 12 47 01 62 009.._CRS....G.b 4b20: 00 62 00 01 01 47 01 66 00 66 00 01 01 79 00 14 .b...G.f.f...y.. 4b30: 3b 5f 52 45 47 02 a0 34 93 68 0a 03 70 69 5a 30 ;_REG..4.h..piZ0 4b40: 30 39 a0 28 5b 12 5f 4f 53 49 60 70 00 42 54 44 09.([._OSI`p.BTD 4b50: 53 a0 19 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 S.._OSI.Windows 4b60: 32 30 30 36 00 70 01 42 54 44 53 5b 80 45 52 41 2006.p.BTDS[.ERA 4b70: 4d 03 00 0a ff 5b 81 4e 2e 45 52 41 4d 11 00 40 M....[.N.ERAM..@ 4b80: 30 53 4d 50 52 08 53 4d 53 54 08 53 4d 41 44 08 0SMPR.SMST.SMAD. 4b90: 53 4d 43 4d 08 53 4d 44 30 40 10 42 43 4e 54 08 SMCM.SMD0@.BCNT. 4ba0: 53 4d 41 41 18 00 40 04 43 48 47 4d 10 43 48 47 SMAA..@.CHGM.CHG 4bb0: 53 10 45 4e 49 44 08 45 4e 49 42 08 45 4e 44 44 S.ENID.ENIB.ENDD 4bc0: 08 43 48 47 56 08 43 48 47 41 10 42 41 4c 30 01 .CHGV.CHGA.BAL0. 4bd0: 42 41 4c 31 01 42 41 4c 32 01 42 41 4c 33 01 42 BAL1.BAL2.BAL3.B 4be0: 42 43 30 01 42 42 43 31 01 42 42 43 32 01 42 42 BC0.BBC1.BBC2.BB 4bf0: 43 33 01 00 08 50 48 44 44 01 49 46 44 44 01 49 C3...PHDD.IFDD.I 4c00: 4f 44 44 01 53 48 44 44 01 53 31 32 30 01 45 46 ODD.SHDD.S120.EF 4c10: 44 44 01 43 52 54 44 01 53 50 57 52 01 53 42 54 DD.CRTD.SPWR.SBT 4c20: 4e 01 56 49 44 4f 01 56 4f 4c 44 01 56 4f 4c 55 N.VIDO.VOLD.VOLU 4c30: 01 4d 55 54 45 01 43 4f 4e 54 01 42 52 47 54 01 .MUTE.CONT.BRGT. 4c40: 48 42 54 4e 01 53 34 53 54 01 53 4b 45 59 01 42 HBTN.S4ST.SKEY.B 4c50: 4b 45 59 01 54 4f 55 50 01 46 4e 42 4e 01 4c 49 KEY.TOUP.FNBN.LI 4c60: 44 46 01 44 49 47 4d 01 55 57 41 4b 01 00 08 44 DF.DIGM.UWAK...D 4c70: 4b 53 50 01 44 4b 49 4e 01 44 4b 49 44 01 44 4b KSP.DKIN.DKID.DK 4c80: 4f 4b 01 00 04 44 4b 50 57 01 00 07 42 54 4e 53 OK...DKPW...BTNS 4c90: 08 53 31 4c 44 01 53 33 4c 44 01 56 47 41 51 01 .S1LD.S3LD.VGAQ. 4ca0: 50 43 4d 51 01 50 43 4d 52 01 41 44 50 54 01 53 PCMQ.PCMR.ADPT.S 4cb0: 4c 4c 53 01 53 59 53 37 01 50 57 41 4b 01 4d 57 LLS.SYS7.PWAK.MW 4cc0: 41 4b 01 4c 57 41 4b 01 00 05 00 28 54 43 4e 4c AK.LWAK....(TCNL 4cd0: 08 54 4d 50 49 08 54 4d 53 44 08 46 41 53 4e 04 .TMPI.TMSD.FASN. 4ce0: 46 41 53 55 04 50 43 56 4c 04 00 02 53 57 54 4f FASU.PCVL...SWTO 4cf0: 01 48 57 54 4f 01 4d 4f 44 45 01 46 41 4e 53 02 .HWTO.MODE.FANS. 4d00: 49 4e 49 54 01 46 41 4e 31 01 46 41 4e 32 01 46 INIT.FAN1.FAN2.F 4d10: 41 4e 54 01 53 4b 4e 4d 01 43 54 4d 50 08 4c 49 ANT.SKNM.CTMP.LI 4d20: 44 45 01 50 4d 45 45 01 50 57 42 45 01 52 4e 47 DE.PMEE.PWBE.RNG 4d30: 45 01 42 54 57 45 01 44 43 4b 45 01 00 02 53 4b E.BTWE.DCKE...SK 4d40: 54 58 08 53 4b 54 42 08 53 4b 54 43 08 53 4b 54 TX.SKTB.SKTC.SKT 4d50: 41 08 00 08 48 41 50 4c 02 48 41 50 52 01 00 05 A...HAPL.HAPR... 4d60: 42 54 44 54 01 42 54 50 57 01 42 54 44 53 01 42 BTDT.BTPW.BTDS.B 4d70: 54 50 53 01 42 54 53 57 01 42 54 57 4b 01 42 54 TPS.BTSW.BTWK.BT 4d80: 4c 44 01 00 01 42 52 54 53 08 43 4e 54 53 08 57 LD...BRTS.CNTS.W 4d90: 4c 41 54 01 42 54 41 54 01 57 4c 45 58 01 42 54 LAT.BTAT.WLEX.BT 4da0: 45 58 01 4b 4c 53 57 01 57 4c 4f 4b 01 00 02 50 EX.KLSW.WLOK...P 4db0: 54 49 44 08 43 50 55 54 08 45 50 4b 54 08 47 48 TID.CPUT.EPKT.GH 4dc0: 49 44 08 00 04 42 4d 46 30 03 42 54 59 30 01 42 ID...BMF0.BTY0.B 4dd0: 53 54 30 08 42 52 43 30 10 42 53 4e 30 10 42 50 ST0.BRC0.BSN0.BP 4de0: 56 30 10 42 44 56 30 10 42 44 43 30 10 42 46 43 V0.BDV0.BDC0.BFC 4df0: 30 10 47 41 55 30 08 43 59 43 30 08 42 50 43 30 0.GAU0.CYC0.BPC0 4e00: 10 42 41 43 30 10 42 41 54 30 08 42 54 57 30 10 .BAC0.BAT0.BTW0. 4e10: 42 44 4e 30 08 00 40 04 00 04 42 4d 46 31 03 42 BDN0..@...BMF1.B 4e20: 54 59 31 01 42 53 54 31 08 42 52 43 31 10 42 53 TY1.BST1.BRC1.BS 4e30: 4e 31 10 42 50 56 31 10 42 44 56 31 10 42 44 43 N1.BPV1.BDV1.BDC 4e40: 31 10 42 46 43 31 10 47 41 55 31 08 43 59 43 31 1.BFC1.GAU1.CYC1 4e50: 08 42 50 43 31 10 42 41 43 31 10 42 41 54 31 08 .BPC1.BAC1.BAT1. 4e60: 42 54 57 31 10 14 37 5f 51 31 31 00 70 0a 87 50 BTW1..7_Q11.p..P 4e70: 38 30 48 a0 13 49 47 44 53 5e 5e 5e 2e 47 46 58 80H..IGDS^^^.GFX 4e80: 30 42 52 54 4e 0a 87 a1 15 86 5e 5e 5e 2f 03 50 0BRTN.....^^^/.P 4e90: 45 47 50 56 47 41 5f 4c 43 44 5f 0a 87 14 37 5f EGPVGA_LCD_...7_ 4ea0: 51 31 32 00 70 0a 86 50 38 30 48 a0 13 49 47 44 Q12.p..P80H..IGD 4eb0: 53 5e 5e 5e 2e 47 46 58 30 42 52 54 4e 0a 86 a1 S^^^.GFX0BRTN... 4ec0: 15 86 5e 5e 5e 2f 03 50 45 47 50 56 47 41 5f 4c ..^^^/.PEGPVGA_L 4ed0: 43 44 5f 0a 86 14 40 05 5f 51 31 43 00 70 0d 3d CD_...@._Q1C.p.= 4ee0: 3d 3d 3d 3d 51 55 45 52 59 5f 31 43 3d 3d 3d 3d ====QUERY_1C==== 4ef0: 3d 00 5b 31 a0 31 56 49 44 4f a0 12 49 47 44 53 =.[1.1VIDO..IGDS 4f00: 5e 5e 5e 2e 47 46 58 30 47 48 44 53 00 a1 12 5e ^^^.GFX0GHDS...^ 4f10: 5e 5e 2f 03 50 45 47 50 56 47 41 5f 44 53 53 57 ^^/.PEGPVGA_DSSW 4f20: 70 00 56 49 44 4f 14 21 5f 51 31 44 00 70 0d 3d p.VIDO.!_Q1D.p.= 4f30: 3d 3d 3d 3d 51 55 45 52 59 5f 31 44 3d 3d 3d 3d ====QUERY_1D==== 4f40: 3d 00 5b 31 50 43 4c 4b 14 21 5f 51 31 45 00 70 =.[1PCLK.!_Q1E.p 4f50: 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 31 45 3d 3d .=====QUERY_1E== 4f60: 3d 3d 3d 00 5b 31 50 43 4c 4b 14 39 5f 51 32 35 ===.[1PCLK.9_Q25 4f70: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 35 .p.=====QUERY_25 4f80: 3d 3d 3d 3d 3d 00 5b 31 5b 22 0b e8 03 86 5e 5e =====.[1["....^^ 4f90: 42 41 54 31 0a 81 5b 22 0b e8 03 86 5e 5e 42 41 BAT1..["....^^BA 4fa0: 54 31 0a 80 14 2f 5f 51 33 34 00 70 0d 3d 3d 3d T1.../_Q34.p.=== 4fb0: 3d 3d 51 55 45 52 59 5f 33 34 3d 3d 3d 3d 3d 00 ==QUERY_34=====. 4fc0: 5b 31 a0 11 42 4b 45 59 50 48 53 53 0a 71 70 00 [1..BKEYPHSS.qp. 4fd0: 42 4b 45 59 14 32 5f 51 33 37 00 70 0d 3d 3d 3d BKEY.2_Q37.p.=== 4fe0: 3d 3d 51 55 45 52 59 5f 33 37 3d 3d 3d 3d 3d 00 ==QUERY_37=====. 4ff0: 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 03 86 5e [1.ACAD..["....^ 5000: 5e 42 41 54 31 0a 80 14 32 5f 51 33 38 00 70 0d ^BAT1...2_Q38.p. 5010: 3d 3d 3d 3d 3d 51 55 45 52 59 5f 33 38 3d 3d 3d =====QUERY_38=== 5020: 3d 3d 00 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 ==.[1.ACAD..[".. 5030: 03 86 5e 5e 42 41 54 31 0a 80 14 29 5f 51 32 44 ..^^BAT1...)_Q2D 5040: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 44 .p.=====QUERY_2D 5050: 3d 3d 3d 3d 3d 00 5b 31 70 00 44 54 53 4d 54 52 =====.[1p.DTSMTR 5060: 41 50 0a 46 14 29 5f 51 32 45 00 70 0d 3d 3d 3d AP.F.)_Q2E.p.=== 5070: 3d 3d 51 55 45 52 59 5f 32 45 3d 3d 3d 3d 3d 00 ==QUERY_2E=====. 5080: 5b 31 70 01 44 54 53 4d 54 52 41 50 0a 46 5b 80 [1p.DTSMTRAP.F[. 5090: 43 43 4c 4b 01 0b 10 10 0a 04 5b 81 20 43 43 4c CCLK......[. CCL 50a0: 4b 03 00 01 44 55 54 59 03 54 48 45 4e 01 00 03 K...DUTY.THEN... 50b0: 46 54 54 5f 01 00 08 54 53 54 53 01 5b 80 45 43 FTT_...TSTS.[.EC 50c0: 52 4d 03 00 0a ff 5b 81 44 04 45 43 52 4d 11 00 RM....[.D.ECRM.. 50d0: 40 4a 45 52 49 42 10 45 52 42 44 08 00 48 0a 53 @JERIB.ERBD..H.S 50e0: 44 54 4d 08 46 53 53 4e 04 46 41 4e 55 04 50 54 DTM.FSSN.FANU.PT 50f0: 56 4c 03 00 04 54 54 48 52 01 00 48 06 50 4a 49 VL...TTHR..H.PJI 5100: 44 08 00 08 00 48 1d 52 46 52 44 10 5b 01 46 41 D....H.RFRD.[.FA 5110: 4d 58 00 14 22 46 41 4e 47 01 5b 23 46 41 4d 58 MX.."FANG.[#FAMX 5120: ff ff 70 68 45 52 49 42 70 45 52 42 44 60 5b 27 ..phERIBpERBD`[' 5130: 46 41 4d 58 a4 60 14 22 46 41 4e 57 02 5b 23 46 FAMX.`."FANW.[#F 5140: 41 4d 58 ff ff 70 68 45 52 49 42 70 69 45 52 42 AMX..phERIBpiERB 5150: 44 5b 27 46 41 4d 58 a4 69 14 09 54 55 56 52 01 D['FAMX.i..TUVR. 5160: a4 0a 03 14 2e 54 48 52 4f 01 a0 09 93 68 00 a4 .....THRO....h.. 5170: 54 48 45 4e a1 1d a0 09 93 68 01 a4 44 55 54 59 THEN.....h..DUTY 5180: a1 11 a0 0a 93 68 0a 02 a4 54 54 48 52 a1 04 a4 .....h...TTHR... 5190: 0a ff 14 2a 43 4c 43 4b 01 a0 10 93 68 00 70 00 ...*CLCK....h.p. 51a0: 54 48 45 4e 70 00 46 54 54 5f a1 0d 70 68 44 55 THENp.FTT_..phDU 51b0: 54 59 70 01 54 48 45 4e a4 54 48 45 4e 14 37 50 TYp.THEN.THEN.7P 51c0: 43 4c 4b 00 70 50 54 56 4c 60 a0 10 93 60 00 70 CLK.pPTVL`...`.p 51d0: 00 54 48 45 4e 70 00 46 54 54 5f a1 19 76 60 70 .THENp.FTT_..v`p 51e0: 80 60 00 61 7b 61 0a 07 61 70 61 44 55 54 59 70 .`.a{a..apaDUTYp 51f0: 01 54 48 45 4e 5b 82 4b 22 42 41 54 31 08 5f 48 .THEN[.K"BAT1._H 5200: 49 44 0c 41 d0 0c 0a 08 5f 55 49 44 01 08 5f 50 ID.A...._UID.._P 5210: 43 4c 12 06 01 5f 53 42 5f 14 39 5f 53 54 41 00 CL..._SB_.9_STA. 5220: a0 29 90 45 43 4f 4b 93 45 43 44 59 00 a0 13 5e .).ECOK.ECDY...^ 5230: 5e 2e 45 43 30 5f 42 41 4c 30 5b 22 0a 14 a4 0a ^.EC0_BAL0[".... 5240: 1f a1 08 5b 22 0a 14 a4 0a 0f a1 08 5b 22 0a 14 ...[".......[".. 5250: a4 0a 1f 14 48 10 5f 42 49 46 00 08 53 54 41 54 ....H._BIF..STAT 5260: 12 3a 0d 01 0b a0 0f 0b a0 0f 01 0b 5c 2b 0b a4 .:..........\+.. 5270: 01 0a 9c 0b 08 01 0b c4 0e 0d 50 41 33 34 36 35 ..........PA3465 5280: 55 20 00 0d 33 36 35 38 51 00 0d 4c 69 2d 49 6f U ..3658Q..Li-Io 5290: 6e 00 0d 43 4f 4d 50 41 4c 20 00 a0 4b 07 90 45 n..COMPAL ..K..E 52a0: 43 4f 4b 93 45 43 44 59 00 70 5e 5e 2e 45 43 30 COK.ECDY.p^^.EC0 52b0: 5f 42 44 4e 30 60 a0 23 93 60 0a 08 70 0a b4 88 _BDN0`.#.`..p... 52c0: 53 54 41 54 0a 06 00 70 0d 50 41 33 34 35 37 55 STAT...p.PA3457U 52d0: 20 00 88 53 54 41 54 0a 09 00 a0 24 93 60 0a 20 ..STAT....$.`. 52e0: 70 0b 02 01 88 53 54 41 54 0a 06 00 70 0d 50 41 p....STAT...p.PA 52f0: 33 34 35 37 55 20 00 88 53 54 41 54 0a 09 00 5b 3457U ..STAT...[ 5300: 22 0a 14 70 5e 5e 2e 45 43 30 5f 42 44 43 30 42 "..p^^.EC0_BDC0B 5310: 46 43 31 5b 22 0a 14 a1 12 70 0d 4c 69 2d 49 6f FC1["....p.Li-Io 5320: 6e 00 88 53 54 41 54 0a 0b 00 a0 2c 42 46 43 31 n..STAT....,BFC1 5330: 78 42 46 43 31 0a 64 60 61 77 61 0a 64 61 70 61 xBFC1.d`awa.dapa 5340: 42 46 43 31 70 61 88 53 54 41 54 01 00 70 61 88 BFC1pa.STAT..pa. 5350: 53 54 41 54 0a 02 00 a4 53 54 41 54 14 45 0c 5f STAT....STAT.E._ 5360: 42 53 54 00 08 50 42 53 54 12 10 04 00 0c ff ff BST..PBST....... 5370: ff ff 0c ff ff ff ff 0b 5c 2b 70 0b 5c 2b 63 a0 ........\+p.\+c. 5380: 38 90 45 43 4f 4b 93 45 43 44 59 00 5b 22 0a 14 8.ECOK.ECDY.[".. 5390: 70 5e 5e 2e 45 43 30 5f 42 53 54 30 42 53 54 31 p^^.EC0_BST0BST1 53a0: 5b 22 0a 14 70 5e 5e 2e 45 43 30 5f 47 41 55 30 ["..p^^.EC0_GAU0 53b0: 42 47 55 31 5b 22 0a 14 a0 15 42 46 43 31 77 42 BGU1["....BFC1wB 53c0: 47 55 31 42 46 43 31 62 78 62 0a 64 64 62 a1 09 GU1BFC1bxb.ddb.. 53d0: 77 42 47 55 31 0a 28 62 70 42 53 54 31 88 50 42 wBGU1.(bpBST1.PB 53e0: 53 54 00 00 70 00 88 50 42 53 54 01 00 70 62 88 ST..p..PBST..pb. 53f0: 50 42 53 54 0a 02 00 70 63 88 50 42 53 54 0a 03 PBST...pc.PBST.. 5400: 00 a0 1b 94 45 43 44 59 00 76 45 43 44 59 a0 0e ....ECDY.vECDY.. 5410: 93 45 43 44 59 00 86 42 41 54 31 0a 80 a4 50 42 .ECDY..BAT1...PB 5420: 53 54 5b 82 2e 50 53 32 4b 08 5f 48 49 44 0c 41 ST[..PS2K._HID.A 5430: d0 03 03 08 5f 43 52 53 11 19 0a 16 47 01 60 00 ...._CRS....G.`. 5440: 60 00 01 01 47 01 64 00 64 00 01 01 23 02 00 01 `...G.d.d...#... 5450: 79 00 5b 82 1e 50 53 32 4d 08 5f 48 49 44 0c 41 y.[..PS2M._HID.A 5460: d0 0f 13 08 5f 43 52 53 11 09 0a 06 23 00 10 01 ...._CRS....#... 5470: 79 00 5b 82 43 6a 50 41 54 41 08 5f 41 44 52 0c y.[.CjPATA._ADR. 5480: 01 00 1f 00 5b 80 50 41 43 53 02 0a 40 0a c0 5b ....[.PACS..@..[ 5490: 81 49 04 50 41 43 53 03 50 52 49 54 10 00 10 50 .I.PACS.PRIT...P 54a0: 53 49 54 04 00 1c 53 59 4e 43 04 00 0c 53 44 54 SIT...SYNC...SDT 54b0: 30 02 00 02 53 44 54 31 02 00 4a 04 49 43 52 30 0...SDT1..J.ICR0 54c0: 04 49 43 52 31 04 49 43 52 32 04 49 43 52 33 04 .ICR1.ICR2.ICR3. 54d0: 49 43 52 34 04 49 43 52 35 04 5b 82 4b 63 50 52 ICR4.ICR5.[.KcPR 54e0: 49 44 08 5f 41 44 52 00 14 40 17 5f 47 54 4d 00 ID._ADR..@._GTM. 54f0: 08 50 42 55 46 11 17 0a 14 00 00 00 00 00 00 00 .PBUF........... 5500: 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 50 42 ..............PB 5510: 55 46 00 50 49 4f 30 8a 50 42 55 46 0a 04 44 4d UF.PIO0.PBUF..DM 5520: 41 30 8a 50 42 55 46 0a 08 50 49 4f 31 8a 50 42 A0.PBUF..PIO1.PB 5530: 55 46 0a 0c 44 4d 41 31 8a 50 42 55 46 0a 10 46 UF..DMA1.PBUF..F 5540: 4c 41 47 70 47 45 54 50 50 52 49 54 50 49 4f 30 LAGpGETPPRITPIO0 5550: 70 47 44 4d 41 7b 53 59 4e 43 01 00 7b 49 43 52 pGDMA{SYNC..{ICR 5560: 33 01 00 7b 49 43 52 30 01 00 53 44 54 30 7b 49 3..{ICR0..SDT0{I 5570: 43 52 31 01 00 44 4d 41 30 a0 14 93 44 4d 41 30 CR1..DMA0...DMA0 5580: 0c ff ff ff ff 70 50 49 4f 30 44 4d 41 30 a0 2e .....pPIO0DMA0.. 5590: 7b 50 52 49 54 0b 00 40 00 a0 14 93 7b 50 52 49 {PRIT..@....{PRI 55a0: 54 0a 90 00 0a 80 70 0b 84 03 50 49 4f 31 a1 0e T.....p...PIO1.. 55b0: 70 47 45 54 54 50 53 49 54 50 49 4f 31 a1 0b 70 pGETTPSITPIO1..p 55c0: 0c ff ff ff ff 50 49 4f 31 70 47 44 4d 41 7b 53 .....PIO1pGDMA{S 55d0: 59 4e 43 0a 02 00 7b 49 43 52 33 0a 02 00 7b 49 YNC...{ICR3...{I 55e0: 43 52 30 0a 02 00 53 44 54 31 7b 49 43 52 31 0a CR0...SDT1{ICR1. 55f0: 02 00 44 4d 41 31 a0 14 93 44 4d 41 31 0c ff ff ..DMA1...DMA1... 5600: ff ff 70 50 49 4f 31 44 4d 41 31 70 47 45 54 46 ..pPIO1DMA1pGETF 5610: 7b 53 59 4e 43 01 00 7b 53 59 4e 43 0a 02 00 50 {SYNC..{SYNC...P 5620: 52 49 54 46 4c 41 47 a0 2c 7b 93 50 49 4f 30 0c RITFLAG.,{.PIO0. 5630: ff ff ff ff 93 44 4d 41 30 0c ff ff ff ff 00 70 .....DMA0......p 5640: 0a 78 50 49 4f 30 70 0a 14 44 4d 41 30 70 0a 03 .xPIO0p..DMA0p.. 5650: 46 4c 41 47 a4 50 42 55 46 14 4c 2a 5f 53 54 4d FLAG.PBUF.L*_STM 5660: 03 8a 68 00 50 49 4f 30 8a 68 0a 04 44 4d 41 30 ..h.PIO0.h..DMA0 5670: 8a 68 0a 08 50 49 4f 31 8a 68 0a 0c 44 4d 41 31 .h..PIO1.h..DMA1 5680: 8a 68 0a 10 46 4c 41 47 a0 41 12 93 87 69 0b 00 .h..FLAG.A...i.. 5690: 02 7b 50 52 49 54 0b f0 c0 50 52 49 54 7b 53 59 .{PRIT...PRIT{SY 56a0: 4e 43 0a 02 53 59 4e 43 70 00 53 44 54 30 7b 49 NC..SYNCp.SDT0{I 56b0: 43 52 30 0a 02 49 43 52 30 7b 49 43 52 31 0a 02 CR0..ICR0{ICR1.. 56c0: 49 43 52 31 7b 49 43 52 33 0a 02 49 43 52 33 7b ICR1{ICR3..ICR3{ 56d0: 49 43 52 35 0a 02 49 43 52 35 8b 69 0a 62 57 34 ICR5..ICR5.i.bW4 56e0: 39 30 8b 69 0a 6a 57 35 33 30 8b 69 0a 7e 57 36 90.i.jW530.i.~W6 56f0: 33 30 8b 69 0a 80 57 36 34 30 8b 69 0a b0 57 38 30.i..W640.i..W8 5700: 38 30 8b 69 0a ba 57 39 33 30 7d 50 52 49 54 0b 80.i..W930}PRIT. 5710: 04 80 50 52 49 54 a0 1e 90 7b 46 4c 41 47 0a 02 ..PRIT...{FLAG.. 5720: 00 7b 57 34 39 30 0b 00 08 00 7d 50 52 49 54 0a .{W490....}PRIT. 5730: 02 50 52 49 54 7d 50 52 49 54 53 45 54 50 50 49 .PRIT}PRITSETPPI 5740: 4f 30 57 35 33 30 57 36 34 30 50 52 49 54 a0 4b O0W530W640PRIT.K 5750: 05 7b 46 4c 41 47 01 00 7d 53 59 4e 43 01 53 59 .{FLAG..}SYNC.SY 5760: 4e 43 70 53 44 4d 41 44 4d 41 30 53 44 54 30 a0 NCpSDMADMA0SDT0. 5770: 12 95 44 4d 41 30 0a 1e 7d 49 43 52 33 01 49 43 ..DMA0..}ICR3.IC 5780: 52 33 a0 12 95 44 4d 41 30 0a 3c 7d 49 43 52 30 R3...DMA0.<}ICR0 5790: 01 49 43 52 30 a0 14 7b 57 39 33 30 0b 00 20 00 .ICR0..{W930.. . 57a0: 7d 49 43 52 31 01 49 43 52 31 a0 4b 15 93 87 6a }ICR1.ICR1.K...j 57b0: 0b 00 02 7b 50 52 49 54 0b 0f bf 50 52 49 54 70 ...{PRIT...PRITp 57c0: 00 50 53 49 54 7b 53 59 4e 43 01 53 59 4e 43 70 .PSIT{SYNC.SYNCp 57d0: 00 53 44 54 31 7b 49 43 52 30 01 49 43 52 30 7b .SDT1{ICR0.ICR0{ 57e0: 49 43 52 31 01 49 43 52 31 7b 49 43 52 33 01 49 ICR1.ICR1{ICR3.I 57f0: 43 52 33 7b 49 43 52 35 01 49 43 52 35 8b 6a 0a CR3{ICR5.ICR5.j. 5800: 62 57 34 39 31 8b 6a 0a 6a 57 35 33 31 8b 6a 0a bW491.j.jW531.j. 5810: 7e 57 36 33 31 8b 6a 0a 80 57 36 34 31 8b 6a 0a ~W631.j..W641.j. 5820: b0 57 38 38 31 8b 6a 0a ba 57 39 33 31 7d 50 52 .W881.j..W931}PR 5830: 49 54 0b 40 80 50 52 49 54 a0 1e 90 7b 46 4c 41 IT.@.PRIT...{FLA 5840: 47 0a 08 00 7b 57 34 39 31 0b 00 08 00 7d 50 52 G...{W491....}PR 5850: 49 54 0a 20 50 52 49 54 a0 4c 04 7b 46 4c 41 47 IT. PRIT.L.{FLAG 5860: 0a 10 00 7d 50 52 49 54 0b 00 40 50 52 49 54 a0 ...}PRIT..@PRIT. 5870: 13 94 50 49 4f 31 0a f0 7d 50 52 49 54 0a 80 50 ..PIO1..}PRIT..P 5880: 52 49 54 a1 21 7d 50 52 49 54 0a 10 50 52 49 54 RIT.!}PRIT..PRIT 5890: 70 53 45 54 54 50 49 4f 31 57 35 33 31 57 36 34 pSETTPIO1W531W64 58a0: 31 50 53 49 54 a0 40 06 7b 46 4c 41 47 0a 04 00 1PSIT.@.{FLAG... 58b0: 7d 53 59 4e 43 0a 02 53 59 4e 43 70 53 44 4d 41 }SYNC..SYNCpSDMA 58c0: 44 4d 41 31 53 44 54 31 a0 13 95 44 4d 41 31 0a DMA1SDT1...DMA1. 58d0: 1e 7d 49 43 52 33 0a 02 49 43 52 33 a0 13 95 44 .}ICR3..ICR3...D 58e0: 4d 41 31 0a 3c 7d 49 43 52 30 0a 02 49 43 52 30 MA1.<}ICR0..ICR0 58f0: a0 15 7b 57 39 33 31 0b 00 20 00 7d 49 43 52 31 ..{W931.. .}ICR1 5900: 0a 02 49 43 52 31 5b 82 47 10 50 5f 44 30 08 5f ..ICR1[.G.P_D0._ 5910: 41 44 52 00 14 4a 0f 5f 47 54 46 00 08 50 49 42 ADR..J._GTF..PIB 5920: 30 11 11 0a 0e 03 00 00 00 00 a0 ef 03 00 00 00 0............... 5930: 00 a0 ef 8c 50 49 42 30 01 50 4d 44 30 8c 50 49 ....PIB0.PMD0.PI 5940: 42 30 0a 08 44 4d 44 30 a0 40 06 7b 50 52 49 54 B0..DMD0.@.{PRIT 5950: 0a 02 00 a0 13 93 7b 50 52 49 54 0a 09 00 0a 08 ......{PRIT..... 5960: 70 0a 08 50 4d 44 30 a1 41 04 70 0a 0a 50 4d 44 p..PMD0.A.p..PMD 5970: 30 7a 7b 50 52 49 54 0b 00 03 00 0a 08 60 7a 7b 0z{PRIT......`z{ 5980: 50 52 49 54 0b 00 30 00 0a 0c 61 72 60 61 62 a0 PRIT..0...ar`ab. 5990: 0c 93 0a 03 62 70 0a 0b 50 4d 44 30 a0 0c 93 0a ....bp..PMD0.... 59a0: 05 62 70 0a 0c 50 4d 44 30 a1 07 70 01 50 4d 44 .bp..PMD0..p.PMD 59b0: 30 a0 43 04 7b 53 59 4e 43 01 00 70 7d 53 44 54 0.C.{SYNC..p}SDT 59c0: 30 0a 40 00 44 4d 44 30 a0 2c 7b 49 43 52 31 01 0.@.DMD0.,{ICR1. 59d0: 00 a0 13 7b 49 43 52 30 01 00 72 44 4d 44 30 0a ...{ICR0..rDMD0. 59e0: 02 44 4d 44 30 a0 0f 7b 49 43 52 33 01 00 70 0a .DMD0..{ICR3..p. 59f0: 45 44 4d 44 30 a1 14 7d 74 7b 50 4d 44 30 0a 07 EDMD0..}t{PMD0.. 5a00: 00 0a 02 00 0a 20 44 4d 44 30 a4 50 49 42 30 5b ..... DMD0.PIB0[ 5a10: 82 46 10 50 5f 44 31 08 5f 41 44 52 01 14 49 0f .F.P_D1._ADR..I. 5a20: 5f 47 54 46 00 08 50 49 42 31 11 11 0a 0e 03 00 _GTF..PIB1...... 5a30: 00 00 00 b0 ef 03 00 00 00 00 b0 ef 8c 50 49 42 .............PIB 5a40: 31 01 50 4d 44 31 8c 50 49 42 31 0a 08 44 4d 44 1.PMD1.PIB1..DMD 5a50: 31 a0 4b 05 7b 50 52 49 54 0a 20 00 a0 13 93 7b 1.K.{PRIT. ....{ 5a60: 50 52 49 54 0a 90 00 0a 80 70 0a 08 50 4d 44 31 PRIT.....p..PMD1 5a70: a1 3c 72 7b 50 53 49 54 0a 03 00 7a 7b 50 53 49 .. 0050: 80 49 ee 6a 65 26 72 1e cd bf 5f 2f 96 d6 c0 0a .I.je&r..._/.... 0060: 92 f5 06 b5 00 b2 3b 29 02 e2 4c 8d c2 f2 bc 41 ......;)..L....A 0070: 77 9c 70 f0 f3 1b 09 d2 63 5a dc a8 83 f8 5e c9 w.p.....cZ....^. 0080: 15 95 f9 fa fd dc 05 b7 4d 67 7f 2d b3 84 33 20 ........Mg.-..3 0090: e1 d1 79 2a a7 6a 77 d1 b6 20 2a 76 42 c5 d5 e9 ..y*.jw.. *vB... 00a0: b6 43 40 55 44 c3 c9 37 99 5f 41 97 70 f3 d1 f6 .C@UD..7._A.p... 00b0: 07 ec 7b 1a 29 a1 c1 f1 91 fd 48 86 6e 3e ce cb ..{.).....H.n>.. 00c0: 01 00 00 00 b6 00 00 00 00 00 02 00 4c 45 4e 4f ............LENO 00d0: 56 4f 54 50 2d 36 38 20 20 20 57 49 4e 44 4f 57 VOTP-68 WINDOW 00e0: 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 S .............. 00f0: 00 00 00 00 00 00 8a 6e 2e c9 36 e6 7f 10 8a ea .......n..6..... 0100: 14 ad d2 93 b7 6d 9b 73 ad 83 36 b8 6c a7 a7 ee .....m.s..6.l... 0110: 37 47 16 fe f3 fc cd c7 89 84 06 16 91 0b 1e 81 7G.............. 0120: 11 42 b1 35 52 57 f6 6b bb 5f a5 81 e2 ff 89 8a .B.5RW.k._...... 0130: 95 c3 4d fc e9 56 4f 4c 34 cc 99 5e 62 e1 90 8a ..M..VOL4..^b... 0140: 54 be 4a 00 5c 9b a0 86 41 46 66 9d e2 f2 e7 36 T.J.\...AFf....6 0150: 9c 33 91 27 e7 8d 5c a1 d8 f9 a4 61 8a 1c 04 07 .3.'..\....a.... 0160: e3 2a 1e 14 f1 bd 7f 4c 09 ff 19 11 a9 d4 74 ca .*.....L......t. 0170: 11 9e dc 54 39 bf ...T9. APIC @ 0xbf6dff70 0000: 41 50 49 43 68 00 00 00 01 13 50 54 4c 54 44 20 APICh.....PTLTD 0010: 09 20 41 50 49 43 20 20 00 00 04 06 20 4c 54 50 . APIC .... LTP 0020: 00 00 00 00 00 00 e0 fe 01 00 00 00 00 08 00 00 ................ 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0c 02 00 ................ 0040: 00 00 c0 fe 00 00 00 00 04 06 00 05 00 01 04 06 ................ 0050: 01 05 00 01 02 0a 00 00 02 00 00 00 05 00 02 0a ................ 0060: 00 09 09 00 00 00 0d 00 ........ SSDT @ 0xbf6d98bd 0000: 53 53 44 54 ad 02 00 00 01 59 53 61 74 61 52 65 SSDT.....YSataRe 0010: 53 61 74 61 41 68 63 69 00 10 00 00 49 4e 54 4c SataAhci....INTL 0020: 24 06 05 20 10 48 28 5c 2f 03 5f 53 42 5f 50 43 $.. .H(\/._SB_PC 0030: 49 30 53 41 54 41 5b 82 4f 0c 50 52 54 30 08 5f I0SATA[.O.PRT0._ 0040: 41 44 52 0b ff ff 14 44 0b 5f 53 44 44 01 08 47 ADR....D._SDD..G 0050: 42 55 30 11 0a 0a 07 00 00 00 00 00 a0 00 8c 47 BU0............G 0060: 42 55 30 0a 00 47 42 30 30 8c 47 42 55 30 0a 01 BU0..GB00.GBU0.. 0070: 47 42 30 31 8c 47 42 55 30 0a 02 47 42 30 32 8c GB01.GBU0..GB02. 0080: 47 42 55 30 0a 03 47 42 30 33 8c 47 42 55 30 0a GBU0..GB03.GBU0. 0090: 04 47 42 30 34 8c 47 42 55 30 0a 05 47 42 30 35 .GB04.GBU0..GB05 00a0: 8c 47 42 55 30 0a 06 47 42 30 36 a0 46 04 93 87 .GBU0..GB06.F... 00b0: 68 0b 00 02 8b 68 0a 9c 57 37 38 30 a0 1e 7b 57 h....h..W780..{W 00c0: 37 38 30 0a 08 00 70 0a 10 47 42 30 30 70 0a 03 780...p..GB00p.. 00d0: 47 42 30 31 70 0a ef 47 42 30 36 a1 16 70 0a 90 GB01p..GB06..p.. 00e0: 47 42 30 30 70 0a 03 47 42 30 31 70 0a ef 47 42 GB00p..GB01p..GB 00f0: 30 36 70 47 42 55 30 47 54 46 30 14 0b 5f 47 54 06pGBU0GTF0.._GT 0100: 46 00 a4 47 54 46 30 5b 82 41 0d 50 52 54 31 08 F..GTF0[.A.PRT1. 0110: 5f 41 44 52 0c ff ff 01 00 14 44 0b 5f 53 44 44 _ADR......D._SDD 0120: 01 08 47 42 55 31 11 0a 0a 07 00 00 00 00 00 a0 ..GBU1.......... 0130: 00 8c 47 42 55 31 0a 00 47 42 31 30 8c 47 42 55 ..GBU1..GB10.GBU 0140: 31 0a 01 47 42 31 31 8c 47 42 55 31 0a 02 47 42 1..GB11.GBU1..GB 0150: 31 32 8c 47 42 55 31 0a 03 47 42 31 33 8c 47 42 12.GBU1..GB13.GB 0160: 55 31 0a 04 47 42 31 34 8c 47 42 55 31 0a 05 47 U1..GB14.GBU1..G 0170: 42 31 35 8c 47 42 55 31 0a 06 47 42 31 36 a0 46 B15.GBU1..GB16.F 0180: 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 38 31 a0 ...h....h..W781. 0190: 1e 7b 57 37 38 31 0a 08 00 70 0a 10 47 42 31 30 .{W781...p..GB10 01a0: 70 0a 03 47 42 31 31 70 0a ef 47 42 31 36 a1 16 p..GB11p..GB16.. 01b0: 70 0a 90 47 42 31 30 70 0a 03 47 42 31 31 70 0a p..GB10p..GB11p. 01c0: ef 47 42 31 36 70 47 42 55 31 47 54 46 31 14 0b .GB16pGBU1GTF1.. 01d0: 5f 47 54 46 00 a4 47 54 46 31 5b 82 41 0d 50 52 _GTF..GTF1[.A.PR 01e0: 54 32 08 5f 41 44 52 0c ff ff 02 00 14 44 0b 5f T2._ADR......D._ 01f0: 53 44 44 01 08 47 42 55 32 11 0a 0a 07 00 00 00 SDD..GBU2....... 0200: 00 00 a0 00 8c 47 42 55 32 0a 00 47 42 32 30 8c .....GBU2..GB20. 0210: 47 42 55 32 0a 01 47 42 32 31 8c 47 42 55 32 0a GBU2..GB21.GBU2. 0220: 02 47 42 32 32 8c 47 42 55 32 0a 03 47 42 32 33 .GB22.GBU2..GB23 0230: 8c 47 42 55 32 0a 04 47 42 32 34 8c 47 42 55 32 .GBU2..GB24.GBU2 0240: 0a 05 47 42 32 35 8c 47 42 55 32 0a 06 47 42 32 ..GB25.GBU2..GB2 0250: 36 a0 46 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 6.F...h....h..W7 0260: 38 32 a0 1e 7b 57 37 38 32 0a 08 00 70 0a 10 47 82..{W782...p..G 0270: 42 32 30 70 0a 03 47 42 32 31 70 0a ef 47 42 32 B20p..GB21p..GB2 0280: 36 a1 16 70 0a 90 47 42 32 30 70 0a 03 47 42 32 6..p..GB20p..GB2 0290: 31 70 0a ef 47 42 32 36 70 47 42 55 32 47 54 46 1p..GB26pGBU2GTF 02a0: 32 14 0b 5f 47 54 46 00 a4 47 54 46 32 2.._GTF..GTF2 SSDT @ 0xbf6d981a 0000: 53 53 44 54 a3 00 00 00 01 ed 42 72 74 52 65 66 SSDT......BrtRef 0010: 44 44 30 31 42 52 54 00 00 10 00 00 49 4e 54 4c DD01BRT.....INTL 0020: 24 06 05 20 10 4e 07 5c 2f 04 5f 53 42 5f 50 43 $.. .N.\/._SB_PC 0030: 49 30 47 46 58 30 44 44 30 33 14 1e 5f 42 43 4c I0GFX0DD03.._BCL 0040: 00 a4 12 16 0a 0a 46 0a 28 0a 00 0a 0a 0a 14 0a ......F.(....... 0050: 1e 0a 28 0a 32 0a 3c 0a 46 14 25 5f 42 43 4d 01 ..(.2.<.F.%_BCM. 0060: 78 68 0a 0a 60 61 70 61 5c 2f 05 5f 53 42 5f 50 xh..`apa\/._SB_P 0070: 43 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 14 CI0LPCBEC0_BRTS. 0080: 23 5f 42 51 43 00 77 5c 2f 05 5f 53 42 5f 50 43 #_BQC.w\/._SB_PC 0090: 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 0a 0a I0LPCBEC0_BRTS.. 00a0: 60 a4 60 `.` SSDT @ 0xbf6d8e10 0000: 53 53 44 54 5f 02 00 00 01 c8 50 6d 52 65 66 00 SSDT_.....PmRef. 0010: 43 70 75 30 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu0Tst..0..INTL 0020: 24 06 05 20 10 4a 23 5c 2e 5f 50 52 5f 43 50 55 $.. .J#\._PR_CPU 0030: 30 08 5f 54 50 43 0a 00 14 4d 06 5f 50 54 43 00 0._TPC...M._PTC. 0040: a0 37 7b 50 44 43 30 0a 04 00 a4 12 2c 02 11 14 .7{PDC0.....,... 0050: 0a 11 82 0c 00 7f 00 00 00 00 00 00 00 00 00 00 ................ 0060: 00 79 00 11 14 0a 11 82 0c 00 7f 00 00 00 00 00 .y.............. 0070: 00 00 00 00 00 00 79 00 a4 12 2c 02 11 14 0a 11 ......y...,..... 0080: 82 0c 00 01 04 01 00 10 10 00 00 00 00 00 00 79 ...............y 0090: 00 11 14 0a 11 82 0c 00 01 04 01 00 10 10 00 00 ................ 00a0: 00 00 00 00 79 00 08 54 53 53 49 12 41 07 08 12 ....y..TSSI.A... 00b0: 0d 05 0a 64 0b e8 03 0a 00 0a 00 0a 00 12 0d 05 ...d............ 00c0: 0a 58 0b 6b 03 0a 00 0a 0f 0a 00 12 0d 05 0a 4b .X.k...........K 00d0: 0b ee 02 0a 00 0a 0e 0a 00 12 0d 05 0a 3f 0b 71 .............?.q 00e0: 02 0a 00 0a 0d 0a 00 12 0d 05 0a 32 0b f4 01 0a ...........2.... 00f0: 00 0a 0c 0a 00 12 0d 05 0a 26 0b 77 01 0a 00 0a .........&.w.... 0100: 0b 0a 00 12 0c 05 0a 19 0a fa 0a 00 0a 0a 0a 00 ................ 0110: 12 0c 05 0a 0d 0a 7d 0a 00 0a 09 0a 00 08 54 53 ......}.......TS 0120: 53 4d 12 41 07 08 12 0d 05 0a 64 0b e8 03 0a 00 SM.A......d..... 0130: 0a 00 0a 00 12 0d 05 0a 58 0b 6b 03 0a 00 0a 1e ........X.k..... 0140: 0a 00 12 0d 05 0a 4b 0b ee 02 0a 00 0a 1c 0a 00 ......K......... 0150: 12 0d 05 0a 3f 0b 71 02 0a 00 0a 1a 0a 00 12 0d ....?.q......... 0160: 05 0a 32 0b f4 01 0a 00 0a 18 0a 00 12 0d 05 0a ..2............. 0170: 26 0b 77 01 0a 00 0a 16 0a 00 12 0c 05 0a 19 0a &.w............. 0180: fa 0a 00 0a 14 0a 00 12 0c 05 0a 0d 0a 7d 0a 00 .............}.. 0190: 0a 12 0a 00 08 54 53 53 46 0a 00 14 43 08 5f 54 .....TSSF...C._T 01a0: 53 53 00 a0 47 06 90 92 54 53 53 46 5b 12 5f 50 SS..G...TSSF[._P 01b0: 53 53 00 70 5f 50 53 53 60 70 87 60 61 76 61 70 SS.p_PSS`p.`avap 01c0: 83 88 83 88 60 61 00 0a 01 00 62 70 0a 00 63 a2 ....`a....bp..c. 01d0: 35 95 63 87 54 53 53 49 70 78 77 62 74 0a 08 63 5.c.TSSIpxwbt..c 01e0: 00 00 0a 08 00 00 64 70 64 88 83 88 54 53 53 49 ......dpd...TSSI 01f0: 63 00 0a 01 00 70 64 88 83 88 54 53 53 4d 63 00 c....pd...TSSMc. 0200: 0a 01 00 75 63 70 ff 54 53 53 46 a0 0e 7b 50 44 ...ucp.TSSF..{PD 0210: 43 30 0a 04 00 a4 54 53 53 4d a4 54 53 53 49 14 C0....TSSM.TSSI. 0220: 3f 5f 54 53 44 00 a0 27 90 7b 43 46 47 44 0c 00 ?_TSD..'.{CFGD.. 0230: 00 00 01 00 92 7b 50 44 43 30 0a 04 00 a4 12 0f .....{PDC0...... 0240: 01 12 0c 05 0a 05 0a 00 0a 00 0a fd 0a 02 a4 12 ................ 0250: 0f 01 12 0c 05 0a 05 0a 00 0a 00 0a fc 0a 01 ............... SSDT @ 0xbf6d8d6a 0000: 53 53 44 54 a6 00 00 00 01 6d 50 6d 52 65 66 00 SSDT.....mPmRef. 0010: 43 70 75 31 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu1Tst..0..INTL 0020: 24 06 05 20 10 41 08 5c 2e 5f 50 52 5f 43 50 55 $.. .A.\._PR_CPU 0030: 31 08 5f 54 50 43 0a 00 14 16 5f 50 54 43 00 a4 1._TPC...._PTC.. 0040: 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 54 43 14 \/._PR_CPU0_PTC. 0050: 16 5f 54 53 53 00 a4 5c 2f 03 5f 50 52 5f 43 50 ._TSS..\/._PR_CP 0060: 55 30 5f 54 53 53 14 3f 5f 54 53 44 00 a0 27 90 U0_TSS.?_TSD..'. 0070: 7b 43 46 47 44 0c 00 00 00 01 00 92 7b 50 44 43 {CFGD.......{PDC 0080: 31 0a 04 00 a4 12 0f 01 12 0c 05 0a 05 0a 00 0a 1............... 0090: 00 0a fd 0a 02 a4 12 0f 01 12 0c 05 0a 05 0a 00 ................ 00a0: 0a 01 0a fc 0a 01 ...... SSDT @ 0xbf6d8884 0000: 53 53 44 54 e6 04 00 00 01 df 50 6d 52 65 66 00 SSDT......PmRef. 0010: 43 70 75 50 6d 00 00 00 00 30 00 00 49 4e 54 4c CpuPm....0..INTL 0020: 24 06 05 20 10 45 08 5c 00 08 53 53 44 54 12 43 $.. .E.\..SSDT.C 0030: 05 0c 0d 43 50 55 30 49 53 54 20 00 0c 9e 95 6d ...CPU0IST ....m 0040: bf 0c b4 01 00 00 0d 43 50 55 31 49 53 54 20 00 .......CPU1IST . 0050: 0c 52 97 6d bf 0c c8 00 00 00 0d 43 50 55 30 43 .R.m.......CPU0C 0060: 53 54 20 00 0c 6f 90 6d bf 0c aa 04 00 00 0d 43 ST ..o.m.......C 0070: 50 55 31 43 53 54 20 00 0c 19 95 6d bf 0c 85 00 PU1CST ....m.... 0080: 00 00 08 43 46 47 44 0c f1 69 3f 11 08 5c 50 44 ...CFGD..i?..\PD 0090: 43 30 0c 00 00 00 80 08 5c 50 44 43 31 0c 00 00 C0......\PDC1... 00a0: 00 80 08 5c 53 44 54 4c 0a 00 10 4d 21 5c 2e 5f ...\SDTL...M!\._ 00b0: 50 52 5f 43 50 55 30 08 48 49 30 5f 0a 00 08 48 PR_CPU0.HI0_...H 00c0: 43 30 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a C0_...H._PDC..h. 00d0: 00 52 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 .REVS.h..SIZEp.h 00e0: 60 70 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a `pt`...a[.h.@wa. 00f0: 08 00 54 45 4d 50 08 53 54 53 30 11 07 0a 04 00 ..TEMP.STS0..... 0100: 00 00 00 73 53 54 53 30 54 45 4d 50 62 5f 4f 53 ...sSTS0TEMPb_OS 0110: 43 11 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 C......w@.).G... 0120: 70 58 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 pXq9SREVSSIZEb.I 0130: 19 5f 4f 53 43 04 8a 6b 0a 00 53 54 53 30 8a 6b ._OSC..k..STS0.k 0140: 0a 04 43 41 50 30 8a 68 0a 00 49 49 44 30 8a 68 ..CAP0.h..IID0.h 0150: 0a 04 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 ..IID1.h..IID2.h 0160: 0a 0c 49 49 44 33 08 55 49 44 30 11 13 0a 10 16 ..IID3.UID0..... 0170: a6 77 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a .w@.).G...pXq9S. 0180: 55 49 44 30 0a 00 45 49 44 30 8a 55 49 44 30 0a UID0..EID0.UID0. 0190: 04 45 49 44 31 8a 55 49 44 30 0a 08 45 49 44 32 .EID1.UID0..EID2 01a0: 8a 55 49 44 30 0a 0c 45 49 44 33 a0 32 92 90 90 .UID0..EID3.2... 01b0: 93 49 49 44 30 45 49 44 30 93 49 49 44 31 45 49 .IID0EID0.IID1EI 01c0: 44 31 90 93 49 49 44 32 45 49 44 32 93 49 49 44 D1..IID2EID2.IID 01d0: 33 45 49 44 33 70 0a 06 53 54 53 30 a4 6b a0 0f 3EID3p..STS0.k.. 01e0: 92 93 69 0a 01 70 0a 0a 53 54 53 30 a4 6b 7d 7b ..i..p..STS0.k}{ 01f0: 50 44 43 30 0c ff ff ff 7f 00 43 41 50 30 50 44 PDC0......CAP0PD 0200: 43 30 70 7b 50 44 43 30 0a ff 00 50 43 50 30 a0 C0p{PDC0...PCP0. 0210: 4c 05 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b L.{CFGD....A...{ 0220: 43 46 47 44 0c 00 00 00 01 00 93 7b 50 44 43 30 CFGD.......{PDC0 0230: 0a 09 00 0a 09 92 7b 53 44 54 4c 0a 01 00 7d 53 ......{SDTL...}S 0240: 44 54 4c 0a 01 53 44 54 4c 5b 80 49 53 54 30 00 DTL..SDTL[.IST0. 0250: 83 88 53 53 44 54 0a 01 00 83 88 53 53 44 54 0a ..SSDT.....SSDT. 0260: 02 00 5b 20 49 53 54 30 48 49 30 5f a0 49 05 7b ..[ IST0HI0_.I.{ 0270: 43 46 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 CFGD....N...{CFG 0280: 44 0c 00 00 00 01 00 7b 50 44 43 30 0a 18 00 92 D......{PDC0.... 0290: 7b 53 44 54 4c 0a 02 00 7d 53 44 54 4c 0a 02 53 {SDTL...}SDTL..S 02a0: 44 54 4c 5b 80 43 53 54 30 00 83 88 53 53 44 54 DTL[.CST0...SSDT 02b0: 0a 07 00 83 88 53 53 44 54 0a 08 00 5b 20 43 53 .....SSDT...[ CS 02c0: 54 30 48 43 30 5f a4 6b 10 4d 21 5c 2e 5f 50 52 T0HC0_.k.M!\._PR 02d0: 5f 43 50 55 31 08 48 49 31 5f 0a 00 08 48 43 31 _CPU1.HI1_...HC1 02e0: 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a 00 52 _...H._PDC..h..R 02f0: 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 60 70 EVS.h..SIZEp.h`p 0300: 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a 08 00 t`...a[.h.@wa... 0310: 54 45 4d 50 08 53 54 53 31 11 07 0a 04 00 00 00 TEMP.STS1....... 0320: 00 73 53 54 53 31 54 45 4d 50 62 5f 4f 53 43 11 .sSTS1TEMPb_OSC. 0330: 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 70 58 .....w@.).G...pX 0340: 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 19 5f q9SREVSSIZEb.I._ 0350: 4f 53 43 04 8a 6b 0a 00 53 54 53 31 8a 6b 0a 04 OSC..k..STS1.k.. 0360: 43 41 50 31 8a 68 0a 00 49 49 44 30 8a 68 0a 04 CAP1.h..IID0.h.. 0370: 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 0a 0c IID1.h..IID2.h.. 0380: 49 49 44 33 08 55 49 44 31 11 13 0a 10 16 a6 77 IID3.UID1......w 0390: 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a 55 49 @.).G...pXq9S.UI 03a0: 44 31 0a 00 45 49 44 30 8a 55 49 44 31 0a 04 45 D1..EID0.UID1..E 03b0: 49 44 31 8a 55 49 44 31 0a 08 45 49 44 32 8a 55 ID1.UID1..EID2.U 03c0: 49 44 31 0a 0c 45 49 44 33 a0 32 92 90 90 93 49 ID1..EID3.2....I 03d0: 49 44 30 45 49 44 30 93 49 49 44 31 45 49 44 31 ID0EID0.IID1EID1 03e0: 90 93 49 49 44 32 45 49 44 32 93 49 49 44 33 45 ..IID2EID2.IID3E 03f0: 49 44 33 70 0a 06 53 54 53 31 a4 6b a0 0f 92 93 ID3p..STS1.k.... 0400: 69 0a 01 70 0a 0a 53 54 53 31 a4 6b 7d 7b 50 44 i..p..STS1.k}{PD 0410: 43 31 0c ff ff ff 7f 00 43 41 50 31 50 44 43 31 C1......CAP1PDC1 0420: 70 7b 50 44 43 31 0a ff 00 50 43 50 31 a0 4c 05 p{PDC1...PCP1.L. 0430: 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b 43 46 {CFGD....A...{CF 0440: 47 44 0c 00 00 00 01 00 93 7b 50 44 43 31 0a 09 GD.......{PDC1.. 0450: 00 0a 09 92 7b 53 44 54 4c 0a 10 00 7d 53 44 54 ....{SDTL...}SDT 0460: 4c 0a 10 53 44 54 4c 5b 80 49 53 54 31 00 83 88 L..SDTL[.IST1... 0470: 53 53 44 54 0a 04 00 83 88 53 53 44 54 0a 05 00 SSDT.....SSDT... 0480: 5b 20 49 53 54 31 48 49 31 5f a0 49 05 7b 43 46 [ IST1HI1_.I.{CF 0490: 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 44 0c GD....N...{CFGD. 04a0: 00 00 00 01 00 7b 50 44 43 31 0a 18 00 92 7b 53 .....{PDC1....{S 04b0: 44 54 4c 0a 20 00 7d 53 44 54 4c 0a 20 53 44 54 DTL. .}SDTL. SDT 04c0: 4c 5b 80 43 53 54 31 00 83 88 53 53 44 54 0a 0a L[.CST1...SSDT.. 04d0: 00 83 88 53 53 44 54 0a 0b 00 5b 20 43 53 54 31 ...SSDT...[ CST1 04e0: 48 43 31 5f a4 6b HC1_.k XSDT @ 0xbf6d87f0 0000: 58 53 44 54 94 00 00 00 01 c2 4c 45 4e 4f 56 4f XSDT......LENOVO 0010: 54 50 2d 36 38 20 20 20 00 00 04 06 20 4c 54 50 TP-68 .... LTP 0020: 00 00 00 00 d2 fb 6d bf 00 00 00 00 c6 fc 6d bf ......m.......m. 0030: 00 00 00 00 2e fd 6d bf 00 00 00 00 66 fd 6d bf ......m.....f.m. 0040: 00 00 00 00 a2 fd 6d bf 00 00 00 00 d4 fd 6d bf ......m.......m. 0050: 00 00 00 00 fa fd 6d bf 00 00 00 00 70 ff 6d bf ......m.....p.m. 0060: 00 00 00 00 d8 ff 6d bf 00 00 00 00 bd 98 6d bf ......m.......m. 0070: 00 00 00 00 1a 98 6d bf 00 00 00 00 10 8e 6d bf ......m.......m. 0080: 00 00 00 00 6a 8d 6d bf 00 00 00 00 84 88 6d bf ....j.m.......m. 0090: 00 00 00 00 .... FACP @ 0xbf6dfbd2 0000: 46 41 43 50 f4 00 00 00 03 52 54 4f 53 43 50 4c FACP.....RTOSCPL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 41 4c 41 4e CRESTLNE....ALAN 0020: 01 00 00 00 c0 2f 6e bf 6a 9b 6d bf 00 02 09 00 ...../n.j.m..... 0030: b2 00 00 00 f0 f1 00 80 00 10 00 00 00 00 00 00 ................ 0040: 04 10 00 00 00 00 00 00 20 10 00 00 08 10 00 00 ........ ....... 0050: 28 10 00 00 00 00 00 00 04 02 01 04 08 00 00 85 (............... 0060: 01 00 23 00 00 00 00 00 01 03 0d 00 32 00 00 00 ..#.........2... 0070: a5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f 6e bf 00 00 00 00 6a 9b 6d bf ...../n.....j.m. 0090: 00 00 00 00 01 20 00 00 00 10 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 20 10 00 00 00 00 00 00 ........ ....... 00d0: 01 20 00 00 08 10 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 28 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (............... 00f0: 00 00 00 00 .... TCPA @ 0xbf6dfda2 0000: 54 43 50 41 32 00 00 00 01 8f 49 6e 74 65 6c 20 TCPA2.....Intel 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 4c 4f 48 52 CRESTLNE....LOHR 0020: 5a 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 Z............... 0030: 00 00 .. fwts-test/disassemble-0001/disassemble-aml-0001.log000066400000000000000000000004701465205512700220220ustar00rootroot00000000000000Disassembled DSDT to /tmp/disassemble-aml/DSDT0.dsl Disassembled SSDT to /tmp/disassemble-aml/SSDT1.dsl Disassembled SSDT to /tmp/disassemble-aml/SSDT2.dsl Disassembled SSDT to /tmp/disassemble-aml/SSDT3.dsl Disassembled SSDT to /tmp/disassemble-aml/SSDT4.dsl Disassembled SSDT to /tmp/disassemble-aml/SSDT5.dsl fwts-test/disassemble-0001/test-0001.sh000077500000000000000000000024711465205512700175760ustar00rootroot00000000000000#!/bin/bash # NAME=test-0001.sh TMPDIR=$TMP/disassemble-aml TMPLOG=$TMP/disassemble-aml.log.$$ HERE=$FWTSTESTDIR/disassemble-0001 ($FWTS fwts --disassemble-aml 2>&1 | grep "option not available") > /dev/null if [ $? -eq 0 ]; then echo SKIP: $TEST, $NAME exit 77 fi rm -rf $TMPDIR mkdir $TMPDIR $FWTS -w 80 --dumpfile=$HERE/acpidump.log --disassemble-aml=$TMPDIR - > $TMPLOG failed=0 TEST="Test --disassemble-aml output to stdout" diff $HERE/disassemble-aml-0001.log $TMPLOG >> $FAILURE_LOG if [ $? -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME failed=1 fi for I in DSDT0 SSDT1 SSDT2 SSDT3 SSDT4 SSDT5 do TEST="Test --disassemble-aml against known $I" # # Remove lines that contain a tmp file output name in disassembly # grep -v "DefinitionBlock" $TMPDIR/$I.dsl | grep -v "Disassembler version" | grep -v "Disassembly of" | grep -v "Copyright" > $TMPDIR/$I.dsl.fixed.$$ grep -v "DefinitionBlock" $HERE/$I.dsl.original | grep -v "Disassembler version" | grep -v "Disassembly of" | grep -v "Copyright" > $TMPDIR/$I.dsl.orig.fixed.$$ diff $TMPDIR/$I.dsl.fixed.$$ $TMPDIR/$I.dsl.orig.fixed.$$ if [ $? -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME failed=1 fi rm $TMPDIR/$I.dsl.fixed.$$ $TMPDIR/$I.dsl.orig.fixed.$$ done rm -rf $TMPDIR $TMPLOG exit $failed fwts-test/drtm-0001/000077500000000000000000000000001465205512700143515ustar00rootroot00000000000000fwts-test/drtm-0001/acpidump-0001.log000066400000000000000000000046731465205512700172460ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... DRTM @ 0x0000000000000000 0000: 44 52 54 4d bc 00 00 00 01 2f 49 4e 54 45 4c 20 DRTM...../INTEL 0010: 54 45 4d 50 4c 41 54 45 01 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 27 05 16 20 00 00 00 f0 00 00 00 00 00 00 00 10 '.. ............ 0030: 00 00 00 00 00 20 00 00 00 00 00 30 00 00 00 00 ..... .....0.... 0040: 00 00 00 40 00 00 00 00 00 00 00 50 00 00 00 00 ...@.......P.... 0050: 00 60 00 00 00 00 00 70 00 00 00 00 0f 00 00 00 .`.....p........ 0060: 02 00 00 00 00 00 00 a0 00 00 00 00 00 00 00 b0 ................ 0070: 00 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 ................ 0080: aa 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 ................ 0090: bb 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 ................ 00a0: cc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00b0: 00 00 00 00 00 00 00 00 00 00 00 00 ............ fwts-test/drtm-0001/acpidump-0002.log000066400000000000000000000046721465205512700172460ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... DRTM @ 0x0000000000000000 0000: 44 52 54 4d bc 00 00 00 01 72 49 4e 54 45 4c 20 DRTM.....rINTEL 0010: 54 45 4d 50 4c 41 54 45 01 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 27 05 16 20 00 00 00 f0 00 00 00 00 00 00 00 10 '.. ............ 0030: 00 00 00 00 00 20 00 00 00 00 00 30 00 00 00 00 ..... .....0.... 0040: 00 00 00 40 00 00 00 00 00 00 00 50 00 00 00 00 ...@.......P.... 0050: 00 60 00 00 00 00 00 70 00 00 00 00 00 80 00 00 .`.....p........ 0060: 02 00 00 00 00 00 00 a0 00 00 00 00 00 00 00 b0 ................ 0070: 00 00 00 00 03 00 00 00 00 01 00 00 00 00 00 04 ................ 0080: aa 00 00 00 00 00 00 00 00 02 00 00 00 00 00 08 ................ 0090: bb 00 00 00 00 00 00 00 00 03 00 00 00 00 00 40 ...............@ 00a0: cc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00b0: 00 00 00 00 00 00 00 00 00 00 00 00 ............ fwts-test/drtm-0001/drtm-0001.log000066400000000000000000000053711465205512700164060ustar00rootroot00000000000000drtm drtm: DRTM D-RTM Resources Table test. drtm ---------------------------------------------------------- drtm Test 1 of 1: DRTM D-RTM Resources Table test. drtm DRTM D-RTM Resources Table: drtm DL_Entry_Base: 0x00000000f0000000 drtm DL_Entry_Length: 0x0000000010000000 drtm DL_Entry32: 0x00002000 drtm DL_Entry64: 0x0000000030000000 drtm DLME_Exit: 0x0000000040000000 drtm Log_Area_Start: 0x0000000050000000 drtm Log_Area_Length: 0x00006000 drtm Architecture_Dependent: 0x0000000070000000 drtm DRT_Flags: 0x0000000f drtm drtm VTL_Length: 0x00000002 drtm Validated_Tables: 0x00000000a0000000 drtm Validated_Tables: 0x00000000b0000000 drtm drtm RL_Length: 0x00000003 drtm Resource Size: 0x0000000000000100 drtm Resource Type: 0x00 drtm Resource Address: 0x00000000000000aa drtm drtm Resource Size: 0x0000000000000200 drtm Resource Type: 0x00 drtm Resource Address: 0x00000000000000bb drtm drtm Resource Size: 0x0000000000000300 drtm Resource Type: 0x00 drtm Resource Address: 0x00000000000000cc drtm drtm DPS_Length: 0x00000000 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm drtm PASSED: Test 1, No issues found in DRTM table. drtm drtm ========================================================== drtm 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 drtm info only. drtm ========================================================== fwts-test/drtm-0001/drtm-0002.log000066400000000000000000000063701465205512700164070ustar00rootroot00000000000000drtm drtm: DRTM D-RTM Resources Table test. drtm ---------------------------------------------------------- drtm Test 1 of 1: DRTM D-RTM Resources Table test. drtm DRTM D-RTM Resources Table: drtm DL_Entry_Base: 0x00000000f0000000 drtm DL_Entry_Length: 0x0000000010000000 drtm DL_Entry32: 0x00002000 drtm DL_Entry64: 0x0000000030000000 drtm DLME_Exit: 0x0000000040000000 drtm Log_Area_Start: 0x0000000050000000 drtm Log_Area_Length: 0x00006000 drtm Architecture_Dependent: 0x0000000070000000 drtm DRT_Flags: 0x00008000 drtm FAILED [HIGH] DRTMReservedBitsNonZero: Test 1, DRTM drtm DRT_Flags Bits [31..4] must be zero, got 0x00008000 drtm instead drtm drtm VTL_Length: 0x00000002 drtm Validated_Tables: 0x00000000a0000000 drtm Validated_Tables: 0x00000000b0000000 drtm drtm RL_Length: 0x00000003 drtm Resource Size: 0x0000000000000100 drtm Resource Type: 0x04 drtm Resource Address: 0x00000000000000aa drtm FAILED [MEDIUM] DRTMBadResourceType: Test 1, DRTM Resource drtm Type Bits [6:2] are reserved, got 0x04 instead drtm drtm Resource Size: 0x0000000000000200 drtm Resource Type: 0x08 drtm Resource Address: 0x00000000000000bb drtm FAILED [MEDIUM] DRTMBadResourceType: Test 1, DRTM Resource drtm Type Bits [6:2] are reserved, got 0x08 instead drtm drtm Resource Size: 0x0000000000000300 drtm Resource Type: 0x40 drtm Resource Address: 0x00000000000000cc drtm FAILED [MEDIUM] DRTMBadResourceType: Test 1, DRTM Resource drtm Type Bits [6:2] are reserved, got 0x40 instead drtm drtm DPS_Length: 0x00000000 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm DLME Platform Id: 0x00 drtm drtm drtm ========================================================== drtm 0 passed, 4 failed, 0 warning, 0 aborted, 0 skipped, 0 drtm info only. drtm ========================================================== fwts-test/drtm-0001/test-0001.sh000077500000000000000000000010011465205512700162350ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against DRTM" NAME=test-0001.sh TMPLOG=$TMP/drtm.log.$$ $FWTS --show-tests | grep drtm > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/drtm-0001/acpidump-0001.log drtm - | cut -c7- | grep "^drtm" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/drtm-0001/drtm-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/drtm-0001/test-0002.sh000077500000000000000000000010111465205512700162370ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid DRTM" NAME=test-0001.sh TMPLOG=$TMP/drtm.log.$$ $FWTS --show-tests | grep drtm > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/drtm-0001/acpidump-0002.log drtm - | cut -c7- | grep "^drtm" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/drtm-0001/drtm-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/erst-0001/000077500000000000000000000000001465205512700143605ustar00rootroot00000000000000fwts-test/erst-0001/acpidump-0001.log000066400000000000000000000102261465205512700172440ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... ERST @ 0x00000000 0000: 45 52 53 54 30 02 00 00 01 f2 49 4e 54 45 4c 20 ERST0.....INTEL 0010: 53 35 35 32 30 55 52 20 01 00 00 00 49 4e 54 4c S5520UR ....INTL 0020: 01 00 00 00 30 00 00 00 00 00 00 00 10 00 00 00 ....0........... 0030: 00 03 00 00 00 40 00 04 18 30 62 bf 00 00 00 00 .....@...0b..... 0040: 02 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 0050: 01 03 00 00 00 40 00 04 18 30 62 bf 00 00 00 00 .....@...0b..... 0060: 01 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 0070: 02 03 00 00 00 40 00 04 18 30 62 bf 00 00 00 00 .....@...0b..... 0080: 03 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 0090: 03 04 01 00 00 40 00 04 18 30 62 bf 00 00 00 00 .....@...0b..... 00a0: 00 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 00b0: 04 02 00 00 00 40 00 04 30 30 62 bf 00 00 00 00 .....@..00b..... 00c0: 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 ................ 00d0: 05 03 00 00 01 08 00 01 b2 00 00 00 00 00 00 00 ................ 00e0: 9c 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 00f0: 06 01 00 00 00 40 00 04 40 30 62 bf 00 00 00 00 .....@..@0b..... 0100: 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................ 0110: 07 00 00 00 00 40 00 04 38 30 62 bf 00 00 00 00 .....@..80b..... 0120: 00 00 00 00 00 00 00 00 fe 01 00 00 00 00 00 00 ................ 0130: 08 00 00 00 00 40 00 04 70 30 62 bf 00 00 00 00 .....@..p0b..... 0140: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 0150: 09 02 00 00 00 40 00 04 20 30 62 bf 00 00 00 00 .....@.. 0b..... 0160: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 0170: 0a 00 00 00 00 40 00 04 48 30 62 bf 00 00 00 00 .....@..H0b..... 0180: 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 ................ 0190: 0b 03 00 00 00 40 00 04 18 30 62 bf 00 00 00 00 .....@...0b..... 01a0: 0f 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 01b0: 0c 00 00 00 00 40 00 04 28 30 62 bf 00 00 00 00 .....@..(0b..... 01c0: 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 ................ 01d0: 0d 00 00 00 00 40 00 04 50 30 62 bf 00 00 00 00 .....@..P0b..... 01e0: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 01f0: 0e 00 00 00 00 40 00 04 58 30 62 bf 00 00 00 00 .....@..X0b..... 0200: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 0210: 0f 00 00 00 00 40 00 04 60 30 62 bf 00 00 00 00 .....@..`0b..... 0220: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 0230: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff fwts-test/erst-0001/acpidump-0002.log000066400000000000000000000102261465205512700172450ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... ERST @ 0x00000000 0000: 45 52 53 54 30 02 00 00 01 f2 49 4e 54 45 4c 20 ERST0.....INTEL 0010: 53 35 35 32 30 55 52 20 01 00 00 00 49 4e 54 4c S5520UR ....INTL 0020: 01 00 00 00 30 00 00 00 f0 00 00 00 10 00 00 00 ....0........... 0030: 00 03 ff 00 00 40 00 05 18 30 62 bf 00 00 00 00 .....@...0b..... 0040: 02 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 0050: 01 03 00 00 00 40 00 04 18 30 62 bf 00 00 00 00 .....@...0b..... 0060: 01 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 0070: 02 13 00 00 00 40 00 04 18 30 62 bf 00 00 00 00 .....@...0b..... 0080: 03 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 0090: 03 04 01 00 00 40 00 04 18 30 62 bf 00 00 00 00 .....@...0b..... 00a0: 00 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 00b0: 04 02 00 00 00 40 00 04 30 30 62 bf 00 00 00 00 .....@..00b..... 00c0: 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 ................ 00d0: 05 03 00 00 01 08 00 01 b2 00 00 00 00 00 00 00 ................ 00e0: 9c 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 00f0: 06 01 00 00 00 40 00 04 40 30 62 bf 00 00 00 00 .....@..@0b..... 0100: 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................ 0110: 07 00 00 00 00 40 00 04 38 30 62 bf 00 00 00 00 .....@..80b..... 0120: 00 00 00 00 00 00 00 00 fe 01 00 00 00 00 00 00 ................ 0130: 08 00 00 00 00 40 00 04 70 30 62 bf 00 00 00 00 .....@..p0b..... 0140: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 0150: 09 02 00 00 00 40 00 04 20 30 62 bf 00 00 00 00 .....@.. 0b..... 0160: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 0170: 0a 00 00 00 00 40 00 04 48 30 62 bf 00 00 00 00 .....@..H0b..... 0180: 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 ................ 0190: 0b 03 00 00 00 40 00 04 18 30 62 bf 00 00 00 00 .....@...0b..... 01a0: 0f 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 01b0: 0c 00 00 00 00 40 00 04 28 30 62 bf 00 00 00 00 .....@..(0b..... 01c0: 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 ................ 01d0: 0d 00 00 00 00 40 00 04 50 30 62 bf 00 00 00 00 .....@..P0b..... 01e0: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 01f0: 0e 00 00 00 00 40 00 04 58 30 62 bf 00 00 00 00 .....@..X0b..... 0200: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 0210: 0f 00 00 00 00 40 00 04 60 30 62 bf 00 00 00 00 .....@..`0b..... 0220: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 0230: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff fwts-test/erst-0001/acpidump-0003.log000066400000000000000000000102261465205512700172460ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... ERST @ 0x00000000 0000: 45 52 53 54 30 02 00 00 01 f2 49 4e 54 45 4c 20 ERST0.....INTEL 0010: 53 35 35 32 30 55 52 20 01 00 00 00 49 4e 54 4c S5520UR ....INTL 0020: 01 00 00 00 30 00 00 00 00 00 00 00 11 00 00 00 ....0........... 0030: 00 03 00 00 00 40 00 04 18 30 62 bf 00 00 00 00 .....@...0b..... 0040: 02 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 0050: 01 03 00 00 00 40 00 04 18 30 62 bf 00 00 00 00 .....@...0b..... 0060: 01 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 0070: 02 03 00 00 00 40 00 04 18 30 62 bf 00 00 00 00 .....@...0b..... 0080: 03 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 0090: 03 04 01 00 00 40 00 04 18 30 62 bf 00 00 00 00 .....@...0b..... 00a0: 00 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 00b0: 04 02 00 00 00 40 00 04 30 30 62 bf 00 00 00 00 .....@..00b..... 00c0: 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 ................ 00d0: 05 03 00 00 01 08 00 01 b2 00 00 00 00 00 00 00 ................ 00e0: 9c 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 00f0: 06 01 00 00 00 40 00 04 40 30 62 bf 00 00 00 00 .....@..@0b..... 0100: 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................ 0110: 07 00 00 00 00 40 00 04 38 30 62 bf 00 00 00 00 .....@..80b..... 0120: 00 00 00 00 00 00 00 00 fe 01 00 00 00 00 00 00 ................ 0130: 08 00 00 00 00 40 00 04 70 30 62 bf 00 00 00 00 .....@..p0b..... 0140: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 0150: 09 02 00 00 00 40 00 04 20 30 62 bf 00 00 00 00 .....@.. 0b..... 0160: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 0170: 0a 00 00 00 00 40 00 04 48 30 62 bf 00 00 00 00 .....@..H0b..... 0180: 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 ................ 0190: 0b 03 00 00 00 40 00 04 18 30 62 bf 00 00 00 00 .....@...0b..... 01a0: 0f 00 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 ................ 01b0: 0c 00 00 00 00 40 00 04 28 30 62 bf 00 00 00 00 .....@..(0b..... 01c0: 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 ................ 01d0: 0d 00 00 00 00 40 00 04 50 30 62 bf 00 00 00 00 .....@..P0b..... 01e0: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 01f0: 0e 00 00 00 00 40 00 04 58 30 62 bf 00 00 00 00 .....@..X0b..... 0200: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 0210: 0f 00 00 00 00 40 00 04 60 30 62 bf 00 00 00 00 .....@..`0b..... 0220: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ................ 0220: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff fwts-test/erst-0001/erst-0001.log000066400000000000000000000032631465205512700164220ustar00rootroot00000000000000erst erst: ERST Error Record Serialization Table test. erst ---------------------------------------------------------- erst Test 1 of 1: ERST Error Record Serialization Table test. erst ERST Error Record Serialization Table : erst Serialization Hdr. Size: 0x00000030 erst Reserved: 0x00000000 erst Instruction Entry Count: 0x00000010 erst ERST header looks sane. erst ERST Serialization Entry 0x0 looks sane. erst ERST Serialization Entry 0x1 looks sane. erst ERST Serialization Entry 0x2 looks sane. erst ERST Serialization Entry 0x3 looks sane. erst ERST Serialization Entry 0x4 looks sane. erst ERST Serialization Entry 0x5 looks sane. erst ERST Serialization Entry 0x6 looks sane. erst ERST Serialization Entry 0x7 looks sane. erst ERST Serialization Entry 0x8 looks sane. erst ERST Serialization Entry 0x9 looks sane. erst ERST Serialization Entry 0xa looks sane. erst ERST Serialization Entry 0xb looks sane. erst ERST Serialization Entry 0xc looks sane. erst ERST Serialization Entry 0xd looks sane. erst ERST Serialization Entry 0xe looks sane. erst ERST Serialization Entry 0xf looks sane. erst PASSED: Test 1, No issues found in ERST table. erst erst ========================================================== erst 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 erst info only. erst ========================================================== fwts-test/erst-0001/erst-0002.log000066400000000000000000000043021465205512700164160ustar00rootroot00000000000000erst erst: ERST Error Record Serialization Table test. erst ---------------------------------------------------------- erst Test 1 of 1: ERST Error Record Serialization Table test. erst ERST Error Record Serialization Table : erst Serialization Hdr. Size: 0x00000030 erst Reserved: 0x000000f0 erst Instruction Entry Count: 0x00000010 erst FAILED [MEDIUM] ERSTReservedNonZero: Test 1, ERST Reserved erst field must be zero, got 0x000000f0 instead erst FAILED [HIGH] ERSTIInvalidFlag: Test 1, ERST Serialization erst Flag 0xff is an invalid value, values allowed are erst 0x00..0x01 for the WRITE_REGISTER and WRITE_REGISTER_VALUE erst instructions erst FAILED [HIGH] ERSTIInvalidGasAccessSize: Test 1, ERST erst Serialization Generic Address Access Size 0x5 is invalid, erst should be 0x00 .. 0x04 erst ERST Serialization Entry 0x1 looks sane. erst FAILED [HIGH] ERSTIInvalidInstruction: Test 1, ERST erst Serialization Instruction 0x13 is an invalid value, values erst allowed are 0x00..0x12 erst ERST Serialization Entry 0x3 looks sane. erst ERST Serialization Entry 0x4 looks sane. erst ERST Serialization Entry 0x5 looks sane. erst ERST Serialization Entry 0x6 looks sane. erst ERST Serialization Entry 0x7 looks sane. erst ERST Serialization Entry 0x8 looks sane. erst ERST Serialization Entry 0x9 looks sane. erst ERST Serialization Entry 0xa looks sane. erst ERST Serialization Entry 0xb looks sane. erst ERST Serialization Entry 0xc looks sane. erst ERST Serialization Entry 0xd looks sane. erst ERST Serialization Entry 0xe looks sane. erst ERST Serialization Entry 0xf looks sane. erst erst ========================================================== erst 0 passed, 4 failed, 0 warning, 0 aborted, 0 skipped, 0 erst info only. erst ========================================================== fwts-test/erst-0001/erst-0003.log000066400000000000000000000016121465205512700164200ustar00rootroot00000000000000erst erst: ERST Error Record Serialization Table test. erst ---------------------------------------------------------- erst Test 1 of 1: ERST Error Record Serialization Table test. erst ERST Error Record Serialization Table : erst Serialization Hdr. Size: 0x00000030 erst Reserved: 0x00000000 erst Instruction Entry Count: 0x00000011 erst FAILED [HIGH] ERSTTooManyEntries: Test 1, ERST size of 592 erst based on 17 Serialization Instruction Entries of 32 bytes erst is longer the entire table length of 576 erst erst ========================================================== erst 0 passed, 1 failed, 0 warning, 0 aborted, 0 skipped, 0 erst info only. erst ========================================================== fwts-test/erst-0001/test-0001.sh000077500000000000000000000007741465205512700162640ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against ERST" NAME=test-0001.sh TMPLOG=$TMP/erst.log.$$ $FWTS --show-tests | grep ERST > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/erst-0001/acpidump-0001.log erst - | cut -c7- | grep "^erst" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/erst-0001/erst-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/erst-0001/test-0002.sh000077500000000000000000000010041465205512700162500ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid ERST" NAME=test-0002.sh TMPLOG=$TMP/erst.log.$$ $FWTS --show-tests | grep ERST > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/erst-0001/acpidump-0002.log erst - | cut -c7- | grep "^erst" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/erst-0001/erst-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/erst-0001/test-0003.sh000077500000000000000000000010041465205512700162510ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid ERST" NAME=test-0003.sh TMPLOG=$TMP/erst.log.$$ $FWTS --show-tests | grep ERST > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/erst-0001/acpidump-0003.log erst - | cut -c7- | grep "^erst" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/erst-0001/erst-0003.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/facs-0001/000077500000000000000000000000001465205512700143175ustar00rootroot00000000000000fwts-test/facs-0001/acpidump-0001.log000066400000000000000000000006041465205512700172020ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ fwts-test/facs-0001/acpidump-0002.log000066400000000000000000000006041465205512700172030ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 ef be ad de 00 00 00 00 FACS@........... 0010: 00 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 00 ................ 0020: 01 aa 55 aa ef ef ef ef 00 00 00 00 00 00 00 00 ................ 0030: 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ fwts-test/facs-0001/facs-0001.log000066400000000000000000000030301465205512700163100ustar00rootroot00000000000000facs facs: FACS Firmware ACPI Control Structure test. facs ---------------------------------------------------------- facs Cannot find FACP. facs Test 1 of 1: FACS Firmware ACPI Control Structure test. facs FACS Firmware ACPI Control Structure: facs Signature: 'FACS' facs Length: 0x00000040 facs Hardware Signature: 0x00000000 facs Firmware Waking Vector: 0x00000000 facs Global Lock: 0x00000000 facs Flags: 0x00000000 facs X-Firmware Waking Vector: 0x0000000000000000 facs Version: 0x01 facs Reserved: 0x00000000 facs OSPM Flags: 0x00000000 facs Reserved: 0x00 0x00 0x00 0x00 facs Reserved: 0x00 0x00 0x00 0x00 facs Reserved: 0x00 0x00 0x00 0x00 facs Reserved: 0x00 0x00 0x00 0x00 facs Reserved: 0x00 0x00 0x00 0x00 facs Reserved: 0x00 0x00 0x00 0x00 facs PASSED: Test 1, No issues found in FACS table. facs facs ========================================================== facs 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 facs info only. facs ========================================================== fwts-test/facs-0001/facs-0002.log000066400000000000000000000037541465205512700163260ustar00rootroot00000000000000facs facs: FACS Firmware ACPI Control Structure test. facs ---------------------------------------------------------- facs Cannot find FACP. facs Test 1 of 1: FACS Firmware ACPI Control Structure test. facs FACS Firmware ACPI Control Structure: facs Signature: 'FACS' facs Length: 0x00000040 facs Hardware Signature: 0xdeadbeef facs Firmware Waking Vector: 0x00000000 facs Global Lock: 0x00000000 facs Flags: 0xffffffff facs X-Firmware Waking Vector: 0x0000000000000000 facs Version: 0x01 facs Reserved: 0x00aa55aa facs OSPM Flags: 0xefefefef facs Reserved: 0x00 0x00 0x00 0x00 facs Reserved: 0x00 0x00 0x00 0x00 facs Reserved: 0x00 0x00 0x01 0x00 facs Reserved: 0x00 0x00 0x00 0x00 facs Reserved: 0x00 0x00 0x00 0x00 facs Reserved: 0x00 0x00 0x00 0x00 facs FAILED [MEDIUM] FACSReservedNonZero: Test 1, FACS Reserved facs field must be zero, got 0x00aa55aa instead facs FAILED [HIGH] FACSReservedBitsNonZero: Test 1, FACS Flags facs Bits [31..2] must be zero, got 0xffffffff instead facs FAILED [HIGH] FACSReservedBitsNonZero: Test 1, FACS OSPM facs Flags Bits [31..1] must be zero, got 0xefefefef instead facs FAILED [LOW] FACSInvalidReserved1: Test 1, FACS: 2nd facs Reserved field is non-zero facs facs ========================================================== facs 0 passed, 4 failed, 0 warning, 0 aborted, 0 skipped, 0 facs info only. facs ========================================================== fwts-test/facs-0001/test-0001.sh000077500000000000000000000007741465205512700162230ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against FACS" NAME=test-0001.sh TMPLOG=$TMP/facs.log.$$ $FWTS --show-tests | grep FACS > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/facs-0001/acpidump-0001.log facs - | cut -c7- | grep "^facs" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/facs-0001/facs-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/facs-0001/test-0002.sh000077500000000000000000000010041465205512700162070ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid FACS" NAME=test-0001.sh TMPLOG=$TMP/facs.log.$$ $FWTS --show-tests | grep FACS > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/facs-0001/acpidump-0002.log facs - | cut -c7- | grep "^facs" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/facs-0001/facs-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/fpdt-0001/000077500000000000000000000000001465205512700143405ustar00rootroot00000000000000fwts-test/fpdt-0001/acpidump-0001.log000066400000000000000000000036441465205512700172320ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... FPDT @ 0x00000000 0000: 46 50 44 54 44 00 00 00 01 90 41 4C 41 53 4B 41 FPDTD.....ALASKA 0010: 41 20 4D 20 49 00 00 00 09 20 07 01 41 4D 49 20 A M I.... ..AMI 0020: 13 00 01 00 01 00 10 01 00 00 00 00 18 00 EC D9 ................ 0030: 00 00 00 00 00 00 10 01 00 00 00 00 38 00 EC D9 ............8... 0040: 00 00 00 00 .... fwts-test/fpdt-0001/acpidump-0002.log000066400000000000000000000037571465205512700172400ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... FPDT @ 0x00000000 0000: 46 50 44 54 44 00 00 00 01 90 41 4C 41 53 4B 41 FPDTD.....ALASKA 0010: 41 20 4D 20 49 00 00 00 09 20 07 01 41 4D 49 20 A M I.... ..AMI 0020: 13 00 01 00 01 00 10 01 00 00 00 00 18 00 EC D9 ................ 0030: 00 00 00 00 00 00 11 01 00 00 00 00 38 00 EC D9 ............8... 0040: 00 00 00 00 00 00 40 10 01 00 00 00 00 38 00 EC .............8.. 0050: D9 00 00 00 00 ..... fwts-test/fpdt-0001/fpdt-0001.log000066400000000000000000000024131465205512700163560ustar00rootroot00000000000000fpdt fpdt: FPDT Firmware Performance Data Table test. fpdt ---------------------------------------------------------- fpdt Test 1 of 1: FPDT Firmware Performance Data Table test. fpdt S3 Performance Table Pointer Record: fpdt Perf Rec Type: 0x0001 fpdt Rec Length: 0x10 fpdt Revision: 0x01 fpdt Reserved: 0x00000000 fpdt S3PT Pointer: 0x00000000d9ec0018 fpdt Note: currently fwts does not check S3PT validity and the fpdt associated data fpdt Firmware Basic Boot Performance Pointer Record: fpdt Perf Rec Type: 0x0000 fpdt Rec Length: 0x10 fpdt Revision: 0x01 fpdt Reserved: 0x00000000 fpdt FBPT Pointer: 0x00000000d9ec0038 fpdt Note: currently fwts does not check FBPT validity and the fpdt associated data fpdt PASSED: Test 1, No issues found in FPDT table. fpdt fpdt ========================================================== fpdt 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 fpdt info only. fpdt ========================================================== fwts-test/fpdt-0001/fpdt-0002.log000066400000000000000000000023161465205512700163610ustar00rootroot00000000000000fpdt fpdt: FPDT Firmware Performance Data Table test. fpdt ---------------------------------------------------------- fpdt Test 1 of 1: FPDT Firmware Performance Data Table test. fpdt S3 Performance Table Pointer Record: fpdt Perf Rec Type: 0x0001 fpdt Rec Length: 0x10 fpdt Revision: 0x01 fpdt Reserved: 0x00000000 fpdt S3PT Pointer: 0x00000000d9ec0018 fpdt Note: currently fwts does not check S3PT validity and the fpdt associated data fpdt FAILED [HIGH] FPDTFWBootPerfPrtRecBadLength: Test 1, FPDT fpdt Firmware Basic Boot Performance Pointer Record is 17 bytes fpdt and should be 16 bytes in size fpdt FAILED [HIGH] FPDTPerformanceRecordTypeInvalid: Test 1, fpdt FPDT Performance Record Type is 0x4000 which is a reserved fpdt type for future use only fpdt fpdt ========================================================== fpdt 0 passed, 2 failed, 0 warning, 0 aborted, 0 skipped, 0 fpdt info only. fpdt ========================================================== fwts-test/fpdt-0001/test-0001.sh000077500000000000000000000007741465205512700162440ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against FPDT" NAME=test-0001.sh TMPLOG=$TMP/fpdt.log.$$ $FWTS --show-tests | grep FPDT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/fpdt-0001/acpidump-0001.log fpdt - | cut -c7- | grep "^fpdt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/fpdt-0001/fpdt-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/fpdt-0001/test-0002.sh000077500000000000000000000007741465205512700162450ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against FPDT" NAME=test-0001.sh TMPLOG=$TMP/fpdt.log.$$ $FWTS --show-tests | grep FPDT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/fpdt-0001/acpidump-0002.log fpdt - | cut -c7- | grep "^fpdt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/fpdt-0001/fpdt-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/hest-0001/000077500000000000000000000000001465205512700143465ustar00rootroot00000000000000fwts-test/hest-0001/acpidump-0001.log000066400000000000000000000046621465205512700172410ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... HEST @ 0x00000000 0000: 48 45 53 54 bc 00 00 00 01 1c 48 50 20 20 20 20 HEST......HP 0010: 50 72 6f 4c 69 61 6e 74 01 00 00 00 d2 04 00 00 ProLiant........ 0020: 2e 16 00 00 03 00 00 00 06 00 06 00 00 00 02 00 ................ 0030: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 56 08 00 00 20 00 10 00 11 f0 17 00 c1 11 00 00 V... ........... 0050: 00 00 00 00 06 00 00 00 07 00 07 00 00 00 02 00 ................ 0060: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ 0070: 56 08 00 00 20 00 10 00 11 f0 17 00 c1 11 00 00 V... ........... 0080: 00 00 00 00 08 00 08 00 00 00 02 00 01 00 00 00 ................ 0090: 01 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 ................ 00a0: 20 00 10 00 11 f0 17 00 c1 11 00 00 00 00 00 00 ............... 00b0: 20 00 10 00 11 f0 17 00 00 00 00 00 ........... fwts-test/hest-0001/acpidump-0002.log000066400000000000000000000046621465205512700172420ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... HEST @ 0x00000000 0000: 48 45 53 54 bc 00 00 00 01 1c 48 50 20 20 20 20 HEST......HP 0010: 50 72 6f 4c 69 61 6e 74 01 00 00 00 d2 04 00 00 ProLiant........ 0020: 2e 16 00 00 03 00 00 00 06 00 06 00 00 00 07 00 ................ 0030: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 56 08 00 00 20 00 10 00 11 f0 17 00 c1 11 00 00 V... ........... 0050: 00 00 00 00 06 00 00 00 07 00 ff 00 00 00 09 00 ................ 0060: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ 0070: 56 08 00 00 20 00 10 00 11 f0 17 00 c1 11 00 00 V... ........... 0080: 00 00 00 00 08 00 08 00 00 00 0f 00 00 00 00 00 ................ 0090: 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 ................ 00a0: 20 00 10 00 11 f0 17 00 c1 11 00 00 00 00 00 00 ............... 00b0: 20 00 10 00 11 f0 17 00 00 00 00 00 ........... fwts-test/hest-0001/hest-0001.log000066400000000000000000000067201465205512700163770ustar00rootroot00000000000000hest hest: HEST Hardware Error Source Table test. hest ---------------------------------------------------------- hest Test 1 of 1: HEST Hardware Error Source Table test. hest HEST Hardware Error Source Table test hest Error Source Count: 0x00000003 hest hest HEST PCI Express Root Port AER: hest Type: 0x0006 hest Source ID: 0x0006 hest Reserved: 0x0000 hest Flags: 0x02 hest Enabled: 0x00 hest Number of Records: 0x00000001 hest Max Sections Per Record: 0x00000001 hest Bus: 0x00000000 hest Device: 0x0000 hest Function: 0x0000 hest Device Control: 0x0856 hest Reserved: 0x0000 hest Uncorrectable Mask: 0x00100020 hest Uncorrectable Severity: 0x0017f011 hest Correctable Error Mask: 0x000011c1 hest Advanced Capabilities: 0x00000000 hest Root Error Command: 0x00000006 hest hest HEST PCI Express Device AER: hest Type: 0x0007 hest Source ID: 0x0007 hest Reserved: 0x0000 hest Flags: 0x02 hest Enabled: 0x00 hest Number of Records: 0x00000001 hest Max Sections Per Record: 0x00000001 hest Bus: 0x00000000 hest Device: 0x0000 hest Function: 0x0000 hest Device Control: 0x0856 hest Uncorrectable Mask: 0x00100020 hest Uncorrectable Severity: 0x0017f011 hest Correctable Error Mask: 0x000011c1 hest Advanced Capabilities: 0x00000000 hest hest HEST PCI Express Bridge AER: hest Type: 0x0008 hest Source ID: 0x0008 hest Reserved: 0x0000 hest Flags: 0x02 hest Enabled: 0x00 hest Number of Records: 0x00000001 hest Max Sections Per Record: 0x00000001 hest Bus: 0x00000000 hest Device: 0x0000 hest Function: 0x0000 hest Device Control: 0x0006 hest Reserved: 0x0000 hest Uncorrectable Mask: 0x00100020 hest Uncorrectable Severity: 0x0017f011 hest Correctable Mask: 0x000011c1 hest Advanced Capabilities: 0x00000000 hest 2nd Uncorrectable Mask: 0x00100020 hest 2nd Uncurrectable Svrity: 0x0017f011 hest 2nd Advanced Capabilities:0x00000000 hest hest PASSED: Test 1, No issues found in HEST table. hest hest ========================================================== hest 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 hest info only. hest ========================================================== fwts-test/hest-0001/hest-0002.log000066400000000000000000000107141465205512700163760ustar00rootroot00000000000000hest hest: HEST Hardware Error Source Table test. hest ---------------------------------------------------------- hest Test 1 of 1: HEST Hardware Error Source Table test. hest HEST Hardware Error Source Table test hest Error Source Count: 0x00000003 hest hest HEST PCI Express Root Port AER: hest Type: 0x0006 hest Source ID: 0x0006 hest Reserved: 0x0000 hest Flags: 0x07 hest Enabled: 0x00 hest Number of Records: 0x00000001 hest Max Sections Per Record: 0x00000001 hest Bus: 0x00000000 hest Device: 0x0000 hest Function: 0x0000 hest Device Control: 0x0856 hest Reserved: 0x0000 hest Uncorrectable Mask: 0x00100020 hest Uncorrectable Severity: 0x0017f011 hest Correctable Error Mask: 0x000011c1 hest Advanced Capabilities: 0x00000000 hest Root Error Command: 0x00000006 hest hest FAILED [HIGH] HESTReservedBitsNonZero: Test 1, HEST PCI hest Express Root Port Flags Bits [7..2] must be zero, got 0x07 hest instead hest HEST PCI Express Device AER: hest Type: 0x0007 hest Source ID: 0x00ff hest Reserved: 0x0000 hest Flags: 0x09 hest Enabled: 0x00 hest Number of Records: 0x00000000 hest Max Sections Per Record: 0x00000001 hest Bus: 0x00000000 hest Device: 0x0000 hest Function: 0x0000 hest Device Control: 0x0856 hest Uncorrectable Mask: 0x00100020 hest Uncorrectable Severity: 0x0017f011 hest Correctable Error Mask: 0x000011c1 hest Advanced Capabilities: 0x00000000 hest hest FAILED [HIGH] HESTReservedBitsNonZero: Test 1, HEST PCI hest Express Device Flags Bits [7..2] must be zero, got 0x09 hest instead hest FAILED [HIGH] HESTInvalidRecordsToPreallocate: Test 1, hest HEST PCI Express Device Number of Records to Preallocate hest is 0x0 and must be more than zero. hest HEST PCI Express Bridge AER: hest Type: 0x0008 hest Source ID: 0x0008 hest Reserved: 0x0000 hest Flags: 0x0f hest Enabled: 0x00 hest Number of Records: 0x00000000 hest Max Sections Per Record: 0x00000000 hest Bus: 0x00000000 hest Device: 0x0000 hest Function: 0x0000 hest Device Control: 0x0006 hest Reserved: 0x0000 hest Uncorrectable Mask: 0x00100020 hest Uncorrectable Severity: 0x0017f011 hest Correctable Mask: 0x000011c1 hest Advanced Capabilities: 0x00000000 hest 2nd Uncorrectable Mask: 0x00100020 hest 2nd Uncurrectable Svrity: 0x0017f011 hest 2nd Advanced Capabilities:0x00000000 hest hest FAILED [HIGH] HESTReservedBitsNonZero: Test 1, HEST PCI hest Express Bridge Flags Bits [7..2] must be zero, got 0x0f hest instead hest FAILED [HIGH] HESTInvalidRecordsToPreallocate: Test 1, hest HEST PCI Express Bridge Number of Records to Preallocate hest is 0x0 and must be more than zero. hest FAILED [HIGH] HESTInvalidMaxSectionsPerRecord: Test 1, hest HEST PCI Express Brdige Max Sections Per Record is 0x0 and hest must be more than zero. hest hest ========================================================== hest 0 passed, 6 failed, 0 warning, 0 aborted, 0 skipped, 0 hest info only. hest ========================================================== fwts-test/hest-0001/test-0001.sh000077500000000000000000000010011465205512700162320ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against HEST" NAME=test-0001.sh TMPLOG=$TMP/hest.log.$$ $FWTS --show-tests | grep HEST > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/hest-0001/acpidump-0001.log hest - | cut -c7- | grep "^hest" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/hest-0001/hest-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/hest-0001/test-0002.sh000077500000000000000000000010111465205512700162340ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid HEST" NAME=test-0001.sh TMPLOG=$TMP/hest.log.$$ $FWTS --show-tests | grep HEST > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/hest-0001/acpidump-0002.log hest - | cut -c7- | grep "^hest" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/hest-0001/hest-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/hmat-0001/000077500000000000000000000000001465205512700143345ustar00rootroot00000000000000fwts-test/hmat-0001/acpidump-0001.log000066400000000000000000000046651465205512700172320ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... HMAT @ 0x0000000000000000 0000: 48 4d 41 54 b6 00 00 00 00 69 49 4e 54 45 4c 20 HMAT.....iINTEL 0010: 54 45 4d 50 4c 41 54 45 00 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 13 12 18 20 00 00 00 00 00 00 00 00 28 00 00 00 ... ........(... 0030: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: 01 00 00 00 40 00 00 00 0f 05 00 00 02 00 00 00 ....@........... 0060: 03 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00 ................ 0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 01 00 02 00 03 00 04 00 05 00 06 00 ................ 0090: 02 00 00 00 26 00 00 00 00 00 00 00 00 00 00 00 ....&........... 00a0: 00 00 00 00 00 00 00 00 33 22 00 00 00 00 03 00 ........3"...... 00b0: 00 00 01 00 02 00 ...... fwts-test/hmat-0001/acpidump-0002.log000066400000000000000000000046641465205512700172320ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... HMAT @ 0x0000000000000000 0000: 48 4d 41 54 b6 00 00 00 00 36 49 4e 54 45 4c 20 HMAT.....6INTEL 0010: 54 45 4d 50 4c 41 54 45 00 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 29 06 17 20 00 00 00 00 00 00 01 00 28 00 00 00 ).. ........(... 0030: 0f 00 02 00 00 00 00 00 00 00 00 00 03 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: 01 00 04 00 40 00 00 00 7f 06 05 00 02 00 00 00 ....@...?....... 0060: 03 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 ................ 0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 00 00 01 00 02 00 03 00 04 00 05 00 ................ 0090: 02 00 07 00 26 00 00 00 00 00 00 00 08 00 00 00 ....&........... 00a0: 00 00 00 00 00 00 00 00 33 23 00 00 09 00 03 00 ........3#...... 00b0: 00 00 01 00 02 00 ...... fwts-test/hmat-0001/hmat-0001.log000066400000000000000000000052121465205512700163460ustar00rootroot00000000000000hmat hmat: HMAT Heterogeneous Memory Attribute Table test. hmat ---------------------------------------------------------- hmat Test 1 of 1: Validate HMAT table. hmat HMAT Heterogeneous Memory Attribute Table: hmat Reserved: 0x00000000 hmat Memory Proximity Domain Attributes (Type 0): hmat Type: 0x0000 hmat Reserved: 0x0000 hmat Length: 0x00000028 hmat Flags: 0x0001 hmat Reserved: 0x0000 hmat Proximity Domain for Initiator: 0x00000000 hmat Proximity Domain for Memory: 0x00000000 hmat Reserved: 0x00000000 hmat Reserved: 0x0000000000000000 hmat Reserved: 0x0000000000000000 hmat hmat System Locality Latency and Bandwidth Information (Type 1): hmat Type: 0x0001 hmat Reserved: 0x0000 hmat Length: 0x00000040 hmat Flags: 0x0f hmat Data Type: 0x05 hmat Reserved: 0x0000 hmat Number of Initiator PDs: 0x00000002 hmat Number of Target PDs: 0x00000003 hmat Reserved: 0x00000000 hmat Entry Base Unit: 0x0000000000000010 hmat hmat Memory Side Cache Information (Type 2): hmat Type: 0x0002 hmat Reserved: 0x0000 hmat Length: 0x00000026 hmat Proximity Domain for Memory: 0x00000000 hmat Reserved: 0x00000000 hmat Memory Side Cache Size: 0x0000000000000000 hmat Cache Attributes: 0x00002233 hmat Reserved: 0x0000 hmat Number of SMBIOS Handles: 0x0003 hmat hmat hmat PASSED: Test 1, No issues found in HMAT table. hmat hmat ========================================================== hmat 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 hmat info only. hmat ========================================================== fwts-test/hmat-0001/hmat-0002.log000066400000000000000000000106301465205512700163470ustar00rootroot00000000000000hmat hmat: HMAT Heterogeneous Memory Attribute Table test. hmat ---------------------------------------------------------- hmat Test 1 of 1: Validate HMAT table. hmat HMAT Heterogeneous Memory Attribute Table: hmat Reserved: 0x00000000 hmat Memory Proximity Domain Attributes (Type 0): hmat Type: 0x0000 hmat Reserved: 0x0001 hmat Length: 0x00000028 hmat Flags: 0x000f hmat Reserved: 0x0002 hmat Proximity Domain for Initiator: 0x00000000 hmat Proximity Domain for Memory: 0x00000000 hmat Reserved: 0x00000003 hmat Reserved: 0x0000000000000000 hmat Reserved: 0x0000000000000000 hmat FAILED [MEDIUM] HMATReservedNonZero: Test 1, HMAT Reserved hmat field must be zero, got 0x0001 instead hmat FAILED [HIGH] HMATReservedBitsNonZero: Test 1, HMAT Flags hmat Bits [15..1] must be zero, got 0x000f instead hmat FAILED [MEDIUM] HMATReservedNonZero: Test 1, HMAT Reserved hmat field must be zero, got 0x0002 instead hmat FAILED [MEDIUM] HMATReservedNonZero: Test 1, HMAT Reserved hmat field must be zero, got 0x00000003 instead hmat hmat System Locality Latency and Bandwidth Information (Type 1): hmat Type: 0x0001 hmat Reserved: 0x0004 hmat Length: 0x00000040 hmat Flags: 0x7f hmat Data Type: 0x06 hmat Reserved: 0x0005 hmat Number of Initiator PDs: 0x00000002 hmat Number of Target PDs: 0x00000003 hmat Reserved: 0x00000006 hmat Entry Base Unit: 0x0000000000000000 hmat FAILED [MEDIUM] HMATReservedNonZero: Test 1, HMAT Reserved hmat field must be zero, got 0x0004 instead hmat FAILED [HIGH] HMATReservedBitsNonZero: Test 1, HMAT Flags hmat Bits [7..6] must be zero, got 0x7f instead hmat FAILED [CRITICAL] HMATBadFDataType: Test 1, HMAT Data Type hmat must be 0..5, got 0x06 instead hmat FAILED [MEDIUM] HMATReservedNonZero: Test 1, HMAT Reserved hmat field must be zero, got 0x0005 instead hmat FAILED [MEDIUM] HMATReservedNonZero: Test 1, HMAT Reserved hmat field must be zero, got 0x00000006 instead hmat FAILED [CRITICAL] HMATBadBaseUnit: Test 1, HMAT Type 1 hmat Entry Base Unit must be non-zero hmat hmat Memory Side Cache Information (Type 2): hmat Type: 0x0002 hmat Reserved: 0x0007 hmat Length: 0x00000026 hmat Proximity Domain for Memory: 0x00000000 hmat Reserved: 0x00000008 hmat Memory Side Cache Size: 0x0000000000000000 hmat Cache Attributes: 0x00002333 hmat Reserved: 0x0009 hmat Number of SMBIOS Handles: 0x0003 hmat FAILED [MEDIUM] HMATReservedNonZero: Test 1, HMAT Reserved hmat field must be zero, got 0x0007 instead hmat FAILED [CRITICAL] HMATBadCacheAttributeReserved: Test 1, hmat HMAT Cache Attribute reserved values are used, got hmat 0x00002333 instead hmat FAILED [MEDIUM] HMATReservedNonZero: Test 1, HMAT Reserved hmat field must be zero, got 0x00000008 instead hmat FAILED [MEDIUM] HMATReservedNonZero: Test 1, HMAT Reserved hmat field must be zero, got 0x0009 instead hmat hmat hmat hmat ========================================================== hmat 0 passed, 14 failed, 0 warning, 0 aborted, 0 skipped, 0 hmat info only. hmat ========================================================== fwts-test/hmat-0001/test-0001.sh000077500000000000000000000010011465205512700162200ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against HMAT" NAME=test-0001.sh TMPLOG=$TMP/hmat.log.$$ $FWTS --show-tests | grep hmat > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/hmat-0001/acpidump-0001.log hmat - | cut -c7- | grep "^hmat" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/hmat-0001/hmat-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/hmat-0001/test-0002.sh000077500000000000000000000010111465205512700162220ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid HMAT" NAME=test-0001.sh TMPLOG=$TMP/hmat.log.$$ $FWTS --show-tests | grep hmat > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/hmat-0001/acpidump-0002.log hmat - | cut -c7- | grep "^hmat" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/hmat-0001/hmat-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/ibft-0001/000077500000000000000000000000001465205512700143275ustar00rootroot00000000000000fwts-test/ibft-0001/acpidump-0001.log000066400000000000000000000100141465205512700172060ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... iBFT @ 0x00000000 0000: 69 42 46 54 1A 02 00 00 01 6C 49 4E 54 45 4C 20 iBFT.....lINTEL 0010: 54 45 4D 50 4C 41 54 45 00 00 00 00 00 00 00 00 TEMPLATE........ 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 01 01 12 00 00 00 00 00 48 00 98 00 00 01 38 01 ................ 0040: A0 01 00 00 00 00 00 00 02 01 4A 00 00 00 11 22 ................ 0050: 33 44 55 66 77 88 99 AA BB CC DD EE FF 00 00 01 ................ 0060: 02 02 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00 11 ................ 0070: 22 33 44 55 66 77 88 99 AA BB CC DD EE FF AA AA ................ 0080: AA AA BB BB BB BB CC CC CC CC DD DD DD DD 08 00 ................ 0090: D8 01 00 00 00 00 00 00 03 01 66 00 00 00 FF EE ................ 00a0: DD CC BB AA 99 88 77 66 55 44 33 22 11 00 18 00 ................ 00b0: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ................ 00c0: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ................ 00d0: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ................ 00e0: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ................ 00f0: 00 00 11 22 33 44 55 66 00 00 04 00 E0 01 00 00 ................ 0100: 04 01 36 00 00 00 00 11 22 33 44 55 66 77 88 99 ................ 0110: AA BB CC DD EE FF 00 00 00 00 00 00 00 00 00 00 ................ 0120: 00 00 04 00 E4 01 04 00 E8 01 04 00 EC 01 08 00 ................ 0130: F0 01 08 00 F8 01 00 00 03 01 66 00 01 00 FF EE ................ 0140: DD CC BB AA 99 88 77 66 55 44 33 22 11 00 18 00 ................ 0150: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ................ 0160: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ................ 0170: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ................ 0180: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ................ 0190: 00 00 11 22 33 44 55 66 00 00 0F 00 00 02 00 00 ................ 01a0: 04 01 36 00 01 00 00 11 22 33 44 55 66 77 88 99 ................ 01b0: AA BB CC DD EE FF 00 00 00 00 00 00 00 00 00 00 ................ 01c0: 00 00 02 00 10 02 02 00 12 02 02 00 14 02 02 00 ................ 01d0: 16 02 02 00 18 02 00 00 41 41 41 41 41 41 41 41 ........AAAAAAAA 01e0: 42 42 42 42 43 43 43 43 44 44 44 44 55 55 55 55 BBBBCCCCDDDDUUUU 01f0: 66 66 66 66 66 66 66 66 77 77 77 77 77 77 77 77 ffffffffwwwwwwww 0200: 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 EEEEEEEEEEEEEEEE 0210: 47 47 48 48 49 49 4A 4A 4B 4B GGHHIIJJKK fwts-test/ibft-0001/acpidump-0002.log000066400000000000000000000064501465205512700172200ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... iBFT @ 0x00000000 0000: 69 42 46 54 7A 01 00 00 01 6C 49 4E 54 45 4C 20 iBFT.....lINTEL 0010: 54 45 4D 50 4C 41 54 45 00 00 00 00 00 00 00 00 TEMPLATE........ 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 01 01 12 00 00 02 00 00 48 00 98 00 00 01 00 00 ................ 0040: A0 01 00 00 00 00 00 00 02 01 4A 00 00 04 11 22 ................ 0050: 33 44 55 66 77 88 99 AA BB CC DD EE FF 00 00 01 ................ 0060: 02 02 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00 11 ................ 0070: 22 33 44 55 66 77 88 99 AA BB CC DD EE FF AA AA ................ 0080: AA AA BB BB BB BB CC CC CC CC DD DD DD DD 08 00 ................ 0090: D8 01 00 00 00 00 00 00 03 01 66 00 00 08 FF EE ................ 00a0: DD CC BB AA 99 88 77 66 55 44 33 22 11 00 18 00 ................ 00b0: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ................ 00c0: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ................ 00d0: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ................ 00e0: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ................ 00f0: 00 00 11 22 33 44 55 66 00 00 04 00 E0 01 00 00 ................ 0100: 04 01 36 00 00 10 00 11 22 33 44 55 66 77 88 99 ................ 0110: AA BB CC DD EE FF 00 00 00 00 00 00 00 00 00 00 ................ 0120: 00 00 04 00 E4 01 04 00 E8 01 04 00 EC 01 08 00 ................ 0130: F0 01 08 00 F8 01 00 00 41 41 41 41 41 41 41 41 ........AAAAAAAA 0140: 42 42 42 42 43 43 43 43 44 44 44 44 55 55 55 55 BBBBCCCCDDDDUUUU 0150: 66 66 66 66 66 66 66 66 77 77 77 77 77 77 77 77 ffffffffwwwwwwww 0160: 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 EEEEEEEEEEEEEEEE 0170: 47 47 48 48 49 49 4A 4A 4B 4B GGHHIIJJKK fwts-test/ibft-0001/ibft-0001.log000066400000000000000000000147521465205512700163450ustar00rootroot00000000000000ibft ibft: iBFT iSCSI Boot Firmware Table test. ibft ---------------------------------------------------------- ibft Test 1 of 1: Validate iBFT table. ibft iSCSI Boot Firmware Table: ibft iBFT Control Structure: ibft Structure ID: 0x01 ibft Version: 0x01 ibft Length: 0x0012 ibft Index: 0x00 ibft Flags: 0x00 ibft Extensions: 0x0000 ibft Initiator Offset: 0x0048 ibft iBFT Initiator Structure: ibft Structure ID: 0x02 ibft Version: 0x01 ibft Length: 0x004a ibft Index: 0x00 ibft Flags: 0x00 ibft iSNS Server: ibft 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF 00 ibft SLP Server: ibft 00 01 02 02 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ibft Primary Radius Server: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft Secondary Radius Server: ibft AA AA AA AA BB BB BB BB CC CC CC CC DD DD DD DD ibft Initiator Name Length: 0x0008 ibft Initiator Name Offset: 0x01d8 ibft NIC 0 Offset: 0x0098 ibft iBFT NIC Structure: ibft Structure ID: 0x03 ibft Version: 0x01 ibft Length: 0x0066 ibft Index: 0x00 ibft Flags: 0x00 ibft IP Address: ibft FF EE DD CC BB AA 99 88 77 66 55 44 33 22 11 00 ibft Subnet Mask Prefix: 0x18 ibft Origin: 0x00 ibft Gateway: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft Primary DNS: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft Secondary DNS: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft DHCP: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft VLAN: 0x0000 ibft MAC Address: ibft 11 22 33 44 55 66 ibft PCI Bus/Dev/Func: 0x0000 ibft Host Name Length: 0x0004 ibft Host Name Offset: 0x01e0 ibft Target 0 Offset: 0x0100 ibft iBFT Target Structure: ibft Structure ID: 0x04 ibft Version: 0x01 ibft Length: 0x0036 ibft Index: 0x00 ibft Flags: 0x00 ibft Target IP Address: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft Target IP Socket: 0x0000 ibft Target Boot LUN: 0x0000000000000000 ibft CHAP Type: 0x00 ibft NIC Association: 0x00 ibft Target Name Length: 0x0004 ibft Target Name Offset: 0x01e4 ibft CHAP Name Length: 0x0004 ibft CHAP Name Offset: 0x01e8 ibft CHAP Secret Length: 0x0004 ibft CHAP Secret Offset: 0x01ec ibft Reverse CHAP Name Length: 0x0008 ibft Reverse CHAP Name Offset: 0x01f0 ibft Reverse CHAP Secret Length: 0x0008 ibft Reverse CHAP Secret Offset: 0x01f8 ibft NIC 1 Offset: 0x0138 ibft iBFT NIC Structure: ibft Structure ID: 0x03 ibft Version: 0x01 ibft Length: 0x0066 ibft Index: 0x01 ibft Flags: 0x00 ibft IP Address: ibft FF EE DD CC BB AA 99 88 77 66 55 44 33 22 11 00 ibft Subnet Mask Prefix: 0x18 ibft Origin: 0x00 ibft Gateway: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft Primary DNS: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft Secondary DNS: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft DHCP: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft VLAN: 0x0000 ibft MAC Address: ibft 11 22 33 44 55 66 ibft PCI Bus/Dev/Func: 0x0000 ibft Host Name Length: 0x000f ibft Host Name Offset: 0x0200 ibft Target 1 Offset: 0x01a0 ibft iBFT Target Structure: ibft Structure ID: 0x04 ibft Version: 0x01 ibft Length: 0x0036 ibft Index: 0x01 ibft Flags: 0x00 ibft Target IP Address: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft Target IP Socket: 0x0000 ibft Target Boot LUN: 0x0000000000000000 ibft CHAP Type: 0x00 ibft NIC Association: 0x00 ibft Target Name Length: 0x0002 ibft Target Name Offset: 0x0210 ibft CHAP Name Length: 0x0002 ibft CHAP Name Offset: 0x0212 ibft CHAP Secret Length: 0x0002 ibft CHAP Secret Offset: 0x0214 ibft Reverse CHAP Name Length: 0x0002 ibft Reverse CHAP Name Offset: 0x0216 ibft Reverse CHAP Secret Length: 0x0002 ibft Reverse CHAP Secret Offset: 0x0218 ibft PASSED: Test 1, No issues found in iBFT table. ibft ibft ========================================================== ibft 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 ibft info only. ibft ========================================================== fwts-test/ibft-0001/ibft-0002.log000066400000000000000000000132201465205512700163330ustar00rootroot00000000000000ibft ibft: iBFT iSCSI Boot Firmware Table test. ibft ---------------------------------------------------------- ibft Test 1 of 1: Validate iBFT table. ibft iSCSI Boot Firmware Table: ibft iBFT Control Structure: ibft Structure ID: 0x01 ibft Version: 0x01 ibft Length: 0x0012 ibft Index: 0x00 ibft Flags: 0x02 ibft FAILED [HIGH] iBAFReservedBitsNonZero: Test 1, iBAF Flags ibft Bits [7..1] must be zero, got 0x02 instead ibft Extensions: 0x0000 ibft Initiator Offset: 0x0048 ibft iBFT Initiator Structure: ibft Structure ID: 0x02 ibft Version: 0x01 ibft Length: 0x004a ibft Index: 0x00 ibft Flags: 0x04 ibft FAILED [HIGH] iBAFReservedBitsNonZero: Test 1, iBAF Flags ibft Bits [7..2] must be zero, got 0x04 instead ibft iSNS Server: ibft 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF 00 ibft SLP Server: ibft 00 01 02 02 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ibft Primary Radius Server: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft Secondary Radius Server: ibft AA AA AA AA BB BB BB BB CC CC CC CC DD DD DD DD ibft Initiator Name Length: 0x0008 ibft Initiator Name Offset: 0x01d8 ibft FAILED [HIGH] iBFTBadOffset: Test 1, iBFT initiator name ibft offset exceed table length ibft NIC 0 Offset: 0x0098 ibft iBFT NIC Structure: ibft Structure ID: 0x03 ibft Version: 0x01 ibft Length: 0x0066 ibft Index: 0x00 ibft Flags: 0x08 ibft FAILED [HIGH] iBAFReservedBitsNonZero: Test 1, iBAF Flags ibft Bits [7..3] must be zero, got 0x08 instead ibft IP Address: ibft FF EE DD CC BB AA 99 88 77 66 55 44 33 22 11 00 ibft Subnet Mask Prefix: 0x18 ibft Origin: 0x00 ibft Gateway: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft Primary DNS: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft Secondary DNS: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft DHCP: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft VLAN: 0x0000 ibft MAC Address: ibft 11 22 33 44 55 66 ibft PCI Bus/Dev/Func: 0x0000 ibft Host Name Length: 0x0004 ibft Host Name Offset: 0x01e0 ibft FAILED [HIGH] iBFTBadOffset: Test 1, iBFT host name offset ibft exceed table length ibft Target 0 Offset: 0x0100 ibft iBFT Target Structure: ibft Structure ID: 0x04 ibft Version: 0x01 ibft Length: 0x0036 ibft Index: 0x00 ibft Flags: 0x10 ibft FAILED [HIGH] iBAFReservedBitsNonZero: Test 1, iBAF Flags ibft Bits [7..4] must be zero, got 0x10 instead ibft Target IP Address: ibft 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ibft Target IP Socket: 0x0000 ibft Target Boot LUN: 0x0000000000000000 ibft CHAP Type: 0x00 ibft NIC Association: 0x00 ibft Target Name Length: 0x0004 ibft Target Name Offset: 0x01e4 ibft FAILED [HIGH] iBFTBadOffset: Test 1, iBFT target name ibft offset exceed table length ibft CHAP Name Length: 0x0004 ibft CHAP Name Offset: 0x01e8 ibft FAILED [HIGH] iBFTBadOffset: Test 1, iBFT chap name offset ibft exceed table length ibft CHAP Secret Length: 0x0004 ibft CHAP Secret Offset: 0x01ec ibft FAILED [HIGH] iBFTBadOffset: Test 1, iBFT chat secret ibft offset exceed table length ibft Reverse CHAP Name Length: 0x0008 ibft Reverse CHAP Name Offset: 0x01f0 ibft FAILED [HIGH] iBFTBadOffset: Test 1, iBFT resverse chap ibft name offset exceed table length ibft Reverse CHAP Secret Length: 0x0008 ibft Reverse CHAP Secret Offset: 0x01f8 ibft FAILED [HIGH] iBFTBadOffset: Test 1, iBFT reverse chap ibft secret offset exceed table length ibft NIC 1 Offset: 0x0000 ibft Target 1 Offset: 0x01a0 ibft FAILED [HIGH] iBFTBadStructureOffset: Test 1, iBFT Target ibft structure exceed the table length, table length 0x0000017a ibft , but got 0x000001a0 ibft ibft ========================================================== ibft 0 passed, 12 failed, 0 warning, 0 aborted, 0 skipped, 0 ibft info only. ibft ========================================================== fwts-test/ibft-0001/test-0001.sh000077500000000000000000000010011465205512700162130ustar00rootroot00000000000000#!/bin/bash # TEST="Test apci table against iBFT" NAME=test-0001.sh TMPLOG=$TMP/ibft.log.$$ $FWTS --show-tests | grep iBFT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/ibft-0001/acpidump-0001.log ibft - | cut -c7- | grep "^ibft" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/ibft-0001/ibft-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/ibft-0001/test-0002.sh000077500000000000000000000010011465205512700162140ustar00rootroot00000000000000#!/bin/bash # TEST="Test apci table against iBFT" NAME=test-0002.sh TMPLOG=$TMP/ibft.log.$$ $FWTS --show-tests | grep iBFT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/ibft-0001/acpidump-0002.log ibft - | cut -c7- | grep "^ibft" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/ibft-0001/ibft-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/iort-0001/000077500000000000000000000000001465205512700143605ustar00rootroot00000000000000fwts-test/iort-0001/acpidump-0001.log000066400000000000000000000105011465205512700172400ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... IORT @ 0x00000000 0000: 49 4f 52 54 5C 02 00 00 05 06 50 54 4c 20 20 20 IORT............ 0010: 57 48 45 41 50 54 4c 20 00 00 04 06 50 54 4c 20 ................ 0020: 01 00 00 00 07 00 00 00 30 00 00 00 00 00 00 00 ................ 0030: 00 20 00 01 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 03 00 00 00 04 03 02 01 08 07 06 05 0c 0b 0a 09 ................ 0050: 01 50 00 04 00 00 00 00 02 00 00 00 24 00 00 00 ................ 0060: 00 00 00 00 01 00 00 00 0f 00 00 03 20 54 45 53 .............TES 0070: 54 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 T............... 0080: ff ff ff ff 01 00 00 00 02 00 00 00 02 00 00 00 ................ 0090: 03 00 00 00 88 88 88 88 01 00 00 00 00 00 00 00 ................ 00a0: 02 40 00 04 00 00 00 00 01 00 00 00 28 00 00 00 ................ 00b0: 01 00 00 00 0e 00 00 03 01 00 00 00 ff ee bb c0 ................ 00c0: 08 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 ................ 00d0: 04 00 00 00 05 00 00 00 01 00 00 00 00 00 00 00 ................ 00e0: 03 a4 00 00 00 00 00 00 01 00 00 00 90 00 00 00 ................ 00f0: 00 80 90 20 c0 30 10 f0 00 00 00 20 00 00 00 00 ................ 0100: 02 00 00 00 01 00 00 00 3c 00 00 00 04 00 00 00 ................ 0110: 50 00 00 00 04 00 00 00 70 00 00 00 f0 00 00 00 ................ 0120: 01 00 00 00 f1 00 00 00 01 00 00 00 00 00 00 00 ................ 0130: 00 00 80 e0 01 00 00 00 00 00 70 d0 01 00 00 00 ................ 0140: 00 00 60 c0 01 00 00 00 00 00 50 b0 01 00 00 00 ................ 0150: c0 80 00 f0 01 00 00 00 80 80 00 f0 01 00 00 00 ................ 0160: 40 80 00 f0 01 00 00 00 00 80 00 f0 01 00 00 00 ................ 0170: 00 00 ff ff 01 00 00 00 20 30 40 50 00 00 00 00 ................ 0180: 01 00 00 00 04 58 00 04 00 00 00 00 01 00 00 00 .....X.......... 0190: 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D............... 01A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 01B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 01C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 01D0: 00 00 00 00 00 00 00 00 00 00 00 00 05 3C 00 02 .............<.. 01E0: 00 00 00 00 01 00 00 00 28 00 00 00 00 00 00 00 ........(....... 01F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0210: 00 00 00 00 01 00 00 00 06 44 00 03 00 00 00 00 .........D...... 0220: 01 00 00 00 30 00 00 00 00 00 00 00 01 00 00 00 ....0........... 0230: 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0250: 00 00 00 00 00 00 00 00 00 00 00 00 ............ fwts-test/iort-0001/acpidump-0002.log000066400000000000000000000104731465205512700172510ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... IORT @ 0x00000000 0000: 49 4f 52 54 5C 02 00 00 05 06 50 54 4c 20 20 20 IORT............ 0010: 57 48 45 41 50 54 4c 20 00 00 04 06 50 54 4c 20 ................ 0020: 01 00 00 00 07 00 00 00 30 00 00 00 00 00 00 00 ................ 0030: 00 20 00 03 00 00 00 00 80 00 00 00 e0 00 00 00 ................ 0040: 04 00 00 00 04 03 02 01 08 07 06 05 0c 0b 0a 09 ................ 0050: 01 50 00 05 00 00 00 00 03 00 00 00 24 00 00 00 ................ 0060: 00 00 00 00 04 00 00 00 0f ad de 03 20 54 45 53 .............TES 0070: 54 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 T............... 0080: ff ff ff ff 01 00 00 00 02 00 00 00 02 00 00 00 ................ 0090: 03 00 00 00 88 88 88 88 01 00 00 00 00 00 00 00 ................ 00a0: 02 40 00 50 0f 00 00 00 10 00 00 00 28 00 00 00 ................ 00b0: d1 00 00 00 fe 00 80 03 03 00 00 00 ff ee bb c0 ................ 00c0: 08 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 ................ 00d0: 04 00 00 00 05 00 00 00 01 00 00 00 00 00 00 00 ................ 00e0: 03 a4 00 a0 00 81 00 00 01 00 00 00 90 00 00 00 ................ 00f0: 00 80 90 20 c0 30 10 f0 00 00 00 20 00 00 00 00 ................ 0100: 06 00 00 00 aa 00 00 00 3c 00 00 00 04 00 00 00 ................ 0110: 50 00 00 00 05 00 00 00 70 00 00 00 f0 00 00 00 ................ 0120: 02 00 00 00 f1 00 00 00 04 00 00 00 00 00 00 00 ................ 0130: 00 00 80 e0 08 00 00 00 00 00 70 d0 10 00 00 00 ................ 0140: 00 00 60 c0 20 00 00 00 00 00 50 b0 40 00 00 00 ................ 0150: c0 80 00 f0 aa 00 00 00 80 80 00 f0 ab 00 00 00 ................ 0160: 40 80 00 f0 92 00 00 00 00 80 00 f0 04 00 00 00 ................ 0170: 00 00 ff ff ff 00 00 00 20 30 40 50 00 00 00 00 ................ 0180: 01 00 00 00 04 58 00 05 00 00 00 00 01 00 00 00 .....X.......... 0190: 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff D............... 01A0: aa bb cc dd 00 00 00 00 00 00 00 00 05 00 00 00 ................ 01B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 01C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 01D0: 00 00 00 00 00 00 00 00 00 00 00 00 05 3C 00 03 .............<.. 01E0: 00 00 00 00 01 00 00 00 28 00 00 00 00 00 00 00 ........(....... 01F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0210: 00 00 00 00 01 00 00 00 06 44 00 05 00 00 00 00 .........D...... 0220: 01 00 00 00 30 00 00 00 dd cc bb aa 01 00 00 00 ....0........... 0230: 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0240: 00 00 00 00 aa bb cc dd 00 00 00 00 00 00 00 00 ................ 0250: 00 00 00 00 00 00 00 00 00 00 00 ff ............ fwts-test/iort-0001/iort-0001.log000066400000000000000000000217671465205512700164330ustar00rootroot00000000000000iort iort: IORT IO Remapping Table test. iort ---------------------------------------------------------- iort Test 1 of 1: IORT IO Remapping Table test. iort IORT IO Remapping Table test iort Number of IORT Nodes: 0x00000007 iort IORT Node Array Offset: 0x00000030 iort Reserved: 0x00000000 iort iort IORT ITS Group Node: iort Type: 0x00 iort Length: 0x0020 iort Revision: 0x01 iort Identifier: 0x00000000 iort Number of ID mappings: 0x00000000 iort Reference to ID Array: 0x00000000 iort Number of ITSs: 0x00000003 iort GIC ITS Identifier: 0x01020304 iort GIC ITS Identifier: 0x05060708 iort GIC ITS Identifier: 0x090a0b0c iort iort IORT Named Component Node: iort Type: 0x01 iort Length: 0x0050 iort Revision: 0x04 iort Identifier: 0x00000000 iort Number of ID mappings: 0x00000002 iort Reference to ID Array: 0x00000024 iort Node Flags: 0x00000000 iort Cache Coherent Attribute: 0x00000001 iort Allocation Hints: 0x0f iort Reserved: 0x0000 iort Memory Access Flags 0x03 iort Device Memory Addr. Size: 0x20 iort Device Object Name: TEST iort ID Mapping 0 iort Input Base: 0x00000001 iort ID Count: 0x00000001 iort Output Base: 0x00000002 iort Output Reference: 0xffffffff iort Flags: 0x00000001 iort ID Mapping 1 iort Input Base: 0x00000002 iort ID Count: 0x00000002 iort Output Base: 0x00000003 iort Output Reference: 0x88888888 iort Flags: 0x00000001 iort iort IORT PCI Root Complex Node: iort Type: 0x02 iort Length: 0x0040 iort Revision: 0x04 iort Identifier: 0x00000000 iort Number of ID mappings: 0x00000001 iort Reference to ID Array: 0x00000028 iort Cache Coherent Attribute: 0x00000001 iort Allocation Hints: 0x0e iort Reserved: 0x0000 iort Memory Access Flags 0x03 iort ATS Attribute: 0x00000001 iort PCI Segment Number: 0xc0bbeeff iort Memory addr. size limit: 0x08 iort PASID capabilities: 0x0000 iort Reserved: 0x00 iort Flags: 0x00000000 iort ID Mapping 0 iort Input Base: 0x00000002 iort ID Count: 0x00000003 iort Output Base: 0x00000004 iort Output Reference: 0x00000005 iort Flags: 0x00000001 iort iort IORT SMMU node: iort Type: 0x03 iort Length: 0x00a4 iort Revision: 0x00 iort Identifier: 0x00000000 iort Number of ID mappings: 0x00000001 iort Reference to ID Array: 0x00000090 iort Base Address: 0xf01030c020908000 iort Span: 0x0000000020000000 iort Model: 0x00000002 iort Flags: 0x00000001 iort Global Intr. Offset: 0x0000003c iort Number of Context Intr.: 0x00000004 iort Context Intr. Offset: 0x00000050 iort Number of PMU Intr.: 0x00000004 iort PMU Intr. Offset: 0x00000070 iort Global Interrupt Array: iort SMMU_NSgIrpt: 0x000000f0 iort SMMU_NSgIrpt Flags: 0x00000001 iort SMMU_NSgCfgIrpt: 0x000000f1 iort SMMU_NSgCfgIrpt Flags: 0x00000001 iort Context Interrupt Array: iort GSIV: 0xe0800000 iort Interrupt Flags: 0x00000001 iort GSIV: 0xd0700000 iort Interrupt Flags: 0x00000001 iort GSIV: 0xc0600000 iort Interrupt Flags: 0x00000001 iort GSIV: 0xb0500000 iort Interrupt Flags: 0x00000001 iort PMU Interrupt Array: iort GSIV: 0xf00080c0 iort Interrupt Flags: 0x00000001 iort GSIV: 0xf0008080 iort Interrupt Flags: 0x00000001 iort GSIV: 0xf0008040 iort Interrupt Flags: 0x00000001 iort GSIV: 0xf0008000 iort Interrupt Flags: 0x00000001 iort ID Mapping 0 iort Input Base: 0xffff0000 iort ID Count: 0x00000001 iort Output Base: 0x50403020 iort Output Reference: 0x00000000 iort Flags: 0x00000001 iort iort IORT SMMUv3 node: iort Type: 0x04 iort Length: 0x0058 iort Revision: 0x04 iort Identifier: 0x00000000 iort Number of ID mappings: 0x00000001 iort Reference to ID Array: 0x00000044 iort Base Address: 0x0000000000000000 iort Flags: 0x00000000 iort Reserved: 0x00000000 iort VATOS Address: 0x0000000000000000 iort Model: 0x00000000 iort Event: 0x00000000 iort PRI: 0x00000000 iort GERR: 0x00000000 iort Sync: 0x00000000 iort Proximity Domain: 0x00000000 iort DeviceId Mapping Index: 0x00000000 iort ID Mapping 0 iort Input Base: 0x00000000 iort ID Count: 0x00000000 iort Output Base: 0x00000000 iort Output Reference: 0x00000000 iort Flags: 0x00000000 iort iort IORT PMCG node: iort Type: 0x05 iort Length: 0x003c iort Revision: 0x02 iort Identifier: 0x00000000 iort Number of ID mappings: 0x00000001 iort Reference to ID Array: 0x00000028 iort Base Address: 0x0000000000000000 iort Overflow interrupt GSIV: 0x00000000 iort Node reference: 0x00000000 iort Page 1 Base Address: 0x0000000000000000 iort ID Mapping 0 iort Input Base: 0x00000000 iort ID Count: 0x00000000 iort Output Base: 0x00000000 iort Output Reference: 0x00000000 iort Flags: 0x00000001 iort iort IORT RMR node: iort Type: 0x06 iort Length: 0x0044 iort Revision: 0x03 iort Identifier: 0x00000000 iort Number of ID mappings: 0x00000001 iort Reference to ID Array: 0x00000030 iort Flags: 0x00000000 iort Number of memory range descriptors: 0x00000001 iort Reference to memory range descriptors: 0x0000001c iort Physical Range offset: 0x0000000000000000 iort Physical Range length: 0x0000000000000000 iort Reserved: 0x00000000 iort iort PASSED: Test 1, No issues found in IORT. iort iort ========================================================== iort 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 iort info only. iort ========================================================== fwts-test/iort-0001/iort-0002.log000066400000000000000000000356251465205512700164320ustar00rootroot00000000000000iort iort: IORT IO Remapping Table test. iort ---------------------------------------------------------- iort Test 1 of 1: IORT IO Remapping Table test. iort IORT IO Remapping Table test iort Number of IORT Nodes: 0x00000007 iort IORT Node Array Offset: 0x00000030 iort Reserved: 0x00000000 iort iort IORT ITS Group Node: iort Type: 0x00 iort Length: 0x0020 iort Revision: 0x03 iort Identifier: 0x00000000 iort Number of ID mappings: 0x00000080 iort Reference to ID Array: 0x000000e0 iort Number of ITSs: 0x00000004 iort FAILED [HIGH] IORTItsIdArrayOutsideTable: Test 1, IORT ITS iort Identifier Array end is outside the IORT ACPI table. iort Either the Number of ID mappings is too large or the IORT iort table size or ITS Group Node is too small. iort FAILED [LOW] IORTNodeRevisionInvalid: Test 1, IORT Node iort Revision field is 0x03 and should be zero or one. iort FAILED [LOW] IORTNodeMappingsCountNonZero: Test 1, IORT iort Node Number of ID Mappings field is 0x000000080 and should iort be zero for this node type. iort FAILED [LOW] IORTNodeRefToIdArrayNonZero: Test 1, IORT iort Node Referenced to ID Array field is 0x0000000e0 and iort should be zero for this node type. iort iort IORT Named Component Node: iort Type: 0x01 iort Length: 0x0050 iort Revision: 0x05 iort Identifier: 0x00000000 iort Number of ID mappings: 0x00000003 iort Reference to ID Array: 0x00000024 iort Node Flags: 0x00000000 iort Cache Coherent Attribute: 0x00000004 iort Allocation Hints: 0x0f iort Reserved: 0xdead iort Memory Access Flags 0x03 iort Device Memory Addr. Size: 0x20 iort Device Object Name: TEST iort ID Mapping 0 iort Input Base: 0x00000001 iort ID Count: 0x00000001 iort Output Base: 0x00000002 iort Output Reference: 0xffffffff iort Flags: 0x00000001 iort ID Mapping 1 iort Input Base: 0x00000002 iort ID Count: 0x00000002 iort Output Base: 0x00000003 iort Output Reference: 0x88888888 iort Flags: 0x00000001 iort FAILED [LOW] IORTNodeRevisionInvalid: Test 1, IORT Node iort Revision field is 0x05 and should be less than 5. iort FAILED [HIGH] IORTCacheCoherentAttrInvalid: Test 1, IORT iort Named Component Node Coherent Attribute is 0x4 and should iort be either 0 (device is fully coherent) or 1 (device is not iort coherent). iort FAILED [MEDIUM] IORTReservedNonZero: Test 1, IORT Named iort Component Node Reserved field must be zero, got 0xdead iort instead iort FAILED [HIGH] IORTMemAttrInvalid: Test 1, IORT Named iort Component Node Memory Attributes are illegal, CCA cannot iort be 0 if CPM and DACS are 1. If the device has a coherent iort path to memory and natively outputs IWB-OWB-ISH then CCA iort must be 1. iort FAILED [HIGH] IORTIdMappingOutsideTable: Test 1, IORT ID iort Mapping 2 is outside the IORT ACPI table. Either the iort offset is incorrect or the IORT table size or the node is iort too small. iort iort IORT PCI Root Complex Node: iort Type: 0x02 iort Length: 0x0040 iort Revision: 0x50 iort Identifier: 0x0000000f iort Number of ID mappings: 0x00000010 iort Reference to ID Array: 0x00000028 iort Cache Coherent Attribute: 0x000000d1 iort Allocation Hints: 0xfe iort Reserved: 0x8000 iort Memory Access Flags 0x03 iort ATS Attribute: 0x00000003 iort PCI Segment Number: 0xc0bbeeff iort Memory addr. size limit: 0x08 iort PASID capabilities: 0x0000 iort Reserved: 0x00 iort Flags: 0x00000000 iort ID Mapping 0 iort Input Base: 0x00000002 iort ID Count: 0x00000003 iort Output Base: 0x00000004 iort Output Reference: 0x00000005 iort Flags: 0x00000001 iort FAILED [LOW] IORTNodeRevisionInvalid: Test 1, IORT Node iort Revision field is 0x50 and should be less than 5. iort FAILED [HIGH] IORTCacheCoherentAttrInvalid: Test 1, IORT iort PCI Root Complex Node Coherent Attribute is 0xd1 and iort should be either 0 (device is fully coherent) or 1 (device iort is not coherent). iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT PCI iort Root Complex Node Allocation Hints Bits [7..4] must be iort zero, got 0xfe instead iort FAILED [MEDIUM] IORTReservedNonZero: Test 1, IORT PCI Root iort Complex Node Reserved field must be zero, got 0x8000 iort instead iort FAILED [HIGH] IORTIdMappingOutsideTable: Test 1, IORT ID iort Mapping 1 is outside the IORT ACPI table. Either the iort offset is incorrect or the IORT table size or the node is iort too small. iort iort IORT SMMU node: iort Type: 0x03 iort Length: 0x00a4 iort Revision: 0xa0 iort Identifier: 0x00008100 iort Number of ID mappings: 0x00000001 iort Reference to ID Array: 0x00000090 iort Base Address: 0xf01030c020908000 iort Span: 0x0000000020000000 iort Model: 0x00000006 iort Flags: 0x000000aa iort Global Intr. Offset: 0x0000003c iort Number of Context Intr.: 0x00000004 iort Context Intr. Offset: 0x00000050 iort Number of PMU Intr.: 0x00000005 iort PMU Intr. Offset: 0x00000070 iort Global Interrupt Array: iort SMMU_NSgIrpt: 0x000000f0 iort SMMU_NSgIrpt Flags: 0x00000002 iort SMMU_NSgCfgIrpt: 0x000000f1 iort SMMU_NSgCfgIrpt Flags: 0x00000004 iort Context Interrupt Array: iort GSIV: 0xe0800000 iort Interrupt Flags: 0x00000008 iort GSIV: 0xd0700000 iort Interrupt Flags: 0x00000010 iort GSIV: 0xc0600000 iort Interrupt Flags: 0x00000020 iort GSIV: 0xb0500000 iort Interrupt Flags: 0x00000040 iort PMU Interrupt Array: iort GSIV: 0xf00080c0 iort Interrupt Flags: 0x000000aa iort GSIV: 0xf0008080 iort Interrupt Flags: 0x000000ab iort GSIV: 0xf0008040 iort Interrupt Flags: 0x00000092 iort GSIV: 0xf0008000 iort Interrupt Flags: 0x00000004 iort GSIV: 0xffff0000 iort Interrupt Flags: 0x000000ff iort ID Mapping 0 iort Input Base: 0xffff0000 iort ID Count: 0x000000ff iort Output Base: 0x50403020 iort Output Reference: 0x00000000 iort Flags: 0x00000001 iort FAILED [LOW] IORTNodeRevisionInvalid: Test 1, IORT Node iort Revision field is 0xa0 and should be less than 4. iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT iort SMMU_NsgIrpt Bits [31..1] must be zero, got 0x00000002 iort instead iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT iort SMMU_NsgCfgIrpt Bits [31..1] must be zero, got 0x00000004 iort instead iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT iort SMMU_GSV Bits [31..1] must be zero, got 0x00000008 instead iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT iort SMMU_GSV Bits [31..1] must be zero, got 0x00000010 instead iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT iort SMMU_GSV Bits [31..1] must be zero, got 0x00000020 instead iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT iort SMMU_GSV Bits [31..1] must be zero, got 0x00000040 instead iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT iort SMMU_GSV Bits [31..1] must be zero, got 0x000000aa instead iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT iort SMMU_GSV Bits [31..1] must be zero, got 0x000000ab instead iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT iort SMMU_GSV Bits [31..1] must be zero, got 0x00000092 instead iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT iort SMMU_GSV Bits [31..1] must be zero, got 0x00000004 instead iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT iort SMMU_GSV Bits [31..1] must be zero, got 0x000000ff instead iort FAILED [HIGH] IORTSmmuInvalidModel: Test 1, IORT SMMU iort Model is 0x6 and was expecting a model value 0 to 5. iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT SMMU iort Reserved Flags Bits [31..2] must be zero, got 0x000000aa iort instead iort iort IORT SMMUv3 node: iort Type: 0x04 iort Length: 0x0058 iort Revision: 0x05 iort Identifier: 0x00000000 iort Number of ID mappings: 0x00000001 iort Reference to ID Array: 0x00000044 iort Base Address: 0x0000000000000000 iort Flags: 0xff000000 iort Reserved: 0xddccbbaa iort VATOS Address: 0x0000000000000000 iort Model: 0x00000005 iort Event: 0x00000000 iort PRI: 0x00000000 iort GERR: 0x00000000 iort Sync: 0x00000000 iort Proximity Domain: 0x00000000 iort DeviceId Mapping Index: 0x00000000 iort ID Mapping 0 iort Input Base: 0x00000000 iort ID Count: 0x00000000 iort Output Base: 0x00000000 iort Output Reference: 0x00000000 iort Flags: 0x00000000 iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT SMMUv3 iort Reserved Flags Bits [31..5] must be zero, got 0xff000000 iort instead iort FAILED [MEDIUM] IORTReservedNonZero: Test 1, IORT Reserved iort field must be zero, got 0xddccbbaa instead iort FAILED [HIGH] IORTSmmuv3InvalidModel: Test 1, IORT SMMUv3 iort Model is 0x5 and was expecting a model value less than 3. iort iort IORT PMCG node: iort Type: 0x05 iort Length: 0x003c iort Revision: 0x03 iort Identifier: 0x00000000 iort Number of ID mappings: 0x00000001 iort Reference to ID Array: 0x00000028 iort Base Address: 0x0000000000000000 iort Overflow interrupt GSIV: 0x00000000 iort Node reference: 0x00000000 iort Page 1 Base Address: 0x0000000000000000 iort ID Mapping 0 iort Input Base: 0x00000000 iort ID Count: 0x00000000 iort Output Base: 0x00000000 iort Output Reference: 0x00000000 iort Flags: 0x00000001 iort FAILED [LOW] IORTNodeRevisionInvalid: Test 1, IORT Node iort Revision field is 0x03 and should be less than 3. iort iort IORT RMR node: iort Type: 0x06 iort Length: 0x0044 iort Revision: 0x05 iort Identifier: 0x00000000 iort Number of ID mappings: 0x00000001 iort Reference to ID Array: 0x00000030 iort Flags: 0xaabbccdd iort Number of memory range descriptors: 0x00000001 iort Reference to memory range descriptors: 0x0000001c iort FAILED [LOW] IORTNodeRevisionInvalid: Test 1, IORT Node iort Revision field is 0x05 and should be less than 4. iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT ID iort Mapping 0 flags Bits [31..1] must be zero, got 0xff000000 iort instead iort FAILED [HIGH] IORTReservedBitsNonZero: Test 1, IORT RMR iort Reserved Flags Bits [31..10] must be zero, got 0xaabbccdd iort instead iort Physical Range offset: 0x0000000000000000 iort Physical Range length: 0x0000000000000000 iort Reserved: 0xddccbbaa iort FAILED [MEDIUM] IORTReservedNonZero: Test 1, IORT Reserved iort field must be zero, got 0xddccbbaa instead iort iort iort ========================================================== iort 0 passed, 36 failed, 0 warning, 0 aborted, 0 skipped, 0 iort info only. iort ========================================================== fwts-test/iort-0001/test-0001.sh000077500000000000000000000010011465205512700162440ustar00rootroot00000000000000#!/bin/bash # TEST="Test apci table against IORT" NAME=test-0001.sh TMPLOG=$TMP/iort.log.$$ $FWTS --show-tests | grep IORT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/iort-0001/acpidump-0001.log iort - | cut -c7- | grep "^iort" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/iort-0001/iort-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/iort-0001/test-0002.sh000077500000000000000000000010111465205512700162460ustar00rootroot00000000000000#!/bin/bash # TEST="Test apci table against invalid IORT" NAME=test-0001.sh TMPLOG=$TMP/iort.log.$$ $FWTS --show-tests | grep IORT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/iort-0001/acpidump-0002.log iort - | cut -c7- | grep "^iort" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/iort-0001/iort-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/ivrs-0001/000077500000000000000000000000001465205512700143665ustar00rootroot00000000000000fwts-test/ivrs-0001/acpidump-0001.log000066400000000000000000000077421465205512700172630ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... IVRS @ 0x00000000 0000: 49 56 52 53 10 02 00 00 02 6C 49 4E 54 45 4C 20 IVRS.....lINTEL 0010: 54 45 4D 50 4C 41 54 45 01 00 00 00 49 4E 54 4C TEMPLATE....INTL 0020: 31 03 21 20 41 30 20 00 00 00 00 00 00 00 00 00 1.! A0 ......... 0030: 10 B0 64 00 02 00 40 00 00 00 F0 FD 00 00 00 00 ..d...@......... 0040: 00 00 00 00 6F 8F 04 80 03 08 00 00 01 08 00 00 ....o........... 0050: 02 08 00 00 04 FE FF 00 42 00 FF 00 00 A5 00 00 ........B....... 0060: 43 00 FF 00 00 A5 00 00 46 00 FF 00 44 33 22 11 C.......F...D3". 0070: 47 00 FF 00 44 33 22 11 04 FF FF 00 48 00 00 00 G...D3".....H... 0080: 00 A0 00 02 48 00 00 D7 21 A0 00 01 48 00 00 00 ....H...!...H... 0090: 22 01 00 01 11 30 48 00 02 00 40 00 00 00 F0 FD ".....H...@..... 00a0: 00 00 00 00 00 00 00 00 00 00 04 00 DE 4A 25 22 .............J%" 00b0: EF 73 6D 20 00 00 00 00 00 00 00 00 03 08 00 00 .sm ............ 00c0: 04 FE FF 00 43 00 FF 00 00 A5 00 00 04 FF FF 00 ....C........... 00d0: 01 00 00 00 48 00 00 00 00 A0 00 02 40 30 D4 00 ....H.......@... 00e0: 02 00 40 00 00 00 F0 FD 00 00 00 00 00 00 00 00 ..@............. 00f0: 00 00 04 00 DE 4A 25 22 EF 73 6D 20 00 00 00 00 .....J%".sm .... 0100: 00 00 00 00 03 08 00 00 04 FE FF 00 43 00 FF 00 ............C... 0110: 00 A5 00 00 04 FF FF 00 03 00 00 00 48 00 00 00 ............H... 0120: 00 A0 00 02 48 00 00 D7 21 A0 00 01 48 00 00 00 ....H...!...H... 0130: 22 01 00 01 F0 A5 00 40 49 4E 54 43 30 30 32 30 "......@INTC0020 0140: 00 00 00 00 00 00 00 00 02 09 5C 5F 53 42 2E 44 ..........\_SB.D 0150: 45 56 30 F0 A5 00 40 49 4E 54 43 30 30 32 30 00 EV0...@INTC0020. 0160: 00 00 00 00 00 00 00 02 09 5C 5F 53 42 2E 44 45 .........\_SB.DE 0170: 56 31 F0 A5 00 40 49 4E 54 43 30 30 32 30 00 00 V1...@INTC0020.. 0180: 00 00 00 00 00 00 02 09 5C 5F 53 42 2E 44 45 56 ........\_SB.DEV 0190: 32 F0 A5 00 40 49 4E 54 43 30 30 32 30 00 00 00 2...@INTC0020... 01a0: 00 00 00 00 00 02 09 5C 5F 53 42 2E 44 45 56 33 .......\_SB.DEV3 01b0: 20 0D 20 00 22 11 00 00 00 00 00 00 00 00 00 00 . ."........... 01c0: CD AB 78 56 34 12 00 00 DC FE 00 00 00 00 00 00 ..xV4........... 01d0: 21 0D 20 00 22 11 00 00 00 00 00 00 00 00 00 00 !. ."........... 01e0: CD AB 78 56 34 12 00 00 DC FE 00 00 00 00 00 00 ..xV4........... 01f0: 22 0D 20 00 22 11 00 00 00 00 00 00 00 00 00 00 ". ."........... 0200: CD AB 78 56 34 12 00 00 DC FE 00 00 00 00 00 00 ..xV4........... fwts-test/ivrs-0001/acpidump-0002.log000066400000000000000000000077421465205512700172640ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... IVRS @ 0x00000000 0000: 49 56 52 53 10 02 00 00 02 6C 49 4E 54 45 4C 20 IVRS.....lINTEL 0010: 54 45 4D 50 4C 41 54 45 01 00 00 00 49 4E 54 4C TEMPLATE....INTL 0020: 31 03 21 20 44 30 20 07 00 00 00 00 CC 00 00 00 1.! A0 ......... 0030: 10 B0 64 00 02 00 40 00 00 00 F0 FD 00 00 00 00 ..d...@......... 0040: 00 00 20 40 6F 8F 04 80 03 08 00 00 01 08 00 00 ....o........... 0050: 02 08 00 00 04 FE FF 00 42 00 FF 00 00 A5 00 00 ........B....... 0060: 43 00 FF 00 00 A5 00 00 46 00 FF 00 44 33 22 11 C.......F...D3". 0070: 47 00 FF 00 44 33 22 11 04 FF FF 00 48 00 00 00 G...D3".....H... 0080: 00 A0 00 02 48 00 00 D7 21 A0 00 01 44 00 00 00 ....H...!...H... 0090: 22 01 00 01 11 30 48 00 02 00 40 00 00 00 F0 FD ".....H...@..... 00a0: 00 00 00 00 00 00 00 00 00 02 04 00 DE 4A 25 22 .............J%" 00b0: EF 73 6D 20 00 00 00 00 00 00 00 00 03 08 00 00 .sm ............ 00c0: 04 FE FF 00 43 00 FF 00 00 A5 00 00 04 FF FF 00 ....C........... 00d0: 00 00 00 00 48 00 00 00 00 A0 00 02 40 30 D4 00 ....H.......@... 00e0: 02 00 40 00 00 00 F0 FD 00 00 00 00 00 00 00 00 ..@............. 00f0: 04 02 04 F0 DE 4A 25 22 EF 73 6D 20 00 00 00 00 .....J%".sm .... 0100: 00 00 00 00 03 08 00 00 04 FE FF 00 43 00 FF 00 ............C... 0110: 00 A5 00 00 04 FF FF 00 00 00 00 00 48 00 00 00 ............H... 0120: 00 A0 00 02 48 00 00 D7 21 A0 00 01 48 00 00 00 ....H...!...H... 0130: 22 01 00 01 F0 A5 00 40 49 4E 54 43 30 30 32 30 "......@INTC0020 0140: 00 00 00 00 00 00 00 00 02 09 5C 5F 53 42 2E 44 ..........\_SB.D 0150: 45 56 30 F0 A5 00 40 49 4E 54 43 30 30 32 30 00 EV0...@INTC0020. 0160: 00 00 00 00 00 00 00 02 09 5C 5F 53 42 2E 44 45 .........\_SB.DE 0170: 56 31 F0 A5 00 40 49 4E 54 43 30 30 32 30 00 00 V1...@INTC0020.. 0180: 00 00 00 00 00 00 02 09 5C 5F 53 42 2E 44 45 56 ........\_SB.DEV 0190: 32 F0 A5 00 40 49 4E 54 43 30 30 32 30 00 00 00 2...@INTC0020... 01a0: 00 00 00 00 00 02 09 5C 5F 53 42 2E 44 45 56 33 .......\_SB.DEV3 01b0: 20 1D 20 00 22 11 00 00 00 00 00 00 00 00 00 00 . ."........... 01c0: CD AB 78 56 34 12 00 00 DC FE 00 00 00 00 00 00 ..xV4........... 01d0: 21 0D 20 00 22 11 00 00 00 00 00 00 00 00 00 00 !. ."........... 01e0: CD AB 78 56 34 12 00 00 DC FE 00 00 00 00 00 00 ..xV4........... 01f0: 22 0D 20 00 22 11 00 00 00 00 00 00 00 FF 00 00 ". ."........... 0200: CD AB 78 56 34 12 00 00 DC FE 00 00 00 00 00 00 ..xV4........... fwts-test/ivrs-0001/ivrs-0001.log000066400000000000000000000072761465205512700164460ustar00rootroot00000000000000ivrs ivrs: IVRS I/O Virtualization Reporting Structure test. ivrs ---------------------------------------------------------- ivrs Test 1 of 1: Validate IVRS table. ivrs IVRS I/O Virtualization Reporting Structure: ivrs IVinfo: 0x00203041 ivrs Reserved: 0x0000000000000000 ivrs ivrs I/O Virtualization Hardware Definition Type 10h: ivrs Type: 0x10 ivrs Flags: 0xb0 ivrs Length: 0x0064 ivrs DeviceID: 0x0002 ivrs Capability Offset: 0x0040 ivrs IOMMU Base Address: 0x00000000fdf00000 ivrs PCI Segment Group: 0x0000 ivrs IOMMU Info: 0x0000 ivrs IOMMU Feature Reporting: 0x80048f6f ivrs ivrs I/O Virtualization Hardware Definition Type 11h: ivrs Type: 0x11 ivrs Flags: 0x30 ivrs Length: 0x0048 ivrs DeviceID: 0x0002 ivrs Capability Offset: 0x0040 ivrs IOMMU Base Address: 0x00000000fdf00000 ivrs PCI Segment Group: 0x0000 ivrs IOMMU Info: 0x0000 ivrs IOMMU Attribute: 0x00040000 ivrs EFR Register Image: 0x206d73ef22254ade ivrs WFR Register Image 2: 0x0000000000000000 ivrs ivrs I/O Virtualization Hardware Definition Type 40h: ivrs Type: 0x40 ivrs Flags: 0x30 ivrs Length: 0x00d4 ivrs DeviceID: 0x0002 ivrs Capability Offset: 0x0040 ivrs IOMMU Base Address: 0x00000000fdf00000 ivrs PCI Segment Group: 0x0000 ivrs IOMMU Info: 0x0000 ivrs IOMMU Attribute: 0x00040000 ivrs EFR Register Image: 0x206d73ef22254ade ivrs WFR Register Image 2: 0x0000000000000000 ivrs ivrs I/O Virtualization Memory Definition: ivrs Type: 0x20 ivrs Flags: 0x0d ivrs Length: 0x0020 ivrs DeviceID: 0x1122 ivrs Auxiliary data: 0x0000 ivrs Reserved: 0x0000000000000000 ivrs PCI Segment Group: 0xabcd ivrs Start address: 0xfedc000012345678 ivrs Memory block length: 0x0d21000000000000 ivrs ivrs I/O Virtualization Memory Definition: ivrs Type: 0x21 ivrs Flags: 0x0d ivrs Length: 0x0020 ivrs DeviceID: 0x1122 ivrs Auxiliary data: 0x0000 ivrs Reserved: 0x0000000000000000 ivrs PCI Segment Group: 0xabcd ivrs Start address: 0xfedc000012345678 ivrs Memory block length: 0x0d22000000000000 ivrs ivrs I/O Virtualization Memory Definition: ivrs Type: 0x22 ivrs Flags: 0x0d ivrs Length: 0x0020 ivrs DeviceID: 0x1122 ivrs Auxiliary data: 0x0000 ivrs Reserved: 0x0000000000000000 ivrs PCI Segment Group: 0xabcd ivrs Start address: 0xfedc000012345678 ivrs Memory block length: 0x0000000000000000 ivrs ivrs PASSED: Test 1, No issues found in IVRS table. ivrs ivrs ========================================================== ivrs 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 ivrs info only. ivrs ========================================================== fwts-test/ivrs-0001/ivrs-0002.log000066400000000000000000000127201465205512700164350ustar00rootroot00000000000000ivrs ivrs: IVRS I/O Virtualization Reporting Structure test. ivrs ---------------------------------------------------------- ivrs Test 1 of 1: Validate IVRS table. ivrs IVRS I/O Virtualization Reporting Structure: ivrs IVinfo: 0x07203044 ivrs Reserved: 0x000000cc00000000 ivrs ivrs FAILED [HIGH] IVRSReservedBitsNonZero: Test 1, IVRS IVinfo ivrs Bits [4..2] must be zero, got 0x07203044 instead ivrs FAILED [HIGH] IVRSReservedBitsNonZero: Test 1, IVRS IVinfo ivrs Bits [31..23] must be zero, got 0x07203044 instead ivrs FAILED [MEDIUM] IVRSReservedNonZero: Test 1, IVRS Reserved ivrs field must be zero, got 0x000000cc00000000 instead ivrs I/O Virtualization Hardware Definition Type 10h: ivrs Type: 0x10 ivrs Flags: 0xb0 ivrs Length: 0x0064 ivrs DeviceID: 0x0002 ivrs Capability Offset: 0x0040 ivrs IOMMU Base Address: 0x00000000fdf00000 ivrs PCI Segment Group: 0x0000 ivrs IOMMU Info: 0x4020 ivrs IOMMU Feature Reporting: 0x80048f6f ivrs FAILED [HIGH] IVRSReservedBitsNonZero: Test 1, IVRS IOMMU ivrs Info Bits [7..5] must be zero, got 0x4020 instead ivrs FAILED [HIGH] IVRSReservedBitsNonZero: Test 1, IVRS IOMMU ivrs Info Bits [15..13] must be zero, got 0x4020 instead ivrs FAILED [HIGH] IVRSBadType: Test 1, IVRS must have device ivrs entry types 66..67 or 70..72, got 68 instead ivrs ivrs I/O Virtualization Hardware Definition Type 11h: ivrs Type: 0x11 ivrs Flags: 0x30 ivrs Length: 0x0048 ivrs DeviceID: 0x0002 ivrs Capability Offset: 0x0040 ivrs IOMMU Base Address: 0x00000000fdf00000 ivrs PCI Segment Group: 0x0000 ivrs IOMMU Info: 0x0000 ivrs IOMMU Attribute: 0x00040200 ivrs EFR Register Image: 0x206d73ef22254ade ivrs WFR Register Image 2: 0x0000000000000000 ivrs FAILED [HIGH] IVRSReservedBitsNonZero: Test 1, IVRS IOMMU ivrs Attribute Bits [12..0] must be zero, got 0x00040200 ivrs instead ivrs FAILED [HIGH] IVRSBadSubTableType: Test 1, IVRS must have ivrs subtable with Type 1..4, got 0 instead ivrs ivrs I/O Virtualization Hardware Definition Type 40h: ivrs Type: 0x40 ivrs Flags: 0x30 ivrs Length: 0x00d4 ivrs DeviceID: 0x0002 ivrs Capability Offset: 0x0040 ivrs IOMMU Base Address: 0x00000000fdf00000 ivrs PCI Segment Group: 0x0000 ivrs IOMMU Info: 0x0000 ivrs IOMMU Attribute: 0xf0040204 ivrs EFR Register Image: 0x206d73ef22254ade ivrs WFR Register Image 2: 0x0000000000000000 ivrs FAILED [HIGH] IVRSReservedBitsNonZero: Test 1, IVRS IOMMU ivrs Attribute Bits [12..0] must be zero, got 0xf0040204 ivrs instead ivrs FAILED [HIGH] IVRSReservedBitsNonZero: Test 1, IVRS IOMMU ivrs Attribute Bits [31..28] must be zero, got 0xf0040204 ivrs instead ivrs FAILED [HIGH] IVRSBadSubTableType: Test 1, IVRS must have ivrs subtable with Type 1..4, got 0 instead ivrs ivrs I/O Virtualization Memory Definition: ivrs Type: 0x20 ivrs Flags: 0x1d ivrs Length: 0x0020 ivrs DeviceID: 0x1122 ivrs Auxiliary data: 0x0000 ivrs Reserved: 0x0000000000000000 ivrs PCI Segment Group: 0xabcd ivrs Start address: 0xfedc000012345678 ivrs Memory block length: 0x0d21000000000000 ivrs FAILED [HIGH] IVRSReservedBitsNonZero: Test 1, IVRS Flags ivrs Bits [7..4] must be zero, got 0x1d instead ivrs ivrs I/O Virtualization Memory Definition: ivrs Type: 0x21 ivrs Flags: 0x0d ivrs Length: 0x0020 ivrs DeviceID: 0x1122 ivrs Auxiliary data: 0x0000 ivrs Reserved: 0x0000000000000000 ivrs PCI Segment Group: 0xabcd ivrs Start address: 0xfedc000012345678 ivrs Memory block length: 0x0d22000000000000 ivrs ivrs I/O Virtualization Memory Definition: ivrs Type: 0x22 ivrs Flags: 0x0d ivrs Length: 0x0020 ivrs DeviceID: 0x1122 ivrs Auxiliary data: 0x0000 ivrs Reserved: 0x0000ff0000000000 ivrs PCI Segment Group: 0xabcd ivrs Start address: 0xfedc000012345678 ivrs Memory block length: 0x0000000000000000 ivrs FAILED [MEDIUM] IVRSReservedNonZero: Test 1, IVRS Reserved ivrs field must be zero, got 0x0000ff0000000000 instead ivrs ivrs ivrs ========================================================== ivrs 0 passed, 13 failed, 0 warning, 0 aborted, 0 skipped, 0 ivrs info only. ivrs ========================================================== fwts-test/ivrs-0001/test-0001.sh000077500000000000000000000010011465205512700162520ustar00rootroot00000000000000#!/bin/bash # TEST="Test apci table against IVRS" NAME=test-0001.sh TMPLOG=$TMP/ivrs.log.$$ $FWTS --show-tests | grep IVRS > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/ivrs-0001/acpidump-0001.log ivrs - | cut -c7- | grep "^ivrs" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/ivrs-0001/ivrs-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/ivrs-0001/test-0002.sh000077500000000000000000000010111465205512700162540ustar00rootroot00000000000000#!/bin/bash # TEST="Test apci table against invalid IVRS" NAME=test-0001.sh TMPLOG=$TMP/ivrs.log.$$ $FWTS --show-tests | grep IVRS > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/ivrs-0001/acpidump-0002.log ivrs - | cut -c7- | grep "^ivrs" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/ivrs-0001/ivrs-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/klog-0001/000077500000000000000000000000001465205512700143375ustar00rootroot00000000000000fwts-test/klog-0001/klog-0001.log000066400000000000000000030761651465205512700163760ustar00rootroot00000000000000klog klog: Scan kernel log for errors and warnings. klog ---------------------------------------------------------- klog Test 1 of 1: Kernel log error check. klog FAILED [MEDIUM] KlogAcpiMultipleMadt: Test 1, MEDIUM klog Kernel message: [ 0.000000] ACPI: BIOS bug: multiple APIC klog /MADT found, using 0 klog klog ADVICE: The BIOS is supposed to supply just one APIC/MADT, klog however, more than one has been found. One can use klog acpi_apic_instance=N to specify the Nth ACPI/MADT to use klog as an override if required. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatch: Test 1, klog HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X klog address mismatch in Gpe0Block: 00008018/0000000000008028, klog using 32 (20090903/tbfadt-427) klog klog ADVICE: The FADT table contains a mismatch between a 32 klog bit pointer and a 64 bit Generic Address pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect. If a non-null 32 bit pointer exists, klog then the kernel will opt for this in preference to the 64 klog bit pointer even though this is not in accordance to the klog ACPI specification. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatch: Test 1, klog HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X klog address mismatch in Gpe0Block: 00008020/0000000000008028, klog using 32 (20090903/tbfadt-427) klog klog ADVICE: The FADT table contains a mismatch between a 32 klog bit pointer and a 64 bit Generic Address pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect. If a non-null 32 bit pointer exists, klog then the kernel will opt for this in preference to the 64 klog bit pointer even though this is not in accordance to the klog ACPI specification. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatch: Test 1, klog HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X klog address mismatch in Gpe0Block: 0x00008020 klog /0x0000000000008028, using 32 (20110112/tbfadt-427) klog klog ADVICE: The FADT table contains a mismatch between a 32 klog bit pointer and a 64 bit Generic Address pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect. If a non-null 32 bit pointer exists, klog then the kernel will opt for this in preference to the 64 klog bit pointer even though this is not in accordance to the klog ACPI specification. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatch: Test 1, klog HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X klog address mismatch in Pm2ControlBlock: 00008030 klog /0000000000008020, using 32 (20090903/tbfadt-427) klog klog ADVICE: The FADT table contains a mismatch between a 32 klog bit pointer and a 64 bit Generic Address pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect. If a non-null 32 bit pointer exists, klog then the kernel will opt for this in preference to the 64 klog bit pointer even though this is not in accordance to the klog ACPI specification. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatch: Test 1, klog HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X klog address mismatch in Pm2ControlBlock: 00008800 klog /0000000000008100, using 32 (20090903/tbfadt-427) klog klog ADVICE: The FADT table contains a mismatch between a 32 klog bit pointer and a 64 bit Generic Address pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect. If a non-null 32 bit pointer exists, klog then the kernel will opt for this in preference to the 64 klog bit pointer even though this is not in accordance to the klog ACPI specification. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatch: Test 1, klog HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X klog address mismatch in Pm2ControlBlock: 0x00000900 klog /0x0000000000000800, using 32 (20110112/tbfadt-427) klog klog ADVICE: The FADT table contains a mismatch between a 32 klog bit pointer and a 64 bit Generic Address pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect. If a non-null 32 bit pointer exists, klog then the kernel will opt for this in preference to the 64 klog bit pointer even though this is not in accordance to the klog ACPI specification. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatch: Test 1, klog HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X klog address mismatch in Pm2ControlBlock: 0x00001218 klog /0x0000000000001214, using 32 (20100428/tbfadt-427) klog klog ADVICE: The FADT table contains a mismatch between a 32 klog bit pointer and a 64 bit Generic Address pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect. If a non-null 32 bit pointer exists, klog then the kernel will opt for this in preference to the 64 klog bit pointer even though this is not in accordance to the klog ACPI specification. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatch: Test 1, klog HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X klog address mismatch in Pm2ControlBlock: 0x00001218 klog /0x0000000000001214, using 32 (20110413/tbfadt-430) klog klog ADVICE: The FADT table contains a mismatch between a 32 klog bit pointer and a 64 bit Generic Address pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect. If a non-null 32 bit pointer exists, klog then the kernel will opt for this in preference to the 64 klog bit pointer even though this is not in accordance to the klog ACPI specification. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatch: Test 1, klog HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X klog address mismatch in Pm2ControlBlock: 0x00008800 klog /0x0000000000008100, using 32 (20110112/tbfadt-427) klog klog ADVICE: The FADT table contains a mismatch between a 32 klog bit pointer and a 64 bit Generic Address pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect. If a non-null 32 bit pointer exists, klog then the kernel will opt for this in preference to the 64 klog bit pointer even though this is not in accordance to the klog ACPI specification. klog klog FAILED [CRITICAL] KlogAcpiValidRsdpNotFound: Test 1, klog CRITICAL Kernel message: [ 0.000000] ACPI Error: A valid klog RSDP was not found (20090903/tbxfroot-219) klog klog ADVICE: An ACPI compatible system must provide an RSDP klog (Root System Description Pointer). This structure provides klog the physical address of the RSDT and XSDT. Since this klog could not be found, the ACPI driver has had to disable klog ACPI support. klog klog FAILED [CRITICAL] KlogAcpiValidRsdpNotFound: Test 1, klog CRITICAL Kernel message: [ 0.000000] ACPI Error: A valid klog RSDP was not found (20100428/tbxfroot-219) klog klog ADVICE: An ACPI compatible system must provide an RSDP klog (Root System Description Pointer). This structure provides klog the physical address of the RSDT and XSDT. Since this klog could not be found, the ACPI driver has had to disable klog ACPI support. klog klog FAILED [CRITICAL] KlogAcpiValidRsdpNotFound: Test 1, klog CRITICAL Kernel message: [ 0.000000] ACPI Error: A valid klog RSDP was not found (20110112/tbxfroot-219) klog klog ADVICE: An ACPI compatible system must provide an RSDP klog (Root System Description Pointer). This structure provides klog the physical address of the RSDT and XSDT. Since this klog could not be found, the ACPI driver has had to disable klog ACPI support. klog klog FAILED [HIGH] KlogAcpiTwoFacs: Test 1, HIGH Kernel message klog : [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in klog FADT - two FACS tables! 20090521 tbfadt-370 klog klog ADVICE: The FADT table contains a mismatch between the 32 klog bit pointer (FIRMWARE_CTRL) and 64 bit pointer klog (X_FIRMWARE_CTRL) pointer to the FACS table. Section 5.2.9 klog of version 4.0a of the ACPI specification states that klog X_FIRMWARE_CTRL should be zero if FIRMWARE_CTRL is defined klog , or FIRMWARE_CTRL should be zero if X_FIRMWARE_CTRL is klog zero. With two different pointers defined, the kernel has klog to make a choice, and opts for the 32 bit pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect, or different 32 bit and 64 bit FACS klog tables are present in your system, which is NOT complaint klog with the ACPI specification. The kernel has to make a klog choice and opts for the 32 bit FIRMWARE_CTRL. klog klog FAILED [HIGH] KlogAcpiTwoFacs: Test 1, HIGH Kernel message klog : [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in klog FADT - two FACS tables! (20090903/tbfadt-369) klog klog ADVICE: The FADT table contains a mismatch between the 32 klog bit pointer (FIRMWARE_CTRL) and 64 bit pointer klog (X_FIRMWARE_CTRL) pointer to the FACS table. Section 5.2.9 klog of version 4.0a of the ACPI specification states that klog X_FIRMWARE_CTRL should be zero if FIRMWARE_CTRL is defined klog , or FIRMWARE_CTRL should be zero if X_FIRMWARE_CTRL is klog zero. With two different pointers defined, the kernel has klog to make a choice, and opts for the 32 bit pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect, or different 32 bit and 64 bit FACS klog tables are present in your system, which is NOT complaint klog with the ACPI specification. The kernel has to make a klog choice and opts for the 32 bit FIRMWARE_CTRL. klog klog FAILED [HIGH] KlogAcpiTwoFacs: Test 1, HIGH Kernel message klog : [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in klog FADT - two FACS tables! (20100121/tbfadt-369) klog klog ADVICE: The FADT table contains a mismatch between the 32 klog bit pointer (FIRMWARE_CTRL) and 64 bit pointer klog (X_FIRMWARE_CTRL) pointer to the FACS table. Section 5.2.9 klog of version 4.0a of the ACPI specification states that klog X_FIRMWARE_CTRL should be zero if FIRMWARE_CTRL is defined klog , or FIRMWARE_CTRL should be zero if X_FIRMWARE_CTRL is klog zero. With two different pointers defined, the kernel has klog to make a choice, and opts for the 32 bit pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect, or different 32 bit and 64 bit FACS klog tables are present in your system, which is NOT complaint klog with the ACPI specification. The kernel has to make a klog choice and opts for the 32 bit FIRMWARE_CTRL. klog klog FAILED [HIGH] KlogAcpiTwoFacs: Test 1, HIGH Kernel message klog : [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in klog FADT - two FACS tables! (20100428/tbfadt-369) klog klog ADVICE: The FADT table contains a mismatch between the 32 klog bit pointer (FIRMWARE_CTRL) and 64 bit pointer klog (X_FIRMWARE_CTRL) pointer to the FACS table. Section 5.2.9 klog of version 4.0a of the ACPI specification states that klog X_FIRMWARE_CTRL should be zero if FIRMWARE_CTRL is defined klog , or FIRMWARE_CTRL should be zero if X_FIRMWARE_CTRL is klog zero. With two different pointers defined, the kernel has klog to make a choice, and opts for the 32 bit pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect, or different 32 bit and 64 bit FACS klog tables are present in your system, which is NOT complaint klog with the ACPI specification. The kernel has to make a klog choice and opts for the 32 bit FIRMWARE_CTRL. klog klog FAILED [HIGH] KlogAcpiTwoFacs: Test 1, HIGH Kernel message klog : [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in klog FADT - two FACS tables! (20100702/tbfadt-369) klog klog ADVICE: The FADT table contains a mismatch between the 32 klog bit pointer (FIRMWARE_CTRL) and 64 bit pointer klog (X_FIRMWARE_CTRL) pointer to the FACS table. Section 5.2.9 klog of version 4.0a of the ACPI specification states that klog X_FIRMWARE_CTRL should be zero if FIRMWARE_CTRL is defined klog , or FIRMWARE_CTRL should be zero if X_FIRMWARE_CTRL is klog zero. With two different pointers defined, the kernel has klog to make a choice, and opts for the 32 bit pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect, or different 32 bit and 64 bit FACS klog tables are present in your system, which is NOT complaint klog with the ACPI specification. The kernel has to make a klog choice and opts for the 32 bit FIRMWARE_CTRL. klog klog FAILED [HIGH] KlogAcpiTwoFacs: Test 1, HIGH Kernel message klog : [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in klog FADT - two FACS tables! (20101013/tbfadt-369) klog klog ADVICE: The FADT table contains a mismatch between the 32 klog bit pointer (FIRMWARE_CTRL) and 64 bit pointer klog (X_FIRMWARE_CTRL) pointer to the FACS table. Section 5.2.9 klog of version 4.0a of the ACPI specification states that klog X_FIRMWARE_CTRL should be zero if FIRMWARE_CTRL is defined klog , or FIRMWARE_CTRL should be zero if X_FIRMWARE_CTRL is klog zero. With two different pointers defined, the kernel has klog to make a choice, and opts for the 32 bit pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect, or different 32 bit and 64 bit FACS klog tables are present in your system, which is NOT complaint klog with the ACPI specification. The kernel has to make a klog choice and opts for the 32 bit FIRMWARE_CTRL. klog klog FAILED [HIGH] KlogAcpiTwoFacs: Test 1, HIGH Kernel message klog : [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in klog FADT - two FACS tables! (20110112/tbfadt-369) klog klog ADVICE: The FADT table contains a mismatch between the 32 klog bit pointer (FIRMWARE_CTRL) and 64 bit pointer klog (X_FIRMWARE_CTRL) pointer to the FACS table. Section 5.2.9 klog of version 4.0a of the ACPI specification states that klog X_FIRMWARE_CTRL should be zero if FIRMWARE_CTRL is defined klog , or FIRMWARE_CTRL should be zero if X_FIRMWARE_CTRL is klog zero. With two different pointers defined, the kernel has klog to make a choice, and opts for the 32 bit pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect, or different 32 bit and 64 bit FACS klog tables are present in your system, which is NOT complaint klog with the ACPI specification. The kernel has to make a klog choice and opts for the 32 bit FIRMWARE_CTRL. klog klog FAILED [HIGH] KlogAcpiTwoFacs: Test 1, HIGH Kernel message klog : [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in klog FADT - two FACS tables! (20110316/tbfadt-369) klog klog ADVICE: The FADT table contains a mismatch between the 32 klog bit pointer (FIRMWARE_CTRL) and 64 bit pointer klog (X_FIRMWARE_CTRL) pointer to the FACS table. Section 5.2.9 klog of version 4.0a of the ACPI specification states that klog X_FIRMWARE_CTRL should be zero if FIRMWARE_CTRL is defined klog , or FIRMWARE_CTRL should be zero if X_FIRMWARE_CTRL is klog zero. With two different pointers defined, the kernel has klog to make a choice, and opts for the 32 bit pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect, or different 32 bit and 64 bit FACS klog tables are present in your system, which is NOT complaint klog with the ACPI specification. The kernel has to make a klog choice and opts for the 32 bit FIRMWARE_CTRL. klog klog FAILED [HIGH] KlogAcpiTwoFacs: Test 1, HIGH Kernel message klog : [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in klog FADT - two FACS tables! (20110413/tbfadt-369) klog klog ADVICE: The FADT table contains a mismatch between the 32 klog bit pointer (FIRMWARE_CTRL) and 64 bit pointer klog (X_FIRMWARE_CTRL) pointer to the FACS table. Section 5.2.9 klog of version 4.0a of the ACPI specification states that klog X_FIRMWARE_CTRL should be zero if FIRMWARE_CTRL is defined klog , or FIRMWARE_CTRL should be zero if X_FIRMWARE_CTRL is klog zero. With two different pointers defined, the kernel has klog to make a choice, and opts for the 32 bit pointer. Because klog these pointers are different, it suggests either one of klog them is incorrect, or different 32 bit and 64 bit FACS klog tables are present in your system, which is NOT complaint klog with the ACPI specification. The kernel has to make a klog choice and opts for the 32 bit FIRMWARE_CTRL. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x3776BF40 klog /0x000000003776ED40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x38FE4E40 klog /0x0000000038FE4D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x38FE4E40 klog /0x0000000038FE4D40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x3F465F40 klog /0x000000003F465F80, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x3F473F40 klog /0x000000003F473F80, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x3F509F40 klog /0x000000003F509F80, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x3F509F40 klog /0x000000003F509F80, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x3F611E40 klog /0x000000003F611D40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x3F611E40 klog /0x000000003F611D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x3F611E40 klog /0x000000003F611D40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x6FB75F40 klog /0x000000006FB75F80, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x77603F40 klog /0x0000000077603F80, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x77603F40 klog /0x0000000077603F80, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x7762DF40 klog /0x000000007762DF80, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x77630F40 klog /0x0000000077630F80, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x7776BF40 klog /0x000000007776ED40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x7776BF40 klog /0x000000007776ED40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x78FE4E40 klog /0x0000000078FE4D40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x7A7E4E40 klog /0x000000007A7E4D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x7BE20F40 klog /0x000000007BE20F80, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x7D7E4E40 klog /0x000000007D7E4D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x7D8C4F40 klog /0x000000007D8C5E40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x7F611E40 klog /0x000000007F611D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x7FCEBF40 klog /0x000000007FCE7F40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0x7FD5AF40 klog /0x000000007FD5FF40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xAAD87F40 klog /0x00000000AADA1D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xAAD87F40 klog /0x00000000AADA1D40, using 32 (20110316/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xAAD87F40 klog /0x00000000AADA1D40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xAADB7F40 klog /0x00000000AADD1D40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xAADB7F40 klog /0x00000000AADD1D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xAADB9F40 klog /0x00000000AADD3D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xAAF2AF40 klog /0x00000000AAF2DD40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xAAFE4E40 klog /0x00000000AAFE4D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xAB62DF40 klog /0x00000000AB62DF80, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xAB62DF40 klog /0x00000000AB62DF80, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xAFB77F40 klog /0x00000000AFB77F80, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xB5F17E40 klog /0x00000000B5F17D40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xB5F1BE40 klog /0x00000000B5F1BD40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xB6D5AF40 klog /0x00000000B6D61D40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xB6DB9F40 klog /0x00000000B6DD3D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xB762CF40 klog /0x00000000B762CF80, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xB7B1CE40 klog /0x00000000B7B1CD40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xB7B1CE40 klog /0x00000000B7B1CD40, using 32 (20110316/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xB7B1CE40 klog /0x00000000B7B1CD40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xB8FE4E40 klog /0x00000000B8FE4D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBAD17F40 klog /0x00000000BAD31D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBAD87F40 klog /0x00000000BADA1D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBADABF40 klog /0x00000000BADAED40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBADABF40 klog /0x00000000BADAED40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBAF1CF40 klog /0x00000000BAF1FD40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBAFE4E40 klog /0x00000000BAFE4D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBAFE5E40 klog /0x00000000BAFE5D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBB4D1F40 klog /0x00000000BB4DFD40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBB583F40 klog /0x00000000BB59DD40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBB583F40 klog /0x00000000BB59DD40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBB5B3F40 klog /0x00000000BB5CDD40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBB5B3F40 klog /0x00000000BB5CDD40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBB5B3F40 klog /0x00000000BB5CDD40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBB62CF40 klog /0x00000000BB62CF80, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBB62DF40 klog /0x00000000BB62DF80, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBB648F40 klog /0x00000000BB64BD40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBB649F40 klog /0x00000000BB64CD40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBB76BF40 klog /0x00000000BB76ED40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBBE27F40 klog /0x00000000BBE27F80, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBBE27F40 klog /0x00000000BBE27F80, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBBE29F40 klog /0x00000000BBE29F80, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBDB65F40 klog /0x00000000BDB6BE40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBDF17E40 klog /0x00000000BDF17D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBDF18E40 klog /0x00000000BDF18D40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBDF19E40 klog /0x00000000BDF19D40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBDF19E40 klog /0x00000000BDF19D40, using 32 (20101013/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBDF19E40 klog /0x00000000BDF19D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBDF1AE40 klog /0x00000000BDF1AD40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBE97CF40 klog /0x00000000BE996D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBEDB7F40 klog /0x00000000BEDD1D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBEDB8F40 klog /0x00000000BEDD1D40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBEDB8F40 klog /0x00000000BEDD1D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBEDB9F40 klog /0x00000000BEDD3D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBF4D1F40 klog /0x00000000BF4DFD40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBF62CF40 klog /0x00000000BF62CF80, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBF62DF40 klog /0x00000000BF62DF80, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBF654F40 klog /0x00000000BF662D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBF7E4E40 klog /0x00000000BF7E4D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBFA4CF40 klog /0x00000000BFA51F40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBFA4CF40 klog /0x00000000BFA51F40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBFE17E40 klog /0x00000000BFE17D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xBFE21F40 klog /0x00000000BFE21E40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xC9E58F40 klog /0x00000000C9E6ED40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCAB39F40 klog /0x00000000CAB3CD40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCAFE4E40 klog /0x00000000CAFE4D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCAFE4E40 klog /0x00000000CAFE4D40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCAFE5E40 klog /0x00000000CAFE5D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCB61DF40 klog /0x00000000CB61DE40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCB61DF40 klog /0x00000000CB61DE40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCBE4CF40 klog /0x00000000CBE51F40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCBE4CF40 klog /0x00000000CBE51F40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCBF6BF40 klog /0x00000000CBF6ED40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCEF27F40 klog /0x00000000CEF2AD40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCEF27F40 klog /0x00000000CEF2AD40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCEF27F40 klog /0x00000000CEF2AD40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCEF28F40 klog /0x00000000CEF2BD40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCEF28F40 klog /0x00000000CEF2BD40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCEF2BF40 klog /0x00000000CEF2ED40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCEF2BF40 klog /0x00000000CEF2ED40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCF36BF40 klog /0x00000000CF36ED40, using 32 (20100702/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCF36BF40 klog /0x00000000CF36ED40, using 32 (20101013/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCF76BF40 klog /0x00000000CF76ED40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCF76BF40 klog /0x00000000CF76ED40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCF7E4E40 klog /0x00000000CF7E4D40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCF7E4E40 klog /0x00000000CF7E4D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCF7E4E40 klog /0x00000000CF7E4D40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCFBFAF40 klog /0x00000000CFBF6F40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCFD56F40 klog /0x00000000CFD52F40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xCFD5FF40 klog /0x00000000CFD65E40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xD2F2DF40 klog /0x00000000D2F30D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xDB36BF40 klog /0x00000000DB36ED40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xDB36BF40 klog /0x00000000DB36ED40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xDB76BF40 klog /0x00000000DB76ED40, using 32 (20100428/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xDB76BF40 klog /0x00000000DB76ED40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xDB76BF40 klog /0x00000000DB76ED40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xDEB39F40 klog /0x00000000DEB3CD40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xDEB3AF40 klog /0x00000000DEB3DD40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xDEEBAF40 klog /0x00000000DEEBDD40, using 32 (20110413/tbfadt-489) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xDEF2DF40 klog /0x00000000DEF30D40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 0xDF64BF40 klog /0x00000000DF64ED40, using 32 (20110112/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 3762DF40 klog /000000003762DF80, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 3F611E40 klog /000000003F611D40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 7776BF40 klog /000000007776ED40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 7DB61F40 klog /000000007DB66F40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 7F3ECF40 klog /000000007F3E8F40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 7F611E40 klog /000000007F611D40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - 9DCC4F40 klog /000000009DCC5E40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - AFB75F40 klog /00000000AFB75F80, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - B7B1CE40 klog /00000000B7B1CD40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - B7B1CE40 klog /00000000B7B1CD40, using 32 (20100121/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - BADABF40 klog /00000000BADAED40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - BAF2DF40 klog /00000000BAF30D40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - BB62DF40 klog /00000000BB62DF80, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - BB76BF40 klog /00000000BB76ED40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - BBE28E40 klog /00000000BBE28D40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - BDB5BF40 klog /00000000BDB60F40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - BDB5FF40 klog /00000000BDB64F40, using 32 20090521 tbfadt-487 klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - BDF17E40 klog /00000000BDF17D40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - BEDB7F40 klog /00000000BEDD1D40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - BF62CF40 klog /00000000BF62CF80, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - BF76BF40 klog /00000000BF76ED40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - CBE4AF40 klog /00000000CBE4FF40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - CBF6BF40 klog /00000000CBF6ED40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - CEF28F40 klog /00000000CEF2BD40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - CEF2CF40 klog /00000000CEF2FD40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - D2F2DF40 klog /00000000D2F30D40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - DADC1F40 klog /00000000DADD5D40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - DB36BF40 klog /00000000DB36ED40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - DB76BF40 klog /00000000DB76ED40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - DEEBAF40 klog /00000000DEEBDD40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X FACS address mismatch in FADT - DEF2DF40 klog /00000000DEF30D40, using 32 (20090903/tbfadt-486) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X length mismatch in Gpe1Block: 0/32 20090521 klog tbfadt-527 klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X length mismatch in Gpe1Block: 0/32 (20090903 klog /tbfadt-526) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X length mismatch in Gpe1Block: 0/32 (20100428 klog /tbfadt-526) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X length mismatch in Gpe1Block: 0/32 (20101013 klog /tbfadt-526) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X length mismatch in Gpe1Block: 0/32 (20110112 klog /tbfadt-526) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpi32Bit64BitAddressMismatchInFadt: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: 32 klog /64X length mismatch in Gpe1Block: 0/32 (20110413 klog /tbfadt-529) klog klog ADVICE: The FADT table contains Generic Address Structure klog that has a mismatch between the 32 bit and 64 bit versions klog of an address. This should be fixed so there are no klog mismatches. klog klog FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog message: [ 0.000000] ACPI Warning: BIOS XSDT has NULL klog entry, using RSDT (20110112/tbutils-663) klog klog ADVICE: ACPI AML interpreter has found some non-conforming klog AML code. This should be investigated and fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect klog checksum in table [APIC] - 0x3E, should be 0x41 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect klog checksum in table [APIC] - 0x65, should be 0x68 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect klog checksum in table [APIC] - 0x69, should be 0x6C (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect klog checksum in table [APIC] - 0x69, should be 0x6C (20110413 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect klog checksum in table [APIC] - 0x9E, should be 0xA1 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect klog checksum in table [APIC] - 0xDF, should be 0xE2 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect klog checksum in table [APIC] - 0xE4, should be 0xE7 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect klog checksum in table [XSDT] - 0x89, should be 0x7D (20110413 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog Kernel message: [ 0.000000] ACPI Warning: Invalid length klog for Pm1aControlBlock: 32, using default 16 (20090903 klog /tbfadt-607) klog klog ADVICE: This item in the FADT is the incorrect length. klog Should be corrected. klog klog FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog Kernel message: [ 0.000000] ACPI Warning: Invalid length klog for Pm1aControlBlock: 32, using default 16 (20100428 klog /tbfadt-607) klog klog ADVICE: This item in the FADT is the incorrect length. klog Should be corrected. klog klog FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog Kernel message: [ 0.000000] ACPI Warning: Invalid length klog for Pm1aControlBlock: 32, using default 16 (20110112 klog /tbfadt-607) klog klog ADVICE: This item in the FADT is the incorrect length. klog Should be corrected. klog klog FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog Kernel message: [ 0.000000] ACPI Warning: Invalid length klog for Pm1aControlBlock: 32, using default 16 (20110413 klog /tbfadt-610) klog klog ADVICE: This item in the FADT is the incorrect length. klog Should be corrected. klog klog FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog Kernel message: [ 0.000000] ACPI Warning: Invalid length klog for Pm1bControlBlock: 32, using default 16 (20090903 klog /tbfadt-607) klog klog ADVICE: This item in the FADT is the incorrect length. klog Should be corrected. klog klog FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog Kernel message: [ 0.000000] ACPI Warning: Invalid length klog for Pm2ControlBlock: 0, using default 8 (20090903 klog /tbfadt-607) klog klog ADVICE: This item in the FADT is the incorrect length. klog Should be corrected. klog klog FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog Kernel message: [ 0.000000] ACPI Warning: Invalid length klog for Pm2ControlBlock: 0, using default 8 (20100428 klog /tbfadt-607) klog klog ADVICE: This item in the FADT is the incorrect length. klog Should be corrected. klog klog FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog Kernel message: [ 0.000000] ACPI Warning: Invalid length klog for Pm2ControlBlock: 0, using default 8 (20110112 klog /tbfadt-607) klog klog ADVICE: This item in the FADT is the incorrect length. klog Should be corrected. klog klog FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog Kernel message: [ 0.000000] ACPI Warning: Invalid length klog for Pm2ControlBlock: 16, using default 8 (20100428 klog /tbfadt-607) klog klog ADVICE: This item in the FADT is the incorrect length. klog Should be corrected. klog klog FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog Kernel message: [ 0.000000] ACPI Warning: Invalid length klog for Pm2ControlBlock: 16, using default 8 (20110112 klog /tbfadt-607) klog klog ADVICE: This item in the FADT is the incorrect length. klog Should be corrected. klog klog FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog Kernel message: [ 0.000000] ACPI Warning: Invalid length klog for Pm2ControlBlock: 16, using default 8 (20110413 klog /tbfadt-610) klog klog ADVICE: This item in the FADT is the incorrect length. klog Should be corrected. klog klog FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog Kernel message: [ 0.000000] ACPI Warning: Invalid length klog for Pm2ControlBlock: 32, using default 8 (20090903 klog /tbfadt-607) klog klog ADVICE: This item in the FADT is the incorrect length. klog Should be corrected. klog klog FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog Kernel message: [ 0.000000] ACPI Warning: Invalid length klog for Pm2ControlBlock: 32, using default 8 (20110112 klog /tbfadt-607) klog klog ADVICE: This item in the FADT is the incorrect length. klog Should be corrected. klog klog FAILED [HIGH] KlogAcpiFadtInvalidLength: Test 1, HIGH klog Kernel message: [ 0.000000] ACPI Warning: Invalid length klog for PmTimerBlock: 24, using default 32 (20100428 klog /tbfadt-607) klog klog ADVICE: This item in the FADT is the incorrect length. klog Should be corrected. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Gpe1Block has zero address or length: klog 000000000000102C/0 20090521 tbfadt-558 klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Gpe1Block has zero address or length: klog 000000000000102C/0 (20090903/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Gpe1Block has zero address or length: klog 000000000000802C/0 (20090903/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Gpe1Block has zero address or length: klog 0x0000000000000000/0x4 (20110413/tbfadt-560) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Gpe1Block has zero address or length: klog 0x000000000000102C/0x0 (20100428/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Gpe1Block has zero address or length: klog 0x000000000000102C/0x0 (20101013/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Gpe1Block has zero address or length: klog 0x000000000000102C/0x0 (20110112/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Gpe1Block has zero address or length: klog 0x000000000000102C/0x0 (20110413/tbfadt-560) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Gpe1Block has zero address or length: klog 0x00000000000044A0/0x0 (20100428/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Pm2ControlBlock has zero address or length: klog 0000000000000000/1 20090521 tbfadt-558 klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Pm2ControlBlock has zero address or length: klog 0000000000000000/1 (20090903/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Pm2ControlBlock has zero address or length: klog 0000000000000050/0 (20090903/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Pm2ControlBlock has zero address or length: klog 0x0000000000000000/0x1 (20100428/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Pm2ControlBlock has zero address or length: klog 0x0000000000000000/0x1 (20101013/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Pm2ControlBlock has zero address or length: klog 0x0000000000000000/0x1 (20110112/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Pm2ControlBlock has zero address or length: klog 0x0000000000000000/0x1 (20110413/tbfadt-560) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Pm2ControlBlock has zero address or length: klog 0x0000000000000450/0x0 (20100428/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Pm2ControlBlock has zero address or length: klog 0x0000000000000450/0x0 (20110112/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Pm2ControlBlock has zero address or length: klog 0x0000000000000814/0x0 (20100428/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Pm2ControlBlock has zero address or length: klog 0x0000000000000820/0x0 (20100428/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning: klog Optional field Pm2ControlBlock has zero address or length: klog 0x0000000000000820/0x0 (20110112/tbfadt-557) klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOptionalFieldZeroAddressOrLength: klog Test 1, HIGH Kernel message: [ 0.000000] ACPI Warning klog (tbfadt-0460): Optional field "Gpe1Block" has zero address klog or length: 000000000000102C/0 [20080926] klog klog ADVICE: An ACPI table contains Generic Address Structure klog that has an address that is incorrectly set to zero, or a klog zero length. This needs to be fixed. klog klog FAILED [MEDIUM] KlogBiosMtrrIncorrectMask: Test 1, MEDIUM klog Kernel message: [ 0.000000] mtrr: your BIOS has configured klog an incorrect mask, fixing it. klog klog ADVICE: The Memory Type Range Registers (MTRRs) which klog define memory caching policy are misconfigued by the BIOS. klog In this case, the mask is incorrectly set and the kernel klog has detected this and worked around the firmware bug. klog klog FAILED [CRITICAL] KlogBiosCpuMtrrMisconfigured: Test 1, klog CRITICAL Kernel message: [ 0.000000] WARNING: BIOS bug: klog CPU MTRRs don't cover all of memory, losing 1408MB of RAM. klog klog ADVICE: The Memory Type Range Registers (MTRRs) which klog define memory caching policy are misconfigued by the BIOS klog and don't appear to cover all available physical memory. klog The kernel has detected this and has reduced the amount of klog memory available to be safe. Either check that the BIOS klog memory caching options are set correctly or contact your klog BIOS vendor to get this fixed. klog klog FAILED [CRITICAL] KlogBiosCpuMtrrMisconfigured: Test 1, klog CRITICAL Kernel message: [ 0.000000] WARNING: BIOS bug: klog CPU MTRRs don't cover all of memory, losing 4MB of RAM. klog klog ADVICE: The Memory Type Range Registers (MTRRs) which klog define memory caching policy are misconfigued by the BIOS klog and don't appear to cover all available physical memory. klog The kernel has detected this and has reduced the amount of klog memory available to be safe. Either check that the BIOS klog memory caching options are set correctly or contact your klog BIOS vendor to get this fixed. klog klog FAILED [HIGH] KlogAcpiUnknownAmlOpcode: Test 1, HIGH klog Kernel message: [ 0.022719] ACPI Error: Found unknown klog opcode 0xFD at AML address f7ffe14c offset 0xE8, ignoring klog (20110112/psloop-141) klog klog ADVICE: ACPI execution run time error: The ACPI klog interpreter has reached an opcode that is unknown, this klog normally is a bug in the underlying AML code either klog because of badly written AML code or the compiler has klog produced code that is incorrect or the ACPI interpreter klog does not support this valid opcode. klog klog FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test klog 1, CRITICAL Kernel message: [ 0.025446] ACPI Warning: klog Detected an unsupported executable opcode at module-level: klog [0x007B] at table offset 0x00BE (20110112/psloop-526) klog klog ADVICE: An illegal AML opcode has been found and is klog ignored. This indicates either badly compiled code or klog opcode corruption in the DSDT or SSDT tables or a bug in klog the ACPI execution engine. Recommend disassembing using klog iasl to find any offending code. klog klog FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test klog 1, CRITICAL Kernel message: [ 0.025463] ACPI Warning: klog Detected an unsupported executable opcode at module-level: klog [0x007B] at table offset 0x00C3 (20110112/psloop-526) klog klog ADVICE: An illegal AML opcode has been found and is klog ignored. This indicates either badly compiled code or klog opcode corruption in the DSDT or SSDT tables or a bug in klog the ACPI execution engine. Recommend disassembing using klog iasl to find any offending code. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.034090] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node ee025630), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiFirmwareError: Test 1, HIGH Kernel klog message: [ 0.040119] [Firmware Bug]: the BIOS has klog corrupted hw-PMU resources (MSR 186 is 400000) klog klog ADVICE: The kernel has detected a Firmware bug in the BIOS klog or ACPI which needs investigating and fixing. klog klog FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test klog 1, CRITICAL Kernel message: [ 0.042222] ACPI Warning: klog Detected an unsupported executable opcode at module-level: klog [0x0070] at table offset 0x2366 (20100121/psloop-526) klog klog ADVICE: An illegal AML opcode has been found and is klog ignored. This indicates either badly compiled code or klog opcode corruption in the DSDT or SSDT tables or a bug in klog the ACPI execution engine. Recommend disassembing using klog iasl to find any offending code. klog klog FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test klog 1, CRITICAL Kernel message: [ 0.042240] ACPI Warning: klog Detected an unsupported executable opcode at module-level: klog [0x0070] at table offset 0x006C (20090903/psloop-522) klog klog ADVICE: An illegal AML opcode has been found and is klog ignored. This indicates either badly compiled code or klog opcode corruption in the DSDT or SSDT tables or a bug in klog the ACPI execution engine. Recommend disassembing using klog iasl to find any offending code. klog klog FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test klog 1, CRITICAL Kernel message: [ 0.042253] ACPI Warning: klog Detected an unsupported executable opcode at module-level: klog [0x0070] at table offset 0x006F (20090903/psloop-522) klog klog ADVICE: An illegal AML opcode has been found and is klog ignored. This indicates either badly compiled code or klog opcode corruption in the DSDT or SSDT tables or a bug in klog the ACPI execution engine. Recommend disassembing using klog iasl to find any offending code. klog klog FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test klog 1, CRITICAL Kernel message: [ 0.042265] ACPI Warning: klog Detected an unsupported executable opcode at module-level: klog [0x0070] at table offset 0x0070 (20090903/psloop-522) klog klog ADVICE: An illegal AML opcode has been found and is klog ignored. This indicates either badly compiled code or klog opcode corruption in the DSDT or SSDT tables or a bug in klog the ACPI execution engine. Recommend disassembing using klog iasl to find any offending code. klog klog FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test klog 1, CRITICAL Kernel message: [ 0.042279] ACPI Warning: klog Detected an unsupported executable opcode at module-level: klog [0x0070] at table offset 0x0077 (20090903/psloop-522) klog klog ADVICE: An illegal AML opcode has been found and is klog ignored. This indicates either badly compiled code or klog opcode corruption in the DSDT or SSDT tables or a bug in klog the ACPI execution engine. Recommend disassembing using klog iasl to find any offending code. klog klog FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test klog 1, CRITICAL Kernel message: [ 0.042291] ACPI Warning: klog Detected an unsupported executable opcode at module-level: klog [0x0070] at table offset 0x007C (20090903/psloop-522) klog klog ADVICE: An illegal AML opcode has been found and is klog ignored. This indicates either badly compiled code or klog opcode corruption in the DSDT or SSDT tables or a bug in klog the ACPI execution engine. Recommend disassembing using klog iasl to find any offending code. klog klog FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test klog 1, CRITICAL Kernel message: [ 0.042302] ACPI Warning: klog Detected an unsupported executable opcode at module-level: klog [0x007B] at table offset 0x007D (20090903/psloop-522) klog klog ADVICE: An illegal AML opcode has been found and is klog ignored. This indicates either badly compiled code or klog opcode corruption in the DSDT or SSDT tables or a bug in klog the ACPI execution engine. Recommend disassembing using klog iasl to find any offending code. klog klog FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test klog 1, CRITICAL Kernel message: [ 0.042311] ACPI Warning: klog Detected an unsupported executable opcode at module-level: klog [0x007B] at table offset 0x007F (20090903/psloop-522) klog klog ADVICE: An illegal AML opcode has been found and is klog ignored. This indicates either badly compiled code or klog opcode corruption in the DSDT or SSDT tables or a bug in klog the ACPI execution engine. Recommend disassembing using klog iasl to find any offending code. klog klog FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test klog 1, CRITICAL Kernel message: [ 0.042322] ACPI Warning: klog Detected an unsupported executable opcode at module-level: klog [0x007B] at table offset 0x0080 (20090903/psloop-522) klog klog ADVICE: An illegal AML opcode has been found and is klog ignored. This indicates either badly compiled code or klog opcode corruption in the DSDT or SSDT tables or a bug in klog the ACPI execution engine. Recommend disassembing using klog iasl to find any offending code. klog klog FAILED [CRITICAL] KlogAcpiDetectedUnsupportedOpCode: Test klog 1, CRITICAL Kernel message: [ 0.044066] ACPI Warning: klog Detected an unsupported executable opcode at module-level: klog [0x0070] at table offset 0x678F (20100428/psloop-526) klog klog ADVICE: An illegal AML opcode has been found and is klog ignored. This indicates either badly compiled code or klog opcode corruption in the DSDT or SSDT tables or a bug in klog the ACPI execution engine. Recommend disassembing using klog iasl to find any offending code. klog klog FAILED [HIGH] KlogAcpiParameterCountMistmatch: Test 1, klog HIGH Kernel message: [ 0.045570] ACPI Warning: For klog _SB_.PCI0.LPCB.H_EC._GLK: Parameter count mismatch - ASL klog declared 1, ACPI requires 0 (20110112/nspredef-352) klog klog ADVICE: The ACPI Method was executing with a different klog number of parameters than the Method expected. This should klog be fixed. klog klog FAILED [HIGH] KlogAcpiPackageListLargerThanExpected: Test klog 1, HIGH Kernel message: [ 0.050847] ACPI Warning: Package klog List length (0x10) larger than NumElements count (0x8), klog truncated klog klog ADVICE: A Method has returned a Package List that was klog larger than expected. klog klog FAILED [HIGH] KlogAcpiPackageListLargerThanExpected: Test klog 1, HIGH Kernel message: [ 0.053909] ACPI Warning: Package klog List length (0x10) larger than NumElements count (0x6), klog truncated klog klog ADVICE: A Method has returned a Package List that was klog larger than expected. klog klog FAILED [HIGH] KlogAcpiDsdtCorruptOrReplaced: Test 1, HIGH klog Kernel message: [ 0.074070] ACPI Error: The DSDT has been klog corrupted or replaced - old, new headers below (20110413 klog /tbutils-372) klog klog ADVICE: Some firmware corrupts the DSDT or installs a bad klog new DSDT, so a workaround is to copy the DSDT. Booting klog with kernel parameter acpi=copy_dsdt may fix this issue. klog klog FAILED [HIGH] KlogAcpiExecFailure: Test 1, HIGH Kernel klog message: [ 0.074090] ACPI Error: Please send DMI info to klog linux-acpi@vger.kernel.org klog klog ADVICE: The kernel has most probably detected an error klog while executing ACPI AML. The error lists the ACPI driver klog module and the line number where the bug has been caught klog and the method that caused the error. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.076767] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xA6, should be 0x97 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.077157] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x4C, should be 0x21 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.077854] ACPI Error: Method parse/execution klog failed [_SB_.PCI0._OSC] (Node f4c250d8), AE_NOT_FOUND klog (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.078226] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1.APCT] (Node klog f7033090), AE_NO_MEMORY klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.078254] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1.GCAP] (Node klog f7033078), AE_NO_MEMORY klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.078268] ACPI Warning: Incorrect klog checksum in table [OEMB] - 07, should be 06 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.078278] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1._PDC] (Node klog f7033048), AE_NO_MEMORY klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.078686] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x38, should be 0x81 (20110413 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.083817] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xF9, should be 0xF3 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiOpRegionMemMapError: Test 1, HIGH klog Kernel message: [ 0.085590] ACPI Error: Could not map klog memory at 0x000000007F5E3520, size 463 (20110112 klog /exregion-178) klog klog ADVICE: The ACPI interpreter was requested to read or klog write to a memory region via a memory space handler but klog the logical address could not be mapped from the given klog physical address given. This memory region is not mappable klog , so it could be an AML opregion bug or a bug in the klog kernel (less likely). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.085606] ACPI Error: Method parse klog /execution failed [_PR_.CPU1.APPT] (Node f403d228), klog AE_NO_MEMORY (20110112/psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.085618] ACPI Error: Method parse klog /execution failed [_PR_.CPU1.GCAP] (Node f403d1f8), klog AE_NO_MEMORY (20110112/psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiOpRegionMemMapError: Test 1, HIGH klog Kernel message: [ 0.085627] ACPI Error: Could not map klog memory at 0x000000007D3E1520, size 463 (20110112 klog /exregion-178) klog klog ADVICE: The ACPI interpreter was requested to read or klog write to a memory region via a memory space handler but klog the logical address could not be mapped from the given klog physical address given. This memory region is not mappable klog , so it could be an AML opregion bug or a bug in the klog kernel (less likely). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.085628] ACPI Error: Method parse klog /execution failed [_PR_.CPU1._PDC] (Node f403d1c8), klog AE_NO_MEMORY (20110112/psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.085974] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x6B, should be 0x39 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.086054] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x00, should be 0x96 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiOpRegionMemMapError: Test 1, HIGH klog Kernel message: [ 0.086081] ACPI Error: Could not map klog memory at 0x000000007F395420, size 141 (20110112 klog /exregion-178) klog klog ADVICE: The ACPI interpreter was requested to read or klog write to a memory region via a memory space handler but klog the logical address could not be mapped from the given klog physical address given. This memory region is not mappable klog , so it could be an AML opregion bug or a bug in the klog kernel (less likely). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.086097] ACPI Error: Method parse klog /execution failed [_PR_.CPU1.APCT] (Node f403d210), klog AE_NO_MEMORY (20110112/psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.086108] ACPI Error: Method parse klog /execution failed [_PR_.CPU2.GCAP] (Node f403d270), klog AE_NO_MEMORY (20110112/psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.086118] ACPI Error: Method parse klog /execution failed [_PR_.CPU2._PDC] (Node f403d240), klog AE_NO_MEMORY (20110112/psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiOpRegionMemMapError: Test 1, HIGH klog Kernel message: [ 0.086119] ACPI Error: Could not map klog memory at 0x000000007D198120, size 141 (20110112 klog /exregion-178) klog klog ADVICE: The ACPI interpreter was requested to read or klog write to a memory region via a memory space handler but klog the logical address could not be mapped from the given klog physical address given. This memory region is not mappable klog , so it could be an AML opregion bug or a bug in the klog kernel (less likely). klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.088999] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xE8, should be 0xDB (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.089613] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xB3, should be 0xAE (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.089701] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x77, should be 0x6C (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiPackageListLargerThanExpected: Test klog 1, HIGH Kernel message: [ 0.091402] ACPI Warning: Package klog List length (0x7) larger than NumElements count (0x3), klog truncated klog klog ADVICE: A Method has returned a Package List that was klog larger than expected. klog klog FAILED [HIGH] KlogAcpiInvalidTableLength: Test 1, HIGH klog Kernel message: [ 0.091463] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1.APPT] (Node klog f701e228), AE_INVALID_TABLE_LENGTH klog klog ADVICE: The ACPI Method returned a table of the incorrect klog length. This can lead to unexpected results. klog klog FAILED [HIGH] KlogAcpiInvalidTableLength: Test 1, HIGH klog Kernel message: [ 0.091510] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1.GCAP] (Node klog f701e1f8), AE_INVALID_TABLE_LENGTH klog klog ADVICE: The ACPI Method returned a table of the incorrect klog length. This can lead to unexpected results. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.091541] ACPI Warning: Incorrect klog checksum in table [OEMB] - F6, should be E7 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiInvalidTableLength: Test 1, HIGH klog Kernel message: [ 0.091552] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1._PDC] (Node klog f701e1c8), AE_INVALID_TABLE_LENGTH klog klog ADVICE: The ACPI Method returned a table of the incorrect klog length. This can lead to unexpected results. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.091778] ACPI Warning: Incorrect klog checksum in table [OEMB] - 8E, should be 7F (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.091911] ACPI Warning: Incorrect klog checksum in table [APIC] - 0x8E, should be 0x91 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.092524] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1.APCT] (Node klog f701e210), AE_NO_MEMORY klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.092570] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU2.GCAP] (Node klog f701e270), AE_NO_MEMORY klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.092612] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU2._PDC] (Node klog f701e240), AE_NO_MEMORY klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiCheckObjectTypeFailed: Test 1, HIGH klog Kernel message: [ 0.093544] ACPI Error: Needed type klog [Reference], found [Device] f7019f90 (20100428 klog /exresop-104) klog klog ADVICE: An ACPI object type did not match the expected klog type. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.094477] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x97, should be 0x90 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [LOW] KlogAcpiMissingBqc: Test 1, LOW Kernel klog message: [ 0.094856] [Firmware Bug]: ACPI: No _BQC method, klog cannot determine initial brightness klog klog ADVICE: _BQC (Brightness Query Current level) seems to be klog missing. This method returns the current brightness level klog of a built-in display output device. klog klog FAILED [HIGH] KlogAcpiOpRegionMemMapError: Test 1, HIGH klog Kernel message: [ 0.095719] ACPI Error: Could not map klog memory at 0x0000000087127520, size 463 (20110112 klog /exregion-178) klog klog ADVICE: The ACPI interpreter was requested to read or klog write to a memory region via a memory space handler but klog the logical address could not be mapped from the given klog physical address given. This memory region is not mappable klog , so it could be an AML opregion bug or a bug in the klog kernel (less likely). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.095737] ACPI Error: Method parse klog /execution failed [_PR_.CPU1.APPT] (Node f383e498), klog AE_NO_MEMORY (20110112/psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.095749] ACPI Error: Method parse klog /execution failed [_PR_.CPU1.GCAP] (Node f383e468), klog AE_NO_MEMORY (20110112/psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.095760] ACPI Error: Method parse klog /execution failed [_PR_.CPU1._PDC] (Node f383e438), klog AE_NO_MEMORY (20110112/psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiMissingBqc: Test 1, HIGH Kernel klog message: [ 0.095817] [Firmware Bug]: ACPI: ACPI brightness klog control misses _BQC function klog klog ADVICE: _BQC (Brightness Query Current level) seems to be klog missing. This method returns the current brightness level klog of a built-in display output device. klog klog FAILED [HIGH] KlogAcpiOpRegionMemMapError: Test 1, HIGH klog Kernel message: [ 0.096257] ACPI Error: Could not map klog memory at 0x0000000086DB1C20, size 141 (20110112 klog /exregion-178) klog klog ADVICE: The ACPI interpreter was requested to read or klog write to a memory region via a memory space handler but klog the logical address could not be mapped from the given klog physical address given. This memory region is not mappable klog , so it could be an AML opregion bug or a bug in the klog kernel (less likely). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.096273] ACPI Error: Method parse klog /execution failed [_PR_.CPU1.APCT] (Node f383e480), klog AE_NO_MEMORY (20110112/psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.096285] ACPI Error: Method parse klog /execution failed [_PR_.CPU2.GCAP] (Node f383e4e0), klog AE_NO_MEMORY (20110112/psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.096295] ACPI Error: Method parse klog /execution failed [_PR_.CPU2._PDC] (Node f383e4b0), klog AE_NO_MEMORY (20110112/psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.096447] ACPI Warning: Incorrect klog checksum in table [OEMB] - 66, should be 62 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.098113] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x2C, should be 0x28 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.099413] ACPI Warning: Incorrect klog checksum in table [OEMB] - E2, should be D9 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiFieldExceedsBuffer: Test 1, HIGH klog Kernel message: [ 0.101941] ACPI Error: Field [ASSM] at klog 524320 exceeds Buffer [BUF0] size 880 (bits) (20110112 klog /dsopcode-597) klog klog ADVICE: Failed to initialise an ACPI buffer field, the klog field exceeded the buffer size provided. This is a klog firmware bug. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.101946] ACPI Error: Method parse/execution klog failed [_SB_.MEM_._CRS] (Node f442af60), klog AE_AML_BUFFER_LIMIT (20110112/psparse-536) klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.101953] ACPI Error: Method execution failed klog [_SB_.MEM_._CRS] (Node f442af60), AE_AML_BUFFER_LIMIT klog (20110112/uteval-103) klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.102803] ACPI Warning: Incorrect klog checksum in table [OEMB] - 6E, should be 40 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.104297] ACPI Error (psargs-0359): klog [OSYS] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.104304] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.ACEL._STA] (Node klog f701c4e0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageListLargerThanExpected: Test klog 1, HIGH Kernel message: [ 0.105061] ACPI Warning: Package klog List length (0xCA) larger than NumElements count (0x4), klog truncated klog klog ADVICE: A Method has returned a Package List that was klog larger than expected. klog klog FAILED [HIGH] KlogAcpiPackageListLargerThanExpected: Test klog 1, HIGH Kernel message: [ 0.106912] ACPI Warning: Package klog List length (0x5) larger than NumElements count (0x2), klog truncated klog klog ADVICE: A Method has returned a Package List that was klog larger than expected. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.108470] ACPI Warning: Incorrect klog checksum in table [OEMB] - 3F, should be 3B (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.109343] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x29, should be 0x1C (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiCheckObjectTypeFailed: Test 1, HIGH klog Kernel message: [ 0.109618] ACPI Error: Needed type klog [Reference], found [Device] f7012f90 (20090903 klog /exresop-104) klog klog ADVICE: An ACPI object type did not match the expected klog type. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 0.109635] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node f701adc8), klog AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.110905] ACPI Warning: Incorrect klog checksum in table [OEMB] - 32, should be 25 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiInvalidTableLength: Test 1, HIGH klog Kernel message: [ 0.113709] ACPI Error: Method parse klog /execution failed [_PR_.CPU1._PDC] (Node f5822150), klog AE_INVALID_TABLE_LENGTH (20110112/psparse-536) klog klog ADVICE: The ACPI Method returned a table of the incorrect klog length. This can lead to unexpected results. klog klog FAILED [HIGH] KlogAcpiInvalidTableLength: Test 1, HIGH klog Kernel message: [ 0.113864] ACPI Error: Method parse klog /execution failed [_PR_.CPU2._PDC] (Node f58221e0), klog AE_INVALID_TABLE_LENGTH (20110112/psparse-536) klog klog ADVICE: The ACPI Method returned a table of the incorrect klog length. This can lead to unexpected results. klog klog FAILED [HIGH] KlogAcpiInvalidTableLength: Test 1, HIGH klog Kernel message: [ 0.114544] ACPI Error: Method parse klog /execution failed [_PR_.CPU0._PDC] (Node f54211c8), klog AE_INVALID_TABLE_LENGTH (20110112/psparse-536) klog klog ADVICE: The ACPI Method returned a table of the incorrect klog length. This can lead to unexpected results. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.115838] ACPI Warning: Incorrect klog checksum in table [OEMB] - 79, should be 6C (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.118277] ACPI Error (psargs-0359): klog [SUPP] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.118284] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node f7012780), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.118568] ACPI Warning: Incorrect klog checksum in table [OEMB] - 2F, should be 22 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 0.120765] ACPI Warning for klog _SB_.PCI0.P2P_._PRT: Return Package has no elements klog (empty) (20090903/nspredef-433) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiOpRegionMemMapError: Test 1, HIGH klog Kernel message: [ 0.122347] ACPI Error: Could not map klog memory at 0x00000000000FFA32, size 0 (20100428 klog /exregion-178) klog klog ADVICE: The ACPI interpreter was requested to read or klog write to a memory region via a memory space handler but klog the logical address could not be mapped from the given klog physical address given. This memory region is not mappable klog , so it could be an AML opregion bug or a bug in the klog kernel (less likely). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.122369] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU0._PDC] (Node klog f70191c8), AE_NO_MEMORY klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 0.128150] ACPI Warning for klog _SB_.PCI0.P32_._PRT: Return Package has no elements klog (empty) (20090903/nspredef-433) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.132540] ACPI Warning: Incorrect klog checksum in table [OEMB] - CB, should be C6 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiFieldExceedsBuffer: Test 1, HIGH klog Kernel message: [ 0.136585] ACPI Error: Field [ALB2] at klog 120 exceeds Buffer [CRSA] size 104 (bits) (20090903 klog /dsopcode-596) klog klog ADVICE: Failed to initialise an ACPI buffer field, the klog field exceeded the buffer size provided. This is a klog firmware bug. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.136600] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.PIB_.SIO0.LPT_._CRS] klog (Node dd8159d8), AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.136637] ACPI Error (uteval-0250): Method klog execution failed [_SB_.PCI0.PIB_.SIO0.LPT_._CRS] (Node klog dd8159d8), AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.137394] ACPI Warning: Incorrect klog checksum in table [OEMB] - 29, should be 1A (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiFirmwareError: Test 1, HIGH Kernel klog message: [ 0.140000] [Firmware Bug]: the BIOS has klog corrupted hw-PMU resources (MSR 186 is 43003c) klog klog ADVICE: The kernel has detected a Firmware bug in the BIOS klog or ACPI which needs investigating and fixing. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.141112] ACPI Warning: Incorrect klog checksum in table [OEMB] - ED, should be E8 20090521 klog tbutils-246 klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.150000] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.SBRG.EC0_._REG] (Node klog ffff880137e47618), AE_NOT_EXIST (20110112/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.150000] ACPI Error: No handler for klog Region [ERAM] (ffff880137e58e10) [EmbeddedControl] klog (20110112/evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.154764] ACPI Warning: Incorrect klog checksum in table [OEMB] - 7D, should be 6E (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.159797] ACPI Error: Method parse/execution klog failed [_SB_._OSC] (Node f4421648), AE_NOT_FOUND (20110413 klog /psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.160246] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.LPC0.EC0_._REG] (Node ffff880147830960), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.160246] ACPI Error: [_SB_.PHSR] klog Namespace lookup failure, AE_NOT_FOUND (20110112 klog /psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [MEDIUM] KlogBiosMtrrsInconsistentAcrossCPUs: Test klog 1, MEDIUM Kernel message: [ 0.160449] mtrr: your CPUs had klog inconsistent fixed MTRR settings klog klog ADVICE: The fixed Memory Type Range Registers (MTRRs) klog which define memory caching policy are not consistent klog across all CPUs which is a firmware bug. The kernel has klog worked around this bug, but it may be worth getting the klog BIOS vendor to fix this. klog klog FAILED [HIGH] KlogAcpiPackageListLargerThanExpected: Test klog 1, HIGH Kernel message: [ 0.163431] ACPI Warning: Package klog List length (0x6) larger than NumElements count (0x3), klog truncated klog klog ADVICE: A Method has returned a Package List that was klog larger than expected. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.163687] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0xFC, should be 0xFB (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.164073] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0xEE, should be 0xED (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.165683] ACPI Error: [CDW1] Namespace klog lookup failure, AE_NOT_FOUND (20110112/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.165689] ACPI Error: Method parse/execution klog failed [_SB_._OSC] (Node f3821648), AE_NOT_FOUND (20110112 klog /psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.166264] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_._OSC] (Node f701a648), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.166294] ACPI Error: Method parse/execution klog failed [_SB_._OSC] (Node f4021648), AE_NOT_FOUND (20110112 klog /psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.166323] ACPI Error: No handler for klog Region [ERAM] (f7022168) [EmbeddedControl] (20100428 klog /evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.166336] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] klog (Node f7021bb8), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.166808] ACPI Error: No handler for klog Region [ERAM] (f7023938) [EmbeddedControl] (20100428 klog /evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.166808] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.HTEV] (Node f701be10), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.166808] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] klog (Node f7024d08), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.169111] ACPI Error: [HPTF] Namespace klog lookup failure, AE_NOT_FOUND (20110112/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.169117] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.HPET._STA] (Node f402ae58), AE_NOT_FOUND klog (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.169362] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x18, should be 0x13 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.169398] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x15, should be 0xAC (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.170000] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node ffffffff81a06440), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageListLargerThanExpected: Test klog 1, HIGH Kernel message: [ 0.170000] ACPI Warning: Package klog List length (0x6) larger than NumElements count (0x2), klog truncated klog klog ADVICE: A Method has returned a Package List that was klog larger than expected. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.170352] ACPI Warning: Incorrect klog checksum in table [SSDT] - 0xEA, should be 0x42 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.171073] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x67, should be 0x92 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.171715] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x00, should be 0xAB (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.171916] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f700e3d8), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.172406] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x22, should be 0x15 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.172679] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x00, should be 0xA5 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiPackageListLargerThanExpected: Test klog 1, HIGH Kernel message: [ 0.172776] ACPI Warning: Package klog List length (1) larger than NumElements count (0), klog truncated klog klog ADVICE: A Method has returned a Package List that was klog larger than expected. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.172868] ACPI Error: No handler for klog Region [RAM_] (f7014618) [EmbeddedControl] 20090521 klog evregion-319 klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiRegionHasNoHandler: Test 1, HIGH klog Kernel message: [ 0.172873] ACPI Error: Region klog EmbeddedControl(3) has no handler 20090521 exfldio-294 klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.172880] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] klog (Node f70159f0), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.173062] ACPI Warning: Incorrect klog checksum in table [SSDT] - 0xAA, should be 0xED (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.173605] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f70215e8), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.173745] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x83, should be 0x27 (20110413 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.173917] ACPI Error (psparse-0537): klog Method parse/execution failed [] (Node c08d6804), klog AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.173917] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node c08d6804), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.175144] ACPI Warning: Incorrect klog checksum in table [OEMB] - 95, should be 8C (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.175379] ACPI Error: No handler for klog Region [ECXP] (f70218e8) [EmbeddedControl] (20100428 klog /evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.175394] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU0._OSC] (Node klog f7025558), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.175428] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU0._PDC] (Node klog f7025540), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiPackageListLargerThanExpected: Test klog 1, HIGH Kernel message: [ 0.175892] ACPI Warning: Package klog List length (0x1) larger than NumElements count (0x0), klog truncated klog klog ADVICE: A Method has returned a Package List that was klog larger than expected. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.175987] ACPI Warning: Incorrect klog checksum in table [OEMB] - D7, should be C8 20090521 klog tbutils-246 klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.176309] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xCF, should be 0xCE (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.176410] ACPI Error: [RAMB] Namespace klog lookup failure, AE_NOT_FOUND (20110413/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.176680] ACPI Warning: Incorrect klog checksum in table [OEMB] - D6, should be C7 20090521 klog tbutils-246 klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.176840] ACPI Warning: Incorrect klog checksum in table [SSDT] - 0xAC, should be 0x4D (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.177033] ACPI Warning: Incorrect klog checksum in table [OEMB] - ED, should be EC 20090521 klog tbutils-246 klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiMmconfigNotReserved: Test 1, klog MEDIUM Kernel message: [ 0.177048] [Firmware Bug]: PCI: klog MMCONFIG at [mem 0xe0000000-0xe03fffff] not reserved in klog ACPI motherboard resources klog klog ADVICE: It appears that PCI config space has been klog configured for a specific device but does not appear to be klog reserved by the ACPI motherboard resources. klog klog FAILED [HIGH] KlogAcpiCheckObjectTypeFailed: Test 1, HIGH klog Kernel message: [ 0.177377] ACPI Error: Needed type klog [Reference], found [Device] f701af90 (20100428 klog /exresop-104) klog klog ADVICE: An ACPI object type did not match the expected klog type. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 0.177377] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node f7022dc8), klog AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.177506] ACPI Warning: Incorrect klog checksum in table [SSDT] - 0xA1, should be 0x30 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.177670] ACPI Warning: Incorrect klog checksum in table [OEMB] - 1C, should be 17 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.178040] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xF7, should be 0xE8 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.178420] ACPI Error: No handler for klog Region [SACS] (f701b500) [PCI_Config] (20090903 klog /evregion-319) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.178434] ACPI Error (psparse-0537): klog Method parse/execution failed [PRID.P_D0._STA] (Node klog f7072000), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.178458] ACPI Error (uteval-0250): klog Method execution failed [PRID.P_D0._STA] (Node f7072000), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.178486] ACPI Error (psparse-0537): klog Method parse/execution failed [PRID.P_D1._STA] (Node klog f70720a8), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.178510] ACPI Error (uteval-0250): klog Method execution failed [PRID.P_D1._STA] (Node f70720a8), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.178539] ACPI Error (psparse-0537): klog Method parse/execution failed [SECD.S_D0._STA] (Node klog f7072210), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.178563] ACPI Error (uteval-0250): klog Method execution failed [SECD.S_D0._STA] (Node f7072210), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.178590] ACPI Error (psparse-0537): klog Method parse/execution failed [SECD.S_D1._STA] (Node klog f70722b8), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.178614] ACPI Error (uteval-0250): klog Method execution failed [SECD.S_D1._STA] (Node f70722b8), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.179475] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x00, should be 0xAB (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.179688] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f74174c8), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 0.181591] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node f7022db0), klog AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.181679] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f740f438), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.181959] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x0A, should be 0x09 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.182122] ACPI Warning: Incorrect klog checksum in table [OEMB] - 7D, should be 70 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.182199] ACPI Error: Method parse/execution klog failed [_SB_.PCI0._OSC] (Node f4c25228), AE_NOT_FOUND klog (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.182199] ACPI Error: [Z012] Namespace klog lookup failure, AE_NOT_FOUND (20110112/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.182639] ACPI Error (psargs-0359): klog [ECEN] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.182645] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node c090665c), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.183306] ACPI Error: Method parse klog /execution failed [_PR_.CPU0._PDC] (Node f403a228), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.183518] ACPI Warning: Incorrect klog checksum in table [OEMB] - 10, should be 03 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.183725] ACPI Error: No handler for klog Region [SACS] (f70c20f0) [PCI_Config] (20090903 klog /evregion-319) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.183734] ACPI Error (psparse-0537): klog Method parse/execution failed [PRID.P_D0._STA] (Node klog f70c4180), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.183755] ACPI Error (uteval-0250): klog Method execution failed [PRID.P_D0._STA] (Node f70c4180), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.183773] ACPI Error (psparse-0537): klog Method parse/execution failed [PRID.P_D1._STA] (Node klog f70c4240), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.183793] ACPI Error (uteval-0250): klog Method execution failed [PRID.P_D1._STA] (Node f70c4240), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.183812] ACPI Error (psparse-0537): klog Method parse/execution failed [SECD.S_D0._STA] (Node klog f70c43c0), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.183832] ACPI Error (uteval-0250): klog Method execution failed [SECD.S_D0._STA] (Node f70c43c0), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.183850] ACPI Error (psparse-0537): klog Method parse/execution failed [SECD.S_D1._STA] (Node klog f70c4480), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.183870] ACPI Error (uteval-0250): klog Method execution failed [SECD.S_D1._STA] (Node f70c4480), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.183948] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x00, should be 0x8E (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.184086] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x69, should be 0x68 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.184314] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f7015eb8), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.185673] ACPI Error (dswload-0659): klog [___P] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiInvalidTableLength: Test 1, HIGH klog Kernel message: [ 0.185686] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1._PDC] (Node klog f701a150), AE_INVALID_TABLE_LENGTH klog klog ADVICE: The ACPI Method returned a table of the incorrect klog length. This can lead to unexpected results. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.185688] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._INI] (Node f700f6c0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiInvalidTableLength: Test 1, HIGH klog Kernel message: [ 0.185862] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU2._PDC] (Node klog f701a1e0), AE_INVALID_TABLE_LENGTH klog klog ADVICE: The ACPI Method returned a table of the incorrect klog length. This can lead to unexpected results. klog klog FAILED [HIGH] KlogAcpiPackageListLargerThanExpected: Test klog 1, HIGH Kernel message: [ 0.186281] ACPI Warning: Package klog List length (C) larger than NumElements count (4), klog truncated klog klog ADVICE: A Method has returned a Package List that was klog larger than expected. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.186529] ACPI Warning: Incorrect klog checksum in table [OEMB] - B9, should be AC (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.187574] ACPI Warning: Incorrect klog checksum in table [OEMB] - 77, should be 76 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.187800] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node c0994f7c), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.187872] ACPI Warning: Incorrect klog checksum in table [OEMB] - B6, should be B3 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.187981] ACPI Warning: Incorrect klog checksum in table [OEMB] - 8D, should be 8C (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.187992] ACPI Warning: Incorrect klog checksum in table [OEMB] - 40, should be 3F (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.188197] ACPI Warning: Incorrect klog checksum in table [OEMB] - 6A, should be 61 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.188232] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x07, should be 0x59 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.188487] ACPI Error (psargs-0359): q z klog Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.188669] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x05, should be 0xE5 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiCheckObjectTypeFailed: Test 1, HIGH klog Kernel message: [ 0.189086] ACPI Error: Needed type klog [Reference], found [Device] f700ff90 (20090903 klog /exresop-104) klog klog ADVICE: An ACPI object type did not match the expected klog type. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 0.189100] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node f7017dc8), klog AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiCheckObjectTypeFailed: Test 1, HIGH klog Kernel message: [ 0.189451] ACPI Error: Needed type klog [Reference], found [Device] f700ef90 20090521 exresop-104 klog klog ADVICE: An ACPI object type did not match the expected klog type. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 0.189466] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node f7016dc8), klog AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.189515] ACPI Error (psargs-0359): klog [CVCL] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.189522] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.DIGI._STA] (Node klog f702a390), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.191013] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x81, should be 0xE5 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.191774] ACPI Warning: Incorrect klog checksum in table [OEMB] - 37, should be 28 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.191906] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node c098ff6c), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.192037] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xD9, should be 0xCC (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 0.192146] ACPI Error klog (dswload-0781): [_PSW] Namespace lookup failure, klog AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.192182] ACPI Error (psparse-0537): klog Method parse/execution failed [] (Node c08ce7dc), klog AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.192983] ACPI Warning: Incorrect klog checksum in table [OEMB] - C0, should be B3 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.193750] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node c08ce7dc), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.194184] ACPI Warning: Incorrect klog checksum in table [OEMB] - C8, should be BF (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.194314] ACPI Warning: Incorrect klog checksum in table [OEMB] - AA, should be 9D (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiInvalidTableLength: Test 1, HIGH klog Kernel message: [ 0.194554] ACPI Error: Method parse klog /execution failed [_PR_.CPU1._PDC] (Node f5821150), klog AE_INVALID_TABLE_LENGTH (20110112/psparse-536) klog klog ADVICE: The ACPI Method returned a table of the incorrect klog length. This can lead to unexpected results. klog klog FAILED [HIGH] KlogAcpiInvalidTableLength: Test 1, HIGH klog Kernel message: [ 0.194701] ACPI Error: Method parse klog /execution failed [_PR_.CPU2._PDC] (Node f58211e0), klog AE_INVALID_TABLE_LENGTH (20110112/psparse-536) klog klog ADVICE: The ACPI Method returned a table of the incorrect klog length. This can lead to unexpected results. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.194897] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xDD, should be 0xD6 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.195685] ACPI Warning: Incorrect klog checksum in table [OEMB] - 2A, should be 29 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.195754] ACPI Warning: Incorrect klog checksum in table [OEMB] - 88, should be 83 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.196934] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0B, should be 02 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.197082] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0xC8, should be 0xE5 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.197413] ACPI Error: No handler for klog Region [EC__] (f701c5c8) [EmbeddedControl] (20100428 klog /evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.197451] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.SBRG.EC__._REG] klog (Node f701e2a0), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.198490] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xB2, should be 0x47 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.198823] ACPI Warning: Incorrect klog checksum in table [OEMB] - 01, should be F4 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.199360] ACPI Warning: Incorrect klog checksum in table [TCPA] - 00, should be AB 20090521 klog tbutils-246 klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.199465] ACPI Error: [CDW1] Namespace klog lookup failure, AE_NOT_FOUND (20110413/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.199471] ACPI Error: Method parse/execution klog failed [_SB_._OSC] (Node ffff880138e2ea78), AE_NOT_FOUND klog (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.200426] ACPI Warning: Incorrect klog checksum in table [OEMB] - A3, should be 9E (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.200744] ACPI Warning: Incorrect klog checksum in table [ASF!] - 59, should be 08 20090521 klog tbutils-246 klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.201013] ACPI Warning: Incorrect klog checksum in table [OEMB] - 8A, should be 7D (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiInvalidTableLength: Test 1, HIGH klog Kernel message: [ 0.201466] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1._PDC] (Node klog f700e180), AE_INVALID_TABLE_LENGTH klog klog ADVICE: The ACPI Method returned a table of the incorrect klog length. This can lead to unexpected results. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.203079] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xE1, should be 0xDC (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.204335] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xC1, should be 0x11 (20110413 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.204344] ACPI Warning: Incorrect klog checksum in table [ATKG] - 07, should be 59 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.205365] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f5422e88), klog AE_ALREADY_EXISTS (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.206075] ACPI Warning: Incorrect klog checksum in table [ATKG] - BB, should be E5 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.207023] ACPI Warning: Incorrect klog checksum in table [TCPA] - 00, should be AB (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.208479] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x77, should be 0x72 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.209105] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node f701f270), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.210543] ACPI Warning: Incorrect klog checksum in table [OEMB] - CD, should be CC (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.210667] ACPI Warning: Incorrect klog checksum in table [OEMB] - D3, should be C4 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.211069] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x99, should be 0x92 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.211113] ACPI Warning: Incorrect klog checksum in table [OEMB] - 7B, should be 76 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.211904] ACPI Error: No handler for klog Region [ERAM] (ee422ed8) [EmbeddedControl] (20100428 klog /evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.211928] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f701fd08), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.211938] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.SBRG.EC0_._REG] klog (Node ee423708), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.212633] ACPI Warning: Incorrect klog checksum in table [OEMB] - E1, should be D3 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.212815] ACPI Error: Method parse/execution klog failed [_SB_.PCI0._OSC] (Node f7424eb8), AE_NOT_FOUND klog (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 0.213084] ACPI Error klog (dsfield-0143): [CAPB] Namespace lookup failure, klog AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.213100] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f7014ca8), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.213771] ACPI Warning: Incorrect klog checksum in table [OEMB] - EC, should be E7 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiPackageListLargerThanExpected: Test klog 1, HIGH Kernel message: [ 0.213827] ACPI Warning: Package klog List length (0xC) larger than NumElements count (0x3), klog truncated klog klog ADVICE: A Method has returned a Package List that was klog larger than expected. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.214423] ACPI Warning: Incorrect klog checksum in table [OEMB] - FD, should be EF (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.215632] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x0B, should be 0x5B (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.216249] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x27, should be 0xE5 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.217060] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog dec13ca8), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.217763] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f7013030), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.217957] ACPI Warning: Incorrect klog checksum in table [OEMB] - 69, should be 5F (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.218957] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f701be88), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.219691] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node f7013270), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.219959] ACPI Error: No handler for klog Region [SACS] (f70c52a8) [PCI_Config] (20090903 klog /evregion-319) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiRegionHasNoHandler: Test 1, HIGH klog Kernel message: [ 0.219968] ACPI Error: Region klog PCI_Config(2) has no handler (20090903/exfldio-295) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.219977] ACPI Error (psparse-0537): klog Method parse/execution failed [PRID.P_D0._STA] (Node klog f701ba38), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.220034] ACPI Error (uteval-0250): klog Method execution failed [PRID.P_D0._STA] (Node f701ba38), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.220068] ACPI Error (psparse-0537): klog Method parse/execution failed [PRID.P_D1._STA] (Node klog f701baf8), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.220107] ACPI Error (uteval-0250): klog Method execution failed [PRID.P_D1._STA] (Node f701baf8), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.220142] ACPI Error (psparse-0537): klog Method parse/execution failed [SECD.S_D0._STA] (Node klog f701bc78), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.220180] ACPI Error (uteval-0250): klog Method execution failed [SECD.S_D0._STA] (Node f701bc78), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.220213] ACPI Error (psparse-0537): klog Method parse/execution failed [SECD.S_D1._STA] (Node klog f701bd38), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.220252] ACPI Error (uteval-0250): klog Method execution failed [SECD.S_D1._STA] (Node f701bd38), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.221153] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.HPET._CRS] (Node f402ae70), AE_NOT_FOUND klog (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.221220] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.RTC_._CRS] (Node f402aee8), AE_NOT_FOUND klog (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogBiosMtrrDefTypeIncosistent: Test 1, klog MEDIUM Kernel message: [ 0.221945] mtrr: your CPUs had klog inconsistent MTRRdefType settings klog klog ADVICE: The Memory Type Range Registers (MTRRs) which klog define memory caching policy do not have a MTRRdefType klog consistently set across all CPUs which is a firmware bug. klog The kernel has worked around this bug, but it may be worth klog getting the BIOS vendor to fix this. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.222211] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f701beb8), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.222869] ACPI Warning: Incorrect klog checksum in table [ATKG] - B0, should be 4A (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiFieldExceedsBuffer: Test 1, HIGH klog Kernel message: [ 0.222980] ACPI Error: Field [I9MN] at klog 544 exceeds Buffer [IORT] size 464 (bits) (20090903 klog /dsopcode-596) klog klog ADVICE: Failed to initialise an ACPI buffer field, the klog field exceeded the buffer size provided. This is a klog firmware bug. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.222987] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPC0.PMIO._CRS] (Node klog f7015900), AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.223020] ACPI Error (uteval-0250): Method klog execution failed [_SB_.PCI0.LPC0.PMIO._CRS] (Node klog f7015900), AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.223245] ACPI Warning: Incorrect klog checksum in table [OEMB] - DB, should be DA (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiMmconfigNotReserved: Test 1, klog MEDIUM Kernel message: [ 0.223485] [Firmware Bug]: PCI: klog MMCONFIG at [mem 0xf0000000-0xf3ffffff] not reserved in klog ACPI motherboard resources klog klog ADVICE: It appears that PCI config space has been klog configured for a specific device but does not appear to be klog reserved by the ACPI motherboard resources. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 0.224289] ACPI Warning for klog _SB_.PCI0.P32_._PRT: Return Package has no elements klog (empty) (20100428/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.224569] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f701fca8), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiFieldExceedsBuffer: Test 1, HIGH klog Kernel message: [ 0.224987] ACPI Error: Field [ASSM] at klog 524320 exceeds Buffer [BUF0] size 688 (bits) (20100428 klog /dsopcode-597) klog klog ADVICE: Failed to initialise an ACPI buffer field, the klog field exceeded the buffer size provided. This is a klog firmware bug. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.224994] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.MEM_._CRS] (Node f7021990), klog AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.225018] ACPI Error (uteval-0250): Method klog execution failed [_SB_.MEM_._CRS] (Node f7021990), klog AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.226224] ACPI Warning: Incorrect klog checksum in table [ATKG] - 53, should be 84 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.227129] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x11, should be 0xE5 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.228032] ACPI Error (psargs-0359): klog [_PR_.C002._PPC] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.228041] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node klog f742a558), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiFirmwareError: Test 1, HIGH Kernel klog message: [ 0.228469] [Firmware Bug]: the BIOS has klog corrupted hw-PMU resources (MSR 38d is 30) klog klog ADVICE: The kernel has detected a Firmware bug in the BIOS klog or ACPI which needs investigating and fixing. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.228535] ACPI Warning: Incorrect klog checksum in table [OEMB] - 77, should be 6F (20100121 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.228773] ACPI Error: Method parse/execution klog failed [_SB_.PCI0._OSC] (Node f4025450), AE_NOT_FOUND klog (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.229334] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f7020750), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.229639] ACPI Error (psargs-0359): klog [CDW1] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.229644] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node f7413270), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.230075] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f7014630), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.231134] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node f7012f00), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.232350] ACPI Warning: Incorrect klog checksum in table [ATKG] - 15, should be 73 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.232460] ACPI Warning: Incorrect klog checksum in table [OEMB] - 8C, should be 87 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.232733] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f701ebd0), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.232830] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xC2, should be 0x84 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.233493] ACPI Warning: Incorrect klog checksum in table [GSCI] - 58, should be AA (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.233542] ACPI Warning: Incorrect klog checksum in table [GSCI] - 0x70, should be 0xD2 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.233946] ACPI Warning: Incorrect klog checksum in table [ATKG] - 1E, should be E5 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.235518] ACPI Warning: Incorrect klog checksum in table [ASF!] - D8, should be 6E (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.236465] ACPI Warning: Incorrect klog checksum in table [OEMB] - 1D, should be 10 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.236739] ACPI Error: Method parse/execution klog failed [_SB_.PCI0._OSC] (Node f3c24f00), AE_NOT_FOUND klog (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.241360] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xBD, should be 0x89 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.242473] ACPI Warning: Incorrect klog checksum in table [GSCI] - 0x28, should be 0x8A (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.244995] ACPI Warning: Incorrect klog checksum in table [OEMB] - 17, should be 67 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 0.245794] ACPI Warning for klog _SB_.PCI0.PCIB._PRT: Return type mismatch - found Integer, klog expected Package (20100428/nspredef-1053) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [HIGH] KlogAcpiExecFailure: Test 1, HIGH Kernel klog message: [ 0.245810] ACPI Error (uteval-0307): Return klog object type is incorrect [_SB_.PCI0.PCIB._PRT] (Node klog f7022c48), AE_TYPE klog klog ADVICE: The kernel has most probably detected an error klog while executing ACPI AML. The error lists the ACPI driver klog module and the line number where the bug has been caught klog and the method that caused the error. klog klog FAILED [HIGH] KlogAcpiIncorrectReturnType: Test 1, HIGH klog Kernel message: [ 0.245830] ACPI Error: Type returned from klog _PRT was incorrect: Integer, expected Btypes: 0x8 klog (20100428/uteval-313) klog klog ADVICE: The ACPI interpreter was evaluating a namespace klog object and discovered that the return type did not match klog the expected return type. This is an ACPI AML bug in the klog ACPI DSDT or SSDTs. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.246137] ACPI Warning: Incorrect klog checksum in table [ATKG] - F1, should be E5 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.249246] ACPI Warning: Incorrect klog checksum in table [OEMB] - 70, should be 6D (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.249570] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1._OSC] (Node klog f7010198), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.249594] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1._PDC] (Node klog f7010180), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.249860] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU2._OSC] (Node klog f7010270), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.249882] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU2._PDC] (Node klog f7010258), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.250005] ACPI Error: No handler for klog Region [EC__] (f4424bd0) [EmbeddedControl] (20110112 klog /evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiRegionHasNoHandler: Test 1, HIGH klog Kernel message: [ 0.250012] ACPI Error: Region klog EmbeddedControl(0x3) has no handler (20110112/exfldio-292) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.250019] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.SBRG.EC__._REG] (Node klog f4425bb8), AE_NOT_EXIST (20110112/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.250572] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f7010e88), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.250864] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f7013e58), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.250941] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f4022e88), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiFirmwareError: Test 1, HIGH Kernel klog message: [ 0.250986] [Firmware Bug]: ACPI: BIOS klog _OSI(Linux) query honored via DMI klog klog ADVICE: ACPI driver has detected an ACPI bug. This klog generally points to a bug in an ACPI table. Examine the klog kernel log for more details. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.251711] ACPI Warning: Incorrect klog checksum in table [ATKG] - B0, should be E5 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.254947] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f3c22e88), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.255884] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f70142b8), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.256141] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0xAF, should be 0x59 (20110413 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.257910] ACPI Warning: Incorrect klog checksum in table [OEMB] - 04, should be 54 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.261013] ACPI Warning: Incorrect klog checksum in table [OEMB] - DF, should be 2F (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.262586] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f701f390), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiFirmwareError: Test 1, HIGH Kernel klog message: [ 0.262663] pci 0000:00:1f.0: [Firmware Bug]: klog TigerPoint LPC.BM_STS cleared klog klog ADVICE: The kernel has detected a Firmware bug in the BIOS klog or ACPI which needs investigating and fixing. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.264838] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f701f2a0), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.265119] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node c08d5804), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.265541] ACPI Warning: Incorrect klog checksum in table [OEMB] - E0, should be 30 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.266577] ACPI Warning: Incorrect klog checksum in table [GSCI] - 3B, should be BF (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 0.267893] ACPI Warning for klog _TZ_.TZ01._PSL: Return Package type mismatch at index 0 - klog found Processor, expected Reference (20090903 klog /nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.268093] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node c0927024), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.268171] ACPI Error (psparse-0537): klog Method parse/execution failed [] (Node c0927024), klog AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.268458] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f70142a0), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.269488] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1.APCT] (Node klog ffff88007af30560), AE_NO_MEMORY klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.269534] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1.GCAP] (Node klog ffff88007af30540), AE_NO_MEMORY klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 0.269576] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1._PDC] (Node klog ffff88007af30500), AE_NO_MEMORY klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.272427] ACPI Error: No handler for klog Region [SACS] (f71004d8) [PCI_Config] (20090903 klog /evregion-319) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.272435] ACPI Error (psparse-0537): klog Method parse/execution failed [PRID.P_D0._STA] (Node klog f7102150), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.272452] ACPI Error (uteval-0250): klog Method execution failed [PRID.P_D0._STA] (Node f7102150), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.272469] ACPI Error (psparse-0537): klog Method parse/execution failed [PRID.P_D1._STA] (Node klog f71021f8), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.272486] ACPI Error (uteval-0250): klog Method execution failed [PRID.P_D1._STA] (Node f71021f8), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.272503] ACPI Error (psparse-0537): klog Method parse/execution failed [SECD.S_D0._STA] (Node klog f7102360), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.272519] ACPI Error (uteval-0250): klog Method execution failed [SECD.S_D0._STA] (Node f7102360), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.272536] ACPI Error (psparse-0537): klog Method parse/execution failed [SECD.S_D1._STA] (Node klog f7102408), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.272552] ACPI Error (uteval-0250): klog Method execution failed [SECD.S_D1._STA] (Node f7102408), klog AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.279154] ACPI Warning: Incorrect klog checksum in table [OEMB] - B9, should be AE (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 0.284552] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.IDE1.GTM_] (Node klog f7014858), AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 0.284566] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.IDE1.CHN1._GTM] (Node klog f7014798), AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.285468] ACPI Error (psargs-0359): klog [_PR_.CPU0._PPC] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.285476] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.ADP0.ADJP] (Node f7015b10), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.285546] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.ADP0._PSR] (Node f7015ae0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.288180] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x81, should be 0x59 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.288591] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f701fd50), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.288966] ACPI Error: Method parse/execution klog failed [_SB_.PCI0._OSC] (Node f34245b8), AE_NOT_FOUND klog (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [CRITICAL] KlogAcpiCrtInvalidThreshold: Test 1, klog CRITICAL Kernel message: [ 0.296054] [Firmware Bug]: klog Invalid critical threshold (0) klog klog ADVICE: ACPI _CRT (Critical Trip Point) is returning a klog threshold lower than zero degrees Celsius which is clearly klog incorrect. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.296149] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f701eca8), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.296644] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_._OSC] (Node ffff88012fc16660) klog , AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.302946] ACPI Error (psargs-0359): klog [HPTF] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.302952] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.HPET._STA] (Node klog ffff88007db32200), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.307009] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f4c22e88), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.307757] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SATA.CHN0._GTM] (Node klog f74145a0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.307837] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SATA.CHN1._GTM] (Node klog f7414690), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.308095] ACPI Warning: Incorrect klog checksum in table [SSDT] - 1F, should be 7F (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.308151] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node klog f7414cd8), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.308213] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node klog f7414dc8), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog message: [ 0.310609] ACPI Warning for _PR_.CPU1._PSS: klog SubPackage[8,9] - suspicious power dissipation values klog (20100428/nsrepair2-403) klog klog ADVICE: ACPI AML interpreter has found some non-conforming klog AML code. This should be investigated and fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.310767] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x72, should be 0x6A (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.311025] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f4c250d8), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.311041] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f54250d8), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog message: [ 0.311335] ACPI Warning for _PR_.CPU2._PSS: klog SubPackage[8,9] - suspicious power dissipation values klog (20100428/nsrepair2-403) klog klog ADVICE: ACPI AML interpreter has found some non-conforming klog AML code. This should be investigated and fixed. klog klog FAILED [HIGH] KlogAcpiEventEnableFailed: Test 1, HIGH klog Kernel message: [ 0.311729] ACPI Error: Could not enable klog PowerButton event (20090903/evxfevnt-193) klog klog ADVICE: An ACPI fixed event could not be enabled. This can klog affect fixed events such as the power management timer, klog power button, sleep button, RTC alarm, wake status, system klog bus master request or the global release lock status. klog klog FAILED [HIGH] KlogAcpiEventEnableFailed: Test 1, HIGH klog Kernel message: [ 0.311932] ACPI Warning: Could not enable klog fixed event 2 (20090903/evxface-146) klog klog ADVICE: An ACPI fixed event could not be enabled. This can klog affect fixed events such as the power management timer, klog power button, sleep button, RTC alarm, wake status, system klog bus master request or the global release lock status. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.314160] ACPI Warning: Incorrect klog checksum in table [OEMB] - 91, should be 90 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.314451] ACPI Error (psparse-0537): klog Method parse/execution failed [] (Node ffffffff81a2b040), klog AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.314603] ACPI Warning: Incorrect klog checksum in table [OEMB] - 8B, should be 8A (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogBiosMtrrsInconsistentAcrossCPUs: Test klog 1, MEDIUM Kernel message: [ 0.314675] mtrr: your CPUs had klog inconsistent variable MTRR settings klog klog ADVICE: The variable Memory Type Range Registers (MTRRs) klog which define memory caching policy are not consistent klog across all CPUs which is a firmware bug. The kernel has klog worked around this bug, but it may be worth getting the klog BIOS vendor to fix this. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.316718] ACPI Warning: Incorrect klog checksum in table [OEMB] - 27, should be 22 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.316734] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0xF3, should be 0xF2 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.316816] ACPI Error: No handler for klog Region [ERAM] (ffff88007a733d80) [EmbeddedControl] klog (20110112/evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.316829] ACPI Error: Method parse klog /execution failed [_SB_.HTEV] (Node ffff88007a730780), klog AE_NOT_EXIST (20110112/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.316839] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node klog ffff88007a73a078), AE_NOT_EXIST (20110112/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.317152] ACPI Warning: Incorrect klog checksum in table [OEMB] - C1, should be B4 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.317427] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1._PDC] (Node klog ffff88007d735160), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.317685] ACPI Warning: Incorrect klog checksum in table [ASF!] - 0xFC, should be 0x98 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.319223] ACPI Warning: Incorrect klog checksum in table [OEMB] - E7, should be E2 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.321587] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node ffffffff81a12040), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiCheckObjectTypeFailed: Test 1, HIGH klog Kernel message: [ 0.321722] ACPI Error: Needed type klog [Reference], found [Device] ffff88007552b900 (20100428 klog /exresop-104) klog klog ADVICE: An ACPI object type did not match the expected klog type. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 0.321740] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node klog ffff880075532ba0), AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.322869] ACPI Error: No handler for klog Region [RAM_] (f7425690) [EmbeddedControl] (20110112 klog /evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.322886] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.LPCB.SNC_.SBRT] (Node klog f7435228), AE_NOT_EXIST (20110112/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.322899] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node klog f7428d98), AE_NOT_EXIST (20110112/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.323465] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x8D, should be 0x8C (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiPackageListLargerThanExpected: Test klog 1, HIGH Kernel message: [ 0.323777] ACPI Warning: Package klog List length (0xC) larger than NumElements count (0x4), klog truncated klog klog ADVICE: A Method has returned a Package List that was klog larger than expected. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.325321] ACPI Error: No handler for klog Region [ERAM] (ffff88007d32bf78) [EmbeddedControl] klog (20090903/evregion-319) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.325334] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.LPCB.KBC0.SMWR] klog (Node ffff88007d32c8c0), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.325357] ACPI Error (psparse-0537): klog Method parse/execution failed [_TZ_.THRM.SFAN] (Node klog ffff88007d328ec0), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.325376] ACPI Error (psparse-0537): klog Method parse/execution failed [_TZ_.THRM.THCK] (Node klog ffff88007d328f40), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.325396] ACPI Error (psparse-0537): klog Method parse/execution failed [_GPE._L02] (Node klog ffff88007d3289c0), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiEventEnableFailed: Test 1, HIGH klog Kernel message: [ 0.325630] ACPI Error: Could not enable klog SleepButton event (20100428/evxfevnt-202) klog klog ADVICE: An ACPI fixed event could not be enabled. This can klog affect fixed events such as the power management timer, klog power button, sleep button, RTC alarm, wake status, system klog bus master request or the global release lock status. klog klog FAILED [HIGH] KlogAcpiEventEnableFailed: Test 1, HIGH klog Kernel message: [ 0.325636] ACPI Warning: Could not enable klog fixed event 0x3 (20100428/evxface-146) klog klog ADVICE: An ACPI fixed event could not be enabled. This can klog affect fixed events such as the power management timer, klog power button, sleep button, RTC alarm, wake status, system klog bus master request or the global release lock status. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.328929] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x45, should be 0x40 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.328954] ACPI Warning: Incorrect klog checksum in table [ASF!] - D9, should be 6D (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 0.329218] ACPI Warning for klog _SB_.PCI0._OSC: Return type mismatch - found Integer, klog expected Buffer (20090903/nspredef-1006) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 0.329373] ACPI Error klog (dsfield-0143): [CAPD] Namespace lookup failure, klog AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.329378] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog ffff88012b63d760), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.330000] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0xD1, should be 0x75 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.330140] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0xE3, should be 0xDC (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.330280] ACPI Warning: Incorrect klog checksum in table [OEMB] - DE, should be D9 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.330488] ACPI Error: No handler for klog Region [SACS] (ffff88011bf101f8) [PCI_Config] (20090903 klog /evregion-319) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.330496] ACPI Error (psparse-0537): klog Method parse/execution failed [PRID.P_D0._STA] (Node klog ffff88011bf0d360), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.330513] ACPI Error (uteval-0250): klog Method execution failed [PRID.P_D0._STA] (Node klog ffff88011bf0d360), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.330528] ACPI Error (psparse-0537): klog Method parse/execution failed [PRID.P_D1._STA] (Node klog ffff88011bf0d460), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.330545] ACPI Error (uteval-0250): klog Method execution failed [PRID.P_D1._STA] (Node klog ffff88011bf0d460), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.330560] ACPI Error (psparse-0537): klog Method parse/execution failed [SECD.S_D0._STA] (Node klog ffff88011bf0d660), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.330576] ACPI Error (uteval-0250): klog Method execution failed [SECD.S_D0._STA] (Node klog ffff88011bf0d660), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.330590] ACPI Error (psparse-0537): klog Method parse/execution failed [SECD.S_D1._STA] (Node klog ffff88011bf0d760), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.330606] ACPI Error (uteval-0250): klog Method execution failed [SECD.S_D1._STA] (Node klog ffff88011bf0d760), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.330759] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog ffff88011763c000), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.330793] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x00, should be 0x9A (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiCheckObjectTypeFailed: Test 1, HIGH klog Kernel message: [ 0.331637] ACPI Error: Needed type klog [Reference], found [Device] ffff88014b82d820 (20090903 klog /exresop-104) klog klog ADVICE: An ACPI object type did not match the expected klog type. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 0.331653] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node klog ffff88014b83cac0), AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiCheckObjectTypeFailed: Test 1, HIGH klog Kernel message: [ 0.331820] ACPI Error: Needed type klog [Reference], found [Device] ffff8800379aa900 (20100428 klog /exresop-104) klog klog ADVICE: An ACPI object type did not match the expected klog type. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 0.331838] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node klog ffff8800379bbba0), AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.331948] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0C, should be 0B (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.332160] ACPI Error (dswload-0677): klog [PCI0] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.332167] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node ffffffff81cf5eb0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.333155] ACPI Warning: Incorrect klog checksum in table [SSDT] - 4A, should be D9 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.333287] ACPI Error: No handler for klog Region [ERAM] (ffff8800bc638d80) [EmbeddedControl] klog (20090903/evregion-319) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.333300] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.HTEV] (Node klog ffff8800bc62e600), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.333326] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] klog (Node ffff8800bc63e9a0), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.333559] ACPI Error: No handler for klog Region [ERAM] (ffff88007db2ad80) [EmbeddedControl] klog (20090903/evregion-319) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.333573] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.HTEV] (Node klog ffff88007db28600), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.333591] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0xF4, should be 0xF3 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.333601] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] klog (Node ffff88007db309a0), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiParameterCountMistmatch: Test 1, klog HIGH Kernel message: [ 0.333734] ACPI Warning for klog _SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, klog ACPI requires 4 (20090903/nspredef-336) klog klog ADVICE: The ACPI Method was executing with a different klog number of parameters than the Method expected. This should klog be fixed. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.333765] ACPI Error (psargs-0359): klog [FZHD] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.333771] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SATA.CHN0._GTM] (Node klog f7014300), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.333853] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SATA.CHN1._GTM] (Node klog f70143f0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.334143] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node klog f7014a38), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.334206] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node klog f7014b28), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.335658] ACPI Error: No handler for klog Region [ECOR] (ffff88007af355e8) [EmbeddedControl] klog (20110413/evregion-373) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.335698] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.SBRG.EC0_._REG] (Node klog ffff88007af36730), AE_NOT_EXIST (20110413/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.335745] ACPI Warning: Incorrect klog checksum in table [OEMB] - 80, should be 78 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.337368] ACPI Warning: Incorrect klog checksum in table [OEMB] - 8B, should be 86 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.337513] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f54243f0), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.337662] ACPI Error (psargs-0359): klog [URES] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.337662] ACPI Error (psparse-0537): Method klog parse/execution failed [_PSW] (Node f701f0a8), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.338155] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog ffff88021302db60), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.338440] ACPI Error: No handler for klog Region [SACS] (ffff88012bb0f1f8) [PCI_Config] (20090903 klog /evregion-319) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.338717] ACPI Error (psparse-0537): klog Method parse/execution failed [PRID.P_D0._STA] (Node klog ffff88012bb111a0), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.338801] ACPI Warning: Incorrect klog checksum in table [OEMB] - 8B, should be 7E (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.338905] ACPI Error (uteval-0250): klog Method execution failed [PRID.P_D0._STA] (Node klog ffff88012bb111a0), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.339363] ACPI Error (psparse-0537): klog Method parse/execution failed [PRID.P_D1._STA] (Node klog ffff88012bb11280), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.339551] ACPI Error (uteval-0250): klog Method execution failed [PRID.P_D1._STA] (Node klog ffff88012bb11280), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.339584] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xE2, should be 0xD5 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.339628] ACPI Warning: Incorrect klog checksum in table [OEMB] - 91, should be 88 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.339857] ACPI Warning: Incorrect klog checksum in table [OEMB] - 6D, should be 60 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.340003] ACPI Error (psparse-0537): klog Method parse/execution failed [SECD.S_D0._STA] (Node klog ffff88012bb11460), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.340121] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x1B, should be 0xE5 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.340193] ACPI Error (uteval-0250): klog Method execution failed [SECD.S_D0._STA] (Node klog ffff88012bb11460), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.340651] ACPI Error (psparse-0537): klog Method parse/execution failed [SECD.S_D1._STA] (Node klog ffff88012bb11540), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.340838] ACPI Error (uteval-0250): klog Method execution failed [SECD.S_D1._STA] (Node klog ffff88012bb11540), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.341276] ACPI Warning: Incorrect klog checksum in table [ASF!] - F2, should be 8D (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.341759] ACPI Error: No handler for klog Region [RAM_] (f74212f8) [EmbeddedControl] (20100428 klog /evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.341812] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1._OSC] (Node klog ffff88017bc14660), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.341843] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1._PDC] (Node klog ffff88017bc14640), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.342116] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.LPCB.SNC_.SBRT] klog (Node f742f228), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.342130] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU2._OSC] (Node klog ffff88017bc14780), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.342160] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU2._PDC] (Node klog ffff88017bc14760), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.342409] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] klog (Node f7422d98), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.342985] ACPI Warning: Incorrect klog checksum in table [OEMB] - 18, should be 13 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.343577] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xD1, should be 0xCA (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.344373] ACPI Warning: Incorrect klog checksum in table [OEMB] - C5, should be B8 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.345244] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xA5, should be 0x9C (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.346079] ACPI Warning: Incorrect klog checksum in table [OEMB] - 7A, should be 71 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 0.347557] ACPI Warning for klog _TZ_.THRM._PSL: Return Package type mismatch at index 0 - klog found [NULL Object Descriptor], expected Reference klog (20100428/nspredef-1059) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.347883] ACPI Warning: Incorrect klog checksum in table [OEMB] - 5C, should be 53 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.348936] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x56, should be 0x49 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.349163] ACPI Warning: Incorrect klog checksum in table [OEMB] - E7, should be DA (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.350013] ACPI Warning: Incorrect klog checksum in table [OEMB] - D3, should be C6 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.350096] ACPI Warning: Incorrect klog checksum in table [ATKG] - 13, should be 53 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.350158] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x13, should be 0xC8 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.350335] ACPI Warning: Incorrect klog checksum in table [SSDT] - 0x83, should be 0x37 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.350784] ACPI Warning: Incorrect klog checksum in table [iEIT] - 0x5C, should be 0x51 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.351065] ACPI Warning: Incorrect klog checksum in table [SSDT] - 0x04, should be 0xCA (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.353198] ACPI Error: No handler for klog Region [ERAM] (ffff88013be53e10) [EmbeddedControl] klog (20090903/evregion-319) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.353215] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.SBRG.EC0_._REG] klog (Node ffff88013be520e0), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.353356] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x05, should be 0x36 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 0.353401] ACPI Warning for klog _SB_.LATA._CRS: Return type mismatch - found Integer, klog expected Buffer (20090903/nspredef-1006) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [HIGH] KlogAcpiExecFailure: Test 1, HIGH Kernel klog message: [ 0.353406] ACPI Error (uteval-0307): Return klog object type is incorrect [_SB_.LATA._CRS] (Node klog ffff88006df2eb00), AE_TYPE klog klog ADVICE: The kernel has most probably detected an error klog while executing ACPI AML. The error lists the ACPI driver klog module and the line number where the bug has been caught klog and the method that caused the error. klog klog FAILED [HIGH] KlogAcpiCheckObjectTypeFailed: Test 1, HIGH klog Kernel message: [ 0.353652] ACPI Error: Needed type klog [Reference], found [Device] ffff8800379a6800 (20090903 klog /exresop-104) klog klog ADVICE: An ACPI object type did not match the expected klog type. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 0.353652] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node klog ffff8800379bba80), AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.355135] ACPI Error: Method parse klog /execution failed [_PR_.CPU0._PDC] (Node ffff88007a738ca8) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPathTooManyParentPrefixes: Test 1, klog HIGH Kernel message: [ 0.355798] ACPI Error: ACPI path has klog too many parent prefixes (^) - reached beyond root node klog (20090903/nsaccess-429) klog klog ADVICE: An ACPI path has too many parent prefixes and has klog fallen outside the root node. This is a bug in the klog firmware. The Name Space lookup on the ACPI path cannot be klog found. klog klog FAILED [HIGH] KlogBiosTimerNotConnectedtoIoApic: Test 1, klog HIGH Kernel message: [ 0.356001] ..MP-BIOS bug: 8254 timer klog not connected to IO-APIC klog klog ADVICE: The BIOS is reporting the ExtINTA I/O APIC input klog from the cascaded 8259A as the timer interrupt input. The klog kernel has detected just one pin, so it has to check the klog timer directly and through the 8259A because of the broken klog BIOS reporting. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.356108] ACPI Error: No handler for klog Region [ECF2] (ffff88013ba313a8) [EmbeddedControl] klog (20090903/evregion-319) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiRegionHasNoHandler: Test 1, HIGH klog Kernel message: [ 0.356113] ACPI Error: Region klog EmbeddedControl(3) has no handler (20090903/exfldio-295) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.356119] ACPI Error (psparse-0537): klog Method parse/execution failed [P8XH] (Node klog ffff88013ba28020), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.356143] ACPI Error (psparse-0537): klog Method parse/execution failed [_GPE._L02] (Node klog ffff88013ba32120), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.356280] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x33, should be 0xD7 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.356754] ACPI Warning: Incorrect klog checksum in table [ASF!] - ED, should be 83 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.357018] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xA6, should be 0xA1 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.357902] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0xE9, should be 0xFE (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.358086] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x11, should be 0x10 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.359183] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f7021a68), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.359915] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x7D, should be 0x59 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.360335] ACPI Warning: Incorrect klog checksum in table [GSCI] - 0x28, should be 0xD4 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiPathTooManyParentPrefixes: Test 1, klog HIGH Kernel message: [ 0.361596] ACPI Error: ACPI path has klog too many parent prefixes (^) - reached beyond root node klog (20100428/nsaccess-429) klog klog ADVICE: An ACPI path has too many parent prefixes and has klog fallen outside the root node. This is a bug in the klog firmware. The Name Space lookup on the ACPI path cannot be klog found. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.362481] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node c091bffc), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.362557] ACPI Error (psparse-0537): klog Method parse/execution failed [] (Node c091bffc), klog AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 0.362606] ACPI Error klog (dsfield-0487): [SMIC] Namespace lookup failure, klog AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.362751] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f40255d0), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiFirmwareError: Test 1, HIGH Kernel klog message: [ 0.362859] [Firmware Bug]: ACPI: BIOS klog _OSI(Linux) query honored via cmdline klog klog ADVICE: ACPI driver has detected an ACPI bug. This klog generally points to a bug in an ACPI table. Examine the klog kernel log for more details. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 0.362870] ACPI Error klog (dsfield-0140): [CAPB] Namespace lookup failure, klog AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.362886] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f7014a80), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.363488] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1._PDC] (Node klog ffff880227048f60), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.363621] ACPI Warning: Incorrect klog checksum in table [OEMB] - 3C, should be 3B 20090521 klog tbutils-246 klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.363728] ACPI Warning: Incorrect klog checksum in table [OEMB] - 75, should be 74 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.363981] ACPI Warning: Incorrect klog checksum in table [OEMB] - BB, should be AE (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 0.364356] ACPI Warning: For klog _SB_.PCI0.P2P_._PRT: Return Package has no elements klog (empty) (20110112/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.364521] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f44285b8), klog AE_ALREADY_EXISTS (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.366917] ACPI Warning: Incorrect klog checksum in table [OEMB] - BD, should be B6 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.367185] ACPI Warning: Incorrect klog checksum in table [OEMB] - B2, should be A5 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.367524] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0xAA, should be 0x59 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.368838] ACPI Warning: Incorrect klog checksum in table [OEMB] - 23, should be 1E (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.369986] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x61, should be 0x58 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.370263] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x73, should be 0xE5 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.371572] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0xFB, should be 0xE5 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.372475] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f5426ca8), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.372684] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node dd825ca8), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.375383] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x90, should be 0x83 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.375585] ACPI Error (dswload-0677): klog [USB0] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.375609] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node c09fb6c8), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.375966] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node c0992f7c), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.376047] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node dd825ca8), klog AE_ALREADY_EXISTS (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.376092] ACPI Error: No handler for klog Region [ECXP] (ffff88007cf31ab0) [EmbeddedControl] klog (20100428/evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.376106] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU0._OSC] (Node klog ffff88007cf3f440), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.376141] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU0._PDC] (Node klog ffff88007cf3f420), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.376733] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f5026ca8), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.378931] ACPI Warning: Incorrect klog checksum in table [OEMB] - 33, should be 2C (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.379815] ACPI Warning: Incorrect klog checksum in table [SSDT] - D5, should be 3E (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.380609] ACPI Warning: Incorrect klog checksum in table [SSDT] - 8C, should be DC (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.381039] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f7016a38), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.381211] ACPI Warning: Incorrect klog checksum in table [OEMB] - 8E, should be 89 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiMmconfigNotReserved: Test 1, klog MEDIUM Kernel message: [ 0.381478] [Firmware Bug]: PCI: klog MMCONFIG at [mem 0xe0000000-0xe06fffff] not reserved in klog ACPI motherboard resources klog klog ADVICE: It appears that PCI config space has been klog configured for a specific device but does not appear to be klog reserved by the ACPI motherboard resources. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.382740] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_._OSC] (Node ffff88003f013ca0) klog , AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.383518] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x0F, should be 0xE7 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.384684] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x4E, should be 0x3F (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.384722] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.HPET._CRS] (Node klog ffff88007db32220), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.384811] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.RTC_._CRS] (Node klog ffff88007db322c0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.385777] ACPI Warning: Incorrect klog checksum in table [TCPA] - 00, should be 89 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.388556] ACPI Warning: Incorrect klog checksum in table [ATKG] - 6A, should be E5 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.388736] ACPI Warning: Incorrect klog checksum in table [OEMB] - 8C, should be 83 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.390341] ACPI Error: [GUR_._BAS] klog Namespace lookup failure, AE_NOT_FOUND (20110112 klog /psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.390354] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.MBIO._CRS] (Node ffff880078f30aa0), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiMmconfigNotReserved: Test 1, klog MEDIUM Kernel message: [ 0.390975] [Firmware Bug]: PCI: klog MMCONFIG at [mem 0xe0000000-0xe08fffff] not reserved in klog ACPI motherboard resources klog klog ADVICE: It appears that PCI config space has been klog configured for a specific device but does not appear to be klog reserved by the ACPI motherboard resources. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 0.393086] ACPI Warning: For klog _TZ_.THRM._PSL: Return Package has no elements (empty) klog (20110413/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.395834] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node klog ffff88013ba393a0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiInvalidPssFrequency: Test 1, klog MEDIUM Kernel message: [ 0.396197] [Firmware Bug]: ACPI: klog Invalid BIOS _PSS frequency: 0x0 MHz klog klog ADVICE: _PSS (Performance Supported States) package has an klog incorrectly define core frequency (first DWORD entry in klog the _PSS package). klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.396945] ACPI Warning: Incorrect klog checksum in table [TCPA] - 00, should be 96 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.397644] ACPI Warning: Incorrect klog checksum in table [ATKG] - F9, should be E5 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.398231] ACPI Warning: Incorrect klog checksum in table [ATKG] - 12, should be 07 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.398290] ACPI Warning: Incorrect klog checksum in table [ATKG] - 01, should be 23 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiFieldExceedsBuffer: Test 1, HIGH klog Kernel message: [ 0.399990] ACPI Error: Field [ASSM] at klog 524320 exceeds Buffer [BUF0] size 688 (bits) (20110112 klog /dsopcode-597) klog klog ADVICE: Failed to initialise an ACPI buffer field, the klog field exceeded the buffer size provided. This is a klog firmware bug. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.399996] ACPI Error: Method parse/execution klog failed [_SB_.MEM_._CRS] (Node ffff8800b8e38000), klog AE_AML_BUFFER_LIMIT (20110112/psparse-536) klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.400012] ACPI Error: Method execution failed klog [_SB_.MEM_._CRS] (Node ffff8800b8e38000), klog AE_AML_BUFFER_LIMIT (20110112/uteval-103) klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.400212] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x00, should be 0x88 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.401117] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0F, should be E7 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.404616] ACPI Warning: Incorrect klog checksum in table [OEMB] - A5, should be A0 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.406016] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.ADP0.ADJP] (Node klog ffff88013ba3c5a0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.406038] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.ADP0._PSR] (Node klog ffff88013ba3c560), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.407719] ACPI Warning: Incorrect klog checksum in table [OEMB] - 72, should be 69 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.408529] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f4c285b8), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.414781] ACPI Warning: Incorrect klog checksum in table [OEMB] - CD, should be C8 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 0.415975] ACPI Warning for klog _TZ_.THRM._PSL: Return Package type mismatch at index 0 - klog found [NULL Object Descriptor], expected Reference klog (20090903/nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.418105] ACPI Warning: Incorrect klog checksum in table [ATKG] - 76, should be FE (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 0.420210] ACPI Error: [CAPD] klog Namespace lookup failure, AE_ALREADY_EXISTS (20110413 klog /dsfield-143) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.420218] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node ffff88022b749b18) klog , AE_ALREADY_EXISTS (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiFieldExceedsBuffer: Test 1, HIGH klog Kernel message: [ 0.420241] ACPI Error: Field [I9MN] at klog 544 exceeds Buffer [IORT] size 464 (bits) (20100428 klog /dsopcode-597) klog klog ADVICE: Failed to initialise an ACPI buffer field, the klog field exceeded the buffer size provided. This is a klog firmware bug. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.420248] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPC0.PMIO._CRS] (Node klog ffff88013142fac0), AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.420284] ACPI Error (uteval-0250): Method klog execution failed [_SB_.PCI0.LPC0.PMIO._CRS] (Node klog ffff88013142fac0), AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.420323] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0xC3, should be 0x59 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiPackageListLargerThanExpected: Test klog 1, HIGH Kernel message: [ 0.422032] ACPI Warning klog (dsobject-0501): Package List length (6) larger than klog NumElements count (3), truncated klog klog ADVICE: A Method has returned a Package List that was klog larger than expected. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 0.424909] ACPI Warning for klog _SB_.PCI0.P2P_._PRT: Return Package has no elements klog (empty) (20100428/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.426823] ACPI Error (psargs-0359): klog [_PR_.CPU0._PSS] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.426833] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.AC__.ADJP] (Node klog ffff88007b32ee00), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.426872] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.AC__._PSR] (Node klog ffff88007b32edc0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog message: [ 0.429245] ACPI Warning for _PR_.CPU0._TSD: klog Incorrectly formed Package, attempting repair (20090903 klog /nsrepair-200) klog klog ADVICE: ACPI AML interpreter has found some non-conforming klog AML code. This should be investigated and fixed. klog klog FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog message: [ 0.430887] ACPI Warning for _PR_.CPU1._TSD: klog Incorrectly formed Package, attempting repair (20090903 klog /nsrepair-200) klog klog ADVICE: ACPI AML interpreter has found some non-conforming klog AML code. This should be investigated and fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.434593] ACPI Warning: Incorrect klog checksum in table [GSCI] - D2, should be A5 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.436921] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node klog ffff88013b62ccc0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.438019] ACPI Warning: Incorrect klog checksum in table [ATKG] - C8, should be E5 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiParameterCountMistmatch: Test 1, klog HIGH Kernel message: [ 0.440405] ACPI Warning for klog _SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, klog ACPI requires 4 (20100428/nspredef-352) klog klog ADVICE: The ACPI Method was executing with a different klog number of parameters than the Method expected. This should klog be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.441805] ACPI Warning: Incorrect klog checksum in table [OEMB] - B2, should be B1 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.444897] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f4c252a0), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.450562] ACPI Error: Method parse/execution klog failed [_SB_.PCI0._OSC] (Node ffff8800b8e33ca8), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.451517] ACPI Error (psargs-0359): klog [GUR_._BAS] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.451682] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.MBIO._CRS] (Node klog ffff88007bb2a880), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 0.453111] ACPI Warning for klog _SB_.BAT1._BIF: Return Package type mismatch at index 12 - klog found Integer, expected String/Buffer (20090903 klog /nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 0.454555] ACPI Warning for klog _PR_.CPU0._PSS: Return Package type mismatch at index 3 - klog found Integer, expected Package (20100428/nspredef-1059) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 0.454838] ACPI Warning for klog _PR_.CPU1._PSS: Return Package type mismatch at index 3 - klog found Integer, expected Package (20100428/nspredef-1059) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.455674] ACPI Warning: Incorrect klog checksum in table [SSDT] - 83, should be 7F (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.459126] ACPI Warning: Incorrect klog checksum in table [SSDT] - 4C, should be 12 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 0.460622] ACPI Warning: For klog _SB_.PCI0.P32_._PRT: Return Package has no elements klog (empty) (20110112/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 0.461767] ACPI Error: [CAPB] klog Namespace lookup failure, AE_ALREADY_EXISTS (20110413 klog /dsfield-143) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.461793] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node ffff88003cdb0f00) klog , AE_ALREADY_EXISTS (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.462573] ACPI Warning: Incorrect klog checksum in table [OEMB] - 95, should be 5E 20090521 klog tbutils-246 klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.468216] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU1._CST] (Node klog ffff88007c5cc380), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.468859] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog ffff88003f1afdc0), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.475076] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SATA.CHN0._GTM] (Node klog f701eb28), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.475159] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SATA.CHN1._GTM] (Node klog f701ec18), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.475441] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node klog f70202a0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.475506] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node klog f7020390), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.479385] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x00, should be 0x88 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.479821] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f3c28a68), klog AE_ALREADY_EXISTS (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.481067] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f4028a68), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.482955] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node ffff88003d9b0f00) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.484974] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f3c28a68), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 0.485955] ACPI Warning: For klog _TZ_.THRM._PSL: Return Package type mismatch at index 0 - klog found [NULL Object Descriptor], expected Reference klog (20110112/nspredef-1059) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.487180] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x33, should be 0x32 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.487365] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x99, should be 0x98 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.490256] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x22, should be 0x53 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiParameterCountMistmatch: Test 1, klog HIGH Kernel message: [ 0.490491] ACPI Warning: For klog _SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, klog ACPI requires 4 (20110413/nspredef-352) klog klog ADVICE: The ACPI Method was executing with a different klog number of parameters than the Method expected. This should klog be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.491491] ACPI Warning: Incorrect klog checksum in table [SSDT] - 0x4A, should be 0xD9 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.492569] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node ffffffff81a08440), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 0.492648] ACPI Error klog (dswload-0781): [PRID] Namespace lookup failure, klog AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.492655] ACPI Error (psparse-0537): klog Method parse/execution failed [] (Node ffffffff81a08440), klog AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.492811] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f5428a68), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.494198] ACPI Warning: Incorrect klog checksum in table [SSDT] - 0x37, should be 0xC7 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.496094] ACPI Warning: Incorrect klog checksum in table [TCPA] - F8, should be 9C (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 0.497662] ACPI Warning klog (nspredef-0357): _SB_.PCI0.P2P_._PRT: Return Package has klog no elements (empty) [20080926] klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.497913] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0xFA, should be 0xF9 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.498775] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0xB2, should be 0xB1 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.498976] ACPI Warning: Incorrect klog checksum in table [GSCI] - 7B, should be 04 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.500043] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node klog ffff8800ac22d040), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.501138] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f3c28a38), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.505041] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f4028a38), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.513609] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f5428a38), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.516158] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f74296c0), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.526190] ACPI Warning klog (tbutils-0217): Incorrect checksum in table [OEMB] - F3, klog should be EE [20080926] klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.527455] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f5422df8), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.533028] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node ffff88003d9b0bb8) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.534826] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x00, should be 0x7F (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.538081] ACPI Warning: Incorrect klog checksum in table [OEMB] - C1, should be BC (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.539131] ACPI Error: No handler for klog Region [RAM_] (ffff88012fa36a20) [EmbeddedControl] klog (20110112/evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.539149] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.LPCB.SNC_.SBRT] (Node klog ffff88012fa4f398), AE_NOT_EXIST (20110112/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.539161] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node klog ffff88012fa396b8), AE_NOT_EXIST (20110112/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.540036] ACPI Error: [_PR_.C002._PPC] klog Namespace lookup failure, AE_NOT_FOUND (20110112 klog /psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.540046] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.LPC0.EC0_._REG] (Node ffff880107e623c0), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 0.541238] ACPI Error: Method parse/execution klog failed [_TZ_.C2E8] (Node f482d108), AE_AML_PACKAGE_LIMIT klog (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 0.541258] ACPI Error: Method parse/execution klog failed [_TZ_.C2E7] (Node f482d0f0), AE_AML_PACKAGE_LIMIT klog (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 0.541277] ACPI Error: Method parse/execution klog failed [_TZ_.TZ2_._TMP] (Node f482d7c8), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.548650] ACPI Warning: Incorrect klog checksum in table [TCPA] - 00, should be 87 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.550271] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0xDC, should be 0x0E (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.563415] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node ffff88003d9af848) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 0.566332] ACPI Warning: For klog _TZ_.THRM._AL0: Return Package has no elements (empty) klog (20110413/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.568235] ACPI Warning: Incorrect klog checksum in table [TCPA] - 00, should be 7F 20090521 klog tbutils-246 klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.581397] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x24, should be 0x16 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 0.583718] ACPI Warning: klog _SB_.PCI0.PCI2._PRT: Return Package has no elements klog (empty) 20090521 nspredef-434 klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.591409] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x1E, should be 0x16 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiFieldExceedsBuffer: Test 1, HIGH klog Kernel message: [ 0.591722] ACPI Error: Field [ASSM] at klog 524320 exceeds Buffer [BUF0] size 880 (bits) (20100428 klog /dsopcode-597) klog klog ADVICE: Failed to initialise an ACPI buffer field, the klog field exceeded the buffer size provided. This is a klog firmware bug. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.591729] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.MEM_._CRS] (Node klog ffff8800b4040f60), AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.591760] ACPI Error (uteval-0250): Method klog execution failed [_SB_.MEM_._CRS] (Node ffff8800b4040f60), klog AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.593045] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.PPCE] (Node f702c7b0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.593072] ACPI Error (psparse-0537): Method klog parse/execution failed [EV4_] (Node f7019648), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.593095] ACPI Error (psparse-0537): Method klog parse/execution failed [SMIE] (Node f702ea08), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.593119] ACPI Error (psparse-0537): Method klog parse/execution failed [NEVT] (Node f702e9c0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.593142] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node klog f702e678), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiConvertedBufferToString: Test 1, klog HIGH Kernel message: [ 0.597675] ACPI Warning for klog _SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to klog expected String at index 9 (20090903/nsrepair-132) klog klog ADVICE: Method returned a Buffer type instead of a String klog type and ACPI driver automatically converted it to a klog String. It is worth fixing this in the DSDT or SSDT even klog if the kernel fixes it at run time. klog klog FAILED [HIGH] KlogAcpiConvertedBufferToString: Test 1, klog HIGH Kernel message: [ 0.597680] ACPI Warning for klog _SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to klog expected String at index 10 (20090903/nsrepair-132) klog klog ADVICE: Method returned a Buffer type instead of a String klog type and ACPI driver automatically converted it to a klog String. It is worth fixing this in the DSDT or SSDT even klog if the kernel fixes it at run time. klog klog FAILED [HIGH] KlogAcpiConvertedBufferToString: Test 1, klog HIGH Kernel message: [ 0.597685] ACPI Warning for klog _SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to klog expected String at index 11 (20090903/nsrepair-132) klog klog ADVICE: Method returned a Buffer type instead of a String klog type and ACPI driver automatically converted it to a klog String. It is worth fixing this in the DSDT or SSDT even klog if the kernel fixes it at run time. klog klog FAILED [HIGH] KlogAcpiConvertedBufferToString: Test 1, klog HIGH Kernel message: [ 0.597689] ACPI Warning for klog _SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to klog expected String at index 12 (20090903/nsrepair-132) klog klog ADVICE: Method returned a Buffer type instead of a String klog type and ACPI driver automatically converted it to a klog String. It is worth fixing this in the DSDT or SSDT even klog if the kernel fixes it at run time. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.600451] ACPI Error (psargs-0359): klog [_SB_.PCI0.EGBA] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.600456] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPC_.MBRD._CRS] (Node klog f7416318), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.612305] ACPI Warning: Incorrect klog checksum in table [SSDT] - 6C, should be FB (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 0.612793] ACPI Error: [CAPB] klog Namespace lookup failure, AE_ALREADY_EXISTS (20110112 klog /dsfield-143) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.612820] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node ffff88003d9ae190) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.614155] ACPI Warning: Incorrect klog checksum in table [SSDT] - 37, should be C7 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 0.620955] ACPI Warning for klog _TZ_.THRM._PSL: Return Package type mismatch at index 0 - klog found Processor, expected Reference (20090903 klog /nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.621415] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.PPCE] (Node f702c828), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.621443] ACPI Error (psparse-0537): Method klog parse/execution failed [EV4_] (Node f7019ed0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.621468] ACPI Error (psparse-0537): Method klog parse/execution failed [SMIE] (Node f702ea98), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.621493] ACPI Error (psparse-0537): Method klog parse/execution failed [NEVT] (Node f702ea50), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.621518] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node klog f702e708), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiMmconfigNotReserved: Test 1, klog MEDIUM Kernel message: [ 0.625680] [Firmware Bug]: PCI: klog MMCONFIG at [mem 0xe0000000-0xefffffff] not reserved in klog ACPI motherboard resources klog klog ADVICE: It appears that PCI config space has been klog configured for a specific device but does not appear to be klog reserved by the ACPI motherboard resources. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.627242] ACPI Error (psargs-0359): klog [_SB_.PCI0.EC__.HOTT] Namespace lookup failure, klog AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.627255] ACPI Error (psparse-0537): Method klog parse/execution failed [_TZ_.TZ01._HOT] (Node klog ffff88013ba3ae60), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.628646] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xFA, should be 0x1E (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiErstInvalid: Test 1, HIGH Kernel klog message: [ 0.628687] [Firmware Bug]: ERST: ERST table is klog invalid klog klog ADVICE: The ACPI Error Record Serialization (ERST) driver klog checked the ERST table and got the table invalid. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.630258] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node ffff88007af370a0) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.641157] ACPI Warning: Incorrect klog checksum in table [OEMB] - C4, should be C1 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiMmconfigNotReserved: Test 1, klog MEDIUM Kernel message: [ 0.644838] [Firmware Bug]: PCI: klog MMCONFIG at [mem 0xe0000000-0xe09fffff] not reserved in klog ACPI motherboard resources klog klog ADVICE: It appears that PCI config space has been klog configured for a specific device but does not appear to be klog reserved by the ACPI motherboard resources. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.646493] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x5F, should be 0x5A (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.651383] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_._OSC] (Node ffff88007f416680) klog , AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.652133] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node ffffffff81a2e040), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.652695] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node ffffffff81a0f040), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.653163] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node ffff88007ab2f460) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.653985] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x4A, should be 0x49 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.654642] ACPI Error: Method parse klog /execution failed [_PR_.CPU1._PDC] (Node ffff88020f44deb0) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.654994] ACPI Error: Method parse klog /execution failed [_PR_.CPU2._PDC] (Node ffff88020f44df50) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.655350] ACPI Error: Method parse klog /execution failed [_PR_.CPU3._PDC] (Node ffff88020f454000) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.655369] ACPI Error (psargs-0359): klog [_SB_.PCI0.PSKB] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.655376] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPC0.SIO_.KBC0._STA] klog (Node ffff880236c47260), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.655576] ACPI Error (psargs-0359): klog [_SB_.PCI0.PSMS] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.655581] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPC0.SIO_.MSE0._STA] klog (Node ffff880236c47340), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.656750] ACPI Warning: Incorrect klog checksum in table [OEMB] - 06, should be 05 20090521 klog tbutils-246 klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 0.658002] ACPI Warning for klog _SB_.PCI0.SATA.PRT0._GTF: Return type mismatch - found klog Integer, expected Buffer (20090903/nspredef-1006) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.658697] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog ffff88023fc14aa0), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.662008] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node ffffffff81a0c440), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [LOW] KlogAcpiPciCrsNoEndAddr: Test 1, LOW Kernel klog message: [ 0.663194] [Firmware Bug]: ACPI: no secondary klog bus range in _CRS klog klog ADVICE: ACPI evaluated a _CRS (Current Resource Setting) klog object to determine the start and end of of a PCI klog downsteam bus range and did not find the end address, so klog an end address of 0xff is being assumed klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.664875] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x45, should be 0x44 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.666686] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x9E, should be 0x9D (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.670109] ACPI Warning: Incorrect klog checksum in table [OEMB] - 5B, should be 4E (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.670182] ACPI Warning: Incorrect klog checksum in table [TAMG] - C3, should be C2 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.670980] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x00, should be 0x7F (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.673104] ACPI Warning: Incorrect klog checksum in table [OEMB] - 8C, should be 7D (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.674282] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x15, should be 0x14 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 0.674920] ACPI Error: [SERN] klog Namespace lookup failure, AE_ALREADY_EXISTS (20110413 klog /dswload2-316) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.674938] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.LPC_.EC__.GBIF] (Node klog f3829120), AE_ALREADY_EXISTS (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.674963] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.LPC_.EC__.BAT1._BIF] (Node klog f3829330), AE_ALREADY_EXISTS (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.675162] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x05, should be 0x04 (20110413 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiConvertedBufferToString: Test 1, klog HIGH Kernel message: [ 0.677370] ACPI Warning for klog _SB_.PCI0.BAT0._BIF: Converted Buffer to expected String klog at index 9 (20090903/nsrepair-132) klog klog ADVICE: Method returned a Buffer type instead of a String klog type and ACPI driver automatically converted it to a klog String. It is worth fixing this in the DSDT or SSDT even klog if the kernel fixes it at run time. klog klog FAILED [HIGH] KlogAcpiConvertedBufferToString: Test 1, klog HIGH Kernel message: [ 0.677375] ACPI Warning for klog _SB_.PCI0.BAT0._BIF: Converted Buffer to expected String klog at index 12 (20090903/nsrepair-132) klog klog ADVICE: Method returned a Buffer type instead of a String klog type and ACPI driver automatically converted it to a klog String. It is worth fixing this in the DSDT or SSDT even klog if the kernel fixes it at run time. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.677386] ACPI Warning: Incorrect klog checksum in table [OEMB] - 94, should be 93 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.678233] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x55, should be 0x50 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.678877] ACPI Warning: Incorrect klog checksum in table [OEMB] - 88, should be 7F (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.681297] ACPI Warning: Incorrect klog checksum in table [OEMB] - DA, should be D9 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.688066] ACPI Warning: Incorrect klog checksum in table [OEMB] - 60, should be 5F (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.695029] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node ffffffff81a0e440), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.695887] ACPI Warning: Incorrect klog checksum in table [OEMB] - C1, should be C0 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.696587] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xEE, should be 0xE6 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.697769] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xFC, should be 0xF7 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiAmdK8ExpectedPssObjects: Test 1, klog MEDIUM Kernel message: [ 0.700202] [Firmware Bug]: klog powernow-k8: No PSB or ACPI _PSS objects klog klog ADVICE: The _PSS object (Performance Supported States) is klog an optional object that indicates the number of supported klog processor performance states. The powernow-k8 driver klog source states: If you see this message, complain to BIOS klog manufacturer. If he tells you "we do not support Linux" or klog some similar nonsense, remember that Windows 2000 uses the klog same legacy mechanism that the old Linux PSB driver uses. klog Tell them it is broken with Windows 2000. The reference to klog the AMD documentation is chapter 9 in the BIOS and Kernel klog Developer's Guide, which is available on www.amd.com. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.702121] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x84, should be 0x7B (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.705041] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xF3, should be 0xF2 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 0.710267] ACPI Error: Method parse/execution klog failed [_TZ_.PSWT] (Node f7424bb8), AE_AML_PACKAGE_LIMIT klog (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 0.710275] ACPI Error: Method parse/execution klog failed [_TZ_.GTTP] (Node f7424b88), AE_AML_PACKAGE_LIMIT klog (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 0.710281] ACPI Error: Method parse/execution klog failed [_TZ_.GFXZ._TMP] (Node f74249a8), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.710890] ACPI Warning: Incorrect klog checksum in table [OEMB] - DF, should be D2 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 0.712727] ACPI Error: Method parse/execution klog failed [_TZ_.DTSZ._TMP] (Node f7424ca8), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.715065] ACPI Warning: Incorrect klog checksum in table [OEMB] - 67, should be 64 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.715951] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x9B, should be 0x93 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.717350] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x5C, should be 0x55 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.719490] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x3A, should be 0x39 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.721822] ACPI Error (dswload-0659): klog [USB0] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.722199] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node ffffffff81a4d180), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 0.725417] ACPI Warning for klog _SB_.PCI0.LPC_.SYSR._CRS: Return type mismatch - found klog Integer, expected Buffer (20090903/nspredef-1006) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [HIGH] KlogAcpiExecFailure: Test 1, HIGH Kernel klog message: [ 0.725429] ACPI Error (uteval-0307): Return klog object type is incorrect [_SB_.PCI0.LPC_.SYSR._CRS] (Node klog ffff88013ba46cc0), AE_TYPE klog klog ADVICE: The kernel has most probably detected an error klog while executing ACPI AML. The error lists the ACPI driver klog module and the line number where the bug has been caught klog and the method that caused the error. klog klog FAILED [HIGH] KlogAcpiExecFailure: Test 1, HIGH Kernel klog message: [ 0.725450] ACPI Error: Type returned from _CRS klog was incorrect: Integer, expected Btypes: 4 (20090903 klog /uteval-313) klog klog ADVICE: The kernel has most probably detected an error klog while executing ACPI AML. The error lists the ACPI driver klog module and the line number where the bug has been caught klog and the method that caused the error. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.725974] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x7E, should be 0x75 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 0.736425] ACPI Warning: For klog _SB_.PCI0.PT02._PRT: Return Package has no elements klog (empty) (20110413/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.743273] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f701f0d8), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 0.743525] ACPI Error: [CAPD] klog Namespace lookup failure, AE_ALREADY_EXISTS (20110112 klog /dsfield-143) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.743530] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f50273d8), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiParameterCountMistmatch: Test 1, klog HIGH Kernel message: [ 0.743538] ACPI Warning: For klog _SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, klog ACPI requires 4 (20110112/nspredef-352) klog klog ADVICE: The ACPI Method was executing with a different klog number of parameters than the Method expected. This should klog be fixed. klog klog FAILED [HIGH] KlogAcpiFieldExceedsBuffer: Test 1, HIGH klog Kernel message: [ 0.744106] ACPI Error: Field [ASSM] at klog 524320 exceeds Buffer [BUF0] size 880 (bits) (20090903 klog /dsopcode-596) klog klog ADVICE: Failed to initialise an ACPI buffer field, the klog field exceeded the buffer size provided. This is a klog firmware bug. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.744114] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.MEM_._CRS] (Node klog ffff88013ba44cc0), AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 0.744142] ACPI Error (uteval-0250): Method klog execution failed [_SB_.MEM_._CRS] (Node ffff88013ba44cc0), klog AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.755111] ACPI Warning: Incorrect klog checksum in table [OEMB] - 2F, should be 2A (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.772223] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f4c250d8), klog AE_ALREADY_EXISTS (20101013/psparse-537) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.775831] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x00, should be 0x87 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.777581] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0xF9, should be 0xF8 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.779737] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x83, should be 0x82 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.780967] ACPI Warning: Incorrect klog checksum in table [TAMG] - FA, should be F9 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.781225] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x10, should be 0x0F (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.781345] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0xB2, should be 0xB1 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.782613] ACPI Error (psargs-0359): klog [RAMB] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.783246] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x7D, should be 0x7C (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.786539] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x2D, should be 0x2C (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.787253] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x10, should be 0x0F (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.788032] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x04, should be 0x03 (20110413 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [CRITICAL] KlogAcpiSbOscAeAmlBufferLimit: Test 1, klog CRITICAL Kernel message: [ 0.788418] ACPI Error klog (psparse-0537): Method parse/execution failed [_SB_._OSC] klog (Node ffff88030a048b40), AE_AML_BUFFER_LIMIT klog klog ADVICE: Section 6.2.10.2 of V4.0a of the ACPI klog specification states that the _OSC Method should be passed klog an 8 byte buffer of 2 x 32 DWORDs, however it appears that klog the method is possibly trying to access data outside this klog buffer. This is a bug in the _OSC method. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.788607] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0xA2, should be 0xA1 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.790513] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.LPC_.EC__.GBIF] (Node klog ffff880079f39f78), AE_ALREADY_EXISTS (20110112 klog /psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.790526] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.LPC_.EC__.BAT0._BIF] (Node klog ffff880079f37118), AE_ALREADY_EXISTS (20110112 klog /psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.791560] ACPI Warning: Incorrect klog checksum in table [SSDT] - 0x3F, should be 0x1F (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 0.794367] ACPI Warning for klog _PR_.P002._PSD: Return type mismatch - found Integer, klog expected Package (20090903/nspredef-1006) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.795423] ACPI Warning: Incorrect klog checksum in table [SSDT] - 0x3F, should be 0x1F (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.805111] ACPI Warning: Incorrect klog checksum in table [TCPA] - 00, should be 7E (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [LOW] KlogAcpiDodWithNoDos: Test 1, LOW Kernel klog message: [ 0.810246] [Firmware Bug]: ACPI(Z01I) defines klog _DOD but not _DOS klog klog ADVICE: ACPI Method _DOD (Enumerate all devices attached klog to display adapter) is defined but we should also have klog _DOS (Enable/Disable output switching) defined but it's klog been omitted. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.810687] ACPI Error (dswload-0659): klog [DD02] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.810756] ACPI Error (dswload-0659): klog [EHC1] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.820565] ACPI Error: [FZHD] Namespace klog lookup failure, AE_NOT_FOUND (20110112/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.820571] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SATA.CHN0._GTM] (Node ffff880127632b40), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.820632] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SATA.CHN1._GTM] (Node ffff880127632cd0), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.821065] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node ffff880127634758), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.821112] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node ffff8801276348e8), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 0.822836] ACPI Warning: For klog _SB_.PCI0.PCI2._PRT: Return Package has no elements klog (empty) (20110112/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.831199] ACPI Warning: Incorrect klog checksum in table [OEMB] - B7, should be B6 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.860349] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.PPCE] (Node ffff88023704ea40) klog , AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.860380] ACPI Error (psparse-0537): Method klog parse/execution failed [EV4_] (Node ffff8802370590e0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.860410] ACPI Error (psparse-0537): Method klog parse/execution failed [SMIE] (Node ffff8802370522a0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.860439] ACPI Error (psparse-0537): Method klog parse/execution failed [NEVT] (Node ffff880237052240), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.860468] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node klog ffff880237050de0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.870147] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0._OSC] (Node klog ffff88013ba29e80), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.872036] ACPI Warning: Incorrect klog checksum in table [OEMB] - EC, should be E3 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 0.873454] ACPI Warning for klog _SB_.PCI0.PCIB._PRT: Return Package has no elements klog (empty) (20090903/nspredef-433) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.875591] ACPI Warning: Incorrect klog checksum in table [OEMB] - 14, should be 13 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.877093] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x89, should be 0x80 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 0.879606] ACPI Error (psargs-0359): klog [MPEN] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.879794] ACPI Error (psparse-0537): Method klog parse/execution failed [_TZ_.TZ00._PSL] (Node klog ffff88015ba4de00), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 0.888177] ACPI Warning for klog _SB_.BAT1._BST: Return Package type mismatch at index 2 - klog found [NULL Object Descriptor], expected Integer (20090903 klog /nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 0.890080] ACPI Error: No handler for klog Region [RAM_] (ffff880133a35a20) [EmbeddedControl] klog (20100428/evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiRegionHasNoHandler: Test 1, HIGH klog Kernel message: [ 0.890253] ACPI Error: Region klog EmbeddedControl(0x3) has no handler (20100428/exfldio-293) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.890421] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.LPCB.SNC_.SBRT] klog (Node ffff880133a49620), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 0.890696] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] klog (Node ffff880133a385e0), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.892097] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.PPCE] (Node ffff88021704e920) klog , AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.892124] ACPI Error (psparse-0537): Method klog parse/execution failed [EV4_] (Node ffff880217056700), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.892147] ACPI Error (psparse-0537): Method klog parse/execution failed [SMIE] (Node ffff880217052180), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.892171] ACPI Error (psparse-0537): Method klog parse/execution failed [NEVT] (Node ffff880217052120), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.892195] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node klog ffff880217050cc0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.892915] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xCE, should be 0xCD (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.899338] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0xDD, should be 0xD4 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.900692] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.PPCE] (Node ffff88021704e960) klog , AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.900729] ACPI Error (psparse-0537): Method klog parse/execution failed [EV4_] (Node ffff880217059000), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.900753] ACPI Error (psparse-0537): Method klog parse/execution failed [SMIE] (Node ffff8802170521c0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.900776] ACPI Error (psparse-0537): Method klog parse/execution failed [NEVT] (Node ffff880217052160), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.900801] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node klog ffff880217050d00), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.905032] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.PPCE] (Node ffff88021304e940) klog , AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.905061] ACPI Error (psparse-0537): Method klog parse/execution failed [EV4_] (Node ffff8802130576a0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.905085] ACPI Error (psparse-0537): Method klog parse/execution failed [SMIE] (Node ffff8802130521a0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.905110] ACPI Error (psparse-0537): Method klog parse/execution failed [NEVT] (Node ffff880213052140), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.905135] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node klog ffff880213050ce0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 0.905920] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.C000.C264] (Node f7024e58), klog AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 0.905985] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.C000._PSS] (Node f7024f30), klog AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiMissingPssPct: Test 1, HIGH Kernel klog message: [ 0.906063] [Firmware Bug]: BIOS needs update for klog CPU frequency support klog klog ADVICE: Having _PPC but missing frequencies (_PSS, _PCT) klog is a good hint that the BIOS is older than the CPU and klog does not know the CPU frequencies. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.940265] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x14, should be 0x13 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 0.940948] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f7421fc0), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.941821] ACPI Warning: Incorrect klog checksum in table [SSDT] - 0x3F, should be 0x91 (20110413 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.943511] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x00, should be 0x7E (20110413 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.944156] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.ACAD._PSR] (Node klog ffff88013384d720), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 0.967528] ACPI Warning for klog _TZ_.THRM._AL0: Return Package has no elements (empty) klog (20100428/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 0.972652] ACPI Warning: Incorrect klog checksum in table [OEMB] - FA, should be F7 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 0.990917] ACPI Warning for klog _SB_.PCI0.FNC2.PRT0._GTF: Return type mismatch - found klog Integer, expected Buffer (20090903/nspredef-1006) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 0.991675] ACPI Warning for klog _SB_.PCI0.FNC2.PRT1._GTF: Return type mismatch - found klog Integer, expected Buffer (20090903/nspredef-1006) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 0.992685] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node ffffffff81cf6eb0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.004972] ACPI Error (psparse-0537): Method klog parse/execution failed [CPUT] (Node f701c150), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.005015] ACPI Error (psparse-0537): Method klog parse/execution failed [PSSC] (Node f701c168), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.005055] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node klog f702f3c0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.005834] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x1D, should be 0x1C (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.009421] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.ACAD._PSR] (Node klog f701aa98), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.020525] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0xE8, should be 0xE7 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog message: [ 1.020868] ACPI Warning for _PR_.CPU0._PSD: klog Incorrectly formed Package, attempting repair (20090903 klog /nsrepair-200) klog klog ADVICE: ACPI AML interpreter has found some non-conforming klog AML code. This should be investigated and fixed. klog klog FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog message: [ 1.021557] ACPI Warning for _PR_.CPU1._PSD: klog Incorrectly formed Package, attempting repair (20090903 klog /nsrepair-200) klog klog ADVICE: ACPI AML interpreter has found some non-conforming klog AML code. This should be investigated and fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.023813] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x82, should be 0x81 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiInvalidThrottlingState: Test 1, HIGH klog Kernel message: [ 1.026272] ACPI Warning klog (processor_throttling-0843): Invalid throttling state, klog reset klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 1.027573] ACPI Error: No handler for klog Region [ERAM] (ffff880133e3e798) [EmbeddedControl] klog (20090903/evregion-319) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 1.027587] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.DOCK._STA] (Node klog ffff880133e48620), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 1.027653] ACPI Error (uteval-0250): klog Method execution failed [_SB_.PCI0.DOCK._STA] (Node klog ffff880133e48620), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [CRITICAL] KlogAcpiNoValidCrt: Test 1, CRITICAL klog Kernel message: [ 1.125427] [Firmware Bug]: No valid trip klog found klog klog ADVICE: No valid ACPI _CRT (Critical Trip Point) was klog found. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.158298] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_._OSC] (Node f701b648), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 1.167050] ACPI Error: [CDW1] Namespace klog lookup failure, AE_NOT_FOUND (20110316/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.167226] ACPI Error: Method parse/execution klog failed [_SB_._OSC] (Node f4422648), AE_NOT_FOUND (20110316 klog /psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.168945] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x04, should be 0xFD (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.174038] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0x00, should be 0x9B (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiAmdK8ExpectedPssObjects: Test 1, klog MEDIUM Kernel message: [ 1.176461] [Firmware Bug]: klog powernow-k8: No compatible ACPI _PSS objects found. klog klog ADVICE: The _PSS object (Performance Supported States) is klog an optional object that indicates the number of supported klog processor performance states. The powernow-k8 driver klog source states: If you see this message, complain to BIOS klog manufacturer. If he tells you "we do not support Linux" or klog some similar nonsense, remember that Windows 2000 uses the klog same legacy mechanism that the old Linux PSB driver uses. klog Tell them it is broken with Windows 2000. The reference to klog the AMD documentation is chapter 9 in the BIOS and Kernel klog Developer's Guide, which is available on www.amd.com. klog klog FAILED [MEDIUM] KlogAcpiTryNewAmdFirmware: Test 1, MEDIUM klog Kernel message: [ 1.176462] [Firmware Bug]: powernow-k8: klog Try again with latest BIOS. klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.179893] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x81, should be 0x59 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [LOW] KlogAcpiDodWithNoDos: Test 1, LOW Kernel klog message: [ 1.183989] [Firmware Bug]: ACPI(PEGD) defines klog _DOD but not _DOS klog klog ADVICE: ACPI Method _DOD (Enumerate all devices attached klog to display adapter) is defined but we should also have klog _DOS (Enable/Disable output switching) defined but it's klog been omitted. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 1.184923] ACPI Warning: For klog _SB_.PCI0.P0P1._PRT: Return Package has no elements klog (empty) (20110413/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 1.186079] ACPI Error: [BRTW] Namespace klog lookup failure, AE_NOT_FOUND (20110112/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.186087] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0.DD03._BCM] (Node f4c2a588), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.187842] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU0.PPC_] (Node f7450168), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.187891] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU0._PPC] (Node f74500c0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.188370] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU1._PPC] (Node f7450150), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.188776] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU2._PPC] (Node f74502b8), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.189190] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU3._PPC] (Node f7450258), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.196055] ACPI Error: Method parse/execution klog failed [_SB_.PCI0._OSC] (Node f3824270), AE_NOT_FOUND klog (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 1.210593] ACPI Warning: For klog _SB_.PCI0.PCIB._PRT: Return Package has no elements klog (empty) (20101013/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 1.212692] ACPI Warning: For klog _TZ_.THRM._AL0: Return Package has no elements (empty) klog (20110112/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 1.214748] ACPI Error: [_T_1] klog Namespace lookup failure, AE_ALREADY_EXISTS (20110112 klog /dswload-802) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 1.214761] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.PEGP.VGA_.LCD_.GBQC] (Node klog f3023438), AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 1.214775] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.PEGP.VGA_.LCD_._BQC] (Node klog f3023420), AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 1.222641] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.PEGP.VGA_.LCD1.GBQC] (Node klog f30235b8), AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 1.222655] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.PEGP.VGA_.LCD1._BQC] (Node klog f30235a0), AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 1.224060] ACPI Error (psparse-0537): Method parse klog /execution failed [_SB_.BAT1._STA] (Node f7023b10), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.228128] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node klog f702a570), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 1.229185] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0._OSC] (Node klog f70140d8), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog message: [ 1.230869] ACPI Warning for _PR_.CPU0._PSS: klog SubPackage[15,16] - suspicious power dissipation values klog (20100428/nsrepair2-403) klog klog ADVICE: ACPI AML interpreter has found some non-conforming klog AML code. This should be investigated and fixed. klog klog FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog message: [ 1.231049] ACPI Warning for _PR_.CPU1._PSS: klog SubPackage[15,16] - suspicious power dissipation values klog (20100428/nsrepair2-403) klog klog ADVICE: ACPI AML interpreter has found some non-conforming klog AML code. This should be investigated and fixed. klog klog FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog message: [ 1.231224] ACPI Warning for _PR_.CPU2._PSS: klog SubPackage[15,16] - suspicious power dissipation values klog (20100428/nsrepair2-403) klog klog ADVICE: ACPI AML interpreter has found some non-conforming klog AML code. This should be investigated and fixed. klog klog FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog message: [ 1.231399] ACPI Warning for _PR_.CPU3._PSS: klog SubPackage[15,16] - suspicious power dissipation values klog (20100428/nsrepair2-403) klog klog ADVICE: ACPI AML interpreter has found some non-conforming klog AML code. This should be investigated and fixed. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 1.246159] ACPI Error: No handler for klog Region [ECRM] (f6cedba0) [EmbeddedControl] (20110413 klog /evregion-373) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiKlogRegionNoHandler: Test 1, HIGH klog Kernel message: [ 1.246164] ACPI Error: Region klog EmbeddedControl (ID=3) has no handler (20110413 klog /exfldio-292) klog klog ADVICE: An access (read or write) to an operation region klog has been attempted and a region handler for this has not klog been implemented, this may need to be implemented to klog provide the expected behaviour. See klog acpi_ex_access_region(). klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 1.246169] ACPI Error: Method parse klog /execution failed [_TZ_.RDEC] (Node f442fc60), klog AE_NOT_EXIST (20110413/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 1.246176] ACPI Error: Method parse klog /execution failed [_TZ_.TZS0._TMP] (Node f442fca8), klog AE_NOT_EXIST (20110413/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.270260] ACPI Error (psparse-0537): Method klog parse/execution failed [CPUT] (Node ffff880137a4e840), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.270297] ACPI Error (psparse-0537): Method klog parse/execution failed [PSSC] (Node ffff880137a4e860), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.270332] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node klog ffff880137a3fd00), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 1.272398] ACPI Error: No handler for klog Region [ECRM] (f76d0c60) [EmbeddedControl] (20110112 klog /evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 1.272407] ACPI Error: Method parse klog /execution failed [_TZ_.RDEC] (Node f742fc60), klog AE_NOT_EXIST (20110112/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 1.272415] ACPI Error: Method parse klog /execution failed [_TZ_.TZS0._TMP] (Node f742fca8), klog AE_NOT_EXIST (20110112/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 1.280955] ACPI Error: No handler for klog Region [PCFG] (ffff880137a733f0) [PCI_Config] (20090903 klog /evregion-319) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 1.280965] ACPI Error (psparse-0537): klog Method parse/execution failed [J380._STA] (Node klog ffff88013712b380), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 1.314561] ACPI Error: [ECPU] Namespace klog lookup failure, AE_NOT_FOUND (20110112/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.314567] ACPI Error: Method parse/execution klog failed [_TZ_.TZ00._TMP] (Node ffff88011763ca28), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.320114] ACPI Warning: Incorrect klog checksum in table [ATKG] - 0x9D, should be 0xE5 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [CRITICAL] KlogAcpiSbOscAeAmlBufferLimit: Test 1, klog CRITICAL Kernel message: [ 1.336148] ACPI Error klog (psparse-0537): Method parse/execution failed [_SB_._OSC] klog (Node ffff88012b647200), AE_AML_BUFFER_LIMIT klog klog ADVICE: Section 6.2.10.2 of V4.0a of the ACPI klog specification states that the _OSC Method should be passed klog an 8 byte buffer of 2 x 32 DWORDs, however it appears that klog the method is possibly trying to access data outside this klog buffer. This is a bug in the _OSC method. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 1.337975] ACPI Error (uteval-0250): klog Method execution failed [J380._STA] (Node klog ffff88013712b380), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiFieldExceedsBuffer: Test 1, HIGH klog Kernel message: [ 1.371174] ACPI Error: Field [CDW3] at 96 klog exceeds Buffer [NULL] size 64 (bits) (20090903 klog /dsopcode-596) klog klog ADVICE: Failed to initialise an ACPI buffer field, the klog field exceeded the buffer size provided. This is a klog firmware bug. klog klog FAILED [CRITICAL] KlogAcpiSbOscAeAmlBufferLimit: Test 1, klog CRITICAL Kernel message: [ 1.371180] ACPI Error klog (psparse-0537): Method parse/execution failed [_SB_._OSC] klog (Node ffff88044b85e4a0), AE_AML_BUFFER_LIMIT klog klog ADVICE: Section 6.2.10.2 of V4.0a of the ACPI klog specification states that the _OSC Method should be passed klog an 8 byte buffer of 2 x 32 DWORDs, however it appears that klog the method is possibly trying to access data outside this klog buffer. This is a bug in the _OSC method. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.381411] ACPI Error (psparse-0537): Method klog parse/execution failed [] (Node ffffffff81a2b040), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 1.381481] ACPI Error (dswload-0659): klog [PCI0] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 1.384655] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff8801393f91f8 klog (20090903/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 1.384672] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.VGA_._DSM] (Node klog ffff88013ba4c020), AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 1.384743] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.P0P1.VGA_._DSM] (Node klog ffff88013ba4d9c0), AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [LOW] KlogAcpiDodWithNoDos: Test 1, LOW Kernel klog message: [ 1.398000] [Firmware Bug]: ACPI(Z00P) defines klog _DOD but not _DOS klog klog ADVICE: ACPI Method _DOD (Enumerate all devices attached klog to display adapter) is defined but we should also have klog _DOS (Enable/Disable output switching) defined but it's klog been omitted. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 1.398053] ACPI: acpi_idle yielding klog to intel_idleACPI Warning for _TZ_.TZ01._PSL: Return klog Package type mismatch at index 0 - found Processor, klog expected Reference (20100428/nspredef-1059) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 1.399160] ACPI Warning for klog _SB_.PCI0.PT02._PRT: Return Package has no elements klog (empty) (20090903/nspredef-433) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.400736] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node klog f7018e58), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.436671] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node klog f7024e58), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 1.462866] ACPI Warning: klog _SB_.PCI0.VID2._DOD: Return Package has no elements klog (empty) 20090521 nspredef-434 klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 1.480960] ACPI Warning: klog _SB_.PCI0.FNC2.PRT0._GTF: Return type mismatch - found klog Integer, expected Buffer 20090521 nspredef-940 klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 1.488986] ACPI Error (psargs-0359): klog [GTF0] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.488991] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node klog f702b708), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.489034] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node klog f702b720), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.505441] ACPI Warning: Incorrect klog checksum in table [TAMG] - 7C, should be 7B (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.507734] ACPI Warning: Incorrect klog checksum in table [TAMG] - 2D, should be 2C (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.509153] ACPI Warning: Incorrect klog checksum in table [TAMG] - C0, should be BF (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.512057] ACPI Warning: Incorrect klog checksum in table [OEMB] - CA, should be C9 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.515657] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0xC5, should be 0xC4 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 1.518091] ACPI Warning for klog _SB_.PCI0.IDE1.PRT0._GTF: Return type mismatch - found klog Integer, expected Buffer (20090903/nspredef-1006) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.528248] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x98, should be 0x97 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.529653] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0x7C, should be 0x7B (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.535278] ACPI Warning: Incorrect klog checksum in table [TCPA] - 00, should be 88 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.545790] ACPI Warning: Incorrect klog checksum in table [OEMB] - D0, should be CF (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.555599] ACPI Error (psparse-0537): Method klog parse/execution failed [CPUT] (Node ffff8801b90590c0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.555652] ACPI Error (psparse-0537): Method klog parse/execution failed [PSSC] (Node ffff8801b90590e0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.555703] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node klog ffff8801b903b6e0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.559068] ACPI Warning: Incorrect klog checksum in table [OEMB] - C5, should be C4 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 1.570612] ACPI Error: No handler for klog Region [PCFG] (ffff8801b9074240) [PCI_Config] (20090903 klog /evregion-319) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 1.570624] ACPI Error (psparse-0537): klog Method parse/execution failed [J380._STA] (Node klog ffff8801b916ea40), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.586563] ACPI Warning: Incorrect klog checksum in table [OEMB] - D7, should be D3 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 1.590337] ACPI Warning: For klog _TZ_.THRM._PSL: Return Package has no elements (empty) klog (20110112/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.601784] ACPI Warning: Incorrect klog checksum in table [OEMB] - 5D, should be 55 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiInvalidBrightness: Test 1, HIGH klog Kernel message: [ 1.605121] ACPI Error: Current brightness klog invalid (20110112/video-377) klog klog ADVICE: The ACPI video driver set the brightness level klog using the ACPI control _BCM, however the level used was klog not a known level (as returned by _BCL). klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 1.605465] ACPI Error: [RAMB] Namespace klog lookup failure, AE_NOT_FOUND (20110112/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.616034] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU0.PPC_] (Node klog ffff88015334da00), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.616243] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU0._PPC] (Node klog ffff88015334d920), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.618281] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU1._PPC] (Node klog ffff88015334d9e0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.620164] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU2._PPC] (Node klog ffff88015334dbc0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.621081] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU3._PPC] (Node klog ffff88015334db40), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 1.648580] ACPI Error: [SMS_] Namespace klog lookup failure, AE_NOT_FOUND (20110112/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.648589] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SATA.PRT0._SDD] (Node f3429e58), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 1.662849] ACPI Error (uteval-0250): klog Method execution failed [J380._STA] (Node klog ffff8801b916ea40), AE_NOT_EXIST klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 1.678325] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff88022f7bb5e8 klog (20110112/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 1.678342] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.VGA_._DSM] (Node ffff88022f460190), klog AE_AML_OPERAND_TYPE (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 1.678390] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff88022f7bb8b8 klog (20110112/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 1.678412] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.P0P1.VGA_._DSM] (Node ffff88022f464230), klog AE_AML_OPERAND_TYPE (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.701482] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.PPCE] (Node ffff88022704e960) klog , AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.701521] ACPI Error (psparse-0537): Method klog parse/execution failed [EV4_] (Node ffff880227059000), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.701557] ACPI Error (psparse-0537): Method klog parse/execution failed [SMIE] (Node ffff8802270521c0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.701592] ACPI Error (psparse-0537): Method klog parse/execution failed [NEVT] (Node ffff880227052160), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.701628] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node klog ffff880227050d00), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 1.739479] ACPI Warning: Incorrect klog checksum in table [SSDT] - 0x3F, should be 0x91 (20110112 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.761428] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node klog ffff8800bc234d60), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.782803] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU0.PPC_] (Node klog ffff8801d4d0ac60), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.783001] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU0._PPC] (Node klog ffff8801d4d0ab80), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.784831] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU1._PPC] (Node klog ffff8801d4d0ac40), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.786497] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU2._PPC] (Node klog ffff8801d4d0ae20), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.787299] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU3._PPC] (Node klog ffff8801d4d0ada0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 1.849787] ACPI Warning for klog _PR_.CPU3._PSD: Return Package type mismatch at index 4 - klog found [NULL Object Descriptor], expected Integer klog [] tick_dev_program_event+0x68/0xd0 klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 1.861558] ACPI Error: [SERN] klog Namespace lookup failure, AE_ALREADY_EXISTS (20110112 klog /dswload-802) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 1.861576] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.LPC_.EC__.GBIF] (Node klog ffff880232c509b0), AE_ALREADY_EXISTS (20110112 klog /psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 1.861601] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.LPC_.EC__.BAT1._BIF] (Node klog ffff880232c50d20), AE_ALREADY_EXISTS (20110112 klog /psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 1.864413] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0._DOD] (Node f3025828), klog AE_AML_PACKAGE_LIMIT (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.893953] ACPI Error (psparse-0537): Method klog parse/execution failed [CPUT] (Node ffff8800b3c50000), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.894002] ACPI Error (psparse-0537): Method klog parse/execution failed [PSSC] (Node ffff8800b3c50020), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.894047] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node klog ffff8800b3c49380), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 1.900224] ACPI Error: [NPSS] Namespace klog lookup failure, AE_NOT_FOUND (20110112/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.900238] ACPI Error: Method parse/execution klog failed [_PR_.CPU0.PPC_] (Node ffff88014f9a5140), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.900254] ACPI Error: Method parse/execution klog failed [_PR_.CPU0._PPC] (Node ffff88014f9a5028), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.900769] ACPI Error: Method parse/execution klog failed [_PR_.CPU1._PPC] (Node ffff88014f9a5118), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.901001] ACPI Error: Method parse/execution klog failed [_PR_.CPU2._PPC] (Node ffff88014f9a5370), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.901211] ACPI Error: Method parse/execution klog failed [_PR_.CPU3._PPC] (Node ffff88014f9a52d0), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 1.905440] ACPI Warning: For klog _SB_.PCI0.PCIB._PRT: Return Package has no elements klog (empty) (20110112/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 1.907422] ACPI Error: [GTF0] Namespace klog lookup failure, AE_NOT_FOUND (20110112/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.907427] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f3431a50), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.907445] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f3431a68), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 1.911273] ACPI Warning for klog _SB_.PCI0.P0P1._PRT: Return Package has no elements klog (empty) (20090903/nspredef-433) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 1.929855] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.IDE1.GTM_] (Node klog f7414858), AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 1.929872] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.IDE1.CHN1._GTM] (Node klog f7414798), AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog message: [ 1.958776] ACPI Warning for _PR_.CPU0._PSD: klog klog ADVICE: ACPI AML interpreter has found some non-conforming klog AML code. This should be investigated and fixed. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 1.958968] ACPI Warning for klog _PR_.CPU1._PSD: Return Package type mismatch at index 4 - klog found [NULL Object Descriptor], expected Integer (20090903 klog /nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 1.959113] ACPI Warning for klog _PR_.CPU2._PSD: Return Package type mismatch at index 4 - klog found [NULL Object Descriptor], expected Integer (20090903 klog /nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 1.959252] ACPI Warning for klog _PR_.CPU3._PSD: Return Package type mismatch at index 4 - klog found [NULL Object Descriptor], expected Integer (20090903 klog /nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 1.959427] ACPI Warning for klog _PR_.CPU4._PSD: Return Package type mismatch at index 4 - klog found [NULL Object Descriptor], expected Integer (20090903 klog /nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 1.959602] ACPI Warning for klog _PR_.CPU5._PSD: Return Package type mismatch at index 4 - klog found [NULL Object Descriptor], expected Integer (20090903 klog /nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 1.959776] ACPI Warning for klog _PR_.CPU6._PSD: Return Package type mismatch at index 4 - klog found [NULL Object Descriptor], expected Integer (20090903 klog /nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 1.959951] ACPI Warning for klog _PR_.CPU7._PSD: Return Package type mismatch at index 4 - klog found [NULL Object Descriptor], expected Integer (20090903 klog /nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.962612] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU0.PPC_] (Node klog ffff8801534e5dc0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.962811] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU0._PPC] (Node klog ffff8801534e5ce0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.964620] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU1._PPC] (Node klog ffff8801534e5da0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.966282] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU2._PPC] (Node klog ffff8801534e5f80), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.967081] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU3._PPC] (Node klog ffff8801534e5f00), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.974827] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f3831a50), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 1.974846] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f3831a68), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 2.001829] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.PATA.GTM_] (Node f5423ba0), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 2.001850] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.PATA.CHN0._GTM] (Node f54239c0), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 2.002809] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.PATA.CHN1._GTM] (Node f5423ac8), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.006621] ACPI Error (psparse-0537): Method klog parse/execution failed [CPUT] (Node ffff8801b90570c0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.006671] ACPI Error (psparse-0537): Method klog parse/execution failed [PSSC] (Node ffff8801b90570e0), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.006718] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node klog ffff8801b903fa80), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiEventEnableFailed: Test 1, HIGH klog Kernel message: [ 2.022076] ACPI Error: Could not enable klog SleepButton event (20110112/evxfevnt-198) klog klog ADVICE: An ACPI fixed event could not be enabled. This can klog affect fixed events such as the power management timer, klog power button, sleep button, RTC alarm, wake status, system klog bus master request or the global release lock status. klog klog FAILED [HIGH] KlogAcpiEventEnableFailed: Test 1, HIGH klog Kernel message: [ 2.022090] ACPI Warning: Could not enable klog fixed event 0x3 (20110112/evxface-197) klog klog ADVICE: An ACPI fixed event could not be enabled. This can klog affect fixed events such as the power management timer, klog power button, sleep button, RTC alarm, wake status, system klog bus master request or the global release lock status. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.033653] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f6031468), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.033670] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f6031480), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiInvalidPssFrequency: Test 1, klog MEDIUM Kernel message: [ 2.039517] [Firmware Bug]: ACPI: klog Invalid BIOS _PSS frequency: 0x80000000 MHz klog klog ADVICE: _PSS (Performance Supported States) package has an klog incorrectly define core frequency (first DWORD entry in klog the _PSS package). klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 2.045931] ACPI Warning for klog _SB_.PCI0.P0P1._PRT: Return Package has no elements klog (empty) (20100428/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 2.049441] ACPI Warning for klog _PR_.CPU0._PSD: Return Package type mismatch at index 4 - klog found [NULL Object Descriptor], expected Integer (20090903 klog /nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.068617] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SATA.PRT0._SDD] (Node f3c29e58), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 2.081502] ACPI Error (psargs-0359): klog [NPSS] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.081508] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU0.PPC_] (Node klog ffff8801534e5c20), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.081585] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU0._PPC] (Node klog ffff8801534e5b40), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.083171] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU1._PPC] (Node klog ffff8801534e5c00), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.084838] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU2._PPC] (Node klog ffff8801534e5de0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.085644] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU3._PPC] (Node klog ffff8801534e5d60), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.106307] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node ffff88023f45dca8), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.106326] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node ffff88023f45dcd0), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.113330] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f74317b0), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.113367] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f74317c8), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiEventEnableFailed: Test 1, HIGH klog Kernel message: [ 2.132386] ACPI Error: Could not enable klog SleepButton event (20090903/evxfevnt-193) klog klog ADVICE: An ACPI fixed event could not be enabled. This can klog affect fixed events such as the power management timer, klog power button, sleep button, RTC alarm, wake status, system klog bus master request or the global release lock status. klog klog FAILED [HIGH] KlogAcpiEventEnableFailed: Test 1, HIGH klog Kernel message: [ 2.132392] ACPI Warning: Could not enable klog fixed event 3 (20090903/evxface-146) klog klog ADVICE: An ACPI fixed event could not be enabled. This can klog affect fixed events such as the power management timer, klog power button, sleep button, RTC alarm, wake status, system klog bus master request or the global release lock status. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 2.149905] ACPI Error: Method parse/execution klog failed [_SB_.C003.C099._DOD] (Node f30275a0), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 2.173036] ACPI Warning for _SB_._OSC: klog Return type mismatch - found Integer, expected Buffer klog (20090903/nspredef-1006) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 2.173935] ACPI Warning: Incorrect klog checksum in table [OEMB] - C3, should be C2 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.200371] ACPI Error: Method parse klog /execution failed [_SB_.EEAC] (Node f602bf30), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.200380] ACPI Error: Method parse klog /execution failed [_SB_.BAT2._STA] (Node f602d2d0), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.206433] ACPI Error: Method parse klog /execution failed [_SB_.EEAC] (Node f742d018), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.206443] ACPI Error: Method parse klog /execution failed [_SB_.BAT2._STA] (Node f742d3a8), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 2.222353] ACPI Error: [EABF] klog Namespace lookup failure, AE_ALREADY_EXISTS (20110112 klog /dswload-802) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.222362] ACPI Error: Method parse klog /execution failed [_SB_.EEAC] (Node f602d018), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.222372] ACPI Error: Method parse klog /execution failed [_SB_.BAT2._STA] (Node f602d3a8), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 2.227407] ACPI Error (psargs-0359): klog [GTF1] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.227411] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node klog f702b7b0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.227454] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node klog f702b7c8), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 2.229498] ACPI Warning: Incorrect klog checksum in table [TAMG] - 0xC6, should be 0xC5 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.231431] ACPI Error: Method parse klog /execution failed [_SB_.EEAC] (Node f602bf60), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.231442] ACPI Error: Method parse klog /execution failed [_SB_.BAT2._STA] (Node f602d300), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.250291] ACPI Error: Method parse klog /execution failed [_SB_.BAT1.UBIF] (Node ffff88013762f550) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.250306] ACPI Error: Method parse klog /execution failed [_SB_.BAT1._BIF] (Node ffff88013762f500) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.270835] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node ffff880125e2c708) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 2.280398] ACPI Error klog (dswload-0781): [_T_0] Namespace lookup failure, klog AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.280410] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.BAT1.UBIF] (Node klog ffff8800b3c2e100), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.280443] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.BAT1._BIF] (Node klog ffff8800b3c2e0c0), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 2.283579] ACPI Error (psargs-0359): klog [_T_0] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.283585] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.BAT1.UBIF] (Node klog ffff8800b3c2e100), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.283615] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.EC0_._Q09] (Node klog ffff8800b3c410e0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.288649] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node ffff88023f45dcd0), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.288685] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node ffff88023f45dcf8), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.294251] ACPI Error: Method parse klog /execution failed [_SB_.EEAC] (Node f742bf30), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.294262] ACPI Error: Method parse klog /execution failed [_SB_.BAT2._STA] (Node f742d2d0), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 2.324547] ACPI Error: [EABF] klog Namespace lookup failure, AE_ALREADY_EXISTS (20110413 klog /dswload2-316) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.324556] ACPI Error: Method parse klog /execution failed [_SB_.EEAC] (Node f742d018), klog AE_ALREADY_EXISTS (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.324566] ACPI Error: Method parse klog /execution failed [_SB_.BAT2._STA] (Node f742d3a8), klog AE_ALREADY_EXISTS (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiZeroLengthCreateField: Test 1, HIGH klog Kernel message: [ 2.334361] ACPI Error: Attempt to klog CreateField of length zero (20110112/dsopcode-529) klog klog ADVICE: Failed to initialise an ACPI buffer field, klog CreateField used with a zero field length which is klog illegal. This is a firmware bug. klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 2.334370] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.IDE0.RATA] (Node klog ffff8801376322a8), AE_AML_OPERAND_VALUE (20110112 klog /psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 2.334384] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.IDE0.PRT1._GTF] (Node klog ffff880137632438), AE_AML_OPERAND_VALUE (20110112 klog /psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 2.336604] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node klog ffff88013b63c460), AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.384172] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node ffff8801c305dcd0), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.384189] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node ffff8801c305dcf8), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 2.440684] ACPI Error (psargs-0359): klog [SMS_] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.440692] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node klog ffff88007db30c60), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.462687] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node ffff880147646cd0), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.462711] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node ffff880147646cf8), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiInvalidTableLength: Test 1, HIGH klog Kernel message: [ 2.468708] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU1._PDC] (Node klog f700f180), AE_INVALID_TABLE_LENGTH klog klog ADVICE: The ACPI Method returned a table of the incorrect klog length. This can lead to unexpected results. klog klog FAILED [HIGH] KlogAcpiInvalidTableLength: Test 1, HIGH klog Kernel message: [ 2.468963] ACPI Error (psparse-0537): klog Method parse/execution failed [_PR_.CPU2._PDC] (Node klog f700f240), AE_INVALID_TABLE_LENGTH klog klog ADVICE: The ACPI Method returned a table of the incorrect klog length. This can lead to unexpected results. klog klog FAILED [LOW] KlogAcpiDodWithNoDos: Test 1, LOW Kernel klog message: [ 2.478380] [Firmware Bug]: ACPI(NGFX) defines klog _DOD but not _DOS klog klog ADVICE: ACPI Method _DOD (Enumerate all devices attached klog to display adapter) is defined but we should also have klog _DOS (Enable/Disable output switching) defined but it's klog been omitted. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.592359] ACPI Error: Method parse/execution klog failed [_PR_.CPU0.PPC_] (Node ffff88014f9a4140), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.592381] ACPI Error: Method parse/execution klog failed [_PR_.CPU0._PPC] (Node ffff88014f9a4028), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.593071] ACPI Error: Method parse/execution klog failed [_PR_.CPU1._PPC] (Node ffff88014f9a4118), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.593648] ACPI Error: Method parse/execution klog failed [_PR_.CPU2._PPC] (Node ffff88014f9a4370), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.593935] ACPI Error: Method parse/execution klog failed [_PR_.CPU3._PPC] (Node ffff88014f9a42d0), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 2.634350] ACPI Error: [GTF1] Namespace klog lookup failure, AE_NOT_FOUND (20110112/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.634355] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node f3431af8), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.634373] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node f3431b10), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.671117] ACPI Error: Method parse klog /execution failed [_SB_.EEAC] (Node f2c2d018), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.671128] ACPI Error: Method parse klog /execution failed [_SB_.BAT2._STA] (Node f2c2d3a8), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.701908] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node f3831af8), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.701933] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node f3831b10), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.771747] ACPI Error: Method parse klog /execution failed [_SB_.EEAC] (Node f402bf60), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 2.771758] ACPI Error: Method parse klog /execution failed [_SB_.BAT2._STA] (Node f402d300), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 2.787172] ACPI Warning: For klog _SB_.PCI0.P0P1._PRT: Return Package has no elements klog (empty) (20110112/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiBqcReturnedInvalidLevel: Test 1, klog HIGH Kernel message: [ 2.823916] ACPI Warning: _BQC klog returned an invalid level 20090521 video-629 klog klog ADVICE: Method _BQC (Brightness Query Current) returned an klog invalid display brightness level. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.837958] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node f7431858), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.837994] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node f7431870), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 2.838171] ACPI Warning for klog _SB_.BAT0._BIF: Return Package type mismatch at index 9 - klog found [NULL Object Descriptor], expected String/Buffer klog (20090903/nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiBqcReturnedInvalidLevel: Test 1, klog HIGH Kernel message: [ 2.851027] ACPI Warning: _BQC klog returned an invalid level (20110316/video-473) klog klog ADVICE: Method _BQC (Brightness Query Current) returned an klog invalid display brightness level. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 2.860339] ACPI Error: Method parse/execution klog failed [_SB_.C003.C098._DOD] (Node f4427588), klog AE_AML_PACKAGE_LIMIT (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 2.861808] ACPI Error: klog [_SB_.PCI0.GFX0.DD02._BCL] Namespace lookup failure, klog AE_NOT_FOUND (20110112/psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 2.861812] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.PEG0.PEGP.DD02._BCL] (Node klog ffff88015746e168), AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 2.870589] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0._DOD] (Node ffff880137632c80), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 2.906610] ACPI Warning: For klog _SB_.PCI0.P0P2.PEGP._DOD: Return type mismatch - found klog Integer, expected Package (20110413/nspredef-1053) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [HIGH] KlogAcpiFieldExceedsBuffer: Test 1, HIGH klog Kernel message: [ 2.949708] ACPI Error: Field [CDW3] at 96 klog exceeds Buffer [NULL] size 64 (bits) (20110112 klog /dsopcode-597) klog klog ADVICE: Failed to initialise an ACPI buffer field, the klog field exceeded the buffer size provided. This is a klog firmware bug. klog klog FAILED [CRITICAL] KlogAcpiSbOscAeAmlBufferLimit: Test 1, klog CRITICAL Kernel message: [ 2.949716] ACPI Error: Method klog parse/execution failed [_SB_._OSC] (Node ffff880297016ca8) klog , AE_AML_BUFFER_LIMIT (20110112/psparse-536) klog klog ADVICE: Section 6.2.10.2 of V4.0a of the ACPI klog specification states that the _OSC Method should be passed klog an 8 byte buffer of 2 x 32 DWORDs, however it appears that klog the method is possibly trying to access data outside this klog buffer. This is a bug in the _OSC method. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 3.005123] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_._OSC] (Node ffff88122fc1ea00) klog , AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 3.033154] ACPI Warning: Incorrect klog checksum in table [OEMB] - 0x87, should be 0x84 (20100428 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 3.112435] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.PPCE] (Node f74257c8), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 3.112465] ACPI Error (psparse-0537): Method klog parse/execution failed [EV4_] (Node f742c210), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 3.112494] ACPI Error (psparse-0537): Method klog parse/execution failed [SMIE] (Node f7427a20), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 3.112522] ACPI Error (psparse-0537): Method klog parse/execution failed [NEVT] (Node f74279d8), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 3.112549] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node klog f7427690), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [LOW] KlogAcpiDodWithNoDos: Test 1, LOW Kernel klog message: [ 3.139648] [Firmware Bug]: ACPI(XVS0) defines klog _DOD but not _DOS klog klog ADVICE: ACPI Method _DOD (Enumerate all devices attached klog to display adapter) is defined but we should also have klog _DOS (Enable/Disable output switching) defined but it's klog been omitted. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 3.208822] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.C003.C098._DOD] (Node klog ffff88007cf30b60), AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 3.223518] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node klog ffff880236c469a0), AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 3.382436] ACPI Warning: Incorrect klog checksum in table [TCPA] - 00, should be 7F (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 3.382442] ACPI Warning: Incorrect klog checksum in table [_RAT] - 00, should be 63 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 3.420672] ACPI Warning for klog _TZ_.THRM._PSL: Return Package type mismatch at index 0 - klog found Processor, expected Reference (20100428 klog /nspredef-1059) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 3.480092] ACPI Warning for klog _SB_.PCI0.SAT0.PRT0._GTF: Return type mismatch - found klog Integer, expected Buffer (20090903/nspredef-1006) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 3.490098] ACPI Warning for klog _SB_.PCI0.SAT0.PRT1._GTF: Return type mismatch - found klog Integer, expected Buffer (20090903/nspredef-1006) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 3.490832] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PMI0._GHL] (Node klog ffff88013bc2bdc0), AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 3.490852] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PMI0._PMC] (Node klog ffff88013bc2bd40), AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiEventEnableFailed: Test 1, HIGH klog Kernel message: [ 3.502273] ACPI Error: Could not enable klog SleepButton event (20100428/evxfevnt-205) klog klog ADVICE: An ACPI fixed event could not be enabled. This can klog affect fixed events such as the power management timer, klog power button, sleep button, RTC alarm, wake status, system klog bus master request or the global release lock status. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 3.601126] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node klog f7420690), AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 3.644168] ACPI Warning: Incorrect klog checksum in table [TCPA] - 0xF8, should be 0x9C (20110413 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [LOW] KlogAcpiDodWithNoDos: Test 1, LOW Kernel klog message: [ 3.663829] [Firmware Bug]: ACPI(GFX0) defines klog _DOD but not _DOS klog klog ADVICE: ACPI Method _DOD (Enumerate all devices attached klog to display adapter) is defined but we should also have klog _DOS (Enable/Disable output switching) defined but it's klog been omitted. klog klog FAILED [HIGH] KlogAcpiBcmFailed: Test 1, HIGH Kernel klog message: [ 3.675814] ACPI Error: Evaluating _BCM failed klog (20100428/video-532) klog klog ADVICE: Could not set the brightness level, the ACPI klog control _BCM failed to execute correctly. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 3.868794] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f3831b58), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 3.868812] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f3831b70), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 3.983031] ACPI Error: Method parse klog /execution failed [_SB_.EEAC] (Node ffff88021d459028), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 3.983040] ACPI Error: Method parse klog /execution failed [_SB_.BAT2._STA] (Node ffff88021d459618) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [LOW] KlogAcpiDodWithNoDos: Test 1, LOW Kernel klog message: [ 4.002664] [Firmware Bug]: ACPI(EVGA) defines klog _DOD but not _DOS klog klog ADVICE: ACPI Method _DOD (Enumerate all devices attached klog to display adapter) is defined but we should also have klog _DOS (Enable/Disable output switching) defined but it's klog been omitted. klog klog FAILED [MEDIUM] KlogAcpiIncorrectTableChecksum: Test 1, klog MEDIUM Kernel message: [ 4.046031] ACPI Warning: Incorrect klog checksum in table [OEMB] - 4A, should be 47 (20090903 klog /tbutils-314) klog klog ADVICE: The ACPI table listed above has an incorrect klog checksum, this could be a BIOS bug or due to table klog corruption. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 4.115197] ACPI Error: Method parse klog /execution failed [_SB_.EEAC] (Node ffff88021d458eb0), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 4.115206] ACPI Error: Method parse klog /execution failed [_SB_.BAT2._STA] (Node ffff88021d4594b0) klog , AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 4.190434] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0._DOD] (Node ffff8801376342f8), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 4.198699] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node f3831c00), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 4.198716] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node f3831c18), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiTimeOutReturnedByHandler: Test 1, klog HIGH Kernel message: [ 4.230508] ACPI Exception: AE_TIME, klog Returned by Handler for [EmbeddedControl] (20090903 klog /evregion-424) klog klog ADVICE: This is most probably caused by when a read or klog write operation to the EC memory has failed because of a klog timeout waiting for the Embedded Controller to complete klog the transaction. Normally, the kernel waits for 500ms for klog the Embedded Controller status port to indicate that a klog transaction is complete, but in this case it has not and a klog AE_TIME error has been returned. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 4.230527] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.ISAB.ECDV.ECR1] (Node klog f7018ed0), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 4.230612] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.ISAB.ECDV.ECR2] (Node klog f7018ee8), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 4.230643] ACPI Error (psparse-0537): Method klog parse/execution failed [ECRW] (Node f7018fa8), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 4.230672] ACPI Error (psparse-0537): Method klog parse/execution failed [ECG1] (Node f7018fd8), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 4.230701] ACPI Error (psparse-0537): Method parse klog /execution failed [NEVT] (Node f70186f0), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 4.230730] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.ISAB.ECDV._Q66] (Node klog f7018eb8), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 4.576415] ACPI Error: No handler for klog Region [ERAM] (f4830d50) [EmbeddedControl] (20110112 klog /evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 4.576437] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.SBRG.EC0_._REG] (Node klog f48326d8), AE_NOT_EXIST (20110112/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 4.638115] ACPI Error: Method parse klog /execution failed [_SB_.EEAC] (Node ffff880220c5b028), klog AE_ALREADY_EXISTS (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 4.638127] ACPI Error: Method parse klog /execution failed [_SB_.BAT2._STA] (Node ffff880220c5b618) klog , AE_ALREADY_EXISTS (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 4.838935] ACPI Error (psparse-0537): Method klog parse/execution failed [_TZ_.C2E8] (Node f701b108), klog AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 4.838984] ACPI Error (psparse-0537): Method klog parse/execution failed [_TZ_.C2E7] (Node f701b0f0), klog AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 4.839033] ACPI Error (psparse-0537): Method klog parse/execution failed [_TZ_.TZ2_._TMP] (Node f701b7c8), klog AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 4.890970] ACPI Error: Method parse klog /execution failed [_SB_.EEAC] (Node ffff880126e43f50), klog AE_ALREADY_EXISTS (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 4.890980] ACPI Error: Method parse klog /execution failed [_SB_.BAT2._STA] (Node ffff880126e44550) klog , AE_ALREADY_EXISTS (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [LOW] KlogAcpiDodWithNoDos: Test 1, LOW Kernel klog message: [ 4.983204] [Firmware Bug]: ACPI(MXM3) defines klog _DOD but not _DOS klog klog ADVICE: ACPI Method _DOD (Enumerate all devices attached klog to display adapter) is defined but we should also have klog _DOS (Enable/Disable output switching) defined but it's klog been omitted. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 5.150560] ACPI Warning for klog _SB_.BAT0._BIF: Return Package type mismatch at index 12 - klog found Integer, expected String/Buffer (20090903 klog /nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 5.332663] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0._DOD] (Node f4425450), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 6.224974] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.PEGP.VGA_.LCD_.GBQC] (Node klog f3423438), AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 6.224987] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.PEGP.VGA_.LCD_._BQC] (Node klog f3423420), AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 6.227917] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.PEGP.VGA_.LCD1.GBQC] (Node klog f34235b8), AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 6.227930] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.PEGP.VGA_.LCD1._BQC] (Node klog f34235a0), AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 6.732287] ACPI Error: [_T_0] klog Namespace lookup failure, AE_ALREADY_EXISTS (20110112 klog /dswload-802) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 6.732310] ACPI Error: Method parse klog /execution failed [_SB_.BAT1.UBIF] (Node dd028fc0), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 6.732334] ACPI Error: Method parse klog /execution failed [_SB_.BAT1._BIF] (Node dd028f90), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 6.773266] ACPI Error: [CAPB] klog Namespace lookup failure, AE_ALREADY_EXISTS (20101013 klog /dsfield-143) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 6.773285] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node ddc25ca8), klog AE_ALREADY_EXISTS (20101013/psparse-537) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiNoHandlerForRegion: Test 1, HIGH klog Kernel message: [ 7.365139] ACPI Error: No handler for klog Region [IPMI] (ffff8805ffa37240) [IPMI] (20110112 klog /evregion-369) klog klog ADVICE: ACPI attempted to read or write to a region klog however the ACPI driver does not have a handler klog implemented for this particular region space. The read klog /write will fail and undefined behaviour will occur. klog klog FAILED [HIGH] KlogAcpiRegionHasNoHandler: Test 1, HIGH klog Kernel message: [ 7.365150] ACPI Error: Region IPMI(0x7) klog has no handler (20110112/exfldio-292) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 7.365161] ACPI Error: Method parse klog /execution failed [_SB_.PMI0._GHL] (Node ffff8805ffa36b18) klog , AE_NOT_EXIST (20110112/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiObjectDoesNotExist: Test 1, HIGH klog Kernel message: [ 7.365181] ACPI Error: Method parse klog /execution failed [_SB_.PMI0._PMC] (Node ffff8805ffa36a78) klog , AE_NOT_EXIST (20110112/psparse-536) klog klog ADVICE: The ACPI interpreter failed to execute or parse klog some AML because a object or control did not exist. This klog normally occurs because of buggy firmware and may lead to klog unexpected behaviour or loss of functionality. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 8.137284] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node klog f702e720), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 8.137317] ACPI Error (psparse-0537): Method klog parse/execution failed [ECRB] (Node f702e7f8), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 8.137344] ACPI Error (psparse-0537): Method klog parse/execution failed [EC0A] (Node f702ea08), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 8.137370] ACPI Error (psparse-0537): Method parse klog /execution failed [_SB_.AMW0._WED] (Node f7019ca8), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 8.227953] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.C003.C098._DOD] (Node klog f7021588), AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [LOW] KlogAcpiDodWithNoDos: Test 1, LOW Kernel klog message: [ 8.316300] [Firmware Bug]: ACPI(VGA0) defines klog _DOD but not _DOS klog klog ADVICE: ACPI Method _DOD (Enumerate all devices attached klog to display adapter) is defined but we should also have klog _DOS (Enable/Disable output switching) defined but it's klog been omitted. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 8.794633] ACPI Error: Method parse klog /execution failed [_SB_.PCI0._OSC] (Node f5824ab0), klog AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 9.141980] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node klog f702e690), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 9.142017] ACPI Error (psparse-0537): Method klog parse/execution failed [ECRB] (Node f702e768), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 9.142046] ACPI Error (psparse-0537): Method klog parse/execution failed [EC0A] (Node f702e978), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 9.142076] ACPI Error (psparse-0537): Method parse klog /execution failed [_SB_.AMW0._WED] (Node f7019420), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiReturnPackageTypeMismatch: Test 1, klog HIGH Kernel message: [ 9.267040] ACPI Warning for klog _SB_.SPM_._PMD: Return Package type mismatch at index 0 - klog found String, expected Reference (20090903/nspredef-1012) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with incorrectly typed data. The klog offending method needs to be fixed. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 9.391036] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.IBCM] (Node f3828738), klog AE_AML_BUFFER_LIMIT (20110112/psparse-536) klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 9.391049] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0.DD03._BCM] (Node f3824b28), klog AE_AML_BUFFER_LIMIT (20110112/psparse-536) klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBcmFailed: Test 1, HIGH Kernel klog message: [ 9.391061] ACPI Error: Evaluating _BCM failed klog (20110112/video-365) klog klog ADVICE: Could not set the brightness level, the ACPI klog control _BCM failed to execute correctly. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 9.393479] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff88012d8cfee8 klog (20110112/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 9.393498] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0.DD02.GBQC] (Node ffff88012f83e6b8), klog AE_AML_OPERAND_TYPE (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 9.393510] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0.DD02._BQC] (Node ffff88012f83e690), klog AE_AML_OPERAND_TYPE (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 9.394098] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff88012d8cfd38 klog (20110112/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 9.394109] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0.DD02.SBCM] (Node ffff88012f83e6e0), klog AE_AML_OPERAND_TYPE (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 9.394118] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0.DD02._BCM] (Node ffff88012f83e668), klog AE_AML_OPERAND_TYPE (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 9.957372] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node ffff88007af33780), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 9.957372] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node ffff88007af33910), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 9.957372] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SATA.CHN0._GTM] (Node ffff88007af32b68), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 9.957372] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.SATA.CHN1._GTM] (Node ffff88007af32cf8), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [LOW] KlogAcpiDodWithNoDos: Test 1, LOW Kernel klog message: [ 10.080352] [Firmware Bug]: ACPI(VGA) defines klog _DOD but not _DOS klog klog ADVICE: ACPI Method _DOD (Enumerate all devices attached klog to display adapter) is defined but we should also have klog _DOS (Enable/Disable output switching) defined but it's klog been omitted. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 10.120967] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff88023bcba438 klog (20110112/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 10.120977] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0._DSM] (Node ffff88023f45edc0), klog AE_AML_OPERAND_TYPE (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 10.121007] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff88023bcba1b0 klog (20110112/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 10.121018] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.PEG0.GFX0._DSM] (Node ffff88023f474370), klog AE_AML_OPERAND_TYPE (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 10.194089] ACPI Warning for klog _SB_.PCI0.PCIB._PRT: Return Package has no elements klog (empty) (20100428/nspredef-456) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 10.289821] ACPI Error (psargs-0359): klog [_PR_.CPU0._CST] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 10.289828] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.CPU1._CST] (Node f70c3288), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiIncorrectWriteBufferSize: Test 1, klog HIGH Kernel message: [ 10.344782] ACPI Error: SMBus or klog IPMI write requires Buffer of length 42, found length 20 klog (20090903/exfield-286) klog klog ADVICE: An incorrect SMBus or IPMI write buffer size was klog used. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 10.344788] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PMI0._GHL] (Node klog ffff88122fc1ece0), AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 10.344812] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PMI0._PMC] (Node klog ffff88122fc1ec60), AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 10.380244] ACPI Warning klog (nspredef-0357): _SB_.PCI0.VID2._DOD: Return Package has klog no elements (empty) [20080926] klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 10.680422] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.GFX0.DD02._BCM] (Node klog ffff880117642ed8), AE_AML_INFINITE_LOOP (20110112 klog /psparse-536) klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 10.692650] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR2] (Node klog f702e738), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 10.692684] ACPI Error (psparse-0537): Method klog parse/execution failed [ECRW] (Node f702e810), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 10.692710] ACPI Error (psparse-0537): Method klog parse/execution failed [ECG1] (Node f702e840), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 10.692735] ACPI Error (psparse-0537): Method parse klog /execution failed [NEVT] (Node f702ea50), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 10.692761] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node klog f702e708), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 10.708822] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node klog f7427738), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 10.708876] ACPI Error (psparse-0537): Method klog parse/execution failed [ECRB] (Node f7427810), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 10.708908] ACPI Error (psparse-0537): Method klog parse/execution failed [EC0A] (Node f7427a20), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 10.708939] ACPI Error (psparse-0537): Method parse klog /execution failed [_SB_.AMW0._WED] (Node f742c078), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 10.724353] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node klog ffff880213050d00), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 10.724416] ACPI Error (psparse-0537): Method klog parse/execution failed [ECRB] (Node ffff880213050e20), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 10.724449] ACPI Error (psparse-0537): Method klog parse/execution failed [EC0A] (Node ffff8802130520e0), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 10.724482] ACPI Error (psparse-0537): Method parse klog /execution failed [_SB_.AMW0._WED] (Node ffff8802130573c0) klog , AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 11.195653] ACPI Error (psparse-0537): Method klog parse/execution failed [ECG5] (Node f702e8a0), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 11.195680] ACPI Error (psparse-0537): Method parse klog /execution failed [_SB_.AC__._PSR] (Node f702ec90), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 11.383565] ACPI Error: Method parse/execution klog failed [_SB_.C003.C098._DOD] (Node ffff880137636938), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 11.660551] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR2] (Node klog f702e6a8), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 11.660591] ACPI Error (psparse-0537): Method klog parse/execution failed [ECRW] (Node f702e780), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 11.660615] ACPI Error (psparse-0537): Method klog parse/execution failed [ECG1] (Node f702e7b0), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 11.660638] ACPI Error (psparse-0537): Method parse klog /execution failed [NEVT] (Node f702e9c0), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 11.660661] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node klog f702e678), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 11.800514] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0._DOD] (Node ffff8801376342a8), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 11.880473] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff88012125f558 klog (20110413/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 11.880998] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff88012125f3a8 klog (20110413/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 11.915871] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.SWFS] (Node klog ffff880226c49320), AE_AML_INFINITE_LOOP klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 11.915905] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.RBYT] (Node klog ffff880226c493c0), AE_AML_INFINITE_LOOP klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 11.915932] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.ASOC.SECV] (Node klog ffff880226c4a0e0), AE_AML_INFINITE_LOOP klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 11.915960] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.ASOC.RVLT] (Node klog ffff880226c49b00), AE_AML_INFINITE_LOOP klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 12.160904] ACPI Error (psparse-0537): Method klog parse/execution failed [ECG5] (Node f702e810), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 12.160929] ACPI Error (psparse-0537): Method parse klog /execution failed [_SB_.AC__._PSR] (Node f702ec00), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 12.167076] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff8800b1753048 klog (20090903/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 12.167089] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.GFX0.DD02.GBQC] (Node klog ffff8800b3c44ca0), AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 12.167143] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.GFX0.DD02._BQC] (Node klog ffff8800b3c44c80), AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiEvaluationFailed: Test 1, HIGH klog Kernel message: [ 12.167205] ACPI Warning: Evaluating _BQC klog failed (20090903/video-641) klog klog ADVICE: Executing the ACPI Method ended in an execution klog failure. This needs investigating. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 12.242368] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff88012ea6e6c0 klog (20110413/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 12.242387] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0.DD02.GBQC] (Node ffff88013113f6b8), klog AE_AML_OPERAND_TYPE (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 12.242397] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0.DD02._BQC] (Node ffff88013113f690), klog AE_AML_OPERAND_TYPE (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiEvaluationFailed: Test 1, HIGH klog Kernel message: [ 12.242409] ACPI Warning: Evaluating _BQC klog failed (20110413/video-484) klog klog ADVICE: Executing the ACPI Method ended in an execution klog failure. This needs investigating. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 12.242974] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff88012ea6e5e8 klog (20110413/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 12.242986] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0.DD02.SBCM] (Node ffff88013113f6e0), klog AE_AML_OPERAND_TYPE (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 12.242994] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0.DD02._BCM] (Node ffff88013113f668), klog AE_AML_OPERAND_TYPE (20110413/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiBcmFailed: Test 1, HIGH Kernel klog message: [ 12.243002] ACPI Error: Evaluating _BCM failed klog (20110413/video-365) klog klog ADVICE: Could not set the brightness level, the ACPI klog control _BCM failed to execute correctly. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 12.361137] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.C003.C09D._DOD] (Node klog ffff88013b630c00), AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 12.390421] ACPI Error (psparse-0537): Method klog parse/execution failed [ECG5] (Node ffff880213050f00), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 12.390446] ACPI Error (psparse-0537): Method parse klog /execution failed [_SB_.AC__._PSR] (Node ffff880213052440) klog , AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 12.553637] ACPI Warning: For klog _SB_.PCI0.P0P2.PEGP._DOD: Return type mismatch - found klog Integer, expected Package (20110112/nspredef-1053) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [HIGH] KlogAcpiTimeOutReturnedByHandler: Test 1, klog HIGH Kernel message: [ 12.838979] cfg80211: Ignoring klog regulatory request Set by core since the driver uses its klog own custom regulatory domain ACPI Exception: AE_TIME, klog Returned by Handler for [EmbeddedControl] (20110112 klog /evregion-474) klog klog ADVICE: This is most probably caused by when a read or klog write operation to the EC memory has failed because of a klog timeout waiting for the Embedded Controller to complete klog the transaction. Normally, the kernel waits for 500ms for klog the Embedded Controller status port to indicate that a klog transaction is complete, but in this case it has not and a klog AE_TIME error has been returned. klog klog FAILED [HIGH] KlogAcpiBqcReturnedInvalidLevel: Test 1, klog HIGH Kernel message: [ 12.841008] cfg80211: Ignoring klog regulatory request Set by core since the driver uses its klog own custom regulatory domain ACPI Warning: _BQC returned klog an invalid level (20110112/video-473) klog klog ADVICE: Method _BQC (Brightness Query Current) returned an klog invalid display brightness level. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 13.024512] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0._DOD] (Node f7425450), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 13.396787] ACPI Error: Method parse/execution failed klog [_SB_.ADP1._PSR] (Node ffff88011763ba00), AE_TIME klog (20110112/psparse-536) klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiFieldExceedsBuffer: Test 1, HIGH klog Kernel message: [ 13.445954] ACPI Error: Field [D128] at klog 1040 exceeds Buffer [NULL] size 160 (bits) (20110112 klog /dsopcode-597) klog klog ADVICE: Failed to initialise an ACPI buffer field, the klog field exceeded the buffer size provided. This is a klog firmware bug. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 13.445980] ACPI Error: Method parse/execution klog failed [_SB_.WMID.HWMC] (Node f742a8b8), klog AE_AML_BUFFER_LIMIT (20110112/psparse-536) klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 13.446019] ACPI Error: Method parse/execution klog failed [_SB_.WMID.WMAD] (Node f742aac8), klog AE_AML_BUFFER_LIMIT (20110112/psparse-536) klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 13.452167] ACPI Error (psargs-0359): klog [_PR_.C001] Namespace lookup failure, AE_NOT_FOUND klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 13.452177] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPC0.EC0_.TPAF] (Node klog f702bde0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 13.452213] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPC0.EC0_.TBOM] (Node klog f702bdf8), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 13.452247] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPC0.EC0_._Q1D] (Node klog f702ba98), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiBqcReturnedInvalidLevel: Test 1, klog HIGH Kernel message: [ 14.013275] ACPI Warning: _BQC klog returned an invalid level (20110112/video-473) klog klog ADVICE: Method _BQC (Brightness Query Current) returned an klog invalid display brightness level. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 14.175645] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.OVGA.DD03.GBQC] (Node klog f44247e0), AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 14.175656] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.OVGA.DD03._BQC] (Node klog f44247c8), AE_ALREADY_EXISTS (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiEvaluationFailed: Test 1, HIGH klog Kernel message: [ 14.175667] ACPI Warning: Evaluating _BQC klog failed (20110112/video-484) klog klog ADVICE: Executing the ACPI Method ended in an execution klog failure. This needs investigating. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 14.885219] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff88013c6b58b8 klog (20110112/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 14.885234] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0._DSM] (Node ffff88013f849eb0), klog AE_AML_OPERAND_TYPE (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 14.885277] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff88013c6b5828 klog (20110112/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 14.885289] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.PEG1.GFX0._DSM] (Node ffff88013f86f668), klog AE_AML_OPERAND_TYPE (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 15.027464] ACPI Error (psparse-0537): Method klog parse/execution failed [_PR_.PPCE] (Node ffff880075137920) klog , AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 15.027505] ACPI Error (psparse-0537): Method klog parse/execution failed [EV4_] (Node ffff880075140660), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 15.027542] ACPI Error (psparse-0537): Method klog parse/execution failed [SMIE] (Node ffff88007513b180), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 15.027579] ACPI Error (psparse-0537): Method klog parse/execution failed [NEVT] (Node ffff88007513b120), klog AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 15.027616] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node klog ffff880075139cc0), AE_NOT_FOUND klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiBqcReturnedInvalidLevel: Test 1, klog HIGH Kernel message: [ 15.287082] ACPI Warning: _BQC klog returned an invalid level (20100428/video-640) klog klog ADVICE: Method _BQC (Brightness Query Current) returned an klog invalid display brightness level. klog klog FAILED [LOW] KlogAcpiDodWithNoDos: Test 1, LOW Kernel klog message: [ 15.395484] [Firmware Bug]: ACPI(PEGP) defines klog _DOD but not _DOS klog klog ADVICE: ACPI Method _DOD (Enumerate all devices attached klog to display adapter) is defined but we should also have klog _DOS (Enable/Disable output switching) defined but it's klog been omitted. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 15.846531] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node klog ffff8800b3840360), AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 16.336080] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.EC0_._Q33] (Node klog f70244b0), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 16.592600] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.ASOC.SEFA] (Node klog ffff880226c4a120), AE_AML_INFINITE_LOOP klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiParseExecAmlFailed: Test 1, HIGH klog Kernel message: [ 16.592628] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.ASOC.RFAN] (Node klog ffff880226c49bc0), AE_AML_INFINITE_LOOP klog klog ADVICE: The ACPI driver encountered a parse or execution klog error on some ACPI AML code. This is unexpected and klog normally indicates that there is a bug in the compiled AML klog code. It could be a programming fault or an AML compiler klog issue. See acpi_ps_parse_aml(). klog klog FAILED [HIGH] KlogAcpiReturnPackageZeroElements: Test 1, klog HIGH Kernel message: [ 16.719798] ACPI Warning for klog _SB_.PCI0.VID2._DOD: Return Package has no elements klog (empty) (20090903/nspredef-433) klog klog ADVICE: ACPI AML interpreter executed a Method that klog returned a package with no elements inside it. This is klog most probably a bug in the Method and needs to be fixed. klog klog FAILED [CRITICAL] KlogAcpiNamespaceLookupFailure: Test 1, klog CRITICAL Kernel message: [ 16.942589] ACPI Error klog (dswload-0802): [_T_0] Namespace lookup failure, klog AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 16.942606] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.OVGA.DD03.GBQC] klog (Node ffff8800b7e3c6e0), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 16.942654] ACPI Error (psparse-0537): klog Method parse/execution failed [_SB_.PCI0.OVGA.DD03._BQC] klog (Node ffff8800b7e3c6c0), AE_ALREADY_EXISTS klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 17.125601] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] eee27810 (20110112 klog /exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 17.125618] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0._DSM] (Node f7431fa8), klog AE_AML_OPERAND_TYPE (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 17.125669] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] eee27780 (20110112 klog /exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 17.125690] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.PEG1.GFX0._DSM] (Node f7445c78), klog AE_AML_OPERAND_TYPE (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 17.802564] ACPI Error: Method parse/execution klog failed [_SB_.WMID.HWMC] (Node ffff8801ffc5c078), klog AE_AML_BUFFER_LIMIT (20110112/psparse-536) klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 17.802574] ACPI Error: Method parse/execution klog failed [_SB_.WMID.WMAD] (Node ffff8801ffc5c258), klog AE_AML_BUFFER_LIMIT (20110112/psparse-536) klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 17.847665] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.PEG0.PEGP.DD02._BCL] (Node f444ebe8), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 17.985672] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.IBCM] (Node klog ffff8800b3832600), AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiBufferLimit: Test 1, HIGH Kernel klog message: [ 17.985723] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.GFX0.DD03._BCM] (Node klog ffff8800b382b840), AE_AML_BUFFER_LIMIT klog klog ADVICE: Generally this error occurs because of access klog outside of a buffer. This occurs for several reasons: a) A klog field does not fit within the current length of a buffer, klog b) an ACPI table load did not fit into a buffer, c) An klog attempt to convert a buffer into an integer failed because klog the buffer was zero sized, d) a SMBus/IPMI klog /GenericSerialBus write failed because the buffer was too klog small, e) An index into a buffer was too long and fell klog outside the buffer. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 18.054842] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff880133a777e0 klog (20110112/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 18.054860] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.VGA_._DSM] (Node ffff880137659190), klog AE_AML_OPERAND_TYPE (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 18.054909] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff880133a776c0 klog (20110112/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 18.054932] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.P0P1.VGA_._DSM] (Node ffff88013765d230), klog AE_AML_OPERAND_TYPE (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 18.353938] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.PEGP.VGA_.LCD_.GBQC] (Node klog ffff88013762f708), AE_ALREADY_EXISTS (20110112 klog /psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 18.353954] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.PEGP.VGA_.LCD_._BQC] (Node klog ffff88013762f6e0), AE_ALREADY_EXISTS (20110112 klog /psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 18.367485] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.PEGP.VGA_.LCD1.GBQC] (Node klog ffff88013762f988), AE_ALREADY_EXISTS (20110112 klog /psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiObjectAlreadyExists: Test 1, HIGH klog Kernel message: [ 18.367501] ACPI Error: Method parse klog /execution failed [_SB_.PCI0.PEGP.VGA_.LCD1._BQC] (Node klog ffff88013762f960), AE_ALREADY_EXISTS (20110112 klog /psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 18.720899] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node klog f70206d8), AE_AML_PACKAGE_LIMIT klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 19.086127] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node klog f702e6a8), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 19.086176] ACPI Error (psparse-0537): Method klog parse/execution failed [ECRB] (Node f702e780), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 19.086202] ACPI Error (psparse-0537): Method klog parse/execution failed [EC0A] (Node f702e990), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 19.086228] ACPI Error (psparse-0537): Method parse klog /execution failed [_SB_.AMW0._WED] (Node f7019fd8), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 19.408610] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0._DOD] (Node f74256a8), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 20.135790] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff88023b491318 klog (20110316/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 20.135804] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0._DSM] (Node ffff88023ec61eb0), klog AE_AML_OPERAND_TYPE (20110316/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 20.135849] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff88023b491708 klog (20110316/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 20.135864] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.PEG1.GFX0._DSM] (Node ffff88023ec77668), klog AE_AML_OPERAND_TYPE (20110316/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 20.149010] ACPI Error: Needed [Integer klog /String/Buffer], found [Package] f741ed48 (20100428 klog /exresop-422) klog klog ADVICE: An error occurred in resolving operands, required klog an Integer, String or Buffer type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 20.149032] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.P0P2.PEGP.LCD_._BQC] klog (Node f741f978), AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiEvaluationFailed: Test 1, HIGH klog Kernel message: [ 20.149063] ACPI Warning: Evaluating _BQC klog failed (20100428/video-651) klog klog ADVICE: Executing the ACPI Method ended in an execution klog failure. This needs investigating. klog klog FAILED [HIGH] KlogAcpiBcqInsteadOfBqc: Test 1, HIGH Kernel klog message: [ 20.298134] [Firmware Bug]: _BCQ is used instead klog of _BQC klog klog ADVICE: ACPI Method _BCQ was defined (typo) instead of klog _BQC - this should be fixed.however the kernel has klog detected this and is working around this typo. klog klog FAILED [HIGH] KlogAcpiBqcReturnedInvalidLevel: Test 1, klog HIGH Kernel message: [ 20.342464] ACPI Warning: _BQC klog returned an invalid level (20110413/video-473) klog klog ADVICE: Method _BQC (Brightness Query Current) returned an klog invalid display brightness level. klog klog FAILED [LOW] KlogDuplicateACPIVideoBus: Test 1, LOW Kernel klog message: [ 20.435766] [Firmware Bug]: Duplicate ACPI video klog bus devices for the same VGA controller, please try module klog parameter "video.allow_duplicates=1"if the current driver klog doesn't work. klog klog ADVICE: The ACPI video driver has found a duplicate ACPI klog video bus device for the same VGA controller. If the klog current driver does not work, one can try to work around klog this using the video.allow_duplicates=1 kernel parameter. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 20.634744] ACPI Warning for klog _SB_.PCI0.GFX0.DD02._BQC: Return type mismatch - found klog Reference, expected Integer (20100428/nspredef-1053) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [HIGH] KlogAcpiPackageLimit: Test 1, HIGH Kernel klog message: [ 21.460488] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.GFX0._DOD] (Node ffff880133632c80), klog AE_AML_PACKAGE_LIMIT (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 21.562484] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] f7260370 (20090903 klog /exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 21.562496] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.GFX0.DD02.GBQC] (Node klog f7017a68), AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 21.562544] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.GFX0.DD02._BQC] (Node klog f7017a50), AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 22.154348] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node klog f74276a8), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 22.154443] ACPI Error (psparse-0537): Method klog parse/execution failed [ECRB] (Node f7427780), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 22.154516] ACPI Error (psparse-0537): Method klog parse/execution failed [ECG5] (Node f7427828), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 22.154587] ACPI Error (psparse-0537): Method parse klog /execution failed [_SB_.AC__._PSR] (Node f7427c18), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [LOW] KlogAcpiDodWithNoDos: Test 1, LOW Kernel klog message: [ 24.824888] [Firmware Bug]: ACPI(IGPU) defines klog _DOD but not _DOS klog klog ADVICE: ACPI Method _DOD (Enumerate all devices attached klog to display adapter) is defined but we should also have klog _DOS (Enable/Disable output switching) defined but it's klog been omitted. klog klog FAILED [HIGH] KlogAcpiResolveOpBadType: Test 1, HIGH klog Kernel message: [ 25.859931] ACPI Error: Needed [Buffer klog /String/Package], found [Integer] ffff880139af5240 klog (20090903/exresop-590) klog klog ADVICE: An error occurred in resolving operands, required klog a Buffer, String or Package type, got a different type klog instead. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 25.859949] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.VGA_._DSM] (Node klog ffff88013ba4c0e0), AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiOperandType: Test 1, HIGH Kernel klog message: [ 25.860025] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.P0P1.VGA_._DSM] (Node klog ffff88013ba4da80), AE_AML_OPERAND_TYPE klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiTimeOutReturnedByHandler: Test 1, klog HIGH Kernel message: [ 26.653079] ACPI Exception: AE_TIME, klog Returned by Handler for [EmbeddedControl] (20100428 klog /evregion-474) klog klog ADVICE: This is most probably caused by when a read or klog write operation to the EC memory has failed because of a klog timeout waiting for the Embedded Controller to complete klog the transaction. Normally, the kernel waits for 500ms for klog the Embedded Controller status port to indicate that a klog transaction is complete, but in this case it has not and a klog AE_TIME error has been returned. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 26.653190] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node klog ffff880226c54ce0), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 26.653252] ACPI Error (psparse-0537): Method klog parse/execution failed [ECRB] (Node ffff880226c54e00), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 26.653283] ACPI Error (psparse-0537): Method klog parse/execution failed [ECG5] (Node ffff880226c54ee0), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 26.653307] ACPI Error (psparse-0537): Method parse klog /execution failed [_SB_.AC__._PSR] (Node ffff880226c56420) klog , AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiBqcReturnedInvalidLevel: Test 1, klog HIGH Kernel message: [ 26.874386] ACPI Warning: _BQC klog returned an invalid level (20090903/video-631) klog klog ADVICE: Method _BQC (Brightness Query Current) returned an klog invalid display brightness level. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 29.470614] ACPI Warning for klog _SB_.PCI0.GFX0.DD03._BQC: Return type mismatch - found klog Reference, expected Integer (20100428/nspredef-1053) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 30.140339] ACPI Error (psparse-0537): Method klog parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node klog ffff880217050ce0), AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 30.140421] ACPI Error (psparse-0537): Method klog parse/execution failed [ECRB] (Node ffff880217050e00), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiEcTimeout: Test 1, HIGH Kernel klog message: [ 30.140448] ACPI Error (psparse-0537): Method klog parse/execution failed [ECG5] (Node ffff880217050ee0), klog AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from the Embedded klog Controller (EC) timing out while waiting for a transaction klog to complete. This could indicate that either EC interrupts klog are being disabled or that the EC has temporarily gone klog offline or locked up, so this could be a kernel error or klog more probably a bug in the EC firmware. See the kernel klog driver drivers/acpi/ec.c. One can increase EC timeouts klog using the kernel parameter ec_delay to specify the timeout klog in milliseconds, the default is 500. klog klog FAILED [HIGH] KlogAcpiTimeout: Test 1, HIGH Kernel message klog : [ 30.140475] ACPI Error (psparse-0537): Method parse klog /execution failed [_SB_.AC__._PSR] (Node ffff880217052420) klog , AE_TIME klog klog ADVICE: The ACPI driver encountered an error executing klog some ACPI AML code which originated from a device timing klog out. klog klog FAILED [HIGH] KlogAcpiNamespaceLookupFailure: Test 1, HIGH klog Kernel message: [ 42.490181] ACPI Error: [_SB_.VDRV] klog Namespace lookup failure, AE_NOT_FOUND (20110112 klog /psargs-359) klog klog ADVICE: The kernel has detected an error trying to execute klog a method and it cannot find an object. This indicates a klog bug in the DSDT or SSDT AML code. klog klog FAILED [HIGH] KlogAcpiObjectNotFound: Test 1, HIGH Kernel klog message: [ 42.490202] ACPI Error: Method parse/execution klog failed [_SB_.PCI0.LPC0.H_EC._Q51] (Node ffff88003d9b1e60), klog AE_NOT_FOUND (20110112/psparse-536) klog klog ADVICE: This is a bug picked up by the kernel, but as yet, klog the firmware test suite has no diagnostic advice for this klog particular problem. klog klog FAILED [HIGH] KlogAcpiReturnTypeMismatch: Test 1, HIGH klog Kernel message: [ 44.661543] ACPI Warning for klog _SB_.PCI0.GFX0.DD01._BCL: Return type mismatch - found klog Integer, expected Package (20090903/nspredef-1006) klog klog ADVICE: The ACPI Method returned an incorrect type, this klog should be fixed. klog klog FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog message: [ 50.737630] ACPI Warning for klog _SB_.PCI0.AGP_.VID_.MXMI: Excess arguments - needs 1, klog found 2 (20090903/nspredef-303) klog klog ADVICE: ACPI AML interpreter has found some non-conforming klog AML code. This should be investigated and fixed. klog klog FAILED [HIGH] KlogAcpiBadAmlCode: Test 1, HIGH Kernel klog message: [ 50.737686] ACPI Warning for klog _SB_.PCI0.AGP_.VID_.MXMS: Excess arguments - needs 1, klog found 2 (20090903/nspredef-303) klog klog ADVICE: ACPI AML interpreter has found some non-conforming klog AML code. This should be investigated and fixed. klog klog Found 1589 unique errors in kernel log. klog klog ========================================================== klog 0 passed, 1589 failed, 0 warning, 0 aborted, 0 skipped, 0 klog info only. klog ========================================================== fwts-test/klog-0001/klog-0002.log000066400000000000000000007651031465205512700163710ustar00rootroot00000000000000summary summary 0 passed, 1589 failed, 0 warning, 0 aborted, 0 skipped, 0 summary info only. summary summary Test Failure Summary summary ========================================================== summary summary Critical failures: 42 summary klog: CRITICAL Kernel message: [ 0.000000] ACPI Error: A valid RSDP was not found (20090903/tbxfroot-219) summary klog: CRITICAL Kernel message: [ 0.000000] ACPI Error: A valid RSDP was not found (20100428/tbxfroot-219) summary klog: CRITICAL Kernel message: [ 0.000000] ACPI Error: A valid RSDP was not found (20110112/tbxfroot-219) summary klog: CRITICAL Kernel message: [ 0.000000] WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 1408MB of RAM. summary klog: CRITICAL Kernel message: [ 0.000000] WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 4MB of RAM. summary klog: CRITICAL Kernel message: [ 0.025446] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x00BE (20110112/psloop-526) summary klog: CRITICAL Kernel message: [ 0.025463] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x00C3 (20110112/psloop-526) summary klog: CRITICAL Kernel message: [ 0.042222] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x2366 (20100121/psloop-526) summary klog: CRITICAL Kernel message: [ 0.042240] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x006C (20090903/psloop-522) summary klog: CRITICAL Kernel message: [ 0.042253] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x006F (20090903/psloop-522) summary klog: CRITICAL Kernel message: [ 0.042265] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x0070 (20090903/psloop-522) summary klog: CRITICAL Kernel message: [ 0.042279] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x0077 (20090903/psloop-522) summary klog: CRITICAL Kernel message: [ 0.042291] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x007C (20090903/psloop-522) summary klog: CRITICAL Kernel message: [ 0.042302] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x007D (20090903/psloop-522) summary klog: CRITICAL Kernel message: [ 0.042311] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x007F (20090903/psloop-522) summary klog: CRITICAL Kernel message: [ 0.042322] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x0080 (20090903/psloop-522) summary klog: CRITICAL Kernel message: [ 0.044066] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x678F (20100428/psloop-526) summary klog: CRITICAL Kernel message: [ 0.192146] ACPI Error (dswload-0781): [_PSW] Namespace lookup failure, AE_ALREADY_EXISTS summary klog: CRITICAL Kernel message: [ 0.213084] ACPI Error (dsfield-0143): [CAPB] Namespace lookup failure, AE_ALREADY_EXISTS summary klog: CRITICAL Kernel message: [ 0.296054] [Firmware Bug]: Invalid critical threshold (0) summary klog: CRITICAL Kernel message: [ 0.329373] ACPI Error (dsfield-0143): [CAPD] Namespace lookup failure, AE_ALREADY_EXISTS summary klog: CRITICAL Kernel message: [ 0.362606] ACPI Error (dsfield-0487): [SMIC] Namespace lookup failure, AE_ALREADY_EXISTS summary klog: CRITICAL Kernel message: [ 0.362870] ACPI Error (dsfield-0140): [CAPB] Namespace lookup failure, AE_ALREADY_EXISTS summary klog: CRITICAL Kernel message: [ 0.420210] ACPI Error: [CAPD] Namespace lookup failure, AE_ALREADY_EXISTS (20110413/dsfield-143) summary klog: CRITICAL Kernel message: [ 0.461767] ACPI Error: [CAPB] Namespace lookup failure, AE_ALREADY_EXISTS (20110413/dsfield-143) summary klog: CRITICAL Kernel message: [ 0.492648] ACPI Error (dswload-0781): [PRID] Namespace lookup failure, AE_ALREADY_EXISTS summary klog: CRITICAL Kernel message: [ 0.612793] ACPI Error: [CAPB] Namespace lookup failure, AE_ALREADY_EXISTS (20110112/dsfield-143) summary klog: CRITICAL Kernel message: [ 0.674920] ACPI Error: [SERN] Namespace lookup failure, AE_ALREADY_EXISTS (20110413/dswload2-316) summary klog: CRITICAL Kernel message: [ 0.743525] ACPI Error: [CAPD] Namespace lookup failure, AE_ALREADY_EXISTS (20110112/dsfield-143) summary klog: CRITICAL Kernel message: [ 0.788418] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node ffff88030a048b40), AE_AML_BUFFER_LIMIT summary klog: CRITICAL Kernel message: [ 1.125427] [Firmware Bug]: No valid trip found summary klog: CRITICAL Kernel message: [ 1.214748] ACPI Error: [_T_1] Namespace lookup failure, AE_ALREADY_EXISTS (20110112/dswload-802) summary klog: CRITICAL Kernel message: [ 1.336148] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node ffff88012b647200), AE_AML_BUFFER_LIMIT summary klog: CRITICAL Kernel message: [ 1.371180] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node ffff88044b85e4a0), AE_AML_BUFFER_LIMIT summary klog: CRITICAL Kernel message: [ 1.861558] ACPI Error: [SERN] Namespace lookup failure, AE_ALREADY_EXISTS (20110112/dswload-802) summary klog: CRITICAL Kernel message: [ 2.222353] ACPI Error: [EABF] Namespace lookup failure, AE_ALREADY_EXISTS (20110112/dswload-802) summary klog: CRITICAL Kernel message: [ 2.280398] ACPI Error (dswload-0781): [_T_0] Namespace lookup failure, AE_ALREADY_EXISTS summary klog: CRITICAL Kernel message: [ 2.324547] ACPI Error: [EABF] Namespace lookup failure, AE_ALREADY_EXISTS (20110413/dswload2-316) summary klog: CRITICAL Kernel message: [ 2.949716] ACPI Error: Method parse/execution failed [_SB_._OSC] (Node ffff880297016ca8), AE_AML_BUFFER_LIMIT (20110112/psparse-536) summary klog: CRITICAL Kernel message: [ 6.732287] ACPI Error: [_T_0] Namespace lookup failure, AE_ALREADY_EXISTS (20110112/dswload-802) summary klog: CRITICAL Kernel message: [ 6.773266] ACPI Error: [CAPB] Namespace lookup failure, AE_ALREADY_EXISTS (20101013/dsfield-143) summary klog: CRITICAL Kernel message: [ 16.942589] ACPI Error (dswload-0802): [_T_0] Namespace lookup failure, AE_ALREADY_EXISTS summary summary High failures: 1201 summary klog: HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X address mismatch in Gpe0Block: 00008018/0000000000008028, using 32 (20090903/tbfadt-427) summary klog: HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X address mismatch in Gpe0Block: 00008020/0000000000008028, using 32 (20090903/tbfadt-427) summary klog: HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X address mismatch in Gpe0Block: 0x00008020/0x0000000000008028, using 32 (20110112/tbfadt-427) summary klog: HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 00008030/0000000000008020, using 32 (20090903/tbfadt-427) summary klog: HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 00008800/0000000000008100, using 32 (20090903/tbfadt-427) summary klog: HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 0x00000900/0x0000000000000800, using 32 (20110112/tbfadt-427) summary klog: HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 0x00001218/0x0000000000001214, using 32 (20100428/tbfadt-427) summary klog: HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 0x00001218/0x0000000000001214, using 32 (20110413/tbfadt-430) summary klog: HIGH Kernel message: [ 0.000000] ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 0x00008800/0x0000000000008100, using 32 (20110112/tbfadt-427) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! 20090521 tbfadt-370 summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20090903/tbfadt-369) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20100121/tbfadt-369) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20100428/tbfadt-369) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20100702/tbfadt-369) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20101013/tbfadt-369) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20110112/tbfadt-369) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20110316/tbfadt-369) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20110413/tbfadt-369) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3776BF40/0x000000003776ED40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x38FE4E40/0x0000000038FE4D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x38FE4E40/0x0000000038FE4D40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F465F40/0x000000003F465F80, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F473F40/0x000000003F473F80, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F509F40/0x000000003F509F80, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F509F40/0x000000003F509F80, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F611E40/0x000000003F611D40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F611E40/0x000000003F611D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F611E40/0x000000003F611D40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x6FB75F40/0x000000006FB75F80, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x77603F40/0x0000000077603F80, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x77603F40/0x0000000077603F80, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7762DF40/0x000000007762DF80, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x77630F40/0x0000000077630F80, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7776BF40/0x000000007776ED40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7776BF40/0x000000007776ED40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x78FE4E40/0x0000000078FE4D40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7A7E4E40/0x000000007A7E4D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7BE20F40/0x000000007BE20F80, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7D7E4E40/0x000000007D7E4D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7D8C4F40/0x000000007D8C5E40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7F611E40/0x000000007F611D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7FCEBF40/0x000000007FCE7F40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7FD5AF40/0x000000007FD5FF40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAAD87F40/0x00000000AADA1D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAAD87F40/0x00000000AADA1D40, using 32 (20110316/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAAD87F40/0x00000000AADA1D40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAADB7F40/0x00000000AADD1D40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAADB7F40/0x00000000AADD1D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAADB9F40/0x00000000AADD3D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAAF2AF40/0x00000000AAF2DD40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAAFE4E40/0x00000000AAFE4D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAB62DF40/0x00000000AB62DF80, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAB62DF40/0x00000000AB62DF80, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAFB77F40/0x00000000AFB77F80, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB5F17E40/0x00000000B5F17D40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB5F1BE40/0x00000000B5F1BD40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB6D5AF40/0x00000000B6D61D40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB6DB9F40/0x00000000B6DD3D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB762CF40/0x00000000B762CF80, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB7B1CE40/0x00000000B7B1CD40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB7B1CE40/0x00000000B7B1CD40, using 32 (20110316/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB7B1CE40/0x00000000B7B1CD40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB8FE4E40/0x00000000B8FE4D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBAD17F40/0x00000000BAD31D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBAD87F40/0x00000000BADA1D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBADABF40/0x00000000BADAED40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBADABF40/0x00000000BADAED40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBAF1CF40/0x00000000BAF1FD40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBAFE4E40/0x00000000BAFE4D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBAFE5E40/0x00000000BAFE5D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB4D1F40/0x00000000BB4DFD40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB583F40/0x00000000BB59DD40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB583F40/0x00000000BB59DD40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB5B3F40/0x00000000BB5CDD40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB5B3F40/0x00000000BB5CDD40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB5B3F40/0x00000000BB5CDD40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB62CF40/0x00000000BB62CF80, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB62DF40/0x00000000BB62DF80, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB648F40/0x00000000BB64BD40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB649F40/0x00000000BB64CD40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB76BF40/0x00000000BB76ED40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBBE27F40/0x00000000BBE27F80, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBBE27F40/0x00000000BBE27F80, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBBE29F40/0x00000000BBE29F80, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBDB65F40/0x00000000BDB6BE40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBDF17E40/0x00000000BDF17D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBDF18E40/0x00000000BDF18D40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBDF19E40/0x00000000BDF19D40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBDF19E40/0x00000000BDF19D40, using 32 (20101013/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBDF19E40/0x00000000BDF19D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBDF1AE40/0x00000000BDF1AD40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBE97CF40/0x00000000BE996D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBEDB7F40/0x00000000BEDD1D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBEDB8F40/0x00000000BEDD1D40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBEDB8F40/0x00000000BEDD1D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBEDB9F40/0x00000000BEDD3D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBF4D1F40/0x00000000BF4DFD40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBF62CF40/0x00000000BF62CF80, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBF62DF40/0x00000000BF62DF80, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBF654F40/0x00000000BF662D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBF7E4E40/0x00000000BF7E4D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBFA4CF40/0x00000000BFA51F40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBFA4CF40/0x00000000BFA51F40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBFE17E40/0x00000000BFE17D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBFE21F40/0x00000000BFE21E40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xC9E58F40/0x00000000C9E6ED40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCAB39F40/0x00000000CAB3CD40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCAFE4E40/0x00000000CAFE4D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCAFE4E40/0x00000000CAFE4D40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCAFE5E40/0x00000000CAFE5D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCB61DF40/0x00000000CB61DE40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCB61DF40/0x00000000CB61DE40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCBE4CF40/0x00000000CBE51F40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCBE4CF40/0x00000000CBE51F40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCBF6BF40/0x00000000CBF6ED40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCEF27F40/0x00000000CEF2AD40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCEF27F40/0x00000000CEF2AD40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCEF27F40/0x00000000CEF2AD40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCEF28F40/0x00000000CEF2BD40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCEF28F40/0x00000000CEF2BD40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCEF2BF40/0x00000000CEF2ED40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCEF2BF40/0x00000000CEF2ED40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCF36BF40/0x00000000CF36ED40, using 32 (20100702/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCF36BF40/0x00000000CF36ED40, using 32 (20101013/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCF76BF40/0x00000000CF76ED40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCF76BF40/0x00000000CF76ED40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCF7E4E40/0x00000000CF7E4D40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCF7E4E40/0x00000000CF7E4D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCF7E4E40/0x00000000CF7E4D40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCFBFAF40/0x00000000CFBF6F40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCFD56F40/0x00000000CFD52F40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCFD5FF40/0x00000000CFD65E40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xD2F2DF40/0x00000000D2F30D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDB36BF40/0x00000000DB36ED40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDB36BF40/0x00000000DB36ED40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDB76BF40/0x00000000DB76ED40, using 32 (20100428/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDB76BF40/0x00000000DB76ED40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDB76BF40/0x00000000DB76ED40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDEB39F40/0x00000000DEB3CD40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDEB3AF40/0x00000000DEB3DD40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDEEBAF40/0x00000000DEEBDD40, using 32 (20110413/tbfadt-489) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDEF2DF40/0x00000000DEF30D40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDF64BF40/0x00000000DF64ED40, using 32 (20110112/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 3762DF40/000000003762DF80, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 3F611E40/000000003F611D40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 7776BF40/000000007776ED40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 7DB61F40/000000007DB66F40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 7F3ECF40/000000007F3E8F40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 7F611E40/000000007F611D40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 9DCC4F40/000000009DCC5E40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - AFB75F40/00000000AFB75F80, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - B7B1CE40/00000000B7B1CD40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - B7B1CE40/00000000B7B1CD40, using 32 (20100121/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BADABF40/00000000BADAED40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BAF2DF40/00000000BAF30D40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BB62DF40/00000000BB62DF80, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BB76BF40/00000000BB76ED40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BBE28E40/00000000BBE28D40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BDB5BF40/00000000BDB60F40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BDB5FF40/00000000BDB64F40, using 32 20090521 tbfadt-487 summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BDF17E40/00000000BDF17D40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BEDB7F40/00000000BEDD1D40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BF62CF40/00000000BF62CF80, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BF76BF40/00000000BF76ED40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - CBE4AF40/00000000CBE4FF40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - CBF6BF40/00000000CBF6ED40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - CEF28F40/00000000CEF2BD40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - CEF2CF40/00000000CEF2FD40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - D2F2DF40/00000000D2F30D40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - DADC1F40/00000000DADD5D40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - DB36BF40/00000000DB36ED40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - DB76BF40/00000000DB76ED40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - DEEBAF40/00000000DEEBDD40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - DEF2DF40/00000000DEF30D40, using 32 (20090903/tbfadt-486) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 20090521 tbfadt-527 summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 (20090903/tbfadt-526) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 (20100428/tbfadt-526) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 (20101013/tbfadt-526) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 (20110112/tbfadt-526) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 (20110413/tbfadt-529) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: BIOS XSDT has NULL entry, using RSDT (20110112/tbutils-663) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Invalid length for Pm1aControlBlock: 32, using default 16 (20090903/tbfadt-607) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Invalid length for Pm1aControlBlock: 32, using default 16 (20100428/tbfadt-607) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Invalid length for Pm1aControlBlock: 32, using default 16 (20110112/tbfadt-607) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Invalid length for Pm1aControlBlock: 32, using default 16 (20110413/tbfadt-610) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Invalid length for Pm1bControlBlock: 32, using default 16 (20090903/tbfadt-607) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 0, using default 8 (20090903/tbfadt-607) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 0, using default 8 (20100428/tbfadt-607) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 0, using default 8 (20110112/tbfadt-607) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 16, using default 8 (20100428/tbfadt-607) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 16, using default 8 (20110112/tbfadt-607) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 16, using default 8 (20110413/tbfadt-610) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 32, using default 8 (20090903/tbfadt-607) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 32, using default 8 (20110112/tbfadt-607) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Invalid length for PmTimerBlock: 24, using default 32 (20100428/tbfadt-607) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 000000000000102C/0 20090521 tbfadt-558 summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 000000000000102C/0 (20090903/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 000000000000802C/0 (20090903/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 0x0000000000000000/0x4 (20110413/tbfadt-560) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 0x000000000000102C/0x0 (20100428/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 0x000000000000102C/0x0 (20101013/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 0x000000000000102C/0x0 (20110112/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 0x000000000000102C/0x0 (20110413/tbfadt-560) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 0x00000000000044A0/0x0 (20100428/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0000000000000000/1 20090521 tbfadt-558 summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0000000000000000/1 (20090903/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0000000000000050/0 (20090903/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000000/0x1 (20100428/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000000/0x1 (20101013/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000000/0x1 (20110112/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000000/0x1 (20110413/tbfadt-560) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000450/0x0 (20100428/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000450/0x0 (20110112/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000814/0x0 (20100428/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000820/0x0 (20100428/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000820/0x0 (20110112/tbfadt-557) summary klog: HIGH Kernel message: [ 0.000000] ACPI Warning (tbfadt-0460): Optional field "Gpe1Block" has zero address or length: 000000000000102C/0 [20080926] summary klog: HIGH Kernel message: [ 0.022719] ACPI Error: Found unknown opcode 0xFD at AML address f7ffe14c offset 0xE8, ignoring (20110112/psloop-141) summary klog: HIGH Kernel message: [ 0.034090] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ee025630), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.040119] [Firmware Bug]: the BIOS has corrupted hw-PMU resources (MSR 186 is 400000) summary klog: HIGH Kernel message: [ 0.045570] ACPI Warning: For _SB_.PCI0.LPCB.H_EC._GLK: Parameter count mismatch - ASL declared 1, ACPI requires 0 (20110112/nspredef-352) summary klog: HIGH Kernel message: [ 0.050847] ACPI Warning: Package List length (0x10) larger than NumElements count (0x8), truncated summary klog: HIGH Kernel message: [ 0.053909] ACPI Warning: Package List length (0x10) larger than NumElements count (0x6), truncated summary klog: HIGH Kernel message: [ 0.074070] ACPI Error: The DSDT has been corrupted or replaced - old, new headers below (20110413/tbutils-372) summary klog: HIGH Kernel message: [ 0.074090] ACPI Error: Please send DMI info to linux-acpi@vger.kernel.org summary klog: HIGH Kernel message: [ 0.077854] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4c250d8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.078226] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1.APCT] (Node f7033090), AE_NO_MEMORY summary klog: HIGH Kernel message: [ 0.078254] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1.GCAP] (Node f7033078), AE_NO_MEMORY summary klog: HIGH Kernel message: [ 0.078278] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node f7033048), AE_NO_MEMORY summary klog: HIGH Kernel message: [ 0.085590] ACPI Error: Could not map memory at 0x000000007F5E3520, size 463 (20110112/exregion-178) summary klog: HIGH Kernel message: [ 0.085606] ACPI Error: Method parse/execution failed [_PR_.CPU1.APPT] (Node f403d228), AE_NO_MEMORY (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.085618] ACPI Error: Method parse/execution failed [_PR_.CPU1.GCAP] (Node f403d1f8), AE_NO_MEMORY (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.085627] ACPI Error: Could not map memory at 0x000000007D3E1520, size 463 (20110112/exregion-178) summary klog: HIGH Kernel message: [ 0.085628] ACPI Error: Method parse/execution failed [_PR_.CPU1._PDC] (Node f403d1c8), AE_NO_MEMORY (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.086081] ACPI Error: Could not map memory at 0x000000007F395420, size 141 (20110112/exregion-178) summary klog: HIGH Kernel message: [ 0.086097] ACPI Error: Method parse/execution failed [_PR_.CPU1.APCT] (Node f403d210), AE_NO_MEMORY (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.086108] ACPI Error: Method parse/execution failed [_PR_.CPU2.GCAP] (Node f403d270), AE_NO_MEMORY (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.086118] ACPI Error: Method parse/execution failed [_PR_.CPU2._PDC] (Node f403d240), AE_NO_MEMORY (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.086119] ACPI Error: Could not map memory at 0x000000007D198120, size 141 (20110112/exregion-178) summary klog: HIGH Kernel message: [ 0.091402] ACPI Warning: Package List length (0x7) larger than NumElements count (0x3), truncated summary klog: HIGH Kernel message: [ 0.091463] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1.APPT] (Node f701e228), AE_INVALID_TABLE_LENGTH summary klog: HIGH Kernel message: [ 0.091510] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1.GCAP] (Node f701e1f8), AE_INVALID_TABLE_LENGTH summary klog: HIGH Kernel message: [ 0.091552] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node f701e1c8), AE_INVALID_TABLE_LENGTH summary klog: HIGH Kernel message: [ 0.092524] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1.APCT] (Node f701e210), AE_NO_MEMORY summary klog: HIGH Kernel message: [ 0.092570] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2.GCAP] (Node f701e270), AE_NO_MEMORY summary klog: HIGH Kernel message: [ 0.092612] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PDC] (Node f701e240), AE_NO_MEMORY summary klog: HIGH Kernel message: [ 0.093544] ACPI Error: Needed type [Reference], found [Device] f7019f90 (20100428/exresop-104) summary klog: HIGH Kernel message: [ 0.095719] ACPI Error: Could not map memory at 0x0000000087127520, size 463 (20110112/exregion-178) summary klog: HIGH Kernel message: [ 0.095737] ACPI Error: Method parse/execution failed [_PR_.CPU1.APPT] (Node f383e498), AE_NO_MEMORY (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.095749] ACPI Error: Method parse/execution failed [_PR_.CPU1.GCAP] (Node f383e468), AE_NO_MEMORY (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.095760] ACPI Error: Method parse/execution failed [_PR_.CPU1._PDC] (Node f383e438), AE_NO_MEMORY (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.095817] [Firmware Bug]: ACPI: ACPI brightness control misses _BQC function summary klog: HIGH Kernel message: [ 0.096257] ACPI Error: Could not map memory at 0x0000000086DB1C20, size 141 (20110112/exregion-178) summary klog: HIGH Kernel message: [ 0.096273] ACPI Error: Method parse/execution failed [_PR_.CPU1.APCT] (Node f383e480), AE_NO_MEMORY (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.096285] ACPI Error: Method parse/execution failed [_PR_.CPU2.GCAP] (Node f383e4e0), AE_NO_MEMORY (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.096295] ACPI Error: Method parse/execution failed [_PR_.CPU2._PDC] (Node f383e4b0), AE_NO_MEMORY (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.101941] ACPI Error: Field [ASSM] at 524320 exceeds Buffer [BUF0] size 880 (bits) (20110112/dsopcode-597) summary klog: HIGH Kernel message: [ 0.101946] ACPI Error: Method parse/execution failed [_SB_.MEM_._CRS] (Node f442af60), AE_AML_BUFFER_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.101953] ACPI Error: Method execution failed [_SB_.MEM_._CRS] (Node f442af60), AE_AML_BUFFER_LIMIT (20110112/uteval-103) summary klog: HIGH Kernel message: [ 0.104297] ACPI Error (psargs-0359): [OSYS] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.104304] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ACEL._STA] (Node f701c4e0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.105061] ACPI Warning: Package List length (0xCA) larger than NumElements count (0x4), truncated summary klog: HIGH Kernel message: [ 0.106912] ACPI Warning: Package List length (0x5) larger than NumElements count (0x2), truncated summary klog: HIGH Kernel message: [ 0.109618] ACPI Error: Needed type [Reference], found [Device] f7012f90 (20090903/exresop-104) summary klog: HIGH Kernel message: [ 0.109635] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701adc8), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 0.113709] ACPI Error: Method parse/execution failed [_PR_.CPU1._PDC] (Node f5822150), AE_INVALID_TABLE_LENGTH (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.113864] ACPI Error: Method parse/execution failed [_PR_.CPU2._PDC] (Node f58221e0), AE_INVALID_TABLE_LENGTH (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.114544] ACPI Error: Method parse/execution failed [_PR_.CPU0._PDC] (Node f54211c8), AE_INVALID_TABLE_LENGTH (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.118277] ACPI Error (psargs-0359): [SUPP] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.118284] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7012780), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.120765] ACPI Warning for _SB_.PCI0.P2P_._PRT: Return Package has no elements (empty) (20090903/nspredef-433) summary klog: HIGH Kernel message: [ 0.122347] ACPI Error: Could not map memory at 0x00000000000FFA32, size 0 (20100428/exregion-178) summary klog: HIGH Kernel message: [ 0.122369] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PDC] (Node f70191c8), AE_NO_MEMORY summary klog: HIGH Kernel message: [ 0.128150] ACPI Warning for _SB_.PCI0.P32_._PRT: Return Package has no elements (empty) (20090903/nspredef-433) summary klog: HIGH Kernel message: [ 0.136585] ACPI Error: Field [ALB2] at 120 exceeds Buffer [CRSA] size 104 (bits) (20090903/dsopcode-596) summary klog: HIGH Kernel message: [ 0.136600] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.PIB_.SIO0.LPT_._CRS] (Node dd8159d8), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 0.136637] ACPI Error (uteval-0250): Method execution failed [_SB_.PCI0.PIB_.SIO0.LPT_._CRS] (Node dd8159d8), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 0.140000] [Firmware Bug]: the BIOS has corrupted hw-PMU resources (MSR 186 is 43003c) summary klog: HIGH Kernel message: [ 0.150000] ACPI Error: Method parse/execution failed [_SB_.PCI0.SBRG.EC0_._REG] (Node ffff880137e47618), AE_NOT_EXIST (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.150000] ACPI Error: No handler for Region [ERAM] (ffff880137e58e10) [EmbeddedControl] (20110112/evregion-369) summary klog: HIGH Kernel message: [ 0.159797] ACPI Error: Method parse/execution failed [_SB_._OSC] (Node f4421648), AE_NOT_FOUND (20110413/psparse-536) summary klog: HIGH Kernel message: [ 0.160246] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node ffff880147830960), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.160246] ACPI Error: [_SB_.PHSR] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 0.163431] ACPI Warning: Package List length (0x6) larger than NumElements count (0x3), truncated summary klog: HIGH Kernel message: [ 0.165683] ACPI Error: [CDW1] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 0.165689] ACPI Error: Method parse/execution failed [_SB_._OSC] (Node f3821648), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.166264] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node f701a648), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.166294] ACPI Error: Method parse/execution failed [_SB_._OSC] (Node f4021648), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.166323] ACPI Error: No handler for Region [ERAM] (f7022168) [EmbeddedControl] (20100428/evregion-369) summary klog: HIGH Kernel message: [ 0.166336] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node f7021bb8), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.166808] ACPI Error: No handler for Region [ERAM] (f7023938) [EmbeddedControl] (20100428/evregion-369) summary klog: HIGH Kernel message: [ 0.166808] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.HTEV] (Node f701be10), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.166808] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node f7024d08), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.169111] ACPI Error: [HPTF] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 0.169117] ACPI Error: Method parse/execution failed [_SB_.PCI0.HPET._STA] (Node f402ae58), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.170000] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a06440), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.170000] ACPI Warning: Package List length (0x6) larger than NumElements count (0x2), truncated summary klog: HIGH Kernel message: [ 0.171916] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f700e3d8), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.172776] ACPI Warning: Package List length (1) larger than NumElements count (0), truncated summary klog: HIGH Kernel message: [ 0.172868] ACPI Error: No handler for Region [RAM_] (f7014618) [EmbeddedControl] 20090521 evregion-319 summary klog: HIGH Kernel message: [ 0.172873] ACPI Error: Region EmbeddedControl(3) has no handler 20090521 exfldio-294 summary klog: HIGH Kernel message: [ 0.172880] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node f70159f0), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.173605] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f70215e8), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.173917] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c08d6804), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.173917] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c08d6804), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.175379] ACPI Error: No handler for Region [ECXP] (f70218e8) [EmbeddedControl] (20100428/evregion-369) summary klog: HIGH Kernel message: [ 0.175394] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._OSC] (Node f7025558), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.175428] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PDC] (Node f7025540), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.175892] ACPI Warning: Package List length (0x1) larger than NumElements count (0x0), truncated summary klog: HIGH Kernel message: [ 0.176410] ACPI Error: [RAMB] Namespace lookup failure, AE_NOT_FOUND (20110413/psargs-359) summary klog: HIGH Kernel message: [ 0.177377] ACPI Error: Needed type [Reference], found [Device] f701af90 (20100428/exresop-104) summary klog: HIGH Kernel message: [ 0.177377] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7022dc8), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 0.178420] ACPI Error: No handler for Region [SACS] (f701b500) [PCI_Config] (20090903/evregion-319) summary klog: HIGH Kernel message: [ 0.178434] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D0._STA] (Node f7072000), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.178458] ACPI Error (uteval-0250): Method execution failed [PRID.P_D0._STA] (Node f7072000), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.178486] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D1._STA] (Node f70720a8), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.178510] ACPI Error (uteval-0250): Method execution failed [PRID.P_D1._STA] (Node f70720a8), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.178539] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D0._STA] (Node f7072210), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.178563] ACPI Error (uteval-0250): Method execution failed [SECD.S_D0._STA] (Node f7072210), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.178590] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D1._STA] (Node f70722b8), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.178614] ACPI Error (uteval-0250): Method execution failed [SECD.S_D1._STA] (Node f70722b8), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.179688] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f74174c8), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.181591] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7022db0), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 0.181679] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f740f438), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.182199] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4c25228), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.182199] ACPI Error: [Z012] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 0.182639] ACPI Error (psargs-0359): [ECEN] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.182645] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c090665c), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.183306] ACPI Error: Method parse/execution failed [_PR_.CPU0._PDC] (Node f403a228), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.183725] ACPI Error: No handler for Region [SACS] (f70c20f0) [PCI_Config] (20090903/evregion-319) summary klog: HIGH Kernel message: [ 0.183734] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D0._STA] (Node f70c4180), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.183755] ACPI Error (uteval-0250): Method execution failed [PRID.P_D0._STA] (Node f70c4180), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.183773] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D1._STA] (Node f70c4240), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.183793] ACPI Error (uteval-0250): Method execution failed [PRID.P_D1._STA] (Node f70c4240), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.183812] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D0._STA] (Node f70c43c0), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.183832] ACPI Error (uteval-0250): Method execution failed [SECD.S_D0._STA] (Node f70c43c0), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.183850] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D1._STA] (Node f70c4480), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.183870] ACPI Error (uteval-0250): Method execution failed [SECD.S_D1._STA] (Node f70c4480), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.184314] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7015eb8), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.185673] ACPI Error (dswload-0659): [___P] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.185686] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node f701a150), AE_INVALID_TABLE_LENGTH summary klog: HIGH Kernel message: [ 0.185688] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._INI] (Node f700f6c0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.185862] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PDC] (Node f701a1e0), AE_INVALID_TABLE_LENGTH summary klog: HIGH Kernel message: [ 0.186281] ACPI Warning: Package List length (C) larger than NumElements count (4), truncated summary klog: HIGH Kernel message: [ 0.187800] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c0994f7c), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.188487] ACPI Error (psargs-0359): q z Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.189086] ACPI Error: Needed type [Reference], found [Device] f700ff90 (20090903/exresop-104) summary klog: HIGH Kernel message: [ 0.189100] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7017dc8), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 0.189451] ACPI Error: Needed type [Reference], found [Device] f700ef90 20090521 exresop-104 summary klog: HIGH Kernel message: [ 0.189466] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7016dc8), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 0.189515] ACPI Error (psargs-0359): [CVCL] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.189522] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.DIGI._STA] (Node f702a390), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.191906] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c098ff6c), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.192182] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c08ce7dc), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.193750] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c08ce7dc), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.194554] ACPI Error: Method parse/execution failed [_PR_.CPU1._PDC] (Node f5821150), AE_INVALID_TABLE_LENGTH (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.194701] ACPI Error: Method parse/execution failed [_PR_.CPU2._PDC] (Node f58211e0), AE_INVALID_TABLE_LENGTH (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.197413] ACPI Error: No handler for Region [EC__] (f701c5c8) [EmbeddedControl] (20100428/evregion-369) summary klog: HIGH Kernel message: [ 0.197451] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SBRG.EC__._REG] (Node f701e2a0), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.199465] ACPI Error: [CDW1] Namespace lookup failure, AE_NOT_FOUND (20110413/psargs-359) summary klog: HIGH Kernel message: [ 0.199471] ACPI Error: Method parse/execution failed [_SB_._OSC] (Node ffff880138e2ea78), AE_NOT_FOUND (20110413/psparse-536) summary klog: HIGH Kernel message: [ 0.201466] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node f700e180), AE_INVALID_TABLE_LENGTH summary klog: HIGH Kernel message: [ 0.205365] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f5422e88), AE_ALREADY_EXISTS (20110413/psparse-536) summary klog: HIGH Kernel message: [ 0.209105] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701f270), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.211904] ACPI Error: No handler for Region [ERAM] (ee422ed8) [EmbeddedControl] (20100428/evregion-369) summary klog: HIGH Kernel message: [ 0.211928] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701fd08), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.211938] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SBRG.EC0_._REG] (Node ee423708), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.212815] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f7424eb8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.213100] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7014ca8), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.213827] ACPI Warning: Package List length (0xC) larger than NumElements count (0x3), truncated summary klog: HIGH Kernel message: [ 0.217060] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node dec13ca8), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.217763] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7013030), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.218957] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701be88), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.219691] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7013270), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.219959] ACPI Error: No handler for Region [SACS] (f70c52a8) [PCI_Config] (20090903/evregion-319) summary klog: HIGH Kernel message: [ 0.219968] ACPI Error: Region PCI_Config(2) has no handler (20090903/exfldio-295) summary klog: HIGH Kernel message: [ 0.219977] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D0._STA] (Node f701ba38), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.220034] ACPI Error (uteval-0250): Method execution failed [PRID.P_D0._STA] (Node f701ba38), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.220068] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D1._STA] (Node f701baf8), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.220107] ACPI Error (uteval-0250): Method execution failed [PRID.P_D1._STA] (Node f701baf8), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.220142] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D0._STA] (Node f701bc78), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.220180] ACPI Error (uteval-0250): Method execution failed [SECD.S_D0._STA] (Node f701bc78), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.220213] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D1._STA] (Node f701bd38), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.220252] ACPI Error (uteval-0250): Method execution failed [SECD.S_D1._STA] (Node f701bd38), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.221153] ACPI Error: Method parse/execution failed [_SB_.PCI0.HPET._CRS] (Node f402ae70), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.221220] ACPI Error: Method parse/execution failed [_SB_.PCI0.RTC_._CRS] (Node f402aee8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.222211] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701beb8), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.222980] ACPI Error: Field [I9MN] at 544 exceeds Buffer [IORT] size 464 (bits) (20090903/dsopcode-596) summary klog: HIGH Kernel message: [ 0.222987] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.PMIO._CRS] (Node f7015900), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 0.223020] ACPI Error (uteval-0250): Method execution failed [_SB_.PCI0.LPC0.PMIO._CRS] (Node f7015900), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 0.224289] ACPI Warning for _SB_.PCI0.P32_._PRT: Return Package has no elements (empty) (20100428/nspredef-456) summary klog: HIGH Kernel message: [ 0.224569] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701fca8), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.224987] ACPI Error: Field [ASSM] at 524320 exceeds Buffer [BUF0] size 688 (bits) (20100428/dsopcode-597) summary klog: HIGH Kernel message: [ 0.224994] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.MEM_._CRS] (Node f7021990), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 0.225018] ACPI Error (uteval-0250): Method execution failed [_SB_.MEM_._CRS] (Node f7021990), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 0.228032] ACPI Error (psargs-0359): [_PR_.C002._PPC] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.228041] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node f742a558), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.228469] [Firmware Bug]: the BIOS has corrupted hw-PMU resources (MSR 38d is 30) summary klog: HIGH Kernel message: [ 0.228773] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4025450), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.229334] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7020750), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.229639] ACPI Error (psargs-0359): [CDW1] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.229644] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7413270), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.230075] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7014630), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.231134] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7012f00), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.232733] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701ebd0), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.236739] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f3c24f00), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.245794] ACPI Warning for _SB_.PCI0.PCIB._PRT: Return type mismatch - found Integer, expected Package (20100428/nspredef-1053) summary klog: HIGH Kernel message: [ 0.245810] ACPI Error (uteval-0307): Return object type is incorrect [_SB_.PCI0.PCIB._PRT] (Node f7022c48), AE_TYPE summary klog: HIGH Kernel message: [ 0.245830] ACPI Error: Type returned from _PRT was incorrect: Integer, expected Btypes: 0x8 (20100428/uteval-313) summary klog: HIGH Kernel message: [ 0.249570] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._OSC] (Node f7010198), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.249594] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node f7010180), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.249860] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._OSC] (Node f7010270), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.249882] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PDC] (Node f7010258), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.250005] ACPI Error: No handler for Region [EC__] (f4424bd0) [EmbeddedControl] (20110112/evregion-369) summary klog: HIGH Kernel message: [ 0.250012] ACPI Error: Region EmbeddedControl(0x3) has no handler (20110112/exfldio-292) summary klog: HIGH Kernel message: [ 0.250019] ACPI Error: Method parse/execution failed [_SB_.PCI0.SBRG.EC__._REG] (Node f4425bb8), AE_NOT_EXIST (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.250572] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7010e88), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.250864] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7013e58), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.250941] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4022e88), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.250986] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query honored via DMI summary klog: HIGH Kernel message: [ 0.254947] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f3c22e88), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.255884] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f70142b8), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.262586] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701f390), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.262663] pci 0000:00:1f.0: [Firmware Bug]: TigerPoint LPC.BM_STS cleared summary klog: HIGH Kernel message: [ 0.264838] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701f2a0), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.265119] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c08d5804), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.267893] ACPI Warning for _TZ_.TZ01._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 0.268093] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c0927024), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.268171] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c0927024), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.268458] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f70142a0), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.269488] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1.APCT] (Node ffff88007af30560), AE_NO_MEMORY summary klog: HIGH Kernel message: [ 0.269534] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1.GCAP] (Node ffff88007af30540), AE_NO_MEMORY summary klog: HIGH Kernel message: [ 0.269576] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node ffff88007af30500), AE_NO_MEMORY summary klog: HIGH Kernel message: [ 0.272427] ACPI Error: No handler for Region [SACS] (f71004d8) [PCI_Config] (20090903/evregion-319) summary klog: HIGH Kernel message: [ 0.272435] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D0._STA] (Node f7102150), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.272452] ACPI Error (uteval-0250): Method execution failed [PRID.P_D0._STA] (Node f7102150), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.272469] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D1._STA] (Node f71021f8), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.272486] ACPI Error (uteval-0250): Method execution failed [PRID.P_D1._STA] (Node f71021f8), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.272503] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D0._STA] (Node f7102360), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.272519] ACPI Error (uteval-0250): Method execution failed [SECD.S_D0._STA] (Node f7102360), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.272536] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D1._STA] (Node f7102408), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.272552] ACPI Error (uteval-0250): Method execution failed [SECD.S_D1._STA] (Node f7102408), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.284552] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.IDE1.GTM_] (Node f7014858), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 0.284566] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.IDE1.CHN1._GTM] (Node f7014798), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 0.285468] ACPI Error (psargs-0359): [_PR_.CPU0._PPC] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.285476] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.ADP0.ADJP] (Node f7015b10), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.285546] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.ADP0._PSR] (Node f7015ae0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.288591] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701fd50), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.288966] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f34245b8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.296149] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701eca8), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.296644] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node ffff88012fc16660), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.302946] ACPI Error (psargs-0359): [HPTF] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.302952] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.HPET._STA] (Node ffff88007db32200), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.307009] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4c22e88), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.307757] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.CHN0._GTM] (Node f74145a0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.307837] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.CHN1._GTM] (Node f7414690), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.308151] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node f7414cd8), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.308213] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node f7414dc8), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.310609] ACPI Warning for _PR_.CPU1._PSS: SubPackage[8,9] - suspicious power dissipation values (20100428/nsrepair2-403) summary klog: HIGH Kernel message: [ 0.311025] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4c250d8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.311041] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f54250d8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.311335] ACPI Warning for _PR_.CPU2._PSS: SubPackage[8,9] - suspicious power dissipation values (20100428/nsrepair2-403) summary klog: HIGH Kernel message: [ 0.311729] ACPI Error: Could not enable PowerButton event (20090903/evxfevnt-193) summary klog: HIGH Kernel message: [ 0.311932] ACPI Warning: Could not enable fixed event 2 (20090903/evxface-146) summary klog: HIGH Kernel message: [ 0.314451] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a2b040), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.316816] ACPI Error: No handler for Region [ERAM] (ffff88007a733d80) [EmbeddedControl] (20110112/evregion-369) summary klog: HIGH Kernel message: [ 0.316829] ACPI Error: Method parse/execution failed [_SB_.HTEV] (Node ffff88007a730780), AE_NOT_EXIST (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.316839] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node ffff88007a73a078), AE_NOT_EXIST (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.317427] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node ffff88007d735160), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.321587] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a12040), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.321722] ACPI Error: Needed type [Reference], found [Device] ffff88007552b900 (20100428/exresop-104) summary klog: HIGH Kernel message: [ 0.321740] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff880075532ba0), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 0.322869] ACPI Error: No handler for Region [RAM_] (f7425690) [EmbeddedControl] (20110112/evregion-369) summary klog: HIGH Kernel message: [ 0.322886] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPCB.SNC_.SBRT] (Node f7435228), AE_NOT_EXIST (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.322899] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node f7428d98), AE_NOT_EXIST (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.323777] ACPI Warning: Package List length (0xC) larger than NumElements count (0x4), truncated summary klog: HIGH Kernel message: [ 0.325321] ACPI Error: No handler for Region [ERAM] (ffff88007d32bf78) [EmbeddedControl] (20090903/evregion-319) summary klog: HIGH Kernel message: [ 0.325334] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.KBC0.SMWR] (Node ffff88007d32c8c0), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.325357] ACPI Error (psparse-0537): Method parse/execution failed [_TZ_.THRM.SFAN] (Node ffff88007d328ec0), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.325376] ACPI Error (psparse-0537): Method parse/execution failed [_TZ_.THRM.THCK] (Node ffff88007d328f40), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.325396] ACPI Error (psparse-0537): Method parse/execution failed [_GPE._L02] (Node ffff88007d3289c0), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.325630] ACPI Error: Could not enable SleepButton event (20100428/evxfevnt-202) summary klog: HIGH Kernel message: [ 0.325636] ACPI Warning: Could not enable fixed event 0x3 (20100428/evxface-146) summary klog: HIGH Kernel message: [ 0.329218] ACPI Warning for _SB_.PCI0._OSC: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) summary klog: HIGH Kernel message: [ 0.329378] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88012b63d760), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.330488] ACPI Error: No handler for Region [SACS] (ffff88011bf101f8) [PCI_Config] (20090903/evregion-319) summary klog: HIGH Kernel message: [ 0.330496] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D0._STA] (Node ffff88011bf0d360), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.330513] ACPI Error (uteval-0250): Method execution failed [PRID.P_D0._STA] (Node ffff88011bf0d360), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.330528] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D1._STA] (Node ffff88011bf0d460), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.330545] ACPI Error (uteval-0250): Method execution failed [PRID.P_D1._STA] (Node ffff88011bf0d460), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.330560] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D0._STA] (Node ffff88011bf0d660), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.330576] ACPI Error (uteval-0250): Method execution failed [SECD.S_D0._STA] (Node ffff88011bf0d660), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.330590] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D1._STA] (Node ffff88011bf0d760), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.330606] ACPI Error (uteval-0250): Method execution failed [SECD.S_D1._STA] (Node ffff88011bf0d760), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.330759] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88011763c000), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.331637] ACPI Error: Needed type [Reference], found [Device] ffff88014b82d820 (20090903/exresop-104) summary klog: HIGH Kernel message: [ 0.331653] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88014b83cac0), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 0.331820] ACPI Error: Needed type [Reference], found [Device] ffff8800379aa900 (20100428/exresop-104) summary klog: HIGH Kernel message: [ 0.331838] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff8800379bbba0), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 0.332160] ACPI Error (dswload-0677): [PCI0] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.332167] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81cf5eb0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.333287] ACPI Error: No handler for Region [ERAM] (ffff8800bc638d80) [EmbeddedControl] (20090903/evregion-319) summary klog: HIGH Kernel message: [ 0.333300] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.HTEV] (Node ffff8800bc62e600), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.333326] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node ffff8800bc63e9a0), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.333559] ACPI Error: No handler for Region [ERAM] (ffff88007db2ad80) [EmbeddedControl] (20090903/evregion-319) summary klog: HIGH Kernel message: [ 0.333573] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.HTEV] (Node ffff88007db28600), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.333601] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node ffff88007db309a0), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.333734] ACPI Warning for _SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20090903/nspredef-336) summary klog: HIGH Kernel message: [ 0.333765] ACPI Error (psargs-0359): [FZHD] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.333771] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.CHN0._GTM] (Node f7014300), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.333853] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.CHN1._GTM] (Node f70143f0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.334143] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node f7014a38), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.334206] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node f7014b28), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.335658] ACPI Error: No handler for Region [ECOR] (ffff88007af355e8) [EmbeddedControl] (20110413/evregion-373) summary klog: HIGH Kernel message: [ 0.335698] ACPI Error: Method parse/execution failed [_SB_.PCI0.SBRG.EC0_._REG] (Node ffff88007af36730), AE_NOT_EXIST (20110413/psparse-536) summary klog: HIGH Kernel message: [ 0.337513] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f54243f0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.337662] ACPI Error (psargs-0359): [URES] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.337662] ACPI Error (psparse-0537): Method parse/execution failed [_PSW] (Node f701f0a8), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.338155] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88021302db60), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.338440] ACPI Error: No handler for Region [SACS] (ffff88012bb0f1f8) [PCI_Config] (20090903/evregion-319) summary klog: HIGH Kernel message: [ 0.338717] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D0._STA] (Node ffff88012bb111a0), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.338905] ACPI Error (uteval-0250): Method execution failed [PRID.P_D0._STA] (Node ffff88012bb111a0), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.339363] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D1._STA] (Node ffff88012bb11280), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.339551] ACPI Error (uteval-0250): Method execution failed [PRID.P_D1._STA] (Node ffff88012bb11280), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.340003] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D0._STA] (Node ffff88012bb11460), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.340193] ACPI Error (uteval-0250): Method execution failed [SECD.S_D0._STA] (Node ffff88012bb11460), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.340651] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D1._STA] (Node ffff88012bb11540), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.340838] ACPI Error (uteval-0250): Method execution failed [SECD.S_D1._STA] (Node ffff88012bb11540), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.341759] ACPI Error: No handler for Region [RAM_] (f74212f8) [EmbeddedControl] (20100428/evregion-369) summary klog: HIGH Kernel message: [ 0.341812] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._OSC] (Node ffff88017bc14660), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.341843] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node ffff88017bc14640), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.342116] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.SNC_.SBRT] (Node f742f228), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.342130] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._OSC] (Node ffff88017bc14780), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.342160] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PDC] (Node ffff88017bc14760), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.342409] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node f7422d98), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.347557] ACPI Warning for _TZ_.THRM._PSL: Return Package type mismatch at index 0 - found [NULL Object Descriptor], expected Reference (20100428/nspredef-1059) summary klog: HIGH Kernel message: [ 0.353198] ACPI Error: No handler for Region [ERAM] (ffff88013be53e10) [EmbeddedControl] (20090903/evregion-319) summary klog: HIGH Kernel message: [ 0.353215] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SBRG.EC0_._REG] (Node ffff88013be520e0), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.353401] ACPI Warning for _SB_.LATA._CRS: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) summary klog: HIGH Kernel message: [ 0.353406] ACPI Error (uteval-0307): Return object type is incorrect [_SB_.LATA._CRS] (Node ffff88006df2eb00), AE_TYPE summary klog: HIGH Kernel message: [ 0.353652] ACPI Error: Needed type [Reference], found [Device] ffff8800379a6800 (20090903/exresop-104) summary klog: HIGH Kernel message: [ 0.353652] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff8800379bba80), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 0.355135] ACPI Error: Method parse/execution failed [_PR_.CPU0._PDC] (Node ffff88007a738ca8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.355798] ACPI Error: ACPI path has too many parent prefixes (^) - reached beyond root node (20090903/nsaccess-429) summary klog: HIGH Kernel message: [ 0.356001] ..MP-BIOS bug: 8254 timer not connected to IO-APIC summary klog: HIGH Kernel message: [ 0.356108] ACPI Error: No handler for Region [ECF2] (ffff88013ba313a8) [EmbeddedControl] (20090903/evregion-319) summary klog: HIGH Kernel message: [ 0.356113] ACPI Error: Region EmbeddedControl(3) has no handler (20090903/exfldio-295) summary klog: HIGH Kernel message: [ 0.356119] ACPI Error (psparse-0537): Method parse/execution failed [P8XH] (Node ffff88013ba28020), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.356143] ACPI Error (psparse-0537): Method parse/execution failed [_GPE._L02] (Node ffff88013ba32120), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.359183] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7021a68), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.361596] ACPI Error: ACPI path has too many parent prefixes (^) - reached beyond root node (20100428/nsaccess-429) summary klog: HIGH Kernel message: [ 0.362481] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c091bffc), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.362557] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c091bffc), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.362751] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f40255d0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.362859] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query honored via cmdline summary klog: HIGH Kernel message: [ 0.362886] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7014a80), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.363488] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node ffff880227048f60), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.364356] ACPI Warning: For _SB_.PCI0.P2P_._PRT: Return Package has no elements (empty) (20110112/nspredef-456) summary klog: HIGH Kernel message: [ 0.364521] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f44285b8), AE_ALREADY_EXISTS (20110413/psparse-536) summary klog: HIGH Kernel message: [ 0.372475] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f5426ca8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.372684] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node dd825ca8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.375585] ACPI Error (dswload-0677): [USB0] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.375609] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c09fb6c8), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.375966] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c0992f7c), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.376047] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node dd825ca8), AE_ALREADY_EXISTS (20110413/psparse-536) summary klog: HIGH Kernel message: [ 0.376092] ACPI Error: No handler for Region [ECXP] (ffff88007cf31ab0) [EmbeddedControl] (20100428/evregion-369) summary klog: HIGH Kernel message: [ 0.376106] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._OSC] (Node ffff88007cf3f440), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.376141] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PDC] (Node ffff88007cf3f420), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.376733] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f5026ca8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.381039] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7016a38), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.382740] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node ffff88003f013ca0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.384722] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.HPET._CRS] (Node ffff88007db32220), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.384811] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.RTC_._CRS] (Node ffff88007db322c0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.390341] ACPI Error: [GUR_._BAS] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 0.390354] ACPI Error: Method parse/execution failed [_SB_.PCI0.MBIO._CRS] (Node ffff880078f30aa0), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.393086] ACPI Warning: For _TZ_.THRM._PSL: Return Package has no elements (empty) (20110413/nspredef-456) summary klog: HIGH Kernel message: [ 0.395834] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88013ba393a0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.399990] ACPI Error: Field [ASSM] at 524320 exceeds Buffer [BUF0] size 688 (bits) (20110112/dsopcode-597) summary klog: HIGH Kernel message: [ 0.399996] ACPI Error: Method parse/execution failed [_SB_.MEM_._CRS] (Node ffff8800b8e38000), AE_AML_BUFFER_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.400012] ACPI Error: Method execution failed [_SB_.MEM_._CRS] (Node ffff8800b8e38000), AE_AML_BUFFER_LIMIT (20110112/uteval-103) summary klog: HIGH Kernel message: [ 0.406016] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.ADP0.ADJP] (Node ffff88013ba3c5a0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.406038] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.ADP0._PSR] (Node ffff88013ba3c560), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.408529] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4c285b8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.415975] ACPI Warning for _TZ_.THRM._PSL: Return Package type mismatch at index 0 - found [NULL Object Descriptor], expected Reference (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 0.420218] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88022b749b18), AE_ALREADY_EXISTS (20110413/psparse-536) summary klog: HIGH Kernel message: [ 0.420241] ACPI Error: Field [I9MN] at 544 exceeds Buffer [IORT] size 464 (bits) (20100428/dsopcode-597) summary klog: HIGH Kernel message: [ 0.420248] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.PMIO._CRS] (Node ffff88013142fac0), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 0.420284] ACPI Error (uteval-0250): Method execution failed [_SB_.PCI0.LPC0.PMIO._CRS] (Node ffff88013142fac0), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 0.422032] ACPI Warning (dsobject-0501): Package List length (6) larger than NumElements count (3), truncated summary klog: HIGH Kernel message: [ 0.424909] ACPI Warning for _SB_.PCI0.P2P_._PRT: Return Package has no elements (empty) (20100428/nspredef-456) summary klog: HIGH Kernel message: [ 0.426823] ACPI Error (psargs-0359): [_PR_.CPU0._PSS] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.426833] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__.ADJP] (Node ffff88007b32ee00), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.426872] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node ffff88007b32edc0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.429245] ACPI Warning for _PR_.CPU0._TSD: Incorrectly formed Package, attempting repair (20090903/nsrepair-200) summary klog: HIGH Kernel message: [ 0.430887] ACPI Warning for _PR_.CPU1._TSD: Incorrectly formed Package, attempting repair (20090903/nsrepair-200) summary klog: HIGH Kernel message: [ 0.436921] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88013b62ccc0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.440405] ACPI Warning for _SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) summary klog: HIGH Kernel message: [ 0.444897] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4c252a0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.450562] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff8800b8e33ca8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.451517] ACPI Error (psargs-0359): [GUR_._BAS] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.451682] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.MBIO._CRS] (Node ffff88007bb2a880), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.453111] ACPI Warning for _SB_.BAT1._BIF: Return Package type mismatch at index 12 - found Integer, expected String/Buffer (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 0.454555] ACPI Warning for _PR_.CPU0._PSS: Return Package type mismatch at index 3 - found Integer, expected Package (20100428/nspredef-1059) summary klog: HIGH Kernel message: [ 0.454838] ACPI Warning for _PR_.CPU1._PSS: Return Package type mismatch at index 3 - found Integer, expected Package (20100428/nspredef-1059) summary klog: HIGH Kernel message: [ 0.460622] ACPI Warning: For _SB_.PCI0.P32_._PRT: Return Package has no elements (empty) (20110112/nspredef-456) summary klog: HIGH Kernel message: [ 0.461793] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88003cdb0f00), AE_ALREADY_EXISTS (20110413/psparse-536) summary klog: HIGH Kernel message: [ 0.468216] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._CST] (Node ffff88007c5cc380), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.468859] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88003f1afdc0), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.475076] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.CHN0._GTM] (Node f701eb28), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.475159] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.CHN1._GTM] (Node f701ec18), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.475441] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node f70202a0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.475506] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node f7020390), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.479821] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f3c28a68), AE_ALREADY_EXISTS (20110413/psparse-536) summary klog: HIGH Kernel message: [ 0.481067] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4028a68), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.482955] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88003d9b0f00), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.484974] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f3c28a68), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.485955] ACPI Warning: For _TZ_.THRM._PSL: Return Package type mismatch at index 0 - found [NULL Object Descriptor], expected Reference (20110112/nspredef-1059) summary klog: HIGH Kernel message: [ 0.490491] ACPI Warning: For _SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20110413/nspredef-352) summary klog: HIGH Kernel message: [ 0.492569] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a08440), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.492655] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a08440), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.492811] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f5428a68), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.497662] ACPI Warning (nspredef-0357): _SB_.PCI0.P2P_._PRT: Return Package has no elements (empty) [20080926] summary klog: HIGH Kernel message: [ 0.500043] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node ffff8800ac22d040), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.501138] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f3c28a38), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.505041] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4028a38), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.513609] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f5428a38), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.516158] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f74296c0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.527455] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f5422df8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.533028] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88003d9b0bb8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.539131] ACPI Error: No handler for Region [RAM_] (ffff88012fa36a20) [EmbeddedControl] (20110112/evregion-369) summary klog: HIGH Kernel message: [ 0.539149] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPCB.SNC_.SBRT] (Node ffff88012fa4f398), AE_NOT_EXIST (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.539161] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node ffff88012fa396b8), AE_NOT_EXIST (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.540036] ACPI Error: [_PR_.C002._PPC] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 0.540046] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node ffff880107e623c0), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.541238] ACPI Error: Method parse/execution failed [_TZ_.C2E8] (Node f482d108), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.541258] ACPI Error: Method parse/execution failed [_TZ_.C2E7] (Node f482d0f0), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.541277] ACPI Error: Method parse/execution failed [_TZ_.TZ2_._TMP] (Node f482d7c8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.563415] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88003d9af848), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.566332] ACPI Warning: For _TZ_.THRM._AL0: Return Package has no elements (empty) (20110413/nspredef-456) summary klog: HIGH Kernel message: [ 0.583718] ACPI Warning: _SB_.PCI0.PCI2._PRT: Return Package has no elements (empty) 20090521 nspredef-434 summary klog: HIGH Kernel message: [ 0.591722] ACPI Error: Field [ASSM] at 524320 exceeds Buffer [BUF0] size 880 (bits) (20100428/dsopcode-597) summary klog: HIGH Kernel message: [ 0.591729] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.MEM_._CRS] (Node ffff8800b4040f60), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 0.591760] ACPI Error (uteval-0250): Method execution failed [_SB_.MEM_._CRS] (Node ffff8800b4040f60), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 0.593045] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node f702c7b0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.593072] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node f7019648), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.593095] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node f702ea08), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.593119] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node f702e9c0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.593142] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node f702e678), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.597675] ACPI Warning for _SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to expected String at index 9 (20090903/nsrepair-132) summary klog: HIGH Kernel message: [ 0.597680] ACPI Warning for _SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to expected String at index 10 (20090903/nsrepair-132) summary klog: HIGH Kernel message: [ 0.597685] ACPI Warning for _SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to expected String at index 11 (20090903/nsrepair-132) summary klog: HIGH Kernel message: [ 0.597689] ACPI Warning for _SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to expected String at index 12 (20090903/nsrepair-132) summary klog: HIGH Kernel message: [ 0.600451] ACPI Error (psargs-0359): [_SB_.PCI0.EGBA] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.600456] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC_.MBRD._CRS] (Node f7416318), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.612820] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88003d9ae190), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.620955] ACPI Warning for _TZ_.THRM._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 0.621415] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node f702c828), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.621443] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node f7019ed0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.621468] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node f702ea98), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.621493] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node f702ea50), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.621518] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node f702e708), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.627242] ACPI Error (psargs-0359): [_SB_.PCI0.EC__.HOTT] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.627255] ACPI Error (psparse-0537): Method parse/execution failed [_TZ_.TZ01._HOT] (Node ffff88013ba3ae60), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.628687] [Firmware Bug]: ERST: ERST table is invalid summary klog: HIGH Kernel message: [ 0.630258] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88007af370a0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.651383] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node ffff88007f416680), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.652133] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a2e040), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.652695] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a0f040), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.653163] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88007ab2f460), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.654642] ACPI Error: Method parse/execution failed [_PR_.CPU1._PDC] (Node ffff88020f44deb0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.654994] ACPI Error: Method parse/execution failed [_PR_.CPU2._PDC] (Node ffff88020f44df50), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.655350] ACPI Error: Method parse/execution failed [_PR_.CPU3._PDC] (Node ffff88020f454000), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.655369] ACPI Error (psargs-0359): [_SB_.PCI0.PSKB] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.655376] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.SIO_.KBC0._STA] (Node ffff880236c47260), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.655576] ACPI Error (psargs-0359): [_SB_.PCI0.PSMS] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.655581] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.SIO_.MSE0._STA] (Node ffff880236c47340), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.658002] ACPI Warning for _SB_.PCI0.SATA.PRT0._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) summary klog: HIGH Kernel message: [ 0.658697] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88023fc14aa0), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.662008] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a0c440), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.674938] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC_.EC__.GBIF] (Node f3829120), AE_ALREADY_EXISTS (20110413/psparse-536) summary klog: HIGH Kernel message: [ 0.674963] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC_.EC__.BAT1._BIF] (Node f3829330), AE_ALREADY_EXISTS (20110413/psparse-536) summary klog: HIGH Kernel message: [ 0.677370] ACPI Warning for _SB_.PCI0.BAT0._BIF: Converted Buffer to expected String at index 9 (20090903/nsrepair-132) summary klog: HIGH Kernel message: [ 0.677375] ACPI Warning for _SB_.PCI0.BAT0._BIF: Converted Buffer to expected String at index 12 (20090903/nsrepair-132) summary klog: HIGH Kernel message: [ 0.695029] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a0e440), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.710267] ACPI Error: Method parse/execution failed [_TZ_.PSWT] (Node f7424bb8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.710275] ACPI Error: Method parse/execution failed [_TZ_.GTTP] (Node f7424b88), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.710281] ACPI Error: Method parse/execution failed [_TZ_.GFXZ._TMP] (Node f74249a8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.712727] ACPI Error: Method parse/execution failed [_TZ_.DTSZ._TMP] (Node f7424ca8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.721822] ACPI Error (dswload-0659): [USB0] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.722199] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a4d180), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.725417] ACPI Warning for _SB_.PCI0.LPC_.SYSR._CRS: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) summary klog: HIGH Kernel message: [ 0.725429] ACPI Error (uteval-0307): Return object type is incorrect [_SB_.PCI0.LPC_.SYSR._CRS] (Node ffff88013ba46cc0), AE_TYPE summary klog: HIGH Kernel message: [ 0.725450] ACPI Error: Type returned from _CRS was incorrect: Integer, expected Btypes: 4 (20090903/uteval-313) summary klog: HIGH Kernel message: [ 0.736425] ACPI Warning: For _SB_.PCI0.PT02._PRT: Return Package has no elements (empty) (20110413/nspredef-456) summary klog: HIGH Kernel message: [ 0.743273] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701f0d8), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.743530] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f50273d8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.743538] ACPI Warning: For _SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20110112/nspredef-352) summary klog: HIGH Kernel message: [ 0.744106] ACPI Error: Field [ASSM] at 524320 exceeds Buffer [BUF0] size 880 (bits) (20090903/dsopcode-596) summary klog: HIGH Kernel message: [ 0.744114] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.MEM_._CRS] (Node ffff88013ba44cc0), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 0.744142] ACPI Error (uteval-0250): Method execution failed [_SB_.MEM_._CRS] (Node ffff88013ba44cc0), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 0.772223] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4c250d8), AE_ALREADY_EXISTS (20101013/psparse-537) summary klog: HIGH Kernel message: [ 0.782613] ACPI Error (psargs-0359): [RAMB] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.790513] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC_.EC__.GBIF] (Node ffff880079f39f78), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.790526] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC_.EC__.BAT0._BIF] (Node ffff880079f37118), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.794367] ACPI Warning for _PR_.P002._PSD: Return type mismatch - found Integer, expected Package (20090903/nspredef-1006) summary klog: HIGH Kernel message: [ 0.810687] ACPI Error (dswload-0659): [DD02] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.810756] ACPI Error (dswload-0659): [EHC1] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.820565] ACPI Error: [FZHD] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 0.820571] ACPI Error: Method parse/execution failed [_SB_.PCI0.SATA.CHN0._GTM] (Node ffff880127632b40), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.820632] ACPI Error: Method parse/execution failed [_SB_.PCI0.SATA.CHN1._GTM] (Node ffff880127632cd0), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.821065] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node ffff880127634758), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.821112] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node ffff8801276348e8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 0.822836] ACPI Warning: For _SB_.PCI0.PCI2._PRT: Return Package has no elements (empty) (20110112/nspredef-456) summary klog: HIGH Kernel message: [ 0.860349] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node ffff88023704ea40), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.860380] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node ffff8802370590e0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.860410] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node ffff8802370522a0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.860439] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node ffff880237052240), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.860468] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node ffff880237050de0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.870147] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88013ba29e80), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.873454] ACPI Warning for _SB_.PCI0.PCIB._PRT: Return Package has no elements (empty) (20090903/nspredef-433) summary klog: HIGH Kernel message: [ 0.879606] ACPI Error (psargs-0359): [MPEN] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.879794] ACPI Error (psparse-0537): Method parse/execution failed [_TZ_.TZ00._PSL] (Node ffff88015ba4de00), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.888177] ACPI Warning for _SB_.BAT1._BST: Return Package type mismatch at index 2 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 0.890080] ACPI Error: No handler for Region [RAM_] (ffff880133a35a20) [EmbeddedControl] (20100428/evregion-369) summary klog: HIGH Kernel message: [ 0.890253] ACPI Error: Region EmbeddedControl(0x3) has no handler (20100428/exfldio-293) summary klog: HIGH Kernel message: [ 0.890421] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.SNC_.SBRT] (Node ffff880133a49620), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.890696] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node ffff880133a385e0), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 0.892097] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node ffff88021704e920), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.892124] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node ffff880217056700), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.892147] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node ffff880217052180), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.892171] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node ffff880217052120), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.892195] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node ffff880217050cc0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.900692] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node ffff88021704e960), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.900729] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node ffff880217059000), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.900753] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node ffff8802170521c0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.900776] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node ffff880217052160), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.900801] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node ffff880217050d00), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.905032] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node ffff88021304e940), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.905061] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node ffff8802130576a0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.905085] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node ffff8802130521a0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.905110] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node ffff880213052140), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.905135] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node ffff880213050ce0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.905920] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.C000.C264] (Node f7024e58), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 0.905985] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.C000._PSS] (Node f7024f30), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 0.906063] [Firmware Bug]: BIOS needs update for CPU frequency support summary klog: HIGH Kernel message: [ 0.940948] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7421fc0), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 0.944156] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ACAD._PSR] (Node ffff88013384d720), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 0.967528] ACPI Warning for _TZ_.THRM._AL0: Return Package has no elements (empty) (20100428/nspredef-456) summary klog: HIGH Kernel message: [ 0.990917] ACPI Warning for _SB_.PCI0.FNC2.PRT0._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) summary klog: HIGH Kernel message: [ 0.991675] ACPI Warning for _SB_.PCI0.FNC2.PRT1._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) summary klog: HIGH Kernel message: [ 0.992685] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81cf6eb0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.004972] ACPI Error (psparse-0537): Method parse/execution failed [CPUT] (Node f701c150), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.005015] ACPI Error (psparse-0537): Method parse/execution failed [PSSC] (Node f701c168), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.005055] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node f702f3c0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.009421] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ACAD._PSR] (Node f701aa98), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.020868] ACPI Warning for _PR_.CPU0._PSD: Incorrectly formed Package, attempting repair (20090903/nsrepair-200) summary klog: HIGH Kernel message: [ 1.021557] ACPI Warning for _PR_.CPU1._PSD: Incorrectly formed Package, attempting repair (20090903/nsrepair-200) summary klog: HIGH Kernel message: [ 1.026272] ACPI Warning (processor_throttling-0843): Invalid throttling state, reset summary klog: HIGH Kernel message: [ 1.027573] ACPI Error: No handler for Region [ERAM] (ffff880133e3e798) [EmbeddedControl] (20090903/evregion-319) summary klog: HIGH Kernel message: [ 1.027587] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.DOCK._STA] (Node ffff880133e48620), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 1.027653] ACPI Error (uteval-0250): Method execution failed [_SB_.PCI0.DOCK._STA] (Node ffff880133e48620), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 1.158298] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node f701b648), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.167050] ACPI Error: [CDW1] Namespace lookup failure, AE_NOT_FOUND (20110316/psargs-359) summary klog: HIGH Kernel message: [ 1.167226] ACPI Error: Method parse/execution failed [_SB_._OSC] (Node f4422648), AE_NOT_FOUND (20110316/psparse-536) summary klog: HIGH Kernel message: [ 1.184923] ACPI Warning: For _SB_.PCI0.P0P1._PRT: Return Package has no elements (empty) (20110413/nspredef-456) summary klog: HIGH Kernel message: [ 1.186079] ACPI Error: [BRTW] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 1.186087] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD03._BCM] (Node f4c2a588), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.187842] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0.PPC_] (Node f7450168), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.187891] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PPC] (Node f74500c0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.188370] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PPC] (Node f7450150), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.188776] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PPC] (Node f74502b8), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.189190] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU3._PPC] (Node f7450258), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.196055] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f3824270), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.210593] ACPI Warning: For _SB_.PCI0.PCIB._PRT: Return Package has no elements (empty) (20101013/nspredef-456) summary klog: HIGH Kernel message: [ 1.212692] ACPI Warning: For _TZ_.THRM._AL0: Return Package has no elements (empty) (20110112/nspredef-456) summary klog: HIGH Kernel message: [ 1.214761] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD_.GBQC] (Node f3023438), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.214775] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD_._BQC] (Node f3023420), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.222641] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD1.GBQC] (Node f30235b8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.222655] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD1._BQC] (Node f30235a0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.224060] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.BAT1._STA] (Node f7023b10), AE_TIME summary klog: HIGH Kernel message: [ 1.228128] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node f702a570), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.229185] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f70140d8), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 1.230869] ACPI Warning for _PR_.CPU0._PSS: SubPackage[15,16] - suspicious power dissipation values (20100428/nsrepair2-403) summary klog: HIGH Kernel message: [ 1.231049] ACPI Warning for _PR_.CPU1._PSS: SubPackage[15,16] - suspicious power dissipation values (20100428/nsrepair2-403) summary klog: HIGH Kernel message: [ 1.231224] ACPI Warning for _PR_.CPU2._PSS: SubPackage[15,16] - suspicious power dissipation values (20100428/nsrepair2-403) summary klog: HIGH Kernel message: [ 1.231399] ACPI Warning for _PR_.CPU3._PSS: SubPackage[15,16] - suspicious power dissipation values (20100428/nsrepair2-403) summary klog: HIGH Kernel message: [ 1.246159] ACPI Error: No handler for Region [ECRM] (f6cedba0) [EmbeddedControl] (20110413/evregion-373) summary klog: HIGH Kernel message: [ 1.246164] ACPI Error: Region EmbeddedControl (ID=3) has no handler (20110413/exfldio-292) summary klog: HIGH Kernel message: [ 1.246169] ACPI Error: Method parse/execution failed [_TZ_.RDEC] (Node f442fc60), AE_NOT_EXIST (20110413/psparse-536) summary klog: HIGH Kernel message: [ 1.246176] ACPI Error: Method parse/execution failed [_TZ_.TZS0._TMP] (Node f442fca8), AE_NOT_EXIST (20110413/psparse-536) summary klog: HIGH Kernel message: [ 1.270260] ACPI Error (psparse-0537): Method parse/execution failed [CPUT] (Node ffff880137a4e840), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.270297] ACPI Error (psparse-0537): Method parse/execution failed [PSSC] (Node ffff880137a4e860), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.270332] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node ffff880137a3fd00), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.272398] ACPI Error: No handler for Region [ECRM] (f76d0c60) [EmbeddedControl] (20110112/evregion-369) summary klog: HIGH Kernel message: [ 1.272407] ACPI Error: Method parse/execution failed [_TZ_.RDEC] (Node f742fc60), AE_NOT_EXIST (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.272415] ACPI Error: Method parse/execution failed [_TZ_.TZS0._TMP] (Node f742fca8), AE_NOT_EXIST (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.280955] ACPI Error: No handler for Region [PCFG] (ffff880137a733f0) [PCI_Config] (20090903/evregion-319) summary klog: HIGH Kernel message: [ 1.280965] ACPI Error (psparse-0537): Method parse/execution failed [J380._STA] (Node ffff88013712b380), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 1.314561] ACPI Error: [ECPU] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 1.314567] ACPI Error: Method parse/execution failed [_TZ_.TZ00._TMP] (Node ffff88011763ca28), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.337975] ACPI Error (uteval-0250): Method execution failed [J380._STA] (Node ffff88013712b380), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 1.371174] ACPI Error: Field [CDW3] at 96 exceeds Buffer [NULL] size 64 (bits) (20090903/dsopcode-596) summary klog: HIGH Kernel message: [ 1.381411] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a2b040), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.381481] ACPI Error (dswload-0659): [PCI0] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.384655] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff8801393f91f8 (20090903/exresop-590) summary klog: HIGH Kernel message: [ 1.384672] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.VGA_._DSM] (Node ffff88013ba4c020), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 1.384743] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.P0P1.VGA_._DSM] (Node ffff88013ba4d9c0), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 1.398053] ACPI: acpi_idle yielding to intel_idleACPI Warning for _TZ_.TZ01._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference (20100428/nspredef-1059) summary klog: HIGH Kernel message: [ 1.399160] ACPI Warning for _SB_.PCI0.PT02._PRT: Return Package has no elements (empty) (20090903/nspredef-433) summary klog: HIGH Kernel message: [ 1.400736] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node f7018e58), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.436671] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node f7024e58), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.462866] ACPI Warning: _SB_.PCI0.VID2._DOD: Return Package has no elements (empty) 20090521 nspredef-434 summary klog: HIGH Kernel message: [ 1.480960] ACPI Warning: _SB_.PCI0.FNC2.PRT0._GTF: Return type mismatch - found Integer, expected Buffer 20090521 nspredef-940 summary klog: HIGH Kernel message: [ 1.488986] ACPI Error (psargs-0359): [GTF0] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.488991] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f702b708), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.489034] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f702b720), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.518091] ACPI Warning for _SB_.PCI0.IDE1.PRT0._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) summary klog: HIGH Kernel message: [ 1.555599] ACPI Error (psparse-0537): Method parse/execution failed [CPUT] (Node ffff8801b90590c0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.555652] ACPI Error (psparse-0537): Method parse/execution failed [PSSC] (Node ffff8801b90590e0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.555703] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node ffff8801b903b6e0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.570612] ACPI Error: No handler for Region [PCFG] (ffff8801b9074240) [PCI_Config] (20090903/evregion-319) summary klog: HIGH Kernel message: [ 1.570624] ACPI Error (psparse-0537): Method parse/execution failed [J380._STA] (Node ffff8801b916ea40), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 1.590337] ACPI Warning: For _TZ_.THRM._PSL: Return Package has no elements (empty) (20110112/nspredef-456) summary klog: HIGH Kernel message: [ 1.605121] ACPI Error: Current brightness invalid (20110112/video-377) summary klog: HIGH Kernel message: [ 1.605465] ACPI Error: [RAMB] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 1.616034] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0.PPC_] (Node ffff88015334da00), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.616243] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PPC] (Node ffff88015334d920), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.618281] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PPC] (Node ffff88015334d9e0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.620164] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PPC] (Node ffff88015334dbc0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.621081] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU3._PPC] (Node ffff88015334db40), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.648580] ACPI Error: [SMS_] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 1.648589] ACPI Error: Method parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node f3429e58), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.662849] ACPI Error (uteval-0250): Method execution failed [J380._STA] (Node ffff8801b916ea40), AE_NOT_EXIST summary klog: HIGH Kernel message: [ 1.678325] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88022f7bb5e8 (20110112/exresop-590) summary klog: HIGH Kernel message: [ 1.678342] ACPI Error: Method parse/execution failed [_SB_.PCI0.VGA_._DSM] (Node ffff88022f460190), AE_AML_OPERAND_TYPE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.678390] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88022f7bb8b8 (20110112/exresop-590) summary klog: HIGH Kernel message: [ 1.678412] ACPI Error: Method parse/execution failed [_SB_.PCI0.P0P1.VGA_._DSM] (Node ffff88022f464230), AE_AML_OPERAND_TYPE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.701482] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node ffff88022704e960), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.701521] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node ffff880227059000), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.701557] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node ffff8802270521c0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.701592] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node ffff880227052160), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.701628] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node ffff880227050d00), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.761428] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node ffff8800bc234d60), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.782803] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0.PPC_] (Node ffff8801d4d0ac60), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.783001] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PPC] (Node ffff8801d4d0ab80), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.784831] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PPC] (Node ffff8801d4d0ac40), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.786497] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PPC] (Node ffff8801d4d0ae20), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.787299] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU3._PPC] (Node ffff8801d4d0ada0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.849787] ACPI Warning for _PR_.CPU3._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer [] tick_dev_program_event+0x68/0xd0 summary klog: HIGH Kernel message: [ 1.861576] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC_.EC__.GBIF] (Node ffff880232c509b0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.861601] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC_.EC__.BAT1._BIF] (Node ffff880232c50d20), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.864413] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node f3025828), AE_AML_PACKAGE_LIMIT (20110413/psparse-536) summary klog: HIGH Kernel message: [ 1.893953] ACPI Error (psparse-0537): Method parse/execution failed [CPUT] (Node ffff8800b3c50000), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.894002] ACPI Error (psparse-0537): Method parse/execution failed [PSSC] (Node ffff8800b3c50020), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.894047] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node ffff8800b3c49380), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.900224] ACPI Error: [NPSS] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 1.900238] ACPI Error: Method parse/execution failed [_PR_.CPU0.PPC_] (Node ffff88014f9a5140), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.900254] ACPI Error: Method parse/execution failed [_PR_.CPU0._PPC] (Node ffff88014f9a5028), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.900769] ACPI Error: Method parse/execution failed [_PR_.CPU1._PPC] (Node ffff88014f9a5118), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.901001] ACPI Error: Method parse/execution failed [_PR_.CPU2._PPC] (Node ffff88014f9a5370), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.901211] ACPI Error: Method parse/execution failed [_PR_.CPU3._PPC] (Node ffff88014f9a52d0), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.905440] ACPI Warning: For _SB_.PCI0.PCIB._PRT: Return Package has no elements (empty) (20110112/nspredef-456) summary klog: HIGH Kernel message: [ 1.907422] ACPI Error: [GTF0] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 1.907427] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f3431a50), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.907445] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f3431a68), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.911273] ACPI Warning for _SB_.PCI0.P0P1._PRT: Return Package has no elements (empty) (20090903/nspredef-433) summary klog: HIGH Kernel message: [ 1.929855] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.IDE1.GTM_] (Node f7414858), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 1.929872] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.IDE1.CHN1._GTM] (Node f7414798), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 1.958776] ACPI Warning for _PR_.CPU0._PSD: summary klog: HIGH Kernel message: [ 1.958968] ACPI Warning for _PR_.CPU1._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 1.959113] ACPI Warning for _PR_.CPU2._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 1.959252] ACPI Warning for _PR_.CPU3._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 1.959427] ACPI Warning for _PR_.CPU4._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 1.959602] ACPI Warning for _PR_.CPU5._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 1.959776] ACPI Warning for _PR_.CPU6._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 1.959951] ACPI Warning for _PR_.CPU7._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 1.962612] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0.PPC_] (Node ffff8801534e5dc0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.962811] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PPC] (Node ffff8801534e5ce0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.964620] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PPC] (Node ffff8801534e5da0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.966282] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PPC] (Node ffff8801534e5f80), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.967081] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU3._PPC] (Node ffff8801534e5f00), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 1.974827] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f3831a50), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 1.974846] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f3831a68), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.001829] ACPI Error: Method parse/execution failed [_SB_.PCI0.PATA.GTM_] (Node f5423ba0), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.001850] ACPI Error: Method parse/execution failed [_SB_.PCI0.PATA.CHN0._GTM] (Node f54239c0), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.002809] ACPI Error: Method parse/execution failed [_SB_.PCI0.PATA.CHN1._GTM] (Node f5423ac8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.006621] ACPI Error (psparse-0537): Method parse/execution failed [CPUT] (Node ffff8801b90570c0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.006671] ACPI Error (psparse-0537): Method parse/execution failed [PSSC] (Node ffff8801b90570e0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.006718] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node ffff8801b903fa80), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.022076] ACPI Error: Could not enable SleepButton event (20110112/evxfevnt-198) summary klog: HIGH Kernel message: [ 2.022090] ACPI Warning: Could not enable fixed event 0x3 (20110112/evxface-197) summary klog: HIGH Kernel message: [ 2.033653] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f6031468), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.033670] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f6031480), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.045931] ACPI Warning for _SB_.PCI0.P0P1._PRT: Return Package has no elements (empty) (20100428/nspredef-456) summary klog: HIGH Kernel message: [ 2.049441] ACPI Warning for _PR_.CPU0._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 2.068617] ACPI Error: Method parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node f3c29e58), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.081502] ACPI Error (psargs-0359): [NPSS] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.081508] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0.PPC_] (Node ffff8801534e5c20), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.081585] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PPC] (Node ffff8801534e5b40), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.083171] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PPC] (Node ffff8801534e5c00), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.084838] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PPC] (Node ffff8801534e5de0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.085644] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU3._PPC] (Node ffff8801534e5d60), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.106307] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node ffff88023f45dca8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.106326] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node ffff88023f45dcd0), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.113330] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f74317b0), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.113367] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f74317c8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.132386] ACPI Error: Could not enable SleepButton event (20090903/evxfevnt-193) summary klog: HIGH Kernel message: [ 2.132392] ACPI Warning: Could not enable fixed event 3 (20090903/evxface-146) summary klog: HIGH Kernel message: [ 2.149905] ACPI Error: Method parse/execution failed [_SB_.C003.C099._DOD] (Node f30275a0), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.173036] ACPI Warning for _SB_._OSC: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) summary klog: HIGH Kernel message: [ 2.200371] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f602bf30), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.200380] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f602d2d0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.206433] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f742d018), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.206443] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f742d3a8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.222362] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f602d018), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.222372] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f602d3a8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.227407] ACPI Error (psargs-0359): [GTF1] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.227411] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node f702b7b0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.227454] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node f702b7c8), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.231431] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f602bf60), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.231442] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f602d300), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.250291] ACPI Error: Method parse/execution failed [_SB_.BAT1.UBIF] (Node ffff88013762f550), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.250306] ACPI Error: Method parse/execution failed [_SB_.BAT1._BIF] (Node ffff88013762f500), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.270835] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff880125e2c708), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.280410] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.BAT1.UBIF] (Node ffff8800b3c2e100), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 2.280443] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.BAT1._BIF] (Node ffff8800b3c2e0c0), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 2.283579] ACPI Error (psargs-0359): [_T_0] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.283585] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.BAT1.UBIF] (Node ffff8800b3c2e100), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.283615] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._Q09] (Node ffff8800b3c410e0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.288649] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node ffff88023f45dcd0), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.288685] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node ffff88023f45dcf8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.294251] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f742bf30), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.294262] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f742d2d0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.324556] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f742d018), AE_ALREADY_EXISTS (20110413/psparse-536) summary klog: HIGH Kernel message: [ 2.324566] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f742d3a8), AE_ALREADY_EXISTS (20110413/psparse-536) summary klog: HIGH Kernel message: [ 2.334361] ACPI Error: Attempt to CreateField of length zero (20110112/dsopcode-529) summary klog: HIGH Kernel message: [ 2.334370] ACPI Error: Method parse/execution failed [_SB_.PCI0.IDE0.RATA] (Node ffff8801376322a8), AE_AML_OPERAND_VALUE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.334384] ACPI Error: Method parse/execution failed [_SB_.PCI0.IDE0.PRT1._GTF] (Node ffff880137632438), AE_AML_OPERAND_VALUE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.336604] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node ffff88013b63c460), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 2.384172] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node ffff8801c305dcd0), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.384189] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node ffff8801c305dcf8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.440684] ACPI Error (psargs-0359): [SMS_] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.440692] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node ffff88007db30c60), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 2.462687] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node ffff880147646cd0), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.462711] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node ffff880147646cf8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.468708] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node f700f180), AE_INVALID_TABLE_LENGTH summary klog: HIGH Kernel message: [ 2.468963] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PDC] (Node f700f240), AE_INVALID_TABLE_LENGTH summary klog: HIGH Kernel message: [ 2.592359] ACPI Error: Method parse/execution failed [_PR_.CPU0.PPC_] (Node ffff88014f9a4140), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.592381] ACPI Error: Method parse/execution failed [_PR_.CPU0._PPC] (Node ffff88014f9a4028), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.593071] ACPI Error: Method parse/execution failed [_PR_.CPU1._PPC] (Node ffff88014f9a4118), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.593648] ACPI Error: Method parse/execution failed [_PR_.CPU2._PPC] (Node ffff88014f9a4370), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.593935] ACPI Error: Method parse/execution failed [_PR_.CPU3._PPC] (Node ffff88014f9a42d0), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.634350] ACPI Error: [GTF1] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 2.634355] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node f3431af8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.634373] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node f3431b10), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.671117] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f2c2d018), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.671128] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f2c2d3a8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.701908] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node f3831af8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.701933] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node f3831b10), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.771747] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f402bf60), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.771758] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f402d300), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.787172] ACPI Warning: For _SB_.PCI0.P0P1._PRT: Return Package has no elements (empty) (20110112/nspredef-456) summary klog: HIGH Kernel message: [ 2.823916] ACPI Warning: _BQC returned an invalid level 20090521 video-629 summary klog: HIGH Kernel message: [ 2.837958] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node f7431858), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.837994] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node f7431870), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.838171] ACPI Warning for _SB_.BAT0._BIF: Return Package type mismatch at index 9 - found [NULL Object Descriptor], expected String/Buffer (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 2.851027] ACPI Warning: _BQC returned an invalid level (20110316/video-473) summary klog: HIGH Kernel message: [ 2.860339] ACPI Error: Method parse/execution failed [_SB_.C003.C098._DOD] (Node f4427588), AE_AML_PACKAGE_LIMIT (20110413/psparse-536) summary klog: HIGH Kernel message: [ 2.861808] ACPI Error: [_SB_.PCI0.GFX0.DD02._BCL] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 2.861812] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEG0.PEGP.DD02._BCL] (Node ffff88015746e168), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.870589] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node ffff880137632c80), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 2.906610] ACPI Warning: For _SB_.PCI0.P0P2.PEGP._DOD: Return type mismatch - found Integer, expected Package (20110413/nspredef-1053) summary klog: HIGH Kernel message: [ 2.949708] ACPI Error: Field [CDW3] at 96 exceeds Buffer [NULL] size 64 (bits) (20110112/dsopcode-597) summary klog: HIGH Kernel message: [ 3.005123] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node ffff88122fc1ea00), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 3.112435] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node f74257c8), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 3.112465] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node f742c210), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 3.112494] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node f7427a20), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 3.112522] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node f74279d8), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 3.112549] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node f7427690), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 3.208822] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.C003.C098._DOD] (Node ffff88007cf30b60), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 3.223518] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node ffff880236c469a0), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 3.420672] ACPI Warning for _TZ_.THRM._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference (20100428/nspredef-1059) summary klog: HIGH Kernel message: [ 3.480092] ACPI Warning for _SB_.PCI0.SAT0.PRT0._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) summary klog: HIGH Kernel message: [ 3.490098] ACPI Warning for _SB_.PCI0.SAT0.PRT1._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) summary klog: HIGH Kernel message: [ 3.490832] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PMI0._GHL] (Node ffff88013bc2bdc0), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 3.490852] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PMI0._PMC] (Node ffff88013bc2bd40), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 3.502273] ACPI Error: Could not enable SleepButton event (20100428/evxfevnt-205) summary klog: HIGH Kernel message: [ 3.601126] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node f7420690), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 3.675814] ACPI Error: Evaluating _BCM failed (20100428/video-532) summary klog: HIGH Kernel message: [ 3.868794] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f3831b58), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 3.868812] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f3831b70), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 3.983031] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node ffff88021d459028), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 3.983040] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node ffff88021d459618), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 4.115197] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node ffff88021d458eb0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 4.115206] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node ffff88021d4594b0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 4.190434] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node ffff8801376342f8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 4.198699] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node f3831c00), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 4.198716] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node f3831c18), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 4.230508] ACPI Exception: AE_TIME, Returned by Handler for [EmbeddedControl] (20090903/evregion-424) summary klog: HIGH Kernel message: [ 4.230527] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ISAB.ECDV.ECR1] (Node f7018ed0), AE_TIME summary klog: HIGH Kernel message: [ 4.230612] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ISAB.ECDV.ECR2] (Node f7018ee8), AE_TIME summary klog: HIGH Kernel message: [ 4.230643] ACPI Error (psparse-0537): Method parse/execution failed [ECRW] (Node f7018fa8), AE_TIME summary klog: HIGH Kernel message: [ 4.230672] ACPI Error (psparse-0537): Method parse/execution failed [ECG1] (Node f7018fd8), AE_TIME summary klog: HIGH Kernel message: [ 4.230701] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node f70186f0), AE_TIME summary klog: HIGH Kernel message: [ 4.230730] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ISAB.ECDV._Q66] (Node f7018eb8), AE_TIME summary klog: HIGH Kernel message: [ 4.576415] ACPI Error: No handler for Region [ERAM] (f4830d50) [EmbeddedControl] (20110112/evregion-369) summary klog: HIGH Kernel message: [ 4.576437] ACPI Error: Method parse/execution failed [_SB_.PCI0.SBRG.EC0_._REG] (Node f48326d8), AE_NOT_EXIST (20110112/psparse-536) summary klog: HIGH Kernel message: [ 4.638115] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node ffff880220c5b028), AE_ALREADY_EXISTS (20110413/psparse-536) summary klog: HIGH Kernel message: [ 4.638127] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node ffff880220c5b618), AE_ALREADY_EXISTS (20110413/psparse-536) summary klog: HIGH Kernel message: [ 4.838935] ACPI Error (psparse-0537): Method parse/execution failed [_TZ_.C2E8] (Node f701b108), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 4.838984] ACPI Error (psparse-0537): Method parse/execution failed [_TZ_.C2E7] (Node f701b0f0), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 4.839033] ACPI Error (psparse-0537): Method parse/execution failed [_TZ_.TZ2_._TMP] (Node f701b7c8), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 4.890970] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node ffff880126e43f50), AE_ALREADY_EXISTS (20110413/psparse-536) summary klog: HIGH Kernel message: [ 4.890980] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node ffff880126e44550), AE_ALREADY_EXISTS (20110413/psparse-536) summary klog: HIGH Kernel message: [ 5.150560] ACPI Warning for _SB_.BAT0._BIF: Return Package type mismatch at index 12 - found Integer, expected String/Buffer (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 5.332663] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node f4425450), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 6.224974] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD_.GBQC] (Node f3423438), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 6.224987] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD_._BQC] (Node f3423420), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 6.227917] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD1.GBQC] (Node f34235b8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 6.227930] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD1._BQC] (Node f34235a0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 6.732310] ACPI Error: Method parse/execution failed [_SB_.BAT1.UBIF] (Node dd028fc0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 6.732334] ACPI Error: Method parse/execution failed [_SB_.BAT1._BIF] (Node dd028f90), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 6.773285] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ddc25ca8), AE_ALREADY_EXISTS (20101013/psparse-537) summary klog: HIGH Kernel message: [ 7.365139] ACPI Error: No handler for Region [IPMI] (ffff8805ffa37240) [IPMI] (20110112/evregion-369) summary klog: HIGH Kernel message: [ 7.365150] ACPI Error: Region IPMI(0x7) has no handler (20110112/exfldio-292) summary klog: HIGH Kernel message: [ 7.365161] ACPI Error: Method parse/execution failed [_SB_.PMI0._GHL] (Node ffff8805ffa36b18), AE_NOT_EXIST (20110112/psparse-536) summary klog: HIGH Kernel message: [ 7.365181] ACPI Error: Method parse/execution failed [_SB_.PMI0._PMC] (Node ffff8805ffa36a78), AE_NOT_EXIST (20110112/psparse-536) summary klog: HIGH Kernel message: [ 8.137284] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node f702e720), AE_TIME summary klog: HIGH Kernel message: [ 8.137317] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node f702e7f8), AE_TIME summary klog: HIGH Kernel message: [ 8.137344] ACPI Error (psparse-0537): Method parse/execution failed [EC0A] (Node f702ea08), AE_TIME summary klog: HIGH Kernel message: [ 8.137370] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AMW0._WED] (Node f7019ca8), AE_TIME summary klog: HIGH Kernel message: [ 8.227953] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.C003.C098._DOD] (Node f7021588), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 8.794633] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f5824ab0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 9.141980] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node f702e690), AE_TIME summary klog: HIGH Kernel message: [ 9.142017] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node f702e768), AE_TIME summary klog: HIGH Kernel message: [ 9.142046] ACPI Error (psparse-0537): Method parse/execution failed [EC0A] (Node f702e978), AE_TIME summary klog: HIGH Kernel message: [ 9.142076] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AMW0._WED] (Node f7019420), AE_TIME summary klog: HIGH Kernel message: [ 9.267040] ACPI Warning for _SB_.SPM_._PMD: Return Package type mismatch at index 0 - found String, expected Reference (20090903/nspredef-1012) summary klog: HIGH Kernel message: [ 9.391036] ACPI Error: Method parse/execution failed [_SB_.PCI0.IBCM] (Node f3828738), AE_AML_BUFFER_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 9.391049] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD03._BCM] (Node f3824b28), AE_AML_BUFFER_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 9.391061] ACPI Error: Evaluating _BCM failed (20110112/video-365) summary klog: HIGH Kernel message: [ 9.393479] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88012d8cfee8 (20110112/exresop-590) summary klog: HIGH Kernel message: [ 9.393498] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02.GBQC] (Node ffff88012f83e6b8), AE_AML_OPERAND_TYPE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 9.393510] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02._BQC] (Node ffff88012f83e690), AE_AML_OPERAND_TYPE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 9.394098] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88012d8cfd38 (20110112/exresop-590) summary klog: HIGH Kernel message: [ 9.394109] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02.SBCM] (Node ffff88012f83e6e0), AE_AML_OPERAND_TYPE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 9.394118] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02._BCM] (Node ffff88012f83e668), AE_AML_OPERAND_TYPE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 9.957372] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node ffff88007af33780), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 9.957372] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node ffff88007af33910), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 9.957372] ACPI Error: Method parse/execution failed [_SB_.PCI0.SATA.CHN0._GTM] (Node ffff88007af32b68), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 9.957372] ACPI Error: Method parse/execution failed [_SB_.PCI0.SATA.CHN1._GTM] (Node ffff88007af32cf8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 10.120967] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88023bcba438 (20110112/exresop-590) summary klog: HIGH Kernel message: [ 10.120977] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DSM] (Node ffff88023f45edc0), AE_AML_OPERAND_TYPE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 10.121007] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88023bcba1b0 (20110112/exresop-590) summary klog: HIGH Kernel message: [ 10.121018] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEG0.GFX0._DSM] (Node ffff88023f474370), AE_AML_OPERAND_TYPE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 10.194089] ACPI Warning for _SB_.PCI0.PCIB._PRT: Return Package has no elements (empty) (20100428/nspredef-456) summary klog: HIGH Kernel message: [ 10.289821] ACPI Error (psargs-0359): [_PR_.CPU0._CST] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 10.289828] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._CST] (Node f70c3288), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 10.344782] ACPI Error: SMBus or IPMI write requires Buffer of length 42, found length 20 (20090903/exfield-286) summary klog: HIGH Kernel message: [ 10.344788] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PMI0._GHL] (Node ffff88122fc1ece0), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 10.344812] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PMI0._PMC] (Node ffff88122fc1ec60), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 10.380244] ACPI Warning (nspredef-0357): _SB_.PCI0.VID2._DOD: Return Package has no elements (empty) [20080926] summary klog: HIGH Kernel message: [ 10.680422] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02._BCM] (Node ffff880117642ed8), AE_AML_INFINITE_LOOP (20110112/psparse-536) summary klog: HIGH Kernel message: [ 10.692650] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR2] (Node f702e738), AE_TIME summary klog: HIGH Kernel message: [ 10.692684] ACPI Error (psparse-0537): Method parse/execution failed [ECRW] (Node f702e810), AE_TIME summary klog: HIGH Kernel message: [ 10.692710] ACPI Error (psparse-0537): Method parse/execution failed [ECG1] (Node f702e840), AE_TIME summary klog: HIGH Kernel message: [ 10.692735] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node f702ea50), AE_TIME summary klog: HIGH Kernel message: [ 10.692761] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node f702e708), AE_TIME summary klog: HIGH Kernel message: [ 10.708822] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node f7427738), AE_TIME summary klog: HIGH Kernel message: [ 10.708876] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node f7427810), AE_TIME summary klog: HIGH Kernel message: [ 10.708908] ACPI Error (psparse-0537): Method parse/execution failed [EC0A] (Node f7427a20), AE_TIME summary klog: HIGH Kernel message: [ 10.708939] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AMW0._WED] (Node f742c078), AE_TIME summary klog: HIGH Kernel message: [ 10.724353] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node ffff880213050d00), AE_TIME summary klog: HIGH Kernel message: [ 10.724416] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node ffff880213050e20), AE_TIME summary klog: HIGH Kernel message: [ 10.724449] ACPI Error (psparse-0537): Method parse/execution failed [EC0A] (Node ffff8802130520e0), AE_TIME summary klog: HIGH Kernel message: [ 10.724482] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AMW0._WED] (Node ffff8802130573c0), AE_TIME summary klog: HIGH Kernel message: [ 11.195653] ACPI Error (psparse-0537): Method parse/execution failed [ECG5] (Node f702e8a0), AE_TIME summary klog: HIGH Kernel message: [ 11.195680] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node f702ec90), AE_TIME summary klog: HIGH Kernel message: [ 11.383565] ACPI Error: Method parse/execution failed [_SB_.C003.C098._DOD] (Node ffff880137636938), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 11.660551] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR2] (Node f702e6a8), AE_TIME summary klog: HIGH Kernel message: [ 11.660591] ACPI Error (psparse-0537): Method parse/execution failed [ECRW] (Node f702e780), AE_TIME summary klog: HIGH Kernel message: [ 11.660615] ACPI Error (psparse-0537): Method parse/execution failed [ECG1] (Node f702e7b0), AE_TIME summary klog: HIGH Kernel message: [ 11.660638] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node f702e9c0), AE_TIME summary klog: HIGH Kernel message: [ 11.660661] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node f702e678), AE_TIME summary klog: HIGH Kernel message: [ 11.800514] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node ffff8801376342a8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 11.880473] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88012125f558 (20110413/exresop-590) summary klog: HIGH Kernel message: [ 11.880998] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88012125f3a8 (20110413/exresop-590) summary klog: HIGH Kernel message: [ 11.915871] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SWFS] (Node ffff880226c49320), AE_AML_INFINITE_LOOP summary klog: HIGH Kernel message: [ 11.915905] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.RBYT] (Node ffff880226c493c0), AE_AML_INFINITE_LOOP summary klog: HIGH Kernel message: [ 11.915932] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ASOC.SECV] (Node ffff880226c4a0e0), AE_AML_INFINITE_LOOP summary klog: HIGH Kernel message: [ 11.915960] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ASOC.RVLT] (Node ffff880226c49b00), AE_AML_INFINITE_LOOP summary klog: HIGH Kernel message: [ 12.160904] ACPI Error (psparse-0537): Method parse/execution failed [ECG5] (Node f702e810), AE_TIME summary klog: HIGH Kernel message: [ 12.160929] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node f702ec00), AE_TIME summary klog: HIGH Kernel message: [ 12.167076] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff8800b1753048 (20090903/exresop-590) summary klog: HIGH Kernel message: [ 12.167089] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0.DD02.GBQC] (Node ffff8800b3c44ca0), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 12.167143] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0.DD02._BQC] (Node ffff8800b3c44c80), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 12.167205] ACPI Warning: Evaluating _BQC failed (20090903/video-641) summary klog: HIGH Kernel message: [ 12.242368] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88012ea6e6c0 (20110413/exresop-590) summary klog: HIGH Kernel message: [ 12.242387] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02.GBQC] (Node ffff88013113f6b8), AE_AML_OPERAND_TYPE (20110413/psparse-536) summary klog: HIGH Kernel message: [ 12.242397] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02._BQC] (Node ffff88013113f690), AE_AML_OPERAND_TYPE (20110413/psparse-536) summary klog: HIGH Kernel message: [ 12.242409] ACPI Warning: Evaluating _BQC failed (20110413/video-484) summary klog: HIGH Kernel message: [ 12.242974] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88012ea6e5e8 (20110413/exresop-590) summary klog: HIGH Kernel message: [ 12.242986] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02.SBCM] (Node ffff88013113f6e0), AE_AML_OPERAND_TYPE (20110413/psparse-536) summary klog: HIGH Kernel message: [ 12.242994] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02._BCM] (Node ffff88013113f668), AE_AML_OPERAND_TYPE (20110413/psparse-536) summary klog: HIGH Kernel message: [ 12.243002] ACPI Error: Evaluating _BCM failed (20110413/video-365) summary klog: HIGH Kernel message: [ 12.361137] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.C003.C09D._DOD] (Node ffff88013b630c00), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 12.390421] ACPI Error (psparse-0537): Method parse/execution failed [ECG5] (Node ffff880213050f00), AE_TIME summary klog: HIGH Kernel message: [ 12.390446] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node ffff880213052440), AE_TIME summary klog: HIGH Kernel message: [ 12.553637] ACPI Warning: For _SB_.PCI0.P0P2.PEGP._DOD: Return type mismatch - found Integer, expected Package (20110112/nspredef-1053) summary klog: HIGH Kernel message: [ 12.838979] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain ACPI Exception: AE_TIME, Returned by Handler for [EmbeddedControl] (20110112/evregion-474) summary klog: HIGH Kernel message: [ 12.841008] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain ACPI Warning: _BQC returned an invalid level (20110112/video-473) summary klog: HIGH Kernel message: [ 13.024512] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node f7425450), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 13.396787] ACPI Error: Method parse/execution failed [_SB_.ADP1._PSR] (Node ffff88011763ba00), AE_TIME (20110112/psparse-536) summary klog: HIGH Kernel message: [ 13.445954] ACPI Error: Field [D128] at 1040 exceeds Buffer [NULL] size 160 (bits) (20110112/dsopcode-597) summary klog: HIGH Kernel message: [ 13.445980] ACPI Error: Method parse/execution failed [_SB_.WMID.HWMC] (Node f742a8b8), AE_AML_BUFFER_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 13.446019] ACPI Error: Method parse/execution failed [_SB_.WMID.WMAD] (Node f742aac8), AE_AML_BUFFER_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 13.452167] ACPI Error (psargs-0359): [_PR_.C001] Namespace lookup failure, AE_NOT_FOUND summary klog: HIGH Kernel message: [ 13.452177] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_.TPAF] (Node f702bde0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 13.452213] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_.TBOM] (Node f702bdf8), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 13.452247] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._Q1D] (Node f702ba98), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 14.013275] ACPI Warning: _BQC returned an invalid level (20110112/video-473) summary klog: HIGH Kernel message: [ 14.175645] ACPI Error: Method parse/execution failed [_SB_.PCI0.OVGA.DD03.GBQC] (Node f44247e0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 14.175656] ACPI Error: Method parse/execution failed [_SB_.PCI0.OVGA.DD03._BQC] (Node f44247c8), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 14.175667] ACPI Warning: Evaluating _BQC failed (20110112/video-484) summary klog: HIGH Kernel message: [ 14.885219] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88013c6b58b8 (20110112/exresop-590) summary klog: HIGH Kernel message: [ 14.885234] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DSM] (Node ffff88013f849eb0), AE_AML_OPERAND_TYPE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 14.885277] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88013c6b5828 (20110112/exresop-590) summary klog: HIGH Kernel message: [ 14.885289] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEG1.GFX0._DSM] (Node ffff88013f86f668), AE_AML_OPERAND_TYPE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 15.027464] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node ffff880075137920), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 15.027505] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node ffff880075140660), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 15.027542] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node ffff88007513b180), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 15.027579] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node ffff88007513b120), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 15.027616] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node ffff880075139cc0), AE_NOT_FOUND summary klog: HIGH Kernel message: [ 15.287082] ACPI Warning: _BQC returned an invalid level (20100428/video-640) summary klog: HIGH Kernel message: [ 15.846531] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node ffff8800b3840360), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 16.336080] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._Q33] (Node f70244b0), AE_TIME summary klog: HIGH Kernel message: [ 16.592600] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ASOC.SEFA] (Node ffff880226c4a120), AE_AML_INFINITE_LOOP summary klog: HIGH Kernel message: [ 16.592628] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ASOC.RFAN] (Node ffff880226c49bc0), AE_AML_INFINITE_LOOP summary klog: HIGH Kernel message: [ 16.719798] ACPI Warning for _SB_.PCI0.VID2._DOD: Return Package has no elements (empty) (20090903/nspredef-433) summary klog: HIGH Kernel message: [ 16.942606] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.OVGA.DD03.GBQC] (Node ffff8800b7e3c6e0), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 16.942654] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.OVGA.DD03._BQC] (Node ffff8800b7e3c6c0), AE_ALREADY_EXISTS summary klog: HIGH Kernel message: [ 17.125601] ACPI Error: Needed [Buffer/String/Package], found [Integer] eee27810 (20110112/exresop-590) summary klog: HIGH Kernel message: [ 17.125618] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DSM] (Node f7431fa8), AE_AML_OPERAND_TYPE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 17.125669] ACPI Error: Needed [Buffer/String/Package], found [Integer] eee27780 (20110112/exresop-590) summary klog: HIGH Kernel message: [ 17.125690] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEG1.GFX0._DSM] (Node f7445c78), AE_AML_OPERAND_TYPE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 17.802564] ACPI Error: Method parse/execution failed [_SB_.WMID.HWMC] (Node ffff8801ffc5c078), AE_AML_BUFFER_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 17.802574] ACPI Error: Method parse/execution failed [_SB_.WMID.WMAD] (Node ffff8801ffc5c258), AE_AML_BUFFER_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 17.847665] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEG0.PEGP.DD02._BCL] (Node f444ebe8), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 17.985672] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.IBCM] (Node ffff8800b3832600), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 17.985723] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0.DD03._BCM] (Node ffff8800b382b840), AE_AML_BUFFER_LIMIT summary klog: HIGH Kernel message: [ 18.054842] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff880133a777e0 (20110112/exresop-590) summary klog: HIGH Kernel message: [ 18.054860] ACPI Error: Method parse/execution failed [_SB_.PCI0.VGA_._DSM] (Node ffff880137659190), AE_AML_OPERAND_TYPE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 18.054909] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff880133a776c0 (20110112/exresop-590) summary klog: HIGH Kernel message: [ 18.054932] ACPI Error: Method parse/execution failed [_SB_.PCI0.P0P1.VGA_._DSM] (Node ffff88013765d230), AE_AML_OPERAND_TYPE (20110112/psparse-536) summary klog: HIGH Kernel message: [ 18.353938] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD_.GBQC] (Node ffff88013762f708), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 18.353954] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD_._BQC] (Node ffff88013762f6e0), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 18.367485] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD1.GBQC] (Node ffff88013762f988), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 18.367501] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD1._BQC] (Node ffff88013762f960), AE_ALREADY_EXISTS (20110112/psparse-536) summary klog: HIGH Kernel message: [ 18.720899] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node f70206d8), AE_AML_PACKAGE_LIMIT summary klog: HIGH Kernel message: [ 19.086127] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node f702e6a8), AE_TIME summary klog: HIGH Kernel message: [ 19.086176] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node f702e780), AE_TIME summary klog: HIGH Kernel message: [ 19.086202] ACPI Error (psparse-0537): Method parse/execution failed [EC0A] (Node f702e990), AE_TIME summary klog: HIGH Kernel message: [ 19.086228] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AMW0._WED] (Node f7019fd8), AE_TIME summary klog: HIGH Kernel message: [ 19.408610] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node f74256a8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 20.135790] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88023b491318 (20110316/exresop-590) summary klog: HIGH Kernel message: [ 20.135804] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DSM] (Node ffff88023ec61eb0), AE_AML_OPERAND_TYPE (20110316/psparse-536) summary klog: HIGH Kernel message: [ 20.135849] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88023b491708 (20110316/exresop-590) summary klog: HIGH Kernel message: [ 20.135864] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEG1.GFX0._DSM] (Node ffff88023ec77668), AE_AML_OPERAND_TYPE (20110316/psparse-536) summary klog: HIGH Kernel message: [ 20.149010] ACPI Error: Needed [Integer/String/Buffer], found [Package] f741ed48 (20100428/exresop-422) summary klog: HIGH Kernel message: [ 20.149032] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.P0P2.PEGP.LCD_._BQC] (Node f741f978), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 20.149063] ACPI Warning: Evaluating _BQC failed (20100428/video-651) summary klog: HIGH Kernel message: [ 20.298134] [Firmware Bug]: _BCQ is used instead of _BQC summary klog: HIGH Kernel message: [ 20.342464] ACPI Warning: _BQC returned an invalid level (20110413/video-473) summary klog: HIGH Kernel message: [ 20.634744] ACPI Warning for _SB_.PCI0.GFX0.DD02._BQC: Return type mismatch - found Reference, expected Integer (20100428/nspredef-1053) summary klog: HIGH Kernel message: [ 21.460488] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node ffff880133632c80), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) summary klog: HIGH Kernel message: [ 21.562484] ACPI Error: Needed [Buffer/String/Package], found [Integer] f7260370 (20090903/exresop-590) summary klog: HIGH Kernel message: [ 21.562496] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0.DD02.GBQC] (Node f7017a68), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 21.562544] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0.DD02._BQC] (Node f7017a50), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 22.154348] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node f74276a8), AE_TIME summary klog: HIGH Kernel message: [ 22.154443] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node f7427780), AE_TIME summary klog: HIGH Kernel message: [ 22.154516] ACPI Error (psparse-0537): Method parse/execution failed [ECG5] (Node f7427828), AE_TIME summary klog: HIGH Kernel message: [ 22.154587] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node f7427c18), AE_TIME summary klog: HIGH Kernel message: [ 25.859931] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff880139af5240 (20090903/exresop-590) summary klog: HIGH Kernel message: [ 25.859949] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.VGA_._DSM] (Node ffff88013ba4c0e0), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 25.860025] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.P0P1.VGA_._DSM] (Node ffff88013ba4da80), AE_AML_OPERAND_TYPE summary klog: HIGH Kernel message: [ 26.653079] ACPI Exception: AE_TIME, Returned by Handler for [EmbeddedControl] (20100428/evregion-474) summary klog: HIGH Kernel message: [ 26.653190] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node ffff880226c54ce0), AE_TIME summary klog: HIGH Kernel message: [ 26.653252] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node ffff880226c54e00), AE_TIME summary klog: HIGH Kernel message: [ 26.653283] ACPI Error (psparse-0537): Method parse/execution failed [ECG5] (Node ffff880226c54ee0), AE_TIME summary klog: HIGH Kernel message: [ 26.653307] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node ffff880226c56420), AE_TIME summary klog: HIGH Kernel message: [ 26.874386] ACPI Warning: _BQC returned an invalid level (20090903/video-631) summary klog: HIGH Kernel message: [ 29.470614] ACPI Warning for _SB_.PCI0.GFX0.DD03._BQC: Return type mismatch - found Reference, expected Integer (20100428/nspredef-1053) summary klog: HIGH Kernel message: [ 30.140339] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node ffff880217050ce0), AE_TIME summary klog: HIGH Kernel message: [ 30.140421] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node ffff880217050e00), AE_TIME summary klog: HIGH Kernel message: [ 30.140448] ACPI Error (psparse-0537): Method parse/execution failed [ECG5] (Node ffff880217050ee0), AE_TIME summary klog: HIGH Kernel message: [ 30.140475] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node ffff880217052420), AE_TIME summary klog: HIGH Kernel message: [ 42.490181] ACPI Error: [_SB_.VDRV] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) summary klog: HIGH Kernel message: [ 42.490202] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC0.H_EC._Q51] (Node ffff88003d9b1e60), AE_NOT_FOUND (20110112/psparse-536) summary klog: HIGH Kernel message: [ 44.661543] ACPI Warning for _SB_.PCI0.GFX0.DD01._BCL: Return type mismatch - found Integer, expected Package (20090903/nspredef-1006) summary klog: HIGH Kernel message: [ 50.737630] ACPI Warning for _SB_.PCI0.AGP_.VID_.MXMI: Excess arguments - needs 1, found 2 (20090903/nspredef-303) summary klog: HIGH Kernel message: [ 50.737686] ACPI Warning for _SB_.PCI0.AGP_.VID_.MXMS: Excess arguments - needs 1, found 2 (20090903/nspredef-303) summary summary Medium failures: 331 summary klog: MEDIUM Kernel message: [ 0.000000] ACPI: BIOS bug: multiple APIC/MADT found, using 0 summary klog: MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect checksum in table [APIC] - 0x3E, should be 0x41 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect checksum in table [APIC] - 0x65, should be 0x68 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect checksum in table [APIC] - 0x69, should be 0x6C (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect checksum in table [APIC] - 0x69, should be 0x6C (20110413/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect checksum in table [APIC] - 0x9E, should be 0xA1 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect checksum in table [APIC] - 0xDF, should be 0xE2 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect checksum in table [APIC] - 0xE4, should be 0xE7 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.000000] ACPI Warning: Incorrect checksum in table [XSDT] - 0x89, should be 0x7D (20110413/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.000000] mtrr: your BIOS has configured an incorrect mask, fixing it. summary klog: MEDIUM Kernel message: [ 0.076767] ACPI Warning: Incorrect checksum in table [OEMB] - 0xA6, should be 0x97 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.077157] ACPI Warning: Incorrect checksum in table [OEMB] - 0x4C, should be 0x21 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.078268] ACPI Warning: Incorrect checksum in table [OEMB] - 07, should be 06 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.078686] ACPI Warning: Incorrect checksum in table [OEMB] - 0x38, should be 0x81 (20110413/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.083817] ACPI Warning: Incorrect checksum in table [OEMB] - 0xF9, should be 0xF3 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.085974] ACPI Warning: Incorrect checksum in table [OEMB] - 0x6B, should be 0x39 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.086054] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x96 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.088999] ACPI Warning: Incorrect checksum in table [OEMB] - 0xE8, should be 0xDB (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.089613] ACPI Warning: Incorrect checksum in table [OEMB] - 0xB3, should be 0xAE (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.089701] ACPI Warning: Incorrect checksum in table [OEMB] - 0x77, should be 0x6C (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.091541] ACPI Warning: Incorrect checksum in table [OEMB] - F6, should be E7 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.091778] ACPI Warning: Incorrect checksum in table [OEMB] - 8E, should be 7F (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.091911] ACPI Warning: Incorrect checksum in table [APIC] - 0x8E, should be 0x91 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.094477] ACPI Warning: Incorrect checksum in table [OEMB] - 0x97, should be 0x90 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.096447] ACPI Warning: Incorrect checksum in table [OEMB] - 66, should be 62 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.098113] ACPI Warning: Incorrect checksum in table [OEMB] - 0x2C, should be 0x28 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.099413] ACPI Warning: Incorrect checksum in table [OEMB] - E2, should be D9 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.102803] ACPI Warning: Incorrect checksum in table [OEMB] - 6E, should be 40 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.108470] ACPI Warning: Incorrect checksum in table [OEMB] - 3F, should be 3B (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.109343] ACPI Warning: Incorrect checksum in table [OEMB] - 0x29, should be 0x1C (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.110905] ACPI Warning: Incorrect checksum in table [OEMB] - 32, should be 25 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.115838] ACPI Warning: Incorrect checksum in table [OEMB] - 79, should be 6C (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.118568] ACPI Warning: Incorrect checksum in table [OEMB] - 2F, should be 22 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.132540] ACPI Warning: Incorrect checksum in table [OEMB] - CB, should be C6 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.137394] ACPI Warning: Incorrect checksum in table [OEMB] - 29, should be 1A (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.141112] ACPI Warning: Incorrect checksum in table [OEMB] - ED, should be E8 20090521 tbutils-246 summary klog: MEDIUM Kernel message: [ 0.154764] ACPI Warning: Incorrect checksum in table [OEMB] - 7D, should be 6E (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.160449] mtrr: your CPUs had inconsistent fixed MTRR settings summary klog: MEDIUM Kernel message: [ 0.163687] ACPI Warning: Incorrect checksum in table [TAMG] - 0xFC, should be 0xFB (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.164073] ACPI Warning: Incorrect checksum in table [TAMG] - 0xEE, should be 0xED (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.169362] ACPI Warning: Incorrect checksum in table [OEMB] - 0x18, should be 0x13 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.169398] ACPI Warning: Incorrect checksum in table [OEMB] - 0x15, should be 0xAC (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.170352] ACPI Warning: Incorrect checksum in table [SSDT] - 0xEA, should be 0x42 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.171073] ACPI Warning: Incorrect checksum in table [OEMB] - 0x67, should be 0x92 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.171715] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0xAB (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.172406] ACPI Warning: Incorrect checksum in table [OEMB] - 0x22, should be 0x15 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.172679] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0xA5 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.173062] ACPI Warning: Incorrect checksum in table [SSDT] - 0xAA, should be 0xED (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.173745] ACPI Warning: Incorrect checksum in table [TCPA] - 0x83, should be 0x27 (20110413/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.175144] ACPI Warning: Incorrect checksum in table [OEMB] - 95, should be 8C (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.175987] ACPI Warning: Incorrect checksum in table [OEMB] - D7, should be C8 20090521 tbutils-246 summary klog: MEDIUM Kernel message: [ 0.176309] ACPI Warning: Incorrect checksum in table [OEMB] - 0xCF, should be 0xCE (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.176680] ACPI Warning: Incorrect checksum in table [OEMB] - D6, should be C7 20090521 tbutils-246 summary klog: MEDIUM Kernel message: [ 0.176840] ACPI Warning: Incorrect checksum in table [SSDT] - 0xAC, should be 0x4D (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.177033] ACPI Warning: Incorrect checksum in table [OEMB] - ED, should be EC 20090521 tbutils-246 summary klog: MEDIUM Kernel message: [ 0.177048] [Firmware Bug]: PCI: MMCONFIG at [mem 0xe0000000-0xe03fffff] not reserved in ACPI motherboard resources summary klog: MEDIUM Kernel message: [ 0.177506] ACPI Warning: Incorrect checksum in table [SSDT] - 0xA1, should be 0x30 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.177670] ACPI Warning: Incorrect checksum in table [OEMB] - 1C, should be 17 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.178040] ACPI Warning: Incorrect checksum in table [OEMB] - 0xF7, should be 0xE8 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.179475] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0xAB (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.181959] ACPI Warning: Incorrect checksum in table [OEMB] - 0x0A, should be 0x09 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.182122] ACPI Warning: Incorrect checksum in table [OEMB] - 7D, should be 70 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.183518] ACPI Warning: Incorrect checksum in table [OEMB] - 10, should be 03 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.183948] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x8E (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.184086] ACPI Warning: Incorrect checksum in table [OEMB] - 0x69, should be 0x68 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.186529] ACPI Warning: Incorrect checksum in table [OEMB] - B9, should be AC (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.187574] ACPI Warning: Incorrect checksum in table [OEMB] - 77, should be 76 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.187872] ACPI Warning: Incorrect checksum in table [OEMB] - B6, should be B3 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.187981] ACPI Warning: Incorrect checksum in table [OEMB] - 8D, should be 8C (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.187992] ACPI Warning: Incorrect checksum in table [OEMB] - 40, should be 3F (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.188197] ACPI Warning: Incorrect checksum in table [OEMB] - 6A, should be 61 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.188232] ACPI Warning: Incorrect checksum in table [ATKG] - 0x07, should be 0x59 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.188669] ACPI Warning: Incorrect checksum in table [ATKG] - 0x05, should be 0xE5 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.191013] ACPI Warning: Incorrect checksum in table [ATKG] - 0x81, should be 0xE5 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.191774] ACPI Warning: Incorrect checksum in table [OEMB] - 37, should be 28 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.192037] ACPI Warning: Incorrect checksum in table [OEMB] - 0xD9, should be 0xCC (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.192983] ACPI Warning: Incorrect checksum in table [OEMB] - C0, should be B3 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.194184] ACPI Warning: Incorrect checksum in table [OEMB] - C8, should be BF (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.194314] ACPI Warning: Incorrect checksum in table [OEMB] - AA, should be 9D (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.194897] ACPI Warning: Incorrect checksum in table [OEMB] - 0xDD, should be 0xD6 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.195685] ACPI Warning: Incorrect checksum in table [OEMB] - 2A, should be 29 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.195754] ACPI Warning: Incorrect checksum in table [OEMB] - 88, should be 83 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.196934] ACPI Warning: Incorrect checksum in table [OEMB] - 0B, should be 02 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.197082] ACPI Warning: Incorrect checksum in table [ATKG] - 0xC8, should be 0xE5 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.198490] ACPI Warning: Incorrect checksum in table [OEMB] - 0xB2, should be 0x47 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.198823] ACPI Warning: Incorrect checksum in table [OEMB] - 01, should be F4 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.199360] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be AB 20090521 tbutils-246 summary klog: MEDIUM Kernel message: [ 0.200426] ACPI Warning: Incorrect checksum in table [OEMB] - A3, should be 9E (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.200744] ACPI Warning: Incorrect checksum in table [ASF!] - 59, should be 08 20090521 tbutils-246 summary klog: MEDIUM Kernel message: [ 0.201013] ACPI Warning: Incorrect checksum in table [OEMB] - 8A, should be 7D (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.203079] ACPI Warning: Incorrect checksum in table [OEMB] - 0xE1, should be 0xDC (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.204335] ACPI Warning: Incorrect checksum in table [OEMB] - 0xC1, should be 0x11 (20110413/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.204344] ACPI Warning: Incorrect checksum in table [ATKG] - 07, should be 59 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.206075] ACPI Warning: Incorrect checksum in table [ATKG] - BB, should be E5 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.207023] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be AB (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.208479] ACPI Warning: Incorrect checksum in table [OEMB] - 0x77, should be 0x72 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.210543] ACPI Warning: Incorrect checksum in table [OEMB] - CD, should be CC (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.210667] ACPI Warning: Incorrect checksum in table [OEMB] - D3, should be C4 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.211069] ACPI Warning: Incorrect checksum in table [OEMB] - 0x99, should be 0x92 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.211113] ACPI Warning: Incorrect checksum in table [OEMB] - 7B, should be 76 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.212633] ACPI Warning: Incorrect checksum in table [OEMB] - E1, should be D3 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.213771] ACPI Warning: Incorrect checksum in table [OEMB] - EC, should be E7 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.214423] ACPI Warning: Incorrect checksum in table [OEMB] - FD, should be EF (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.215632] ACPI Warning: Incorrect checksum in table [OEMB] - 0x0B, should be 0x5B (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.216249] ACPI Warning: Incorrect checksum in table [ATKG] - 0x27, should be 0xE5 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.217957] ACPI Warning: Incorrect checksum in table [OEMB] - 69, should be 5F (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.221945] mtrr: your CPUs had inconsistent MTRRdefType settings summary klog: MEDIUM Kernel message: [ 0.222869] ACPI Warning: Incorrect checksum in table [ATKG] - B0, should be 4A (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.223245] ACPI Warning: Incorrect checksum in table [OEMB] - DB, should be DA (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.223485] [Firmware Bug]: PCI: MMCONFIG at [mem 0xf0000000-0xf3ffffff] not reserved in ACPI motherboard resources summary klog: MEDIUM Kernel message: [ 0.226224] ACPI Warning: Incorrect checksum in table [ATKG] - 53, should be 84 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.227129] ACPI Warning: Incorrect checksum in table [ATKG] - 0x11, should be 0xE5 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.228535] ACPI Warning: Incorrect checksum in table [OEMB] - 77, should be 6F (20100121/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.232350] ACPI Warning: Incorrect checksum in table [ATKG] - 15, should be 73 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.232460] ACPI Warning: Incorrect checksum in table [OEMB] - 8C, should be 87 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.232830] ACPI Warning: Incorrect checksum in table [OEMB] - 0xC2, should be 0x84 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.233493] ACPI Warning: Incorrect checksum in table [GSCI] - 58, should be AA (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.233542] ACPI Warning: Incorrect checksum in table [GSCI] - 0x70, should be 0xD2 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.233946] ACPI Warning: Incorrect checksum in table [ATKG] - 1E, should be E5 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.235518] ACPI Warning: Incorrect checksum in table [ASF!] - D8, should be 6E (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.236465] ACPI Warning: Incorrect checksum in table [OEMB] - 1D, should be 10 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.241360] ACPI Warning: Incorrect checksum in table [OEMB] - 0xBD, should be 0x89 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.242473] ACPI Warning: Incorrect checksum in table [GSCI] - 0x28, should be 0x8A (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.244995] ACPI Warning: Incorrect checksum in table [OEMB] - 17, should be 67 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.246137] ACPI Warning: Incorrect checksum in table [ATKG] - F1, should be E5 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.249246] ACPI Warning: Incorrect checksum in table [OEMB] - 70, should be 6D (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.251711] ACPI Warning: Incorrect checksum in table [ATKG] - B0, should be E5 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.256141] ACPI Warning: Incorrect checksum in table [ATKG] - 0xAF, should be 0x59 (20110413/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.257910] ACPI Warning: Incorrect checksum in table [OEMB] - 04, should be 54 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.261013] ACPI Warning: Incorrect checksum in table [OEMB] - DF, should be 2F (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.265541] ACPI Warning: Incorrect checksum in table [OEMB] - E0, should be 30 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.266577] ACPI Warning: Incorrect checksum in table [GSCI] - 3B, should be BF (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.279154] ACPI Warning: Incorrect checksum in table [OEMB] - B9, should be AE (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.288180] ACPI Warning: Incorrect checksum in table [ATKG] - 0x81, should be 0x59 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.308095] ACPI Warning: Incorrect checksum in table [SSDT] - 1F, should be 7F (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.310767] ACPI Warning: Incorrect checksum in table [OEMB] - 0x72, should be 0x6A (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.314160] ACPI Warning: Incorrect checksum in table [OEMB] - 91, should be 90 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.314603] ACPI Warning: Incorrect checksum in table [OEMB] - 8B, should be 8A (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.314675] mtrr: your CPUs had inconsistent variable MTRR settings summary klog: MEDIUM Kernel message: [ 0.316718] ACPI Warning: Incorrect checksum in table [OEMB] - 27, should be 22 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.316734] ACPI Warning: Incorrect checksum in table [TAMG] - 0xF3, should be 0xF2 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.317152] ACPI Warning: Incorrect checksum in table [OEMB] - C1, should be B4 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.317685] ACPI Warning: Incorrect checksum in table [ASF!] - 0xFC, should be 0x98 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.319223] ACPI Warning: Incorrect checksum in table [OEMB] - E7, should be E2 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.323465] ACPI Warning: Incorrect checksum in table [OEMB] - 0x8D, should be 0x8C (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.328929] ACPI Warning: Incorrect checksum in table [OEMB] - 0x45, should be 0x40 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.328954] ACPI Warning: Incorrect checksum in table [ASF!] - D9, should be 6D (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.330000] ACPI Warning: Incorrect checksum in table [TCPA] - 0xD1, should be 0x75 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.330140] ACPI Warning: Incorrect checksum in table [ATKG] - 0xE3, should be 0xDC (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.330280] ACPI Warning: Incorrect checksum in table [OEMB] - DE, should be D9 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.330793] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x9A (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.331948] ACPI Warning: Incorrect checksum in table [OEMB] - 0C, should be 0B (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.333155] ACPI Warning: Incorrect checksum in table [SSDT] - 4A, should be D9 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.333591] ACPI Warning: Incorrect checksum in table [TAMG] - 0xF4, should be 0xF3 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.335745] ACPI Warning: Incorrect checksum in table [OEMB] - 80, should be 78 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.337368] ACPI Warning: Incorrect checksum in table [OEMB] - 8B, should be 86 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.338801] ACPI Warning: Incorrect checksum in table [OEMB] - 8B, should be 7E (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.339584] ACPI Warning: Incorrect checksum in table [OEMB] - 0xE2, should be 0xD5 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.339628] ACPI Warning: Incorrect checksum in table [OEMB] - 91, should be 88 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.339857] ACPI Warning: Incorrect checksum in table [OEMB] - 6D, should be 60 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.340121] ACPI Warning: Incorrect checksum in table [ATKG] - 0x1B, should be 0xE5 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.341276] ACPI Warning: Incorrect checksum in table [ASF!] - F2, should be 8D (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.342985] ACPI Warning: Incorrect checksum in table [OEMB] - 18, should be 13 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.343577] ACPI Warning: Incorrect checksum in table [OEMB] - 0xD1, should be 0xCA (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.344373] ACPI Warning: Incorrect checksum in table [OEMB] - C5, should be B8 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.345244] ACPI Warning: Incorrect checksum in table [OEMB] - 0xA5, should be 0x9C (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.346079] ACPI Warning: Incorrect checksum in table [OEMB] - 7A, should be 71 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.347883] ACPI Warning: Incorrect checksum in table [OEMB] - 5C, should be 53 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.348936] ACPI Warning: Incorrect checksum in table [OEMB] - 0x56, should be 0x49 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.349163] ACPI Warning: Incorrect checksum in table [OEMB] - E7, should be DA (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.350013] ACPI Warning: Incorrect checksum in table [OEMB] - D3, should be C6 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.350096] ACPI Warning: Incorrect checksum in table [ATKG] - 13, should be 53 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.350158] ACPI Warning: Incorrect checksum in table [ATKG] - 0x13, should be 0xC8 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.350335] ACPI Warning: Incorrect checksum in table [SSDT] - 0x83, should be 0x37 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.350784] ACPI Warning: Incorrect checksum in table [iEIT] - 0x5C, should be 0x51 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.351065] ACPI Warning: Incorrect checksum in table [SSDT] - 0x04, should be 0xCA (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.353356] ACPI Warning: Incorrect checksum in table [ATKG] - 0x05, should be 0x36 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.356280] ACPI Warning: Incorrect checksum in table [TCPA] - 0x33, should be 0xD7 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.356754] ACPI Warning: Incorrect checksum in table [ASF!] - ED, should be 83 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.357018] ACPI Warning: Incorrect checksum in table [OEMB] - 0xA6, should be 0xA1 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.357902] ACPI Warning: Incorrect checksum in table [ATKG] - 0xE9, should be 0xFE (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.358086] ACPI Warning: Incorrect checksum in table [OEMB] - 0x11, should be 0x10 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.359915] ACPI Warning: Incorrect checksum in table [ATKG] - 0x7D, should be 0x59 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.360335] ACPI Warning: Incorrect checksum in table [GSCI] - 0x28, should be 0xD4 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.363621] ACPI Warning: Incorrect checksum in table [OEMB] - 3C, should be 3B 20090521 tbutils-246 summary klog: MEDIUM Kernel message: [ 0.363728] ACPI Warning: Incorrect checksum in table [OEMB] - 75, should be 74 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.363981] ACPI Warning: Incorrect checksum in table [OEMB] - BB, should be AE (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.366917] ACPI Warning: Incorrect checksum in table [OEMB] - BD, should be B6 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.367185] ACPI Warning: Incorrect checksum in table [OEMB] - B2, should be A5 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.367524] ACPI Warning: Incorrect checksum in table [ATKG] - 0xAA, should be 0x59 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.368838] ACPI Warning: Incorrect checksum in table [OEMB] - 23, should be 1E (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.369986] ACPI Warning: Incorrect checksum in table [OEMB] - 0x61, should be 0x58 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.370263] ACPI Warning: Incorrect checksum in table [ATKG] - 0x73, should be 0xE5 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.371572] ACPI Warning: Incorrect checksum in table [ATKG] - 0xFB, should be 0xE5 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.375383] ACPI Warning: Incorrect checksum in table [OEMB] - 0x90, should be 0x83 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.378931] ACPI Warning: Incorrect checksum in table [OEMB] - 33, should be 2C (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.379815] ACPI Warning: Incorrect checksum in table [SSDT] - D5, should be 3E (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.380609] ACPI Warning: Incorrect checksum in table [SSDT] - 8C, should be DC (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.381211] ACPI Warning: Incorrect checksum in table [OEMB] - 8E, should be 89 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.381478] [Firmware Bug]: PCI: MMCONFIG at [mem 0xe0000000-0xe06fffff] not reserved in ACPI motherboard resources summary klog: MEDIUM Kernel message: [ 0.383518] ACPI Warning: Incorrect checksum in table [ATKG] - 0x0F, should be 0xE7 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.384684] ACPI Warning: Incorrect checksum in table [OEMB] - 0x4E, should be 0x3F (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.385777] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 89 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.388556] ACPI Warning: Incorrect checksum in table [ATKG] - 6A, should be E5 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.388736] ACPI Warning: Incorrect checksum in table [OEMB] - 8C, should be 83 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.390975] [Firmware Bug]: PCI: MMCONFIG at [mem 0xe0000000-0xe08fffff] not reserved in ACPI motherboard resources summary klog: MEDIUM Kernel message: [ 0.396197] [Firmware Bug]: ACPI: Invalid BIOS _PSS frequency: 0x0 MHz summary klog: MEDIUM Kernel message: [ 0.396945] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 96 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.397644] ACPI Warning: Incorrect checksum in table [ATKG] - F9, should be E5 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.398231] ACPI Warning: Incorrect checksum in table [ATKG] - 12, should be 07 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.398290] ACPI Warning: Incorrect checksum in table [ATKG] - 01, should be 23 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.400212] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x88 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.401117] ACPI Warning: Incorrect checksum in table [ATKG] - 0F, should be E7 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.404616] ACPI Warning: Incorrect checksum in table [OEMB] - A5, should be A0 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.407719] ACPI Warning: Incorrect checksum in table [OEMB] - 72, should be 69 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.414781] ACPI Warning: Incorrect checksum in table [OEMB] - CD, should be C8 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.418105] ACPI Warning: Incorrect checksum in table [ATKG] - 76, should be FE (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.420323] ACPI Warning: Incorrect checksum in table [ATKG] - 0xC3, should be 0x59 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.434593] ACPI Warning: Incorrect checksum in table [GSCI] - D2, should be A5 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.438019] ACPI Warning: Incorrect checksum in table [ATKG] - C8, should be E5 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.441805] ACPI Warning: Incorrect checksum in table [OEMB] - B2, should be B1 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.455674] ACPI Warning: Incorrect checksum in table [SSDT] - 83, should be 7F (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.459126] ACPI Warning: Incorrect checksum in table [SSDT] - 4C, should be 12 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.462573] ACPI Warning: Incorrect checksum in table [OEMB] - 95, should be 5E 20090521 tbutils-246 summary klog: MEDIUM Kernel message: [ 0.479385] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x88 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.487180] ACPI Warning: Incorrect checksum in table [TAMG] - 0x33, should be 0x32 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.487365] ACPI Warning: Incorrect checksum in table [TAMG] - 0x99, should be 0x98 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.490256] ACPI Warning: Incorrect checksum in table [ATKG] - 0x22, should be 0x53 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.491491] ACPI Warning: Incorrect checksum in table [SSDT] - 0x4A, should be 0xD9 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.494198] ACPI Warning: Incorrect checksum in table [SSDT] - 0x37, should be 0xC7 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.496094] ACPI Warning: Incorrect checksum in table [TCPA] - F8, should be 9C (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.497913] ACPI Warning: Incorrect checksum in table [TAMG] - 0xFA, should be 0xF9 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.498775] ACPI Warning: Incorrect checksum in table [TAMG] - 0xB2, should be 0xB1 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.498976] ACPI Warning: Incorrect checksum in table [GSCI] - 7B, should be 04 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.526190] ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - F3, should be EE [20080926] summary klog: MEDIUM Kernel message: [ 0.534826] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x7F (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.538081] ACPI Warning: Incorrect checksum in table [OEMB] - C1, should be BC (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.548650] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 87 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.550271] ACPI Warning: Incorrect checksum in table [ATKG] - 0xDC, should be 0x0E (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.568235] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 7F 20090521 tbutils-246 summary klog: MEDIUM Kernel message: [ 0.581397] ACPI Warning: Incorrect checksum in table [ATKG] - 0x24, should be 0x16 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.591409] ACPI Warning: Incorrect checksum in table [ATKG] - 0x1E, should be 0x16 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.612305] ACPI Warning: Incorrect checksum in table [SSDT] - 6C, should be FB (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.614155] ACPI Warning: Incorrect checksum in table [SSDT] - 37, should be C7 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.625680] [Firmware Bug]: PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] not reserved in ACPI motherboard resources summary klog: MEDIUM Kernel message: [ 0.628646] ACPI Warning: Incorrect checksum in table [OEMB] - 0xFA, should be 0x1E (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.641157] ACPI Warning: Incorrect checksum in table [OEMB] - C4, should be C1 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.644838] [Firmware Bug]: PCI: MMCONFIG at [mem 0xe0000000-0xe09fffff] not reserved in ACPI motherboard resources summary klog: MEDIUM Kernel message: [ 0.646493] ACPI Warning: Incorrect checksum in table [OEMB] - 0x5F, should be 0x5A (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.653985] ACPI Warning: Incorrect checksum in table [TAMG] - 0x4A, should be 0x49 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.656750] ACPI Warning: Incorrect checksum in table [OEMB] - 06, should be 05 20090521 tbutils-246 summary klog: MEDIUM Kernel message: [ 0.664875] ACPI Warning: Incorrect checksum in table [TAMG] - 0x45, should be 0x44 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.666686] ACPI Warning: Incorrect checksum in table [TAMG] - 0x9E, should be 0x9D (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.670109] ACPI Warning: Incorrect checksum in table [OEMB] - 5B, should be 4E (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.670182] ACPI Warning: Incorrect checksum in table [TAMG] - C3, should be C2 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.670980] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x7F (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.673104] ACPI Warning: Incorrect checksum in table [OEMB] - 8C, should be 7D (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.674282] ACPI Warning: Incorrect checksum in table [TAMG] - 0x15, should be 0x14 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.675162] ACPI Warning: Incorrect checksum in table [TAMG] - 0x05, should be 0x04 (20110413/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.677386] ACPI Warning: Incorrect checksum in table [OEMB] - 94, should be 93 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.678233] ACPI Warning: Incorrect checksum in table [OEMB] - 0x55, should be 0x50 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.678877] ACPI Warning: Incorrect checksum in table [OEMB] - 88, should be 7F (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.681297] ACPI Warning: Incorrect checksum in table [OEMB] - DA, should be D9 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.688066] ACPI Warning: Incorrect checksum in table [OEMB] - 60, should be 5F (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.695887] ACPI Warning: Incorrect checksum in table [OEMB] - C1, should be C0 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.696587] ACPI Warning: Incorrect checksum in table [OEMB] - 0xEE, should be 0xE6 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.697769] ACPI Warning: Incorrect checksum in table [OEMB] - 0xFC, should be 0xF7 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.700202] [Firmware Bug]: powernow-k8: No PSB or ACPI _PSS objects summary klog: MEDIUM Kernel message: [ 0.702121] ACPI Warning: Incorrect checksum in table [OEMB] - 0x84, should be 0x7B (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.705041] ACPI Warning: Incorrect checksum in table [OEMB] - 0xF3, should be 0xF2 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.710890] ACPI Warning: Incorrect checksum in table [OEMB] - DF, should be D2 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.715065] ACPI Warning: Incorrect checksum in table [OEMB] - 67, should be 64 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.715951] ACPI Warning: Incorrect checksum in table [OEMB] - 0x9B, should be 0x93 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.717350] ACPI Warning: Incorrect checksum in table [OEMB] - 0x5C, should be 0x55 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.719490] ACPI Warning: Incorrect checksum in table [OEMB] - 0x3A, should be 0x39 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.725974] ACPI Warning: Incorrect checksum in table [OEMB] - 0x7E, should be 0x75 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.755111] ACPI Warning: Incorrect checksum in table [OEMB] - 2F, should be 2A (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.775831] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x87 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.777581] ACPI Warning: Incorrect checksum in table [TAMG] - 0xF9, should be 0xF8 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.779737] ACPI Warning: Incorrect checksum in table [TAMG] - 0x83, should be 0x82 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.780967] ACPI Warning: Incorrect checksum in table [TAMG] - FA, should be F9 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.781225] ACPI Warning: Incorrect checksum in table [TAMG] - 0x10, should be 0x0F (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.781345] ACPI Warning: Incorrect checksum in table [TAMG] - 0xB2, should be 0xB1 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.783246] ACPI Warning: Incorrect checksum in table [TAMG] - 0x7D, should be 0x7C (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.786539] ACPI Warning: Incorrect checksum in table [TAMG] - 0x2D, should be 0x2C (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.787253] ACPI Warning: Incorrect checksum in table [TAMG] - 0x10, should be 0x0F (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.788032] ACPI Warning: Incorrect checksum in table [TAMG] - 0x04, should be 0x03 (20110413/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.788607] ACPI Warning: Incorrect checksum in table [TAMG] - 0xA2, should be 0xA1 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.791560] ACPI Warning: Incorrect checksum in table [SSDT] - 0x3F, should be 0x1F (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.795423] ACPI Warning: Incorrect checksum in table [SSDT] - 0x3F, should be 0x1F (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.805111] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 7E (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.831199] ACPI Warning: Incorrect checksum in table [OEMB] - B7, should be B6 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.872036] ACPI Warning: Incorrect checksum in table [OEMB] - EC, should be E3 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.875591] ACPI Warning: Incorrect checksum in table [OEMB] - 14, should be 13 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.877093] ACPI Warning: Incorrect checksum in table [OEMB] - 0x89, should be 0x80 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.892915] ACPI Warning: Incorrect checksum in table [OEMB] - 0xCE, should be 0xCD (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.899338] ACPI Warning: Incorrect checksum in table [OEMB] - 0xDD, should be 0xD4 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.940265] ACPI Warning: Incorrect checksum in table [TAMG] - 0x14, should be 0x13 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.941821] ACPI Warning: Incorrect checksum in table [SSDT] - 0x3F, should be 0x91 (20110413/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.943511] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x7E (20110413/tbutils-314) summary klog: MEDIUM Kernel message: [ 0.972652] ACPI Warning: Incorrect checksum in table [OEMB] - FA, should be F7 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.005834] ACPI Warning: Incorrect checksum in table [OEMB] - 0x1D, should be 0x1C (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.020525] ACPI Warning: Incorrect checksum in table [TAMG] - 0xE8, should be 0xE7 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.023813] ACPI Warning: Incorrect checksum in table [OEMB] - 0x82, should be 0x81 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.168945] ACPI Warning: Incorrect checksum in table [OEMB] - 0x04, should be 0xFD (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.174038] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x9B (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.176461] [Firmware Bug]: powernow-k8: No compatible ACPI _PSS objects found. summary klog: MEDIUM Kernel message: [ 1.176462] [Firmware Bug]: powernow-k8: Try again with latest BIOS. summary klog: MEDIUM Kernel message: [ 1.179893] ACPI Warning: Incorrect checksum in table [ATKG] - 0x81, should be 0x59 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.320114] ACPI Warning: Incorrect checksum in table [ATKG] - 0x9D, should be 0xE5 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.505441] ACPI Warning: Incorrect checksum in table [TAMG] - 7C, should be 7B (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.507734] ACPI Warning: Incorrect checksum in table [TAMG] - 2D, should be 2C (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.509153] ACPI Warning: Incorrect checksum in table [TAMG] - C0, should be BF (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.512057] ACPI Warning: Incorrect checksum in table [OEMB] - CA, should be C9 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.515657] ACPI Warning: Incorrect checksum in table [TAMG] - 0xC5, should be 0xC4 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.528248] ACPI Warning: Incorrect checksum in table [TAMG] - 0x98, should be 0x97 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.529653] ACPI Warning: Incorrect checksum in table [TAMG] - 0x7C, should be 0x7B (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.535278] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 88 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.545790] ACPI Warning: Incorrect checksum in table [OEMB] - D0, should be CF (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.559068] ACPI Warning: Incorrect checksum in table [OEMB] - C5, should be C4 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.586563] ACPI Warning: Incorrect checksum in table [OEMB] - D7, should be D3 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.601784] ACPI Warning: Incorrect checksum in table [OEMB] - 5D, should be 55 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 1.739479] ACPI Warning: Incorrect checksum in table [SSDT] - 0x3F, should be 0x91 (20110112/tbutils-314) summary klog: MEDIUM Kernel message: [ 2.039517] [Firmware Bug]: ACPI: Invalid BIOS _PSS frequency: 0x80000000 MHz summary klog: MEDIUM Kernel message: [ 2.173935] ACPI Warning: Incorrect checksum in table [OEMB] - C3, should be C2 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 2.229498] ACPI Warning: Incorrect checksum in table [TAMG] - 0xC6, should be 0xC5 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 3.033154] ACPI Warning: Incorrect checksum in table [OEMB] - 0x87, should be 0x84 (20100428/tbutils-314) summary klog: MEDIUM Kernel message: [ 3.382436] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 7F (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 3.382442] ACPI Warning: Incorrect checksum in table [_RAT] - 00, should be 63 (20090903/tbutils-314) summary klog: MEDIUM Kernel message: [ 3.644168] ACPI Warning: Incorrect checksum in table [TCPA] - 0xF8, should be 0x9C (20110413/tbutils-314) summary klog: MEDIUM Kernel message: [ 4.046031] ACPI Warning: Incorrect checksum in table [OEMB] - 4A, should be 47 (20090903/tbutils-314) summary summary Low failures: 15 summary klog: LOW Kernel message: [ 0.094856] [Firmware Bug]: ACPI: No _BQC method, cannot determine initial brightness summary klog: LOW Kernel message: [ 0.663194] [Firmware Bug]: ACPI: no secondary bus range in _CRS summary klog: LOW Kernel message: [ 0.810246] [Firmware Bug]: ACPI(Z01I) defines _DOD but not _DOS summary klog: LOW Kernel message: [ 1.183989] [Firmware Bug]: ACPI(PEGD) defines _DOD but not _DOS summary klog: LOW Kernel message: [ 1.398000] [Firmware Bug]: ACPI(Z00P) defines _DOD but not _DOS summary klog: LOW Kernel message: [ 2.478380] [Firmware Bug]: ACPI(NGFX) defines _DOD but not _DOS summary klog: LOW Kernel message: [ 3.139648] [Firmware Bug]: ACPI(XVS0) defines _DOD but not _DOS summary klog: LOW Kernel message: [ 3.663829] [Firmware Bug]: ACPI(GFX0) defines _DOD but not _DOS summary klog: LOW Kernel message: [ 4.002664] [Firmware Bug]: ACPI(EVGA) defines _DOD but not _DOS summary klog: LOW Kernel message: [ 4.983204] [Firmware Bug]: ACPI(MXM3) defines _DOD but not _DOS summary klog: LOW Kernel message: [ 8.316300] [Firmware Bug]: ACPI(VGA0) defines _DOD but not _DOS summary klog: LOW Kernel message: [ 10.080352] [Firmware Bug]: ACPI(VGA) defines _DOD but not _DOS summary klog: LOW Kernel message: [ 15.395484] [Firmware Bug]: ACPI(PEGP) defines _DOD but not _DOS summary klog: LOW Kernel message: [ 20.435766] [Firmware Bug]: Duplicate ACPI video bus devices for the same VGA controller, please try module parameter "video.allow_duplicates=1"if the current driver doesn't work. summary klog: LOW Kernel message: [ 24.824888] [Firmware Bug]: ACPI(IGPU) defines _DOD but not _DOS summary summary Other failures: NONE summary summary Test |Pass |Fail |Abort|Warn |Skip |Info | summary ---------------+-----+-----+-----+-----+-----+-----+ summary klog | | 1589| | | | | summary ---------------+-----+-----+-----+-----+-----+-----+ summary Total: | 0| 1589| 0| 0| 0| 0| summary ---------------+-----+-----+-----+-----+-----+-----+ fwts-test/klog-0001/klog-0003.log000066400000000000000000000000701465205512700163530ustar00rootroot00000000000000klog Found 1589 unique errors in kernel log. fwts-test/klog-0001/klog.txt000066400000000000000000005511101465205512700160370ustar00rootroot00000000000000[ 0.000000] ACPI: BIOS bug: multiple APIC/MADT found, using 0 [ 0.000000] ACPI Error: 32/64X address mismatch in Gpe0Block: 00008018/0000000000008028, using 32 (20090903/tbfadt-427) [ 0.000000] ACPI Error: 32/64X address mismatch in Gpe0Block: 00008020/0000000000008028, using 32 (20090903/tbfadt-427) [ 0.000000] ACPI Error: 32/64X address mismatch in Gpe0Block: 0x00008020/0x0000000000008028, using 32 (20110112/tbfadt-427) [ 0.000000] ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 00008030/0000000000008020, using 32 (20090903/tbfadt-427) [ 0.000000] ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 00008800/0000000000008100, using 32 (20090903/tbfadt-427) [ 0.000000] ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 0x00000900/0x0000000000000800, using 32 (20110112/tbfadt-427) [ 0.000000] ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 0x00001218/0x0000000000001214, using 32 (20100428/tbfadt-427) [ 0.000000] ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 0x00001218/0x0000000000001214, using 32 (20110413/tbfadt-430) [ 0.000000] ACPI Error: 32/64X address mismatch in Pm2ControlBlock: 0x00008800/0x0000000000008100, using 32 (20110112/tbfadt-427) [ 0.000000] ACPI Error: A valid RSDP was not found (20090903/tbxfroot-219) [ 0.000000] ACPI Error: A valid RSDP was not found (20100428/tbxfroot-219) [ 0.000000] ACPI Error: A valid RSDP was not found (20110112/tbxfroot-219) [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! 20090521 tbfadt-370 [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20090903/tbfadt-369) [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20100121/tbfadt-369) [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20100428/tbfadt-369) [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20100702/tbfadt-369) [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20101013/tbfadt-369) [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20110112/tbfadt-369) [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20110316/tbfadt-369) [ 0.000000] ACPI Warning: 32/64 FACS address mismatch in FADT - two FACS tables! (20110413/tbfadt-369) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3776BF40/0x000000003776ED40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x38FE4E40/0x0000000038FE4D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x38FE4E40/0x0000000038FE4D40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F465F40/0x000000003F465F80, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F473F40/0x000000003F473F80, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F509F40/0x000000003F509F80, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F509F40/0x000000003F509F80, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F611E40/0x000000003F611D40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F611E40/0x000000003F611D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F611E40/0x000000003F611D40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x6FB75F40/0x000000006FB75F80, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x77603F40/0x0000000077603F80, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x77603F40/0x0000000077603F80, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7762DF40/0x000000007762DF80, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x77630F40/0x0000000077630F80, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7776BF40/0x000000007776ED40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7776BF40/0x000000007776ED40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x78FE4E40/0x0000000078FE4D40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7A7E4E40/0x000000007A7E4D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7BE20F40/0x000000007BE20F80, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7D7E4E40/0x000000007D7E4D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7D8C4F40/0x000000007D8C5E40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7F611E40/0x000000007F611D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7FCEBF40/0x000000007FCE7F40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0x7FD5AF40/0x000000007FD5FF40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAAD87F40/0x00000000AADA1D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAAD87F40/0x00000000AADA1D40, using 32 (20110316/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAAD87F40/0x00000000AADA1D40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAADB7F40/0x00000000AADD1D40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAADB7F40/0x00000000AADD1D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAADB9F40/0x00000000AADD3D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAAF2AF40/0x00000000AAF2DD40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAAFE4E40/0x00000000AAFE4D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAB62DF40/0x00000000AB62DF80, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAB62DF40/0x00000000AB62DF80, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xAFB77F40/0x00000000AFB77F80, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB5F17E40/0x00000000B5F17D40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB5F1BE40/0x00000000B5F1BD40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB6D5AF40/0x00000000B6D61D40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB6DB9F40/0x00000000B6DD3D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB762CF40/0x00000000B762CF80, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB7B1CE40/0x00000000B7B1CD40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB7B1CE40/0x00000000B7B1CD40, using 32 (20110316/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB7B1CE40/0x00000000B7B1CD40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xB8FE4E40/0x00000000B8FE4D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBAD17F40/0x00000000BAD31D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBAD87F40/0x00000000BADA1D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBADABF40/0x00000000BADAED40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBADABF40/0x00000000BADAED40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBAF1CF40/0x00000000BAF1FD40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBAFE4E40/0x00000000BAFE4D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBAFE5E40/0x00000000BAFE5D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB4D1F40/0x00000000BB4DFD40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB583F40/0x00000000BB59DD40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB583F40/0x00000000BB59DD40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB5B3F40/0x00000000BB5CDD40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB5B3F40/0x00000000BB5CDD40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB5B3F40/0x00000000BB5CDD40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB62CF40/0x00000000BB62CF80, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB62DF40/0x00000000BB62DF80, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB648F40/0x00000000BB64BD40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB649F40/0x00000000BB64CD40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBB76BF40/0x00000000BB76ED40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBBE27F40/0x00000000BBE27F80, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBBE27F40/0x00000000BBE27F80, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBBE29F40/0x00000000BBE29F80, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBDB65F40/0x00000000BDB6BE40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBDF17E40/0x00000000BDF17D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBDF18E40/0x00000000BDF18D40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBDF19E40/0x00000000BDF19D40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBDF19E40/0x00000000BDF19D40, using 32 (20101013/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBDF19E40/0x00000000BDF19D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBDF1AE40/0x00000000BDF1AD40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBE97CF40/0x00000000BE996D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBEDB7F40/0x00000000BEDD1D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBEDB8F40/0x00000000BEDD1D40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBEDB8F40/0x00000000BEDD1D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBEDB9F40/0x00000000BEDD3D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBF4D1F40/0x00000000BF4DFD40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBF62CF40/0x00000000BF62CF80, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBF62DF40/0x00000000BF62DF80, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBF654F40/0x00000000BF662D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBF7E4E40/0x00000000BF7E4D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBFA4CF40/0x00000000BFA51F40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBFA4CF40/0x00000000BFA51F40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBFE17E40/0x00000000BFE17D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xBFE21F40/0x00000000BFE21E40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xC9E58F40/0x00000000C9E6ED40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCAB39F40/0x00000000CAB3CD40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCAFE4E40/0x00000000CAFE4D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCAFE4E40/0x00000000CAFE4D40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCAFE5E40/0x00000000CAFE5D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCB61DF40/0x00000000CB61DE40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCB61DF40/0x00000000CB61DE40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCBE4CF40/0x00000000CBE51F40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCBE4CF40/0x00000000CBE51F40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCBF6BF40/0x00000000CBF6ED40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCEF27F40/0x00000000CEF2AD40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCEF27F40/0x00000000CEF2AD40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCEF27F40/0x00000000CEF2AD40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCEF28F40/0x00000000CEF2BD40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCEF28F40/0x00000000CEF2BD40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCEF2BF40/0x00000000CEF2ED40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCEF2BF40/0x00000000CEF2ED40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCF36BF40/0x00000000CF36ED40, using 32 (20100702/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCF36BF40/0x00000000CF36ED40, using 32 (20101013/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCF76BF40/0x00000000CF76ED40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCF76BF40/0x00000000CF76ED40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCF7E4E40/0x00000000CF7E4D40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCF7E4E40/0x00000000CF7E4D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCF7E4E40/0x00000000CF7E4D40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCFBFAF40/0x00000000CFBF6F40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCFD56F40/0x00000000CFD52F40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xCFD5FF40/0x00000000CFD65E40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xD2F2DF40/0x00000000D2F30D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDB36BF40/0x00000000DB36ED40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDB36BF40/0x00000000DB36ED40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDB76BF40/0x00000000DB76ED40, using 32 (20100428/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDB76BF40/0x00000000DB76ED40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDB76BF40/0x00000000DB76ED40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDEB39F40/0x00000000DEB3CD40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDEB3AF40/0x00000000DEB3DD40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDEEBAF40/0x00000000DEEBDD40, using 32 (20110413/tbfadt-489) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDEF2DF40/0x00000000DEF30D40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 0xDF64BF40/0x00000000DF64ED40, using 32 (20110112/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 3762DF40/000000003762DF80, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 3F611E40/000000003F611D40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 7776BF40/000000007776ED40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 7DB61F40/000000007DB66F40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 7F3ECF40/000000007F3E8F40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 7F611E40/000000007F611D40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - 9DCC4F40/000000009DCC5E40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - AFB75F40/00000000AFB75F80, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - B7B1CE40/00000000B7B1CD40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - B7B1CE40/00000000B7B1CD40, using 32 (20100121/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BADABF40/00000000BADAED40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BAF2DF40/00000000BAF30D40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BB62DF40/00000000BB62DF80, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BB76BF40/00000000BB76ED40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BBE28E40/00000000BBE28D40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BDB5BF40/00000000BDB60F40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BDB5FF40/00000000BDB64F40, using 32 20090521 tbfadt-487 [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BDF17E40/00000000BDF17D40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BEDB7F40/00000000BEDD1D40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BF62CF40/00000000BF62CF80, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - BF76BF40/00000000BF76ED40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - CBE4AF40/00000000CBE4FF40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - CBF6BF40/00000000CBF6ED40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - CEF28F40/00000000CEF2BD40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - CEF2CF40/00000000CEF2FD40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - D2F2DF40/00000000D2F30D40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - DADC1F40/00000000DADD5D40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - DB36BF40/00000000DB36ED40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - DB76BF40/00000000DB76ED40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - DEEBAF40/00000000DEEBDD40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X FACS address mismatch in FADT - DEF2DF40/00000000DEF30D40, using 32 (20090903/tbfadt-486) [ 0.000000] ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 20090521 tbfadt-527 [ 0.000000] ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 (20090903/tbfadt-526) [ 0.000000] ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 (20100428/tbfadt-526) [ 0.000000] ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 (20101013/tbfadt-526) [ 0.000000] ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 (20110112/tbfadt-526) [ 0.000000] ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 (20110413/tbfadt-529) [ 0.000000] ACPI Warning: BIOS XSDT has NULL entry, using RSDT (20110112/tbutils-663) [ 0.000000] ACPI Warning: Incorrect checksum in table [APIC] - 0x3E, should be 0x41 (20110112/tbutils-314) [ 0.000000] ACPI Warning: Incorrect checksum in table [APIC] - 0x65, should be 0x68 (20110112/tbutils-314) [ 0.000000] ACPI Warning: Incorrect checksum in table [APIC] - 0x69, should be 0x6C (20110112/tbutils-314) [ 0.000000] ACPI Warning: Incorrect checksum in table [APIC] - 0x69, should be 0x6C (20110413/tbutils-314) [ 0.000000] ACPI Warning: Incorrect checksum in table [APIC] - 0x9E, should be 0xA1 (20110112/tbutils-314) [ 0.000000] ACPI Warning: Incorrect checksum in table [APIC] - 0xDF, should be 0xE2 (20110112/tbutils-314) [ 0.000000] ACPI Warning: Incorrect checksum in table [APIC] - 0xE4, should be 0xE7 (20110112/tbutils-314) [ 0.000000] ACPI Warning: Incorrect checksum in table [XSDT] - 0x89, should be 0x7D (20110413/tbutils-314) [ 0.000000] ACPI Warning: Invalid length for Pm1aControlBlock: 32, using default 16 (20090903/tbfadt-607) [ 0.000000] ACPI Warning: Invalid length for Pm1aControlBlock: 32, using default 16 (20100428/tbfadt-607) [ 0.000000] ACPI Warning: Invalid length for Pm1aControlBlock: 32, using default 16 (20110112/tbfadt-607) [ 0.000000] ACPI Warning: Invalid length for Pm1aControlBlock: 32, using default 16 (20110413/tbfadt-610) [ 0.000000] ACPI Warning: Invalid length for Pm1bControlBlock: 32, using default 16 (20090903/tbfadt-607) [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 0, using default 8 (20090903/tbfadt-607) [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 0, using default 8 (20100428/tbfadt-607) [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 0, using default 8 (20110112/tbfadt-607) [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 16, using default 8 (20100428/tbfadt-607) [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 16, using default 8 (20110112/tbfadt-607) [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 16, using default 8 (20110413/tbfadt-610) [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 32, using default 8 (20090903/tbfadt-607) [ 0.000000] ACPI Warning: Invalid length for Pm2ControlBlock: 32, using default 8 (20110112/tbfadt-607) [ 0.000000] ACPI Warning: Invalid length for PmTimerBlock: 24, using default 32 (20100428/tbfadt-607) [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 000000000000102C/0 20090521 tbfadt-558 [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 000000000000102C/0 (20090903/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 000000000000802C/0 (20090903/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 0x0000000000000000/0x4 (20110413/tbfadt-560) [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 0x000000000000102C/0x0 (20100428/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 0x000000000000102C/0x0 (20101013/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 0x000000000000102C/0x0 (20110112/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 0x000000000000102C/0x0 (20110413/tbfadt-560) [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 0x00000000000044A0/0x0 (20100428/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0000000000000000/1 20090521 tbfadt-558 [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0000000000000000/1 (20090903/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0000000000000050/0 (20090903/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000000/0x1 (20100428/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000000/0x1 (20101013/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000000/0x1 (20110112/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000000/0x1 (20110413/tbfadt-560) [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000450/0x0 (20100428/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000450/0x0 (20110112/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000814/0x0 (20100428/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000820/0x0 (20100428/tbfadt-557) [ 0.000000] ACPI Warning: Optional field Pm2ControlBlock has zero address or length: 0x0000000000000820/0x0 (20110112/tbfadt-557) [ 0.000000] ACPI Warning (tbfadt-0460): Optional field "Gpe1Block" has zero address or length: 000000000000102C/0 [20080926] [ 0.000000] mtrr: your BIOS has configured an incorrect mask, fixing it. [ 0.000000] WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 1408MB of RAM. [ 0.000000] WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 4MB of RAM. [ 0.022719] ACPI Error: Found unknown opcode 0xFD at AML address f7ffe14c offset 0xE8, ignoring (20110112/psloop-141) [ 0.025446] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x00BE (20110112/psloop-526) [ 0.025463] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x00C3 (20110112/psloop-526) [ 0.034090] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ee025630), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.040119] [Firmware Bug]: the BIOS has corrupted hw-PMU resources (MSR 186 is 400000) [ 0.042222] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x2366 (20100121/psloop-526) [ 0.042240] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x006C (20090903/psloop-522) [ 0.042253] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x006F (20090903/psloop-522) [ 0.042265] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x0070 (20090903/psloop-522) [ 0.042279] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x0077 (20090903/psloop-522) [ 0.042291] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x007C (20090903/psloop-522) [ 0.042302] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x007D (20090903/psloop-522) [ 0.042311] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x007F (20090903/psloop-522) [ 0.042322] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x007B] at table offset 0x0080 (20090903/psloop-522) [ 0.044066] ACPI Warning: Detected an unsupported executable opcode at module-level: [0x0070] at table offset 0x678F (20100428/psloop-526) [ 0.045570] ACPI Warning: For _SB_.PCI0.LPCB.H_EC._GLK: Parameter count mismatch - ASL declared 1, ACPI requires 0 (20110112/nspredef-352) [ 0.050847] ACPI Warning: Package List length (0x10) larger than NumElements count (0x8), truncated [ 0.053909] ACPI Warning: Package List length (0x10) larger than NumElements count (0x6), truncated [ 0.074070] ACPI Error: The DSDT has been corrupted or replaced - old, new headers below (20110413/tbutils-372) [ 0.074090] ACPI Error: Please send DMI info to linux-acpi@vger.kernel.org [ 0.076767] ACPI Warning: Incorrect checksum in table [OEMB] - 0xA6, should be 0x97 (20100428/tbutils-314) [ 0.077157] ACPI Warning: Incorrect checksum in table [OEMB] - 0x4C, should be 0x21 (20100428/tbutils-314) [ 0.077854] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4c250d8), AE_NOT_FOUND (20110112/psparse-536) [ 0.078226] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1.APCT] (Node f7033090), AE_NO_MEMORY [ 0.078254] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1.GCAP] (Node f7033078), AE_NO_MEMORY [ 0.078268] ACPI Warning: Incorrect checksum in table [OEMB] - 07, should be 06 (20090903/tbutils-314) [ 0.078278] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node f7033048), AE_NO_MEMORY [ 0.078686] ACPI Warning: Incorrect checksum in table [OEMB] - 0x38, should be 0x81 (20110413/tbutils-314) [ 0.083817] ACPI Warning: Incorrect checksum in table [OEMB] - 0xF9, should be 0xF3 (20100428/tbutils-314) [ 0.085590] ACPI Error: Could not map memory at 0x000000007F5E3520, size 463 (20110112/exregion-178) [ 0.085606] ACPI Error: Method parse/execution failed [_PR_.CPU1.APPT] (Node f403d228), AE_NO_MEMORY (20110112/psparse-536) [ 0.085618] ACPI Error: Method parse/execution failed [_PR_.CPU1.GCAP] (Node f403d1f8), AE_NO_MEMORY (20110112/psparse-536) [ 0.085627] ACPI Error: Could not map memory at 0x000000007D3E1520, size 463 (20110112/exregion-178) [ 0.085628] ACPI Error: Method parse/execution failed [_PR_.CPU1._PDC] (Node f403d1c8), AE_NO_MEMORY (20110112/psparse-536) [ 0.085974] ACPI Warning: Incorrect checksum in table [OEMB] - 0x6B, should be 0x39 (20110112/tbutils-314) [ 0.086054] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x96 (20110112/tbutils-314) [ 0.086081] ACPI Error: Could not map memory at 0x000000007F395420, size 141 (20110112/exregion-178) [ 0.086097] ACPI Error: Method parse/execution failed [_PR_.CPU1.APCT] (Node f403d210), AE_NO_MEMORY (20110112/psparse-536) [ 0.086108] ACPI Error: Method parse/execution failed [_PR_.CPU2.GCAP] (Node f403d270), AE_NO_MEMORY (20110112/psparse-536) [ 0.086118] ACPI Error: Method parse/execution failed [_PR_.CPU2._PDC] (Node f403d240), AE_NO_MEMORY (20110112/psparse-536) [ 0.086119] ACPI Error: Could not map memory at 0x000000007D198120, size 141 (20110112/exregion-178) [ 0.088999] ACPI Warning: Incorrect checksum in table [OEMB] - 0xE8, should be 0xDB (20100428/tbutils-314) [ 0.089613] ACPI Warning: Incorrect checksum in table [OEMB] - 0xB3, should be 0xAE (20100428/tbutils-314) [ 0.089701] ACPI Warning: Incorrect checksum in table [OEMB] - 0x77, should be 0x6C (20100428/tbutils-314) [ 0.091402] ACPI Warning: Package List length (0x7) larger than NumElements count (0x3), truncated [ 0.091463] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1.APPT] (Node f701e228), AE_INVALID_TABLE_LENGTH [ 0.091510] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1.GCAP] (Node f701e1f8), AE_INVALID_TABLE_LENGTH [ 0.091541] ACPI Warning: Incorrect checksum in table [OEMB] - F6, should be E7 (20090903/tbutils-314) [ 0.091552] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node f701e1c8), AE_INVALID_TABLE_LENGTH [ 0.091778] ACPI Warning: Incorrect checksum in table [OEMB] - 8E, should be 7F (20090903/tbutils-314) [ 0.091911] ACPI Warning: Incorrect checksum in table [APIC] - 0x8E, should be 0x91 (20110112/tbutils-314) [ 0.092524] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1.APCT] (Node f701e210), AE_NO_MEMORY [ 0.092570] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2.GCAP] (Node f701e270), AE_NO_MEMORY [ 0.092612] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PDC] (Node f701e240), AE_NO_MEMORY [ 0.093544] ACPI Error: Needed type [Reference], found [Device] f7019f90 (20100428/exresop-104) [ 0.094477] ACPI Warning: Incorrect checksum in table [OEMB] - 0x97, should be 0x90 (20100428/tbutils-314) [ 0.094856] [Firmware Bug]: ACPI: No _BQC method, cannot determine initial brightness [ 0.095719] ACPI Error: Could not map memory at 0x0000000087127520, size 463 (20110112/exregion-178) [ 0.095737] ACPI Error: Method parse/execution failed [_PR_.CPU1.APPT] (Node f383e498), AE_NO_MEMORY (20110112/psparse-536) [ 0.095749] ACPI Error: Method parse/execution failed [_PR_.CPU1.GCAP] (Node f383e468), AE_NO_MEMORY (20110112/psparse-536) [ 0.095760] ACPI Error: Method parse/execution failed [_PR_.CPU1._PDC] (Node f383e438), AE_NO_MEMORY (20110112/psparse-536) [ 0.095817] [Firmware Bug]: ACPI: ACPI brightness control misses _BQC function [ 0.096257] ACPI Error: Could not map memory at 0x0000000086DB1C20, size 141 (20110112/exregion-178) [ 0.096273] ACPI Error: Method parse/execution failed [_PR_.CPU1.APCT] (Node f383e480), AE_NO_MEMORY (20110112/psparse-536) [ 0.096285] ACPI Error: Method parse/execution failed [_PR_.CPU2.GCAP] (Node f383e4e0), AE_NO_MEMORY (20110112/psparse-536) [ 0.096295] ACPI Error: Method parse/execution failed [_PR_.CPU2._PDC] (Node f383e4b0), AE_NO_MEMORY (20110112/psparse-536) [ 0.096447] ACPI Warning: Incorrect checksum in table [OEMB] - 66, should be 62 (20090903/tbutils-314) [ 0.098113] ACPI Warning: Incorrect checksum in table [OEMB] - 0x2C, should be 0x28 (20100428/tbutils-314) [ 0.099413] ACPI Warning: Incorrect checksum in table [OEMB] - E2, should be D9 (20090903/tbutils-314) [ 0.101941] ACPI Error: Field [ASSM] at 524320 exceeds Buffer [BUF0] size 880 (bits) (20110112/dsopcode-597) [ 0.101946] ACPI Error: Method parse/execution failed [_SB_.MEM_._CRS] (Node f442af60), AE_AML_BUFFER_LIMIT (20110112/psparse-536) [ 0.101953] ACPI Error: Method execution failed [_SB_.MEM_._CRS] (Node f442af60), AE_AML_BUFFER_LIMIT (20110112/uteval-103) [ 0.102803] ACPI Warning: Incorrect checksum in table [OEMB] - 6E, should be 40 (20090903/tbutils-314) [ 0.104297] ACPI Error (psargs-0359): [OSYS] Namespace lookup failure, AE_NOT_FOUND [ 0.104304] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ACEL._STA] (Node f701c4e0), AE_NOT_FOUND [ 0.105061] ACPI Warning: Package List length (0xCA) larger than NumElements count (0x4), truncated [ 0.106912] ACPI Warning: Package List length (0x5) larger than NumElements count (0x2), truncated [ 0.108470] ACPI Warning: Incorrect checksum in table [OEMB] - 3F, should be 3B (20090903/tbutils-314) [ 0.109343] ACPI Warning: Incorrect checksum in table [OEMB] - 0x29, should be 0x1C (20100428/tbutils-314) [ 0.109618] ACPI Error: Needed type [Reference], found [Device] f7012f90 (20090903/exresop-104) [ 0.109635] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701adc8), AE_AML_OPERAND_TYPE [ 0.110905] ACPI Warning: Incorrect checksum in table [OEMB] - 32, should be 25 (20090903/tbutils-314) [ 0.113709] ACPI Error: Method parse/execution failed [_PR_.CPU1._PDC] (Node f5822150), AE_INVALID_TABLE_LENGTH (20110112/psparse-536) [ 0.113864] ACPI Error: Method parse/execution failed [_PR_.CPU2._PDC] (Node f58221e0), AE_INVALID_TABLE_LENGTH (20110112/psparse-536) [ 0.114544] ACPI Error: Method parse/execution failed [_PR_.CPU0._PDC] (Node f54211c8), AE_INVALID_TABLE_LENGTH (20110112/psparse-536) [ 0.115838] ACPI Warning: Incorrect checksum in table [OEMB] - 79, should be 6C (20090903/tbutils-314) [ 0.118277] ACPI Error (psargs-0359): [SUPP] Namespace lookup failure, AE_NOT_FOUND [ 0.118284] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7012780), AE_NOT_FOUND [ 0.118568] ACPI Warning: Incorrect checksum in table [OEMB] - 2F, should be 22 (20090903/tbutils-314) [ 0.120765] ACPI Warning for _SB_.PCI0.P2P_._PRT: Return Package has no elements (empty) (20090903/nspredef-433) [ 0.122347] ACPI Error: Could not map memory at 0x00000000000FFA32, size 0 (20100428/exregion-178) [ 0.122369] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PDC] (Node f70191c8), AE_NO_MEMORY [ 0.128150] ACPI Warning for _SB_.PCI0.P32_._PRT: Return Package has no elements (empty) (20090903/nspredef-433) [ 0.132540] ACPI Warning: Incorrect checksum in table [OEMB] - CB, should be C6 (20090903/tbutils-314) [ 0.136585] ACPI Error: Field [ALB2] at 120 exceeds Buffer [CRSA] size 104 (bits) (20090903/dsopcode-596) [ 0.136600] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.PIB_.SIO0.LPT_._CRS] (Node dd8159d8), AE_AML_BUFFER_LIMIT [ 0.136637] ACPI Error (uteval-0250): Method execution failed [_SB_.PCI0.PIB_.SIO0.LPT_._CRS] (Node dd8159d8), AE_AML_BUFFER_LIMIT [ 0.137394] ACPI Warning: Incorrect checksum in table [OEMB] - 29, should be 1A (20090903/tbutils-314) [ 0.140000] [Firmware Bug]: the BIOS has corrupted hw-PMU resources (MSR 186 is 43003c) [ 0.141112] ACPI Warning: Incorrect checksum in table [OEMB] - ED, should be E8 20090521 tbutils-246 [ 0.150000] ACPI Error: Method parse/execution failed [_SB_.PCI0.SBRG.EC0_._REG] (Node ffff880137e47618), AE_NOT_EXIST (20110112/psparse-536) [ 0.150000] ACPI Error: No handler for Region [ERAM] (ffff880137e58e10) [EmbeddedControl] (20110112/evregion-369) [ 0.154764] ACPI Warning: Incorrect checksum in table [OEMB] - 7D, should be 6E (20090903/tbutils-314) [ 0.159797] ACPI Error: Method parse/execution failed [_SB_._OSC] (Node f4421648), AE_NOT_FOUND (20110413/psparse-536) [ 0.160246] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node ffff880147830960), AE_NOT_FOUND (20110112/psparse-536) [ 0.160246] ACPI Error: [_SB_.PHSR] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 0.160449] mtrr: your CPUs had inconsistent fixed MTRR settings [ 0.163431] ACPI Warning: Package List length (0x6) larger than NumElements count (0x3), truncated [ 0.163687] ACPI Warning: Incorrect checksum in table [TAMG] - 0xFC, should be 0xFB (20110112/tbutils-314) [ 0.164073] ACPI Warning: Incorrect checksum in table [TAMG] - 0xEE, should be 0xED (20110112/tbutils-314) [ 0.165683] ACPI Error: [CDW1] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 0.165689] ACPI Error: Method parse/execution failed [_SB_._OSC] (Node f3821648), AE_NOT_FOUND (20110112/psparse-536) [ 0.166264] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node f701a648), AE_NOT_FOUND [ 0.166294] ACPI Error: Method parse/execution failed [_SB_._OSC] (Node f4021648), AE_NOT_FOUND (20110112/psparse-536) [ 0.166323] ACPI Error: No handler for Region [ERAM] (f7022168) [EmbeddedControl] (20100428/evregion-369) [ 0.166336] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node f7021bb8), AE_NOT_EXIST [ 0.166808] ACPI Error: No handler for Region [ERAM] (f7023938) [EmbeddedControl] (20100428/evregion-369) [ 0.166808] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.HTEV] (Node f701be10), AE_NOT_EXIST [ 0.166808] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node f7024d08), AE_NOT_EXIST [ 0.169111] ACPI Error: [HPTF] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 0.169117] ACPI Error: Method parse/execution failed [_SB_.PCI0.HPET._STA] (Node f402ae58), AE_NOT_FOUND (20110112/psparse-536) [ 0.169362] ACPI Warning: Incorrect checksum in table [OEMB] - 0x18, should be 0x13 (20100428/tbutils-314) [ 0.169398] ACPI Warning: Incorrect checksum in table [OEMB] - 0x15, should be 0xAC (20100428/tbutils-314) [ 0.170000] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a06440), AE_NOT_FOUND [ 0.170000] ACPI Warning: Package List length (0x6) larger than NumElements count (0x2), truncated [ 0.170352] ACPI Warning: Incorrect checksum in table [SSDT] - 0xEA, should be 0x42 (20100428/tbutils-314) [ 0.171073] ACPI Warning: Incorrect checksum in table [OEMB] - 0x67, should be 0x92 (20100428/tbutils-314) [ 0.171715] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0xAB (20110112/tbutils-314) [ 0.171916] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f700e3d8), AE_ALREADY_EXISTS [ 0.172406] ACPI Warning: Incorrect checksum in table [OEMB] - 0x22, should be 0x15 (20100428/tbutils-314) [ 0.172679] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0xA5 (20100428/tbutils-314) [ 0.172776] ACPI Warning: Package List length (1) larger than NumElements count (0), truncated [ 0.172868] ACPI Error: No handler for Region [RAM_] (f7014618) [EmbeddedControl] 20090521 evregion-319 [ 0.172873] ACPI Error: Region EmbeddedControl(3) has no handler 20090521 exfldio-294 [ 0.172880] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node f70159f0), AE_NOT_EXIST [ 0.173062] ACPI Warning: Incorrect checksum in table [SSDT] - 0xAA, should be 0xED (20110112/tbutils-314) [ 0.173605] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f70215e8), AE_ALREADY_EXISTS [ 0.173745] ACPI Warning: Incorrect checksum in table [TCPA] - 0x83, should be 0x27 (20110413/tbutils-314) [ 0.173917] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c08d6804), AE_ALREADY_EXISTS [ 0.173917] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c08d6804), AE_NOT_FOUND [ 0.175144] ACPI Warning: Incorrect checksum in table [OEMB] - 95, should be 8C (20090903/tbutils-314) [ 0.175379] ACPI Error: No handler for Region [ECXP] (f70218e8) [EmbeddedControl] (20100428/evregion-369) [ 0.175394] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._OSC] (Node f7025558), AE_NOT_EXIST [ 0.175428] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PDC] (Node f7025540), AE_NOT_EXIST [ 0.175892] ACPI Warning: Package List length (0x1) larger than NumElements count (0x0), truncated [ 0.175987] ACPI Warning: Incorrect checksum in table [OEMB] - D7, should be C8 20090521 tbutils-246 [ 0.176309] ACPI Warning: Incorrect checksum in table [OEMB] - 0xCF, should be 0xCE (20100428/tbutils-314) [ 0.176410] ACPI Error: [RAMB] Namespace lookup failure, AE_NOT_FOUND (20110413/psargs-359) [ 0.176680] ACPI Warning: Incorrect checksum in table [OEMB] - D6, should be C7 20090521 tbutils-246 [ 0.176840] ACPI Warning: Incorrect checksum in table [SSDT] - 0xAC, should be 0x4D (20100428/tbutils-314) [ 0.177033] ACPI Warning: Incorrect checksum in table [OEMB] - ED, should be EC 20090521 tbutils-246 [ 0.177048] [Firmware Bug]: PCI: MMCONFIG at [mem 0xe0000000-0xe03fffff] not reserved in ACPI motherboard resources [ 0.177377] ACPI Error: Needed type [Reference], found [Device] f701af90 (20100428/exresop-104) [ 0.177377] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7022dc8), AE_AML_OPERAND_TYPE [ 0.177506] ACPI Warning: Incorrect checksum in table [SSDT] - 0xA1, should be 0x30 (20100428/tbutils-314) [ 0.177670] ACPI Warning: Incorrect checksum in table [OEMB] - 1C, should be 17 (20090903/tbutils-314) [ 0.178040] ACPI Warning: Incorrect checksum in table [OEMB] - 0xF7, should be 0xE8 (20100428/tbutils-314) [ 0.178420] ACPI Error: No handler for Region [SACS] (f701b500) [PCI_Config] (20090903/evregion-319) [ 0.178434] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D0._STA] (Node f7072000), AE_NOT_EXIST [ 0.178458] ACPI Error (uteval-0250): Method execution failed [PRID.P_D0._STA] (Node f7072000), AE_NOT_EXIST [ 0.178486] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D1._STA] (Node f70720a8), AE_NOT_EXIST [ 0.178510] ACPI Error (uteval-0250): Method execution failed [PRID.P_D1._STA] (Node f70720a8), AE_NOT_EXIST [ 0.178539] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D0._STA] (Node f7072210), AE_NOT_EXIST [ 0.178563] ACPI Error (uteval-0250): Method execution failed [SECD.S_D0._STA] (Node f7072210), AE_NOT_EXIST [ 0.178590] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D1._STA] (Node f70722b8), AE_NOT_EXIST [ 0.178614] ACPI Error (uteval-0250): Method execution failed [SECD.S_D1._STA] (Node f70722b8), AE_NOT_EXIST [ 0.179475] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0xAB (20100428/tbutils-314) [ 0.179688] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f74174c8), AE_ALREADY_EXISTS [ 0.181591] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7022db0), AE_AML_OPERAND_TYPE [ 0.181679] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f740f438), AE_ALREADY_EXISTS [ 0.181959] ACPI Warning: Incorrect checksum in table [OEMB] - 0x0A, should be 0x09 (20100428/tbutils-314) [ 0.182122] ACPI Warning: Incorrect checksum in table [OEMB] - 7D, should be 70 (20090903/tbutils-314) [ 0.182199] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4c25228), AE_NOT_FOUND (20110112/psparse-536) [ 0.182199] ACPI Error: [Z012] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 0.182639] ACPI Error (psargs-0359): [ECEN] Namespace lookup failure, AE_NOT_FOUND [ 0.182645] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c090665c), AE_NOT_FOUND [ 0.183306] ACPI Error: Method parse/execution failed [_PR_.CPU0._PDC] (Node f403a228), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.183518] ACPI Warning: Incorrect checksum in table [OEMB] - 10, should be 03 (20090903/tbutils-314) [ 0.183725] ACPI Error: No handler for Region [SACS] (f70c20f0) [PCI_Config] (20090903/evregion-319) [ 0.183734] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D0._STA] (Node f70c4180), AE_NOT_EXIST [ 0.183755] ACPI Error (uteval-0250): Method execution failed [PRID.P_D0._STA] (Node f70c4180), AE_NOT_EXIST [ 0.183773] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D1._STA] (Node f70c4240), AE_NOT_EXIST [ 0.183793] ACPI Error (uteval-0250): Method execution failed [PRID.P_D1._STA] (Node f70c4240), AE_NOT_EXIST [ 0.183812] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D0._STA] (Node f70c43c0), AE_NOT_EXIST [ 0.183832] ACPI Error (uteval-0250): Method execution failed [SECD.S_D0._STA] (Node f70c43c0), AE_NOT_EXIST [ 0.183850] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D1._STA] (Node f70c4480), AE_NOT_EXIST [ 0.183870] ACPI Error (uteval-0250): Method execution failed [SECD.S_D1._STA] (Node f70c4480), AE_NOT_EXIST [ 0.183948] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x8E (20110112/tbutils-314) [ 0.184086] ACPI Warning: Incorrect checksum in table [OEMB] - 0x69, should be 0x68 (20110112/tbutils-314) [ 0.184314] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7015eb8), AE_ALREADY_EXISTS [ 0.185673] ACPI Error (dswload-0659): [___P] Namespace lookup failure, AE_NOT_FOUND [ 0.185686] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node f701a150), AE_INVALID_TABLE_LENGTH [ 0.185688] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._INI] (Node f700f6c0), AE_NOT_FOUND [ 0.185862] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PDC] (Node f701a1e0), AE_INVALID_TABLE_LENGTH [ 0.186281] ACPI Warning: Package List length (C) larger than NumElements count (4), truncated [ 0.186529] ACPI Warning: Incorrect checksum in table [OEMB] - B9, should be AC (20090903/tbutils-314) [ 0.187574] ACPI Warning: Incorrect checksum in table [OEMB] - 77, should be 76 (20090903/tbutils-314) [ 0.187800] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c0994f7c), AE_NOT_FOUND [ 0.187872] ACPI Warning: Incorrect checksum in table [OEMB] - B6, should be B3 (20090903/tbutils-314) [ 0.187981] ACPI Warning: Incorrect checksum in table [OEMB] - 8D, should be 8C (20090903/tbutils-314) [ 0.187992] ACPI Warning: Incorrect checksum in table [OEMB] - 40, should be 3F (20090903/tbutils-314) [ 0.188197] ACPI Warning: Incorrect checksum in table [OEMB] - 6A, should be 61 (20090903/tbutils-314) [ 0.188232] ACPI Warning: Incorrect checksum in table [ATKG] - 0x07, should be 0x59 (20100428/tbutils-314) [ 0.188487] ACPI Error (psargs-0359): q z Namespace lookup failure, AE_NOT_FOUND [ 0.188669] ACPI Warning: Incorrect checksum in table [ATKG] - 0x05, should be 0xE5 (20100428/tbutils-314) [ 0.189086] ACPI Error: Needed type [Reference], found [Device] f700ff90 (20090903/exresop-104) [ 0.189100] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7017dc8), AE_AML_OPERAND_TYPE [ 0.189451] ACPI Error: Needed type [Reference], found [Device] f700ef90 20090521 exresop-104 [ 0.189466] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7016dc8), AE_AML_OPERAND_TYPE [ 0.189515] ACPI Error (psargs-0359): [CVCL] Namespace lookup failure, AE_NOT_FOUND [ 0.189522] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.DIGI._STA] (Node f702a390), AE_NOT_FOUND [ 0.191013] ACPI Warning: Incorrect checksum in table [ATKG] - 0x81, should be 0xE5 (20100428/tbutils-314) [ 0.191774] ACPI Warning: Incorrect checksum in table [OEMB] - 37, should be 28 (20090903/tbutils-314) [ 0.191906] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c098ff6c), AE_NOT_FOUND [ 0.192037] ACPI Warning: Incorrect checksum in table [OEMB] - 0xD9, should be 0xCC (20100428/tbutils-314) [ 0.192146] ACPI Error (dswload-0781): [_PSW] Namespace lookup failure, AE_ALREADY_EXISTS [ 0.192182] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c08ce7dc), AE_ALREADY_EXISTS [ 0.192983] ACPI Warning: Incorrect checksum in table [OEMB] - C0, should be B3 (20090903/tbutils-314) [ 0.193750] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c08ce7dc), AE_NOT_FOUND [ 0.194184] ACPI Warning: Incorrect checksum in table [OEMB] - C8, should be BF (20090903/tbutils-314) [ 0.194314] ACPI Warning: Incorrect checksum in table [OEMB] - AA, should be 9D (20090903/tbutils-314) [ 0.194554] ACPI Error: Method parse/execution failed [_PR_.CPU1._PDC] (Node f5821150), AE_INVALID_TABLE_LENGTH (20110112/psparse-536) [ 0.194701] ACPI Error: Method parse/execution failed [_PR_.CPU2._PDC] (Node f58211e0), AE_INVALID_TABLE_LENGTH (20110112/psparse-536) [ 0.194897] ACPI Warning: Incorrect checksum in table [OEMB] - 0xDD, should be 0xD6 (20100428/tbutils-314) [ 0.195685] ACPI Warning: Incorrect checksum in table [OEMB] - 2A, should be 29 (20090903/tbutils-314) [ 0.195754] ACPI Warning: Incorrect checksum in table [OEMB] - 88, should be 83 (20090903/tbutils-314) [ 0.196934] ACPI Warning: Incorrect checksum in table [OEMB] - 0B, should be 02 (20090903/tbutils-314) [ 0.197082] ACPI Warning: Incorrect checksum in table [ATKG] - 0xC8, should be 0xE5 (20100428/tbutils-314) [ 0.197413] ACPI Error: No handler for Region [EC__] (f701c5c8) [EmbeddedControl] (20100428/evregion-369) [ 0.197451] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SBRG.EC__._REG] (Node f701e2a0), AE_NOT_EXIST [ 0.198490] ACPI Warning: Incorrect checksum in table [OEMB] - 0xB2, should be 0x47 (20100428/tbutils-314) [ 0.198823] ACPI Warning: Incorrect checksum in table [OEMB] - 01, should be F4 (20090903/tbutils-314) [ 0.199360] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be AB 20090521 tbutils-246 [ 0.199465] ACPI Error: [CDW1] Namespace lookup failure, AE_NOT_FOUND (20110413/psargs-359) [ 0.199471] ACPI Error: Method parse/execution failed [_SB_._OSC] (Node ffff880138e2ea78), AE_NOT_FOUND (20110413/psparse-536) [ 0.200426] ACPI Warning: Incorrect checksum in table [OEMB] - A3, should be 9E (20090903/tbutils-314) [ 0.200744] ACPI Warning: Incorrect checksum in table [ASF!] - 59, should be 08 20090521 tbutils-246 [ 0.201013] ACPI Warning: Incorrect checksum in table [OEMB] - 8A, should be 7D (20090903/tbutils-314) [ 0.201466] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node f700e180), AE_INVALID_TABLE_LENGTH [ 0.203079] ACPI Warning: Incorrect checksum in table [OEMB] - 0xE1, should be 0xDC (20100428/tbutils-314) [ 0.204335] ACPI Warning: Incorrect checksum in table [OEMB] - 0xC1, should be 0x11 (20110413/tbutils-314) [ 0.204344] ACPI Warning: Incorrect checksum in table [ATKG] - 07, should be 59 (20090903/tbutils-314) [ 0.205365] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f5422e88), AE_ALREADY_EXISTS (20110413/psparse-536) [ 0.206075] ACPI Warning: Incorrect checksum in table [ATKG] - BB, should be E5 (20090903/tbutils-314) [ 0.207023] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be AB (20090903/tbutils-314) [ 0.208479] ACPI Warning: Incorrect checksum in table [OEMB] - 0x77, should be 0x72 (20100428/tbutils-314) [ 0.209105] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701f270), AE_NOT_FOUND [ 0.210543] ACPI Warning: Incorrect checksum in table [OEMB] - CD, should be CC (20090903/tbutils-314) [ 0.210667] ACPI Warning: Incorrect checksum in table [OEMB] - D3, should be C4 (20090903/tbutils-314) [ 0.211069] ACPI Warning: Incorrect checksum in table [OEMB] - 0x99, should be 0x92 (20100428/tbutils-314) [ 0.211113] ACPI Warning: Incorrect checksum in table [OEMB] - 7B, should be 76 (20090903/tbutils-314) [ 0.211904] ACPI Error: No handler for Region [ERAM] (ee422ed8) [EmbeddedControl] (20100428/evregion-369) [ 0.211928] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701fd08), AE_ALREADY_EXISTS [ 0.211938] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SBRG.EC0_._REG] (Node ee423708), AE_NOT_EXIST [ 0.212633] ACPI Warning: Incorrect checksum in table [OEMB] - E1, should be D3 (20090903/tbutils-314) [ 0.212815] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f7424eb8), AE_NOT_FOUND (20110112/psparse-536) [ 0.213084] ACPI Error (dsfield-0143): [CAPB] Namespace lookup failure, AE_ALREADY_EXISTS [ 0.213100] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7014ca8), AE_ALREADY_EXISTS [ 0.213771] ACPI Warning: Incorrect checksum in table [OEMB] - EC, should be E7 (20090903/tbutils-314) [ 0.213827] ACPI Warning: Package List length (0xC) larger than NumElements count (0x3), truncated [ 0.214423] ACPI Warning: Incorrect checksum in table [OEMB] - FD, should be EF (20090903/tbutils-314) [ 0.215632] ACPI Warning: Incorrect checksum in table [OEMB] - 0x0B, should be 0x5B (20100428/tbutils-314) [ 0.216249] ACPI Warning: Incorrect checksum in table [ATKG] - 0x27, should be 0xE5 (20110112/tbutils-314) [ 0.217060] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node dec13ca8), AE_ALREADY_EXISTS [ 0.217763] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7013030), AE_ALREADY_EXISTS [ 0.217957] ACPI Warning: Incorrect checksum in table [OEMB] - 69, should be 5F (20090903/tbutils-314) [ 0.218957] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701be88), AE_ALREADY_EXISTS [ 0.219691] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7013270), AE_NOT_FOUND [ 0.219959] ACPI Error: No handler for Region [SACS] (f70c52a8) [PCI_Config] (20090903/evregion-319) [ 0.219968] ACPI Error: Region PCI_Config(2) has no handler (20090903/exfldio-295) [ 0.219977] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D0._STA] (Node f701ba38), AE_NOT_EXIST [ 0.220034] ACPI Error (uteval-0250): Method execution failed [PRID.P_D0._STA] (Node f701ba38), AE_NOT_EXIST [ 0.220068] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D1._STA] (Node f701baf8), AE_NOT_EXIST [ 0.220107] ACPI Error (uteval-0250): Method execution failed [PRID.P_D1._STA] (Node f701baf8), AE_NOT_EXIST [ 0.220142] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D0._STA] (Node f701bc78), AE_NOT_EXIST [ 0.220180] ACPI Error (uteval-0250): Method execution failed [SECD.S_D0._STA] (Node f701bc78), AE_NOT_EXIST [ 0.220213] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D1._STA] (Node f701bd38), AE_NOT_EXIST [ 0.220252] ACPI Error (uteval-0250): Method execution failed [SECD.S_D1._STA] (Node f701bd38), AE_NOT_EXIST [ 0.221153] ACPI Error: Method parse/execution failed [_SB_.PCI0.HPET._CRS] (Node f402ae70), AE_NOT_FOUND (20110112/psparse-536) [ 0.221220] ACPI Error: Method parse/execution failed [_SB_.PCI0.RTC_._CRS] (Node f402aee8), AE_NOT_FOUND (20110112/psparse-536) [ 0.221945] mtrr: your CPUs had inconsistent MTRRdefType settings [ 0.222211] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701beb8), AE_ALREADY_EXISTS [ 0.222869] ACPI Warning: Incorrect checksum in table [ATKG] - B0, should be 4A (20090903/tbutils-314) [ 0.222980] ACPI Error: Field [I9MN] at 544 exceeds Buffer [IORT] size 464 (bits) (20090903/dsopcode-596) [ 0.222987] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.PMIO._CRS] (Node f7015900), AE_AML_BUFFER_LIMIT [ 0.223020] ACPI Error (uteval-0250): Method execution failed [_SB_.PCI0.LPC0.PMIO._CRS] (Node f7015900), AE_AML_BUFFER_LIMIT [ 0.223245] ACPI Warning: Incorrect checksum in table [OEMB] - DB, should be DA (20090903/tbutils-314) [ 0.223485] [Firmware Bug]: PCI: MMCONFIG at [mem 0xf0000000-0xf3ffffff] not reserved in ACPI motherboard resources [ 0.224289] ACPI Warning for _SB_.PCI0.P32_._PRT: Return Package has no elements (empty) (20100428/nspredef-456) [ 0.224569] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701fca8), AE_ALREADY_EXISTS [ 0.224987] ACPI Error: Field [ASSM] at 524320 exceeds Buffer [BUF0] size 688 (bits) (20100428/dsopcode-597) [ 0.224994] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.MEM_._CRS] (Node f7021990), AE_AML_BUFFER_LIMIT [ 0.225018] ACPI Error (uteval-0250): Method execution failed [_SB_.MEM_._CRS] (Node f7021990), AE_AML_BUFFER_LIMIT [ 0.226224] ACPI Warning: Incorrect checksum in table [ATKG] - 53, should be 84 (20090903/tbutils-314) [ 0.227129] ACPI Warning: Incorrect checksum in table [ATKG] - 0x11, should be 0xE5 (20100428/tbutils-314) [ 0.228032] ACPI Error (psargs-0359): [_PR_.C002._PPC] Namespace lookup failure, AE_NOT_FOUND [ 0.228041] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node f742a558), AE_NOT_FOUND [ 0.228469] [Firmware Bug]: the BIOS has corrupted hw-PMU resources (MSR 38d is 30) [ 0.228535] ACPI Warning: Incorrect checksum in table [OEMB] - 77, should be 6F (20100121/tbutils-314) [ 0.228773] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4025450), AE_NOT_FOUND (20110112/psparse-536) [ 0.229334] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7020750), AE_ALREADY_EXISTS [ 0.229639] ACPI Error (psargs-0359): [CDW1] Namespace lookup failure, AE_NOT_FOUND [ 0.229644] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7413270), AE_NOT_FOUND [ 0.230075] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7014630), AE_ALREADY_EXISTS [ 0.231134] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7012f00), AE_NOT_FOUND [ 0.232350] ACPI Warning: Incorrect checksum in table [ATKG] - 15, should be 73 (20090903/tbutils-314) [ 0.232460] ACPI Warning: Incorrect checksum in table [OEMB] - 8C, should be 87 (20090903/tbutils-314) [ 0.232733] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701ebd0), AE_ALREADY_EXISTS [ 0.232830] ACPI Warning: Incorrect checksum in table [OEMB] - 0xC2, should be 0x84 (20100428/tbutils-314) [ 0.233493] ACPI Warning: Incorrect checksum in table [GSCI] - 58, should be AA (20090903/tbutils-314) [ 0.233542] ACPI Warning: Incorrect checksum in table [GSCI] - 0x70, should be 0xD2 (20100428/tbutils-314) [ 0.233946] ACPI Warning: Incorrect checksum in table [ATKG] - 1E, should be E5 (20090903/tbutils-314) [ 0.235518] ACPI Warning: Incorrect checksum in table [ASF!] - D8, should be 6E (20090903/tbutils-314) [ 0.236465] ACPI Warning: Incorrect checksum in table [OEMB] - 1D, should be 10 (20090903/tbutils-314) [ 0.236739] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f3c24f00), AE_NOT_FOUND (20110112/psparse-536) [ 0.241360] ACPI Warning: Incorrect checksum in table [OEMB] - 0xBD, should be 0x89 (20100428/tbutils-314) [ 0.242473] ACPI Warning: Incorrect checksum in table [GSCI] - 0x28, should be 0x8A (20100428/tbutils-314) [ 0.244995] ACPI Warning: Incorrect checksum in table [OEMB] - 17, should be 67 (20090903/tbutils-314) [ 0.245794] ACPI Warning for _SB_.PCI0.PCIB._PRT: Return type mismatch - found Integer, expected Package (20100428/nspredef-1053) [ 0.245810] ACPI Error (uteval-0307): Return object type is incorrect [_SB_.PCI0.PCIB._PRT] (Node f7022c48), AE_TYPE [ 0.245830] ACPI Error: Type returned from _PRT was incorrect: Integer, expected Btypes: 0x8 (20100428/uteval-313) [ 0.246137] ACPI Warning: Incorrect checksum in table [ATKG] - F1, should be E5 (20090903/tbutils-314) [ 0.249246] ACPI Warning: Incorrect checksum in table [OEMB] - 70, should be 6D (20090903/tbutils-314) [ 0.249570] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._OSC] (Node f7010198), AE_ALREADY_EXISTS [ 0.249594] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node f7010180), AE_ALREADY_EXISTS [ 0.249860] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._OSC] (Node f7010270), AE_ALREADY_EXISTS [ 0.249882] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PDC] (Node f7010258), AE_ALREADY_EXISTS [ 0.250005] ACPI Error: No handler for Region [EC__] (f4424bd0) [EmbeddedControl] (20110112/evregion-369) [ 0.250012] ACPI Error: Region EmbeddedControl(0x3) has no handler (20110112/exfldio-292) [ 0.250019] ACPI Error: Method parse/execution failed [_SB_.PCI0.SBRG.EC__._REG] (Node f4425bb8), AE_NOT_EXIST (20110112/psparse-536) [ 0.250572] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7010e88), AE_ALREADY_EXISTS [ 0.250864] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7013e58), AE_ALREADY_EXISTS [ 0.250941] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4022e88), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.250986] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query honored via DMI [ 0.251711] ACPI Warning: Incorrect checksum in table [ATKG] - B0, should be E5 (20090903/tbutils-314) [ 0.254947] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f3c22e88), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.255884] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f70142b8), AE_ALREADY_EXISTS [ 0.256141] ACPI Warning: Incorrect checksum in table [ATKG] - 0xAF, should be 0x59 (20110413/tbutils-314) [ 0.257910] ACPI Warning: Incorrect checksum in table [OEMB] - 04, should be 54 (20090903/tbutils-314) [ 0.261013] ACPI Warning: Incorrect checksum in table [OEMB] - DF, should be 2F (20090903/tbutils-314) [ 0.262586] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701f390), AE_ALREADY_EXISTS [ 0.262663] pci 0000:00:1f.0: [Firmware Bug]: TigerPoint LPC.BM_STS cleared [ 0.264838] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701f2a0), AE_ALREADY_EXISTS [ 0.265119] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c08d5804), AE_NOT_FOUND [ 0.265541] ACPI Warning: Incorrect checksum in table [OEMB] - E0, should be 30 (20090903/tbutils-314) [ 0.266577] ACPI Warning: Incorrect checksum in table [GSCI] - 3B, should be BF (20090903/tbutils-314) [ 0.267893] ACPI Warning for _TZ_.TZ01._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference (20090903/nspredef-1012) [ 0.268093] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c0927024), AE_NOT_FOUND [ 0.268171] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c0927024), AE_ALREADY_EXISTS [ 0.268458] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f70142a0), AE_ALREADY_EXISTS [ 0.269488] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1.APCT] (Node ffff88007af30560), AE_NO_MEMORY [ 0.269534] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1.GCAP] (Node ffff88007af30540), AE_NO_MEMORY [ 0.269576] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node ffff88007af30500), AE_NO_MEMORY [ 0.272427] ACPI Error: No handler for Region [SACS] (f71004d8) [PCI_Config] (20090903/evregion-319) [ 0.272435] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D0._STA] (Node f7102150), AE_NOT_EXIST [ 0.272452] ACPI Error (uteval-0250): Method execution failed [PRID.P_D0._STA] (Node f7102150), AE_NOT_EXIST [ 0.272469] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D1._STA] (Node f71021f8), AE_NOT_EXIST [ 0.272486] ACPI Error (uteval-0250): Method execution failed [PRID.P_D1._STA] (Node f71021f8), AE_NOT_EXIST [ 0.272503] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D0._STA] (Node f7102360), AE_NOT_EXIST [ 0.272519] ACPI Error (uteval-0250): Method execution failed [SECD.S_D0._STA] (Node f7102360), AE_NOT_EXIST [ 0.272536] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D1._STA] (Node f7102408), AE_NOT_EXIST [ 0.272552] ACPI Error (uteval-0250): Method execution failed [SECD.S_D1._STA] (Node f7102408), AE_NOT_EXIST [ 0.279154] ACPI Warning: Incorrect checksum in table [OEMB] - B9, should be AE (20090903/tbutils-314) [ 0.284552] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.IDE1.GTM_] (Node f7014858), AE_AML_PACKAGE_LIMIT [ 0.284566] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.IDE1.CHN1._GTM] (Node f7014798), AE_AML_PACKAGE_LIMIT [ 0.285468] ACPI Error (psargs-0359): [_PR_.CPU0._PPC] Namespace lookup failure, AE_NOT_FOUND [ 0.285476] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.ADP0.ADJP] (Node f7015b10), AE_NOT_FOUND [ 0.285546] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.ADP0._PSR] (Node f7015ae0), AE_NOT_FOUND [ 0.288180] ACPI Warning: Incorrect checksum in table [ATKG] - 0x81, should be 0x59 (20110112/tbutils-314) [ 0.288591] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701fd50), AE_ALREADY_EXISTS [ 0.288966] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f34245b8), AE_NOT_FOUND (20110112/psparse-536) [ 0.296054] [Firmware Bug]: Invalid critical threshold (0) [ 0.296149] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701eca8), AE_ALREADY_EXISTS [ 0.296644] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node ffff88012fc16660), AE_NOT_FOUND [ 0.302946] ACPI Error (psargs-0359): [HPTF] Namespace lookup failure, AE_NOT_FOUND [ 0.302952] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.HPET._STA] (Node ffff88007db32200), AE_NOT_FOUND [ 0.307009] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4c22e88), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.307757] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.CHN0._GTM] (Node f74145a0), AE_NOT_FOUND [ 0.307837] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.CHN1._GTM] (Node f7414690), AE_NOT_FOUND [ 0.308095] ACPI Warning: Incorrect checksum in table [SSDT] - 1F, should be 7F (20090903/tbutils-314) [ 0.308151] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node f7414cd8), AE_NOT_FOUND [ 0.308213] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node f7414dc8), AE_NOT_FOUND [ 0.310609] ACPI Warning for _PR_.CPU1._PSS: SubPackage[8,9] - suspicious power dissipation values (20100428/nsrepair2-403) [ 0.310767] ACPI Warning: Incorrect checksum in table [OEMB] - 0x72, should be 0x6A (20100428/tbutils-314) [ 0.311025] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4c250d8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.311041] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f54250d8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.311335] ACPI Warning for _PR_.CPU2._PSS: SubPackage[8,9] - suspicious power dissipation values (20100428/nsrepair2-403) [ 0.311729] ACPI Error: Could not enable PowerButton event (20090903/evxfevnt-193) [ 0.311932] ACPI Warning: Could not enable fixed event 2 (20090903/evxface-146) [ 0.314160] ACPI Warning: Incorrect checksum in table [OEMB] - 91, should be 90 (20090903/tbutils-314) [ 0.314451] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a2b040), AE_ALREADY_EXISTS [ 0.314603] ACPI Warning: Incorrect checksum in table [OEMB] - 8B, should be 8A (20090903/tbutils-314) [ 0.314675] mtrr: your CPUs had inconsistent variable MTRR settings [ 0.316718] ACPI Warning: Incorrect checksum in table [OEMB] - 27, should be 22 (20090903/tbutils-314) [ 0.316734] ACPI Warning: Incorrect checksum in table [TAMG] - 0xF3, should be 0xF2 (20100428/tbutils-314) [ 0.316816] ACPI Error: No handler for Region [ERAM] (ffff88007a733d80) [EmbeddedControl] (20110112/evregion-369) [ 0.316829] ACPI Error: Method parse/execution failed [_SB_.HTEV] (Node ffff88007a730780), AE_NOT_EXIST (20110112/psparse-536) [ 0.316839] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node ffff88007a73a078), AE_NOT_EXIST (20110112/psparse-536) [ 0.317152] ACPI Warning: Incorrect checksum in table [OEMB] - C1, should be B4 (20090903/tbutils-314) [ 0.317427] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node ffff88007d735160), AE_ALREADY_EXISTS [ 0.317685] ACPI Warning: Incorrect checksum in table [ASF!] - 0xFC, should be 0x98 (20100428/tbutils-314) [ 0.319223] ACPI Warning: Incorrect checksum in table [OEMB] - E7, should be E2 (20090903/tbutils-314) [ 0.321587] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a12040), AE_NOT_FOUND [ 0.321722] ACPI Error: Needed type [Reference], found [Device] ffff88007552b900 (20100428/exresop-104) [ 0.321740] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff880075532ba0), AE_AML_OPERAND_TYPE [ 0.322869] ACPI Error: No handler for Region [RAM_] (f7425690) [EmbeddedControl] (20110112/evregion-369) [ 0.322886] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPCB.SNC_.SBRT] (Node f7435228), AE_NOT_EXIST (20110112/psparse-536) [ 0.322899] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node f7428d98), AE_NOT_EXIST (20110112/psparse-536) [ 0.323465] ACPI Warning: Incorrect checksum in table [OEMB] - 0x8D, should be 0x8C (20100428/tbutils-314) [ 0.323777] ACPI Warning: Package List length (0xC) larger than NumElements count (0x4), truncated [ 0.325321] ACPI Error: No handler for Region [ERAM] (ffff88007d32bf78) [EmbeddedControl] (20090903/evregion-319) [ 0.325334] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.KBC0.SMWR] (Node ffff88007d32c8c0), AE_NOT_EXIST [ 0.325357] ACPI Error (psparse-0537): Method parse/execution failed [_TZ_.THRM.SFAN] (Node ffff88007d328ec0), AE_NOT_EXIST [ 0.325376] ACPI Error (psparse-0537): Method parse/execution failed [_TZ_.THRM.THCK] (Node ffff88007d328f40), AE_NOT_EXIST [ 0.325396] ACPI Error (psparse-0537): Method parse/execution failed [_GPE._L02] (Node ffff88007d3289c0), AE_NOT_EXIST [ 0.325630] ACPI Error: Could not enable SleepButton event (20100428/evxfevnt-202) [ 0.325636] ACPI Warning: Could not enable fixed event 0x3 (20100428/evxface-146) [ 0.328929] ACPI Warning: Incorrect checksum in table [OEMB] - 0x45, should be 0x40 (20100428/tbutils-314) [ 0.328954] ACPI Warning: Incorrect checksum in table [ASF!] - D9, should be 6D (20090903/tbutils-314) [ 0.329218] ACPI Warning for _SB_.PCI0._OSC: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) [ 0.329373] ACPI Error (dsfield-0143): [CAPD] Namespace lookup failure, AE_ALREADY_EXISTS [ 0.329378] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88012b63d760), AE_ALREADY_EXISTS [ 0.330000] ACPI Warning: Incorrect checksum in table [TCPA] - 0xD1, should be 0x75 (20100428/tbutils-314) [ 0.330140] ACPI Warning: Incorrect checksum in table [ATKG] - 0xE3, should be 0xDC (20110112/tbutils-314) [ 0.330280] ACPI Warning: Incorrect checksum in table [OEMB] - DE, should be D9 (20090903/tbutils-314) [ 0.330488] ACPI Error: No handler for Region [SACS] (ffff88011bf101f8) [PCI_Config] (20090903/evregion-319) [ 0.330496] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D0._STA] (Node ffff88011bf0d360), AE_NOT_EXIST [ 0.330513] ACPI Error (uteval-0250): Method execution failed [PRID.P_D0._STA] (Node ffff88011bf0d360), AE_NOT_EXIST [ 0.330528] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D1._STA] (Node ffff88011bf0d460), AE_NOT_EXIST [ 0.330545] ACPI Error (uteval-0250): Method execution failed [PRID.P_D1._STA] (Node ffff88011bf0d460), AE_NOT_EXIST [ 0.330560] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D0._STA] (Node ffff88011bf0d660), AE_NOT_EXIST [ 0.330576] ACPI Error (uteval-0250): Method execution failed [SECD.S_D0._STA] (Node ffff88011bf0d660), AE_NOT_EXIST [ 0.330590] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D1._STA] (Node ffff88011bf0d760), AE_NOT_EXIST [ 0.330606] ACPI Error (uteval-0250): Method execution failed [SECD.S_D1._STA] (Node ffff88011bf0d760), AE_NOT_EXIST [ 0.330759] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88011763c000), AE_ALREADY_EXISTS [ 0.330793] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x9A (20110112/tbutils-314) [ 0.331637] ACPI Error: Needed type [Reference], found [Device] ffff88014b82d820 (20090903/exresop-104) [ 0.331653] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88014b83cac0), AE_AML_OPERAND_TYPE [ 0.331820] ACPI Error: Needed type [Reference], found [Device] ffff8800379aa900 (20100428/exresop-104) [ 0.331838] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff8800379bbba0), AE_AML_OPERAND_TYPE [ 0.331948] ACPI Warning: Incorrect checksum in table [OEMB] - 0C, should be 0B (20090903/tbutils-314) [ 0.332160] ACPI Error (dswload-0677): [PCI0] Namespace lookup failure, AE_NOT_FOUND [ 0.332167] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81cf5eb0), AE_NOT_FOUND [ 0.333155] ACPI Warning: Incorrect checksum in table [SSDT] - 4A, should be D9 (20090903/tbutils-314) [ 0.333287] ACPI Error: No handler for Region [ERAM] (ffff8800bc638d80) [EmbeddedControl] (20090903/evregion-319) [ 0.333300] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.HTEV] (Node ffff8800bc62e600), AE_NOT_EXIST [ 0.333326] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node ffff8800bc63e9a0), AE_NOT_EXIST [ 0.333559] ACPI Error: No handler for Region [ERAM] (ffff88007db2ad80) [EmbeddedControl] (20090903/evregion-319) [ 0.333573] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.HTEV] (Node ffff88007db28600), AE_NOT_EXIST [ 0.333591] ACPI Warning: Incorrect checksum in table [TAMG] - 0xF4, should be 0xF3 (20110112/tbutils-314) [ 0.333601] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node ffff88007db309a0), AE_NOT_EXIST [ 0.333734] ACPI Warning for _SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20090903/nspredef-336) [ 0.333765] ACPI Error (psargs-0359): [FZHD] Namespace lookup failure, AE_NOT_FOUND [ 0.333771] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.CHN0._GTM] (Node f7014300), AE_NOT_FOUND [ 0.333853] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.CHN1._GTM] (Node f70143f0), AE_NOT_FOUND [ 0.334143] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node f7014a38), AE_NOT_FOUND [ 0.334206] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node f7014b28), AE_NOT_FOUND [ 0.335658] ACPI Error: No handler for Region [ECOR] (ffff88007af355e8) [EmbeddedControl] (20110413/evregion-373) [ 0.335698] ACPI Error: Method parse/execution failed [_SB_.PCI0.SBRG.EC0_._REG] (Node ffff88007af36730), AE_NOT_EXIST (20110413/psparse-536) [ 0.335745] ACPI Warning: Incorrect checksum in table [OEMB] - 80, should be 78 (20090903/tbutils-314) [ 0.337368] ACPI Warning: Incorrect checksum in table [OEMB] - 8B, should be 86 (20090903/tbutils-314) [ 0.337513] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f54243f0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.337662] ACPI Error (psargs-0359): [URES] Namespace lookup failure, AE_NOT_FOUND [ 0.337662] ACPI Error (psparse-0537): Method parse/execution failed [_PSW] (Node f701f0a8), AE_NOT_FOUND [ 0.338155] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88021302db60), AE_ALREADY_EXISTS [ 0.338440] ACPI Error: No handler for Region [SACS] (ffff88012bb0f1f8) [PCI_Config] (20090903/evregion-319) [ 0.338717] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D0._STA] (Node ffff88012bb111a0), AE_NOT_EXIST [ 0.338801] ACPI Warning: Incorrect checksum in table [OEMB] - 8B, should be 7E (20090903/tbutils-314) [ 0.338905] ACPI Error (uteval-0250): Method execution failed [PRID.P_D0._STA] (Node ffff88012bb111a0), AE_NOT_EXIST [ 0.339363] ACPI Error (psparse-0537): Method parse/execution failed [PRID.P_D1._STA] (Node ffff88012bb11280), AE_NOT_EXIST [ 0.339551] ACPI Error (uteval-0250): Method execution failed [PRID.P_D1._STA] (Node ffff88012bb11280), AE_NOT_EXIST [ 0.339584] ACPI Warning: Incorrect checksum in table [OEMB] - 0xE2, should be 0xD5 (20100428/tbutils-314) [ 0.339628] ACPI Warning: Incorrect checksum in table [OEMB] - 91, should be 88 (20090903/tbutils-314) [ 0.339857] ACPI Warning: Incorrect checksum in table [OEMB] - 6D, should be 60 (20090903/tbutils-314) [ 0.340003] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D0._STA] (Node ffff88012bb11460), AE_NOT_EXIST [ 0.340121] ACPI Warning: Incorrect checksum in table [ATKG] - 0x1B, should be 0xE5 (20110112/tbutils-314) [ 0.340193] ACPI Error (uteval-0250): Method execution failed [SECD.S_D0._STA] (Node ffff88012bb11460), AE_NOT_EXIST [ 0.340651] ACPI Error (psparse-0537): Method parse/execution failed [SECD.S_D1._STA] (Node ffff88012bb11540), AE_NOT_EXIST [ 0.340838] ACPI Error (uteval-0250): Method execution failed [SECD.S_D1._STA] (Node ffff88012bb11540), AE_NOT_EXIST [ 0.341276] ACPI Warning: Incorrect checksum in table [ASF!] - F2, should be 8D (20090903/tbutils-314) [ 0.341759] ACPI Error: No handler for Region [RAM_] (f74212f8) [EmbeddedControl] (20100428/evregion-369) [ 0.341812] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._OSC] (Node ffff88017bc14660), AE_ALREADY_EXISTS [ 0.341843] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node ffff88017bc14640), AE_ALREADY_EXISTS [ 0.342116] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.SNC_.SBRT] (Node f742f228), AE_NOT_EXIST [ 0.342130] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._OSC] (Node ffff88017bc14780), AE_ALREADY_EXISTS [ 0.342160] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PDC] (Node ffff88017bc14760), AE_ALREADY_EXISTS [ 0.342409] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node f7422d98), AE_NOT_EXIST [ 0.342985] ACPI Warning: Incorrect checksum in table [OEMB] - 18, should be 13 (20090903/tbutils-314) [ 0.343577] ACPI Warning: Incorrect checksum in table [OEMB] - 0xD1, should be 0xCA (20100428/tbutils-314) [ 0.344373] ACPI Warning: Incorrect checksum in table [OEMB] - C5, should be B8 (20090903/tbutils-314) [ 0.345244] ACPI Warning: Incorrect checksum in table [OEMB] - 0xA5, should be 0x9C (20100428/tbutils-314) [ 0.346079] ACPI Warning: Incorrect checksum in table [OEMB] - 7A, should be 71 (20090903/tbutils-314) [ 0.347557] ACPI Warning for _TZ_.THRM._PSL: Return Package type mismatch at index 0 - found [NULL Object Descriptor], expected Reference (20100428/nspredef-1059) [ 0.347883] ACPI Warning: Incorrect checksum in table [OEMB] - 5C, should be 53 (20090903/tbutils-314) [ 0.348936] ACPI Warning: Incorrect checksum in table [OEMB] - 0x56, should be 0x49 (20100428/tbutils-314) [ 0.349163] ACPI Warning: Incorrect checksum in table [OEMB] - E7, should be DA (20090903/tbutils-314) [ 0.350013] ACPI Warning: Incorrect checksum in table [OEMB] - D3, should be C6 (20090903/tbutils-314) [ 0.350096] ACPI Warning: Incorrect checksum in table [ATKG] - 13, should be 53 (20090903/tbutils-314) [ 0.350158] ACPI Warning: Incorrect checksum in table [ATKG] - 0x13, should be 0xC8 (20110112/tbutils-314) [ 0.350335] ACPI Warning: Incorrect checksum in table [SSDT] - 0x83, should be 0x37 (20110112/tbutils-314) [ 0.350784] ACPI Warning: Incorrect checksum in table [iEIT] - 0x5C, should be 0x51 (20100428/tbutils-314) [ 0.351065] ACPI Warning: Incorrect checksum in table [SSDT] - 0x04, should be 0xCA (20110112/tbutils-314) [ 0.353198] ACPI Error: No handler for Region [ERAM] (ffff88013be53e10) [EmbeddedControl] (20090903/evregion-319) [ 0.353215] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SBRG.EC0_._REG] (Node ffff88013be520e0), AE_NOT_EXIST [ 0.353356] ACPI Warning: Incorrect checksum in table [ATKG] - 0x05, should be 0x36 (20100428/tbutils-314) [ 0.353401] ACPI Warning for _SB_.LATA._CRS: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) [ 0.353406] ACPI Error (uteval-0307): Return object type is incorrect [_SB_.LATA._CRS] (Node ffff88006df2eb00), AE_TYPE [ 0.353652] ACPI Error: Needed type [Reference], found [Device] ffff8800379a6800 (20090903/exresop-104) [ 0.353652] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff8800379bba80), AE_AML_OPERAND_TYPE [ 0.355135] ACPI Error: Method parse/execution failed [_PR_.CPU0._PDC] (Node ffff88007a738ca8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.355798] ACPI Error: ACPI path has too many parent prefixes (^) - reached beyond root node (20090903/nsaccess-429) [ 0.356001] ..MP-BIOS bug: 8254 timer not connected to IO-APIC [ 0.356108] ACPI Error: No handler for Region [ECF2] (ffff88013ba313a8) [EmbeddedControl] (20090903/evregion-319) [ 0.356113] ACPI Error: Region EmbeddedControl(3) has no handler (20090903/exfldio-295) [ 0.356119] ACPI Error (psparse-0537): Method parse/execution failed [P8XH] (Node ffff88013ba28020), AE_NOT_EXIST [ 0.356143] ACPI Error (psparse-0537): Method parse/execution failed [_GPE._L02] (Node ffff88013ba32120), AE_NOT_EXIST [ 0.356280] ACPI Warning: Incorrect checksum in table [TCPA] - 0x33, should be 0xD7 (20100428/tbutils-314) [ 0.356754] ACPI Warning: Incorrect checksum in table [ASF!] - ED, should be 83 (20090903/tbutils-314) [ 0.357018] ACPI Warning: Incorrect checksum in table [OEMB] - 0xA6, should be 0xA1 (20100428/tbutils-314) [ 0.357902] ACPI Warning: Incorrect checksum in table [ATKG] - 0xE9, should be 0xFE (20110112/tbutils-314) [ 0.358086] ACPI Warning: Incorrect checksum in table [OEMB] - 0x11, should be 0x10 (20100428/tbutils-314) [ 0.359183] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7021a68), AE_ALREADY_EXISTS [ 0.359915] ACPI Warning: Incorrect checksum in table [ATKG] - 0x7D, should be 0x59 (20110112/tbutils-314) [ 0.360335] ACPI Warning: Incorrect checksum in table [GSCI] - 0x28, should be 0xD4 (20110112/tbutils-314) [ 0.361596] ACPI Error: ACPI path has too many parent prefixes (^) - reached beyond root node (20100428/nsaccess-429) [ 0.362481] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c091bffc), AE_NOT_FOUND [ 0.362557] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c091bffc), AE_ALREADY_EXISTS [ 0.362606] ACPI Error (dsfield-0487): [SMIC] Namespace lookup failure, AE_ALREADY_EXISTS [ 0.362751] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f40255d0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.362859] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query honored via cmdline [ 0.362870] ACPI Error (dsfield-0140): [CAPB] Namespace lookup failure, AE_ALREADY_EXISTS [ 0.362886] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7014a80), AE_ALREADY_EXISTS [ 0.363488] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node ffff880227048f60), AE_ALREADY_EXISTS [ 0.363621] ACPI Warning: Incorrect checksum in table [OEMB] - 3C, should be 3B 20090521 tbutils-246 [ 0.363728] ACPI Warning: Incorrect checksum in table [OEMB] - 75, should be 74 (20090903/tbutils-314) [ 0.363981] ACPI Warning: Incorrect checksum in table [OEMB] - BB, should be AE (20090903/tbutils-314) [ 0.364356] ACPI Warning: For _SB_.PCI0.P2P_._PRT: Return Package has no elements (empty) (20110112/nspredef-456) [ 0.364521] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f44285b8), AE_ALREADY_EXISTS (20110413/psparse-536) [ 0.366917] ACPI Warning: Incorrect checksum in table [OEMB] - BD, should be B6 (20090903/tbutils-314) [ 0.367185] ACPI Warning: Incorrect checksum in table [OEMB] - B2, should be A5 (20090903/tbutils-314) [ 0.367524] ACPI Warning: Incorrect checksum in table [ATKG] - 0xAA, should be 0x59 (20100428/tbutils-314) [ 0.368838] ACPI Warning: Incorrect checksum in table [OEMB] - 23, should be 1E (20090903/tbutils-314) [ 0.369986] ACPI Warning: Incorrect checksum in table [OEMB] - 0x61, should be 0x58 (20100428/tbutils-314) [ 0.370263] ACPI Warning: Incorrect checksum in table [ATKG] - 0x73, should be 0xE5 (20110112/tbutils-314) [ 0.371572] ACPI Warning: Incorrect checksum in table [ATKG] - 0xFB, should be 0xE5 (20100428/tbutils-314) [ 0.372475] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f5426ca8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.372684] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node dd825ca8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.375383] ACPI Warning: Incorrect checksum in table [OEMB] - 0x90, should be 0x83 (20100428/tbutils-314) [ 0.375585] ACPI Error (dswload-0677): [USB0] Namespace lookup failure, AE_NOT_FOUND [ 0.375609] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c09fb6c8), AE_NOT_FOUND [ 0.375966] ACPI Error (psparse-0537): Method parse/execution failed [] (Node c0992f7c), AE_NOT_FOUND [ 0.376047] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node dd825ca8), AE_ALREADY_EXISTS (20110413/psparse-536) [ 0.376092] ACPI Error: No handler for Region [ECXP] (ffff88007cf31ab0) [EmbeddedControl] (20100428/evregion-369) [ 0.376106] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._OSC] (Node ffff88007cf3f440), AE_NOT_EXIST [ 0.376141] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PDC] (Node ffff88007cf3f420), AE_NOT_EXIST [ 0.376733] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f5026ca8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.378931] ACPI Warning: Incorrect checksum in table [OEMB] - 33, should be 2C (20090903/tbutils-314) [ 0.379815] ACPI Warning: Incorrect checksum in table [SSDT] - D5, should be 3E (20090903/tbutils-314) [ 0.380609] ACPI Warning: Incorrect checksum in table [SSDT] - 8C, should be DC (20090903/tbutils-314) [ 0.381039] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7016a38), AE_ALREADY_EXISTS [ 0.381211] ACPI Warning: Incorrect checksum in table [OEMB] - 8E, should be 89 (20090903/tbutils-314) [ 0.381478] [Firmware Bug]: PCI: MMCONFIG at [mem 0xe0000000-0xe06fffff] not reserved in ACPI motherboard resources [ 0.382740] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node ffff88003f013ca0), AE_NOT_FOUND [ 0.383518] ACPI Warning: Incorrect checksum in table [ATKG] - 0x0F, should be 0xE7 (20100428/tbutils-314) [ 0.384684] ACPI Warning: Incorrect checksum in table [OEMB] - 0x4E, should be 0x3F (20100428/tbutils-314) [ 0.384722] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.HPET._CRS] (Node ffff88007db32220), AE_NOT_FOUND [ 0.384811] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.RTC_._CRS] (Node ffff88007db322c0), AE_NOT_FOUND [ 0.385777] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 89 (20090903/tbutils-314) [ 0.388556] ACPI Warning: Incorrect checksum in table [ATKG] - 6A, should be E5 (20090903/tbutils-314) [ 0.388736] ACPI Warning: Incorrect checksum in table [OEMB] - 8C, should be 83 (20090903/tbutils-314) [ 0.390341] ACPI Error: [GUR_._BAS] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 0.390354] ACPI Error: Method parse/execution failed [_SB_.PCI0.MBIO._CRS] (Node ffff880078f30aa0), AE_NOT_FOUND (20110112/psparse-536) [ 0.390975] [Firmware Bug]: PCI: MMCONFIG at [mem 0xe0000000-0xe08fffff] not reserved in ACPI motherboard resources [ 0.393086] ACPI Warning: For _TZ_.THRM._PSL: Return Package has no elements (empty) (20110413/nspredef-456) [ 0.395834] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88013ba393a0), AE_NOT_FOUND [ 0.396197] [Firmware Bug]: ACPI: Invalid BIOS _PSS frequency: 0x0 MHz [ 0.396945] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 96 (20090903/tbutils-314) [ 0.397644] ACPI Warning: Incorrect checksum in table [ATKG] - F9, should be E5 (20090903/tbutils-314) [ 0.398231] ACPI Warning: Incorrect checksum in table [ATKG] - 12, should be 07 (20090903/tbutils-314) [ 0.398290] ACPI Warning: Incorrect checksum in table [ATKG] - 01, should be 23 (20090903/tbutils-314) [ 0.399990] ACPI Error: Field [ASSM] at 524320 exceeds Buffer [BUF0] size 688 (bits) (20110112/dsopcode-597) [ 0.399996] ACPI Error: Method parse/execution failed [_SB_.MEM_._CRS] (Node ffff8800b8e38000), AE_AML_BUFFER_LIMIT (20110112/psparse-536) [ 0.400012] ACPI Error: Method execution failed [_SB_.MEM_._CRS] (Node ffff8800b8e38000), AE_AML_BUFFER_LIMIT (20110112/uteval-103) [ 0.400212] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x88 (20110112/tbutils-314) [ 0.401117] ACPI Warning: Incorrect checksum in table [ATKG] - 0F, should be E7 (20090903/tbutils-314) [ 0.404616] ACPI Warning: Incorrect checksum in table [OEMB] - A5, should be A0 (20090903/tbutils-314) [ 0.406016] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.ADP0.ADJP] (Node ffff88013ba3c5a0), AE_NOT_FOUND [ 0.406038] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.ADP0._PSR] (Node ffff88013ba3c560), AE_NOT_FOUND [ 0.407719] ACPI Warning: Incorrect checksum in table [OEMB] - 72, should be 69 (20090903/tbutils-314) [ 0.408529] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4c285b8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.414781] ACPI Warning: Incorrect checksum in table [OEMB] - CD, should be C8 (20090903/tbutils-314) [ 0.415975] ACPI Warning for _TZ_.THRM._PSL: Return Package type mismatch at index 0 - found [NULL Object Descriptor], expected Reference (20090903/nspredef-1012) [ 0.418105] ACPI Warning: Incorrect checksum in table [ATKG] - 76, should be FE (20090903/tbutils-314) [ 0.420210] ACPI Error: [CAPD] Namespace lookup failure, AE_ALREADY_EXISTS (20110413/dsfield-143) [ 0.420218] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88022b749b18), AE_ALREADY_EXISTS (20110413/psparse-536) [ 0.420241] ACPI Error: Field [I9MN] at 544 exceeds Buffer [IORT] size 464 (bits) (20100428/dsopcode-597) [ 0.420248] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.PMIO._CRS] (Node ffff88013142fac0), AE_AML_BUFFER_LIMIT [ 0.420284] ACPI Error (uteval-0250): Method execution failed [_SB_.PCI0.LPC0.PMIO._CRS] (Node ffff88013142fac0), AE_AML_BUFFER_LIMIT [ 0.420323] ACPI Warning: Incorrect checksum in table [ATKG] - 0xC3, should be 0x59 (20110112/tbutils-314) [ 0.422032] ACPI Warning (dsobject-0501): Package List length (6) larger than NumElements count (3), truncated [ 0.424909] ACPI Warning for _SB_.PCI0.P2P_._PRT: Return Package has no elements (empty) (20100428/nspredef-456) [ 0.426823] ACPI Error (psargs-0359): [_PR_.CPU0._PSS] Namespace lookup failure, AE_NOT_FOUND [ 0.426833] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__.ADJP] (Node ffff88007b32ee00), AE_NOT_FOUND [ 0.426872] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node ffff88007b32edc0), AE_NOT_FOUND [ 0.429245] ACPI Warning for _PR_.CPU0._TSD: Incorrectly formed Package, attempting repair (20090903/nsrepair-200) [ 0.430887] ACPI Warning for _PR_.CPU1._TSD: Incorrectly formed Package, attempting repair (20090903/nsrepair-200) [ 0.434593] ACPI Warning: Incorrect checksum in table [GSCI] - D2, should be A5 (20090903/tbutils-314) [ 0.436921] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88013b62ccc0), AE_NOT_FOUND [ 0.438019] ACPI Warning: Incorrect checksum in table [ATKG] - C8, should be E5 (20090903/tbutils-314) [ 0.440405] ACPI Warning for _SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.441805] ACPI Warning: Incorrect checksum in table [OEMB] - B2, should be B1 (20090903/tbutils-314) [ 0.444897] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4c252a0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.450562] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff8800b8e33ca8), AE_NOT_FOUND (20110112/psparse-536) [ 0.451517] ACPI Error (psargs-0359): [GUR_._BAS] Namespace lookup failure, AE_NOT_FOUND [ 0.451682] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.MBIO._CRS] (Node ffff88007bb2a880), AE_NOT_FOUND [ 0.453111] ACPI Warning for _SB_.BAT1._BIF: Return Package type mismatch at index 12 - found Integer, expected String/Buffer (20090903/nspredef-1012) [ 0.454555] ACPI Warning for _PR_.CPU0._PSS: Return Package type mismatch at index 3 - found Integer, expected Package (20100428/nspredef-1059) [ 0.454838] ACPI Warning for _PR_.CPU1._PSS: Return Package type mismatch at index 3 - found Integer, expected Package (20100428/nspredef-1059) [ 0.455674] ACPI Warning: Incorrect checksum in table [SSDT] - 83, should be 7F (20090903/tbutils-314) [ 0.459126] ACPI Warning: Incorrect checksum in table [SSDT] - 4C, should be 12 (20090903/tbutils-314) [ 0.460622] ACPI Warning: For _SB_.PCI0.P32_._PRT: Return Package has no elements (empty) (20110112/nspredef-456) [ 0.461767] ACPI Error: [CAPB] Namespace lookup failure, AE_ALREADY_EXISTS (20110413/dsfield-143) [ 0.461793] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88003cdb0f00), AE_ALREADY_EXISTS (20110413/psparse-536) [ 0.462573] ACPI Warning: Incorrect checksum in table [OEMB] - 95, should be 5E 20090521 tbutils-246 [ 0.468216] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._CST] (Node ffff88007c5cc380), AE_NOT_FOUND [ 0.468859] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88003f1afdc0), AE_ALREADY_EXISTS [ 0.475076] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.CHN0._GTM] (Node f701eb28), AE_NOT_FOUND [ 0.475159] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.CHN1._GTM] (Node f701ec18), AE_NOT_FOUND [ 0.475441] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node f70202a0), AE_NOT_FOUND [ 0.475506] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node f7020390), AE_NOT_FOUND [ 0.479385] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x88 (20100428/tbutils-314) [ 0.479821] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f3c28a68), AE_ALREADY_EXISTS (20110413/psparse-536) [ 0.481067] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4028a68), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.482955] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88003d9b0f00), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.484974] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f3c28a68), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.485955] ACPI Warning: For _TZ_.THRM._PSL: Return Package type mismatch at index 0 - found [NULL Object Descriptor], expected Reference (20110112/nspredef-1059) [ 0.487180] ACPI Warning: Incorrect checksum in table [TAMG] - 0x33, should be 0x32 (20110112/tbutils-314) [ 0.487365] ACPI Warning: Incorrect checksum in table [TAMG] - 0x99, should be 0x98 (20110112/tbutils-314) [ 0.490256] ACPI Warning: Incorrect checksum in table [ATKG] - 0x22, should be 0x53 (20110112/tbutils-314) [ 0.490491] ACPI Warning: For _SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20110413/nspredef-352) [ 0.491491] ACPI Warning: Incorrect checksum in table [SSDT] - 0x4A, should be 0xD9 (20110112/tbutils-314) [ 0.492569] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a08440), AE_NOT_FOUND [ 0.492648] ACPI Error (dswload-0781): [PRID] Namespace lookup failure, AE_ALREADY_EXISTS [ 0.492655] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a08440), AE_ALREADY_EXISTS [ 0.492811] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f5428a68), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.494198] ACPI Warning: Incorrect checksum in table [SSDT] - 0x37, should be 0xC7 (20110112/tbutils-314) [ 0.496094] ACPI Warning: Incorrect checksum in table [TCPA] - F8, should be 9C (20090903/tbutils-314) [ 0.497662] ACPI Warning (nspredef-0357): _SB_.PCI0.P2P_._PRT: Return Package has no elements (empty) [20080926] [ 0.497913] ACPI Warning: Incorrect checksum in table [TAMG] - 0xFA, should be 0xF9 (20100428/tbutils-314) [ 0.498775] ACPI Warning: Incorrect checksum in table [TAMG] - 0xB2, should be 0xB1 (20100428/tbutils-314) [ 0.498976] ACPI Warning: Incorrect checksum in table [GSCI] - 7B, should be 04 (20090903/tbutils-314) [ 0.500043] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node ffff8800ac22d040), AE_NOT_FOUND [ 0.501138] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f3c28a38), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.505041] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4028a38), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.513609] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f5428a38), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.516158] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f74296c0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.526190] ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - F3, should be EE [20080926] [ 0.527455] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f5422df8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.533028] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88003d9b0bb8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.534826] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x7F (20110112/tbutils-314) [ 0.538081] ACPI Warning: Incorrect checksum in table [OEMB] - C1, should be BC (20090903/tbutils-314) [ 0.539131] ACPI Error: No handler for Region [RAM_] (ffff88012fa36a20) [EmbeddedControl] (20110112/evregion-369) [ 0.539149] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPCB.SNC_.SBRT] (Node ffff88012fa4f398), AE_NOT_EXIST (20110112/psparse-536) [ 0.539161] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node ffff88012fa396b8), AE_NOT_EXIST (20110112/psparse-536) [ 0.540036] ACPI Error: [_PR_.C002._PPC] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 0.540046] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node ffff880107e623c0), AE_NOT_FOUND (20110112/psparse-536) [ 0.541238] ACPI Error: Method parse/execution failed [_TZ_.C2E8] (Node f482d108), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 0.541258] ACPI Error: Method parse/execution failed [_TZ_.C2E7] (Node f482d0f0), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 0.541277] ACPI Error: Method parse/execution failed [_TZ_.TZ2_._TMP] (Node f482d7c8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 0.548650] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 87 (20090903/tbutils-314) [ 0.550271] ACPI Warning: Incorrect checksum in table [ATKG] - 0xDC, should be 0x0E (20110112/tbutils-314) [ 0.563415] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88003d9af848), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.566332] ACPI Warning: For _TZ_.THRM._AL0: Return Package has no elements (empty) (20110413/nspredef-456) [ 0.568235] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 7F 20090521 tbutils-246 [ 0.581397] ACPI Warning: Incorrect checksum in table [ATKG] - 0x24, should be 0x16 (20110112/tbutils-314) [ 0.583718] ACPI Warning: _SB_.PCI0.PCI2._PRT: Return Package has no elements (empty) 20090521 nspredef-434 [ 0.591409] ACPI Warning: Incorrect checksum in table [ATKG] - 0x1E, should be 0x16 (20110112/tbutils-314) [ 0.591722] ACPI Error: Field [ASSM] at 524320 exceeds Buffer [BUF0] size 880 (bits) (20100428/dsopcode-597) [ 0.591729] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.MEM_._CRS] (Node ffff8800b4040f60), AE_AML_BUFFER_LIMIT [ 0.591760] ACPI Error (uteval-0250): Method execution failed [_SB_.MEM_._CRS] (Node ffff8800b4040f60), AE_AML_BUFFER_LIMIT [ 0.593045] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node f702c7b0), AE_NOT_FOUND [ 0.593072] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node f7019648), AE_NOT_FOUND [ 0.593095] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node f702ea08), AE_NOT_FOUND [ 0.593119] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node f702e9c0), AE_NOT_FOUND [ 0.593142] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node f702e678), AE_NOT_FOUND [ 0.597675] ACPI Warning for _SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to expected String at index 9 (20090903/nsrepair-132) [ 0.597680] ACPI Warning for _SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to expected String at index 10 (20090903/nsrepair-132) [ 0.597685] ACPI Warning for _SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to expected String at index 11 (20090903/nsrepair-132) [ 0.597689] ACPI Warning for _SB_.PCI0.LPC_.EC__.BAT0._BIF: Converted Buffer to expected String at index 12 (20090903/nsrepair-132) [ 0.600451] ACPI Error (psargs-0359): [_SB_.PCI0.EGBA] Namespace lookup failure, AE_NOT_FOUND [ 0.600456] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC_.MBRD._CRS] (Node f7416318), AE_NOT_FOUND [ 0.612305] ACPI Warning: Incorrect checksum in table [SSDT] - 6C, should be FB (20090903/tbutils-314) [ 0.612793] ACPI Error: [CAPB] Namespace lookup failure, AE_ALREADY_EXISTS (20110112/dsfield-143) [ 0.612820] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88003d9ae190), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.614155] ACPI Warning: Incorrect checksum in table [SSDT] - 37, should be C7 (20090903/tbutils-314) [ 0.620955] ACPI Warning for _TZ_.THRM._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference (20090903/nspredef-1012) [ 0.621415] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node f702c828), AE_NOT_FOUND [ 0.621443] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node f7019ed0), AE_NOT_FOUND [ 0.621468] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node f702ea98), AE_NOT_FOUND [ 0.621493] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node f702ea50), AE_NOT_FOUND [ 0.621518] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node f702e708), AE_NOT_FOUND [ 0.625680] [Firmware Bug]: PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] not reserved in ACPI motherboard resources [ 0.627242] ACPI Error (psargs-0359): [_SB_.PCI0.EC__.HOTT] Namespace lookup failure, AE_NOT_FOUND [ 0.627255] ACPI Error (psparse-0537): Method parse/execution failed [_TZ_.TZ01._HOT] (Node ffff88013ba3ae60), AE_NOT_FOUND [ 0.628646] ACPI Warning: Incorrect checksum in table [OEMB] - 0xFA, should be 0x1E (20100428/tbutils-314) [ 0.628687] [Firmware Bug]: ERST: ERST table is invalid [ 0.630258] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88007af370a0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.641157] ACPI Warning: Incorrect checksum in table [OEMB] - C4, should be C1 (20090903/tbutils-314) [ 0.644838] [Firmware Bug]: PCI: MMCONFIG at [mem 0xe0000000-0xe09fffff] not reserved in ACPI motherboard resources [ 0.646493] ACPI Warning: Incorrect checksum in table [OEMB] - 0x5F, should be 0x5A (20100428/tbutils-314) [ 0.651383] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node ffff88007f416680), AE_NOT_FOUND [ 0.652133] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a2e040), AE_NOT_FOUND [ 0.652695] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a0f040), AE_NOT_FOUND [ 0.653163] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88007ab2f460), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.653985] ACPI Warning: Incorrect checksum in table [TAMG] - 0x4A, should be 0x49 (20110112/tbutils-314) [ 0.654642] ACPI Error: Method parse/execution failed [_PR_.CPU1._PDC] (Node ffff88020f44deb0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.654994] ACPI Error: Method parse/execution failed [_PR_.CPU2._PDC] (Node ffff88020f44df50), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.655350] ACPI Error: Method parse/execution failed [_PR_.CPU3._PDC] (Node ffff88020f454000), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.655369] ACPI Error (psargs-0359): [_SB_.PCI0.PSKB] Namespace lookup failure, AE_NOT_FOUND [ 0.655376] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.SIO_.KBC0._STA] (Node ffff880236c47260), AE_NOT_FOUND [ 0.655576] ACPI Error (psargs-0359): [_SB_.PCI0.PSMS] Namespace lookup failure, AE_NOT_FOUND [ 0.655581] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.SIO_.MSE0._STA] (Node ffff880236c47340), AE_NOT_FOUND [ 0.656750] ACPI Warning: Incorrect checksum in table [OEMB] - 06, should be 05 20090521 tbutils-246 [ 0.658002] ACPI Warning for _SB_.PCI0.SATA.PRT0._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) [ 0.658697] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88023fc14aa0), AE_ALREADY_EXISTS [ 0.662008] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a0c440), AE_NOT_FOUND [ 0.663194] [Firmware Bug]: ACPI: no secondary bus range in _CRS [ 0.664875] ACPI Warning: Incorrect checksum in table [TAMG] - 0x45, should be 0x44 (20110112/tbutils-314) [ 0.666686] ACPI Warning: Incorrect checksum in table [TAMG] - 0x9E, should be 0x9D (20100428/tbutils-314) [ 0.670109] ACPI Warning: Incorrect checksum in table [OEMB] - 5B, should be 4E (20090903/tbutils-314) [ 0.670182] ACPI Warning: Incorrect checksum in table [TAMG] - C3, should be C2 (20090903/tbutils-314) [ 0.670980] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x7F (20100428/tbutils-314) [ 0.673104] ACPI Warning: Incorrect checksum in table [OEMB] - 8C, should be 7D (20090903/tbutils-314) [ 0.674282] ACPI Warning: Incorrect checksum in table [TAMG] - 0x15, should be 0x14 (20110112/tbutils-314) [ 0.674920] ACPI Error: [SERN] Namespace lookup failure, AE_ALREADY_EXISTS (20110413/dswload2-316) [ 0.674938] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC_.EC__.GBIF] (Node f3829120), AE_ALREADY_EXISTS (20110413/psparse-536) [ 0.674963] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC_.EC__.BAT1._BIF] (Node f3829330), AE_ALREADY_EXISTS (20110413/psparse-536) [ 0.675162] ACPI Warning: Incorrect checksum in table [TAMG] - 0x05, should be 0x04 (20110413/tbutils-314) [ 0.677370] ACPI Warning for _SB_.PCI0.BAT0._BIF: Converted Buffer to expected String at index 9 (20090903/nsrepair-132) [ 0.677375] ACPI Warning for _SB_.PCI0.BAT0._BIF: Converted Buffer to expected String at index 12 (20090903/nsrepair-132) [ 0.677386] ACPI Warning: Incorrect checksum in table [OEMB] - 94, should be 93 (20090903/tbutils-314) [ 0.678233] ACPI Warning: Incorrect checksum in table [OEMB] - 0x55, should be 0x50 (20100428/tbutils-314) [ 0.678877] ACPI Warning: Incorrect checksum in table [OEMB] - 88, should be 7F (20090903/tbutils-314) [ 0.681297] ACPI Warning: Incorrect checksum in table [OEMB] - DA, should be D9 (20090903/tbutils-314) [ 0.688066] ACPI Warning: Incorrect checksum in table [OEMB] - 60, should be 5F (20090903/tbutils-314) [ 0.695029] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a0e440), AE_NOT_FOUND [ 0.695887] ACPI Warning: Incorrect checksum in table [OEMB] - C1, should be C0 (20090903/tbutils-314) [ 0.696587] ACPI Warning: Incorrect checksum in table [OEMB] - 0xEE, should be 0xE6 (20100428/tbutils-314) [ 0.697769] ACPI Warning: Incorrect checksum in table [OEMB] - 0xFC, should be 0xF7 (20100428/tbutils-314) [ 0.700202] [Firmware Bug]: powernow-k8: No PSB or ACPI _PSS objects [ 0.702121] ACPI Warning: Incorrect checksum in table [OEMB] - 0x84, should be 0x7B (20100428/tbutils-314) [ 0.705041] ACPI Warning: Incorrect checksum in table [OEMB] - 0xF3, should be 0xF2 (20100428/tbutils-314) [ 0.710267] ACPI Error: Method parse/execution failed [_TZ_.PSWT] (Node f7424bb8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 0.710275] ACPI Error: Method parse/execution failed [_TZ_.GTTP] (Node f7424b88), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 0.710281] ACPI Error: Method parse/execution failed [_TZ_.GFXZ._TMP] (Node f74249a8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 0.710890] ACPI Warning: Incorrect checksum in table [OEMB] - DF, should be D2 (20090903/tbutils-314) [ 0.712727] ACPI Error: Method parse/execution failed [_TZ_.DTSZ._TMP] (Node f7424ca8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 0.715065] ACPI Warning: Incorrect checksum in table [OEMB] - 67, should be 64 (20090903/tbutils-314) [ 0.715951] ACPI Warning: Incorrect checksum in table [OEMB] - 0x9B, should be 0x93 (20100428/tbutils-314) [ 0.717350] ACPI Warning: Incorrect checksum in table [OEMB] - 0x5C, should be 0x55 (20100428/tbutils-314) [ 0.719490] ACPI Warning: Incorrect checksum in table [OEMB] - 0x3A, should be 0x39 (20100428/tbutils-314) [ 0.721822] ACPI Error (dswload-0659): [USB0] Namespace lookup failure, AE_NOT_FOUND [ 0.722199] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a4d180), AE_NOT_FOUND [ 0.725417] ACPI Warning for _SB_.PCI0.LPC_.SYSR._CRS: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) [ 0.725429] ACPI Error (uteval-0307): Return object type is incorrect [_SB_.PCI0.LPC_.SYSR._CRS] (Node ffff88013ba46cc0), AE_TYPE [ 0.725450] ACPI Error: Type returned from _CRS was incorrect: Integer, expected Btypes: 4 (20090903/uteval-313) [ 0.725974] ACPI Warning: Incorrect checksum in table [OEMB] - 0x7E, should be 0x75 (20100428/tbutils-314) [ 0.736425] ACPI Warning: For _SB_.PCI0.PT02._PRT: Return Package has no elements (empty) (20110413/nspredef-456) [ 0.743273] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f701f0d8), AE_ALREADY_EXISTS [ 0.743525] ACPI Error: [CAPD] Namespace lookup failure, AE_ALREADY_EXISTS (20110112/dsfield-143) [ 0.743530] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f50273d8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.743538] ACPI Warning: For _SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20110112/nspredef-352) [ 0.744106] ACPI Error: Field [ASSM] at 524320 exceeds Buffer [BUF0] size 880 (bits) (20090903/dsopcode-596) [ 0.744114] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.MEM_._CRS] (Node ffff88013ba44cc0), AE_AML_BUFFER_LIMIT [ 0.744142] ACPI Error (uteval-0250): Method execution failed [_SB_.MEM_._CRS] (Node ffff88013ba44cc0), AE_AML_BUFFER_LIMIT [ 0.755111] ACPI Warning: Incorrect checksum in table [OEMB] - 2F, should be 2A (20090903/tbutils-314) [ 0.772223] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f4c250d8), AE_ALREADY_EXISTS (20101013/psparse-537) [ 0.775831] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x87 (20110112/tbutils-314) [ 0.777581] ACPI Warning: Incorrect checksum in table [TAMG] - 0xF9, should be 0xF8 (20110112/tbutils-314) [ 0.779737] ACPI Warning: Incorrect checksum in table [TAMG] - 0x83, should be 0x82 (20110112/tbutils-314) [ 0.780967] ACPI Warning: Incorrect checksum in table [TAMG] - FA, should be F9 (20090903/tbutils-314) [ 0.781225] ACPI Warning: Incorrect checksum in table [TAMG] - 0x10, should be 0x0F (20110112/tbutils-314) [ 0.781345] ACPI Warning: Incorrect checksum in table [TAMG] - 0xB2, should be 0xB1 (20110112/tbutils-314) [ 0.782613] ACPI Error (psargs-0359): [RAMB] Namespace lookup failure, AE_NOT_FOUND [ 0.783246] ACPI Warning: Incorrect checksum in table [TAMG] - 0x7D, should be 0x7C (20100428/tbutils-314) [ 0.786539] ACPI Warning: Incorrect checksum in table [TAMG] - 0x2D, should be 0x2C (20110112/tbutils-314) [ 0.787253] ACPI Warning: Incorrect checksum in table [TAMG] - 0x10, should be 0x0F (20100428/tbutils-314) [ 0.788032] ACPI Warning: Incorrect checksum in table [TAMG] - 0x04, should be 0x03 (20110413/tbutils-314) [ 0.788418] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node ffff88030a048b40), AE_AML_BUFFER_LIMIT [ 0.788607] ACPI Warning: Incorrect checksum in table [TAMG] - 0xA2, should be 0xA1 (20110112/tbutils-314) [ 0.790513] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC_.EC__.GBIF] (Node ffff880079f39f78), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.790526] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC_.EC__.BAT0._BIF] (Node ffff880079f37118), AE_ALREADY_EXISTS (20110112/psparse-536) [ 0.791560] ACPI Warning: Incorrect checksum in table [SSDT] - 0x3F, should be 0x1F (20110112/tbutils-314) [ 0.794367] ACPI Warning for _PR_.P002._PSD: Return type mismatch - found Integer, expected Package (20090903/nspredef-1006) [ 0.795423] ACPI Warning: Incorrect checksum in table [SSDT] - 0x3F, should be 0x1F (20100428/tbutils-314) [ 0.805111] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 7E (20090903/tbutils-314) [ 0.810246] [Firmware Bug]: ACPI(Z01I) defines _DOD but not _DOS [ 0.810687] ACPI Error (dswload-0659): [DD02] Namespace lookup failure, AE_NOT_FOUND [ 0.810756] ACPI Error (dswload-0659): [EHC1] Namespace lookup failure, AE_NOT_FOUND [ 0.820565] ACPI Error: [FZHD] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 0.820571] ACPI Error: Method parse/execution failed [_SB_.PCI0.SATA.CHN0._GTM] (Node ffff880127632b40), AE_NOT_FOUND (20110112/psparse-536) [ 0.820632] ACPI Error: Method parse/execution failed [_SB_.PCI0.SATA.CHN1._GTM] (Node ffff880127632cd0), AE_NOT_FOUND (20110112/psparse-536) [ 0.821065] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node ffff880127634758), AE_NOT_FOUND (20110112/psparse-536) [ 0.821112] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node ffff8801276348e8), AE_NOT_FOUND (20110112/psparse-536) [ 0.822836] ACPI Warning: For _SB_.PCI0.PCI2._PRT: Return Package has no elements (empty) (20110112/nspredef-456) [ 0.831199] ACPI Warning: Incorrect checksum in table [OEMB] - B7, should be B6 (20090903/tbutils-314) [ 0.860349] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node ffff88023704ea40), AE_NOT_FOUND [ 0.860380] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node ffff8802370590e0), AE_NOT_FOUND [ 0.860410] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node ffff8802370522a0), AE_NOT_FOUND [ 0.860439] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node ffff880237052240), AE_NOT_FOUND [ 0.860468] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node ffff880237050de0), AE_NOT_FOUND [ 0.870147] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff88013ba29e80), AE_NOT_FOUND [ 0.872036] ACPI Warning: Incorrect checksum in table [OEMB] - EC, should be E3 (20090903/tbutils-314) [ 0.873454] ACPI Warning for _SB_.PCI0.PCIB._PRT: Return Package has no elements (empty) (20090903/nspredef-433) [ 0.875591] ACPI Warning: Incorrect checksum in table [OEMB] - 14, should be 13 (20090903/tbutils-314) [ 0.877093] ACPI Warning: Incorrect checksum in table [OEMB] - 0x89, should be 0x80 (20100428/tbutils-314) [ 0.879606] ACPI Error (psargs-0359): [MPEN] Namespace lookup failure, AE_NOT_FOUND [ 0.879794] ACPI Error (psparse-0537): Method parse/execution failed [_TZ_.TZ00._PSL] (Node ffff88015ba4de00), AE_NOT_FOUND [ 0.888177] ACPI Warning for _SB_.BAT1._BST: Return Package type mismatch at index 2 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) [ 0.890080] ACPI Error: No handler for Region [RAM_] (ffff880133a35a20) [EmbeddedControl] (20100428/evregion-369) [ 0.890253] ACPI Error: Region EmbeddedControl(0x3) has no handler (20100428/exfldio-293) [ 0.890421] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.SNC_.SBRT] (Node ffff880133a49620), AE_NOT_EXIST [ 0.890696] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node ffff880133a385e0), AE_NOT_EXIST [ 0.892097] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node ffff88021704e920), AE_NOT_FOUND [ 0.892124] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node ffff880217056700), AE_NOT_FOUND [ 0.892147] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node ffff880217052180), AE_NOT_FOUND [ 0.892171] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node ffff880217052120), AE_NOT_FOUND [ 0.892195] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node ffff880217050cc0), AE_NOT_FOUND [ 0.892915] ACPI Warning: Incorrect checksum in table [OEMB] - 0xCE, should be 0xCD (20100428/tbutils-314) [ 0.899338] ACPI Warning: Incorrect checksum in table [OEMB] - 0xDD, should be 0xD4 (20100428/tbutils-314) [ 0.900692] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node ffff88021704e960), AE_NOT_FOUND [ 0.900729] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node ffff880217059000), AE_NOT_FOUND [ 0.900753] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node ffff8802170521c0), AE_NOT_FOUND [ 0.900776] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node ffff880217052160), AE_NOT_FOUND [ 0.900801] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node ffff880217050d00), AE_NOT_FOUND [ 0.905032] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node ffff88021304e940), AE_NOT_FOUND [ 0.905061] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node ffff8802130576a0), AE_NOT_FOUND [ 0.905085] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node ffff8802130521a0), AE_NOT_FOUND [ 0.905110] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node ffff880213052140), AE_NOT_FOUND [ 0.905135] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node ffff880213050ce0), AE_NOT_FOUND [ 0.905920] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.C000.C264] (Node f7024e58), AE_AML_PACKAGE_LIMIT [ 0.905985] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.C000._PSS] (Node f7024f30), AE_AML_PACKAGE_LIMIT [ 0.906063] [Firmware Bug]: BIOS needs update for CPU frequency support [ 0.940265] ACPI Warning: Incorrect checksum in table [TAMG] - 0x14, should be 0x13 (20110112/tbutils-314) [ 0.940948] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f7421fc0), AE_ALREADY_EXISTS [ 0.941821] ACPI Warning: Incorrect checksum in table [SSDT] - 0x3F, should be 0x91 (20110413/tbutils-314) [ 0.943511] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x7E (20110413/tbutils-314) [ 0.944156] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ACAD._PSR] (Node ffff88013384d720), AE_NOT_FOUND [ 0.967528] ACPI Warning for _TZ_.THRM._AL0: Return Package has no elements (empty) (20100428/nspredef-456) [ 0.972652] ACPI Warning: Incorrect checksum in table [OEMB] - FA, should be F7 (20090903/tbutils-314) [ 0.990917] ACPI Warning for _SB_.PCI0.FNC2.PRT0._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) [ 0.991675] ACPI Warning for _SB_.PCI0.FNC2.PRT1._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) [ 0.992685] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81cf6eb0), AE_NOT_FOUND [ 1.004972] ACPI Error (psparse-0537): Method parse/execution failed [CPUT] (Node f701c150), AE_NOT_FOUND [ 1.005015] ACPI Error (psparse-0537): Method parse/execution failed [PSSC] (Node f701c168), AE_NOT_FOUND [ 1.005055] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node f702f3c0), AE_NOT_FOUND [ 1.005834] ACPI Warning: Incorrect checksum in table [OEMB] - 0x1D, should be 0x1C (20100428/tbutils-314) [ 1.009421] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ACAD._PSR] (Node f701aa98), AE_NOT_FOUND [ 1.020525] ACPI Warning: Incorrect checksum in table [TAMG] - 0xE8, should be 0xE7 (20100428/tbutils-314) [ 1.020868] ACPI Warning for _PR_.CPU0._PSD: Incorrectly formed Package, attempting repair (20090903/nsrepair-200) [ 1.021557] ACPI Warning for _PR_.CPU1._PSD: Incorrectly formed Package, attempting repair (20090903/nsrepair-200) [ 1.023813] ACPI Warning: Incorrect checksum in table [OEMB] - 0x82, should be 0x81 (20100428/tbutils-314) [ 1.026272] ACPI Warning (processor_throttling-0843): Invalid throttling state, reset [ 1.027573] ACPI Error: No handler for Region [ERAM] (ffff880133e3e798) [EmbeddedControl] (20090903/evregion-319) [ 1.027587] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.DOCK._STA] (Node ffff880133e48620), AE_NOT_EXIST [ 1.027653] ACPI Error (uteval-0250): Method execution failed [_SB_.PCI0.DOCK._STA] (Node ffff880133e48620), AE_NOT_EXIST [ 1.125427] [Firmware Bug]: No valid trip found [ 1.158298] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node f701b648), AE_NOT_FOUND [ 1.167050] ACPI Error: [CDW1] Namespace lookup failure, AE_NOT_FOUND (20110316/psargs-359) [ 1.167226] ACPI Error: Method parse/execution failed [_SB_._OSC] (Node f4422648), AE_NOT_FOUND (20110316/psparse-536) [ 1.168945] ACPI Warning: Incorrect checksum in table [OEMB] - 0x04, should be 0xFD (20100428/tbutils-314) [ 1.174038] ACPI Warning: Incorrect checksum in table [TCPA] - 0x00, should be 0x9B (20100428/tbutils-314) [ 1.176461] [Firmware Bug]: powernow-k8: No compatible ACPI _PSS objects found. [ 1.176462] [Firmware Bug]: powernow-k8: Try again with latest BIOS. [ 1.179893] ACPI Warning: Incorrect checksum in table [ATKG] - 0x81, should be 0x59 (20100428/tbutils-314) [ 1.183989] [Firmware Bug]: ACPI(PEGD) defines _DOD but not _DOS [ 1.184923] ACPI Warning: For _SB_.PCI0.P0P1._PRT: Return Package has no elements (empty) (20110413/nspredef-456) [ 1.186079] ACPI Error: [BRTW] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 1.186087] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD03._BCM] (Node f4c2a588), AE_NOT_FOUND (20110112/psparse-536) [ 1.187842] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0.PPC_] (Node f7450168), AE_NOT_FOUND [ 1.187891] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PPC] (Node f74500c0), AE_NOT_FOUND [ 1.188370] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PPC] (Node f7450150), AE_NOT_FOUND [ 1.188776] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PPC] (Node f74502b8), AE_NOT_FOUND [ 1.189190] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU3._PPC] (Node f7450258), AE_NOT_FOUND [ 1.196055] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f3824270), AE_NOT_FOUND (20110112/psparse-536) [ 1.210593] ACPI Warning: For _SB_.PCI0.PCIB._PRT: Return Package has no elements (empty) (20101013/nspredef-456) [ 1.212692] ACPI Warning: For _TZ_.THRM._AL0: Return Package has no elements (empty) (20110112/nspredef-456) [ 1.214748] ACPI Error: [_T_1] Namespace lookup failure, AE_ALREADY_EXISTS (20110112/dswload-802) [ 1.214761] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD_.GBQC] (Node f3023438), AE_ALREADY_EXISTS (20110112/psparse-536) [ 1.214775] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD_._BQC] (Node f3023420), AE_ALREADY_EXISTS (20110112/psparse-536) [ 1.222641] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD1.GBQC] (Node f30235b8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 1.222655] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD1._BQC] (Node f30235a0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 1.224060] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.BAT1._STA] (Node f7023b10), AE_TIME [ 1.228128] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._REG] (Node f702a570), AE_NOT_FOUND [ 1.229185] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0._OSC] (Node f70140d8), AE_ALREADY_EXISTS [ 1.230869] ACPI Warning for _PR_.CPU0._PSS: SubPackage[15,16] - suspicious power dissipation values (20100428/nsrepair2-403) [ 1.231049] ACPI Warning for _PR_.CPU1._PSS: SubPackage[15,16] - suspicious power dissipation values (20100428/nsrepair2-403) [ 1.231224] ACPI Warning for _PR_.CPU2._PSS: SubPackage[15,16] - suspicious power dissipation values (20100428/nsrepair2-403) [ 1.231399] ACPI Warning for _PR_.CPU3._PSS: SubPackage[15,16] - suspicious power dissipation values (20100428/nsrepair2-403) [ 1.246159] ACPI Error: No handler for Region [ECRM] (f6cedba0) [EmbeddedControl] (20110413/evregion-373) [ 1.246164] ACPI Error: Region EmbeddedControl (ID=3) has no handler (20110413/exfldio-292) [ 1.246169] ACPI Error: Method parse/execution failed [_TZ_.RDEC] (Node f442fc60), AE_NOT_EXIST (20110413/psparse-536) [ 1.246176] ACPI Error: Method parse/execution failed [_TZ_.TZS0._TMP] (Node f442fca8), AE_NOT_EXIST (20110413/psparse-536) [ 1.270260] ACPI Error (psparse-0537): Method parse/execution failed [CPUT] (Node ffff880137a4e840), AE_NOT_FOUND [ 1.270297] ACPI Error (psparse-0537): Method parse/execution failed [PSSC] (Node ffff880137a4e860), AE_NOT_FOUND [ 1.270332] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node ffff880137a3fd00), AE_NOT_FOUND [ 1.272398] ACPI Error: No handler for Region [ECRM] (f76d0c60) [EmbeddedControl] (20110112/evregion-369) [ 1.272407] ACPI Error: Method parse/execution failed [_TZ_.RDEC] (Node f742fc60), AE_NOT_EXIST (20110112/psparse-536) [ 1.272415] ACPI Error: Method parse/execution failed [_TZ_.TZS0._TMP] (Node f742fca8), AE_NOT_EXIST (20110112/psparse-536) [ 1.280955] ACPI Error: No handler for Region [PCFG] (ffff880137a733f0) [PCI_Config] (20090903/evregion-319) [ 1.280965] ACPI Error (psparse-0537): Method parse/execution failed [J380._STA] (Node ffff88013712b380), AE_NOT_EXIST [ 1.314561] ACPI Error: [ECPU] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 1.314567] ACPI Error: Method parse/execution failed [_TZ_.TZ00._TMP] (Node ffff88011763ca28), AE_NOT_FOUND (20110112/psparse-536) [ 1.320114] ACPI Warning: Incorrect checksum in table [ATKG] - 0x9D, should be 0xE5 (20110112/tbutils-314) [ 1.336148] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node ffff88012b647200), AE_AML_BUFFER_LIMIT [ 1.337975] ACPI Error (uteval-0250): Method execution failed [J380._STA] (Node ffff88013712b380), AE_NOT_EXIST [ 1.371174] ACPI Error: Field [CDW3] at 96 exceeds Buffer [NULL] size 64 (bits) (20090903/dsopcode-596) [ 1.371180] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node ffff88044b85e4a0), AE_AML_BUFFER_LIMIT [ 1.381411] ACPI Error (psparse-0537): Method parse/execution failed [] (Node ffffffff81a2b040), AE_NOT_FOUND [ 1.381481] ACPI Error (dswload-0659): [PCI0] Namespace lookup failure, AE_NOT_FOUND [ 1.384655] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff8801393f91f8 (20090903/exresop-590) [ 1.384672] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.VGA_._DSM] (Node ffff88013ba4c020), AE_AML_OPERAND_TYPE [ 1.384743] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.P0P1.VGA_._DSM] (Node ffff88013ba4d9c0), AE_AML_OPERAND_TYPE [ 1.398000] [Firmware Bug]: ACPI(Z00P) defines _DOD but not _DOS [ 1.398053] ACPI: acpi_idle yielding to intel_idleACPI Warning for _TZ_.TZ01._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference (20100428/nspredef-1059) [ 1.399160] ACPI Warning for _SB_.PCI0.PT02._PRT: Return Package has no elements (empty) (20090903/nspredef-433) [ 1.400736] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node f7018e58), AE_NOT_FOUND [ 1.436671] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node f7024e58), AE_NOT_FOUND [ 1.462866] ACPI Warning: _SB_.PCI0.VID2._DOD: Return Package has no elements (empty) 20090521 nspredef-434 [ 1.480960] ACPI Warning: _SB_.PCI0.FNC2.PRT0._GTF: Return type mismatch - found Integer, expected Buffer 20090521 nspredef-940 [ 1.488986] ACPI Error (psargs-0359): [GTF0] Namespace lookup failure, AE_NOT_FOUND [ 1.488991] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f702b708), AE_NOT_FOUND [ 1.489034] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f702b720), AE_NOT_FOUND [ 1.505441] ACPI Warning: Incorrect checksum in table [TAMG] - 7C, should be 7B (20090903/tbutils-314) [ 1.507734] ACPI Warning: Incorrect checksum in table [TAMG] - 2D, should be 2C (20090903/tbutils-314) [ 1.509153] ACPI Warning: Incorrect checksum in table [TAMG] - C0, should be BF (20090903/tbutils-314) [ 1.512057] ACPI Warning: Incorrect checksum in table [OEMB] - CA, should be C9 (20090903/tbutils-314) [ 1.515657] ACPI Warning: Incorrect checksum in table [TAMG] - 0xC5, should be 0xC4 (20110112/tbutils-314) [ 1.518091] ACPI Warning for _SB_.PCI0.IDE1.PRT0._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) [ 1.528248] ACPI Warning: Incorrect checksum in table [TAMG] - 0x98, should be 0x97 (20100428/tbutils-314) [ 1.529653] ACPI Warning: Incorrect checksum in table [TAMG] - 0x7C, should be 0x7B (20100428/tbutils-314) [ 1.535278] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 88 (20090903/tbutils-314) [ 1.545790] ACPI Warning: Incorrect checksum in table [OEMB] - D0, should be CF (20090903/tbutils-314) [ 1.555599] ACPI Error (psparse-0537): Method parse/execution failed [CPUT] (Node ffff8801b90590c0), AE_NOT_FOUND [ 1.555652] ACPI Error (psparse-0537): Method parse/execution failed [PSSC] (Node ffff8801b90590e0), AE_NOT_FOUND [ 1.555703] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node ffff8801b903b6e0), AE_NOT_FOUND [ 1.559068] ACPI Warning: Incorrect checksum in table [OEMB] - C5, should be C4 (20090903/tbutils-314) [ 1.570612] ACPI Error: No handler for Region [PCFG] (ffff8801b9074240) [PCI_Config] (20090903/evregion-319) [ 1.570624] ACPI Error (psparse-0537): Method parse/execution failed [J380._STA] (Node ffff8801b916ea40), AE_NOT_EXIST [ 1.586563] ACPI Warning: Incorrect checksum in table [OEMB] - D7, should be D3 (20090903/tbutils-314) [ 1.590337] ACPI Warning: For _TZ_.THRM._PSL: Return Package has no elements (empty) (20110112/nspredef-456) [ 1.601784] ACPI Warning: Incorrect checksum in table [OEMB] - 5D, should be 55 (20090903/tbutils-314) [ 1.605121] ACPI Error: Current brightness invalid (20110112/video-377) [ 1.605465] ACPI Error: [RAMB] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 1.616034] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0.PPC_] (Node ffff88015334da00), AE_NOT_FOUND [ 1.616243] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PPC] (Node ffff88015334d920), AE_NOT_FOUND [ 1.618281] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PPC] (Node ffff88015334d9e0), AE_NOT_FOUND [ 1.620164] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PPC] (Node ffff88015334dbc0), AE_NOT_FOUND [ 1.621081] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU3._PPC] (Node ffff88015334db40), AE_NOT_FOUND [ 1.648580] ACPI Error: [SMS_] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 1.648589] ACPI Error: Method parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node f3429e58), AE_NOT_FOUND (20110112/psparse-536) [ 1.662849] ACPI Error (uteval-0250): Method execution failed [J380._STA] (Node ffff8801b916ea40), AE_NOT_EXIST [ 1.678325] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88022f7bb5e8 (20110112/exresop-590) [ 1.678342] ACPI Error: Method parse/execution failed [_SB_.PCI0.VGA_._DSM] (Node ffff88022f460190), AE_AML_OPERAND_TYPE (20110112/psparse-536) [ 1.678390] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88022f7bb8b8 (20110112/exresop-590) [ 1.678412] ACPI Error: Method parse/execution failed [_SB_.PCI0.P0P1.VGA_._DSM] (Node ffff88022f464230), AE_AML_OPERAND_TYPE (20110112/psparse-536) [ 1.701482] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node ffff88022704e960), AE_NOT_FOUND [ 1.701521] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node ffff880227059000), AE_NOT_FOUND [ 1.701557] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node ffff8802270521c0), AE_NOT_FOUND [ 1.701592] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node ffff880227052160), AE_NOT_FOUND [ 1.701628] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node ffff880227050d00), AE_NOT_FOUND [ 1.739479] ACPI Warning: Incorrect checksum in table [SSDT] - 0x3F, should be 0x91 (20110112/tbutils-314) [ 1.761428] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node ffff8800bc234d60), AE_NOT_FOUND [ 1.782803] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0.PPC_] (Node ffff8801d4d0ac60), AE_NOT_FOUND [ 1.783001] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PPC] (Node ffff8801d4d0ab80), AE_NOT_FOUND [ 1.784831] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PPC] (Node ffff8801d4d0ac40), AE_NOT_FOUND [ 1.786497] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PPC] (Node ffff8801d4d0ae20), AE_NOT_FOUND [ 1.787299] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU3._PPC] (Node ffff8801d4d0ada0), AE_NOT_FOUND [ 1.849787] ACPI Warning for _PR_.CPU3._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer [] tick_dev_program_event+0x68/0xd0 [ 1.861558] ACPI Error: [SERN] Namespace lookup failure, AE_ALREADY_EXISTS (20110112/dswload-802) [ 1.861576] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC_.EC__.GBIF] (Node ffff880232c509b0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 1.861601] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC_.EC__.BAT1._BIF] (Node ffff880232c50d20), AE_ALREADY_EXISTS (20110112/psparse-536) [ 1.864413] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node f3025828), AE_AML_PACKAGE_LIMIT (20110413/psparse-536) [ 1.893953] ACPI Error (psparse-0537): Method parse/execution failed [CPUT] (Node ffff8800b3c50000), AE_NOT_FOUND [ 1.894002] ACPI Error (psparse-0537): Method parse/execution failed [PSSC] (Node ffff8800b3c50020), AE_NOT_FOUND [ 1.894047] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node ffff8800b3c49380), AE_NOT_FOUND [ 1.900224] ACPI Error: [NPSS] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 1.900238] ACPI Error: Method parse/execution failed [_PR_.CPU0.PPC_] (Node ffff88014f9a5140), AE_NOT_FOUND (20110112/psparse-536) [ 1.900254] ACPI Error: Method parse/execution failed [_PR_.CPU0._PPC] (Node ffff88014f9a5028), AE_NOT_FOUND (20110112/psparse-536) [ 1.900769] ACPI Error: Method parse/execution failed [_PR_.CPU1._PPC] (Node ffff88014f9a5118), AE_NOT_FOUND (20110112/psparse-536) [ 1.901001] ACPI Error: Method parse/execution failed [_PR_.CPU2._PPC] (Node ffff88014f9a5370), AE_NOT_FOUND (20110112/psparse-536) [ 1.901211] ACPI Error: Method parse/execution failed [_PR_.CPU3._PPC] (Node ffff88014f9a52d0), AE_NOT_FOUND (20110112/psparse-536) [ 1.905440] ACPI Warning: For _SB_.PCI0.PCIB._PRT: Return Package has no elements (empty) (20110112/nspredef-456) [ 1.907422] ACPI Error: [GTF0] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 1.907427] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f3431a50), AE_NOT_FOUND (20110112/psparse-536) [ 1.907445] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f3431a68), AE_NOT_FOUND (20110112/psparse-536) [ 1.911273] ACPI Warning for _SB_.PCI0.P0P1._PRT: Return Package has no elements (empty) (20090903/nspredef-433) [ 1.929855] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.IDE1.GTM_] (Node f7414858), AE_AML_PACKAGE_LIMIT [ 1.929872] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.IDE1.CHN1._GTM] (Node f7414798), AE_AML_PACKAGE_LIMIT [ 1.958776] ACPI Warning for _PR_.CPU0._PSD: [ 1.958968] ACPI Warning for _PR_.CPU1._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) [ 1.959113] ACPI Warning for _PR_.CPU2._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) [ 1.959252] ACPI Warning for _PR_.CPU3._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) [ 1.959427] ACPI Warning for _PR_.CPU4._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) [ 1.959602] ACPI Warning for _PR_.CPU5._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) [ 1.959776] ACPI Warning for _PR_.CPU6._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) [ 1.959951] ACPI Warning for _PR_.CPU7._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) [ 1.962612] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0.PPC_] (Node ffff8801534e5dc0), AE_NOT_FOUND [ 1.962811] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PPC] (Node ffff8801534e5ce0), AE_NOT_FOUND [ 1.964620] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PPC] (Node ffff8801534e5da0), AE_NOT_FOUND [ 1.966282] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PPC] (Node ffff8801534e5f80), AE_NOT_FOUND [ 1.967081] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU3._PPC] (Node ffff8801534e5f00), AE_NOT_FOUND [ 1.974827] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f3831a50), AE_NOT_FOUND (20110112/psparse-536) [ 1.974846] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f3831a68), AE_NOT_FOUND (20110112/psparse-536) [ 2.001829] ACPI Error: Method parse/execution failed [_SB_.PCI0.PATA.GTM_] (Node f5423ba0), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 2.001850] ACPI Error: Method parse/execution failed [_SB_.PCI0.PATA.CHN0._GTM] (Node f54239c0), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 2.002809] ACPI Error: Method parse/execution failed [_SB_.PCI0.PATA.CHN1._GTM] (Node f5423ac8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 2.006621] ACPI Error (psparse-0537): Method parse/execution failed [CPUT] (Node ffff8801b90570c0), AE_NOT_FOUND [ 2.006671] ACPI Error (psparse-0537): Method parse/execution failed [PSSC] (Node ffff8801b90570e0), AE_NOT_FOUND [ 2.006718] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._REG] (Node ffff8801b903fa80), AE_NOT_FOUND [ 2.022076] ACPI Error: Could not enable SleepButton event (20110112/evxfevnt-198) [ 2.022090] ACPI Warning: Could not enable fixed event 0x3 (20110112/evxface-197) [ 2.033653] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f6031468), AE_NOT_FOUND (20110112/psparse-536) [ 2.033670] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f6031480), AE_NOT_FOUND (20110112/psparse-536) [ 2.039517] [Firmware Bug]: ACPI: Invalid BIOS _PSS frequency: 0x80000000 MHz [ 2.045931] ACPI Warning for _SB_.PCI0.P0P1._PRT: Return Package has no elements (empty) (20100428/nspredef-456) [ 2.049441] ACPI Warning for _PR_.CPU0._PSD: Return Package type mismatch at index 4 - found [NULL Object Descriptor], expected Integer (20090903/nspredef-1012) [ 2.068617] ACPI Error: Method parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node f3c29e58), AE_NOT_FOUND (20110112/psparse-536) [ 2.081502] ACPI Error (psargs-0359): [NPSS] Namespace lookup failure, AE_NOT_FOUND [ 2.081508] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0.PPC_] (Node ffff8801534e5c20), AE_NOT_FOUND [ 2.081585] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU0._PPC] (Node ffff8801534e5b40), AE_NOT_FOUND [ 2.083171] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PPC] (Node ffff8801534e5c00), AE_NOT_FOUND [ 2.084838] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PPC] (Node ffff8801534e5de0), AE_NOT_FOUND [ 2.085644] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU3._PPC] (Node ffff8801534e5d60), AE_NOT_FOUND [ 2.106307] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node ffff88023f45dca8), AE_NOT_FOUND (20110112/psparse-536) [ 2.106326] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node ffff88023f45dcd0), AE_NOT_FOUND (20110112/psparse-536) [ 2.113330] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f74317b0), AE_NOT_FOUND (20110112/psparse-536) [ 2.113367] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f74317c8), AE_NOT_FOUND (20110112/psparse-536) [ 2.132386] ACPI Error: Could not enable SleepButton event (20090903/evxfevnt-193) [ 2.132392] ACPI Warning: Could not enable fixed event 3 (20090903/evxface-146) [ 2.149905] ACPI Error: Method parse/execution failed [_SB_.C003.C099._DOD] (Node f30275a0), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 2.173036] ACPI Warning for _SB_._OSC: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) [ 2.173935] ACPI Warning: Incorrect checksum in table [OEMB] - C3, should be C2 (20090903/tbutils-314) [ 2.200371] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f602bf30), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.200380] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f602d2d0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.206433] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f742d018), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.206443] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f742d3a8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.222353] ACPI Error: [EABF] Namespace lookup failure, AE_ALREADY_EXISTS (20110112/dswload-802) [ 2.222362] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f602d018), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.222372] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f602d3a8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.227407] ACPI Error (psargs-0359): [GTF1] Namespace lookup failure, AE_NOT_FOUND [ 2.227411] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node f702b7b0), AE_NOT_FOUND [ 2.227454] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node f702b7c8), AE_NOT_FOUND [ 2.229498] ACPI Warning: Incorrect checksum in table [TAMG] - 0xC6, should be 0xC5 (20100428/tbutils-314) [ 2.231431] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f602bf60), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.231442] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f602d300), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.250291] ACPI Error: Method parse/execution failed [_SB_.BAT1.UBIF] (Node ffff88013762f550), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.250306] ACPI Error: Method parse/execution failed [_SB_.BAT1._BIF] (Node ffff88013762f500), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.270835] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ffff880125e2c708), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.280398] ACPI Error (dswload-0781): [_T_0] Namespace lookup failure, AE_ALREADY_EXISTS [ 2.280410] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.BAT1.UBIF] (Node ffff8800b3c2e100), AE_ALREADY_EXISTS [ 2.280443] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.BAT1._BIF] (Node ffff8800b3c2e0c0), AE_ALREADY_EXISTS [ 2.283579] ACPI Error (psargs-0359): [_T_0] Namespace lookup failure, AE_NOT_FOUND [ 2.283585] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.BAT1.UBIF] (Node ffff8800b3c2e100), AE_NOT_FOUND [ 2.283615] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._Q09] (Node ffff8800b3c410e0), AE_NOT_FOUND [ 2.288649] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node ffff88023f45dcd0), AE_NOT_FOUND (20110112/psparse-536) [ 2.288685] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node ffff88023f45dcf8), AE_NOT_FOUND (20110112/psparse-536) [ 2.294251] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f742bf30), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.294262] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f742d2d0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.324547] ACPI Error: [EABF] Namespace lookup failure, AE_ALREADY_EXISTS (20110413/dswload2-316) [ 2.324556] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f742d018), AE_ALREADY_EXISTS (20110413/psparse-536) [ 2.324566] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f742d3a8), AE_ALREADY_EXISTS (20110413/psparse-536) [ 2.334361] ACPI Error: Attempt to CreateField of length zero (20110112/dsopcode-529) [ 2.334370] ACPI Error: Method parse/execution failed [_SB_.PCI0.IDE0.RATA] (Node ffff8801376322a8), AE_AML_OPERAND_VALUE (20110112/psparse-536) [ 2.334384] ACPI Error: Method parse/execution failed [_SB_.PCI0.IDE0.PRT1._GTF] (Node ffff880137632438), AE_AML_OPERAND_VALUE (20110112/psparse-536) [ 2.336604] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node ffff88013b63c460), AE_AML_PACKAGE_LIMIT [ 2.384172] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node ffff8801c305dcd0), AE_NOT_FOUND (20110112/psparse-536) [ 2.384189] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node ffff8801c305dcf8), AE_NOT_FOUND (20110112/psparse-536) [ 2.440684] ACPI Error (psargs-0359): [SMS_] Namespace lookup failure, AE_NOT_FOUND [ 2.440692] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SATA.PRT0._SDD] (Node ffff88007db30c60), AE_NOT_FOUND [ 2.462687] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node ffff880147646cd0), AE_NOT_FOUND (20110112/psparse-536) [ 2.462711] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node ffff880147646cf8), AE_NOT_FOUND (20110112/psparse-536) [ 2.468708] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._PDC] (Node f700f180), AE_INVALID_TABLE_LENGTH [ 2.468963] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU2._PDC] (Node f700f240), AE_INVALID_TABLE_LENGTH [ 2.478380] [Firmware Bug]: ACPI(NGFX) defines _DOD but not _DOS [ 2.592359] ACPI Error: Method parse/execution failed [_PR_.CPU0.PPC_] (Node ffff88014f9a4140), AE_NOT_FOUND (20110112/psparse-536) [ 2.592381] ACPI Error: Method parse/execution failed [_PR_.CPU0._PPC] (Node ffff88014f9a4028), AE_NOT_FOUND (20110112/psparse-536) [ 2.593071] ACPI Error: Method parse/execution failed [_PR_.CPU1._PPC] (Node ffff88014f9a4118), AE_NOT_FOUND (20110112/psparse-536) [ 2.593648] ACPI Error: Method parse/execution failed [_PR_.CPU2._PPC] (Node ffff88014f9a4370), AE_NOT_FOUND (20110112/psparse-536) [ 2.593935] ACPI Error: Method parse/execution failed [_PR_.CPU3._PPC] (Node ffff88014f9a42d0), AE_NOT_FOUND (20110112/psparse-536) [ 2.634350] ACPI Error: [GTF1] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 2.634355] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node f3431af8), AE_NOT_FOUND (20110112/psparse-536) [ 2.634373] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node f3431b10), AE_NOT_FOUND (20110112/psparse-536) [ 2.671117] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f2c2d018), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.671128] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f2c2d3a8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.701908] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node f3831af8), AE_NOT_FOUND (20110112/psparse-536) [ 2.701933] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node f3831b10), AE_NOT_FOUND (20110112/psparse-536) [ 2.771747] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node f402bf60), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.771758] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node f402d300), AE_ALREADY_EXISTS (20110112/psparse-536) [ 2.787172] ACPI Warning: For _SB_.PCI0.P0P1._PRT: Return Package has no elements (empty) (20110112/nspredef-456) [ 2.823916] ACPI Warning: _BQC returned an invalid level 20090521 video-629 [ 2.837958] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node f7431858), AE_NOT_FOUND (20110112/psparse-536) [ 2.837994] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node f7431870), AE_NOT_FOUND (20110112/psparse-536) [ 2.838171] ACPI Warning for _SB_.BAT0._BIF: Return Package type mismatch at index 9 - found [NULL Object Descriptor], expected String/Buffer (20090903/nspredef-1012) [ 2.851027] ACPI Warning: _BQC returned an invalid level (20110316/video-473) [ 2.860339] ACPI Error: Method parse/execution failed [_SB_.C003.C098._DOD] (Node f4427588), AE_AML_PACKAGE_LIMIT (20110413/psparse-536) [ 2.861808] ACPI Error: [_SB_.PCI0.GFX0.DD02._BCL] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 2.861812] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEG0.PEGP.DD02._BCL] (Node ffff88015746e168), AE_NOT_FOUND (20110112/psparse-536) [ 2.870589] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node ffff880137632c80), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 2.906610] ACPI Warning: For _SB_.PCI0.P0P2.PEGP._DOD: Return type mismatch - found Integer, expected Package (20110413/nspredef-1053) [ 2.949708] ACPI Error: Field [CDW3] at 96 exceeds Buffer [NULL] size 64 (bits) (20110112/dsopcode-597) [ 2.949716] ACPI Error: Method parse/execution failed [_SB_._OSC] (Node ffff880297016ca8), AE_AML_BUFFER_LIMIT (20110112/psparse-536) [ 3.005123] ACPI Error (psparse-0537): Method parse/execution failed [_SB_._OSC] (Node ffff88122fc1ea00), AE_NOT_FOUND [ 3.033154] ACPI Warning: Incorrect checksum in table [OEMB] - 0x87, should be 0x84 (20100428/tbutils-314) [ 3.112435] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node f74257c8), AE_NOT_FOUND [ 3.112465] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node f742c210), AE_NOT_FOUND [ 3.112494] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node f7427a20), AE_NOT_FOUND [ 3.112522] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node f74279d8), AE_NOT_FOUND [ 3.112549] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node f7427690), AE_NOT_FOUND [ 3.139648] [Firmware Bug]: ACPI(XVS0) defines _DOD but not _DOS [ 3.208822] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.C003.C098._DOD] (Node ffff88007cf30b60), AE_AML_PACKAGE_LIMIT [ 3.223518] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node ffff880236c469a0), AE_AML_PACKAGE_LIMIT [ 3.382436] ACPI Warning: Incorrect checksum in table [TCPA] - 00, should be 7F (20090903/tbutils-314) [ 3.382442] ACPI Warning: Incorrect checksum in table [_RAT] - 00, should be 63 (20090903/tbutils-314) [ 3.420672] ACPI Warning for _TZ_.THRM._PSL: Return Package type mismatch at index 0 - found Processor, expected Reference (20100428/nspredef-1059) [ 3.480092] ACPI Warning for _SB_.PCI0.SAT0.PRT0._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) [ 3.490098] ACPI Warning for _SB_.PCI0.SAT0.PRT1._GTF: Return type mismatch - found Integer, expected Buffer (20090903/nspredef-1006) [ 3.490832] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PMI0._GHL] (Node ffff88013bc2bdc0), AE_AML_BUFFER_LIMIT [ 3.490852] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PMI0._PMC] (Node ffff88013bc2bd40), AE_AML_BUFFER_LIMIT [ 3.502273] ACPI Error: Could not enable SleepButton event (20100428/evxfevnt-205) [ 3.601126] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node f7420690), AE_AML_PACKAGE_LIMIT [ 3.644168] ACPI Warning: Incorrect checksum in table [TCPA] - 0xF8, should be 0x9C (20110413/tbutils-314) [ 3.663829] [Firmware Bug]: ACPI(GFX0) defines _DOD but not _DOS [ 3.675814] ACPI Error: Evaluating _BCM failed (20100428/video-532) [ 3.868794] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._SDD] (Node f3831b58), AE_NOT_FOUND (20110112/psparse-536) [ 3.868812] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT0._GTF] (Node f3831b70), AE_NOT_FOUND (20110112/psparse-536) [ 3.983031] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node ffff88021d459028), AE_ALREADY_EXISTS (20110112/psparse-536) [ 3.983040] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node ffff88021d459618), AE_ALREADY_EXISTS (20110112/psparse-536) [ 4.002664] [Firmware Bug]: ACPI(EVGA) defines _DOD but not _DOS [ 4.046031] ACPI Warning: Incorrect checksum in table [OEMB] - 4A, should be 47 (20090903/tbutils-314) [ 4.115197] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node ffff88021d458eb0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 4.115206] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node ffff88021d4594b0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 4.190434] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node ffff8801376342f8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 4.198699] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._SDD] (Node f3831c00), AE_NOT_FOUND (20110112/psparse-536) [ 4.198716] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT0.PRT1._GTF] (Node f3831c18), AE_NOT_FOUND (20110112/psparse-536) [ 4.230508] ACPI Exception: AE_TIME, Returned by Handler for [EmbeddedControl] (20090903/evregion-424) [ 4.230527] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ISAB.ECDV.ECR1] (Node f7018ed0), AE_TIME [ 4.230612] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ISAB.ECDV.ECR2] (Node f7018ee8), AE_TIME [ 4.230643] ACPI Error (psparse-0537): Method parse/execution failed [ECRW] (Node f7018fa8), AE_TIME [ 4.230672] ACPI Error (psparse-0537): Method parse/execution failed [ECG1] (Node f7018fd8), AE_TIME [ 4.230701] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node f70186f0), AE_TIME [ 4.230730] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ISAB.ECDV._Q66] (Node f7018eb8), AE_TIME [ 4.576415] ACPI Error: No handler for Region [ERAM] (f4830d50) [EmbeddedControl] (20110112/evregion-369) [ 4.576437] ACPI Error: Method parse/execution failed [_SB_.PCI0.SBRG.EC0_._REG] (Node f48326d8), AE_NOT_EXIST (20110112/psparse-536) [ 4.638115] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node ffff880220c5b028), AE_ALREADY_EXISTS (20110413/psparse-536) [ 4.638127] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node ffff880220c5b618), AE_ALREADY_EXISTS (20110413/psparse-536) [ 4.838935] ACPI Error (psparse-0537): Method parse/execution failed [_TZ_.C2E8] (Node f701b108), AE_AML_PACKAGE_LIMIT [ 4.838984] ACPI Error (psparse-0537): Method parse/execution failed [_TZ_.C2E7] (Node f701b0f0), AE_AML_PACKAGE_LIMIT [ 4.839033] ACPI Error (psparse-0537): Method parse/execution failed [_TZ_.TZ2_._TMP] (Node f701b7c8), AE_AML_PACKAGE_LIMIT [ 4.890970] ACPI Error: Method parse/execution failed [_SB_.EEAC] (Node ffff880126e43f50), AE_ALREADY_EXISTS (20110413/psparse-536) [ 4.890980] ACPI Error: Method parse/execution failed [_SB_.BAT2._STA] (Node ffff880126e44550), AE_ALREADY_EXISTS (20110413/psparse-536) [ 4.983204] [Firmware Bug]: ACPI(MXM3) defines _DOD but not _DOS [ 5.150560] ACPI Warning for _SB_.BAT0._BIF: Return Package type mismatch at index 12 - found Integer, expected String/Buffer (20090903/nspredef-1012) [ 5.332663] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node f4425450), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 6.224974] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD_.GBQC] (Node f3423438), AE_ALREADY_EXISTS (20110112/psparse-536) [ 6.224987] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD_._BQC] (Node f3423420), AE_ALREADY_EXISTS (20110112/psparse-536) [ 6.227917] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD1.GBQC] (Node f34235b8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 6.227930] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD1._BQC] (Node f34235a0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 6.732287] ACPI Error: [_T_0] Namespace lookup failure, AE_ALREADY_EXISTS (20110112/dswload-802) [ 6.732310] ACPI Error: Method parse/execution failed [_SB_.BAT1.UBIF] (Node dd028fc0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 6.732334] ACPI Error: Method parse/execution failed [_SB_.BAT1._BIF] (Node dd028f90), AE_ALREADY_EXISTS (20110112/psparse-536) [ 6.773266] ACPI Error: [CAPB] Namespace lookup failure, AE_ALREADY_EXISTS (20101013/dsfield-143) [ 6.773285] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node ddc25ca8), AE_ALREADY_EXISTS (20101013/psparse-537) [ 7.365139] ACPI Error: No handler for Region [IPMI] (ffff8805ffa37240) [IPMI] (20110112/evregion-369) [ 7.365150] ACPI Error: Region IPMI(0x7) has no handler (20110112/exfldio-292) [ 7.365161] ACPI Error: Method parse/execution failed [_SB_.PMI0._GHL] (Node ffff8805ffa36b18), AE_NOT_EXIST (20110112/psparse-536) [ 7.365181] ACPI Error: Method parse/execution failed [_SB_.PMI0._PMC] (Node ffff8805ffa36a78), AE_NOT_EXIST (20110112/psparse-536) [ 8.137284] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node f702e720), AE_TIME [ 8.137317] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node f702e7f8), AE_TIME [ 8.137344] ACPI Error (psparse-0537): Method parse/execution failed [EC0A] (Node f702ea08), AE_TIME [ 8.137370] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AMW0._WED] (Node f7019ca8), AE_TIME [ 8.227953] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.C003.C098._DOD] (Node f7021588), AE_AML_PACKAGE_LIMIT [ 8.316300] [Firmware Bug]: ACPI(VGA0) defines _DOD but not _DOS [ 8.794633] ACPI Error: Method parse/execution failed [_SB_.PCI0._OSC] (Node f5824ab0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 9.141980] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node f702e690), AE_TIME [ 9.142017] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node f702e768), AE_TIME [ 9.142046] ACPI Error (psparse-0537): Method parse/execution failed [EC0A] (Node f702e978), AE_TIME [ 9.142076] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AMW0._WED] (Node f7019420), AE_TIME [ 9.267040] ACPI Warning for _SB_.SPM_._PMD: Return Package type mismatch at index 0 - found String, expected Reference (20090903/nspredef-1012) [ 9.391036] ACPI Error: Method parse/execution failed [_SB_.PCI0.IBCM] (Node f3828738), AE_AML_BUFFER_LIMIT (20110112/psparse-536) [ 9.391049] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD03._BCM] (Node f3824b28), AE_AML_BUFFER_LIMIT (20110112/psparse-536) [ 9.391061] ACPI Error: Evaluating _BCM failed (20110112/video-365) [ 9.393479] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88012d8cfee8 (20110112/exresop-590) [ 9.393498] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02.GBQC] (Node ffff88012f83e6b8), AE_AML_OPERAND_TYPE (20110112/psparse-536) [ 9.393510] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02._BQC] (Node ffff88012f83e690), AE_AML_OPERAND_TYPE (20110112/psparse-536) [ 9.394098] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88012d8cfd38 (20110112/exresop-590) [ 9.394109] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02.SBCM] (Node ffff88012f83e6e0), AE_AML_OPERAND_TYPE (20110112/psparse-536) [ 9.394118] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02._BCM] (Node ffff88012f83e668), AE_AML_OPERAND_TYPE (20110112/psparse-536) [ 9.957372] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT1.CHN0._GTM] (Node ffff88007af33780), AE_NOT_FOUND (20110112/psparse-536) [ 9.957372] ACPI Error: Method parse/execution failed [_SB_.PCI0.SAT1.CHN1._GTM] (Node ffff88007af33910), AE_NOT_FOUND (20110112/psparse-536) [ 9.957372] ACPI Error: Method parse/execution failed [_SB_.PCI0.SATA.CHN0._GTM] (Node ffff88007af32b68), AE_NOT_FOUND (20110112/psparse-536) [ 9.957372] ACPI Error: Method parse/execution failed [_SB_.PCI0.SATA.CHN1._GTM] (Node ffff88007af32cf8), AE_NOT_FOUND (20110112/psparse-536) [ 10.080352] [Firmware Bug]: ACPI(VGA) defines _DOD but not _DOS [ 10.120967] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88023bcba438 (20110112/exresop-590) [ 10.120977] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DSM] (Node ffff88023f45edc0), AE_AML_OPERAND_TYPE (20110112/psparse-536) [ 10.121007] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88023bcba1b0 (20110112/exresop-590) [ 10.121018] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEG0.GFX0._DSM] (Node ffff88023f474370), AE_AML_OPERAND_TYPE (20110112/psparse-536) [ 10.194089] ACPI Warning for _SB_.PCI0.PCIB._PRT: Return Package has no elements (empty) (20100428/nspredef-456) [ 10.289821] ACPI Error (psargs-0359): [_PR_.CPU0._CST] Namespace lookup failure, AE_NOT_FOUND [ 10.289828] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.CPU1._CST] (Node f70c3288), AE_NOT_FOUND [ 10.344782] ACPI Error: SMBus or IPMI write requires Buffer of length 42, found length 20 (20090903/exfield-286) [ 10.344788] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PMI0._GHL] (Node ffff88122fc1ece0), AE_AML_BUFFER_LIMIT [ 10.344812] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PMI0._PMC] (Node ffff88122fc1ec60), AE_AML_BUFFER_LIMIT [ 10.380244] ACPI Warning (nspredef-0357): _SB_.PCI0.VID2._DOD: Return Package has no elements (empty) [20080926] [ 10.680422] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02._BCM] (Node ffff880117642ed8), AE_AML_INFINITE_LOOP (20110112/psparse-536) [ 10.692650] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR2] (Node f702e738), AE_TIME [ 10.692684] ACPI Error (psparse-0537): Method parse/execution failed [ECRW] (Node f702e810), AE_TIME [ 10.692710] ACPI Error (psparse-0537): Method parse/execution failed [ECG1] (Node f702e840), AE_TIME [ 10.692735] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node f702ea50), AE_TIME [ 10.692761] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node f702e708), AE_TIME [ 10.708822] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node f7427738), AE_TIME [ 10.708876] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node f7427810), AE_TIME [ 10.708908] ACPI Error (psparse-0537): Method parse/execution failed [EC0A] (Node f7427a20), AE_TIME [ 10.708939] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AMW0._WED] (Node f742c078), AE_TIME [ 10.724353] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node ffff880213050d00), AE_TIME [ 10.724416] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node ffff880213050e20), AE_TIME [ 10.724449] ACPI Error (psparse-0537): Method parse/execution failed [EC0A] (Node ffff8802130520e0), AE_TIME [ 10.724482] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AMW0._WED] (Node ffff8802130573c0), AE_TIME [ 11.195653] ACPI Error (psparse-0537): Method parse/execution failed [ECG5] (Node f702e8a0), AE_TIME [ 11.195680] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node f702ec90), AE_TIME [ 11.383565] ACPI Error: Method parse/execution failed [_SB_.C003.C098._DOD] (Node ffff880137636938), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 11.660551] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR2] (Node f702e6a8), AE_TIME [ 11.660591] ACPI Error (psparse-0537): Method parse/execution failed [ECRW] (Node f702e780), AE_TIME [ 11.660615] ACPI Error (psparse-0537): Method parse/execution failed [ECG1] (Node f702e7b0), AE_TIME [ 11.660638] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node f702e9c0), AE_TIME [ 11.660661] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node f702e678), AE_TIME [ 11.800514] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node ffff8801376342a8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 11.880473] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88012125f558 (20110413/exresop-590) [ 11.880998] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88012125f3a8 (20110413/exresop-590) [ 11.915871] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.SWFS] (Node ffff880226c49320), AE_AML_INFINITE_LOOP [ 11.915905] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.RBYT] (Node ffff880226c493c0), AE_AML_INFINITE_LOOP [ 11.915932] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ASOC.SECV] (Node ffff880226c4a0e0), AE_AML_INFINITE_LOOP [ 11.915960] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ASOC.RVLT] (Node ffff880226c49b00), AE_AML_INFINITE_LOOP [ 12.160904] ACPI Error (psparse-0537): Method parse/execution failed [ECG5] (Node f702e810), AE_TIME [ 12.160929] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node f702ec00), AE_TIME [ 12.167076] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff8800b1753048 (20090903/exresop-590) [ 12.167089] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0.DD02.GBQC] (Node ffff8800b3c44ca0), AE_AML_OPERAND_TYPE [ 12.167143] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0.DD02._BQC] (Node ffff8800b3c44c80), AE_AML_OPERAND_TYPE [ 12.167205] ACPI Warning: Evaluating _BQC failed (20090903/video-641) [ 12.242368] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88012ea6e6c0 (20110413/exresop-590) [ 12.242387] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02.GBQC] (Node ffff88013113f6b8), AE_AML_OPERAND_TYPE (20110413/psparse-536) [ 12.242397] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02._BQC] (Node ffff88013113f690), AE_AML_OPERAND_TYPE (20110413/psparse-536) [ 12.242409] ACPI Warning: Evaluating _BQC failed (20110413/video-484) [ 12.242974] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88012ea6e5e8 (20110413/exresop-590) [ 12.242986] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02.SBCM] (Node ffff88013113f6e0), AE_AML_OPERAND_TYPE (20110413/psparse-536) [ 12.242994] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0.DD02._BCM] (Node ffff88013113f668), AE_AML_OPERAND_TYPE (20110413/psparse-536) [ 12.243002] ACPI Error: Evaluating _BCM failed (20110413/video-365) [ 12.361137] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.C003.C09D._DOD] (Node ffff88013b630c00), AE_AML_PACKAGE_LIMIT [ 12.390421] ACPI Error (psparse-0537): Method parse/execution failed [ECG5] (Node ffff880213050f00), AE_TIME [ 12.390446] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node ffff880213052440), AE_TIME [ 12.553637] ACPI Warning: For _SB_.PCI0.P0P2.PEGP._DOD: Return type mismatch - found Integer, expected Package (20110112/nspredef-1053) [ 12.838979] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain ACPI Exception: AE_TIME, Returned by Handler for [EmbeddedControl] (20110112/evregion-474) [ 12.841008] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain ACPI Warning: _BQC returned an invalid level (20110112/video-473) [ 13.024512] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node f7425450), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 13.396787] ACPI Error: Method parse/execution failed [_SB_.ADP1._PSR] (Node ffff88011763ba00), AE_TIME (20110112/psparse-536) [ 13.445954] ACPI Error: Field [D128] at 1040 exceeds Buffer [NULL] size 160 (bits) (20110112/dsopcode-597) [ 13.445980] ACPI Error: Method parse/execution failed [_SB_.WMID.HWMC] (Node f742a8b8), AE_AML_BUFFER_LIMIT (20110112/psparse-536) [ 13.446019] ACPI Error: Method parse/execution failed [_SB_.WMID.WMAD] (Node f742aac8), AE_AML_BUFFER_LIMIT (20110112/psparse-536) [ 13.452167] ACPI Error (psargs-0359): [_PR_.C001] Namespace lookup failure, AE_NOT_FOUND [ 13.452177] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_.TPAF] (Node f702bde0), AE_NOT_FOUND [ 13.452213] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_.TBOM] (Node f702bdf8), AE_NOT_FOUND [ 13.452247] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPC0.EC0_._Q1D] (Node f702ba98), AE_NOT_FOUND [ 14.013275] ACPI Warning: _BQC returned an invalid level (20110112/video-473) [ 14.175645] ACPI Error: Method parse/execution failed [_SB_.PCI0.OVGA.DD03.GBQC] (Node f44247e0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 14.175656] ACPI Error: Method parse/execution failed [_SB_.PCI0.OVGA.DD03._BQC] (Node f44247c8), AE_ALREADY_EXISTS (20110112/psparse-536) [ 14.175667] ACPI Warning: Evaluating _BQC failed (20110112/video-484) [ 14.885219] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88013c6b58b8 (20110112/exresop-590) [ 14.885234] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DSM] (Node ffff88013f849eb0), AE_AML_OPERAND_TYPE (20110112/psparse-536) [ 14.885277] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88013c6b5828 (20110112/exresop-590) [ 14.885289] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEG1.GFX0._DSM] (Node ffff88013f86f668), AE_AML_OPERAND_TYPE (20110112/psparse-536) [ 15.027464] ACPI Error (psparse-0537): Method parse/execution failed [_PR_.PPCE] (Node ffff880075137920), AE_NOT_FOUND [ 15.027505] ACPI Error (psparse-0537): Method parse/execution failed [EV4_] (Node ffff880075140660), AE_NOT_FOUND [ 15.027542] ACPI Error (psparse-0537): Method parse/execution failed [SMIE] (Node ffff88007513b180), AE_NOT_FOUND [ 15.027579] ACPI Error (psparse-0537): Method parse/execution failed [NEVT] (Node ffff88007513b120), AE_NOT_FOUND [ 15.027616] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV._Q66] (Node ffff880075139cc0), AE_NOT_FOUND [ 15.287082] ACPI Warning: _BQC returned an invalid level (20100428/video-640) [ 15.395484] [Firmware Bug]: ACPI(PEGP) defines _DOD but not _DOS [ 15.846531] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node ffff8800b3840360), AE_AML_PACKAGE_LIMIT [ 16.336080] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.EC0_._Q33] (Node f70244b0), AE_TIME [ 16.592600] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ASOC.SEFA] (Node ffff880226c4a120), AE_AML_INFINITE_LOOP [ 16.592628] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.ASOC.RFAN] (Node ffff880226c49bc0), AE_AML_INFINITE_LOOP [ 16.719798] ACPI Warning for _SB_.PCI0.VID2._DOD: Return Package has no elements (empty) (20090903/nspredef-433) [ 16.942589] ACPI Error (dswload-0802): [_T_0] Namespace lookup failure, AE_ALREADY_EXISTS [ 16.942606] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.OVGA.DD03.GBQC] (Node ffff8800b7e3c6e0), AE_ALREADY_EXISTS [ 16.942654] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.OVGA.DD03._BQC] (Node ffff8800b7e3c6c0), AE_ALREADY_EXISTS [ 17.125601] ACPI Error: Needed [Buffer/String/Package], found [Integer] eee27810 (20110112/exresop-590) [ 17.125618] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DSM] (Node f7431fa8), AE_AML_OPERAND_TYPE (20110112/psparse-536) [ 17.125669] ACPI Error: Needed [Buffer/String/Package], found [Integer] eee27780 (20110112/exresop-590) [ 17.125690] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEG1.GFX0._DSM] (Node f7445c78), AE_AML_OPERAND_TYPE (20110112/psparse-536) [ 17.802564] ACPI Error: Method parse/execution failed [_SB_.WMID.HWMC] (Node ffff8801ffc5c078), AE_AML_BUFFER_LIMIT (20110112/psparse-536) [ 17.802574] ACPI Error: Method parse/execution failed [_SB_.WMID.WMAD] (Node ffff8801ffc5c258), AE_AML_BUFFER_LIMIT (20110112/psparse-536) [ 17.847665] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEG0.PEGP.DD02._BCL] (Node f444ebe8), AE_NOT_FOUND (20110112/psparse-536) [ 17.985672] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.IBCM] (Node ffff8800b3832600), AE_AML_BUFFER_LIMIT [ 17.985723] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0.DD03._BCM] (Node ffff8800b382b840), AE_AML_BUFFER_LIMIT [ 18.054842] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff880133a777e0 (20110112/exresop-590) [ 18.054860] ACPI Error: Method parse/execution failed [_SB_.PCI0.VGA_._DSM] (Node ffff880137659190), AE_AML_OPERAND_TYPE (20110112/psparse-536) [ 18.054909] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff880133a776c0 (20110112/exresop-590) [ 18.054932] ACPI Error: Method parse/execution failed [_SB_.PCI0.P0P1.VGA_._DSM] (Node ffff88013765d230), AE_AML_OPERAND_TYPE (20110112/psparse-536) [ 18.353938] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD_.GBQC] (Node ffff88013762f708), AE_ALREADY_EXISTS (20110112/psparse-536) [ 18.353954] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD_._BQC] (Node ffff88013762f6e0), AE_ALREADY_EXISTS (20110112/psparse-536) [ 18.367485] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD1.GBQC] (Node ffff88013762f988), AE_ALREADY_EXISTS (20110112/psparse-536) [ 18.367501] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEGP.VGA_.LCD1._BQC] (Node ffff88013762f960), AE_ALREADY_EXISTS (20110112/psparse-536) [ 18.720899] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node f70206d8), AE_AML_PACKAGE_LIMIT [ 19.086127] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node f702e6a8), AE_TIME [ 19.086176] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node f702e780), AE_TIME [ 19.086202] ACPI Error (psparse-0537): Method parse/execution failed [EC0A] (Node f702e990), AE_TIME [ 19.086228] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AMW0._WED] (Node f7019fd8), AE_TIME [ 19.408610] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node f74256a8), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 20.135790] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88023b491318 (20110316/exresop-590) [ 20.135804] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DSM] (Node ffff88023ec61eb0), AE_AML_OPERAND_TYPE (20110316/psparse-536) [ 20.135849] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff88023b491708 (20110316/exresop-590) [ 20.135864] ACPI Error: Method parse/execution failed [_SB_.PCI0.PEG1.GFX0._DSM] (Node ffff88023ec77668), AE_AML_OPERAND_TYPE (20110316/psparse-536) [ 20.149010] ACPI Error: Needed [Integer/String/Buffer], found [Package] f741ed48 (20100428/exresop-422) [ 20.149032] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.P0P2.PEGP.LCD_._BQC] (Node f741f978), AE_AML_OPERAND_TYPE [ 20.149063] ACPI Warning: Evaluating _BQC failed (20100428/video-651) [ 20.298134] [Firmware Bug]: _BCQ is used instead of _BQC [ 20.342464] ACPI Warning: _BQC returned an invalid level (20110413/video-473) [ 20.435766] [Firmware Bug]: Duplicate ACPI video bus devices for the same VGA controller, please try module parameter "video.allow_duplicates=1"if the current driver doesn't work. [ 20.634744] ACPI Warning for _SB_.PCI0.GFX0.DD02._BQC: Return type mismatch - found Reference, expected Integer (20100428/nspredef-1053) [ 21.460488] ACPI Error: Method parse/execution failed [_SB_.PCI0.GFX0._DOD] (Node ffff880133632c80), AE_AML_PACKAGE_LIMIT (20110112/psparse-536) [ 21.562484] ACPI Error: Needed [Buffer/String/Package], found [Integer] f7260370 (20090903/exresop-590) [ 21.562496] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0.DD02.GBQC] (Node f7017a68), AE_AML_OPERAND_TYPE [ 21.562544] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.GFX0.DD02._BQC] (Node f7017a50), AE_AML_OPERAND_TYPE [ 22.154348] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node f74276a8), AE_TIME [ 22.154443] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node f7427780), AE_TIME [ 22.154516] ACPI Error (psparse-0537): Method parse/execution failed [ECG5] (Node f7427828), AE_TIME [ 22.154587] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node f7427c18), AE_TIME [ 24.824888] [Firmware Bug]: ACPI(IGPU) defines _DOD but not _DOS [ 25.859931] ACPI Error: Needed [Buffer/String/Package], found [Integer] ffff880139af5240 (20090903/exresop-590) [ 25.859949] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.VGA_._DSM] (Node ffff88013ba4c0e0), AE_AML_OPERAND_TYPE [ 25.860025] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.P0P1.VGA_._DSM] (Node ffff88013ba4da80), AE_AML_OPERAND_TYPE [ 26.653079] ACPI Exception: AE_TIME, Returned by Handler for [EmbeddedControl] (20100428/evregion-474) [ 26.653190] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node ffff880226c54ce0), AE_TIME [ 26.653252] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node ffff880226c54e00), AE_TIME [ 26.653283] ACPI Error (psparse-0537): Method parse/execution failed [ECG5] (Node ffff880226c54ee0), AE_TIME [ 26.653307] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node ffff880226c56420), AE_TIME [ 26.874386] ACPI Warning: _BQC returned an invalid level (20090903/video-631) [ 29.470614] ACPI Warning for _SB_.PCI0.GFX0.DD03._BQC: Return type mismatch - found Reference, expected Integer (20100428/nspredef-1053) [ 30.140339] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.PCI0.LPCB.ECDV.ECR1] (Node ffff880217050ce0), AE_TIME [ 30.140421] ACPI Error (psparse-0537): Method parse/execution failed [ECRB] (Node ffff880217050e00), AE_TIME [ 30.140448] ACPI Error (psparse-0537): Method parse/execution failed [ECG5] (Node ffff880217050ee0), AE_TIME [ 30.140475] ACPI Error (psparse-0537): Method parse/execution failed [_SB_.AC__._PSR] (Node ffff880217052420), AE_TIME [ 42.490181] ACPI Error: [_SB_.VDRV] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) [ 42.490202] ACPI Error: Method parse/execution failed [_SB_.PCI0.LPC0.H_EC._Q51] (Node ffff88003d9b1e60), AE_NOT_FOUND (20110112/psparse-536) [ 44.661543] ACPI Warning for _SB_.PCI0.GFX0.DD01._BCL: Return type mismatch - found Integer, expected Package (20090903/nspredef-1006) [ 50.737630] ACPI Warning for _SB_.PCI0.AGP_.VID_.MXMI: Excess arguments - needs 1, found 2 (20090903/nspredef-303) [ 50.737686] ACPI Warning for _SB_.PCI0.AGP_.VID_.MXMS: Excess arguments - needs 1, found 2 (20090903/nspredef-303) fwts-test/klog-0001/test-0001.sh000077500000000000000000000006741465205512700162420ustar00rootroot00000000000000#!/bin/bash # TEST="Test klog against known failure patterns" NAME=test-0001.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/klog-0001/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/klog-0001/klog-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/klog-0001/test-0002.sh000077500000000000000000000007611465205512700162400ustar00rootroot00000000000000#!/bin/bash # TEST="Test klog summary table against known failure patterns" NAME=test-0002.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/klog-0001/klog.txt klog - | grep summary | sed 's/line: [0-9]*//' | cut -c7- > $TMPLOG grep -v "log line:" $FWTSTESTDIR/klog-0001/klog-0002.log | diff $TMPLOG - >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/klog-0001/test-0003.sh000077500000000000000000000007041465205512700162360ustar00rootroot00000000000000#!/bin/bash # TEST="Test klog against known failure rate" NAME=test-0003.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/klog-0001/klog.txt klog - | grep "unique errors in kernel log" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/klog-0001/klog-0003.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/klog-0001/testcase.txt000066400000000000000000000000651465205512700167140ustar00rootroot00000000000000Test fwts klog test against real kernel log messages fwts-test/klog-0002/000077500000000000000000000000001465205512700143405ustar00rootroot00000000000000fwts-test/klog-0002/klog-0001.log000066400000000000000000000130761465205512700163640ustar00rootroot00000000000000klog klog: Scan kernel log for errors and warnings. klog ---------------------------------------------------------- klog Test 1 of 1: Kernel log error check. klog FAILED [HIGH] KlogThermalOverrun: Test 1, HIGH Kernel klog message: [ 0.408874] CPU1: Temperature above threshold, klog cpu clock throttled (total events = 1) klog klog ADVICE: Test caused CPU temperature above critical klog threshold. The CPU has been throttled to run slower klog because of over-heating above the critical threshold. CPU klog throttling will be turned off once the CPU has cooled klog sufficiently. Frequent throttling may indicate poor klog thermal design on the machine. klog klog FAILED [CRITICAL] KlogBiosIrqRoutingBug: Test 1, CRITICAL klog Kernel message: [ 0.728985] Disabling IRQ #15 klog klog ADVICE: The kernel detected an irq storm. This is most klog probably an IRQ routing bug. klog klog FAILED [CRITICAL] KlogBiosIrqRoutingBug: Test 1, CRITICAL klog Kernel message: [ 0.734767] Disabling IRQ #11 klog klog ADVICE: The kernel detected an irq storm. This is most klog probably an IRQ routing bug. klog klog FAILED [HIGH] KlogThermalOverrun: Test 1, HIGH Kernel klog message: [ 0.768555] CPU3: Temperature above threshold, klog cpu clock throttled (total events = 1) klog klog ADVICE: Test caused CPU temperature above critical klog threshold. The CPU has been throttled to run slower klog because of over-heating above the critical threshold. CPU klog throttling will be turned off once the CPU has cooled klog sufficiently. Frequent throttling may indicate poor klog thermal design on the machine. klog klog FAILED [HIGH] KlogThermalOverrun: Test 1, HIGH Kernel klog message: [ 1.128275] CPU5: Temperature above threshold, klog cpu clock throttled (total events = 1) klog klog ADVICE: Test caused CPU temperature above critical klog threshold. The CPU has been throttled to run slower klog because of over-heating above the critical threshold. CPU klog throttling will be turned off once the CPU has cooled klog sufficiently. Frequent throttling may indicate poor klog thermal design on the machine. klog klog FAILED [HIGH] KlogThermalOverrun: Test 1, HIGH Kernel klog message: [ 1.487778] CPU7: Temperature above threshold, klog cpu clock throttled (total events = 1) klog klog ADVICE: Test caused CPU temperature above critical klog threshold. The CPU has been throttled to run slower klog because of over-heating above the critical threshold. CPU klog throttling will be turned off once the CPU has cooled klog sufficiently. Frequent throttling may indicate poor klog thermal design on the machine. klog klog FAILED [CRITICAL] KlogBiosIrqRoutingBug: Test 1, CRITICAL klog Kernel message: [ 2.131632] Disabling IRQ #16 klog klog ADVICE: The kernel detected an irq storm. This is most klog probably an IRQ routing bug. klog klog FAILED [CRITICAL] KlogBiosIrqRoutingBug: Test 1, CRITICAL klog Kernel message: [ 3.220411] Disabling IRQ #18 klog klog ADVICE: The kernel detected an irq storm. This is most klog probably an IRQ routing bug. klog klog FAILED [HIGH] KlogThermalOverrun: Test 1, HIGH Kernel klog message: [ 10.027255] CPU0: Temperature above threshold, klog cpu clock throttled (total events = 1) klog klog ADVICE: Test caused CPU temperature above critical klog threshold. The CPU has been throttled to run slower klog because of over-heating above the critical threshold. CPU klog throttling will be turned off once the CPU has cooled klog sufficiently. Frequent throttling may indicate poor klog thermal design on the machine. klog klog FAILED [HIGH] KlogThermalOverrun: Test 1, HIGH Kernel klog message: [ 11.592319] CPU1: Temperature above threshold, klog cpu clock throttled (total events = 2) klog klog ADVICE: Test caused CPU temperature above critical klog threshold. The CPU has been throttled to run slower klog because of over-heating above the critical threshold. CPU klog throttling will be turned off once the CPU has cooled klog sufficiently. Frequent throttling may indicate poor klog thermal design on the machine. klog klog FAILED [CRITICAL] KlogBiosIrqRoutingBug: Test 1, CRITICAL klog Kernel message: [ 17.353310] Disabling IRQ #10 klog klog ADVICE: The kernel detected an irq storm. This is most klog probably an IRQ routing bug. klog klog Found 11 unique errors in kernel log. klog klog ========================================================== klog 0 passed, 11 failed, 0 warning, 0 aborted, 0 skipped, 0 klog info only. klog ========================================================== fwts-test/klog-0002/klog-0002.log000066400000000000000000000041021465205512700163530ustar00rootroot00000000000000summary summary 0 passed, 11 failed, 0 warning, 0 aborted, 0 skipped, 0 summary info only. summary summary Test Failure Summary summary ========================================================== summary summary Critical failures: 5 summary klog: CRITICAL Kernel message: [ 0.728985] Disabling IRQ #15 summary klog: CRITICAL Kernel message: [ 0.734767] Disabling IRQ #11 summary klog: CRITICAL Kernel message: [ 2.131632] Disabling IRQ #16 summary klog: CRITICAL Kernel message: [ 3.220411] Disabling IRQ #18 summary klog: CRITICAL Kernel message: [ 17.353310] Disabling IRQ #10 summary summary High failures: 6 summary klog: HIGH Kernel message: [ 0.408874] CPU1: Temperature above threshold, cpu clock throttled (total events = 1) summary klog: HIGH Kernel message: [ 0.768555] CPU3: Temperature above threshold, cpu clock throttled (total events = 1) summary klog: HIGH Kernel message: [ 1.128275] CPU5: Temperature above threshold, cpu clock throttled (total events = 1) summary klog: HIGH Kernel message: [ 1.487778] CPU7: Temperature above threshold, cpu clock throttled (total events = 1) summary klog: HIGH Kernel message: [ 10.027255] CPU0: Temperature above threshold, cpu clock throttled (total events = 1) summary klog: HIGH Kernel message: [ 11.592319] CPU1: Temperature above threshold, cpu clock throttled (total events = 2) summary summary Medium failures: NONE summary summary Low failures: NONE summary summary Other failures: NONE summary summary Test |Pass |Fail |Abort|Warn |Skip |Info | summary ---------------+-----+-----+-----+-----+-----+-----+ summary klog | | 11| | | | | summary ---------------+-----+-----+-----+-----+-----+-----+ summary Total: | 0| 11| 0| 0| 0| 0| summary ---------------+-----+-----+-----+-----+-----+-----+ fwts-test/klog-0002/klog-0003.log000066400000000000000000000000661465205512700163610ustar00rootroot00000000000000klog Found 11 unique errors in kernel log. fwts-test/klog-0002/klog.txt000066400000000000000000000012351465205512700160360ustar00rootroot00000000000000[ 0.408874] CPU1: Temperature above threshold, cpu clock throttled (total events = 1) [ 0.728985] Disabling IRQ #15 [ 0.734767] Disabling IRQ #11 [ 0.768555] CPU3: Temperature above threshold, cpu clock throttled (total events = 1) [ 1.128275] CPU5: Temperature above threshold, cpu clock throttled (total events = 1) [ 1.487778] CPU7: Temperature above threshold, cpu clock throttled (total events = 1) [ 2.131632] Disabling IRQ #16 [ 3.220411] Disabling IRQ #18 [ 10.027255] CPU0: Temperature above threshold, cpu clock throttled (total events = 1) [ 11.592319] CPU1: Temperature above threshold, cpu clock throttled (total events = 2) [ 17.353310] Disabling IRQ #10 fwts-test/klog-0002/test-0001.sh000077500000000000000000000007371465205512700162430ustar00rootroot00000000000000#!/bin/bash # TEST="Test klog against known common failure patterns (was the dmesg_common test)" NAME=test-0001.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/klog-0002/klog.txt klog - | grep "^[0-9]*[ ]*klog" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/klog-0002/klog-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/klog-0002/test-0002.sh000077500000000000000000000010071465205512700162330ustar00rootroot00000000000000#!/bin/bash # TEST="Test klog against known common failure patterns (was the dmesg_common test)" NAME=test-0002.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/klog-0002/klog.txt klog - | grep summary | sed 's/line: [0-9]*//' | cut -c7- > $TMPLOG grep -v "log line:" $FWTSTESTDIR/klog-0002/klog-0002.log | diff $TMPLOG - >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/klog-0002/test-0003.sh000077500000000000000000000007631465205512700162440ustar00rootroot00000000000000#!/bin/bash # TEST="Test klog against known common failure patterns (was the dmesg_common test)" NAME=test-0003.sh TMPLOG=$TMP/klog.log.$$ $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --klog=$FWTSTESTDIR/klog-0002/klog.txt klog - | grep "errors in kernel log" | grep "Found" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/klog-0002/klog-0003.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/klog-0002/testcase.txt000066400000000000000000000001141465205512700167100ustar00rootroot00000000000000Test klog against known common failure patterns (was the dmesg_common test) fwts-test/lpit-0001/000077500000000000000000000000001465205512700143535ustar00rootroot00000000000000fwts-test/lpit-0001/acpidump-0001.log000066400000000000000000000044271465205512700172450ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... LPIT @ 0x00000000 0000: 4c 50 49 54 94 00 00 00 01 c6 41 4d 44 20 20 20 LPIT......AMD 0010: 41 47 45 53 41 20 20 20 01 00 00 00 49 4e 54 4c AGESA ....INTL 0020: 05 01 18 20 00 00 00 00 38 00 00 00 00 00 00 00 ... ....8....... 0030: 00 00 00 00 7f 40 00 00 80 70 60 50 40 30 20 10 .....@...p`P@0 . 0040: 11 00 00 00 20 00 00 00 7f 40 00 00 80 70 60 50 .... ....@...p`P 0050: 40 30 20 10 a0 b0 00 00 00 00 00 00 00 00 00 00 @0 ............. 0060: 38 00 00 00 01 00 00 00 02 00 00 00 7f 40 00 00 8............@.. 0070: 80 70 60 50 40 30 20 f0 23 00 00 00 70 00 00 00 .p`P@0 .#...p... 0080: 7f 40 00 00 f0 70 60 50 40 30 20 f0 a0 b0 00 00 .@...p`P@0 ..... 0090: 00 00 00 00 .... fwts-test/lpit-0001/acpidump-0002.log000066400000000000000000000044271465205512700172460ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... LPIT @ 0x00000000 0000: 4c 50 49 54 94 00 00 00 01 f2 41 4d 44 20 20 20 LPIT......AMD 0010: 41 47 45 53 41 20 20 20 01 00 00 00 49 4e 54 4c AGESA ....INTL 0020: 05 01 18 20 00 00 00 00 38 00 00 00 01 00 00 00 ... ....8....... 0030: 01 00 00 00 7f 40 00 00 80 70 60 50 40 30 20 10 .....@...p`P@0 . 0040: 11 00 00 00 20 00 00 00 7f 10 00 00 80 70 60 50 .... ........p`P 0050: 40 30 20 10 a0 b0 00 00 00 00 00 00 00 00 00 00 @0 ............. 0060: 38 00 00 00 03 00 00 00 02 00 00 00 7f 40 00 00 8............@.. 0070: 80 70 60 50 40 30 20 f0 23 00 00 00 70 00 00 00 .p`P@0 .#...p... 0080: 7f 40 00 00 f0 70 60 50 40 30 20 f0 a0 b0 00 00 .@...p`P@0 ..... 0090: 00 00 00 00 .... fwts-test/lpit-0001/lpit-0001.log000066400000000000000000000045431465205512700164120ustar00rootroot00000000000000lpit lpit: LPIT Low Power Idle Table test. lpit ---------------------------------------------------------- lpit Test 1 of 1: LPIT Low Power Idle Table test. lpit Native C-state based LPI structure: lpit Type: 0x00000000 lpit Length: 0x00000038 lpit ID: 0x0000 lpit Reserved: 0x0000 lpit Flags: 0x00000000 lpit Entry Trigger: lpit Address Space ID: 0x7f lpit Register Bit Width 0x40 lpit Register Bit Offset 0x00 lpit Access Size 0x00 lpit Address 0x1020304050607080 lpit Residency: 0x00000011 lpit Latency: 0x00000020 lpit Residency Counter: lpit Address Space ID: 0x7f lpit Register Bit Width 0x40 lpit Register Bit Offset 0x00 lpit Access Size 0x00 lpit Address 0x1020304050607080 lpit Residency Counter Freq: 0x000000000000b0a0 lpit lpit Native C-state based LPI structure: lpit Type: 0x00000000 lpit Length: 0x00000038 lpit ID: 0x0001 lpit Reserved: 0x0000 lpit Flags: 0x00000002 lpit Entry Trigger: lpit Address Space ID: 0x7f lpit Register Bit Width 0x40 lpit Register Bit Offset 0x00 lpit Access Size 0x00 lpit Address 0xf020304050607080 lpit Residency: 0x00000023 lpit Latency: 0x00000070 lpit Residency Counter not available lpit lpit PASSED: Test 1, No issues found in LPIT table. lpit lpit ========================================================== lpit 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 lpit info only. lpit ========================================================== fwts-test/lpit-0001/lpit-0002.log000066400000000000000000000061471465205512700164150ustar00rootroot00000000000000lpit lpit: LPIT Low Power Idle Table test. lpit ---------------------------------------------------------- lpit Test 1 of 1: LPIT Low Power Idle Table test. lpit Native C-state based LPI structure: lpit Type: 0x00000000 lpit Length: 0x00000038 lpit ID: 0x0001 lpit Reserved: 0x0000 lpit Flags: 0x00000001 lpit Entry Trigger: lpit Address Space ID: 0x7f lpit Register Bit Width 0x40 lpit Register Bit Offset 0x00 lpit Access Size 0x00 lpit Address 0x1020304050607080 lpit Residency: 0x00000011 lpit Latency: 0x00000020 lpit Residency Counter: lpit Address Space ID: 0x7f lpit Register Bit Width 0x10 lpit Register Bit Offset 0x00 lpit Access Size 0x00 lpit Address 0x1020304050607080 lpit Residency Counter Freq: 0x000000000000b0a0 lpit lpit FAILED [LOW] LPITNativeCStateLpitResidencyCounterWidth: lpit Test 1, Native C-state based LPI structure Residency lpit Structure Register Bit Width was 16 for a FFH Address lpit Space (e.g. a MSR), and was expecting 64. lpit lpit FAILED [CRITICAL] LPITNativeCStateBadUID: Test 1, Unique lpit ID of Native C-state based LPI structure must start from lpit zero lpit Native C-state based LPI structure: lpit Type: 0x00000000 lpit Length: 0x00000038 lpit ID: 0x0003 lpit Reserved: 0x0000 lpit Flags: 0x00000002 lpit Entry Trigger: lpit Address Space ID: 0x7f lpit Register Bit Width 0x40 lpit Register Bit Offset 0x00 lpit Access Size 0x00 lpit Address 0xf020304050607080 lpit Residency: 0x00000023 lpit Latency: 0x00000070 lpit Residency Counter not available lpit lpit lpit FAILED [CRITICAL] LPITNativeCStateBadUID: Test 1, Unique lpit ID of Native C-state based LPI structure must start from lpit zero lpit FAILED [CRITICAL] LPITNativeCStateBadUID: Test 1, Unique lpit ID of Native C-state based LPI structure must be a lpit zero-based monotonically increasing value lpit lpit ========================================================== lpit 0 passed, 4 failed, 0 warning, 0 aborted, 0 skipped, 0 lpit info only. lpit ========================================================== fwts-test/lpit-0001/test-0001.sh000077500000000000000000000010011465205512700162370ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against LPIT" NAME=test-0001.sh TMPLOG=$TMP/lpit.log.$$ $FWTS --show-tests | grep LPIT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/lpit-0001/acpidump-0001.log lpit - | cut -c7- | grep "^lpit" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/lpit-0001/lpit-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/lpit-0001/test-0002.sh000077500000000000000000000010111465205512700162410ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid LPIT" NAME=test-0001.sh TMPLOG=$TMP/lpit.log.$$ $FWTS --show-tests | grep LPIT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/lpit-0001/acpidump-0002.log lpit - | cut -c7- | grep "^lpit" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/lpit-0001/lpit-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/madt-0001/000077500000000000000000000000001465205512700143305ustar00rootroot00000000000000fwts-test/madt-0001/acpidump-0001.log000066400000000000000000000024061465205512700172150ustar00rootroot00000000000000APIC @ 0xbf6dfcc6 0000: 41 50 49 43 68 00 00 00 01 cc 49 4e 54 45 4c 20 APICh.....INTEL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 4c 4f 48 52 CRESTLNE....LOHR 0020: 5a 00 00 00 00 00 e0 fe 01 00 00 00 00 08 00 00 Z............... 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0c 01 00 ................ 0040: 00 00 c0 fe 00 00 00 00 02 0a 00 00 02 00 00 00 ................ 0050: 00 00 02 0a 00 09 09 00 00 00 0d 00 04 06 00 05 ................ 0060: 00 01 04 06 01 05 00 01 ........ APIC @ 0xbf6dff70 0000: 41 50 49 43 68 00 00 00 01 13 50 54 4c 54 44 20 APICh.....PTLTD 0010: 09 20 41 50 49 43 20 20 00 00 04 06 20 4c 54 50 . APIC .... LTP 0020: 00 00 00 00 00 00 e0 fe 01 00 00 00 00 08 00 00 ................ 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0c 02 00 ................ 0040: 00 00 c0 fe 00 00 00 00 04 06 00 05 00 01 04 06 ................ 0050: 01 05 00 01 02 0a 00 00 02 00 00 00 05 00 02 0a ................ 0060: 00 09 09 00 00 00 0d 00 ........ RSD PTR @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... fwts-test/madt-0001/acpidump-0002.log000066400000000000000000000013651465205512700172210ustar00rootroot00000000000000APIC @ 0xbf6dfcc6 0000: 41 50 49 43 68 00 00 00 01 cc 49 4e 54 45 4c 20 APICh.....INTEL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 4c 4f 48 52 CRESTLNE....LOHR 0020: 5a 00 00 00 00 00 e0 fe 01 00 00 00 00 08 00 00 Z............... 0030: 0f 00 00 00 00 08 01 01 0d 00 00 00 01 0c 03 00 ................ 0040: 00 00 00 00 00 00 00 00 02 0a 0f 02 02 00 00 00 ................ 0050: ee 00 02 0a 0e 09 09 00 00 00 fd 00 04 06 00 ff ................ 0060: 00 01 04 06 01 10 00 01 ........ RSD PTR @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... fwts-test/madt-0001/madt-0001.log000066400000000000000000000010451465205512700163360ustar00rootroot00000000000000madt madt: MADT Multiple APIC Description Table (spec madt compliant). madt ---------------------------------------------------------- madt Cannot find FACP. madt Cannot read ACPI FADT tables. madt Aborted test, initialisation failed. madt ========================================================== madt 0 passed, 0 failed, 0 warning, 5 aborted, 0 skipped, 0 madt info only. madt ========================================================== fwts-test/madt-0001/madt-0002.log000066400000000000000000000010451465205512700163370ustar00rootroot00000000000000madt madt: MADT Multiple APIC Description Table (spec madt compliant). madt ---------------------------------------------------------- madt Cannot find FACP. madt Cannot read ACPI FADT tables. madt Aborted test, initialisation failed. madt ========================================================== madt 0 passed, 0 failed, 0 warning, 5 aborted, 0 skipped, 0 madt info only. madt ========================================================== fwts-test/madt-0001/test-0001.sh000077500000000000000000000010201465205512700162150ustar00rootroot00000000000000#!/bin/bash # TEST="Test against known correct ACPI APIC tables" NAME=test-0001.sh TMPLOG=$TMP/madt.log.$$ $FWTS --show-tests | grep MADT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/madt-0001/acpidump-0001.log madt - | cut -c7- | grep "^madt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/madt-0001/madt-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/madt-0001/test-0002.sh000077500000000000000000000010201465205512700162160ustar00rootroot00000000000000#!/bin/bash # TEST="Test against known correct ACPI APIC tables" NAME=test-0002.sh TMPLOG=$TMP/madt.log.$$ $FWTS --show-tests | grep MADT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/madt-0001/acpidump-0002.log madt - | cut -c7- | grep "^madt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/madt-0001/madt-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/mchi-0001/000077500000000000000000000000001465205512700143235ustar00rootroot00000000000000fwts-test/mchi-0001/acpidump-0001.log000066400000000000000000000036461465205512700172170ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... MCHI @ 0x00000000 0000: 4d 43 48 49 45 00 00 00 01 ba 49 4e 54 45 4c 20 MCHIE.....INTEL 0010: 54 45 4d 50 4c 41 54 45 15 07 00 02 49 4e 54 4c TEMPLATE....INTL 0020: 19 06 15 20 02 01 87 96 a5 b4 c3 d2 e1 f0 02 00 ... ............ 0030: 01 34 02 00 00 01 08 00 00 80 c0 08 00 00 80 ee .4.............. 0040: ff 01 02 1f 47 ....G fwts-test/mchi-0001/acpidump-0002.log000066400000000000000000000036461465205512700172200ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... MCHI @ 0x00000000 0000: 4d 43 48 49 45 00 00 00 01 a1 49 4e 54 45 4c 20 MCHIE.....INTEL 0010: 54 45 4d 50 4c 41 54 45 15 07 00 02 49 4e 54 4c TEMPLATE....INTL 0020: 19 06 15 20 01 fe 87 96 a5 b4 c3 d2 e1 f0 80 f0 ... ............ 0030: f1 34 02 00 00 04 f0 20 20 80 c0 08 00 00 80 ee .4..... ....... 0040: ff ff ff ff ff ..... fwts-test/mchi-0001/mchi-0001.log000066400000000000000000000030161465205512700163240ustar00rootroot00000000000000mchi mchi: MCHI Management Controller Host Interface Table mchi test. mchi ---------------------------------------------------------- mchi Test 1 of 1: MCHI Management Controller Host Interface mchi Table test. mchi MCHI Table: mchi Interface Type: 0x02 mchi Protocol Identifier 0x01 mchi Protocol Data: 0x87 0x96 0xa5 0xb4 mchi 0xc3 0xd2 0xe1 0xf0 mchi Interrupt Type: 0x02 mchi GPE: 0x00 mchi PCI Device Flag: 0x01 mchi Global System Interrupt: 0x00000234 mchi Base Address: mchi Address Space ID: 0x01 mchi Register Bit Width 0x08 mchi Register Bit Offset 0x00 mchi Access Size 0x00 mchi Address 0xffee80000008c080 mchi PCI Segment Group: 0x01 mchi PCI Bus Number: 0x02 mchi PCI Device Number: 0x1f mchi PCI Function Number: 0x47 mchi mchi PASSED: Test 1, No issues found in MCHI table. mchi mchi ========================================================== mchi 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 mchi info only. mchi ========================================================== fwts-test/mchi-0001/mchi-0002.log000066400000000000000000000075071465205512700163360ustar00rootroot00000000000000mchi mchi: MCHI Management Controller Host Interface Table mchi test. mchi ---------------------------------------------------------- mchi Test 1 of 1: MCHI Management Controller Host Interface mchi Table test. mchi MCHI Table: mchi Interface Type: 0x01 mchi Protocol Identifier 0xfe mchi Protocol Data: 0x87 0x96 0xa5 0xb4 mchi 0xc3 0xd2 0xe1 0xf0 mchi Interrupt Type: 0x80 mchi GPE: 0xf0 mchi PCI Device Flag: 0xf1 mchi Global System Interrupt: 0x00000234 mchi Base Address: mchi Address Space ID: 0x04 mchi Register Bit Width 0xf0 mchi Register Bit Offset 0x20 mchi Access Size 0x20 mchi Address 0xffee80000008c080 mchi PCI Segment Group: 0xff mchi PCI Bus Number: 0xff mchi PCI Device Number: 0xff mchi PCI Function Number: 0xff mchi mchi FAILED [HIGH] MCHIInvalidInterfaceType: Test 1, MCHI mchi Interface Type is 0x01 which is reserved, allowed values mchi are 0x02..0x08 mchi FAILED [HIGH] MCHIInvalidProtocolIdentifier: Test 1, MCHI mchi Protocol Identifier 0xfe which is reserved, allowed values mchi are 0x00 (Unspecifier), 0x01 (MCTP), 0x02 (IPMI) or 255 mchi (OEM defined) mchi FAILED [HIGH] MCHIReservedBitsNonZero: Test 1, MCHI mchi Interrupt Type Bits [7..2] must be zero, got 0x80 instead mchi FAILED [HIGH] MCHIGpeNonZero: Test 1, MCHI GPE is 0xf0 and mchi should be zero when bit 0 of the Interrupt Type field is 0 mchi (SCI triggered through GPE non-supported) mchi FAILED [HIGH] MCHIReservedBitsNonZero: Test 1, MCHI PCI mchi Device Flag Bits [7..1] must be zero, got 0xf1 instead mchi FAILED [HIGH] MCHIGsiNonZero: Test 1, MCHI Global System mchi Interrupt is 0x234 and should be zero when bit 1 of the mchi Interrupt Type field is 0 mchi FAILED [HIGH] MCHIPciDeviceFlagInvalid: Test 1, MCHI PCI mchi Device Flag is 0xf1 and bit [0] should be 0 for a SMBus mchi Address Space ID mchi FAILED [MEDIUM] MCHISmbusRegBitWidthNonZero: Test 1, MCHI mchi Base Address Register Bit Width is 0xf0 and should be zero mchi for a SMBus Address Space ID mchi FAILED [MEDIUM] MCHISmbusRegBitOffsetNonZero: Test 1, MCHI mchi Base Address Register Bit Offset is 0x20 and should be mchi zero for a SMBus Address Space ID mchi FAILED [MEDIUM] MCHISmbusRegAddressSizeInvalid: Test 1, mchi MCHI Base Address Register Address Size is 0x20 and should mchi be 1 (byte access) for a SMBus Address Space ID mchi FAILED [MEDIUM] MCHISmbusAddressInvalid: Test 1, MCHI Base mchi Address is 0xffee80000008c080 and should be 0x00..0x7f a mchi SMBus Address Space ID mchi FAILED [MEDIUM] MCHIPciDeviceNumberInvalid: Test 1, MCHI mchi PCI Device Number is 0xff and reserved bits [7:5] should mchi be zero mchi FAILED [MEDIUM] MCHIPciFunctionNumberInvalid: Test 1, MCHI mchi PCI Function Number is 0xff and reserved bits [7] and [5 mchi :3] should be zero mchi mchi ========================================================== mchi 0 passed, 13 failed, 0 warning, 0 aborted, 0 skipped, 0 mchi info only. mchi ========================================================== fwts-test/mchi-0001/test-0001.sh000077500000000000000000000007741465205512700162270ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against MCHI" NAME=test-0001.sh TMPLOG=$TMP/mchi.log.$$ $FWTS --show-tests | grep MCHI > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/mchi-0001/acpidump-0001.log mchi - | cut -c7- | grep "^mchi" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/mchi-0001/mchi-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/mchi-0001/test-0002.sh000077500000000000000000000007741465205512700162300ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against MCHI" NAME=test-0001.sh TMPLOG=$TMP/mchi.log.$$ $FWTS --show-tests | grep MCHI > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/mchi-0001/acpidump-0002.log mchi - | cut -c7- | grep "^mchi" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/mchi-0001/mchi-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/method-0001/000077500000000000000000000000001465205512700146635ustar00rootroot00000000000000fwts-test/method-0001/acpidump-0001.log000066400000000000000000003736441465205512700175670ustar00rootroot00000000000000DSDT @ 0xbf6d9b6a 0000: 44 53 44 54 f4 5f 00 00 02 11 54 4f 53 43 50 4c DSDT._....TOSCPL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 49 4e 54 4c CRESTLNE....INTL 0020: 08 06 06 20 08 5a 30 30 30 01 08 5a 30 30 31 0a ... .Z000..Z001. 0030: 02 08 5a 30 30 32 0a 04 08 5a 30 30 33 0a 08 08 ..Z002...Z003... 0040: 5a 30 30 34 00 08 5a 30 30 35 0a 0f 08 5a 30 30 Z004..Z005...Z00 0050: 36 0a 0d 08 5a 30 30 37 0a 0b 08 5a 30 30 38 0a 6...Z007...Z008. 0060: 09 08 45 43 44 59 0a 07 5b 01 4d 55 54 58 00 5b ..ECDY..[.MUTX.[ 0070: 80 50 52 54 30 01 0a 80 0a 04 5b 81 0b 50 52 54 .PRT0.....[..PRT 0080: 30 13 50 38 30 48 20 14 4e 07 50 38 58 48 0a a0 0.P80H .N.P8XH.. 0090: 17 93 68 00 70 7d 7b 50 38 30 44 0c 00 ff ff ff ..h.p}{P80D..... 00a0: 00 69 00 50 38 30 44 a0 1b 93 68 01 70 7d 7b 50 .i.P80D...h.p}{P 00b0: 38 30 44 0c ff 00 ff ff 00 79 69 0a 08 00 00 50 80D......yi....P 00c0: 38 30 44 a0 1c 93 68 0a 02 70 7d 7b 50 38 30 44 80D...h..p}{P80D 00d0: 0c ff ff 00 ff 00 79 69 0a 10 00 00 50 38 30 44 ......yi....P80D 00e0: a0 1c 93 68 0a 03 70 7d 7b 50 38 30 44 0c ff ff ...h..p}{P80D... 00f0: ff 00 00 79 69 0a 18 00 00 50 38 30 44 70 50 38 ...yi....P80DpP8 0100: 30 44 50 38 30 48 14 0c 5f 50 49 43 01 70 68 47 0DP80H.._PIC.phG 0110: 50 49 43 14 46 06 5f 50 54 53 01 70 00 50 38 30 PIC.F._PTS.p.P80 0120: 44 50 38 58 48 00 68 a0 1e 93 68 0a 03 70 01 5c DP8XH.h...h..p.\ 0130: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0140: 30 5f 53 33 4c 44 a0 33 93 68 0a 04 70 01 5c 2f 0_S3LD.3.h..p.\/ 0150: 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 ._SB_PCI0LPCBEC0 0160: 5f 53 33 4c 44 5c 2f 04 5f 53 42 5f 50 43 49 30 _S3LD\/._SB_PCI0 0170: 4c 50 43 42 50 48 53 53 0a 0e 14 4c 1c 5f 57 41 LPCBPHSS...L._WA 0180: 4b 01 50 38 58 48 01 0a ab a0 30 91 93 68 0a 03 K.P8XH....0..h.. 0190: 93 68 0a 04 a0 25 7b 43 46 47 44 0c 00 00 00 01 .h...%{CFGD..... 01a0: 00 a0 18 90 7b 43 46 47 44 0a f0 00 93 4f 53 59 ....{CFGD....OSY 01b0: 53 0b d1 07 54 52 41 50 0a 3d a0 18 93 52 50 31 S...TRAP.=...RP1 01c0: 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 D..\/._SB_PCI0RP 01d0: 30 31 00 a0 18 93 52 50 32 44 00 86 5c 2f 03 5f 01....RP2D..\/._ 01e0: 53 42 5f 50 43 49 30 52 50 30 32 00 a0 18 93 52 SB_PCI0RP02....R 01f0: 50 33 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 P3D..\/._SB_PCI0 0200: 52 50 30 33 00 a0 18 93 52 50 34 44 00 86 5c 2f RP03....RP4D..\/ 0210: 03 5f 53 42 5f 50 43 49 30 52 50 30 34 00 a0 18 ._SB_PCI0RP04... 0220: 93 52 50 35 44 00 86 5c 2f 03 5f 53 42 5f 50 43 .RP5D..\/._SB_PC 0230: 49 30 52 50 30 35 00 a0 18 93 52 50 36 44 00 86 I0RP05....RP6D.. 0240: 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 36 00 \/._SB_PCI0RP06. 0250: a0 12 93 68 0a 03 50 38 58 48 00 0a 30 54 52 41 ...h..P8XH..0TRA 0260: 50 0a 46 a0 43 0d 93 68 0a 04 50 38 58 48 00 0a P.F.C..h..P8XH.. 0270: 40 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 @\/._SB_PCI0LPCB 0280: 50 48 53 53 0a 0f 70 57 41 4b 46 60 70 00 57 41 PHSS..pWAKF`p.WA 0290: 4b 46 7b 60 0a 05 60 a0 18 93 60 01 50 38 58 48 KF{`..`...`.P8XH 02a0: 00 0a 41 86 5c 2e 5f 53 42 5f 50 57 52 42 0a 02 ..A.\._SB_PWRB.. 02b0: a0 46 08 44 54 53 45 54 52 41 50 0a 47 a0 42 06 .F.DTSETRAP.G.B. 02c0: 90 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 .\/._SB_PCI0LPCB 02d0: 45 43 4f 4b 93 45 43 44 59 00 a0 27 92 95 44 54 ECOK.ECDY..'..DT 02e0: 53 31 44 54 53 32 70 44 54 53 31 5c 2f 05 5f 53 S1DTS2pDTS1\/._S 02f0: 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b B_PCI0LPCBEC0_SK 0300: 54 41 a1 1d 70 44 54 53 32 5c 2f 05 5f 53 42 5f TA..pDTS2\/._SB_ 0310: 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 PCI0LPCBEC0_SKTA 0320: a1 16 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 0330: 42 50 48 53 53 0a 10 5c 2e 5f 50 52 5f 52 50 50 BPHSS..\._PR_RPP 0340: 43 a4 12 04 02 00 00 14 1e 47 45 54 42 0b 77 68 C........GETB.wh 0350: 0a 08 60 77 69 0a 08 61 5b 13 6a 60 61 54 42 46 ..`wi..a[.j`aTBF 0360: 33 a4 54 42 46 33 14 42 09 50 4e 4f 54 08 a0 4a 3.TBF3.B.PNOT..J 0370: 06 4d 50 45 4e a0 31 7b 50 44 43 30 0a 08 00 86 .MPEN.1{PDC0.... 0380: 5c 2e 5f 50 52 5f 43 50 55 30 0a 80 a0 1a 7b 50 \._PR_CPU0....{P 0390: 44 43 30 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC0...[".d.\._PR 03a0: 5f 43 50 55 30 0a 81 a0 31 7b 50 44 43 31 0a 08 _CPU0...1{PDC1.. 03b0: 00 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 a0 1a ..\._PR_CPU1.... 03c0: 7b 50 44 43 31 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC1...[".d.\._ 03d0: 50 52 5f 43 50 55 31 0a 81 a1 1f 86 5c 2e 5f 50 PR_CPU1.....\._P 03e0: 52 5f 43 50 55 30 0a 80 5b 22 0a 64 86 5c 2e 5f R_CPU0..[".d.\._ 03f0: 50 52 5f 43 50 55 30 0a 81 14 17 54 52 41 50 09 PR_CPU0....TRAP. 0400: 70 68 53 4d 49 46 70 00 54 52 50 30 a4 53 4d 49 phSMIFp.TRP0.SMI 0410: 46 10 41 0f 5f 53 42 5f 14 4a 0e 5f 49 4e 49 00 F.A._SB_.J._INI. 0420: 70 0b 99 99 4d 41 52 4b a0 1c 44 54 53 45 54 52 p...MARK..DTSETR 0430: 41 50 0a 47 5e 2f 03 50 43 49 30 4c 50 43 42 50 AP.G^/.PCI0LPCBP 0440: 48 53 53 0a 10 70 0b d0 07 4f 53 59 53 a0 4a 09 HSS..p...OSYS.J. 0450: 5b 12 5f 4f 53 49 60 a0 18 5f 4f 53 49 0d 4c 69 [._OSI`.._OSI.Li 0460: 6e 75 78 00 70 01 4c 49 4e 58 70 00 45 43 44 59 nux.p.LINXp.ECDY 0470: a0 1b 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 .._OSI.Windows 2 0480: 30 30 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 001.p...OSYS.._O 0490: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04a0: 53 50 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f SP1.p...OSYS.._O 04b0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04c0: 53 50 32 00 70 0b d2 07 4f 53 59 53 a0 1b 5f 4f SP2.p...OSYS.._O 04d0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 00 SI.Windows 2006. 04e0: 70 0b d6 07 4f 53 59 53 a0 14 90 4d 50 45 4e 93 p...OSYS...MPEN. 04f0: 4f 53 59 53 0b d1 07 54 52 41 50 0a 3d 54 52 41 OSYS...TRAP.=TRA 0500: 50 0a 2b 5b 80 47 4e 56 53 00 0c bc 2d 6e bf 0b P.+[.GNVS...-n.. 0510: 00 01 5b 81 45 24 47 4e 56 53 10 4f 53 59 53 10 ..[.E$GNVS.OSYS. 0520: 53 4d 49 46 08 50 52 4d 30 08 50 52 4d 31 08 53 SMIF.PRM0.PRM1.S 0530: 43 49 46 08 50 52 4d 32 08 50 52 4d 33 08 4c 43 CIF.PRM2.PRM3.LC 0540: 4b 46 08 50 52 4d 34 08 50 52 4d 35 08 50 38 30 KF.PRM4.PRM5.P80 0550: 44 20 4c 49 44 53 08 50 57 52 53 08 44 42 47 53 D LIDS.PWRS.DBGS 0560: 08 4c 49 4e 58 08 00 08 41 43 54 31 08 41 43 54 .LINX...ACT1.ACT 0570: 54 08 50 53 56 54 08 54 43 31 56 08 54 43 32 56 T.PSVT.TC1V.TC2V 0580: 08 54 53 50 56 08 43 52 54 54 08 44 54 53 45 08 .TSPV.CRTT.DTSE. 0590: 44 54 53 31 08 44 54 53 32 08 00 40 05 41 50 49 DTS1.DTS2..@.API 05a0: 43 08 4d 50 45 4e 08 50 43 50 30 08 50 43 50 31 C.MPEN.PCP0.PCP1 05b0: 08 50 50 43 4d 08 00 28 43 4d 41 50 08 43 4d 42 .PPCM..(CMAP.CMB 05c0: 50 08 4c 50 54 50 08 46 44 43 50 08 00 30 49 47 P.LPTP.FDCP..0IG 05d0: 44 53 08 54 4c 53 54 08 43 41 44 4c 08 50 41 44 DS.TLST.CADL.PAD 05e0: 4c 08 43 53 54 45 10 4e 53 54 45 10 53 53 54 45 L.CSTE.NSTE.SSTE 05f0: 10 4e 44 49 44 08 44 49 44 31 20 44 49 44 32 20 .NDID.DID1 DID2 0600: 44 49 44 33 20 44 49 44 34 20 44 49 44 35 20 00 DID3 DID4 DID5 . 0610: 40 06 42 4c 43 53 08 42 52 54 4c 08 41 4c 53 45 @.BLCS.BRTL.ALSE 0620: 08 41 4c 41 46 08 4c 4c 4f 57 08 4c 48 49 48 08 .ALAF.LLOW.LHIH. 0630: 00 08 45 4d 41 45 08 45 4d 41 50 10 45 4d 41 4c ..EMAE.EMAP.EMAL 0640: 10 00 08 4d 45 46 45 08 00 18 54 50 4d 50 08 54 ...MEFE...TPMP.T 0650: 50 4d 45 08 00 40 04 47 54 46 30 38 47 54 46 32 PME..@.GTF08GTF2 0660: 38 49 44 45 4d 08 47 54 46 31 38 00 40 09 41 53 8IDEM.GTF18.@.AS 0670: 4c 42 20 49 42 54 54 08 49 50 41 54 08 49 54 56 LB IBTT.IPAT.ITV 0680: 46 08 49 54 56 4d 08 49 50 53 43 08 49 42 4c 43 F.ITVM.IPSC.IBLC 0690: 08 49 42 49 41 08 49 53 53 43 08 49 34 30 39 08 .IBIA.ISSC.I409. 06a0: 49 35 30 39 08 49 36 30 39 08 49 37 30 39 08 49 I509.I609.I709.I 06b0: 44 4d 4d 08 49 44 4d 53 08 49 46 31 45 08 48 56 DMM.IDMS.IF1E.HV 06c0: 43 4f 08 4e 58 44 31 20 4e 58 44 32 20 4d 41 52 CO.NXD1 NXD2 MAR 06d0: 4b 10 42 52 41 44 08 42 54 45 4e 08 56 56 45 4e K.BRAD.BTEN.VVEN 06e0: 08 42 47 54 4c 08 54 4d 45 45 01 00 07 53 43 55 .BGTL.TMEE...SCU 06f0: 30 01 53 43 55 31 01 53 43 55 32 01 53 43 55 33 0.SCU1.SCU2.SCU3 0700: 01 00 04 58 4b 53 50 01 58 4b 49 4e 01 58 4b 49 ...XKSP.XKIN.XKI 0710: 44 01 58 4b 4f 4b 01 00 04 42 47 55 31 08 42 53 D.XKOK...BGU1.BS 0720: 54 31 08 42 46 43 31 10 57 4b 4c 4e 08 57 41 4b T1.BFC1.WKLN.WAK 0730: 46 08 44 53 4d 44 08 42 41 59 53 08 48 41 50 45 F.DSMD.BAYS.HAPE 0740: 01 00 07 44 54 53 4d 01 00 07 4f 44 54 31 08 4f ...DTSM...ODT1.O 0750: 44 54 32 08 44 54 53 57 08 08 44 53 45 4e 01 08 DT2.DTSW..DSEN.. 0760: 45 43 4f 4e 00 08 47 50 49 43 00 08 43 54 59 50 ECON..GPIC..CTYP 0770: 00 08 4c 30 31 43 00 08 56 46 4e 30 00 08 56 46 ..L01C..VFN0..VF 0780: 4e 31 00 10 4a 7c 5f 47 50 45 14 46 35 5f 4c 30 N1..J|_GPE.F5_L0 0790: 31 00 72 4c 30 31 43 01 4c 30 31 43 50 38 58 48 1.rL01C.L01CP8XH 07a0: 00 01 50 38 58 48 01 4c 30 31 43 a0 48 08 90 93 ..P8XH.L01C.H... 07b0: 52 50 31 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 RP1D.\/._SB_PCI0 07c0: 52 50 30 31 48 50 53 58 5b 22 0a 64 a0 40 05 5c RP01HPSX[".d.@.\ 07d0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 /._SB_PCI0RP01PD 07e0: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 07f0: 50 30 31 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f P01PDCXp.\/._SB_ 0800: 50 43 49 30 52 50 30 31 48 50 53 58 86 5c 2f 03 PCI0RP01HPSX.\/. 0810: 5f 53 42 5f 50 43 49 30 52 50 30 31 00 a1 16 70 _SB_PCI0RP01...p 0820: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0830: 48 50 53 58 a0 48 08 90 93 52 50 32 44 00 5c 2f HPSX.H...RP2D.\/ 0840: 04 5f 53 42 5f 50 43 49 30 52 50 30 32 48 50 53 ._SB_PCI0RP02HPS 0850: 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 5f 50 X[".d.@.\/._SB_P 0860: 43 49 30 52 50 30 32 50 44 43 58 70 01 5c 2f 04 CI0RP02PDCXp.\/. 0870: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 44 43 58 _SB_PCI0RP02PDCX 0880: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 0890: 32 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 2HPSX.\/._SB_PCI 08a0: 30 52 50 30 32 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP02...p.\/._SB 08b0: 5f 50 43 49 30 52 50 30 32 48 50 53 58 a0 48 08 _PCI0RP02HPSX.H. 08c0: 90 93 52 50 33 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP3D.\/._SB_PC 08d0: 49 30 52 50 30 33 48 50 53 58 5b 22 0a 64 a0 40 I0RP03HPSX[".d.@ 08e0: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 .\/._SB_PCI0RP03 08f0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0900: 30 52 50 30 33 50 44 43 58 70 01 5c 2f 04 5f 53 0RP03PDCXp.\/._S 0910: 42 5f 50 43 49 30 52 50 30 33 48 50 53 58 86 5c B_PCI0RP03HPSX.\ 0920: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 33 00 a1 /._SB_PCI0RP03.. 0930: 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .p.\/._SB_PCI0RP 0940: 30 33 48 50 53 58 a0 48 08 90 93 52 50 34 44 00 03HPSX.H...RP4D. 0950: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 48 \/._SB_PCI0RP04H 0960: 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 PSX[".d.@.\/._SB 0970: 5f 50 43 49 30 52 50 30 34 50 44 43 58 70 01 5c _PCI0RP04PDCXp.\ 0980: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 44 /._SB_PCI0RP04PD 0990: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 09a0: 50 30 34 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 P04HPSX.\/._SB_P 09b0: 43 49 30 52 50 30 34 00 a1 16 70 01 5c 2f 04 5f CI0RP04...p.\/._ 09c0: 53 42 5f 50 43 49 30 52 50 30 34 48 50 53 58 a0 SB_PCI0RP04HPSX. 09d0: 48 08 90 93 52 50 35 44 00 5c 2f 04 5f 53 42 5f H...RP5D.\/._SB_ 09e0: 50 43 49 30 52 50 30 35 48 50 53 58 5b 22 0a 64 PCI0RP05HPSX[".d 09f0: a0 40 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .@.\/._SB_PCI0RP 0a00: 30 35 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 05PDCXp.\/._SB_P 0a10: 43 49 30 52 50 30 35 50 44 43 58 70 01 5c 2f 04 CI0RP05PDCXp.\/. 0a20: 5f 53 42 5f 50 43 49 30 52 50 30 35 48 50 53 58 _SB_PCI0RP05HPSX 0a30: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 35 .\/._SB_PCI0RP05 0a40: 00 a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ...p.\/._SB_PCI0 0a50: 52 50 30 35 48 50 53 58 a0 48 08 90 93 52 50 36 RP05HPSX.H...RP6 0a60: 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 D.\/._SB_PCI0RP0 0a70: 36 48 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 6HPSX[".d.@.\/._ 0a80: 53 42 5f 50 43 49 30 52 50 30 36 50 44 43 58 70 SB_PCI0RP06PDCXp 0a90: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 0aa0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0ab0: 30 52 50 30 36 48 50 53 58 86 5c 2f 03 5f 53 42 0RP06HPSX.\/._SB 0ac0: 5f 50 43 49 30 52 50 30 36 00 a1 16 70 01 5c 2f _PCI0RP06...p.\/ 0ad0: 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 50 53 ._SB_PCI0RP06HPS 0ae0: 58 14 42 0d 5f 4c 30 32 00 70 00 47 50 45 43 a0 X.B._L02.p.GPEC. 0af0: 4d 0a 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 M.\/._SB_PCI0LPC 0b00: 42 45 43 4f 4b a0 4e 04 93 44 54 53 57 01 a0 27 BECOK.N..DTSW..' 0b10: 92 95 44 54 53 31 44 54 53 32 70 44 54 53 31 5c ..DTS1DTS2pDTS1\ 0b20: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0b30: 30 5f 53 4b 54 41 a1 1d 70 44 54 53 32 5c 2f 05 0_SKTA..pDTS2\/. 0b40: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f _SB_PCI0LPCBEC0_ 0b50: 53 4b 54 41 a1 48 04 a0 27 92 95 4f 44 54 31 4f SKTA.H..'..ODT1O 0b60: 44 54 32 70 4f 44 54 31 5c 2f 05 5f 53 42 5f 50 DT2pODT1\/._SB_P 0b70: 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 CI0LPCBEC0_SKTA. 0b80: 1d 70 4f 44 54 32 5c 2f 05 5f 53 42 5f 50 43 49 .pODT2\/._SB_PCI 0b90: 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 16 5c 0LPCBEC0_SKTA..\ 0ba0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 50 48 /._SB_PCI0LPCBPH 0bb0: 53 53 0a 10 14 18 5f 4c 30 33 00 86 5c 2f 03 5f SS...._L03..\/._ 0bc0: 53 42 5f 50 43 49 30 55 53 42 31 0a 02 14 18 5f SB_PCI0USB1...._ 0bd0: 4c 30 34 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 L04..\/._SB_PCI0 0be0: 55 53 42 32 0a 02 14 18 5f 4c 30 35 00 86 5c 2f USB2...._L05..\/ 0bf0: 03 5f 53 42 5f 50 43 49 30 55 53 42 35 0a 02 14 ._SB_PCI0USB5... 0c00: 36 5f 4c 30 36 00 a0 27 5c 2f 04 5f 53 42 5f 50 6_L06..'\/._SB_P 0c10: 43 49 30 47 46 58 30 47 53 53 45 5c 2f 04 5f 53 CI0GFX0GSSE\/._S 0c20: 42 5f 50 43 49 30 47 46 58 30 47 53 43 49 a1 07 B_PCI0GFX0GSCI.. 0c30: 70 01 53 43 49 53 14 43 1f 5f 4c 30 39 00 a0 41 p.SCIS.C._L09..A 0c40: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0c50: 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PSPXp.\/._SB_PCI 0c60: 30 52 50 30 31 50 53 50 58 70 01 5c 2f 04 5f 53 0RP01PSPXp.\/._S 0c70: 42 5f 50 43 49 30 52 50 30 31 50 4d 53 58 86 5c B_PCI0RP01PMSX.\ 0c80: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 31 0a 02 /._SB_PCI0RP01.. 0c90: a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .A.\/._SB_PCI0RP 0ca0: 30 32 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 02PSPXp.\/._SB_P 0cb0: 43 49 30 52 50 30 32 50 53 50 58 70 01 5c 2f 04 CI0RP02PSPXp.\/. 0cc0: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 4d 53 58 _SB_PCI0RP02PMSX 0cd0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 0ce0: 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 ...A.\/._SB_PCI0 0cf0: 52 50 30 33 50 53 50 58 70 01 5c 2f 04 5f 53 42 RP03PSPXp.\/._SB 0d00: 5f 50 43 49 30 52 50 30 33 50 53 50 58 70 01 5c _PCI0RP03PSPXp.\ 0d10: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 50 4d /._SB_PCI0RP03PM 0d20: 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 SX.\/._SB_PCI0RP 0d30: 30 33 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 03...A.\/._SB_PC 0d40: 49 30 52 50 30 34 50 53 50 58 70 01 5c 2f 04 5f I0RP04PSPXp.\/._ 0d50: 53 42 5f 50 43 49 30 52 50 30 34 50 53 50 58 70 SB_PCI0RP04PSPXp 0d60: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 .\/._SB_PCI0RP04 0d70: 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 PMSX.\/._SB_PCI0 0d80: 52 50 30 34 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f RP04...A.\/._SB_ 0d90: 50 43 49 30 52 50 30 35 50 53 50 58 70 01 5c 2f PCI0RP05PSPXp.\/ 0da0: 04 5f 53 42 5f 50 43 49 30 52 50 30 35 50 53 50 ._SB_PCI0RP05PSP 0db0: 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 Xp.\/._SB_PCI0RP 0dc0: 30 35 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 05PMSX.\/._SB_PC 0dd0: 49 30 52 50 30 35 0a 02 a0 41 05 5c 2f 04 5f 53 I0RP05...A.\/._S 0de0: 42 5f 50 43 49 30 52 50 30 36 50 53 50 58 70 01 B_PCI0RP06PSPXp. 0df0: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 50 \/._SB_PCI0RP06P 0e00: 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 SPXp.\/._SB_PCI0 0e10: 52 50 30 36 50 4d 53 58 86 5c 2f 03 5f 53 42 5f RP06PMSX.\/._SB_ 0e20: 50 43 49 30 52 50 30 36 0a 02 14 18 5f 4c 30 42 PCI0RP06...._L0B 0e30: 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 50 43 49 ..\/._SB_PCI0PCI 0e40: 42 0a 02 14 18 5f 4c 30 43 00 86 5c 2f 03 5f 53 B...._L0C..\/._S 0e50: 42 5f 50 43 49 30 55 53 42 33 0a 02 14 4b 0b 5f B_PCI0USB3...K._ 0e60: 4c 30 44 00 a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 L0D..;\/._SB_PCI 0e70: 30 45 48 43 31 50 4d 45 53 70 01 5c 2f 04 5f 53 0EHC1PMESp.\/._S 0e80: 42 5f 50 43 49 30 45 48 43 31 50 4d 45 53 86 5c B_PCI0EHC1PMES.\ 0e90: 2f 03 5f 53 42 5f 50 43 49 30 45 48 43 31 0a 02 /._SB_PCI0EHC1.. 0ea0: a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 30 45 48 43 .;\/._SB_PCI0EHC 0eb0: 32 50 4d 45 53 70 01 5c 2f 04 5f 53 42 5f 50 43 2PMESp.\/._SB_PC 0ec0: 49 30 45 48 43 32 50 4d 45 53 86 5c 2f 03 5f 53 I0EHC2PMES.\/._S 0ed0: 42 5f 50 43 49 30 45 48 43 32 0a 02 a0 3b 5c 2f B_PCI0EHC2...;\/ 0ee0: 04 5f 53 42 5f 50 43 49 30 48 44 45 46 50 4d 45 ._SB_PCI0HDEFPME 0ef0: 53 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 48 44 Sp.\/._SB_PCI0HD 0f00: 45 46 50 4d 45 53 86 5c 2f 03 5f 53 42 5f 50 43 EFPMES.\/._SB_PC 0f10: 49 30 48 44 45 46 0a 02 14 18 5f 4c 30 45 00 86 I0HDEF...._L0E.. 0f20: 5c 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 34 0a \/._SB_PCI0USB4. 0f30: 02 14 1c 5f 4c 31 42 00 80 4c 50 4f 4c 4c 50 4f ..._L1B..LPOLLPO 0f40: 4c 86 5c 2e 5f 53 42 5f 4c 49 44 30 0a 80 10 46 L.\._SB_LID0...F 0f50: 0b 5f 50 52 5f 5b 83 0b 43 50 55 30 00 10 10 00 ._PR_[..CPU0.... 0f60: 00 06 5b 83 0b 43 50 55 31 01 10 10 00 00 06 14 ..[..CPU1....... 0f70: 45 09 52 50 50 43 00 a0 4d 08 93 4f 53 59 53 0b E.RPPC..M..OSYS. 0f80: d2 07 a0 42 08 7b 43 46 47 44 01 00 a0 42 04 94 ...B.{CFGD...B.. 0f90: 5e 2e 43 50 55 30 5f 50 50 43 00 74 5e 2e 43 50 ^.CPU0_PPC.t^.CP 0fa0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 0fb0: 43 50 4e 4f 54 72 5e 2e 43 50 55 30 5f 50 50 43 CPNOTr^.CPU0_PPC 0fc0: 01 5e 2e 43 50 55 30 5f 50 50 43 50 4e 4f 54 a1 .^.CPU0_PPCPNOT. 0fd0: 35 72 5e 2e 43 50 55 30 5f 50 50 43 01 5e 2e 43 5r^.CPU0_PPC.^.C 0fe0: 50 55 30 5f 50 50 43 50 4e 4f 54 74 5e 2e 43 50 PU0_PPCPNOTt^.CP 0ff0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 1000: 43 50 4e 4f 54 08 46 57 53 4f 0d 46 57 53 4f 00 CPNOT.FWSO.FWSO. 1010: 08 5f 50 53 43 00 14 12 5f 50 53 30 00 70 5f 50 ._PSC..._PS0.p_P 1020: 53 43 60 70 00 5f 50 53 43 14 0d 5f 50 53 33 00 SC`p._PSC.._PS3. 1030: 70 0a 03 5f 50 53 43 10 8c fb 04 5f 53 42 5f 5b p.._PSC...._SB_[ 1040: 82 4f 3e 41 4d 57 30 08 5f 48 49 44 0d 70 6e 70 .O>AMW0._HID.pnp 1050: 30 63 31 34 00 08 5f 55 49 44 00 08 5f 57 44 47 0c14.._UID.._WDG 1060: 11 3f 0a 3c a7 1d 85 2e 53 d0 5f 49 9d fa 1a 4a .?.<....S._I...J 1070: d6 2e 6a 86 41 43 01 00 3b 6d 43 71 dd fb 72 4c ..j.AC..;mCq..rL 1080: bc b8 43 5b fe 0d 64 f9 42 43 01 00 21 12 90 05 ..C[..d.BC..!... 1090: 66 d5 d1 11 b2 f0 00 a0 c9 06 29 10 42 41 01 00 f.........).BA.. 10a0: 08 53 54 41 43 11 07 0a 04 01 14 03 00 14 1f 57 .STAC..........W 10b0: 51 41 43 01 70 0d 4d 58 4d 54 43 43 6f 6e 66 69 QAC.p.MXMTCConfi 10c0: 67 44 61 74 61 00 5b 31 a4 53 54 41 43 08 53 54 gData.[1.STAC.ST 10d0: 42 43 11 07 0a 04 01 00 00 00 14 34 57 51 42 43 BC.........4WQBC 10e0: 01 70 0d 47 65 74 20 4d 58 4d 54 43 43 6f 6e 74 .p.Get MXMTCCont 10f0: 72 6f 6c 44 61 74 61 3a 20 53 54 42 43 20 3d 20 rolData: STBC = 1100: 00 5b 31 70 53 54 42 43 5b 31 a4 53 54 42 43 14 .[1pSTBC[1.STBC. 1110: 47 06 57 53 42 43 02 70 69 53 54 42 43 70 0d 53 G.WSBC.piSTBCp.S 1120: 65 74 20 4d 58 4d 54 43 43 6f 6e 74 72 6f 6c 44 et MXMTCControlD 1130: 61 74 61 3a 20 53 54 42 43 20 3d 20 00 5b 31 70 ata: STBC = .[1p 1140: 53 54 42 43 5b 31 a0 30 93 5e 5e 2f 03 50 43 49 STBC[1.0.^^/.PCI 1150: 30 4c 50 43 42 45 43 4f 4b 01 70 83 88 53 54 42 0LPCBECOK.p..STB 1160: 43 01 00 5e 5e 2f 04 50 43 49 30 4c 50 43 42 45 C..^^/.PCI0LPCBE 1170: 43 30 5f 53 4b 54 43 08 57 51 42 41 11 43 2b 0b C0_SKTC.WQBA.C+. 1180: ae 02 46 4f 4d 42 01 00 00 00 9e 02 00 00 c0 0b ..FOMB.......... 1190: 00 00 44 53 00 01 1a 7d da 54 28 d9 85 00 01 06 ..DS...}.T(..... 11a0: 18 42 10 07 10 0a 4b 61 02 c9 21 52 3c 18 94 05 .B....Ka..!R<... 11b0: 10 43 88 57 04 44 04 84 bc 0a b0 29 c0 24 88 fa .C.W.D.....).$.. 11c0: f7 87 28 09 0e 25 04 42 12 05 98 17 a0 5b 80 61 ..(..%.B.....[.a 11d0: 01 b6 05 98 16 e0 18 92 4a 03 a7 04 96 02 21 a1 ........J.....!. 11e0: 02 94 0b f0 2d 40 3b a2 24 0b b0 0c 23 02 8f 82 ....-@;.$...#... 11f0: a1 71 68 ec 30 2c 13 4c 83 38 8c b2 91 45 60 dc .qh.0,.L.8...E`. 1200: 4e 05 c8 15 20 4c 80 78 54 61 34 07 45 e0 42 63 N... L.xTa4.E.Bc 1210: 64 40 c8 a3 00 ab a3 d0 a4 12 d8 bd 00 65 02 2c d@...........e., 1220: 0a 10 27 c0 9a 00 63 48 32 28 40 9b 00 5b 20 42 ..'...cH2(@..[ B 1230: 0f d4 19 8a 46 70 02 51 6a 46 11 48 ac 1a 01 85 ....Fp.QjF.H.... 1240: 12 34 46 b0 10 81 c2 86 37 46 98 03 88 d1 fe 20 .4F.....7F..... 1250: 48 20 05 e3 66 91 46 83 1a 6b 82 63 f7 68 4e b8 H ..f.F..k.c.hN. 1260: 73 01 d2 e7 26 90 a3 3b b8 3a 07 4d 86 c7 b0 1e s...&..;.:.M.... 1270: 06 d8 29 00 ef 1a 50 d3 3f 78 26 08 0e 35 44 8f ..)...P.?x&..5D. 1280: 3a dc 09 1c fb 91 30 88 b3 3b 6e ac c3 c9 68 d0 :.....0..;n...h. 1290: a5 0a 30 7b 00 d0 d0 12 9c f6 99 84 7e 0f 38 9f ..0{........~.8. 12a0: 9e 21 89 fc 41 a0 46 e6 ff 3f b4 c7 78 5a 31 43 .!..A.F..?..xZ1C 12b0: 3e 0b 1c 16 13 0b a1 4d 6a 3c 40 40 e1 d1 40 08 >......Mj<@@..@. 12c0: 6f 06 9e af 09 46 86 90 93 f1 a0 06 e0 41 d7 3a o....F.......A.: 12d0: 32 8d 27 a6 21 cf e8 00 22 bf 32 78 0c 41 02 f9 2.'.!...".2x.A.. 12e0: c4 60 b8 c7 81 13 78 02 f0 59 40 10 92 00 21 51 .`....x..Y@...!Q 12f0: e3 a7 47 08 7e 7a 78 93 30 28 1f d2 99 f9 90 e1 ..G.~zx.0(...... 1300: 11 c2 07 c4 7b 9f 3b 19 c1 29 7b a4 e0 b0 7e 0e ....{.;..){...~. 1310: 20 c0 af 0f 8f 0d 09 7c ae 08 8c 1d aa fd 0a 40 ......|.......@ 1320: 08 1e ed 51 e0 54 23 1c 2d 78 08 8a 1c 03 4a cc ...Q.T#.-x....J. 1330: 18 50 03 38 85 d0 e7 73 04 47 14 25 f6 21 19 da .P.8...s.G.%.!.. 1340: 08 e1 1f 39 4e c1 f7 8b 23 3d ad 23 78 91 f0 08 ...9N...#=.#x... 1350: 30 e1 ce 28 a8 38 30 f4 ff 7f 4c 01 dc 7a 3b a6 0..(.80...L..z;. 1360: 80 3e c0 31 05 50 fc ff 3f a6 00 87 a8 c7 14 f4 .>.1.P..?....... 1370: 40 0c 7c 2e a1 0d ff 96 c1 8e 03 87 74 6a 8f 28 @.|.........tj.( 1380: 80 29 79 47 14 50 8c 14 d6 f1 04 18 05 3c 9b a0 .)yG.P.......<.. 1390: 22 1d 4f 80 ce ff ff 78 02 58 b8 9a bc 92 84 7d ".O....x.X.....} 13a0: 1e 78 1d 89 14 e3 41 e2 b5 e4 c1 24 46 98 08 8f .x....A....$F... 13b0: 27 1e 47 c0 b7 82 28 91 8e 3e c4 83 49 28 63 3e '.G...(..>..I(c> 13c0: a3 84 89 f9 04 70 22 ef 27 46 0a 73 2a 8f 27 2c .....p".'F.s*.', 13d0: c4 f1 04 a0 85 e2 e3 09 3a 2c 84 fe ff c7 13 dc ........:,...... 13e0: e1 c1 a7 0c fc 85 0c c6 f9 04 30 24 f0 7c 02 ca ..........0$.|.. 13f0: db 18 e6 80 02 8c 14 da f4 a9 d1 a8 55 83 32 35 ............U.25 1400: ca 34 a8 d5 a7 52 63 c6 4c 9c 52 bc 6c 8d df f2 .4...Rc.L.R.l... 1410: 9e 09 02 b1 20 0a 81 38 cc f3 42 20 96 a2 01 84 .... ..8..B .... 1420: 85 06 a1 42 a9 05 e2 98 20 34 92 0a 10 f6 ff 07 ...B.... 4...... 1430: 5b 82 1b 4c 49 44 30 08 5f 48 49 44 0c 41 d0 0c [..LID0._HID.A.. 1440: 0d 14 0b 5f 4c 49 44 00 a4 4c 50 4f 4c 5b 82 0f ..._LID..LPOL[.. 1450: 50 57 52 42 08 5f 48 49 44 0c 41 d0 0c 0c 5b 82 PWRB._HID.A...[. 1460: 84 b9 04 50 43 49 30 14 09 5f 53 33 44 00 a4 0a ...PCI0.._S3D... 1470: 02 14 09 5f 53 34 44 00 a4 0a 02 08 5f 48 49 44 ..._S4D....._HID 1480: 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 d0 0a 03 5b .A...._CID.A...[ 1490: 82 43 0e 4d 43 48 43 08 5f 41 44 52 00 5b 80 48 .C.MCHC._ADR.[.H 14a0: 42 55 53 02 0a 40 0a c0 5b 81 4a 0c 48 42 55 53 BUS..@..[.J.HBUS 14b0: 03 45 50 45 4e 01 00 0b 45 50 42 52 14 00 20 4d .EPEN...EPBR.. M 14c0: 48 45 4e 01 00 0d 4d 48 42 52 12 00 40 0a 50 58 HEN...MHBR..@.PX 14d0: 45 4e 01 50 58 53 5a 02 00 17 50 58 42 52 06 00 EN.PXSZ...PXBR.. 14e0: 20 44 49 45 4e 01 00 0b 44 49 42 52 14 00 20 49 DIEN...DIBR.. I 14f0: 50 45 4e 01 00 0b 49 50 42 52 14 00 40 0e 00 04 PEN...IPBR..@... 1500: 50 4d 30 48 02 00 02 50 4d 31 4c 02 00 02 50 4d PM0H...PM1L...PM 1510: 31 48 02 00 02 50 4d 32 4c 02 00 02 50 4d 32 48 1H...PM2L...PM2H 1520: 02 00 02 50 4d 33 4c 02 00 02 50 4d 33 48 02 00 ...PM3L...PM3H.. 1530: 02 50 4d 34 4c 02 00 02 50 4d 34 48 02 00 02 50 .PM4L...PM4H...P 1540: 4d 35 4c 02 00 02 50 4d 35 48 02 00 02 50 4d 36 M5L...PM5H...PM6 1550: 4c 02 00 02 50 4d 36 48 02 00 02 00 07 48 45 4e L...PM6H.....HEN 1560: 41 01 00 40 05 54 55 55 44 10 00 40 06 00 04 54 A..@.TUUD..@...T 1570: 4c 55 44 0c 08 42 55 46 30 11 4d 20 0b 08 02 88 LUD..BUF0.M .... 1580: 0d 00 02 0c 00 00 00 00 00 ff 00 00 00 00 01 87 ................ 1590: 17 00 01 0c 03 00 00 00 00 00 00 00 00 f7 0c 00 ................ 15a0: 00 00 00 00 00 f8 0c 00 00 47 01 f8 0c f8 0c 01 .........G...... 15b0: 08 87 17 00 01 0c 03 00 00 00 00 00 0d 00 00 ff ................ 15c0: ff 00 00 00 00 00 00 00 f3 00 00 87 17 00 00 0c ................ 15d0: 03 00 00 00 00 00 00 0a 00 ff ff 0b 00 00 00 00 ................ 15e0: 00 00 00 02 00 87 17 00 00 0c 03 00 00 00 00 00 ................ 15f0: 00 0c 00 ff 3f 0c 00 00 00 00 00 00 40 00 00 87 ....?.......@... 1600: 17 00 00 0c 03 00 00 00 00 00 40 0c 00 ff 7f 0c ..........@..... 1610: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 1620: 00 00 00 00 80 0c 00 ff bf 0c 00 00 00 00 00 00 ................ 1630: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0c @............... 1640: 00 ff ff 0c 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1650: 00 0c 03 00 00 00 00 00 00 0d 00 ff 3f 0d 00 00 ............?... 1660: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1670: 00 00 40 0d 00 ff 7f 0d 00 00 00 00 00 00 40 00 ..@...........@. 1680: 00 87 17 00 00 0c 03 00 00 00 00 00 80 0d 00 ff ................ 1690: bf 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c ........@....... 16a0: 03 00 00 00 00 00 c0 0d 00 ff ff 0d 00 00 00 00 ................ 16b0: 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 ..@............. 16c0: 00 0e 00 ff 3f 0e 00 00 00 00 00 00 40 00 00 87 ....?.......@... 16d0: 17 00 00 0c 03 00 00 00 00 00 40 0e 00 ff 7f 0e ..........@..... 16e0: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 16f0: 00 00 00 00 80 0e 00 ff bf 0e 00 00 00 00 00 00 ................ 1700: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0e @............... 1710: 00 ff ff 0e 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1720: 00 0c 03 00 00 00 00 00 00 0f 00 ff ff 0f 00 00 ................ 1730: 00 00 00 00 00 01 00 87 17 00 00 0c 03 00 00 00 ................ 1740: 00 00 00 00 00 ff ff ff df 00 00 00 00 00 00 00 ................ 1750: 00 87 17 00 00 0c 03 00 00 00 00 00 00 00 f0 ff ................ 1760: ff bf fe 00 00 00 00 00 00 c0 0e 87 17 00 00 0c ................ 1770: 03 00 00 00 00 00 00 d4 fe ff 4f d4 fe 00 00 00 ..........O..... 1780: 00 00 00 00 00 79 00 14 4b 3d 5f 43 52 53 08 a0 .....y..K=_CRS.. 1790: 1c 5e 2e 4d 43 48 43 50 4d 31 4c 8a 42 55 46 30 .^.MCHCPM1L.BUF0 17a0: 0a 7c 43 30 4c 4e 70 00 43 30 4c 4e a0 1f 93 5e .|C0LNp.C0LN...^ 17b0: 2e 4d 43 48 43 50 4d 31 4c 01 8d 42 55 46 30 0b .MCHCPM1L..BUF0. 17c0: 58 03 43 30 52 57 70 00 43 30 52 57 a0 1c 5e 2e X.C0RWp.C0RW..^. 17d0: 4d 43 48 43 50 4d 31 48 8a 42 55 46 30 0a 96 43 MCHCPM1H.BUF0..C 17e0: 34 4c 4e 70 00 43 34 4c 4e a0 1f 93 5e 2e 4d 43 4LNp.C4LN...^.MC 17f0: 48 43 50 4d 31 48 01 8d 42 55 46 30 0b 28 04 43 HCPM1H..BUF0.(.C 1800: 34 52 57 70 00 43 34 52 57 a0 1c 5e 2e 4d 43 48 4RWp.C4RW..^.MCH 1810: 43 50 4d 32 4c 8a 42 55 46 30 0a b0 43 38 4c 4e CPM2L.BUF0..C8LN 1820: 70 00 43 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 p.C8LN...^.MCHCP 1830: 4d 32 4c 01 8d 42 55 46 30 0b f8 04 43 38 52 57 M2L..BUF0...C8RW 1840: 70 00 43 38 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d p.C8RW..^.MCHCPM 1850: 32 48 8a 42 55 46 30 0a ca 43 43 4c 4e 70 00 43 2H.BUF0..CCLNp.C 1860: 43 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 32 48 CLN...^.MCHCPM2H 1870: 01 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 43 ..BUF0...CCRWp.C 1880: 43 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d 33 4c 8a CRW..^.MCHCPM3L. 1890: 42 55 46 30 0a e4 44 30 4c 4e 70 00 44 30 4c 4e BUF0..D0LNp.D0LN 18a0: a0 1f 93 5e 2e 4d 43 48 43 50 4d 33 4c 01 8d 42 ...^.MCHCPM3L..B 18b0: 55 46 30 0b 98 06 44 30 52 57 70 00 44 30 52 57 UF0...D0RWp.D0RW 18c0: a0 1c 5e 2e 4d 43 48 43 50 4d 33 48 8a 42 55 46 ..^.MCHCPM3H.BUF 18d0: 30 0a fe 44 34 4c 4e 70 00 44 34 4c 4e a0 1f 93 0..D4LNp.D4LN... 18e0: 5e 2e 4d 43 48 43 50 4d 33 48 01 8d 42 55 46 30 ^.MCHCPM3H..BUF0 18f0: 0b 68 07 44 34 52 57 70 00 44 34 52 57 a0 1d 5e .h.D4RWp.D4RW..^ 1900: 2e 4d 43 48 43 50 4d 34 4c 8a 42 55 46 30 0b 18 .MCHCPM4L.BUF0.. 1910: 01 44 38 4c 4e 70 00 44 38 4c 4e a0 1f 93 5e 2e .D8LNp.D8LN...^. 1920: 4d 43 48 43 50 4d 34 4c 01 8d 42 55 46 30 0b 38 MCHCPM4L..BUF0.8 1930: 08 44 38 52 57 70 00 44 38 52 57 a0 1d 5e 2e 4d .D8RWp.D8RW..^.M 1940: 43 48 43 50 4d 34 48 8a 42 55 46 30 0b 32 01 44 CHCPM4H.BUF0.2.D 1950: 43 4c 4e 70 00 44 43 4c 4e a0 1f 93 5e 2e 4d 43 CLNp.DCLN...^.MC 1960: 48 43 50 4d 34 48 01 8d 42 55 46 30 0b 08 09 44 HCPM4H..BUF0...D 1970: 43 52 57 70 00 44 43 52 57 a0 1d 5e 2e 4d 43 48 CRWp.DCRW..^.MCH 1980: 43 50 4d 35 4c 8a 42 55 46 30 0b 4c 01 45 30 4c CPM5L.BUF0.L.E0L 1990: 4e 70 00 45 30 4c 4e a0 1f 93 5e 2e 4d 43 48 43 Np.E0LN...^.MCHC 19a0: 50 4d 35 4c 01 8d 42 55 46 30 0b d8 09 45 30 52 PM5L..BUF0...E0R 19b0: 57 70 00 45 30 52 57 a0 1d 5e 2e 4d 43 48 43 50 Wp.E0RW..^.MCHCP 19c0: 4d 35 48 8a 42 55 46 30 0b 66 01 45 34 4c 4e 70 M5H.BUF0.f.E4LNp 19d0: 00 45 34 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d .E4LN...^.MCHCPM 19e0: 35 48 01 8d 42 55 46 30 0b a8 0a 45 34 52 57 70 5H..BUF0...E4RWp 19f0: 00 45 34 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 .E4RW..^.MCHCPM6 1a00: 4c 8a 42 55 46 30 0b 80 01 45 38 4c 4e 70 00 45 L.BUF0...E8LNp.E 1a10: 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 4c 8LN...^.MCHCPM6L 1a20: 01 8d 42 55 46 30 0b 78 0b 45 38 52 57 70 00 45 ..BUF0.x.E8RWp.E 1a30: 38 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 48 8a 8RW..^.MCHCPM6H. 1a40: 42 55 46 30 0b 9a 01 45 43 4c 4e 70 00 45 43 4c BUF0...ECLNp.ECL 1a50: 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 48 01 8d N...^.MCHCPM6H.. 1a60: 42 55 46 30 0b 48 0c 45 43 52 57 70 00 45 43 52 BUF0.H.ECRWp.ECR 1a70: 57 a0 1d 5e 2e 4d 43 48 43 50 4d 30 48 8a 42 55 W..^.MCHCPM0H.BU 1a80: 46 30 0b b4 01 46 30 4c 4e 70 00 46 30 4c 4e a0 F0...F0LNp.F0LN. 1a90: 1f 93 5e 2e 4d 43 48 43 50 4d 30 48 01 8d 42 55 ..^.MCHCPM0H..BU 1aa0: 46 30 0b 18 0d 46 30 52 57 70 00 46 30 52 57 8a F0...F0RWp.F0RW. 1ab0: 42 55 46 30 0b c2 01 4d 31 4d 4e 8a 42 55 46 30 BUF0...M1MN.BUF0 1ac0: 0b c6 01 4d 31 4d 58 8a 42 55 46 30 0b ce 01 4d ...M1MX.BUF0...M 1ad0: 31 4c 4e 8a 42 55 46 30 0b dc 01 4d 32 4d 4e 8a 1LN.BUF0...M2MN. 1ae0: 42 55 46 30 0b e0 01 4d 32 4d 58 8a 42 55 46 30 BUF0...M2MX.BUF0 1af0: 0b e8 01 4d 32 4c 4e 79 5e 2e 4d 43 48 43 50 58 ...M2LNy^.MCHCPX 1b00: 42 52 0a 1a 4d 31 4d 58 7a 0c 00 00 00 10 5e 2e BR..M1MXz.....^. 1b10: 4d 43 48 43 50 58 53 5a 60 72 4d 31 4d 58 60 4d MCHCPXSZ`rM1MX`M 1b20: 32 4d 4e 72 74 4d 32 4d 58 4d 32 4d 4e 00 01 4d 2MNrtM2MXM2MN..M 1b30: 32 4c 4e 74 4d 31 4d 58 01 4d 31 4d 58 79 5e 2e 2LNtM1MX.M1MXy^. 1b40: 4d 43 48 43 54 4c 55 44 0a 14 4d 31 4d 4e 72 74 MCHCTLUD..M1MNrt 1b50: 4d 31 4d 58 4d 31 4d 4e 00 01 4d 31 4c 4e a4 42 M1MXM1MN..M1LN.B 1b60: 55 46 30 14 47 28 5f 50 52 54 00 a0 45 0f 47 50 UF0.G(_PRT..E.GP 1b70: 49 43 a4 12 4d 0e 13 12 0b 04 0c ff ff 01 00 00 IC..M........... 1b80: 00 0a 10 12 0b 04 0c ff ff 02 00 00 00 0a 10 12 ................ 1b90: 0b 04 0c ff ff 07 00 00 00 0a 10 12 0b 04 0c ff ................ 1ba0: ff 19 00 00 00 0a 14 12 0b 04 0c ff ff 1a 00 00 ................ 1bb0: 00 0a 10 12 0b 04 0c ff ff 1a 00 01 00 0a 15 12 ................ 1bc0: 0c 04 0c ff ff 1a 00 0a 02 00 0a 12 12 0b 04 0c ................ 1bd0: ff ff 1b 00 00 00 0a 16 12 0b 04 0c ff ff 1c 00 ................ 1be0: 00 00 0a 11 12 0b 04 0c ff ff 1c 00 01 00 0a 10 ................ 1bf0: 12 0c 04 0c ff ff 1c 00 0a 02 00 0a 12 12 0c 04 ................ 1c00: 0c ff ff 1c 00 0a 03 00 0a 13 12 0b 04 0c ff ff ................ 1c10: 1d 00 00 00 0a 17 12 0b 04 0c ff ff 1d 00 01 00 ................ 1c20: 0a 13 12 0c 04 0c ff ff 1d 00 0a 02 00 0a 12 12 ................ 1c30: 0b 04 0c ff ff 1f 00 00 00 0a 13 12 0b 04 0c ff ................ 1c40: ff 1f 00 01 00 0a 13 12 0c 04 0c ff ff 1f 00 0a ................ 1c50: 02 00 0a 13 12 0c 04 0c ff ff 1f 00 0a 03 00 0a ................ 1c60: 10 a1 49 18 a4 12 45 18 13 12 13 04 0c ff ff 01 ..I...E......... 1c70: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1c80: 0c ff ff 02 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 ......^.LPCBLNKA 1c90: 00 12 13 04 0c ff ff 07 00 00 5e 2e 4c 50 43 42 ..........^.LPCB 1ca0: 4c 4e 4b 41 00 12 13 04 0c ff ff 19 00 00 5e 2e LNKA..........^. 1cb0: 4c 50 43 42 4c 4e 4b 45 00 12 13 04 0c ff ff 1a LPCBLNKE........ 1cc0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1cd0: 0c ff ff 1a 00 01 5e 2e 4c 50 43 42 4c 4e 4b 46 ......^.LPCBLNKF 1ce0: 00 12 14 04 0c ff ff 1a 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1cf0: 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1b 00 00 5e BLNKC..........^ 1d00: 2e 4c 50 43 42 4c 4e 4b 47 00 12 13 04 0c ff ff .LPCBLNKG....... 1d10: 1c 00 00 5e 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 ...^.LPCBLNKB... 1d20: 04 0c ff ff 1c 00 01 5e 2e 4c 50 43 42 4c 4e 4b .......^.LPCBLNK 1d30: 41 00 12 14 04 0c ff ff 1c 00 0a 02 5e 2e 4c 50 A...........^.LP 1d40: 43 42 4c 4e 4b 43 00 12 14 04 0c ff ff 1c 00 0a CBLNKC.......... 1d50: 03 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0c .^.LPCBLNKD..... 1d60: ff ff 1d 00 00 5e 2e 4c 50 43 42 4c 4e 4b 48 00 .....^.LPCBLNKH. 1d70: 12 13 04 0c ff ff 1d 00 01 5e 2e 4c 50 43 42 4c .........^.LPCBL 1d80: 4e 4b 44 00 12 14 04 0c ff ff 1d 00 0a 02 5e 2e NKD...........^. 1d90: 4c 50 43 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1f LPCBLNKC........ 1da0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 ..^.LPCBLNKD.... 1db0: 0c ff ff 1f 00 01 5e 2e 4c 50 43 42 4c 4e 4b 44 ......^.LPCBLNKD 1dc0: 00 12 14 04 0c ff ff 1f 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1dd0: 42 4c 4e 4b 44 00 12 14 04 0c ff ff 1f 00 0a 03 BLNKD........... 1de0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 40 14 50 ^.LPCBLNKA.[.@.P 1df0: 44 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 DRC._HID.A...._U 1e00: 49 44 01 08 42 55 46 30 11 46 06 0a 62 86 09 00 ID..BUF0.F..b... 1e10: 01 00 00 00 00 00 40 00 00 86 09 00 01 00 00 00 ......@......... 1e20: 00 00 40 00 00 86 09 00 01 00 00 00 00 00 10 00 ..@............. 1e30: 00 86 09 00 01 00 00 00 00 00 10 00 00 86 09 00 ................ 1e40: 01 00 00 00 00 00 00 00 00 86 09 00 01 00 00 d2 ................ 1e50: fe 00 00 02 00 86 09 00 01 00 00 d4 fe 00 50 00 ..............P. 1e60: 00 86 09 00 01 00 50 d4 fe 00 b0 04 00 79 00 14 ......P......y.. 1e70: 4d 0b 5f 43 52 53 08 8a 42 55 46 30 0a 04 52 42 M._CRS..BUF0..RB 1e80: 52 30 79 5e 5e 2e 4c 50 43 42 52 43 42 41 0a 0e R0y^^.LPCBRCBA.. 1e90: 52 42 52 30 8a 42 55 46 30 0a 10 4d 42 52 30 79 RBR0.BUF0..MBR0y 1ea0: 5e 5e 2e 4d 43 48 43 4d 48 42 52 0a 0e 4d 42 52 ^^.MCHCMHBR..MBR 1eb0: 30 8a 42 55 46 30 0a 1c 44 42 52 30 79 5e 5e 2e 0.BUF0..DBR0y^^. 1ec0: 4d 43 48 43 44 49 42 52 0a 0c 44 42 52 30 8a 42 MCHCDIBR..DBR0.B 1ed0: 55 46 30 0a 28 45 42 52 30 79 5e 5e 2e 4d 43 48 UF0.(EBR0y^^.MCH 1ee0: 43 45 50 42 52 0a 0c 45 42 52 30 8a 42 55 46 30 CEPBR..EBR0.BUF0 1ef0: 0a 34 58 42 52 30 79 5e 5e 2e 4d 43 48 43 50 58 .4XBR0y^^.MCHCPX 1f00: 42 52 0a 1a 58 42 52 30 8a 42 55 46 30 0a 38 58 BR..XBR0.BUF0.8X 1f10: 53 5a 30 7a 0c 00 00 00 10 5e 5e 2e 4d 43 48 43 SZ0z.....^^.MCHC 1f20: 50 58 53 5a 58 53 5a 30 a4 42 55 46 30 5b 82 4d PXSZXSZ0.BUF0[.M 1f30: 50 50 45 47 50 08 5f 41 44 52 0c 00 00 01 00 14 PPEGP._ADR...... 1f40: 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 2c A._PRT..3GPIC.., 1f50: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 1f60: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 1f70: 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 12 ............E... 1f80: 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 43 A.........^^.LPC 1f90: 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e 2e BLNKA........^^. 1fa0: 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff 0a LPCBLNKB........ 1fb0: 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 1fc0: 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 1fd0: 00 5b 82 49 46 56 47 41 5f 08 5f 41 44 52 00 08 .[.IFVGA_._ADR.. 1fe0: 53 57 49 54 01 08 43 52 54 41 01 08 4c 43 44 41 SWIT..CRTA..LCDA 1ff0: 01 08 54 56 41 41 01 08 56 4c 44 46 01 5b 80 56 ..TVAA..VLDF.[.V 2000: 49 44 53 02 00 0a c8 5b 81 0b 56 49 44 53 03 56 IDS....[..VIDS.V 2010: 44 49 44 20 14 09 5f 53 54 41 00 a4 0a 0f 08 5f DID .._STA....._ 2020: 50 53 43 00 14 0c 5f 50 53 30 00 70 00 5f 50 53 PSC..._PS0.p._PS 2030: 43 14 0c 5f 50 53 31 00 70 01 5f 50 53 43 14 0d C.._PS1.p._PSC.. 2040: 5f 50 53 33 00 70 0a 03 5f 50 53 43 14 10 5f 44 _PS3.p.._PSC.._D 2050: 4f 53 01 70 7b 68 0a 03 00 53 57 49 54 14 17 5f OS.p{h...SWIT.._ 2060: 44 4f 44 00 a4 12 0f 03 0c 00 01 01 00 0c 10 01 DOD............. 2070: 01 00 0b 00 02 5b 82 4d 08 43 52 54 5f 14 0a 5f .....[.M.CRT_.._ 2080: 41 44 52 00 a4 0b 00 01 14 41 06 5f 44 43 53 00 ADR......A._DCS. 2090: 5e 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 ^^^^.LPCBPHSS..p 20a0: 43 41 44 4c 60 70 43 53 54 45 61 7b 60 0a 02 60 CADL`pCSTEa{`..` 20b0: 7b 61 0a 02 61 a0 08 60 70 01 43 52 54 41 a1 07 {a..a..`p.CRTA.. 20c0: 70 00 43 52 54 41 a0 13 43 52 54 41 a0 08 93 61 p.CRTA..CRTA...a 20d0: 0a 02 a4 0a 1f a1 04 a4 0a 1d a1 0f a0 08 93 61 ...............a 20e0: 0a 02 a4 0a 0f a1 04 a4 0a 0d 14 12 5f 44 47 53 ............_DGS 20f0: 00 a0 07 43 52 54 41 a4 01 a1 03 a4 00 14 06 5f ...CRTA........_ 2100: 44 53 53 01 5b 82 47 0e 4c 43 44 5f 14 0a 5f 41 DSS.[.G.LCD_.._A 2110: 44 52 00 a4 0b 10 01 14 4d 05 5f 44 43 53 00 5e DR......M._DCS.^ 2120: 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 ^^^.LPCBPHSS..pC 2130: 41 44 4c 60 70 43 53 54 45 61 7b 60 01 60 7b 61 ADL`pCSTEa{`.`{a 2140: 01 61 a0 08 60 70 01 4c 43 44 41 a1 07 70 00 4c .a..`p.LCDA..p.L 2150: 43 44 41 a0 12 4c 43 44 41 a0 07 93 61 01 a4 0a CDA..LCDA...a... 2160: 1f a1 04 a4 0a 1d a1 0e a0 07 93 61 01 a4 0a 0f ...........a.... 2170: a1 04 a4 0a 0d 14 12 5f 44 47 53 00 a0 07 4c 43 ......._DGS...LC 2180: 44 41 a4 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 DA........_DSS.. 2190: 1d 5f 42 43 4c 00 a4 12 15 0a 0a 46 0a 28 00 0a ._BCL......F.(.. 21a0: 0a 0a 14 0a 1e 0a 28 0a 32 0a 3c 0a 46 14 20 5f ......(.2.<.F. _ 21b0: 42 43 4d 01 78 68 0a 0a 60 61 70 61 5e 5e 5e 5e BCM.xh..`apa^^^^ 21c0: 2f 03 4c 50 43 42 45 43 30 5f 42 52 54 53 14 1e /.LPCBEC0_BRTS.. 21d0: 5f 42 51 43 00 77 5e 5e 5e 5e 2f 03 4c 50 43 42 _BQC.w^^^^/.LPCB 21e0: 45 43 30 5f 42 52 54 53 0a 0a 60 a4 60 5b 82 4d EC0_BRTS..`.`[.M 21f0: 08 54 56 5f 5f 14 0a 5f 41 44 52 00 a4 0b 00 02 .TV__.._ADR..... 2200: 14 41 06 5f 44 43 53 00 5e 5e 5e 5e 2e 4c 50 43 .A._DCS.^^^^.LPC 2210: 42 50 48 53 53 0a 0c 70 43 41 44 4c 60 70 43 53 BPHSS..pCADL`pCS 2220: 54 45 61 7b 60 0a 04 60 7b 61 0a 04 61 a0 08 60 TEa{`..`{a..a..` 2230: 70 01 54 56 41 41 a1 07 70 00 54 56 41 41 a0 13 p.TVAA..p.TVAA.. 2240: 54 56 41 41 a0 08 93 61 0a 04 a4 0a 1f a1 04 a4 TVAA...a........ 2250: 0a 1d a1 0f a0 08 93 61 0a 04 a4 0a 0f a1 04 a4 .......a........ 2260: 0a 0d 14 12 5f 44 47 53 00 a0 07 54 56 41 41 a4 ...._DGS...TVAA. 2270: 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 49 10 44 ......._DSS..I.D 2280: 53 53 57 00 a0 4a 0e 93 53 57 49 54 00 5e 5e 5e SSW..J..SWIT.^^^ 2290: 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 41 44 4c .LPCBPHSS..pCADL 22a0: 60 70 43 53 54 45 61 a0 16 94 61 01 7b 60 61 56 `pCSTEa...a.{`aV 22b0: 4c 44 46 7b 56 4c 44 46 0a fe 56 4c 44 46 a0 43 LDF{VLDF..VLDF.C 22c0: 0a 56 4c 44 46 a0 27 93 60 0a 09 a0 0b 93 61 0a .VLDF.'.`.....a. 22d0: 08 53 54 42 4c 0a 02 a0 0a 93 61 01 53 54 42 4c .STBL.....a.STBL 22e0: 0a 03 a0 0a 93 61 0a 09 53 54 42 4c 01 a0 28 93 .....a..STBL..(. 22f0: 60 0a 0a a0 0b 93 61 0a 08 53 54 42 4c 0a 05 a0 `.....a..STBL... 2300: 0a 93 61 0a 02 53 54 42 4c 01 a0 0b 93 61 0a 0a ..a..STBL....a.. 2310: 53 54 42 4c 0a 04 a0 4b 04 93 60 0a 0b a0 0b 93 STBL...K..`..... 2320: 61 0a 08 53 54 42 4c 0a 02 a0 0b 93 61 0a 09 53 a..STBL.....a..S 2330: 54 42 4c 0a 05 a0 0a 93 61 01 53 54 42 4c 0a 03 TBL.....a.STBL.. 2340: a0 0b 93 61 0a 0a 53 54 42 4c 0a 04 a0 0a 93 61 ...a..STBL.....a 2350: 0a 02 53 54 42 4c 01 a0 0a 93 61 0a 0b 53 54 42 ..STBL....a..STB 2360: 4c 01 a1 0c 70 01 56 4c 44 46 53 54 42 4c 01 a1 L...p.VLDFSTBL.. 2370: 16 a0 14 93 53 57 49 54 01 5e 5e 5e 2e 4c 50 43 ....SWIT.^^^.LPC 2380: 42 50 48 53 53 01 14 45 0b 53 54 42 4c 01 a0 16 BPHSS..E.STBL... 2390: 93 68 01 70 00 43 52 54 41 70 01 4c 43 44 41 70 .h.p.CRTAp.LCDAp 23a0: 00 54 56 41 41 a0 17 93 68 0a 02 70 01 43 52 54 .TVAA...h..p.CRT 23b0: 41 70 00 4c 43 44 41 70 00 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23c0: 68 0a 03 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 23d0: 00 54 56 41 41 a0 17 93 68 0a 04 70 00 43 52 54 .TVAA...h..p.CRT 23e0: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23f0: 68 0a 05 70 00 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2400: 01 54 56 41 41 a0 17 93 68 0a 06 70 01 43 52 54 .TVAA...h..p.CRT 2410: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 2420: 68 0a 07 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2430: 01 54 56 41 41 86 56 47 41 5f 0a 80 5b 82 42 f8 .TVAA.VGA_..[.B. 2440: 47 46 58 30 08 5f 41 44 52 0c 00 00 02 00 14 10 GFX0._ADR....... 2450: 5f 44 4f 53 01 70 7b 68 0a 07 00 44 53 45 4e 14 _DOS.p{h...DSEN. 2460: 41 26 5f 44 4f 44 00 70 00 4e 44 49 44 a0 15 92 A&_DOD.p.NDID... 2470: 93 44 49 44 4c 00 70 53 44 44 4c 44 49 44 31 44 .DIDL.pSDDLDID1D 2480: 49 44 31 a0 15 92 93 44 44 4c 32 00 70 53 44 44 ID1....DDL2.pSDD 2490: 4c 44 49 44 32 44 49 44 32 a0 15 92 93 44 44 4c LDID2DID2....DDL 24a0: 33 00 70 53 44 44 4c 44 49 44 33 44 49 44 33 a0 3.pSDDLDID3DID3. 24b0: 15 92 93 44 44 4c 34 00 70 53 44 44 4c 44 49 44 ...DDL4.pSDDLDID 24c0: 34 44 49 44 34 a0 15 92 93 44 44 4c 35 00 70 53 4DID4....DDL5.pS 24d0: 44 44 4c 44 49 44 35 44 49 44 35 a0 2c 93 4e 44 DDLDID5DID5.,.ND 24e0: 49 44 01 08 54 4d 50 31 12 07 01 0c ff ff ff ff ID..TMP1........ 24f0: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2500: 31 00 00 a4 54 4d 50 31 a0 46 04 93 4e 44 49 44 1...TMP1.F..NDID 2510: 0a 02 08 54 4d 50 32 12 0c 02 0c ff ff ff ff 0c ...TMP2......... 2520: ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 ....p}.....DID1. 2530: 88 54 4d 50 32 00 00 70 7d 0c 00 00 01 00 44 49 .TMP2..p}.....DI 2540: 44 32 00 88 54 4d 50 32 01 00 a4 54 4d 50 32 a0 D2..TMP2...TMP2. 2550: 4f 05 93 4e 44 49 44 0a 03 08 54 4d 50 33 12 11 O..NDID...TMP3.. 2560: 03 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 2570: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2580: 33 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 3..p}.....DID2.. 2590: 54 4d 50 33 01 00 70 7d 0c 00 00 01 00 44 49 44 TMP3..p}.....DID 25a0: 33 00 88 54 4d 50 33 0a 02 00 a4 54 4d 50 33 a0 3..TMP3....TMP3. 25b0: 48 07 93 4e 44 49 44 0a 04 08 54 4d 50 34 12 16 H..NDID...TMP4.. 25c0: 04 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 25d0: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 25e0: 00 88 54 4d 50 34 00 00 70 7d 0c 00 00 01 00 44 ..TMP4..p}.....D 25f0: 49 44 32 00 88 54 4d 50 34 01 00 70 7d 0c 00 00 ID2..TMP4..p}... 2600: 01 00 44 49 44 33 00 88 54 4d 50 34 0a 02 00 70 ..DID3..TMP4...p 2610: 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d 50 34 }.....DID4..TMP4 2620: 0a 03 00 a4 54 4d 50 34 a0 41 09 94 4e 44 49 44 ....TMP4.A..NDID 2630: 0a 04 08 54 4d 50 35 12 1b 05 0c ff ff ff ff 0c ...TMP5......... 2640: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 2650: ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 88 ...p}.....DID1.. 2660: 54 4d 50 35 00 00 70 7d 0c 00 00 01 00 44 49 44 TMP5..p}.....DID 2670: 32 00 88 54 4d 50 35 01 00 70 7d 0c 00 00 01 00 2..TMP5..p}..... 2680: 44 49 44 33 00 88 54 4d 50 35 0a 02 00 70 7d 0c DID3..TMP5...p}. 2690: 00 00 01 00 44 49 44 34 00 88 54 4d 50 35 0a 03 ....DID4..TMP5.. 26a0: 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d .p}.....DID4..TM 26b0: 50 35 0a 04 00 a4 54 4d 50 35 a4 12 05 01 0b 00 P5....TMP5...... 26c0: 04 5b 82 43 06 44 44 30 31 14 1c 5f 41 44 52 08 .[.C.DD01.._ADR. 26d0: a0 09 93 44 49 44 31 00 a4 01 a1 0b a4 7b 0b ff ...DID1......{.. 26e0: ff 44 49 44 31 00 14 0f 5f 44 43 53 00 a4 43 44 .DID1..._DCS..CD 26f0: 44 53 44 49 44 31 14 0f 5f 44 47 53 00 a4 4e 44 DSDID1.._DGS..ND 2700: 44 53 44 49 44 31 14 1f 5f 44 53 53 01 a0 18 93 DSDID1.._DSS.... 2710: 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 {h...........pNS 2720: 54 45 43 53 54 45 5b 82 44 06 44 44 30 32 14 1d TECSTE[.D.DD02.. 2730: 5f 41 44 52 08 a0 0a 93 44 49 44 32 00 a4 0a 02 _ADR....DID2.... 2740: a1 0b a4 7b 0b ff ff 44 49 44 32 00 14 0f 5f 44 ...{...DID2..._D 2750: 43 53 00 a4 43 44 44 53 44 49 44 32 14 0f 5f 44 CS..CDDSDID2.._D 2760: 47 53 00 a4 4e 44 44 53 44 49 44 32 14 1f 5f 44 GS..NDDSDID2.._D 2770: 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 SS....{h........ 2780: 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 41 07 ...pNSTECSTE[.A. 2790: 44 44 30 33 14 1d 5f 41 44 52 08 a0 0a 93 44 49 DD03.._ADR....DI 27a0: 44 33 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 49 44 D3.......{...DID 27b0: 33 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 33 3..._DCS....DID3 27c0: 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 33 14 .......CDDSDID3. 27d0: 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 44 33 14 ._DGS..NDDSDID3. 27e0: 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 ._DSS....{h..... 27f0: 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 5b ......pNSTECSTE[ 2800: 82 41 07 44 44 30 34 14 1d 5f 41 44 52 08 a0 0a .A.DD04.._ADR... 2810: 93 44 49 44 34 00 a4 0a 04 a1 0b a4 7b 0b ff ff .DID4.......{... 2820: 44 49 44 34 00 14 1c 5f 44 43 53 00 a0 0a 93 44 DID4..._DCS....D 2830: 49 44 34 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 ID4.......CDDSDI 2840: 44 34 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 D4.._DGS..NDDSDI 2850: 44 34 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 D4.._DSS....{h.. 2860: 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 .........pNSTECS 2870: 54 45 5b 82 41 07 44 44 30 35 14 1d 5f 41 44 52 TE[.A.DD05.._ADR 2880: 08 a0 0a 93 44 49 44 35 00 a4 0a 05 a1 0b a4 7b ....DID5.......{ 2890: 0b ff ff 44 49 44 35 00 14 1c 5f 44 43 53 00 a0 ...DID5..._DCS.. 28a0: 0a 93 44 49 44 35 00 a4 0a 0b a1 0a a4 43 44 44 ..DID5.......CDD 28b0: 53 44 49 44 35 14 0f 5f 44 47 53 00 a4 4e 44 44 SDID5.._DGS..NDD 28c0: 53 44 49 44 35 14 1f 5f 44 53 53 01 a0 18 93 7b SDID5.._DSS....{ 28d0: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 28e0: 45 43 53 54 45 14 4e 06 53 44 44 4c 01 75 4e 44 ECSTE.N.SDDL.uND 28f0: 49 44 70 7b 68 0b 0f 0f 00 60 7d 0c 00 00 00 80 IDp{h....`}..... 2900: 60 61 a0 09 93 44 49 44 4c 60 a4 61 a0 09 93 44 `a...DIDL`.a...D 2910: 44 4c 32 60 a4 61 a0 09 93 44 44 4c 33 60 a4 61 DL2`.a...DDL3`.a 2920: a0 09 93 44 44 4c 34 60 a4 61 a0 09 93 44 44 4c ...DDL4`.a...DDL 2930: 35 60 a4 61 a0 09 93 44 44 4c 36 60 a4 61 a0 09 5`.a...DDL6`.a.. 2940: 93 44 44 4c 37 60 a4 61 a0 09 93 44 44 4c 38 60 .DDL7`.a...DDL8` 2950: a4 61 a4 00 14 4a 08 43 44 44 53 01 a0 0f 93 43 .a...J.CDDS....C 2960: 41 44 4c 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 ADL{h..........C 2970: 41 4c 32 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL2{h..........C 2980: 41 4c 33 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL3{h..........C 2990: 41 4c 34 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL4{h..........C 29a0: 41 4c 35 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL5{h..........C 29b0: 41 4c 36 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL6{h..........C 29c0: 41 4c 37 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL7{h..........C 29d0: 41 4c 38 7b 68 0b 0f 0f 00 a4 0a 1f a4 0a 1d 14 AL8{h........... 29e0: 41 08 4e 44 44 53 01 a0 0e 93 4e 41 44 4c 7b 68 A.NDDS....NADL{h 29f0: 0b 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 32 7b 68 0b .........NDL2{h. 2a00: 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 33 7b 68 0b 0f ........NDL3{h.. 2a10: 0f 00 a4 01 a0 0e 93 4e 44 4c 34 7b 68 0b 0f 0f .......NDL4{h... 2a20: 00 a4 01 a0 0e 93 4e 44 4c 35 7b 68 0b 0f 0f 00 ......NDL5{h.... 2a30: a4 01 a0 0e 93 4e 44 4c 36 7b 68 0b 0f 0f 00 a4 .....NDL6{h..... 2a40: 01 a0 0e 93 4e 44 4c 37 7b 68 0b 0f 0f 00 a4 01 ....NDL7{h...... 2a50: a0 0e 93 4e 44 4c 38 7b 68 0b 0f 0f 00 a4 01 a4 ...NDL8{h....... 2a60: 00 14 40 07 42 52 54 4e 09 a0 14 93 7b 44 49 44 ..@.BRTN....{DID 2a70: 31 0b 00 0f 00 0b 00 04 86 44 44 30 31 68 a0 14 1........DD01h.. 2a80: 93 7b 44 49 44 32 0b 00 0f 00 0b 00 04 86 44 44 .{DID2........DD 2a90: 30 32 68 a0 14 93 7b 44 49 44 33 0b 00 0f 00 0b 02h...{DID3..... 2aa0: 00 04 86 44 44 30 33 68 a0 14 93 7b 44 49 44 34 ...DD03h...{DID4 2ab0: 0b 00 0f 00 0b 00 04 86 44 44 30 34 68 a0 14 93 ........DD04h... 2ac0: 7b 44 49 44 35 0b 00 0f 00 0b 00 04 86 44 44 30 {DID5........DD0 2ad0: 35 68 10 24 5e 5e 50 43 49 30 5b 80 4d 43 48 50 5h.$^^PCI0[.MCHP 2ae0: 02 0a 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 ..@..[..MCHP..@0 2af0: 54 41 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 TASM...[.IGDP..@ 2b00: 0a c0 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 ..[.E.IGDP..@... 2b10: 47 49 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 GIVD...GUMA..... 2b20: 47 4d 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 GMFN....@FASLE.. 2b30: 18 47 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 .GSSE.GSSB.GSES. 2b40: 00 30 00 08 43 44 56 4c 05 00 03 00 18 4c 42 50 .0..CDVL.....LBP 2b50: 43 08 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 C..0ASLS [.IGDM. 2b60: 41 53 4c 42 0b 00 20 5b 81 4e 16 49 47 44 4d 00 ASLB.. [.N.IGDM. 2b70: 53 49 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 SIGN@.SIZE OVER 2b80: 53 56 45 52 40 10 56 56 45 52 40 08 47 56 45 52 SVER@.VVER@.GVER 2b90: 40 08 4d 42 4f 58 20 00 40 52 44 52 44 59 20 43 @.MBOX .@RDRDY C 2ba0: 53 54 53 20 43 45 56 54 20 00 40 0a 44 49 44 4c STS CEVT .@.DIDL 2bb0: 20 44 44 4c 32 20 44 44 4c 33 20 44 44 4c 34 20 DDL2 DDL3 DDL4 2bc0: 44 44 4c 35 20 44 44 4c 36 20 44 44 4c 37 20 44 DDL5 DDL6 DDL7 D 2bd0: 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 20 43 50 DL8 CPDL CPL2 CP 2be0: 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 43 50 4c L3 CPL4 CPL5 CPL 2bf0: 36 20 43 50 4c 37 20 43 50 4c 38 20 43 41 44 4c 6 CPL7 CPL8 CADL 2c00: 20 43 41 4c 32 20 43 41 4c 33 20 43 41 4c 34 20 CAL2 CAL3 CAL4 2c10: 43 41 4c 35 20 43 41 4c 36 20 43 41 4c 37 20 43 CAL5 CAL6 CAL7 C 2c20: 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 20 4e 44 AL8 NADL NDL2 ND 2c30: 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 4e 44 4c L3 NDL4 NDL5 NDL 2c40: 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 53 4c 50 6 NDL7 NDL8 ASLP 2c50: 20 54 49 44 58 20 43 48 50 44 20 43 4c 49 44 20 TIDX CHPD CLID 2c60: 43 44 43 4b 20 53 58 53 57 20 45 56 54 53 20 43 CDCK SXSW EVTS C 2c70: 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 43 49 45 NOT NRDY .@.SCIE 2c80: 01 47 45 46 43 04 47 58 46 43 03 47 45 53 46 08 .GEFC.GXFC.GESF. 2c90: 00 10 50 41 52 4d 20 44 53 4c 50 20 00 40 7a 41 ..PARM DSLP .@zA 2ca0: 52 44 59 20 41 53 4c 43 20 54 43 48 45 20 41 4c RDY ASLC TCHE AL 2cb0: 53 49 20 42 43 4c 50 20 50 46 49 54 20 43 42 4c SI BCLP PFIT CBL 2cc0: 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 00 40 5c V BCLM@.CPFM .@\ 2cd0: 47 56 44 31 80 00 0e 08 44 42 54 42 12 32 15 00 GVD1....DBTB.2.. 2ce0: 0a 07 0a 38 0b c0 01 0b 00 0e 0a 3f 0b c7 01 0b ...8.......?.... 2cf0: 07 0e 0b f8 01 0b 38 0e 0b c0 0f 00 00 00 00 00 ......8......... 2d00: 0b 00 70 0b 07 70 0b 38 70 0b c0 71 0b 00 7e 08 ..p..p.8p..q..~. 2d10: 43 44 43 54 12 23 03 12 0a 03 0a c8 0b 40 01 0b CDCT.#.......@.. 2d20: 90 01 12 0a 03 0a c8 0b 4d 01 0b 90 01 12 0a 03 ........M....... 2d30: 0a de 0b 4d 01 0b 7d 01 08 53 55 43 43 01 08 4e ...M..}..SUCC..N 2d40: 56 4c 44 0a 02 08 43 52 49 54 0a 04 08 4e 43 52 VLD...CRIT...NCR 2d50: 54 0a 06 14 4c 4a 47 53 43 49 08 14 44 1e 47 42 T...LJGSCI..D.GB 2d60: 44 41 08 a0 1a 93 47 45 53 46 00 70 0b 79 02 50 DA....GESF.p.y.P 2d70: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 1a ARMp.GESF.SUCC.. 2d80: 93 47 45 53 46 01 70 0b 40 02 50 41 52 4d 70 00 .GESF.p.@.PARMp. 2d90: 47 45 53 46 a4 53 55 43 43 a0 47 04 93 47 45 53 GESF.SUCC.G..GES 2da0: 46 0a 04 7b 50 41 52 4d 0c 00 00 ff ef 50 41 52 F..{PARM.....PAR 2db0: 4d 7b 50 41 52 4d 79 83 88 44 42 54 42 49 42 54 M{PARMy..DBTBIBT 2dc0: 54 00 0a 10 00 50 41 52 4d 7d 49 42 54 54 50 41 T....PARM}IBTTPA 2dd0: 52 4d 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 RMPARMp.GESF.SUC 2de0: 43 a0 4a 06 93 47 45 53 46 0a 05 70 49 50 53 43 C.J..GESF..pIPSC 2df0: 50 41 52 4d 7d 50 41 52 4d 79 49 50 41 54 0a 08 PARM}PARMyIPAT.. 2e00: 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 41 52 .PARMrPARM...PAR 2e10: 4d 7d 50 41 52 4d 79 4c 49 44 53 0a 10 00 50 41 M}PARMyLIDS...PA 2e20: 52 4d 72 50 41 52 4d 0c 00 00 01 00 50 41 52 4d RMrPARM.....PARM 2e30: 7d 50 41 52 4d 79 49 42 49 41 0a 14 00 50 41 52 }PARMyIBIA...PAR 2e40: 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 2d 93 47 Mp.GESF.SUCC.-.G 2e50: 45 53 46 0a 06 70 49 54 56 46 50 41 52 4d 7d 50 ESF..pITVFPARM}P 2e60: 41 52 4d 79 49 54 56 4d 0a 04 00 50 41 52 4d 70 ARMyITVM...PARMp 2e70: 00 47 45 53 46 a4 53 55 43 43 a0 4f 08 93 47 45 .GESF.SUCC.O..GE 2e80: 53 46 0a 07 70 47 49 56 44 50 41 52 4d 7f 50 41 SF..pGIVDPARM.PA 2e90: 52 4d 01 50 41 52 4d 7d 50 41 52 4d 79 47 4d 46 RM.PARM}PARMyGMF 2ea0: 4e 01 00 50 41 52 4d 7d 50 41 52 4d 0b 00 10 50 N..PARM}PARM...P 2eb0: 41 52 4d a0 16 49 44 4d 4d 7d 50 41 52 4d 79 49 ARM..IDMM}PARMyI 2ec0: 44 4d 53 0a 11 00 50 41 52 4d a1 12 7d 50 41 52 DMS...PARM..}PAR 2ed0: 4d 79 49 44 4d 53 0a 0d 00 50 41 52 4d 7d 79 83 MyIDMS...PARM}y. 2ee0: 88 83 88 43 44 43 54 48 56 43 4f 00 74 43 44 56 ...CDCTHVCO.tCDV 2ef0: 4c 01 00 00 0a 15 00 50 41 52 4d 50 41 52 4d 70 L......PARMPARMp 2f00: 01 47 45 53 46 a4 53 55 43 43 a0 2a 93 47 45 53 .GESF.SUCC.*.GES 2f10: 46 0a 0a 70 00 50 41 52 4d a0 10 49 53 53 43 7d F..p.PARM..ISSC} 2f20: 50 41 52 4d 0a 03 50 41 52 4d 70 00 47 45 53 46 PARM..PARMp.GESF 2f30: a4 53 55 43 43 70 00 47 45 53 46 a4 43 52 49 54 .SUCCp.GESF.CRIT 2f40: 14 41 28 53 42 43 42 08 a0 20 93 47 45 53 46 00 .A(SBCB.. .GESF. 2f50: 70 00 50 41 52 4d 70 0b 7d f7 50 41 52 4d 70 00 p.PARMp.}.PARMp. 2f60: 47 45 53 46 a4 53 55 43 43 a0 18 93 47 45 53 46 GESF.SUCC...GESF 2f70: 01 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 2f80: 43 43 a0 19 93 47 45 53 46 0a 03 70 00 47 45 53 CC...GESF..p.GES 2f90: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 Fp.PARM.SUCC...G 2fa0: 45 53 46 0a 04 70 00 47 45 53 46 70 00 50 41 52 ESF..p.GESFp.PAR 2fb0: 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 05 70 M.SUCC...GESF..p 2fc0: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 2fd0: a0 37 93 47 45 53 46 0a 06 70 7b 50 41 52 4d 0a .7.GESF..p{PARM. 2fe0: 0f 00 49 54 56 46 70 7a 7b 50 41 52 4d 0a f0 00 ..ITVFpz{PARM... 2ff0: 0a 04 00 49 54 56 4d 70 00 47 45 53 46 70 00 50 ...ITVMp.GESFp.P 3000: 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a ARM.SUCC...GESF. 3010: 07 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 3020: 43 43 a0 19 93 47 45 53 46 0a 08 70 00 47 45 53 CC...GESF..p.GES 3030: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 24 93 47 Fp.PARM.SUCC.$.G 3040: 45 53 46 0a 09 7b 50 41 52 4d 0a ff 49 42 54 54 ESF..{PARM..IBTT 3050: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 3060: 43 a0 46 05 93 47 45 53 46 0a 0a 7b 50 41 52 4d C.F..GESF..{PARM 3070: 0a ff 49 50 53 43 a0 21 7b 7a 50 41 52 4d 0a 08 ..IPSC.!{zPARM.. 3080: 00 0a ff 00 7b 7a 50 41 52 4d 0a 08 00 0a ff 49 ....{zPARM.....I 3090: 50 41 54 76 49 50 41 54 7b 7a 50 41 52 4d 0a 14 PATvIPAT{zPARM.. 30a0: 00 0a 07 49 42 49 41 70 00 47 45 53 46 70 00 50 ...IBIAp.GESFp.P 30b0: 41 52 4d a4 53 55 43 43 a0 40 06 93 47 45 53 46 ARM.SUCC.@..GESF 30c0: 0a 0b 7b 7a 50 41 52 4d 01 00 01 49 46 31 45 a0 ..{zPARM...IF1E. 30d0: 21 7b 50 41 52 4d 0c 00 e0 01 00 00 7b 7a 50 41 !{PARM......{zPA 30e0: 52 4d 0a 0d 00 0a 0f 49 44 4d 53 70 00 49 44 4d RM.....IDMSp.IDM 30f0: 4d a1 16 7b 7a 50 41 52 4d 0a 11 00 0a 0f 49 44 M..{zPARM.....ID 3100: 4d 53 70 01 49 44 4d 4d 70 00 47 45 53 46 70 00 MSp.IDMMp.GESFp. 3110: 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 PARM.SUCC...GESF 3120: 0a 10 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 ..p.GESFp.PARM.S 3130: 55 43 43 a0 1f 93 47 45 53 46 0a 11 7d 50 41 52 UCC...GESF..}PAR 3140: 4d 0b 00 01 50 41 52 4d 70 00 47 45 53 46 a4 53 M...PARMp.GESF.S 3150: 55 43 43 a0 49 04 93 47 45 53 46 0a 12 a0 26 7b UCC.I..GESF...&{ 3160: 50 41 52 4d 01 00 a0 10 93 7a 50 41 52 4d 01 00 PARM.....zPARM.. 3170: 01 70 01 49 53 53 43 a1 0c 70 00 47 45 53 46 a4 .p.ISSC..p.GESF. 3180: 43 52 49 54 a1 07 70 00 49 53 53 43 70 00 47 45 CRIT..p.ISSCp.GE 3190: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 SFp.PARM.SUCC... 31a0: 47 45 53 46 0a 13 70 00 47 45 53 46 70 00 50 41 GESF..p.GESFp.PA 31b0: 52 4d a4 53 55 43 43 70 00 47 45 53 46 a4 53 55 RM.SUCCp.GESF.SU 31c0: 43 43 a0 11 93 47 45 46 43 0a 04 70 47 42 44 41 CC...GEFC..pGBDA 31d0: 47 58 46 43 a0 11 93 47 45 46 43 0a 06 70 53 42 GXFC...GEFC..pSB 31e0: 43 42 47 58 46 43 70 00 47 45 46 43 70 01 53 43 CBGXFCp.GEFCp.SC 31f0: 49 53 70 00 47 53 53 45 70 00 53 43 49 45 a4 00 ISp.GSSEp.SCIE.. 3200: 14 19 50 44 52 44 00 a0 0c 92 44 52 44 59 5b 22 ..PDRD....DRDY[" 3210: 41 53 4c 50 a4 92 44 52 44 59 14 1d 50 53 54 53 ASLP..DRDY..PSTS 3220: 00 a0 0e 94 43 53 54 53 0a 02 5b 22 41 53 4c 50 ....CSTS..["ASLP 3230: a4 93 43 53 54 53 0a 03 14 47 06 47 4e 4f 54 02 ..CSTS...G.GNOT. 3240: a0 07 50 44 52 44 a4 01 a0 07 50 53 54 53 a4 01 ..PDRD....PSTS.. 3250: 70 68 43 45 56 54 70 0a 03 43 53 54 53 a0 2c 90 phCEVTp..CSTS.,. 3260: 93 43 48 50 44 00 93 69 00 a0 18 91 94 4f 53 59 .CHPD..i.....OSY 3270: 53 0b d0 07 95 4f 53 59 53 0b d6 07 86 50 43 49 S....OSYS....PCI 3280: 30 69 a1 07 86 47 46 58 30 69 86 47 46 58 30 0a 0i...GFX0i.GFX0. 3290: 80 a0 0c 92 50 53 54 53 70 00 43 45 56 54 a4 00 ....PSTSp.CEVT.. 32a0: 14 13 47 48 44 53 01 70 68 54 49 44 58 a4 47 4e ..GHDS.phTIDX.GN 32b0: 4f 54 01 00 14 14 47 4c 49 44 01 70 68 43 4c 49 OT....GLID.phCLI 32c0: 44 a4 47 4e 4f 54 0a 02 00 14 15 47 44 43 4b 01 D.GNOT.....GDCK. 32d0: 70 68 43 44 43 4b a4 47 4e 4f 54 0a 04 0a 80 14 phCDCK.GNOT..... 32e0: 19 50 41 52 44 00 a0 0c 92 41 52 44 59 5b 22 41 .PARD....ARDY["A 32f0: 53 4c 50 a4 92 41 52 44 59 14 46 0c 41 49 4e 54 SLP..ARDY.F.AINT 3300: 02 a0 0e 92 7b 54 43 48 45 79 01 68 00 00 a4 01 ....{TCHEy.h.... 3310: a0 07 50 41 52 44 a4 01 a0 4c 05 93 68 0a 02 a0 ..PARD...L..h... 3320: 33 43 50 46 4d a0 0e 93 43 50 46 4d 01 70 0a 06 3CPFM...CPFM.p.. 3330: 50 46 49 54 a0 0f 93 43 50 46 4d 0a 06 70 0a 08 PFIT...CPFM..p.. 3340: 50 46 49 54 a0 0e 93 43 50 46 4d 0a 08 70 01 50 PFIT...CPFM..p.P 3350: 46 49 54 a1 0c 7f 50 46 49 54 0a 07 50 46 49 54 FIT...PFIT..PFIT 3360: 7d 50 46 49 54 0c 00 00 00 80 50 46 49 54 70 0a }PFIT.....PFITp. 3370: 04 41 53 4c 43 a1 42 04 a0 28 93 68 01 70 78 77 .ASLC.B..(.h.pxw 3380: 69 0a ff 00 0a 64 00 00 42 43 4c 50 7d 42 43 4c i....d..BCLP}BCL 3390: 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 41 53 4c P.....BCLPp..ASL 33a0: 43 a1 16 a0 10 93 68 00 70 69 41 4c 53 49 70 01 C.....h.piALSIp. 33b0: 41 53 4c 43 a1 03 a4 01 70 00 4c 42 50 43 a4 00 ASLC....p.LBPC.. 33c0: 10 41 36 5c 00 5b 80 49 4f 5f 54 01 0b 00 08 0a .A6\.[.IO_T..... 33d0: 10 5b 81 0e 49 4f 5f 54 01 00 40 04 54 52 50 30 .[..IO_T..@.TRP0 33e0: 08 5b 80 50 4d 49 4f 01 0b 00 10 0a 80 5b 81 28 .[.PMIO......[.( 33f0: 50 4d 49 4f 01 00 40 15 00 08 00 02 41 43 50 57 PMIO..@.....ACPW 3400: 01 00 45 0b 00 01 47 50 45 43 01 00 4e 10 00 09 ..E...GPEC..N... 3410: 53 43 49 53 01 00 06 5b 80 47 50 49 4f 01 0b 80 SCIS...[.GPIO... 3420: 11 0a 3c 5b 81 40 0c 47 50 49 4f 01 47 55 30 30 ..<[.@.GPIO.GU00 3430: 08 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 .GU01.GU02.GU03. 3440: 47 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 GIO0.GIO1.GIO2.G 3450: 49 4f 33 08 00 20 47 4c 30 30 08 47 4c 30 31 08 IO3.. GL00.GL01. 3460: 47 4c 30 32 08 00 03 47 50 32 37 01 47 50 32 38 GL02...GP27.GP28 3470: 01 00 03 00 40 04 47 42 30 30 08 47 42 30 31 08 ....@.GB00.GB01. 3480: 47 42 30 32 08 47 42 30 33 08 00 40 08 47 49 56 GB02.GB03..@.GIV 3490: 30 08 00 03 4c 50 4f 4c 01 00 04 47 49 56 32 08 0...LPOL...GIV2. 34a0: 47 49 56 33 08 47 55 30 34 08 47 55 30 35 08 47 GIV3.GU04.GU05.G 34b0: 55 30 36 08 47 55 30 37 08 47 49 4f 34 08 47 49 U06.GU07.GIO4.GI 34c0: 4f 35 08 47 49 4f 36 08 47 49 4f 37 08 00 05 47 O5.GIO6.GIO7...G 34d0: 50 33 37 01 00 02 47 4c 30 35 08 47 4c 30 36 08 P37...GL05.GL06. 34e0: 47 4c 30 37 08 5b 80 52 43 52 42 00 0c 00 c0 d1 GL07.[.RCRB..... 34f0: fe 0b 00 40 5b 81 48 05 52 43 52 42 13 00 80 00 ...@[.H.RCRB.... 3500: 08 00 80 00 10 00 80 02 02 48 50 41 53 02 00 05 .........HPAS... 3510: 48 50 41 45 01 00 48 09 00 01 50 41 54 44 01 53 HPAE..H...PATD.S 3520: 41 54 44 01 53 4d 42 44 01 48 44 41 44 01 00 0b ATD.SMBD.HDAD... 3530: 52 50 31 44 01 52 50 32 44 01 52 50 33 44 01 52 RP1D.RP2D.RP3D.R 3540: 50 34 44 01 52 50 35 44 01 52 50 36 44 01 08 5f P4D.RP5D.RP6D.._ 3550: 53 30 5f 12 05 03 00 00 00 08 5f 53 33 5f 12 07 S0_......._S3_.. 3560: 03 0a 05 0a 05 00 08 5f 53 34 5f 12 07 03 0a 06 ......._S4_..... 3570: 0a 06 00 08 5f 53 35 5f 12 07 03 0a 07 0a 07 00 ...._S5_........ 3580: 14 45 04 47 45 54 50 09 a0 0e 93 7b 68 0a 09 00 .E.GETP....{h... 3590: 00 a4 0c ff ff ff ff a0 0d 93 7b 68 0a 09 00 0a ..........{h.... 35a0: 08 a4 0b 84 03 7a 7b 68 0b 00 03 00 0a 08 60 7a .....z{h......`z 35b0: 7b 68 0b 00 30 00 0a 0c 61 a4 77 0a 1e 74 0a 09 {h..0...a.w..t.. 35c0: 72 60 61 00 00 00 14 30 47 44 4d 41 0d a0 23 68 r`a....0GDMA..#h 35d0: a0 07 90 69 6c a4 0a 14 a0 0e 90 6a 6c a4 77 74 ...il......jl.wt 35e0: 0a 04 6b 00 0a 0f 00 a4 77 74 0a 04 6b 00 0a 1e ..k.....wt..k... 35f0: 00 a4 0c ff ff ff ff 14 1f 47 45 54 54 09 a4 77 .........GETT..w 3600: 0a 1e 74 0a 09 72 7b 7a 68 0a 02 00 0a 03 00 7b ..t..r{zh......{ 3610: 68 0a 03 00 00 00 00 14 44 06 47 45 54 46 0b 08 h.......D.GETF.. 3620: 54 4d 50 46 00 a0 0c 68 7d 54 4d 50 46 01 54 4d TMPF...h}TMPF.TM 3630: 50 46 a0 11 7b 6a 0a 02 00 7d 54 4d 50 46 0a 02 PF..{j...}TMPF.. 3640: 54 4d 50 46 a0 0d 69 7d 54 4d 50 46 0a 04 54 4d TMPF..i}TMPF..TM 3650: 50 46 a0 11 7b 6a 0a 20 00 7d 54 4d 50 46 0a 08 PF..{j. .}TMPF.. 3660: 54 4d 50 46 a0 12 7b 6a 0b 00 40 00 7d 54 4d 50 TMPF..{j..@.}TMP 3670: 46 0a 10 54 4d 50 46 a4 54 4d 50 46 14 3d 53 45 F..TMPF.TMPF.=SE 3680: 54 50 0b a0 08 94 68 0a f0 a4 0a 08 a1 2d a0 27 TP....h......-.' 3690: 7b 69 0a 02 00 a0 10 90 92 94 68 0a 78 7b 6a 0a {i........h.x{j. 36a0: 02 00 a4 0b 01 23 a0 0f 90 92 94 68 0a b4 7b 6a .....#.....h..{j 36b0: 01 00 a4 0b 01 21 a4 0b 01 10 14 37 53 44 4d 41 .....!.....7SDMA 36c0: 09 a0 08 92 94 68 0a 14 a4 01 a0 09 92 94 68 0a .....h........h. 36d0: 1e a4 0a 02 a0 08 92 94 68 0a 2d a4 01 a0 09 92 ........h.-..... 36e0: 94 68 0a 3c a4 0a 02 a0 08 92 94 68 0a 5a a4 01 .h.<.......h.Z.. 36f0: a4 00 14 2f 53 45 54 54 0b a0 25 7b 69 0a 02 00 .../SETT..%{i... 3700: a0 0f 90 92 94 68 0a 78 7b 6a 0a 02 00 a4 0a 0b .....h.x{j...... 3710: a0 0e 90 92 94 68 0a b4 7b 6a 01 00 a4 0a 09 a4 .....h..{j...... 3720: 0a 04 5b 82 4b 04 48 44 45 46 08 5f 41 44 52 0c ..[.K.HDEF._ADR. 3730: 00 00 1b 00 5b 80 48 44 41 52 02 0a 4c 0a 10 5b ....[.HDAR..L..[ 3740: 81 22 48 44 41 52 02 44 43 4b 41 01 00 07 44 43 ."HDAR.DCKA...DC 3750: 4b 4d 01 00 06 44 43 4b 53 01 00 30 00 0f 50 4d KM...DCKS..0..PM 3760: 45 53 01 08 5f 50 52 57 12 06 02 0a 0d 0a 03 5b ES.._PRW.......[ 3770: 82 41 10 52 50 30 31 08 5f 41 44 52 0c 00 00 1c .A.RP01._ADR.... 3780: 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 45 04 .[.PXCS..@..[.E. 3790: 50 58 43 53 40 00 40 09 00 0d 4c 41 53 58 01 00 PXCS@.@...LASX.. 37a0: 32 41 42 50 58 01 00 02 50 44 43 58 01 00 02 50 2ABPX...PDCX...P 37b0: 44 53 58 01 00 01 4c 53 43 58 01 00 27 00 10 50 DSX...LSCX..'..P 37c0: 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 01 50 4d SPX..O<..HPSX.PM 37d0: 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 44 52 00 SX.[..PXSX._ADR. 37e0: 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 .A._PRT..3GPIC.. 37f0: 2c 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ,............... 3800: ff ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a ................ 3810: 12 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 .............E.. 3820: 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 .A.........^^.LP 3830: 43 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e CBLNKA........^^ 3840: 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff .LPCBLNKB....... 3850: 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 ..^^.LPCBLNKC... 3860: 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b ......^^.LPCBLNK 3870: 44 00 5b 82 41 10 52 50 30 32 08 5f 41 44 52 0c D.[.A.RP02._ADR. 3880: 01 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b ....[.PXCS..@..[ 3890: 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c 41 53 .E.PXCS@.@...LAS 38a0: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 38b0: 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 ..PDSX...LSCX..' 38c0: 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 ..PSPX..O<..HPSX 38d0: 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 .PMSX.[..PXSX._A 38e0: 44 52 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 DR..A._PRT..3GPI 38f0: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 11 12 C..,............ 3900: 09 04 0b ff ff 01 00 0a 12 12 0a 04 0b ff ff 0a ................ 3910: 02 00 0a 13 12 0a 04 0b ff ff 0a 03 00 0a 10 a1 ................ 3920: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3930: 2e 4c 50 43 42 4c 4e 4b 42 00 12 12 04 0b ff ff .LPCBLNKB....... 3940: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 3950: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 3960: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3970: 4c 4e 4b 41 00 5b 82 4d 11 52 50 30 33 08 5f 41 LNKA.[.M.RP03._A 3980: 44 52 0c 02 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3990: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 39a0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 39b0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 39c0: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 39d0: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 39e0: 08 5f 41 44 52 00 08 2e 50 58 53 58 5f 52 4d 56 ._ADR...PXSX_RMV 39f0: 01 08 2e 50 58 53 58 5f 50 52 57 12 06 02 0a 09 ...PXSX_PRW..... 3a00: 0a 03 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 ...A._PRT..3GPIC 3a10: a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 12 12 09 ..,............. 3a20: 04 0b ff ff 01 00 0a 13 12 0a 04 0b ff ff 0a 02 ................ 3a30: 00 0a 10 12 0a 04 0b ff ff 0a 03 00 0a 11 a1 45 ...............E 3a40: 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e ...A.........^^. 3a50: 4c 50 43 42 4c 4e 4b 43 00 12 12 04 0b ff ff 01 LPCBLNKC........ 3a60: 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0b ^^.LPCBLNKD..... 3a70: ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 ....^^.LPCBLNKA. 3a80: 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3a90: 4e 4b 42 00 5b 82 4f 11 52 50 30 34 08 5f 41 44 NKB.[.O.RP04._AD 3aa0: 52 0c 03 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a R.....[.PXCS..@. 3ab0: c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c .[.E.PXCS@.@...L 3ac0: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 3ad0: 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 X...PDSX...LSCX. 3ae0: 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 .'..PSPX..O<..HP 3af0: 53 58 01 50 4d 53 58 01 5b 82 29 50 58 53 58 08 SX.PMSX.[.)PXSX. 3b00: 5f 41 44 52 00 14 1d 5f 50 52 57 00 a0 0d 57 4b _ADR..._PRW...WK 3b10: 4c 4e a4 12 06 02 0a 09 0a 03 a1 08 a4 12 05 02 LN.............. 3b20: 0a 09 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 ....A._PRT..3GPI 3b30: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 C..,............ 3b40: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 3b50: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 a1 ................ 3b60: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3b70: 2e 4c 50 43 42 4c 4e 4b 44 00 12 12 04 0b ff ff .LPCBLNKD....... 3b80: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 .^^.LPCBLNKA.... 3b90: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 .....^^.LPCBLNKB 3ba0: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3bb0: 4c 4e 4b 43 00 5b 82 41 10 52 50 30 35 08 5f 41 LNKC.[.A.RP05._A 3bc0: 44 52 0c 04 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3bd0: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 3be0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 3bf0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 3c00: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 3c10: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 3c20: 08 5f 41 44 52 00 14 41 09 5f 50 52 54 00 a0 33 ._ADR..A._PRT..3 3c30: 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 GPIC..,......... 3c40: 0a 10 12 09 04 0b ff ff 01 00 0a 11 12 0a 04 0b ................ 3c50: ff ff 0a 02 00 0a 12 12 0a 04 0b ff ff 0a 03 00 ................ 3c60: 0a 13 a1 45 05 a4 12 41 05 04 12 12 04 0b ff ff ...E...A........ 3c70: 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 12 04 .^^.LPCBLNKA.... 3c80: 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3c90: 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3ca0: 4e 4b 43 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c NKC.........^^.L 3cb0: 50 43 42 4c 4e 4b 44 00 5b 82 41 10 52 50 30 36 PCBLNKD.[.A.RP06 3cc0: 08 5f 41 44 52 0c 05 00 1c 00 5b 80 50 58 43 53 ._ADR.....[.PXCS 3cd0: 02 0a 40 0a c0 5b 81 45 04 50 58 43 53 40 00 40 ..@..[.E.PXCS@.@ 3ce0: 09 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 ...LASX..2ABPX.. 3cf0: 02 50 44 43 58 01 00 02 50 44 53 58 01 00 01 4c .PDCX...PDSX...L 3d00: 53 43 58 01 00 27 00 10 50 53 50 58 01 00 4f 3c SCX..'..PSPX..O< 3d10: 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 ..HPSX.PMSX.[..P 3d20: 58 53 58 08 5f 41 44 52 00 14 41 09 5f 50 52 54 XSX._ADR..A._PRT 3d30: 00 a0 33 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ..3GPIC..,...... 3d40: ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a 12 12 ................ 3d50: 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ff ff ................ 3d60: 0a 03 00 0a 10 a1 45 05 a4 12 41 05 04 12 12 04 ......E...A..... 3d70: 0b ff ff 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3d80: 12 12 04 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 3d90: 4b 43 00 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 KC.........^^.LP 3da0: 43 42 4c 4e 4b 44 00 12 13 04 0b ff ff 0a 03 5e CBLNKD.........^ 3db0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 4d 06 55 ^.LPCBLNKA.[.M.U 3dc0: 53 42 31 08 5f 41 44 52 0c 00 00 1d 00 5b 80 55 SB1._ADR.....[.U 3dd0: 31 43 53 02 0a c4 0a 04 5b 81 0b 55 31 43 53 03 1CS.....[..U1CS. 3de0: 55 31 45 4e 02 08 5f 50 52 57 12 06 02 0a 03 0a U1EN.._PRW...... 3df0: 03 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 ..$_PSW...hp.ACP 3e00: 57 a0 0c 41 43 50 57 70 0a 03 55 31 45 4e a1 07 W..ACPWp..U1EN.. 3e10: 70 00 55 31 45 4e 14 09 5f 53 33 44 00 a4 0a 02 p.U1EN.._S3D.... 3e20: 14 09 5f 53 34 44 00 a4 0a 02 5b 82 4c 06 55 53 .._S4D....[.L.US 3e30: 42 32 08 5f 41 44 52 0c 01 00 1d 00 5b 80 55 32 B2._ADR.....[.U2 3e40: 43 53 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 CS.....[..U2CS.U 3e50: 32 45 4e 02 08 5f 50 52 57 12 06 02 0a 04 0a 03 2EN.._PRW....... 3e60: 14 23 5f 50 53 57 01 a0 14 68 70 01 41 43 50 57 .#_PSW...hp.ACPW 3e70: a0 0b 41 43 50 57 70 01 55 32 45 4e a1 07 70 00 ..ACPWp.U2EN..p. 3e80: 55 32 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 U2EN.._S3D...... 3e90: 5f 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 33 _S4D....[.M.USB3 3ea0: 08 5f 41 44 52 0c 02 00 1d 00 5b 80 55 32 43 53 ._ADR.....[.U2CS 3eb0: 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 33 45 .....[..U2CS.U3E 3ec0: 4e 02 08 5f 50 52 57 12 06 02 0a 0c 0a 03 14 24 N.._PRW........$ 3ed0: 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c _PSW...hp.ACPW.. 3ee0: 41 43 50 57 70 0a 03 55 33 45 4e a1 07 70 00 55 ACPWp..U3EN..p.U 3ef0: 33 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 3EN.._S3D......_ 3f00: 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 34 08 S4D....[.M.USB4. 3f10: 5f 41 44 52 0c 00 00 1a 00 5b 80 55 34 43 53 02 _ADR.....[.U4CS. 3f20: 0a c4 0a 04 5b 81 0b 55 34 43 53 03 55 34 45 4e ....[..U4CS.U4EN 3f30: 02 08 5f 50 52 57 12 06 02 0a 0e 0a 03 14 24 5f .._PRW........$_ 3f40: 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c 41 PSW...hp.ACPW..A 3f50: 43 50 57 70 0a 03 55 34 45 4e a1 07 70 00 55 34 CPWp..U4EN..p.U4 3f60: 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 EN.._S3D......_S 3f70: 34 44 00 a4 0a 02 5b 82 41 06 55 53 42 35 08 5f 4D....[.A.USB5._ 3f80: 41 44 52 0c 01 00 1a 00 5b 80 55 35 43 53 02 0a ADR.....[.U5CS.. 3f90: c4 0a 04 5b 81 0b 55 35 43 53 03 55 35 45 4e 02 ...[..U5CS.U5EN. 3fa0: 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 .$_PSW...hp.ACPW 3fb0: a0 0c 41 43 50 57 70 0a 03 55 35 45 4e a1 07 70 ..ACPWp..U5EN..p 3fc0: 00 55 35 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 .U5EN.._S3D..... 3fd0: 09 5f 53 34 44 00 a4 0a 02 5b 82 4b 0a 45 48 43 ._S4D....[.K.EHC 3fe0: 31 08 5f 41 44 52 0c 07 00 1d 00 5b 80 55 37 43 1._ADR.....[.U7C 3ff0: 53 02 0a 54 0a 04 5b 81 0d 55 37 43 53 03 00 0f S..T..[..U7CS... 4000: 50 4d 45 53 01 5b 82 4f 05 48 55 42 37 08 5f 41 PMES.[.O.HUB7._A 4010: 44 52 00 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 DR.[..PRT1._ADR. 4020: 5b 82 0c 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 [..PRT2._ADR..[. 4030: 0c 50 52 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 .PRT3._ADR..[..P 4040: 52 54 34 08 5f 41 44 52 0a 04 5b 82 0c 50 52 54 RT4._ADR..[..PRT 4050: 35 08 5f 41 44 52 0a 05 5b 82 0c 50 52 54 36 08 5._ADR..[..PRT6. 4060: 5f 41 44 52 0a 06 08 5f 50 52 57 12 06 02 0a 0d _ADR..._PRW..... 4070: 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 ...._S3D......_S 4080: 34 44 00 a4 0a 02 5b 82 4f 08 45 48 43 32 08 5f 4D....[.O.EHC2._ 4090: 41 44 52 0c 07 00 1a 00 5b 80 55 46 43 53 02 0a ADR.....[.UFCS.. 40a0: 54 0a 04 5b 81 0d 55 46 43 53 03 00 0f 50 4d 45 T..[..UFCS...PME 40b0: 53 01 5b 82 43 04 48 55 42 37 08 5f 41 44 52 00 S.[.C.HUB7._ADR. 40c0: 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 5b 82 0c [..PRT1._ADR.[.. 40d0: 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 0c 50 52 PRT2._ADR..[..PR 40e0: 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 52 54 34 T3._ADR..[..PRT4 40f0: 08 5f 41 44 52 0a 04 08 5f 50 52 57 12 06 02 0a ._ADR..._PRW.... 4100: 0d 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f ....._S3D......_ 4110: 53 34 44 00 a4 0a 02 5b 82 4a 06 50 43 49 42 08 S4D....[.J.PCIB. 4120: 5f 41 44 52 0c 00 00 1e 00 14 49 05 5f 50 52 54 _ADR......I._PRT 4130: 00 a0 21 47 50 49 43 a4 12 1a 02 12 0b 04 0c ff ..!GPIC......... 4140: ff 06 00 00 00 0a 16 12 0b 04 0c ff ff 06 00 01 ................ 4150: 00 0a 17 a1 2f a4 12 2c 02 12 14 04 0c ff ff 06 ..../..,........ 4160: 00 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 47 00 12 14 ..^^.LPCBLNKG... 4170: 04 0c ff ff 06 00 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 4180: 4b 48 00 5b 82 8d 2e 01 4c 50 43 42 08 5f 41 44 KH.[....LPCB._AD 4190: 52 0c 00 00 1f 00 5b 80 4c 50 43 30 02 0a 40 0a R.....[.LPC0..@. 41a0: c0 5b 81 4d 07 4c 50 43 30 00 00 40 10 50 41 52 .[.M.LPC0..@.PAR 41b0: 43 08 50 42 52 43 08 50 43 52 43 08 50 44 52 43 C.PBRC.PCRC.PDRC 41c0: 08 00 20 50 45 52 43 08 50 46 52 43 08 50 47 52 .. PERC.PFRC.PGR 41d0: 43 08 50 48 52 43 08 00 40 0a 43 4d 41 52 03 00 C.PHRC..@.CMAR.. 41e0: 01 43 4d 42 52 03 00 01 4c 50 54 52 02 00 06 43 .CMBR...LPTR...C 41f0: 4d 41 44 01 43 4d 42 44 01 4c 50 54 44 01 46 44 MAD.CMBD.LPTD.FD 4200: 44 44 01 00 2c 49 4f 52 32 10 00 02 4c 47 52 4d DD..,IOR2...LGRM 4210: 06 00 48 32 52 41 45 4e 01 00 0d 52 43 42 41 12 ..H2RAEN...RCBA. 4220: 5b 80 53 4d 49 30 01 0c 00 fe 00 00 0c 02 00 00 [.SMI0.......... 4230: 00 5b 81 0b 53 4d 49 30 00 53 4d 49 43 08 5b 80 .[..SMI0.SMIC.[. 4240: 53 4d 49 31 00 0c bd 2e 6e bf 0c 90 00 00 00 5b SMI1....n......[ 4250: 81 16 53 4d 49 31 00 42 43 4d 44 08 44 49 44 5f ..SMI1.BCMD.DID_ 4260: 20 49 4e 46 4f 40 40 5b 81 15 53 4d 49 31 00 01 INFO@@[..SMI1.. 4270: 01 00 00 28 49 4e 46 5f 08 49 4e 46 31 20 5b 01 ...(INF_.INF1 [. 4280: 50 53 4d 58 00 14 27 50 48 53 53 01 5b 23 50 53 PSMX..'PHSS.[#PS 4290: 4d 58 ff ff 70 0a 80 42 43 4d 44 70 68 44 49 44 MX..p..BCMDphDID 42a0: 5f 70 00 53 4d 49 43 5b 27 50 53 4d 58 5b 82 41 _p.SMIC['PSMX[.A 42b0: 0a 4c 4e 4b 41 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKA._HID.A.... 42c0: 5f 55 49 44 01 14 0d 5f 44 49 53 08 70 0a 80 50 _UID..._DIS.p..P 42d0: 41 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ARC._PRS....#... 42e0: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 41 11 09 y..8_CRS..RTLA.. 42f0: 0a 06 23 00 00 18 79 00 8b 52 54 4c 41 01 49 52 ..#...y..RTLA.IR 4300: 51 30 70 00 49 52 51 30 79 01 7b 50 41 52 43 0a Q0p.IRQ0y.{PARC. 4310: 0f 00 49 52 51 30 a4 52 54 4c 41 14 1b 5f 53 52 ..IRQ0.RTLA.._SR 4320: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 4330: 60 70 60 50 41 52 43 14 18 5f 53 54 41 08 a0 0c `p`PARC.._STA... 4340: 7b 50 41 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PARC........... 4350: 5b 82 42 0a 4c 4e 4b 42 08 5f 48 49 44 0c 41 d0 [.B.LNKB._HID.A. 4360: 0c 0f 08 5f 55 49 44 0a 02 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4370: 70 0a 80 50 42 52 43 08 5f 50 52 53 11 09 0a 06 p..PBRC._PRS.... 4380: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4390: 4c 42 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LB....#...y..RTL 43a0: 42 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 B.IRQ0p.IRQ0y.{P 43b0: 42 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 42 14 BRC...IRQ0.RTLB. 43c0: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 43d0: 51 30 60 76 60 70 60 50 42 52 43 14 18 5f 53 54 Q0`v`p`PBRC.._ST 43e0: 41 08 a0 0c 7b 50 42 52 43 0a 80 00 a4 0a 09 a1 A...{PBRC....... 43f0: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 43 08 5f 48 49 ....[.B.LNKC._HI 4400: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 03 14 0d 5f D.A...._UID...._ 4410: 44 49 53 08 70 0a 80 50 43 52 43 08 5f 50 52 53 DIS.p..PCRC._PRS 4420: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 4430: 08 08 52 54 4c 43 11 09 0a 06 23 00 00 18 79 00 ..RTLC....#...y. 4440: 8b 52 54 4c 43 01 49 52 51 30 70 00 49 52 51 30 .RTLC.IRQ0p.IRQ0 4450: 79 01 7b 50 43 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PCRC...IRQ0.R 4460: 54 4c 43 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLC.._SRS..h.IRQ 4470: 30 82 49 52 51 30 60 76 60 70 60 50 43 52 43 14 0.IRQ0`v`p`PCRC. 4480: 18 5f 53 54 41 08 a0 0c 7b 50 43 52 43 0a 80 00 ._STA...{PCRC... 4490: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 44 ........[.B.LNKD 44a0: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 44b0: 04 14 0d 5f 44 49 53 08 70 0a 80 50 44 52 43 08 ..._DIS.p..PDRC. 44c0: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 44d0: 5f 43 52 53 08 08 52 54 4c 44 11 09 0a 06 23 00 _CRS..RTLD....#. 44e0: 00 18 79 00 8b 52 54 4c 44 01 49 52 51 30 70 00 ..y..RTLD.IRQ0p. 44f0: 49 52 51 30 79 01 7b 50 44 52 43 0a 0f 00 49 52 IRQ0y.{PDRC...IR 4500: 51 30 a4 52 54 4c 44 14 1b 5f 53 52 53 09 8b 68 Q0.RTLD.._SRS..h 4510: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 4520: 44 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 44 52 DRC.._STA...{PDR 4530: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a C...........[.B. 4540: 4c 4e 4b 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f LNKE._HID.A...._ 4550: 55 49 44 0a 05 14 0d 5f 44 49 53 08 70 0a 80 50 UID...._DIS.p..P 4560: 45 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ERC._PRS....#... 4570: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 45 11 09 y..8_CRS..RTLE.. 4580: 0a 06 23 00 00 18 79 00 8b 52 54 4c 45 01 49 52 ..#...y..RTLE.IR 4590: 51 30 70 00 49 52 51 30 79 01 7b 50 45 52 43 0a Q0p.IRQ0y.{PERC. 45a0: 0f 00 49 52 51 30 a4 52 54 4c 45 14 1b 5f 53 52 ..IRQ0.RTLE.._SR 45b0: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 45c0: 60 70 60 50 45 52 43 14 18 5f 53 54 41 08 a0 0c `p`PERC.._STA... 45d0: 7b 50 45 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PERC........... 45e0: 5b 82 42 0a 4c 4e 4b 46 08 5f 48 49 44 0c 41 d0 [.B.LNKF._HID.A. 45f0: 0c 0f 08 5f 55 49 44 0a 06 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4600: 70 0a 80 50 46 52 43 08 5f 50 52 53 11 09 0a 06 p..PFRC._PRS.... 4610: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4620: 4c 46 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LF....#...y..RTL 4630: 46 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 F.IRQ0p.IRQ0y.{P 4640: 46 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 46 14 FRC...IRQ0.RTLF. 4650: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 4660: 51 30 60 76 60 70 60 50 46 52 43 14 18 5f 53 54 Q0`v`p`PFRC.._ST 4670: 41 08 a0 0c 7b 50 46 52 43 0a 80 00 a4 0a 09 a1 A...{PFRC....... 4680: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 47 08 5f 48 49 ....[.B.LNKG._HI 4690: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 0d 5f D.A...._UID...._ 46a0: 44 49 53 08 70 0a 80 50 47 52 43 08 5f 50 52 53 DIS.p..PGRC._PRS 46b0: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 46c0: 08 08 52 54 4c 47 11 09 0a 06 23 00 00 18 79 00 ..RTLG....#...y. 46d0: 8b 52 54 4c 47 01 49 52 51 30 70 00 49 52 51 30 .RTLG.IRQ0p.IRQ0 46e0: 79 01 7b 50 47 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PGRC...IRQ0.R 46f0: 54 4c 47 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLG.._SRS..h.IRQ 4700: 30 82 49 52 51 30 60 76 60 70 60 50 47 52 43 14 0.IRQ0`v`p`PGRC. 4710: 18 5f 53 54 41 08 a0 0c 7b 50 47 52 43 0a 80 00 ._STA...{PGRC... 4720: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 48 ........[.B.LNKH 4730: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 4740: 08 14 0d 5f 44 49 53 08 70 0a 80 50 48 52 43 08 ..._DIS.p..PHRC. 4750: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 4760: 5f 43 52 53 08 08 52 54 4c 48 11 09 0a 06 23 00 _CRS..RTLH....#. 4770: 00 18 79 00 8b 52 54 4c 48 01 49 52 51 30 70 00 ..y..RTLH.IRQ0p. 4780: 49 52 51 30 79 01 7b 50 48 52 43 0a 0f 00 49 52 IRQ0y.{PHRC...IR 4790: 51 30 a4 52 54 4c 48 14 1b 5f 53 52 53 09 8b 68 Q0.RTLH.._SRS..h 47a0: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 47b0: 48 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 48 52 HRC.._STA...{PHR 47c0: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 3d 44 C...........[.=D 47d0: 4d 41 43 08 5f 48 49 44 0c 41 d0 02 00 08 5f 43 MAC._HID.A...._C 47e0: 52 53 11 28 0a 25 47 01 00 00 00 00 01 20 47 01 RS.(.%G...... G. 47f0: 81 00 81 00 01 11 47 01 93 00 93 00 01 0d 47 01 ......G.......G. 4800: c0 00 c0 00 01 20 2a 10 01 79 00 5b 82 26 46 57 ..... *..y.[.&FW 4810: 48 44 08 5f 48 49 44 0c 25 d4 08 00 08 5f 43 52 HD._HID.%...._CR 4820: 53 11 11 0a 0e 86 09 00 00 00 00 00 ff 00 00 00 S............... 4830: 01 79 00 5b 82 40 0b 48 50 45 54 08 5f 48 49 44 .y.[.@.HPET._HID 4840: 0c 41 d0 01 03 08 5f 43 49 44 0c 41 d0 0c 01 08 .A...._CID.A.... 4850: 42 55 46 30 11 11 0a 0e 86 09 00 00 00 00 d0 fe BUF0............ 4860: 00 04 00 00 79 00 14 27 5f 53 54 41 00 a0 13 92 ....y..'_STA.... 4870: 95 4f 53 59 53 0b d1 07 a0 08 48 50 41 45 a4 0a .OSYS.....HPAE.. 4880: 0f a1 0a a0 08 48 50 41 45 a4 0a 0b a4 00 14 46 .....HPAE......F 4890: 05 5f 43 52 53 08 a0 49 04 48 50 41 45 8a 42 55 ._CRS..I.HPAE.BU 48a0: 46 30 0a 04 48 50 54 30 a0 11 93 48 50 41 53 01 F0..HPT0...HPAS. 48b0: 70 0c 00 10 d0 fe 48 50 54 30 a0 12 93 48 50 41 p.....HPT0...HPA 48c0: 53 0a 02 70 0c 00 20 d0 fe 48 50 54 30 a0 12 93 S..p.. ..HPT0... 48d0: 48 50 41 53 0a 03 70 0c 00 30 d0 fe 48 50 54 30 HPAS..p..0..HPT0 48e0: a4 42 55 46 30 5b 82 45 0a 49 50 49 43 08 5f 48 .BUF0[.E.IPIC._H 48f0: 49 44 0b 41 d0 08 5f 43 52 53 11 41 09 0a 8d 47 ID.A.._CRS.A...G 4900: 01 20 00 20 00 01 02 47 01 24 00 24 00 01 02 47 . . ...G.$.$...G 4910: 01 28 00 28 00 01 02 47 01 2c 00 2c 00 01 02 47 .(.(...G.,.,...G 4920: 01 30 00 30 00 01 02 47 01 34 00 34 00 01 02 47 .0.0...G.4.4...G 4930: 01 38 00 38 00 01 02 47 01 3c 00 3c 00 01 02 47 .8.8...G.<.<...G 4940: 01 a0 00 a0 00 01 02 47 01 a4 00 a4 00 01 02 47 .......G.......G 4950: 01 a8 00 a8 00 01 02 47 01 ac 00 ac 00 01 02 47 .......G.......G 4960: 01 b0 00 b0 00 01 02 47 01 b4 00 b4 00 01 02 47 .......G.......G 4970: 01 b8 00 b8 00 01 02 47 01 bc 00 bc 00 01 02 47 .......G.......G 4980: 01 d0 04 d0 04 01 02 22 04 00 79 00 5b 82 25 4d ......."..y.[.%M 4990: 41 54 48 08 5f 48 49 44 0c 41 d0 0c 04 08 5f 43 ATH._HID.A...._C 49a0: 52 53 11 10 0a 0d 47 01 f0 00 f0 00 01 01 22 00 RS....G.......". 49b0: 20 79 00 5b 82 4b 09 4c 44 52 43 08 5f 48 49 44 y.[.K.LDRC._HID 49c0: 0c 41 d0 0c 02 08 5f 55 49 44 0a 02 08 5f 43 52 .A...._UID..._CR 49d0: 53 11 4e 07 0a 7a 47 01 2e 00 2e 00 01 02 47 01 S.N..zG.......G. 49e0: 4e 00 4e 00 01 02 47 01 61 00 61 00 01 01 47 01 N.N...G.a.a...G. 49f0: 63 00 63 00 01 01 47 01 65 00 65 00 01 01 47 01 c.c...G.e.e...G. 4a00: 67 00 67 00 01 01 47 01 80 00 80 00 01 01 47 01 g.g...G.......G. 4a10: 92 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 ......G.......G. 4a20: 80 06 80 06 01 20 47 01 00 08 00 08 01 10 47 01 ..... G.......G. 4a30: 00 10 00 10 01 80 47 01 80 11 80 11 01 40 47 01 ......G......@G. 4a40: 00 fe 00 fe 01 01 47 01 00 ff 00 ff 01 80 79 00 ......G.......y. 4a50: 5b 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b [.%RTC_._HID.A.. 4a60: 00 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 .._CRS....G.p.p. 4a70: 01 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f .."..y.[.-TIMR._ 4a80: 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a HID.A...._CRS... 4a90: 15 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 .G.@.@...G.P.P.. 4aa0: 04 22 01 00 79 00 5b 82 32 41 43 41 44 08 5f 48 ."..y.[.2ACAD._H 4ab0: 49 44 0d 41 43 50 49 30 30 30 33 00 08 5f 50 43 ID.ACPI0003.._PC 4ac0: 4c 12 06 01 5f 53 42 5f 14 11 5f 50 53 52 00 70 L..._SB_.._PSR.p 4ad0: 01 41 43 50 57 a4 41 43 50 57 14 1a 45 43 4f 4b .ACPW.ACPW..ECOK 4ae0: 00 a0 0f 93 5e 2e 45 43 30 5f 5a 30 30 39 01 a4 ....^.EC0_Z009.. 4af0: 01 a1 03 a4 00 5b 82 4e 6f 45 43 30 5f 08 5f 48 .....[.NoEC0_._H 4b00: 49 44 0c 41 d0 0c 09 08 5f 47 50 45 0a 1c 08 5a ID.A...._GPE...Z 4b10: 30 30 39 00 08 5f 43 52 53 11 15 0a 12 47 01 62 009.._CRS....G.b 4b20: 00 62 00 01 01 47 01 66 00 66 00 01 01 79 00 14 .b...G.f.f...y.. 4b30: 3b 5f 52 45 47 02 a0 34 93 68 0a 03 70 69 5a 30 ;_REG..4.h..piZ0 4b40: 30 39 a0 28 5b 12 5f 4f 53 49 60 70 00 42 54 44 09.([._OSI`p.BTD 4b50: 53 a0 19 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 S.._OSI.Windows 4b60: 32 30 30 36 00 70 01 42 54 44 53 5b 80 45 52 41 2006.p.BTDS[.ERA 4b70: 4d 03 00 0a ff 5b 81 4e 2e 45 52 41 4d 11 00 40 M....[.N.ERAM..@ 4b80: 30 53 4d 50 52 08 53 4d 53 54 08 53 4d 41 44 08 0SMPR.SMST.SMAD. 4b90: 53 4d 43 4d 08 53 4d 44 30 40 10 42 43 4e 54 08 SMCM.SMD0@.BCNT. 4ba0: 53 4d 41 41 18 00 40 04 43 48 47 4d 10 43 48 47 SMAA..@.CHGM.CHG 4bb0: 53 10 45 4e 49 44 08 45 4e 49 42 08 45 4e 44 44 S.ENID.ENIB.ENDD 4bc0: 08 43 48 47 56 08 43 48 47 41 10 42 41 4c 30 01 .CHGV.CHGA.BAL0. 4bd0: 42 41 4c 31 01 42 41 4c 32 01 42 41 4c 33 01 42 BAL1.BAL2.BAL3.B 4be0: 42 43 30 01 42 42 43 31 01 42 42 43 32 01 42 42 BC0.BBC1.BBC2.BB 4bf0: 43 33 01 00 08 50 48 44 44 01 49 46 44 44 01 49 C3...PHDD.IFDD.I 4c00: 4f 44 44 01 53 48 44 44 01 53 31 32 30 01 45 46 ODD.SHDD.S120.EF 4c10: 44 44 01 43 52 54 44 01 53 50 57 52 01 53 42 54 DD.CRTD.SPWR.SBT 4c20: 4e 01 56 49 44 4f 01 56 4f 4c 44 01 56 4f 4c 55 N.VIDO.VOLD.VOLU 4c30: 01 4d 55 54 45 01 43 4f 4e 54 01 42 52 47 54 01 .MUTE.CONT.BRGT. 4c40: 48 42 54 4e 01 53 34 53 54 01 53 4b 45 59 01 42 HBTN.S4ST.SKEY.B 4c50: 4b 45 59 01 54 4f 55 50 01 46 4e 42 4e 01 4c 49 KEY.TOUP.FNBN.LI 4c60: 44 46 01 44 49 47 4d 01 55 57 41 4b 01 00 08 44 DF.DIGM.UWAK...D 4c70: 4b 53 50 01 44 4b 49 4e 01 44 4b 49 44 01 44 4b KSP.DKIN.DKID.DK 4c80: 4f 4b 01 00 04 44 4b 50 57 01 00 07 42 54 4e 53 OK...DKPW...BTNS 4c90: 08 53 31 4c 44 01 53 33 4c 44 01 56 47 41 51 01 .S1LD.S3LD.VGAQ. 4ca0: 50 43 4d 51 01 50 43 4d 52 01 41 44 50 54 01 53 PCMQ.PCMR.ADPT.S 4cb0: 4c 4c 53 01 53 59 53 37 01 50 57 41 4b 01 4d 57 LLS.SYS7.PWAK.MW 4cc0: 41 4b 01 4c 57 41 4b 01 00 05 00 28 54 43 4e 4c AK.LWAK....(TCNL 4cd0: 08 54 4d 50 49 08 54 4d 53 44 08 46 41 53 4e 04 .TMPI.TMSD.FASN. 4ce0: 46 41 53 55 04 50 43 56 4c 04 00 02 53 57 54 4f FASU.PCVL...SWTO 4cf0: 01 48 57 54 4f 01 4d 4f 44 45 01 46 41 4e 53 02 .HWTO.MODE.FANS. 4d00: 49 4e 49 54 01 46 41 4e 31 01 46 41 4e 32 01 46 INIT.FAN1.FAN2.F 4d10: 41 4e 54 01 53 4b 4e 4d 01 43 54 4d 50 08 4c 49 ANT.SKNM.CTMP.LI 4d20: 44 45 01 50 4d 45 45 01 50 57 42 45 01 52 4e 47 DE.PMEE.PWBE.RNG 4d30: 45 01 42 54 57 45 01 44 43 4b 45 01 00 02 53 4b E.BTWE.DCKE...SK 4d40: 54 58 08 53 4b 54 42 08 53 4b 54 43 08 53 4b 54 TX.SKTB.SKTC.SKT 4d50: 41 08 00 08 48 41 50 4c 02 48 41 50 52 01 00 05 A...HAPL.HAPR... 4d60: 42 54 44 54 01 42 54 50 57 01 42 54 44 53 01 42 BTDT.BTPW.BTDS.B 4d70: 54 50 53 01 42 54 53 57 01 42 54 57 4b 01 42 54 TPS.BTSW.BTWK.BT 4d80: 4c 44 01 00 01 42 52 54 53 08 43 4e 54 53 08 57 LD...BRTS.CNTS.W 4d90: 4c 41 54 01 42 54 41 54 01 57 4c 45 58 01 42 54 LAT.BTAT.WLEX.BT 4da0: 45 58 01 4b 4c 53 57 01 57 4c 4f 4b 01 00 02 50 EX.KLSW.WLOK...P 4db0: 54 49 44 08 43 50 55 54 08 45 50 4b 54 08 47 48 TID.CPUT.EPKT.GH 4dc0: 49 44 08 00 04 42 4d 46 30 03 42 54 59 30 01 42 ID...BMF0.BTY0.B 4dd0: 53 54 30 08 42 52 43 30 10 42 53 4e 30 10 42 50 ST0.BRC0.BSN0.BP 4de0: 56 30 10 42 44 56 30 10 42 44 43 30 10 42 46 43 V0.BDV0.BDC0.BFC 4df0: 30 10 47 41 55 30 08 43 59 43 30 08 42 50 43 30 0.GAU0.CYC0.BPC0 4e00: 10 42 41 43 30 10 42 41 54 30 08 42 54 57 30 10 .BAC0.BAT0.BTW0. 4e10: 42 44 4e 30 08 00 40 04 00 04 42 4d 46 31 03 42 BDN0..@...BMF1.B 4e20: 54 59 31 01 42 53 54 31 08 42 52 43 31 10 42 53 TY1.BST1.BRC1.BS 4e30: 4e 31 10 42 50 56 31 10 42 44 56 31 10 42 44 43 N1.BPV1.BDV1.BDC 4e40: 31 10 42 46 43 31 10 47 41 55 31 08 43 59 43 31 1.BFC1.GAU1.CYC1 4e50: 08 42 50 43 31 10 42 41 43 31 10 42 41 54 31 08 .BPC1.BAC1.BAT1. 4e60: 42 54 57 31 10 14 37 5f 51 31 31 00 70 0a 87 50 BTW1..7_Q11.p..P 4e70: 38 30 48 a0 13 49 47 44 53 5e 5e 5e 2e 47 46 58 80H..IGDS^^^.GFX 4e80: 30 42 52 54 4e 0a 87 a1 15 86 5e 5e 5e 2f 03 50 0BRTN.....^^^/.P 4e90: 45 47 50 56 47 41 5f 4c 43 44 5f 0a 87 14 37 5f EGPVGA_LCD_...7_ 4ea0: 51 31 32 00 70 0a 86 50 38 30 48 a0 13 49 47 44 Q12.p..P80H..IGD 4eb0: 53 5e 5e 5e 2e 47 46 58 30 42 52 54 4e 0a 86 a1 S^^^.GFX0BRTN... 4ec0: 15 86 5e 5e 5e 2f 03 50 45 47 50 56 47 41 5f 4c ..^^^/.PEGPVGA_L 4ed0: 43 44 5f 0a 86 14 40 05 5f 51 31 43 00 70 0d 3d CD_...@._Q1C.p.= 4ee0: 3d 3d 3d 3d 51 55 45 52 59 5f 31 43 3d 3d 3d 3d ====QUERY_1C==== 4ef0: 3d 00 5b 31 a0 31 56 49 44 4f a0 12 49 47 44 53 =.[1.1VIDO..IGDS 4f00: 5e 5e 5e 2e 47 46 58 30 47 48 44 53 00 a1 12 5e ^^^.GFX0GHDS...^ 4f10: 5e 5e 2f 03 50 45 47 50 56 47 41 5f 44 53 53 57 ^^/.PEGPVGA_DSSW 4f20: 70 00 56 49 44 4f 14 21 5f 51 31 44 00 70 0d 3d p.VIDO.!_Q1D.p.= 4f30: 3d 3d 3d 3d 51 55 45 52 59 5f 31 44 3d 3d 3d 3d ====QUERY_1D==== 4f40: 3d 00 5b 31 50 43 4c 4b 14 21 5f 51 31 45 00 70 =.[1PCLK.!_Q1E.p 4f50: 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 31 45 3d 3d .=====QUERY_1E== 4f60: 3d 3d 3d 00 5b 31 50 43 4c 4b 14 39 5f 51 32 35 ===.[1PCLK.9_Q25 4f70: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 35 .p.=====QUERY_25 4f80: 3d 3d 3d 3d 3d 00 5b 31 5b 22 0b e8 03 86 5e 5e =====.[1["....^^ 4f90: 42 41 54 31 0a 81 5b 22 0b e8 03 86 5e 5e 42 41 BAT1..["....^^BA 4fa0: 54 31 0a 80 14 2f 5f 51 33 34 00 70 0d 3d 3d 3d T1.../_Q34.p.=== 4fb0: 3d 3d 51 55 45 52 59 5f 33 34 3d 3d 3d 3d 3d 00 ==QUERY_34=====. 4fc0: 5b 31 a0 11 42 4b 45 59 50 48 53 53 0a 71 70 00 [1..BKEYPHSS.qp. 4fd0: 42 4b 45 59 14 32 5f 51 33 37 00 70 0d 3d 3d 3d BKEY.2_Q37.p.=== 4fe0: 3d 3d 51 55 45 52 59 5f 33 37 3d 3d 3d 3d 3d 00 ==QUERY_37=====. 4ff0: 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 03 86 5e [1.ACAD..["....^ 5000: 5e 42 41 54 31 0a 80 14 32 5f 51 33 38 00 70 0d ^BAT1...2_Q38.p. 5010: 3d 3d 3d 3d 3d 51 55 45 52 59 5f 33 38 3d 3d 3d =====QUERY_38=== 5020: 3d 3d 00 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 ==.[1.ACAD..[".. 5030: 03 86 5e 5e 42 41 54 31 0a 80 14 29 5f 51 32 44 ..^^BAT1...)_Q2D 5040: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 44 .p.=====QUERY_2D 5050: 3d 3d 3d 3d 3d 00 5b 31 70 00 44 54 53 4d 54 52 =====.[1p.DTSMTR 5060: 41 50 0a 46 14 29 5f 51 32 45 00 70 0d 3d 3d 3d AP.F.)_Q2E.p.=== 5070: 3d 3d 51 55 45 52 59 5f 32 45 3d 3d 3d 3d 3d 00 ==QUERY_2E=====. 5080: 5b 31 70 01 44 54 53 4d 54 52 41 50 0a 46 5b 80 [1p.DTSMTRAP.F[. 5090: 43 43 4c 4b 01 0b 10 10 0a 04 5b 81 20 43 43 4c CCLK......[. CCL 50a0: 4b 03 00 01 44 55 54 59 03 54 48 45 4e 01 00 03 K...DUTY.THEN... 50b0: 46 54 54 5f 01 00 08 54 53 54 53 01 5b 80 45 43 FTT_...TSTS.[.EC 50c0: 52 4d 03 00 0a ff 5b 81 44 04 45 43 52 4d 11 00 RM....[.D.ECRM.. 50d0: 40 4a 45 52 49 42 10 45 52 42 44 08 00 48 0a 53 @JERIB.ERBD..H.S 50e0: 44 54 4d 08 46 53 53 4e 04 46 41 4e 55 04 50 54 DTM.FSSN.FANU.PT 50f0: 56 4c 03 00 04 54 54 48 52 01 00 48 06 50 4a 49 VL...TTHR..H.PJI 5100: 44 08 00 08 00 48 1d 52 46 52 44 10 5b 01 46 41 D....H.RFRD.[.FA 5110: 4d 58 00 14 22 46 41 4e 47 01 5b 23 46 41 4d 58 MX.."FANG.[#FAMX 5120: ff ff 70 68 45 52 49 42 70 45 52 42 44 60 5b 27 ..phERIBpERBD`[' 5130: 46 41 4d 58 a4 60 14 22 46 41 4e 57 02 5b 23 46 FAMX.`."FANW.[#F 5140: 41 4d 58 ff ff 70 68 45 52 49 42 70 69 45 52 42 AMX..phERIBpiERB 5150: 44 5b 27 46 41 4d 58 a4 69 14 09 54 55 56 52 01 D['FAMX.i..TUVR. 5160: a4 0a 03 14 2e 54 48 52 4f 01 a0 09 93 68 00 a4 .....THRO....h.. 5170: 54 48 45 4e a1 1d a0 09 93 68 01 a4 44 55 54 59 THEN.....h..DUTY 5180: a1 11 a0 0a 93 68 0a 02 a4 54 54 48 52 a1 04 a4 .....h...TTHR... 5190: 0a ff 14 2a 43 4c 43 4b 01 a0 10 93 68 00 70 00 ...*CLCK....h.p. 51a0: 54 48 45 4e 70 00 46 54 54 5f a1 0d 70 68 44 55 THENp.FTT_..phDU 51b0: 54 59 70 01 54 48 45 4e a4 54 48 45 4e 14 37 50 TYp.THEN.THEN.7P 51c0: 43 4c 4b 00 70 50 54 56 4c 60 a0 10 93 60 00 70 CLK.pPTVL`...`.p 51d0: 00 54 48 45 4e 70 00 46 54 54 5f a1 19 76 60 70 .THENp.FTT_..v`p 51e0: 80 60 00 61 7b 61 0a 07 61 70 61 44 55 54 59 70 .`.a{a..apaDUTYp 51f0: 01 54 48 45 4e 5b 82 4b 22 42 41 54 31 08 5f 48 .THEN[.K"BAT1._H 5200: 49 44 0c 41 d0 0c 0a 08 5f 55 49 44 01 08 5f 50 ID.A...._UID.._P 5210: 43 4c 12 06 01 5f 53 42 5f 14 39 5f 53 54 41 00 CL..._SB_.9_STA. 5220: a0 29 90 45 43 4f 4b 93 45 43 44 59 00 a0 13 5e .).ECOK.ECDY...^ 5230: 5e 2e 45 43 30 5f 42 41 4c 30 5b 22 0a 14 a4 0a ^.EC0_BAL0[".... 5240: 1f a1 08 5b 22 0a 14 a4 0a 0f a1 08 5b 22 0a 14 ...[".......[".. 5250: a4 0a 1f 14 48 10 5f 42 49 46 00 08 53 54 41 54 ....H._BIF..STAT 5260: 12 3a 0d 01 0b a0 0f 0b a0 0f 01 0b 5c 2b 0b a4 .:..........\+.. 5270: 01 0a 9c 0b 08 01 0b c4 0e 0d 50 41 33 34 36 35 ..........PA3465 5280: 55 20 00 0d 33 36 35 38 51 00 0d 4c 69 2d 49 6f U ..3658Q..Li-Io 5290: 6e 00 0d 43 4f 4d 50 41 4c 20 00 a0 4b 07 90 45 n..COMPAL ..K..E 52a0: 43 4f 4b 93 45 43 44 59 00 70 5e 5e 2e 45 43 30 COK.ECDY.p^^.EC0 52b0: 5f 42 44 4e 30 60 a0 23 93 60 0a 08 70 0a b4 88 _BDN0`.#.`..p... 52c0: 53 54 41 54 0a 06 00 70 0d 50 41 33 34 35 37 55 STAT...p.PA3457U 52d0: 20 00 88 53 54 41 54 0a 09 00 a0 24 93 60 0a 20 ..STAT....$.`. 52e0: 70 0b 02 01 88 53 54 41 54 0a 06 00 70 0d 50 41 p....STAT...p.PA 52f0: 33 34 35 37 55 20 00 88 53 54 41 54 0a 09 00 5b 3457U ..STAT...[ 5300: 22 0a 14 70 5e 5e 2e 45 43 30 5f 42 44 43 30 42 "..p^^.EC0_BDC0B 5310: 46 43 31 5b 22 0a 14 a1 12 70 0d 4c 69 2d 49 6f FC1["....p.Li-Io 5320: 6e 00 88 53 54 41 54 0a 0b 00 a0 2c 42 46 43 31 n..STAT....,BFC1 5330: 78 42 46 43 31 0a 64 60 61 77 61 0a 64 61 70 61 xBFC1.d`awa.dapa 5340: 42 46 43 31 70 61 88 53 54 41 54 01 00 70 61 88 BFC1pa.STAT..pa. 5350: 53 54 41 54 0a 02 00 a4 53 54 41 54 14 45 0c 5f STAT....STAT.E._ 5360: 42 53 54 00 08 50 42 53 54 12 10 04 00 0c ff ff BST..PBST....... 5370: ff ff 0c ff ff ff ff 0b 5c 2b 70 0b 5c 2b 63 a0 ........\+p.\+c. 5380: 38 90 45 43 4f 4b 93 45 43 44 59 00 5b 22 0a 14 8.ECOK.ECDY.[".. 5390: 70 5e 5e 2e 45 43 30 5f 42 53 54 30 42 53 54 31 p^^.EC0_BST0BST1 53a0: 5b 22 0a 14 70 5e 5e 2e 45 43 30 5f 47 41 55 30 ["..p^^.EC0_GAU0 53b0: 42 47 55 31 5b 22 0a 14 a0 15 42 46 43 31 77 42 BGU1["....BFC1wB 53c0: 47 55 31 42 46 43 31 62 78 62 0a 64 64 62 a1 09 GU1BFC1bxb.ddb.. 53d0: 77 42 47 55 31 0a 28 62 70 42 53 54 31 88 50 42 wBGU1.(bpBST1.PB 53e0: 53 54 00 00 70 00 88 50 42 53 54 01 00 70 62 88 ST..p..PBST..pb. 53f0: 50 42 53 54 0a 02 00 70 63 88 50 42 53 54 0a 03 PBST...pc.PBST.. 5400: 00 a0 1b 94 45 43 44 59 00 76 45 43 44 59 a0 0e ....ECDY.vECDY.. 5410: 93 45 43 44 59 00 86 42 41 54 31 0a 80 a4 50 42 .ECDY..BAT1...PB 5420: 53 54 5b 82 2e 50 53 32 4b 08 5f 48 49 44 0c 41 ST[..PS2K._HID.A 5430: d0 03 03 08 5f 43 52 53 11 19 0a 16 47 01 60 00 ...._CRS....G.`. 5440: 60 00 01 01 47 01 64 00 64 00 01 01 23 02 00 01 `...G.d.d...#... 5450: 79 00 5b 82 1e 50 53 32 4d 08 5f 48 49 44 0c 41 y.[..PS2M._HID.A 5460: d0 0f 13 08 5f 43 52 53 11 09 0a 06 23 00 10 01 ...._CRS....#... 5470: 79 00 5b 82 43 6a 50 41 54 41 08 5f 41 44 52 0c y.[.CjPATA._ADR. 5480: 01 00 1f 00 5b 80 50 41 43 53 02 0a 40 0a c0 5b ....[.PACS..@..[ 5490: 81 49 04 50 41 43 53 03 50 52 49 54 10 00 10 50 .I.PACS.PRIT...P 54a0: 53 49 54 04 00 1c 53 59 4e 43 04 00 0c 53 44 54 SIT...SYNC...SDT 54b0: 30 02 00 02 53 44 54 31 02 00 4a 04 49 43 52 30 0...SDT1..J.ICR0 54c0: 04 49 43 52 31 04 49 43 52 32 04 49 43 52 33 04 .ICR1.ICR2.ICR3. 54d0: 49 43 52 34 04 49 43 52 35 04 5b 82 4b 63 50 52 ICR4.ICR5.[.KcPR 54e0: 49 44 08 5f 41 44 52 00 14 40 17 5f 47 54 4d 00 ID._ADR..@._GTM. 54f0: 08 50 42 55 46 11 17 0a 14 00 00 00 00 00 00 00 .PBUF........... 5500: 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 50 42 ..............PB 5510: 55 46 00 50 49 4f 30 8a 50 42 55 46 0a 04 44 4d UF.PIO0.PBUF..DM 5520: 41 30 8a 50 42 55 46 0a 08 50 49 4f 31 8a 50 42 A0.PBUF..PIO1.PB 5530: 55 46 0a 0c 44 4d 41 31 8a 50 42 55 46 0a 10 46 UF..DMA1.PBUF..F 5540: 4c 41 47 70 47 45 54 50 50 52 49 54 50 49 4f 30 LAGpGETPPRITPIO0 5550: 70 47 44 4d 41 7b 53 59 4e 43 01 00 7b 49 43 52 pGDMA{SYNC..{ICR 5560: 33 01 00 7b 49 43 52 30 01 00 53 44 54 30 7b 49 3..{ICR0..SDT0{I 5570: 43 52 31 01 00 44 4d 41 30 a0 14 93 44 4d 41 30 CR1..DMA0...DMA0 5580: 0c ff ff ff ff 70 50 49 4f 30 44 4d 41 30 a0 2e .....pPIO0DMA0.. 5590: 7b 50 52 49 54 0b 00 40 00 a0 14 93 7b 50 52 49 {PRIT..@....{PRI 55a0: 54 0a 90 00 0a 80 70 0b 84 03 50 49 4f 31 a1 0e T.....p...PIO1.. 55b0: 70 47 45 54 54 50 53 49 54 50 49 4f 31 a1 0b 70 pGETTPSITPIO1..p 55c0: 0c ff ff ff ff 50 49 4f 31 70 47 44 4d 41 7b 53 .....PIO1pGDMA{S 55d0: 59 4e 43 0a 02 00 7b 49 43 52 33 0a 02 00 7b 49 YNC...{ICR3...{I 55e0: 43 52 30 0a 02 00 53 44 54 31 7b 49 43 52 31 0a CR0...SDT1{ICR1. 55f0: 02 00 44 4d 41 31 a0 14 93 44 4d 41 31 0c ff ff ..DMA1...DMA1... 5600: ff ff 70 50 49 4f 31 44 4d 41 31 70 47 45 54 46 ..pPIO1DMA1pGETF 5610: 7b 53 59 4e 43 01 00 7b 53 59 4e 43 0a 02 00 50 {SYNC..{SYNC...P 5620: 52 49 54 46 4c 41 47 a0 2c 7b 93 50 49 4f 30 0c RITFLAG.,{.PIO0. 5630: ff ff ff ff 93 44 4d 41 30 0c ff ff ff ff 00 70 .....DMA0......p 5640: 0a 78 50 49 4f 30 70 0a 14 44 4d 41 30 70 0a 03 .xPIO0p..DMA0p.. 5650: 46 4c 41 47 a4 50 42 55 46 14 4c 2a 5f 53 54 4d FLAG.PBUF.L*_STM 5660: 03 8a 68 00 50 49 4f 30 8a 68 0a 04 44 4d 41 30 ..h.PIO0.h..DMA0 5670: 8a 68 0a 08 50 49 4f 31 8a 68 0a 0c 44 4d 41 31 .h..PIO1.h..DMA1 5680: 8a 68 0a 10 46 4c 41 47 a0 41 12 93 87 69 0b 00 .h..FLAG.A...i.. 5690: 02 7b 50 52 49 54 0b f0 c0 50 52 49 54 7b 53 59 .{PRIT...PRIT{SY 56a0: 4e 43 0a 02 53 59 4e 43 70 00 53 44 54 30 7b 49 NC..SYNCp.SDT0{I 56b0: 43 52 30 0a 02 49 43 52 30 7b 49 43 52 31 0a 02 CR0..ICR0{ICR1.. 56c0: 49 43 52 31 7b 49 43 52 33 0a 02 49 43 52 33 7b ICR1{ICR3..ICR3{ 56d0: 49 43 52 35 0a 02 49 43 52 35 8b 69 0a 62 57 34 ICR5..ICR5.i.bW4 56e0: 39 30 8b 69 0a 6a 57 35 33 30 8b 69 0a 7e 57 36 90.i.jW530.i.~W6 56f0: 33 30 8b 69 0a 80 57 36 34 30 8b 69 0a b0 57 38 30.i..W640.i..W8 5700: 38 30 8b 69 0a ba 57 39 33 30 7d 50 52 49 54 0b 80.i..W930}PRIT. 5710: 04 80 50 52 49 54 a0 1e 90 7b 46 4c 41 47 0a 02 ..PRIT...{FLAG.. 5720: 00 7b 57 34 39 30 0b 00 08 00 7d 50 52 49 54 0a .{W490....}PRIT. 5730: 02 50 52 49 54 7d 50 52 49 54 53 45 54 50 50 49 .PRIT}PRITSETPPI 5740: 4f 30 57 35 33 30 57 36 34 30 50 52 49 54 a0 4b O0W530W640PRIT.K 5750: 05 7b 46 4c 41 47 01 00 7d 53 59 4e 43 01 53 59 .{FLAG..}SYNC.SY 5760: 4e 43 70 53 44 4d 41 44 4d 41 30 53 44 54 30 a0 NCpSDMADMA0SDT0. 5770: 12 95 44 4d 41 30 0a 1e 7d 49 43 52 33 01 49 43 ..DMA0..}ICR3.IC 5780: 52 33 a0 12 95 44 4d 41 30 0a 3c 7d 49 43 52 30 R3...DMA0.<}ICR0 5790: 01 49 43 52 30 a0 14 7b 57 39 33 30 0b 00 20 00 .ICR0..{W930.. . 57a0: 7d 49 43 52 31 01 49 43 52 31 a0 4b 15 93 87 6a }ICR1.ICR1.K...j 57b0: 0b 00 02 7b 50 52 49 54 0b 0f bf 50 52 49 54 70 ...{PRIT...PRITp 57c0: 00 50 53 49 54 7b 53 59 4e 43 01 53 59 4e 43 70 .PSIT{SYNC.SYNCp 57d0: 00 53 44 54 31 7b 49 43 52 30 01 49 43 52 30 7b .SDT1{ICR0.ICR0{ 57e0: 49 43 52 31 01 49 43 52 31 7b 49 43 52 33 01 49 ICR1.ICR1{ICR3.I 57f0: 43 52 33 7b 49 43 52 35 01 49 43 52 35 8b 6a 0a CR3{ICR5.ICR5.j. 5800: 62 57 34 39 31 8b 6a 0a 6a 57 35 33 31 8b 6a 0a bW491.j.jW531.j. 5810: 7e 57 36 33 31 8b 6a 0a 80 57 36 34 31 8b 6a 0a ~W631.j..W641.j. 5820: b0 57 38 38 31 8b 6a 0a ba 57 39 33 31 7d 50 52 .W881.j..W931}PR 5830: 49 54 0b 40 80 50 52 49 54 a0 1e 90 7b 46 4c 41 IT.@.PRIT...{FLA 5840: 47 0a 08 00 7b 57 34 39 31 0b 00 08 00 7d 50 52 G...{W491....}PR 5850: 49 54 0a 20 50 52 49 54 a0 4c 04 7b 46 4c 41 47 IT. PRIT.L.{FLAG 5860: 0a 10 00 7d 50 52 49 54 0b 00 40 50 52 49 54 a0 ...}PRIT..@PRIT. 5870: 13 94 50 49 4f 31 0a f0 7d 50 52 49 54 0a 80 50 ..PIO1..}PRIT..P 5880: 52 49 54 a1 21 7d 50 52 49 54 0a 10 50 52 49 54 RIT.!}PRIT..PRIT 5890: 70 53 45 54 54 50 49 4f 31 57 35 33 31 57 36 34 pSETTPIO1W531W64 58a0: 31 50 53 49 54 a0 40 06 7b 46 4c 41 47 0a 04 00 1PSIT.@.{FLAG... 58b0: 7d 53 59 4e 43 0a 02 53 59 4e 43 70 53 44 4d 41 }SYNC..SYNCpSDMA 58c0: 44 4d 41 31 53 44 54 31 a0 13 95 44 4d 41 31 0a DMA1SDT1...DMA1. 58d0: 1e 7d 49 43 52 33 0a 02 49 43 52 33 a0 13 95 44 .}ICR3..ICR3...D 58e0: 4d 41 31 0a 3c 7d 49 43 52 30 0a 02 49 43 52 30 MA1.<}ICR0..ICR0 58f0: a0 15 7b 57 39 33 31 0b 00 20 00 7d 49 43 52 31 ..{W931.. .}ICR1 5900: 0a 02 49 43 52 31 5b 82 47 10 50 5f 44 30 08 5f ..ICR1[.G.P_D0._ 5910: 41 44 52 00 14 4a 0f 5f 47 54 46 00 08 50 49 42 ADR..J._GTF..PIB 5920: 30 11 11 0a 0e 03 00 00 00 00 a0 ef 03 00 00 00 0............... 5930: 00 a0 ef 8c 50 49 42 30 01 50 4d 44 30 8c 50 49 ....PIB0.PMD0.PI 5940: 42 30 0a 08 44 4d 44 30 a0 40 06 7b 50 52 49 54 B0..DMD0.@.{PRIT 5950: 0a 02 00 a0 13 93 7b 50 52 49 54 0a 09 00 0a 08 ......{PRIT..... 5960: 70 0a 08 50 4d 44 30 a1 41 04 70 0a 0a 50 4d 44 p..PMD0.A.p..PMD 5970: 30 7a 7b 50 52 49 54 0b 00 03 00 0a 08 60 7a 7b 0z{PRIT......`z{ 5980: 50 52 49 54 0b 00 30 00 0a 0c 61 72 60 61 62 a0 PRIT..0...ar`ab. 5990: 0c 93 0a 03 62 70 0a 0b 50 4d 44 30 a0 0c 93 0a ....bp..PMD0.... 59a0: 05 62 70 0a 0c 50 4d 44 30 a1 07 70 01 50 4d 44 .bp..PMD0..p.PMD 59b0: 30 a0 43 04 7b 53 59 4e 43 01 00 70 7d 53 44 54 0.C.{SYNC..p}SDT 59c0: 30 0a 40 00 44 4d 44 30 a0 2c 7b 49 43 52 31 01 0.@.DMD0.,{ICR1. 59d0: 00 a0 13 7b 49 43 52 30 01 00 72 44 4d 44 30 0a ...{ICR0..rDMD0. 59e0: 02 44 4d 44 30 a0 0f 7b 49 43 52 33 01 00 70 0a .DMD0..{ICR3..p. 59f0: 45 44 4d 44 30 a1 14 7d 74 7b 50 4d 44 30 0a 07 EDMD0..}t{PMD0.. 5a00: 00 0a 02 00 0a 20 44 4d 44 30 a4 50 49 42 30 5b ..... DMD0.PIB0[ 5a10: 82 46 10 50 5f 44 31 08 5f 41 44 52 01 14 49 0f .F.P_D1._ADR..I. 5a20: 5f 47 54 46 00 08 50 49 42 31 11 11 0a 0e 03 00 _GTF..PIB1...... 5a30: 00 00 00 b0 ef 03 00 00 00 00 b0 ef 8c 50 49 42 .............PIB 5a40: 31 01 50 4d 44 31 8c 50 49 42 31 0a 08 44 4d 44 1.PMD1.PIB1..DMD 5a50: 31 a0 4b 05 7b 50 52 49 54 0a 20 00 a0 13 93 7b 1.K.{PRIT. ....{ 5a60: 50 52 49 54 0a 90 00 0a 80 70 0a 08 50 4d 44 31 PRIT.....p..PMD1 5a70: a1 3c 72 7b 50 53 49 54 0a 03 00 7a 7b 50 53 49 . /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/method-0001/acpidump-0001.log method - | grep "^[0-9]*[ ]*method" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/method-0001/method-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/misc-0001/000077500000000000000000000000001465205512700143365ustar00rootroot00000000000000fwts-test/misc-0001/acpidump-0001.log000066400000000000000000000042061465205512700172230ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... MISC @ 0x00000000 0000: 4D 49 53 43 7C 00 00 00 01 52 49 4E 54 45 4C 20 MISC.....RINTEL 0010: 54 65 6D 70 6C 61 74 65 00 00 00 00 49 4E 54 4C Template....INTL 0020: 05 01 21 20 11 22 33 44 55 66 77 88 99 00 AA BB ..! ..3DUfW..... 0030: CC DD EE FF 2C 00 00 00 00 00 00 00 41 42 43 44 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: FF EE DD CC BB AA 99 88 77 66 55 44 33 22 11 00 .......WfUD3.... 0060: 28 00 00 00 00 00 00 00 44 43 42 41 FF FF FF FF ................ 0070: FF FF FF FF FF FF FF FF ........ fwts-test/misc-0001/acpidump-0002.log000066400000000000000000000042061465205512700172240ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... MISC @ 0x00000000 0000: 4D 49 53 43 7C 00 00 00 01 52 49 4E 54 45 4C 20 MISC.....RINTEL 0010: 54 65 6D 70 6C 61 74 65 00 00 00 00 49 4E 54 4C Template....INTL 0020: 05 01 21 20 11 22 33 44 55 66 77 88 99 00 AA BB ..! ..3DUfW..... 0030: CC DD EE FF 2C 00 00 00 00 00 00 00 41 42 43 44 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: FF EE DD CC BB AA 99 88 77 66 55 44 33 22 11 00 .......WfUD3.... 0060: 2C 00 00 00 00 00 00 00 44 43 42 41 FF FF FF FF ................ 0070: FF FF FF FF FF FF FF FF ........ fwts-test/misc-0001/misc-0001.log000066400000000000000000000023651465205512700163600ustar00rootroot00000000000000misc misc: MISC Miscellaneous GUIDed Table Entries test. misc ---------------------------------------------------------- misc Test 1 of 1: Validate MISC table. misc Miscellaneous GUIDed Table Entries: misc Entry GUID ID: 44332211-6655-8877-9900-AABBCCDDEEFF misc Entry Length: 0x0000002c misc Revision: 0x00000000 misc Producer ID: 0x44434241 misc Data: misc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 misc misc Miscellaneous GUIDed Table Entries: misc Entry GUID ID: CCDDEEFF-AABB-8899-7766-554433221100 misc Entry Length: 0x00000028 misc Revision: 0x00000000 misc Producer ID: 0x41424344 misc Data: misc FF FF FF FF FF FF FF FF FF FF FF FF misc misc PASSED: Test 1, No issues found in MISC table. misc misc ========================================================== misc 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 misc info only. misc ========================================================== fwts-test/misc-0001/misc-0002.log000066400000000000000000000016741465205512700163630ustar00rootroot00000000000000misc misc: MISC Miscellaneous GUIDed Table Entries test. misc ---------------------------------------------------------- misc Test 1 of 1: Validate MISC table. misc Miscellaneous GUIDed Table Entries: misc Entry GUID ID: 44332211-6655-8877-9900-AABBCCDDEEFF misc Entry Length: 0x0000002c misc Revision: 0x00000000 misc Producer ID: 0x44434241 misc Data: misc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 misc misc FAILED [HIGH] MISCOutOfRangeOffset: Test 1, MISC GUIDed misc Entry Offset is out of range. misc misc ========================================================== misc 0 passed, 1 failed, 0 warning, 0 aborted, 0 skipped, 0 misc info only. misc ========================================================== fwts-test/misc-0001/test-0001.sh000077500000000000000000000010011465205512700162220ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against MISC" NAME=test-0001.sh TMPLOG=$TMP/misc.log.$$ $FWTS --show-tests | grep misc > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/misc-0001/acpidump-0001.log misc - | cut -c7- | grep "^misc" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/misc-0001/misc-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/misc-0001/test-0002.sh000077500000000000000000000010011465205512700162230ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against MISC" NAME=test-0002.sh TMPLOG=$TMP/misc.log.$$ $FWTS --show-tests | grep misc > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/misc-0001/acpidump-0002.log misc - | cut -c7- | grep "^misc" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/misc-0001/misc-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/mpam-0001/000077500000000000000000000000001465205512700143355ustar00rootroot00000000000000fwts-test/mpam-0001/acpidump-0001.log000066400000000000000000000065641465205512700172330ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... MPAM @ 0x00000000 0000: 4D 50 41 4D 6B 01 00 00 02 34 48 49 53 49 20 20 MPAM.....4HISI 0010: 54 45 4D 50 4C 41 54 45 02 00 00 00 49 4E 54 4C TEMPLATE....INTL 0020: 20 10 22 20 60 00 00 00 01 00 00 00 00 00 00 C0 ." `........... 0030: 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: 00 00 00 00 00 00 00 00 32 00 00 00 00 00 00 00 ........2....... 0060: 00 00 00 00 00 00 00 00 01 00 00 00 11 00 00 00 ................ 0070: 00 00 00 01 20 00 00 00 00 00 00 00 00 00 00 00 .... ........... 0080: 00 00 00 00 08 01 00 00 02 00 00 00 00 00 00 D0 ....x........... 0090: 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 ................ 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00b0: 00 00 00 00 00 00 00 00 32 00 00 00 00 00 00 00 ........2....... 00c0: 00 00 00 00 00 00 00 00 06 00 00 00 12 00 00 00 ................ 00d0: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ 00e0: 00 00 00 00 13 00 00 00 01 00 00 FF 02 00 00 00 ................ 00f0: 00 00 00 00 00 00 00 00 00 00 00 00 14 00 00 00 ................ 0100: 01 00 00 03 00 00 00 00 00 00 00 01 02 00 00 00 ................ 0110: 00 00 00 00 15 00 00 00 01 00 00 04 11 22 33 44 ................ 0120: 55 66 77 88 99 AA BB CC 00 00 00 00 16 00 00 00 ................ 0130: 01 00 00 02 02 00 00 00 00 00 00 00 00 00 00 00 ................ 0140: 02 00 00 00 11 22 33 44 00 00 00 00 AA BB CC DD ................ 0150: 00 00 00 00 17 00 00 00 00 00 00 05 6C 01 00 00 ................ 0160: 00 00 00 00 00 00 00 00 00 00 00 00 45 D6 2B FE ................ 0170: 3B 03 E6 49 79 94 CD D1 21 8B 0B 2E 01 00 00 00 ................ 0180: 11 11 11 11 22 22 22 22 00 00 00 00 ............ fwts-test/mpam-0001/acpidump-0002.log000066400000000000000000000066511465205512700172310ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... MPAM @ 0x00000000 0000: 4D 50 41 4D 6B 01 00 00 02 34 48 49 53 49 20 20 MPAM.....4HISI 0010: 54 45 4D 50 4C 41 54 45 02 00 00 00 49 4E 54 4C TEMPLATE....INTL 0020: 20 10 22 20 60 00 01 02 01 00 00 00 00 00 00 C0 ." `........... 0030: 00 00 00 00 00 00 01 00 00 00 00 00 02 00 00 FF ................ 0040: 00 00 02 00 00 00 00 00 00 00 00 00 02 00 00 11 ................ 0050: 00 00 00 FF 00 00 00 00 32 00 00 00 00 00 00 00 ........2....... 0060: 00 00 00 00 00 00 00 00 01 00 00 00 11 00 00 00 ................ 0070: 00 00 00 01 20 00 00 00 00 00 00 00 00 00 00 11 .... ........... 0080: 00 00 00 00 08 01 00 00 02 00 00 00 00 00 00 D0 ....x........... 0090: 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 ................ 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00b0: 00 00 00 00 00 00 00 00 32 00 00 00 00 00 00 00 ........2....... 00c0: 00 00 00 00 00 00 00 00 06 00 00 00 12 00 00 00 ................ 00d0: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 02 00 ................ 00e0: 00 00 00 00 13 00 00 00 01 00 00 FF 02 00 00 00 ................ 00f0: 00 00 00 00 00 00 00 00 00 00 00 00 14 00 00 00 ................ 0100: 01 00 00 03 11 00 00 00 00 00 00 01 02 00 00 00 ................ 0110: 00 00 00 00 15 00 00 00 01 00 00 04 11 22 33 44 ................ 0120: 55 66 77 88 99 AA BB CC 00 00 00 00 16 00 00 00 ................ 0130: 01 00 00 02 03 00 00 00 00 00 00 00 00 00 00 11 ................ 0140: 02 00 00 00 11 22 33 44 00 00 00 00 AA BB CC DD ................ 0150: 00 00 00 22 17 00 00 00 00 00 01 05 6C 01 00 00 ................ 0160: 00 00 00 00 00 00 00 11 00 00 00 00 45 D6 2B FE ................ 0170: 3B 03 E6 49 79 94 CD D1 21 8B 0B 2E 01 00 00 00 ................ 0180: 11 11 11 11 22 22 22 22 00 00 00 11 ............ .... fwts-test/mpam-0001/mpam-0001.log000066400000000000000000000161371465205512700163600ustar00rootroot00000000000000mpam mpam: MPAM Memory System Resource Partitioning And mpam Monitoring Table test. mpam ---------------------------------------------------------- mpam Test 1 of 1: Validate MPAM table. mpam MPAM Memory System Resource Partitioning And Monitoring Table: mpam MPAM MSC node: mpam Length: 0x0060 mpam Interface type: 0x00 mpam Reserved: 0x00 mpam Identifier: 0x00000001 mpam Base address: 0x00000000c0000000 mpam MMIO size: 0x00010000 mpam Overflow interrupt: 0x00000000 mpam Overflow interrupt flags: 0x00000000 mpam Reserved1: 0x00000000 mpam Overflow interrupt affinity: 0x00000000 mpam Error interrupt: 0x00000000 mpam Error interrupt flags: 0x00000000 mpam Reserved2: 0x00000000 mpam Error interrupt affinity: 0x00000000 mpam MAX_NRDY_USEC: 0x00000032 mpam Hardware ID of linked device: 0x0000000000000000 mpam Instance ID of linked device: 0x00000000 mpam Number of resource nodes: 0x00000001 mpam List of resource nodes: mpam Identifier: 0x00000011 mpam RIS Index: 0x00 mpam Reserved1: 0x0000 mpam Locator type: 0x01 mpam Locator: mpam Memory locator: mpam 20 00 00 00 00 00 00 00 00 00 00 00 mpam Number of functional dependencies: 0x00000000 mpam mpam MPAM MSC node: mpam Length: 0x0108 mpam Interface type: 0x00 mpam Reserved: 0x00 mpam Identifier: 0x00000002 mpam Base address: 0x00000000d0000000 mpam MMIO size: 0x00010000 mpam Overflow interrupt: 0x00000000 mpam Overflow interrupt flags: 0x00000000 mpam Reserved1: 0x00000000 mpam Overflow interrupt affinity: 0x00000000 mpam Error interrupt: 0x00000000 mpam Error interrupt flags: 0x00000000 mpam Reserved2: 0x00000000 mpam Error interrupt affinity: 0x00000000 mpam MAX_NRDY_USEC: 0x00000032 mpam Hardware ID of linked device: 0x0000000000000000 mpam Instance ID of linked device: 0x00000000 mpam Number of resource nodes: 0x00000006 mpam List of resource nodes: mpam Identifier: 0x00000012 mpam RIS Index: 0x00 mpam Reserved1: 0x0000 mpam Locator type: 0x00 mpam Locator: mpam Processor cache locator: mpam 01 00 00 00 00 00 00 00 00 00 00 00 mpam Number of functional dependencies: 0x00000000 mpam List of resource nodes: mpam Identifier: 0x00000013 mpam RIS Index: 0x01 mpam Reserved1: 0x0000 mpam Locator type: 0xff mpam Locator: mpam Unknown locator: mpam 02 00 00 00 00 00 00 00 00 00 00 00 mpam Number of functional dependencies: 0x00000000 mpam List of resource nodes: mpam Identifier: 0x00000014 mpam RIS Index: 0x01 mpam Reserved1: 0x0000 mpam Locator type: 0x03 mpam Locator: mpam Memory-side cache locator: mpam 00 00 00 00 00 00 00 01 02 00 00 00 mpam Number of functional dependencies: 0x00000000 mpam List of resource nodes: mpam Identifier: 0x00000015 mpam RIS Index: 0x01 mpam Reserved1: 0x0000 mpam Locator type: 0x04 mpam Locator: mpam ACPI device locator: mpam 11 22 33 44 55 66 77 88 99 AA BB CC mpam Number of functional dependencies: 0x00000000 mpam List of resource nodes: mpam Identifier: 0x00000016 mpam RIS Index: 0x01 mpam Reserved1: 0x0000 mpam Locator type: 0x02 mpam Locator: mpam SMMU locator: mpam 02 00 00 00 00 00 00 00 00 00 00 00 mpam Number of functional dependencies: 0x00000002 mpam Functional dependency descriptor: mpam Producer: 0x44332211 mpam Reserved: 0x00000000 mpam Functional dependency descriptor: mpam Producer: 0xddccbbaa mpam Reserved: 0x00000000 mpam List of resource nodes: mpam Identifier: 0x00000017 mpam RIS Index: 0x00 mpam Reserved1: 0x0000 mpam Locator type: 0x05 mpam Locator: mpam Interconnect locator: mpam 6C 01 00 00 00 00 00 00 00 00 00 00 mpam Interconnect descriptor table: mpam Signature: mpam 45 D6 2B FE 3B 03 E6 49 79 94 CD D1 21 8B 0B 2E mpam Number of descriptors: 0x00000001 mpam Number of functional dependencies: 0x00000000 mpam Resource-specific data: mpam 45 D6 2B FE 3B 03 E6 49 79 94 CD D1 21 8B 0B 2E mpam 01 00 00 00 11 11 11 11 22 22 22 22 00 00 00 00 mpam mpam PASSED: Test 1, No issues found in MPAM table. mpam mpam ========================================================== mpam 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 mpam info only. mpam ========================================================== fwts-test/mpam-0001/mpam-0002.log000066400000000000000000000244171465205512700163610ustar00rootroot00000000000000mpam mpam: MPAM Memory System Resource Partitioning And mpam Monitoring Table test. mpam ---------------------------------------------------------- mpam Test 1 of 1: Validate MPAM table. mpam MPAM Memory System Resource Partitioning And Monitoring Table: mpam MPAM MSC node: mpam Length: 0x0060 mpam Interface type: 0x01 mpam Reserved: 0x02 mpam Identifier: 0x00000001 mpam Base address: 0x00000000c0000000 mpam MMIO size: 0x00010000 mpam Overflow interrupt: 0x00000000 mpam Overflow interrupt flags: 0xff000002 mpam Reserved1: 0x00020000 mpam Overflow interrupt affinity: 0x00000000 mpam Error interrupt: 0x00000000 mpam Error interrupt flags: 0x11000002 mpam Reserved2: 0xff000000 mpam Error interrupt affinity: 0x00000000 mpam MAX_NRDY_USEC: 0x00000032 mpam Hardware ID of linked device: 0x0000000000000000 mpam Instance ID of linked device: 0x00000000 mpam Number of resource nodes: 0x00000001 mpam FAILED [HIGH] MPAMBadInterfaceType: Test 1, MPAM MSC node mpam interface type must have value with 0 or 0x0a, got 0x01 mpam instead mpam FAILED [MEDIUM] MPAMReservedNonZero: Test 1, MPAM Reserved mpam field must be zero, got 0x02 instead mpam FAILED [HIGH] MPAMReservedBitsNonZero: Test 1, MPAM mpam Overflow interrupt flags Bits [2..1] must be zero, got mpam 0xff000002 instead mpam FAILED [HIGH] MPAMReservedBitsNonZero: Test 1, MPAM mpam Overflow interrupt flags Bits [31..5] must be zero, got mpam 0xff000002 instead mpam FAILED [MEDIUM] MPAMReservedNonZero: Test 1, MPAM mpam Reserved1 field must be zero, got 0x00020000 instead mpam FAILED [HIGH] MPAMReservedBitsNonZero: Test 1, MPAM Error mpam interrupt flags Bits [2..1] must be zero, got 0x11000002 mpam instead mpam FAILED [HIGH] MPAMReservedBitsNonZero: Test 1, MPAM Error mpam interrupt flags Bits [31..5] must be zero, got 0x11000002 mpam instead mpam FAILED [MEDIUM] MPAMReservedNonZero: Test 1, MPAM mpam Reserved2 field must be zero, got 0xff000000 instead mpam List of resource nodes: mpam Identifier: 0x00000011 mpam RIS Index: 0x00 mpam Reserved1: 0x0000 mpam Locator type: 0x01 mpam Locator: mpam Memory locator: mpam 20 00 00 00 00 00 00 00 00 00 00 11 mpam FAILED [MEDIUM] MPAMReservedNonZero: Test 1, MPAM Locator mpam field must be all zero, got below instead mpam Locator [00] = 0x00 mpam Locator [01] = 0x00 mpam Locator [02] = 0x00 mpam Locator [03] = 0x11 mpam Number of functional dependencies: 0x00000000 mpam mpam MPAM MSC node: mpam Length: 0x0108 mpam Interface type: 0x00 mpam Reserved: 0x00 mpam Identifier: 0x00000002 mpam Base address: 0x00000000d0000000 mpam MMIO size: 0x00010000 mpam Overflow interrupt: 0x00000000 mpam Overflow interrupt flags: 0x00000000 mpam Reserved1: 0x00000000 mpam Overflow interrupt affinity: 0x00000000 mpam Error interrupt: 0x00000000 mpam Error interrupt flags: 0x00000000 mpam Reserved2: 0x00000000 mpam Error interrupt affinity: 0x00000000 mpam MAX_NRDY_USEC: 0x00000032 mpam Hardware ID of linked device: 0x0000000000000000 mpam Instance ID of linked device: 0x00000000 mpam Number of resource nodes: 0x00000006 mpam List of resource nodes: mpam Identifier: 0x00000012 mpam RIS Index: 0x00 mpam Reserved1: 0x0000 mpam Locator type: 0x00 mpam Locator: mpam Processor cache locator: mpam 01 00 00 00 00 00 00 00 00 00 02 00 mpam FAILED [MEDIUM] MPAMReservedNonZero: Test 1, MPAM Locator mpam field must be all zero, got below instead mpam Locator [00] = 0x00 mpam Locator [01] = 0x00 mpam Locator [02] = 0x02 mpam Locator [03] = 0x00 mpam Number of functional dependencies: 0x00000000 mpam List of resource nodes: mpam Identifier: 0x00000013 mpam RIS Index: 0x01 mpam Reserved1: 0x0000 mpam Locator type: 0xff mpam Locator: mpam Unknown locator: mpam 02 00 00 00 00 00 00 00 00 00 00 00 mpam Number of functional dependencies: 0x00000000 mpam List of resource nodes: mpam Identifier: 0x00000014 mpam RIS Index: 0x01 mpam Reserved1: 0x0000 mpam Locator type: 0x03 mpam Locator: mpam Memory-side cache locator: mpam 11 00 00 00 00 00 00 01 02 00 00 00 mpam FAILED [MEDIUM] MPAMReservedNonZero: Test 1, MPAM Locator mpam field must be all zero, got below instead mpam Locator [00] = 0x11 mpam Locator [01] = 0x00 mpam Locator [02] = 0x00 mpam Locator [03] = 0x00 mpam Locator [04] = 0x00 mpam Locator [05] = 0x00 mpam Locator [06] = 0x00 mpam Number of functional dependencies: 0x00000000 mpam List of resource nodes: mpam Identifier: 0x00000015 mpam RIS Index: 0x01 mpam Reserved1: 0x0000 mpam Locator type: 0x04 mpam Locator: mpam ACPI device locator: mpam 11 22 33 44 55 66 77 88 99 AA BB CC mpam Number of functional dependencies: 0x00000000 mpam List of resource nodes: mpam Identifier: 0x00000016 mpam RIS Index: 0x01 mpam Reserved1: 0x0000 mpam Locator type: 0x02 mpam Locator: mpam SMMU locator: mpam 03 00 00 00 00 00 00 00 00 00 00 11 mpam FAILED [MEDIUM] MPAMReservedNonZero: Test 1, MPAM Locator mpam field must be all zero, got below instead mpam Locator [00] = 0x00 mpam Locator [01] = 0x00 mpam Locator [02] = 0x00 mpam Locator [03] = 0x11 mpam Number of functional dependencies: 0x00000002 mpam Functional dependency descriptor: mpam Producer: 0x44332211 mpam Reserved: 0x00000000 mpam Functional dependency descriptor: mpam Producer: 0xddccbbaa mpam Reserved: 0x22000000 mpam FAILED [MEDIUM] MPAMReservedNonZero: Test 1, MPAM mpam Reserved1 field must be zero, got 0x22000000 instead mpam List of resource nodes: mpam Identifier: 0x00000017 mpam RIS Index: 0x00 mpam Reserved1: 0x0100 mpam Locator type: 0x05 mpam Locator: mpam Interconnect locator: mpam 6C 01 00 00 00 00 00 00 00 00 00 11 mpam FAILED [MEDIUM] MPAMReservedNonZero: Test 1, MPAM Locator mpam field must be all zero, got below instead mpam Locator [00] = 0x00 mpam Locator [01] = 0x00 mpam Locator [02] = 0x00 mpam Locator [03] = 0x11 mpam Interconnect descriptor table: mpam Signature: mpam 45 D6 2B FE 3B 03 E6 49 79 94 CD D1 21 8B 0B 2E mpam Number of descriptors: 0x00000001 mpam FAILED [MEDIUM] MPAMReservedNonZero: Test 1, MPAM reserved mpam field must be all zero, got below instead mpam reserved [00] = 0x00 mpam reserved [01] = 0x00 mpam reserved [02] = 0x11 mpam Number of functional dependencies: 0x00000000 mpam FAILED [MEDIUM] MPAMReservedNonZero: Test 1, MPAM mpam Reserved1 field must be zero, got 0x0100 instead mpam Resource-specific data: mpam 45 D6 2B FE 3B 03 E6 49 79 94 CD D1 21 8B 0B 2E mpam 01 00 00 00 11 11 11 11 22 22 22 22 00 00 00 11 mpam mpam mpam ========================================================== mpam 0 passed, 16 failed, 0 warning, 0 aborted, 0 skipped, 0 mpam info only. mpam ========================================================== fwts-test/mpam-0001/test-0001.sh000077500000000000000000000010011465205512700162210ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against MPAM" NAME=test-0001.sh TMPLOG=$TMP/mpam.log.$$ $FWTS --show-tests | grep mpam > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/mpam-0001/acpidump-0001.log mpam - | cut -c7- | grep "^mpam" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/mpam-0001/mpam-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/mpam-0001/test-0002.sh000077500000000000000000000010011465205512700162220ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against MPAM" NAME=test-0001.sh TMPLOG=$TMP/mpam.log.$$ $FWTS --show-tests | grep mpam > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/mpam-0001/acpidump-0002.log mpam - | cut -c7- | grep "^mpam" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/mpam-0001/mpam-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/mpst-0001/000077500000000000000000000000001465205512700143665ustar00rootroot00000000000000fwts-test/mpst-0001/acpidump-0001.log000066400000000000000000000047341465205512700172610ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... MPST @ 0x00000000 0000: 4d 50 53 54 b6 00 00 00 01 4a 49 4e 54 45 4c 20 MPST.....JINTEL 0010: 54 45 4d 50 4c 41 54 45 01 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 27 05 16 20 00 00 00 00 02 00 00 00 00 00 01 00 '.. ............ 0030: 2a 00 00 00 00 00 00 f0 00 00 00 00 00 00 00 e0 *............... 0040: 00 00 00 00 02 00 00 00 03 00 00 00 01 02 03 04 ................ 0050: 00 00 01 00 02 00 00 00 02 00 24 00 00 00 00 00 ..........$..... 0060: 00 a0 00 00 00 00 00 00 00 b0 00 00 00 00 01 00 ................ 0070: 00 00 01 00 00 00 05 06 03 00 02 00 00 00 41 00 ..............A. 0080: 00 00 00 10 00 00 00 20 00 00 f0 de bc 9a 78 56 ....... ......xV 0090: 34 12 00 00 00 00 00 00 00 00 41 00 00 00 00 30 4.........A....0 00a0: 00 00 00 40 00 00 10 32 54 76 98 ba dc fe 00 00 ...@...2Tv...... 00b0: 00 00 00 00 00 00 ...... fwts-test/mpst-0001/acpidump-0002.log000066400000000000000000000046551465205512700172640ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... MPST @ 0x00000000 0000: 4d 50 53 54 b6 00 00 00 01 c5 49 4e 54 45 4c 20 MPST......INTEL 0010: 54 45 4d 50 4c 41 54 45 01 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 27 05 16 20 00 00 00 01 02 00 03 00 00 04 01 00 '.. ............ 0030: 2a 01 00 00 00 00 00 f0 00 00 00 00 00 00 00 e0 *............... 0040: 00 00 00 00 02 00 00 00 03 00 00 00 01 02 03 04 ................ 0050: 00 00 01 00 02 00 00 05 02 00 24 01 00 00 00 00 ..........$..... 0060: 00 a0 00 00 00 00 00 00 00 b0 00 00 00 00 01 00 ................ 0070: 00 00 01 00 00 00 05 06 03 00 02 00 06 00 02 00 ................ 0080: 00 00 00 10 00 00 00 20 00 00 f0 de bc 9a 78 56 ....... ......xV 0090: 34 12 07 00 00 00 00 00 00 00 03 00 00 00 00 30 4..............0 00a0: 00 00 00 40 00 00 10 32 54 76 98 ba dc fe 08 00 ...@...2Tv...... 00b0: 00 00 00 00 00 00 ...... fwts-test/mpst-0001/mpst-0001.log000066400000000000000000000066501465205512700164410ustar00rootroot00000000000000mpst mpst: MPST Memory Power State Table test. mpst ---------------------------------------------------------- mpst Test 1 of 1: Validate MPST table. mpst MPST Table: mpst Communication Channel ID: 0x00 mpst Reserved: 0x00000000 mpst Memory Power Node Count: 0x0002 mpst Reserved: 0x0000 mpst MPST Power Node: mpst Flags: 0x00 mpst Reserved: 0x00 mpst Memory Power Node Id: 0x0001 mpst Power Node Length: 0x0000002a mpst Base Address: 0x00000000f0000000 mpst Memory Length: 0x00000000e0000000 mpst Number of Power States: 0x00000002 mpst Number of Physical Components: 0x00000003 mpst Power State Value: 0x01 mpst Power State Information Index: 0x02 mpst Power State Value: 0x03 mpst Power State Information Index: 0x04 mpst Physical Component Id: 0x0000 mpst Physical Component Id: 0x0001 mpst Physical Component Id: 0x0002 mpst MPST Power Node: mpst Flags: 0x00 mpst Reserved: 0x00 mpst Memory Power Node Id: 0x0002 mpst Power Node Length: 0x00000024 mpst Base Address: 0x00000000a0000000 mpst Memory Length: 0x00000000b0000000 mpst Number of Power States: 0x00000001 mpst Number of Physical Components: 0x00000001 mpst Power State Value: 0x05 mpst Power State Information Index: 0x06 mpst Physical Component Id: 0x0003 mpst Memory Characteristics Count: 0x0002 mpst Reserved: 0x0000 mpst MPST Power Characteristics: mpst Power State Structure ID: 0x41 mpst Flags: 0x00 mpst Reserved: 0x0000 mpst Average Power Consumed: 0x00001000 mpst Relative Power Saving: 0x00002000 mpst Exit Latency: 0x123456789abcdef0 mpst Reserved: 0x0000000000000000 mpst MPST Power Characteristics: mpst Power State Structure ID: 0x41 mpst Flags: 0x00 mpst Reserved: 0x0000 mpst Average Power Consumed: 0x00003000 mpst Relative Power Saving: 0x00004000 mpst Exit Latency: 0xfedcba9876543210 mpst Reserved: 0x0000000000000000 mpst mpst PASSED: Test 1, No issues found in MPST table. mpst mpst ========================================================== mpst 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 mpst info only. mpst ========================================================== fwts-test/mpst-0001/mpst-0002.log000066400000000000000000000123121465205512700164320ustar00rootroot00000000000000mpst mpst: MPST Memory Power State Table test. mpst ---------------------------------------------------------- mpst Test 1 of 1: Validate MPST table. mpst MPST Table: mpst Communication Channel ID: 0x00 mpst Reserved: 0x00010000 mpst FAILED [MEDIUM] MPSTReservedNonZero: Test 1, MPST Reserved mpst field must be zero, got 0x00010000 instead mpst Memory Power Node Count: 0x0002 mpst Reserved: 0x0003 mpst FAILED [MEDIUM] MPSTReservedNonZero: Test 1, MPST Reserved mpst field must be zero, got 0x0003 instead mpst MPST Power Node: mpst Flags: 0x00 mpst Reserved: 0x04 mpst Memory Power Node Id: 0x0001 mpst Power Node Length: 0x0000012a mpst Base Address: 0x00000000f0000000 mpst Memory Length: 0x00000000e0000000 mpst Number of Power States: 0x00000002 mpst Number of Physical Components: 0x00000003 mpst FAILED [MEDIUM] MPSTReservedNonZero: Test 1, MPST Reserved mpst field must be zero, got 0x04 instead mpst FAILED [HIGH] MPSTBadPowerNodeLength: Test 1, MPST Power mpst Node Length should be 0x0000002a, got 0x0000012a instead mpst Power State Value: 0x01 mpst Power State Information Index: 0x02 mpst Power State Value: 0x03 mpst Power State Information Index: 0x04 mpst Physical Component Id: 0x0000 mpst Physical Component Id: 0x0001 mpst Physical Component Id: 0x0002 mpst MPST Power Node: mpst Flags: 0x00 mpst Reserved: 0x05 mpst Memory Power Node Id: 0x0002 mpst Power Node Length: 0x00000124 mpst Base Address: 0x00000000a0000000 mpst Memory Length: 0x00000000b0000000 mpst Number of Power States: 0x00000001 mpst Number of Physical Components: 0x00000001 mpst FAILED [MEDIUM] MPSTReservedNonZero: Test 1, MPST Reserved mpst field must be zero, got 0x05 instead mpst FAILED [HIGH] MPSTBadPowerNodeLength: Test 1, MPST Power mpst Node Length should be 0x00000024, got 0x00000124 instead mpst Power State Value: 0x05 mpst Power State Information Index: 0x06 mpst Physical Component Id: 0x0003 mpst Memory Characteristics Count: 0x0002 mpst Reserved: 0x0006 mpst FAILED [MEDIUM] MPSTReservedNonZero: Test 1, MPST Reserved mpst field must be zero, got 0x0006 instead mpst MPST Power Characteristics: mpst Power State Structure ID: 0x02 mpst Flags: 0x00 mpst Reserved: 0x0000 mpst Average Power Consumed: 0x00001000 mpst Relative Power Saving: 0x00002000 mpst Exit Latency: 0x123456789abcdef0 mpst Reserved: 0x0000000000000007 mpst FAILED [HIGH] MPSTBadPowerCharacteristicsID: Test 1, MPST mpst Power Characteristics ID must be 1, got 0x02 instead mpst FAILED [HIGH] MPSTBadPowerCharacteristicsRevision: Test 1, mpst MPST Power Characteristics Revision must be 1, got 0x00 mpst instead mpst FAILED [MEDIUM] MPSTReservedNonZero: Test 1, MPST mpst Reserved2 field must be zero, got 0x0000000000000007 mpst instead mpst MPST Power Characteristics: mpst Power State Structure ID: 0x03 mpst Flags: 0x00 mpst Reserved: 0x0000 mpst Average Power Consumed: 0x00003000 mpst Relative Power Saving: 0x00004000 mpst Exit Latency: 0xfedcba9876543210 mpst Reserved: 0x0000000000000008 mpst FAILED [HIGH] MPSTBadPowerCharacteristicsID: Test 1, MPST mpst Power Characteristics ID must be 1, got 0x03 instead mpst FAILED [HIGH] MPSTBadPowerCharacteristicsRevision: Test 1, mpst MPST Power Characteristics Revision must be 1, got 0x00 mpst instead mpst FAILED [MEDIUM] MPSTReservedNonZero: Test 1, MPST mpst Reserved2 field must be zero, got 0x0000000000000008 mpst instead mpst mpst mpst ========================================================== mpst 0 passed, 13 failed, 0 warning, 0 aborted, 0 skipped, 0 mpst info only. mpst ========================================================== fwts-test/mpst-0001/test-0001.sh000077500000000000000000000007741465205512700162720ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against MPST" NAME=test-0001.sh TMPLOG=$TMP/mpst.log.$$ $FWTS --show-tests | grep MPST > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/mpst-0001/acpidump-0001.log mpst - | cut -c7- | grep "^mpst" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/mpst-0001/mpst-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/mpst-0001/test-0002.sh000077500000000000000000000010041465205512700162560ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid MPST" NAME=test-0001.sh TMPLOG=$TMP/mpst.log.$$ $FWTS --show-tests | grep MPST > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/mpst-0001/acpidump-0002.log mpst - | cut -c7- | grep "^mpst" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/mpst-0001/mpst-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/msdm-0001/000077500000000000000000000000001465205512700143435ustar00rootroot00000000000000fwts-test/msdm-0001/acpidump-0001.log000066400000000000000000000037601465205512700172340ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... MSDM @ 0x00000000 0000: 4d 53 44 4d 55 00 00 00 03 e8 41 43 52 53 59 53 MSDMU.....ACRSYS 0010: 41 43 52 50 52 44 43 54 01 00 00 00 31 30 32 35 ACRPRDCT....1025 0020: 00 00 04 00 01 00 00 00 00 00 00 00 01 00 00 00 ................ 0030: 00 00 00 00 1d 00 00 00 41 48 33 4e 52 2d 42 38 ........AH3NR-B8 0040: 46 44 4e 2d 43 31 57 54 47 2d 35 43 52 39 58 2d FDN-C1WTF-5CR9X- 0050: 31 41 4b 4d 48 1AKMH fwts-test/msdm-0001/acpidump-0002.log000066400000000000000000000037601465205512700172350ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... MSDM @ 0x00000000 0000: 4d 53 44 4d 55 00 00 00 03 e8 41 43 52 53 59 53 MSDMU.....ACRSYS 0010: 41 43 52 50 52 44 43 54 01 00 00 00 31 30 32 35 ACRPRDCT....1025 0020: 00 00 04 00 01 00 00 00 ff ff ff ff 01 00 00 00 ................ 0030: 20 00 00 00 1d 00 00 00 41 48 33 4e 52 2a 42 38 ........AH3NR*B8 0040: 46 44 4e 2d 43 31 57 54 47 2d 35 43 52 39 58 2d FDN-C1WTF-5CR9X- 0050: 31 41 4b 4d 48 1AKMH fwts-test/msdm-0001/msdm-0001.log000066400000000000000000000016461465205512700163730ustar00rootroot00000000000000msdm msdm: MSDM Microsoft Data Management Table test. msdm ---------------------------------------------------------- msdm Test 1 of 1: MSDM Microsoft Data Management Table test. msdm Reserved: 0x00000000 msdm Data Type: 0x00000001 msdm Data Reserved: 0x00000000 msdm Data Length: 0x0000001d msdm Data: 'AH3NR-B8FDN-C1WTG-5CR9X-1AKMH' msdm MSDM has had minimal check due to proprietary nature of msdm the table msdm PASSED: Test 1, No issues found in MSDM table. msdm msdm ========================================================== msdm 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 msdm info only. msdm ========================================================== fwts-test/msdm-0001/msdm-0002.log000066400000000000000000000025121465205512700163650ustar00rootroot00000000000000msdm msdm: MSDM Microsoft Data Management Table test. msdm ---------------------------------------------------------- msdm Test 1 of 1: MSDM Microsoft Data Management Table test. msdm Reserved: 0xffffffff msdm Data Type: 0x00000001 msdm Data Reserved: 0x00000020 msdm Data Length: 0x0000001d msdm FAILED [MEDIUM] MSDMReservedNonZero: Test 1, MSDM Reserved msdm field must be zero, got 0xffffffff instead msdm FAILED [MEDIUM] MSDMReservedNonZero: Test 1, MSDM Data msdm Reserved field must be zero, got 0x00000020 instead msdm Data: 'AH3NR*B8FDN-C1WTG-5CR9X-1AKMH' msdm FAILED [HIGH] MSDMDataLengthInvalid: Test 1, MSDM Data msdm field did not contain digits, uppercase letters and - msdm characters in the form XXXXX-XXXXX-XXXXX-XXXXX-XXXXX msdm MSDM has had minimal check due to proprietary nature of msdm the table msdm msdm ========================================================== msdm 0 passed, 3 failed, 0 warning, 0 aborted, 0 skipped, 0 msdm info only. msdm ========================================================== fwts-test/msdm-0001/test-0001.sh000077500000000000000000000007741465205512700162470ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against MSDM" NAME=test-0001.sh TMPLOG=$TMP/msdm.log.$$ $FWTS --show-tests | grep MSDM > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/msdm-0001/acpidump-0001.log msdm - | cut -c7- | grep "^msdm" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/msdm-0001/msdm-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/msdm-0001/test-0002.sh000077500000000000000000000010041465205512700162330ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid MSDM" NAME=test-0001.sh TMPLOG=$TMP/msdm.log.$$ $FWTS --show-tests | grep MSDM > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/msdm-0001/acpidump-0002.log msdm - | cut -c7- | grep "^msdm" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/msdm-0001/msdm-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/nfit-0001/000077500000000000000000000000001465205512700143435ustar00rootroot00000000000000fwts-test/nfit-0001/acpidump-0001.log000066400000000000000000000064601465205512700172340ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... NFIT @ 0x00000000 0000: 4e 46 49 54 70 01 00 00 01 35 49 4e 54 45 4c 20 NFITp....5INTEL 0010: 54 65 6d 70 6c 61 74 65 01 00 00 00 49 4e 54 4c Template....INTL 0020: 27 05 16 20 00 00 00 00 00 00 38 00 01 00 00 00 '.. ......8..... 0030: 00 00 00 00 00 00 00 00 30 05 af 91 86 5d 0e 47 ........0....].G 0040: a6 b0 0a 2d b9 40 82 49 00 00 00 7c 03 00 00 00 ...-.@.I...|.... 0050: 00 00 00 0c 00 00 00 00 08 00 00 00 00 00 00 00 ................ 0060: 01 00 30 00 01 00 00 00 04 00 00 00 01 00 01 00 ..0............. 0070: 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 08 00 00 00 00 01 00 03 00 2a 00 00 00 ............*... 0090: 02 00 20 00 01 00 00 00 04 00 00 00 00 01 00 00 .. ............. 00a0: 00 00 00 00 00 02 00 00 00 05 00 00 00 10 00 00 ................ 00b0: 03 00 28 00 00 00 00 00 b4 13 5d 40 91 0b 29 93 ..(.......]@..). 00c0: 67 e8 23 4c 00 00 00 88 00 11 22 33 44 55 66 77 g.#L......"3DUfw 00d0: 88 99 aa bb cc dd ee ff 04 00 50 00 01 00 86 80 ..........P..... 00e0: 17 20 01 00 86 80 17 20 01 00 00 00 00 00 00 00 . ..... ........ 00f0: 89 00 54 76 01 03 00 01 00 20 00 00 00 00 00 00 ..Tv..... ...... 0100: 00 00 80 00 00 00 00 00 08 00 00 00 00 00 00 00 ................ 0110: 00 10 80 00 00 00 00 00 04 00 00 00 00 00 00 00 ................ 0120: 00 00 00 00 00 00 00 00 05 00 28 00 01 00 00 01 ..........(..... 0130: 00 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00 ......... ...... 0140: 00 00 00 e0 0f 00 00 00 00 00 00 10 00 00 00 00 ................ 0150: 06 00 20 00 01 00 00 00 02 00 00 00 00 00 00 00 .. ............. 0160: 00 00 00 18 04 00 00 00 00 00 00 18 06 00 00 00 ................ fwts-test/nfit-0001/acpidump-0002.log000066400000000000000000000064611465205512700172360ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... NFIT @ 0x00000000 0000: 4e 46 49 54 70 01 00 00 01 33 49 4e 54 45 4c 20 NFITp....3INTEL 0010: 54 65 6d 70 6c 61 74 65 01 00 00 00 49 4e 54 4c Template....INTL 0020: 27 05 16 20 00 00 00 05 00 00 38 00 00 00 09 00 '.. ......8..... 0030: 0F 00 00 00 00 00 00 00 30 05 af 91 86 5d 0e 47 ........0....].G 0040: a6 b0 0a 2d b9 40 82 49 00 00 00 7c 03 00 00 00 ...-.@.I...|.... 0050: 00 00 00 0c 00 00 00 00 FF 00 00 00 00 00 00 00 ................ 0060: 01 00 30 00 01 00 00 00 04 00 00 00 01 00 01 00 ..0............. 0070: 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 08 00 00 00 00 01 00 03 00 fa 00 00 00 ............*... 0090: 02 00 20 00 01 00 00 00 04 00 00 00 00 01 00 00 .. ............. 00a0: 00 00 00 00 10 02 00 00 20 05 00 00 30 10 00 00 ................ 00b0: 03 00 28 00 00 00 00 00 b4 13 5d 40 91 0b 29 93 ..(.......]@..). 00c0: 67 e8 23 4c 00 00 00 88 00 11 22 33 44 55 66 77 g.#L......"3DUfw 00d0: 88 99 aa bb cc dd ee ff 04 00 50 00 01 00 86 80 ..........P..... 00e0: 17 20 01 55 86 80 17 20 01 AA 03 00 00 00 00 0F . ..... ........ 00f0: 89 00 54 76 01 03 00 01 00 20 00 00 00 00 00 00 ..Tv..... ...... 0100: 00 00 80 00 00 00 00 00 08 00 00 00 00 00 00 00 ................ 0110: 00 10 80 00 00 00 00 00 04 00 00 00 00 00 00 00 ................ 0120: 03 00 00 00 00 00 00 00 05 00 28 00 00 00 00 01 ..........(..... 0130: 00 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00 ......... ...... 0140: 00 00 00 e0 0f 00 00 00 00 00 00 10 00 00 00 00 ................ 0150: 06 00 20 00 01 00 00 00 02 00 F0 00 00 00 00 00 .. ............. 0160: 00 00 00 18 04 00 00 00 00 00 00 18 06 00 00 00 ................ fwts-test/nfit-0001/nfit-0001.log000066400000000000000000000151301465205512700163640ustar00rootroot00000000000000nfit nfit: NFIT NVDIMM Firmware Interface Table test. nfit ---------------------------------------------------------- nfit Test 1 of 1: NFIT NVDIMM Firmware Interface Table test. nfit NFIT NVDIMM Firmware Interface Table: nfit Reserved: 0x00000000 nfit nfit NFIT Subtable: nfit Type: 0x0000 nfit Length: 0x0038 nfit SPA Range Structure Index: 0x0001 nfit Flags: 0x0000 nfit Reserved: 0x00000000 nfit Proximity Domain: 0x00000000 nfit Address Range Type GUID: 91AF0530-5D86-470E-A6B0-0A2DB9408249 nfit System Physical Address Range Base: 0x000000037c000000 nfit System Physical Address Range Length: 0x000000000c000000 nfit Address Range Memory Mapping Attribute: 0x0000000000000008 nfit nfit NFIT Subtable: nfit Type: 0x0001 nfit Length: 0x0030 nfit NFIT Device Handle: 0x00000001 nfit NVDIMM Physical ID: 0x0004 nfit NVDIMM Region ID: 0x0000 nfit SPA Range Structure Index: 0x0001 nfit NVDIMM Control Region Structure Index: 0x0001 nfit NVDIMM Region Size: 0x0000000004000000 nfit Region Offset: 0x0000000000000000 nfit NVDIMM Physical Address Region Base: 0x0000000008000000 nfit Interleave Structure Index: 0x0001 nfit Interleave Ways: 0x0003 nfit NVDIMM State Flags: 0x002a nfit Reserved: 0x0000 nfit nfit NFIT Subtable: nfit Type: 0x0002 nfit Length: 0x0020 nfit Interleave Structure Index: 0x0001 nfit Reserved: 0x0000 nfit Number of Lines Described: 0x00000004 nfit Line Size: 0x00000100 nfit Line Offset: 0x00000000, SPA 0x0000000000000000 nfit Line Offset: 0x00000200, SPA 0x0000000000020000 nfit Line Offset: 0x00000500, SPA 0x0000000000050000 nfit Line Offset: 0x00001000, SPA 0x0000000000100000 nfit nfit NFIT Subtable: nfit Type: 0x0003 nfit Length: 0x0028 nfit Reserved: 0x00000000 nfit NFIT SMBIOS Entry 0: nfit Type: 0xb4 nfit Length: 0x13 nfit Handle: 0x405d nfit Strings: 11 bytes nfit nfit NFIT Subtable: nfit Type: 0x0004 nfit Length: 0x0050 nfit Vendor ID: 0x8086 nfit Device ID: 0x2017 nfit Revision ID: 0x0001 nfit Subsystem Vendor ID: 0x8086 nfit Subsystem Device ID: 0x2017 nfit Subsystem Revision ID: 0x0001 nfit Valid Fields: 0x00 nfit Manufacturing Location: 0x00 nfit Manufacturing Date: 0x0000 nfit Reserved: 0x0000 nfit Serial Number: 0x76540089 nfit Region Format Interface Code: 0x0301 nfit Number of Block Control Windows: 0x0100 nfit Size of Block Control Window: 0x0000000000002000 nfit Command Register Offset: 0x0000000000800000 nfit Size of Command Register: 0x0000000000000008 nfit Status RegisterOffset: 0x0000000000801000 nfit Size of Status Register: 0x0000000000000004 nfit NVDIMM Control Region Flag: 0x0000 nfit Reserved: 0x0000000000000000 nfit NVDIMM Control Region Structure Index: 0x0001 nfit nfit NFIT Subtable: nfit Type: 0x0005 nfit Length: 0x0028 nfit NVDIMM Control Region Structure Index: 0x0001 nfit Number of Block Data Windows: 0x0100 nfit Block Data Window Start Offset: 0x0000000000000000 nfit Size of Block Data Window: 0x0000000000002000 nfit NBlock Accessible Memory Capacity: 0x0000000fe0000000 nfit Beginning address of First Block: 0x0000000010000000 nfit nfit NFIT Subtable: nfit Type: 0x0006 nfit Length: 0x0020 nfit NFIT Device Handle: 0x00000001 nfit Number of Flush Hint Addresses: 0x0002 nfit Reserved: 0x0000000000000000 nfit Flush Hint Address: 0x0000000418000000 nfit Flush Hint Address: 0x0000000618000000 nfit nfit PASSED: Test 1, No issues found in NFIT table. nfit nfit ========================================================== nfit 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 nfit info only. nfit ========================================================== fwts-test/nfit-0001/nfit-0002.log000066400000000000000000000205461465205512700163740ustar00rootroot00000000000000nfit nfit: NFIT NVDIMM Firmware Interface Table test. nfit ---------------------------------------------------------- nfit Test 1 of 1: NFIT NVDIMM Firmware Interface Table test. nfit NFIT NVDIMM Firmware Interface Table: nfit Reserved: 0x05000000 nfit nfit FAILED [MEDIUM] NFITReservedNonZero: Test 1, NFIT Reserved nfit field must be zero, got 0x05000000 instead nfit NFIT Subtable: nfit Type: 0x0000 nfit Length: 0x0038 nfit SPA Range Structure Index: 0x0000 nfit Flags: 0x0009 nfit Reserved: 0x0000000f nfit Proximity Domain: 0x00000000 nfit Address Range Type GUID: 91AF0530-5D86-470E-A6B0-0A2DB9408249 nfit System Physical Address Range Base: 0x000000037c000000 nfit System Physical Address Range Length: 0x000000000c000000 nfit Address Range Memory Mapping Attribute: 0x00000000000000ff nfit FAILED [HIGH] NFITBadRangeIndexZero: Test 1, NFIT SPA nfit Range Structure Index must not be zero nfit FAILED [HIGH] NFITReservedBitsNonZero: Test 1, NFIT Flags nfit Bits [15..3] must be zero, got 0x0009 instead nfit FAILED [HIGH] NFITBadMemoryMappingAttribute: Test 1, NFIT nfit Memory Mapping Attribute must meet UEFI Spec, got nfit 0x00000000000000ff instead nfit FAILED [MEDIUM] NFITReservedNonZero: Test 1, NFIT Reserved nfit field must be zero, got 0x000000000000000f instead nfit nfit NFIT Subtable: nfit Type: 0x0001 nfit Length: 0x0030 nfit NFIT Device Handle: 0x00000001 nfit NVDIMM Physical ID: 0x0004 nfit NVDIMM Region ID: 0x0000 nfit SPA Range Structure Index: 0x0001 nfit NVDIMM Control Region Structure Index: 0x0001 nfit NVDIMM Region Size: 0x0000000004000000 nfit Region Offset: 0x0000000000000000 nfit NVDIMM Physical Address Region Base: 0x0000000008000000 nfit Interleave Structure Index: 0x0001 nfit Interleave Ways: 0x0003 nfit NVDIMM State Flags: 0x00fa nfit Reserved: 0x0000 nfit FAILED [HIGH] NFITReservedBitsNonZero: Test 1, NFIT NVDIMM nfit State Flags Bits [15..7] must be zero, got 0x00fa instead nfit nfit NFIT Subtable: nfit Type: 0x0002 nfit Length: 0x0020 nfit Interleave Structure Index: 0x0001 nfit Reserved: 0x0000 nfit Number of Lines Described: 0x00000004 nfit Line Size: 0x00000100 nfit Line Offset: 0x00000000, SPA 0x0000000000000000 nfit Line Offset: 0x00000210, SPA 0x0000000000021000 nfit Line Offset: 0x00000520, SPA 0x0000000000052000 nfit Line Offset: 0x00001030, SPA 0x0000000000103000 nfit nfit NFIT Subtable: nfit Type: 0x0003 nfit Length: 0x0028 nfit Reserved: 0x00000000 nfit NFIT SMBIOS Entry 0: nfit Type: 0xb4 nfit Length: 0x13 nfit Handle: 0x405d nfit Strings: 11 bytes nfit nfit NFIT Subtable: nfit Type: 0x0004 nfit Length: 0x0050 nfit Vendor ID: 0x8086 nfit Device ID: 0x2017 nfit Revision ID: 0x5501 nfit Subsystem Vendor ID: 0x8086 nfit Subsystem Device ID: 0x2017 nfit Subsystem Revision ID: 0xaa01 nfit Valid Fields: 0x03 nfit Manufacturing Location: 0x00 nfit Manufacturing Date: 0x0000 nfit Reserved: 0x0f00 nfit Serial Number: 0x76540089 nfit Region Format Interface Code: 0x0301 nfit Number of Block Control Windows: 0x0100 nfit FAILED [HIGH] NFITBadRevisionId: Test 1, NFIT Revision nfit ID's BYTE 1 must be zero, got 0x5501 instead nfit FAILED [HIGH] NFITBadRevisionId: Test 1, NFIT Subsystem nfit Revision ID's BYTE 1 must be zero, got 0xaa01 instead nfit FAILED [HIGH] NFITReservedBitsNonZero: Test 1, NFIT Valid nfit Bits [7..1] must be zero, got 0x03 instead nfit Size of Block Control Window: 0x0000000000002000 nfit Command Register Offset: 0x0000000000800000 nfit Size of Command Register: 0x0000000000000008 nfit Status RegisterOffset: 0x0000000000801000 nfit Size of Status Register: 0x0000000000000004 nfit NVDIMM Control Region Flag: 0x0003 nfit Reserved: 0x0000000000000000 nfit FAILED [HIGH] NFITReservedBitsNonZero: Test 1, NFIT NVDIMM nfit Control Region Flags Bits [15..1] must be zero, got 0x0003 nfit instead nfit NVDIMM Control Region Structure Index: 0x0001 nfit FAILED [MEDIUM] NFITReservedNonZero: Test 1, NFIT Reserved nfit field must be zero, got 0x0000000000000f00 instead nfit nfit NFIT Subtable: nfit Type: 0x0005 nfit Length: 0x0028 nfit NVDIMM Control Region Structure Index: 0x0000 nfit Number of Block Data Windows: 0x0100 nfit Block Data Window Start Offset: 0x0000000000000000 nfit Size of Block Data Window: 0x0000000000002000 nfit NBlock Accessible Memory Capacity: 0x0000000fe0000000 nfit Beginning address of First Block: 0x0000000010000000 nfit FAILED [HIGH] NFITBadRegionIndex: Test 1, NFIT NVDIMM nfit Control Region Structure Index must not be zero nfit nfit NFIT Subtable: nfit Type: 0x0006 nfit Length: 0x0020 nfit NFIT Device Handle: 0x00000001 nfit Number of Flush Hint Addresses: 0x0002 nfit Reserved: 0x00000000000000f0 nfit Flush Hint Address: 0x0000000418000000 nfit Flush Hint Address: 0x0000000618000000 nfit FAILED [MEDIUM] NFITReservedNonZero: Test 1, NFIT Reserved nfit field must be zero, got 0x00000000000000f0 instead nfit nfit nfit ========================================================== nfit 0 passed, 13 failed, 0 warning, 0 aborted, 0 skipped, 0 nfit info only. nfit ========================================================== fwts-test/nfit-0001/test-0001.sh000077500000000000000000000010011465205512700162270ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against NFIT" NAME=test-0001.sh TMPLOG=$TMP/nfit.log.$$ $FWTS --show-tests | grep nfit > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/nfit-0001/acpidump-0001.log nfit - | cut -c7- | grep "^nfit" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/nfit-0001/nfit-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/nfit-0001/test-0002.sh000077500000000000000000000010111465205512700162310ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid NFIT" NAME=test-0001.sh TMPLOG=$TMP/nfit.log.$$ $FWTS --show-tests | grep nfit > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/nfit-0001/acpidump-0002.log nfit - | cut -c7- | grep "^nfit" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/nfit-0001/nfit-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/oops-0001/000077500000000000000000000000001465205512700143635ustar00rootroot00000000000000fwts-test/oops-0001/oops-0001.log000066400000000000000000003736151465205512700164430ustar00rootroot00000000000000oops oops: Scan kernel log for Oopses. oops ---------------------------------------------------------- oops Test 1 of 1: Kernel log oops check. oops Found OOPS (1): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: [] __mutex_lock_slowpath+0x8a/0x130 oops *pde = af517067 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/devices/pci0000:00/0000:00:14.1/host9/target9:0:1/9:0:1:0/block/sdh/dev oops Modules linked in: snd_seq snd_timer snd_seq_device radeon(+) ttm drm_kms_helper fbcon tileblit font bitblit softcursor snd soundcore drm agpgart i2c_algo_bit shpchp joydev snd_page_alloc r8169 vga16fb usb_storage vgastate mii i2c_piix4 usbhid k8temp lp parport oops oops Pid: 410, comm: plymouthd Not tainted (2.6.32-13-generic #18-Ubuntu) A780GM-A oops EIP: 0060:[] EFLAGS: 00010246 CPU: 0 oops EIP is at __mutex_lock_slowpath+0x8a/0x130 oops EAX: 00000000 EBX: f63f727c ECX: f63f7284 EDX: f6945ec4 oops ESI: f63f7280 EDI: f63f728c EBP: f6945edc ESP: f6945eb8 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process plymouthd (pid: 410, ti=f6944000 task=f649a670 task.ti=f6944000) oops Stack: oops 00000000 f63f7284 f649a670 f63f7284 00000000 f63f7000 f63f727c f62b96c0 oops <0> f63f727c f6945eec c05a4f35 f62b96c0 f62b96c0 f6945f00 f81eb123 f62b96c0 oops <0> f64dd000 f63f7000 f6945f44 f81e2ecf 00000001 f81f2365 f81f1980 f81f3890 oops Call Trace: oops [] ? mutex_lock+0x25/0x40 oops [] ? drm_fb_release+0x23/0x70 [drm] oops [] ? drm_release+0x2ff/0x390 [drm] oops [] ? __fput+0xdf/0x1f0 oops [] ? fput+0x1d/0x30 oops [] ? filp_close+0x4c/0x80 oops [] ? sys_close+0x78/0xc0 oops [] ? syscall_call+0x7/0xb oops Code: 18 63 7f bd 90 8d 74 26 00 8d 73 04 89 f0 e8 ce 11 00 00 8d 55 e8 8d 43 08 89 45 e0 8b 43 0c 89 53 0c 8b 4d e0 89 45 ec 89 4d e8 <89> 10 8b 45 e4 ba ff ff ff ff 89 45 f0 89 d0 87 03 83 f8 01 74 oops EIP: [] __mutex_lock_slowpath+0x8a/0x130 SS:ESP 0068:f6945eb8 oops CR2: 0000000000000000 oops oops Found OOPS (2): oops BUG: unable to handle kernel NULL pointer dereference at 00000000000003a7 oops IP: [] con_insert_unipair+0x4b/0x250 oops PGD 60954067 PUD 60220067 PMD 0 oops Oops: 0000 [#1] SMP oops last sysfs file: /sys/module/soundcore/initstate oops CPU 0 oops Modules linked in: amd64_edac_mod(+) uvcvideo(+) videodev v4l1_compat v4l2_compat_ioctl32 soundcore psmouse serio_raw jmb38x_ms k8temp snd_page_alloc i2c_piix4 edac_core edac_mce_amd sdhci_pci jme memstick sdhci mii led_class shpchp lp parport fbcon tileblit font bitblit softcursor vga16fb vgastate radeon ttm usbhid drm_kms_helper hid drm i2c_algo_bit ahci pata_atiixp video output oops Pid: 638, comm: setfont Not tainted 2.6.32-21-generic #32-Ubuntu M77xK oops RIP: 0010:[] [] con_insert_unipair+0x4b/0x250 oops RSP: 0018:ffff880060a99cd8 EFLAGS: 00010206 oops RAX: 000000000000037f RBX: 0000000000000153 RCX: ffffffff8133aee6 oops RDX: 0000000000000005 RSI: 0000000000000153 RDI: ffff880060230a00 oops RBP: ffff880060a99d18 R08: 0000000000000000 R09: 0000000000000080 oops R10: 0000000000000001 R11: 0000000000000000 R12: ffff880060230a00 oops R13: 00000000000000e1 R14: 00000000000003a7 R15: 0000000000000000 oops FS: 00007f58fd4a5700(0000) GS:ffff880001c00000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b oops CR2: 00000000000003a7 CR3: 0000000060bf1000 CR4: 00000000000006f0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process setfont (pid: 638, threadinfo ffff880060a98000, task ffff880060cf44d0) oops Stack: oops 0000004001c0ea78 ffff880000014100 ffff880000012a90 000000000000001f oops <0> 0000000000000000 0000000000bb4280 ffff880060230a00 0000000000000000 oops <0> ffff880060a99d98 ffffffff8133b365 0000000000000002 ffff88006d2e0800 oops Call Trace: oops [] con_set_unimap+0x185/0x220 oops [] vt_ioctl+0x159e/0x1820 oops [] ? unlock_page+0x27/0x30 oops [] ? __do_fault+0x439/0x500 oops [] tty_ioctl+0xa2/0x6e0 oops [] vfs_ioctl+0x22/0xa0 oops [] ? __up_read+0x9a/0xc0 oops [] do_vfs_ioctl+0x81/0x380 oops [] ? up_read+0xe/0x10 oops [] ? do_page_fault+0x158/0x3b0 oops [] sys_ioctl+0x81/0xa0 oops [] system_call_fastpath+0x16/0x1b oops Code: 00 41 89 f6 49 89 fc 89 f3 66 41 c1 ee 0b 41 89 d5 41 83 e6 1f 4a 8b 04 f7 48 85 c0 74 53 89 da 66 c1 ea 06 83 e2 1f 4c 8d 34 d0 <49> 8b 06 48 85 c0 0f 84 8e 00 00 00 48 89 da 0f b7 db 83 e2 3f oops RIP [] con_insert_unipair+0x4b/0x250 oops RSP oops CR2: 00000000000003a7 oops oops Found OOPS (3): oops BUG: unable to handle kernel NULL pointer dereference at 00000040 oops IP: [] radeon_agp_init+0x19/0x3d0 [radeon] oops *pde = 00000000 oops Oops: 0000 [#1] SMP oops last sysfs file: /sys/module/usbhid/initstate oops Modules linked in: radeon(+) ttm drm_kms_helper drm hid_sunplus usbhid hid nvidia_agp(+) i2c_algo_bit forcedeth(+) pata_amd(+) agpgart floppy oops oops Pid: 228, comm: modprobe Not tainted (2.6.32-22-generic #36-Ubuntu) oops EIP: 0060:[] EFLAGS: 00010282 CPU: 0 oops EIP is at radeon_agp_init+0x19/0x3d0 [radeon] oops EAX: f69a2c00 EBX: f68f5000 ECX: d8000000 EDX: 00000000 oops ESI: f69a2c00 EDI: 00000001 EBP: f69e1d48 ESP: f69e1cf4 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process modprobe (pid: 228, ti=f69e0000 task=f6998cd0 task.ti=f69e0000) oops Stack: oops f69e1d00 00000292 00000000 f69e1d28 c035d2b0 00000001 f69e1d18 0000000e oops <0> 00000292 00000000 f68f5000 04000000 00000001 f69e1d40 f8333f85 f69e1d37 oops <0> 009a2c00 f68f5000 f68f5000 f69a2c00 00000001 f69e1d54 f833186f f68f5000 oops Call Trace: oops [] ? pci_bus_read_config_byte+0x60/0x70 oops [] ? r100_get_accessible_vram+0x55/0x150 [radeon] oops [] ? r100_mc_init+0x9f/0xe0 [radeon] oops [] ? r100_init+0xd2/0x270 [radeon] oops [] ? _spin_lock_irqsave+0x2f/0x50 oops [] ? vga_client_register+0x6b/0x80 oops [] ? radeon_device_init+0x22f/0x2f0 [radeon] oops [] ? radeon_vga_set_decode+0x0/0x30 [radeon] oops [] ? radeon_driver_load_kms+0x7a/0x190 [radeon] oops [] ? drm_get_dev+0x125/0x230 [drm] oops [] ? sysfs_addrm_start+0x60/0xa0 oops [] ? radeon_pci_probe+0x12/0x17f [radeon] oops [] ? local_pci_probe+0x13/0x20 oops [] ? pci_device_probe+0x68/0x90 oops [] ? really_probe+0x4d/0x140 oops [] ? pm_runtime_barrier+0x4e/0xc0 oops [] ? driver_probe_device+0x3c/0x60 oops [] ? __driver_attach+0x81/0x90 oops [] ? bus_for_each_dev+0x53/0x80 oops [] ? driver_attach+0x1e/0x20 oops [] ? __driver_attach+0x0/0x90 oops [] ? bus_add_driver+0xd5/0x280 oops [] ? pci_device_remove+0x0/0x40 oops [] ? driver_register+0x6a/0x130 oops [] ? __pci_register_driver+0x45/0xb0 oops [] ? drm_init+0xf3/0x100 [drm] oops [] ? radeon_init+0xdf/0xe1 [radeon] oops [] ? do_one_initcall+0x31/0x190 oops [] ? radeon_init+0x0/0xe1 [radeon] oops [] ? sys_init_module+0xb0/0x210 oops [] ? syscall_call+0x7/0xb oops Code: 66 90 e8 eb db e9 ff 5d 66 90 c3 8d b4 26 00 00 00 00 55 89 e5 57 56 53 83 ec 48 0f 1f 44 00 00 89 c3 8b 40 04 8b 90 28 02 00 00 <8b> 4a 40 85 c9 75 12 e8 2b db e9 ff 85 c0 89 c7 0f 85 51 03 00 oops EIP: [] radeon_agp_init+0x19/0x3d0 [radeon] SS:ESP 0068:f69e1cf4 oops CR2: 0000000000000040 oops oops Found OOPS (4): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: [] __mutex_lock_slowpath+0x8a/0x130 oops *pde = 5dfad067 oops Oops: 0002 [#2] SMP oops last sysfs file: /sys/kernel/uevent_seqnum oops Modules linked in: radeon(+) ttm drm_kms_helper drm hid_sunplus usbhid hid nvidia_agp i2c_algo_bit forcedeth pata_amd agpgart floppy oops oops Pid: 271, comm: plymouthd Tainted: G D (2.6.32-22-generic #36-Ubuntu) oops EIP: 0060:[] EFLAGS: 00010246 CPU: 0 oops EIP is at __mutex_lock_slowpath+0x8a/0x130 oops EAX: 00000000 EBX: f69a2e88 ECX: f69a2e90 EDX: f6b0fec0 oops ESI: f69a2e8c EDI: f69a2e98 EBP: f6b0fed8 ESP: f6b0feb4 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process plymouthd (pid: 271, ti=f6b0e000 task=f6a4a670 task.ti=f6b0e000) oops Stack: oops 00000000 f69a2e90 f6a4a670 f69a2e90 00000000 f69a2c00 f69a2e88 f6819680 oops <0> f69a2e88 f6b0fee8 c058a485 f6819680 f6819680 f6b0fefc f81afa53 f6819680 oops <0> f68196e0 f69a2c00 f6b0ff44 f81a707f 00000001 f81b7265 f81b67c0 f81b87c4 oops Call Trace: oops [] ? mutex_lock+0x25/0x40 oops [] ? drm_fb_release+0x23/0x70 [drm] oops [] ? drm_release+0x3cf/0x490 [drm] oops [] ? __fput+0xdf/0x1f0 oops [] ? fput+0x1d/0x30 oops [] ? filp_close+0x4c/0x80 oops [] ? sys_close+0x75/0xc0 oops [] ? syscall_call+0x7/0xb oops Code: 18 63 7f bd 90 8d 74 26 00 8d 73 04 89 f0 e8 de 11 00 00 8d 55 e8 8d 43 08 89 45 e0 8b 43 0c 89 53 0c 8b 4d e0 89 45 ec 89 4d e8 <89> 10 8b 45 e4 ba ff ff ff ff 89 45 f0 89 d0 87 03 83 f8 01 74 oops EIP: [] __mutex_lock_slowpath+0x8a/0x130 SS:ESP 0068:f6b0feb4 oops CR2: 0000000000000000 oops oops Found OOPS (5): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: [] kfifo_alloc+0x2e/0xb0 oops PGD 9a43b067 PUD 9aba3067 PMD 0 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input3/name oops CPU 1 oops Modules linked in: lirc_ene0100(+) lirc_dev lp parport ahci sdhci_pci firewire_ohci firewire_core sdhci led_class libahci crc_itu_t pata_amd forcedeth oops oops Pid: 511, comm: modprobe Not tainted 2.6.35-6-generic #9-Ubuntu Fuquene/Aspire 5520 oops RIP: 0010:[] [] kfifo_alloc+0x2e/0xb0 oops RSP: 0018:ffff88009a579d08 EFLAGS: 00010286 oops RAX: ffff8800b9477000 RBX: 0000000000000000 RCX: ffffffff8107f229 oops RDX: 0000000000000000 RSI: 00000000000000d0 RDI: 0000000000000246 oops RBP: ffff88009a579d18 R08: 0000000000000000 R09: 0000000000000246 oops R10: 0000000000000030 R11: 0000000000000000 R12: 0000000000001000 oops R13: ffff88003787d800 R14: ffff8800bbc44c00 R15: 00000000fffffff4 oops FS: 00007f3022b1c700(0000) GS:ffff880001f00000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 oops CR2: 0000000000000000 CR3: 000000009a43d000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process modprobe (pid: 511, threadinfo ffff88009a578000, task ffff88009b2edb80) oops Stack: oops ffff88009abc7b40 ffff8800bbc58660 ffff88009a579d58 ffffffffa009ee4f oops <0> ffff88009a579d38 ffffffffa009f060 ffff88003787d800 ffffffffa009f580 oops <0> ffffffffa009f540 00000000fffffff4 ffff88009a579d98 ffffffff8132a475 oops Call Trace: oops [] ene_probe+0x17f/0x350 [lirc_ene0100] oops [] pnp_device_probe+0x95/0x100 oops [] ? driver_sysfs_add+0x62/0x90 oops [] really_probe+0x68/0x190 oops [] driver_probe_device+0x45/0x70 oops [] __driver_attach+0x9b/0xa0 oops [] ? __driver_attach+0x0/0xa0 oops [] bus_for_each_dev+0x68/0x90 oops [] driver_attach+0x1e/0x20 oops [] bus_add_driver+0xde/0x280 oops [] driver_register+0x80/0x150 oops [] ? ene_init+0x0/0x3e [lirc_ene0100] oops [] pnp_register_driver+0x21/0x30 oops [] ene_init+0x3c/0x3e [lirc_ene0100] oops [] do_one_initcall+0x3c/0x1a0 oops [] sys_init_module+0xbb/0x200 oops [] system_call_fastpath+0x16/0x1b oops Code: e5 41 54 53 0f 1f 44 00 00 48 89 fb 89 f7 41 89 f4 48 85 ff 48 8d 47 ff 74 33 48 85 f8 75 2e 89 d6 e8 b7 33 0c 00 48 85 c0 74 52 <48> 89 03 44 89 63 08 31 c0 c7 43 10 00 00 00 00 c7 43 0c 00 00 oops RIP [] kfifo_alloc+0x2e/0xb0 oops RSP oops CR2: 0000000000000000 oops oops Found OOPS (6): oops BUG: unable to handle kernel paging request at f815b540 oops IP: [] driver_register+0xfe/0x130 oops *pde = 3701b067 *pte = 00000000 oops Oops: 0000 [#1] SMP oops last sysfs file: /sys/devices/virtual/tty/tty40/uevent oops Modules linked in: amd64_agp(+) squashfs aufs isofs nls_iso8859_1 nls_cp437 vfat fat dm_raid45 xor hid_microsoft vga16fb vgastate usbhid hid nouveau ttm drm_kms_helper usb_storage drm floppy forcedeth sata_nv pata_amd i2c_algo_bit agpgart oops oops Pid: 818, comm: modprobe Not tainted 2.6.35-6-generic #8-Ubuntu 'K8N-E-Deluxe'/K8N-E-Deluxe oops EIP: 0060:[] EFLAGS: 00010282 CPU: 0 oops EIP is at driver_register+0xfe/0x130 oops EAX: f815b510 EBX: 00000000 ECX: f801f419 EDX: f685eae0 oops ESI: f801f510 EDI: c03716d0 EBP: f5471f34 ESP: f5471f18 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process modprobe (pid: 818, ti=f5470000 task=f689cc20 task.ti=f5470000) oops Stack: oops 00000001 f801f780 00000000 c07e0ce0 f801f4e0 f801f780 f801f510 f5471f48 oops <0> c03719d5 b7779000 f801f780 00000000 f5471f54 f802202c 00000000 f5471f5c oops <0> f80220a8 f5471f88 c0101131 f801f780 c07df060 b7779000 f801f780 08bdd1c0 oops Call Trace: oops [] ? __pci_register_driver+0x45/0xb0 oops [] ? agp_amd64_init+0x2c/0xa0 [amd64_agp] oops [] ? agp_amd64_mod_init+0x8/0xa [amd64_agp] oops [] ? do_one_initcall+0x31/0x190 oops [] ? agp_amd64_mod_init+0x0/0xa [amd64_agp] oops [] ? sys_init_module+0x9b/0x1e0 oops [] ? sys_close+0x75/0xc0 oops [] ? syscall_call+0x7/0xb oops Code: 89 f0 e8 86 ea ff ff 83 c4 10 89 f8 5b 5e 5f 5d c3 8b 06 c7 04 24 08 61 77 c0 89 44 24 04 e8 78 5b 1c 00 8b 56 04 e9 56 ff ff ff <8b> 40 30 bf f0 ff ff ff e8 f5 14 f5 ff 8b 06 c7 04 24 48 61 77 oops EIP: [] driver_register+0xfe/0x130 SS:ESP 0068:f5471f18 oops CR2: 00000000f815b540 oops oops Found OOPS (7): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: [] kfifo_alloc+0x26/0x90 oops *pde = 7dae9067 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input3/name oops Modules linked in: lirc_ene0100(+) lirc_dev usbhid hid sdhci_pci firewire_ohci ahci sdhci led_class libahci firewire_core crc_itu_t tg3 oops oops Pid: 445, comm: modprobe Not tainted 2.6.35-6-generic #9-Ubuntu Nettiling/Aspire 5720Z oops EIP: 0060:[] EFLAGS: 00010286 CPU: 1 oops EIP is at kfifo_alloc+0x26/0x90 oops EAX: e10ef000 EBX: 00001000 ECX: c01674d2 EDX: c01674d2 oops ESI: 00000000 EDI: f69e9100 EBP: d1631e40 ESP: d1631e38 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process modprobe (pid: 445, ti=d1630000 task=f6990cb0 task.ti=d1630000) oops Stack: oops f6b3f4e0 f6bf7840 d1631e68 f8273dc7 00000020 000080d0 d1631e68 f724ce00 oops <0> fffffff4 f8273fa0 f724ce00 f8274400 d1631e7c c03b7e9e f724ce00 f8274420 oops <0> f8274420 d1631ea0 c0404ead f724ced0 d1631ea0 c040c0f7 00000000 f724ce00 oops Call Trace: oops [] ? ene_probe+0x157/0x30b [lirc_ene0100] oops [] ? pnp_device_probe+0x6e/0xd0 oops [] ? really_probe+0x4d/0x150 oops [] ? pm_runtime_barrier+0x57/0xb0 oops [] ? driver_probe_device+0x3c/0x60 oops [] ? __driver_attach+0x81/0x90 oops [] ? bus_for_each_dev+0x53/0x80 oops [] ? driver_attach+0x1e/0x20 oops [] ? __driver_attach+0x0/0x90 oops [] ? bus_add_driver+0xd5/0x280 oops [] ? pnp_device_remove+0x0/0x40 oops [] ? driver_register+0x6a/0x130 oops [] ? tracepoint_module_notify+0x27/0x30 oops [] ? pnp_register_driver+0x1c/0x20 oops [] ? ene_init+0x38/0x3a [lirc_ene0100] oops [] ? __blocking_notifier_call_chain+0x54/0x70 oops [] ? do_one_initcall+0x31/0x190 oops [] ? ene_init+0x0/0x3a [lirc_ene0100] oops [] ? sys_init_module+0x9b/0x1e0 oops [] ? sys_close+0x75/0xc0 oops [] ? syscall_call+0x7/0xb oops Code: 89 3a eb d3 90 55 89 e5 56 53 0f 1f 44 00 00 89 d3 89 c6 85 db 89 ca 8d 4b ff 74 31 85 d9 75 25 89 d8 e8 de 64 0a 00 85 c0 74 38 <89> 06 31 c0 89 5e 04 c7 46 0c 00 00 00 00 c7 46 08 00 00 00 00 oops EIP: [] kfifo_alloc+0x26/0x90 SS:ESP 0068:d1631e38 oops CR2: 0000000000000000 oops oops Found OOPS (8): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: [] __mutex_lock_slowpath+0x9a/0x140 oops *pde = 3d9e2067 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/devices/platform/i8042/serio0/input/input3/event3/uevent oops Modules linked in: snd_hwdep snd_pcm i915(+) snd_seq_midi snd_rawmidi snd_seq_midi_event drm_kms_helper snd_seq lib80211_crypt_tkip snd_timer drm snd_seq_device uvcvideo dell_laptop wl(P) compal_laptop videodev dcdbas intel_agp snd psmouse v4l1_compat led_class soundcore serio_raw agpgart i2c_algo_bit snd_page_alloc lib80211 video coretemp output lp parport btrfs zlib_deflate r8169 mii crc32c libcrc32c oops oops Pid: 315, comm: plymouthd Tainted: P 2.6.35-7-generic #12-Ubuntu CN0Y53/Inspiron 1011 oops EIP: 0060:[] EFLAGS: 00010246 CPU: 0 oops EIP is at __mutex_lock_slowpath+0x9a/0x140 oops EAX: 00000000 EBX: ef5a9a90 ECX: ef5a9a98 EDX: f6ab7ec0 oops ESI: ef5a9a94 EDI: ef5a9a90 EBP: f6ab7ed8 ESP: f6ab7eb4 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process plymouthd (pid: 315, ti=f6ab6000 task=f6ae3f70 task.ti=f6ab6000) oops Stack: oops f6ab7ec4 f6ae3f70 ef5a9a98 ef5a9a98 00000000 f6ab7ed8 ef5a9a90 f7109100 oops <0> ef5a9a90 f6ab7ee8 c05cb095 f7109100 f7109100 f6ab7efc f890fdc3 f7109100 oops <0> f7109160 ef5a9800 f6ab7f44 f8907337 00000001 f8917e25 f8917220 f8919590 oops Call Trace: oops [] ? mutex_lock+0x25/0x40 oops [] ? drm_fb_release+0x23/0x70 [drm] oops [] ? drm_release+0x3e7/0x4c0 [drm] oops [] ? __fput+0xdf/0x1f0 oops [] ? fput+0x1d/0x30 oops [] ? filp_close+0x4c/0x80 oops [] ? sys_close+0x75/0xc0 oops [] ? syscall_call+0x7/0xb oops Code: 83 79 18 63 7f b3 8d 76 00 8d 73 04 89 f0 e8 5e 11 00 00 8d 53 08 89 55 e4 8d 55 e8 8b 43 0c 89 53 0c 8b 4d e4 89 45 ec 89 4d e8 <89> 10 8b 45 e0 ba ff ff ff ff 89 45 f0 89 d0 87 03 83 f8 01 74 oops EIP: [] __mutex_lock_slowpath+0x9a/0x140 SS:ESP 0068:f6ab7eb4 oops CR2: 0000000000000000 oops oops Found OOPS (9): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: [] __mutex_lock_slowpath+0xd2/0x190 oops PGD 1b4837067 PUD 1b4836067 PMD 0 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/module/snd_hda_codec/initstate oops CPU 0 oops Modules linked in: snd_hda_codec_realtek snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm snd_seq_midi nouveau(+) snd_rawmidi snd_seq_midi_event snd_seq ttm snd_timer snd_seq_device drm_kms_helper ppdev parport_pc snd psmouse serio_raw drm i2c_algo_bit soundcore intel_agp snd_page_alloc lp parport hid floppy pata_jmicron ahci libahci r8169 mii oops oops Pid: 342, comm: plymouthd Not tainted 2.6.35-8-generic #13-Ubuntu P45 Neo3 (MS-7514)/MS-7514 oops RIP: 0010:[] [] __mutex_lock_slowpath+0xd2/0x190 oops RSP: 0018:ffff8801b87d9d98 EFLAGS: 00010246 oops RAX: 0000000000000000 RBX: ffff8801b4ab4418 RCX: 0000000000000006 oops RDX: ffff8801b87d9da8 RSI: 0000000000000000 RDI: ffff8801b4ab441c oops RBP: ffff8801b87d9df8 R08: 0000000000000156 R09: 000000000000e200 oops R10: fffffffffffffff0 R11: 0000000000000246 R12: ffff8801b49644a0 oops R13: ffff8801b4ab441c R14: 00000000ffffffff R15: ffff8801b4ab4420 oops FS: 00007f92f737b700(0000) GS:ffff880001e00000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 oops CR2: 0000000000000000 CR3: 00000001b58a8000 CR4: 00000000000406f0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process plymouthd (pid: 342, threadinfo ffff8801b87d8000, task ffff8801b49644a0) oops Stack: oops ffff880100000000 000000000000e200 ffff8801b4ab4420 0000000000000000 oops <0> 0000000000000000 ffffffffa00a7240 ffffffffa00a4f60 ffff8801b4ab4418 oops <0> ffff8801aab95840 ffff8801b4ab4418 ffff8801b4ab4320 ffff8801aab958e8 oops Call Trace: oops [] ? drm_gem_object_release_handle+0x0/0x40 [drm] oops [] ? drm_version+0x0/0xb0 [drm] oops [] mutex_lock+0x2b/0x50 oops [] drm_fb_release+0x2f/0xb0 [drm] oops [] drm_release+0x468/0x550 [drm] oops [] __fput+0xf5/0x210 oops [] fput+0x25/0x30 oops [] filp_close+0x5d/0x90 oops [] sys_close+0xb7/0x120 oops [] system_call_fastpath+0x16/0x1b oops Code: 00 4c 8d 6b 04 4c 8d 7b 08 41 be ff ff ff ff 4c 89 ef e8 22 14 00 00 48 8b 43 10 48 8d 55 b0 48 89 53 10 4c 89 7d b0 48 89 45 b8 <48> 89 10 44 89 f0 4c 89 65 c0 87 03 83 f8 01 75 24 eb 2c 0f 1f oops RIP [] __mutex_lock_slowpath+0xd2/0x190 oops RSP oops CR2: 0000000000000000 oops oops Found OOPS (10): oops BUG: unable to handle kernel NULL pointer dereference at 0000000000000010 oops IP: [] fb_release+0x30/0x70 oops PGD 1b8a7b067 PUD 1b8a77067 PMD 0 oops Oops: 0000 [#1] SMP oops last sysfs file: /sys/devices/virtual/block/dm-3/uevent oops CPU 1 oops Modules linked in: deflate zlib_deflate ctr twofish twofish_common camellia serpent blowfish cast5 des_generic cryptd aes_x86_64 aes_generic xcbc rmd160 sha512_generic sha256_generic sha1_generic crypto_null af_key snd_hda_codec_atihdmi snd_hda_codec_analog tpm_infineon snd_hda_intel snd_usb_audio snd_hda_codec snd_pcm snd_seq_midi snd_hwdep snd_seq_midi_event radeon snd_seq snd_timer snd_usbmidi_lib snd_rawmidi tpm_tis i7core_edac btusb asus_atk0110 bluetooth ttm drm_kms_helper uvcvideo snd_seq_device videodev v4l1_compat v4l2_compat_ioctl32 joydev snd edac_core psmouse tpm tpm_bios drm serio_raw soundcore i2c_algo_bit snd_page_alloc lp parport hid_logitech ff_memless usbhid hid firewire_ohci firewire_core ahci libahci crc_itu_t sky2 oops oops Pid: 451, comm: plymouthd Not tainted 2.6.35-11-generic #16-Ubuntu P6T DELUXE V2/System Product Name oops RIP: 0010:[] [] fb_release+0x30/0x70 oops RSP: 0018:ffff8801b6a4bea8 EFLAGS: 00010286 oops RAX: ffff8801b6a4a000 RBX: ffff8801b7124000 RCX: 0000000000000003 oops RDX: 0000000000000000 RSI: ffff8801a56206c0 RDI: ffff8801b7124008 oops RBP: ffff8801b6a4beb8 R08: 0000000000000000 R09: 0000000000000000 oops R10: 00007fff8969bed0 R11: 0000000000000246 R12: ffff8801b7124008 oops R13: ffff8801b88235f0 R14: ffff8801b640bc80 R15: ffff8801b55e8300 oops FS: 00007f890030c700(0000) GS:ffff880001e20000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 oops CR2: 0000000000000010 CR3: 00000001b53b7000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process plymouthd (pid: 451, threadinfo ffff8801b6a4a000, task ffff8801b3c596e0) oops Stack: oops ffff8801a56206c0 0000000000000008 ffff8801b6a4bf08 ffffffff81152df5 oops <0> ffff8801b88235f0 ffff8801b640bc80 00007f89001de000 ffff8801a56206c0 oops <0> ffff8801b8cd9e40 0000000000000000 000000000000000b 0000000002082db0 oops Call Trace: oops [] __fput+0xf5/0x210 oops [] fput+0x25/0x30 oops [] filp_close+0x5d/0x90 oops [] sys_close+0xb7/0x120 oops [] system_call_fastpath+0x16/0x1b oops Code: 83 ec 10 48 89 1c 24 4c 89 64 24 08 0f 1f 44 00 00 48 8b 9e a0 00 00 00 4c 8d 63 08 4c 89 e7 e8 67 1b 29 00 48 8b 93 c0 03 00 00 <48> 8b 42 10 48 85 c0 74 11 be 01 00 00 00 48 89 df ff d0 48 8b oops RIP [] fb_release+0x30/0x70 oops RSP oops CR2: 0000000000000010 oops oops Found OOPS (11): oops BUG: unable to handle kernel NULL pointer dereference at 0000030c oops IP: [] fb_mmap+0x34/0x170 oops *pde = 3f809067 oops Oops: 0000 [#1] SMP oops last sysfs file: /sys/devices/pci0000:00/0000:00:0a.0/device oops Modules linked in: snd_emu10k1(+) arc4 snd_ac97_codec ac97_bus snd_pcm snd_page_alloc snd_util_mem snd_hwdep nouveau(+) snd_seq_midi rt2500pci rt2x00pci snd_rawmidi rt2x00lib led_class snd_seq_midi_event mac80211 snd_seq ttm snd_timer drm_kms_helper snd_seq_device drm i2c_viapro via_ircc usblp cfg80211 i2c_algo_bit irda psmouse serio_raw emu10k1_gp snd lp via_agp joydev gameport eeprom_93cx6 parport agpgart shpchp crc_ccitt soundcore usbhid hid pata_via floppy oops oops Pid: 278, comm: plymouthd Not tainted 2.6.35-11-generic #16-Ubuntu VT8367-8235/VT8367-8235 oops EIP: 0060:[] EFLAGS: 00010293 CPU: 0 oops EIP is at fb_mmap+0x34/0x170 oops EAX: 00000000 EBX: f397f898 ECX: c05fdd60 EDX: 00000000 oops ESI: 00000000 EDI: b745f000 EBP: f6a73efc ESP: f6a73ed8 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process plymouthd (pid: 278, ti=f6a72000 task=f68b9960 task.ti=f6a72000) oops Stack: oops 00000202 c01f8068 f6980960 0000012c 000080d0 00000058 f6892648 f689264c oops <0> b745f000 f6a73f50 c01f810c b758b000 000000fa 00000000 f48fc580 00000000 oops <0> 00000000 00000000 f6892630 00000000 f73fc060 f48fc580 ffffffea 0000012c oops Call Trace: oops [] ? mmap_region+0x298/0x490 oops [] ? mmap_region+0x33c/0x490 oops [] ? do_mmap_pgoff+0x25c/0x300 oops [] ? sys_mmap_pgoff+0x193/0x1c0 oops [] ? syscall_call+0x7/0xb oops Code: 89 75 f8 89 7d fc 0f 1f 44 00 00 8b 40 0c 89 d3 8b 52 44 8b 40 10 8b 40 34 25 ff ff 0f 00 81 fa ff ff 0f 00 8b 34 85 40 67 82 c0 <8b> 8e 0c 03 00 00 76 14 bf ea ff ff ff 89 f8 8b 5d f4 8b 75 f8 oops EIP: [] fb_mmap+0x34/0x170 SS:ESP 0068:f6a73ed8 oops CR2: 000000000000030c oops oops Found OOPS (12): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: [] __mutex_lock_slowpath+0x9a/0x140 oops *pde = 3df7b067 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/module/snd_rawmidi/initstate oops Modules linked in: i915(+) drm_kms_helper snd_seq_midi_event snd_seq snd_rawmidi snd_timer drm snd_seq_device gspca_sonixj gspca_main snd videodev v4l1_compat dcdbas intel_agp lp soundcore snd_page_alloc i2c_algo_bit video output psmouse serio_raw parport agpgart usbhid hid e100 mii oops oops Pid: 219, comm: plymouthd Not tainted 2.6.35-11-generic #16-Ubuntu 0JC474/Dell DV051 oops EIP: 0060:[] EFLAGS: 00010246 CPU: 0 oops EIP is at __mutex_lock_slowpath+0x9a/0x140 oops EAX: 00000000 EBX: f5288e90 ECX: f5288e98 EDX: f5b13ec0 oops ESI: f5288e94 EDI: f5288e90 EBP: f5b13ed8 ESP: f5b13eb4 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process plymouthd (pid: 219, ti=f5b12000 task=f69bcc20 task.ti=f5b12000) oops Stack: oops f849c400 f69bcc20 f5288e98 f5288e98 00000000 f5b13ed8 f5288e90 f5381f80 oops <0> f5288e90 f5b13ee8 c05c8295 f5381f80 f5381f80 f5b13efc f848fd53 f5381f80 oops <0> f5381fe0 f5288c00 f5b13f44 f8487327 00000001 f8497d85 f8497180 f84994f0 oops Call Trace: oops [] ? mutex_lock+0x25/0x40 oops [] ? drm_fb_release+0x23/0x70 [drm] oops [] ? drm_release+0x3e7/0x4c0 [drm] oops [] ? __fput+0xe4/0x1e0 oops [] ? fput+0x1d/0x30 oops [] ? filp_close+0x4c/0x80 oops [] ? sys_close+0x75/0xc0 oops [] ? syscall_call+0x7/0xb oops Code: 83 79 18 63 7f b3 8d 76 00 8d 73 04 89 f0 e8 3e 11 00 00 8d 53 08 89 55 e4 8d 55 e8 8b 43 0c 89 53 0c 8b 4d e4 89 45 ec 89 4d e8 <89> 10 8b 45 e0 ba ff ff ff ff 89 45 f0 89 d0 87 03 83 f8 01 74 oops EIP: [] __mutex_lock_slowpath+0x9a/0x140 SS:ESP 0068:f5b13eb4 oops CR2: 0000000000000000 oops oops Found OOPS (13): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: [] kfifo_alloc+0x2e/0xb0 oops PGD 13a27b067 PUD 1375c6067 PMD 0 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/module/snd/initstate oops CPU 1 oops Modules linked in: lirc_ene0100(+) lirc_dev v4l1_compat v4l2_compat_ioctl32 lp(+) led_class serio_raw intel_agp video output parport snd soundcore snd_page_alloc usb_storage ahci ssb r8169 mii libahci oops oops Pid: 687, comm: modprobe Not tainted 2.6.35-12-generic #17-Ubuntu 3602/HP Pavilion dv5 Notebook PC oops RIP: 0010:[] [] kfifo_alloc+0x2e/0xb0 oops RSP: 0018:ffff88013825fd08 EFLAGS: 00010286 oops RAX: ffff88013fc0f000 RBX: 0000000000000000 RCX: ffffffff8107f129 oops RDX: 0000000000000000 RSI: 00000000000000d0 RDI: 0000000000000246 oops RBP: ffff88013825fd18 R08: 0000000000000000 R09: 0000000000000246 oops R10: 0000000000000030 R11: 0000000000000000 R12: 0000000000001000 oops R13: ffff880139be1400 R14: ffff880136d58640 R15: 00000000fffffff4 oops FS: 00007f450591a700(0000) GS:ffff880001e80000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 oops CR2: 0000000000000000 CR3: 000000013a270000 CR4: 00000000000406e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process modprobe (pid: 687, threadinfo ffff88013825e000, task ffff8801383ddb80) oops Stack: oops ffff8801379ee840 ffff8801379f14e0 ffff88013825fd58 ffffffffa009ee4f oops <0> ffff88013825fd38 ffffffffa009f060 ffff880139be1400 ffffffffa009f580 oops <0> ffffffffa009f540 00000000fffffff4 ffff88013825fd98 ffffffff81341325 oops Call Trace: oops [] ene_probe+0x17f/0x350 [lirc_ene0100] oops [] pnp_device_probe+0x95/0x100 oops [] ? driver_sysfs_add+0x62/0x90 oops [] really_probe+0x68/0x190 oops [] driver_probe_device+0x45/0x70 oops [] __driver_attach+0x9b/0xa0 oops [] ? __driver_attach+0x0/0xa0 oops [] bus_for_each_dev+0x68/0x90 oops [] driver_attach+0x1e/0x20 oops [] bus_add_driver+0xde/0x280 oops [] driver_register+0x80/0x150 oops [] ? ene_init+0x0/0x3e [lirc_ene0100] oops [] pnp_register_driver+0x21/0x30 oops [] ene_init+0x3c/0x3e [lirc_ene0100] oops [] do_one_initcall+0x3c/0x1a0 oops [] sys_init_module+0xbb/0x200 oops [] system_call_fastpath+0x16/0x1b oops Code: e5 41 54 53 0f 1f 44 00 00 48 89 fb 89 f7 41 89 f4 48 85 ff 48 8d 47 ff 74 33 48 85 f8 75 2e 89 d6 e8 67 33 0c 00 48 85 c0 74 52 <48> 89 03 44 89 63 08 31 c0 c7 43 10 00 00 00 00 c7 43 0c 00 00 oops RIP [] kfifo_alloc+0x2e/0xb0 oops RSP oops CR2: 0000000000000000 oops oops Found OOPS (14): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: [] __mutex_lock_slowpath+0xbb/0x170 oops PGD 609c90067 PUD 6097fd067 PMD 0 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/module/fbcon/initstate oops CPU 1 oops Modules linked in: fbcon(+) tileblit font bitblit softcursor vga16fb vgastate nouveau(+) ttm drm_kms_helper mce_xeon75xx(-) drm i2c_algo_bit snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq ppdev snd_timer snd_seq_device parport_pc snd dell_wmi dcdbas soundcore snd_page_alloc shpchp lp parport usbhid hid ohci1394 ieee1394 ahci tg3 oops Pid: 405, comm: plymouthd Not tainted 2.6.32-24-generic #38-Ubuntu Precision WorkStation T7500 oops RIP: 0010:[] [] __mutex_lock_slowpath+0xbb/0x170 oops RSP: 0018:ffff8806082ddd98 EFLAGS: 00010246 oops RAX: 0000000000000000 RBX: ffff880609d23c08 RCX: 0000000000000006 oops RDX: ffff8806082ddda8 RSI: ffffffffa01b3d10 RDI: ffff880609d23c0c oops RBP: ffff8806082dddf8 R08: 0000000000000195 R09: 000000000000e200 oops R10: fffffffffffffff0 R11: 0000000000000246 R12: ffff8806089e44d0 oops R13: ffff880609d23c0c R14: ffffffffffffffff R15: ffff880609d23c10 oops FS: 00007f4dd6e70700(0000) GS:ffff88003e220000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 oops CR2: 0000000000000000 CR3: 00000006097d6000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process plymouthd (pid: 405, threadinfo ffff8806082dc000, task ffff8806089e44d0) oops Stack: oops ffff880600000001 ffff8806082ddfd8 ffff880609d23c10 0000000000000000 oops <0> 0000000000000000 ffffffffa01b3d10 ffff8806082dddd8 ffff880609d23c08 oops <0> ffff8806018bbe00 ffff880609d23c08 ffff880609d23b10 ffff8806018bbea8 oops Call Trace: oops [] ? drm_gem_object_release_handle+0x0/0x40 [drm] oops [] mutex_lock+0x2b/0x50 oops [] drm_fb_release+0x2f/0xd0 [drm] oops [] drm_release+0x448/0x510 [drm] oops [] __fput+0xf5/0x210 oops [] fput+0x25/0x30 oops [] filp_close+0x5d/0x90 oops [] sys_close+0xb7/0x120 oops [] system_call_fastpath+0x16/0x1b oops Code: 4c 8d 6b 04 4c 8d 7b 08 49 c7 c6 ff ff ff ff 4c 89 ef e8 29 15 00 00 48 8b 43 10 48 8d 55 b0 48 89 53 10 4c 89 7d b0 48 89 45 b8 <48> 89 10 4c 89 f0 4c 89 65 c0 87 03 83 f8 01 75 23 eb 2b 66 90 oops RIP [] __mutex_lock_slowpath+0xbb/0x170 oops RSP oops CR2: 0000000000000000 oops oops Found OOPS (15): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: [] kfifo_alloc+0x26/0x90 oops *pde = 00000000 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/devices/pci0000:00/0000:00:14.5/usb7/7-2/7-2:1.1/uevent oops Modules linked in: k10temp lirc_ene0100(+) btusb agpgart i2c_piix4 joydev i2c_algo_bit videodev v4l1_compat wacom video psmouse bluetooth lirc_dev shpchp serio_raw output led_class lp(+) parport hp_wmi usbhid hid usb_storage ahci pata_atiixp ssb libahci r8169 mii oops oops Pid: 637, comm: modprobe Not tainted 2.6.35-15-generic #21-Ubuntu 30F1/HP Pavilion tx2500 Notebook PC oops EIP: 0060:[] EFLAGS: 00010286 CPU: 1 oops EIP is at kfifo_alloc+0x26/0x90 oops EAX: d2079000 EBX: 00001000 ECX: c0166452 EDX: c0166452 oops ESI: 00000000 EDI: d27add60 EBP: d209de40 ESP: d209de38 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process modprobe (pid: 637, ti=d209c000 task=d21d7230 task.ti=d209c000) oops Stack: oops f6ad12a0 d26a1a00 d209de68 f803bdb7 00000020 000080d0 d209de68 f724de00 oops <0> fffffff4 f803bf90 f724de00 f803c3e0 d209de7c c03ca5fe f724de00 f803c400 oops <0> f803c400 d209dea0 c0402cc0 f724ded0 d209dea0 c0409f07 00000000 f724de00 oops Call Trace: oops [] ? ene_probe+0x157/0x30b [lirc_ene0100] oops cfg80211: Calling CRDA to update world regulatory domain oops b43-phy0: Broadcom 4312 WLAN found (core revision 15) oops [] ? pnp_device_probe+0x6e/0xd0 oops [] ? really_probe+0x50/0x150 oops [] ? pm_runtime_barrier+0x57/0xb0 oops [] ? driver_probe_device+0x3c/0x60 oops [] ? __driver_attach+0x81/0x90 oops [] ? bus_for_each_dev+0x53/0x80 oops Synaptics Touchpad, model: 1, fw: 6.3, id: 0x180b1, caps: 0xa04711/0xa00000/0x0 oops input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input9 oops [] ? driver_attach+0x1e/0x20 oops [] ? __driver_attach+0x0/0x90 oops [] ? bus_add_driver+0xd5/0x280 oops [] ? pnp_device_remove+0x0/0x40 oops [] ? driver_register+0x6a/0x130 oops [] ? tracepoint_module_notify+0x27/0x30 oops [] ? pnp_register_driver+0x1c/0x20 oops [] ? ene_init+0x38/0x3a [lirc_ene0100] oops [] ? __blocking_notifier_call_chain+0x54/0x70 oops [] ? do_one_initcall+0x32/0x1a0 oops [] ? ene_init+0x0/0x3a [lirc_ene0100] oops [] ? sys_init_module+0x9b/0x1e0 oops [] ? sys_close+0x75/0xc0 oops [] ? syscall_call+0x7/0xb oops Code: 90 8d 74 26 00 55 89 e5 56 53 0f 1f 44 00 00 89 d3 89 c6 85 db 89 ca 8d 43 ff 74 31 85 d8 75 25 89 d8 e8 4e 60 0a 00 85 c0 74 39 <89> 06 31 c0 89 5e 04 c7 46 0c 00 00 00 00 c7 46 08 00 00 00 00 oops EIP: [] kfifo_alloc+0x26/0x90 SS:ESP 0068:d209de38 oops CR2: 0000000000000000 oops oops Found OOPS (16): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: oops agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xc0000000 oops [] kfifo_alloc+0x26/0x90 oops *pde = 00000000 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/module/intel_agp/initstate oops Modules linked in: lirc_ene0100(+) i2c_algo_bit intel_agp lirc_dev video snd soundcore snd_page_alloc psmouse serio_raw lib80211 agpgart output lp parport usbhid hid usb_storage firewire_ohci ahci firewire_core sdhci_pci tg3 sdhci led_class crc_itu_t libahci oops oops Pid: 453, comm: modprobe Not tainted 2.6.35-17-generic #23-Ubuntu Nettiling/Aspire 5720Z oops EIP: 0060:[] EFLAGS: 00010286 CPU: 0 oops EIP is at kfifo_alloc+0x26/0x90 oops EAX: f5faa000 EBX: 00001000 ECX: c01665b2 EDX: c01665b2 oops ESI: 00000000 EDI: f5d09e40 EBP: f5cf1e40 ESP: f5cf1e38 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process modprobe (pid: 453, ti=f5cf0000 task=f68a3f70 task.ti=f5cf0000) oops Stack: oops f695ce40 f6a1d540 f5cf1e68 f806bdb7 00000020 000080d0 f5cf1e68 f7232200 oops <0> fffffff4 f806bf90 f7232200 f806c3e0 f5cf1e7c c03c737e f7232200 f806c400 oops <0> f806c400 f5cf1ea0 c03ffa30 f72322d0 f5cf1ea0 c0406c87 00000000 f7232200 oops Call Trace: oops [] ? ene_probe+0x157/0x30b [lirc_ene0100] oops [] ? pnp_device_probe+0x6e/0xd0 oops [] ? really_probe+0x50/0x150 oops [] ? pm_runtime_barrier+0x57/0xb0 oops [] ? driver_probe_device+0x3c/0x60 oops [] ? __driver_attach+0x81/0x90 oops [] ? bus_for_each_dev+0x53/0x80 oops [] ? driver_attach+0x1e/0x20 oops [] ? __driver_attach+0x0/0x90 oops [] ? bus_add_driver+0xd5/0x280 oops [] ? pnp_device_remove+0x0/0x40 oops [] ? driver_register+0x6a/0x130 oops [] ? tracepoint_module_notify+0x27/0x30 oops [] ? pnp_register_driver+0x1c/0x20 oops [] ? ene_init+0x38/0x3a [lirc_ene0100] oops [] ? __blocking_notifier_call_chain+0x54/0x70 oops [] ? do_one_initcall+0x32/0x1a0 oops [] ? ene_init+0x0/0x3a [lirc_ene0100] oops [] ? sys_init_module+0x9b/0x1e0 oops [] ? sys_close+0x75/0xc0 oops [] ? syscall_call+0x7/0xb oops Code: 90 8d 74 26 00 55 89 e5 56 53 0f 1f 44 00 00 89 d3 89 c6 85 db 89 ca 8d 43 ff 74 31 85 d8 75 25 89 d8 e8 7e 61 0a 00 85 c0 74 39 <89> 06 31 c0 89 5e 04 c7 46 0c 00 00 00 00 c7 46 08 00 00 00 00 oops EIP: [] kfifo_alloc+0x26/0x90 SS:ESP 0068:f5cf1e38 oops CR2: 0000000000000000 oops oops Found OOPS (17): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: [] kfifo_alloc+0x2e/0xb0 oops PGD 13ad1b067 PUD 13ad1a067 PMD 0 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:26/PNP0303:00/uevent oops CPU 1 oops Modules linked in: lirc_ene0100(+) input_polldev(+) lirc_dev parport(+) ahci r8169 mii sdhci_pci sdhci led_class pata_atiixp libahci oops oops Pid: 407, comm: modprobe Not tainted 2.6.35-17-generic #23-Ubuntu 30FC/HP Pavilion dv7 Notebook PC oops RIP: 0010:[] [] kfifo_alloc+0x2e/0xb0 oops RSP: 0018:ffff88013b475d08 EFLAGS: 00010286 oops RAX: ffff8801384be000 RBX: 0000000000000000 RCX: ffffffff8107f199 oops RDX: ffff8801384ba000 RSI: 00000000000000d0 RDI: 0000000000000246 oops RBP: ffff88013b475d18 R08: 0000000000000000 R09: 0000000000000246 oops R10: 0000000000000030 R11: 0000000000000000 R12: 0000000000001000 oops R13: ffff8801394bc800 R14: ffff88013b64c280 R15: 00000000fffffff4 oops FS: 00007f5fb9cd0700(0000) GS:ffff880001e80000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b oops CR2: 0000000000000000 CR3: 000000013ad17000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process modprobe (pid: 407, threadinfo ffff88013b474000, task ffff88013b478000) oops Stack: oops ffff88013a65cb40 ffff88013b61b7e0 ffff88013b475d58 ffffffffa005ee4f oops [Firmware Bug]: ACPI: ACPI brightness control misses _BQC function oops acpi device:03: registered as cooling_device2 oops input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:01/LNXVIDEO:00/input/input4 oops ACPI: Video Device [VGA] (multi-head: yes rom: no post: no) oops lis3lv02d: hardware type DV7 found. oops lis3lv02d: 8 bits sensor found oops shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 oops oops <0> ffff88013b475d38 ffffffffa005f060 ffff8801394bc800 ffffffffa005f580 oops <0> ffffffffa005f540 00000000fffffff4 ffff88013b475d98 ffffffff8133d7d5 oops Call Trace: oops [] ene_probe+0x17f/0x350 [lirc_ene0100] oops [] pnp_device_probe+0x95/0x100 oops [] ? driver_sysfs_add+0x62/0x90 oops [] really_probe+0x68/0x190 oops [] driver_probe_device+0x45/0x70 oops [] __driver_attach+0x9b/0xa0 oops [] ? __driver_attach+0x0/0xa0 oops [] bus_for_each_dev+0x68/0x90 oops [] driver_attach+0x1e/0x20 oops [] bus_add_driver+0xde/0x280 oops [] driver_register+0x80/0x150 oops [] ? ene_init+0x0/0x3e [lirc_ene0100] oops [] pnp_register_driver+0x21/0x30 oops [] ene_init+0x3c/0x3e [lirc_ene0100] oops [] do_one_initcall+0x3c/0x1a0 oops [] sys_init_module+0xbb/0x200 oops [] system_call_fastpath+0x16/0x1b oops Code: e5 41 54 53 0f 1f 44 00 00 48 89 fb 89 f7 41 89 f4 48 85 ff 48 8d 47 ff 74 33 48 85 f8 75 2e 89 d6 e8 07 35 0c 00 48 85 c0 74 52 <48> 89 03 44 89 63 08 31 c0 c7 43 10 00 00 00 00 c7 43 0c 00 00 oops RIP [] kfifo_alloc+0x2e/0xb0 oops RSP oops CR2: 0000000000000000 oops oops Found OOPS (18): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: [] kfifo_alloc+0x2e/0xb0 oops PGD 1375cb067 PUD 1375ce067 PMD 0 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/devices/virtual/vc/vcs6/uevent oops CPU 1 oops Modules linked in: lirc_ene0100(+) v4l2_compat_ioctl32(+) hp_wmi(+) snd(+) lirc_dev wl(P+) bluetooth(+) drm(+) video(+) psmouse output serio_raw k10temp edac_core soundcore i2c_algo_bit lib80211 i2c_piix4 snd_page_alloc edac_mce_amd shpchp lp parport usb_storage r8169 mii ahci libahci pata_atiixp oops oops Pid: 529, comm: modprobe Tainted: P 2.6.35-17-generic #23-Ubuntu 3045/HP TouchSmart tx2 Notebook PC oops RIP: 0010:[] [] kfifo_alloc+0x2e/0xb0 oops RSP: 0018:ffff880138739d08 EFLAGS: 00010286 oops RAX: ffff880137500000 RBX: 0000000000000000 RCX: ffffffff8107f199 oops RDX: ffff880137504000 RSI: 00000000000000d0 RDI: 0000000000000246 oops RBP: ffff880138739d18 R08: 0000000000000000 R09: 0000000000000246 oops R10: 0000000000000030 R11: 0000000000000000 R12: 0000000000001000 oops R13: ffff88013b33c400 R14: ffff8801386a7280 R15: 00000000fffffff4 oops FS: 00007f3989a31700(0000) GS:ffff880001e80000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 oops CR2: 0000000000000000 CR3: 0000000139428000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process modprobe (pid: 529, threadinfo ffff880138738000, task ffff88013b6cc4a0) oops Stack: oops ffff880137c3fb40 ffff88013b49dba0 ffff880138739d58 ffffffffa010ee4f oops <0> ffff880138739d38 ffffffffa010f060 ffff88013b33c400 ffffffffa010f580 oops <0> ffffffffa010f540 00000000fffffff4 ffff880138739d98 ffffffff8133d7d5 oops Call Trace: oops [] ene_probe+0x17f/0x350 [lirc_ene0100] oops [] pnp_device_probe+0x95/0x100 oops [] ? driver_sysfs_add+0x62/0x90 oops [] really_probe+0x68/0x190 oops [] driver_probe_device+0x45/0x70 oops [] __driver_attach+0x9b/0xa0 oops [] ? __driver_attach+0x0/0xa0 oops [] bus_for_each_dev+0x68/0x90 oops [] driver_attach+0x1e/0x20 oops [] bus_add_driver+0xde/0x280 oops [] driver_register+0x80/0x150 oops [] ? ene_init+0x0/0x3e [lirc_ene0100] oops [] pnp_register_driver+0x21/0x30 oops [] ene_init+0x3c/0x3e [lirc_ene0100] oops [] do_one_initcall+0x3c/0x1a0 oops [] sys_init_module+0xbb/0x200 oops [] system_call_fastpath+0x16/0x1b oops Code: e5 41 54 53 0f 1f 44 00 00 48 89 fb 89 f7 41 89 f4 48 85 ff 48 8d 47 ff 74 33 48 85 f8 75 2e 89 d6 e8 07 35 0c 00 48 85 c0 74 52 <48> 89 03 44 89 63 08 31 c0 c7 43 10 00 00 00 00 c7 43 0c 00 00 oops RIP [] kfifo_alloc+0x2e/0xb0 oops RSP oops CR2: 0000000000000000 oops oops Found OOPS (19): oops kernel BUG at /build/buildd/linux-2.6.35/drivers/md/dm.c:2190! oops invalid opcode: 0000 [#1] SMP oops last sysfs file: /sys/devices/virtual/bdi/252:0/uevent oops CPU 2 oops Modules linked in: dm_raid45 xor usbhid hid sky2 pata_jmicron ahci libahci oops oops Pid: 581, comm: dmraid Tainted: G M 2.6.35-19-generic #28-Ubuntu EVGA Classified SR-2/To Be Filled By O.E.M. oops RIP: 0010:[] [] dm_put+0x112/0x120 oops RSP: 0018:ffff880236e79be8 EFLAGS: 00010202 oops RAX: ffff880236f08000 RBX: ffff8802374c5800 RCX: 02000000000040c1 oops RDX: 000000000000001a RSI: ffffea0007c18a00 RDI: ffff8802374c5800 oops RBP: ffff880236e79c08 R08: 0000000000000067 R09: 0000000000000000 oops R10: ffff8802383a3200 R11: 0000000000000000 R12: ffff880237e09000 oops R13: ffff8802374c5800 R14: ffffc9001280e040 R15: 0000000000000020 oops FS: 00007f258130c7a0(0000) GS:ffff880001e40000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b oops CR2: 00007ff6c84d3000 CR3: 0000000237e8b000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process dmraid (pid: 581, threadinfo ffff880236e78000, task ffff880236d58000) oops Stack: oops ffffc9001280e040 0000000000000003 ffff880237e09000 ffff8802374c5800 oops <0> ffff880236e79d38 ffffffffa008edd6 ffff880237d2c600 00000001000000d2 oops <0> 0000000000000000 ffff880236e79ca0 00000000ffffffff 0000000000000001 oops Call Trace: oops [] raid_ctr+0x5f6/0xa50 [dm_raid45] oops [] ? dm_split_args+0x75/0x140 oops [] dm_table_add_target+0xff/0x240 oops [] populate_table+0x85/0x140 oops [] table_load+0x8f/0x1f0 oops [] ? table_load+0x0/0x1f0 oops [] ctl_ioctl+0x1a5/0x250 oops [] dm_ctl_ioctl+0x13/0x20 oops [] vfs_ioctl+0x3d/0xd0 oops [] do_vfs_ioctl+0x81/0x340 oops [] sys_ioctl+0x81/0xa0 oops [] ? do_device_not_available+0xe/0x10 oops [] system_call_fastpath+0x16/0x1b oops Code: 00 00 48 89 df e8 2f e3 ff ff e9 44 ff ff ff eb 08 90 90 90 90 90 90 90 90 4c 89 e7 e8 98 15 00 00 4c 89 e7 e8 b0 15 00 00 eb 85 <0f> 0b eb fe eb 08 90 90 90 90 90 90 90 90 55 48 89 e5 0f 1f 44 oops RIP [] dm_put+0x112/0x120 oops RSP oops oops Found WARNING (1): oops WARNING: at /build/buildd/linux-2.6.35/lib/kobject.c:595 kobject_put+0x50/0x60() oops Hardware name: To Be Filled By O.E.M. oops kobject: '(null)' (ffff8802374c5998): is not initialized, yet kobject_put() is being called. oops Modules linked in: ip6table_filter ip6_tables nf_nat_irc nf_conntrack_irc snd_hda_intel(+) nf_nat_ftp nf_nat snd_hda_codec snd_ctxfi nf_conntrack_ipv4 nf_defrag_ipv4 nf_conntrack_ftp nf_conntrack snd_hwdep snd_pcm snd_seq_midi snd_rawmidi iptable_filter snd_seq_midi_event ip_tables snd_seq snd_timer nouveau snd_seq_device ttm drm_kms_helper snd drm x_tables soundcore i2c_algo_bit snd_page_alloc joydev shpchp lp xhci_hcd psmouse i7core_edac serio_raw edac_core parport dm_raid45 xor usbhid hid sky2 pata_jmicron ahci libahci oops Pid: 1302, comm: dmraid Tainted: G M D 2.6.35-19-generic #28-Ubuntu oops Call Trace: oops [] warn_slowpath_common+0x7f/0xc0 oops [] warn_slowpath_fmt+0x46/0x50 oops [] kobject_put+0x50/0x60 oops [] dm_sysfs_exit+0x16/0x20 oops [] dm_put+0x9f/0x120 oops [] table_status+0x54/0xa0 oops [] ? table_status+0x0/0xa0 oops [] ctl_ioctl+0x1a5/0x250 oops [] ? do_anonymous_page+0x11b/0x330 oops [] dm_ctl_ioctl+0x13/0x20 oops [] vfs_ioctl+0x3d/0xd0 oops [] do_vfs_ioctl+0x81/0x340 oops [] ? do_page_fault+0x15e/0x350 oops [] sys_ioctl+0x81/0xa0 oops [] system_call_fastpath+0x16/0x1b oops oops Found OOPS (20): oops BUG: unable to handle kernel NULL pointer dereference at 0000000000000008 oops IP: [] bdput+0x9/0x20 oops PGD 2220c7067 PUD 2220c6067 PMD 0 oops Oops: 0000 [#2] SMP oops last sysfs file: /sys/devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sda/sda3/alignment_offset oops CPU 4 oops Modules linked in: ip6table_filter ip6_tables nf_nat_irc nf_conntrack_irc snd_hda_intel(+) nf_nat_ftp nf_nat snd_hda_codec snd_ctxfi nf_conntrack_ipv4 nf_defrag_ipv4 nf_conntrack_ftp nf_conntrack snd_hwdep snd_pcm snd_seq_midi snd_rawmidi iptable_filter snd_seq_midi_event ip_tables snd_seq snd_timer nouveau snd_seq_device ttm drm_kms_helper snd drm x_tables soundcore i2c_algo_bit snd_page_alloc joydev shpchp lp xhci_hcd psmouse i7core_edac serio_raw edac_core parport dm_raid45 xor usbhid hid sky2 pata_jmicron ahci libahci oops oops Pid: 1302, comm: dmraid Tainted: G M D W 2.6.35-19-generic #28-Ubuntu EVGA Classified SR-2/To Be Filled By O.E.M. oops RIP: 0010:[] [] bdput+0x9/0x20 oops RSP: 0018:ffff8803b5031d98 EFLAGS: 00010296 oops RAX: ffff8802374c5860 RBX: ffff8802374c5800 RCX: 000000000003ffff oops RDX: 0000000000000000 RSI: ffffffff812b8280 RDI: 0000000000000000 oops RBP: ffff8803b5031d98 R08: 0000000000015629 R09: 0000000000000000 oops R10: 0000000000000000 R11: 0000000000000002 R12: 00000000ffffffff oops R13: ffffc90013bd4000 R14: 0000000000004000 R15: 0000000000000000 oops FS: 00007f686410e7a0(0000) GS:ffff880245600000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 oops CR2: 0000000000000008 CR3: 0000000236c87000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process dmraid (pid: 1302, threadinfo ffff8803b5030000, task ffff8803b44744a0) oops Stack: oops ffff8803b5031db8 ffffffff81453ddb ffff8802374c5800 0000000000000000 oops <0> ffff8803b5031de8 ffffffff81455a81 0000000000000000 ffff8802374c5800 oops <0> 0000000000000000 ffffc90013bd4000 ffff8803b5031e28 ffffffff8145a864 oops Call Trace: oops [] free_dev+0x2b/0xe0 oops [] dm_put+0xf1/0x120 oops [] table_status+0x54/0xa0 oops [] ? table_status+0x0/0xa0 oops [] ctl_ioctl+0x1a5/0x250 oops [] ? do_anonymous_page+0x11b/0x330 oops [] dm_ctl_ioctl+0x13/0x20 oops [] vfs_ioctl+0x3d/0xd0 oops [] do_vfs_ioctl+0x81/0x340 oops [] ? do_page_fault+0x15e/0x350 oops [] sys_ioctl+0x81/0xa0 oops [] system_call_fastpath+0x16/0x1b oops Code: c0 8f a2 81 e8 19 3c eb ff 66 90 48 85 db 74 09 48 8b 7b 08 e8 c9 66 fe ff 5b 41 5c c9 c3 eb 02 90 90 55 48 89 e5 0f 1f 44 00 00 <48> 8b 7f 08 e8 ae 66 fe ff c9 c3 eb 0a 90 90 90 90 90 90 90 90 oops RIP [] bdput+0x9/0x20 oops RSP oops CR2: 0000000000000008 oops oops Found OOPS (21): oops kernel BUG at /build/buildd/linux-2.6.35/drivers/md/dm.c:2190! oops invalid opcode: 0000 [#3] SMP oops last sysfs file: /sys/devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sda/sda3/alignment_offset oops CPU 12 oops Modules linked in: ip6table_filter ip6_tables nf_nat_irc nf_conntrack_irc snd_hda_intel(+) nf_nat_ftp nf_nat snd_hda_codec snd_ctxfi nf_conntrack_ipv4 nf_defrag_ipv4 nf_conntrack_ftp nf_conntrack snd_hwdep snd_pcm snd_seq_midi snd_rawmidi iptable_filter snd_seq_midi_event ip_tables snd_seq snd_timer nouveau snd_seq_device ttm drm_kms_helper snd drm x_tables soundcore i2c_algo_bit snd_page_alloc joydev shpchp lp xhci_hcd psmouse i7core_edac serio_raw edac_core parport dm_raid45 xor usbhid hid sky2 pata_jmicron ahci libahci oops oops Pid: 1303, comm: dmraid Tainted: G M D W 2.6.35-19-generic #28-Ubuntu EVGA Classified SR-2/To Be Filled By O.E.M. oops RIP: 0010:[] [] dm_put+0x112/0x120 oops RSP: 0018:ffff8803b2217dc8 EFLAGS: 00010202 oops RAX: 0000000000000000 RBX: ffff8802374c5800 RCX: 00000000000000ff oops RDX: 0000000000000286 RSI: 0000000000000286 RDI: ffff8802374c5800 oops RBP: ffff8803b2217de8 R08: ffff8803b566cac0 R09: ffff8803b2217bb4 oops R10: 0000000000000001 R11: 0000000000000000 R12: 0000000000000000 oops R13: ffffc90013bda000 R14: 0000000000004000 R15: 0000000000000000 oops FS: 00007f583ee767a0(0000) GS:ffff880245680000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 oops CR2: 00007fffe736bff8 CR3: 00000003b4492000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process dmraid (pid: 1303, threadinfo ffff8803b2216000, task ffff8803b611adc0) oops Stack: oops 0000000000000000 ffff8802374c5800 0000000000000000 ffffc90013bda000 oops <0> ffff8803b2217e28 ffffffff8145a864 ffff8803b2217e00 ffff8803b611adc0 oops <0> 0000000000ed0620 ffffffff8145a810 000000000000000c 0000000000000000 oops Call Trace: oops [] table_status+0x54/0xa0 oops [] ? table_status+0x0/0xa0 oops [] ctl_ioctl+0x1a5/0x250 oops [] ? do_anonymous_page+0x11b/0x330 oops [] dm_ctl_ioctl+0x13/0x20 oops [] vfs_ioctl+0x3d/0xd0 oops [] do_vfs_ioctl+0x81/0x340 oops [] ? do_page_fault+0x15e/0x350 oops [] sys_ioctl+0x81/0xa0 oops [] system_call_fastpath+0x16/0x1b oops Code: 00 00 48 89 df e8 2f e3 ff ff e9 44 ff ff ff eb 08 90 90 90 90 90 90 90 90 4c 89 e7 e8 98 15 00 00 4c 89 e7 e8 b0 15 00 00 eb 85 <0f> 0b eb fe eb 08 90 90 90 90 90 90 90 90 55 48 89 e5 0f 1f 44 oops RIP [] dm_put+0x112/0x120 oops RSP oops oops Found OOPS (22): oops kernel BUG at /build/buildd/linux-2.6.35/drivers/md/dm.c:2190! oops invalid opcode: 0000 [#4] SMP oops last sysfs file: /sys/devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sda/sda3/alignment_offset oops CPU 12 oops Modules linked in: ip6table_filter ip6_tables nf_nat_irc nf_conntrack_irc snd_hda_intel(+) nf_nat_ftp nf_nat snd_hda_codec snd_ctxfi nf_conntrack_ipv4 nf_defrag_ipv4 nf_conntrack_ftp nf_conntrack snd_hwdep snd_pcm snd_seq_midi snd_rawmidi iptable_filter snd_seq_midi_event ip_tables snd_seq snd_timer nouveau snd_seq_device ttm drm_kms_helper snd drm x_tables soundcore i2c_algo_bit snd_page_alloc joydev shpchp lp xhci_hcd psmouse i7core_edac serio_raw edac_core parport dm_raid45 xor usbhid hid sky2 pata_jmicron ahci libahci oops oops Pid: 1301, comm: dmraid Tainted: G M D W 2.6.35-19-generic #28-Ubuntu EVGA Classified SR-2/To Be Filled By O.E.M. oops RIP: 0010:[] [] dm_put+0x112/0x120 oops RSP: 0018:ffff880222b05dc8 EFLAGS: 00010202 oops RAX: 0000000000000000 RBX: ffff8802374c5800 RCX: 00000000000000ff oops RDX: 0000000000000286 RSI: 0000000000000286 RDI: ffff8802374c5800 oops RBP: ffff880222b05de8 R08: ffff8803b566cae0 R09: ffff880222b05bb4 oops R10: 0000000000000001 R11: 0000000000000000 R12: 0000000000000000 oops R13: ffffc90013be0000 R14: 0000000000004000 R15: 0000000000000000 oops FS: 00007fbbd52417a0(0000) GS:ffff880245680000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 oops CR2: 00007fffaeec7ed8 CR3: 00000003b2e62000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process dmraid (pid: 1301, threadinfo ffff880222b04000, task ffff8802382e0000) oops Stack: oops 0000000000000000 ffff8802374c5800 0000000000000000 ffffc90013be0000 oops <0> ffff880222b05e28 ffffffff8145a864 ffff880222b05e00 ffff8802382e0000 oops <0> 0000000001dfa620 ffffffff8145a810 000000000000000c 0000000000000000 oops Call Trace: oops [] table_status+0x54/0xa0 oops [] ? table_status+0x0/0xa0 oops [] ctl_ioctl+0x1a5/0x250 oops [] ? do_anonymous_page+0x11b/0x330 oops [] dm_ctl_ioctl+0x13/0x20 oops [] vfs_ioctl+0x3d/0xd0 oops [] do_vfs_ioctl+0x81/0x340 oops [] ? do_page_fault+0x15e/0x350 oops [] sys_ioctl+0x81/0xa0 oops [] system_call_fastpath+0x16/0x1b oops Code: 00 00 48 89 df e8 2f e3 ff ff e9 44 ff ff ff eb 08 90 90 90 90 90 90 90 90 4c 89 e7 e8 98 15 00 00 4c 89 e7 e8 b0 15 00 00 eb 85 <0f> 0b eb fe eb 08 90 90 90 90 90 90 90 90 55 48 89 e5 0f 1f 44 oops RIP [] dm_put+0x112/0x120 oops RSP oops oops Found OOPS (23): oops BUG: unable to handle kernel paging request at f8147540 oops IP: [] driver_register+0xfe/0x130 oops *pde = 3716d067 *pte = 00000000 oops Oops: 0000 [#1] SMP oops last sysfs file: /sys/devices/pci0000:00/0000:00:18.3/uevent oops Modules linked in: amd64_agp(+) squashfs aufs nls_iso8859_1 nls_cp437 vfat fat dm_raid45 xor btrfs zlib_deflate crc32c libcrc32c radeon ttm drm_kms_helper drm usb_storage forcedeth pata_amd sata_nv i2c_algo_bit agpgart oops oops Pid: 1879, comm: modprobe Not tainted 2.6.35-22-generic #33-Ubuntu 'K8N'/K8N oops EIP: 0060:[] EFLAGS: 00010282 CPU: 0 oops EIP is at driver_register+0xfe/0x130 oops EAX: f8147510 EBX: 00000000 ECX: f8006419 EDX: f681f780 oops ESI: f8006510 EDI: c036c8a0 EBP: f6899f34 ESP: f6899f18 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process modprobe (pid: 1879, ti=f6898000 task=f642bf70 task.ti=f6898000) oops Stack: oops 00000001 f8006780 00000000 c07d2ae0 f80064e0 f8006780 f8006510 f6899f48 oops <0> c036cba5 b78ba000 f8006780 00000000 f6899f54 f800902c 00000000 f6899f5c oops <0> f80090a8 f6899f88 c0101132 f8006780 c07d0f60 b78ba000 f8006780 08b41228 oops Call Trace: oops [] ? __pci_register_driver+0x45/0xb0 oops [] ? agp_amd64_init+0x2c/0xa0 [amd64_agp] oops [] ? agp_amd64_mod_init+0x8/0xa [amd64_agp] oops [] ? do_one_initcall+0x32/0x1a0 oops [] ? agp_amd64_mod_init+0x0/0xa [amd64_agp] oops [] ? sys_init_module+0x9b/0x1e0 oops [] ? sys_write+0x42/0x70 oops [] ? syscall_call+0x7/0xb oops Code: 89 f0 e8 86 ea ff ff 83 c4 10 89 f8 5b 5e 5f 5d c3 8b 06 c7 04 24 2c 6a 76 c0 89 44 24 04 e8 85 59 1c 00 8b 56 04 e9 56 ff ff ff <8b> 40 30 bf f0 ff ff ff e8 d5 11 f5 ff 8b 06 c7 04 24 6c 6a 76 oops EIP: [] driver_register+0xfe/0x130 SS:ESP 0068:f6899f18 oops CR2: 00000000f8147540 oops oops Found OOPS (24): oops BUG: unable to handle kernel paging request at ffffc900102b8000 oops IP: [] azx_create+0x36b/0x73d [snd_hda_intel] oops PGD 1d897067 PUD 1d898067 PMD 1693c067 PTE 800000fd00000173 oops Oops: 0009 [#1] SMP oops last sysfs file: /sys/devices/platform/i8042/serio1/input/input3/event3/uevent oops CPU 0 oops Modules linked in: snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq snd_timer snd_seq_device snd soundcore ppdev psmouse serio_raw parport_pc i2c_viapro edac_core lp snd_page_alloc parport k8temp edac_mce_amd shpchp 8139too 8139cp mii floppy pata_via sata_via oops oops Pid: 735, comm: work_for_cpu Not tainted 2.6.35-22-generic #34-Ubuntu 0A88h/HP dx2255 MT(RL028AV) oops RIP: 0010:[] [] azx_create+0x36b/0x73d [snd_hda_intel] oops RSP: 0018:ffff88001a7d7e20 EFLAGS: 00010282 oops RAX: ffffc900102b8000 RBX: ffff88001a7d7e80 RCX: 0000000000000000 oops RDX: 0000000000000000 RSI: 0000000000000286 RDI: 0000000000000286 oops RBP: ffff88001a7d7e70 R08: 0000000000000001 R09: 0000000000000040 oops R10: 0000000000000008 R11: 0000000000000003 R12: ffff88001cf02000 oops R13: ffff880016b0b000 R14: 0000000000000000 R15: ffff880016b0b400 oops FS: 00007fe9f4940700(0000) GS:ffff880001e00000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b oops CR2: ffffc900102b8000 CR3: 000000001c49c000 CR4: 00000000000006f0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process work_for_cpu (pid: 735, threadinfo ffff88001a7d6000, task ffff88001694c4a0) oops Stack: oops ffffffffa00b71e0 ffffffffa014cd78 ffffffff00000000 000000001a7d7e88 oops <0> 0000000000000000 ffff88001cf02000 ffffffffa014c520 ffff88001cf02090 oops <0> 0000000000000000 0000000000000000 ffff88001a7d7eb0 ffffffffa014b100 oops Call Trace: oops [] azx_probe+0xb8/0x284 [snd_hda_intel] oops [] ? do_work_for_cpu+0x0/0x30 oops [] local_pci_probe+0x17/0x20 oops [] do_work_for_cpu+0x18/0x30 oops [] kthread+0x96/0xa0 oops [] kernel_thread_helper+0x4/0x10 oops [] ? kthread+0x0/0xa0 oops [] ? kernel_thread_helper+0x0/0x10 oops Code: ef 31 f6 4c 89 ef 89 4d c0 e8 17 d5 ff ff 85 c0 0f 88 c3 03 00 00 4c 89 e7 e8 87 9d 18 e1 41 8b 7d 40 e8 1e 01 f8 e0 49 8b 45 38 <66> 44 8b 30 41 8b 45 14 8b 4d c0 8d 50 fd 83 fa 01 77 3f 31 d2 oops RIP [] azx_create+0x36b/0x73d [snd_hda_intel] oops RSP oops CR2: ffffc900102b8000 oops oops Found OOPS (25): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: [] __mutex_lock_slowpath+0x9a/0x140 oops *pde = df469067 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/devices/platform/radeon_cp.0/firmware/radeon_cp.0/loading oops Modules linked in: snd_seq_midi_event radeon(+) snd_seq sbp2 uvcvideo i82875p_edac snd_timer snd_seq_device ieee1394 sunrpc edac_core videodev ttm v4l1_compat drm_kms_helper snd drm i2c_algo_bit snd_page_alloc btusb soundcore intel_agp lp bluetooth agpgart parport shpchp serio_raw hid_logitech ff_memless usbhid hid usb_storage firewire_ohci e1000 firewire_core crc_itu_t oops oops Pid: 353, comm: plymouthd Not tainted 2.6.35-7-generic #11-Ubuntu Canterwood/ oops EIP: 0060:[] EFLAGS: 00010246 CPU: 0 oops EIP is at __mutex_lock_slowpath+0x9a/0x140 oops EAX: 00000000 EBX: f2796e90 ECX: f2796e98 EDX: f6a71ec0 oops ESI: f2796e94 EDI: f2796e90 EBP: f6a71ed8 ESP: f6a71eb4 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process plymouthd (pid: 353, ti=f6a70000 task=c106cc20 task.ti=f6a70000) oops Stack: oops f6a71ec4 c106cc20 f2796e98 f2796e98 00000000 f2796c00 f2796e90 f6b1fb00 oops <0> f2796e90 f6a71ee8 c05cb095 f6b1fb00 f6b1fb00 f6a71efc f87e7dc3 f6b1fb00 oops <0> f6b1fb60 f2796c00 f6a71f44 f87df337 00000001 f87efe25 f87ef220 f87f1590 oops Call Trace: oops [] ? mutex_lock+0x25/0x40 oops [] ? drm_fb_release+0x23/0x70 [drm] oops [] ? drm_release+0x3e7/0x4c0 [drm] oops [] ? __fput+0xdf/0x1f0 oops [] ? fput+0x1d/0x30 oops [] ? filp_close+0x4c/0x80 oops [] ? sys_close+0x75/0xc0 oops [] ? syscall_call+0x7/0xb oops Code: 83 79 18 63 7f b3 8d 76 00 8d 73 04 89 f0 e8 5e 11 00 00 8d 53 08 89 55 e4 8d 55 e8 8b 43 0c 89 53 0c 8b 4d e4 89 45 ec 89 4d e8 <89> 10 8b 45 e0 ba ff ff ff ff 89 45 f0 89 d0 87 03 83 f8 01 74 oops EIP: [] __mutex_lock_slowpath+0x9a/0x140 SS:ESP 0068:f6a71eb4 oops CR2: 0000000000000000 oops oops Found OOPS (26): oops BUG: unable to handle kernel NULL pointer dereference at 0000000000000008 oops IP: [] ips_detect_cpu+0x76/0x1d0 [intel_ips] oops PGD 130ef4067 PUD 130ef3067 PMD 0 oops Oops: 0000 [#1] SMP oops last sysfs file: /sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/input/input4/name oops CPU 1 oops Modules linked in: intel_ips(+) serio_raw snd_page_alloc squashfs aufs nls_cp437 isofs dm_raid45 xor btrfs zlib_deflate crc32c libcrc32c usb_storage usbhid hid i915 drm_kms_helper drm atl1c ahci intel_agp i2c_algo_bit video output libahci oops oops Pid: 1463, comm: modprobe Not tainted 2.6.35-22-generic #33-Ubuntu Base Board Product Name/Satellite L655 oops RIP: 0010:[] [] ips_detect_cpu+0x76/0x1d0 [intel_ips] oops RSP: 0018:ffff88012d92bc48 EFLAGS: 00010202 oops RAX: 0000000000c800c8 RBX: 0000000000000000 RCX: 0000000000c800c8 oops RDX: 0000000000000000 RSI: ffff88012d92bc64 RDI: 0000000000c800c8 oops RBP: ffff88012d92bc88 R08: 0000000000000000 R09: 0000000000000000 oops R10: 0000000000000000 R11: 0000000000000002 R12: 0000000000c800c8 oops R13: ffff8801303a90c0 R14: ffff880131703090 R15: 00000000fffffff4 oops FS: 00007ff77fdc8700(0000) GS:ffff880001e40000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b oops CR2: 0000000000000008 CR3: 000000012e690000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process modprobe (pid: 1463, threadinfo ffff88012d92a000, task ffff880130ee16e0) oops Stack: oops ffff88012d92bc88 ffffffff81142fa4 ffff88012d92bc78 0000000031703000 oops <0> ffff880131703000 ffff8801303a90c0 ffff880131703000 00000000fffffff4 oops <0> ffff88012d92bcd8 ffffffffa012dfb1 ffff88012d92bcb8 ffff8801321edb90 oops Call Trace: oops [] ? kmem_cache_alloc_notrace+0xb4/0xd0 oops [] ips_probe+0x71/0x710 [intel_ips] oops [] local_pci_probe+0x17/0x20 oops [] __pci_device_probe+0xe9/0xf0 oops [] ? kobject_get+0x1a/0x30 oops [] ? get_device+0x19/0x20 oops [] pci_device_probe+0x3a/0x60 oops [] really_probe+0x68/0x190 oops [] driver_probe_device+0x45/0x70 oops [] __driver_attach+0x9b/0xa0 oops [] ? __driver_attach+0x0/0xa0 oops [] bus_for_each_dev+0x68/0x90 oops [] driver_attach+0x1e/0x20 oops [] bus_add_driver+0xde/0x280 oops [] driver_register+0x80/0x150 oops [] ? notifier_call_chain+0x56/0x80 oops [] __pci_register_driver+0x56/0xd0 oops [] ? __blocking_notifier_call_chain+0x65/0x80 oops [] ? ips_init+0x0/0x20 [intel_ips] oops [] ips_init+0x1e/0x20 [intel_ips] oops [] do_one_initcall+0x3c/0x1a0 oops [] sys_init_module+0xbb/0x200 oops [] system_call_fastpath+0x16/0x1b oops Code: a0 48 c7 c7 88 ec ac 81 48 c7 c3 80 fa 12 a0 e8 c1 0c 19 e1 48 85 c0 74 44 bf ac 01 00 00 4c 89 e6 e8 3f 8e f0 e0 66 90 41 89 c4 <8b> 53 08 41 c1 e4 12 41 c1 ec 15 41 69 c4 e8 03 00 00 39 c2 0f oops RIP [] ips_detect_cpu+0x76/0x1d0 [intel_ips] oops RSP oops CR2: 0000000000000008 oops oops Found OOPS (27): oops BUG: unable to handle kernel NULL pointer dereference at 00000008 oops IP: [] ips_detect_cpu+0x62/0x180 [intel_ips] oops *pdpt = 0000000035926001 *pde = 0000000000000000 oops Oops: 0000 [#1] SMP oops last sysfs file: /sys/devices/platform/pcspkr/uevent oops Modules linked in: intel_ips(+) sony_laptop(+) video output lp parport usbhid hid firewire_ohci ahci sdhci_pci atl1c libahci firewire_core sdhci led_class crc_itu_t oops oops Pid: 569, comm: modprobe Not tainted 2.6.35-22-generic-pae #35-Ubuntu VAIO/VPCY21S1E oops EIP: 0060:[] EFLAGS: 00010286 CPU: 0 oops EIP is at ips_detect_cpu+0x62/0x180 [intel_ips] oops EAX: 00580058 EBX: 00000000 ECX: 00580058 EDX: 00000000 oops ESI: f5965e04 EDI: f60eac00 EBP: f5965e14 ESP: f5965de4 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process modprobe (pid: 569, ti=f5964000 task=f593b2c0 task.ti=f5964000) oops Stack: oops f88f6efc f88f6e9e f759db40 f5965e14 c02162f1 f5965e08 c05ee9c9 f88f5eef oops <0> 00000000 f60eac00 f75e9000 fffffff4 f5965e4c f88f5f2b c027b6cd f5965e4c oops <0> c027ac77 f5965e4c c027b07a f5965e38 f75e9000 f75e9060 c037614e f75e9000 oops Call Trace: oops [] ? kmem_cache_alloc_notrace+0x91/0xb0 oops [] ? mutex_lock+0x19/0x40 oops [] ? ips_probe+0x1f/0x6a0 [intel_ips] oops [] ? ips_probe+0x5b/0x6a0 [intel_ips] oops [] ? sysfs_add_one+0x1d/0x110 oops [] ? sysfs_new_dirent+0x67/0x100 oops [] ? sysfs_addrm_finish+0x1a/0xb0 oops [] ? pci_match_device+0xbe/0xd0 oops [] ? local_pci_probe+0x13/0x20 oops [] ? pci_device_probe+0x68/0x90 oops [] ? really_probe+0x50/0x150 oops [] ? pm_runtime_barrier+0x57/0xb0 oops [] ? driver_probe_device+0x3c/0x60 oops [] ? __driver_attach+0x81/0x90 oops [] ? bus_for_each_dev+0x53/0x80 oops [] ? driver_attach+0x1e/0x20 oops [] ? __driver_attach+0x0/0x90 oops [] ? bus_add_driver+0xd5/0x280 oops [] ? pci_device_remove+0x0/0x40 oops [] ? driver_register+0x6a/0x130 oops [] ? __pci_register_driver+0x45/0xb0 oops [] ? ips_init+0x17/0x19 [intel_ips] oops [] ? do_one_initcall+0x32/0x1a0 oops [] ? ips_init+0x0/0x19 [intel_ips] oops [] ? sys_init_module+0x9b/0x1e0 oops [] ? sys_write+0x42/0x70 oops [] ? sysenter_do_call+0x12/0x28 oops Code: d5 83 c7 90 ba f5 6d 8f f8 b8 8c 42 85 c0 e8 56 ea a6 c7 bb 80 74 8f f8 85 c0 74 35 b8 ac 01 00 00 89 f2 e8 21 d5 83 c7 90 89 c1 <8b> 53 08 c1 e1 12 c1 e9 15 69 c1 e8 03 00 00 39 c2 75 75 89 d8 oops EIP: [] ips_detect_cpu+0x62/0x180 [intel_ips] SS:ESP 0068:f5965de4 oops CR2: 0000000000000008 oops oops Found OOPS (28): oops BUG: unable to handle kernel paging request at ffffc90000360000 oops IP: [] azx_create+0x36b/0x73d [snd_hda_intel] oops PGD 75417067 PUD 75418067 PMD 75522067 PTE 800000fd00000173 oops Oops: 0009 [#1] SMP oops last sysfs file: /sys/devices/pci0000:00/0000:00:0f.0/host0/target0:0:0/0:0:0:0/block/sda/sda17/alignment_offset oops CPU 0 oops Modules linked in: snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq snd_timer snd_seq_device snd soundcore snd_page_alloc ppdev lp parport_pc k8temp edac_core edac_mce_amd i2c_viapro parport shpchp psmouse joydev serio_raw usbhid hid floppy via_rhine pata_via mii sata_via oops oops Pid: 856, comm: work_for_cpu Not tainted 2.6.35-22-generic #35-Ubuntu MS-7253/MS-7253 oops RIP: 0010:[] [] azx_create+0x36b/0x73d [snd_hda_intel] oops RSP: 0018:ffff880073aa5e20 EFLAGS: 00010282 oops RAX: ffffc90000360000 RBX: ffff880073aa5e80 RCX: 0000000000000000 oops RDX: 0000000000000000 RSI: 0000000000000286 RDI: 0000000000000286 oops RBP: ffff880073aa5e70 R08: 0000000000000001 R09: 0000000000000040 oops R10: 0000000000000008 R11: 0000000000000003 R12: ffff8800752af000 oops R13: ffff88007575e400 R14: 0000000000000000 R15: ffff88007575d400 oops FS: 00007f7f480467a0(0000) GS:ffff880001e00000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b oops CR2: ffffc90000360000 CR3: 000000007536b000 CR4: 00000000000006f0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process work_for_cpu (pid: 856, threadinfo ffff880073aa4000, task ffff88007417adc0) oops Stack: oops ffffffffa00bf1e0 ffffffffa009ad78 ffffffff00000000 0000000073aa5e88 oops <0> 0000000000000000 ffff8800752af000 ffffffffa009a520 ffff8800752af090 oops <0> 0000000000000000 0000000000000000 ffff880073aa5eb0 ffffffffa0099100 oops Call Trace: oops [] azx_probe+0xb8/0x284 [snd_hda_intel] oops [] ? do_work_for_cpu+0x0/0x30 oops [] local_pci_probe+0x17/0x20 oops [] do_work_for_cpu+0x18/0x30 oops [] kthread+0x96/0xa0 oops [] kernel_thread_helper+0x4/0x10 oops [] ? kthread+0x0/0xa0 oops [] ? kernel_thread_helper+0x0/0x10 oops Code: ef 31 f6 4c 89 ef 89 4d c0 e8 17 d5 ff ff 85 c0 0f 88 c3 03 00 00 4c 89 e7 e8 87 bd 23 e1 41 8b 7d 40 e8 1e 21 03 e1 49 8b 45 38 <66> 44 8b 30 41 8b 45 14 8b 4d c0 8d 50 fd 83 fa 01 77 3f 31 d2 oops RIP [] azx_create+0x36b/0x73d [snd_hda_intel] oops RSP oops CR2: ffffc90000360000 oops oops Found OOPS (29): oops BUG: unable to handle kernel paging request at ffffc90422101ffc oops IP: [] evergreen_cp_start+0x4c/0x570 [radeon] oops PGD 157c0c067 PUD 0 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/module/snd_rawmidi/initstate oops CPU 0 oops Modules linked in: snd_rawmidi snd_seq_midi_event snd_seq arc4 snd_timer radeon(+) snd_seq_device snd ttm iwlagn i915 iwlcore soundcore drm_kms_helper uvcvideo drm joydev usbhid mac80211 hid snd_page_alloc videodev v4l1_compat v4l2_compat_ioctl32 intel_ips hp_wmi hp_accel lis3lv02d input_polldev video intel_agp btusb wacom cfg80211 bluetooth i2c_algo_bit led_class psmouse output serio_raw lp parport ahci libahci r8169 mii oops oops Pid: 564, comm: modprobe Not tainted 2.6.35-24-generic #42-Ubuntu 1486/HP TouchSmart tm2 Notebook PC oops RIP: 0010:[] [] evergreen_cp_start+0x4c/0x570 [radeon] oops RSP: 0018:ffff880145bcbb48 EFLAGS: 00010286 oops RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffff880145bcbfd8 oops RDX: ffffc90422101ffc RSI: 0000000000000007 RDI: 0000000000000010 oops RBP: ffff880145bcbb58 R08: ffff880145bca000 R09: 00000000ffffffff oops R10: 00000000ffffffff R11: 0000000000000001 R12: ffff880153604000 oops R13: 0000000000c10027 R14: 00000000fffffff4 R15: ffffffffa0408c80 oops FS: 00007f3dabda0700(0000) GS:ffff880001e00000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b oops CR2: ffffc90422101ffc CR3: 000000014eb1c000 CR4: 00000000000006f0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process modprobe (pid: 564, threadinfo ffff880145bca000, task ffff880145b80000) oops Stack: oops ffff880153604000 0000000008000911 ffff880145bcbb78 ffffffffa03e174d oops <0> ffff880153604000 0000000000000000 ffff880145bcbb98 ffffffffa03e1a6f oops <0> ffff880153604000 0000000000000000 ffff880145bcbbc8 ffffffffa03e1d63 oops Call Trace: oops [] evergreen_cp_resume+0x2ad/0x520 [radeon] oops [] evergreen_startup+0xaf/0x140 [radeon] oops [] evergreen_init+0x263/0x4d0 [radeon] oops [] radeon_device_init+0x344/0x4a0 [radeon] oops [] radeon_driver_load_kms+0xa3/0x250 [radeon] oops [] drm_get_dev+0x15f/0x2c0 [drm] oops [] ? sysfs_add_one+0x2c/0x130 oops [] radeon_pci_probe+0x15/0x269 [radeon] oops [] local_pci_probe+0x17/0x20 oops [] __pci_device_probe+0xe9/0xf0 oops [] ? kobject_get+0x1a/0x30 oops [] ? get_device+0x19/0x20 oops [] pci_device_probe+0x3a/0x60 oops [] really_probe+0x68/0x190 oops [] driver_probe_device+0x45/0x70 oops [] __driver_attach+0x9b/0xa0 oops [] ? __driver_attach+0x0/0xa0 oops [] bus_for_each_dev+0x68/0x90 oops [] driver_attach+0x1e/0x20 oops [] bus_add_driver+0xde/0x280 oops [] driver_register+0x80/0x150 oops [] __pci_register_driver+0x56/0xd0 oops [] drm_init+0x111/0x120 [drm] oops [] ? vga_switcheroo_register_handler+0x3a/0x60 oops [] ? radeon_init+0x0/0xc6 [radeon] oops [] radeon_init+0xc4/0xc6 [radeon] oops [] do_one_initcall+0x3c/0x1a0 oops [] sys_init_module+0xbb/0x200 oops [] system_call_fastpath+0x16/0x1b oops Code: 00 00 41 8b bc 24 e4 09 00 00 85 ff 0f 8e ce 03 00 00 41 8b 84 24 d4 09 00 00 89 c2 83 c0 01 48 c1 e2 02 49 03 94 24 c8 09 00 00 02 00 44 05 c0 41 8b 94 24 e4 09 00 00 41 23 84 24 f4 09 00 oops RIP [] evergreen_cp_start+0x4c/0x570 [radeon] oops RSP oops CR2: ffffc90422101ffc oops oops Found OOPS (30): oops BUG: unable to handle kernel NULL pointer dereference at (null) oops IP: [<(null)>] (null) oops *pde = 00000000 oops Oops: 0000 [#1] SMP oops last sysfs file: /sys/kernel/uevent_seqnum oops Modules linked in: joydev snd_hda_codec_intelhdmi snd_hda_codec_realtek btusb bluetooth tpm_infineon arc4 snd_hda_intel snd_hda_codec snd_hwdep snd_pcm snd_seq_midi snd_rawmidi i915 iwlagn snd_seq_midi_event drm_kms_helper snd_seq drm snd_timer uvcvideo iwlcore snd_seq_device videodev v4l1_compat mac80211 tpm_tis tpm psmouse tpm_bios serio_raw snd toshiba_bluetooth toshiba_acpi intel_agp agpgart cfg80211 i2c_algo_bit soundcore intel_ips snd_page_alloc video output lp parport ahci sdhci_pci sdhci led_class libahci e1000e oops oops Pid: 624, comm: ips-adjust Not tainted 2.6.35-25-generic #44-Ubuntu Portable PC/TECRA R700 oops EIP: 0060:[<00000000>] EFLAGS: 00010202 CPU: 2 oops EIP is at 0x0 oops EAX: 00000292 EBX: f5ae5b00 ECX: 00002328 EDX: 00000292 oops ESI: f5ae5b2c EDI: 00000000 EBP: f5a61fbc ESP: f5a61f78 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process ips-adjust (pid: 624, ti=f5a60000 task=f51d8000 task.ti=f5a60000) oops Stack: oops f84eab93 c08c4700 c08c4700 f70a9960 00000001 c08c4700 c08c4700 f5a61fac oops <0> 0000005a f6a3e200 008c4700 0000058f f51d005a 00000000 f5ae7dec f5ae5b00 oops <0> f84ea900 f5a61fe4 c0165ad4 00000000 00000000 00000000 f5a61fd0 f5a61fd0 oops Call Trace: oops [] ? ips_adjust+0x293/0x400 [intel_ips] oops [] ? ips_adjust+0x0/0x400 [intel_ips] oops [] ? kthread+0x74/0x80 oops [] ? kthread+0x0/0x80 oops [] ? kernel_thread_helper+0x6/0x10 oops Code: Bad EIP value. oops EIP: [<00000000>] 0x0 SS:ESP 0068:f5a61f78 oops CR2: 0000000000000000 oops oops Found OOPS (31): oops BUG: unable to handle kernel NULL pointer dereference at 0000018e oops IP: [] fb_release+0x25/0x60 oops *pde = 00000000 oops Oops: 0000 [#1] SMP oops last sysfs file: /sys/devices/virtual/vtconsole/vtcon1/uevent oops Modules linked in: parport_pc ppdev snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep arc4 snd_pcm ath5k snd_seq_midi snd_rawmidi ath i915 snd_seq_midi_event mac80211 snd_seq joydev snd_timer snd_seq_device drm_kms_helper uvcvideo cfg80211 drm snd psmouse videodev serio_raw soundcore snd_page_alloc i2c_algo_bit eeepc_laptop video sparse_keymap lp parport usbhid hid usb_storage uas atl2 oops oops Pid: 246, comm: plymouthd Not tainted 2.6.38-999-generic #201103011141 ASUSTeK Computer INC. 701/701 oops EIP: 0060:[] EFLAGS: 00210286 CPU: 0 oops EIP is at fb_release+0x25/0x60 oops EAX: 00000186 EBX: f41f1800 ECX: c12aaf90 EDX: f6df6000 oops ESI: f41f1808 EDI: f0a64e40 EBP: f6df7f40 ESP: f6df7f38 oops DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 oops Process plymouthd (pid: 246, ti=f6df6000 task=f6e325e0 task.ti=f6df6000) oops Stack: oops f3e9e880 00000008 f6df7f74 c1127c39 00000001 00000000 00000000 f3e9e880 oops f41966c0 f43e83f0 f0a64e48 f43e83f0 f0a64e40 f6e03100 00000000 f6df7f7c oops c1127d7e f6df7f94 c112467c 0012d000 f6e03140 f6e03100 0000000c f6df7fac oops Call Trace: oops [] __fput+0x99/0x1c0 oops [] fput+0x1e/0x30 oops [] filp_close+0x4c/0x80 oops [] sys_close+0x6e/0xc0 oops [] sysenter_do_call+0x12/0x28 oops [] ? squash_the_stupid_serial_number+0xc0/0xe0 oops Code: b4 26 00 00 00 00 55 89 e5 83 ec 08 89 1c 24 89 74 24 04 3e 8d 74 26 00 8b 5a 74 8d 73 08 89 f0 e8 11 f9 25 00 8b 83 0c 03 00 00 <8b> 48 08 85 c9 74 0f ba 01 00 00 00 89 d8 ff d1 8b 83 0c 03 00 oops EIP: [] fb_release+0x25/0x60 SS:ESP 0068:f6df7f38 oops CR2: 000000000000018e oops oops Found OOPS (32): oops BUG: unable to handle kernel paging request at ffffffffa0c8d860 oops IP: [] module_bug_finalize+0x7e/0xd0 oops PGD 1a2c067 PUD 1a30063 PMD 1187c3067 PTE 0 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/module/pcmcia/initstate oops CPU 1 oops Modules linked in: btusb tpm_infineon bluetooth snd_hda_codec_idt arc4 pcmcia iwlagn snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm iwlcore snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq nvidia(P+) ppdev joydev mac80211 hp_wmi r852 sm_common snd_timer cfg80211 nand nand_ids nand_ecc video snd_seq_device tpm_tis yenta_socket tpm mtd output parport_pc tpm_bios pcmcia_rsrc pcmcia_core hp_accel lis3lv02d input_polldev snd intel_ips psmouse serio_raw xhci_hcd intel_agp soundcore snd_page_alloc lp parport usbhid hid firewire_ohci sdhci_pci e1000e firewire_core sdhci led_class crc_itu_t ahci libahci oops oops Pid: 1089, comm: modprobe Tainted: P 2.6.35-28-generic #50-Ubuntu 1521/HP EliteBook 8540w oops RIP: 0010:[] [] module_bug_finalize+0x7e/0xd0 oops RSP: 0018:ffff8801194a3d80 EFLAGS: 00010246 oops RAX: ffffffffa0067698 RBX: ffffffff817d6acc RCX: 000000000000000b oops RDX: ffffffffa0c8d858 RSI: ffffc900110f526a RDI: ffffffff817d6acd oops RBP: ffff8801194a3d88 R08: ffffffffa0067520 R09: ffffc900110f5948 oops R10: ffffc900110f5260 R11: 000000000000000c R12: ffffc900110f53c8 oops R13: 0000000000000000 R14: ffffffff817a67b7 R15: 0000000000000006 oops FS: 00007f72c73de700(0000) GS:ffff880001e40000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 oops CR2: ffffffffa0c8d860 CR3: 00000001187f3000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process modprobe (pid: 1089, threadinfo ffff8801194a2000, task ffff880118cfc4a0) oops Stack: oops 0000000000000000 ffff8801194a3df8 ffffffff8103273f ffffffff812c3970 oops <0> ffffffffa0067520 ffffc900110f1000 ffffc900110f5348 ffffc900110f5260 oops <0> ffffc900110f5948 ffff8801194a3df8 ffffffffa0067520 ffffc900110f1000 oops Call Trace: oops [] module_finalize+0x11f/0x160 oops [] ? generic_swap+0x0/0x30 oops [] load_module+0xc65/0x1140 oops [] ? vfs_write+0x132/0x1a0 oops [] sys_init_module+0x62/0x200 oops [] system_call_fastpath+0x16/0x1b oops Code: 89 d9 49 8d 34 32 f3 a6 74 43 83 c0 01 49 83 c1 40 39 d0 72 e4 eb 06 90 90 90 90 90 90 48 8b 15 09 2d 7a 00 49 8d 80 78 01 00 00 <48> 89 42 08 49 89 90 78 01 00 00 49 c7 80 80 01 00 00 f0 ab a5 oops RIP [] module_bug_finalize+0x7e/0xd0 oops RSP oops CR2: ffffffffa0c8d860 oops oops Found OOPS (33): oops BUG: unable to handle kernel paging request at ffffffffa0c8d860 oops IP: [] module_bug_finalize+0x7e/0xd0 oops PGD 1a2c067 PUD 1a30063 PMD 1187c3067 PTE 0 oops Oops: 0002 [#2] SMP oops last sysfs file: /sys/module/snd_hda_codec/initstate oops CPU 3 oops Modules linked in: btusb tpm_infineon bluetooth snd_hda_codec_idt arc4 pcmcia iwlagn snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm iwlcore snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq nvidia(P+) ppdev joydev mac80211 hp_wmi r852 sm_common snd_timer cfg80211 nand nand_ids nand_ecc video snd_seq_device tpm_tis yenta_socket tpm mtd output parport_pc tpm_bios pcmcia_rsrc pcmcia_core hp_accel lis3lv02d input_polldev snd intel_ips psmouse serio_raw xhci_hcd intel_agp soundcore snd_page_alloc lp parport usbhid hid firewire_ohci sdhci_pci e1000e firewire_core sdhci led_class crc_itu_t ahci libahci oops oops Pid: 1125, comm: modprobe Tainted: P D 2.6.35-28-generic #50-Ubuntu 1521/HP EliteBook 8540w oops RIP: 0010:[] [] module_bug_finalize+0x7e/0xd0 oops RSP: 0018:ffff88011bb7dd80 EFLAGS: 00010246 oops RAX: ffffffffa015d3b8 RBX: ffffffff817d6acc RCX: 000000000000000b oops RDX: ffffffffa0c8d858 RSI: ffffc9001113804a RDI: ffffffff817d6acd oops RBP: ffff88011bb7dd88 R08: ffffffffa015d240 R09: ffffc900111387b8 oops R10: ffffc90011138040 R11: 000000000000000c R12: ffffc900111381b8 oops R13: 0000000000000000 R14: ffffffff817a67b7 R15: 0000000000000006 oops FS: 00007fa52f1e1700(0000) GS:ffff880001ec0000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 oops CR2: ffffffffa0c8d860 CR3: 0000000119c91000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process modprobe (pid: 1125, threadinfo ffff88011bb7c000, task ffff880117c496e0) oops Stack: oops 0000000000000000 ffff88011bb7ddf8 ffffffff8103273f ffffffff812c3970 oops <0> ffffffffa015d240 ffffc90011134000 ffffc90011138138 ffffc90011138040 oops <0> ffffc900111387b8 ffff88011bb7ddf8 ffffffffa015d240 ffffc90011134000 oops Call Trace: oops [] module_finalize+0x11f/0x160 oops [] ? generic_swap+0x0/0x30 oops [] load_module+0xc65/0x1140 oops [] sys_init_module+0x62/0x200 oops [] system_call_fastpath+0x16/0x1b oops Code: 89 d9 49 8d 34 32 f3 a6 74 43 83 c0 01 49 83 c1 40 39 d0 72 e4 eb 06 90 90 90 90 90 90 48 8b 15 09 2d 7a 00 49 8d 80 78 01 00 00 <48> 89 42 08 49 89 90 78 01 00 00 49 c7 80 80 01 00 00 f0 ab a5 oops RIP [] module_bug_finalize+0x7e/0xd0 oops RSP oops CR2: ffffffffa0c8d860 oops oops Found OOPS (34): oops BUG: unable to handle kernel paging request at ffffffffa0c8d860 oops IP: [] module_bug_finalize+0x7e/0xd0 oops PGD 1a2c067 PUD 1a30063 PMD 1187c3067 PTE 0 oops Oops: 0002 [#3] SMP oops last sysfs file: /sys/module/snd_hda_intel/initstate oops CPU 3 oops Modules linked in: btusb tpm_infineon bluetooth snd_hda_codec_idt arc4 pcmcia iwlagn snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm iwlcore snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq nvidia(P+) ppdev joydev mac80211 hp_wmi r852 sm_common snd_timer cfg80211 nand nand_ids nand_ecc video snd_seq_device tpm_tis yenta_socket tpm mtd output parport_pc tpm_bios pcmcia_rsrc pcmcia_core hp_accel lis3lv02d input_polldev snd intel_ips psmouse serio_raw xhci_hcd intel_agp soundcore snd_page_alloc lp parport usbhid hid firewire_ohci sdhci_pci e1000e firewire_core sdhci led_class crc_itu_t ahci libahci oops oops Pid: 1129, comm: modprobe Tainted: P D 2.6.35-28-generic #50-Ubuntu 1521/HP EliteBook 8540w oops RIP: 0010:[] [] module_bug_finalize+0x7e/0xd0 oops RSP: 0018:ffff88011ac0dd80 EFLAGS: 00010246 oops RAX: ffffffffa0c623b8 RBX: ffffffff817d6acc RCX: 000000000000000b oops RDX: ffffffffa0c8d858 RSI: ffffc9001114204a RDI: ffffffff817d6acd oops RBP: ffff88011ac0dd88 R08: ffffffffa0c62240 R09: ffffc900111427b8 oops R10: ffffc90011142040 R11: 000000000000000c R12: ffffc900111421b8 oops R13: 0000000000000000 R14: ffffffff817a67b7 R15: 0000000000000006 oops FS: 00007f532b66d700(0000) GS:ffff880001ec0000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 oops CR2: ffffffffa0c8d860 CR3: 000000011b29c000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process modprobe (pid: 1129, threadinfo ffff88011ac0c000, task ffff880117c4c4a0) oops Stack: oops 0000000000000000 ffff88011ac0ddf8 ffffffff8103273f ffffffff812c3970 oops <0> ffffffffa0c62240 ffffc9001113e000 ffffc90011142138 ffffc90011142040 oops <0> ffffc900111427b8 ffff88011ac0ddf8 ffffffffa0c62240 ffffc9001113e000 oops Call Trace: oops [] module_finalize+0x11f/0x160 oops [] ? generic_swap+0x0/0x30 oops [] load_module+0xc65/0x1140 oops [] sys_init_module+0x62/0x200 oops [] system_call_fastpath+0x16/0x1b oops Code: 89 d9 49 8d 34 32 f3 a6 74 43 83 c0 01 49 83 c1 40 39 d0 72 e4 eb 06 90 90 90 90 90 90 48 8b 15 09 2d 7a 00 49 8d 80 78 01 00 00 <48> 89 42 08 49 89 90 78 01 00 00 49 c7 80 80 01 00 00 f0 ab a5 oops RIP [] module_bug_finalize+0x7e/0xd0 oops RSP oops CR2: ffffffffa0c8d860 oops oops Found OOPS (35): oops BUG: unable to handle kernel paging request at ffffffffa0c8d860 oops IP: [] module_bug_finalize+0x7e/0xd0 oops PGD 1a2c067 PUD 1a30063 PMD 1187c3067 PTE 0 oops Oops: 0002 [#4] SMP oops last sysfs file: /sys/module/snd_hda_codec/initstate oops CPU 3 oops Modules linked in: btusb tpm_infineon bluetooth snd_hda_codec_idt arc4 pcmcia iwlagn snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm iwlcore snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq nvidia(P+) ppdev joydev mac80211 hp_wmi r852 sm_common snd_timer cfg80211 nand nand_ids nand_ecc video snd_seq_device tpm_tis yenta_socket tpm mtd output parport_pc tpm_bios pcmcia_rsrc pcmcia_core hp_accel lis3lv02d input_polldev snd intel_ips psmouse serio_raw xhci_hcd intel_agp soundcore snd_page_alloc lp parport usbhid hid firewire_ohci sdhci_pci e1000e firewire_core sdhci led_class crc_itu_t ahci libahci oops oops Pid: 1140, comm: modprobe Tainted: P D 2.6.35-28-generic #50-Ubuntu 1521/HP EliteBook 8540w oops RIP: 0010:[] [] module_bug_finalize+0x7e/0xd0 oops RSP: 0018:ffff880127ea7d80 EFLAGS: 00010246 oops RAX: ffffffffa0c813b8 RBX: ffffffff817d6acc RCX: 000000000000000b oops RDX: ffffffffa0c8d858 RSI: ffffc9001114f04a RDI: ffffffff817d6acd oops RBP: ffff880127ea7d88 R08: ffffffffa0c81240 R09: ffffc9001114f7b8 oops R10: ffffc9001114f040 R11: 000000000000000c R12: ffffc9001114f1b8 oops R13: 0000000000000000 R14: ffffffff817a67b7 R15: 0000000000000006 oops FS: 00007f2de6864700(0000) GS:ffff880001ec0000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b oops CR2: ffffffffa0c8d860 CR3: 000000011ba76000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process modprobe (pid: 1140, threadinfo ffff880127ea6000, task ffff880117c4db80) oops Stack: oops 0000000000000000 ffff880127ea7df8 ffffffff8103273f ffffffff812c3970 oops <0> ffffffffa0c81240 ffffc9001114b000 ffffc9001114f138 ffffc9001114f040 oops <0> ffffc9001114f7b8 ffff880127ea7df8 ffffffffa0c81240 ffffc9001114b000 oops Call Trace: oops [] module_finalize+0x11f/0x160 oops [] ? generic_swap+0x0/0x30 oops [] load_module+0xc65/0x1140 oops [] sys_init_module+0x62/0x200 oops [] system_call_fastpath+0x16/0x1b oops Code: 89 d9 49 8d 34 32 f3 a6 74 43 83 c0 01 49 83 c1 40 39 d0 72 e4 eb 06 90 90 90 90 90 90 48 8b 15 09 2d 7a 00 49 8d 80 78 01 00 00 <48> 89 42 08 49 89 90 78 01 00 00 49 c7 80 80 01 00 00 f0 ab a5 oops RIP [] module_bug_finalize+0x7e/0xd0 oops RSP oops CR2: ffffffffa0c8d860 oops oops Found OOPS (36): oops BUG: unable to handle kernel paging request at ffffffffa0c8d860 oops IP: [] module_bug_finalize+0x7e/0xd0 oops PGD 1a2c067 PUD 1a30063 PMD 1187c3067 PTE 0 oops Oops: 0002 [#5] SMP oops last sysfs file: /sys/module/snd_hda_codec/initstate oops CPU 3 oops Modules linked in: btusb tpm_infineon bluetooth snd_hda_codec_idt arc4 pcmcia iwlagn snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm iwlcore snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq nvidia(P+) ppdev joydev mac80211 hp_wmi r852 sm_common snd_timer cfg80211 nand nand_ids nand_ecc video snd_seq_device tpm_tis yenta_socket tpm mtd output parport_pc tpm_bios pcmcia_rsrc pcmcia_core hp_accel lis3lv02d input_polldev snd intel_ips psmouse serio_raw xhci_hcd intel_agp soundcore snd_page_alloc lp parport usbhid hid firewire_ohci sdhci_pci e1000e firewire_core sdhci led_class crc_itu_t ahci libahci oops oops Pid: 1144, comm: modprobe Tainted: P D 2.6.35-28-generic #50-Ubuntu 1521/HP EliteBook 8540w oops RIP: 0010:[] [] module_bug_finalize+0x7e/0xd0 oops RSP: 0018:ffff88011976dd80 EFLAGS: 00010246 oops RAX: ffffffffa0cee3b8 RBX: ffffffff817d6acc RCX: 000000000000000b oops RDX: ffffffffa0c8d858 RSI: ffffc9001115904a RDI: ffffffff817d6acd oops RBP: ffff88011976dd88 R08: ffffffffa0cee240 R09: ffffc900111597b8 oops R10: ffffc90011159040 R11: 000000000000000c R12: ffffc900111591b8 oops R13: 0000000000000000 R14: ffffffff817a67b7 R15: 0000000000000006 oops FS: 00007f0d3b909700(0000) GS:ffff880001ec0000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b oops CR2: ffffffffa0c8d860 CR3: 000000011acb9000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process modprobe (pid: 1144, threadinfo ffff88011976c000, task ffff880117c48000) oops Stack: oops 0000000000000000 ffff88011976ddf8 ffffffff8103273f ffffffff812c3970 oops <0> ffffffffa0cee240 ffffc90011155000 ffffc90011159138 ffffc90011159040 oops <0> ffffc900111597b8 ffff88011976ddf8 ffffffffa0cee240 ffffc90011155000 oops Call Trace: oops [] module_finalize+0x11f/0x160 oops [] ? generic_swap+0x0/0x30 oops [] load_module+0xc65/0x1140 oops [] sys_init_module+0x62/0x200 oops [] system_call_fastpath+0x16/0x1b oops Code: 89 d9 49 8d 34 32 f3 a6 74 43 83 c0 01 49 83 c1 40 39 d0 72 e4 eb 06 90 90 90 90 90 90 48 8b 15 09 2d 7a 00 49 8d 80 78 01 00 00 <48> 89 42 08 49 89 90 78 01 00 00 49 c7 80 80 01 00 00 f0 ab a5 oops RIP [] module_bug_finalize+0x7e/0xd0 oops RSP oops CR2: ffffffffa0c8d860 oops oops Found OOPS (37): oops BUG: unable to handle kernel paging request at ffffffffa0c8d860 oops IP: [] module_bug_finalize+0x7e/0xd0 oops PGD 1a2c067 PUD 1a30063 PMD 1187c3067 PTE 0 oops Oops: 0002 [#6] SMP oops last sysfs file: /sys/bus/acpi/drivers/NVIDIA ACPI Video Driver/uevent oops CPU 0 oops Modules linked in: btusb tpm_infineon bluetooth snd_hda_codec_idt arc4 pcmcia iwlagn snd_hda_intel snd_hda_codec snd_hwdep snd_pcm iwlcore snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq nvidia(P) ppdev joydev mac80211 hp_wmi r852 sm_common snd_timer cfg80211 nand nand_ids nand_ecc video snd_seq_device tpm_tis yenta_socket tpm mtd output parport_pc tpm_bios pcmcia_rsrc pcmcia_core hp_accel lis3lv02d input_polldev snd intel_ips psmouse serio_raw xhci_hcd intel_agp soundcore snd_page_alloc lp parport usbhid hid firewire_ohci sdhci_pci e1000e firewire_core sdhci led_class crc_itu_t ahci libahci oops oops Pid: 1601, comm: modprobe Tainted: P D 2.6.35-28-generic #50-Ubuntu 1521/HP EliteBook 8540w oops RIP: 0010:[] [] module_bug_finalize+0x7e/0xd0 oops RSP: 0018:ffff880116f57d80 EFLAGS: 00010a02 oops RAX: ffffffffa0b7d298 RBX: ffffffff817d6acc RCX: 0000000000000000 oops RDX: ffffffffa0c8d858 RSI: ffffc900121358f0 RDI: ffffffff817d6ad8 oops RBP: ffff880116f57d88 R08: ffffffffa0b7d120 R09: ffffc90012135e88 oops R10: ffffc90012135828 R11: 000000000000000c R12: ffffc90012135ac8 oops R13: ffffc90012135d48 R14: ffffffff817a67b7 R15: 0000000000000006 oops FS: 00007f53be4b8700(0000) GS:ffff880001e00000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b oops CR2: ffffffffa0c8d860 CR3: 000000011794d000 CR4: 00000000000006f0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process modprobe (pid: 1601, threadinfo ffff880116f56000, task ffff880116f3db80) oops Stack: oops ffffc90012135e08 ffff880116f57df8 ffffffff8103273f ffffffff812c3970 oops <0> ffffffffa0b7d120 ffffc900120f9000 ffffc90012135a48 ffffc90012135828 oops <0> ffffc900121367c8 ffff880116f57df8 ffffffffa0b7d120 ffffc900120f9000 oops Call Trace: oops [] module_finalize+0x11f/0x160 oops [] ? generic_swap+0x0/0x30 oops [] load_module+0xc65/0x1140 oops [] sys_init_module+0x62/0x200 oops [] system_call_fastpath+0x16/0x1b oops Code: 89 d9 49 8d 34 32 f3 a6 74 43 83 c0 01 49 83 c1 40 39 d0 72 e4 eb 06 90 90 90 90 90 90 48 8b 15 09 2d 7a 00 49 8d 80 78 01 00 00 <48> 89 42 08 49 89 90 78 01 00 00 49 c7 80 80 01 00 00 f0 ab a5 oops RIP [] module_bug_finalize+0x7e/0xd0 oops RSP oops CR2: ffffffffa0c8d860 oops oops Found OOPS (38): oops BUG: unable to handle kernel NULL pointer dereference at 0000000000000065 oops IP: [] ReadVBIOSTablData+0x29/0x410 [xgifb] oops PGD 20b5aa067 PUD 20b5a9067 PMD 0 oops Oops: 0000 [#1] SMP oops last sysfs file: /sys/devices/virtual/block/loop4/removable oops CPU 0 oops Modules linked in: xgifb(C+) intel_rng(-) hed i3200_edac edac_core lp parport usb_storage tg3 btrfs zlib_deflate libcrc32c oops oops Pid: 414, comm: modprobe Tainted: G C 2.6.38-8-server #42-Ubuntu ASUS RS100-E5/PI2/P5BV-M/RS100-E5 oops RIP: 0010:[] [] ReadVBIOSTablData+0x29/0x410 [xgifb] oops RSP: 0018:ffff88020c81f8c8 EFLAGS: 00010246 oops RAX: 0000000000000000 RBX: ffffffffa012eb80 RCX: 000000000003ffff oops RDX: 0000000000000000 RSI: ffff88020c81f8d8 RDI: 0000000000000031 oops RBP: ffff88020c81f8c8 R08: 0000000000000000 R09: 000000000000c0c3 oops R10: 0000000000000000 R11: 0000000000000003 R12: 00000000fffffffb oops R13: ffff88020e9b6090 R14: ffff88020e9b6200 R15: 000000000040506a oops FS: 00007fddc20b9720(0000) GS:ffff8800dfc00000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 oops CR2: 0000000000000065 CR3: 000000020b5a0000 CR4: 00000000000406f0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process modprobe (pid: 414, threadinfo ffff88020c81e000, task ffff88020cde96e0) oops Stack: oops ffff88020c81fca8 ffffffffa01132da ffff88021fffcc00 000000000000ec44 oops 000000000000ec54 000000000000ec40 000000000000ec4e 000000000000ec42 oops ffff880200000041 000000000000ec4a 000000000000ec46 000000000000ec47 oops Call Trace: oops [] XGIInitNew+0x1ea/0xaa0 [xgifb] oops [] ? build_zonelists+0x1f0/0x290 oops [] ? put_dec+0x59/0x60 oops [] ? vsnprintf+0x35e/0x620 oops [] xgifb_probe+0x716/0x1051 [xgifb] oops [] local_pci_probe+0x5f/0xd0 oops [] pci_device_probe+0x129/0x130 oops [] ? driver_sysfs_add+0x7a/0xb0 oops [] really_probe+0x68/0x190 oops [] driver_probe_device+0x45/0x70 oops [] __driver_attach+0xab/0xb0 oops [] ? __driver_attach+0x0/0xb0 oops [] bus_for_each_dev+0x5e/0x90 oops [] driver_attach+0x1e/0x20 oops [] bus_add_driver+0xc5/0x280 oops [] ? xgifb_init_module+0x0/0xb55 [xgifb] oops [] driver_register+0x76/0x140 oops [] ? xgifb_init_module+0x0/0xb55 [xgifb] oops [] __pci_register_driver+0x56/0xd0 oops [] ? xgifb_init_module+0x0/0xb55 [xgifb] oops [] xgifb_init_module+0x7f/0xb55 [xgifb] oops [] do_one_initcall+0x45/0x190 oops [] sys_init_module+0xfb/0x250 oops [] system_call_fastpath+0x16/0x1b oops Code: 00 00 55 48 89 e5 0f 1f 44 00 00 48 8b 96 f0 00 00 00 40 80 ff 31 74 0a c9 c3 0f 1f 84 00 00 00 00 00 66 c7 86 b8 00 00 00 00 00 <0f> b6 42 65 a8 01 74 e5 66 c7 86 b8 00 00 00 01 00 0f b6 8a 16 oops RIP [] ReadVBIOSTablData+0x29/0x410 [xgifb] oops RSP oops CR2: 0000000000000065 oops oops Found OOPS (39): oops BUG: unable to handle kernel NULL pointer dereference at 0000000000000008 oops IP: [] ses_enclosure_data_process+0x1a0/0x3a0 [ses] oops PGD 13361f067 PUD 133627067 PMD 0 oops Oops: 0002 [#1] SMP oops last sysfs file: /sys/module/snd_pcm/initstate oops CPU 4 oops Modules linked in: snd_usbmidi_lib snd_hda_codec snd_seq_midi snd_rawmidi iwlcore ir_lirc_codec rc_rc6_mce mac80211 lirc_dev psmouse ir_sony_decoder hp_accel(+) snd_seq_midi_event hp_wmi ir_jvc_decoder snd_seq ir_rc6_decoder snd_hwdep jmb38x_ms snd_seq_device snd_pcm sparse_keymap lis3lv02d ene_ir ir_rc5_decoder ir_nec_decoder btusb rc_core serio_raw memstick ses(+) snd_timer oops input: ST LIS3LV02DL Accelerometer as /devices/platform/lis3lv02d/input/input10 oops input_polldev cfg80211 oops Registered led device: hp::hddprotect oops hp_accel: driver loaded oops bluetooth uvcvideo videodev video enclosure i7core_edac snd edac_core v4l2_compat_ioctl32 soundcore lp snd_page_alloc parport usb_storage uas hid_a4tech usbhid hid ahci firewire_ohci libahci r8169 sdhci_pci firewire_core sdhci crc_itu_t oops oops Pid: 548, comm: modprobe Not tainted 2.6.38-8-generic #42-Ubuntu Hewlett-Packard HP Pavilion dv6 Notebook PC/3659 oops RIP: 0010:[] [] ses_enclosure_data_process+0x1a0/0x3a0 [ses] oops RSP: 0018:ffff8801035e9d88 EFLAGS: 00010286 oops RAX: ffff880101b3aeb8 RBX: 0000000000000000 RCX: 0000000000000000 oops RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000 oops RBP: ffff8801035e9df8 R08: 00000000000007f9 R09: ffff880137022ddc oops R10: 0000000000000000 R11: ffff880101a00000 R12: ffff880134e5f442 oops R13: 0000000000000000 R14: ffff880134e04ea4 R15: 0000000000000237 oops FS: 00007fe283dec720(0000) GS:ffff8800bf500000(0000) knlGS:0000000000000000 oops CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b oops CR2: 0000000000000008 CR3: 0000000106387000 CR4: 00000000000006e0 oops DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 oops DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 oops Process modprobe (pid: 548, threadinfo ffff8801035e8000, task ffff8801059b8000) oops Stack: oops 0000000000000000 ffff880133249148 ffff002000830112 ffffffff00000000 oops ffff880101a00000 ffff8801050dfae0 ffff880137022dd8 000000d3000000e0 oops ffff8801035e9df8 ffff880102913540 ffff880133249000 ffff880101a00000 oops Call Trace: oops [] ses_match_to_enclosure+0xa5/0x1f0 [ses] oops [] ses_intf_add+0x4b8/0x578 [ses] oops [] ? ses_init+0x0/0x1000 [ses] oops [] class_interface_register+0xa9/0xe0 oops [] scsi_register_interface+0x16/0x20 oops [] ses_init+0x14/0x1000 [ses] oops [] do_one_initcall+0x45/0x190 oops [] sys_init_module+0xfb/0x250 oops [] system_call_fastpath+0x16/0x1b oops Code: 49 63 c0 41 83 c0 01 48 69 c0 78 02 00 00 49 8d 84 03 78 02 00 00 48 3d 00 f0 ff ff 77 29 4d 85 e4 74 24 41 0f b6 14 24 48 8b 30 <4c> 89 66 08 f6 c2 80 75 13 89 d0 83 e0 0f 83 f8 06 0f 84 89 00 oops RIP [] ses_enclosure_data_process+0x1a0/0x3a0 [ses] oops RSP oops CR2: 0000000000000008 oops oops FAILED [CRITICAL] KernelOops: Test 1, Found 39 oopses in oops kernel log. oops FAILED [HIGH] KernelWarnOns: Test 1, Found 1 WARN_ON oops warnings in kernel log. oops oops ========================================================== oops 0 passed, 2 failed, 0 warning, 0 aborted, 0 skipped, 0 oops info only. oops ========================================================== fwts-test/oops-0001/oops-0002.log000066400000000000000000000025211465205512700164250ustar00rootroot00000000000000summary summary 0 passed, 2 failed, 0 warning, 0 aborted, 0 skipped, 0 info only. summary summary Test Failure Summary summary ========================================================================================================================================================================================================================================================================================================================================================================================== summary summary Critical failures: 1 summary oops: Found 39 oopses in kernel log. summary summary High failures: 1 summary oops: Found 1 WARN_ON warnings in kernel log. summary summary Medium failures: NONE summary summary Low failures: NONE summary summary Other failures: NONE summary summary Test |Pass |Fail |Abort|Warn |Skip |Info | summary ---------------+-----+-----+-----+-----+-----+-----+ summary oops | | 2| | | | | summary ---------------+-----+-----+-----+-----+-----+-----+ summary Total: | 0| 2| 0| 0| 0| 0| summary ---------------+-----+-----+-----+-----+-----+-----+ fwts-test/oops-0001/oops-0003.log000066400000000000000000000001111465205512700164170ustar00rootroot00000000000000oops FAILED [CRITICAL] KernelOops: Test 1, Found 39 oopses in fwts-test/oops-0001/oops.txt000066400000000000000000067456411465205512700161330ustar00rootroot00000000000000Bug: 521260 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.32-13-generic (buildd@vernadsky) (gcc version 4.4.3 (Ubuntu 4.4.3-2ubuntu1) ) #18-Ubuntu SMP Wed Feb 10 21:24:20 UTC 2010 (Ubuntu 2.6.32-13.18-generic) [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] NSC Geode by NSC [ 0.000000] Cyrix CyrixInstead [ 0.000000] Centaur CentaurHauls [ 0.000000] Transmeta GenuineTMx86 [ 0.000000] Transmeta TransmetaCPU [ 0.000000] UMC UMC UMC UMC [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009d800 (usable) [ 0.000000] BIOS-e820: 000000000009d800 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e6000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000afeb0000 (usable) [ 0.000000] BIOS-e820: 00000000afeb0000 - 00000000afebe000 (ACPI data) [ 0.000000] BIOS-e820: 00000000afebe000 - 00000000afee0000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000afee0000 - 00000000afeee000 (reserved) [ 0.000000] BIOS-e820: 00000000afef0000 - 00000000aff00000 (reserved) [ 0.000000] BIOS-e820: 00000000ff700000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 0000000140000000 (usable) [ 0.000000] DMI present. [ 0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it. [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] last_pfn = 0xafeb0 max_arch_pfn = 0x100000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-EFFFF uncachable [ 0.000000] F0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0000000000 mask FF80000000 write-back [ 0.000000] 1 base 0080000000 mask FFE0000000 write-back [ 0.000000] 2 base 00A0000000 mask FFF0000000 write-back [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] TOM2: 0000000150000000 aka 5376M [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820 update range: 00000000b0000000 - 0000000100000000 (usable) ==> (reserved) [ 0.000000] Scanning 0 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009d800 (usable) [ 0.000000] modified: 000000000009d800 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e6000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 00000000afeb0000 (usable) [ 0.000000] modified: 00000000afeb0000 - 00000000afebe000 (ACPI data) [ 0.000000] modified: 00000000afebe000 - 00000000afee0000 (ACPI NVS) [ 0.000000] modified: 00000000afee0000 - 00000000afeee000 (reserved) [ 0.000000] modified: 00000000afef0000 - 00000000aff00000 (reserved) [ 0.000000] modified: 00000000ff700000 - 0000000100000000 (reserved) [ 0.000000] modified: 0000000100000000 - 0000000140000000 (usable) [ 0.000000] initial memory mapped : 0 - 00c00000 [ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000 [ 0.000000] Using x86 segment limits to approximate NX protection [ 0.000000] 0000000000 - 0000400000 page 4k [ 0.000000] 0000400000 - 0037400000 page 2M [ 0.000000] 0037400000 - 00377fe000 page 4k [ 0.000000] kernel direct mapping tables up to 377fe000 @ 10000-15000 [ 0.000000] RAMDISK: 37d73000 - 37fefcb1 [ 0.000000] Allocated new RAMDISK: 00916000 - 00b92cb1 [ 0.000000] Move RAMDISK from 0000000037d73000 - 0000000037fefcb0 to 00916000 - 00b92cb0 [ 0.000000] ACPI: RSDP 000f9d10 00014 (v00 ACPIAM) [ 0.000000] ACPI: RSDT afeb0000 0003C (v01 052008 RSDT1711 20080520 MSFT 00000097) [ 0.000000] ACPI: FACP afeb0200 00084 (v02 052008 FACP1711 20080520 MSFT 00000097) [ 0.000000] ACPI: DSDT afeb0440 04D1B (v01 1AAAA 1AAAA000 00000000 INTL 20051117) [ 0.000000] ACPI: FACS afebe000 00040 [ 0.000000] ACPI: APIC afeb0390 0006C (v01 052008 APIC1711 20080520 MSFT 00000097) [ 0.000000] ACPI: MCFG afeb0400 0003C (v01 052008 OEMMCFG 20080520 MSFT 00000097) [ 0.000000] ACPI: OEMB afebe040 00071 (v01 052008 OEMB1711 20080520 MSFT 00000097) [ 0.000000] ACPI: HPET afeb5160 00038 (v01 052008 OEMHPET 20080520 MSFT 00000097) [ 0.000000] ACPI: SSDT afeb51a0 002CC (v01 A M I POWERNOW 00000001 AMD 00000001) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] 1926MB HIGHMEM available. [ 0.000000] 887MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 377fe000 [ 0.000000] low ram: 0 - 377fe000 [ 0.000000] node 0 low ram: 00000000 - 377fe000 [ 0.000000] node 0 bootmap 00011000 - 00017f00 [ 0.000000] (9 early reservations) ==> bootmem [0000000000 - 00377fe000] [ 0.000000] #0 [0000000000 - 0000001000] BIOS data page ==> [0000000000 - 0000001000] [ 0.000000] #1 [0000001000 - 0000002000] EX TRAMPOLINE ==> [0000001000 - 0000002000] [ 0.000000] #2 [0000006000 - 0000007000] TRAMPOLINE ==> [0000006000 - 0000007000] [ 0.000000] #3 [0000100000 - 0000911f98] TEXT DATA BSS ==> [0000100000 - 0000911f98] [ 0.000000] #4 [000009d800 - 0000100000] BIOS reserved ==> [000009d800 - 0000100000] [ 0.000000] #5 [0000912000 - 00009150dd] BRK ==> [0000912000 - 00009150dd] [ 0.000000] #6 [0000010000 - 0000011000] PGTABLE ==> [0000010000 - 0000011000] [ 0.000000] #7 [0000916000 - 0000b92cb1] NEW RAMDISK ==> [0000916000 - 0000b92cb1] [ 0.000000] #8 [0000011000 - 0000018000] BOOTMAP ==> [0000011000 - 0000018000] [ 0.000000] found SMP MP-table at [c00ff780] ff780 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x000377fe [ 0.000000] HighMem 0x000377fe -> 0x000afeb0 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009d [ 0.000000] 0: 0x00000100 -> 0x000afeb0 [ 0.000000] On node 0 totalpages: 720445 [ 0.000000] free_area_init_node: node 0, pgdat c07cf100, node_mem_map c1001200 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3949 pages, LIFO batch:0 [ 0.000000] Normal zone: 1744 pages used for memmap [ 0.000000] Normal zone: 221486 pages, LIFO batch:31 [ 0.000000] HighMem zone: 3854 pages used for memmap [ 0.000000] HighMem zone: 489380 pages, LIFO batch:31 [ 0.000000] Using APIC driver default [ 0.000000] Detected use of extended apic ids on hypertransport bus [ 0.000000] ACPI: PM-Timer IO Port: 0x808 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x82] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x83] disabled) [ 0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 2, version 33, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Enabling APIC mode: Flat. Using 1 I/O APICs [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8300 base: 0xfed00000 [ 0.000000] SMP: Allowing 4 CPUs, 2 hotplug CPUs [ 0.000000] nr_irqs_gsi: 24 [ 0.000000] PM: Registered nosave memory: 000000000009d000 - 000000000009e000 [ 0.000000] PM: Registered nosave memory: 000000000009e000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e6000 [ 0.000000] PM: Registered nosave memory: 00000000000e6000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at aff00000 (gap: aff00000:4f800000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:4 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 14 pages/cpu @c2800000 s35896 r0 d21448 u1048576 [ 0.000000] pcpu-alloc: s35896 r0 d21448 u1048576 alloc=1*4194304 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 714815 [ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-2.6.32-13-generic root=/dev/mapper/new--lvm-root ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Enabling fast FPU save and restore... done. [ 0.000000] Enabling unmasked SIMD FPU exception support... done. [ 0.000000] Initializing CPU#0 [ 0.000000] allocated 14410880 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Initializing HighMem for node 0 (000377fe:000afeb0) [ 0.000000] Memory: 2832080k/2882240k available (4780k kernel code, 48516k reserved, 2233k data, 660k init, 1972936k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff1d000 - 0xfffff000 ( 904 kB) [ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB) [ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) [ 0.000000] .init : 0xc07da000 - 0xc087f000 ( 660 kB) [ 0.000000] .data : 0xc05ab0ff - 0xc07d9528 (2233 kB) [ 0.000000] .text : 0xc0100000 - 0xc05ab0ff (4780 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=13, HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] NR_IRQS:2304 nr_irqs:440 [ 0.000000] spurious 8259A interrupt: IRQ7. [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] hpet clockevent registered [ 0.000000] alloc irq_desc for 24 on node 0 [ 0.000000] alloc kstat_irqs on node 0 [ 0.000000] HPET: 4 timers in total, 1 timers will be used for per-cpu timer [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 2700.337 MHz processor. [ 0.004004] Calibrating delay loop (skipped), value calculated using timer frequency.. 5400.67 BogoMIPS (lpj=10801348) [ 0.004018] Security Framework initialized [ 0.004034] AppArmor: AppArmor initialized [ 0.004040] Mount-cache hash table entries: 512 [ 0.004135] Initializing cgroup subsys ns [ 0.004139] Initializing cgroup subsys cpuacct [ 0.004142] Initializing cgroup subsys memory [ 0.004147] Initializing cgroup subsys devices [ 0.004150] Initializing cgroup subsys freezer [ 0.008003] Initializing cgroup subsys net_cls [ 0.008017] CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line) [ 0.008019] CPU: L2 Cache: 512K (64 bytes/line) [ 0.008021] CPU: Physical Processor ID: 0 [ 0.008022] CPU: Processor Core ID: 0 [ 0.008025] mce: CPU supports 5 MCE banks [ 0.008032] using C1E aware idle routine [ 0.008038] Performance Events: AMD PMU driver. [ 0.008042] ... version: 0 [ 0.008044] ... bit width: 48 [ 0.008045] ... generic registers: 4 [ 0.008047] ... value mask: 0000ffffffffffff [ 0.008049] ... max period: 00007fffffffffff [ 0.008050] ... fixed-purpose events: 0 [ 0.008052] ... event mask: 000000000000000f [ 0.008055] Checking 'hlt' instruction... OK. [ 0.025658] ACPI: Core revision 20090903 [ 0.031792] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.031797] ftrace: allocating 22783 entries in 45 pages [ 0.036389] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.077247] CPU0: AMD Athlon(tm) 64 X2 Dual Core Processor 5200+ stepping 02 [ 0.080001] Booting processor 1 APIC 0x1 ip 0x6000 [ 0.008000] Initializing CPU#1 [ 0.008000] CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line) [ 0.008000] CPU: L2 Cache: 512K (64 bytes/line) [ 0.008000] CPU: Physical Processor ID: 0 [ 0.008000] CPU: Processor Core ID: 1 [ 0.164027] CPU1: AMD Athlon(tm) 64 X2 Dual Core Processor 5200+ stepping 02 [ 0.164049] Brought up 2 CPUs [ 0.164051] Total of 2 processors activated (10800.86 BogoMIPS). [ 0.164197] CPU0 attaching sched-domain: [ 0.164200] domain 0: span 0-1 level MC [ 0.164202] groups: 0 1 [ 0.164206] CPU1 attaching sched-domain: [ 0.164208] domain 0: span 0-1 level MC [ 0.164210] groups: 1 0 [ 0.164337] devtmpfs: initialized [ 0.164608] regulator: core version 0.5 [ 0.164634] Time: 19:42:38 Date: 02/12/10 [ 0.164670] NET: Registered protocol family 16 [ 0.164764] EISA bus registered [ 0.164770] ACPI: bus type pci registered [ 0.164822] PCI: MCFG configuration 0: base e0000000 segment 0 buses 0 - 255 [ 0.164824] PCI: Not using MMCONFIG. [ 0.165383] PCI: PCI BIOS revision 3.00 entry at 0xf0031, last bus=3 [ 0.165385] PCI: Using configuration type 1 for base access [ 0.166162] Trying to unpack rootfs image as initramfs... [ 0.180233] bio: create slab at 0 [ 0.180771] ACPI: EC: Look up EC in DSDT [ 0.182639] ACPI Error (psargs-0359): [ECEN] Namespace lookup failure, AE_NOT_FOUND [ 0.182645] ACPI Error (psparse-0537): Method parse/execution failed [\] (Node c090665c), AE_NOT_FOUND [ 0.182708] ACPI: Executed 3 blocks of module-level executable AML code [ 0.186623] ACPI: Interpreter enabled [ 0.186627] ACPI: (supports S0 S3 S4 S5) [ 0.186648] ACPI: Using IOAPIC for interrupt routing [ 0.186685] PCI: MCFG configuration 0: base e0000000 segment 0 buses 0 - 255 [ 0.189988] PCI: MCFG area at e0000000 reserved in ACPI motherboard resources [ 0.189990] PCI: Using MMCONFIG for extended config space [ 0.195685] ACPI Warning: Incorrect checksum in table [OEMB] - 2A, should be 29 (20090903/tbutils-314) [ 0.195772] ACPI: No dock devices found. [ 0.195892] ACPI: PCI Root Bridge [PCI0] (0000:00) [ 0.196034] pci 0000:00:06.0: PME# supported from D0 D3hot D3cold [ 0.196037] pci 0000:00:06.0: PME# disabled [ 0.196102] pci 0000:00:11.0: reg 10 io port: [0xa000-0xa007] [ 0.196109] pci 0000:00:11.0: reg 14 io port: [0x9000-0x9003] [ 0.196116] pci 0000:00:11.0: reg 18 io port: [0x8000-0x8007] [ 0.196123] pci 0000:00:11.0: reg 1c io port: [0x7000-0x7003] [ 0.196130] pci 0000:00:11.0: reg 20 io port: [0x6000-0x600f] [ 0.196137] pci 0000:00:11.0: reg 24 32bit mmio: [0xfccff800-0xfccffbff] [ 0.196198] pci 0000:00:12.0: reg 10 32bit mmio: [0xfccfe000-0xfccfefff] [ 0.196255] pci 0000:00:12.1: reg 10 32bit mmio: [0xfccfd000-0xfccfdfff] [ 0.196329] pci 0000:00:12.2: reg 10 32bit mmio: [0xfccff000-0xfccff0ff] [ 0.196383] pci 0000:00:12.2: supports D1 D2 [ 0.196385] pci 0000:00:12.2: PME# supported from D0 D1 D2 D3hot [ 0.196389] pci 0000:00:12.2: PME# disabled [ 0.196422] pci 0000:00:13.0: reg 10 32bit mmio: [0xfccfc000-0xfccfcfff] [ 0.196479] pci 0000:00:13.1: reg 10 32bit mmio: [0xfccf7000-0xfccf7fff] [ 0.196554] pci 0000:00:13.2: reg 10 32bit mmio: [0xfccf6800-0xfccf68ff] [ 0.196608] pci 0000:00:13.2: supports D1 D2 [ 0.196610] pci 0000:00:13.2: PME# supported from D0 D1 D2 D3hot [ 0.196614] pci 0000:00:13.2: PME# disabled [ 0.196734] pci 0000:00:14.1: reg 10 io port: [0x00-0x07] [ 0.196741] pci 0000:00:14.1: reg 14 io port: [0x00-0x03] [ 0.196748] pci 0000:00:14.1: reg 18 io port: [0x00-0x07] [ 0.196755] pci 0000:00:14.1: reg 1c io port: [0x00-0x03] [ 0.196761] pci 0000:00:14.1: reg 20 io port: [0xff00-0xff0f] [ 0.196829] pci 0000:00:14.2: reg 10 64bit mmio: [0xfccf0000-0xfccf3fff] [ 0.196874] pci 0000:00:14.2: PME# supported from D0 D3hot D3cold [ 0.196878] pci 0000:00:14.2: PME# disabled [ 0.196990] pci 0000:00:14.5: reg 10 32bit mmio: [0xfccf5000-0xfccf5fff] [ 0.197125] pci 0000:01:05.0: reg 10 32bit mmio pref: [0xb0000000-0xbfffffff] [ 0.197129] pci 0000:01:05.0: reg 14 io port: [0xb000-0xb0ff] [ 0.197133] pci 0000:01:05.0: reg 18 32bit mmio: [0xfcef0000-0xfcefffff] [ 0.197141] pci 0000:01:05.0: reg 24 32bit mmio: [0xfcd00000-0xfcdfffff] [ 0.197153] pci 0000:01:05.0: supports D1 D2 [ 0.197173] pci 0000:01:05.1: reg 10 32bit mmio: [0xfcee8000-0xfceebfff] [ 0.197194] pci 0000:01:05.1: supports D1 D2 [ 0.197237] pci 0000:00:01.0: bridge io port: [0xb000-0xbfff] [ 0.197240] pci 0000:00:01.0: bridge 32bit mmio: [0xfcd00000-0xfcefffff] [ 0.197244] pci 0000:00:01.0: bridge 64bit mmio pref: [0xb0000000-0xbfffffff] [ 0.197280] pci 0000:02:00.0: reg 10 io port: [0xc800-0xc8ff] [ 0.197296] pci 0000:02:00.0: reg 18 64bit mmio: [0xfcfff000-0xfcffffff] [ 0.197307] pci 0000:02:00.0: reg 20 64bit mmio pref: [0xcfff0000-0xcfffffff] [ 0.197314] pci 0000:02:00.0: reg 30 32bit mmio pref: [0xfcfc0000-0xfcfdffff] [ 0.197345] pci 0000:02:00.0: supports D1 D2 [ 0.197347] pci 0000:02:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.197351] pci 0000:02:00.0: PME# disabled [ 0.197413] pci 0000:00:06.0: bridge io port: [0xc000-0xcfff] [ 0.197415] pci 0000:00:06.0: bridge 32bit mmio: [0xfcf00000-0xfcffffff] [ 0.197419] pci 0000:00:06.0: bridge 64bit mmio pref: [0xcff00000-0xcfffffff] [ 0.197471] pci 0000:03:06.0: reg 10 io port: [0xe800-0xe807] [ 0.197480] pci 0000:03:06.0: reg 14 io port: [0xe400-0xe403] [ 0.197488] pci 0000:03:06.0: reg 18 io port: [0xe000-0xe007] [ 0.197496] pci 0000:03:06.0: reg 1c io port: [0xd800-0xd803] [ 0.197504] pci 0000:03:06.0: reg 20 io port: [0xd400-0xd40f] [ 0.197513] pci 0000:03:06.0: reg 24 32bit mmio: [0xfebffc00-0xfebffdff] [ 0.197521] pci 0000:03:06.0: reg 30 32bit mmio pref: [0xfeb00000-0xfeb7ffff] [ 0.197545] pci 0000:03:06.0: supports D1 D2 [ 0.197588] pci 0000:03:07.0: reg 10 32bit mmio: [0xfd000000-0xfdffffff] [ 0.197597] pci 0000:03:07.0: reg 14 32bit mmio pref: [0xd0000000-0xdfffffff] [ 0.197630] pci 0000:03:07.0: reg 30 32bit mmio pref: [0xfebc0000-0xfebdffff] [ 0.197700] pci 0000:00:14.4: transparent bridge [ 0.197704] pci 0000:00:14.4: bridge io port: [0xd000-0xefff] [ 0.197708] pci 0000:00:14.4: bridge 32bit mmio: [0xfd000000-0xfebfffff] [ 0.197713] pci 0000:00:14.4: bridge 32bit mmio pref: [0xd0000000-0xdfffffff] [ 0.197725] pci_bus 0000:00: on NUMA node 0 [ 0.197729] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.197915] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P1._PRT] [ 0.197989] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0PC._PRT] [ 0.201814] ACPI: PCI Interrupt Link [LNKA] (IRQs 4 *7 10 11 12 14 15) [ 0.201891] ACPI: PCI Interrupt Link [LNKB] (IRQs 4 7 *10 11 12 14 15) [ 0.201967] ACPI: PCI Interrupt Link [LNKC] (IRQs 4 7 *10 11 12 14 15) [ 0.202043] ACPI: PCI Interrupt Link [LNKD] (IRQs 4 7 10 *11 12 14 15) [ 0.202119] ACPI: PCI Interrupt Link [LNKE] (IRQs 4 7 10 11 12 14 15) *0, disabled. [ 0.202196] ACPI: PCI Interrupt Link [LNKF] (IRQs 4 7 *10 11 12 14 15) [ 0.202272] ACPI: PCI Interrupt Link [LNKG] (IRQs 4 7 10 *11 12 14 15) [ 0.202347] ACPI: PCI Interrupt Link [LNKH] (IRQs 4 7 10 11 12 14 15) *0, disabled. [ 0.202445] vgaarb: device added: PCI:0000:01:05.0,decodes=io+mem,owns=io+mem,locks=none [ 0.202452] vgaarb: device added: PCI:0000:03:07.0,decodes=io+mem,owns=none,locks=none [ 0.202454] vgaarb: loaded [ 0.202545] SCSI subsystem initialized [ 0.202613] libata version 3.00 loaded. [ 0.202667] usbcore: registered new interface driver usbfs [ 0.202677] usbcore: registered new interface driver hub [ 0.202698] usbcore: registered new device driver usb [ 0.202797] ACPI: WMI: Mapper loaded [ 0.202798] PCI: Using ACPI for IRQ routing [ 0.202945] NetLabel: Initializing [ 0.202946] NetLabel: domain hash size = 128 [ 0.202948] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.202962] NetLabel: unlabeled traffic allowed by default [ 0.202993] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 24, 0 [ 0.202998] hpet0: 4 comparators, 32-bit 14.318180 MHz counter [ 0.205008] Switching to clocksource hpet [ 0.205438] AppArmor: AppArmor Filesystem Enabled [ 0.205452] pnp: PnP ACPI init [ 0.205466] ACPI: bus type pnp registered [ 0.208319] pnp: PnP ACPI: found 14 devices [ 0.208321] ACPI: ACPI bus type pnp unregistered [ 0.208324] PnPBIOS: Disabled by ACPI PNP [ 0.208338] system 00:08: iomem range 0xfec00000-0xfec00fff could not be reserved [ 0.208341] system 00:08: iomem range 0xfee00000-0xfee00fff has been reserved [ 0.208346] system 00:09: ioport range 0x4d0-0x4d1 has been reserved [ 0.208348] system 00:09: ioport range 0x40b-0x40b has been reserved [ 0.208351] system 00:09: ioport range 0x4d6-0x4d6 has been reserved [ 0.208353] system 00:09: ioport range 0xc00-0xc01 has been reserved [ 0.208356] system 00:09: ioport range 0xc14-0xc14 has been reserved [ 0.208358] system 00:09: ioport range 0xc50-0xc51 has been reserved [ 0.208360] system 00:09: ioport range 0xc52-0xc52 has been reserved [ 0.208363] system 00:09: ioport range 0xc6c-0xc6c has been reserved [ 0.208365] system 00:09: ioport range 0xc6f-0xc6f has been reserved [ 0.208368] system 00:09: ioport range 0xcd0-0xcd1 has been reserved [ 0.208370] system 00:09: ioport range 0xcd2-0xcd3 has been reserved [ 0.208373] system 00:09: ioport range 0xcd4-0xcd5 has been reserved [ 0.208375] system 00:09: ioport range 0xcd6-0xcd7 has been reserved [ 0.208378] system 00:09: ioport range 0xcd8-0xcdf has been reserved [ 0.208380] system 00:09: ioport range 0xa7a-0xb1f has been reserved [ 0.208382] system 00:09: ioport range 0xb30-0xbff has been reserved [ 0.208385] system 00:09: ioport range 0x800-0x89f has been reserved [ 0.208387] system 00:09: ioport range 0xb20-0xb3f could not be reserved [ 0.208390] system 00:09: ioport range 0x900-0x90f has been reserved [ 0.208393] system 00:09: ioport range 0x910-0x91f has been reserved [ 0.208395] system 00:09: ioport range 0xfe00-0xfefe has been reserved [ 0.208398] system 00:09: iomem range 0xffb80000-0xffbfffff has been reserved [ 0.208401] system 00:09: iomem range 0xfec10000-0xfec1001f has been reserved [ 0.208406] system 00:0b: ioport range 0xe00-0xe0f has been reserved [ 0.208408] system 00:0b: ioport range 0xe80-0xe8f has been reserved [ 0.208411] system 00:0b: ioport range 0xf40-0xf4f has been reserved [ 0.208413] system 00:0b: ioport range 0xa30-0xa3f has been reserved [ 0.208417] system 00:0c: iomem range 0xe0000000-0xefffffff has been reserved [ 0.208422] system 00:0d: iomem range 0x0-0x9ffff could not be reserved [ 0.208425] system 00:0d: iomem range 0xc0000-0xcffff could not be reserved [ 0.208427] system 00:0d: iomem range 0xe0000-0xfffff could not be reserved [ 0.208430] system 00:0d: iomem range 0x100000-0xafefffff could not be reserved [ 0.208432] system 00:0d: iomem range 0xfec00000-0xffffffff could not be reserved [ 0.214452] Freeing initrd memory: 2547k freed [ 0.243084] pci 0000:03:06.0: BAR 6: address space collision on of device [0xfeb00000-0xfeb7ffff] [ 0.243087] pci 0000:03:07.0: BAR 6: address space collision on of device [0xfebc0000-0xfebdffff] [ 0.243103] pci 0000:00:01.0: PCI bridge, secondary bus 0000:01 [ 0.243106] pci 0000:00:01.0: IO window: 0xb000-0xbfff [ 0.243109] pci 0000:00:01.0: MEM window: 0xfcd00000-0xfcefffff [ 0.243112] pci 0000:00:01.0: PREFETCH window: 0x000000b0000000-0x000000bfffffff [ 0.243117] pci 0000:00:06.0: PCI bridge, secondary bus 0000:02 [ 0.243119] pci 0000:00:06.0: IO window: 0xc000-0xcfff [ 0.243122] pci 0000:00:06.0: MEM window: 0xfcf00000-0xfcffffff [ 0.243125] pci 0000:00:06.0: PREFETCH window: 0x000000cff00000-0x000000cfffffff [ 0.243132] pci 0000:00:14.4: PCI bridge, secondary bus 0000:03 [ 0.243135] pci 0000:00:14.4: IO window: 0xd000-0xefff [ 0.243141] pci 0000:00:14.4: MEM window: 0xfd000000-0xfebfffff [ 0.243145] pci 0000:00:14.4: PREFETCH window: 0xd0000000-0xdfffffff [ 0.243161] alloc irq_desc for 18 on node -1 [ 0.243163] alloc kstat_irqs on node -1 [ 0.243168] pci 0000:00:06.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 0.243171] pci 0000:00:06.0: setting latency timer to 64 [ 0.243179] pci_bus 0000:00: resource 0 io: [0x00-0xffff] [ 0.243181] pci_bus 0000:00: resource 1 mem: [0x000000-0xffffffff] [ 0.243183] pci_bus 0000:01: resource 0 io: [0xb000-0xbfff] [ 0.243186] pci_bus 0000:01: resource 1 mem: [0xfcd00000-0xfcefffff] [ 0.243188] pci_bus 0000:01: resource 2 pref mem [0xb0000000-0xbfffffff] [ 0.243190] pci_bus 0000:02: resource 0 io: [0xc000-0xcfff] [ 0.243193] pci_bus 0000:02: resource 1 mem: [0xfcf00000-0xfcffffff] [ 0.243195] pci_bus 0000:02: resource 2 pref mem [0xcff00000-0xcfffffff] [ 0.243197] pci_bus 0000:03: resource 0 io: [0xd000-0xefff] [ 0.243200] pci_bus 0000:03: resource 1 mem: [0xfd000000-0xfebfffff] [ 0.243202] pci_bus 0000:03: resource 2 pref mem [0xd0000000-0xdfffffff] [ 0.243204] pci_bus 0000:03: resource 3 io: [0x00-0xffff] [ 0.243207] pci_bus 0000:03: resource 4 mem: [0x000000-0xffffffff] [ 0.243238] NET: Registered protocol family 2 [ 0.243318] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.243584] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.244155] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.244449] TCP: Hash tables configured (established 131072 bind 65536) [ 0.244451] TCP reno registered [ 0.244535] NET: Registered protocol family 1 [ 0.340019] pci 0000:01:05.0: Boot video device [ 0.340195] cpufreq-nforce2: No nForce2 chipset. [ 0.340215] Scanning for low memory corruption every 60 seconds [ 0.340295] audit: initializing netlink socket (disabled) [ 0.340303] type=2000 audit(1266003757.340:1): initialized [ 0.348147] highmem bounce pool size: 64 pages [ 0.348152] HugeTLB registered 4 MB page size, pre-allocated 0 pages [ 0.349311] VFS: Disk quotas dquot_6.5.2 [ 0.349359] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 0.349801] fuse init (API version 7.13) [ 0.349866] msgmni has been set to 1685 [ 0.350035] alg: No test for stdrng (krng) [ 0.350042] io scheduler noop registered [ 0.350044] io scheduler anticipatory registered [ 0.350046] io scheduler deadline registered [ 0.350078] io scheduler cfq registered (default) [ 0.350201] alloc irq_desc for 25 on node -1 [ 0.350203] alloc kstat_irqs on node -1 [ 0.350210] pcieport 0000:00:06.0: irq 25 for MSI/MSI-X [ 0.350216] pcieport 0000:00:06.0: setting latency timer to 64 [ 0.350270] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.350288] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.350373] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 0.350381] ACPI: Power Button [PWRB] [ 0.350418] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 [ 0.350421] ACPI: Power Button [PWRF] [ 0.350677] processor LNXCPU:00: registered as cooling_device0 [ 0.350703] processor LNXCPU:01: registered as cooling_device1 [ 0.352717] thermal LNXTHERM:01: registered as thermal_zone0 [ 0.352723] ACPI: Thermal Zone [THRM] (30 C) [ 0.352801] isapnp: Scanning for PnP cards... [ 0.353849] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.353965] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 0.354244] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 0.355106] brd: module loaded [ 0.355476] loop: module loaded [ 0.355548] input: Macintosh mouse button emulation as /devices/virtual/input/input2 [ 0.355621] ahci 0000:00:11.0: version 3.0 [ 0.355640] alloc irq_desc for 22 on node -1 [ 0.355642] alloc kstat_irqs on node -1 [ 0.355648] ahci 0000:00:11.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 0.355689] alloc irq_desc for 26 on node -1 [ 0.355690] alloc kstat_irqs on node -1 [ 0.355701] ahci 0000:00:11.0: irq 26 for MSI/MSI-X [ 0.355820] ahci 0000:00:11.0: AHCI 0001.0100 32 slots 6 ports 3 Gbps 0x3f impl SATA mode [ 0.355823] ahci 0000:00:11.0: flags: 64bit ncq sntf ilck pm led clo pmp pio slum part ccc [ 0.356403] scsi0 : ahci [ 0.356498] scsi1 : ahci [ 0.356544] scsi2 : ahci [ 0.356588] scsi3 : ahci [ 0.356633] scsi4 : ahci [ 0.356677] scsi5 : ahci [ 0.356814] ata1: SATA max UDMA/133 abar m1024@0xfccff800 port 0xfccff900 irq 26 [ 0.356817] ata2: SATA max UDMA/133 abar m1024@0xfccff800 port 0xfccff980 irq 26 [ 0.356821] ata3: SATA max UDMA/133 abar m1024@0xfccff800 port 0xfccffa00 irq 26 [ 0.356825] ata4: SATA max UDMA/133 abar m1024@0xfccff800 port 0xfccffa80 irq 26 [ 0.356828] ata5: SATA max UDMA/133 abar m1024@0xfccff800 port 0xfccffb00 irq 26 [ 0.356832] ata6: SATA max UDMA/133 abar m1024@0xfccff800 port 0xfccffb80 irq 26 [ 0.356923] sata_sil 0000:03:06.0: version 2.4 [ 0.356955] alloc irq_desc for 21 on node -1 [ 0.356957] alloc kstat_irqs on node -1 [ 0.356962] sata_sil 0000:03:06.0: PCI INT A -> GSI 21 (level, low) -> IRQ 21 [ 0.357082] scsi6 : sata_sil [ 0.357149] scsi7 : sata_sil [ 0.357178] ata7: SATA max UDMA/100 mmio m512@0xfebffc00 tf 0xfebffc80 irq 21 [ 0.357182] ata8: SATA max UDMA/100 mmio m512@0xfebffc00 tf 0xfebffcc0 irq 21 [ 0.357322] alloc irq_desc for 16 on node -1 [ 0.357324] alloc kstat_irqs on node -1 [ 0.357328] pata_atiixp 0000:00:14.1: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.357358] pata_atiixp 0000:00:14.1: setting latency timer to 64 [ 0.357445] scsi8 : pata_atiixp [ 0.357512] scsi9 : pata_atiixp [ 0.358506] ata9: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0xff00 irq 14 [ 0.358508] ata10: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0xff08 irq 15 [ 0.359051] Fixed MDIO Bus: probed [ 0.359079] PPP generic driver version 2.4.2 [ 0.359129] tun: Universal TUN/TAP device driver, 1.6 [ 0.359130] tun: (C) 1999-2004 Max Krasnyansky [ 0.359207] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.359226] alloc irq_desc for 17 on node -1 [ 0.359228] alloc kstat_irqs on node -1 [ 0.359233] ehci_hcd 0000:00:12.2: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 0.359247] ehci_hcd 0000:00:12.2: EHCI Host Controller [ 0.359272] ehci_hcd 0000:00:12.2: new USB bus registered, assigned bus number 1 [ 0.359293] ehci_hcd 0000:00:12.2: applying AMD SB600/SB700 USB freeze workaround [ 0.359308] ehci_hcd 0000:00:12.2: debug port 1 [ 0.359328] ehci_hcd 0000:00:12.2: irq 17, io mem 0xfccff000 [ 0.368014] ehci_hcd 0000:00:12.2: USB 2.0 started, EHCI 1.00 [ 0.368084] usb usb1: configuration #1 chosen from 1 choice [ 0.368108] hub 1-0:1.0: USB hub found [ 0.368115] hub 1-0:1.0: 6 ports detected [ 0.368170] alloc irq_desc for 19 on node -1 [ 0.368172] alloc kstat_irqs on node -1 [ 0.368177] ehci_hcd 0000:00:13.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.368185] ehci_hcd 0000:00:13.2: EHCI Host Controller [ 0.368211] ehci_hcd 0000:00:13.2: new USB bus registered, assigned bus number 2 [ 0.368231] ehci_hcd 0000:00:13.2: applying AMD SB600/SB700 USB freeze workaround [ 0.368245] ehci_hcd 0000:00:13.2: debug port 1 [ 0.368261] ehci_hcd 0000:00:13.2: irq 19, io mem 0xfccf6800 [ 0.380014] ehci_hcd 0000:00:13.2: USB 2.0 started, EHCI 1.00 [ 0.380070] usb usb2: configuration #1 chosen from 1 choice [ 0.380090] hub 2-0:1.0: USB hub found [ 0.380096] hub 2-0:1.0: 6 ports detected [ 0.380150] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.380164] ohci_hcd 0000:00:12.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.380172] ohci_hcd 0000:00:12.0: OHCI Host Controller [ 0.380197] ohci_hcd 0000:00:12.0: new USB bus registered, assigned bus number 3 [ 0.380219] ohci_hcd 0000:00:12.0: irq 16, io mem 0xfccfe000 [ 0.440057] usb usb3: configuration #1 chosen from 1 choice [ 0.440077] hub 3-0:1.0: USB hub found [ 0.440086] hub 3-0:1.0: 3 ports detected [ 0.440127] ohci_hcd 0000:00:12.1: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.440135] ohci_hcd 0000:00:12.1: OHCI Host Controller [ 0.440172] ohci_hcd 0000:00:12.1: new USB bus registered, assigned bus number 4 [ 0.440186] ohci_hcd 0000:00:12.1: irq 16, io mem 0xfccfd000 [ 0.500060] usb usb4: configuration #1 chosen from 1 choice [ 0.500080] hub 4-0:1.0: USB hub found [ 0.500090] hub 4-0:1.0: 3 ports detected [ 0.500132] ohci_hcd 0000:00:13.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 0.500140] ohci_hcd 0000:00:13.0: OHCI Host Controller [ 0.500166] ohci_hcd 0000:00:13.0: new USB bus registered, assigned bus number 5 [ 0.500186] ohci_hcd 0000:00:13.0: irq 18, io mem 0xfccfc000 [ 0.560055] usb usb5: configuration #1 chosen from 1 choice [ 0.560075] hub 5-0:1.0: USB hub found [ 0.560084] hub 5-0:1.0: 3 ports detected [ 0.560124] ohci_hcd 0000:00:13.1: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 0.560132] ohci_hcd 0000:00:13.1: OHCI Host Controller [ 0.560158] ohci_hcd 0000:00:13.1: new USB bus registered, assigned bus number 6 [ 0.560171] ohci_hcd 0000:00:13.1: irq 18, io mem 0xfccf7000 [ 0.620067] usb usb6: configuration #1 chosen from 1 choice [ 0.620087] hub 6-0:1.0: USB hub found [ 0.620095] hub 6-0:1.0: 3 ports detected [ 0.620141] ohci_hcd 0000:00:14.5: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.620150] ohci_hcd 0000:00:14.5: OHCI Host Controller [ 0.620174] ohci_hcd 0000:00:14.5: new USB bus registered, assigned bus number 7 [ 0.620188] ohci_hcd 0000:00:14.5: irq 18, io mem 0xfccf5000 [ 0.676034] ata6: SATA link down (SStatus 0 SControl 300) [ 0.676187] ata7: SATA link up 1.5 Gbps (SStatus 113 SControl 310) [ 0.680390] usb usb7: configuration #1 chosen from 1 choice [ 0.680410] hub 7-0:1.0: USB hub found [ 0.680419] hub 7-0:1.0: 2 ports detected [ 0.680460] uhci_hcd: USB Universal Host Controller Interface driver [ 0.680532] PNP: PS/2 Controller [PNP0303:PS2K] at 0x60,0x64 irq 1 [ 0.680534] PNP: PS/2 appears to have AUX port disabled, if this is incorrect please boot with i8042.nopnp [ 0.680653] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.680732] mice: PS/2 mouse device common for all mice [ 0.680823] rtc_cmos 00:03: RTC can wake from S4 [ 0.680858] rtc_cmos 00:03: rtc core: registered rtc_cmos as rtc0 [ 0.680884] rtc0: alarms up to one month, y3k, 114 bytes nvram, hpet irqs [ 0.680964] device-mapper: uevent: version 1.0.3 [ 0.681050] device-mapper: ioctl: 4.15.0-ioctl (2009-04-01) initialised: dm-devel@redhat.com [ 0.681104] device-mapper: multipath: version 1.1.0 loaded [ 0.681107] device-mapper: multipath round-robin: version 1.0.0 loaded [ 0.681201] EISA: Probing bus 0 at eisa.0 [ 0.681226] Cannot allocate resource for EISA slot 6 [ 0.681228] Cannot allocate resource for EISA slot 7 [ 0.681230] Cannot allocate resource for EISA slot 8 [ 0.681232] EISA: Detected 0 cards. [ 0.681293] cpuidle: using governor ladder [ 0.681295] cpuidle: using governor menu [ 0.681652] TCP cubic registered [ 0.681769] NET: Registered protocol family 10 [ 0.682173] lo: Disabled Privacy Extensions [ 0.682420] NET: Registered protocol family 17 [ 0.682442] powernow-k8: Found 1 AMD Athlon(tm) 64 X2 Dual Core Processor 5200+ processors (2 cpu cores) (version 2.20.00) [ 0.682483] powernow-k8: 0 : fid 0x13 (2700 MHz), vid 0x8 [ 0.682485] powernow-k8: 1 : fid 0x12 (2600 MHz), vid 0x9 [ 0.682487] powernow-k8: 2 : fid 0x10 (2400 MHz), vid 0xb [ 0.682489] powernow-k8: 3 : fid 0xe (2200 MHz), vid 0xd [ 0.682491] powernow-k8: 4 : fid 0xc (2000 MHz), vid 0xf [ 0.682493] powernow-k8: 5 : fid 0xa (1800 MHz), vid 0x11 [ 0.682495] powernow-k8: 6 : fid 0x2 (1000 MHz), vid 0x12 [ 0.682527] Using IPI No-Shortcut mode [ 0.682588] PM: Resume from disk failed. [ 0.682598] registered taskstats version 1 [ 0.682923] Magic number: 14:575:748 [ 0.683005] rtc_cmos 00:03: setting system clock to 2010-02-12 19:42:38 UTC (1266003758) [ 0.683008] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.683009] EDD information not available. [ 0.700543] ata7.00: ATA-7: HDT722516DLA380, V43OA91A, max UDMA/133 [ 0.700545] ata7.00: 321672960 sectors, multi 0: LBA48 NCQ (depth 0/32) [ 0.700734] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3 [ 0.706554] isapnp: No Plug & Play device found [ 0.716539] ata7.00: configured for UDMA/100 [ 0.840021] ata5: softreset failed (device not ready) [ 0.840024] ata5: applying SB600 PMP SRST workaround and retrying [ 0.840040] ata4: softreset failed (device not ready) [ 0.840043] ata4: applying SB600 PMP SRST workaround and retrying [ 0.840059] ata2: softreset failed (device not ready) [ 0.840062] ata2: applying SB600 PMP SRST workaround and retrying [ 0.840078] ata1: softreset failed (device not ready) [ 0.840081] ata1: applying SB600 PMP SRST workaround and retrying [ 0.840097] ata3: softreset failed (device not ready) [ 0.840100] ata3: applying SB600 PMP SRST workaround and retrying [ 0.904020] usb 2-5: new high speed USB device using ehci_hcd and address 2 [ 1.004040] ata2: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.004061] ata4: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.004080] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.004099] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.004118] ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.004578] ata2.00: ATA-7: WDC WD2500KS-00MJB0, 02.01C03, max UDMA/133 [ 1.004581] ata2.00: 488397168 sectors, multi 0: LBA48 [ 1.005213] ata2.00: configured for UDMA/133 [ 1.010504] ata4.00: ATA-7: SAMSUNG HD103UI, 1AA01113, max UDMA7 [ 1.010507] ata4.00: 1953525168 sectors, multi 0: LBA48 NCQ (depth 31/32), AA [ 1.016772] ata1.00: ATA-8: WDC WD4000AAJS-00YFA0, 12.01C02, max UDMA/133 [ 1.016774] ata1.00: 781422768 sectors, multi 0: LBA48 NCQ (depth 31/32), AA [ 1.017040] ata4.00: configured for UDMA/133 [ 1.017729] ata1.00: configured for UDMA/133 [ 1.024515] ata5.00: ATA-7: WDC WD4000AAKS-00TMA0, 12.01C01, max UDMA/133 [ 1.024517] ata5.00: 781422768 sectors, multi 0: LBA48 NCQ (depth 31/32), AA [ 1.024704] ata3.00: ATA-8: WDC WD10EACS-00C7B0, 01.01B01, max UDMA/133 [ 1.024707] ata3.00: 1953525168 sectors, multi 0: LBA48 NCQ (depth 31/32), AA [ 1.025440] ata5.00: configured for UDMA/133 [ 1.025615] ata3.00: configured for UDMA/133 [ 1.032106] scsi 0:0:0:0: Direct-Access ATA WDC WD4000AAJS-0 12.0 PQ: 0 ANSI: 5 [ 1.032224] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 1.032313] scsi 1:0:0:0: Direct-Access ATA WDC WD2500KS-00M 02.0 PQ: 0 ANSI: 5 [ 1.032448] sd 1:0:0:0: [sdb] 488397168 512-byte logical blocks: (250 GB/232 GiB) [ 1.032471] sd 1:0:0:0: Attached scsi generic sg1 type 0 [ 1.032501] sd 1:0:0:0: [sdb] Write Protect is off [ 1.032503] sd 1:0:0:0: [sdb] Mode Sense: 00 3a 00 00 [ 1.032510] sd 0:0:0:0: [sda] 781422768 512-byte logical blocks: (400 GB/372 GiB) [ 1.032529] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.032550] sd 0:0:0:0: [sda] Write Protect is off [ 1.032553] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.032570] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.032663] sdb: [ 1.032719] sda: sda1 [ 1.037898] sd 0:0:0:0: [sda] Attached SCSI disk [ 1.038643] usb 2-5: configuration #1 chosen from 1 choice [ 1.040081] scsi 2:0:0:0: Direct-Access ATA WDC WD10EACS-00C 01.0 PQ: 0 ANSI: 5 [ 1.040171] sd 2:0:0:0: [sdc] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB) [ 1.040182] sd 2:0:0:0: Attached scsi generic sg2 type 0 [ 1.040213] sd 2:0:0:0: [sdc] Write Protect is off [ 1.040215] sd 2:0:0:0: [sdc] Mode Sense: 00 3a 00 00 [ 1.040236] sd 2:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.040250] scsi 3:0:0:0: Direct-Access ATA SAMSUNG HD103UI 1AA0 PQ: 0 ANSI: 5 [ 1.040346] sdc: [ 1.040348] sd 3:0:0:0: Attached scsi generic sg3 type 0 [ 1.040414] scsi 4:0:0:0: Direct-Access ATA WDC WD4000AAKS-0 12.0 PQ: 0 ANSI: 5 [ 1.040513] sd 4:0:0:0: [sde] 781422768 512-byte logical blocks: (400 GB/372 GiB) [ 1.040515] sd 4:0:0:0: Attached scsi generic sg4 type 0 [ 1.040561] sd 3:0:0:0: [sdd] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB) [ 1.040596] scsi 6:0:0:0: Direct-Access ATA HDT722516DLA380 V43O PQ: 0 ANSI: 5 [ 1.040599] sd 3:0:0:0: [sdd] Write Protect is off [ 1.040602] sd 3:0:0:0: [sdd] Mode Sense: 00 3a 00 00 [ 1.040619] sd 3:0:0:0: [sdd] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.040705] sd 6:0:0:0: [sdf] 321672960 512-byte logical blocks: (164 GB/153 GiB) [ 1.040720] sd 6:0:0:0: Attached scsi generic sg5 type 0 [ 1.040763] sd 4:0:0:0: [sde] Write Protect is off [ 1.040765] sd 4:0:0:0: [sde] Mode Sense: 00 3a 00 00 [ 1.040782] sd 6:0:0:0: [sdf] Write Protect is off [ 1.040785] sd 4:0:0:0: [sde] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.040789] sd 6:0:0:0: [sdf] Mode Sense: 00 3a 00 00 [ 1.040809] sd 6:0:0:0: [sdf] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.040896] sde: [ 1.040935] sdf: [ 1.041071] sdd: sde1 [ 1.044577] sd 4:0:0:0: [sde] Attached SCSI disk [ 1.048983] sdb1 [ 1.049125] sd 1:0:0:0: [sdb] Attached SCSI disk [ 1.051674] sdc1 [ 1.051820] sd 2:0:0:0: [sdc] Attached SCSI disk [ 1.052601] sdd1 [ 1.052739] sd 3:0:0:0: [sdd] Attached SCSI disk [ 1.055182] sdf1 [ 1.055334] sd 6:0:0:0: [sdf] Attached SCSI disk [ 1.300020] usb 3-1: new full speed USB device using ohci_hcd and address 2 [ 1.360060] ata8: SATA link up 1.5 Gbps (SStatus 113 SControl 310) [ 1.383064] ata8.00: ATA-8: WDC WD4000AAJS-00YFA0, 12.01C02, max UDMA/133 [ 1.383067] ata8.00: 781422768 sectors, multi 0: LBA48 NCQ (depth 0/32) [ 1.396946] ata8.00: configured for UDMA/100 [ 1.397015] scsi 7:0:0:0: Direct-Access ATA WDC WD4000AAJS-0 12.0 PQ: 0 ANSI: 5 [ 1.397108] sd 7:0:0:0: [sdg] 781422768 512-byte logical blocks: (400 GB/372 GiB) [ 1.397135] sd 7:0:0:0: Attached scsi generic sg6 type 0 [ 1.397149] sd 7:0:0:0: [sdg] Write Protect is off [ 1.397151] sd 7:0:0:0: [sdg] Mode Sense: 00 3a 00 00 [ 1.397181] sd 7:0:0:0: [sdg] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.397275] sdg: sdg1 [ 1.404266] sd 7:0:0:0: [sdg] Attached SCSI disk [ 1.461124] usb 3-1: configuration #1 chosen from 1 choice [ 1.463102] hub 3-1:1.0: USB hub found [ 1.465081] hub 3-1:1.0: 4 ports detected [ 1.568482] ata10.00: ATAPI: TSSTcorpCD/DVDW SH-S182M, SB03, max UDMA/33 [ 1.583771] ata10.01: ATA-7: WDC WD2500JB-00REA0, 20.00K20, max UDMA/100 [ 1.583774] ata10.01: 488397168 sectors, multi 16: LBA48 [ 1.596438] ata10.00: configured for UDMA/33 [ 1.604623] ata10.01: configured for UDMA/100 [ 1.606035] scsi 9:0:0:0: CD-ROM TSSTcorp CD/DVDW SH-S182M SB03 PQ: 0 ANSI: 5 [ 1.613283] sr0: scsi3-mmc drive: 48x/48x writer dvd-ram cd/rw xa/form2 cdda tray [ 1.613286] Uniform CD-ROM driver Revision: 3.20 [ 1.613354] sr 9:0:0:0: Attached scsi CD-ROM sr0 [ 1.613391] sr 9:0:0:0: Attached scsi generic sg7 type 5 [ 1.613452] scsi 9:0:1:0: Direct-Access ATA WDC WD2500JB-00R 20.0 PQ: 0 ANSI: 5 [ 1.613545] sd 9:0:1:0: Attached scsi generic sg8 type 0 [ 1.613549] sd 9:0:1:0: [sdh] 488397168 512-byte logical blocks: (250 GB/232 GiB) [ 1.613585] sd 9:0:1:0: [sdh] Write Protect is off [ 1.613587] sd 9:0:1:0: [sdh] Mode Sense: 00 3a 00 00 [ 1.613606] sd 9:0:1:0: [sdh] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.613703] sdh: sdh1 sdh2 < sdh5 > [ 1.626032] sd 9:0:1:0: [sdh] Attached SCSI disk [ 1.626054] Freeing unused kernel memory: 660k freed [ 1.626426] Write protecting the kernel text: 4784k [ 1.626454] Write protecting the kernel read-only data: 1916k [ 1.637922] udev: starting version 151 [ 1.740062] usb 3-2: new full speed USB device using ohci_hcd and address 3 [ 1.913182] usb 3-2: configuration #1 chosen from 1 choice [ 2.102739] kjournald starting. Commit interval 5 seconds [ 2.102749] EXT3-fs: mounted filesystem with ordered data mode. [ 3.803875] Adding 8499192k swap on /dev/mapper/new--lvm-swap. Priority:-1 extents:1 across:8499192k [ 4.052457] udev: starting version 151 [ 4.461515] EXT3 FS on dm-2, internal journal [ 5.308700] type=1505 audit(1266003763.125:2): operation="profile_load" pid=888 name="/sbin/dhclient3" [ 5.308929] type=1505 audit(1266003763.125:3): operation="profile_load" pid=888 name="/usr/lib/NetworkManager/nm-dhcp-client.action" [ 5.309057] type=1505 audit(1266003763.125:4): operation="profile_load" pid=888 name="/usr/lib/connman/scripts/dhclient-script" [ 5.644426] kjournald starting. Commit interval 5 seconds [ 5.644624] EXT3 FS on sdh1, internal journal [ 5.644629] EXT3-fs: mounted filesystem with ordered data mode. [ 5.672973] k8temp 0000:00:18.3: Temperature readouts might be wrong - check erratum #141 [ 5.930280] usbcore: registered new interface driver hiddev [ 5.930943] piix4_smbus 0000:00:14.0: SMBus Host Controller at 0xb00, revision 0 [ 5.933478] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:12.0/usb3/3-2/3-2:1.0/input/input4 [ 5.933570] generic-usb 0003:046D:C525.0001: input,hidraw0: USB HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:00:12.0-2/input0 [ 5.936120] Initializing USB Mass Storage driver... [ 5.936239] scsi10 : SCSI emulation for USB Mass Storage devices [ 5.936369] usbcore: registered new interface driver usb-storage [ 5.936371] USB Mass Storage support registered. [ 5.936540] usb-storage: device found at 2 [ 5.936541] usb-storage: waiting for device to settle before scanning [ 5.941332] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:12.0/usb3/3-2/3-2:1.1/input/input5 [ 5.941457] generic-usb 0003:046D:C525.0002: input,hiddev96,hidraw1: USB HID v1.11 Device [Logitech USB Receiver] on usb-0000:00:12.0-2/input1 [ 5.941481] usbcore: registered new interface driver usbhid [ 5.941483] usbhid: v2.6:USB HID core driver [ 5.944704] vga16fb: initializing [ 5.944709] vga16fb: mapped to 0xc00a0000 [ 5.944762] fb0: VGA16 VGA frame buffer device [ 6.236552] shpchp 0000:00:01.0: HPC vendor_id 1022 device_id 9602 ss_vid 0 ss_did 0 [ 6.236557] shpchp 0000:00:01.0: Cannot reserve MMIO region [ 6.236907] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 [ 6.238038] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded [ 6.238062] r8169 0000:02:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 6.238103] r8169 0000:02:00.0: setting latency timer to 64 [ 6.238139] alloc irq_desc for 27 on node -1 [ 6.238141] alloc kstat_irqs on node -1 [ 6.238154] r8169 0000:02:00.0: irq 27 for MSI/MSI-X [ 6.238685] eth0: RTL8168c/8111c at 0xf8162000, 00:21:97:02:08:07, XID 1c4000c0 IRQ 27 [ 6.273533] Linux agpgart interface v0.103 [ 6.333427] [drm] Initialized drm 1.1.0 20060810 [ 6.578699] lp: driver loaded but no devices found [ 6.937634] [drm] radeon defaulting to kernel modesetting. [ 6.937637] [drm] radeon kernel modesetting enabled. [ 6.937701] radeon 0000:01:05.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 6.937705] radeon 0000:01:05.0: setting latency timer to 64 [ 6.939135] [drm] radeon: Initializing kernel modesetting. [ 6.939159] [drm] register mmio base: 0xFCEF0000 [ 6.939160] [drm] register mmio size: 65536 [ 6.940197] ATOM BIOS: 113 [ 6.940202] [drm] Clocks initialized ! [ 6.940362] [drm] Detected VRAM RAM=256M, BAR=256M [ 6.940366] [drm] RAM width 32bits DDR [ 6.953408] [TTM] Zone kernel: Available graphics memory: 431768 kiB. [ 6.953410] [TTM] Zone highmem: Available graphics memory: 1418236 kiB. [ 6.953425] [drm] radeon: 256M of VRAM memory ready [ 6.953426] [drm] radeon: 512M of GTT memory ready. [ 6.953518] [drm] Loading RS780 CP Microcode [ 6.953777] platform radeon_cp.0: firmware: requesting radeon/RS780_pfp.bin [ 6.961107] Console: switching to colour frame buffer device 80x30 [ 7.251602] platform radeon_cp.0: firmware: requesting radeon/RS780_me.bin [ 7.432087] BUG: unable to handle kernel NULL pointer dereference at (null) [ 7.432631] IP: [] __mutex_lock_slowpath+0x8a/0x130 [ 7.433022] *pde = af517067 [ 7.433284] Oops: 0002 [#1] SMP [ 7.435404] last sysfs file: /sys/devices/pci0000:00/0000:00:14.1/host9/target9:0:1/9:0:1:0/block/sdh/dev [ 7.436006] Modules linked in: snd_seq snd_timer snd_seq_device radeon(+) ttm drm_kms_helper fbcon tileblit font bitblit softcursor snd soundcore drm agpgart i2c_algo_bit shpchp joydev snd_page_alloc r8169 vga16fb usb_storage vgastate mii i2c_piix4 usbhid k8temp lp parport [ 7.457480] [ 7.457480] Pid: 410, comm: plymouthd Not tainted (2.6.32-13-generic #18-Ubuntu) A780GM-A [ 7.457480] EIP: 0060:[] EFLAGS: 00010246 CPU: 0 [ 7.457480] EIP is at __mutex_lock_slowpath+0x8a/0x130 [ 7.457480] EAX: 00000000 EBX: f63f727c ECX: f63f7284 EDX: f6945ec4 [ 7.457480] ESI: f63f7280 EDI: f63f728c EBP: f6945edc ESP: f6945eb8 [ 7.457480] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 7.457480] Process plymouthd (pid: 410, ti=f6944000 task=f649a670 task.ti=f6944000) [ 7.457480] Stack: [ 7.457480] 00000000 f63f7284 f649a670 f63f7284 00000000 f63f7000 f63f727c f62b96c0 [ 7.457480] <0> f63f727c f6945eec c05a4f35 f62b96c0 f62b96c0 f6945f00 f81eb123 f62b96c0 [ 7.457480] <0> f64dd000 f63f7000 f6945f44 f81e2ecf 00000001 f81f2365 f81f1980 f81f3890 [ 7.457480] Call Trace: [ 7.457480] [] ? mutex_lock+0x25/0x40 [ 7.604514] [] ? drm_fb_release+0x23/0x70 [drm] [ 7.604514] [] ? drm_release+0x2ff/0x390 [drm] [ 7.604514] [] ? __fput+0xdf/0x1f0 [ 7.604514] [] ? fput+0x1d/0x30 [ 7.604514] [] ? filp_close+0x4c/0x80 [ 7.604514] [] ? sys_close+0x78/0xc0 [ 7.604514] [] ? syscall_call+0x7/0xb [ 7.604514] Code: 18 63 7f bd 90 8d 74 26 00 8d 73 04 89 f0 e8 ce 11 00 00 8d 55 e8 8d 43 08 89 45 e0 8b 43 0c 89 53 0c 8b 4d e0 89 45 ec 89 4d e8 <89> 10 8b 45 e4 ba ff ff ff ff 89 45 f0 89 d0 87 03 83 f8 01 74 [ 7.604514] EIP: [] __mutex_lock_slowpath+0x8a/0x130 SS:ESP 0068:f6945eb8 [ 7.604514] CR2: 0000000000000000 [ 7.607248] ---[ end trace bdc69ac9537b9c32 ]--- [ 7.825238] [drm] GART: num cpu pages 131072, num gpu pages 131072 [ 7.869756] [drm] ring test succeeded in 0 usecs [ 7.881065] [drm] radeon: ib pool ready. [ 7.891970] [drm] ib test succeeded in 0 usecs [ 7.902989] [drm] Radeon Display Connectors [ 7.913446] [drm] Connector 0: [ 7.923464] [drm] VGA [ 7.933096] [drm] DDC: 0x7e40 0x7e40 0x7e44 0x7e44 0x7e48 0x7e48 0x7e4c 0x7e4c [ 7.952371] [drm] Encoders: [ 7.963869] [drm] CRT1: INTERNAL_KLDSCP_DAC1 [ 7.973582] [drm] Connector 1: [ 7.983207] [drm] HDMI-A [ 7.992711] [drm] DDC: 0x7e50 0x7e50 0x7e54 0x7e54 0x7e58 0x7e58 0x7e5c 0x7e5c [ 8.012360] [drm] Encoders: [ 8.023952] [drm] DFP3: INTERNAL_KLDSCP_LVTMA [ 8.070911] [drm] fb mappable at 0xB0141000 [ 8.081737] [drm] vram apper at 0xB0000000 [ 8.092159] [drm] size 1996800 [ 8.102184] [drm] fb depth is 24 [ 8.112111] [drm] pitch is 3328 [ 8.121433] kjournald starting. Commit interval 5 seconds [ 8.122878] fb1: radeondrmfb frame buffer device [ 8.122881] registered panic notifier [ 8.122886] [drm] Initialized radeon 2.0.0 20080528 for 0000:01:05.0 on minor 0 [ 8.166610] EXT3 FS on dm-5, internal journal [ 8.176254] EXT3-fs: mounted filesystem with ordered data mode. [ 8.376043] HDA Intel 0000:00:14.2: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 8.563319] input: HDA Digital PCBeep as /devices/pci0000:00/0000:00:14.2/input/input6 [ 8.706824] kjournald starting. Commit interval 5 seconds [ 8.717339] EXT3 FS on dm-3, internal journal [ 8.727742] EXT3-fs: mounted filesystem with ordered data mode. [ 8.844151] input: HDA ATI SB Line In at Ext Rear Jack as /devices/pci0000:00/0000:00:14.2/sound/card0/input7 [ 8.865919] input: HDA ATI SB Mic at Ext Front Jack as /devices/pci0000:00/0000:00:14.2/sound/card0/input8 [ 8.887927] input: HDA ATI SB Mic at Ext Rear Jack as /devices/pci0000:00/0000:00:14.2/sound/card0/input9 [ 8.911538] input: HDA ATI SB Speaker at Ext Rear Jack as /devices/pci0000:00/0000:00:14.2/sound/card0/input10 [ 8.935871] input: HDA ATI SB Speaker at Ext Rear Jack as /devices/pci0000:00/0000:00:14.2/sound/card0/input11 [ 8.960861] input: HDA ATI SB Speaker at Ext Rear Jack as /devices/pci0000:00/0000:00:14.2/sound/card0/input12 [ 8.986944] input: HDA ATI SB Speaker at Ext Rear Jack as /devices/pci0000:00/0000:00:14.2/sound/card0/input13 [ 9.013446] kjournald starting. Commit interval 5 seconds [ 9.013825] input: HDA ATI SB HP Out at Ext Front Jack as /devices/pci0000:00/0000:00:14.2/sound/card0/input14 [ 9.036654] HDA Intel 0000:01:05.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 9.036678] HDA Intel 0000:01:05.1: setting latency timer to 64 [ 9.051109] EXT3 FS on dm-4, internal journal [ 9.051114] EXT3-fs: mounted filesystem with ordered data mode. [ 9.487430] kjournald starting. Commit interval 5 seconds [ 9.500607] EXT3 FS on dm-1, internal journal [ 9.513888] EXT3-fs: mounted filesystem with ordered data mode. [ 10.936149] usb-storage: device scan complete [ 10.944531] scsi 10:0:0:0: Direct-Access Generic USB SD Reader 1.00 PQ: 0 ANSI: 0 [ 10.945128] scsi 10:0:0:1: Direct-Access Generic USB CF Reader 1.01 PQ: 0 ANSI: 0 [ 10.945751] scsi 10:0:0:2: Direct-Access Generic USB SM Reader 1.02 PQ: 0 ANSI: 0 [ 10.946374] scsi 10:0:0:3: Direct-Access Generic USB MS Reader 1.03 PQ: 0 ANSI: 0 [ 10.946706] sd 10:0:0:0: Attached scsi generic sg9 type 0 [ 10.946788] sd 10:0:0:1: Attached scsi generic sg10 type 0 [ 10.946871] sd 10:0:0:2: Attached scsi generic sg11 type 0 [ 10.946953] sd 10:0:0:3: Attached scsi generic sg12 type 0 [ 11.107874] sd 10:0:0:0: [sdi] Attached SCSI removable disk [ 11.117236] sd 10:0:0:1: [sdj] Attached SCSI removable disk [ 11.117982] sd 10:0:0:2: [sdk] Attached SCSI removable disk [ 11.119716] sd 10:0:0:3: [sdl] Attached SCSI removable disk [ 13.135849] r8169: eth0: link up [ 13.139850] r8169: eth0: link up [ 13.729173] type=1505 audit(1266003771.545:5): operation="profile_load" pid=1577 name="/usr/share/gdm/guest-session/Xsession" [ 13.751110] type=1505 audit(1266003771.566:6): operation="profile_replace" pid=1578 name="/sbin/dhclient3" [ 13.772494] type=1505 audit(1266003771.588:7): operation="profile_replace" pid=1578 name="/usr/lib/NetworkManager/nm-dhcp-client.action" [ 13.793108] type=1505 audit(1266003771.609:8): operation="profile_replace" pid=1578 name="/usr/lib/connman/scripts/dhclient-script" [ 13.854519] type=1505 audit(1266003771.669:9): operation="profile_load" pid=1579 name="/usr/bin/evince" [ 13.878232] type=1505 audit(1266003771.693:10): operation="profile_load" pid=1579 name="/usr/bin/evince-previewer" [ 13.900476] type=1505 audit(1266003771.717:11): operation="profile_load" pid=1579 name="/usr/bin/evince-thumbnailer" [ 14.102009] type=1505 audit(1266003771.917:12): operation="profile_load" pid=1582 name="/usr/lib/cups/backend/cups-pdf" [ 14.102306] type=1505 audit(1266003771.917:13): operation="profile_load" pid=1582 name="/usr/sbin/cupsd" [ 14.117695] type=1505 audit(1266003771.933:14): operation="profile_load" pid=1583 name="/usr/sbin/tcpdump" [ 14.401871] vgaarb: device changed decodes: PCI:0000:01:05.0,olddecodes=io+mem,decodes=none:owns=io+mem [ 14.401876] vgaarb: transferring owner from PCI:0000:01:05.0 to PCI:0000:03:07.0 Bug: 560249 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.32-21-generic (buildd@yellow) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #32-Ubuntu SMP Fri Apr 16 08:09:38 UTC 2010 (Ubuntu 2.6.32-21.32-generic 2.6.32.11+drm33.2) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-2.6.32-21-generic root=UUID=50cc7340-4a5d-4a26-8d8e-1bc88476d3de ro quiet splash [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] Centaur CentaurHauls [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009dc00 (usable) [ 0.000000] BIOS-e820: 000000000009dc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000d0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 000000006fe80000 (usable) [ 0.000000] BIOS-e820: 000000006fe80000 - 000000006fe8d000 (ACPI data) [ 0.000000] BIOS-e820: 000000006fe8d000 - 000000006fe8f000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000006fe8f000 - 0000000080000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000fff00000 - 0000000100000000 (reserved) [ 0.000000] DMI present. [ 0.000000] Phoenix BIOS detected: BIOS may corrupt low RAM, working around it. [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] last_pfn = 0x6fe80 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-CFFFF write-protect [ 0.000000] D0000-DFFFF uncachable [ 0.000000] E0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0000000000 mask FF80000000 write-back [ 0.000000] 1 disabled [ 0.000000] 2 disabled [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] Scanning 0 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009dc00 (usable) [ 0.000000] modified: 000000000009dc00 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000d0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 000000006fe80000 (usable) [ 0.000000] modified: 000000006fe80000 - 000000006fe8d000 (ACPI data) [ 0.000000] modified: 000000006fe8d000 - 000000006fe8f000 (ACPI NVS) [ 0.000000] modified: 000000006fe8f000 - 0000000080000000 (reserved) [ 0.000000] modified: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fec10000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000fff00000 - 0000000100000000 (reserved) [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] init_memory_mapping: 0000000000000000-000000006fe80000 [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] 0000000000 - 006fe00000 page 2M [ 0.000000] 006fe00000 - 006fe80000 page 4k [ 0.000000] kernel direct mapping tables up to 6fe80000 @ 10000-14000 [ 0.000000] RAMDISK: 3728b000 - 37fef421 [ 0.000000] ACPI: RSDP 00000000000f8130 00024 (v02 PTLTD ) [ 0.000000] ACPI: XSDT 000000006fe84e00 0005C (v01 PTLTD ? XSDT 06040000 LTP 00000000) [ 0.000000] ACPI: FACP 000000006fe8cbae 000F4 (v03 ATI Herring 06040000 ATI 000F4240) [ 0.000000] ACPI: DSDT 000000006fe84e5c 07D52 (v01 ATI SB600 06040000 MSFT 03000001) [ 0.000000] ACPI: FACS 000000006fe8efc0 00040 [ 0.000000] ACPI: TCPA 000000006fe8cd16 00032 (v02 AMD 06040000 PTEC 00000000) [ 0.000000] ACPI: SSDT 000000006fe8cd48 000D3 (v01 PTLTD POWERNOW 06040000 LTP 00000001) [ 0.000000] ACPI: ASF! 000000006fe8ce1b 0012B (v32 DMA AMDTBL 06040000 PTL 00000001) [ 0.000000] ACPI: APIC 000000006fe8cf46 00046 (v01 PTLTD ? APIC 06040000 LTP 00000000) [ 0.000000] ACPI: MCFG 000000006fe8cf8c 0003C (v01 PTLTD MCFG 06040000 LTP 00000000) [ 0.000000] ACPI: HPET 000000006fe8cfc8 00038 (v01 PTLTD HPETTBL 06040000 LTP 00000001) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] Scanning NUMA topology in Northbridge 24 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-000000006fe80000 [ 0.000000] Bootmem setup node 0 0000000000000000-000000006fe80000 [ 0.000000] NODE_DATA [0000000000012000 - 0000000000016fff] [ 0.000000] bootmap [0000000000017000 - 0000000000024fcf] pages e [ 0.000000] (7 early reservations) ==> bootmem [0000000000 - 006fe80000] [ 0.000000] #0 [0000000000 - 0000001000] BIOS data page ==> [0000000000 - 0000001000] [ 0.000000] #1 [0000006000 - 0000008000] TRAMPOLINE ==> [0000006000 - 0000008000] [ 0.000000] #2 [0001000000 - 0001a29e64] TEXT DATA BSS ==> [0001000000 - 0001a29e64] [ 0.000000] #3 [003728b000 - 0037fef421] RAMDISK ==> [003728b000 - 0037fef421] [ 0.000000] #4 [000009dc00 - 0000100000] BIOS reserved ==> [000009dc00 - 0000100000] [ 0.000000] #5 [0001a2a000 - 0001a2a2ac] BRK ==> [0001a2a000 - 0001a2a2ac] [ 0.000000] #6 [0000010000 - 0000012000] PGTABLE ==> [0000010000 - 0000012000] [ 0.000000] found SMP MP-table at [ffff8800000f8160] f8160 [ 0.000000] [ffffea0000000000-ffffea00019fffff] PMD -> [ffff880002000000-ffff8800039fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal 0x00100000 -> 0x00100000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009d [ 0.000000] 0: 0x00000100 -> 0x0006fe80 [ 0.000000] On node 0 totalpages: 458253 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 103 pages reserved [ 0.000000] DMA zone: 3822 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 6211 pages used for memmap [ 0.000000] DMA32 zone: 448061 pages, LIFO batch:31 [ 0.000000] Detected use of extended apic ids on hypertransport bus [ 0.000000] ACPI: PM-Timer IO Port: 0x8008 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 1, version 33, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x43538301 base: 0xfed00000 [ 0.000000] SMP: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 24 [ 0.000000] PM: Registered nosave memory: 000000000009d000 - 000000000009e000 [ 0.000000] PM: Registered nosave memory: 000000000009e000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000d0000 [ 0.000000] PM: Registered nosave memory: 00000000000d0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at 80000000 (gap: 80000000:60000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:1 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 30 pages/cpu @ffff880001c00000 s91544 r8192 d23144 u2097152 [ 0.000000] pcpu-alloc: s91544 r8192 d23144 u2097152 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 451883 [ 0.000000] Policy zone: DMA32 [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.32-21-generic root=UUID=50cc7340-4a5d-4a26-8d8e-1bc88476d3de ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Initializing CPU#0 [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Node 0: aperture @ 2038000000 size 32 MB [ 0.000000] Aperture beyond 4GB. Ignoring. [ 0.000000] Memory: 1781976k/1833472k available (5409k kernel code, 460k absent, 51036k reserved, 2976k data, 876k init) [ 0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] NR_IRQS:4352 nr_irqs:256 [ 0.000000] spurious 8259A interrupt: IRQ7. [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 18350080 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] HPET: 4 timers in total, 0 timers will be used for per-cpu timer [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1596.195 MHz processor. [ 0.020007] Calibrating delay loop (skipped), value calculated using timer frequency.. 3192.39 BogoMIPS (lpj=15961950) [ 0.020044] Security Framework initialized [ 0.020072] AppArmor: AppArmor initialized [ 0.020320] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.021737] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.022435] Mount-cache hash table entries: 256 [ 0.022628] Initializing cgroup subsys ns [ 0.022634] Initializing cgroup subsys cpuacct [ 0.022639] Initializing cgroup subsys memory [ 0.022653] Initializing cgroup subsys devices [ 0.022657] Initializing cgroup subsys freezer [ 0.022659] Initializing cgroup subsys net_cls [ 0.022688] CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line) [ 0.022691] CPU: L2 Cache: 512K (64 bytes/line) [ 0.022695] CPU 0/0x0 -> Node 0 [ 0.022698] tseg: 006ff00000 [ 0.022702] mce: CPU supports 5 MCE banks [ 0.022717] using C1E aware idle routine [ 0.022720] Performance Events: AMD PMU driver. [ 0.022727] ... version: 0 [ 0.022730] ... bit width: 48 [ 0.022732] ... generic registers: 4 [ 0.022734] ... value mask: 0000ffffffffffff [ 0.022737] ... max period: 00007fffffffffff [ 0.022739] ... fixed-purpose events: 0 [ 0.022742] ... event mask: 000000000000000f [ 0.022758] SMP alternatives: switching to UP code [ 0.036771] Freeing SMP alternatives: 40k freed [ 0.036823] ACPI: Core revision 20090903 [ 0.050009] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.050017] ftrace: allocating 22518 entries in 89 pages [ 0.060115] Setting APIC routing to flat [ 0.060441] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1 [ 0.070000] ..MP-BIOS bug: 8254 timer not connected to IO-APIC [ 0.070000] ...trying to set up timer (IRQ0) through the 8259A ... [ 0.070000] ..... (found apic 0 pin 0) ... [ 0.176237] ....... works. [ 0.176239] CPU0: AMD Athlon(tm) Processor TF-20 stepping 02 [ 0.180000] Brought up 1 CPUs [ 0.180000] Total of 1 processors activated (3192.39 BogoMIPS). [ 0.180000] CPU0 attaching NULL sched-domain. [ 0.180000] devtmpfs: initialized [ 0.180000] regulator: core version 0.5 [ 0.180000] Time: 20:43:58 Date: 05/04/10 [ 0.180000] NET: Registered protocol family 16 [ 0.180000] node 0 link 0: io port [1000, fffff] [ 0.180000] TOM: 0000000080000000 aka 2048M [ 0.180000] node 0 link 0: mmio [f0100000, ffffffff] [ 0.180000] node 0 link 0: mmio [e0000000, dfffffff] [ 0.180000] node 0 link 0: mmio [d0000000, dfffffff] [ 0.180000] node 0 link 0: mmio [a0000, bffff] [ 0.180000] node 0 link 0: mmio [f0000000, f00fffff] [ 0.180000] node 0 link 0: mmio [e0000000, efffffff] [ 0.180000] node 0 link 0: mmio [80000000, cfffffff] [ 0.180000] bus: [00,ff] on node 0 link 0 [ 0.180000] bus: 00 index 0 io port: [0, ffff] [ 0.180000] bus: 00 index 1 mmio: [e0000000, fcffffffff] [ 0.180000] bus: 00 index 2 mmio: [80000000, dfffffff] [ 0.180000] bus: 00 index 3 mmio: [a0000, bffff] [ 0.180000] ACPI: bus type pci registered [ 0.180000] PCI: MCFG configuration 0: base e0000000 segment 0 buses 0 - 31 [ 0.180000] PCI: MCFG area at e0000000 reserved in E820 [ 0.180000] PCI: Using MMCONFIG at e0000000 - e1ffffff [ 0.180000] PCI: Using configuration type 1 for base access [ 0.180000] bio: create slab at 0 [ 0.180000] ACPI: EC: Look up EC in DSDT [ 0.180000] ACPI: BIOS _OSI(Linux) query ignored [ 0.180673] ACPI: Interpreter enabled [ 0.180673] ACPI: (supports S0 S3 S4 S5) [ 0.180673] ACPI: Using IOAPIC for interrupt routing [ 0.194026] ACPI: EC: GPE = 0x3, I/O: command/status = 0x66, data = 0x62 [ 0.194341] ACPI: No dock devices found. [ 0.196335] ACPI: PCI Root Bridge [PCI0] (0000:00) [ 0.196476] pci 0000:00:02.0: PME# supported from D0 D3hot D3cold [ 0.196480] pci 0000:00:02.0: PME# disabled [ 0.196527] pci 0000:00:04.0: PME# supported from D0 D3hot D3cold [ 0.196531] pci 0000:00:04.0: PME# disabled [ 0.196572] pci 0000:00:05.0: PME# supported from D0 D3hot D3cold [ 0.196575] pci 0000:00:05.0: PME# disabled [ 0.196617] pci 0000:00:06.0: PME# supported from D0 D3hot D3cold [ 0.196621] pci 0000:00:06.0: PME# disabled [ 0.196661] pci 0000:00:07.0: PME# supported from D0 D3hot D3cold [ 0.196665] pci 0000:00:07.0: PME# disabled [ 0.196726] pci 0000:00:12.0: reg 10 io port: [0x8440-0x8447] [ 0.196734] pci 0000:00:12.0: reg 14 io port: [0x8434-0x8437] [ 0.196742] pci 0000:00:12.0: reg 18 io port: [0x8438-0x843f] [ 0.196751] pci 0000:00:12.0: reg 1c io port: [0x8430-0x8433] [ 0.196759] pci 0000:00:12.0: reg 20 io port: [0x8400-0x840f] [ 0.196768] pci 0000:00:12.0: reg 24 32bit mmio: [0xf0609000-0xf06093ff] [ 0.196825] pci 0000:00:13.0: reg 10 32bit mmio: [0xf0404000-0xf0404fff] [ 0.196891] pci 0000:00:13.1: reg 10 32bit mmio: [0xf0405000-0xf0405fff] [ 0.196959] pci 0000:00:13.2: reg 10 32bit mmio: [0xf0406000-0xf0406fff] [ 0.197024] pci 0000:00:13.3: reg 10 32bit mmio: [0xf0407000-0xf0407fff] [ 0.197089] pci 0000:00:13.4: reg 10 32bit mmio: [0xf0408000-0xf0408fff] [ 0.197175] pci 0000:00:13.5: reg 10 32bit mmio: [0xf0609400-0xf06094ff] [ 0.197235] pci 0000:00:13.5: supports D1 D2 [ 0.197238] pci 0000:00:13.5: PME# supported from D0 D1 D2 D3hot [ 0.197243] pci 0000:00:13.5: PME# disabled [ 0.197295] pci 0000:00:14.0: reg 10 io port: [0x8410-0x841f] [ 0.197374] pci 0000:00:14.1: reg 10 io port: [0x1f0-0x1f7] [ 0.197382] pci 0000:00:14.1: reg 14 io port: [0x3f4-0x3f7] [ 0.197390] pci 0000:00:14.1: reg 18 io port: [0x00-0x07] [ 0.197399] pci 0000:00:14.1: reg 1c io port: [0x00-0x03] [ 0.197407] pci 0000:00:14.1: reg 20 io port: [0x8420-0x842f] [ 0.197469] pci 0000:00:14.2: reg 10 64bit mmio: [0xf0400000-0xf0403fff] [ 0.197519] pci 0000:00:14.2: PME# supported from D0 D3hot D3cold [ 0.197524] pci 0000:00:14.2: PME# disabled [ 0.197768] pci 0000:01:05.0: reg 10 64bit mmio pref: [0xd0000000-0xdfffffff] [ 0.197776] pci 0000:01:05.0: reg 18 64bit mmio: [0xf0100000-0xf010ffff] [ 0.197781] pci 0000:01:05.0: reg 20 io port: [0x9000-0x90ff] [ 0.197786] pci 0000:01:05.0: reg 24 32bit mmio: [0xf0000000-0xf00fffff] [ 0.197800] pci 0000:01:05.0: supports D1 D2 [ 0.197826] pci 0000:01:05.2: reg 10 64bit mmio: [0xf0110000-0xf0113fff] [ 0.197872] pci 0000:00:01.0: bridge io port: [0x9000-0x9fff] [ 0.197876] pci 0000:00:01.0: bridge 32bit mmio: [0xf0000000-0xf01fffff] [ 0.197881] pci 0000:00:01.0: bridge 64bit mmio pref: [0xd0000000-0xdfffffff] [ 0.200112] pci 0000:00:04.0: bridge io port: [0x00-0xfff] [ 0.200116] pci 0000:00:04.0: bridge 32bit mmio: [0x000000-0x0fffff] [ 0.200176] pci 0000:00:05.0: bridge io port: [0x00-0xfff] [ 0.200179] pci 0000:00:05.0: bridge 32bit mmio: [0x000000-0x0fffff] [ 0.200222] pci 0000:0f:00.0: reg 10 io port: [0xa000-0xa0ff] [ 0.200230] pci 0000:0f:00.0: reg 14 32bit mmio: [0xf0200000-0xf0203fff] [ 0.200283] pci 0000:0f:00.0: supports D1 D2 [ 0.200286] pci 0000:0f:00.0: PME# supported from D0 D1 D2 D3hot [ 0.200291] pci 0000:0f:00.0: PME# disabled [ 0.200358] pci 0000:00:06.0: bridge io port: [0xa000-0xafff] [ 0.200362] pci 0000:00:06.0: bridge 32bit mmio: [0xf0200000-0xf02fffff] [ 0.200407] pci 0000:15:00.0: reg 10 32bit mmio: [0xf0300000-0xf03000ff] [ 0.200522] pci 0000:15:00.2: reg 10 32bit mmio: [0xf0300400-0xf03004ff] [ 0.200634] pci 0000:15:00.3: reg 10 32bit mmio: [0xf0300800-0xf03008ff] [ 0.200748] pci 0000:15:00.5: reg 10 32bit mmio: [0xf0304000-0xf0307fff] [ 0.200763] pci 0000:15:00.5: reg 18 io port: [0xb400-0xb47f] [ 0.200772] pci 0000:15:00.5: reg 1c io port: [0xb000-0xb0ff] [ 0.200823] pci 0000:15:00.5: PME# supported from D0 D3hot D3cold [ 0.200828] pci 0000:15:00.5: PME# disabled [ 0.200898] pci 0000:00:07.0: bridge io port: [0xb000-0xbfff] [ 0.200902] pci 0000:00:07.0: bridge 32bit mmio: [0xf0300000-0xf03fffff] [ 0.200972] pci 0000:00:14.4: transparent bridge [ 0.201003] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.201171] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PB2_._PRT] [ 0.201277] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PB6_._PRT] [ 0.201376] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PB5_._PRT] [ 0.201475] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PB4_._PRT] [ 0.201582] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PB7_._PRT] [ 0.201727] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.BB4_._PRT] [ 0.201833] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.BB5_._PRT] [ 0.201982] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P2P_._PRT] [ 0.202204] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.AGP_._PRT] [ 0.214741] ACPI: PCI Interrupt Link [LNKA] (IRQs 10 11) *0, disabled. [ 0.214918] ACPI: PCI Interrupt Link [LNKB] (IRQs 10 11) *0, disabled. [ 0.215093] ACPI: PCI Interrupt Link [LNKC] (IRQs 10 11) *0, disabled. [ 0.215267] ACPI: PCI Interrupt Link [LNKD] (IRQs 10 11) *0, disabled. [ 0.215441] ACPI: PCI Interrupt Link [LNKE] (IRQs 10 11) *0, disabled. [ 0.215615] ACPI: PCI Interrupt Link [LNKF] (IRQs 10 11) *0, disabled. [ 0.215789] ACPI: PCI Interrupt Link [LNKG] (IRQs 10 11) *0, disabled. [ 0.215963] ACPI: PCI Interrupt Link [LNKH] (IRQs 10 11) *0, disabled. [ 0.216135] vgaarb: device added: PCI:0000:01:05.0,decodes=io+mem,owns=io+mem,locks=none [ 0.216141] vgaarb: loaded [ 0.216294] SCSI subsystem initialized [ 0.216389] libata version 3.00 loaded. [ 0.216478] usbcore: registered new interface driver usbfs [ 0.216495] usbcore: registered new interface driver hub [ 0.216526] usbcore: registered new device driver usb [ 0.216705] ACPI: WMI: Mapper loaded [ 0.216708] PCI: Using ACPI for IRQ routing [ 0.216716] pci 0000:00:04.0: BAR 13: can't allocate resource [ 0.216719] pci 0000:00:04.0: BAR 14: can't allocate resource [ 0.216722] pci 0000:00:05.0: BAR 13: can't allocate resource [ 0.216724] pci 0000:00:05.0: BAR 14: can't allocate resource [ 0.216944] NetLabel: Initializing [ 0.216947] NetLabel: domain hash size = 128 [ 0.216949] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.216966] NetLabel: unlabeled traffic allowed by default [ 0.217016] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0 [ 0.217022] hpet0: 4 comparators, 32-bit 14.318180 MHz counter [ 0.219042] Switching to clocksource tsc [ 0.219996] AppArmor: AppArmor Filesystem Enabled [ 0.219996] pnp: PnP ACPI init [ 0.219996] ACPI: bus type pnp registered [ 0.219996] pnp: PnP ACPI: found 11 devices [ 0.219996] ACPI: ACPI bus type pnp unregistered [ 0.219996] system 00:01: iomem range 0xfec00000-0xfec00fff could not be reserved [ 0.219996] system 00:01: iomem range 0xfee00000-0xfee00fff has been reserved [ 0.219996] system 00:08: ioport range 0x1080-0x1080 has been reserved [ 0.219996] system 00:08: ioport range 0x220-0x22f has been reserved [ 0.219996] system 00:08: ioport range 0x40b-0x40b has been reserved [ 0.219996] system 00:08: ioport range 0x4d0-0x4d1 has been reserved [ 0.219996] system 00:08: ioport range 0x4d6-0x4d6 has been reserved [ 0.219996] system 00:08: ioport range 0x530-0x537 has been reserved [ 0.219996] system 00:08: ioport range 0xc00-0xc01 has been reserved [ 0.219996] system 00:08: ioport range 0xc14-0xc14 has been reserved [ 0.219996] system 00:08: ioport range 0xc50-0xc52 has been reserved [ 0.219996] system 00:08: ioport range 0xc6c-0xc6c has been reserved [ 0.219996] system 00:08: ioport range 0xc6f-0xc6f has been reserved [ 0.219996] system 00:08: ioport range 0xcd0-0xcd1 has been reserved [ 0.219996] system 00:08: ioport range 0xcd2-0xcd3 has been reserved [ 0.219996] system 00:08: ioport range 0xcd4-0xcd5 has been reserved [ 0.219996] system 00:08: ioport range 0xcd6-0xcd7 has been reserved [ 0.219996] system 00:08: ioport range 0xcd8-0xcdf has been reserved [ 0.219996] system 00:08: ioport range 0x8000-0x805f has been reserved [ 0.219996] system 00:08: ioport range 0xf40-0xf47 has been reserved [ 0.219996] system 00:08: ioport range 0x87f-0x87f has been reserved [ 0.219996] system 00:09: iomem range 0xe0000-0xfffff could not be reserved [ 0.219996] system 00:09: iomem range 0xfff00000-0xffffffff has been reserved [ 0.222378] pci 0000:00:01.0: PCI bridge, secondary bus 0000:01 [ 0.222382] pci 0000:00:01.0: IO window: 0x9000-0x9fff [ 0.222386] pci 0000:00:01.0: MEM window: 0xf0000000-0xf01fffff [ 0.222391] pci 0000:00:01.0: PREFETCH window: 0x000000d0000000-0x000000dfffffff [ 0.222396] pci 0000:00:02.0: PCI bridge, secondary bus 0000:02 [ 0.222398] pci 0000:00:02.0: IO window: disabled [ 0.222402] pci 0000:00:02.0: MEM window: disabled [ 0.222405] pci 0000:00:02.0: PREFETCH window: disabled [ 0.222410] pci 0000:00:04.0: PCI bridge, secondary bus 0000:03 [ 0.222412] pci 0000:00:04.0: IO window: disabled [ 0.222415] pci 0000:00:04.0: MEM window: disabled [ 0.222418] pci 0000:00:04.0: PREFETCH window: disabled [ 0.222423] pci 0000:00:05.0: PCI bridge, secondary bus 0000:09 [ 0.222425] pci 0000:00:05.0: IO window: disabled [ 0.222428] pci 0000:00:05.0: MEM window: disabled [ 0.222431] pci 0000:00:05.0: PREFETCH window: disabled [ 0.222436] pci 0000:00:06.0: PCI bridge, secondary bus 0000:0f [ 0.222439] pci 0000:00:06.0: IO window: 0xa000-0xafff [ 0.222443] pci 0000:00:06.0: MEM window: 0xf0200000-0xf02fffff [ 0.222446] pci 0000:00:06.0: PREFETCH window: disabled [ 0.222452] pci 0000:00:07.0: PCI bridge, secondary bus 0000:15 [ 0.222455] pci 0000:00:07.0: IO window: 0xb000-0xbfff [ 0.222459] pci 0000:00:07.0: MEM window: 0xf0300000-0xf03fffff [ 0.222462] pci 0000:00:07.0: PREFETCH window: disabled [ 0.222467] pci 0000:00:14.4: PCI bridge, secondary bus 0000:1b [ 0.222469] pci 0000:00:14.4: IO window: disabled [ 0.222478] pci 0000:00:14.4: MEM window: disabled [ 0.222483] pci 0000:00:14.4: PREFETCH window: disabled [ 0.222500] pci 0000:00:02.0: setting latency timer to 64 [ 0.222507] pci 0000:00:04.0: setting latency timer to 64 [ 0.222514] pci 0000:00:05.0: setting latency timer to 64 [ 0.222520] pci 0000:00:06.0: setting latency timer to 64 [ 0.222527] pci 0000:00:07.0: setting latency timer to 64 [ 0.222541] pci_bus 0000:00: resource 0 io: [0x00-0xffff] [ 0.222545] pci_bus 0000:00: resource 1 mem: [0x000000-0xffffffffffffffff] [ 0.222549] pci_bus 0000:01: resource 0 io: [0x9000-0x9fff] [ 0.222552] pci_bus 0000:01: resource 1 mem: [0xf0000000-0xf01fffff] [ 0.222555] pci_bus 0000:01: resource 2 pref mem [0xd0000000-0xdfffffff] [ 0.222559] pci_bus 0000:03: resource 0 mem: [0x0-0xfff] [ 0.222562] pci_bus 0000:03: resource 1 mem: [0x0-0xfffff] [ 0.222566] pci_bus 0000:09: resource 0 mem: [0x0-0xfff] [ 0.222569] pci_bus 0000:09: resource 1 mem: [0x0-0xfffff] [ 0.222572] pci_bus 0000:0f: resource 0 io: [0xa000-0xafff] [ 0.222576] pci_bus 0000:0f: resource 1 mem: [0xf0200000-0xf02fffff] [ 0.222579] pci_bus 0000:15: resource 0 io: [0xb000-0xbfff] [ 0.222583] pci_bus 0000:15: resource 1 mem: [0xf0300000-0xf03fffff] [ 0.222586] pci_bus 0000:1b: resource 3 io: [0x00-0xffff] [ 0.222590] pci_bus 0000:1b: resource 4 mem: [0x000000-0xffffffffffffffff] [ 0.222641] NET: Registered protocol family 2 [ 0.222811] IP route cache hash table entries: 65536 (order: 7, 524288 bytes) [ 0.223983] TCP established hash table entries: 262144 (order: 10, 4194304 bytes) [ 0.226551] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 0.227231] TCP: Hash tables configured (established 262144 bind 65536) [ 0.227235] TCP reno registered [ 0.227359] NET: Registered protocol family 1 [ 0.227490] pci 0000:01:05.0: Boot video device [ 0.227995] Scanning for low memory corruption every 60 seconds [ 0.228157] audit: initializing netlink socket (disabled) [ 0.228173] type=2000 audit(1273005836.220:1): initialized [ 0.239916] Trying to unpack rootfs image as initramfs... [ 0.261064] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.262891] VFS: Disk quotas dquot_6.5.2 [ 0.262967] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.263820] fuse init (API version 7.13) [ 0.263929] msgmni has been set to 3480 [ 0.264209] alg: No test for stdrng (krng) [ 0.264283] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.264286] io scheduler noop registered [ 0.264289] io scheduler anticipatory registered [ 0.264291] io scheduler deadline registered [ 0.264335] io scheduler cfq registered (default) [ 0.271081] alloc irq_desc for 24 on node 0 [ 0.271086] alloc kstat_irqs on node 0 [ 0.271099] pcieport 0000:00:02.0: irq 24 for MSI/MSI-X [ 0.271106] pcieport 0000:00:02.0: setting latency timer to 64 [ 0.271296] alloc irq_desc for 25 on node 0 [ 0.271299] alloc kstat_irqs on node 0 [ 0.271305] pcieport 0000:00:04.0: irq 25 for MSI/MSI-X [ 0.271311] pcieport 0000:00:04.0: setting latency timer to 64 [ 0.271429] alloc irq_desc for 26 on node 0 [ 0.271431] alloc kstat_irqs on node 0 [ 0.271437] pcieport 0000:00:05.0: irq 26 for MSI/MSI-X [ 0.271443] pcieport 0000:00:05.0: setting latency timer to 64 [ 0.271568] alloc irq_desc for 27 on node 0 [ 0.271571] alloc kstat_irqs on node 0 [ 0.271577] pcieport 0000:00:06.0: irq 27 for MSI/MSI-X [ 0.271582] pcieport 0000:00:06.0: setting latency timer to 64 [ 0.271698] alloc irq_desc for 28 on node 0 [ 0.271701] alloc kstat_irqs on node 0 [ 0.271707] pcieport 0000:00:07.0: irq 28 for MSI/MSI-X [ 0.271713] pcieport 0000:00:07.0: setting latency timer to 64 [ 0.271802] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.271833] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.321638] ACPI: AC Adapter [AC] (on-line) [ 0.321755] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input0 [ 0.321767] ACPI: Sleep Button [SLPB] [ 0.321826] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input1 [ 0.322514] ACPI: Lid Switch [LID] [ 0.322572] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input2 [ 0.322576] ACPI: Power Button [PWRB] [ 0.322647] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3 [ 0.322650] ACPI: Power Button [PWRF] [ 0.323008] Marking TSC unstable due to TSC halts in idle [ 0.323069] processor LNXCPU:00: registered as cooling_device0 [ 0.333399] Switching to clocksource hpet [ 0.669498] Freeing initrd memory: 13713k freed [ 1.333518] thermal LNXTHERM:01: registered as thermal_zone0 [ 1.333531] ACPI: Thermal Zone [THRM] (53 C) [ 1.335563] Linux agpgart interface v0.103 [ 1.335612] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 1.337141] brd: module loaded [ 1.337734] loop: module loaded [ 1.337857] input: Macintosh mouse button emulation as /devices/virtual/input/input4 [ 1.338220] alloc irq_desc for 16 on node 0 [ 1.338223] alloc kstat_irqs on node 0 [ 1.338233] pata_acpi 0000:00:14.1: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.338288] pata_acpi 0000:00:14.1: setting latency timer to 64 [ 1.338794] Fixed MDIO Bus: probed [ 1.338840] PPP generic driver version 2.4.2 [ 1.338900] tun: Universal TUN/TAP device driver, 1.6 [ 1.338902] tun: (C) 1999-2004 Max Krasnyansky [ 1.339012] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 1.339097] ACPI: Battery Slot [BAT0] (battery absent) [ 1.339151] alloc irq_desc for 19 on node 0 [ 1.339154] alloc kstat_irqs on node 0 [ 1.339161] ehci_hcd 0000:00:13.5: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 1.339184] ehci_hcd 0000:00:13.5: EHCI Host Controller [ 1.339238] ehci_hcd 0000:00:13.5: new USB bus registered, assigned bus number 1 [ 1.339282] ehci_hcd 0000:00:13.5: applying AMD SB600/SB700 USB freeze workaround [ 1.339298] ehci_hcd 0000:00:13.5: debug port 1 [ 1.339330] ehci_hcd 0000:00:13.5: irq 19, io mem 0xf0609400 [ 1.350029] ehci_hcd 0000:00:13.5: USB 2.0 started, EHCI 1.00 [ 1.350156] usb usb1: configuration #1 chosen from 1 choice [ 1.350192] hub 1-0:1.0: USB hub found [ 1.350203] hub 1-0:1.0: 10 ports detected [ 1.350304] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 1.350358] ohci_hcd 0000:00:13.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.350374] ohci_hcd 0000:00:13.0: OHCI Host Controller [ 1.350419] ohci_hcd 0000:00:13.0: new USB bus registered, assigned bus number 2 [ 1.350449] ohci_hcd 0000:00:13.0: irq 16, io mem 0xf0404000 [ 1.410130] usb usb2: configuration #1 chosen from 1 choice [ 1.410160] hub 2-0:1.0: USB hub found [ 1.410175] hub 2-0:1.0: 2 ports detected [ 1.410265] alloc irq_desc for 17 on node 0 [ 1.410267] alloc kstat_irqs on node 0 [ 1.410273] ohci_hcd 0000:00:13.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 1.410286] ohci_hcd 0000:00:13.1: OHCI Host Controller [ 1.410328] ohci_hcd 0000:00:13.1: new USB bus registered, assigned bus number 3 [ 1.410356] ohci_hcd 0000:00:13.1: irq 17, io mem 0xf0405000 [ 1.470125] usb usb3: configuration #1 chosen from 1 choice [ 1.470155] hub 3-0:1.0: USB hub found [ 1.470169] hub 3-0:1.0: 2 ports detected [ 1.470258] alloc irq_desc for 18 on node 0 [ 1.470260] alloc kstat_irqs on node 0 [ 1.470266] ohci_hcd 0000:00:13.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 1.470279] ohci_hcd 0000:00:13.2: OHCI Host Controller [ 1.470322] ohci_hcd 0000:00:13.2: new USB bus registered, assigned bus number 4 [ 1.470356] ohci_hcd 0000:00:13.2: irq 18, io mem 0xf0406000 [ 1.530130] usb usb4: configuration #1 chosen from 1 choice [ 1.530159] hub 4-0:1.0: USB hub found [ 1.530173] hub 4-0:1.0: 2 ports detected [ 1.530257] ohci_hcd 0000:00:13.3: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 1.530271] ohci_hcd 0000:00:13.3: OHCI Host Controller [ 1.530323] ohci_hcd 0000:00:13.3: new USB bus registered, assigned bus number 5 [ 1.530344] ohci_hcd 0000:00:13.3: irq 17, io mem 0xf0407000 [ 1.590129] usb usb5: configuration #1 chosen from 1 choice [ 1.590163] hub 5-0:1.0: USB hub found [ 1.590177] hub 5-0:1.0: 2 ports detected [ 1.590264] ohci_hcd 0000:00:13.4: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 1.590280] ohci_hcd 0000:00:13.4: OHCI Host Controller [ 1.590330] ohci_hcd 0000:00:13.4: new USB bus registered, assigned bus number 6 [ 1.590351] ohci_hcd 0000:00:13.4: irq 18, io mem 0xf0408000 [ 1.650134] usb usb6: configuration #1 chosen from 1 choice [ 1.650167] hub 6-0:1.0: USB hub found [ 1.650181] hub 6-0:1.0: 2 ports detected [ 1.650247] uhci_hcd: USB Universal Host Controller Interface driver [ 1.650351] PNP: PS/2 Controller [PNP0303:KBC0,PNP0f13:MSE0] at 0x60,0x64 irq 1,12 [ 1.654442] i8042.c: Detected active multiplexing controller, rev 1.1. [ 1.657058] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 1.657065] serio: i8042 AUX0 port at 0x60,0x64 irq 12 [ 1.657098] serio: i8042 AUX1 port at 0x60,0x64 irq 12 [ 1.657126] serio: i8042 AUX2 port at 0x60,0x64 irq 12 [ 1.657157] serio: i8042 AUX3 port at 0x60,0x64 irq 12 [ 1.657304] mice: PS/2 mouse device common for all mice [ 1.657563] rtc_cmos 00:04: rtc core: registered rtc_cmos as rtc0 [ 1.657594] rtc0: alarms up to one month, 114 bytes nvram, hpet irqs [ 1.657761] device-mapper: uevent: version 1.0.3 [ 1.657898] device-mapper: ioctl: 4.15.0-ioctl (2009-04-01) initialised: dm-devel@redhat.com [ 1.657965] device-mapper: multipath: version 1.1.0 loaded [ 1.657969] device-mapper: multipath round-robin: version 1.0.0 loaded [ 1.658177] cpuidle: using governor ladder [ 1.658242] cpuidle: using governor menu [ 1.658718] TCP cubic registered [ 1.658870] NET: Registered protocol family 10 [ 1.659447] lo: Disabled Privacy Extensions [ 1.659853] NET: Registered protocol family 17 [ 1.659894] powernow-k8: Found 1 AMD Athlon(tm) Processor TF-20 processors (1 cpu cores) (version 2.20.00) [ 1.659940] powernow-k8: 0 : fid 0x8 (1600 MHz), vid 0x16 [ 1.659943] powernow-k8: 1 : fid 0x0 (800 MHz), vid 0x16 [ 1.660134] PM: Resume from disk failed. [ 1.660150] registered taskstats version 1 [ 1.660646] Magic number: 10:100:750 [ 1.660673] tty ttyS1: hash matches [ 1.660757] rtc_cmos 00:04: setting system clock to 2010-05-04 20:43:59 UTC (1273005839) [ 1.660761] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 1.660763] EDD information not available. [ 1.660843] Freeing unused kernel memory: 876k freed [ 1.661406] Write protecting the kernel read-only data: 7680k [ 1.689967] udev: starting version 151 [ 1.692967] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input5 [ 1.730059] usb 1-10: new high speed USB device using ehci_hcd and address 3 [ 2.022475] scsi0 : pata_atiixp [ 2.022901] scsi1 : pata_atiixp [ 2.024178] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0x8420 irq 14 [ 2.024201] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x8428 irq 15 [ 2.024694] ahci 0000:00:12.0: version 3.0 [ 2.024712] alloc irq_desc for 22 on node 0 [ 2.024715] alloc kstat_irqs on node 0 [ 2.024724] ahci 0000:00:12.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 2.024766] ahci 0000:00:12.0: controller can't do 64bit DMA, forcing 32bit [ 2.024888] ahci 0000:00:12.0: AHCI 0001.0100 32 slots 4 ports 3 Gbps 0xf impl SATA mode [ 2.024912] ahci 0000:00:12.0: flags: ncq sntf ilck led clo pmp pio ccc [ 2.025235] acpi device:28: registered as cooling_device1 [ 2.025375] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:25/LNXVIDEO:00/input/input6 [ 2.025444] ACPI: Video Device [VGA] (multi-head: yes rom: no post: no) [ 2.026467] scsi2 : ahci [ 2.026947] scsi3 : ahci [ 2.027086] scsi4 : ahci [ 2.027221] scsi5 : ahci [ 2.027388] ata3: SATA max UDMA/133 abar m1024@0xf0609000 port 0xf0609100 irq 22 [ 2.027393] ata4: SATA max UDMA/133 abar m1024@0xf0609000 port 0xf0609180 irq 22 [ 2.027398] ata5: SATA max UDMA/133 abar m1024@0xf0609000 port 0xf0609200 irq 22 [ 2.027402] ata6: SATA max UDMA/133 abar m1024@0xf0609000 port 0xf0609280 irq 22 [ 2.028442] [drm] Initialized drm 1.1.0 20060810 [ 2.063075] usb 1-10: configuration #1 chosen from 1 choice [ 2.370060] ata4: SATA link down (SStatus 0 SControl 300) [ 2.370139] ata6: SATA link down (SStatus 0 SControl 300) [ 2.410038] usb 2-1: new low speed USB device using ohci_hcd and address 2 [ 2.550036] ata5: softreset failed (device not ready) [ 2.550040] ata5: applying SB600 PMP SRST workaround and retrying [ 2.550057] ata3: softreset failed (device not ready) [ 2.550061] ata3: applying SB600 PMP SRST workaround and retrying [ 2.601596] usb 2-1: configuration #1 chosen from 1 choice [ 2.730047] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 2.730080] ata5: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 2.732744] ata5.00: ATAPI: MATSHITADVD-RAM UJ890AS, 1.00, max UDMA/100, ATAPI AN [ 2.732770] ata5.00: SB600 AHCI: limiting to 255 sectors per cmd [ 2.735736] ata5.00: SB600 AHCI: limiting to 255 sectors per cmd [ 2.735739] ata5.00: configured for UDMA/100 [ 2.784494] ata3.00: ATA-8: WDC WD2500BEVT-00ZCT0, 11.01A11, max UDMA/133 [ 2.784498] ata3.00: 488397168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA [ 2.784524] ata3.00: SB600 AHCI: limiting to 255 sectors per cmd [ 2.786471] ata3.00: SB600 AHCI: limiting to 255 sectors per cmd [ 2.786474] ata3.00: configured for UDMA/133 [ 2.786606] scsi 2:0:0:0: Direct-Access ATA WDC WD2500BEVT-0 11.0 PQ: 0 ANSI: 5 [ 2.786811] sd 2:0:0:0: Attached scsi generic sg0 type 0 [ 2.787163] sd 2:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB) [ 2.787222] sd 2:0:0:0: [sda] Write Protect is off [ 2.787226] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 2.787255] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.787422] sda: [ 2.789723] scsi 4:0:0:0: CD-ROM MATSHITA DVD-RAM UJ890AS 1.00 PQ: 0 ANSI: 5 [ 2.791428] sda1 sda2 [ 2.792010] sd 2:0:0:0: [sda] Attached SCSI disk [ 2.795609] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 2.795613] Uniform CD-ROM driver Revision: 3.20 [ 2.795736] sr 4:0:0:0: Attached scsi CD-ROM sr0 [ 2.795823] sr 4:0:0:0: Attached scsi generic sg1 type 5 [ 2.837887] usbcore: registered new interface driver hiddev [ 2.842505] input: Logitech Optical USB Mouse as /devices/pci0000:00/0000:00:13.0/usb2/2-1/2-1:1.0/input/input7 [ 2.842652] generic-usb 0003:046D:C016.0001: input,hidraw0: USB HID v1.10 Mouse [Logitech Optical USB Mouse] on usb-0000:00:13.0-1/input0 [ 2.842701] usbcore: registered new interface driver usbhid [ 2.842705] usbhid: v2.6:USB HID core driver [ 2.870726] [drm] radeon defaulting to kernel modesetting. [ 2.870732] [drm] radeon kernel modesetting enabled. [ 2.873112] radeon 0000:01:05.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 2.876842] [drm] radeon: Initializing kernel modesetting. [ 2.876937] [drm] register mmio base: 0xF0100000 [ 2.876940] [drm] register mmio size: 65536 [ 2.877050] ATOM BIOS: ATI [ 2.877267] [drm] GPU reset succeed (RBBM_STATUS=0x10000140) [ 2.877290] [drm] radeon: VRAM 256M [ 2.877292] [drm] radeon: VRAM from 0x70000000 to 0x7FFFFFFF [ 2.877295] [drm] radeon: GTT 512M [ 2.877297] [drm] radeon: GTT from 0x80000000 to 0x9FFFFFFF [ 2.877332] alloc irq_desc for 29 on node 0 [ 2.877334] alloc kstat_irqs on node 0 [ 2.877346] radeon 0000:01:05.0: irq 29 for MSI/MSI-X [ 2.877350] [drm] radeon: using MSI. [ 2.877377] [drm] radeon: irq initialized. [ 2.877520] [drm] Detected VRAM RAM=256M, BAR=256M [ 2.877526] [drm] RAM width 128bits DDR [ 2.877639] [TTM] Zone kernel: Available graphics memory: 898306 kiB. [ 2.877662] [drm] radeon: 256M of VRAM memory ready [ 2.877664] [drm] radeon: 512M of GTT memory ready. [ 2.877694] [drm] GART: num cpu pages 131072, num gpu pages 131072 [ 2.881803] [drm] radeon: 1 quad pipes, 1 z pipes initialized. [ 2.881916] [drm] radeon: cp idle (0x10000C03) [ 2.881968] [drm] Loading RS690/RS740 Microcode [ 2.882381] platform radeon_cp.0: firmware: requesting radeon/RS690_cp.bin [ 2.886755] [drm] radeon: ring at 0x0000000080000000 [ 2.886778] [drm] ring test succeeded in 1 usecs [ 2.886979] [drm] radeon: ib pool ready. [ 2.887065] [drm] ib test succeeded in 0 usecs [ 2.887297] [drm] Radeon Display Connectors [ 2.887300] [drm] Connector 0: [ 2.887301] [drm] VGA [ 2.887305] [drm] DDC: 0x7e50 0x7e40 0x7e54 0x7e44 0x7e58 0x7e48 0x7e5c 0x7e4c [ 2.887307] [drm] Encoders: [ 2.887309] [drm] CRT1: INTERNAL_KLDSCP_DAC1 [ 2.887312] [drm] Connector 1: [ 2.887313] [drm] LVDS [ 2.887316] [drm] DDC: 0x7e40 0x7e50 0x7e44 0x7e54 0x7e48 0x7e58 0x7e4c 0x7e5c [ 2.887319] [drm] Encoders: [ 2.887321] [drm] LCD1: INTERNAL_LVTM1 [ 2.887323] [drm] Connector 2: [ 2.887324] [drm] HDMI-A [ 2.887326] [drm] HPD2 [ 2.887329] [drm] DDC: 0x7e40 0x7e60 0x7e44 0x7e64 0x7e48 0x7e68 0x7e4c 0x7e6c [ 2.887331] [drm] Encoders: [ 2.887333] [drm] DFP2: INTERNAL_DDI [ 3.404100] [drm] fb mappable at 0xD0040000 [ 3.404104] [drm] vram apper at 0xD0000000 [ 3.404106] [drm] size 5299200 [ 3.404108] [drm] fb depth is 24 [ 3.404110] [drm] pitch is 5888 [ 3.404293] fb0: radeondrmfb frame buffer device [ 3.404295] registered panic notifier [ 3.404302] [drm] Initialized radeon 2.0.0 20080528 for 0000:01:05.0 on minor 0 [ 3.406751] vga16fb: initializing [ 3.406759] vga16fb: mapped to 0xffff8800000a0000 [ 3.406766] vga16fb: not registering due to another framebuffer present [ 3.463104] Console: switching to colour frame buffer device 180x56 [ 4.191086] kjournald starting. Commit interval 5 seconds [ 4.191104] EXT3-fs: mounted filesystem with ordered data mode. [ 17.254428] udev: starting version 151 [ 17.327549] EXT3 FS on sda1, internal journal [ 17.509645] lp: driver loaded but no devices found [ 17.538852] jme: JMicron JMC2XX ethernet driver version 1.0.5 [ 17.538952] sdhci: Secure Digital Host Controller Interface driver [ 17.538955] sdhci: Copyright(c) Pierre Ossman [ 17.575662] jme 0000:15:00.5: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 17.575681] jme 0000:15:00.5: setting latency timer to 64 [ 17.576962] eth0: JMC260 Fast Ethernet ver:22 rev:2 macaddr:00:90:f5:9b:3f:c4 [ 17.577039] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 [ 17.605505] sdhci-pci 0000:15:00.0: SDHCI controller found [197b:2382] (rev 80) [ 17.605530] sdhci-pci 0000:15:00.0: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 17.605589] sdhci-pci 0000:15:00.0: setting latency timer to 64 [ 17.605666] Registered led device: mmc0:: [ 17.605712] mmc0: SDHCI controller on PCI [0000:15:00.0] using ADMA [ 17.664938] sdhci-pci 0000:15:00.2: SDHCI controller found [197b:2381] (rev 80) [ 17.664965] sdhci-pci 0000:15:00.2: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 17.664980] sdhci-pci 0000:15:00.2: Refusing to bind to secondary interface. [ 17.664987] sdhci-pci 0000:15:00.2: PCI INT B disabled [ 17.908647] EDAC MC: Ver: 2.1.0 Apr 16 2010 [ 17.955420] Linux video capture interface: v2.00 [ 17.959946] uvcvideo: Found UVC 1.00 device BisonCam, NB Pro (5986:0241) [ 17.962197] piix4_smbus 0000:00:14.0: SMBus Host Controller at 0x8410, revision 0 [ 17.962537] jmb38x_ms 0000:15:00.3: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 17.962546] jmb38x_ms 0000:15:00.3: setting latency timer to 64 [ 17.967851] EDAC amd64_edac: Ver: 3.2.0 Apr 16 2010 [ 18.024861] k8temp 0000:00:18.3: Temperature readouts might be wrong - check erratum #141 [ 18.027377] BUG: unable to handle kernel NULL pointer dereference at 00000000000003a7 [ 18.027387] IP: [] con_insert_unipair+0x4b/0x250 [ 18.027399] PGD 60954067 PUD 60220067 PMD 0 [ 18.027404] Oops: 0000 [#1] SMP [ 18.027408] last sysfs file: /sys/module/soundcore/initstate [ 18.027412] CPU 0 [ 18.027415] Modules linked in: amd64_edac_mod(+) uvcvideo(+) videodev v4l1_compat v4l2_compat_ioctl32 soundcore psmouse serio_raw jmb38x_ms k8temp snd_page_alloc i2c_piix4 edac_core edac_mce_amd sdhci_pci jme memstick sdhci mii led_class shpchp lp parport fbcon tileblit font bitblit softcursor vga16fb vgastate radeon ttm usbhid drm_kms_helper hid drm i2c_algo_bit ahci pata_atiixp video output [ 18.027453] Pid: 638, comm: setfont Not tainted 2.6.32-21-generic #32-Ubuntu M77xK [ 18.027457] RIP: 0010:[] [] con_insert_unipair+0x4b/0x250 [ 18.027464] RSP: 0018:ffff880060a99cd8 EFLAGS: 00010206 [ 18.027467] RAX: 000000000000037f RBX: 0000000000000153 RCX: ffffffff8133aee6 [ 18.027469] RDX: 0000000000000005 RSI: 0000000000000153 RDI: ffff880060230a00 [ 18.027472] RBP: ffff880060a99d18 R08: 0000000000000000 R09: 0000000000000080 [ 18.027475] R10: 0000000000000001 R11: 0000000000000000 R12: ffff880060230a00 [ 18.027478] R13: 00000000000000e1 R14: 00000000000003a7 R15: 0000000000000000 [ 18.027482] FS: 00007f58fd4a5700(0000) GS:ffff880001c00000(0000) knlGS:0000000000000000 [ 18.027486] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 18.027488] CR2: 00000000000003a7 CR3: 0000000060bf1000 CR4: 00000000000006f0 [ 18.027491] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 18.027495] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 18.027498] Process setfont (pid: 638, threadinfo ffff880060a98000, task ffff880060cf44d0) [ 18.027500] Stack: [ 18.027502] 0000004001c0ea78 ffff880000014100 ffff880000012a90 000000000000001f [ 18.027507] <0> 0000000000000000 0000000000bb4280 ffff880060230a00 0000000000000000 [ 18.027512] <0> ffff880060a99d98 ffffffff8133b365 0000000000000002 ffff88006d2e0800 [ 18.027517] Call Trace: [ 18.027524] [] con_set_unimap+0x185/0x220 [ 18.027529] [] vt_ioctl+0x159e/0x1820 [ 18.027535] [] ? unlock_page+0x27/0x30 [ 18.027540] [] ? __do_fault+0x439/0x500 [ 18.027546] [] tty_ioctl+0xa2/0x6e0 [ 18.027552] [] vfs_ioctl+0x22/0xa0 [ 18.027558] [] ? __up_read+0x9a/0xc0 [ 18.027562] [] do_vfs_ioctl+0x81/0x380 [ 18.027569] [] ? up_read+0xe/0x10 [ 18.027576] [] ? do_page_fault+0x158/0x3b0 [ 18.027580] [] sys_ioctl+0x81/0xa0 [ 18.027586] [] system_call_fastpath+0x16/0x1b [ 18.027589] Code: 00 41 89 f6 49 89 fc 89 f3 66 41 c1 ee 0b 41 89 d5 41 83 e6 1f 4a 8b 04 f7 48 85 c0 74 53 89 da 66 c1 ea 06 83 e2 1f 4c 8d 34 d0 <49> 8b 06 48 85 c0 0f 84 8e 00 00 00 48 89 da 0f b7 db 83 e2 3f [ 18.027624] RIP [] con_insert_unipair+0x4b/0x250 [ 18.027629] RSP [ 18.027631] CR2: 00000000000003a7 [ 18.027635] ---[ end trace 8b4d5f7507c30e48 ]--- [ 18.062178] EDAC amd64: This node reports that Memory ECC is currently disabled, set F3x44[22] (0000:00:18.3). [ 18.062187] EDAC amd64: ECC disabled in the BIOS or no ECC capability, module will not load. [ 18.062189] Either enable ECC checking or force module loading by setting 'ecc_enable_override'. [ 18.062192] (Note that use of the override may cause unknown side effects.) [ 18.062221] amd64_edac: probe of 0000:00:18.2 failed with error -22 [ 18.110662] input: BisonCam, NB Pro as /devices/pci0000:00/0000:00:13.5/usb1/1-10/1-10:1.0/input/input8 [ 18.110871] usbcore: registered new interface driver uvcvideo [ 18.111180] USB Video Class driver (v0.1.0) [ 18.288677] type=1505 audit(1273005856.119:2): operation="profile_load" pid=709 name="/sbin/dhclient3" [ 18.289038] type=1505 audit(1273005856.119:3): operation="profile_load" pid=709 name="/usr/lib/NetworkManager/nm-dhcp-client.action" [ 18.289238] type=1505 audit(1273005856.119:4): operation="profile_load" pid=709 name="/usr/lib/connman/scripts/dhclient-script" [ 18.536839] HDA Intel 0000:00:14.2: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 18.683393] Synaptics Touchpad, model: 1, fw: 7.2, id: 0x1c0b1, caps: 0xd04731/0xa42000 [ 18.684924] hda_codec: ALC272: BIOS auto-probing. [ 18.686755] input: HDA Digital PCBeep as /devices/pci0000:00/0000:00:14.2/input/input9 [ 18.702753] HDA Intel 0000:01:05.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 18.720704] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio4/input/input10 [ 19.750399] hda-intel: azx_get_response timeout, switching to polling mode: last cmd=0x000f0000 [ 20.760015] hda-intel: Codec #0 probe error; disabling it... [ 21.810017] hda_intel: azx_get_response timeout, switching to single_cmd mode: last cmd=0x000f0000 [ 37.563537] padlock: VIA PadLock Hash Engine not detected. [ 38.862787] kjournald starting. Commit interval 5 seconds [ 38.870310] EXT3 FS on dm-0, internal journal [ 38.870318] EXT3-fs: mounted filesystem with ordered data mode. [ 40.617556] type=1505 audit(1273005878.449:5): operation="profile_load" pid=993 name="/usr/share/gdm/guest-session/Xsession" [ 40.622524] type=1505 audit(1273005878.459:6): operation="profile_replace" pid=995 name="/sbin/dhclient3" [ 40.622902] type=1505 audit(1273005878.459:7): operation="profile_replace" pid=995 name="/usr/lib/NetworkManager/nm-dhcp-client.action" [ 40.623110] type=1505 audit(1273005878.459:8): operation="profile_replace" pid=995 name="/usr/lib/connman/scripts/dhclient-script" [ 40.634678] type=1505 audit(1273005878.469:9): operation="profile_load" pid=997 name="/usr/bin/evince" [ 40.639284] type=1505 audit(1273005878.469:10): operation="profile_load" pid=997 name="/usr/bin/evince-previewer" [ 40.652112] type=1505 audit(1273005878.489:11): operation="profile_load" pid=997 name="/usr/bin/evince-thumbnailer" [ 40.658767] type=1505 audit(1273005878.489:12): operation="profile_load" pid=1061 name="/usr/lib/cups/backend/cups-pdf" [ 40.659226] type=1505 audit(1273005878.489:13): operation="profile_load" pid=1061 name="/usr/sbin/cupsd" [ 40.661907] type=1505 audit(1273005878.499:14): operation="profile_load" pid=1062 name="/usr/sbin/tcpdump" [ 40.746355] alloc irq_desc for 30 on node 0 [ 40.746362] alloc kstat_irqs on node 0 [ 40.746378] jme 0000:15:00.5: irq 30 for MSI/MSI-X [ 40.746443] eth0: Link is down. [ 40.746721] eth0: Link is down. [ 40.747165] ADDRCONF(NETDEV_UP): eth0: link is not ready Bug: 594965 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.32-22-generic (buildd@palmer) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #36-Ubuntu SMP Thu Jun 3 22:02:19 UTC 2010 (Ubuntu 2.6.32-22.36-generic 2.6.32.11+drm33.2) [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] NSC Geode by NSC [ 0.000000] Cyrix CyrixInstead [ 0.000000] Centaur CentaurHauls [ 0.000000] Transmeta GenuineTMx86 [ 0.000000] Transmeta TransmetaCPU [ 0.000000] UMC UMC UMC UMC [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 00000000000a0000 (usable) [ 0.000000] BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 000000005fff0000 (usable) [ 0.000000] BIOS-e820: 000000005fff0000 - 000000005fff3000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000005fff3000 - 0000000060000000 (ACPI data) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ffff0000 - 0000000100000000 (reserved) [ 0.000000] DMI 2.2 present. [ 0.000000] Phoenix BIOS detected: BIOS may corrupt low RAM, working around it. [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] last_pfn = 0x5fff0 max_arch_pfn = 0x100000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-AFFFF uncachable [ 0.000000] B0000-BFFFF write-combining [ 0.000000] C0000-C7FFF write-protect [ 0.000000] C8000-FFFFF uncachable [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask FC0000000 write-back [ 0.000000] 1 base 040000000 mask FE0000000 write-back [ 0.000000] 2 base 0D0000000 mask FF8000000 write-combining [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] Scanning 0 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 00000000000a0000 (usable) [ 0.000000] modified: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 000000005fff0000 (usable) [ 0.000000] modified: 000000005fff0000 - 000000005fff3000 (ACPI NVS) [ 0.000000] modified: 000000005fff3000 - 0000000060000000 (ACPI data) [ 0.000000] modified: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000ffff0000 - 0000000100000000 (reserved) [ 0.000000] initial memory mapped : 0 - 00c00000 [ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000 [ 0.000000] Using x86 segment limits to approximate NX protection [ 0.000000] 0000000000 - 0000400000 page 4k [ 0.000000] 0000400000 - 0037400000 page 2M [ 0.000000] 0037400000 - 00377fe000 page 4k [ 0.000000] kernel direct mapping tables up to 377fe000 @ 10000-15000 [ 0.000000] RAMDISK: 37329000 - 37fef514 [ 0.000000] Allocated new RAMDISK: 008de000 - 015a4514 [ 0.000000] Move RAMDISK from 0000000037329000 - 0000000037fef513 to 008de000 - 015a4513 [ 0.000000] ACPI: RSDP 000f6fc0 00014 (v00 Nvidia) [ 0.000000] ACPI: RSDT 5fff3000 0002C (v01 Nvidia AWRDACPI 42302E31 AWRD 00000000) [ 0.000000] ACPI: FACP 5fff3040 00074 (v01 Nvidia AWRDACPI 42302E31 AWRD 00000000) [ 0.000000] ACPI: DSDT 5fff30c0 04C22 (v01 NVIDIA AWRDACPI 00001000 MSFT 0100000E) [ 0.000000] ACPI: FACS 5fff0000 00040 [ 0.000000] ACPI: APIC 5fff7d00 0006E (v01 Nvidia AWRDACPI 42302E31 AWRD 00000000) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] 647MB HIGHMEM available. [ 0.000000] 887MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 377fe000 [ 0.000000] low ram: 0 - 377fe000 [ 0.000000] node 0 low ram: 00000000 - 377fe000 [ 0.000000] node 0 bootmap 00011000 - 00017f00 [ 0.000000] (9 early reservations) ==> bootmem [0000000000 - 00377fe000] [ 0.000000] #0 [0000000000 - 0000001000] BIOS data page ==> [0000000000 - 0000001000] [ 0.000000] #1 [0000001000 - 0000002000] EX TRAMPOLINE ==> [0000001000 - 0000002000] [ 0.000000] #2 [0000006000 - 0000007000] TRAMPOLINE ==> [0000006000 - 0000007000] [ 0.000000] #3 [0000100000 - 00008d9e98] TEXT DATA BSS ==> [0000100000 - 00008d9e98] [ 0.000000] #4 [000009f000 - 0000100000] BIOS reserved ==> [000009f000 - 0000100000] [ 0.000000] #5 [00008da000 - 00008dd08c] BRK ==> [00008da000 - 00008dd08c] [ 0.000000] #6 [0000010000 - 0000011000] PGTABLE ==> [0000010000 - 0000011000] [ 0.000000] #7 [00008de000 - 00015a4514] NEW RAMDISK ==> [00008de000 - 00015a4514] [ 0.000000] #8 [0000011000 - 0000018000] BOOTMAP ==> [0000011000 - 0000018000] [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x000377fe [ 0.000000] HighMem 0x000377fe -> 0x0005fff0 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x000000a0 [ 0.000000] 0: 0x00000100 -> 0x0005fff0 [ 0.000000] On node 0 totalpages: 393088 [ 0.000000] free_area_init_node: node 0, pgdat c0798720, node_mem_map c15a6200 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3952 pages, LIFO batch:0 [ 0.000000] Normal zone: 1744 pages used for memmap [ 0.000000] Normal zone: 221486 pages, LIFO batch:31 [ 0.000000] HighMem zone: 1296 pages used for memmap [ 0.000000] HighMem zone: 164578 pages, LIFO batch:31 [ 0.000000] Using APIC driver default [ 0.000000] Nvidia board detected. Ignoring ACPI timer override. [ 0.000000] If you got timer trouble try acpi_use_timer_override [ 0.000000] ACPI: PM-Timer IO Port: 0x4008 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 2, version 17, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: BIOS IRQ0 pin2 override ignored. [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 14 global_irq 14 high edge) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 15 global_irq 15 high edge) [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] ACPI: IRQ14 used by override. [ 0.000000] ACPI: IRQ15 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] SMP: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 24 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000f0000 [ 0.000000] PM: Registered nosave memory: 00000000000f0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at 60000000 (gap: 60000000:9ec00000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:1 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 14 pages/cpu @c2400000 s36024 r0 d21320 u4194304 [ 0.000000] pcpu-alloc: s36024 r0 d21320 u4194304 alloc=1*4194304 [ 0.000000] pcpu-alloc: [0] 0 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 390016 [ 0.000000] Kernel command line: root=UUID=ad296f33-5e9a-4109-8265-6631f750be25 ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Enabling fast FPU save and restore... done. [ 0.000000] Enabling unmasked SIMD FPU exception support... done. [ 0.000000] Initializing CPU#0 [ 0.000000] allocated 7863680 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Initializing HighMem for node 0 (000377fe:0005fff0) [ 0.000000] Memory: 1529380k/1572800k available (4673k kernel code, 42016k reserved, 2121k data, 656k init, 663496k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff1d000 - 0xfffff000 ( 904 kB) [ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB) [ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) [ 0.000000] .init : 0xc07a3000 - 0xc0847000 ( 656 kB) [ 0.000000] .data : 0xc0590663 - 0xc07a2e48 (2121 kB) [ 0.000000] .text : 0xc0100000 - 0xc0590663 (4673 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] NR_IRQS:2304 nr_irqs:256 [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1920.694 MHz processor. [ 0.008006] Calibrating delay loop (skipped), value calculated using timer frequency.. 3841.38 BogoMIPS (lpj=7682776) [ 0.008032] Security Framework initialized [ 0.008066] AppArmor: AppArmor initialized [ 0.008077] Mount-cache hash table entries: 512 [ 0.008244] Initializing cgroup subsys ns [ 0.008249] Initializing cgroup subsys cpuacct [ 0.008254] Initializing cgroup subsys memory [ 0.008266] Initializing cgroup subsys devices [ 0.008270] Initializing cgroup subsys freezer [ 0.008272] Initializing cgroup subsys net_cls [ 0.008296] CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line) [ 0.008300] CPU: L2 Cache: 512K (64 bytes/line) [ 0.008305] mce: CPU supports 4 MCE banks [ 0.008326] Performance Events: AMD PMU driver. [ 0.008334] ... version: 0 [ 0.008336] ... bit width: 48 [ 0.008338] ... generic registers: 4 [ 0.008341] ... value mask: 0000ffffffffffff [ 0.008343] ... max period: 00007fffffffffff [ 0.008346] ... fixed-purpose events: 0 [ 0.008348] ... event mask: 000000000000000f [ 0.008353] Checking 'hlt' instruction... OK. [ 0.024560] SMP alternatives: switching to UP code [ 0.030543] Freeing SMP alternatives: 19k freed [ 0.030569] ACPI: Core revision 20090903 [ 0.039392] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.039401] ftrace: allocating 21771 entries in 43 pages [ 0.040135] Enabling APIC mode: Flat. Using 1 I/O APICs [ 0.040523] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1 [ 0.081544] CPU0: AMD Athlon(tm) XP 2600+ stepping 00 [ 0.084001] Brought up 1 CPUs [ 0.084001] Total of 1 processors activated (3841.38 BogoMIPS). [ 0.084001] CPU0 attaching NULL sched-domain. [ 0.084001] devtmpfs: initialized [ 0.084001] regulator: core version 0.5 [ 0.084001] Time: 3:20:39 Date: 06/16/10 [ 0.084001] NET: Registered protocol family 16 [ 0.084001] EISA bus registered [ 0.084001] ACPI: bus type pci registered [ 0.116103] PCI: PCI BIOS revision 2.10 entry at 0xfb450, last bus=2 [ 0.116106] PCI: Using configuration type 1 for base access [ 0.117189] bio: create slab at 0 [ 0.118180] ACPI: EC: Look up EC in DSDT [ 0.125890] ACPI: Interpreter enabled [ 0.125896] ACPI: (supports S0 S1 S4 S5) [ 0.125924] ACPI: Using IOAPIC for interrupt routing [ 0.134917] ACPI: No dock devices found. [ 0.135041] ACPI: PCI Root Bridge [PCI0] (0000:00) [ 0.135091] pci 0000:00:00.0: reg 10 32bit mmio pref: [0xd0000000-0xd7ffffff] [ 0.135109] pci 0000:00:00.0: nForce2 C1 Halt Disconnect fixup [ 0.135325] pci 0000:00:01.1: reg 10 io port: [0xe400-0xe41f] [ 0.135362] pci 0000:00:01.1: PME# supported from D3hot D3cold [ 0.135366] pci 0000:00:01.1: PME# disabled [ 0.135399] pci 0000:00:02.0: reg 10 32bit mmio: [0xe2004000-0xe2004fff] [ 0.135435] pci 0000:00:02.0: supports D1 D2 [ 0.135438] pci 0000:00:02.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.135442] pci 0000:00:02.0: PME# disabled [ 0.135470] pci 0000:00:02.1: reg 10 32bit mmio: [0xe2005000-0xe2005fff] [ 0.135505] pci 0000:00:02.1: supports D1 D2 [ 0.135508] pci 0000:00:02.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.135512] pci 0000:00:02.1: PME# disabled [ 0.135546] pci 0000:00:02.2: reg 10 32bit mmio: [0xe2000000-0xe20000ff] [ 0.135588] pci 0000:00:02.2: supports D1 D2 [ 0.135591] pci 0000:00:02.2: PME# supported from D0 D1 D2 D3hot D3cold [ 0.135595] pci 0000:00:02.2: PME# disabled [ 0.135631] pci 0000:00:04.0: reg 10 32bit mmio: [0xe2001000-0xe2001fff] [ 0.135637] pci 0000:00:04.0: reg 14 io port: [0xd000-0xd007] [ 0.135669] pci 0000:00:04.0: supports D1 D2 [ 0.135672] pci 0000:00:04.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.135676] pci 0000:00:04.0: PME# disabled [ 0.135705] pci 0000:00:06.0: reg 10 io port: [0xd400-0xd4ff] [ 0.135711] pci 0000:00:06.0: reg 14 io port: [0xd800-0xd87f] [ 0.135718] pci 0000:00:06.0: reg 18 32bit mmio: [0xe2002000-0xe2002fff] [ 0.135747] pci 0000:00:06.0: supports D1 D2 [ 0.135814] pci 0000:00:09.0: reg 20 io port: [0xf000-0xf00f] [ 0.135968] pci 0000:02:00.0: reg 10 32bit mmio pref: [0xd8000000-0xdfffffff] [ 0.135976] pci 0000:02:00.0: reg 14 io port: [0xc000-0xc0ff] [ 0.135982] pci 0000:02:00.0: reg 18 32bit mmio: [0xe1000000-0xe100ffff] [ 0.136006] pci 0000:02:00.0: reg 30 32bit mmio pref: [0x000000-0x01ffff] [ 0.136027] pci 0000:02:00.0: supports D1 D2 [ 0.136066] pci 0000:00:1e.0: bridge io port: [0xc000-0xcfff] [ 0.136070] pci 0000:00:1e.0: bridge 32bit mmio: [0xe0000000-0xe1ffffff] [ 0.136075] pci 0000:00:1e.0: bridge 32bit mmio pref: [0xd8000000-0xdfffffff] [ 0.136085] pci_bus 0000:00: on NUMA node 0 [ 0.136091] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.136251] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.HUB0._PRT] [ 0.136521] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.AGPB._PRT] [ 0.194017] ACPI: PCI Interrupt Link [LNK1] (IRQs 3 4 5 6 7 10 11 *12 14 15) [ 0.194183] ACPI: PCI Interrupt Link [LNK2] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.194349] ACPI: PCI Interrupt Link [LNK3] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.194517] ACPI: PCI Interrupt Link [LNK4] (IRQs 3 4 5 6 7 *10 11 12 14 15) [ 0.194683] ACPI: PCI Interrupt Link [LNK5] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.194852] ACPI: PCI Interrupt Link [LUBA] (IRQs 3 4 5 6 7 *10 11 12 14 15) [ 0.195031] ACPI: PCI Interrupt Link [LUBB] (IRQs 3 4 5 6 7 10 *11 12 14 15) [ 0.195198] ACPI: PCI Interrupt Link [LMAC] (IRQs 3 4 5 6 7 10 *11 12 14 15) [ 0.195367] ACPI: PCI Interrupt Link [LAPU] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.195534] ACPI: PCI Interrupt Link [LACI] (IRQs 3 4 5 6 7 10 11 *12 14 15) [ 0.195703] ACPI: PCI Interrupt Link [LMCI] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.195868] ACPI: PCI Interrupt Link [LSMB] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.196040] ACPI: PCI Interrupt Link [LUB2] (IRQs 3 4 *5 6 7 10 11 12 14 15) [ 0.196212] ACPI: PCI Interrupt Link [LFIR] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.196377] ACPI: PCI Interrupt Link [L3CM] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.196541] ACPI: PCI Interrupt Link [LIDE] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.196691] ACPI: PCI Interrupt Link [APC1] (IRQs *16) [ 0.196824] ACPI: PCI Interrupt Link [APC2] (IRQs *17), disabled. [ 0.196956] ACPI: PCI Interrupt Link [APC3] (IRQs *18), disabled. [ 0.197088] ACPI: PCI Interrupt Link [APC4] (IRQs *19) [ 0.197220] ACPI: PCI Interrupt Link [APC5] (IRQs *16), disabled. [ 0.197415] ACPI: PCI Interrupt Link [APCF] (IRQs 20 21 22) *0 [ 0.197611] ACPI: PCI Interrupt Link [APCG] (IRQs 20 21 22) *0 [ 0.197805] ACPI: PCI Interrupt Link [APCH] (IRQs 20 21 22) *0 [ 0.197999] ACPI: PCI Interrupt Link [APCI] (IRQs 20 21 22) *0, disabled. [ 0.198194] ACPI: PCI Interrupt Link [APCJ] (IRQs 20 21 22) *0 [ 0.198388] ACPI: PCI Interrupt Link [APCK] (IRQs 20 21 22) *0, disabled. [ 0.198522] ACPI: PCI Interrupt Link [APCS] (IRQs *23), disabled. [ 0.198715] ACPI: PCI Interrupt Link [APCL] (IRQs 20 21 22) *0 [ 0.198909] ACPI: PCI Interrupt Link [APCM] (IRQs 20 21 22) *0, disabled. [ 0.199114] ACPI: PCI Interrupt Link [AP3C] (IRQs 20 21 22) *0, disabled. [ 0.199309] ACPI: PCI Interrupt Link [APCZ] (IRQs 20 21 22) *0, disabled. [ 0.199464] vgaarb: device added: PCI:0000:02:00.0,decodes=io+mem,owns=io+mem,locks=none [ 0.199468] vgaarb: loaded [ 0.199619] SCSI subsystem initialized [ 0.199724] libata version 3.00 loaded. [ 0.199830] usbcore: registered new interface driver usbfs [ 0.199845] usbcore: registered new interface driver hub [ 0.199881] usbcore: registered new device driver usb [ 0.200058] ACPI: WMI: Mapper loaded [ 0.200060] PCI: Using ACPI for IRQ routing [ 0.200220] NetLabel: Initializing [ 0.200223] NetLabel: domain hash size = 128 [ 0.200225] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.200242] NetLabel: unlabeled traffic allowed by default [ 0.200278] Switching to clocksource tsc [ 0.202734] AppArmor: AppArmor Filesystem Enabled [ 0.202767] pnp: PnP ACPI init [ 0.202793] ACPI: bus type pnp registered [ 0.208236] pnp: PnP ACPI: found 14 devices [ 0.208240] ACPI: ACPI bus type pnp unregistered [ 0.208244] PnPBIOS: Disabled by ACPI PNP [ 0.208260] system 00:00: ioport range 0x4000-0x407f has been reserved [ 0.208264] system 00:00: ioport range 0x4080-0x40ff has been reserved [ 0.208268] system 00:00: ioport range 0x4400-0x447f has been reserved [ 0.208271] system 00:00: ioport range 0x4480-0x44ff has been reserved [ 0.208275] system 00:00: ioport range 0x4200-0x427f has been reserved [ 0.208278] system 00:00: ioport range 0x4280-0x42ff has been reserved [ 0.208286] system 00:01: ioport range 0x5000-0x503f has been reserved [ 0.208289] system 00:01: ioport range 0x5100-0x513f has been reserved [ 0.208297] system 00:02: iomem range 0xf0000-0xf3fff could not be reserved [ 0.208301] system 00:02: iomem range 0xf4000-0xf7fff could not be reserved [ 0.208306] system 00:02: iomem range 0xf8000-0xfbfff could not be reserved [ 0.208309] system 00:02: iomem range 0xfc000-0xfffff could not be reserved [ 0.208313] system 00:02: iomem range 0x5fff0000-0x5fffffff could not be reserved [ 0.208318] system 00:02: iomem range 0xffff0000-0xffffffff has been reserved [ 0.208322] system 00:02: iomem range 0x0-0x9ffff could not be reserved [ 0.208326] system 00:02: iomem range 0x100000-0x5ffeffff could not be reserved [ 0.208330] system 00:02: iomem range 0xfec00000-0xfec00fff could not be reserved [ 0.208334] system 00:02: iomem range 0xfee00000-0xfee00fff has been reserved [ 0.208346] system 00:04: ioport range 0xb78-0xb7b has been reserved [ 0.208350] system 00:04: ioport range 0xf78-0xf7b has been reserved [ 0.208353] system 00:04: ioport range 0xa78-0xa7b has been reserved [ 0.208357] system 00:04: ioport range 0xe78-0xe7b has been reserved [ 0.208360] system 00:04: ioport range 0xbbc-0xbbf has been reserved [ 0.208370] system 00:04: ioport range 0xfbc-0xfbf has been reserved [ 0.208374] system 00:04: ioport range 0x4d0-0x4d1 has been reserved [ 0.208377] system 00:04: ioport range 0x294-0x297 has been reserved [ 0.243130] pci 0000:00:08.0: PCI bridge, secondary bus 0000:01 [ 0.243133] pci 0000:00:08.0: IO window: disabled [ 0.243139] pci 0000:00:08.0: MEM window: disabled [ 0.243144] pci 0000:00:08.0: PREFETCH window: disabled [ 0.243154] pci 0000:00:1e.0: PCI bridge, secondary bus 0000:02 [ 0.243157] pci 0000:00:1e.0: IO window: 0xc000-0xcfff [ 0.243163] pci 0000:00:1e.0: MEM window: 0xe0000000-0xe1ffffff [ 0.243167] pci 0000:00:1e.0: PREFETCH window: 0xd8000000-0xdfffffff [ 0.243181] pci 0000:00:08.0: setting latency timer to 64 [ 0.243190] pci_bus 0000:00: resource 0 io: [0x00-0xffff] [ 0.243194] pci_bus 0000:00: resource 1 mem: [0x000000-0xffffffff] [ 0.243197] pci_bus 0000:02: resource 0 io: [0xc000-0xcfff] [ 0.243201] pci_bus 0000:02: resource 1 mem: [0xe0000000-0xe1ffffff] [ 0.243204] pci_bus 0000:02: resource 2 pref mem [0xd8000000-0xdfffffff] [ 0.243247] NET: Registered protocol family 2 [ 0.243355] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.243817] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.245105] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.245750] TCP: Hash tables configured (established 131072 bind 65536) [ 0.245753] TCP reno registered [ 0.245876] NET: Registered protocol family 1 [ 0.279738] pci 0000:02:00.0: Boot video device [ 0.279976] cpufreq-nforce2: Detected nForce2 chipset revision C1 [ 0.279979] cpufreq-nforce2: FSB changing is maybe unstable and can lead to crashes and data loss. [ 0.279988] cpufreq-nforce2: FSB currently at 167 MHz, FID 11.5 [ 0.280055] Scanning for low memory corruption every 60 seconds [ 0.280186] audit: initializing netlink socket (disabled) [ 0.280203] type=2000 audit(1276658438.279:1): initialized [ 0.290365] Trying to unpack rootfs image as initramfs... [ 0.304123] highmem bounce pool size: 64 pages [ 0.304131] HugeTLB registered 4 MB page size, pre-allocated 0 pages [ 0.306067] VFS: Disk quotas dquot_6.5.2 [ 0.306149] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 0.306832] fuse init (API version 7.13) [ 0.306934] msgmni has been set to 1693 [ 0.312083] alg: No test for stdrng (krng) [ 0.312163] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.312167] io scheduler noop registered [ 0.312170] io scheduler anticipatory registered [ 0.312172] io scheduler deadline registered [ 0.312228] io scheduler cfq registered (default) [ 0.312370] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.312398] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.312535] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 0.312541] ACPI: Power Button [PWRB] [ 0.312614] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 [ 0.312617] ACPI: Power Button [PWRF] [ 0.312676] fan PNP0C0B:00: registered as cooling_device0 [ 0.312682] ACPI: Fan [FAN] (on) [ 0.313122] processor LNXCPU:00: registered as cooling_device1 [ 0.318096] thermal LNXTHERM:01: registered as thermal_zone0 [ 0.318106] ACPI: Thermal Zone [THRM] (43 C) [ 0.323841] isapnp: Scanning for PnP cards... [ 0.331111] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.331229] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 0.331340] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A [ 0.331681] 00:0a: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 0.331845] 00:0b: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A [ 0.333121] brd: module loaded [ 0.333688] loop: module loaded [ 0.333798] input: Macintosh mouse button emulation as /devices/virtual/input/input2 [ 0.334027] pata_acpi 0000:00:09.0: setting latency timer to 64 [ 0.334406] Fixed MDIO Bus: probed [ 0.334448] PPP generic driver version 2.4.2 [ 0.334496] tun: Universal TUN/TAP device driver, 1.6 [ 0.334499] tun: (C) 1999-2004 Max Krasnyansky [ 0.334593] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.334973] ACPI: PCI Interrupt Link [APCL] enabled at IRQ 22 [ 0.334980] alloc irq_desc for 22 on node -1 [ 0.334983] alloc kstat_irqs on node -1 [ 0.334993] ehci_hcd 0000:00:02.2: PCI INT C -> Link[APCL] -> GSI 22 (level, high) -> IRQ 22 [ 0.335018] ehci_hcd 0000:00:02.2: setting latency timer to 64 [ 0.335022] ehci_hcd 0000:00:02.2: EHCI Host Controller [ 0.335066] ehci_hcd 0000:00:02.2: new USB bus registered, assigned bus number 1 [ 0.335102] ehci_hcd 0000:00:02.2: debug port 1 [ 0.335112] ehci_hcd 0000:00:02.2: cache line size of 64 is not supported [ 0.335132] ehci_hcd 0000:00:02.2: irq 22, io mem 0xe2000000 [ 0.383599] ehci_hcd 0000:00:02.2: USB 2.0 started, EHCI 1.00 [ 0.383790] usb usb1: configuration #1 chosen from 1 choice [ 0.383835] hub 1-0:1.0: USB hub found [ 0.383851] hub 1-0:1.0: 6 ports detected [ 0.383930] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.384314] ACPI: PCI Interrupt Link [APCF] enabled at IRQ 21 [ 0.384321] alloc irq_desc for 21 on node -1 [ 0.384324] alloc kstat_irqs on node -1 [ 0.384333] ohci_hcd 0000:00:02.0: PCI INT A -> Link[APCF] -> GSI 21 (level, high) -> IRQ 21 [ 0.384353] ohci_hcd 0000:00:02.0: setting latency timer to 64 [ 0.384357] ohci_hcd 0000:00:02.0: OHCI Host Controller [ 0.384417] ohci_hcd 0000:00:02.0: new USB bus registered, assigned bus number 2 [ 0.384452] ohci_hcd 0000:00:02.0: irq 21, io mem 0xe2004000 [ 0.473520] usb usb2: configuration #1 chosen from 1 choice [ 0.473560] hub 2-0:1.0: USB hub found [ 0.473577] hub 2-0:1.0: 3 ports detected [ 0.474043] ACPI: PCI Interrupt Link [APCG] enabled at IRQ 20 [ 0.474050] alloc irq_desc for 20 on node -1 [ 0.474053] alloc kstat_irqs on node -1 [ 0.474063] ohci_hcd 0000:00:02.1: PCI INT B -> Link[APCG] -> GSI 20 (level, high) -> IRQ 20 [ 0.474085] ohci_hcd 0000:00:02.1: setting latency timer to 64 [ 0.474088] ohci_hcd 0000:00:02.1: OHCI Host Controller [ 0.474141] ohci_hcd 0000:00:02.1: new USB bus registered, assigned bus number 3 [ 0.474177] ohci_hcd 0000:00:02.1: irq 20, io mem 0xe2005000 [ 0.561824] usb usb3: configuration #1 chosen from 1 choice [ 0.561864] hub 3-0:1.0: USB hub found [ 0.561881] hub 3-0:1.0: 3 ports detected [ 0.561952] uhci_hcd: USB Universal Host Controller Interface driver [ 0.562083] PNP: No PS/2 controller found. Probing ports directly. [ 0.827977] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.828156] mice: PS/2 mouse device common for all mice [ 0.828296] rtc_cmos 00:06: RTC can wake from S4 [ 0.828347] rtc_cmos 00:06: rtc core: registered rtc_cmos as rtc0 [ 0.828376] rtc0: alarms up to one year, y3k, 242 bytes nvram [ 0.828498] device-mapper: uevent: version 1.0.3 [ 0.832024] device-mapper: ioctl: 4.15.0-ioctl (2009-04-01) initialised: dm-devel@redhat.com [ 0.835867] device-mapper: multipath: version 1.1.0 loaded [ 0.835872] device-mapper: multipath round-robin: version 1.0.0 loaded [ 0.836110] EISA: Probing bus 0 at eisa.0 [ 0.836133] Cannot allocate resource for EISA slot 4 [ 0.836136] Cannot allocate resource for EISA slot 5 [ 0.836153] EISA: Detected 0 cards. [ 0.836239] cpuidle: using governor ladder [ 0.836241] cpuidle: using governor menu [ 0.836734] TCP cubic registered [ 0.836916] NET: Registered protocol family 10 [ 0.837419] lo: Disabled Privacy Extensions [ 0.837766] NET: Registered protocol family 17 [ 0.837806] powernow-k8: Processor cpuid 6a0 not supported [ 0.837828] Using IPI No-Shortcut mode [ 0.837953] PM: Resume from disk failed. [ 0.837976] registered taskstats version 1 [ 0.838198] Magic number: 14:786:310 [ 0.838234] tty tty39: hash matches [ 0.838315] rtc_cmos 00:06: setting system clock to 2010-06-16 03:20:39 UTC (1276658439) [ 0.838319] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.838321] EDD information not available. [ 1.003736] isapnp: No Plug & Play device found [ 1.056021] usb 2-2: new low speed USB device using ohci_hcd and address 2 [ 1.073679] Freeing initrd memory: 13081k freed [ 1.088946] Freeing unused kernel memory: 656k freed [ 1.089822] Write protecting the kernel text: 4676k [ 1.089858] Write protecting the kernel read-only data: 1840k [ 1.115203] udev: starting version 151 [ 1.271716] usb 2-2: configuration #1 chosen from 1 choice [ 1.331636] Floppy drive(s): fd0 is 1.44M [ 1.355802] FDC 0 is a post-1991 82077 [ 1.378370] forcedeth: Reverse Engineered nForce ethernet driver. Version 0.64. [ 1.378744] ACPI: PCI Interrupt Link [APCH] enabled at IRQ 22 [ 1.378752] forcedeth 0000:00:04.0: PCI INT A -> Link[APCH] -> GSI 22 (level, high) -> IRQ 22 [ 1.378759] forcedeth 0000:00:04.0: setting latency timer to 64 [ 1.378816] nv_probe: set workaround bit for reversed mac addr [ 1.378820] forcedeth 0000:00:04.0: Invalid Mac address detected: 19:21:23:45:67:89 [ 1.378823] forcedeth 0000:00:04.0: Please complain to your hardware vendor. Switching to a random MAC. [ 1.380162] Linux agpgart interface v0.103 [ 1.400825] usbcore: registered new interface driver hiddev [ 1.401294] usbcore: registered new interface driver usbhid [ 1.401398] usbhid: v2.6:USB HID core driver [ 1.410286] input: MLK 2.4Ghz wireless combo sets as /devices/pci0000:00/0000:00:02.0/usb2/2-2/2-2:1.0/input/input3 [ 1.410500] sunplus 0003:04FC:05D8.0001: input,hidraw0: USB HID v1.00 Keyboard [MLK 2.4Ghz wireless combo sets] on usb-0000:00:02.0-2/input0 [ 1.418609] sunplus 0003:04FC:05D8.0002: fixing up Sunplus Wireless Desktop report descriptor [ 1.420077] input: MLK 2.4Ghz wireless combo sets as /devices/pci0000:00/0000:00:02.0/usb2/2-2/2-2:1.1/input/input4 [ 1.420601] sunplus 0003:04FC:05D8.0002: input,hiddev96,hidraw1: USB HID v1.00 Mouse [MLK 2.4Ghz wireless combo sets] on usb-0000:00:02.0-2/input1 [ 1.511797] [drm] Initialized drm 1.1.0 20060810 [ 1.562319] [drm] radeon defaulting to kernel modesetting. [ 1.562323] [drm] radeon kernel modesetting enabled. [ 1.562611] ACPI: PCI Interrupt Link [APC4] enabled at IRQ 19 [ 1.562618] alloc irq_desc for 19 on node -1 [ 1.562621] alloc kstat_irqs on node -1 [ 1.562631] radeon 0000:02:00.0: PCI INT A -> Link[APC4] -> GSI 19 (level, high) -> IRQ 19 [ 1.566225] [drm] radeon: Initializing kernel modesetting. [ 1.566319] [drm] register mmio base: 0xE1000000 [ 1.566322] [drm] register mmio size: 65536 [ 1.566932] [drm] GPU reset succeed (RBBM_STATUS=0x00000140) [ 1.566962] BUG: unable to handle kernel NULL pointer dereference at 00000040 [ 1.567107] IP: [] radeon_agp_init+0x19/0x3d0 [radeon] [ 1.567268] *pde = 00000000 [ 1.567359] Oops: 0000 [#1] SMP [ 1.567493] last sysfs file: /sys/module/usbhid/initstate [ 1.567546] Modules linked in: radeon(+) ttm drm_kms_helper drm hid_sunplus usbhid hid nvidia_agp(+) i2c_algo_bit forcedeth(+) pata_amd(+) agpgart floppy [ 1.568017] [ 1.568017] Pid: 228, comm: modprobe Not tainted (2.6.32-22-generic #36-Ubuntu) [ 1.568017] EIP: 0060:[] EFLAGS: 00010282 CPU: 0 [ 1.568017] EIP is at radeon_agp_init+0x19/0x3d0 [radeon] [ 1.568017] EAX: f69a2c00 EBX: f68f5000 ECX: d8000000 EDX: 00000000 [ 1.568017] ESI: f69a2c00 EDI: 00000001 EBP: f69e1d48 ESP: f69e1cf4 [ 1.568017] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 1.568017] Process modprobe (pid: 228, ti=f69e0000 task=f6998cd0 task.ti=f69e0000) [ 1.568017] Stack: [ 1.568017] f69e1d00 00000292 00000000 f69e1d28 c035d2b0 00000001 f69e1d18 0000000e [ 1.568017] <0> 00000292 00000000 f68f5000 04000000 00000001 f69e1d40 f8333f85 f69e1d37 [ 1.568017] <0> 009a2c00 f68f5000 f68f5000 f69a2c00 00000001 f69e1d54 f833186f f68f5000 [ 1.568017] Call Trace: [ 1.568017] [] ? pci_bus_read_config_byte+0x60/0x70 [ 1.568017] [] ? r100_get_accessible_vram+0x55/0x150 [radeon] [ 1.568017] [] ? r100_mc_init+0x9f/0xe0 [radeon] [ 1.568017] [] ? r100_init+0xd2/0x270 [radeon] [ 1.568017] [] ? _spin_lock_irqsave+0x2f/0x50 [ 1.568017] [] ? vga_client_register+0x6b/0x80 [ 1.568017] [] ? radeon_device_init+0x22f/0x2f0 [radeon] [ 1.568017] [] ? radeon_vga_set_decode+0x0/0x30 [radeon] [ 1.568017] [] ? radeon_driver_load_kms+0x7a/0x190 [radeon] [ 1.568017] [] ? drm_get_dev+0x125/0x230 [drm] [ 1.568017] [] ? sysfs_addrm_start+0x60/0xa0 [ 1.568017] [] ? radeon_pci_probe+0x12/0x17f [radeon] [ 1.568017] [] ? local_pci_probe+0x13/0x20 [ 1.568017] [] ? pci_device_probe+0x68/0x90 [ 1.568017] [] ? really_probe+0x4d/0x140 [ 1.568017] [] ? pm_runtime_barrier+0x4e/0xc0 [ 1.568017] [] ? driver_probe_device+0x3c/0x60 [ 1.568017] [] ? __driver_attach+0x81/0x90 [ 1.568017] [] ? bus_for_each_dev+0x53/0x80 [ 1.568017] [] ? driver_attach+0x1e/0x20 [ 1.568017] [] ? __driver_attach+0x0/0x90 [ 1.568017] [] ? bus_add_driver+0xd5/0x280 [ 1.568017] [] ? pci_device_remove+0x0/0x40 [ 1.568017] [] ? driver_register+0x6a/0x130 [ 1.568017] [] ? __pci_register_driver+0x45/0xb0 [ 1.568017] [] ? drm_init+0xf3/0x100 [drm] [ 1.568017] [] ? radeon_init+0xdf/0xe1 [radeon] [ 1.568017] [] ? do_one_initcall+0x31/0x190 [ 1.568017] [] ? radeon_init+0x0/0xe1 [radeon] [ 1.568017] [] ? sys_init_module+0xb0/0x210 [ 1.568017] [] ? syscall_call+0x7/0xb [ 1.568017] Code: 66 90 e8 eb db e9 ff 5d 66 90 c3 8d b4 26 00 00 00 00 55 89 e5 57 56 53 83 ec 48 0f 1f 44 00 00 89 c3 8b 40 04 8b 90 28 02 00 00 <8b> 4a 40 85 c9 75 12 e8 2b db e9 ff 85 c0 89 c7 0f 85 51 03 00 [ 1.568017] EIP: [] radeon_agp_init+0x19/0x3d0 [radeon] SS:ESP 0068:f69e1cf4 [ 1.568017] CR2: 0000000000000040 [ 1.575252] ---[ end trace 85249e87c11fe23d ]--- [ 1.896879] forcedeth 0000:00:04.0: ifname eth0, PHY OUI 0x57d @ 1, addr 76:36:76:a0:57:7e [ 1.896953] forcedeth 0000:00:04.0: timirq lnktim desc-v1 [ 1.897036] pata_amd 0000:00:09.0: version 0.4.1 [ 1.897157] pata_amd 0000:00:09.0: setting latency timer to 64 [ 1.897825] scsi0 : pata_amd [ 1.898067] scsi1 : pata_amd [ 1.899122] ata1: PATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0xf000 irq 14 [ 1.899184] ata2: PATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0xf008 irq 15 [ 1.899378] agpgart: Detected NVIDIA nForce2 chipset [ 1.907747] agpgart-nvidia 0000:00:00.0: AGP aperture is 128M @ 0xd0000000 [ 2.124542] ata1.00: ATA-6: ST340014A, 3.16, max UDMA/100 [ 2.124603] ata1.00: 78125000 sectors, multi 16: LBA48 [ 2.124687] ata1: nv_mode_filter: 0x3f39f&0x3f39f->0x3f39f, BIOS=0x3f000 (0xc600c000) ACPI=0x3f01f (20:600:0x13) [ 2.156450] ata1.00: configured for UDMA/100 [ 2.156641] scsi 0:0:0:0: Direct-Access ATA ST340014A 3.16 PQ: 0 ANSI: 5 [ 2.156893] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 2.157331] sd 0:0:0:0: [sda] 78125000 512-byte logical blocks: (40.0 GB/37.2 GiB) [ 2.157463] sd 0:0:0:0: [sda] Write Protect is off [ 2.157522] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 2.157612] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.157865] sda: sda1 sda2 < sda5 > [ 2.198320] sd 0:0:0:0: [sda] Attached SCSI disk [ 2.320344] ata2.00: ATAPI: COMPAQ DVD-ROM GD-8000, 0009, max UDMA/66 [ 2.320432] ata2: nv_mode_filter: 0x1f39f&0x739f->0x739f, BIOS=0x7000 (0xc600c000) ACPI=0x701f (60:600:0x13) [ 2.336277] ata2.00: configured for UDMA/33 [ 2.343260] scsi 1:0:0:0: CD-ROM COMPAQ DVD-ROM GD-8000 0009 PQ: 0 ANSI: 5 [ 2.356156] sr0: scsi3-mmc drive: 17x/40x cd/rw xa/form2 cdda tray [ 2.356217] Uniform CD-ROM driver Revision: 3.20 [ 2.356542] sr 1:0:0:0: Attached scsi CD-ROM sr0 [ 2.356749] sr 1:0:0:0: Attached scsi generic sg1 type 5 [ 2.900050] BUG: unable to handle kernel NULL pointer dereference at (null) [ 2.900204] IP: [] __mutex_lock_slowpath+0x8a/0x130 [ 2.900314] *pde = 5dfad067 [ 2.900412] Oops: 0002 [#2] SMP [ 2.900553] last sysfs file: /sys/kernel/uevent_seqnum [ 2.900613] Modules linked in: radeon(+) ttm drm_kms_helper drm hid_sunplus usbhid hid nvidia_agp i2c_algo_bit forcedeth pata_amd agpgart floppy [ 2.901289] [ 2.901345] Pid: 271, comm: plymouthd Tainted: G D (2.6.32-22-generic #36-Ubuntu) [ 2.901415] EIP: 0060:[] EFLAGS: 00010246 CPU: 0 [ 2.901474] EIP is at __mutex_lock_slowpath+0x8a/0x130 [ 2.901532] EAX: 00000000 EBX: f69a2e88 ECX: f69a2e90 EDX: f6b0fec0 [ 2.901592] ESI: f69a2e8c EDI: f69a2e98 EBP: f6b0fed8 ESP: f6b0feb4 [ 2.901651] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 2.901710] Process plymouthd (pid: 271, ti=f6b0e000 task=f6a4a670 task.ti=f6b0e000) [ 2.901777] Stack: [ 2.901830] 00000000 f69a2e90 f6a4a670 f69a2e90 00000000 f69a2c00 f69a2e88 f6819680 [ 2.902191] <0> f69a2e88 f6b0fee8 c058a485 f6819680 f6819680 f6b0fefc f81afa53 f6819680 [ 2.902644] <0> f68196e0 f69a2c00 f6b0ff44 f81a707f 00000001 f81b7265 f81b67c0 f81b87c4 [ 2.903148] Call Trace: [ 2.903206] [] ? mutex_lock+0x25/0x40 [ 2.903291] [] ? drm_fb_release+0x23/0x70 [drm] [ 2.903357] [] ? drm_release+0x3cf/0x490 [drm] [ 2.903419] [] ? __fput+0xdf/0x1f0 [ 2.903478] [] ? fput+0x1d/0x30 [ 2.903539] [] ? filp_close+0x4c/0x80 [ 2.903598] [] ? sys_close+0x75/0xc0 [ 2.903658] [] ? syscall_call+0x7/0xb [ 2.903715] Code: 18 63 7f bd 90 8d 74 26 00 8d 73 04 89 f0 e8 de 11 00 00 8d 55 e8 8d 43 08 89 45 e0 8b 43 0c 89 53 0c 8b 4d e0 89 45 ec 89 4d e8 <89> 10 8b 45 e4 ba ff ff ff ff 89 45 f0 89 d0 87 03 83 f8 01 74 [ 2.904007] EIP: [] __mutex_lock_slowpath+0x8a/0x130 SS:ESP 0068:f6b0feb4 [ 2.904007] CR2: 0000000000000000 [ 2.906806] ---[ end trace 85249e87c11fe23e ]--- [ 2.916790] xor: automatically using best checksumming function: pIII_sse [ 2.936007] pIII_sse : 1602.000 MB/sec [ 2.936064] xor: using function: pIII_sse (1602.000 MB/sec) [ 2.940053] device-mapper: dm-raid45: initialized v0.2594b [ 3.032322] EXT3-fs: INFO: recovery required on readonly filesystem. [ 3.032389] EXT3-fs: write access will be enabled during recovery. [ 7.132886] kjournald starting. Commit interval 5 seconds [ 7.132972] EXT3-fs: sda1: orphan cleanup on readonly fs [ 7.133037] ext3_orphan_cleanup: deleting unreferenced inode 2122721 [ 7.154789] ext3_orphan_cleanup: deleting unreferenced inode 2122720 [ 7.159625] ext3_orphan_cleanup: deleting unreferenced inode 2122719 [ 7.165046] ext3_orphan_cleanup: deleting unreferenced inode 2122716 [ 7.165121] ext3_orphan_cleanup: deleting unreferenced inode 2122714 [ 7.165196] ext3_orphan_cleanup: deleting unreferenced inode 2122704 [ 7.165266] ext3_orphan_cleanup: deleting unreferenced inode 2122703 [ 7.171569] ext3_orphan_cleanup: deleting unreferenced inode 2122701 [ 7.179147] ext3_orphan_cleanup: deleting unreferenced inode 2122700 [ 7.179218] ext3_orphan_cleanup: deleting unreferenced inode 2122696 [ 7.199331] ext3_orphan_cleanup: deleting unreferenced inode 1860272 [ 7.215190] ext3_orphan_cleanup: deleting unreferenced inode 942395 [ 7.244051] EXT3-fs: sda1: 12 orphan inodes deleted [ 7.244110] EXT3-fs: recovery complete. [ 7.325286] EXT3-fs: mounted filesystem with ordered data mode. [ 30.927883] Adding 1485972k swap on /dev/sda5. Priority:-1 extents:1 across:1485972k [ 30.967991] udev: starting version 151 [ 31.572068] parport_pc 00:0c: reported by Plug and Play ACPI [ 31.572129] parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE] [ 31.602440] lp: driver loaded but no devices found [ 31.650714] ppdev: user-space parallel port driver [ 31.664882] lp0: using parport0 (interrupt-driven). [ 31.689067] type=1505 audit(1276658470.349:2): operation="profile_load" pid=606 name="/sbin/dhclient3" [ 31.689411] type=1505 audit(1276658470.349:3): operation="profile_load" pid=606 name="/usr/lib/NetworkManager/nm-dhcp-client.action" [ 31.689605] type=1505 audit(1276658470.349:4): operation="profile_load" pid=606 name="/usr/lib/connman/scripts/dhclient-script" [ 31.770418] gameport: NS558 PnP Gameport is pnp00:0d/gameport0, io 0x201, speed 59659kHz [ 32.056527] EXT3 FS on sda1, internal journal [ 32.626600] type=1505 audit(1276658471.285:5): operation="profile_load" pid=747 name="/usr/share/gdm/guest-session/Xsession" [ 32.631303] type=1505 audit(1276658471.289:6): operation="profile_replace" pid=748 name="/sbin/dhclient3" [ 32.631653] type=1505 audit(1276658471.289:7): operation="profile_replace" pid=748 name="/usr/lib/NetworkManager/nm-dhcp-client.action" [ 32.631858] type=1505 audit(1276658471.289:8): operation="profile_replace" pid=748 name="/usr/lib/connman/scripts/dhclient-script" [ 32.660832] type=1505 audit(1276658471.321:9): operation="profile_load" pid=749 name="/usr/bin/evince" [ 32.670326] type=1505 audit(1276658471.329:10): operation="profile_load" pid=749 name="/usr/bin/evince-previewer" [ 32.688760] type=1505 audit(1276658471.349:11): operation="profile_load" pid=749 name="/usr/bin/evince-thumbnailer" [ 32.966738] apm: BIOS version 1.2 Flags 0x07 (Driver version 1.16ac) [ 32.966743] apm: overridden by ACPI. Bug: 601229 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-6-generic (buildd@yellow) (gcc version 4.4.4 (Ubuntu 4.4.4-6ubuntu2) ) #9-Ubuntu SMP Thu Jul 1 03:01:23 UTC 2010 (Ubuntu 2.6.35-6.9-generic 2.6.35-rc3) [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-2.6.35-6-generic root=UUID=799e9cf3-ccb9-48e0-ba0e-22b50bb09faf ro quiet splash [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009e000 (usable) [ 0.000000] BIOS-e820: 000000000009e000 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000ce000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000bff50000 (usable) [ 0.000000] BIOS-e820: 00000000bff50000 - 00000000bff65000 (ACPI data) [ 0.000000] BIOS-e820: 00000000bff65000 - 00000000bff66000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000bff66000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000fff80000 - 0000000100000000 (reserved) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0xbff50 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-CEFFF write-protect [ 0.000000] CF000-E3FFF uncachable [ 0.000000] E4000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0000000000 mask FF80000000 write-back [ 0.000000] 1 base 0080000000 mask FFC0000000 write-back [ 0.000000] 2 disabled [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820 update range: 0000000000001000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009e000 (usable) [ 0.000000] modified: 000000000009e000 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000ce000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 00000000bff50000 (usable) [ 0.000000] modified: 00000000bff50000 - 00000000bff65000 (ACPI data) [ 0.000000] modified: 00000000bff65000 - 00000000bff66000 (ACPI NVS) [ 0.000000] modified: 00000000bff66000 - 00000000c0000000 (reserved) [ 0.000000] modified: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fec10000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000fff80000 - 0000000100000000 (reserved) [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] found SMP MP-table at [ffff8800000f7c90] f7c90 [ 0.000000] init_memory_mapping: 0000000000000000-00000000bff50000 [ 0.000000] 0000000000 - 00bfe00000 page 2M [ 0.000000] 00bfe00000 - 00bff50000 page 4k [ 0.000000] kernel direct mapping tables up to bff50000 @ 16000-1b000 [ 0.000000] RAMDISK: 3759c000 - 37ff0000 [ 0.000000] ACPI: RSDP 00000000000f7ca0 00024 (v02 ACRSYS) [ 0.000000] ACPI: XSDT 00000000bff5e48d 00054 (v01 ACRSYS ACRPRDCT 06040000 LTP 00000000) [ 0.000000] ACPI: FACP 00000000bff64c02 000F4 (v03 NVIDIA MCP67-M 06040000 PTL_ 000F4240) [ 0.000000] ACPI: DSDT 00000000bff5e4e1 066AD (v01 NVIDIA MCP67 06040000 MSFT 03000000) [ 0.000000] ACPI: FACS 00000000bff65fc0 00040 [ 0.000000] ACPI: SSDT 00000000bff64cf6 00206 (v01 PTLTD POWERNOW 06040000 LTP 00000001) [ 0.000000] ACPI: MCFG 00000000bff64efc 0003C (v01 Nvidia NVDAACPI 06040000 NVDA 00000000) [ 0.000000] ACPI: HPET 00000000bff64f38 00038 (v01 PTLTD HPETTBL 06040000 LTP 00000001) [ 0.000000] ACPI: APIC 00000000bff64f70 00068 (v01 PTLTD ? APIC 06040000 LTP 00000000) [ 0.000000] ACPI: BOOT 00000000bff64fd8 00028 (v01 PTLTD $SBFTBL$ 06040000 LTP 00000001) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] Scanning NUMA topology in Northbridge 24 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-00000000bff50000 [ 0.000000] Initmem setup node 0 0000000000000000-00000000bff50000 [ 0.000000] NODE_DATA [0000000001d1f100 - 0000000001d240ff] [ 0.000000] [ffffea0000000000-ffffea00029fffff] PMD -> [ffff880002600000-ffff880004ffffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal empty [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009e [ 0.000000] 0: 0x00000100 -> 0x000bff50 [ 0.000000] On node 0 totalpages: 786142 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3926 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 10694 pages used for memmap [ 0.000000] DMA32 zone: 771466 pages, LIFO batch:31 [ 0.000000] Detected use of extended apic ids on hypertransport bus [ 0.000000] ACPI: PM-Timer IO Port: 0x1008 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 2, version 17, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x10de8201 base: 0xfed00000 [ 0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [19000 - 197ff] [ 0.000000] PM: Registered nosave memory: 000000000009e000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000ce000 [ 0.000000] PM: Registered nosave memory: 00000000000ce000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:20000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:2 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 30 pages/cpu @ffff880001e00000 s91456 r8192 d23232 u1048576 [ 0.000000] pcpu-alloc: s91456 r8192 d23232 u1048576 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 775392 [ 0.000000] Policy zone: DMA32 [ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-2.6.35-6-generic root=UUID=799e9cf3-ccb9-48e0-ba0e-22b50bb09faf ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Node 0: aperture @ ffa6000000 size 32 MB [ 0.000000] Aperture beyond 4GB. Ignoring. [ 0.000000] Subtract (48 early reservations) [ 0.000000] #1 [0001000000 - 0001d1e314] TEXT DATA BSS [ 0.000000] #2 [003759c000 - 0037ff0000] RAMDISK [ 0.000000] #3 [0001d1f000 - 0001d1f0ed] BRK [ 0.000000] #4 [00000f7ca0 - 0000100000] BIOS reserved [ 0.000000] #5 [00000f7c90 - 00000f7ca0] MP-table mpf [ 0.000000] #6 [000009e000 - 000009e571] BIOS reserved [ 0.000000] #7 [000009e6c5 - 00000f7c90] BIOS reserved [ 0.000000] #8 [000009e571 - 000009e6c5] MP-table mpc [ 0.000000] #9 [0000010000 - 0000012000] TRAMPOLINE [ 0.000000] #10 [0000012000 - 0000016000] ACPI WAKEUP [ 0.000000] #11 [0000016000 - 0000019000] PGTABLE [ 0.000000] #12 [0001d1f100 - 0001d24100] NODE_DATA [ 0.000000] #13 [0001d24100 - 0001d25100] BOOTMEM [ 0.000000] #14 [0001d1e340 - 0001d1e580] BOOTMEM [ 0.000000] #15 [0002526000 - 0002527000] BOOTMEM [ 0.000000] #16 [0002527000 - 0002528000] BOOTMEM [ 0.000000] #17 [0002600000 - 0005000000] MEMMAP 0 [ 0.000000] #18 [0001d1e580 - 0001d1e700] BOOTMEM [ 0.000000] #19 [0001d25100 - 0001d3d100] BOOTMEM [ 0.000000] #20 [0001d3e000 - 0001d3f000] BOOTMEM [ 0.000000] #21 [0001d1e700 - 0001d1e741] BOOTMEM [ 0.000000] #22 [0001d1e780 - 0001d1e7c3] BOOTMEM [ 0.000000] #23 [0001d1e800 - 0001d1eaa0] BOOTMEM [ 0.000000] #24 [0001d1eac0 - 0001d1eb28] BOOTMEM [ 0.000000] #25 [0001d1eb40 - 0001d1eba8] BOOTMEM [ 0.000000] #26 [0001d1ebc0 - 0001d1ec28] BOOTMEM [ 0.000000] #27 [0001d1ec40 - 0001d1eca8] BOOTMEM [ 0.000000] #28 [0001d1ecc0 - 0001d1ed28] BOOTMEM [ 0.000000] #29 [0001d1ed40 - 0001d1eda8] BOOTMEM [ 0.000000] #30 [0001d1edc0 - 0001d1ee28] BOOTMEM [ 0.000000] #31 [0001d1ee40 - 0001d1eea8] BOOTMEM [ 0.000000] #32 [0001d1eec0 - 0001d1ef28] BOOTMEM [ 0.000000] #33 [0001d1ef40 - 0001d1efa8] BOOTMEM [ 0.000000] #34 [0001d3d100 - 0001d3d168] BOOTMEM [ 0.000000] #35 [0001d1efc0 - 0001d1efe0] BOOTMEM [ 0.000000] #36 [0001d3d180 - 0001d3d1e4] BOOTMEM [ 0.000000] #37 [0001d3d200 - 0001d3d264] BOOTMEM [ 0.000000] #38 [0001e00000 - 0001e1e000] BOOTMEM [ 0.000000] #39 [0001f00000 - 0001f1e000] BOOTMEM [ 0.000000] #40 [0001d3d280 - 0001d3d288] BOOTMEM [ 0.000000] #41 [0001d3d2c0 - 0001d3d2c8] BOOTMEM [ 0.000000] #42 [0001d3d300 - 0001d3d308] BOOTMEM [ 0.000000] #43 [0001d3d340 - 0001d3d350] BOOTMEM [ 0.000000] #44 [0001d3d380 - 0001d3d4c0] BOOTMEM [ 0.000000] #45 [0001d3d4c0 - 0001d3d520] BOOTMEM [ 0.000000] #46 [0001d3d540 - 0001d3d5a0] BOOTMEM [ 0.000000] #47 [0001d3f000 - 0001d47000] BOOTMEM [ 0.000000] Memory: 3077104k/3145024k available (5705k kernel code, 456k absent, 67464k reserved, 5422k data, 904k init) [ 0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:4352 nr_irqs:512 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] spurious 8259A interrupt: IRQ7. [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 31457280 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1900.274 MHz processor. [ 0.010009] Calibrating delay loop (skipped), value calculated using timer frequency.. 3800.54 BogoMIPS (lpj=19002740) [ 0.010015] pid_max: default: 32768 minimum: 301 [ 0.010044] Security Framework initialized [ 0.010066] AppArmor: AppArmor initialized [ 0.010670] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.014343] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.016051] Mount-cache hash table entries: 256 [ 0.016222] Initializing cgroup subsys ns [ 0.016227] Initializing cgroup subsys cpuacct [ 0.016232] Initializing cgroup subsys memory [ 0.016244] Initializing cgroup subsys devices [ 0.016247] Initializing cgroup subsys freezer [ 0.016249] Initializing cgroup subsys net_cls [ 0.016279] tseg: 00bff80000 [ 0.016282] CPU: Physical Processor ID: 0 [ 0.016284] CPU: Processor Core ID: 0 [ 0.016287] mce: CPU supports 5 MCE banks [ 0.016298] using C1E aware idle routine [ 0.016301] Performance Events: AMD PMU driver. [ 0.016306] ... version: 0 [ 0.016309] ... bit width: 48 [ 0.016310] ... generic registers: 4 [ 0.016312] ... value mask: 0000ffffffffffff [ 0.016315] ... max period: 00007fffffffffff [ 0.016317] ... fixed-purpose events: 0 [ 0.016319] ... event mask: 000000000000000f [ 0.021719] ACPI: Core revision 20100428 [ 0.030014] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.030021] ftrace: allocating 22639 entries in 89 pages [ 0.040100] Setting APIC routing to flat [ 0.040578] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.146622] CPU0: AMD Athlon(tm) 64 X2 Dual-Core Processor TK-57 stepping 02 [ 0.150000] Booting Node 0, Processors #1 Ok. [ 0.020000] System has AMD C1E enabled [ 0.020000] Switch to broadcast mode on CPU1 [ 0.300097] Brought up 2 CPUs [ 0.300100] Total of 2 processors activated (7601.09 BogoMIPS). [ 0.300364] Switch to broadcast mode on CPU0 [ 0.300364] devtmpfs: initialized [ 0.300940] regulator: core version 0.5 [ 0.300983] Time: 23:20:07 Date: 07/02/10 [ 0.301039] NET: Registered protocol family 16 [ 0.301192] node 0 link 0: io port [1000, fffff] [ 0.301196] TOM: 00000000c0000000 aka 3072M [ 0.301200] node 0 link 0: mmio [a0000, bffff] [ 0.301203] node 0 link 0: mmio [c0000000, dfffffff] [ 0.301207] node 0 link 0: mmio [e0000000, efffffff] [ 0.301211] node 0 link 0: mmio [f0000000, fe0bffff] [ 0.301215] bus: [00, ff] on node 0 link 0 [ 0.301219] bus: 00 index 0 [io 0x0000-0xffff] [ 0.301222] bus: 00 index 1 [mem 0x000a0000-0x000bffff] [ 0.301225] bus: 00 index 2 [mem 0xc0000000-0xfcffffffff] [ 0.301233] ACPI: bus type pci registered [ 0.301314] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.301318] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.320072] Trying to unpack rootfs image as initramfs... [ 0.320000] PCI: Using configuration type 1 for base access [ 0.330169] bio: create slab at 0 [ 0.331522] ACPI: EC: Look up EC in DSDT [ 0.336492] ACPI: Interpreter enabled [ 0.336496] ACPI: (supports S0 S3 S4 S5) [ 0.336520] ACPI: Using IOAPIC for interrupt routing [ 0.626538] Freeing initrd memory: 10576k freed [ 0.673855] ACPI: EC: GPE = 0x10, I/O: command/status = 0x66, data = 0x62 [ 0.674173] ACPI: No dock devices found. [ 0.674178] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.674473] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.674771] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 0.674774] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 0.674777] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.674781] pci_root PNP0A08:00: host bridge window [mem 0x000c0000-0x000c3fff] [ 0.674784] pci_root PNP0A08:00: host bridge window [mem 0x000c4000-0x000c7fff] [ 0.674787] pci_root PNP0A08:00: host bridge window [mem 0x000c8000-0x000cbfff] [ 0.674791] pci_root PNP0A08:00: address space collision: host bridge window [mem 0x000cc000-0x000cffff] conflicts with reserved [mem 0x000ce000-0x000fffff] [ 0.674795] pci_root PNP0A08:00: host bridge window [mem 0x000d0000-0x000d3fff] [ 0.674798] pci_root PNP0A08:00: host bridge window [mem 0x000d4000-0x000d7fff] [ 0.674801] pci_root PNP0A08:00: host bridge window [mem 0x000d8000-0x000dbfff] [ 0.674804] pci_root PNP0A08:00: host bridge window [mem 0x000dc000-0x000dffff] [ 0.674807] pci_root PNP0A08:00: host bridge window [mem 0x000e0000-0x000e3fff] [ 0.674810] pci_root PNP0A08:00: host bridge window [mem 0x000e4000-0x000e7fff] [ 0.674813] pci_root PNP0A08:00: host bridge window [mem 0x000e8000-0x000ebfff] [ 0.674816] pci_root PNP0A08:00: host bridge window [mem 0x000ec000-0x000effff] [ 0.674819] pci_root PNP0A08:00: host bridge window [mem 0x000f0000-0x000fffff] [ 0.674822] pci_root PNP0A08:00: host bridge window [mem 0xfed40000-0xfed44fff] [ 0.674826] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xfebfffff] [ 0.674975] pci 0000:00:01.0: reg 10: [io 0x1d00-0x1dff] [ 0.675013] pci 0000:00:01.1: reg 10: [io 0x3080-0x30bf] [ 0.675024] pci 0000:00:01.1: reg 20: [io 0x3040-0x307f] [ 0.675028] pci 0000:00:01.1: reg 24: [io 0x3000-0x303f] [ 0.675049] pci 0000:00:01.1: PME# supported from D3hot D3cold [ 0.675055] pci 0000:00:01.1: PME# disabled [ 0.675116] pci 0000:00:01.3: reg 10: [mem 0xd0600000-0xd067ffff] [ 0.675195] pci 0000:00:02.0: reg 10: [mem 0xd0886000-0xd0886fff] [ 0.675218] pci 0000:00:02.0: supports D1 D2 [ 0.675221] pci 0000:00:02.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.675225] pci 0000:00:02.0: PME# disabled [ 0.675246] pci 0000:00:02.1: reg 10: [mem 0xd0889000-0xd08890ff] [ 0.675275] pci 0000:00:02.1: supports D1 D2 [ 0.675278] pci 0000:00:02.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.675282] pci 0000:00:02.1: PME# disabled [ 0.675308] pci 0000:00:04.0: reg 10: [mem 0xd0887000-0xd0887fff] [ 0.675332] pci 0000:00:04.0: supports D1 D2 [ 0.675334] pci 0000:00:04.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.675338] pci 0000:00:04.0: PME# disabled [ 0.675359] pci 0000:00:04.1: reg 10: [mem 0xd0889400-0xd08894ff] [ 0.675387] pci 0000:00:04.1: supports D1 D2 [ 0.675390] pci 0000:00:04.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.675394] pci 0000:00:04.1: PME# disabled [ 0.675428] pci 0000:00:06.0: reg 20: [io 0x30c0-0x30cf] [ 0.675465] pci 0000:00:07.0: reg 10: [mem 0xd0880000-0xd0883fff] [ 0.675493] pci 0000:00:07.0: PME# supported from D3hot D3cold [ 0.675497] pci 0000:00:07.0: PME# disabled [ 0.675560] pci 0000:00:09.0: reg 10: [io 0x30f0-0x30f7] [ 0.675564] pci 0000:00:09.0: reg 14: [io 0x30e4-0x30e7] [ 0.675569] pci 0000:00:09.0: reg 18: [io 0x30e8-0x30ef] [ 0.675573] pci 0000:00:09.0: reg 1c: [io 0x30e0-0x30e3] [ 0.675578] pci 0000:00:09.0: reg 20: [io 0x30d0-0x30df] [ 0.675583] pci 0000:00:09.0: reg 24: [mem 0xd0884000-0xd0885fff] [ 0.675628] pci 0000:00:0a.0: reg 10: [mem 0xd0888000-0xd0888fff] [ 0.675632] pci 0000:00:0a.0: reg 14: [io 0x30f8-0x30ff] [ 0.675637] pci 0000:00:0a.0: reg 18: [mem 0xd0889c00-0xd0889cff] [ 0.675642] pci 0000:00:0a.0: reg 1c: [mem 0xd0889800-0xd088980f] [ 0.675665] pci 0000:00:0a.0: supports D1 D2 [ 0.675667] pci 0000:00:0a.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.675672] pci 0000:00:0a.0: PME# disabled [ 0.675708] pci 0000:00:0b.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.675711] pci 0000:00:0b.0: PME# disabled [ 0.675746] pci 0000:00:0c.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.675750] pci 0000:00:0c.0: PME# disabled [ 0.675783] pci 0000:00:0d.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.675787] pci 0000:00:0d.0: PME# disabled [ 0.675918] pci 0000:01:04.0: proprietary Ricoh MMC controller disabled (via firewire function) [ 0.675921] pci 0000:01:04.0: MMC cards are now supported by standard SDHCI controller [ 0.675929] pci 0000:01:04.0: reg 10: [mem 0xd0500000-0xd05007ff] [ 0.675963] pci 0000:01:04.0: PME# supported from D0 D3hot D3cold [ 0.675967] pci 0000:01:04.0: PME# disabled [ 0.675991] pci 0000:01:04.1: reg 10: [mem 0xd0500800-0xd05008ff] [ 0.676025] pci 0000:01:04.1: supports D1 D2 [ 0.676028] pci 0000:01:04.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.676032] pci 0000:01:04.1: PME# disabled [ 0.676055] pci 0000:01:04.2: reg 10: [mem 0xd0501000-0xd05010ff] [ 0.676088] pci 0000:01:04.2: supports D1 D2 [ 0.676091] pci 0000:01:04.2: PME# supported from D0 D1 D2 D3hot D3cold [ 0.676095] pci 0000:01:04.2: PME# disabled [ 0.676118] pci 0000:01:04.3: reg 10: [mem 0xd0501400-0xd05014ff] [ 0.676152] pci 0000:01:04.3: supports D1 D2 [ 0.676154] pci 0000:01:04.3: PME# supported from D0 D1 D2 D3hot D3cold [ 0.676158] pci 0000:01:04.3: PME# disabled [ 0.676194] pci 0000:00:08.0: PCI bridge to [bus 01-01] (subtractive decode) [ 0.676198] pci 0000:00:08.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.676202] pci 0000:00:08.0: bridge window [mem 0xd0500000-0xd05fffff] [ 0.676207] pci 0000:00:08.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.676210] pci 0000:00:08.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.676213] pci 0000:00:08.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.676217] pci 0000:00:08.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.676220] pci 0000:00:08.0: bridge window [mem 0x000c0000-0x000c3fff] (subtractive decode) [ 0.676224] pci 0000:00:08.0: bridge window [mem 0x000c4000-0x000c7fff] (subtractive decode) [ 0.676227] pci 0000:00:08.0: bridge window [mem 0x000c8000-0x000cbfff] (subtractive decode) [ 0.676230] pci 0000:00:08.0: bridge window [mem 0x000d0000-0x000d3fff] (subtractive decode) [ 0.676233] pci 0000:00:08.0: bridge window [mem 0x000d4000-0x000d7fff] (subtractive decode) [ 0.676236] pci 0000:00:08.0: bridge window [mem 0x000d8000-0x000dbfff] (subtractive decode) [ 0.676239] pci 0000:00:08.0: bridge window [mem 0x000dc000-0x000dffff] (subtractive decode) [ 0.676243] pci 0000:00:08.0: bridge window [mem 0x000e0000-0x000e3fff] (subtractive decode) [ 0.676246] pci 0000:00:08.0: bridge window [mem 0x000e4000-0x000e7fff] (subtractive decode) [ 0.676249] pci 0000:00:08.0: bridge window [mem 0x000e8000-0x000ebfff] (subtractive decode) [ 0.676252] pci 0000:00:08.0: bridge window [mem 0x000ec000-0x000effff] (subtractive decode) [ 0.676256] pci 0000:00:08.0: bridge window [mem 0x000f0000-0x000fffff] (subtractive decode) [ 0.676259] pci 0000:00:08.0: bridge window [mem 0xfed40000-0xfed44fff] (subtractive decode) [ 0.676262] pci 0000:00:08.0: bridge window [mem 0xc0000000-0xfebfffff] (subtractive decode) [ 0.676305] pci 0000:02:00.0: reg 10: [mem 0xd1000000-0xd1ffffff] [ 0.676313] pci 0000:02:00.0: reg 14: [mem 0xc0000000-0xcfffffff 64bit pref] [ 0.676322] pci 0000:02:00.0: reg 1c: [mem 0xd2000000-0xd3ffffff 64bit] [ 0.676327] pci 0000:02:00.0: reg 24: [io 0x4000-0x407f] [ 0.676333] pci 0000:02:00.0: reg 30: [mem 0x00000000-0x0001ffff pref] [ 0.700016] pci 0000:00:0b.0: PCI bridge to [bus 02-02] [ 0.700020] pci 0000:00:0b.0: bridge window [io 0x4000-0x4fff] [ 0.700024] pci 0000:00:0b.0: bridge window [mem 0xd1000000-0xd3ffffff] [ 0.700029] pci 0000:00:0b.0: bridge window [mem 0xc0000000-0xcfffffff 64bit pref] [ 0.700054] pci 0000:00:0c.0: PCI bridge to [bus 03-04] [ 0.700058] pci 0000:00:0c.0: bridge window [io 0x5000-0x5fff] [ 0.700062] pci 0000:00:0c.0: bridge window [mem 0xd0200000-0xd03fffff] [ 0.700066] pci 0000:00:0c.0: bridge window [mem 0xd0000000-0xd01fffff 64bit pref] [ 0.700115] pci 0000:05:00.0: reg 10: [mem 0xd0400000-0xd040ffff 64bit] [ 0.700173] pci 0000:05:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 0.700185] pci 0000:00:0d.0: PCI bridge to [bus 05-05] [ 0.700189] pci 0000:00:0d.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.700193] pci 0000:00:0d.0: bridge window [mem 0xd0400000-0xd04fffff] [ 0.700198] pci 0000:00:0d.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.700213] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.700342] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P2P0._PRT] [ 0.700366] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.XVR0._PRT] [ 0.700413] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.XVR1._PRT] [ 0.700453] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.XVR2._PRT] [ 0.735816] ACPI: PCI Interrupt Link [LNK1] (IRQs 5 7 11) *10 [ 0.736049] ACPI: PCI Interrupt Link [LNK2] (IRQs 5 7 *11) [ 0.736274] ACPI: PCI Interrupt Link [LNK3] (IRQs 5 7 11) *0, disabled. [ 0.736500] ACPI: PCI Interrupt Link [LNK4] (IRQs 5 7 11) *0, disabled. [ 0.736732] ACPI: PCI Interrupt Link [LK1E] (IRQs 16) *0, disabled. [ 0.736964] ACPI: PCI Interrupt Link [LK2E] (IRQs 17) *10 [ 0.737187] ACPI: PCI Interrupt Link [LK3E] (IRQs 18) *0, disabled. [ 0.737413] ACPI: PCI Interrupt Link [LK4E] (IRQs 19) *10 [ 0.737637] ACPI: PCI Interrupt Link [LSMB] (IRQs 20 21 22 23) *10 [ 0.737864] ACPI: PCI Interrupt Link [LUS0] (IRQs 20 21 22 23) *11 [ 0.738094] ACPI: PCI Interrupt Link [LUS2] (IRQs 20 21 22 23) *7 [ 0.738328] ACPI: PCI Interrupt Link [LMAC] (IRQs 20 21 22 23) *11 [ 0.738555] ACPI: PCI Interrupt Link [LAZA] (IRQs 20 21 22 23) *10 [ 0.738786] ACPI: PCI Interrupt Link [LGPU] (IRQs 17) *0, disabled. [ 0.739013] ACPI: PCI Interrupt Link [LPID] (IRQs 20 21 22 23) *0, disabled. [ 0.739239] ACPI: PCI Interrupt Link [LSI0] (IRQs 20 21 22 23) *5 [ 0.739475] ACPI: PCI Interrupt Link [Z00N] (IRQs 20 21 22 23) *10 [ 0.739712] ACPI: PCI Interrupt Link [Z00O] (IRQs 20 21 22 23) *11 [ 0.739939] ACPI: PCI Interrupt Link [LPMU] (IRQs 18) *11 [ 0.740018] HEST: Table is not found! [ 0.740152] vgaarb: device added: PCI:0000:02:00.0,decodes=io+mem,owns=io+mem,locks=none [ 0.740156] vgaarb: loaded [ 0.740360] SCSI subsystem initialized [ 0.750052] libata version 3.00 loaded. [ 0.750073] usbcore: registered new interface driver usbfs [ 0.750087] usbcore: registered new interface driver hub [ 0.750096] usbcore: registered new device driver usb [ 0.750182] ACPI: WMI: Skipping duplicate GUID 05901221-D566-11D1-B2F0-00A0C9062910 [ 0.750507] ACPI: WMI: Mapper loaded [ 0.750510] PCI: Using ACPI for IRQ routing [ 0.750514] PCI: pci_cache_line_size set to 64 bytes [ 0.750642] reserve RAM buffer: 000000000009e000 - 000000000009ffff [ 0.750645] reserve RAM buffer: 00000000bff50000 - 00000000bfffffff [ 0.750768] NetLabel: Initializing [ 0.750771] NetLabel: domain hash size = 128 [ 0.750772] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.750788] NetLabel: unlabeled traffic allowed by default [ 0.750838] HPET: 3 timers in total, 0 timers will be used for per-cpu timer [ 0.750845] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 31 [ 0.750851] hpet0: 3 comparators, 32-bit 25.000000 MHz counter [ 0.770058] Switching to clocksource hpet [ 0.782445] AppArmor: AppArmor Filesystem Enabled [ 0.782468] pnp: PnP ACPI init [ 0.782491] ACPI: bus type pnp registered [ 0.872275] pnp: PnP ACPI: found 13 devices [ 0.872279] ACPI: ACPI bus type pnp unregistered [ 0.872296] system 00:01: [io 0x0360-0x0361] has been reserved [ 0.872301] system 00:01: [io 0x04d0-0x04d1] has been reserved [ 0.872311] system 00:07: [mem 0xe0000000-0xefffffff] has been reserved [ 0.872318] system 00:0a: [io 0x1000-0x107f] has been reserved [ 0.872321] system 00:0a: [io 0x1080-0x10ff] has been reserved [ 0.872325] system 00:0a: [io 0x1400-0x147f] has been reserved [ 0.872329] system 00:0a: [io 0x1480-0x14ff] has been reserved [ 0.872332] system 00:0a: [io 0x1800-0x187f] has been reserved [ 0.872336] system 00:0a: [io 0x1880-0x18ff] has been reserved [ 0.872343] system 00:0c: [mem 0xffc00000-0xffffffff] could not be reserved [ 0.872347] system 00:0c: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.872351] system 00:0c: [mem 0xfee00000-0xfeefffff] could not be reserved [ 0.872355] system 00:0c: [mem 0xfed00000-0xfed00fff] has been reserved [ 0.872358] system 00:0c: [mem 0xfef00000-0xfef00fff] has been reserved [ 0.877147] pci 0000:00:08.0: PCI bridge to [bus 01-01] [ 0.877150] pci 0000:00:08.0: bridge window [io disabled] [ 0.877154] pci 0000:00:08.0: bridge window [mem 0xd0500000-0xd05fffff] [ 0.877158] pci 0000:00:08.0: bridge window [mem pref disabled] [ 0.877167] pci 0000:02:00.0: BAR 6: can't assign mem pref (size 0x20000) [ 0.877170] pci 0000:00:0b.0: PCI bridge to [bus 02-02] [ 0.877173] pci 0000:00:0b.0: bridge window [io 0x4000-0x4fff] [ 0.877177] pci 0000:00:0b.0: bridge window [mem 0xd1000000-0xd3ffffff] [ 0.877181] pci 0000:00:0b.0: bridge window [mem 0xc0000000-0xcfffffff 64bit pref] [ 0.877186] pci 0000:00:0c.0: PCI bridge to [bus 03-04] [ 0.877189] pci 0000:00:0c.0: bridge window [io 0x5000-0x5fff] [ 0.877193] pci 0000:00:0c.0: bridge window [mem 0xd0200000-0xd03fffff] [ 0.877197] pci 0000:00:0c.0: bridge window [mem 0xd0000000-0xd01fffff 64bit pref] [ 0.877201] pci 0000:00:0d.0: PCI bridge to [bus 05-05] [ 0.877204] pci 0000:00:0d.0: bridge window [io disabled] [ 0.877209] pci 0000:00:0d.0: bridge window [mem 0xd0400000-0xd04fffff] [ 0.877212] pci 0000:00:0d.0: bridge window [mem pref disabled] [ 0.877223] pci 0000:00:08.0: setting latency timer to 64 [ 0.877230] pci 0000:00:0b.0: setting latency timer to 64 [ 0.877236] pci 0000:00:0c.0: setting latency timer to 64 [ 0.877242] pci 0000:00:0d.0: setting latency timer to 64 [ 0.877246] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 0.877249] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 0.877252] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.877255] pci_bus 0000:00: resource 7 [mem 0x000c0000-0x000c3fff] [ 0.877258] pci_bus 0000:00: resource 8 [mem 0x000c4000-0x000c7fff] [ 0.877261] pci_bus 0000:00: resource 9 [mem 0x000c8000-0x000cbfff] [ 0.877264] pci_bus 0000:00: resource 10 [mem 0x000d0000-0x000d3fff] [ 0.877268] pci_bus 0000:00: resource 11 [mem 0x000d4000-0x000d7fff] [ 0.877271] pci_bus 0000:00: resource 12 [mem 0x000d8000-0x000dbfff] [ 0.877274] pci_bus 0000:00: resource 13 [mem 0x000dc000-0x000dffff] [ 0.877277] pci_bus 0000:00: resource 14 [mem 0x000e0000-0x000e3fff] [ 0.877280] pci_bus 0000:00: resource 15 [mem 0x000e4000-0x000e7fff] [ 0.877283] pci_bus 0000:00: resource 16 [mem 0x000e8000-0x000ebfff] [ 0.877286] pci_bus 0000:00: resource 17 [mem 0x000ec000-0x000effff] [ 0.877289] pci_bus 0000:00: resource 18 [mem 0x000f0000-0x000fffff] [ 0.877292] pci_bus 0000:00: resource 19 [mem 0xfed40000-0xfed44fff] [ 0.877295] pci_bus 0000:00: resource 20 [mem 0xc0000000-0xfebfffff] [ 0.877298] pci_bus 0000:01: resource 1 [mem 0xd0500000-0xd05fffff] [ 0.877301] pci_bus 0000:01: resource 4 [io 0x0000-0x0cf7] [ 0.877304] pci_bus 0000:01: resource 5 [io 0x0d00-0xffff] [ 0.877308] pci_bus 0000:01: resource 6 [mem 0x000a0000-0x000bffff] [ 0.877311] pci_bus 0000:01: resource 7 [mem 0x000c0000-0x000c3fff] [ 0.877314] pci_bus 0000:01: resource 8 [mem 0x000c4000-0x000c7fff] [ 0.877316] pci_bus 0000:01: resource 9 [mem 0x000c8000-0x000cbfff] [ 0.877319] pci_bus 0000:01: resource 10 [mem 0x000d0000-0x000d3fff] [ 0.877323] pci_bus 0000:01: resource 11 [mem 0x000d4000-0x000d7fff] [ 0.877326] pci_bus 0000:01: resource 12 [mem 0x000d8000-0x000dbfff] [ 0.877329] pci_bus 0000:01: resource 13 [mem 0x000dc000-0x000dffff] [ 0.877332] pci_bus 0000:01: resource 14 [mem 0x000e0000-0x000e3fff] [ 0.877335] pci_bus 0000:01: resource 15 [mem 0x000e4000-0x000e7fff] [ 0.877338] pci_bus 0000:01: resource 16 [mem 0x000e8000-0x000ebfff] [ 0.877341] pci_bus 0000:01: resource 17 [mem 0x000ec000-0x000effff] [ 0.877344] pci_bus 0000:01: resource 18 [mem 0x000f0000-0x000fffff] [ 0.877348] pci_bus 0000:01: resource 19 [mem 0xfed40000-0xfed44fff] [ 0.877351] pci_bus 0000:01: resource 20 [mem 0xc0000000-0xfebfffff] [ 0.877354] pci_bus 0000:02: resource 0 [io 0x4000-0x4fff] [ 0.877357] pci_bus 0000:02: resource 1 [mem 0xd1000000-0xd3ffffff] [ 0.877360] pci_bus 0000:02: resource 2 [mem 0xc0000000-0xcfffffff 64bit pref] [ 0.877363] pci_bus 0000:03: resource 0 [io 0x5000-0x5fff] [ 0.877367] pci_bus 0000:03: resource 1 [mem 0xd0200000-0xd03fffff] [ 0.877370] pci_bus 0000:03: resource 2 [mem 0xd0000000-0xd01fffff 64bit pref] [ 0.877373] pci_bus 0000:05: resource 1 [mem 0xd0400000-0xd04fffff] [ 0.877415] NET: Registered protocol family 2 [ 0.877627] IP route cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.879890] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 0.886395] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 0.887171] TCP: Hash tables configured (established 524288 bind 65536) [ 0.887175] TCP reno registered [ 0.887194] UDP hash table entries: 2048 (order: 4, 65536 bytes) [ 0.887259] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) [ 0.887408] NET: Registered protocol family 1 [ 0.887587] pci 0000:00:00.0: Found enabled HT MSI Mapping [ 0.887642] pci 0000:00:00.0: Found enabled HT MSI Mapping [ 0.887702] pci 0000:00:00.0: Found enabled HT MSI Mapping [ 0.887769] pci 0000:00:00.0: Found enabled HT MSI Mapping [ 0.887838] pci 0000:00:00.0: Found enabled HT MSI Mapping [ 0.887913] pci 0000:00:00.0: Found enabled HT MSI Mapping [ 0.887992] pci 0000:00:00.0: Found enabled HT MSI Mapping [ 0.888024] pci 0000:02:00.0: Boot video device [ 0.888031] PCI: CLS 64 bytes, default 64 [ 0.889755] Simple Boot Flag at 0x36 set to 0x1 [ 0.890010] Scanning for low memory corruption every 60 seconds [ 0.890209] audit: initializing netlink socket (disabled) [ 0.890223] type=2000 audit(1278112806.890:1): initialized [ 0.905996] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.907893] VFS: Disk quotas dquot_6.5.2 [ 0.907975] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.908764] fuse init (API version 7.14) [ 0.908904] msgmni has been set to 6030 [ 0.909274] alg: No test for stdrng (krng) [ 0.909354] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.909358] io scheduler noop registered [ 0.909361] io scheduler deadline registered [ 0.909414] io scheduler cfq registered (default) [ 0.909615] pcieport 0000:00:0b.0: setting latency timer to 64 [ 0.909636] alloc irq_desc for 40 on node 0 [ 0.909639] alloc kstat_irqs on node 0 [ 0.909649] pcieport 0000:00:0b.0: irq 40 for MSI/MSI-X [ 0.909765] pcieport 0000:00:0c.0: setting latency timer to 64 [ 0.909782] alloc irq_desc for 41 on node 0 [ 0.909784] alloc kstat_irqs on node 0 [ 0.909789] pcieport 0000:00:0c.0: irq 41 for MSI/MSI-X [ 0.909911] pcieport 0000:00:0d.0: setting latency timer to 64 [ 0.909927] alloc irq_desc for 42 on node 0 [ 0.909929] alloc kstat_irqs on node 0 [ 0.909935] pcieport 0000:00:0d.0: irq 42 for MSI/MSI-X [ 0.910036] pcieport 0000:00:0b.0: Requesting control of PCIe PME from ACPI BIOS [ 0.910044] Firmware did not grant requested _OSC control [ 0.910047] pcieport 0000:00:0b.0: Failed to receive control of PCIe PME service: no _OSC support [ 0.910053] pcie_pme: probe of 0000:00:0b.0:pcie01 failed with error -13 [ 0.910059] pcieport 0000:00:0c.0: Requesting control of PCIe PME from ACPI BIOS [ 0.910062] Firmware did not grant requested _OSC control [ 0.910064] pcieport 0000:00:0c.0: Failed to receive control of PCIe PME service: no _OSC support [ 0.910068] pcie_pme: probe of 0000:00:0c.0:pcie01 failed with error -13 [ 0.910074] pcieport 0000:00:0d.0: Requesting control of PCIe PME from ACPI BIOS [ 0.910077] Firmware did not grant requested _OSC control [ 0.910080] pcieport 0000:00:0d.0: Failed to receive control of PCIe PME service: no _OSC support [ 0.910084] pcie_pme: probe of 0000:00:0d.0:pcie01 failed with error -13 [ 0.910114] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.910142] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.982602] ACPI: AC Adapter [ACAD] (on-line) [ 0.982699] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input0 [ 1.052560] ACPI: Lid Switch [LID] [ 1.052642] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input1 [ 1.052646] ACPI: Sleep Button [SLPB] [ 1.052724] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input2 [ 1.052728] ACPI: Power Button [PWRB] [ 1.052776] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3 [ 1.052779] ACPI: Power Button [PWRF] [ 1.053131] ACPI: acpi_idle registered with cpuidle [ 1.053194] ACPI: processor limited to max C-state 1 [ 1.114366] ACPI: Invalid active0 threshold [ 1.130887] thermal LNXTHERM:01: registered as thermal_zone0 [ 1.130898] ACPI: Thermal Zone [THRM] (58 C) [ 1.131004] ERST: Table is not found! [ 1.132992] Linux agpgart interface v0.103 [ 1.133107] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 1.134845] brd: module loaded [ 1.135635] loop: module loaded [ 1.136208] pata_acpi 0000:00:06.0: setting latency timer to 64 [ 1.136685] ACPI: PCI Interrupt Link [LSI0] enabled at IRQ 23 [ 1.136692] alloc irq_desc for 23 on node 0 [ 1.136694] alloc kstat_irqs on node 0 [ 1.136707] pata_acpi 0000:00:09.0: PCI INT A -> Link[LSI0] -> GSI 23 (level, low) -> IRQ 23 [ 1.136738] pata_acpi 0000:00:09.0: setting latency timer to 64 [ 1.136747] pata_acpi 0000:00:09.0: PCI INT A disabled [ 1.137238] Fixed MDIO Bus: probed [ 1.137279] PPP generic driver version 2.4.2 [ 1.137336] tun: Universal TUN/TAP device driver, 1.6 [ 1.137338] tun: (C) 1999-2004 Max Krasnyansky [ 1.137433] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 1.137874] ACPI: PCI Interrupt Link [LUS2] enabled at IRQ 22 [ 1.137878] alloc irq_desc for 22 on node 0 [ 1.137880] alloc kstat_irqs on node 0 [ 1.137889] ehci_hcd 0000:00:02.1: PCI INT B -> Link[LUS2] -> GSI 22 (level, low) -> IRQ 22 [ 1.137912] ehci_hcd 0000:00:02.1: setting latency timer to 64 [ 1.137916] ehci_hcd 0000:00:02.1: EHCI Host Controller [ 1.138012] ehci_hcd 0000:00:02.1: new USB bus registered, assigned bus number 1 [ 1.138043] ehci_hcd 0000:00:02.1: debug port 1 [ 1.138052] ehci_hcd 0000:00:02.1: cache line size of 64 is not supported [ 1.138081] ehci_hcd 0000:00:02.1: irq 22, io mem 0xd0889000 [ 1.138852] ACPI: EC: GPE storm detected, transactions will use polling mode [ 1.160042] ehci_hcd 0000:00:02.1: USB 2.0 started, EHCI 1.00 [ 1.160184] hub 1-0:1.0: USB hub found [ 1.160191] hub 1-0:1.0: 5 ports detected [ 1.160769] ACPI: PCI Interrupt Link [Z00O] enabled at IRQ 21 [ 1.160776] alloc irq_desc for 21 on node 0 [ 1.160778] alloc kstat_irqs on node 0 [ 1.160791] ehci_hcd 0000:00:04.1: PCI INT B -> Link[Z00O] -> GSI 21 (level, low) -> IRQ 21 [ 1.160815] ehci_hcd 0000:00:04.1: setting latency timer to 64 [ 1.160818] ehci_hcd 0000:00:04.1: EHCI Host Controller [ 1.160901] ehci_hcd 0000:00:04.1: new USB bus registered, assigned bus number 2 [ 1.160932] ehci_hcd 0000:00:04.1: debug port 1 [ 1.160940] ehci_hcd 0000:00:04.1: cache line size of 64 is not supported [ 1.160966] ehci_hcd 0000:00:04.1: irq 21, io mem 0xd0889400 [ 1.180034] ehci_hcd 0000:00:04.1: USB 2.0 started, EHCI 1.00 [ 1.180173] hub 2-0:1.0: USB hub found [ 1.180179] hub 2-0:1.0: 5 ports detected [ 1.180296] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 1.180799] ACPI: PCI Interrupt Link [LUS0] enabled at IRQ 20 [ 1.180806] alloc irq_desc for 20 on node 0 [ 1.180808] alloc kstat_irqs on node 0 [ 1.180820] ohci_hcd 0000:00:02.0: PCI INT A -> Link[LUS0] -> GSI 20 (level, low) -> IRQ 20 [ 1.180846] ohci_hcd 0000:00:02.0: setting latency timer to 64 [ 1.180850] ohci_hcd 0000:00:02.0: OHCI Host Controller [ 1.180939] ohci_hcd 0000:00:02.0: new USB bus registered, assigned bus number 3 [ 1.180975] ohci_hcd 0000:00:02.0: irq 20, io mem 0xd0886000 [ 1.242179] hub 3-0:1.0: USB hub found [ 1.242186] hub 3-0:1.0: 5 ports detected [ 1.242778] ACPI: PCI Interrupt Link [Z00N] enabled at IRQ 23 [ 1.242784] ohci_hcd 0000:00:04.0: PCI INT A -> Link[Z00N] -> GSI 23 (level, low) -> IRQ 23 [ 1.242809] ohci_hcd 0000:00:04.0: setting latency timer to 64 [ 1.242812] ohci_hcd 0000:00:04.0: OHCI Host Controller [ 1.242884] ohci_hcd 0000:00:04.0: new USB bus registered, assigned bus number 4 [ 1.242921] ohci_hcd 0000:00:04.0: irq 23, io mem 0xd0887000 [ 1.302164] hub 4-0:1.0: USB hub found [ 1.302171] hub 4-0:1.0: 5 ports detected [ 1.302283] uhci_hcd: USB Universal Host Controller Interface driver [ 1.302436] PNP: PS/2 Controller [PNP0303:KBC0,PNP0f13:MSE0] at 0x60,0x64 irq 1,12 [ 1.332239] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 1.332259] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 1.332359] mice: PS/2 mouse device common for all mice [ 1.332549] rtc_cmos 00:04: RTC can wake from S4 [ 1.332605] rtc_cmos 00:04: rtc core: registered rtc_cmos as rtc0 [ 1.332648] rtc0: alarms up to one year, y3k, 114 bytes nvram, hpet irqs [ 1.332782] device-mapper: uevent: version 1.0.3 [ 1.332922] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 1.333013] device-mapper: multipath: version 1.1.1 loaded [ 1.333016] device-mapper: multipath round-robin: version 1.0.0 loaded [ 1.333205] cpuidle: using governor ladder [ 1.333208] cpuidle: using governor menu [ 1.333510] TCP cubic registered [ 1.333670] NET: Registered protocol family 10 [ 1.334125] lo: Disabled Privacy Extensions [ 1.334370] NET: Registered protocol family 17 [ 1.334422] powernow-k8: Found 1 AMD Athlon(tm) 64 X2 Dual-Core Processor TK-57 (2 cpu cores) (version 2.20.00) [ 1.334486] powernow-k8: 0 : fid 0xb (1900 MHz), vid 0x13 [ 1.334488] powernow-k8: 1 : fid 0xa (1800 MHz), vid 0x14 [ 1.334491] powernow-k8: 2 : fid 0x8 (1600 MHz), vid 0x15 [ 1.334493] powernow-k8: 3 : fid 0x0 (800 MHz), vid 0x1a [ 1.334699] PM: Resume from disk failed. [ 1.334714] registered taskstats version 1 [ 1.335034] Magic number: 2:866:351 [ 1.335162] rtc_cmos 00:04: setting system clock to 2010-07-02 23:20:08 UTC (1278112808) [ 1.335166] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 1.335168] EDD information not available. [ 1.335293] Freeing unused kernel memory: 904k freed [ 1.335890] Write protecting the kernel read-only data: 10240k [ 1.336087] Freeing unused kernel memory: 420k freed [ 1.336519] Freeing unused kernel memory: 1604k freed [ 1.362710] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4 [ 1.363683] udev: starting version 151 [ 1.491483] forcedeth: Reverse Engineered nForce ethernet driver. Version 0.64. [ 1.491959] ACPI: PCI Interrupt Link [LMAC] enabled at IRQ 22 [ 1.491967] forcedeth 0000:00:0a.0: PCI INT A -> Link[LMAC] -> GSI 22 (level, low) -> IRQ 22 [ 1.491972] forcedeth 0000:00:0a.0: setting latency timer to 64 [ 1.506009] sdhci: Secure Digital Host Controller Interface driver [ 1.506014] sdhci: Copyright(c) Pierre Ossman [ 1.527489] ACPI: PCI Interrupt Link [LNK1] enabled at IRQ 11 [ 1.527508] firewire_ohci 0000:01:04.0: PCI INT A -> Link[LNK1] -> GSI 11 (level, low) -> IRQ 11 [ 1.780038] firewire_ohci: Added fw-ohci device 0000:01:04.0, OHCI v1.0, 4 IR + 4 IT contexts, quirks 0x0 [ 1.780146] sdhci-pci 0000:01:04.1: SDHCI controller found [1180:0822] (rev 22) [ 1.780670] ACPI: PCI Interrupt Link [LNK2] enabled at IRQ 11 [ 1.780677] sdhci-pci 0000:01:04.1: PCI INT B -> Link[LNK2] -> GSI 11 (level, low) -> IRQ 11 [ 1.781723] sdhci-pci 0000:01:04.1: Will use DMA mode even though HW doesn't fully claim to support it. [ 1.782783] Registered led device: mmc0:: [ 1.783825] mmc0: SDHCI controller on PCI [0000:01:04.1] using DMA [ 1.841680] usb 4-3: new full speed USB device using ohci_hcd and address 2 [ 2.031184] forcedeth 0000:00:0a.0: ifname eth0, PHY OUI 0x732 @ 1, addr 00:1b:38:cd:e1:bd [ 2.031190] forcedeth 0000:00:0a.0: highdma pwrctl mgmt gbit lnktim msi desc-v3 [ 2.031287] pata_amd 0000:00:06.0: version 0.4.1 [ 2.031342] pata_amd 0000:00:06.0: setting latency timer to 64 [ 2.031431] scsi0 : pata_amd [ 2.031783] scsi1 : pata_amd [ 2.032343] ata1: PATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0x30c0 irq 14 [ 2.032346] ata2: PATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0x30c8 irq 15 [ 2.032630] ahci 0000:00:09.0: version 3.0 [ 2.032645] ahci 0000:00:09.0: PCI INT A -> Link[LSI0] -> GSI 23 (level, low) -> IRQ 23 [ 2.032682] ahci 0000:00:09.0: controller can do NCQ, turning on CAP_NCQ [ 2.032684] ahci 0000:00:09.0: controller can't do PMP, turning off CAP_PMP [ 2.032745] ahci 0000:00:09.0: AHCI 0001.0100 32 slots 4 ports 3 Gbps 0xf impl IDE mode [ 2.032750] ahci 0000:00:09.0: flags: 64bit ncq sntf led clo pio slum part [ 2.032755] ahci 0000:00:09.0: setting latency timer to 64 [ 2.033233] scsi2 : ahci [ 2.033384] scsi3 : ahci [ 2.033492] scsi4 : ahci [ 2.033584] scsi5 : ahci [ 2.033757] ata3: SATA max UDMA/133 irq 23, connection status changed [ 2.033761] ata4: SATA max UDMA/133 abar m8192@0xd0884000 port 0xd0884180 irq 23 [ 2.033765] ata5: SATA max UDMA/133 abar m8192@0xd0884000 port 0xd0884200 irq 23 [ 2.033769] ata6: SATA max UDMA/133 abar m8192@0xd0884000 port 0xd0884280 irq 23 [ 2.210324] ata1.00: ATAPI: Optiarc DVD RW AD-7530B, NX09, max UDMA/33 [ 2.210354] ata1: nv_mode_filter: 0x739f&0x739f->0x739f, BIOS=0x7000 (0xc000c700) ACPI=0x701f (60:600:0x13) [ 2.250266] ata1.00: configured for UDMA/33 [ 2.252126] scsi 0:0:0:0: CD-ROM Optiarc DVD RW AD-7530B NX09 PQ: 0 ANSI: 5 [ 2.261599] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 2.261603] Uniform CD-ROM driver Revision: 3.20 [ 2.261759] sr 0:0:0:0: Attached scsi CD-ROM sr0 [ 2.261847] sr 0:0:0:0: Attached scsi generic sg0 type 5 [ 2.261956] ata2: port disabled. ignoring. [ 2.262640] firewire_core: created device fw0: GUID 00023f81ba404d76, S400 [ 2.370029] ata6: SATA link down (SStatus 0 SControl 300) [ 2.370051] ata5: SATA link down (SStatus 0 SControl 300) [ 2.382536] ata4: SATA link down (SStatus 0 SControl 300) [ 2.592735] ACPI: Battery Slot [BAT1] (battery present) [ 2.780032] ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 2.826474] ata3.00: ATA-8: WDC WD2500BEVS-22UST0, 01.01A01, max UDMA/133 [ 2.826478] ata3.00: 488397168 sectors, multi 16: LBA48 NCQ (depth 31/32) [ 2.827348] ata3.00: configured for UDMA/133 [ 2.827525] scsi 2:0:0:0: Direct-Access ATA WDC WD2500BEVS-2 01.0 PQ: 0 ANSI: 5 [ 2.827754] sd 2:0:0:0: Attached scsi generic sg1 type 0 [ 2.827758] sd 2:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB) [ 2.827940] sd 2:0:0:0: [sda] Write Protect is off [ 2.827944] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 2.827996] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.828274] sda: sda1 sda2 < sda5 sda6 sda7 > [ 2.871454] sd 2:0:0:0: [sda] Attached SCSI disk [ 3.299857] EXT4-fs (sda6): mounted filesystem with ordered data mode. Opts: (null) [ 5.038697] Adding 4881404k swap on /dev/sda5. Priority:-1 extents:1 across:4881404k [ 5.624488] udev: starting version 151 [ 6.133074] lirc_dev: IR Remote Control driver registered, major 61 [ 6.161908] lp: driver loaded but no devices found [ 6.171026] BUG: unable to handle kernel NULL pointer dereference at (null) [ 6.171197] IP: [] kfifo_alloc+0x2e/0xb0 [ 6.171314] PGD 9a43b067 PUD 9aba3067 PMD 0 [ 6.171529] Oops: 0002 [#1] SMP [ 6.171689] last sysfs file: /sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input3/name [ 6.171753] CPU 1 [ 6.171808] Modules linked in: lirc_ene0100(+) lirc_dev lp parport ahci sdhci_pci firewire_ohci firewire_core sdhci led_class libahci crc_itu_t pata_amd forcedeth [ 6.172709] [ 6.172766] Pid: 511, comm: modprobe Not tainted 2.6.35-6-generic #9-Ubuntu Fuquene/Aspire 5520 [ 6.172830] RIP: 0010:[] [] kfifo_alloc+0x2e/0xb0 [ 6.172946] RSP: 0018:ffff88009a579d08 EFLAGS: 00010286 [ 6.173005] RAX: ffff8800b9477000 RBX: 0000000000000000 RCX: ffffffff8107f229 [ 6.173067] RDX: 0000000000000000 RSI: 00000000000000d0 RDI: 0000000000000246 [ 6.173128] RBP: ffff88009a579d18 R08: 0000000000000000 R09: 0000000000000246 [ 6.173189] R10: 0000000000000030 R11: 0000000000000000 R12: 0000000000001000 [ 6.173251] R13: ffff88003787d800 R14: ffff8800bbc44c00 R15: 00000000fffffff4 [ 6.173313] FS: 00007f3022b1c700(0000) GS:ffff880001f00000(0000) knlGS:0000000000000000 [ 6.173376] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 6.173435] CR2: 0000000000000000 CR3: 000000009a43d000 CR4: 00000000000006e0 [ 6.173506] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 6.173578] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 6.173649] Process modprobe (pid: 511, threadinfo ffff88009a578000, task ffff88009b2edb80) [ 6.173730] Stack: [ 6.173795] ffff88009abc7b40 ffff8800bbc58660 ffff88009a579d58 ffffffffa009ee4f [ 6.174020] <0> ffff88009a579d38 ffffffffa009f060 ffff88003787d800 ffffffffa009f580 [ 6.174357] <0> ffffffffa009f540 00000000fffffff4 ffff88009a579d98 ffffffff8132a475 [ 6.174755] Call Trace: [ 6.174825] [] ene_probe+0x17f/0x350 [lirc_ene0100] [ 6.174899] [] pnp_device_probe+0x95/0x100 [ 6.174971] [] ? driver_sysfs_add+0x62/0x90 [ 6.175041] [] really_probe+0x68/0x190 [ 6.175111] [] driver_probe_device+0x45/0x70 [ 6.175182] [] __driver_attach+0x9b/0xa0 [ 6.175252] [] ? __driver_attach+0x0/0xa0 [ 6.175322] [] bus_for_each_dev+0x68/0x90 [ 6.175392] [] driver_attach+0x1e/0x20 [ 6.175461] [] bus_add_driver+0xde/0x280 [ 6.175531] [] driver_register+0x80/0x150 [ 6.175603] [] ? ene_init+0x0/0x3e [lirc_ene0100] [ 6.175675] [] pnp_register_driver+0x21/0x30 [ 6.175746] [] ene_init+0x3c/0x3e [lirc_ene0100] [ 6.175819] [] do_one_initcall+0x3c/0x1a0 [ 6.175890] [] sys_init_module+0xbb/0x200 [ 6.175962] [] system_call_fastpath+0x16/0x1b [ 6.176032] Code: e5 41 54 53 0f 1f 44 00 00 48 89 fb 89 f7 41 89 f4 48 85 ff 48 8d 47 ff 74 33 48 85 f8 75 2e 89 d6 e8 b7 33 0c 00 48 85 c0 74 52 <48> 89 03 44 89 63 08 31 c0 c7 43 10 00 00 00 00 c7 43 0c 00 00 [ 6.179475] RIP [] kfifo_alloc+0x2e/0xb0 [ 6.179596] RSP [ 6.179662] CR2: 0000000000000000 [ 6.179763] ---[ end trace 0f811dc89fd018c0 ]--- [ 6.219306] [Firmware Bug]: ACPI(Z00P) defines _DOD but not _DOS [ 6.532782] ACPI Warning: _BQC returned an invalid level (20100428/video-640) [ 6.582743] acpi device:0f: registered as cooling_device2 [ 6.582964] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0d/LNXVIDEO:01/input/input5 [ 6.583127] ACPI: Video Device [Z00P] (multi-head: yes rom: no post: no) [ 6.887775] vga16fb: initializing [ 6.887850] vga16fb: mapped to 0xffff8800000a0000 [ 7.034514] k8temp 0000:00:18.3: Temperature readouts might be wrong - check erratum #141 [ 7.089491] i2c i2c-0: nForce2 SMBus adapter at 0x3040 [ 7.089681] i2c i2c-1: nForce2 SMBus adapter at 0x3000 [ 7.095383] Console: switching to colour frame buffer device 80x30 [ 7.152038] fb0: VGA16 VGA frame buffer device [ 7.216274] Bluetooth: Core ver 2.15 [ 7.216596] NET: Registered protocol family 31 [ 7.219141] Bluetooth: HCI device and connection manager initialized [ 7.222029] Bluetooth: HCI socket layer initialized [ 7.309732] cfg80211: Calling CRDA to update world regulatory domain [ 7.315131] r852 0000:01:04.3: PCI INT B -> Link[LNK2] -> GSI 11 (level, low) -> IRQ 11 [ 7.323846] r852: driver loaded succesfully [ 7.470757] EDAC MC: Ver: 2.1.0 Jul 1 2010 [ 7.527328] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 7.533683] usbcore: registered new interface driver btusb [ 7.690196] EDAC amd64_edac: Ver: 3.3.0 Jul 1 2010 [ 7.696807] EDAC amd64: This node reports that Memory ECC is currently disabled, set F3x44[22] (0000:00:18.3). [ 7.711079] EDAC amd64: ECC disabled in the BIOS or no ECC capability, module will not load. [ 7.711081] Either enable ECC checking or force module loading by setting 'ecc_enable_override'. [ 7.711083] (Note that use of the override may cause unknown side effects.) [ 7.754003] input: PS/2 Mouse as /devices/platform/i8042/serio1/input/input6 [ 7.770481] amd64_edac: probe of 0000:00:18.2 failed with error -22 [ 7.788376] input: AlpsPS/2 ALPS GlidePoint as /devices/platform/i8042/serio1/input/input7 [ 8.171356] cfg80211: World regulatory domain updated: [ 8.184550] (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 8.211848] (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.226306] (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 8.240635] (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 8.254774] (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.254777] (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 8.440509] ACPI: PCI Interrupt Link [LK4E] enabled at IRQ 19 [ 8.454641] alloc irq_desc for 19 on node 0 [ 8.466196] alloc kstat_irqs on node 0 [ 8.483087] ath5k 0000:05:00.0: PCI INT A -> Link[LK4E] -> GSI 19 (level, low) -> IRQ 19 [ 8.511673] ath5k 0000:05:00.0: setting latency timer to 64 [ 8.526427] ath5k 0000:05:00.0: registered as 'phy0' [ 9.035029] ath: EEPROM regdomain: 0x65 [ 9.049661] ath: EEPROM indicates we should expect a direct regpair map [ 9.064542] ath: Country alpha2 being used: 00 [ 9.070149] type=1400 audit(1278112816.223:2): operation="profile_load" pid=664 name="/sbin/dhclient3" pid=664 comm="apparmor_parser" [ 9.070450] type=1400 audit(1278112816.223:3): operation="profile_load" pid=664 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=664 comm="apparmor_parser" [ 9.070663] type=1400 audit(1278112816.223:4): operation="profile_load" pid=664 name="/usr/lib/connman/scripts/dhclient-script" pid=664 comm="apparmor_parser" [ 9.189455] ath: Regpair used: 0x65 [ 9.249492] phy0: Selected rate control algorithm 'minstrel' [ 9.262973] Registered led device: ath5k-phy0::rx [ 9.275509] Registered led device: ath5k-phy0::tx [ 9.287559] ath5k phy0: Atheros AR2425 chip found (MAC: 0xe2, PHY: 0x70) [ 9.301046] ACPI: PCI Interrupt Link [LAZA] enabled at IRQ 21 [ 9.313023] HDA Intel 0000:00:07.0: PCI INT A -> Link[LAZA] -> GSI 21 (level, low) -> IRQ 21 [ 9.336581] hda_intel: Disable MSI for Nvidia chipset [ 9.348949] HDA Intel 0000:00:07.0: setting latency timer to 64 [ 9.439164] nvidia: module license 'NVIDIA' taints kernel. [ 10.299777] ACPI: PCI Interrupt Link [LK2E] enabled at IRQ 17 [ 10.312575] alloc irq_desc for 17 on node 0 [ 10.322553] alloc kstat_irqs on node 0 [ 10.338112] nvidia 0000:02:00.0: PCI INT A -> Link[LK2E] -> GSI 17 (level, low) -> IRQ 17 [ 10.363826] nvidia 0000:02:00.0: setting latency timer to 64 [ 10.376644] vgaarb: device changed decodes: PCI:0000:02:00.0,olddecodes=io+mem,decodes=none:owns=io+mem [ 10.402152] NVRM: loading NVIDIA UNIX x86_64 Kernel Module 256.35 Wed Jun 16 18:42:44 PDT 2010 [ 12.571513] EXT4-fs (sda6): re-mounted. Opts: errors=remount-ro [ 13.076321] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 13.273874] EXT4-fs (sda7): mounted filesystem with ordered data mode. Opts: (null) [ 14.442177] type=1400 audit(1278112821.593:5): operation="profile_load" pid=946 name="/usr/share/gdm/guest-session/Xsession" pid=946 comm="apparmor_parser" [ 14.444737] type=1400 audit(1278112821.603:6): operation="profile_replace" pid=949 name="/sbin/dhclient3" pid=949 comm="apparmor_parser" [ 14.445059] type=1400 audit(1278112821.603:7): operation="profile_replace" pid=949 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=949 comm="apparmor_parser" [ 14.445238] type=1400 audit(1278112821.603:8): operation="profile_replace" pid=949 name="/usr/lib/connman/scripts/dhclient-script" pid=949 comm="apparmor_parser" [ 14.495999] type=1400 audit(1278112821.653:9): operation="profile_load" pid=950 name="/usr/bin/evince" pid=950 comm="apparmor_parser" [ 14.499897] type=1400 audit(1278112821.653:10): operation="profile_load" pid=950 name="/usr/bin/evince-previewer" pid=950 comm="apparmor_parser" [ 14.502386] type=1400 audit(1278112821.653:11): operation="profile_load" pid=950 name="/usr/bin/evince-thumbnailer" pid=950 comm="apparmor_parser" [ 14.572322] type=1400 audit(1278112821.723:12): operation="profile_load" pid=958 name="/usr/lib/libvirt/virt-aa-helper" pid=958 comm="apparmor_parser" [ 14.702129] type=1400 audit(1278112821.853:13): operation="profile_load" pid=959 name="/usr/lib/cups/backend/cups-pdf" pid=959 comm="apparmor_parser" [ 14.702552] type=1400 audit(1278112821.863:14): operation="profile_load" pid=959 name="/usr/sbin/cupsd" pid=959 comm="apparmor_parser" [ 15.593760] alloc irq_desc for 43 on node 0 [ 15.593767] alloc kstat_irqs on node 0 [ 15.593779] forcedeth 0000:00:0a.0: irq 43 for MSI/MSI-X [ 15.593990] eth0: no link during initialization. [ 15.595214] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 15.656227] ADDRCONF(NETDEV_UP): wlan0: link is not ready [ 16.658936] kvm: Nested Virtualization enabled [ 17.309430] teredo: Disabled Privacy Extensions Bug: 601311 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-6-generic (buildd@vernadsky) (gcc version 4.4.4 (Ubuntu 4.4.4-6ubuntu1) ) #8-Ubuntu SMP Mon Jun 28 03:15:21 UTC 2010 (Ubuntu 2.6.35-6.8-generic 2.6.35-rc3) [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) [ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e4000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 000000005ffc0000 (usable) [ 0.000000] BIOS-e820: 000000005ffc0000 - 000000005ffd0000 (ACPI data) [ 0.000000] BIOS-e820: 000000005ffd0000 - 0000000060000000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ff7c0000 - 0000000100000000 (reserved) [ 0.000000] Notice: NX (Execute Disable) protection cannot be enabled: non-PAE kernel! [ 0.000000] DMI 2.3 present. [ 0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it. [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] last_pfn = 0x5ffc0 max_arch_pfn = 0x100000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-EFFFF uncachable [ 0.000000] F0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0000000000 mask FFC0000000 write-back [ 0.000000] 1 base 0040000000 mask FFE0000000 write-back [ 0.000000] 2 disabled [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] Scanning 0 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009fc00 (usable) [ 0.000000] modified: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e4000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 000000005ffc0000 (usable) [ 0.000000] modified: 000000005ffc0000 - 000000005ffd0000 (ACPI data) [ 0.000000] modified: 000000005ffd0000 - 0000000060000000 (ACPI NVS) [ 0.000000] modified: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000ff7c0000 - 0000000100000000 (reserved) [ 0.000000] initial memory mapped : 0 - 00c00000 [ 0.000000] found SMP MP-table at [c00ff780] ff780 [ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000 [ 0.000000] 0000000000 - 0000400000 page 4k [ 0.000000] 0000400000 - 0037400000 page 2M [ 0.000000] 0037400000 - 00377fe000 page 4k [ 0.000000] kernel direct mapping tables up to 377fe000 @ 15000-1a000 [ 0.000000] RAMDISK: 5f4e9000 - 5ff90000 [ 0.000000] Allocated new RAMDISK: 009ba000 - 01460ceb [ 0.000000] Move RAMDISK from 000000005f4e9000 - 000000005ff8fcea to 009ba000 - 01460cea [ 0.000000] ACPI: RSDP 000f9cb0 00021 (v02 ACPIAM) [ 0.000000] ACPI: XSDT 5ffc0100 0003C (v01 A M I OEMXSDT 06000529 MSFT 00000097) [ 0.000000] ACPI: FACP 5ffc0290 000F4 (v03 A M I OEMFACP 06000529 MSFT 00000097) [ 0.000000] ACPI Warning: 32/64X length mismatch in Gpe1Block: 0/32 (20100428/tbfadt-526) [ 0.000000] ACPI Warning: Optional field Gpe1Block has zero address or length: 0x00000000000044A0/0x0 (20100428/tbfadt-557) [ 0.000000] ACPI: DSDT 5ffc0400 04524 (v01 A0055 A0055003 00000003 INTL 02002026) [ 0.000000] ACPI: FACS 5ffd0000 00040 [ 0.000000] ACPI: APIC 5ffc0390 00068 (v01 A M I OEMAPIC 06000529 MSFT 00000097) [ 0.000000] ACPI: OEMB 5ffd0040 00041 (v01 A M I OEMBIOS 06000529 MSFT 00000097) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] 647MB HIGHMEM available. [ 0.000000] 887MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 377fe000 [ 0.000000] low ram: 0 - 377fe000 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x000377fe [ 0.000000] HighMem 0x000377fe -> 0x0005ffc0 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x0005ffc0 [ 0.000000] On node 0 totalpages: 393039 [ 0.000000] free_area_init_node: node 0, pgdat c08156c0, node_mem_map c1462200 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3951 pages, LIFO batch:0 [ 0.000000] Normal zone: 1744 pages used for memmap [ 0.000000] Normal zone: 221486 pages, LIFO batch:31 [ 0.000000] HighMem zone: 1296 pages used for memmap [ 0.000000] HighMem zone: 164530 pages, LIFO batch:31 [ 0.000000] Using APIC driver default [ 0.000000] Nvidia board detected. Ignoring ACPI timer override. [ 0.000000] If you got timer trouble try acpi_use_timer_override [ 0.000000] ACPI: PM-Timer IO Port: 0x4008 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 1, version 17, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: BIOS IRQ0 pin2 override ignored. [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 14 global_irq 14 high edge) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 15 global_irq 15 high edge) [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] ACPI: IRQ14 used by override. [ 0.000000] ACPI: IRQ15 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] SMP: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [16000 - 167ff] [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e4000 [ 0.000000] PM: Registered nosave memory: 00000000000e4000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at 60000000 (gap: 60000000:9ec00000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:1 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 14 pages/cpu @c2400000 s36480 r0 d20864 u4194304 [ 0.000000] pcpu-alloc: s36480 r0 d20864 u4194304 alloc=1*4194304 [ 0.000000] pcpu-alloc: [0] 0 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 389967 [ 0.000000] Kernel command line: BOOT_IMAGE=/casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash -- maybe-ubiquity [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Enabling fast FPU save and restore... done. [ 0.000000] Enabling unmasked SIMD FPU exception support... done. [ 0.000000] Initializing CPU#0 [ 0.000000] allocated 7862720 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Subtract (46 early reservations) [ 0.000000] #1 [0000001000 - 0000002000] EX TRAMPOLINE [ 0.000000] #2 [0000100000 - 00009b591c] TEXT DATA BSS [ 0.000000] #3 [00009b6000 - 00009b918c] BRK [ 0.000000] #4 [00000ff790 - 0000100000] BIOS reserved [ 0.000000] #5 [00000ff780 - 00000ff790] MP-table mpf [ 0.000000] #6 [000009fc00 - 00000f0ed0] BIOS reserved [ 0.000000] #7 [00000f0fc8 - 00000ff780] BIOS reserved [ 0.000000] #8 [00000f0ed0 - 00000f0fc8] MP-table mpc [ 0.000000] #9 [0000010000 - 0000011000] TRAMPOLINE [ 0.000000] #10 [0000011000 - 0000015000] ACPI WAKEUP [ 0.000000] #11 [0000015000 - 0000016000] PGTABLE [ 0.000000] #12 [00009ba000 - 0001461000] NEW RAMDISK [ 0.000000] #13 [0001461000 - 0001462000] BOOTMEM [ 0.000000] #14 [0001462000 - 0002062000] BOOTMEM [ 0.000000] #15 [0002062000 - 0002062004] BOOTMEM [ 0.000000] #16 [0002062040 - 0002062100] BOOTMEM [ 0.000000] #17 [0002062100 - 0002062154] BOOTMEM [ 0.000000] #18 [0002062180 - 0002065180] BOOTMEM [ 0.000000] #19 [0002065180 - 00020651c0] BOOTMEM [ 0.000000] #20 [00020651c0 - 00020681c0] BOOTMEM [ 0.000000] #21 [00020681c0 - 00020681e7] BOOTMEM [ 0.000000] #22 [0002068200 - 0002068318] BOOTMEM [ 0.000000] #23 [0002068340 - 0002068380] BOOTMEM [ 0.000000] #24 [0002068380 - 00020683c0] BOOTMEM [ 0.000000] #25 [00020683c0 - 0002068400] BOOTMEM [ 0.000000] #26 [0002068400 - 0002068440] BOOTMEM [ 0.000000] #27 [0002068440 - 0002068480] BOOTMEM [ 0.000000] #28 [0002068480 - 00020684c0] BOOTMEM [ 0.000000] #29 [00020684c0 - 0002068500] BOOTMEM [ 0.000000] #30 [0002068500 - 0002068540] BOOTMEM [ 0.000000] #31 [0002068540 - 0002068580] BOOTMEM [ 0.000000] #32 [0002068580 - 0002068590] BOOTMEM [ 0.000000] #33 [00020685c0 - 000206863f] BOOTMEM [ 0.000000] #34 [0002068640 - 00020686bf] BOOTMEM [ 0.000000] #35 [0002400000 - 000240e000] BOOTMEM [ 0.000000] #36 [000206a6c0 - 000206a6c4] BOOTMEM [ 0.000000] #37 [000206a700 - 000206a704] BOOTMEM [ 0.000000] #38 [000206a740 - 000206a744] BOOTMEM [ 0.000000] #39 [000206a780 - 000206a784] BOOTMEM [ 0.000000] #40 [000206a7c0 - 000206a870] BOOTMEM [ 0.000000] #41 [000206a880 - 000206a928] BOOTMEM [ 0.000000] #42 [000206a940 - 000206e940] BOOTMEM [ 0.000000] #43 [000206e940 - 00020ee940] BOOTMEM [ 0.000000] #44 [00020ee940 - 000212e940] BOOTMEM [ 0.000000] #45 [000240e000 - 0002b8d9c0] BOOTMEM [ 0.000000] Initializing HighMem for node 0 (000377fe:0005ffc0) [ 0.000000] Memory: 1531444k/1572608k available (4947k kernel code, 40712k reserved, 2404k data, 684k init, 663304k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff15000 - 0xfffff000 ( 936 kB) [ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB) [ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) [ 0.000000] .init : 0xc082e000 - 0xc08d9000 ( 684 kB) [ 0.000000] .data : 0xc05d4f72 - 0xc082dfe8 (2404 kB) [ 0.000000] .text : 0xc0100000 - 0xc05d4f72 (4947 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=13, HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:2304 nr_irqs:256 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] spurious 8259A interrupt: IRQ7. [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 2114.886 MHz processor. [ 0.004005] Calibrating delay loop (skipped), value calculated using timer frequency.. 4229.77 BogoMIPS (lpj=8459544) [ 0.004011] pid_max: default: 32768 minimum: 301 [ 0.004038] Security Framework initialized [ 0.004064] AppArmor: AppArmor initialized [ 0.004115] Mount-cache hash table entries: 512 [ 0.004254] Initializing cgroup subsys ns [ 0.004259] Initializing cgroup subsys cpuacct [ 0.004263] Initializing cgroup subsys memory [ 0.004272] Initializing cgroup subsys devices [ 0.004274] Initializing cgroup subsys freezer [ 0.004277] Initializing cgroup subsys net_cls [ 0.004305] mce: CPU supports 5 MCE banks [ 0.004326] Performance Events: AMD PMU driver. [ 0.004333] ... version: 0 [ 0.004335] ... bit width: 48 [ 0.004337] ... generic registers: 4 [ 0.004339] ... value mask: 0000ffffffffffff [ 0.004342] ... max period: 00007fffffffffff [ 0.004344] ... fixed-purpose events: 0 [ 0.004346] ... event mask: 000000000000000f [ 0.005188] SMP alternatives: switching to UP code [ 0.012513] Freeing SMP alternatives: 24k freed [ 0.012538] ACPI: Core revision 20100428 [ 0.017139] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.017147] ftrace: allocating 21765 entries in 43 pages [ 0.020099] Enabling APIC mode: Flat. Using 1 I/O APICs [ 0.020426] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1 [ 0.063238] CPU0: AMD Athlon(tm) 64 Processor 2800+ stepping 08 [ 0.064000] Brought up 1 CPUs [ 0.064000] Total of 1 processors activated (4229.77 BogoMIPS). [ 0.064000] devtmpfs: initialized [ 0.064000] regulator: core version 0.5 [ 0.064000] Time: 11:42:15 Date: 07/03/10 [ 0.064000] NET: Registered protocol family 16 [ 0.064000] EISA bus registered [ 0.064000] node 0 link 0: io port [1000, ffffff] [ 0.064000] TOM: 0000000060000000 aka 1536M [ 0.064000] node 0 link 0: mmio [a0000, bffff] [ 0.064000] node 0 link 0: mmio [60000000, fe0bffff] [ 0.064000] bus: [00, ff] on node 0 link 0 [ 0.064000] bus: 00 index 0 [io 0x0000-0xffff] [ 0.064000] bus: 00 index 1 [mem 0x000a0000-0x000bffff] [ 0.064000] bus: 00 index 2 [mem 0x60000000-0xffffffff] [ 0.064000] ACPI: bus type pci registered [ 0.064000] PCI: PCI BIOS revision 2.10 entry at 0xf0031, last bus=2 [ 0.064000] PCI: Using configuration type 1 for base access [ 0.064000] bio: create slab at 0 [ 0.064629] ACPI: EC: Look up EC in DSDT [ 0.066060] ACPI: Executed 1 blocks of module-level executable AML code [ 0.066389] ACPI: Actual Package length (266) is larger than NumElements field (2), truncated [ 0.066393] [ 0.069018] ACPI: Interpreter enabled [ 0.069022] ACPI: (supports S0 S1 S3 S4 S5) [ 0.069045] ACPI: Using IOAPIC for interrupt routing [ 0.077106] ACPI: Power Resource [ISAV] (on) [ 0.077157] ACPI Warning: Incorrect checksum in table [OEMB] - 0x4C, should be 0x21 (20100428/tbutils-314) [ 0.077282] ACPI: No dock devices found. [ 0.077286] PCI: Ignoring host bridge windows from ACPI; if necessary, use "pci=use_crs" and report a bug [ 0.077385] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.077575] pci_root PNP0A03:00: host bridge window [io 0x0000-0x0cf7] (ignored) [ 0.077578] pci_root PNP0A03:00: host bridge window [io 0x0d00-0xffff] (ignored) [ 0.077581] pci_root PNP0A03:00: host bridge window [mem 0x000a0000-0x000bffff] (ignored) [ 0.077584] pci_root PNP0A03:00: host bridge window [mem 0x60000000-0xff7bffff] (ignored) [ 0.077605] pci 0000:00:00.0: reg 10: [mem 0xf0000000-0xf7ffffff pref] [ 0.077671] pci 0000:00:01.1: reg 10: [io 0x5080-0x509f] [ 0.077679] pci 0000:00:01.1: reg 20: [io 0x5000-0x503f] [ 0.077683] pci 0000:00:01.1: reg 24: [io 0x5040-0x507f] [ 0.077693] pci 0000:00:01.1: PME# supported from D3hot D3cold [ 0.077696] pci 0000:00:01.1: PME# disabled [ 0.077713] pci 0000:00:02.0: reg 10: [mem 0xfebfd000-0xfebfdfff] [ 0.077728] pci 0000:00:02.0: supports D1 D2 [ 0.077731] pci 0000:00:02.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.077734] pci 0000:00:02.0: PME# disabled [ 0.077747] pci 0000:00:02.1: reg 10: [mem 0xfebfe000-0xfebfefff] [ 0.077762] pci 0000:00:02.1: supports D1 D2 [ 0.077764] pci 0000:00:02.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.077767] pci 0000:00:02.1: PME# disabled [ 0.077784] pci 0000:00:02.2: reg 10: [mem 0xfebffc00-0xfebffcff] [ 0.077803] pci 0000:00:02.2: supports D1 D2 [ 0.077805] pci 0000:00:02.2: PME# supported from D0 D1 D2 D3hot D3cold [ 0.077808] pci 0000:00:02.2: PME# disabled [ 0.077827] pci 0000:00:05.0: reg 10: [mem 0xfebfc000-0xfebfcfff] [ 0.077831] pci 0000:00:05.0: reg 14: [io 0xec00-0xec07] [ 0.077845] pci 0000:00:05.0: supports D1 D2 [ 0.077847] pci 0000:00:05.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.077850] pci 0000:00:05.0: PME# disabled [ 0.077863] pci 0000:00:06.0: reg 10: [io 0xe800-0xe8ff] [ 0.077867] pci 0000:00:06.0: reg 14: [io 0xe400-0xe47f] [ 0.077871] pci 0000:00:06.0: reg 18: [mem 0xfebfb000-0xfebfbfff] [ 0.077884] pci 0000:00:06.0: supports D1 D2 [ 0.077902] pci 0000:00:08.0: reg 20: [io 0xffa0-0xffaf] [ 0.077924] pci 0000:00:0a.0: reg 10: [io 0x09f0-0x09f7] [ 0.077928] pci 0000:00:0a.0: reg 14: [io 0x0bf0-0x0bf3] [ 0.077932] pci 0000:00:0a.0: reg 18: [io 0x0970-0x0977] [ 0.077936] pci 0000:00:0a.0: reg 1c: [io 0x0b70-0x0b73] [ 0.077940] pci 0000:00:0a.0: reg 20: [io 0xc800-0xc80f] [ 0.077944] pci 0000:00:0a.0: reg 24: [io 0xc400-0xc47f] [ 0.078044] PCI: peer root bus 00 res updated from pci conf [ 0.078073] pci 0000:01:00.0: reg 10: [mem 0xfd000000-0xfdffffff] [ 0.078079] pci 0000:01:00.0: reg 14: [mem 0xe0000000-0xe7ffffff pref] [ 0.078085] pci 0000:01:00.0: reg 18: [mem 0xfc000000-0xfcffffff] [ 0.078099] pci 0000:01:00.0: reg 30: [mem 0xfeae0000-0xfeafffff pref] [ 0.078145] pci 0000:00:0b.0: PCI bridge to [bus 01-01] [ 0.078149] pci 0000:00:0b.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.078153] pci 0000:00:0b.0: bridge window [mem 0xfaa00000-0xfeafffff] [ 0.078157] pci 0000:00:0b.0: bridge window [mem 0xda900000-0xea8fffff pref] [ 0.078186] pci 0000:00:0e.0: PCI bridge to [bus 02-02] [ 0.078189] pci 0000:00:0e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.078193] pci 0000:00:0e.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.078196] pci 0000:00:0e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.078203] pci_bus 0000:00: on NUMA node 0 [ 0.078207] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.078343] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P1._PRT] [ 0.083723] ACPI: PCI Interrupt Link [LNKA] (IRQs 16 17 18 19) *0, disabled. [ 0.083875] ACPI: PCI Interrupt Link [LNKB] (IRQs 16 17 18 19) *0, disabled. [ 0.084029] ACPI: PCI Interrupt Link [LNKC] (IRQs 16 17 18 19) *0, disabled. [ 0.084179] ACPI: PCI Interrupt Link [LNKD] (IRQs 16 17 18 19) *0, disabled. [ 0.084329] ACPI: PCI Interrupt Link [LNKE] (IRQs 16 17 18 19) *11 [ 0.084474] ACPI: PCI Interrupt Link [LUS0] (IRQs 20 21 22) *7 [ 0.084620] ACPI: PCI Interrupt Link [LUS1] (IRQs 20 21 22) *9 [ 0.084768] ACPI: PCI Interrupt Link [LUS2] (IRQs 20 21 22) *10 [ 0.084914] ACPI: PCI Interrupt Link [LKLN] (IRQs 20 21 22) *11 [ 0.085060] ACPI: PCI Interrupt Link [LAUI] (IRQs 20 21 22) *11 [ 0.085210] ACPI: PCI Interrupt Link [LKMO] (IRQs 20 21 22) *0, disabled. [ 0.085356] ACPI: PCI Interrupt Link [LKSM] (IRQs 20 21 22) *0, disabled. [ 0.085502] ACPI: PCI Interrupt Link [LTID] (IRQs 20 21 22) *0 [ 0.085657] ACPI: PCI Interrupt Link [LTIE] (IRQs 20 21 22) *0, disabled. [ 0.085837] ACPI: PCI Interrupt Link [LATA] (IRQs 20 21 22) *14 [ 0.085877] HEST: Table is not found! [ 0.085960] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none [ 0.085963] vgaarb: loaded [ 0.086150] SCSI subsystem initialized [ 0.086215] libata version 3.00 loaded. [ 0.086269] usbcore: registered new interface driver usbfs [ 0.086282] usbcore: registered new interface driver hub [ 0.086308] usbcore: registered new device driver usb [ 0.086440] ACPI: WMI: Mapper loaded [ 0.086443] PCI: Using ACPI for IRQ routing [ 0.086446] PCI: pci_cache_line_size set to 64 bytes [ 0.086488] reserve RAM buffer: 000000000009fc00 - 000000000009ffff [ 0.086491] reserve RAM buffer: 000000005ffc0000 - 000000005fffffff [ 0.086593] NetLabel: Initializing [ 0.086595] NetLabel: domain hash size = 128 [ 0.086596] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.086610] NetLabel: unlabeled traffic allowed by default [ 0.086657] Switching to clocksource tsc [ 0.094570] AppArmor: AppArmor Filesystem Enabled [ 0.094590] pnp: PnP ACPI init [ 0.094608] ACPI: bus type pnp registered [ 0.099031] pnp: PnP ACPI: found 14 devices [ 0.099033] ACPI: ACPI bus type pnp unregistered [ 0.099037] PnPBIOS: Disabled by ACPI PNP [ 0.099051] system 00:07: [io 0x0190-0x0193] has been reserved [ 0.099055] system 00:07: [io 0x04d0-0x04d1] has been reserved [ 0.099058] system 00:07: [io 0x4000-0x40ff window] has been reserved [ 0.099061] system 00:07: [io 0x4400-0x44ff window] has been reserved [ 0.099064] system 00:07: [io 0x4800-0x48ff window] has been reserved [ 0.099070] system 00:08: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.099074] system 00:08: [mem 0xfee00000-0xfeefffff] could not be reserved [ 0.099077] system 00:08: [mem 0xff780000-0xff7bffff] has been reserved [ 0.099082] system 00:0a: [io 0x0480-0x0487] has been reserved [ 0.099085] system 00:0a: [io 0x0d00-0x0d07] has been reserved [ 0.099091] system 00:0d: [mem 0x00000000-0x0009ffff] could not be reserved [ 0.099094] system 00:0d: [mem 0x000c0000-0x000dffff] could not be reserved [ 0.099097] system 00:0d: [mem 0x000e0000-0x000fffff] could not be reserved [ 0.099101] system 00:0d: [mem 0x00100000-0x5fffffff] could not be reserved [ 0.099104] system 00:0d: [mem 0xff7c0000-0xffffffff] has been reserved [ 0.133819] pci 0000:00:0b.0: PCI bridge to [bus 01-01] [ 0.133822] pci 0000:00:0b.0: bridge window [io disabled] [ 0.133827] pci 0000:00:0b.0: bridge window [mem 0xfaa00000-0xfeafffff] [ 0.133831] pci 0000:00:0b.0: bridge window [mem 0xda900000-0xea8fffff pref] [ 0.133836] pci 0000:00:0e.0: PCI bridge to [bus 02-02] [ 0.133838] pci 0000:00:0e.0: bridge window [io disabled] [ 0.133841] pci 0000:00:0e.0: bridge window [mem disabled] [ 0.133844] pci 0000:00:0e.0: bridge window [mem pref disabled] [ 0.133856] pci 0000:00:0e.0: setting latency timer to 64 [ 0.133860] pci_bus 0000:00: resource 4 [io 0x0000-0xffff] [ 0.133862] pci_bus 0000:00: resource 5 [mem 0x000a0000-0x000bffff] [ 0.133865] pci_bus 0000:00: resource 6 [mem 0x60000000-0xffffffff] [ 0.133868] pci_bus 0000:01: resource 1 [mem 0xfaa00000-0xfeafffff] [ 0.133871] pci_bus 0000:01: resource 2 [mem 0xda900000-0xea8fffff pref] [ 0.133915] NET: Registered protocol family 2 [ 0.133975] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.134296] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.135419] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.135976] TCP: Hash tables configured (established 131072 bind 65536) [ 0.135978] TCP reno registered [ 0.135982] UDP hash table entries: 512 (order: 2, 16384 bytes) [ 0.136001] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) [ 0.136104] NET: Registered protocol family 1 [ 0.609438] pci 0000:01:00.0: Boot video device [ 0.609442] PCI: CLS 0 bytes, default 64 [ 0.609638] cpufreq-nforce2: No nForce2 chipset. [ 0.609668] Scanning for low memory corruption every 60 seconds [ 0.609781] audit: initializing netlink socket (disabled) [ 0.609791] type=2000 audit(1278157335.608:1): initialized [ 0.620505] Trying to unpack rootfs image as initramfs... [ 2.890228] highmem bounce pool size: 64 pages [ 2.890234] HugeTLB registered 4 MB page size, pre-allocated 0 pages [ 2.891567] VFS: Disk quotas dquot_6.5.2 [ 2.891620] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 2.892168] fuse init (API version 7.14) [ 2.892247] msgmni has been set to 1695 [ 2.892432] alg: No test for stdrng (krng) [ 2.892489] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 2.892492] io scheduler noop registered [ 2.892494] io scheduler deadline registered [ 2.892506] io scheduler cfq registered (default) [ 2.892640] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 2.892663] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 2.892772] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 2.892777] ACPI: Power Button [PWRB] [ 2.892824] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 [ 2.892827] ACPI: Power Button [PWRF] [ 2.893019] ACPI: acpi_idle registered with cpuidle [ 2.893044] ACPI: processor limited to max C-state 1 [ 2.896515] ERST: Table is not found! [ 2.897949] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 2.898035] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 2.898116] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A [ 2.898391] 00:0b: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 2.898506] 00:0c: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A [ 2.899593] brd: module loaded [ 2.900045] isapnp: Scanning for PnP cards... [ 2.905642] loop: module loaded [ 2.905938] pata_acpi 0000:00:08.0: power state changed by ACPI to D0 [ 2.905965] pata_acpi 0000:00:08.0: power state changed by ACPI to D0 [ 2.906016] pata_acpi 0000:00:08.0: setting latency timer to 64 [ 2.906307] ACPI: PCI Interrupt Link [LTID] BIOS reported IRQ 0, using IRQ 22 [ 2.906310] ACPI: PCI Interrupt Link [LTID] enabled at IRQ 22 [ 2.906315] alloc irq_desc for 22 on node -1 [ 2.906318] alloc kstat_irqs on node -1 [ 2.906328] pata_acpi 0000:00:0a.0: PCI INT A -> Link[LTID] -> GSI 22 (level, low) -> IRQ 22 [ 2.906344] pata_acpi 0000:00:0a.0: setting latency timer to 64 [ 2.906351] pata_acpi 0000:00:0a.0: PCI INT A disabled [ 2.906686] Fixed MDIO Bus: probed [ 2.906730] PPP generic driver version 2.4.2 [ 2.906773] tun: Universal TUN/TAP device driver, 1.6 [ 2.906775] tun: (C) 1999-2004 Max Krasnyansky [ 2.906843] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 2.907046] ACPI: PCI Interrupt Link [LUS2] enabled at IRQ 21 [ 2.907050] alloc irq_desc for 21 on node -1 [ 2.907051] alloc kstat_irqs on node -1 [ 2.907058] ehci_hcd 0000:00:02.2: PCI INT C -> Link[LUS2] -> GSI 21 (level, low) -> IRQ 21 [ 2.907075] ehci_hcd 0000:00:02.2: setting latency timer to 64 [ 2.907078] ehci_hcd 0000:00:02.2: EHCI Host Controller [ 2.907113] ehci_hcd 0000:00:02.2: new USB bus registered, assigned bus number 1 [ 2.907144] ehci_hcd 0000:00:02.2: debug port 1 [ 2.907149] ehci_hcd 0000:00:02.2: cache line size of 64 is not supported [ 2.907170] ehci_hcd 0000:00:02.2: irq 21, io mem 0xfebffc00 [ 2.950699] ehci_hcd 0000:00:02.2: USB 2.0 started, EHCI 1.00 [ 2.950819] hub 1-0:1.0: USB hub found [ 2.950825] hub 1-0:1.0: 8 ports detected [ 2.950887] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 2.951088] ACPI: PCI Interrupt Link [LUS0] enabled at IRQ 20 [ 2.951091] alloc irq_desc for 20 on node -1 [ 2.951093] alloc kstat_irqs on node -1 [ 2.951099] ohci_hcd 0000:00:02.0: PCI INT A -> Link[LUS0] -> GSI 20 (level, low) -> IRQ 20 [ 2.951107] ohci_hcd 0000:00:02.0: setting latency timer to 64 [ 2.951110] ohci_hcd 0000:00:02.0: OHCI Host Controller [ 2.951140] ohci_hcd 0000:00:02.0: new USB bus registered, assigned bus number 2 [ 2.951163] ohci_hcd 0000:00:02.0: irq 20, io mem 0xfebfd000 [ 3.040278] hub 2-0:1.0: USB hub found [ 3.040283] hub 2-0:1.0: 4 ports detected [ 3.040516] ACPI: PCI Interrupt Link [LUS1] enabled at IRQ 22 [ 3.040520] ohci_hcd 0000:00:02.1: PCI INT B -> Link[LUS1] -> GSI 22 (level, low) -> IRQ 22 [ 3.040528] ohci_hcd 0000:00:02.1: setting latency timer to 64 [ 3.040530] ohci_hcd 0000:00:02.1: OHCI Host Controller [ 3.040564] ohci_hcd 0000:00:02.1: new USB bus registered, assigned bus number 3 [ 3.040588] ohci_hcd 0000:00:02.1: irq 22, io mem 0xfebfe000 [ 3.129721] hub 3-0:1.0: USB hub found [ 3.129726] hub 3-0:1.0: 4 ports detected [ 3.129774] uhci_hcd: USB Universal Host Controller Interface driver [ 3.129861] PNP: PS/2 Controller [PNP0f03:PS2M] at 0x60,0x64 irq 12 [ 3.129864] PNP: PS/2 controller doesn't have KBD irq; using default 1 [ 3.175300] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 3.175306] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 3.175368] mice: PS/2 mouse device common for all mice [ 3.175452] rtc_cmos 00:02: RTC can wake from S4 [ 3.175492] rtc_cmos 00:02: rtc core: registered rtc_cmos as rtc0 [ 3.175515] rtc0: alarms up to one year, y3k, 114 bytes nvram [ 3.175618] device-mapper: uevent: version 1.0.3 [ 3.175788] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 3.175838] device-mapper: multipath: version 1.1.1 loaded [ 3.175840] device-mapper: multipath round-robin: version 1.0.0 loaded [ 3.175961] EISA: Probing bus 0 at eisa.0 [ 3.175965] EISA: Cannot allocate resource for mainboard [ 3.175967] Cannot allocate resource for EISA slot 1 [ 3.175969] Cannot allocate resource for EISA slot 2 [ 3.175971] Cannot allocate resource for EISA slot 3 [ 3.175974] Cannot allocate resource for EISA slot 4 [ 3.175976] Cannot allocate resource for EISA slot 5 [ 3.175978] Cannot allocate resource for EISA slot 6 [ 3.175980] Cannot allocate resource for EISA slot 7 [ 3.175982] Cannot allocate resource for EISA slot 8 [ 3.175984] EISA: Detected 0 cards. [ 3.176037] cpuidle: using governor ladder [ 3.176040] cpuidle: using governor menu [ 3.176316] TCP cubic registered [ 3.176440] NET: Registered protocol family 10 [ 3.176764] lo: Disabled Privacy Extensions [ 3.176959] NET: Registered protocol family 17 [ 3.176986] powernow-k8: Found 1 AMD Athlon(tm) 64 Processor 2800+ (1 cpu cores) (version 2.20.00) [ 3.177071] powernow-k8: 0 : fid 0xa (1800 MHz), vid 0x2 [ 3.177074] powernow-k8: 1 : fid 0x0 (800 MHz), vid 0xa [ 3.177307] Using IPI No-Shortcut mode [ 3.177387] PM: Resume from disk failed. [ 3.177399] registered taskstats version 1 [ 3.177538] Magic number: 2:81:731 [ 3.177634] rtc_cmos 00:02: setting system clock to 2010-07-03 11:42:18 UTC (1278157338) [ 3.177637] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 3.177639] EDD information not available. [ 3.264715] isapnp: No Plug & Play device found [ 3.568590] usb 1-3: new high speed USB device using ehci_hcd and address 3 [ 3.580535] Freeing initrd memory: 10908k freed [ 3.591803] Freeing unused kernel memory: 684k freed [ 3.592677] Write protecting the kernel text: 4948k [ 3.592707] Write protecting the kernel read-only data: 2020k [ 3.640136] udev: starting version 151 [ 3.812037] usb 1-5: new high speed USB device using ehci_hcd and address 4 [ 3.819246] pata_amd 0000:00:08.0: version 0.4.1 [ 3.819318] pata_amd 0000:00:08.0: power state changed by ACPI to D0 [ 3.819346] pata_amd 0000:00:08.0: power state changed by ACPI to D0 [ 3.819391] pata_amd 0000:00:08.0: setting latency timer to 64 [ 3.856931] scsi0 : pata_amd [ 3.857285] Linux agpgart interface v0.103 [ 3.885799] scsi1 : pata_amd [ 3.886547] ata1: PATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0xffa0 irq 14 [ 3.886550] ata2: PATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0xffa8 irq 15 [ 3.886713] forcedeth: Reverse Engineered nForce ethernet driver. Version 0.64. [ 3.886933] ACPI: PCI Interrupt Link [LKLN] enabled at IRQ 21 [ 3.886938] forcedeth 0000:00:05.0: PCI INT A -> Link[LKLN] -> GSI 21 (level, low) -> IRQ 21 [ 3.886943] forcedeth 0000:00:05.0: setting latency timer to 64 [ 3.886990] nv_probe: set workaround bit for reversed mac addr [ 3.909350] [drm] Initialized drm 1.1.0 20060810 [ 3.912707] FDC 0 is a post-1991 82077 [ 3.973511] Initializing USB Mass Storage driver... [ 3.973631] scsi2 : usb-storage 1-5:1.0 [ 3.973766] usbcore: registered new interface driver usb-storage [ 3.973768] USB Mass Storage support registered. [ 4.048260] ata1.00: ATAPI: LITE-ON DVDRW SOHW-1213S, TS0J, max UDMA/66 [ 4.048288] ata1: nv_mode_filter: 0x1f39f&0x1f39f->0x1f39f, BIOS=0x1f000 (0xc5000000) ACPI=0x1f01f (30:600:0x13) [ 4.064189] ata1.00: configured for UDMA/66 [ 4.065299] scsi 0:0:0:0: CD-ROM LITE-ON DVDRW SOHW-1213S TS0J PQ: 0 ANSI: 5 [ 4.067955] sr0: scsi3-mmc drive: 32x/32x writer cd/rw xa/form2 cdda tray [ 4.067959] Uniform CD-ROM driver Revision: 3.20 [ 4.068073] sr 0:0:0:0: Attached scsi CD-ROM sr0 [ 4.068133] sr 0:0:0:0: Attached scsi generic sg0 type 5 [ 4.277562] ACPI: PCI Interrupt Link [LNKE] enabled at IRQ 19 [ 4.277569] alloc irq_desc for 19 on node -1 [ 4.277571] alloc kstat_irqs on node -1 [ 4.277582] nouveau 0000:01:00.0: PCI INT A -> Link[LNKE] -> GSI 19 (level, low) -> IRQ 19 [ 4.281207] [drm] nouveau 0000:01:00.0: Detected an NV40 generation card (0x440100a1) [ 4.282587] [drm] nouveau 0000:01:00.0: Attempting to load BIOS image from PROM [ 4.391723] [drm] nouveau 0000:01:00.0: ... appears to be valid [ 4.391727] [drm] nouveau 0000:01:00.0: BIT BIOS found [ 4.391731] [drm] nouveau 0000:01:00.0: Bios version 05.40.02.15 [ 4.391735] [drm] nouveau 0000:01:00.0: BIT table 'd' not found [ 4.391738] [drm] nouveau 0000:01:00.0: Found Display Configuration Block version 3.0 [ 4.391742] [drm] nouveau 0000:01:00.0: Raw DCB entry 0: 01000310 00000028 [ 4.391746] [drm] nouveau 0000:01:00.0: Raw DCB entry 1: 02011300 00000028 [ 4.391748] [drm] nouveau 0000:01:00.0: Raw DCB entry 2: 01011302 00000000 [ 4.391751] [drm] nouveau 0000:01:00.0: Raw DCB entry 3: 020223f1 0000c033 [ 4.391755] [drm] nouveau 0000:01:00.0: DCB connector table: VHER 0x30 5 3 2 [ 4.391759] [drm] nouveau 0000:01:00.0: 0: 0x00001000: type 0x00 idx 0 tag 0x07 [ 4.391762] [drm] nouveau 0000:01:00.0: 1: 0x00001130: type 0x30 idx 1 tag 0x07 [ 4.391765] [drm] nouveau 0000:01:00.0: 2: 0x00000212: type 0x12 idx 2 tag 0xff [ 4.391767] [drm] nouveau 0000:01:00.0: unknown type, using 0xff [ 4.391781] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 0 at offset 0xE76E [ 4.392284] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 1 at offset 0xEC16 [ 4.392921] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 2 at offset 0xF284 [ 4.392942] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 3 at offset 0xF3E1 [ 4.408647] forcedeth 0000:00:05.0: ifname eth0, PHY OUI 0x5043 @ 1, addr 00:11:d8:3d:70:91 [ 4.408653] forcedeth 0000:00:05.0: csum timirq gbit lnktim desc-v2 [ 4.408926] sata_nv 0000:00:0a.0: version 3.5 [ 4.408942] sata_nv 0000:00:0a.0: PCI INT A -> Link[LTID] -> GSI 22 (level, low) -> IRQ 22 [ 4.408985] sata_nv 0000:00:0a.0: setting latency timer to 64 [ 4.409311] scsi3 : sata_nv [ 4.409412] scsi4 : sata_nv [ 4.410125] ata3: SATA max UDMA/133 cmd 0x9f0 ctl 0xbf0 bmdma 0xc800 irq 22 [ 4.410129] ata4: SATA max UDMA/133 cmd 0x970 ctl 0xb70 bmdma 0xc808 irq 22 [ 4.410239] agpgart-amd64 0000:00:00.0: AGP bridge [10de/00e1] [ 4.410245] agpgart-amd64 0000:00:00.0: aperture size 4096 MB is not right, using settings from NB [ 4.410250] agpgart-amd64 0000:00:00.0: setting up Nforce3 AGP [ 4.410255] agpgart-amd64 0000:00:00.0: aperture base > 4G [ 4.410284] agpgart-amd64 0000:00:00.0: AGP bridge [10de/00e1] [ 4.410289] agpgart-amd64 0000:00:00.0: aperture size 4096 MB is not right, using settings from NB [ 4.410291] agpgart-amd64 0000:00:00.0: setting up Nforce3 AGP [ 4.410294] agpgart-amd64 0000:00:00.0: aperture base > 4G [ 4.416012] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 4 at offset 0xF483 [ 4.416020] [drm] nouveau 0000:01:00.0: Detected 128MiB VRAM [ 4.441708] [TTM] Zone kernel: Available graphics memory: 439878 kiB. [ 4.441711] [TTM] Zone highmem: Available graphics memory: 771530 kiB. [ 4.441713] [TTM] Initializing pool allocator. [ 4.443353] [drm] nouveau 0000:01:00.0: 64 MiB GART (aperture) [ 4.443965] [drm] nouveau 0000:01:00.0: Allocating FIFO number 0 [ 4.446304] [drm] nouveau 0000:01:00.0: nouveau_channel_alloc: initialised FIFO 0 [ 4.446312] [drm] nouveau 0000:01:00.0: Initial CRTC_OWNER is 0 [ 4.446320] [drm] nouveau 0000:01:00.0: Saving VGA fonts [ 4.518649] usb 2-1: new low speed USB device using ohci_hcd and address 2 [ 4.520639] [drm] nouveau 0000:01:00.0: Detected a VGA connector [ 4.520779] [drm] nouveau 0000:01:00.0: Detected a DVI-I connector [ 4.520866] [drm] nouveau 0000:01:00.0: Detected a TV connector [ 4.522857] [drm] nouveau 0000:01:00.0: Setting dpms mode 3 on vga encoder (output 0) [ 4.522862] [drm] nouveau 0000:01:00.0: Setting dpms mode 3 on vga encoder (output 1) [ 4.522865] [drm] nouveau 0000:01:00.0: Setting dpms mode 3 on tmds encoder (output 2) [ 4.522869] [drm] nouveau 0000:01:00.0: Setting dpms mode 3 on TV encoder (output 3) [ 4.716507] [drm] nouveau 0000:01:00.0: allocated 1280x1024 fb: 0x49000, bo f6a28800 [ 4.728386] [drm] nouveau 0000:01:00.0: Output DVI-I-1 is running on CRTC 0 using output A [ 4.728391] [drm] nouveau 0000:01:00.0: 0xCD06: Parsing digital output script table [ 4.784047] [drm] nouveau 0000:01:00.0: Setting dpms mode 0 on tmds encoder (output 2) [ 4.784053] [drm] nouveau 0000:01:00.0: Output DVI-I-1 is running on CRTC 0 using output A [ 4.785242] Console: switching to colour frame buffer device 160x64 [ 4.786960] fb0: nouveaufb frame buffer device [ 4.786962] drm: registered panic notifier [ 4.786965] Slow work thread pool: Starting up [ 4.789197] usbcore: registered new interface driver hiddev [ 4.789616] usbcore: registered new interface driver usbhid [ 4.789619] usbhid: USB HID core driver [ 4.789629] Slow work thread pool: Ready [ 4.789639] [drm] Initialized nouveau 0.0.16 20090420 for 0000:01:00.0 on minor 0 [ 4.884023] ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 4.892195] ata3.00: ATA-7: SAMSUNG SP1614C, SW100-30, max UDMA7 [ 4.892199] ata3.00: 312581808 sectors, multi 16: LBA48 [ 4.900224] ata3.00: configured for UDMA/133 [ 4.900327] scsi 3:0:0:0: Direct-Access ATA SAMSUNG SP1614C SW10 PQ: 0 ANSI: 5 [ 4.900498] sd 3:0:0:0: Attached scsi generic sg1 type 0 [ 4.901782] sd 3:0:0:0: [sda] 312581808 512-byte logical blocks: (160 GB/149 GiB) [ 4.901835] sd 3:0:0:0: [sda] Write Protect is off [ 4.901839] sd 3:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 4.901861] sd 3:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 4.902013] sda: sda1 sda2 < sda5 sda6 > [ 4.945657] sd 3:0:0:0: [sda] Attached SCSI disk [ 4.984865] scsi 2:0:0:0: Direct-Access SAMSUNG HM500JI PQ: 0 ANSI: 2 [ 4.985261] sd 2:0:0:0: Attached scsi generic sg2 type 0 [ 4.986973] sd 2:0:0:0: [sdb] 976773168 512-byte logical blocks: (500 GB/465 GiB) [ 4.989216] sd 2:0:0:0: [sdb] Write Protect is off [ 4.989219] sd 2:0:0:0: [sdb] Mode Sense: 38 00 00 00 [ 4.989222] sd 2:0:0:0: [sdb] Assuming drive cache: write through [ 4.992339] sd 2:0:0:0: [sdb] Assuming drive cache: write through [ 4.992349] sdb: [ 5.068021] usb 3-3: new full speed USB device using ohci_hcd and address 2 [ 5.302520] input: Microsoft Microsoft® Nano Transceiver v1.0 as /devices/pci0000:00/0000:00:02.1/usb3/3-3/3-3:1.0/input/input2 [ 5.302863] generic-usb 0003:045E:0745.0003: input,hidraw0: USB HID v1.11 Keyboard [Microsoft Microsoft® Nano Transceiver v1.0] on usb-0000:00:02.1-3/input0 [ 5.313777] input: Microsoft Microsoft® Nano Transceiver v1.0 as /devices/pci0000:00/0000:00:02.1/usb3/3-3/3-3:1.1/input/input3 [ 5.314180] generic-usb 0003:045E:0745.0004: input,hidraw1: USB HID v1.11 Mouse [Microsoft Microsoft® Nano Transceiver v1.0] on usb-0000:00:02.1-3/input1 [ 5.342329] input: Microsoft Microsoft® Nano Transceiver v1.0 as /devices/pci0000:00/0000:00:02.1/usb3/3-3/3-3:1.2/input/input4 [ 5.342967] generic-usb 0003:045E:0745.0005: input,hiddev96,hidraw2: USB HID v1.11 Device [Microsoft Microsoft® Nano Transceiver v1.0] on usb-0000:00:02.1-3/input2 [ 5.368023] ata4: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 5.408850] ata4.00: ATA-7: ST3200827AS, 3.AAH, max UDMA/133 [ 5.408854] ata4.00: 390721968 sectors, multi 16: LBA48 NCQ (depth 0/32) [ 5.475505] ata4.00: configured for UDMA/133 [ 5.475634] scsi 4:0:0:0: Direct-Access ATA ST3200827AS 3.AA PQ: 0 ANSI: 5 [ 5.475796] sd 4:0:0:0: Attached scsi generic sg3 type 0 [ 5.476047] sd 4:0:0:0: [sdc] 390721968 512-byte logical blocks: (200 GB/186 GiB) [ 5.476097] sd 4:0:0:0: [sdc] Write Protect is off [ 5.476100] sd 4:0:0:0: [sdc] Mode Sense: 00 3a 00 00 [ 5.476122] sd 4:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 5.476266] sdc: sdc1 [ 5.516042] sd 4:0:0:0: [sdc] Attached SCSI disk [ 8.255289] sdb1 [ 8.259147] sd 2:0:0:0: [sdb] Assuming drive cache: write through [ 8.259153] sd 2:0:0:0: [sdb] Attached SCSI disk [ 8.261079] vga16fb: initializing [ 8.261085] vga16fb: mapped to 0xc00a0000 [ 8.261154] fb1: VGA16 VGA frame buffer device [ 8.288000] input: Microsoft Natural® Ergonomic Keyboard 4000 as /devices/pci0000:00/0000:00:02.0/usb2/2-1/2-1:1.0/input/input5 [ 8.288111] microsoft 0003:045E:00DB.0001: input,hidraw3: USB HID v1.11 Keyboard [Microsoft Natural® Ergonomic Keyboard 4000] on usb-0000:00:02.0-1/input0 [ 8.305829] input: Microsoft Natural® Ergonomic Keyboard 4000 as /devices/pci0000:00/0000:00:02.0/usb2/2-1/2-1:1.1/input/input6 [ 8.306012] microsoft 0003:045E:00DB.0002: input,hidraw4: USB HID v1.11 Device [Microsoft Natural® Ergonomic Keyboard 4000] on usb-0000:00:02.0-1/input1 [ 8.970296] xor: automatically using best checksumming function: pIII_sse [ 8.988005] pIII_sse : 6401.000 MB/sec [ 8.988008] xor: using function: pIII_sse (6401.000 MB/sec) [ 8.992671] device-mapper: dm-raid45: initialized v0.2594b [ 10.449079] EXT3-fs: barriers not enabled [ 10.454195] kjournald starting. Commit interval 5 seconds [ 10.454305] EXT3-fs (sdc1): mounted filesystem with ordered data mode [ 11.478089] sr 0:0:0:0: [sr0] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 11.478095] sr 0:0:0:0: [sr0] Sense Key : Illegal Request [current] [ 11.478100] sr 0:0:0:0: [sr0] Add. Sense: Illegal mode for this track [ 11.478107] sr 0:0:0:0: [sr0] CDB: Read(10): 28 00 00 05 5e 56 00 00 02 00 [ 11.478115] end_request: I/O error, dev sr0, sector 1407320 [ 11.478120] Buffer I/O error on device sr0, logical block 175915 [ 11.543593] sr 0:0:0:0: [sr0] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 11.543599] sr 0:0:0:0: [sr0] Sense Key : Illegal Request [current] [ 11.543603] sr 0:0:0:0: [sr0] Add. Sense: Illegal mode for this track [ 11.543610] sr 0:0:0:0: [sr0] CDB: Read(10): 28 00 00 05 5e 56 00 00 02 00 [ 11.543618] end_request: I/O error, dev sr0, sector 1407320 [ 11.543622] Buffer I/O error on device sr0, logical block 175915 [ 11.609105] sr 0:0:0:0: [sr0] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 11.609110] sr 0:0:0:0: [sr0] Sense Key : Illegal Request [current] [ 11.609115] sr 0:0:0:0: [sr0] Add. Sense: Illegal mode for this track [ 11.609121] sr 0:0:0:0: [sr0] CDB: Read(10): 28 00 00 05 5e 56 00 00 02 00 [ 11.609129] end_request: I/O error, dev sr0, sector 1407320 [ 11.609133] Buffer I/O error on device sr0, logical block 175915 [ 11.674627] sr 0:0:0:0: [sr0] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 11.674632] sr 0:0:0:0: [sr0] Sense Key : Illegal Request [current] [ 11.674637] sr 0:0:0:0: [sr0] Add. Sense: Illegal mode for this track [ 11.674644] sr 0:0:0:0: [sr0] CDB: Read(10): 28 00 00 05 5e 56 00 00 02 00 [ 11.674651] end_request: I/O error, dev sr0, sector 1407320 [ 11.674656] Buffer I/O error on device sr0, logical block 175915 [ 11.740111] sr 0:0:0:0: [sr0] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 11.740116] sr 0:0:0:0: [sr0] Sense Key : Illegal Request [current] [ 11.740121] sr 0:0:0:0: [sr0] Add. Sense: Illegal mode for this track [ 11.740127] sr 0:0:0:0: [sr0] CDB: Read(10): 28 00 00 05 5e 56 00 00 02 00 [ 11.740135] end_request: I/O error, dev sr0, sector 1407320 [ 11.740139] Buffer I/O error on device sr0, logical block 175915 [ 11.805668] sr 0:0:0:0: [sr0] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 11.805673] sr 0:0:0:0: [sr0] Sense Key : Illegal Request [current] [ 11.805678] sr 0:0:0:0: [sr0] Add. Sense: Illegal mode for this track [ 11.805684] sr 0:0:0:0: [sr0] CDB: Read(10): 28 00 00 05 5e 56 00 00 02 00 [ 11.805692] end_request: I/O error, dev sr0, sector 1407320 [ 11.805696] Buffer I/O error on device sr0, logical block 175915 [ 11.871154] sr 0:0:0:0: [sr0] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 11.871160] sr 0:0:0:0: [sr0] Sense Key : Illegal Request [current] [ 11.871164] sr 0:0:0:0: [sr0] Add. Sense: Illegal mode for this track [ 11.871171] sr 0:0:0:0: [sr0] CDB: Read(10): 28 00 00 05 5e 56 00 00 02 00 [ 11.871179] end_request: I/O error, dev sr0, sector 1407320 [ 11.871183] Buffer I/O error on device sr0, logical block 175915 [ 11.974095] sr 0:0:0:0: [sr0] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 11.974101] sr 0:0:0:0: [sr0] Sense Key : Illegal Request [current] [ 11.974105] sr 0:0:0:0: [sr0] Add. Sense: Illegal mode for this track [ 11.974112] sr 0:0:0:0: [sr0] CDB: Read(10): 28 00 00 05 5e 56 00 00 02 00 [ 11.974120] end_request: I/O error, dev sr0, sector 1407320 [ 11.974125] Buffer I/O error on device sr0, logical block 175915 [ 12.042973] sr 0:0:0:0: [sr0] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 12.042979] sr 0:0:0:0: [sr0] Sense Key : Illegal Request [current] [ 12.042983] sr 0:0:0:0: [sr0] Add. Sense: Illegal mode for this track [ 12.042990] sr 0:0:0:0: [sr0] CDB: Read(10): 28 00 00 05 5e 56 00 00 02 00 [ 12.042998] end_request: I/O error, dev sr0, sector 1407320 [ 12.043002] Buffer I/O error on device sr0, logical block 175915 [ 12.105100] sr 0:0:0:0: [sr0] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 12.105105] sr 0:0:0:0: [sr0] Sense Key : Illegal Request [current] [ 12.105110] sr 0:0:0:0: [sr0] Add. Sense: Illegal mode for this track [ 12.105116] sr 0:0:0:0: [sr0] CDB: Read(10): 28 00 00 05 5e 56 00 00 02 00 [ 12.105124] end_request: I/O error, dev sr0, sector 1407320 [ 12.105128] Buffer I/O error on device sr0, logical block 175915 [ 12.605817] ISO 9660 Extensions: Microsoft Joliet Level 3 [ 12.634480] ISO 9660 Extensions: RRIP_1991A [ 12.730259] aufs 2-standalone.tree-35-rcN-20100531 [ 12.800385] squashfs: version 4.0 (2009/01/31) Phillip Lougher [ 51.794179] BUG: unable to handle kernel paging request at f815b540 [ 51.794186] IP: [] driver_register+0xfe/0x130 [ 51.794196] *pde = 3701b067 *pte = 00000000 [ 51.794200] Oops: 0000 [#1] SMP [ 51.794203] last sysfs file: /sys/devices/virtual/tty/tty40/uevent [ 51.794207] Modules linked in: amd64_agp(+) squashfs aufs isofs nls_iso8859_1 nls_cp437 vfat fat dm_raid45 xor hid_microsoft vga16fb vgastate usbhid hid nouveau ttm drm_kms_helper usb_storage drm floppy forcedeth sata_nv pata_amd i2c_algo_bit agpgart [ 51.794224] [ 51.794228] Pid: 818, comm: modprobe Not tainted 2.6.35-6-generic #8-Ubuntu 'K8N-E-Deluxe'/K8N-E-Deluxe [ 51.794232] EIP: 0060:[] EFLAGS: 00010282 CPU: 0 [ 51.794235] EIP is at driver_register+0xfe/0x130 [ 51.794238] EAX: f815b510 EBX: 00000000 ECX: f801f419 EDX: f685eae0 [ 51.794240] ESI: f801f510 EDI: c03716d0 EBP: f5471f34 ESP: f5471f18 [ 51.794243] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 51.794246] Process modprobe (pid: 818, ti=f5470000 task=f689cc20 task.ti=f5470000) [ 51.794248] Stack: [ 51.794249] 00000001 f801f780 00000000 c07e0ce0 f801f4e0 f801f780 f801f510 f5471f48 [ 51.794255] <0> c03719d5 b7779000 f801f780 00000000 f5471f54 f802202c 00000000 f5471f5c [ 51.794261] <0> f80220a8 f5471f88 c0101131 f801f780 c07df060 b7779000 f801f780 08bdd1c0 [ 51.794267] Call Trace: [ 51.794273] [] ? __pci_register_driver+0x45/0xb0 [ 51.794279] [] ? agp_amd64_init+0x2c/0xa0 [amd64_agp] [ 51.794283] [] ? agp_amd64_mod_init+0x8/0xa [amd64_agp] [ 51.794287] [] ? do_one_initcall+0x31/0x190 [ 51.794292] [] ? agp_amd64_mod_init+0x0/0xa [amd64_agp] [ 51.794298] [] ? sys_init_module+0x9b/0x1e0 [ 51.794303] [] ? sys_close+0x75/0xc0 [ 51.794307] [] ? syscall_call+0x7/0xb [ 51.794310] Code: 89 f0 e8 86 ea ff ff 83 c4 10 89 f8 5b 5e 5f 5d c3 8b 06 c7 04 24 08 61 77 c0 89 44 24 04 e8 78 5b 1c 00 8b 56 04 e9 56 ff ff ff <8b> 40 30 bf f0 ff ff ff e8 f5 14 f5 ff 8b 06 c7 04 24 48 61 77 [ 51.794339] EIP: [] driver_register+0xfe/0x130 SS:ESP 0068:f5471f18 [ 51.794343] CR2: 00000000f815b540 [ 51.794347] ---[ end trace b0e79d93b419a19b ]--- [ 62.906860] udev: starting version 151 [ 64.072496] WARNING! power/level is deprecated; use power/control instead [ 65.457986] ACPI: resource nForce2_smbus [io 0x5000-0x503f] conflicts with ACPI region SMRG [??? 0x00005000-0x00005004 flags 0x47] [ 65.457992] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver [ 65.458069] i2c i2c-2: nForce2 SMBus adapter at 0x5040 [ 65.681422] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 [ 66.417809] psmouse serio1: ID: 10 00 64 [ 67.022338] input: ImPS/2 Generic Wheel Mouse as /devices/platform/i8042/serio1/input/input7 [ 69.484126] usblp0: USB Bidirectional printer dev 3 if 1 alt 0 proto 2 vid 0x04E8 pid 0x341B [ 69.484573] usbcore: registered new interface driver usblp [ 70.022782] ACPI: PCI Interrupt Link [LAUI] enabled at IRQ 20 [ 70.022790] Intel ICH 0000:00:06.0: PCI INT A -> Link[LAUI] -> GSI 20 (level, low) -> IRQ 20 [ 70.022825] Intel ICH 0000:00:06.0: setting latency timer to 64 [ 70.344013] intel8x0_measure_ac97_clock: measured 52639 usecs (2584 samples) [ 70.344017] intel8x0: clocking to 46935 Bug: 602373 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-6-generic (buildd@vernadsky) (gcc version 4.4.4 (Ubuntu 4.4.4-6ubuntu1) ) #9-Ubuntu SMP Wed Jun 30 23:09:46 UTC 2010 (Ubuntu 2.6.35-6.9-generic 2.6.35-rc3) [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) [ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 000000007f4fd000 (usable) [ 0.000000] BIOS-e820: 000000007f4fd000 - 000000007f508000 (reserved) [ 0.000000] BIOS-e820: 000000007f508000 - 000000007f552000 (usable) [ 0.000000] BIOS-e820: 000000007f552000 - 000000007f555000 (reserved) [ 0.000000] BIOS-e820: 000000007f555000 - 000000007f5bb000 (usable) [ 0.000000] BIOS-e820: 000000007f5bb000 - 000000007f5bf000 (reserved) [ 0.000000] BIOS-e820: 000000007f5bf000 - 000000007f670000 (usable) [ 0.000000] BIOS-e820: 000000007f670000 - 000000007f6bf000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000007f6bf000 - 000000007f700000 (ACPI data) [ 0.000000] BIOS-e820: 000000007f700000 - 0000000080000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fed14000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1c000 - 00000000fed20000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000fff00000 - 0000000100000000 (reserved) [ 0.000000] Notice: NX (Execute Disable) protection cannot be enabled: non-PAE kernel! [ 0.000000] DMI 2.4 present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] last_pfn = 0x7f670 max_arch_pfn = 0x100000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0FFFE0000 mask FFFFE0000 write-protect [ 0.000000] 1 base 000000000 mask FC0000000 write-back [ 0.000000] 2 base 040000000 mask FC0000000 write-back [ 0.000000] 3 base 07F800000 mask FFF800000 uncachable [ 0.000000] 4 base 07F700000 mask FFFF00000 uncachable [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820 update range: 0000000000002000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000001000 (reserved) [ 0.000000] modified: 0000000000001000 - 0000000000002000 (usable) [ 0.000000] modified: 0000000000002000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009fc00 (usable) [ 0.000000] modified: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 000000007f4fd000 (usable) [ 0.000000] modified: 000000007f4fd000 - 000000007f508000 (reserved) [ 0.000000] modified: 000000007f508000 - 000000007f552000 (usable) [ 0.000000] modified: 000000007f552000 - 000000007f555000 (reserved) [ 0.000000] modified: 000000007f555000 - 000000007f5bb000 (usable) [ 0.000000] modified: 000000007f5bb000 - 000000007f5bf000 (reserved) [ 0.000000] modified: 000000007f5bf000 - 000000007f670000 (usable) [ 0.000000] modified: 000000007f670000 - 000000007f6bf000 (ACPI NVS) [ 0.000000] modified: 000000007f6bf000 - 000000007f700000 (ACPI data) [ 0.000000] modified: 000000007f700000 - 0000000080000000 (reserved) [ 0.000000] modified: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] modified: 00000000fed14000 - 00000000fed1a000 (reserved) [ 0.000000] modified: 00000000fed1c000 - 00000000fed20000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000fff00000 - 0000000100000000 (reserved) [ 0.000000] initial memory mapped : 0 - 00c00000 [ 0.000000] found SMP MP-table at [c00fe1b0] fe1b0 [ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000 [ 0.000000] 0000000000 - 0000400000 page 4k [ 0.000000] 0000400000 - 0037400000 page 2M [ 0.000000] 0037400000 - 00377fe000 page 4k [ 0.000000] kernel direct mapping tables up to 377fe000 @ 15000-1a000 [ 0.000000] RAMDISK: 375d0000 - 37ff0000 [ 0.000000] Allocated new RAMDISK: 009ba000 - 013d90b3 [ 0.000000] Move RAMDISK from 00000000375d0000 - 0000000037fef0b2 to 009ba000 - 013d90b2 [ 0.000000] ACPI: RSDP 000fe020 00024 (v02 ACRSYS) [ 0.000000] ACPI: XSDT 7f6fe120 00064 (v01 ACRSYS ACRPRDCT 00000001 01000013) [ 0.000000] ACPI: FACP 7f6fd000 000F4 (v04 ACRSYS ACRPRDCT 00000001 MSFT 01000013) [ 0.000000] ACPI: DSDT 7f6f4000 08968 (v01 ACRSYS ACRPRDCT 00000001 MSFT 01000013) [ 0.000000] ACPI: FACS 7f675000 00040 [ 0.000000] ACPI: APIC 7f6f3000 00068 (v02 ACRSYS ACRPRDCT 00000001 MSFT 01000013) [ 0.000000] ACPI: MCFG 7f6f2000 0003C (v01 ACRSYS ACRPRDCT 00000001 MSFT 01000013) [ 0.000000] ACPI: SLIC 7f6f1000 00176 (v01 ACRSYS ACRPRDCT 00000001 MSFT 01000013) [ 0.000000] ACPI: HPET 7f6f0000 00038 (v01 ACRSYS ACRPRDCT 00000001 MSFT 01000013) [ 0.000000] ACPI: SSDT 7f6ef000 004C4 (v01 PmRef CpuPm 00003000 INTL 20051117) [ 0.000000] ACPI: SSDT 7f6ee000 00232 (v01 PmRef Cpu0Tst 00003000 INTL 20051117) [ 0.000000] ACPI: SSDT 7f6ed000 000A0 (v01 PmRef Cpu1Tst 00003000 INTL 20051117) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] 1150MB HIGHMEM available. [ 0.000000] 887MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 377fe000 [ 0.000000] low ram: 0 - 377fe000 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000001 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x000377fe [ 0.000000] HighMem 0x000377fe -> 0x0007f670 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[6] active PFN ranges [ 0.000000] 0: 0x00000001 -> 0x00000002 [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x0007f4fd [ 0.000000] 0: 0x0007f508 -> 0x0007f552 [ 0.000000] 0: 0x0007f555 -> 0x0007f5bb [ 0.000000] 0: 0x0007f5bf -> 0x0007f670 [ 0.000000] On node 0 totalpages: 521710 [ 0.000000] free_area_init_node: node 0, pgdat c08156c0, node_mem_map c13db020 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3952 pages, LIFO batch:0 [ 0.000000] Normal zone: 1744 pages used for memmap [ 0.000000] Normal zone: 221486 pages, LIFO batch:31 [ 0.000000] HighMem zone: 2301 pages used for memmap [ 0.000000] HighMem zone: 292195 pages, LIFO batch:31 [ 0.000000] Using APIC driver default [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x04] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 4, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [16000 - 167ff] [ 0.000000] PM: Registered nosave memory: 0000000000002000 - 0000000000010000 [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at 80000000 (gap: 80000000:60000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:2 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 14 pages/cpu @c2400000 s36480 r0 d20864 u2097152 [ 0.000000] pcpu-alloc: s36480 r0 d20864 u2097152 alloc=1*4194304 [ 0.000000] pcpu-alloc: [0] 0 1 [ 0.000000] early_res array is doubled to 128 at [16800 - 177ff] [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 517633 [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-6-generic root=UUID=a0909540-5401-4b7b-ab97-d5ba7e129d27 ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Enabling fast FPU save and restore... done. [ 0.000000] Enabling unmasked SIMD FPU exception support... done. [ 0.000000] Initializing CPU#0 [ 0.000000] allocated 10436780 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Subtract (59 early reservations) [ 0.000000] #1 [0000001000 - 0000002000] EX TRAMPOLINE [ 0.000000] #2 [0000100000 - 00009b591c] TEXT DATA BSS [ 0.000000] #3 [00009b6000 - 00009b91a8] BRK [ 0.000000] #4 [000009fc00 - 00000fe1b0] BIOS reserved [ 0.000000] #5 [00000fe1b0 - 00000fe1c0] MP-table mpf [ 0.000000] #6 [00000fe1c0 - 00000feab0] BIOS reserved [ 0.000000] #7 [00000febf8 - 0000100000] BIOS reserved [ 0.000000] #8 [00000feab0 - 00000febf8] MP-table mpc [ 0.000000] #9 [0000010000 - 0000011000] TRAMPOLINE [ 0.000000] #10 [0000011000 - 0000015000] ACPI WAKEUP [ 0.000000] #11 [0000015000 - 0000016000] PGTABLE [ 0.000000] #12 [00009ba000 - 00013da000] NEW RAMDISK [ 0.000000] #13 [00013da000 - 00013db000] BOOTMEM [ 0.000000] #14 [00013db000 - 00023cb000] BOOTMEM [ 0.000000] #15 [00023cb000 - 00023cb004] BOOTMEM [ 0.000000] #16 [00023cb040 - 00023cb100] BOOTMEM [ 0.000000] #17 [00023cb100 - 00023cb154] BOOTMEM [ 0.000000] #18 [00023cb180 - 00023ce180] BOOTMEM [ 0.000000] #19 [00023ce180 - 00023ce1ec] BOOTMEM [ 0.000000] #20 [00023ce200 - 00023d4200] BOOTMEM [ 0.000000] #21 [00023d4200 - 00023d4225] BOOTMEM [ 0.000000] #22 [00023d4240 - 00023d4267] BOOTMEM [ 0.000000] #23 [00023d4280 - 00023d44e8] BOOTMEM [ 0.000000] #24 [00023d4500 - 00023d4540] BOOTMEM [ 0.000000] #25 [00023d4540 - 00023d4580] BOOTMEM [ 0.000000] #26 [00023d4580 - 00023d45c0] BOOTMEM [ 0.000000] #27 [00023d45c0 - 00023d4600] BOOTMEM [ 0.000000] #28 [00023d4600 - 00023d4640] BOOTMEM [ 0.000000] #29 [00023d4640 - 00023d4680] BOOTMEM [ 0.000000] #30 [00023d4680 - 00023d46c0] BOOTMEM [ 0.000000] #31 [00023d46c0 - 00023d4700] BOOTMEM [ 0.000000] #32 [00023d4700 - 00023d4740] BOOTMEM [ 0.000000] #33 [00023d4740 - 00023d4780] BOOTMEM [ 0.000000] #34 [00023d4780 - 00023d47c0] BOOTMEM [ 0.000000] #35 [00023d47c0 - 00023d4800] BOOTMEM [ 0.000000] #36 [00023d4800 - 00023d4840] BOOTMEM [ 0.000000] #37 [00023d4840 - 00023d4880] BOOTMEM [ 0.000000] #38 [00023d4880 - 00023d48c0] BOOTMEM [ 0.000000] #39 [00023d48c0 - 00023d4900] BOOTMEM [ 0.000000] #40 [00023d4900 - 00023d4940] BOOTMEM [ 0.000000] #41 [00023d4940 - 00023d4980] BOOTMEM [ 0.000000] #42 [00023d4980 - 00023d49c0] BOOTMEM [ 0.000000] #43 [00023d49c0 - 00023d49d0] BOOTMEM [ 0.000000] #44 [00023d4a00 - 00023d4a10] BOOTMEM [ 0.000000] #45 [00023d4a40 - 00023d4aa9] BOOTMEM [ 0.000000] #46 [00023d4ac0 - 00023d4b29] BOOTMEM [ 0.000000] #47 [0002400000 - 000240e000] BOOTMEM [ 0.000000] #48 [0002600000 - 000260e000] BOOTMEM [ 0.000000] #49 [00023d6b40 - 00023d6b44] BOOTMEM [ 0.000000] #50 [00023d6b80 - 00023d6b84] BOOTMEM [ 0.000000] #51 [00023d6bc0 - 00023d6bc8] BOOTMEM [ 0.000000] #52 [00023d6c00 - 00023d6c08] BOOTMEM [ 0.000000] #53 [00023d6c40 - 00023d6ce8] BOOTMEM [ 0.000000] #54 [00023d6d00 - 00023d6d68] BOOTMEM [ 0.000000] #55 [00023d6d80 - 00023dad80] BOOTMEM [ 0.000000] #56 [000240e000 - 000248e000] BOOTMEM [ 0.000000] #57 [000248e000 - 00024ce000] BOOTMEM [ 0.000000] #58 [000260e000 - 00030020ac] BOOTMEM [ 0.000000] Initializing HighMem for node 0 (000377fe:0007f670) [ 0.000000] Memory: 2040048k/2087360k available (4947k kernel code, 46792k reserved, 2404k data, 684k init, 1177984k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff15000 - 0xfffff000 ( 936 kB) [ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB) [ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) [ 0.000000] .init : 0xc082e000 - 0xc08d9000 ( 684 kB) [ 0.000000] .data : 0xc05d4f72 - 0xc082dfe8 (2404 kB) [ 0.000000] .text : 0xc0100000 - 0xc05d4f72 (4947 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=13, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:2304 nr_irqs:512 [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1595.742 MHz processor. [ 0.004007] Calibrating delay loop (skipped), value calculated using timer frequency.. 3191.48 BogoMIPS (lpj=6382968) [ 0.004014] pid_max: default: 32768 minimum: 301 [ 0.004038] Security Framework initialized [ 0.004061] AppArmor: AppArmor initialized [ 0.004122] Mount-cache hash table entries: 512 [ 0.004294] Initializing cgroup subsys ns [ 0.004300] Initializing cgroup subsys cpuacct [ 0.004306] Initializing cgroup subsys memory [ 0.004317] Initializing cgroup subsys devices [ 0.004320] Initializing cgroup subsys freezer [ 0.004323] Initializing cgroup subsys net_cls [ 0.004358] CPU: Physical Processor ID: 0 [ 0.004361] CPU: Processor Core ID: 0 [ 0.004364] mce: CPU supports 6 MCE banks [ 0.004375] CPU0: Thermal monitoring enabled (TM1) [ 0.004380] using mwait in idle threads. [ 0.004389] Performance Events: PEBS fmt0+, Core2 events, Intel PMU driver. [ 0.004397] PEBS disabled due to CPU errata. [ 0.004406] ... version: 2 [ 0.004408] ... bit width: 40 [ 0.004411] ... generic registers: 2 [ 0.004413] ... value mask: 000000ffffffffff [ 0.004416] ... max period: 000000007fffffff [ 0.004419] ... fixed-purpose events: 3 [ 0.004421] ... event mask: 0000000700000003 [ 0.008154] ACPI: Core revision 20100428 [ 0.024012] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.024018] ftrace: allocating 21765 entries in 43 pages [ 0.028069] Enabling APIC mode: Flat. Using 1 I/O APICs [ 0.028460] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.068697] CPU0: Intel(R) Pentium(R) Dual CPU T2330 @ 1.60GHz stepping 0d [ 0.072000] Booting Node 0, Processors #1 Ok. [ 0.008000] Initializing CPU#1 [ 0.160020] Brought up 2 CPUs [ 0.160024] Total of 2 processors activated (6383.44 BogoMIPS). [ 0.160520] devtmpfs: initialized [ 0.161283] regulator: core version 0.5 [ 0.161321] Time: 13:37:31 Date: 07/06/10 [ 0.161374] NET: Registered protocol family 16 [ 0.161406] Trying to unpack rootfs image as initramfs... [ 0.161548] EISA bus registered [ 0.161559] ACPI: bus type pci registered [ 0.161657] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.161662] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.161664] PCI: Using MMCONFIG for extended config space [ 0.161667] PCI: Using configuration type 1 for base access [ 0.168179] bio: create slab at 0 [ 0.171124] ACPI: EC: Look up EC in DSDT [ 0.177690] ACPI: BIOS _OSI(Linux) query ignored [ 0.188602] ACPI: SSDT 7f674c90 0022C (v01 PmRef Cpu0Ist 00003000 INTL 20051117) [ 0.189735] ACPI: Dynamic OEM Table Load: [ 0.189740] ACPI: SSDT (null) 0022C (v01 PmRef Cpu0Ist 00003000 INTL 20051117) [ 0.190161] ACPI: SSDT 7f673610 005D7 (v01 PmRef Cpu0Cst 00003001 INTL 20051117) [ 0.190927] ACPI: Dynamic OEM Table Load: [ 0.190932] ACPI: SSDT (null) 005D7 (v01 PmRef Cpu0Cst 00003001 INTL 20051117) [ 0.191514] ACPI: SSDT 7f674f10 000C4 (v01 PmRef Cpu1Ist 00003000 INTL 20051117) [ 0.192306] ACPI: Dynamic OEM Table Load: [ 0.192311] ACPI: SSDT (null) 000C4 (v01 PmRef Cpu1Ist 00003000 INTL 20051117) [ 0.192520] ACPI: SSDT 7f676d10 00083 (v01 PmRef Cpu1Cst 00003000 INTL 20051117) [ 0.193288] ACPI: Dynamic OEM Table Load: [ 0.193293] ACPI: SSDT (null) 00083 (v01 PmRef Cpu1Cst 00003000 INTL 20051117) [ 0.212260] ACPI: Interpreter enabled [ 0.212268] ACPI: (supports S0 S3 S4 S5) [ 0.212307] ACPI: Using IOAPIC for interrupt routing [ 0.438992] ACPI: EC: GPE = 0x1c, I/O: command/status = 0x66, data = 0x62 [ 0.439490] ACPI: No dock devices found. [ 0.439495] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.440405] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.440418] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.440420] _OSC request data:1 8 1f [ 0.440428] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.441903] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 0.441908] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 0.441913] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.441919] pci_root PNP0A08:00: host bridge window [mem 0x80000000-0xfebfffff] [ 0.442016] pci 0000:00:02.0: reg 10: [mem 0x94000000-0x940fffff 64bit] [ 0.442027] pci 0000:00:02.0: reg 18: [mem 0x80000000-0x8fffffff 64bit pref] [ 0.442034] pci 0000:00:02.0: reg 20: [io 0x5110-0x5117] [ 0.442091] pci 0000:00:02.1: reg 10: [mem 0x00000000-0x000fffff 64bit] [ 0.442240] pci 0000:00:1a.0: reg 20: [io 0x50c0-0x50df] [ 0.442320] pci 0000:00:1a.1: reg 20: [io 0x50a0-0x50bf] [ 0.442400] pci 0000:00:1a.7: reg 10: [mem 0x98404c00-0x98404fff] [ 0.442480] pci 0000:00:1a.7: PME# supported from D0 D3hot D3cold [ 0.442488] pci 0000:00:1a.7: PME# disabled [ 0.442544] pci 0000:00:1b.0: reg 10: [mem 0x98400000-0x98403fff 64bit] [ 0.442624] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.442631] pci 0000:00:1b.0: PME# disabled [ 0.442760] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.442766] pci 0000:00:1c.0: PME# disabled [ 0.442897] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 0.442903] pci 0000:00:1c.1: PME# disabled [ 0.443034] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 0.443040] pci 0000:00:1c.2: PME# disabled [ 0.443176] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold [ 0.443183] pci 0000:00:1c.3: PME# disabled [ 0.443265] pci 0000:00:1d.0: reg 20: [io 0x5080-0x509f] [ 0.443345] pci 0000:00:1d.1: reg 20: [io 0x5060-0x507f] [ 0.443427] pci 0000:00:1d.2: reg 20: [io 0x5040-0x505f] [ 0.443504] pci 0000:00:1d.7: reg 10: [mem 0x98404800-0x98404bff] [ 0.443585] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.443592] pci 0000:00:1d.7: PME# disabled [ 0.443796] pci 0000:00:1f.0: quirk: [io 0x0400-0x047f] claimed by ICH6 ACPI/GPIO/TCO [ 0.443802] pci 0000:00:1f.0: quirk: [io 0x0500-0x053f] claimed by ICH6 GPIO [ 0.443810] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 2 PIO at ff2c (mask 0003) [ 0.443816] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 3 PIO at 0068 (mask 0007) [ 0.443881] pci 0000:00:1f.1: reg 10: [io 0x5108-0x510f] [ 0.443892] pci 0000:00:1f.1: reg 14: [io 0x5124-0x5127] [ 0.443902] pci 0000:00:1f.1: reg 18: [io 0x5100-0x5107] [ 0.443912] pci 0000:00:1f.1: reg 1c: [io 0x5120-0x5123] [ 0.443922] pci 0000:00:1f.1: reg 20: [io 0x50e0-0x50ef] [ 0.444011] pci 0000:00:1f.2: reg 10: [io 0x50f8-0x50ff] [ 0.444022] pci 0000:00:1f.2: reg 14: [io 0x511c-0x511f] [ 0.444032] pci 0000:00:1f.2: reg 18: [io 0x50f0-0x50f7] [ 0.444042] pci 0000:00:1f.2: reg 1c: [io 0x5118-0x511b] [ 0.444052] pci 0000:00:1f.2: reg 20: [io 0x5020-0x503f] [ 0.444062] pci 0000:00:1f.2: reg 24: [mem 0x98404000-0x984047ff] [ 0.444116] pci 0000:00:1f.2: PME# supported from D3hot [ 0.444122] pci 0000:00:1f.2: PME# disabled [ 0.444165] pci 0000:00:1f.3: reg 10: [mem 0x98405000-0x984050ff] [ 0.444197] pci 0000:00:1f.3: reg 20: [io 0x5000-0x501f] [ 0.444308] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.444315] pci 0000:00:1c.0: bridge window [io 0x4000-0x4fff] [ 0.444323] pci 0000:00:1c.0: bridge window [mem 0x97400000-0x983fffff] [ 0.444333] pci 0000:00:1c.0: bridge window [mem 0x90000000-0x90ffffff 64bit pref] [ 0.444410] pci 0000:00:1c.1: PCI bridge to [bus 04-04] [ 0.444417] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.444424] pci 0000:00:1c.1: bridge window [mem 0x96400000-0x973fffff] [ 0.444435] pci 0000:00:1c.1: bridge window [mem 0x91000000-0x91ffffff 64bit pref] [ 0.444579] pci 0000:05:00.0: reg 10: [mem 0x95300000-0x9530ffff 64bit] [ 0.444704] pci 0000:05:00.0: PME# supported from D3hot D3cold [ 0.444711] pci 0000:05:00.0: PME# disabled [ 0.452037] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 0.452046] pci 0000:00:1c.2: bridge window [io 0x2000-0x2fff] [ 0.452053] pci 0000:00:1c.2: bridge window [mem 0x95300000-0x963fffff] [ 0.452064] pci 0000:00:1c.2: bridge window [mem 0x92000000-0x92ffffff 64bit pref] [ 0.452201] pci 0000:06:00.0: reg 10: [mem 0x94200000-0x9420ffff 64bit] [ 0.452350] pci 0000:06:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 0.452366] pci 0000:00:1c.3: PCI bridge to [bus 06-06] [ 0.452373] pci 0000:00:1c.3: bridge window [io 0x1000-0x1fff] [ 0.452380] pci 0000:00:1c.3: bridge window [mem 0x94200000-0x952fffff] [ 0.452390] pci 0000:00:1c.3: bridge window [mem 0x93000000-0x93ffffff 64bit pref] [ 0.452469] pci 0000:07:00.0: reg 10: [mem 0x94100000-0x941007ff] [ 0.452545] pci 0000:07:00.0: supports D1 D2 [ 0.452548] pci 0000:07:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.452555] pci 0000:07:00.0: PME# disabled [ 0.452601] pci 0000:07:00.1: reg 10: [mem 0x94100a00-0x94100aff] [ 0.452677] pci 0000:07:00.1: supports D1 D2 [ 0.452680] pci 0000:07:00.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.452686] pci 0000:07:00.1: PME# disabled [ 0.452733] pci 0000:07:00.2: reg 10: [mem 0x94100900-0x941009ff] [ 0.452811] pci 0000:07:00.2: supports D1 D2 [ 0.452814] pci 0000:07:00.2: PME# supported from D0 D1 D2 D3hot D3cold [ 0.452820] pci 0000:07:00.2: PME# disabled [ 0.452867] pci 0000:07:00.3: reg 10: [mem 0x94100800-0x941008ff] [ 0.452942] pci 0000:07:00.3: supports D1 D2 [ 0.452945] pci 0000:07:00.3: PME# supported from D0 D1 D2 D3hot D3cold [ 0.452952] pci 0000:07:00.3: PME# disabled [ 0.453043] pci 0000:00:1e.0: PCI bridge to [bus 07-07] (subtractive decode) [ 0.453051] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.453058] pci 0000:00:1e.0: bridge window [mem 0x94100000-0x941fffff] [ 0.453068] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.453072] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.453076] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.453080] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.453083] pci 0000:00:1e.0: bridge window [mem 0x80000000-0xfebfffff] (subtractive decode) [ 0.453127] pci_bus 0000:00: on NUMA node 0 [ 0.453143] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.453489] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P32_._PRT] [ 0.453679] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP2._PRT] [ 0.453809] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP3._PRT] [ 0.453939] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP4._PRT] [ 0.454268] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.454280] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.454282] _OSC request data:1 1f 1f [ 0.468538] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 7 9 10 *11 12) [ 0.468715] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 7 9 10 *11 12) [ 0.468888] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 7 9 10 *11 12) [ 0.469069] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 7 9 10 *11 12) [ 0.469242] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 7 9 10 11 12) *0, disabled. [ 0.469416] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 7 9 *10 11 12) [ 0.469588] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 7 9 10 *11 12) [ 0.469759] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 7 9 10 *11 12) [ 0.469857] HEST: Table is not found! [ 0.469960] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 0.469988] vgaarb: loaded [ 0.470219] SCSI subsystem initialized [ 0.470336] libata version 3.00 loaded. [ 0.470411] usbcore: registered new interface driver usbfs [ 0.470428] usbcore: registered new interface driver hub [ 0.470462] usbcore: registered new device driver usb [ 0.471102] ACPI: WMI: Mapper loaded [ 0.471106] PCI: Using ACPI for IRQ routing [ 0.471110] PCI: pci_cache_line_size set to 64 bytes [ 0.471283] reserve RAM buffer: 0000000000002000 - 000000000000ffff [ 0.471287] reserve RAM buffer: 000000000009fc00 - 000000000009ffff [ 0.471290] reserve RAM buffer: 000000007f4fd000 - 000000007fffffff [ 0.471295] reserve RAM buffer: 000000007f552000 - 000000007fffffff [ 0.471300] reserve RAM buffer: 000000007f5bb000 - 000000007fffffff [ 0.471304] reserve RAM buffer: 000000007f670000 - 000000007fffffff [ 0.471432] NetLabel: Initializing [ 0.471434] NetLabel: domain hash size = 128 [ 0.471437] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.471453] NetLabel: unlabeled traffic allowed by default [ 0.471503] HPET: 3 timers in total, 0 timers will be used for per-cpu timer [ 0.471512] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 [ 0.471518] hpet0: 3 comparators, 64-bit 14.318180 MHz counter [ 0.480052] Switching to clocksource tsc [ 0.495213] AppArmor: AppArmor Filesystem Enabled [ 0.495238] pnp: PnP ACPI init [ 0.495264] ACPI: bus type pnp registered [ 0.496803] pnp 00:01: disabling [io 0x164e-0x164f] because it overlaps 0000:00:1c.3 BAR 13 [io 0x1000-0x1fff] [ 0.507980] Freeing initrd memory: 10368k freed [ 0.604477] pnp: PnP ACPI: found 10 devices [ 0.604482] ACPI: ACPI bus type pnp unregistered [ 0.604488] PnPBIOS: Disabled by ACPI PNP [ 0.604509] system 00:01: [io 0x0600-0x060f] has been reserved [ 0.604514] system 00:01: [io 0x0610] has been reserved [ 0.604517] system 00:01: [io 0x0800-0x080f] has been reserved [ 0.604521] system 00:01: [io 0x0810-0x0817] has been reserved [ 0.604525] system 00:01: [io 0x0400-0x047f] has been reserved [ 0.604529] system 00:01: [io 0x0500-0x053f] has been reserved [ 0.604536] system 00:01: [mem 0xe0000000-0xefffffff] has been reserved [ 0.604540] system 00:01: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.604544] system 00:01: [mem 0xfed14000-0xfed17fff] has been reserved [ 0.604548] system 00:01: [mem 0xfed18000-0xfed18fff] has been reserved [ 0.604552] system 00:01: [mem 0xfed19000-0xfed19fff] has been reserved [ 0.604557] system 00:01: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.604561] system 00:01: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.604565] system 00:01: [mem 0x32000000-0x320000ff] could not be reserved [ 0.639468] pci 0000:00:02.1: BAR 0: assigned [mem 0x98500000-0x985fffff 64bit] [ 0.639477] pci 0000:00:02.1: BAR 0: set to [mem 0x98500000-0x985fffff 64bit] (PCI address [0x98500000-0x985fffff] [ 0.639481] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.639486] pci 0000:00:1c.0: bridge window [io 0x4000-0x4fff] [ 0.639495] pci 0000:00:1c.0: bridge window [mem 0x97400000-0x983fffff] [ 0.639501] pci 0000:00:1c.0: bridge window [mem 0x90000000-0x90ffffff 64bit pref] [ 0.639511] pci 0000:00:1c.1: PCI bridge to [bus 04-04] [ 0.639516] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.639524] pci 0000:00:1c.1: bridge window [mem 0x96400000-0x973fffff] [ 0.639531] pci 0000:00:1c.1: bridge window [mem 0x91000000-0x91ffffff 64bit pref] [ 0.639541] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 0.639547] pci 0000:00:1c.2: bridge window [io 0x2000-0x2fff] [ 0.639555] pci 0000:00:1c.2: bridge window [mem 0x95300000-0x963fffff] [ 0.639562] pci 0000:00:1c.2: bridge window [mem 0x92000000-0x92ffffff 64bit pref] [ 0.639572] pci 0000:00:1c.3: PCI bridge to [bus 06-06] [ 0.639577] pci 0000:00:1c.3: bridge window [io 0x1000-0x1fff] [ 0.639585] pci 0000:00:1c.3: bridge window [mem 0x94200000-0x952fffff] [ 0.639592] pci 0000:00:1c.3: bridge window [mem 0x93000000-0x93ffffff 64bit pref] [ 0.639603] pci 0000:00:1e.0: PCI bridge to [bus 07-07] [ 0.639605] pci 0000:00:1e.0: bridge window [io disabled] [ 0.639614] pci 0000:00:1e.0: bridge window [mem 0x94100000-0x941fffff] [ 0.639620] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.639645] alloc irq_desc for 16 on node -1 [ 0.639647] alloc kstat_irqs on node -1 [ 0.639656] pci 0000:00:1c.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.639664] pci 0000:00:1c.0: setting latency timer to 64 [ 0.639677] alloc irq_desc for 17 on node -1 [ 0.639680] alloc kstat_irqs on node -1 [ 0.639685] pci 0000:00:1c.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 0.639692] pci 0000:00:1c.1: setting latency timer to 64 [ 0.639705] alloc irq_desc for 18 on node -1 [ 0.639708] alloc kstat_irqs on node -1 [ 0.639713] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.639719] pci 0000:00:1c.2: setting latency timer to 64 [ 0.639732] alloc irq_desc for 19 on node -1 [ 0.639735] alloc kstat_irqs on node -1 [ 0.639740] pci 0000:00:1c.3: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 0.639746] pci 0000:00:1c.3: setting latency timer to 64 [ 0.639758] pci 0000:00:1e.0: setting latency timer to 64 [ 0.639771] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 0.639775] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 0.639778] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.639781] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfffff] [ 0.639785] pci_bus 0000:02: resource 0 [io 0x4000-0x4fff] [ 0.639788] pci_bus 0000:02: resource 1 [mem 0x97400000-0x983fffff] [ 0.639791] pci_bus 0000:02: resource 2 [mem 0x90000000-0x90ffffff 64bit pref] [ 0.639795] pci_bus 0000:04: resource 0 [io 0x3000-0x3fff] [ 0.639798] pci_bus 0000:04: resource 1 [mem 0x96400000-0x973fffff] [ 0.639801] pci_bus 0000:04: resource 2 [mem 0x91000000-0x91ffffff 64bit pref] [ 0.639805] pci_bus 0000:05: resource 0 [io 0x2000-0x2fff] [ 0.639808] pci_bus 0000:05: resource 1 [mem 0x95300000-0x963fffff] [ 0.639811] pci_bus 0000:05: resource 2 [mem 0x92000000-0x92ffffff 64bit pref] [ 0.639815] pci_bus 0000:06: resource 0 [io 0x1000-0x1fff] [ 0.639818] pci_bus 0000:06: resource 1 [mem 0x94200000-0x952fffff] [ 0.639821] pci_bus 0000:06: resource 2 [mem 0x93000000-0x93ffffff 64bit pref] [ 0.639825] pci_bus 0000:07: resource 1 [mem 0x94100000-0x941fffff] [ 0.639828] pci_bus 0000:07: resource 4 [io 0x0000-0x0cf7] [ 0.639831] pci_bus 0000:07: resource 5 [io 0x0d00-0xffff] [ 0.639835] pci_bus 0000:07: resource 6 [mem 0x000a0000-0x000bffff] [ 0.639838] pci_bus 0000:07: resource 7 [mem 0x80000000-0xfebfffff] [ 0.639893] NET: Registered protocol family 2 [ 0.639984] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.640320] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.640869] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.641251] TCP: Hash tables configured (established 131072 bind 65536) [ 0.641255] TCP reno registered [ 0.641260] UDP hash table entries: 512 (order: 2, 16384 bytes) [ 0.641276] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) [ 0.641423] NET: Registered protocol family 1 [ 0.641452] pci 0000:00:02.0: Boot video device [ 0.641879] PCI: CLS 0 bytes, default 64 [ 0.642152] cpufreq-nforce2: No nForce2 chipset. [ 0.642196] Scanning for low memory corruption every 60 seconds [ 0.642391] audit: initializing netlink socket (disabled) [ 0.642410] type=2000 audit(1278423451.636:1): initialized [ 0.656383] highmem bounce pool size: 64 pages [ 0.656390] HugeTLB registered 4 MB page size, pre-allocated 0 pages [ 0.658382] VFS: Disk quotas dquot_6.5.2 [ 0.658470] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 0.659277] fuse init (API version 7.14) [ 0.659398] msgmni has been set to 1703 [ 0.659670] alg: No test for stdrng (krng) [ 0.659745] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.659749] io scheduler noop registered [ 0.659752] io scheduler deadline registered [ 0.659774] io scheduler cfq registered (default) [ 0.659952] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.660013] alloc irq_desc for 40 on node -1 [ 0.660016] alloc kstat_irqs on node -1 [ 0.660031] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 0.660160] pcieport 0000:00:1c.1: setting latency timer to 64 [ 0.660217] alloc irq_desc for 41 on node -1 [ 0.660220] alloc kstat_irqs on node -1 [ 0.660231] pcieport 0000:00:1c.1: irq 41 for MSI/MSI-X [ 0.660358] pcieport 0000:00:1c.2: setting latency timer to 64 [ 0.660416] alloc irq_desc for 42 on node -1 [ 0.660418] alloc kstat_irqs on node -1 [ 0.660429] pcieport 0000:00:1c.2: irq 42 for MSI/MSI-X [ 0.660552] pcieport 0000:00:1c.3: setting latency timer to 64 [ 0.660609] alloc irq_desc for 43 on node -1 [ 0.660611] alloc kstat_irqs on node -1 [ 0.660622] pcieport 0000:00:1c.3: irq 43 for MSI/MSI-X [ 0.660758] pcieport 0000:00:1c.0: Requesting control of PCIe PME from ACPI BIOS [ 0.660934] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.660948] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.660950] _OSC request data:1 0 1f [ 0.660956] pcieport 0000:00:1c.0: Failed to receive control of PCIe PME service: ACPI _OSC failed [ 0.660962] pcie_pme: probe of 0000:00:1c.0:pcie01 failed with error -13 [ 0.660969] pcieport 0000:00:1c.1: Requesting control of PCIe PME from ACPI BIOS [ 0.661105] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.661116] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.661118] _OSC request data:1 0 1f [ 0.661125] pcieport 0000:00:1c.1: Failed to receive control of PCIe PME service: ACPI _OSC failed [ 0.661130] pcie_pme: probe of 0000:00:1c.1:pcie01 failed with error -13 [ 0.661136] pcieport 0000:00:1c.2: Requesting control of PCIe PME from ACPI BIOS [ 0.661269] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.661281] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.661283] _OSC request data:1 0 1f [ 0.661289] pcieport 0000:00:1c.2: Failed to receive control of PCIe PME service: ACPI _OSC failed [ 0.661294] pcie_pme: probe of 0000:00:1c.2:pcie01 failed with error -13 [ 0.661300] pcieport 0000:00:1c.3: Requesting control of PCIe PME from ACPI BIOS [ 0.661432] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.661443] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.661446] _OSC request data:1 0 1f [ 0.661452] pcieport 0000:00:1c.3: Failed to receive control of PCIe PME service: ACPI _OSC failed [ 0.661457] pcie_pme: probe of 0000:00:1c.3:pcie01 failed with error -13 [ 0.661487] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.661629] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.661641] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.661643] _OSC request data:1 0 1f [ 0.661796] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.661807] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.661809] _OSC request data:1 0 1f [ 0.661960] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.661971] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.661974] _OSC request data:1 0 1f [ 0.662124] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.662135] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.662138] _OSC request data:1 0 1f [ 0.662310] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.662322] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.662324] _OSC request data:1 0 1f [ 0.662477] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.662489] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.662491] _OSC request data:1 0 1f [ 0.662642] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.662654] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.662656] _OSC request data:1 0 1f [ 0.662808] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.662819] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.662822] _OSC request data:1 0 1f [ 0.662847] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.671895] ACPI: AC Adapter [AC] (on-line) [ 0.672016] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:02/PNP0C0C:00/input/input0 [ 0.672021] ACPI: Power Button [PWRB] [ 0.672077] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:02/PNP0C0D:00/input/input1 [ 0.672136] ACPI: Lid Switch [LID0] [ 0.672196] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:02/PNP0C0E:00/input/input2 [ 0.672200] ACPI: Sleep Button [SLPB] [ 0.672272] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3 [ 0.672275] ACPI: Power Button [PWRF] [ 0.672691] ACPI: acpi_idle registered with cpuidle [ 0.675984] Monitor-Mwait will be used to enter C-1 state [ 0.676013] Monitor-Mwait will be used to enter C-2 state [ 0.676038] Monitor-Mwait will be used to enter C-3 state [ 0.676045] Marking TSC unstable due to TSC halts in idle [ 0.676105] Switching to clocksource hpet [ 0.812074] thermal LNXTHERM:01: registered as thermal_zone0 [ 0.812086] ACPI: Thermal Zone [TZ01] (40 C) [ 0.812214] ERST: Table is not found! [ 0.812269] isapnp: Scanning for PnP cards... [ 0.814264] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.816216] brd: module loaded [ 0.816935] loop: module loaded [ 0.817189] ata_piix 0000:00:1f.1: version 2.13 [ 0.817207] ata_piix 0000:00:1f.1: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 0.817260] ata_piix 0000:00:1f.1: setting latency timer to 64 [ 0.817364] scsi0 : ata_piix [ 0.817477] scsi1 : ata_piix [ 0.818274] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0x50e0 irq 14 [ 0.818278] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x50e8 irq 15 [ 0.818737] Fixed MDIO Bus: probed [ 0.818787] PPP generic driver version 2.4.2 [ 0.818840] tun: Universal TUN/TAP device driver, 1.6 [ 0.818843] tun: (C) 1999-2004 Max Krasnyansky [ 0.818942] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.818970] ehci_hcd 0000:00:1a.7: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.818994] ehci_hcd 0000:00:1a.7: setting latency timer to 64 [ 0.818999] ehci_hcd 0000:00:1a.7: EHCI Host Controller [ 0.819039] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 1 [ 0.819079] ehci_hcd 0000:00:1a.7: debug port 1 [ 0.822963] ehci_hcd 0000:00:1a.7: cache line size of 64 is not supported [ 0.822986] ehci_hcd 0000:00:1a.7: irq 18, io mem 0x98404c00 [ 0.836019] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00 [ 0.836176] hub 1-0:1.0: USB hub found [ 0.836183] hub 1-0:1.0: 4 ports detected [ 0.836289] alloc irq_desc for 23 on node -1 [ 0.836292] alloc kstat_irqs on node -1 [ 0.836301] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.836317] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 0.836322] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 0.836370] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 2 [ 0.836404] ehci_hcd 0000:00:1d.7: debug port 1 [ 0.840299] ehci_hcd 0000:00:1d.7: cache line size of 64 is not supported [ 0.840319] ehci_hcd 0000:00:1d.7: irq 23, io mem 0x98404800 [ 0.856018] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 0.856151] hub 2-0:1.0: USB hub found [ 0.856157] hub 2-0:1.0: 6 ports detected [ 0.856264] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.856286] uhci_hcd: USB Universal Host Controller Interface driver [ 0.856325] uhci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.856334] uhci_hcd 0000:00:1a.0: setting latency timer to 64 [ 0.856339] uhci_hcd 0000:00:1a.0: UHCI Host Controller [ 0.856383] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 3 [ 0.856427] uhci_hcd 0000:00:1a.0: irq 16, io base 0x000050c0 [ 0.856585] hub 3-0:1.0: USB hub found [ 0.856591] hub 3-0:1.0: 2 ports detected [ 0.856677] alloc irq_desc for 21 on node -1 [ 0.856680] alloc kstat_irqs on node -1 [ 0.856687] uhci_hcd 0000:00:1a.1: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 0.856696] uhci_hcd 0000:00:1a.1: setting latency timer to 64 [ 0.856700] uhci_hcd 0000:00:1a.1: UHCI Host Controller [ 0.856749] uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 4 [ 0.856793] uhci_hcd 0000:00:1a.1: irq 21, io base 0x000050a0 [ 0.856948] hub 4-0:1.0: USB hub found [ 0.856954] hub 4-0:1.0: 2 ports detected [ 0.857042] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.857051] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 0.857055] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 0.857096] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 5 [ 0.857129] uhci_hcd 0000:00:1d.0: irq 23, io base 0x00005080 [ 0.857283] hub 5-0:1.0: USB hub found [ 0.857288] hub 5-0:1.0: 2 ports detected [ 0.857371] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.857379] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 0.857385] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 0.857428] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 6 [ 0.857472] uhci_hcd 0000:00:1d.1: irq 19, io base 0x00005060 [ 0.857627] hub 6-0:1.0: USB hub found [ 0.857633] hub 6-0:1.0: 2 ports detected [ 0.857717] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.857725] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 0.857730] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 0.857775] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 7 [ 0.857808] uhci_hcd 0000:00:1d.2: irq 18, io base 0x00005040 [ 0.857954] hub 7-0:1.0: USB hub found [ 0.857960] hub 7-0:1.0: 2 ports detected [ 0.858134] PNP: PS/2 Controller [PNP0303:KBC0,PNP0f13:MSE0] at 0x60,0x64 irq 1,12 [ 0.899751] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.899760] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.899841] mice: PS/2 mouse device common for all mice [ 0.900026] rtc_cmos 00:03: RTC can wake from S4 [ 0.900077] rtc_cmos 00:03: rtc core: registered rtc_cmos as rtc0 [ 0.900114] rtc0: alarms up to one month, 242 bytes nvram, hpet irqs [ 0.900274] device-mapper: uevent: version 1.0.3 [ 0.900415] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 0.901859] device-mapper: multipath: version 1.1.1 loaded [ 0.901863] device-mapper: multipath round-robin: version 1.0.0 loaded [ 0.902017] EISA: Probing bus 0 at eisa.0 [ 0.902020] EISA: Cannot allocate resource for mainboard [ 0.902023] Cannot allocate resource for EISA slot 1 [ 0.902026] Cannot allocate resource for EISA slot 2 [ 0.902029] Cannot allocate resource for EISA slot 3 [ 0.902031] Cannot allocate resource for EISA slot 4 [ 0.902034] Cannot allocate resource for EISA slot 5 [ 0.902036] Cannot allocate resource for EISA slot 6 [ 0.902039] Cannot allocate resource for EISA slot 7 [ 0.902041] Cannot allocate resource for EISA slot 8 [ 0.902044] EISA: Detected 0 cards. [ 0.902226] cpuidle: using governor ladder [ 0.902370] cpuidle: using governor menu [ 0.902818] TCP cubic registered [ 0.902990] NET: Registered protocol family 10 [ 0.903477] lo: Disabled Privacy Extensions [ 0.903805] NET: Registered protocol family 17 [ 0.904414] Using IPI No-Shortcut mode [ 0.904521] PM: Resume from disk failed. [ 0.904537] registered taskstats version 1 [ 0.905043] Magic number: 2:415:634 [ 0.905157] rtc_cmos 00:03: setting system clock to 2010-07-06 13:37:32 UTC (1278423452) [ 0.905161] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.905163] EDD information not available. [ 0.923476] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4 [ 0.995858] ata1.00: ATAPI: HL-DT-ST DVDRAM GSA-T20N, WP03, max UDMA/33 [ 1.012323] ata1.00: configured for UDMA/33 [ 1.166632] isapnp: No Plug & Play device found [ 1.170231] scsi 0:0:0:0: CD-ROM HL-DT-ST DVDRAM GSA-T20N WP03 PQ: 0 ANSI: 5 [ 1.181243] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 1.181247] Uniform CD-ROM driver Revision: 3.20 [ 1.181385] sr 0:0:0:0: Attached scsi CD-ROM sr0 [ 1.181459] sr 0:0:0:0: Attached scsi generic sg0 type 5 [ 1.181558] Freeing unused kernel memory: 684k freed [ 1.182033] Write protecting the kernel text: 4948k [ 1.182105] Write protecting the kernel read-only data: 2020k [ 1.223979] udev: starting version 151 [ 1.224092] usb 2-4: new high speed USB device using ehci_hcd and address 3 [ 1.354048] tg3.c:v3.110 (April 9, 2010) [ 1.354078] tg3 0000:05:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 1.354092] tg3 0000:05:00.0: setting latency timer to 64 [ 1.419677] sdhci: Secure Digital Host Controller Interface driver [ 1.419681] sdhci: Copyright(c) Pierre Ossman [ 1.436407] ahci 0000:00:1f.2: version 3.0 [ 1.436434] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.436500] alloc irq_desc for 44 on node -1 [ 1.436503] alloc kstat_irqs on node -1 [ 1.436519] ahci 0000:00:1f.2: irq 44 for MSI/MSI-X [ 1.436622] ahci 0000:00:1f.2: AHCI 0001.0100 32 slots 3 ports 3 Gbps 0x7 impl SATA mode [ 1.436627] ahci 0000:00:1f.2: flags: 64bit ncq sntf pm led clo pio slum part ccc ems [ 1.436635] ahci 0000:00:1f.2: setting latency timer to 64 [ 1.449509] alloc irq_desc for 20 on node -1 [ 1.449513] alloc kstat_irqs on node -1 [ 1.449523] firewire_ohci 0000:07:00.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20 [ 1.449532] firewire_ohci 0000:07:00.0: setting latency timer to 64 [ 1.495613] scsi2 : ahci [ 1.497436] scsi3 : ahci [ 1.497970] scsi4 : ahci [ 1.498239] ata3: SATA max UDMA/133 abar m2048@0x98404000 port 0x98404100 irq 44 [ 1.498245] ata4: SATA max UDMA/133 abar m2048@0x98404000 port 0x98404180 irq 44 [ 1.498250] ata5: SATA max UDMA/133 abar m2048@0x98404000 port 0x98404200 irq 44 [ 1.498358] tg3 0000:05:00.0: eth0: Tigon3 [partno(BCM95787m) rev b002] (PCI Express) MAC address 00:1b:38:6c:9d:57 [ 1.498364] tg3 0000:05:00.0: eth0: attached PHY is 5787 (10/100/1000Base-T Ethernet) (WireSpeed[1]) [ 1.498368] tg3 0000:05:00.0: eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1] [ 1.498372] tg3 0000:05:00.0: eth0: dma_rwctrl[76180000] dma_mask[64-bit] [ 1.581035] firewire_ohci: Added fw-ohci device 0000:07:00.0, OHCI v1.10, 4 IR + 4 IT contexts, quirks 0x0 [ 1.581069] sdhci-pci 0000:07:00.1: SDHCI controller found [1180:0822] (rev 22) [ 1.581094] alloc irq_desc for 22 on node -1 [ 1.581097] alloc kstat_irqs on node -1 [ 1.581106] sdhci-pci 0000:07:00.1: PCI INT B -> GSI 22 (level, low) -> IRQ 22 [ 1.582148] sdhci-pci 0000:07:00.1: Will use DMA mode even though HW doesn't fully claim to support it. [ 1.582157] sdhci-pci 0000:07:00.1: setting latency timer to 64 [ 1.583210] Registered led device: mmc0:: [ 1.584270] mmc0: SDHCI controller on PCI [0000:07:00.1] using DMA [ 1.604040] usb 5-1: new low speed USB device using uhci_hcd and address 2 [ 1.817048] ata5: SATA link down (SStatus 0 SControl 300) [ 1.817079] ata4: SATA link down (SStatus 0 SControl 300) [ 1.817108] ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 1.840224] ata3.00: ACPI cmd ef/10:03:00:00:00:a0 (SET FEATURES) filtered out [ 1.883198] ata3.00: ATA-7: WDC WD1600BEVS-22RST0, 04.01G04, max UDMA/133 [ 1.883203] ata3.00: 312581808 sectors, multi 16: LBA48 NCQ (depth 31/32), AA [ 1.884333] ata3.00: ACPI cmd 00/00:00:00:00:00:a0 (NOP) rejected by device (Stat=0x51 Err=0x04) [ 1.884575] ata3.00: configured for UDMA/133 [ 1.900254] scsi 2:0:0:0: Direct-Access ATA WDC WD1600BEVS-2 04.0 PQ: 0 ANSI: 5 [ 1.900482] sd 2:0:0:0: Attached scsi generic sg1 type 0 [ 1.900653] sd 2:0:0:0: [sda] 312581808 512-byte logical blocks: (160 GB/149 GiB) [ 1.900811] sd 2:0:0:0: [sda] Write Protect is off [ 1.900815] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.900878] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.901189] sda: sda1 sda2 sda3 sda4 [ 1.938495] sd 2:0:0:0: [sda] Attached SCSI disk [ 1.945772] usbcore: registered new interface driver hiddev [ 1.964106] input: Logitech USB RECEIVER as /devices/pci0000:00/0000:00:1d.0/usb5/5-1/5-1:1.0/input/input5 [ 1.964249] generic-usb 0003:046D:C50E.0001: input,hidraw0: USB HID v1.11 Mouse [Logitech USB RECEIVER] on usb-0000:00:1d.0-1/input0 [ 1.964277] usbcore: registered new interface driver usbhid [ 1.964280] usbhid: USB HID core driver [ 2.081156] firewire_core: created device fw0: GUID b640134100023f7b, S400 [ 2.156237] ACPI: Battery Slot [BAT0] (battery present) [ 2.393847] EXT4-fs (sda2): INFO: recovery required on readonly filesystem [ 2.393854] EXT4-fs (sda2): write access will be enabled during recovery [ 7.352640] EXT4-fs (sda2): orphan cleanup on readonly fs [ 7.352658] EXT4-fs (sda2): ext4_orphan_cleanup: deleting unreferenced inode 1055677 [ 7.364514] EXT4-fs (sda2): ext4_orphan_cleanup: deleting unreferenced inode 1048689 [ 7.364565] EXT4-fs (sda2): ext4_orphan_cleanup: deleting unreferenced inode 1048687 [ 7.364591] EXT4-fs (sda2): ext4_orphan_cleanup: deleting unreferenced inode 1048599 [ 7.389016] EXT4-fs (sda2): ext4_orphan_cleanup: deleting unreferenced inode 1052993 [ 7.389062] EXT4-fs (sda2): ext4_orphan_cleanup: deleting unreferenced inode 1052994 [ 7.389087] EXT4-fs (sda2): ext4_orphan_cleanup: deleting unreferenced inode 1053920 [ 7.389154] EXT4-fs (sda2): ext4_orphan_cleanup: deleting unreferenced inode 1054713 [ 7.389180] EXT4-fs (sda2): ext4_orphan_cleanup: deleting unreferenced inode 1055692 [ 7.389221] EXT4-fs (sda2): ext4_orphan_cleanup: deleting unreferenced inode 1055694 [ 7.389244] EXT4-fs (sda2): ext4_orphan_cleanup: deleting unreferenced inode 1055696 [ 7.389266] EXT4-fs (sda2): ext4_orphan_cleanup: deleting unreferenced inode 1055699 [ 7.389292] EXT4-fs (sda2): ext4_orphan_cleanup: deleting unreferenced inode 1055701 [ 7.389312] EXT4-fs (sda2): 13 orphan inodes deleted [ 7.389317] EXT4-fs (sda2): recovery complete [ 7.856259] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null) [ 9.732704] Adding 2580476k swap on /dev/sda3. Priority:-1 extents:1 across:2580476k [ 10.263325] udev: starting version 151 [ 10.592636] lirc_dev: IR Remote Control driver registered, major 61 [ 10.594259] BUG: unable to handle kernel NULL pointer dereference at (null) [ 10.594394] IP: [] kfifo_alloc+0x26/0x90 [ 10.594486] *pde = 7dae9067 [ 10.594567] Oops: 0002 [#1] SMP [ 10.594685] last sysfs file: /sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input3/name [ 10.594739] Modules linked in: lirc_ene0100(+) lirc_dev usbhid hid sdhci_pci firewire_ohci ahci sdhci led_class libahci firewire_core crc_itu_t tg3 [ 10.595307] [ 10.595348] Pid: 445, comm: modprobe Not tainted 2.6.35-6-generic #9-Ubuntu Nettiling/Aspire 5720Z [ 10.595401] EIP: 0060:[] EFLAGS: 00010286 CPU: 1 [ 10.595447] EIP is at kfifo_alloc+0x26/0x90 [ 10.595490] EAX: e10ef000 EBX: 00001000 ECX: c01674d2 EDX: c01674d2 [ 10.595537] ESI: 00000000 EDI: f69e9100 EBP: d1631e40 ESP: d1631e38 [ 10.595585] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 10.595631] Process modprobe (pid: 445, ti=d1630000 task=f6990cb0 task.ti=d1630000) [ 10.595679] Stack: [ 10.595718] f6b3f4e0 f6bf7840 d1631e68 f8273dc7 00000020 000080d0 d1631e68 f724ce00 [ 10.596011] <0> fffffff4 f8273fa0 f724ce00 f8274400 d1631e7c c03b7e9e f724ce00 f8274420 [ 10.596371] <0> f8274420 d1631ea0 c0404ead f724ced0 d1631ea0 c040c0f7 00000000 f724ce00 [ 10.596780] Call Trace: [ 10.596837] [] ? ene_probe+0x157/0x30b [lirc_ene0100] [ 10.596899] [] ? pnp_device_probe+0x6e/0xd0 [ 10.596958] [] ? really_probe+0x4d/0x150 [ 10.597017] [] ? pm_runtime_barrier+0x57/0xb0 [ 10.597075] [] ? driver_probe_device+0x3c/0x60 [ 10.597133] [] ? __driver_attach+0x81/0x90 [ 10.597191] [] ? bus_for_each_dev+0x53/0x80 [ 10.597249] [] ? driver_attach+0x1e/0x20 [ 10.597306] [] ? __driver_attach+0x0/0x90 [ 10.597364] [] ? bus_add_driver+0xd5/0x280 [ 10.597386] [] ? pnp_device_remove+0x0/0x40 [ 10.597386] [] ? driver_register+0x6a/0x130 [ 10.597386] [] ? tracepoint_module_notify+0x27/0x30 [ 10.597386] [] ? pnp_register_driver+0x1c/0x20 [ 10.597386] [] ? ene_init+0x38/0x3a [lirc_ene0100] [ 10.597386] [] ? __blocking_notifier_call_chain+0x54/0x70 [ 10.597386] [] ? do_one_initcall+0x31/0x190 [ 10.597386] [] ? ene_init+0x0/0x3a [lirc_ene0100] [ 10.597386] [] ? sys_init_module+0x9b/0x1e0 [ 10.597386] [] ? sys_close+0x75/0xc0 [ 10.597386] [] ? syscall_call+0x7/0xb [ 10.597386] Code: 89 3a eb d3 90 55 89 e5 56 53 0f 1f 44 00 00 89 d3 89 c6 85 db 89 ca 8d 4b ff 74 31 85 d9 75 25 89 d8 e8 de 64 0a 00 85 c0 74 38 <89> 06 31 c0 89 5e 04 c7 46 0c 00 00 00 00 c7 46 08 00 00 00 00 [ 10.597386] EIP: [] kfifo_alloc+0x26/0x90 SS:ESP 0068:d1631e38 [ 10.597386] CR2: 0000000000000000 [ 10.600659] ---[ end trace c562579174d65605 ]--- [ 10.966533] lp: driver loaded but no devices found [ 11.115059] coretemp coretemp.0: TjMax is assumed as 100 C! [ 11.115179] coretemp coretemp.1: TjMax is assumed as 100 C! [ 11.250926] Linux agpgart interface v0.103 [ 11.306040] cfg80211: Calling CRDA to update world regulatory domain [ 11.562782] agpgart-intel 0000:00:00.0: Intel 965GM Chipset [ 11.563754] agpgart-intel 0000:00:00.0: detected 7676K stolen memory [ 11.570309] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0x80000000 [ 11.858973] ath5k 0000:06:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 11.859059] ath5k 0000:06:00.0: setting latency timer to 64 [ 11.859387] ath5k 0000:06:00.0: registered as 'phy0' [ 12.364803] ath: EEPROM regdomain: 0x65 [ 12.364864] ath: EEPROM indicates we should expect a direct regpair map [ 12.364926] ath: Country alpha2 being used: 00 [ 12.364983] ath: Regpair used: 0x65 [ 12.610148] cfg80211: World regulatory domain updated: [ 12.610211] (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 12.610284] (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 12.610345] (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 12.610406] (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 12.610465] (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 12.610526] (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 12.790617] [drm] Initialized drm 1.1.0 20060810 [ 13.002999] Linux video capture interface: v2.00 [ 13.021080] uvcvideo: Found UVC 1.00 device Acer CrystalEye webcam (064e:a101) [ 13.023855] input: Acer CrystalEye webcam as /devices/pci0000:00/0000:00:1d.7/usb2/2-4/2-4:1.0/input/input6 [ 13.024040] usbcore: registered new interface driver uvcvideo [ 13.024102] USB Video Class driver (v0.1.0) [ 13.034101] phy0: Selected rate control algorithm 'minstrel' [ 13.035054] Registered led device: ath5k-phy0::rx [ 13.035143] Registered led device: ath5k-phy0::tx [ 13.035202] ath5k phy0: Atheros AR2425 chip found (MAC: 0xe2, PHY: 0x70) [ 13.104611] type=1400 audit(1278437864.694:2): operation="profile_load" pid=736 name="/sbin/dhclient3" pid=736 comm="apparmor_parser" [ 13.105560] type=1400 audit(1278437864.698:3): operation="profile_load" pid=736 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=736 comm="apparmor_parser" [ 13.106123] type=1400 audit(1278437864.698:4): operation="profile_load" pid=736 name="/usr/lib/connman/scripts/dhclient-script" pid=736 comm="apparmor_parser" [ 13.272337] input: PS/2 Mouse as /devices/platform/i8042/serio1/input/input7 [ 13.306737] input: AlpsPS/2 ALPS GlidePoint as /devices/platform/i8042/serio1/input/input8 [ 13.332348] r852 0000:07:00.3: PCI INT B -> GSI 22 (level, low) -> IRQ 22 [ 13.332425] r852 0000:07:00.3: setting latency timer to 64 [ 13.332592] r852: driver loaded succesfully [ 13.475386] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 13.475458] i915 0000:00:02.0: setting latency timer to 64 [ 13.516576] alloc irq_desc for 45 on node -1 [ 13.516638] alloc kstat_irqs on node -1 [ 13.516705] i915 0000:00:02.0: irq 45 for MSI/MSI-X [ 13.516776] [drm] set up 7M of stolen space [ 13.623190] [drm] initialized overlay support [ 13.932053] Skipping EDID probe due to cached edid [ 14.350216] Console: switching to colour frame buffer device 160x50 [ 14.355203] fb0: inteldrmfb frame buffer device [ 14.355206] drm: registered panic notifier [ 14.355295] Slow work thread pool: Starting up [ 14.355452] Slow work thread pool: Ready [ 14.705151] acpi device:3a: registered as cooling_device2 [ 14.705588] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:01/input/input9 [ 14.705754] ACPI: Video Device [OVGA] (multi-head: yes rom: no post: no) [ 14.705854] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 14.706507] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 14.706661] alloc irq_desc for 46 on node -1 [ 14.706704] alloc kstat_irqs on node -1 [ 14.706756] HDA Intel 0000:00:1b.0: irq 46 for MSI/MSI-X [ 14.706853] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 14.751183] vga16fb: initializing [ 14.751228] vga16fb: mapped to 0xc00a0000 [ 14.751580] fb1: VGA16 VGA frame buffer device [ 16.312096] Skipping EDID probe due to cached edid [ 16.351381] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro [ 17.520331] EXT4-fs (sda4): mounted filesystem with ordered data mode. Opts: (null) [ 18.855408] type=1400 audit(1278437870.446:5): operation="profile_load" pid=951 name="/usr/share/gdm/guest-session/Xsession" pid=951 comm="apparmor_parser" [ 18.858107] type=1400 audit(1278437870.446:6): operation="profile_replace" pid=954 name="/sbin/dhclient3" pid=954 comm="apparmor_parser" [ 18.858988] type=1400 audit(1278437870.446:7): operation="profile_replace" pid=954 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=954 comm="apparmor_parser" [ 18.859468] type=1400 audit(1278437870.446:8): operation="profile_replace" pid=954 name="/usr/lib/connman/scripts/dhclient-script" pid=954 comm="apparmor_parser" [ 18.910088] type=1400 audit(1278437870.502:9): operation="profile_load" pid=955 name="/usr/bin/evince" pid=955 comm="apparmor_parser" [ 18.921432] type=1400 audit(1278437870.514:10): operation="profile_load" pid=955 name="/usr/bin/evince-previewer" pid=955 comm="apparmor_parser" [ 18.928500] type=1400 audit(1278437870.518:11): operation="profile_load" pid=955 name="/usr/bin/evince-thumbnailer" pid=955 comm="apparmor_parser" [ 19.002918] type=1400 audit(1278437870.594:12): operation="profile_load" pid=963 name="/usr/lib/cups/backend/cups-pdf" pid=963 comm="apparmor_parser" [ 19.003951] type=1400 audit(1278437870.594:13): operation="profile_load" pid=963 name="/usr/sbin/cupsd" pid=963 comm="apparmor_parser" [ 19.148234] type=1400 audit(1278437870.738:14): operation="profile_load" pid=964 name="/usr/sbin/tcpdump" pid=964 comm="apparmor_parser" [ 20.468824] alloc irq_desc for 47 on node -1 [ 20.468829] alloc kstat_irqs on node -1 [ 20.468851] tg3 0000:05:00.0: irq 47 for MSI/MSI-X [ 20.636748] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 20.667390] ADDRCONF(NETDEV_UP): wlan0: link is not ready Bug: 604929 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-7-generic (buildd@rothera) (gcc version 4.4.4 (Ubuntu 4.4.4-6ubuntu1) ) #12-Ubuntu SMP Fri Jul 9 21:09:19 UTC 2010 (Ubuntu 2.6.35-7.12-generic 2.6.35-rc4) [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009f800 (usable) [ 0.000000] BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 000000003f6d0000 (usable) [ 0.000000] BIOS-e820: 000000003f6d0000 - 000000003f6e2000 (ACPI data) [ 0.000000] BIOS-e820: 000000003f6e2000 - 000000003f6e3000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000003f6e3000 - 0000000040000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved) [ 0.000000] BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved) [ 0.000000] BIOS-e820: 00000000fed14000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1c000 - 00000000fed90000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ff000000 - 0000000100000000 (reserved) [ 0.000000] Notice: NX (Execute Disable) protection cannot be enabled: non-PAE kernel! [ 0.000000] DMI present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] last_pfn = 0x3f6d0 max_arch_pfn = 0x100000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-CFFFF write-protect [ 0.000000] D0000-DFFFF uncachable [ 0.000000] E0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask 0C0000000 write-back [ 0.000000] 1 base 03F700000 mask 0FFF00000 uncachable [ 0.000000] 2 base 03F800000 mask 0FF800000 uncachable [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820 update range: 0000000000002000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000001000 (reserved) [ 0.000000] modified: 0000000000001000 - 0000000000002000 (usable) [ 0.000000] modified: 0000000000002000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009f800 (usable) [ 0.000000] modified: 000000000009f800 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 000000003f6d0000 (usable) [ 0.000000] modified: 000000003f6d0000 - 000000003f6e2000 (ACPI data) [ 0.000000] modified: 000000003f6e2000 - 000000003f6e3000 (ACPI NVS) [ 0.000000] modified: 000000003f6e3000 - 0000000040000000 (reserved) [ 0.000000] modified: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fec10000 (reserved) [ 0.000000] modified: 00000000fed00000 - 00000000fed00400 (reserved) [ 0.000000] modified: 00000000fed14000 - 00000000fed1a000 (reserved) [ 0.000000] modified: 00000000fed1c000 - 00000000fed90000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000ff000000 - 0000000100000000 (reserved) [ 0.000000] initial memory mapped : 0 - 00c00000 [ 0.000000] found SMP MP-table at [c00f7d60] f7d60 [ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000 [ 0.000000] 0000000000 - 0000400000 page 4k [ 0.000000] 0000400000 - 0037400000 page 2M [ 0.000000] 0037400000 - 00377fe000 page 4k [ 0.000000] kernel direct mapping tables up to 377fe000 @ 15000-1a000 [ 0.000000] RAMDISK: 2ef2f000 - 2f95c000 [ 0.000000] ACPI: RSDP 000f7d30 00024 (v02 PTLTD ) [ 0.000000] ACPI: XSDT 3f6db28f 00084 (v01 DELL CL09 06040000 LTP 00000000) [ 0.000000] ACPI: FACP 3f6e1bd2 000F4 (v03 INTEL CALISTGA 06040000 ALAN 00000001) [ 0.000000] ACPI: DSDT 3f6dce77 04CE7 (v01 INTEL CALISTGA 06040000 INTL 20050624) [ 0.000000] ACPI: FACS 3f6e2fc0 00040 [ 0.000000] ACPI: APIC 3f6e1cc6 00068 (v01 INTEL CALISTGA 06040000 LOHR 0000005A) [ 0.000000] ACPI: HPET 3f6e1d2e 00038 (v01 INTEL CALISTGA 06040000 LOHR 0000005A) [ 0.000000] ACPI: MCFG 3f6e1d66 0003C (v01 INTEL CALISTGA 06040000 LOHR 0000005A) [ 0.000000] ACPI: TCPA 3f6e1da2 00032 (v01 PTLTD CALISTGA 06040000 PTL 00000001) [ 0.000000] ACPI: TMOR 3f6e1dd4 00026 (v01 PTLTD 06040000 PTL 00000003) [ 0.000000] ACPI: APIC 3f6e1dfa 00068 (v01 PTLTD ? APIC 06040000 LTP 00000000) [ 0.000000] ACPI: BOOT 3f6e1e62 00028 (v01 PTLTD $SBFTBL$ 06040000 LTP 00000001) [ 0.000000] ACPI: SLIC 3f6e1e8a 00176 (v01 DELL CL09 06040000 LTP 00000000) [ 0.000000] ACPI: SSDT 3f6dc828 0064F (v01 SataRe SataPri 00001000 INTL 20050624) [ 0.000000] ACPI: SSDT 3f6dc18c 0069C (v01 SataRe SataSec 00001000 INTL 20050624) [ 0.000000] ACPI: SSDT 3f6db313 004F6 (v02 PmRef CpuPm 00003000 INTL 20050624) [ 0.000000] ACPI: BIOS bug: multiple APIC/MADT found, using 0 [ 0.000000] ACPI: If "acpi_apic_instance=2" works better, notify linux-acpi@vger.kernel.org [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] 126MB HIGHMEM available. [ 0.000000] 887MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 377fe000 [ 0.000000] low ram: 0 - 377fe000 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000001 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x000377fe [ 0.000000] HighMem 0x000377fe -> 0x0003f6d0 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[3] active PFN ranges [ 0.000000] 0: 0x00000001 -> 0x00000002 [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x0003f6d0 [ 0.000000] On node 0 totalpages: 259680 [ 0.000000] free_area_init_node: node 0, pgdat c0813880, node_mem_map c1001020 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3952 pages, LIFO batch:0 [ 0.000000] Normal zone: 1744 pages used for memmap [ 0.000000] Normal zone: 221486 pages, LIFO batch:31 [ 0.000000] HighMem zone: 254 pages used for memmap [ 0.000000] HighMem zone: 32212 pages, LIFO batch:7 [ 0.000000] Using APIC driver default [ 0.000000] ACPI: PM-Timer IO Port: 0x1008 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [16000 - 167ff] [ 0.000000] PM: Registered nosave memory: 0000000000002000 - 0000000000010000 [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at 40000000 (gap: 40000000:a0000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:2 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 14 pages/cpu @c1800000 s36352 r0 d20992 u2097152 [ 0.000000] pcpu-alloc: s36352 r0 d20992 u2097152 alloc=1*4194304 [ 0.000000] pcpu-alloc: [0] 0 1 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 257650 [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-7-generic root=UUID=10dbafb4-5a21-4665-88d4-2924132ca353 ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Enabling fast FPU save and restore... done. [ 0.000000] Enabling unmasked SIMD FPU exception support... done. [ 0.000000] Initializing CPU#0 [ 0.000000] allocated 5195820 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Subtract (54 early reservations) [ 0.000000] #1 [0000001000 - 0000002000] EX TRAMPOLINE [ 0.000000] #2 [0000100000 - 00009b491c] TEXT DATA BSS [ 0.000000] #3 [002ef2f000 - 002f95c000] RAMDISK [ 0.000000] #4 [00009b5000 - 00009b8124] BRK [ 0.000000] #5 [00000f7d70 - 0000100000] BIOS reserved [ 0.000000] #6 [00000f7d60 - 00000f7d70] MP-table mpf [ 0.000000] #7 [000009f800 - 000009fc71] BIOS reserved [ 0.000000] #8 [000009fdb1 - 00000f7d60] BIOS reserved [ 0.000000] #9 [000009fc71 - 000009fdb1] MP-table mpc [ 0.000000] #10 [0000010000 - 0000011000] TRAMPOLINE [ 0.000000] #11 [0000011000 - 0000015000] ACPI WAKEUP [ 0.000000] #12 [0000015000 - 0000016000] PGTABLE [ 0.000000] #13 [0001000000 - 0001001000] BOOTMEM [ 0.000000] #14 [0001001000 - 00017f1000] BOOTMEM [ 0.000000] #15 [00017f1000 - 00017f1004] BOOTMEM [ 0.000000] #16 [00017f1040 - 00017f1100] BOOTMEM [ 0.000000] #17 [00017f1100 - 00017f1154] BOOTMEM [ 0.000000] #18 [00017f1180 - 00017f4180] BOOTMEM [ 0.000000] #19 [00017f4180 - 00017f418c] BOOTMEM [ 0.000000] #20 [00017f41c0 - 00017f47c0] BOOTMEM [ 0.000000] #21 [00017f47c0 - 00017f47e5] BOOTMEM [ 0.000000] #22 [00017f4800 - 00017f4827] BOOTMEM [ 0.000000] #23 [00017f4840 - 00017f4a1c] BOOTMEM [ 0.000000] #24 [00017f4a40 - 00017f4a80] BOOTMEM [ 0.000000] #25 [00017f4a80 - 00017f4ac0] BOOTMEM [ 0.000000] #26 [00017f4ac0 - 00017f4b00] BOOTMEM [ 0.000000] #27 [00017f4b00 - 00017f4b40] BOOTMEM [ 0.000000] #28 [00017f4b40 - 00017f4b80] BOOTMEM [ 0.000000] #29 [00017f4b80 - 00017f4bc0] BOOTMEM [ 0.000000] #30 [00017f4bc0 - 00017f4c00] BOOTMEM [ 0.000000] #31 [00017f4c00 - 00017f4c40] BOOTMEM [ 0.000000] #32 [00017f4c40 - 00017f4c80] BOOTMEM [ 0.000000] #33 [00017f4c80 - 00017f4cc0] BOOTMEM [ 0.000000] #34 [00017f4cc0 - 00017f4d00] BOOTMEM [ 0.000000] #35 [00017f4d00 - 00017f4d40] BOOTMEM [ 0.000000] #36 [00017f4d40 - 00017f4d80] BOOTMEM [ 0.000000] #37 [00017f4d80 - 00017f4dc0] BOOTMEM [ 0.000000] #38 [00017f4dc0 - 00017f4dd0] BOOTMEM [ 0.000000] #39 [00017f4e00 - 00017f4e10] BOOTMEM [ 0.000000] #40 [00017f4e40 - 00017f4ea9] BOOTMEM [ 0.000000] #41 [00017f4ec0 - 00017f4f29] BOOTMEM [ 0.000000] #42 [0001800000 - 000180e000] BOOTMEM [ 0.000000] #43 [0001a00000 - 0001a0e000] BOOTMEM [ 0.000000] #44 [00017f6f40 - 00017f6f44] BOOTMEM [ 0.000000] #45 [00017f6f80 - 00017f6f84] BOOTMEM [ 0.000000] #46 [00017f6fc0 - 00017f6fc8] BOOTMEM [ 0.000000] #47 [00017f7000 - 00017f7008] BOOTMEM [ 0.000000] #48 [00017f7040 - 00017f70e8] BOOTMEM [ 0.000000] #49 [00017f7100 - 00017f7168] BOOTMEM [ 0.000000] #50 [00017f7180 - 00017fb180] BOOTMEM [ 0.000000] #51 [000180e000 - 000188e000] BOOTMEM [ 0.000000] #52 [000188e000 - 00018ce000] BOOTMEM [ 0.000000] #53 [0001a0e000 - 0001f0282c] BOOTMEM [ 0.000000] Initializing HighMem for node 0 (000377fe:0003f6d0) [ 0.000000] Memory: 1005212k/1039168k available (4942k kernel code, 33508k reserved, 2401k data, 684k init, 129864k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff15000 - 0xfffff000 ( 936 kB) [ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB) [ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) [ 0.000000] .init : 0xc082d000 - 0xc08d8000 ( 684 kB) [ 0.000000] .data : 0xc05d3b52 - 0xc082c168 (2401 kB) [ 0.000000] .text : 0xc0100000 - 0xc05d3b52 (4942 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=13, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:2304 nr_irqs:512 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1595.998 MHz processor. [ 0.004009] Calibrating delay loop (skipped), value calculated using timer frequency.. 3191.99 BogoMIPS (lpj=6383992) [ 0.004021] pid_max: default: 32768 minimum: 301 [ 0.004064] Security Framework initialized [ 0.004102] AppArmor: AppArmor initialized [ 0.004107] Yama: becoming mindful. [ 0.004229] Mount-cache hash table entries: 512 [ 0.008228] Initializing cgroup subsys ns [ 0.008238] Initializing cgroup subsys cpuacct [ 0.008249] Initializing cgroup subsys memory [ 0.008268] Initializing cgroup subsys devices [ 0.008274] Initializing cgroup subsys freezer [ 0.008280] Initializing cgroup subsys net_cls [ 0.008331] CPU: Physical Processor ID: 0 [ 0.008336] CPU: Processor Core ID: 0 [ 0.008342] mce: CPU supports 5 MCE banks [ 0.008356] CPU0: Thermal monitoring enabled (TM1) [ 0.008364] using mwait in idle threads. [ 0.008377] Performance Events: PEBS fmt0+, Atom events, Intel PMU driver. [ 0.008397] ... version: 3 [ 0.008401] ... bit width: 40 [ 0.008406] ... generic registers: 2 [ 0.008411] ... value mask: 000000ffffffffff [ 0.008417] ... max period: 000000007fffffff [ 0.008422] ... fixed-purpose events: 3 [ 0.008426] ... event mask: 0000000700000003 [ 0.013127] ACPI: Core revision 20100428 [ 0.028019] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.028031] ftrace: allocating 21734 entries in 43 pages [ 0.032105] Enabling APIC mode: Flat. Using 1 I/O APICs [ 0.032522] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.074525] CPU0: Intel(R) Atom(TM) CPU N270 @ 1.60GHz stepping 02 [ 0.076000] Booting Node 0, Processors #1 Ok. [ 0.008000] Initializing CPU#1 [ 0.164030] Brought up 2 CPUs [ 0.164040] Total of 2 processors activated (6383.91 BogoMIPS). [ 0.164408] devtmpfs: initialized [ 0.166506] regulator: core version 0.5 [ 0.166555] Time: 8:33:30 Date: 07/13/10 [ 0.166650] NET: Registered protocol family 16 [ 0.168147] Trying to unpack rootfs image as initramfs... [ 0.168405] EISA bus registered [ 0.168431] ACPI: bus type pci registered [ 0.168641] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.168653] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.168660] PCI: Using MMCONFIG for extended config space [ 0.168666] PCI: Using configuration type 1 for base access [ 0.172798] bio: create slab at 0 [ 0.176903] ACPI: EC: Look up EC in DSDT [ 0.184239] ACPI: BIOS _OSI(Linux) query ignored [ 0.187377] ACPI: SSDT 3f6dbe73 00245 (v02 PmRef Cpu0Ist 00003000 INTL 20050624) [ 0.188548] ACPI: Dynamic OEM Table Load: [ 0.188561] ACPI: SSDT (null) 00245 (v02 PmRef Cpu0Ist 00003000 INTL 20050624) [ 0.189315] ACPI: SSDT 3f6db809 005E5 (v02 PmRef Cpu0Cst 00003001 INTL 20050624) [ 0.190399] ACPI: Dynamic OEM Table Load: [ 0.190411] ACPI: SSDT (null) 005E5 (v02 PmRef Cpu0Cst 00003001 INTL 20050624) [ 0.191587] ACPI: SSDT 3f6dc0b8 000D4 (v02 PmRef Cpu1Ist 00003000 INTL 20050624) [ 0.192717] ACPI: Dynamic OEM Table Load: [ 0.192729] ACPI: SSDT (null) 000D4 (v02 PmRef Cpu1Ist 00003000 INTL 20050624) [ 0.193150] ACPI: SSDT 3f6dbdee 00085 (v02 PmRef Cpu1Cst 00003000 INTL 20050624) [ 0.194241] ACPI: Dynamic OEM Table Load: [ 0.194252] ACPI: SSDT (null) 00085 (v02 PmRef Cpu1Cst 00003000 INTL 20050624) [ 0.198598] ACPI: Interpreter enabled [ 0.198598] ACPI: (supports S0 S3 S4 S5) [ 0.198598] ACPI: Using IOAPIC for interrupt routing [ 0.255028] ACPI: EC: GPE = 0x19, I/O: command/status = 0x66, data = 0x62 [ 0.255961] ACPI: No dock devices found. [ 0.255974] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.257437] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.260199] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 0.260212] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 0.260222] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.260233] pci_root PNP0A08:00: host bridge window [mem 0x000d0000-0x000d3fff] [ 0.260242] pci_root PNP0A08:00: host bridge window [mem 0x000d4000-0x000d7fff] [ 0.260252] pci_root PNP0A08:00: host bridge window [mem 0x000d8000-0x000dbfff] [ 0.260261] pci_root PNP0A08:00: host bridge window [mem 0x000dc000-0x000dffff] [ 0.260272] pci_root PNP0A08:00: host bridge window [mem 0x40000000-0xfebfffff] [ 0.260391] pci 0000:00:02.0: reg 10: [mem 0xf0000000-0xf007ffff] [ 0.260404] pci 0000:00:02.0: reg 14: [io 0x1800-0x1807] [ 0.260416] pci 0000:00:02.0: reg 18: [mem 0xd0000000-0xdfffffff pref] [ 0.260429] pci 0000:00:02.0: reg 1c: [mem 0xf0200000-0xf023ffff] [ 0.260498] pci 0000:00:02.1: reg 10: [mem 0xf0080000-0xf00fffff] [ 0.260664] pci 0000:00:1b.0: reg 10: [mem 0xf0440000-0xf0443fff 64bit] [ 0.260761] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.260775] pci 0000:00:1b.0: PME# disabled [ 0.260926] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.260938] pci 0000:00:1c.0: PME# disabled [ 0.261085] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 0.261097] pci 0000:00:1c.1: PME# disabled [ 0.261243] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 0.261254] pci 0000:00:1c.2: PME# disabled [ 0.261356] pci 0000:00:1d.0: reg 20: [io 0x1820-0x183f] [ 0.261456] pci 0000:00:1d.1: reg 20: [io 0x1840-0x185f] [ 0.261555] pci 0000:00:1d.2: reg 20: [io 0x1860-0x187f] [ 0.261660] pci 0000:00:1d.3: reg 20: [io 0x1880-0x189f] [ 0.261759] pci 0000:00:1d.7: reg 10: [mem 0xf0444000-0xf04443ff] [ 0.261850] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.261861] pci 0000:00:1d.7: PME# disabled [ 0.262089] pci 0000:00:1f.0: quirk: [io 0x1000-0x107f] claimed by ICH6 ACPI/GPIO/TCO [ 0.262102] pci 0000:00:1f.0: quirk: [io 0x1180-0x11bf] claimed by ICH6 GPIO [ 0.262113] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 1 PIO at 0680 (mask 007f) [ 0.262124] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 2 PIO at ff2c (mask 007f) [ 0.262138] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 4 PIO at 0068 (mask 0007) [ 0.262227] pci 0000:00:1f.2: reg 10: [io 0x0000-0x0007] [ 0.262242] pci 0000:00:1f.2: reg 14: [io 0x0000-0x0003] [ 0.262257] pci 0000:00:1f.2: reg 18: [io 0x0000-0x0007] [ 0.262273] pci 0000:00:1f.2: reg 1c: [io 0x0000-0x0003] [ 0.262288] pci 0000:00:1f.2: reg 20: [io 0x1810-0x181f] [ 0.262303] pci 0000:00:1f.2: reg 24: [mem 0x00000000-0x000003ff] [ 0.262349] pci 0000:00:1f.2: PME# supported from D3hot [ 0.262360] pci 0000:00:1f.2: PME# disabled [ 0.262440] pci 0000:00:1f.3: reg 20: [io 0x18c0-0x18df] [ 0.262581] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.262594] pci 0000:00:1c.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.262607] pci 0000:00:1c.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.262623] pci 0000:00:1c.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.263034] pci 0000:03:00.0: reg 10: [mem 0xf0100000-0xf0103fff 64bit] [ 0.263278] pci 0000:03:00.0: supports D1 D2 [ 0.263287] pci 0000:03:00.0: PME# supported from D0 D3hot D3cold [ 0.263306] pci 0000:03:00.0: PME# disabled [ 0.263514] pci 0000:00:1c.1: PCI bridge to [bus 03-03] [ 0.263526] pci 0000:00:1c.1: bridge window [io 0xf000-0x0000] (disabled) [ 0.263540] pci 0000:00:1c.1: bridge window [mem 0xf0100000-0xf01fffff] [ 0.263556] pci 0000:00:1c.1: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.263774] pci 0000:04:00.0: reg 10: [io 0x2000-0x20ff] [ 0.263871] pci 0000:04:00.0: reg 18: [mem 0xf0510000-0xf0510fff 64bit pref] [ 0.263946] pci 0000:04:00.0: reg 20: [mem 0xf0500000-0xf050ffff 64bit pref] [ 0.264010] pci 0000:04:00.0: reg 30: [mem 0x00000000-0x0001ffff pref] [ 0.264193] pci 0000:04:00.0: supports D1 D2 [ 0.264201] pci 0000:04:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.264234] pci 0000:04:00.0: PME# disabled [ 0.264439] pci 0000:00:1c.2: PCI bridge to [bus 04-04] [ 0.264452] pci 0000:00:1c.2: bridge window [io 0x2000-0x2fff] [ 0.264464] pci 0000:00:1c.2: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.264481] pci 0000:00:1c.2: bridge window [mem 0xf0500000-0xf05fffff 64bit pref] [ 0.264601] pci 0000:00:1e.0: PCI bridge to [bus 05-05] (subtractive decode) [ 0.264613] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.264626] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.264642] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.264652] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.264661] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.264671] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.264681] pci 0000:00:1e.0: bridge window [mem 0x000d0000-0x000d3fff] (subtractive decode) [ 0.264690] pci 0000:00:1e.0: bridge window [mem 0x000d4000-0x000d7fff] (subtractive decode) [ 0.264700] pci 0000:00:1e.0: bridge window [mem 0x000d8000-0x000dbfff] (subtractive decode) [ 0.264711] pci 0000:00:1e.0: bridge window [mem 0x000dc000-0x000dffff] (subtractive decode) [ 0.264722] pci 0000:00:1e.0: bridge window [mem 0x40000000-0xfebfffff] (subtractive decode) [ 0.264769] pci_bus 0000:00: on NUMA node 0 [ 0.264793] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.265413] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP01._PRT] [ 0.265743] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP02._PRT] [ 0.265989] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP03._PRT] [ 0.266339] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCIB._PRT] [ 0.289255] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 5 6 *7 10 12 14 15) [ 0.289577] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 7 *11 12 14 15) [ 0.289865] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 7 10 12 14 15) *11 [ 0.290147] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.290443] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled. [ 0.290739] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 11 12 14 15) *0, disabled. [ 0.291024] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 7 *10 12 14 15) [ 0.291332] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 *5 6 7 11 12 14 15) [ 0.291486] HEST: Table is not found! [ 0.291734] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 0.291767] vgaarb: loaded [ 0.292417] SCSI subsystem initialized [ 0.292644] libata version 3.00 loaded. [ 0.292859] usbcore: registered new interface driver usbfs [ 0.292922] usbcore: registered new interface driver hub [ 0.293017] usbcore: registered new device driver usb [ 0.293545] ACPI: WMI: Mapper loaded [ 0.293552] PCI: Using ACPI for IRQ routing [ 0.293562] PCI: pci_cache_line_size set to 64 bytes [ 0.294112] reserve RAM buffer: 0000000000002000 - 000000000000ffff [ 0.294122] reserve RAM buffer: 000000000009f800 - 000000000009ffff [ 0.294131] reserve RAM buffer: 000000003f6d0000 - 000000003fffffff [ 0.294453] NetLabel: Initializing [ 0.294461] NetLabel: domain hash size = 128 [ 0.294466] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.294504] NetLabel: unlabeled traffic allowed by default [ 0.294621] HPET: 3 timers in total, 0 timers will be used for per-cpu timer [ 0.294637] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 [ 0.294652] hpet0: 3 comparators, 64-bit 14.318180 MHz counter [ 0.304101] Switching to clocksource tsc [ 0.333775] AppArmor: AppArmor Filesystem Enabled [ 0.333822] pnp: PnP ACPI init [ 0.333870] ACPI: bus type pnp registered [ 0.355784] pnp: PnP ACPI: found 11 devices [ 0.355793] ACPI: ACPI bus type pnp unregistered [ 0.355804] PnPBIOS: Disabled by ACPI PNP [ 0.355843] system 00:01: [mem 0xe0000000-0xefffffff] has been reserved [ 0.355854] system 00:01: [mem 0xfed14000-0xfed17fff] has been reserved [ 0.355864] system 00:01: [mem 0xfed18000-0xfed18fff] has been reserved [ 0.355873] system 00:01: [mem 0xfed19000-0xfed19fff] has been reserved [ 0.355884] system 00:01: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.355894] system 00:01: [mem 0xfed20000-0xfed3ffff] has been reserved [ 0.355904] system 00:01: [mem 0xfed40000-0xfed44fff] has been reserved [ 0.355914] system 00:01: [mem 0xfed45000-0xfed8ffff] has been reserved [ 0.355939] system 00:04: [mem 0xfed00000-0xfed003ff] has been reserved [ 0.355965] system 00:06: [io 0x0680-0x069f] has been reserved [ 0.355978] system 00:06: [io 0x0800-0x080f] has been reserved [ 0.355989] system 00:06: [io 0x1000-0x107f] has been reserved [ 0.356000] system 00:06: [io 0x1180-0x11bf] has been reserved [ 0.356009] system 00:06: [io 0x1640-0x164f] has been reserved [ 0.356020] system 00:06: [io 0xfe00-0xfe7f] has been reserved [ 0.356037] system 00:06: [io 0xff00-0xff7f] has been reserved [ 0.356058] system 00:07: [io 0x06a0-0x06af] has been reserved [ 0.356068] system 00:07: [io 0x06b0-0x06ff] has been reserved [ 0.391359] pci 0000:00:1c.0: BAR 14: assigned [mem 0x40000000-0x401fffff] [ 0.391377] pci 0000:00:1c.0: BAR 15: assigned [mem 0x40200000-0x403fffff 64bit pref] [ 0.391393] pci 0000:00:1c.1: BAR 15: assigned [mem 0x40400000-0x405fffff 64bit pref] [ 0.391405] pci 0000:00:1c.2: BAR 14: assigned [mem 0x40600000-0x409fffff] [ 0.391419] pci 0000:00:1c.0: BAR 13: assigned [io 0x3000-0x3fff] [ 0.391431] pci 0000:00:1c.1: BAR 13: assigned [io 0x4000-0x4fff] [ 0.391442] pci 0000:00:1f.2: BAR 5: assigned [mem 0x40a00000-0x40a003ff] [ 0.391458] pci 0000:00:1f.2: BAR 5: set to [mem 0x40a00000-0x40a003ff] (PCI address [0x40a00000-0x40a003ff] [ 0.391469] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.391479] pci 0000:00:1c.0: bridge window [io 0x3000-0x3fff] [ 0.391493] pci 0000:00:1c.0: bridge window [mem 0x40000000-0x401fffff] [ 0.391506] pci 0000:00:1c.0: bridge window [mem 0x40200000-0x403fffff 64bit pref] [ 0.391522] pci 0000:00:1c.1: PCI bridge to [bus 03-03] [ 0.391532] pci 0000:00:1c.1: bridge window [io 0x4000-0x4fff] [ 0.391545] pci 0000:00:1c.1: bridge window [mem 0xf0100000-0xf01fffff] [ 0.391558] pci 0000:00:1c.1: bridge window [mem 0x40400000-0x405fffff 64bit pref] [ 0.391577] pci 0000:04:00.0: BAR 6: assigned [mem 0xf0520000-0xf053ffff pref] [ 0.391586] pci 0000:00:1c.2: PCI bridge to [bus 04-04] [ 0.391596] pci 0000:00:1c.2: bridge window [io 0x2000-0x2fff] [ 0.391609] pci 0000:00:1c.2: bridge window [mem 0x40600000-0x409fffff] [ 0.391622] pci 0000:00:1c.2: bridge window [mem 0xf0500000-0xf05fffff 64bit pref] [ 0.391638] pci 0000:00:1e.0: PCI bridge to [bus 05-05] [ 0.391644] pci 0000:00:1e.0: bridge window [io disabled] [ 0.391656] pci 0000:00:1e.0: bridge window [mem disabled] [ 0.391666] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.391707] alloc irq_desc for 17 on node -1 [ 0.391714] alloc kstat_irqs on node -1 [ 0.391732] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 0.391745] pci 0000:00:1c.0: setting latency timer to 64 [ 0.391767] alloc irq_desc for 16 on node -1 [ 0.391774] alloc kstat_irqs on node -1 [ 0.391786] pci 0000:00:1c.1: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 0.391798] pci 0000:00:1c.1: setting latency timer to 64 [ 0.391819] alloc irq_desc for 18 on node -1 [ 0.391826] alloc kstat_irqs on node -1 [ 0.391837] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.391849] pci 0000:00:1c.2: setting latency timer to 64 [ 0.391867] pci 0000:00:1e.0: setting latency timer to 64 [ 0.391879] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 0.391887] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 0.391896] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.391905] pci_bus 0000:00: resource 7 [mem 0x000d0000-0x000d3fff] [ 0.391913] pci_bus 0000:00: resource 8 [mem 0x000d4000-0x000d7fff] [ 0.391922] pci_bus 0000:00: resource 9 [mem 0x000d8000-0x000dbfff] [ 0.391931] pci_bus 0000:00: resource 10 [mem 0x000dc000-0x000dffff] [ 0.391940] pci_bus 0000:00: resource 11 [mem 0x40000000-0xfebfffff] [ 0.391949] pci_bus 0000:02: resource 0 [io 0x3000-0x3fff] [ 0.391957] pci_bus 0000:02: resource 1 [mem 0x40000000-0x401fffff] [ 0.391966] pci_bus 0000:02: resource 2 [mem 0x40200000-0x403fffff 64bit pref] [ 0.391975] pci_bus 0000:03: resource 0 [io 0x4000-0x4fff] [ 0.391983] pci_bus 0000:03: resource 1 [mem 0xf0100000-0xf01fffff] [ 0.391992] pci_bus 0000:03: resource 2 [mem 0x40400000-0x405fffff 64bit pref] [ 0.392001] pci_bus 0000:04: resource 0 [io 0x2000-0x2fff] [ 0.392010] pci_bus 0000:04: resource 1 [mem 0x40600000-0x409fffff] [ 0.392019] pci_bus 0000:04: resource 2 [mem 0xf0500000-0xf05fffff 64bit pref] [ 0.392028] pci_bus 0000:05: resource 4 [io 0x0000-0x0cf7] [ 0.392037] pci_bus 0000:05: resource 5 [io 0x0d00-0xffff] [ 0.392045] pci_bus 0000:05: resource 6 [mem 0x000a0000-0x000bffff] [ 0.392054] pci_bus 0000:05: resource 7 [mem 0x000d0000-0x000d3fff] [ 0.392062] pci_bus 0000:05: resource 8 [mem 0x000d4000-0x000d7fff] [ 0.392071] pci_bus 0000:05: resource 9 [mem 0x000d8000-0x000dbfff] [ 0.392079] pci_bus 0000:05: resource 10 [mem 0x000dc000-0x000dffff] [ 0.392088] pci_bus 0000:05: resource 11 [mem 0x40000000-0xfebfffff] [ 0.392219] NET: Registered protocol family 2 [ 0.392410] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.393264] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.394386] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.394995] TCP: Hash tables configured (established 131072 bind 65536) [ 0.395007] TCP reno registered [ 0.395022] UDP hash table entries: 512 (order: 2, 16384 bytes) [ 0.395046] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) [ 0.395355] NET: Registered protocol family 1 [ 0.395404] pci 0000:00:02.0: Boot video device [ 0.395807] PCI: CLS 64 bytes, default 64 [ 0.395892] Simple Boot Flag at 0x36 set to 0x1 [ 0.396459] cpufreq-nforce2: No nForce2 chipset. [ 0.396559] Scanning for low memory corruption every 60 seconds [ 0.397005] audit: initializing netlink socket (disabled) [ 0.397033] type=2000 audit(1279010009.392:1): initialized [ 0.421070] highmem bounce pool size: 64 pages [ 0.421088] HugeTLB registered 4 MB page size, pre-allocated 0 pages [ 0.426575] VFS: Disk quotas dquot_6.5.2 [ 0.426785] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 0.428956] fuse init (API version 7.14) [ 0.429284] msgmni has been set to 1709 [ 0.429929] alg: No test for stdrng (krng) [ 0.430142] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.430152] io scheduler noop registered [ 0.430159] io scheduler deadline registered [ 0.430212] io scheduler cfq registered (default) [ 0.430544] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.430623] alloc irq_desc for 40 on node -1 [ 0.430630] alloc kstat_irqs on node -1 [ 0.430654] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 0.430888] pcieport 0000:00:1c.1: setting latency timer to 64 [ 0.430954] alloc irq_desc for 41 on node -1 [ 0.430961] alloc kstat_irqs on node -1 [ 0.430979] pcieport 0000:00:1c.1: irq 41 for MSI/MSI-X [ 0.431221] pcieport 0000:00:1c.2: setting latency timer to 64 [ 0.431288] alloc irq_desc for 42 on node -1 [ 0.431294] alloc kstat_irqs on node -1 [ 0.431313] pcieport 0000:00:1c.2: irq 42 for MSI/MSI-X [ 0.431654] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.431953] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.432580] ACPI: AC Adapter [ACAD] (off-line) [ 0.432862] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input0 [ 0.432983] ACPI: Lid Switch [LID0] [ 0.433134] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1 [ 0.433144] ACPI: Power Button [PWRB] [ 0.433335] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2 [ 0.433344] ACPI: Power Button [PWRF] [ 0.434246] ACPI: acpi_idle registered with cpuidle [ 0.439689] Monitor-Mwait will be used to enter C-1 state [ 0.439806] Monitor-Mwait will be used to enter C-2 state [ 0.439887] Monitor-Mwait will be used to enter C-3 state [ 0.439910] Marking TSC unstable due to TSC halts in idle [ 0.441481] Switching to clocksource hpet [ 0.471458] thermal LNXTHERM:01: registered as thermal_zone0 [ 0.471484] ACPI: Thermal Zone [TZ01] (45 C) [ 0.471843] ERST: Table is not found! [ 0.478299] vesafb: framebuffer at 0xd012c000, mapped to 0xf8080000, using 1216k, total 1216k [ 0.478312] vesafb: mode is 640x480x32, linelength=2560, pages=0 [ 0.478319] vesafb: scrolling: redraw [ 0.478330] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0 [ 0.490942] Console: switching to colour frame buffer device 80x30 [ 0.503406] fb0: VESA VGA frame buffer device [ 0.503592] isapnp: Scanning for PnP cards... [ 0.552955] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.557792] brd: module loaded [ 0.559722] loop: module loaded [ 0.560391] ata_piix 0000:00:1f.2: version 2.13 [ 0.560433] alloc irq_desc for 19 on node -1 [ 0.560440] alloc kstat_irqs on node -1 [ 0.560459] ata_piix 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.560472] ata_piix 0000:00:1f.2: MAP [ P0 P2 -- -- ] [ 0.735244] ata_piix 0000:00:1f.2: setting latency timer to 64 [ 0.753725] ACPI: Battery Slot [BAT1] (battery present) [ 0.779094] scsi0 : ata_piix [ 0.779419] scsi1 : ata_piix [ 0.782198] ata1: SATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0x1810 irq 14 [ 0.782209] ata2: SATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0x1818 irq 15 [ 0.783685] Fixed MDIO Bus: probed [ 0.783827] PPP generic driver version 2.4.2 [ 0.783984] tun: Universal TUN/TAP device driver, 1.6 [ 0.783991] tun: (C) 1999-2004 Max Krasnyansky [ 0.784284] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.784346] alloc irq_desc for 23 on node -1 [ 0.784354] alloc kstat_irqs on node -1 [ 0.784372] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.784417] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 0.784427] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 0.784546] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 1 [ 0.784599] ehci_hcd 0000:00:1d.7: using broken periodic workaround [ 0.784621] ehci_hcd 0000:00:1d.7: debug port 1 [ 0.788524] ehci_hcd 0000:00:1d.7: cache line size of 64 is not supported [ 0.788577] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xf0444000 [ 0.823877] Freeing initrd memory: 10420k freed [ 0.834094] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 0.834563] hub 1-0:1.0: USB hub found [ 0.834584] hub 1-0:1.0: 8 ports detected [ 0.834786] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.834838] uhci_hcd: USB Universal Host Controller Interface driver [ 0.834995] uhci_hcd 0000:00:1d.0: power state changed by ACPI to D0 [ 0.835057] uhci_hcd 0000:00:1d.0: power state changed by ACPI to D0 [ 0.835078] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.835096] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 0.835106] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 0.835248] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2 [ 0.835301] uhci_hcd 0000:00:1d.0: irq 23, io base 0x00001820 [ 0.835666] hub 2-0:1.0: USB hub found [ 0.835681] hub 2-0:1.0: 2 ports detected [ 0.835837] uhci_hcd 0000:00:1d.1: power state changed by ACPI to D0 [ 0.835858] uhci_hcd 0000:00:1d.1: power state changed by ACPI to D0 [ 0.835873] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.835890] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 0.835899] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 0.836049] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 3 [ 0.836120] uhci_hcd 0000:00:1d.1: irq 19, io base 0x00001840 [ 0.836255] isapnp: No Plug & Play device found [ 0.836448] hub 3-0:1.0: USB hub found [ 0.836461] hub 3-0:1.0: 2 ports detected [ 0.836597] uhci_hcd 0000:00:1d.2: power state changed by ACPI to D0 [ 0.836614] uhci_hcd 0000:00:1d.2: power state changed by ACPI to D0 [ 0.836627] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.836641] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 0.836648] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 0.836740] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 4 [ 0.836803] uhci_hcd 0000:00:1d.2: irq 18, io base 0x00001860 [ 0.837095] hub 4-0:1.0: USB hub found [ 0.837107] hub 4-0:1.0: 2 ports detected [ 0.837289] uhci_hcd 0000:00:1d.3: power state changed by ACPI to D0 [ 0.837335] uhci_hcd 0000:00:1d.3: power state changed by ACPI to D0 [ 0.837348] uhci_hcd 0000:00:1d.3: PCI INT D -> GSI 16 (level, low) -> IRQ 16 [ 0.837361] uhci_hcd 0000:00:1d.3: setting latency timer to 64 [ 0.837369] uhci_hcd 0000:00:1d.3: UHCI Host Controller [ 0.837461] uhci_hcd 0000:00:1d.3: new USB bus registered, assigned bus number 5 [ 0.837520] uhci_hcd 0000:00:1d.3: irq 16, io base 0x00001880 [ 0.837805] hub 5-0:1.0: USB hub found [ 0.837817] hub 5-0:1.0: 2 ports detected [ 0.838056] PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 0.862457] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.862476] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.862681] mice: PS/2 mouse device common for all mice [ 0.862937] rtc_cmos 00:08: RTC can wake from S4 [ 0.863058] rtc_cmos 00:08: rtc core: registered rtc_cmos as rtc0 [ 0.863110] rtc0: alarms up to one month, y3k, 242 bytes nvram, hpet irqs [ 0.863413] device-mapper: uevent: version 1.0.3 [ 0.863713] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 0.863913] device-mapper: multipath: version 1.1.1 loaded [ 0.863921] device-mapper: multipath round-robin: version 1.0.0 loaded [ 0.864259] EISA: Probing bus 0 at eisa.0 [ 0.864265] EISA: Cannot allocate resource for mainboard [ 0.864271] Cannot allocate resource for EISA slot 1 [ 0.864276] Cannot allocate resource for EISA slot 2 [ 0.864281] Cannot allocate resource for EISA slot 3 [ 0.864286] Cannot allocate resource for EISA slot 4 [ 0.864291] Cannot allocate resource for EISA slot 5 [ 0.864296] Cannot allocate resource for EISA slot 6 [ 0.864301] Cannot allocate resource for EISA slot 7 [ 0.864306] Cannot allocate resource for EISA slot 8 [ 0.864311] EISA: Detected 0 cards. [ 0.864709] cpuidle: using governor ladder [ 0.864993] cpuidle: using governor menu [ 0.865662] TCP cubic registered [ 0.865996] NET: Registered protocol family 10 [ 0.866769] lo: Disabled Privacy Extensions [ 0.867258] NET: Registered protocol family 17 [ 0.868504] Using IPI No-Shortcut mode [ 0.868735] PM: Resume from disk failed. [ 0.868761] registered taskstats version 1 [ 0.869560] Magic number: 2:857:573 [ 0.869708] rtc_cmos 00:08: setting system clock to 2010-07-13 08:33:30 UTC (1279010010) [ 0.869717] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.869721] EDD information not available. [ 0.889055] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3 [ 0.944595] ata1.00: ATA-7: INTEL SSDSA2M080G2GC, 2CV102HA, max UDMA/133 [ 0.944605] ata1.00: 156301488 sectors, multi 16: LBA48 NCQ (depth 0/32) [ 0.953650] ata1.00: configured for UDMA/133 [ 0.953945] scsi 0:0:0:0: Direct-Access ATA INTEL SSDSA2M080 2CV1 PQ: 0 ANSI: 5 [ 0.954277] sd 0:0:0:0: [sda] 156301488 512-byte logical blocks: (80.0 GB/74.5 GiB) [ 0.954348] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 0.954513] sd 0:0:0:0: [sda] Write Protect is off [ 0.954523] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 0.954626] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 0.955141] sda: sda1 sda2 < sda5 > [ 0.956832] sd 0:0:0:0: [sda] Attached SCSI disk [ 0.999580] Freeing unused kernel memory: 684k freed [ 1.000244] Write protecting the kernel text: 4944k [ 1.000327] Write protecting the kernel read-only data: 2012k [ 1.039193] udev: starting version 151 [ 1.145128] usb 1-2: new high speed USB device using ehci_hcd and address 2 [ 1.419274] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded [ 1.419351] r8169 0000:04:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 1.419497] r8169 0000:04:00.0: setting latency timer to 64 [ 1.419699] alloc irq_desc for 43 on node -1 [ 1.419707] alloc kstat_irqs on node -1 [ 1.419759] r8169 0000:04:00.0: irq 43 for MSI/MSI-X [ 1.436438] usb 1-3: new high speed USB device using ehci_hcd and address 3 [ 1.452088] r8169 0000:04:00.0: eth0: RTL8102e at 0xf8060000, 00:24:e8:bf:82:d8, XID 04c00000 IRQ 43 [ 1.499421] Btrfs loaded [ 1.542107] EXT4-fs (sda1): INFO: recovery required on readonly filesystem [ 1.542118] EXT4-fs (sda1): write access will be enabled during recovery [ 1.570722] EXT4-fs (sda1): recovery complete [ 1.571170] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 2.100049] udev: starting version 151 [ 2.117290] Adding 2978812k swap on /dev/sda5. Priority:-1 extents:1 across:2978812k SSD [ 2.173180] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro [ 2.243694] lp: driver loaded but no devices found [ 2.421054] coretemp coretemp.0: Unable to read TjMax from CPU. [ 2.421345] coretemp coretemp.1: Unable to read TjMax from CPU. [ 2.642793] acpi device:00: registered as cooling_device2 [ 2.643248] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input4 [ 2.643406] ACPI: Video Device [GFX0] (multi-head: yes rom: no post: no) [ 2.691277] lib80211: common routines for IEEE802.11 drivers [ 2.691288] lib80211_crypt: registered algorithm 'NULL' [ 2.775161] intel_rng: FWH not detected [ 2.782469] udev: renamed network interface eth0 to eth1 [ 2.884896] wl: module license 'MIXED/Proprietary' taints kernel. [ 2.884908] Disabling lock debugging due to kernel taint [ 2.910110] leds_ss4200: no LED devices found [ 2.970537] Linux agpgart interface v0.103 [ 3.065377] dcdbas dcdbas: Dell Systems Management Base Driver (version 5.6.0-3.2) [ 3.113162] agpgart-intel 0000:00:00.0: Intel 945GME Chipset [ 3.113764] agpgart-intel 0000:00:00.0: detected 7932K stolen memory [ 3.116747] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xd0000000 [ 3.162015] compal-laptop: Identified laptop model 'Dell Mini 10v'. [ 3.172519] compal-laptop: driver 0.2.6 successfully loaded. [ 3.173731] wl 0000:03:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 3.173755] wl 0000:03:00.0: setting latency timer to 64 [ 3.180159] dell-laptop: Blacklisted hardware detected - not enabling rfkill [ 3.204986] Linux video capture interface: v2.00 [ 3.244269] uvcvideo: Found UVC 1.00 device Integrated Webcam (064e:a129) [ 3.273182] input: Integrated Webcam as /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/input/input5 [ 3.273408] usbcore: registered new interface driver uvcvideo [ 3.273417] USB Video Class driver (v0.1.0) [ 3.370573] lib80211_crypt: registered algorithm 'TKIP' [ 3.371084] eth0: Broadcom BCM4315 802.11 Hybrid Wireless Controller 5.60.48.36 [ 3.450838] [drm] Initialized drm 1.1.0 20060810 [ 3.490577] udev: renamed network interface eth0 to eth2 [ 3.664003] type=1400 audit(1279010013.290:2): operation="profile_load" pid=682 name="/sbin/dhclient3" pid=682 comm="apparmor_parser" [ 3.664809] type=1400 audit(1279010013.290:3): operation="profile_load" pid=682 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=682 comm="apparmor_parser" [ 3.665311] type=1400 audit(1279010013.294:4): operation="profile_load" pid=682 name="/usr/lib/connman/scripts/dhclient-script" pid=682 comm="apparmor_parser" [ 3.740149] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 3.740165] i915 0000:00:02.0: setting latency timer to 64 [ 3.838641] BUG: unable to handle kernel NULL pointer dereference at (null) [ 3.839119] IP: [] __mutex_lock_slowpath+0x9a/0x140 [ 3.839511] *pde = 3d9e2067 [ 3.839710] Oops: 0002 [#1] SMP [ 3.839944] last sysfs file: /sys/devices/platform/i8042/serio0/input/input3/event3/uevent [ 3.840014] Modules linked in: snd_hwdep snd_pcm i915(+) snd_seq_midi snd_rawmidi snd_seq_midi_event drm_kms_helper snd_seq lib80211_crypt_tkip snd_timer drm snd_seq_device uvcvideo dell_laptop wl(P) compal_laptop videodev dcdbas intel_agp snd psmouse v4l1_compat led_class soundcore serio_raw agpgart i2c_algo_bit snd_page_alloc lib80211 video coretemp output lp parport btrfs zlib_deflate r8169 mii crc32c libcrc32c [ 3.840014] [ 3.840014] Pid: 315, comm: plymouthd Tainted: P 2.6.35-7-generic #12-Ubuntu CN0Y53/Inspiron 1011 [ 3.840014] EIP: 0060:[] EFLAGS: 00010246 CPU: 0 [ 3.840014] EIP is at __mutex_lock_slowpath+0x9a/0x140 [ 3.840014] EAX: 00000000 EBX: ef5a9a90 ECX: ef5a9a98 EDX: f6ab7ec0 [ 3.840014] ESI: ef5a9a94 EDI: ef5a9a90 EBP: f6ab7ed8 ESP: f6ab7eb4 [ 3.840014] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 3.840014] Process plymouthd (pid: 315, ti=f6ab6000 task=f6ae3f70 task.ti=f6ab6000) [ 3.840014] Stack: [ 3.840014] f6ab7ec4 f6ae3f70 ef5a9a98 ef5a9a98 00000000 f6ab7ed8 ef5a9a90 f7109100 [ 3.840014] <0> ef5a9a90 f6ab7ee8 c05cb095 f7109100 f7109100 f6ab7efc f890fdc3 f7109100 [ 3.848126] <0> f7109160 ef5a9800 f6ab7f44 f8907337 00000001 f8917e25 f8917220 f8919590 [ 3.848126] Call Trace: [ 3.848126] [] ? mutex_lock+0x25/0x40 [ 3.848126] [] ? drm_fb_release+0x23/0x70 [drm] [ 3.878710] [] ? drm_release+0x3e7/0x4c0 [drm] [ 3.878710] [] ? __fput+0xdf/0x1f0 [ 3.878710] [] ? fput+0x1d/0x30 [ 3.878710] [] ? filp_close+0x4c/0x80 [ 3.878710] [] ? sys_close+0x75/0xc0 [ 3.878710] [] ? syscall_call+0x7/0xb [ 3.878710] Code: 83 79 18 63 7f b3 8d 76 00 8d 73 04 89 f0 e8 5e 11 00 00 8d 53 08 89 55 e4 8d 55 e8 8b 43 0c 89 53 0c 8b 4d e4 89 45 ec 89 4d e8 <89> 10 8b 45 e0 ba ff ff ff ff 89 45 f0 89 d0 87 03 83 f8 01 74 [ 3.878710] EIP: [] __mutex_lock_slowpath+0x9a/0x140 SS:ESP 0068:f6ab7eb4 [ 3.878710] CR2: 0000000000000000 [ 3.879199] ---[ end trace d19a98cda7849580 ]--- [ 4.017902] [drm] set up 7M of stolen space [ 4.474366] [drm] initialized overlay support [ 4.599182] r8169 0000:04:00.0: eth1: link down [ 4.603936] ADDRCONF(NETDEV_UP): eth1: link is not ready [ 4.640584] type=1400 audit(1279010014.266:5): operation="profile_load" pid=820 name="/usr/share/gdm/guest-session/Xsession" pid=820 comm="apparmor_parser" [ 4.653746] type=1400 audit(1279010014.282:6): operation="profile_replace" pid=821 name="/sbin/dhclient3" pid=821 comm="apparmor_parser" [ 4.661042] type=1400 audit(1279010014.290:7): operation="profile_replace" pid=821 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=821 comm="apparmor_parser" [ 4.671312] type=1400 audit(1279010014.298:8): operation="profile_replace" pid=821 name="/usr/lib/connman/scripts/dhclient-script" pid=821 comm="apparmor_parser" [ 4.692486] type=1400 audit(1279010014.318:9): operation="profile_load" pid=822 name="/usr/bin/evince" pid=822 comm="apparmor_parser" [ 4.710491] type=1400 audit(1279010014.338:10): operation="profile_load" pid=822 name="/usr/bin/evince-previewer" pid=822 comm="apparmor_parser" [ 4.741325] Synaptics Touchpad, model: 1, fw: 7.4, id: 0x1e0b1, caps: 0xd04711/0xa40000/0x2a0000 [ 4.769092] Skipping EDID probe due to cached edid [ 4.780738] checking generic (d012c000 130000) vs hw (d0000000 10000000) [ 4.784977] fb: conflicting fb hw usage inteldrmfb vs VESA VGA - removing generic driver [ 4.800600] Console: switching to colour dummy device 80x25 [ 4.860971] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input6 [ 5.229435] Console: switching to colour frame buffer device 128x37 [ 5.237193] fb0: inteldrmfb frame buffer device [ 5.237200] drm: registered panic notifier [ 5.237208] Slow work thread pool: Starting up [ 5.237369] Slow work thread pool: Ready [ 5.237391] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 5.237884] alloc irq_desc for 22 on node -1 [ 5.237891] alloc kstat_irqs on node -1 [ 5.237912] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 5.238011] alloc irq_desc for 44 on node -1 [ 5.238017] alloc kstat_irqs on node -1 [ 5.238043] HDA Intel 0000:00:1b.0: irq 44 for MSI/MSI-X [ 5.238118] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 5.248909] vga16fb: initializing [ 5.248925] vga16fb: mapped to 0xc00a0000 [ 5.249233] fb1: VGA16 VGA frame buffer device Bug: 606511 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-8-generic (buildd@yellow) (gcc version 4.4.4 (Ubuntu 4.4.4-6ubuntu2) ) #13-Ubuntu SMP Wed Jul 14 13:11:35 UTC 2010 (Ubuntu 2.6.35-8.13-generic 2.6.35-rc5) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-8-generic root=UUID=bf143224-6b45-4f50-9834-ca97a00600e0 ro quiet splash [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) [ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000bff90000 (usable) [ 0.000000] BIOS-e820: 00000000bff90000 - 00000000bff9e000 (ACPI data) [ 0.000000] BIOS-e820: 00000000bff9e000 - 00000000bffe0000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000bffe0000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ffb00000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 00000001c0000000 (usable) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI present. [ 0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it. [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0x1c0000 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-CFFFF write-protect [ 0.000000] D0000-DFFFF uncachable [ 0.000000] E0000-EFFFF write-through [ 0.000000] F0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 1C0000000 mask FC0000000 uncachable [ 0.000000] 1 base 000000000 mask E00000000 write-back [ 0.000000] 2 base 0C0000000 mask FC0000000 uncachable [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820 update range: 00000000c0000000 - 0000000100000000 (usable) ==> (reserved) [ 0.000000] last_pfn = 0xbff90 max_arch_pfn = 0x400000000 [ 0.000000] Scanning 0 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009fc00 (usable) [ 0.000000] modified: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 00000000bff90000 (usable) [ 0.000000] modified: 00000000bff90000 - 00000000bff9e000 (ACPI data) [ 0.000000] modified: 00000000bff9e000 - 00000000bffe0000 (ACPI NVS) [ 0.000000] modified: 00000000bffe0000 - 00000000c0000000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000ffb00000 - 0000000100000000 (reserved) [ 0.000000] modified: 0000000100000000 - 00000001c0000000 (usable) [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] found SMP MP-table at [ffff8800000ff780] ff780 [ 0.000000] init_memory_mapping: 0000000000000000-00000000bff90000 [ 0.000000] 0000000000 - 00bfe00000 page 2M [ 0.000000] 00bfe00000 - 00bff90000 page 4k [ 0.000000] kernel direct mapping tables up to bff90000 @ 16000-1b000 [ 0.000000] init_memory_mapping: 0000000100000000-00000001c0000000 [ 0.000000] 0100000000 - 01c0000000 page 2M [ 0.000000] kernel direct mapping tables up to 1c0000000 @ 19000-21000 [ 0.000000] RAMDISK: 3759c000 - 37ff0000 [ 0.000000] ACPI: RSDP 00000000000f99e0 00014 (v00 ACPIAM) [ 0.000000] ACPI: RSDT 00000000bff90000 0003C (v01 7514MS A7514200 20090526 MSFT 00000097) [ 0.000000] ACPI: FACP 00000000bff90200 00084 (v01 7514MS A7514200 20090526 MSFT 00000097) [ 0.000000] ACPI: DSDT 00000000bff90440 063EE (v01 A7514 A7514200 00000200 INTL 20051117) [ 0.000000] ACPI: FACS 00000000bff9e000 00040 [ 0.000000] ACPI: APIC 00000000bff90390 0006C (v01 7514MS A7514200 20090526 MSFT 00000097) [ 0.000000] ACPI: MCFG 00000000bff90400 0003C (v01 7514MS OEMMCFG 20090526 MSFT 00000097) [ 0.000000] ACPI: OEMB 00000000bff9e040 00072 (v01 7514MS A7514200 20090526 MSFT 00000097) [ 0.000000] ACPI: HPET 00000000bff98440 00038 (v01 7514MS OEMHPET 20090526 MSFT 00000097) [ 0.000000] ACPI: SSDT 00000000bff9e5c0 00A7C (v01 DpgPmm CpuPm 00000012 INTL 20051117) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-00000001c0000000 [ 0.000000] Initmem setup node 0 0000000000000000-00000001c0000000 [ 0.000000] NODE_DATA [0000000100000000 - 0000000100004fff] [ 0.000000] [ffffea0000000000-ffffea00061fffff] PMD -> [ffff880100200000-ffff8801055fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal 0x00100000 -> 0x001c0000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[3] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x000bff90 [ 0.000000] 0: 0x00100000 -> 0x001c0000 [ 0.000000] On node 0 totalpages: 1572639 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3927 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 14280 pages used for memmap [ 0.000000] DMA32 zone: 767944 pages, LIFO batch:31 [ 0.000000] Normal zone: 10752 pages used for memmap [ 0.000000] Normal zone: 775680 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x808 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x82] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x83] disabled) [ 0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0xffffffff base: 0xfed00000 [ 0.000000] SMP: Allowing 4 CPUs, 2 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [1c000 - 1c7ff] [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] PM: Registered nosave memory: 00000000bff90000 - 00000000bff9e000 [ 0.000000] PM: Registered nosave memory: 00000000bff9e000 - 00000000bffe0000 [ 0.000000] PM: Registered nosave memory: 00000000bffe0000 - 00000000c0000000 [ 0.000000] PM: Registered nosave memory: 00000000c0000000 - 00000000fee00000 [ 0.000000] PM: Registered nosave memory: 00000000fee00000 - 00000000fee01000 [ 0.000000] PM: Registered nosave memory: 00000000fee01000 - 00000000ffb00000 [ 0.000000] PM: Registered nosave memory: 00000000ffb00000 - 0000000100000000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:3ee00000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:4 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 30 pages/cpu @ffff880001e00000 s91392 r8192 d23296 u524288 [ 0.000000] pcpu-alloc: s91392 r8192 d23296 u524288 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 1547551 [ 0.000000] Policy zone: Normal [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-8-generic root=UUID=bf143224-6b45-4f50-9834-ca97a00600e0 ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] xsave/xrstor: enabled xstate_bv 0x3, cntxt size 0x240 [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] early_res array is doubled to 128 at [24800 - 257ff] [ 0.000000] Subtract (57 early reservations) [ 0.000000] #1 [0001000000 - 0001d1fed4] TEXT DATA BSS [ 0.000000] #2 [003759c000 - 0037ff0000] RAMDISK [ 0.000000] #3 [0001d20000 - 0001d201a9] BRK [ 0.000000] #4 [00000ff790 - 0000100000] BIOS reserved [ 0.000000] #5 [00000ff780 - 00000ff790] MP-table mpf [ 0.000000] #6 [000009fc00 - 00000fd720] BIOS reserved [ 0.000000] #7 [00000fd894 - 00000ff780] BIOS reserved [ 0.000000] #8 [00000fd720 - 00000fd894] MP-table mpc [ 0.000000] #9 [0000010000 - 0000012000] TRAMPOLINE [ 0.000000] #10 [0000012000 - 0000016000] ACPI WAKEUP [ 0.000000] #11 [0000016000 - 0000019000] PGTABLE [ 0.000000] #12 [0000019000 - 000001c000] PGTABLE [ 0.000000] #13 [0100000000 - 0100005000] NODE_DATA [ 0.000000] #14 [0001d201c0 - 0001d211c0] BOOTMEM [ 0.000000] #15 [00021211c0 - 0002121640] BOOTMEM [ 0.000000] #16 [0100005000 - 0100006000] BOOTMEM [ 0.000000] #17 [0100006000 - 0100007000] BOOTMEM [ 0.000000] #18 [0100200000 - 0105600000] MEMMAP 0 [ 0.000000] #19 [0001d211c0 - 0001d21340] BOOTMEM [ 0.000000] #20 [0001d21340 - 0001d39340] BOOTMEM [ 0.000000] #21 [0001d39340 - 0001d51340] BOOTMEM [ 0.000000] #22 [0001d52000 - 0001d53000] BOOTMEM [ 0.000000] #23 [0001d1ff00 - 0001d1ff41] BOOTMEM [ 0.000000] #24 [0001d1ff80 - 0001d1ffc3] BOOTMEM [ 0.000000] #25 [0001d51340 - 0001d515a8] BOOTMEM [ 0.000000] #26 [0001d515c0 - 0001d51628] BOOTMEM [ 0.000000] #27 [0001d51640 - 0001d516a8] BOOTMEM [ 0.000000] #28 [0001d516c0 - 0001d51728] BOOTMEM [ 0.000000] #29 [0001d51740 - 0001d517a8] BOOTMEM [ 0.000000] #30 [0001d517c0 - 0001d51828] BOOTMEM [ 0.000000] #31 [0001d51840 - 0001d518a8] BOOTMEM [ 0.000000] #32 [0001d518c0 - 0001d51928] BOOTMEM [ 0.000000] #33 [0001d51940 - 0001d519a8] BOOTMEM [ 0.000000] #34 [0001d519c0 - 0001d51a28] BOOTMEM [ 0.000000] #35 [0001d51a40 - 0001d51aa8] BOOTMEM [ 0.000000] #36 [0001d51ac0 - 0001d51ae0] BOOTMEM [ 0.000000] #37 [0001d51b00 - 0001d51b20] BOOTMEM [ 0.000000] #38 [0001d51b40 - 0001d51ba9] BOOTMEM [ 0.000000] #39 [0001d51bc0 - 0001d51c29] BOOTMEM [ 0.000000] #40 [0001e00000 - 0001e1e000] BOOTMEM [ 0.000000] #41 [0001e80000 - 0001e9e000] BOOTMEM [ 0.000000] #42 [0001f00000 - 0001f1e000] BOOTMEM [ 0.000000] #43 [0001f80000 - 0001f9e000] BOOTMEM [ 0.000000] #44 [0001d51c40 - 0001d51c48] BOOTMEM [ 0.000000] #45 [0001d51c80 - 0001d51c88] BOOTMEM [ 0.000000] #46 [0001d51cc0 - 0001d51cd0] BOOTMEM [ 0.000000] #47 [0001d51d00 - 0001d51d20] BOOTMEM [ 0.000000] #48 [0001d51d40 - 0001d51e70] BOOTMEM [ 0.000000] #49 [0001d51e80 - 0001d51ed0] BOOTMEM [ 0.000000] #50 [0001d51f00 - 0001d51f50] BOOTMEM [ 0.000000] #51 [0001d53000 - 0001d5b000] BOOTMEM [ 0.000000] #52 [0001d5b000 - 0001d5b240] BOOTMEM [ 0.000000] #53 [0002122000 - 0006122000] BOOTMEM [ 0.000000] #54 [0001d5b240 - 0001d7b240] BOOTMEM [ 0.000000] #55 [0001d7b240 - 0001dbb240] BOOTMEM [ 0.000000] #56 [000001c800 - 0000024800] BOOTMEM [ 0.000000] Memory: 6113768k/7340032k available (5707k kernel code, 1049476k absent, 176788k reserved, 5421k data, 904k init) [ 0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:4352 nr_irqs:712 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 62914560 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 2506.005 MHz processor. [ 0.000006] Calibrating delay loop (skipped), value calculated using timer frequency.. 5012.01 BogoMIPS (lpj=25060050) [ 0.000009] pid_max: default: 32768 minimum: 301 [ 0.000033] Security Framework initialized [ 0.000052] AppArmor: AppArmor initialized [ 0.000054] Yama: becoming mindful. [ 0.010661] Dentry cache hash table entries: 1048576 (order: 11, 8388608 bytes) [ 0.015468] Inode-cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.017730] Mount-cache hash table entries: 256 [ 0.017884] Initializing cgroup subsys ns [ 0.017889] Initializing cgroup subsys cpuacct [ 0.017892] Initializing cgroup subsys memory [ 0.017900] Initializing cgroup subsys devices [ 0.017903] Initializing cgroup subsys freezer [ 0.017904] Initializing cgroup subsys net_cls [ 0.017934] CPU: Physical Processor ID: 0 [ 0.017935] CPU: Processor Core ID: 0 [ 0.017937] mce: CPU supports 6 MCE banks [ 0.017945] CPU0: Thermal monitoring enabled (TM2) [ 0.017949] using mwait in idle threads. [ 0.017951] Performance Events: PEBS fmt0+, Core2 events, Intel PMU driver. [ 0.017958] ... version: 2 [ 0.017960] ... bit width: 40 [ 0.017961] ... generic registers: 2 [ 0.017963] ... value mask: 000000ffffffffff [ 0.017964] ... max period: 000000007fffffff [ 0.017965] ... fixed-purpose events: 3 [ 0.017967] ... event mask: 0000000700000003 [ 0.020339] ACPI: Core revision 20100428 [ 0.027233] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.027238] ftrace: allocating 22647 entries in 89 pages [ 0.030056] Setting APIC routing to flat [ 0.030366] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.136366] CPU0: Intel Pentium(R) Dual-Core CPU E5200 @ 2.50GHz stepping 0a [ 0.140000] Booting Node 0, Processors #1 [ 0.300018] Brought up 2 CPUs [ 0.300021] Total of 2 processors activated (10024.44 BogoMIPS). [ 0.300522] devtmpfs: initialized [ 0.300597] regulator: core version 0.5 [ 0.300621] Time: 16:36:42 Date: 07/16/10 [ 0.300655] NET: Registered protocol family 16 [ 0.300674] Trying to unpack rootfs image as initramfs... [ 0.300770] ACPI: bus type pci registered [ 0.300832] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.300834] PCI: not using MMCONFIG [ 0.300836] PCI: Using configuration type 1 for base access [ 0.310098] bio: create slab at 0 [ 0.311253] ACPI: EC: Look up EC in DSDT [ 0.312633] ACPI: Executed 1 blocks of module-level executable AML code [ 0.318311] ACPI: SSDT 00000000bff9e0c0 00277 (v01 DpgPmm P001Ist 00000011 INTL 20051117) [ 0.318608] ACPI: Dynamic OEM Table Load: [ 0.318611] ACPI: SSDT (null) 00277 (v01 DpgPmm P001Ist 00000011 INTL 20051117) [ 0.319025] ACPI: SSDT 00000000bff9e340 00277 (v01 DpgPmm P002Ist 00000012 INTL 20051117) [ 0.319320] ACPI: Dynamic OEM Table Load: [ 0.319322] ACPI: SSDT (null) 00277 (v01 DpgPmm P002Ist 00000012 INTL 20051117) [ 0.319417] ACPI: Interpreter enabled [ 0.319420] ACPI: (supports S0 S1 S4 S5) [ 0.319438] ACPI: Using IOAPIC for interrupt routing [ 0.319490] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.321344] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in ACPI motherboard resources [ 0.365897] ACPI: No dock devices found. [ 0.365902] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.366041] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.366312] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 0.366314] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 0.366317] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.366319] pci_root PNP0A08:00: host bridge window [mem 0x000d0000-0x000dffff] [ 0.366321] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xdfffffff] [ 0.366323] pci_root PNP0A08:00: host bridge window [mem 0xf0000000-0xfed8ffff] [ 0.366393] pci 0000:00:01.0: PME# supported from D0 D3hot D3cold [ 0.366396] pci 0000:00:01.0: PME# disabled [ 0.366461] pci 0000:00:1a.0: reg 20: [io 0xbc00-0xbc1f] [ 0.366524] pci 0000:00:1a.1: reg 20: [io 0xb880-0xb89f] [ 0.366585] pci 0000:00:1a.2: reg 20: [io 0xb800-0xb81f] [ 0.366647] pci 0000:00:1a.7: reg 10: [mem 0xf9fffc00-0xf9ffffff] [ 0.366699] pci 0000:00:1a.7: PME# supported from D0 D3hot D3cold [ 0.366702] pci 0000:00:1a.7: PME# disabled [ 0.366734] pci 0000:00:1b.0: reg 10: [mem 0xf9ff8000-0xf9ffbfff 64bit] [ 0.366772] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.366775] pci 0000:00:1b.0: PME# disabled [ 0.366838] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.366842] pci 0000:00:1c.0: PME# disabled [ 0.366908] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 0.366911] pci 0000:00:1c.1: PME# disabled [ 0.366975] pci 0000:00:1c.5: PME# supported from D0 D3hot D3cold [ 0.366979] pci 0000:00:1c.5: PME# disabled [ 0.367025] pci 0000:00:1d.0: reg 20: [io 0xb480-0xb49f] [ 0.367091] pci 0000:00:1d.1: reg 20: [io 0xb400-0xb41f] [ 0.367152] pci 0000:00:1d.2: reg 20: [io 0xb080-0xb09f] [ 0.367211] pci 0000:00:1d.7: reg 10: [mem 0xf9fff800-0xf9fffbff] [ 0.367261] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.367265] pci 0000:00:1d.7: PME# disabled [ 0.367377] pci 0000:00:1f.0: quirk: [io 0x0800-0x087f] claimed by ICH6 ACPI/GPIO/TCO [ 0.367381] pci 0000:00:1f.0: quirk: [io 0x0480-0x04bf] claimed by ICH6 GPIO [ 0.367384] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 1 PIO at 0a00 (mask 00ff) [ 0.367387] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 2 PIO at 0a00 (mask 0017) [ 0.367391] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 3 PIO at 4700 (mask 00ff) [ 0.367434] pci 0000:00:1f.2: reg 10: [io 0xb000-0xb007] [ 0.367439] pci 0000:00:1f.2: reg 14: [io 0xac00-0xac03] [ 0.367444] pci 0000:00:1f.2: reg 18: [io 0xa880-0xa887] [ 0.367449] pci 0000:00:1f.2: reg 1c: [io 0xa800-0xa803] [ 0.367454] pci 0000:00:1f.2: reg 20: [io 0xa480-0xa48f] [ 0.367459] pci 0000:00:1f.2: reg 24: [io 0xa400-0xa40f] [ 0.367501] pci 0000:00:1f.3: reg 10: [mem 0xf9fff400-0xf9fff4ff 64bit] [ 0.367513] pci 0000:00:1f.3: reg 20: [io 0x0400-0x041f] [ 0.367549] pci 0000:00:1f.5: reg 10: [io 0xa000-0xa007] [ 0.367554] pci 0000:00:1f.5: reg 14: [io 0x9c00-0x9c03] [ 0.367559] pci 0000:00:1f.5: reg 18: [io 0x9880-0x9887] [ 0.367565] pci 0000:00:1f.5: reg 1c: [io 0x9800-0x9803] [ 0.367571] pci 0000:00:1f.5: reg 20: [io 0x9480-0x948f] [ 0.367575] pci 0000:00:1f.5: reg 24: [io 0x9400-0x940f] [ 0.367643] pci 0000:01:00.0: reg 10: [mem 0xfd000000-0xfdffffff] [ 0.367651] pci 0000:01:00.0: reg 14: [mem 0xc0000000-0xdfffffff 64bit pref] [ 0.367659] pci 0000:01:00.0: reg 1c: [mem 0xfa000000-0xfbffffff 64bit] [ 0.367663] pci 0000:01:00.0: reg 24: [io 0xcc00-0xcc7f] [ 0.367668] pci 0000:01:00.0: reg 30: [mem 0x00000000-0x0007ffff pref] [ 0.367712] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.367715] pci 0000:00:01.0: bridge window [io 0xc000-0xcfff] [ 0.367719] pci 0000:00:01.0: bridge window [mem 0xfa000000-0xfe9fffff] [ 0.367723] pci 0000:00:01.0: bridge window [mem 0xc0000000-0xdfffffff 64bit pref] [ 0.367832] pci 0000:02:00.0: reg 24: [mem 0xfeafe000-0xfeafffff] [ 0.367869] pci 0000:02:00.0: PME# supported from D3hot [ 0.367874] pci 0000:02:00.0: PME# disabled [ 0.367919] pci 0000:02:00.1: reg 10: [io 0xdc00-0xdc07] [ 0.367927] pci 0000:02:00.1: reg 14: [io 0xd880-0xd883] [ 0.367935] pci 0000:02:00.1: reg 18: [io 0xd800-0xd807] [ 0.367944] pci 0000:02:00.1: reg 1c: [io 0xd480-0xd483] [ 0.367952] pci 0000:02:00.1: reg 20: [io 0xd400-0xd40f] [ 0.368013] pci 0000:02:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 0.368025] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.368029] pci 0000:00:1c.0: bridge window [io 0xd000-0xdfff] [ 0.368032] pci 0000:00:1c.0: bridge window [mem 0xfea00000-0xfeafffff] [ 0.368038] pci 0000:00:1c.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.368075] pci 0000:00:1c.1: PCI bridge to [bus 03-03] [ 0.368078] pci 0000:00:1c.1: bridge window [io 0xf000-0x0000] (disabled) [ 0.368082] pci 0000:00:1c.1: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.368087] pci 0000:00:1c.1: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.368151] pci 0000:04:00.0: reg 10: [io 0xe800-0xe8ff] [ 0.368171] pci 0000:04:00.0: reg 18: [mem 0xf8fff000-0xf8ffffff 64bit pref] [ 0.368185] pci 0000:04:00.0: reg 20: [mem 0xf8fe0000-0xf8feffff 64bit pref] [ 0.368193] pci 0000:04:00.0: reg 30: [mem 0xfebf0000-0xfebfffff pref] [ 0.368230] pci 0000:04:00.0: supports D1 D2 [ 0.368232] pci 0000:04:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.368236] pci 0000:04:00.0: PME# disabled [ 0.380021] pci 0000:00:1c.5: PCI bridge to [bus 04-04] [ 0.380026] pci 0000:00:1c.5: bridge window [io 0xe000-0xefff] [ 0.380030] pci 0000:00:1c.5: bridge window [mem 0xfeb00000-0xfebfffff] [ 0.380035] pci 0000:00:1c.5: bridge window [mem 0xf8f00000-0xf8ffffff 64bit pref] [ 0.380098] pci 0000:00:1e.0: PCI bridge to [bus 05-05] (subtractive decode) [ 0.380101] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.380105] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.380110] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.380113] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.380115] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.380117] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.380119] pci 0000:00:1e.0: bridge window [mem 0x000d0000-0x000dffff] (subtractive decode) [ 0.380121] pci 0000:00:1e.0: bridge window [mem 0xc0000000-0xdfffffff] (subtractive decode) [ 0.380123] pci 0000:00:1e.0: bridge window [mem 0xf0000000-0xfed8ffff] (subtractive decode) [ 0.380154] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.380308] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P1._PRT] [ 0.380443] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P4._PRT] [ 0.380504] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P5._PRT] [ 0.380560] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P9._PRT] [ 0.385296] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 6 7 *10 11 12 14 15) [ 0.385398] ACPI: PCI Interrupt Link [LNKB] (IRQs *5) [ 0.385494] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 6 7 10 11 12 *14 15) [ 0.385598] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 6 7 10 11 12 14 *15) [ 0.385696] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 6 7 10 11 12 14 15) *0, disabled. [ 0.385796] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 6 7 10 *11 12 14 15) [ 0.385899] ACPI: PCI Interrupt Link [LNKG] (IRQs *3 4 6 7 10 11 12 14 15) [ 0.385998] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 6 7 *10 11 12 14 15) [ 0.386041] HEST: Table is not found! [ 0.386125] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none [ 0.386128] vgaarb: loaded [ 0.386259] SCSI subsystem initialized [ 0.386359] libata version 3.00 loaded. [ 0.386403] usbcore: registered new interface driver usbfs [ 0.386412] usbcore: registered new interface driver hub [ 0.386432] usbcore: registered new device driver usb [ 0.386546] ACPI: WMI: Mapper loaded [ 0.386548] PCI: Using ACPI for IRQ routing [ 0.386551] PCI: pci_cache_line_size set to 64 bytes [ 0.386644] reserve RAM buffer: 000000000009fc00 - 000000000009ffff [ 0.386646] reserve RAM buffer: 00000000bff90000 - 00000000bfffffff [ 0.386726] NetLabel: Initializing [ 0.386727] NetLabel: domain hash size = 128 [ 0.386729] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.386740] NetLabel: unlabeled traffic allowed by default [ 0.386767] HPET: 4 timers in total, 0 timers will be used for per-cpu timer [ 0.386772] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0 [ 0.386777] hpet0: 4 comparators, 64-bit 14.318180 MHz counter [ 0.390023] Switching to clocksource tsc [ 0.398867] AppArmor: AppArmor Filesystem Enabled [ 0.398885] pnp: PnP ACPI init [ 0.398902] ACPI: bus type pnp registered [ 0.402902] pnp: PnP ACPI: found 19 devices [ 0.402904] ACPI: ACPI bus type pnp unregistered [ 0.402917] system 00:01: [mem 0xfed14000-0xfed19fff] has been reserved [ 0.402919] system 00:01: [mem 0xfed90000-0xfed93fff] has been reserved [ 0.402927] system 00:09: [io 0x04c0-0x04ff] has been reserved [ 0.402930] system 00:09: [io 0x04d0-0x04d1] has been reserved [ 0.402932] system 00:09: [io 0x0800-0x087f] has been reserved [ 0.402934] system 00:09: [io 0x0480-0x04bf] has been reserved [ 0.402937] system 00:09: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.402939] system 00:09: [mem 0xfed20000-0xfed3ffff] has been reserved [ 0.402941] system 00:09: [mem 0xfed40000-0xfed8ffff] has been reserved [ 0.402946] system 00:0c: [mem 0xffc00000-0xffefffff] has been reserved [ 0.402951] system 00:0d: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.402953] system 00:0d: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.402958] system 00:10: [io 0x0a00-0x0adf] has been reserved [ 0.402960] system 00:10: [io 0x0ae0-0x0aef] has been reserved [ 0.402967] system 00:11: [mem 0xe0000000-0xefffffff] has been reserved [ 0.402972] system 00:12: [mem 0x00000000-0x0009ffff] could not be reserved [ 0.402974] system 00:12: [mem 0x000c0000-0x000cffff] has been reserved [ 0.402977] system 00:12: [mem 0x000e0000-0x000fffff] could not be reserved [ 0.402979] system 00:12: [mem 0x00100000-0xbfffffff] could not be reserved [ 0.402981] system 00:12: [mem 0xfed90000-0xffffffff] could not be reserved [ 0.407701] pci 0000:00:1c.0: BAR 15: assigned [mem 0xf0000000-0xf01fffff 64bit pref] [ 0.407705] pci 0000:00:1c.1: BAR 14: assigned [mem 0xf0200000-0xf03fffff] [ 0.407708] pci 0000:00:1c.1: BAR 15: assigned [mem 0xf0400000-0xf05fffff 64bit pref] [ 0.407710] pci 0000:00:1c.1: BAR 13: assigned [io 0x1000-0x1fff] [ 0.407714] pci 0000:01:00.0: BAR 6: assigned [mem 0xfc000000-0xfc07ffff pref] [ 0.407718] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.407721] pci 0000:00:01.0: bridge window [io 0xc000-0xcfff] [ 0.407724] pci 0000:00:01.0: bridge window [mem 0xfa000000-0xfe9fffff] [ 0.407727] pci 0000:00:01.0: bridge window [mem 0xc0000000-0xdfffffff 64bit pref] [ 0.407731] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.407734] pci 0000:00:1c.0: bridge window [io 0xd000-0xdfff] [ 0.407738] pci 0000:00:1c.0: bridge window [mem 0xfea00000-0xfeafffff] [ 0.407742] pci 0000:00:1c.0: bridge window [mem 0xf0000000-0xf01fffff 64bit pref] [ 0.407747] pci 0000:00:1c.1: PCI bridge to [bus 03-03] [ 0.407750] pci 0000:00:1c.1: bridge window [io 0x1000-0x1fff] [ 0.407755] pci 0000:00:1c.1: bridge window [mem 0xf0200000-0xf03fffff] [ 0.407758] pci 0000:00:1c.1: bridge window [mem 0xf0400000-0xf05fffff 64bit pref] [ 0.407765] pci 0000:00:1c.5: PCI bridge to [bus 04-04] [ 0.407767] pci 0000:00:1c.5: bridge window [io 0xe000-0xefff] [ 0.407772] pci 0000:00:1c.5: bridge window [mem 0xfeb00000-0xfebfffff] [ 0.407775] pci 0000:00:1c.5: bridge window [mem 0xf8f00000-0xf8ffffff 64bit pref] [ 0.407781] pci 0000:00:1e.0: PCI bridge to [bus 05-05] [ 0.407782] pci 0000:00:1e.0: bridge window [io disabled] [ 0.407786] pci 0000:00:1e.0: bridge window [mem disabled] [ 0.407789] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.407803] alloc irq_desc for 16 on node -1 [ 0.407805] alloc kstat_irqs on node -1 [ 0.407811] pci 0000:00:01.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.407815] pci 0000:00:01.0: setting latency timer to 64 [ 0.407822] alloc irq_desc for 17 on node -1 [ 0.407823] alloc kstat_irqs on node -1 [ 0.407826] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 0.407830] pci 0000:00:1c.0: setting latency timer to 64 [ 0.407837] pci 0000:00:1c.1: enabling device (0104 -> 0107) [ 0.407840] pci 0000:00:1c.1: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 0.407843] pci 0000:00:1c.1: setting latency timer to 64 [ 0.407850] pci 0000:00:1c.5: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 0.407854] pci 0000:00:1c.5: setting latency timer to 64 [ 0.407859] pci 0000:00:1e.0: setting latency timer to 64 [ 0.407863] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 0.407865] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 0.407867] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.407869] pci_bus 0000:00: resource 7 [mem 0x000d0000-0x000dffff] [ 0.407871] pci_bus 0000:00: resource 8 [mem 0xc0000000-0xdfffffff] [ 0.407872] pci_bus 0000:00: resource 9 [mem 0xf0000000-0xfed8ffff] [ 0.407874] pci_bus 0000:01: resource 0 [io 0xc000-0xcfff] [ 0.407876] pci_bus 0000:01: resource 1 [mem 0xfa000000-0xfe9fffff] [ 0.407878] pci_bus 0000:01: resource 2 [mem 0xc0000000-0xdfffffff 64bit pref] [ 0.407880] pci_bus 0000:02: resource 0 [io 0xd000-0xdfff] [ 0.407882] pci_bus 0000:02: resource 1 [mem 0xfea00000-0xfeafffff] [ 0.407884] pci_bus 0000:02: resource 2 [mem 0xf0000000-0xf01fffff 64bit pref] [ 0.407886] pci_bus 0000:03: resource 0 [io 0x1000-0x1fff] [ 0.407888] pci_bus 0000:03: resource 1 [mem 0xf0200000-0xf03fffff] [ 0.407890] pci_bus 0000:03: resource 2 [mem 0xf0400000-0xf05fffff 64bit pref] [ 0.407892] pci_bus 0000:04: resource 0 [io 0xe000-0xefff] [ 0.407894] pci_bus 0000:04: resource 1 [mem 0xfeb00000-0xfebfffff] [ 0.407896] pci_bus 0000:04: resource 2 [mem 0xf8f00000-0xf8ffffff 64bit pref] [ 0.407898] pci_bus 0000:05: resource 4 [io 0x0000-0x0cf7] [ 0.407899] pci_bus 0000:05: resource 5 [io 0x0d00-0xffff] [ 0.407901] pci_bus 0000:05: resource 6 [mem 0x000a0000-0x000bffff] [ 0.407903] pci_bus 0000:05: resource 7 [mem 0x000d0000-0x000dffff] [ 0.407905] pci_bus 0000:05: resource 8 [mem 0xc0000000-0xdfffffff] [ 0.407907] pci_bus 0000:05: resource 9 [mem 0xf0000000-0xfed8ffff] [ 0.407944] NET: Registered protocol family 2 [ 0.408154] IP route cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.409712] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 0.414801] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 0.415428] TCP: Hash tables configured (established 524288 bind 65536) [ 0.415431] TCP reno registered [ 0.415446] UDP hash table entries: 4096 (order: 5, 131072 bytes) [ 0.415556] UDP-Lite hash table entries: 4096 (order: 5, 131072 bytes) [ 0.415744] NET: Registered protocol family 1 [ 0.415932] pci 0000:01:00.0: Boot video device [ 0.415944] PCI: CLS 32 bytes, default 64 [ 0.415946] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) [ 0.415948] Placing 64MB software IO TLB between ffff880002122000 - ffff880006122000 [ 0.415950] software IO TLB at phys 0x2122000 - 0x6122000 [ 0.416127] Scanning for low memory corruption every 60 seconds [ 0.416255] audit: initializing netlink socket (disabled) [ 0.416265] type=2000 audit(1279298202.400:1): initialized [ 0.428539] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.429716] VFS: Disk quotas dquot_6.5.2 [ 0.429765] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.430246] fuse init (API version 7.14) [ 0.430314] msgmni has been set to 11940 [ 0.430490] alg: No test for stdrng (krng) [ 0.430530] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.430533] io scheduler noop registered [ 0.430535] io scheduler deadline registered [ 0.430565] io scheduler cfq registered (default) [ 0.430661] pcieport 0000:00:01.0: setting latency timer to 64 [ 0.430683] alloc irq_desc for 40 on node -1 [ 0.430685] alloc kstat_irqs on node -1 [ 0.430693] pcieport 0000:00:01.0: irq 40 for MSI/MSI-X [ 0.430747] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.430775] alloc irq_desc for 41 on node -1 [ 0.430776] alloc kstat_irqs on node -1 [ 0.430782] pcieport 0000:00:1c.0: irq 41 for MSI/MSI-X [ 0.430844] pcieport 0000:00:1c.1: setting latency timer to 64 [ 0.430871] alloc irq_desc for 42 on node -1 [ 0.430873] alloc kstat_irqs on node -1 [ 0.430878] pcieport 0000:00:1c.1: irq 42 for MSI/MSI-X [ 0.430947] pcieport 0000:00:1c.5: setting latency timer to 64 [ 0.430978] alloc irq_desc for 43 on node -1 [ 0.430979] alloc kstat_irqs on node -1 [ 0.430985] pcieport 0000:00:1c.5: irq 43 for MSI/MSI-X [ 0.431063] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.431143] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.431245] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 0.431249] ACPI: Power Button [PWRB] [ 0.431285] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 [ 0.431287] ACPI: Power Button [PWRF] [ 0.431523] ACPI: acpi_idle registered with cpuidle [ 0.433573] ERST: Table is not found! [ 0.434761] Linux agpgart interface v0.103 [ 0.435028] vesafb: framebuffer at 0xfb000000, mapped to 0xffffc90011800000, using 1216k, total 1216k [ 0.435031] vesafb: mode is 640x480x32, linelength=2560, pages=0 [ 0.435032] vesafb: scrolling: redraw [ 0.435034] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0 [ 0.447641] Console: switching to colour frame buffer device 80x30 [ 0.460234] fb0: VESA VGA frame buffer device [ 0.460291] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.460406] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 0.460705] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 0.461708] brd: module loaded [ 0.462098] loop: module loaded [ 0.462276] ata_piix 0000:00:1f.2: version 2.13 [ 0.462296] alloc irq_desc for 19 on node -1 [ 0.462298] alloc kstat_irqs on node -1 [ 0.462308] ata_piix 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.462313] ata_piix 0000:00:1f.2: MAP [ P0 P2 P1 P3 ] [ 0.462356] ata_piix 0000:00:1f.2: setting latency timer to 64 [ 0.462441] scsi0 : ata_piix [ 0.462498] scsi1 : ata_piix [ 0.463949] ata1: SATA max UDMA/133 cmd 0xb000 ctl 0xac00 bmdma 0xa480 irq 19 [ 0.463954] ata2: SATA max UDMA/133 cmd 0xa880 ctl 0xa800 bmdma 0xa488 irq 19 [ 0.463974] ata_piix 0000:00:1f.5: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.463978] ata_piix 0000:00:1f.5: MAP [ P0 -- P1 -- ] [ 0.464032] ata_piix 0000:00:1f.5: setting latency timer to 64 [ 0.464072] scsi2 : ata_piix [ 0.464116] scsi3 : ata_piix [ 0.465130] ata3: SATA max UDMA/133 cmd 0xa000 ctl 0x9c00 bmdma 0x9480 irq 19 [ 0.465134] ata4: SATA max UDMA/133 cmd 0x9880 ctl 0x9800 bmdma 0x9488 irq 19 [ 0.465181] pata_acpi 0000:02:00.1: enabling device (0000 -> 0001) [ 0.465187] pata_acpi 0000:02:00.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 0.465217] pata_acpi 0000:02:00.1: setting latency timer to 64 [ 0.465230] pata_acpi 0000:02:00.1: PCI INT B disabled [ 0.465462] Fixed MDIO Bus: probed [ 0.465489] PPP generic driver version 2.4.2 [ 0.465528] tun: Universal TUN/TAP device driver, 1.6 [ 0.465530] tun: (C) 1999-2004 Max Krasnyansky [ 0.465610] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.465627] alloc irq_desc for 18 on node -1 [ 0.465629] alloc kstat_irqs on node -1 [ 0.465635] ehci_hcd 0000:00:1a.7: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.465662] ehci_hcd 0000:00:1a.7: setting latency timer to 64 [ 0.465665] ehci_hcd 0000:00:1a.7: EHCI Host Controller [ 0.465690] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 1 [ 0.465718] ehci_hcd 0000:00:1a.7: debug port 1 [ 0.469598] ehci_hcd 0000:00:1a.7: cache line size of 32 is not supported [ 0.469617] ehci_hcd 0000:00:1a.7: irq 18, io mem 0xf9fffc00 [ 0.489966] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00 [ 0.490133] hub 1-0:1.0: USB hub found [ 0.490138] hub 1-0:1.0: 6 ports detected [ 0.490213] alloc irq_desc for 23 on node -1 [ 0.490215] alloc kstat_irqs on node -1 [ 0.490223] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.490249] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 0.490252] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 0.490302] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 2 [ 0.490329] ehci_hcd 0000:00:1d.7: debug port 1 [ 0.494208] ehci_hcd 0000:00:1d.7: cache line size of 32 is not supported [ 0.494227] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xf9fff800 [ 0.509941] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 0.510071] hub 2-0:1.0: USB hub found [ 0.510076] hub 2-0:1.0: 6 ports detected [ 0.510154] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.510169] uhci_hcd: USB Universal Host Controller Interface driver [ 0.510240] uhci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.510248] uhci_hcd 0000:00:1a.0: setting latency timer to 64 [ 0.510251] uhci_hcd 0000:00:1a.0: UHCI Host Controller [ 0.510283] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 3 [ 0.510322] uhci_hcd 0000:00:1a.0: irq 16, io base 0x0000bc00 [ 0.510415] hub 3-0:1.0: USB hub found [ 0.510419] hub 3-0:1.0: 2 ports detected [ 0.510466] alloc irq_desc for 21 on node -1 [ 0.510468] alloc kstat_irqs on node -1 [ 0.510474] uhci_hcd 0000:00:1a.1: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 0.510479] uhci_hcd 0000:00:1a.1: setting latency timer to 64 [ 0.510482] uhci_hcd 0000:00:1a.1: UHCI Host Controller [ 0.510506] uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 4 [ 0.510535] uhci_hcd 0000:00:1a.1: irq 21, io base 0x0000b880 [ 0.510627] hub 4-0:1.0: USB hub found [ 0.510630] hub 4-0:1.0: 2 ports detected [ 0.510676] uhci_hcd 0000:00:1a.2: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 0.510681] uhci_hcd 0000:00:1a.2: setting latency timer to 64 [ 0.510683] uhci_hcd 0000:00:1a.2: UHCI Host Controller [ 0.510707] uhci_hcd 0000:00:1a.2: new USB bus registered, assigned bus number 5 [ 0.510728] uhci_hcd 0000:00:1a.2: irq 19, io base 0x0000b800 [ 0.510818] hub 5-0:1.0: USB hub found [ 0.510821] hub 5-0:1.0: 2 ports detected [ 0.510866] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.510871] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 0.510874] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 0.510906] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 6 [ 0.510927] uhci_hcd 0000:00:1d.0: irq 23, io base 0x0000b480 [ 0.511023] hub 6-0:1.0: USB hub found [ 0.511026] hub 6-0:1.0: 2 ports detected [ 0.511069] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.511074] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 0.511077] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 0.511107] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 7 [ 0.511127] uhci_hcd 0000:00:1d.1: irq 19, io base 0x0000b400 [ 0.511213] hub 7-0:1.0: USB hub found [ 0.511216] hub 7-0:1.0: 2 ports detected [ 0.511259] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.511263] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 0.511266] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 0.511299] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 8 [ 0.511320] uhci_hcd 0000:00:1d.2: irq 18, io base 0x0000b080 [ 0.511409] hub 8-0:1.0: USB hub found [ 0.511412] hub 8-0:1.0: 2 ports detected [ 0.511523] PNP: PS/2 Controller [PNP0303:PS2K,PNP0f03:PS2M] at 0x60,0x64 irq 1,12 [ 0.513000] Freeing initrd memory: 10576k freed [ 0.513733] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.513763] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.514072] mice: PS/2 mouse device common for all mice [ 0.514224] rtc_cmos 00:03: RTC can wake from S4 [ 0.514304] rtc_cmos 00:03: rtc core: registered rtc_cmos as rtc0 [ 0.514340] rtc0: alarms up to one month, y3k, 114 bytes nvram, hpet irqs [ 0.514506] device-mapper: uevent: version 1.0.3 [ 0.514661] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 0.514742] device-mapper: multipath: version 1.1.1 loaded [ 0.514747] device-mapper: multipath round-robin: version 1.0.0 loaded [ 0.514928] cpuidle: using governor ladder [ 0.514930] cpuidle: using governor menu [ 0.515243] TCP cubic registered [ 0.515366] NET: Registered protocol family 10 [ 0.515790] lo: Disabled Privacy Extensions [ 0.515981] NET: Registered protocol family 17 [ 0.516895] PM: Resume from disk failed. [ 0.516921] registered taskstats version 1 [ 0.517358] Magic number: 2:486:641 [ 0.517570] rtc_cmos 00:03: setting system clock to 2010-07-16 16:36:42 UTC (1279298202) [ 0.517574] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.517576] EDD information not available. [ 0.532103] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input2 [ 0.809848] usb 1-3: new high speed USB device using ehci_hcd and address 2 [ 0.830688] ata4: SATA link down (SStatus 0 SControl 300) [ 0.841386] ata3: SATA link down (SStatus 0 SControl 300) [ 0.960640] hub 1-3:1.0: USB hub found [ 0.960723] hub 1-3:1.0: 7 ports detected [ 1.250128] usb 1-3.3: new low speed USB device using ehci_hcd and address 3 [ 1.330067] ata2.00: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.330083] ata2.01: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.330246] ata1.00: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.330257] ata1.01: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 1.372123] ata1.00: ATA-8: WDC WD5000AAKS-00A7B2, 01.03B01, max UDMA/133 [ 1.372128] ata1.00: 976773168 sectors, multi 16: LBA48 NCQ (depth 0/32) [ 1.372165] ata1.01: ATAPI: TSSTcorp CDDVDW SH-S223L, SB01, max UDMA/100 [ 1.385996] ata2.00: ATA-7: WDC WD5000KS-00MNB0, 07.02E07, max UDMA/133 [ 1.386002] ata2.00: 976773168 sectors, multi 16: LBA48 NCQ (depth 0/32) [ 1.386175] ata2.01: ATA-8: WDC WD1002FAEX-00Z3A0, 05.01D05, max UDMA/133 [ 1.386178] ata2.01: 1953525168 sectors, multi 16: LBA48 NCQ (depth 0/32) [ 1.411113] ata2.00: configured for UDMA/133 [ 1.412157] ata1.00: configured for UDMA/133 [ 1.431908] ata2.01: configured for UDMA/133 [ 1.451410] ata1.01: configured for UDMA/100 [ 1.451908] scsi 0:0:0:0: Direct-Access ATA WDC WD5000AAKS-0 01.0 PQ: 0 ANSI: 5 [ 1.452021] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/465 GiB) [ 1.452026] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 1.452065] sd 0:0:0:0: [sda] Write Protect is off [ 1.452068] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.452461] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.452680] scsi 0:0:1:0: CD-ROM TSSTcorp CDDVDW SH-S223L SB01 PQ: 0 ANSI: 5 [ 1.454109] sda: sda1 [ 1.468001] sr0: scsi3-mmc drive: 48x/48x writer dvd-ram cd/rw xa/form2 cdda tray [ 1.468006] Uniform CD-ROM driver Revision: 3.20 [ 1.468131] sr 0:0:1:0: Attached scsi CD-ROM sr0 [ 1.468136] sd 0:0:0:0: [sda] Attached SCSI disk [ 1.468181] sr 0:0:1:0: Attached scsi generic sg1 type 5 [ 1.468263] scsi 1:0:0:0: Direct-Access ATA WDC WD5000KS-00M 07.0 PQ: 0 ANSI: 5 [ 1.468340] sd 1:0:0:0: Attached scsi generic sg2 type 0 [ 1.468407] scsi 1:0:1:0: Direct-Access ATA WDC WD1002FAEX-0 05.0 PQ: 0 ANSI: 5 [ 1.468410] sd 1:0:0:0: [sdb] 976773168 512-byte logical blocks: (500 GB/465 GiB) [ 1.468453] sd 1:0:0:0: [sdb] Write Protect is off [ 1.468455] sd 1:0:0:0: [sdb] Mode Sense: 00 3a 00 00 [ 1.468476] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.468487] sd 1:0:1:0: Attached scsi generic sg3 type 0 [ 1.468557] sd 1:0:1:0: [sdc] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB) [ 1.468593] sdb: [ 1.468602] sd 1:0:1:0: [sdc] Write Protect is off [ 1.468605] sd 1:0:1:0: [sdc] Mode Sense: 00 3a 00 00 [ 1.476720] sd 1:0:1:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.476726] sdb1 < sdb5 sdb6 > [ 1.502882] sdc: sdc1 [ 1.518143] sd 1:0:0:0: [sdb] Attached SCSI disk [ 1.518247] sd 1:0:1:0: [sdc] Attached SCSI disk [ 1.518266] Freeing unused kernel memory: 904k freed [ 1.518593] Write protecting the kernel read-only data: 10240k [ 1.518742] Freeing unused kernel memory: 416k freed [ 1.518984] Freeing unused kernel memory: 1604k freed [ 1.531553] udev: starting version 151 [ 1.576076] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded [ 1.576098] r8169 0000:04:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 1.576145] r8169 0000:04:00.0: setting latency timer to 64 [ 1.576186] alloc irq_desc for 44 on node -1 [ 1.576188] alloc kstat_irqs on node -1 [ 1.576202] r8169 0000:04:00.0: irq 44 for MSI/MSI-X [ 1.576604] r8169 0000:04:00.0: eth0: RTL8168c/8111c at 0xffffc90000c74000, 00:21:85:1d:72:73, XID 1c4000c0 IRQ 44 [ 1.592399] ahci 0000:02:00.0: version 3.0 [ 1.592421] ahci 0000:02:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.613163] ahci 0000:02:00.0: AHCI 0001.0000 32 slots 2 ports 3 Gbps 0x3 impl SATA mode [ 1.613167] ahci 0000:02:00.0: flags: 64bit ncq pm led clo pmp pio slum part [ 1.613173] ahci 0000:02:00.0: setting latency timer to 64 [ 1.628368] scsi4 : ahci [ 1.638474] Floppy drive(s): fd0 is 1.44M [ 1.642623] scsi5 : ahci [ 1.642785] ata5: SATA max UDMA/133 abar m8192@0xfeafe000 port 0xfeafe100 irq 16 [ 1.642789] ata6: SATA max UDMA/133 abar m8192@0xfeafe000 port 0xfeafe180 irq 16 [ 1.642945] pata_jmicron 0000:02:00.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 1.642978] pata_jmicron 0000:02:00.1: setting latency timer to 64 [ 1.652512] scsi6 : pata_jmicron [ 1.655028] FDC 0 is a post-1991 82077 [ 1.657657] scsi7 : pata_jmicron [ 1.658207] ata7: PATA max UDMA/100 cmd 0xdc00 ctl 0xd880 bmdma 0xd400 irq 17 [ 1.658210] ata8: PATA max UDMA/100 cmd 0xd800 ctl 0xd480 bmdma 0xd408 irq 17 [ 1.857504] ata7.00: ATA-7: ST3500630A, 3.AAE, max UDMA/100 [ 1.857510] ata7.00: 976773168 sectors, multi 16: LBA48 [ 1.917216] EXT4-fs (sdb5): mounted filesystem with ordered data mode. Opts: (null) [ 1.940744] ata7.00: configured for UDMA/100 [ 1.990047] ata6: SATA link down (SStatus 0 SControl 300) [ 1.990083] ata5: SATA link down (SStatus 0 SControl 300) [ 2.010159] scsi 6:0:0:0: Direct-Access ATA ST3500630A 3.AA PQ: 0 ANSI: 5 [ 2.010276] sd 6:0:0:0: [sdd] 976773168 512-byte logical blocks: (500 GB/465 GiB) [ 2.010306] sd 6:0:0:0: Attached scsi generic sg4 type 0 [ 2.010322] sd 6:0:0:0: [sdd] Write Protect is off [ 2.010325] sd 6:0:0:0: [sdd] Mode Sense: 00 3a 00 00 [ 2.010353] sd 6:0:0:0: [sdd] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.010490] sdd: sdd1 [ 2.030447] sd 6:0:0:0: [sdd] Attached SCSI disk [ 14.020566] udev: starting version 151 [ 14.041577] Adding 9765884k swap on /dev/sdb6. Priority:-1 extents:1 across:9765884k [ 14.097692] lp: driver loaded but no devices found [ 14.282553] parport_pc 00:08: reported by Plug and Play ACPI [ 14.282598] parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE] [ 14.298141] [drm] Initialized drm 1.1.0 20060810 [ 14.313313] ppdev: user-space parallel port driver [ 14.333836] type=1400 audit(1279312616.306:2): operation="profile_load" pid=684 name="/sbin/dhclient3" pid=684 comm="apparmor_parser" [ 14.334427] type=1400 audit(1279312616.306:3): operation="profile_load" pid=684 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=684 comm="apparmor_parser" [ 14.334735] type=1400 audit(1279312616.306:4): operation="profile_load" pid=684 name="/usr/lib/connman/scripts/dhclient-script" pid=684 comm="apparmor_parser" [ 14.361485] lp0: using parport0 (interrupt-driven). [ 14.382469] nouveau 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 14.382475] nouveau 0000:01:00.0: setting latency timer to 64 [ 14.399071] [drm] nouveau 0000:01:00.0: Detected an NV50 generation card (0x096d80c1) [ 14.399076] checking generic (fb000000 130000) vs hw (c0000000 20000000) [ 14.399078] checking generic (fb000000 130000) vs hw (fa000000 2000000) [ 14.399080] fb: conflicting fb hw usage nouveaufb vs VESA VGA - removing generic driver [ 14.399591] Console: switching to colour dummy device 80x25 [ 14.407145] [drm] nouveau 0000:01:00.0: Attempting to load BIOS image from ACPI [ 14.407149] [drm] nouveau 0000:01:00.0: ... BIOS signature not found [ 14.407150] [drm] nouveau 0000:01:00.0: Attempting to load BIOS image from PRAMIN [ 14.415927] alloc irq_desc for 22 on node -1 [ 14.415930] alloc kstat_irqs on node -1 [ 14.415940] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 14.416009] alloc irq_desc for 45 on node -1 [ 14.416011] alloc kstat_irqs on node -1 [ 14.416025] HDA Intel 0000:00:1b.0: irq 45 for MSI/MSI-X [ 14.416066] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 14.456456] [drm] nouveau 0000:01:00.0: ... appears to be valid [ 14.456461] [drm] nouveau 0000:01:00.0: BIT BIOS found [ 14.456463] [drm] nouveau 0000:01:00.0: Bios version 62.94.71.00 [ 14.456467] [drm] nouveau 0000:01:00.0: TMDS table revision 2.0 not currently supported [ 14.456469] [drm] nouveau 0000:01:00.0: Found Display Configuration Block version 4.0 [ 14.456472] [drm] nouveau 0000:01:00.0: Raw DCB entry 0: 02000300 00000028 [ 14.456474] [drm] nouveau 0000:01:00.0: Raw DCB entry 1: 01000302 00020030 [ 14.456476] [drm] nouveau 0000:01:00.0: Raw DCB entry 2: 02011312 00020010 [ 14.456478] [drm] nouveau 0000:01:00.0: Raw DCB entry 3: 04022320 00000028 [ 14.456481] [drm] nouveau 0000:01:00.0: DCB connector table: VHER 0x40 5 16 4 [ 14.456483] [drm] nouveau 0000:01:00.0: 0: 0x00001030: type 0x30 idx 0 tag 0x07 [ 14.456486] [drm] nouveau 0000:01:00.0: 1: 0x00002161: type 0x61 idx 1 tag 0x08 [ 14.456488] [drm] nouveau 0000:01:00.0: 2: 0x00000200: type 0x00 idx 2 tag 0xff [ 14.456497] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 0 at offset 0xD451 [ 14.500824] hda_codec: ALC888: BIOS auto-probing. [ 14.510810] BUG: unable to handle kernel NULL pointer dereference at (null) [ 14.510820] IP: [] __mutex_lock_slowpath+0xd2/0x190 [ 14.510829] PGD 1b4837067 PUD 1b4836067 PMD 0 [ 14.510834] Oops: 0002 [#1] SMP [ 14.510837] last sysfs file: /sys/module/snd_hda_codec/initstate [ 14.510842] CPU 0 [ 14.510843] Modules linked in: snd_hda_codec_realtek snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm snd_seq_midi nouveau(+) snd_rawmidi snd_seq_midi_event snd_seq ttm snd_timer snd_seq_device drm_kms_helper ppdev parport_pc snd psmouse serio_raw drm i2c_algo_bit soundcore intel_agp snd_page_alloc lp parport hid floppy pata_jmicron ahci libahci r8169 mii [ 14.510873] [ 14.510876] Pid: 342, comm: plymouthd Not tainted 2.6.35-8-generic #13-Ubuntu P45 Neo3 (MS-7514)/MS-7514 [ 14.510880] RIP: 0010:[] [] __mutex_lock_slowpath+0xd2/0x190 [ 14.510886] RSP: 0018:ffff8801b87d9d98 EFLAGS: 00010246 [ 14.510889] RAX: 0000000000000000 RBX: ffff8801b4ab4418 RCX: 0000000000000006 [ 14.510892] RDX: ffff8801b87d9da8 RSI: 0000000000000000 RDI: ffff8801b4ab441c [ 14.510896] RBP: ffff8801b87d9df8 R08: 0000000000000156 R09: 000000000000e200 [ 14.510899] R10: fffffffffffffff0 R11: 0000000000000246 R12: ffff8801b49644a0 [ 14.510903] R13: ffff8801b4ab441c R14: 00000000ffffffff R15: ffff8801b4ab4420 [ 14.510907] FS: 00007f92f737b700(0000) GS:ffff880001e00000(0000) knlGS:0000000000000000 [ 14.510912] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 14.510915] CR2: 0000000000000000 CR3: 00000001b58a8000 CR4: 00000000000406f0 [ 14.510919] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 14.510922] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 14.510926] Process plymouthd (pid: 342, threadinfo ffff8801b87d8000, task ffff8801b49644a0) [ 14.510931] Stack: [ 14.510932] ffff880100000000 000000000000e200 ffff8801b4ab4420 0000000000000000 [ 14.510938] <0> 0000000000000000 ffffffffa00a7240 ffffffffa00a4f60 ffff8801b4ab4418 [ 14.510944] <0> ffff8801aab95840 ffff8801b4ab4418 ffff8801b4ab4320 ffff8801aab958e8 [ 14.510950] Call Trace: [ 14.510970] [] ? drm_gem_object_release_handle+0x0/0x40 [drm] [ 14.510980] [] ? drm_version+0x0/0xb0 [drm] [ 14.510984] [] mutex_lock+0x2b/0x50 [ 14.510996] [] drm_fb_release+0x2f/0xb0 [drm] [ 14.511005] [] drm_release+0x468/0x550 [drm] [ 14.511010] [] __fput+0xf5/0x210 [ 14.511014] [] fput+0x25/0x30 [ 14.511018] [] filp_close+0x5d/0x90 [ 14.511022] [] sys_close+0xb7/0x120 [ 14.511028] [] system_call_fastpath+0x16/0x1b [ 14.511031] Code: 00 4c 8d 6b 04 4c 8d 7b 08 41 be ff ff ff ff 4c 89 ef e8 22 14 00 00 48 8b 43 10 48 8d 55 b0 48 89 53 10 4c 89 7d b0 48 89 45 b8 <48> 89 10 44 89 f0 4c 89 65 c0 87 03 83 f8 01 75 24 eb 2c 0f 1f [ 14.511066] RIP [] __mutex_lock_slowpath+0xd2/0x190 [ 14.511071] RSP [ 14.511073] CR2: 0000000000000000 [ 14.511115] ---[ end trace e18bfc47b3114fe7 ]--- [ 14.550162] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 1 at offset 0xD8B7 [ 14.590079] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 2 at offset 0xE907 [ 14.590095] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 3 at offset 0xEA28 [ 14.592112] usbcore: registered new interface driver hiddev [ 14.610096] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 4 at offset 0xED4F [ 14.610104] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table at offset 0xEDB4 [ 14.641334] [drm] nouveau 0000:01:00.0: 0xEDB4: Condition still not met after 20ms, skipping following opcodes [ 14.641357] [drm] nouveau 0000:01:00.0: 0xC314: parsing output script 0 [ 14.641370] [drm] nouveau 0000:01:00.0: 0xC314: parsing output script 0 [ 14.641388] [drm] nouveau 0000:01:00.0: Detected 512MiB VRAM [ 14.712087] [TTM] Zone kernel: Available graphics memory: 3063634 kiB. [ 14.712092] [TTM] Zone dma32: Available graphics memory: 2097152 kiB. [ 14.712096] [TTM] Initializing pool allocator. [ 14.735678] [drm] nouveau 0000:01:00.0: 512 MiB GART (aperture) [ 14.736473] mtrr: type mismatch for c0000000,20000000 old: write-back new: write-combining [ 14.736736] [drm] nouveau 0000:01:00.0: Allocating FIFO number 1 [ 14.742250] [drm] nouveau 0000:01:00.0: nouveau_channel_alloc: initialised FIFO 1 [ 14.743059] [drm] nouveau 0000:01:00.0: Detected a DAC output [ 14.743066] [drm] nouveau 0000:01:00.0: Detected a TMDS output [ 14.743069] [drm] nouveau 0000:01:00.0: Detected a TMDS output [ 14.743072] [drm] nouveau 0000:01:00.0: Detected a DAC output [ 14.743076] [drm] nouveau 0000:01:00.0: Detected a DVI-I connector [ 14.743153] [drm] nouveau 0000:01:00.0: Detected a HDMI connector [ 14.743228] [drm] nouveau 0000:01:00.0: Detected a VGA connector [ 14.746583] EXT4-fs (sdb5): re-mounted. Opts: errors=remount-ro [ 14.926470] [drm] nouveau 0000:01:00.0: allocated 1280x1024 fb: 0x40250000, bo ffff8801aa34f400 [ 14.926950] Console: switching to colour frame buffer device 160x64 [ 14.929239] fb0: nouveaufb frame buffer device [ 14.929251] drm: registered panic notifier [ 14.929460] Slow work thread pool: Starting up [ 14.929491] [drm] nouveau 0000:01:00.0: 0x11B5: parsing clock script 0 [ 14.929552] Slow work thread pool: Ready [ 14.929562] [drm] Initialized nouveau 0.0.16 20090420 for 0000:01:00.0 on minor 0 [ 14.931805] vga16fb: initializing [ 14.931820] vga16fb: mapped to 0xffff8800000a0000 [ 14.931927] fb1: VGA16 VGA frame buffer device [ 14.998001] EXT4-fs (sdc1): mounted filesystem with ordered data mode. Opts: (null) [ 15.004225] input: ImExPS/2 Generic Explorer Mouse as /devices/platform/i8042/serio1/input/input3 [ 15.058243] EXT4-fs (sdd1): mounted filesystem with ordered data mode. Opts: (null) [ 15.128765] generic-usb 0003:051D:0002.0001: hiddev96,hidraw0: USB HID v1.10 Device [American Power Conversion Back-UPS XS 1200 FW:8.g1 .D USB FW:g1 ] on usb-0000:00:1a.7-3.3/input0 [ 15.128811] usbcore: registered new interface driver usbhid [ 15.128819] usbhid: USB HID core driver [ 15.484298] type=1400 audit(1279312617.456:5): operation="profile_load" pid=945 name="/usr/share/gdm/guest-session/Xsession" pid=945 comm="apparmor_parser" [ 15.485772] type=1400 audit(1279312617.456:6): operation="profile_replace" pid=946 name="/sbin/dhclient3" pid=946 comm="apparmor_parser" [ 15.486327] type=1400 audit(1279312617.456:7): operation="profile_replace" pid=946 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=946 comm="apparmor_parser" [ 15.486630] type=1400 audit(1279312617.456:8): operation="profile_replace" pid=946 name="/usr/lib/connman/scripts/dhclient-script" pid=946 comm="apparmor_parser" [ 15.489342] type=1400 audit(1279312617.456:9): operation="profile_load" pid=947 name="/usr/bin/evince" pid=947 comm="apparmor_parser" [ 15.496635] type=1400 audit(1279312617.466:10): operation="profile_load" pid=947 name="/usr/bin/evince-previewer" pid=947 comm="apparmor_parser" [ 15.501121] type=1400 audit(1279312617.476:11): operation="profile_load" pid=947 name="/usr/bin/evince-thumbnailer" pid=947 comm="apparmor_parser" [ 15.507766] r8169 0000:04:00.0: eth0: link up [ 15.507786] r8169 0000:04:00.0: eth0: link up Bug: 611056 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-11-generic (buildd@yellow) (gcc version 4.4.5 20100723 (prerelease) (Ubuntu/Linaro 4.4.4-7ubuntu3) ) #16-Ubuntu SMP Sat Jul 24 21:37:44 UTC 2010 (Ubuntu 2.6.35-11.16-generic 2.6.35-rc5) [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-2.6.35-11-generic root=/dev/mapper/fornost-root ro quiet [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009ec00 (usable) [ 0.000000] BIOS-e820: 000000000009ec00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e4c00 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000bf780000 (usable) [ 0.000000] BIOS-e820: 00000000bf780000 - 00000000bf798000 (ACPI data) [ 0.000000] BIOS-e820: 00000000bf798000 - 00000000bf7dc000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000bf7dc000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ffe00000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 00000001c0000000 (usable) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI 2.5 present. [ 0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it. [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0x1c0000 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-E3FFF write-protect [ 0.000000] E4000-EBFFF write-through [ 0.000000] EC000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 1C0000000 mask FC0000000 uncachable [ 0.000000] 1 base 000000000 mask E00000000 write-back [ 0.000000] 2 base 0C0000000 mask FC0000000 uncachable [ 0.000000] 3 base 0BF800000 mask FFF800000 uncachable [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820 update range: 00000000bf800000 - 0000000100000000 (usable) ==> (reserved) [ 0.000000] last_pfn = 0xbf780 max_arch_pfn = 0x400000000 [ 0.000000] Scanning 0 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009ec00 (usable) [ 0.000000] modified: 000000000009ec00 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e4c00 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 00000000bf780000 (usable) [ 0.000000] modified: 00000000bf780000 - 00000000bf798000 (ACPI data) [ 0.000000] modified: 00000000bf798000 - 00000000bf7dc000 (ACPI NVS) [ 0.000000] modified: 00000000bf7dc000 - 00000000c0000000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000ffe00000 - 0000000100000000 (reserved) [ 0.000000] modified: 0000000100000000 - 00000001c0000000 (usable) [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] found SMP MP-table at [ffff8800000ff780] ff780 [ 0.000000] init_memory_mapping: 0000000000000000-00000000bf780000 [ 0.000000] 0000000000 - 00bf600000 page 2M [ 0.000000] 00bf600000 - 00bf780000 page 4k [ 0.000000] kernel direct mapping tables up to bf780000 @ 16000-1b000 [ 0.000000] init_memory_mapping: 0000000100000000-00000001c0000000 [ 0.000000] 0100000000 - 01c0000000 page 2M [ 0.000000] kernel direct mapping tables up to 1c0000000 @ 19000-21000 [ 0.000000] RAMDISK: 374a9000 - 37ff0000 [ 0.000000] ACPI: RSDP 00000000000fb250 00024 (v02 ACPIAM) [ 0.000000] ACPI: XSDT 00000000bf780100 00064 (v01 042409 XSDT1739 20090424 MSFT 00000097) [ 0.000000] ACPI: FACP 00000000bf780290 000F4 (v03 042409 FACP1739 20090424 MSFT 00000097) [ 0.000000] ACPI: DSDT 00000000bf7804b0 0B5EC (v01 A1265 A1265001 00000001 INTL 20060113) [ 0.000000] ACPI: FACS 00000000bf798000 00040 [ 0.000000] ACPI: APIC 00000000bf780390 000D8 (v01 042409 APIC1739 20090424 MSFT 00000097) [ 0.000000] ACPI: MCFG 00000000bf780470 0003C (v01 042409 OEMMCFG 20090424 MSFT 00000097) [ 0.000000] ACPI: OEMB 00000000bf798040 00072 (v01 042409 OEMB1739 20090424 MSFT 00000097) [ 0.000000] ACPI: HPET 00000000bf78f4b0 00038 (v01 042409 OEMHPET 20090424 MSFT 00000097) [ 0.000000] ACPI: DMAR 00000000bf7980c0 00138 (v01 AMI OEMDMAR 00000001 MSFT 00000097) [ 0.000000] ACPI: OSFR 00000000bf78f4f0 000B0 (v01 042409 OEMOSFR 20090424 MSFT 00000097) [ 0.000000] ACPI: TCPA 00000000bf78f5a0 00032 (v01 042409 TBLOEMID 00000001 MSFT 00000097) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-00000001c0000000 [ 0.000000] Initmem setup node 0 0000000000000000-00000001c0000000 [ 0.000000] NODE_DATA [0000000100000000 - 0000000100004fff] [ 0.000000] [ffffea0000000000-ffffea00061fffff] PMD -> [ffff880100200000-ffff8801055fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal 0x00100000 -> 0x001c0000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[3] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009e [ 0.000000] 0: 0x00000100 -> 0x000bf780 [ 0.000000] 0: 0x00100000 -> 0x001c0000 [ 0.000000] On node 0 totalpages: 1570574 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3926 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 14280 pages used for memmap [ 0.000000] DMA32 zone: 765880 pages, LIFO batch:31 [ 0.000000] Normal zone: 10752 pages used for memmap [ 0.000000] Normal zone: 775680 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x808 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x02] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x04] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x06] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x05] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x06] lapic_id[0x03] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x07] lapic_id[0x05] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x08] lapic_id[0x07] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x09] lapic_id[0x88] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0a] lapic_id[0x89] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0b] lapic_id[0x8a] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0c] lapic_id[0x8b] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0d] lapic_id[0x8c] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0e] lapic_id[0x8d] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0f] lapic_id[0x8e] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x10] lapic_id[0x8f] disabled) [ 0.000000] ACPI: IOAPIC (id[0x08] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 8, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: IOAPIC (id[0x09] address[0xfec8a000] gsi_base[24]) [ 0.000000] IOAPIC[1]: apic_id 9, version 32, address 0xfec8a000, GSI 24-47 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a301 base: 0xfed00000 [ 0.000000] SMP: Allowing 16 CPUs, 8 hotplug CPUs [ 0.000000] nr_irqs_gsi: 64 [ 0.000000] early_res array is doubled to 64 at [1c000 - 1c7ff] [ 0.000000] PM: Registered nosave memory: 000000000009e000 - 000000000009f000 [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e5000 [ 0.000000] PM: Registered nosave memory: 00000000000e5000 - 0000000000100000 [ 0.000000] PM: Registered nosave memory: 00000000bf780000 - 00000000bf798000 [ 0.000000] PM: Registered nosave memory: 00000000bf798000 - 00000000bf7dc000 [ 0.000000] PM: Registered nosave memory: 00000000bf7dc000 - 00000000c0000000 [ 0.000000] PM: Registered nosave memory: 00000000c0000000 - 00000000fee00000 [ 0.000000] PM: Registered nosave memory: 00000000fee00000 - 00000000fee01000 [ 0.000000] PM: Registered nosave memory: 00000000fee01000 - 00000000ffe00000 [ 0.000000] PM: Registered nosave memory: 00000000ffe00000 - 0000000100000000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:3ee00000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:16 nr_node_ids:1 [ 0.000000] early_res array is doubled to 128 at [1c800 - 1d7ff] [ 0.000000] PERCPU: Embedded 30 pages/cpu @ffff880001e00000 s91392 r8192 d23296 u131072 [ 0.000000] pcpu-alloc: s91392 r8192 d23296 u131072 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 1545486 [ 0.000000] Policy zone: Normal [ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-2.6.35-11-generic root=/dev/mapper/fornost-root ro quiet [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Subtract (68 early reservations) [ 0.000000] #1 [0001000000 - 0001d20114] TEXT DATA BSS [ 0.000000] #2 [00374a9000 - 0037ff0000] RAMDISK [ 0.000000] #3 [0001d21000 - 0001d21294] BRK [ 0.000000] #4 [00000ff790 - 0000100000] BIOS reserved [ 0.000000] #5 [00000ff780 - 00000ff790] MP-table mpf [ 0.000000] #6 [000009ec00 - 00000f1310] BIOS reserved [ 0.000000] #7 [00000f14c4 - 00000ff780] BIOS reserved [ 0.000000] #8 [00000f1310 - 00000f14c4] MP-table mpc [ 0.000000] #9 [0000010000 - 0000012000] TRAMPOLINE [ 0.000000] #10 [0000012000 - 0000016000] ACPI WAKEUP [ 0.000000] #11 [0000016000 - 0000019000] PGTABLE [ 0.000000] #12 [0000019000 - 000001c000] PGTABLE [ 0.000000] #13 [0100000000 - 0100005000] NODE_DATA [ 0.000000] #14 [0001d212c0 - 0001d222c0] BOOTMEM [ 0.000000] #15 [0001d20140 - 0001d205c0] BOOTMEM [ 0.000000] #16 [0100005000 - 0100006000] BOOTMEM [ 0.000000] #17 [0100006000 - 0100007000] BOOTMEM [ 0.000000] #18 [0100200000 - 0105600000] MEMMAP 0 [ 0.000000] #19 [0001d205c0 - 0001d20740] BOOTMEM [ 0.000000] #20 [0001d222c0 - 0001d3a2c0] BOOTMEM [ 0.000000] #21 [0001d3a2c0 - 0001d522c0] BOOTMEM [ 0.000000] #22 [0001d53000 - 0001d54000] BOOTMEM [ 0.000000] #23 [0001d20740 - 0001d20781] BOOTMEM [ 0.000000] #24 [0001d207c0 - 0001d20846] BOOTMEM [ 0.000000] #25 [0001d20880 - 0001d20ae8] BOOTMEM [ 0.000000] #26 [0001d20b00 - 0001d20b68] BOOTMEM [ 0.000000] #27 [0001d20b80 - 0001d20be8] BOOTMEM [ 0.000000] #28 [0001d20c00 - 0001d20c68] BOOTMEM [ 0.000000] #29 [0001d20c80 - 0001d20ce8] BOOTMEM [ 0.000000] #30 [0001d20d00 - 0001d20d68] BOOTMEM [ 0.000000] #31 [0001d20d80 - 0001d20de8] BOOTMEM [ 0.000000] #32 [0001d20e00 - 0001d20e68] BOOTMEM [ 0.000000] #33 [0001d20e80 - 0001d20ee8] BOOTMEM [ 0.000000] #34 [0001d20f00 - 0001d20f68] BOOTMEM [ 0.000000] #35 [0001d20f80 - 0001d20fe8] BOOTMEM [ 0.000000] #36 [0001d522c0 - 0001d522e0] BOOTMEM [ 0.000000] #37 [0001d52300 - 0001d52320] BOOTMEM [ 0.000000] #38 [0001d52340 - 0001d5238d] BOOTMEM [ 0.000000] #39 [0001d523c0 - 0001d5240d] BOOTMEM [ 0.000000] #40 [0001e00000 - 0001e1e000] BOOTMEM [ 0.000000] #41 [0001e20000 - 0001e3e000] BOOTMEM [ 0.000000] #42 [0001e40000 - 0001e5e000] BOOTMEM [ 0.000000] #43 [0001e60000 - 0001e7e000] BOOTMEM [ 0.000000] #44 [0001e80000 - 0001e9e000] BOOTMEM [ 0.000000] #45 [0001ea0000 - 0001ebe000] BOOTMEM [ 0.000000] #46 [0001ec0000 - 0001ede000] BOOTMEM [ 0.000000] #47 [0001ee0000 - 0001efe000] BOOTMEM [ 0.000000] #48 [0001f00000 - 0001f1e000] BOOTMEM [ 0.000000] #49 [0001f20000 - 0001f3e000] BOOTMEM [ 0.000000] #50 [0001f40000 - 0001f5e000] BOOTMEM [ 0.000000] #51 [0001f60000 - 0001f7e000] BOOTMEM [ 0.000000] #52 [0001f80000 - 0001f9e000] BOOTMEM [ 0.000000] #53 [0001fa0000 - 0001fbe000] BOOTMEM [ 0.000000] #54 [0001fc0000 - 0001fde000] BOOTMEM [ 0.000000] #55 [0001fe0000 - 0001ffe000] BOOTMEM [ 0.000000] #56 [0001d52440 - 0001d52448] BOOTMEM [ 0.000000] #57 [0001d52480 - 0001d52488] BOOTMEM [ 0.000000] #58 [0001d524c0 - 0001d52500] BOOTMEM [ 0.000000] #59 [0001d52500 - 0001d52580] BOOTMEM [ 0.000000] #60 [0001d52580 - 0001d52690] BOOTMEM [ 0.000000] #61 [0001d526c0 - 0001d52708] BOOTMEM [ 0.000000] #62 [0001d52740 - 0001d52788] BOOTMEM [ 0.000000] #63 [0001d54000 - 0001d5c000] BOOTMEM [ 0.000000] #64 [0001ffe000 - 0005ffe000] BOOTMEM [ 0.000000] #65 [0001d5c000 - 0001d7c000] BOOTMEM [ 0.000000] #66 [0001d7c000 - 0001dbc000] BOOTMEM [ 0.000000] #67 [000001d800 - 0000025800] BOOTMEM [ 0.000000] Memory: 6103100k/7340032k available (5706k kernel code, 1057736k absent, 179196k reserved, 5421k data, 904k init) [ 0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=16, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:4352 nr_irqs:1216 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 62914560 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration failed [ 0.020000] TSC: PIT calibration matches HPET. 1 loops [ 0.020000] Detected 2672.823 MHz processor. [ 0.000007] Calibrating delay loop (skipped), value calculated using timer frequency.. 5345.64 BogoMIPS (lpj=26728230) [ 0.000010] pid_max: default: 32768 minimum: 301 [ 0.000034] Security Framework initialized [ 0.000044] AppArmor: AppArmor initialized [ 0.000045] Yama: becoming mindful. [ 0.000676] Dentry cache hash table entries: 1048576 (order: 11, 8388608 bytes) [ 0.002215] Inode-cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.002856] Mount-cache hash table entries: 256 [ 0.002941] Initializing cgroup subsys ns [ 0.002944] Initializing cgroup subsys cpuacct [ 0.002948] Initializing cgroup subsys memory [ 0.002954] Initializing cgroup subsys devices [ 0.002955] Initializing cgroup subsys freezer [ 0.002957] Initializing cgroup subsys net_cls [ 0.002974] CPU: Physical Processor ID: 0 [ 0.002975] CPU: Processor Core ID: 0 [ 0.002980] mce: CPU supports 9 MCE banks [ 0.002988] CPU0: Thermal monitoring enabled (TM1) [ 0.002994] using mwait in idle threads. [ 0.002996] Performance Events: PEBS fmt1+, Nehalem events, Intel PMU driver. [ 0.003001] ... version: 3 [ 0.003002] ... bit width: 48 [ 0.003003] ... generic registers: 4 [ 0.003004] ... value mask: 0000ffffffffffff [ 0.003005] ... max period: 000000007fffffff [ 0.003006] ... fixed-purpose events: 3 [ 0.003007] ... event mask: 000000070000000f [ 0.004713] ACPI: Core revision 20100428 [ 0.038167] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.038173] ftrace: allocating 22647 entries in 89 pages [ 0.044294] DMAR: Host address width 39 [ 0.044296] DMAR: DRHD base: 0x000000fbfff000 flags: 0x0 [ 0.044303] IOMMU 0: reg_base_addr fbfff000 ver 1:0 cap c9008010e60262 ecap f0207a [ 0.044305] DMAR: DRHD base: 0x000000fbffe000 flags: 0x1 [ 0.044311] IOMMU 1: reg_base_addr fbffe000 ver 1:0 cap c90780106f0462 ecap f020fe [ 0.044313] DMAR: RMRR base: 0x000000000ec000 end: 0x000000000effff [ 0.044315] DMAR: RMRR base: 0x000000bf7dc000 end: 0x000000bf7dbfff [ 0.044316] DMAR: ATSR flags: 0x0 [ 0.044423] IOAPIC id 8 under DRHD base 0xfbffe000 IOMMU 1 [ 0.044425] IOAPIC id 9 under DRHD base 0xfbffe000 IOMMU 1 [ 0.044656] Enabled Interrupt-remapping [ 0.044660] Setting APIC routing to physical flat [ 0.044662] alloc irq_desc for 64 on node 0 [ 0.044663] alloc kstat_irqs on node 0 [ 0.044673] alloc irq_desc for 65 on node 0 [ 0.044674] alloc kstat_irqs on node 0 [ 0.044954] alloc irq_2_iommu on node 0 [ 0.044959] alloc irq_2_iommu on node 0 [ 0.044963] alloc irq_2_iommu on node 0 [ 0.044968] alloc irq_2_iommu on node 0 [ 0.044972] alloc irq_2_iommu on node 0 [ 0.044977] alloc irq_2_iommu on node 0 [ 0.044981] alloc irq_2_iommu on node 0 [ 0.044986] alloc irq_2_iommu on node 0 [ 0.044990] alloc irq_2_iommu on node 0 [ 0.044995] alloc irq_2_iommu on node 0 [ 0.044999] alloc irq_2_iommu on node 0 [ 0.045003] alloc irq_2_iommu on node 0 [ 0.045008] alloc irq_2_iommu on node 0 [ 0.045012] alloc irq_2_iommu on node 0 [ 0.045017] alloc irq_2_iommu on node 0 [ 0.045168] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.145146] CPU0: Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz stepping 05 [ 0.286880] APIC calibration not consistent with PM-Timer: 129ms instead of 100ms [ 0.286883] APIC delta adjusted to PM-Timer: 835226 (1085789) [ 0.287005] Booting Node 0, Processors #1 #2 #3 #4 #5 #6 #7 [ 1.546546] Brought up 8 CPUs [ 1.546549] Total of 8 processors activated (42763.58 BogoMIPS). [ 1.550214] devtmpfs: initialized [ 1.551017] regulator: core version 0.5 [ 1.551039] Time: 23:02:09 Date: 07/28/10 [ 1.551065] NET: Registered protocol family 16 [ 1.551135] Trying to unpack rootfs image as initramfs... [ 1.551146] ACPI: bus type pci registered [ 1.551198] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 1.551201] PCI: not using MMCONFIG [ 1.551202] PCI: Using configuration type 1 for base access [ 1.551772] bio: create slab at 0 [ 1.553024] ACPI: EC: Look up EC in DSDT [ 1.554241] ACPI: Executed 1 blocks of module-level executable AML code [ 1.586704] ACPI: Interpreter enabled [ 1.586708] ACPI: (supports S0 S1 S3 S4 S5) [ 1.586727] ACPI: Using IOAPIC for interrupt routing [ 1.586774] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 1.588497] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in ACPI motherboard resources [ 1.623461] ACPI: No dock devices found. [ 1.623464] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 1.623591] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 1.623837] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 1.623840] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 1.623841] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 1.623843] pci_root PNP0A08:00: host bridge window [mem 0x000d0000-0x000dffff] [ 1.623845] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xdfffffff] [ 1.623847] pci_root PNP0A08:00: host bridge window [mem 0xf0000000-0xfed8ffff] [ 1.623897] pci 0000:00:00.0: PME# supported from D0 D3hot D3cold [ 1.623900] pci 0000:00:00.0: PME# disabled [ 1.623954] pci 0000:00:01.0: PME# supported from D0 D3hot D3cold [ 1.623957] pci 0000:00:01.0: PME# disabled [ 1.624008] pci 0000:00:03.0: PME# supported from D0 D3hot D3cold [ 1.624011] pci 0000:00:03.0: PME# disabled [ 1.624064] pci 0000:00:07.0: PME# supported from D0 D3hot D3cold [ 1.624067] pci 0000:00:07.0: PME# disabled [ 1.624340] pci 0000:00:1a.0: reg 20: [io 0xa800-0xa81f] [ 1.624398] pci 0000:00:1a.1: reg 20: [io 0xa880-0xa89f] [ 1.624456] pci 0000:00:1a.2: reg 20: [io 0xac00-0xac1f] [ 1.624512] pci 0000:00:1a.7: reg 10: [mem 0xfbaff000-0xfbaff3ff] [ 1.624561] pci 0000:00:1a.7: PME# supported from D0 D3hot D3cold [ 1.624565] pci 0000:00:1a.7: PME# disabled [ 1.624594] pci 0000:00:1b.0: reg 10: [mem 0xfbaf8000-0xfbafbfff 64bit] [ 1.624631] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 1.624634] pci 0000:00:1b.0: PME# disabled [ 1.624691] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 1.624694] pci 0000:00:1c.0: PME# disabled [ 1.624754] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 1.624757] pci 0000:00:1c.2: PME# disabled [ 1.624819] pci 0000:00:1c.5: PME# supported from D0 D3hot D3cold [ 1.624822] pci 0000:00:1c.5: PME# disabled [ 1.624866] pci 0000:00:1d.0: reg 20: [io 0xa080-0xa09f] [ 1.624924] pci 0000:00:1d.1: reg 20: [io 0xa400-0xa41f] [ 1.624982] pci 0000:00:1d.2: reg 20: [io 0xa480-0xa49f] [ 1.625039] pci 0000:00:1d.7: reg 10: [mem 0xfbafe000-0xfbafe3ff] [ 1.625088] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 1.625091] pci 0000:00:1d.7: PME# disabled [ 1.625194] pci 0000:00:1f.0: quirk: [io 0x0800-0x087f] claimed by ICH6 ACPI/GPIO/TCO [ 1.625197] pci 0000:00:1f.0: quirk: [io 0x0500-0x053f] claimed by ICH6 GPIO [ 1.625200] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 1 PIO at 0294 (mask 0003) [ 1.625204] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 3 PIO at 4700 (mask 001f) [ 1.625252] pci 0000:00:1f.2: reg 10: [io 0x9c00-0x9c07] [ 1.625257] pci 0000:00:1f.2: reg 14: [io 0x9880-0x9883] [ 1.625261] pci 0000:00:1f.2: reg 18: [io 0x9800-0x9807] [ 1.625266] pci 0000:00:1f.2: reg 1c: [io 0x9480-0x9483] [ 1.625270] pci 0000:00:1f.2: reg 20: [io 0x9400-0x941f] [ 1.625275] pci 0000:00:1f.2: reg 24: [mem 0xfbafc000-0xfbafc7ff] [ 1.625303] pci 0000:00:1f.2: PME# supported from D3hot [ 1.625305] pci 0000:00:1f.2: PME# disabled [ 1.625330] pci 0000:00:1f.3: reg 10: [mem 0xfbafd000-0xfbafd0ff 64bit] [ 1.625342] pci 0000:00:1f.3: reg 20: [io 0x0400-0x041f] [ 1.625390] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 1.625393] pci 0000:00:01.0: bridge window [io 0xf000-0x0000] (disabled) [ 1.625397] pci 0000:00:01.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 1.625401] pci 0000:00:01.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 1.625449] pci 0000:02:00.0: reg 10: [mem 0xd0000000-0xdfffffff 64bit pref] [ 1.625457] pci 0000:02:00.0: reg 18: [mem 0xfbbe0000-0xfbbeffff 64bit] [ 1.625461] pci 0000:02:00.0: reg 20: [io 0xb000-0xb0ff] [ 1.625468] pci 0000:02:00.0: reg 30: [mem 0xfbbc0000-0xfbbdffff pref] [ 1.625485] pci 0000:02:00.0: supports D1 D2 [ 1.625510] pci 0000:02:00.1: reg 10: [mem 0xfbbfc000-0xfbbfffff 64bit] [ 1.625541] pci 0000:02:00.1: supports D1 D2 [ 1.636418] pci 0000:00:03.0: PCI bridge to [bus 02-02] [ 1.636421] pci 0000:00:03.0: bridge window [io 0xb000-0xbfff] [ 1.636423] pci 0000:00:03.0: bridge window [mem 0xfbb00000-0xfbbfffff] [ 1.636428] pci 0000:00:03.0: bridge window [mem 0xd0000000-0xdfffffff 64bit pref] [ 1.636460] pci 0000:00:07.0: PCI bridge to [bus 03-03] [ 1.636463] pci 0000:00:07.0: bridge window [io 0xf000-0x0000] (disabled) [ 1.636466] pci 0000:00:07.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 1.636470] pci 0000:00:07.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 1.636507] pci 0000:00:1c.0: PCI bridge to [bus 06-06] [ 1.636510] pci 0000:00:1c.0: bridge window [io 0xf000-0x0000] (disabled) [ 1.636513] pci 0000:00:1c.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 1.636518] pci 0000:00:1c.0: bridge window [mem 0xfaf00000-0xfaffffff 64bit pref] [ 1.636588] pci 0000:05:00.0: reg 10: [mem 0xfbdfc000-0xfbdfffff 64bit] [ 1.636595] pci 0000:05:00.0: reg 18: [io 0xd800-0xd8ff] [ 1.636619] pci 0000:05:00.0: reg 30: [mem 0xfbdc0000-0xfbddffff pref] [ 1.636657] pci 0000:05:00.0: supports D1 D2 [ 1.636658] pci 0000:05:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 1.636662] pci 0000:05:00.0: PME# disabled [ 1.656415] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 1.656419] pci 0000:00:1c.2: bridge window [io 0xd000-0xdfff] [ 1.656422] pci 0000:00:1c.2: bridge window [mem 0xfbd00000-0xfbdfffff] [ 1.656427] pci 0000:00:1c.2: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 1.656501] pci 0000:04:00.0: reg 10: [mem 0xfbcfc000-0xfbcfffff 64bit] [ 1.656508] pci 0000:04:00.0: reg 18: [io 0xc800-0xc8ff] [ 1.656532] pci 0000:04:00.0: reg 30: [mem 0xfbcc0000-0xfbcdffff pref] [ 1.656571] pci 0000:04:00.0: supports D1 D2 [ 1.656573] pci 0000:04:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 1.656577] pci 0000:04:00.0: PME# disabled [ 1.676408] pci 0000:00:1c.5: PCI bridge to [bus 04-04] [ 1.676411] pci 0000:00:1c.5: bridge window [io 0xc000-0xcfff] [ 1.676414] pci 0000:00:1c.5: bridge window [mem 0xfbc00000-0xfbcfffff] [ 1.676419] pci 0000:00:1c.5: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 1.676463] pci 0000:07:02.0: reg 10: [mem 0xfbeff000-0xfbeff7ff] [ 1.676469] pci 0000:07:02.0: reg 14: [io 0xec00-0xec7f] [ 1.676509] pci 0000:07:02.0: supports D2 [ 1.676511] pci 0000:07:02.0: PME# supported from D2 D3hot D3cold [ 1.676514] pci 0000:07:02.0: PME# disabled [ 1.676553] pci 0000:00:1e.0: PCI bridge to [bus 07-07] (subtractive decode) [ 1.676556] pci 0000:00:1e.0: bridge window [io 0xe000-0xefff] [ 1.676559] pci 0000:00:1e.0: bridge window [mem 0xfbe00000-0xfbefffff] [ 1.676564] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 1.676566] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 1.676568] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 1.676570] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 1.676572] pci 0000:00:1e.0: bridge window [mem 0x000d0000-0x000dffff] (subtractive decode) [ 1.676574] pci 0000:00:1e.0: bridge window [mem 0xc0000000-0xdfffffff] (subtractive decode) [ 1.676576] pci 0000:00:1e.0: bridge window [mem 0xf0000000-0xfed8ffff] (subtractive decode) [ 1.676608] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 1.676860] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P1._PRT] [ 1.676959] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P4._PRT] [ 1.677009] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P6._PRT] [ 1.677059] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P9._PRT] [ 1.677104] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.NPE1._PRT] [ 1.677150] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.NPE3._PRT] [ 1.677195] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.NPE7._PRT] [ 1.699792] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 6 7 *10 11 12 14 15) [ 1.699890] ACPI: PCI Interrupt Link [LNKB] (IRQs *5) [ 1.699983] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 6 7 10 *11 12 14 15) [ 1.700080] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 6 7 10 11 12 *14 15) [ 1.700175] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 6 7 10 11 12 14 *15) [ 1.700271] ACPI: PCI Interrupt Link [LNKF] (IRQs *3 4 6 7 10 11 12 14 15) [ 1.700366] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 6 *7 10 11 12 14 15) [ 1.700462] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 *4 6 7 10 11 12 14 15) [ 1.700502] HEST: Table is not found! [ 1.700553] vgaarb: device added: PCI:0000:02:00.0,decodes=io+mem,owns=io+mem,locks=none [ 1.700556] vgaarb: loaded [ 1.700656] SCSI subsystem initialized [ 1.700779] libata version 3.00 loaded. [ 1.700815] usbcore: registered new interface driver usbfs [ 1.700822] usbcore: registered new interface driver hub [ 1.700839] usbcore: registered new device driver usb [ 1.700950] ACPI: WMI: Mapper loaded [ 1.700951] PCI: Using ACPI for IRQ routing [ 1.700953] PCI: pci_cache_line_size set to 64 bytes [ 1.701039] reserve RAM buffer: 000000000009ec00 - 000000000009ffff [ 1.701041] reserve RAM buffer: 00000000bf780000 - 00000000bfffffff [ 1.701104] NetLabel: Initializing [ 1.701105] NetLabel: domain hash size = 128 [ 1.701106] NetLabel: protocols = UNLABELED CIPSOv4 [ 1.701114] NetLabel: unlabeled traffic allowed by default [ 1.701136] HPET: 4 timers in total, 0 timers will be used for per-cpu timer [ 1.701140] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0 [ 1.701143] hpet0: 4 comparators, 64-bit 14.318180 MHz counter [ 1.746497] Switching to clocksource tsc [ 1.752662] AppArmor: AppArmor Filesystem Enabled [ 1.752673] pnp: PnP ACPI init [ 1.752684] ACPI: bus type pnp registered [ 1.754876] pnp: PnP ACPI: found 15 devices [ 1.754878] ACPI: ACPI bus type pnp unregistered [ 1.754887] system 00:01: [mem 0xfbf00000-0xfbffffff] has been reserved [ 1.754889] system 00:01: [mem 0xfc000000-0xfcffffff] has been reserved [ 1.754891] system 00:01: [mem 0xfd000000-0xfdffffff] has been reserved [ 1.754896] system 00:01: [mem 0xfe000000-0xfebfffff] has been reserved [ 1.754898] system 00:01: [mem 0xfec8a000-0xfec8afff] could not be reserved [ 1.754900] system 00:01: [mem 0xfed10000-0xfed10fff] has been reserved [ 1.754905] system 00:06: [io 0x0290-0x029f] has been reserved [ 1.754908] system 00:07: [io 0x04d0-0x04d1] has been reserved [ 1.754910] system 00:07: [io 0x0800-0x087f] has been reserved [ 1.754912] system 00:07: [io 0x0500-0x057f] could not be reserved [ 1.754914] system 00:07: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 1.754916] system 00:07: [mem 0xfed20000-0xfed3ffff] has been reserved [ 1.754918] system 00:07: [mem 0xfed45000-0xfed8ffff] has been reserved [ 1.754921] system 00:0a: [mem 0xffc00000-0xffdfffff] has been reserved [ 1.754926] system 00:0b: [mem 0xfec00000-0xfec00fff] could not be reserved [ 1.754928] system 00:0b: [mem 0xfee00000-0xfee00fff] has been reserved [ 1.754931] system 00:0d: [mem 0xe0000000-0xefffffff] has been reserved [ 1.754935] system 00:0e: [mem 0x00000000-0x0009ffff] could not be reserved [ 1.754936] system 00:0e: [mem 0x000c0000-0x000cffff] has been reserved [ 1.754938] system 00:0e: [mem 0x000e0000-0x000fffff] could not be reserved [ 1.754940] system 00:0e: [mem 0x00100000-0xbfffffff] could not be reserved [ 1.754942] system 00:0e: [mem 0xfed90000-0xffffffff] could not be reserved [ 1.759630] pci 0000:00:1c.0: BAR 14: assigned [mem 0xc0000000-0xc03fffff] [ 1.759633] pci 0000:00:1c.2: BAR 15: assigned [mem 0xc0400000-0xc05fffff 64bit pref] [ 1.759635] pci 0000:00:1c.5: BAR 15: assigned [mem 0xc0600000-0xc07fffff 64bit pref] [ 1.759637] pci 0000:00:1c.0: BAR 13: assigned [io 0x1000-0x1fff] [ 1.759639] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 1.759641] pci 0000:00:01.0: bridge window [io disabled] [ 1.759644] pci 0000:00:01.0: bridge window [mem disabled] [ 1.759646] pci 0000:00:01.0: bridge window [mem pref disabled] [ 1.759651] pci 0000:00:03.0: PCI bridge to [bus 02-02] [ 1.759653] pci 0000:00:03.0: bridge window [io 0xb000-0xbfff] [ 1.759656] pci 0000:00:03.0: bridge window [mem 0xfbb00000-0xfbbfffff] [ 1.759659] pci 0000:00:03.0: bridge window [mem 0xd0000000-0xdfffffff 64bit pref] [ 1.759664] pci 0000:00:07.0: PCI bridge to [bus 03-03] [ 1.759665] pci 0000:00:07.0: bridge window [io disabled] [ 1.759668] pci 0000:00:07.0: bridge window [mem disabled] [ 1.759670] pci 0000:00:07.0: bridge window [mem pref disabled] [ 1.759675] pci 0000:00:1c.0: PCI bridge to [bus 06-06] [ 1.759677] pci 0000:00:1c.0: bridge window [io 0x1000-0x1fff] [ 1.759681] pci 0000:00:1c.0: bridge window [mem 0xc0000000-0xc03fffff] [ 1.759684] pci 0000:00:1c.0: bridge window [mem 0xfaf00000-0xfaffffff 64bit pref] [ 1.759689] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 1.759691] pci 0000:00:1c.2: bridge window [io 0xd000-0xdfff] [ 1.759695] pci 0000:00:1c.2: bridge window [mem 0xfbd00000-0xfbdfffff] [ 1.759698] pci 0000:00:1c.2: bridge window [mem 0xc0400000-0xc05fffff 64bit pref] [ 1.759703] pci 0000:00:1c.5: PCI bridge to [bus 04-04] [ 1.759705] pci 0000:00:1c.5: bridge window [io 0xc000-0xcfff] [ 1.759709] pci 0000:00:1c.5: bridge window [mem 0xfbc00000-0xfbcfffff] [ 1.759712] pci 0000:00:1c.5: bridge window [mem 0xc0600000-0xc07fffff 64bit pref] [ 1.759717] pci 0000:00:1e.0: PCI bridge to [bus 07-07] [ 1.759719] pci 0000:00:1e.0: bridge window [io 0xe000-0xefff] [ 1.759723] pci 0000:00:1e.0: bridge window [mem 0xfbe00000-0xfbefffff] [ 1.759726] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 1.759737] pci 0000:00:01.0: setting latency timer to 64 [ 1.759744] pci 0000:00:03.0: setting latency timer to 64 [ 1.759750] pci 0000:00:07.0: setting latency timer to 64 [ 1.759756] pci 0000:00:1c.0: enabling device (0106 -> 0107) [ 1.759760] alloc irq_desc for 17 on node -1 [ 1.759762] alloc kstat_irqs on node -1 [ 1.759765] alloc irq_2_iommu on node -1 [ 1.759769] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 1.759772] pci 0000:00:1c.0: setting latency timer to 64 [ 1.759779] alloc irq_desc for 18 on node -1 [ 1.759780] alloc kstat_irqs on node -1 [ 1.759781] alloc irq_2_iommu on node -1 [ 1.759785] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 1.759788] pci 0000:00:1c.2: setting latency timer to 64 [ 1.759794] alloc irq_desc for 16 on node -1 [ 1.759795] alloc kstat_irqs on node -1 [ 1.759797] alloc irq_2_iommu on node -1 [ 1.759801] pci 0000:00:1c.5: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 1.759804] pci 0000:00:1c.5: setting latency timer to 64 [ 1.759809] pci 0000:00:1e.0: setting latency timer to 64 [ 1.759812] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 1.759813] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 1.759815] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 1.759816] pci_bus 0000:00: resource 7 [mem 0x000d0000-0x000dffff] [ 1.759818] pci_bus 0000:00: resource 8 [mem 0xc0000000-0xdfffffff] [ 1.759820] pci_bus 0000:00: resource 9 [mem 0xf0000000-0xfed8ffff] [ 1.759821] pci_bus 0000:02: resource 0 [io 0xb000-0xbfff] [ 1.759823] pci_bus 0000:02: resource 1 [mem 0xfbb00000-0xfbbfffff] [ 1.759824] pci_bus 0000:02: resource 2 [mem 0xd0000000-0xdfffffff 64bit pref] [ 1.759826] pci_bus 0000:06: resource 0 [io 0x1000-0x1fff] [ 1.759828] pci_bus 0000:06: resource 1 [mem 0xc0000000-0xc03fffff] [ 1.759829] pci_bus 0000:06: resource 2 [mem 0xfaf00000-0xfaffffff 64bit pref] [ 1.759831] pci_bus 0000:05: resource 0 [io 0xd000-0xdfff] [ 1.759832] pci_bus 0000:05: resource 1 [mem 0xfbd00000-0xfbdfffff] [ 1.759834] pci_bus 0000:05: resource 2 [mem 0xc0400000-0xc05fffff 64bit pref] [ 1.759836] pci_bus 0000:04: resource 0 [io 0xc000-0xcfff] [ 1.759837] pci_bus 0000:04: resource 1 [mem 0xfbc00000-0xfbcfffff] [ 1.759839] pci_bus 0000:04: resource 2 [mem 0xc0600000-0xc07fffff 64bit pref] [ 1.759840] pci_bus 0000:07: resource 0 [io 0xe000-0xefff] [ 1.759842] pci_bus 0000:07: resource 1 [mem 0xfbe00000-0xfbefffff] [ 1.759843] pci_bus 0000:07: resource 4 [io 0x0000-0x0cf7] [ 1.759845] pci_bus 0000:07: resource 5 [io 0x0d00-0xffff] [ 1.759846] pci_bus 0000:07: resource 6 [mem 0x000a0000-0x000bffff] [ 1.759848] pci_bus 0000:07: resource 7 [mem 0x000d0000-0x000dffff] [ 1.759849] pci_bus 0000:07: resource 8 [mem 0xc0000000-0xdfffffff] [ 1.759851] pci_bus 0000:07: resource 9 [mem 0xf0000000-0xfed8ffff] [ 1.759874] NET: Registered protocol family 2 [ 1.760060] IP route cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 1.760938] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 1.762155] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 1.762287] TCP: Hash tables configured (established 524288 bind 65536) [ 1.762289] TCP reno registered [ 1.762301] UDP hash table entries: 4096 (order: 5, 131072 bytes) [ 1.762333] UDP-Lite hash table entries: 4096 (order: 5, 131072 bytes) [ 1.762435] NET: Registered protocol family 1 [ 1.762599] pci 0000:02:00.0: Boot video device [ 1.762610] PCI: CLS 64 bytes, default 64 [ 1.762611] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) [ 1.762614] Placing 64MB software IO TLB between ffff880001ffe000 - ffff880005ffe000 [ 1.762615] software IO TLB at phys 0x1ffe000 - 0x5ffe000 [ 1.762974] Scanning for low memory corruption every 60 seconds [ 1.763057] audit: initializing netlink socket (disabled) [ 1.763064] type=2000 audit(1280358128.530:1): initialized [ 1.773653] Freeing initrd memory: 11548k freed [ 1.774943] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 1.776048] VFS: Disk quotas dquot_6.5.2 [ 1.776094] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 1.776521] fuse init (API version 7.14) [ 1.776578] msgmni has been set to 11942 [ 1.776791] alg: No test for stdrng (krng) [ 1.776831] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 1.776833] io scheduler noop registered [ 1.776835] io scheduler deadline registered [ 1.776862] io scheduler cfq registered (default) [ 1.776946] pcieport 0000:00:01.0: setting latency timer to 64 [ 1.776972] alloc irq_desc for 66 on node -1 [ 1.776973] alloc kstat_irqs on node -1 [ 1.776978] alloc irq_2_iommu on node -1 [ 1.776985] pcieport 0000:00:01.0: irq 66 for MSI/MSI-X [ 1.777036] pcieport 0000:00:03.0: setting latency timer to 64 [ 1.777060] alloc irq_desc for 67 on node -1 [ 1.777061] alloc kstat_irqs on node -1 [ 1.777062] alloc irq_2_iommu on node -1 [ 1.777068] pcieport 0000:00:03.0: irq 67 for MSI/MSI-X [ 1.777115] pcieport 0000:00:07.0: setting latency timer to 64 [ 1.777138] alloc irq_desc for 68 on node -1 [ 1.777139] alloc kstat_irqs on node -1 [ 1.777141] alloc irq_2_iommu on node -1 [ 1.777147] pcieport 0000:00:07.0: irq 68 for MSI/MSI-X [ 1.777195] pcieport 0000:00:1c.0: setting latency timer to 64 [ 1.777221] alloc irq_desc for 69 on node -1 [ 1.777222] alloc kstat_irqs on node -1 [ 1.777224] alloc irq_2_iommu on node -1 [ 1.777230] pcieport 0000:00:1c.0: irq 69 for MSI/MSI-X [ 1.777288] pcieport 0000:00:1c.2: setting latency timer to 64 [ 1.777315] alloc irq_desc for 70 on node -1 [ 1.777316] alloc kstat_irqs on node -1 [ 1.777318] alloc irq_2_iommu on node -1 [ 1.777324] pcieport 0000:00:1c.2: irq 70 for MSI/MSI-X [ 1.777383] pcieport 0000:00:1c.5: setting latency timer to 64 [ 1.777410] alloc irq_desc for 71 on node -1 [ 1.777411] alloc kstat_irqs on node -1 [ 1.777413] alloc irq_2_iommu on node -1 [ 1.777419] pcieport 0000:00:1c.5: irq 71 for MSI/MSI-X [ 1.777485] aer 0000:00:01.0:pcie02: AER service couldn't init device: no _OSC support [ 1.777490] aer 0000:00:03.0:pcie02: AER service couldn't init device: no _OSC support [ 1.777493] aer 0000:00:07.0:pcie02: AER service couldn't init device: no _OSC support [ 1.777506] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 1.777573] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 1.777762] vesafb: framebuffer at 0xd012c000, mapped to 0xffffc90011800000, using 1216k, total 1216k [ 1.777764] vesafb: mode is 640x480x32, linelength=2560, pages=0 [ 1.777765] vesafb: scrolling: redraw [ 1.777768] vesafb: Truecolor: size=0:8:8:8, shift=0:16:8:0 [ 1.820782] Console: switching to colour frame buffer device 80x30 [ 1.863762] fb0: VESA VGA frame buffer device [ 1.863833] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 1.863836] ACPI: Power Button [PWRB] [ 1.863864] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 [ 1.863865] ACPI: Power Button [PWRF] [ 1.864135] ACPI: acpi_idle registered with cpuidle [ 1.885857] ERST: Table is not found! [ 1.886710] Linux agpgart interface v0.103 [ 1.886735] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 1.887637] brd: module loaded [ 1.887963] loop: module loaded [ 1.888247] Fixed MDIO Bus: probed [ 1.888268] PPP generic driver version 2.4.2 [ 1.888295] tun: Universal TUN/TAP device driver, 1.6 [ 1.888297] tun: (C) 1999-2004 Max Krasnyansky [ 1.888339] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 1.888357] ehci_hcd 0000:00:1a.7: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 1.888372] ehci_hcd 0000:00:1a.7: setting latency timer to 64 [ 1.888375] ehci_hcd 0000:00:1a.7: EHCI Host Controller [ 1.888399] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 1 [ 1.888422] ehci_hcd 0000:00:1a.7: debug port 1 [ 1.892312] ehci_hcd 0000:00:1a.7: cache line size of 64 is not supported [ 1.892327] ehci_hcd 0000:00:1a.7: irq 18, io mem 0xfbaff000 [ 1.906718] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00 [ 1.906824] hub 1-0:1.0: USB hub found [ 1.906828] hub 1-0:1.0: 6 ports detected [ 1.906881] alloc irq_desc for 23 on node -1 [ 1.906883] alloc kstat_irqs on node -1 [ 1.906886] alloc irq_2_iommu on node -1 [ 1.906891] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 1.906901] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 1.906903] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 1.906926] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 2 [ 1.906944] ehci_hcd 0000:00:1d.7: debug port 1 [ 1.910830] ehci_hcd 0000:00:1d.7: cache line size of 64 is not supported [ 1.910840] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xfbafe000 [ 1.926709] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 1.926815] hub 2-0:1.0: USB hub found [ 1.926818] hub 2-0:1.0: 6 ports detected [ 1.926865] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 1.926874] uhci_hcd: USB Universal Host Controller Interface driver [ 1.926907] uhci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.926912] uhci_hcd 0000:00:1a.0: setting latency timer to 64 [ 1.926914] uhci_hcd 0000:00:1a.0: UHCI Host Controller [ 1.926937] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 3 [ 1.926964] uhci_hcd 0000:00:1a.0: irq 16, io base 0x0000a800 [ 1.927036] hub 3-0:1.0: USB hub found [ 1.927038] hub 3-0:1.0: 2 ports detected [ 1.927077] alloc irq_desc for 21 on node -1 [ 1.927078] alloc kstat_irqs on node -1 [ 1.927080] alloc irq_2_iommu on node -1 [ 1.927085] uhci_hcd 0000:00:1a.1: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 1.927089] uhci_hcd 0000:00:1a.1: setting latency timer to 64 [ 1.927091] uhci_hcd 0000:00:1a.1: UHCI Host Controller [ 1.927113] uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 4 [ 1.927142] uhci_hcd 0000:00:1a.1: irq 21, io base 0x0000a880 [ 1.927211] hub 4-0:1.0: USB hub found [ 1.927213] hub 4-0:1.0: 2 ports detected [ 1.927251] alloc irq_desc for 19 on node -1 [ 1.927253] alloc kstat_irqs on node -1 [ 1.927255] alloc irq_2_iommu on node -1 [ 1.927259] uhci_hcd 0000:00:1a.2: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 1.927263] uhci_hcd 0000:00:1a.2: setting latency timer to 64 [ 1.927265] uhci_hcd 0000:00:1a.2: UHCI Host Controller [ 1.927290] uhci_hcd 0000:00:1a.2: new USB bus registered, assigned bus number 5 [ 1.927316] uhci_hcd 0000:00:1a.2: irq 19, io base 0x0000ac00 [ 1.927386] hub 5-0:1.0: USB hub found [ 1.927389] hub 5-0:1.0: 2 ports detected [ 1.927427] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 1.927431] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 1.927433] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 1.927453] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 6 [ 1.927473] uhci_hcd 0000:00:1d.0: irq 23, io base 0x0000a080 [ 1.927545] hub 6-0:1.0: USB hub found [ 1.927548] hub 6-0:1.0: 2 ports detected [ 1.927585] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.927589] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 1.927591] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 1.927611] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 7 [ 1.927631] uhci_hcd 0000:00:1d.1: irq 19, io base 0x0000a400 [ 1.927704] hub 7-0:1.0: USB hub found [ 1.927707] hub 7-0:1.0: 2 ports detected [ 1.927744] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 1.927751] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 1.927753] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 1.927774] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 8 [ 1.927794] uhci_hcd 0000:00:1d.2: irq 18, io base 0x0000a480 [ 1.927865] hub 8-0:1.0: USB hub found [ 1.927867] hub 8-0:1.0: 2 ports detected [ 1.927944] PNP: No PS/2 controller found. Probing ports directly. [ 1.930480] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 1.930484] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 1.930520] mice: PS/2 mouse device common for all mice [ 1.930571] rtc_cmos 00:03: RTC can wake from S4 [ 1.930595] rtc_cmos 00:03: rtc core: registered rtc_cmos as rtc0 [ 1.930617] rtc0: alarms up to one month, y3k, 114 bytes nvram, hpet irqs [ 1.930684] device-mapper: uevent: version 1.0.3 [ 1.930743] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 1.930853] device-mapper: multipath: version 1.1.1 loaded [ 1.930855] device-mapper: multipath round-robin: version 1.0.0 loaded [ 1.931083] cpuidle: using governor ladder [ 1.931084] cpuidle: using governor menu [ 1.931278] TCP cubic registered [ 1.931364] NET: Registered protocol family 10 [ 1.931647] lo: Disabled Privacy Extensions [ 1.931790] NET: Registered protocol family 17 [ 1.931883] PM: Resume from disk failed. [ 1.931890] registered taskstats version 1 [ 1.932206] Magic number: 2:513:50 [ 1.932258] rtc_cmos 00:03: setting system clock to 2010-07-28 23:02:09 UTC (1280358129) [ 1.932260] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 1.932261] EDD information not available. [ 1.932307] Freeing unused kernel memory: 904k freed [ 1.932416] Write protecting the kernel read-only data: 10240k [ 1.932560] Freeing unused kernel memory: 416k freed [ 1.932702] Freeing unused kernel memory: 1604k freed [ 1.942570] udev: starting version 151 [ 1.964543] sky2: driver version 1.28 [ 1.964580] sky2 0000:05:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 1.964592] sky2 0000:05:00.0: setting latency timer to 64 [ 1.964625] sky2 0000:05:00.0: Yukon-2 EC Ultra chip revision 3 [ 1.964709] alloc irq_desc for 72 on node -1 [ 1.964711] alloc kstat_irqs on node -1 [ 1.964716] alloc irq_2_iommu on node -1 [ 1.964730] sky2 0000:05:00.0: irq 72 for MSI/MSI-X [ 1.965256] sky2 0000:05:00.0: eth0: addr 00:26:18:08:60:73 [ 1.965276] sky2 0000:04:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 1.965285] sky2 0000:04:00.0: setting latency timer to 64 [ 1.965311] sky2 0000:04:00.0: Yukon-2 EC Ultra chip revision 3 [ 1.965397] alloc irq_desc for 73 on node -1 [ 1.965399] alloc kstat_irqs on node -1 [ 1.965403] alloc irq_2_iommu on node -1 [ 1.965415] sky2 0000:04:00.0: irq 73 for MSI/MSI-X [ 1.965946] sky2 0000:04:00.0: eth1: addr 00:26:18:08:60:72 [ 1.974986] ahci 0000:00:1f.2: version 3.0 [ 1.975000] alloc irq_desc for 20 on node -1 [ 1.975002] alloc kstat_irqs on node -1 [ 1.975006] alloc irq_2_iommu on node -1 [ 1.975011] ahci 0000:00:1f.2: PCI INT B -> GSI 20 (level, low) -> IRQ 20 [ 1.975045] alloc irq_desc for 74 on node -1 [ 1.975046] alloc kstat_irqs on node -1 [ 1.975048] alloc irq_2_iommu on node -1 [ 1.975055] ahci 0000:00:1f.2: irq 74 for MSI/MSI-X [ 1.975078] ahci: SSS flag set, parallel bus scan disabled [ 1.975114] ahci 0000:00:1f.2: AHCI 0001.0200 32 slots 6 ports 3 Gbps 0x3f impl SATA mode [ 1.975116] ahci 0000:00:1f.2: flags: 64bit ncq sntf stag pm led clo pmp pio slum part ccc ems sxs [ 1.975120] ahci 0000:00:1f.2: setting latency timer to 64 [ 1.978238] firewire_ohci 0000:07:02.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 2.068590] scsi0 : ahci [ 2.068674] scsi1 : ahci [ 2.068712] scsi2 : ahci [ 2.068747] scsi3 : ahci [ 2.068783] scsi4 : ahci [ 2.068820] scsi5 : ahci [ 2.068937] ata1: SATA max UDMA/133 abar m2048@0xfbafc000 port 0xfbafc100 irq 74 [ 2.068940] ata2: SATA max UDMA/133 abar m2048@0xfbafc000 port 0xfbafc180 irq 74 [ 2.068942] ata3: SATA max UDMA/133 abar m2048@0xfbafc000 port 0xfbafc200 irq 74 [ 2.068944] ata4: SATA max UDMA/133 abar m2048@0xfbafc000 port 0xfbafc280 irq 74 [ 2.068946] ata5: SATA max UDMA/133 abar m2048@0xfbafc000 port 0xfbafc300 irq 74 [ 2.068948] ata6: SATA max UDMA/133 abar m2048@0xfbafc000 port 0xfbafc380 irq 74 [ 2.136675] firewire_ohci: Added fw-ohci device 0000:07:02.0, OHCI v1.10, 4 IR + 8 IT contexts, quirks 0x1 [ 2.346585] usb 1-5: new high speed USB device using ehci_hcd and address 3 [ 2.497081] hub 1-5:1.0: USB hub found [ 2.497174] hub 1-5:1.0: 4 ports detected [ 2.596521] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 2.602933] ata1.00: ATA-7: SAMSUNG HD103UJ, 1AA01118, max UDMA7 [ 2.602937] ata1.00: 1953525168 sectors, multi 0: LBA48 NCQ (depth 31/32), AA [ 2.609413] ata1.00: configured for UDMA/133 [ 2.618446] firewire_core: created device fw0: GUID 001e8c0001e6ba27, S400 [ 2.636601] scsi 0:0:0:0: Direct-Access ATA SAMSUNG HD103UJ 1AA0 PQ: 0 ANSI: 5 [ 2.636692] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 2.636703] sd 0:0:0:0: [sda] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB) [ 2.636742] sd 0:0:0:0: [sda] Write Protect is off [ 2.636744] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 2.636758] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.636849] sda: sda1 sda2 sda3 sda4 [ 2.648407] sd 0:0:0:0: [sda] Attached SCSI disk [ 2.746464] usb 2-2: new high speed USB device using ehci_hcd and address 3 [ 3.416263] usb 3-1: new full speed USB device using uhci_hcd and address 2 [ 3.566220] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 3.587633] ata2.00: ATAPI: HL-DT-ST BD-RE GGW-H20L, YL05, max UDMA/133 [ 3.613658] ata2.00: configured for UDMA/133 [ 3.751479] scsi 1:0:0:0: CD-ROM HL-DT-ST BD-RE GGW-H20L YL05 PQ: 0 ANSI: 5 [ 3.876124] usb 6-1: new full speed USB device using uhci_hcd and address 2 [ 4.079231] sr0: scsi3-mmc drive: 40x/40x writer dvd-ram cd/rw xa/form2 cdda tray [ 4.079235] Uniform CD-ROM driver Revision: 3.20 [ 4.079329] sr 1:0:0:0: Attached scsi CD-ROM sr0 [ 4.079377] sr 1:0:0:0: Attached scsi generic sg1 type 5 [ 4.150509] usbcore: registered new interface driver hiddev [ 4.150596] usbcore: registered new interface driver usbhid [ 4.150599] usbhid: USB HID core driver [ 4.345981] usb 7-1: new full speed USB device using uhci_hcd and address 2 [ 4.427524] ata3: SATA link down (SStatus 0 SControl 300) [ 4.795850] ata4: SATA link down (SStatus 0 SControl 300) [ 5.165740] ata5: SATA link down (SStatus 0 SControl 300) [ 5.537190] ata6: SATA link down (SStatus 0 SControl 300) [ 5.562411] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.0/input/input2 [ 5.562472] logitech 0003:046D:C513.0001: input,hidraw0: USB HID v1.11 Keyboard [Logitech USB Receiver] on usb-0000:00:1d.0-1/input0 [ 5.565271] logitech 0003:046D:C513.0002: fixing up Logitech keyboard report descriptor [ 5.565642] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.1/input/input3 [ 5.565917] logitech 0003:046D:C513.0002: input,hiddev96,hidraw1: USB HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:00:1d.0-1/input1 [ 6.136061] EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts: (null) [ 22.465470] udev: starting version 151 [ 22.473881] lp: driver loaded but no devices found [ 22.476861] Adding 8785916k swap on /dev/mapper/fornost-swap_1. Priority:-1 extents:1 across:8785916k [ 22.552262] Linux video capture interface: v2.00 [ 22.557906] [drm] Initialized drm 1.1.0 20060810 [ 22.557995] uvcvideo: Found UVC 1.00 device (046d:0990) [ 22.627081] input: UVC Camera (046d:0990) as /devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/input/input4 [ 22.627145] usbcore: registered new interface driver uvcvideo [ 22.627148] USB Video Class driver (v0.1.0) [ 22.627674] EDAC MC: Ver: 2.1.0 Jul 24 2010 [ 22.628410] Bluetooth: Core ver 2.15 [ 22.628464] NET: Registered protocol family 31 [ 22.628466] Bluetooth: HCI device and connection manager initialized [ 22.628469] Bluetooth: HCI socket layer initialized [ 22.632460] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 22.633295] usbcore: registered new interface driver btusb [ 22.635376] PCI: Discovered peer bus ff [ 22.636560] EDAC MC0: Giving out device to 'i7core_edac.c' 'i7 core #0': DEV 0000:ff:03.0 [ 22.636585] EDAC PCI0: Giving out device to module 'i7core_edac' controller 'EDAC PCI controller': DEV '0000:ff:03.0' (POLLED) [ 22.636588] EDAC i7core: Driver loaded. [ 22.647554] tpm_tis 00:0c: 1.2 TPM (device-id 0x6871, rev-id 1) [ 22.667545] type=1400 audit(1280350950.233:2): operation="profile_load" pid=860 name="/sbin/dhclient3" pid=860 comm="apparmor_parser" [ 22.668012] type=1400 audit(1280350950.233:3): operation="profile_load" pid=860 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=860 comm="apparmor_parser" [ 22.668270] type=1400 audit(1280350950.233:4): operation="profile_load" pid=860 name="/usr/lib/connman/scripts/dhclient-script" pid=860 comm="apparmor_parser" [ 22.679088] [drm] radeon defaulting to kernel modesetting. [ 22.679092] [drm] radeon kernel modesetting enabled. [ 22.679159] alloc irq_desc for 24 on node -1 [ 22.679162] alloc kstat_irqs on node -1 [ 22.679167] alloc irq_2_iommu on node -1 [ 22.679175] radeon 0000:02:00.0: PCI INT A -> GSI 24 (level, low) -> IRQ 24 [ 22.679179] radeon 0000:02:00.0: setting latency timer to 64 [ 22.680460] [drm] initializing kernel modesetting (RV770 0x1002:0x9460). [ 22.680604] [drm] register mmio base: 0xFBBE0000 [ 22.680606] [drm] register mmio size: 65536 [ 22.680687] ATOM BIOS: WEKIVA [ 22.680696] [drm] Clocks initialized ! [ 22.680705] radeon 0000:02:00.0: VRAM: 1024M 0x00000000 - 0x3FFFFFFF (1024M used) [ 22.680707] radeon 0000:02:00.0: GTT: 512M 0x40000000 - 0x5FFFFFFF [ 22.680721] mtrr: type mismatch for d0000000,10000000 old: write-back new: write-combining [ 22.680723] [drm] Detected VRAM RAM=1024M, BAR=256M [ 22.680724] [drm] RAM width 256bits DDR [ 22.680754] [TTM] Zone kernel: Available graphics memory: 3058786 kiB. [ 22.680756] [TTM] Zone dma32: Available graphics memory: 2097152 kiB. [ 22.680757] [TTM] Initializing pool allocator. [ 22.680770] [drm] radeon: 1024M of VRAM memory ready [ 22.680771] [drm] radeon: 512M of GTT memory ready. [ 22.680806] alloc irq_desc for 75 on node -1 [ 22.680807] alloc kstat_irqs on node -1 [ 22.680810] alloc irq_2_iommu on node -1 [ 22.680819] radeon 0000:02:00.0: irq 75 for MSI/MSI-X [ 22.680823] [drm] radeon: using MSI. [ 22.680846] [drm] radeon: irq initialized. [ 22.680847] [drm] GART: num cpu pages 131072, num gpu pages 131072 [ 22.681359] [drm] Loading RV770 Microcode [ 22.719408] alloc irq_desc for 22 on node -1 [ 22.719411] alloc kstat_irqs on node -1 [ 22.719414] alloc irq_2_iommu on node -1 [ 22.719420] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 22.719466] alloc irq_desc for 76 on node -1 [ 22.719467] alloc kstat_irqs on node -1 [ 22.719469] alloc irq_2_iommu on node -1 [ 22.719478] HDA Intel 0000:00:1b.0: irq 76 for MSI/MSI-X [ 22.719495] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 22.738612] usbcore: registered new interface driver snd-usb-audio [ 22.751012] [drm] ring test succeeded in 0 usecs [ 22.751140] [drm] radeon: ib pool ready. [ 22.751194] [drm] ib test succeeded in 0 usecs [ 22.751196] [drm] Enabling audio support [ 22.751203] failed to evaluate ATIF got AE_BAD_PARAMETER [ 22.751204] radeon 0000:02:00.0: Error during ACPI methods call [ 22.752449] [drm] Default TV standard: PAL [ 22.752500] [drm] Default TV standard: PAL [ 22.752775] [drm] Radeon Display Connectors [ 22.752778] [drm] Connector 0: [ 22.752779] [drm] DVI-I [ 22.752781] [drm] HPD1 [ 22.752783] [drm] DDC: 0x7e20 0x7e20 0x7e24 0x7e24 0x7e28 0x7e28 0x7e2c 0x7e2c [ 22.752785] [drm] Encoders: [ 22.752787] [drm] CRT1: INTERNAL_KLDSCP_DAC1 [ 22.752789] [drm] DFP3: INTERNAL_KLDSCP_LVTMA [ 22.752790] [drm] Connector 1: [ 22.752792] [drm] VGA [ 22.752794] [drm] DDC: 0x7e40 0x7e40 0x7e44 0x7e44 0x7e48 0x7e48 0x7e4c 0x7e4c [ 22.752795] [drm] Encoders: [ 22.752797] [drm] CRT2: INTERNAL_KLDSCP_DAC2 [ 22.752799] [drm] Connector 2: [ 22.752800] [drm] HDMI-A [ 22.752801] [drm] HPD2 [ 22.752804] [drm] DDC: 0x7e50 0x7e50 0x7e54 0x7e54 0x7e58 0x7e58 0x7e5c 0x7e5c [ 22.752805] [drm] Encoders: [ 22.752807] [drm] DFP2: INTERNAL_UNIPHY [ 22.752808] [drm] Connector 3: [ 22.752809] [drm] DisplayPort [ 22.752810] [drm] HPD3 [ 22.752813] [drm] DDC: 0x7e60 0x7e60 0x7e64 0x7e64 0x7e68 0x7e68 0x7e6c 0x7e6c [ 22.752814] [drm] Encoders: [ 22.752816] [drm] DFP1: INTERNAL_UNIPHY [ 22.791750] DRHD: handling fault status reg 2 [ 22.792654] INTR-REMAP: Request device [[00:1b.0] fault index 24 [ 22.792655] INTR-REMAP:[fault reason 34] Present field in the IRTE entry is clear [ 23.041622] [drm] Internal thermal controller with fan control [ 23.041635] [drm] radeon: power management initialized [ 23.385241] EXT4-fs (dm-0): re-mounted. Opts: errors=remount-ro [ 23.640793] EXT4-fs (dm-3): warning: maximal mount count reached, running e2fsck is recommended [ 23.640956] EXT4-fs (dm-3): mounted filesystem with ordered data mode. Opts: (null) [ 23.683862] [drm] fb mappable at 0xD0141000 [ 23.683864] [drm] vram apper at 0xD0000000 [ 23.683865] [drm] size 9216000 [ 23.683867] [drm] fb depth is 24 [ 23.683868] [drm] pitch is 7680 [ 23.683870] checking generic (d012c000 130000) vs hw (d0000000 40000000) [ 23.683872] fb: conflicting fb hw usage radeondrmfb vs VESA VGA - removing generic driver [ 23.685585] Console: switching to colour dummy device 80x25 [ 23.751377] EXT4-fs (dm-2): mounted filesystem with ordered data mode. Opts: user_xattr [ 24.909794] Console: switching to colour frame buffer device 240x75 [ 25.231699] fb0: radeondrmfb frame buffer device [ 25.231700] drm: registered panic notifier [ 25.231742] Slow work thread pool: Starting up [ 25.231777] Slow work thread pool: Ready [ 25.231782] [drm] Initialized radeon 2.5.0 20080528 for 0000:02:00.0 on minor 0 [ 25.819501] hda-intel: azx_get_response timeout, switching to polling mode: last cmd=0x000f0001 [ 25.828938] hda_codec: AD1989B: BIOS auto-probing. [ 25.833808] alloc irq_desc for 34 on node -1 [ 25.833811] alloc kstat_irqs on node -1 [ 25.833815] alloc irq_2_iommu on node -1 [ 25.833822] HDA Intel 0000:02:00.1: PCI INT B -> GSI 34 (level, low) -> IRQ 34 [ 25.833877] alloc irq_desc for 77 on node -1 [ 25.833878] alloc kstat_irqs on node -1 [ 25.833881] alloc irq_2_iommu on node -1 [ 25.833889] HDA Intel 0000:02:00.1: irq 77 for MSI/MSI-X [ 25.833905] HDA Intel 0000:02:00.1: setting latency timer to 64 [ 26.579367] type=1400 audit(1280350954.153:5): operation="profile_load" pid=1174 name="/usr/share/gdm/guest-session/Xsession" pid=1174 comm="apparmor_parser" [ 26.580461] type=1400 audit(1280350954.153:6): operation="profile_replace" pid=1177 name="/sbin/dhclient3" pid=1177 comm="apparmor_parser" [ 26.580860] type=1400 audit(1280350954.153:7): operation="profile_replace" pid=1177 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1177 comm="apparmor_parser" [ 26.581107] type=1400 audit(1280350954.153:8): operation="profile_replace" pid=1177 name="/usr/lib/connman/scripts/dhclient-script" pid=1177 comm="apparmor_parser" [ 26.582905] type=1400 audit(1280350954.153:9): operation="profile_load" pid=1183 name="/usr/bin/evince" pid=1183 comm="apparmor_parser" [ 26.588016] type=1400 audit(1280350954.153:10): operation="profile_load" pid=1183 name="/usr/bin/evince-previewer" pid=1183 comm="apparmor_parser" [ 26.591164] type=1400 audit(1280350954.163:11): operation="profile_load" pid=1183 name="/usr/bin/evince-thumbnailer" pid=1183 comm="apparmor_parser" [ 26.594343] sky2 0000:05:00.0: eth0: enabling interface [ 26.594897] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 26.598409] sky2 0000:04:00.0: eth1: enabling interface [ 26.598923] ADDRCONF(NETDEV_UP): eth1: link is not ready [ 26.611734] NET: Registered protocol family 15 [ 26.612870] alg: No test for cipher_null (cipher_null-generic) [ 26.612888] alg: No test for ecb(cipher_null) (ecb-cipher_null) [ 26.612905] alg: No test for digest_null (digest_null-generic) [ 26.612920] alg: No test for compress_null (compress_null-generic) [ 26.618180] padlock: VIA PadLock Hash Engine not detected. [ 26.664704] padlock: VIA PadLock Hash Engine not detected. [ 26.716457] Intel AES-NI instructions are not detected. [ 26.750794] padlock: VIA PadLock not detected. [ 27.369507] BUG: unable to handle kernel NULL pointer dereference at 0000000000000010 [ 27.369512] IP: [] fb_release+0x30/0x70 [ 27.369518] PGD 1b8a7b067 PUD 1b8a77067 PMD 0 [ 27.369521] Oops: 0000 [#1] SMP [ 27.369523] last sysfs file: /sys/devices/virtual/block/dm-3/uevent [ 27.369525] CPU 1 [ 27.369526] Modules linked in: deflate zlib_deflate ctr twofish twofish_common camellia serpent blowfish cast5 des_generic cryptd aes_x86_64 aes_generic xcbc rmd160 sha512_generic sha256_generic sha1_generic crypto_null af_key snd_hda_codec_atihdmi snd_hda_codec_analog tpm_infineon snd_hda_intel snd_usb_audio snd_hda_codec snd_pcm snd_seq_midi snd_hwdep snd_seq_midi_event radeon snd_seq snd_timer snd_usbmidi_lib snd_rawmidi tpm_tis i7core_edac btusb asus_atk0110 bluetooth ttm drm_kms_helper uvcvideo snd_seq_device videodev v4l1_compat v4l2_compat_ioctl32 joydev snd edac_core psmouse tpm tpm_bios drm serio_raw soundcore i2c_algo_bit snd_page_alloc lp parport hid_logitech ff_memless usbhid hid firewire_ohci firewire_core ahci libahci crc_itu_t sky2 [ 27.369561] [ 27.369564] Pid: 451, comm: plymouthd Not tainted 2.6.35-11-generic #16-Ubuntu P6T DELUXE V2/System Product Name [ 27.369565] RIP: 0010:[] [] fb_release+0x30/0x70 [ 27.369569] RSP: 0018:ffff8801b6a4bea8 EFLAGS: 00010286 [ 27.369570] RAX: ffff8801b6a4a000 RBX: ffff8801b7124000 RCX: 0000000000000003 [ 27.369572] RDX: 0000000000000000 RSI: ffff8801a56206c0 RDI: ffff8801b7124008 [ 27.369573] RBP: ffff8801b6a4beb8 R08: 0000000000000000 R09: 0000000000000000 [ 27.369575] R10: 00007fff8969bed0 R11: 0000000000000246 R12: ffff8801b7124008 [ 27.369577] R13: ffff8801b88235f0 R14: ffff8801b640bc80 R15: ffff8801b55e8300 [ 27.369578] FS: 00007f890030c700(0000) GS:ffff880001e20000(0000) knlGS:0000000000000000 [ 27.369580] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 27.369582] CR2: 0000000000000010 CR3: 00000001b53b7000 CR4: 00000000000006e0 [ 27.369583] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 27.369585] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 27.369587] Process plymouthd (pid: 451, threadinfo ffff8801b6a4a000, task ffff8801b3c596e0) [ 27.369588] Stack: [ 27.369589] ffff8801a56206c0 0000000000000008 ffff8801b6a4bf08 ffffffff81152df5 [ 27.369592] <0> ffff8801b88235f0 ffff8801b640bc80 00007f89001de000 ffff8801a56206c0 [ 27.369594] <0> ffff8801b8cd9e40 0000000000000000 000000000000000b 0000000002082db0 [ 27.369598] Call Trace: [ 27.369601] [] __fput+0xf5/0x210 [ 27.369604] [] fput+0x25/0x30 [ 27.369607] [] filp_close+0x5d/0x90 [ 27.369609] [] sys_close+0xb7/0x120 [ 27.369613] [] system_call_fastpath+0x16/0x1b [ 27.369614] Code: 83 ec 10 48 89 1c 24 4c 89 64 24 08 0f 1f 44 00 00 48 8b 9e a0 00 00 00 4c 8d 63 08 4c 89 e7 e8 67 1b 29 00 48 8b 93 c0 03 00 00 <48> 8b 42 10 48 85 c0 74 11 be 01 00 00 00 48 89 df ff d0 48 8b [ 27.369636] RIP [] fb_release+0x30/0x70 [ 27.369638] RSP [ 27.369639] CR2: 0000000000000010 [ 27.369641] ---[ end trace a385d6678a12f076 ]--- [ 28.002195] Bridge firewalling registered [ 28.014584] ip_tables: (C) 2000-2006 Netfilter Core Team [ 28.038606] nf_conntrack version 0.5.0 (16384 buckets, 65536 max) [ 28.038783] CONFIG_NF_CT_ACCT is deprecated and will be removed soon. Please use [ 28.038786] nf_conntrack.acct=1 kernel parameter, acct=1 nf_conntrack module option or [ 28.038788] sysctl net.netfilter.nf_conntrack_acct=1 to enable it. Bug: 611107 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-11-generic (buildd@rothera) (gcc version 4.4.5 20100723 (prerelease) (Ubuntu/Linaro 4.4.4-7ubuntu3) ) #16-Ubuntu SMP Sat Jul 24 21:38:26 UTC 2010 (Ubuntu 2.6.35-11.16-generic 2.6.35-rc5) [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) [ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 000000003fff0000 (usable) [ 0.000000] BIOS-e820: 000000003fff0000 - 000000003fff3000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000003fff3000 - 0000000040000000 (ACPI data) [ 0.000000] BIOS-e820: 00000000ffff0000 - 0000000100000000 (reserved) [ 0.000000] NX (Execute Disable) protection: approximated by x86 segment limits [ 0.000000] DMI 2.2 present. [ 0.000000] Phoenix BIOS detected: BIOS may corrupt low RAM, working around it. [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] last_pfn = 0x3fff0 max_arch_pfn = 0x100000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-AFFFF uncachable [ 0.000000] B0000-BFFFF write-combining [ 0.000000] C0000-C7FFF write-protect [ 0.000000] C8000-FFFFF uncachable [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask FC0000000 write-back [ 0.000000] 1 base 0D0000000 mask FF8000000 write-combining [ 0.000000] 2 base 0D0000000 mask FF8000000 write-combining [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] Scanning 0 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009fc00 (usable) [ 0.000000] modified: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 000000003fff0000 (usable) [ 0.000000] modified: 000000003fff0000 - 000000003fff3000 (ACPI NVS) [ 0.000000] modified: 000000003fff3000 - 0000000040000000 (ACPI data) [ 0.000000] modified: 00000000ffff0000 - 0000000100000000 (reserved) [ 0.000000] initial memory mapped : 0 - 00c00000 [ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000 [ 0.000000] 0000000000 - 0000400000 page 4k [ 0.000000] 0000400000 - 0037400000 page 2M [ 0.000000] 0037400000 - 00377fe000 page 4k [ 0.000000] kernel direct mapping tables up to 377fe000 @ 15000-1a000 [ 0.000000] RAMDISK: 2f5f2000 - 30034000 [ 0.000000] ACPI: RSDP 000f6a20 00014 (v00 VIA694) [ 0.000000] ACPI: RSDT 3fff3000 00028 (v01 VIA694 AWRDACPI 42302E31 AWRD 00000000) [ 0.000000] ACPI: FACP 3fff3040 00074 (v01 VIA694 AWRDACPI 42302E31 AWRD 00000000) [ 0.000000] ACPI: DSDT 3fff30c0 03147 (v01 VIA694 AWRDACPI 00001000 MSFT 0100000E) [ 0.000000] ACPI: FACS 3fff0000 00040 [ 0.000000] 135MB HIGHMEM available. [ 0.000000] 887MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 377fe000 [ 0.000000] low ram: 0 - 377fe000 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x000377fe [ 0.000000] HighMem 0x000377fe -> 0x0003fff0 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x0003fff0 [ 0.000000] On node 0 totalpages: 262015 [ 0.000000] free_area_init_node: node 0, pgdat c080f680, node_mem_map c1001200 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3951 pages, LIFO batch:0 [ 0.000000] Normal zone: 1744 pages used for memmap [ 0.000000] Normal zone: 221486 pages, LIFO batch:31 [ 0.000000] HighMem zone: 272 pages used for memmap [ 0.000000] HighMem zone: 34530 pages, LIFO batch:7 [ 0.000000] Using APIC driver default [ 0.000000] ACPI: PM-Timer IO Port: 0x4008 [ 0.000000] SMP: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] Local APIC disabled by BIOS -- you can enable it with "lapic" [ 0.000000] APIC: disable apic facility [ 0.000000] APIC: switched to apic NOOP [ 0.000000] nr_irqs_gsi: 16 [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000f0000 [ 0.000000] PM: Registered nosave memory: 00000000000f0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at 40000000 (gap: 40000000:bfff0000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:1 nr_node_ids:1 [ 0.000000] early_res array is doubled to 64 at [16000 - 167ff] [ 0.000000] PERCPU: Embedded 14 pages/cpu @c1c00000 s36352 r0 d20992 u4194304 [ 0.000000] pcpu-alloc: s36352 r0 d20992 u4194304 alloc=1*4194304 [ 0.000000] pcpu-alloc: [0] 0 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 259967 [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-11-generic root=UUID=0b3657d6-390b-4e64-8870-09e5938786c5 ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Enabling fast FPU save and restore... done. [ 0.000000] Enabling unmasked SIMD FPU exception support... done. [ 0.000000] Initializing CPU#0 [ 0.000000] allocated 5242240 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Subtract (39 early reservations) [ 0.000000] #1 [0000001000 - 0000002000] EX TRAMPOLINE [ 0.000000] #2 [0000100000 - 00009afb5c] TEXT DATA BSS [ 0.000000] #3 [002f5f2000 - 0030034000] RAMDISK [ 0.000000] #4 [000009fc00 - 0000100000] BIOS reserved [ 0.000000] #5 [00009b0000 - 00009b308a] BRK [ 0.000000] #6 [0000010000 - 0000011000] TRAMPOLINE [ 0.000000] #7 [0000011000 - 0000015000] ACPI WAKEUP [ 0.000000] #8 [0000015000 - 0000016000] PGTABLE [ 0.000000] #9 [0001000000 - 0001001000] BOOTMEM [ 0.000000] #10 [0001001000 - 0001801000] BOOTMEM [ 0.000000] #11 [0001801000 - 0001801004] BOOTMEM [ 0.000000] #12 [0001801040 - 0001801100] BOOTMEM [ 0.000000] #13 [0001801100 - 0001801154] BOOTMEM [ 0.000000] #14 [0001801180 - 0001804180] BOOTMEM [ 0.000000] #15 [0001804180 - 0001804190] BOOTMEM [ 0.000000] #16 [00018041c0 - 0001804dc0] BOOTMEM [ 0.000000] #17 [0001804dc0 - 0001804ea0] BOOTMEM [ 0.000000] #18 [0001804ec0 - 0001804f00] BOOTMEM [ 0.000000] #19 [0001804f00 - 0001804f40] BOOTMEM [ 0.000000] #20 [0001804f40 - 0001804f80] BOOTMEM [ 0.000000] #21 [0001804f80 - 0001804fc0] BOOTMEM [ 0.000000] #22 [0001804fc0 - 0001805000] BOOTMEM [ 0.000000] #23 [0001805000 - 0001805040] BOOTMEM [ 0.000000] #24 [0001805040 - 0001805080] BOOTMEM [ 0.000000] #25 [0001805080 - 0001805090] BOOTMEM [ 0.000000] #26 [00018050c0 - 000180512a] BOOTMEM [ 0.000000] #27 [0001805140 - 00018051aa] BOOTMEM [ 0.000000] #28 [0001c00000 - 0001c0e000] BOOTMEM [ 0.000000] #29 [00018071c0 - 00018071c4] BOOTMEM [ 0.000000] #30 [0001807200 - 0001807204] BOOTMEM [ 0.000000] #31 [0001807240 - 0001807244] BOOTMEM [ 0.000000] #32 [0001807280 - 0001807284] BOOTMEM [ 0.000000] #33 [00018072c0 - 0001807370] BOOTMEM [ 0.000000] #34 [0001807380 - 0001807428] BOOTMEM [ 0.000000] #35 [0001807440 - 000180b440] BOOTMEM [ 0.000000] #36 [000180b440 - 000188b440] BOOTMEM [ 0.000000] #37 [000188b440 - 00018cb440] BOOTMEM [ 0.000000] #38 [0001c0e000 - 000210dd80] BOOTMEM [ 0.000000] Initializing HighMem for node 0 (000377fe:0003fff0) [ 0.000000] Memory: 1014440k/1048512k available (4930k kernel code, 33620k reserved, 2396k data, 684k init, 139208k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff16000 - 0xfffff000 ( 932 kB) [ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB) [ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) [ 0.000000] .init : 0xc0828000 - 0xc08d3000 ( 684 kB) [ 0.000000] .data : 0xc05d0b9a - 0xc0827f68 (2396 kB) [ 0.000000] .text : 0xc0100000 - 0xc05d0b9a (4930 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:2304 nr_irqs:256 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1539.999 MHz processor. [ 0.008008] Calibrating delay loop (skipped), value calculated using timer frequency.. 3079.99 BogoMIPS (lpj=6159996) [ 0.008018] pid_max: default: 32768 minimum: 301 [ 0.008072] Security Framework initialized [ 0.008122] AppArmor: AppArmor initialized [ 0.008127] Yama: becoming mindful. [ 0.008246] Mount-cache hash table entries: 512 [ 0.008514] Initializing cgroup subsys ns [ 0.008522] Initializing cgroup subsys cpuacct [ 0.008531] Initializing cgroup subsys memory [ 0.008548] Initializing cgroup subsys devices [ 0.008554] Initializing cgroup subsys freezer [ 0.008559] Initializing cgroup subsys net_cls [ 0.008610] mce: CPU supports 4 MCE banks [ 0.008646] Performance Events: [ 0.008651] no APIC, boot with the "lapic" boot parameter to force-enable it. [ 0.008656] no hardware sampling interrupt available. [ 0.008660] AMD PMU driver. [ 0.008670] ... version: 0 [ 0.008674] ... bit width: 48 [ 0.008678] ... generic registers: 4 [ 0.008682] ... value mask: 0000ffffffffffff [ 0.008686] ... max period: 00007fffffffffff [ 0.008690] ... fixed-purpose events: 0 [ 0.008694] ... event mask: 000000000000000f [ 0.012917] SMP alternatives: switching to UP code [ 0.023740] Freeing SMP alternatives: 24k freed [ 0.023799] ACPI: Core revision 20100428 [ 0.030345] ACPI: setting ELCR to 0200 (from 0ea0) [ 0.032217] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.032233] ftrace: allocating 21734 entries in 43 pages [ 0.036184] weird, boot CPU (#0) not listed by the BIOS. [ 0.036191] SMP motherboard not detected. [ 0.036195] Local APIC not detected. Using dummy APIC emulation. [ 0.036199] SMP disabled [ 0.036671] Brought up 1 CPUs [ 0.036676] Total of 1 processors activated (3079.99 BogoMIPS). [ 0.040314] devtmpfs: initialized [ 0.042216] regulator: core version 0.5 [ 0.042254] Time: 19:19:24 Date: 07/28/10 [ 0.042318] NET: Registered protocol family 16 [ 0.042539] EISA bus registered [ 0.042559] ACPI: bus type pci registered [ 0.044783] PCI: PCI BIOS revision 2.10 entry at 0xfb3e0, last bus=1 [ 0.044787] PCI: Using configuration type 1 for base access [ 0.046443] bio: create slab at 0 [ 0.047395] ACPI: EC: Look up EC in DSDT [ 0.052304] ACPI: Interpreter enabled [ 0.052309] ACPI: (supports S0 S1 S4 S5) [ 0.052346] ACPI: Using PIC for interrupt routing [ 0.057207] ACPI: No dock devices found. [ 0.057215] PCI: Ignoring host bridge windows from ACPI; if necessary, use "pci=use_crs" and report a bug [ 0.057377] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.057660] pci_root PNP0A03:00: host bridge window [io 0x0000-0x0cf7] (ignored) [ 0.057666] pci_root PNP0A03:00: host bridge window [io 0x0d00-0xffff] (ignored) [ 0.057671] pci_root PNP0A03:00: host bridge window [mem 0x000a0000-0x000bffff] (ignored) [ 0.057675] pci_root PNP0A03:00: host bridge window [mem 0x000c0000-0x000dffff] (ignored) [ 0.057680] pci_root PNP0A03:00: host bridge window [mem 0x40000000-0xffefffff] (ignored) [ 0.057714] pci 0000:00:00.0: reg 10: [mem 0xd0000000-0xd7ffffff pref] [ 0.057814] pci 0000:00:01.0: supports D1 [ 0.057853] pci 0000:00:09.0: reg 10: [mem 0xe2004000-0xe2004fff] [ 0.057894] pci 0000:00:09.0: supports D1 D2 [ 0.057898] pci 0000:00:09.0: PME# supported from D0 D1 D2 D3hot [ 0.057904] pci 0000:00:09.0: PME# disabled [ 0.057936] pci 0000:00:09.1: reg 10: [mem 0xe2002000-0xe2002fff] [ 0.057976] pci 0000:00:09.1: supports D1 D2 [ 0.057980] pci 0000:00:09.1: PME# supported from D0 D1 D2 D3hot [ 0.057985] pci 0000:00:09.1: PME# disabled [ 0.058016] pci 0000:00:09.2: reg 10: [mem 0xe2003000-0xe20030ff] [ 0.058057] pci 0000:00:09.2: supports D1 D2 [ 0.058060] pci 0000:00:09.2: PME# supported from D0 D1 D2 D3hot [ 0.058066] pci 0000:00:09.2: PME# disabled [ 0.058105] pci 0000:00:0a.0: reg 10: [mem 0xe2000000-0xe2001fff] [ 0.058176] pci 0000:00:0b.0: reg 10: [io 0xd000-0xd01f] [ 0.058217] pci 0000:00:0b.0: supports D1 D2 [ 0.058247] pci 0000:00:0b.1: reg 10: [io 0xd400-0xd407] [ 0.058288] pci 0000:00:0b.1: supports D1 D2 [ 0.058345] pci 0000:00:10.0: reg 20: [io 0xd800-0xd81f] [ 0.058371] pci 0000:00:10.0: supports D1 D2 [ 0.058375] pci 0000:00:10.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.058380] pci 0000:00:10.0: PME# disabled [ 0.058426] pci 0000:00:10.1: reg 20: [io 0xdc00-0xdc1f] [ 0.058452] pci 0000:00:10.1: supports D1 D2 [ 0.058456] pci 0000:00:10.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.058461] pci 0000:00:10.1: PME# disabled [ 0.058507] pci 0000:00:10.2: reg 20: [io 0xe000-0xe01f] [ 0.058533] pci 0000:00:10.2: supports D1 D2 [ 0.058536] pci 0000:00:10.2: PME# supported from D0 D1 D2 D3hot D3cold [ 0.058542] pci 0000:00:10.2: PME# disabled [ 0.058573] pci 0000:00:10.3: reg 10: [mem 0xe2005000-0xe20050ff] [ 0.058614] pci 0000:00:10.3: supports D1 D2 [ 0.058617] pci 0000:00:10.3: PME# supported from D0 D1 D2 D3hot D3cold [ 0.058623] pci 0000:00:10.3: PME# disabled [ 0.058684] HPET not enabled in BIOS. You might try hpet=force boot option [ 0.058694] pci 0000:00:11.0: quirk: [io 0x4000-0x407f] claimed by vt8235 PM [ 0.058700] pci 0000:00:11.0: quirk: [io 0x5000-0x500f] claimed by vt8235 SMB [ 0.058764] pci 0000:00:11.1: reg 20: [io 0xe400-0xe40f] [ 0.058864] pci 0000:01:00.0: reg 10: [mem 0xe0000000-0xe0ffffff] [ 0.058872] pci 0000:01:00.0: reg 14: [mem 0xd8000000-0xdfffffff pref] [ 0.058892] pci 0000:01:00.0: reg 30: [mem 0x00000000-0x0001ffff pref] [ 0.058943] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.058949] pci 0000:00:01.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.058956] pci 0000:00:01.0: bridge window [mem 0xe0000000-0xe1ffffff] [ 0.058962] pci 0000:00:01.0: bridge window [mem 0xd8000000-0xdfffffff pref] [ 0.058972] pci_bus 0000:00: on NUMA node 0 [ 0.058978] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.085615] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 5 6 7 *10 11 12 14 15) [ 0.085847] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 *7 10 11 12 14 15) [ 0.086080] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 7 10 *11 12 14 15) [ 0.086311] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 *5 6 7 10 11 12 14 15) [ 0.086381] HEST: Table is not found! [ 0.086545] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none [ 0.086549] vgaarb: loaded [ 0.086847] SCSI subsystem initialized [ 0.086989] libata version 3.00 loaded. [ 0.087098] usbcore: registered new interface driver usbfs [ 0.087120] usbcore: registered new interface driver hub [ 0.087172] usbcore: registered new device driver usb [ 0.087403] ACPI: WMI: Mapper loaded [ 0.087406] PCI: Using ACPI for IRQ routing [ 0.087413] PCI: pci_cache_line_size set to 32 bytes [ 0.087481] reserve RAM buffer: 000000000009fc00 - 000000000009ffff [ 0.087486] reserve RAM buffer: 000000003fff0000 - 000000003fffffff [ 0.087671] NetLabel: Initializing [ 0.087675] NetLabel: domain hash size = 128 [ 0.087677] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.087703] NetLabel: unlabeled traffic allowed by default [ 0.087778] Switching to clocksource tsc [ 0.102453] AppArmor: AppArmor Filesystem Enabled [ 0.102491] pnp: PnP ACPI init [ 0.102527] ACPI: bus type pnp registered [ 0.103824] ERROR: Unable to locate IOAPIC for GSI 8 [ 0.103923] ERROR: Unable to locate IOAPIC for GSI 13 [ 0.104390] ERROR: Unable to locate IOAPIC for GSI 6 [ 0.105457] pnp: PnP ACPI: found 10 devices [ 0.105461] ACPI: ACPI bus type pnp unregistered [ 0.105467] PnPBIOS: Disabled by ACPI PNP [ 0.105490] system 00:00: [mem 0x000d0000-0x000d3fff] has been reserved [ 0.105496] system 00:00: [mem 0x000f0000-0x000f7fff] could not be reserved [ 0.105502] system 00:00: [mem 0x000f8000-0x000fbfff] could not be reserved [ 0.105507] system 00:00: [mem 0x000fc000-0x000fffff] could not be reserved [ 0.105512] system 00:00: [mem 0x3fff0000-0x3fffffff] could not be reserved [ 0.105518] system 00:00: [mem 0xffff0000-0xffffffff] has been reserved [ 0.105523] system 00:00: [mem 0x00000000-0x0009ffff] could not be reserved [ 0.105528] system 00:00: [mem 0x00100000-0x3ffeffff] could not be reserved [ 0.105534] system 00:00: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.105539] system 00:00: [mem 0xfff80000-0xfffeffff] has been reserved [ 0.105549] system 00:02: [io 0x4000-0x407f] has been reserved [ 0.105554] system 00:02: [io 0x5000-0x500f] has been reserved [ 0.105563] system 00:03: [io 0x04d0-0x04d1] has been reserved [ 0.105568] system 00:03: [io 0x0800-0x0805] has been reserved [ 0.105572] system 00:03: [io 0x0290-0x0297] has been reserved [ 0.140426] pci 0000:01:00.0: BAR 6: assigned [mem 0xe1000000-0xe101ffff pref] [ 0.140434] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.140438] pci 0000:00:01.0: bridge window [io disabled] [ 0.140446] pci 0000:00:01.0: bridge window [mem 0xe0000000-0xe1ffffff] [ 0.140452] pci 0000:00:01.0: bridge window [mem 0xd8000000-0xdfffffff pref] [ 0.140472] pci 0000:00:01.0: setting latency timer to 64 [ 0.140479] pci_bus 0000:00: resource 0 [io 0x0000-0xffff] [ 0.140483] pci_bus 0000:00: resource 1 [mem 0x00000000-0xffffffff] [ 0.140488] pci_bus 0000:01: resource 1 [mem 0xe0000000-0xe1ffffff] [ 0.140492] pci_bus 0000:01: resource 2 [mem 0xd8000000-0xdfffffff pref] [ 0.140566] NET: Registered protocol family 2 [ 0.140672] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.141230] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.143944] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.145309] TCP: Hash tables configured (established 131072 bind 65536) [ 0.145315] TCP reno registered [ 0.145324] UDP hash table entries: 512 (order: 2, 16384 bytes) [ 0.145365] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) [ 0.145561] NET: Registered protocol family 1 [ 0.145590] pci 0000:00:01.0: disabling DAC on VIA PCI bridge [ 0.145736] pci 0000:01:00.0: Boot video device [ 0.145742] PCI: CLS 32 bytes, default 32 [ 0.146117] cpufreq-nforce2: No nForce2 chipset. [ 0.146161] Scanning for low memory corruption every 60 seconds [ 0.146342] audit: initializing netlink socket (disabled) [ 0.146363] type=2000 audit(1280344764.144:1): initialized [ 0.160574] Trying to unpack rootfs image as initramfs... [ 0.176620] highmem bounce pool size: 64 pages [ 0.176633] HugeTLB registered 4 MB page size, pre-allocated 0 pages [ 0.182748] VFS: Disk quotas dquot_6.5.2 [ 0.182864] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 0.188393] fuse init (API version 7.14) [ 0.188626] msgmni has been set to 1709 [ 0.192437] alg: No test for stdrng (krng) [ 0.192621] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.192626] io scheduler noop registered [ 0.192630] io scheduler deadline registered [ 0.192648] io scheduler cfq registered (default) [ 0.192859] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.192898] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.193201] vesafb: framebuffer at 0xd812c000, mapped to 0xf8080000, using 1216k, total 1216k [ 0.193206] vesafb: mode is 640x480x32, linelength=2560, pages=0 [ 0.193210] vesafb: scrolling: redraw [ 0.193215] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0 [ 0.226653] Console: switching to colour frame buffer device 80x30 [ 0.259834] fb0: VESA VGA frame buffer device [ 0.324771] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 0.324781] ACPI: Power Button [PWRB] [ 0.324863] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input1 [ 0.324875] ACPI: Sleep Button [SLPB] [ 0.324962] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2 [ 0.324966] ACPI: Power Button [PWRF] [ 0.325042] ACPI: Fan [FAN] (on) [ 0.325335] ACPI: acpi_idle registered with cpuidle [ 0.325386] Marking TSC unstable due to TSC halts in idle [ 0.332576] Switching to clocksource acpi_pm [ 0.332890] thermal LNXTHERM:01: registered as thermal_zone0 [ 0.332909] ACPI: Thermal Zone [THRM] (40 C) [ 0.333040] ERST: Table is not found! [ 0.340471] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.342744] brd: module loaded [ 0.343629] loop: module loaded [ 0.344142] isapnp: Scanning for PnP cards... [ 0.352840] ACPI: PCI Interrupt Link [LNKA] enabled at IRQ 10 [ 0.352849] PCI: setting IRQ 10 as level-triggered [ 0.352858] pata_acpi 0000:00:11.1: PCI INT A -> Link[LNKA] -> GSI 10 (level, low) -> IRQ 10 [ 0.352865] pata_acpi 0000:00:11.1: VIA VLink IRQ fixup, from 255 to 10 [ 0.352993] pata_acpi 0000:00:11.1: PCI INT A disabled [ 0.353570] Fixed MDIO Bus: probed [ 0.353637] PPP generic driver version 2.4.2 [ 0.353757] tun: Universal TUN/TAP device driver, 1.6 [ 0.353761] tun: (C) 1999-2004 Max Krasnyansky [ 0.353926] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.354384] ACPI: PCI Interrupt Link [LNKD] enabled at IRQ 5 [ 0.354388] PCI: setting IRQ 5 as level-triggered [ 0.354396] ehci_hcd 0000:00:09.2: PCI INT C -> Link[LNKD] -> GSI 5 (level, low) -> IRQ 5 [ 0.354429] ehci_hcd 0000:00:09.2: EHCI Host Controller [ 0.354493] ehci_hcd 0000:00:09.2: new USB bus registered, assigned bus number 1 [ 0.404446] ehci_hcd 0000:00:09.2: irq 5, io mem 0xe2003000 [ 0.416273] ehci_hcd 0000:00:09.2: USB 2.0 started, EHCI 1.00 [ 0.416583] hub 1-0:1.0: USB hub found [ 0.416594] hub 1-0:1.0: 3 ports detected [ 0.416722] ehci_hcd 0000:00:10.3: PCI INT D -> Link[LNKD] -> GSI 5 (level, low) -> IRQ 5 [ 0.416758] ehci_hcd 0000:00:10.3: EHCI Host Controller [ 0.416841] ehci_hcd 0000:00:10.3: new USB bus registered, assigned bus number 2 [ 0.416911] ehci_hcd 0000:00:10.3: irq 5, io mem 0xe2005000 [ 0.428471] ehci_hcd 0000:00:10.3: USB 2.0 started, EHCI 1.00 [ 0.428798] hub 2-0:1.0: USB hub found [ 0.428812] hub 2-0:1.0: 6 ports detected [ 0.428930] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.429501] ACPI: PCI Interrupt Link [LNKB] enabled at IRQ 7 [ 0.429506] PCI: setting IRQ 7 as level-triggered [ 0.429515] ohci_hcd 0000:00:09.0: PCI INT A -> Link[LNKB] -> GSI 7 (level, low) -> IRQ 7 [ 0.429549] ohci_hcd 0000:00:09.0: OHCI Host Controller [ 0.429623] ohci_hcd 0000:00:09.0: new USB bus registered, assigned bus number 3 [ 0.429663] ohci_hcd 0000:00:09.0: irq 7, io mem 0xe2004000 [ 0.548891] hub 3-0:1.0: USB hub found [ 0.548905] hub 3-0:1.0: 2 ports detected [ 0.549628] ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 11 [ 0.549633] PCI: setting IRQ 11 as level-triggered [ 0.549642] ohci_hcd 0000:00:09.1: PCI INT B -> Link[LNKC] -> GSI 11 (level, low) -> IRQ 11 [ 0.549676] ohci_hcd 0000:00:09.1: OHCI Host Controller [ 0.549753] ohci_hcd 0000:00:09.1: new USB bus registered, assigned bus number 4 [ 0.549793] ohci_hcd 0000:00:09.1: irq 11, io mem 0xe2002000 [ 0.664791] hub 4-0:1.0: USB hub found [ 0.664806] hub 4-0:1.0: 1 port detected [ 0.664922] uhci_hcd: USB Universal Host Controller Interface driver [ 0.665027] uhci_hcd 0000:00:10.0: PCI INT A -> Link[LNKA] -> GSI 10 (level, low) -> IRQ 10 [ 0.665046] uhci_hcd 0000:00:10.0: UHCI Host Controller [ 0.665124] uhci_hcd 0000:00:10.0: new USB bus registered, assigned bus number 5 [ 0.665164] uhci_hcd 0000:00:10.0: irq 10, io base 0x0000d800 [ 0.665367] hub 5-0:1.0: USB hub found [ 0.665375] hub 5-0:1.0: 2 ports detected [ 0.665459] uhci_hcd 0000:00:10.1: PCI INT B -> Link[LNKB] -> GSI 7 (level, low) -> IRQ 7 [ 0.665470] uhci_hcd 0000:00:10.1: UHCI Host Controller [ 0.665535] uhci_hcd 0000:00:10.1: new USB bus registered, assigned bus number 6 [ 0.665562] uhci_hcd 0000:00:10.1: irq 7, io base 0x0000dc00 [ 0.665774] hub 6-0:1.0: USB hub found [ 0.665784] hub 6-0:1.0: 2 ports detected [ 0.665857] uhci_hcd 0000:00:10.2: PCI INT C -> Link[LNKC] -> GSI 11 (level, low) -> IRQ 11 [ 0.665868] uhci_hcd 0000:00:10.2: UHCI Host Controller [ 0.665922] uhci_hcd 0000:00:10.2: new USB bus registered, assigned bus number 7 [ 0.665952] uhci_hcd 0000:00:10.2: irq 11, io base 0x0000e000 [ 0.666154] hub 7-0:1.0: USB hub found [ 0.666161] hub 7-0:1.0: 2 ports detected [ 0.666321] PNP: No PS/2 controller found. Probing ports directly. [ 0.672468] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.672492] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.672795] mice: PS/2 mouse device common for all mice [ 0.673017] rtc_cmos 00:05: RTC can wake from S4 [ 0.673132] rtc_cmos 00:05: rtc core: registered rtc_cmos as rtc0 [ 0.673161] rtc0: alarms up to one year, y3k, 242 bytes nvram [ 0.673363] device-mapper: uevent: version 1.0.3 [ 0.673585] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 0.680138] device-mapper: multipath: version 1.1.1 loaded [ 0.680148] device-mapper: multipath round-robin: version 1.0.0 loaded [ 0.680512] EISA: Probing bus 0 at eisa.0 [ 0.680536] Cannot allocate resource for EISA slot 4 [ 0.680540] Cannot allocate resource for EISA slot 5 [ 0.680555] EISA: Detected 0 cards. [ 0.728337] cpuidle: using governor ladder [ 0.728419] cpuidle: using governor menu [ 0.728908] TCP cubic registered [ 0.729175] NET: Registered protocol family 10 [ 0.729700] lo: Disabled Privacy Extensions [ 0.730007] NET: Registered protocol family 17 [ 0.730075] powernow-k8: Processor cpuid 662 not supported [ 0.730110] Using IPI No-Shortcut mode [ 0.730317] PM: Resume from disk failed. [ 0.730339] registered taskstats version 1 [ 0.730598] Magic number: 2:398:345 [ 0.730653] tty tty62: hash matches [ 0.730774] rtc_cmos 00:05: setting system clock to 2010-07-28 19:19:24 UTC (1280344764) [ 0.730780] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.730782] EDD information not available. [ 0.992052] isapnp: No Plug & Play device found [ 1.078671] Freeing initrd memory: 10504k freed [ 1.101993] Freeing unused kernel memory: 684k freed [ 1.103554] Write protecting the kernel text: 4932k [ 1.103604] Write protecting the kernel read-only data: 2012k [ 1.142512] udev: starting version 151 [ 1.408139] usb 3-2: new full speed USB device using ohci_hcd and address 2 [ 1.450068] Floppy drive(s): fd0 is 1.44M [ 1.463386] pata_via 0000:00:11.1: version 0.3.4 [ 1.463419] pata_via 0000:00:11.1: PCI INT A -> Link[LNKA] -> GSI 10 (level, low) -> IRQ 10 [ 1.463427] pata_via 0000:00:11.1: VIA VLink IRQ fixup, from 255 to 10 [ 1.493393] scsi0 : pata_via [ 1.497181] FDC 0 is a post-1991 82077 [ 1.506607] scsi1 : pata_via [ 1.510935] ata1: PATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0xe400 irq 14 [ 1.510941] ata2: PATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0xe408 irq 15 [ 1.681348] ata1.00: ATA-6: WDC WD800JB-00ETA0, 77.07W77, max UDMA/100 [ 1.681356] ata1.00: 156301488 sectors, multi 16: LBA48 [ 1.682318] ata1.01: ATA-5: WDC WD400BB-53AUA1, 18.20D18, max UDMA/100 [ 1.682323] ata1.01: 78165360 sectors, multi 16: LBA [ 1.682355] ata1.00: limited to UDMA/33 due to 40-wire cable [ 1.682359] ata1.01: limited to UDMA/33 due to 40-wire cable [ 1.697235] ata1.00: configured for UDMA/33 [ 1.713177] ata1.01: configured for UDMA/33 [ 1.713386] scsi 0:0:0:0: Direct-Access ATA WDC WD800JB-00ET 77.0 PQ: 0 ANSI: 5 [ 1.713689] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 1.714232] scsi 0:0:1:0: Direct-Access ATA WDC WD400BB-53AU 18.2 PQ: 0 ANSI: 5 [ 1.714593] sd 0:0:1:0: Attached scsi generic sg1 type 0 [ 1.714973] sd 0:0:0:0: [sda] 156301488 512-byte logical blocks: (80.0 GB/74.5 GiB) [ 1.715069] sd 0:0:0:0: [sda] Write Protect is off [ 1.715074] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.715113] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.715388] sda: sda1 sda2 < sda5 > [ 1.755210] sd 0:0:0:0: [sda] Attached SCSI disk [ 1.755233] sd 0:0:1:0: [sdb] 78165360 512-byte logical blocks: (40.0 GB/37.2 GiB) [ 1.755315] sd 0:0:1:0: [sdb] Write Protect is off [ 1.755320] sd 0:0:1:0: [sdb] Mode Sense: 00 3a 00 00 [ 1.755357] sd 0:0:1:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.755624] sdb: sdb1 [ 1.777658] sd 0:0:1:0: [sdb] Attached SCSI disk [ 1.836053] usb 4-1: new full speed USB device using ohci_hcd and address 2 [ 2.052807] ata2.00: ATAPI: MATSHITA CD-RW CW-7585, 1.04, max MWDMA2 [ 2.052853] ata2.01: ATAPI: Memorex 48MAXX 1248AJ, VWS4, max UDMA/33 [ 2.060329] ata2.00: configured for MWDMA2 [ 2.076283] ata2.01: configured for UDMA/33 [ 2.084797] scsi 1:0:0:0: CD-ROM MATSHITA CD-RW CW-7585 1.04 PQ: 0 ANSI: 5 [ 2.086887] sr0: scsi3-mmc drive: 8x/32x writer cd/rw xa/form2 cdda tray [ 2.086894] Uniform CD-ROM driver Revision: 3.20 [ 2.087378] sr 1:0:0:0: Attached scsi CD-ROM sr0 [ 2.087591] sr 1:0:0:0: Attached scsi generic sg2 type 5 [ 2.093505] scsi 1:0:1:0: CD-ROM Memorex 48MAXX 1248AJ VWS4 PQ: 0 ANSI: 5 [ 2.142615] sr1: scsi3-mmc drive: 48x/48x writer cd/rw xa/form2 cdda tray [ 2.143157] sr 1:0:1:0: Attached scsi CD-ROM sr1 [ 2.143376] sr 1:0:1:0: Attached scsi generic sg3 type 5 [ 2.288061] usb 5-2: new low speed USB device using uhci_hcd and address 2 [ 2.524862] usbcore: registered new interface driver hiddev [ 2.540592] input: Microsoft Microsoft® Digital Media Pro Keyboard as /devices/pci0000:00/0000:00:10.0/usb5/5-2/5-2:1.0/input/input3 [ 2.541433] generic-usb 0003:045E:00B0.0001: input,hidraw0: USB HID v1.11 Keyboard [Microsoft Microsoft® Digital Media Pro Keyboard] on usb-0000:00:10.0-2/input0 [ 2.572413] input: Microsoft Microsoft® Digital Media Pro Keyboard as /devices/pci0000:00/0000:00:10.0/usb5/5-2/5-2:1.1/input/input4 [ 2.572704] generic-usb 0003:045E:00B0.0002: input,hidraw1: USB HID v1.11 Device [Microsoft Microsoft® Digital Media Pro Keyboard] on usb-0000:00:10.0-2/input1 [ 2.572963] usbcore: registered new interface driver usbhid [ 2.572967] usbhid: USB HID core driver [ 2.712051] usb 6-2: new low speed USB device using uhci_hcd and address 2 [ 2.905661] input: Logitech USB-PS/2 Optical Mouse as /devices/pci0000:00/0000:00:10.1/usb6/6-2/6-2:1.0/input/input5 [ 2.906528] generic-usb 0003:046D:C00E.0003: input,hidraw2: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:10.1-2/input0 [ 7.541130] EXT4-fs (sda5): INFO: recovery required on readonly filesystem [ 7.541141] EXT4-fs (sda5): write access will be enabled during recovery [ 7.624199] EXT4-fs (sda5): recovery complete [ 7.624657] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null) [ 23.748573] Adding 14370104k swap on /dev/sdb1. Priority:-1 extents:1 across:14370104k [ 23.796155] EXT4-fs (sda5): re-mounted. Opts: errors=remount-ro [ 23.814352] udev: starting version 151 [ 24.081029] WARNING! power/level is deprecated; use power/control instead [ 24.202626] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 [ 24.372958] Linux agpgart interface v0.103 [ 24.395801] agpgart: Detected VIA KT266/KY266x/KT333 chipset [ 24.661496] lp: driver loaded but no devices found [ 24.745581] usblp0: USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x03F0 pid 0x6004 [ 24.745633] usbcore: registered new interface driver usblp [ 24.895600] agpgart-via 0000:00:00.0: AGP aperture is 128M @ 0xd0000000 [ 24.958569] irda_init() [ 24.958607] NET: Registered protocol family 23 [ 25.050395] cfg80211: Calling CRDA to update world regulatory domain [ 25.142991] gameport gameport0: EMU10K1 is pci0000:00:0b.1/gameport0, io 0xd400, speed 1217kHz [ 25.149999] cfg80211: World regulatory domain updated: [ 25.150008] (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 25.150014] (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 25.150018] (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 25.150023] (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 25.150027] (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 25.150032] (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 25.186217] [drm] Initialized drm 1.1.0 20060810 [ 25.527290] type=1400 audit(1280359189.292:2): operation="profile_load" pid=610 name="/sbin/dhclient3" pid=610 comm="apparmor_parser" [ 25.527742] type=1400 audit(1280359189.292:3): operation="profile_load" pid=610 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=610 comm="apparmor_parser" [ 25.527998] type=1400 audit(1280359189.292:4): operation="profile_load" pid=610 name="/usr/lib/connman/scripts/dhclient-script" pid=610 comm="apparmor_parser" [ 25.884967] rt2500pci 0000:00:0a.0: PCI INT A -> Link[LNKC] -> GSI 11 (level, low) -> IRQ 11 [ 25.929675] nouveau 0000:01:00.0: PCI INT A -> Link[LNKA] -> GSI 10 (level, low) -> IRQ 10 [ 26.015747] [drm] nouveau 0000:01:00.0: Detected an NV30 generation card (0x034200b1) [ 26.015758] checking generic (d812c000 130000) vs hw (d8000000 8000000) [ 26.015763] fb: conflicting fb hw usage nouveaufb vs VESA VGA - removing generic driver [ 26.017362] Console: switching to colour dummy device 80x25 [ 26.019986] [drm] nouveau 0000:01:00.0: Attempting to load BIOS image from PROM [ 26.140334] [drm] nouveau 0000:01:00.0: ... appears to be valid [ 26.140579] [drm] nouveau 0000:01:00.0: BMP BIOS found [ 26.140584] [drm] nouveau 0000:01:00.0: BMP version 5.41 [ 26.140589] [drm] nouveau 0000:01:00.0: Bios version 04.34.20.87 [ 26.140595] [drm] nouveau 0000:01:00.0: Found Display Configuration Block version 2.2 [ 26.140601] [drm] nouveau 0000:01:00.0: Raw DCB entry 0: 01000300 000088b8 [ 26.140608] [drm] nouveau 0000:01:00.0: Raw DCB entry 1: 02020321 00000303 [ 26.140612] [drm] nouveau 0000:01:00.0: Raw DCB entry 2: 01010312 00000300 [ 26.140874] [drm] nouveau 0000:01:00.0: Loading NV17 power sequencing microcode [ 26.140881] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 0 at offset 0xED03 [ 26.505329] type=1400 audit(1280359190.272:5): operation="profile_load" pid=803 name="/usr/share/gdm/guest-session/Xsession" pid=803 comm="apparmor_parser" [ 26.508994] type=1400 audit(1280359190.276:6): operation="profile_replace" pid=804 name="/sbin/dhclient3" pid=804 comm="apparmor_parser" [ 26.509462] type=1400 audit(1280359190.276:7): operation="profile_replace" pid=804 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=804 comm="apparmor_parser" [ 26.509746] type=1400 audit(1280359190.276:8): operation="profile_replace" pid=804 name="/usr/lib/connman/scripts/dhclient-script" pid=804 comm="apparmor_parser" [ 26.520102] type=1400 audit(1280359190.288:9): operation="profile_load" pid=805 name="/usr/bin/evince" pid=805 comm="apparmor_parser" [ 26.534493] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 1 at offset 0xEF9E [ 26.534533] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 2 at offset 0xF0E4 [ 26.534573] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 3 at offset 0xF26D [ 26.534580] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 4 at offset 0xF28A [ 26.534587] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 5 at offset 0xF2A7 [ 26.537591] type=1400 audit(1280359190.304:10): operation="profile_load" pid=805 name="/usr/bin/evince-previewer" pid=805 comm="apparmor_parser" [ 26.540212] [drm] nouveau 0000:01:00.0: Parsing VBIOS init table 6 at offset 0xF440 [ 26.540223] [drm] nouveau 0000:01:00.0: Detected 128MiB VRAM [ 26.556475] type=1400 audit(1280359190.324:11): operation="profile_load" pid=805 name="/usr/bin/evince-thumbnailer" pid=805 comm="apparmor_parser" [ 26.569326] [TTM] Zone kernel: Available graphics memory: 443222 kiB. [ 26.569333] [TTM] Zone highmem: Available graphics memory: 512826 kiB. [ 26.569336] [TTM] Initializing pool allocator. [ 26.569490] agpgart-via 0000:00:00.0: AGP 2.0 bridge [ 26.569515] agpgart-via 0000:00:00.0: putting AGP V2 device into 4x mode [ 26.569586] nouveau 0000:01:00.0: putting AGP V2 device into 4x mode [ 26.569591] [drm] nouveau 0000:01:00.0: 128 MiB GART (aperture) [ 26.569965] [drm] nouveau 0000:01:00.0: Allocating FIFO number 0 [ 26.577717] [drm] nouveau 0000:01:00.0: nouveau_channel_alloc: initialised FIFO 0 [ 26.577733] [drm] nouveau 0000:01:00.0: Initial CRTC_OWNER is 0 [ 26.577869] [drm] nouveau 0000:01:00.0: Detected a VGA connector [ 26.578301] [drm] nouveau 0000:01:00.0: Detected a TV connector [ 26.578602] [drm] nouveau 0000:01:00.0: Detected a DVI-D connector [ 26.579888] [drm] nouveau 0000:01:00.0: Setting dpms mode 3 on vga encoder (output 0) [ 26.579895] [drm] nouveau 0000:01:00.0: Setting dpms mode 3 on TV encoder (output 1) [ 26.579904] [drm] nouveau 0000:01:00.0: Setting dpms mode 3 on tmds encoder (output 2) [ 26.637380] phy0: Selected rate control algorithm 'minstrel' [ 26.638311] Registered led device: rt2500pci-phy0::radio [ 26.638340] Registered led device: rt2500pci-phy0::quality [ 26.697823] EMU10K1_Audigy 0000:00:0b.0: PCI INT A -> Link[LNKD] -> GSI 5 (level, low) -> IRQ 5 [ 26.804932] BUG: unable to handle kernel NULL pointer dereference at 0000030c [ 26.804957] IP: [] fb_mmap+0x34/0x170 [ 26.804984] *pde = 3f809067 [ 26.804991] Oops: 0000 [#1] SMP [ 26.804999] last sysfs file: /sys/devices/pci0000:00/0000:00:0a.0/device [ 26.805011] Modules linked in: snd_emu10k1(+) arc4 snd_ac97_codec ac97_bus snd_pcm snd_page_alloc snd_util_mem snd_hwdep nouveau(+) snd_seq_midi rt2500pci rt2x00pci snd_rawmidi rt2x00lib led_class snd_seq_midi_event mac80211 snd_seq ttm snd_timer drm_kms_helper snd_seq_device drm i2c_viapro via_ircc usblp cfg80211 i2c_algo_bit irda psmouse serio_raw emu10k1_gp snd lp via_agp joydev gameport eeprom_93cx6 parport agpgart shpchp crc_ccitt soundcore usbhid hid pata_via floppy [ 26.805103] [ 26.805112] Pid: 278, comm: plymouthd Not tainted 2.6.35-11-generic #16-Ubuntu VT8367-8235/VT8367-8235 [ 26.805125] EIP: 0060:[] EFLAGS: 00010293 CPU: 0 [ 26.805135] EIP is at fb_mmap+0x34/0x170 [ 26.805142] EAX: 00000000 EBX: f397f898 ECX: c05fdd60 EDX: 00000000 [ 26.805151] ESI: 00000000 EDI: b745f000 EBP: f6a73efc ESP: f6a73ed8 [ 26.805160] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 26.805169] Process plymouthd (pid: 278, ti=f6a72000 task=f68b9960 task.ti=f6a72000) [ 26.805179] Stack: [ 26.805184] 00000202 c01f8068 f6980960 0000012c 000080d0 00000058 f6892648 f689264c [ 26.805202] <0> b745f000 f6a73f50 c01f810c b758b000 000000fa 00000000 f48fc580 00000000 [ 26.805221] <0> 00000000 00000000 f6892630 00000000 f73fc060 f48fc580 ffffffea 0000012c [ 26.805241] Call Trace: [ 26.805257] [] ? mmap_region+0x298/0x490 [ 26.805267] [] ? mmap_region+0x33c/0x490 [ 26.805279] [] ? do_mmap_pgoff+0x25c/0x300 [ 26.805290] [] ? sys_mmap_pgoff+0x193/0x1c0 [ 26.805303] [] ? syscall_call+0x7/0xb [ 26.805311] Code: 89 75 f8 89 7d fc 0f 1f 44 00 00 8b 40 0c 89 d3 8b 52 44 8b 40 10 8b 40 34 25 ff ff 0f 00 81 fa ff ff 0f 00 8b 34 85 40 67 82 c0 <8b> 8e 0c 03 00 00 76 14 bf ea ff ff ff 89 f8 8b 5d f4 8b 75 f8 [ 26.805383] EIP: [] fb_mmap+0x34/0x170 SS:ESP 0068:f6a73ed8 [ 26.805396] CR2: 000000000000030c [ 26.805405] ---[ end trace bf8374d0cf10d7a1 ]--- [ 26.845259] ADDRCONF(NETDEV_UP): wlan0: link is not ready [ 26.921075] [drm] nouveau 0000:01:00.0: allocated 800x600 fb: 0x49000, bo f22ffa00 [ 26.935789] [drm] nouveau 0000:01:00.0: Setting dpms mode 0 on vga encoder (output 0) [ 26.935798] [drm] nouveau 0000:01:00.0: Output VGA-1 is running on CRTC 0 using output A [ 26.943051] Console: switching to colour frame buffer device 100x37 [ 26.943724] fb0: nouveaufb frame buffer device [ 26.943738] drm: registered panic notifier [ 26.943754] Slow work thread pool: Starting up [ 26.947992] Slow work thread pool: Ready [ 26.948133] [drm] Initialized nouveau 0.0.16 20090420 for 0000:01:00.0 on minor 0 Bug: 611135 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-11-generic (buildd@rothera) (gcc version 4.4.5 20100723 (prerelease) (Ubuntu/Linaro 4.4.4-7ubuntu3) ) #16-Ubuntu SMP Sat Jul 24 21:38:26 UTC 2010 (Ubuntu 2.6.35-11.16-generic 2.6.35-rc5) [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 00000000000a0000 (usable) [ 0.000000] BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 000000003f688c00 (usable) [ 0.000000] BIOS-e820: 000000003f688c00 - 000000003f68ac00 (ACPI NVS) [ 0.000000] BIOS-e820: 000000003f68ac00 - 000000003f68cc00 (ACPI data) [ 0.000000] BIOS-e820: 000000003f68cc00 - 0000000040000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fed00400 (reserved) [ 0.000000] BIOS-e820: 00000000fed20000 - 00000000feda0000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fef00000 (reserved) [ 0.000000] BIOS-e820: 00000000ffb00000 - 0000000100000000 (reserved) [ 0.000000] Notice: NX (Execute Disable) protection cannot be enabled: non-PAE kernel! [ 0.000000] DMI 2.3 present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] last_pfn = 0x3f688 max_arch_pfn = 0x100000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask FC0000000 write-back [ 0.000000] 1 base 03F800000 mask FFF800000 uncachable [ 0.000000] 2 base 03F700000 mask FFFF00000 uncachable [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820 update range: 0000000000002000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000001000 (reserved) [ 0.000000] modified: 0000000000001000 - 0000000000002000 (usable) [ 0.000000] modified: 0000000000002000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 00000000000a0000 (usable) [ 0.000000] modified: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 000000003f688c00 (usable) [ 0.000000] modified: 000000003f688c00 - 000000003f68ac00 (ACPI NVS) [ 0.000000] modified: 000000003f68ac00 - 000000003f68cc00 (ACPI data) [ 0.000000] modified: 000000003f68cc00 - 0000000040000000 (reserved) [ 0.000000] modified: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fed00400 (reserved) [ 0.000000] modified: 00000000fed20000 - 00000000feda0000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fef00000 (reserved) [ 0.000000] modified: 00000000ffb00000 - 0000000100000000 (reserved) [ 0.000000] initial memory mapped : 0 - 00c00000 [ 0.000000] found SMP MP-table at [c00fe710] fe710 [ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000 [ 0.000000] 0000000000 - 0000400000 page 4k [ 0.000000] 0000400000 - 0037400000 page 2M [ 0.000000] 0037400000 - 00377fe000 page 4k [ 0.000000] kernel direct mapping tables up to 377fe000 @ 15000-1a000 [ 0.000000] RAMDISK: 2eee4000 - 2f927000 [ 0.000000] ACPI: RSDP 000fec00 00014 (v00 DELL ) [ 0.000000] ACPI: RSDT 000fcc50 0003C (v01 DELL DV051 00000007 ASL 00000061) [ 0.000000] ACPI: FACP 000fcc8c 00074 (v01 DELL DV051 00000007 ASL 00000061) [ 0.000000] ACPI: DSDT fffc56f3 02D5F (v01 DELL dt_ex 00001000 MSFT 0100000D) [ 0.000000] ACPI: FACS 3f688c00 00040 [ 0.000000] ACPI: SSDT fffc858f 000BA (v01 DELL st_ex 00001000 MSFT 0100000D) [ 0.000000] ACPI: APIC 000fcd00 00092 (v01 DELL DV051 00000007 ASL 00000061) [ 0.000000] ACPI: BOOT 000fcd92 00028 (v01 DELL DV051 00000007 ASL 00000061) [ 0.000000] ACPI: MCFG 000fcdba 0003E (v01 DELL DV051 00000007 ASL 00000061) [ 0.000000] ACPI: HPET 000fcdf8 00038 (v01 DELL DV051 00000007 ASL 00000061) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] 126MB HIGHMEM available. [ 0.000000] 887MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 377fe000 [ 0.000000] low ram: 0 - 377fe000 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000001 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x000377fe [ 0.000000] HighMem 0x000377fe -> 0x0003f688 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[3] active PFN ranges [ 0.000000] 0: 0x00000001 -> 0x00000002 [ 0.000000] 0: 0x00000010 -> 0x000000a0 [ 0.000000] 0: 0x00000100 -> 0x0003f688 [ 0.000000] On node 0 totalpages: 259609 [ 0.000000] free_area_init_node: node 0, pgdat c080f680, node_mem_map c1001020 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3953 pages, LIFO batch:0 [ 0.000000] Normal zone: 1744 pages used for memmap [ 0.000000] Normal zone: 221486 pages, LIFO batch:31 [ 0.000000] HighMem zone: 254 pages used for memmap [ 0.000000] HighMem zone: 32140 pages, LIFO batch:7 [ 0.000000] Using APIC driver default [ 0.000000] ACPI: PM-Timer IO Port: 0x808 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x06] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x02] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x05] lapic_id[0x04] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x06] lapic_id[0x07] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x07] lapic_id[0x03] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x08] lapic_id[0x05] disabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0xff] high level lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x08] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 8, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 8 CPUs, 7 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [16000 - 167ff] [ 0.000000] PM: Registered nosave memory: 0000000000002000 - 0000000000010000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000f0000 [ 0.000000] PM: Registered nosave memory: 00000000000f0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at 40000000 (gap: 40000000:a0000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:8 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 14 pages/cpu @c1800000 s36352 r0 d20992 u524288 [ 0.000000] pcpu-alloc: s36352 r0 d20992 u524288 alloc=1*4194304 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 4 5 6 7 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 257579 [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-11-generic root=UUID=8a2f805b-82be-4ee0-9f2a-29fc21915cb4 ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Enabling fast FPU save and restore... done. [ 0.000000] Enabling unmasked SIMD FPU exception support... done. [ 0.000000] Initializing CPU#0 [ 0.000000] early_res array is doubled to 128 at [16800 - 177ff] [ 0.000000] allocated 5194380 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Subtract (57 early reservations) [ 0.000000] #1 [0000001000 - 0000002000] EX TRAMPOLINE [ 0.000000] #2 [0000100000 - 00009afb5c] TEXT DATA BSS [ 0.000000] #3 [002eee4000 - 002f927000] RAMDISK [ 0.000000] #4 [00009b0000 - 00009b31d0] BRK [ 0.000000] #5 [00000fe720 - 0000100000] BIOS reserved [ 0.000000] #6 [00000fe710 - 00000fe720] MP-table mpf [ 0.000000] #7 [000009fc00 - 00000f0000] BIOS reserved [ 0.000000] #8 [00000f01d0 - 00000fe710] BIOS reserved [ 0.000000] #9 [00000f0000 - 00000f01d0] MP-table mpc [ 0.000000] #10 [0000010000 - 0000011000] TRAMPOLINE [ 0.000000] #11 [0000011000 - 0000015000] ACPI WAKEUP [ 0.000000] #12 [0000015000 - 0000016000] PGTABLE [ 0.000000] #13 [0001000000 - 0001001000] BOOTMEM [ 0.000000] #14 [0001001000 - 00017f1000] BOOTMEM [ 0.000000] #15 [00017f1000 - 00017f1004] BOOTMEM [ 0.000000] #16 [00017f1040 - 00017f1100] BOOTMEM [ 0.000000] #17 [00017f1100 - 00017f1154] BOOTMEM [ 0.000000] #18 [00017f1180 - 00017f4180] BOOTMEM [ 0.000000] #19 [00017f4180 - 00017f418c] BOOTMEM [ 0.000000] #20 [00017f41c0 - 00017f47c0] BOOTMEM [ 0.000000] #21 [00017f47c0 - 00017f47e5] BOOTMEM [ 0.000000] #22 [00017f4800 - 00017f4827] BOOTMEM [ 0.000000] #23 [00017f4840 - 00017f49c8] BOOTMEM [ 0.000000] #24 [00017f4a00 - 00017f4a40] BOOTMEM [ 0.000000] #25 [00017f4a40 - 00017f4a80] BOOTMEM [ 0.000000] #26 [00017f4a80 - 00017f4ac0] BOOTMEM [ 0.000000] #27 [00017f4ac0 - 00017f4b00] BOOTMEM [ 0.000000] #28 [00017f4b00 - 00017f4b40] BOOTMEM [ 0.000000] #29 [00017f4b40 - 00017f4b80] BOOTMEM [ 0.000000] #30 [00017f4b80 - 00017f4bc0] BOOTMEM [ 0.000000] #31 [00017f4bc0 - 00017f4c00] BOOTMEM [ 0.000000] #32 [00017f4c00 - 00017f4c40] BOOTMEM [ 0.000000] #33 [00017f4c40 - 00017f4c80] BOOTMEM [ 0.000000] #34 [00017f4c80 - 00017f4cc0] BOOTMEM [ 0.000000] #35 [00017f4cc0 - 00017f4cd0] BOOTMEM [ 0.000000] #36 [00017f4d00 - 00017f4d10] BOOTMEM [ 0.000000] #37 [00017f4d40 - 00017f4daa] BOOTMEM [ 0.000000] #38 [00017f4dc0 - 00017f4e2a] BOOTMEM [ 0.000000] #39 [0001800000 - 000180e000] BOOTMEM [ 0.000000] #40 [0001880000 - 000188e000] BOOTMEM [ 0.000000] #41 [0001900000 - 000190e000] BOOTMEM [ 0.000000] #42 [0001980000 - 000198e000] BOOTMEM [ 0.000000] #43 [0001a00000 - 0001a0e000] BOOTMEM [ 0.000000] #44 [0001a80000 - 0001a8e000] BOOTMEM [ 0.000000] #45 [0001b00000 - 0001b0e000] BOOTMEM [ 0.000000] #46 [0001b80000 - 0001b8e000] BOOTMEM [ 0.000000] #47 [00017f6e40 - 00017f6e44] BOOTMEM [ 0.000000] #48 [00017f6e80 - 00017f6e84] BOOTMEM [ 0.000000] #49 [00017f6ec0 - 00017f6ee0] BOOTMEM [ 0.000000] #50 [00017f6f00 - 00017f6f20] BOOTMEM [ 0.000000] #51 [00017f6f40 - 00017f6fd8] BOOTMEM [ 0.000000] #52 [00017f7000 - 00017f7038] BOOTMEM [ 0.000000] #53 [00017f7040 - 00017fb040] BOOTMEM [ 0.000000] #54 [0001b8e000 - 0001c0e000] BOOTMEM [ 0.000000] #55 [000180e000 - 000184e000] BOOTMEM [ 0.000000] #56 [0001c0e000 - 000210228c] BOOTMEM [ 0.000000] Initializing HighMem for node 0 (000377fe:0003f688) [ 0.000000] Memory: 1004520k/1038880k available (4930k kernel code, 33916k reserved, 2396k data, 684k init, 129576k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff16000 - 0xfffff000 ( 932 kB) [ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB) [ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) [ 0.000000] .init : 0xc0828000 - 0xc08d3000 ( 684 kB) [ 0.000000] .data : 0xc05d0b9a - 0xc0827f68 (2396 kB) [ 0.000000] .text : 0xc0100000 - 0xc05d0b9a (4930 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=13, HWalign=128, Order=0-3, MinObjects=0, CPUs=8, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:2304 nr_irqs:744 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 2992.681 MHz processor. [ 0.004006] Calibrating delay loop (skipped), value calculated using timer frequency.. 5985.36 BogoMIPS (lpj=11970724) [ 0.004013] pid_max: default: 32768 minimum: 301 [ 0.004043] Security Framework initialized [ 0.004062] AppArmor: AppArmor initialized [ 0.004065] Yama: becoming mindful. [ 0.004139] Mount-cache hash table entries: 512 [ 0.004320] Initializing cgroup subsys ns [ 0.004325] Initializing cgroup subsys cpuacct [ 0.004333] Initializing cgroup subsys memory [ 0.004347] Initializing cgroup subsys devices [ 0.004350] Initializing cgroup subsys freezer [ 0.004354] Initializing cgroup subsys net_cls [ 0.004393] CPU: Physical Processor ID: 0 [ 0.004397] CPU: Processor Core ID: 0 [ 0.004400] mce: CPU supports 4 MCE banks [ 0.004414] CPU0: Thermal monitoring enabled (TM1) [ 0.004419] using mwait in idle threads. [ 0.004426] Performance Events: Netburst events, Netburst P4/Xeon PMU driver. [ 0.004438] ... version: 0 [ 0.004440] ... bit width: 40 [ 0.004443] ... generic registers: 18 [ 0.004446] ... value mask: 000000ffffffffff [ 0.004448] ... max period: 0000007fffffffff [ 0.004451] ... fixed-purpose events: 0 [ 0.004453] ... event mask: 000000000003ffff [ 0.009143] SMP alternatives: switching to UP code [ 0.021545] ACPI: Core revision 20100428 [ 0.052927] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.052935] ftrace: allocating 21734 entries in 43 pages [ 0.056068] Enabling APIC mode: Flat. Using 1 I/O APICs [ 0.056391] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.098557] CPU0: Intel(R) Pentium(R) 4 CPU 3.00GHz stepping 03 [ 0.100000] Brought up 1 CPUs [ 0.100000] Total of 1 processors activated (5985.36 BogoMIPS). [ 0.100000] devtmpfs: initialized [ 0.100000] regulator: core version 0.5 [ 0.100000] Time: 3:01:17 Date: 07/29/10 [ 0.100000] NET: Registered protocol family 16 [ 0.100000] EISA bus registered [ 0.100000] ACPI: bus type pci registered [ 0.100000] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.100000] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.100000] PCI: Using MMCONFIG for extended config space [ 0.100000] PCI: Using configuration type 1 for base access [ 0.100000] bio: create slab at 0 [ 0.100672] ACPI: EC: Look up EC in DSDT [ 0.111001] ACPI: BIOS _OSI(Linux) query ignored [ 0.121934] ACPI: Interpreter enabled [ 0.121940] ACPI: (supports S0 S1 S3 S4 S5) [ 0.121977] ACPI: Using IOAPIC for interrupt routing [ 0.164669] ACPI: No dock devices found. [ 0.164675] PCI: Ignoring host bridge windows from ACPI; if necessary, use "pci=use_crs" and report a bug [ 0.168423] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.176173] pci_root PNP0A03:00: host bridge window [io 0x0000-0x0cf7] (ignored) [ 0.176178] pci_root PNP0A03:00: host bridge window [io 0x0d00-0xffff] (ignored) [ 0.176182] pci_root PNP0A03:00: host bridge window [mem 0x000a0000-0x000bffff] (ignored) [ 0.176186] pci_root PNP0A03:00: host bridge window [mem 0x80000000-0xdfffffff] (ignored) [ 0.176191] pci_root PNP0A03:00: host bridge window [mem 0xf0000000-0xfebfffff] (ignored) [ 0.176261] pci 0000:00:02.0: reg 10: [mem 0xdff80000-0xdfffffff] [ 0.176267] pci 0000:00:02.0: reg 14: [io 0xecd8-0xecdf] [ 0.176275] pci 0000:00:02.0: reg 18: [mem 0xc0000000-0xcfffffff pref] [ 0.176281] pci 0000:00:02.0: reg 1c: [mem 0xdff40000-0xdff7ffff] [ 0.176357] pci 0000:00:1b.0: reg 10: [mem 0xdff3c000-0xdff3ffff 64bit] [ 0.176404] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.176410] pci 0000:00:1b.0: PME# disabled [ 0.176485] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.176491] pci 0000:00:1c.0: PME# disabled [ 0.176566] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 0.176571] pci 0000:00:1c.1: PME# disabled [ 0.176627] pci 0000:00:1d.0: reg 20: [io 0xff80-0xff9f] [ 0.176680] pci 0000:00:1d.1: reg 20: [io 0xff60-0xff7f] [ 0.176734] pci 0000:00:1d.2: reg 20: [io 0xff40-0xff5f] [ 0.176786] pci 0000:00:1d.3: reg 20: [io 0xff20-0xff3f] [ 0.176839] pci 0000:00:1d.7: reg 10: [mem 0xffa80800-0xffa80bff] [ 0.176894] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.176900] pci 0000:00:1d.7: PME# disabled [ 0.177017] pci 0000:00:1f.0: quirk: [io 0x0800-0x087f] claimed by ICH6 ACPI/GPIO/TCO [ 0.177024] pci 0000:00:1f.0: quirk: [io 0x0880-0x08bf] claimed by ICH6 GPIO [ 0.177029] pci 0000:00:1f.0: LPC Generic IO decode 1 PIO at 0c00-0c7f [ 0.177035] pci 0000:00:1f.0: LPC Generic IO decode 2 PIO at 00e0-00ef [ 0.177062] pci 0000:00:1f.1: reg 10: [io 0x01f0-0x01f7] [ 0.177070] pci 0000:00:1f.1: reg 14: [io 0x03f4-0x03f7] [ 0.177078] pci 0000:00:1f.1: reg 18: [io 0x0170-0x0177] [ 0.177087] pci 0000:00:1f.1: reg 1c: [io 0x0374-0x0377] [ 0.177095] pci 0000:00:1f.1: reg 20: [io 0xffa0-0xffaf] [ 0.177141] pci 0000:00:1f.2: reg 10: [io 0xfe00-0xfe07] [ 0.177150] pci 0000:00:1f.2: reg 14: [io 0xfe10-0xfe13] [ 0.177159] pci 0000:00:1f.2: reg 18: [io 0xfe20-0xfe27] [ 0.177166] pci 0000:00:1f.2: reg 1c: [io 0xfe30-0xfe33] [ 0.177174] pci 0000:00:1f.2: reg 20: [io 0xfea0-0xfeaf] [ 0.177181] pci 0000:00:1f.2: reg 24: [mem 0xdff3bc00-0xdff3bfff] [ 0.177205] pci 0000:00:1f.2: PME# supported from D3hot [ 0.177210] pci 0000:00:1f.2: PME# disabled [ 0.177259] pci 0000:00:1f.3: reg 20: [io 0xece0-0xecff] [ 0.177333] pci 0000:00:1c.0: PCI bridge to [bus 01-01] [ 0.177340] pci 0000:00:1c.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.177346] pci 0000:00:1c.0: bridge window [mem 0xdfe00000-0xdfefffff] [ 0.177354] pci 0000:00:1c.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.177402] pci 0000:00:1c.1: PCI bridge to [bus 02-02] [ 0.177408] pci 0000:00:1c.1: bridge window [io 0xf000-0x0000] (disabled) [ 0.177414] pci 0000:00:1c.1: bridge window [mem 0xdfd00000-0xdfdfffff] [ 0.177422] pci 0000:00:1c.1: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.177476] pci 0000:03:02.0: reg 10: [mem 0xdfcf0000-0xdfcfffff] [ 0.177486] pci 0000:03:02.0: reg 14: [io 0xdcb8-0xdcbf] [ 0.177532] pci 0000:03:02.0: PME# supported from D3hot D3cold [ 0.177537] pci 0000:03:02.0: PME# disabled [ 0.177578] pci 0000:03:08.0: reg 10: [mem 0xdfcef000-0xdfceffff] [ 0.177587] pci 0000:03:08.0: reg 14: [io 0xdcc0-0xdcff] [ 0.177633] pci 0000:03:08.0: supports D1 D2 [ 0.177637] pci 0000:03:08.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.177643] pci 0000:03:08.0: PME# disabled [ 0.177683] pci 0000:00:1e.0: PCI bridge to [bus 03-03] (subtractive decode) [ 0.177689] pci 0000:00:1e.0: bridge window [io 0xd000-0xdfff] [ 0.177695] pci 0000:00:1e.0: bridge window [mem 0xdfc00000-0xdfcfffff] [ 0.177703] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.177707] pci 0000:00:1e.0: bridge window [io 0x0000-0xffff] (subtractive decode) [ 0.177711] pci 0000:00:1e.0: bridge window [mem 0x00000000-0xffffffff] (subtractive decode) [ 0.177729] pci_bus 0000:00: on NUMA node 0 [ 0.177737] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.178132] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI1._PRT] [ 0.178522] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI2._PRT] [ 0.178748] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI3._PRT] [ 0.574771] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 7 9 10 *11 12 15) [ 0.575138] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 9 *10 11 12 15) [ 0.575506] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 *4 5 6 7 9 10 11 12 15) [ 0.576128] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 7 9 10 11 12 15) *0, disabled. [ 0.576495] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 6 7 9 *10 11 12 15) [ 0.576858] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 6 7 *9 10 11 12 15) [ 0.577219] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 *5 6 7 9 10 11 12 15) [ 0.577582] ACPI: PCI Interrupt Link [LNKH] (IRQs *3 4 5 6 7 9 10 11 12 15) [ 0.577694] HEST: Table is not found! [ 0.577776] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 0.577787] vgaarb: loaded [ 0.578002] SCSI subsystem initialized [ 0.578061] libata version 3.00 loaded. [ 0.578136] usbcore: registered new interface driver usbfs [ 0.578153] usbcore: registered new interface driver hub [ 0.578190] usbcore: registered new device driver usb [ 0.578354] ACPI: WMI: Mapper loaded [ 0.578357] PCI: Using ACPI for IRQ routing [ 0.578361] PCI: pci_cache_line_size set to 64 bytes [ 0.578429] reserve RAM buffer: 0000000000002000 - 000000000000ffff [ 0.578433] reserve RAM buffer: 000000003f688c00 - 000000003fffffff [ 0.578557] NetLabel: Initializing [ 0.578561] NetLabel: domain hash size = 128 [ 0.578564] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.578579] NetLabel: unlabeled traffic allowed by default [ 0.578619] HPET: 3 timers in total, 0 timers will be used for per-cpu timer [ 0.578626] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 [ 0.578633] hpet0: 3 comparators, 64-bit 14.318180 MHz counter [ 0.584023] Switching to clocksource tsc [ 0.596218] AppArmor: AppArmor Filesystem Enabled [ 0.596239] pnp: PnP ACPI init [ 0.596260] ACPI: bus type pnp registered [ 0.602322] pnp 00:01: disabling [io 0x0800-0x085f] because it overlaps 0000:00:1f.0 BAR 13 [io 0x0800-0x087f] [ 0.602328] pnp 00:01: disabling [io 0x0860-0x08ff] because it overlaps 0000:00:1f.0 BAR 13 [io 0x0800-0x087f] [ 0.622205] pnp: PnP ACPI: found 8 devices [ 0.622208] ACPI: ACPI bus type pnp unregistered [ 0.622214] PnPBIOS: Disabled by ACPI PNP [ 0.622230] system 00:01: [io 0x0c00-0x0c7f] has been reserved [ 0.622243] system 00:06: [mem 0x00000000-0x0009ffff] could not be reserved [ 0.622248] system 00:06: [mem 0x00100000-0x00ffffff] could not be reserved [ 0.622253] system 00:06: [mem 0x01000000-0x3f688bff] could not be reserved [ 0.622259] system 00:06: [mem 0x000c0000-0x000fffff] could not be reserved [ 0.622263] system 00:06: [mem 0xfec00000-0xfecfffff] could not be reserved [ 0.622268] system 00:06: [mem 0xfee00000-0xfeefffff] has been reserved [ 0.622273] system 00:06: [mem 0xfed20000-0xfed9ffff] has been reserved [ 0.622277] system 00:06: [mem 0xffb00000-0xffbfffff] has been reserved [ 0.622282] system 00:06: [mem 0xffc00000-0xffffffff] has been reserved [ 0.622291] system 00:07: [io 0x0100-0x01fe] could not be reserved [ 0.622295] system 00:07: [io 0x0200-0x0277] has been reserved [ 0.622299] system 00:07: [io 0x0280-0x02e7] has been reserved [ 0.622303] system 00:07: [io 0x02e8-0x02ef] has been reserved [ 0.622308] system 00:07: [io 0x02f0-0x02f7] has been reserved [ 0.622312] system 00:07: [io 0x02f8-0x02ff] has been reserved [ 0.622317] system 00:07: [io 0x0300-0x0377] could not be reserved [ 0.622321] system 00:07: [io 0x0380-0x03bb] has been reserved [ 0.622326] system 00:07: [io 0x03c0-0x03e7] has been reserved [ 0.622330] system 00:07: [io 0x03f6-0x03f7] could not be reserved [ 0.622335] system 00:07: [io 0x0400-0x04cf] has been reserved [ 0.622339] system 00:07: [io 0x04d2-0x057f] has been reserved [ 0.622343] system 00:07: [io 0x0580-0x0677] has been reserved [ 0.622347] system 00:07: [io 0x0680-0x0777] has been reserved [ 0.622352] system 00:07: [io 0x0780-0x07bb] has been reserved [ 0.622356] system 00:07: [io 0x07c0-0x07ff] has been reserved [ 0.622361] system 00:07: [io 0x08e0-0x08ff] has been reserved [ 0.622365] system 00:07: [io 0x0900-0x09fe] has been reserved [ 0.622370] system 00:07: [io 0x0a00-0x0afe] has been reserved [ 0.622374] system 00:07: [io 0x0b00-0x0bfe] has been reserved [ 0.622378] system 00:07: [io 0x0c80-0x0caf] has been reserved [ 0.622382] system 00:07: [io 0x0cb0-0x0cbf] has been reserved [ 0.622387] system 00:07: [io 0x0cc0-0x0cf7] has been reserved [ 0.622391] system 00:07: [io 0x0d00-0x0dfe] has been reserved [ 0.622396] system 00:07: [io 0x0e00-0x0efe] has been reserved [ 0.622400] system 00:07: [io 0x0f00-0x0ffe] has been reserved [ 0.622405] system 00:07: [io 0x2000-0x20fe] has been reserved [ 0.622409] system 00:07: [io 0x2100-0x21fe] has been reserved [ 0.622414] system 00:07: [io 0x2200-0x22fe] has been reserved [ 0.622418] system 00:07: [io 0x2300-0x23fe] has been reserved [ 0.622423] system 00:07: [io 0x2400-0x24fe] has been reserved [ 0.622427] system 00:07: [io 0x2500-0x25fe] has been reserved [ 0.622431] system 00:07: [io 0x2600-0x26fe] has been reserved [ 0.622435] system 00:07: [io 0x2700-0x27fe] has been reserved [ 0.622440] system 00:07: [io 0x2800-0x28fe] has been reserved [ 0.622444] system 00:07: [io 0x2900-0x29fe] has been reserved [ 0.622449] system 00:07: [io 0x2a00-0x2afe] has been reserved [ 0.622453] system 00:07: [io 0x2b00-0x2bfe] has been reserved [ 0.622458] system 00:07: [io 0x2c00-0x2cfe] has been reserved [ 0.622462] system 00:07: [io 0x2d00-0x2dfe] has been reserved [ 0.622467] system 00:07: [io 0x2e00-0x2efe] has been reserved [ 0.622471] system 00:07: [io 0x2f00-0x2ffe] has been reserved [ 0.622476] system 00:07: [io 0x5000-0x50fe] has been reserved [ 0.622480] system 00:07: [io 0x5100-0x51fe] has been reserved [ 0.622485] system 00:07: [io 0x5200-0x52fe] has been reserved [ 0.622489] system 00:07: [io 0x5300-0x53fe] has been reserved [ 0.622494] system 00:07: [io 0x5400-0x54fe] has been reserved [ 0.622498] system 00:07: [io 0x5500-0x55fe] has been reserved [ 0.622503] system 00:07: [io 0x5600-0x56fe] has been reserved [ 0.622507] system 00:07: [io 0x5700-0x57fe] has been reserved [ 0.622512] system 00:07: [io 0x5800-0x58fe] has been reserved [ 0.622517] system 00:07: [io 0x5900-0x59fe] has been reserved [ 0.622521] system 00:07: [io 0x5a00-0x5afe] has been reserved [ 0.622526] system 00:07: [io 0x5b00-0x5bfe] has been reserved [ 0.622531] system 00:07: [io 0x5c00-0x5cfe] has been reserved [ 0.622535] system 00:07: [io 0x5d00-0x5dfe] has been reserved [ 0.622540] system 00:07: [io 0x5e00-0x5efe] has been reserved [ 0.622544] system 00:07: [io 0x5f00-0x5ffe] has been reserved [ 0.622549] system 00:07: [io 0x6000-0x60fe] has been reserved [ 0.622553] system 00:07: [io 0x6100-0x61fe] has been reserved [ 0.622558] system 00:07: [io 0x6200-0x62fe] has been reserved [ 0.622562] system 00:07: [io 0x6300-0x63fe] has been reserved [ 0.622567] system 00:07: [io 0x6400-0x64fe] has been reserved [ 0.622572] system 00:07: [io 0x6500-0x65fe] has been reserved [ 0.622577] system 00:07: [io 0x6600-0x66fe] has been reserved [ 0.622584] system 00:07: [io 0x6700-0x67fe] has been reserved [ 0.622589] system 00:07: [io 0x6800-0x68fe] has been reserved [ 0.622594] system 00:07: [io 0x6900-0x69fe] has been reserved [ 0.622599] system 00:07: [io 0x6a00-0x6afe] has been reserved [ 0.622604] system 00:07: [io 0x6b00-0x6bfe] has been reserved [ 0.622609] system 00:07: [io 0x6c00-0x6cfe] has been reserved [ 0.622613] system 00:07: [io 0x6d00-0x6dfe] has been reserved [ 0.622619] system 00:07: [io 0x6e00-0x6efe] has been reserved [ 0.622623] system 00:07: [io 0x6f00-0x6ffe] has been reserved [ 0.622629] system 00:07: [io 0xa000-0xa0fe] has been reserved [ 0.622633] system 00:07: [io 0xa100-0xa1fe] has been reserved [ 0.622638] system 00:07: [io 0xa200-0xa2fe] has been reserved [ 0.622643] system 00:07: [io 0xa300-0xa3fe] has been reserved [ 0.622648] system 00:07: [io 0xa400-0xa4fe] has been reserved [ 0.622653] system 00:07: [io 0xa500-0xa5fe] has been reserved [ 0.622658] system 00:07: [io 0xa600-0xa6fe] has been reserved [ 0.622663] system 00:07: [io 0xa700-0xa7fe] has been reserved [ 0.622668] system 00:07: [io 0xa800-0xa8fe] has been reserved [ 0.622673] system 00:07: [io 0xa900-0xa9fe] has been reserved [ 0.622678] system 00:07: [io 0xaa00-0xaafe] has been reserved [ 0.622683] system 00:07: [io 0xab00-0xabfe] has been reserved [ 0.622688] system 00:07: [io 0xac00-0xacfe] has been reserved [ 0.622693] system 00:07: [io 0xad00-0xadfe] has been reserved [ 0.622698] system 00:07: [io 0xae00-0xaefe] has been reserved [ 0.622703] system 00:07: [io 0xaf00-0xaffe] has been reserved [ 0.622708] system 00:07: [mem 0xe0000000-0xefffffff] has been reserved [ 0.622712] system 00:07: [mem 0xfeda0000-0xfedacfff] has been reserved [ 0.657511] pci 0000:00:1c.0: BAR 15: assigned [mem 0x40000000-0x401fffff 64bit pref] [ 0.657518] pci 0000:00:1c.0: BAR 13: assigned [io 0x1000-0x1fff] [ 0.657523] pci 0000:00:1c.0: PCI bridge to [bus 01-01] [ 0.657528] pci 0000:00:1c.0: bridge window [io 0x1000-0x1fff] [ 0.657535] pci 0000:00:1c.0: bridge window [mem 0xdfe00000-0xdfefffff] [ 0.657541] pci 0000:00:1c.0: bridge window [mem 0x40000000-0x401fffff 64bit pref] [ 0.657549] pci 0000:00:1c.1: PCI bridge to [bus 02-02] [ 0.657552] pci 0000:00:1c.1: bridge window [io disabled] [ 0.657559] pci 0000:00:1c.1: bridge window [mem 0xdfd00000-0xdfdfffff] [ 0.657564] pci 0000:00:1c.1: bridge window [mem pref disabled] [ 0.657572] pci 0000:00:1e.0: PCI bridge to [bus 03-03] [ 0.657577] pci 0000:00:1e.0: bridge window [io 0xd000-0xdfff] [ 0.657584] pci 0000:00:1e.0: bridge window [mem 0xdfc00000-0xdfcfffff] [ 0.657590] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.657607] alloc irq_desc for 16 on node -1 [ 0.657611] alloc kstat_irqs on node -1 [ 0.657619] pci 0000:00:1c.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.657625] pci 0000:00:1c.0: setting latency timer to 64 [ 0.657636] alloc irq_desc for 17 on node -1 [ 0.657639] alloc kstat_irqs on node -1 [ 0.657646] pci 0000:00:1c.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 0.657652] pci 0000:00:1c.1: setting latency timer to 64 [ 0.657661] pci 0000:00:1e.0: setting latency timer to 64 [ 0.657667] pci_bus 0000:00: resource 0 [io 0x0000-0xffff] [ 0.657672] pci_bus 0000:00: resource 1 [mem 0x00000000-0xffffffff] [ 0.657676] pci_bus 0000:01: resource 0 [io 0x1000-0x1fff] [ 0.657680] pci_bus 0000:01: resource 1 [mem 0xdfe00000-0xdfefffff] [ 0.657684] pci_bus 0000:01: resource 2 [mem 0x40000000-0x401fffff 64bit pref] [ 0.657688] pci_bus 0000:02: resource 1 [mem 0xdfd00000-0xdfdfffff] [ 0.657692] pci_bus 0000:03: resource 0 [io 0xd000-0xdfff] [ 0.657696] pci_bus 0000:03: resource 1 [mem 0xdfc00000-0xdfcfffff] [ 0.657700] pci_bus 0000:03: resource 4 [io 0x0000-0xffff] [ 0.657705] pci_bus 0000:03: resource 5 [mem 0x00000000-0xffffffff] [ 0.657748] NET: Registered protocol family 2 [ 0.657842] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.658127] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.658647] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.658894] TCP: Hash tables configured (established 131072 bind 65536) [ 0.658898] TCP reno registered [ 0.658903] UDP hash table entries: 512 (order: 2, 16384 bytes) [ 0.658914] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) [ 0.659043] NET: Registered protocol family 1 [ 0.659063] pci 0000:00:02.0: Boot video device [ 0.659189] pci 0000:03:08.0: Firmware left e100 interrupts enabled; disabling [ 0.659197] PCI: CLS 64 bytes, default 64 [ 0.659277] Simple Boot Flag at 0x7a set to 0x1 [ 0.659413] cpufreq-nforce2: No nForce2 chipset. [ 0.659452] Scanning for low memory corruption every 60 seconds [ 0.659611] audit: initializing netlink socket (disabled) [ 0.659623] type=2000 audit(1280372477.652:1): initialized [ 0.669690] Trying to unpack rootfs image as initramfs... [ 0.680328] highmem bounce pool size: 64 pages [ 0.680336] HugeTLB registered 4 MB page size, pre-allocated 0 pages [ 0.692144] VFS: Disk quotas dquot_6.5.2 [ 0.692226] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 0.693001] fuse init (API version 7.14) [ 0.693121] msgmni has been set to 1708 [ 0.700293] alg: No test for stdrng (krng) [ 0.700380] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.700384] io scheduler noop registered [ 0.700387] io scheduler deadline registered [ 0.700407] io scheduler cfq registered (default) [ 0.700540] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.700579] alloc irq_desc for 40 on node -1 [ 0.700582] alloc kstat_irqs on node -1 [ 0.700596] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 0.700700] pcieport 0000:00:1c.1: setting latency timer to 64 [ 0.700735] alloc irq_desc for 41 on node -1 [ 0.700738] alloc kstat_irqs on node -1 [ 0.700748] pcieport 0000:00:1c.1: irq 41 for MSI/MSI-X [ 0.700855] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.700929] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.701312] vesafb: framebuffer at 0xc012c000, mapped to 0xf8080000, using 1216k, total 1216k [ 0.701316] vesafb: mode is 640x480x32, linelength=2560, pages=0 [ 0.701320] vesafb: scrolling: redraw [ 0.701324] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0 [ 0.714049] Console: switching to colour frame buffer device 80x30 [ 0.726647] fb0: VESA VGA frame buffer device [ 0.748189] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 0.748196] ACPI: Power Button [VBTN] [ 0.748264] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 [ 0.748268] ACPI: Power Button [PWRF] [ 0.748725] ACPI: acpi_idle registered with cpuidle [ 0.821465] ERST: Table is not found! [ 0.823497] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.825354] brd: module loaded [ 0.826064] loop: module loaded [ 0.826290] ata_piix 0000:00:1f.1: version 2.13 [ 0.826306] ata_piix 0000:00:1f.1: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.826357] ata_piix 0000:00:1f.1: setting latency timer to 64 [ 0.832282] isapnp: Scanning for PnP cards... [ 0.837768] scsi0 : ata_piix [ 0.837872] scsi1 : ata_piix [ 0.837920] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0xffa0 irq 14 [ 0.837924] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0xffa8 irq 15 [ 0.837964] alloc irq_desc for 20 on node -1 [ 0.837967] alloc kstat_irqs on node -1 [ 0.837976] ata_piix 0000:00:1f.2: PCI INT C -> GSI 20 (level, low) -> IRQ 20 [ 0.837997] ata_piix 0000:00:1f.2: MAP [ P0 P2 P1 P3 ] [ 0.887636] ata2: port disabled. ignoring. [ 0.992163] ata_piix 0000:00:1f.2: setting latency timer to 64 [ 0.996083] scsi2 : ata_piix [ 0.996172] scsi3 : ata_piix [ 0.996219] ata3: SATA max UDMA/133 cmd 0xfe00 ctl 0xfe10 bmdma 0xfea0 irq 20 [ 0.996223] ata4: SATA max UDMA/133 cmd 0xfe20 ctl 0xfe30 bmdma 0xfea8 irq 20 [ 0.996685] Fixed MDIO Bus: probed [ 0.996736] PPP generic driver version 2.4.2 [ 0.996808] tun: Universal TUN/TAP device driver, 1.6 [ 0.996812] tun: (C) 1999-2004 Max Krasnyansky [ 0.996920] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.996944] alloc irq_desc for 21 on node -1 [ 0.996947] alloc kstat_irqs on node -1 [ 0.996957] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 21 (level, low) -> IRQ 21 [ 0.996977] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 0.996982] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 0.997026] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 1 [ 0.997059] ehci_hcd 0000:00:1d.7: debug port 1 [ 1.000936] ehci_hcd 0000:00:1d.7: cache line size of 64 is not supported [ 1.004133] ehci_hcd 0000:00:1d.7: irq 21, io mem 0xffa80800 [ 1.024022] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 1.024207] hub 1-0:1.0: USB hub found [ 1.024214] hub 1-0:1.0: 8 ports detected [ 1.024306] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 1.024326] uhci_hcd: USB Universal Host Controller Interface driver [ 1.024374] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 21 (level, low) -> IRQ 21 [ 1.024387] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 1.024392] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 1.024443] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2 [ 1.024472] uhci_hcd 0000:00:1d.0: irq 21, io base 0x0000ff80 [ 1.024619] hub 2-0:1.0: USB hub found [ 1.024626] hub 2-0:1.0: 2 ports detected [ 1.024694] alloc irq_desc for 22 on node -1 [ 1.024698] alloc kstat_irqs on node -1 [ 1.024707] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 22 (level, low) -> IRQ 22 [ 1.024715] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 1.024719] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 1.024768] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 3 [ 1.024806] uhci_hcd 0000:00:1d.1: irq 22, io base 0x0000ff60 [ 1.024959] hub 3-0:1.0: USB hub found [ 1.024965] hub 3-0:1.0: 2 ports detected [ 1.025027] alloc irq_desc for 18 on node -1 [ 1.025030] alloc kstat_irqs on node -1 [ 1.025036] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 1.025044] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 1.025049] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 1.025094] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 4 [ 1.025130] uhci_hcd 0000:00:1d.2: irq 18, io base 0x0000ff40 [ 1.025272] hub 4-0:1.0: USB hub found [ 1.025278] hub 4-0:1.0: 2 ports detected [ 1.025340] alloc irq_desc for 23 on node -1 [ 1.025343] alloc kstat_irqs on node -1 [ 1.025349] uhci_hcd 0000:00:1d.3: PCI INT D -> GSI 23 (level, low) -> IRQ 23 [ 1.025357] uhci_hcd 0000:00:1d.3: setting latency timer to 64 [ 1.025362] uhci_hcd 0000:00:1d.3: UHCI Host Controller [ 1.025404] uhci_hcd 0000:00:1d.3: new USB bus registered, assigned bus number 5 [ 1.025442] uhci_hcd 0000:00:1d.3: irq 23, io base 0x0000ff20 [ 1.025595] hub 5-0:1.0: USB hub found [ 1.025601] hub 5-0:1.0: 2 ports detected [ 1.025737] PNP: No PS/2 controller found. Probing ports directly. [ 1.072009] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 1.072017] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 1.072158] mice: PS/2 mouse device common for all mice [ 1.072301] rtc_cmos 00:05: RTC can wake from S4 [ 1.072357] rtc_cmos 00:05: rtc core: registered rtc_cmos as rtc0 [ 1.072383] rtc0: alarms up to one day, 242 bytes nvram, hpet irqs [ 1.072518] device-mapper: uevent: version 1.0.3 [ 1.076512] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 1.080026] device-mapper: multipath: version 1.1.1 loaded [ 1.080030] device-mapper: multipath round-robin: version 1.0.0 loaded [ 1.083020] EISA: Probing bus 0 at eisa.0 [ 1.083025] EISA: Cannot allocate resource for mainboard [ 1.083029] Cannot allocate resource for EISA slot 1 [ 1.083032] Cannot allocate resource for EISA slot 2 [ 1.083043] Cannot allocate resource for EISA slot 5 [ 1.083046] Cannot allocate resource for EISA slot 6 [ 1.083057] EISA: Detected 0 cards. [ 1.084829] ata1.00: ATA-6: ST380013A, 8.01, max UDMA/100 [ 1.084833] ata1.00: 156301488 sectors, multi 8: LBA48 [ 1.084879] ata1.01: ATAPI: TSSTcorpCD/DVDW SH-S182M, SB04, max UDMA/33 [ 1.088024] cpuidle: using governor ladder [ 1.088028] cpuidle: using governor menu [ 1.088390] TCP cubic registered [ 1.088571] NET: Registered protocol family 10 [ 1.089044] lo: Disabled Privacy Extensions [ 1.089301] NET: Registered protocol family 17 [ 1.089362] Using IPI No-Shortcut mode [ 1.089475] PM: Resume from disk failed. [ 1.089495] registered taskstats version 1 [ 1.089735] Magic number: 2:462:8 [ 1.089810] rtc_cmos 00:05: setting system clock to 2010-07-29 03:01:18 UTC (1280372478) [ 1.089814] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 1.089816] EDD information not available. [ 1.101148] ata1.00: configured for UDMA/100 [ 1.116274] ata1.01: configured for UDMA/33 [ 1.179323] ata3.00: ATA-7: ST3160828AS, 8.04, max UDMA/133 [ 1.179328] ata3.00: 312500000 sectors, multi 8: LBA48 NCQ (depth 0/32) [ 1.192796] ata3.00: configured for UDMA/133 [ 1.376390] Freeing initrd memory: 10508k freed [ 1.425179] isapnp: No Plug & Play device found [ 1.425384] scsi 0:0:0:0: Direct-Access ATA ST380013A 8.01 PQ: 0 ANSI: 5 [ 1.425608] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 1.426520] sd 0:0:0:0: [sda] 156301488 512-byte logical blocks: (80.0 GB/74.5 GiB) [ 1.426633] scsi 0:0:1:0: CD-ROM TSSTcorp CD/DVDW SH-S182M SB04 PQ: 0 ANSI: 5 [ 1.426848] sd 0:0:0:0: [sda] Write Protect is off [ 1.426852] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.427624] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.429425] sda: sda1 [ 1.456765] sr0: scsi3-mmc drive: 48x/48x writer dvd-ram cd/rw xa/form2 cdda tray [ 1.456770] Uniform CD-ROM driver Revision: 3.20 [ 1.456876] sr 0:0:1:0: Attached scsi CD-ROM sr0 [ 1.456937] sr 0:0:1:0: Attached scsi generic sg1 type 5 [ 1.457085] scsi 2:0:0:0: Direct-Access ATA ST3160828AS 8.04 PQ: 0 ANSI: 5 [ 1.457223] sd 2:0:0:0: Attached scsi generic sg2 type 0 [ 1.457311] sd 2:0:0:0: [sdb] 312500000 512-byte logical blocks: (160 GB/149 GiB) [ 1.457394] sd 2:0:0:0: [sdb] Write Protect is off [ 1.457398] sd 2:0:0:0: [sdb] Mode Sense: 00 3a 00 00 [ 1.457434] sd 2:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.457617] sdb: [ 1.457805] sd 0:0:0:0: [sda] Attached SCSI disk [ 1.473216] sdb1 sdb2 < sdb5 > [ 1.493854] sd 2:0:0:0: [sdb] Attached SCSI disk [ 1.493871] Freeing unused kernel memory: 684k freed [ 1.494308] Write protecting the kernel text: 4932k [ 1.494340] Write protecting the kernel read-only data: 2012k [ 1.516102] udev: starting version 151 [ 1.737455] e100: Intel(R) PRO/100 Network Driver, 3.5.24-k2-NAPI [ 1.737460] e100: Copyright(c) 1999-2006 Intel Corporation [ 1.737609] e100 0000:03:08.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20 [ 1.761325] e100 0000:03:08.0: PME# disabled [ 1.763187] e100 0000:03:08.0: eth0: addr 0xdfcef000, irq 20, MAC addr 00:16:76:2d:ce:6f [ 1.776021] usb 2-1: new low speed USB device using uhci_hcd and address 2 [ 1.948209] EXT4-fs (sdb1): INFO: recovery required on readonly filesystem [ 1.948216] EXT4-fs (sdb1): write access will be enabled during recovery [ 1.976279] usbcore: registered new interface driver hiddev [ 1.992160] input: Microsoft Microsoft 3-Button Mouse with IntelliEye(TM) as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/input/input2 [ 1.992296] generic-usb 0003:045E:0040.0001: input,hidraw0: USB HID v1.10 Mouse [Microsoft Microsoft 3-Button Mouse with IntelliEye(TM)] on usb-0000:00:1d.0-1/input0 [ 1.992322] usbcore: registered new interface driver usbhid [ 1.992325] usbhid: USB HID core driver [ 2.012490] EXT4-fs (sdb1): recovery complete [ 2.012657] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: (null) [ 2.200020] usb 3-1: new low speed USB device using uhci_hcd and address 2 [ 2.393424] input: Dell Dell USB Keyboard as /devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0/input/input3 [ 2.393516] generic-usb 0003:413C:2003.0002: input,hidraw1: USB HID v1.10 Keyboard [Dell Dell USB Keyboard] on usb-0000:00:1d.1-1/input0 [ 2.632038] usb 3-2: new full speed USB device using uhci_hcd and address 3 [ 14.198743] Adding 2975740k swap on /dev/sdb5. Priority:-1 extents:1 across:2975740k [ 14.253719] udev: starting version 151 [ 14.496985] intel_rng: Firmware space is locked read-only. If you can't or [ 14.496988] intel_rng: don't want to disable this in firmware setup, and if [ 14.496990] intel_rng: you are certain that your system has a functional [ 14.496991] intel_rng: RNG, try using the 'no_fwh_detect' option. [ 14.573100] Linux agpgart interface v0.103 [ 14.707459] dcdbas dcdbas: Dell Systems Management Base Driver (version 5.6.0-3.2) [ 14.748101] agpgart-intel 0000:00:00.0: Intel 915G Chipset [ 14.748699] agpgart-intel 0000:00:00.0: detected 7932K stolen memory [ 14.751719] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xc0000000 [ 14.828366] Linux video capture interface: v2.00 [ 14.833726] gspca: main v2.9.0 registered [ 14.853290] lp: driver loaded but no devices found [ 14.853587] EXT4-fs (sdb1): re-mounted. Opts: errors=remount-ro [ 14.854147] gspca: probing 045e:00f7 [ 14.859018] sonixj: Sonix chip id: 11 [ 14.861102] input: sonixj as /devices/pci0000:00/0000:00:1d.1/usb3/3-2/input/input4 [ 14.861218] gspca: video0 created [ 14.861223] gspca: found int in endpoint: 0x83, buffer_len=1, interval=100 [ 14.861265] gspca: probing 045e:00f7 [ 14.861276] gspca: probing 045e:00f7 [ 14.861301] usbcore: registered new interface driver sonixj [ 14.861304] sonixj: registered [ 15.047140] [drm] Initialized drm 1.1.0 20060810 [ 15.125797] type=1400 audit(1280372492.533:2): operation="profile_load" pid=532 name="/sbin/dhclient3" pid=532 comm="apparmor_parser" [ 15.126496] type=1400 audit(1280372492.533:3): operation="profile_load" pid=532 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=532 comm="apparmor_parser" [ 15.126870] type=1400 audit(1280372492.533:4): operation="profile_load" pid=532 name="/usr/lib/connman/scripts/dhclient-script" pid=532 comm="apparmor_parser" [ 15.216824] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 15.216832] i915 0000:00:02.0: setting latency timer to 64 [ 15.249754] BUG: unable to handle kernel NULL pointer dereference at (null) [ 15.250217] IP: [] __mutex_lock_slowpath+0x9a/0x140 [ 15.250588] *pde = 3df7b067 [ 15.250779] Oops: 0002 [#1] SMP [ 15.251002] last sysfs file: /sys/module/snd_rawmidi/initstate [ 15.251360] Modules linked in: i915(+) drm_kms_helper snd_seq_midi_event snd_seq snd_rawmidi snd_timer drm snd_seq_device gspca_sonixj gspca_main snd videodev v4l1_compat dcdbas intel_agp lp soundcore snd_page_alloc i2c_algo_bit video output psmouse serio_raw parport agpgart usbhid hid e100 mii [ 15.252001] [ 15.252001] Pid: 219, comm: plymouthd Not tainted 2.6.35-11-generic #16-Ubuntu 0JC474/Dell DV051 [ 15.252001] EIP: 0060:[] EFLAGS: 00010246 CPU: 0 [ 15.252001] EIP is at __mutex_lock_slowpath+0x9a/0x140 [ 15.252001] EAX: 00000000 EBX: f5288e90 ECX: f5288e98 EDX: f5b13ec0 [ 15.252001] ESI: f5288e94 EDI: f5288e90 EBP: f5b13ed8 ESP: f5b13eb4 [ 15.252001] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 15.252001] Process plymouthd (pid: 219, ti=f5b12000 task=f69bcc20 task.ti=f5b12000) [ 15.252001] Stack: [ 15.252001] f849c400 f69bcc20 f5288e98 f5288e98 00000000 f5b13ed8 f5288e90 f5381f80 [ 15.252001] <0> f5288e90 f5b13ee8 c05c8295 f5381f80 f5381f80 f5b13efc f848fd53 f5381f80 [ 15.252001] <0> f5381fe0 f5288c00 f5b13f44 f8487327 00000001 f8497d85 f8497180 f84994f0 [ 15.252001] Call Trace: [ 15.252001] [] ? mutex_lock+0x25/0x40 [ 15.252001] [] ? drm_fb_release+0x23/0x70 [drm] [ 15.252001] [] ? drm_release+0x3e7/0x4c0 [drm] [ 15.252001] [] ? __fput+0xe4/0x1e0 [ 15.252001] [] ? fput+0x1d/0x30 [ 15.252001] [] ? filp_close+0x4c/0x80 [ 15.252001] [] ? sys_close+0x75/0xc0 [ 15.252001] [] ? syscall_call+0x7/0xb [ 15.252001] Code: 83 79 18 63 7f b3 8d 76 00 8d 73 04 89 f0 e8 3e 11 00 00 8d 53 08 89 55 e4 8d 55 e8 8b 43 0c 89 53 0c 8b 4d e4 89 45 ec 89 4d e8 <89> 10 8b 45 e0 ba ff ff ff ff 89 45 f0 89 d0 87 03 83 f8 01 74 [ 15.252001] EIP: [] __mutex_lock_slowpath+0x9a/0x140 SS:ESP 0068:f5b13eb4 [ 15.252001] CR2: 0000000000000000 [ 15.360760] ---[ end trace 42c28ebb0ba13839 ]--- [ 15.388553] [drm] set up 7M of stolen space [ 15.390350] [drm] initialized overlay support [ 15.685421] checking generic (c012c000 130000) vs hw (c0000000 10000000) [ 15.686223] fb: conflicting fb hw usage inteldrmfb vs VESA VGA - removing generic driver [ 15.687845] Console: switching to colour dummy device 80x25 [ 15.693144] usbcore: registered new interface driver snd-usb-audio [ 15.808232] Console: switching to colour frame buffer device 160x64 [ 15.813372] fb0: inteldrmfb frame buffer device [ 15.813402] drm: registered panic notifier [ 15.813600] Slow work thread pool: Starting up [ 15.813688] Slow work thread pool: Ready [ 15.813724] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 15.865210] type=1400 audit(1280372493.273:5): operation="profile_load" pid=659 name="/usr/share/gdm/guest-session/Xsession" pid=659 comm="apparmor_parser" [ 15.867326] type=1400 audit(1280372493.273:6): operation="profile_replace" pid=660 name="/sbin/dhclient3" pid=660 comm="apparmor_parser" [ 15.878649] type=1400 audit(1280372493.285:7): operation="profile_replace" pid=660 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=660 comm="apparmor_parser" [ 15.879134] type=1400 audit(1280372493.285:8): operation="profile_replace" pid=660 name="/usr/lib/connman/scripts/dhclient-script" pid=660 comm="apparmor_parser" [ 15.880637] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 15.880738] alloc irq_desc for 42 on node -1 [ 15.880769] alloc kstat_irqs on node -1 [ 15.880809] HDA Intel 0000:00:1b.0: irq 42 for MSI/MSI-X [ 15.880876] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 15.888185] type=1400 audit(1280372493.297:9): operation="profile_load" pid=664 name="/usr/bin/evince" pid=664 comm="apparmor_parser" [ 15.931244] type=1400 audit(1280372493.337:10): operation="profile_load" pid=664 name="/usr/bin/evince-previewer" pid=664 comm="apparmor_parser" [ 15.943463] type=1400 audit(1280372493.349:11): operation="profile_load" pid=664 name="/usr/bin/evince-thumbnailer" pid=664 comm="apparmor_parser" [ 16.016539] input: HDA Intel Line In at Ext Rear Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input5 [ 16.016723] input: HDA Intel Mic at Ext Rear Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input6 [ 16.016862] input: HDA Intel Line Out at Ext Rear Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input7 [ 16.017004] input: HDA Intel HP Out at Ext Front Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input8 [ 16.177781] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 16.180148] e100 0000:03:08.0: eth0: NIC Link is Up 100 Mbps Full Duplex [ 16.180449] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready Bug: 611167 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-12-generic (buildd@yellow) (gcc version 4.4.5 20100723 (prerelease) (Ubuntu/Linaro 4.4.4-7ubuntu3) ) #17-Ubuntu SMP Mon Jul 26 18:48:06 UTC 2010 (Ubuntu 2.6.35-12.17-generic 2.6.35-rc6) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-12-generic root=UUID=4d067662-922d-426f-8fe7-1ea24d7fc5f9 ro quiet splash [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009e000 (usable) [ 0.000000] BIOS-e820: 000000000009e000 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000b8a99000 (usable) [ 0.000000] BIOS-e820: 00000000b8a99000 - 00000000b8a9c000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000b8a9c000 - 00000000b9ea8000 (usable) [ 0.000000] BIOS-e820: 00000000b9ea8000 - 00000000b9ebf000 (reserved) [ 0.000000] BIOS-e820: 00000000b9ebf000 - 00000000b9f86000 (usable) [ 0.000000] BIOS-e820: 00000000b9f86000 - 00000000b9fbf000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000b9fbf000 - 00000000b9fe1000 (usable) [ 0.000000] BIOS-e820: 00000000b9fe1000 - 00000000b9ff6000 (ACPI data) [ 0.000000] BIOS-e820: 00000000b9ff6000 - 00000000ba000000 (usable) [ 0.000000] BIOS-e820: 00000000ba000000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000f8000000 - 00000000fc000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fed10000 - 00000000fed14000 (reserved) [ 0.000000] BIOS-e820: 00000000fed18000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1c000 - 00000000fed20000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000fff00000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 0000000140000000 (usable) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI 2.4 present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0x140000 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask F80000000 write-back [ 0.000000] 1 base 0FFFE0000 mask FFFFE0000 write-protect [ 0.000000] 2 base 0FFFD8000 mask FFFFF8000 write-protect [ 0.000000] 3 base 080000000 mask FC0000000 write-back [ 0.000000] 4 base 0BC000000 mask FFC000000 uncachable [ 0.000000] 5 base 0BA000000 mask FFE000000 uncachable [ 0.000000] 6 base 100000000 mask FC0000000 write-back [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] last_pfn = 0xba000 max_arch_pfn = 0x400000000 [ 0.000000] e820 update range: 0000000000001000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009e000 (usable) [ 0.000000] modified: 000000000009e000 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 00000000b8a99000 (usable) [ 0.000000] modified: 00000000b8a99000 - 00000000b8a9c000 (ACPI NVS) [ 0.000000] modified: 00000000b8a9c000 - 00000000b9ea8000 (usable) [ 0.000000] modified: 00000000b9ea8000 - 00000000b9ebf000 (reserved) [ 0.000000] modified: 00000000b9ebf000 - 00000000b9f86000 (usable) [ 0.000000] modified: 00000000b9f86000 - 00000000b9fbf000 (ACPI NVS) [ 0.000000] modified: 00000000b9fbf000 - 00000000b9fe1000 (usable) [ 0.000000] modified: 00000000b9fe1000 - 00000000b9ff6000 (ACPI data) [ 0.000000] modified: 00000000b9ff6000 - 00000000ba000000 (usable) [ 0.000000] modified: 00000000ba000000 - 00000000c0000000 (reserved) [ 0.000000] modified: 00000000f8000000 - 00000000fc000000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] modified: 00000000fed10000 - 00000000fed14000 (reserved) [ 0.000000] modified: 00000000fed18000 - 00000000fed1a000 (reserved) [ 0.000000] modified: 00000000fed1c000 - 00000000fed20000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000fff00000 - 0000000100000000 (reserved) [ 0.000000] modified: 0000000100000000 - 0000000140000000 (usable) [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] init_memory_mapping: 0000000000000000-00000000ba000000 [ 0.000000] 0000000000 - 00ba000000 page 2M [ 0.000000] kernel direct mapping tables up to ba000000 @ 16000-1a000 [ 0.000000] init_memory_mapping: 0000000100000000-0000000140000000 [ 0.000000] 0100000000 - 0140000000 page 2M [ 0.000000] kernel direct mapping tables up to 140000000 @ 18000-1e000 [ 0.000000] RAMDISK: 37576000 - 37ff0000 [ 0.000000] ACPI: RSDP 00000000000fe020 00024 (v02 HPQOEM) [ 0.000000] ACPI: XSDT 00000000b9ff5120 00064 (v01 HPQOEM SLIC-MPC 00000001 01000013) [ 0.000000] ACPI: FACP 00000000b9ff4000 000F4 (v04 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: DSDT 00000000b9fe4000 0BBE9 (v01 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: FACS 00000000b9f92000 00040 [ 0.000000] ACPI: HPET 00000000b9ff3000 00038 (v01 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: APIC 00000000b9ff2000 0006C (v02 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: MCFG 00000000b9ff1000 0003C (v01 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: ASF! 00000000b9ff0000 000A5 (v32 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: SLIC 00000000b9fe3000 00176 (v01 HPQOEM SLIC-MPC 06040000 LTP 00000001) [ 0.000000] ACPI: BOOT 00000000b9fe2000 00028 (v01 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: SSDT 00000000b9fe1000 00655 (v01 PmRef CpuPm 00003000 INTL 20051117) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-0000000140000000 [ 0.000000] Initmem setup node 0 0000000000000000-0000000140000000 [ 0.000000] NODE_DATA [0000000100000000 - 0000000100004fff] [ 0.000000] [ffffea0000000000-ffffea00045fffff] PMD -> [ffff880100200000-ffff8801039fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal 0x00100000 -> 0x00140000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[7] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009e [ 0.000000] 0: 0x00000100 -> 0x000b8a99 [ 0.000000] 0: 0x000b8a9c -> 0x000b9ea8 [ 0.000000] 0: 0x000b9ebf -> 0x000b9f86 [ 0.000000] 0: 0x000b9fbf -> 0x000b9fe1 [ 0.000000] 0: 0x000b9ff6 -> 0x000ba000 [ 0.000000] 0: 0x00100000 -> 0x00140000 [ 0.000000] On node 0 totalpages: 1023782 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3926 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 14280 pages used for memmap [ 0.000000] DMA32 zone: 743376 pages, LIFO batch:31 [ 0.000000] Normal zone: 3584 pages used for memmap [ 0.000000] Normal zone: 258560 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x00] disabled) [ 0.000000] ACPI: IOAPIC (id[0x04] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 4, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 4 CPUs, 2 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [19000 - 197ff] [ 0.000000] PM: Registered nosave memory: 000000000009e000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] PM: Registered nosave memory: 00000000b8a99000 - 00000000b8a9c000 [ 0.000000] PM: Registered nosave memory: 00000000b9ea8000 - 00000000b9ebf000 [ 0.000000] PM: Registered nosave memory: 00000000b9f86000 - 00000000b9fbf000 [ 0.000000] PM: Registered nosave memory: 00000000b9fe1000 - 00000000b9ff6000 [ 0.000000] PM: Registered nosave memory: 00000000ba000000 - 00000000c0000000 [ 0.000000] PM: Registered nosave memory: 00000000c0000000 - 00000000f8000000 [ 0.000000] PM: Registered nosave memory: 00000000f8000000 - 00000000fc000000 [ 0.000000] PM: Registered nosave memory: 00000000fc000000 - 00000000fec00000 [ 0.000000] PM: Registered nosave memory: 00000000fec00000 - 00000000fec01000 [ 0.000000] PM: Registered nosave memory: 00000000fec01000 - 00000000fed10000 [ 0.000000] PM: Registered nosave memory: 00000000fed10000 - 00000000fed14000 [ 0.000000] PM: Registered nosave memory: 00000000fed14000 - 00000000fed18000 [ 0.000000] PM: Registered nosave memory: 00000000fed18000 - 00000000fed1a000 [ 0.000000] PM: Registered nosave memory: 00000000fed1a000 - 00000000fed1c000 [ 0.000000] PM: Registered nosave memory: 00000000fed1c000 - 00000000fed20000 [ 0.000000] PM: Registered nosave memory: 00000000fed20000 - 00000000fee00000 [ 0.000000] PM: Registered nosave memory: 00000000fee00000 - 00000000fee01000 [ 0.000000] PM: Registered nosave memory: 00000000fee01000 - 00000000fff00000 [ 0.000000] PM: Registered nosave memory: 00000000fff00000 - 0000000100000000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:38000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:4 nr_node_ids:1 [ 0.000000] early_res array is doubled to 128 at [19800 - 1a7ff] [ 0.000000] PERCPU: Embedded 30 pages/cpu @ffff880001e00000 s91392 r8192 d23296 u524288 [ 0.000000] pcpu-alloc: s91392 r8192 d23296 u524288 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 1005862 [ 0.000000] Policy zone: Normal [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-12-generic root=UUID=4d067662-922d-426f-8fe7-1ea24d7fc5f9 ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] xsave/xrstor: enabled xstate_bv 0x3, cntxt size 0x240 [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Subtract (68 early reservations) [ 0.000000] #1 [0001000000 - 0001d20114] TEXT DATA BSS [ 0.000000] #2 [0037576000 - 0037ff0000] RAMDISK [ 0.000000] #3 [000009e000 - 0000100000] BIOS reserved [ 0.000000] #4 [0001d21000 - 0001d211f0] BRK [ 0.000000] #5 [0000010000 - 0000012000] TRAMPOLINE [ 0.000000] #6 [0000012000 - 0000016000] ACPI WAKEUP [ 0.000000] #7 [0000016000 - 0000018000] PGTABLE [ 0.000000] #8 [0000018000 - 0000019000] PGTABLE [ 0.000000] #9 [0100000000 - 0100005000] NODE_DATA [ 0.000000] #10 [0001d21200 - 0001d22200] BOOTMEM [ 0.000000] #11 [0001d20140 - 0001d20440] BOOTMEM [ 0.000000] #12 [0100005000 - 0100006000] BOOTMEM [ 0.000000] #13 [0100006000 - 0100007000] BOOTMEM [ 0.000000] #14 [0100200000 - 0103a00000] MEMMAP 0 [ 0.000000] #15 [0001d20440 - 0001d205c0] BOOTMEM [ 0.000000] #16 [0001d22200 - 0001d3a200] BOOTMEM [ 0.000000] #17 [0001d3a200 - 0001d40200] BOOTMEM [ 0.000000] #18 [0001d41000 - 0001d42000] BOOTMEM [ 0.000000] #19 [0001d205c0 - 0001d20601] BOOTMEM [ 0.000000] #20 [0001d20640 - 0001d20683] BOOTMEM [ 0.000000] #21 [0001d206c0 - 0001d20b90] BOOTMEM [ 0.000000] #22 [0001d20bc0 - 0001d20c28] BOOTMEM [ 0.000000] #23 [0001d20c40 - 0001d20ca8] BOOTMEM [ 0.000000] #24 [0001d20cc0 - 0001d20d28] BOOTMEM [ 0.000000] #25 [0001d20d40 - 0001d20da8] BOOTMEM [ 0.000000] #26 [0001d20dc0 - 0001d20e28] BOOTMEM [ 0.000000] #27 [0001d20e40 - 0001d20ea8] BOOTMEM [ 0.000000] #28 [0001d20ec0 - 0001d20f28] BOOTMEM [ 0.000000] #29 [0001d20f40 - 0001d20fa8] BOOTMEM [ 0.000000] #30 [0001d40200 - 0001d40268] BOOTMEM [ 0.000000] #31 [0001d40280 - 0001d402e8] BOOTMEM [ 0.000000] #32 [0001d40300 - 0001d40368] BOOTMEM [ 0.000000] #33 [0001d40380 - 0001d403e8] BOOTMEM [ 0.000000] #34 [0001d40400 - 0001d40468] BOOTMEM [ 0.000000] #35 [0001d40480 - 0001d404e8] BOOTMEM [ 0.000000] #36 [0001d40500 - 0001d40568] BOOTMEM [ 0.000000] #37 [0001d40580 - 0001d405e8] BOOTMEM [ 0.000000] #38 [0001d40600 - 0001d40668] BOOTMEM [ 0.000000] #39 [0001d40680 - 0001d406e8] BOOTMEM [ 0.000000] #40 [0001d40700 - 0001d40768] BOOTMEM [ 0.000000] #41 [0001d40780 - 0001d407e8] BOOTMEM [ 0.000000] #42 [0001d40800 - 0001d40868] BOOTMEM [ 0.000000] #43 [0001d20fc0 - 0001d20fe0] BOOTMEM [ 0.000000] #44 [0001d40880 - 0001d408a0] BOOTMEM [ 0.000000] #45 [0001d408c0 - 0001d408e0] BOOTMEM [ 0.000000] #46 [0001d40900 - 0001d40920] BOOTMEM [ 0.000000] #47 [0001d40940 - 0001d40960] BOOTMEM [ 0.000000] #48 [0001d40980 - 0001d409a0] BOOTMEM [ 0.000000] #49 [0001d409c0 - 0001d40a2a] BOOTMEM [ 0.000000] #50 [0001d40a40 - 0001d40aaa] BOOTMEM [ 0.000000] #51 [0001e00000 - 0001e1e000] BOOTMEM [ 0.000000] #52 [0001e80000 - 0001e9e000] BOOTMEM [ 0.000000] #53 [0001f00000 - 0001f1e000] BOOTMEM [ 0.000000] #54 [0001f80000 - 0001f9e000] BOOTMEM [ 0.000000] #55 [0001d40ac0 - 0001d40ac8] BOOTMEM [ 0.000000] #56 [0001d40b00 - 0001d40b08] BOOTMEM [ 0.000000] #57 [0001d40b40 - 0001d40b50] BOOTMEM [ 0.000000] #58 [0001d40b80 - 0001d40ba0] BOOTMEM [ 0.000000] #59 [0001d40bc0 - 0001d40cf0] BOOTMEM [ 0.000000] #60 [0001d40d00 - 0001d40d50] BOOTMEM [ 0.000000] #61 [0001d40d80 - 0001d40dd0] BOOTMEM [ 0.000000] #62 [0001d42000 - 0001d4a000] BOOTMEM [ 0.000000] #63 [0001d4a000 - 0001d4a240] BOOTMEM [ 0.000000] #64 [0001f9e000 - 0005f9e000] BOOTMEM [ 0.000000] #65 [0001d4a240 - 0001d6a240] BOOTMEM [ 0.000000] #66 [0001d6a240 - 0001daa240] BOOTMEM [ 0.000000] #67 [000001a800 - 0000022800] BOOTMEM [ 0.000000] Memory: 3946944k/5242880k available (5707k kernel code, 1147752k absent, 148184k reserved, 5420k data, 904k init) [ 0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:4352 nr_irqs:712 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 41943040 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1995.125 MHz processor. [ 0.010010] Calibrating delay loop (skipped), value calculated using timer frequency.. 3990.25 BogoMIPS (lpj=19951250) [ 0.010014] pid_max: default: 32768 minimum: 301 [ 0.010041] Security Framework initialized [ 0.010061] AppArmor: AppArmor initialized [ 0.010063] Yama: becoming mindful. [ 0.010525] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.012705] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.013712] Mount-cache hash table entries: 256 [ 0.013876] Initializing cgroup subsys ns [ 0.013882] Initializing cgroup subsys cpuacct [ 0.013886] Initializing cgroup subsys memory [ 0.013895] Initializing cgroup subsys devices [ 0.013898] Initializing cgroup subsys freezer [ 0.013900] Initializing cgroup subsys net_cls [ 0.013932] CPU: Physical Processor ID: 0 [ 0.013933] CPU: Processor Core ID: 0 [ 0.013936] mce: CPU supports 6 MCE banks [ 0.013945] CPU0: Thermal monitoring enabled (TM1) [ 0.013949] using mwait in idle threads. [ 0.013951] Performance Events: PEBS fmt0+, Core2 events, Intel PMU driver. [ 0.013960] ... version: 2 [ 0.013962] ... bit width: 40 [ 0.013963] ... generic registers: 2 [ 0.013965] ... value mask: 000000ffffffffff [ 0.013967] ... max period: 000000007fffffff [ 0.013969] ... fixed-purpose events: 3 [ 0.013970] ... event mask: 0000000700000003 [ 0.016822] ACPI: Core revision 20100428 [ 0.040011] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.040017] ftrace: allocating 22648 entries in 89 pages [ 0.050059] Setting APIC routing to flat [ 0.050382] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.152601] CPU0: Intel(R) Core(TM)2 Duo CPU T6400 @ 2.00GHz stepping 0a [ 0.160000] Booting Node 0, Processors #1 [ 0.320017] Brought up 2 CPUs [ 0.320021] Total of 2 processors activated (7980.24 BogoMIPS). [ 0.320581] devtmpfs: initialized [ 0.320732] regulator: core version 0.5 [ 0.320763] Time: 11:47:46 Date: 07/29/10 [ 0.320803] NET: Registered protocol family 16 [ 0.320827] Trying to unpack rootfs image as initramfs... [ 0.320940] ACPI: bus type pci registered [ 0.321017] PCI: MMCONFIG for domain 0000 [bus 00-3f] at [mem 0xf8000000-0xfbffffff] (base 0xf8000000) [ 0.321021] PCI: MMCONFIG at [mem 0xf8000000-0xfbffffff] reserved in E820 [ 0.338593] PCI: Using configuration type 1 for base access [ 0.350352] bio: create slab at 0 [ 0.352586] ACPI: EC: Look up EC in DSDT [ 0.355032] ACPI: Executed 1 blocks of module-level executable AML code [ 0.357487] ACPI: BIOS _OSI(Linux) query ignored [ 0.461432] ACPI: SSDT 00000000b9eb4c98 00223 (v01 PmRef Cpu0Ist 00003000 INTL 20051117) [ 0.462057] ACPI: Dynamic OEM Table Load: [ 0.462060] ACPI: SSDT (null) 00223 (v01 PmRef Cpu0Ist 00003000 INTL 20051117) [ 0.462374] ACPI: SSDT 00000000b9eb2598 00537 (v01 PmRef Cpu0Cst 00003001 INTL 20051117) [ 0.462978] ACPI: Dynamic OEM Table Load: [ 0.462981] ACPI: SSDT (null) 00537 (v01 PmRef Cpu0Cst 00003001 INTL 20051117) [ 0.463587] ACPI: SSDT 00000000b9eb3e18 001CF (v01 PmRef ApIst 00003000 INTL 20051117) [ 0.464225] ACPI: Dynamic OEM Table Load: [ 0.464229] ACPI: SSDT (null) 001CF (v01 PmRef ApIst 00003000 INTL 20051117) [ 0.464438] ACPI: SSDT 00000000b9eb4f18 0008D (v01 PmRef ApCst 00003000 INTL 20051117) [ 0.465054] ACPI: Dynamic OEM Table Load: [ 0.465057] ACPI: SSDT (null) 0008D (v01 PmRef ApCst 00003000 INTL 20051117) [ 0.466147] ACPI: Interpreter enabled [ 0.466147] ACPI: (supports S0 S3 S4 S5) [ 0.466147] ACPI: Using IOAPIC for interrupt routing [ 0.478035] ACPI: EC: GPE = 0x17, I/O: command/status = 0x66, data = 0x62 [ 0.478328] ACPI: No dock devices found. [ 0.478332] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.479024] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.480643] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 0.480646] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 0.480650] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.480654] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xfebfffff] [ 0.480724] pci 0000:00:02.0: reg 10: [mem 0xd0000000-0xd03fffff 64bit] [ 0.480731] pci 0000:00:02.0: reg 18: [mem 0xc0000000-0xcfffffff 64bit pref] [ 0.480736] pci 0000:00:02.0: reg 20: [io 0x9110-0x9117] [ 0.480778] pci 0000:00:02.1: reg 10: [mem 0xd6500000-0xd65fffff 64bit] [ 0.480890] pci 0000:00:1a.0: reg 20: [io 0x90e0-0x90ff] [ 0.480977] pci 0000:00:1a.1: reg 20: [io 0x90c0-0x90df] [ 0.481062] pci 0000:00:1a.7: reg 10: [mem 0xdc705c00-0xdc705fff] [ 0.481132] pci 0000:00:1a.7: PME# supported from D0 D3hot D3cold [ 0.481137] pci 0000:00:1a.7: PME# disabled [ 0.481182] pci 0000:00:1b.0: reg 10: [mem 0xdc700000-0xdc703fff 64bit] [ 0.481237] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.481242] pci 0000:00:1b.0: PME# disabled [ 0.481332] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.481336] pci 0000:00:1c.0: PME# disabled [ 0.481426] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 0.481431] pci 0000:00:1c.1: PME# disabled [ 0.481520] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 0.481525] pci 0000:00:1c.2: PME# disabled [ 0.481618] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold [ 0.481623] pci 0000:00:1c.3: PME# disabled [ 0.481711] pci 0000:00:1c.4: PME# supported from D0 D3hot D3cold [ 0.481716] pci 0000:00:1c.4: PME# disabled [ 0.481807] pci 0000:00:1c.5: PME# supported from D0 D3hot D3cold [ 0.481811] pci 0000:00:1c.5: PME# disabled [ 0.481878] pci 0000:00:1d.0: reg 20: [io 0x90a0-0x90bf] [ 0.481963] pci 0000:00:1d.1: reg 20: [io 0x9080-0x909f] [ 0.482048] pci 0000:00:1d.2: reg 20: [io 0x9060-0x907f] [ 0.482135] pci 0000:00:1d.3: reg 20: [io 0x9040-0x905f] [ 0.482217] pci 0000:00:1d.7: reg 10: [mem 0xdc705800-0xdc705bff] [ 0.482286] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.482291] pci 0000:00:1d.7: PME# disabled [ 0.482505] pci 0000:00:1f.2: reg 10: [io 0x9108-0x910f] [ 0.482512] pci 0000:00:1f.2: reg 14: [io 0x911c-0x911f] [ 0.482519] pci 0000:00:1f.2: reg 18: [io 0x9100-0x9107] [ 0.482526] pci 0000:00:1f.2: reg 1c: [io 0x9118-0x911b] [ 0.482534] pci 0000:00:1f.2: reg 20: [io 0x9020-0x903f] [ 0.482541] pci 0000:00:1f.2: reg 24: [mem 0xdc705000-0xdc7057ff] [ 0.482583] pci 0000:00:1f.2: PME# supported from D3hot [ 0.482588] pci 0000:00:1f.2: PME# disabled [ 0.482626] pci 0000:00:1f.3: reg 10: [mem 0xdc706000-0xdc7060ff 64bit] [ 0.482643] pci 0000:00:1f.3: reg 20: [io 0x9000-0x901f] [ 0.482703] pci 0000:00:1f.6: reg 10: [mem 0xdc704000-0xdc704fff 64bit] [ 0.482967] pci 0000:02:00.0: reg 10: [mem 0xdb600000-0xdb603fff 64bit] [ 0.483175] pci 0000:02:00.0: supports D1 D2 [ 0.483337] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.483342] pci 0000:00:1c.0: bridge window [io 0x8000-0x8fff] [ 0.483346] pci 0000:00:1c.0: bridge window [mem 0xdb600000-0xdc6fffff] [ 0.483354] pci 0000:00:1c.0: bridge window [mem 0xd0400000-0xd13fffff 64bit pref] [ 0.483442] pci 0000:03:00.0: reg 10: [io 0x6000-0x60ff] [ 0.483466] pci 0000:03:00.0: reg 18: [mem 0xd1410000-0xd1410fff 64bit pref] [ 0.483483] pci 0000:03:00.0: reg 20: [mem 0xd1400000-0xd140ffff 64bit pref] [ 0.483493] pci 0000:03:00.0: reg 30: [mem 0xffff0000-0xffffffff pref] [ 0.483541] pci 0000:03:00.0: supports D1 D2 [ 0.483543] pci 0000:03:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.483549] pci 0000:03:00.0: PME# disabled [ 0.500026] pci 0000:00:1c.1: PCI bridge to [bus 03-03] [ 0.500032] pci 0000:00:1c.1: bridge window [io 0x6000-0x7fff] [ 0.500038] pci 0000:00:1c.1: bridge window [mem 0xda600000-0xdb5fffff] [ 0.500045] pci 0000:00:1c.1: bridge window [mem 0xd1400000-0xd24fffff 64bit pref] [ 0.500104] pci 0000:00:1c.2: PCI bridge to [bus 04-04] [ 0.500109] pci 0000:00:1c.2: bridge window [io 0x5000-0x5fff] [ 0.500114] pci 0000:00:1c.2: bridge window [mem 0xd9600000-0xda5fffff] [ 0.500121] pci 0000:00:1c.2: bridge window [mem 0xd2500000-0xd34fffff 64bit pref] [ 0.500177] pci 0000:00:1c.3: PCI bridge to [bus 05-05] [ 0.500182] pci 0000:00:1c.3: bridge window [io 0x4000-0x4fff] [ 0.500187] pci 0000:00:1c.3: bridge window [mem 0xd8600000-0xd95fffff] [ 0.500195] pci 0000:00:1c.3: bridge window [mem 0xd3500000-0xd44fffff 64bit pref] [ 0.500249] pci 0000:00:1c.4: PCI bridge to [bus 06-06] [ 0.500254] pci 0000:00:1c.4: bridge window [io 0x3000-0x3fff] [ 0.500259] pci 0000:00:1c.4: bridge window [mem 0xd7600000-0xd85fffff] [ 0.500266] pci 0000:00:1c.4: bridge window [mem 0xd4500000-0xd54fffff 64bit pref] [ 0.500321] pci 0000:00:1c.5: PCI bridge to [bus 07-09] [ 0.500325] pci 0000:00:1c.5: bridge window [io 0x2000-0x2fff] [ 0.500330] pci 0000:00:1c.5: bridge window [mem 0xd6600000-0xd75fffff] [ 0.500338] pci 0000:00:1c.5: bridge window [mem 0xd5500000-0xd64fffff 64bit pref] [ 0.500419] pci 0000:00:1e.0: PCI bridge to [bus 0a-0a] (subtractive decode) [ 0.500424] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.500429] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.500437] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.500440] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.500443] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.500446] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.500449] pci 0000:00:1e.0: bridge window [mem 0xc0000000-0xfebfffff] (subtractive decode) [ 0.500511] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.500847] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P32_._PRT] [ 0.501034] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP1._PRT] [ 0.501140] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP2._PRT] [ 0.501257] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP3._PRT] [ 0.501358] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP4._PRT] [ 0.501461] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP5._PRT] [ 0.501610] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP6._PRT] [ 0.508939] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 7 9 10 *11 12) [ 0.509094] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 7 9 10 *11 12) [ 0.509249] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 7 9 10 *11 12) [ 0.509407] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 7 9 10 *11 12) [ 0.509558] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 7 9 10 *11 12) [ 0.509709] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 7 9 *10 11 12) [ 0.509861] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 7 9 10 *11 12) [ 0.510024] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 7 9 10 11 12) *0, disabled. [ 0.510100] HEST: Table is not found! [ 0.510182] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 0.510201] vgaarb: loaded [ 0.510354] SCSI subsystem initialized [ 0.510451] libata version 3.00 loaded. [ 0.510511] usbcore: registered new interface driver usbfs [ 0.510522] usbcore: registered new interface driver hub [ 0.510546] usbcore: registered new device driver usb [ 0.510779] ACPI: WMI: Mapper loaded [ 0.510781] PCI: Using ACPI for IRQ routing [ 0.510785] PCI: pci_cache_line_size set to 64 bytes [ 0.510982] reserve RAM buffer: 000000000009e000 - 000000000009ffff [ 0.510985] reserve RAM buffer: 00000000b8a99000 - 00000000bbffffff [ 0.510988] reserve RAM buffer: 00000000b9ea8000 - 00000000bbffffff [ 0.510991] reserve RAM buffer: 00000000b9f86000 - 00000000bbffffff [ 0.510994] reserve RAM buffer: 00000000b9fe1000 - 00000000bbffffff [ 0.510997] reserve RAM buffer: 00000000ba000000 - 00000000bbffffff [ 0.511088] NetLabel: Initializing [ 0.511090] NetLabel: domain hash size = 128 [ 0.511092] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.511106] NetLabel: unlabeled traffic allowed by default [ 0.511136] HPET: 4 timers in total, 0 timers will be used for per-cpu timer [ 0.511143] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0 [ 0.511148] hpet0: 4 comparators, 64-bit 14.318180 MHz counter [ 0.530042] Switching to clocksource tsc [ 0.540302] AppArmor: AppArmor Filesystem Enabled [ 0.540322] pnp: PnP ACPI init [ 0.540341] ACPI: bus type pnp registered [ 0.543272] alloc irq_desc for 23 on node 0 [ 0.543275] alloc kstat_irqs on node 0 [ 0.543684] pnp: PnP ACPI: found 12 devices [ 0.543686] ACPI: ACPI bus type pnp unregistered [ 0.543699] system 00:00: [mem 0xf8000000-0xfbffffff] has been reserved [ 0.543705] system 00:02: [io 0x164e-0x164f] has been reserved [ 0.543709] system 00:02: [io 0x0600-0x060f] has been reserved [ 0.543712] system 00:02: [io 0x0610] has been reserved [ 0.543714] system 00:02: [io 0x0800-0x080f] has been reserved [ 0.543717] system 00:02: [io 0x0810-0x0817] has been reserved [ 0.543720] system 00:02: [io 0x0820-0x0823] has been reserved [ 0.543723] system 00:02: [io 0x0400-0x047f] has been reserved [ 0.543726] system 00:02: [io 0x0500-0x053f] has been reserved [ 0.543728] system 00:02: [io 0x0380-0x0387] has been reserved [ 0.543732] system 00:02: [mem 0xf8000000-0xfbffffff] has been reserved [ 0.543735] system 00:02: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.543738] system 00:02: [mem 0xfed10000-0xfed13fff] has been reserved [ 0.543741] system 00:02: [mem 0xfed18000-0xfed18fff] has been reserved [ 0.543744] system 00:02: [mem 0xfed19000-0xfed19fff] has been reserved [ 0.543747] system 00:02: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.543750] system 00:02: [mem 0xfed20000-0xfed3ffff] has been reserved [ 0.543753] system 00:02: [mem 0xfed40000-0xfed44fff] has been reserved [ 0.543756] system 00:02: [mem 0xfed45000-0xfed8ffff] has been reserved [ 0.543763] system 00:02: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.548495] pci 0000:03:00.0: no compatible bridge window for [mem 0xffff0000-0xffffffff pref] [ 0.548567] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.548571] pci 0000:00:1c.0: bridge window [io 0x8000-0x8fff] [ 0.548577] pci 0000:00:1c.0: bridge window [mem 0xdb600000-0xdc6fffff] [ 0.548582] pci 0000:00:1c.0: bridge window [mem 0xd0400000-0xd13fffff 64bit pref] [ 0.548592] pci 0000:03:00.0: BAR 6: assigned [mem 0xd1420000-0xd142ffff pref] [ 0.548594] pci 0000:00:1c.1: PCI bridge to [bus 03-03] [ 0.548598] pci 0000:00:1c.1: bridge window [io 0x6000-0x7fff] [ 0.548604] pci 0000:00:1c.1: bridge window [mem 0xda600000-0xdb5fffff] [ 0.548608] pci 0000:00:1c.1: bridge window [mem 0xd1400000-0xd24fffff 64bit pref] [ 0.548615] pci 0000:00:1c.2: PCI bridge to [bus 04-04] [ 0.548619] pci 0000:00:1c.2: bridge window [io 0x5000-0x5fff] [ 0.548625] pci 0000:00:1c.2: bridge window [mem 0xd9600000-0xda5fffff] [ 0.548629] pci 0000:00:1c.2: bridge window [mem 0xd2500000-0xd34fffff 64bit pref] [ 0.548636] pci 0000:00:1c.3: PCI bridge to [bus 05-05] [ 0.548640] pci 0000:00:1c.3: bridge window [io 0x4000-0x4fff] [ 0.548646] pci 0000:00:1c.3: bridge window [mem 0xd8600000-0xd95fffff] [ 0.548651] pci 0000:00:1c.3: bridge window [mem 0xd3500000-0xd44fffff 64bit pref] [ 0.548658] pci 0000:00:1c.4: PCI bridge to [bus 06-06] [ 0.548661] pci 0000:00:1c.4: bridge window [io 0x3000-0x3fff] [ 0.548667] pci 0000:00:1c.4: bridge window [mem 0xd7600000-0xd85fffff] [ 0.548672] pci 0000:00:1c.4: bridge window [mem 0xd4500000-0xd54fffff 64bit pref] [ 0.548679] pci 0000:00:1c.5: PCI bridge to [bus 07-09] [ 0.548683] pci 0000:00:1c.5: bridge window [io 0x2000-0x2fff] [ 0.548689] pci 0000:00:1c.5: bridge window [mem 0xd6600000-0xd75fffff] [ 0.548694] pci 0000:00:1c.5: bridge window [mem 0xd5500000-0xd64fffff 64bit pref] [ 0.548702] pci 0000:00:1e.0: PCI bridge to [bus 0a-0a] [ 0.548704] pci 0000:00:1e.0: bridge window [io disabled] [ 0.548709] pci 0000:00:1e.0: bridge window [mem disabled] [ 0.548714] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.548732] alloc irq_desc for 17 on node -1 [ 0.548735] alloc kstat_irqs on node -1 [ 0.548741] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 0.548747] pci 0000:00:1c.0: setting latency timer to 64 [ 0.548757] alloc irq_desc for 16 on node -1 [ 0.548758] alloc kstat_irqs on node -1 [ 0.548762] pci 0000:00:1c.1: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 0.548767] pci 0000:00:1c.1: setting latency timer to 64 [ 0.548776] pci 0000:00:1c.2: enabling device (0000 -> 0003) [ 0.548779] alloc irq_desc for 18 on node -1 [ 0.548781] alloc kstat_irqs on node -1 [ 0.548785] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.548791] pci 0000:00:1c.2: setting latency timer to 64 [ 0.548800] pci 0000:00:1c.3: enabling device (0000 -> 0003) [ 0.548803] alloc irq_desc for 19 on node -1 [ 0.548805] alloc kstat_irqs on node -1 [ 0.548808] pci 0000:00:1c.3: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 0.548814] pci 0000:00:1c.3: setting latency timer to 64 [ 0.548824] pci 0000:00:1c.4: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 0.548828] pci 0000:00:1c.4: setting latency timer to 64 [ 0.548838] pci 0000:00:1c.5: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 0.548843] pci 0000:00:1c.5: setting latency timer to 64 [ 0.548851] pci 0000:00:1e.0: setting latency timer to 64 [ 0.548856] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 0.548858] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 0.548861] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.548864] pci_bus 0000:00: resource 7 [mem 0xc0000000-0xfebfffff] [ 0.548866] pci_bus 0000:02: resource 0 [io 0x8000-0x8fff] [ 0.548869] pci_bus 0000:02: resource 1 [mem 0xdb600000-0xdc6fffff] [ 0.548871] pci_bus 0000:02: resource 2 [mem 0xd0400000-0xd13fffff 64bit pref] [ 0.548874] pci_bus 0000:03: resource 0 [io 0x6000-0x7fff] [ 0.548876] pci_bus 0000:03: resource 1 [mem 0xda600000-0xdb5fffff] [ 0.548879] pci_bus 0000:03: resource 2 [mem 0xd1400000-0xd24fffff 64bit pref] [ 0.548882] pci_bus 0000:04: resource 0 [io 0x5000-0x5fff] [ 0.548884] pci_bus 0000:04: resource 1 [mem 0xd9600000-0xda5fffff] [ 0.548887] pci_bus 0000:04: resource 2 [mem 0xd2500000-0xd34fffff 64bit pref] [ 0.548889] pci_bus 0000:05: resource 0 [io 0x4000-0x4fff] [ 0.548892] pci_bus 0000:05: resource 1 [mem 0xd8600000-0xd95fffff] [ 0.548894] pci_bus 0000:05: resource 2 [mem 0xd3500000-0xd44fffff 64bit pref] [ 0.548897] pci_bus 0000:06: resource 0 [io 0x3000-0x3fff] [ 0.548899] pci_bus 0000:06: resource 1 [mem 0xd7600000-0xd85fffff] [ 0.548902] pci_bus 0000:06: resource 2 [mem 0xd4500000-0xd54fffff 64bit pref] [ 0.548904] pci_bus 0000:07: resource 0 [io 0x2000-0x2fff] [ 0.548906] pci_bus 0000:07: resource 1 [mem 0xd6600000-0xd75fffff] [ 0.548909] pci_bus 0000:07: resource 2 [mem 0xd5500000-0xd64fffff 64bit pref] [ 0.548912] pci_bus 0000:0a: resource 4 [io 0x0000-0x0cf7] [ 0.548914] pci_bus 0000:0a: resource 5 [io 0x0d00-0xffff] [ 0.548916] pci_bus 0000:0a: resource 6 [mem 0x000a0000-0x000bffff] [ 0.548918] pci_bus 0000:0a: resource 7 [mem 0xc0000000-0xfebfffff] [ 0.548960] NET: Registered protocol family 2 [ 0.549122] IP route cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.550480] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 0.554938] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 0.555474] TCP: Hash tables configured (established 524288 bind 65536) [ 0.555477] TCP reno registered [ 0.555487] UDP hash table entries: 2048 (order: 4, 65536 bytes) [ 0.555531] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) [ 0.555698] NET: Registered protocol family 1 [ 0.555719] pci 0000:00:02.0: Boot video device [ 0.556164] PCI: CLS 64 bytes, default 64 [ 0.556166] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) [ 0.556169] Placing 64MB software IO TLB between ffff880001f9e000 - ffff880005f9e000 [ 0.556172] software IO TLB at phys 0x1f9e000 - 0x5f9e000 [ 0.556209] Simple Boot Flag value 0x5 read from CMOS RAM was invalid [ 0.556211] Simple Boot Flag at 0x44 set to 0x1 [ 0.556393] Scanning for low memory corruption every 60 seconds [ 0.556571] audit: initializing netlink socket (disabled) [ 0.556583] type=2000 audit(1280404065.540:1): initialized [ 0.571767] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.573199] VFS: Disk quotas dquot_6.5.2 [ 0.573256] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.573808] fuse init (API version 7.14) [ 0.573889] msgmni has been set to 7708 [ 0.574084] alg: No test for stdrng (krng) [ 0.574136] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.574139] io scheduler noop registered [ 0.574141] io scheduler deadline registered [ 0.574181] io scheduler cfq registered (default) [ 0.574300] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.574343] alloc irq_desc for 40 on node -1 [ 0.574346] alloc kstat_irqs on node -1 [ 0.574359] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 0.574447] pcieport 0000:00:1c.1: setting latency timer to 64 [ 0.574487] alloc irq_desc for 41 on node -1 [ 0.574489] alloc kstat_irqs on node -1 [ 0.574497] pcieport 0000:00:1c.1: irq 41 for MSI/MSI-X [ 0.574586] pcieport 0000:00:1c.2: setting latency timer to 64 [ 0.574626] alloc irq_desc for 42 on node -1 [ 0.574628] alloc kstat_irqs on node -1 [ 0.574636] pcieport 0000:00:1c.2: irq 42 for MSI/MSI-X [ 0.574721] pcieport 0000:00:1c.3: setting latency timer to 64 [ 0.574762] alloc irq_desc for 43 on node -1 [ 0.574763] alloc kstat_irqs on node -1 [ 0.574771] pcieport 0000:00:1c.3: irq 43 for MSI/MSI-X [ 0.574862] pcieport 0000:00:1c.4: setting latency timer to 64 [ 0.574901] alloc irq_desc for 44 on node -1 [ 0.574903] alloc kstat_irqs on node -1 [ 0.574911] pcieport 0000:00:1c.4: irq 44 for MSI/MSI-X [ 0.574999] pcieport 0000:00:1c.5: setting latency timer to 64 [ 0.575040] alloc irq_desc for 45 on node -1 [ 0.575041] alloc kstat_irqs on node -1 [ 0.575049] pcieport 0000:00:1c.5: irq 45 for MSI/MSI-X [ 0.575156] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.575183] Firmware did not grant requested _OSC control [ 0.575194] Firmware did not grant requested _OSC control [ 0.575204] Firmware did not grant requested _OSC control [ 0.575213] Firmware did not grant requested _OSC control [ 0.575222] Firmware did not grant requested _OSC control [ 0.575231] Firmware did not grant requested _OSC control [ 0.575254] Firmware did not grant requested _OSC control [ 0.575263] Firmware did not grant requested _OSC control [ 0.575273] Firmware did not grant requested _OSC control [ 0.575282] Firmware did not grant requested _OSC control [ 0.575291] Firmware did not grant requested _OSC control [ 0.575300] Firmware did not grant requested _OSC control [ 0.575308] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.575746] vesafb: framebuffer at 0xc0000000, mapped to 0xffffc90005100000, using 1216k, total 1216k [ 0.575749] vesafb: mode is 640x480x32, linelength=2560, pages=0 [ 0.575751] vesafb: scrolling: redraw [ 0.575754] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0 [ 0.585340] Console: switching to colour frame buffer device 80x30 [ 0.588098] Freeing initrd memory: 10728k freed [ 0.596114] fb0: VESA VGA frame buffer device [ 0.597625] ACPI: AC Adapter [ACAD] (on-line) [ 0.597737] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 0.597741] ACPI: Power Button [PWRB] [ 0.597790] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input1 [ 0.598128] ACPI: Lid Switch [LID0] [ 0.598176] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input2 [ 0.598178] ACPI: Sleep Button [SLPB] [ 0.598233] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3 [ 0.598236] ACPI: Power Button [PWRF] [ 0.598746] ACPI: acpi_idle registered with cpuidle [ 0.598995] Monitor-Mwait will be used to enter C-1 state [ 0.599024] Monitor-Mwait will be used to enter C-2 state [ 0.599030] Marking TSC unstable due to TSC halts in idle [ 0.599083] Switching to clocksource hpet [ 0.605869] [Firmware Bug]: Invalid critical threshold (0) [ 0.606748] thermal LNXTHERM:01: registered as thermal_zone0 [ 0.606756] ACPI: Thermal Zone [TZ01] (52 C) [ 0.606842] ERST: Table is not found! [ 0.608494] Linux agpgart interface v0.103 [ 0.608522] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.609972] brd: module loaded [ 0.610533] loop: module loaded [ 0.610991] Fixed MDIO Bus: probed [ 0.611021] PPP generic driver version 2.4.2 [ 0.611050] tun: Universal TUN/TAP device driver, 1.6 [ 0.611052] tun: (C) 1999-2004 Max Krasnyansky [ 0.611124] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.611148] ehci_hcd 0000:00:1a.7: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 0.611170] ehci_hcd 0000:00:1a.7: setting latency timer to 64 [ 0.611174] ehci_hcd 0000:00:1a.7: EHCI Host Controller [ 0.611205] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 1 [ 0.611241] ehci_hcd 0000:00:1a.7: debug port 1 [ 0.615141] ehci_hcd 0000:00:1a.7: cache line size of 64 is not supported [ 0.615161] ehci_hcd 0000:00:1a.7: irq 19, io mem 0xdc705c00 [ 0.630046] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00 [ 0.630153] hub 1-0:1.0: USB hub found [ 0.630158] hub 1-0:1.0: 4 ports detected [ 0.630229] alloc irq_desc for 20 on node -1 [ 0.630231] alloc kstat_irqs on node -1 [ 0.630238] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 20 (level, low) -> IRQ 20 [ 0.630251] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 0.630255] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 0.630286] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 2 [ 0.630318] ehci_hcd 0000:00:1d.7: debug port 1 [ 0.634215] ehci_hcd 0000:00:1d.7: cache line size of 64 is not supported [ 0.634229] ehci_hcd 0000:00:1d.7: irq 20, io mem 0xdc705800 [ 0.650013] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 0.650113] hub 2-0:1.0: USB hub found [ 0.650117] hub 2-0:1.0: 8 ports detected [ 0.650197] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.650210] uhci_hcd: USB Universal Host Controller Interface driver [ 0.650261] uhci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.650268] uhci_hcd 0000:00:1a.0: setting latency timer to 64 [ 0.650272] uhci_hcd 0000:00:1a.0: UHCI Host Controller [ 0.650301] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 3 [ 0.650336] uhci_hcd 0000:00:1a.0: irq 16, io base 0x000090e0 [ 0.650444] hub 3-0:1.0: USB hub found [ 0.650449] hub 3-0:1.0: 2 ports detected [ 0.650507] alloc irq_desc for 21 on node -1 [ 0.650510] alloc kstat_irqs on node -1 [ 0.650514] uhci_hcd 0000:00:1a.1: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 0.650520] uhci_hcd 0000:00:1a.1: setting latency timer to 64 [ 0.650524] uhci_hcd 0000:00:1a.1: UHCI Host Controller [ 0.650553] uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 4 [ 0.650586] uhci_hcd 0000:00:1a.1: irq 21, io base 0x000090c0 [ 0.650702] hub 4-0:1.0: USB hub found [ 0.650706] hub 4-0:1.0: 2 ports detected [ 0.650767] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20 [ 0.650774] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 0.650777] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 0.650814] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 5 [ 0.650840] uhci_hcd 0000:00:1d.0: irq 20, io base 0x000090a0 [ 0.650956] hub 5-0:1.0: USB hub found [ 0.650960] hub 5-0:1.0: 2 ports detected [ 0.651018] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.651025] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 0.651028] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 0.651057] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 6 [ 0.651082] uhci_hcd 0000:00:1d.1: irq 19, io base 0x00009080 [ 0.651187] hub 6-0:1.0: USB hub found [ 0.651191] hub 6-0:1.0: 2 ports detected [ 0.651251] uhci_hcd 0000:00:1d.2: PCI INT D -> GSI 16 (level, low) -> IRQ 16 [ 0.651258] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 0.651262] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 0.651295] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 7 [ 0.651321] uhci_hcd 0000:00:1d.2: irq 16, io base 0x00009060 [ 0.651426] hub 7-0:1.0: USB hub found [ 0.651430] hub 7-0:1.0: 2 ports detected [ 0.651488] uhci_hcd 0000:00:1d.3: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.651494] uhci_hcd 0000:00:1d.3: setting latency timer to 64 [ 0.651498] uhci_hcd 0000:00:1d.3: UHCI Host Controller [ 0.651526] uhci_hcd 0000:00:1d.3: new USB bus registered, assigned bus number 8 [ 0.651562] uhci_hcd 0000:00:1d.3: irq 18, io base 0x00009040 [ 0.651670] hub 8-0:1.0: USB hub found [ 0.651674] hub 8-0:1.0: 2 ports detected [ 0.651789] PNP: PS/2 Controller [PNP0303:KBC,PNP0f13:MOUE] at 0x60,0x64 irq 1,12 [ 0.673828] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.673834] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.673894] mice: PS/2 mouse device common for all mice [ 0.674058] rtc_cmos 00:04: RTC can wake from S4 [ 0.674094] rtc_cmos 00:04: rtc core: registered rtc_cmos as rtc0 [ 0.674123] rtc0: alarms up to one month, 242 bytes nvram, hpet irqs [ 0.674216] device-mapper: uevent: version 1.0.3 [ 0.674295] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 0.674357] device-mapper: multipath: version 1.1.1 loaded [ 0.674360] device-mapper: multipath round-robin: version 1.0.0 loaded [ 0.674548] cpuidle: using governor ladder [ 0.675597] cpuidle: using governor menu [ 0.675898] TCP cubic registered [ 0.676021] NET: Registered protocol family 10 [ 0.676419] lo: Disabled Privacy Extensions [ 0.676645] NET: Registered protocol family 17 [ 0.677309] PM: Resume from disk failed. [ 0.677322] registered taskstats version 1 [ 0.677780] Magic number: 2:587:783 [ 0.677904] rtc_cmos 00:04: setting system clock to 2010-07-29 11:47:46 UTC (1280404066) [ 0.677907] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.677909] EDD information not available. [ 0.678005] Freeing unused kernel memory: 904k freed [ 0.678328] Write protecting the kernel read-only data: 10240k [ 0.678550] Freeing unused kernel memory: 416k freed [ 0.678830] Freeing unused kernel memory: 1604k freed [ 0.679598] ACPI: Battery Slot [BAT0] (battery present) [ 0.694543] udev: starting version 151 [ 0.697530] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4 [ 0.836342] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded [ 0.836372] r8169 0000:03:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 0.836427] r8169 0000:03:00.0: setting latency timer to 64 [ 0.836478] alloc irq_desc for 46 on node -1 [ 0.836481] alloc kstat_irqs on node -1 [ 0.836498] r8169 0000:03:00.0: irq 46 for MSI/MSI-X [ 0.836982] r8169 0000:03:00.0: eth0: RTL8102e at 0xffffc9000067e000, 00:23:8b:77:bd:61, XID 14a00000 IRQ 46 [ 0.844569] ahci 0000:00:1f.2: version 3.0 [ 0.844590] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.844646] alloc irq_desc for 47 on node -1 [ 0.844648] alloc kstat_irqs on node -1 [ 0.844660] ahci 0000:00:1f.2: irq 47 for MSI/MSI-X [ 0.844716] ahci: SSS flag set, parallel bus scan disabled [ 0.844749] ahci 0000:00:1f.2: AHCI 0001.0200 32 slots 4 ports 3 Gbps 0x33 impl SATA mode [ 0.844753] ahci 0000:00:1f.2: flags: 64bit ncq sntf stag pm led clo pmp pio slum part ccc ems sxs [ 0.844759] ahci 0000:00:1f.2: setting latency timer to 64 [ 0.847716] b43-pci-bridge 0000:02:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.847733] b43-pci-bridge 0000:02:00.0: setting latency timer to 64 [ 0.880284] ssb: Core 0 found: ChipCommon (cc 0x800, rev 0x16, vendor 0x4243) [ 0.880302] ssb: Core 1 found: IEEE 802.11 (cc 0x812, rev 0x0F, vendor 0x4243) [ 0.880318] ssb: Core 2 found: PCMCIA (cc 0x80D, rev 0x0A, vendor 0x4243) [ 0.880335] ssb: Core 3 found: PCI-E (cc 0x820, rev 0x09, vendor 0x4243) [ 0.900236] scsi0 : ahci [ 0.900346] scsi1 : ahci [ 0.900409] scsi2 : ahci [ 0.900474] scsi3 : ahci [ 0.900551] scsi4 : ahci [ 0.900619] scsi5 : ahci [ 0.900823] ata1: SATA max UDMA/133 abar m2048@0xdc705000 port 0xdc705100 irq 47 [ 0.900827] ata2: SATA max UDMA/133 abar m2048@0xdc705000 port 0xdc705180 irq 47 [ 0.900830] ata3: DUMMY [ 0.900831] ata4: DUMMY [ 0.900834] ata5: SATA max UDMA/133 abar m2048@0xdc705000 port 0xdc705300 irq 47 [ 0.900837] ata6: SATA max UDMA/133 abar m2048@0xdc705000 port 0xdc705380 irq 47 [ 0.950096] usb 1-1: new high speed USB device using ehci_hcd and address 2 [ 0.960165] ssb: Sonics Silicon Backplane found on PCI device 0000:02:00.0 [ 1.121653] Initializing USB Mass Storage driver... [ 1.121797] scsi6 : usb-storage 1-1:1.0 [ 1.121877] usbcore: registered new interface driver usb-storage [ 1.121879] USB Mass Storage support registered. [ 1.230127] usb 2-4: new high speed USB device using ehci_hcd and address 2 [ 1.431343] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.431847] ata1.00: ATA-8: FUJITSU MHZ2320BH G2, 8909, max UDMA/100 [ 1.431858] ata1.00: 625142448 sectors, multi 16: LBA48 NCQ (depth 31/32), AA [ 1.432484] ata1.00: configured for UDMA/100 [ 1.450205] scsi 0:0:0:0: Direct-Access ATA FUJITSU MHZ2320B 8909 PQ: 0 ANSI: 5 [ 1.450365] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 1.450408] sd 0:0:0:0: [sda] 625142448 512-byte logical blocks: (320 GB/298 GiB) [ 1.450489] sd 0:0:0:0: [sda] Write Protect is off [ 1.450492] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.450515] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.450652] sda: sda1 sda2 sda3 sda4 [ 1.491168] sd 0:0:0:0: [sda] Attached SCSI disk [ 2.122404] scsi 6:0:0:0: Direct-Access Generic- Multi-Card 1.00 PQ: 0 ANSI: 0 CCS [ 2.122972] sd 6:0:0:0: Attached scsi generic sg1 type 0 [ 2.126745] sd 6:0:0:0: [sdb] Attached SCSI removable disk [ 2.381344] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 2.385149] ata2.00: ATAPI: HL-DT-ST DVDRAM GSA-T50L, SC04, max UDMA/100 [ 2.390275] ata2.00: configured for UDMA/100 [ 2.513271] scsi 1:0:0:0: CD-ROM HL-DT-ST DVDRAM GSA-T50L SC04 PQ: 0 ANSI: 5 [ 2.839468] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 2.839472] Uniform CD-ROM driver Revision: 3.20 [ 2.839603] sr 1:0:0:0: Attached scsi CD-ROM sr0 [ 2.839678] sr 1:0:0:0: Attached scsi generic sg2 type 5 [ 3.180099] ata5: SATA link down (SStatus 0 SControl 300) [ 3.550126] ata6: SATA link down (SStatus 0 SControl 300) [ 4.018549] EXT4-fs (sda3): INFO: recovery required on readonly filesystem [ 4.018554] EXT4-fs (sda3): write access will be enabled during recovery [ 4.198977] EXT4-fs (sda3): orphan cleanup on readonly fs [ 4.198984] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 555659 [ 4.199013] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 552476 [ 4.199023] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 552475 [ 4.199031] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 552473 [ 4.199039] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 552472 [ 4.199048] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 526918 [ 4.199058] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 552294 [ 4.199067] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 526911 [ 4.199076] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 526903 [ 4.199085] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 526913 [ 4.199095] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 1178239 [ 4.199109] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 1181030 [ 4.199119] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 1177743 [ 4.199128] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 1177736 [ 4.199137] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 1177665 [ 4.199145] EXT4-fs (sda3): 15 orphan inodes deleted [ 4.199148] EXT4-fs (sda3): recovery complete [ 4.606830] EXT4-fs (sda3): mounted filesystem with ordered data mode. Opts: (null) [ 7.148151] udev: starting version 151 [ 7.452978] type=1400 audit(1280384273.272:2): operation="profile_load" pid=682 name="/sbin/dhclient3" pid=682 comm="apparmor_parser" [ 7.453708] type=1400 audit(1280384273.272:3): operation="profile_load" pid=682 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=682 comm="apparmor_parser" [ 7.454070] type=1400 audit(1280384273.272:4): operation="profile_load" pid=682 name="/usr/lib/connman/scripts/dhclient-script" pid=682 comm="apparmor_parser" [ 7.562352] agpgart-intel 0000:00:00.0: Intel GM45 Chipset [ 7.564565] agpgart-intel 0000:00:00.0: detected 65532K stolen memory [ 7.592097] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xc0000000 [ 7.755115] lirc_dev: IR Remote Control driver registered, major 61 [ 7.767511] BUG: unable to handle kernel NULL pointer dereference at (null) [ 7.767869] IP: [] kfifo_alloc+0x2e/0xb0 [ 7.768132] PGD 13a27b067 PUD 1375c6067 PMD 0 [ 7.768360] Oops: 0002 [#1] SMP [ 7.768524] last sysfs file: /sys/module/snd/initstate [ 7.768757] CPU 1 [ 7.768849] Modules linked in: lirc_ene0100(+) lirc_dev v4l1_compat v4l2_compat_ioctl32 lp(+) led_class serio_raw intel_agp video output parport snd soundcore snd_page_alloc usb_storage ahci ssb r8169 mii libahci [ 7.769892] [ 7.769962] Pid: 687, comm: modprobe Not tainted 2.6.35-12-generic #17-Ubuntu 3602/HP Pavilion dv5 Notebook PC [ 7.770415] RIP: 0010:[] [] kfifo_alloc+0x2e/0xb0 [ 7.770783] RSP: 0018:ffff88013825fd08 EFLAGS: 00010286 [ 7.771023] RAX: ffff88013fc0f000 RBX: 0000000000000000 RCX: ffffffff8107f129 [ 7.771345] RDX: 0000000000000000 RSI: 00000000000000d0 RDI: 0000000000000246 [ 7.771667] RBP: ffff88013825fd18 R08: 0000000000000000 R09: 0000000000000246 [ 7.771989] R10: 0000000000000030 R11: 0000000000000000 R12: 0000000000001000 [ 7.772311] R13: ffff880139be1400 R14: ffff880136d58640 R15: 00000000fffffff4 [ 7.772634] FS: 00007f450591a700(0000) GS:ffff880001e80000(0000) knlGS:0000000000000000 [ 7.772999] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 7.773258] CR2: 0000000000000000 CR3: 000000013a270000 CR4: 00000000000406e0 [ 7.773580] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 7.773902] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 7.774225] Process modprobe (pid: 687, threadinfo ffff88013825e000, task ffff8801383ddb80) [ 7.774601] Stack: [ 7.774692] ffff8801379ee840 ffff8801379f14e0 ffff88013825fd58 ffffffffa009ee4f [ 7.776922] <0> ffff88013825fd38 ffffffffa009f060 ffff880139be1400 ffffffffa009f580 [ 7.776922] <0> ffffffffa009f540 00000000fffffff4 ffff88013825fd98 ffffffff81341325 [ 7.776922] Call Trace: [ 7.776922] [] ene_probe+0x17f/0x350 [lirc_ene0100] [ 7.776922] [] pnp_device_probe+0x95/0x100 [ 7.776922] [] ? driver_sysfs_add+0x62/0x90 [ 7.776922] [] really_probe+0x68/0x190 [ 7.776922] [] driver_probe_device+0x45/0x70 [ 7.776922] [] __driver_attach+0x9b/0xa0 [ 7.776922] [] ? __driver_attach+0x0/0xa0 [ 7.776922] [] bus_for_each_dev+0x68/0x90 [ 7.776922] [] driver_attach+0x1e/0x20 [ 7.776922] [] bus_add_driver+0xde/0x280 [ 7.776922] [] driver_register+0x80/0x150 [ 7.776922] [] ? ene_init+0x0/0x3e [lirc_ene0100] [ 7.776922] [] pnp_register_driver+0x21/0x30 [ 7.776922] [] ene_init+0x3c/0x3e [lirc_ene0100] [ 7.776922] [] do_one_initcall+0x3c/0x1a0 [ 7.776922] [] sys_init_module+0xbb/0x200 [ 7.776922] [] system_call_fastpath+0x16/0x1b [ 7.776922] Code: e5 41 54 53 0f 1f 44 00 00 48 89 fb 89 f7 41 89 f4 48 85 ff 48 8d 47 ff 74 33 48 85 f8 75 2e 89 d6 e8 67 33 0c 00 48 85 c0 74 52 <48> 89 03 44 89 63 08 31 c0 c7 43 10 00 00 00 00 c7 43 0c 00 00 [ 7.776922] RIP [] kfifo_alloc+0x2e/0xb0 [ 7.776922] RSP [ 7.776922] CR2: 0000000000000000 [ 7.952097] ---[ end trace 232690367d78defc ]--- [ 7.972185] input: HP WMI hotkeys as /devices/virtual/input/input5 [ 8.055562] lis3lv02d: laptop model unknown, using default axes configuration [ 8.071436] lis3lv02d: 8 bits sensor found [ 8.073913] cfg80211: Calling CRDA to update world regulatory domain [ 8.090220] lp: driver loaded but no devices found [ 8.195960] Linux video capture interface: v2.00 [ 8.230772] input: ST LIS3LV02DL Accelerometer as /devices/platform/lis3lv02d/input/input6 [ 8.242012] Registered led device: hp::hddprotect [ 8.247381] lis3lv02d driver loaded. [ 8.269537] uvcvideo: Found UVC 1.00 device HP Webcam (0408:03ba) [ 8.278749] input: HP Webcam as /devices/pci0000:00/0000:00:1d.7/usb2/2-4/2-4:1.0/input/input7 [ 8.290596] usbcore: registered new interface driver uvcvideo [ 8.296599] USB Video Class driver (v0.1.0) [ 8.496508] [drm] Initialized drm 1.1.0 20060810 [ 8.890214] b43-phy0: Broadcom 4312 WLAN found (core revision 15) [ 9.161220] Synaptics Touchpad, model: 1, fw: 6.5, id: 0x1c0b1, caps: 0xa04751/0xa00000/0x0 [ 9.251385] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 9.257918] i915 0000:00:02.0: setting latency timer to 64 [ 9.262903] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input8 [ 9.363672] alloc irq_desc for 48 on node -1 [ 9.364589] alloc kstat_irqs on node -1 [ 9.365479] i915 0000:00:02.0: irq 48 for MSI/MSI-X [ 9.366381] [drm] set up 63M of stolen space [ 9.969436] cfg80211: World regulatory domain updated: [ 9.970355] (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 9.972158] (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 9.972161] (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 9.972163] (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 9.972166] (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 9.972168] (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 10.030523] Skipping EDID probe due to cached edid [ 10.044137] checking generic (c0000000 130000) vs hw (c0000000 10000000) [ 10.044980] fb: conflicting fb hw usage inteldrmfb vs VESA VGA - removing generic driver [ 10.046743] Console: switching to colour dummy device 80x25 [ 10.660215] Console: switching to colour frame buffer device 160x50 [ 10.663135] fb0: inteldrmfb frame buffer device [ 10.663137] drm: registered panic notifier [ 10.663765] Slow work thread pool: Starting up [ 10.663851] Slow work thread pool: Ready [ 10.666425] phy0: Selected rate control algorithm 'minstrel' [ 10.667053] Registered led device: b43-phy0::tx [ 10.667094] Registered led device: b43-phy0::rx [ 10.667133] Registered led device: b43-phy0::radio [ 10.667231] Broadcom 43xx driver loaded [ Features: PL, Firmware-ID: FW13 ] [ 10.678515] acpi device:02: registered as cooling_device2 [ 10.679653] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input9 [ 10.679832] ACPI: Video Device [OVGA] (multi-head: yes rom: no post: no) [ 10.680051] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 10.680131] alloc irq_desc for 22 on node -1 [ 10.680162] alloc kstat_irqs on node -1 [ 10.680190] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 10.680302] alloc irq_desc for 49 on node -1 [ 10.680330] alloc kstat_irqs on node -1 [ 10.680360] HDA Intel 0000:00:1b.0: irq 49 for MSI/MSI-X [ 10.680423] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 11.450456] input: HDA Intel Mic at Ext Front Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input10 [ 11.450656] input: HDA Intel Mic at Sep UNKNOWN Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input11 [ 11.450798] input: HDA Intel HP Out at Ext Front Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input12 [ 12.120102] Skipping EDID probe due to cached edid [ 13.512334] EXT4-fs (sda3): re-mounted. Opts: errors=remount-ro [ 14.152221] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null) [ 15.476672] type=1400 audit(1280384281.292:5): operation="profile_load" pid=1006 name="/usr/share/gdm/guest-session/Xsession" pid=1006 comm="apparmor_parser" [ 15.478743] type=1400 audit(1280384281.292:6): operation="profile_replace" pid=1007 name="/sbin/dhclient3" pid=1007 comm="apparmor_parser" [ 15.479429] type=1400 audit(1280384281.292:7): operation="profile_replace" pid=1007 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1007 comm="apparmor_parser" [ 15.479797] type=1400 audit(1280384281.292:8): operation="profile_replace" pid=1007 name="/usr/lib/connman/scripts/dhclient-script" pid=1007 comm="apparmor_parser" [ 15.543893] type=1400 audit(1280384281.362:9): operation="profile_load" pid=1010 name="/usr/bin/evince" pid=1010 comm="apparmor_parser" [ 15.552479] type=1400 audit(1280384281.372:10): operation="profile_load" pid=1010 name="/usr/bin/evince-previewer" pid=1010 comm="apparmor_parser" [ 15.557725] type=1400 audit(1280384281.372:11): operation="profile_load" pid=1010 name="/usr/bin/evince-thumbnailer" pid=1010 comm="apparmor_parser" [ 15.688011] type=1400 audit(1280384281.492:12): operation="profile_load" pid=1021 name="/usr/lib/cups/backend/cups-pdf" pid=1021 comm="apparmor_parser" [ 15.688832] type=1400 audit(1280384281.492:13): operation="profile_load" pid=1021 name="/usr/sbin/cupsd" pid=1021 comm="apparmor_parser" [ 15.900349] type=1400 audit(1280384281.712:14): operation="profile_load" pid=1022 name="/usr/sbin/mysqld-akonadi" pid=1022 comm="apparmor_parser" [ 17.380137] Skipping EDID probe due to cached edid [ 17.431415] Skipping EDID probe due to cached edid Bug: 611470 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.32-24-generic (buildd@yellow) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #38-Ubuntu SMP Mon Jul 5 09:20:59 UTC 2010 (Ubuntu 2.6.32-24.38-generic 2.6.32.15+drm33.5) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-2.6.32-24-generic root=UUID=80f6800d-8051-47ae-929d-a405428d9194 ro quiet splash [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] Centaur CentaurHauls [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009e400 (usable) [ 0.000000] BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000d7df9c00 (usable) [ 0.000000] BIOS-e820: 00000000d7df9c00 - 00000000d7e4bc00 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000d7e4bc00 - 00000000d7e4dc00 (ACPI data) [ 0.000000] BIOS-e820: 00000000d7e4dc00 - 00000000d8000000 (reserved) [ 0.000000] BIOS-e820: 00000000f8000000 - 00000000fd000000 (reserved) [ 0.000000] BIOS-e820: 00000000fe000000 - 00000000fed00400 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fef00000 (reserved) [ 0.000000] BIOS-e820: 00000000ffb00000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 0000000628000000 (usable) [ 0.000000] DMI 2.5 present. [ 0.000000] last_pfn = 0x628000 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: write-back [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-D3FFF write-protect [ 0.000000] D4000-EFFFF uncachable [ 0.000000] F0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 00E3F00000 mask FFFFF00000 uncachable [ 0.000000] 1 base 00E4000000 mask FFFC000000 uncachable [ 0.000000] 2 base 00E8000000 mask FFF8000000 uncachable [ 0.000000] 3 base 00F0000000 mask FFF0000000 uncachable [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] 8 disabled [ 0.000000] 9 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] last_pfn = 0xd7df9 max_arch_pfn = 0x400000000 [ 0.000000] e820 update range: 0000000000001000 - 0000000000006000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000001000 (usable) [ 0.000000] modified: 0000000000001000 - 0000000000006000 (reserved) [ 0.000000] modified: 0000000000006000 - 000000000009e400 (usable) [ 0.000000] modified: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 00000000d7df9c00 (usable) [ 0.000000] modified: 00000000d7df9c00 - 00000000d7e4bc00 (ACPI NVS) [ 0.000000] modified: 00000000d7e4bc00 - 00000000d7e4dc00 (ACPI data) [ 0.000000] modified: 00000000d7e4dc00 - 00000000d8000000 (reserved) [ 0.000000] modified: 00000000f8000000 - 00000000fd000000 (reserved) [ 0.000000] modified: 00000000fe000000 - 00000000fed00400 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fef00000 (reserved) [ 0.000000] modified: 00000000ffb00000 - 0000000100000000 (reserved) [ 0.000000] modified: 0000000100000000 - 0000000628000000 (usable) [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] Using GB pages for direct mapping [ 0.000000] init_memory_mapping: 0000000000000000-00000000d7df9000 [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] 0000000000 - 00c0000000 page 1G [ 0.000000] 00c0000000 - 00d7c00000 page 2M [ 0.000000] 00d7c00000 - 00d7df9000 page 4k [ 0.000000] kernel direct mapping tables up to d7df9000 @ 8000-b000 [ 0.000000] init_memory_mapping: 0000000100000000-0000000628000000 [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] 0100000000 - 0600000000 page 1G [ 0.000000] 0600000000 - 0628000000 page 2M [ 0.000000] kernel direct mapping tables up to 628000000 @ a000-c000 [ 0.000000] RAMDISK: 377fc000 - 37fefeb4 [ 0.000000] ACPI: RSDP 00000000000fec30 00024 (v02 DELL ) [ 0.000000] ACPI: XSDT 00000000000fcc42 0007C (v01 DELL B10K 00000015 ASL 00000061) [ 0.000000] ACPI: FACP 00000000000fcd3a 000F4 (v03 DELL B10K 00000015 ASL 00000061) [ 0.000000] ACPI: DSDT 00000000ffe9e449 05732 (v01 DELL dt_ex 00001000 INTL 20050624) [ 0.000000] ACPI: FACS 00000000d7df9c00 00040 [ 0.000000] ACPI: SSDT 00000000ffea3b7b 00089 (v01 DELL st_ex 00001000 INTL 20050624) [ 0.000000] ACPI: APIC 00000000000fce2e 0016A (v01 DELL B10K 00000015 ASL 00000061) [ 0.000000] ACPI: BOOT 00000000000fcf98 00028 (v01 DELL B10K 00000015 ASL 00000061) [ 0.000000] ACPI: ASF! 00000000000fcfc0 00096 (v32 DELL B10K 00000015 ASL 00000061) [ 0.000000] ACPI: MCFG 00000000000fd056 0003E (v01 DELL B10K 00000015 ASL 00000061) [ 0.000000] ACPI: HPET 00000000000fd094 00038 (v01 DELL B10K 00000015 ASL 00000061) [ 0.000000] ACPI: TCPA 00000000000fd2f0 00032 (v01 DELL B10K 00000015 ASL 00000061) [ 0.000000] ACPI: ____ 00000000000fd322 00030 (v01 DELL B10K 00000015 ASL 00000061) [ 0.000000] ACPI: _RAT 00000000000fded4 00030 (v01 DELL B10K 00000015 ASL 00000061) [ 0.000000] ACPI: SSDT 00000000d7e4dc00 02454 (v01 INTEL PPM RCM 80000001 INTL 20061109) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-0000000628000000 [ 0.000000] Bootmem setup node 0 0000000000000000-0000000628000000 [ 0.000000] NODE_DATA [000000000000b000 - 000000000000ffff] [ 0.000000] bootmap [0000000000100000 - 00000000001c4fff] pages c5 [ 0.000000] (8 early reservations) ==> bootmem [0000000000 - 0628000000] [ 0.000000] #0 [0000000000 - 0000001000] BIOS data page ==> [0000000000 - 0000001000] [ 0.000000] #1 [0000006000 - 0000008000] TRAMPOLINE ==> [0000006000 - 0000008000] [ 0.000000] #2 [0001000000 - 0001a2fe64] TEXT DATA BSS ==> [0001000000 - 0001a2fe64] [ 0.000000] #3 [00377fc000 - 0037fefeb4] RAMDISK ==> [00377fc000 - 0037fefeb4] [ 0.000000] #4 [000009e400 - 0000100000] BIOS reserved ==> [000009e400 - 0000100000] [ 0.000000] #5 [0001a30000 - 0001a301d8] BRK ==> [0001a30000 - 0001a301d8] [ 0.000000] #6 [0000008000 - 000000a000] PGTABLE ==> [0000008000 - 000000a000] [ 0.000000] #7 [000000a000 - 000000b000] PGTABLE ==> [000000a000 - 000000b000] [ 0.000000] [ffffea0000000000-ffffea000f7fffff] PMD -> [ffff880028600000-ffff8800375fffff] on node 0 [ 0.000000] [ffffea000f800000-ffffea00159fffff] PMD -> [ffff880038000000-ffff88003e1fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000000 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal 0x00100000 -> 0x00628000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[4] active PFN ranges [ 0.000000] 0: 0x00000000 -> 0x00000001 [ 0.000000] 0: 0x00000006 -> 0x0000009e [ 0.000000] 0: 0x00000100 -> 0x000d7df9 [ 0.000000] 0: 0x00100000 -> 0x00628000 [ 0.000000] On node 0 totalpages: 6290834 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 103 pages reserved [ 0.000000] DMA zone: 3834 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 14280 pages used for memmap [ 0.000000] DMA32 zone: 865841 pages, LIFO batch:31 [ 0.000000] Normal zone: 73920 pages used for memmap [ 0.000000] Normal zone: 5332800 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x808 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x20] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x22] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x32] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x34] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x05] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x06] lapic_id[0x02] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x07] lapic_id[0x12] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x08] lapic_id[0x14] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x09] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0a] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0b] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0c] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0d] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0e] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0f] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x10] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x11] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x12] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x13] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x14] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x15] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x16] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x17] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x18] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x19] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x1a] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x1b] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x1c] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x1d] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x1e] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x1f] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x20] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0xff] high level lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x08] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 8, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: IOAPIC (id[0x09] address[0xfec80000] gsi_base[24]) [ 0.000000] IOAPIC[1]: apic_id 9, version 32, address 0xfec80000, GSI 24-47 [ 0.000000] ACPI: IOAPIC (id[0x0a] address[0xfec88000] gsi_base[48]) [ 0.000000] IOAPIC[2]: apic_id 10, version 32, address 0xfec88000, GSI 48-71 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a301 base: 0xfed00000 [ 0.000000] SMP: Allowing 32 CPUs, 24 hotplug CPUs [ 0.000000] nr_irqs_gsi: 72 [ 0.000000] PM: Registered nosave memory: 0000000000001000 - 0000000000006000 [ 0.000000] PM: Registered nosave memory: 000000000009e000 - 00000000000f0000 [ 0.000000] PM: Registered nosave memory: 00000000000f0000 - 0000000000100000 [ 0.000000] PM: Registered nosave memory: 00000000d7df9000 - 00000000d7dfa000 [ 0.000000] PM: Registered nosave memory: 00000000d7dfa000 - 00000000d7e4b000 [ 0.000000] PM: Registered nosave memory: 00000000d7e4b000 - 00000000d7e4c000 [ 0.000000] PM: Registered nosave memory: 00000000d7e4c000 - 00000000d7e4d000 [ 0.000000] PM: Registered nosave memory: 00000000d7e4d000 - 00000000d7e4e000 [ 0.000000] PM: Registered nosave memory: 00000000d7e4e000 - 00000000d8000000 [ 0.000000] PM: Registered nosave memory: 00000000d8000000 - 00000000f8000000 [ 0.000000] PM: Registered nosave memory: 00000000f8000000 - 00000000fd000000 [ 0.000000] PM: Registered nosave memory: 00000000fd000000 - 00000000fe000000 [ 0.000000] PM: Registered nosave memory: 00000000fe000000 - 00000000fed00000 [ 0.000000] PM: Registered nosave memory: 00000000fed00000 - 00000000fee00000 [ 0.000000] PM: Registered nosave memory: 00000000fee00000 - 00000000fef00000 [ 0.000000] PM: Registered nosave memory: 00000000fef00000 - 00000000ffb00000 [ 0.000000] PM: Registered nosave memory: 00000000ffb00000 - 0000000100000000 [ 0.000000] Allocating PCI resources starting at d8000000 (gap: d8000000:20000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:32 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 30 pages/cpu @ffff88003e200000 s91544 r8192 d23144 u131072 [ 0.000000] pcpu-alloc: s91544 r8192 d23144 u131072 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 [ 0.000000] pcpu-alloc: [0] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 6202475 [ 0.000000] Policy zone: Normal [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.32-24-generic root=UUID=80f6800d-8051-47ae-929d-a405428d9194 ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Initializing CPU#0 [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) [ 0.000000] Placing 64MB software IO TLB between ffff880020000000 - ffff880024000000 [ 0.000000] software IO TLB at phys 0x20000000 - 0x24000000 [ 0.000000] Memory: 24728516k/25821184k available (5422k kernel code, 657848k absent, 434820k reserved, 2979k data, 880k init) [ 0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=32, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] NR_IRQS:4352 nr_irqs:1480 [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 251658240 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] HPET: 4 timers in total, 0 timers will be used for per-cpu timer [ 0.000000] Fast TSC calibration using PIT [ 0.010000] Detected 2660.018 MHz processor. [ 0.000013] Calibrating delay loop (skipped), value calculated using timer frequency.. 5320.03 BogoMIPS (lpj=26600180) [ 0.000035] Security Framework initialized [ 0.000051] AppArmor: AppArmor initialized [ 0.001977] Dentry cache hash table entries: 4194304 (order: 13, 33554432 bytes) [ 0.008489] Inode-cache hash table entries: 2097152 (order: 12, 16777216 bytes) [ 0.011296] Mount-cache hash table entries: 256 [ 0.011436] Initializing cgroup subsys ns [ 0.011439] Initializing cgroup subsys cpuacct [ 0.011444] Initializing cgroup subsys memory [ 0.011450] Initializing cgroup subsys devices [ 0.011452] Initializing cgroup subsys freezer [ 0.011453] Initializing cgroup subsys net_cls [ 0.011475] CPU: Physical Processor ID: 1 [ 0.011476] CPU: Processor Core ID: 0 [ 0.011479] CPU: L1 I cache: 32K, L1 D cache: 32K [ 0.011480] CPU: L2 cache: 256K [ 0.011481] CPU: L3 cache: 12288K [ 0.011484] CPU 0/0x20 -> Node 0 [ 0.011487] mce: CPU supports 9 MCE banks [ 0.011496] CPU0: Thermal monitoring enabled (TM1) [ 0.011499] CPU 0 MCA banks CMCI:2 CMCI:3 CMCI:5 CMCI:6 CMCI:8 [ 0.011507] using mwait in idle threads. [ 0.011508] Performance Events: Westmere events, Intel PMU driver. [ 0.011512] ... version: 3 [ 0.011513] ... bit width: 48 [ 0.011514] ... generic registers: 4 [ 0.011515] ... value mask: 0000ffffffffffff [ 0.011517] ... max period: 000000007fffffff [ 0.011518] ... fixed-purpose events: 3 [ 0.011519] ... event mask: 000000070000000f [ 0.013197] ACPI: Core revision 20090903 [ 0.275317] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.275321] ftrace: allocating 22527 entries in 89 pages [ 0.280993] Setting APIC routing to physical flat [ 0.281613] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.381370] CPU0: Intel(R) Xeon(R) CPU E5640 @ 2.67GHz stepping 02 [ 0.496822] Booting processor 1 APIC 0x22 ip 0x6000 [ 0.507483] Initializing CPU#1 [ 0.656305] CPU: Physical Processor ID: 1 [ 0.656306] CPU: Processor Core ID: 1 [ 0.656308] CPU: L1 I cache: 32K, L1 D cache: 32K [ 0.656309] CPU: L2 cache: 256K [ 0.656310] CPU: L3 cache: 12288K [ 0.656312] CPU 1/0x22 -> Node 0 [ 0.656323] CPU1: Thermal monitoring enabled (TM1) [ 0.656326] CPU 1 MCA banks CMCI:2 CMCI:3 CMCI:5 SHD:6 SHD:8 [ 0.656402] CPU1: Intel(R) Xeon(R) CPU E5640 @ 2.67GHz stepping 02 [ 0.656409] checking TSC synchronization [CPU#0 -> CPU#1]: passed. [ 0.676469] Booting processor 2 APIC 0x32 ip 0x6000 [ 0.686941] Initializing CPU#2 [ 0.835853] CPU: Physical Processor ID: 1 [ 0.835854] CPU: Processor Core ID: 9 [ 0.835856] CPU: L1 I cache: 32K, L1 D cache: 32K [ 0.835857] CPU: L2 cache: 256K [ 0.835858] CPU: L3 cache: 12288K [ 0.835860] CPU 2/0x32 -> Node 0 [ 0.835871] CPU2: Thermal monitoring enabled (TM1) [ 0.835874] CPU 2 MCA banks CMCI:2 CMCI:3 CMCI:5 SHD:6 SHD:8 [ 0.835950] CPU2: Intel(R) Xeon(R) CPU E5640 @ 2.67GHz stepping 02 [ 0.835956] checking TSC synchronization [CPU#0 -> CPU#2]: passed. [ 0.856018] Booting processor 3 APIC 0x34 ip 0x6000 [ 0.866491] Initializing CPU#3 [ 1.015401] CPU: Physical Processor ID: 1 [ 1.015402] CPU: Processor Core ID: 10 [ 1.015404] CPU: L1 I cache: 32K, L1 D cache: 32K [ 1.015405] CPU: L2 cache: 256K [ 1.015406] CPU: L3 cache: 12288K [ 1.015408] CPU 3/0x34 -> Node 0 [ 1.015419] CPU3: Thermal monitoring enabled (TM1) [ 1.015422] CPU 3 MCA banks CMCI:2 CMCI:3 CMCI:5 SHD:6 SHD:8 [ 1.015498] CPU3: Intel(R) Xeon(R) CPU E5640 @ 2.67GHz stepping 02 [ 1.015505] checking TSC synchronization [CPU#0 -> CPU#3]: passed. [ 1.035563] Booting processor 4 APIC 0x0 ip 0x6000 [ 1.046031] Initializing CPU#4 [ 1.194948] CPU: Physical Processor ID: 0 [ 1.194949] CPU: Processor Core ID: 0 [ 1.194951] CPU: L1 I cache: 32K, L1 D cache: 32K [ 1.194952] CPU: L2 cache: 256K [ 1.194953] CPU: L3 cache: 12288K [ 1.194955] CPU 4/0x0 -> Node 0 [ 1.194965] CPU4: Thermal monitoring enabled (TM1) [ 1.194968] CPU 4 MCA banks CMCI:2 CMCI:3 CMCI:5 CMCI:6 CMCI:8 [ 1.195027] CPU4: Intel(R) Xeon(R) CPU E5640 @ 2.67GHz stepping 02 [ 1.195033] checking TSC synchronization [CPU#0 -> CPU#4]: passed. [ 1.215052] Booting processor 5 APIC 0x2 ip 0x6000 [ 1.225522] Initializing CPU#5 [ 1.374496] CPU: Physical Processor ID: 0 [ 1.374497] CPU: Processor Core ID: 1 [ 1.374500] CPU: L1 I cache: 32K, L1 D cache: 32K [ 1.374501] CPU: L2 cache: 256K [ 1.374502] CPU: L3 cache: 12288K [ 1.374504] CPU 5/0x2 -> Node 0 [ 1.374515] CPU5: Thermal monitoring enabled (TM1) [ 1.374518] CPU 5 MCA banks CMCI:2 CMCI:3 CMCI:5 SHD:6 SHD:8 [ 1.374566] CPU5: Intel(R) Xeon(R) CPU E5640 @ 2.67GHz stepping 02 [ 1.374572] checking TSC synchronization [CPU#0 -> CPU#5]: passed. [ 1.394591] Booting processor 6 APIC 0x12 ip 0x6000 [ 1.405061] Initializing CPU#6 [ 1.554044] CPU: Physical Processor ID: 0 [ 1.554045] CPU: Processor Core ID: 9 [ 1.554048] CPU: L1 I cache: 32K, L1 D cache: 32K [ 1.554049] CPU: L2 cache: 256K [ 1.554050] CPU: L3 cache: 12288K [ 1.554052] CPU 6/0x12 -> Node 0 [ 1.554062] CPU6: Thermal monitoring enabled (TM1) [ 1.554065] CPU 6 MCA banks CMCI:2 CMCI:3 CMCI:5 SHD:6 SHD:8 [ 1.554170] CPU6: Intel(R) Xeon(R) CPU E5640 @ 2.67GHz stepping 02 [ 1.554176] checking TSC synchronization [CPU#0 -> CPU#6]: passed. [ 1.574192] Booting processor 7 APIC 0x14 ip 0x6000 [ 1.584662] Initializing CPU#7 [ 1.733592] CPU: Physical Processor ID: 0 [ 1.733593] CPU: Processor Core ID: 10 [ 1.733596] CPU: L1 I cache: 32K, L1 D cache: 32K [ 1.733597] CPU: L2 cache: 256K [ 1.733598] CPU: L3 cache: 12288K [ 1.733600] CPU 7/0x14 -> Node 0 [ 1.733610] CPU7: Thermal monitoring enabled (TM1) [ 1.733613] CPU 7 MCA banks CMCI:2 CMCI:3 CMCI:5 SHD:6 SHD:8 [ 1.733670] CPU7: Intel(R) Xeon(R) CPU E5640 @ 2.67GHz stepping 02 [ 1.733676] checking TSC synchronization [CPU#0 -> CPU#7]: passed. [ 1.753646] Brought up 8 CPUs [ 1.753649] Total of 8 processors activated (42560.01 BogoMIPS). [ 1.758179] CPU0 attaching sched-domain: [ 1.758183] domain 0: span 0-3 level MC [ 1.758184] groups: 0 1 2 3 [ 1.758188] domain 1: span 0-7 level CPU [ 1.758189] groups: 0-3 (cpu_power = 4096) 4-7 (cpu_power = 4096) [ 1.758196] CPU1 attaching sched-domain: [ 1.758197] domain 0: span 0-3 level MC [ 1.758198] groups: 1 2 3 0 [ 1.758201] domain 1: span 0-7 level CPU [ 1.758202] groups: 0-3 (cpu_power = 4096) 4-7 (cpu_power = 4096) [ 1.758206] CPU2 attaching sched-domain: [ 1.758207] domain 0: span 0-3 level MC [ 1.758208] groups: 2 3 0 1 [ 1.758211] domain 1: span 0-7 level CPU [ 1.758212] groups: 0-3 (cpu_power = 4096) 4-7 (cpu_power = 4096) [ 1.758216] CPU3 attaching sched-domain: [ 1.758217] domain 0: span 0-3 level MC [ 1.758219] groups: 3 0 1 2 [ 1.758221] domain 1: span 0-7 level CPU [ 1.758223] groups: 0-3 (cpu_power = 4096) 4-7 (cpu_power = 4096) [ 1.758226] CPU4 attaching sched-domain: [ 1.758228] domain 0: span 4-7 level MC [ 1.758229] groups: 4 5 6 7 [ 1.758232] domain 1: span 0-7 level CPU [ 1.758233] groups: 4-7 (cpu_power = 4096) 0-3 (cpu_power = 4096) [ 1.758237] CPU5 attaching sched-domain: [ 1.758238] domain 0: span 4-7 level MC [ 1.758239] groups: 5 6 7 4 [ 1.758242] domain 1: span 0-7 level CPU [ 1.758243] groups: 4-7 (cpu_power = 4096) 0-3 (cpu_power = 4096) [ 1.758247] CPU6 attaching sched-domain: [ 1.758248] domain 0: span 4-7 level MC [ 1.758249] groups: 6 7 4 5 [ 1.758252] domain 1: span 0-7 level CPU [ 1.758253] groups: 4-7 (cpu_power = 4096) 0-3 (cpu_power = 4096) [ 1.758257] CPU7 attaching sched-domain: [ 1.758258] domain 0: span 4-7 level MC [ 1.758260] groups: 7 4 5 6 [ 1.758262] domain 1: span 0-7 level CPU [ 1.758264] groups: 4-7 (cpu_power = 4096) 0-3 (cpu_power = 4096) [ 1.758726] devtmpfs: initialized [ 1.759025] regulator: core version 0.5 [ 1.759049] Time: 19:05:59 Date: 07/29/10 [ 1.759101] NET: Registered protocol family 16 [ 1.759214] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it [ 1.759216] ACPI: bus type pci registered [ 1.759234] Trying to unpack rootfs image as initramfs... [ 1.759267] PCI: MCFG configuration 0: base f8000000 segment 0 buses 0 - 63 [ 1.759269] PCI: MCFG area at f8000000 reserved in E820 [ 1.760600] PCI: Using MMCONFIG at f8000000 - fbffffff [ 1.760601] PCI: Using configuration type 1 for base access [ 1.761299] bio: create slab at 0 [ 1.761913] ACPI: EC: Look up EC in DSDT [ 1.841005] ACPI: BIOS _OSI(Linux) query ignored [ 1.857772] ACPI: Interpreter enabled [ 1.857776] ACPI: (supports S0 S3 S4 S5) [ 1.857790] ACPI: Using IOAPIC for interrupt routing [ 1.911104] Freeing initrd memory: 8143k freed [ 1.956536] ACPI: No dock devices found. [ 1.971038] ACPI: PCI Root Bridge [PCI0] (0000:00) [ 1.971114] pci 0000:00:00.0: PME# supported from D0 D3hot D3cold [ 1.971117] pci 0000:00:00.0: PME# disabled [ 1.971183] pci 0000:00:01.0: PME# supported from D0 D3hot D3cold [ 1.971186] pci 0000:00:01.0: PME# disabled [ 1.971252] pci 0000:00:03.0: PME# supported from D0 D3hot D3cold [ 1.971255] pci 0000:00:03.0: PME# disabled [ 1.971323] pci 0000:00:07.0: PME# supported from D0 D3hot D3cold [ 1.971325] pci 0000:00:07.0: PME# disabled [ 1.971530] pci 0000:00:1a.0: reg 20 io port: [0x1f20-0x1f3f] [ 1.971601] pci 0000:00:1a.1: reg 20 io port: [0x1f00-0x1f1f] [ 1.971669] pci 0000:00:1a.2: reg 20 io port: [0x1c00-0x1c1f] [ 1.971741] pci 0000:00:1a.7: reg 10 32bit mmio: [0xf7ffa000-0xf7ffa3ff] [ 1.971795] pci 0000:00:1a.7: PME# supported from D0 D3hot D3cold [ 1.971799] pci 0000:00:1a.7: PME# disabled [ 1.971838] pci 0000:00:1b.0: reg 10 64bit mmio: [0xf7ffc000-0xf7ffffff] [ 1.971879] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 1.971882] pci 0000:00:1b.0: PME# disabled [ 1.971943] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 1.971947] pci 0000:00:1c.0: PME# disabled [ 1.972013] pci 0000:00:1c.5: PME# supported from D0 D3hot D3cold [ 1.972016] pci 0000:00:1c.5: PME# disabled [ 1.972070] pci 0000:00:1d.0: reg 20 io port: [0x1f80-0x1f9f] [ 1.972138] pci 0000:00:1d.1: reg 20 io port: [0x1f60-0x1f7f] [ 1.972208] pci 0000:00:1d.2: reg 20 io port: [0x1f40-0x1f5f] [ 1.972279] pci 0000:00:1d.7: reg 10 32bit mmio: [0xff980000-0xff9803ff] [ 1.972333] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 1.972337] pci 0000:00:1d.7: PME# disabled [ 1.972459] pci 0000:00:1f.0: quirk: region 0800-087f claimed by ICH6 ACPI/GPIO/TCO [ 1.972462] pci 0000:00:1f.0: quirk: region 0880-08bf claimed by ICH6 GPIO [ 1.972465] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 1 PIO at 0c00 (mask 007f) [ 1.972468] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 2 PIO at 00e0 (mask 0007) [ 1.972470] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 3 PIO at 0900 (mask 003f) [ 1.972533] pci 0000:00:1f.2: reg 10 io port: [0x1e00-0x1e07] [ 1.972538] pci 0000:00:1f.2: reg 14 io port: [0x1e10-0x1e13] [ 1.972543] pci 0000:00:1f.2: reg 18 io port: [0x1e20-0x1e27] [ 1.972548] pci 0000:00:1f.2: reg 1c io port: [0x1e30-0x1e33] [ 1.972553] pci 0000:00:1f.2: reg 20 io port: [0x1ec0-0x1edf] [ 1.972558] pci 0000:00:1f.2: reg 24 32bit mmio: [0xff970000-0xff9707ff] [ 1.972589] pci 0000:00:1f.2: PME# supported from D3hot [ 1.972592] pci 0000:00:1f.2: PME# disabled [ 1.972619] pci 0000:00:1f.3: reg 10 64bit mmio: [0xf7ffb000-0xf7ffb0ff] [ 1.972632] pci 0000:00:1f.3: reg 20 io port: [0xece0-0xecff] [ 1.972722] pci 0000:01:00.0: PME# supported from D0 D3hot D3cold [ 1.972725] pci 0000:01:00.0: PME# disabled [ 1.972762] pci 0000:00:01.0: bridge 32bit mmio: [0xf0d00000-0xf0dfffff] [ 1.972872] pci 0000:03:00.0: PME# supported from D0 D3hot D3cold [ 1.972875] pci 0000:03:00.0: PME# disabled [ 1.972903] pci 0000:00:03.0: bridge io port: [0xc000-0xdfff] [ 1.972905] pci 0000:00:03.0: bridge 32bit mmio: [0xf0f00000-0xf7efffff] [ 1.972910] pci 0000:00:03.0: bridge 64bit mmio pref: [0xe8000000-0xefffffff] [ 1.972958] pci 0000:04:00.0: PME# supported from D0 D3hot D3cold [ 1.972961] pci 0000:04:00.0: PME# disabled [ 1.973014] pci 0000:04:02.0: PME# supported from D0 D3hot D3cold [ 1.973017] pci 0000:04:02.0: PME# disabled [ 1.973049] pci 0000:03:00.0: bridge io port: [0xc000-0xdfff] [ 1.973052] pci 0000:03:00.0: bridge 32bit mmio: [0xf0f00000-0xf7efffff] [ 1.973056] pci 0000:03:00.0: bridge 64bit mmio pref: [0xe8000000-0xefffffff] [ 1.973091] pci 0000:05:00.0: reg 10 32bit mmio: [0xf6000000-0xf6ffffff] [ 1.973101] pci 0000:05:00.0: reg 14 64bit mmio pref: [0xe8000000-0xebffffff] [ 1.973112] pci 0000:05:00.0: reg 1c 64bit mmio: [0xf4000000-0xf5ffffff] [ 1.973118] pci 0000:05:00.0: reg 24 io port: [0xdc80-0xdcff] [ 1.973124] pci 0000:05:00.0: reg 30 32bit mmio pref: [0xf7e00000-0xf7e1ffff] [ 1.973192] pci 0000:04:00.0: bridge io port: [0xd000-0xdfff] [ 1.973194] pci 0000:04:00.0: bridge 32bit mmio: [0xf4000000-0xf7efffff] [ 1.973199] pci 0000:04:00.0: bridge 64bit mmio pref: [0xe8000000-0xebffffff] [ 1.973234] pci 0000:06:00.0: reg 10 32bit mmio: [0xf1000000-0xf1ffffff] [ 1.973244] pci 0000:06:00.0: reg 14 64bit mmio pref: [0xec000000-0xefffffff] [ 1.973254] pci 0000:06:00.0: reg 1c 64bit mmio: [0xf2000000-0xf3ffffff] [ 1.973260] pci 0000:06:00.0: reg 24 io port: [0xcc80-0xccff] [ 1.973266] pci 0000:06:00.0: reg 30 32bit mmio pref: [0xf0f00000-0xf0f1ffff] [ 1.973332] pci 0000:04:02.0: bridge io port: [0xc000-0xcfff] [ 1.973335] pci 0000:04:02.0: bridge 32bit mmio: [0xf0f00000-0xf3ffffff] [ 1.973340] pci 0000:04:02.0: bridge 64bit mmio pref: [0xec000000-0xefffffff] [ 1.973377] pci 0000:00:07.0: bridge 32bit mmio: [0xf0e00000-0xf0efffff] [ 1.973507] pci 0000:09:00.0: reg 10 64bit mmio: [0xf0ce0000-0xf0ceffff] [ 1.973524] pci 0000:09:00.0: reg 18 64bit mmio: [0xf0cf0000-0xf0cfffff] [ 1.973602] pci 0000:09:00.0: PME# supported from D3hot D3cold [ 1.973608] pci 0000:09:00.0: PME# disabled [ 1.973666] pci 0000:00:1c.5: bridge 32bit mmio: [0xf0c00000-0xf0cfffff] [ 1.973716] pci 0000:0a:0a.0: reg 10 32bit mmio: [0xf0bfb000-0xf0bfb7ff] [ 1.973722] pci 0000:0a:0a.0: reg 14 32bit mmio: [0xf0bfc000-0xf0bfffff] [ 1.973765] pci 0000:0a:0a.0: supports D1 D2 [ 1.973766] pci 0000:0a:0a.0: PME# supported from D0 D1 D2 D3hot D3cold [ 1.973770] pci 0000:0a:0a.0: PME# disabled [ 1.973802] pci 0000:00:1e.0: transparent bridge [ 1.973807] pci 0000:00:1e.0: bridge 32bit mmio: [0xf0b00000-0xf0bfffff] [ 1.973836] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 1.974511] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI1._PRT] [ 1.974809] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI2._PRT] [ 1.975104] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI3._PRT] [ 1.975396] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI4._PRT] [ 1.975675] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI5._PRT] [ 1.975953] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI6._PRT] [ 2.973729] ACPI: PCI Root Bridge [PCI7] (0000:20) [ 2.973797] pci 0000:20:03.0: PME# supported from D0 D3hot D3cold [ 2.973799] pci 0000:20:03.0: PME# disabled [ 2.973856] pci 0000:20:07.0: PME# supported from D0 D3hot D3cold [ 2.973858] pci 0000:20:07.0: PME# disabled [ 2.973916] pci 0000:20:09.0: PME# supported from D0 D3hot D3cold [ 2.973918] pci 0000:20:09.0: PME# disabled [ 2.974072] pci 0000:20:03.0: bridge 32bit mmio: [0xe7f00000-0xe7ffffff] [ 2.974095] pci 0000:20:07.0: bridge 32bit mmio: [0xe7e00000-0xe7efffff] [ 2.974118] pci 0000:20:09.0: bridge 32bit mmio: [0xe7d00000-0xe7dfffff] [ 2.974132] ACPI: PCI Interrupt Routing Table [\_SB_.PCI7._PRT] [ 2.974744] ACPI: PCI Interrupt Routing Table [\_SB_.PCI7.PCI9._PRT] [ 2.975038] ACPI: PCI Interrupt Routing Table [\_SB_.PCI7.PCIA._PRT] [ 2.975333] ACPI: PCI Interrupt Routing Table [\_SB_.PCI7.PCIB._PRT] [ 3.079856] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 7 9 10 *11 12 15) [ 3.080665] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 9 *10 11 12 15) [ 3.081471] ACPI: PCI Interrupt Link [LNKC] (IRQs *3 4 5 6 7 9 10 11 12 15) [ 3.082264] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 7 9 10 11 12 15) *0, disabled. [ 3.083062] ACPI: PCI Interrupt Link [LNKE] (IRQs *3 4 5 6 7 9 10 11 12 15) [ 3.083858] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 6 7 9 10 11 12 15) *0, disabled. [ 3.084660] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 7 *9 10 11 12 15) [ 3.085454] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 *5 6 7 9 10 11 12 15) [ 3.085703] vgaarb: device added: PCI:0000:05:00.0,decodes=io+mem,owns=io+mem,locks=none [ 3.085708] vgaarb: loaded [ 3.085783] SCSI subsystem initialized [ 3.085964] libata version 3.00 loaded. [ 3.086031] usbcore: registered new interface driver usbfs [ 3.086042] usbcore: registered new interface driver hub [ 3.086068] usbcore: registered new device driver usb [ 3.086224] ACPI: WMI: Mapper loaded [ 3.086225] PCI: Using ACPI for IRQ routing [ 3.086394] NetLabel: Initializing [ 3.086396] NetLabel: domain hash size = 128 [ 3.086397] NetLabel: protocols = UNLABELED CIPSOv4 [ 3.086407] NetLabel: unlabeled traffic allowed by default [ 3.086445] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0 [ 3.086448] hpet0: 4 comparators, 64-bit 14.318180 MHz counter [ 3.140191] Switching to clocksource tsc [ 3.141777] AppArmor: AppArmor Filesystem Enabled [ 3.141795] pnp: PnP ACPI init [ 3.141810] ACPI: bus type pnp registered [ 3.158887] pnp 00:01: io resource (0x800-0x85f) overlaps 0000:00:1f.0 BAR 13 (0x800-0x87f), disabling [ 3.158890] pnp 00:01: io resource (0x860-0x8ff) overlaps 0000:00:1f.0 BAR 13 (0x800-0x87f), disabling [ 3.200448] pnp: PnP ACPI: found 11 devices [ 3.200449] ACPI: ACPI bus type pnp unregistered [ 3.200457] system 00:01: ioport range 0xc00-0xc7f has been reserved [ 3.205173] pci 0000:01:00.0: PCI bridge, secondary bus 0000:02 [ 3.205174] pci 0000:01:00.0: IO window: disabled [ 3.205178] pci 0000:01:00.0: MEM window: disabled [ 3.205180] pci 0000:01:00.0: PREFETCH window: disabled [ 3.205185] pci 0000:00:01.0: PCI bridge, secondary bus 0000:01 [ 3.205186] pci 0000:00:01.0: IO window: disabled [ 3.205190] pci 0000:00:01.0: MEM window: 0xf0d00000-0xf0dfffff [ 3.205192] pci 0000:00:01.0: PREFETCH window: disabled [ 3.205196] pci 0000:04:00.0: PCI bridge, secondary bus 0000:05 [ 3.205198] pci 0000:04:00.0: IO window: 0xd000-0xdfff [ 3.205202] pci 0000:04:00.0: MEM window: 0xf4000000-0xf7efffff [ 3.205205] pci 0000:04:00.0: PREFETCH window: 0x000000e8000000-0x000000ebffffff [ 3.205209] pci 0000:04:02.0: PCI bridge, secondary bus 0000:06 [ 3.205211] pci 0000:04:02.0: IO window: 0xc000-0xcfff [ 3.205214] pci 0000:04:02.0: MEM window: 0xf0f00000-0xf3ffffff [ 3.205217] pci 0000:04:02.0: PREFETCH window: 0x000000ec000000-0x000000efffffff [ 3.205221] pci 0000:03:00.0: PCI bridge, secondary bus 0000:04 [ 3.205223] pci 0000:03:00.0: IO window: 0xc000-0xdfff [ 3.205226] pci 0000:03:00.0: MEM window: 0xf0f00000-0xf7efffff [ 3.205229] pci 0000:03:00.0: PREFETCH window: 0x000000e8000000-0x000000efffffff [ 3.205233] pci 0000:00:03.0: PCI bridge, secondary bus 0000:03 [ 3.205235] pci 0000:00:03.0: IO window: 0xc000-0xdfff [ 3.205238] pci 0000:00:03.0: MEM window: 0xf0f00000-0xf7efffff [ 3.205241] pci 0000:00:03.0: PREFETCH window: 0x000000e8000000-0x000000efffffff [ 3.205245] pci 0000:00:07.0: PCI bridge, secondary bus 0000:07 [ 3.205246] pci 0000:00:07.0: IO window: disabled [ 3.205249] pci 0000:00:07.0: MEM window: 0xf0e00000-0xf0efffff [ 3.205251] pci 0000:00:07.0: PREFETCH window: disabled [ 3.205255] pci 0000:00:1c.0: PCI bridge, secondary bus 0000:08 [ 3.205257] pci 0000:00:1c.0: IO window: disabled [ 3.205260] pci 0000:00:1c.0: MEM window: disabled [ 3.205262] pci 0000:00:1c.0: PREFETCH window: disabled [ 3.205267] pci 0000:00:1c.5: PCI bridge, secondary bus 0000:09 [ 3.205268] pci 0000:00:1c.5: IO window: disabled [ 3.205272] pci 0000:00:1c.5: MEM window: 0xf0c00000-0xf0cfffff [ 3.205274] pci 0000:00:1c.5: PREFETCH window: disabled [ 3.205279] pci 0000:00:1e.0: PCI bridge, secondary bus 0000:0a [ 3.205280] pci 0000:00:1e.0: IO window: disabled [ 3.205283] pci 0000:00:1e.0: MEM window: 0xf0b00000-0xf0bfffff [ 3.205286] pci 0000:00:1e.0: PREFETCH window: disabled [ 3.205297] alloc irq_desc for 16 on node -1 [ 3.205299] alloc kstat_irqs on node -1 [ 3.205302] pci 0000:00:01.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 3.205305] pci 0000:00:01.0: setting latency timer to 64 [ 3.205313] alloc irq_desc for 28 on node -1 [ 3.205314] alloc kstat_irqs on node -1 [ 3.205318] pci 0000:01:00.0: PCI INT A -> GSI 28 (level, low) -> IRQ 28 [ 3.205321] pci 0000:01:00.0: setting latency timer to 64 [ 3.205326] pci 0000:00:03.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 3.205329] pci 0000:00:03.0: setting latency timer to 64 [ 3.205335] pci 0000:03:00.0: setting latency timer to 64 [ 3.205341] pci 0000:04:00.0: setting latency timer to 64 [ 3.205347] pci 0000:04:02.0: setting latency timer to 64 [ 3.205353] pci 0000:00:07.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 3.205355] pci 0000:00:07.0: setting latency timer to 64 [ 3.205361] pci 0000:00:1c.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 3.205364] pci 0000:00:1c.0: setting latency timer to 64 [ 3.205370] alloc irq_desc for 17 on node -1 [ 3.205371] alloc kstat_irqs on node -1 [ 3.205374] pci 0000:00:1c.5: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 3.205377] pci 0000:00:1c.5: setting latency timer to 64 [ 3.205382] pci 0000:00:1e.0: setting latency timer to 64 [ 3.205387] pci 0000:20:03.0: PCI bridge, secondary bus 0000:22 [ 3.205388] pci 0000:20:03.0: IO window: disabled [ 3.205391] pci 0000:20:03.0: MEM window: 0xe7f00000-0xe7ffffff [ 3.205394] pci 0000:20:03.0: PREFETCH window: disabled [ 3.205398] pci 0000:20:07.0: PCI bridge, secondary bus 0000:23 [ 3.205399] pci 0000:20:07.0: IO window: disabled [ 3.205403] pci 0000:20:07.0: MEM window: 0xe7e00000-0xe7efffff [ 3.205405] pci 0000:20:07.0: PREFETCH window: disabled [ 3.205410] pci 0000:20:09.0: PCI bridge, secondary bus 0000:24 [ 3.205411] pci 0000:20:09.0: IO window: disabled [ 3.205414] pci 0000:20:09.0: MEM window: 0xe7d00000-0xe7dfffff [ 3.205417] pci 0000:20:09.0: PREFETCH window: disabled [ 3.205427] pci 0000:20:03.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 3.205429] pci 0000:20:03.0: setting latency timer to 64 [ 3.205436] pci 0000:20:07.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 3.205439] pci 0000:20:07.0: setting latency timer to 64 [ 3.205445] pci 0000:20:09.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 3.205448] pci 0000:20:09.0: setting latency timer to 64 [ 3.205451] pci_bus 0000:00: resource 0 io: [0x00-0xffff] [ 3.205452] pci_bus 0000:00: resource 1 mem: [0x000000-0xffffffffffffffff] [ 3.205454] pci_bus 0000:01: resource 1 mem: [0xf0d00000-0xf0dfffff] [ 3.205456] pci_bus 0000:03: resource 0 io: [0xc000-0xdfff] [ 3.205458] pci_bus 0000:03: resource 1 mem: [0xf0f00000-0xf7efffff] [ 3.205459] pci_bus 0000:03: resource 2 pref mem [0xe8000000-0xefffffff] [ 3.205461] pci_bus 0000:04: resource 0 io: [0xc000-0xdfff] [ 3.205462] pci_bus 0000:04: resource 1 mem: [0xf0f00000-0xf7efffff] [ 3.205464] pci_bus 0000:04: resource 2 pref mem [0xe8000000-0xefffffff] [ 3.205465] pci_bus 0000:05: resource 0 io: [0xd000-0xdfff] [ 3.205467] pci_bus 0000:05: resource 1 mem: [0xf4000000-0xf7efffff] [ 3.205468] pci_bus 0000:05: resource 2 pref mem [0xe8000000-0xebffffff] [ 3.205470] pci_bus 0000:06: resource 0 io: [0xc000-0xcfff] [ 3.205471] pci_bus 0000:06: resource 1 mem: [0xf0f00000-0xf3ffffff] [ 3.205473] pci_bus 0000:06: resource 2 pref mem [0xec000000-0xefffffff] [ 3.205474] pci_bus 0000:07: resource 1 mem: [0xf0e00000-0xf0efffff] [ 3.205476] pci_bus 0000:09: resource 1 mem: [0xf0c00000-0xf0cfffff] [ 3.205478] pci_bus 0000:0a: resource 1 mem: [0xf0b00000-0xf0bfffff] [ 3.205479] pci_bus 0000:0a: resource 3 io: [0x00-0xffff] [ 3.205481] pci_bus 0000:0a: resource 4 mem: [0x000000-0xffffffffffffffff] [ 3.205483] pci_bus 0000:20: resource 0 io: [0x00-0xffff] [ 3.205484] pci_bus 0000:20: resource 1 mem: [0x000000-0xffffffffffffffff] [ 3.205486] pci_bus 0000:22: resource 1 mem: [0xe7f00000-0xe7ffffff] [ 3.205487] pci_bus 0000:23: resource 1 mem: [0xe7e00000-0xe7efffff] [ 3.205489] pci_bus 0000:24: resource 1 mem: [0xe7d00000-0xe7dfffff] [ 3.205514] NET: Registered protocol family 2 [ 3.205836] IP route cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 3.207013] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 3.208409] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 3.208583] TCP: Hash tables configured (established 524288 bind 65536) [ 3.208585] TCP reno registered [ 3.208768] NET: Registered protocol family 1 [ 3.208947] pci 0000:05:00.0: Boot video device [ 3.208999] Simple Boot Flag at 0x7a set to 0x1 [ 3.209384] Scanning for low memory corruption every 60 seconds [ 3.209491] audit: initializing netlink socket (disabled) [ 3.209498] type=2000 audit(1280430360.030:1): initialized [ 3.218009] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 3.219154] VFS: Disk quotas dquot_6.5.2 [ 3.219197] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 3.219680] fuse init (API version 7.13) [ 3.219739] msgmni has been set to 32768 [ 3.220065] alg: No test for stdrng (krng) [ 3.220106] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 3.220108] io scheduler noop registered [ 3.220110] io scheduler anticipatory registered [ 3.220111] io scheduler deadline registered [ 3.220140] io scheduler cfq registered (default) [ 3.220264] alloc irq_desc for 72 on node -1 [ 3.220265] alloc kstat_irqs on node -1 [ 3.220273] pcieport 0000:00:01.0: irq 72 for MSI/MSI-X [ 3.220278] pcieport 0000:00:01.0: setting latency timer to 64 [ 3.220366] alloc irq_desc for 73 on node -1 [ 3.220367] alloc kstat_irqs on node -1 [ 3.220372] pcieport 0000:00:03.0: irq 73 for MSI/MSI-X [ 3.220377] pcieport 0000:00:03.0: setting latency timer to 64 [ 3.220459] alloc irq_desc for 74 on node -1 [ 3.220460] alloc kstat_irqs on node -1 [ 3.220464] pcieport 0000:00:07.0: irq 74 for MSI/MSI-X [ 3.220469] pcieport 0000:00:07.0: setting latency timer to 64 [ 3.220550] alloc irq_desc for 75 on node -1 [ 3.220551] alloc kstat_irqs on node -1 [ 3.220556] pcieport 0000:00:1c.0: irq 75 for MSI/MSI-X [ 3.220562] pcieport 0000:00:1c.0: setting latency timer to 64 [ 3.220643] alloc irq_desc for 76 on node -1 [ 3.220644] alloc kstat_irqs on node -1 [ 3.220649] pcieport 0000:00:1c.5: irq 76 for MSI/MSI-X [ 3.220655] pcieport 0000:00:1c.5: setting latency timer to 64 [ 3.220854] alloc irq_desc for 77 on node -1 [ 3.220855] alloc kstat_irqs on node -1 [ 3.220860] pcieport 0000:20:03.0: irq 77 for MSI/MSI-X [ 3.220866] pcieport 0000:20:03.0: setting latency timer to 64 [ 3.220963] alloc irq_desc for 78 on node -1 [ 3.220964] alloc kstat_irqs on node -1 [ 3.220969] pcieport 0000:20:07.0: irq 78 for MSI/MSI-X [ 3.220975] pcieport 0000:20:07.0: setting latency timer to 64 [ 3.221070] alloc irq_desc for 79 on node -1 [ 3.221071] alloc kstat_irqs on node -1 [ 3.221076] pcieport 0000:20:09.0: irq 79 for MSI/MSI-X [ 3.221082] pcieport 0000:20:09.0: setting latency timer to 64 [ 3.221145] aer 0000:00:01.0:pcie02: AER service couldn't init device: no _OSC support [ 3.221150] aer 0000:00:03.0:pcie02: AER service couldn't init device: no _OSC support [ 3.221153] aer 0000:00:07.0:pcie02: AER service couldn't init device: no _OSC support [ 3.221158] aer 0000:20:03.0:pcie02: AER service couldn't init device: no _OSC support [ 3.221161] aer 0000:20:07.0:pcie02: AER service couldn't init device: no _OSC support [ 3.221165] aer 0000:20:09.0:pcie02: AER service couldn't init device: no _OSC support [ 3.221170] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 3.221185] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 3.221252] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 3.221258] ACPI: Power Button [VBTN] [ 3.221290] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 [ 3.221291] ACPI: Power Button [PWRF] [ 3.222647] Monitor-Mwait will be used to enter C-1 state [ 3.222680] Monitor-Mwait will be used to enter C-2 state [ 3.222720] Monitor-Mwait will be used to enter C-3 state [ 3.222759] processor LNXCPU:00: registered as cooling_device0 [ 3.223150] processor LNXCPU:01: registered as cooling_device1 [ 3.223550] processor LNXCPU:02: registered as cooling_device2 [ 3.223952] processor LNXCPU:03: registered as cooling_device3 [ 3.224332] processor LNXCPU:04: registered as cooling_device4 [ 3.224694] processor LNXCPU:05: registered as cooling_device5 [ 3.225075] processor LNXCPU:06: registered as cooling_device6 [ 3.225460] processor LNXCPU:07: registered as cooling_device7 [ 3.309871] Linux agpgart interface v0.103 [ 3.309892] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 3.309984] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 3.310223] 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 3.311044] brd: module loaded [ 3.311411] loop: module loaded [ 3.311465] input: Macintosh mouse button emulation as /devices/virtual/input/input2 [ 3.311717] Fixed MDIO Bus: probed [ 3.311737] PPP generic driver version 2.4.2 [ 3.311757] tun: Universal TUN/TAP device driver, 1.6 [ 3.311758] tun: (C) 1999-2004 Max Krasnyansky [ 3.311804] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 3.311824] alloc irq_desc for 22 on node -1 [ 3.311825] alloc kstat_irqs on node -1 [ 3.311829] ehci_hcd 0000:00:1a.7: PCI INT C -> GSI 22 (level, low) -> IRQ 22 [ 3.311843] ehci_hcd 0000:00:1a.7: setting latency timer to 64 [ 3.311845] ehci_hcd 0000:00:1a.7: EHCI Host Controller [ 3.311869] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 1 [ 3.311892] ehci_hcd 0000:00:1a.7: debug port 1 [ 3.315774] ehci_hcd 0000:00:1a.7: cache line size of 32 is not supported [ 3.315786] ehci_hcd 0000:00:1a.7: irq 22, io mem 0xf7ffa000 [ 3.330559] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00 [ 3.330648] usb usb1: configuration #1 chosen from 1 choice [ 3.330667] hub 1-0:1.0: USB hub found [ 3.330672] hub 1-0:1.0: 6 ports detected [ 3.330713] alloc irq_desc for 23 on node -1 [ 3.330715] alloc kstat_irqs on node -1 [ 3.330718] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 3.330727] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 3.330730] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 3.330753] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 2 [ 3.330773] ehci_hcd 0000:00:1d.7: debug port 1 [ 3.334647] ehci_hcd 0000:00:1d.7: cache line size of 32 is not supported [ 3.334656] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xff980000 [ 3.350501] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 3.350571] usb usb2: configuration #1 chosen from 1 choice [ 3.350596] hub 2-0:1.0: USB hub found [ 3.350600] hub 2-0:1.0: 6 ports detected [ 3.350641] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 3.350650] uhci_hcd: USB Universal Host Controller Interface driver [ 3.350668] uhci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 3.350672] uhci_hcd 0000:00:1a.0: setting latency timer to 64 [ 3.350675] uhci_hcd 0000:00:1a.0: UHCI Host Controller [ 3.350694] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 3 [ 3.350726] uhci_hcd 0000:00:1a.0: irq 16, io base 0x00001f20 [ 3.350788] usb usb3: configuration #1 chosen from 1 choice [ 3.350804] hub 3-0:1.0: USB hub found [ 3.350808] hub 3-0:1.0: 2 ports detected [ 3.350837] uhci_hcd 0000:00:1a.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 3.350842] uhci_hcd 0000:00:1a.1: setting latency timer to 64 [ 3.350844] uhci_hcd 0000:00:1a.1: UHCI Host Controller [ 3.350866] uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 4 [ 3.350892] uhci_hcd 0000:00:1a.1: irq 17, io base 0x00001f00 [ 3.350950] usb usb4: configuration #1 chosen from 1 choice [ 3.350968] hub 4-0:1.0: USB hub found [ 3.350972] hub 4-0:1.0: 2 ports detected [ 3.351001] uhci_hcd 0000:00:1a.2: PCI INT C -> GSI 22 (level, low) -> IRQ 22 [ 3.351005] uhci_hcd 0000:00:1a.2: setting latency timer to 64 [ 3.351007] uhci_hcd 0000:00:1a.2: UHCI Host Controller [ 3.351026] uhci_hcd 0000:00:1a.2: new USB bus registered, assigned bus number 5 [ 3.351046] uhci_hcd 0000:00:1a.2: irq 22, io base 0x00001c00 [ 3.351102] usb usb5: configuration #1 chosen from 1 choice [ 3.351117] hub 5-0:1.0: USB hub found [ 3.351121] hub 5-0:1.0: 2 ports detected [ 3.351152] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 3.351156] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 3.351159] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 3.351187] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 6 [ 3.351207] uhci_hcd 0000:00:1d.0: irq 23, io base 0x00001f80 [ 3.351266] usb usb6: configuration #1 chosen from 1 choice [ 3.351282] hub 6-0:1.0: USB hub found [ 3.351286] hub 6-0:1.0: 2 ports detected [ 3.351317] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 3.351321] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 3.351324] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 3.351344] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 7 [ 3.351364] uhci_hcd 0000:00:1d.1: irq 17, io base 0x00001f60 [ 3.351420] usb usb7: configuration #1 chosen from 1 choice [ 3.351435] hub 7-0:1.0: USB hub found [ 3.351439] hub 7-0:1.0: 2 ports detected [ 3.351472] alloc irq_desc for 18 on node -1 [ 3.351474] alloc kstat_irqs on node -1 [ 3.351477] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 3.351481] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 3.351483] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 3.351502] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 8 [ 3.351533] uhci_hcd 0000:00:1d.2: irq 18, io base 0x00001f40 [ 3.351589] usb usb8: configuration #1 chosen from 1 choice [ 3.351604] hub 8-0:1.0: USB hub found [ 3.351609] hub 8-0:1.0: 2 ports detected [ 3.351667] PNP: PS/2 Controller [PNP0303:KBD] at 0x60,0x64 irq 1 [ 3.351669] PNP: PS/2 appears to have AUX port disabled, if this is incorrect please boot with i8042.nopnp [ 3.352344] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 3.352397] mice: PS/2 mouse device common for all mice [ 3.352460] rtc_cmos 00:05: RTC can wake from S4 [ 3.352485] rtc_cmos 00:05: rtc core: registered rtc_cmos as rtc0 [ 3.352508] rtc0: alarms up to one day, 242 bytes nvram, hpet irqs [ 3.352588] device-mapper: uevent: version 1.0.3 [ 3.352673] device-mapper: ioctl: 4.15.0-ioctl (2009-04-01) initialised: dm-devel@redhat.com [ 3.352883] device-mapper: multipath: version 1.1.0 loaded [ 3.352886] device-mapper: multipath round-robin: version 1.0.0 loaded [ 3.353476] cpuidle: using governor ladder [ 3.353719] cpuidle: using governor menu [ 3.354010] TCP cubic registered [ 3.354100] NET: Registered protocol family 10 [ 3.354609] lo: Disabled Privacy Extensions [ 3.354805] NET: Registered protocol family 17 [ 3.356807] PM: Resume from disk failed. [ 3.356814] registered taskstats version 1 [ 3.357394] Magic number: 2:714:92 [ 3.357692] rtc_cmos 00:05: setting system clock to 2010-07-29 19:06:00 UTC (1280430360) [ 3.357695] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 3.357697] EDD information not available. [ 3.357744] Freeing unused kernel memory: 880k freed [ 3.357933] Write protecting the kernel read-only data: 7696k [ 3.372587] udev: starting version 151 [ 3.386323] tg3.c:v3.102 (September 1, 2009) [ 3.386344] tg3 0000:09:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 3.386352] tg3 0000:09:00.0: setting latency timer to 64 [ 3.388959] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3 [ 3.389061] ahci 0000:00:1f.2: version 3.0 [ 3.389074] alloc irq_desc for 20 on node -1 [ 3.389076] alloc kstat_irqs on node -1 [ 3.389081] ahci 0000:00:1f.2: PCI INT C -> GSI 20 (level, low) -> IRQ 20 [ 3.389123] alloc irq_desc for 80 on node -1 [ 3.389124] alloc kstat_irqs on node -1 [ 3.389131] ahci 0000:00:1f.2: irq 80 for MSI/MSI-X [ 3.389199] ahci 0000:00:1f.2: AHCI 0001.0200 32 slots 6 ports 3 Gbps 0x27 impl SATA mode [ 3.389201] ahci 0000:00:1f.2: flags: 64bit ncq sntf led clo pio ccc ems sxs [ 3.389205] ahci 0000:00:1f.2: setting latency timer to 64 [ 3.397531] ohci1394 0000:0a:0a.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 3.424709] eth0: Tigon3 [partno(BCM95761) rev 5761100] (PCI Express) MAC address b8:ac:6f:3c:10:a2 [ 3.424711] eth0: attached PHY is 5761 (10/100/1000Base-T Ethernet) (WireSpeed[1]) [ 3.424713] eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1] [ 3.424714] eth0: dma_rwctrl[76180000] dma_mask[64-bit] [ 3.439919] scsi0 : ahci [ 3.440186] scsi1 : ahci [ 3.440284] scsi2 : ahci [ 3.440358] scsi3 : ahci [ 3.440405] scsi4 : ahci [ 3.440475] scsi5 : ahci [ 3.440530] ata1: SATA max UDMA/133 abar m2048@0xff970000 port 0xff970100 irq 80 [ 3.440533] ata2: SATA max UDMA/133 abar m2048@0xff970000 port 0xff970180 irq 80 [ 3.440535] ata3: SATA max UDMA/133 abar m2048@0xff970000 port 0xff970200 irq 80 [ 3.440536] ata4: DUMMY [ 3.440537] ata5: DUMMY [ 3.440539] ata6: SATA max UDMA/133 abar m2048@0xff970000 port 0xff970380 irq 80 [ 3.450858] ohci1394: fw-host0: OHCI-1394 1.1 (PCI): IRQ=[18] MMIO=[f0bfb000-f0bfb7ff] Max Packet=[2048] IR/IT contexts=[4/8] [ 3.788869] ata2: SATA link down (SStatus 4 SControl 300) [ 3.788892] ata6: SATA link down (SStatus 0 SControl 300) [ 3.788912] ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 3.788932] ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 3.791841] ata3.00: ATA-6: ST3120026AS, 8.05, max UDMA/133 [ 3.791845] ata3.00: 234375000 sectors, multi 0: LBA48 [ 3.793012] ata1.00: ATAPI: HL-DT-ST DVD+/-RW GH50N, B103, max UDMA/100, ATAPI AN [ 3.795031] ata3.00: configured for UDMA/133 [ 3.797316] ata1.00: configured for UDMA/100 [ 3.806012] scsi 0:0:0:0: CD-ROM HL-DT-ST DVD+-RW GH50N B103 PQ: 0 ANSI: 5 [ 3.827018] sr0: scsi3-mmc drive: 48x/48x writer dvd-ram cd/rw xa/form2 cdda tray [ 3.827022] Uniform CD-ROM driver Revision: 3.20 [ 3.827131] sr 0:0:0:0: Attached scsi CD-ROM sr0 [ 3.827187] sr 0:0:0:0: Attached scsi generic sg0 type 5 [ 3.827431] scsi 2:0:0:0: Direct-Access ATA ST3120026AS 8.05 PQ: 0 ANSI: 5 [ 3.827523] sd 2:0:0:0: Attached scsi generic sg1 type 0 [ 3.827613] sd 2:0:0:0: [sda] 234375000 512-byte logical blocks: (120 GB/111 GiB) [ 3.827660] sd 2:0:0:0: [sda] Write Protect is off [ 3.827663] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 3.827686] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 3.827786] sda: sda1 sda2 < sda5 > [ 3.867986] sd 2:0:0:0: [sda] Attached SCSI disk [ 3.889194] usb 8-2: new low speed USB device using uhci_hcd and address 2 [ 4.072874] usb 8-2: configuration #1 chosen from 1 choice [ 4.092391] usbcore: registered new interface driver hiddev [ 4.105877] input: Kingsis Peripherals Evoluent VerticalMouse 3 as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/input/input4 [ 4.105928] generic-usb 0003:1A7C:0068.0001: input,hidraw0: USB HID v1.10 Mouse [Kingsis Peripherals Evoluent VerticalMouse 3 ] on usb-0000:00:1d.2-2/input0 [ 4.105946] usbcore: registered new interface driver usbhid [ 4.105948] usbhid: v2.6:USB HID core driver [ 4.137922] EXT4-fs (sda1): INFO: recovery required on readonly filesystem [ 4.137924] EXT4-fs (sda1): write access will be enabled during recovery [ 4.226915] EXT4-fs (sda1): recovery complete [ 4.227563] EXT4-fs (sda1): mounted filesystem with ordered data mode [ 4.770418] ieee1394: Host added: ID:BUS[0-00:1023] GUID[806facb8a2103c00] [ 10.731418] udev: starting version 151 [ 10.739720] lp: driver loaded but no devices found [ 10.751290] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 [ 10.758991] dcdbas dcdbas: Dell Systems Management Base Driver (version 5.6.0-3.2) [ 10.759465] input: Dell WMI hotkeys as /devices/virtual/input/input5 [ 10.770836] parport_pc 00:07: reported by Plug and Play ACPI [ 10.770896] parport0: PC-style at 0x378 (0x778), irq 7, using FIFO [PCSPP,TRISTATE,COMPAT,ECP] [ 10.775455] ppdev: user-space parallel port driver [ 10.784136] Adding 4804600k swap on /dev/sda5. Priority:-1 extents:1 across:4804600k [ 10.814640] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 10.814897] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 10.838403] type=1505 audit(1280430367.992:2): operation="profile_load" pid=641 name="/sbin/dhclient3" [ 10.838768] type=1505 audit(1280430367.992:3): operation="profile_load" pid=641 name="/usr/lib/NetworkManager/nm-dhcp-client.action" [ 10.838961] type=1505 audit(1280430367.992:4): operation="profile_load" pid=641 name="/usr/lib/connman/scripts/dhclient-script" [ 10.851288] lp0: using parport0 (interrupt-driven). [ 10.865631] [drm] Initialized drm 1.1.0 20060810 [ 10.883820] alloc irq_desc for 24 on node -1 [ 10.883823] alloc kstat_irqs on node -1 [ 10.883829] nouveau 0000:05:00.0: PCI INT A -> GSI 24 (level, low) -> IRQ 24 [ 10.883834] nouveau 0000:05:00.0: setting latency timer to 64 [ 10.885018] vga16fb: initializing [ 10.885020] vga16fb: mapped to 0xffff8800000a0000 [ 10.885054] fb0: VGA16 VGA frame buffer device [ 10.886131] [drm] nouveau 0000:05:00.0: Detected an NV50 generation card (0x298c00a2) [ 10.886781] [drm] nouveau 0000:05:00.0: Attempting to load BIOS image from PRAMIN [ 10.951073] BUG: unable to handle kernel NULL pointer dereference at (null) [ 10.951076] IP: [] __mutex_lock_slowpath+0xbb/0x170 [ 10.951083] PGD 609c90067 PUD 6097fd067 PMD 0 [ 10.951085] Oops: 0002 [#1] SMP [ 10.951086] last sysfs file: /sys/module/fbcon/initstate [ 10.951088] CPU 1 [ 10.951089] Modules linked in: fbcon(+) tileblit font bitblit softcursor vga16fb vgastate nouveau(+) ttm drm_kms_helper mce_xeon75xx(-) drm i2c_algo_bit snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq ppdev snd_timer snd_seq_device parport_pc snd dell_wmi dcdbas soundcore snd_page_alloc shpchp lp parport usbhid hid ohci1394 ieee1394 ahci tg3 [ 10.951104] Pid: 405, comm: plymouthd Not tainted 2.6.32-24-generic #38-Ubuntu Precision WorkStation T7500 [ 10.951105] RIP: 0010:[] [] __mutex_lock_slowpath+0xbb/0x170 [ 10.951108] RSP: 0018:ffff8806082ddd98 EFLAGS: 00010246 [ 10.951109] RAX: 0000000000000000 RBX: ffff880609d23c08 RCX: 0000000000000006 [ 10.951110] RDX: ffff8806082ddda8 RSI: ffffffffa01b3d10 RDI: ffff880609d23c0c [ 10.951111] RBP: ffff8806082dddf8 R08: 0000000000000195 R09: 000000000000e200 [ 10.951113] R10: fffffffffffffff0 R11: 0000000000000246 R12: ffff8806089e44d0 [ 10.951114] R13: ffff880609d23c0c R14: ffffffffffffffff R15: ffff880609d23c10 [ 10.951116] FS: 00007f4dd6e70700(0000) GS:ffff88003e220000(0000) knlGS:0000000000000000 [ 10.951117] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 10.951118] CR2: 0000000000000000 CR3: 00000006097d6000 CR4: 00000000000006e0 [ 10.951119] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 10.951120] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 10.951122] Process plymouthd (pid: 405, threadinfo ffff8806082dc000, task ffff8806089e44d0) [ 10.951123] Stack: [ 10.951124] ffff880600000001 ffff8806082ddfd8 ffff880609d23c10 0000000000000000 [ 10.951125] <0> 0000000000000000 ffffffffa01b3d10 ffff8806082dddd8 ffff880609d23c08 [ 10.951127] <0> ffff8806018bbe00 ffff880609d23c08 ffff880609d23b10 ffff8806018bbea8 [ 10.951129] Call Trace: [ 10.951140] [] ? drm_gem_object_release_handle+0x0/0x40 [drm] [ 10.951142] [] mutex_lock+0x2b/0x50 [ 10.951150] [] drm_fb_release+0x2f/0xd0 [drm] [ 10.951155] [] drm_release+0x448/0x510 [drm] [ 10.951159] [] __fput+0xf5/0x210 [ 10.951161] [] fput+0x25/0x30 [ 10.951163] [] filp_close+0x5d/0x90 [ 10.951165] [] sys_close+0xb7/0x120 [ 10.951168] [] system_call_fastpath+0x16/0x1b [ 10.951169] Code: 4c 8d 6b 04 4c 8d 7b 08 49 c7 c6 ff ff ff ff 4c 89 ef e8 29 15 00 00 48 8b 43 10 48 8d 55 b0 48 89 53 10 4c 89 7d b0 48 89 45 b8 <48> 89 10 4c 89 f0 4c 89 65 c0 87 03 83 f8 01 75 23 eb 2b 66 90 [ 10.951182] RIP [] __mutex_lock_slowpath+0xbb/0x170 [ 10.951184] RSP [ 10.951184] CR2: 0000000000000000 [ 10.951186] ---[ end trace 7fe1c65a8e5c3a7c ]--- [ 10.967483] [drm] nouveau 0000:05:00.0: ... appears to be valid [ 10.967485] [drm] nouveau 0000:05:00.0: BIT BIOS found [ 10.967486] [drm] nouveau 0000:05:00.0: Bios version 62.98.6f.00 [ 10.967488] [drm] nouveau 0000:05:00.0: TMDS table revision 2.0 not currently supported [ 10.967489] [drm] nouveau 0000:05:00.0: Found Display Configuration Block version 4.0 [ 10.967491] [drm] nouveau 0000:05:00.0: DCB connector table: VHER 0x40 5 16 4 [ 10.967493] [drm] nouveau 0000:05:00.0: 0: 0x00005046: type 0x46 idx 0 tag 0x07 [ 10.967494] [drm] nouveau 0000:05:00.0: 1: 0x00006146: type 0x46 idx 1 tag 0x08 [ 10.967496] [drm] nouveau 0000:05:00.0: Raw DCB entry 0: 02000386 0f220010 [ 10.967497] [drm] nouveau 0000:05:00.0: Raw DCB entry 1: 02000302 00020010 [ 10.967498] [drm] nouveau 0000:05:00.0: Raw DCB entry 2: 040113a6 0f220010 [ 10.967499] [drm] nouveau 0000:05:00.0: Raw DCB entry 3: 04011312 00020010 [ 10.967506] [drm] nouveau 0000:05:00.0: Parsing VBIOS init table 0 at offset 0xDAF1 [ 11.061382] [drm] nouveau 0000:05:00.0: Parsing VBIOS init table 1 at offset 0xDEF6 [ 11.101387] Console: switching to colour frame buffer device 80x30 [ 11.121115] [drm] nouveau 0000:05:00.0: Parsing VBIOS init table 2 at offset 0xE6C8 [ 11.128326] [drm] nouveau 0000:05:00.0: Parsing VBIOS init table 3 at offset 0xE796 [ 11.151129] [drm] nouveau 0000:05:00.0: Parsing VBIOS init table 4 at offset 0xEA4C [ 11.162669] [drm] nouveau 0000:05:00.0: Parsing VBIOS init table at offset 0xEAB1 [ 11.200939] [drm] nouveau 0000:05:00.0: 0xEAB1: Condition still not met after 20ms, skipping following opcodes [ 11.200947] [drm] nouveau 0000:05:00.0: 0xCBF2: parsing output script 0 [ 11.200948] [drm] nouveau 0000:05:00.0: 0xC926: parsing output script 0 [ 11.200952] [drm] nouveau 0000:05:00.0: 0xCBF2: parsing output script 0 [ 11.200953] [drm] nouveau 0000:05:00.0: 0xC926: parsing output script 0 [ 11.274982] input: HDA Digital PCBeep as /devices/pci0000:00/0000:00:1b.0/input/input6 [ 11.310048] [TTM] Zone kernel: Available graphics memory: 12368770 kiB. [ 11.310050] [TTM] Zone dma32: Available graphics memory: 2097152 kiB. [ 11.310060] [drm] nouveau 0000:05:00.0: 256 MiB VRAM [ 11.384860] [drm] nouveau 0000:05:00.0: 512 MiB GART (aperture) [ 11.401737] [drm] nouveau 0000:05:00.0: Allocating FIFO number 1 [ 11.431574] [drm] nouveau 0000:05:00.0: nouveau_channel_alloc: initialised FIFO 1 [ 11.460080] [drm] nouveau 0000:05:00.0: Detected a DP output [ 11.473291] [drm] nouveau 0000:05:00.0: Detected a TMDS output [ 11.486095] [drm] nouveau 0000:05:00.0: Detected a DP output [ 11.486097] [drm] nouveau 0000:05:00.0: Detected a TMDS output [ 11.486099] [drm] nouveau 0000:05:00.0: Detected a DisplayPort connector [ 11.486149] [drm] nouveau 0000:05:00.0: Detected a DisplayPort connector [ 11.583969] type=1505 audit(1280430368.742:5): operation="profile_load" pid=910 name="/usr/share/gdm/guest-session/Xsession" [ 11.616522] [drm] nouveau 0000:05:00.0: allocated 1920x1200 fb: 0x40250000, bo ffff880608a9ce00 [ 11.617730] type=1505 audit(1280430368.772:6): operation="profile_replace" pid=916 name="/sbin/dhclient3" [ 11.618606] type=1505 audit(1280430368.772:7): operation="profile_replace" pid=916 name="/usr/lib/NetworkManager/nm-dhcp-client.action" [ 11.618813] type=1505 audit(1280430368.772:8): operation="profile_replace" pid=916 name="/usr/lib/connman/scripts/dhclient-script" [ 11.620646] type=1505 audit(1280430368.782:9): operation="profile_load" pid=922 name="/usr/bin/evince" [ 11.625305] type=1505 audit(1280430368.782:10): operation="profile_load" pid=922 name="/usr/bin/evince-previewer" [ 11.628226] type=1505 audit(1280430368.782:11): operation="profile_load" pid=922 name="/usr/bin/evince-thumbnailer" [ 11.759930] fb1: nouveaufb frame buffer device [ 11.759931] registered panic notifier [ 11.759937] [drm] Initialized nouveau 0.0.15 20090420 for 0000:05:00.0 on minor 0 [ 11.759975] alloc irq_desc for 35 on node -1 [ 11.759976] alloc kstat_irqs on node -1 [ 11.759982] nouveau 0000:06:00.0: PCI INT A -> GSI 35 (level, low) -> IRQ 35 [ 11.759986] nouveau 0000:06:00.0: setting latency timer to 64 [ 11.761072] alloc irq_desc for 81 on node -1 [ 11.761073] alloc kstat_irqs on node -1 [ 11.761088] tg3 0000:09:00.0: irq 81 for MSI/MSI-X [ 11.789340] [drm] nouveau 0000:06:00.0: Detected an NV50 generation card (0x298c00a2) [ 11.789981] [drm] nouveau 0000:06:00.0: Attempting to load BIOS image from PRAMIN [ 11.789988] [drm] nouveau 0000:06:00.0: ... BIOS signature not found [ 11.789989] [drm] nouveau 0000:06:00.0: Attempting to load BIOS image from PROM [ 11.840851] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 11.977256] [drm] nouveau 0000:06:00.0: ... appears to be valid [ 11.977259] [drm] nouveau 0000:06:00.0: BIT BIOS found [ 11.977260] [drm] nouveau 0000:06:00.0: Bios version 62.98.6f.00 [ 11.977263] [drm] nouveau 0000:06:00.0: TMDS table revision 2.0 not currently supported [ 11.977264] [drm] nouveau 0000:06:00.0: Found Display Configuration Block version 4.0 [ 11.977266] [drm] nouveau 0000:06:00.0: DCB connector table: VHER 0x40 5 16 4 [ 11.977268] [drm] nouveau 0000:06:00.0: 0: 0x00005046: type 0x46 idx 0 tag 0x07 [ 11.977270] [drm] nouveau 0000:06:00.0: 1: 0x00006146: type 0x46 idx 1 tag 0x08 [ 11.977271] [drm] nouveau 0000:06:00.0: Raw DCB entry 0: 02000386 0f220010 [ 11.977273] [drm] nouveau 0000:06:00.0: Raw DCB entry 1: 02000302 00020010 [ 11.977274] [drm] nouveau 0000:06:00.0: Raw DCB entry 2: 040113a6 0f220010 [ 11.977275] [drm] nouveau 0000:06:00.0: Raw DCB entry 3: 04011312 00020010 [ 11.977284] [drm] nouveau 0000:06:00.0: Adaptor not initialised [ 11.977285] [drm] nouveau 0000:06:00.0: Running VBIOS init tables [ 11.977291] [drm] nouveau 0000:06:00.0: Parsing VBIOS init table 0 at offset 0xDAF1 [ 12.068899] [drm] nouveau 0000:06:00.0: Parsing VBIOS init table 1 at offset 0xDEF6 [ 12.128622] [drm] nouveau 0000:06:00.0: Parsing VBIOS init table 2 at offset 0xE6C8 [ 12.128658] [drm] nouveau 0000:06:00.0: Parsing VBIOS init table 3 at offset 0xE796 [ 12.148673] [drm] nouveau 0000:06:00.0: Parsing VBIOS init table 4 at offset 0xEA4C [ 12.148677] [drm] nouveau 0000:06:00.0: Parsing VBIOS init table at offset 0xEAB1 [ 12.178498] [drm] nouveau 0000:06:00.0: 0xCBF2: parsing output script 0 [ 12.178501] [drm] nouveau 0000:06:00.0: 0xC926: parsing output script 0 [ 12.178525] [drm] nouveau 0000:06:00.0: 0xCBF2: parsing output script 0 [ 12.178527] [drm] nouveau 0000:06:00.0: 0xC926: parsing output script 0 [ 12.286040] [drm] nouveau 0000:06:00.0: 256 MiB VRAM [ 12.477142] [drm] nouveau 0000:06:00.0: 512 MiB GART (aperture) [ 12.705271] [drm] nouveau 0000:06:00.0: Allocating FIFO number 1 [ 12.756181] [drm] nouveau 0000:06:00.0: nouveau_channel_alloc: initialised FIFO 1 [ 12.792472] [drm] nouveau 0000:06:00.0: Detected a DP output [ 12.792474] [drm] nouveau 0000:06:00.0: Detected a TMDS output [ 12.792476] [drm] nouveau 0000:06:00.0: Detected a DP output [ 12.792478] [drm] nouveau 0000:06:00.0: Detected a TMDS output [ 12.792485] [drm] nouveau 0000:06:00.0: Detected a DisplayPort connector [ 12.792539] [drm] nouveau 0000:06:00.0: Detected a DisplayPort connector [ 12.804668] No connectors reported connected with modes [ 12.804673] [drm] Initialized nouveau 0.0.15 20090420 for 0000:06:00.0 on minor 1 [ 13.131417] CPU0 attaching NULL sched-domain. [ 13.131422] CPU1 attaching NULL sched-domain. [ 13.131424] CPU2 attaching NULL sched-domain. [ 13.131425] CPU3 attaching NULL sched-domain. [ 13.131427] CPU4 attaching NULL sched-domain. [ 13.131428] CPU5 attaching NULL sched-domain. [ 13.131430] CPU6 attaching NULL sched-domain. [ 13.131431] CPU7 attaching NULL sched-domain. [ 13.275480] CPU0 attaching sched-domain: [ 13.275483] domain 0: span 0-3 level MC [ 13.275484] groups: 0 1 2 3 [ 13.275487] domain 1: span 0-7 level CPU [ 13.275489] groups: 0-3 (cpu_power = 4096) 4-7 (cpu_power = 4096) [ 13.275494] CPU1 attaching sched-domain: [ 13.275495] domain 0: span 0-3 level MC [ 13.275496] groups: 1 2 3 0 [ 13.275499] domain 1: span 0-7 level CPU [ 13.275500] groups: 0-3 (cpu_power = 4096) 4-7 (cpu_power = 4096) [ 13.275504] CPU2 attaching sched-domain: [ 13.275505] domain 0: span 0-3 level MC [ 13.275506] groups: 2 3 0 1 [ 13.275509] domain 1: span 0-7 level CPU [ 13.275510] groups: 0-3 (cpu_power = 4096) 4-7 (cpu_power = 4096) [ 13.275514] CPU3 attaching sched-domain: [ 13.275515] domain 0: span 0-3 level MC [ 13.275516] groups: 3 0 1 2 [ 13.275519] domain 1: span 0-7 level CPU [ 13.275521] groups: 0-3 (cpu_power = 4096) 4-7 (cpu_power = 4096) [ 13.275524] CPU4 attaching sched-domain: [ 13.275525] domain 0: span 4-7 level MC [ 13.275527] groups: 4 5 6 7 [ 13.275529] domain 1: span 0-7 level CPU [ 13.275531] groups: 4-7 (cpu_power = 4096) 0-3 (cpu_power = 4096) [ 13.275535] CPU5 attaching sched-domain: [ 13.275536] domain 0: span 4-7 level MC [ 13.275537] groups: 5 6 7 4 [ 13.275540] domain 1: span 0-7 level CPU [ 13.275541] groups: 4-7 (cpu_power = 4096) 0-3 (cpu_power = 4096) [ 13.275545] CPU6 attaching sched-domain: [ 13.275546] domain 0: span 4-7 level MC [ 13.275548] groups: 6 7 4 5 [ 13.275551] domain 1: span 0-7 level CPU [ 13.275552] groups: 4-7 (cpu_power = 4096) 0-3 (cpu_power = 4096) [ 13.275556] CPU7 attaching sched-domain: [ 13.275557] domain 0: span 4-7 level MC [ 13.275558] groups: 7 4 5 6 [ 13.275561] domain 1: span 0-7 level CPU [ 13.275562] groups: 4-7 (cpu_power = 4096) 0-3 (cpu_power = 4096) [ 13.276115] CPU0 attaching NULL sched-domain. [ 13.276117] CPU1 attaching NULL sched-domain. [ 13.276119] CPU2 attaching NULL sched-domain. [ 13.276120] CPU3 attaching NULL sched-domain. [ 13.276121] CPU4 attaching NULL sched-domain. [ 13.276123] CPU5 attaching NULL sched-domain. [ 13.276124] CPU6 attaching NULL sched-domain. [ 13.276126] CPU7 attaching NULL sched-domain. [ 13.421174] tg3: eth0: Link is up at 100 Mbps, full duplex. [ 13.421175] tg3: eth0: Flow control is on for TX and on for RX. [ 13.422210] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ 13.454991] CPU0 attaching sched-domain: [ 13.471733] domain 0: span 0-3 level MC [ 13.471735] groups: 0 1 2 3 [ 13.471737] domain 1: span 0-7 level CPU [ 13.471738] groups: 0-3 (cpu_power = 4096) 4-7 (cpu_power = 4096) [ 13.471742] CPU1 attaching sched-domain: [ 13.471743] domain 0: span 0-3 level MC [ 13.471744] groups: 1 2 3 0 [ 13.471746] domain 1: span 0-7 level CPU [ 13.471747] groups: 0-3 (cpu_power = 4096) 4-7 (cpu_power = 4096) [ 13.471750] CPU2 attaching sched-domain: [ 13.471751] domain 0: span 0-3 level MC [ 13.471752] groups: 2 3 0 1 [ 13.471754] domain 1: span 0-7 level CPU [ 13.471755] groups: 0-3 (cpu_power = 4096) 4-7 (cpu_power = 4096) [ 13.471758] CPU3 attaching sched-domain: [ 13.471759] domain 0: span 0-3 level MC [ 13.471760] groups: 3 0 1 2 [ 13.471762] domain 1: span 0-7 level CPU [ 13.471763] groups: 0-3 (cpu_power = 4096) 4-7 (cpu_power = 4096) [ 13.471766] CPU4 attaching sched-domain: [ 13.471767] domain 0: span 4-7 level MC [ 13.471768] groups: 4 5 6 7 [ 13.471770] domain 1: span 0-7 level CPU [ 13.471771] groups: 4-7 (cpu_power = 4096) 0-3 (cpu_power = 4096) [ 13.471780] CPU5 attaching sched-domain: [ 13.471783] domain 0: span 4-7 level MC [ 13.471787] groups: 5 6 7 4 [ 13.471794] domain 1: span 0-7 level CPU [ 13.471798] groups: 4-7 (cpu_power = 4096) 0-3 (cpu_power = 4096) [ 13.471807] CPU6 attaching sched-domain: [ 13.471810] domain 0: span 4-7 level MC [ 13.471814] groups: 6 7 4 5 [ 13.471821] domain 1: span 0-7 level CPU [ 13.471824] groups: 4-7 (cpu_power = 4096) 0-3 (cpu_power = 4096) [ 13.471834] CPU7 attaching sched-domain: [ 13.471837] domain 0: span 4-7 level MC [ 13.471840] groups: 7 4 5 6 [ 13.471847] domain 1: span 0-7 level CPU [ 13.471852] groups: 4-7 (cpu_power = 4096) 0-3 (cpu_power = 4096) [ 23.506771] eth0: no IPv6 routers present Bug: 617639 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-15-generic (buildd@vernadsky) (gcc version 4.4.5 20100728 (prerelease) (Ubuntu/Linaro 4.4.4-8ubuntu1) ) #21-Ubuntu SMP Wed Aug 11 16:41:40 UTC 2010 (Ubuntu 2.6.35-15.21-generic 2.6.35.1) [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) [ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 000000006fb8f000 (usable) [ 0.000000] BIOS-e820: 000000006fb8f000 - 000000006fc3c000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000006fc3c000 - 000000006fd70000 (usable) [ 0.000000] BIOS-e820: 000000006fd70000 - 000000006fdbf000 (reserved) [ 0.000000] BIOS-e820: 000000006fdbf000 - 000000006fe58000 (usable) [ 0.000000] BIOS-e820: 000000006fe58000 - 000000006febf000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000006febf000 - 000000006feed000 (usable) [ 0.000000] BIOS-e820: 000000006feed000 - 000000006feff000 (ACPI data) [ 0.000000] BIOS-e820: 000000006feff000 - 000000006ff00000 (usable) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000e4000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000fff00000 - 0000000100000000 (reserved) [ 0.000000] Notice: NX (Execute Disable) protection cannot be enabled: non-PAE kernel! [ 0.000000] DMI 2.4 present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] last_pfn = 0x6ff00 max_arch_pfn = 0x100000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-through [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 00FFF00000 mask FFFFF00000 write-protect [ 0.000000] 1 base 0000000000 mask FFC0000000 write-back [ 0.000000] 2 base 0040000000 mask FFE0000000 write-back [ 0.000000] 3 base 0060000000 mask FFF0000000 write-back [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820 update range: 0000000000002000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000001000 (reserved) [ 0.000000] modified: 0000000000001000 - 0000000000002000 (usable) [ 0.000000] modified: 0000000000002000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009fc00 (usable) [ 0.000000] modified: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 000000006fb8f000 (usable) [ 0.000000] modified: 000000006fb8f000 - 000000006fc3c000 (ACPI NVS) [ 0.000000] modified: 000000006fc3c000 - 000000006fd70000 (usable) [ 0.000000] modified: 000000006fd70000 - 000000006fdbf000 (reserved) [ 0.000000] modified: 000000006fdbf000 - 000000006fe58000 (usable) [ 0.000000] modified: 000000006fe58000 - 000000006febf000 (ACPI NVS) [ 0.000000] modified: 000000006febf000 - 000000006feed000 (usable) [ 0.000000] modified: 000000006feed000 - 000000006feff000 (ACPI data) [ 0.000000] modified: 000000006feff000 - 000000006ff00000 (usable) [ 0.000000] modified: 00000000e0000000 - 00000000e4000000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000fff00000 - 0000000100000000 (reserved) [ 0.000000] initial memory mapped : 0 - 00c00000 [ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000 [ 0.000000] 0000000000 - 0000400000 page 4k [ 0.000000] 0000400000 - 0037400000 page 2M [ 0.000000] 0037400000 - 00377fe000 page 4k [ 0.000000] kernel direct mapping tables up to 377fe000 @ 15000-1a000 [ 0.000000] RAMDISK: 375ae000 - 37ff0000 [ 0.000000] Allocated new RAMDISK: 009b4000 - 013f56a1 [ 0.000000] Move RAMDISK from 00000000375ae000 - 0000000037fef6a0 to 009b4000 - 013f56a0 [ 0.000000] ACPI: RSDP 000fe020 00024 (v02 HP ) [ 0.000000] ACPI: XSDT 6fefe120 0005C (v01 HPQOEM SLIC-MPC 00000003 01000013) [ 0.000000] ACPI: FACP 6fefd000 000F4 (v04 HP 30F1 00000003 MSFT 0100000D) [ 0.000000] ACPI: DSDT 6fef0000 092A1 (v01 HP 30F1 F0000000 INTL 20051117) [ 0.000000] ACPI: FACS 6fe61000 00040 [ 0.000000] ACPI: HPET 6fefc000 00038 (v01 HP 30F1 00000001 MSFT 000F4240) [ 0.000000] ACPI: APIC 6fefb000 00084 (v02 HP 30F1 00000001 TFSM 000F4240) [ 0.000000] ACPI: MCFG 6fefa000 0003C (v01 HP 30F1 00000001 TFSM 000F4240) [ 0.000000] ACPI: BOOT 6feef000 00028 (v01 HP 30F1 00000001 ? 00000001) [ 0.000000] ACPI: SLIC 6feee000 00176 (v01 HPQOEM SLIC-MPC 06040000 LTP 00000001) [ 0.000000] ACPI: SSDT 6feed000 00386 (v01 AMD PowerNow 00000001 AMD 00000001) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] 903MB HIGHMEM available. [ 0.000000] 887MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 377fe000 [ 0.000000] low ram: 0 - 377fe000 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000001 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x000377fe [ 0.000000] HighMem 0x000377fe -> 0x0006ff00 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[7] active PFN ranges [ 0.000000] 0: 0x00000001 -> 0x00000002 [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x0006fb8f [ 0.000000] 0: 0x0006fc3c -> 0x0006fd70 [ 0.000000] 0: 0x0006fdbf -> 0x0006fe58 [ 0.000000] 0: 0x0006febf -> 0x0006feed [ 0.000000] 0: 0x0006feff -> 0x0006ff00 [ 0.000000] On node 0 totalpages: 458011 [ 0.000000] free_area_init_node: node 0, pgdat c080f680, node_mem_map c13f7020 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3952 pages, LIFO batch:0 [ 0.000000] Normal zone: 1744 pages used for memmap [ 0.000000] Normal zone: 221486 pages, LIFO batch:31 [ 0.000000] HighMem zone: 1807 pages used for memmap [ 0.000000] HighMem zone: 228990 pages, LIFO batch:31 [ 0.000000] Using APIC driver default [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x04] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 4, version 33, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x1002a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 4 CPUs, 2 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [16000 - 167ff] [ 0.000000] PM: Registered nosave memory: 0000000000002000 - 0000000000010000 [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at 6ff00000 (gap: 6ff00000:70100000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:4 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 14 pages/cpu @c2400000 s36352 r0 d20992 u1048576 [ 0.000000] pcpu-alloc: s36352 r0 d20992 u1048576 alloc=1*4194304 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 454428 [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-15-generic root=UUID=f2bd5e8c-6ddb-4763-978e-dba3a5df88cd ro quiet splash nomodeset [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Enabling fast FPU save and restore... done. [ 0.000000] Enabling unmasked SIMD FPU exception support... done. [ 0.000000] Initializing CPU#0 [ 0.000000] allocated 9169900 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Subtract (54 early reservations) [ 0.000000] #1 [0000001000 - 0000002000] EX TRAMPOLINE [ 0.000000] #2 [0000100000 - 00009afb1c] TEXT DATA BSS [ 0.000000] #3 [000009fc00 - 0000100000] BIOS reserved [ 0.000000] #4 [00009b0000 - 00009b318c] BRK [ 0.000000] #5 [0000010000 - 0000011000] TRAMPOLINE [ 0.000000] #6 [0000011000 - 0000015000] ACPI WAKEUP [ 0.000000] #7 [0000015000 - 0000016000] PGTABLE [ 0.000000] #8 [00009b4000 - 00013f6000] NEW RAMDISK [ 0.000000] #9 [00013f6000 - 00013f7000] BOOTMEM [ 0.000000] #10 [00013f7000 - 00021f7000] BOOTMEM [ 0.000000] #11 [00021f7000 - 00021f7004] BOOTMEM [ 0.000000] #12 [00021f7040 - 00021f7100] BOOTMEM [ 0.000000] #13 [00021f7100 - 00021f7154] BOOTMEM [ 0.000000] #14 [00021f7180 - 00021fa180] BOOTMEM [ 0.000000] #15 [00021fa180 - 00021fa1d8] BOOTMEM [ 0.000000] #16 [00021fa200 - 00021fd200] BOOTMEM [ 0.000000] #17 [00021fd200 - 00021fd225] BOOTMEM [ 0.000000] #18 [00021fd240 - 00021fd267] BOOTMEM [ 0.000000] #19 [00021fd280 - 00021fd494] BOOTMEM [ 0.000000] #20 [00021fd4c0 - 00021fd500] BOOTMEM [ 0.000000] #21 [00021fd500 - 00021fd540] BOOTMEM [ 0.000000] #22 [00021fd540 - 00021fd580] BOOTMEM [ 0.000000] #23 [00021fd580 - 00021fd5c0] BOOTMEM [ 0.000000] #24 [00021fd5c0 - 00021fd600] BOOTMEM [ 0.000000] #25 [00021fd600 - 00021fd640] BOOTMEM [ 0.000000] #26 [00021fd640 - 00021fd680] BOOTMEM [ 0.000000] #27 [00021fd680 - 00021fd6c0] BOOTMEM [ 0.000000] #28 [00021fd6c0 - 00021fd700] BOOTMEM [ 0.000000] #29 [00021fd700 - 00021fd740] BOOTMEM [ 0.000000] #30 [00021fd740 - 00021fd780] BOOTMEM [ 0.000000] #31 [00021fd780 - 00021fd7c0] BOOTMEM [ 0.000000] #32 [00021fd7c0 - 00021fd800] BOOTMEM [ 0.000000] #33 [00021fd800 - 00021fd840] BOOTMEM [ 0.000000] #34 [00021fd840 - 00021fd880] BOOTMEM [ 0.000000] #35 [00021fd880 - 00021fd8c0] BOOTMEM [ 0.000000] #36 [00021fd8c0 - 00021fd8d0] BOOTMEM [ 0.000000] #37 [00021fd900 - 00021fd910] BOOTMEM [ 0.000000] #38 [00021fd940 - 00021fd9b4] BOOTMEM [ 0.000000] #39 [00021fd9c0 - 00021fda34] BOOTMEM [ 0.000000] #40 [0002400000 - 000240e000] BOOTMEM [ 0.000000] #41 [0002500000 - 000250e000] BOOTMEM [ 0.000000] #42 [0002600000 - 000260e000] BOOTMEM [ 0.000000] #43 [0002700000 - 000270e000] BOOTMEM [ 0.000000] #44 [00021ffa40 - 00021ffa44] BOOTMEM [ 0.000000] #45 [00021ffa80 - 00021ffa84] BOOTMEM [ 0.000000] #46 [00021ffac0 - 00021ffad0] BOOTMEM [ 0.000000] #47 [00021ffb00 - 00021ffb10] BOOTMEM [ 0.000000] #48 [00021ffb40 - 00021ffbe0] BOOTMEM [ 0.000000] #49 [00021ffc00 - 00021ffc48] BOOTMEM [ 0.000000] #50 [00021ffc80 - 0002203c80] BOOTMEM [ 0.000000] #51 [0002203c80 - 0002283c80] BOOTMEM [ 0.000000] #52 [0002283c80 - 00022c3c80] BOOTMEM [ 0.000000] #53 [000270e000 - 0002fccbec] BOOTMEM [ 0.000000] Initializing HighMem for node 0 (000377fe:0006ff00) [ 0.000000] Memory: 1788264k/1833984k available (4930k kernel code, 43780k reserved, 2397k data, 684k init, 923188k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff16000 - 0xfffff000 ( 932 kB) [ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB) [ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) [ 0.000000] .init : 0xc0828000 - 0xc08d3000 ( 684 kB) [ 0.000000] .data : 0xc05d0aea - 0xc0827fa8 (2397 kB) [ 0.000000] .text : 0xc0100000 - 0xc05d0aea (4930 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=13, HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:2304 nr_irqs:712 [ 0.000000] spurious 8259A interrupt: IRQ7. [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 2099.713 MHz processor. [ 0.008012] Calibrating delay loop (skipped), value calculated using timer frequency.. 4199.42 BogoMIPS (lpj=8398852) [ 0.008026] pid_max: default: 32768 minimum: 301 [ 0.008096] Security Framework initialized [ 0.008139] AppArmor: AppArmor initialized [ 0.008144] Yama: becoming mindful. [ 0.008276] Mount-cache hash table entries: 512 [ 0.008563] Initializing cgroup subsys ns [ 0.008572] Initializing cgroup subsys cpuacct [ 0.008584] Initializing cgroup subsys memory [ 0.008605] Initializing cgroup subsys devices [ 0.008612] Initializing cgroup subsys freezer [ 0.008619] Initializing cgroup subsys net_cls [ 0.008672] CPU: Physical Processor ID: 0 [ 0.008677] CPU: Processor Core ID: 0 [ 0.008685] mce: CPU supports 5 MCE banks [ 0.008713] Performance Events: AMD PMU driver. [ 0.008731] ... version: 0 [ 0.008736] ... bit width: 48 [ 0.008742] ... generic registers: 4 [ 0.008748] ... value mask: 0000ffffffffffff [ 0.008754] ... max period: 00007fffffffffff [ 0.008760] ... fixed-purpose events: 0 [ 0.008766] ... event mask: 000000000000000f [ 0.015371] ACPI: Core revision 20100428 [ 0.036049] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.036069] ftrace: allocating 21729 entries in 43 pages [ 0.040142] Enabling APIC mode: Flat. Using 1 I/O APICs [ 0.040565] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.084295] CPU0: AMD Turion(tm) X2 Dual-Core Mobile RM-72 stepping 01 [ 0.088000] Booting Node 0, Processors #1 [ 0.012000] Initializing CPU#1 [ 0.176000] TSC synchronization [CPU#0 -> CPU#1]: [ 0.176000] Measured 206988779 cycles TSC warp between CPUs, turning off TSC clock. [ 0.176000] Marking TSC unstable due to check_tsc_sync_source failed [ 0.176018] Brought up 2 CPUs [ 0.176024] Total of 2 processors activated (8389.37 BogoMIPS). [ 0.176359] devtmpfs: initialized [ 0.176992] regulator: core version 0.5 [ 0.177041] Time: 22:10:41 Date: 08/13/10 [ 0.177095] NET: Registered protocol family 16 [ 0.177134] Trying to unpack rootfs image as initramfs... [ 0.177261] EISA bus registered [ 0.177306] TOM: 0000000080000000 aka 2048M [ 0.177310] Fam 10h mmconf [e0000000, e0ffffff] [ 0.177328] ACPI: bus type pci registered [ 0.177445] PCI: MMCONFIG for domain 0000 [bus 00-3f] at [mem 0xe0000000-0xe3ffffff] (base 0xe0000000) [ 0.177449] PCI: MMCONFIG at [mem 0xe0000000-0xe3ffffff] reserved in E820 [ 0.177451] PCI: Using MMCONFIG for extended config space [ 0.177453] PCI: Using configuration type 1 for base access [ 0.177478] mtrr: your CPUs had inconsistent fixed MTRR settings [ 0.177481] mtrr: probably your BIOS does not setup all CPUs. [ 0.177482] mtrr: corrected configuration. [ 0.184752] bio: create slab at 0 [ 0.185656] ACPI: EC: Look up EC in DSDT [ 0.187178] ACPI: Executed 1 blocks of module-level executable AML code [ 0.191479] ACPI: BIOS _OSI(Linux) query ignored [ 0.192085] ACPI: Interpreter enabled [ 0.192088] ACPI: (supports S0 S3 S4 S5) [ 0.192117] ACPI: Using IOAPIC for interrupt routing [ 0.201427] ACPI: EC: GPE = 0x3, I/O: command/status = 0x66, data = 0x62 [ 0.201712] ACPI: No dock devices found. [ 0.201716] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.202863] \_SB_.PCI0:_OSC request failed [ 0.202865] _OSC request data:1 8 1f [ 0.202871] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.205384] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 0.205387] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 0.205391] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.205394] pci_root PNP0A08:00: host bridge window [mem 0x000c0000-0x000c3fff] [ 0.205397] pci_root PNP0A08:00: host bridge window [mem 0x000c4000-0x000c7fff] [ 0.205401] pci_root PNP0A08:00: host bridge window [mem 0x000c8000-0x000cbfff] [ 0.205405] pci_root PNP0A08:00: address space collision: host bridge window [mem 0x000cc000-0x000cffff] conflicts with Video ROM [mem 0x000c0000-0x000ce9ff] [ 0.205409] pci_root PNP0A08:00: host bridge window [mem 0x000d0000-0x000d3fff] [ 0.205412] pci_root PNP0A08:00: host bridge window [mem 0x000d4000-0x000d7fff] [ 0.205415] pci_root PNP0A08:00: host bridge window [mem 0x000d8000-0x000dbfff] [ 0.205418] pci_root PNP0A08:00: host bridge window [mem 0x000dc000-0x000dffff] [ 0.205421] pci_root PNP0A08:00: host bridge window [mem 0x000e0000-0x000e3fff] [ 0.205424] pci_root PNP0A08:00: host bridge window [mem 0x000e4000-0x000e7fff] [ 0.205428] pci_root PNP0A08:00: host bridge window [mem 0x000e8000-0x000ebfff] [ 0.205431] pci_root PNP0A08:00: host bridge window [mem 0x000ec000-0x000effff] [ 0.205434] pci_root PNP0A08:00: host bridge window [mem 0x80000000-0xdfffffff] [ 0.205437] pci_root PNP0A08:00: host bridge window [mem 0xe4000000-0xffffffff] [ 0.205601] pci 0000:00:04.0: PME# supported from D0 D3hot D3cold [ 0.205606] pci 0000:00:04.0: PME# disabled [ 0.205659] pci 0000:00:05.0: PME# supported from D0 D3hot D3cold [ 0.205663] pci 0000:00:05.0: PME# disabled [ 0.205716] pci 0000:00:06.0: PME# supported from D0 D3hot D3cold [ 0.205720] pci 0000:00:06.0: PME# disabled [ 0.205807] pci 0000:00:11.0: reg 10: [io 0x6038-0x603f] [ 0.205816] pci 0000:00:11.0: reg 14: [io 0x604c-0x604f] [ 0.205824] pci 0000:00:11.0: reg 18: [io 0x6030-0x6037] [ 0.205832] pci 0000:00:11.0: reg 1c: [io 0x6048-0x604b] [ 0.205840] pci 0000:00:11.0: reg 20: [io 0x6010-0x601f] [ 0.205849] pci 0000:00:11.0: reg 24: [mem 0x92409000-0x924093ff] [ 0.205911] pci 0000:00:12.0: reg 10: [mem 0x92408000-0x92408fff] [ 0.205975] pci 0000:00:12.1: reg 10: [mem 0x92407000-0x92407fff] [ 0.206053] pci 0000:00:12.2: reg 10: [mem 0x92409500-0x924095ff] [ 0.206115] pci 0000:00:12.2: supports D1 D2 [ 0.206118] pci 0000:00:12.2: PME# supported from D0 D1 D2 D3hot [ 0.206123] pci 0000:00:12.2: PME# disabled [ 0.206160] pci 0000:00:13.0: reg 10: [mem 0x92406000-0x92406fff] [ 0.206224] pci 0000:00:13.1: reg 10: [mem 0x92405000-0x92405fff] [ 0.206302] pci 0000:00:13.2: reg 10: [mem 0x92409400-0x924094ff] [ 0.206364] pci 0000:00:13.2: supports D1 D2 [ 0.206367] pci 0000:00:13.2: PME# supported from D0 D1 D2 D3hot [ 0.206372] pci 0000:00:13.2: PME# disabled [ 0.206501] pci 0000:00:14.1: reg 10: [io 0x0000-0x0007] [ 0.206509] pci 0000:00:14.1: reg 14: [io 0x0000-0x0003] [ 0.206517] pci 0000:00:14.1: reg 18: [io 0x0000-0x0007] [ 0.206525] pci 0000:00:14.1: reg 1c: [io 0x0000-0x0003] [ 0.206534] pci 0000:00:14.1: reg 20: [io 0x6000-0x600f] [ 0.206610] pci 0000:00:14.2: reg 10: [mem 0x92400000-0x92403fff 64bit] [ 0.206661] pci 0000:00:14.2: PME# supported from D0 D3hot D3cold [ 0.206666] pci 0000:00:14.2: PME# disabled [ 0.206789] pci 0000:00:14.5: reg 10: [mem 0x92404000-0x92404fff] [ 0.207067] pci 0000:01:05.0: reg 10: [mem 0x80000000-0x8fffffff pref] [ 0.207072] pci 0000:01:05.0: reg 14: [io 0x5000-0x50ff] [ 0.207078] pci 0000:01:05.0: reg 18: [mem 0x92300000-0x9230ffff] [ 0.207089] pci 0000:01:05.0: reg 24: [mem 0x92200000-0x922fffff] [ 0.207106] pci 0000:01:05.0: supports D1 D2 [ 0.207172] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.207178] pci 0000:00:01.0: bridge window [io 0x5000-0x5fff] [ 0.207182] pci 0000:00:01.0: bridge window [mem 0x92200000-0x923fffff] [ 0.207188] pci 0000:00:01.0: bridge window [mem 0x80000000-0x8fffffff 64bit pref] [ 0.207225] pci 0000:00:04.0: PCI bridge to [bus 02-07] [ 0.207231] pci 0000:00:04.0: bridge window [io 0x3000-0x4fff] [ 0.207235] pci 0000:00:04.0: bridge window [mem 0x91200000-0x921fffff] [ 0.207240] pci 0000:00:04.0: bridge window [mem 0x90000000-0x90ffffff 64bit pref] [ 0.207349] pci 0000:08:00.0: reg 10: [mem 0x91100000-0x91103fff 64bit] [ 0.207413] pci 0000:08:00.0: supports D1 D2 [ 0.212052] pci 0000:00:05.0: PCI bridge to [bus 08-08] [ 0.212058] pci 0000:00:05.0: bridge window [io 0xfffff000-0x0000] (disabled) [ 0.212062] pci 0000:00:05.0: bridge window [mem 0x91100000-0x911fffff] [ 0.212068] pci 0000:00:05.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.212130] pci 0000:09:00.0: reg 10: [io 0x2000-0x20ff] [ 0.212149] pci 0000:09:00.0: reg 18: [mem 0x91010000-0x91010fff 64bit pref] [ 0.212163] pci 0000:09:00.0: reg 20: [mem 0x91000000-0x9100ffff 64bit pref] [ 0.212171] pci 0000:09:00.0: reg 30: [mem 0xffff0000-0xffffffff pref] [ 0.212207] pci 0000:09:00.0: supports D1 D2 [ 0.212209] pci 0000:09:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.212214] pci 0000:09:00.0: PME# disabled [ 0.220013] pci 0000:00:06.0: PCI bridge to [bus 09-09] [ 0.220018] pci 0000:00:06.0: bridge window [io 0x2000-0x2fff] [ 0.220023] pci 0000:00:06.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.220028] pci 0000:00:06.0: bridge window [mem 0x91000000-0x910fffff 64bit pref] [ 0.220102] pci 0000:00:14.4: PCI bridge to [bus 80-8f] (subtractive decode) [ 0.220108] pci 0000:00:14.4: bridge window [io 0x1000-0x1fff] [ 0.220113] pci 0000:00:14.4: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.220119] pci 0000:00:14.4: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.220122] pci 0000:00:14.4: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.220125] pci 0000:00:14.4: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.220128] pci 0000:00:14.4: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.220132] pci 0000:00:14.4: bridge window [mem 0x000c0000-0x000c3fff] (subtractive decode) [ 0.220135] pci 0000:00:14.4: bridge window [mem 0x000c4000-0x000c7fff] (subtractive decode) [ 0.220138] pci 0000:00:14.4: bridge window [mem 0x000c8000-0x000cbfff] (subtractive decode) [ 0.220141] pci 0000:00:14.4: bridge window [mem 0x000d0000-0x000d3fff] (subtractive decode) [ 0.220144] pci 0000:00:14.4: bridge window [mem 0x000d4000-0x000d7fff] (subtractive decode) [ 0.220147] pci 0000:00:14.4: bridge window [mem 0x000d8000-0x000dbfff] (subtractive decode) [ 0.220150] pci 0000:00:14.4: bridge window [mem 0x000dc000-0x000dffff] (subtractive decode) [ 0.220153] pci 0000:00:14.4: bridge window [mem 0x000e0000-0x000e3fff] (subtractive decode) [ 0.220156] pci 0000:00:14.4: bridge window [mem 0x000e4000-0x000e7fff] (subtractive decode) [ 0.220159] pci 0000:00:14.4: bridge window [mem 0x000e8000-0x000ebfff] (subtractive decode) [ 0.220162] pci 0000:00:14.4: bridge window [mem 0x000ec000-0x000effff] (subtractive decode) [ 0.220165] pci 0000:00:14.4: bridge window [mem 0x80000000-0xdfffffff] (subtractive decode) [ 0.220168] pci 0000:00:14.4: bridge window [mem 0xe4000000-0xffffffff] (subtractive decode) [ 0.220189] pci_bus 0000:00: on NUMA node 0 [ 0.220196] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.220464] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.AGP_._PRT] [ 0.220556] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PB4_._PRT] [ 0.220655] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PB5_._PRT] [ 0.220745] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PB6_._PRT] [ 0.220876] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P2P_._PRT] [ 0.221085] \_SB_.PCI0:_OSC request failed [ 0.221087] _OSC request data:1 1f 1f [ 0.236582] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.236756] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.236968] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.237174] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.237316] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.237481] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.237687] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.237890] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.237953] HEST: Table is not found! [ 0.238063] vgaarb: device added: PCI:0000:01:05.0,decodes=io+mem,owns=io+mem,locks=none [ 0.238066] vgaarb: loaded [ 0.238242] SCSI subsystem initialized [ 0.238332] libata version 3.00 loaded. [ 0.238389] usbcore: registered new interface driver usbfs [ 0.238406] usbcore: registered new interface driver hub [ 0.238431] usbcore: registered new device driver usb [ 0.238685] ACPI: WMI: Mapper loaded [ 0.238688] PCI: Using ACPI for IRQ routing [ 0.238691] PCI: pci_cache_line_size set to 64 bytes [ 0.238914] reserve RAM buffer: 0000000000002000 - 000000000000ffff [ 0.238918] reserve RAM buffer: 000000000009fc00 - 000000000009ffff [ 0.238921] reserve RAM buffer: 000000006fb8f000 - 000000006fffffff [ 0.238924] reserve RAM buffer: 000000006fd70000 - 000000006fffffff [ 0.238928] reserve RAM buffer: 000000006fe58000 - 000000006fffffff [ 0.238931] reserve RAM buffer: 000000006feed000 - 000000006fffffff [ 0.238934] reserve RAM buffer: 000000006ff00000 - 000000006fffffff [ 0.239032] NetLabel: Initializing [ 0.239034] NetLabel: domain hash size = 128 [ 0.239036] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.239050] NetLabel: unlabeled traffic allowed by default [ 0.239130] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0 [ 0.239136] hpet0: 4 comparators, 32-bit 14.318180 MHz counter [ 0.241029] Switching to clocksource hpet [ 0.250600] AppArmor: AppArmor Filesystem Enabled [ 0.250618] pnp: PnP ACPI init [ 0.250640] ACPI: bus type pnp registered [ 0.254104] pnp: PnP ACPI: found 12 devices [ 0.254107] ACPI: ACPI bus type pnp unregistered [ 0.254110] PnPBIOS: Disabled by ACPI PNP [ 0.254126] system 00:01: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.254130] system 00:01: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.254138] system 00:09: [io 0x0400-0x04cf] has been reserved [ 0.254141] system 00:09: [io 0x04d0-0x04d1] has been reserved [ 0.254144] system 00:09: [io 0x04d6] has been reserved [ 0.254148] system 00:09: [io 0x0680-0x06ff] has been reserved [ 0.254151] system 00:09: [io 0x077a] has been reserved [ 0.254153] system 00:09: [io 0x0c00-0x0c01] has been reserved [ 0.254156] system 00:09: [io 0x0c14] has been reserved [ 0.254159] system 00:09: [io 0x0c50-0x0c52] has been reserved [ 0.254162] system 00:09: [io 0x0c6c] has been reserved [ 0.254165] system 00:09: [io 0x0c6f] has been reserved [ 0.254168] system 00:09: [io 0x0cd0-0x0cdb] has been reserved [ 0.254175] system 00:0a: [mem 0x000e0000-0x000fffff] could not be reserved [ 0.254178] system 00:0a: [mem 0xfff00000-0xffffffff] has been reserved [ 0.289129] pci 0000:09:00.0: no compatible bridge window for [mem 0xffff0000-0xffffffff pref] [ 0.289165] pci 0000:00:06.0: BAR 14: assigned [mem 0x92500000-0x925fffff] [ 0.289168] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.289172] pci 0000:00:01.0: bridge window [io 0x5000-0x5fff] [ 0.289177] pci 0000:00:01.0: bridge window [mem 0x92200000-0x923fffff] [ 0.289181] pci 0000:00:01.0: bridge window [mem 0x80000000-0x8fffffff 64bit pref] [ 0.289187] pci 0000:00:04.0: PCI bridge to [bus 02-07] [ 0.289190] pci 0000:00:04.0: bridge window [io 0x3000-0x4fff] [ 0.289195] pci 0000:00:04.0: bridge window [mem 0x91200000-0x921fffff] [ 0.289199] pci 0000:00:04.0: bridge window [mem 0x90000000-0x90ffffff 64bit pref] [ 0.289204] pci 0000:00:05.0: PCI bridge to [bus 08-08] [ 0.289207] pci 0000:00:05.0: bridge window [io disabled] [ 0.289211] pci 0000:00:05.0: bridge window [mem 0x91100000-0x911fffff] [ 0.289215] pci 0000:00:05.0: bridge window [mem pref disabled] [ 0.289221] pci 0000:09:00.0: BAR 6: assigned [mem 0x91020000-0x9102ffff pref] [ 0.289224] pci 0000:00:06.0: PCI bridge to [bus 09-09] [ 0.289227] pci 0000:00:06.0: bridge window [io 0x2000-0x2fff] [ 0.289232] pci 0000:00:06.0: bridge window [mem 0x92500000-0x925fffff] [ 0.289236] pci 0000:00:06.0: bridge window [mem 0x91000000-0x910fffff 64bit pref] [ 0.289242] pci 0000:00:14.4: PCI bridge to [bus 80-8f] [ 0.289257] pci 0000:00:14.4: bridge window [io 0x1000-0x1fff] [ 0.289264] pci 0000:00:14.4: bridge window [mem disabled] [ 0.289269] pci 0000:00:14.4: bridge window [mem pref disabled] [ 0.289283] pci 0000:00:01.0: setting latency timer to 64 [ 0.289293] alloc irq_desc for 16 on node -1 [ 0.289296] alloc kstat_irqs on node -1 [ 0.289302] pci 0000:00:04.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.289306] pci 0000:00:04.0: setting latency timer to 64 [ 0.289315] alloc irq_desc for 17 on node -1 [ 0.289317] alloc kstat_irqs on node -1 [ 0.289322] pci 0000:00:05.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 0.289326] pci 0000:00:05.0: setting latency timer to 64 [ 0.289333] alloc irq_desc for 18 on node -1 [ 0.289335] alloc kstat_irqs on node -1 [ 0.289339] pci 0000:00:06.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 0.289343] pci 0000:00:06.0: setting latency timer to 64 [ 0.289352] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 0.289355] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 0.289358] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.289361] pci_bus 0000:00: resource 7 [mem 0x000c0000-0x000c3fff] [ 0.289363] pci_bus 0000:00: resource 8 [mem 0x000c4000-0x000c7fff] [ 0.289366] pci_bus 0000:00: resource 9 [mem 0x000c8000-0x000cbfff] [ 0.289369] pci_bus 0000:00: resource 10 [mem 0x000d0000-0x000d3fff] [ 0.289371] pci_bus 0000:00: resource 11 [mem 0x000d4000-0x000d7fff] [ 0.289374] pci_bus 0000:00: resource 12 [mem 0x000d8000-0x000dbfff] [ 0.289377] pci_bus 0000:00: resource 13 [mem 0x000dc000-0x000dffff] [ 0.289380] pci_bus 0000:00: resource 14 [mem 0x000e0000-0x000e3fff] [ 0.289382] pci_bus 0000:00: resource 15 [mem 0x000e4000-0x000e7fff] [ 0.289385] pci_bus 0000:00: resource 16 [mem 0x000e8000-0x000ebfff] [ 0.289388] pci_bus 0000:00: resource 17 [mem 0x000ec000-0x000effff] [ 0.289391] pci_bus 0000:00: resource 18 [mem 0x80000000-0xdfffffff] [ 0.289394] pci_bus 0000:00: resource 19 [mem 0xe4000000-0xffffffff] [ 0.289397] pci_bus 0000:01: resource 0 [io 0x5000-0x5fff] [ 0.289399] pci_bus 0000:01: resource 1 [mem 0x92200000-0x923fffff] [ 0.289402] pci_bus 0000:01: resource 2 [mem 0x80000000-0x8fffffff 64bit pref] [ 0.289405] pci_bus 0000:02: resource 0 [io 0x3000-0x4fff] [ 0.289408] pci_bus 0000:02: resource 1 [mem 0x91200000-0x921fffff] [ 0.289411] pci_bus 0000:02: resource 2 [mem 0x90000000-0x90ffffff 64bit pref] [ 0.289414] pci_bus 0000:08: resource 1 [mem 0x91100000-0x911fffff] [ 0.289417] pci_bus 0000:09: resource 0 [io 0x2000-0x2fff] [ 0.289419] pci_bus 0000:09: resource 1 [mem 0x92500000-0x925fffff] [ 0.289422] pci_bus 0000:09: resource 2 [mem 0x91000000-0x910fffff 64bit pref] [ 0.289425] pci_bus 0000:80: resource 0 [io 0x1000-0x1fff] [ 0.289428] pci_bus 0000:80: resource 4 [io 0x0000-0x0cf7] [ 0.289431] pci_bus 0000:80: resource 5 [io 0x0d00-0xffff] [ 0.289433] pci_bus 0000:80: resource 6 [mem 0x000a0000-0x000bffff] [ 0.289436] pci_bus 0000:80: resource 7 [mem 0x000c0000-0x000c3fff] [ 0.289439] pci_bus 0000:80: resource 8 [mem 0x000c4000-0x000c7fff] [ 0.289441] pci_bus 0000:80: resource 9 [mem 0x000c8000-0x000cbfff] [ 0.289444] pci_bus 0000:80: resource 10 [mem 0x000d0000-0x000d3fff] [ 0.289447] pci_bus 0000:80: resource 11 [mem 0x000d4000-0x000d7fff] [ 0.289450] pci_bus 0000:80: resource 12 [mem 0x000d8000-0x000dbfff] [ 0.289453] pci_bus 0000:80: resource 13 [mem 0x000dc000-0x000dffff] [ 0.289455] pci_bus 0000:80: resource 14 [mem 0x000e0000-0x000e3fff] [ 0.289458] pci_bus 0000:80: resource 15 [mem 0x000e4000-0x000e7fff] [ 0.289461] pci_bus 0000:80: resource 16 [mem 0x000e8000-0x000ebfff] [ 0.289463] pci_bus 0000:80: resource 17 [mem 0x000ec000-0x000effff] [ 0.289466] pci_bus 0000:80: resource 18 [mem 0x80000000-0xdfffffff] [ 0.289469] pci_bus 0000:80: resource 19 [mem 0xe4000000-0xffffffff] [ 0.289511] NET: Registered protocol family 2 [ 0.289582] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.289866] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.290514] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.290814] TCP: Hash tables configured (established 131072 bind 65536) [ 0.290817] TCP reno registered [ 0.290821] UDP hash table entries: 512 (order: 2, 16384 bytes) [ 0.290832] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) [ 0.290941] NET: Registered protocol family 1 [ 0.290958] pci 0000:00:01.0: MSI quirk detected; subordinate MSI disabled [ 0.444591] pci 0000:01:05.0: Boot video device [ 0.444641] PCI: CLS 64 bytes, default 64 [ 0.444707] Simple Boot Flag at 0x44 set to 0x1 [ 0.444898] cpufreq-nforce2: No nForce2 chipset. [ 0.444929] Scanning for low memory corruption every 60 seconds [ 0.445079] audit: initializing netlink socket (disabled) [ 0.445095] type=2000 audit(1281737440.444:1): initialized [ 0.456105] highmem bounce pool size: 64 pages [ 0.456112] HugeTLB registered 4 MB page size, pre-allocated 0 pages [ 0.457768] VFS: Disk quotas dquot_6.5.2 [ 0.457833] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 0.458460] fuse init (API version 7.14) [ 0.458554] msgmni has been set to 1689 [ 0.458848] alg: No test for stdrng (krng) [ 0.458908] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.458912] io scheduler noop registered [ 0.458914] io scheduler deadline registered [ 0.458928] io scheduler cfq registered (default) [ 0.459071] pcieport 0000:00:04.0: setting latency timer to 64 [ 0.459104] alloc irq_desc for 40 on node -1 [ 0.459106] alloc kstat_irqs on node -1 [ 0.459117] pcieport 0000:00:04.0: irq 40 for MSI/MSI-X [ 0.459194] pcieport 0000:00:05.0: setting latency timer to 64 [ 0.459222] alloc irq_desc for 41 on node -1 [ 0.459224] alloc kstat_irqs on node -1 [ 0.459231] pcieport 0000:00:05.0: irq 41 for MSI/MSI-X [ 0.459294] pcieport 0000:00:06.0: setting latency timer to 64 [ 0.459322] alloc irq_desc for 42 on node -1 [ 0.459324] alloc kstat_irqs on node -1 [ 0.459329] pcieport 0000:00:06.0: irq 42 for MSI/MSI-X [ 0.459418] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.459555] \_SB_.PCI0:_OSC request failed [ 0.459557] _OSC request data:1 0 1f [ 0.459668] \_SB_.PCI0:_OSC request failed [ 0.459670] _OSC request data:1 0 1f [ 0.459692] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.460055] vesafb: framebuffer at 0x80000000, mapped to 0xf8080000, using 1216k, total 1216k [ 0.460059] vesafb: mode is 640x480x32, linelength=2560, pages=0 [ 0.460061] vesafb: scrolling: redraw [ 0.460064] vesafb: Truecolor: size=0:8:8:8, shift=0:16:8:0 [ 0.532673] Console: switching to colour frame buffer device 80x30 [ 0.605161] fb0: VESA VGA frame buffer device [ 0.605645] ACPI: AC Adapter [ACAD] (on-line) [ 0.605724] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 0.605728] ACPI: Power Button [PWRB] [ 0.605774] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input1 [ 0.605777] ACPI: Sleep Button [SLPB] [ 0.605834] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input2 [ 0.606209] ACPI: Lid Switch [LID] [ 0.606258] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3 [ 0.606261] ACPI: Power Button [PWRF] [ 0.606524] ACPI: acpi_idle registered with cpuidle [ 0.612093] [Firmware Bug]: Invalid critical threshold (0) [ 0.612741] thermal LNXTHERM:01: registered as thermal_zone0 [ 0.612750] ACPI: Thermal Zone [THRM] (78 C) [ 0.612831] ERST: Table is not found! [ 0.614582] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.616217] brd: module loaded [ 0.616903] loop: module loaded [ 0.617210] pata_acpi 0000:00:14.1: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.617293] pata_acpi 0000:00:14.1: setting latency timer to 64 [ 0.617686] Fixed MDIO Bus: probed [ 0.617727] PPP generic driver version 2.4.2 [ 0.617770] tun: Universal TUN/TAP device driver, 1.6 [ 0.617772] tun: (C) 1999-2004 Max Krasnyansky [ 0.617858] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.617913] ehci_hcd 0000:00:12.2: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 0.617933] ehci_hcd 0000:00:12.2: setting latency timer to 64 [ 0.617938] ehci_hcd 0000:00:12.2: EHCI Host Controller [ 0.617976] ehci_hcd 0000:00:12.2: new USB bus registered, assigned bus number 1 [ 0.618043] ehci_hcd 0000:00:12.2: applying AMD SB600/SB700 USB freeze workaround [ 0.618059] ehci_hcd 0000:00:12.2: debug port 1 [ 0.618095] ehci_hcd 0000:00:12.2: irq 17, io mem 0x92409500 [ 0.618314] isapnp: Scanning for PnP cards... [ 0.672689] ehci_hcd 0000:00:12.2: USB 2.0 started, EHCI 1.00 [ 0.672850] hub 1-0:1.0: USB hub found [ 0.672856] hub 1-0:1.0: 6 ports detected [ 0.673001] alloc irq_desc for 19 on node -1 [ 0.673003] alloc kstat_irqs on node -1 [ 0.673011] ehci_hcd 0000:00:13.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.673024] ehci_hcd 0000:00:13.2: setting latency timer to 64 [ 0.673028] ehci_hcd 0000:00:13.2: EHCI Host Controller [ 0.673070] ehci_hcd 0000:00:13.2: new USB bus registered, assigned bus number 2 [ 0.673131] ehci_hcd 0000:00:13.2: applying AMD SB600/SB700 USB freeze workaround [ 0.673146] ehci_hcd 0000:00:13.2: debug port 1 [ 0.673172] ehci_hcd 0000:00:13.2: irq 19, io mem 0x92409400 [ 0.696087] ehci_hcd 0000:00:13.2: USB 2.0 started, EHCI 1.00 [ 0.696385] hub 2-0:1.0: USB hub found [ 0.696397] hub 2-0:1.0: 6 ports detected [ 0.696564] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.696639] ohci_hcd 0000:00:12.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.696680] ohci_hcd 0000:00:12.0: setting latency timer to 64 [ 0.696687] ohci_hcd 0000:00:12.0: OHCI Host Controller [ 0.696785] ohci_hcd 0000:00:12.0: new USB bus registered, assigned bus number 3 [ 0.696881] ohci_hcd 0000:00:12.0: irq 16, io mem 0x92408000 [ 0.756952] hub 3-0:1.0: USB hub found [ 0.757001] hub 3-0:1.0: 3 ports detected [ 0.757176] ohci_hcd 0000:00:12.1: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.757255] ohci_hcd 0000:00:12.1: setting latency timer to 64 [ 0.757262] ohci_hcd 0000:00:12.1: OHCI Host Controller [ 0.757342] ohci_hcd 0000:00:12.1: new USB bus registered, assigned bus number 4 [ 0.757414] ohci_hcd 0000:00:12.1: irq 16, io mem 0x92407000 [ 0.816561] hub 4-0:1.0: USB hub found [ 0.816576] hub 4-0:1.0: 3 ports detected [ 0.816757] ohci_hcd 0000:00:13.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 0.816835] ohci_hcd 0000:00:13.0: setting latency timer to 64 [ 0.816843] ohci_hcd 0000:00:13.0: OHCI Host Controller [ 0.816940] ohci_hcd 0000:00:13.0: new USB bus registered, assigned bus number 5 [ 0.817029] ohci_hcd 0000:00:13.0: irq 18, io mem 0x92406000 [ 0.876383] hub 5-0:1.0: USB hub found [ 0.876435] hub 5-0:1.0: 3 ports detected [ 0.876651] ohci_hcd 0000:00:13.1: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 0.876690] ohci_hcd 0000:00:13.1: setting latency timer to 64 [ 0.876698] ohci_hcd 0000:00:13.1: OHCI Host Controller [ 0.876779] ohci_hcd 0000:00:13.1: new USB bus registered, assigned bus number 6 [ 0.876849] ohci_hcd 0000:00:13.1: irq 18, io mem 0x92405000 [ 0.899348] Freeing initrd memory: 10504k freed [ 0.925693] ACPI: Battery Slot [BAT0] (battery present) [ 0.936323] hub 6-0:1.0: USB hub found [ 0.936336] hub 6-0:1.0: 3 ports detected [ 0.936544] ohci_hcd 0000:00:14.5: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.936582] ohci_hcd 0000:00:14.5: setting latency timer to 64 [ 0.936589] ohci_hcd 0000:00:14.5: OHCI Host Controller [ 0.936672] ohci_hcd 0000:00:14.5: new USB bus registered, assigned bus number 7 [ 0.936715] ohci_hcd 0000:00:14.5: irq 18, io mem 0x92404000 [ 0.957874] isapnp: No Plug & Play device found [ 0.996256] hub 7-0:1.0: USB hub found [ 0.996294] hub 7-0:1.0: 2 ports detected [ 0.996465] uhci_hcd: USB Universal Host Controller Interface driver [ 0.996653] PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 1.013883] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 1.013898] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 1.014041] mice: PS/2 mouse device common for all mice [ 1.014303] rtc_cmos 00:05: RTC can wake from S4 [ 1.014387] rtc_cmos 00:05: rtc core: registered rtc_cmos as rtc0 [ 1.014423] rtc0: alarms up to one day, 114 bytes nvram, hpet irqs [ 1.014633] device-mapper: uevent: version 1.0.3 [ 1.014875] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 1.015023] device-mapper: multipath: version 1.1.1 loaded [ 1.015028] device-mapper: multipath round-robin: version 1.0.0 loaded [ 1.015248] EISA: Probing bus 0 at eisa.0 [ 1.015254] EISA: Cannot allocate resource for mainboard [ 1.015259] Cannot allocate resource for EISA slot 1 [ 1.015264] Cannot allocate resource for EISA slot 2 [ 1.015268] Cannot allocate resource for EISA slot 3 [ 1.015273] Cannot allocate resource for EISA slot 4 [ 1.015278] Cannot allocate resource for EISA slot 5 [ 1.015282] Cannot allocate resource for EISA slot 6 [ 1.015287] Cannot allocate resource for EISA slot 7 [ 1.015291] Cannot allocate resource for EISA slot 8 [ 1.015296] EISA: Detected 0 cards. [ 1.015575] cpuidle: using governor ladder [ 1.015578] cpuidle: using governor menu [ 1.015903] TCP cubic registered [ 1.016046] NET: Registered protocol family 10 [ 1.016465] lo: Disabled Privacy Extensions [ 1.016775] NET: Registered protocol family 17 [ 1.016854] powernow-k8: Found 1 AMD Turion(tm) X2 Dual-Core Mobile RM-72 (2 cpu cores) (version 2.20.00) [ 1.016912] powernow-k8: 0 : pstate 0 (2100 MHz) [ 1.016914] powernow-k8: 1 : pstate 1 (1050 MHz) [ 1.016916] powernow-k8: 2 : pstate 2 (525 MHz) [ 1.018096] Using IPI No-Shortcut mode [ 1.018201] PM: Resume from disk failed. [ 1.018214] registered taskstats version 1 [ 1.018569] Magic number: 6:938:198 [ 1.018717] rtc_cmos 00:05: setting system clock to 2010-08-13 22:10:41 UTC (1281737441) [ 1.018720] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 1.018722] EDD information not available. [ 1.018830] Freeing unused kernel memory: 684k freed [ 1.019356] Write protecting the kernel text: 4932k [ 1.019400] Write protecting the kernel read-only data: 2012k [ 1.020579] usb 2-2: new high speed USB device using ehci_hcd and address 2 [ 1.031162] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4 [ 1.044475] udev: starting version 151 [ 1.098986] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded [ 1.099015] r8169 0000:09:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 1.099062] r8169 0000:09:00.0: setting latency timer to 64 [ 1.099116] alloc irq_desc for 43 on node -1 [ 1.099118] alloc kstat_irqs on node -1 [ 1.099133] r8169 0000:09:00.0: irq 43 for MSI/MSI-X [ 1.099690] r8169 0000:09:00.0: eth0: RTL8168c/8111c at 0xf81d6000, 00:23:8b:10:df:e4, XID 1c4000c0 IRQ 43 [ 1.151131] b43-pci-bridge 0000:08:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 1.151147] b43-pci-bridge 0000:08:00.0: setting latency timer to 64 [ 1.168658] ssb: Core 0 found: ChipCommon (cc 0x800, rev 0x16, vendor 0x4243) [ 1.168671] ssb: Core 1 found: IEEE 802.11 (cc 0x812, rev 0x0F, vendor 0x4243) [ 1.168682] ssb: Core 2 found: PCMCIA (cc 0x80D, rev 0x0A, vendor 0x4243) [ 1.168690] ssb: Core 3 found: PCI-E (cc 0x820, rev 0x09, vendor 0x4243) [ 1.178207] scsi0 : pata_atiixp [ 1.206642] scsi1 : pata_atiixp [ 1.207432] ata1: DUMMY [ 1.207435] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x6008 irq 15 [ 1.207517] ahci 0000:00:11.0: version 3.0 [ 1.207578] alloc irq_desc for 22 on node -1 [ 1.207581] alloc kstat_irqs on node -1 [ 1.207591] ahci 0000:00:11.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 1.207708] ahci 0000:00:11.0: AHCI 0001.0100 32 slots 1 ports 3 Gbps 0x1 impl SATA mode [ 1.207712] ahci 0000:00:11.0: flags: 64bit ncq sntf ilck led clo pmp pio ccc [ 1.217301] ssb: Sonics Silicon Backplane found on PCI device 0000:08:00.0 [ 1.227449] scsi2 : ahci [ 1.227599] ata3: SATA max UDMA/133 abar m1024@0x92409000 port 0x92409100 irq 22 [ 1.420056] usb 1-4: new high speed USB device using ehci_hcd and address 2 [ 1.574664] Initializing USB Mass Storage driver... [ 1.574860] scsi3 : usb-storage 1-4:1.0 [ 1.575018] usbcore: registered new interface driver usb-storage [ 1.575022] USB Mass Storage support registered. [ 1.708059] ata3: softreset failed (device not ready) [ 1.708064] ata3: applying SB600 PMP SRST workaround and retrying [ 1.828056] usb 6-1: new full speed USB device using ohci_hcd and address 2 [ 1.876067] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.876770] ata3.00: ATA-8: ST9250827AS, 3.AHC, max UDMA/100 [ 1.876773] ata3.00: 488397168 sectors, multi 16: LBA48 NCQ (depth 31/32) [ 1.877681] ata3.00: configured for UDMA/100 [ 1.877979] scsi 2:0:0:0: Direct-Access ATA ST9250827AS 3.AH PQ: 0 ANSI: 5 [ 1.878169] sd 2:0:0:0: Attached scsi generic sg0 type 0 [ 1.878182] sd 2:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB) [ 1.878256] sd 2:0:0:0: [sda] Write Protect is off [ 1.878260] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.878294] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.878549] sda: sda1 sda2 < sda5 sda6 > sda3 [ 1.915949] sd 2:0:0:0: [sda] Attached SCSI disk [ 2.148057] usb 7-1: new full speed USB device using ohci_hcd and address 2 [ 2.351307] EXT4-fs (sda1): INFO: recovery required on readonly filesystem [ 2.351314] EXT4-fs (sda1): write access will be enabled during recovery [ 2.448024] usb 7-2: new full speed USB device using ohci_hcd and address 3 [ 2.574283] scsi 3:0:0:0: Direct-Access Generic- Multi-Card 1.00 PQ: 0 ANSI: 0 CCS [ 2.575004] sd 3:0:0:0: Attached scsi generic sg1 type 0 [ 2.579134] sd 3:0:0:0: [sdb] Attached SCSI removable disk [ 2.631207] usbcore: registered new interface driver hiddev [ 2.631271] usbcore: registered new interface driver usbhid [ 2.631274] usbhid: USB HID core driver [ 6.454351] EXT4-fs (sda1): orphan cleanup on readonly fs [ 6.454374] EXT4-fs (sda1): ext4_orphan_cleanup: deleting unreferenced inode 1569848 [ 6.454562] EXT4-fs (sda1): 1 orphan inode deleted [ 6.454569] EXT4-fs (sda1): recovery complete [ 6.752457] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 8.240367] Adding 4088536k swap on /dev/sda5. Priority:-1 extents:1 across:4088536k [ 8.679290] udev: starting version 151 [ 9.119605] input: HP WMI hotkeys as /devices/virtual/input/input5 [ 9.857565] shpchp 0000:00:01.0: HPC vendor_id 1022 device_id 9602 ss_vid 1022 ss_did 9602 [ 9.857576] shpchp 0000:00:01.0: Cannot reserve MMIO region [ 9.859846] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 [ 9.924998] lirc_dev: IR Remote Control driver registered, major 61 [ 9.980294] Bluetooth: Core ver 2.15 [ 9.980458] NET: Registered protocol family 31 [ 9.980462] Bluetooth: HCI device and connection manager initialized [ 9.980470] Bluetooth: HCI socket layer initialized [ 10.254658] acpi device:03: registered as cooling_device2 [ 10.256115] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:00/LNXVIDEO:00/input/input6 [ 10.256407] ACPI: Video Device [VGA] (multi-head: yes rom: no post: no) [ 10.294822] input: Wacom ISDv4 93 Pen as /devices/pci0000:00/0000:00:14.5/usb7/7-2/7-2:1.0/input/input7 [ 10.298807] input: Wacom ISDv4 93 Finger as /devices/pci0000:00/0000:00:14.5/usb7/7-2/7-2:1.1/input/input8 [ 10.299226] usbcore: registered new interface driver wacom [ 10.299231] wacom: v1.52:USB Wacom tablet driver [ 10.318454] Linux video capture interface: v2.00 [ 10.366536] piix4_smbus 0000:00:14.0: SMBus Host Controller at 0xb00, revision 0 [ 10.448268] Linux agpgart interface v0.103 [ 10.460249] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 10.462958] usbcore: registered new interface driver btusb [ 10.564776] BUG: unable to handle kernel NULL pointer dereference at (null) [ 10.567664] IP: [] kfifo_alloc+0x26/0x90 [ 10.568531] *pde = 00000000 [ 10.568531] Oops: 0002 [#1] SMP [ 10.568531] last sysfs file: /sys/devices/pci0000:00/0000:00:14.5/usb7/7-2/7-2:1.1/uevent [ 10.574411] Modules linked in: k10temp lirc_ene0100(+) btusb agpgart i2c_piix4 joydev i2c_algo_bit videodev v4l1_compat wacom video psmouse bluetooth lirc_dev shpchp serio_raw output led_class lp(+) parport hp_wmi usbhid hid usb_storage ahci pata_atiixp ssb libahci r8169 mii [ 10.575676] [ 10.575676] Pid: 637, comm: modprobe Not tainted 2.6.35-15-generic #21-Ubuntu 30F1/HP Pavilion tx2500 Notebook PC [ 10.575676] EIP: 0060:[] EFLAGS: 00010286 CPU: 1 [ 10.575676] EIP is at kfifo_alloc+0x26/0x90 [ 10.575676] EAX: d2079000 EBX: 00001000 ECX: c0166452 EDX: c0166452 [ 10.575676] ESI: 00000000 EDI: d27add60 EBP: d209de40 ESP: d209de38 [ 10.575676] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 10.575676] Process modprobe (pid: 637, ti=d209c000 task=d21d7230 task.ti=d209c000) [ 10.575676] Stack: [ 10.575676] f6ad12a0 d26a1a00 d209de68 f803bdb7 00000020 000080d0 d209de68 f724de00 [ 10.575676] <0> fffffff4 f803bf90 f724de00 f803c3e0 d209de7c c03ca5fe f724de00 f803c400 [ 10.575676] <0> f803c400 d209dea0 c0402cc0 f724ded0 d209dea0 c0409f07 00000000 f724de00 [ 10.575676] Call Trace: [ 10.575676] [] ? ene_probe+0x157/0x30b [lirc_ene0100] [ 10.618452] cfg80211: Calling CRDA to update world regulatory domain [ 10.721481] b43-phy0: Broadcom 4312 WLAN found (core revision 15) [ 10.623751] [] ? pnp_device_probe+0x6e/0xd0 [ 10.623751] [] ? really_probe+0x50/0x150 [ 10.623751] [] ? pm_runtime_barrier+0x57/0xb0 [ 10.623751] [] ? driver_probe_device+0x3c/0x60 [ 10.623751] [] ? __driver_attach+0x81/0x90 [ 10.623751] [] ? bus_for_each_dev+0x53/0x80 [ 11.101780] Synaptics Touchpad, model: 1, fw: 6.3, id: 0x180b1, caps: 0xa04711/0xa00000/0x0 [ 11.170991] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input9 [ 11.183369] [] ? driver_attach+0x1e/0x20 [ 11.183369] [] ? __driver_attach+0x0/0x90 [ 11.183369] [] ? bus_add_driver+0xd5/0x280 [ 11.183369] [] ? pnp_device_remove+0x0/0x40 [ 11.183369] [] ? driver_register+0x6a/0x130 [ 11.183369] [] ? tracepoint_module_notify+0x27/0x30 [ 11.183369] [] ? pnp_register_driver+0x1c/0x20 [ 11.183369] [] ? ene_init+0x38/0x3a [lirc_ene0100] [ 11.183369] [] ? __blocking_notifier_call_chain+0x54/0x70 [ 11.183369] [] ? do_one_initcall+0x32/0x1a0 [ 11.183369] [] ? ene_init+0x0/0x3a [lirc_ene0100] [ 11.183369] [] ? sys_init_module+0x9b/0x1e0 [ 11.183369] [] ? sys_close+0x75/0xc0 [ 11.183369] [] ? syscall_call+0x7/0xb [ 11.183369] Code: 90 8d 74 26 00 55 89 e5 56 53 0f 1f 44 00 00 89 d3 89 c6 85 db 89 ca 8d 43 ff 74 31 85 d8 75 25 89 d8 e8 4e 60 0a 00 85 c0 74 39 <89> 06 31 c0 89 5e 04 c7 46 0c 00 00 00 00 c7 46 08 00 00 00 00 [ 11.183369] EIP: [] kfifo_alloc+0x26/0x90 SS:ESP 0068:d209de38 [ 11.183369] CR2: 0000000000000000 [ 12.260251] ---[ end trace 66b1d70e874836eb ]--- [ 12.383989] lp: driver loaded but no devices found [ 12.406257] phy0: Selected rate control algorithm 'minstrel' [ 12.407569] Registered led device: b43-phy0::tx [ 12.407603] Registered led device: b43-phy0::rx [ 12.407638] Registered led device: b43-phy0::radio [ 12.407773] Broadcom 43xx driver loaded [ Features: PL, Firmware-ID: FW13 ] [ 12.425246] uvcvideo: Found UVC 1.00 device HP Webcam (064e:a104) [ 12.444409] input: HP Webcam as /devices/pci0000:00/0000:00:13.2/usb2/2-2/2-2:1.0/input/input10 [ 12.444540] usbcore: registered new interface driver uvcvideo [ 12.444545] USB Video Class driver (v0.1.0) [ 12.792107] [drm] Initialized drm 1.1.0 20060810 [ 13.196742] type=1400 audit(1281737453.677:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient3" pid=655 comm="apparmor_parser" [ 13.286550] cfg80211: World regulatory domain updated: [ 13.286557] (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 13.286564] (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 13.286570] (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 13.286576] (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 13.286581] (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 13.286586] (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 13.685927] type=1400 audit(1281737454.165:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=655 comm="apparmor_parser" [ 13.834819] type=1400 audit(1281737454.313:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=655 comm="apparmor_parser" [ 14.431806] [drm] VGACON disable radeon kernel modesetting. [ 14.485443] pci 0000:01:05.0: power state changed by ACPI to D0 [ 14.538308] pci 0000:01:05.0: power state changed by ACPI to D0 [ 14.589526] pci 0000:01:05.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 14.640486] pci 0000:01:05.0: setting latency timer to 64 [ 14.692770] [drm] Initialized radeon 1.33.0 20080528 for 0000:01:05.0 on minor 0 [ 15.042241] HDA Intel 0000:00:14.2: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 15.149837] HDA Intel 0000:00:14.2: setting latency timer to 64 [ 17.291931] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro [ 17.834196] EXT4-fs (sda6): mounted filesystem with ordered data mode. Opts: (null) [ 19.011213] type=1400 audit(1281737459.489:5): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient3" pid=938 comm="apparmor_parser" [ 19.011821] type=1400 audit(1281737459.489:6): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=938 comm="apparmor_parser" [ 19.012170] type=1400 audit(1281737459.493:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=938 comm="apparmor_parser" [ 19.120967] type=1400 audit(1281737459.601:8): apparmor="STATUS" operation="profile_load" name="/usr/share/gdm/guest-session/Xsession" pid=937 comm="apparmor_parser" [ 19.147981] type=1400 audit(1281737459.625:9): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince" pid=939 comm="apparmor_parser" [ 19.155832] type=1400 audit(1281737459.633:10): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-previewer" pid=939 comm="apparmor_parser" [ 19.160979] type=1400 audit(1281737459.641:11): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-thumbnailer" pid=939 comm="apparmor_parser" [ 19.192170] type=1400 audit(1281737459.673:12): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=944 comm="apparmor_parser" [ 19.193022] type=1400 audit(1281737459.673:13): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=944 comm="apparmor_parser" [ 19.209101] type=1400 audit(1281737459.689:14): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=945 comm="apparmor_parser" [ 20.596277] b43-phy0: Loading firmware version 410.2160 (2007-05-26 15:32:10) Bug: 621651 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-17-generic (buildd@rothera) (gcc version 4.4.5 20100816 (prerelease) (Ubuntu/Linaro 4.4.4-9ubuntu1) ) #23-Ubuntu SMP Fri Aug 20 01:22:20 UTC 2010 (Ubuntu 2.6.35-17.23-generic 2.6.35.2) [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) [ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000bf4fe000 (usable) [ 0.000000] BIOS-e820: 00000000bf4fe000 - 00000000bf509000 (reserved) [ 0.000000] BIOS-e820: 00000000bf509000 - 00000000bf552000 (usable) [ 0.000000] BIOS-e820: 00000000bf552000 - 00000000bf555000 (reserved) [ 0.000000] BIOS-e820: 00000000bf555000 - 00000000bf5bb000 (usable) [ 0.000000] BIOS-e820: 00000000bf5bb000 - 00000000bf5bf000 (reserved) [ 0.000000] BIOS-e820: 00000000bf5bf000 - 00000000bf670000 (usable) [ 0.000000] BIOS-e820: 00000000bf670000 - 00000000bf6bf000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000bf6bf000 - 00000000bf700000 (ACPI data) [ 0.000000] BIOS-e820: 00000000bf700000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fed14000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1c000 - 00000000fed20000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000fff00000 - 0000000100000000 (reserved) [ 0.000000] Notice: NX (Execute Disable) protection cannot be enabled: non-PAE kernel! [ 0.000000] DMI 2.4 present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] last_pfn = 0xbf670 max_arch_pfn = 0x100000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0FFFE0000 mask FFFFE0000 write-protect [ 0.000000] 1 base 000000000 mask F80000000 write-back [ 0.000000] 2 base 080000000 mask FC0000000 write-back [ 0.000000] 3 base 0BF800000 mask FFF800000 uncachable [ 0.000000] 4 base 0BF700000 mask FFFF00000 uncachable [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820 update range: 0000000000002000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000001000 (reserved) [ 0.000000] modified: 0000000000001000 - 0000000000002000 (usable) [ 0.000000] modified: 0000000000002000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009fc00 (usable) [ 0.000000] modified: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 00000000bf4fe000 (usable) [ 0.000000] modified: 00000000bf4fe000 - 00000000bf509000 (reserved) [ 0.000000] modified: 00000000bf509000 - 00000000bf552000 (usable) [ 0.000000] modified: 00000000bf552000 - 00000000bf555000 (reserved) [ 0.000000] modified: 00000000bf555000 - 00000000bf5bb000 (usable) [ 0.000000] modified: 00000000bf5bb000 - 00000000bf5bf000 (reserved) [ 0.000000] modified: 00000000bf5bf000 - 00000000bf670000 (usable) [ 0.000000] modified: 00000000bf670000 - 00000000bf6bf000 (ACPI NVS) [ 0.000000] modified: 00000000bf6bf000 - 00000000bf700000 (ACPI data) [ 0.000000] modified: 00000000bf700000 - 00000000c0000000 (reserved) [ 0.000000] modified: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] modified: 00000000fed14000 - 00000000fed1a000 (reserved) [ 0.000000] modified: 00000000fed1c000 - 00000000fed20000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000fff00000 - 0000000100000000 (reserved) [ 0.000000] initial memory mapped : 0 - 00c00000 [ 0.000000] found SMP MP-table at [c00fe1b0] fe1b0 [ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000 [ 0.000000] 0000000000 - 0000400000 page 4k [ 0.000000] 0000400000 - 0037400000 page 2M [ 0.000000] 0037400000 - 00377fe000 page 4k [ 0.000000] kernel direct mapping tables up to 377fe000 @ 15000-1a000 [ 0.000000] RAMDISK: 375ad000 - 37ff0000 [ 0.000000] Allocated new RAMDISK: 009a0000 - 013e213c [ 0.000000] Move RAMDISK from 00000000375ad000 - 0000000037fef13b to 009a0000 - 013e213b [ 0.000000] ACPI: RSDP 000fe020 00024 (v02 ACRSYS) [ 0.000000] ACPI: XSDT bf6fe120 00064 (v01 ACRSYS ACRPRDCT 00000001 01000013) [ 0.000000] ACPI: FACP bf6fd000 000F4 (v04 ACRSYS ACRPRDCT 00000001 MSFT 01000013) [ 0.000000] ACPI: DSDT bf6f4000 08941 (v01 ACRSYS ACRPRDCT 00000001 MSFT 01000013) [ 0.000000] ACPI: FACS bf675000 00040 [ 0.000000] ACPI: APIC bf6f3000 00068 (v02 ACRSYS ACRPRDCT 00000001 MSFT 01000013) [ 0.000000] ACPI: MCFG bf6f2000 0003C (v01 ACRSYS ACRPRDCT 00000001 MSFT 01000013) [ 0.000000] ACPI: SLIC bf6f1000 00176 (v01 ACRSYS ACRPRDCT 00000001 MSFT 01000013) [ 0.000000] ACPI: HPET bf6f0000 00038 (v01 ACRSYS ACRPRDCT 00000001 MSFT 01000013) [ 0.000000] ACPI: SSDT bf6ef000 004C4 (v01 PmRef CpuPm 00003000 INTL 20051117) [ 0.000000] ACPI: SSDT bf6ee000 00232 (v01 PmRef Cpu0Tst 00003000 INTL 20051117) [ 0.000000] ACPI: SSDT bf6ed000 000A0 (v01 PmRef Cpu1Tst 00003000 INTL 20051117) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] 2174MB HIGHMEM available. [ 0.000000] 887MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 377fe000 [ 0.000000] low ram: 0 - 377fe000 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000001 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x000377fe [ 0.000000] HighMem 0x000377fe -> 0x000bf670 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[6] active PFN ranges [ 0.000000] 0: 0x00000001 -> 0x00000002 [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x000bf4fe [ 0.000000] 0: 0x000bf509 -> 0x000bf552 [ 0.000000] 0: 0x000bf555 -> 0x000bf5bb [ 0.000000] 0: 0x000bf5bf -> 0x000bf670 [ 0.000000] On node 0 totalpages: 783854 [ 0.000000] free_area_init_node: node 0, pgdat c07fb680, node_mem_map c13e4020 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3952 pages, LIFO batch:0 [ 0.000000] Normal zone: 1744 pages used for memmap [ 0.000000] Normal zone: 221486 pages, LIFO batch:31 [ 0.000000] HighMem zone: 4349 pages used for memmap [ 0.000000] HighMem zone: 552291 pages, LIFO batch:31 [ 0.000000] Using APIC driver default [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x04] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 4, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [16000 - 167ff] [ 0.000000] PM: Registered nosave memory: 0000000000002000 - 0000000000010000 [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:20000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:2 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 14 pages/cpu @c2c00000 s36352 r0 d20992 u2097152 [ 0.000000] pcpu-alloc: s36352 r0 d20992 u2097152 alloc=1*4194304 [ 0.000000] pcpu-alloc: [0] 0 1 [ 0.000000] early_res array is doubled to 128 at [16800 - 177ff] [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 777729 [ 0.000000] Kernel command line: root=UUID=5630b9ad-fd98-4d9b-b2a4-ef311212cbe5 ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Enabling fast FPU save and restore... done. [ 0.000000] Enabling unmasked SIMD FPU exception support... done. [ 0.000000] Initializing CPU#0 [ 0.000000] allocated 15679660 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Subtract (59 early reservations) [ 0.000000] #1 [0000001000 - 0000002000] EX TRAMPOLINE [ 0.000000] #2 [0000100000 - 000099badc] TEXT DATA BSS [ 0.000000] #3 [000099c000 - 000099f19c] BRK [ 0.000000] #4 [000009fc00 - 00000fe1b0] BIOS reserved [ 0.000000] #5 [00000fe1b0 - 00000fe1c0] MP-table mpf [ 0.000000] #6 [00000fe1c0 - 00000feab0] BIOS reserved [ 0.000000] #7 [00000febf8 - 0000100000] BIOS reserved [ 0.000000] #8 [00000feab0 - 00000febf8] MP-table mpc [ 0.000000] #9 [0000010000 - 0000011000] TRAMPOLINE [ 0.000000] #10 [0000011000 - 0000015000] ACPI WAKEUP [ 0.000000] #11 [0000015000 - 0000016000] PGTABLE [ 0.000000] #12 [00009a0000 - 00013e3000] NEW RAMDISK [ 0.000000] #13 [00013e3000 - 00013e4000] BOOTMEM [ 0.000000] #14 [00013e4000 - 0002bd4000] BOOTMEM [ 0.000000] #15 [0002bd4000 - 0002bd4004] BOOTMEM [ 0.000000] #16 [0002bd4040 - 0002bd4100] BOOTMEM [ 0.000000] #17 [0002bd4100 - 0002bd4154] BOOTMEM [ 0.000000] #18 [0002bd4180 - 0002bd7180] BOOTMEM [ 0.000000] #19 [0002bd7180 - 0002bd724c] BOOTMEM [ 0.000000] #20 [0002bd7280 - 0002be3280] BOOTMEM [ 0.000000] #21 [0002be3280 - 0002be32a5] BOOTMEM [ 0.000000] #22 [0002be32c0 - 0002be32e7] BOOTMEM [ 0.000000] #23 [0002be3300 - 0002be3568] BOOTMEM [ 0.000000] #24 [0002be3580 - 0002be35c0] BOOTMEM [ 0.000000] #25 [0002be35c0 - 0002be3600] BOOTMEM [ 0.000000] #26 [0002be3600 - 0002be3640] BOOTMEM [ 0.000000] #27 [0002be3640 - 0002be3680] BOOTMEM [ 0.000000] #28 [0002be3680 - 0002be36c0] BOOTMEM [ 0.000000] #29 [0002be36c0 - 0002be3700] BOOTMEM [ 0.000000] #30 [0002be3700 - 0002be3740] BOOTMEM [ 0.000000] #31 [0002be3740 - 0002be3780] BOOTMEM [ 0.000000] #32 [0002be3780 - 0002be37c0] BOOTMEM [ 0.000000] #33 [0002be37c0 - 0002be3800] BOOTMEM [ 0.000000] #34 [0002be3800 - 0002be3840] BOOTMEM [ 0.000000] #35 [0002be3840 - 0002be3880] BOOTMEM [ 0.000000] #36 [0002be3880 - 0002be38c0] BOOTMEM [ 0.000000] #37 [0002be38c0 - 0002be3900] BOOTMEM [ 0.000000] #38 [0002be3900 - 0002be3940] BOOTMEM [ 0.000000] #39 [0002be3940 - 0002be3980] BOOTMEM [ 0.000000] #40 [0002be3980 - 0002be39c0] BOOTMEM [ 0.000000] #41 [0002be39c0 - 0002be3a00] BOOTMEM [ 0.000000] #42 [0002be3a00 - 0002be3a40] BOOTMEM [ 0.000000] #43 [0002be3a40 - 0002be3a50] BOOTMEM [ 0.000000] #44 [0002be3a80 - 0002be3a90] BOOTMEM [ 0.000000] #45 [0002be3ac0 - 0002be3b00] BOOTMEM [ 0.000000] #46 [0002be3b00 - 0002be3b40] BOOTMEM [ 0.000000] #47 [0002c00000 - 0002c0e000] BOOTMEM [ 0.000000] #48 [0002e00000 - 0002e0e000] BOOTMEM [ 0.000000] #49 [0002be5b40 - 0002be5b44] BOOTMEM [ 0.000000] #50 [0002be5b80 - 0002be5b84] BOOTMEM [ 0.000000] #51 [0002be5bc0 - 0002be5bc8] BOOTMEM [ 0.000000] #52 [0002be5c00 - 0002be5c08] BOOTMEM [ 0.000000] #53 [0002be5c40 - 0002be5ce8] BOOTMEM [ 0.000000] #54 [0002be5d00 - 0002be5d68] BOOTMEM [ 0.000000] #55 [0002be5d80 - 0002be9d80] BOOTMEM [ 0.000000] #56 [0002c0e000 - 0002c8e000] BOOTMEM [ 0.000000] #57 [0002c8e000 - 0002cce000] BOOTMEM [ 0.000000] #58 [0002e0e000 - 0003d020ac] BOOTMEM [ 0.000000] Initializing HighMem for node 0 (000377fe:000bf670) [ 0.000000] Memory: 3075252k/3135936k available (4922k kernel code, 60164k reserved, 2325k data, 684k init, 2226560k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff16000 - 0xfffff000 ( 932 kB) [ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB) [ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) [ 0.000000] .init : 0xc0814000 - 0xc08bf000 ( 684 kB) [ 0.000000] .data : 0xc05ceabe - 0xc0813fa8 (2325 kB) [ 0.000000] .text : 0xc0100000 - 0xc05ceabe (4922 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=13, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:2304 nr_irqs:512 [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1729.041 MHz processor. [ 0.004008] Calibrating delay loop (skipped), value calculated using timer frequency.. 3458.08 BogoMIPS (lpj=6916164) [ 0.004014] pid_max: default: 32768 minimum: 301 [ 0.004037] Security Framework initialized [ 0.008009] AppArmor: AppArmor initialized [ 0.008011] Yama: becoming mindful. [ 0.008078] Mount-cache hash table entries: 512 [ 0.008239] Initializing cgroup subsys ns [ 0.008244] Initializing cgroup subsys cpuacct [ 0.008250] Initializing cgroup subsys memory [ 0.008260] Initializing cgroup subsys devices [ 0.008263] Initializing cgroup subsys freezer [ 0.008266] Initializing cgroup subsys net_cls [ 0.008299] CPU: Physical Processor ID: 0 [ 0.008301] CPU: Processor Core ID: 0 [ 0.008304] mce: CPU supports 6 MCE banks [ 0.008315] CPU0: Thermal monitoring enabled (TM1) [ 0.008319] using mwait in idle threads. [ 0.008329] Performance Events: PEBS fmt0+, Core2 events, Intel PMU driver. [ 0.008336] PEBS disabled due to CPU errata. [ 0.008344] ... version: 2 [ 0.008347] ... bit width: 40 [ 0.008349] ... generic registers: 2 [ 0.008351] ... value mask: 000000ffffffffff [ 0.008353] ... max period: 000000007fffffff [ 0.008356] ... fixed-purpose events: 3 [ 0.008358] ... event mask: 0000000700000003 [ 0.011679] ACPI: Core revision 20100428 [ 0.028016] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.028022] ftrace: allocating 21727 entries in 43 pages [ 0.032068] Enabling APIC mode: Flat. Using 1 I/O APICs [ 0.032481] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.072757] CPU0: Intel(R) Pentium(R) Dual CPU T2370 @ 1.73GHz stepping 0d [ 0.076000] Booting Node 0, Processors #1 Ok. [ 0.008000] Initializing CPU#1 [ 0.164018] Brought up 2 CPUs [ 0.164022] Total of 2 processors activated (6916.03 BogoMIPS). [ 0.164501] devtmpfs: initialized [ 0.165196] regulator: core version 0.5 [ 0.165235] Time: 8:21:31 Date: 08/21/10 [ 0.165283] NET: Registered protocol family 16 [ 0.165312] Trying to unpack rootfs image as initramfs... [ 0.165442] EISA bus registered [ 0.165452] ACPI: bus type pci registered [ 0.165552] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.165557] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.165559] PCI: Using MMCONFIG for extended config space [ 0.165562] PCI: Using configuration type 1 for base access [ 0.172105] bio: create slab at 0 [ 0.174856] ACPI: EC: Look up EC in DSDT [ 0.180948] ACPI: BIOS _OSI(Linux) query ignored [ 0.192764] ACPI: SSDT bf674c90 0022C (v01 PmRef Cpu0Ist 00003000 INTL 20051117) [ 0.193031] ACPI: Dynamic OEM Table Load: [ 0.193036] ACPI: SSDT (null) 0022C (v01 PmRef Cpu0Ist 00003000 INTL 20051117) [ 0.193438] ACPI: SSDT bf673610 005D7 (v01 PmRef Cpu0Cst 00003001 INTL 20051117) [ 0.194166] ACPI: Dynamic OEM Table Load: [ 0.194171] ACPI: SSDT (null) 005D7 (v01 PmRef Cpu0Cst 00003001 INTL 20051117) [ 0.194726] ACPI: SSDT bf674f10 000C4 (v01 PmRef Cpu1Ist 00003000 INTL 20051117) [ 0.196363] ACPI: Dynamic OEM Table Load: [ 0.196368] ACPI: SSDT (null) 000C4 (v01 PmRef Cpu1Ist 00003000 INTL 20051117) [ 0.196571] ACPI: SSDT bf676d10 00083 (v01 PmRef Cpu1Cst 00003000 INTL 20051117) [ 0.197300] ACPI: Dynamic OEM Table Load: [ 0.197304] ACPI: SSDT (null) 00083 (v01 PmRef Cpu1Cst 00003000 INTL 20051117) [ 0.204235] ACPI: Interpreter enabled [ 0.204241] ACPI: (supports S0 S3 S4 S5) [ 0.204280] ACPI: Using IOAPIC for interrupt routing [ 0.254465] ACPI: EC: GPE = 0x1c, I/O: command/status = 0x66, data = 0x62 [ 0.254927] ACPI: No dock devices found. [ 0.254933] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.255760] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.255772] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.255774] _OSC request data:1 8 1f [ 0.255782] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.257169] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 0.257174] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 0.257178] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.257183] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xfebfffff] [ 0.257279] pci 0000:00:02.0: reg 10: [mem 0xd4000000-0xd40fffff 64bit] [ 0.257289] pci 0000:00:02.0: reg 18: [mem 0xc0000000-0xcfffffff 64bit pref] [ 0.257296] pci 0000:00:02.0: reg 20: [io 0x5110-0x5117] [ 0.257349] pci 0000:00:02.1: reg 10: [mem 0x00000000-0x000fffff 64bit] [ 0.257612] pci 0000:00:1a.0: reg 20: [io 0x50c0-0x50df] [ 0.257781] pci 0000:00:1a.1: reg 20: [io 0x50a0-0x50bf] [ 0.257946] pci 0000:00:1a.7: reg 10: [mem 0xd8404c00-0xd8404fff] [ 0.258118] pci 0000:00:1a.7: PME# supported from D0 D3hot D3cold [ 0.258131] pci 0000:00:1a.7: PME# disabled [ 0.258247] pci 0000:00:1b.0: reg 10: [mem 0xd8400000-0xd8403fff 64bit] [ 0.258414] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.258426] pci 0000:00:1b.0: PME# disabled [ 0.258691] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.258702] pci 0000:00:1c.0: PME# disabled [ 0.258975] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 0.258986] pci 0000:00:1c.1: PME# disabled [ 0.259259] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 0.259270] pci 0000:00:1c.2: PME# disabled [ 0.259546] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold [ 0.259557] pci 0000:00:1c.3: PME# disabled [ 0.259733] pci 0000:00:1d.0: reg 20: [io 0x5080-0x509f] [ 0.259902] pci 0000:00:1d.1: reg 20: [io 0x5060-0x507f] [ 0.260080] pci 0000:00:1d.2: reg 20: [io 0x5040-0x505f] [ 0.260247] pci 0000:00:1d.7: reg 10: [mem 0xd8404800-0xd8404bff] [ 0.260418] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.260429] pci 0000:00:1d.7: PME# disabled [ 0.260822] pci 0000:00:1f.0: quirk: [io 0x0400-0x047f] claimed by ICH6 ACPI/GPIO/TCO [ 0.260830] pci 0000:00:1f.0: quirk: [io 0x0500-0x053f] claimed by ICH6 GPIO [ 0.260843] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 2 PIO at ff2c (mask 0003) [ 0.260850] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 3 PIO at 0068 (mask 0007) [ 0.260971] pci 0000:00:1f.1: reg 10: [io 0x5108-0x510f] [ 0.260989] pci 0000:00:1f.1: reg 14: [io 0x5124-0x5127] [ 0.261007] pci 0000:00:1f.1: reg 18: [io 0x5100-0x5107] [ 0.261026] pci 0000:00:1f.1: reg 1c: [io 0x5120-0x5123] [ 0.261044] pci 0000:00:1f.1: reg 20: [io 0x50e0-0x50ef] [ 0.261209] pci 0000:00:1f.2: reg 10: [io 0x50f8-0x50ff] [ 0.261228] pci 0000:00:1f.2: reg 14: [io 0x511c-0x511f] [ 0.261247] pci 0000:00:1f.2: reg 18: [io 0x50f0-0x50f7] [ 0.261265] pci 0000:00:1f.2: reg 1c: [io 0x5118-0x511b] [ 0.261284] pci 0000:00:1f.2: reg 20: [io 0x5020-0x503f] [ 0.261302] pci 0000:00:1f.2: reg 24: [mem 0xd8404000-0xd84047ff] [ 0.261417] pci 0000:00:1f.2: PME# supported from D3hot [ 0.261427] pci 0000:00:1f.2: PME# disabled [ 0.261508] pci 0000:00:1f.3: reg 10: [mem 0xd8405000-0xd84050ff] [ 0.261574] pci 0000:00:1f.3: reg 20: [io 0x5000-0x501f] [ 0.261814] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.261825] pci 0000:00:1c.0: bridge window [io 0x4000-0x4fff] [ 0.261836] pci 0000:00:1c.0: bridge window [mem 0xd7400000-0xd83fffff] [ 0.261854] pci 0000:00:1c.0: bridge window [mem 0xd0000000-0xd0ffffff 64bit pref] [ 0.262016] pci 0000:00:1c.1: PCI bridge to [bus 04-04] [ 0.262026] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.262037] pci 0000:00:1c.1: bridge window [mem 0xd6400000-0xd73fffff] [ 0.262056] pci 0000:00:1c.1: bridge window [mem 0xd1000000-0xd1ffffff 64bit pref] [ 0.262380] pci 0000:05:00.0: reg 10: [mem 0xd5300000-0xd530ffff 64bit] [ 0.262614] pci 0000:05:00.0: PME# supported from D3hot D3cold [ 0.262628] pci 0000:05:00.0: PME# disabled [ 0.268095] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 0.268108] pci 0000:00:1c.2: bridge window [io 0x2000-0x2fff] [ 0.268118] pci 0000:00:1c.2: bridge window [mem 0xd5300000-0xd63fffff] [ 0.268136] pci 0000:00:1c.2: bridge window [mem 0xd2000000-0xd2ffffff 64bit pref] [ 0.268451] pci 0000:06:00.0: reg 10: [mem 0xd4200000-0xd4203fff 64bit] [ 0.268674] pci 0000:06:00.0: supports D1 D2 [ 0.268676] pci 0000:06:00.0: PME# supported from D0 D3hot D3cold [ 0.268688] pci 0000:06:00.0: PME# disabled [ 0.268868] pci 0000:00:1c.3: PCI bridge to [bus 06-06] [ 0.268879] pci 0000:00:1c.3: bridge window [io 0x1000-0x1fff] [ 0.268889] pci 0000:00:1c.3: bridge window [mem 0xd4200000-0xd52fffff] [ 0.268908] pci 0000:00:1c.3: bridge window [mem 0xd3000000-0xd3ffffff 64bit pref] [ 0.269071] pci 0000:07:00.0: reg 10: [mem 0xd4100000-0xd41007ff] [ 0.269224] pci 0000:07:00.0: supports D1 D2 [ 0.269227] pci 0000:07:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.269237] pci 0000:07:00.0: PME# disabled [ 0.269324] pci 0000:07:00.1: reg 10: [mem 0xd4100a00-0xd4100aff] [ 0.269481] pci 0000:07:00.1: supports D1 D2 [ 0.269484] pci 0000:07:00.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.269494] pci 0000:07:00.1: PME# disabled [ 0.269584] pci 0000:07:00.2: reg 10: [mem 0xd4100900-0xd41009ff] [ 0.269738] pci 0000:07:00.2: supports D1 D2 [ 0.269740] pci 0000:07:00.2: PME# supported from D0 D1 D2 D3hot D3cold [ 0.269750] pci 0000:07:00.2: PME# disabled [ 0.269840] pci 0000:07:00.3: reg 10: [mem 0xd4100800-0xd41008ff] [ 0.269991] pci 0000:07:00.3: supports D1 D2 [ 0.269994] pci 0000:07:00.3: PME# supported from D0 D1 D2 D3hot D3cold [ 0.270004] pci 0000:07:00.3: PME# disabled [ 0.270173] pci 0000:00:1e.0: PCI bridge to [bus 07-07] (subtractive decode) [ 0.270184] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.270195] pci 0000:00:1e.0: bridge window [mem 0xd4100000-0xd41fffff] [ 0.270214] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.270218] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.270222] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.270225] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.270228] pci 0000:00:1e.0: bridge window [mem 0xc0000000-0xfebfffff] (subtractive decode) [ 0.270317] pci_bus 0000:00: on NUMA node 0 [ 0.270334] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.270668] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P32_._PRT] [ 0.270844] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP2._PRT] [ 0.270964] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP3._PRT] [ 0.271082] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP4._PRT] [ 0.271383] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.271394] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.271397] _OSC request data:1 1f 1f [ 0.284453] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 7 9 10 *11 12) [ 0.284631] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 7 9 10 *11 12) [ 0.284803] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 7 9 10 *11 12) [ 0.284971] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 7 9 10 *11 12) [ 0.285140] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 7 9 10 11 12) *0, disabled. [ 0.285309] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 7 9 *10 11 12) [ 0.285478] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 7 9 10 *11 12) [ 0.285645] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 7 9 10 *11 12) [ 0.285739] HEST: Table is not found! [ 0.285839] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 0.285867] vgaarb: loaded [ 0.286087] SCSI subsystem initialized [ 0.286196] libata version 3.00 loaded. [ 0.286270] usbcore: registered new interface driver usbfs [ 0.286287] usbcore: registered new interface driver hub [ 0.286320] usbcore: registered new device driver usb [ 0.286930] ACPI: WMI: Mapper loaded [ 0.286933] PCI: Using ACPI for IRQ routing [ 0.286937] PCI: pci_cache_line_size set to 64 bytes [ 0.287345] reserve RAM buffer: 0000000000002000 - 000000000000ffff [ 0.287348] reserve RAM buffer: 000000000009fc00 - 000000000009ffff [ 0.287352] reserve RAM buffer: 00000000bf4fe000 - 00000000bfffffff [ 0.287356] reserve RAM buffer: 00000000bf552000 - 00000000bfffffff [ 0.287361] reserve RAM buffer: 00000000bf5bb000 - 00000000bfffffff [ 0.287364] reserve RAM buffer: 00000000bf670000 - 00000000bfffffff [ 0.287545] NetLabel: Initializing [ 0.287548] NetLabel: domain hash size = 128 [ 0.287550] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.287569] NetLabel: unlabeled traffic allowed by default [ 0.287615] HPET: 3 timers in total, 0 timers will be used for per-cpu timer [ 0.287631] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 [ 0.287638] hpet0: 3 comparators, 64-bit 14.318180 MHz counter [ 0.292044] Switching to clocksource tsc [ 0.306206] AppArmor: AppArmor Filesystem Enabled [ 0.306229] pnp: PnP ACPI init [ 0.306256] ACPI: bus type pnp registered [ 0.307694] pnp 00:01: disabling [io 0x164e-0x164f] because it overlaps 0000:00:1c.3 BAR 13 [io 0x1000-0x1fff] [ 0.332421] pnp: PnP ACPI: found 10 devices [ 0.332425] ACPI: ACPI bus type pnp unregistered [ 0.332430] PnPBIOS: Disabled by ACPI PNP [ 0.332448] system 00:01: [io 0x0600-0x060f] has been reserved [ 0.332452] system 00:01: [io 0x0610] has been reserved [ 0.332456] system 00:01: [io 0x0800-0x080f] has been reserved [ 0.332460] system 00:01: [io 0x0810-0x0817] has been reserved [ 0.332463] system 00:01: [io 0x0400-0x047f] has been reserved [ 0.332467] system 00:01: [io 0x0500-0x053f] has been reserved [ 0.332474] system 00:01: [mem 0xe0000000-0xefffffff] has been reserved [ 0.332477] system 00:01: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.332481] system 00:01: [mem 0xfed14000-0xfed17fff] has been reserved [ 0.332485] system 00:01: [mem 0xfed18000-0xfed18fff] has been reserved [ 0.332488] system 00:01: [mem 0xfed19000-0xfed19fff] has been reserved [ 0.332493] system 00:01: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.332496] system 00:01: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.332500] system 00:01: [mem 0x32000000-0x320000ff] could not be reserved [ 0.367463] pci 0000:00:02.1: BAR 0: assigned [mem 0xd8500000-0xd85fffff 64bit] [ 0.367473] pci 0000:00:02.1: BAR 0: set to [mem 0xd8500000-0xd85fffff 64bit] (PCI address [0xd8500000-0xd85fffff] [ 0.367477] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.367484] pci 0000:00:1c.0: bridge window [io 0x4000-0x4fff] [ 0.367499] pci 0000:00:1c.0: bridge window [mem 0xd7400000-0xd83fffff] [ 0.367510] pci 0000:00:1c.0: bridge window [mem 0xd0000000-0xd0ffffff 64bit pref] [ 0.367528] pci 0000:00:1c.1: PCI bridge to [bus 04-04] [ 0.367535] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.367549] pci 0000:00:1c.1: bridge window [mem 0xd6400000-0xd73fffff] [ 0.367560] pci 0000:00:1c.1: bridge window [mem 0xd1000000-0xd1ffffff 64bit pref] [ 0.367578] pci 0000:00:1c.2: PCI bridge to [bus 05-05] [ 0.367585] pci 0000:00:1c.2: bridge window [io 0x2000-0x2fff] [ 0.367599] pci 0000:00:1c.2: bridge window [mem 0xd5300000-0xd63fffff] [ 0.367610] pci 0000:00:1c.2: bridge window [mem 0xd2000000-0xd2ffffff 64bit pref] [ 0.367629] pci 0000:00:1c.3: PCI bridge to [bus 06-06] [ 0.367636] pci 0000:00:1c.3: bridge window [io 0x1000-0x1fff] [ 0.367650] pci 0000:00:1c.3: bridge window [mem 0xd4200000-0xd52fffff] [ 0.367661] pci 0000:00:1c.3: bridge window [mem 0xd3000000-0xd3ffffff 64bit pref] [ 0.367680] pci 0000:00:1e.0: PCI bridge to [bus 07-07] [ 0.367683] pci 0000:00:1e.0: bridge window [io disabled] [ 0.367697] pci 0000:00:1e.0: bridge window [mem 0xd4100000-0xd41fffff] [ 0.367707] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.367757] alloc irq_desc for 16 on node -1 [ 0.367760] alloc kstat_irqs on node -1 [ 0.367770] pci 0000:00:1c.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.367795] pci 0000:00:1c.0: setting latency timer to 64 [ 0.367824] alloc irq_desc for 17 on node -1 [ 0.367826] alloc kstat_irqs on node -1 [ 0.367832] pci 0000:00:1c.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 0.367843] pci 0000:00:1c.1: setting latency timer to 64 [ 0.367867] alloc irq_desc for 18 on node -1 [ 0.367869] alloc kstat_irqs on node -1 [ 0.367873] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.367884] pci 0000:00:1c.2: setting latency timer to 64 [ 0.367907] alloc irq_desc for 19 on node -1 [ 0.367909] alloc kstat_irqs on node -1 [ 0.367913] pci 0000:00:1c.3: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 0.367924] pci 0000:00:1c.3: setting latency timer to 64 [ 0.367944] pci 0000:00:1e.0: setting latency timer to 64 [ 0.367953] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 0.367956] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 0.367959] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.367963] pci_bus 0000:00: resource 7 [mem 0xc0000000-0xfebfffff] [ 0.367966] pci_bus 0000:02: resource 0 [io 0x4000-0x4fff] [ 0.367969] pci_bus 0000:02: resource 1 [mem 0xd7400000-0xd83fffff] [ 0.367972] pci_bus 0000:02: resource 2 [mem 0xd0000000-0xd0ffffff 64bit pref] [ 0.367976] pci_bus 0000:04: resource 0 [io 0x3000-0x3fff] [ 0.367979] pci_bus 0000:04: resource 1 [mem 0xd6400000-0xd73fffff] [ 0.367982] pci_bus 0000:04: resource 2 [mem 0xd1000000-0xd1ffffff 64bit pref] [ 0.367985] pci_bus 0000:05: resource 0 [io 0x2000-0x2fff] [ 0.367988] pci_bus 0000:05: resource 1 [mem 0xd5300000-0xd63fffff] [ 0.367992] pci_bus 0000:05: resource 2 [mem 0xd2000000-0xd2ffffff 64bit pref] [ 0.367995] pci_bus 0000:06: resource 0 [io 0x1000-0x1fff] [ 0.367998] pci_bus 0000:06: resource 1 [mem 0xd4200000-0xd52fffff] [ 0.368001] pci_bus 0000:06: resource 2 [mem 0xd3000000-0xd3ffffff 64bit pref] [ 0.368004] pci_bus 0000:07: resource 1 [mem 0xd4100000-0xd41fffff] [ 0.368007] pci_bus 0000:07: resource 4 [io 0x0000-0x0cf7] [ 0.368010] pci_bus 0000:07: resource 5 [io 0x0d00-0xffff] [ 0.368013] pci_bus 0000:07: resource 6 [mem 0x000a0000-0x000bffff] [ 0.368016] pci_bus 0000:07: resource 7 [mem 0xc0000000-0xfebfffff] [ 0.368070] NET: Registered protocol family 2 [ 0.368161] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.368524] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.369142] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.369507] TCP: Hash tables configured (established 131072 bind 65536) [ 0.369510] TCP reno registered [ 0.369514] UDP hash table entries: 512 (order: 2, 16384 bytes) [ 0.369535] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) [ 0.369698] NET: Registered protocol family 1 [ 0.369727] pci 0000:00:02.0: Boot video device [ 0.370331] PCI: CLS 0 bytes, default 64 [ 0.370586] cpufreq-nforce2: No nForce2 chipset. [ 0.370628] Scanning for low memory corruption every 60 seconds [ 0.370815] audit: initializing netlink socket (disabled) [ 0.370837] type=2000 audit(1282378891.364:1): initialized [ 0.383748] highmem bounce pool size: 64 pages [ 0.383755] HugeTLB registered 4 MB page size, pre-allocated 0 pages [ 0.385683] VFS: Disk quotas dquot_6.5.2 [ 0.385775] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 0.386550] fuse init (API version 7.14) [ 0.386667] msgmni has been set to 1657 [ 0.387048] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.387052] io scheduler noop registered [ 0.387055] io scheduler deadline registered [ 0.387072] io scheduler cfq registered (default) [ 0.387255] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.387383] alloc irq_desc for 40 on node -1 [ 0.387386] alloc kstat_irqs on node -1 [ 0.387411] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 0.387624] pcieport 0000:00:1c.1: setting latency timer to 64 [ 0.387748] alloc irq_desc for 41 on node -1 [ 0.387750] alloc kstat_irqs on node -1 [ 0.387769] pcieport 0000:00:1c.1: irq 41 for MSI/MSI-X [ 0.387994] pcieport 0000:00:1c.2: setting latency timer to 64 [ 0.388118] alloc irq_desc for 42 on node -1 [ 0.388120] alloc kstat_irqs on node -1 [ 0.388140] pcieport 0000:00:1c.2: irq 42 for MSI/MSI-X [ 0.388344] pcieport 0000:00:1c.3: setting latency timer to 64 [ 0.388468] alloc irq_desc for 43 on node -1 [ 0.388470] alloc kstat_irqs on node -1 [ 0.388489] pcieport 0000:00:1c.3: irq 43 for MSI/MSI-X [ 0.388714] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.388897] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.388910] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.388912] _OSC request data:1 0 1f [ 0.389059] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.389070] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.389072] _OSC request data:1 0 1f [ 0.389212] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.389222] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.389225] _OSC request data:1 0 1f [ 0.389365] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.389375] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.389377] _OSC request data:1 0 1f [ 0.389539] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.389549] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.389551] _OSC request data:1 0 1f [ 0.389695] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.389705] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.389707] _OSC request data:1 0 1f [ 0.389848] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.389858] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.389860] _OSC request data:1 0 1f [ 0.389998] ACPI Warning for \_SB_.PCI0._OSC: Parameter count mismatch - ASL declared 5, ACPI requires 4 (20100428/nspredef-352) [ 0.390007] \_SB_.PCI0:_OSC evaluation returned wrong type [ 0.390010] _OSC request data:1 0 1f [ 0.390034] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.392630] ACPI: AC Adapter [AC] (on-line) [ 0.392754] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:02/PNP0C0C:00/input/input0 [ 0.392759] ACPI: Power Button [PWRB] [ 0.392815] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:02/PNP0C0D:00/input/input1 [ 0.392872] ACPI: Lid Switch [LID0] [ 0.392926] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:02/PNP0C0E:00/input/input2 [ 0.392929] ACPI: Sleep Button [SLPB] [ 0.393005] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3 [ 0.393008] ACPI: Power Button [PWRF] [ 0.393426] ACPI: acpi_idle registered with cpuidle [ 0.396530] Monitor-Mwait will be used to enter C-1 state [ 0.396577] Monitor-Mwait will be used to enter C-2 state [ 0.396607] Monitor-Mwait will be used to enter C-3 state [ 0.396616] Marking TSC unstable due to TSC halts in idle [ 0.397176] Switching to clocksource hpet [ 0.439822] thermal LNXTHERM:01: registered as thermal_zone0 [ 0.439836] ACPI: Thermal Zone [TZ01] (40 C) [ 0.439987] ERST: Table is not found! [ 0.441958] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.443809] brd: module loaded [ 0.444482] loop: module loaded [ 0.444750] ata_piix 0000:00:1f.1: version 2.13 [ 0.444771] ata_piix 0000:00:1f.1: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 0.444837] ata_piix 0000:00:1f.1: setting latency timer to 64 [ 0.445073] scsi0 : ata_piix [ 0.445184] isapnp: Scanning for PnP cards... [ 0.494261] Freeing initrd memory: 10508k freed [ 0.495022] scsi1 : ata_piix [ 0.496274] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0x50e0 irq 14 [ 0.496283] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x50e8 irq 15 [ 0.496884] Fixed MDIO Bus: probed [ 0.496942] PPP generic driver version 2.4.2 [ 0.497266] tun: Universal TUN/TAP device driver, 1.6 [ 0.497270] tun: (C) 1999-2004 Max Krasnyansky [ 0.497444] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.497522] ehci_hcd 0000:00:1a.7: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.497577] ehci_hcd 0000:00:1a.7: setting latency timer to 64 [ 0.497584] ehci_hcd 0000:00:1a.7: EHCI Host Controller [ 0.497662] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 1 [ 0.497731] ehci_hcd 0000:00:1a.7: debug port 1 [ 0.501639] ehci_hcd 0000:00:1a.7: cache line size of 64 is not supported [ 0.501704] ehci_hcd 0000:00:1a.7: irq 18, io mem 0xd8404c00 [ 0.517031] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00 [ 0.517248] hub 1-0:1.0: USB hub found [ 0.517256] hub 1-0:1.0: 4 ports detected [ 0.517380] alloc irq_desc for 23 on node -1 [ 0.517383] alloc kstat_irqs on node -1 [ 0.517392] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.517422] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 0.517429] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 0.517486] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 2 [ 0.517540] ehci_hcd 0000:00:1d.7: debug port 1 [ 0.521436] ehci_hcd 0000:00:1d.7: cache line size of 64 is not supported [ 0.521464] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xd8404800 [ 0.537031] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 0.537178] hub 2-0:1.0: USB hub found [ 0.537184] hub 2-0:1.0: 6 ports detected [ 0.537300] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.537323] uhci_hcd: USB Universal Host Controller Interface driver [ 0.537373] uhci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.537386] uhci_hcd 0000:00:1a.0: setting latency timer to 64 [ 0.537392] uhci_hcd 0000:00:1a.0: UHCI Host Controller [ 0.537438] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 3 [ 0.537496] uhci_hcd 0000:00:1a.0: irq 16, io base 0x000050c0 [ 0.537648] hub 3-0:1.0: USB hub found [ 0.537653] hub 3-0:1.0: 2 ports detected [ 0.537744] alloc irq_desc for 21 on node -1 [ 0.537747] alloc kstat_irqs on node -1 [ 0.537753] uhci_hcd 0000:00:1a.1: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 0.537767] uhci_hcd 0000:00:1a.1: setting latency timer to 64 [ 0.537773] uhci_hcd 0000:00:1a.1: UHCI Host Controller [ 0.537814] uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 4 [ 0.537868] uhci_hcd 0000:00:1a.1: irq 21, io base 0x000050a0 [ 0.538019] hub 4-0:1.0: USB hub found [ 0.538025] hub 4-0:1.0: 2 ports detected [ 0.538112] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.538125] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 0.538131] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 0.538170] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 5 [ 0.538210] uhci_hcd 0000:00:1d.0: irq 23, io base 0x00005080 [ 0.538359] hub 5-0:1.0: USB hub found [ 0.538364] hub 5-0:1.0: 2 ports detected [ 0.538449] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.538461] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 0.538467] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 0.538506] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 6 [ 0.538561] uhci_hcd 0000:00:1d.1: irq 19, io base 0x00005060 [ 0.538708] hub 6-0:1.0: USB hub found [ 0.538715] hub 6-0:1.0: 2 ports detected [ 0.538804] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.538816] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 0.538822] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 0.538867] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 7 [ 0.538909] uhci_hcd 0000:00:1d.2: irq 18, io base 0x00005040 [ 0.539059] hub 7-0:1.0: USB hub found [ 0.539064] hub 7-0:1.0: 2 ports detected [ 0.539226] PNP: PS/2 Controller [PNP0303:KBC0,PNP0f13:MSE0] at 0x60,0x64 irq 1,12 [ 0.580440] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.580460] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.580595] mice: PS/2 mouse device common for all mice [ 0.582586] rtc_cmos 00:03: RTC can wake from S4 [ 0.582644] rtc_cmos 00:03: rtc core: registered rtc_cmos as rtc0 [ 0.582687] rtc0: alarms up to one month, 242 bytes nvram, hpet irqs [ 0.582831] device-mapper: uevent: version 1.0.3 [ 0.583014] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 0.583104] device-mapper: multipath: version 1.1.1 loaded [ 0.583107] device-mapper: multipath round-robin: version 1.0.0 loaded [ 0.583255] EISA: Probing bus 0 at eisa.0 [ 0.583257] EISA: Cannot allocate resource for mainboard [ 0.583260] Cannot allocate resource for EISA slot 1 [ 0.583263] Cannot allocate resource for EISA slot 2 [ 0.583265] Cannot allocate resource for EISA slot 3 [ 0.583268] Cannot allocate resource for EISA slot 4 [ 0.583270] Cannot allocate resource for EISA slot 5 [ 0.583273] Cannot allocate resource for EISA slot 6 [ 0.583275] Cannot allocate resource for EISA slot 7 [ 0.583278] Cannot allocate resource for EISA slot 8 [ 0.583280] EISA: Detected 0 cards. [ 0.583461] cpuidle: using governor ladder [ 0.583594] cpuidle: using governor menu [ 0.584001] TCP cubic registered [ 0.584162] NET: Registered protocol family 10 [ 0.584631] lo: Disabled Privacy Extensions [ 0.585036] NET: Registered protocol family 17 [ 0.585581] Using IPI No-Shortcut mode [ 0.585686] PM: Resume from disk failed. [ 0.585700] registered taskstats version 1 [ 0.586569] Magic number: 6:260:372 [ 0.586691] rtc_cmos 00:03: setting system clock to 2010-08-21 08:21:31 UTC (1282378891) [ 0.586695] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.586697] EDD information not available. [ 0.608706] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4 [ 0.670027] ata1.00: ATAPI: HL-DT-ST DVDRAM GSA-T40N, JP01, max UDMA/33 [ 0.685345] ata1.00: configured for UDMA/33 [ 0.792177] ACPI: Battery Slot [BAT0] (battery present) [ 0.810759] isapnp: No Plug & Play device found [ 0.814471] scsi 0:0:0:0: CD-ROM HL-DT-ST DVDRAM GSA-T40N JP01 PQ: 0 ANSI: 5 [ 0.825861] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 0.825865] Uniform CD-ROM driver Revision: 3.20 [ 0.826005] sr 0:0:0:0: Attached scsi CD-ROM sr0 [ 0.826075] sr 0:0:0:0: Attached scsi generic sg0 type 5 [ 0.826157] Freeing unused kernel memory: 684k freed [ 0.826635] Write protecting the kernel text: 4924k [ 0.826707] Write protecting the kernel read-only data: 1972k [ 0.849772] udev: starting version 151 [ 0.944095] usb 2-3: new high speed USB device using ehci_hcd and address 2 [ 0.972966] sdhci: Secure Digital Host Controller Interface driver [ 0.972970] sdhci: Copyright(c) Pierre Ossman [ 0.977640] tg3.c:v3.110 (April 9, 2010) [ 0.977720] tg3 0000:05:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 0.977742] tg3 0000:05:00.0: setting latency timer to 64 [ 0.995655] ahci 0000:00:1f.2: version 3.0 [ 0.995685] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.995768] alloc irq_desc for 44 on node -1 [ 0.995771] alloc kstat_irqs on node -1 [ 0.995793] ahci 0000:00:1f.2: irq 44 for MSI/MSI-X [ 0.995923] ahci 0000:00:1f.2: AHCI 0001.0100 32 slots 3 ports 3 Gbps 0x7 impl SATA mode [ 0.995927] ahci 0000:00:1f.2: flags: 64bit ncq sntf pm led clo pio slum part ccc ems [ 0.995939] ahci 0000:00:1f.2: setting latency timer to 64 [ 1.024801] alloc irq_desc for 20 on node -1 [ 1.024805] alloc kstat_irqs on node -1 [ 1.024815] firewire_ohci 0000:07:00.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20 [ 1.024828] firewire_ohci 0000:07:00.0: setting latency timer to 64 [ 1.056254] scsi2 : ahci [ 1.087519] scsi3 : ahci [ 1.100926] scsi4 : ahci [ 1.101212] ata3: SATA max UDMA/133 abar m2048@0xd8404000 port 0xd8404100 irq 44 [ 1.101218] ata4: SATA max UDMA/133 abar m2048@0xd8404000 port 0xd8404180 irq 44 [ 1.101225] ata5: SATA max UDMA/133 abar m2048@0xd8404000 port 0xd8404200 irq 44 [ 1.103967] tg3 0000:05:00.0: eth0: Tigon3 [partno(BCM95787m) rev b002] (PCI Express) MAC address 00:1e:ec:42:92:91 [ 1.103972] tg3 0000:05:00.0: eth0: attached PHY is 5787 (10/100/1000Base-T Ethernet) (WireSpeed[1]) [ 1.103977] tg3 0000:05:00.0: eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1] [ 1.103980] tg3 0000:05:00.0: eth0: dma_rwctrl[76180000] dma_mask[64-bit] [ 1.111693] Initializing USB Mass Storage driver... [ 1.111840] scsi5 : usb-storage 2-3:1.0 [ 1.111945] usbcore: registered new interface driver usb-storage [ 1.111948] USB Mass Storage support registered. [ 1.120046] firewire_ohci: Added fw-ohci device 0000:07:00.0, OHCI v1.10, 4 IR + 4 IT contexts, quirks 0x0 [ 1.120091] sdhci-pci 0000:07:00.1: SDHCI controller found [1180:0822] (rev 22) [ 1.120122] alloc irq_desc for 22 on node -1 [ 1.120125] alloc kstat_irqs on node -1 [ 1.120134] sdhci-pci 0000:07:00.1: PCI INT B -> GSI 22 (level, low) -> IRQ 22 [ 1.121172] sdhci-pci 0000:07:00.1: Will use DMA mode even though HW doesn't fully claim to support it. [ 1.121186] sdhci-pci 0000:07:00.1: setting latency timer to 64 [ 1.122249] Registered led device: mmc0:: [ 1.123287] mmc0: SDHCI controller on PCI [0000:07:00.1] using DMA [ 1.317099] usb 3-1: new full speed USB device using uhci_hcd and address 2 [ 1.420108] ata4: SATA link down (SStatus 0 SControl 300) [ 1.420145] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.420172] ata5: SATA link down (SStatus 0 SControl 300) [ 1.421122] ata3.00: ACPI cmd ef/10:03:00:00:00:a0 (SET FEATURES) filtered out [ 1.421131] ata3.00: ATA-8: ST9160827AS, 3.AAA, max UDMA/133 [ 1.421134] ata3.00: 312581808 sectors, multi 16: LBA48 NCQ (depth 31/32) [ 1.422254] ata3.00: ACPI cmd ef/10:03:00:00:00:a0 (SET FEATURES) filtered out [ 1.422282] ata3.00: configured for UDMA/133 [ 1.436260] scsi 2:0:0:0: Direct-Access ATA ST9160827AS 3.AA PQ: 0 ANSI: 5 [ 1.436458] sd 2:0:0:0: Attached scsi generic sg1 type 0 [ 1.436599] sd 2:0:0:0: [sda] 312581808 512-byte logical blocks: (160 GB/149 GiB) [ 1.436786] sd 2:0:0:0: [sda] Write Protect is off [ 1.436790] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.436877] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.437298] sda: sda1 sda2 sda3 sda4 < sda5 sda6 > [ 1.479446] sd 2:0:0:0: [sda] Attached SCSI disk [ 1.522666] usbcore: registered new interface driver hiddev [ 1.530373] input: Logitech USB Gaming Mouse as /devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/input/input5 [ 1.530498] generic-usb 0003:046D:C041.0001: input,hidraw0: USB HID v1.11 Mouse [Logitech USB Gaming Mouse] on usb-0000:00:1a.0-1/input0 [ 1.539682] generic-usb 0003:046D:C041.0002: hiddev96,hidraw1: USB HID v1.11 Device [Logitech USB Gaming Mouse] on usb-0000:00:1a.0-1/input1 [ 1.539706] usbcore: registered new interface driver usbhid [ 1.539709] usbhid: USB HID core driver [ 1.609179] firewire_core: created device fw0: GUID b6401e2000023f84, S400 [ 2.108832] scsi 5:0:0:0: Direct-Access WD 5000AAJ External 1.06 PQ: 0 ANSI: 0 [ 2.109639] sd 5:0:0:0: Attached scsi generic sg2 type 0 [ 2.110165] sd 5:0:0:0: [sdb] 976773168 512-byte logical blocks: (500 GB/465 GiB) [ 2.110931] sd 5:0:0:0: [sdb] Write Protect is off [ 2.110936] sd 5:0:0:0: [sdb] Mode Sense: 00 00 00 00 [ 2.110939] sd 5:0:0:0: [sdb] Assuming drive cache: write through [ 2.112425] sd 5:0:0:0: [sdb] Assuming drive cache: write through [ 2.112435] sdb: sdb1 [ 2.114908] sd 5:0:0:0: [sdb] Assuming drive cache: write through [ 2.114914] sd 5:0:0:0: [sdb] Attached SCSI disk [ 6.853175] EXT3-fs: barriers not enabled [ 6.864401] kjournald starting. Commit interval 5 seconds [ 6.864447] EXT3-fs (sda2): mounted filesystem with ordered data mode [ 9.527294] udev: starting version 151 [ 9.531442] Swap area shorter than signature indicates [ 10.034268] Linux agpgart interface v0.103 [ 10.042456] lib80211: common routines for IEEE802.11 drivers [ 10.042460] lib80211_crypt: registered algorithm 'NULL' [ 10.188763] lp: driver loaded but no devices found [ 10.355128] lirc_dev: IR Remote Control driver registered, major 61 [ 10.356629] agpgart-intel 0000:00:00.0: Intel 965GM Chipset [ 10.357805] agpgart-intel 0000:00:00.0: detected 7676K stolen memory [ 10.365414] BUG: unable to handle kernel NULL pointer dereference at (null) [ 10.365633] IP: [ 10.365702] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xc0000000 [ 10.365852] [] kfifo_alloc+0x26/0x90 [ 10.365927] *pde = 00000000 [ 10.366069] Oops: 0002 [#1] SMP [ 10.366275] last sysfs file: /sys/module/intel_agp/initstate [ 10.366361] Modules linked in: lirc_ene0100(+) i2c_algo_bit intel_agp lirc_dev video snd soundcore snd_page_alloc psmouse serio_raw lib80211 agpgart output lp parport usbhid hid usb_storage firewire_ohci ahci firewire_core sdhci_pci tg3 sdhci led_class crc_itu_t libahci [ 10.368016] [ 10.368016] Pid: 453, comm: modprobe Not tainted 2.6.35-17-generic #23-Ubuntu Nettiling/Aspire 5720Z [ 10.368016] EIP: 0060:[] EFLAGS: 00010286 CPU: 0 [ 10.368016] EIP is at kfifo_alloc+0x26/0x90 [ 10.368016] EAX: f5faa000 EBX: 00001000 ECX: c01665b2 EDX: c01665b2 [ 10.368016] ESI: 00000000 EDI: f5d09e40 EBP: f5cf1e40 ESP: f5cf1e38 [ 10.368016] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 10.368016] Process modprobe (pid: 453, ti=f5cf0000 task=f68a3f70 task.ti=f5cf0000) [ 10.368016] Stack: [ 10.368016] f695ce40 f6a1d540 f5cf1e68 f806bdb7 00000020 000080d0 f5cf1e68 f7232200 [ 10.368016] <0> fffffff4 f806bf90 f7232200 f806c3e0 f5cf1e7c c03c737e f7232200 f806c400 [ 10.368016] <0> f806c400 f5cf1ea0 c03ffa30 f72322d0 f5cf1ea0 c0406c87 00000000 f7232200 [ 10.368016] Call Trace: [ 10.368016] [] ? ene_probe+0x157/0x30b [lirc_ene0100] [ 10.368016] [] ? pnp_device_probe+0x6e/0xd0 [ 10.368016] [] ? really_probe+0x50/0x150 [ 10.368016] [] ? pm_runtime_barrier+0x57/0xb0 [ 10.368016] [] ? driver_probe_device+0x3c/0x60 [ 10.368016] [] ? __driver_attach+0x81/0x90 [ 10.368016] [] ? bus_for_each_dev+0x53/0x80 [ 10.368016] [] ? driver_attach+0x1e/0x20 [ 10.368016] [] ? __driver_attach+0x0/0x90 [ 10.368016] [] ? bus_add_driver+0xd5/0x280 [ 10.368016] [] ? pnp_device_remove+0x0/0x40 [ 10.368016] [] ? driver_register+0x6a/0x130 [ 10.368016] [] ? tracepoint_module_notify+0x27/0x30 [ 10.368016] [] ? pnp_register_driver+0x1c/0x20 [ 10.368016] [] ? ene_init+0x38/0x3a [lirc_ene0100] [ 10.368016] [] ? __blocking_notifier_call_chain+0x54/0x70 [ 10.368016] [] ? do_one_initcall+0x32/0x1a0 [ 10.368016] [] ? ene_init+0x0/0x3a [lirc_ene0100] [ 10.368016] [] ? sys_init_module+0x9b/0x1e0 [ 10.368016] [] ? sys_close+0x75/0xc0 [ 10.368016] [] ? syscall_call+0x7/0xb [ 10.368016] Code: 90 8d 74 26 00 55 89 e5 56 53 0f 1f 44 00 00 89 d3 89 c6 85 db 89 ca 8d 43 ff 74 31 85 d8 75 25 89 d8 e8 7e 61 0a 00 85 c0 74 39 <89> 06 31 c0 89 5e 04 c7 46 0c 00 00 00 00 c7 46 08 00 00 00 00 [ 10.368016] EIP: [] kfifo_alloc+0x26/0x90 SS:ESP 0068:f5cf1e38 [ 10.368016] CR2: 0000000000000000 [ 10.377304] ---[ end trace 4928562ce252ec85 ]--- [ 10.502505] type=1400 audit(1282378901.411:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient3" pid=674 comm="apparmor_parser" [ 10.503466] type=1400 audit(1282378901.411:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=674 comm="apparmor_parser" [ 10.504077] type=1400 audit(1282378901.415:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=674 comm="apparmor_parser" [ 10.687978] [drm] Initialized drm 1.1.0 20060810 [ 10.688741] r852 0000:07:00.3: PCI INT B -> GSI 22 (level, low) -> IRQ 22 [ 10.688856] r852 0000:07:00.3: setting latency timer to 64 [ 10.689093] r852: driver loaded succesfully [ 10.777118] wl: module license 'MIXED/Proprietary' taints kernel. [ 10.784479] wl 0000:06:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 10.784624] wl 0000:06:00.0: setting latency timer to 64 [ 10.854238] input: PS/2 Mouse as /devices/platform/i8042/serio1/input/input6 [ 10.890037] input: AlpsPS/2 ALPS GlidePoint as /devices/platform/i8042/serio1/input/input7 [ 10.896370] lib80211_crypt: registered algorithm 'TKIP' [ 10.896711] eth1: Broadcom BCM4315 802.11 Hybrid Wireless Controller 5.60.48.36 [ 11.135544] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 11.135637] i915 0000:00:02.0: setting latency timer to 64 [ 11.172233] alloc irq_desc for 45 on node -1 [ 11.172301] alloc kstat_irqs on node -1 [ 11.172378] i915 0000:00:02.0: irq 45 for MSI/MSI-X [ 11.172466] [drm] set up 7M of stolen space [ 11.278709] [drm] initialized overlay support [ 11.584063] Skipping EDID probe due to cached edid [ 12.073887] Console: switching to colour frame buffer device 160x50 [ 12.078531] fb0: inteldrmfb frame buffer device [ 12.078533] drm: registered panic notifier [ 12.078537] Slow work thread pool: Starting up [ 12.078620] Slow work thread pool: Ready [ 12.392160] acpi device:3a: registered as cooling_device2 [ 12.392550] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:01/input/input8 [ 12.392702] ACPI: Video Device [OVGA] (multi-head: yes rom: no post: no) [ 12.392796] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 12.393125] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 12.393321] alloc irq_desc for 46 on node -1 [ 12.393364] alloc kstat_irqs on node -1 [ 12.393424] HDA Intel 0000:00:1b.0: irq 46 for MSI/MSI-X [ 12.393547] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 12.724086] Skipping EDID probe due to cached edid [ 12.895312] EXT3-fs (sda2): using internal journal [ 13.299916] EXT3-fs: barriers not enabled [ 13.311097] kjournald starting. Commit interval 5 seconds [ 13.311329] EXT3-fs (sda1): using internal journal [ 13.311335] EXT3-fs (sda1): mounted filesystem with ordered data mode [ 14.180926] EXT4-fs (sda6): warning: maximal mount count reached, running e2fsck is recommended [ 14.183731] EXT4-fs (sda6): mounted filesystem with ordered data mode. Opts: (null) [ 19.302046] alloc irq_desc for 47 on node -1 [ 19.302052] alloc kstat_irqs on node -1 [ 19.302092] tg3 0000:05:00.0: irq 47 for MSI/MSI-X [ 19.471528] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 19.694795] type=1400 audit(1282378910.603:5): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient3" pid=1040 comm="apparmor_parser" [ 19.695670] type=1400 audit(1282378910.603:6): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1040 comm="apparmor_parser" [ 19.696154] type=1400 audit(1282378910.603:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=1040 comm="apparmor_parser" [ 19.739891] type=1400 audit(1282378910.647:8): apparmor="STATUS" operation="profile_load" name="/usr/share/gdm/guest-session/Xsession" pid=1039 comm="apparmor_parser" [ 19.948473] type=1400 audit(1282378910.859:9): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince" pid=1042 comm="apparmor_parser" [ 19.959537] type=1400 audit(1282378910.867:10): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-previewer" pid=1042 comm="apparmor_parser" [ 19.962053] type=1400 audit(1282378910.871:11): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=1046 comm="apparmor_parser" [ 19.963085] type=1400 audit(1282378910.871:12): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=1046 comm="apparmor_parser" [ 19.966500] type=1400 audit(1282378910.875:13): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-thumbnailer" pid=1042 comm="apparmor_parser" [ 20.000288] type=1400 audit(1282378910.907:14): apparmor="STATUS" operation="profile_load" name="/usr/sbin/mysqld-akonadi" pid=1048 comm="apparmor_parser" [ 21.087780] tg3 0000:05:00.0: eth0: Link is up at 100 Mbps, full duplex [ 21.087786] tg3 0000:05:00.0: eth0: Flow control is off for TX and off for RX [ 21.088025] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ 22.035459] apm: BIOS not found. Bug: 622034 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-17-generic (buildd@yellow) (gcc version 4.4.5 20100816 (prerelease) (Ubuntu/Linaro 4.4.4-9ubuntu1) ) #23-Ubuntu SMP Fri Aug 20 01:22:04 UTC 2010 (Ubuntu 2.6.35-17.23-generic 2.6.35.2) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-17-generic root=UUID=dc17aa56-caa0-4d4a-a916-96d0086fcc11 ro quiet splash [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) [ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000afd70000 (usable) [ 0.000000] BIOS-e820: 00000000afd70000 - 00000000afdbf000 (reserved) [ 0.000000] BIOS-e820: 00000000afdbf000 - 00000000afe58000 (usable) [ 0.000000] BIOS-e820: 00000000afe58000 - 00000000afebf000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000afebf000 - 00000000afeec000 (usable) [ 0.000000] BIOS-e820: 00000000afeec000 - 00000000afeff000 (ACPI data) [ 0.000000] BIOS-e820: 00000000afeff000 - 00000000aff00000 (usable) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000e1000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000fff00000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 0000000140000000 (usable) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI 2.4 present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0x140000 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-through [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 00FFF00000 mask FFFFF00000 write-protect [ 0.000000] 1 base 0000000000 mask FF80000000 write-back [ 0.000000] 2 base 0080000000 mask FFE0000000 write-back [ 0.000000] 3 base 00A0000000 mask FFF0000000 write-back [ 0.000000] 4 base 0100000000 mask FFC0000000 write-back [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] TOM2: 0000000140000000 aka 5120M [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] last_pfn = 0xaff00 max_arch_pfn = 0x400000000 [ 0.000000] e820 update range: 0000000000001000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009fc00 (usable) [ 0.000000] modified: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 00000000afd70000 (usable) [ 0.000000] modified: 00000000afd70000 - 00000000afdbf000 (reserved) [ 0.000000] modified: 00000000afdbf000 - 00000000afe58000 (usable) [ 0.000000] modified: 00000000afe58000 - 00000000afebf000 (ACPI NVS) [ 0.000000] modified: 00000000afebf000 - 00000000afeec000 (usable) [ 0.000000] modified: 00000000afeec000 - 00000000afeff000 (ACPI data) [ 0.000000] modified: 00000000afeff000 - 00000000aff00000 (usable) [ 0.000000] modified: 00000000e0000000 - 00000000e1000000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000fff00000 - 0000000100000000 (reserved) [ 0.000000] modified: 0000000100000000 - 0000000140000000 (usable) [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] init_memory_mapping: 0000000000000000-00000000aff00000 [ 0.000000] 0000000000 - 00afe00000 page 2M [ 0.000000] 00afe00000 - 00aff00000 page 4k [ 0.000000] kernel direct mapping tables up to aff00000 @ 16000-1b000 [ 0.000000] init_memory_mapping: 0000000100000000-0000000140000000 [ 0.000000] 0100000000 - 0140000000 page 2M [ 0.000000] kernel direct mapping tables up to 140000000 @ 19000-1f000 [ 0.000000] RAMDISK: 37574000 - 37ff0000 [ 0.000000] ACPI: RSDP 00000000000fe020 00024 (v02 HP ) [ 0.000000] ACPI: XSDT 00000000afefe120 0005C (v01 HPQOEM SLIC-MPC 00000001 01000013) [ 0.000000] ACPI: FACP 00000000afefd000 000F4 (v04 HP TRINITY 00000003 LOHR 01000013) [ 0.000000] ACPI: DSDT 00000000afeef000 0A2F0 (v01 HP TRINITY F0000000 LOHR 01000013) [ 0.000000] ACPI: FACS 00000000afe61000 00040 [ 0.000000] ACPI: HPET 00000000afefc000 00038 (v01 HPQOEM SLIC-MPC 00000001 LOHR 01000013) [ 0.000000] ACPI: APIC 00000000afefb000 00084 (v02 HPQOEM SLIC-MPC 00000001 LOHR 01000013) [ 0.000000] ACPI: MCFG 00000000afefa000 0003C (v01 HPQOEM SLIC-MPC 00000001 LOHR 01000013) [ 0.000000] ACPI: BOOT 00000000afeee000 00028 (v01 HPQOEM SLIC-MPC 00000001 LOHR 01000013) [ 0.000000] ACPI: SLIC 00000000afeed000 00176 (v01 HPQOEM SLIC-MPC 00000001 LOHR 01000013) [ 0.000000] ACPI: SSDT 00000000afeec000 00386 (v01 AMD PowerNow 00000001 AMD 00000001) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] Scanning NUMA topology in Northbridge 24 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-0000000140000000 [ 0.000000] Initmem setup node 0 0000000000000000-0000000140000000 [ 0.000000] NODE_DATA [0000000100000000 - 0000000100004fff] [ 0.000000] [ffffea0000000000-ffffea00045fffff] PMD -> [ffff880100200000-ffff8801037fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal 0x00100000 -> 0x00140000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[6] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x000afd70 [ 0.000000] 0: 0x000afdbf -> 0x000afe58 [ 0.000000] 0: 0x000afebf -> 0x000afeec [ 0.000000] 0: 0x000afeff -> 0x000aff00 [ 0.000000] 0: 0x00100000 -> 0x00140000 [ 0.000000] On node 0 totalpages: 982470 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3927 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 14280 pages used for memmap [ 0.000000] DMA32 zone: 702063 pages, LIFO batch:31 [ 0.000000] Normal zone: 3584 pages used for memmap [ 0.000000] Normal zone: 258560 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x04] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 4, version 33, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x1002a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 4 CPUs, 2 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [1a000 - 1a7ff] [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] PM: Registered nosave memory: 00000000afd70000 - 00000000afdbf000 [ 0.000000] PM: Registered nosave memory: 00000000afe58000 - 00000000afebf000 [ 0.000000] PM: Registered nosave memory: 00000000afeec000 - 00000000afeff000 [ 0.000000] PM: Registered nosave memory: 00000000aff00000 - 00000000e0000000 [ 0.000000] PM: Registered nosave memory: 00000000e0000000 - 00000000e1000000 [ 0.000000] PM: Registered nosave memory: 00000000e1000000 - 00000000fec00000 [ 0.000000] PM: Registered nosave memory: 00000000fec00000 - 00000000fec01000 [ 0.000000] PM: Registered nosave memory: 00000000fec01000 - 00000000fee00000 [ 0.000000] PM: Registered nosave memory: 00000000fee00000 - 00000000fee01000 [ 0.000000] PM: Registered nosave memory: 00000000fee01000 - 00000000fff00000 [ 0.000000] PM: Registered nosave memory: 00000000fff00000 - 0000000100000000 [ 0.000000] Allocating PCI resources starting at aff00000 (gap: aff00000:30100000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:4 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 30 pages/cpu @ffff880001e00000 s91456 r8192 d23232 u524288 [ 0.000000] pcpu-alloc: s91456 r8192 d23232 u524288 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 [ 0.000000] early_res array is doubled to 128 at [1a800 - 1b7ff] [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 964550 [ 0.000000] Policy zone: Normal [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-17-generic root=UUID=dc17aa56-caa0-4d4a-a916-96d0086fcc11 ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Subtract (60 early reservations) [ 0.000000] #1 [0001000000 - 0001d170d4] TEXT DATA BSS [ 0.000000] #2 [0037574000 - 0037ff0000] RAMDISK [ 0.000000] #3 [000009fc00 - 0000100000] BIOS reserved [ 0.000000] #4 [0001d18000 - 0001d18254] BRK [ 0.000000] #5 [0000010000 - 0000012000] TRAMPOLINE [ 0.000000] #6 [0000012000 - 0000016000] ACPI WAKEUP [ 0.000000] #7 [0000016000 - 0000019000] PGTABLE [ 0.000000] #8 [0000019000 - 000001a000] PGTABLE [ 0.000000] #9 [0100000000 - 0100005000] NODE_DATA [ 0.000000] #10 [0001d18280 - 0001d19280] BOOTMEM [ 0.000000] #11 [0001d17100 - 0001d173d0] BOOTMEM [ 0.000000] #12 [0100005000 - 0100006000] BOOTMEM [ 0.000000] #13 [0100006000 - 0100007000] BOOTMEM [ 0.000000] #14 [0100200000 - 0103800000] MEMMAP 0 [ 0.000000] #15 [0001d17400 - 0001d17580] BOOTMEM [ 0.000000] #16 [0001d19280 - 0001d31280] BOOTMEM [ 0.000000] #17 [0001d31280 - 0001d37280] BOOTMEM [ 0.000000] #18 [0001d38000 - 0001d39000] BOOTMEM [ 0.000000] #19 [0001d17580 - 0001d175c1] BOOTMEM [ 0.000000] #20 [0001d17600 - 0001d17643] BOOTMEM [ 0.000000] #21 [0001d17680 - 0001d17a00] BOOTMEM [ 0.000000] #22 [0001d17a00 - 0001d17a68] BOOTMEM [ 0.000000] #23 [0001d17a80 - 0001d17ae8] BOOTMEM [ 0.000000] #24 [0001d17b00 - 0001d17b68] BOOTMEM [ 0.000000] #25 [0001d17b80 - 0001d17be8] BOOTMEM [ 0.000000] #26 [0001d17c00 - 0001d17c68] BOOTMEM [ 0.000000] #27 [0001d17c80 - 0001d17ce8] BOOTMEM [ 0.000000] #28 [0001d17d00 - 0001d17d68] BOOTMEM [ 0.000000] #29 [0001d17d80 - 0001d17de8] BOOTMEM [ 0.000000] #30 [0001d17e00 - 0001d17e68] BOOTMEM [ 0.000000] #31 [0001d17e80 - 0001d17ee8] BOOTMEM [ 0.000000] #32 [0001d17f00 - 0001d17f68] BOOTMEM [ 0.000000] #33 [0001d17f80 - 0001d17fe8] BOOTMEM [ 0.000000] #34 [0001d37280 - 0001d372e8] BOOTMEM [ 0.000000] #35 [0001d37300 - 0001d37368] BOOTMEM [ 0.000000] #36 [0001d37380 - 0001d373e8] BOOTMEM [ 0.000000] #37 [0001d37400 - 0001d37420] BOOTMEM [ 0.000000] #38 [0001d37440 - 0001d37460] BOOTMEM [ 0.000000] #39 [0001d37480 - 0001d374a0] BOOTMEM [ 0.000000] #40 [0001d374c0 - 0001d374e0] BOOTMEM [ 0.000000] #41 [0001d37500 - 0001d37520] BOOTMEM [ 0.000000] #42 [0001d37540 - 0001d375aa] BOOTMEM [ 0.000000] #43 [0001d375c0 - 0001d3762a] BOOTMEM [ 0.000000] #44 [0001e00000 - 0001e1e000] BOOTMEM [ 0.000000] #45 [0001e80000 - 0001e9e000] BOOTMEM [ 0.000000] #46 [0001f00000 - 0001f1e000] BOOTMEM [ 0.000000] #47 [0001f80000 - 0001f9e000] BOOTMEM [ 0.000000] #48 [0001d37640 - 0001d37648] BOOTMEM [ 0.000000] #49 [0001d37680 - 0001d37688] BOOTMEM [ 0.000000] #50 [0001d376c0 - 0001d376d0] BOOTMEM [ 0.000000] #51 [0001d37700 - 0001d37720] BOOTMEM [ 0.000000] #52 [0001d37740 - 0001d37870] BOOTMEM [ 0.000000] #53 [0001d37880 - 0001d378d0] BOOTMEM [ 0.000000] #54 [0001d37900 - 0001d37950] BOOTMEM [ 0.000000] #55 [0001d39000 - 0001d41000] BOOTMEM [ 0.000000] #56 [0001f9e000 - 0005f9e000] BOOTMEM [ 0.000000] #57 [0001d41000 - 0001d61000] BOOTMEM [ 0.000000] #58 [0001d61000 - 0001da1000] BOOTMEM [ 0.000000] #59 [000001b800 - 0000023800] BOOTMEM [ 0.000000] Memory: 3783772k/5242880k available (5698k kernel code, 1313000k absent, 146108k reserved, 5389k data, 908k init) [ 0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:4352 nr_irqs:712 [ 0.000000] spurious 8259A interrupt: IRQ7. [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 39321600 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 2099.851 MHz processor. [ 0.030010] Calibrating delay loop (skipped), value calculated using timer frequency.. 4199.69 BogoMIPS (lpj=20998470) [ 0.030016] pid_max: default: 32768 minimum: 301 [ 0.030045] Security Framework initialized [ 0.030066] AppArmor: AppArmor initialized [ 0.030068] Yama: becoming mindful. [ 0.040094] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.042863] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.044126] Mount-cache hash table entries: 256 [ 0.044290] Initializing cgroup subsys ns [ 0.044295] Initializing cgroup subsys cpuacct [ 0.044300] Initializing cgroup subsys memory [ 0.044311] Initializing cgroup subsys devices [ 0.044314] Initializing cgroup subsys freezer [ 0.044316] Initializing cgroup subsys net_cls [ 0.044348] tseg: 00aff00000 [ 0.044351] CPU: Physical Processor ID: 0 [ 0.044352] CPU: Processor Core ID: 0 [ 0.044355] mce: CPU supports 5 MCE banks [ 0.044367] Performance Events: AMD PMU driver. [ 0.044373] ... version: 0 [ 0.044375] ... bit width: 48 [ 0.044377] ... generic registers: 4 [ 0.044379] ... value mask: 0000ffffffffffff [ 0.044381] ... max period: 00007fffffffffff [ 0.044383] ... fixed-purpose events: 0 [ 0.044385] ... event mask: 000000000000000f [ 0.046800] ACPI: Core revision 20100428 [ 0.060012] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.060018] ftrace: allocating 22644 entries in 89 pages [ 0.070105] Setting APIC routing to flat [ 0.070500] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.174398] CPU0: AMD Turion(tm) X2 Dual-Core Mobile RM-72 stepping 01 [ 0.180000] Booting Node 0, Processors #1 [ 0.340000] TSC synchronization [CPU#0 -> CPU#1]: [ 0.340000] Measured 227621142 cycles TSC warp between CPUs, turning off TSC clock. [ 0.340000] Marking TSC unstable due to check_tsc_sync_source failed [ 0.340010] Brought up 2 CPUs [ 0.340013] Total of 2 processors activated (8389.43 BogoMIPS). [ 0.340290] devtmpfs: initialized [ 0.340952] regulator: core version 0.5 [ 0.341019] Time: 19:49:59 Date: 08/21/10 [ 0.341076] NET: Registered protocol family 16 [ 0.341242] TOM: 00000000c0000000 aka 3072M [ 0.341245] Fam 10h mmconf [e0000000, e0ffffff] [ 0.341253] TOM2: 0000000140000000 aka 5120M [ 0.341264] ACPI: bus type pci registered [ 0.341389] PCI: MMCONFIG for domain 0000 [bus 00-0f] at [mem 0xe0000000-0xe0ffffff] (base 0xe0000000) [ 0.341393] PCI: MMCONFIG at [mem 0xe0000000-0xe0ffffff] reserved in E820 [ 0.343570] PCI: Using configuration type 1 for base access [ 0.343597] mtrr: your CPUs had inconsistent fixed MTRR settings [ 0.343599] mtrr: probably your BIOS does not setup all CPUs. [ 0.343601] mtrr: corrected configuration. [ 0.344272] Trying to unpack rootfs image as initramfs... [ 0.344272] bio: create slab at 0 [ 0.344272] ACPI: EC: Look up EC in DSDT [ 0.344272] ACPI: Executed 1 blocks of module-level executable AML code [ 0.351778] ACPI: BIOS _OSI(Linux) query ignored [ 0.380138] ACPI: Interpreter enabled [ 0.380142] ACPI: (supports S0 S3 S4 S5) [ 0.380171] ACPI: Using IOAPIC for interrupt routing [ 0.380867] [Firmware Bug]: ACPI: ACPI brightness control misses _BQC function [ 0.381289] [Firmware Bug]: ACPI: ACPI brightness control misses _BQC function [ 0.553405] ACPI: EC: GPE = 0x3, I/O: command/status = 0x66, data = 0x62 [ 0.553738] ACPI: No dock devices found. [ 0.553743] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.555096] \_SB_.PCI0:_OSC request failed [ 0.555098] _OSC request data:1 8 1f [ 0.555103] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.557481] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 0.557485] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 0.557488] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.557491] pci_root PNP0A08:00: host bridge window [mem 0x000c0000-0x000c3fff] [ 0.557493] pci_root PNP0A08:00: host bridge window [mem 0x000c4000-0x000c7fff] [ 0.557496] pci_root PNP0A08:00: host bridge window [mem 0x000c8000-0x000cbfff] [ 0.557499] pci_root PNP0A08:00: host bridge window [mem 0x000cc000-0x000cffff] [ 0.557502] pci_root PNP0A08:00: host bridge window [mem 0x000d0000-0x000d3fff] [ 0.557505] pci_root PNP0A08:00: host bridge window [mem 0x000d4000-0x000d7fff] [ 0.557508] pci_root PNP0A08:00: host bridge window [mem 0x000d8000-0x000dbfff] [ 0.557511] pci_root PNP0A08:00: host bridge window [mem 0x000dc000-0x000dffff] [ 0.557513] pci_root PNP0A08:00: host bridge window [mem 0x000e0000-0x000e3fff] [ 0.557516] pci_root PNP0A08:00: host bridge window [mem 0x000e4000-0x000e7fff] [ 0.557519] pci_root PNP0A08:00: host bridge window [mem 0x000e8000-0x000ebfff] [ 0.557522] pci_root PNP0A08:00: host bridge window [mem 0x000ec000-0x000effff] [ 0.557525] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xdfffffff] [ 0.557528] pci_root PNP0A08:00: host bridge window [mem 0xe1000000-0xffffffff] [ 0.557736] pci 0000:00:04.0: PME# supported from D0 D3hot D3cold [ 0.557740] pci 0000:00:04.0: PME# disabled [ 0.557796] pci 0000:00:05.0: PME# supported from D0 D3hot D3cold [ 0.557799] pci 0000:00:05.0: PME# disabled [ 0.557855] pci 0000:00:06.0: PME# supported from D0 D3hot D3cold [ 0.557859] pci 0000:00:06.0: PME# disabled [ 0.557914] pci 0000:00:07.0: PME# supported from D0 D3hot D3cold [ 0.557917] pci 0000:00:07.0: PME# disabled [ 0.558009] pci 0000:00:11.0: reg 10: [io 0x8038-0x803f] [ 0.558018] pci 0000:00:11.0: reg 14: [io 0x804c-0x804f] [ 0.558026] pci 0000:00:11.0: reg 18: [io 0x8030-0x8037] [ 0.558034] pci 0000:00:11.0: reg 1c: [io 0x8048-0x804b] [ 0.558042] pci 0000:00:11.0: reg 20: [io 0x8010-0x801f] [ 0.558051] pci 0000:00:11.0: reg 24: [mem 0xd2508000-0xd25083ff] [ 0.558114] pci 0000:00:12.0: reg 10: [mem 0xd2507000-0xd2507fff] [ 0.558180] pci 0000:00:12.1: reg 10: [mem 0xd2506000-0xd2506fff] [ 0.558260] pci 0000:00:12.2: reg 10: [mem 0xd2508500-0xd25085ff] [ 0.558323] pci 0000:00:12.2: supports D1 D2 [ 0.558325] pci 0000:00:12.2: PME# supported from D0 D1 D2 D3hot [ 0.558331] pci 0000:00:12.2: PME# disabled [ 0.558371] pci 0000:00:13.0: reg 10: [mem 0xd2505000-0xd2505fff] [ 0.558437] pci 0000:00:13.1: reg 10: [mem 0xd2504000-0xd2504fff] [ 0.558516] pci 0000:00:13.2: reg 10: [mem 0xd2508400-0xd25084ff] [ 0.558579] pci 0000:00:13.2: supports D1 D2 [ 0.558582] pci 0000:00:13.2: PME# supported from D0 D1 D2 D3hot [ 0.558587] pci 0000:00:13.2: PME# disabled [ 0.558719] pci 0000:00:14.1: reg 10: [io 0x0000-0x0007] [ 0.558727] pci 0000:00:14.1: reg 14: [io 0x0000-0x0003] [ 0.558735] pci 0000:00:14.1: reg 18: [io 0x0000-0x0007] [ 0.558743] pci 0000:00:14.1: reg 1c: [io 0x0000-0x0003] [ 0.558752] pci 0000:00:14.1: reg 20: [io 0x8000-0x800f] [ 0.558827] pci 0000:00:14.2: reg 10: [mem 0xd2500000-0xd2503fff 64bit] [ 0.558879] pci 0000:00:14.2: PME# supported from D0 D3hot D3cold [ 0.558884] pci 0000:00:14.2: PME# disabled [ 0.559241] pci 0000:01:05.0: reg 10: [mem 0xc0000000-0xcfffffff pref] [ 0.559246] pci 0000:01:05.0: reg 14: [io 0x7000-0x70ff] [ 0.559252] pci 0000:01:05.0: reg 18: [mem 0xd2400000-0xd240ffff] [ 0.559262] pci 0000:01:05.0: reg 24: [mem 0xd2300000-0xd23fffff] [ 0.559281] pci 0000:01:05.0: supports D1 D2 [ 0.559305] pci 0000:01:05.1: reg 10: [mem 0xd2410000-0xd2413fff] [ 0.559337] pci 0000:01:05.1: supports D1 D2 [ 0.559421] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.559426] pci 0000:00:01.0: bridge window [io 0x7000-0x7fff] [ 0.559430] pci 0000:00:01.0: bridge window [mem 0xd2300000-0xd24fffff] [ 0.559436] pci 0000:00:01.0: bridge window [mem 0xc0000000-0xcfffffff 64bit pref] [ 0.559475] pci 0000:00:04.0: PCI bridge to [bus 02-07] [ 0.559480] pci 0000:00:04.0: bridge window [io 0x3000-0x6fff] [ 0.559484] pci 0000:00:04.0: bridge window [mem 0xd1300000-0xd22fffff] [ 0.559490] pci 0000:00:04.0: bridge window [mem 0xd0000000-0xd0ffffff 64bit pref] [ 0.559555] pci 0000:08:00.0: reg 10: [mem 0xd1200300-0xd12003ff] [ 0.559596] pci 0000:08:00.0: reg 30: [mem 0xffff0000-0xffffffff pref] [ 0.559678] pci 0000:08:00.2: reg 10: [mem 0xd1200200-0xd12002ff] [ 0.559793] pci 0000:08:00.3: reg 10: [mem 0xd1200100-0xd12001ff] [ 0.559907] pci 0000:08:00.4: reg 10: [mem 0xd1200000-0xd12000ff] [ 0.580024] pci 0000:00:05.0: PCI bridge to [bus 08-08] [ 0.580029] pci 0000:00:05.0: bridge window [io 0xfffffffffffff000-0x0000] (disabled) [ 0.580033] pci 0000:00:05.0: bridge window [mem 0xd1200000-0xd12fffff] [ 0.580039] pci 0000:00:05.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.580109] pci 0000:09:00.0: reg 10: [mem 0xd1100000-0xd110ffff 64bit] [ 0.580189] pci 0000:09:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 0.580199] pci 0000:00:06.0: PCI bridge to [bus 09-09] [ 0.580204] pci 0000:00:06.0: bridge window [io 0xfffffffffffff000-0x0000] (disabled) [ 0.580208] pci 0000:00:06.0: bridge window [mem 0xd1100000-0xd11fffff] [ 0.580214] pci 0000:00:06.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.580278] pci 0000:0a:00.0: reg 10: [io 0x2000-0x20ff] [ 0.580296] pci 0000:0a:00.0: reg 18: [mem 0xd1010000-0xd1010fff 64bit pref] [ 0.580310] pci 0000:0a:00.0: reg 20: [mem 0xd1000000-0xd100ffff 64bit pref] [ 0.580318] pci 0000:0a:00.0: reg 30: [mem 0xfffe0000-0xffffffff pref] [ 0.580355] pci 0000:0a:00.0: supports D1 D2 [ 0.580357] pci 0000:0a:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.580362] pci 0000:0a:00.0: PME# disabled [ 0.600014] pci 0000:00:07.0: PCI bridge to [bus 0a-0a] [ 0.600019] pci 0000:00:07.0: bridge window [io 0x2000-0x2fff] [ 0.600023] pci 0000:00:07.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.600029] pci 0000:00:07.0: bridge window [mem 0xd1000000-0xd10fffff 64bit pref] [ 0.600103] pci 0000:00:14.4: PCI bridge to [bus 80-8f] (subtractive decode) [ 0.600108] pci 0000:00:14.4: bridge window [io 0x1000-0x1fff] [ 0.600114] pci 0000:00:14.4: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.600119] pci 0000:00:14.4: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.600123] pci 0000:00:14.4: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.600125] pci 0000:00:14.4: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.600128] pci 0000:00:14.4: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.600131] pci 0000:00:14.4: bridge window [mem 0x000c0000-0x000c3fff] (subtractive decode) [ 0.600134] pci 0000:00:14.4: bridge window [mem 0x000c4000-0x000c7fff] (subtractive decode) [ 0.600137] pci 0000:00:14.4: bridge window [mem 0x000c8000-0x000cbfff] (subtractive decode) [ 0.600140] pci 0000:00:14.4: bridge window [mem 0x000cc000-0x000cffff] (subtractive decode) [ 0.600143] pci 0000:00:14.4: bridge window [mem 0x000d0000-0x000d3fff] (subtractive decode) [ 0.600146] pci 0000:00:14.4: bridge window [mem 0x000d4000-0x000d7fff] (subtractive decode) [ 0.600149] pci 0000:00:14.4: bridge window [mem 0x000d8000-0x000dbfff] (subtractive decode) [ 0.600152] pci 0000:00:14.4: bridge window [mem 0x000dc000-0x000dffff] (subtractive decode) [ 0.600155] pci 0000:00:14.4: bridge window [mem 0x000e0000-0x000e3fff] (subtractive decode) [ 0.600158] pci 0000:00:14.4: bridge window [mem 0x000e4000-0x000e7fff] (subtractive decode) [ 0.600161] pci 0000:00:14.4: bridge window [mem 0x000e8000-0x000ebfff] (subtractive decode) [ 0.600164] pci 0000:00:14.4: bridge window [mem 0x000ec000-0x000effff] (subtractive decode) [ 0.600167] pci 0000:00:14.4: bridge window [mem 0xc0000000-0xdfffffff] (subtractive decode) [ 0.600170] pci 0000:00:14.4: bridge window [mem 0xe1000000-0xffffffff] (subtractive decode) [ 0.600234] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.600428] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.AGP_._PRT] [ 0.600537] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PB4_._PRT] [ 0.600655] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PB5_._PRT] [ 0.600810] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.EXP6._PRT] [ 0.600936] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PB7_._PRT] [ 0.601121] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P2P_._PRT] [ 0.601364] \_SB_.PCI0:_OSC request failed [ 0.601366] _OSC request data:1 1f 1f [ 0.623529] Freeing initrd memory: 10736k freed [ 0.623461] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.623713] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.623962] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.624211] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.624460] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.624708] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.624957] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.625207] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.625310] HEST: Table is not found! [ 0.625441] vgaarb: device added: PCI:0000:01:05.0,decodes=io+mem,owns=io+mem,locks=none [ 0.625448] vgaarb: loaded [ 0.625631] SCSI subsystem initialized [ 0.625768] libata version 3.00 loaded. [ 0.625827] usbcore: registered new interface driver usbfs [ 0.625841] usbcore: registered new interface driver hub [ 0.625871] usbcore: registered new device driver usb [ 0.626154] ACPI: WMI: Mapper loaded [ 0.626156] PCI: Using ACPI for IRQ routing [ 0.626160] PCI: pci_cache_line_size set to 64 bytes [ 0.626345] reserve RAM buffer: 000000000009fc00 - 000000000009ffff [ 0.626348] reserve RAM buffer: 00000000afd70000 - 00000000afffffff [ 0.626352] reserve RAM buffer: 00000000afe58000 - 00000000afffffff [ 0.626355] reserve RAM buffer: 00000000afeec000 - 00000000afffffff [ 0.626358] reserve RAM buffer: 00000000aff00000 - 00000000afffffff [ 0.626476] NetLabel: Initializing [ 0.626478] NetLabel: domain hash size = 128 [ 0.626480] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.626501] NetLabel: unlabeled traffic allowed by default [ 0.626582] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0 [ 0.626587] hpet0: 4 comparators, 32-bit 14.318180 MHz counter [ 0.628618] Switching to clocksource hpet [ 0.630352] AppArmor: AppArmor Filesystem Enabled [ 0.630373] pnp: PnP ACPI init [ 0.630394] ACPI: bus type pnp registered [ 0.690322] alloc irq_desc for 23 on node 0 [ 0.690325] alloc kstat_irqs on node 0 [ 0.691039] pnp: PnP ACPI: found 12 devices [ 0.691041] ACPI: ACPI bus type pnp unregistered [ 0.691058] system 00:01: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.691061] system 00:01: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.691070] system 00:08: [io 0x0400-0x04cf] has been reserved [ 0.691073] system 00:08: [io 0x04d0-0x04d1] has been reserved [ 0.691076] system 00:08: [io 0x04d6] has been reserved [ 0.691079] system 00:08: [io 0x0680-0x06ff] has been reserved [ 0.691081] system 00:08: [io 0x077a] has been reserved [ 0.691084] system 00:08: [io 0x0c00-0x0c01] has been reserved [ 0.691087] system 00:08: [io 0x0c14] has been reserved [ 0.691090] system 00:08: [io 0x0c50-0x0c52] has been reserved [ 0.691093] system 00:08: [io 0x0c6c] has been reserved [ 0.691095] system 00:08: [io 0x0c6f] has been reserved [ 0.691098] system 00:08: [io 0x0cd0-0x0cdb] has been reserved [ 0.691104] system 00:09: [mem 0x000e0000-0x000fffff] could not be reserved [ 0.691107] system 00:09: [mem 0xfff00000-0xffffffff] has been reserved [ 0.696222] pci 0000:08:00.0: no compatible bridge window for [mem 0xffff0000-0xffffffff pref] [ 0.696229] pci 0000:0a:00.0: no compatible bridge window for [mem 0xfffe0000-0xffffffff pref] [ 0.696310] pci 0000:00:05.0: BAR 15: assigned [mem 0xd2600000-0xd26fffff pref] [ 0.696315] pci 0000:00:07.0: BAR 14: assigned [mem 0xd2700000-0xd27fffff] [ 0.696319] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.696323] pci 0000:00:01.0: bridge window [io 0x7000-0x7fff] [ 0.696328] pci 0000:00:01.0: bridge window [mem 0xd2300000-0xd24fffff] [ 0.696332] pci 0000:00:01.0: bridge window [mem 0xc0000000-0xcfffffff 64bit pref] [ 0.696337] pci 0000:00:04.0: PCI bridge to [bus 02-07] [ 0.696340] pci 0000:00:04.0: bridge window [io 0x3000-0x6fff] [ 0.696345] pci 0000:00:04.0: bridge window [mem 0xd1300000-0xd22fffff] [ 0.696349] pci 0000:00:04.0: bridge window [mem 0xd0000000-0xd0ffffff 64bit pref] [ 0.696355] pci 0000:08:00.0: BAR 6: assigned [mem 0xd2600000-0xd260ffff pref] [ 0.696359] pci 0000:00:05.0: PCI bridge to [bus 08-08] [ 0.696361] pci 0000:00:05.0: bridge window [io disabled] [ 0.696365] pci 0000:00:05.0: bridge window [mem 0xd1200000-0xd12fffff] [ 0.696369] pci 0000:00:05.0: bridge window [mem 0xd2600000-0xd26fffff pref] [ 0.696374] pci 0000:00:06.0: PCI bridge to [bus 09-09] [ 0.696376] pci 0000:00:06.0: bridge window [io disabled] [ 0.696381] pci 0000:00:06.0: bridge window [mem 0xd1100000-0xd11fffff] [ 0.696384] pci 0000:00:06.0: bridge window [mem pref disabled] [ 0.696390] pci 0000:0a:00.0: BAR 6: assigned [mem 0xd1020000-0xd103ffff pref] [ 0.696393] pci 0000:00:07.0: PCI bridge to [bus 0a-0a] [ 0.696396] pci 0000:00:07.0: bridge window [io 0x2000-0x2fff] [ 0.696400] pci 0000:00:07.0: bridge window [mem 0xd2700000-0xd27fffff] [ 0.696404] pci 0000:00:07.0: bridge window [mem 0xd1000000-0xd10fffff 64bit pref] [ 0.696410] pci 0000:00:14.4: PCI bridge to [bus 80-8f] [ 0.696447] pci 0000:00:14.4: bridge window [io 0x1000-0x1fff] [ 0.696453] pci 0000:00:14.4: bridge window [mem disabled] [ 0.696458] pci 0000:00:14.4: bridge window [mem pref disabled] [ 0.696472] pci 0000:00:01.0: setting latency timer to 64 [ 0.696481] alloc irq_desc for 16 on node -1 [ 0.696483] alloc kstat_irqs on node -1 [ 0.696489] pci 0000:00:04.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.696493] pci 0000:00:04.0: setting latency timer to 64 [ 0.696501] alloc irq_desc for 17 on node -1 [ 0.696502] alloc kstat_irqs on node -1 [ 0.696506] pci 0000:00:05.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 0.696510] pci 0000:00:05.0: setting latency timer to 64 [ 0.696518] alloc irq_desc for 18 on node -1 [ 0.696519] alloc kstat_irqs on node -1 [ 0.696523] pci 0000:00:06.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 0.696527] pci 0000:00:06.0: setting latency timer to 64 [ 0.696534] alloc irq_desc for 19 on node -1 [ 0.696536] alloc kstat_irqs on node -1 [ 0.696540] pci 0000:00:07.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 0.696544] pci 0000:00:07.0: setting latency timer to 64 [ 0.696554] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 0.696556] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 0.696559] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.696562] pci_bus 0000:00: resource 7 [mem 0x000c0000-0x000c3fff] [ 0.696564] pci_bus 0000:00: resource 8 [mem 0x000c4000-0x000c7fff] [ 0.696567] pci_bus 0000:00: resource 9 [mem 0x000c8000-0x000cbfff] [ 0.696570] pci_bus 0000:00: resource 10 [mem 0x000cc000-0x000cffff] [ 0.696572] pci_bus 0000:00: resource 11 [mem 0x000d0000-0x000d3fff] [ 0.696575] pci_bus 0000:00: resource 12 [mem 0x000d4000-0x000d7fff] [ 0.696578] pci_bus 0000:00: resource 13 [mem 0x000d8000-0x000dbfff] [ 0.696580] pci_bus 0000:00: resource 14 [mem 0x000dc000-0x000dffff] [ 0.696583] pci_bus 0000:00: resource 15 [mem 0x000e0000-0x000e3fff] [ 0.696585] pci_bus 0000:00: resource 16 [mem 0x000e4000-0x000e7fff] [ 0.696588] pci_bus 0000:00: resource 17 [mem 0x000e8000-0x000ebfff] [ 0.696591] pci_bus 0000:00: resource 18 [mem 0x000ec000-0x000effff] [ 0.696593] pci_bus 0000:00: resource 19 [mem 0xc0000000-0xdfffffff] [ 0.696596] pci_bus 0000:00: resource 20 [mem 0xe1000000-0xffffffff] [ 0.696599] pci_bus 0000:01: resource 0 [io 0x7000-0x7fff] [ 0.696601] pci_bus 0000:01: resource 1 [mem 0xd2300000-0xd24fffff] [ 0.696604] pci_bus 0000:01: resource 2 [mem 0xc0000000-0xcfffffff 64bit pref] [ 0.696607] pci_bus 0000:02: resource 0 [io 0x3000-0x6fff] [ 0.696610] pci_bus 0000:02: resource 1 [mem 0xd1300000-0xd22fffff] [ 0.696613] pci_bus 0000:02: resource 2 [mem 0xd0000000-0xd0ffffff 64bit pref] [ 0.696616] pci_bus 0000:08: resource 1 [mem 0xd1200000-0xd12fffff] [ 0.696618] pci_bus 0000:08: resource 2 [mem 0xd2600000-0xd26fffff pref] [ 0.696621] pci_bus 0000:09: resource 1 [mem 0xd1100000-0xd11fffff] [ 0.696624] pci_bus 0000:0a: resource 0 [io 0x2000-0x2fff] [ 0.696626] pci_bus 0000:0a: resource 1 [mem 0xd2700000-0xd27fffff] [ 0.696629] pci_bus 0000:0a: resource 2 [mem 0xd1000000-0xd10fffff 64bit pref] [ 0.696632] pci_bus 0000:80: resource 0 [io 0x1000-0x1fff] [ 0.696635] pci_bus 0000:80: resource 4 [io 0x0000-0x0cf7] [ 0.696637] pci_bus 0000:80: resource 5 [io 0x0d00-0xffff] [ 0.696640] pci_bus 0000:80: resource 6 [mem 0x000a0000-0x000bffff] [ 0.696642] pci_bus 0000:80: resource 7 [mem 0x000c0000-0x000c3fff] [ 0.696645] pci_bus 0000:80: resource 8 [mem 0x000c4000-0x000c7fff] [ 0.696648] pci_bus 0000:80: resource 9 [mem 0x000c8000-0x000cbfff] [ 0.696650] pci_bus 0000:80: resource 10 [mem 0x000cc000-0x000cffff] [ 0.696653] pci_bus 0000:80: resource 11 [mem 0x000d0000-0x000d3fff] [ 0.696655] pci_bus 0000:80: resource 12 [mem 0x000d4000-0x000d7fff] [ 0.696658] pci_bus 0000:80: resource 13 [mem 0x000d8000-0x000dbfff] [ 0.696661] pci_bus 0000:80: resource 14 [mem 0x000dc000-0x000dffff] [ 0.696663] pci_bus 0000:80: resource 15 [mem 0x000e0000-0x000e3fff] [ 0.696666] pci_bus 0000:80: resource 16 [mem 0x000e4000-0x000e7fff] [ 0.696668] pci_bus 0000:80: resource 17 [mem 0x000e8000-0x000ebfff] [ 0.696671] pci_bus 0000:80: resource 18 [mem 0x000ec000-0x000effff] [ 0.696674] pci_bus 0000:80: resource 19 [mem 0xc0000000-0xdfffffff] [ 0.696676] pci_bus 0000:80: resource 20 [mem 0xe1000000-0xffffffff] [ 0.696720] NET: Registered protocol family 2 [ 0.696921] IP route cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.698840] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 0.703724] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 0.704300] TCP: Hash tables configured (established 524288 bind 65536) [ 0.704304] TCP reno registered [ 0.704322] UDP hash table entries: 2048 (order: 4, 65536 bytes) [ 0.704378] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) [ 0.704533] NET: Registered protocol family 1 [ 0.704758] pci 0000:01:05.0: Boot video device [ 0.704782] PCI: CLS 64 bytes, default 64 [ 0.704785] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) [ 0.704789] Placing 64MB software IO TLB between ffff880001f9e000 - ffff880005f9e000 [ 0.704791] software IO TLB at phys 0x1f9e000 - 0x5f9e000 [ 0.704867] Simple Boot Flag at 0x44 set to 0x1 [ 0.705066] Scanning for low memory corruption every 60 seconds [ 0.705261] audit: initializing netlink socket (disabled) [ 0.705272] type=2000 audit(1282420198.699:1): initialized [ 0.719826] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.721721] VFS: Disk quotas dquot_6.5.2 [ 0.721786] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.722557] fuse init (API version 7.14) [ 0.722678] msgmni has been set to 7411 [ 0.725876] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.725881] io scheduler noop registered [ 0.725883] io scheduler deadline registered [ 0.725929] io scheduler cfq registered (default) [ 0.726088] pcieport 0000:00:04.0: setting latency timer to 64 [ 0.726122] alloc irq_desc for 40 on node -1 [ 0.726124] alloc kstat_irqs on node -1 [ 0.726136] pcieport 0000:00:04.0: irq 40 for MSI/MSI-X [ 0.726221] pcieport 0000:00:05.0: setting latency timer to 64 [ 0.726250] alloc irq_desc for 41 on node -1 [ 0.726252] alloc kstat_irqs on node -1 [ 0.726258] pcieport 0000:00:05.0: irq 41 for MSI/MSI-X [ 0.726318] pcieport 0000:00:06.0: setting latency timer to 64 [ 0.726346] alloc irq_desc for 42 on node -1 [ 0.726348] alloc kstat_irqs on node -1 [ 0.726354] pcieport 0000:00:06.0: irq 42 for MSI/MSI-X [ 0.726417] pcieport 0000:00:07.0: setting latency timer to 64 [ 0.726445] alloc irq_desc for 43 on node -1 [ 0.726447] alloc kstat_irqs on node -1 [ 0.726453] pcieport 0000:00:07.0: irq 43 for MSI/MSI-X [ 0.726535] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.726699] \_SB_.PCI0:_OSC request failed [ 0.726701] _OSC request data:1 0 1f [ 0.726824] \_SB_.PCI0:_OSC request failed [ 0.726826] _OSC request data:1 0 1f [ 0.726848] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.727165] vesafb: framebuffer at 0xc012c000, mapped to 0xffffc90002100000, using 1216k, total 1216k [ 0.727168] vesafb: mode is 640x480x32, linelength=2560, pages=0 [ 0.727171] vesafb: scrolling: redraw [ 0.727174] vesafb: Truecolor: size=0:8:8:8, shift=0:16:8:0 [ 0.800835] Console: switching to colour frame buffer device 80x30 [ 0.874465] fb0: VESA VGA frame buffer device [ 0.878941] ACPI: AC Adapter [ACAD] (on-line) [ 0.879025] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 0.879030] ACPI: Power Button [PWRB] [ 0.879090] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input1 [ 0.879257] ACPI: Lid Switch [LID] [ 0.879303] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2 [ 0.879306] ACPI: Power Button [PWRF] [ 0.879732] ACPI: acpi_idle registered with cpuidle [ 1.013045] thermal LNXTHERM:01: registered as thermal_zone0 [ 1.013055] ACPI: Thermal Zone [TZ01] (54 C) [ 1.013135] ERST: Table is not found! [ 1.014564] Linux agpgart interface v0.103 [ 1.014601] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 1.016097] brd: module loaded [ 1.016666] loop: module loaded [ 1.016999] pata_acpi 0000:00:14.1: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.017083] pata_acpi 0000:00:14.1: setting latency timer to 64 [ 1.017408] Fixed MDIO Bus: probed [ 1.017447] PPP generic driver version 2.4.2 [ 1.017487] tun: Universal TUN/TAP device driver, 1.6 [ 1.017489] tun: (C) 1999-2004 Max Krasnyansky [ 1.017572] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 1.017625] ehci_hcd 0000:00:12.2: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 1.017657] ehci_hcd 0000:00:12.2: setting latency timer to 64 [ 1.017661] ehci_hcd 0000:00:12.2: EHCI Host Controller [ 1.017696] ehci_hcd 0000:00:12.2: new USB bus registered, assigned bus number 1 [ 1.017776] ehci_hcd 0000:00:12.2: applying AMD SB600/SB700 USB freeze workaround [ 1.017792] ehci_hcd 0000:00:12.2: debug port 1 [ 1.017825] ehci_hcd 0000:00:12.2: irq 17, io mem 0xd2508500 [ 1.031309] ehci_hcd 0000:00:12.2: USB 2.0 started, EHCI 1.00 [ 1.031450] hub 1-0:1.0: USB hub found [ 1.031456] hub 1-0:1.0: 6 ports detected [ 1.031610] ehci_hcd 0000:00:13.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.031624] ehci_hcd 0000:00:13.2: setting latency timer to 64 [ 1.031628] ehci_hcd 0000:00:13.2: EHCI Host Controller [ 1.031666] ehci_hcd 0000:00:13.2: new USB bus registered, assigned bus number 2 [ 1.031733] ehci_hcd 0000:00:13.2: applying AMD SB600/SB700 USB freeze workaround [ 1.031749] ehci_hcd 0000:00:13.2: debug port 1 [ 1.031774] ehci_hcd 0000:00:13.2: irq 19, io mem 0xd2508400 [ 1.051282] ehci_hcd 0000:00:13.2: USB 2.0 started, EHCI 1.00 [ 1.051389] hub 2-0:1.0: USB hub found [ 1.051393] hub 2-0:1.0: 6 ports detected [ 1.051503] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 1.051552] ohci_hcd 0000:00:12.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.051565] ohci_hcd 0000:00:12.0: setting latency timer to 64 [ 1.051569] ohci_hcd 0000:00:12.0: OHCI Host Controller [ 1.051609] ohci_hcd 0000:00:12.0: new USB bus registered, assigned bus number 3 [ 1.051672] ohci_hcd 0000:00:12.0: irq 16, io mem 0xd2507000 [ 1.114182] hub 3-0:1.0: USB hub found [ 1.114225] hub 3-0:1.0: 3 ports detected [ 1.114301] ohci_hcd 0000:00:12.1: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.114316] ohci_hcd 0000:00:12.1: setting latency timer to 64 [ 1.114320] ohci_hcd 0000:00:12.1: OHCI Host Controller [ 1.114369] ohci_hcd 0000:00:12.1: new USB bus registered, assigned bus number 4 [ 1.114421] ohci_hcd 0000:00:12.1: irq 16, io mem 0xd2506000 [ 1.174156] hub 4-0:1.0: USB hub found [ 1.174197] hub 4-0:1.0: 3 ports detected [ 1.174268] ohci_hcd 0000:00:13.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 1.174283] ohci_hcd 0000:00:13.0: setting latency timer to 64 [ 1.174287] ohci_hcd 0000:00:13.0: OHCI Host Controller [ 1.174321] ohci_hcd 0000:00:13.0: new USB bus registered, assigned bus number 5 [ 1.174350] ohci_hcd 0000:00:13.0: irq 18, io mem 0xd2505000 [ 1.234167] hub 5-0:1.0: USB hub found [ 1.234208] hub 5-0:1.0: 3 ports detected [ 1.234283] ohci_hcd 0000:00:13.1: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 1.234297] ohci_hcd 0000:00:13.1: setting latency timer to 64 [ 1.234300] ohci_hcd 0000:00:13.1: OHCI Host Controller [ 1.234335] ohci_hcd 0000:00:13.1: new USB bus registered, assigned bus number 6 [ 1.234352] ohci_hcd 0000:00:13.1: irq 18, io mem 0xd2504000 [ 1.294241] hub 6-0:1.0: USB hub found [ 1.294267] hub 6-0:1.0: 3 ports detected [ 1.294347] uhci_hcd: USB Universal Host Controller Interface driver [ 1.294491] PNP: PS/2 Controller [PNP0303:KBC0,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 1.333590] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 1.333609] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 1.333689] mice: PS/2 mouse device common for all mice [ 1.333826] rtc_cmos 00:04: RTC can wake from S4 [ 1.333874] rtc_cmos 00:04: rtc core: registered rtc_cmos as rtc0 [ 1.333940] rtc0: alarms up to one day, 114 bytes nvram, hpet irqs [ 1.334044] device-mapper: uevent: version 1.0.3 [ 1.334146] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 1.334256] device-mapper: multipath: version 1.1.1 loaded [ 1.334259] device-mapper: multipath round-robin: version 1.0.0 loaded [ 1.334503] cpuidle: using governor ladder [ 1.334506] cpuidle: using governor menu [ 1.334814] TCP cubic registered [ 1.334943] NET: Registered protocol family 10 [ 1.335368] lo: Disabled Privacy Extensions [ 1.335589] NET: Registered protocol family 17 [ 1.336402] powernow-k8: Found 1 AMD Turion(tm) X2 Dual-Core Mobile RM-72 (2 cpu cores) (version 2.20.00) [ 1.336465] powernow-k8: 0 : pstate 0 (2100 MHz) [ 1.336467] powernow-k8: 1 : pstate 1 (1050 MHz) [ 1.336469] powernow-k8: 2 : pstate 2 (525 MHz) [ 1.337857] PM: Resume from disk failed. [ 1.337871] registered taskstats version 1 [ 1.338328] Magic number: 6:394:850 [ 1.338482] rtc_cmos 00:04: setting system clock to 2010-08-21 19:50:00 UTC (1282420200) [ 1.338485] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 1.338488] EDD information not available. [ 1.338591] Freeing unused kernel memory: 908k freed [ 1.339037] Write protecting the kernel read-only data: 10240k [ 1.339221] Freeing unused kernel memory: 424k freed [ 1.339599] Freeing unused kernel memory: 1644k freed [ 1.360119] usb 1-6: new high speed USB device using ehci_hcd and address 2 [ 1.365611] udev[73]: starting version 162 [ 1.369463] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3 [ 1.491894] ACPI: Battery Slot [BAT0] (battery present) [ 1.703341] sdhci: Secure Digital Host Controller Interface driver [ 1.703346] sdhci: Copyright(c) Pierre Ossman [ 1.704889] sdhci-pci 0000:08:00.0: SDHCI controller found [197b:2382] (rev 0) [ 1.704916] sdhci-pci 0000:08:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 1.704981] sdhci-pci 0000:08:00.0: setting latency timer to 64 [ 1.705028] Registered led device: mmc0:: [ 1.705083] mmc0: SDHCI controller on PCI [0000:08:00.0] using ADMA [ 1.725695] scsi0 : pata_atiixp [ 1.737284] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded [ 1.737316] r8169 0000:0a:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 1.737388] r8169 0000:0a:00.0: setting latency timer to 64 [ 1.737428] alloc irq_desc for 44 on node -1 [ 1.737431] alloc kstat_irqs on node -1 [ 1.737447] r8169 0000:0a:00.0: irq 44 for MSI/MSI-X [ 1.738106] r8169 0000:0a:00.0: eth0: RTL8102e at 0xffffc900020b2000, 00:23:5a:9d:f6:ea, XID 04c00000 IRQ 44 [ 1.743794] sdhci-pci 0000:08:00.2: SDHCI controller found [197b:2381] (rev 0) [ 1.743823] sdhci-pci 0000:08:00.2: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 1.743836] sdhci-pci 0000:08:00.2: Refusing to bind to secondary interface. [ 1.743843] sdhci-pci 0000:08:00.2: PCI INT A disabled [ 1.758174] scsi1 : pata_atiixp [ 1.759479] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0x8000 irq 14 [ 1.759482] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x8008 irq 15 [ 1.759929] ahci 0000:00:11.0: version 3.0 [ 1.760090] alloc irq_desc for 22 on node -1 [ 1.760092] alloc kstat_irqs on node -1 [ 1.760102] ahci 0000:00:11.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 1.760362] ahci 0000:00:11.0: AHCI 0001.0100 32 slots 6 ports 3 Gbps 0x3f impl SATA mode [ 1.760367] ahci 0000:00:11.0: flags: 64bit ncq sntf ilck pm led clo pmp pio slum part ccc [ 1.761898] scsi2 : ahci [ 1.762056] scsi3 : ahci [ 1.762120] scsi4 : ahci [ 1.762215] scsi5 : ahci [ 1.762312] scsi6 : ahci [ 1.762411] scsi7 : ahci [ 1.762497] ata3: SATA max UDMA/133 abar m1024@0xd2508000 port 0xd2508100 irq 22 [ 1.762502] ata4: SATA max UDMA/133 abar m1024@0xd2508000 port 0xd2508180 irq 22 [ 1.762506] ata5: SATA max UDMA/133 abar m1024@0xd2508000 port 0xd2508200 irq 22 [ 1.762510] ata6: SATA max UDMA/133 abar m1024@0xd2508000 port 0xd2508280 irq 22 [ 1.762514] ata7: SATA max UDMA/133 abar m1024@0xd2508000 port 0xd2508300 irq 22 [ 1.762518] ata8: SATA max UDMA/133 abar m1024@0xd2508000 port 0xd2508380 irq 22 [ 2.100074] ata4: SATA link down (SStatus 0 SControl 300) [ 2.100108] ata8: SATA link down (SStatus 0 SControl 300) [ 2.110074] ata5: SATA link down (SStatus 0 SControl 300) [ 2.110103] ata7: SATA link down (SStatus 0 SControl 300) [ 2.280055] ata6: softreset failed (device not ready) [ 2.280058] ata6: applying SB600 PMP SRST workaround and retrying [ 2.290107] ata3: softreset failed (device not ready) [ 2.290110] ata3: applying SB600 PMP SRST workaround and retrying [ 2.460066] ata6: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 2.464182] ata6.00: ATAPI: HL-DT-ST DVDRAM GT20L, DC03, max UDMA/100 [ 2.469045] ata6.00: configured for UDMA/100 [ 2.471313] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 2.471848] ata3.00: ATA-8: FUJITSU MHZ2320BH G2, 8909, max UDMA/100 [ 2.471850] ata3.00: 625142448 sectors, multi 16: LBA48 NCQ (depth 31/32), AA [ 2.472566] ata3.00: configured for UDMA/100 [ 2.490279] scsi 2:0:0:0: Direct-Access ATA FUJITSU MHZ2320B 8909 PQ: 0 ANSI: 5 [ 2.490477] sd 2:0:0:0: Attached scsi generic sg0 type 0 [ 2.490584] sd 2:0:0:0: [sda] 625142448 512-byte logical blocks: (320 GB/298 GiB) [ 2.490732] sd 2:0:0:0: [sda] Write Protect is off [ 2.490735] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 2.490787] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.491085] sda: [ 2.493606] scsi 5:0:0:0: CD-ROM HL-DT-ST DVDRAM GT20L DC03 PQ: 0 ANSI: 5 [ 2.504908] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 2.504913] Uniform CD-ROM driver Revision: 3.20 [ 2.505045] sr 5:0:0:0: Attached scsi CD-ROM sr0 [ 2.505122] sr 5:0:0:0: Attached scsi generic sg1 type 5 [ 2.527237] sda1 sda2 sda3 < sda5 sda6 > [ 2.546333] sd 2:0:0:0: [sda] Attached SCSI disk [ 3.129127] EXT4-fs (sda6): mounted filesystem with ordered data mode. Opts: (null) [ 5.956755] Adding 8787516k swap on /dev/sda5. Priority:-1 extents:1 across:8787516k [ 5.976184] udev[386]: starting version 162 [ 6.054853] lirc_dev: IR Remote Control driver registered, major 61 [ 6.057101] BUG: unable to handle kernel NULL pointer dereference at (null) [ 6.059918] IP: [] kfifo_alloc+0x2e/0xb0 [ 6.061590] PGD 13ad1b067 PUD 13ad1a067 PMD 0 [ 6.061590] Oops: 0002 [#1] SMP [ 6.061590] last sysfs file: /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:26/PNP0303:00/uevent [ 6.061590] CPU 1 [ 6.061590] Modules linked in: lirc_ene0100(+) input_polldev(+) lirc_dev parport(+) ahci r8169 mii sdhci_pci sdhci led_class pata_atiixp libahci [ 6.061590] [ 6.061590] Pid: 407, comm: modprobe Not tainted 2.6.35-17-generic #23-Ubuntu 30FC/HP Pavilion dv7 Notebook PC [ 6.061590] RIP: 0010:[] [] kfifo_alloc+0x2e/0xb0 [ 6.061590] RSP: 0018:ffff88013b475d08 EFLAGS: 00010286 [ 6.061590] RAX: ffff8801384be000 RBX: 0000000000000000 RCX: ffffffff8107f199 [ 6.061590] RDX: ffff8801384ba000 RSI: 00000000000000d0 RDI: 0000000000000246 [ 6.061590] RBP: ffff88013b475d18 R08: 0000000000000000 R09: 0000000000000246 [ 6.061590] R10: 0000000000000030 R11: 0000000000000000 R12: 0000000000001000 [ 6.061590] R13: ffff8801394bc800 R14: ffff88013b64c280 R15: 00000000fffffff4 [ 6.061590] FS: 00007f5fb9cd0700(0000) GS:ffff880001e80000(0000) knlGS:0000000000000000 [ 6.061590] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 6.061590] CR2: 0000000000000000 CR3: 000000013ad17000 CR4: 00000000000006e0 [ 6.061590] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 6.061590] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 6.061590] Process modprobe (pid: 407, threadinfo ffff88013b474000, task ffff88013b478000) [ 6.061590] Stack: [ 6.061590] ffff88013a65cb40 ffff88013b61b7e0 ffff88013b475d58 ffffffffa005ee4f [ 6.156739] [Firmware Bug]: ACPI: ACPI brightness control misses _BQC function [ 6.162452] acpi device:03: registered as cooling_device2 [ 6.162685] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:01/LNXVIDEO:00/input/input4 [ 6.162752] ACPI: Video Device [VGA] (multi-head: yes rom: no post: no) [ 6.248502] lis3lv02d: hardware type DV7 found. [ 6.249343] lis3lv02d: 8 bits sensor found [ 6.497484] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 [ 6.489816] [ 6.489816] <0> ffff88013b475d38 ffffffffa005f060 ffff8801394bc800 ffffffffa005f580 [ 6.489816] <0> ffffffffa005f540 00000000fffffff4 ffff88013b475d98 ffffffff8133d7d5 [ 6.489816] Call Trace: [ 6.489816] [] ene_probe+0x17f/0x350 [lirc_ene0100] [ 6.489816] [] pnp_device_probe+0x95/0x100 [ 6.489816] [] ? driver_sysfs_add+0x62/0x90 [ 6.489816] [] really_probe+0x68/0x190 [ 6.489816] [] driver_probe_device+0x45/0x70 [ 6.489816] [] __driver_attach+0x9b/0xa0 [ 6.489816] [] ? __driver_attach+0x0/0xa0 [ 6.489816] [] bus_for_each_dev+0x68/0x90 [ 6.489816] [] driver_attach+0x1e/0x20 [ 6.489816] [] bus_add_driver+0xde/0x280 [ 6.489816] [] driver_register+0x80/0x150 [ 6.489816] [] ? ene_init+0x0/0x3e [lirc_ene0100] [ 6.489816] [] pnp_register_driver+0x21/0x30 [ 6.489816] [] ene_init+0x3c/0x3e [lirc_ene0100] [ 6.489816] [] do_one_initcall+0x3c/0x1a0 [ 6.489816] [] sys_init_module+0xbb/0x200 [ 6.489816] [] system_call_fastpath+0x16/0x1b [ 6.489816] Code: e5 41 54 53 0f 1f 44 00 00 48 89 fb 89 f7 41 89 f4 48 85 ff 48 8d 47 ff 74 33 48 85 f8 75 2e 89 d6 e8 07 35 0c 00 48 85 c0 74 52 <48> 89 03 44 89 63 08 31 c0 c7 43 10 00 00 00 00 c7 43 0c 00 00 [ 6.489816] RIP [] kfifo_alloc+0x2e/0xb0 [ 6.489816] RSP [ 6.489816] CR2: 0000000000000000 [ 6.692457] ---[ end trace ca37078d1bb9c7fe ]--- [ 8.104496] EXT4-fs (sda6): re-mounted. Opts: errors=remount-ro [ 8.151532] input: ST LIS3LV02DL Accelerometer as /devices/platform/lis3lv02d/input/input5 [ 8.253633] EDAC MC: Ver: 2.1.0 Aug 20 2010 [ 8.298888] lp: driver loaded but no devices found [ 8.341356] jmb38x_ms 0000:08:00.3: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 8.420946] jmb38x_ms 0000:08:00.3: setting latency timer to 64 [ 8.423190] piix4_smbus 0000:00:14.0: SMBus Host Controller at 0xb00, revision 0 [ 8.622087] cfg80211: Calling CRDA to update world regulatory domain [ 8.675153] input: HP WMI hotkeys as /devices/virtual/input/input6 [ 8.685723] Linux video capture interface: v2.00 [ 8.689657] uvcvideo: Found UVC 1.00 device HP Webcam (090c:c371) [ 8.694701] input: HP Webcam as /devices/pci0000:00/0000:00:12.2/usb1/1-6/1-6:1.0/input/input7 [ 8.694770] usbcore: registered new interface driver uvcvideo [ 8.694772] USB Video Class driver (v0.1.0) [ 8.699808] [drm] Initialized drm 1.1.0 20060810 [ 9.070264] Registered led device: hp::hddprotect [ 9.129834] lis3lv02d driver loaded. [ 9.362550] EDAC amd64_edac: Ver: 3.3.0 Aug 20 2010 [ 9.414648] EDAC amd64: This node reports that Memory ECC is currently disabled, set F3x44[22] (0000:00:18.3). [ 9.524470] EDAC amd64: ECC disabled in the BIOS or no ECC capability, module will not load. [ 9.524471] Either enable ECC checking or force module loading by setting 'ecc_enable_override'. [ 9.524473] (Note that use of the override may cause unknown side effects.) [ 9.550099] type=1400 audit(1282434608.680:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient3" pid=666 comm="apparmor_parser" [ 9.550393] type=1400 audit(1282434608.680:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=666 comm="apparmor_parser" [ 9.550561] type=1400 audit(1282434608.680:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=666 comm="apparmor_parser" [ 10.260593] amd64_edac: probe of 0000:00:18.2 failed with error -22 [ 10.326545] ath5k 0000:09:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 10.391727] ath5k 0000:09:00.0: setting latency timer to 64 [ 10.455952] ath5k 0000:09:00.0: registered as 'phy0' [ 11.023613] ath: EEPROM regdomain: 0x64 [ 11.088109] ath: EEPROM indicates we should expect a direct regpair map [ 11.151074] ath: Country alpha2 being used: 00 [ 11.211001] ath: Regpair used: 0x64 [ 11.273339] Synaptics Touchpad, model: 1, fw: 7.2, id: 0x1a0b1, caps: 0xd04751/0xa00000/0x20000 [ 11.468134] phy0: Selected rate control algorithm 'minstrel' [ 11.488470] [drm] radeon defaulting to kernel modesetting. [ 11.488474] [drm] radeon kernel modesetting enabled. [ 11.488597] radeon 0000:01:05.0: power state changed by ACPI to D0 [ 11.488608] radeon 0000:01:05.0: power state changed by ACPI to D0 [ 11.488617] radeon 0000:01:05.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 11.488623] radeon 0000:01:05.0: setting latency timer to 64 [ 11.491951] [drm] initializing kernel modesetting (RS780 0x1002:0x9612). [ 11.917265] [drm] register mmio base: 0xD2400000 [ 11.919122] Registered led device: ath5k-phy0::rx [ 11.919236] Registered led device: ath5k-phy0::tx [ 11.919240] ath5k phy0: Atheros AR2425 chip found (MAC: 0xe2, PHY: 0x70) [ 11.924275] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input8 [ 12.184424] cfg80211: World regulatory domain updated: [ 12.184428] (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 12.184431] (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 12.184434] (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 12.184436] (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 12.184439] (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 12.184441] (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 12.516511] HDA Intel 0000:00:14.2: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 12.673900] [drm] register mmio size: 65536 [ 12.678078] HDA Intel 0000:00:14.2: setting latency timer to 64 [ 12.701513] ATOM BIOS: HP_TrinityUMA [ 12.701541] [drm] Clocks initialized ! [ 12.701557] radeon 0000:01:05.0: VRAM: 256M 0xC0000000 - 0xCFFFFFFF (256M used) [ 12.701560] radeon 0000:01:05.0: GTT: 512M 0xA0000000 - 0xBFFFFFFF [ 12.969054] [drm] Detected VRAM RAM=256M, BAR=256M [ 12.972790] [drm] RAM width 32bits DDR [ 12.976492] [TTM] Zone kernel: Available graphics memory: 1898742 kiB. [ 12.980209] [TTM] Initializing pool allocator. [ 12.983781] [drm] radeon: 256M of VRAM memory ready [ 12.987185] [drm] radeon: 512M of GTT memory ready. [ 12.991010] [drm] radeon: irq initialized. [ 12.994491] [drm] GART: num cpu pages 131072, num gpu pages 131072 [ 12.999769] [drm] Loading RS780 Microcode [ 13.551590] input: HDA ATI SB Mic at Ext Front Jack as /devices/pci0000:00/0000:00:14.2/sound/card0/input9 [ 13.558778] input: HDA ATI SB HP Out at Ext Front Jack as /devices/pci0000:00/0000:00:14.2/sound/card0/input10 [ 14.226389] [drm] ring test succeeded in 0 usecs [ 14.230153] [drm] radeon: ib pool ready. [ 14.233927] [drm] ib test succeeded in 0 usecs [ 14.237253] [drm] Enabling audio support [ 14.237586] [drm] Unknown TV standard; defaulting to NTSC [ 14.244563] [drm] Radeon Display Connectors [ 14.248544] [drm] Connector 0: [ 14.252124] [drm] VGA [ 14.255470] [drm] DDC: 0x7e40 0x7e40 0x7e44 0x7e44 0x7e48 0x7e48 0x7e4c 0x7e4c [ 14.262416] [drm] Encoders: [ 14.265857] [drm] CRT1: INTERNAL_KLDSCP_DAC1 [ 14.269191] [drm] Connector 1: [ 14.272617] [drm] HDMI-A [ 14.275890] [drm] HPD1 [ 14.278962] [drm] DDC: 0x7e60 0x7e60 0x7e64 0x7e64 0x7e68 0x7e68 0x7e6c 0x7e6c [ 14.285322] [drm] Encoders: [ 14.288389] [drm] DFP1: INTERNAL_UNIPHY [ 14.291524] [drm] Connector 2: [ 14.294515] [drm] LVDS [ 14.297402] [drm] DDC: 0x7e50 0x7e50 0x7e54 0x7e54 0x7e58 0x7e58 0x7e5c 0x7e5c [ 14.303635] [drm] Encoders: [ 14.306714] [drm] LCD1: INTERNAL_KLDSCP_LVTMA [ 14.367081] [drm] radeon: power management initialized [ 14.887213] [drm] fb mappable at 0xC0141000 [ 14.890174] [drm] vram apper at 0xC0000000 [ 14.893021] [drm] size 5300224 [ 14.895660] [drm] fb depth is 24 [ 14.898315] [drm] pitch is 5888 [ 14.900959] checking generic (c012c000 130000) vs hw (c0000000 10000000) [ 14.903748] fb: conflicting fb hw usage radeondrmfb vs VESA VGA - removing generic driver [ 14.909279] Console: switching to colour dummy device 80x25 [ 15.372946] type=1400 audit(1282434614.530:5): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient3" pid=931 comm="apparmor_parser" [ 15.373244] type=1400 audit(1282434614.530:6): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=931 comm="apparmor_parser" [ 15.373413] type=1400 audit(1282434614.530:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=931 comm="apparmor_parser" [ 15.397592] type=1400 audit(1282434614.550:8): apparmor="STATUS" operation="profile_load" name="/usr/share/gdm/guest-session/Xsession" pid=930 comm="apparmor_parser" [ 15.426585] type=1400 audit(1282434614.580:9): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince" pid=932 comm="apparmor_parser" [ 15.430372] type=1400 audit(1282434614.580:10): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-previewer" pid=932 comm="apparmor_parser" [ 15.432923] type=1400 audit(1282434614.590:11): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-thumbnailer" pid=932 comm="apparmor_parser" [ 15.447046] type=1400 audit(1282434614.600:12): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=935 comm="apparmor_parser" [ 15.455709] type=1400 audit(1282434614.610:13): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=934 comm="apparmor_parser" [ 15.456105] type=1400 audit(1282434614.610:14): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=934 comm="apparmor_parser" [ 16.880192] Console: switching to colour frame buffer device 180x56 [ 16.905389] fb0: radeondrmfb frame buffer device [ 16.905391] drm: registered panic notifier [ 16.905640] Slow work thread pool: Starting up [ 16.905725] Slow work thread pool: Ready [ 16.905733] [drm] Initialized radeon 2.5.0 20080528 for 0000:01:05.0 on minor 0 [ 16.906231] HDA Intel 0000:01:05.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 16.906315] alloc irq_desc for 45 on node -1 [ 16.906317] alloc kstat_irqs on node -1 [ 16.906330] HDA Intel 0000:01:05.1: irq 45 for MSI/MSI-X [ 16.906360] HDA Intel 0000:01:05.1: setting latency timer to 64 [ 17.925025] ADDRCONF(NETDEV_UP): wlan0: link is not ready [ 17.954736] r8169 0000:0a:00.0: eth0: link down [ 17.955868] ADDRCONF(NETDEV_UP): eth0: link is not ready Bug: 622200 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-17-generic (buildd@yellow) (gcc version 4.4.5 20100816 (prerelease) (Ubuntu/Linaro 4.4.4-9ubuntu1) ) #23-Ubuntu SMP Fri Aug 20 01:22:04 UTC 2010 (Ubuntu 2.6.35-17.23-generic 2.6.35.2) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-17-generic root=UUID=3a2f5553-3f7d-4405-b092-10591e22095f ro quiet splash [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) [ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000afb8f000 (usable) [ 0.000000] BIOS-e820: 00000000afb8f000 - 00000000afc3c000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000afc3c000 - 00000000afd70000 (usable) [ 0.000000] BIOS-e820: 00000000afd70000 - 00000000afdbf000 (reserved) [ 0.000000] BIOS-e820: 00000000afdbf000 - 00000000afe57000 (usable) [ 0.000000] BIOS-e820: 00000000afe57000 - 00000000afebf000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000afebf000 - 00000000afee9000 (usable) [ 0.000000] BIOS-e820: 00000000afee9000 - 00000000afeff000 (ACPI data) [ 0.000000] BIOS-e820: 00000000afeff000 - 00000000aff00000 (usable) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000e4000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000fff00000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 0000000140000000 (usable) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI 2.4 present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0x140000 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-through [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 00FFF00000 mask FFFFF00000 write-protect [ 0.000000] 1 base 0000000000 mask FF80000000 write-back [ 0.000000] 2 base 0080000000 mask FFE0000000 write-back [ 0.000000] 3 base 00A0000000 mask FFF0000000 write-back [ 0.000000] 4 base 0100000000 mask FFC0000000 write-back [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] TOM2: 0000000140000000 aka 5120M [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] last_pfn = 0xaff00 max_arch_pfn = 0x400000000 [ 0.000000] e820 update range: 0000000000001000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009fc00 (usable) [ 0.000000] modified: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 00000000afb8f000 (usable) [ 0.000000] modified: 00000000afb8f000 - 00000000afc3c000 (ACPI NVS) [ 0.000000] modified: 00000000afc3c000 - 00000000afd70000 (usable) [ 0.000000] modified: 00000000afd70000 - 00000000afdbf000 (reserved) [ 0.000000] modified: 00000000afdbf000 - 00000000afe57000 (usable) [ 0.000000] modified: 00000000afe57000 - 00000000afebf000 (ACPI NVS) [ 0.000000] modified: 00000000afebf000 - 00000000afee9000 (usable) [ 0.000000] modified: 00000000afee9000 - 00000000afeff000 (ACPI data) [ 0.000000] modified: 00000000afeff000 - 00000000aff00000 (usable) [ 0.000000] modified: 00000000e0000000 - 00000000e4000000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000fff00000 - 0000000100000000 (reserved) [ 0.000000] modified: 0000000100000000 - 0000000140000000 (usable) [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] init_memory_mapping: 0000000000000000-00000000aff00000 [ 0.000000] 0000000000 - 00afe00000 page 2M [ 0.000000] 00afe00000 - 00aff00000 page 4k [ 0.000000] kernel direct mapping tables up to aff00000 @ 16000-1b000 [ 0.000000] init_memory_mapping: 0000000100000000-0000000140000000 [ 0.000000] 0100000000 - 0140000000 page 2M [ 0.000000] kernel direct mapping tables up to 140000000 @ 19000-1f000 [ 0.000000] RAMDISK: 37572000 - 37ff0000 [ 0.000000] ACPI: RSDP 00000000000fe020 00024 (v02 HP ) [ 0.000000] ACPI: XSDT 00000000afefe120 00064 (v01 HPQOEM SLIC-MPC 00000003 01000013) [ 0.000000] ACPI: FACP 00000000afefd000 000F4 (v04 HP 3045 00000003 MSFT 0100000D) [ 0.000000] ACPI: DSDT 00000000afef1000 08BC6 (v01 HP 3045 F0000000 INTL 20051117) [ 0.000000] ACPI: FACS 00000000afe60000 00040 [ 0.000000] ACPI: HPET 00000000afefc000 00038 (v01 HP 3045 00000001 MSFT 000F4240) [ 0.000000] ACPI: APIC 00000000afefb000 00084 (v02 HP 3045 00000001 TFSM 000F4240) [ 0.000000] ACPI: MCFG 00000000afefa000 0003C (v01 HP 3045 00000001 TFSM 000F4240) [ 0.000000] ACPI: BOOT 00000000afef0000 00028 (v01 HP 3045 00000001 ? 00000001) [ 0.000000] ACPI: SLIC 00000000afeef000 00176 (v01 HPQOEM SLIC-MPC 06040000 LTP 00000001) [ 0.000000] ACPI: SSDT 00000000afeee000 00386 (v01 AMD PowerNow 00000001 AMD 00000001) [ 0.000000] ACPI: SRAT 00000000afeed000 000A0 (v03 AMD AMD CRB 00000001 AMD 00000001) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] SRAT: PXM 0 -> APIC 0x00 -> Node 0 [ 0.000000] SRAT: PXM 0 -> APIC 0x01 -> Node 0 [ 0.000000] SRAT: Node 0 PXM 0 0-c0000000 [ 0.000000] SRAT: Node 0 PXM 0 100000000-140000000 [ 0.000000] SRAT: Node 0 [0,c0000000) + [100000000,140000000) -> [0,140000000) [ 0.000000] NUMA: Using 63 for the hash shift. [ 0.000000] Initmem setup node 0 0000000000000000-0000000140000000 [ 0.000000] NODE_DATA [0000000100000000 - 0000000100004fff] [ 0.000000] [ffffea0000000000-ffffea00045fffff] PMD -> [ffff880100200000-ffff8801037fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal 0x00100000 -> 0x00140000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[7] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x000afb8f [ 0.000000] 0: 0x000afc3c -> 0x000afd70 [ 0.000000] 0: 0x000afdbf -> 0x000afe57 [ 0.000000] 0: 0x000afebf -> 0x000afee9 [ 0.000000] 0: 0x000afeff -> 0x000aff00 [ 0.000000] 0: 0x00100000 -> 0x00140000 [ 0.000000] On node 0 totalpages: 982293 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3927 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 14280 pages used for memmap [ 0.000000] DMA32 zone: 701886 pages, LIFO batch:31 [ 0.000000] Normal zone: 3584 pages used for memmap [ 0.000000] Normal zone: 258560 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x04] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 4, version 33, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x1002a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 4 CPUs, 2 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [1a000 - 1a7ff] [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] PM: Registered nosave memory: 00000000afb8f000 - 00000000afc3c000 [ 0.000000] PM: Registered nosave memory: 00000000afd70000 - 00000000afdbf000 [ 0.000000] PM: Registered nosave memory: 00000000afe57000 - 00000000afebf000 [ 0.000000] PM: Registered nosave memory: 00000000afee9000 - 00000000afeff000 [ 0.000000] PM: Registered nosave memory: 00000000aff00000 - 00000000e0000000 [ 0.000000] PM: Registered nosave memory: 00000000e0000000 - 00000000e4000000 [ 0.000000] PM: Registered nosave memory: 00000000e4000000 - 00000000fec00000 [ 0.000000] PM: Registered nosave memory: 00000000fec00000 - 00000000fec01000 [ 0.000000] PM: Registered nosave memory: 00000000fec01000 - 00000000fee00000 [ 0.000000] PM: Registered nosave memory: 00000000fee00000 - 00000000fee01000 [ 0.000000] PM: Registered nosave memory: 00000000fee01000 - 00000000fff00000 [ 0.000000] PM: Registered nosave memory: 00000000fff00000 - 0000000100000000 [ 0.000000] Allocating PCI resources starting at aff00000 (gap: aff00000:30100000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:4 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 30 pages/cpu @ffff880001e00000 s91456 r8192 d23232 u524288 [ 0.000000] early_res array is doubled to 128 at [1a800 - 1b7ff] [ 0.000000] pcpu-alloc: s91456 r8192 d23232 u524288 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 964373 [ 0.000000] Policy zone: Normal [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-17-generic root=UUID=3a2f5553-3f7d-4405-b092-10591e22095f ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Subtract (63 early reservations) [ 0.000000] #1 [0001000000 - 0001d170d4] TEXT DATA BSS [ 0.000000] #2 [0037572000 - 0037ff0000] RAMDISK [ 0.000000] #3 [000009fc00 - 0000100000] BIOS reserved [ 0.000000] #4 [0001d18000 - 0001d181f0] BRK [ 0.000000] #5 [0000010000 - 0000012000] TRAMPOLINE [ 0.000000] #6 [0000012000 - 0000016000] ACPI WAKEUP [ 0.000000] #7 [0000016000 - 0000019000] PGTABLE [ 0.000000] #8 [0000019000 - 000001a000] PGTABLE [ 0.000000] #9 [0100000000 - 0100005000] NODE_DATA [ 0.000000] #10 [0001d18200 - 0001d19200] BOOTMEM [ 0.000000] #11 [0001d17100 - 0001d173d0] BOOTMEM [ 0.000000] #12 [0100005000 - 0100006000] BOOTMEM [ 0.000000] #13 [0100006000 - 0100007000] BOOTMEM [ 0.000000] #14 [0100200000 - 0103800000] MEMMAP 0 [ 0.000000] #15 [0001d17400 - 0001d17580] BOOTMEM [ 0.000000] #16 [0001d19200 - 0001d31200] BOOTMEM [ 0.000000] #17 [0001d31200 - 0001d37200] BOOTMEM [ 0.000000] #18 [0001d38000 - 0001d39000] BOOTMEM [ 0.000000] #19 [0001d17580 - 0001d175c1] BOOTMEM [ 0.000000] #20 [0001d17600 - 0001d17643] BOOTMEM [ 0.000000] #21 [0001d17680 - 0001d17a70] BOOTMEM [ 0.000000] #22 [0001d17a80 - 0001d17ae8] BOOTMEM [ 0.000000] #23 [0001d17b00 - 0001d17b68] BOOTMEM [ 0.000000] #24 [0001d17b80 - 0001d17be8] BOOTMEM [ 0.000000] #25 [0001d17c00 - 0001d17c68] BOOTMEM [ 0.000000] #26 [0001d17c80 - 0001d17ce8] BOOTMEM [ 0.000000] #27 [0001d17d00 - 0001d17d68] BOOTMEM [ 0.000000] #28 [0001d17d80 - 0001d17de8] BOOTMEM [ 0.000000] #29 [0001d17e00 - 0001d17e68] BOOTMEM [ 0.000000] #30 [0001d17e80 - 0001d17ee8] BOOTMEM [ 0.000000] #31 [0001d17f00 - 0001d17f68] BOOTMEM [ 0.000000] #32 [0001d17f80 - 0001d17fe8] BOOTMEM [ 0.000000] #33 [0001d37200 - 0001d37268] BOOTMEM [ 0.000000] #34 [0001d37280 - 0001d372e8] BOOTMEM [ 0.000000] #35 [0001d37300 - 0001d37368] BOOTMEM [ 0.000000] #36 [0001d37380 - 0001d373e8] BOOTMEM [ 0.000000] #37 [0001d37400 - 0001d37468] BOOTMEM [ 0.000000] #38 [0001d37480 - 0001d374e8] BOOTMEM [ 0.000000] #39 [0001d37500 - 0001d37520] BOOTMEM [ 0.000000] #40 [0001d37540 - 0001d37560] BOOTMEM [ 0.000000] #41 [0001d37580 - 0001d375a0] BOOTMEM [ 0.000000] #42 [0001d375c0 - 0001d375e0] BOOTMEM [ 0.000000] #43 [0001d37600 - 0001d37620] BOOTMEM [ 0.000000] #44 [0001d37640 - 0001d37660] BOOTMEM [ 0.000000] #45 [0001d37680 - 0001d376ea] BOOTMEM [ 0.000000] #46 [0001d37700 - 0001d3776a] BOOTMEM [ 0.000000] #47 [0001e00000 - 0001e1e000] BOOTMEM [ 0.000000] #48 [0001e80000 - 0001e9e000] BOOTMEM [ 0.000000] #49 [0001f00000 - 0001f1e000] BOOTMEM [ 0.000000] #50 [0001f80000 - 0001f9e000] BOOTMEM [ 0.000000] #51 [0001d37780 - 0001d37788] BOOTMEM [ 0.000000] #52 [0001d377c0 - 0001d377c8] BOOTMEM [ 0.000000] #53 [0001d37800 - 0001d37810] BOOTMEM [ 0.000000] #54 [0001d37840 - 0001d37860] BOOTMEM [ 0.000000] #55 [0001d37880 - 0001d379b0] BOOTMEM [ 0.000000] #56 [0001d379c0 - 0001d37a10] BOOTMEM [ 0.000000] #57 [0001d37a40 - 0001d37a90] BOOTMEM [ 0.000000] #58 [0001d39000 - 0001d41000] BOOTMEM [ 0.000000] #59 [0001f9e000 - 0005f9e000] BOOTMEM [ 0.000000] #60 [0001d41000 - 0001d61000] BOOTMEM [ 0.000000] #61 [0001d61000 - 0001da1000] BOOTMEM [ 0.000000] #62 [000001b800 - 0000023800] BOOTMEM [ 0.000000] Memory: 3783056k/5242880k available (5698k kernel code, 1313708k absent, 146116k reserved, 5389k data, 908k init) [ 0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:4352 nr_irqs:712 [ 0.000000] spurious 8259A interrupt: IRQ7. [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 39321600 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1100.259 MHz processor. [ 0.030031] Calibrating delay loop (skipped), value calculated using timer frequency.. 4401.02 BogoMIPS (lpj=22005110) [ 0.030049] pid_max: default: 32768 minimum: 301 [ 0.030184] Security Framework initialized [ 0.030256] AppArmor: AppArmor initialized [ 0.030262] Yama: becoming mindful. [ 0.032229] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.046334] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.050000] Mount-cache hash table entries: 256 [ 0.050000] Initializing cgroup subsys ns [ 0.050000] Initializing cgroup subsys cpuacct [ 0.050000] Initializing cgroup subsys memory [ 0.050000] Initializing cgroup subsys devices [ 0.050000] Initializing cgroup subsys freezer [ 0.050000] Initializing cgroup subsys net_cls [ 0.050000] tseg: 00aff00000 [ 0.050000] CPU: Physical Processor ID: 0 [ 0.050000] CPU: Processor Core ID: 0 [ 0.050000] mce: CPU supports 5 MCE banks [ 0.050000] Performance Events: AMD PMU driver. [ 0.050000] ... version: 0 [ 0.050000] ... bit width: 48 [ 0.050000] ... generic registers: 4 [ 0.050000] ... value mask: 0000ffffffffffff [ 0.050000] ... max period: 00007fffffffffff [ 0.050000] ... fixed-purpose events: 0 [ 0.050000] ... event mask: 000000000000000f [ 0.050000] ACPI: Core revision 20100428 [ 0.070128] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.070169] ftrace: allocating 22644 entries in 89 pages [ 0.080321] Setting APIC routing to flat [ 0.081118] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.192889] CPU0: AMD Turion(tm) X2 Ultra Dual-Core Mobile ZM-82 stepping 01 [ 0.200000] Booting Node 0, Processors #1 [ 0.360000] TSC synchronization [CPU#0 -> CPU#1]: [ 0.360000] Measured 217435192 cycles TSC warp between CPUs, turning off TSC clock. [ 0.360000] Marking TSC unstable due to check_tsc_sync_source failed [ 0.360033] Brought up 2 CPUs [ 0.360043] Total of 2 processors activated (8799.87 BogoMIPS). [ 0.360798] devtmpfs: initialized [ 0.361823] regulator: core version 0.5 [ 0.361887] Time: 9:01:00 Date: 08/22/10 [ 0.361995] NET: Registered protocol family 16 [ 0.362069] Trying to unpack rootfs image as initramfs... [ 0.362378] TOM: 00000000c0000000 aka 3072M [ 0.362384] Fam 10h mmconf [e0000000, e0ffffff] [ 0.362399] TOM2: 0000000140000000 aka 5120M [ 0.362422] ACPI: bus type pci registered [ 0.362614] PCI: MMCONFIG for domain 0000 [bus 00-3f] at [mem 0xe0000000-0xe3ffffff] (base 0xe0000000) [ 0.362622] PCI: MMCONFIG at [mem 0xe0000000-0xe3ffffff] reserved in E820 [ 0.373729] PCI: Using configuration type 1 for base access [ 0.373782] mtrr: your CPUs had inconsistent fixed MTRR settings [ 0.373785] mtrr: probably your BIOS does not setup all CPUs. [ 0.373789] mtrr: corrected configuration. [ 0.380868] bio: create slab at 0 [ 0.382911] ACPI: EC: Look up EC in DSDT [ 0.385460] ACPI: Executed 1 blocks of module-level executable AML code [ 0.390000] ACPI: BIOS _OSI(Linux) query ignored [ 0.390178] ACPI: Interpreter enabled [ 0.390185] ACPI: (supports S0 S3 S4 S5) [ 0.390236] ACPI: Using IOAPIC for interrupt routing [ 0.397215] ACPI: EC: GPE = 0x3, I/O: command/status = 0x66, data = 0x62 [ 0.397215] ACPI: No dock devices found. [ 0.397215] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.400175] \_SB_.PCI0:_OSC request failed [ 0.400179] _OSC request data:1 8 1f [ 0.400189] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.404414] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 0.404420] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 0.404426] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.404432] pci_root PNP0A08:00: host bridge window [mem 0x000c0000-0x000c3fff] [ 0.404437] pci_root PNP0A08:00: host bridge window [mem 0x000c4000-0x000c7fff] [ 0.404443] pci_root PNP0A08:00: host bridge window [mem 0x000c8000-0x000cbfff] [ 0.404448] pci_root PNP0A08:00: host bridge window [mem 0x000cc000-0x000cffff] [ 0.404454] pci_root PNP0A08:00: host bridge window [mem 0x000d0000-0x000d3fff] [ 0.404459] pci_root PNP0A08:00: host bridge window [mem 0x000d4000-0x000d7fff] [ 0.404465] pci_root PNP0A08:00: host bridge window [mem 0x000d8000-0x000dbfff] [ 0.404470] pci_root PNP0A08:00: host bridge window [mem 0x000dc000-0x000dffff] [ 0.404476] pci_root PNP0A08:00: host bridge window [mem 0x000e0000-0x000e3fff] [ 0.404481] pci_root PNP0A08:00: host bridge window [mem 0x000e4000-0x000e7fff] [ 0.404487] pci_root PNP0A08:00: host bridge window [mem 0x000e8000-0x000ebfff] [ 0.404492] pci_root PNP0A08:00: host bridge window [mem 0x000ec000-0x000effff] [ 0.404498] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xdfffffff] [ 0.404504] pci_root PNP0A08:00: host bridge window [mem 0xe4000000-0xffffffff] [ 0.404834] pci 0000:00:04.0: PME# supported from D0 D3hot D3cold [ 0.404842] pci 0000:00:04.0: PME# disabled [ 0.404960] pci 0000:00:05.0: PME# supported from D0 D3hot D3cold [ 0.404967] pci 0000:00:05.0: PME# disabled [ 0.405076] pci 0000:00:06.0: PME# supported from D0 D3hot D3cold [ 0.405083] pci 0000:00:06.0: PME# disabled [ 0.405269] pci 0000:00:11.0: reg 10: [io 0x6038-0x603f] [ 0.405286] pci 0000:00:11.0: reg 14: [io 0x604c-0x604f] [ 0.405302] pci 0000:00:11.0: reg 18: [io 0x6030-0x6037] [ 0.405318] pci 0000:00:11.0: reg 1c: [io 0x6048-0x604b] [ 0.405335] pci 0000:00:11.0: reg 20: [io 0x6010-0x601f] [ 0.405351] pci 0000:00:11.0: reg 24: [mem 0xd2409000-0xd24093ff] [ 0.405476] pci 0000:00:12.0: reg 10: [mem 0xd2408000-0xd2408fff] [ 0.405606] pci 0000:00:12.1: reg 10: [mem 0xd2407000-0xd2407fff] [ 0.405764] pci 0000:00:12.2: reg 10: [mem 0xd2409500-0xd24095ff] [ 0.405888] pci 0000:00:12.2: supports D1 D2 [ 0.405893] pci 0000:00:12.2: PME# supported from D0 D1 D2 D3hot [ 0.405903] pci 0000:00:12.2: PME# disabled [ 0.405978] pci 0000:00:13.0: reg 10: [mem 0xd2406000-0xd2406fff] [ 0.406107] pci 0000:00:13.1: reg 10: [mem 0xd2405000-0xd2405fff] [ 0.406273] pci 0000:00:13.2: reg 10: [mem 0xd2409400-0xd24094ff] [ 0.406397] pci 0000:00:13.2: supports D1 D2 [ 0.406402] pci 0000:00:13.2: PME# supported from D0 D1 D2 D3hot [ 0.406412] pci 0000:00:13.2: PME# disabled [ 0.406672] pci 0000:00:14.1: reg 10: [io 0x0000-0x0007] [ 0.406689] pci 0000:00:14.1: reg 14: [io 0x0000-0x0003] [ 0.406705] pci 0000:00:14.1: reg 18: [io 0x0000-0x0007] [ 0.406721] pci 0000:00:14.1: reg 1c: [io 0x0000-0x0003] [ 0.406737] pci 0000:00:14.1: reg 20: [io 0x6000-0x600f] [ 0.406887] pci 0000:00:14.2: reg 10: [mem 0xd2400000-0xd2403fff 64bit] [ 0.406990] pci 0000:00:14.2: PME# supported from D0 D3hot D3cold [ 0.407000] pci 0000:00:14.2: PME# disabled [ 0.407249] pci 0000:00:14.5: reg 10: [mem 0xd2404000-0xd2404fff] [ 0.407753] pci 0000:01:05.0: reg 10: [mem 0xc0000000-0xcfffffff pref] [ 0.407764] pci 0000:01:05.0: reg 14: [io 0x5000-0x50ff] [ 0.407775] pci 0000:01:05.0: reg 18: [mem 0xd2300000-0xd230ffff] [ 0.407796] pci 0000:01:05.0: reg 24: [mem 0xd2200000-0xd22fffff] [ 0.407832] pci 0000:01:05.0: supports D1 D2 [ 0.407960] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.407970] pci 0000:00:01.0: bridge window [io 0x5000-0x5fff] [ 0.407979] pci 0000:00:01.0: bridge window [mem 0xd2200000-0xd23fffff] [ 0.407989] pci 0000:00:01.0: bridge window [mem 0xc0000000-0xcfffffff 64bit pref] [ 0.408065] pci 0000:00:04.0: PCI bridge to [bus 02-07] [ 0.408075] pci 0000:00:04.0: bridge window [io 0x3000-0x4fff] [ 0.408082] pci 0000:00:04.0: bridge window [mem 0xd1200000-0xd21fffff] [ 0.408093] pci 0000:00:04.0: bridge window [mem 0xd0000000-0xd0ffffff 64bit pref] [ 0.408245] pci 0000:08:00.0: reg 10: [mem 0xd1100000-0xd1103fff 64bit] [ 0.408387] pci 0000:08:00.0: supports D1 D2 [ 0.420039] pci 0000:00:05.0: PCI bridge to [bus 08-08] [ 0.420049] pci 0000:00:05.0: bridge window [io 0xfffffffffffff000-0x0000] (disabled) [ 0.420058] pci 0000:00:05.0: bridge window [mem 0xd1100000-0xd11fffff] [ 0.420069] pci 0000:00:05.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.420202] pci 0000:09:00.0: reg 10: [io 0x2000-0x20ff] [ 0.420239] pci 0000:09:00.0: reg 18: [mem 0xd1010000-0xd1010fff 64bit pref] [ 0.420266] pci 0000:09:00.0: reg 20: [mem 0xd1000000-0xd100ffff 64bit pref] [ 0.420283] pci 0000:09:00.0: reg 30: [mem 0xffff0000-0xffffffff pref] [ 0.420355] pci 0000:09:00.0: supports D1 D2 [ 0.420359] pci 0000:09:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.420369] pci 0000:09:00.0: PME# disabled [ 0.440028] pci 0000:00:06.0: PCI bridge to [bus 09-09] [ 0.440039] pci 0000:00:06.0: bridge window [io 0x2000-0x2fff] [ 0.440046] pci 0000:00:06.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.440058] pci 0000:00:06.0: bridge window [mem 0xd1000000-0xd10fffff 64bit pref] [ 0.440205] pci 0000:00:14.4: PCI bridge to [bus 80-8f] (subtractive decode) [ 0.440216] pci 0000:00:14.4: bridge window [io 0x1000-0x1fff] [ 0.440226] pci 0000:00:14.4: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.440238] pci 0000:00:14.4: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.440244] pci 0000:00:14.4: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.440249] pci 0000:00:14.4: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.440255] pci 0000:00:14.4: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.440261] pci 0000:00:14.4: bridge window [mem 0x000c0000-0x000c3fff] (subtractive decode) [ 0.440266] pci 0000:00:14.4: bridge window [mem 0x000c4000-0x000c7fff] (subtractive decode) [ 0.440272] pci 0000:00:14.4: bridge window [mem 0x000c8000-0x000cbfff] (subtractive decode) [ 0.440278] pci 0000:00:14.4: bridge window [mem 0x000cc000-0x000cffff] (subtractive decode) [ 0.440283] pci 0000:00:14.4: bridge window [mem 0x000d0000-0x000d3fff] (subtractive decode) [ 0.440289] pci 0000:00:14.4: bridge window [mem 0x000d4000-0x000d7fff] (subtractive decode) [ 0.440294] pci 0000:00:14.4: bridge window [mem 0x000d8000-0x000dbfff] (subtractive decode) [ 0.440300] pci 0000:00:14.4: bridge window [mem 0x000dc000-0x000dffff] (subtractive decode) [ 0.440306] pci 0000:00:14.4: bridge window [mem 0x000e0000-0x000e3fff] (subtractive decode) [ 0.440312] pci 0000:00:14.4: bridge window [mem 0x000e4000-0x000e7fff] (subtractive decode) [ 0.440317] pci 0000:00:14.4: bridge window [mem 0x000e8000-0x000ebfff] (subtractive decode) [ 0.440323] pci 0000:00:14.4: bridge window [mem 0x000ec000-0x000effff] (subtractive decode) [ 0.440329] pci 0000:00:14.4: bridge window [mem 0xc0000000-0xdfffffff] (subtractive decode) [ 0.440335] pci 0000:00:14.4: bridge window [mem 0xe4000000-0xffffffff] (subtractive decode) [ 0.440454] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.441050] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.AGP_._PRT] [ 0.441246] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PB4_._PRT] [ 0.441462] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PB5_._PRT] [ 0.441649] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PB6_._PRT] [ 0.441929] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P2P_._PRT] [ 0.442357] \_SB_.PCI0:_OSC request failed [ 0.442361] _OSC request data:1 1f 1f [ 0.460000] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.460000] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.460000] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.460000] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.460000] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.460000] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.460000] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.460000] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.460000] HEST: Table is not found! [ 0.460000] vgaarb: device added: PCI:0000:01:05.0,decodes=io+mem,owns=io+mem,locks=none [ 0.460000] vgaarb: loaded [ 0.460000] SCSI subsystem initialized [ 0.460000] libata version 3.00 loaded. [ 0.460000] usbcore: registered new interface driver usbfs [ 0.460000] usbcore: registered new interface driver hub [ 0.460000] usbcore: registered new device driver usb [ 0.460000] ACPI: WMI: Mapper loaded [ 0.460000] PCI: Using ACPI for IRQ routing [ 0.460000] PCI: pci_cache_line_size set to 64 bytes [ 0.460000] reserve RAM buffer: 000000000009fc00 - 000000000009ffff [ 0.460000] reserve RAM buffer: 00000000afb8f000 - 00000000afffffff [ 0.460000] reserve RAM buffer: 00000000afd70000 - 00000000afffffff [ 0.460000] reserve RAM buffer: 00000000afe57000 - 00000000afffffff [ 0.460000] reserve RAM buffer: 00000000afee9000 - 00000000afffffff [ 0.460000] reserve RAM buffer: 00000000aff00000 - 00000000afffffff [ 0.460000] NetLabel: Initializing [ 0.460000] NetLabel: domain hash size = 128 [ 0.460000] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.460000] NetLabel: unlabeled traffic allowed by default [ 0.470000] AppArmor: AppArmor Filesystem Enabled [ 0.470000] pnp: PnP ACPI init [ 0.470000] ACPI: bus type pnp registered [ 0.475388] pnp: PnP ACPI: found 12 devices [ 0.475388] ACPI: ACPI bus type pnp unregistered [ 0.475388] system 00:01: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.475388] system 00:01: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.475388] system 00:09: [io 0x0400-0x04cf] has been reserved [ 0.475388] system 00:09: [io 0x04d0-0x04d1] has been reserved [ 0.475388] system 00:09: [io 0x04d6] has been reserved [ 0.475388] system 00:09: [io 0x0680-0x06ff] has been reserved [ 0.475388] system 00:09: [io 0x077a] has been reserved [ 0.475388] system 00:09: [io 0x0c00-0x0c01] has been reserved [ 0.475388] system 00:09: [io 0x0c14] has been reserved [ 0.475388] system 00:09: [io 0x0c50-0x0c52] has been reserved [ 0.475388] system 00:09: [io 0x0c6c] has been reserved [ 0.475388] system 00:09: [io 0x0c6f] has been reserved [ 0.475388] system 00:09: [io 0x0cd0-0x0cdb] has been reserved [ 0.475388] system 00:0a: [mem 0x000e0000-0x000fffff] could not be reserved [ 0.475388] system 00:0a: [mem 0xfff00000-0xffffffff] has been reserved [ 0.480000] Switching to clocksource acpi_pm [ 0.480000] pci 0000:09:00.0: no compatible bridge window for [mem 0xffff0000-0xffffffff pref] [ 0.480000] pci 0000:00:06.0: BAR 14: assigned [mem 0xd2500000-0xd25fffff] [ 0.480000] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.480000] pci 0000:00:01.0: bridge window [io 0x5000-0x5fff] [ 0.480000] pci 0000:00:01.0: bridge window [mem 0xd2200000-0xd23fffff] [ 0.480000] pci 0000:00:01.0: bridge window [mem 0xc0000000-0xcfffffff 64bit pref] [ 0.480000] pci 0000:00:04.0: PCI bridge to [bus 02-07] [ 0.480000] pci 0000:00:04.0: bridge window [io 0x3000-0x4fff] [ 0.480000] pci 0000:00:04.0: bridge window [mem 0xd1200000-0xd21fffff] [ 0.480000] pci 0000:00:04.0: bridge window [mem 0xd0000000-0xd0ffffff 64bit pref] [ 0.480000] pci 0000:00:05.0: PCI bridge to [bus 08-08] [ 0.480000] pci 0000:00:05.0: bridge window [io disabled] [ 0.480000] pci 0000:00:05.0: bridge window [mem 0xd1100000-0xd11fffff] [ 0.480000] pci 0000:00:05.0: bridge window [mem pref disabled] [ 0.480000] pci 0000:09:00.0: BAR 6: assigned [mem 0xd1020000-0xd102ffff pref] [ 0.480000] pci 0000:00:06.0: PCI bridge to [bus 09-09] [ 0.480000] pci 0000:00:06.0: bridge window [io 0x2000-0x2fff] [ 0.480000] pci 0000:00:06.0: bridge window [mem 0xd2500000-0xd25fffff] [ 0.480000] pci 0000:00:06.0: bridge window [mem 0xd1000000-0xd10fffff 64bit pref] [ 0.480000] pci 0000:00:14.4: PCI bridge to [bus 80-8f] [ 0.480000] pci 0000:00:14.4: bridge window [io 0x1000-0x1fff] [ 0.480000] pci 0000:00:14.4: bridge window [mem disabled] [ 0.480000] pci 0000:00:14.4: bridge window [mem pref disabled] [ 0.480000] pci 0000:00:01.0: setting latency timer to 64 [ 0.480000] alloc irq_desc for 16 on node -1 [ 0.480000] alloc kstat_irqs on node -1 [ 0.480000] pci 0000:00:04.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.480000] pci 0000:00:04.0: setting latency timer to 64 [ 0.480000] alloc irq_desc for 17 on node -1 [ 0.480000] alloc kstat_irqs on node -1 [ 0.480000] pci 0000:00:05.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 0.480000] pci 0000:00:05.0: setting latency timer to 64 [ 0.480000] alloc irq_desc for 18 on node -1 [ 0.480000] alloc kstat_irqs on node -1 [ 0.480000] pci 0000:00:06.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 0.480000] pci 0000:00:06.0: setting latency timer to 64 [ 0.480000] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 0.480000] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 0.480000] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.480000] pci_bus 0000:00: resource 7 [mem 0x000c0000-0x000c3fff] [ 0.480000] pci_bus 0000:00: resource 8 [mem 0x000c4000-0x000c7fff] [ 0.480000] pci_bus 0000:00: resource 9 [mem 0x000c8000-0x000cbfff] [ 0.480000] pci_bus 0000:00: resource 10 [mem 0x000cc000-0x000cffff] [ 0.480000] pci_bus 0000:00: resource 11 [mem 0x000d0000-0x000d3fff] [ 0.480000] pci_bus 0000:00: resource 12 [mem 0x000d4000-0x000d7fff] [ 0.480000] pci_bus 0000:00: resource 13 [mem 0x000d8000-0x000dbfff] [ 0.480000] pci_bus 0000:00: resource 14 [mem 0x000dc000-0x000dffff] [ 0.480000] pci_bus 0000:00: resource 15 [mem 0x000e0000-0x000e3fff] [ 0.480000] pci_bus 0000:00: resource 16 [mem 0x000e4000-0x000e7fff] [ 0.480000] pci_bus 0000:00: resource 17 [mem 0x000e8000-0x000ebfff] [ 0.480000] pci_bus 0000:00: resource 18 [mem 0x000ec000-0x000effff] [ 0.480000] pci_bus 0000:00: resource 19 [mem 0xc0000000-0xdfffffff] [ 0.480000] pci_bus 0000:00: resource 20 [mem 0xe4000000-0xffffffff] [ 0.480000] pci_bus 0000:01: resource 0 [io 0x5000-0x5fff] [ 0.480000] pci_bus 0000:01: resource 1 [mem 0xd2200000-0xd23fffff] [ 0.480000] pci_bus 0000:01: resource 2 [mem 0xc0000000-0xcfffffff 64bit pref] [ 0.480000] pci_bus 0000:02: resource 0 [io 0x3000-0x4fff] [ 0.480000] pci_bus 0000:02: resource 1 [mem 0xd1200000-0xd21fffff] [ 0.480000] pci_bus 0000:02: resource 2 [mem 0xd0000000-0xd0ffffff 64bit pref] [ 0.480000] pci_bus 0000:08: resource 1 [mem 0xd1100000-0xd11fffff] [ 0.480000] pci_bus 0000:09: resource 0 [io 0x2000-0x2fff] [ 0.480000] pci_bus 0000:09: resource 1 [mem 0xd2500000-0xd25fffff] [ 0.480000] pci_bus 0000:09: resource 2 [mem 0xd1000000-0xd10fffff 64bit pref] [ 0.480000] pci_bus 0000:80: resource 0 [io 0x1000-0x1fff] [ 0.480000] pci_bus 0000:80: resource 4 [io 0x0000-0x0cf7] [ 0.480000] pci_bus 0000:80: resource 5 [io 0x0d00-0xffff] [ 0.480000] pci_bus 0000:80: resource 6 [mem 0x000a0000-0x000bffff] [ 0.480000] pci_bus 0000:80: resource 7 [mem 0x000c0000-0x000c3fff] [ 0.480000] pci_bus 0000:80: resource 8 [mem 0x000c4000-0x000c7fff] [ 0.480000] pci_bus 0000:80: resource 9 [mem 0x000c8000-0x000cbfff] [ 0.480000] pci_bus 0000:80: resource 10 [mem 0x000cc000-0x000cffff] [ 0.480000] pci_bus 0000:80: resource 11 [mem 0x000d0000-0x000d3fff] [ 0.480000] pci_bus 0000:80: resource 12 [mem 0x000d4000-0x000d7fff] [ 0.480000] pci_bus 0000:80: resource 13 [mem 0x000d8000-0x000dbfff] [ 0.480000] pci_bus 0000:80: resource 14 [mem 0x000dc000-0x000dffff] [ 0.480000] pci_bus 0000:80: resource 15 [mem 0x000e0000-0x000e3fff] [ 0.480000] pci_bus 0000:80: resource 16 [mem 0x000e4000-0x000e7fff] [ 0.480000] pci_bus 0000:80: resource 17 [mem 0x000e8000-0x000ebfff] [ 0.480000] pci_bus 0000:80: resource 18 [mem 0x000ec000-0x000effff] [ 0.480000] pci_bus 0000:80: resource 19 [mem 0xc0000000-0xdfffffff] [ 0.480000] pci_bus 0000:80: resource 20 [mem 0xe4000000-0xffffffff] [ 0.480000] NET: Registered protocol family 2 [ 0.480000] IP route cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.480000] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 0.481259] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 0.481931] TCP: Hash tables configured (established 524288 bind 65536) [ 0.481931] TCP reno registered [ 0.481931] UDP hash table entries: 2048 (order: 4, 65536 bytes) [ 0.481931] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) [ 0.481931] NET: Registered protocol family 1 [ 0.481931] pci 0000:00:01.0: MSI quirk detected; subordinate MSI disabled [ 0.661397] pci 0000:01:05.0: Boot video device [ 0.661431] PCI: CLS 64 bytes, default 64 [ 0.661437] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) [ 0.661444] Placing 64MB software IO TLB between ffff880001f9e000 - ffff880005f9e000 [ 0.661449] software IO TLB at phys 0x1f9e000 - 0x5f9e000 [ 0.661622] Simple Boot Flag at 0x44 set to 0x1 [ 0.662027] Scanning for low memory corruption every 60 seconds [ 0.662365] audit: initializing netlink socket (disabled) [ 0.662398] type=2000 audit(1282467658.659:1): initialized [ 0.679826] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.681288] VFS: Disk quotas dquot_6.5.2 [ 0.681288] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.681288] fuse init (API version 7.14) [ 0.681288] msgmni has been set to 7388 [ 0.681288] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.681288] io scheduler noop registered [ 0.681288] io scheduler deadline registered [ 0.681288] io scheduler cfq registered (default) [ 0.681288] pcieport 0000:00:04.0: setting latency timer to 64 [ 0.681288] alloc irq_desc for 40 on node -1 [ 0.681288] alloc kstat_irqs on node -1 [ 0.681288] pcieport 0000:00:04.0: irq 40 for MSI/MSI-X [ 0.681288] pcieport 0000:00:05.0: setting latency timer to 64 [ 0.681288] alloc irq_desc for 41 on node -1 [ 0.681288] alloc kstat_irqs on node -1 [ 0.681288] pcieport 0000:00:05.0: irq 41 for MSI/MSI-X [ 0.681288] pcieport 0000:00:06.0: setting latency timer to 64 [ 0.681288] alloc irq_desc for 42 on node -1 [ 0.681288] alloc kstat_irqs on node -1 [ 0.681288] pcieport 0000:00:06.0: irq 42 for MSI/MSI-X [ 0.681288] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.681288] \_SB_.PCI0:_OSC request failed [ 0.681288] _OSC request data:1 0 1f [ 0.681288] \_SB_.PCI0:_OSC request failed [ 0.681288] _OSC request data:1 0 1f [ 0.681288] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.681288] vesafb: framebuffer at 0xc012c000, mapped to 0xffffc90005100000, using 1216k, total 1216k [ 0.681288] vesafb: mode is 640x480x32, linelength=2560, pages=0 [ 0.681288] vesafb: scrolling: redraw [ 0.681288] vesafb: Truecolor: size=0:8:8:8, shift=0:16:8:0 [ 0.751703] Console: switching to colour frame buffer device 80x30 [ 0.824205] fb0: VESA VGA frame buffer device [ 0.824502] ACPI: AC Adapter [ACAD] (on-line) [ 0.824502] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 0.824502] ACPI: Power Button [PWRB] [ 0.824502] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input1 [ 0.824502] ACPI: Sleep Button [SLPB] [ 0.824502] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input2 [ 0.824502] ACPI: Lid Switch [LID] [ 0.824502] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3 [ 0.824502] ACPI: Power Button [PWRF] [ 0.824544] ACPI: acpi_idle registered with cpuidle [ 0.829330] [Firmware Bug]: Invalid critical threshold (0) [ 0.830433] thermal LNXTHERM:01: registered as thermal_zone0 [ 0.830433] ACPI: Thermal Zone [THRM] (82 C) [ 0.830433] ERST: Table is not found! [ 0.832627] hpet_acpi_add: no address or irqs in _CRS [ 0.832627] Linux agpgart interface v0.103 [ 0.832627] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.835380] brd: module loaded [ 0.836536] loop: module loaded [ 0.837104] pata_acpi 0000:00:14.1: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.837183] pata_acpi 0000:00:14.1: setting latency timer to 64 [ 0.837860] Fixed MDIO Bus: probed [ 0.837945] PPP generic driver version 2.4.2 [ 0.838018] tun: Universal TUN/TAP device driver, 1.6 [ 0.838022] tun: (C) 1999-2004 Max Krasnyansky [ 0.838190] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.838297] ehci_hcd 0000:00:12.2: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 0.838336] ehci_hcd 0000:00:12.2: setting latency timer to 64 [ 0.838344] ehci_hcd 0000:00:12.2: EHCI Host Controller [ 0.838416] ehci_hcd 0000:00:12.2: new USB bus registered, assigned bus number 1 [ 0.838575] ehci_hcd 0000:00:12.2: applying AMD SB600/SB700 USB freeze workaround [ 0.838608] ehci_hcd 0000:00:12.2: debug port 1 [ 0.838675] ehci_hcd 0000:00:12.2: irq 17, io mem 0xd2409500 [ 0.851355] ehci_hcd 0000:00:12.2: USB 2.0 started, EHCI 1.00 [ 0.851671] hub 1-0:1.0: USB hub found [ 0.851683] hub 1-0:1.0: 6 ports detected [ 0.852208] alloc irq_desc for 19 on node -1 [ 0.852212] alloc kstat_irqs on node -1 [ 0.852228] ehci_hcd 0000:00:13.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 0.852271] ehci_hcd 0000:00:13.2: setting latency timer to 64 [ 0.852278] ehci_hcd 0000:00:13.2: EHCI Host Controller [ 0.852366] ehci_hcd 0000:00:13.2: new USB bus registered, assigned bus number 2 [ 0.852522] ehci_hcd 0000:00:13.2: applying AMD SB600/SB700 USB freeze workaround [ 0.852553] ehci_hcd 0000:00:13.2: debug port 1 [ 0.852599] ehci_hcd 0000:00:13.2: irq 19, io mem 0xd2409400 [ 0.862494] ACPI: Battery Slot [BAT0] (battery present) [ 0.871311] ehci_hcd 0000:00:13.2: USB 2.0 started, EHCI 1.00 [ 0.871538] hub 2-0:1.0: USB hub found [ 0.871546] hub 2-0:1.0: 6 ports detected [ 0.871767] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.871863] ohci_hcd 0000:00:12.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.871891] ohci_hcd 0000:00:12.0: setting latency timer to 64 [ 0.871899] ohci_hcd 0000:00:12.0: OHCI Host Controller [ 0.871970] ohci_hcd 0000:00:12.0: new USB bus registered, assigned bus number 3 [ 0.872112] ohci_hcd 0000:00:12.0: irq 16, io mem 0xd2408000 [ 0.939535] hub 3-0:1.0: USB hub found [ 0.939616] hub 3-0:1.0: 3 ports detected [ 0.939752] ohci_hcd 0000:00:12.1: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.939779] ohci_hcd 0000:00:12.1: setting latency timer to 64 [ 0.939786] ohci_hcd 0000:00:12.1: OHCI Host Controller [ 0.939854] ohci_hcd 0000:00:12.1: new USB bus registered, assigned bus number 4 [ 0.939889] ohci_hcd 0000:00:12.1: irq 16, io mem 0xd2407000 [ 0.999524] hub 4-0:1.0: USB hub found [ 0.999604] hub 4-0:1.0: 3 ports detected [ 0.999755] ohci_hcd 0000:00:13.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 0.999782] ohci_hcd 0000:00:13.0: setting latency timer to 64 [ 0.999789] ohci_hcd 0000:00:13.0: OHCI Host Controller [ 0.999859] ohci_hcd 0000:00:13.0: new USB bus registered, assigned bus number 5 [ 1.000001] ohci_hcd 0000:00:13.0: irq 18, io mem 0xd2406000 [ 1.002298] Freeing initrd memory: 10744k freed [ 1.059546] hub 5-0:1.0: USB hub found [ 1.059626] hub 5-0:1.0: 3 ports detected [ 1.059760] ohci_hcd 0000:00:13.1: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 1.059787] ohci_hcd 0000:00:13.1: setting latency timer to 64 [ 1.059794] ohci_hcd 0000:00:13.1: OHCI Host Controller [ 1.059864] ohci_hcd 0000:00:13.1: new USB bus registered, assigned bus number 6 [ 1.059986] ohci_hcd 0000:00:13.1: irq 18, io mem 0xd2405000 [ 1.117071] hub 6-0:1.0: USB hub found [ 1.117098] hub 6-0:1.0: 3 ports detected [ 1.117243] ohci_hcd 0000:00:14.5: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 1.117270] ohci_hcd 0000:00:14.5: setting latency timer to 64 [ 1.117277] ohci_hcd 0000:00:14.5: OHCI Host Controller [ 1.117350] ohci_hcd 0000:00:14.5: new USB bus registered, assigned bus number 7 [ 1.117471] ohci_hcd 0000:00:14.5: irq 18, io mem 0xd2404000 [ 1.170093] usb 1-4: new high speed USB device using ehci_hcd and address 2 [ 1.177085] hub 7-0:1.0: USB hub found [ 1.177165] hub 7-0:1.0: 2 ports detected [ 1.177297] uhci_hcd: USB Universal Host Controller Interface driver [ 1.177552] PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 1.191858] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 1.191872] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 1.192067] mice: PS/2 mouse device common for all mice [ 1.192319] rtc_cmos 00:05: RTC can wake from S4 [ 1.192424] rtc_cmos 00:05: rtc core: registered rtc_cmos as rtc0 [ 1.192474] rtc0: alarms up to one day, 114 bytes nvram [ 1.192698] device-mapper: uevent: version 1.0.3 [ 1.192895] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 1.193047] device-mapper: multipath: version 1.1.1 loaded [ 1.193053] device-mapper: multipath round-robin: version 1.0.0 loaded [ 1.193543] cpuidle: using governor ladder [ 1.193548] cpuidle: using governor menu [ 1.194442] TCP cubic registered [ 1.194732] NET: Registered protocol family 10 [ 1.195563] lo: Disabled Privacy Extensions [ 1.196046] NET: Registered protocol family 17 [ 1.196125] powernow-k8: Found 1 AMD Turion(tm) X2 Ultra Dual-Core Mobile ZM-82 (2 cpu cores) (version 2.20.00) [ 1.196256] powernow-k8: 0 : pstate 0 (2200 MHz) [ 1.196261] powernow-k8: 1 : pstate 1 (1100 MHz) [ 1.196265] powernow-k8: 2 : pstate 2 (550 MHz) [ 1.196437] PM: Resume from disk failed. [ 1.196437] registered taskstats version 1 [ 1.196679] Magic number: 6:579:20 [ 1.196911] rtc_cmos 00:05: setting system clock to 2010-08-22 09:01:00 UTC (1282467660) [ 1.196918] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 1.196922] EDD information not available. [ 1.197142] Freeing unused kernel memory: 908k freed [ 1.198000] Write protecting the kernel read-only data: 10240k [ 1.198353] Freeing unused kernel memory: 424k freed [ 1.199096] Freeing unused kernel memory: 1644k freed [ 1.208215] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4 [ 1.219678] udev[74]: starting version 162 [ 1.350008] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded [ 1.350008] r8169 0000:09:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 1.350008] r8169 0000:09:00.0: setting latency timer to 64 [ 1.350008] alloc irq_desc for 43 on node -1 [ 1.350008] alloc kstat_irqs on node -1 [ 1.350008] r8169 0000:09:00.0: irq 43 for MSI/MSI-X [ 1.350008] r8169 0000:09:00.0: eth0: RTL8168c/8111c at 0xffffc900050d8000, 00:23:8b:4f:a3:8d, XID 1c2000c0 IRQ 43 [ 1.361288] scsi0 : pata_atiixp [ 1.378499] scsi1 : pata_atiixp [ 1.379878] ata1: DUMMY [ 1.379884] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x6008 irq 15 [ 1.389839] ahci 0000:00:11.0: version 3.0 [ 1.389887] alloc irq_desc for 22 on node -1 [ 1.389892] alloc kstat_irqs on node -1 [ 1.389913] ahci 0000:00:11.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 1.390150] ahci 0000:00:11.0: AHCI 0001.0100 32 slots 2 ports 3 Gbps 0x3 impl SATA mode [ 1.390158] ahci 0000:00:11.0: flags: 64bit ncq sntf ilck led clo pmp pio ccc sxs [ 1.391295] Initializing USB Mass Storage driver... [ 1.391295] scsi2 : ahci [ 1.391295] scsi4 : ahci [ 1.391295] ata3: SATA max UDMA/133 abar m1024@0xd2409000 port 0xd2409100 irq 22 [ 1.391295] ata4: SATA max UDMA/133 abar m1024@0xd2409000 port 0xd2409180 irq 22 [ 1.391295] scsi3 : usb-storage 1-4:1.0 [ 1.391295] usbcore: registered new interface driver usb-storage [ 1.391295] USB Mass Storage support registered. [ 1.461320] usb 2-2: new high speed USB device using ehci_hcd and address 2 [ 1.910059] ata4: softreset failed (device not ready) [ 1.910069] ata4: applying SB600 PMP SRST workaround and retrying [ 1.910102] ata3: softreset failed (device not ready) [ 1.910108] ata3: applying SB600 PMP SRST workaround and retrying [ 2.080120] usb 6-1: new full speed USB device using ohci_hcd and address 2 [ 2.091330] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 2.091383] ata4: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 2.091604] ata3.00: ATA-7: INTEL SSDSA2M080G2GC, 2CV102HA, max UDMA/133 [ 2.091610] ata3.00: 156301488 sectors, multi 16: LBA48 NCQ (depth 31/32) [ 2.091971] ata3.00: configured for UDMA/133 [ 2.092220] scsi 2:0:0:0: Direct-Access ATA INTEL SSDSA2M080 2CV1 PQ: 0 ANSI: 5 [ 2.092575] sd 2:0:0:0: Attached scsi generic sg0 type 0 [ 2.092759] sd 2:0:0:0: [sda] 156301488 512-byte logical blocks: (80.0 GB/74.5 GiB) [ 2.092771] sd 2:0:0:0: [sda] Write Protect is off [ 2.092771] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 2.092771] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.092980] sda: sda1 sda2 < sda5 > [ 2.094329] sd 2:0:0:0: [sda] Attached SCSI disk [ 2.109724] ata4.00: ATAPI: TSSTcorp CDDVDW TS-L633L, 0400, max UDMA/100 [ 2.119055] ata4.00: configured for UDMA/100 [ 2.122600] scsi 4:0:0:0: CD-ROM TSSTcorp CDDVDW TS-L633L 0400 PQ: 0 ANSI: 5 [ 2.130078] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 2.130085] Uniform CD-ROM driver Revision: 3.20 [ 2.130263] sr 4:0:0:0: Attached scsi CD-ROM sr0 [ 2.130395] sr 4:0:0:0: Attached scsi generic sg1 type 5 [ 2.167438] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 2.391266] scsi 3:0:0:0: Direct-Access Generic- Multi-Card 1.00 PQ: 0 ANSI: 0 CCS [ 2.391314] sd 3:0:0:0: Attached scsi generic sg2 type 0 [ 2.393984] sd 3:0:0:0: [sdb] Attached SCSI removable disk [ 2.404199] udev[354]: starting version 162 [ 2.405654] Adding 3227644k swap on /dev/sda5. Priority:-1 extents:1 across:3227644k SSD [ 2.491264] shpchp 0000:00:01.0: HPC vendor_id 1022 device_id 9602 ss_vid 1022 ss_did 9602 [ 2.491264] shpchp 0000:00:01.0: Cannot reserve MMIO region [ 2.492199] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 [ 2.502037] usb 7-1: new full speed USB device using ohci_hcd and address 2 [ 2.531295] lp: driver loaded but no devices found [ 2.578214] piix4_smbus 0000:00:14.0: SMBus Host Controller at 0xb00, revision 0 [ 2.581263] lib80211: common routines for IEEE802.11 drivers [ 2.581263] lib80211_crypt: registered algorithm 'NULL' [ 2.639623] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro [ 2.671295] EDAC MC: Ver: 2.1.0 Aug 20 2010 [ 2.771259] EDAC amd64_edac: Ver: 3.3.0 Aug 20 2010 [ 2.771259] EDAC amd64: This node reports that Memory ECC is currently disabled, set F3x44[22] (0000:00:18.3). [ 2.771259] EDAC amd64: ECC disabled in the BIOS or no ECC capability, module will not load. [ 2.771259] Either enable ECC checking or force module loading by setting 'ecc_enable_override'. [ 2.771259] (Note that use of the override may cause unknown side effects.) [ 2.771259] amd64_edac: probe of 0000:00:18.2 failed with error -22 [ 2.771259] wl: module license 'MIXED/Proprietary' taints kernel. [ 2.771259] Disabling lock debugging due to kernel taint [ 2.861293] wl 0000:08:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 2.861293] wl 0000:08:00.0: setting latency timer to 64 [ 2.861293] lirc_dev: IR Remote Control driver registered, major 61 [ 2.887365] BUG: unable to handle kernel NULL pointer dereference at (null) [ 2.887373] IP: [] kfifo_alloc+0x2e/0xb0 [ 2.887389] PGD 1375cb067 PUD 1375ce067 PMD 0 [ 2.887396] Oops: 0002 [#1] SMP [ 2.887401] last sysfs file: /sys/devices/virtual/vc/vcs6/uevent [ 2.887407] CPU 1 [ 2.887410] Modules linked in: lirc_ene0100(+) v4l2_compat_ioctl32(+) hp_wmi(+) snd(+) lirc_dev wl(P+) bluetooth(+) drm(+) video(+) psmouse output serio_raw k10temp edac_core soundcore i2c_algo_bit lib80211 i2c_piix4 snd_page_alloc edac_mce_amd shpchp lp parport usb_storage r8169 mii ahci libahci pata_atiixp [ 2.887445] [ 2.887452] Pid: 529, comm: modprobe Tainted: P 2.6.35-17-generic #23-Ubuntu 3045/HP TouchSmart tx2 Notebook PC [ 2.887457] RIP: 0010:[] [] kfifo_alloc+0x2e/0xb0 [ 2.887466] RSP: 0018:ffff880138739d08 EFLAGS: 00010286 [ 2.887470] RAX: ffff880137500000 RBX: 0000000000000000 RCX: ffffffff8107f199 [ 2.887474] RDX: ffff880137504000 RSI: 00000000000000d0 RDI: 0000000000000246 [ 2.887479] RBP: ffff880138739d18 R08: 0000000000000000 R09: 0000000000000246 [ 2.887483] R10: 0000000000000030 R11: 0000000000000000 R12: 0000000000001000 [ 2.887487] R13: ffff88013b33c400 R14: ffff8801386a7280 R15: 00000000fffffff4 [ 2.887493] FS: 00007f3989a31700(0000) GS:ffff880001e80000(0000) knlGS:0000000000000000 [ 2.887498] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 2.887502] CR2: 0000000000000000 CR3: 0000000139428000 CR4: 00000000000006e0 [ 2.887506] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 2.887511] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 2.887516] Process modprobe (pid: 529, threadinfo ffff880138738000, task ffff88013b6cc4a0) [ 2.887520] Stack: [ 2.887523] ffff880137c3fb40 ffff88013b49dba0 ffff880138739d58 ffffffffa010ee4f [ 2.887529] <0> ffff880138739d38 ffffffffa010f060 ffff88013b33c400 ffffffffa010f580 [ 2.887536] <0> ffffffffa010f540 00000000fffffff4 ffff880138739d98 ffffffff8133d7d5 [ 2.887543] Call Trace: [ 2.887555] [] ene_probe+0x17f/0x350 [lirc_ene0100] [ 2.887567] [] pnp_device_probe+0x95/0x100 [ 2.887575] [] ? driver_sysfs_add+0x62/0x90 [ 2.887581] [] really_probe+0x68/0x190 [ 2.887587] [] driver_probe_device+0x45/0x70 [ 2.887593] [] __driver_attach+0x9b/0xa0 [ 2.887599] [] ? __driver_attach+0x0/0xa0 [ 2.887608] [] bus_for_each_dev+0x68/0x90 [ 2.887614] [] driver_attach+0x1e/0x20 [ 2.887621] [] bus_add_driver+0xde/0x280 [ 2.887627] [] driver_register+0x80/0x150 [ 2.887635] [] ? ene_init+0x0/0x3e [lirc_ene0100] [ 2.887642] [] pnp_register_driver+0x21/0x30 [ 2.887650] [] ene_init+0x3c/0x3e [lirc_ene0100] [ 2.887660] [] do_one_initcall+0x3c/0x1a0 [ 2.887669] [] sys_init_module+0xbb/0x200 [ 2.887679] [] system_call_fastpath+0x16/0x1b [ 2.887682] Code: e5 41 54 53 0f 1f 44 00 00 48 89 fb 89 f7 41 89 f4 48 85 ff 48 8d 47 ff 74 33 48 85 f8 75 2e 89 d6 e8 07 35 0c 00 48 85 c0 74 52 <48> 89 03 44 89 63 08 31 c0 c7 43 10 00 00 00 00 c7 43 0c 00 00 [ 2.887724] RIP [] kfifo_alloc+0x2e/0xb0 [ 2.887731] RSP [ 2.887733] CR2: 0000000000000000 [ 2.887739] ---[ end trace 729f227be20567bc ]--- [ 4.473723] Bluetooth: Core ver 2.15 [ 4.473723] NET: Registered protocol family 31 [ 4.473723] Bluetooth: HCI device and connection manager initialized [ 4.473723] Bluetooth: HCI socket layer initialized [ 4.477535] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 4.481294] acpi device:03: registered as cooling_device2 [ 4.481294] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:00/LNXVIDEO:00/input/input5 [ 4.481294] ACPI: Video Device [VGA] (multi-head: yes rom: no post: no) [ 4.481294] input: HP WMI hotkeys as /devices/virtual/input/input6 [ 4.493671] Linux video capture interface: v2.00 [ 4.501294] uvcvideo: Found UVC 1.00 device CNF8038 (04f2:b132) [ 4.511295] usbcore: registered new interface driver btusb [ 4.519848] [drm] Initialized drm 1.1.0 20060810 [ 4.521260] input: CNF8038 as /devices/pci0000:00/0000:00:13.2/usb2/2-2/2-2:1.0/input/input7 [ 4.521420] usbcore: registered new interface driver uvcvideo [ 4.521425] USB Video Class driver (v0.1.0) [ 4.532139] usb 7-2: new full speed USB device using ohci_hcd and address 3 [ 4.622524] lib80211_crypt: registered algorithm 'TKIP' [ 4.622524] eth1: Broadcom BCM432b 802.11 Hybrid Wireless Controller 5.60.48.36 [ 4.665384] [drm] radeon defaulting to kernel modesetting. [ 4.665390] [drm] radeon kernel modesetting enabled. [ 4.665618] radeon 0000:01:05.0: power state changed by ACPI to D0 [ 4.665638] radeon 0000:01:05.0: power state changed by ACPI to D0 [ 4.665658] radeon 0000:01:05.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 4.665668] radeon 0000:01:05.0: setting latency timer to 64 [ 4.677900] [drm] initializing kernel modesetting (RS780 0x1002:0x9612). [ 5.561288] [drm] register mmio base: 0xD2300000 [ 5.561288] [drm] register mmio size: 65536 [ 5.994612] ATOM BIOS: HP_Soyuz30 [ 5.994612] [drm] Clocks initialized ! [ 5.994612] radeon 0000:01:05.0: VRAM: 320M 0xC0000000 - 0xD3FFFFFF (320M used) [ 5.994612] radeon 0000:01:05.0: GTT: 512M 0xA0000000 - 0xBFFFFFFF [ 5.994612] [drm] Detected VRAM RAM=320M, BAR=256M [ 5.994612] [drm] RAM width 32bits DDR [ 5.994612] [TTM] Zone kernel: Available graphics memory: 1898388 kiB. [ 5.994612] [TTM] Initializing pool allocator. [ 5.994612] [drm] radeon: 320M of VRAM memory ready [ 5.994612] [drm] radeon: 512M of GTT memory ready. [ 5.994612] [drm] radeon: irq initialized. [ 5.994612] [drm] GART: num cpu pages 131072, num gpu pages 131072 [ 6.032680] HDA Intel 0000:00:14.2: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 6.032866] HDA Intel 0000:00:14.2: setting latency timer to 64 [ 6.061297] type=1400 audit(1282467665.347:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient3" pid=739 comm="apparmor_parser" [ 6.061297] type=1400 audit(1282467665.347:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=739 comm="apparmor_parser" [ 6.061297] type=1400 audit(1282467665.347:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=739 comm="apparmor_parser" [ 6.063827] usbcore: registered new interface driver hiddev [ 6.066320] usbcore: registered new interface driver usbhid [ 6.066320] usbhid: USB HID core driver [ 6.076023] ntrig 0003:1B96:0001.0001: hidraw0: USB HID v1.10 Device [N-trig DuoSense] on usb-0000:00:14.5-2/input0 [ 6.080599] input: N-trig DuoSense as /devices/pci0000:00/0000:00:14.5/usb7/7-2/7-2:1.1/input/input8 [ 6.080599] input: N-trig DuoSense as /devices/pci0000:00/0000:00:14.5/usb7/7-2/7-2:1.1/input/input9 [ 6.080599] input: N-trig DuoSense as /devices/pci0000:00/0000:00:14.5/usb7/7-2/7-2:1.1/input/input10 [ 6.080599] ntrig 0003:1B96:0001.0002: input,hidraw1: USB HID v1.10 Device [N-trig DuoSense] on usb-0000:00:14.5-2/input1 [ 6.104503] [drm] Loading RS780 Microcode [ 6.336261] [drm] ring test succeeded in 0 usecs [ 6.342677] [drm] radeon: ib pool ready. [ 6.351354] [drm] ib test succeeded in 0 usecs [ 6.355173] [drm] Enabling audio support [ 6.355173] [drm] Default TV standard: NTSC [ 6.381296] [drm] Default TV standard: NTSC [ 6.386679] [drm] Radeon Display Connectors [ 6.394683] [drm] Connector 0: [ 6.399794] [drm] VGA [ 6.399800] [drm] DDC: 0x7e40 0x7e40 0x7e44 0x7e44 0x7e48 0x7e48 0x7e4c 0x7e4c [ 6.399803] [drm] Encoders: [ 6.399807] [drm] CRT1: INTERNAL_KLDSCP_DAC1 [ 6.399810] [drm] Connector 1: [ 6.399813] [drm] DIN [ 6.399815] [drm] Encoders: [ 6.399818] [drm] TV1: INTERNAL_KLDSCP_DAC1 [ 6.399821] [drm] Connector 2: [ 6.399824] [drm] LVDS [ 6.399828] [drm] DDC: 0x7e50 0x7e50 0x7e54 0x7e54 0x7e58 0x7e58 0x7e5c 0x7e5c [ 6.399831] [drm] Encoders: [ 6.399835] [drm] LCD1: INTERNAL_KLDSCP_LVTMA [ 6.520036] [drm] radeon: power management initialized [ 6.549515] Synaptics Touchpad, model: 1, fw: 6.3, id: 0x180b1, caps: 0xa04711/0xa00000/0x0 [ 6.624137] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input11 [ 6.650716] type=1400 audit(1282467665.937:5): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient3" pid=909 comm="apparmor_parser" [ 6.653974] type=1400 audit(1282467665.947:6): apparmor="STATUS" operation="profile_load" name="/usr/share/gdm/guest-session/Xsession" pid=908 comm="apparmor_parser" [ 6.666329] type=1400 audit(1282467665.957:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=909 comm="apparmor_parser" [ 6.699209] type=1400 audit(1282467665.987:8): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=909 comm="apparmor_parser" [ 6.719842] type=1400 audit(1282467666.007:9): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=914 comm="apparmor_parser" [ 6.732179] type=1400 audit(1282467666.027:10): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince" pid=912 comm="apparmor_parser" [ 6.764994] r8169 0000:09:00.0: eth0: link down [ 6.777027] type=1400 audit(1282467666.067:11): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-previewer" pid=912 comm="apparmor_parser" [ 6.780828] ADDRCONF(NETDEV_UP): eth0: link is not ready Bug: 627495 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-19-generic (buildd@allspice) (gcc version 4.4.5 20100824 (prerelease) (Ubuntu/Linaro 4.4.4-9ubuntu2) ) #28-Ubuntu SMP Sun Aug 29 06:34:38 UTC 2010 (Ubuntu 2.6.35-19.28-generic 2.6.35.3) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-19-generic root=UUID=fc87e0d4-e7e7-4150-86e6-268ca62edd36 ro quiet splash [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 0000000000093c00 (usable) [ 0.000000] BIOS-e820: 0000000000093c00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 000000003f790000 (usable) [ 0.000000] BIOS-e820: 000000003f790000 - 000000003f79e000 (ACPI data) [ 0.000000] BIOS-e820: 000000003f79e000 - 000000003f7d0000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000003f7d0000 - 000000003f7e0000 (reserved) [ 0.000000] BIOS-e820: 000000003f7ec000 - 0000000040000000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ffc00000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 00000003c0000000 (usable) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI present. [ 0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it. [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0x3c0000 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-D7FFF write-protect [ 0.000000] D8000-DFFFF uncachable [ 0.000000] E0000-E3FFF write-protect [ 0.000000] E4000-E7FFF write-through [ 0.000000] E8000-EBFFF write-protect [ 0.000000] EC000-EFFFF write-through [ 0.000000] F0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 03C0000000 mask FFC0000000 uncachable [ 0.000000] 1 base 0000000000 mask FC00000000 write-back [ 0.000000] 2 base 0040000000 mask FFC0000000 uncachable [ 0.000000] 3 base 0080000000 mask FF80000000 uncachable [ 0.000000] 4 base 003F800000 mask FFFF800000 uncachable [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] 8 disabled [ 0.000000] 9 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820 update range: 000000003f800000 - 0000000100000000 (usable) ==> (reserved) [ 0.000000] last_pfn = 0x3f790 max_arch_pfn = 0x400000000 [ 0.000000] Scanning 0 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 0000000000093c00 (usable) [ 0.000000] modified: 0000000000093c00 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 000000003f790000 (usable) [ 0.000000] modified: 000000003f790000 - 000000003f79e000 (ACPI data) [ 0.000000] modified: 000000003f79e000 - 000000003f7d0000 (ACPI NVS) [ 0.000000] modified: 000000003f7d0000 - 000000003f7e0000 (reserved) [ 0.000000] modified: 000000003f7ec000 - 0000000040000000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000ffc00000 - 0000000100000000 (reserved) [ 0.000000] modified: 0000000100000000 - 00000003c0000000 (usable) [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] found SMP MP-table at [ffff8800000ff780] ff780 [ 0.000000] Using GB pages for direct mapping [ 0.000000] init_memory_mapping: 0000000000000000-000000003f790000 [ 0.000000] 0000000000 - 003f600000 page 2M [ 0.000000] 003f600000 - 003f790000 page 4k [ 0.000000] kernel direct mapping tables up to 3f790000 @ 16000-19000 [ 0.000000] init_memory_mapping: 0000000100000000-00000003c0000000 [ 0.000000] 0100000000 - 03c0000000 page 1G [ 0.000000] kernel direct mapping tables up to 3c0000000 @ 17000-18000 [ 0.000000] RAMDISK: 2e9cc000 - 2f9ec000 [ 0.000000] ACPI: RSDP 00000000000f9f30 00024 (v02 ACPIAM) [ 0.000000] ACPI: XSDT 000000003f790100 0005C (v01 062510 XSDT1536 20100625 MSFT 00000097) [ 0.000000] ACPI: FACP 000000003f790290 000F4 (v04 062510 FACP1536 20100625 MSFT 00000097) [ 0.000000] ACPI: DSDT 000000003f7904f0 05F5A (v02 1W555 1W555A47 00000A47 INTL 20051117) [ 0.000000] ACPI: FACS 000000003f79e000 00040 [ 0.000000] ACPI: APIC 000000003f790390 00118 (v02 062510 APIC1536 20100625 MSFT 00000097) [ 0.000000] ACPI: MCFG 000000003f7904b0 0003C (v01 062510 OEMMCFG 20100625 MSFT 00000097) [ 0.000000] ACPI: OEMB 000000003f79e040 00082 (v01 062510 OEMB1536 20100625 MSFT 00000097) [ 0.000000] ACPI: SRAT 000000003f79a4f0 001D0 (v02 062510 OEMSRAT 00000001 INTL 00000001) [ 0.000000] ACPI: DMAR 000000003f79e0d0 00128 (v01 AMI OEMDMAR 00000001 MSFT 00000097) [ 0.000000] ACPI: SSDT 000000003f7a15e0 00363 (v01 DpgPmm CpuPm 00000012 INTL 20051117) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] SRAT: PXM 0 -> APIC 0x00 -> Node 0 [ 0.000000] SRAT: PXM 0 -> APIC 0x02 -> Node 0 [ 0.000000] SRAT: PXM 0 -> APIC 0x12 -> Node 0 [ 0.000000] SRAT: PXM 0 -> APIC 0x14 -> Node 0 [ 0.000000] SRAT: PXM 0 -> APIC 0x01 -> Node 0 [ 0.000000] SRAT: PXM 0 -> APIC 0x03 -> Node 0 [ 0.000000] SRAT: PXM 0 -> APIC 0x13 -> Node 0 [ 0.000000] SRAT: PXM 0 -> APIC 0x15 -> Node 0 [ 0.000000] SRAT: PXM 1 -> APIC 0x20 -> Node 1 [ 0.000000] SRAT: PXM 1 -> APIC 0x22 -> Node 1 [ 0.000000] SRAT: PXM 1 -> APIC 0x32 -> Node 1 [ 0.000000] SRAT: PXM 1 -> APIC 0x34 -> Node 1 [ 0.000000] SRAT: PXM 1 -> APIC 0x21 -> Node 1 [ 0.000000] SRAT: PXM 1 -> APIC 0x23 -> Node 1 [ 0.000000] SRAT: PXM 1 -> APIC 0x33 -> Node 1 [ 0.000000] SRAT: PXM 1 -> APIC 0x35 -> Node 1 [ 0.000000] SRAT: Node 0 PXM 0 0-a0000 [ 0.000000] SRAT: Node 0 PXM 0 100000-40000000 [ 0.000000] SRAT: Node 0 PXM 0 100000000-240000000 [ 0.000000] SRAT: Node 1 PXM 1 240000000-3c0000000 [ 0.000000] SRAT: Node 0 [0,a0000) + [100000,40000000) -> [0,40000000) [ 0.000000] SRAT: Node 0 [0,40000000) + [100000000,240000000) -> [0,240000000) [ 0.000000] NUMA: Using 30 for the hash shift. [ 0.000000] Initmem setup node 0 0000000000000000-0000000240000000 [ 0.000000] NODE_DATA [0000000100000000 - 0000000100004fff] [ 0.000000] Initmem setup node 1 0000000240000000-00000003c0000000 [ 0.000000] NODE_DATA [0000000240000000 - 0000000240004fff] [ 0.000000] [ffffea0000000000-ffffea0007dfffff] PMD -> [ffff880100200000-ffff8801055fffff] on node 0 [ 0.000000] [ffffea0007e00000-ffffea000d1fffff] PMD -> [ffff880240200000-ffff8802455fffff] on node 1 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal 0x00100000 -> 0x003c0000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[4] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x00000093 [ 0.000000] 0: 0x00000100 -> 0x0003f790 [ 0.000000] 0: 0x00100000 -> 0x00240000 [ 0.000000] 1: 0x00240000 -> 0x003c0000 [ 0.000000] On node 0 totalpages: 1570579 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3915 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 14280 pages used for memmap [ 0.000000] DMA32 zone: 241608 pages, LIFO batch:31 [ 0.000000] Normal zone: 17920 pages used for memmap [ 0.000000] Normal zone: 1292800 pages, LIFO batch:31 [ 0.000000] On node 1 totalpages: 1572864 [ 0.000000] Normal zone: 21504 pages used for memmap [ 0.000000] Normal zone: 1551360 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x808 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x02] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x12] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x14] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x05] lapic_id[0x20] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x06] lapic_id[0x22] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x07] lapic_id[0x32] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x08] lapic_id[0x34] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x09] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0a] lapic_id[0x03] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0b] lapic_id[0x13] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0c] lapic_id[0x15] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0d] lapic_id[0x21] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0e] lapic_id[0x23] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x0f] lapic_id[0x33] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x10] lapic_id[0x35] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x11] lapic_id[0x90] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x12] lapic_id[0x91] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x13] lapic_id[0x92] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x14] lapic_id[0x93] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x15] lapic_id[0x94] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x16] lapic_id[0x95] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x17] lapic_id[0x96] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x18] lapic_id[0x97] disabled) [ 0.000000] ACPI: IOAPIC (id[0x06] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 6, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: IOAPIC (id[0x07] address[0xfec8a000] gsi_base[24]) [ 0.000000] IOAPIC[1]: apic_id 7, version 32, address 0xfec8a000, GSI 24-47 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] SMP: Allowing 24 CPUs, 8 hotplug CPUs [ 0.000000] nr_irqs_gsi: 64 [ 0.000000] early_res array is doubled to 64 at [17000 - 177ff] [ 0.000000] PM: Registered nosave memory: 0000000000093000 - 0000000000094000 [ 0.000000] PM: Registered nosave memory: 0000000000094000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] PM: Registered nosave memory: 000000003f790000 - 000000003f79e000 [ 0.000000] PM: Registered nosave memory: 000000003f79e000 - 000000003f7d0000 [ 0.000000] PM: Registered nosave memory: 000000003f7d0000 - 000000003f7e0000 [ 0.000000] PM: Registered nosave memory: 000000003f7e0000 - 000000003f7ec000 [ 0.000000] PM: Registered nosave memory: 000000003f7ec000 - 0000000040000000 [ 0.000000] PM: Registered nosave memory: 0000000040000000 - 00000000fee00000 [ 0.000000] PM: Registered nosave memory: 00000000fee00000 - 00000000fee01000 [ 0.000000] PM: Registered nosave memory: 00000000fee01000 - 00000000ffc00000 [ 0.000000] PM: Registered nosave memory: 00000000ffc00000 - 0000000100000000 [ 0.000000] Allocating PCI resources starting at 40000000 (gap: 40000000:bee00000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:24 nr_node_ids:2 [ 0.000000] early_res array is doubled to 128 at [17800 - 187ff] [ 0.000000] PERCPU: Embedded 30 pages/cpu @ffff880001e00000 s91456 r8192 d23232 u131072 [ 0.000000] pcpu-alloc: s91456 r8192 d23232 u131072 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 00 01 02 03 08 09 10 11 16 18 20 22 -- -- -- -- [ 0.000000] pcpu-alloc: [1] 04 05 06 07 12 13 14 15 17 19 21 23 -- -- -- -- [ 0.000000] Built 2 zonelists in Zone order, mobility grouping on. Total pages: 3089683 [ 0.000000] Policy zone: Normal [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-19-generic root=UUID=fc87e0d4-e7e7-4150-86e6-268ca62edd36 ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Subtract (79 early reservations) [ 0.000000] #1 [0001000000 - 0001d17114] TEXT DATA BSS [ 0.000000] #2 [002e9cc000 - 002f9ec000] RAMDISK [ 0.000000] #3 [0001d18000 - 0001d1819d] BRK [ 0.000000] #4 [00000ff790 - 0000100000] BIOS reserved [ 0.000000] #5 [00000ff780 - 00000ff790] MP-table mpf [ 0.000000] #6 [0000093c00 - 00000fd130] BIOS reserved [ 0.000000] #7 [00000fd3ac - 00000ff780] BIOS reserved [ 0.000000] #8 [00000fd130 - 00000fd3ac] MP-table mpc [ 0.000000] #9 [0000010000 - 0000012000] TRAMPOLINE [ 0.000000] #10 [0000012000 - 0000016000] ACPI WAKEUP [ 0.000000] #11 [0000016000 - 0000017000] PGTABLE [ 0.000000] #12 [0100000000 - 0100005000] NODE_DATA [ 0.000000] #13 [0240000000 - 0240005000] NODE_DATA [ 0.000000] #14 [0001d181c0 - 0001d191c0] BOOTMEM [ 0.000000] #15 [0001d17140 - 0001d175c0] BOOTMEM [ 0.000000] #16 [0240005000 - 0240005480] BOOTMEM [ 0.000000] #17 [0100005000 - 0100006000] BOOTMEM [ 0.000000] #18 [0100006000 - 0100007000] BOOTMEM [ 0.000000] #19 [0100200000 - 0105600000] MEMMAP 0 [ 0.000000] #20 [0240200000 - 0245600000] MEMMAP 1 [ 0.000000] #21 [0001d175c0 - 0001d17740] BOOTMEM [ 0.000000] #22 [0001d191c0 - 0001d311c0] BOOTMEM [ 0.000000] #23 [0001d311c0 - 0001d491c0] BOOTMEM [ 0.000000] #24 [0240005480 - 024001d480] BOOTMEM [ 0.000000] #25 [0001d4a000 - 0001d4b000] BOOTMEM [ 0.000000] #26 [0001d17740 - 0001d177c6] BOOTMEM [ 0.000000] #27 [0001d17800 - 0001d17aa0] BOOTMEM [ 0.000000] #28 [0001d17ac0 - 0001d17b28] BOOTMEM [ 0.000000] #29 [0001d17b40 - 0001d17ba8] BOOTMEM [ 0.000000] #30 [0001d17bc0 - 0001d17c28] BOOTMEM [ 0.000000] #31 [0001d17c40 - 0001d17ca8] BOOTMEM [ 0.000000] #32 [0001d17cc0 - 0001d17d28] BOOTMEM [ 0.000000] #33 [0001d17d40 - 0001d17da8] BOOTMEM [ 0.000000] #34 [0001d17dc0 - 0001d17e28] BOOTMEM [ 0.000000] #35 [0001d17e40 - 0001d17ea8] BOOTMEM [ 0.000000] #36 [0001d17ec0 - 0001d17f28] BOOTMEM [ 0.000000] #37 [0001d17f40 - 0001d17fa8] BOOTMEM [ 0.000000] #38 [0001d491c0 - 0001d49228] BOOTMEM [ 0.000000] #39 [0001d17fc0 - 0001d17fe0] BOOTMEM [ 0.000000] #40 [0001d49240 - 0001d49260] BOOTMEM [ 0.000000] #41 [0001d49280 - 0001d492ea] BOOTMEM [ 0.000000] #42 [0001d49300 - 0001d4936a] BOOTMEM [ 0.000000] #43 [0001e00000 - 0001e1e000] BOOTMEM [ 0.000000] #44 [0001e20000 - 0001e3e000] BOOTMEM [ 0.000000] #45 [0001e40000 - 0001e5e000] BOOTMEM [ 0.000000] #46 [0001e60000 - 0001e7e000] BOOTMEM [ 0.000000] #47 [0001e80000 - 0001e9e000] BOOTMEM [ 0.000000] #48 [0001ea0000 - 0001ebe000] BOOTMEM [ 0.000000] #49 [0001ec0000 - 0001ede000] BOOTMEM [ 0.000000] #50 [0001ee0000 - 0001efe000] BOOTMEM [ 0.000000] #51 [0001f00000 - 0001f1e000] BOOTMEM [ 0.000000] #52 [0001f20000 - 0001f3e000] BOOTMEM [ 0.000000] #53 [0001f40000 - 0001f5e000] BOOTMEM [ 0.000000] #54 [0001f60000 - 0001f7e000] BOOTMEM [ 0.000000] #55 [0245600000 - 024561e000] BOOTMEM [ 0.000000] #56 [0245620000 - 024563e000] BOOTMEM [ 0.000000] #57 [0245640000 - 024565e000] BOOTMEM [ 0.000000] #58 [0245660000 - 024567e000] BOOTMEM [ 0.000000] #59 [0245680000 - 024569e000] BOOTMEM [ 0.000000] #60 [02456a0000 - 02456be000] BOOTMEM [ 0.000000] #61 [02456c0000 - 02456de000] BOOTMEM [ 0.000000] #62 [02456e0000 - 02456fe000] BOOTMEM [ 0.000000] #63 [0245700000 - 024571e000] BOOTMEM [ 0.000000] #64 [0245720000 - 024573e000] BOOTMEM [ 0.000000] #65 [0245740000 - 024575e000] BOOTMEM [ 0.000000] #66 [0245760000 - 024577e000] BOOTMEM [ 0.000000] #67 [0001d49380 - 0001d49390] BOOTMEM [ 0.000000] #68 [0001d493c0 - 0001d493d0] BOOTMEM [ 0.000000] #69 [0001d49400 - 0001d49460] BOOTMEM [ 0.000000] #70 [0001d49480 - 0001d49540] BOOTMEM [ 0.000000] #71 [0001d49540 - 0001d49650] BOOTMEM [ 0.000000] #72 [0001d49680 - 0001d496c8] BOOTMEM [ 0.000000] #73 [0001d49700 - 0001d49748] BOOTMEM [ 0.000000] #74 [0001d4b000 - 0001d53000] BOOTMEM [ 0.000000] #75 [0001f7e000 - 0005f7e000] BOOTMEM [ 0.000000] #76 [0001d53000 - 0001d73000] BOOTMEM [ 0.000000] #77 [0001d73000 - 0001db3000] BOOTMEM [ 0.000000] #78 [0000018800 - 0000020800] BOOTMEM [ 0.000000] Memory: 12302572k/15728640k available (5701k kernel code, 3154868k absent, 271200k reserved, 5388k data, 908k init) [ 0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=24, Nodes=2 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:4352 nr_irqs:1280 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 125829120 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.010000] Fast TSC calibration using PIT [ 0.020000] Detected 2529.905 MHz processor. [ 0.000011] Calibrating delay loop (skipped), value calculated using timer frequency.. 5059.81 BogoMIPS (lpj=25299050) [ 0.000015] pid_max: default: 32768 minimum: 301 [ 0.000056] Security Framework initialized [ 0.000071] AppArmor: AppArmor initialized [ 0.000072] Yama: becoming mindful. [ 0.001630] Dentry cache hash table entries: 2097152 (order: 12, 16777216 bytes) [ 0.005621] Inode-cache hash table entries: 1048576 (order: 11, 8388608 bytes) [ 0.007187] Mount-cache hash table entries: 256 [ 0.007331] Initializing cgroup subsys ns [ 0.007335] Initializing cgroup subsys cpuacct [ 0.007340] Initializing cgroup subsys memory [ 0.007362] Initializing cgroup subsys devices [ 0.007364] Initializing cgroup subsys freezer [ 0.007365] Initializing cgroup subsys net_cls [ 0.007397] CPU: Physical Processor ID: 0 [ 0.007398] CPU: Processor Core ID: 0 [ 0.007404] mce: CPU supports 9 MCE banks [ 0.007416] CPU0: Thermal monitoring enabled (TM1) [ 0.007425] using mwait in idle threads. [ 0.007427] Performance Events: PEBS fmt1+, Westmere events, Intel PMU driver. [ 0.007433] ... version: 3 [ 0.007434] ... bit width: 48 [ 0.007436] ... generic registers: 4 [ 0.007437] ... value mask: 0000ffffffffffff [ 0.007439] ... max period: 000000007fffffff [ 0.007440] ... fixed-purpose events: 3 [ 0.007441] ... event mask: 000000070000000f [ 0.009559] ACPI: Core revision 20100428 [ 0.058453] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.058458] ftrace: allocating 22654 entries in 89 pages [ 0.065359] DMAR: Host address width 40 [ 0.065361] DMAR: DRHD base: 0x000000fbffe000 flags: 0x1 [ 0.065370] IOMMU 0: reg_base_addr fbffe000 ver 1:0 cap c90780106f0462 ecap f020f6 [ 0.065373] DMAR: RMRR base: 0x000000000ec000 end: 0x000000000effff [ 0.065375] DMAR: RMRR base: 0x0000003f7ec000 end: 0x0000003f7fffff [ 0.065377] DMAR: ATSR flags: 0x0 [ 0.065547] Setting APIC routing to physical flat [ 0.065995] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.165816] CPU0: Intel(R) Xeon(R) CPU E5630 @ 2.53GHz stepping 02 [ 0.278672] Booting Node 0, Processors #1 #2 #3 Ok. [ 0.817764] Booting Node 1, Processors #4 [ 0.977323] Disabling lock debugging due to kernel taint [ 0.997385] #5 #6 #7 Ok. [ 1.536476] Booting Node 0, Processors #8 #9 #10 #11 Ok. [ 2.255220] Booting Node 1, Processors #12 #13 #14 #15 [ 2.973841] Brought up 16 CPUs [ 2.973844] Total of 16 processors activated (80966.58 BogoMIPS). [ 2.985910] devtmpfs: initialized [ 2.986807] regulator: core version 0.5 [ 2.986830] Time: 2:06:16 Date: 09/01/10 [ 2.986870] NET: Registered protocol family 16 [ 2.986974] ACPI: bus type pci registered [ 2.986989] Trying to unpack rootfs image as initramfs... [ 2.987037] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 2.987039] PCI: not using MMCONFIG [ 2.987041] PCI: Using configuration type 1 for base access [ 2.987894] bio: create slab at 0 [ 2.989110] ACPI: EC: Look up EC in DSDT [ 2.990517] ACPI: Executed 1 blocks of module-level executable AML code [ 2.998197] ACPI: SSDT 000000003f79e200 033D4 (v01 DpgPmm P001Ist 00000011 INTL 20051117) [ 2.998686] ACPI: Dynamic OEM Table Load: [ 2.998688] ACPI: SSDT (null) 033D4 (v01 DpgPmm P001Ist 00000011 INTL 20051117) [ 2.999057] ACPI: Interpreter enabled [ 2.999059] ACPI: (supports S0 S1 S3 S4 S5) [ 2.999077] ACPI: Using IOAPIC for interrupt routing [ 2.999124] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 3.001018] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in ACPI motherboard resources [ 3.039287] ACPI: No dock devices found. [ 3.039290] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 3.039586] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 3.039854] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 3.039857] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 3.039858] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 3.039860] pci_root PNP0A08:00: host bridge window [mem 0x000d0000-0x000dffff] [ 3.039862] pci_root PNP0A08:00: host bridge window [mem 0x40000000-0xdfffffff] [ 3.039864] pci_root PNP0A08:00: host bridge window [mem 0xf0000000-0xfed8ffff] [ 3.039914] pci 0000:00:00.0: PME# supported from D0 D3hot D3cold [ 3.039917] pci 0000:00:00.0: PME# disabled [ 3.039971] pci 0000:00:01.0: PME# supported from D0 D3hot D3cold [ 3.039974] pci 0000:00:01.0: PME# disabled [ 3.040024] pci 0000:00:02.0: PME# supported from D0 D3hot D3cold [ 3.040027] pci 0000:00:02.0: PME# disabled [ 3.040077] pci 0000:00:03.0: PME# supported from D0 D3hot D3cold [ 3.040079] pci 0000:00:03.0: PME# disabled [ 3.040132] pci 0000:00:07.0: PME# supported from D0 D3hot D3cold [ 3.040135] pci 0000:00:07.0: PME# disabled [ 3.040164] pci 0000:00:13.0: reg 10: [mem 0xfec8a000-0xfec8afff] [ 3.040191] pci 0000:00:13.0: PME# supported from D0 D3hot D3cold [ 3.040194] pci 0000:00:13.0: PME# disabled [ 3.040385] pci 0000:00:1a.0: reg 20: [io 0x7980-0x799f] [ 3.040443] pci 0000:00:1a.1: reg 20: [io 0x7a00-0x7a1f] [ 3.040501] pci 0000:00:1a.2: reg 20: [io 0x7a80-0x7a9f] [ 3.040559] pci 0000:00:1a.7: reg 10: [mem 0xf3cf4000-0xf3cf43ff] [ 3.040608] pci 0000:00:1a.7: PME# supported from D0 D3hot D3cold [ 3.040612] pci 0000:00:1a.7: PME# disabled [ 3.040671] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 3.040674] pci 0000:00:1c.0: PME# disabled [ 3.040734] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 3.040737] pci 0000:00:1c.2: PME# disabled [ 3.040797] pci 0000:00:1c.4: PME# supported from D0 D3hot D3cold [ 3.040800] pci 0000:00:1c.4: PME# disabled [ 3.040848] pci 0000:00:1d.0: reg 20: [io 0x7b00-0x7b1f] [ 3.040906] pci 0000:00:1d.1: reg 20: [io 0x7b80-0x7b9f] [ 3.040966] pci 0000:00:1d.2: reg 20: [io 0x7c00-0x7c1f] [ 3.041023] pci 0000:00:1d.7: reg 10: [mem 0xf3cf6000-0xf3cf63ff] [ 3.041073] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 3.041076] pci 0000:00:1d.7: PME# disabled [ 3.041188] pci 0000:00:1f.0: Force enabled HPET at 0xfed00000 [ 3.041192] pci 0000:00:1f.0: quirk: [io 0x0800-0x087f] claimed by ICH6 ACPI/GPIO/TCO [ 3.041195] pci 0000:00:1f.0: quirk: [io 0x0500-0x053f] claimed by ICH6 GPIO [ 3.041199] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 1 PIO at 0a00 (mask 00ff) [ 3.041250] pci 0000:00:1f.2: reg 10: [io 0x7d00-0x7d07] [ 3.041255] pci 0000:00:1f.2: reg 14: [io 0x7f00-0x7f03] [ 3.041260] pci 0000:00:1f.2: reg 18: [io 0x7e80-0x7e87] [ 3.041264] pci 0000:00:1f.2: reg 1c: [io 0x7e00-0x7e03] [ 3.041269] pci 0000:00:1f.2: reg 20: [io 0x7d80-0x7d9f] [ 3.041273] pci 0000:00:1f.2: reg 24: [mem 0xf3cfc000-0xf3cfc7ff] [ 3.041301] pci 0000:00:1f.2: PME# supported from D3hot [ 3.041304] pci 0000:00:1f.2: PME# disabled [ 3.041329] pci 0000:00:1f.3: reg 10: [mem 0xf3cfe000-0xf3cfe0ff 64bit] [ 3.041341] pci 0000:00:1f.3: reg 20: [io 0x0400-0x041f] [ 3.041405] pci 0000:0e:00.0: reg 10: [io 0xeb00-0xeb07] [ 3.041410] pci 0000:0e:00.0: reg 14: [io 0xea80-0xea83] [ 3.041414] pci 0000:0e:00.0: reg 18: [io 0xed00-0xed07] [ 3.041419] pci 0000:0e:00.0: reg 1c: [io 0xec00-0xec03] [ 3.041423] pci 0000:0e:00.0: reg 20: [io 0xeb80-0xeb8f] [ 3.041428] pci 0000:0e:00.0: reg 24: [mem 0xfbeef000-0xfbeef7ff] [ 3.041433] pci 0000:0e:00.0: reg 30: [mem 0xfbed0000-0xfbedffff pref] [ 3.041451] pci 0000:0e:00.0: PME# supported from D3hot [ 3.041454] pci 0000:0e:00.0: PME# disabled [ 3.041479] pci 0000:0e:00.1: reg 10: [io 0xee00-0xee07] [ 3.041483] pci 0000:0e:00.1: reg 14: [io 0xed80-0xed83] [ 3.041488] pci 0000:0e:00.1: reg 18: [io 0xef80-0xef87] [ 3.041492] pci 0000:0e:00.1: reg 1c: [io 0xef00-0xef03] [ 3.041497] pci 0000:0e:00.1: reg 20: [io 0xee80-0xee8f] [ 3.041502] pci 0000:0e:00.1: reg 24: [mem 0xfbeefc00-0xfbeefc0f] [ 3.041506] pci 0000:0e:00.1: reg 30: [mem 0xfbef0000-0xfbefffff pref] [ 3.041526] pci 0000:0e:00.1: PME# supported from D3hot [ 3.041528] pci 0000:0e:00.1: PME# disabled [ 3.053663] pci 0000:00:01.0: PCI bridge to [bus 0e-0e] [ 3.053668] pci 0000:00:01.0: bridge window [io 0xe000-0xefff] [ 3.053672] pci 0000:00:01.0: bridge window [mem 0xfbe00000-0xfbefffff] [ 3.053678] pci 0000:00:01.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 3.053748] pci 0000:0d:00.0: reg 10: [mem 0xfbdfe000-0xfbdfffff 64bit] [ 3.053795] pci 0000:0d:00.0: PME# supported from D0 D3hot [ 3.053798] pci 0000:0d:00.0: PME# disabled [ 3.073627] pci 0000:00:02.0: PCI bridge to [bus 0d-0d] [ 3.073631] pci 0000:00:02.0: bridge window [io 0xf000-0x0000] (disabled) [ 3.073635] pci 0000:00:02.0: bridge window [mem 0xfbd00000-0xfbdfffff] [ 3.073641] pci 0000:00:02.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 3.073725] pci 0000:09:00.0: PME# supported from D0 D3hot D3cold [ 3.073727] pci 0000:09:00.0: PME# disabled [ 3.093588] pci 0000:00:03.0: PCI bridge to [bus 09-0c] [ 3.093593] pci 0000:00:03.0: bridge window [io 0xc000-0xdfff] [ 3.093597] pci 0000:00:03.0: bridge window [mem 0xf4000000-0xfbcfffff] [ 3.093603] pci 0000:00:03.0: bridge window [mem 0xb8000000-0xcfffffff 64bit pref] [ 3.093679] pci 0000:0a:00.0: PME# supported from D0 D3hot D3cold [ 3.093682] pci 0000:0a:00.0: PME# disabled [ 3.093724] pci 0000:0a:02.0: PME# supported from D0 D3hot D3cold [ 3.093727] pci 0000:0a:02.0: PME# disabled [ 3.093754] pci 0000:09:00.0: PCI bridge to [bus 0a-0c] [ 3.093758] pci 0000:09:00.0: bridge window [io 0xc000-0xdfff] [ 3.093761] pci 0000:09:00.0: bridge window [mem 0xf4000000-0xfbcfffff] [ 3.093766] pci 0000:09:00.0: bridge window [mem 0xb8000000-0xcfffffff 64bit pref] [ 3.093807] pci 0000:0c:00.0: reg 10: [mem 0xf8000000-0xf9ffffff] [ 3.093816] pci 0000:0c:00.0: reg 14: [mem 0xc8000000-0xcfffffff 64bit pref] [ 3.093826] pci 0000:0c:00.0: reg 1c: [mem 0xc4000000-0xc7ffffff 64bit pref] [ 3.093831] pci 0000:0c:00.0: reg 24: [io 0xdf80-0xdfff] [ 3.093837] pci 0000:0c:00.0: reg 30: [mem 0xfbc00000-0xfbc7ffff pref] [ 3.093895] pci 0000:0c:00.1: reg 10: [mem 0xfbcfc000-0xfbcfffff] [ 3.113559] pci 0000:0a:00.0: PCI bridge to [bus 0c-0c] [ 3.113566] pci 0000:0a:00.0: bridge window [io 0xd000-0xdfff] [ 3.113570] pci 0000:0a:00.0: bridge window [mem 0xf8000000-0xfbcfffff] [ 3.113576] pci 0000:0a:00.0: bridge window [mem 0xc4000000-0xcfffffff 64bit pref] [ 3.113634] pci 0000:0b:00.0: reg 10: [mem 0xf4000000-0xf5ffffff] [ 3.113644] pci 0000:0b:00.0: reg 14: [mem 0xb8000000-0xbfffffff 64bit pref] [ 3.113654] pci 0000:0b:00.0: reg 1c: [mem 0xc0000000-0xc3ffffff 64bit pref] [ 3.113659] pci 0000:0b:00.0: reg 24: [io 0xcf80-0xcfff] [ 3.113665] pci 0000:0b:00.0: reg 30: [mem 0xf7f00000-0xf7f7ffff pref] [ 3.113727] pci 0000:0b:00.1: reg 10: [mem 0xf7ffc000-0xf7ffffff] [ 3.133524] pci 0000:0a:02.0: PCI bridge to [bus 0b-0b] [ 3.133530] pci 0000:0a:02.0: bridge window [io 0xc000-0xcfff] [ 3.133535] pci 0000:0a:02.0: bridge window [mem 0xf4000000-0xf7ffffff] [ 3.133541] pci 0000:0a:02.0: bridge window [mem 0xb8000000-0xc3ffffff 64bit pref] [ 3.133633] pci 0000:05:00.0: PME# supported from D0 D3hot D3cold [ 3.133636] pci 0000:05:00.0: PME# disabled [ 3.153482] pci 0000:00:07.0: PCI bridge to [bus 05-08] [ 3.153486] pci 0000:00:07.0: bridge window [io 0xb000-0xbfff] [ 3.153490] pci 0000:00:07.0: bridge window [mem 0xd7d00000-0xdfffffff] [ 3.153496] pci 0000:00:07.0: bridge window [mem 0xac000000-0xb7ffffff 64bit pref] [ 3.153572] pci 0000:06:00.0: PME# supported from D0 D3hot D3cold [ 3.153575] pci 0000:06:00.0: PME# disabled [ 3.153618] pci 0000:06:02.0: PME# supported from D0 D3hot D3cold [ 3.153621] pci 0000:06:02.0: PME# disabled [ 3.153648] pci 0000:05:00.0: PCI bridge to [bus 06-08] [ 3.153652] pci 0000:05:00.0: bridge window [io 0xb000-0xbfff] [ 3.153655] pci 0000:05:00.0: bridge window [mem 0xd7d00000-0xdfffffff] [ 3.153660] pci 0000:05:00.0: bridge window [mem 0xac000000-0xb7ffffff 64bit pref] [ 3.153702] pci 0000:08:00.0: reg 10: [mem 0xdc000000-0xddffffff] [ 3.153712] pci 0000:08:00.0: reg 14: [mem 0xb0000000-0xb7ffffff 64bit pref] [ 3.153722] pci 0000:08:00.0: reg 1c: [mem 0xac000000-0xafffffff 64bit pref] [ 3.153728] pci 0000:08:00.0: reg 24: [io 0xbf80-0xbfff] [ 3.153733] pci 0000:08:00.0: reg 30: [mem 0xdff00000-0xdff7ffff pref] [ 3.153795] pci 0000:08:00.1: reg 10: [mem 0xdfffc000-0xdfffffff] [ 3.173454] pci 0000:06:00.0: PCI bridge to [bus 08-08] [ 3.173460] pci 0000:06:00.0: bridge window [io 0xb000-0xbfff] [ 3.173464] pci 0000:06:00.0: bridge window [mem 0xdc000000-0xdfffffff] [ 3.173470] pci 0000:06:00.0: bridge window [mem 0xac000000-0xb7ffffff 64bit pref] [ 3.173538] pci 0000:07:00.0: reg 10: [mem 0xd7df0000-0xd7dfffff 64bit] [ 3.173551] pci 0000:07:00.0: reg 18: [mem 0xd7e00000-0xd7ffffff 64bit] [ 3.173564] pci 0000:07:00.0: reg 20: [mem 0xd8000000-0xdbffffff 64bit] [ 3.193415] pci 0000:06:02.0: PCI bridge to [bus 07-07] [ 3.193422] pci 0000:06:02.0: bridge window [io 0xf000-0x0000] (disabled) [ 3.193426] pci 0000:06:02.0: bridge window [mem 0xd7d00000-0xdbffffff] [ 3.193432] pci 0000:06:02.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 3.193564] pci 0000:04:00.0: reg 24: [mem 0xf3fee000-0xf3feffff] [ 3.193573] pci 0000:04:00.0: reg 30: [mem 0xf3ff0000-0xf3ffffff pref] [ 3.193603] pci 0000:04:00.0: PME# supported from D3hot [ 3.193608] pci 0000:04:00.0: PME# disabled [ 3.193651] pci 0000:04:00.1: reg 10: [io 0xae00-0xae07] [ 3.193659] pci 0000:04:00.1: reg 14: [io 0xad80-0xad83] [ 3.193667] pci 0000:04:00.1: reg 18: [io 0xaf80-0xaf87] [ 3.193675] pci 0000:04:00.1: reg 1c: [io 0xaf00-0xaf03] [ 3.193683] pci 0000:04:00.1: reg 20: [io 0xae80-0xae8f] [ 3.193741] pci 0000:04:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 3.193753] pci 0000:00:1c.0: PCI bridge to [bus 04-04] [ 3.193756] pci 0000:00:1c.0: bridge window [io 0xa000-0xafff] [ 3.193760] pci 0000:00:1c.0: bridge window [mem 0xf3f00000-0xf3ffffff] [ 3.193765] pci 0000:00:1c.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 3.193833] pci 0000:03:00.0: reg 10: [mem 0xf3edc000-0xf3edffff 64bit] [ 3.193840] pci 0000:03:00.0: reg 18: [io 0x9f00-0x9fff] [ 3.193864] pci 0000:03:00.0: reg 30: [mem 0xf3ee0000-0xf3efffff pref] [ 3.193896] pci 0000:03:00.0: supports D1 D2 [ 3.193897] pci 0000:03:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 3.193902] pci 0000:03:00.0: PME# disabled [ 3.213382] pci 0000:00:1c.2: PCI bridge to [bus 03-03] [ 3.213387] pci 0000:00:1c.2: bridge window [io 0x9000-0x9fff] [ 3.213391] pci 0000:00:1c.2: bridge window [mem 0xf3e00000-0xf3efffff] [ 3.213398] pci 0000:00:1c.2: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 3.213478] pci 0000:02:00.0: reg 10: [mem 0xf3ddc000-0xf3ddffff 64bit] [ 3.213486] pci 0000:02:00.0: reg 18: [io 0x8f00-0x8fff] [ 3.213511] pci 0000:02:00.0: reg 30: [mem 0xf3de0000-0xf3dfffff pref] [ 3.213543] pci 0000:02:00.0: supports D1 D2 [ 3.213544] pci 0000:02:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 3.213548] pci 0000:02:00.0: PME# disabled [ 3.233346] pci 0000:00:1c.4: PCI bridge to [bus 02-02] [ 3.233351] pci 0000:00:1c.4: bridge window [io 0x8000-0x8fff] [ 3.233355] pci 0000:00:1c.4: bridge window [mem 0xf3d00000-0xf3dfffff] [ 3.233362] pci 0000:00:1c.4: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 3.233431] pci 0000:00:1e.0: PCI bridge to [bus 01-01] (subtractive decode) [ 3.233435] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 3.233438] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 3.233443] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 3.233445] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 3.233447] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 3.233449] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 3.233451] pci 0000:00:1e.0: bridge window [mem 0x000d0000-0x000dffff] (subtractive decode) [ 3.233452] pci 0000:00:1e.0: bridge window [mem 0x40000000-0xdfffffff] (subtractive decode) [ 3.233454] pci 0000:00:1e.0: bridge window [mem 0xf0000000-0xfed8ffff] (subtractive decode) [ 3.233485] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 3.233717] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.NPE3._PRT] [ 3.233777] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.NPE7._PRT] [ 3.233835] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P1._PRT] [ 3.233930] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P4._PRT] [ 3.233990] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P6._PRT] [ 3.234042] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P8._PRT] [ 3.257544] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 6 7 10 *11 12 14 15) [ 3.257653] ACPI: PCI Interrupt Link [LNKB] (IRQs *5) [ 3.257758] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 6 7 *10 11 12 14 15) [ 3.257864] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 6 7 10 11 12 14 *15) [ 3.257974] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 6 7 10 11 12 14 15) *0, disabled. [ 3.258081] ACPI: PCI Interrupt Link [LNKF] (IRQs *3 4 6 7 10 11 12 14 15) [ 3.258188] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 6 7 10 11 12 14 15) *0, disabled. [ 3.258295] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 6 7 10 11 12 *14 15) [ 3.258340] HEST: Table is not found! [ 3.258395] vgaarb: device added: PCI:0000:0c:00.0,decodes=io+mem,owns=io+mem,locks=none [ 3.258400] vgaarb: device added: PCI:0000:0b:00.0,decodes=io+mem,owns=none,locks=none [ 3.258405] vgaarb: device added: PCI:0000:08:00.0,decodes=io+mem,owns=none,locks=none [ 3.258409] vgaarb: loaded [ 3.258508] SCSI subsystem initialized [ 3.258748] libata version 3.00 loaded. [ 3.258786] usbcore: registered new interface driver usbfs [ 3.258794] usbcore: registered new interface driver hub [ 3.258814] usbcore: registered new device driver usb [ 3.258933] ACPI: WMI: Mapper loaded [ 3.258935] PCI: Using ACPI for IRQ routing [ 3.258937] PCI: pci_cache_line_size set to 64 bytes [ 3.259066] reserve RAM buffer: 0000000000093c00 - 000000000009ffff [ 3.259068] reserve RAM buffer: 000000003f790000 - 000000003fffffff [ 3.259140] NetLabel: Initializing [ 3.259141] NetLabel: domain hash size = 128 [ 3.259142] NetLabel: protocols = UNLABELED CIPSOv4 [ 3.259152] NetLabel: unlabeled traffic allowed by default [ 3.259262] hpet clockevent registered [ 3.259267] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0 [ 3.259271] hpet0: 4 comparators, 64-bit 14.318180 MHz counter [ 3.261289] Switching to clocksource tsc [ 3.268584] AppArmor: AppArmor Filesystem Enabled [ 3.268591] pnp: PnP ACPI init [ 3.268598] ACPI: bus type pnp registered [ 3.271314] pnp: PnP ACPI: found 11 devices [ 3.271316] ACPI: ACPI bus type pnp unregistered [ 3.271324] system 00:01: [mem 0xfbf00000-0xfbffffff] has been reserved [ 3.271326] system 00:01: [mem 0xfc000000-0xfcffffff] has been reserved [ 3.271328] system 00:01: [mem 0xfd000000-0xfdffffff] has been reserved [ 3.271331] system 00:01: [mem 0xfe000000-0xfebfffff] has been reserved [ 3.271333] system 00:01: [mem 0xfec8a000-0xfec8afff] could not be reserved [ 3.271335] system 00:01: [mem 0xfed10000-0xfed10fff] has been reserved [ 3.271339] system 00:06: [io 0x0a00-0x0adf] has been reserved [ 3.271341] system 00:06: [io 0x0ae0-0x0aef] has been reserved [ 3.271345] system 00:07: [io 0x04d0-0x04d1] has been reserved [ 3.271347] system 00:07: [io 0x0800-0x087f] has been reserved [ 3.271349] system 00:07: [io 0x0500-0x057f] could not be reserved [ 3.271351] system 00:07: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 3.271353] system 00:07: [mem 0xfed20000-0xfed3ffff] has been reserved [ 3.271356] system 00:07: [mem 0xfed40000-0xfed8ffff] has been reserved [ 3.271359] system 00:08: [mem 0xfec00000-0xfec00fff] could not be reserved [ 3.271361] system 00:08: [mem 0xfee00000-0xfee00fff] has been reserved [ 3.271365] system 00:09: [mem 0xe0000000-0xefffffff] has been reserved [ 3.271369] system 00:0a: [mem 0x00000000-0x0009ffff] could not be reserved [ 3.271371] system 00:0a: [mem 0x000c0000-0x000cffff] has been reserved [ 3.271373] system 00:0a: [mem 0x000e0000-0x000fffff] could not be reserved [ 3.271375] system 00:0a: [mem 0x00100000-0x3fffffff] could not be reserved [ 3.271377] system 00:0a: [mem 0xfed90000-0xffffffff] could not be reserved [ 3.276102] pci 0000:00:1c.0: BAR 15: assigned [mem 0x40000000-0x401fffff 64bit pref] [ 3.276105] pci 0000:00:1c.2: BAR 15: assigned [mem 0x40200000-0x403fffff 64bit pref] [ 3.276108] pci 0000:00:1c.4: BAR 15: assigned [mem 0x40400000-0x405fffff 64bit pref] [ 3.276110] pci 0000:00:01.0: PCI bridge to [bus 0e-0e] [ 3.276112] pci 0000:00:01.0: bridge window [io 0xe000-0xefff] [ 3.276116] pci 0000:00:01.0: bridge window [mem 0xfbe00000-0xfbefffff] [ 3.276119] pci 0000:00:01.0: bridge window [mem pref disabled] [ 3.276123] pci 0000:00:02.0: PCI bridge to [bus 0d-0d] [ 3.276124] pci 0000:00:02.0: bridge window [io disabled] [ 3.276127] pci 0000:00:02.0: bridge window [mem 0xfbd00000-0xfbdfffff] [ 3.276130] pci 0000:00:02.0: bridge window [mem pref disabled] [ 3.276135] pci 0000:0a:00.0: PCI bridge to [bus 0c-0c] [ 3.276137] pci 0000:0a:00.0: bridge window [io 0xd000-0xdfff] [ 3.276141] pci 0000:0a:00.0: bridge window [mem 0xf8000000-0xfbcfffff] [ 3.276144] pci 0000:0a:00.0: bridge window [mem 0xc4000000-0xcfffffff 64bit pref] [ 3.276148] pci 0000:0a:02.0: PCI bridge to [bus 0b-0b] [ 3.276151] pci 0000:0a:02.0: bridge window [io 0xc000-0xcfff] [ 3.276154] pci 0000:0a:02.0: bridge window [mem 0xf4000000-0xf7ffffff] [ 3.276157] pci 0000:0a:02.0: bridge window [mem 0xb8000000-0xc3ffffff 64bit pref] [ 3.276162] pci 0000:09:00.0: PCI bridge to [bus 0a-0c] [ 3.276164] pci 0000:09:00.0: bridge window [io 0xc000-0xdfff] [ 3.276168] pci 0000:09:00.0: bridge window [mem 0xf4000000-0xfbcfffff] [ 3.276171] pci 0000:09:00.0: bridge window [mem 0xb8000000-0xcfffffff 64bit pref] [ 3.276175] pci 0000:00:03.0: PCI bridge to [bus 09-0c] [ 3.276177] pci 0000:00:03.0: bridge window [io 0xc000-0xdfff] [ 3.276181] pci 0000:00:03.0: bridge window [mem 0xf4000000-0xfbcfffff] [ 3.276183] pci 0000:00:03.0: bridge window [mem 0xb8000000-0xcfffffff 64bit pref] [ 3.276188] pci 0000:06:00.0: PCI bridge to [bus 08-08] [ 3.276190] pci 0000:06:00.0: bridge window [io 0xb000-0xbfff] [ 3.276194] pci 0000:06:00.0: bridge window [mem 0xdc000000-0xdfffffff] [ 3.276197] pci 0000:06:00.0: bridge window [mem 0xac000000-0xb7ffffff 64bit pref] [ 3.276202] pci 0000:06:02.0: PCI bridge to [bus 07-07] [ 3.276203] pci 0000:06:02.0: bridge window [io disabled] [ 3.276207] pci 0000:06:02.0: bridge window [mem 0xd7d00000-0xdbffffff] [ 3.276210] pci 0000:06:02.0: bridge window [mem pref disabled] [ 3.276214] pci 0000:05:00.0: PCI bridge to [bus 06-08] [ 3.276216] pci 0000:05:00.0: bridge window [io 0xb000-0xbfff] [ 3.276220] pci 0000:05:00.0: bridge window [mem 0xd7d00000-0xdfffffff] [ 3.276223] pci 0000:05:00.0: bridge window [mem 0xac000000-0xb7ffffff 64bit pref] [ 3.276227] pci 0000:00:07.0: PCI bridge to [bus 05-08] [ 3.276230] pci 0000:00:07.0: bridge window [io 0xb000-0xbfff] [ 3.276233] pci 0000:00:07.0: bridge window [mem 0xd7d00000-0xdfffffff] [ 3.276236] pci 0000:00:07.0: bridge window [mem 0xac000000-0xb7ffffff 64bit pref] [ 3.276240] pci 0000:00:1c.0: PCI bridge to [bus 04-04] [ 3.276243] pci 0000:00:1c.0: bridge window [io 0xa000-0xafff] [ 3.276247] pci 0000:00:1c.0: bridge window [mem 0xf3f00000-0xf3ffffff] [ 3.276250] pci 0000:00:1c.0: bridge window [mem 0x40000000-0x401fffff 64bit pref] [ 3.276255] pci 0000:00:1c.2: PCI bridge to [bus 03-03] [ 3.276257] pci 0000:00:1c.2: bridge window [io 0x9000-0x9fff] [ 3.276261] pci 0000:00:1c.2: bridge window [mem 0xf3e00000-0xf3efffff] [ 3.276264] pci 0000:00:1c.2: bridge window [mem 0x40200000-0x403fffff 64bit pref] [ 3.276269] pci 0000:00:1c.4: PCI bridge to [bus 02-02] [ 3.276272] pci 0000:00:1c.4: bridge window [io 0x8000-0x8fff] [ 3.276276] pci 0000:00:1c.4: bridge window [mem 0xf3d00000-0xf3dfffff] [ 3.276279] pci 0000:00:1c.4: bridge window [mem 0x40400000-0x405fffff 64bit pref] [ 3.276284] pci 0000:00:1e.0: PCI bridge to [bus 01-01] [ 3.276285] pci 0000:00:1e.0: bridge window [io disabled] [ 3.276289] pci 0000:00:1e.0: bridge window [mem disabled] [ 3.276292] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 3.276303] pci 0000:00:01.0: setting latency timer to 64 [ 3.276309] pci 0000:00:02.0: setting latency timer to 64 [ 3.276315] pci 0000:00:03.0: setting latency timer to 64 [ 3.276322] pci 0000:09:00.0: setting latency timer to 64 [ 3.276329] pci 0000:0a:00.0: setting latency timer to 64 [ 3.276335] pci 0000:0a:02.0: setting latency timer to 64 [ 3.276341] pci 0000:00:07.0: setting latency timer to 64 [ 3.276348] pci 0000:05:00.0: setting latency timer to 64 [ 3.276354] pci 0000:06:00.0: setting latency timer to 64 [ 3.276361] pci 0000:06:02.0: setting latency timer to 64 [ 3.276368] alloc irq_desc for 17 on node -1 [ 3.276369] alloc kstat_irqs on node -1 [ 3.276374] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 3.276377] pci 0000:00:1c.0: setting latency timer to 64 [ 3.276383] alloc irq_desc for 18 on node -1 [ 3.276384] alloc kstat_irqs on node -1 [ 3.276387] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 3.276390] pci 0000:00:1c.2: setting latency timer to 64 [ 3.276397] pci 0000:00:1c.4: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 3.276400] pci 0000:00:1c.4: setting latency timer to 64 [ 3.276405] pci 0000:00:1e.0: setting latency timer to 64 [ 3.276408] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 3.276410] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 3.276411] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 3.276413] pci_bus 0000:00: resource 7 [mem 0x000d0000-0x000dffff] [ 3.276414] pci_bus 0000:00: resource 8 [mem 0x40000000-0xdfffffff] [ 3.276416] pci_bus 0000:00: resource 9 [mem 0xf0000000-0xfed8ffff] [ 3.276418] pci_bus 0000:0e: resource 0 [io 0xe000-0xefff] [ 3.276419] pci_bus 0000:0e: resource 1 [mem 0xfbe00000-0xfbefffff] [ 3.276421] pci_bus 0000:0d: resource 1 [mem 0xfbd00000-0xfbdfffff] [ 3.276423] pci_bus 0000:09: resource 0 [io 0xc000-0xdfff] [ 3.276424] pci_bus 0000:09: resource 1 [mem 0xf4000000-0xfbcfffff] [ 3.276426] pci_bus 0000:09: resource 2 [mem 0xb8000000-0xcfffffff 64bit pref] [ 3.276428] pci_bus 0000:0a: resource 0 [io 0xc000-0xdfff] [ 3.276429] pci_bus 0000:0a: resource 1 [mem 0xf4000000-0xfbcfffff] [ 3.276431] pci_bus 0000:0a: resource 2 [mem 0xb8000000-0xcfffffff 64bit pref] [ 3.276433] pci_bus 0000:0c: resource 0 [io 0xd000-0xdfff] [ 3.276434] pci_bus 0000:0c: resource 1 [mem 0xf8000000-0xfbcfffff] [ 3.276436] pci_bus 0000:0c: resource 2 [mem 0xc4000000-0xcfffffff 64bit pref] [ 3.276438] pci_bus 0000:0b: resource 0 [io 0xc000-0xcfff] [ 3.276439] pci_bus 0000:0b: resource 1 [mem 0xf4000000-0xf7ffffff] [ 3.276441] pci_bus 0000:0b: resource 2 [mem 0xb8000000-0xc3ffffff 64bit pref] [ 3.276443] pci_bus 0000:05: resource 0 [io 0xb000-0xbfff] [ 3.276444] pci_bus 0000:05: resource 1 [mem 0xd7d00000-0xdfffffff] [ 3.276446] pci_bus 0000:05: resource 2 [mem 0xac000000-0xb7ffffff 64bit pref] [ 3.276448] pci_bus 0000:06: resource 0 [io 0xb000-0xbfff] [ 3.276449] pci_bus 0000:06: resource 1 [mem 0xd7d00000-0xdfffffff] [ 3.276451] pci_bus 0000:06: resource 2 [mem 0xac000000-0xb7ffffff 64bit pref] [ 3.276452] pci_bus 0000:08: resource 0 [io 0xb000-0xbfff] [ 3.276454] pci_bus 0000:08: resource 1 [mem 0xdc000000-0xdfffffff] [ 3.276456] pci_bus 0000:08: resource 2 [mem 0xac000000-0xb7ffffff 64bit pref] [ 3.276457] pci_bus 0000:07: resource 1 [mem 0xd7d00000-0xdbffffff] [ 3.276459] pci_bus 0000:04: resource 0 [io 0xa000-0xafff] [ 3.276461] pci_bus 0000:04: resource 1 [mem 0xf3f00000-0xf3ffffff] [ 3.276462] pci_bus 0000:04: resource 2 [mem 0x40000000-0x401fffff 64bit pref] [ 3.276464] pci_bus 0000:03: resource 0 [io 0x9000-0x9fff] [ 3.276466] pci_bus 0000:03: resource 1 [mem 0xf3e00000-0xf3efffff] [ 3.276467] pci_bus 0000:03: resource 2 [mem 0x40200000-0x403fffff 64bit pref] [ 3.276469] pci_bus 0000:02: resource 0 [io 0x8000-0x8fff] [ 3.276471] pci_bus 0000:02: resource 1 [mem 0xf3d00000-0xf3dfffff] [ 3.276472] pci_bus 0000:02: resource 2 [mem 0x40400000-0x405fffff 64bit pref] [ 3.276474] pci_bus 0000:01: resource 4 [io 0x0000-0x0cf7] [ 3.276476] pci_bus 0000:01: resource 5 [io 0x0d00-0xffff] [ 3.276477] pci_bus 0000:01: resource 6 [mem 0x000a0000-0x000bffff] [ 3.276479] pci_bus 0000:01: resource 7 [mem 0x000d0000-0x000dffff] [ 3.276480] pci_bus 0000:01: resource 8 [mem 0x40000000-0xdfffffff] [ 3.276482] pci_bus 0000:01: resource 9 [mem 0xf0000000-0xfed8ffff] [ 3.276512] NET: Registered protocol family 2 [ 3.276889] IP route cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 3.278268] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 3.279754] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 3.279928] TCP: Hash tables configured (established 524288 bind 65536) [ 3.279929] TCP reno registered [ 3.279954] UDP hash table entries: 8192 (order: 6, 262144 bytes) [ 3.280030] UDP-Lite hash table entries: 8192 (order: 6, 262144 bytes) [ 3.280231] NET: Registered protocol family 1 [ 3.280457] pci 0000:0c:00.0: Boot video device [ 3.280547] PCI: CLS 256 bytes, default 64 [ 3.280549] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) [ 3.280551] Placing 64MB software IO TLB between ffff880001f7e000 - ffff880005f7e000 [ 3.280553] software IO TLB at phys 0x1f7e000 - 0x5f7e000 [ 3.281286] Scanning for low memory corruption every 60 seconds [ 3.281385] audit: initializing netlink socket (disabled) [ 3.281392] type=2000 audit(1283306775.990:1): initialized [ 3.287372] Freeing initrd memory: 16512k freed [ 3.294717] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 3.296168] VFS: Disk quotas dquot_6.5.2 [ 3.296225] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 3.296736] fuse init (API version 7.14) [ 3.296805] msgmni has been set to 24060 [ 3.299062] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 3.299065] io scheduler noop registered [ 3.299066] io scheduler deadline registered [ 3.299100] io scheduler cfq registered (default) [ 3.299211] pcieport 0000:00:01.0: setting latency timer to 64 [ 3.299235] alloc irq_desc for 64 on node -1 [ 3.299237] alloc kstat_irqs on node -1 [ 3.299249] pcieport 0000:00:01.0: irq 64 for MSI/MSI-X [ 3.299300] pcieport 0000:00:02.0: setting latency timer to 64 [ 3.299323] alloc irq_desc for 65 on node -1 [ 3.299324] alloc kstat_irqs on node -1 [ 3.299329] pcieport 0000:00:02.0: irq 65 for MSI/MSI-X [ 3.299383] pcieport 0000:00:03.0: setting latency timer to 64 [ 3.299406] alloc irq_desc for 66 on node -1 [ 3.299407] alloc kstat_irqs on node -1 [ 3.299412] pcieport 0000:00:03.0: irq 66 for MSI/MSI-X [ 3.299458] pcieport 0000:00:07.0: setting latency timer to 64 [ 3.299480] alloc irq_desc for 67 on node -1 [ 3.299482] alloc kstat_irqs on node -1 [ 3.299486] pcieport 0000:00:07.0: irq 67 for MSI/MSI-X [ 3.299535] pcieport 0000:00:1c.0: setting latency timer to 64 [ 3.299562] alloc irq_desc for 68 on node -1 [ 3.299563] alloc kstat_irqs on node -1 [ 3.299569] pcieport 0000:00:1c.0: irq 68 for MSI/MSI-X [ 3.299629] pcieport 0000:00:1c.2: setting latency timer to 64 [ 3.299655] alloc irq_desc for 69 on node -1 [ 3.299657] alloc kstat_irqs on node -1 [ 3.299662] pcieport 0000:00:1c.2: irq 69 for MSI/MSI-X [ 3.299720] pcieport 0000:00:1c.4: setting latency timer to 64 [ 3.299747] alloc irq_desc for 70 on node -1 [ 3.299748] alloc kstat_irqs on node -1 [ 3.299753] pcieport 0000:00:1c.4: irq 70 for MSI/MSI-X [ 3.300058] aer 0000:00:01.0:pcie02: service driver aer loaded [ 3.300081] aer 0000:00:02.0:pcie02: service driver aer loaded [ 3.300104] aer 0000:00:03.0:pcie02: service driver aer loaded [ 3.300127] aer 0000:00:07.0:pcie02: service driver aer loaded [ 3.300142] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 3.300353] pciehp 0000:00:1c.0:pcie04: HPC vendor_id 8086 device_id 3a40 ss_vid 3842 ss_did 101a [ 3.300392] pciehp 0000:00:1c.0:pcie04: service driver pciehp loaded [ 3.300403] pciehp 0000:00:1c.2:pcie04: HPC vendor_id 8086 device_id 3a44 ss_vid 3842 ss_did 101a [ 3.300428] pciehp 0000:00:1c.2:pcie04: service driver pciehp loaded [ 3.300438] pciehp 0000:00:1c.4:pcie04: HPC vendor_id 8086 device_id 3a48 ss_vid 3842 ss_did 101a [ 3.300466] pciehp 0000:00:1c.4:pcie04: service driver pciehp loaded [ 3.300471] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 3.300523] intel_idle: MWAIT substates: 0x1120 [ 3.300525] intel_idle: v0.4 model 0x2C [ 3.300526] intel_idle: lapic_timer_reliable_states 0xffffffff [ 3.300660] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 3.300663] ACPI: Power Button [PWRB] [ 3.300694] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 [ 3.300696] ACPI: Power Button [PWRF] [ 3.300977] ACPI: acpi_idle yielding to intel_idle [ 3.304707] ERST: Table is not found! [ 3.305606] Linux agpgart interface v0.103 [ 3.305623] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 3.306658] brd: module loaded [ 3.307090] loop: module loaded [ 3.307242] alloc irq_desc for 40 on node -1 [ 3.307244] alloc kstat_irqs on node -1 [ 3.307250] pata_acpi 0000:0e:00.1: PCI INT B -> GSI 40 (level, low) -> IRQ 40 [ 3.307270] pata_acpi 0000:0e:00.1: setting latency timer to 64 [ 3.307280] pata_acpi 0000:0e:00.1: PCI INT B disabled [ 3.307295] pata_acpi 0000:04:00.1: enabling device (0000 -> 0001) [ 3.307299] pata_acpi 0000:04:00.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 3.307315] pata_acpi 0000:04:00.1: setting latency timer to 64 [ 3.307324] pata_acpi 0000:04:00.1: PCI INT B disabled [ 3.307521] Fixed MDIO Bus: probed [ 3.307543] PPP generic driver version 2.4.2 [ 3.307566] tun: Universal TUN/TAP device driver, 1.6 [ 3.307567] tun: (C) 1999-2004 Max Krasnyansky [ 3.307614] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 3.307632] ehci_hcd 0000:00:1a.7: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 3.307645] ehci_hcd 0000:00:1a.7: setting latency timer to 64 [ 3.307648] ehci_hcd 0000:00:1a.7: EHCI Host Controller [ 3.307677] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 1 [ 3.307703] ehci_hcd 0000:00:1a.7: debug port 1 [ 3.311584] ehci_hcd 0000:00:1a.7: cache line size of 256 is not supported [ 3.311595] ehci_hcd 0000:00:1a.7: irq 18, io mem 0xf3cf4000 [ 3.333281] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00 [ 3.333393] hub 1-0:1.0: USB hub found [ 3.333396] hub 1-0:1.0: 6 ports detected [ 3.333457] alloc irq_desc for 23 on node -1 [ 3.333459] alloc kstat_irqs on node -1 [ 3.333463] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 3.333474] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 3.333477] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 3.333501] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 2 [ 3.333525] ehci_hcd 0000:00:1d.7: debug port 1 [ 3.337387] ehci_hcd 0000:00:1d.7: cache line size of 256 is not supported [ 3.337398] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xf3cf6000 [ 3.353260] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 3.353356] hub 2-0:1.0: USB hub found [ 3.353359] hub 2-0:1.0: 6 ports detected [ 3.353418] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 3.353428] uhci_hcd: USB Universal Host Controller Interface driver [ 3.353465] alloc irq_desc for 16 on node -1 [ 3.353467] alloc kstat_irqs on node -1 [ 3.353471] uhci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 3.353475] uhci_hcd 0000:00:1a.0: setting latency timer to 64 [ 3.353478] uhci_hcd 0000:00:1a.0: UHCI Host Controller [ 3.353505] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 3 [ 3.353533] uhci_hcd 0000:00:1a.0: irq 16, io base 0x00007980 [ 3.353614] hub 3-0:1.0: USB hub found [ 3.353618] hub 3-0:1.0: 2 ports detected [ 3.353665] alloc irq_desc for 21 on node -1 [ 3.353666] alloc kstat_irqs on node -1 [ 3.353670] uhci_hcd 0000:00:1a.1: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 3.353674] uhci_hcd 0000:00:1a.1: setting latency timer to 64 [ 3.353677] uhci_hcd 0000:00:1a.1: UHCI Host Controller [ 3.353708] uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 4 [ 3.353735] uhci_hcd 0000:00:1a.1: irq 21, io base 0x00007a00 [ 3.353815] hub 4-0:1.0: USB hub found [ 3.353818] hub 4-0:1.0: 2 ports detected [ 3.353863] alloc irq_desc for 19 on node -1 [ 3.353864] alloc kstat_irqs on node -1 [ 3.353868] uhci_hcd 0000:00:1a.2: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 3.353873] uhci_hcd 0000:00:1a.2: setting latency timer to 64 [ 3.353875] uhci_hcd 0000:00:1a.2: UHCI Host Controller [ 3.353909] uhci_hcd 0000:00:1a.2: new USB bus registered, assigned bus number 5 [ 3.353937] uhci_hcd 0000:00:1a.2: irq 19, io base 0x00007a80 [ 3.354019] hub 5-0:1.0: USB hub found [ 3.354022] hub 5-0:1.0: 2 ports detected [ 3.354067] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 3.354072] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 3.354074] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 3.354100] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 6 [ 3.354128] uhci_hcd 0000:00:1d.0: irq 23, io base 0x00007b00 [ 3.354209] hub 6-0:1.0: USB hub found [ 3.354211] hub 6-0:1.0: 2 ports detected [ 3.354258] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 3.354262] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 3.354265] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 3.354296] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 7 [ 3.354317] uhci_hcd 0000:00:1d.1: irq 19, io base 0x00007b80 [ 3.354397] hub 7-0:1.0: USB hub found [ 3.354400] hub 7-0:1.0: 2 ports detected [ 3.354451] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 3.354456] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 3.354458] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 3.354485] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 8 [ 3.354506] uhci_hcd 0000:00:1d.2: irq 18, io base 0x00007c00 [ 3.354589] hub 8-0:1.0: USB hub found [ 3.354592] hub 8-0:1.0: 2 ports detected [ 3.354676] PNP: No PS/2 controller found. Probing ports directly. [ 3.356944] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 3.356948] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 3.356996] mice: PS/2 mouse device common for all mice [ 3.357070] rtc_cmos 00:03: RTC can wake from S4 [ 3.357097] rtc_cmos 00:03: rtc core: registered rtc_cmos as rtc0 [ 3.357120] rtc0: alarms up to one month, y3k, 114 bytes nvram, hpet irqs [ 3.357196] device-mapper: uevent: version 1.0.3 [ 3.357256] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 3.357604] device-mapper: multipath: version 1.1.1 loaded [ 3.357606] device-mapper: multipath round-robin: version 1.0.0 loaded [ 3.358631] cpuidle: using governor ladder [ 3.359099] cpuidle: using governor menu [ 3.359331] TCP cubic registered [ 3.359432] NET: Registered protocol family 10 [ 3.359825] lo: Disabled Privacy Extensions [ 3.359975] NET: Registered protocol family 17 [ 3.365235] PM: Resume from disk failed. [ 3.365245] registered taskstats version 1 [ 3.365892] Magic number: 10:365:105 [ 3.365898] usbmon usbmon1: hash matches [ 3.365962] rtc_cmos 00:03: setting system clock to 2010-09-01 02:06:17 UTC (1283306777) [ 3.365965] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 3.365966] EDD information not available. [ 3.366041] Freeing unused kernel memory: 908k freed [ 3.366227] Write protecting the kernel read-only data: 10240k [ 3.366457] Freeing unused kernel memory: 424k freed [ 3.366692] Freeing unused kernel memory: 1644k freed [ 3.380974] udev[245]: starting version 162 [ 3.405040] ahci 0000:00:1f.2: version 3.0 [ 3.405060] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 3.405116] alloc irq_desc for 71 on node -1 [ 3.405118] alloc kstat_irqs on node -1 [ 3.405129] ahci 0000:00:1f.2: irq 71 for MSI/MSI-X [ 3.405137] ahci 0000:00:1f.2: controller can't do SNTF, turning off CAP_SNTF [ 3.405166] ahci: SSS flag set, parallel bus scan disabled [ 3.405204] ahci 0000:00:1f.2: AHCI 0001.0200 32 slots 6 ports 3 Gbps 0x3f impl RAID mode [ 3.405207] ahci 0000:00:1f.2: flags: 64bit ncq stag pm led clo pio slum part ccc ems sxs [ 3.405211] ahci 0000:00:1f.2: setting latency timer to 64 [ 3.406881] pata_jmicron 0000:04:00.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 3.406907] pata_jmicron 0000:04:00.1: setting latency timer to 64 [ 3.406983] scsi0 : pata_jmicron [ 3.407103] scsi1 : pata_jmicron [ 3.407143] ata1: PATA max UDMA/100 cmd 0xae00 ctl 0xad80 bmdma 0xae80 irq 17 [ 3.407146] ata2: PATA max UDMA/100 cmd 0xaf80 ctl 0xaf00 bmdma 0xae88 irq 17 [ 3.413192] sky2: driver version 1.28 [ 3.413220] sky2 0000:03:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 3.413229] sky2 0000:03:00.0: setting latency timer to 64 [ 3.413262] sky2 0000:03:00.0: Yukon-2 UL 2 chip revision 0 [ 3.413329] alloc irq_desc for 72 on node -1 [ 3.413331] alloc kstat_irqs on node -1 [ 3.413342] sky2 0000:03:00.0: irq 72 for MSI/MSI-X [ 3.413898] sky2 0000:03:00.0: eth0: addr 00:1f:bc:02:96:88 [ 3.413915] sky2 0000:02:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 3.413923] sky2 0000:02:00.0: setting latency timer to 64 [ 3.413947] sky2 0000:02:00.0: Yukon-2 UL 2 chip revision 0 [ 3.414015] alloc irq_desc for 73 on node -1 [ 3.414016] alloc kstat_irqs on node -1 [ 3.414027] sky2 0000:02:00.0: irq 73 for MSI/MSI-X [ 3.414575] sky2 0000:02:00.0: eth1: addr 00:1f:bc:02:96:89 [ 3.502969] scsi2 : ahci [ 3.503043] scsi3 : ahci [ 3.503106] scsi4 : ahci [ 3.503172] scsi5 : ahci [ 3.503243] scsi6 : ahci [ 3.503306] scsi7 : ahci [ 3.503473] ata3: SATA max UDMA/133 abar m2048@0xf3cfc000 port 0xf3cfc100 irq 71 [ 3.503477] ata4: SATA max UDMA/133 abar m2048@0xf3cfc000 port 0xf3cfc180 irq 71 [ 3.503479] ata5: SATA max UDMA/133 abar m2048@0xf3cfc000 port 0xf3cfc200 irq 71 [ 3.503482] ata6: SATA max UDMA/133 abar m2048@0xf3cfc000 port 0xf3cfc280 irq 71 [ 3.503485] ata7: SATA max UDMA/133 abar m2048@0xf3cfc000 port 0xf3cfc300 irq 71 [ 3.503488] ata8: SATA max UDMA/133 abar m2048@0xf3cfc000 port 0xf3cfc380 irq 71 [ 3.503530] alloc irq_desc for 28 on node -1 [ 3.503532] alloc kstat_irqs on node -1 [ 3.503538] ahci 0000:0e:00.0: PCI INT A -> GSI 28 (level, low) -> IRQ 28 [ 3.503581] alloc irq_desc for 74 on node -1 [ 3.503582] alloc kstat_irqs on node -1 [ 3.503589] ahci 0000:0e:00.0: irq 74 for MSI/MSI-X [ 3.522919] ahci 0000:0e:00.0: AHCI 0001.0200 32 slots 8 ports 6 Gbps 0xff impl SATA mode [ 3.522923] ahci 0000:0e:00.0: flags: 64bit ncq pio [ 3.522927] ahci 0000:0e:00.0: setting latency timer to 64 [ 3.523230] scsi8 : ahci [ 3.523291] scsi9 : ahci [ 3.523346] scsi10 : ahci [ 3.523399] scsi11 : ahci [ 3.523451] scsi12 : ahci [ 3.523504] scsi13 : ahci [ 3.523557] scsi14 : ahci [ 3.523608] scsi15 : ahci [ 3.523645] ata9: SATA max UDMA/133 abar m2048@0xfbeef000 port 0xfbeef100 irq 74 [ 3.523648] ata10: SATA max UDMA/133 abar m2048@0xfbeef000 port 0xfbeef180 irq 74 [ 3.523651] ata11: SATA max UDMA/133 abar m2048@0xfbeef000 port 0xfbeef200 irq 74 [ 3.523654] ata12: SATA max UDMA/133 abar m2048@0xfbeef000 port 0xfbeef280 irq 74 [ 3.523657] ata13: SATA max UDMA/133 abar m2048@0xfbeef000 port 0xfbeef300 irq 74 [ 3.523660] ata14: SATA max UDMA/133 abar m2048@0xfbeef000 port 0xfbeef380 irq 74 [ 3.523663] ata15: SATA max UDMA/133 abar m2048@0xfbeef000 port 0xfbeef400 irq 74 [ 3.523666] ata16: SATA max UDMA/133 abar m2048@0xfbeef000 port 0xfbeef480 irq 74 [ 3.523885] ahci 0000:04:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 3.542880] ahci 0000:04:00.0: AHCI 0001.0000 32 slots 2 ports 3 Gbps 0x3 impl SATA mode [ 3.542883] ahci 0000:04:00.0: flags: 64bit ncq led clo pmp pio [ 3.542889] ahci 0000:04:00.0: setting latency timer to 64 [ 3.543000] scsi16 : ahci [ 3.543059] scsi17 : ahci [ 3.543138] ata17: SATA max UDMA/133 abar m8192@0xf3fee000 port 0xf3fee100 irq 16 [ 3.543142] ata18: SATA max UDMA/133 abar m8192@0xf3fee000 port 0xf3fee180 irq 16 [ 3.852344] ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 3.855386] ata3.00: ATAPI: PIONEER BD-RW BDR-205, 1.04, max UDMA/100 [ 3.858716] ata3.00: configured for UDMA/100 [ 3.872282] ata16: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 3.872367] ata15: SATA link down (SStatus 0 SControl 300) [ 3.872371] ata16.00: ATAPI: MARVELL VIRTUALL, 1.09, max UDMA/66 [ 3.872389] ata13: SATA link down (SStatus 0 SControl 300) [ 3.872406] ata12: SATA link down (SStatus 0 SControl 300) [ 3.872409] ata11: SATA link down (SStatus 0 SControl 300) [ 3.872428] ata10: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 3.872431] ata14: SATA link down (SStatus 0 SControl 300) [ 3.872536] ata16.00: configured for UDMA/66 [ 3.878209] scsi 2:0:0:0: CD-ROM PIONEER BD-RW BDR-205 1.04 PQ: 0 ANSI: 5 [ 3.892317] ata9: SATA link down (SStatus 0 SControl 300) [ 3.892325] ata18: SATA link down (SStatus 0 SControl 300) [ 3.892334] ata17: SATA link down (SStatus 0 SControl 300) [ 3.918054] sr0: scsi3-mmc drive: 125x/125x writer dvd-ram cd/rw xa/form2 cdda tray [ 3.918057] Uniform CD-ROM driver Revision: 3.20 [ 3.918149] sr 2:0:0:0: Attached scsi CD-ROM sr0 [ 3.918206] sr 2:0:0:0: Attached scsi generic sg0 type 5 [ 3.931765] ata10.00: ATA-8: Corsair CSSD-F240GB2, 1.0, max UDMA/133 [ 3.931768] ata10.00: 468862128 sectors, multi 1: LBA48 NCQ (depth 31/32), AA [ 3.981659] ata10.00: configured for UDMA/133 [ 4.030311] usb 1-6: new high speed USB device using ehci_hcd and address 6 [ 4.279842] ata4: SATA link down (SStatus 0 SControl 300) [ 4.449340] usb 3-2: new full speed USB device using uhci_hcd and address 2 [ 4.624088] usbcore: registered new interface driver hiddev [ 4.626438] input: Thrustmaster Thrustmaster HOTAS Cougar as /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/input/input2 [ 4.626527] generic-usb 0003:044F:0400.0001: input,hidraw0: USB HID v1.10 Joystick [Thrustmaster Thrustmaster HOTAS Cougar] on usb-0000:00:1a.0-2/input0 [ 4.629452] input: Thrustmaster Thrustmaster HOTAS Cougar as /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input3 [ 4.629529] generic-usb 0003:044F:0400.0002: input,hidraw1: USB HID v1.00 Keyboard [Thrustmaster Thrustmaster HOTAS Cougar] on usb-0000:00:1a.0-2/input1 [ 4.632447] input: Thrustmaster Thrustmaster HOTAS Cougar as /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.2/input/input4 [ 4.632553] generic-usb 0003:044F:0400.0003: input,hidraw2: USB HID v1.00 Mouse [Thrustmaster Thrustmaster HOTAS Cougar] on usb-0000:00:1a.0-2/input2 [ 4.632572] usbcore: registered new interface driver usbhid [ 4.632574] usbhid: USB HID core driver [ 4.898497] usb 4-1: new full speed USB device using uhci_hcd and address 2 [ 5.049874] ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 5.050978] ata5.00: ATA-8: ST3500418AS, CC38, max UDMA/133 [ 5.050982] ata5.00: 976773168 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 5.052324] ata5.00: configured for UDMA/133 [ 5.068327] scsi 4:0:0:0: Direct-Access ATA ST3500418AS CC38 PQ: 0 ANSI: 5 [ 5.068472] sd 4:0:0:0: Attached scsi generic sg1 type 0 [ 5.068480] sd 4:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/465 GiB) [ 5.068536] sd 4:0:0:0: [sda] Write Protect is off [ 5.068539] sd 4:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 5.068566] sd 4:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 5.068741] sda: sda1 sda2 sda3 [ 5.107886] input: Logitech USB Gaming Mouse as /devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/input/input5 [ 5.107963] generic-usb 0003:046D:C041.0004: input,hidraw3: USB HID v1.11 Mouse [Logitech USB Gaming Mouse] on usb-0000:00:1a.1-1/input0 [ 5.117026] generic-usb 0003:046D:C041.0005: hiddev96,hidraw4: USB HID v1.11 Device [Logitech USB Gaming Mouse] on usb-0000:00:1a.1-1/input1 [ 5.117132] sd 4:0:0:0: [sda] Attached SCSI disk [ 5.387546] usb 4-2: new low speed USB device using uhci_hcd and address 3 [ 5.594031] input: CH PRODUCTS CH PRO PEDALS USB as /devices/pci0000:00/0000:00:1a.1/usb4/4-2/4-2:1.0/input/input6 [ 5.594101] generic-usb 0003:068E:00F2.0006: input,hidraw5: USB HID v1.00 Joystick [CH PRODUCTS CH PRO PEDALS USB ] on usb-0000:00:1a.1-2/input0 [ 5.818660] ata6: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 5.821582] ata6.00: ATA-8: WDC WD20EADS-00R6B0, 01.00A01, max UDMA/133 [ 5.821586] ata6.00: 3907029168 sectors, multi 0: LBA48 NCQ (depth 31/32), AA [ 5.825469] ata6.00: configured for UDMA/133 [ 5.836891] scsi 5:0:0:0: Direct-Access ATA WDC WD20EADS-00R 01.0 PQ: 0 ANSI: 5 [ 5.837044] sd 5:0:0:0: [sdb] 3907029168 512-byte logical blocks: (2.00 TB/1.81 TiB) [ 5.837078] sd 5:0:0:0: Attached scsi generic sg2 type 0 [ 5.837121] sd 5:0:0:0: [sdb] Write Protect is off [ 5.837124] sd 5:0:0:0: [sdb] Mode Sense: 00 3a 00 00 [ 5.837145] sd 5:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 5.837356] sdb: [ 5.876653] usb 5-1: new low speed USB device using uhci_hcd and address 2 [ 6.075442] input: CHESEN USB Keyboard as /devices/pci0000:00/0000:00:1a.2/usb5/5-1/5-1:1.0/input/input7 [ 6.075500] generic-usb 0003:0A81:0101.0007: input,hidraw6: USB HID v1.10 Keyboard [CHESEN USB Keyboard] on usb-0000:00:1a.2-1/input0 [ 6.105289] input: CHESEN USB Keyboard as /devices/pci0000:00/0000:00:1a.2/usb5/5-1/5-1:1.1/input/input8 [ 6.105361] generic-usb 0003:0A81:0101.0008: input,hidraw7: USB HID v1.10 Device [CHESEN USB Keyboard] on usb-0000:00:1a.2-1/input1 [ 6.239443] unknown partition table [ 6.240371] sd 5:0:0:0: [sdb] Attached SCSI disk [ 6.587140] ata7: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 6.593908] ata7.00: ATA-8: WDC WD20EARS-00J2GB0, 80.00A80, max UDMA/133 [ 6.593912] ata7.00: 3907029168 sectors, multi 0: LBA48 NCQ (depth 31/32), AA [ 6.599859] ata7.00: configured for UDMA/133 [ 6.625515] scsi 6:0:0:0: Direct-Access ATA WDC WD20EARS-00J 80.0 PQ: 0 ANSI: 5 [ 6.625626] sd 6:0:0:0: [sdc] 3907029168 512-byte logical blocks: (2.00 TB/1.81 TiB) [ 6.625632] sd 6:0:0:0: Attached scsi generic sg3 type 0 [ 6.625690] sd 6:0:0:0: [sdc] Write Protect is off [ 6.625692] sd 6:0:0:0: [sdc] Mode Sense: 00 3a 00 00 [ 6.625727] sd 6:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 6.626225] sdc: [ 6.657869] xor: automatically using best checksumming function: generic_sse [ 6.660605] unknown partition table [ 6.661244] sd 6:0:0:0: [sdc] Attached SCSI disk [ 6.707764] generic_sse: 10585.200 MB/sec [ 6.707766] xor: using function: generic_sse (10585.200 MB/sec) [ 7.023222] device-mapper: dm-raid45: initialized v0.2594b [ 7.404001] ata8: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 7.407553] ata8.00: ATA-8: WDC WD20EARS-00J2GB0, 80.00A80, max UDMA/133 [ 7.407557] ata8.00: 3907029168 sectors, multi 0: LBA48 NCQ (depth 31/32), AA [ 7.411080] ata8.00: configured for UDMA/133 [ 7.423789] scsi 7:0:0:0: Direct-Access ATA WDC WD20EARS-00J 80.0 PQ: 0 ANSI: 5 [ 7.423888] sd 7:0:0:0: [sdd] 3907029168 512-byte logical blocks: (2.00 TB/1.81 TiB) [ 7.423915] sd 7:0:0:0: Attached scsi generic sg4 type 0 [ 7.423945] sd 7:0:0:0: [sdd] Write Protect is off [ 7.423948] sd 7:0:0:0: [sdd] Mode Sense: 00 3a 00 00 [ 7.423969] sd 7:0:0:0: [sdd] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 7.424145] sdd: [ 7.424158] scsi 9:0:0:0: Direct-Access ATA Corsair CSSD-F24 1.0 PQ: 0 ANSI: 5 [ 7.424296] sd 9:0:0:0: [sde] 468862128 512-byte logical blocks: (240 GB/223 GiB) [ 7.424301] sd 9:0:0:0: Attached scsi generic sg5 type 0 [ 7.424356] sd 9:0:0:0: [sde] Write Protect is off [ 7.424359] sd 9:0:0:0: [sde] Mode Sense: 00 3a 00 00 [ 7.424385] sd 9:0:0:0: [sde] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 7.424563] sde: [ 7.424750] scsi 15:0:0:0: Processor Marvell 91xx Config 1.01 PQ: 0 ANSI: 5 [ 7.424827] scsi 15:0:0:0: Attached scsi generic sg6 type 3 [ 7.425874] sde1 sde2 [ 7.426711] sd 9:0:0:0: [sde] Attached SCSI disk [ 7.855389] unknown partition table [ 7.856323] sd 7:0:0:0: [sdd] Attached SCSI disk [ 8.432349] ------------[ cut here ]------------ [ 8.432408] kernel BUG at /build/buildd/linux-2.6.35/drivers/md/dm.c:2190! [ 8.432472] invalid opcode: 0000 [#1] SMP [ 8.432604] last sysfs file: /sys/devices/virtual/bdi/252:0/uevent [ 8.432661] CPU 2 [ 8.432705] Modules linked in: dm_raid45 xor usbhid hid sky2 pata_jmicron ahci libahci [ 8.433154] [ 8.433199] Pid: 581, comm: dmraid Tainted: G M 2.6.35-19-generic #28-Ubuntu EVGA Classified SR-2/To Be Filled By O.E.M. [ 8.433272] RIP: 0010:[] [] dm_put+0x112/0x120 [ 8.433375] RSP: 0018:ffff880236e79be8 EFLAGS: 00010202 [ 8.433429] RAX: ffff880236f08000 RBX: ffff8802374c5800 RCX: 02000000000040c1 [ 8.433489] RDX: 000000000000001a RSI: ffffea0007c18a00 RDI: ffff8802374c5800 [ 8.433549] RBP: ffff880236e79c08 R08: 0000000000000067 R09: 0000000000000000 [ 8.433609] R10: ffff8802383a3200 R11: 0000000000000000 R12: ffff880237e09000 [ 8.433668] R13: ffff8802374c5800 R14: ffffc9001280e040 R15: 0000000000000020 [ 8.433729] FS: 00007f258130c7a0(0000) GS:ffff880001e40000(0000) knlGS:0000000000000000 [ 8.433791] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 8.433871] CR2: 00007ff6c84d3000 CR3: 0000000237e8b000 CR4: 00000000000006e0 [ 8.433955] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 8.434039] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 8.434126] Process dmraid (pid: 581, threadinfo ffff880236e78000, task ffff880236d58000) [ 8.434234] Stack: [ 8.434302] ffffc9001280e040 0000000000000003 ffff880237e09000 ffff8802374c5800 [ 8.434507] <0> ffff880236e79d38 ffffffffa008edd6 ffff880237d2c600 00000001000000d2 [ 8.434814] <0> 0000000000000000 ffff880236e79ca0 00000000ffffffff 0000000000000001 [ 8.435187] Call Trace: [ 8.435261] [] raid_ctr+0x5f6/0xa50 [dm_raid45] [ 8.435343] [] ? dm_split_args+0x75/0x140 [ 8.435425] [] dm_table_add_target+0xff/0x240 [ 8.435427] [] populate_table+0x85/0x140 [ 8.435430] [] table_load+0x8f/0x1f0 [ 8.435432] [] ? table_load+0x0/0x1f0 [ 8.435434] [] ctl_ioctl+0x1a5/0x250 [ 8.435436] [] dm_ctl_ioctl+0x13/0x20 [ 8.435439] [] vfs_ioctl+0x3d/0xd0 [ 8.435440] [] do_vfs_ioctl+0x81/0x340 [ 8.435442] [] sys_ioctl+0x81/0xa0 [ 8.435446] [] ? do_device_not_available+0xe/0x10 [ 8.435450] [] system_call_fastpath+0x16/0x1b [ 8.435451] Code: 00 00 48 89 df e8 2f e3 ff ff e9 44 ff ff ff eb 08 90 90 90 90 90 90 90 90 4c 89 e7 e8 98 15 00 00 4c 89 e7 e8 b0 15 00 00 eb 85 <0f> 0b eb fe eb 08 90 90 90 90 90 90 90 90 55 48 89 e5 0f 1f 44 [ 8.435464] RIP [] dm_put+0x112/0x120 [ 8.435466] RSP [ 8.435468] ---[ end trace 9ae611b8c863f8b1 ]--- [ 13.687167] EXT4-fs (sda1): INFO: recovery required on readonly filesystem [ 13.687170] EXT4-fs (sda1): write access will be enabled during recovery [ 16.016799] EXT4-fs (sda1): recovery complete [ 16.018359] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 17.765660] udev[727]: starting version 162 [ 17.915056] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro [ 18.273993] type=1400 audit(1283270792.417:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient3" pid=892 comm="apparmor_parser" [ 18.274388] type=1400 audit(1283270792.427:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=892 comm="apparmor_parser" [ 18.274598] type=1400 audit(1283270792.427:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=892 comm="apparmor_parser" [ 18.394753] EDAC MC: Ver: 2.1.0 Aug 29 2010 [ 18.398285] PCI: Discovered peer bus ff [ 18.400198] PCI: Discovered peer bus fe [ 18.402396] EDAC MC0: Giving out device to 'i7core_edac.c' 'i7 core #0': DEV 0000:ff:03.0 [ 18.402415] EDAC PCI0: Giving out device to module 'i7core_edac' controller 'EDAC PCI controller': DEV '0000:ff:03.0' (POLLED) [ 18.402491] EDAC MC1: Giving out device to 'i7core_edac.c' 'i7 core #1': DEV 0000:fe:03.0 [ 18.402509] EDAC PCI1: Giving out device to module 'i7core_edac' controller 'EDAC PCI controller': DEV '0000:fe:03.0' (POLLED) [ 18.402512] EDAC i7core: Driver loaded. [ 18.443138] alloc irq_desc for 29 on node -1 [ 18.443140] alloc kstat_irqs on node -1 [ 18.443148] xhci_hcd 0000:0d:00.0: PCI INT A -> GSI 29 (level, low) -> IRQ 29 [ 18.443675] xhci_hcd 0000:0d:00.0: setting latency timer to 64 [ 18.443678] xhci_hcd 0000:0d:00.0: xHCI Host Controller [ 18.443737] xhci_hcd 0000:0d:00.0: new USB bus registered, assigned bus number 9 [ 18.443867] xhci_hcd 0000:0d:00.0: irq 29, io mem 0xfbdfe000 [ 18.447214] usb usb9: No SuperSpeed endpoint companion for config 1 interface 0 altsetting 0 ep 129: using minimum values [ 18.447282] xHCI xhci_add_endpoint called for root hub [ 18.447283] xHCI xhci_check_bandwidth called for root hub [ 18.447315] hub 9-0:1.0: USB hub found [ 18.447320] hub 9-0:1.0: 4 ports detected [ 18.474505] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 [ 18.574332] lp: driver loaded but no devices found [ 18.937735] [drm] Initialized drm 1.1.0 20060810 [ 19.129305] alloc irq_desc for 24 on node -1 [ 19.129307] alloc kstat_irqs on node -1 [ 19.129316] nouveau 0000:0c:00.0: PCI INT A -> GSI 24 (level, low) -> IRQ 24 [ 19.129320] nouveau 0000:0c:00.0: setting latency timer to 64 [ 19.132605] [drm] nouveau 0000:0c:00.0: Unsupported chipset 0x0c0000a3 [ 19.132753] nouveau 0000:0c:00.0: PCI INT A disabled [ 19.132757] nouveau: probe of 0000:0c:00.0 failed with error -22 [ 19.132770] nouveau 0000:0b:00.0: enabling device (0000 -> 0003) [ 19.132774] alloc irq_desc for 35 on node -1 [ 19.132775] alloc kstat_irqs on node -1 [ 19.132781] nouveau 0000:0b:00.0: PCI INT A -> GSI 35 (level, low) -> IRQ 35 [ 19.132786] nouveau 0000:0b:00.0: setting latency timer to 64 [ 19.136094] [drm] nouveau 0000:0b:00.0: Unsupported chipset 0x0c0000a3 [ 19.136200] nouveau 0000:0b:00.0: PCI INT A disabled [ 19.136204] nouveau: probe of 0000:0b:00.0 failed with error -22 [ 19.136221] nouveau 0000:08:00.0: enabling device (0000 -> 0003) [ 19.136226] alloc irq_desc for 30 on node -1 [ 19.136227] alloc kstat_irqs on node -1 [ 19.136232] nouveau 0000:08:00.0: PCI INT A -> GSI 30 (level, low) -> IRQ 30 [ 19.136237] nouveau 0000:08:00.0: setting latency timer to 64 [ 19.139173] [drm] nouveau 0000:08:00.0: Unsupported chipset 0x0c0000a3 [ 19.139277] nouveau 0000:08:00.0: PCI INT A disabled [ 19.139282] nouveau: probe of 0000:08:00.0 failed with error -22 [ 19.257277] ip_tables: (C) 2000-2006 Netfilter Core Team [ 19.418122] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null) [ 19.487497] nf_conntrack version 0.5.0 (16384 buckets, 65536 max) [ 19.487669] CONFIG_NF_CT_ACCT is deprecated and will be removed soon. Please use [ 19.487671] nf_conntrack.acct=1 kernel parameter, acct=1 nf_conntrack module option or [ 19.487672] sysctl net.netfilter.nf_conntrack_acct=1 to enable it. [ 19.671112] alloc irq_desc for 39 on node -1 [ 19.671114] alloc kstat_irqs on node -1 [ 19.671121] SB-XFi 0000:07:00.0: PCI INT A -> GSI 39 (level, low) -> IRQ 39 [ 19.672018] SB-XFi 0000:07:00.0: setting latency timer to 64 [ 20.134537] alloc irq_desc for 34 on node -1 [ 20.134540] alloc kstat_irqs on node -1 [ 20.134547] HDA Intel 0000:0c:00.1: PCI INT B -> GSI 34 (level, low) -> IRQ 34 [ 20.134549] hda_intel: Disable MSI for Nvidia chipset [ 20.134982] HDA Intel 0000:0c:00.1: setting latency timer to 64 [ 20.347696] ip6_tables: (C) 2000-2006 Netfilter Core Team [ 20.999521] ------------[ cut here ]------------ [ 20.999532] WARNING: at /build/buildd/linux-2.6.35/lib/kobject.c:595 kobject_put+0x50/0x60() [ 20.999535] Hardware name: To Be Filled By O.E.M. [ 20.999537] kobject: '(null)' (ffff8802374c5998): is not initialized, yet kobject_put() is being called. [ 20.999539] Modules linked in: ip6table_filter ip6_tables nf_nat_irc nf_conntrack_irc snd_hda_intel(+) nf_nat_ftp nf_nat snd_hda_codec snd_ctxfi nf_conntrack_ipv4 nf_defrag_ipv4 nf_conntrack_ftp nf_conntrack snd_hwdep snd_pcm snd_seq_midi snd_rawmidi iptable_filter snd_seq_midi_event ip_tables snd_seq snd_timer nouveau snd_seq_device ttm drm_kms_helper snd drm x_tables soundcore i2c_algo_bit snd_page_alloc joydev shpchp lp xhci_hcd psmouse i7core_edac serio_raw edac_core parport dm_raid45 xor usbhid hid sky2 pata_jmicron ahci libahci [ 20.999579] Pid: 1302, comm: dmraid Tainted: G M D 2.6.35-19-generic #28-Ubuntu [ 20.999581] Call Trace: [ 20.999590] [] warn_slowpath_common+0x7f/0xc0 [ 20.999594] [] warn_slowpath_fmt+0x46/0x50 [ 20.999598] [] kobject_put+0x50/0x60 [ 20.999605] [] dm_sysfs_exit+0x16/0x20 [ 20.999608] [] dm_put+0x9f/0x120 [ 20.999612] [] table_status+0x54/0xa0 [ 20.999616] [] ? table_status+0x0/0xa0 [ 20.999620] [] ctl_ioctl+0x1a5/0x250 [ 20.999626] [] ? do_anonymous_page+0x11b/0x330 [ 20.999629] [] dm_ctl_ioctl+0x13/0x20 [ 20.999635] [] vfs_ioctl+0x3d/0xd0 [ 20.999638] [] do_vfs_ioctl+0x81/0x340 [ 20.999644] [] ? do_page_fault+0x15e/0x350 [ 20.999647] [] sys_ioctl+0x81/0xa0 [ 20.999654] [] system_call_fastpath+0x16/0x1b [ 20.999657] ---[ end trace 9ae611b8c863f8b2 ]--- [ 20.999664] BUG: unable to handle kernel NULL pointer dereference at 0000000000000008 [ 20.999706] IP: [] bdput+0x9/0x20 [ 20.999737] PGD 2220c7067 PUD 2220c6067 PMD 0 [ 20.999772] Oops: 0000 [#2] SMP [ 20.999798] last sysfs file: /sys/devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sda/sda3/alignment_offset [ 20.999837] CPU 4 [ 20.999848] Modules linked in: ip6table_filter ip6_tables nf_nat_irc nf_conntrack_irc snd_hda_intel(+) nf_nat_ftp nf_nat snd_hda_codec snd_ctxfi nf_conntrack_ipv4 nf_defrag_ipv4 nf_conntrack_ftp nf_conntrack snd_hwdep snd_pcm snd_seq_midi snd_rawmidi iptable_filter snd_seq_midi_event ip_tables snd_seq snd_timer nouveau snd_seq_device ttm drm_kms_helper snd drm x_tables soundcore i2c_algo_bit snd_page_alloc joydev shpchp lp xhci_hcd psmouse i7core_edac serio_raw edac_core parport dm_raid45 xor usbhid hid sky2 pata_jmicron ahci libahci [ 21.000346] [ 21.000379] Pid: 1302, comm: dmraid Tainted: G M D W 2.6.35-19-generic #28-Ubuntu EVGA Classified SR-2/To Be Filled By O.E.M. [ 21.000465] RIP: 0010:[] [] bdput+0x9/0x20 [ 21.000543] RSP: 0018:ffff8803b5031d98 EFLAGS: 00010296 [ 21.000587] RAX: ffff8802374c5860 RBX: ffff8802374c5800 RCX: 000000000003ffff [ 21.000637] RDX: 0000000000000000 RSI: ffffffff812b8280 RDI: 0000000000000000 [ 21.000686] RBP: ffff8803b5031d98 R08: 0000000000015629 R09: 0000000000000000 [ 21.000735] R10: 0000000000000000 R11: 0000000000000002 R12: 00000000ffffffff [ 21.000785] R13: ffffc90013bd4000 R14: 0000000000004000 R15: 0000000000000000 [ 21.000834] FS: 00007f686410e7a0(0000) GS:ffff880245600000(0000) knlGS:0000000000000000 [ 21.000909] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 21.000954] CR2: 0000000000000008 CR3: 0000000236c87000 CR4: 00000000000006e0 [ 21.001004] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 21.001053] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 21.001103] Process dmraid (pid: 1302, threadinfo ffff8803b5030000, task ffff8803b44744a0) [ 21.001177] Stack: [ 21.001211] ffff8803b5031db8 ffffffff81453ddb ffff8802374c5800 0000000000000000 [ 21.001276] <0> ffff8803b5031de8 ffffffff81455a81 0000000000000000 ffff8802374c5800 [ 21.001374] <0> 0000000000000000 ffffc90013bd4000 ffff8803b5031e28 ffffffff8145a864 [ 21.001499] Call Trace: [ 21.001536] [] free_dev+0x2b/0xe0 [ 21.001580] [] dm_put+0xf1/0x120 [ 21.001623] [] table_status+0x54/0xa0 [ 21.001668] [] ? table_status+0x0/0xa0 [ 21.001713] [] ctl_ioctl+0x1a5/0x250 [ 21.001758] [] ? do_anonymous_page+0x11b/0x330 [ 21.001805] [] dm_ctl_ioctl+0x13/0x20 [ 21.001850] [] vfs_ioctl+0x3d/0xd0 [ 21.001894] [] do_vfs_ioctl+0x81/0x340 [ 21.001939] [] ? do_page_fault+0x15e/0x350 [ 21.001985] [] sys_ioctl+0x81/0xa0 [ 21.002029] [] system_call_fastpath+0x16/0x1b [ 21.002075] Code: c0 8f a2 81 e8 19 3c eb ff 66 90 48 85 db 74 09 48 8b 7b 08 e8 c9 66 fe ff 5b 41 5c c9 c3 eb 02 90 90 55 48 89 e5 0f 1f 44 00 00 <48> 8b 7f 08 e8 ae 66 fe ff c9 c3 eb 0a 90 90 90 90 90 90 90 90 [ 21.002533] RIP [] bdput+0x9/0x20 [ 21.002581] RSP [ 21.002619] CR2: 0000000000000008 [ 21.002658] ---[ end trace 9ae611b8c863f8b3 ]--- [ 21.002664] ------------[ cut here ]------------ [ 21.002666] kernel BUG at /build/buildd/linux-2.6.35/drivers/md/dm.c:2190! [ 21.002668] invalid opcode: 0000 [#3] SMP [ 21.002670] last sysfs file: /sys/devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sda/sda3/alignment_offset [ 21.002672] CPU 12 [ 21.002672] Modules linked in: ip6table_filter ip6_tables nf_nat_irc nf_conntrack_irc snd_hda_intel(+) nf_nat_ftp nf_nat snd_hda_codec snd_ctxfi nf_conntrack_ipv4 nf_defrag_ipv4 nf_conntrack_ftp nf_conntrack snd_hwdep snd_pcm snd_seq_midi snd_rawmidi iptable_filter snd_seq_midi_event ip_tables snd_seq snd_timer nouveau snd_seq_device ttm drm_kms_helper snd drm x_tables soundcore i2c_algo_bit snd_page_alloc joydev shpchp lp xhci_hcd psmouse i7core_edac serio_raw edac_core parport dm_raid45 xor usbhid hid sky2 pata_jmicron ahci libahci [ 21.002701] [ 21.002703] Pid: 1303, comm: dmraid Tainted: G M D W 2.6.35-19-generic #28-Ubuntu EVGA Classified SR-2/To Be Filled By O.E.M. [ 21.002705] RIP: 0010:[] [] dm_put+0x112/0x120 [ 21.002709] RSP: 0018:ffff8803b2217dc8 EFLAGS: 00010202 [ 21.002710] RAX: 0000000000000000 RBX: ffff8802374c5800 RCX: 00000000000000ff [ 21.002712] RDX: 0000000000000286 RSI: 0000000000000286 RDI: ffff8802374c5800 [ 21.002713] RBP: ffff8803b2217de8 R08: ffff8803b566cac0 R09: ffff8803b2217bb4 [ 21.002714] R10: 0000000000000001 R11: 0000000000000000 R12: 0000000000000000 [ 21.002716] R13: ffffc90013bda000 R14: 0000000000004000 R15: 0000000000000000 [ 21.002717] FS: 00007f583ee767a0(0000) GS:ffff880245680000(0000) knlGS:0000000000000000 [ 21.002719] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 21.002720] CR2: 00007fffe736bff8 CR3: 00000003b4492000 CR4: 00000000000006e0 [ 21.002722] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 21.002736] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 21.002738] Process dmraid (pid: 1303, threadinfo ffff8803b2216000, task ffff8803b611adc0) [ 21.002739] Stack: [ 21.002739] 0000000000000000 ffff8802374c5800 0000000000000000 ffffc90013bda000 [ 21.002741] <0> ffff8803b2217e28 ffffffff8145a864 ffff8803b2217e00 ffff8803b611adc0 [ 21.002744] <0> 0000000000ed0620 ffffffff8145a810 000000000000000c 0000000000000000 [ 21.002747] Call Trace: [ 21.002750] [] table_status+0x54/0xa0 [ 21.002753] [] ? table_status+0x0/0xa0 [ 21.002755] [] ctl_ioctl+0x1a5/0x250 [ 21.002758] [] ? do_anonymous_page+0x11b/0x330 [ 21.002760] [] dm_ctl_ioctl+0x13/0x20 [ 21.002762] [] vfs_ioctl+0x3d/0xd0 [ 21.002763] [] do_vfs_ioctl+0x81/0x340 [ 21.002766] [] ? do_page_fault+0x15e/0x350 [ 21.002782] [] sys_ioctl+0x81/0xa0 [ 21.002785] [] system_call_fastpath+0x16/0x1b [ 21.002786] Code: 00 00 48 89 df e8 2f e3 ff ff e9 44 ff ff ff eb 08 90 90 90 90 90 90 90 90 4c 89 e7 e8 98 15 00 00 4c 89 e7 e8 b0 15 00 00 eb 85 <0f> 0b eb fe eb 08 90 90 90 90 90 90 90 90 55 48 89 e5 0f 1f 44 [ 21.002801] RIP [] dm_put+0x112/0x120 [ 21.002803] RSP [ 21.002826] ---[ end trace 9ae611b8c863f8b4 ]--- [ 21.003028] ------------[ cut here ]------------ [ 21.003031] kernel BUG at /build/buildd/linux-2.6.35/drivers/md/dm.c:2190! [ 21.003032] invalid opcode: 0000 [#4] SMP [ 21.003034] last sysfs file: /sys/devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sda/sda3/alignment_offset [ 21.003037] CPU 12 [ 21.003037] Modules linked in: ip6table_filter ip6_tables nf_nat_irc nf_conntrack_irc snd_hda_intel(+) nf_nat_ftp nf_nat snd_hda_codec snd_ctxfi nf_conntrack_ipv4 nf_defrag_ipv4 nf_conntrack_ftp nf_conntrack snd_hwdep snd_pcm snd_seq_midi snd_rawmidi iptable_filter snd_seq_midi_event ip_tables snd_seq snd_timer nouveau snd_seq_device ttm drm_kms_helper snd drm x_tables soundcore i2c_algo_bit snd_page_alloc joydev shpchp lp xhci_hcd psmouse i7core_edac serio_raw edac_core parport dm_raid45 xor usbhid hid sky2 pata_jmicron ahci libahci [ 21.003069] [ 21.003072] Pid: 1301, comm: dmraid Tainted: G M D W 2.6.35-19-generic #28-Ubuntu EVGA Classified SR-2/To Be Filled By O.E.M. [ 21.003074] RIP: 0010:[] [] dm_put+0x112/0x120 [ 21.003079] RSP: 0018:ffff880222b05dc8 EFLAGS: 00010202 [ 21.003080] RAX: 0000000000000000 RBX: ffff8802374c5800 RCX: 00000000000000ff [ 21.003082] RDX: 0000000000000286 RSI: 0000000000000286 RDI: ffff8802374c5800 [ 21.003083] RBP: ffff880222b05de8 R08: ffff8803b566cae0 R09: ffff880222b05bb4 [ 21.003085] R10: 0000000000000001 R11: 0000000000000000 R12: 0000000000000000 [ 21.003086] R13: ffffc90013be0000 R14: 0000000000004000 R15: 0000000000000000 [ 21.003088] FS: 00007fbbd52417a0(0000) GS:ffff880245680000(0000) knlGS:0000000000000000 [ 21.003090] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 21.003092] CR2: 00007fffaeec7ed8 CR3: 00000003b2e62000 CR4: 00000000000006e0 [ 21.003109] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 21.003111] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 21.003114] Process dmraid (pid: 1301, threadinfo ffff880222b04000, task ffff8802382e0000) [ 21.003115] Stack: [ 21.003116] 0000000000000000 ffff8802374c5800 0000000000000000 ffffc90013be0000 [ 21.003120] <0> ffff880222b05e28 ffffffff8145a864 ffff880222b05e00 ffff8802382e0000 [ 21.003123] <0> 0000000001dfa620 ffffffff8145a810 000000000000000c 0000000000000000 [ 21.003127] Call Trace: [ 21.003130] [] table_status+0x54/0xa0 [ 21.003132] [] ? table_status+0x0/0xa0 [ 21.003150] [] ctl_ioctl+0x1a5/0x250 [ 21.003153] [] ? do_anonymous_page+0x11b/0x330 [ 21.003156] [] dm_ctl_ioctl+0x13/0x20 [ 21.003159] [] vfs_ioctl+0x3d/0xd0 [ 21.003162] [] do_vfs_ioctl+0x81/0x340 [ 21.003165] [] ? do_page_fault+0x15e/0x350 [ 21.003167] [] sys_ioctl+0x81/0xa0 [ 21.003170] [] system_call_fastpath+0x16/0x1b [ 21.003172] Code: 00 00 48 89 df e8 2f e3 ff ff e9 44 ff ff ff eb 08 90 90 90 90 90 90 90 90 4c 89 e7 e8 98 15 00 00 4c 89 e7 e8 b0 15 00 00 eb 85 <0f> 0b eb fe eb 08 90 90 90 90 90 90 90 90 55 48 89 e5 0f 1f 44 [ 21.003215] RIP [] dm_put+0x112/0x120 [ 21.003217] RSP [ 21.003221] ---[ end trace 9ae611b8c863f8b5 ]--- [ 21.906850] alloc irq_desc for 36 on node -1 [ 21.906870] alloc kstat_irqs on node -1 [ 21.906892] HDA Intel 0000:0b:00.1: PCI INT B -> GSI 36 (level, low) -> IRQ 36 [ 21.906919] hda_intel: Disable MSI for Nvidia chipset [ 21.907742] HDA Intel 0000:0b:00.1: setting latency timer to 64 [ 22.005172] nvidia: module license 'NVIDIA' taints kernel. [ 22.207363] sky2 0000:03:00.0: eth0: enabling interface [ 22.208500] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 22.211893] sky2 0000:02:00.0: eth1: enabling interface [ 22.212881] ADDRCONF(NETDEV_UP): eth1: link is not ready [ 22.319224] nvidia 0000:0c:00.0: PCI INT A -> GSI 24 (level, low) -> IRQ 24 [ 22.319284] nvidia 0000:0c:00.0: setting latency timer to 64 [ 22.319332] vgaarb: device changed decodes: PCI:0000:0c:00.0,olddecodes=io+mem,decodes=none:owns=io+mem [ 22.319409] vgaarb: transferring owner from PCI:0000:0c:00.0 to PCI:0000:08:00.0 [ 22.650811] type=1400 audit(1283270796.807:5): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient3" pid=1609 comm="apparmor_parser" [ 22.651244] type=1400 audit(1283270796.807:6): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1609 comm="apparmor_parser" [ 22.651507] type=1400 audit(1283270796.807:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=1609 comm="apparmor_parser" [ 22.656681] type=1400 audit(1283270796.817:8): apparmor="STATUS" operation="profile_load" name="/usr/share/gdm/guest-session/Xsession" pid=1608 comm="apparmor_parser" [ 22.657228] type=1400 audit(1283270796.817:9): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=1612 comm="apparmor_parser" [ 22.657845] type=1400 audit(1283270796.817:10): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=1612 comm="apparmor_parser" [ 22.663620] type=1400 audit(1283270796.817:11): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=1613 comm="apparmor_parser" Bug: 653563 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-22-generic (buildd@rothera) (gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu4) ) #33-Ubuntu SMP Sun Sep 19 20:34:50 UTC 2010 (Ubuntu 2.6.35-22.33-generic 2.6.35.4) [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) [ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e4000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 000000004ffc0000 (usable) [ 0.000000] BIOS-e820: 000000004ffc0000 - 000000004ffd0000 (ACPI data) [ 0.000000] BIOS-e820: 000000004ffd0000 - 0000000050000000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ff780000 - 0000000100000000 (reserved) [ 0.000000] Notice: NX (Execute Disable) protection cannot be enabled: non-PAE kernel! [ 0.000000] DMI 2.3 present. [ 0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it. [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] last_pfn = 0x4ffc0 max_arch_pfn = 0x100000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-EFFFF uncachable [ 0.000000] F0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0000000000 mask FFC0000000 write-back [ 0.000000] 1 base 0040000000 mask FFF0000000 write-back [ 0.000000] 2 disabled [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] Scanning 0 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009fc00 (usable) [ 0.000000] modified: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e4000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 000000004ffc0000 (usable) [ 0.000000] modified: 000000004ffc0000 - 000000004ffd0000 (ACPI data) [ 0.000000] modified: 000000004ffd0000 - 0000000050000000 (ACPI NVS) [ 0.000000] modified: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000ff780000 - 0000000100000000 (reserved) [ 0.000000] initial memory mapped : 0 - 00c00000 [ 0.000000] found SMP MP-table at [c00ff780] ff780 [ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000 [ 0.000000] 0000000000 - 0000400000 page 4k [ 0.000000] 0000400000 - 0037400000 page 2M [ 0.000000] 0037400000 - 00377fe000 page 4k [ 0.000000] kernel direct mapping tables up to 377fe000 @ 15000-1a000 [ 0.000000] RAMDISK: 4f4d0000 - 4ffb0000 [ 0.000000] Allocated new RAMDISK: 009a5000 - 01484746 [ 0.000000] Move RAMDISK from 000000004f4d0000 - 000000004ffaf745 to 009a5000 - 01484745 [ 0.000000] 391MB HIGHMEM available. [ 0.000000] 887MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 377fe000 [ 0.000000] low ram: 0 - 377fe000 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x000377fe [ 0.000000] HighMem 0x000377fe -> 0x0004ffc0 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x0004ffc0 [ 0.000000] On node 0 totalpages: 327503 [ 0.000000] free_area_init_node: node 0, pgdat c07ffd40, node_mem_map c1486200 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3951 pages, LIFO batch:0 [ 0.000000] Normal zone: 1744 pages used for memmap [ 0.000000] Normal zone: 221486 pages, LIFO batch:31 [ 0.000000] HighMem zone: 784 pages used for memmap [ 0.000000] HighMem zone: 99506 pages, LIFO batch:31 [ 0.000000] Using APIC driver default [ 0.000000] Nvidia board detected. Ignoring ACPI timer override. [ 0.000000] If you got timer trouble try acpi_use_timer_override [ 0.000000] SFI: Simple Firmware Interface v0.81 http://simplefirmware.org [ 0.000000] Intel MultiProcessor Specification v1.1 [ 0.000000] Virtual Wire compatibility mode. [ 0.000000] MPTABLE: OEM ID: TEMPLATE [ 0.000000] MPTABLE: Product ID: [ 0.000000] MPTABLE: APIC at: 0xFEE00000 [ 0.000000] Processor #0 (Bootup-CPU) [ 0.000000] I/O APIC #1 Version 17 at 0xFEC00000. [ 0.000000] IOAPIC[0]: apic_id 1, version 17, address 0xfec00000, GSI 0-23 [ 0.000000] Processors: 1 [ 0.000000] SMP: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [16000 - 167ff] [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e4000 [ 0.000000] PM: Registered nosave memory: 00000000000e4000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at 50000000 (gap: 50000000:aec00000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:1 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 14 pages/cpu @c2000000 s36416 r0 d20928 u4194304 [ 0.000000] pcpu-alloc: s36416 r0 d20928 u4194304 alloc=1*4194304 [ 0.000000] pcpu-alloc: [0] 0 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 324943 [ 0.000000] Kernel command line: BOOT_IMAGE=/casper/vmlinuz noprompt cdrom-detect/try-usb=true persistent file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash -- acpi=off debian-installer/language=hu console-setup/layoutcode?=hu [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Enabling fast FPU save and restore... done. [ 0.000000] Enabling unmasked SIMD FPU exception support... done. [ 0.000000] Initializing CPU#0 [ 0.000000] allocated 6552000 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Subtract (46 early reservations) [ 0.000000] #1 [0000001000 - 0000002000] EX TRAMPOLINE [ 0.000000] #2 [0000100000 - 00009a0adc] TEXT DATA BSS [ 0.000000] #3 [00009a1000 - 00009a4170] BRK [ 0.000000] #4 [00000ff790 - 0000100000] BIOS reserved [ 0.000000] #5 [00000ff780 - 00000ff790] MP-table mpf [ 0.000000] #6 [000009fc00 - 00000f1100] BIOS reserved [ 0.000000] #7 [00000f11f8 - 00000ff780] BIOS reserved [ 0.000000] #8 [00000f1100 - 00000f11f8] MP-table mpc [ 0.000000] #9 [0000010000 - 0000011000] TRAMPOLINE [ 0.000000] #10 [0000011000 - 0000015000] ACPI WAKEUP [ 0.000000] #11 [0000015000 - 0000016000] PGTABLE [ 0.000000] #12 [00009a5000 - 0001485000] NEW RAMDISK [ 0.000000] #13 [0001485000 - 0001486000] BOOTMEM [ 0.000000] #14 [0001486000 - 0001e86000] BOOTMEM [ 0.000000] #15 [0001e86000 - 0001e86004] BOOTMEM [ 0.000000] #16 [0001e86040 - 0001e86100] BOOTMEM [ 0.000000] #17 [0001e86100 - 0001e86154] BOOTMEM [ 0.000000] #18 [0001e86180 - 0001e89180] BOOTMEM [ 0.000000] #19 [0001e89180 - 0001e891a8] BOOTMEM [ 0.000000] #20 [0001e891c0 - 0001e8a9c0] BOOTMEM [ 0.000000] #21 [0001e8a9c0 - 0001e8a9e7] BOOTMEM [ 0.000000] #22 [0001e8aa00 - 0001e8ab18] BOOTMEM [ 0.000000] #23 [0001e8ab40 - 0001e8ab80] BOOTMEM [ 0.000000] #24 [0001e8ab80 - 0001e8abc0] BOOTMEM [ 0.000000] #25 [0001e8abc0 - 0001e8ac00] BOOTMEM [ 0.000000] #26 [0001e8ac00 - 0001e8ac40] BOOTMEM [ 0.000000] #27 [0001e8ac40 - 0001e8ac80] BOOTMEM [ 0.000000] #28 [0001e8ac80 - 0001e8acc0] BOOTMEM [ 0.000000] #29 [0001e8acc0 - 0001e8ad00] BOOTMEM [ 0.000000] #30 [0001e8ad00 - 0001e8ad40] BOOTMEM [ 0.000000] #31 [0001e8ad40 - 0001e8ad80] BOOTMEM [ 0.000000] #32 [0001e8ad80 - 0001e8ad90] BOOTMEM [ 0.000000] #33 [0001e8adc0 - 0001e8aea2] BOOTMEM [ 0.000000] #34 [0001e8aec0 - 0001e8afa2] BOOTMEM [ 0.000000] #35 [0002000000 - 000200e000] BOOTMEM [ 0.000000] #36 [0001e8cfc0 - 0001e8cfc4] BOOTMEM [ 0.000000] #37 [0001e8d000 - 0001e8d004] BOOTMEM [ 0.000000] #38 [0001e8d040 - 0001e8d044] BOOTMEM [ 0.000000] #39 [0001e8d080 - 0001e8d084] BOOTMEM [ 0.000000] #40 [0001e8d0c0 - 0001e8d170] BOOTMEM [ 0.000000] #41 [0001e8d180 - 0001e8d228] BOOTMEM [ 0.000000] #42 [0001e8d240 - 0001e91240] BOOTMEM [ 0.000000] #43 [0001e91240 - 0001f11240] BOOTMEM [ 0.000000] #44 [0001f11240 - 0001f51240] BOOTMEM [ 0.000000] #45 [000200e000 - 000264d9c0] BOOTMEM [ 0.000000] Initializing HighMem for node 0 (000377fe:0004ffc0) [ 0.000000] Memory: 1272488k/1310464k available (4928k kernel code, 37524k reserved, 2336k data, 684k init, 401160k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff16000 - 0xfffff000 ( 932 kB) [ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB) [ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) [ 0.000000] .init : 0xc0819000 - 0xc08c4000 ( 684 kB) [ 0.000000] .data : 0xc05d029e - 0xc0818668 (2336 kB) [ 0.000000] .text : 0xc0100000 - 0xc05d029e (4928 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=13, HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:2304 nr_irqs:256 [ 0.000000] spurious 8259A interrupt: IRQ7. [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1607.849 MHz processor. [ 0.004010] Calibrating delay loop (skipped), value calculated using timer frequency.. 3215.69 BogoMIPS (lpj=6431396) [ 0.004020] pid_max: default: 32768 minimum: 301 [ 0.004064] Security Framework initialized [ 0.004114] AppArmor: AppArmor initialized [ 0.004118] Yama: becoming mindful. [ 0.004225] Mount-cache hash table entries: 512 [ 0.004462] Initializing cgroup subsys ns [ 0.004470] Initializing cgroup subsys cpuacct [ 0.004478] Initializing cgroup subsys memory [ 0.004494] Initializing cgroup subsys devices [ 0.004498] Initializing cgroup subsys freezer [ 0.004503] Initializing cgroup subsys net_cls [ 0.004550] mce: CPU supports 5 MCE banks [ 0.004583] Performance Events: AMD PMU driver. [ 0.004597] ... version: 0 [ 0.004600] ... bit width: 48 [ 0.004604] ... generic registers: 4 [ 0.004607] ... value mask: 0000ffffffffffff [ 0.004611] ... max period: 00007fffffffffff [ 0.004615] ... fixed-purpose events: 0 [ 0.004618] ... event mask: 000000000000000f [ 0.006093] SMP alternatives: switching to UP code [ 0.017742] Freeing SMP alternatives: 24k freed [ 0.017799] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.017815] ftrace: allocating 21758 entries in 43 pages [ 0.020178] Enabling APIC mode: Flat. Using 1 I/O APICs [ 0.020243] ExtINT not setup in hardware but reported by MP table [ 0.020531] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=0 pin2=0 [ 0.024000] ..MP-BIOS bug: 8254 timer not connected to IO-APIC [ 0.024000] ...trying to set up timer (IRQ0) through the 8259A ... [ 0.024000] ..... (found apic 0 pin 0) ... [ 0.066688] ....... works. [ 0.066690] CPU0: AMD Sempron(tm) Processor 2800+ stepping 02 [ 0.172387] Brought up 1 CPUs [ 0.172391] Total of 1 processors activated (3215.69 BogoMIPS). [ 0.172628] devtmpfs: initialized [ 0.174399] regulator: core version 0.5 [ 0.174433] Time: 12:06:20 Date: 10/02/10 [ 0.174496] NET: Registered protocol family 16 [ 0.174683] EISA bus registered [ 0.174692] node 0 link 0: io port [1000, ffffff] [ 0.174699] TOM: 0000000050000000 aka 1280M [ 0.174705] node 0 link 0: mmio [a0000, bffff] [ 0.174710] node 0 link 0: mmio [50000000, fe0bffff] [ 0.174714] bus: [00, ff] on node 0 link 0 [ 0.174719] bus: 00 index 0 [io 0x0000-0xffff] [ 0.174722] bus: 00 index 1 [mem 0x000a0000-0x000bffff] [ 0.174725] bus: 00 index 2 [mem 0x50000000-0xffffffff] [ 0.175899] PCI: PCI BIOS revision 2.10 entry at 0xf0031, last bus=2 [ 0.175902] PCI: Using configuration type 1 for base access [ 0.177227] bio: create slab at 0 [ 0.177318] ACPI: Interpreter disabled. [ 0.177401] vgaarb: loaded [ 0.177621] SCSI subsystem initialized [ 0.177667] libata version 3.00 loaded. [ 0.177729] usbcore: registered new interface driver usbfs [ 0.177746] usbcore: registered new interface driver hub [ 0.177956] usbcore: registered new device driver usb [ 0.178100] PCI: Probing PCI hardware [ 0.178104] PCI: Probing PCI hardware (bus 00) [ 0.178160] pci 0000:00:00.0: reg 10: [mem 0xf0000000-0xf7ffffff pref] [ 0.178246] pci 0000:00:01.1: reg 10: [io 0x5080-0x509f] [ 0.178256] pci 0000:00:01.1: reg 20: [io 0x5000-0x503f] [ 0.178261] pci 0000:00:01.1: reg 24: [io 0x5040-0x507f] [ 0.178274] pci 0000:00:01.1: PME# supported from D3hot D3cold [ 0.178279] pci 0000:00:01.1: PME# disabled [ 0.178302] pci 0000:00:02.0: reg 10: [mem 0xff6fd000-0xff6fdfff] [ 0.178323] pci 0000:00:02.0: supports D1 D2 [ 0.178326] pci 0000:00:02.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.178330] pci 0000:00:02.0: PME# disabled [ 0.178347] pci 0000:00:02.1: reg 10: [mem 0xff6fe000-0xff6fefff] [ 0.178368] pci 0000:00:02.1: supports D1 D2 [ 0.178371] pci 0000:00:02.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.178375] pci 0000:00:02.1: PME# disabled [ 0.178398] pci 0000:00:02.2: reg 10: [mem 0xff6ffc00-0xff6ffcff] [ 0.178422] pci 0000:00:02.2: supports D1 D2 [ 0.178425] pci 0000:00:02.2: PME# supported from D0 D1 D2 D3hot D3cold [ 0.178429] pci 0000:00:02.2: PME# disabled [ 0.178453] pci 0000:00:05.0: reg 10: [mem 0xff6fc000-0xff6fcfff] [ 0.178459] pci 0000:00:05.0: reg 14: [io 0xec00-0xec07] [ 0.178478] pci 0000:00:05.0: supports D1 D2 [ 0.178481] pci 0000:00:05.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.178484] pci 0000:00:05.0: PME# disabled [ 0.178502] pci 0000:00:06.0: reg 10: [io 0xe800-0xe8ff] [ 0.178507] pci 0000:00:06.0: reg 14: [io 0xe400-0xe47f] [ 0.178513] pci 0000:00:06.0: reg 18: [mem 0xff6fb000-0xff6fbfff] [ 0.178530] pci 0000:00:06.0: supports D1 D2 [ 0.178554] pci 0000:00:08.0: reg 20: [io 0xffa0-0xffaf] [ 0.178585] pci 0000:00:0a.0: reg 10: [io 0x09f0-0x09f7] [ 0.178590] pci 0000:00:0a.0: reg 14: [io 0x0bf0-0x0bf3] [ 0.178595] pci 0000:00:0a.0: reg 18: [io 0x0970-0x0977] [ 0.178599] pci 0000:00:0a.0: reg 1c: [io 0x0b70-0x0b73] [ 0.178604] pci 0000:00:0a.0: reg 20: [io 0xc800-0xc80f] [ 0.178609] pci 0000:00:0a.0: reg 24: [io 0xc400-0xc47f] [ 0.178752] PCI: peer root bus 00 res updated from pci conf [ 0.178791] pci 0000:01:00.0: reg 10: [mem 0xd0000000-0xdfffffff pref] [ 0.178798] pci 0000:01:00.0: reg 14: [io 0xb800-0xb8ff] [ 0.178805] pci 0000:01:00.0: reg 18: [mem 0xff5f0000-0xff5fffff] [ 0.178822] pci 0000:01:00.0: reg 30: [mem 0xff5c0000-0xff5dffff pref] [ 0.178843] pci 0000:01:00.0: supports D1 D2 [ 0.178871] pci 0000:01:00.1: reg 10: [mem 0xc0000000-0xcfffffff pref] [ 0.178878] pci 0000:01:00.1: reg 14: [mem 0xff5e0000-0xff5effff] [ 0.178911] pci 0000:01:00.1: supports D1 D2 [ 0.178953] pci 0000:00:0b.0: PCI bridge to [bus 01-01] [ 0.178958] pci 0000:00:0b.0: bridge window [io 0xb000-0xbfff] [ 0.178963] pci 0000:00:0b.0: bridge window [mem 0xff500000-0xff5fffff] [ 0.178968] pci 0000:00:0b.0: bridge window [mem 0xaeb00000-0xeeafffff pref] [ 0.179005] pci 0000:00:0e.0: PCI bridge to [bus 02-02] [ 0.179009] pci 0000:00:0e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.179013] pci 0000:00:0e.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.179018] pci 0000:00:0e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.179481] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none [ 0.179595] pci 0000:00:01.0: default IRQ router [10de:00e0] [ 0.179607] PCI: pci_cache_line_size set to 64 bytes [ 0.179655] reserve RAM buffer: 000000000009fc00 - 000000000009ffff [ 0.179659] reserve RAM buffer: 000000004ffc0000 - 000000004fffffff [ 0.179813] NetLabel: Initializing [ 0.179815] NetLabel: domain hash size = 128 [ 0.179817] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.179837] NetLabel: unlabeled traffic allowed by default [ 0.179928] Switching to clocksource tsc [ 0.191301] AppArmor: AppArmor Filesystem Enabled [ 0.191310] pnp: PnP ACPI: disabled [ 0.191317] PnPBIOS: Scanning system for PnP BIOS support... [ 0.191356] PnPBIOS: Found PnP BIOS installation structure at 0xc00f51b0 [ 0.191360] PnPBIOS: PnP BIOS version 1.0, entry 0xf0000:0x613a, dseg 0xf0000 [ 0.192484] PnPBIOS: 17 nodes reported by PnP BIOS; 17 recorded by driver [ 0.192511] system 00:00: [mem 0x00000000-0x0009fbff] could not be reserved [ 0.192515] system 00:00: [mem 0x0009fc00-0x0009ffff] could not be reserved [ 0.192520] system 00:00: [mem 0x000e4000-0x000fffff] could not be reserved [ 0.192524] system 00:00: [mem 0x00100000-0x4ffbffff] could not be reserved [ 0.192528] system 00:00: [mem 0x4ffc0000-0x4ffcffff] could not be reserved [ 0.192532] system 00:00: [mem 0x4ffd0000-0x4fffffff] could not be reserved [ 0.192537] system 00:00: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.192541] system 00:00: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.192545] system 00:00: [mem 0xff780000-0xffffffff] has been reserved [ 0.192555] system 00:0b: [io 0x04d0-0x04d1] has been reserved [ 0.192559] system 00:0b: [io 0x0cf8-0x0cff] could not be reserved [ 0.192563] system 00:0b: [io 0x0480-0x04ff] could not be reserved [ 0.194732] pci 0000:00:0b.0: PCI bridge to [bus 01-01] [ 0.194738] pci 0000:00:0b.0: bridge window [io 0xb000-0xbfff] [ 0.194745] pci 0000:00:0b.0: bridge window [mem 0xff500000-0xff5fffff] [ 0.194751] pci 0000:00:0b.0: bridge window [mem 0xaeb00000-0xeeafffff pref] [ 0.194757] pci 0000:00:0e.0: PCI bridge to [bus 02-02] [ 0.194760] pci 0000:00:0e.0: bridge window [io disabled] [ 0.194764] pci 0000:00:0e.0: bridge window [mem disabled] [ 0.194767] pci 0000:00:0e.0: bridge window [mem pref disabled] [ 0.194782] pci 0000:00:0e.0: setting latency timer to 64 [ 0.194788] pci_bus 0000:00: resource 4 [io 0x0000-0xffff] [ 0.194791] pci_bus 0000:00: resource 5 [mem 0x000a0000-0x000bffff] [ 0.194795] pci_bus 0000:00: resource 6 [mem 0x50000000-0xffffffff] [ 0.194798] pci_bus 0000:01: resource 0 [io 0xb000-0xbfff] [ 0.194801] pci_bus 0000:01: resource 1 [mem 0xff500000-0xff5fffff] [ 0.194805] pci_bus 0000:01: resource 2 [mem 0xaeb00000-0xeeafffff pref] [ 0.194881] NET: Registered protocol family 2 [ 0.194979] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.195493] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.197605] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.198662] TCP: Hash tables configured (established 131072 bind 65536) [ 0.198668] TCP reno registered [ 0.198677] UDP hash table entries: 512 (order: 2, 16384 bytes) [ 0.198710] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) [ 0.198886] NET: Registered protocol family 1 [ 0.676103] pci 0000:01:00.0: Boot video device [ 0.676111] PCI: CLS 32 bytes, default 64 [ 0.676451] cpufreq-nforce2: No nForce2 chipset. [ 0.676493] Scanning for low memory corruption every 60 seconds [ 0.676661] audit: initializing netlink socket (disabled) [ 0.676682] type=2000 audit(1286021180.676:1): initialized [ 0.690767] Trying to unpack rootfs image as initramfs... [ 3.705769] highmem bounce pool size: 64 pages [ 3.705777] HugeTLB registered 4 MB page size, pre-allocated 0 pages [ 3.707546] VFS: Disk quotas dquot_6.5.2 [ 3.707622] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 3.708480] fuse init (API version 7.14) [ 3.708597] msgmni has been set to 1701 [ 3.709034] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 3.709039] io scheduler noop registered [ 3.709042] io scheduler deadline registered [ 3.709063] io scheduler cfq registered (default) [ 3.709260] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 3.709292] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 3.709723] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 3.709833] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 3.710265] 00:10: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 3.711683] brd: module loaded [ 3.712476] loop: module loaded [ 3.713002] pata_acpi 0000:00:08.0: setting latency timer to 64 [ 3.713032] pata_acpi 0000:00:0a.0: can't find IRQ for PCI INT A; probably buggy MP table [ 3.713048] pata_acpi 0000:00:0a.0: setting latency timer to 64 [ 3.713497] Fixed MDIO Bus: probed [ 3.713545] PPP generic driver version 2.4.2 [ 3.713604] tun: Universal TUN/TAP device driver, 1.6 [ 3.713607] tun: (C) 1999-2004 Max Krasnyansky [ 3.713718] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 3.713735] ehci_hcd 0000:00:02.2: can't find IRQ for PCI INT C; probably buggy MP table [ 3.713763] ehci_hcd 0000:00:02.2: setting latency timer to 64 [ 3.713767] ehci_hcd 0000:00:02.2: EHCI Host Controller [ 3.713821] ehci_hcd 0000:00:02.2: new USB bus registered, assigned bus number 1 [ 3.713862] ehci_hcd 0000:00:02.2: debug port 1 [ 3.713869] ehci_hcd 0000:00:02.2: cache line size of 32 is not supported [ 3.713894] ehci_hcd 0000:00:02.2: irq 10, io mem 0xff6ffc00 [ 3.713958] isapnp: Scanning for PnP cards... [ 3.762989] ehci_hcd 0000:00:02.2: USB 2.0 started, EHCI 1.00 [ 3.763164] hub 1-0:1.0: USB hub found [ 3.763172] hub 1-0:1.0: 8 ports detected [ 3.763263] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 3.763281] ohci_hcd 0000:00:02.0: can't find IRQ for PCI INT A; probably buggy MP table [ 3.763296] ohci_hcd 0000:00:02.0: setting latency timer to 64 [ 3.763300] ohci_hcd 0000:00:02.0: OHCI Host Controller [ 3.763342] ohci_hcd 0000:00:02.0: new USB bus registered, assigned bus number 2 [ 3.763373] ohci_hcd 0000:00:02.0: irq 3, io mem 0xff6fd000 [ 3.852554] hub 2-0:1.0: USB hub found [ 3.852560] hub 2-0:1.0: 4 ports detected [ 3.852625] ohci_hcd 0000:00:02.1: can't find IRQ for PCI INT B; probably buggy MP table [ 3.852635] ohci_hcd 0000:00:02.1: setting latency timer to 64 [ 3.852639] ohci_hcd 0000:00:02.1: OHCI Host Controller [ 3.852692] ohci_hcd 0000:00:02.1: new USB bus registered, assigned bus number 3 [ 3.852717] ohci_hcd 0000:00:02.1: irq 9, io mem 0xff6fe000 [ 3.941904] hub 3-0:1.0: USB hub found [ 3.941910] hub 3-0:1.0: 4 ports detected [ 3.941986] uhci_hcd: USB Universal Host Controller Interface driver [ 3.942136] PNP: PS/2 Controller [PNP0303,PNP0f13] at 0x60,0x64 irq 1,12 [ 3.987626] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 3.987635] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 3.987731] mice: PS/2 mouse device common for all mice [ 3.987863] rtc_cmos 00:04: rtc core: registered rtc_cmos as rtc0 [ 3.987890] rtc0: alarms up to one day, 114 bytes nvram [ 3.988048] device-mapper: uevent: version 1.0.3 [ 3.988341] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 3.988407] device-mapper: multipath: version 1.1.1 loaded [ 3.988411] device-mapper: multipath round-robin: version 1.0.0 loaded [ 3.988576] EISA: Probing bus 0 at eisa.0 [ 3.988580] EISA: Cannot allocate resource for mainboard [ 3.988583] Cannot allocate resource for EISA slot 1 [ 3.988586] Cannot allocate resource for EISA slot 2 [ 3.988589] Cannot allocate resource for EISA slot 3 [ 3.988592] Cannot allocate resource for EISA slot 4 [ 3.988595] Cannot allocate resource for EISA slot 5 [ 3.988598] Cannot allocate resource for EISA slot 6 [ 3.988601] Cannot allocate resource for EISA slot 7 [ 3.988604] Cannot allocate resource for EISA slot 8 [ 3.988606] EISA: Detected 0 cards. [ 3.988669] cpuidle: using governor ladder [ 3.988672] cpuidle: using governor menu [ 3.989045] TCP cubic registered [ 3.989210] NET: Registered protocol family 10 [ 3.989766] lo: Disabled Privacy Extensions [ 3.990122] NET: Registered protocol family 17 [ 3.990177] powernow-k8: Power state transitions not supported [ 3.990186] Using IPI No-Shortcut mode [ 3.990334] PM: Resume from disk failed. [ 3.990353] registered taskstats version 1 [ 3.990575] Magic number: 14:509:126 [ 3.990707] rtc_cmos 00:04: setting system clock to 2010-10-02 12:06:24 UTC (1286021184) [ 3.990711] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 3.990714] EDD information not available. [ 4.077872] isapnp: No Plug & Play device found [ 4.089705] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0 [ 4.144237] usb 1-4: new high speed USB device using ehci_hcd and address 2 [ 4.598116] Freeing initrd memory: 11136k freed [ 4.619116] Freeing unused kernel memory: 684k freed [ 4.620699] Write protecting the kernel text: 4932k [ 4.620745] Write protecting the kernel read-only data: 1976k [ 4.662450] udev[67]: starting version 163 [ 4.916378] forcedeth: Reverse Engineered nForce ethernet driver. Version 0.64. [ 4.916405] forcedeth 0000:00:05.0: can't find IRQ for PCI INT A; probably buggy MP table [ 4.916413] forcedeth 0000:00:05.0: setting latency timer to 64 [ 4.916490] nv_probe: set workaround bit for reversed mac addr [ 4.920670] Linux agpgart interface v0.103 [ 4.932942] Initializing USB Mass Storage driver... [ 4.938734] scsi0 : usb-storage 1-4:1.0 [ 4.939159] usbcore: registered new interface driver usb-storage [ 4.939162] USB Mass Storage support registered. [ 4.960782] [drm] Initialized drm 1.1.0 20060810 [ 5.025230] [drm] radeon defaulting to kernel modesetting. [ 5.025237] [drm] radeon kernel modesetting enabled. [ 5.025328] radeon 0000:01:00.0: can't find IRQ for PCI INT A; probably buggy MP table [ 5.030323] [drm] initializing kernel modesetting (RV350 0x1002:0x4153). [ 5.030451] [drm] register mmio base: 0xFF5F0000 [ 5.030454] [drm] register mmio size: 65536 [ 5.032359] [drm:radeon_agp_init] *ERROR* Unable to acquire AGP: -19 [ 5.032362] [drm] Forcing AGP to PCI mode [ 5.032368] [drm] Generation 2 PCI interface, using max accessible memory [ 5.032376] radeon 0000:01:00.0: VRAM: 256M 0xD0000000 - 0xDFFFFFFF (256M used) [ 5.032380] radeon 0000:01:00.0: GTT: 512M 0xB0000000 - 0xCFFFFFFF [ 5.032438] [drm] radeon: irq initialized. [ 5.032637] [drm] Detected VRAM RAM=256M, BAR=256M [ 5.032644] [drm] RAM width 128bits DDR [ 5.032787] [TTM] Zone kernel: Available graphics memory: 441586 kiB. [ 5.032790] [TTM] Zone highmem: Available graphics memory: 642166 kiB. [ 5.032793] [TTM] Initializing pool allocator. [ 5.032826] [drm] radeon: 256M of VRAM memory ready [ 5.032828] [drm] radeon: 512M of GTT memory ready. [ 5.032869] [drm] GART: num cpu pages 131072, num gpu pages 131072 [ 5.037724] [drm] radeon: 1 quad pipes, 1 Z pipes initialized. [ 5.040505] [drm] Loading R300 Microcode [ 5.045455] [drm] radeon: ring at 0x00000000B0000000 [ 5.045488] [drm] ring test succeeded in 0 usecs [ 5.045666] [drm] radeon: ib pool ready. [ 5.045776] [drm] ib test succeeded in 0 usecs [ 5.045933] [drm] Default TV standard: PAL [ 5.045935] [drm] 27.000000000 MHz TV ref clk [ 5.045940] [drm] DFP table revision: 3 [ 5.045997] [drm] Default TV standard: PAL [ 5.045999] [drm] 27.000000000 MHz TV ref clk [ 5.046040] [drm] Radeon Display Connectors [ 5.046042] [drm] Connector 0: [ 5.046044] [drm] VGA [ 5.046047] [drm] DDC: 0x60 0x60 0x60 0x60 0x60 0x60 0x60 0x60 [ 5.046049] [drm] Encoders: [ 5.046051] [drm] CRT1: INTERNAL_DAC1 [ 5.046054] [drm] Connector 1: [ 5.046055] [drm] DVI-I [ 5.046057] [drm] HPD1 [ 5.046060] [drm] DDC: 0x64 0x64 0x64 0x64 0x64 0x64 0x64 0x64 [ 5.046062] [drm] Encoders: [ 5.046064] [drm] CRT2: INTERNAL_DAC2 [ 5.046066] [drm] DFP1: INTERNAL_TMDS1 [ 5.046068] [drm] Connector 2: [ 5.046070] [drm] S-video [ 5.046072] [drm] Encoders: [ 5.046074] [drm] TV1: INTERNAL_DAC2 [ 5.198598] [drm] fb mappable at 0xD0040000 [ 5.198604] [drm] vram apper at 0xD0000000 [ 5.198606] [drm] size 3145728 [ 5.198608] [drm] fb depth is 24 [ 5.198610] [drm] pitch is 4096 [ 5.264522] Console: switching to colour frame buffer device 128x48 [ 5.278337] fb0: radeondrmfb frame buffer device [ 5.278339] drm: registered panic notifier [ 5.278345] Slow work thread pool: Starting up [ 5.278435] Slow work thread pool: Ready [ 5.278445] [drm] Initialized radeon 2.5.0 20080528 for 0000:01:00.0 on minor 0 [ 5.437079] forcedeth 0000:00:05.0: ifname eth0, PHY OUI 0x90c3 @ 1, addr 00:17:31:8e:11:eb [ 5.437086] forcedeth 0000:00:05.0: csum timirq lnktim desc-v2 [ 5.437290] pata_amd 0000:00:08.0: version 0.4.1 [ 5.437366] pata_amd 0000:00:08.0: setting latency timer to 64 [ 5.438587] scsi1 : pata_amd [ 5.438816] scsi2 : pata_amd [ 5.438876] ata1: PATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0xffa0 irq 14 [ 5.438880] ata2: PATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0xffa8 irq 15 [ 5.439089] sata_nv 0000:00:0a.0: version 3.5 [ 5.439105] sata_nv 0000:00:0a.0: can't find IRQ for PCI INT A; probably buggy MP table [ 5.439173] sata_nv 0000:00:0a.0: setting latency timer to 64 [ 5.439627] scsi3 : sata_nv [ 5.439820] scsi4 : sata_nv [ 5.439879] ata3: SATA max UDMA/133 cmd 0x9f0 ctl 0xbf0 bmdma 0xc800 irq 10 [ 5.439884] ata4: SATA max UDMA/133 cmd 0x970 ctl 0xb70 bmdma 0xc808 irq 10 [ 5.440094] agpgart-amd64 0000:00:00.0: AGP bridge [10de/00e1] [ 5.440103] agpgart-amd64 0000:00:00.0: aperture size 4096 MB is not right, using settings from NB [ 5.440112] agpgart-amd64 0000:00:00.0: setting up Nforce3 AGP [ 5.440118] agpgart-amd64 0000:00:00.0: aperture base > 4G [ 5.440160] agpgart-amd64 0000:00:00.0: AGP bridge [10de/00e1] [ 5.440166] agpgart-amd64 0000:00:00.0: aperture size 4096 MB is not right, using settings from NB [ 5.440170] agpgart-amd64 0000:00:00.0: setting up Nforce3 AGP [ 5.440174] agpgart-amd64 0000:00:00.0: aperture base > 4G [ 5.600628] ata1.00: ATA-7: Maxtor 6E040L0, NAR61590, max UDMA/133 [ 5.600634] ata1.00: 80293248 sectors, multi 16: LBA [ 5.600663] ata1: nv_mode_filter: 0x7f39f&0x7f3ff->0x7f39f, BIOS=0x7f000 (0xc700c000) ACPI=0x0 [ 5.616638] ata1.00: configured for UDMA/133 [ 5.616829] scsi 1:0:0:0: Direct-Access ATA Maxtor 6E040L0 NAR6 PQ: 0 ANSI: 5 [ 5.617084] sd 1:0:0:0: Attached scsi generic sg0 type 0 [ 5.617572] sd 1:0:0:0: [sda] 80293248 512-byte logical blocks: (41.1 GB/38.2 GiB) [ 5.617638] sd 1:0:0:0: [sda] Write Protect is off [ 5.617642] sd 1:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 5.617671] sd 1:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 5.617872] sda: sda1 sda2 < sda5 sda6 > [ 5.679565] sd 1:0:0:0: [sda] Attached SCSI disk [ 5.752243] ata3: SATA link down (SStatus 0 SControl 300) [ 5.780549] ata2.00: ATAPI: HL-DT-STDVD-RAM GH22NP20, 2.00, max UDMA/66 [ 5.780581] ata2: nv_mode_filter: 0x1f39f&0x73ff->0x739f, BIOS=0x7000 (0xc700c000) ACPI=0x0 [ 5.796511] ata2.00: configured for UDMA/33 [ 5.798502] scsi 2:0:0:0: CD-ROM HL-DT-ST DVD-RAM GH22NP20 2.00 PQ: 0 ANSI: 5 [ 5.802301] sr0: scsi3-mmc drive: 48x/48x writer dvd-ram cd/rw xa/form2 cdda tray [ 5.802308] Uniform CD-ROM driver Revision: 3.20 [ 5.802524] sr 2:0:0:0: Attached scsi CD-ROM sr0 [ 5.802628] sr 2:0:0:0: Attached scsi generic sg1 type 5 [ 5.937180] scsi 0:0:0:0: Direct-Access JetFlash Transcend 2GB 8.07 PQ: 0 ANSI: 2 [ 5.938857] sd 0:0:0:0: Attached scsi generic sg2 type 0 [ 5.939917] sd 0:0:0:0: [sdb] 3944448 512-byte logical blocks: (2.01 GB/1.88 GiB) [ 5.940404] sd 0:0:0:0: [sdb] Write Protect is off [ 5.940410] sd 0:0:0:0: [sdb] Mode Sense: 03 00 00 00 [ 5.940414] sd 0:0:0:0: [sdb] Assuming drive cache: write through [ 5.944674] sd 0:0:0:0: [sdb] Assuming drive cache: write through [ 5.944693] sdb: sdb1 [ 6.051282] sd 0:0:0:0: [sdb] Assuming drive cache: write through [ 6.051290] sd 0:0:0:0: [sdb] Attached SCSI removable disk [ 6.112258] ata4: SATA link down (SStatus 0 SControl 300) [ 7.337374] Btrfs loaded [ 7.348059] xor: automatically using best checksumming function: pIII_sse [ 7.364286] pIII_sse : 4837.000 MB/sec [ 7.364290] xor: using function: pIII_sse (4837.000 MB/sec) [ 7.369366] device-mapper: dm-raid45: initialized v0.2594b [ 7.739753] EXT3-fs: barriers not enabled [ 7.754793] kjournald starting. Commit interval 5 seconds [ 7.754839] EXT3-fs (sda1): mounted filesystem with ordered data mode [ 7.880061] EXT3-fs: barriers not enabled [ 7.890915] kjournald starting. Commit interval 5 seconds [ 7.890949] EXT3-fs (sda5): mounted filesystem with ordered data mode [ 8.074087] aufs 2-standalone.tree-35-rcN-20100705 [ 8.105737] squashfs: version 4.0 (2009/01/31) Phillip Lougher [ 10.037160] EXT3-fs: barriers not enabled [ 10.037798] kjournald starting. Commit interval 5 seconds [ 10.037853] EXT3-fs (loop1): using internal journal [ 10.037860] EXT3-fs (loop1): mounted filesystem with ordered data mode [ 10.043045] aufs test_add:252:exe[590]: uid/gid/perm //filesystem.squashfs 0/0/0755, 1000/1000/0755 [ 23.643009] BUG: unable to handle kernel paging request at f8147540 [ 23.643019] IP: [] driver_register+0xfe/0x130 [ 23.643031] *pde = 3716d067 *pte = 00000000 [ 23.643037] Oops: 0000 [#1] SMP [ 23.643041] last sysfs file: /sys/devices/pci0000:00/0000:00:18.3/uevent [ 23.643046] Modules linked in: amd64_agp(+) squashfs aufs nls_iso8859_1 nls_cp437 vfat fat dm_raid45 xor btrfs zlib_deflate crc32c libcrc32c radeon ttm drm_kms_helper drm usb_storage forcedeth pata_amd sata_nv i2c_algo_bit agpgart [ 23.643067] [ 23.643073] Pid: 1879, comm: modprobe Not tainted 2.6.35-22-generic #33-Ubuntu 'K8N'/K8N [ 23.643077] EIP: 0060:[] EFLAGS: 00010282 CPU: 0 [ 23.643081] EIP is at driver_register+0xfe/0x130 [ 23.643085] EAX: f8147510 EBX: 00000000 ECX: f8006419 EDX: f681f780 [ 23.643088] ESI: f8006510 EDI: c036c8a0 EBP: f6899f34 ESP: f6899f18 [ 23.643092] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 23.643095] Process modprobe (pid: 1879, ti=f6898000 task=f642bf70 task.ti=f6898000) [ 23.643098] Stack: [ 23.643100] 00000001 f8006780 00000000 c07d2ae0 f80064e0 f8006780 f8006510 f6899f48 [ 23.643108] <0> c036cba5 b78ba000 f8006780 00000000 f6899f54 f800902c 00000000 f6899f5c [ 23.643115] <0> f80090a8 f6899f88 c0101132 f8006780 c07d0f60 b78ba000 f8006780 08b41228 [ 23.643123] Call Trace: [ 23.643132] [] ? __pci_register_driver+0x45/0xb0 [ 23.643139] [] ? agp_amd64_init+0x2c/0xa0 [amd64_agp] [ 23.643145] [] ? agp_amd64_mod_init+0x8/0xa [amd64_agp] [ 23.643151] [] ? do_one_initcall+0x32/0x1a0 [ 23.643156] [] ? agp_amd64_mod_init+0x0/0xa [amd64_agp] [ 23.643164] [] ? sys_init_module+0x9b/0x1e0 [ 23.643172] [] ? sys_write+0x42/0x70 [ 23.643179] [] ? syscall_call+0x7/0xb [ 23.643181] Code: 89 f0 e8 86 ea ff ff 83 c4 10 89 f8 5b 5e 5f 5d c3 8b 06 c7 04 24 2c 6a 76 c0 89 44 24 04 e8 85 59 1c 00 8b 56 04 e9 56 ff ff ff <8b> 40 30 bf f0 ff ff ff e8 d5 11 f5 ff 8b 06 c7 04 24 6c 6a 76 [ 23.643219] EIP: [] driver_register+0xfe/0x130 SS:ESP 0068:f6899f18 [ 23.643225] CR2: 00000000f8147540 [ 23.643230] ---[ end trace 68a73a3e549ff0a4 ]--- [ 29.700287] Adding 1277948k swap on /dev/sda6. Priority:-1 extents:1 across:1277948k [ 30.047414] udev[2268]: starting version 163 [ 30.696439] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 [ 30.710049] i2c i2c-2: nForce2 SMBus adapter at 0x5000 [ 30.710077] i2c i2c-3: nForce2 SMBus adapter at 0x5040 [ 31.173536] psmouse serio1: ID: 10 00 64 [ 31.766983] input: ImExPS/2 Generic Explorer Mouse as /devices/platform/i8042/serio1/input/input1 [ 32.279402] Intel ICH 0000:00:06.0: can't find IRQ for PCI INT A; probably buggy MP table [ 32.279457] Intel ICH 0000:00:06.0: setting latency timer to 64 [ 32.613305] intel8x0_measure_ac97_clock: measured 52558 usecs (2584 samples) [ 32.613312] intel8x0: clocking to 46863 Bug: 662299 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-22-generic (buildd@crested) (gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) ) #34-Ubuntu SMP Sun Oct 10 09:26:05 UTC 2010 (Ubuntu 2.6.35-22.34-generic 2.6.35.4) [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-2.6.35-22-generic root=UUID=54d9340b-4244-479b-88c9-d4d8dace8318 ro quiet splash [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009f800 (usable) [ 0.000000] BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 000000001dff0000 (usable) [ 0.000000] BIOS-e820: 000000001dff0000 - 000000001dff3000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000001dff3000 - 000000001e000000 (ACPI data) [ 0.000000] BIOS-e820: 00000000b0000000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI 2.4 present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] AGP bridge at 00:00:00 [ 0.000000] Aperture from AGP @ d0000000 old size 32 MB [ 0.000000] Aperture from AGP @ d0000000 size 128 MB (APSIZE f20) [ 0.000000] last_pfn = 0x1dff0 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-C7FFF write-protect [ 0.000000] C8000-CBFFF uncachable [ 0.000000] CC000-D3FFF write-back [ 0.000000] D4000-FFFFF uncachable [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0000000000 mask FFE0000000 write-back [ 0.000000] 1 base 001E000000 mask FFFE000000 uncachable [ 0.000000] 2 base 00D0000000 mask FFF8000000 write-combining [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820 update range: 0000000000001000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009f800 (usable) [ 0.000000] modified: 000000000009f800 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 000000001dff0000 (usable) [ 0.000000] modified: 000000001dff0000 - 000000001dff3000 (ACPI NVS) [ 0.000000] modified: 000000001dff3000 - 000000001e000000 (ACPI data) [ 0.000000] modified: 00000000b0000000 - 00000000c0000000 (reserved) [ 0.000000] modified: 00000000fec00000 - 0000000100000000 (reserved) [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] found SMP MP-table at [ffff8800000f5ab0] f5ab0 [ 0.000000] init_memory_mapping: 0000000000000000-000000001dff0000 [ 0.000000] 0000000000 - 001de00000 page 2M [ 0.000000] 001de00000 - 001dff0000 page 4k [ 0.000000] kernel direct mapping tables up to 1dff0000 @ 16000-19000 [ 0.000000] RAMDISK: 15db7000 - 16834000 [ 0.000000] ACPI: RSDP 00000000000f73a0 00014 (v00 HPQOEM) [ 0.000000] ACPI: RSDT 000000001dff3000 00038 (v01 HPQOEM SLIC-BPC 42302E31 AWRD 01010101) [ 0.000000] ACPI: FACP 000000001dff3040 00074 (v01 HPQOEM SLIC-BPC 42302E31 AWRD 01010101) [ 0.000000] ACPI: DSDT 000000001dff30c0 0654E (v01 HPQOEM AWRDACPI 00001000 MSFT 0100000C) [ 0.000000] ACPI: FACS 000000001dff0000 00040 [ 0.000000] ACPI: SSDT 000000001dff96c0 00115 (v01 PTLTD POWERNOW 00000001 LTP 00000001) [ 0.000000] ACPI: SLIC 000000001dff9800 00176 (v01 HPQOEM SLIC-BPC 42302E31 AWRD 01010101) [ 0.000000] ACPI: MCFG 000000001dff9980 0003C (v01 HPQOEM SLIC-BPC 42302E31 AWRD 01010101) [ 0.000000] ACPI: APIC 000000001dff9640 00074 (v01 HPQOEM SLIC-BPC 42302E31 AWRD 01010101) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] Scanning NUMA topology in Northbridge 24 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-000000001dff0000 [ 0.000000] Initmem setup node 0 0000000000000000-000000001dff0000 [ 0.000000] NODE_DATA [0000000001d18140 - 0000000001d1d13f] [ 0.000000] [ffffea0000000000-ffffea00007fffff] PMD -> [ffff880002600000-ffff880002dfffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal empty [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x0001dff0 [ 0.000000] On node 0 totalpages: 122751 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3927 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 1624 pages used for memmap [ 0.000000] DMA32 zone: 117144 pages, LIFO batch:31 [ 0.000000] Detected use of extended apic ids on hypertransport bus [ 0.000000] ACPI: PM-Timer IO Port: 0x1008 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] disabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] dfl dfl lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] dfl dfl lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 2, version 3, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: IOAPIC (id[0x03] address[0xfecc0000] gsi_base[24]) [ 0.000000] IOAPIC[1]: apic_id 3, version 3, address 0xfecc0000, GSI 24-47 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] SMP: Allowing 2 CPUs, 1 hotplug CPUs [ 0.000000] nr_irqs_gsi: 64 [ 0.000000] early_res array is doubled to 64 at [17000 - 177ff] [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000f0000 [ 0.000000] PM: Registered nosave memory: 00000000000f0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at 1e000000 (gap: 1e000000:92000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:2 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 30 pages/cpu @ffff880001e00000 s91520 r8192 d23168 u1048576 [ 0.000000] pcpu-alloc: s91520 r8192 d23168 u1048576 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 121071 [ 0.000000] Policy zone: DMA32 [ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-2.6.35-22-generic root=UUID=54d9340b-4244-479b-88c9-d4d8dace8318 ro quiet splash [ 0.000000] PID hash table entries: 2048 (order: 2, 16384 bytes) [ 0.000000] Checking aperture... [ 0.000000] AGP bridge at 00:00:00 [ 0.000000] Aperture from AGP @ d0000000 old size 32 MB [ 0.000000] Aperture from AGP @ d0000000 size 128 MB (APSIZE f20) [ 0.000000] Node 0: aperture @ d0000000 size 128 MB [ 0.000000] Subtract (44 early reservations) [ 0.000000] #1 [0001000000 - 0001d17114] TEXT DATA BSS [ 0.000000] #2 [0015db7000 - 0016834000] RAMDISK [ 0.000000] #3 [0001d18000 - 0001d1811c] BRK [ 0.000000] #4 [00000f5ac0 - 0000100000] BIOS reserved [ 0.000000] #5 [00000f5ab0 - 00000f5ac0] MP-table mpf [ 0.000000] #6 [000009f800 - 00000f0d00] BIOS reserved [ 0.000000] #7 [00000f1228 - 00000f5ab0] BIOS reserved [ 0.000000] #8 [00000f0d00 - 00000f1228] MP-table mpc [ 0.000000] #9 [0000010000 - 0000012000] TRAMPOLINE [ 0.000000] #10 [0000012000 - 0000016000] ACPI WAKEUP [ 0.000000] #11 [0000016000 - 0000017000] PGTABLE [ 0.000000] #12 [0001d18140 - 0001d1d140] NODE_DATA [ 0.000000] #13 [0001d1d140 - 0001d1e140] BOOTMEM [ 0.000000] #14 [0001d17140 - 0001d171a0] BOOTMEM [ 0.000000] #15 [000251f000 - 0002520000] BOOTMEM [ 0.000000] #16 [0002520000 - 0002521000] BOOTMEM [ 0.000000] #17 [0002600000 - 0002e00000] MEMMAP 0 [ 0.000000] #18 [0001d171c0 - 0001d17340] BOOTMEM [ 0.000000] #19 [0001d1e140 - 0001d21140] BOOTMEM [ 0.000000] #20 [0001d22000 - 0001d23000] BOOTMEM [ 0.000000] #21 [0001d17340 - 0001d173c6] BOOTMEM [ 0.000000] #22 [0001d17400 - 0001d175f8] BOOTMEM [ 0.000000] #23 [0001d17600 - 0001d17668] BOOTMEM [ 0.000000] #24 [0001d17680 - 0001d176e8] BOOTMEM [ 0.000000] #25 [0001d17700 - 0001d17768] BOOTMEM [ 0.000000] #26 [0001d17780 - 0001d177e8] BOOTMEM [ 0.000000] #27 [0001d17800 - 0001d17868] BOOTMEM [ 0.000000] #28 [0001d17880 - 0001d178e8] BOOTMEM [ 0.000000] #29 [0001d17900 - 0001d17968] BOOTMEM [ 0.000000] #30 [0001d17980 - 0001d179e8] BOOTMEM [ 0.000000] #31 [0001d17a00 - 0001d17a20] BOOTMEM [ 0.000000] #32 [0001d17a40 - 0001d17aa5] BOOTMEM [ 0.000000] #33 [0001d17ac0 - 0001d17b25] BOOTMEM [ 0.000000] #34 [0001e00000 - 0001e1e000] BOOTMEM [ 0.000000] #35 [0001f00000 - 0001f1e000] BOOTMEM [ 0.000000] #36 [0001d17b40 - 0001d17b48] BOOTMEM [ 0.000000] #37 [0001d17b80 - 0001d17b88] BOOTMEM [ 0.000000] #38 [0001d17bc0 - 0001d17bc8] BOOTMEM [ 0.000000] #39 [0001d17c00 - 0001d17c10] BOOTMEM [ 0.000000] #40 [0001d17c40 - 0001d17d80] BOOTMEM [ 0.000000] #41 [0001d17d80 - 0001d17de0] BOOTMEM [ 0.000000] #42 [0001d17e00 - 0001d17e60] BOOTMEM [ 0.000000] #43 [0001d23000 - 0001d27000] BOOTMEM [ 0.000000] Memory: 458328k/491456k available (5708k kernel code, 452k absent, 32676k reserved, 5382k data, 908k init) [ 0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:4352 nr_irqs:512 [ 0.000000] spurious 8259A interrupt: IRQ7. [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 5242880 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 2210.974 MHz processor. [ 0.010009] Calibrating delay loop (skipped), value calculated using timer frequency.. 4421.94 BogoMIPS (lpj=22109740) [ 0.010014] pid_max: default: 32768 minimum: 301 [ 0.010041] Security Framework initialized [ 0.010063] AppArmor: AppArmor initialized [ 0.010065] Yama: becoming mindful. [ 0.010182] Dentry cache hash table entries: 65536 (order: 7, 524288 bytes) [ 0.010543] Inode-cache hash table entries: 32768 (order: 6, 262144 bytes) [ 0.010726] Mount-cache hash table entries: 256 [ 0.010874] Initializing cgroup subsys ns [ 0.010879] Initializing cgroup subsys cpuacct [ 0.010883] Initializing cgroup subsys memory [ 0.010894] Initializing cgroup subsys devices [ 0.010897] Initializing cgroup subsys freezer [ 0.010899] Initializing cgroup subsys net_cls [ 0.010926] tseg: 0000000000 [ 0.010943] mce: CPU supports 5 MCE banks [ 0.010957] using C1E aware idle routine [ 0.010959] Performance Events: AMD PMU driver. [ 0.010964] ... version: 0 [ 0.010966] ... bit width: 48 [ 0.010967] ... generic registers: 4 [ 0.010969] ... value mask: 0000ffffffffffff [ 0.010971] ... max period: 00007fffffffffff [ 0.010973] ... fixed-purpose events: 0 [ 0.010974] ... event mask: 000000000000000f [ 0.011007] SMP alternatives: switching to UP code [ 0.024986] ACPI: Core revision 20100428 [ 0.040025] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.040036] ftrace: allocating 22680 entries in 89 pages [ 0.056405] Setting APIC routing to flat [ 0.056805] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=0 pin2=0 [ 0.156818] CPU0: AMD Sempron(tm) Processor 3800+ stepping 02 [ 0.160000] Brought up 1 CPUs [ 0.160000] Total of 1 processors activated (4421.94 BogoMIPS). [ 0.160000] devtmpfs: initialized [ 0.160000] regulator: core version 0.5 [ 0.160000] Time: 17:30:59 Date: 10/17/10 [ 0.160000] NET: Registered protocol family 16 [ 0.160000] node 0 link 0: io port [1000, fffff] [ 0.160000] TOM: 0000000020000000 aka 512M [ 0.160000] node 0 link 0: mmio [20000000, bfffffff] [ 0.160000] node 0 link 0: mmio [c0000000, d7ffffff] [ 0.160000] node 0 link 0: mmio [d8000000, d8ffffff] [ 0.160000] node 0 link 0: mmio [d9000000, ff70ffff] [ 0.160000] node 0 link 0: mmio [a0000, bffff] [ 0.160000] bus: [00, ff] on node 0 link 0 [ 0.160000] bus: 00 index 0 [io 0x0000-0xffff] [ 0.160000] bus: 00 index 1 [mem 0x20000000-0xfcffffffff] [ 0.160000] bus: 00 index 2 [mem 0x000a0000-0x000bffff] [ 0.160000] ACPI: bus type pci registered [ 0.160000] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xb0000000-0xbfffffff] (base 0xb0000000) [ 0.160000] PCI: MMCONFIG at [mem 0xb0000000-0xbfffffff] reserved in E820 [ 0.169182] PCI: Using configuration type 1 for base access [ 0.170008] bio: create slab at 0 [ 0.171727] ACPI: EC: Look up EC in DSDT [ 0.179519] ACPI: Interpreter enabled [ 0.179524] ACPI: (supports S0 S3 S4 S5) [ 0.179549] ACPI: Using IOAPIC for interrupt routing [ 0.188128] ACPI: No dock devices found. [ 0.188134] PCI: Ignoring host bridge windows from ACPI; if necessary, use "pci=use_crs" and report a bug [ 0.188590] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-7f]) [ 0.188991] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] (ignored) [ 0.188993] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] (ignored) [ 0.188996] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] (ignored) [ 0.188999] pci_root PNP0A08:00: host bridge window [mem 0x000c0000-0x000dffff] (ignored) [ 0.189001] pci_root PNP0A08:00: host bridge window [mem 0x20000000-0xda0fffff] (ignored) [ 0.189004] pci_root PNP0A08:00: host bridge window [mem 0xda200000-0xfebfffff] (ignored) [ 0.189034] pci 0000:00:00.0: reg 10: [mem 0xd0000000-0xd7ffffff pref] [ 0.189475] pci 0000:00:02.0: PME# supported from D0 D3hot D3cold [ 0.189479] pci 0000:00:02.0: PME# disabled [ 0.189552] pci 0000:00:03.0: PME# supported from D0 D3hot D3cold [ 0.189556] pci 0000:00:03.0: PME# disabled [ 0.189607] pci 0000:00:0f.0: reg 10: [io 0xc800-0xc807] [ 0.189613] pci 0000:00:0f.0: reg 14: [io 0xa000-0xa003] [ 0.189620] pci 0000:00:0f.0: reg 18: [io 0xa400-0xa407] [ 0.189626] pci 0000:00:0f.0: reg 1c: [io 0xa800-0xa803] [ 0.189632] pci 0000:00:0f.0: reg 20: [io 0xac00-0xac0f] [ 0.189638] pci 0000:00:0f.0: reg 24: [io 0xb000-0xb0ff] [ 0.189702] pci 0000:00:0f.1: reg 20: [io 0xb400-0xb40f] [ 0.189776] pci 0000:00:10.0: reg 20: [io 0xb800-0xb81f] [ 0.189800] pci 0000:00:10.0: supports D1 D2 [ 0.189802] pci 0000:00:10.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.189806] pci 0000:00:10.0: PME# disabled [ 0.189847] pci 0000:00:10.1: reg 20: [io 0xbc00-0xbc1f] [ 0.189872] pci 0000:00:10.1: supports D1 D2 [ 0.189874] pci 0000:00:10.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.189878] pci 0000:00:10.1: PME# disabled [ 0.189919] pci 0000:00:10.2: reg 20: [io 0xc000-0xc01f] [ 0.189943] pci 0000:00:10.2: supports D1 D2 [ 0.189945] pci 0000:00:10.2: PME# supported from D0 D1 D2 D3hot D3cold [ 0.189949] pci 0000:00:10.2: PME# disabled [ 0.190008] pci 0000:00:10.3: reg 20: [io 0xc400-0xc41f] [ 0.190033] pci 0000:00:10.3: supports D1 D2 [ 0.190035] pci 0000:00:10.3: PME# supported from D0 D1 D2 D3hot D3cold [ 0.190039] pci 0000:00:10.3: PME# disabled [ 0.190065] pci 0000:00:10.4: reg 10: [mem 0xda200000-0xda2000ff] [ 0.190105] pci 0000:00:10.4: supports D1 D2 [ 0.190107] pci 0000:00:10.4: PME# supported from D0 D1 D2 D3hot D3cold [ 0.190111] pci 0000:00:10.4: PME# disabled [ 0.190430] PCI: peer root bus 00 res updated from pci conf [ 0.190475] pci 0000:01:00.0: reg 10: [mem 0xc0000000-0xcfffffff pref] [ 0.190480] pci 0000:01:00.0: reg 14: [mem 0xd8000000-0xd8ffffff] [ 0.190499] pci 0000:01:00.0: reg 30: [mem 0x00000000-0x0000ffff pref] [ 0.190516] pci 0000:01:00.0: supports D1 D2 [ 0.190552] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.190556] pci 0000:00:01.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.190560] pci 0000:00:01.0: bridge window [mem 0xd8000000-0xd9ffffff] [ 0.190564] pci 0000:00:01.0: bridge window [mem 0xc0000000-0xcfffffff pref] [ 0.190602] pci 0000:00:02.0: PCI bridge to [bus 02-02] [ 0.190606] pci 0000:00:02.0: bridge window [io 0x8000-0x8fff] [ 0.190610] pci 0000:00:02.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.190616] pci 0000:00:02.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.190661] pci 0000:00:03.0: PCI bridge to [bus 03-03] [ 0.190666] pci 0000:00:03.0: bridge window [io 0x7000-0x7fff] [ 0.190670] pci 0000:00:03.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.190676] pci 0000:00:03.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.190730] pci 0000:04:04.0: reg 10: [mem 0xda000000-0xda00ffff] [ 0.190736] pci 0000:04:04.0: reg 14: [io 0x9000-0x9007] [ 0.190771] pci 0000:04:04.0: PME# supported from D3hot D3cold [ 0.190775] pci 0000:04:04.0: PME# disabled [ 0.190803] pci 0000:04:06.0: reg 10: [io 0x9400-0x94ff] [ 0.190809] pci 0000:04:06.0: reg 14: [mem 0xda010000-0xda0100ff] [ 0.190846] pci 0000:04:06.0: supports D1 D2 [ 0.190848] pci 0000:04:06.0: PME# supported from D1 D2 D3hot D3cold [ 0.190852] pci 0000:04:06.0: PME# disabled [ 0.190886] pci 0000:00:13.1: PCI bridge to [bus 04-04] (subtractive decode) [ 0.190890] pci 0000:00:13.1: bridge window [io 0x9000-0x9fff] [ 0.190894] pci 0000:00:13.1: bridge window [mem 0xda000000-0xda0fffff] [ 0.190900] pci 0000:00:13.1: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.190902] pci 0000:00:13.1: bridge window [io 0x0000-0xffff] (subtractive decode) [ 0.190905] pci 0000:00:13.1: bridge window [mem 0x20000000-0xfcffffffff] (subtractive decode) [ 0.190907] pci 0000:00:13.1: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.190931] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.191265] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PEXG._PRT] [ 0.191394] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PEX0._PRT] [ 0.191519] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P2PB._PRT] [ 0.260538] ACPI: PCI Root Bridge [PCI1] (domain 0000 [bus 80-ff]) [ 0.260786] pci_root PNP0A08:01: host bridge window [io 0x0000-0x0cf7] (ignored) [ 0.260788] pci_root PNP0A08:01: host bridge window [io 0x0d00-0xffff] (ignored) [ 0.260791] pci_root PNP0A08:01: host bridge window [mem 0x000a0000-0x000bffff] (ignored) [ 0.260794] pci_root PNP0A08:01: host bridge window [mem 0xda100000-0xda1fffff] (ignored) [ 0.260823] pci 0000:80:01.0: reg 10: [mem 0xda100000-0xda103fff 64bit] [ 0.260863] pci 0000:80:01.0: PME# supported from D0 D3hot D3cold [ 0.260867] pci 0000:80:01.0: PME# disabled [ 0.260914] ACPI: PCI Interrupt Routing Table [\_SB_.PCI1._PRT] [ 0.261589] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 6 7 10 11 12) *5 [ 0.261782] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 6 7 10 *11 12) [ 0.261978] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 6 7 10 *11 12) [ 0.262173] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 6 7 *10 11 12) [ 0.262338] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 6 7 10 11 12) *0, disabled. [ 0.262498] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 6 7 10 11 12) *0, disabled. [ 0.262656] ACPI: PCI Interrupt Link [LNK0] (IRQs 3 4 6 7 10 11 12) *0, disabled. [ 0.262836] ACPI: PCI Interrupt Link [LNK1] (IRQs *3 4 6 7 10 11 12) [ 0.262888] HEST: Table is not found! [ 0.262988] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none [ 0.262991] vgaarb: loaded [ 0.263136] SCSI subsystem initialized [ 0.263213] libata version 3.00 loaded. [ 0.263264] usbcore: registered new interface driver usbfs [ 0.263278] usbcore: registered new interface driver hub [ 0.263302] usbcore: registered new device driver usb [ 0.263429] ACPI: WMI: Mapper loaded [ 0.263432] PCI: Using ACPI for IRQ routing [ 0.263435] PCI: pci_cache_line_size set to 64 bytes [ 0.263447] pci 0000:00:00.0: address space collision: [mem 0xd0000000-0xd7ffffff pref] conflicts with GART [mem 0xd0000000-0xd7ffffff] [ 0.263502] pci 0000:80:01.0: address space collision: [mem 0xda100000-0xda103fff 64bit] conflicts with PCI Bus #00 [mem 0x20000000-0xfcffffffff] [ 0.263547] reserve RAM buffer: 000000000009f800 - 000000000009ffff [ 0.263549] reserve RAM buffer: 000000001dff0000 - 000000001fffffff [ 0.263652] NetLabel: Initializing [ 0.263654] NetLabel: domain hash size = 128 [ 0.263656] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.263669] NetLabel: unlabeled traffic allowed by default [ 0.272940] AppArmor: AppArmor Filesystem Enabled [ 0.272962] pnp: PnP ACPI init [ 0.272985] ACPI: bus type pnp registered [ 0.277485] pnp 00:0f: disabling [mem 0x000cc000-0x000d3fff] because it overlaps 0000:00:00.0 BAR 0 [mem 0x00000000-0x07ffffff pref] [ 0.277490] pnp 00:0f: disabling [mem 0x000d5000-0x000d7fff] because it overlaps 0000:00:00.0 BAR 0 [mem 0x00000000-0x07ffffff pref] [ 0.277495] pnp 00:0f: disabling [mem 0x000f0000-0x000fbfff] because it overlaps 0000:00:00.0 BAR 0 [mem 0x00000000-0x07ffffff pref] [ 0.277498] pnp 00:0f: disabling [mem 0x000fc000-0x000fffff] because it overlaps 0000:00:00.0 BAR 0 [mem 0x00000000-0x07ffffff pref] [ 0.277502] pnp 00:0f: disabling [mem 0x00000000-0x0009ffff] because it overlaps 0000:00:00.0 BAR 0 [mem 0x00000000-0x07ffffff pref] [ 0.277506] pnp 00:0f: disabling [mem 0x00100000-0x1dfeffff] because it overlaps 0000:00:00.0 BAR 0 [mem 0x00000000-0x07ffffff pref] [ 0.277575] pnp: PnP ACPI: found 16 devices [ 0.277577] ACPI: ACPI bus type pnp unregistered [ 0.277589] system 00:01: [io 0x1000-0x107f] has been reserved [ 0.277592] system 00:01: [io 0x1400-0x140f] has been reserved [ 0.277598] system 00:02: [io 0x04d0-0x04d1] has been reserved [ 0.277601] system 00:02: [io 0x0800-0x087f] has been reserved [ 0.277603] system 00:02: [io 0x0294-0x0297] has been reserved [ 0.277616] system 00:0c: [mem 0xf0000000-0xf0000fff] has been reserved [ 0.277621] system 00:0d: [mem 0xb0000000-0xbfffffff] has been reserved [ 0.277626] system 00:0f: [mem 0x1dff0000-0x1dffffff] could not be reserved [ 0.277629] system 00:0f: [mem 0xffff0000-0xffffffff] has been reserved [ 0.277632] system 00:0f: [mem 0x1e000000-0x1fffffff] could not be reserved [ 0.277635] system 00:0f: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.277638] system 00:0f: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.277641] system 00:0f: [mem 0xfff80000-0xfffeffff] has been reserved [ 0.283523] Switching to clocksource acpi_pm [ 0.283602] pci 0000:00:02.0: BAR 14: assigned [mem 0x20000000-0x201fffff] [ 0.283606] pci 0000:00:02.0: BAR 15: assigned [mem 0x20200000-0x203fffff 64bit pref] [ 0.283609] pci 0000:00:03.0: BAR 14: assigned [mem 0x20400000-0x205fffff] [ 0.283612] pci 0000:00:03.0: BAR 15: assigned [mem 0x20600000-0x207fffff 64bit pref] [ 0.283615] pci 0000:01:00.0: BAR 6: assigned [mem 0xd9000000-0xd900ffff pref] [ 0.283619] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.283621] pci 0000:00:01.0: bridge window [io disabled] [ 0.283626] pci 0000:00:01.0: bridge window [mem 0xd8000000-0xd9ffffff] [ 0.283630] pci 0000:00:01.0: bridge window [mem 0xc0000000-0xcfffffff pref] [ 0.283636] pci 0000:00:02.0: PCI bridge to [bus 02-02] [ 0.283639] pci 0000:00:02.0: bridge window [io 0x8000-0x8fff] [ 0.283644] pci 0000:00:02.0: bridge window [mem 0x20000000-0x201fffff] [ 0.283648] pci 0000:00:02.0: bridge window [mem 0x20200000-0x203fffff 64bit pref] [ 0.283654] pci 0000:00:03.0: PCI bridge to [bus 03-03] [ 0.283657] pci 0000:00:03.0: bridge window [io 0x7000-0x7fff] [ 0.283662] pci 0000:00:03.0: bridge window [mem 0x20400000-0x205fffff] [ 0.283666] pci 0000:00:03.0: bridge window [mem 0x20600000-0x207fffff 64bit pref] [ 0.283673] pci 0000:00:13.1: PCI bridge to [bus 04-04] [ 0.283676] pci 0000:00:13.1: bridge window [io 0x9000-0x9fff] [ 0.283681] pci 0000:00:13.1: bridge window [mem 0xda000000-0xda0fffff] [ 0.283685] pci 0000:00:13.1: bridge window [mem pref disabled] [ 0.283699] pci 0000:00:01.0: setting latency timer to 64 [ 0.283713] alloc irq_desc for 27 on node 0 [ 0.283715] alloc kstat_irqs on node 0 [ 0.283723] pci 0000:00:02.0: PCI INT A -> GSI 27 (level, low) -> IRQ 27 [ 0.283727] pci 0000:00:02.0: setting latency timer to 64 [ 0.283738] alloc irq_desc for 31 on node 0 [ 0.283740] alloc kstat_irqs on node 0 [ 0.283743] pci 0000:00:03.0: PCI INT A -> GSI 31 (level, low) -> IRQ 31 [ 0.283747] pci 0000:00:03.0: setting latency timer to 64 [ 0.283754] pci 0000:00:13.1: setting latency timer to 64 [ 0.283759] pci 0000:80:01.0: BAR 0: assigned [mem 0xfd00000000-0xfd00003fff 64bit] [ 0.283765] pci 0000:80:01.0: BAR 0: set to [mem 0xfd00000000-0xfd00003fff 64bit] (PCI address [0xfd00000000-0xfd00003fff] [ 0.283769] pci_bus 0000:00: resource 4 [io 0x0000-0xffff] [ 0.283771] pci_bus 0000:00: resource 5 [mem 0x20000000-0xfcffffffff] [ 0.283774] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.283776] pci_bus 0000:01: resource 1 [mem 0xd8000000-0xd9ffffff] [ 0.283779] pci_bus 0000:01: resource 2 [mem 0xc0000000-0xcfffffff pref] [ 0.283781] pci_bus 0000:02: resource 0 [io 0x8000-0x8fff] [ 0.283783] pci_bus 0000:02: resource 1 [mem 0x20000000-0x201fffff] [ 0.283786] pci_bus 0000:02: resource 2 [mem 0x20200000-0x203fffff 64bit pref] [ 0.283788] pci_bus 0000:03: resource 0 [io 0x7000-0x7fff] [ 0.283790] pci_bus 0000:03: resource 1 [mem 0x20400000-0x205fffff] [ 0.283793] pci_bus 0000:03: resource 2 [mem 0x20600000-0x207fffff 64bit pref] [ 0.283795] pci_bus 0000:04: resource 0 [io 0x9000-0x9fff] [ 0.283797] pci_bus 0000:04: resource 1 [mem 0xda000000-0xda0fffff] [ 0.283800] pci_bus 0000:04: resource 4 [io 0x0000-0xffff] [ 0.283802] pci_bus 0000:04: resource 5 [mem 0x20000000-0xfcffffffff] [ 0.283804] pci_bus 0000:04: resource 6 [mem 0x000a0000-0x000bffff] [ 0.283807] pci_bus 0000:80: resource 0 [io 0x0000-0xffff] [ 0.283809] pci_bus 0000:80: resource 1 [mem 0x00000000-0xffffffffffffffff] [ 0.283851] NET: Registered protocol family 2 [ 0.283925] IP route cache hash table entries: 4096 (order: 3, 32768 bytes) [ 0.284148] TCP established hash table entries: 16384 (order: 6, 262144 bytes) [ 0.284312] TCP bind hash table entries: 16384 (order: 6, 262144 bytes) [ 0.284465] TCP: Hash tables configured (established 16384 bind 16384) [ 0.284468] TCP reno registered [ 0.284474] UDP hash table entries: 256 (order: 1, 8192 bytes) [ 0.284484] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes) [ 0.284579] NET: Registered protocol family 1 [ 0.284592] pci 0000:00:00.0: MSI quirk detected; MSI disabled [ 0.284614] pci 0000:00:01.0: disabling DAC on VIA PCI bridge [ 0.284618] pci 0000:00:02.0: MSI quirk detected; subordinate MSI disabled [ 0.284722] pci 0000:01:00.0: Boot video device [ 0.284732] PCI: CLS 32 bytes, default 64 [ 0.284880] Trying to unpack rootfs image as initramfs... [ 0.289997] agpgart-amd64 0000:00:00.0: AGP bridge [1106/0336] [ 0.290479] agpgart-amd64 0000:00:00.0: AGP aperture is 128M @ 0xd0000000 [ 0.290663] Scanning for low memory corruption every 60 seconds [ 0.290782] audit: initializing netlink socket (disabled) [ 0.290796] type=2000 audit(1287336659.280:1): initialized [ 0.320396] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.321846] VFS: Disk quotas dquot_6.5.2 [ 0.321906] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.322535] fuse init (API version 7.14) [ 0.322622] msgmni has been set to 895 [ 0.330688] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.330692] io scheduler noop registered [ 0.330694] io scheduler deadline registered [ 0.330730] io scheduler cfq registered (default) [ 0.340084] pcieport 0000:00:02.0: setting latency timer to 64 [ 0.340271] pcieport 0000:00:03.0: setting latency timer to 64 [ 0.340406] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.340781] pciehp 0000:00:02.0:pcie04: HPC vendor_id 1106 device_id a238 ss_vid 0 ss_did 0 [ 0.340823] pciehp 0000:00:02.0:pcie04: service driver pciehp loaded [ 0.340839] pciehp 0000:00:03.0:pcie04: HPC vendor_id 1106 device_id c238 ss_vid 0 ss_did 0 [ 0.340864] pciehp 0000:00:03.0:pcie04: service driver pciehp loaded [ 0.340871] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.341045] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 0.341052] ACPI: Power Button [PWRB] [ 0.341103] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 [ 0.341106] ACPI: Power Button [PWRF] [ 0.341803] ACPI: acpi_idle registered with cpuidle [ 0.345958] ERST: Table is not found! [ 0.346105] Linux agpgart interface v0.103 [ 0.346110] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.346226] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 0.346519] 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 0.347625] brd: module loaded [ 0.348123] loop: module loaded [ 0.348453] alloc irq_desc for 21 on node 0 [ 0.348456] alloc kstat_irqs on node 0 [ 0.348465] pata_acpi 0000:00:0f.0: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 0.348512] pata_acpi 0000:00:0f.0: PCI INT B disabled [ 0.360652] Fixed MDIO Bus: probed [ 0.360689] PPP generic driver version 2.4.2 [ 0.360761] tun: Universal TUN/TAP device driver, 1.6 [ 0.360763] tun: (C) 1999-2004 Max Krasnyansky [ 0.360856] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.360929] ehci_hcd 0000:00:10.4: PCI INT C -> GSI 21 (level, low) -> IRQ 21 [ 0.360951] ehci_hcd 0000:00:10.4: EHCI Host Controller [ 0.360987] ehci_hcd 0000:00:10.4: new USB bus registered, assigned bus number 1 [ 0.361044] ehci_hcd 0000:00:10.4: irq 21, io mem 0xda200000 [ 0.380153] ehci_hcd 0000:00:10.4: USB 2.0 started, EHCI 1.00 [ 0.380325] hub 1-0:1.0: USB hub found [ 0.380330] hub 1-0:1.0: 8 ports detected [ 0.380443] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.380459] uhci_hcd: USB Universal Host Controller Interface driver [ 0.390269] alloc irq_desc for 20 on node 0 [ 0.390273] alloc kstat_irqs on node 0 [ 0.390284] uhci_hcd 0000:00:10.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20 [ 0.390296] uhci_hcd 0000:00:10.0: UHCI Host Controller [ 0.390388] uhci_hcd 0000:00:10.0: new USB bus registered, assigned bus number 2 [ 0.390430] uhci_hcd 0000:00:10.0: irq 20, io base 0x0000b800 [ 0.390573] hub 2-0:1.0: USB hub found [ 0.390578] hub 2-0:1.0: 2 ports detected [ 0.390719] alloc irq_desc for 22 on node 0 [ 0.390722] alloc kstat_irqs on node 0 [ 0.390728] uhci_hcd 0000:00:10.1: PCI INT B -> GSI 22 (level, low) -> IRQ 22 [ 0.390737] uhci_hcd 0000:00:10.1: UHCI Host Controller [ 0.390786] uhci_hcd 0000:00:10.1: new USB bus registered, assigned bus number 3 [ 0.390821] uhci_hcd 0000:00:10.1: irq 22, io base 0x0000bc00 [ 0.390950] hub 3-0:1.0: USB hub found [ 0.390954] hub 3-0:1.0: 2 ports detected [ 0.391065] uhci_hcd 0000:00:10.2: PCI INT C -> GSI 21 (level, low) -> IRQ 21 [ 0.391076] uhci_hcd 0000:00:10.2: UHCI Host Controller [ 0.391129] uhci_hcd 0000:00:10.2: new USB bus registered, assigned bus number 4 [ 0.391154] uhci_hcd 0000:00:10.2: irq 21, io base 0x0000c000 [ 0.391277] hub 4-0:1.0: USB hub found [ 0.391281] hub 4-0:1.0: 2 ports detected [ 0.391396] alloc irq_desc for 23 on node 0 [ 0.391398] alloc kstat_irqs on node 0 [ 0.391407] uhci_hcd 0000:00:10.3: PCI INT D -> GSI 23 (level, low) -> IRQ 23 [ 0.391415] uhci_hcd 0000:00:10.3: UHCI Host Controller [ 0.391461] uhci_hcd 0000:00:10.3: new USB bus registered, assigned bus number 5 [ 0.391497] uhci_hcd 0000:00:10.3: irq 23, io base 0x0000c400 [ 0.391634] hub 5-0:1.0: USB hub found [ 0.391639] hub 5-0:1.0: 2 ports detected [ 0.391778] PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 0.392186] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.392191] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.392267] mice: PS/2 mouse device common for all mice [ 0.392360] rtc_cmos 00:04: RTC can wake from S4 [ 0.392401] rtc_cmos 00:04: rtc core: registered rtc_cmos as rtc0 [ 0.392435] rtc0: alarms up to one year, y3k, 242 bytes nvram [ 0.392554] device-mapper: uevent: version 1.0.3 [ 0.396255] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 0.400827] device-mapper: multipath: version 1.1.1 loaded [ 0.400833] device-mapper: multipath round-robin: version 1.0.0 loaded [ 0.409110] cpuidle: using governor ladder [ 0.409114] cpuidle: using governor menu [ 0.409424] TCP cubic registered [ 0.409564] NET: Registered protocol family 10 [ 0.409918] lo: Disabled Privacy Extensions [ 0.410168] NET: Registered protocol family 17 [ 0.410206] powernow-k8: Found 1 AMD Sempron(tm) Processor 3800+ (1 cpu cores) (version 2.20.00) [ 0.410259] powernow-k8: 0 : fid 0xe (2200 MHz), vid 0x6 [ 0.410261] powernow-k8: 1 : fid 0xc (2000 MHz), vid 0x8 [ 0.410263] powernow-k8: 2 : fid 0xa (1800 MHz), vid 0xa [ 0.410265] powernow-k8: 3 : fid 0x2 (1000 MHz), vid 0x12 [ 0.410403] PM: Resume from disk failed. [ 0.410421] registered taskstats version 1 [ 0.410703] Magic number: 14:582:542 [ 0.410812] rtc_cmos 00:04: setting system clock to 2010-10-17 17:31:00 UTC (1287336660) [ 0.410815] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.410816] EDD information not available. [ 0.417780] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input2 [ 0.579771] Freeing initrd memory: 10740k freed [ 0.586098] Freeing unused kernel memory: 908k freed [ 0.586636] Write protecting the kernel read-only data: 10240k [ 0.586796] Freeing unused kernel memory: 416k freed [ 0.587171] Freeing unused kernel memory: 1644k freed [ 0.615298] udev[76]: starting version 163 [ 0.785192] sata_via 0000:00:0f.0: version 2.6 [ 0.785211] sata_via 0000:00:0f.0: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 0.785256] sata_via 0000:00:0f.0: routed to hard irq line 11 [ 0.822385] scsi0 : sata_via [ 0.850391] FDC 0 is a post-1991 82077 [ 0.875229] scsi1 : sata_via [ 0.876717] ata1: SATA max UDMA/133 cmd 0xc800 ctl 0xa000 bmdma 0xac00 irq 21 [ 0.876721] ata2: SATA max UDMA/133 cmd 0xa400 ctl 0xa800 bmdma 0xac08 irq 21 [ 0.902510] pata_via 0000:00:0f.1: version 0.3.4 [ 0.919847] scsi2 : pata_via [ 0.926937] scsi3 : pata_via [ 0.928552] ata3: PATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0xb400 irq 14 [ 0.928555] ata4: PATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0xb408 irq 15 [ 1.080019] ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 1.140345] ata3.00: HPA unlocked: 66055244 -> 78242976, native 78242976 [ 1.140350] ata3.00: ATA-6: SAMSUNG SV4002H, QP100-09, max UDMA/100 [ 1.140353] ata3.00: 78242976 sectors, multi 16: LBA [ 1.140381] ata3.01: ATAPI: HL-DT-STDVD-RAM GH22NP20, 1.04, max UDMA/66 [ 1.180353] ata3.00: configured for UDMA/100 [ 1.220327] ata3.01: configured for UDMA/66 [ 1.260200] ata1.00: ATA-7: WDC WD800JD-60LSA5, 10.01E03, max UDMA/100 [ 1.260203] ata1.00: 156301488 sectors, multi 16: LBA48 [ 1.280215] ata1.00: configured for UDMA/100 [ 1.280317] scsi 0:0:0:0: Direct-Access ATA WDC WD800JD-60LS 10.0 PQ: 0 ANSI: 5 [ 1.280485] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 1.280761] sd 0:0:0:0: [sda] 156301488 512-byte logical blocks: (80.0 GB/74.5 GiB) [ 1.280808] sd 0:0:0:0: [sda] Write Protect is off [ 1.280811] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.280831] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.280969] sda: sda1 sda2 < sda5 sda6 > [ 1.315484] sd 0:0:0:0: [sda] Attached SCSI disk [ 1.490021] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 1.670382] ata2.00: ATA-8: ST3250318AS, CC38, max UDMA/133 [ 1.670385] ata2.00: 488397168 sectors, multi 16: LBA48 NCQ (depth 0/32) [ 1.710390] ata2.00: configured for UDMA/133 [ 1.710471] scsi 1:0:0:0: Direct-Access ATA ST3250318AS CC38 PQ: 0 ANSI: 5 [ 1.710628] sd 1:0:0:0: Attached scsi generic sg1 type 0 [ 1.710862] sd 1:0:0:0: [sdb] 488397168 512-byte logical blocks: (250 GB/232 GiB) [ 1.710907] sd 1:0:0:0: [sdb] Write Protect is off [ 1.710910] sd 1:0:0:0: [sdb] Mode Sense: 00 3a 00 00 [ 1.710930] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.711068] sdb: [ 1.711201] scsi 2:0:0:0: Direct-Access ATA SAMSUNG SV4002H QP10 PQ: 0 ANSI: 5 [ 1.711512] sd 2:0:0:0: Attached scsi generic sg2 type 0 [ 1.712237] sd 2:0:0:0: [sdc] 78242976 512-byte logical blocks: (40.0 GB/37.3 GiB) [ 1.712283] sd 2:0:0:0: [sdc] Write Protect is off [ 1.712286] sd 2:0:0:0: [sdc] Mode Sense: 00 3a 00 00 [ 1.712306] sd 2:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.712446] sdc: sdc1 sdc2 sdc3 sdc4 < [ 1.723280] scsi 2:0:1:0: CD-ROM HL-DT-ST DVD-RAM GH22NP20 1.04 PQ: 0 ANSI: 5 [ 1.727803] sdb1 sdb2 [ 1.728457] sd 1:0:0:0: [sdb] Attached SCSI disk [ 1.734640] sdc5 sdc6 sdc7 > [ 1.786037] sr0: scsi3-mmc drive: 48x/48x writer dvd-ram cd/rw xa/form2 cdda tray [ 1.786041] Uniform CD-ROM driver Revision: 3.20 [ 1.786466] sr 2:0:1:0: Attached scsi CD-ROM sr0 [ 1.786618] sr 2:0:1:0: Attached scsi generic sg3 type 5 [ 1.786816] sd 2:0:0:0: [sdc] Attached SCSI disk [ 1.962697] 8139cp: 8139cp: 10/100 PCI Ethernet driver v1.3 (Mar 22, 2004) [ 1.966369] 8139cp 0000:04:06.0: This (id 10ec:8139 rev 10) is not an 8139C+ compatible chip, use 8139too [ 1.972087] 8139too: 8139too Fast Ethernet driver 0.9.28 [ 1.977755] alloc irq_desc for 19 on node 0 [ 1.977760] alloc kstat_irqs on node 0 [ 1.977771] 8139too 0000:04:06.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 1.978719] 8139too 0000:04:06.0: eth0: RealTek RTL8139 at 0x9400, 00:1a:4d:1c:53:54, IRQ 19 [ 3.691696] EXT4-fs (sdc2): mounted filesystem with ordered data mode. Opts: (null) [ 5.192180] Adding 996024k swap on /dev/sdc3. Priority:-1 extents:1 across:996024k [ 5.350720] udev[378]: starting version 163 [ 6.119192] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 [ 6.510416] k8temp 0000:00:18.3: Temperature readouts might be wrong - check erratum #141 [ 6.622692] lp: driver loaded but no devices found [ 6.641739] EDAC MC: Ver: 2.1.0 Oct 10 2010 [ 6.668061] EDAC amd64_edac: Ver: 3.3.0 Oct 10 2010 [ 6.668147] EDAC amd64: This node reports that Memory ECC is currently disabled, set F3x44[22] (0000:00:18.3). [ 6.668152] EDAC amd64: ECC disabled in the BIOS or no ECC capability, module will not load. [ 6.668153] Either enable ECC checking or force module loading by setting 'ecc_enable_override'. [ 6.668154] (Note that use of the override may cause unknown side effects.) [ 6.668172] amd64_edac: probe of 0000:00:18.2 failed with error -22 [ 6.767396] parport_pc 00:09: reported by Plug and Play ACPI [ 6.767428] parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE,EPP] [ 6.840847] lp0: using parport0 (interrupt-driven). [ 6.958072] ppdev: user-space parallel port driver [ 7.178032] type=1400 audit(1287336667.257:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient3" pid=643 comm="apparmor_parser" [ 7.178307] type=1400 audit(1287336667.257:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=643 comm="apparmor_parser" [ 7.178464] type=1400 audit(1287336667.257:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=643 comm="apparmor_parser" [ 7.633975] input: ImPS/2 Logitech Wheel Mouse as /devices/platform/i8042/serio1/input/input3 [ 7.673239] alloc irq_desc for 17 on node 0 [ 7.673243] alloc kstat_irqs on node 0 [ 7.673253] HDA Intel 0000:80:01.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 7.673303] HDA Intel 0000:80:01.0: setting latency timer to 64 [ 7.673315] BUG: unable to handle kernel paging request at ffffc900102b8000 [ 7.673461] IP: [] azx_create+0x36b/0x73d [snd_hda_intel] [ 7.673568] PGD 1d897067 PUD 1d898067 PMD 1693c067 PTE 800000fd00000173 [ 7.673803] Oops: 0009 [#1] SMP [ 7.673943] last sysfs file: /sys/devices/platform/i8042/serio1/input/input3/event3/uevent [ 7.674000] CPU 0 [ 7.674048] Modules linked in: snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq snd_timer snd_seq_device snd soundcore ppdev psmouse serio_raw parport_pc i2c_viapro edac_core lp snd_page_alloc parport k8temp edac_mce_amd shpchp 8139too 8139cp mii floppy pata_via sata_via [ 7.675570] [ 7.675620] Pid: 735, comm: work_for_cpu Not tainted 2.6.35-22-generic #34-Ubuntu 0A88h/HP dx2255 MT(RL028AV) [ 7.675679] RIP: 0010:[] [] azx_create+0x36b/0x73d [snd_hda_intel] [ 7.675786] RSP: 0018:ffff88001a7d7e20 EFLAGS: 00010282 [ 7.675838] RAX: ffffc900102b8000 RBX: ffff88001a7d7e80 RCX: 0000000000000000 [ 7.675894] RDX: 0000000000000000 RSI: 0000000000000286 RDI: 0000000000000286 [ 7.675949] RBP: ffff88001a7d7e70 R08: 0000000000000001 R09: 0000000000000040 [ 7.676004] R10: 0000000000000008 R11: 0000000000000003 R12: ffff88001cf02000 [ 7.676059] R13: ffff880016b0b000 R14: 0000000000000000 R15: ffff880016b0b400 [ 7.676115] FS: 00007fe9f4940700(0000) GS:ffff880001e00000(0000) knlGS:0000000000000000 [ 7.676190] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 7.676252] CR2: ffffc900102b8000 CR3: 000000001c49c000 CR4: 00000000000006f0 [ 7.676317] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 7.676381] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 7.676446] Process work_for_cpu (pid: 735, threadinfo ffff88001a7d6000, task ffff88001694c4a0) [ 7.676521] Stack: [ 7.676579] ffffffffa00b71e0 ffffffffa014cd78 ffffffff00000000 000000001a7d7e88 [ 7.676778] <0> 0000000000000000 ffff88001cf02000 ffffffffa014c520 ffff88001cf02090 [ 7.677076] <0> 0000000000000000 0000000000000000 ffff88001a7d7eb0 ffffffffa014b100 [ 7.677428] Call Trace: [ 7.677491] [] azx_probe+0xb8/0x284 [snd_hda_intel] [ 7.677559] [] ? do_work_for_cpu+0x0/0x30 [ 7.677624] [] local_pci_probe+0x17/0x20 [ 7.677688] [] do_work_for_cpu+0x18/0x30 [ 7.677752] [] kthread+0x96/0xa0 [ 7.677815] [] kernel_thread_helper+0x4/0x10 [ 7.677879] [] ? kthread+0x0/0xa0 [ 7.677941] [] ? kernel_thread_helper+0x0/0x10 [ 7.678004] Code: ef 31 f6 4c 89 ef 89 4d c0 e8 17 d5 ff ff 85 c0 0f 88 c3 03 00 00 4c 89 e7 e8 87 9d 18 e1 41 8b 7d 40 e8 1e 01 f8 e0 49 8b 45 38 <66> 44 8b 30 41 8b 45 14 8b 4d c0 8d 50 fd 83 fa 01 77 3f 31 d2 [ 7.680013] RIP [] azx_create+0x36b/0x73d [snd_hda_intel] [ 7.680013] RSP [ 7.680013] CR2: ffffc900102b8000 [ 7.680013] ---[ end trace 7a55942e8f0cb675 ]--- [ 9.514281] EXT4-fs (sdc2): re-mounted. Opts: errors=remount-ro [ 9.892514] EXT4-fs (sdc1): mounted filesystem with ordered data mode. Opts: (null) [ 10.760997] EXT4-fs (sdc6): mounted filesystem with ordered data mode. Opts: (null) [ 10.961083] EXT4-fs (sdc5): mounted filesystem with ordered data mode. Opts: (null) [ 11.241124] EXT4-fs (sdc7): mounted filesystem with ordered data mode. Opts: (null) [ 13.094713] type=1400 audit(1287336673.177:5): apparmor="STATUS" operation="profile_load" name="/usr/share/gdm/guest-session/Xsession" pid=887 comm="apparmor_parser" [ 13.096858] type=1400 audit(1287336673.177:6): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient3" pid=888 comm="apparmor_parser" [ 13.097223] type=1400 audit(1287336673.177:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=888 comm="apparmor_parser" [ 13.097473] type=1400 audit(1287336673.177:8): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=888 comm="apparmor_parser" [ 13.248552] type=1400 audit(1287336673.327:9): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince" pid=889 comm="apparmor_parser" [ 13.252562] type=1400 audit(1287336673.337:10): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-previewer" pid=889 comm="apparmor_parser" [ 13.254974] type=1400 audit(1287336673.337:11): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-thumbnailer" pid=889 comm="apparmor_parser" [ 13.386792] type=1400 audit(1287336673.467:12): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=891 comm="apparmor_parser" [ 13.387244] type=1400 audit(1287336673.467:13): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=891 comm="apparmor_parser" [ 13.518653] type=1400 audit(1287336673.607:14): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=892 comm="apparmor_parser" [ 14.099675] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1 Bug: 662973 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-7-generic (buildd@rothera) (gcc version 4.4.4 (Ubuntu 4.4.4-6ubuntu1) ) #11-Ubuntu SMP Wed Jul 7 02:28:58 UTC 2010 (Ubuntu 2.6.35-7.11-generic 2.6.35-rc4) [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009f800 (usable) [ 0.000000] BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000dfff0000 (usable) [ 0.000000] BIOS-e820: 00000000dfff0000 - 00000000dfff3000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000dfff3000 - 00000000e0000000 (ACPI data) [ 0.000000] BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved) [ 0.000000] NX (Execute Disable) protection: approximated by x86 segment limits [ 0.000000] DMI 2.2 present. [ 0.000000] Phoenix BIOS detected: BIOS may corrupt low RAM, working around it. [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] last_pfn = 0xdfff0 max_arch_pfn = 0x100000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-EFFFF uncachable [ 0.000000] F0000-FFFFF write-through [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask F80000000 write-back [ 0.000000] 1 base 080000000 mask FC0000000 write-back [ 0.000000] 2 base 0C0000000 mask FE0000000 write-back [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] Scanning 0 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009f800 (usable) [ 0.000000] modified: 000000000009f800 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 00000000dfff0000 (usable) [ 0.000000] modified: 00000000dfff0000 - 00000000dfff3000 (ACPI NVS) [ 0.000000] modified: 00000000dfff3000 - 00000000e0000000 (ACPI data) [ 0.000000] modified: 00000000fec00000 - 0000000100000000 (reserved) [ 0.000000] initial memory mapped : 0 - 00c00000 [ 0.000000] found SMP MP-table at [c00f5df0] f5df0 [ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000 [ 0.000000] 0000000000 - 0000400000 page 4k [ 0.000000] 0000400000 - 0037400000 page 2M [ 0.000000] 0037400000 - 00377fe000 page 4k [ 0.000000] kernel direct mapping tables up to 377fe000 @ 15000-1a000 [ 0.000000] RAMDISK: 37511000 - 37ff0000 [ 0.000000] Allocated new RAMDISK: 009b9000 - 0149754c [ 0.000000] Move RAMDISK from 0000000037511000 - 0000000037fef54b to 009b9000 - 0149754b [ 0.000000] ACPI: RSDP 000f77a0 00014 (v00 IntelR) [ 0.000000] ACPI: RSDT dfff3000 0002C (v01 IntelR AWRDACPI 42302E31 AWRD 00000000) [ 0.000000] ACPI: FACP dfff3040 00074 (v01 IntelR AWRDACPI 42302E31 AWRD 00000000) [ 0.000000] ACPI: DSDT dfff30c0 0433B (v01 INTELR AWRDACPI 00001000 MSFT 0100000E) [ 0.000000] ACPI: FACS dfff0000 00040 [ 0.000000] ACPI: APIC dfff7400 00068 (v01 IntelR AWRDACPI 42302E31 AWRD 00000000) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] 2695MB HIGHMEM available. [ 0.000000] 887MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 377fe000 [ 0.000000] low ram: 0 - 377fe000 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x000377fe [ 0.000000] HighMem 0x000377fe -> 0x000dfff0 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x000dfff0 [ 0.000000] On node 0 totalpages: 917375 [ 0.000000] free_area_init_node: node 0, pgdat c0813880, node_mem_map c1499200 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3951 pages, LIFO batch:0 [ 0.000000] Normal zone: 1744 pages used for memmap [ 0.000000] Normal zone: 221486 pages, LIFO batch:31 [ 0.000000] HighMem zone: 5392 pages used for memmap [ 0.000000] HighMem zone: 684770 pages, LIFO batch:31 [ 0.000000] Using APIC driver default [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [16000 - 167ff] [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000f0000 [ 0.000000] PM: Registered nosave memory: 00000000000f0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at e0000000 (gap: e0000000:1ec00000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:2 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 14 pages/cpu @c3400000 s36352 r0 d20992 u2097152 [ 0.000000] pcpu-alloc: s36352 r0 d20992 u2097152 alloc=1*4194304 [ 0.000000] pcpu-alloc: [0] 0 1 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 910207 [ 0.000000] Kernel command line: root=UUID=483d70c7-88c7-42a9-b21f-8fb1dd4e135e ro vga=794 quiet splash [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Enabling fast FPU save and restore... done. [ 0.000000] Enabling unmasked SIMD FPU exception support... done. [ 0.000000] Initializing CPU#0 [ 0.000000] allocated 18349440 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Subtract (45 early reservations) [ 0.000000] #1 [0000001000 - 0000002000] EX TRAMPOLINE [ 0.000000] #2 [0000100000 - 00009b491c] TEXT DATA BSS [ 0.000000] #3 [00009b5000 - 00009b8088] BRK [ 0.000000] #4 [00000f5e00 - 0000100000] BIOS reserved [ 0.000000] #5 [00000f5df0 - 00000f5e00] MP-table mpf [ 0.000000] #6 [000009f800 - 00000f1400] BIOS reserved [ 0.000000] #7 [00000f1568 - 00000f5df0] BIOS reserved [ 0.000000] #8 [00000f1400 - 00000f1568] MP-table mpc [ 0.000000] #9 [0000010000 - 0000011000] TRAMPOLINE [ 0.000000] #10 [0000011000 - 0000015000] ACPI WAKEUP [ 0.000000] #11 [0000015000 - 0000016000] PGTABLE [ 0.000000] #12 [00009b9000 - 0001498000] NEW RAMDISK [ 0.000000] #13 [0001498000 - 0001499000] BOOTMEM [ 0.000000] #14 [0001499000 - 0003099000] BOOTMEM [ 0.000000] #15 [0003099000 - 0003099004] BOOTMEM [ 0.000000] #16 [0003099040 - 0003099100] BOOTMEM [ 0.000000] #17 [0003099100 - 0003099154] BOOTMEM [ 0.000000] #18 [0003099180 - 000309c180] BOOTMEM [ 0.000000] #19 [000309c180 - 000309c280] BOOTMEM [ 0.000000] #20 [000309c280 - 00030a8280] BOOTMEM [ 0.000000] #21 [00030a8280 - 00030a82a7] BOOTMEM [ 0.000000] #22 [00030a82c0 - 00030a83a0] BOOTMEM [ 0.000000] #23 [00030a83c0 - 00030a8400] BOOTMEM [ 0.000000] #24 [00030a8400 - 00030a8440] BOOTMEM [ 0.000000] #25 [00030a8440 - 00030a8480] BOOTMEM [ 0.000000] #26 [00030a8480 - 00030a84c0] BOOTMEM [ 0.000000] #27 [00030a84c0 - 00030a8500] BOOTMEM [ 0.000000] #28 [00030a8500 - 00030a8540] BOOTMEM [ 0.000000] #29 [00030a8540 - 00030a8580] BOOTMEM [ 0.000000] #30 [00030a8580 - 00030a8590] BOOTMEM [ 0.000000] #31 [00030a85c0 - 00030a8608] BOOTMEM [ 0.000000] #32 [00030a8640 - 00030a8688] BOOTMEM [ 0.000000] #33 [0003400000 - 000340e000] BOOTMEM [ 0.000000] #34 [0003600000 - 000360e000] BOOTMEM [ 0.000000] #35 [00030aa6c0 - 00030aa6c4] BOOTMEM [ 0.000000] #36 [00030aa700 - 00030aa704] BOOTMEM [ 0.000000] #37 [00030aa740 - 00030aa748] BOOTMEM [ 0.000000] #38 [00030aa780 - 00030aa788] BOOTMEM [ 0.000000] #39 [00030aa7c0 - 00030aa868] BOOTMEM [ 0.000000] #40 [00030aa880 - 00030aa8e8] BOOTMEM [ 0.000000] #41 [00030aa900 - 00030ae900] BOOTMEM [ 0.000000] #42 [00030ae900 - 000312e900] BOOTMEM [ 0.000000] #43 [000312e900 - 000316e900] BOOTMEM [ 0.000000] #44 [000360e000 - 000478dd80] BOOTMEM [ 0.000000] Initializing HighMem for node 0 (000377fe:000dfff0) [ 0.000000] Memory: 3601852k/3669952k available (4942k kernel code, 67648k reserved, 2401k data, 684k init, 2760648k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff15000 - 0xfffff000 ( 936 kB) [ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB) [ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) [ 0.000000] .init : 0xc082d000 - 0xc08d8000 ( 684 kB) [ 0.000000] .data : 0xc05d3b52 - 0xc082c168 (2401 kB) [ 0.000000] .text : 0xc0100000 - 0xc05d3b52 (4942 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=13, HWalign=128, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:2304 nr_irqs:512 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 3313.601 MHz processor. [ 0.008004] Calibrating delay loop (skipped), value calculated using timer frequency.. 6627.20 BogoMIPS (lpj=13254404) [ 0.008010] pid_max: default: 32768 minimum: 301 [ 0.008033] Security Framework initialized [ 0.008054] AppArmor: AppArmor initialized [ 0.008058] Yama: becoming mindful. [ 0.008122] Mount-cache hash table entries: 512 [ 0.008284] Initializing cgroup subsys ns [ 0.008289] Initializing cgroup subsys cpuacct [ 0.008295] Initializing cgroup subsys memory [ 0.008307] Initializing cgroup subsys devices [ 0.008310] Initializing cgroup subsys freezer [ 0.008313] Initializing cgroup subsys net_cls [ 0.008351] CPU: Physical Processor ID: 0 [ 0.008354] CPU: Processor Core ID: 0 [ 0.008358] mce: CPU supports 4 MCE banks [ 0.008370] CPU0: Thermal monitoring enabled (TM1) [ 0.008375] using mwait in idle threads. [ 0.008383] Performance Events: Netburst events, Netburst P4/Xeon PMU driver. [ 0.008395] ... version: 0 [ 0.008397] ... bit width: 40 [ 0.008400] ... generic registers: 18 [ 0.008402] ... value mask: 000000ffffffffff [ 0.008405] ... max period: 0000007fffffffff [ 0.008408] ... fixed-purpose events: 0 [ 0.008410] ... event mask: 000000000003ffff [ 0.012099] ACPI: Core revision 20100428 [ 0.020013] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.020019] ftrace: allocating 21734 entries in 43 pages [ 0.024059] Enabling APIC mode: Flat. Using 1 I/O APICs [ 0.024341] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.066291] CPU0: Intel(R) Pentium(R) 4 CPU 3.00GHz stepping 03 [ 0.068000] Booting Node 0, Processors #1 Ok. [ 0.012000] Initializing CPU#1 [ 0.156018] Brought up 2 CPUs [ 0.156024] Total of 2 processors activated (13254.98 BogoMIPS). [ 0.156382] devtmpfs: initialized [ 0.157394] regulator: core version 0.5 [ 0.157417] Time: 17:35:43 Date: 10/18/10 [ 0.157467] NET: Registered protocol family 16 [ 0.157479] Trying to unpack rootfs image as initramfs... [ 0.157675] EISA bus registered [ 0.157689] ACPI: bus type pci registered [ 0.158871] PCI: PCI BIOS revision 2.10 entry at 0xfb9e0, last bus=4 [ 0.158876] PCI: Using configuration type 1 for base access [ 0.161652] bio: create slab at 0 [ 0.163703] ACPI: EC: Look up EC in DSDT [ 0.171117] ACPI: Interpreter enabled [ 0.171124] ACPI: (supports S0 S3 S4 S5) [ 0.171167] ACPI: Using IOAPIC for interrupt routing [ 0.179540] ACPI: No dock devices found. [ 0.179547] PCI: Ignoring host bridge windows from ACPI; if necessary, use "pci=use_crs" and report a bug [ 0.179706] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.180027] pci_root PNP0A03:00: host bridge window [io 0x0000-0x0cf7] (ignored) [ 0.180033] pci_root PNP0A03:00: host bridge window [io 0x0d00-0xffff] (ignored) [ 0.180038] pci_root PNP0A03:00: host bridge window [mem 0x000a0000-0x000bffff] (ignored) [ 0.180043] pci_root PNP0A03:00: host bridge window [mem 0x000c0000-0x000dffff] (ignored) [ 0.180049] pci_root PNP0A03:00: host bridge window [mem 0xe0000000-0xfebfffff] (ignored) [ 0.180070] pci 0000:00:00.0: Enabling MCH 'Overflow' Device [ 0.180083] pci 0000:00:00.0: reg 10: [mem 0xf0000000-0xf7ffffff pref] [ 0.180216] pci 0000:00:06.0: reg 10: [mem 0xfecf0000-0xfecf0fff] [ 0.180320] pci 0000:00:1d.0: reg 20: [io 0xbc00-0xbc1f] [ 0.180381] pci 0000:00:1d.1: reg 20: [io 0xb000-0xb01f] [ 0.180443] pci 0000:00:1d.2: reg 20: [io 0xb400-0xb41f] [ 0.180507] pci 0000:00:1d.3: reg 20: [io 0xb800-0xb81f] [ 0.180564] pci 0000:00:1d.7: reg 10: [mem 0xfa200000-0xfa2003ff] [ 0.180623] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.180630] pci 0000:00:1d.7: PME# disabled [ 0.180726] pci 0000:00:1f.0: Force enabled HPET at 0xfed00000 [ 0.180735] pci 0000:00:1f.0: quirk: [io 0x0400-0x047f] claimed by ICH4 ACPI/GPIO/TCO [ 0.180742] pci 0000:00:1f.0: quirk: [io 0x0480-0x04bf] claimed by ICH4 GPIO [ 0.180770] pci 0000:00:1f.1: reg 10: [io 0x0000-0x0007] [ 0.180780] pci 0000:00:1f.1: reg 14: [io 0x0000-0x0003] [ 0.180789] pci 0000:00:1f.1: reg 18: [io 0x0000-0x0007] [ 0.180799] pci 0000:00:1f.1: reg 1c: [io 0x0000-0x0003] [ 0.180808] pci 0000:00:1f.1: reg 20: [io 0xf000-0xf00f] [ 0.180817] pci 0000:00:1f.1: reg 24: [mem 0x00000000-0x000003ff] [ 0.180854] pci 0000:00:1f.2: reg 10: [io 0xc000-0xc007] [ 0.180863] pci 0000:00:1f.2: reg 14: [io 0xc400-0xc403] [ 0.180872] pci 0000:00:1f.2: reg 18: [io 0xc800-0xc807] [ 0.180881] pci 0000:00:1f.2: reg 1c: [io 0xcc00-0xcc03] [ 0.180889] pci 0000:00:1f.2: reg 20: [io 0xd000-0xd00f] [ 0.180949] pci 0000:00:1f.3: reg 20: [io 0x0500-0x051f] [ 0.181004] pci 0000:00:1f.6: reg 10: [io 0xe000-0xe0ff] [ 0.181014] pci 0000:00:1f.6: reg 14: [io 0xe400-0xe47f] [ 0.181060] pci 0000:00:1f.6: PME# supported from D0 D3hot D3cold [ 0.181067] pci 0000:00:1f.6: PME# disabled [ 0.181122] pci 0000:01:00.0: reg 10: [mem 0xe0000000-0xefffffff pref] [ 0.181132] pci 0000:01:00.0: reg 14: [io 0xa000-0xa0ff] [ 0.181142] pci 0000:01:00.0: reg 18: [mem 0xf9000000-0xf900ffff] [ 0.181166] pci 0000:01:00.0: reg 30: [mem 0x00000000-0x0001ffff pref] [ 0.181197] pci 0000:01:00.0: supports D1 D2 [ 0.181238] pci 0000:01:00.1: reg 10: [mem 0xf9010000-0xf9013fff] [ 0.181292] pci 0000:01:00.1: supports D1 D2 [ 0.181345] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.181352] pci 0000:00:01.0: bridge window [io 0xa000-0xafff] [ 0.181358] pci 0000:00:01.0: bridge window [mem 0xf8000000-0xf9ffffff] [ 0.181365] pci 0000:00:01.0: bridge window [mem 0xe0000000-0xefffffff pref] [ 0.181404] pci 0000:02:01.0: reg 10: [mem 0xfa000000-0xfa01ffff] [ 0.181417] pci 0000:02:01.0: reg 18: [io 0x9000-0x901f] [ 0.181454] pci 0000:02:01.0: PME# supported from D0 D3hot D3cold [ 0.181460] pci 0000:02:01.0: PME# disabled [ 0.181505] pci 0000:00:03.0: PCI bridge to [bus 02-02] [ 0.181511] pci 0000:00:03.0: bridge window [io 0x9000-0x9fff] [ 0.181517] pci 0000:00:03.0: bridge window [mem 0xfa000000-0xfa0fffff] [ 0.181524] pci 0000:00:03.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.181625] pci 0000:03:0c.0: supports D1 D2 [ 0.181629] pci 0000:03:0c.0: PME# supported from D1 D2 D3hot D3cold [ 0.181636] pci 0000:03:0c.0: PME# disabled [ 0.181673] pci 0000:03:0e.0: reg 10: [io 0x8000-0x803f] [ 0.181723] pci 0000:03:0e.0: supports D2 [ 0.181727] pci 0000:03:0e.0: PME# supported from D0 D2 D3hot [ 0.181734] pci 0000:03:0e.0: PME# disabled [ 0.181766] pci 0000:00:1e.0: PCI bridge to [bus 03-04] (subtractive decode) [ 0.181773] pci 0000:00:1e.0: bridge window [io 0x7000-0x8fff] [ 0.181780] pci 0000:00:1e.0: bridge window [mem 0xfa100000-0xfa1fffff] [ 0.181788] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.181793] pci 0000:00:1e.0: bridge window [io 0x0000-0xffff] (subtractive decode) [ 0.181798] pci 0000:00:1e.0: bridge window [mem 0x00000000-0xffffffff] (subtractive decode) [ 0.181867] pci 0000:04:00.0: reg 10: [mem 0xfa100000-0xfa100fff] [ 0.181927] pci 0000:04:00.0: supports D1 D2 [ 0.181931] pci 0000:04:00.0: PME# supported from D0 D1 D2 D3hot [ 0.181938] pci 0000:04:00.0: PME# disabled [ 0.181977] pci 0000:04:00.1: reg 10: [mem 0xfa101000-0xfa101fff] [ 0.182037] pci 0000:04:00.1: supports D1 D2 [ 0.182041] pci 0000:04:00.1: PME# supported from D0 D1 D2 D3hot [ 0.182048] pci 0000:04:00.1: PME# disabled [ 0.182086] pci 0000:04:00.2: reg 10: [mem 0xfa102000-0xfa1020ff] [ 0.182146] pci 0000:04:00.2: supports D1 D2 [ 0.182150] pci 0000:04:00.2: PME# supported from D0 D1 D2 D3hot [ 0.182157] pci 0000:04:00.2: PME# disabled [ 0.182208] pci 0000:04:01.0: reg 10: [mem 0xfa103000-0xfa1037ff] [ 0.182219] pci 0000:04:01.0: reg 14: [io 0x7000-0x707f] [ 0.182274] pci 0000:04:01.0: PME# supported from D0 D3hot D3cold [ 0.182281] pci 0000:04:01.0: PME# disabled [ 0.182342] pci 0000:03:0c.0: PCI bridge to [bus 04-04] [ 0.182349] pci 0000:03:0c.0: bridge window [io 0x7000-0x7fff] [ 0.182356] pci 0000:03:0c.0: bridge window [mem 0xfa100000-0xfa1fffff] [ 0.182363] pci 0000:03:0c.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.182389] pci_bus 0000:00: on NUMA node 0 [ 0.182397] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.182625] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.HUB0._PRT] [ 0.201982] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 7 9 *10 11 12 14 15) [ 0.202155] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 7 9 10 11 *12 14 15) [ 0.202327] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 7 9 10 *11 12 14 15) [ 0.202498] ACPI: PCI Interrupt Link [LNKD] (IRQs *3 4 5 7 9 10 11 12 14 15) [ 0.202669] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 7 9 10 11 12 14 15) *0, disabled. [ 0.202843] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 7 9 10 11 12 14 15) *0, disabled. [ 0.203019] ACPI: PCI Interrupt Link [LNK0] (IRQs 3 4 5 7 9 10 11 12 14 15) *0, disabled. [ 0.203191] ACPI: PCI Interrupt Link [LNK1] (IRQs 3 4 5 *7 9 10 11 12 14 15) [ 0.203272] HEST: Table is not found! [ 0.203409] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none [ 0.203428] vgaarb: loaded [ 0.203733] SCSI subsystem initialized [ 0.203857] libata version 3.00 loaded. [ 0.203956] usbcore: registered new interface driver usbfs [ 0.203983] usbcore: registered new interface driver hub [ 0.204066] usbcore: registered new device driver usb [ 0.204291] ACPI: WMI: Mapper loaded [ 0.204295] PCI: Using ACPI for IRQ routing [ 0.204302] PCI: pci_cache_line_size set to 64 bytes [ 0.204446] reserve RAM buffer: 000000000009f800 - 000000000009ffff [ 0.204451] reserve RAM buffer: 00000000dfff0000 - 00000000dfffffff [ 0.204618] NetLabel: Initializing [ 0.204622] NetLabel: domain hash size = 128 [ 0.204625] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.204645] NetLabel: unlabeled traffic allowed by default [ 0.204771] hpet clockevent registered [ 0.204777] HPET: 3 timers in total, 0 timers will be used for per-cpu timer [ 0.204785] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 [ 0.204794] hpet0: 3 comparators, 64-bit 14.318180 MHz counter [ 0.208056] Switching to clocksource tsc [ 0.227429] AppArmor: AppArmor Filesystem Enabled [ 0.227451] pnp: PnP ACPI init [ 0.227482] ACPI: bus type pnp registered [ 0.231174] pnp: PnP ACPI: found 9 devices [ 0.231179] ACPI: ACPI bus type pnp unregistered [ 0.231185] PnPBIOS: Disabled by ACPI PNP [ 0.231204] system 00:01: [io 0x0b78-0x0b7b] has been reserved [ 0.231210] system 00:01: [io 0x0f78-0x0f7b] has been reserved [ 0.231215] system 00:01: [io 0x0a78-0x0a7b] has been reserved [ 0.231221] system 00:01: [io 0x0e78-0x0e7b] has been reserved [ 0.231226] system 00:01: [io 0x0bbc-0x0bbf] has been reserved [ 0.231232] system 00:01: [io 0x0fbc-0x0fbf] has been reserved [ 0.231237] system 00:01: [io 0x04d0-0x04d1] has been reserved [ 0.231242] system 00:01: [io 0x0294-0x0297] has been reserved [ 0.231257] system 00:06: [io 0x0400-0x04bf] could not be reserved [ 0.231278] system 00:08: [mem 0x000d0000-0x000d3fff] has been reserved [ 0.231285] system 00:08: [mem 0x000f0000-0x000f7fff] could not be reserved [ 0.231290] system 00:08: [mem 0x000f8000-0x000fbfff] could not be reserved [ 0.231296] system 00:08: [mem 0x000fc000-0x000fffff] could not be reserved [ 0.231302] system 00:08: [mem 0xdfff0000-0xdfffffff] could not be reserved [ 0.231307] system 00:08: [mem 0x00000000-0x0009ffff] could not be reserved [ 0.231313] system 00:08: [mem 0x00100000-0xdffeffff] could not be reserved [ 0.231319] system 00:08: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.231325] system 00:08: [mem 0xfec01000-0xfed8ffff] could not be reserved [ 0.231330] system 00:08: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.231336] system 00:08: [mem 0xffb00000-0xffb7ffff] has been reserved [ 0.231341] system 00:08: [mem 0xfff00000-0xffffffff] has been reserved [ 0.231347] system 00:08: [mem 0x000e0000-0x000effff] has been reserved [ 0.266242] pci 0000:00:1f.1: BAR 5: assigned [mem 0xfa200400-0xfa2007ff] [ 0.266253] pci 0000:00:1f.1: BAR 5: set to [mem 0xfa200400-0xfa2007ff] (PCI address [0xfa200400-0xfa2007ff] [ 0.266262] pci 0000:01:00.0: BAR 6: assigned [mem 0xf8000000-0xf801ffff pref] [ 0.266268] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.266274] pci 0000:00:01.0: bridge window [io 0xa000-0xafff] [ 0.266281] pci 0000:00:01.0: bridge window [mem 0xf8000000-0xf9ffffff] [ 0.266288] pci 0000:00:01.0: bridge window [mem 0xe0000000-0xefffffff pref] [ 0.266297] pci 0000:00:03.0: PCI bridge to [bus 02-02] [ 0.266302] pci 0000:00:03.0: bridge window [io 0x9000-0x9fff] [ 0.266310] pci 0000:00:03.0: bridge window [mem 0xfa000000-0xfa0fffff] [ 0.266316] pci 0000:00:03.0: bridge window [mem pref disabled] [ 0.266325] pci 0000:03:0c.0: PCI bridge to [bus 04-04] [ 0.266331] pci 0000:03:0c.0: bridge window [io 0x7000-0x7fff] [ 0.266339] pci 0000:03:0c.0: bridge window [mem 0xfa100000-0xfa1fffff] [ 0.266345] pci 0000:03:0c.0: bridge window [mem pref disabled] [ 0.266354] pci 0000:00:1e.0: PCI bridge to [bus 03-04] [ 0.266359] pci 0000:00:1e.0: bridge window [io 0x7000-0x8fff] [ 0.266367] pci 0000:00:1e.0: bridge window [mem 0xfa100000-0xfa1fffff] [ 0.266374] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.266400] pci 0000:00:1e.0: setting latency timer to 64 [ 0.266416] pci_bus 0000:00: resource 0 [io 0x0000-0xffff] [ 0.266421] pci_bus 0000:00: resource 1 [mem 0x00000000-0xffffffff] [ 0.266426] pci_bus 0000:01: resource 0 [io 0xa000-0xafff] [ 0.266431] pci_bus 0000:01: resource 1 [mem 0xf8000000-0xf9ffffff] [ 0.266436] pci_bus 0000:01: resource 2 [mem 0xe0000000-0xefffffff pref] [ 0.266441] pci_bus 0000:02: resource 0 [io 0x9000-0x9fff] [ 0.266446] pci_bus 0000:02: resource 1 [mem 0xfa000000-0xfa0fffff] [ 0.266451] pci_bus 0000:03: resource 0 [io 0x7000-0x8fff] [ 0.266456] pci_bus 0000:03: resource 1 [mem 0xfa100000-0xfa1fffff] [ 0.266461] pci_bus 0000:03: resource 4 [io 0x0000-0xffff] [ 0.266465] pci_bus 0000:03: resource 5 [mem 0x00000000-0xffffffff] [ 0.266470] pci_bus 0000:04: resource 0 [io 0x7000-0x7fff] [ 0.266475] pci_bus 0000:04: resource 1 [mem 0xfa100000-0xfa1fffff] [ 0.266534] NET: Registered protocol family 2 [ 0.266649] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.267080] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.267675] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.267958] TCP: Hash tables configured (established 131072 bind 65536) [ 0.267963] TCP reno registered [ 0.267969] UDP hash table entries: 512 (order: 2, 16384 bytes) [ 0.267981] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) [ 0.268134] NET: Registered protocol family 1 [ 0.268281] pci 0000:01:00.0: Boot video device [ 0.268346] PCI: CLS 32 bytes, default 64 [ 0.268614] cpufreq-nforce2: No nForce2 chipset. [ 0.268663] Scanning for low memory corruption every 60 seconds [ 0.268838] audit: initializing netlink socket (disabled) [ 0.268853] type=2000 audit(1287423343.264:1): initialized [ 0.281413] highmem bounce pool size: 64 pages [ 0.281423] HugeTLB registered 4 MB page size, pre-allocated 0 pages [ 0.284242] VFS: Disk quotas dquot_6.5.2 [ 0.284368] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 0.285525] fuse init (API version 7.14) [ 0.285695] msgmni has been set to 1642 [ 0.286042] alg: No test for stdrng (krng) [ 0.286147] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.286153] io scheduler noop registered [ 0.286156] io scheduler deadline registered [ 0.286185] io scheduler cfq registered (default) [ 0.286461] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.286504] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.286658] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 0.286664] ACPI: Power Button [PWRB] [ 0.286760] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 [ 0.286765] ACPI: Power Button [PWRF] [ 0.286850] ACPI: Fan [FAN] (on) [ 0.287164] ACPI: acpi_idle registered with cpuidle [ 0.292405] thermal LNXTHERM:01: registered as thermal_zone0 [ 0.292423] ACPI: Thermal Zone [THRM] (55 C) [ 0.292531] ERST: Table is not found! [ 0.296623] vesafb: framebuffer at 0xe0000000, mapped to 0xf8080000, using 5120k, total 16384k [ 0.296629] vesafb: mode is 1280x1024x16, linelength=2560, pages=5 [ 0.296633] vesafb: protected mode interface info at c000:a0ba [ 0.296637] vesafb: pmi: set display start = c00ca15c, set palette = c00ca21a [ 0.296641] vesafb: scrolling: redraw [ 0.296646] vesafb: Truecolor: size=0:5:6:5, shift=0:11:5:0 [ 0.300161] isapnp: Scanning for PnP cards... [ 0.321388] Console: switching to colour frame buffer device 160x64 [ 0.345954] fb0: VESA VGA frame buffer device [ 0.345995] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.346475] alloc irq_desc for 17 on node -1 [ 0.346479] alloc kstat_irqs on node -1 [ 0.346489] serial 0000:00:1f.6: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 0.346497] serial 0000:00:1f.6: PCI INT B disabled [ 0.396475] brd: module loaded [ 0.397368] loop: module loaded [ 0.397684] ata_piix 0000:00:1f.1: version 2.13 [ 0.397702] alloc irq_desc for 18 on node -1 [ 0.397706] alloc kstat_irqs on node -1 [ 0.397715] ata_piix 0000:00:1f.1: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 0.397767] ata_piix 0000:00:1f.1: setting latency timer to 64 [ 0.411739] scsi0 : ata_piix [ 0.436794] scsi1 : ata_piix [ 0.438121] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0xf000 irq 14 [ 0.438126] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0xf008 irq 15 [ 0.438156] ata_piix 0000:00:1f.2: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 0.438164] ata_piix 0000:00:1f.2: MAP [ P0 -- P1 -- ] [ 0.438219] ata_piix 0000:00:1f.2: setting latency timer to 64 [ 0.448128] scsi2 : ata_piix [ 0.448239] scsi3 : ata_piix [ 0.449276] ata3: SATA max UDMA/133 cmd 0xc000 ctl 0xc400 bmdma 0xd000 irq 18 [ 0.449281] ata4: SATA max UDMA/133 cmd 0xc800 ctl 0xcc00 bmdma 0xd008 irq 18 [ 0.449864] Fixed MDIO Bus: probed [ 0.449925] PPP generic driver version 2.4.2 [ 0.449999] tun: Universal TUN/TAP device driver, 1.6 [ 0.450002] tun: (C) 1999-2004 Max Krasnyansky [ 0.450142] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.450172] alloc irq_desc for 23 on node -1 [ 0.450176] alloc kstat_irqs on node -1 [ 0.450185] ehci_hcd 0000:00:1d.7: PCI INT D -> GSI 23 (level, low) -> IRQ 23 [ 0.450205] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 0.450211] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 0.450265] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 1 [ 0.454177] ehci_hcd 0000:00:1d.7: cache line size of 32 is not supported [ 0.454201] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xfa200000 [ 0.479901] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 0.480107] hub 1-0:1.0: USB hub found [ 0.480115] hub 1-0:1.0: 8 ports detected [ 0.480252] ehci_hcd 0000:04:00.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.480272] ehci_hcd 0000:04:00.2: EHCI Host Controller [ 0.480328] ehci_hcd 0000:04:00.2: new USB bus registered, assigned bus number 2 [ 0.503867] ehci_hcd 0000:04:00.2: irq 18, io mem 0xfa102000 [ 0.515876] ehci_hcd 0000:04:00.2: USB 2.0 started, EHCI 0.95 [ 0.516086] hub 2-0:1.0: USB hub found [ 0.516095] hub 2-0:1.0: 5 ports detected [ 0.516218] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.516254] alloc irq_desc for 16 on node -1 [ 0.516258] alloc kstat_irqs on node -1 [ 0.516267] ohci_hcd 0000:04:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.516288] ohci_hcd 0000:04:00.0: OHCI Host Controller [ 0.516345] ohci_hcd 0000:04:00.0: new USB bus registered, assigned bus number 3 [ 0.516378] ohci_hcd 0000:04:00.0: irq 16, io mem 0xfa100000 [ 0.610552] isapnp: No Plug & Play device found [ 0.676346] Freeing initrd memory: 11132k freed [ 0.687871] ata1.00: ATA-7: SAMSUNG SP0802N, TK100-24, max UDMA/100 [ 0.687877] ata1.00: 156368016 sectors, multi 16: LBA48 [ 0.695780] ata1.00: configured for UDMA/100 [ 0.695947] scsi 0:0:0:0: Direct-Access ATA SAMSUNG SP0802N TK10 PQ: 0 ANSI: 5 [ 0.696188] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 0.696316] sd 0:0:0:0: [sda] 156368016 512-byte logical blocks: (80.0 GB/74.5 GiB) [ 0.696410] sd 0:0:0:0: [sda] Write Protect is off [ 0.696416] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 0.696456] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.078256] hub 3-0:1.0: USB hub found [ 1.078266] hub 3-0:1.0: 3 ports detected [ 1.078380] ohci_hcd 0000:04:00.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 1.078401] ohci_hcd 0000:04:00.1: OHCI Host Controller [ 1.078466] ohci_hcd 0000:04:00.1: new USB bus registered, assigned bus number 4 [ 1.078501] ohci_hcd 0000:04:00.1: irq 17, io mem 0xfa101000 [ 1.088917] sda: [ 1.095817] ata3.00: ATA-7: Maxtor 7Y250M0, YAR511W0, max UDMA/100 [ 1.095823] ata3.00: 488397168 sectors, multi 16: LBA48 [ 1.098764] sda1 sda2 sda3 < [ 1.103922] ata2.00: ATAPI: PIONEER DVD-RW DVR-111D, 1.23, max UDMA/66 [ 1.103967] ata2.01: ATAPI: SONY CD-RW CRX300E, KYS1, max UDMA/33 [ 1.111850] ata3.00: configured for UDMA/100 [ 1.112314] sda5 [ 1.119897] ata2.00: configured for UDMA/66 [ 1.133019] sda6 [ 1.135856] ata2.01: configured for UDMA/33 [ 1.148647] scsi 1:0:0:0: CD-ROM PIONEER DVD-RW DVR-111D 1.23 PQ: 0 ANSI: 5 [ 1.171763] sr0: scsi3-mmc drive: 40x/40x writer cd/rw xa/form2 cdda tray [ 1.171769] Uniform CD-ROM driver Revision: 3.20 [ 1.171914] sr 1:0:0:0: Attached scsi CD-ROM sr0 [ 1.171996] sr 1:0:0:0: Attached scsi generic sg1 type 5 [ 1.173075] scsi 1:0:1:0: CD-ROM SONY CD-RW CRX300E KYS1 PQ: 0 ANSI: 5 [ 1.177493] sr1: scsi3-mmc drive: 0x/48x writer cd/rw xa/form2 cdda tray [ 1.177625] sr 1:0:1:0: Attached scsi CD-ROM sr1 [ 1.177698] sr 1:0:1:0: Attached scsi generic sg2 type 5 [ 1.177855] scsi 2:0:0:0: Direct-Access ATA Maxtor 7Y250M0 YAR5 PQ: 0 ANSI: 5 [ 1.178050] sd 2:0:0:0: Attached scsi generic sg3 type 0 [ 1.178150] sd 2:0:0:0: [sdb] 488397168 512-byte logical blocks: (250 GB/232 GiB) [ 1.178243] sd 2:0:0:0: [sdb] Write Protect is off [ 1.178248] sd 2:0:0:0: [sdb] Mode Sense: 00 3a 00 00 [ 1.178288] sd 2:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.645742] sda7 > sda4 [ 1.646240] hub 4-0:1.0: USB hub found [ 1.646249] hub 4-0:1.0: 2 ports detected [ 1.646358] uhci_hcd: USB Universal Host Controller Interface driver [ 1.646401] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.646411] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 1.646416] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 1.646480] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 5 [ 1.646507] uhci_hcd 0000:00:1d.0: irq 16, io base 0x0000bc00 [ 1.646693] hub 5-0:1.0: USB hub found [ 1.646700] hub 5-0:1.0: 2 ports detected [ 1.646796] alloc irq_desc for 19 on node -1 [ 1.646800] alloc kstat_irqs on node -1 [ 1.646809] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.646817] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 1.646822] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 1.646874] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 6 [ 1.646912] uhci_hcd 0000:00:1d.1: irq 19, io base 0x0000b000 [ 1.647103] hub 6-0:1.0: USB hub found [ 1.647111] hub 6-0:1.0: 2 ports detected [ 1.647207] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 1.647215] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 1.647220] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 1.647273] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 7 [ 1.647297] uhci_hcd 0000:00:1d.2: irq 18, io base 0x0000b400 [ 1.647480] hub 7-0:1.0: USB hub found [ 1.647488] hub 7-0:1.0: 2 ports detected [ 1.647583] uhci_hcd 0000:00:1d.3: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.647591] uhci_hcd 0000:00:1d.3: setting latency timer to 64 [ 1.647596] uhci_hcd 0000:00:1d.3: UHCI Host Controller [ 1.647650] uhci_hcd 0000:00:1d.3: new USB bus registered, assigned bus number 8 [ 1.647673] uhci_hcd 0000:00:1d.3: irq 16, io base 0x0000b800 [ 1.647854] hub 8-0:1.0: USB hub found [ 1.647862] hub 8-0:1.0: 2 ports detected [ 1.648054] PNP: No PS/2 controller found. Probing ports directly. [ 1.649485] sdb: [ 1.649635] sd 0:0:0:0: [sda] Attached SCSI disk [ 1.657054] sdb1 [ 1.657324] sd 2:0:0:0: [sdb] Attached SCSI disk [ 1.812021] usb 1-4: new high speed USB device using ehci_hcd and address 3 [ 1.901291] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 1.901408] mice: PS/2 mouse device common for all mice [ 1.901517] rtc_cmos 00:03: RTC can wake from S4 [ 1.901576] rtc_cmos 00:03: rtc core: registered rtc_cmos as rtc0 [ 1.901599] rtc0: alarms up to one month, 242 bytes nvram, hpet irqs [ 1.901749] device-mapper: uevent: version 1.0.3 [ 1.901902] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 1.902002] device-mapper: multipath: version 1.1.1 loaded [ 1.902007] device-mapper: multipath round-robin: version 1.0.0 loaded [ 1.902158] EISA: Probing bus 0 at eisa.0 [ 1.902189] Cannot allocate resource for EISA slot 7 [ 1.902192] Cannot allocate resource for EISA slot 8 [ 1.902194] EISA: Detected 0 cards. [ 1.902304] cpuidle: using governor ladder [ 1.902308] cpuidle: using governor menu [ 1.902837] TCP cubic registered [ 1.903008] NET: Registered protocol family 10 [ 1.903561] lo: Disabled Privacy Extensions [ 1.903958] NET: Registered protocol family 17 [ 1.904033] Using IPI No-Shortcut mode [ 1.904134] PM: Resume from disk failed. [ 1.904150] registered taskstats version 1 [ 1.904402] Magic number: 14:210:593 [ 1.904471] rtc_cmos 00:03: setting system clock to 2010-10-18 17:35:45 UTC (1287423345) [ 1.904475] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 1.904478] EDD information not available. [ 1.904550] Freeing unused kernel memory: 684k freed [ 1.905039] Write protecting the kernel text: 4944k [ 1.905107] Write protecting the kernel read-only data: 2012k [ 1.930378] udev: starting version 151 [ 1.948702] hub 1-4:1.0: USB hub found [ 1.948793] hub 1-4:1.0: 7 ports detected [ 2.064082] usb 1-7: new high speed USB device using ehci_hcd and address 4 [ 2.173916] e1000: Intel(R) PRO/1000 Network Driver - version 7.3.21-k6-NAPI [ 2.173922] e1000: Copyright (c) 1999-2006 Intel Corporation. [ 2.173975] e1000 0000:02:01.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 2.173988] e1000 0000:02:01.0: setting latency timer to 64 [ 2.188407] firewire_ohci 0000:04:01.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 2.261551] Initializing USB Mass Storage driver... [ 2.261747] scsi4 : usb-storage 1-7:1.0 [ 2.261895] usbcore: registered new interface driver usb-storage [ 2.261899] USB Mass Storage support registered. [ 2.281015] firewire_ohci: Added fw-ohci device 0000:04:01.0, OHCI v1.10, 4 IR + 4 IT contexts, quirks 0x1 [ 2.360018] usb 5-1: new low speed USB device using uhci_hcd and address 2 [ 2.564779] usbcore: registered new interface driver hiddev [ 2.564953] usbcore: registered new interface driver usbhid [ 2.564958] usbhid: USB HID core driver [ 2.583025] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:1d.0/usb5/5-1/5-1:1.0/input/input2 [ 2.583168] logitech 0003:046D:C512.0001: input,hidraw0: USB HID v1.10 Keyboard [Logitech USB Receiver] on usb-0000:00:1d.0-1/input0 [ 2.618794] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:1d.0/usb5/5-1/5-1:1.1/input/input3 [ 2.618980] logitech 0003:046D:C512.0002: input,hidraw1: USB HID v1.10 Mouse [Logitech USB Receiver] on usb-0000:00:1d.0-1/input1 [ 2.628172] usb 1-4.1: new high speed USB device using ehci_hcd and address 5 [ 2.773128] firewire_core: created device fw0: GUID 0001080037002e25, S400 [ 2.810556] e1000 0000:02:01.0: eth0: (PCI:33MHz:32-bit) 00:01:29:24:27:6e [ 2.810566] e1000 0000:02:01.0: eth0: Intel(R) PRO/1000 Network Connection [ 2.936121] usb 1-4.7: new full speed USB device using ehci_hcd and address 6 [ 3.007246] EXT3-fs (sda6): recovery required on readonly filesystem [ 3.007253] EXT3-fs (sda6): write access will be enabled during recovery [ 3.011016] EXT3-fs: barriers not enabled [ 3.269460] scsi 4:0:0:0: Direct-Access Y-E DATA CF Card Reader 3.02 PQ: 0 ANSI: 0 [ 3.273080] scsi 4:0:0:1: Direct-Access Y-E DATA SM Card Reader 3.02 PQ: 0 ANSI: 0 [ 3.276829] scsi 4:0:0:2: Direct-Access Y-E DATA MS Card Reader 3.02 PQ: 0 ANSI: 0 [ 3.279951] scsi 4:0:0:3: Direct-Access Y-E DATA SD Card Reader 3.02 PQ: 0 ANSI: 0 [ 3.280676] sd 4:0:0:0: Attached scsi generic sg4 type 0 [ 3.280943] sd 4:0:0:1: Attached scsi generic sg5 type 0 [ 3.281296] sd 4:0:0:2: Attached scsi generic sg6 type 0 [ 3.282654] sd 4:0:0:3: Attached scsi generic sg7 type 0 [ 3.585409] sd 4:0:0:2: [sde] Attached SCSI removable disk [ 3.594522] sd 4:0:0:0: [sdc] Attached SCSI removable disk [ 3.598390] sd 4:0:0:1: [sdd] Attached SCSI removable disk [ 3.605773] sd 4:0:0:3: [sdf] Attached SCSI removable disk [ 5.453924] kjournald starting. Commit interval 5 seconds [ 5.453956] EXT3-fs (sda6): recovery complete [ 5.454289] EXT3-fs (sda6): mounted filesystem with ordered data mode [ 31.336355] udev: starting version 151 [ 31.579370] intel_rng: FWH not detected [ 31.591578] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 [ 31.672252] Linux agpgart interface v0.103 [ 31.838249] Adding 4000148k swap on /dev/sda7. Priority:-1 extents:1 across:4000148k [ 31.952229] Bluetooth: Core ver 2.15 [ 31.952313] NET: Registered protocol family 31 [ 31.952317] Bluetooth: HCI device and connection manager initialized [ 31.952322] Bluetooth: HCI socket layer initialized [ 31.964339] agpgart-intel 0000:00:00.0: Intel i875 Chipset [ 31.979112] agpgart-intel 0000:00:00.0: AGP aperture is 128M @ 0xf0000000 [ 32.017353] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 32.018654] usbcore: registered new interface driver btusb [ 32.049535] lp: driver loaded but no devices found [ 32.080276] type=1400 audit(1287437775.671:2): operation="profile_load" pid=717 name="/sbin/dhclient3" pid=717 comm="apparmor_parser" [ 32.081033] type=1400 audit(1287437775.671:3): operation="profile_load" pid=717 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=717 comm="apparmor_parser" [ 32.081476] type=1400 audit(1287437775.671:4): operation="profile_load" pid=717 name="/usr/lib/connman/scripts/dhclient-script" pid=717 comm="apparmor_parser" [ 32.195514] Adding 1048572k swap on /dev/mapper/vg0-swap0. Priority:-2 extents:1 across:1048572k [ 32.201545] [drm] Initialized drm 1.1.0 20060810 [ 32.256893] type=1400 audit(1287437775.847:5): operation="profile_load" pid=725 name="/usr/sbin/ntpd" pid=725 comm="apparmor_parser" [ 32.482376] Linux video capture interface: v2.00 [ 32.548838] EDAC MC: Ver: 2.1.0 Jul 7 2010 [ 32.609535] RPC: Registered udp transport module. [ 32.609541] RPC: Registered tcp transport module. [ 32.609545] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 32.766995] EDAC i82875p: i82875p init one [ 32.768731] EDAC MC0: Giving out device to 'i82875p_edac' 'i82875p': DEV 0000:00:00.0 [ 32.769944] EDAC PCI0: Giving out device to module 'i82875p_edac' controller 'EDAC PCI controller': DEV '0000:00:00.0' (POLLED) [ 32.798130] uvcvideo: Found UVC 1.00 device (046d:0994) [ 32.813354] input: UVC Camera (046d:0994) as /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4.1/1-4.1:1.0/input/input4 [ 32.813462] usbcore: registered new interface driver uvcvideo [ 32.813466] USB Video Class driver (v0.1.0) [ 33.047539] [drm] radeon defaulting to kernel modesetting. [ 33.047544] [drm] radeon kernel modesetting enabled. [ 33.047611] radeon 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 33.049541] [drm] initializing kernel modesetting (RV630 0x1002:0x9586). [ 33.049676] [drm] register mmio base: 0xF9000000 [ 33.049679] [drm] register mmio size: 65536 [ 33.049800] modprobe:592 freeing invalid memtype e0000000-e0040000 [ 33.051755] ATOM BIOS: 113 [ 33.051768] [drm] Clocks initialized ! [ 33.051810] agpgart-intel 0000:00:00.0: AGP 3.0 bridge [ 33.051834] agpgart-intel 0000:00:00.0: putting AGP V3 device into 4x mode [ 33.051883] radeon 0000:01:00.0: putting AGP V3 device into 4x mode [ 33.051939] radeon 0000:01:00.0: GTT: 128M 0xF0000000 - 0xF7FFFFFF [ 33.051946] radeon 0000:01:00.0: VRAM: 512M 0xD0000000 - 0xEFFFFFFF (512M used) [ 33.052316] [drm] Detected VRAM RAM=512M, BAR=256M [ 33.052322] [drm] RAM width 128bits DDR [ 33.052415] [TTM] Zone kernel: Available graphics memory: 426510 kiB. [ 33.052418] [TTM] Zone highmem: Available graphics memory: 1806834 kiB. [ 33.052421] [TTM] Initializing pool allocator. [ 33.052443] [drm] radeon: 512M of VRAM memory ready [ 33.052446] [drm] radeon: 128M of GTT memory ready. [ 33.052497] [drm] radeon: irq initialized. [ 33.052501] [drm] GART: num cpu pages 32768, num gpu pages 32768 [ 33.052687] [drm] Loading RV630 Microcode [ 33.437316] BUG: unable to handle kernel NULL pointer dereference at (null) [ 33.437466] IP: [] __mutex_lock_slowpath+0x9a/0x140 [ 33.437587] *pde = df469067 [ 33.437650] Oops: 0002 [#1] SMP [ 33.437727] last sysfs file: /sys/devices/platform/radeon_cp.0/firmware/radeon_cp.0/loading [ 33.437888] Modules linked in: snd_seq_midi_event radeon(+) snd_seq sbp2 uvcvideo i82875p_edac snd_timer snd_seq_device ieee1394 sunrpc edac_core videodev ttm v4l1_compat drm_kms_helper snd drm i2c_algo_bit snd_page_alloc btusb soundcore intel_agp lp bluetooth agpgart parport shpchp serio_raw hid_logitech ff_memless usbhid hid usb_storage firewire_ohci e1000 firewire_core crc_itu_t [ 33.438742] [ 33.438775] Pid: 353, comm: plymouthd Not tainted 2.6.35-7-generic #11-Ubuntu Canterwood/ [ 33.438934] EIP: 0060:[] EFLAGS: 00010246 CPU: 0 [ 33.439041] EIP is at __mutex_lock_slowpath+0x9a/0x140 [ 33.439141] EAX: 00000000 EBX: f2796e90 ECX: f2796e98 EDX: f6a71ec0 [ 33.439262] ESI: f2796e94 EDI: f2796e90 EBP: f6a71ed8 ESP: f6a71eb4 [ 33.439384] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 33.439488] Process plymouthd (pid: 353, ti=f6a70000 task=c106cc20 task.ti=f6a70000) [ 33.439637] Stack: [ 33.439676] f6a71ec4 c106cc20 f2796e98 f2796e98 00000000 f2796c00 f2796e90 f6b1fb00 [ 33.439862] <0> f2796e90 f6a71ee8 c05cb095 f6b1fb00 f6b1fb00 f6a71efc f87e7dc3 f6b1fb00 [ 33.440063] <0> f6b1fb60 f2796c00 f6a71f44 f87df337 00000001 f87efe25 f87ef220 f87f1590 [ 33.440076] Call Trace: [ 33.440076] [] ? mutex_lock+0x25/0x40 [ 33.440076] [] ? drm_fb_release+0x23/0x70 [drm] [ 33.440076] [] ? drm_release+0x3e7/0x4c0 [drm] [ 33.440076] [] ? __fput+0xdf/0x1f0 [ 33.440076] [] ? fput+0x1d/0x30 [ 33.440076] [] ? filp_close+0x4c/0x80 [ 33.440076] [] ? sys_close+0x75/0xc0 [ 33.440076] [] ? syscall_call+0x7/0xb [ 33.440076] Code: 83 79 18 63 7f b3 8d 76 00 8d 73 04 89 f0 e8 5e 11 00 00 8d 53 08 89 55 e4 8d 55 e8 8b 43 0c 89 53 0c 8b 4d e4 89 45 ec 89 4d e8 <89> 10 8b 45 e0 ba ff ff ff ff 89 45 f0 89 d0 87 03 83 f8 01 74 [ 33.440076] EIP: [] __mutex_lock_slowpath+0x9a/0x140 SS:ESP 0068:f6a71eb4 [ 33.440076] CR2: 0000000000000000 [ 33.442242] ---[ end trace 53be06f38f812f8c ]--- [ 33.534989] [drm] ring test succeeded in 1 usecs [ 33.535510] [drm] radeon: ib pool ready. [ 33.535694] [drm] ib test succeeded in 0 usecs [ 33.535785] [drm] Enabling audio support [ 33.535870] failed to evaluate ATIF got AE_BAD_PARAMETER [ 33.535979] radeon 0000:01:00.0: Error during ACPI methods call [ 33.536528] [drm] Default TV standard: NTSC [ 33.536623] [drm] Default TV standard: NTSC [ 33.536986] [drm] Default TV standard: NTSC [ 33.537582] [drm] Radeon Display Connectors [ 33.537672] [drm] Connector 0: [ 33.537735] [drm] DVI-I [ 33.537790] [drm] HPD1 [ 33.537845] [drm] DDC: 0x7e50 0x7e50 0x7e54 0x7e54 0x7e58 0x7e58 0x7e5c 0x7e5c [ 33.537994] [drm] Encoders: [ 33.538056] [drm] DFP1: INTERNAL_KLDSCP_TMDS1 [ 33.538151] [drm] CRT2: INTERNAL_KLDSCP_DAC2 [ 33.538247] [drm] Connector 1: [ 33.538309] [drm] DIN [ 33.538359] [drm] Encoders: [ 33.538418] [drm] TV1: INTERNAL_KLDSCP_DAC2 [ 33.538510] [drm] Connector 2: [ 33.538573] [drm] DVI-I [ 33.538627] [drm] HPD2 [ 33.538681] [drm] DDC: 0x7e40 0x7e40 0x7e44 0x7e44 0x7e48 0x7e48 0x7e4c 0x7e4c [ 33.538830] [drm] Encoders: [ 33.538890] [drm] CRT1: INTERNAL_KLDSCP_DAC1 [ 33.544571] [drm] DFP2: INTERNAL_LVTM1 [ 33.659456] [drm] Internal thermal controller with fan control [ 33.665086] [drm] radeon: power management initialized [ 34.264177] [drm] fb mappable at 0xE0081000 [ 34.269831] [drm] vram apper at 0xE0000000 [ 34.275368] [drm] size 8294400 [ 34.280589] [drm] fb depth is 24 [ 34.285599] [drm] pitch is 7680 [ 34.290454] checking generic (e0000000 1000000) vs hw (e0000000 20000000) [ 34.295384] fb: conflicting fb hw usage radeondrmfb vs VESA VGA - removing generic driver [ 34.300401] Console: switching to colour dummy device 80x25 [ 34.416407] usbcore: registered new interface driver snd-usb-audio [ 34.477816] ENS1371 0000:03:0e.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 35.916168] Console: switching to colour frame buffer device 160x64 [ 35.948830] fb0: radeondrmfb frame buffer device [ 35.948836] drm: registered panic notifier [ 35.948844] Slow work thread pool: Starting up [ 35.949100] Slow work thread pool: Ready [ 35.949127] [drm] Initialized radeon 2.5.0 20080528 for 0000:01:00.0 on minor 0 [ 35.949862] HDA Intel 0000:01:00.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 35.984072] vga16fb: initializing [ 35.984211] vga16fb: mapped to 0xc00a0000 [ 35.984750] fb1: VGA16 VGA frame buffer device [ 35.985397] EXT3-fs (sda6): using internal journal [ 36.292394] EXT3-fs: barriers not enabled [ 36.292729] kjournald starting. Commit interval 5 seconds [ 36.293023] EXT3-fs (sda2): using internal journal [ 36.293230] EXT3-fs (sda2): mounted filesystem with ordered data mode [ 39.807764] EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts: (null) [ 44.395518] EXT4-fs (dm-3): mounted filesystem with ordered data mode. Opts: (null) [ 46.967894] EXT3-fs: barriers not enabled [ 47.028483] kjournald starting. Commit interval 5 seconds [ 47.037283] EXT3-fs (dm-1): using internal journal [ 47.045546] EXT3-fs (dm-1): mounted filesystem with ordered data mode [ 47.223769] FS-Cache: Loaded [ 47.370597] type=1400 audit(1287437790.959:6): operation="profile_load" pid=1222 name="/usr/share/gdm/guest-session/Xsession" pid=1222 comm="apparmor_parser" [ 47.376643] type=1400 audit(1287437790.963:7): operation="profile_replace" pid=1223 name="/sbin/dhclient3" pid=1223 comm="apparmor_parser" [ 47.377566] type=1400 audit(1287437790.963:8): operation="profile_replace" pid=1223 name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1223 comm="apparmor_parser" [ 47.378039] type=1400 audit(1287437790.963:9): operation="profile_replace" pid=1223 name="/usr/lib/connman/scripts/dhclient-script" pid=1223 comm="apparmor_parser" [ 47.391207] type=1400 audit(1287437790.963:10): operation="profile_load" pid=1224 name="/usr/bin/evince" pid=1224 comm="apparmor_parser" [ 47.402006] type=1400 audit(1287437790.983:11): operation="profile_load" pid=1224 name="/usr/bin/evince-previewer" pid=1224 comm="apparmor_parser" [ 47.408684] type=1400 audit(1287437790.983:12): operation="profile_load" pid=1224 name="/usr/bin/evince-thumbnailer" pid=1224 comm="apparmor_parser" [ 47.523213] FS-Cache: Netfs 'nfs' registered for caching [ 47.588387] type=1400 audit(1287437791.179:13): operation="profile_load" pid=1226 name="/usr/lib/libvirt/virt-aa-helper" pid=1226 comm="apparmor_parser" [ 47.602703] type=1400 audit(1287437791.191:14): operation="profile_load" pid=1242 name="/usr/lib/cups/backend/cups-pdf" pid=1242 comm="apparmor_parser" [ 47.614847] type=1400 audit(1287437791.203:15): operation="profile_load" pid=1242 name="/usr/sbin/cupsd" pid=1242 comm="apparmor_parser" [ 47.730774] Installing knfsd (copyright (C) 1996 okir@monad.swb.de). [ 47.781243] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 47.814996] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX [ 47.855271] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready Bug: 665424 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-22-generic (buildd@allspice) (gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu4) ) #33-Ubuntu SMP Sun Sep 19 20:32:27 UTC 2010 (Ubuntu 2.6.35-22.33-generic 2.6.35.4) [ 0.000000] Command line: file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash -- maybe-ubiquity [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009d000 (usable) [ 0.000000] BIOS-e820: 000000000009d000 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000bb63f000 (usable) [ 0.000000] BIOS-e820: 00000000bb63f000 - 00000000bb6bf000 (reserved) [ 0.000000] BIOS-e820: 00000000bb6bf000 - 00000000bb7bf000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000bb7bf000 - 00000000bb7ff000 (ACPI data) [ 0.000000] BIOS-e820: 00000000bb7ff000 - 00000000bb800000 (usable) [ 0.000000] BIOS-e820: 00000000bb800000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000feb00000 - 00000000feb04000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fed10000 - 00000000fed14000 (reserved) [ 0.000000] BIOS-e820: 00000000fed18000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1b000 - 00000000fed20000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ffe80000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 0000000138000000 (usable) [ 0.000000] Notice: NX (Execute Disable) protection missing in CPU or disabled in BIOS! [ 0.000000] DMI 2.6 present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0x138000 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-EFFFF write-through [ 0.000000] F0000-FFFFF write-combining [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask F80000000 write-back [ 0.000000] 1 base 0FFE80000 mask FFFF80000 write-protect [ 0.000000] 2 base 0FFF00000 mask FFFF00000 write-protect [ 0.000000] 3 base 080000000 mask FC0000000 write-back [ 0.000000] 4 base 0BC000000 mask FFC000000 uncachable [ 0.000000] 5 base 0BB800000 mask FFF800000 uncachable [ 0.000000] 6 base 100000000 mask FC0000000 write-back [ 0.000000] 7 base 138000000 mask FF8000000 uncachable [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] last_pfn = 0xbb800 max_arch_pfn = 0x400000000 [ 0.000000] e820 update range: 0000000000001000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009d000 (usable) [ 0.000000] modified: 000000000009d000 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 00000000bb63f000 (usable) [ 0.000000] modified: 00000000bb63f000 - 00000000bb6bf000 (reserved) [ 0.000000] modified: 00000000bb6bf000 - 00000000bb7bf000 (ACPI NVS) [ 0.000000] modified: 00000000bb7bf000 - 00000000bb7ff000 (ACPI data) [ 0.000000] modified: 00000000bb7ff000 - 00000000bb800000 (usable) [ 0.000000] modified: 00000000bb800000 - 00000000c0000000 (reserved) [ 0.000000] modified: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] modified: 00000000feb00000 - 00000000feb04000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] modified: 00000000fed10000 - 00000000fed14000 (reserved) [ 0.000000] modified: 00000000fed18000 - 00000000fed1a000 (reserved) [ 0.000000] modified: 00000000fed1b000 - 00000000fed20000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000ffe80000 - 0000000100000000 (reserved) [ 0.000000] modified: 0000000100000000 - 0000000138000000 (usable) [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] init_memory_mapping: 0000000000000000-00000000bb800000 [ 0.000000] 0000000000 - 00bb800000 page 2M [ 0.000000] kernel direct mapping tables up to bb800000 @ 16000-1a000 [ 0.000000] init_memory_mapping: 0000000100000000-0000000138000000 [ 0.000000] 0100000000 - 0138000000 page 2M [ 0.000000] kernel direct mapping tables up to 138000000 @ 18000-1e000 [ 0.000000] RAMDISK: 7f4c1000 - 80000000 [ 0.000000] ACPI: RSDP 00000000000fe020 00024 (v02 TOSQCI) [ 0.000000] ACPI: XSDT 00000000bb7fe120 00074 (v01 TOSQCI TOSQCI00 00000001 01000013) [ 0.000000] ACPI: FACP 00000000bb7fc000 000F4 (v04 TOSQCI TOSQCI00 00000001 MSFT 01000013) [ 0.000000] ACPI: DSDT 00000000bb7ed000 0BFF8 (v02 TOSQCI TOSQCI00 00000001 MSFT 01000013) [ 0.000000] ACPI: FACS 00000000bb76e000 00040 [ 0.000000] ACPI: ASF! 00000000bb7fd000 000A5 (v32 TOSQCI TOSQCI00 00000001 MSFT 01000013) [ 0.000000] ACPI: HPET 00000000bb7fb000 00038 (v01 TOSQCI TOSQCI00 00000001 MSFT 01000013) [ 0.000000] ACPI: APIC 00000000bb7fa000 0008C (v02 TOSQCI TOSQCI00 00000001 MSFT 01000013) [ 0.000000] ACPI: MCFG 00000000bb7f9000 0003C (v01 TOSQCI TOSQCI00 00000001 MSFT 01000013) [ 0.000000] ACPI: SLIC 00000000bb7ec000 00176 (v01 TOSQCI TOSQCI00 00000001 MSFT 01000013) [ 0.000000] ACPI: BOOT 00000000bb7e8000 00028 (v01 TOSQCI TOSQCI00 00000001 MSFT 01000013) [ 0.000000] ACPI: ASPT 00000000bb7e5000 00034 (v04 INTEL Calpella 00000001 MSFT 01000013) [ 0.000000] ACPI: WDAT 00000000bb7e4000 00224 (v01 INTEL Calpella 00000001 MSFT 01000013) [ 0.000000] ACPI: SSDT 00000000bb7e3000 009F1 (v01 PmRef CpuPm 00003000 INTL 20051117) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-0000000138000000 [ 0.000000] Initmem setup node 0 0000000000000000-0000000138000000 [ 0.000000] NODE_DATA [0000000100000000 - 0000000100004fff] [ 0.000000] [ffffea0000000000-ffffea00045fffff] PMD -> [ffff880100200000-ffff8801039fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal 0x00100000 -> 0x00138000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[4] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009d [ 0.000000] 0: 0x00000100 -> 0x000bb63f [ 0.000000] 0: 0x000bb7ff -> 0x000bb800 [ 0.000000] 0: 0x00100000 -> 0x00138000 [ 0.000000] On node 0 totalpages: 996813 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3925 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 14280 pages used for memmap [ 0.000000] DMA32 zone: 749176 pages, LIFO batch:31 [ 0.000000] Normal zone: 3136 pages used for memmap [ 0.000000] Normal zone: 226240 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x04] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x05] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x06] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x07] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x08] lapic_id[0x00] disabled) [ 0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 8 CPUs, 6 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [19000 - 197ff] [ 0.000000] PM: Registered nosave memory: 000000000009d000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] PM: Registered nosave memory: 00000000bb63f000 - 00000000bb6bf000 [ 0.000000] PM: Registered nosave memory: 00000000bb6bf000 - 00000000bb7bf000 [ 0.000000] PM: Registered nosave memory: 00000000bb7bf000 - 00000000bb7ff000 [ 0.000000] PM: Registered nosave memory: 00000000bb800000 - 00000000c0000000 [ 0.000000] PM: Registered nosave memory: 00000000c0000000 - 00000000e0000000 [ 0.000000] PM: Registered nosave memory: 00000000e0000000 - 00000000f0000000 [ 0.000000] PM: Registered nosave memory: 00000000f0000000 - 00000000feb00000 [ 0.000000] PM: Registered nosave memory: 00000000feb00000 - 00000000feb04000 [ 0.000000] PM: Registered nosave memory: 00000000feb04000 - 00000000fec00000 [ 0.000000] PM: Registered nosave memory: 00000000fec00000 - 00000000fec01000 [ 0.000000] PM: Registered nosave memory: 00000000fec01000 - 00000000fed10000 [ 0.000000] PM: Registered nosave memory: 00000000fed10000 - 00000000fed14000 [ 0.000000] PM: Registered nosave memory: 00000000fed14000 - 00000000fed18000 [ 0.000000] PM: Registered nosave memory: 00000000fed18000 - 00000000fed1a000 [ 0.000000] PM: Registered nosave memory: 00000000fed1a000 - 00000000fed1b000 [ 0.000000] PM: Registered nosave memory: 00000000fed1b000 - 00000000fed20000 [ 0.000000] PM: Registered nosave memory: 00000000fed20000 - 00000000fee00000 [ 0.000000] PM: Registered nosave memory: 00000000fee00000 - 00000000fee01000 [ 0.000000] PM: Registered nosave memory: 00000000fee01000 - 00000000ffe80000 [ 0.000000] PM: Registered nosave memory: 00000000ffe80000 - 0000000100000000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:20000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:8 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 30 pages/cpu @ffff880001e00000 s91520 r8192 d23168 u262144 [ 0.000000] early_res array is doubled to 128 at [19800 - 1a7ff] [ 0.000000] pcpu-alloc: s91520 r8192 d23168 u262144 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 4 5 6 7 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 979341 [ 0.000000] Policy zone: Normal [ 0.000000] Kernel command line: file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash -- maybe-ubiquity [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Subtract (65 early reservations) [ 0.000000] #1 [0001000000 - 0001d17114] TEXT DATA BSS [ 0.000000] #2 [007f4c1000 - 0080000000] RAMDISK [ 0.000000] #3 [000009d000 - 0000100000] BIOS reserved [ 0.000000] #4 [0001d18000 - 0001d1827a] BRK [ 0.000000] #5 [0000010000 - 0000012000] TRAMPOLINE [ 0.000000] #6 [0000012000 - 0000016000] ACPI WAKEUP [ 0.000000] #7 [0000016000 - 0000018000] PGTABLE [ 0.000000] #8 [0000018000 - 0000019000] PGTABLE [ 0.000000] #9 [0100000000 - 0100005000] NODE_DATA [ 0.000000] #10 [0001d18280 - 0001d19280] BOOTMEM [ 0.000000] #11 [0001d17140 - 0001d17428] BOOTMEM [ 0.000000] #12 [0100005000 - 0100006000] BOOTMEM [ 0.000000] #13 [0100006000 - 0100007000] BOOTMEM [ 0.000000] #14 [0100200000 - 0103a00000] MEMMAP 0 [ 0.000000] #15 [0001d17440 - 0001d175c0] BOOTMEM [ 0.000000] #16 [0001d19280 - 0001d31280] BOOTMEM [ 0.000000] #17 [0001d31280 - 0001d37280] BOOTMEM [ 0.000000] #18 [0001d38000 - 0001d39000] BOOTMEM [ 0.000000] #19 [0001d175c0 - 0001d17601] BOOTMEM [ 0.000000] #20 [0001d17640 - 0001d17683] BOOTMEM [ 0.000000] #21 [0001d176c0 - 0001d17ae8] BOOTMEM [ 0.000000] #22 [0001d17b00 - 0001d17b68] BOOTMEM [ 0.000000] #23 [0001d17b80 - 0001d17be8] BOOTMEM [ 0.000000] #24 [0001d17c00 - 0001d17c68] BOOTMEM [ 0.000000] #25 [0001d17c80 - 0001d17ce8] BOOTMEM [ 0.000000] #26 [0001d17d00 - 0001d17d68] BOOTMEM [ 0.000000] #27 [0001d17d80 - 0001d17de8] BOOTMEM [ 0.000000] #28 [0001d17e00 - 0001d17e68] BOOTMEM [ 0.000000] #29 [0001d17e80 - 0001d17ee8] BOOTMEM [ 0.000000] #30 [0001d17f00 - 0001d17f68] BOOTMEM [ 0.000000] #31 [0001d17f80 - 0001d17fe8] BOOTMEM [ 0.000000] #32 [0001d37280 - 0001d372e8] BOOTMEM [ 0.000000] #33 [0001d37300 - 0001d37368] BOOTMEM [ 0.000000] #34 [0001d37380 - 0001d373e8] BOOTMEM [ 0.000000] #35 [0001d37400 - 0001d37468] BOOTMEM [ 0.000000] #36 [0001d37480 - 0001d374e8] BOOTMEM [ 0.000000] #37 [0001d37500 - 0001d37568] BOOTMEM [ 0.000000] #38 [0001d37580 - 0001d375e8] BOOTMEM [ 0.000000] #39 [0001d37600 - 0001d37668] BOOTMEM [ 0.000000] #40 [0001d37680 - 0001d376a0] BOOTMEM [ 0.000000] #41 [0001d376c0 - 0001d376e0] BOOTMEM [ 0.000000] #42 [0001d37700 - 0001d37720] BOOTMEM [ 0.000000] #43 [0001d37740 - 0001d377a4] BOOTMEM [ 0.000000] #44 [0001d377c0 - 0001d37824] BOOTMEM [ 0.000000] #45 [0001e00000 - 0001e1e000] BOOTMEM [ 0.000000] #46 [0001e40000 - 0001e5e000] BOOTMEM [ 0.000000] #47 [0001e80000 - 0001e9e000] BOOTMEM [ 0.000000] #48 [0001ec0000 - 0001ede000] BOOTMEM [ 0.000000] #49 [0001f00000 - 0001f1e000] BOOTMEM [ 0.000000] #50 [0001f40000 - 0001f5e000] BOOTMEM [ 0.000000] #51 [0001f80000 - 0001f9e000] BOOTMEM [ 0.000000] #52 [0001fc0000 - 0001fde000] BOOTMEM [ 0.000000] #53 [0001d37840 - 0001d37848] BOOTMEM [ 0.000000] #54 [0001d37880 - 0001d37888] BOOTMEM [ 0.000000] #55 [0001d378c0 - 0001d378e0] BOOTMEM [ 0.000000] #56 [0001d37900 - 0001d37940] BOOTMEM [ 0.000000] #57 [0001d37940 - 0001d37a60] BOOTMEM [ 0.000000] #58 [0001d37a80 - 0001d37ac8] BOOTMEM [ 0.000000] #59 [0001d37b00 - 0001d37b48] BOOTMEM [ 0.000000] #60 [0001d39000 - 0001d41000] BOOTMEM [ 0.000000] #61 [0001fde000 - 0005fde000] BOOTMEM [ 0.000000] #62 [0001d41000 - 0001d61000] BOOTMEM [ 0.000000] #63 [0001d61000 - 0001da1000] BOOTMEM [ 0.000000] #64 [000001a800 - 0000022800] BOOTMEM [ 0.000000] Memory: 3837840k/5111808k available (5708k kernel code, 1124556k absent, 149412k reserved, 5382k data, 908k init) [ 0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:4352 nr_irqs:744 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 40632320 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.010000] Detected 1994.914 MHz processor. [ 0.000009] Calibrating delay loop (skipped), value calculated using timer frequency.. 3989.82 BogoMIPS (lpj=19949140) [ 0.000014] pid_max: default: 32768 minimum: 301 [ 0.000037] Security Framework initialized [ 0.000055] AppArmor: AppArmor initialized [ 0.000056] Yama: becoming mindful. [ 0.000520] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.001616] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.002041] Mount-cache hash table entries: 256 [ 0.002163] Initializing cgroup subsys ns [ 0.002168] Initializing cgroup subsys cpuacct [ 0.002172] Initializing cgroup subsys memory [ 0.002180] Initializing cgroup subsys devices [ 0.002182] Initializing cgroup subsys freezer [ 0.002185] Initializing cgroup subsys net_cls [ 0.002209] CPU: Physical Processor ID: 0 [ 0.002210] CPU: Processor Core ID: 0 [ 0.002216] mce: CPU supports 9 MCE banks [ 0.002227] CPU0: Thermal monitoring handled by SMI [ 0.002235] using mwait in idle threads. [ 0.002237] Performance Events: PEBS fmt1+, Westmere events, Intel PMU driver. [ 0.002246] ... version: 3 [ 0.002247] ... bit width: 48 [ 0.002249] ... generic registers: 4 [ 0.002251] ... value mask: 0000ffffffffffff [ 0.002252] ... max period: 000000007fffffff [ 0.002254] ... fixed-purpose events: 3 [ 0.002255] ... event mask: 000000070000000f [ 0.004707] ACPI: Core revision 20100428 [ 0.047035] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.047040] ftrace: allocating 22680 entries in 89 pages [ 0.055631] Setting APIC routing to flat [ 0.056044] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.155994] CPU0: Intel(R) Pentium(R) CPU P6100 @ 2.00GHz stepping 05 [ 0.273195] Booting Node 0, Processors #1 [ 0.433002] CPU1: Thermal monitoring handled by SMI [ 0.453047] Brought up 2 CPUs [ 0.453050] Total of 2 processors activated (7979.81 BogoMIPS). [ 0.453723] devtmpfs: initialized [ 0.454849] regulator: core version 0.5 [ 0.454880] Time: 6:27:32 Date: 10/22/10 [ 0.454919] NET: Registered protocol family 16 [ 0.454995] Trying to unpack rootfs image as initramfs... [ 0.455044] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it [ 0.455047] ACPI: bus type pci registered [ 0.455129] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.455133] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.496811] PCI: Using configuration type 1 for base access [ 1.452641] bio: create slab at 0 [ 1.455465] ACPI: EC: Look up EC in DSDT [ 1.458442] ACPI: Executed 1 blocks of module-level executable AML code [ 1.464327] ACPI: BIOS _OSI(Linux) query ignored [ 1.467249] ACPI: SSDT 00000000bb691c18 0037E (v01 PmRef Cpu0Ist 00003000 INTL 20051117) [ 1.467956] ACPI: Dynamic OEM Table Load: [ 1.467959] ACPI: SSDT (null) 0037E (v01 PmRef Cpu0Ist 00003000 INTL 20051117) [ 1.468466] ACPI: SSDT 00000000bb68f018 00891 (v01 PmRef Cpu0Cst 00003001 INTL 20051117) [ 1.469177] ACPI: Dynamic OEM Table Load: [ 1.469180] ACPI: SSDT (null) 00891 (v01 PmRef Cpu0Cst 00003001 INTL 20051117) [ 1.469945] ACPI: SSDT 00000000bb690a98 00303 (v01 PmRef ApIst 00003000 INTL 20051117) [ 1.470739] ACPI: Dynamic OEM Table Load: [ 1.470742] ACPI: SSDT (null) 00303 (v01 PmRef ApIst 00003000 INTL 20051117) [ 1.471027] ACPI: SSDT 00000000bb68ed98 00119 (v01 PmRef ApCst 00003000 INTL 20051117) [ 1.471772] ACPI: Dynamic OEM Table Load: [ 1.471775] ACPI: SSDT (null) 00119 (v01 PmRef ApCst 00003000 INTL 20051117) [ 1.472160] ACPI: Interpreter enabled [ 1.472163] ACPI: (supports S0 S3 S4 S5) [ 1.472203] ACPI: Using IOAPIC for interrupt routing [ 1.484998] ACPI: EC: GPE = 0x1e, I/O: command/status = 0x66, data = 0x62 [ 1.485782] ACPI: ACPI Dock Station Driver: 1 docks/bays found [ 1.485786] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 1.486885] \_SB_.PCI0:_OSC invalid UUID [ 1.486887] _OSC request data:1 8 1f [ 1.486891] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-fe]) [ 1.488510] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 1.488513] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 1.488516] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 1.488519] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xfeafffff] [ 1.488576] pci 0000:00:02.0: reg 10: [mem 0xd0000000-0xd03fffff 64bit] [ 1.488582] pci 0000:00:02.0: reg 18: [mem 0xc0000000-0xcfffffff 64bit pref] [ 1.488586] pci 0000:00:02.0: reg 20: [io 0x5050-0x5057] [ 1.488674] pci 0000:00:16.0: reg 10: [mem 0xd6406100-0xd640610f 64bit] [ 1.488735] pci 0000:00:16.0: PME# supported from D0 D3hot D3cold [ 1.488741] pci 0000:00:16.0: PME# disabled [ 1.488803] pci 0000:00:1a.0: reg 10: [mem 0xd6405c00-0xd6405fff] [ 1.488871] pci 0000:00:1a.0: PME# supported from D0 D3hot D3cold [ 1.488876] pci 0000:00:1a.0: PME# disabled [ 1.488922] pci 0000:00:1b.0: reg 10: [mem 0xd6400000-0xd6403fff 64bit] [ 1.488983] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 1.488988] pci 0000:00:1b.0: PME# disabled [ 1.489084] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 1.489089] pci 0000:00:1c.0: PME# disabled [ 1.489190] pci 0000:00:1c.4: PME# supported from D0 D3hot D3cold [ 1.489195] pci 0000:00:1c.4: PME# disabled [ 1.489291] pci 0000:00:1c.5: PME# supported from D0 D3hot D3cold [ 1.489296] pci 0000:00:1c.5: PME# disabled [ 1.489354] pci 0000:00:1d.0: reg 10: [mem 0xd6405800-0xd6405bff] [ 1.489420] pci 0000:00:1d.0: PME# supported from D0 D3hot D3cold [ 1.489425] pci 0000:00:1d.0: PME# disabled [ 1.489632] pci 0000:00:1f.2: reg 10: [io 0x5048-0x504f] [ 1.489639] pci 0000:00:1f.2: reg 14: [io 0x505c-0x505f] [ 1.489647] pci 0000:00:1f.2: reg 18: [io 0x5040-0x5047] [ 1.489654] pci 0000:00:1f.2: reg 1c: [io 0x5058-0x505b] [ 1.489662] pci 0000:00:1f.2: reg 20: [io 0x5020-0x503f] [ 1.489670] pci 0000:00:1f.2: reg 24: [mem 0xd6405000-0xd64057ff] [ 1.489715] pci 0000:00:1f.2: PME# supported from D3hot [ 1.489720] pci 0000:00:1f.2: PME# disabled [ 1.489759] pci 0000:00:1f.3: reg 10: [mem 0xd6406000-0xd64060ff 64bit] [ 1.489778] pci 0000:00:1f.3: reg 20: [io 0x5000-0x501f] [ 1.489841] pci 0000:00:1f.6: reg 10: [mem 0xd6404000-0xd6404fff 64bit] [ 1.489964] pci 0000:00:1c.0: PCI bridge to [bus 01-01] [ 1.489970] pci 0000:00:1c.0: bridge window [io 0x4000-0x4fff] [ 1.489975] pci 0000:00:1c.0: bridge window [mem 0xd5400000-0xd63fffff] [ 1.489983] pci 0000:00:1c.0: bridge window [mem 0xd0400000-0xd13fffff 64bit pref] [ 1.490088] pci 0000:02:00.0: reg 10: [io 0x3000-0x30ff] [ 1.490117] pci 0000:02:00.0: reg 18: [mem 0xd4400000-0xd4403fff 64bit] [ 1.490197] pci 0000:02:00.0: supports D1 D2 [ 1.490199] pci 0000:02:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 1.490207] pci 0000:02:00.0: PME# disabled [ 1.490242] pci 0000:00:1c.4: PCI bridge to [bus 02-02] [ 1.490247] pci 0000:00:1c.4: bridge window [io 0x3000-0x3fff] [ 1.490252] pci 0000:00:1c.4: bridge window [mem 0xd4400000-0xd53fffff] [ 1.490259] pci 0000:00:1c.4: bridge window [mem 0xd1400000-0xd23fffff 64bit pref] [ 1.490362] pci 0000:03:00.0: reg 10: [mem 0xd3400000-0xd343ffff 64bit] [ 1.490372] pci 0000:03:00.0: reg 18: [io 0x2000-0x207f] [ 1.490448] pci 0000:03:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 1.490454] pci 0000:03:00.0: PME# disabled [ 1.490484] pci 0000:03:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 1.490487] pci 0000:00:1c.5: PCI bridge to [bus 03-03] [ 1.490492] pci 0000:00:1c.5: bridge window [io 0x2000-0x2fff] [ 1.490497] pci 0000:00:1c.5: bridge window [mem 0xd3400000-0xd43fffff] [ 1.490504] pci 0000:00:1c.5: bridge window [mem 0xd2400000-0xd33fffff 64bit pref] [ 1.490581] pci 0000:00:1e.0: PCI bridge to [bus 04-04] (subtractive decode) [ 1.490586] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 1.490592] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 1.490600] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 1.490602] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 1.490605] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 1.490607] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 1.490609] pci 0000:00:1e.0: bridge window [mem 0xc0000000-0xfeafffff] (subtractive decode) [ 1.490643] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 1.490911] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P1._PRT] [ 1.491151] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP01._PRT] [ 1.491309] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP05._PRT] [ 1.491670] \_SB_.PCI0:_OSC invalid UUID [ 1.491672] _OSC request data:1 19 1f [ 1.514447] ACPI: PCI Root Bridge [CPBG] (domain 0000 [bus ff]) [ 1.515094] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 5 6 7 *10 12 14 15) [ 1.515275] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 7 *11 12 14 15) [ 1.515453] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled. [ 1.515632] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 1.515810] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled. [ 1.515988] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 *11 12 14 15) [ 1.516166] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 7 *10 12 14 15) [ 1.516345] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 5 6 7 *11 12 14 15) [ 1.516427] HEST: Table is not found! [ 1.516502] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 1.516513] vgaarb: loaded [ 1.516643] SCSI subsystem initialized [ 1.516717] libata version 3.00 loaded. [ 1.516766] usbcore: registered new interface driver usbfs [ 1.516776] usbcore: registered new interface driver hub [ 1.516797] usbcore: registered new device driver usb [ 1.517009] ACPI: WMI: Mapper loaded [ 1.517011] PCI: Using ACPI for IRQ routing [ 1.517013] PCI: pci_cache_line_size set to 64 bytes [ 1.517107] reserve RAM buffer: 000000000009d000 - 000000000009ffff [ 1.517110] reserve RAM buffer: 00000000bb63f000 - 00000000bbffffff [ 1.517112] reserve RAM buffer: 00000000bb800000 - 00000000bbffffff [ 1.517201] NetLabel: Initializing [ 1.517203] NetLabel: domain hash size = 128 [ 1.517204] NetLabel: protocols = UNLABELED CIPSOv4 [ 1.517221] NetLabel: unlabeled traffic allowed by default [ 1.517258] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0, 0, 0, 0, 0 [ 1.517265] hpet0: 8 comparators, 64-bit 14.318180 MHz counter [ 1.519284] Switching to clocksource tsc [ 2.454034] AppArmor: AppArmor Filesystem Enabled [ 2.454053] pnp: PnP ACPI init [ 2.454076] ACPI: bus type pnp registered [ 2.458027] pnp: PnP ACPI: found 11 devices [ 2.458030] ACPI: ACPI bus type pnp unregistered [ 2.458049] system 00:05: [io 0x0680-0x069f] has been reserved [ 2.458052] system 00:05: [io 0x0800-0x080f] has been reserved [ 2.458054] system 00:05: [io 0x0810-0x0813] has been reserved [ 2.458057] system 00:05: [io 0xffff] has been reserved [ 2.458060] system 00:05: [io 0x0400-0x047f] has been reserved [ 2.458062] system 00:05: [io 0x0500-0x057f] has been reserved [ 2.458065] system 00:05: [io 0x164e-0x164f] has been reserved [ 2.458074] system 00:09: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 2.458076] system 00:09: [mem 0xfed10000-0xfed13fff] has been reserved [ 2.458079] system 00:09: [mem 0xfed18000-0xfed18fff] has been reserved [ 2.458082] system 00:09: [mem 0xfed19000-0xfed19fff] has been reserved [ 2.458086] system 00:09: [mem 0xe0000000-0xefffffff] has been reserved [ 2.458089] system 00:09: [mem 0xfed20000-0xfed3ffff] has been reserved [ 2.458091] system 00:09: [mem 0xfed45000-0xfed8ffff] has been reserved [ 2.458094] system 00:09: [mem 0xff000000-0xffffffff] could not be reserved [ 2.458097] system 00:09: [mem 0xfee00000-0xfeefffff] could not be reserved [ 2.458099] system 00:09: [mem 0xd6500000-0xd6500fff] has been reserved [ 2.458102] system 00:09: [mem 0xff808000-0xff8080ff] has been reserved [ 2.463974] pci 0000:00:1c.0: PCI bridge to [bus 01-01] [ 2.463981] pci 0000:00:1c.0: bridge window [io 0x4000-0x4fff] [ 2.463987] pci 0000:00:1c.0: bridge window [mem 0xd5400000-0xd63fffff] [ 2.463993] pci 0000:00:1c.0: bridge window [mem 0xd0400000-0xd13fffff 64bit pref] [ 2.464002] pci 0000:00:1c.4: PCI bridge to [bus 02-02] [ 2.464005] pci 0000:00:1c.4: bridge window [io 0x3000-0x3fff] [ 2.464011] pci 0000:00:1c.4: bridge window [mem 0xd4400000-0xd53fffff] [ 2.464017] pci 0000:00:1c.4: bridge window [mem 0xd1400000-0xd23fffff 64bit pref] [ 2.464025] pci 0000:00:1c.5: PCI bridge to [bus 03-03] [ 2.464029] pci 0000:00:1c.5: bridge window [io 0x2000-0x2fff] [ 2.464035] pci 0000:00:1c.5: bridge window [mem 0xd3400000-0xd43fffff] [ 2.464040] pci 0000:00:1c.5: bridge window [mem 0xd2400000-0xd33fffff 64bit pref] [ 2.464049] pci 0000:00:1e.0: PCI bridge to [bus 04-04] [ 2.464050] pci 0000:00:1e.0: bridge window [io disabled] [ 2.464056] pci 0000:00:1e.0: bridge window [mem disabled] [ 2.464061] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 2.464085] alloc irq_desc for 17 on node -1 [ 2.464087] alloc kstat_irqs on node -1 [ 2.464096] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 2.464102] pci 0000:00:1c.0: setting latency timer to 64 [ 2.464114] pci 0000:00:1c.4: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 2.464119] pci 0000:00:1c.4: setting latency timer to 64 [ 2.464130] alloc irq_desc for 16 on node -1 [ 2.464131] alloc kstat_irqs on node -1 [ 2.464135] pci 0000:00:1c.5: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 2.464140] pci 0000:00:1c.5: setting latency timer to 64 [ 2.464149] pci 0000:00:1e.0: setting latency timer to 64 [ 2.464154] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 2.464156] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 2.464159] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 2.464161] pci_bus 0000:00: resource 7 [mem 0xc0000000-0xfeafffff] [ 2.464163] pci_bus 0000:01: resource 0 [io 0x4000-0x4fff] [ 2.464165] pci_bus 0000:01: resource 1 [mem 0xd5400000-0xd63fffff] [ 2.464167] pci_bus 0000:01: resource 2 [mem 0xd0400000-0xd13fffff 64bit pref] [ 2.464169] pci_bus 0000:02: resource 0 [io 0x3000-0x3fff] [ 2.464171] pci_bus 0000:02: resource 1 [mem 0xd4400000-0xd53fffff] [ 2.464173] pci_bus 0000:02: resource 2 [mem 0xd1400000-0xd23fffff 64bit pref] [ 2.464176] pci_bus 0000:03: resource 0 [io 0x2000-0x2fff] [ 2.464178] pci_bus 0000:03: resource 1 [mem 0xd3400000-0xd43fffff] [ 2.464180] pci_bus 0000:03: resource 2 [mem 0xd2400000-0xd33fffff 64bit pref] [ 2.464182] pci_bus 0000:04: resource 4 [io 0x0000-0x0cf7] [ 2.464184] pci_bus 0000:04: resource 5 [io 0x0d00-0xffff] [ 2.464186] pci_bus 0000:04: resource 6 [mem 0x000a0000-0x000bffff] [ 2.464188] pci_bus 0000:04: resource 7 [mem 0xc0000000-0xfeafffff] [ 2.464232] NET: Registered protocol family 2 [ 2.464409] IP route cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 2.465593] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 2.467710] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 2.467963] TCP: Hash tables configured (established 524288 bind 65536) [ 2.467965] TCP reno registered [ 2.467978] UDP hash table entries: 2048 (order: 4, 65536 bytes) [ 2.468008] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) [ 2.468136] NET: Registered protocol family 1 [ 2.468153] pci 0000:00:02.0: Boot video device [ 2.505744] PCI: CLS 64 bytes, default 64 [ 2.505749] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) [ 2.505752] Placing 64MB software IO TLB between ffff880001fde000 - ffff880005fde000 [ 2.505754] software IO TLB at phys 0x1fde000 - 0x5fde000 [ 2.505794] Simple Boot Flag at 0x44 set to 0x1 [ 2.505982] Scanning for low memory corruption every 60 seconds [ 2.506122] audit: initializing netlink socket (disabled) [ 2.506135] type=2000 audit(1287728854.380:1): initialized [ 2.522312] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 2.523718] VFS: Disk quotas dquot_6.5.2 [ 2.523776] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 2.524355] fuse init (API version 7.14) [ 2.524439] msgmni has been set to 7495 [ 2.524793] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 2.524796] io scheduler noop registered [ 2.524797] io scheduler deadline registered [ 2.524837] io scheduler cfq registered (default) [ 2.524941] pcieport 0000:00:1c.0: setting latency timer to 64 [ 2.524990] alloc irq_desc for 40 on node -1 [ 2.524991] alloc kstat_irqs on node -1 [ 2.525006] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 2.525100] pcieport 0000:00:1c.4: setting latency timer to 64 [ 2.525144] alloc irq_desc for 41 on node -1 [ 2.525146] alloc kstat_irqs on node -1 [ 2.525155] pcieport 0000:00:1c.4: irq 41 for MSI/MSI-X [ 2.525243] pcieport 0000:00:1c.5: setting latency timer to 64 [ 2.525287] alloc irq_desc for 42 on node -1 [ 2.525289] alloc kstat_irqs on node -1 [ 2.525297] pcieport 0000:00:1c.5: irq 42 for MSI/MSI-X [ 2.525394] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 2.525587] \_SB_.PCI0:_OSC invalid UUID [ 2.525589] _OSC request data:1 0 1f [ 2.525766] \_SB_.PCI0:_OSC invalid UUID [ 2.525768] _OSC request data:1 0 1f [ 2.525932] \_SB_.PCI0:_OSC invalid UUID [ 2.525934] _OSC request data:1 0 1f [ 2.526112] \_SB_.PCI0:_OSC invalid UUID [ 2.526113] _OSC request data:1 0 1f [ 2.526275] \_SB_.PCI0:_OSC invalid UUID [ 2.526277] _OSC request data:1 0 1f [ 2.526439] \_SB_.PCI0:_OSC invalid UUID [ 2.526441] _OSC request data:1 0 1f [ 2.526479] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 2.526551] intel_idle: MWAIT substates: 0x120 [ 2.526553] intel_idle: v0.4 model 0x25 [ 2.526554] intel_idle: lapic_timer_reliable_states 0xffffffff [ 2.526737] ACPI: AC Adapter [ACAD] (on-line) [ 2.526805] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 2.526811] ACPI: Power Button [PWRB] [ 2.526846] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input1 [ 2.526972] ACPI: Lid Switch [LID] [ 2.527015] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2 [ 2.527018] ACPI: Power Button [PWRF] [ 2.528046] ACPI: acpi_idle yielding to intel_idle [ 3.248714] ERST: Table is not found! [ 3.249104] Linux agpgart interface v0.103 [ 3.249130] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 3.250384] brd: module loaded [ 3.250859] loop: module loaded [ 3.251334] Fixed MDIO Bus: probed [ 3.251362] PPP generic driver version 2.4.2 [ 3.251398] tun: Universal TUN/TAP device driver, 1.6 [ 3.251400] tun: (C) 1999-2004 Max Krasnyansky [ 3.251473] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 3.251502] ehci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 3.251546] ehci_hcd 0000:00:1a.0: setting latency timer to 64 [ 3.251550] ehci_hcd 0000:00:1a.0: EHCI Host Controller [ 3.251586] ehci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 1 [ 3.251623] ehci_hcd 0000:00:1a.0: debug port 2 [ 3.255566] ehci_hcd 0000:00:1a.0: cache line size of 64 is not supported [ 3.255589] ehci_hcd 0000:00:1a.0: irq 16, io mem 0xd6405c00 [ 3.259602] ACPI: Battery Slot [BAT1] (battery absent) [ 3.262792] Freeing initrd memory: 11516k freed [ 3.275288] ehci_hcd 0000:00:1a.0: USB 2.0 started, EHCI 1.00 [ 3.275463] hub 1-0:1.0: USB hub found [ 3.275469] hub 1-0:1.0: 3 ports detected [ 3.275551] alloc irq_desc for 23 on node -1 [ 3.275553] alloc kstat_irqs on node -1 [ 3.275561] ehci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 3.275588] ehci_hcd 0000:00:1d.0: setting latency timer to 64 [ 3.275593] ehci_hcd 0000:00:1d.0: EHCI Host Controller [ 3.275632] ehci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2 [ 3.275666] ehci_hcd 0000:00:1d.0: debug port 2 [ 3.279603] ehci_hcd 0000:00:1d.0: cache line size of 64 is not supported [ 3.279623] ehci_hcd 0000:00:1d.0: irq 23, io mem 0xd6405800 [ 3.295239] ehci_hcd 0000:00:1d.0: USB 2.0 started, EHCI 1.00 [ 3.295366] hub 2-0:1.0: USB hub found [ 3.295369] hub 2-0:1.0: 3 ports detected [ 3.295428] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 3.295442] uhci_hcd: USB Universal Host Controller Interface driver [ 3.295561] PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 3.297562] i8042.c: Detected active multiplexing controller, rev 1.1. [ 3.299906] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 3.299912] serio: i8042 AUX0 port at 0x60,0x64 irq 12 [ 3.299915] serio: i8042 AUX1 port at 0x60,0x64 irq 12 [ 3.299917] serio: i8042 AUX2 port at 0x60,0x64 irq 12 [ 3.299920] serio: i8042 AUX3 port at 0x60,0x64 irq 12 [ 3.299989] mice: PS/2 mouse device common for all mice [ 3.300105] rtc_cmos 00:06: RTC can wake from S4 [ 3.300142] rtc_cmos 00:06: rtc core: registered rtc_cmos as rtc0 [ 3.300173] rtc0: alarms up to one year, y3k, 242 bytes nvram, hpet irqs [ 3.300265] device-mapper: uevent: version 1.0.3 [ 3.300369] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 3.300435] device-mapper: multipath: version 1.1.1 loaded [ 3.300438] device-mapper: multipath round-robin: version 1.0.0 loaded [ 3.300623] cpuidle: using governor ladder [ 3.300685] cpuidle: using governor menu [ 3.300961] TCP cubic registered [ 3.301079] NET: Registered protocol family 10 [ 3.301425] lo: Disabled Privacy Extensions [ 3.301619] NET: Registered protocol family 17 [ 3.302820] PM: Resume from disk failed. [ 3.302831] registered taskstats version 1 [ 3.303183] Magic number: 14:238:469 [ 3.303314] rtc_cmos 00:06: setting system clock to 2010-10-22 06:27:35 UTC (1287728855) [ 3.303317] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 3.303319] EDD information not available. [ 3.303404] Freeing unused kernel memory: 908k freed [ 3.303589] Write protecting the kernel read-only data: 10240k [ 3.303806] Freeing unused kernel memory: 416k freed [ 3.304068] Freeing unused kernel memory: 1644k freed [ 3.326447] udev[81]: starting version 163 [ 3.329173] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3 [ 3.413581] agpgart-intel 0000:00:00.0: Intel HD Graphics Chipset [ 3.414449] agpgart-intel 0000:00:00.0: detected 32764K stolen memory [ 3.486066] atl1c 0000:03:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 3.486079] atl1c 0000:03:00.0: setting latency timer to 64 [ 3.493601] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xc0000000 [ 3.493630] ahci 0000:00:1f.2: version 3.0 [ 3.493646] alloc irq_desc for 19 on node -1 [ 3.493648] alloc kstat_irqs on node -1 [ 3.493657] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 3.493694] alloc irq_desc for 43 on node -1 [ 3.493696] alloc kstat_irqs on node -1 [ 3.493706] ahci 0000:00:1f.2: irq 43 for MSI/MSI-X [ 3.493795] ahci 0000:00:1f.2: AHCI 0001.0300 32 slots 4 ports 3 Gbps 0x33 impl SATA mode [ 3.493799] ahci 0000:00:1f.2: flags: 64bit ncq sntf ilck pm led clo pio slum part ems sxs apst [ 3.493804] ahci 0000:00:1f.2: setting latency timer to 64 [ 3.513953] [drm] Initialized drm 1.1.0 20060810 [ 3.554958] scsi0 : ahci [ 3.555155] scsi1 : ahci [ 3.555209] scsi2 : ahci [ 3.555262] scsi3 : ahci [ 3.555314] scsi4 : ahci [ 3.555366] scsi5 : ahci [ 3.555410] ata1: SATA max UDMA/133 abar m2048@0xd6405000 port 0xd6405100 irq 43 [ 3.555414] ata2: SATA max UDMA/133 abar m2048@0xd6405000 port 0xd6405180 irq 43 [ 3.555416] ata3: DUMMY [ 3.555417] ata4: DUMMY [ 3.555421] ata5: SATA max UDMA/133 abar m2048@0xd6405000 port 0xd6405300 irq 43 [ 3.555424] ata6: SATA max UDMA/133 abar m2048@0xd6405000 port 0xd6405380 irq 43 [ 3.555483] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 3.555487] i915 0000:00:02.0: setting latency timer to 64 [ 3.610096] mtrr: no more MTRRs available [ 3.610099] [drm] MTRR allocation failed. Graphics performance may suffer. [ 3.610291] alloc irq_desc for 44 on node -1 [ 3.610297] alloc kstat_irqs on node -1 [ 3.610313] i915 0000:00:02.0: irq 44 for MSI/MSI-X [ 3.610328] [drm] set up 31M of stolen space [ 3.614451] usb 1-1: new high speed USB device using ehci_hcd and address 2 [ 3.666087] atl1c 0000:03:00.0: version 1.0.0.2-NAPI [ 3.721975] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=io+mem,decodes=io+mem:owns=io+mem [ 3.765137] hub 1-1:1.0: USB hub found [ 3.765281] hub 1-1:1.0: 6 ports detected [ 3.884922] usb 2-1: new high speed USB device using ehci_hcd and address 2 [ 3.904922] ata6: SATA link down (SStatus 0 SControl 300) [ 3.904972] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 3.905015] ata5: SATA link down (SStatus 0 SControl 300) [ 3.905065] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 3.906123] ata1.00: ATA-8: Hitachi HTS545032B9A300, PB3OC64G, max UDMA/133 [ 3.906126] ata1.00: 625142448 sectors, multi 0: LBA48 NCQ (depth 31/32), AA [ 3.906790] ata2.00: ATAPI: MATSHITADVD-RAM UJ890AS, 1.40, max UDMA/100 [ 3.907385] ata1.00: configured for UDMA/133 [ 3.909654] ata2.00: configured for UDMA/100 [ 3.925022] scsi 0:0:0:0: Direct-Access ATA Hitachi HTS54503 PB3O PQ: 0 ANSI: 5 [ 3.925148] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 3.925336] sd 0:0:0:0: [sda] 625142448 512-byte logical blocks: (320 GB/298 GiB) [ 3.925382] sd 0:0:0:0: [sda] Write Protect is off [ 3.925385] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 3.925404] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 3.925530] sda: [ 3.928048] scsi 1:0:0:0: CD-ROM MATSHITA DVD-RAM UJ890AS 1.40 PQ: 0 ANSI: 5 [ 3.930621] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 3.930625] Uniform CD-ROM driver Revision: 3.20 [ 3.930720] sr 1:0:0:0: Attached scsi CD-ROM sr0 [ 3.930769] sr 1:0:0:0: Attached scsi generic sg1 type 5 [ 3.950760] sda1 sda2 < sda5 > [ 3.986010] sd 0:0:0:0: [sda] Attached SCSI disk [ 4.035475] hub 2-1:1.0: USB hub found [ 4.035619] hub 2-1:1.0: 8 ports detected [ 4.076394] Skipping EDID probe due to cached edid [ 4.114987] usb 1-1.2: new low speed USB device using ehci_hcd and address 3 [ 4.242086] usbcore: registered new interface driver hiddev [ 4.244706] input: PS/2+USB Mouse as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/input/input4 [ 4.244881] generic-usb 0003:04F3:0212.0001: input,hidraw0: USB HID v1.11 Mouse [PS/2+USB Mouse] on usb-0000:00:1a.0-1.2/input0 [ 4.245001] usbcore: registered new interface driver usbhid [ 4.245003] usbhid: USB HID core driver [ 4.455426] Console: switching to colour frame buffer device 170x48 [ 4.458763] fb0: inteldrmfb frame buffer device [ 4.458764] drm: registered panic notifier [ 4.458768] Slow work thread pool: Starting up [ 4.458838] Slow work thread pool: Ready [ 4.464112] acpi device:01: registered as cooling_device2 [ 4.465064] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input5 [ 4.465103] ACPI: Video Device [GFX0] (multi-head: yes rom: no post: no) [ 4.465153] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 4.524156] usb 2-1.4: new high speed USB device using ehci_hcd and address 3 [ 4.910636] Initializing USB Mass Storage driver... [ 4.910734] scsi6 : usb-storage 2-1.4:1.0 [ 4.910808] usbcore: registered new interface driver usb-storage [ 4.910810] USB Mass Storage support registered. [ 5.802487] Skipping EDID probe due to cached edid [ 5.904745] Btrfs loaded [ 5.906649] scsi 6:0:0:0: Direct-Access Generic- Multi-Card 1.00 PQ: 0 ANSI: 0 CCS [ 5.907458] sd 6:0:0:0: Attached scsi generic sg2 type 0 [ 5.910717] xor: automatically using best checksumming function: generic_sse [ 5.912619] sd 6:0:0:0: [sdb] Attached SCSI removable disk [ 5.953041] generic_sse: 7571.600 MB/sec [ 5.953043] xor: using function: generic_sse (7571.600 MB/sec) [ 5.955764] device-mapper: dm-raid45: initialized v0.2594b [ 6.161510] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 8.581823] ISO 9660 Extensions: Microsoft Joliet Level 3 [ 8.677985] ISO 9660 Extensions: RRIP_1991A [ 8.987512] aufs 2-standalone.tree-35-rcN-20100705 [ 9.120509] squashfs: version 4.0 (2009/01/31) Phillip Lougher [ 86.748713] Adding 11287548k swap on /dev/sda5. Priority:-1 extents:1 across:11287548k [ 89.100451] udev[1390]: starting version 163 [ 95.234188] intel ips 0000:00:1f.6: No CPUID match found. [ 95.234201] BUG: unable to handle kernel NULL pointer dereference at 0000000000000008 [ 95.234206] IP: [] ips_detect_cpu+0x76/0x1d0 [intel_ips] [ 95.234213] PGD 130ef4067 PUD 130ef3067 PMD 0 [ 95.234217] Oops: 0000 [#1] SMP [ 95.234220] last sysfs file: /sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/input/input4/name [ 95.234224] CPU 1 [ 95.234225] Modules linked in: intel_ips(+) serio_raw snd_page_alloc squashfs aufs nls_cp437 isofs dm_raid45 xor btrfs zlib_deflate crc32c libcrc32c usb_storage usbhid hid i915 drm_kms_helper drm atl1c ahci intel_agp i2c_algo_bit video output libahci [ 95.234244] [ 95.234248] Pid: 1463, comm: modprobe Not tainted 2.6.35-22-generic #33-Ubuntu Base Board Product Name/Satellite L655 [ 95.234251] RIP: 0010:[] [] ips_detect_cpu+0x76/0x1d0 [intel_ips] [ 95.234256] RSP: 0018:ffff88012d92bc48 EFLAGS: 00010202 [ 95.234258] RAX: 0000000000c800c8 RBX: 0000000000000000 RCX: 0000000000c800c8 [ 95.234260] RDX: 0000000000000000 RSI: ffff88012d92bc64 RDI: 0000000000c800c8 [ 95.234262] RBP: ffff88012d92bc88 R08: 0000000000000000 R09: 0000000000000000 [ 95.234264] R10: 0000000000000000 R11: 0000000000000002 R12: 0000000000c800c8 [ 95.234266] R13: ffff8801303a90c0 R14: ffff880131703090 R15: 00000000fffffff4 [ 95.234269] FS: 00007ff77fdc8700(0000) GS:ffff880001e40000(0000) knlGS:0000000000000000 [ 95.234271] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 95.234273] CR2: 0000000000000008 CR3: 000000012e690000 CR4: 00000000000006e0 [ 95.234276] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 95.234278] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 95.234280] Process modprobe (pid: 1463, threadinfo ffff88012d92a000, task ffff880130ee16e0) [ 95.234282] Stack: [ 95.234284] ffff88012d92bc88 ffffffff81142fa4 ffff88012d92bc78 0000000031703000 [ 95.234287] <0> ffff880131703000 ffff8801303a90c0 ffff880131703000 00000000fffffff4 [ 95.234291] <0> ffff88012d92bcd8 ffffffffa012dfb1 ffff88012d92bcb8 ffff8801321edb90 [ 95.234295] Call Trace: [ 95.234302] [] ? kmem_cache_alloc_notrace+0xb4/0xd0 [ 95.234306] [] ips_probe+0x71/0x710 [intel_ips] [ 95.234312] [] local_pci_probe+0x17/0x20 [ 95.234316] [] __pci_device_probe+0xe9/0xf0 [ 95.234322] [] ? kobject_get+0x1a/0x30 [ 95.234329] [] ? get_device+0x19/0x20 [ 95.234332] [] pci_device_probe+0x3a/0x60 [ 95.234336] [] really_probe+0x68/0x190 [ 95.234339] [] driver_probe_device+0x45/0x70 [ 95.234341] [] __driver_attach+0x9b/0xa0 [ 95.234344] [] ? __driver_attach+0x0/0xa0 [ 95.234347] [] bus_for_each_dev+0x68/0x90 [ 95.234350] [] driver_attach+0x1e/0x20 [ 95.234353] [] bus_add_driver+0xde/0x280 [ 95.234355] [] driver_register+0x80/0x150 [ 95.234361] [] ? notifier_call_chain+0x56/0x80 [ 95.234365] [] __pci_register_driver+0x56/0xd0 [ 95.234370] [] ? __blocking_notifier_call_chain+0x65/0x80 [ 95.234374] [] ? ips_init+0x0/0x20 [intel_ips] [ 95.234378] [] ips_init+0x1e/0x20 [intel_ips] [ 95.234383] [] do_one_initcall+0x3c/0x1a0 [ 95.234389] [] sys_init_module+0xbb/0x200 [ 95.234395] [] system_call_fastpath+0x16/0x1b [ 95.234397] Code: a0 48 c7 c7 88 ec ac 81 48 c7 c3 80 fa 12 a0 e8 c1 0c 19 e1 48 85 c0 74 44 bf ac 01 00 00 4c 89 e6 e8 3f 8e f0 e0 66 90 41 89 c4 <8b> 53 08 41 c1 e4 12 41 c1 ec 15 41 69 c4 e8 03 00 00 39 c2 0f [ 95.234426] RIP [] ips_detect_cpu+0x76/0x1d0 [intel_ips] [ 95.234430] RSP [ 95.234431] CR2: 0000000000000008 [ 95.234434] ---[ end trace abcb80a2a30d178c ]--- [ 96.508060] Synaptics Touchpad, model: 1, fw: 7.2, id: 0x1c0b1, caps: 0xd04731/0xa40000/0xa0000 [ 96.508069] synaptics: Toshiba Satellite L655 detected, limiting rate to 40pps. [ 96.541849] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio4/input/input6 [ 100.459933] alloc irq_desc for 45 on node -1 [ 100.459938] alloc kstat_irqs on node -1 [ 100.459956] atl1c 0000:03:00.0: irq 45 for MSI/MSI-X [ 100.460112] atl1c 0000:03:00.0: atl1c: eth0 NIC Link is Up<100 Mbps Full Duplex> [ 101.820064] atl1c 0000:03:00.0: atl1c: eth0 NIC Link is Down [ 103.504869] atl1c 0000:03:00.0: atl1c: eth0 NIC Link is Up<100 Mbps Full Duplex> Bug: 668017 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-22-generic-pae (buildd@vernadsky) (gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) ) #35-Ubuntu SMP Sat Oct 16 22:16:51 UTC 2010 (Ubuntu 2.6.35-22.35-generic-pae 2.6.35.4) [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009d000 (usable) [ 0.000000] BIOS-e820: 000000000009d000 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000b363f000 (usable) [ 0.000000] BIOS-e820: 00000000b363f000 - 00000000b36bf000 (reserved) [ 0.000000] BIOS-e820: 00000000b36bf000 - 00000000b37bf000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000b37bf000 - 00000000b37ff000 (ACPI data) [ 0.000000] BIOS-e820: 00000000b37ff000 - 00000000b3800000 (usable) [ 0.000000] BIOS-e820: 00000000b3800000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000feb00000 - 00000000feb04000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fed10000 - 00000000fed14000 (reserved) [ 0.000000] BIOS-e820: 00000000fed18000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1b000 - 00000000fed20000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ffe00000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 0000000138000000 (usable) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI 2.6 present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] last_pfn = 0x138000 max_arch_pfn = 0x1000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-EFFFF write-through [ 0.000000] F0000-FFFFF write-combining [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask F80000000 write-back [ 0.000000] 1 base 0FFE00000 mask FFFE00000 write-protect [ 0.000000] 2 base 080000000 mask FC0000000 write-back [ 0.000000] 3 base 0B8000000 mask FF8000000 uncachable [ 0.000000] 4 base 0B4000000 mask FFC000000 uncachable [ 0.000000] 5 base 0B3800000 mask FFF800000 uncachable [ 0.000000] 6 base 100000000 mask FC0000000 write-back [ 0.000000] 7 base 138000000 mask FF8000000 uncachable [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820 update range: 0000000000002000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000001000 (reserved) [ 0.000000] modified: 0000000000001000 - 0000000000002000 (usable) [ 0.000000] modified: 0000000000002000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009d000 (usable) [ 0.000000] modified: 000000000009d000 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 00000000b363f000 (usable) [ 0.000000] modified: 00000000b363f000 - 00000000b36bf000 (reserved) [ 0.000000] modified: 00000000b36bf000 - 00000000b37bf000 (ACPI NVS) [ 0.000000] modified: 00000000b37bf000 - 00000000b37ff000 (ACPI data) [ 0.000000] modified: 00000000b37ff000 - 00000000b3800000 (usable) [ 0.000000] modified: 00000000b3800000 - 00000000c0000000 (reserved) [ 0.000000] modified: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] modified: 00000000feb00000 - 00000000feb04000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] modified: 00000000fed10000 - 00000000fed14000 (reserved) [ 0.000000] modified: 00000000fed18000 - 00000000fed1a000 (reserved) [ 0.000000] modified: 00000000fed1b000 - 00000000fed20000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000ffe00000 - 0000000100000000 (reserved) [ 0.000000] modified: 0000000100000000 - 0000000138000000 (usable) [ 0.000000] initial memory mapped : 0 - 00e00000 [ 0.000000] init_memory_mapping: 0000000000000000-0000000037bfe000 [ 0.000000] 0000000000 - 0000200000 page 4k [ 0.000000] 0000200000 - 0037a00000 page 2M [ 0.000000] 0037a00000 - 0037bfe000 page 4k [ 0.000000] kernel direct mapping tables up to 37bfe000 @ 15000-1a000 [ 0.000000] RAMDISK: 375b3000 - 37ff0000 [ 0.000000] Allocated new RAMDISK: 00a02000 - 0143e964 [ 0.000000] Move RAMDISK from 00000000375b3000 - 0000000037fef963 to 00a02000 - 0143e963 [ 0.000000] ACPI: RSDP 000fe020 00024 (v02 Sony) [ 0.000000] ACPI: XSDT b37fe120 00064 (v01 Sony VAIO 20100614 01000013) [ 0.000000] ACPI: FACP b37fc000 000F4 (v04 Sony VAIO 20100614 MSFT 01000013) [ 0.000000] ACPI: DSDT b37ee000 0A95F (v02 Sony VAIO 20100614 MSFT 01000013) [ 0.000000] ACPI: FACS b376e000 00040 [ 0.000000] ACPI: ASF! b37fd000 000A5 (v32 Sony VAIO 20100614 MSFT 01000013) [ 0.000000] ACPI: HPET b37fb000 00038 (v01 Sony VAIO 20100614 MSFT 01000013) [ 0.000000] ACPI: APIC b37fa000 0008C (v02 Sony VAIO 20100614 MSFT 01000013) [ 0.000000] ACPI: MCFG b37f9000 0003C (v01 Sony VAIO 20100614 MSFT 01000013) [ 0.000000] ACPI: SLIC b37ed000 00176 (v01 Sony VAIO 20100614 Sony 01000000) [ 0.000000] ACPI: BOOT b37e9000 00028 (v01 Sony VAIO 20100614 MSFT 01000013) [ 0.000000] ACPI: SSDT b37e6000 009F1 (v01 Sony VAIO 20100614 INTL 20051117) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] 4100MB HIGHMEM available. [ 0.000000] 891MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 37bfe000 [ 0.000000] low ram: 0 - 37bfe000 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000001 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x00037bfe [ 0.000000] HighMem 0x00037bfe -> 0x00138000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[5] active PFN ranges [ 0.000000] 0: 0x00000001 -> 0x00000002 [ 0.000000] 0: 0x00000010 -> 0x0000009d [ 0.000000] 0: 0x00000100 -> 0x000b363f [ 0.000000] 0: 0x000b37ff -> 0x000b3800 [ 0.000000] 0: 0x00100000 -> 0x00138000 [ 0.000000] On node 0 totalpages: 964046 [ 0.000000] free_area_init_node: node 0, pgdat c083ea40, node_mem_map c1440020 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3950 pages, LIFO batch:0 [ 0.000000] Normal zone: 1752 pages used for memmap [ 0.000000] Normal zone: 222502 pages, LIFO batch:31 [ 0.000000] HighMem zone: 8201 pages used for memmap [ 0.000000] HighMem zone: 727609 pages, LIFO batch:31 [ 0.000000] Using APIC driver default [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x04] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x05] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x06] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x07] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x08] lapic_id[0x00] disabled) [ 0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 8 CPUs, 6 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [16000 - 167ff] [ 0.000000] PM: Registered nosave memory: 0000000000002000 - 0000000000010000 [ 0.000000] PM: Registered nosave memory: 000000000009d000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:20000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:8 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 15 pages/cpu @c3c00000 s39872 r0 d21568 u262144 [ 0.000000] pcpu-alloc: s39872 r0 d21568 u262144 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 4 5 6 7 [ 0.000000] early_res array is doubled to 128 at [16800 - 177ff] [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 954061 [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-22-generic-pae root=UUID=d8799835-d288-4c17-85a5-23ebde743a39 ro i8042.nopnp [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Enabling fast FPU save and restore... done. [ 0.000000] Enabling unmasked SIMD FPU exception support... done. [ 0.000000] Initializing CPU#0 [ 0.000000] allocated 25559020 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Subtract (60 early reservations) [ 0.000000] #1 [0000001000 - 0000002000] EX TRAMPOLINE [ 0.000000] #2 [0000100000 - 00009f965c] TEXT DATA BSS [ 0.000000] #3 [000009d000 - 0000100000] BIOS reserved [ 0.000000] #4 [00009fa000 - 0000a011a0] BRK [ 0.000000] #5 [0000010000 - 0000011000] TRAMPOLINE [ 0.000000] #6 [0000011000 - 0000015000] ACPI WAKEUP [ 0.000000] #7 [0000015000 - 0000016000] PGTABLE [ 0.000000] #8 [0000a02000 - 000143f000] NEW RAMDISK [ 0.000000] #9 [000143f000 - 0001440000] BOOTMEM [ 0.000000] #10 [0001440000 - 0003b40000] BOOTMEM [ 0.000000] #11 [0003b40000 - 0003b40004] BOOTMEM [ 0.000000] #12 [0003b40040 - 0003b40100] BOOTMEM [ 0.000000] #13 [0003b40100 - 0003b401a8] BOOTMEM [ 0.000000] #14 [0003b401c0 - 0003b431c0] BOOTMEM [ 0.000000] #15 [0003b431c0 - 0003b434c4] BOOTMEM [ 0.000000] #16 [0003b43500 - 0003b4f500] BOOTMEM [ 0.000000] #17 [0003b4f500 - 0003b4f52d] BOOTMEM [ 0.000000] #18 [0003b4f540 - 0003b4f56f] BOOTMEM [ 0.000000] #19 [0003b4f580 - 0003b4f874] BOOTMEM [ 0.000000] #20 [0003b4f880 - 0003b4f8c0] BOOTMEM [ 0.000000] #21 [0003b4f8c0 - 0003b4f900] BOOTMEM [ 0.000000] #22 [0003b4f900 - 0003b4f940] BOOTMEM [ 0.000000] #23 [0003b4f940 - 0003b4f980] BOOTMEM [ 0.000000] #24 [0003b4f980 - 0003b4f9c0] BOOTMEM [ 0.000000] #25 [0003b4f9c0 - 0003b4fa00] BOOTMEM [ 0.000000] #26 [0003b4fa00 - 0003b4fa40] BOOTMEM [ 0.000000] #27 [0003b4fa40 - 0003b4fa80] BOOTMEM [ 0.000000] #28 [0003b4fa80 - 0003b4fac0] BOOTMEM [ 0.000000] #29 [0003b4fac0 - 0003b4fb00] BOOTMEM [ 0.000000] #30 [0003b4fb00 - 0003b4fb40] BOOTMEM [ 0.000000] #31 [0003b4fb40 - 0003b4fb80] BOOTMEM [ 0.000000] #32 [0003b4fb80 - 0003b4fbc0] BOOTMEM [ 0.000000] #33 [0003b4fbc0 - 0003b4fc00] BOOTMEM [ 0.000000] #34 [0003b4fc00 - 0003b4fc40] BOOTMEM [ 0.000000] #35 [0003b4fc40 - 0003b4fc80] BOOTMEM [ 0.000000] #36 [0003b4fc80 - 0003b4fcc0] BOOTMEM [ 0.000000] #37 [0003b4fcc0 - 0003b4fd00] BOOTMEM [ 0.000000] #38 [0003b4fd00 - 0003b4fd10] BOOTMEM [ 0.000000] #39 [0003b4fd40 - 0003b4fd50] BOOTMEM [ 0.000000] #40 [0003b4fd80 - 0003b4fded] BOOTMEM [ 0.000000] #41 [0003b4fe00 - 0003b4fe6d] BOOTMEM [ 0.000000] #42 [0003c00000 - 0003c0f000] BOOTMEM [ 0.000000] #43 [0003c40000 - 0003c4f000] BOOTMEM [ 0.000000] #44 [0003c80000 - 0003c8f000] BOOTMEM [ 0.000000] #45 [0003cc0000 - 0003ccf000] BOOTMEM [ 0.000000] #46 [0003d00000 - 0003d0f000] BOOTMEM [ 0.000000] #47 [0003d40000 - 0003d4f000] BOOTMEM [ 0.000000] #48 [0003d80000 - 0003d8f000] BOOTMEM [ 0.000000] #49 [0003dc0000 - 0003dcf000] BOOTMEM [ 0.000000] #50 [0003b51e80 - 0003b51e84] BOOTMEM [ 0.000000] #51 [0003b51ec0 - 0003b51ec4] BOOTMEM [ 0.000000] #52 [0003b51f00 - 0003b51f20] BOOTMEM [ 0.000000] #53 [0003b51f40 - 0003b51f60] BOOTMEM [ 0.000000] #54 [0003b51f80 - 0003b52010] BOOTMEM [ 0.000000] #55 [0003b52040 - 0003b52070] BOOTMEM [ 0.000000] #56 [0003b52080 - 0003b56080] BOOTMEM [ 0.000000] #57 [0003b56080 - 0003bd6080] BOOTMEM [ 0.000000] #58 [0003dcf000 - 0003e0f000] BOOTMEM [ 0.000000] #59 [0003e0f000 - 000566efec] BOOTMEM [ 0.000000] Initializing HighMem for node 0 (00037bfe:00138000) [ 0.000000] Memory: 3770212k/5111808k available (5085k kernel code, 85972k reserved, 2432k data, 704k init, 2943240k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff16000 - 0xfffff000 ( 932 kB) [ 0.000000] pkmap : 0xffc00000 - 0xffe00000 (2048 kB) [ 0.000000] vmalloc : 0xf83fe000 - 0xffbfe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf7bfe000 ( 891 MB) [ 0.000000] .init : 0xc0858000 - 0xc0908000 ( 704 kB) [ 0.000000] .data : 0xc05f750a - 0xc0857768 (2432 kB) [ 0.000000] .text : 0xc0100000 - 0xc05f750a (5085 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=13, HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:2304 nr_irqs:744 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.004000] Detected 1196.920 MHz processor. [ 0.000007] Calibrating delay loop (skipped), value calculated using timer frequency.. 2393.84 BogoMIPS (lpj=4787680) [ 0.000158] pid_max: default: 32768 minimum: 301 [ 0.000254] Security Framework initialized [ 0.000342] AppArmor: AppArmor initialized [ 0.000412] Yama: becoming mindful. [ 0.000557] Mount-cache hash table entries: 512 [ 0.000798] Initializing cgroup subsys ns [ 0.000871] Initializing cgroup subsys cpuacct [ 0.000947] Initializing cgroup subsys memory [ 0.001028] Initializing cgroup subsys devices [ 0.001101] Initializing cgroup subsys freezer [ 0.001173] Initializing cgroup subsys net_cls [ 0.001278] CPU: Physical Processor ID: 0 [ 0.001348] CPU: Processor Core ID: 0 [ 0.001423] mce: CPU supports 9 MCE banks [ 0.001505] CPU0: Thermal monitoring handled by SMI [ 0.001516] using mwait in idle threads. [ 0.001591] Performance Events: PEBS fmt1+, Westmere events, Intel PMU driver. [ 0.001793] ... version: 3 [ 0.001862] ... bit width: 48 [ 0.001932] ... generic registers: 4 [ 0.002001] ... value mask: 0000ffffffffffff [ 0.002075] ... max period: 000000007fffffff [ 0.002149] ... fixed-purpose events: 3 [ 0.002219] ... event mask: 000000070000000f [ 0.006894] ACPI: Core revision 20100428 [ 0.055491] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.055571] ftrace: allocating 22394 entries in 44 pages [ 0.068596] Enabling APIC mode: Flat. Using 1 I/O APICs [ 0.069105] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.108842] CPU0: Intel(R) Pentium(R) CPU U5400 @ 1.20GHz stepping 05 [ 0.215141] Booting Node 0, Processors #1 [ 0.225533] Initializing CPU#1 [ 0.302941] CPU1: Thermal monitoring handled by SMI [ 0.323077] Brought up 2 CPUs [ 0.323266] Total of 2 processors activated (4787.80 BogoMIPS). [ 0.324339] devtmpfs: initialized [ 0.326447] regulator: core version 0.5 [ 0.326548] Time: 18:12:43 Date: 10/28/10 [ 0.326679] NET: Registered protocol family 16 [ 0.326862] Trying to unpack rootfs image as initramfs... [ 0.326932] EISA bus registered [ 0.326943] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it [ 0.326946] ACPI: bus type pci registered [ 0.327058] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.327063] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.327066] PCI: Using MMCONFIG for extended config space [ 0.327082] PCI: Using configuration type 1 for base access [ 0.335280] bio: create slab at 0 [ 0.340048] ACPI: EC: Look up EC in DSDT [ 0.341759] ACPI Error: No handler for Region [RAM_] (f74212f8) [EmbeddedControl] (20100428/evregion-369) [ 0.341940] ACPI Error: Region EmbeddedControl(0x3) has no handler (20100428/exfldio-293) [ 0.342116] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.SNC_.SBRT] (Node f742f228), AE_NOT_EXIST [ 0.342409] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.EC0_._REG] (Node f7422d98), AE_NOT_EXIST [ 0.344986] ACPI: Executed 1 blocks of module-level executable AML code [ 0.353464] ACPI: BIOS _OSI(Linux) query ignored [ 0.357003] ACPI: SSDT b3691c18 00264 (v01 Sony VAIO 20100614 INTL 20051117) [ 0.358481] ACPI: Dynamic OEM Table Load: [ 0.358612] ACPI: SSDT (null) 00264 (v01 Sony VAIO 20100614 INTL 20051117) [ 0.359506] ACPI: SSDT b368f018 00842 (v01 Sony VAIO 20100614 INTL 20051117) [ 0.360900] ACPI: Dynamic OEM Table Load: [ 0.361029] ACPI: SSDT (null) 00842 (v01 Sony VAIO 20100614 INTL 20051117) [ 0.362367] ACPI: SSDT b3690a98 00303 (v01 Sony VAIO 20100614 INTL 20051117) [ 0.363955] ACPI: Dynamic OEM Table Load: [ 0.364086] ACPI: SSDT (null) 00303 (v01 Sony VAIO 20100614 INTL 20051117) [ 0.364675] ACPI: SSDT b368ed98 00119 (v01 Sony VAIO 20100614 INTL 20051117) [ 0.366133] ACPI: Dynamic OEM Table Load: [ 0.366262] ACPI: SSDT (null) 00119 (v01 Sony VAIO 20100614 INTL 20051117) [ 0.386879] ACPI: Interpreter enabled [ 0.386955] ACPI: (supports S0 S3 S4 S5) [ 0.387211] ACPI: Using IOAPIC for interrupt routing [ 0.415627] ACPI: EC: GPE = 0x17, I/O: command/status = 0x66, data = 0x62 [ 0.416248] ACPI: No dock devices found. [ 0.416322] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.418125] \_SB_.PCI0:_OSC invalid UUID [ 0.418128] _OSC request data:1 8 1f [ 0.418137] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-fe]) [ 0.420683] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 0.420764] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 0.420845] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.420954] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xfeafffff] [ 0.421149] pci 0000:00:02.0: reg 10: [mem 0xd0000000-0xd03fffff 64bit] [ 0.421159] pci 0000:00:02.0: reg 18: [mem 0xc0000000-0xcfffffff 64bit pref] [ 0.421166] pci 0000:00:02.0: reg 20: [io 0x5050-0x5057] [ 0.421297] pci 0000:00:16.0: reg 10: [mem 0xd9406100-0xd940610f 64bit] [ 0.421394] pci 0000:00:16.0: PME# supported from D0 D3hot D3cold [ 0.421401] pci 0000:00:16.0: PME# disabled [ 0.421492] pci 0000:00:1a.0: reg 10: [mem 0xd9405c00-0xd9405fff] [ 0.421589] pci 0000:00:1a.0: PME# supported from D0 D3hot D3cold [ 0.421596] pci 0000:00:1a.0: PME# disabled [ 0.421664] pci 0000:00:1b.0: reg 10: [mem 0xd9400000-0xd9403fff 64bit] [ 0.421753] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.421760] pci 0000:00:1b.0: PME# disabled [ 0.421895] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.421902] pci 0000:00:1c.0: PME# disabled [ 0.422042] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 0.422049] pci 0000:00:1c.1: PME# disabled [ 0.422190] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 0.422197] pci 0000:00:1c.2: PME# disabled [ 0.422337] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold [ 0.422344] pci 0000:00:1c.3: PME# disabled [ 0.422430] pci 0000:00:1d.0: reg 10: [mem 0xd9405800-0xd9405bff] [ 0.422529] pci 0000:00:1d.0: PME# supported from D0 D3hot D3cold [ 0.422536] pci 0000:00:1d.0: PME# disabled [ 0.422838] pci 0000:00:1f.2: reg 10: [io 0x5048-0x504f] [ 0.422850] pci 0000:00:1f.2: reg 14: [io 0x505c-0x505f] [ 0.422861] pci 0000:00:1f.2: reg 18: [io 0x5040-0x5047] [ 0.422873] pci 0000:00:1f.2: reg 1c: [io 0x5058-0x505b] [ 0.422884] pci 0000:00:1f.2: reg 20: [io 0x5020-0x503f] [ 0.422895] pci 0000:00:1f.2: reg 24: [mem 0xd9405000-0xd94057ff] [ 0.422963] pci 0000:00:1f.2: PME# supported from D3hot [ 0.422970] pci 0000:00:1f.2: PME# disabled [ 0.423032] pci 0000:00:1f.3: reg 10: [mem 0xd9406000-0xd94060ff 64bit] [ 0.423060] pci 0000:00:1f.3: reg 20: [io 0x5000-0x501f] [ 0.423156] pci 0000:00:1f.6: reg 10: [mem 0xd9404000-0xd9404fff 64bit] [ 0.423381] pci 0000:02:00.0: reg 10: [mem 0xd8400000-0xd840ffff 64bit] [ 0.423475] pci 0000:02:00.0: supports D1 [ 0.423479] pci 0000:02:00.0: PME# supported from D0 D1 D3hot D3cold [ 0.423486] pci 0000:02:00.0: PME# disabled [ 0.423523] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.423603] pci 0000:00:1c.0: bridge window [io 0x4000-0x4fff] [ 0.423610] pci 0000:00:1c.0: bridge window [mem 0xd8400000-0xd93fffff] [ 0.423622] pci 0000:00:1c.0: bridge window [mem 0xd0400000-0xd13fffff 64bit pref] [ 0.423785] pci 0000:03:00.0: reg 10: [mem 0xd7400a00-0xd7400aff] [ 0.423917] pci 0000:03:00.0: supports D1 D2 [ 0.423921] pci 0000:03:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.423960] pci 0000:03:00.0: PME# disabled [ 0.424046] pci 0000:03:00.1: reg 10: [mem 0xd7400900-0xd74009ff] [ 0.424180] pci 0000:03:00.1: supports D1 D2 [ 0.424183] pci 0000:03:00.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.424223] pci 0000:03:00.1: PME# disabled [ 0.424305] pci 0000:03:00.3: reg 10: [mem 0xd7400000-0xd74007ff] [ 0.424438] pci 0000:03:00.3: supports D1 D2 [ 0.424441] pci 0000:03:00.3: PME# supported from D0 D1 D2 D3hot D3cold [ 0.424480] pci 0000:03:00.3: PME# disabled [ 0.424559] pci 0000:03:00.4: reg 10: [mem 0xd7400800-0xd74008ff] [ 0.424692] pci 0000:03:00.4: supports D1 D2 [ 0.424695] pci 0000:03:00.4: PME# supported from D0 D1 D2 D3hot D3cold [ 0.424735] pci 0000:03:00.4: PME# disabled [ 0.424782] pci 0000:00:1c.1: PCI bridge to [bus 03-03] [ 0.424861] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.424869] pci 0000:00:1c.1: bridge window [mem 0xd7400000-0xd83fffff] [ 0.424881] pci 0000:00:1c.1: bridge window [mem 0xd1400000-0xd23fffff 64bit pref] [ 0.425025] pci 0000:04:00.0: reg 10: [mem 0xd6400000-0xd643ffff 64bit] [ 0.425039] pci 0000:04:00.0: reg 18: [io 0x2000-0x207f] [ 0.425145] pci 0000:04:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.425153] pci 0000:04:00.0: PME# disabled [ 0.425190] pci 0000:00:1c.2: PCI bridge to [bus 04-04] [ 0.425268] pci 0000:00:1c.2: bridge window [io 0x2000-0x2fff] [ 0.425275] pci 0000:00:1c.2: bridge window [mem 0xd6400000-0xd73fffff] [ 0.425287] pci 0000:00:1c.2: bridge window [mem 0xd2400000-0xd33fffff 64bit pref] [ 0.425374] pci 0000:00:1c.3: PCI bridge to [bus 05-0c] [ 0.425453] pci 0000:00:1c.3: bridge window [io 0x1000-0x1fff] [ 0.425461] pci 0000:00:1c.3: bridge window [mem 0xd4400000-0xd63fffff] [ 0.425472] pci 0000:00:1c.3: bridge window [mem 0xd3400000-0xd43fffff 64bit pref] [ 0.425588] pci 0000:00:1e.0: PCI bridge to [bus 0d-0d] (subtractive decode) [ 0.425674] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.425681] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.425693] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.425697] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.425701] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.425705] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.425710] pci 0000:00:1e.0: bridge window [mem 0xc0000000-0xfeafffff] (subtractive decode) [ 0.425758] pci_bus 0000:00: on NUMA node 0 [ 0.425772] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.426318] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P1._PRT] [ 0.426720] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP01._PRT] [ 0.426930] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP02._PRT] [ 0.427256] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP03._PRT] [ 0.427465] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP04._PRT] [ 0.428018] \_SB_.PCI0:_OSC invalid UUID [ 0.428020] _OSC request data:1 19 1f [ 0.464268] ACPI: PCI Root Bridge [CPBG] (domain 0000 [bus ff]) [ 0.464803] pci_bus 0000:ff: on NUMA node 0 [ 0.465382] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 5 6 *7 10 12 14 15) [ 0.466093] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.466857] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 7 10 12 14 15) *11 [ 0.467623] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 *7 11 12 14 15) [ 0.468327] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled. [ 0.469118] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 *11 12 14 15) [ 0.469823] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 7 10 12 14 15) *11 [ 0.470583] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 0.471202] HEST: Table is not found! [ 0.471379] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 0.471508] vgaarb: loaded [ 0.471797] SCSI subsystem initialized [ 0.471968] libata version 3.00 loaded. [ 0.472040] usbcore: registered new interface driver usbfs [ 0.472130] usbcore: registered new interface driver hub [ 0.472232] usbcore: registered new device driver usb [ 0.472633] ACPI: WMI: Mapper loaded [ 0.472702] PCI: Using ACPI for IRQ routing [ 0.472773] PCI: pci_cache_line_size set to 64 bytes [ 0.472999] reserve RAM buffer: 0000000000002000 - 000000000000ffff [ 0.473004] reserve RAM buffer: 000000000009d000 - 000000000009ffff [ 0.473008] reserve RAM buffer: 00000000b363f000 - 00000000b3ffffff [ 0.473013] reserve RAM buffer: 00000000b3800000 - 00000000b3ffffff [ 0.473146] NetLabel: Initializing [ 0.473214] NetLabel: domain hash size = 128 [ 0.473284] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.473373] NetLabel: unlabeled traffic allowed by default [ 0.473498] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0, 0, 0, 0, 0 [ 0.473847] hpet0: 8 comparators, 64-bit 14.318180 MHz counter [ 0.475961] Switching to clocksource tsc [ 0.490990] AppArmor: AppArmor Filesystem Enabled [ 0.491086] pnp: PnP ACPI init [ 0.491175] ACPI: bus type pnp registered [ 0.493732] pnp 00:05: disabling [io 0x164e-0x164f] because it overlaps 0000:00:1c.3 BAR 13 [io 0x1000-0x1fff] [ 0.496544] pnp: PnP ACPI: found 10 devices [ 0.496615] ACPI: ACPI bus type pnp unregistered [ 0.496689] PnPBIOS: Disabled by ACPI PNP [ 0.496775] system 00:05: [io 0x0680-0x069f] has been reserved [ 0.496853] system 00:05: [io 0x0800-0x080f] has been reserved [ 0.496931] system 00:05: [io 0x0810-0x0813] has been reserved [ 0.497009] system 00:05: [io 0xffff] has been reserved [ 0.497085] system 00:05: [io 0x0400-0x047f] has been reserved [ 0.497163] system 00:05: [io 0x0500-0x057f] has been reserved [ 0.497247] system 00:08: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.497328] system 00:08: [mem 0xfed10000-0xfed13fff] has been reserved [ 0.497408] system 00:08: [mem 0xfed18000-0xfed18fff] has been reserved [ 0.497489] system 00:08: [mem 0xfed19000-0xfed19fff] has been reserved [ 0.497571] system 00:08: [mem 0xe0000000-0xefffffff] has been reserved [ 0.497652] system 00:08: [mem 0xfed20000-0xfed3ffff] has been reserved [ 0.497733] system 00:08: [mem 0xff000000-0xffffffff] could not be reserved [ 0.497815] system 00:08: [mem 0xfee00000-0xfeefffff] could not be reserved [ 0.497898] system 00:08: [mem 0xd9500000-0xd9500fff] has been reserved [ 0.534569] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 0.534652] pci 0000:00:1c.0: bridge window [io 0x4000-0x4fff] [ 0.534736] pci 0000:00:1c.0: bridge window [mem 0xd8400000-0xd93fffff] [ 0.534821] pci 0000:00:1c.0: bridge window [mem 0xd0400000-0xd13fffff 64bit pref] [ 0.534938] pci 0000:00:1c.1: PCI bridge to [bus 03-03] [ 0.535019] pci 0000:00:1c.1: bridge window [io 0x3000-0x3fff] [ 0.535102] pci 0000:00:1c.1: bridge window [mem 0xd7400000-0xd83fffff] [ 0.535187] pci 0000:00:1c.1: bridge window [mem 0xd1400000-0xd23fffff 64bit pref] [ 0.536293] pci 0000:00:1c.2: PCI bridge to [bus 04-04] [ 0.536370] pci 0000:00:1c.2: bridge window [io 0x2000-0x2fff] [ 0.536453] pci 0000:00:1c.2: bridge window [mem 0xd6400000-0xd73fffff] [ 0.536537] pci 0000:00:1c.2: bridge window [mem 0xd2400000-0xd33fffff 64bit pref] [ 0.536653] pci 0000:00:1c.3: PCI bridge to [bus 05-0c] [ 0.536730] pci 0000:00:1c.3: bridge window [io 0x1000-0x1fff] [ 0.536813] pci 0000:00:1c.3: bridge window [mem 0xd4400000-0xd63fffff] [ 0.536898] pci 0000:00:1c.3: bridge window [mem 0xd3400000-0xd43fffff 64bit pref] [ 0.537015] pci 0000:00:1e.0: PCI bridge to [bus 0d-0d] [ 0.537089] pci 0000:00:1e.0: bridge window [io disabled] [ 0.537171] pci 0000:00:1e.0: bridge window [mem disabled] [ 0.537252] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.537356] alloc irq_desc for 17 on node -1 [ 0.537360] alloc kstat_irqs on node -1 [ 0.537370] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 0.537455] pci 0000:00:1c.0: setting latency timer to 64 [ 0.537474] alloc irq_desc for 16 on node -1 [ 0.537476] alloc kstat_irqs on node -1 [ 0.537483] pci 0000:00:1c.1: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 0.537568] pci 0000:00:1c.1: setting latency timer to 64 [ 0.537582] alloc irq_desc for 18 on node -1 [ 0.537584] alloc kstat_irqs on node -1 [ 0.537590] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.537674] pci 0000:00:1c.2: setting latency timer to 64 [ 0.537691] alloc irq_desc for 19 on node -1 [ 0.537693] alloc kstat_irqs on node -1 [ 0.537699] pci 0000:00:1c.3: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 0.537782] pci 0000:00:1c.3: setting latency timer to 64 [ 0.537795] pci 0000:00:1e.0: setting latency timer to 64 [ 0.537803] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 0.537807] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 0.537810] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.537814] pci_bus 0000:00: resource 7 [mem 0xc0000000-0xfeafffff] [ 0.537818] pci_bus 0000:02: resource 0 [io 0x4000-0x4fff] [ 0.537822] pci_bus 0000:02: resource 1 [mem 0xd8400000-0xd93fffff] [ 0.537826] pci_bus 0000:02: resource 2 [mem 0xd0400000-0xd13fffff 64bit pref] [ 0.537830] pci_bus 0000:03: resource 0 [io 0x3000-0x3fff] [ 0.537833] pci_bus 0000:03: resource 1 [mem 0xd7400000-0xd83fffff] [ 0.537837] pci_bus 0000:03: resource 2 [mem 0xd1400000-0xd23fffff 64bit pref] [ 0.537841] pci_bus 0000:04: resource 0 [io 0x2000-0x2fff] [ 0.537844] pci_bus 0000:04: resource 1 [mem 0xd6400000-0xd73fffff] [ 0.537848] pci_bus 0000:04: resource 2 [mem 0xd2400000-0xd33fffff 64bit pref] [ 0.537852] pci_bus 0000:05: resource 0 [io 0x1000-0x1fff] [ 0.537856] pci_bus 0000:05: resource 1 [mem 0xd4400000-0xd63fffff] [ 0.537859] pci_bus 0000:05: resource 2 [mem 0xd3400000-0xd43fffff 64bit pref] [ 0.537864] pci_bus 0000:0d: resource 4 [io 0x0000-0x0cf7] [ 0.537867] pci_bus 0000:0d: resource 5 [io 0x0d00-0xffff] [ 0.537871] pci_bus 0000:0d: resource 6 [mem 0x000a0000-0x000bffff] [ 0.537874] pci_bus 0000:0d: resource 7 [mem 0xc0000000-0xfeafffff] [ 0.537932] NET: Registered protocol family 2 [ 0.538097] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.538471] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.539089] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.539408] TCP: Hash tables configured (established 131072 bind 65536) [ 0.539488] TCP reno registered [ 0.539556] UDP hash table entries: 512 (order: 2, 16384 bytes) [ 0.539639] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) [ 0.539843] NET: Registered protocol family 1 [ 0.539933] pci 0000:00:02.0: Boot video device [ 0.571050] PCI: CLS 64 bytes, default 64 [ 0.571087] Simple Boot Flag at 0x44 set to 0x1 [ 0.571422] cpufreq-nforce2: No nForce2 chipset. [ 0.571532] Scanning for low memory corruption every 60 seconds [ 0.571803] audit: initializing netlink socket (disabled) [ 0.571892] type=2000 audit(1288289562.420:1): initialized [ 0.592701] highmem bounce pool size: 64 pages [ 0.592782] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.594961] VFS: Disk quotas dquot_6.5.2 [ 0.595126] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 0.596076] fuse init (API version 7.14) [ 0.596278] msgmni has been set to 1615 [ 0.596725] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.596834] io scheduler noop registered [ 0.596904] io scheduler deadline registered [ 0.596992] io scheduler cfq registered (default) [ 0.597238] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.597308] alloc irq_desc for 40 on node -1 [ 0.597311] alloc kstat_irqs on node -1 [ 0.597329] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 0.597463] pcieport 0000:00:1c.1: setting latency timer to 64 [ 0.597527] alloc irq_desc for 41 on node -1 [ 0.597529] alloc kstat_irqs on node -1 [ 0.597543] pcieport 0000:00:1c.1: irq 41 for MSI/MSI-X [ 0.597675] pcieport 0000:00:1c.2: setting latency timer to 64 [ 0.597740] alloc irq_desc for 42 on node -1 [ 0.597742] alloc kstat_irqs on node -1 [ 0.597756] pcieport 0000:00:1c.2: irq 42 for MSI/MSI-X [ 0.597884] pcieport 0000:00:1c.3: setting latency timer to 64 [ 0.597949] alloc irq_desc for 43 on node -1 [ 0.597952] alloc kstat_irqs on node -1 [ 0.597964] pcieport 0000:00:1c.3: irq 43 for MSI/MSI-X [ 0.598120] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.598463] \_SB_.PCI0:_OSC invalid UUID [ 0.598466] _OSC request data:1 0 1f [ 0.598717] \_SB_.PCI0:_OSC invalid UUID [ 0.598719] _OSC request data:1 0 1f [ 0.598972] \_SB_.PCI0:_OSC invalid UUID [ 0.598975] _OSC request data:1 0 1f [ 0.599220] \_SB_.PCI0:_OSC invalid UUID [ 0.599222] _OSC request data:1 0 1f [ 0.599491] \_SB_.PCI0:_OSC invalid UUID [ 0.599493] _OSC request data:1 0 1f [ 0.599736] \_SB_.PCI0:_OSC invalid UUID [ 0.599739] _OSC request data:1 0 1f [ 0.599980] \_SB_.PCI0:_OSC invalid UUID [ 0.599983] _OSC request data:1 0 1f [ 0.600226] \_SB_.PCI0:_OSC invalid UUID [ 0.600228] _OSC request data:1 0 1f [ 0.600282] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.600480] intel_idle: MWAIT substates: 0x1120 [ 0.600483] intel_idle: v0.4 model 0x25 [ 0.600486] intel_idle: lapic_timer_reliable_states 0xffffffff [ 0.601484] ACPI: AC Adapter [ADP1] (on-line) [ 0.601697] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input0 [ 0.601819] ACPI: Sleep Button [SLPB] [ 0.601949] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input1 [ 0.603285] ACPI: Lid Switch [LID0] [ 0.603421] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2 [ 0.603531] ACPI: Power Button [PWRF] [ 0.605214] ACPI: acpi_idle yielding to intel_idle [ 0.639586] thermal LNXTHERM:01: registered as thermal_zone0 [ 0.639677] ACPI: Thermal Zone [TZS0] (43 C) [ 0.648202] thermal LNXTHERM:02: registered as thermal_zone1 [ 0.648287] ACPI: Thermal Zone [TZS1] (40 C) [ 0.648523] ERST: Table is not found! [ 0.649117] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.651290] brd: module loaded [ 0.652139] loop: module loaded [ 0.652928] Fixed MDIO Bus: probed [ 0.653039] PPP generic driver version 2.4.2 [ 0.653155] tun: Universal TUN/TAP device driver, 1.6 [ 0.653228] tun: (C) 1999-2004 Max Krasnyansky [ 0.653409] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.653521] ehci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.653620] ehci_hcd 0000:00:1a.0: setting latency timer to 64 [ 0.653626] ehci_hcd 0000:00:1a.0: EHCI Host Controller [ 0.653747] ehci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 1 [ 0.653890] ehci_hcd 0000:00:1a.0: debug port 2 [ 0.657860] ehci_hcd 0000:00:1a.0: cache line size of 64 is not supported [ 0.657918] ehci_hcd 0000:00:1a.0: irq 16, io mem 0xd9405c00 [ 0.661901] isapnp: Scanning for PnP cards... [ 0.711252] ehci_hcd 0000:00:1a.0: USB 2.0 started, EHCI 1.00 [ 0.711544] hub 1-0:1.0: USB hub found [ 0.711627] hub 1-0:1.0: 3 ports detected [ 0.711822] alloc irq_desc for 23 on node -1 [ 0.711825] alloc kstat_irqs on node -1 [ 0.711836] ehci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.711948] ehci_hcd 0000:00:1d.0: setting latency timer to 64 [ 0.711954] ehci_hcd 0000:00:1d.0: EHCI Host Controller [ 0.712084] ehci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2 [ 0.712227] ehci_hcd 0000:00:1d.0: debug port 2 [ 0.716245] ehci_hcd 0000:00:1d.0: cache line size of 64 is not supported [ 0.716280] ehci_hcd 0000:00:1d.0: irq 23, io mem 0xd9405800 [ 0.764005] ehci_hcd 0000:00:1d.0: USB 2.0 started, EHCI 1.00 [ 0.764307] hub 2-0:1.0: USB hub found [ 0.764381] hub 2-0:1.0: 3 ports detected [ 0.764559] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.764657] uhci_hcd: USB Universal Host Controller Interface driver [ 0.764793] i8042: PNP detection disabled [ 0.799336] Freeing initrd memory: 10484k freed [ 0.812317] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.812406] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.812622] mice: PS/2 mouse device common for all mice [ 0.812887] rtc_cmos 00:06: RTC can wake from S4 [ 0.813017] rtc_cmos 00:06: rtc core: registered rtc_cmos as rtc0 [ 0.813130] rtc0: alarms up to one year, y3k, 242 bytes nvram, hpet irqs [ 0.813380] device-mapper: uevent: version 1.0.3 [ 0.813625] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 0.813815] device-mapper: multipath: version 1.1.1 loaded [ 0.813892] device-mapper: multipath round-robin: version 1.0.0 loaded [ 0.814139] EISA: Probing bus 0 at eisa.0 [ 0.814210] EISA: Cannot allocate resource for mainboard [ 0.814286] Cannot allocate resource for EISA slot 1 [ 0.814360] Cannot allocate resource for EISA slot 2 [ 0.814451] Cannot allocate resource for EISA slot 3 [ 0.814528] Cannot allocate resource for EISA slot 4 [ 0.814601] Cannot allocate resource for EISA slot 5 [ 0.814683] Cannot allocate resource for EISA slot 6 [ 0.814756] Cannot allocate resource for EISA slot 7 [ 0.814829] Cannot allocate resource for EISA slot 8 [ 0.814902] EISA: Detected 0 cards. [ 0.815156] cpuidle: using governor ladder [ 0.815410] cpuidle: using governor menu [ 0.815909] TCP cubic registered [ 0.816173] NET: Registered protocol family 10 [ 0.816782] lo: Disabled Privacy Extensions [ 0.817164] NET: Registered protocol family 17 [ 0.818624] Using IPI No-Shortcut mode [ 0.818808] PM: Resume from disk failed. [ 0.818824] registered taskstats version 1 [ 0.819584] Magic number: 14:207:242 [ 0.819764] rtc_cmos 00:06: setting system clock to 2010-10-28 18:12:43 UTC (1288289563) [ 0.819875] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.819952] EDD information not available. [ 0.849457] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3 [ 0.890104] ACPI: Battery Slot [BAT0] (battery present) [ 1.040988] isapnp: No Plug & Play device found [ 1.041077] Freeing unused kernel memory: 704k freed [ 1.041556] Write protecting the kernel text: 5088k [ 1.041724] Write protecting the kernel read-only data: 2012k [ 1.062496] usb 1-1: new high speed USB device using ehci_hcd and address 2 [ 1.065144] udev[76]: starting version 163 [ 1.196673] hub 1-1:1.0: USB hub found [ 1.196875] hub 1-1:1.0: 6 ports detected [ 1.245805] atl1c 0000:04:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 1.245906] atl1c 0000:04:00.0: setting latency timer to 64 [ 1.247089] sdhci: Secure Digital Host Controller Interface driver [ 1.247167] sdhci: Copyright(c) Pierre Ossman [ 1.249680] sdhci-pci 0000:03:00.0: SDHCI controller found [1180:e822] (rev 0) [ 1.249841] sdhci-pci 0000:03:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 1.250009] sdhci-pci 0000:03:00.0: Will use DMA mode even though HW doesn't fully claim to support it. [ 1.250158] sdhci-pci 0000:03:00.0: setting latency timer to 64 [ 1.251278] Registered led device: mmc0:: [ 1.299628] mmc0: SDHCI controller on PCI [0000:03:00.0] using DMA [ 1.299737] sdhci-pci 0000:03:00.4: SDHCI controller found [1180:e822] (rev 0) [ 1.301898] sdhci-pci 0000:03:00.4: PCI INT C -> GSI 19 (level, low) -> IRQ 19 [ 1.308179] usb 2-1: new high speed USB device using ehci_hcd and address 2 [ 1.323141] sdhci-pci 0000:03:00.4: Will use DMA mode even though HW doesn't fully claim to support it. [ 1.323267] sdhci-pci 0000:03:00.4: setting latency timer to 64 [ 1.324350] Registered led device: mmc1:: [ 1.325403] mmc1: SDHCI controller on PCI [0000:03:00.4] using DMA [ 1.339601] firewire_ohci 0000:03:00.3: PCI INT D -> GSI 16 (level, low) -> IRQ 16 [ 1.339721] firewire_ohci 0000:03:00.3: setting latency timer to 64 [ 1.344376] ahci 0000:00:1f.2: version 3.0 [ 1.344396] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.344532] alloc irq_desc for 44 on node -1 [ 1.344535] alloc kstat_irqs on node -1 [ 1.344552] ahci 0000:00:1f.2: irq 44 for MSI/MSI-X [ 1.344639] ahci 0000:00:1f.2: AHCI 0001.0300 32 slots 4 ports 3 Gbps 0x1 impl SATA mode [ 1.344752] ahci 0000:00:1f.2: flags: 64bit ncq sntf pm led clo pio slum part apst [ 1.344862] ahci 0000:00:1f.2: setting latency timer to 64 [ 1.345247] scsi0 : ahci [ 1.345565] scsi1 : ahci [ 1.345779] scsi2 : ahci [ 1.345987] scsi3 : ahci [ 1.346131] ata1: SATA max UDMA/133 abar m2048@0xd9405000 port 0xd9405100 irq 44 [ 1.346237] ata2: DUMMY [ 1.346299] ata3: DUMMY [ 1.346361] ata4: DUMMY [ 1.357070] atl1c 0000:04:00.0: version 1.0.0.2-NAPI [ 1.440591] hub 2-1:1.0: USB hub found [ 1.440791] hub 2-1:1.0: 8 ports detected [ 1.483827] firewire_ohci: Added fw-ohci device 0000:03:00.3, OHCI v1.0, 4 IR + 4 IT contexts, quirks 0x0 [ 1.512049] usb 1-1.2: new high speed USB device using ehci_hcd and address 3 [ 1.663738] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.679983] usb 1-1.5: new full speed USB device using ehci_hcd and address 4 [ 1.711800] ata1.00: ATA-8: TOSHIBA MK3265GSX, GJ002H, max UDMA/100 [ 1.711891] ata1.00: 625142448 sectors, multi 16: LBA48 NCQ (depth 31/32), AA [ 1.713054] ata1.00: configured for UDMA/100 [ 1.728018] scsi 0:0:0:0: Direct-Access ATA TOSHIBA MK3265GS GJ00 PQ: 0 ANSI: 5 [ 1.728328] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 1.728514] sd 0:0:0:0: [sda] 625142448 512-byte logical blocks: (320 GB/298 GiB) [ 1.728690] sd 0:0:0:0: [sda] Write Protect is off [ 1.728763] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.728793] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.729092] sda: sda1 sda2 < sda5 > [ 1.799339] sd 0:0:0:0: [sda] Attached SCSI disk [ 1.847878] usb 2-1.5: new low speed USB device using ehci_hcd and address 3 [ 1.968860] usbcore: registered new interface driver hiddev [ 1.971354] input: OPM-U06 as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5/2-1.5:1.0/input/input4 [ 1.971588] generic-usb 0003:054C:036B.0001: input,hidraw0: USB HID v11.10 Mouse [OPM-U06] on usb-0000:00:1d.0-1.5/input0 [ 1.971740] usbcore: registered new interface driver usbhid [ 1.971814] usbhid: USB HID core driver [ 1.975650] firewire_core: created device fw0: GUID 0800460304fbdc84, S400 [ 2.204102] EXT4-fs (sda1): INFO: recovery required on readonly filesystem [ 2.204248] EXT4-fs (sda1): write access will be enabled during recovery [ 2.357750] EXT4-fs (sda1): recovery complete [ 2.359315] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 5.650878] udev[447]: starting version 163 [ 5.693138] lp: driver loaded but no devices found [ 5.705010] Adding 8472572k swap on /dev/sda5. Priority:-1 extents:1 across:8472572k [ 5.824068] sony-laptop: Sony Notebook Control Driver v0.6. [ 5.847068] intel ips 0000:00:1f.6: No CPUID match found. [ 5.847081] BUG: unable to handle kernel NULL pointer dereference at 00000008 [ 5.847226] IP: [] ips_detect_cpu+0x62/0x180 [intel_ips] [ 5.847340] *pdpt = 0000000035926001 *pde = 0000000000000000 [ 5.847478] Oops: 0000 [#1] SMP [ 5.847604] last sysfs file: /sys/devices/platform/pcspkr/uevent [ 5.847682] Modules linked in: intel_ips(+) sony_laptop(+) video output lp parport usbhid hid firewire_ohci ahci sdhci_pci atl1c libahci firewire_core sdhci led_class crc_itu_t [ 5.848384] [ 5.848448] Pid: 569, comm: modprobe Not tainted 2.6.35-22-generic-pae #35-Ubuntu VAIO/VPCY21S1E [ 5.848560] EIP: 0060:[] EFLAGS: 00010286 CPU: 0 [ 5.848638] EIP is at ips_detect_cpu+0x62/0x180 [intel_ips] [ 5.848714] EAX: 00580058 EBX: 00000000 ECX: 00580058 EDX: 00000000 [ 5.848792] ESI: f5965e04 EDI: f60eac00 EBP: f5965e14 ESP: f5965de4 [ 5.848871] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 5.848948] Process modprobe (pid: 569, ti=f5964000 task=f593b2c0 task.ti=f5964000) [ 5.849054] Stack: [ 5.849116] f88f6efc f88f6e9e f759db40 f5965e14 c02162f1 f5965e08 c05ee9c9 f88f5eef [ 5.849406] <0> 00000000 f60eac00 f75e9000 fffffff4 f5965e4c f88f5f2b c027b6cd f5965e4c [ 5.849779] <0> c027ac77 f5965e4c c027b07a f5965e38 f75e9000 f75e9060 c037614e f75e9000 [ 5.850209] Call Trace: [ 5.850284] [] ? kmem_cache_alloc_notrace+0x91/0xb0 [ 5.850367] [] ? mutex_lock+0x19/0x40 [ 5.850443] [] ? ips_probe+0x1f/0x6a0 [intel_ips] [ 5.850523] [] ? ips_probe+0x5b/0x6a0 [intel_ips] [ 5.850604] [] ? sysfs_add_one+0x1d/0x110 [ 5.850680] [] ? sysfs_new_dirent+0x67/0x100 [ 5.850756] [] ? sysfs_addrm_finish+0x1a/0xb0 [ 5.850837] [] ? pci_match_device+0xbe/0xd0 [ 5.850914] [] ? local_pci_probe+0x13/0x20 [ 5.850992] [] ? pci_device_probe+0x68/0x90 [ 5.851070] [] ? really_probe+0x50/0x150 [ 5.851147] [] ? pm_runtime_barrier+0x57/0xb0 [ 5.851225] [] ? driver_probe_device+0x3c/0x60 [ 5.851302] [] ? __driver_attach+0x81/0x90 [ 5.851379] [] ? bus_for_each_dev+0x53/0x80 [ 5.851455] [] ? driver_attach+0x1e/0x20 [ 5.851530] [] ? __driver_attach+0x0/0x90 [ 5.851605] [] ? bus_add_driver+0xd5/0x280 [ 5.851682] [] ? pci_device_remove+0x0/0x40 [ 5.851758] [] ? driver_register+0x6a/0x130 [ 5.851835] [] ? __pci_register_driver+0x45/0xb0 [ 5.851914] [] ? ips_init+0x17/0x19 [intel_ips] [ 5.851992] [] ? do_one_initcall+0x32/0x1a0 [ 5.852070] [] ? ips_init+0x0/0x19 [intel_ips] [ 5.852150] [] ? sys_init_module+0x9b/0x1e0 [ 5.852229] [] ? sys_write+0x42/0x70 [ 5.852306] [] ? sysenter_do_call+0x12/0x28 [ 5.852381] Code: d5 83 c7 90 ba f5 6d 8f f8 b8 8c 42 85 c0 e8 56 ea a6 c7 bb 80 74 8f f8 85 c0 74 35 b8 ac 01 00 00 89 f2 e8 21 d5 83 c7 90 89 c1 <8b> 53 08 c1 e1 12 c1 e9 15 69 c1 e8 03 00 00 39 c2 75 75 89 d8 [ 5.854476] EIP: [] ips_detect_cpu+0x62/0x180 [intel_ips] SS:ESP 0068:f5965de4 [ 5.854650] CR2: 0000000000000008 [ 5.854729] ---[ end trace b5ba95051b73c5bf ]--- [ 6.031948] Linux agpgart interface v0.103 [ 6.217868] Linux video capture interface: v2.00 [ 6.218547] acer-wmi: Acer Laptop ACPI-WMI Extras [ 6.223562] cfg80211: Calling CRDA to update world regulatory domain [ 6.224807] uvcvideo: Found UVC 1.00 device (05ca:18b7) [ 6.229748] Bluetooth: Core ver 2.15 [ 6.229892] NET: Registered protocol family 31 [ 6.229965] Bluetooth: HCI device and connection manager initialized [ 6.230124] Bluetooth: HCI socket layer initialized [ 6.235044] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 6.254865] input: UVC Camera (05ca:18b7) as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/input/input5 [ 6.255689] usbcore: registered new interface driver uvcvideo [ 6.255766] USB Video Class driver (v0.1.0) [ 6.258458] usbcore: registered new interface driver btusb [ 6.329880] cfg80211: World regulatory domain updated: [ 6.329961] (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 6.330069] (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 6.330151] (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 6.330233] (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 6.330314] (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 6.330395] (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 6.337007] input: Sony Vaio Keys as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0b/SNY5001:00/input/input6 [ 6.337248] input: Sony Vaio Jogdial as /devices/virtual/input/input7 [ 6.337396] sony-laptop: brightness ignored, must be controlled by ACPI video driver [ 6.407318] type=1400 audit(1288289569.086:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient3" pid=775 comm="apparmor_parser" [ 6.408391] type=1400 audit(1288289569.086:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=775 comm="apparmor_parser" [ 6.409078] type=1400 audit(1288289569.090:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=775 comm="apparmor_parser" [ 6.614691] ath9k 0000:02:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 6.614791] ath9k 0000:02:00.0: setting latency timer to 64 [ 6.666258] ath: EEPROM regdomain: 0x65 [ 6.666331] ath: EEPROM indicates we should expect a direct regpair map [ 6.666412] ath: Country alpha2 being used: 00 [ 6.666483] ath: Regpair used: 0x65 [ 6.713960] phy0: Selected rate control algorithm 'ath9k_rate_control' [ 6.714931] Registered led device: ath9k-phy0::radio [ 6.715034] Registered led device: ath9k-phy0::assoc [ 6.715135] Registered led device: ath9k-phy0::tx [ 6.715232] Registered led device: ath9k-phy0::rx [ 6.715311] phy0: Atheros AR9285 Rev:2 mem=0xf8b40000, irq=16 [ 7.044433] Synaptics Touchpad, model: 1, fw: 7.4, id: 0x1e0b1, caps: 0xd04771/0xa40000/0xa0400 [ 7.104079] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input8 [ 7.488115] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro [ 8.996259] type=1400 audit(1288289571.678:5): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient3" pid=997 comm="apparmor_parser" [ 8.997339] type=1400 audit(1288289571.678:6): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=997 comm="apparmor_parser" [ 8.998021] type=1400 audit(1288289571.678:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=997 comm="apparmor_parser" [ 9.144884] type=1400 audit(1288289571.826:8): apparmor="STATUS" operation="profile_load" name="/usr/share/gdm/guest-session/Xsession" pid=996 comm="apparmor_parser" [ 9.168353] type=1400 audit(1288289571.850:9): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince" pid=998 comm="apparmor_parser" [ 9.180532] type=1400 audit(1288289571.862:10): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-previewer" pid=998 comm="apparmor_parser" [ 9.188413] type=1400 audit(1288289571.870:11): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-thumbnailer" pid=998 comm="apparmor_parser" [ 10.636280] alloc irq_desc for 45 on node -1 [ 10.636359] alloc kstat_irqs on node -1 [ 10.636451] atl1c 0000:04:00.0: irq 45 for MSI/MSI-X [ 10.637126] ADDRCONF(NETDEV_UP): eth0: link is not ready Bug: 674479 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-22-generic (buildd@yellow) (gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) ) #35-Ubuntu SMP Sat Oct 16 20:45:36 UTC 2010 (Ubuntu 2.6.35-22.35-generic 2.6.35.4) [ 0.000000] Command line: root=UUID=bde6a039-9ce1-455c-87fc-488db22ddd78 ro quiet splash [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009f000 (usable) [ 0.000000] BIOS-e820: 000000000009f000 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 0000000077ef0000 (usable) [ 0.000000] BIOS-e820: 0000000077ef0000 - 0000000077ef3000 (ACPI NVS) [ 0.000000] BIOS-e820: 0000000077ef3000 - 0000000077f00000 (ACPI data) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI 2.4 present. [ 0.000000] Phoenix BIOS detected: BIOS may corrupt low RAM, working around it. [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] AGP bridge at 00:00:00 [ 0.000000] Aperture from AGP @ d0000000 old size 32 MB [ 0.000000] Aperture from AGP @ d0000000 size 128 MB (APSIZE f20) [ 0.000000] last_pfn = 0x77ef0 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-C7FFF write-protect [ 0.000000] C8000-CBFFF uncachable [ 0.000000] CC000-D3FFF write-back [ 0.000000] D4000-FFFFF uncachable [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0000000000 mask FFC0000000 write-back [ 0.000000] 1 base 0040000000 mask FFE0000000 write-back [ 0.000000] 2 base 0060000000 mask FFF0000000 write-back [ 0.000000] 3 base 0070000000 mask FFF8000000 write-back [ 0.000000] 4 base 0077F00000 mask FFFFF00000 uncachable [ 0.000000] 5 base 00D0000000 mask FFF8000000 write-combining [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] Scanning 0 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009f000 (usable) [ 0.000000] modified: 000000000009f000 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 0000000077ef0000 (usable) [ 0.000000] modified: 0000000077ef0000 - 0000000077ef3000 (ACPI NVS) [ 0.000000] modified: 0000000077ef3000 - 0000000077f00000 (ACPI data) [ 0.000000] modified: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] modified: 00000000fec00000 - 0000000100000000 (reserved) [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] found SMP MP-table at [ffff8800000f3e90] f3e90 [ 0.000000] init_memory_mapping: 0000000000000000-0000000077ef0000 [ 0.000000] 0000000000 - 0077e00000 page 2M [ 0.000000] 0077e00000 - 0077ef0000 page 4k [ 0.000000] kernel direct mapping tables up to 77ef0000 @ 16000-1a000 [ 0.000000] RAMDISK: 3756f000 - 37ff0000 [ 0.000000] ACPI: RSDP 00000000000f7cb0 00014 (v00 K8M890) [ 0.000000] ACPI: RSDT 0000000077ef3040 00030 (v01 K8M890 AWRDACPI 42302E31 AWRD 00000000) [ 0.000000] ACPI: FACP 0000000077ef30c0 00074 (v01 K8M890 AWRDACPI 42302E31 AWRD 00000000) [ 0.000000] ACPI: DSDT 0000000077ef3180 06CD7 (v01 K8M890 AWRDACPI 00001000 MSFT 0100000E) [ 0.000000] ACPI: FACS 0000000077ef0000 00040 [ 0.000000] ACPI: MCFG 0000000077ef9f80 0003C (v01 K8M890 AWRDACPI 42302E31 AWRD 00000000) [ 0.000000] ACPI: APIC 0000000077ef9ec0 00074 (v01 K8M890 AWRDACPI 42302E31 AWRD 00000000) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] Scanning NUMA topology in Northbridge 24 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-0000000077ef0000 [ 0.000000] Initmem setup node 0 0000000000000000-0000000077ef0000 [ 0.000000] NODE_DATA [0000000001d18100 - 0000000001d1d0ff] [ 0.000000] [ffffea0000000000-ffffea0001bfffff] PMD -> [ffff880002600000-ffff8800041fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal empty [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x00077ef0 [ 0.000000] On node 0 totalpages: 491135 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3927 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 6661 pages used for memmap [ 0.000000] DMA32 zone: 480491 pages, LIFO batch:31 [ 0.000000] Detected use of extended apic ids on hypertransport bus [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 2, version 3, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: IOAPIC (id[0x03] address[0xfecc0000] gsi_base[24]) [ 0.000000] IOAPIC[1]: apic_id 3, version 3, address 0xfecc0000, GSI 24-47 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 64 [ 0.000000] early_res array is doubled to 64 at [18000 - 187ff] [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000f0000 [ 0.000000] PM: Registered nosave memory: 00000000000f0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at 77f00000 (gap: 77f00000:68100000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:2 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 30 pages/cpu @ffff880001e00000 s91520 r8192 d23168 u1048576 [ 0.000000] pcpu-alloc: s91520 r8192 d23168 u1048576 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 484418 [ 0.000000] Policy zone: DMA32 [ 0.000000] Kernel command line: root=UUID=bde6a039-9ce1-455c-87fc-488db22ddd78 ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] AGP bridge at 00:00:00 [ 0.000000] Aperture from AGP @ d0000000 old size 32 MB [ 0.000000] Aperture from AGP @ d0000000 size 128 MB (APSIZE f20) [ 0.000000] Node 0: aperture @ d0000000 size 128 MB [ 0.000000] Subtract (44 early reservations) [ 0.000000] #1 [0001000000 - 0001d17114] TEXT DATA BSS [ 0.000000] #2 [003756f000 - 0037ff0000] RAMDISK [ 0.000000] #3 [0001d18000 - 0001d180fe] BRK [ 0.000000] #4 [00000f3ea0 - 0000100000] BIOS reserved [ 0.000000] #5 [00000f3e90 - 00000f3ea0] MP-table mpf [ 0.000000] #6 [000009f000 - 00000f2114] BIOS reserved [ 0.000000] #7 [00000f2278 - 00000f3e90] BIOS reserved [ 0.000000] #8 [00000f2114 - 00000f2278] MP-table mpc [ 0.000000] #9 [0000010000 - 0000012000] TRAMPOLINE [ 0.000000] #10 [0000012000 - 0000016000] ACPI WAKEUP [ 0.000000] #11 [0000016000 - 0000018000] PGTABLE [ 0.000000] #12 [0001d18100 - 0001d1d100] NODE_DATA [ 0.000000] #13 [0001d1d100 - 0001d1e100] BOOTMEM [ 0.000000] #14 [0001d17140 - 0001d172a8] BOOTMEM [ 0.000000] #15 [000251f000 - 0002520000] BOOTMEM [ 0.000000] #16 [0002520000 - 0002521000] BOOTMEM [ 0.000000] #17 [0002600000 - 0004200000] MEMMAP 0 [ 0.000000] #18 [0001d172c0 - 0001d17440] BOOTMEM [ 0.000000] #19 [0001d1e100 - 0001d2a100] BOOTMEM [ 0.000000] #20 [0001d2b000 - 0001d2c000] BOOTMEM [ 0.000000] #21 [0001d17440 - 0001d174c6] BOOTMEM [ 0.000000] #22 [0001d17500 - 0001d176f8] BOOTMEM [ 0.000000] #23 [0001d17700 - 0001d17768] BOOTMEM [ 0.000000] #24 [0001d17780 - 0001d177e8] BOOTMEM [ 0.000000] #25 [0001d17800 - 0001d17868] BOOTMEM [ 0.000000] #26 [0001d17880 - 0001d178e8] BOOTMEM [ 0.000000] #27 [0001d17900 - 0001d17968] BOOTMEM [ 0.000000] #28 [0001d17980 - 0001d179e8] BOOTMEM [ 0.000000] #29 [0001d17a00 - 0001d17a68] BOOTMEM [ 0.000000] #30 [0001d17a80 - 0001d17ae8] BOOTMEM [ 0.000000] #31 [0001d17b00 - 0001d17b20] BOOTMEM [ 0.000000] #32 [0001d17b40 - 0001d17b80] BOOTMEM [ 0.000000] #33 [0001d17b80 - 0001d17bc0] BOOTMEM [ 0.000000] #34 [0001e00000 - 0001e1e000] BOOTMEM [ 0.000000] #35 [0001f00000 - 0001f1e000] BOOTMEM [ 0.000000] #36 [0001d17bc0 - 0001d17bc8] BOOTMEM [ 0.000000] #37 [0001d17c00 - 0001d17c08] BOOTMEM [ 0.000000] #38 [0001d17c40 - 0001d17c48] BOOTMEM [ 0.000000] #39 [0001d17c80 - 0001d17c90] BOOTMEM [ 0.000000] #40 [0001d17cc0 - 0001d17e00] BOOTMEM [ 0.000000] #41 [0001d17e00 - 0001d17e60] BOOTMEM [ 0.000000] #42 [0001d17e80 - 0001d17ee0] BOOTMEM [ 0.000000] #43 [0001d2c000 - 0001d34000] BOOTMEM [ 0.000000] Memory: 1911312k/1964992k available (5708k kernel code, 452k absent, 53228k reserved, 5382k data, 908k init) [ 0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:4352 nr_irqs:512 [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 19660800 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 2199.612 MHz processor. [ 0.010008] Calibrating delay loop (skipped), value calculated using timer frequency.. 4399.22 BogoMIPS (lpj=21996120) [ 0.010013] pid_max: default: 32768 minimum: 301 [ 0.010039] Security Framework initialized [ 0.010058] AppArmor: AppArmor initialized [ 0.010060] Yama: becoming mindful. [ 0.010342] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.011491] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.012010] Mount-cache hash table entries: 256 [ 0.012153] Initializing cgroup subsys ns [ 0.012158] Initializing cgroup subsys cpuacct [ 0.012162] Initializing cgroup subsys memory [ 0.012173] Initializing cgroup subsys devices [ 0.012175] Initializing cgroup subsys freezer [ 0.012177] Initializing cgroup subsys net_cls [ 0.012204] tseg: 0077f00000 [ 0.012206] CPU: Physical Processor ID: 0 [ 0.012208] CPU: Processor Core ID: 0 [ 0.012210] mce: CPU supports 5 MCE banks [ 0.012222] using C1E aware idle routine [ 0.012224] Performance Events: AMD PMU driver. [ 0.012229] ... version: 0 [ 0.012231] ... bit width: 48 [ 0.012233] ... generic registers: 4 [ 0.012234] ... value mask: 0000ffffffffffff [ 0.012236] ... max period: 00007fffffffffff [ 0.012238] ... fixed-purpose events: 0 [ 0.012240] ... event mask: 000000000000000f [ 0.020426] ACPI: Core revision 20100428 [ 0.028042] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.028053] ftrace: allocating 22680 entries in 89 pages [ 0.030087] Setting APIC routing to flat [ 0.030485] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=0 pin2=0 [ 0.135385] CPU0: AMD Athlon(tm) 64 X2 Dual Core Processor 4200+ stepping 02 [ 0.140000] Booting Node 0, Processors #1 Ok. [ 0.290054] Brought up 2 CPUs [ 0.290057] Total of 2 processors activated (8799.29 BogoMIPS). [ 0.290272] devtmpfs: initialized [ 0.290859] regulator: core version 0.5 [ 0.290903] Time: 11:28:50 Date: 11/12/10 [ 0.290948] NET: Registered protocol family 16 [ 0.291075] TOM: 0000000080000000 aka 2048M [ 0.291078] node 0 link 0: mmio [a0000, bffff] [ 0.291082] node 0 link 0: mmio [80000000, bfffffff] [ 0.291084] node 0 link 0: mmio [c0000000, cfffffff] [ 0.291087] node 0 link 0: mmio [d0000000, dcffffff] [ 0.291090] node 0 link 0: mmio [dd000000, ddffffff] [ 0.291092] node 0 link 0: mmio [de000000, ffff] [ 0.291095] bus: [00, ff] on node 0 link 0 [ 0.291098] bus: 00 index 0 [io 0x0000-0xffff] [ 0.291100] bus: 00 index 1 [mem 0x000a0000-0x000bffff] [ 0.291103] bus: 00 index 2 [mem 0x80000000-0xfcffffffff] [ 0.291110] ACPI: bus type pci registered [ 0.291180] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.291183] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.311086] Trying to unpack rootfs image as initramfs... [ 0.311815] PCI: Using configuration type 1 for base access [ 0.320134] bio: create slab at 0 [ 0.321990] ACPI: EC: Look up EC in DSDT [ 0.330441] ACPI: Interpreter enabled [ 0.330445] ACPI: (supports S0 S1 S4 S5) [ 0.330467] ACPI: Using IOAPIC for interrupt routing [ 0.339296] ACPI: No dock devices found. [ 0.339301] PCI: Ignoring host bridge windows from ACPI; if necessary, use "pci=use_crs" and report a bug [ 0.339787] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-7f]) [ 0.340316] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] (ignored) [ 0.340319] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] (ignored) [ 0.340322] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] (ignored) [ 0.340325] pci_root PNP0A08:00: host bridge window [mem 0x000c0000-0x000dffff] (ignored) [ 0.340327] pci_root PNP0A08:00: host bridge window [mem 0x80000000-0xbfefffff] (ignored) [ 0.340330] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xfebfffff] (ignored) [ 0.340360] pci 0000:00:00.0: reg 10: [mem 0xd0000000-0xd7ffffff pref] [ 0.340803] pci 0000:00:02.0: PME# supported from D0 D3hot D3cold [ 0.340807] pci 0000:00:02.0: PME# disabled [ 0.340880] pci 0000:00:03.0: PME# supported from D0 D3hot D3cold [ 0.340884] pci 0000:00:03.0: PME# disabled [ 0.340934] pci 0000:00:0f.0: reg 10: [io 0xff00-0xff07] [ 0.340941] pci 0000:00:0f.0: reg 14: [io 0xfe00-0xfe03] [ 0.340947] pci 0000:00:0f.0: reg 18: [io 0xfd00-0xfd07] [ 0.340954] pci 0000:00:0f.0: reg 1c: [io 0xfc00-0xfc03] [ 0.340960] pci 0000:00:0f.0: reg 20: [io 0xfb00-0xfb0f] [ 0.340967] pci 0000:00:0f.0: reg 24: [io 0xf400-0xf4ff] [ 0.341031] pci 0000:00:0f.1: reg 20: [io 0xfa00-0xfa0f] [ 0.341107] pci 0000:00:10.0: reg 20: [io 0xf900-0xf91f] [ 0.341132] pci 0000:00:10.0: supports D1 D2 [ 0.341134] pci 0000:00:10.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.341138] pci 0000:00:10.0: PME# disabled [ 0.341181] pci 0000:00:10.1: reg 20: [io 0xf800-0xf81f] [ 0.341206] pci 0000:00:10.1: supports D1 D2 [ 0.341208] pci 0000:00:10.1: PME# supported from D0 D1 D2 D3hot D3cold [ 0.341212] pci 0000:00:10.1: PME# disabled [ 0.341254] pci 0000:00:10.2: reg 20: [io 0xf700-0xf71f] [ 0.341279] pci 0000:00:10.2: supports D1 D2 [ 0.341281] pci 0000:00:10.2: PME# supported from D0 D1 D2 D3hot D3cold [ 0.341285] pci 0000:00:10.2: PME# disabled [ 0.341326] pci 0000:00:10.3: reg 20: [io 0xf600-0xf61f] [ 0.341351] pci 0000:00:10.3: supports D1 D2 [ 0.341353] pci 0000:00:10.3: PME# supported from D0 D1 D2 D3hot D3cold [ 0.341357] pci 0000:00:10.3: PME# disabled [ 0.341384] pci 0000:00:10.4: reg 10: [mem 0xdffff000-0xdffff0ff] [ 0.341424] pci 0000:00:10.4: supports D1 D2 [ 0.341426] pci 0000:00:10.4: PME# supported from D0 D1 D2 D3hot D3cold [ 0.341430] pci 0000:00:10.4: PME# disabled [ 0.341583] pci 0000:00:12.0: reg 10: [io 0xf200-0xf2ff] [ 0.341589] pci 0000:00:12.0: reg 14: [mem 0xdfffe000-0xdfffe0ff] [ 0.341627] pci 0000:00:12.0: supports D1 D2 [ 0.341629] pci 0000:00:12.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.341633] pci 0000:00:12.0: PME# disabled [ 0.341832] PCI: peer root bus 00 res updated from pci conf [ 0.341876] pci 0000:01:00.0: reg 10: [mem 0xc0000000-0xcfffffff pref] [ 0.341882] pci 0000:01:00.0: reg 14: [mem 0xdd000000-0xddffffff] [ 0.341900] pci 0000:01:00.0: reg 30: [mem 0x00000000-0x0000ffff pref] [ 0.341918] pci 0000:01:00.0: supports D1 D2 [ 0.341954] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.341958] pci 0000:00:01.0: bridge window [io 0xe000-0xefff] [ 0.341962] pci 0000:00:01.0: bridge window [mem 0xdd000000-0xdeffffff] [ 0.341966] pci 0000:00:01.0: bridge window [mem 0xc0000000-0xcfffffff pref] [ 0.342005] pci 0000:00:02.0: PCI bridge to [bus 02-02] [ 0.342009] pci 0000:00:02.0: bridge window [io 0xd000-0xdfff] [ 0.342013] pci 0000:00:02.0: bridge window [mem 0xdfc00000-0xdfcfffff] [ 0.342019] pci 0000:00:02.0: bridge window [mem 0xdfb00000-0xdfbfffff 64bit pref] [ 0.342064] pci 0000:00:03.0: PCI bridge to [bus 03-03] [ 0.342068] pci 0000:00:03.0: bridge window [io 0xc000-0xcfff] [ 0.342073] pci 0000:00:03.0: bridge window [mem 0xdfe00000-0xdfefffff] [ 0.342080] pci 0000:00:03.0: bridge window [mem 0xdfd00000-0xdfdfffff 64bit pref] [ 0.342143] pci 0000:00:13.1: PCI bridge to [bus 04-04] (subtractive decode) [ 0.342147] pci 0000:00:13.1: bridge window [io 0xb000-0xbfff] [ 0.342152] pci 0000:00:13.1: bridge window [mem 0xdfa00000-0xdfafffff] [ 0.342157] pci 0000:00:13.1: bridge window [mem 0xdf900000-0xdf9fffff 64bit pref] [ 0.342160] pci 0000:00:13.1: bridge window [io 0x0000-0xffff] (subtractive decode) [ 0.342163] pci 0000:00:13.1: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.342166] pci 0000:00:13.1: bridge window [mem 0x80000000-0xfcffffffff] (subtractive decode) [ 0.342188] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.342540] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PEXG._PRT] [ 0.342662] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PEX0._PRT] [ 0.342783] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P2PB._PRT] [ 0.416558] ACPI: PCI Root Bridge [PCI1] (domain 0000 [bus 80-ff]) [ 0.416808] pci_root PNP0A08:01: host bridge window [io 0x0000-0x0cf7] (ignored) [ 0.416811] pci_root PNP0A08:01: host bridge window [io 0x0d00-0xffff] (ignored) [ 0.416814] pci_root PNP0A08:01: host bridge window [mem 0x000a0000-0x000bffff] (ignored) [ 0.416816] pci_root PNP0A08:01: host bridge window [mem 0xbff00000-0xbfffffff] (ignored) [ 0.416842] pci 0000:80:01.0: reg 10: [mem 0xbfffc000-0xbfffffff 64bit] [ 0.416880] pci 0000:80:01.0: PME# supported from D0 D3hot D3cold [ 0.416884] pci 0000:80:01.0: PME# disabled [ 0.416930] ACPI: PCI Interrupt Routing Table [\_SB_.PCI1._PRT] [ 0.417613] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 6 7 *10 11 12) [ 0.417808] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 6 7 10 *11 12) [ 0.418004] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 6 7 10 *11 12) [ 0.418198] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 6 7 *10 11 12) [ 0.418364] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 6 7 10 11 12) *0, disabled. [ 0.418528] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 6 7 10 11 12) *0, disabled. [ 0.418687] ACPI: PCI Interrupt Link [LNK0] (IRQs 3 4 6 7 10 11 12) *0, disabled. [ 0.418860] ACPI: PCI Interrupt Link [LNK1] (IRQs 3 4 6 7 10 11 12) *5 [ 0.418913] HEST: Table is not found! [ 0.419036] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none [ 0.419039] vgaarb: loaded [ 0.419195] SCSI subsystem initialized [ 0.419309] libata version 3.00 loaded. [ 0.419365] usbcore: registered new interface driver usbfs [ 0.419377] usbcore: registered new interface driver hub [ 0.419402] usbcore: registered new device driver usb [ 0.419552] ACPI: WMI: Mapper loaded [ 0.419555] PCI: Using ACPI for IRQ routing [ 0.419557] PCI: pci_cache_line_size set to 64 bytes [ 0.419569] pci 0000:00:00.0: address space collision: [mem 0xd0000000-0xd7ffffff pref] conflicts with GART [mem 0xd0000000-0xd7ffffff] [ 0.419626] pci 0000:80:01.0: address space collision: [mem 0xbfffc000-0xbfffffff 64bit] conflicts with PCI Bus #00 [mem 0x80000000-0xfcffffffff] [ 0.419672] reserve RAM buffer: 000000000009f000 - 000000000009ffff [ 0.419675] reserve RAM buffer: 0000000077ef0000 - 0000000077ffffff [ 0.419779] NetLabel: Initializing [ 0.419781] NetLabel: domain hash size = 128 [ 0.419782] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.419795] NetLabel: unlabeled traffic allowed by default [ 0.429944] AppArmor: AppArmor Filesystem Enabled [ 0.429970] pnp: PnP ACPI init [ 0.430036] ACPI: bus type pnp registered [ 0.435225] pnp 00:0e: disabling [mem 0x000cc000-0x000cffff] because it overlaps 0000:00:00.0 BAR 0 [mem 0x00000000-0x07ffffff pref] [ 0.435230] pnp 00:0e: disabling [mem 0x000f0000-0x000f7fff] because it overlaps 0000:00:00.0 BAR 0 [mem 0x00000000-0x07ffffff pref] [ 0.435234] pnp 00:0e: disabling [mem 0x000f8000-0x000fbfff] because it overlaps 0000:00:00.0 BAR 0 [mem 0x00000000-0x07ffffff pref] [ 0.435238] pnp 00:0e: disabling [mem 0x000fc000-0x000fffff] because it overlaps 0000:00:00.0 BAR 0 [mem 0x00000000-0x07ffffff pref] [ 0.435242] pnp 00:0e: disabling [mem 0x00000000-0x0009ffff] because it overlaps 0000:00:00.0 BAR 0 [mem 0x00000000-0x07ffffff pref] [ 0.435246] pnp 00:0e: disabling [mem 0x00100000-0x77eeffff] because it overlaps 0000:00:00.0 BAR 0 [mem 0x00000000-0x07ffffff pref] [ 0.435360] pnp: PnP ACPI: found 15 devices [ 0.435362] ACPI: ACPI bus type pnp unregistered [ 0.435378] system 00:01: [io 0x0400-0x047f] has been reserved [ 0.435381] system 00:01: [io 0x0500-0x050f] has been reserved [ 0.435386] system 00:02: [io 0x04d0-0x04d1] has been reserved [ 0.435389] system 00:02: [io 0x0290-0x0297] has been reserved [ 0.435397] system 00:0b: [mem 0xf0000000-0xf0000fff] has been reserved [ 0.435402] system 00:0c: [mem 0xe0000000-0xefffffff] has been reserved [ 0.435408] system 00:0e: [mem 0x77f00000-0x77ffffff] could not be reserved [ 0.435412] system 00:0e: [mem 0x77ef0000-0x77efffff] could not be reserved [ 0.435415] system 00:0e: [mem 0xffff0000-0xffffffff] has been reserved [ 0.435418] system 00:0e: [mem 0x78000000-0x7fffffff] has been reserved [ 0.435421] system 00:0e: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.435424] system 00:0e: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.435427] system 00:0e: [mem 0xfff80000-0xfffeffff] has been reserved [ 0.441436] Switching to clocksource acpi_pm [ 0.441665] pci 0000:01:00.0: BAR 6: assigned [mem 0xde000000-0xde00ffff pref] [ 0.441669] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 0.441673] pci 0000:00:01.0: bridge window [io 0xe000-0xefff] [ 0.441678] pci 0000:00:01.0: bridge window [mem 0xdd000000-0xdeffffff] [ 0.441682] pci 0000:00:01.0: bridge window [mem 0xc0000000-0xcfffffff pref] [ 0.441688] pci 0000:00:02.0: PCI bridge to [bus 02-02] [ 0.441691] pci 0000:00:02.0: bridge window [io 0xd000-0xdfff] [ 0.441696] pci 0000:00:02.0: bridge window [mem 0xdfc00000-0xdfcfffff] [ 0.441700] pci 0000:00:02.0: bridge window [mem 0xdfb00000-0xdfbfffff 64bit pref] [ 0.441706] pci 0000:00:03.0: PCI bridge to [bus 03-03] [ 0.441709] pci 0000:00:03.0: bridge window [io 0xc000-0xcfff] [ 0.441715] pci 0000:00:03.0: bridge window [mem 0xdfe00000-0xdfefffff] [ 0.441720] pci 0000:00:03.0: bridge window [mem 0xdfd00000-0xdfdfffff 64bit pref] [ 0.441726] pci 0000:00:13.1: PCI bridge to [bus 04-04] [ 0.441729] pci 0000:00:13.1: bridge window [io 0xb000-0xbfff] [ 0.441734] pci 0000:00:13.1: bridge window [mem 0xdfa00000-0xdfafffff] [ 0.441738] pci 0000:00:13.1: bridge window [mem 0xdf900000-0xdf9fffff 64bit pref] [ 0.441753] pci 0000:00:01.0: setting latency timer to 64 [ 0.441764] alloc irq_desc for 27 on node 0 [ 0.441766] alloc kstat_irqs on node 0 [ 0.441775] pci 0000:00:02.0: PCI INT A -> GSI 27 (level, low) -> IRQ 27 [ 0.441779] pci 0000:00:02.0: setting latency timer to 64 [ 0.441787] alloc irq_desc for 31 on node 0 [ 0.441788] alloc kstat_irqs on node 0 [ 0.441793] pci 0000:00:03.0: PCI INT A -> GSI 31 (level, low) -> IRQ 31 [ 0.441797] pci 0000:00:03.0: setting latency timer to 64 [ 0.441803] pci 0000:00:13.1: setting latency timer to 64 [ 0.441808] pci 0000:80:01.0: BAR 0: assigned [mem 0xfd00000000-0xfd00003fff 64bit] [ 0.441815] pci 0000:80:01.0: BAR 0: set to [mem 0xfd00000000-0xfd00003fff 64bit] (PCI address [0xfd00000000-0xfd00003fff] [ 0.441819] pci_bus 0000:00: resource 4 [io 0x0000-0xffff] [ 0.441822] pci_bus 0000:00: resource 5 [mem 0x000a0000-0x000bffff] [ 0.441824] pci_bus 0000:00: resource 6 [mem 0x80000000-0xfcffffffff] [ 0.441827] pci_bus 0000:01: resource 0 [io 0xe000-0xefff] [ 0.441829] pci_bus 0000:01: resource 1 [mem 0xdd000000-0xdeffffff] [ 0.441832] pci_bus 0000:01: resource 2 [mem 0xc0000000-0xcfffffff pref] [ 0.441834] pci_bus 0000:02: resource 0 [io 0xd000-0xdfff] [ 0.441837] pci_bus 0000:02: resource 1 [mem 0xdfc00000-0xdfcfffff] [ 0.441839] pci_bus 0000:02: resource 2 [mem 0xdfb00000-0xdfbfffff 64bit pref] [ 0.441842] pci_bus 0000:03: resource 0 [io 0xc000-0xcfff] [ 0.441844] pci_bus 0000:03: resource 1 [mem 0xdfe00000-0xdfefffff] [ 0.441847] pci_bus 0000:03: resource 2 [mem 0xdfd00000-0xdfdfffff 64bit pref] [ 0.441849] pci_bus 0000:04: resource 0 [io 0xb000-0xbfff] [ 0.441852] pci_bus 0000:04: resource 1 [mem 0xdfa00000-0xdfafffff] [ 0.441854] pci_bus 0000:04: resource 2 [mem 0xdf900000-0xdf9fffff 64bit pref] [ 0.441857] pci_bus 0000:04: resource 4 [io 0x0000-0xffff] [ 0.441859] pci_bus 0000:04: resource 5 [mem 0x000a0000-0x000bffff] [ 0.441862] pci_bus 0000:04: resource 6 [mem 0x80000000-0xfcffffffff] [ 0.441864] pci_bus 0000:80: resource 0 [io 0x0000-0xffff] [ 0.441867] pci_bus 0000:80: resource 1 [mem 0x00000000-0xffffffffffffffff] [ 0.441910] NET: Registered protocol family 2 [ 0.442039] IP route cache hash table entries: 65536 (order: 7, 524288 bytes) [ 0.443081] TCP established hash table entries: 262144 (order: 10, 4194304 bytes) [ 0.445112] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 0.445635] TCP: Hash tables configured (established 262144 bind 65536) [ 0.445638] TCP reno registered [ 0.445649] UDP hash table entries: 1024 (order: 3, 32768 bytes) [ 0.445677] UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes) [ 0.445795] NET: Registered protocol family 1 [ 0.445808] pci 0000:00:00.0: MSI quirk detected; MSI disabled [ 0.445830] pci 0000:00:01.0: disabling DAC on VIA PCI bridge [ 0.445835] pci 0000:00:02.0: MSI quirk detected; subordinate MSI disabled [ 0.445953] pci 0000:01:00.0: Boot video device [ 0.445959] PCI: CLS 32 bytes, default 64 [ 0.449988] agpgart-amd64 0000:00:00.0: AGP bridge [1106/0336] [ 0.453090] agpgart-amd64 0000:00:00.0: AGP aperture is 128M @ 0xd0000000 [ 0.453389] Scanning for low memory corruption every 60 seconds [ 0.453529] audit: initializing netlink socket (disabled) [ 0.453540] type=2000 audit(1289561329.440:1): initialized [ 0.482937] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.484555] VFS: Disk quotas dquot_6.5.2 [ 0.484617] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.485268] fuse init (API version 7.14) [ 0.485361] msgmni has been set to 3733 [ 0.488235] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.488241] io scheduler noop registered [ 0.488244] io scheduler deadline registered [ 0.488283] io scheduler cfq registered (default) [ 0.500205] pcieport 0000:00:02.0: setting latency timer to 64 [ 0.500699] pcieport 0000:00:03.0: setting latency timer to 64 [ 0.500862] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.501241] pciehp 0000:00:02.0:pcie04: HPC vendor_id 1106 device_id a238 ss_vid 0 ss_did 0 [ 0.501281] pciehp 0000:00:02.0:pcie04: service driver pciehp loaded [ 0.501296] pciehp 0000:00:03.0:pcie04: HPC vendor_id 1106 device_id c238 ss_vid 0 ss_did 0 [ 0.501326] pciehp 0000:00:03.0:pcie04: service driver pciehp loaded [ 0.501334] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.501523] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 0.501531] ACPI: Power Button [PWRB] [ 0.501586] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 [ 0.501589] ACPI: Power Button [PWRF] [ 0.502255] ACPI: acpi_idle registered with cpuidle [ 0.506642] ERST: Table is not found! [ 0.506803] Linux agpgart interface v0.103 [ 0.506807] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.506906] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 0.506996] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A [ 0.507260] 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 0.507379] 00:09: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A [ 0.508601] brd: module loaded [ 0.509149] loop: module loaded [ 0.509495] alloc irq_desc for 21 on node 0 [ 0.509497] alloc kstat_irqs on node 0 [ 0.509506] pata_acpi 0000:00:0f.0: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 0.509560] pata_acpi 0000:00:0f.0: PCI INT B disabled [ 0.510054] Fixed MDIO Bus: probed [ 0.510087] PPP generic driver version 2.4.2 [ 0.510143] tun: Universal TUN/TAP device driver, 1.6 [ 0.510144] tun: (C) 1999-2004 Max Krasnyansky [ 0.510224] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.510271] ehci_hcd 0000:00:10.4: PCI INT C -> GSI 21 (level, low) -> IRQ 21 [ 0.510294] ehci_hcd 0000:00:10.4: EHCI Host Controller [ 0.510331] ehci_hcd 0000:00:10.4: new USB bus registered, assigned bus number 1 [ 0.510384] ehci_hcd 0000:00:10.4: irq 21, io mem 0xdffff000 [ 0.530013] ehci_hcd 0000:00:10.4: USB 2.0 started, EHCI 1.00 [ 0.530152] hub 1-0:1.0: USB hub found [ 0.530158] hub 1-0:1.0: 8 ports detected [ 0.530259] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.530275] uhci_hcd: USB Universal Host Controller Interface driver [ 0.530384] alloc irq_desc for 20 on node 0 [ 0.530386] alloc kstat_irqs on node 0 [ 0.530394] uhci_hcd 0000:00:10.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20 [ 0.530402] uhci_hcd 0000:00:10.0: UHCI Host Controller [ 0.530450] uhci_hcd 0000:00:10.0: new USB bus registered, assigned bus number 2 [ 0.530483] uhci_hcd 0000:00:10.0: irq 20, io base 0x0000f900 [ 0.530611] hub 2-0:1.0: USB hub found [ 0.530615] hub 2-0:1.0: 2 ports detected [ 0.530724] alloc irq_desc for 22 on node 0 [ 0.530727] alloc kstat_irqs on node 0 [ 0.530731] uhci_hcd 0000:00:10.1: PCI INT B -> GSI 22 (level, low) -> IRQ 22 [ 0.530737] uhci_hcd 0000:00:10.1: UHCI Host Controller [ 0.530780] uhci_hcd 0000:00:10.1: new USB bus registered, assigned bus number 3 [ 0.530811] uhci_hcd 0000:00:10.1: irq 22, io base 0x0000f800 [ 0.530929] hub 3-0:1.0: USB hub found [ 0.530933] hub 3-0:1.0: 2 ports detected [ 0.531032] uhci_hcd 0000:00:10.2: PCI INT C -> GSI 21 (level, low) -> IRQ 21 [ 0.531038] uhci_hcd 0000:00:10.2: UHCI Host Controller [ 0.531074] uhci_hcd 0000:00:10.2: new USB bus registered, assigned bus number 4 [ 0.531095] uhci_hcd 0000:00:10.2: irq 21, io base 0x0000f700 [ 0.531218] hub 4-0:1.0: USB hub found [ 0.531222] hub 4-0:1.0: 2 ports detected [ 0.531314] alloc irq_desc for 23 on node 0 [ 0.531316] alloc kstat_irqs on node 0 [ 0.531321] uhci_hcd 0000:00:10.3: PCI INT D -> GSI 23 (level, low) -> IRQ 23 [ 0.531326] uhci_hcd 0000:00:10.3: UHCI Host Controller [ 0.531365] uhci_hcd 0000:00:10.3: new USB bus registered, assigned bus number 5 [ 0.531396] uhci_hcd 0000:00:10.3: irq 23, io base 0x0000f600 [ 0.531521] hub 5-0:1.0: USB hub found [ 0.531524] hub 5-0:1.0: 2 ports detected [ 0.531654] PNP: No PS/2 controller found. Probing ports directly. [ 0.532060] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.532068] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.532141] mice: PS/2 mouse device common for all mice [ 0.532273] rtc_cmos 00:04: RTC can wake from S4 [ 0.532320] rtc_cmos 00:04: rtc core: registered rtc_cmos as rtc0 [ 0.532354] rtc0: alarms up to one year, y3k, 242 bytes nvram [ 0.532476] device-mapper: uevent: version 1.0.3 [ 0.532562] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 0.532644] device-mapper: multipath: version 1.1.1 loaded [ 0.532647] device-mapper: multipath round-robin: version 1.0.0 loaded [ 0.532801] cpuidle: using governor ladder [ 0.532803] cpuidle: using governor menu [ 0.533097] TCP cubic registered [ 0.533236] NET: Registered protocol family 10 [ 0.533616] lo: Disabled Privacy Extensions [ 0.533823] NET: Registered protocol family 17 [ 0.533860] powernow-k8: Found 1 AMD Athlon(tm) 64 X2 Dual Core Processor 4200+ (2 cpu cores) (version 2.20.00) [ 0.533870] [Firmware Bug]: powernow-k8: No compatible ACPI _PSS objects found. [ 0.533871] [Firmware Bug]: powernow-k8: Try again with latest BIOS. [ 0.533997] PM: Resume from disk failed. [ 0.534015] registered taskstats version 1 [ 0.534314] Magic number: 2:25:479 [ 0.534430] rtc_cmos 00:04: setting system clock to 2010-11-12 11:28:50 UTC (1289561330) [ 0.534433] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.534435] EDD information not available. [ 0.576911] Freeing initrd memory: 10756k freed [ 0.582020] Freeing unused kernel memory: 908k freed [ 0.582406] Write protecting the kernel read-only data: 10240k [ 0.582580] Freeing unused kernel memory: 416k freed [ 0.582935] Freeing unused kernel memory: 1644k freed [ 0.604736] udev[88]: starting version 163 [ 0.686853] via-rhine.c:v1.10-LK1.4.3 2007-03-06 Written by Donald Becker [ 0.721421] sata_via 0000:00:0f.0: version 2.6 [ 0.721443] sata_via 0000:00:0f.0: PCI INT B -> GSI 21 (level, low) -> IRQ 21 [ 0.721487] sata_via 0000:00:0f.0: routed to hard irq line 11 [ 0.756240] scsi0 : sata_via [ 0.764116] FDC 0 is a post-1991 82077 [ 0.764415] scsi1 : sata_via [ 0.766598] ata1: SATA max UDMA/133 cmd 0xff00 ctl 0xfe00 bmdma 0xfb00 irq 21 [ 0.766601] ata2: SATA max UDMA/133 cmd 0xfd00 ctl 0xfc00 bmdma 0xfb08 irq 21 [ 0.766724] pata_via 0000:00:0f.1: version 0.3.4 [ 0.766876] scsi2 : pata_via [ 0.766947] scsi3 : pata_via [ 0.768888] ata3: PATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0xfa00 irq 14 [ 0.768891] ata4: PATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0xfa08 irq 15 [ 0.769020] via-rhine 0000:00:12.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.769609] eth0: VIA Rhine II at 0xdfffe000, 00:19:db:b6:1f:02, IRQ 23. [ 0.770348] eth0: MII PHY found at address 1, status 0x786d advertising 01e1 Link 45e1. [ 0.970018] ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 1.010536] ata3.00: ATA-6: ST3120026A, 3.06, max UDMA/100 [ 1.010539] ata3.00: 234441648 sectors, multi 16: LBA48 [ 1.050411] ata3.00: configured for UDMA/100 [ 1.193756] ata1.00: ATA-7: MAXTOR STM3320620AS, 3.AAE, max UDMA/133 [ 1.193759] ata1.00: 625142448 sectors, multi 16: LBA48 NCQ (depth 0/32) [ 1.277070] ata1.00: configured for UDMA/133 [ 1.277220] scsi 0:0:0:0: Direct-Access ATA MAXTOR STM332062 3.AA PQ: 0 ANSI: 5 [ 1.277423] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 1.277467] sd 0:0:0:0: [sda] 625142448 512-byte logical blocks: (320 GB/298 GiB) [ 1.277552] sd 0:0:0:0: [sda] Write Protect is off [ 1.277556] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.277578] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.277740] sda: sda1 sda2 < [ 1.320016] usb 2-1: new full speed USB device using uhci_hcd and address 2 [ 1.326011] sda5 sda6 sda7 sda8 sda9 sda10 sda11 sda12 sda13 sda14 sda15 sda16 sda17 > [ 1.455437] sd 0:0:0:0: [sda] Attached SCSI disk [ 1.490015] ata2: SATA link down 1.5 Gbps (SStatus 0 SControl 300) [ 1.500791] scsi 2:0:0:0: Direct-Access ATA ST3120026A 3.06 PQ: 0 ANSI: 5 [ 1.500935] sd 2:0:0:0: [sdb] 234441648 512-byte logical blocks: (120 GB/111 GiB) [ 1.501014] sd 2:0:0:0: [sdb] Write Protect is off [ 1.501017] sd 2:0:0:0: [sdb] Mode Sense: 00 3a 00 00 [ 1.501039] sd 2:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.501104] sd 2:0:0:0: Attached scsi generic sg1 type 0 [ 1.501212] sdb: sdb1 sdb2 < sdb5 sdb6 sdb7 > [ 1.536237] sd 2:0:0:0: [sdb] Attached SCSI disk [ 1.564564] usbcore: registered new interface driver hiddev [ 1.567876] input: Logitech Logitech Illuminated Keyboard as /devices/pci0000:00/0000:00:10.0/usb2/2-1/2-1:1.0/input/input2 [ 1.567981] generic-usb 0003:046D:C318.0001: input,hidraw0: USB HID v1.11 Keyboard [Logitech Logitech Illuminated Keyboard] on usb-0000:00:10.0-1/input0 [ 1.571633] input: Logitech Logitech Illuminated Keyboard as /devices/pci0000:00/0000:00:10.0/usb2/2-1/2-1:1.1/input/input3 [ 1.571758] generic-usb 0003:046D:C318.0002: input,hiddev96,hidraw1: USB HID v1.11 Device [Logitech Logitech Illuminated Keyboard] on usb-0000:00:10.0-1/input1 [ 1.571777] usbcore: registered new interface driver usbhid [ 1.571780] usbhid: USB HID core driver [ 1.700376] ata4.00: ATAPI: TSSTcorpCD/DVDW SH-S182D, SB04, max UDMA/33 [ 1.700407] ata4.01: ATAPI: TSSTcorp CDDVDW SH-S202J, SB02, max UDMA/66 [ 1.700429] ata4.01: limited to UDMA/33 due to 40-wire cable [ 1.740257] ata4.00: configured for UDMA/33 [ 1.780252] ata4.01: configured for UDMA/33 [ 1.781869] scsi 3:0:0:0: CD-ROM TSSTcorp CD/DVDW SH-S182D SB04 PQ: 0 ANSI: 5 [ 1.788470] sr0: scsi3-mmc drive: 48x/48x writer dvd-ram cd/rw xa/form2 cdda tray [ 1.788474] Uniform CD-ROM driver Revision: 3.20 [ 1.788599] sr 3:0:0:0: Attached scsi CD-ROM sr0 [ 1.788668] sr 3:0:0:0: Attached scsi generic sg2 type 5 [ 1.789298] scsi 3:0:1:0: CD-ROM TSSTcorp CDDVDW SH-S202J SB02 PQ: 0 ANSI: 5 [ 1.792684] sr1: scsi3-mmc drive: 48x/48x writer dvd-ram cd/rw xa/form2 cdda tray [ 1.792781] sr 3:0:1:0: Attached scsi CD-ROM sr1 [ 1.792836] sr 3:0:1:0: Attached scsi generic sg3 type 5 [ 1.802790] usb 3-1: new low speed USB device using uhci_hcd and address 2 [ 2.006221] input: Microsoft Microsoft Wheel Mouse Optical® as /devices/pci0000:00/0000:00:10.1/usb3/3-1/3-1:1.0/input/input4 [ 2.006408] generic-usb 0003:045E:0040.0003: input,hidraw2: USB HID v1.00 Mouse [Microsoft Microsoft Wheel Mouse Optical®] on usb-0000:00:10.1-1/input0 [ 2.968805] EXT3-fs: barriers not enabled [ 2.973653] kjournald starting. Commit interval 5 seconds [ 2.973688] EXT3-fs (sda11): mounted filesystem with ordered data mode [ 4.449890] Adding 995992k swap on /dev/sda12. Priority:-1 extents:1 across:995992k [ 4.761509] udev[405]: starting version 163 [ 5.790404] type=1400 audit(1289557735.750:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient3" pid=556 comm="apparmor_parser" [ 5.790704] type=1400 audit(1289557735.750:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=556 comm="apparmor_parser" [ 5.790864] type=1400 audit(1289557735.750:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=556 comm="apparmor_parser" [ 8.031075] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 [ 8.138711] EDAC MC: Ver: 2.1.0 Oct 16 2010 [ 8.142143] EDAC amd64_edac: Ver: 3.3.0 Oct 16 2010 [ 8.142236] EDAC amd64: This node reports that Memory ECC is currently disabled, set F3x44[22] (0000:00:18.3). [ 8.142243] EDAC amd64: ECC disabled in the BIOS or no ECC capability, module will not load. [ 8.142245] Either enable ECC checking or force module loading by setting 'ecc_enable_override'. [ 8.142246] (Note that use of the override may cause unknown side effects.) [ 8.142416] amd64_edac: probe of 0000:00:18.2 failed with error -22 [ 8.161151] k8temp 0000:00:18.3: Temperature readouts might be wrong - check erratum #141 [ 8.185993] parport_pc 00:0a: reported by Plug and Play ACPI [ 8.186045] parport0: PC-style at 0x378, irq 7 [PCSPP] [ 8.204875] lp: driver loaded but no devices found [ 8.260175] lp0: using parport0 (interrupt-driven). [ 8.260455] ppdev: user-space parallel port driver [ 8.555845] alloc irq_desc for 17 on node 0 [ 8.555849] alloc kstat_irqs on node 0 [ 8.555861] HDA Intel 0000:80:01.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 8.555916] HDA Intel 0000:80:01.0: setting latency timer to 64 [ 8.555929] BUG: unable to handle kernel paging request at ffffc90000360000 [ 8.556077] IP: [] azx_create+0x36b/0x73d [snd_hda_intel] [ 8.556184] PGD 75417067 PUD 75418067 PMD 75522067 PTE 800000fd00000173 [ 8.556421] Oops: 0009 [#1] SMP [ 8.556561] last sysfs file: /sys/devices/pci0000:00/0000:00:0f.0/host0/target0:0:0/0:0:0:0/block/sda/sda17/alignment_offset [ 8.556623] CPU 0 [ 8.556672] Modules linked in: snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq snd_timer snd_seq_device snd soundcore snd_page_alloc ppdev lp parport_pc k8temp edac_core edac_mce_amd i2c_viapro parport shpchp psmouse joydev serio_raw usbhid hid floppy via_rhine pata_via mii sata_via [ 8.558292] [ 8.558342] Pid: 856, comm: work_for_cpu Not tainted 2.6.35-22-generic #35-Ubuntu MS-7253/MS-7253 [ 8.558400] RIP: 0010:[] [] azx_create+0x36b/0x73d [snd_hda_intel] [ 8.558508] RSP: 0018:ffff880073aa5e20 EFLAGS: 00010282 [ 8.558560] RAX: ffffc90000360000 RBX: ffff880073aa5e80 RCX: 0000000000000000 [ 8.558615] RDX: 0000000000000000 RSI: 0000000000000286 RDI: 0000000000000286 [ 8.558671] RBP: ffff880073aa5e70 R08: 0000000000000001 R09: 0000000000000040 [ 8.558726] R10: 0000000000000008 R11: 0000000000000003 R12: ffff8800752af000 [ 8.558790] R13: ffff88007575e400 R14: 0000000000000000 R15: ffff88007575d400 [ 8.558855] FS: 00007f7f480467a0(0000) GS:ffff880001e00000(0000) knlGS:0000000000000000 [ 8.558930] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 8.558993] CR2: ffffc90000360000 CR3: 000000007536b000 CR4: 00000000000006f0 [ 8.559057] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 8.559122] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 8.559187] Process work_for_cpu (pid: 856, threadinfo ffff880073aa4000, task ffff88007417adc0) [ 8.559262] Stack: [ 8.559320] ffffffffa00bf1e0 ffffffffa009ad78 ffffffff00000000 0000000073aa5e88 [ 8.559519] <0> 0000000000000000 ffff8800752af000 ffffffffa009a520 ffff8800752af090 [ 8.559818] <0> 0000000000000000 0000000000000000 ffff880073aa5eb0 ffffffffa0099100 [ 8.560168] Call Trace: [ 8.560231] [] azx_probe+0xb8/0x284 [snd_hda_intel] [ 8.560298] [] ? do_work_for_cpu+0x0/0x30 [ 8.560363] [] local_pci_probe+0x17/0x20 [ 8.560426] [] do_work_for_cpu+0x18/0x30 [ 8.560489] [] kthread+0x96/0xa0 [ 8.560552] [] kernel_thread_helper+0x4/0x10 [ 8.560616] [] ? kthread+0x0/0xa0 [ 8.560678] [] ? kernel_thread_helper+0x0/0x10 [ 8.560740] Code: ef 31 f6 4c 89 ef 89 4d c0 e8 17 d5 ff ff 85 c0 0f 88 c3 03 00 00 4c 89 e7 e8 87 bd 23 e1 41 8b 7d 40 e8 1e 21 03 e1 49 8b 45 38 <66> 44 8b 30 41 8b 45 14 8b 4d c0 8d 50 fd 83 fa 01 77 3f 31 d2 [ 8.563732] RIP [] azx_create+0x36b/0x73d [snd_hda_intel] [ 8.563843] RSP [ 8.563902] CR2: ffffc90000360000 [ 8.563962] ---[ end trace ea6a32672ca8c0d1 ]--- [ 9.011387] EXT3-fs (sda11): using internal journal [ 9.201459] EXT3-fs: barriers not enabled [ 9.213179] kjournald starting. Commit interval 5 seconds [ 9.213323] EXT3-fs (sda13): using internal journal [ 9.213475] EXT3-fs (sda13): mounted filesystem with ordered data mode [ 9.659852] EXT3-fs: barriers not enabled [ 9.665279] kjournald starting. Commit interval 5 seconds [ 9.665445] EXT3-fs (sda17): using internal journal [ 9.665597] EXT3-fs (sda17): mounted filesystem with ordered data mode [ 9.982821] EXT3-fs: barriers not enabled [ 9.983072] kjournald starting. Commit interval 5 seconds [ 9.983224] EXT3-fs (sda16): using internal journal [ 9.983376] EXT3-fs (sda16): mounted filesystem with ordered data mode [ 10.243061] EXT3-fs: barriers not enabled [ 10.243329] kjournald starting. Commit interval 5 seconds [ 10.243488] EXT3-fs (sda15): using internal journal [ 10.243641] EXT3-fs (sda15): mounted filesystem with ordered data mode [ 10.769174] EXT3-fs: barriers not enabled [ 10.781022] kjournald starting. Commit interval 5 seconds [ 10.781168] EXT3-fs (sda14): using internal journal [ 10.781321] EXT3-fs (sda14): mounted filesystem with ordered data mode [ 12.678212] type=1400 audit(1289557742.630:5): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient3" pid=975 comm="apparmor_parser" [ 12.678575] type=1400 audit(1289557742.630:6): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=975 comm="apparmor_parser" [ 12.678828] type=1400 audit(1289557742.630:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=975 comm="apparmor_parser" [ 12.706775] type=1400 audit(1289557742.660:8): apparmor="STATUS" operation="profile_load" name="/usr/share/gdm/guest-session/Xsession" pid=974 comm="apparmor_parser" [ 12.741569] type=1400 audit(1289557742.690:9): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=978 comm="apparmor_parser" [ 12.742025] type=1400 audit(1289557742.690:10): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=978 comm="apparmor_parser" [ 12.760879] type=1400 audit(1289557742.710:11): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince" pid=976 comm="apparmor_parser" [ 12.764672] type=1400 audit(1289557742.720:12): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-previewer" pid=976 comm="apparmor_parser" [ 12.767077] type=1400 audit(1289557742.720:13): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-thumbnailer" pid=976 comm="apparmor_parser" [ 12.770019] type=1400 audit(1289557742.720:14): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=979 comm="apparmor_parser" [ 13.672933] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1 Bug: 697514 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-24-generic (buildd@yellow) (gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) ) #42-Ubuntu SMP Thu Dec 2 02:41:37 UTC 2010 (Ubuntu 2.6.35-24.42-generic 2.6.35.8) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-24-generic root=UUID=3a3bdef2-d2b1-42e9-b4f4-8774f733d24a ro quiet splash [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009d000 (usable) [ 0.000000] BIOS-e820: 000000000009d000 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 000000009b63f000 (usable) [ 0.000000] BIOS-e820: 000000009b63f000 - 000000009b6bf000 (reserved) [ 0.000000] BIOS-e820: 000000009b6bf000 - 000000009b7bf000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000009b7bf000 - 000000009b7ff000 (ACPI data) [ 0.000000] BIOS-e820: 000000009b7ff000 - 000000009b800000 (usable) [ 0.000000] BIOS-e820: 000000009b800000 - 00000000a0000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000feb00000 - 00000000feb04000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fed10000 - 00000000fed14000 (reserved) [ 0.000000] BIOS-e820: 00000000fed18000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1c000 - 00000000fed20000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ffe00000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 0000000158000000 (usable) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI 2.6 present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0x158000 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-EFFFF write-through [ 0.000000] F0000-FFFFF write-combining [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask F80000000 write-back [ 0.000000] 1 base 0FFE00000 mask FFFE00000 write-protect [ 0.000000] 2 base 080000000 mask FE0000000 write-back [ 0.000000] 3 base 09C000000 mask FFC000000 uncachable [ 0.000000] 4 base 09B800000 mask FFF800000 uncachable [ 0.000000] 5 base 100000000 mask F80000000 write-back [ 0.000000] 6 base 158000000 mask FF8000000 uncachable [ 0.000000] 7 base 160000000 mask FE0000000 uncachable [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] last_pfn = 0x9b800 max_arch_pfn = 0x400000000 [ 0.000000] e820 update range: 0000000000001000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009d000 (usable) [ 0.000000] modified: 000000000009d000 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 000000009b63f000 (usable) [ 0.000000] modified: 000000009b63f000 - 000000009b6bf000 (reserved) [ 0.000000] modified: 000000009b6bf000 - 000000009b7bf000 (ACPI NVS) [ 0.000000] modified: 000000009b7bf000 - 000000009b7ff000 (ACPI data) [ 0.000000] modified: 000000009b7ff000 - 000000009b800000 (usable) [ 0.000000] modified: 000000009b800000 - 00000000a0000000 (reserved) [ 0.000000] modified: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] modified: 00000000feb00000 - 00000000feb04000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] modified: 00000000fed10000 - 00000000fed14000 (reserved) [ 0.000000] modified: 00000000fed18000 - 00000000fed1a000 (reserved) [ 0.000000] modified: 00000000fed1c000 - 00000000fed20000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000ffe00000 - 0000000100000000 (reserved) [ 0.000000] modified: 0000000100000000 - 0000000158000000 (usable) [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] init_memory_mapping: 0000000000000000-000000009b800000 [ 0.000000] 0000000000 - 009b800000 page 2M [ 0.000000] kernel direct mapping tables up to 9b800000 @ 16000-1a000 [ 0.000000] init_memory_mapping: 0000000100000000-0000000158000000 [ 0.000000] 0100000000 - 0158000000 page 2M [ 0.000000] kernel direct mapping tables up to 158000000 @ 18000-1f000 [ 0.000000] RAMDISK: 37570000 - 37ff0000 [ 0.000000] ACPI: RSDP 00000000000fe020 00024 (v02 HP ) [ 0.000000] ACPI: XSDT 000000009b7fe120 00094 (v01 HPQOEM SLIC-MPC 00000001 01000013) [ 0.000000] ACPI: FACP 000000009b7fc000 000F4 (v04 HP SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: DSDT 000000009b7e9000 0FA19 (v02 HP SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: FACS 000000009b75f000 00040 [ 0.000000] ACPI: ASF! 000000009b7fd000 000A5 (v32 HP SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: HPET 000000009b7fb000 00038 (v01 HP SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: APIC 000000009b7fa000 0008C (v02 HP SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: MCFG 000000009b7f9000 0003C (v01 HP SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: SLIC 000000009b7e8000 00176 (v01 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: SSDT 000000009b7e6000 01152 (v01 TrmRef PtidDevc 00001000 INTL 20051117) [ 0.000000] ACPI: SSDT 000000009b7e5000 00172 (v01 VaRef Va_Acpi 00003000 INTL 20051117) [ 0.000000] ACPI: BOOT 000000009b7e4000 00028 (v01 HP SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: SSDT 000000009b7e3000 00C39 (v01 INTEL SataPri 00001000 INTL 20051117) [ 0.000000] ACPI: SSDT 000000009b7e2000 006C5 (v01 INTEL SataSec 00001000 INTL 20051117) [ 0.000000] ACPI: ASPT 000000009b7e1000 00034 (v04 HP SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: SSDT 000000009b7e0000 009F1 (v01 PmRef CpuPm 00003000 INTL 20051117) [ 0.000000] ACPI: SSDT 000000009b7de000 01A8F (v01 AmdRef AmdTabl 00001000 INTL 20051117) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-0000000158000000 [ 0.000000] Initmem setup node 0 0000000000000000-0000000158000000 [ 0.000000] NODE_DATA [0000000100000000 - 0000000100004fff] [ 0.000000] [ffffea0000000000-ffffea0004bfffff] PMD -> [ffff880100200000-ffff8801039fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal 0x00100000 -> 0x00158000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[4] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009d [ 0.000000] 0: 0x00000100 -> 0x0009b63f [ 0.000000] 0: 0x0009b7ff -> 0x0009b800 [ 0.000000] 0: 0x00100000 -> 0x00158000 [ 0.000000] On node 0 totalpages: 996813 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3925 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 14280 pages used for memmap [ 0.000000] DMA32 zone: 618104 pages, LIFO batch:31 [ 0.000000] Normal zone: 4928 pages used for memmap [ 0.000000] Normal zone: 355520 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x04] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x05] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x05] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x06] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x07] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x08] lapic_id[0x00] disabled) [ 0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 8 CPUs, 4 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [1a000 - 1a7ff] [ 0.000000] PM: Registered nosave memory: 000000000009d000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] PM: Registered nosave memory: 000000009b63f000 - 000000009b6bf000 [ 0.000000] PM: Registered nosave memory: 000000009b6bf000 - 000000009b7bf000 [ 0.000000] PM: Registered nosave memory: 000000009b7bf000 - 000000009b7ff000 [ 0.000000] PM: Registered nosave memory: 000000009b800000 - 00000000a0000000 [ 0.000000] PM: Registered nosave memory: 00000000a0000000 - 00000000e0000000 [ 0.000000] PM: Registered nosave memory: 00000000e0000000 - 00000000f0000000 [ 0.000000] PM: Registered nosave memory: 00000000f0000000 - 00000000feb00000 [ 0.000000] PM: Registered nosave memory: 00000000feb00000 - 00000000feb04000 [ 0.000000] PM: Registered nosave memory: 00000000feb04000 - 00000000fec00000 [ 0.000000] PM: Registered nosave memory: 00000000fec00000 - 00000000fec01000 [ 0.000000] PM: Registered nosave memory: 00000000fec01000 - 00000000fed10000 [ 0.000000] PM: Registered nosave memory: 00000000fed10000 - 00000000fed14000 [ 0.000000] PM: Registered nosave memory: 00000000fed14000 - 00000000fed18000 [ 0.000000] PM: Registered nosave memory: 00000000fed18000 - 00000000fed1a000 [ 0.000000] PM: Registered nosave memory: 00000000fed1a000 - 00000000fed1c000 [ 0.000000] PM: Registered nosave memory: 00000000fed1c000 - 00000000fed20000 [ 0.000000] PM: Registered nosave memory: 00000000fed20000 - 00000000fee00000 [ 0.000000] PM: Registered nosave memory: 00000000fee00000 - 00000000fee01000 [ 0.000000] PM: Registered nosave memory: 00000000fee01000 - 00000000ffe00000 [ 0.000000] PM: Registered nosave memory: 00000000ffe00000 - 0000000100000000 [ 0.000000] Allocating PCI resources starting at a0000000 (gap: a0000000:40000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:8 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 30 pages/cpu @ffff880001e00000 s91520 r8192 d23168 u262144 [ 0.000000] early_res array is doubled to 128 at [1a800 - 1b7ff] [ 0.000000] pcpu-alloc: s91520 r8192 d23168 u262144 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 4 5 6 7 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 977549 [ 0.000000] Policy zone: Normal [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-24-generic root=UUID=3a3bdef2-d2b1-42e9-b4f4-8774f733d24a ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Subtract (65 early reservations) [ 0.000000] #1 [0001000000 - 0001d17114] TEXT DATA BSS [ 0.000000] #2 [0037570000 - 0037ff0000] RAMDISK [ 0.000000] #3 [000009d000 - 0000100000] BIOS reserved [ 0.000000] #4 [0001d18000 - 0001d182f6] BRK [ 0.000000] #5 [0000010000 - 0000012000] TRAMPOLINE [ 0.000000] #6 [0000012000 - 0000016000] ACPI WAKEUP [ 0.000000] #7 [0000016000 - 0000018000] PGTABLE [ 0.000000] #8 [0000018000 - 000001a000] PGTABLE [ 0.000000] #9 [0100000000 - 0100005000] NODE_DATA [ 0.000000] #10 [0001d18300 - 0001d19300] BOOTMEM [ 0.000000] #11 [0001d17140 - 0001d17428] BOOTMEM [ 0.000000] #12 [0100005000 - 0100006000] BOOTMEM [ 0.000000] #13 [0100006000 - 0100007000] BOOTMEM [ 0.000000] #14 [0100200000 - 0103a00000] MEMMAP 0 [ 0.000000] #15 [0001d17440 - 0001d175c0] BOOTMEM [ 0.000000] #16 [0001d19300 - 0001d31300] BOOTMEM [ 0.000000] #17 [0001d31300 - 0001d3d300] BOOTMEM [ 0.000000] #18 [0001d3e000 - 0001d3f000] BOOTMEM [ 0.000000] #19 [0001d175c0 - 0001d17601] BOOTMEM [ 0.000000] #20 [0001d17640 - 0001d17683] BOOTMEM [ 0.000000] #21 [0001d176c0 - 0001d17ae8] BOOTMEM [ 0.000000] #22 [0001d17b00 - 0001d17b68] BOOTMEM [ 0.000000] #23 [0001d17b80 - 0001d17be8] BOOTMEM [ 0.000000] #24 [0001d17c00 - 0001d17c68] BOOTMEM [ 0.000000] #25 [0001d17c80 - 0001d17ce8] BOOTMEM [ 0.000000] #26 [0001d17d00 - 0001d17d68] BOOTMEM [ 0.000000] #27 [0001d17d80 - 0001d17de8] BOOTMEM [ 0.000000] #28 [0001d17e00 - 0001d17e68] BOOTMEM [ 0.000000] #29 [0001d17e80 - 0001d17ee8] BOOTMEM [ 0.000000] #30 [0001d17f00 - 0001d17f68] BOOTMEM [ 0.000000] #31 [0001d17f80 - 0001d17fe8] BOOTMEM [ 0.000000] #32 [0001d3d300 - 0001d3d368] BOOTMEM [ 0.000000] #33 [0001d3d380 - 0001d3d3e8] BOOTMEM [ 0.000000] #34 [0001d3d400 - 0001d3d468] BOOTMEM [ 0.000000] #35 [0001d3d480 - 0001d3d4e8] BOOTMEM [ 0.000000] #36 [0001d3d500 - 0001d3d568] BOOTMEM [ 0.000000] #37 [0001d3d580 - 0001d3d5e8] BOOTMEM [ 0.000000] #38 [0001d3d600 - 0001d3d668] BOOTMEM [ 0.000000] #39 [0001d3d680 - 0001d3d6e8] BOOTMEM [ 0.000000] #40 [0001d3d700 - 0001d3d720] BOOTMEM [ 0.000000] #41 [0001d3d740 - 0001d3d760] BOOTMEM [ 0.000000] #42 [0001d3d780 - 0001d3d7a0] BOOTMEM [ 0.000000] #43 [0001d3d7c0 - 0001d3d82a] BOOTMEM [ 0.000000] #44 [0001d3d840 - 0001d3d8aa] BOOTMEM [ 0.000000] #45 [0001e00000 - 0001e1e000] BOOTMEM [ 0.000000] #46 [0001e40000 - 0001e5e000] BOOTMEM [ 0.000000] #47 [0001e80000 - 0001e9e000] BOOTMEM [ 0.000000] #48 [0001ec0000 - 0001ede000] BOOTMEM [ 0.000000] #49 [0001f00000 - 0001f1e000] BOOTMEM [ 0.000000] #50 [0001f40000 - 0001f5e000] BOOTMEM [ 0.000000] #51 [0001f80000 - 0001f9e000] BOOTMEM [ 0.000000] #52 [0001fc0000 - 0001fde000] BOOTMEM [ 0.000000] #53 [0001d3d8c0 - 0001d3d8c8] BOOTMEM [ 0.000000] #54 [0001d3d900 - 0001d3d908] BOOTMEM [ 0.000000] #55 [0001d3d940 - 0001d3d960] BOOTMEM [ 0.000000] #56 [0001d3d980 - 0001d3d9c0] BOOTMEM [ 0.000000] #57 [0001d3d9c0 - 0001d3dae0] BOOTMEM [ 0.000000] #58 [0001d3db00 - 0001d3db48] BOOTMEM [ 0.000000] #59 [0001d3db80 - 0001d3dbc8] BOOTMEM [ 0.000000] #60 [0001d3f000 - 0001d47000] BOOTMEM [ 0.000000] #61 [0001fde000 - 0005fde000] BOOTMEM [ 0.000000] #62 [0001d47000 - 0001d67000] BOOTMEM [ 0.000000] #63 [0001d67000 - 0001da7000] BOOTMEM [ 0.000000] #64 [000001b800 - 0000023800] BOOTMEM [ 0.000000] Memory: 3838576k/5636096k available (5711k kernel code, 1648844k absent, 148676k reserved, 5379k data, 908k init) [ 0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:4352 nr_irqs:744 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 40632320 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.010000] Detected 1196.995 MHz processor. [ 0.000011] Calibrating delay loop (skipped), value calculated using timer frequency.. 2393.99 BogoMIPS (lpj=11969950) [ 0.000017] pid_max: default: 32768 minimum: 301 [ 0.000047] Security Framework initialized [ 0.000072] AppArmor: AppArmor initialized [ 0.000074] Yama: becoming mindful. [ 0.000715] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.002245] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.002847] Mount-cache hash table entries: 256 [ 0.003007] Initializing cgroup subsys ns [ 0.003013] Initializing cgroup subsys cpuacct [ 0.003018] Initializing cgroup subsys memory [ 0.003029] Initializing cgroup subsys devices [ 0.003032] Initializing cgroup subsys freezer [ 0.003035] Initializing cgroup subsys net_cls [ 0.003066] CPU: Physical Processor ID: 0 [ 0.003068] CPU: Processor Core ID: 0 [ 0.003077] mce: CPU supports 9 MCE banks [ 0.003090] CPU0: Thermal monitoring handled by SMI [ 0.003102] using mwait in idle threads. [ 0.003105] Performance Events: PEBS fmt1+, Westmere events, Intel PMU driver. [ 0.003116] ... version: 3 [ 0.003118] ... bit width: 48 [ 0.003120] ... generic registers: 4 [ 0.003122] ... value mask: 0000ffffffffffff [ 0.003125] ... max period: 000000007fffffff [ 0.003127] ... fixed-purpose events: 3 [ 0.003129] ... event mask: 000000070000000f [ 0.006423] ACPI: Core revision 20100428 [ 0.062793] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.062800] ftrace: allocating 22678 entries in 89 pages [ 0.074447] Setting APIC routing to flat [ 0.074825] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.174782] CPU0: Intel(R) Core(TM) i5 CPU U 430 @ 1.20GHz stepping 05 [ 0.286661] Booting Node 0, Processors #1 [ 0.446436] CPU1: Thermal monitoring handled by SMI [ 0.466685] #2 [ 0.626332] CPU2: Thermal monitoring handled by SMI [ 0.646509] #3 [ 0.806231] CPU3: Thermal monitoring handled by SMI [ 0.826323] Brought up 4 CPUs [ 0.826327] Total of 4 processors activated (9575.98 BogoMIPS). [ 0.828675] devtmpfs: initialized [ 0.830180] regulator: core version 0.5 [ 0.830210] Time: 21:04:34 Date: 01/04/11 [ 0.830254] NET: Registered protocol family 16 [ 0.830384] Trying to unpack rootfs image as initramfs... [ 0.830406] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it [ 0.830409] ACPI: bus type pci registered [ 0.830519] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.830524] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.887492] PCI: Using configuration type 1 for base access [ 0.888622] bio: create slab at 0 [ 0.893249] ACPI: EC: Look up EC in DSDT [ 0.897658] ACPI: Executed 1 blocks of module-level executable AML code [ 0.908766] ACPI: BIOS _OSI(Linux) query ignored [ 0.921439] ACPI: SSDT 000000009b691a98 0033A (v01 PmRef Cpu0Ist 00003000 INTL 20051117) [ 0.922633] ACPI: Dynamic OEM Table Load: [ 0.922637] ACPI: SSDT (null) 0033A (v01 PmRef Cpu0Ist 00003000 INTL 20051117) [ 0.923328] ACPI: SSDT 000000009b690018 00891 (v01 PmRef Cpu0Cst 00003001 INTL 20051117) [ 0.924483] ACPI: Dynamic OEM Table Load: [ 0.924487] ACPI: SSDT (null) 00891 (v01 PmRef Cpu0Cst 00003001 INTL 20051117) [ 0.925616] ACPI: SSDT 000000009b691718 00303 (v01 PmRef ApIst 00003000 INTL 20051117) [ 0.926890] ACPI: Dynamic OEM Table Load: [ 0.926894] ACPI: SSDT (null) 00303 (v01 PmRef ApIst 00003000 INTL 20051117) [ 0.927322] ACPI: SSDT 000000009b68fd98 00119 (v01 PmRef ApCst 00003000 INTL 20051117) [ 0.928566] ACPI: Dynamic OEM Table Load: [ 0.928570] ACPI: SSDT (null) 00119 (v01 PmRef ApCst 00003000 INTL 20051117) [ 1.180296] Freeing initrd memory: 10752k freed [ 1.336305] ACPI: Interpreter enabled [ 1.336313] ACPI: (supports S0 S3 S4 S5) [ 1.336381] ACPI: Using IOAPIC for interrupt routing [ 1.339421] [Firmware Bug]: ACPI: ACPI brightness control misses _BQC function [ 1.356441] [Firmware Bug]: ACPI: ACPI brightness control misses _BQC function [ 1.364758] ACPI: EC: GPE = 0x17, I/O: command/status = 0x66, data = 0x62 [ 1.364922] ACPI: Power Resource [FN00] (on) [ 1.365475] ACPI: No dock devices found. [ 1.365479] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 1.367052] \_SB_.PCI0:_OSC invalid UUID [ 1.367054] _OSC request data:1 8 1f [ 1.367061] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-fe]) [ 1.369268] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 1.369273] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 1.369276] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 1.369281] pci_root PNP0A08:00: host bridge window [mem 0xa0000000-0xfeafffff] [ 1.369379] pci 0000:00:01.0: PME# supported from D0 D3hot D3cold [ 1.369383] pci 0000:00:01.0: PME# disabled [ 1.369414] pci 0000:00:02.0: reg 10: [mem 0xc0000000-0xc03fffff 64bit] [ 1.369422] pci 0000:00:02.0: reg 18: [mem 0xb0000000-0xbfffffff 64bit pref] [ 1.369428] pci 0000:00:02.0: reg 20: [io 0x4050-0x4057] [ 1.369523] pci 0000:00:16.0: reg 10: [mem 0xc4506100-0xc450610f 64bit] [ 1.369579] pci 0000:00:16.0: PME# supported from D0 D3hot D3cold [ 1.369584] pci 0000:00:16.0: PME# disabled [ 1.369646] pci 0000:00:1a.0: reg 10: [mem 0xc4505c00-0xc4505fff] [ 1.369708] pci 0000:00:1a.0: PME# supported from D0 D3hot D3cold [ 1.369714] pci 0000:00:1a.0: PME# disabled [ 1.369754] pci 0000:00:1b.0: reg 10: [mem 0xc4500000-0xc4503fff 64bit] [ 1.369804] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 1.369809] pci 0000:00:1b.0: PME# disabled [ 1.369890] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 1.369895] pci 0000:00:1c.0: PME# disabled [ 1.369974] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 1.369979] pci 0000:00:1c.1: PME# disabled [ 1.370040] pci 0000:00:1d.0: reg 10: [mem 0xc4505800-0xc4505bff] [ 1.370103] pci 0000:00:1d.0: PME# supported from D0 D3hot D3cold [ 1.370109] pci 0000:00:1d.0: PME# disabled [ 1.370319] pci 0000:00:1f.2: reg 10: [io 0x4048-0x404f] [ 1.370327] pci 0000:00:1f.2: reg 14: [io 0x405c-0x405f] [ 1.370335] pci 0000:00:1f.2: reg 18: [io 0x4040-0x4047] [ 1.370343] pci 0000:00:1f.2: reg 1c: [io 0x4058-0x405b] [ 1.370351] pci 0000:00:1f.2: reg 20: [io 0x4020-0x403f] [ 1.370359] pci 0000:00:1f.2: reg 24: [mem 0xc4505000-0xc45057ff] [ 1.370407] pci 0000:00:1f.2: PME# supported from D3hot [ 1.370412] pci 0000:00:1f.2: PME# disabled [ 1.370449] pci 0000:00:1f.3: reg 10: [mem 0xc4506000-0xc45060ff 64bit] [ 1.370465] pci 0000:00:1f.3: reg 20: [io 0x4000-0x401f] [ 1.370524] pci 0000:00:1f.6: reg 10: [mem 0xc4504000-0xc4504fff 64bit] [ 1.370648] pci 0000:01:00.0: reg 10: [mem 0xa0000000-0xafffffff 64bit pref] [ 1.370662] pci 0000:01:00.0: reg 18: [mem 0xc4400000-0xc441ffff 64bit] [ 1.370670] pci 0000:01:00.0: reg 20: [io 0x3000-0x30ff] [ 1.370684] pci 0000:01:00.0: reg 30: [mem 0xfffe0000-0xffffffff pref] [ 1.370715] pci 0000:01:00.0: supports D1 D2 [ 1.370761] pci 0000:01:00.1: reg 10: [mem 0xc4420000-0xc4423fff 64bit] [ 1.370819] pci 0000:01:00.1: supports D1 D2 [ 1.370847] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 1.370851] pci 0000:00:01.0: bridge window [io 0x3000-0x3fff] [ 1.370855] pci 0000:00:01.0: bridge window [mem 0xc4400000-0xc44fffff] [ 1.370861] pci 0000:00:01.0: bridge window [mem 0xa0000000-0xafffffff 64bit pref] [ 1.370943] pci 0000:02:00.0: reg 10: [io 0x2000-0x20ff] [ 1.370966] pci 0000:02:00.0: reg 18: [mem 0xc0404000-0xc0404fff 64bit pref] [ 1.370983] pci 0000:02:00.0: reg 20: [mem 0xc0400000-0xc0403fff 64bit pref] [ 1.371035] pci 0000:02:00.0: supports D1 D2 [ 1.371038] pci 0000:02:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 1.371044] pci 0000:02:00.0: PME# disabled [ 1.371077] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 1.371082] pci 0000:00:1c.0: bridge window [io 0x2000-0x2fff] [ 1.371087] pci 0000:00:1c.0: bridge window [mem 0xc3400000-0xc43fffff] [ 1.371095] pci 0000:00:1c.0: bridge window [mem 0xc0400000-0xc13fffff 64bit pref] [ 1.371198] pci 0000:03:00.0: reg 10: [mem 0xc2400000-0xc2401fff 64bit] [ 1.371301] pci 0000:03:00.0: PME# supported from D0 D3hot D3cold [ 1.371308] pci 0000:03:00.0: PME# disabled [ 1.371341] pci 0000:00:1c.1: PCI bridge to [bus 03-03] [ 1.371346] pci 0000:00:1c.1: bridge window [io 0x1000-0x1fff] [ 1.371351] pci 0000:00:1c.1: bridge window [mem 0xc2400000-0xc33fffff] [ 1.371358] pci 0000:00:1c.1: bridge window [mem 0xc1400000-0xc23fffff 64bit pref] [ 1.371439] pci 0000:00:1e.0: PCI bridge to [bus 04-04] (subtractive decode) [ 1.371445] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 1.371451] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 1.371459] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 1.371462] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 1.371466] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 1.371469] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 1.371472] pci 0000:00:1e.0: bridge window [mem 0xa0000000-0xfeafffff] (subtractive decode) [ 1.371507] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 1.371910] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P2._PRT] [ 1.372122] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P1._PRT] [ 1.372494] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP01._PRT] [ 1.372729] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP02._PRT] [ 1.373312] \_SB_.PCI0:_OSC invalid UUID [ 1.373314] _OSC request data:1 19 1f [ 1.435825] ACPI: PCI Root Bridge [CPBG] (domain 0000 [bus ff]) [ 1.436754] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 *5 6 7 10 12 14 15) [ 1.437036] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 1.437315] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 7 *10 12 14 15) [ 1.437591] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 *5 6 7 11 12 14 15) [ 1.437867] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 7 10 12 14 15) *11 [ 1.438144] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 11 12 14 15) *0, disabled. [ 1.438422] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 7 10 12 14 15) *11 [ 1.438700] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 5 6 7 11 12 14 15) *0, disabled. [ 1.438831] HEST: Table is not found! [ 1.438928] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 1.438941] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=none,locks=none [ 1.438949] vgaarb: loaded [ 1.439130] SCSI subsystem initialized [ 1.439274] libata version 3.00 loaded. [ 1.439364] usbcore: registered new interface driver usbfs [ 1.439378] usbcore: registered new interface driver hub [ 1.439410] usbcore: registered new device driver usb [ 1.439886] ACPI: WMI: Mapper loaded [ 1.439889] PCI: Using ACPI for IRQ routing [ 1.439893] PCI: pci_cache_line_size set to 64 bytes [ 1.439997] reserve RAM buffer: 000000000009d000 - 000000000009ffff [ 1.440000] reserve RAM buffer: 000000009b63f000 - 000000009bffffff [ 1.440004] reserve RAM buffer: 000000009b800000 - 000000009bffffff [ 1.440129] NetLabel: Initializing [ 1.440132] NetLabel: domain hash size = 128 [ 1.440133] NetLabel: protocols = UNLABELED CIPSOv4 [ 1.440150] NetLabel: unlabeled traffic allowed by default [ 1.440198] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0, 0, 0, 0, 0 [ 1.440206] hpet0: 8 comparators, 64-bit 14.318180 MHz counter [ 1.442231] Switching to clocksource tsc [ 1.453454] AppArmor: AppArmor Filesystem Enabled [ 1.453480] pnp: PnP ACPI init [ 1.453519] ACPI: bus type pnp registered [ 1.455814] pnp 00:05: disabling [io 0x164e-0x164f] because it overlaps 0000:00:1c.1 BAR 13 [io 0x1000-0x1fff] [ 1.456345] alloc irq_desc for 23 on node 0 [ 1.456348] alloc kstat_irqs on node 0 [ 1.459097] pnp: PnP ACPI: found 12 devices [ 1.459100] ACPI: ACPI bus type pnp unregistered [ 1.459117] system 00:05: [io 0x0680-0x069f] has been reserved [ 1.459121] system 00:05: [io 0x0800-0x080f] has been reserved [ 1.459124] system 00:05: [io 0x0810-0x0813] has been reserved [ 1.459127] system 00:05: [io 0xffff] has been reserved [ 1.459135] system 00:05: [io 0x0400-0x047f] has been reserved [ 1.459139] system 00:05: [io 0x0500-0x0501] has been reserved [ 1.459142] system 00:05: [io 0x0700-0x077f] has been reserved [ 1.459150] system 00:0a: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 1.459154] system 00:0a: [mem 0xfed10000-0xfed13fff] has been reserved [ 1.459157] system 00:0a: [mem 0xfed18000-0xfed18fff] has been reserved [ 1.459160] system 00:0a: [mem 0xfed19000-0xfed19fff] has been reserved [ 1.459164] system 00:0a: [mem 0xe0000000-0xefffffff] has been reserved [ 1.459168] system 00:0a: [mem 0xfed20000-0xfed3ffff] has been reserved [ 1.459171] system 00:0a: [mem 0xfed45000-0xfed8ffff] has been reserved [ 1.459175] system 00:0a: [mem 0xff000000-0xffffffff] could not be reserved [ 1.459178] system 00:0a: [mem 0xfee00000-0xfeefffff] could not be reserved [ 1.459182] system 00:0a: [mem 0xc4600000-0xc4600fff] has been reserved [ 1.465365] pci 0000:01:00.0: no compatible bridge window for [mem 0xfffe0000-0xffffffff pref] [ 1.465415] pci 0000:01:00.0: BAR 6: assigned [mem 0xc4440000-0xc445ffff pref] [ 1.465419] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 1.465423] pci 0000:00:01.0: bridge window [io 0x3000-0x3fff] [ 1.465428] pci 0000:00:01.0: bridge window [mem 0xc4400000-0xc44fffff] [ 1.465432] pci 0000:00:01.0: bridge window [mem 0xa0000000-0xafffffff 64bit pref] [ 1.465439] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 1.465443] pci 0000:00:1c.0: bridge window [io 0x2000-0x2fff] [ 1.465449] pci 0000:00:1c.0: bridge window [mem 0xc3400000-0xc43fffff] [ 1.465454] pci 0000:00:1c.0: bridge window [mem 0xc0400000-0xc13fffff 64bit pref] [ 1.465462] pci 0000:00:1c.1: PCI bridge to [bus 03-03] [ 1.465466] pci 0000:00:1c.1: bridge window [io 0x1000-0x1fff] [ 1.465472] pci 0000:00:1c.1: bridge window [mem 0xc2400000-0xc33fffff] [ 1.465477] pci 0000:00:1c.1: bridge window [mem 0xc1400000-0xc23fffff 64bit pref] [ 1.465485] pci 0000:00:1e.0: PCI bridge to [bus 04-04] [ 1.465487] pci 0000:00:1e.0: bridge window [io disabled] [ 1.465493] pci 0000:00:1e.0: bridge window [mem disabled] [ 1.465498] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 1.465514] alloc irq_desc for 16 on node -1 [ 1.465516] alloc kstat_irqs on node -1 [ 1.465523] pci 0000:00:01.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.465529] pci 0000:00:01.0: setting latency timer to 64 [ 1.465540] alloc irq_desc for 17 on node -1 [ 1.465542] alloc kstat_irqs on node -1 [ 1.465547] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 1.465552] pci 0000:00:1c.0: setting latency timer to 64 [ 1.465563] pci 0000:00:1c.1: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 1.465568] pci 0000:00:1c.1: setting latency timer to 64 [ 1.465577] pci 0000:00:1e.0: setting latency timer to 64 [ 1.465583] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 1.465586] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 1.465588] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 1.465591] pci_bus 0000:00: resource 7 [mem 0xa0000000-0xfeafffff] [ 1.465595] pci_bus 0000:01: resource 0 [io 0x3000-0x3fff] [ 1.465597] pci_bus 0000:01: resource 1 [mem 0xc4400000-0xc44fffff] [ 1.465600] pci_bus 0000:01: resource 2 [mem 0xa0000000-0xafffffff 64bit pref] [ 1.465603] pci_bus 0000:02: resource 0 [io 0x2000-0x2fff] [ 1.465606] pci_bus 0000:02: resource 1 [mem 0xc3400000-0xc43fffff] [ 1.465609] pci_bus 0000:02: resource 2 [mem 0xc0400000-0xc13fffff 64bit pref] [ 1.465612] pci_bus 0000:03: resource 0 [io 0x1000-0x1fff] [ 1.465615] pci_bus 0000:03: resource 1 [mem 0xc2400000-0xc33fffff] [ 1.465618] pci_bus 0000:03: resource 2 [mem 0xc1400000-0xc23fffff 64bit pref] [ 1.465621] pci_bus 0000:04: resource 4 [io 0x0000-0x0cf7] [ 1.465624] pci_bus 0000:04: resource 5 [io 0x0d00-0xffff] [ 1.465627] pci_bus 0000:04: resource 6 [mem 0x000a0000-0x000bffff] [ 1.465629] pci_bus 0000:04: resource 7 [mem 0xa0000000-0xfeafffff] [ 1.465678] NET: Registered protocol family 2 [ 1.465891] IP route cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 1.467466] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 1.469871] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 1.470154] TCP: Hash tables configured (established 524288 bind 65536) [ 1.470157] TCP reno registered [ 1.470171] UDP hash table entries: 2048 (order: 4, 65536 bytes) [ 1.470206] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) [ 1.470361] NET: Registered protocol family 1 [ 1.470387] pci 0000:00:02.0: Boot video device [ 1.502324] PCI: CLS 64 bytes, default 64 [ 1.502328] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) [ 1.502332] Placing 64MB software IO TLB between ffff880001fde000 - ffff880005fde000 [ 1.502335] software IO TLB at phys 0x1fde000 - 0x5fde000 [ 1.502380] Simple Boot Flag at 0x44 set to 0x1 [ 1.502760] Scanning for low memory corruption every 60 seconds [ 1.502942] audit: initializing netlink socket (disabled) [ 1.502955] type=2000 audit(1294175074.360:1): initialized [ 1.524568] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 1.526540] VFS: Disk quotas dquot_6.5.2 [ 1.526620] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 1.527389] fuse init (API version 7.14) [ 1.527503] msgmni has been set to 7518 [ 1.530410] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 1.530414] io scheduler noop registered [ 1.530416] io scheduler deadline registered [ 1.530468] io scheduler cfq registered (default) [ 1.530601] pcieport 0000:00:01.0: setting latency timer to 64 [ 1.530632] alloc irq_desc for 40 on node -1 [ 1.530635] alloc kstat_irqs on node -1 [ 1.530648] pcieport 0000:00:01.0: irq 40 for MSI/MSI-X [ 1.530721] pcieport 0000:00:1c.0: setting latency timer to 64 [ 1.530756] alloc irq_desc for 41 on node -1 [ 1.530758] alloc kstat_irqs on node -1 [ 1.530767] pcieport 0000:00:1c.0: irq 41 for MSI/MSI-X [ 1.530848] pcieport 0000:00:1c.1: setting latency timer to 64 [ 1.530883] alloc irq_desc for 42 on node -1 [ 1.530885] alloc kstat_irqs on node -1 [ 1.530893] pcieport 0000:00:1c.1: irq 42 for MSI/MSI-X [ 1.530992] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 1.531281] \_SB_.PCI0:_OSC invalid UUID [ 1.531283] _OSC request data:1 0 1f [ 1.531538] \_SB_.PCI0:_OSC invalid UUID [ 1.531540] _OSC request data:1 0 1f [ 1.531810] \_SB_.PCI0:_OSC invalid UUID [ 1.531812] _OSC request data:1 0 1f [ 1.532060] \_SB_.PCI0:_OSC invalid UUID [ 1.532063] _OSC request data:1 0 1f [ 1.532120] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 1.532216] intel_idle: MWAIT substates: 0x1120 [ 1.532219] intel_idle: v0.4 model 0x25 [ 1.532221] intel_idle: lapic_timer_reliable_states 0xffffffff [ 1.534434] ACPI: AC Adapter [AC] (on-line) [ 1.534551] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input0 [ 1.534709] ACPI: Lid Switch [LID0] [ 1.534760] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1 [ 1.534767] ACPI: Power Button [PWRB] [ 1.534818] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2 [ 1.534822] ACPI: Power Button [PWRF] [ 1.535202] ACPI: Fan [FAN0] (on) [ 1.536847] ACPI: acpi_idle yielding to intel_idle [ 1.555150] thermal LNXTHERM:01: registered as thermal_zone0 [ 1.555159] ACPI: Thermal Zone [TZ00] (45 C) [ 1.556232] thermal LNXTHERM:02: registered as thermal_zone1 [ 1.556241] ACPI: Thermal Zone [TZ01] (31 C) [ 1.557467] thermal LNXTHERM:03: registered as thermal_zone2 [ 1.557479] ACPI: Thermal Zone [TZ02] (47 C) [ 1.557625] ERST: Table is not found! [ 1.558391] Linux agpgart interface v0.103 [ 1.558427] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 1.560465] brd: module loaded [ 1.561210] loop: module loaded [ 1.561900] Fixed MDIO Bus: probed [ 1.561937] PPP generic driver version 2.4.2 [ 1.561975] tun: Universal TUN/TAP device driver, 1.6 [ 1.561977] tun: (C) 1999-2004 Max Krasnyansky [ 1.562061] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 1.562091] ehci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.562150] ehci_hcd 0000:00:1a.0: setting latency timer to 64 [ 1.562155] ehci_hcd 0000:00:1a.0: EHCI Host Controller [ 1.562208] ehci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 1 [ 1.562246] ehci_hcd 0000:00:1a.0: debug port 2 [ 1.566177] ehci_hcd 0000:00:1a.0: cache line size of 64 is not supported [ 1.566201] ehci_hcd 0000:00:1a.0: irq 16, io mem 0xc4505c00 [ 1.581660] ACPI: Battery Slot [BAT0] (battery present) [ 1.583443] ehci_hcd 0000:00:1a.0: USB 2.0 started, EHCI 1.00 [ 1.583613] hub 1-0:1.0: USB hub found [ 1.583619] hub 1-0:1.0: 3 ports detected [ 1.583700] alloc irq_desc for 20 on node -1 [ 1.583702] alloc kstat_irqs on node -1 [ 1.583710] ehci_hcd 0000:00:1d.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20 [ 1.583728] ehci_hcd 0000:00:1d.0: setting latency timer to 64 [ 1.583732] ehci_hcd 0000:00:1d.0: EHCI Host Controller [ 1.583772] ehci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2 [ 1.583802] ehci_hcd 0000:00:1d.0: debug port 2 [ 1.587738] ehci_hcd 0000:00:1d.0: cache line size of 64 is not supported [ 1.587755] ehci_hcd 0000:00:1d.0: irq 20, io mem 0xc4505800 [ 1.603428] ehci_hcd 0000:00:1d.0: USB 2.0 started, EHCI 1.00 [ 1.603578] hub 2-0:1.0: USB hub found [ 1.603583] hub 2-0:1.0: 3 ports detected [ 1.603652] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 1.603667] uhci_hcd: USB Universal Host Controller Interface driver [ 1.603798] PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 1.607319] i8042.c: Detected active multiplexing controller, rev 1.1. [ 1.610870] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 1.610879] serio: i8042 AUX0 port at 0x60,0x64 irq 12 [ 1.610884] serio: i8042 AUX1 port at 0x60,0x64 irq 12 [ 1.610889] serio: i8042 AUX2 port at 0x60,0x64 irq 12 [ 1.610894] serio: i8042 AUX3 port at 0x60,0x64 irq 12 [ 1.610995] mice: PS/2 mouse device common for all mice [ 1.611170] rtc_cmos 00:06: RTC can wake from S4 [ 1.611217] rtc_cmos 00:06: rtc core: registered rtc_cmos as rtc0 [ 1.611249] rtc0: alarms up to one year, y3k, 242 bytes nvram, hpet irqs [ 1.611371] device-mapper: uevent: version 1.0.3 [ 1.611493] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 1.611615] device-mapper: multipath: version 1.1.1 loaded [ 1.611620] device-mapper: multipath round-robin: version 1.0.0 loaded [ 1.612044] cpuidle: using governor ladder [ 1.612240] cpuidle: using governor menu [ 1.612591] TCP cubic registered [ 1.612749] NET: Registered protocol family 10 [ 1.613194] lo: Disabled Privacy Extensions [ 1.613464] NET: Registered protocol family 17 [ 1.616018] ACPI Error (psargs-0359): [NPSS] Namespace lookup failure, AE_NOT_FOUND [ 1.616034] ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU0.PPC_] (Node ffff88015334da00), AE_NOT_FOUND [ 1.616243] ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU0._PPC] (Node ffff88015334d920), AE_NOT_FOUND [ 1.617854] ACPI Error (psargs-0359): [NPSS] Namespace lookup failure, AE_NOT_FOUND [ 1.617868] ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU0.PPC_] (Node ffff88015334da00), AE_NOT_FOUND [ 1.618075] ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU0._PPC] (Node ffff88015334d920), AE_NOT_FOUND [ 1.618281] ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU1._PPC] (Node ffff88015334d9e0), AE_NOT_FOUND [ 1.619737] ACPI Error (psargs-0359): [NPSS] Namespace lookup failure, AE_NOT_FOUND [ 1.619751] ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU0.PPC_] (Node ffff88015334da00), AE_NOT_FOUND [ 1.619958] ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU0._PPC] (Node ffff88015334d920), AE_NOT_FOUND [ 1.620164] ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU2._PPC] (Node ffff88015334dbc0), AE_NOT_FOUND [ 1.620909] ACPI Error (psargs-0359): [NPSS] Namespace lookup failure, AE_NOT_FOUND [ 1.620916] ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU0.PPC_] (Node ffff88015334da00), AE_NOT_FOUND [ 1.621002] ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU0._PPC] (Node ffff88015334d920), AE_NOT_FOUND [ 1.621081] ACPI Error (psparse-0537): Method parse/execution failed [\_PR_.CPU3._PPC] (Node ffff88015334db40), AE_NOT_FOUND [ 1.621386] PM: Resume from disk failed. [ 1.621399] registered taskstats version 1 [ 1.621721] Magic number: 11:10:95 [ 1.621897] rtc_cmos 00:06: setting system clock to 2011-01-04 21:04:35 UTC (1294175075) [ 1.621901] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 1.621903] EDD information not available. [ 1.622005] Freeing unused kernel memory: 908k freed [ 1.622226] Write protecting the kernel read-only data: 10240k [ 1.622564] Freeing unused kernel memory: 412k freed [ 1.622901] Freeing unused kernel memory: 1644k freed [ 1.644406] udev[98]: starting version 163 [ 1.653848] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3 [ 1.771855] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded [ 1.771895] r8169 0000:02:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.773598] r8169 0000:02:00.0: setting latency timer to 64 [ 1.773663] alloc irq_desc for 43 on node -1 [ 1.773668] alloc kstat_irqs on node -1 [ 1.773693] r8169 0000:02:00.0: irq 43 for MSI/MSI-X [ 1.774739] r8169 0000:02:00.0: eth0: RTL8168d/8111d at 0xffffc900110dc000, 1c:c1:de:8f:3e:32, XID 083000c0 IRQ 43 [ 1.790588] ahci 0000:00:1f.2: version 3.0 [ 1.790618] alloc irq_desc for 19 on node -1 [ 1.790623] alloc kstat_irqs on node -1 [ 1.790637] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.790722] alloc irq_desc for 44 on node -1 [ 1.790726] alloc kstat_irqs on node -1 [ 1.790743] ahci 0000:00:1f.2: irq 44 for MSI/MSI-X [ 1.790823] ahci 0000:00:1f.2: AHCI 0001.0300 32 slots 4 ports 3 Gbps 0x1 impl SATA mode [ 1.790830] ahci 0000:00:1f.2: flags: 64bit ncq sntf ilck pm led clo pio slum part ems apst [ 1.790839] ahci 0000:00:1f.2: setting latency timer to 64 [ 1.797321] scsi0 : ahci [ 1.797553] scsi1 : ahci [ 1.797681] scsi2 : ahci [ 1.797851] scsi3 : ahci [ 1.798183] ata1: SATA max UDMA/133 abar m2048@0xc4505000 port 0xc4505100 irq 44 [ 1.798188] ata2: DUMMY [ 1.798190] ata3: DUMMY [ 1.798193] ata4: DUMMY [ 1.903357] usb 1-1: new high speed USB device using ehci_hcd and address 2 [ 2.052918] hub 1-1:1.0: USB hub found [ 2.053100] hub 1-1:1.0: 6 ports detected [ 2.141963] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 2.142868] ata1.00: ATA-8: Hitachi HTS725050A9A364, PC4OC72E, max UDMA/100 [ 2.142874] ata1.00: 976773168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA [ 2.144086] ata1.00: configured for UDMA/100 [ 2.171947] usb 2-1: new high speed USB device using ehci_hcd and address 2 [ 2.172131] scsi 0:0:0:0: Direct-Access ATA Hitachi HTS72505 PC4O PQ: 0 ANSI: 5 [ 2.172374] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 2.172471] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/465 GiB) [ 2.172553] sd 0:0:0:0: [sda] Write Protect is off [ 2.172557] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 2.172582] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.172733] sda: sda1 sda2 sda3 sda4 [ 2.214895] sd 0:0:0:0: [sda] Attached SCSI disk [ 2.332851] hub 2-1:1.0: USB hub found [ 2.332913] hub 2-1:1.0: 8 ports detected [ 2.411893] usb 1-1.3: new full speed USB device using ehci_hcd and address 3 [ 2.621772] usb 1-1.4: new full speed USB device using ehci_hcd and address 4 [ 2.627249] EXT4-fs (sda3): mounted filesystem with ordered data mode. Opts: (null) [ 2.832376] usb 2-1.5: new full speed USB device using ehci_hcd and address 3 [ 3.023477] usb 2-1.6: new full speed USB device using ehci_hcd and address 4 [ 3.201656] usb 2-1.6: new high speed USB device using ehci_hcd and address 5 [ 11.718445] Adding 4194300k swap on /dev/sda2. Priority:-1 extents:1 across:4194300k [ 11.735178] udev[491]: starting version 163 [ 12.078602] type=1400 audit(1294203885.955:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient3" pid=724 comm="apparmor_parser" [ 12.079531] type=1400 audit(1294203885.955:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=724 comm="apparmor_parser" [ 12.080014] type=1400 audit(1294203885.955:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=724 comm="apparmor_parser" [ 12.086115] lp: driver loaded but no devices found [ 12.266073] Bluetooth: Core ver 2.15 [ 12.266173] NET: Registered protocol family 31 [ 12.266176] Bluetooth: HCI device and connection manager initialized [ 12.266181] Bluetooth: HCI socket layer initialized [ 12.290899] cfg80211: Calling CRDA to update world regulatory domain [ 12.297563] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 12.297684] cfg80211: World regulatory domain updated: [ 12.297688] (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 12.297695] (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 12.297700] (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 12.297705] (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 12.297710] (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 12.297714] (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 12.298709] usbcore: registered new interface driver btusb [ 12.299531] input: Wacom ISDv4 E3 Finger as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5/2-1.5:1.0/input/input4 [ 12.304798] input: Wacom ISDv4 E3 Pen as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5/2-1.5:1.1/input/input5 [ 12.305011] usbcore: registered new interface driver wacom [ 12.305015] wacom: v1.52:USB Wacom tablet driver [ 12.320830] agpgart-intel 0000:00:00.0: Intel HD Graphics Chipset [ 12.322118] agpgart-intel 0000:00:00.0: detected 32764K stolen memory [ 12.415662] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xb0000000 [ 12.456807] lis3lv02d: laptop model unknown, using default axes configuration [ 12.457759] lis3lv02d: 8 bits sensor found [ 12.498205] input: ST LIS3LV02DL Accelerometer as /devices/platform/lis3lv02d/input/input6 [ 12.498391] Registered led device: hp::hddprotect [ 12.498429] lis3lv02d driver loaded. [ 12.552273] intel ips 0000:00:1f.6: Warning: CPU TDP doesn't match expected value (found 11, expected 18) [ 12.552302] alloc irq_desc for 21 on node -1 [ 12.552305] alloc kstat_irqs on node -1 [ 12.552316] intel ips 0000:00:1f.6: PCI INT A -> GSI 21 (level, low) -> IRQ 21 [ 12.552517] intel ips 0000:00:1f.6: failed to get i915 symbols, graphics turbo disabled [ 12.552706] intel ips 0000:00:1f.6: IPS driver initialized, MCP temp limit 65535 [ 12.587086] Linux video capture interface: v2.00 [ 12.714246] usbcore: registered new interface driver hiddev [ 12.714364] usbcore: registered new interface driver usbhid [ 12.714369] usbhid: USB HID core driver [ 12.746985] [drm] Initialized drm 1.1.0 20060810 [ 12.754275] uvcvideo: Found UVC 1.00 device HP Webcam (10f1:1a16) [ 12.762138] input: HP Webcam as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0/input/input7 [ 12.762226] usbcore: registered new interface driver uvcvideo [ 12.762230] USB Video Class driver (v0.1.0) [ 12.946977] input: HP WMI hotkeys as /devices/virtual/input/input8 [ 12.977629] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 12.977638] i915 0000:00:02.0: setting latency timer to 64 [ 13.000999] iwlagn: Intel(R) Wireless WiFi Link AGN driver for Linux, in-tree: [ 13.001005] iwlagn: Copyright(c) 2003-2010 Intel Corporation [ 13.001099] iwlagn 0000:03:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 13.001110] iwlagn 0000:03:00.0: setting latency timer to 64 [ 13.001212] iwlagn 0000:03:00.0: Detected Intel(R) Centrino(R) Wireless-N 1000 BGN, REV=0x6C [ 13.019887] iwlagn 0000:03:00.0: Tunable channels: 13 802.11bg, 0 802.11a channels [ 13.019983] alloc irq_desc for 45 on node -1 [ 13.019987] alloc kstat_irqs on node -1 [ 13.020033] iwlagn 0000:03:00.0: irq 45 for MSI/MSI-X [ 13.062540] mtrr: no more MTRRs available [ 13.062544] [drm] MTRR allocation failed. Graphics performance may suffer. [ 13.062688] alloc irq_desc for 46 on node -1 [ 13.062694] alloc kstat_irqs on node -1 [ 13.062716] i915 0000:00:02.0: irq 46 for MSI/MSI-X [ 13.062737] [drm] set up 31M of stolen space [ 13.066726] iwlagn 0000:03:00.0: loaded firmware version 128.50.3.1 build 13488 [ 13.093167] input: PS/2 Synaptics TouchPad as /devices/platform/i8042/serio4/input/input9 [ 13.174463] [drm] radeon defaulting to kernel modesetting. [ 13.174468] [drm] radeon kernel modesetting enabled. [ 13.174513] VGA switcheroo: detected switching method \_SB_.PCI0.GFX0.ATPX handle [ 13.174573] radeon 0000:01:00.0: enabling device (0000 -> 0003) [ 13.174586] radeon 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 13.174593] radeon 0000:01:00.0: setting latency timer to 64 [ 13.176167] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=io+mem,decodes=none:owns=io+mem [ 13.176176] vgaarb: transferring owner from PCI:0000:00:02.0 to PCI:0000:01:00.0 [ 13.176414] [drm] initializing kernel modesetting (CEDAR 0x1002:0x68E0). [ 13.176665] [drm] register mmio base: 0xC4400000 [ 13.176668] [drm] register mmio size: 131072 [ 13.176671] vga_switcheroo: enabled [ 13.176899] radeon atpx: version is 1 [ 13.219726] phy0: Selected rate control algorithm 'iwl-agn-rs' [ 13.301916] ATOM BIOS: HP [ 13.301943] [drm] Clocks initialized ! [ 13.301965] radeon 0000:01:00.0: limiting VRAM [ 13.301969] radeon 0000:01:00.0: VRAM: 3584M 0x00000000 - 0xDFFFFFFF (3584M used) [ 13.301973] radeon 0000:01:00.0: GTT: 512M 0xE0000000 - 0xFFFFFFFF [ 13.302004] mtrr: no more MTRRs available [ 13.302006] [drm] Detected VRAM RAM=3584M, BAR=256M [ 13.302009] [drm] RAM width 128bits DDR [ 13.302079] [TTM] Zone kernel: Available graphics memory: 1926146 kiB. [ 13.302082] [TTM] Initializing pool allocator. [ 13.302111] [drm] radeon: 3584M of VRAM memory ready [ 13.302113] [drm] radeon: 512M of GTT memory ready. [ 13.302185] alloc irq_desc for 47 on node -1 [ 13.302187] alloc kstat_irqs on node -1 [ 13.302206] radeon 0000:01:00.0: irq 47 for MSI/MSI-X [ 13.302215] radeon 0000:01:00.0: radeon: using MSI. [ 13.302233] radeon 0000:01:00.0: IH ring buffer overflow (0xFFFFFFFF, 0, 15) [ 13.302273] [drm] radeon: irq initialized. [ 13.302277] [drm] GART: num cpu pages 131072, num gpu pages 131072 [ 13.303071] [drm] Loading CEDAR Microcode [ 13.565501] Skipping EDID probe due to cached edid [ 14.021385] Console: switching to colour frame buffer device 160x50 [ 14.024816] fb0: inteldrmfb frame buffer device [ 14.024819] drm: registered panic notifier [ 14.024824] Slow work thread pool: Starting up [ 14.024944] Slow work thread pool: Ready [ 14.028299] [Firmware Bug]: ACPI: ACPI brightness control misses _BQC function [ 14.030443] acpi device:01: registered as cooling_device5 [ 14.032012] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input10 [ 14.032130] ACPI: Video Device [GFX0] (multi-head: yes rom: no post: no) [ 14.032195] [Firmware Bug]: ACPI(PEGP) defines _DOD but not _DOS [ 14.035737] acpi device:0a: registered as cooling_device6 [ 14.038003] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:08/LNXVIDEO:01/input/input11 [ 14.038091] ACPI: Video Device [PEGP] (multi-head: yes rom: no post: no) [ 14.038223] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 14.072965] Skipping EDID probe due to cached edid [ 14.301663] radeon 0000:01:00.0: Wait for MC idle timedout ! [ 14.497906] radeon 0000:01:00.0: Wait for MC idle timedout ! [ 14.517338] BUG: unable to handle kernel paging request at ffffc90422101ffc [ 14.517348] IP: [] evergreen_cp_start+0x4c/0x570 [radeon] [ 14.517397] PGD 157c0c067 PUD 0 [ 14.517403] Oops: 0002 [#1] SMP [ 14.517407] last sysfs file: /sys/module/snd_rawmidi/initstate [ 14.517412] CPU 0 [ 14.517414] Modules linked in: snd_rawmidi snd_seq_midi_event snd_seq arc4 snd_timer radeon(+) snd_seq_device snd ttm iwlagn i915 iwlcore soundcore drm_kms_helper uvcvideo drm joydev usbhid mac80211 hid snd_page_alloc videodev v4l1_compat v4l2_compat_ioctl32 intel_ips hp_wmi hp_accel lis3lv02d input_polldev video intel_agp btusb wacom cfg80211 bluetooth i2c_algo_bit led_class psmouse output serio_raw lp parport ahci libahci r8169 mii [ 14.517468] [ 14.517475] Pid: 564, comm: modprobe Not tainted 2.6.35-24-generic #42-Ubuntu 1486/HP TouchSmart tm2 Notebook PC [ 14.517480] RIP: 0010:[] [] evergreen_cp_start+0x4c/0x570 [radeon] [ 14.517513] RSP: 0018:ffff880145bcbb48 EFLAGS: 00010286 [ 14.517515] RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffff880145bcbfd8 [ 14.517518] RDX: ffffc90422101ffc RSI: 0000000000000007 RDI: 0000000000000010 [ 14.517521] RBP: ffff880145bcbb58 R08: ffff880145bca000 R09: 00000000ffffffff [ 14.517524] R10: 00000000ffffffff R11: 0000000000000001 R12: ffff880153604000 [ 14.517527] R13: 0000000000c10027 R14: 00000000fffffff4 R15: ffffffffa0408c80 [ 14.517531] FS: 00007f3dabda0700(0000) GS:ffff880001e00000(0000) knlGS:0000000000000000 [ 14.517534] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 14.517537] CR2: ffffc90422101ffc CR3: 000000014eb1c000 CR4: 00000000000006f0 [ 14.517541] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 14.517545] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 14.517550] Process modprobe (pid: 564, threadinfo ffff880145bca000, task ffff880145b80000) [ 14.517553] Stack: [ 14.517556] ffff880153604000 0000000008000911 ffff880145bcbb78 ffffffffa03e174d [ 14.517562] <0> ffff880153604000 0000000000000000 ffff880145bcbb98 ffffffffa03e1a6f [ 14.517569] <0> ffff880153604000 0000000000000000 ffff880145bcbbc8 ffffffffa03e1d63 [ 14.517576] Call Trace: [ 14.517616] [] evergreen_cp_resume+0x2ad/0x520 [radeon] [ 14.517648] [] evergreen_startup+0xaf/0x140 [radeon] [ 14.517678] [] evergreen_init+0x263/0x4d0 [radeon] [ 14.517703] [] radeon_device_init+0x344/0x4a0 [radeon] [ 14.517729] [] radeon_driver_load_kms+0xa3/0x250 [radeon] [ 14.517745] [] drm_get_dev+0x15f/0x2c0 [drm] [ 14.517754] [] ? sysfs_add_one+0x2c/0x130 [ 14.517783] [] radeon_pci_probe+0x15/0x269 [radeon] [ 14.517789] [] local_pci_probe+0x17/0x20 [ 14.517794] [] __pci_device_probe+0xe9/0xf0 [ 14.517800] [] ? kobject_get+0x1a/0x30 [ 14.517806] [] ? get_device+0x19/0x20 [ 14.517811] [] pci_device_probe+0x3a/0x60 [ 14.517815] [] really_probe+0x68/0x190 [ 14.517820] [] driver_probe_device+0x45/0x70 [ 14.517824] [] __driver_attach+0x9b/0xa0 [ 14.517827] [] ? __driver_attach+0x0/0xa0 [ 14.517831] [] bus_for_each_dev+0x68/0x90 [ 14.517835] [] driver_attach+0x1e/0x20 [ 14.517839] [] bus_add_driver+0xde/0x280 [ 14.517843] [] driver_register+0x80/0x150 [ 14.517848] [] __pci_register_driver+0x56/0xd0 [ 14.517858] [] drm_init+0x111/0x120 [drm] [ 14.517865] [] ? vga_switcheroo_register_handler+0x3a/0x60 [ 14.517887] [] ? radeon_init+0x0/0xc6 [radeon] [ 14.517907] [] radeon_init+0xc4/0xc6 [radeon] [ 14.517915] [] do_one_initcall+0x3c/0x1a0 [ 14.517923] [] sys_init_module+0xbb/0x200 [ 14.517929] [] system_call_fastpath+0x16/0x1b [ 14.517931] Code: 00 00 41 8b bc 24 e4 09 00 00 85 ff 0f 8e ce 03 00 00 41 8b 84 24 d4 09 00 00 89 c2 83 c0 01 48 c1 e2 02 49 03 94 24 c8 09 00 00 02 00 44 05 c0 41 8b 94 24 e4 09 00 00 41 23 84 24 f4 09 00 [ 14.517971] RIP [] evergreen_cp_start+0x4c/0x570 [radeon] [ 14.518002] RSP [ 14.518004] CR2: ffffc90422101ffc [ 14.518007] ---[ end trace 747350649dc20cc7 ]--- [ 14.578903] EXT4-fs (sda3): re-mounted. Opts: errors=remount-ro [ 14.673607] alloc irq_desc for 22 on node -1 [ 14.673614] alloc kstat_irqs on node -1 [ 14.673628] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 14.673734] alloc irq_desc for 48 on node -1 [ 14.673737] alloc kstat_irqs on node -1 [ 14.673752] HDA Intel 0000:00:1b.0: irq 48 for MSI/MSI-X [ 14.673792] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 14.875280] input: HDA Intel Mic at Ext Left Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input12 [ 14.875431] input: HDA Intel HP Out at Ext Left Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input13 [ 15.102590] r8169 0000:02:00.0: eth0: link down [ 15.103544] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 15.111473] type=1400 audit(1294203888.985:5): apparmor="STATUS" operation="profile_load" name="/usr/share/gdm/guest-session/Xsession" pid=1221 comm="apparmor_parser" [ 15.113657] type=1400 audit(1294203888.985:6): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient3" pid=1222 comm="apparmor_parser" [ 15.114537] type=1400 audit(1294203888.985:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1222 comm="apparmor_parser" [ 15.115052] type=1400 audit(1294203888.995:8): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=1222 comm="apparmor_parser" [ 15.115707] type=1400 audit(1294203888.995:9): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=1226 comm="apparmor_parser" [ 15.118529] type=1400 audit(1294203888.995:10): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=1225 comm="apparmor_parser" [ 15.119551] type=1400 audit(1294203888.995:11): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=1225 comm="apparmor_parser" [ 15.246768] ADDRCONF(NETDEV_UP): wlan0: link is not ready [ 15.349765] Skipping EDID probe due to cached edid [ 15.366737] Skipping EDID probe due to cached edid Bug: 708286 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-25-generic (buildd@palmer) (gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) ) #44-Ubuntu SMP Fri Jan 21 17:40:48 UTC 2011 (Ubuntu 2.6.35-25.44-generic 2.6.35.10) [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009ec00 (usable) [ 0.000000] BIOS-e820: 000000000009ec00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000b70d0000 (usable) [ 0.000000] BIOS-e820: 00000000b70d0000 - 00000000b70d0200 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000b70d0200 - 00000000b70d2000 (reserved) [ 0.000000] BIOS-e820: 00000000b70d2000 - 00000000b71d0000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000b71d0000 - 00000000b71f0000 (ACPI data) [ 0.000000] BIOS-e820: 00000000b71f0000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fed10000 - 00000000fed14000 (reserved) [ 0.000000] BIOS-e820: 00000000fed18000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1c000 - 00000000fed20000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ffe00000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 0000000138000000 (usable) [ 0.000000] Notice: NX (Execute Disable) protection cannot be enabled: non-PAE kernel! [ 0.000000] DMI 2.4 present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] last_pfn = 0xb70d0 max_arch_pfn = 0x100000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-D3FFF write-protect [ 0.000000] D4000-DFFFF uncachable [ 0.000000] E0000-EFFFF write-through [ 0.000000] F0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0FFE00000 mask FFFE00000 uncachable [ 0.000000] 1 base 000000000 mask F80000000 write-back [ 0.000000] 2 base 080000000 mask FC0000000 write-back [ 0.000000] 3 base 0B8000000 mask FF8000000 uncachable [ 0.000000] 4 base 100000000 mask FC0000000 write-back [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820 update range: 00000000b8000000 - 0000000100000000 (usable) ==> (reserved) [ 0.000000] e820 update range: 0000000000002000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000001000 (reserved) [ 0.000000] modified: 0000000000001000 - 0000000000002000 (usable) [ 0.000000] modified: 0000000000002000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009ec00 (usable) [ 0.000000] modified: 000000000009ec00 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 00000000b70d0000 (usable) [ 0.000000] modified: 00000000b70d0000 - 00000000b70d0200 (ACPI NVS) [ 0.000000] modified: 00000000b70d0200 - 00000000b70d2000 (reserved) [ 0.000000] modified: 00000000b70d2000 - 00000000b71d0000 (ACPI NVS) [ 0.000000] modified: 00000000b71d0000 - 00000000b71f0000 (ACPI data) [ 0.000000] modified: 00000000b71f0000 - 00000000c0000000 (reserved) [ 0.000000] modified: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] modified: 00000000fed10000 - 00000000fed14000 (reserved) [ 0.000000] modified: 00000000fed18000 - 00000000fed1a000 (reserved) [ 0.000000] modified: 00000000fed1c000 - 00000000fed20000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000ffe00000 - 0000000100000000 (reserved) [ 0.000000] modified: 0000000100000000 - 0000000138000000 (usable) [ 0.000000] initial memory mapped : 0 - 00c00000 [ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000 [ 0.000000] 0000000000 - 0000400000 page 4k [ 0.000000] 0000400000 - 0037400000 page 2M [ 0.000000] 0037400000 - 00377fe000 page 4k [ 0.000000] kernel direct mapping tables up to 377fe000 @ 15000-1a000 [ 0.000000] RAMDISK: 374ed000 - 37ff0000 [ 0.000000] Allocated new RAMDISK: 009a7000 - 014a9659 [ 0.000000] Move RAMDISK from 00000000374ed000 - 0000000037fef658 to 009a7000 - 014a9658 [ 0.000000] ACPI: RSDP 000f0030 00014 (v00 TOSHIB) [ 0.000000] ACPI: RSDT b71ef038 00050 (v01 TOSHIB A007B 00000001 01000013) [ 0.000000] ACPI: FACP b71ee000 00081 (v02 TOSHIB A007B 00000001 LOHR 0000005F) [ 0.000000] ACPI: DSDT b71dc000 09241 (v02 TOSHIB A007B 20100826 INTL 20061109) [ 0.000000] ACPI: FACS b715a000 00040 [ 0.000000] ACPI: HPET b71ed000 00038 (v01 TOSHIB A007B 00000001 LOHR 0000005F) [ 0.000000] ACPI: APIC b71ec000 000BC (v01 TOSHIB A007B 00000001 LOHR 0000005F) [ 0.000000] ACPI: MCFG b71eb000 0003C (v01 TOSHIB A007B 00000001 LOHR 0000005F) [ 0.000000] ACPI: ASF! b71ea000 000A0 (v32 TOSHIB A007B 00000001 LOHR 0000005F) [ 0.000000] ACPI: TCPA b71e9000 00032 (v02 TOSHIB A007B 00000000 LOHR 0000005F) [ 0.000000] ACPI: BOOT b71e8000 00028 (v01 TOSHIB A007B 00000000 LOHR 0000005F) [ 0.000000] ACPI: SLIC b71e7000 00176 (v01 TOSHIB A007B 00000000 LOHR 0000005F) [ 0.000000] ACPI: SSDT b71db000 002D5 (v01 TOSHIB SataAhci 00001000 INTL 20061109) [ 0.000000] ACPI: SSDT b71d8000 0072A (v01 TOSHIB PtidDevc 00001000 INTL 20061109) [ 0.000000] ACPI: SSDT b71d7000 00A10 (v01 PmRef CpuPm 00003000 INTL 20061109) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] 2040MB HIGHMEM available. [ 0.000000] 887MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 377fe000 [ 0.000000] low ram: 0 - 377fe000 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000001 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x000377fe [ 0.000000] HighMem 0x000377fe -> 0x000b70d0 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[3] active PFN ranges [ 0.000000] 0: 0x00000001 -> 0x00000002 [ 0.000000] 0: 0x00000010 -> 0x0000009e [ 0.000000] 0: 0x00000100 -> 0x000b70d0 [ 0.000000] On node 0 totalpages: 749663 [ 0.000000] free_area_init_node: node 0, pgdat c07fffc0, node_mem_map c14ab020 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3951 pages, LIFO batch:0 [ 0.000000] Normal zone: 1744 pages used for memmap [ 0.000000] Normal zone: 221486 pages, LIFO batch:31 [ 0.000000] HighMem zone: 4082 pages used for memmap [ 0.000000] HighMem zone: 518368 pages, LIFO batch:31 [ 0.000000] Using APIC driver default [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x04] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x05] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x05] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x06] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x07] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x04] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x05] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x06] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x07] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 8 CPUs, 4 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [16000 - 167ff] [ 0.000000] PM: Registered nosave memory: 0000000000002000 - 0000000000010000 [ 0.000000] PM: Registered nosave memory: 000000000009e000 - 000000000009f000 [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:20000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:8 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 14 pages/cpu @c2c00000 s36416 r0 d20928 u524288 [ 0.000000] pcpu-alloc: s36416 r0 d20928 u524288 alloc=1*4194304 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 4 5 6 7 [ 0.000000] early_res array is doubled to 128 at [16800 - 177ff] [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 743805 [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-25-generic root=UUID=e3d9760d-21e7-4373-b844-203ea4f8dd14 ro quiet splash initcall_debug no_console_suspend [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Enabling fast FPU save and restore... done. [ 0.000000] Enabling unmasked SIMD FPU exception support... done. [ 0.000000] Initializing CPU#0 [ 0.000000] allocated 14995500 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Subtract (59 early reservations) [ 0.000000] #1 [0000001000 - 0000002000] EX TRAMPOLINE [ 0.000000] #2 [0000100000 - 00009a2adc] TEXT DATA BSS [ 0.000000] #3 [000009ec00 - 0000100000] BIOS reserved [ 0.000000] #4 [00009a3000 - 00009a613c] BRK [ 0.000000] #5 [0000010000 - 0000011000] TRAMPOLINE [ 0.000000] #6 [0000011000 - 0000015000] ACPI WAKEUP [ 0.000000] #7 [0000015000 - 0000016000] PGTABLE [ 0.000000] #8 [00009a7000 - 00014aa000] NEW RAMDISK [ 0.000000] #9 [00014aa000 - 00014ab000] BOOTMEM [ 0.000000] #10 [00014ab000 - 0002b93000] BOOTMEM [ 0.000000] #11 [0002b93000 - 0002b93004] BOOTMEM [ 0.000000] #12 [0002b93040 - 0002b93100] BOOTMEM [ 0.000000] #13 [0002b93100 - 0002b93154] BOOTMEM [ 0.000000] #14 [0002b93180 - 0002b96180] BOOTMEM [ 0.000000] #15 [0002b96180 - 0002b96240] BOOTMEM [ 0.000000] #16 [0002b96240 - 0002b9c240] BOOTMEM [ 0.000000] #17 [0002b9c240 - 0002b9c265] BOOTMEM [ 0.000000] #18 [0002b9c280 - 0002b9c2a7] BOOTMEM [ 0.000000] #19 [0002b9c2c0 - 0002b9c4f0] BOOTMEM [ 0.000000] #20 [0002b9c500 - 0002b9c540] BOOTMEM [ 0.000000] #21 [0002b9c540 - 0002b9c580] BOOTMEM [ 0.000000] #22 [0002b9c580 - 0002b9c5c0] BOOTMEM [ 0.000000] #23 [0002b9c5c0 - 0002b9c600] BOOTMEM [ 0.000000] #24 [0002b9c600 - 0002b9c640] BOOTMEM [ 0.000000] #25 [0002b9c640 - 0002b9c680] BOOTMEM [ 0.000000] #26 [0002b9c680 - 0002b9c6c0] BOOTMEM [ 0.000000] #27 [0002b9c6c0 - 0002b9c700] BOOTMEM [ 0.000000] #28 [0002b9c700 - 0002b9c740] BOOTMEM [ 0.000000] #29 [0002b9c740 - 0002b9c780] BOOTMEM [ 0.000000] #30 [0002b9c780 - 0002b9c7c0] BOOTMEM [ 0.000000] #31 [0002b9c7c0 - 0002b9c800] BOOTMEM [ 0.000000] #32 [0002b9c800 - 0002b9c840] BOOTMEM [ 0.000000] #33 [0002b9c840 - 0002b9c880] BOOTMEM [ 0.000000] #34 [0002b9c880 - 0002b9c8c0] BOOTMEM [ 0.000000] #35 [0002b9c8c0 - 0002b9c900] BOOTMEM [ 0.000000] #36 [0002b9c900 - 0002b9c940] BOOTMEM [ 0.000000] #37 [0002b9c940 - 0002b9c950] BOOTMEM [ 0.000000] #38 [0002b9c980 - 0002b9c990] BOOTMEM [ 0.000000] #39 [0002b9c9c0 - 0002b9ca4c] BOOTMEM [ 0.000000] #40 [0002b9ca80 - 0002b9cb0c] BOOTMEM [ 0.000000] #41 [0002c00000 - 0002c0e000] BOOTMEM [ 0.000000] #42 [0002c80000 - 0002c8e000] BOOTMEM [ 0.000000] #43 [0002d00000 - 0002d0e000] BOOTMEM [ 0.000000] #44 [0002d80000 - 0002d8e000] BOOTMEM [ 0.000000] #45 [0002e00000 - 0002e0e000] BOOTMEM [ 0.000000] #46 [0002e80000 - 0002e8e000] BOOTMEM [ 0.000000] #47 [0002f00000 - 0002f0e000] BOOTMEM [ 0.000000] #48 [0002f80000 - 0002f8e000] BOOTMEM [ 0.000000] #49 [0002b9eb40 - 0002b9eb44] BOOTMEM [ 0.000000] #50 [0002b9eb80 - 0002b9eb84] BOOTMEM [ 0.000000] #51 [0002b9ebc0 - 0002b9ebe0] BOOTMEM [ 0.000000] #52 [0002b9ec00 - 0002b9ec20] BOOTMEM [ 0.000000] #53 [0002b9ec40 - 0002b9ecd8] BOOTMEM [ 0.000000] #54 [0002b9ed00 - 0002b9ed38] BOOTMEM [ 0.000000] #55 [0002b9ed40 - 0002ba2d40] BOOTMEM [ 0.000000] #56 [0002f8e000 - 000300e000] BOOTMEM [ 0.000000] #57 [0002ba2d40 - 0002be2d40] BOOTMEM [ 0.000000] #58 [000300e000 - 0003e5b02c] BOOTMEM [ 0.000000] Initializing HighMem for node 0 (000377fe:000b70d0) [ 0.000000] Memory: 2939104k/2999104k available (4933k kernel code, 59548k reserved, 2331k data, 688k init, 2089800k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff16000 - 0xfffff000 ( 932 kB) [ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB) [ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) [ 0.000000] .init : 0xc0819000 - 0xc08c5000 ( 688 kB) [ 0.000000] .data : 0xc05d17ce - 0xc08187a8 (2331 kB) [ 0.000000] .text : 0xc0100000 - 0xc05d17ce (4933 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=13, HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:2304 nr_irqs:744 [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.004000] Detected 2659.767 MHz processor. [ 0.000004] Calibrating delay loop (skipped), value calculated using timer frequency.. 5319.53 BogoMIPS (lpj=10639068) [ 0.000007] pid_max: default: 32768 minimum: 301 [ 0.000021] Security Framework initialized [ 0.000031] AppArmor: AppArmor initialized [ 0.000032] Yama: becoming mindful. [ 0.000067] Mount-cache hash table entries: 512 [ 0.000157] Initializing cgroup subsys ns [ 0.000160] Initializing cgroup subsys cpuacct [ 0.000163] Initializing cgroup subsys memory [ 0.000169] Initializing cgroup subsys devices [ 0.000170] Initializing cgroup subsys freezer [ 0.000172] Initializing cgroup subsys net_cls [ 0.000189] CPU: Physical Processor ID: 0 [ 0.000190] CPU: Processor Core ID: 0 [ 0.000194] mce: CPU supports 9 MCE banks [ 0.000203] CPU0: Thermal monitoring enabled (TM1) [ 0.000209] using mwait in idle threads. [ 0.000213] Performance Events: PEBS fmt1+, Westmere events, Intel PMU driver. [ 0.000220] ... version: 3 [ 0.000221] ... bit width: 48 [ 0.000222] ... generic registers: 4 [ 0.000223] ... value mask: 0000ffffffffffff [ 0.000224] ... max period: 000000007fffffff [ 0.000225] ... fixed-purpose events: 3 [ 0.000226] ... event mask: 000000070000000f [ 0.002294] ACPI: Core revision 20100428 [ 0.014604] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.014607] ftrace: allocating 21756 entries in 43 pages [ 0.020528] Enabling APIC mode: Flat. Using 1 I/O APICs [ 0.020928] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.060509] CPU0: Intel(R) Core(TM) i7 CPU M 620 @ 2.67GHz stepping 05 [ 0.166817] calling migration_init+0x0/0x47 @ 1 [ 0.166820] initcall migration_init+0x0/0x47 returned 0 after 0 usecs [ 0.166822] calling spawn_ksoftirqd+0x0/0x45 @ 1 [ 0.166834] initcall spawn_ksoftirqd+0x0/0x45 returned 0 after 0 usecs [ 0.166840] calling init_call_single_data+0x0/0x6b @ 1 [ 0.166842] initcall init_call_single_data+0x0/0x6b returned 0 after 0 usecs [ 0.166845] calling cpu_stop_init+0x0/0x85 @ 1 [ 0.166859] initcall cpu_stop_init+0x0/0x85 returned 0 after 0 usecs [ 0.166861] calling spawn_softlockup_task+0x0/0x5f @ 1 [ 0.166870] initcall spawn_softlockup_task+0x0/0x5f returned 0 after 0 usecs [ 0.166872] calling relay_init+0x0/0x11 @ 1 [ 0.166874] initcall relay_init+0x0/0x11 returned 0 after 0 usecs [ 0.166876] calling tracer_alloc_buffers+0x0/0x197 @ 1 [ 0.166898] initcall tracer_alloc_buffers+0x0/0x197 returned 0 after 0 usecs [ 0.166900] calling init_trace_printk+0x0/0xf @ 1 [ 0.166902] initcall init_trace_printk+0x0/0xf returned 0 after 0 usecs [ 0.166938] Booting Node 0, Processors #1 [ 0.177195] Initializing CPU#1 [ 0.274674] #2 [ 0.284809] Initializing CPU#2 [ 0.382438] #3 [ 0.392573] Initializing CPU#3 [ 0.490041] Brought up 4 CPUs [ 0.490043] Total of 4 processors activated (21279.15 BogoMIPS). [ 0.491719] devtmpfs: initialized [ 0.491807] calling init_mmap_min_addr+0x0/0x11 @ 1 [ 0.491809] initcall init_mmap_min_addr+0x0/0x11 returned 0 after 0 usecs [ 0.491812] calling init_cpufreq_transition_notifier_list+0x0/0x18 @ 1 [ 0.491815] initcall init_cpufreq_transition_notifier_list+0x0/0x18 returned 0 after 0 usecs [ 0.491818] calling net_ns_init+0x0/0xf2 @ 1 [ 0.491839] initcall net_ns_init+0x0/0xf2 returned 0 after 0 usecs [ 0.491843] calling e820_mark_nvs_memory+0x0/0x39 @ 1 [ 0.491862] initcall e820_mark_nvs_memory+0x0/0x39 returned 0 after 0 usecs [ 0.491865] calling cpufreq_tsc+0x0/0x25 @ 1 [ 0.491867] initcall cpufreq_tsc+0x0/0x25 returned 0 after 0 usecs [ 0.491869] calling pci_reboot_init+0x0/0x11 @ 1 [ 0.491872] initcall pci_reboot_init+0x0/0x11 returned 0 after 0 usecs [ 0.491874] calling reboot_init+0x0/0x11 @ 1 [ 0.491879] initcall reboot_init+0x0/0x11 returned 0 after 0 usecs [ 0.491881] calling init_lapic_sysfs+0x0/0x28 @ 1 [ 0.491888] initcall init_lapic_sysfs+0x0/0x28 returned 0 after 0 usecs [ 0.491893] calling init_smp_flush+0x0/0x23 @ 1 [ 0.491895] initcall init_smp_flush+0x0/0x23 returned 0 after 0 usecs [ 0.491898] calling alloc_frozen_cpus+0x0/0x10 @ 1 [ 0.491900] initcall alloc_frozen_cpus+0x0/0x10 returned 0 after 0 usecs [ 0.491903] calling sysctl_init+0x0/0x29 @ 1 [ 0.491945] initcall sysctl_init+0x0/0x29 returned 0 after 0 usecs [ 0.491947] calling ksysfs_init+0x0/0x74 @ 1 [ 0.491952] initcall ksysfs_init+0x0/0x74 returned 0 after 0 usecs [ 0.491954] calling async_init+0x0/0x5c @ 1 [ 0.491967] initcall async_init+0x0/0x5c returned 0 after 0 usecs [ 0.491969] calling init_jiffies_clocksource+0x0/0xf @ 1 [ 0.491972] initcall init_jiffies_clocksource+0x0/0xf returned 0 after 0 usecs [ 0.491974] calling pm_init+0x0/0x62 @ 1 [ 0.491990] initcall pm_init+0x0/0x62 returned 0 after 0 usecs [ 0.491992] calling pm_disk_init+0x0/0x14 @ 1 [ 0.491995] initcall pm_disk_init+0x0/0x14 returned 0 after 0 usecs [ 0.491998] calling swsusp_header_init+0x0/0x30 @ 1 [ 0.492000] initcall swsusp_header_init+0x0/0x30 returned 0 after 0 usecs [ 0.492003] calling init_ftrace_syscalls+0x0/0x8b @ 1 [ 0.492623] initcall init_ftrace_syscalls+0x0/0x8b returned 0 after 0 usecs [ 0.492625] calling init_hw_breakpoint+0x0/0xbd @ 1 [ 0.492630] initcall init_hw_breakpoint+0x0/0xbd returned 0 after 0 usecs [ 0.492631] calling init_zero_pfn+0x0/0x14 @ 1 [ 0.492633] initcall init_zero_pfn+0x0/0x14 returned 0 after 0 usecs [ 0.492635] calling filelock_init+0x0/0x2f @ 1 [ 0.492640] initcall filelock_init+0x0/0x2f returned 0 after 0 usecs [ 0.492641] calling init_script_binfmt+0x0/0x11 @ 1 [ 0.492644] initcall init_script_binfmt+0x0/0x11 returned 0 after 0 usecs [ 0.492645] calling init_elf_binfmt+0x0/0x11 @ 1 [ 0.492647] initcall init_elf_binfmt+0x0/0x11 returned 0 after 0 usecs [ 0.492649] calling debugfs_init+0x0/0x4a @ 1 [ 0.492652] initcall debugfs_init+0x0/0x4a returned 0 after 0 usecs [ 0.492654] calling securityfs_init+0x0/0x41 @ 1 [ 0.492657] initcall securityfs_init+0x0/0x41 returned 0 after 0 usecs [ 0.492660] calling random32_init+0x0/0xa8 @ 1 [ 0.492663] initcall random32_init+0x0/0xa8 returned 0 after 0 usecs [ 0.492665] calling sfi_sysfs_init+0x0/0xbe @ 1 [ 0.492667] initcall sfi_sysfs_init+0x0/0xbe returned 0 after 0 usecs [ 0.492669] calling regulator_init+0x0/0x2b @ 1 [ 0.492671] regulator: core version 0.5 [ 0.492675] initcall regulator_init+0x0/0x2b returned 0 after 0 usecs [ 0.492678] calling early_resume_init+0x0/0x20 @ 1 [ 0.492701] Time: 20:04:02 Date: 01/26/11 [ 0.492703] initcall early_resume_init+0x0/0x20 returned 0 after 0 usecs [ 0.492705] calling cpufreq_core_init+0x0/0x75 @ 1 [ 0.492707] initcall cpufreq_core_init+0x0/0x75 returned 0 after 0 usecs [ 0.492709] calling cpuidle_init+0x0/0x32 @ 1 [ 0.492713] initcall cpuidle_init+0x0/0x32 returned 0 after 0 usecs [ 0.492715] calling sock_init+0x0/0x59 @ 1 [ 0.492735] initcall sock_init+0x0/0x59 returned 0 after 0 usecs [ 0.492737] calling net_inuse_init+0x0/0x24 @ 1 [ 0.492742] initcall net_inuse_init+0x0/0x24 returned 0 after 0 usecs [ 0.492743] calling netpoll_init+0x0/0x2f @ 1 [ 0.492745] initcall netpoll_init+0x0/0x2f returned 0 after 0 usecs [ 0.492747] calling netlink_proto_init+0x0/0x17a @ 1 [ 0.492751] NET: Registered protocol family 16 [ 0.492760] initcall netlink_proto_init+0x0/0x17a returned 0 after 0 usecs [ 0.492763] calling populate_rootfs_early+0x0/0x36 @ 1 [ 0.492766] initcall populate_rootfs_early+0x0/0x36 returned 1 after 0 usecs [ 0.492769] initcall populate_rootfs_early+0x0/0x36 returned with error code 1 [ 0.492772] calling olpc_init+0x0/0x1a9 @ 1 [ 0.492775] initcall olpc_init+0x0/0x1a9 returned 0 after 0 usecs [ 0.492777] calling bdi_class_init+0x0/0x40 @ 1 [ 0.492785] calling 1_async_populate_rootfs+0x0/0xd0 @ 24 [ 0.492791] initcall bdi_class_init+0x0/0x40 returned 0 after 0 usecs [ 0.492793] calling kobject_uevent_init+0x0/0x1e @ 1 [ 0.492796] initcall kobject_uevent_init+0x0/0x1e returned 0 after 0 usecs [ 0.492798] calling gpiolib_sysfs_init+0x0/0x7e @ 1 [ 0.492806] initcall gpiolib_sysfs_init+0x0/0x7e returned 0 after 0 usecs [ 0.492808] calling pcibus_class_init+0x0/0x14 @ 1 [ 0.492812] initcall pcibus_class_init+0x0/0x14 returned 0 after 0 usecs [ 0.492814] calling pci_driver_init+0x0/0xf @ 1 [ 0.492821] initcall pci_driver_init+0x0/0xf returned 0 after 0 usecs [ 0.492823] calling backlight_class_init+0x0/0x53 @ 1 [ 0.492827] initcall backlight_class_init+0x0/0x53 returned 0 after 0 usecs [ 0.492829] calling tty_class_init+0x0/0x2f @ 1 [ 0.492834] initcall tty_class_init+0x0/0x2f returned 0 after 0 usecs [ 0.492835] Trying to unpack rootfs image as initramfs... [ 0.492838] calling vtconsole_class_init+0x0/0xc2 @ 1 [ 0.492852] initcall vtconsole_class_init+0x0/0xc2 returned 0 after 0 usecs [ 0.492854] calling spi_init+0x0/0x98 @ 1 [ 0.492863] initcall spi_init+0x0/0x98 returned 0 after 0 usecs [ 0.492865] calling i2c_init+0x0/0x57 @ 1 [ 0.492876] initcall i2c_init+0x0/0x57 returned 0 after 0 usecs [ 0.492878] calling eisa_init+0x0/0x29 @ 1 [ 0.492883] EISA bus registered [ 0.492885] initcall eisa_init+0x0/0x29 returned 0 after 0 usecs [ 0.492887] calling amd_postcore_init+0x0/0x66 @ 1 [ 0.492888] initcall amd_postcore_init+0x0/0x66 returned 0 after 0 usecs [ 0.492891] calling arch_kdebugfs_init+0x0/0x1e @ 1 [ 0.492894] initcall arch_kdebugfs_init+0x0/0x1e returned 0 after 0 usecs [ 0.492896] calling init_pit_clocksource+0x0/0xad @ 1 [ 0.492898] initcall init_pit_clocksource+0x0/0xad returned 0 after 0 usecs [ 0.492900] calling mtrr_if_init+0x0/0x4d @ 1 [ 0.492903] initcall mtrr_if_init+0x0/0x4d returned 0 after 0 usecs [ 0.492904] calling ffh_cstate_init+0x0/0x27 @ 1 [ 0.492907] initcall ffh_cstate_init+0x0/0x27 returned 0 after 0 usecs [ 0.492909] calling kdump_buf_page_init+0x0/0x89 @ 1 [ 0.492912] initcall kdump_buf_page_init+0x0/0x89 returned 0 after 0 usecs [ 0.492913] calling acpi_pci_init+0x0/0x5a @ 1 [ 0.492915] ACPI: bus type pci registered [ 0.492916] initcall acpi_pci_init+0x0/0x5a returned 0 after 0 usecs [ 0.492918] calling dmi_id_init+0x0/0xe9 @ 1 [ 0.492939] initcall dmi_id_init+0x0/0xe9 returned 0 after 0 usecs [ 0.492941] calling dma_bus_init+0x0/0x32 @ 1 [ 0.492945] initcall dma_bus_init+0x0/0x32 returned 0 after 0 usecs [ 0.492947] calling dma_channel_table_init+0x0/0xe8 @ 1 [ 0.492954] initcall dma_channel_table_init+0x0/0xe8 returned 0 after 0 usecs [ 0.492956] calling pci_arch_init+0x0/0x65 @ 1 [ 0.492982] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.492985] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.492986] PCI: Using MMCONFIG for extended config space [ 0.492987] PCI: Using configuration type 1 for base access [ 0.492993] initcall pci_arch_init+0x0/0x65 returned 0 after 0 usecs [ 0.492995] calling topology_init+0x0/0x36 @ 1 [ 0.493009] initcall topology_init+0x0/0x36 returned 0 after 0 usecs [ 0.493011] calling mtrr_init_finialize+0x0/0x35 @ 1 [ 0.493013] initcall mtrr_init_finialize+0x0/0x35 returned 0 after 0 usecs [ 0.493014] calling mca_init+0x0/0x2ce @ 1 [ 0.493021] initcall mca_init+0x0/0x2ce returned -19 after 0 usecs [ 0.493023] calling param_sysfs_init+0x0/0xda @ 1 [ 0.493452] initcall param_sysfs_init+0x0/0xda returned 0 after 0 usecs [ 0.493454] calling pm_sysrq_init+0x0/0x20 @ 1 [ 0.493456] initcall pm_sysrq_init+0x0/0x20 returned 0 after 0 usecs [ 0.493458] calling audit_watch_init+0x0/0x27 @ 1 [ 0.493460] initcall audit_watch_init+0x0/0x27 returned 0 after 0 usecs [ 0.493462] calling init_slow_work+0x0/0x34 @ 1 [ 0.493464] initcall init_slow_work+0x0/0x34 returned 0 after 0 usecs [ 0.493465] calling default_bdi_init+0x0/0xb2 @ 1 [ 0.493524] initcall default_bdi_init+0x0/0xb2 returned 0 after 0 usecs [ 0.493526] calling init_bio+0x0/0xbe @ 1 [ 0.493586] bio: create slab at 0 [ 0.493592] initcall init_bio+0x0/0xbe returned 0 after 0 usecs [ 0.493593] calling fsnotify_init+0x0/0xf @ 1 [ 0.493596] initcall fsnotify_init+0x0/0xf returned 0 after 0 usecs [ 0.493598] calling fsnotify_notification_init+0x0/0xf0 @ 1 [ 0.493600] initcall fsnotify_notification_init+0x0/0xf0 returned 0 after 0 usecs [ 0.493602] calling cryptomgr_init+0x0/0xf @ 1 [ 0.493605] initcall cryptomgr_init+0x0/0xf returned 0 after 0 usecs [ 0.493606] calling blk_settings_init+0x0/0x21 @ 1 [ 0.493608] initcall blk_settings_init+0x0/0x21 returned 0 after 0 usecs [ 0.493610] calling blk_ioc_init+0x0/0x2f @ 1 [ 0.493612] initcall blk_ioc_init+0x0/0x2f returned 0 after 0 usecs [ 0.493614] calling blk_softirq_init+0x0/0x54 @ 1 [ 0.493616] initcall blk_softirq_init+0x0/0x54 returned 0 after 0 usecs [ 0.493618] calling blk_iopoll_setup+0x0/0x54 @ 1 [ 0.493620] initcall blk_iopoll_setup+0x0/0x54 returned 0 after 0 usecs [ 0.493622] calling genhd_device_init+0x0/0x61 @ 1 [ 0.493681] initcall genhd_device_init+0x0/0x61 returned 0 after 0 usecs [ 0.493683] calling blk_dev_integrity_init+0x0/0x2f @ 1 [ 0.493685] initcall blk_dev_integrity_init+0x0/0x2f returned 0 after 0 usecs [ 0.493687] calling gpiolib_debugfs_init+0x0/0x2a @ 1 [ 0.493697] initcall gpiolib_debugfs_init+0x0/0x2a returned 0 after 0 usecs [ 0.493699] calling tc35892_gpio_init+0x0/0xf @ 1 [ 0.493706] initcall tc35892_gpio_init+0x0/0xf returned 0 after 0 usecs [ 0.493709] calling pci_slot_init+0x0/0x50 @ 1 [ 0.493712] initcall pci_slot_init+0x0/0x50 returned 0 after 0 usecs [ 0.493714] calling fbmem_init+0x0/0x96 @ 1 [ 0.493721] initcall fbmem_init+0x0/0x96 returned 0 after 0 usecs [ 0.493723] calling acpi_init+0x0/0x10c @ 1 [ 0.495166] ACPI: EC: Look up EC in DSDT [ 0.496696] ACPI: Executed 1 blocks of module-level executable AML code [ 0.498431] ACPI: BIOS _OSI(Linux) query ignored [ 0.500393] ACPI: SSDT b77f8a18 0049D (v01 PmRef Cpu0Ist 00003000 INTL 20061109) [ 0.500778] ACPI: Dynamic OEM Table Load: [ 0.500780] ACPI: SSDT (null) 0049D (v01 PmRef Cpu0Ist 00003000 INTL 20061109) [ 0.501528] ACPI: SSDT b77f6018 008B2 (v01 PmRef Cpu0Cst 00003001 INTL 20061109) [ 0.501897] ACPI: Dynamic OEM Table Load: [ 0.501898] ACPI: SSDT (null) 008B2 (v01 PmRef Cpu0Cst 00003001 INTL 20061109) [ 0.502396] ACPI: SSDT b77f7a98 00303 (v01 PmRef ApIst 00003000 INTL 20061109) [ 0.502820] ACPI: Dynamic OEM Table Load: [ 0.502822] ACPI: SSDT (null) 00303 (v01 PmRef ApIst 00003000 INTL 20061109) [ 0.502982] ACPI: SSDT b77f5d98 00119 (v01 PmRef ApCst 00003000 INTL 20061109) [ 0.503622] ACPI: Dynamic OEM Table Load: [ 0.503624] ACPI: SSDT (null) 00119 (v01 PmRef ApCst 00003000 INTL 20061109) [ 0.504759] ACPI: Interpreter enabled [ 0.504763] ACPI: (supports S0 S3 S4 S5) [ 0.504782] ACPI: Using IOAPIC for interrupt routing [ 0.512266] initcall acpi_init+0x0/0x10c returned 0 after 19531 usecs [ 0.512269] calling dock_init+0x0/0xb3 @ 1 [ 0.513018] ACPI: ACPI Dock Station Driver: 2 docks/bays found [ 0.513021] initcall dock_init+0x0/0xb3 returned 0 after 0 usecs [ 0.513022] calling acpi_pci_root_init+0x0/0x2a @ 1 [ 0.513025] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.513554] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-fe]) [ 0.514542] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 0.514544] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 0.514545] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.514547] pci_root PNP0A08:00: host bridge window [mem 0x000d4000-0x000d7fff] [ 0.514549] pci_root PNP0A08:00: host bridge window [mem 0x000d8000-0x000dbfff] [ 0.514550] pci_root PNP0A08:00: host bridge window [mem 0x000dc000-0x000dffff] [ 0.514552] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xfeafffff] [ 0.514598] pci 0000:00:02.0: reg 10: [mem 0xd0000000-0xd03fffff 64bit] [ 0.514603] pci 0000:00:02.0: reg 18: [mem 0xc0000000-0xcfffffff 64bit pref] [ 0.514606] pci 0000:00:02.0: reg 20: [io 0x3058-0x305f] [ 0.514680] pci 0000:00:16.0: reg 10: [mem 0xd4728000-0xd472800f 64bit] [ 0.514736] pci 0000:00:16.0: PME# supported from D0 D3hot D3cold [ 0.514742] pci 0000:00:16.0: PME# disabled [ 0.514796] pci 0000:00:19.0: reg 10: [mem 0xd4700000-0xd471ffff] [ 0.514803] pci 0000:00:19.0: reg 14: [mem 0xd4725000-0xd4725fff] [ 0.514810] pci 0000:00:19.0: reg 18: [io 0x3020-0x303f] [ 0.514862] pci 0000:00:19.0: PME# supported from D0 D3hot D3cold [ 0.514866] pci 0000:00:19.0: PME# disabled [ 0.514913] pci 0000:00:1a.0: reg 10: [mem 0xd4727c00-0xd4727fff] [ 0.514977] pci 0000:00:1a.0: PME# supported from D0 D3hot D3cold [ 0.514981] pci 0000:00:1a.0: PME# disabled [ 0.515024] pci 0000:00:1b.0: reg 10: [mem 0xd4720000-0xd4723fff 64bit] [ 0.515080] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.515084] pci 0000:00:1b.0: PME# disabled [ 0.515174] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.515178] pci 0000:00:1c.0: PME# disabled [ 0.515266] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 0.515270] pci 0000:00:1c.1: PME# disabled [ 0.515357] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 0.515362] pci 0000:00:1c.2: PME# disabled [ 0.515450] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold [ 0.515454] pci 0000:00:1c.3: PME# disabled [ 0.515509] pci 0000:00:1d.0: reg 10: [mem 0xd4727800-0xd4727bff] [ 0.515569] pci 0000:00:1d.0: PME# supported from D0 D3hot D3cold [ 0.515574] pci 0000:00:1d.0: PME# disabled [ 0.515764] pci 0000:00:1f.2: reg 10: [io 0x3048-0x304f] [ 0.515771] pci 0000:00:1f.2: reg 14: [io 0x3064-0x3067] [ 0.515777] pci 0000:00:1f.2: reg 18: [io 0x3040-0x3047] [ 0.515784] pci 0000:00:1f.2: reg 1c: [io 0x3060-0x3063] [ 0.515789] pci 0000:00:1f.2: reg 20: [io 0x3000-0x301f] [ 0.515796] pci 0000:00:1f.2: reg 24: [mem 0xd4727000-0xd47277ff] [ 0.515839] pci 0000:00:1f.2: PME# supported from D3hot [ 0.515843] pci 0000:00:1f.2: PME# disabled [ 0.515896] pci 0000:00:1f.6: reg 10: [mem 0xd4724000-0xd4724fff 64bit] [ 0.516076] pci 0000:01:00.0: reg 10: [mem 0xd4600000-0xd46000ff] [ 0.516173] pci 0000:01:00.0: supports D1 D2 [ 0.516174] pci 0000:01:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.516180] pci 0000:01:00.0: PME# disabled [ 0.521969] pci 0000:00:1c.0: PCI bridge to [bus 01-01] [ 0.521974] pci 0000:00:1c.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.521979] pci 0000:00:1c.0: bridge window [mem 0xd4600000-0xd46fffff] [ 0.521987] pci 0000:00:1c.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.522100] pci 0000:02:00.0: reg 10: [mem 0xd4500000-0xd4501fff 64bit] [ 0.522209] pci 0000:02:00.0: PME# supported from D0 D3hot D3cold [ 0.522216] pci 0000:02:00.0: PME# disabled [ 0.529918] pci 0000:00:1c.1: PCI bridge to [bus 02-02] [ 0.529923] pci 0000:00:1c.1: bridge window [io 0xf000-0x0000] (disabled) [ 0.529928] pci 0000:00:1c.1: bridge window [mem 0xd4500000-0xd45fffff] [ 0.529935] pci 0000:00:1c.1: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.529991] pci 0000:00:1c.2: PCI bridge to [bus 03-04] [ 0.529995] pci 0000:00:1c.2: bridge window [io 0x2000-0x2fff] [ 0.529999] pci 0000:00:1c.2: bridge window [mem 0xd2500000-0xd44fffff] [ 0.530006] pci 0000:00:1c.2: bridge window [mem 0xd0400000-0xd23fffff 64bit pref] [ 0.530060] pci 0000:00:1c.3: PCI bridge to [bus 05-05] [ 0.530064] pci 0000:00:1c.3: bridge window [io 0xf000-0x0000] (disabled) [ 0.530069] pci 0000:00:1c.3: bridge window [mem 0xd2400000-0xd24fffff] [ 0.530076] pci 0000:00:1c.3: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.530146] pci 0000:00:1e.0: PCI bridge to [bus 06-06] (subtractive decode) [ 0.530151] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.530155] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.530162] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.530164] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.530165] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.530167] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.530168] pci 0000:00:1e.0: bridge window [mem 0x000d4000-0x000d7fff] (subtractive decode) [ 0.530170] pci 0000:00:1e.0: bridge window [mem 0x000d8000-0x000dbfff] (subtractive decode) [ 0.530172] pci 0000:00:1e.0: bridge window [mem 0x000dc000-0x000dffff] (subtractive decode) [ 0.530173] pci 0000:00:1e.0: bridge window [mem 0xc0000000-0xfeafffff] (subtractive decode) [ 0.530203] pci_bus 0000:00: on NUMA node 0 [ 0.530217] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.530525] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP01._PRT] [ 0.530598] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP02._PRT] [ 0.530670] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP03._PRT] [ 0.530742] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP04._PRT] [ 0.530877] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCIB._PRT] [ 0.541770] ACPI: PCI Root Bridge [CPBG] (domain 0000 [bus ff]) [ 0.541891] pci_bus 0000:ff: on NUMA node 0 [ 0.542048] initcall acpi_pci_root_init+0x0/0x2a returned 0 after 31250 usecs [ 0.542050] calling acpi_pci_link_init+0x0/0x3f @ 1 [ 0.542131] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 5 6 7 10 12 14 15) *11 [ 0.542232] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 *3 4 5 6 7 11 12 14 15) [ 0.542331] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 7 *10 12 14 15) [ 0.542431] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 7 *11 12 14 15) [ 0.542529] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 *6 7 10 12 14 15) [ 0.542628] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 11 12 14 15) *0, disabled. [ 0.542728] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 *5 6 7 10 12 14 15) [ 0.542827] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 5 6 7 *11 12 14 15) [ 0.542873] initcall acpi_pci_link_init+0x0/0x3f returned 0 after 0 usecs [ 0.542875] calling hest_init+0x0/0xa1 @ 1 [ 0.542877] HEST: Table is not found! [ 0.542879] initcall hest_init+0x0/0xa1 returned -19 after 0 usecs [ 0.542881] calling pnp_init+0x0/0xf @ 1 [ 0.542889] initcall pnp_init+0x0/0xf returned 0 after 0 usecs [ 0.542891] calling twlreg_init+0x0/0xf @ 1 [ 0.542898] initcall twlreg_init+0x0/0xf returned 0 after 0 usecs [ 0.542900] calling pm8607_regulator_init+0x0/0xf @ 1 [ 0.542906] initcall pm8607_regulator_init+0x0/0xf returned 0 after 0 usecs [ 0.542909] calling misc_init+0x0/0xad @ 1 [ 0.542922] initcall misc_init+0x0/0xad returned 0 after 0 usecs [ 0.542923] calling vga_arb_device_init+0x0/0x75 @ 1 [ 0.542948] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 0.542955] vgaarb: loaded [ 0.542957] initcall vga_arb_device_init+0x0/0x75 returned 0 after 0 usecs [ 0.542961] calling cn_init+0x0/0x9d @ 1 [ 0.542970] initcall cn_init+0x0/0x9d returned 0 after 0 usecs [ 0.542973] calling pm860x_i2c_init+0x0/0x30 @ 1 [ 0.542980] initcall pm860x_i2c_init+0x0/0x30 returned 0 after 0 usecs [ 0.542982] calling tc35892_init+0x0/0x11 @ 1 [ 0.542987] initcall tc35892_init+0x0/0x11 returned 0 after 0 usecs [ 0.542989] calling wm831x_i2c_init+0x0/0x30 @ 1 [ 0.542995] initcall wm831x_i2c_init+0x0/0x30 returned 0 after 0 usecs [ 0.542997] calling wm8350_i2c_init+0x0/0x11 @ 1 [ 0.543002] initcall wm8350_i2c_init+0x0/0x11 returned 0 after 0 usecs [ 0.543004] calling twl_init+0x0/0x11 @ 1 [ 0.543009] initcall twl_init+0x0/0x11 returned 0 after 0 usecs [ 0.543011] calling da903x_init+0x0/0x11 @ 1 [ 0.543017] initcall da903x_init+0x0/0x11 returned 0 after 0 usecs [ 0.543018] calling max8925_i2c_init+0x0/0x30 @ 1 [ 0.543024] initcall max8925_i2c_init+0x0/0x30 returned 0 after 0 usecs [ 0.543026] calling ab3100_i2c_init+0x0/0x11 @ 1 [ 0.543031] initcall ab3100_i2c_init+0x0/0x11 returned 0 after 0 usecs [ 0.543033] calling ab3550_i2c_init+0x0/0x11 @ 1 [ 0.543038] initcall ab3550_i2c_init+0x0/0x11 returned 0 after 0 usecs [ 0.543040] calling ab8500_spi_init+0x0/0xf @ 1 [ 0.543047] initcall ab8500_spi_init+0x0/0xf returned 0 after 0 usecs [ 0.543049] calling init_scsi+0x0/0x90 @ 1 [ 0.543108] SCSI subsystem initialized [ 0.543111] initcall init_scsi+0x0/0x90 returned 0 after 0 usecs [ 0.543113] calling ata_init+0x0/0x7b @ 1 [ 0.543202] libata version 3.00 loaded. [ 0.543205] initcall ata_init+0x0/0x7b returned 0 after 0 usecs [ 0.543207] calling phy_init+0x0/0x2a @ 1 [ 0.543226] initcall phy_init+0x0/0x2a returned 0 after 0 usecs [ 0.543228] calling usb_init+0x0/0x142 @ 1 [ 0.543249] usbcore: registered new interface driver usbfs [ 0.543256] usbcore: registered new interface driver hub [ 0.543276] usbcore: registered new device driver usb [ 0.543278] initcall usb_init+0x0/0x142 returned 0 after 0 usecs [ 0.543280] calling serio_init+0x0/0x8b @ 1 [ 0.543299] initcall serio_init+0x0/0x8b returned 0 after 0 usecs [ 0.543302] calling input_init+0x0/0xfd @ 1 [ 0.543311] initcall input_init+0x0/0xfd returned 0 after 0 usecs [ 0.543313] calling rtc_init+0x0/0x64 @ 1 [ 0.543317] initcall rtc_init+0x0/0x64 returned 0 after 0 usecs [ 0.543319] calling power_supply_class_init+0x0/0x39 @ 1 [ 0.543324] initcall power_supply_class_init+0x0/0x39 returned 0 after 0 usecs [ 0.543326] calling hwmon_init+0x0/0x40 @ 1 [ 0.543332] initcall hwmon_init+0x0/0x40 returned 0 after 0 usecs [ 0.543333] calling thermal_init+0x0/0x32 @ 1 [ 0.543338] initcall thermal_init+0x0/0x32 returned 0 after 0 usecs [ 0.543339] calling md_init+0x0/0xde @ 1 [ 0.543345] initcall md_init+0x0/0xde returned 0 after 0 usecs [ 0.543348] calling mmc_init+0x0/0x7a @ 1 [ 0.543379] initcall mmc_init+0x0/0x7a returned 0 after 0 usecs [ 0.543382] calling acpi_wmi_init+0x0/0x88 @ 1 [ 0.543397] ACPI: WMI: Mapper loaded [ 0.543399] initcall acpi_wmi_init+0x0/0x88 returned 0 after 0 usecs [ 0.543402] calling pci_subsys_init+0x0/0x46 @ 1 [ 0.543403] PCI: Using ACPI for IRQ routing [ 0.543405] PCI: pci_cache_line_size set to 64 bytes [ 0.543544] reserve RAM buffer: 0000000000002000 - 000000000000ffff [ 0.543545] reserve RAM buffer: 000000000009ec00 - 000000000009ffff [ 0.543547] reserve RAM buffer: 00000000b70d0000 - 00000000b7ffffff initcall pci_subsys_init+0x0/0x46 returned 0 after 0 usecs [ 0.543552] calling proto_init+0x0/0xf @ 1 [ 0.543556] initcall proto_init+0x0/0xf returned 0 after 0 usecs [ 0.543558] calling net_dev_init+0x0/0x161 @ 1 [ 0.543611] initcall net_dev_init+0x0/0x161 returned 0 after 0 usecs [ 0.543613] calling neigh_init+0x0/0x7c @ 1 [ 0.543615] initcall neigh_init+0x0/0x7c returned 0 after 0 usecs [ 0.543617] calling fib_rules_init+0x0/0xa4 @ 1 [ 0.543620] initcall fib_rules_init+0x0/0xa4 returned 0 after 0 usecs [ 0.543622] calling pktsched_init+0x0/0xe6 @ 1 [ 0.543625] initcall pktsched_init+0x0/0xe6 returned 0 after 0 usecs [ 0.543627] calling tc_filter_init+0x0/0x52 @ 1 [ 0.543629] initcall tc_filter_init+0x0/0x52 returned 0 after 0 usecs [ 0.543631] calling tc_action_init+0x0/0x52 @ 1 [ 0.543633] initcall tc_action_init+0x0/0x52 returned 0 after 0 usecs [ 0.543634] calling genl_init+0x0/0x7f @ 1 [ 0.543641] initcall genl_init+0x0/0x7f returned 0 after 0 usecs [ 0.543644] calling cipso_v4_init+0x0/0x5b @ 1 [ 0.543646] initcall cipso_v4_init+0x0/0x5b returned 0 after 0 usecs [ 0.543648] calling wireless_nlevent_init+0x0/0xf @ 1 [ 0.543650] initcall wireless_nlevent_init+0x0/0xf returned 0 after 0 usecs [ 0.543652] calling netlbl_init+0x0/0x7d @ 1 [ 0.543653] NetLabel: Initializing [ 0.543654] NetLabel: domain hash size = 128 [ 0.543654] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.543664] NetLabel: unlabeled traffic allowed by default [ 0.543665] initcall netlbl_init+0x0/0x7d returned 0 after 0 usecs [ 0.543667] calling rfkill_init+0x0/0x68 @ 1 [ 0.543684] initcall rfkill_init+0x0/0x68 returned 0 after 0 usecs [ 0.543685] calling sysctl_init+0x0/0x3b @ 1 [ 0.543687] initcall sysctl_init+0x0/0x3b returned 0 after 0 usecs [ 0.543691] calling print_ICs+0x0/0x8a @ 1 [ 0.543693] initcall print_ICs+0x0/0x8a returned 0 after 0 usecs [ 0.543695] calling hpet_late_init+0x0/0xdc @ 1 [ 0.543710] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0, 0, 0, 0, 0 [ 0.543714] hpet0: 8 comparators, 64-bit 14.318180 MHz counter [ 0.545719] initcall hpet_late_init+0x0/0xdc returned 0 after 0 usecs [ 0.545721] calling init_k8_nbs+0x0/0x24 @ 1 [ 0.545731] initcall init_k8_nbs+0x0/0x24 returned 0 after 0 usecs [ 0.545734] calling clocksource_done_booting+0x0/0x4f @ 1 [ 0.545736] Switching to clocksource tsc [ 0.545757] initcall clocksource_done_booting+0x0/0x4f returned 0 after 4 usecs [ 0.545760] calling ftrace_init_debugfs+0x0/0xe4 @ 1 [ 0.545784] initcall ftrace_init_debugfs+0x0/0xe4 returned 0 after 21 usecs [ 0.545786] calling rb_init_debugfs+0x0/0x2f @ 1 [ 0.545788] initcall rb_init_debugfs+0x0/0x2f returned 0 after 0 usecs [ 0.545790] calling tracer_init_debugfs+0x0/0x293 @ 1 [ 0.545858] initcall tracer_init_debugfs+0x0/0x293 returned 0 after 64 usecs [ 0.545860] calling init_trace_printk_function_export+0x0/0x33 @ 1 [ 0.545863] initcall init_trace_printk_function_export+0x0/0x33 returned 0 after 0 usecs [ 0.545866] calling event_trace_init+0x0/0x1ce @ 1 [ 0.552029] initcall event_trace_init+0x0/0x1ce returned 0 after 6027 usecs [ 0.552033] calling init_kprobe_trace+0x0/0x79 @ 1 [ 0.552036] initcall init_kprobe_trace+0x0/0x79 returned 0 after 1 usecs [ 0.552039] calling init_pipe_fs+0x0/0x3d @ 1 [ 0.552052] initcall init_pipe_fs+0x0/0x3d returned 0 after 11 usecs [ 0.552055] calling eventpoll_init+0x0/0xd1 @ 1 [ 0.552061] initcall eventpoll_init+0x0/0xd1 returned 0 after 4 usecs [ 0.552063] calling anon_inode_init+0x0/0xfa @ 1 [ 0.552067] initcall anon_inode_init+0x0/0xfa returned 0 after 2 usecs [ 0.552071] calling tomoyo_initerface_init+0x0/0x155 @ 1 [ 0.552073] initcall tomoyo_initerface_init+0x0/0x155 returned 0 after 0 usecs [ 0.552076] calling aa_create_aafs+0x0/0x14a @ 1 [ 0.552091] AppArmor: AppArmor Filesystem Enabled [ 0.552093] initcall aa_create_aafs+0x0/0x14a returned 0 after 15 usecs [ 0.552095] calling blk_scsi_ioctl_init+0x0/0x288 @ 1 [ 0.552098] initcall blk_scsi_ioctl_init+0x0/0x288 returned 0 after 0 usecs [ 0.552101] calling acpi_event_init+0x0/0x79 @ 1 [ 0.552112] initcall acpi_event_init+0x0/0x79 returned 0 after 9 usecs [ 0.552114] calling pnpacpi_init+0x0/0x88 @ 1 [ 0.552115] pnp: PnP ACPI init [ 0.552129] ACPI: bus type pnp registered [ 0.554382] pnp: PnP ACPI: found 12 devices [ 0.554384] ACPI: ACPI bus type pnp unregistered [ 0.554386] initcall pnpacpi_init+0x0/0x88 returned 0 after 2222 usecs [ 0.554388] calling pnpbios_init+0x0/0xea @ 1 [ 0.554390] PnPBIOS: Disabled by ACPI PNP [ 0.554392] initcall pnpbios_init+0x0/0xea returned -19 after 1 usecs [ 0.554394] calling pnp_system_init+0x0/0xf @ 1 [ 0.554403] system 00:01: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.554405] system 00:01: [mem 0xfed10000-0xfed13fff] has been reserved [ 0.554407] system 00:01: [mem 0xfed18000-0xfed18fff] has been reserved [ 0.554409] system 00:01: [mem 0xfed19000-0xfed19fff] has been reserved [ 0.554411] system 00:01: [mem 0xd4800000-0xd4800fff] has been reserved [ 0.554412] system 00:01: [mem 0xfeb00000-0xfeb03fff] has been reserved [ 0.554414] system 00:01: [mem 0xfed20000-0xfed3ffff] has been reserved [ 0.554415] system 00:01: [mem 0xfed45000-0xfed8ffff] has been reserved [ 0.554417] system 00:01: [mem 0xff000000-0xffffffff] could not be reserved [ 0.554419] system 00:01: [mem 0xfee00000-0xfeefffff] could not be reserved [ 0.554423] system 00:04: [mem 0xfed00000-0xfed003ff] has been reserved [ 0.554426] system 00:06: [io 0x1000-0x100f] has been reserved [ 0.554428] system 00:06: [io 0xffff] has been reserved [ 0.554430] system 00:06: [io 0xffff] has been reserved [ 0.554432] system 00:06: [io 0x0400-0x047f] has been reserved [ 0.554433] system 00:06: [io 0x0500-0x053f] has been reserved [ 0.554436] system 00:07: [io 0x0680-0x06ff] has been reserved [ 0.554438] system 00:07: [io 0x01e0-0x01e7] has been reserved [ 0.554445] initcall pnp_system_init+0x0/0xf returned 0 after 47 usecs [ 0.554447] calling chr_dev_init+0x0/0xc9 @ 1 [ 0.555249] initcall chr_dev_init+0x0/0xc9 returned 0 after 782 usecs [ 0.555251] calling firmware_class_init+0x0/0x14 @ 1 [ 0.555257] initcall firmware_class_init+0x0/0x14 returned 0 after 3 usecs [ 0.555260] calling cpufreq_gov_performance_init+0x0/0xf @ 1 [ 0.555262] initcall cpufreq_gov_performance_init+0x0/0xf returned 0 after 0 usecs [ 0.555265] calling init_acpi_pm_clocksource+0x0/0x14e @ 1 [ 0.589698] initcall init_acpi_pm_clocksource+0x0/0x14e returned 0 after 33704 usecs [ 0.589702] calling pcibios_assign_resources+0x0/0x6b @ 1 [ 0.589780] pci 0000:00:1c.0: BAR 15: assigned [mem 0xd4900000-0xd4afffff 64bit pref] [ 0.589783] pci 0000:00:1c.1: BAR 15: assigned [mem 0xd4b00000-0xd4cfffff 64bit pref] [ 0.589785] pci 0000:00:1c.3: BAR 15: assigned [mem 0xd4d00000-0xd4efffff 64bit pref] [ 0.589788] pci 0000:00:1c.0: BAR 13: assigned [io 0x4000-0x4fff] [ 0.589790] pci 0000:00:1c.1: BAR 13: assigned [io 0x5000-0x5fff] [ 0.589791] pci 0000:00:1c.3: BAR 13: assigned [io 0x6000-0x6fff] [ 0.589793] pci 0000:00:1c.0: PCI bridge to [bus 01-01] [ 0.589797] pci 0000:00:1c.0: bridge window [io 0x4000-0x4fff] [ 0.589802] pci 0000:00:1c.0: bridge window [mem 0xd4600000-0xd46fffff] [ 0.589807] pci 0000:00:1c.0: bridge window [mem 0xd4900000-0xd4afffff 64bit pref] [ 0.589814] pci 0000:00:1c.1: PCI bridge to [bus 02-02] [ 0.589817] pci 0000:00:1c.1: bridge window [io 0x5000-0x5fff] [ 0.589823] pci 0000:00:1c.1: bridge window [mem 0xd4500000-0xd45fffff] [ 0.589827] pci 0000:00:1c.1: bridge window [mem 0xd4b00000-0xd4cfffff 64bit pref] [ 0.589834] pci 0000:00:1c.2: PCI bridge to [bus 03-04] [ 0.589837] pci 0000:00:1c.2: bridge window [io 0x2000-0x2fff] [ 0.589843] pci 0000:00:1c.2: bridge window [mem 0xd2500000-0xd44fffff] [ 0.589847] pci 0000:00:1c.2: bridge window [mem 0xd0400000-0xd23fffff 64bit pref] [ 0.589854] pci 0000:00:1c.3: PCI bridge to [bus 05-05] [ 0.589857] pci 0000:00:1c.3: bridge window [io 0x6000-0x6fff] [ 0.589862] pci 0000:00:1c.3: bridge window [mem 0xd2400000-0xd24fffff] [ 0.589867] pci 0000:00:1c.3: bridge window [mem 0xd4d00000-0xd4efffff 64bit pref] [ 0.589874] pci 0000:00:1e.0: PCI bridge to [bus 06-06] [ 0.589875] pci 0000:00:1e.0: bridge window [io disabled] [ 0.589880] pci 0000:00:1e.0: bridge window [mem disabled] [ 0.589884] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.589906] alloc irq_desc for 16 on node -1 [ 0.589907] alloc kstat_irqs on node -1 [ 0.589912] pci 0000:00:1c.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.589918] pci 0000:00:1c.0: setting latency timer to 64 [ 0.589927] alloc irq_desc for 17 on node -1 [ 0.589928] alloc kstat_irqs on node -1 [ 0.589931] pci 0000:00:1c.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 0.589935] pci 0000:00:1c.1: setting latency timer to 64 [ 0.589945] alloc irq_desc for 18 on node -1 [ 0.589946] alloc kstat_irqs on node -1 [ 0.589948] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.589952] pci 0000:00:1c.2: setting latency timer to 64 [ 0.589962] alloc irq_desc for 19 on node -1 [ 0.589963] alloc kstat_irqs on node -1 [ 0.589965] pci 0000:00:1c.3: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 0.589969] pci 0000:00:1c.3: setting latency timer to 64 [ 0.589977] pci 0000:00:1e.0: setting latency timer to 64 [ 0.589981] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 0.589983] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 0.589984] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.589986] pci_bus 0000:00: resource 7 [mem 0x000d4000-0x000d7fff] [ 0.589987] pci_bus 0000:00: resource 8 [mem 0x000d8000-0x000dbfff] [ 0.589988] pci_bus 0000:00: resource 9 [mem 0x000dc000-0x000dffff] [ 0.589990] pci_bus 0000:00: resource 10 [mem 0xc0000000-0xfeafffff] [ 0.589991] pci_bus 0000:01: resource 0 [io 0x4000-0x4fff] [ 0.589993] pci_bus 0000:01: resource 1 [mem 0xd4600000-0xd46fffff] [ 0.589994] pci_bus 0000:01: resource 2 [mem 0xd4900000-0xd4afffff 64bit pref] [ 0.589996] pci_bus 0000:02: resource 0 [io 0x5000-0x5fff] [ 0.589997] pci_bus 0000:02: resource 1 [mem 0xd4500000-0xd45fffff] [ 0.589999] pci_bus 0000:02: resource 2 [mem 0xd4b00000-0xd4cfffff 64bit pref] [ 0.590000] pci_bus 0000:03: resource 0 [io 0x2000-0x2fff] [ 0.590001] pci_bus 0000:03: resource 1 [mem 0xd2500000-0xd44fffff] [ 0.590003] pci_bus 0000:03: resource 2 [mem 0xd0400000-0xd23fffff 64bit pref] [ 0.590005] pci_bus 0000:05: resource 0 [io 0x6000-0x6fff] [ 0.590006] pci_bus 0000:05: resource 1 [mem 0xd2400000-0xd24fffff] [ 0.590007] pci_bus 0000:05: resource 2 [mem 0xd4d00000-0xd4efffff 64bit pref] [ 0.590009] pci_bus 0000:06: resource 4 [io 0x0000-0x0cf7] [ 0.590010] pci_bus 0000:06: resource 5 [io 0x0d00-0xffff] [ 0.590012] pci_bus 0000:06: resource 6 [mem 0x000a0000-0x000bffff] [ 0.590013] pci_bus 0000:06: resource 7 [mem 0x000d4000-0x000d7fff] [ 0.590015] pci_bus 0000:06: resource 8 [mem 0x000d8000-0x000dbfff] [ 0.590016] pci_bus 0000:06: resource 9 [mem 0x000dc000-0x000dffff] [ 0.590017] pci_bus 0000:06: resource 10 [mem 0xc0000000-0xfeafffff] [ 0.590020] initcall pcibios_assign_resources+0x0/0x6b returned 0 after 309 usecs [ 0.590023] calling sysctl_core_init+0x0/0x2d @ 1 [ 0.590036] initcall sysctl_core_init+0x0/0x2d returned 0 after 11 usecs [ 0.590039] calling inet_init+0x0/0x21c @ 1 [ 0.590056] NET: Registered protocol family 2 [ 0.590104] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.590237] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.590437] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.590530] TCP: Hash tables configured (established 131072 bind 65536) [ 0.590532] TCP reno registered [ 0.590534] UDP hash table entries: 512 (order: 2, 16384 bytes) [ 0.590538] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) [ 0.590598] initcall inet_init+0x0/0x21c returned 0 after 542 usecs [ 0.590600] calling af_unix_init+0x0/0x4d @ 1 [ 0.590602] NET: Registered protocol family 1 [ 0.590606] initcall af_unix_init+0x0/0x4d returned 0 after 4 usecs [ 0.590611] calling pci_apply_final_quirks+0x0/0x106 @ 1 [ 0.590617] pci 0000:00:02.0: Boot video device [ 0.590724] PCI: CLS 64 bytes, default 64 [ 0.590726] initcall pci_apply_final_quirks+0x0/0x106 returned 0 after 109 usecs [ 0.590730] calling populate_rootfs+0x0/0x1f @ 1 [ 0.590732] initcall populate_rootfs+0x0/0x1f returned 433096936 after 0 usecs [ 0.590734] initcall populate_rootfs+0x0/0x1f returned with error code 433096936 [ 0.590737] calling pci_iommu_init+0x0/0xd @ 1 [ 0.590740] initcall pci_iommu_init+0x0/0xd returned 0 after 0 usecs [ 0.590742] calling i8259A_init_sysfs+0x0/0x2b @ 1 [ 0.590757] initcall i8259A_init_sysfs+0x0/0x2b returned 0 after 12 usecs [ 0.590759] calling sbf_init+0x0/0xe4 @ 1 [ 0.590763] Simple Boot Flag at 0x7c set to 0x1 [ 0.590768] initcall sbf_init+0x0/0xe4 returned 0 after 7 usecs [ 0.590770] calling i8237A_init_sysfs+0x0/0x1d @ 1 [ 0.590777] initcall i8237A_init_sysfs+0x0/0x1d returned 0 after 4 usecs [ 0.590779] calling add_rtc_cmos+0x0/0x98 @ 1 [ 0.590784] initcall add_rtc_cmos+0x0/0x98 returned 0 after 3 usecs [ 0.590789] calling cache_sysfs_init+0x0/0x62 @ 1 [ 0.590897] initcall cache_sysfs_init+0x0/0x62 returned 0 after 103 usecs [ 0.590899] calling mcheck_init_device+0x0/0xeb @ 1 [ 0.590969] initcall mcheck_init_device+0x0/0xeb returned 0 after 66 usecs [ 0.590971] calling threshold_init_device+0x0/0x71 @ 1 [ 0.590973] initcall threshold_init_device+0x0/0x71 returned 0 after 0 usecs [ 0.590975] calling thermal_throttle_init_device+0x0/0x77 @ 1 [ 0.590980] initcall thermal_throttle_init_device+0x0/0x77 returned 0 after 3 usecs [ 0.590982] calling powernow_k6_init+0x0/0x90 @ 1 [ 0.590984] initcall powernow_k6_init+0x0/0x90 returned -19 after 0 usecs [ 0.590986] calling longrun_init+0x0/0x2d @ 1 [ 0.590988] initcall longrun_init+0x0/0x2d returned -19 after 0 usecs [ 0.590989] calling cpufreq_gx_init+0x0/0x182 @ 1 [ 0.590992] initcall cpufreq_gx_init+0x0/0x182 returned -19 after 0 usecs [ 0.590993] calling speedstep_init+0x0/0xe3 @ 1 [ 0.590995] initcall speedstep_init+0x0/0xe3 returned -19 after 0 usecs [ 0.590997] calling speedstep_init+0x0/0xae @ 1 [ 0.590999] initcall speedstep_init+0x0/0xae returned -19 after 0 usecs [ 0.591000] calling nforce2_init+0x0/0x6f @ 1 [ 0.591003] cpufreq-nforce2: No nForce2 chipset. [ 0.591004] initcall nforce2_init+0x0/0x6f returned -19 after 2 usecs [ 0.591008] calling ioapic_init_sysfs+0x0/0x8b @ 1 [ 0.591016] initcall ioapic_init_sysfs+0x0/0x8b returned 0 after 5 usecs [ 0.591018] calling add_pcspkr+0x0/0x2b @ 1 [ 0.591031] initcall add_pcspkr+0x0/0x2b returned 0 after 10 usecs [ 0.591036] calling start_periodic_check_for_corruption+0x0/0x40 @ 1 [ 0.591038] Scanning for low memory corruption every 60 seconds [ 0.591046] initcall start_periodic_check_for_corruption+0x0/0x40 returned 0 after 7 usecs [ 0.591048] calling init_sched_debug_procfs+0x0/0x30 @ 1 [ 0.591078] initcall init_sched_debug_procfs+0x0/0x30 returned 0 after 26 usecs [ 0.591080] calling proc_schedstat_init+0x0/0x27 @ 1 [ 0.591082] initcall proc_schedstat_init+0x0/0x27 returned 0 after 0 usecs [ 0.591084] calling proc_execdomains_init+0x0/0x27 @ 1 [ 0.591087] initcall proc_execdomains_init+0x0/0x27 returned 0 after 1 usecs [ 0.591089] calling ioresources_init+0x0/0x44 @ 1 [ 0.591092] initcall ioresources_init+0x0/0x44 returned 0 after 1 usecs [ 0.591093] calling uid_cache_init+0x0/0x8a @ 1 [ 0.591096] initcall uid_cache_init+0x0/0x8a returned 0 after 1 usecs [ 0.591098] calling init_posix_timers+0x0/0x157 @ 1 [ 0.591103] initcall init_posix_timers+0x0/0x157 returned 0 after 2 usecs [ 0.591105] calling init_posix_cpu_timers+0x0/0xb7 @ 1 [ 0.591107] initcall init_posix_cpu_timers+0x0/0xb7 returned 0 after 0 usecs [ 0.591109] calling nsproxy_cache_init+0x0/0x32 @ 1 [ 0.591111] initcall nsproxy_cache_init+0x0/0x32 returned 0 after 0 usecs [ 0.591115] calling create_proc_profile+0x0/0x70 @ 1 [ 0.591117] initcall create_proc_profile+0x0/0x70 returned 0 after 0 usecs [ 0.591120] calling timekeeping_init_device+0x0/0x1d @ 1 [ 0.591129] initcall timekeeping_init_device+0x0/0x1d returned 0 after 7 usecs [ 0.591131] calling init_clocksource_sysfs+0x0/0x43 @ 1 [ 0.591138] initcall init_clocksource_sysfs+0x0/0x43 returned 0 after 5 usecs [ 0.591140] calling init_timer_list_procfs+0x0/0x30 @ 1 [ 0.591143] initcall init_timer_list_procfs+0x0/0x30 returned 0 after 0 usecs [ 0.591145] calling init_tstats_procfs+0x0/0x30 @ 1 [ 0.591147] initcall init_tstats_procfs+0x0/0x30 returned 0 after 0 usecs [ 0.591149] calling futex_init+0x0/0x85 @ 1 [ 0.591154] initcall futex_init+0x0/0x85 returned 0 after 3 usecs [ 0.591156] calling proc_dma_init+0x0/0x27 @ 1 [ 0.591158] initcall proc_dma_init+0x0/0x27 returned 0 after 0 usecs [ 0.591160] calling proc_modules_init+0x0/0x27 @ 1 [ 0.591162] initcall proc_modules_init+0x0/0x27 returned 0 after 0 usecs [ 0.591164] calling kallsyms_init+0x0/0x2a @ 1 [ 0.591166] initcall kallsyms_init+0x0/0x2a returned 0 after 0 usecs [ 0.591168] calling snapshot_device_init+0x0/0xf @ 1 [ 0.591183] initcall snapshot_device_init+0x0/0xf returned 0 after 12 usecs [ 0.591185] calling crash_save_vmcoreinfo_init+0x0/0x4b4 @ 1 [ 0.591200] initcall crash_save_vmcoreinfo_init+0x0/0x4b4 returned 0 after 12 usecs [ 0.591202] calling crash_notes_memory_init+0x0/0x35 @ 1 [ 0.591206] initcall crash_notes_memory_init+0x0/0x35 returned 0 after 2 usecs [ 0.591208] calling pid_namespaces_init+0x0/0x32 @ 1 [ 0.591211] initcall pid_namespaces_init+0x0/0x32 returned 0 after 0 usecs [ 0.591213] calling audit_init+0x0/0x12c @ 1 [ 0.591214] audit: initializing netlink socket (disabled) [ 0.591220] type=2000 audit(1296072242.432:1): initialized [ 0.591223] initcall audit_init+0x0/0x12c returned 0 after 8 usecs [ 0.591224] calling audit_tree_init+0x0/0x3b @ 1 [ 0.591227] initcall audit_tree_init+0x0/0x3b returned 0 after 0 usecs [ 0.591229] calling init_kprobes+0x0/0x156 @ 1 [ 0.598890] initcall init_kprobes+0x0/0x156 returned 0 after 7497 usecs [ 0.598892] calling hung_task_init+0x0/0x4e @ 1 [ 0.598929] initcall hung_task_init+0x0/0x4e returned 0 after 33 usecs [ 0.598932] calling utsname_sysctl_init+0x0/0x11 @ 1 [ 0.598946] initcall utsname_sysctl_init+0x0/0x11 returned 0 after 11 usecs [ 0.598948] calling init_tracepoints+0x0/0x20 @ 1 [ 0.598950] initcall init_tracepoints+0x0/0x20 returned 0 after 0 usecs [ 0.598952] calling init_lstats_procfs+0x0/0x2a @ 1 [ 0.598957] initcall init_lstats_procfs+0x0/0x2a returned 0 after 3 usecs [ 0.598959] calling ftrace_mod_cmd_init+0x0/0xf @ 1 [ 0.598961] initcall ftrace_mod_cmd_init+0x0/0xf returned 0 after 0 usecs [ 0.598963] calling init_events+0x0/0x5f @ 1 [ 0.598970] initcall init_events+0x0/0x5f returned 0 after 4 usecs [ 0.598972] calling init_sched_switch_trace+0x0/0xf @ 1 [ 0.598974] initcall init_sched_switch_trace+0x0/0xf returned 0 after 0 usecs [ 0.598976] calling init_function_trace+0x0/0x35 @ 1 [ 0.598979] initcall init_function_trace+0x0/0x35 returned 0 after 0 usecs [ 0.598981] calling init_wakeup_tracer+0x0/0x1d @ 1 [ 0.598983] initcall init_wakeup_tracer+0x0/0x1d returned 0 after 0 usecs [ 0.598985] calling stack_trace_init+0x0/0x68 @ 1 [ 0.598992] initcall stack_trace_init+0x0/0x68 returned 0 after 5 usecs [ 0.598994] calling init_mmio_trace+0x0/0xf @ 1 [ 0.598996] initcall init_mmio_trace+0x0/0xf returned 0 after 0 usecs [ 0.598998] calling init_graph_trace+0x0/0x6e @ 1 [ 0.599002] initcall init_graph_trace+0x0/0x6e returned 0 after 1 usecs [ 0.599004] calling init_blk_tracer+0x0/0x56 @ 1 [ 0.599007] initcall init_blk_tracer+0x0/0x56 returned 0 after 1 usecs [ 0.599009] calling perf_event_sysfs_init+0x0/0x14 @ 1 [ 0.599014] initcall perf_event_sysfs_init+0x0/0x14 returned 0 after 3 usecs [ 0.599016] calling init_per_zone_wmark_min+0x0/0x64 @ 1 [ 0.599109] initcall init_per_zone_wmark_min+0x0/0x64 returned 0 after 89 usecs [ 0.599111] calling kswapd_init+0x0/0x1d @ 1 [ 0.599134] initcall kswapd_init+0x0/0x1d returned 0 after 20 usecs [ 0.599137] calling setup_vmstat+0x0/0xcf @ 1 [ 0.599145] initcall setup_vmstat+0x0/0xcf returned 0 after 6 usecs [ 0.599147] calling mm_sysfs_init+0x0/0x22 @ 1 [ 0.599151] initcall mm_sysfs_init+0x0/0x22 returned 0 after 2 usecs [ 0.599153] calling proc_vmalloc_init+0x0/0x2a @ 1 [ 0.599155] initcall proc_vmalloc_init+0x0/0x2a returned 0 after 0 usecs [ 0.599157] calling init_emergency_pool+0x0/0x7e @ 1 [ 0.599169] highmem bounce pool size: 64 pages [ 0.599170] initcall init_emergency_pool+0x0/0x7e returned 0 after 11 usecs [ 0.599172] calling procswaps_init+0x0/0x27 @ 1 [ 0.599174] initcall procswaps_init+0x0/0x27 returned 0 after 0 usecs [ 0.599176] calling hugetlb_init+0x0/0x1dd @ 1 [ 0.599179] HugeTLB registered 4 MB page size, pre-allocated 0 pages [ 0.599184] initcall hugetlb_init+0x0/0x1dd returned 0 after 6 usecs [ 0.599185] calling ksm_init+0x0/0x1c9 @ 1 [ 0.599209] initcall ksm_init+0x0/0x1c9 returned 0 after 21 usecs [ 0.599211] calling slab_proc_init+0x0/0x2a @ 1 [ 0.599214] initcall slab_proc_init+0x0/0x2a returned 0 after 1 usecs [ 0.599215] calling slab_sysfs_init+0x0/0xc8 @ 1 [ 0.600011] initcall slab_sysfs_init+0x0/0xc8 returned 0 after 776 usecs [ 0.600012] calling fasync_init+0x0/0x2f @ 1 [ 0.600017] initcall fasync_init+0x0/0x2f returned 0 after 3 usecs [ 0.600019] calling proc_filesystems_init+0x0/0x27 @ 1 [ 0.600022] initcall proc_filesystems_init+0x0/0x27 returned 0 after 1 usecs [ 0.600024] calling dnotify_init+0x0/0x81 @ 1 [ 0.600031] initcall dnotify_init+0x0/0x81 returned 0 after 5 usecs [ 0.600033] calling inotify_setup+0x0/0x11 @ 1 [ 0.600034] initcall inotify_setup+0x0/0x11 returned 0 after 0 usecs [ 0.600036] calling inotify_user_setup+0x0/0x78 @ 1 [ 0.600043] initcall inotify_user_setup+0x0/0x78 returned 0 after 5 usecs [ 0.600045] calling aio_setup+0x0/0xac @ 1 [ 0.600108] initcall aio_setup+0x0/0xac returned 0 after 59 usecs [ 0.600110] calling proc_locks_init+0x0/0x27 @ 1 [ 0.600112] initcall proc_locks_init+0x0/0x27 returned 0 after 1 usecs [ 0.600114] calling init_mbcache+0x0/0x11 @ 1 [ 0.600116] initcall init_mbcache+0x0/0x11 returned 0 after 0 usecs [ 0.600118] calling dquot_init+0x0/0x10f @ 1 [ 0.600119] VFS: Disk quotas dquot_6.5.2 [ 0.600158] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 0.600160] initcall dquot_init+0x0/0x10f returned 0 after 40 usecs [ 0.600162] calling quota_init+0x0/0x24 @ 1 [ 0.600167] initcall quota_init+0x0/0x24 returned 0 after 3 usecs [ 0.600169] calling proc_cmdline_init+0x0/0x27 @ 1 [ 0.600171] initcall proc_cmdline_init+0x0/0x27 returned 0 after 1 usecs [ 0.600173] calling proc_cpuinfo_init+0x0/0x27 @ 1 [ 0.600176] initcall proc_cpuinfo_init+0x0/0x27 returned 0 after 0 usecs [ 0.600177] calling proc_devices_init+0x0/0x27 @ 1 [ 0.600180] initcall proc_devices_init+0x0/0x27 returned 0 after 0 usecs [ 0.600181] calling proc_interrupts_init+0x0/0x27 @ 1 [ 0.600184] initcall proc_interrupts_init+0x0/0x27 returned 0 after 0 usecs [ 0.600185] calling proc_loadavg_init+0x0/0x27 @ 1 [ 0.600188] initcall proc_loadavg_init+0x0/0x27 returned 0 after 0 usecs [ 0.600190] calling proc_meminfo_init+0x0/0x27 @ 1 [ 0.600192] initcall proc_meminfo_init+0x0/0x27 returned 0 after 0 usecs [ 0.600194] calling proc_stat_init+0x0/0x27 @ 1 [ 0.600196] initcall proc_stat_init+0x0/0x27 returned 0 after 0 usecs [ 0.600198] calling proc_uptime_init+0x0/0x27 @ 1 [ 0.600200] initcall proc_uptime_init+0x0/0x27 returned 0 after 0 usecs [ 0.600202] calling proc_version_init+0x0/0x27 @ 1 [ 0.600204] initcall proc_version_init+0x0/0x27 returned 0 after 0 usecs [ 0.600206] calling proc_softirqs_init+0x0/0x27 @ 1 [ 0.600208] initcall proc_softirqs_init+0x0/0x27 returned 0 after 0 usecs [ 0.600210] calling proc_kcore_init+0x0/0xae @ 1 [ 0.600213] initcall proc_kcore_init+0x0/0xae returned 0 after 1 usecs [ 0.600215] calling vmcore_init+0x0/0x7e @ 1 [ 0.600217] initcall vmcore_init+0x0/0x7e returned 0 after 0 usecs [ 0.600218] calling proc_kmsg_init+0x0/0x2a @ 1 [ 0.600221] initcall proc_kmsg_init+0x0/0x2a returned 0 after 0 usecs [ 0.600223] calling proc_page_init+0x0/0x4a @ 1 [ 0.600226] initcall proc_page_init+0x0/0x4a returned 0 after 1 usecs [ 0.600228] calling proc_version_signature_init+0x0/0x27 @ 1 [ 0.600230] initcall proc_version_signature_init+0x0/0x27 returned 0 after 0 usecs [ 0.600232] calling init_devpts_fs+0x0/0x3d @ 1 [ 0.600244] initcall init_devpts_fs+0x0/0x3d returned 0 after 9 usecs [ 0.600246] calling init_ext3_fs+0x0/0x6a @ 1 [ 0.600282] initcall init_ext3_fs+0x0/0x6a returned 0 after 33 usecs [ 0.600284] calling init_ext2_fs+0x0/0x6a @ 1 [ 0.600305] initcall init_ext2_fs+0x0/0x6a returned 0 after 18 usecs [ 0.600306] calling init_ext4_fs+0x0/0xd4 @ 1 [ 0.600400] initcall init_ext4_fs+0x0/0xd4 returned 0 after 89 usecs [ 0.600402] calling journal_init+0x0/0xa3 @ 1 [ 0.600443] initcall journal_init+0x0/0xa3 returned 0 after 38 usecs [ 0.600445] calling journal_init+0x0/0xb4 @ 1 [ 0.600474] initcall journal_init+0x0/0xb4 returned 0 after 26 usecs [ 0.600476] calling init_ramfs_fs+0x0/0xf @ 1 [ 0.600479] initcall init_ramfs_fs+0x0/0xf returned 0 after 0 usecs [ 0.600480] calling init_hugetlbfs_fs+0x0/0x8b @ 1 [ 0.600509] initcall init_hugetlbfs_fs+0x0/0x8b returned 0 after 26 usecs [ 0.600511] calling ecryptfs_init+0x0/0x1b3 @ 1 [ 0.600615] initcall ecryptfs_init+0x0/0x1b3 returned 0 after 98 usecs [ 0.600617] calling fuse_init+0x0/0x123 @ 1 [ 0.600618] fuse init (API version 7.14) [ 0.600671] initcall fuse_init+0x0/0x123 returned 0 after 50 usecs [ 0.600672] calling ipc_init+0x0/0x20 @ 1 [ 0.600676] msgmni has been set to 1658 [ 0.600680] initcall ipc_init+0x0/0x20 returned 0 after 6 usecs [ 0.600682] calling ipc_sysctl_init+0x0/0x11 @ 1 [ 0.600696] initcall ipc_sysctl_init+0x0/0x11 returned 0 after 11 usecs [ 0.600698] calling init_mqueue_fs+0x0/0x9f @ 1 [ 0.600732] initcall init_mqueue_fs+0x0/0x9f returned 0 after 30 usecs [ 0.600733] calling key_proc_init+0x0/0x37 @ 1 [ 0.600737] initcall key_proc_init+0x0/0x37 returned 0 after 1 usecs [ 0.600739] calling selinux_nf_ip_init+0x0/0x65 @ 1 [ 0.600741] initcall selinux_nf_ip_init+0x0/0x65 returned 0 after 0 usecs [ 0.600742] calling init_sel_fs+0x0/0x5c @ 1 [ 0.600744] initcall init_sel_fs+0x0/0x5c returned 0 after 0 usecs [ 0.600746] calling selnl_init+0x0/0x59 @ 1 [ 0.600752] initcall selnl_init+0x0/0x59 returned 0 after 3 usecs [ 0.600753] calling sel_netif_init+0x0/0x6d @ 1 [ 0.600755] initcall sel_netif_init+0x0/0x6d returned 0 after 0 usecs [ 0.600757] calling sel_netnode_init+0x0/0x78 @ 1 [ 0.600759] initcall sel_netnode_init+0x0/0x78 returned 0 after 0 usecs [ 0.600760] calling sel_netport_init+0x0/0x78 @ 1 [ 0.600762] initcall sel_netport_init+0x0/0x78 returned 0 after 0 usecs [ 0.600764] calling aurule_init+0x0/0x46 @ 1 [ 0.600766] initcall aurule_init+0x0/0x46 returned 0 after 0 usecs [ 0.600768] calling init_smk_fs+0x0/0x6d @ 1 [ 0.600770] initcall init_smk_fs+0x0/0x6d returned 0 after 0 usecs [ 0.600772] calling crypto_wq_init+0x0/0x3a @ 1 [ 0.600826] initcall crypto_wq_init+0x0/0x3a returned 0 after 50 usecs [ 0.600828] calling crypto_algapi_init+0x0/0xc @ 1 [ 0.600834] initcall crypto_algapi_init+0x0/0xc returned 0 after 3 usecs [ 0.600835] calling skcipher_module_init+0x0/0x2e @ 1 [ 0.600837] initcall skcipher_module_init+0x0/0x2e returned 0 after 0 usecs [ 0.600839] calling chainiv_module_init+0x0/0xf @ 1 [ 0.600842] initcall chainiv_module_init+0x0/0xf returned 0 after 0 usecs [ 0.600844] calling eseqiv_module_init+0x0/0xf @ 1 [ 0.600846] initcall eseqiv_module_init+0x0/0xf returned 0 after 0 usecs [ 0.600847] calling hmac_module_init+0x0/0xf @ 1 [ 0.600849] initcall hmac_module_init+0x0/0xf returned 0 after 0 usecs [ 0.600851] calling md5_mod_init+0x0/0xf @ 1 [ 0.600959] initcall md5_mod_init+0x0/0xf returned 0 after 101 usecs [ 0.600961] calling crypto_ecb_module_init+0x0/0xf @ 1 [ 0.600963] initcall crypto_ecb_module_init+0x0/0xf returned 0 after 0 usecs [ 0.600965] calling crypto_cbc_module_init+0x0/0xf @ 1 [ 0.600967] initcall crypto_cbc_module_init+0x0/0xf returned 0 after 0 usecs [ 0.600969] calling krng_mod_init+0x0/0xf @ 1 [ 0.601023] initcall krng_mod_init+0x0/0xf returned 0 after 49 usecs [ 0.601026] calling proc_genhd_init+0x0/0x44 @ 1 [ 0.601030] initcall proc_genhd_init+0x0/0x44 returned 0 after 2 usecs [ 0.601032] calling bsg_init+0x0/0x119 @ 1 [ 0.601065] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.601067] initcall bsg_init+0x0/0x119 returned 0 after 32 usecs [ 0.601069] calling noop_init+0x0/0x11 @ 1 [ 0.601071] io scheduler noop registered [ 0.601072] initcall noop_init+0x0/0x11 returned 0 after 1 usecs [ 0.601074] calling deadline_init+0x0/0x11 @ 1 [ 0.601075] io scheduler deadline registered [ 0.601077] initcall deadline_init+0x0/0x11 returned 0 after 1 usecs [ 0.601079] calling cfq_init+0x0/0x9e @ 1 [ 0.601087] io scheduler cfq registered (default) [ 0.601089] initcall cfq_init+0x0/0x9e returned 0 after 8 usecs [ 0.601092] calling percpu_counter_startup+0x0/0x16 @ 1 [ 0.601094] initcall percpu_counter_startup+0x0/0x16 returned 0 after 0 usecs [ 0.601096] calling audit_classes_init+0x0/0x4f @ 1 [ 0.601100] initcall audit_classes_init+0x0/0x4f returned 0 after 1 usecs [ 0.601101] calling lnw_gpio_init+0x0/0x16 @ 1 [ 0.601116] initcall lnw_gpio_init+0x0/0x16 returned 0 after 12 usecs [ 0.601118] calling timbgpio_init+0x0/0xf @ 1 [ 0.601126] initcall timbgpio_init+0x0/0xf returned 0 after 5 usecs [ 0.601128] calling ucb1400_gpio_init+0x0/0xf @ 1 [ 0.601134] initcall ucb1400_gpio_init+0x0/0xf returned 0 after 3 usecs [ 0.601136] calling pci_proc_init+0x0/0x64 @ 1 [ 0.601167] initcall pci_proc_init+0x0/0x64 returned 0 after 28 usecs [ 0.601169] calling pcie_portdrv_init+0x0/0x51 @ 1 [ 0.601196] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.601239] alloc irq_desc for 40 on node -1 [ 0.601240] alloc kstat_irqs on node -1 [ 0.601251] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 0.601329] pcieport 0000:00:1c.1: setting latency timer to 64 [ 0.601369] alloc irq_desc for 41 on node -1 [ 0.601370] alloc kstat_irqs on node -1 [ 0.601377] pcieport 0000:00:1c.1: irq 41 for MSI/MSI-X [ 0.601452] pcieport 0000:00:1c.2: setting latency timer to 64 [ 0.601493] alloc irq_desc for 42 on node -1 [ 0.601494] alloc kstat_irqs on node -1 [ 0.601501] pcieport 0000:00:1c.2: irq 42 for MSI/MSI-X [ 0.601574] pcieport 0000:00:1c.3: setting latency timer to 64 [ 0.601614] alloc irq_desc for 43 on node -1 [ 0.601615] alloc kstat_irqs on node -1 [ 0.601622] pcieport 0000:00:1c.3: irq 43 for MSI/MSI-X [ 0.601693] initcall pcie_portdrv_init+0x0/0x51 returned 0 after 510 usecs [ 0.601695] calling aer_service_init+0x0/0x28 @ 1 [ 0.601701] initcall aer_service_init+0x0/0x28 returned 0 after 4 usecs [ 0.601703] calling pcie_pme_service_init+0x0/0x1d @ 1 [ 0.601705] initcall pcie_pme_service_init+0x0/0x1d returned -19 after 0 usecs [ 0.601708] calling ioapic_init+0x0/0x16 @ 1 [ 0.601718] initcall ioapic_init+0x0/0x16 returned 0 after 7 usecs [ 0.601720] calling pci_hotplug_init+0x0/0x4d @ 1 [ 0.601721] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.601723] initcall pci_hotplug_init+0x0/0x4d returned 0 after 1 usecs [ 0.601724] calling pcied_init+0x0/0x76 @ 1 [ 0.601864] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.601866] initcall pcied_init+0x0/0x76 returned 0 after 137 usecs [ 0.601868] calling fb_console_init+0x0/0x11f @ 1 [ 0.601882] initcall fb_console_init+0x0/0x11f returned 0 after 12 usecs [ 0.601884] calling imsttfb_init+0x0/0x40 @ 1 [ 0.601892] initcall imsttfb_init+0x0/0x40 returned 0 after 6 usecs [ 0.601894] calling asiliantfb_init+0x0/0x2b @ 1 [ 0.601901] initcall asiliantfb_init+0x0/0x2b returned 0 after 5 usecs [ 0.601903] calling vesafb_init+0x0/0x81 @ 1 [ 0.601926] initcall vesafb_init+0x0/0x81 returned -19 after 21 usecs [ 0.601928] calling efifb_init+0x0/0x7b @ 1 [ 0.601933] initcall efifb_init+0x0/0x7b returned -19 after 3 usecs [ 0.601935] calling intel_idle_init+0x0/0x55 @ 1 [ 0.601937] intel_idle: MWAIT substates: 0x1120 [ 0.601938] intel_idle: v0.4 model 0x25 [ 0.601939] intel_idle: lapic_timer_reliable_states 0xffffffff [ 0.601957] initcall intel_idle_init+0x0/0x55 returned 0 after 20 usecs [ 0.601959] calling acpi_reserve_resources+0x0/0xc8 @ 1 [ 0.601963] initcall acpi_reserve_resources+0x0/0xc8 returned 0 after 2 usecs [ 0.601965] calling irqrouter_init_sysfs+0x0/0x33 @ 1 [ 0.601973] initcall irqrouter_init_sysfs+0x0/0x33 returned 0 after 6 usecs [ 0.601975] calling acpi_ac_init+0x0/0x3d @ 1 [ 0.602069] ACPI: AC Adapter [ADP1] (on-line) [ 0.602077] initcall acpi_ac_init+0x0/0x3d returned 0 after 98 usecs [ 0.602079] calling acpi_button_init+0x0/0x4a @ 1 [ 0.602121] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 [ 0.602132] ACPI: Power Button [PWRB] [ 0.602200] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input1 [ 0.602468] ACPI: Lid Switch [LID] [ 0.602495] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2 [ 0.602498] ACPI: Power Button [PWRF] [ 0.602510] initcall acpi_button_init+0x0/0x4a returned 0 after 419 usecs [ 0.602512] calling acpi_fan_init+0x0/0x4a @ 1 [ 0.602525] initcall acpi_fan_init+0x0/0x4a returned 0 after 11 usecs [ 0.602527] calling acpi_pci_slot_init+0x0/0x1b @ 1 [ 0.602919] initcall acpi_pci_slot_init+0x0/0x1b returned 0 after 381 usecs [ 0.602921] calling acpi_processor_init+0x0/0x102 @ 1 [ 0.602923] ACPI: acpi_idle yielding to intel_idleinitcall acpi_processor_init+0x0/0x102 returned 0 after 301 usecs [ 0.603234] calling acpi_container_init+0x0/0x4d @ 1 [ 0.605476] initcall acpi_container_init+0x0/0x4d returned 0 after 2192 usecs [ 0.605478] calling acpi_thermal_init+0x0/0x6e @ 1 [ 0.605695] thermal LNXTHERM:01: registered as thermal_zone0 [ 0.605700] ACPI: Thermal Zone [TZ01] (81 C) [ 0.605707] initcall acpi_thermal_init+0x0/0x6e returned 0 after 222 usecs [ 0.605709] calling acpi_battery_init+0x0/0x40 @ 1 [ 0.605735] initcall acpi_battery_init+0x0/0x40 returned 0 after 22 usecs [ 0.605737] calling acpi_smb_hc_init+0x0/0x15 @ 1 [ 0.605751] calling 2_acpi_battery_update_async+0x0/0x4f @ 62 [ 0.605776] initcall acpi_smb_hc_init+0x0/0x15 returned 0 after 35 usecs [ 0.605779] calling acpi_sbs_init+0x0/0x46 @ 1 [ 0.605793] ACPI: Battery Slot [BAT1] (battery absent) [ 0.605795] initcall 2_acpi_battery_update_async+0x0/0x4f returned 0 after 40 usecs [ 0.605798] initcall acpi_sbs_init+0x0/0x46 returned 0 after 14 usecs [ 0.605801] calling erst_init+0x0/0x22b @ 1 [ 0.605804] ERST: Table is not found! [ 0.605807] initcall erst_init+0x0/0x22b returned 0 after 2 usecs [ 0.605810] calling pnpbios_thread_init+0x0/0x56 @ 1 [ 0.605812] initcall pnpbios_thread_init+0x0/0x56 returned 0 after 0 usecs [ 0.605816] calling isapnp_init+0x0/0x11 @ 1 [ 0.605821] initcall isapnp_init+0x0/0x11 returned 3 after 2 usecs [ 0.605825] calling 3_async_isapnp_init+0x0/0xa @ 62 [ 0.605828] initcall isapnp_init+0x0/0x11 returned with error code 3 [ 0.605834] calling rand_initialize+0x0/0x30 @ 1 [ 0.605836] isapnp: Scanning for PnP cards... [ 0.605856] initcall rand_initialize+0x0/0x30 returned 0 after 16 usecs [ 0.605859] calling pty_init+0x0/0x11 @ 1 [ 0.605913] initcall pty_init+0x0/0x11 returned 0 after 49 usecs [ 0.605916] calling sysrq_init+0x0/0x58 @ 1 [ 0.605923] initcall sysrq_init+0x0/0x58 returned 0 after 3 usecs [ 0.605926] calling hpet_init+0x0/0x57 @ 1 [ 0.606103] initcall hpet_init+0x0/0x57 returned 0 after 169 usecs [ 0.606106] calling cn_proc_init+0x0/0x33 @ 1 [ 0.606121] initcall cn_proc_init+0x0/0x33 returned 0 after 11 usecs [ 0.606124] calling serial8250_init+0x0/0x156 @ 1 [ 0.606126] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.606290] initcall serial8250_init+0x0/0x156 returned 0 after 158 usecs [ 0.606293] calling serial8250_pnp_init+0x0/0xf @ 1 [ 0.606454] initcall serial8250_pnp_init+0x0/0xf returned 0 after 153 usecs [ 0.606457] calling serial8250_pci_init+0x0/0x16 @ 1 [ 0.606486] initcall serial8250_pci_init+0x0/0x16 returned 0 after 24 usecs [ 0.606489] calling init_kgdboc+0x0/0x15 @ 1 [ 0.606492] initcall init_kgdboc+0x0/0x15 returned 0 after 0 usecs [ 0.606495] calling isa_bus_init+0x0/0x33 @ 1 [ 0.606512] initcall isa_bus_init+0x0/0x33 returned 0 after 13 usecs [ 0.606518] calling topology_sysfs_init+0x0/0x51 @ 1 [ 0.606535] initcall topology_sysfs_init+0x0/0x51 returned 0 after 13 usecs [ 0.606538] calling brd_init+0x0/0x162 @ 1 [ 0.607487] brd: module loaded [ 0.607491] initcall brd_init+0x0/0x162 returned 0 after 929 usecs [ 0.607494] calling loop_init+0x0/0x17f @ 1 [ 0.607996] loop: module loaded [ 0.608000] initcall loop_init+0x0/0x17f returned 0 after 491 usecs [ 0.608003] calling pkt_init+0x0/0x1ba @ 1 [ 0.608046] initcall pkt_init+0x0/0x1ba returned 0 after 38 usecs [ 0.608049] calling htcpld_core_init+0x0/0x24 @ 1 [ 0.608071] initcall htcpld_core_init+0x0/0x24 returned -19 after 17 usecs [ 0.608074] calling wm8994_i2c_init+0x0/0x30 @ 1 [ 0.608082] initcall wm8994_i2c_init+0x0/0x30 returned 0 after 5 usecs [ 0.608087] calling twl4030_codec_init+0x0/0x14 @ 1 [ 0.608096] initcall twl4030_codec_init+0x0/0x14 returned 0 after 5 usecs [ 0.608099] calling adp5520_init+0x0/0x11 @ 1 [ 0.608108] initcall adp5520_init+0x0/0x11 returned 0 after 5 usecs [ 0.608111] calling mac_hid_init+0x0/0x1c @ 1 [ 0.608121] initcall mac_hid_init+0x0/0x1c returned 0 after 6 usecs [ 0.608124] calling scsi_dh_init+0x0/0x37 @ 1 [ 0.608127] initcall scsi_dh_init+0x0/0x37 returned 0 after 0 usecs [ 0.608130] calling init_sd+0x0/0x14b @ 1 [ 0.608157] initcall init_sd+0x0/0x14b returned 0 after 23 usecs [ 0.608160] calling init_sr+0x0/0x3d @ 1 [ 0.608168] initcall init_sr+0x0/0x3d returned 0 after 5 usecs [ 0.608171] calling init_sg+0x0/0x115 @ 1 [ 0.608187] initcall init_sg+0x0/0x115 returned 0 after 12 usecs [ 0.608190] calling adma_ata_init+0x0/0x16 @ 1 [ 0.608202] initcall adma_ata_init+0x0/0x16 returned 0 after 9 usecs [ 0.608206] calling piix_init+0x0/0x24 @ 1 [ 0.608222] initcall piix_init+0x0/0x24 returned 0 after 13 usecs [ 0.608225] calling sis_init+0x0/0x16 @ 1 [ 0.608238] initcall sis_init+0x0/0x16 returned 0 after 9 usecs [ 0.608241] calling pacpi_init+0x0/0x16 @ 1 [ 0.608253] initcall pacpi_init+0x0/0x16 returned 0 after 9 usecs [ 0.608256] calling ata_generic_init+0x0/0x16 @ 1 [ 0.608269] initcall ata_generic_init+0x0/0x16 returned 0 after 9 usecs [ 0.608272] calling marvell_init+0x0/0x4d @ 1 [ 0.608316] initcall marvell_init+0x0/0x4d returned 0 after 39 usecs [ 0.608319] calling davicom_init+0x0/0x4d @ 1 [ 0.608338] initcall davicom_init+0x0/0x4d returned 0 after 15 usecs [ 0.608341] calling cicada_init+0x0/0x33 @ 1 [ 0.608354] initcall cicada_init+0x0/0x33 returned 0 after 10 usecs [ 0.608357] calling lxt_init+0x0/0x4d @ 1 [ 0.608376] initcall lxt_init+0x0/0x4d returned 0 after 14 usecs [ 0.608379] calling qs6612_init+0x0/0xf @ 1 [ 0.608387] initcall qs6612_init+0x0/0xf returned 0 after 5 usecs [ 0.608390] calling smsc_init+0x0/0x81 @ 1 [ 0.608421] initcall smsc_init+0x0/0x81 returned 0 after 27 usecs [ 0.608424] calling vsc82xx_init+0x0/0x33 @ 1 [ 0.608439] initcall vsc82xx_init+0x0/0x33 returned 0 after 12 usecs [ 0.608442] calling broadcom_init+0x0/0x117 @ 1 [ 0.608508] initcall broadcom_init+0x0/0x117 returned 0 after 60 usecs [ 0.608511] calling ip175c_init+0x0/0xf @ 1 [ 0.608520] initcall ip175c_init+0x0/0xf returned 0 after 6 usecs [ 0.608523] calling realtek_init+0x0/0xf @ 1 [ 0.608534] initcall realtek_init+0x0/0xf returned 0 after 7 usecs [ 0.608537] calling et1011c_init+0x0/0xf @ 1 [ 0.608545] initcall et1011c_init+0x0/0xf returned 0 after 5 usecs [ 0.608548] calling fixed_mdio_bus_init+0x0/0xdb @ 1 [ 0.608575] Fixed MDIO Bus: probed [ 0.608578] initcall fixed_mdio_bus_init+0x0/0xdb returned 0 after 26 usecs [ 0.608581] calling mdio_gpio_init+0x0/0xf @ 1 [ 0.608589] initcall mdio_gpio_init+0x0/0xf returned 0 after 5 usecs [ 0.608592] calling ns_init+0x0/0xf @ 1 [ 0.608602] initcall ns_init+0x0/0xf returned 0 after 7 usecs [ 0.608604] calling ste10Xp_init+0x0/0x1d @ 1 [ 0.608619] initcall ste10Xp_init+0x0/0x1d returned 0 after 11 usecs [ 0.608622] calling net_olddevs_init+0x0/0x1a @ 1 [ 0.608628] initcall net_olddevs_init+0x0/0x1a returned 0 after 3 usecs [ 0.608631] calling ppp_init+0x0/0xe5 @ 1 [ 0.608632] PPP generic driver version 2.4.2 [ 0.608663] initcall ppp_init+0x0/0xe5 returned 0 after 28 usecs [ 0.608665] calling tun_init+0x0/0x8b @ 1 [ 0.608667] tun: Universal TUN/TAP device driver, 1.6 [ 0.608669] tun: (C) 1999-2004 Max Krasnyansky [ 0.608692] initcall tun_init+0x0/0x8b returned 0 after 23 usecs [ 0.608695] calling cdrom_init+0x0/0x5b @ 1 [ 0.608709] initcall cdrom_init+0x0/0x5b returned 0 after 11 usecs [ 0.608712] calling mon_init+0x0/0xe9 @ 1 [ 0.608748] initcall mon_init+0x0/0xe9 returned 0 after 33 usecs [ 0.608751] calling ehci_hcd_init+0x0/0x6d @ 1 [ 0.608753] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.608774] ehci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.608786] ehci_hcd 0000:00:1a.0: setting latency timer to 64 [ 0.608790] ehci_hcd 0000:00:1a.0: EHCI Host Controller [ 0.608821] ehci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 1 [ 0.608849] ehci_hcd 0000:00:1a.0: debug port 2 [ 0.612724] ehci_hcd 0000:00:1a.0: cache line size of 64 is not supported [ 0.612745] ehci_hcd 0000:00:1a.0: irq 16, io mem 0xd4727c00 [ 0.625706] ehci_hcd 0000:00:1a.0: USB 2.0 started, EHCI 1.00 [ 0.625820] hub 1-0:1.0: USB hub found [ 0.625825] hub 1-0:1.0: 3 ports detected [ 0.625892] alloc irq_desc for 23 on node -1 [ 0.625894] alloc kstat_irqs on node -1 [ 0.625900] ehci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 0.625915] ehci_hcd 0000:00:1d.0: setting latency timer to 64 [ 0.625919] ehci_hcd 0000:00:1d.0: EHCI Host Controller [ 0.625951] ehci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2 [ 0.625977] ehci_hcd 0000:00:1d.0: debug port 2 [ 0.629861] ehci_hcd 0000:00:1d.0: cache line size of 64 is not supported [ 0.629876] ehci_hcd 0000:00:1d.0: irq 23, io mem 0xd4727800 [ 0.645655] ehci_hcd 0000:00:1d.0: USB 2.0 started, EHCI 1.00 [ 0.645762] hub 2-0:1.0: USB hub found [ 0.645765] hub 2-0:1.0: 3 ports detected [ 0.645831] initcall ehci_hcd_init+0x0/0x6d returned 0 after 36298 usecs [ 0.645834] calling ohci_hcd_mod_init+0x0/0x51 @ 1 [ 0.645836] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.645851] initcall ohci_hcd_mod_init+0x0/0x51 returned 0 after 13 usecs [ 0.645853] calling uhci_hcd_init+0x0/0xb4 @ 1 [ 0.645855] uhci_hcd: USB Universal Host Controller Interface driver [ 0.645895] initcall uhci_hcd_init+0x0/0xb4 returned 0 after 37 usecs [ 0.645898] calling i8042_init+0x0/0x73 @ 1 [ 0.645955] PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 0.647986] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 0.647994] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 0.648004] initcall i8042_init+0x0/0x73 returned 0 after 2058 usecs [ 0.648007] calling mousedev_init+0x0/0x7f @ 1 [ 0.648060] mice: PS/2 mouse device common for all mice [ 0.648064] initcall mousedev_init+0x0/0x7f returned 0 after 53 usecs [ 0.648066] calling evdev_init+0x0/0xf @ 1 [ 0.648126] initcall evdev_init+0x0/0xf returned 0 after 55 usecs [ 0.648129] calling atkbd_init+0x0/0x20 @ 1 [ 0.648146] initcall atkbd_init+0x0/0x20 returned 0 after 13 usecs [ 0.648148] calling uinput_init+0x0/0xf @ 1 [ 0.648168] initcall uinput_init+0x0/0xf returned 0 after 16 usecs [ 0.648171] calling cmos_init+0x0/0x5e @ 1 [ 0.648196] rtc_cmos 00:08: RTC can wake from S4 [ 0.648236] rtc_cmos 00:08: rtc core: registered rtc_cmos as rtc0 [ 0.648267] rtc0: alarms up to one year, 242 bytes nvram, hpet irqs [ 0.648277] initcall cmos_init+0x0/0x5e returned 0 after 100 usecs [ 0.648280] calling dm_init+0x0/0x3f @ 1 [ 0.648368] device-mapper: uevent: version 1.0.3 [ 0.648472] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 0.648477] initcall dm_init+0x0/0x3f returned 0 after 190 usecs [ 0.648480] calling dm_multipath_init+0x0/0x13d @ 1 [ 0.648558] device-mapper: multipath: version 1.1.1 loaded [ 0.648561] initcall dm_multipath_init+0x0/0x13d returned 0 after 76 usecs [ 0.648564] calling dm_rr_init+0x0/0x3a @ 1 [ 0.648566] device-mapper: multipath round-robin: version 1.0.0 loaded [ 0.648569] initcall dm_rr_init+0x0/0x3a returned 0 after 2 usecs [ 0.648572] calling dm_snapshot_init+0x0/0x292 @ 1 [ 0.648611] initcall dm_snapshot_init+0x0/0x292 returned 0 after 35 usecs [ 0.648614] calling dm_mirror_init+0x0/0x77 @ 1 [ 0.648651] initcall dm_mirror_init+0x0/0x77 returned 0 after 32 usecs [ 0.648654] calling dm_dirty_log_init+0x0/0x4d @ 1 [ 0.648657] initcall dm_dirty_log_init+0x0/0x4d returned 0 after 0 usecs [ 0.648660] calling pci_eisa_init_module+0x0/0x16 @ 1 [ 0.648674] initcall pci_eisa_init_module+0x0/0x16 returned 0 after 10 usecs [ 0.648677] calling virtual_eisa_root_init+0x0/0x4d @ 1 [ 0.648694] EISA: Probing bus 0 at eisa.0 [ 0.648696] EISA: Cannot allocate resource for mainboard [ 0.648698] Cannot allocate resource for EISA slot 1 [ 0.648700] Cannot allocate resource for EISA slot 2 [ 0.648701] Cannot allocate resource for EISA slot 3 [ 0.648703] Cannot allocate resource for EISA slot 4 [ 0.648705] Cannot allocate resource for EISA slot 5 [ 0.648706] Cannot allocate resource for EISA slot 6 [ 0.648708] Cannot allocate resource for EISA slot 7 [ 0.648710] Cannot allocate resource for EISA slot 8 [ 0.648711] EISA: Detected 0 cards. [ 0.648714] initcall virtual_eisa_root_init+0x0/0x4d returned 0 after 33 usecs [ 0.648717] calling cpufreq_stats_init+0x0/0x84 @ 1 [ 0.648723] initcall cpufreq_stats_init+0x0/0x84 returned 0 after 3 usecs [ 0.648726] calling cpufreq_gov_powersave_init+0x0/0xf @ 1 [ 0.648730] initcall cpufreq_gov_powersave_init+0x0/0xf returned 0 after 0 usecs [ 0.648733] calling cpufreq_gov_userspace_init+0x0/0xf @ 1 [ 0.648736] initcall cpufreq_gov_userspace_init+0x0/0xf returned 0 after 0 usecs [ 0.648739] calling cpufreq_gov_dbs_init+0x0/0xb3 @ 1 [ 0.648793] initcall cpufreq_gov_dbs_init+0x0/0xb3 returned 0 after 50 usecs [ 0.648796] calling cpufreq_gov_dbs_init+0x0/0x6a @ 1 [ 0.648849] initcall cpufreq_gov_dbs_init+0x0/0x6a returned 0 after 49 usecs [ 0.648852] calling init_ladder+0x0/0xf @ 1 [ 0.648967] cpuidle: using governor ladder [ 0.648970] initcall init_ladder+0x0/0xf returned 0 after 111 usecs [ 0.648973] calling init_menu+0x0/0xf @ 1 [ 0.649146] cpuidle: using governor menu [ 0.649149] initcall init_menu+0x0/0xf returned 0 after 169 usecs [ 0.649152] calling efivars_init+0x0/0x1ec @ 1 [ 0.649155] initcall efivars_init+0x0/0x1ec returned -19 after 0 usecs [ 0.649158] calling staging_init+0x0/0x7 @ 1 [ 0.649161] initcall staging_init+0x0/0x7 returned 0 after 0 usecs [ 0.649165] calling flow_cache_init_global+0x0/0x32 @ 1 [ 0.649189] initcall flow_cache_init_global+0x0/0x32 returned 0 after 20 usecs [ 0.649192] calling llc_init+0x0/0x1b @ 1 [ 0.649196] initcall llc_init+0x0/0x1b returned 0 after 1 usecs [ 0.649200] calling snap_init+0x0/0x35 @ 1 [ 0.649203] initcall snap_init+0x0/0x35 returned 0 after 0 usecs [ 0.649206] calling rif_init+0x0/0x70 @ 1 [ 0.649225] initcall rif_init+0x0/0x70 returned 0 after 15 usecs [ 0.649228] calling blackhole_module_init+0x0/0xf @ 1 [ 0.649232] initcall blackhole_module_init+0x0/0xf returned 0 after 0 usecs [ 0.649235] calling init_cgroup_cls+0x0/0x33 @ 1 [ 0.649239] initcall init_cgroup_cls+0x0/0x33 returned 0 after 1 usecs [ 0.649242] calling sysctl_ipv4_init+0x0/0x75 @ 1 [ 0.649445] initcall sysctl_ipv4_init+0x0/0x75 returned 0 after 195 usecs [ 0.649448] calling init_syncookies+0x0/0x16 @ 1 [ 0.649484] initcall init_syncookies+0x0/0x16 returned 0 after 32 usecs [ 0.649489] calling ipv4_netfilter_init+0x0/0x20 @ 1 [ 0.649492] initcall ipv4_netfilter_init+0x0/0x20 returned 0 after 0 usecs [ 0.649495] calling inet_diag_init+0x0/0xbf @ 1 [ 0.649509] initcall inet_diag_init+0x0/0xbf returned 0 after 10 usecs [ 0.649512] calling tcp_diag_init+0x0/0xf @ 1 [ 0.649515] initcall tcp_diag_init+0x0/0xf returned 0 after 0 usecs [ 0.649518] calling cubictcp_register+0x0/0x72 @ 1 [ 0.649521] TCP cubic registered [ 0.649523] initcall cubictcp_register+0x0/0x72 returned 0 after 2 usecs [ 0.649526] calling inet6_init+0x0/0x282 @ 1 [ 0.649658] NET: Registered protocol family 10 [ 0.649993] lo: Disabled Privacy Extensions [ 0.650199] initcall inet6_init+0x0/0x282 returned 0 after 655 usecs [ 0.650203] calling packet_init+0x0/0x39 @ 1 [ 0.650205] NET: Registered protocol family 17 [ 0.650210] initcall packet_init+0x0/0x39 returned 0 after 4 usecs [ 0.650213] calling dsa_init_module+0x0/0x11 @ 1 [ 0.650216] initcall dsa_init_module+0x0/0x11 returned 0 after 0 usecs [ 0.650218] calling edsa_init_module+0x0/0x11 @ 1 [ 0.650221] initcall edsa_init_module+0x0/0x11 returned 0 after 0 usecs [ 0.650224] calling trailer_init_module+0x0/0x11 @ 1 [ 0.650227] initcall trailer_init_module+0x0/0x11 returned 0 after 0 usecs [ 0.650229] calling mv88e6060_init+0x0/0x11 @ 1 [ 0.650232] initcall mv88e6060_init+0x0/0x11 returned 0 after 0 usecs [ 0.650235] calling mv88e6123_61_65_init+0x0/0x11 @ 1 [ 0.650238] initcall mv88e6123_61_65_init+0x0/0x11 returned 0 after 0 usecs [ 0.650240] calling mv88e6131_init+0x0/0x11 @ 1 [ 0.650243] initcall mv88e6131_init+0x0/0x11 returned 0 after 0 usecs [ 0.650245] calling dsa_init_module+0x0/0xf @ 1 [ 0.650257] initcall dsa_init_module+0x0/0xf returned 0 after 8 usecs [ 0.650260] calling dcbnl_init+0x0/0x3a @ 1 [ 0.650263] initcall dcbnl_init+0x0/0x3a returned 0 after 0 usecs [ 0.650267] calling mcheck_debugfs_init+0x0/0x3e @ 1 [ 0.650279] initcall mcheck_debugfs_init+0x0/0x3e returned 0 after 9 usecs [ 0.650282] calling severities_debugfs_init+0x0/0x3e @ 1 [ 0.650286] initcall severities_debugfs_init+0x0/0x3e returned 0 after 1 usecs [ 0.650292] calling powernowk8_init+0x0/0x14d @ 1 [ 0.650299] initcall powernowk8_init+0x0/0x14d returned -19 after 4 usecs [ 0.650303] calling acpi_cpufreq_init+0x0/0xb0 @ 1 [ 0.651851] initcall acpi_cpufreq_init+0x0/0xb0 returned 0 after 1511 usecs [ 0.651854] calling powernow_init+0x0/0x1f @ 1 [ 0.651857] initcall powernow_init+0x0/0x1f returned -19 after 0 usecs [ 0.651860] calling longhaul_init+0x0/0x94 @ 1 [ 0.651863] initcall longhaul_init+0x0/0x94 returned -19 after 0 usecs [ 0.651865] calling centrino_init+0x0/0x26 @ 1 [ 0.651868] initcall centrino_init+0x0/0x26 returned -16 after 0 usecs [ 0.651871] initcall centrino_init+0x0/0x26 returned with error code -16 [ 0.651874] calling hpet_insert_resource+0x0/0x1e @ 1 [ 0.651879] initcall hpet_insert_resource+0x0/0x1e returned 0 after 1 usecs [ 0.651883] calling update_mp_table+0x0/0x1f3 @ 1 [ 0.651886] initcall update_mp_table+0x0/0x1f3 returned 0 after 0 usecs [ 0.651889] calling lapic_insert_resource+0x0/0x35 @ 1 [ 0.651893] initcall lapic_insert_resource+0x0/0x35 returned 0 after 0 usecs [ 0.651896] calling print_ipi_mode+0x0/0x2e @ 1 [ 0.651898] Using IPI No-Shortcut mode [ 0.651901] initcall print_ipi_mode+0x0/0x2e returned 0 after 1 usecs [ 0.651904] calling init_lapic_nmi_sysfs+0x0/0x33 @ 1 [ 0.651907] initcall init_lapic_nmi_sysfs+0x0/0x33 returned 0 after 0 usecs [ 0.651910] calling io_apic_bug_finalize+0x0/0x1a @ 1 [ 0.651913] initcall io_apic_bug_finalize+0x0/0x1a returned 0 after 0 usecs [ 0.651917] calling check_early_ioremap_leak+0x0/0x69 @ 1 [ 0.651920] initcall check_early_ioremap_leak+0x0/0x69 returned 0 after 0 usecs [ 0.651923] calling pat_memtype_list_init+0x0/0x37 @ 1 [ 0.651929] initcall pat_memtype_list_init+0x0/0x37 returned 0 after 2 usecs [ 0.651932] calling sched_init_debug+0x0/0x2a @ 1 [ 0.651937] initcall sched_init_debug+0x0/0x2a returned 0 after 2 usecs [ 0.651942] calling init_oops_id+0x0/0x50 @ 1 [ 0.651948] initcall init_oops_id+0x0/0x50 returned 0 after 3 usecs [ 0.651951] calling disable_boot_consoles+0x0/0x43 @ 1 [ 0.651954] initcall disable_boot_consoles+0x0/0x43 returned 0 after 0 usecs [ 0.651958] calling pm_qos_power_init+0x0/0xbf @ 1 [ 0.652014] initcall pm_qos_power_init+0x0/0xbf returned 0 after 52 usecs [ 0.652017] calling test_suspend+0x0/0x8e @ 1 [ 0.652021] initcall test_suspend+0x0/0x8e returned 0 after 1 usecs [ 0.652025] calling software_resume+0x0/0x1f0 @ 1 [ 0.652027] PM: Resume from disk failed. [ 0.652030] initcall software_resume+0x0/0x1f0 returned -2 after 2 usecs [ 0.652033] initcall software_resume+0x0/0x1f0 returned with error code -2 [ 0.652039] calling debugfs_kprobe_init+0x0/0x90 @ 1 [ 0.652045] initcall debugfs_kprobe_init+0x0/0x90 returned 0 after 3 usecs [ 0.652049] calling taskstats_init+0x0/0x85 @ 1 [ 0.652055] registered taskstats version 1 [ 0.652058] initcall taskstats_init+0x0/0x85 returned 0 after 5 usecs [ 0.652061] calling clear_boot_tracer+0x0/0x2d @ 1 [ 0.652064] initcall clear_boot_tracer+0x0/0x2d returned 0 after 0 usecs [ 0.652068] calling max_swapfiles_check+0x0/0x7 @ 1 [ 0.652071] initcall max_swapfiles_check+0x0/0x7 returned 0 after 0 usecs [ 0.652076] calling random32_reseed+0x0/0x83 @ 1 [ 0.652117] initcall random32_reseed+0x0/0x83 returned 0 after 37 usecs [ 0.652121] calling pci_resource_alignment_sysfs_init+0x0/0x14 @ 1 [ 0.652127] initcall pci_resource_alignment_sysfs_init+0x0/0x14 returned 0 after 1 usecs [ 0.652130] calling pci_sysfs_init+0x0/0x44 @ 1 [ 0.652428] initcall pci_sysfs_init+0x0/0x44 returned 0 after 287 usecs [ 0.652432] calling regulator_init_complete+0x0/0x10f @ 1 [ 0.652435] initcall regulator_init_complete+0x0/0x10f returned 0 after 0 usecs [ 0.652438] calling seqgen_init+0x0/0xe @ 1 [ 0.652453] initcall seqgen_init+0x0/0xe returned 0 after 12 usecs [ 0.652458] calling late_resume_init+0x0/0x1b0 @ 1 [ 0.652460] Magic number: 11:557:94 [ 0.652524] initcall late_resume_init+0x0/0x1b0 returned 0 after 62 usecs [ 0.652530] calling scsi_complete_async_scans+0x0/0x160 @ 1 [ 0.652533] initcall scsi_complete_async_scans+0x0/0x160 returned 0 after 0 usecs [ 0.652536] calling rtc_hctosys+0x0/0x177 @ 1 [ 0.652564] rtc_cmos 00:08: setting system clock to 2011-01-26 20:04:02 UTC (1296072242) [ 0.652568] initcall rtc_hctosys+0x0/0x177 returned 0 after 28 usecs [ 0.652571] calling edd_init+0x0/0x1b0 @ 1 [ 0.652573] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 0.652575] EDD information not available. [ 0.652578] initcall edd_init+0x0/0x1b0 returned -19 after 4 usecs [ 0.652580] calling memmap_init+0x0/0x30 @ 1 [ 0.652622] initcall memmap_init+0x0/0x30 returned 0 after 37 usecs [ 0.652625] calling pci_mmcfg_late_insert_resources+0x0/0x59 @ 1 [ 0.652629] initcall pci_mmcfg_late_insert_resources+0x0/0x59 returned 0 after 1 usecs [ 0.652633] calling tcp_congestion_default+0x0/0xf @ 1 [ 0.652636] initcall tcp_congestion_default+0x0/0xf returned 0 after 0 usecs [ 0.652639] calling initialize_hashrnd+0x0/0x16 @ 1 [ 0.652645] initcall initialize_hashrnd+0x0/0x16 returned 0 after 2 usecs [ 0.652669] async_waiting @ 1 [ 0.658117] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3 [ 0.718956] Freeing initrd memory: 11276k freed [ 0.721427] initcall 1_async_populate_rootfs+0x0/0xd0 returned 0 after 222773 usecs [ 0.721446] async_continuing @ 1 after 67337 usec [ 0.721465] async_waiting @ 1 [ 0.936866] usb 1-1: new high speed USB device using ehci_hcd and address 2 [ 0.972307] isapnp: No Plug & Play device found [ 0.972313] initcall 3_async_isapnp_init+0x0/0xa returned 0 after 358821 usecs [ 0.972317] async_continuing @ 1 after 245607 usec [ 0.972328] Freeing unused kernel memory: 688k freed [ 0.972564] Write protecting the kernel text: 4936k [ 0.972592] Write protecting the kernel read-only data: 1976k [ 0.992312] udev[113]: starting version 163 [ 1.011043] e1000e: Intel(R) PRO/1000 Network Driver - 1.0.2-k4 [ 1.011047] e1000e: Copyright (c) 1999 - 2009 Intel Corporation. [ 1.011084] alloc irq_desc for 20 on node -1 [ 1.011086] alloc kstat_irqs on node -1 [ 1.011094] e1000e 0000:00:19.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20 [ 1.011106] e1000e 0000:00:19.0: setting latency timer to 64 [ 1.011213] alloc irq_desc for 44 on node -1 [ 1.011215] alloc kstat_irqs on node -1 [ 1.011228] e1000e 0000:00:19.0: irq 44 for MSI/MSI-X [ 1.029689] sdhci: Secure Digital Host Controller Interface driver [ 1.029691] sdhci: Copyright(c) Pierre Ossman [ 1.031160] sdhci-pci 0000:01:00.0: SDHCI controller found [1180:e822] (rev 1) [ 1.031188] sdhci-pci 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.032271] sdhci-pci 0000:01:00.0: Will use DMA mode even though HW doesn't fully claim to support it. [ 1.032280] sdhci-pci 0000:01:00.0: setting latency timer to 64 [ 1.041670] Registered led device: mmc0:: [ 1.041751] mmc0: SDHCI controller on PCI [0000:01:00.0] using DMA [ 1.069331] hub 1-1:1.0: USB hub found [ 1.069392] hub 1-1:1.0: 6 ports detected [ 1.146360] e1000e 0000:00:19.0: eth0: (PCI Express:2.5GB/s:Width x1) 00:23:18:58:1b:8c [ 1.146363] e1000e 0000:00:19.0: eth0: Intel(R) PRO/1000 Network Connection [ 1.146432] e1000e 0000:00:19.0: eth0: MAC: 9, PHY: 10, PBA No: ffffff-0ff [ 1.146446] ahci 0000:00:1f.2: version 3.0 [ 1.146466] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.146514] alloc irq_desc for 45 on node -1 [ 1.146516] alloc kstat_irqs on node -1 [ 1.146528] ahci 0000:00:1f.2: irq 45 for MSI/MSI-X [ 1.146569] ahci: SSS flag set, parallel bus scan disabled [ 1.146613] ahci 0000:00:1f.2: AHCI 0001.0300 32 slots 6 ports 3 Gbps 0x23 impl SATA mode [ 1.146617] ahci 0000:00:1f.2: flags: 64bit ncq sntf stag pm led clo pio slum part ems sxs apst [ 1.146623] ahci 0000:00:1f.2: setting latency timer to 64 [ 1.168441] scsi0 : ahci [ 1.168613] scsi1 : ahci [ 1.168676] scsi2 : ahci [ 1.168748] scsi3 : ahci [ 1.168807] scsi4 : ahci [ 1.168861] scsi5 : ahci [ 1.169166] ata1: SATA max UDMA/133 abar m2048@0xd4727000 port 0xd4727100 irq 45 [ 1.169170] ata2: SATA max UDMA/133 abar m2048@0xd4727000 port 0xd4727180 irq 45 [ 1.169171] ata3: DUMMY [ 1.169172] ata4: DUMMY [ 1.169172] ata5: DUMMY [ 1.169175] ata6: SATA max UDMA/133 abar m2048@0xd4727000 port 0xd4727380 irq 45 [ 1.184927] usb 2-1: new high speed USB device using ehci_hcd and address 2 [ 1.320476] hub 2-1:1.0: USB hub found [ 1.320519] hub 2-1:1.0: 8 ports detected [ 1.391820] usb 1-1.2: new full speed USB device using ehci_hcd and address 3 [ 1.488124] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.488986] ACPI Error (psargs-0359): [GTF0] Namespace lookup failure, AE_NOT_FOUND [ 1.488991] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT0.PRT0._SDD] (Node f702b708), AE_NOT_FOUND [ 1.489031] ACPI Error (psargs-0359): [GTF0] Namespace lookup failure, AE_NOT_FOUND [ 1.489034] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT0.PRT0._GTF] (Node f702b720), AE_NOT_FOUND [ 1.489520] ata1.00: ATA-8: Hitachi HTS725032A9A360, PC3OC71E, max UDMA/133 [ 1.489526] ata1.00: 625142448 sectors, multi 16: LBA48 NCQ (depth 31/32), AA [ 1.490621] ACPI Error (psargs-0359): [GTF0] Namespace lookup failure, AE_NOT_FOUND [ 1.490625] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT0.PRT0._SDD] (Node f702b708), AE_NOT_FOUND [ 1.490658] ACPI Error (psargs-0359): [GTF0] Namespace lookup failure, AE_NOT_FOUND [ 1.490661] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT0.PRT0._GTF] (Node f702b720), AE_NOT_FOUND [ 1.491132] ata1.00: configured for UDMA/133 [ 1.503520] scsi 0:0:0:0: Direct-Access ATA Hitachi HTS72503 PC3O PQ: 0 ANSI: 5 [ 1.503657] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 1.503686] sd 0:0:0:0: [sda] 625142448 512-byte logical blocks: (320 GB/298 GiB) [ 1.503746] sd 0:0:0:0: [sda] Write Protect is off [ 1.503749] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.503768] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.503918] sda: [ 1.555926] usb 1-1.4: new high speed USB device using ehci_hcd and address 4 [ 1.805471] sda1 sda2 < sda5 > [ 1.833647] sd 0:0:0:0: [sda] Attached SCSI disk [ 2.225487] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 2.227407] ACPI Error (psargs-0359): [GTF1] Namespace lookup failure, AE_NOT_FOUND [ 2.227411] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT0.PRT1._SDD] (Node f702b7b0), AE_NOT_FOUND [ 2.227451] ACPI Error (psargs-0359): [GTF1] Namespace lookup failure, AE_NOT_FOUND [ 2.227454] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT0.PRT1._GTF] (Node f702b7c8), AE_NOT_FOUND [ 2.227480] ata2.00: ATAPI: MATSHITADVD-RAM UJ892ES, 1.20, max UDMA/100 [ 2.230042] ACPI Error (psargs-0359): [GTF1] Namespace lookup failure, AE_NOT_FOUND [ 2.230046] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT0.PRT1._SDD] (Node f702b7b0), AE_NOT_FOUND [ 2.230080] ACPI Error (psargs-0359): [GTF1] Namespace lookup failure, AE_NOT_FOUND [ 2.230084] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT0.PRT1._GTF] (Node f702b7c8), AE_NOT_FOUND [ 2.230120] ata2.00: configured for UDMA/100 [ 2.248533] scsi 1:0:0:0: CD-ROM MATSHITA DVD-RAM UJ892ES 1.20 PQ: 0 ANSI: 5 [ 2.254776] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 2.254781] Uniform CD-ROM driver Revision: 3.20 [ 2.254933] sr 1:0:0:0: Attached scsi CD-ROM sr0 [ 2.254986] sr 1:0:0:0: Attached scsi generic sg1 type 5 [ 2.573361] ata6: SATA link down (SStatus 0 SControl 300) [ 2.830083] EXT4-fs (sda1): INFO: recovery required on readonly filesystem [ 2.830086] EXT4-fs (sda1): write access will be enabled during recovery [ 2.891994] EXT4-fs (sda1): recovery complete [ 2.892278] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 6.837405] udev[442]: starting version 163 [ 6.847837] lp: driver loaded but no devices found [ 6.856665] Adding 12286972k swap on /dev/sda5. Priority:-1 extents:1 across:12286972k [ 6.887677] intel ips 0000:00:1f.6: Warning: CPU TDP doesn't match expected value (found 25, expected 35) [ 6.887703] intel ips 0000:00:1f.6: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 6.887848] intel ips 0000:00:1f.6: failed to get i915 symbols, graphics turbo disabled [ 6.904925] Linux agpgart interface v0.103 [ 6.942052] intel ips 0000:00:1f.6: IPS driver initialized, MCP temp limit 90 [ 6.948887] input: Toshiba input device as /devices/virtual/input/input4 [ 6.948937] toshiba_acpi: Toshiba Laptop ACPI Extras version 0.19 [ 6.948939] toshiba_acpi: HCI method: \_SB_.VALZ.GHCI [ 6.955858] agpgart-intel 0000:00:00.0: Intel HD Graphics Chipset [ 6.956817] agpgart-intel 0000:00:00.0: detected 65532K stolen memory, trimming to 32768K [ 7.006249] Detected Toshiba ACPI Bluetooth device - installing RFKill handler [ 7.011117] toshiba_bluetooth: Re-enabling Toshiba Bluetooth [ 7.013966] cfg80211: Calling CRDA to update world regulatory domain [ 7.046741] tpm_tis 00:03: 1.2 TPM (device-id 0xB, rev-id 16) [ 7.062507] Linux video capture interface: v2.00 [ 7.076506] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xc0000000 [ 7.081657] cfg80211: World regulatory domain updated: [ 7.081659] (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 7.081662] (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 7.081665] (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 7.081668] (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 7.081670] (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 7.081673] (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 7.083894] uvcvideo: Found UVC 1.00 device 2SF001 (0bda:58f5) [ 7.112517] [drm] Initialized drm 1.1.0 20060810 [ 7.118120] input: 2SF001 as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4:1.0/input/input5 [ 7.118177] usbcore: registered new interface driver uvcvideo [ 7.118180] USB Video Class driver (v0.1.0) [ 7.136609] iwlagn: Intel(R) Wireless WiFi Link AGN driver for Linux, in-tree: [ 7.136611] iwlagn: Copyright(c) 2003-2010 Intel Corporation [ 7.136672] iwlagn 0000:02:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 7.136680] iwlagn 0000:02:00.0: setting latency timer to 64 [ 7.136719] iwlagn 0000:02:00.0: Detected Intel(R) Centrino(R) Advanced-N 6200 AGN, REV=0x74 [ 7.141068] i915 0000:00:02.0: power state changed by ACPI to D0 [ 7.141129] i915 0000:00:02.0: power state changed by ACPI to D0 [ 7.141138] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 7.141146] i915 0000:00:02.0: setting latency timer to 64 [ 7.147692] iwlagn 0000:02:00.0: Tunable channels: 13 802.11bg, 24 802.11a channels [ 7.147787] alloc irq_desc for 46 on node -1 [ 7.147790] alloc kstat_irqs on node -1 [ 7.147831] iwlagn 0000:02:00.0: irq 46 for MSI/MSI-X [ 7.156284] [drm] detected 63M stolen memory, trimming to 32M [ 7.156360] alloc irq_desc for 47 on node -1 [ 7.156362] alloc kstat_irqs on node -1 [ 7.156370] i915 0000:00:02.0: irq 47 for MSI/MSI-X [ 7.156379] [drm] set up 32M of stolen space [ 7.176886] iwlagn 0000:02:00.0: loaded firmware version 9.221.4.1 build 25532 [ 7.201086] phy0: Selected rate control algorithm 'iwl-agn-rs' [ 7.227806] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=io+mem,decodes=io+mem:owns=io+mem [ 7.464301] usb 1-1.6: new full speed USB device using ehci_hcd and address 5 [ 7.582569] Bluetooth: Core ver 2.15 [ 7.582615] NET: Registered protocol family 31 [ 7.582616] Bluetooth: HCI device and connection manager initialized [ 7.582619] Bluetooth: HCI socket layer initialized [ 7.587347] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 7.587565] usbcore: registered new interface driver btusb [ 7.597354] Console: switching to colour frame buffer device 170x48 [ 7.600002] fb0: inteldrmfb frame buffer device [ 7.600003] drm: registered panic notifier [ 7.600006] Slow work thread pool: Starting up [ 7.600071] Slow work thread pool: Ready [ 7.604440] acpi device:01: registered as cooling_device4 [ 7.604633] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input6 [ 7.604679] ACPI: Video Device [GFX0] (multi-head: yes rom: yes post: no) [ 7.604702] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 7.604742] alloc irq_desc for 22 on node -1 [ 7.604744] alloc kstat_irqs on node -1 [ 7.604752] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 7.604797] alloc irq_desc for 48 on node -1 [ 7.604799] alloc kstat_irqs on node -1 [ 7.604810] HDA Intel 0000:00:1b.0: irq 48 for MSI/MSI-X [ 7.604840] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 7.610418] type=1400 audit(1296072249.469:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient3" pid=781 comm="apparmor_parser" [ 7.610429] type=1400 audit(1296072249.469:3): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient3" pid=766 comm="apparmor_parser" [ 7.610806] type=1400 audit(1296072249.469:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=766 comm="apparmor_parser" [ 7.610864] type=1400 audit(1296072249.469:5): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=781 comm="apparmor_parser" [ 7.611010] type=1400 audit(1296072249.469:6): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=766 comm="apparmor_parser" [ 7.611117] type=1400 audit(1296072249.469:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=781 comm="apparmor_parser" [ 7.611691] type=1400 audit(1296072249.469:8): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient3" pid=829 comm="apparmor_parser" [ 7.612127] type=1400 audit(1296072249.473:9): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=829 comm="apparmor_parser" [ 7.612393] type=1400 audit(1296072249.473:10): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=829 comm="apparmor_parser" [ 7.663978] hda_codec: ALC259: BIOS auto-probing. [ 7.664343] hda_codec: connection list not available for 0x24 [ 7.680054] Synaptics Touchpad, model: 1, fw: 7.4, id: 0x1e0b1, caps: 0xd04771/0xa40000/0xa0400 [ 7.710607] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input7 [ 8.301789] e1000e 0000:00:19.0: irq 44 for MSI/MSI-X [ 8.354053] e1000e 0000:00:19.0: irq 44 for MSI/MSI-X [ 8.354254] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 11.627837] e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None [ 11.630919] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ 12.099840] BUG: unable to handle kernel NULL pointer dereference at (null) [ 12.099845] IP: [<(null)>] (null) [ 12.099847] *pde = 00000000 [ 12.099849] Oops: 0000 [#1] SMP [ 12.099851] last sysfs file: /sys/kernel/uevent_seqnum [ 12.099853] Modules linked in: joydev snd_hda_codec_intelhdmi snd_hda_codec_realtek btusb bluetooth tpm_infineon arc4 snd_hda_intel snd_hda_codec snd_hwdep snd_pcm snd_seq_midi snd_rawmidi i915 iwlagn snd_seq_midi_event drm_kms_helper snd_seq drm snd_timer uvcvideo iwlcore snd_seq_device videodev v4l1_compat mac80211 tpm_tis tpm psmouse tpm_bios serio_raw snd toshiba_bluetooth toshiba_acpi intel_agp agpgart cfg80211 i2c_algo_bit soundcore intel_ips snd_page_alloc video output lp parport ahci sdhci_pci sdhci led_class libahci e1000e [ 12.099878] [ 12.099881] Pid: 624, comm: ips-adjust Not tainted 2.6.35-25-generic #44-Ubuntu Portable PC/TECRA R700 [ 12.099884] EIP: 0060:[<00000000>] EFLAGS: 00010202 CPU: 2 [ 12.099886] EIP is at 0x0 [ 12.099888] EAX: 00000292 EBX: f5ae5b00 ECX: 00002328 EDX: 00000292 [ 12.099889] ESI: f5ae5b2c EDI: 00000000 EBP: f5a61fbc ESP: f5a61f78 [ 12.099890] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 12.099892] Process ips-adjust (pid: 624, ti=f5a60000 task=f51d8000 task.ti=f5a60000) [ 12.099894] Stack: [ 12.099895] f84eab93 c08c4700 c08c4700 f70a9960 00000001 c08c4700 c08c4700 f5a61fac [ 12.099898] <0> 0000005a f6a3e200 008c4700 0000058f f51d005a 00000000 f5ae7dec f5ae5b00 [ 12.099902] <0> f84ea900 f5a61fe4 c0165ad4 00000000 00000000 00000000 f5a61fd0 f5a61fd0 [ 12.099906] Call Trace: [ 12.099911] [] ? ips_adjust+0x293/0x400 [intel_ips] [ 12.099914] [] ? ips_adjust+0x0/0x400 [intel_ips] [ 12.099920] [] ? kthread+0x74/0x80 [ 12.099922] [] ? kthread+0x0/0x80 [ 12.099926] [] ? kernel_thread_helper+0x6/0x10 [ 12.099927] Code: Bad EIP value. [ 12.099929] EIP: [<00000000>] 0x0 SS:ESP 0068:f5a61f78 [ 12.099932] CR2: 0000000000000000 [ 12.099934] ---[ end trace 5d3eca833282113c ]--- [ 17.718742] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro [ 18.020617] type=1400 audit(1296072259.905:11): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=1060 comm="apparmor_parser" [ 18.021084] type=1400 audit(1296072259.909:12): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=1060 comm="apparmor_parser" [ 18.583963] ppdev: user-space parallel port driver [ 18.906949] type=1400 audit(1296072260.797:13): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient3" pid=1215 comm="apparmor_parser" [ 18.907322] type=1400 audit(1296072260.797:14): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1215 comm="apparmor_parser" [ 18.907529] type=1400 audit(1296072260.797:15): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=1215 comm="apparmor_parser" [ 18.907881] type=1400 audit(1296072260.797:16): apparmor="STATUS" operation="profile_replace" name="/usr/lib/cups/backend/cups-pdf" pid=1218 comm="apparmor_parser" [ 18.908344] type=1400 audit(1296072260.797:17): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/cupsd" pid=1218 comm="apparmor_parser" [ 19.166759] type=1400 audit(1296072261.057:18): apparmor="STATUS" operation="profile_load" name="/usr/share/gdm/guest-session/Xsession" pid=1214 comm="apparmor_parser" [ 19.171656] type=1400 audit(1296072261.061:19): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=1219 comm="apparmor_parser" [ 19.410993] ADDRCONF(NETDEV_UP): wlan0: link is not ready [ 19.527798] type=1400 audit(1296072261.417:20): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince" pid=1216 comm="apparmor_parser" Bug: 727594 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.38-999-generic (root@zinc) (gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)) #201103011141 SMP Tue Mar 1 13:01:18 UTC 2011 [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) [ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e4000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 000000007f780000 (usable) [ 0.000000] BIOS-e820: 000000007f780000 - 000000007f790000 (ACPI data) [ 0.000000] BIOS-e820: 000000007f790000 - 000000007f7d0000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000007f7d0000 - 000000007f7de000 (reserved) [ 0.000000] BIOS-e820: 000000007f7e0000 - 000000007f800000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000fff80000 - 0000000100000000 (reserved) [ 0.000000] Notice: NX (Execute Disable) protection missing in CPU! [ 0.000000] DMI present. [ 0.000000] DMI: ASUSTeK Computer INC. 701/701, BIOS 1001 05/04/2008 [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] last_pfn = 0x7f780 max_arch_pfn = 0x100000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-DFFFF uncachable [ 0.000000] E0000-EFFFF write-through [ 0.000000] F0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask F80000000 write-back [ 0.000000] 1 base 07F800000 mask FFF800000 uncachable [ 0.000000] 2 disabled [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] PAT not supported by CPU. [ 0.000000] found SMP MP-table at [c00ff780] ff780 [ 0.000000] Scanning 0 areas for low memory corruption [ 0.000000] initial memory mapped : 0 - 01c00000 [ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000 [ 0.000000] 0000000000 - 0000400000 page 4k [ 0.000000] 0000400000 - 0037400000 page 2M [ 0.000000] 0037400000 - 00377fe000 page 4k [ 0.000000] kernel direct mapping tables up to 377fe000 @ 1bfb000-1c00000 [ 0.000000] RAMDISK: 36738000 - 37394000 [ 0.000000] Reserving 64MB of memory at 448MB for crashkernel (System RAM: 2039MB) [ 0.000000] ACPI: RSDP 000fbe60 00014 (v00 ACPIAM) [ 0.000000] ACPI: RSDT 7f780000 00034 (v01 A M I OEMRSDT 05000804 MSFT 00000097) [ 0.000000] ACPI: FACP 7f780200 00081 (v01 A M I OEMFACP 05000804 MSFT 00000097) [ 0.000000] ACPI: DSDT 7f780400 05F61 (v01 A0797 A0797000 00000000 INTL 20051117) [ 0.000000] ACPI: FACS 7f790000 00040 [ 0.000000] ACPI: APIC 7f780390 00068 (v01 A M I OEMAPIC 05000804 MSFT 00000097) [ 0.000000] ACPI: OEMB 7f790040 00046 (v01 A M I AMI_OEM 05000804 MSFT 00000097) [ 0.000000] ACPI: MCFG 7f786370 0003C (v01 A M I OEMMCFG 05000804 MSFT 00000097) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] 1151MB HIGHMEM available. [ 0.000000] 887MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 377fe000 [ 0.000000] low ram: 0 - 377fe000 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x000377fe [ 0.000000] HighMem 0x000377fe -> 0x0007f780 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x0007f780 [ 0.000000] On node 0 totalpages: 521999 [ 0.000000] free_area_init_node: node 0, pgdat c1795800, node_mem_map f5748200 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3951 pages, LIFO batch:0 [ 0.000000] Normal zone: 1744 pages used for memmap [ 0.000000] Normal zone: 221486 pages, LIFO batch:31 [ 0.000000] HighMem zone: 2304 pages used for memmap [ 0.000000] HighMem zone: 292482 pages, LIFO batch:31 [ 0.000000] Using APIC driver default [ 0.000000] ACPI: PM-Timer IO Port: 0x808 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] SMP: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e4000 [ 0.000000] PM: Registered nosave memory: 00000000000e4000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at 7f800000 (gap: 7f800000:7f600000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:1 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 13 pages/cpu @f5000000 s28800 r0 d24448 u4194304 [ 0.000000] pcpu-alloc: s28800 r0 d24448 u4194304 alloc=1*4194304 [ 0.000000] pcpu-alloc: [0] 0 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 517919 [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.38-999-generic root=UUID=3893e3fd-c2b4-40ec-9810-5a9aba86cbd4 ro crashkernel=384M-2G:64M,2G-:128M quiet splash vt.handoff=7 [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Initializing CPU#0 [ 0.000000] allocated 10441920 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Initializing HighMem for node 0 (000377fe:0007f780) [ 0.000000] Memory: 1972872k/2088448k available (5198k kernel code, 115124k reserved, 2600k data, 784k init, 1179144k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff16000 - 0xfffff000 ( 932 kB) [ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB) [ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) [ 0.000000] .init : 0xc179e000 - 0xc1862000 ( 784 kB) [ 0.000000] .data : 0xc151396f - 0xc179dd00 (2600 kB) [ 0.000000] .text : 0xc1000000 - 0xc151396f (5198 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=15, HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] NR_IRQS:2304 nr_irqs:256 16 [ 0.000000] CPU 0 irqstacks, hard=f4006000 soft=f4008000 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 630.056 MHz processor. [ 0.004009] Calibrating delay loop (skipped), value calculated using timer frequency.. 1260.11 BogoMIPS (lpj=2520224) [ 0.004026] pid_max: default: 32768 minimum: 301 [ 0.004107] Security Framework initialized [ 0.008091] AppArmor: AppArmor initialized [ 0.008267] Mount-cache hash table entries: 512 [ 0.008695] /proc/device-tree: can't find root [ 0.008737] Initializing cgroup subsys ns [ 0.008748] ns_cgroup deprecated: consider using the 'clone_children' flag without the ns_cgroup. [ 0.008759] Initializing cgroup subsys cpuacct [ 0.008775] Initializing cgroup subsys memory [ 0.008811] Initializing cgroup subsys devices [ 0.008819] Initializing cgroup subsys freezer [ 0.008827] Initializing cgroup subsys net_cls [ 0.008835] Initializing cgroup subsys blkio [ 0.008962] mce: CPU supports 5 MCE banks [ 0.008993] CPU0: Thermal monitoring enabled (TM1) [ 0.011556] SMP alternatives: switching to UP code [ 0.039671] Freeing SMP alternatives: 20k freed [ 0.039702] ACPI: Core revision 20110112 [ 0.052047] ftrace: allocating 27296 entries in 54 pages [ 0.060179] Enabling APIC mode: Flat. Using 1 I/O APICs [ 0.060577] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.101008] CPU0: Intel(R) Celeron(R) M processor 900MHz stepping 06 [ 0.104005] Performance Events: p6 PMU driver. [ 0.104005] ... version: 0 [ 0.104005] ... bit width: 32 [ 0.104005] ... generic registers: 2 [ 0.104005] ... value mask: 00000000ffffffff [ 0.104005] ... max period: 000000007fffffff [ 0.104005] ... fixed-purpose events: 0 [ 0.104005] ... event mask: 0000000000000003 [ 0.104005] Brought up 1 CPUs [ 0.104005] Total of 1 processors activated (1260.11 BogoMIPS). [ 0.104005] devtmpfs: initialized [ 0.105940] print_constraints: dummy: [ 0.105989] Time: 3:46:17 Date: 03/02/11 [ 0.106130] NET: Registered protocol family 16 [ 0.106504] EISA bus registered [ 0.106532] ACPI: bus type pci registered [ 0.106775] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.106787] PCI: not using MMCONFIG [ 0.107077] PCI: PCI BIOS revision 3.00 entry at 0xf0031, last bus=5 [ 0.107085] PCI: Using configuration type 1 for base access [ 0.110809] bio: create slab at 0 [ 0.114801] ACPI: EC: Look up EC in DSDT [ 0.118642] ACPI: Executed 1 blocks of module-level executable AML code [ 0.133681] ACPI: Interpreter enabled [ 0.133710] ACPI: (supports S0 S3 S4 S5) [ 0.133785] ACPI: Using IOAPIC for interrupt routing [ 0.133876] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.139350] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in ACPI motherboard resources [ 0.139360] PCI: Using MMCONFIG for extended config space [ 0.154674] ACPI: EC: GPE = 0x18, I/O: command/status = 0x66, data = 0x62 [ 0.155124] ACPI: No dock devices found. [ 0.155132] HEST: Table not found. [ 0.155144] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.155444] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.156098] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 0.156109] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 0.156119] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.156129] pci_root PNP0A08:00: host bridge window [mem 0x000d0000-0x000dffff] [ 0.156139] pci_root PNP0A08:00: host bridge window [mem 0x7f810000-0xffffffff] [ 0.156182] pci 0000:00:00.0: [8086:2590] type 0 class 0x000600 [ 0.156287] pci 0000:00:02.0: [8086:2592] type 0 class 0x000300 [ 0.156314] pci 0000:00:02.0: reg 10: [mem 0xf7f00000-0xf7f7ffff] [ 0.156332] pci 0000:00:02.0: reg 14: [io 0xec00-0xec07] [ 0.156350] pci 0000:00:02.0: reg 18: [mem 0xd0000000-0xdfffffff pref] [ 0.156368] pci 0000:00:02.0: reg 1c: [mem 0xf7ec0000-0xf7efffff] [ 0.156443] pci 0000:00:02.1: [8086:2792] type 0 class 0x000380 [ 0.156467] pci 0000:00:02.1: reg 10: [mem 0xf7f80000-0xf7ffffff] [ 0.156636] pci 0000:00:1b.0: [8086:2668] type 0 class 0x000403 [ 0.156670] pci 0000:00:1b.0: reg 10: [mem 0xf7eb8000-0xf7ebbfff 64bit] [ 0.156770] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.156782] pci 0000:00:1b.0: PME# disabled [ 0.156824] pci 0000:00:1c.0: [8086:2660] type 1 class 0x000604 [ 0.156926] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.156938] pci 0000:00:1c.0: PME# disabled [ 0.156985] pci 0000:00:1c.1: [8086:2662] type 1 class 0x000604 [ 0.157087] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 0.157098] pci 0000:00:1c.1: PME# disabled [ 0.157141] pci 0000:00:1c.2: [8086:2664] type 1 class 0x000604 [ 0.157243] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 0.157254] pci 0000:00:1c.2: PME# disabled [ 0.157301] pci 0000:00:1d.0: [8086:2658] type 0 class 0x000c03 [ 0.157374] pci 0000:00:1d.0: reg 20: [io 0xe400-0xe41f] [ 0.157431] pci 0000:00:1d.1: [8086:2659] type 0 class 0x000c03 [ 0.157504] pci 0000:00:1d.1: reg 20: [io 0xe480-0xe49f] [ 0.157561] pci 0000:00:1d.2: [8086:265a] type 0 class 0x000c03 [ 0.157633] pci 0000:00:1d.2: reg 20: [io 0xe800-0xe81f] [ 0.157690] pci 0000:00:1d.3: [8086:265b] type 0 class 0x000c03 [ 0.157762] pci 0000:00:1d.3: reg 20: [io 0xe880-0xe89f] [ 0.157833] pci 0000:00:1d.7: [8086:265c] type 0 class 0x000c03 [ 0.157870] pci 0000:00:1d.7: reg 10: [mem 0xf7eb7c00-0xf7eb7fff] [ 0.157986] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.157998] pci 0000:00:1d.7: PME# disabled [ 0.158034] pci 0000:00:1e.0: [8086:2448] type 1 class 0x000604 [ 0.158135] pci 0000:00:1f.0: [8086:2641] type 0 class 0x000601 [ 0.158268] pci 0000:00:1f.0: Force enabled HPET at 0xfed00000 [ 0.158285] pci 0000:00:1f.0: quirk: [io 0x0800-0x087f] claimed by ICH6 ACPI/GPIO/TCO [ 0.158297] pci 0000:00:1f.0: quirk: [io 0x0480-0x04bf] claimed by ICH6 GPIO [ 0.158309] pci 0000:00:1f.0: LPC Generic IO decode 1 PIO at 0380-03ff [ 0.158350] pci 0000:00:1f.2: [8086:2653] type 0 class 0x000101 [ 0.158380] pci 0000:00:1f.2: reg 10: [io 0x0000-0x0007] [ 0.158399] pci 0000:00:1f.2: reg 14: [io 0x0000-0x0003] [ 0.158418] pci 0000:00:1f.2: reg 18: [io 0x0000-0x0007] [ 0.158438] pci 0000:00:1f.2: reg 1c: [io 0x0000-0x0003] [ 0.158457] pci 0000:00:1f.2: reg 20: [io 0xffa0-0xffaf] [ 0.158512] pci 0000:00:1f.2: PME# supported from D3hot [ 0.158523] pci 0000:00:1f.2: PME# disabled [ 0.158552] pci 0000:00:1f.3: [8086:266a] type 0 class 0x000c05 [ 0.158635] pci 0000:00:1f.3: reg 20: [io 0x0400-0x041f] [ 0.158763] pci 0000:00:1c.0: PCI bridge to [bus 04-04] [ 0.158775] pci 0000:00:1c.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.158788] pci 0000:00:1c.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.158805] pci 0000:00:1c.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.158909] pci 0000:03:00.0: [1969:2048] type 0 class 0x000200 [ 0.158951] pci 0000:03:00.0: reg 10: [mem 0xfbfc0000-0xfbffffff 64bit] [ 0.159035] pci 0000:03:00.0: reg 30: [mem 0xfbfa0000-0xfbfbffff pref] [ 0.159094] pci 0000:03:00.0: PME# supported from D3hot D3cold [ 0.159107] pci 0000:03:00.0: PME# disabled [ 0.159141] pci 0000:03:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 0.159168] pci 0000:00:1c.1: PCI bridge to [bus 03-03] [ 0.159179] pci 0000:00:1c.1: bridge window [io 0xf000-0x0000] (disabled) [ 0.159192] pci 0000:00:1c.1: bridge window [mem 0xfbf00000-0xfbffffff] [ 0.159207] pci 0000:00:1c.1: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.159312] pci 0000:01:00.0: [168c:001c] type 0 class 0x000200 [ 0.159352] pci 0000:01:00.0: reg 10: [mem 0xfbef0000-0xfbefffff 64bit] [ 0.159515] pci 0000:01:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 0.159539] pci 0000:00:1c.2: PCI bridge to [bus 01-02] [ 0.159550] pci 0000:00:1c.2: bridge window [io 0xf000-0x0000] (disabled) [ 0.159563] pci 0000:00:1c.2: bridge window [mem 0xf8000000-0xfbefffff] [ 0.159579] pci 0000:00:1c.2: bridge window [mem 0xf0000000-0xf6ffffff 64bit pref] [ 0.159686] pci 0000:00:1e.0: PCI bridge to [bus 05-05] (subtractive decode) [ 0.159698] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.159711] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.159726] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.159737] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.159747] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.159757] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.159768] pci 0000:00:1e.0: bridge window [mem 0x000d0000-0x000dffff] (subtractive decode) [ 0.159778] pci 0000:00:1e.0: bridge window [mem 0x7f810000-0xffffffff] (subtractive decode) [ 0.159816] pci_bus 0000:00: on NUMA node 0 [ 0.159831] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.160338] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P3._PRT] [ 0.160444] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P5._PRT] [ 0.160532] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P6._PRT] [ 0.160820] pci0000:00: Requesting ACPI _OSC control (0x1d) [ 0.174929] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 *5 6 7 10 11 12 14 15) [ 0.175115] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 10 *11 12 14 15) [ 0.175292] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 7 *10 11 12 14 15) [ 0.175480] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 *7 10 11 12 14 15) [ 0.175657] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.175836] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.176032] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.176217] ACPI: PCI Interrupt Link [LNKH] (IRQs *3 4 5 6 7 10 11 12 14 15) [ 0.176574] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none [ 0.176608] vgaarb: loaded [ 0.177407] SCSI subsystem initialized [ 0.177605] libata version 3.00 loaded. [ 0.177784] usbcore: registered new interface driver usbfs [ 0.177828] usbcore: registered new interface driver hub [ 0.177929] usbcore: registered new device driver usb [ 0.178343] wmi: Mapper loaded [ 0.178350] PCI: Using ACPI for IRQ routing [ 0.178423] PCI: pci_cache_line_size set to 64 bytes [ 0.178577] reserve RAM buffer: 000000000009fc00 - 000000000009ffff [ 0.178587] reserve RAM buffer: 000000007f780000 - 000000007fffffff [ 0.178963] NetLabel: Initializing [ 0.178971] NetLabel: domain hash size = 128 [ 0.178977] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.179013] NetLabel: unlabeled traffic allowed by default [ 0.179499] hpet clockevent registered [ 0.179509] HPET: 3 timers in total, 0 timers will be used for per-cpu timer [ 0.179528] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 [ 0.179544] hpet0: 3 comparators, 64-bit 14.318180 MHz counter [ 0.184162] Switching to clocksource hpet [ 0.187892] Switched to NOHz mode on CPU #0 [ 0.211200] AppArmor: AppArmor Filesystem Enabled [ 0.211306] pnp: PnP ACPI init [ 0.211373] ACPI: bus type pnp registered [ 0.211773] pnp 00:00: [bus 00-ff] [ 0.211785] pnp 00:00: [io 0x0cf8-0x0cff] [ 0.211794] pnp 00:00: [io 0x0000-0x0cf7 window] [ 0.211803] pnp 00:00: [io 0x0d00-0xffff window] [ 0.211813] pnp 00:00: [mem 0x000a0000-0x000bffff window] [ 0.211822] pnp 00:00: [mem 0x000d0000-0x000dffff window] [ 0.211832] pnp 00:00: [mem 0x7f810000-0xffffffff window] [ 0.212100] pnp 00:00: Plug and Play ACPI device, IDs PNP0a08 PNP0a03 (active) [ 0.212143] pnp 00:01: [mem 0xfed13000-0xfed19fff] [ 0.212326] system 00:01: [mem 0xfed13000-0xfed19fff] has been reserved [ 0.212340] system 00:01: Plug and Play ACPI device, IDs PNP0c01 (active) [ 0.212429] pnp 00:02: [dma 4] [ 0.212437] pnp 00:02: [io 0x0000-0x000f] [ 0.212445] pnp 00:02: [io 0x0081-0x0083] [ 0.212453] pnp 00:02: [io 0x0087] [ 0.212460] pnp 00:02: [io 0x0089-0x008b] [ 0.212468] pnp 00:02: [io 0x008f] [ 0.212476] pnp 00:02: [io 0x00c0-0x00df] [ 0.212599] pnp 00:02: Plug and Play ACPI device, IDs PNP0200 (active) [ 0.212641] pnp 00:03: [io 0x0070-0x0071] [ 0.212673] pnp 00:03: [irq 8] [ 0.212775] pnp 00:03: Plug and Play ACPI device, IDs PNP0b00 (active) [ 0.212903] pnp 00:04: [io 0x0060] [ 0.212911] pnp 00:04: [io 0x0064] [ 0.212928] pnp 00:04: [irq 1] [ 0.213035] pnp 00:04: Plug and Play ACPI device, IDs PNP0303 PNP030b (active) [ 0.213232] pnp 00:05: [irq 12] [ 0.213353] pnp 00:05: Plug and Play ACPI device, IDs SYN0a00 SYN0a01 SYN0a04 SYN0002 PNP0f13 (active) [ 0.213390] pnp 00:06: [io 0x0061] [ 0.213494] pnp 00:06: Plug and Play ACPI device, IDs PNP0800 (active) [ 0.213530] pnp 00:07: [io 0x00f0-0x00ff] [ 0.213547] pnp 00:07: [irq 13] [ 0.213650] pnp 00:07: Plug and Play ACPI device, IDs PNP0c04 (active) [ 0.214003] pnp 00:08: [io 0x0010-0x001f] [ 0.214012] pnp 00:08: [io 0x0022-0x003f] [ 0.214020] pnp 00:08: [io 0x0044-0x005f] [ 0.214027] pnp 00:08: [io 0x0063] [ 0.214035] pnp 00:08: [io 0x0067-0x006f] [ 0.214043] pnp 00:08: [io 0x0072-0x007f] [ 0.214051] pnp 00:08: [io 0x0080] [ 0.214058] pnp 00:08: [io 0x0084-0x0086] [ 0.214066] pnp 00:08: [io 0x0088] [ 0.214073] pnp 00:08: [io 0x008c-0x008e] [ 0.214081] pnp 00:08: [io 0x0090-0x009f] [ 0.214089] pnp 00:08: [io 0x00a2-0x00bf] [ 0.214097] pnp 00:08: [io 0x00e0-0x00ef] [ 0.214105] pnp 00:08: [io 0x0380-0x0383] [ 0.214113] pnp 00:08: [io 0x04d0-0x04d1] [ 0.214121] pnp 00:08: [io 0x0800-0x087f] [ 0.214129] pnp 00:08: [io 0x0000-0xffffffff disabled] [ 0.214138] pnp 00:08: [io 0x0480-0x04bf] [ 0.214146] pnp 00:08: [mem 0xfed1c000-0xfed1ffff] [ 0.214155] pnp 00:08: [mem 0xfed20000-0xfed8ffff] [ 0.214163] pnp 00:08: [mem 0xfff00000-0xffffffff] [ 0.214410] system 00:08: [io 0x0380-0x0383] has been reserved [ 0.214421] system 00:08: [io 0x04d0-0x04d1] has been reserved [ 0.214432] system 00:08: [io 0x0800-0x087f] has been reserved [ 0.214443] system 00:08: [io 0x0480-0x04bf] has been reserved [ 0.214455] system 00:08: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.214466] system 00:08: [mem 0xfed20000-0xfed8ffff] has been reserved [ 0.214478] system 00:08: [mem 0xfff00000-0xffffffff] could not be reserved [ 0.214492] system 00:08: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.214844] pnp 00:09: [mem 0xfec00000-0xfec00fff] [ 0.214854] pnp 00:09: [mem 0xfee00000-0xfee00fff] [ 0.215015] system 00:09: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.215027] system 00:09: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.215040] system 00:09: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.215166] pnp 00:0a: [mem 0xe0000000-0xefffffff] [ 0.215323] system 00:0a: [mem 0xe0000000-0xefffffff] has been reserved [ 0.215336] system 00:0a: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.215575] pnp 00:0b: [mem 0xe0000000-0xefffffff] [ 0.215765] system 00:0b: [mem 0xe0000000-0xefffffff] has been reserved [ 0.215778] system 00:0b: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.216234] pnp 00:0c: [mem 0x00000000-0x0009ffff] [ 0.216244] pnp 00:0c: [mem 0x000c0000-0x000cffff] [ 0.216252] pnp 00:0c: [mem 0x000e0000-0x000fffff] [ 0.216261] pnp 00:0c: [mem 0x00100000-0x7f7fffff] [ 0.216279] pnp 00:0c: [mem 0x00000000-0xffffffff disabled] [ 0.216484] system 00:0c: [mem 0x00000000-0x0009ffff] could not be reserved [ 0.216495] system 00:0c: [mem 0x000c0000-0x000cffff] could not be reserved [ 0.216507] system 00:0c: [mem 0x000e0000-0x000fffff] could not be reserved [ 0.216518] system 00:0c: [mem 0x00100000-0x7f7fffff] could not be reserved [ 0.216531] system 00:0c: Plug and Play ACPI device, IDs PNP0c01 (active) [ 0.217063] pnp: PnP ACPI: found 13 devices [ 0.217070] ACPI: ACPI bus type pnp unregistered [ 0.217083] PnPBIOS: Disabled by ACPI PNP [ 0.259745] pci 0000:00:1c.0: BAR 14: assigned [mem 0x7f900000-0x7fafffff] [ 0.259765] pci 0000:00:1c.0: BAR 15: assigned [mem 0x7fb00000-0x7fcfffff 64bit pref] [ 0.259781] pci 0000:00:1c.1: BAR 15: assigned [mem 0x7fd00000-0x7fefffff 64bit pref] [ 0.259795] pci 0000:00:1c.0: BAR 13: assigned [io 0x1000-0x1fff] [ 0.259807] pci 0000:00:1c.1: BAR 13: assigned [io 0x2000-0x2fff] [ 0.259820] pci 0000:00:1c.2: BAR 13: assigned [io 0x3000-0x3fff] [ 0.259830] pci 0000:00:1c.0: PCI bridge to [bus 04-04] [ 0.259840] pci 0000:00:1c.0: bridge window [io 0x1000-0x1fff] [ 0.259853] pci 0000:00:1c.0: bridge window [mem 0x7f900000-0x7fafffff] [ 0.259866] pci 0000:00:1c.0: bridge window [mem 0x7fb00000-0x7fcfffff 64bit pref] [ 0.259882] pci 0000:00:1c.1: PCI bridge to [bus 03-03] [ 0.259892] pci 0000:00:1c.1: bridge window [io 0x2000-0x2fff] [ 0.259906] pci 0000:00:1c.1: bridge window [mem 0xfbf00000-0xfbffffff] [ 0.259918] pci 0000:00:1c.1: bridge window [mem 0x7fd00000-0x7fefffff 64bit pref] [ 0.259934] pci 0000:00:1c.2: PCI bridge to [bus 01-02] [ 0.259944] pci 0000:00:1c.2: bridge window [io 0x3000-0x3fff] [ 0.259957] pci 0000:00:1c.2: bridge window [mem 0xf8000000-0xfbefffff] [ 0.259970] pci 0000:00:1c.2: bridge window [mem 0xf0000000-0xf6ffffff 64bit pref] [ 0.259986] pci 0000:00:1e.0: PCI bridge to [bus 05-05] [ 0.259993] pci 0000:00:1e.0: bridge window [io disabled] [ 0.260020] pci 0000:00:1e.0: bridge window [mem disabled] [ 0.260031] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.260057] pci 0000:00:1c.0: enabling device (0104 -> 0107) [ 0.260105] pci 0000:00:1c.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.260120] pci 0000:00:1c.0: setting latency timer to 64 [ 0.260136] pci 0000:00:1c.1: enabling device (0106 -> 0107) [ 0.260156] pci 0000:00:1c.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 0.260168] pci 0000:00:1c.1: setting latency timer to 64 [ 0.260184] pci 0000:00:1c.2: enabling device (0106 -> 0107) [ 0.260204] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.260215] pci 0000:00:1c.2: setting latency timer to 64 [ 0.260233] pci 0000:00:1e.0: setting latency timer to 64 [ 0.260245] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 0.260255] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 0.260264] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.260274] pci_bus 0000:00: resource 7 [mem 0x000d0000-0x000dffff] [ 0.260283] pci_bus 0000:00: resource 8 [mem 0x7f810000-0xffffffff] [ 0.260293] pci_bus 0000:04: resource 0 [io 0x1000-0x1fff] [ 0.260302] pci_bus 0000:04: resource 1 [mem 0x7f900000-0x7fafffff] [ 0.260312] pci_bus 0000:04: resource 2 [mem 0x7fb00000-0x7fcfffff 64bit pref] [ 0.260322] pci_bus 0000:03: resource 0 [io 0x2000-0x2fff] [ 0.260331] pci_bus 0000:03: resource 1 [mem 0xfbf00000-0xfbffffff] [ 0.260341] pci_bus 0000:03: resource 2 [mem 0x7fd00000-0x7fefffff 64bit pref] [ 0.260351] pci_bus 0000:01: resource 0 [io 0x3000-0x3fff] [ 0.260360] pci_bus 0000:01: resource 1 [mem 0xf8000000-0xfbefffff] [ 0.260370] pci_bus 0000:01: resource 2 [mem 0xf0000000-0xf6ffffff 64bit pref] [ 0.260381] pci_bus 0000:05: resource 4 [io 0x0000-0x0cf7] [ 0.260390] pci_bus 0000:05: resource 5 [io 0x0d00-0xffff] [ 0.260399] pci_bus 0000:05: resource 6 [mem 0x000a0000-0x000bffff] [ 0.260409] pci_bus 0000:05: resource 7 [mem 0x000d0000-0x000dffff] [ 0.260418] pci_bus 0000:05: resource 8 [mem 0x7f810000-0xffffffff] [ 0.260535] NET: Registered protocol family 2 [ 0.260758] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.261556] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.263622] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.264776] TCP: Hash tables configured (established 131072 bind 65536) [ 0.264788] TCP reno registered [ 0.264809] UDP hash table entries: 512 (order: 2, 16384 bytes) [ 0.264855] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) [ 0.265208] NET: Registered protocol family 1 [ 0.265269] pci 0000:00:02.0: Boot video device [ 0.265473] PCI: CLS 16 bytes, default 64 [ 0.265656] Trying to unpack rootfs image as initramfs... [ 1.470673] Freeing initrd memory: 12656k freed [ 1.494624] cpufreq-nforce2: No nForce2 chipset. [ 1.494755] Scanning for low memory corruption every 60 seconds [ 1.495237] audit: initializing netlink socket (disabled) [ 1.495311] type=2000 audit(1299037577.488:1): initialized [ 1.536743] highmem bounce pool size: 64 pages [ 1.536763] HugeTLB registered 4 MB page size, pre-allocated 0 pages [ 1.543629] VFS: Disk quotas dquot_6.5.2 [ 1.543853] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 1.546485] fuse init (API version 7.16) [ 1.546886] msgmni has been set to 1575 [ 1.547769] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 1.547782] io scheduler noop registered [ 1.547789] io scheduler deadline registered [ 1.547851] io scheduler cfq registered (default) [ 1.548275] pcieport 0000:00:1c.0: setting latency timer to 64 [ 1.548369] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 1.548527] pcieport 0000:00:1c.1: setting latency timer to 64 [ 1.548600] pcieport 0000:00:1c.1: irq 41 for MSI/MSI-X [ 1.548747] pcieport 0000:00:1c.2: setting latency timer to 64 [ 1.548820] pcieport 0000:00:1c.2: irq 42 for MSI/MSI-X [ 1.549072] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 1.549169] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 1.549645] vesafb: framebuffer at 0xd0000000, mapped to 0xf8080000, using 1216k, total 1216k [ 1.549656] vesafb: mode is 640x480x32, linelength=2560, pages=0 [ 1.549662] vesafb: scrolling: redraw [ 1.549673] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0 [ 1.576809] Console: switching to colour frame buffer device 80x30 [ 1.603610] fb0: VESA VGA frame buffer device [ 1.603961] ACPI: Deprecated procfs I/F for AC is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared [ 1.604227] ACPI: AC Adapter [AC0] (on-line) [ 1.604641] input: Lid Switch as /devices/LNXSYSTM:00/device:00/PNP0C0D:00/input/input0 [ 1.609028] ACPI: Lid Switch [LID] [ 1.609221] input: Sleep Button as /devices/LNXSYSTM:00/device:00/PNP0C0E:00/input/input1 [ 1.609239] ACPI: Sleep Button [SLPB] [ 1.609416] input: Power Button as /devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input2 [ 1.609429] ACPI: Power Button [PWRB] [ 1.609601] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3 [ 1.609614] ACPI: Power Button [PWRF] [ 1.610097] ACPI: acpi_idle registered with cpuidle [ 1.610183] Marking TSC unstable due to TSC halts in idle [ 1.621903] thermal LNXTHERM:00: registered as thermal_zone0 [ 1.621914] ACPI: Thermal Zone [TZ00] (54 C) [ 1.622168] ERST: Table is not found! [ 1.622230] isapnp: Scanning for PnP cards... [ 1.939633] isapnp: No Plug & Play device found [ 1.947158] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled [ 1.952601] Linux agpgart interface v0.103 [ 1.952920] agpgart-intel 0000:00:00.0: Intel 915GM Chipset [ 1.953063] agpgart-intel 0000:00:00.0: detected gtt size: 262144K total, 262144K mappable [ 1.953334] agpgart-intel 0000:00:00.0: detected 8192K stolen memory [ 1.953638] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xd0000000 [ 1.962690] brd: module loaded [ 1.969012] loop: module loaded [ 1.969384] i2c-core: driver [adp5520] using legacy suspend method [ 1.969393] i2c-core: driver [adp5520] using legacy resume method [ 1.969761] ata_piix 0000:00:1f.2: version 2.13 [ 1.969837] ata_piix 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.969853] ata_piix 0000:00:1f.2: MAP [ P0 P2 IDE IDE ] [ 1.969966] ata_piix 0000:00:1f.2: setting latency timer to 64 [ 1.976049] scsi0 : ata_piix [ 1.976426] scsi1 : ata_piix [ 1.982598] ata1: SATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0xffa0 irq 14 [ 1.982610] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0xffa8 irq 15 [ 1.984713] Fixed MDIO Bus: probed [ 1.984878] PPP generic driver version 2.4.2 [ 1.985095] tun: Universal TUN/TAP device driver, 1.6 [ 1.985103] tun: (C) 1999-2004 Max Krasnyansky [ 1.985472] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 1.985573] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 1.985618] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 1.985628] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 1.985812] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 1 [ 1.985901] ehci_hcd 0000:00:1d.7: debug port 1 [ 1.989802] ehci_hcd 0000:00:1d.7: cache line size of 16 is not supported [ 1.989937] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xf7eb7c00 [ 2.004039] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 2.004526] hub 1-0:1.0: USB hub found [ 2.004544] hub 1-0:1.0: 8 ports detected [ 2.004820] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 2.004873] uhci_hcd: USB Universal Host Controller Interface driver [ 2.004994] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 2.005015] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 2.005026] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 2.005192] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2 [ 2.005250] uhci_hcd 0000:00:1d.0: irq 23, io base 0x0000e400 [ 2.005691] hub 2-0:1.0: USB hub found [ 2.005707] hub 2-0:1.0: 2 ports detected [ 2.005922] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 2.005941] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 2.005951] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 2.006096] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 3 [ 2.006178] uhci_hcd 0000:00:1d.1: irq 19, io base 0x0000e480 [ 2.006621] hub 3-0:1.0: USB hub found [ 2.006636] hub 3-0:1.0: 2 ports detected [ 2.006847] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 2.006870] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 2.006880] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 2.007053] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 4 [ 2.007131] uhci_hcd 0000:00:1d.2: irq 18, io base 0x0000e800 [ 2.007573] hub 4-0:1.0: USB hub found [ 2.007588] hub 4-0:1.0: 2 ports detected [ 2.007803] uhci_hcd 0000:00:1d.3: PCI INT D -> GSI 16 (level, low) -> IRQ 16 [ 2.007821] uhci_hcd 0000:00:1d.3: setting latency timer to 64 [ 2.007831] uhci_hcd 0000:00:1d.3: UHCI Host Controller [ 2.007994] uhci_hcd 0000:00:1d.3: new USB bus registered, assigned bus number 5 [ 2.012106] uhci_hcd 0000:00:1d.3: irq 16, io base 0x0000e880 [ 2.012603] hub 5-0:1.0: USB hub found [ 2.012619] hub 5-0:1.0: 2 ports detected [ 2.013103] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 2.039734] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 2.039759] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 2.040316] mousedev: PS/2 mouse device common for all mice [ 2.042185] rtc_cmos 00:03: RTC can wake from S4 [ 2.042364] rtc_cmos 00:03: rtc core: registered rtc_cmos as rtc0 [ 2.042416] rtc0: alarms up to one month, 114 bytes nvram, hpet irqs [ 2.042838] device-mapper: uevent: version 1.0.3 [ 2.043159] device-mapper: ioctl: 4.19.1-ioctl (2011-01-07) initialised: dm-devel@redhat.com [ 2.043387] device-mapper: multipath: version 1.2.0 loaded [ 2.043397] device-mapper: multipath round-robin: version 1.0.0 loaded [ 2.043693] EISA: Probing bus 0 at eisa.0 [ 2.043703] EISA: Cannot allocate resource for mainboard [ 2.043711] Cannot allocate resource for EISA slot 1 [ 2.043718] Cannot allocate resource for EISA slot 2 [ 2.043725] Cannot allocate resource for EISA slot 3 [ 2.043732] Cannot allocate resource for EISA slot 4 [ 2.043739] Cannot allocate resource for EISA slot 5 [ 2.043746] Cannot allocate resource for EISA slot 6 [ 2.043753] Cannot allocate resource for EISA slot 7 [ 2.043760] Cannot allocate resource for EISA slot 8 [ 2.043767] EISA: Detected 0 cards. [ 2.044105] cpuidle: using governor ladder [ 2.044293] cpuidle: using governor menu [ 2.045305] TCP cubic registered [ 2.045872] NET: Registered protocol family 10 [ 2.047887] NET: Registered protocol family 17 [ 2.047954] Registering the dns_resolver key type [ 2.048200] Using IPI No-Shortcut mode [ 2.048585] PM: Hibernation image not present or could not be loaded. [ 2.048633] registered taskstats version 1 [ 2.049175] Magic number: 3:680:764 [ 2.049259] event_source breakpoint: hash matches [ 2.049439] rtc_cmos 00:03: setting system clock to 2011-03-02 03:46:19 UTC (1299037579) [ 2.049451] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 2.049457] EDD information not available. [ 2.072834] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4 [ 2.152396] ata2.00: CFA: SILICONMOTION SM223AC, , max UDMA/66 [ 2.152407] ata2.00: 7815024 sectors, multi 0: LBA [ 2.168239] ata2.00: configured for UDMA/66 [ 2.308960] ACPI: Deprecated procfs I/F for battery is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared [ 2.308990] ACPI: Battery Slot [BAT0] (battery present) [ 2.309441] scsi 1:0:0:0: Direct-Access ATA SILICONMOTION SM n/a PQ: 0 ANSI: 5 [ 2.310051] sd 1:0:0:0: Attached scsi generic sg0 type 0 [ 2.310390] sd 1:0:0:0: [sda] 7815024 512-byte logical blocks: (4.00 GB/3.72 GiB) [ 2.310571] sd 1:0:0:0: [sda] Write Protect is off [ 2.310582] sd 1:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 2.310662] sd 1:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 2.312426] sda: sda1 [ 2.313134] sd 1:0:0:0: [sda] Attached SCSI disk [ 2.313236] Freeing unused kernel memory: 784k freed [ 2.314312] Write protecting the kernel text: 5200k [ 2.314444] Write protecting the kernel read-only data: 2208k [ 2.316140] usb 1-2: new high speed USB device using ehci_hcd and address 2 [ 2.395419] udev[62]: starting version 167 [ 2.732128] usb 1-3: new high speed USB device using ehci_hcd and address 3 [ 2.866656] hub 1-3:1.0: USB hub found [ 2.867022] hub 1-3:1.0: 4 ports detected [ 2.980144] usb 1-5: new high speed USB device using ehci_hcd and address 4 [ 3.072001] Atheros(R) L2 Ethernet Driver - version 2.2.3 [ 3.072110] Copyright (c) 2007 Atheros Corporation. [ 3.089809] atl2 0000:03:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 3.089841] atl2 0000:03:00.0: setting latency timer to 64 [ 3.224118] usb 1-8: new high speed USB device using ehci_hcd and address 5 [ 3.421110] usbcore: registered new interface driver uas [ 3.428545] usb 1-3.1: new low speed USB device using ehci_hcd and address 6 [ 3.457201] Initializing USB Mass Storage driver... [ 3.457547] scsi2 : usb-storage 1-2:1.0 [ 3.458283] scsi3 : usb-storage 1-5:1.0 [ 3.461111] usbcore: registered new interface driver usb-storage [ 3.461123] USB Mass Storage support registered. [ 3.724398] usb 1-3.2: new low speed USB device using ehci_hcd and address 7 [ 3.940299] input: Logitech USB-PS/2 Optical Mouse as /devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3.1/1-3.1:1.0/input/input5 [ 3.942533] generic-usb 0003:046D:C045.0001: input,hidraw0: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:1d.7-3.1/input0 [ 3.957047] input: Logitech Logitech USB Keyboard as /devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3.2/1-3.2:1.0/input/input6 [ 3.957838] generic-usb 0003:046D:C315.0002: input,hidraw1: USB HID v1.10 Keyboard [Logitech Logitech USB Keyboard] on usb-0000:00:1d.7-3.2/input0 [ 3.958543] usbcore: registered new interface driver usbhid [ 3.958553] usbhid: USB HID core driver [ 4.457216] scsi 2:0:0:0: Direct-Access Generic USB Disk 9.02 PQ: 0 ANSI: 2 [ 4.464922] sd 2:0:0:0: Attached scsi generic sg1 type 0 [ 4.465164] sd 2:0:0:0: [sdb] 234441648 512-byte logical blocks: (120 GB/111 GiB) [ 4.465997] scsi 3:0:0:0: Direct-Access USB2.0 CardReader SD0 0100 PQ: 0 ANSI: 0 [ 4.466050] sd 2:0:0:0: [sdb] Write Protect is off [ 4.466060] sd 2:0:0:0: [sdb] Mode Sense: 03 00 00 00 [ 4.466903] sd 2:0:0:0: [sdb] No Caching mode page present [ 4.467657] sd 2:0:0:0: [sdb] Assuming drive cache: write through [ 4.471040] sd 2:0:0:0: [sdb] No Caching mode page present [ 4.471793] sd 2:0:0:0: [sdb] Assuming drive cache: write through [ 4.475033] sd 3:0:0:0: Attached scsi generic sg2 type 0 [ 4.475315] sd 3:0:0:0: [sdc] Attached SCSI removable disk [ 4.575918] sdb: sdb1 sdb2 < sdb5 > [ 4.579038] sd 2:0:0:0: [sdb] No Caching mode page present [ 4.579793] sd 2:0:0:0: [sdb] Assuming drive cache: write through [ 4.580648] sd 2:0:0:0: [sdb] Attached SCSI disk [ 5.000633] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: (null) [ 27.187476] Adding 3070972k swap on /dev/sdb5. Priority:-1 extents:1 across:3070972k [ 27.389167] udev[294]: starting version 167 [ 27.583254] EXT4-fs (sdb1): re-mounted. Opts: errors=remount-ro [ 27.910704] lp: driver loaded but no devices found [ 29.093444] input: Video Bus as /devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:00/input/input7 [ 29.104906] ACPI: Video Device [VGA] (multi-head: yes rom: no post: no) [ 29.577188] eeepc_laptop: Eee PC Hotkey Driver [ 29.577205] eeepc_laptop: model 701 does not officially support setting cpu speed [ 29.577212] eeepc_laptop: cpufv disabled to avoid instability [ 29.577234] eeepc_laptop: Hotkey init flags 0x41 [ 29.578271] eeepc_laptop: TYPE (2000000) not reported by BIOS, enabling anyway [ 29.578284] eeepc_laptop: Get control methods supported: 0x2101711 [ 30.025704] input: Asus EeePC extra buttons as /devices/platform/eeepc/input/input8 [ 30.183886] intel_rng: FWH not detected [ 31.084615] type=1400 audit(1299037608.532:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient" pid=433 comm="apparmor_parser" [ 31.084877] type=1400 audit(1299037608.532:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=433 comm="apparmor_parser" [ 31.085101] type=1400 audit(1299037608.532:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=433 comm="apparmor_parser" [ 31.528602] Linux video capture interface: v2.00 [ 31.926261] atl2 0000:03:00.0: irq 43 for MSI/MSI-X [ 31.929230] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 32.940484] [drm] Initialized drm 1.1.0 20060810 [ 33.338694] Synaptics Touchpad, model: 1, fw: 6.3, id: 0x180b1, caps: 0xa04713/0x200000/0x0 [ 33.469778] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input9 [ 33.603855] uvcvideo: Found UVC 1.00 device (eb1a:2761) [ 33.686218] input: UVC Camera (eb1a:2761) as /devices/pci0000:00/0000:00:1d.7/usb1/1-8/1-8:1.0/input/input10 [ 33.714983] usbcore: registered new interface driver uvcvideo [ 33.714995] USB Video Class driver (v1.0.0) [ 34.035188] cfg80211: Calling CRDA to update world regulatory domain [ 34.045045] type=1400 audit(1299037611.492:5): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=499 comm="apparmor_parser" [ 34.045322] type=1400 audit(1299037611.492:6): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=499 comm="apparmor_parser" [ 34.045563] type=1400 audit(1299037611.492:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=499 comm="apparmor_parser" [ 35.025022] type=1400 audit(1299037612.472:8): apparmor="STATUS" operation="profile_load" name="/usr/share/gdm/guest-session/Xsession" pid=649 comm="apparmor_parser" [ 35.114119] cfg80211: World regulatory domain updated: [ 35.114134] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 35.114145] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 35.114156] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 35.114166] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 35.114176] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 35.114186] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 35.670068] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 35.670087] i915 0000:00:02.0: setting latency timer to 64 [ 35.699333] [drm] Supports vblank timestamp caching Rev 1 (10.10.2010). [ 35.699346] [drm] Driver supports precise vblank timestamp query. [ 35.779173] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=io+mem,decodes=io+mem:owns=io+mem [ 35.780799] [drm] initialized overlay support [ 35.850745] ath5k 0000:01:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 35.850772] ath5k 0000:01:00.0: setting latency timer to 64 [ 35.850878] ath5k 0000:01:00.0: registered as 'phy0' [ 36.475347] ath: EEPROM regdomain: 0x60 [ 36.475358] ath: EEPROM indicates we should expect a direct regpair map [ 36.475371] ath: Country alpha2 being used: 00 [ 36.475377] ath: Regpair used: 0x60 [ 36.475443] cfg80211: Updating information on frequency 2412 MHz for a 20 MHz width channel with regulatory rule: [ 36.475454] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 36.475463] cfg80211: Updating information on frequency 2417 MHz for a 20 MHz width channel with regulatory rule: [ 36.475474] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 36.475482] cfg80211: Updating information on frequency 2422 MHz for a 20 MHz width channel with regulatory rule: [ 36.475493] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 36.475501] cfg80211: Updating information on frequency 2427 MHz for a 20 MHz width channel with regulatory rule: [ 36.475512] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 36.475520] cfg80211: Updating information on frequency 2432 MHz for a 20 MHz width channel with regulatory rule: [ 36.475531] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 36.475539] cfg80211: Updating information on frequency 2437 MHz for a 20 MHz width channel with regulatory rule: [ 36.475550] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 36.475558] cfg80211: Updating information on frequency 2442 MHz for a 20 MHz width channel with regulatory rule: [ 36.475568] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 36.475577] cfg80211: Updating information on frequency 2447 MHz for a 20 MHz width channel with regulatory rule: [ 36.475587] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 36.475596] cfg80211: Updating information on frequency 2452 MHz for a 20 MHz width channel with regulatory rule: [ 36.475606] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 36.475615] cfg80211: Updating information on frequency 2457 MHz for a 20 MHz width channel with regulatory rule: [ 36.475625] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 36.475634] cfg80211: Updating information on frequency 2462 MHz for a 20 MHz width channel with regulatory rule: [ 36.475644] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 36.475653] cfg80211: Updating information on frequency 2467 MHz for a 20 MHz width channel with regulatory rule: [ 36.475663] cfg80211: 2457000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 36.475672] cfg80211: Updating information on frequency 2472 MHz for a 20 MHz width channel with regulatory rule: [ 36.475682] cfg80211: 2457000 KHz - 2482000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 36.475691] cfg80211: Updating information on frequency 2484 MHz for a 20 MHz width channel with regulatory rule: [ 36.475701] cfg80211: 2474000 KHz - 2494000 KHz @ KHz), (N/A mBi, 2000 mBm) [ 36.476245] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 36.744736] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht' [ 36.754021] Registered led device: ath5k-phy0::rx [ 36.754369] Registered led device: ath5k-phy0::tx [ 36.754408] ath5k phy0: Atheros AR2425 chip found (MAC: 0xe2, PHY: 0x70) [ 36.857216] checking generic (d0000000 130000) vs hw (d0000000 10000000) [ 36.857229] fb: conflicting fb hw usage inteldrmfb vs VESA VGA - removing generic driver [ 36.857305] Console: switching to colour dummy device 80x25 [ 36.900276] Console: switching to colour frame buffer device 100x30 [ 36.900308] fb0: inteldrmfb frame buffer device [ 36.900315] drm: registered panic notifier [ 36.900773] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 37.150803] ADDRCONF(NETDEV_UP): wlan0: link is not ready [ 37.353818] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 37.353942] HDA Intel 0000:00:1b.0: irq 44 for MSI/MSI-X [ 37.354009] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 37.556197] input: HDA Intel Mic as /devices/pci0000:00/0000:00:1b.0/sound/card0/input11 [ 37.560512] input: HDA Intel Headphone as /devices/pci0000:00/0000:00:1b.0/sound/card0/input12 [ 38.256281] type=1400 audit(1299037615.704:9): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=689 comm="apparmor_parser" [ 38.256554] type=1400 audit(1299037615.704:10): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=689 comm="apparmor_parser" [ 38.256779] type=1400 audit(1299037615.704:11): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=689 comm="apparmor_parser" [ 38.322891] ppdev: user-space parallel port driver [ 40.330385] BUG: unable to handle kernel NULL pointer dereference at 0000018e [ 40.330702] IP: [] fb_release+0x25/0x60 [ 40.330899] *pde = 00000000 [ 40.331014] Oops: 0000 [#1] SMP [ 40.331148] last sysfs file: /sys/devices/virtual/vtconsole/vtcon1/uevent [ 40.331395] Modules linked in: parport_pc ppdev snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep arc4 snd_pcm ath5k snd_seq_midi snd_rawmidi ath i915 snd_seq_midi_event mac80211 snd_seq joydev snd_timer snd_seq_device drm_kms_helper uvcvideo cfg80211 drm snd psmouse videodev serio_raw soundcore snd_page_alloc i2c_algo_bit eeepc_laptop video sparse_keymap lp parport usbhid hid usb_storage uas atl2 [ 40.332019] [ 40.332019] Pid: 246, comm: plymouthd Not tainted 2.6.38-999-generic #201103011141 ASUSTeK Computer INC. 701/701 [ 40.332019] EIP: 0060:[] EFLAGS: 00210286 CPU: 0 [ 40.332019] EIP is at fb_release+0x25/0x60 [ 40.332019] EAX: 00000186 EBX: f41f1800 ECX: c12aaf90 EDX: f6df6000 [ 40.332019] ESI: f41f1808 EDI: f0a64e40 EBP: f6df7f40 ESP: f6df7f38 [ 40.332019] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 40.332019] Process plymouthd (pid: 246, ti=f6df6000 task=f6e325e0 task.ti=f6df6000) [ 40.332019] Stack: [ 40.332019] f3e9e880 00000008 f6df7f74 c1127c39 00000001 00000000 00000000 f3e9e880 [ 40.332019] f41966c0 f43e83f0 f0a64e48 f43e83f0 f0a64e40 f6e03100 00000000 f6df7f7c [ 40.332019] c1127d7e f6df7f94 c112467c 0012d000 f6e03140 f6e03100 0000000c f6df7fac [ 40.332019] Call Trace: [ 40.332019] [] __fput+0x99/0x1c0 [ 40.332019] [] fput+0x1e/0x30 [ 40.332019] [] filp_close+0x4c/0x80 [ 40.332019] [] sys_close+0x6e/0xc0 [ 40.332019] [] sysenter_do_call+0x12/0x28 [ 40.332019] [] ? squash_the_stupid_serial_number+0xc0/0xe0 [ 40.332019] Code: b4 26 00 00 00 00 55 89 e5 83 ec 08 89 1c 24 89 74 24 04 3e 8d 74 26 00 8b 5a 74 8d 73 08 89 f0 e8 11 f9 25 00 8b 83 0c 03 00 00 <8b> 48 08 85 c9 74 0f ba 01 00 00 00 89 d8 ff d1 8b 83 0c 03 00 [ 40.332019] EIP: [] fb_release+0x25/0x60 SS:ESP 0068:f6df7f38 [ 40.332019] CR2: 000000000000018e [ 40.545790] ---[ end trace f375290bb91f4213 ]--- [ 43.639331] type=1400 audit(1299037621.084:12): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=844 comm="apparmor_parser" [ 43.648512] type=1400 audit(1299037621.096:13): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=844 comm="apparmor_parser" [ 55.775794] EXT4-fs (sdb1): re-mounted. Opts: errors=remount-ro,commit=0 [ 70.911738] wlan0: authenticate with 00:24:b2:97:4e:cc (try 1) [ 70.913279] wlan0: authenticated [ 70.913367] wlan0: associate with 00:24:b2:97:4e:cc (try 1) [ 70.915575] wlan0: RX AssocResp from 00:24:b2:97:4e:cc (capab=0x411 status=0 aid=1) [ 70.915588] wlan0: associated [ 70.918422] ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready [ 81.144077] wlan0: no IPv6 routers present [ 89.197190] type=1400 audit(1299037666.645:14): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince" pid=835 comm="apparmor_parser" [ 89.208293] type=1400 audit(1299037666.657:15): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-previewer" pid=835 comm="apparmor_parser" [ 89.214015] type=1400 audit(1299037666.661:16): apparmor="STATUS" operation="profile_load" name="/usr/bin/evince-thumbnailer" pid=835 comm="apparmor_parser" [ 92.736230] type=1400 audit(1299037670.183:17): apparmor="STATUS" operation="profile_replace" name="/usr/lib/cups/backend/cups-pdf" pid=1257 comm="apparmor_parser" [ 92.747868] type=1400 audit(1299037670.191:18): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/cupsd" pid=1257 comm="apparmor_parser" [ 93.922891] type=1400 audit(1299037671.366:19): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=1259 comm="apparmor_parser" Bug: 750767 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35-28-generic (buildd@allspice) (gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) ) #50-Ubuntu SMP Fri Mar 18 18:42:20 UTC 2011 (Ubuntu 2.6.35-28.50-generic 2.6.35.11) [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-2.6.35-28-generic root=UUID=c9a74a55-36db-4c67-8cdc-097c0cced3d8 ro PROFILE=internal [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) [ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000ef000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000bf5d4000 (usable) [ 0.000000] BIOS-e820: 00000000bf5d4000 - 00000000bf6c2000 (reserved) [ 0.000000] BIOS-e820: 00000000bf6c2000 - 00000000bf7c2000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000bf7c2000 - 00000000bf7ff000 (ACPI data) [ 0.000000] BIOS-e820: 00000000bf7ff000 - 00000000bf800000 (usable) [ 0.000000] BIOS-e820: 00000000bf800000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fed10000 - 00000000fed14000 (reserved) [ 0.000000] BIOS-e820: 00000000fed19000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1b000 - 00000000fed20000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ffd00000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 0000000138000000 (usable) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI 2.6 present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0x138000 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0FFC00000 mask FFFC00000 write-protect [ 0.000000] 1 base 000000000 mask F80000000 write-back [ 0.000000] 2 base 080000000 mask FC0000000 write-back [ 0.000000] 3 base 100000000 mask FC0000000 write-back [ 0.000000] 4 base 138000000 mask FF8000000 uncachable [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] last_pfn = 0xbf800 max_arch_pfn = 0x400000000 [ 0.000000] e820 update range: 0000000000001000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] modified physical RAM map: [ 0.000000] modified: 0000000000000000 - 0000000000010000 (reserved) [ 0.000000] modified: 0000000000010000 - 000000000009fc00 (usable) [ 0.000000] modified: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] modified: 00000000000ef000 - 0000000000100000 (reserved) [ 0.000000] modified: 0000000000100000 - 00000000bf5d4000 (usable) [ 0.000000] modified: 00000000bf5d4000 - 00000000bf6c2000 (reserved) [ 0.000000] modified: 00000000bf6c2000 - 00000000bf7c2000 (ACPI NVS) [ 0.000000] modified: 00000000bf7c2000 - 00000000bf7ff000 (ACPI data) [ 0.000000] modified: 00000000bf7ff000 - 00000000bf800000 (usable) [ 0.000000] modified: 00000000bf800000 - 00000000c0000000 (reserved) [ 0.000000] modified: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] modified: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] modified: 00000000fed10000 - 00000000fed14000 (reserved) [ 0.000000] modified: 00000000fed19000 - 00000000fed1a000 (reserved) [ 0.000000] modified: 00000000fed1b000 - 00000000fed20000 (reserved) [ 0.000000] modified: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] modified: 00000000ffd00000 - 0000000100000000 (reserved) [ 0.000000] modified: 0000000100000000 - 0000000138000000 (usable) [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] init_memory_mapping: 0000000000000000-00000000bf800000 [ 0.000000] 0000000000 - 00bf800000 page 2M [ 0.000000] kernel direct mapping tables up to bf800000 @ 16000-1a000 [ 0.000000] init_memory_mapping: 0000000100000000-0000000138000000 [ 0.000000] 0100000000 - 0138000000 page 2M [ 0.000000] kernel direct mapping tables up to 138000000 @ 18000-1e000 [ 0.000000] RAMDISK: 3756f000 - 37ff0000 [ 0.000000] ACPI: RSDP 00000000000f2a80 00024 (v02 HPQOEM) [ 0.000000] ACPI: XSDT 00000000bf7fe120 00094 (v01 HPQOEM SLIC-MPC 0000000F 01000013) [ 0.000000] ACPI: FACP 00000000bf7fc000 000F4 (v03 HPQOEM 1521 0000000F HP 00000001) [ 0.000000] ACPI: DSDT 00000000bf7da000 1C453 (v02 HPQOEM 1521 00000001 INTL 20060912) [ 0.000000] ACPI: FACS 00000000bf760000 00040 [ 0.000000] ACPI: HPET 00000000bf7fb000 00038 (v01 HPQOEM 1521 00000001 HP 00000001) [ 0.000000] ACPI: APIC 00000000bf7fa000 000BC (v01 HPQOEM 1521 00000001 HP 00000001) [ 0.000000] ACPI: MCFG 00000000bf7f9000 0003C (v01 HPQOEM 1521 00000001 HP 00000001) [ 0.000000] ACPI: TCPA 00000000bf7f7000 00032 (v02 HPQOEM 1521 00000000 HP 00000001) [ 0.000000] ACPI: SSDT 00000000bf7d7000 00135 (v01 HPQOEM SataAhci 00001000 INTL 20060912) [ 0.000000] ACPI: SSDT 00000000bf7d6000 00314 (v01 HPQOEM PtidDevc 00001000 INTL 20060912) [ 0.000000] ACPI: SLIC 00000000bf7d5000 00176 (v01 HPQOEM SLIC-MPC 00000001 HP 00000001) [ 0.000000] ACPI: SSDT 00000000bf7d1000 02576 (v01 HPQOEM NVIDIAGF 00000001 INTL 20060912) [ 0.000000] ACPI: DMAR 00000000bf7d0000 00080 (v01 INTEL CP_DALE 00000001 INTL 00000001) [ 0.000000] ACPI: SSDT 00000000bf7cf000 00A10 (v01 PmRef CpuPm 00003000 INTL 20060912) [ 0.000000] ACPI: SSDT 00000000bf7ce000 00288 (v01 PmRef Cpu0Tst 00003000 INTL 20060912) [ 0.000000] ACPI: SSDT 00000000bf7cd000 00225 (v01 PmRef ApTst 00003000 INTL 20060912) [ 0.000000] ACPI: ASF! 00000000bf7f8000 000A0 (v32 HPQOEM 1521 00000001 HP 00000001) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-0000000138000000 [ 0.000000] Initmem setup node 0 0000000000000000-0000000138000000 [ 0.000000] NODE_DATA [0000000100000000 - 0000000100004fff] [ 0.000000] [ffffea0000000000-ffffea00045fffff] PMD -> [ffff880100200000-ffff8801039fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal 0x00100000 -> 0x00138000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[4] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x000bf5d4 [ 0.000000] 0: 0x000bf7ff -> 0x000bf800 [ 0.000000] 0: 0x00100000 -> 0x00138000 [ 0.000000] On node 0 totalpages: 1013092 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3927 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 14280 pages used for memmap [ 0.000000] DMA32 zone: 765453 pages, LIFO batch:31 [ 0.000000] Normal zone: 3136 pages used for memmap [ 0.000000] Normal zone: 226240 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x04] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x05] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x05] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x06] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x07] lapic_id[0x00] disabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x04] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x05] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x06] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x07] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 8 CPUs, 4 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] early_res array is doubled to 64 at [19000 - 197ff] [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000ef000 [ 0.000000] PM: Registered nosave memory: 00000000000ef000 - 0000000000100000 [ 0.000000] PM: Registered nosave memory: 00000000bf5d4000 - 00000000bf6c2000 [ 0.000000] PM: Registered nosave memory: 00000000bf6c2000 - 00000000bf7c2000 [ 0.000000] PM: Registered nosave memory: 00000000bf7c2000 - 00000000bf7ff000 [ 0.000000] PM: Registered nosave memory: 00000000bf800000 - 00000000c0000000 [ 0.000000] PM: Registered nosave memory: 00000000c0000000 - 00000000e0000000 [ 0.000000] PM: Registered nosave memory: 00000000e0000000 - 00000000f0000000 [ 0.000000] PM: Registered nosave memory: 00000000f0000000 - 00000000fec00000 [ 0.000000] PM: Registered nosave memory: 00000000fec00000 - 00000000fec01000 [ 0.000000] PM: Registered nosave memory: 00000000fec01000 - 00000000fed10000 [ 0.000000] PM: Registered nosave memory: 00000000fed10000 - 00000000fed14000 [ 0.000000] PM: Registered nosave memory: 00000000fed14000 - 00000000fed19000 [ 0.000000] PM: Registered nosave memory: 00000000fed19000 - 00000000fed1a000 [ 0.000000] PM: Registered nosave memory: 00000000fed1a000 - 00000000fed1b000 [ 0.000000] PM: Registered nosave memory: 00000000fed1b000 - 00000000fed20000 [ 0.000000] PM: Registered nosave memory: 00000000fed20000 - 00000000fee00000 [ 0.000000] PM: Registered nosave memory: 00000000fee00000 - 00000000fee01000 [ 0.000000] PM: Registered nosave memory: 00000000fee01000 - 00000000ffd00000 [ 0.000000] PM: Registered nosave memory: 00000000ffd00000 - 0000000100000000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:20000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:8 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 30 pages/cpu @ffff880001e00000 s91520 r8192 d23168 u262144 [ 0.000000] early_res array is doubled to 128 at [19800 - 1a7ff] [ 0.000000] pcpu-alloc: s91520 r8192 d23168 u262144 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 4 5 6 7 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 995620 [ 0.000000] Policy zone: Normal [ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-2.6.35-28-generic root=UUID=c9a74a55-36db-4c67-8cdc-097c0cced3d8 ro PROFILE=internal [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Subtract (64 early reservations) [ 0.000000] #1 [0001000000 - 0001d18114] TEXT DATA BSS [ 0.000000] #2 [003756f000 - 0037ff0000] RAMDISK [ 0.000000] #3 [000009fc00 - 0000100000] BIOS reserved [ 0.000000] #4 [0001d19000 - 0001d19229] BRK [ 0.000000] #5 [0000010000 - 0000012000] TRAMPOLINE [ 0.000000] #6 [0000012000 - 0000016000] ACPI WAKEUP [ 0.000000] #7 [0000016000 - 0000018000] PGTABLE [ 0.000000] #8 [0000018000 - 0000019000] PGTABLE [ 0.000000] #9 [0100000000 - 0100005000] NODE_DATA [ 0.000000] #10 [0001d19240 - 0001d1a240] BOOTMEM [ 0.000000] #11 [0001d18140 - 0001d18428] BOOTMEM [ 0.000000] #12 [0100005000 - 0100006000] BOOTMEM [ 0.000000] #13 [0100006000 - 0100007000] BOOTMEM [ 0.000000] #14 [0100200000 - 0103a00000] MEMMAP 0 [ 0.000000] #15 [0001d18440 - 0001d185c0] BOOTMEM [ 0.000000] #16 [0001d1a240 - 0001d32240] BOOTMEM [ 0.000000] #17 [0001d32240 - 0001d38240] BOOTMEM [ 0.000000] #18 [0001d39000 - 0001d3a000] BOOTMEM [ 0.000000] #19 [0001d185c0 - 0001d18601] BOOTMEM [ 0.000000] #20 [0001d18640 - 0001d18683] BOOTMEM [ 0.000000] #21 [0001d186c0 - 0001d18ab0] BOOTMEM [ 0.000000] #22 [0001d18ac0 - 0001d18b28] BOOTMEM [ 0.000000] #23 [0001d18b40 - 0001d18ba8] BOOTMEM [ 0.000000] #24 [0001d18bc0 - 0001d18c28] BOOTMEM [ 0.000000] #25 [0001d18c40 - 0001d18ca8] BOOTMEM [ 0.000000] #26 [0001d18cc0 - 0001d18d28] BOOTMEM [ 0.000000] #27 [0001d18d40 - 0001d18da8] BOOTMEM [ 0.000000] #28 [0001d18dc0 - 0001d18e28] BOOTMEM [ 0.000000] #29 [0001d18e40 - 0001d18ea8] BOOTMEM [ 0.000000] #30 [0001d18ec0 - 0001d18f28] BOOTMEM [ 0.000000] #31 [0001d18f40 - 0001d18fa8] BOOTMEM [ 0.000000] #32 [0001d38240 - 0001d382a8] BOOTMEM [ 0.000000] #33 [0001d382c0 - 0001d38328] BOOTMEM [ 0.000000] #34 [0001d38340 - 0001d383a8] BOOTMEM [ 0.000000] #35 [0001d383c0 - 0001d38428] BOOTMEM [ 0.000000] #36 [0001d38440 - 0001d384a8] BOOTMEM [ 0.000000] #37 [0001d384c0 - 0001d38528] BOOTMEM [ 0.000000] #38 [0001d38540 - 0001d385a8] BOOTMEM [ 0.000000] #39 [0001d18fc0 - 0001d18fe0] BOOTMEM [ 0.000000] #40 [0001d385c0 - 0001d385e0] BOOTMEM [ 0.000000] #41 [0001d38600 - 0001d38620] BOOTMEM [ 0.000000] #42 [0001d38640 - 0001d386a9] BOOTMEM [ 0.000000] #43 [0001d386c0 - 0001d38729] BOOTMEM [ 0.000000] #44 [0001e00000 - 0001e1e000] BOOTMEM [ 0.000000] #45 [0001e40000 - 0001e5e000] BOOTMEM [ 0.000000] #46 [0001e80000 - 0001e9e000] BOOTMEM [ 0.000000] #47 [0001ec0000 - 0001ede000] BOOTMEM [ 0.000000] #48 [0001f00000 - 0001f1e000] BOOTMEM [ 0.000000] #49 [0001f40000 - 0001f5e000] BOOTMEM [ 0.000000] #50 [0001f80000 - 0001f9e000] BOOTMEM [ 0.000000] #51 [0001fc0000 - 0001fde000] BOOTMEM [ 0.000000] #52 [0001d38740 - 0001d38748] BOOTMEM [ 0.000000] #53 [0001d38780 - 0001d38788] BOOTMEM [ 0.000000] #54 [0001d387c0 - 0001d387e0] BOOTMEM [ 0.000000] #55 [0001d38800 - 0001d38840] BOOTMEM [ 0.000000] #56 [0001d38840 - 0001d38960] BOOTMEM [ 0.000000] #57 [0001d38980 - 0001d389c8] BOOTMEM [ 0.000000] #58 [0001d38a00 - 0001d38a48] BOOTMEM [ 0.000000] #59 [0001d3a000 - 0001d42000] BOOTMEM [ 0.000000] #60 [0001fde000 - 0005fde000] BOOTMEM [ 0.000000] #61 [0001d42000 - 0001d62000] BOOTMEM [ 0.000000] #62 [0001d62000 - 0001da2000] BOOTMEM [ 0.000000] #63 [000001a800 - 0000022800] BOOTMEM [ 0.000000] Memory: 3903712k/5111808k available (5716k kernel code, 1059440k absent, 148656k reserved, 5375k data, 912k init) [ 0.000000] SLUB: Genslabs=14, HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] Verbose stalled-CPUs detection is disabled. [ 0.000000] NR_IRQS:4352 nr_irqs:744 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 40632320 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.010000] Detected 2660.115 MHz processor. [ 0.000008] Calibrating delay loop (skipped), value calculated using timer frequency.. 5320.23 BogoMIPS (lpj=26601150) [ 0.000154] pid_max: default: 32768 minimum: 301 [ 0.000240] Security Framework initialized [ 0.000328] AppArmor: AppArmor initialized [ 0.000400] Yama: becoming mindful. [ 0.000789] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.002386] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.002847] Mount-cache hash table entries: 256 [ 0.003016] Initializing cgroup subsys ns [ 0.003091] Initializing cgroup subsys cpuacct [ 0.003162] Initializing cgroup subsys memory [ 0.003235] Initializing cgroup subsys devices [ 0.003306] Initializing cgroup subsys freezer [ 0.003379] Initializing cgroup subsys net_cls [ 0.003465] CPU: Physical Processor ID: 0 [ 0.003538] CPU: Processor Core ID: 0 [ 0.003611] mce: CPU supports 9 MCE banks [ 0.003689] CPU0: Thermal monitoring enabled (TM1) [ 0.003770] using mwait in idle threads. [ 0.003845] Performance Events: PEBS fmt1+, Westmere events, Intel PMU driver. [ 0.004121] ... version: 3 [ 0.004189] ... bit width: 48 [ 0.004257] ... generic registers: 4 [ 0.004327] ... value mask: 0000ffffffffffff [ 0.004399] ... max period: 000000007fffffff [ 0.004468] ... fixed-purpose events: 3 [ 0.004537] ... event mask: 000000070000000f [ 0.006251] ACPI: Core revision 20100428 [ 0.050917] ftrace: converting mcount calls to 0f 1f 44 00 00 [ 0.050998] ftrace: allocating 22687 entries in 89 pages [ 0.056933] DMAR: Host address width 36 [ 0.057012] DMAR: DRHD base: 0x000000fed90000 flags: 0x0 [ 0.057088] IOMMU 0: reg_base_addr fed90000 ver 1:0 cap c9008020e30272 ecap 1000 [ 0.057176] DMAR: DRHD base: 0x000000fed93000 flags: 0x1 [ 0.057252] IOMMU 1: reg_base_addr fed93000 ver 1:0 cap c9008020630272 ecap 1000 [ 0.057339] DMAR: RMRR base: 0x00000000000000 end: 0x00000000000fff [ 0.057544] Setting APIC routing to flat [ 0.058019] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.157857] CPU0: Intel(R) Core(TM) i7 CPU M 620 @ 2.67GHz stepping 05 [ 0.273355] Booting Node 0, Processors #1 #2 #3 [ 0.811950] Brought up 4 CPUs [ 0.812094] Total of 4 processors activated (21280.13 BogoMIPS). [ 0.813748] devtmpfs: initialized [ 0.814583] regulator: core version 0.5 [ 0.814684] Time: 12:41:32 Date: 04/04/11 [ 0.814783] NET: Registered protocol family 16 [ 0.814931] Trying to unpack rootfs image as initramfs... [ 0.814938] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it [ 0.814940] ACPI: bus type pci registered [ 0.815182] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.815273] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 0.842346] PCI: Using configuration type 1 for base access [ 0.843009] bio: create slab at 0 [ 0.844812] ACPI: EC: Look up EC in DSDT [ 0.867249] ACPI: BIOS _OSI(Linux) query ignored [ 0.877444] ACPI: SSDT 00000000bf6bba18 0047D (v01 PmRef Cpu0Ist 00003000 INTL 20060912) [ 0.878085] ACPI: Dynamic OEM Table Load: [ 0.878268] ACPI: SSDT (null) 0047D (v01 PmRef Cpu0Ist 00003000 INTL 20060912) [ 0.878828] ACPI: SSDT 00000000bf6b9018 008AA (v01 PmRef Cpu0Cst 00003001 INTL 20060912) [ 0.879440] ACPI: Dynamic OEM Table Load: [ 0.879627] ACPI: SSDT (null) 008AA (v01 PmRef Cpu0Cst 00003001 INTL 20060912) [ 0.880333] ACPI: SSDT 00000000bf6baa98 00303 (v01 PmRef ApIst 00003000 INTL 20060912) [ 0.881009] ACPI: Dynamic OEM Table Load: [ 0.881192] ACPI: SSDT (null) 00303 (v01 PmRef ApIst 00003000 INTL 20060912) [ 0.881557] ACPI: SSDT 00000000bf6b8d98 00119 (v01 PmRef ApCst 00003000 INTL 20060912) [ 0.882201] ACPI: Dynamic OEM Table Load: [ 0.882386] ACPI: SSDT (null) 00119 (v01 PmRef ApCst 00003000 INTL 20060912) [ 0.985429] Freeing initrd memory: 10756k freed [ 1.309253] ACPI: Interpreter enabled [ 1.309335] ACPI: (supports S0 S3 S4 S5) [ 1.309652] ACPI: Using IOAPIC for interrupt routing [ 1.319738] ACPI: EC: GPE = 0x16, I/O: command/status = 0x66, data = 0x62 [ 1.319876] ACPI: Power Resource [APPR] (off) [ 1.320121] ACPI: Power Resource [COMP] (on) [ 1.320355] ACPI: Power Resource [LPP] (on) [ 1.320723] ACPI: No dock devices found. [ 1.320800] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 1.322213] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-fe]) [ 1.323636] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 1.323717] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 1.323793] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 1.323881] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xdfffffff] [ 1.323968] pci_root PNP0A08:00: host bridge window [mem 0xf0000000-0xfedfffff] [ 1.324056] pci_root PNP0A08:00: host bridge window [mem 0xfee01000-0xffffffff] [ 1.324194] pci 0000:00:01.0: PME# supported from D0 D3hot D3cold [ 1.324196] pci 0000:00:01.0: PME# disabled [ 1.324263] pci 0000:00:16.0: reg 10: [mem 0xd7524000-0xd752400f 64bit] [ 1.324317] pci 0000:00:16.0: PME# supported from D0 D3hot D3cold [ 1.324321] pci 0000:00:16.0: PME# disabled [ 1.324376] pci 0000:00:19.0: reg 10: [mem 0xd7500000-0xd751ffff] [ 1.324382] pci 0000:00:19.0: reg 14: [mem 0xd752a000-0xd752afff] [ 1.324390] pci 0000:00:19.0: reg 18: [io 0x6020-0x603f] [ 1.324440] pci 0000:00:19.0: PME# supported from D0 D3hot D3cold [ 1.324445] pci 0000:00:19.0: PME# disabled [ 1.324491] pci 0000:00:1a.0: reg 10: [mem 0xd7529000-0xd75293ff] [ 1.324552] pci 0000:00:1a.0: PME# supported from D0 D3hot D3cold [ 1.324556] pci 0000:00:1a.0: PME# disabled [ 1.324598] pci 0000:00:1b.0: reg 10: [mem 0xd7520000-0xd7523fff 64bit] [ 1.324654] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 1.324658] pci 0000:00:1b.0: PME# disabled [ 1.324748] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 1.324752] pci 0000:00:1c.0: PME# disabled [ 1.324841] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 1.324845] pci 0000:00:1c.1: PME# disabled [ 1.324940] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold [ 1.324944] pci 0000:00:1c.3: PME# disabled [ 1.325035] pci 0000:00:1c.7: PME# supported from D0 D3hot D3cold [ 1.325039] pci 0000:00:1c.7: PME# disabled [ 1.325088] pci 0000:00:1d.0: reg 10: [mem 0xd7528000-0xd75283ff] [ 1.325151] pci 0000:00:1d.0: PME# supported from D0 D3hot D3cold [ 1.325155] pci 0000:00:1d.0: PME# disabled [ 1.325346] pci 0000:00:1f.2: reg 10: [io 0x6048-0x604f] [ 1.325353] pci 0000:00:1f.2: reg 14: [io 0x6054-0x6057] [ 1.325359] pci 0000:00:1f.2: reg 18: [io 0x6040-0x6047] [ 1.325366] pci 0000:00:1f.2: reg 1c: [io 0x6050-0x6053] [ 1.325372] pci 0000:00:1f.2: reg 20: [io 0x6000-0x601f] [ 1.325379] pci 0000:00:1f.2: reg 24: [mem 0xd7527000-0xd75277ff] [ 1.325422] pci 0000:00:1f.2: PME# supported from D3hot [ 1.325426] pci 0000:00:1f.2: PME# disabled [ 1.325478] pci 0000:00:1f.6: reg 10: [mem 0xd7526000-0xd7526fff 64bit] [ 1.325578] pci 0000:01:00.0: reg 10: [mem 0xd2000000-0xd2ffffff] [ 1.325587] pci 0000:01:00.0: reg 14: [mem 0xc0000000-0xcfffffff 64bit pref] [ 1.325597] pci 0000:01:00.0: reg 1c: [mem 0xd0000000-0xd1ffffff 64bit pref] [ 1.325602] pci 0000:01:00.0: reg 24: [io 0x5000-0x507f] [ 1.325608] pci 0000:01:00.0: reg 30: [mem 0xfff80000-0xffffffff pref] [ 1.325668] pci 0000:01:00.1: reg 10: [mem 0xd3000000-0xd3003fff] [ 1.325731] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 1.325807] pci 0000:00:01.0: bridge window [io 0x5000-0x5fff] [ 1.325810] pci 0000:00:01.0: bridge window [mem 0xd2000000-0xd30fffff] [ 1.325812] pci 0000:00:01.0: bridge window [mem 0xc0000000-0xd1ffffff 64bit pref] [ 1.325865] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 1.325945] pci 0000:00:1c.0: bridge window [io 0xf000-0x0000] (disabled) [ 1.325949] pci 0000:00:1c.0: bridge window [mem 0xd7400000-0xd74fffff] [ 1.325956] pci 0000:00:1c.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 1.326010] pci 0000:00:1c.1: PCI bridge to [bus 03-43] [ 1.326090] pci 0000:00:1c.1: bridge window [io 0x3000-0x4fff] [ 1.326094] pci 0000:00:1c.1: bridge window [mem 0xd3400000-0xd73fffff] [ 1.326101] pci 0000:00:1c.1: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 1.326212] pci 0000:44:00.0: reg 10: [mem 0xd3300000-0xd3301fff 64bit] [ 1.326320] pci 0000:44:00.0: PME# supported from D0 D3hot D3cold [ 1.326327] pci 0000:44:00.0: PME# disabled [ 1.326362] pci 0000:00:1c.3: PCI bridge to [bus 44-44] [ 1.326441] pci 0000:00:1c.3: bridge window [io 0xf000-0x0000] (disabled) [ 1.326446] pci 0000:00:1c.3: bridge window [mem 0xd3300000-0xd33fffff] [ 1.326452] pci 0000:00:1c.3: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 1.326558] pci 0000:45:00.0: reg 10: [mem 0xd3200000-0xd3201fff 64bit] [ 1.326657] pci 0000:45:00.0: PME# supported from D0 D3hot [ 1.326663] pci 0000:45:00.0: PME# disabled [ 1.326700] pci 0000:00:1c.7: PCI bridge to [bus 45-45] [ 1.326780] pci 0000:00:1c.7: bridge window [io 0xf000-0x0000] (disabled) [ 1.326784] pci 0000:00:1c.7: bridge window [mem 0xd3200000-0xd32fffff] [ 1.326791] pci 0000:00:1c.7: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 1.326851] pci 0000:46:06.0: proprietary Ricoh MMC controller disabled (via firewire function) [ 1.326944] pci 0000:46:06.0: MMC cards are now supported by standard SDHCI controller [ 1.327038] pci 0000:46:06.0: reg 10: [mem 0xd3101000-0xd31017ff] [ 1.327090] pci 0000:46:06.0: supports D1 D2 [ 1.327091] pci 0000:46:06.0: PME# supported from D0 D1 D2 D3hot D3cold [ 1.327095] pci 0000:46:06.0: PME# disabled [ 1.327126] pci 0000:46:06.1: reg 10: [mem 0xd3105000-0xd31050ff] [ 1.327178] pci 0000:46:06.1: supports D1 D2 [ 1.327179] pci 0000:46:06.1: PME# supported from D0 D1 D2 D3hot D3cold [ 1.327183] pci 0000:46:06.1: PME# disabled [ 1.327215] pci 0000:46:06.2: reg 10: [mem 0xd3103000-0xd31030ff] [ 1.327266] pci 0000:46:06.2: supports D1 D2 [ 1.327267] pci 0000:46:06.2: PME# supported from D0 D1 D2 D3hot D3cold [ 1.327271] pci 0000:46:06.2: PME# disabled [ 1.327302] pci 0000:46:06.3: reg 10: [mem 0xd3102000-0xd31020ff] [ 1.327353] pci 0000:46:06.3: supports D1 D2 [ 1.327354] pci 0000:46:06.3: PME# supported from D0 D1 D2 D3hot D3cold [ 1.327358] pci 0000:46:06.3: PME# disabled [ 1.327389] pci 0000:46:06.4: reg 10: [mem 0xd3100000-0xd3100fff] [ 1.327410] pci 0000:46:06.4: supports D1 D2 [ 1.327411] pci 0000:46:06.4: PME# supported from D0 D1 D2 D3hot D3cold [ 1.327415] pci 0000:46:06.4: PME# disabled [ 1.327458] pci 0000:00:1e.0: PCI bridge to [bus 46-47] (subtractive decode) [ 1.327539] pci 0000:00:1e.0: bridge window [io 0x2000-0x2fff] [ 1.327543] pci 0000:00:1e.0: bridge window [mem 0xd3100000-0xd31fffff] [ 1.327550] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 1.327552] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 1.327553] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 1.327555] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 1.327556] pci 0000:00:1e.0: bridge window [mem 0xc0000000-0xdfffffff] (subtractive decode) [ 1.327558] pci 0000:00:1e.0: bridge window [mem 0xf0000000-0xfedfffff] (subtractive decode) [ 1.327559] pci 0000:00:1e.0: bridge window [mem 0xfee01000-0xffffffff] (subtractive decode) [ 1.327598] pci_bus 0000:47: [bus 47-4a] partially hidden behind transparent bridge 0000:46 [bus 46-47] [ 1.327726] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 1.328003] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PEGP._PRT] [ 1.328106] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCIB._PRT] [ 1.328207] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP01._PRT] [ 1.328277] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP02._PRT] [ 1.328404] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP04._PRT] [ 1.328481] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP08._PRT] [ 1.343081] ACPI: PCI Root Bridge [CPBG] (domain 0000 [bus ff]) [ 1.343564] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 5 6 7 *10 12 14 15) [ 1.344428] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 *5 6 7 11 12 14 15) [ 1.345295] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 7 10 12 14 15) *11 [ 1.346233] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 1.347161] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 7 *10 12 14 15) [ 1.348020] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 11 12 14 15) *10 [ 1.348953] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled. [ 1.349942] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 5 6 7 11 12 14 15) *0, disabled. [ 1.350873] HEST: Table is not found! [ 1.351011] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none [ 1.351104] vgaarb: loaded [ 1.351269] SCSI subsystem initialized [ 1.351426] libata version 3.00 loaded. [ 1.351474] usbcore: registered new interface driver usbfs [ 1.351558] usbcore: registered new interface driver hub [ 1.351651] usbcore: registered new device driver usb [ 1.352083] ACPI: WMI: Mapper loaded [ 1.352159] PCI: Using ACPI for IRQ routing [ 1.353787] PCI: pci_cache_line_size set to 64 bytes [ 1.353889] reserve RAM buffer: 000000000009fc00 - 000000000009ffff [ 1.353891] reserve RAM buffer: 00000000bf5d4000 - 00000000bfffffff [ 1.353892] reserve RAM buffer: 00000000bf800000 - 00000000bfffffff [ 1.353963] NetLabel: Initializing [ 1.354039] NetLabel: domain hash size = 128 [ 1.354110] NetLabel: protocols = UNLABELED CIPSOv4 [ 1.354192] NetLabel: unlabeled traffic allowed by default [ 1.354305] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0, 0, 0, 0, 0 [ 1.354886] hpet0: 8 comparators, 64-bit 14.318180 MHz counter [ 1.356973] Switching to clocksource tsc [ 1.362865] AppArmor: AppArmor Filesystem Enabled [ 1.362955] pnp: PnP ACPI init [ 1.363040] ACPI: bus type pnp registered [ 1.367523] alloc irq_desc for 23 on node 0 [ 1.367525] alloc kstat_irqs on node 0 [ 1.368432] pnp: PnP ACPI: found 15 devices [ 1.368508] ACPI: ACPI bus type pnp unregistered [ 1.368590] system 00:01: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 1.368670] system 00:01: [mem 0xfed10000-0xfed13fff] has been reserved [ 1.368745] system 00:01: [mem 0xfed1b000-0xfed1bfff] has been reserved [ 1.368821] system 00:01: [mem 0xfed19000-0xfed19fff] has been reserved [ 1.368895] system 00:01: [mem 0xd7600000-0xd7600fff] has been reserved [ 1.368973] system 00:01: [mem 0xe0000000-0xefffffff] has been reserved [ 1.369047] system 00:01: [mem 0xfed20000-0xfed3ffff] has been reserved [ 1.369123] system 00:01: [mem 0xfed90000-0xfed93fff] has been reserved [ 1.369198] system 00:01: [mem 0xfed45000-0xfed8ffff] has been reserved [ 1.369275] system 00:01: [mem 0xfec00000-0xfec00fff] could not be reserved [ 1.369355] system 00:07: [io 0x0200-0x027f] has been reserved [ 1.369429] system 00:07: [io 0x1000-0x100f] has been reserved [ 1.369503] system 00:07: [io 0xffff] has been reserved [ 1.369577] system 00:07: [io 0xffff] has been reserved [ 1.369652] system 00:07: [io 0x0400-0x047f] has been reserved [ 1.369725] system 00:07: [io 0x0500-0x057f] has been reserved [ 1.369799] system 00:07: [io 0xef80-0xef9f] has been reserved [ 1.375232] pci 0000:01:00.0: no compatible bridge window for [mem 0xfff80000-0xffffffff pref] [ 1.375385] pci 0000:00:1e.0: BAR 15: assigned [mem 0xd8000000-0xdbffffff pref] [ 1.375477] pci 0000:00:1c.1: BAR 15: assigned [mem 0xd7700000-0xd78fffff 64bit pref] [ 1.375566] pci 0000:01:00.0: BAR 6: assigned [mem 0xd3080000-0xd30fffff pref] [ 1.375655] pci 0000:00:01.0: PCI bridge to [bus 01-01] [ 1.375729] pci 0000:00:01.0: bridge window [io 0x5000-0x5fff] [ 1.375804] pci 0000:00:01.0: bridge window [mem 0xd2000000-0xd30fffff] [ 1.375881] pci 0000:00:01.0: bridge window [mem 0xc0000000-0xd1ffffff 64bit pref] [ 1.375970] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 1.376043] pci 0000:00:1c.0: bridge window [io disabled] [ 1.376121] pci 0000:00:1c.0: bridge window [mem 0xd7400000-0xd74fffff] [ 1.376198] pci 0000:00:1c.0: bridge window [mem pref disabled] [ 1.376277] pci 0000:00:1c.1: PCI bridge to [bus 03-43] [ 1.376355] pci 0000:00:1c.1: bridge window [io 0x3000-0x4fff] [ 1.376433] pci 0000:00:1c.1: bridge window [mem 0xd3400000-0xd73fffff] [ 1.376514] pci 0000:00:1c.1: bridge window [mem 0xd7700000-0xd78fffff 64bit pref] [ 1.376608] pci 0000:00:1c.3: PCI bridge to [bus 44-44] [ 1.376685] pci 0000:00:1c.3: bridge window [io disabled] [ 1.376763] pci 0000:00:1c.3: bridge window [mem 0xd3300000-0xd33fffff] [ 1.376839] pci 0000:00:1c.3: bridge window [mem pref disabled] [ 1.376921] pci 0000:00:1c.7: PCI bridge to [bus 45-45] [ 1.376999] pci 0000:00:1c.7: bridge window [io disabled] [ 1.377078] pci 0000:00:1c.7: bridge window [mem 0xd3200000-0xd32fffff] [ 1.377155] pci 0000:00:1c.7: bridge window [mem pref disabled] [ 1.377236] pci 0000:46:06.4: BAR 15: assigned [mem 0xd8000000-0xdbffffff pref] [ 1.377328] pci 0000:46:06.4: BAR 16: assigned [mem 0xdc000000-0xdfffffff] [ 1.377404] pci 0000:46:06.4: BAR 13: assigned [io 0x2000-0x20ff] [ 1.377479] pci 0000:46:06.4: BAR 14: assigned [io 0x2400-0x24ff] [ 1.377554] pci 0000:46:06.4: CardBus bridge to [bus 47-4a] [ 1.377629] pci 0000:46:06.4: bridge window [io 0x2000-0x20ff] [ 1.377706] pci 0000:46:06.4: bridge window [io 0x2400-0x24ff] [ 1.377783] pci 0000:46:06.4: bridge window [mem 0xd8000000-0xdbffffff pref] [ 1.377874] pci 0000:46:06.4: bridge window [mem 0xdc000000-0xdfffffff] [ 1.377951] pci 0000:00:1e.0: PCI bridge to [bus 46-47] [ 1.378028] pci 0000:00:1e.0: bridge window [io 0x2000-0x2fff] [ 1.378106] pci 0000:00:1e.0: bridge window [mem 0xd3100000-0xd31fffff] [ 1.378184] pci 0000:00:1e.0: bridge window [mem 0xd8000000-0xdbffffff pref] [ 1.378285] alloc irq_desc for 16 on node -1 [ 1.378286] alloc kstat_irqs on node -1 [ 1.378290] pci 0000:00:01.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.378369] pci 0000:00:01.0: setting latency timer to 64 [ 1.378377] alloc irq_desc for 17 on node -1 [ 1.378378] alloc kstat_irqs on node -1 [ 1.378381] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 1.378463] pci 0000:00:1c.0: setting latency timer to 64 [ 1.378471] pci 0000:00:1c.1: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 1.378553] pci 0000:00:1c.1: setting latency timer to 64 [ 1.378562] alloc irq_desc for 19 on node -1 [ 1.378563] alloc kstat_irqs on node -1 [ 1.378565] pci 0000:00:1c.3: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 1.378648] pci 0000:00:1c.3: setting latency timer to 64 [ 1.378656] pci 0000:00:1c.7: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 1.378737] pci 0000:00:1c.7: setting latency timer to 64 [ 1.378744] pci 0000:00:1e.0: setting latency timer to 64 [ 1.378754] alloc irq_desc for 22 on node -1 [ 1.378755] alloc kstat_irqs on node -1 [ 1.378757] pci 0000:46:06.4: PCI INT B -> GSI 22 (level, low) -> IRQ 22 [ 1.378838] pci 0000:46:06.4: setting latency timer to 64 [ 1.378842] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 1.378843] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 1.378845] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 1.378846] pci_bus 0000:00: resource 7 [mem 0xc0000000-0xdfffffff] [ 1.378847] pci_bus 0000:00: resource 8 [mem 0xf0000000-0xfedfffff] [ 1.378849] pci_bus 0000:00: resource 9 [mem 0xfee01000-0xffffffff] [ 1.378850] pci_bus 0000:01: resource 0 [io 0x5000-0x5fff] [ 1.378852] pci_bus 0000:01: resource 1 [mem 0xd2000000-0xd30fffff] [ 1.378853] pci_bus 0000:01: resource 2 [mem 0xc0000000-0xd1ffffff 64bit pref] [ 1.378855] pci_bus 0000:02: resource 1 [mem 0xd7400000-0xd74fffff] [ 1.378856] pci_bus 0000:03: resource 0 [io 0x3000-0x4fff] [ 1.378858] pci_bus 0000:03: resource 1 [mem 0xd3400000-0xd73fffff] [ 1.378859] pci_bus 0000:03: resource 2 [mem 0xd7700000-0xd78fffff 64bit pref] [ 1.378861] pci_bus 0000:44: resource 1 [mem 0xd3300000-0xd33fffff] [ 1.378862] pci_bus 0000:45: resource 1 [mem 0xd3200000-0xd32fffff] [ 1.378863] pci_bus 0000:46: resource 0 [io 0x2000-0x2fff] [ 1.378865] pci_bus 0000:46: resource 1 [mem 0xd3100000-0xd31fffff] [ 1.378866] pci_bus 0000:46: resource 2 [mem 0xd8000000-0xdbffffff pref] [ 1.378868] pci_bus 0000:46: resource 4 [io 0x0000-0x0cf7] [ 1.378869] pci_bus 0000:46: resource 5 [io 0x0d00-0xffff] [ 1.378870] pci_bus 0000:46: resource 6 [mem 0x000a0000-0x000bffff] [ 1.378871] pci_bus 0000:46: resource 7 [mem 0xc0000000-0xdfffffff] [ 1.378873] pci_bus 0000:46: resource 8 [mem 0xf0000000-0xfedfffff] [ 1.378874] pci_bus 0000:46: resource 9 [mem 0xfee01000-0xffffffff] [ 1.378876] pci_bus 0000:47: resource 0 [io 0x2000-0x20ff] [ 1.378877] pci_bus 0000:47: resource 1 [io 0x2400-0x24ff] [ 1.378878] pci_bus 0000:47: resource 2 [mem 0xd8000000-0xdbffffff pref] [ 1.378880] pci_bus 0000:47: resource 3 [mem 0xdc000000-0xdfffffff] [ 1.378906] NET: Registered protocol family 2 [ 1.379091] IP route cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 1.380001] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 1.381727] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 1.382017] TCP: Hash tables configured (established 524288 bind 65536) [ 1.382096] TCP reno registered [ 1.382174] UDP hash table entries: 2048 (order: 4, 65536 bytes) [ 1.382271] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) [ 1.382445] NET: Registered protocol family 1 [ 1.382637] pci 0000:01:00.0: Boot video device [ 1.382703] PCI: CLS 64 bytes, default 64 [ 1.382705] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) [ 1.382785] Placing 64MB software IO TLB between ffff880001fde000 - ffff880005fde000 [ 1.382874] software IO TLB at phys 0x1fde000 - 0x5fde000 [ 1.383178] Scanning for low memory corruption every 60 seconds [ 1.383369] audit: initializing netlink socket (disabled) [ 1.383453] type=2000 audit(1301920892.230:1): initialized [ 1.394175] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 1.395210] VFS: Disk quotas dquot_6.5.2 [ 1.395321] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 1.395776] fuse init (API version 7.14) [ 1.395908] msgmni has been set to 7645 [ 1.397547] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 1.397639] io scheduler noop registered [ 1.397712] io scheduler deadline registered [ 1.397807] io scheduler cfq registered (default) [ 1.397963] pcieport 0000:00:01.0: setting latency timer to 64 [ 1.397979] alloc irq_desc for 40 on node -1 [ 1.397980] alloc kstat_irqs on node -1 [ 1.397988] pcieport 0000:00:01.0: irq 40 for MSI/MSI-X [ 1.398030] pcieport 0000:00:1c.0: setting latency timer to 64 [ 1.398070] alloc irq_desc for 41 on node -1 [ 1.398071] alloc kstat_irqs on node -1 [ 1.398079] pcieport 0000:00:1c.0: irq 41 for MSI/MSI-X [ 1.398146] pcieport 0000:00:1c.1: setting latency timer to 64 [ 1.398186] alloc irq_desc for 42 on node -1 [ 1.398187] alloc kstat_irqs on node -1 [ 1.398195] pcieport 0000:00:1c.1: irq 42 for MSI/MSI-X [ 1.398276] pcieport 0000:00:1c.3: setting latency timer to 64 [ 1.398316] alloc irq_desc for 43 on node -1 [ 1.398317] alloc kstat_irqs on node -1 [ 1.398324] pcieport 0000:00:1c.3: irq 43 for MSI/MSI-X [ 1.398393] pcieport 0000:00:1c.7: setting latency timer to 64 [ 1.398433] alloc irq_desc for 44 on node -1 [ 1.398434] alloc kstat_irqs on node -1 [ 1.398442] pcieport 0000:00:1c.7: irq 44 for MSI/MSI-X [ 1.398515] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 1.398616] Firmware did not grant requested _OSC control [ 1.398632] Firmware did not grant requested _OSC control [ 1.398636] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 1.398760] intel_idle: MWAIT substates: 0x1120 [ 1.398761] intel_idle: v0.4 model 0x25 [ 1.398762] intel_idle: lapic_timer_reliable_states 0xffffffff [ 1.399104] ACPI: AC Adapter [AC] (on-line) [ 1.399238] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input0 [ 1.399332] ACPI: Sleep Button [SLPB] [ 1.399427] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input1 [ 1.399574] ACPI: Lid Switch [LID] [ 1.399674] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2 [ 1.399764] ACPI: Power Button [PWRF] [ 1.400290] ACPI: acpi_idle yielding to intel_idle [ 1.418509] thermal LNXTHERM:01: registered as thermal_zone0 [ 1.418591] ACPI: Thermal Zone [EXTZ] (26 C) [ 1.422265] thermal LNXTHERM:02: registered as thermal_zone1 [ 1.422347] ACPI: Thermal Zone [EX2Z] (0 C) [ 1.424097] thermal LNXTHERM:03: registered as thermal_zone2 [ 1.424177] ACPI: Thermal Zone [PWMZ] (11 C) [ 1.427752] thermal LNXTHERM:04: registered as thermal_zone3 [ 1.427834] ACPI: Thermal Zone [LOCZ] (25 C) [ 1.428725] thermal LNXTHERM:05: registered as thermal_zone4 [ 1.428808] ACPI: Thermal Zone [GFXZ] (0 C) [ 1.439559] thermal LNXTHERM:06: registered as thermal_zone5 [ 1.439641] ACPI: Thermal Zone [BATZ] (27 C) [ 1.449205] thermal LNXTHERM:07: registered as thermal_zone6 [ 1.449288] ACPI: Thermal Zone [EGXZ] (28 C) [ 1.449709] thermal LNXTHERM:08: registered as thermal_zone7 [ 1.449790] ACPI: Thermal Zone [CPUZ] (34 C) [ 1.450185] thermal LNXTHERM:09: registered as thermal_zone8 [ 1.450265] ACPI: Thermal Zone [MCHZ] (33 C) [ 1.450644] thermal LNXTHERM:0a: registered as thermal_zone9 [ 1.450725] ACPI: Thermal Zone [PCHZ] (59 C) [ 1.450862] ERST: Table is not found! [ 1.451298] Linux agpgart interface v0.103 [ 1.451386] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 1.451598] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 1.451985] 00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 1.452750] brd: module loaded [ 1.453120] loop: module loaded [ 1.453455] Fixed MDIO Bus: probed [ 1.453549] PPP generic driver version 2.4.2 [ 1.453644] tun: Universal TUN/TAP device driver, 1.6 [ 1.453722] tun: (C) 1999-2004 Max Krasnyansky [ 1.453855] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 1.453950] ehci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.454044] ehci_hcd 0000:00:1a.0: setting latency timer to 64 [ 1.454047] ehci_hcd 0000:00:1a.0: EHCI Host Controller [ 1.454143] ehci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 1 [ 1.454260] ehci_hcd 0000:00:1a.0: debug port 2 [ 1.458241] ehci_hcd 0000:00:1a.0: cache line size of 64 is not supported [ 1.458255] ehci_hcd 0000:00:1a.0: irq 16, io mem 0xd7529000 [ 1.476770] ehci_hcd 0000:00:1a.0: USB 2.0 started, EHCI 1.00 [ 1.476933] hub 1-0:1.0: USB hub found [ 1.477011] hub 1-0:1.0: 3 ports detected [ 1.477133] alloc irq_desc for 20 on node -1 [ 1.477134] alloc kstat_irqs on node -1 [ 1.477138] ehci_hcd 0000:00:1d.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20 [ 1.477226] ehci_hcd 0000:00:1d.0: setting latency timer to 64 [ 1.477229] ehci_hcd 0000:00:1d.0: EHCI Host Controller [ 1.477325] ehci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2 [ 1.477436] ehci_hcd 0000:00:1d.0: debug port 2 [ 1.481432] ehci_hcd 0000:00:1d.0: cache line size of 64 is not supported [ 1.481443] ehci_hcd 0000:00:1d.0: irq 20, io mem 0xd7528000 [ 1.496730] ehci_hcd 0000:00:1d.0: USB 2.0 started, EHCI 1.00 [ 1.496893] hub 2-0:1.0: USB hub found [ 1.496970] hub 2-0:1.0: 3 ports detected [ 1.497086] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 1.497171] uhci_hcd: USB Universal Host Controller Interface driver [ 1.497337] PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 1.499113] i8042.c: Detected active multiplexing controller, rev 1.1. [ 1.499864] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 1.499974] serio: i8042 AUX0 port at 0x60,0x64 irq 12 [ 1.500051] serio: i8042 AUX1 port at 0x60,0x64 irq 12 [ 1.500125] serio: i8042 AUX2 port at 0x60,0x64 irq 12 [ 1.501847] serio: i8042 AUX3 port at 0x60,0x64 irq 12 [ 1.501961] mice: PS/2 mouse device common for all mice [ 1.502115] rtc_cmos 00:08: RTC can wake from S4 [ 1.502240] rtc_cmos 00:08: rtc core: registered rtc_cmos as rtc0 [ 1.502351] rtc0: alarms up to one month, y3k, 242 bytes nvram, hpet irqs [ 1.502487] device-mapper: uevent: version 1.0.3 [ 1.502620] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com [ 1.502772] device-mapper: multipath: version 1.1.1 loaded [ 1.502851] device-mapper: multipath round-robin: version 1.0.0 loaded [ 1.503133] cpuidle: using governor ladder [ 1.503306] cpuidle: using governor menu [ 1.503577] TCP cubic registered [ 1.503728] NET: Registered protocol family 10 [ 1.504034] lo: Disabled Privacy Extensions [ 1.504240] NET: Registered protocol family 17 [ 1.506205] PM: Resume from disk failed. [ 1.506215] registered taskstats version 1 [ 1.506697] Magic number: 7:690:682 [ 1.506889] rtc_cmos 00:08: setting system clock to 2011-04-04 12:41:33 UTC (1301920893) [ 1.506983] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 1.507059] EDD information not available. [ 1.507246] Freeing unused kernel memory: 912k freed [ 1.507465] Write protecting the kernel read-only data: 10240k [ 1.507747] Freeing unused kernel memory: 408k freed [ 1.508029] Freeing unused kernel memory: 1640k freed [ 1.523150] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3 [ 1.523354] udev[99]: starting version 163 [ 1.549875] ACPI: Battery Slot [BAT0] (battery present) [ 1.572805] ACPI: Battery Slot [BAT1] (battery present) [ 1.597108] ahci 0000:00:1f.2: version 3.0 [ 1.597130] alloc irq_desc for 21 on node -1 [ 1.597133] alloc kstat_irqs on node -1 [ 1.597143] ahci 0000:00:1f.2: PCI INT A -> GSI 21 (level, low) -> IRQ 21 [ 1.597295] alloc irq_desc for 45 on node -1 [ 1.597297] alloc kstat_irqs on node -1 [ 1.597309] ahci 0000:00:1f.2: irq 45 for MSI/MSI-X [ 1.597351] ahci: SSS flag set, parallel bus scan disabled [ 1.613046] e1000e: Intel(R) PRO/1000 Network Driver - 1.0.2-k4 [ 1.613135] e1000e: Copyright (c) 1999 - 2009 Intel Corporation. [ 1.613652] sdhci: Secure Digital Host Controller Interface driver [ 1.613738] sdhci: Copyright(c) Pierre Ossman [ 1.615656] sdhci-pci 0000:46:06.1: SDHCI controller found [1180:0822] (rev 25) [ 1.615770] sdhci-pci 0000:46:06.1: PCI INT B -> GSI 22 (level, low) -> IRQ 22 [ 1.616903] sdhci-pci 0000:46:06.1: Will use DMA mode even though HW doesn't fully claim to support it. [ 1.617002] sdhci-pci 0000:46:06.1: setting latency timer to 64 [ 1.617751] ahci 0000:00:1f.2: AHCI 0001.0300 32 slots 6 ports 3 Gbps 0x37 impl SATA mode [ 1.617854] ahci 0000:00:1f.2: flags: 64bit ncq sntf stag pm led clo pio slum part ems sxs apst [ 1.617954] ahci 0000:00:1f.2: setting latency timer to 64 [ 1.618128] Registered led device: mmc0:: [ 1.619161] mmc0: SDHCI controller on PCI [0000:46:06.1] using DMA [ 1.619319] firewire_ohci 0000:46:06.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20 [ 1.619414] firewire_ohci 0000:46:06.0: setting latency timer to 64 [ 1.698340] scsi0 : ahci [ 1.698612] scsi1 : ahci [ 1.698861] scsi2 : ahci [ 1.699110] scsi3 : ahci [ 1.699352] scsi4 : ahci [ 1.699597] scsi5 : ahci [ 1.700001] ata1: SATA max UDMA/133 abar m2048@0xd7527000 port 0xd7527100 irq 45 [ 1.700095] ata2: SATA max UDMA/133 abar m2048@0xd7527000 port 0xd7527180 irq 45 [ 1.700185] ata3: SATA max UDMA/133 abar m2048@0xd7527000 port 0xd7527200 irq 45 [ 1.700272] ata4: DUMMY [ 1.700344] ata5: SATA max UDMA/133 abar m2048@0xd7527000 port 0xd7527300 irq 45 [ 1.700433] ata6: SATA max UDMA/133 abar m2048@0xd7527000 port 0xd7527380 irq 45 [ 1.700568] e1000e 0000:00:19.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20 [ 1.700666] e1000e 0000:00:19.0: setting latency timer to 64 [ 1.700771] alloc irq_desc for 46 on node -1 [ 1.700772] alloc kstat_irqs on node -1 [ 1.700785] e1000e 0000:00:19.0: irq 46 for MSI/MSI-X [ 1.796057] usb 1-1: new high speed USB device using ehci_hcd and address 2 [ 1.837171] e1000e 0000:00:19.0: eth0: (PCI Express:2.5GB/s:Width x1) 88:ae:1d:b6:09:5a [ 1.837261] e1000e 0000:00:19.0: eth0: Intel(R) PRO/1000 Network Connection [ 1.837383] e1000e 0000:00:19.0: eth0: MAC: 9, PHY: 10, PBA No: 2052ff-0ff [ 1.855937] firewire_ohci: Added fw-ohci device 0000:46:06.0, OHCI v1.10, 4 IR + 4 IT contexts, quirks 0x0 [ 1.946390] hub 1-1:1.0: USB hub found [ 1.946567] hub 1-1:1.0: 6 ports detected [ 2.045459] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 2.046523] ata1.00: unexpected _GTF length (8) [ 2.046833] ata1.00: ATA-8: ST9320423AS, 0006HPM1, max UDMA/100 [ 2.046965] ata1.00: 625142448 sectors, multi 16: LBA48 NCQ (depth 31/32), AA [ 2.048296] ata1.00: unexpected _GTF length (8) [ 2.048597] ata1.00: configured for UDMA/100 [ 2.065594] scsi 0:0:0:0: Direct-Access ATA ST9320423AS 0006 PQ: 0 ANSI: 5 [ 2.065810] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 2.065824] sd 0:0:0:0: [sda] 625142448 512-byte logical blocks: (320 GB/298 GiB) [ 2.065879] sd 0:0:0:0: [sda] Write Protect is off [ 2.065881] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 2.065904] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.065972] usb 2-1: new high speed USB device using ehci_hcd and address 2 [ 2.066090] sda: sda1 sda2 sda3 sda4 < sda5 sda6 sda7 > [ 2.152936] sd 0:0:0:0: [sda] Attached SCSI disk [ 2.225693] hub 2-1:1.0: USB hub found [ 2.225878] hub 2-1:1.0: 8 ports detected [ 2.304981] usb 1-1.1: new full speed USB device using ehci_hcd and address 3 [ 2.355382] firewire_core: created device fw0: GUID 5566778811223344, S400 [ 2.496371] usb 1-1.3: new full speed USB device using ehci_hcd and address 4 [ 2.684016] usb 1-1.4: new high speed USB device using ehci_hcd and address 5 [ 2.795507] hub 1-1.4:1.0: USB hub found [ 2.795763] hub 1-1.4:1.0: 4 ports detected [ 2.813544] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 2.833245] ata2.00: unexpected _GTF length (8) [ 2.833323] ata2.00: ATAPI: hp CDDVDW TS-L633N, 0300, max UDMA/100 [ 2.854549] ata2.00: unexpected _GTF length (8) [ 2.854645] ata2.00: configured for UDMA/100 [ 2.878613] scsi 1:0:0:0: CD-ROM hp CDDVDW TS-L633N 0300 PQ: 0 ANSI: 5 [ 2.892873] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 2.892976] Uniform CD-ROM driver Revision: 3.20 [ 2.893133] sr 1:0:0:0: Attached scsi CD-ROM sr0 [ 2.893179] sr 1:0:0:0: Attached scsi generic sg1 type 5 [ 3.083009] usb 1-1.4.2: new high speed USB device using ehci_hcd and address 6 [ 3.193410] hub 1-1.4.2:1.0: USB hub found [ 3.193600] hub 1-1.4.2:1.0: 4 ports detected [ 3.242504] ata3: SATA link down (SStatus 0 SControl 300) [ 3.472038] usb 1-1.4.2.1: new low speed USB device using ehci_hcd and address 7 [ 3.611593] ata5: SATA link down (SStatus 0 SControl 300) [ 3.683522] usb 1-1.4.2.2: new low speed USB device using ehci_hcd and address 8 [ 3.804637] usbcore: registered new interface driver hiddev [ 3.807424] input: Logitech N48 as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4.2/1-1.4.2.1/1-1.4.2.1:1.0/input/input4 [ 3.807590] generic-usb 0003:046D:C001.0001: input,hidraw0: USB HID v1.00 Mouse [Logitech N48] on usb-0000:00:1a.0-1.4.2.1/input0 [ 3.812388] input: CHICONY HP Basic USB Keyboard as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4.2/1-1.4.2.2/1-1.4.2.2:1.0/input/input5 [ 3.812545] generic-usb 0003:03F0:0024.0002: input,hidraw1: USB HID v1.10 Keyboard [CHICONY HP Basic USB Keyboard] on usb-0000:00:1a.0-1.4.2.2/input0 [ 3.812651] usbcore: registered new interface driver usbhid [ 3.812730] usbhid: USB HID core driver [ 3.981928] ata6: SATA link down (SStatus 0 SControl 300) [ 4.673554] EXT4-fs (sda5): INFO: recovery required on readonly filesystem [ 4.673750] EXT4-fs (sda5): write access will be enabled during recovery [ 7.750872] EXT4-fs (sda5): recovery complete [ 7.754726] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null) [ 20.535624] udev[447]: starting version 163 [ 20.580885] lp: driver loaded but no devices found [ 20.586987] xhci_hcd 0000:45:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 20.587032] xhci_hcd 0000:45:00.0: setting latency timer to 64 [ 20.587038] xhci_hcd 0000:45:00.0: xHCI Host Controller [ 20.587100] xhci_hcd 0000:45:00.0: new USB bus registered, assigned bus number 3 [ 20.587312] xhci_hcd 0000:45:00.0: irq 19, io mem 0xd3200000 [ 20.590607] usb usb3: No SuperSpeed endpoint companion for config 1 interface 0 altsetting 0 ep 129: using minimum values [ 20.590742] xHCI xhci_add_endpoint called for root hub [ 20.590744] xHCI xhci_check_bandwidth called for root hub [ 20.590775] hub 3-0:1.0: USB hub found [ 20.590780] hub 3-0:1.0: 4 ports detected [ 20.603082] intel ips 0000:00:1f.6: Warning: CPU TDP doesn't match expected value (found 25, expected 35) [ 20.603105] alloc irq_desc for 18 on node -1 [ 20.603107] alloc kstat_irqs on node -1 [ 20.603116] intel ips 0000:00:1f.6: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 20.603244] intel ips 0000:00:1f.6: failed to get i915 symbols, graphics turbo disabled [ 20.606122] Adding 7999484k swap on /dev/sda6. Priority:-1 extents:1 across:7999484k [ 20.647383] nvidia: module license 'NVIDIA' taints kernel. [ 20.647386] Disabling lock debugging due to kernel taint [ 20.648469] lis3lv02d: laptop model unknown, using default axes configuration [ 20.649316] lis3lv02d: 8 bits sensor found [ 20.665840] intel ips 0000:00:1f.6: IPS driver initialized, MCP temp limit 65535 [ 20.715269] yenta_cardbus 0000:46:06.4: CardBus bridge found [103c:1521] [ 20.717479] tpm_tis 00:04: 1.2 TPM (device-id 0xB, rev-id 16) [ 20.735826] cfg80211: Calling CRDA to update world regulatory domain [ 20.740067] input: ST LIS3LV02DL Accelerometer as /devices/platform/lis3lv02d/input/input6 [ 20.740198] Registered led device: hp::hddprotect [ 20.740224] lis3lv02d driver loaded. [ 20.769117] cfg80211: World regulatory domain updated: [ 20.769121] (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 20.769125] (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 20.769128] (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 20.769131] (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 20.769134] (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 20.769137] (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 20.778659] ppdev: user-space parallel port driver [ 20.796995] acpi device:03: registered as cooling_device4 [ 20.797543] input: HP WMI hotkeys as /devices/virtual/input/input7 [ 20.803532] ACPI: Cant attach device [ 20.803738] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:02/LNXVIDEO:00/input/input8 [ 20.803808] ACPI: Video Device [DGFX] (multi-head: yes rom: no post: no) [ 20.860456] yenta_cardbus 0000:46:06.4: ISA IRQ mask 0x0cb8, PCI irq 22 [ 20.860460] yenta_cardbus 0000:46:06.4: Socket status: 30000810 [ 20.860464] pci_bus 0000:46: Raising subordinate bus# of parent bus (#46) from #47 to #4a [ 20.860472] yenta_cardbus 0000:46:06.4: pcmcia: parent PCI bridge window: [io 0x2000-0x2fff] [ 20.860476] yenta_cardbus 0000:46:06.4: pcmcia: parent PCI bridge window: [mem 0xd3100000-0xd31fffff] [ 20.860478] pcmcia_socket pcmcia_socket0: cs: memory probe 0xd3100000-0xd31fffff: excluding 0xd3100000-0xd310ffff [ 20.860488] yenta_cardbus 0000:46:06.4: pcmcia: parent PCI bridge window: [mem 0xd8000000-0xdbffffff pref] [ 20.860489] pcmcia_socket pcmcia_socket0: cs: memory probe 0xd8000000-0xdbffffff: excluding 0xd8000000-0xdbffffff [ 20.860759] r852 0000:46:06.3: PCI INT B -> GSI 22 (level, low) -> IRQ 22 [ 20.860765] r852 0000:46:06.3: setting latency timer to 64 [ 20.866389] iwlagn: Intel(R) Wireless WiFi Link AGN driver for Linux, in-tree: [ 20.866391] iwlagn: Copyright(c) 2003-2010 Intel Corporation [ 20.866442] iwlagn 0000:44:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 20.866451] iwlagn 0000:44:00.0: setting latency timer to 64 [ 20.866501] iwlagn 0000:44:00.0: Detected Intel(R) Centrino(R) Ultimate-N 6300 AGN, REV=0x74 [ 20.871071] r852: driver loaded succesfully [ 20.875522] HDA Intel 0000:00:1b.0: power state changed by ACPI to D0 [ 20.875567] HDA Intel 0000:00:1b.0: power state changed by ACPI to D0 [ 20.875578] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 20.875676] alloc irq_desc for 47 on node -1 [ 20.875678] alloc kstat_irqs on node -1 [ 20.875701] HDA Intel 0000:00:1b.0: irq 47 for MSI/MSI-X [ 20.875755] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 20.877078] iwlagn 0000:44:00.0: Tunable channels: 13 802.11bg, 24 802.11a channels [ 20.877155] alloc irq_desc for 48 on node -1 [ 20.877156] alloc kstat_irqs on node -1 [ 20.877196] iwlagn 0000:44:00.0: irq 48 for MSI/MSI-X [ 20.880209] type=1400 audit(1301935312.914:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient3" pid=859 comm="apparmor_parser" [ 20.880216] type=1400 audit(1301935312.914:3): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient3" pid=767 comm="apparmor_parser" [ 20.880630] type=1400 audit(1301935312.914:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=859 comm="apparmor_parser" [ 20.880638] type=1400 audit(1301935312.914:5): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=767 comm="apparmor_parser" [ 20.880864] type=1400 audit(1301935312.914:6): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=859 comm="apparmor_parser" [ 20.880874] type=1400 audit(1301935312.914:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=767 comm="apparmor_parser" [ 20.882771] type=1400 audit(1301935312.914:8): apparmor="STATUS" operation="profile_load" name="/usr/sbin/ntpd" pid=902 comm="apparmor_parser" [ 20.882778] type=1400 audit(1301935312.914:9): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/ntpd" pid=903 comm="apparmor_parser" [ 20.912342] iwlagn 0000:44:00.0: loaded firmware version 9.221.4.1 build 25532 [ 20.917181] phy0: Selected rate control algorithm 'iwl-agn-rs' [ 20.946617] pcmcia_socket pcmcia_socket0: cs: memory probe 0x0c0000-0x0fffff: excluding 0xc0000-0xfffff [ 20.946651] pcmcia_socket pcmcia_socket0: cs: memory probe 0xa0000000-0xa0ffffff: excluding 0xa0000000-0xa0ffffff [ 20.946681] pcmcia_socket pcmcia_socket0: cs: memory probe 0x60000000-0x60ffffff: excluding 0x60000000-0x60ffffff [ 21.011208] parport_pc 00:0a: reported by Plug and Play ACPI [ 21.011290] parport0: PC-style at 0x378 (0x778), irq 5, using FIFO [PCSPP,TRISTATE,COMPAT,ECP] [ 21.014188] input: HDA Intel Line In at Sep Rear Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input9 [ 21.014269] input: HDA Intel Mic at Ext Left Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input10 [ 21.014324] input: HDA Intel HP Out at Ext Left Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input11 [ 21.014382] input: HDA Intel HP Out at Sep Rear Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input12 [ 21.014585] HDA Intel 0000:01:00.1: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 21.014589] hda_intel: Disable MSI for Nvidia chipset [ 21.014639] HDA Intel 0000:01:00.1: setting latency timer to 64 [ 21.021415] Bluetooth: Core ver 2.15 [ 21.021455] NET: Registered protocol family 31 [ 21.021457] Bluetooth: HCI device and connection manager initialized [ 21.021460] Bluetooth: HCI socket layer initialized [ 21.089787] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 21.090013] usbcore: registered new interface driver btusb [ 21.098649] lp0: using parport0 (interrupt-driven). [ 21.373707] input: PS/2 Generic Mouse as /devices/platform/i8042/serio1/input/input13 [ 21.786790] pcmcia_socket pcmcia_socket0: pccard: PCMCIA card inserted into slot 0 [ 21.786800] pcmcia_socket pcmcia_socket0: cs: memory probe 0xd3110000-0xd31fffff: excluding 0xd31fe000-0xd320bfff [ 21.793679] pcmcia 0.0: pcmcia: registering new device pcmcia0.0 (IRQ: 22) [ 21.797194] BUG: unable to handle kernel paging request at ffffffffa0c8d860 [ 21.797390] IP: [] module_bug_finalize+0x7e/0xd0 [ 21.797528] PGD 1a2c067 PUD 1a30063 PMD 1187c3067 PTE 0 [ 21.797823] Oops: 0002 [#1] SMP [ 21.798004] last sysfs file: /sys/module/pcmcia/initstate [ 21.798077] CPU 1 [ 21.798136] Modules linked in: btusb tpm_infineon bluetooth snd_hda_codec_idt arc4 pcmcia iwlagn snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm iwlcore snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq nvidia(P+) ppdev joydev mac80211 hp_wmi r852 sm_common snd_timer cfg80211 nand nand_ids nand_ecc video snd_seq_device tpm_tis yenta_socket tpm mtd output parport_pc tpm_bios pcmcia_rsrc pcmcia_core hp_accel lis3lv02d input_polldev snd intel_ips psmouse serio_raw xhci_hcd intel_agp soundcore snd_page_alloc lp parport usbhid hid firewire_ohci sdhci_pci e1000e firewire_core sdhci led_class crc_itu_t ahci libahci [ 21.801983] [ 21.802053] Pid: 1089, comm: modprobe Tainted: P 2.6.35-28-generic #50-Ubuntu 1521/HP EliteBook 8540w [ 21.802145] RIP: 0010:[] [] module_bug_finalize+0x7e/0xd0 [ 21.802291] RSP: 0018:ffff8801194a3d80 EFLAGS: 00010246 [ 21.802366] RAX: ffffffffa0067698 RBX: ffffffff817d6acc RCX: 000000000000000b [ 21.802441] RDX: ffffffffa0c8d858 RSI: ffffc900110f526a RDI: ffffffff817d6acd [ 21.802516] RBP: ffff8801194a3d88 R08: ffffffffa0067520 R09: ffffc900110f5948 [ 21.802593] R10: ffffc900110f5260 R11: 000000000000000c R12: ffffc900110f53c8 [ 21.802670] R13: 0000000000000000 R14: ffffffff817a67b7 R15: 0000000000000006 [ 21.802748] FS: 00007f72c73de700(0000) GS:ffff880001e40000(0000) knlGS:0000000000000000 [ 21.802836] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 21.802909] CR2: ffffffffa0c8d860 CR3: 00000001187f3000 CR4: 00000000000006e0 [ 21.802985] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 21.804617] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 21.804692] Process modprobe (pid: 1089, threadinfo ffff8801194a2000, task ffff880118cfc4a0) [ 21.804780] Stack: [ 21.804849] 0000000000000000 ffff8801194a3df8 ffffffff8103273f ffffffff812c3970 [ 21.805094] <0> ffffffffa0067520 ffffc900110f1000 ffffc900110f5348 ffffc900110f5260 [ 21.805458] <0> ffffc900110f5948 ffff8801194a3df8 ffffffffa0067520 ffffc900110f1000 [ 21.805892] Call Trace: [ 21.805966] [] module_finalize+0x11f/0x160 [ 21.806044] [] ? generic_swap+0x0/0x30 [ 21.806122] [] load_module+0xc65/0x1140 [ 21.806199] [] ? vfs_write+0x132/0x1a0 [ 21.806274] [] sys_init_module+0x62/0x200 [ 21.806349] [] system_call_fastpath+0x16/0x1b [ 21.806424] Code: 89 d9 49 8d 34 32 f3 a6 74 43 83 c0 01 49 83 c1 40 39 d0 72 e4 eb 06 90 90 90 90 90 90 48 8b 15 09 2d 7a 00 49 8d 80 78 01 00 00 <48> 89 42 08 49 89 90 78 01 00 00 49 c7 80 80 01 00 00 f0 ab a5 [ 21.810165] RIP [] module_bug_finalize+0x7e/0xd0 [ 21.810296] RSP [ 21.810367] CR2: ffffffffa0c8d860 [ 21.810439] ---[ end trace 59bf57d2dcb14d7d ]--- [ 21.982893] EXT4-fs (sda5): re-mounted. Opts: errors=remount-ro [ 22.141883] Synaptics Touchpad, model: 1, fw: 7.2, id: 0x1c0b1, caps: 0xd44771/0xa40000/0xa0000 [ 22.186367] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio4/input/input14 [ 22.218181] BUG: unable to handle kernel paging request at ffffffffa0c8d860 [ 22.218401] IP: [] module_bug_finalize+0x7e/0xd0 [ 22.218563] PGD 1a2c067 PUD 1a30063 PMD 1187c3067 PTE 0 [ 22.218861] Oops: 0002 [#2] SMP [ 22.219043] last sysfs file: /sys/module/snd_hda_codec/initstate [ 22.219118] CPU 3 [ 22.219176] Modules linked in: btusb tpm_infineon bluetooth snd_hda_codec_idt arc4 pcmcia iwlagn snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm iwlcore snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq nvidia(P+) ppdev joydev mac80211 hp_wmi r852 sm_common snd_timer cfg80211 nand nand_ids nand_ecc video snd_seq_device tpm_tis yenta_socket tpm mtd output parport_pc tpm_bios pcmcia_rsrc pcmcia_core hp_accel lis3lv02d input_polldev snd intel_ips psmouse serio_raw xhci_hcd intel_agp soundcore snd_page_alloc lp parport usbhid hid firewire_ohci sdhci_pci e1000e firewire_core sdhci led_class crc_itu_t ahci libahci [ 22.223041] [ 22.223111] Pid: 1125, comm: modprobe Tainted: P D 2.6.35-28-generic #50-Ubuntu 1521/HP EliteBook 8540w [ 22.223204] RIP: 0010:[] [] module_bug_finalize+0x7e/0xd0 [ 22.223348] RSP: 0018:ffff88011bb7dd80 EFLAGS: 00010246 [ 22.223423] RAX: ffffffffa015d3b8 RBX: ffffffff817d6acc RCX: 000000000000000b [ 22.223500] RDX: ffffffffa0c8d858 RSI: ffffc9001113804a RDI: ffffffff817d6acd [ 22.223576] RBP: ffff88011bb7dd88 R08: ffffffffa015d240 R09: ffffc900111387b8 [ 22.223654] R10: ffffc90011138040 R11: 000000000000000c R12: ffffc900111381b8 [ 22.223731] R13: 0000000000000000 R14: ffffffff817a67b7 R15: 0000000000000006 [ 22.223809] FS: 00007fa52f1e1700(0000) GS:ffff880001ec0000(0000) knlGS:0000000000000000 [ 22.223898] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 22.223971] CR2: ffffffffa0c8d860 CR3: 0000000119c91000 CR4: 00000000000006e0 [ 22.224048] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 22.224124] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 22.224203] Process modprobe (pid: 1125, threadinfo ffff88011bb7c000, task ffff880117c496e0) [ 22.224291] Stack: [ 22.224361] 0000000000000000 ffff88011bb7ddf8 ffffffff8103273f ffffffff812c3970 [ 22.224604] <0> ffffffffa015d240 ffffc90011134000 ffffc90011138138 ffffc90011138040 [ 22.224971] <0> ffffc900111387b8 ffff88011bb7ddf8 ffffffffa015d240 ffffc90011134000 [ 22.225404] Call Trace: [ 22.225480] [] module_finalize+0x11f/0x160 [ 22.225562] [] ? generic_swap+0x0/0x30 [ 22.225641] [] load_module+0xc65/0x1140 [ 22.225721] [] sys_init_module+0x62/0x200 [ 22.225799] [] system_call_fastpath+0x16/0x1b [ 22.225874] Code: 89 d9 49 8d 34 32 f3 a6 74 43 83 c0 01 49 83 c1 40 39 d0 72 e4 eb 06 90 90 90 90 90 90 48 8b 15 09 2d 7a 00 49 8d 80 78 01 00 00 <48> 89 42 08 49 89 90 78 01 00 00 49 c7 80 80 01 00 00 f0 ab a5 [ 22.229636] RIP [] module_bug_finalize+0x7e/0xd0 [ 22.229769] RSP [ 22.229838] CR2: ffffffffa0c8d860 [ 22.229911] ---[ end trace 59bf57d2dcb14d7e ]--- [ 22.368296] BUG: unable to handle kernel paging request at ffffffffa0c8d860 [ 22.368489] IP: [] module_bug_finalize+0x7e/0xd0 [ 22.368621] PGD 1a2c067 PUD 1a30063 PMD 1187c3067 PTE 0 [ 22.368919] Oops: 0002 [#3] SMP [ 22.369101] last sysfs file: /sys/module/snd_hda_intel/initstate [ 22.369177] CPU 3 [ 22.369235] Modules linked in: btusb tpm_infineon bluetooth snd_hda_codec_idt arc4 pcmcia iwlagn snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm iwlcore snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq nvidia(P+) ppdev joydev mac80211 hp_wmi r852 sm_common snd_timer cfg80211 nand nand_ids nand_ecc video snd_seq_device tpm_tis yenta_socket tpm mtd output parport_pc tpm_bios pcmcia_rsrc pcmcia_core hp_accel lis3lv02d input_polldev snd intel_ips psmouse serio_raw xhci_hcd intel_agp soundcore snd_page_alloc lp parport usbhid hid firewire_ohci sdhci_pci e1000e firewire_core sdhci led_class crc_itu_t ahci libahci [ 22.373127] [ 22.373196] Pid: 1129, comm: modprobe Tainted: P D 2.6.35-28-generic #50-Ubuntu 1521/HP EliteBook 8540w [ 22.373286] RIP: 0010:[] [] module_bug_finalize+0x7e/0xd0 [ 22.373430] RSP: 0018:ffff88011ac0dd80 EFLAGS: 00010246 [ 22.373502] RAX: ffffffffa0c623b8 RBX: ffffffff817d6acc RCX: 000000000000000b [ 22.373576] RDX: ffffffffa0c8d858 RSI: ffffc9001114204a RDI: ffffffff817d6acd [ 22.373656] RBP: ffff88011ac0dd88 R08: ffffffffa0c62240 R09: ffffc900111427b8 [ 22.373730] R10: ffffc90011142040 R11: 000000000000000c R12: ffffc900111421b8 [ 22.373805] R13: 0000000000000000 R14: ffffffff817a67b7 R15: 0000000000000006 [ 22.373882] FS: 00007f532b66d700(0000) GS:ffff880001ec0000(0000) knlGS:0000000000000000 [ 22.373970] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 22.374045] CR2: ffffffffa0c8d860 CR3: 000000011b29c000 CR4: 00000000000006e0 [ 22.374122] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 22.374201] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 22.374277] Process modprobe (pid: 1129, threadinfo ffff88011ac0c000, task ffff880117c4c4a0) [ 22.374365] Stack: [ 22.374434] 0000000000000000 ffff88011ac0ddf8 ffffffff8103273f ffffffff812c3970 [ 22.374680] <0> ffffffffa0c62240 ffffc9001113e000 ffffc90011142138 ffffc90011142040 [ 22.375050] <0> ffffc900111427b8 ffff88011ac0ddf8 ffffffffa0c62240 ffffc9001113e000 [ 22.375477] Call Trace: [ 22.375553] [] module_finalize+0x11f/0x160 [ 22.375630] [] ? generic_swap+0x0/0x30 [ 22.375711] [] load_module+0xc65/0x1140 [ 22.375792] [] sys_init_module+0x62/0x200 [ 22.375868] [] system_call_fastpath+0x16/0x1b [ 22.375944] Code: 89 d9 49 8d 34 32 f3 a6 74 43 83 c0 01 49 83 c1 40 39 d0 72 e4 eb 06 90 90 90 90 90 90 48 8b 15 09 2d 7a 00 49 8d 80 78 01 00 00 <48> 89 42 08 49 89 90 78 01 00 00 49 c7 80 80 01 00 00 f0 ab a5 [ 22.379693] RIP [] module_bug_finalize+0x7e/0xd0 [ 22.379823] RSP [ 22.379894] CR2: ffffffffa0c8d860 [ 22.379966] ---[ end trace 59bf57d2dcb14d7f ]--- [ 22.528220] BUG: unable to handle kernel paging request at ffffffffa0c8d860 [ 22.528417] IP: [] module_bug_finalize+0x7e/0xd0 [ 22.528558] PGD 1a2c067 PUD 1a30063 PMD 1187c3067 PTE 0 [ 22.528872] Oops: 0002 [#4] SMP [ 22.529052] last sysfs file: /sys/module/snd_hda_codec/initstate [ 22.529128] CPU 3 [ 22.529187] Modules linked in: btusb tpm_infineon bluetooth snd_hda_codec_idt arc4 pcmcia iwlagn snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm iwlcore snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq nvidia(P+) ppdev joydev mac80211 hp_wmi r852 sm_common snd_timer cfg80211 nand nand_ids nand_ecc video snd_seq_device tpm_tis yenta_socket tpm mtd output parport_pc tpm_bios pcmcia_rsrc pcmcia_core hp_accel lis3lv02d input_polldev snd intel_ips psmouse serio_raw xhci_hcd intel_agp soundcore snd_page_alloc lp parport usbhid hid firewire_ohci sdhci_pci e1000e firewire_core sdhci led_class crc_itu_t ahci libahci [ 22.533045] [ 22.533116] Pid: 1140, comm: modprobe Tainted: P D 2.6.35-28-generic #50-Ubuntu 1521/HP EliteBook 8540w [ 22.533208] RIP: 0010:[] [] module_bug_finalize+0x7e/0xd0 [ 22.533355] RSP: 0018:ffff880127ea7d80 EFLAGS: 00010246 [ 22.533428] RAX: ffffffffa0c813b8 RBX: ffffffff817d6acc RCX: 000000000000000b [ 22.533502] RDX: ffffffffa0c8d858 RSI: ffffc9001114f04a RDI: ffffffff817d6acd [ 22.533578] RBP: ffff880127ea7d88 R08: ffffffffa0c81240 R09: ffffc9001114f7b8 [ 22.533657] R10: ffffc9001114f040 R11: 000000000000000c R12: ffffc9001114f1b8 [ 22.533734] R13: 0000000000000000 R14: ffffffff817a67b7 R15: 0000000000000006 [ 22.533810] FS: 00007f2de6864700(0000) GS:ffff880001ec0000(0000) knlGS:0000000000000000 [ 22.533899] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 22.533974] CR2: ffffffffa0c8d860 CR3: 000000011ba76000 CR4: 00000000000006e0 [ 22.534051] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 22.534127] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 22.534203] Process modprobe (pid: 1140, threadinfo ffff880127ea6000, task ffff880117c4db80) [ 22.534292] Stack: [ 22.534361] 0000000000000000 ffff880127ea7df8 ffffffff8103273f ffffffff812c3970 [ 22.534603] <0> ffffffffa0c81240 ffffc9001114b000 ffffc9001114f138 ffffc9001114f040 [ 22.534969] <0> ffffc9001114f7b8 ffff880127ea7df8 ffffffffa0c81240 ffffc9001114b000 [ 22.535404] Call Trace: [ 22.535480] [] module_finalize+0x11f/0x160 [ 22.535561] [] ? generic_swap+0x0/0x30 [ 22.535640] [] load_module+0xc65/0x1140 [ 22.535717] [] sys_init_module+0x62/0x200 [ 22.537351] [] system_call_fastpath+0x16/0x1b [ 22.537426] Code: 89 d9 49 8d 34 32 f3 a6 74 43 83 c0 01 49 83 c1 40 39 d0 72 e4 eb 06 90 90 90 90 90 90 48 8b 15 09 2d 7a 00 49 8d 80 78 01 00 00 <48> 89 42 08 49 89 90 78 01 00 00 49 c7 80 80 01 00 00 f0 ab a5 [ 22.541185] RIP [] module_bug_finalize+0x7e/0xd0 [ 22.541320] RSP [ 22.541391] CR2: ffffffffa0c8d860 [ 22.541462] ---[ end trace 59bf57d2dcb14d80 ]--- [ 22.677092] BUG: unable to handle kernel paging request at ffffffffa0c8d860 [ 22.677285] IP: [] module_bug_finalize+0x7e/0xd0 [ 22.677417] PGD 1a2c067 PUD 1a30063 PMD 1187c3067 PTE 0 [ 22.677744] Oops: 0002 [#5] SMP [ 22.677934] last sysfs file: /sys/module/snd_hda_codec/initstate [ 22.678050] CPU 3 [ 22.678108] Modules linked in: btusb tpm_infineon bluetooth snd_hda_codec_idt arc4 pcmcia iwlagn snd_hda_intel(+) snd_hda_codec snd_hwdep snd_pcm iwlcore snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq nvidia(P+) ppdev joydev mac80211 hp_wmi r852 sm_common snd_timer cfg80211 nand nand_ids nand_ecc video snd_seq_device tpm_tis yenta_socket tpm mtd output parport_pc tpm_bios pcmcia_rsrc pcmcia_core hp_accel lis3lv02d input_polldev snd intel_ips psmouse serio_raw xhci_hcd intel_agp soundcore snd_page_alloc lp parport usbhid hid firewire_ohci sdhci_pci e1000e firewire_core sdhci led_class crc_itu_t ahci libahci [ 22.681981] [ 22.682050] Pid: 1144, comm: modprobe Tainted: P D 2.6.35-28-generic #50-Ubuntu 1521/HP EliteBook 8540w [ 22.682140] RIP: 0010:[] [] module_bug_finalize+0x7e/0xd0 [ 22.682288] RSP: 0018:ffff88011976dd80 EFLAGS: 00010246 [ 22.682362] RAX: ffffffffa0cee3b8 RBX: ffffffff817d6acc RCX: 000000000000000b [ 22.682440] RDX: ffffffffa0c8d858 RSI: ffffc9001115904a RDI: ffffffff817d6acd [ 22.682518] RBP: ffff88011976dd88 R08: ffffffffa0cee240 R09: ffffc900111597b8 [ 22.682594] R10: ffffc90011159040 R11: 000000000000000c R12: ffffc900111591b8 [ 22.682672] R13: 0000000000000000 R14: ffffffff817a67b7 R15: 0000000000000006 [ 22.682752] FS: 00007f0d3b909700(0000) GS:ffff880001ec0000(0000) knlGS:0000000000000000 [ 22.682840] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 22.682916] CR2: ffffffffa0c8d860 CR3: 000000011acb9000 CR4: 00000000000006e0 [ 22.682993] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 22.683070] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 22.683148] Process modprobe (pid: 1144, threadinfo ffff88011976c000, task ffff880117c48000) [ 22.683236] Stack: [ 22.683305] 0000000000000000 ffff88011976ddf8 ffffffff8103273f ffffffff812c3970 [ 22.683548] <0> ffffffffa0cee240 ffffc90011155000 ffffc90011159138 ffffc90011159040 [ 22.683917] <0> ffffc900111597b8 ffff88011976ddf8 ffffffffa0cee240 ffffc90011155000 [ 22.684350] Call Trace: [ 22.684423] [] module_finalize+0x11f/0x160 [ 22.684498] [] ? generic_swap+0x0/0x30 [ 22.684575] [] load_module+0xc65/0x1140 [ 22.684652] [] sys_init_module+0x62/0x200 [ 22.684727] [] system_call_fastpath+0x16/0x1b [ 22.684803] Code: 89 d9 49 8d 34 32 f3 a6 74 43 83 c0 01 49 83 c1 40 39 d0 72 e4 eb 06 90 90 90 90 90 90 48 8b 15 09 2d 7a 00 49 8d 80 78 01 00 00 <48> 89 42 08 49 89 90 78 01 00 00 49 c7 80 80 01 00 00 f0 ab a5 [ 22.688549] RIP [] module_bug_finalize+0x7e/0xd0 [ 22.688680] RSP [ 22.688750] CR2: ffffffffa0c8d860 [ 22.688823] ---[ end trace 59bf57d2dcb14d81 ]--- [ 22.816804] EXT4-fs (sda3): mounted filesystem with ordered data mode. Opts: (null) [ 22.824579] nvidia 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 22.824662] nvidia 0000:01:00.0: setting latency timer to 64 [ 22.824743] vgaarb: device changed decodes: PCI:0000:01:00.0,olddecodes=io+mem,decodes=none:owns=io+mem [ 22.824973] NVRM: loading NVIDIA UNIX x86_64 Kernel Module 260.19.06 Mon Sep 13 04:29:19 PDT 2010 [ 24.873612] EXT4-fs (sda7): mounted filesystem with ordered data mode. Opts: (null) [ 27.367257] type=1400 audit(1301935319.414:10): apparmor="STATUS" operation="profile_load" name="/usr/share/gdm/guest-session/Xsession" pid=1381 comm="apparmor_parser" [ 27.367460] type=1400 audit(1301935319.414:11): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient3" pid=1382 comm="apparmor_parser" [ 27.367746] type=1400 audit(1301935319.414:12): apparmor="STATUS" operation="profile_load" name="/usr/lib/libvirt/virt-aa-helper" pid=1385 comm="apparmor_parser" [ 27.367972] type=1400 audit(1301935319.414:13): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1382 comm="apparmor_parser" [ 27.368338] type=1400 audit(1301935319.414:14): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=1382 comm="apparmor_parser" [ 27.369803] type=1400 audit(1301935319.414:15): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=1386 comm="apparmor_parser" [ 27.370004] type=1400 audit(1301935319.414:16): apparmor="STATUS" operation="profile_load" name="/usr/sbin/dhcpd3" pid=1387 comm="apparmor_parser" [ 27.370472] type=1400 audit(1301935319.414:17): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=1386 comm="apparmor_parser" [ 27.370952] type=1400 audit(1301935319.414:18): apparmor="STATUS" operation="profile_load" name="/usr/sbin/libvirtd" pid=1388 comm="apparmor_parser" [ 27.372068] type=1400 audit(1301935319.414:19): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/ntpd" pid=1389 comm="apparmor_parser" [ 27.682504] e1000e 0000:00:19.0: irq 46 for MSI/MSI-X [ 27.710335] BUG: unable to handle kernel paging request at ffffffffa0c8d860 [ 27.710341] IP: [] module_bug_finalize+0x7e/0xd0 [ 27.710351] PGD 1a2c067 PUD 1a30063 PMD 1187c3067 PTE 0 [ 27.710355] Oops: 0002 [#6] SMP [ 27.710358] last sysfs file: /sys/bus/acpi/drivers/NVIDIA ACPI Video Driver/uevent [ 27.710362] CPU 0 [ 27.710363] Modules linked in: btusb tpm_infineon bluetooth snd_hda_codec_idt arc4 pcmcia iwlagn snd_hda_intel snd_hda_codec snd_hwdep snd_pcm iwlcore snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq nvidia(P) ppdev joydev mac80211 hp_wmi r852 sm_common snd_timer cfg80211 nand nand_ids nand_ecc video snd_seq_device tpm_tis yenta_socket tpm mtd output parport_pc tpm_bios pcmcia_rsrc pcmcia_core hp_accel lis3lv02d input_polldev snd intel_ips psmouse serio_raw xhci_hcd intel_agp soundcore snd_page_alloc lp parport usbhid hid firewire_ohci sdhci_pci e1000e firewire_core sdhci led_class crc_itu_t ahci libahci [ 27.710407] [ 27.710411] Pid: 1601, comm: modprobe Tainted: P D 2.6.35-28-generic #50-Ubuntu 1521/HP EliteBook 8540w [ 27.710414] RIP: 0010:[] [] module_bug_finalize+0x7e/0xd0 [ 27.710419] RSP: 0018:ffff880116f57d80 EFLAGS: 00010a02 [ 27.710421] RAX: ffffffffa0b7d298 RBX: ffffffff817d6acc RCX: 0000000000000000 [ 27.710423] RDX: ffffffffa0c8d858 RSI: ffffc900121358f0 RDI: ffffffff817d6ad8 [ 27.710426] RBP: ffff880116f57d88 R08: ffffffffa0b7d120 R09: ffffc90012135e88 [ 27.710428] R10: ffffc90012135828 R11: 000000000000000c R12: ffffc90012135ac8 [ 27.710430] R13: ffffc90012135d48 R14: ffffffff817a67b7 R15: 0000000000000006 [ 27.710433] FS: 00007f53be4b8700(0000) GS:ffff880001e00000(0000) knlGS:0000000000000000 [ 27.710435] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 27.710437] CR2: ffffffffa0c8d860 CR3: 000000011794d000 CR4: 00000000000006f0 [ 27.710440] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 27.710442] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 27.710445] Process modprobe (pid: 1601, threadinfo ffff880116f56000, task ffff880116f3db80) [ 27.710447] Stack: [ 27.710448] ffffc90012135e08 ffff880116f57df8 ffffffff8103273f ffffffff812c3970 [ 27.710452] <0> ffffffffa0b7d120 ffffc900120f9000 ffffc90012135a48 ffffc90012135828 [ 27.710456] <0> ffffc900121367c8 ffff880116f57df8 ffffffffa0b7d120 ffffc900120f9000 [ 27.710460] Call Trace: [ 27.710467] [] module_finalize+0x11f/0x160 [ 27.710472] [] ? generic_swap+0x0/0x30 [ 27.710480] [] load_module+0xc65/0x1140 [ 27.710485] [] sys_init_module+0x62/0x200 [ 27.710490] [] system_call_fastpath+0x16/0x1b [ 27.710492] Code: 89 d9 49 8d 34 32 f3 a6 74 43 83 c0 01 49 83 c1 40 39 d0 72 e4 eb 06 90 90 90 90 90 90 48 8b 15 09 2d 7a 00 49 8d 80 78 01 00 00 <48> 89 42 08 49 89 90 78 01 00 00 49 c7 80 80 01 00 00 f0 ab a5 [ 27.710521] RIP [] module_bug_finalize+0x7e/0xd0 [ 27.710525] RSP [ 27.710527] CR2: ffffffffa0c8d860 [ 27.710529] ---[ end trace 59bf57d2dcb14d82 ]--- [ 27.742164] e1000e 0000:00:19.0: irq 46 for MSI/MSI-X [ 27.742509] ADDRCONF(NETDEV_UP): eth0: link is not ready Bug: 783502 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.38-8-server (buildd@allspice) (gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu3) ) #42-Ubuntu SMP Mon Apr 11 03:49:04 UTC 2011 (Ubuntu 2.6.38-8.42-server 2.6.38.2) [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-2.6.38-8-server root=UUID=7876b32f-113f-4202-b4bf-445574646268 ro rootflags=subvol=@ quiet [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) [ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000dff80000 (usable) [ 0.000000] BIOS-e820: 00000000dff8e000 - 00000000dff90000 (reserved) [ 0.000000] BIOS-e820: 00000000dff90000 - 00000000dff9e000 (ACPI data) [ 0.000000] BIOS-e820: 00000000dff9e000 - 00000000dffd0000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000dffd0000 - 00000000dffde000 (reserved) [ 0.000000] BIOS-e820: 00000000dffe0000 - 00000000e0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ffb00000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 0000000220000000 (usable) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI present. [ 0.000000] DMI: ASUS RS100-E5/PI2/P5BV-M/RS100-E5, BIOS 0211 08/14/2008 [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0x220000 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-CBFFF write-protect [ 0.000000] CC000-DFFFF uncachable [ 0.000000] E0000-EFFFF write-through [ 0.000000] F0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0E0000000 mask FE0000000 uncachable [ 0.000000] 1 base 000000000 mask E00000000 write-back [ 0.000000] 2 base 200000000 mask FE0000000 write-back [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820 update range: 00000000e0000000 - 0000000100000000 (usable) ==> (reserved) [ 0.000000] last_pfn = 0xdff80 max_arch_pfn = 0x400000000 [ 0.000000] found SMP MP-table at [ffff8800000ff780] ff780 [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] init_memory_mapping: 0000000000000000-00000000dff80000 [ 0.000000] 0000000000 - 00dfe00000 page 2M [ 0.000000] 00dfe00000 - 00dff80000 page 4k [ 0.000000] kernel direct mapping tables up to dff80000 @ 1fffa000-20000000 [ 0.000000] init_memory_mapping: 0000000100000000-0000000220000000 [ 0.000000] 0100000000 - 0220000000 page 2M [ 0.000000] kernel direct mapping tables up to 220000000 @ dff76000-dff80000 [ 0.000000] RAMDISK: 366fc000 - 37376000 [ 0.000000] ACPI: RSDP 00000000000fa480 00014 (v00 ACPIAM) [ 0.000000] ACPI: RSDT 00000000dff90000 0004C (v01 081408 RSDT2115 20080814 MSFT 00000097) [ 0.000000] ACPI: FACP 00000000dff90200 00084 (v01 081408 FACP2115 20080814 MSFT 00000097) [ 0.000000] ACPI: DSDT 00000000dff90440 05E75 (v01 S0062 S0062000 00000000 INTL 20051117) [ 0.000000] ACPI: FACS 00000000dff9e000 00040 [ 0.000000] ACPI: APIC 00000000dff90390 0006C (v01 081408 APIC2115 20080814 MSFT 00000097) [ 0.000000] ACPI: MCFG 00000000dff90400 0003C (v01 081408 OEMMCFG 20080814 MSFT 00000097) [ 0.000000] ACPI: OEMB 00000000dff9e040 00072 (v01 081408 OEMB2115 20080814 MSFT 00000097) [ 0.000000] ACPI: HPET 00000000dff962c0 00038 (v01 081408 OEMHPET 20080814 MSFT 00000097) [ 0.000000] ACPI: ASF! 00000000dff962f8 00099 (v32 LEGEND I865PASF 00000001 INTL 20051117) [ 0.000000] ACPI: EINJ 00000000dff963a0 00130 (v01 AMIER AMI_EINJ 20080814 MSFT 00000097) [ 0.000000] ACPI: BERT 00000000dff96530 00030 (v01 AMIER AMI_BERT 20080814 MSFT 00000097) [ 0.000000] ACPI: ERST 00000000dff96560 001B0 (v01 AMIER AMI_ERST 20080814 MSFT 00000097) [ 0.000000] ACPI: HEST 00000000dff96710 000A8 (v01 AMIER AMI_HEST 20080814 MSFT 00000097) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-0000000220000000 [ 0.000000] Initmem setup node 0 0000000000000000-0000000220000000 [ 0.000000] NODE_DATA [000000021fffb000 - 000000021fffffff] [ 0.000000] [ffffea0000000000-ffffea00077fffff] PMD -> [ffff880217e00000-ffff88021effffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal 0x00100000 -> 0x00220000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[3] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009f [ 0.000000] 0: 0x00000100 -> 0x000dff80 [ 0.000000] 0: 0x00100000 -> 0x00220000 [ 0.000000] On node 0 totalpages: 2096911 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 6 pages reserved [ 0.000000] DMA zone: 3921 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 14280 pages used for memmap [ 0.000000] DMA32 zone: 899000 pages, LIFO batch:31 [ 0.000000] Normal zone: 16128 pages used for memmap [ 0.000000] Normal zone: 1163520 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x808 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x02] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x03] enabled) [ 0.000000] ACPI: IOAPIC (id[0x04] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 4, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0xffffffff base: 0xfed00000 [ 0.000000] SMP: Allowing 4 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] PM: Registered nosave memory: 00000000dff80000 - 00000000dff8e000 [ 0.000000] PM: Registered nosave memory: 00000000dff8e000 - 00000000dff90000 [ 0.000000] PM: Registered nosave memory: 00000000dff90000 - 00000000dff9e000 [ 0.000000] PM: Registered nosave memory: 00000000dff9e000 - 00000000dffd0000 [ 0.000000] PM: Registered nosave memory: 00000000dffd0000 - 00000000dffde000 [ 0.000000] PM: Registered nosave memory: 00000000dffde000 - 00000000dffe0000 [ 0.000000] PM: Registered nosave memory: 00000000dffe0000 - 00000000e0000000 [ 0.000000] PM: Registered nosave memory: 00000000e0000000 - 00000000fee00000 [ 0.000000] PM: Registered nosave memory: 00000000fee00000 - 00000000fee01000 [ 0.000000] PM: Registered nosave memory: 00000000fee01000 - 00000000ffb00000 [ 0.000000] PM: Registered nosave memory: 00000000ffb00000 - 0000000100000000 [ 0.000000] Allocating PCI resources starting at e0000000 (gap: e0000000:1ee00000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:256 nr_cpumask_bits:256 nr_cpu_ids:4 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 28 pages/cpu @ffff8800dfc00000 s84416 r8192 d22080 u524288 [ 0.000000] pcpu-alloc: s84416 r8192 d22080 u524288 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 2066441 [ 0.000000] Policy zone: Normal [ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-2.6.38-8-server root=UUID=7876b32f-113f-4202-b4bf-445574646268 ro rootflags=subvol=@ quiet [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] xsave/xrstor: enabled xstate_bv 0x3, cntxt size 0x240 [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Memory: 8177972k/8912896k available (6023k kernel code, 525252k absent, 209672k reserved, 5025k data, 880k init) [ 0.000000] SLUB: Genslabs=15, HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] NR_IRQS:16640 nr_irqs:712 16 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 83886080 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 2832.622 MHz processor. [ 0.000003] Calibrating delay loop (skipped), value calculated using timer frequency.. 5665.24 BogoMIPS (lpj=28326220) [ 0.000006] pid_max: default: 32768 minimum: 301 [ 0.000026] Security Framework initialized [ 0.000041] AppArmor: AppArmor initialized [ 0.000043] Yama: becoming mindful. [ 0.010350] Dentry cache hash table entries: 1048576 (order: 11, 8388608 bytes) [ 0.013652] Inode-cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.015189] Mount-cache hash table entries: 256 [ 0.015313] Initializing cgroup subsys ns [ 0.015317] ns_cgroup deprecated: consider using the 'clone_children' flag without the ns_cgroup. [ 0.015320] Initializing cgroup subsys cpuacct [ 0.015323] Initializing cgroup subsys memory [ 0.015329] Initializing cgroup subsys devices [ 0.015331] Initializing cgroup subsys freezer [ 0.015333] Initializing cgroup subsys net_cls [ 0.015334] Initializing cgroup subsys blkio [ 0.015365] CPU: Physical Processor ID: 0 [ 0.015366] CPU: Processor Core ID: 0 [ 0.015368] mce: CPU supports 6 MCE banks [ 0.015375] CPU0: Thermal monitoring enabled (TM2) [ 0.015378] using mwait in idle threads. [ 0.017533] ACPI: Core revision 20110112 [ 0.020012] ftrace: allocating 24611 entries in 97 pages [ 0.028514] Setting APIC routing to flat [ 0.028812] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.129728] CPU0: Intel(R) Xeon(R) CPU X3360 @ 2.83GHz stepping 0a [ 0.130000] APIC calibration not consistent with PM-Timer: 109ms instead of 100ms [ 0.130000] APIC delta adjusted to PM-Timer: 2083093 (2291400) [ 0.130000] Performance Events: PEBS fmt0+, Core2 events, Intel PMU driver. [ 0.130000] ... version: 2 [ 0.130000] ... bit width: 40 [ 0.130000] ... generic registers: 2 [ 0.130000] ... value mask: 000000ffffffffff [ 0.130000] ... max period: 000000007fffffff [ 0.130000] ... fixed-purpose events: 3 [ 0.130000] ... event mask: 0000000700000003 [ 0.130000] Booting Node 0, Processors #1 #2 #3 Ok. [ 0.630006] Brought up 4 CPUs [ 0.630009] Total of 4 processors activated (22663.40 BogoMIPS). [ 0.632414] devtmpfs: initialized [ 0.632414] print_constraints: dummy: [ 0.632414] Time: 14:16:42 Date: 05/16/11 [ 0.632414] NET: Registered protocol family 16 [ 0.632414] Trying to unpack rootfs image as initramfs... [ 0.632414] ACPI: bus type pci registered [ 0.632414] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.632414] PCI: not using MMCONFIG [ 0.632414] PCI: Using configuration type 1 for base access [ 0.650417] bio: create slab at 0 [ 0.650831] ACPI: EC: Look up EC in DSDT [ 0.650914] \_SB_:_OSC evaluation returned wrong type [ 0.650915] _OSC request data:1 7 [ 0.651634] ACPI: Executed 1 blocks of module-level executable AML code [ 0.653463] ACPI: SSDT 00000000dffb2910 001D2 (v01 AMI CPU1PM 00000001 INTL 20060113) [ 0.653655] ACPI: Dynamic OEM Table Load: [ 0.653658] ACPI: SSDT (null) 001D2 (v01 AMI CPU1PM 00000001 INTL 20060113) [ 0.653787] ACPI: SSDT 00000000dffb2af0 00143 (v01 AMI CPU2PM 00000001 INTL 20060113) [ 0.653978] ACPI: Dynamic OEM Table Load: [ 0.653980] ACPI: SSDT (null) 00143 (v01 AMI CPU2PM 00000001 INTL 20060113) [ 0.654119] ACPI: SSDT 00000000dffb2c40 00143 (v01 AMI CPU3PM 00000001 INTL 20060113) [ 0.654311] ACPI: Dynamic OEM Table Load: [ 0.654313] ACPI: SSDT (null) 00143 (v01 AMI CPU3PM 00000001 INTL 20060113) [ 0.654452] ACPI: SSDT 00000000dffb2d90 00143 (v01 AMI CPU4PM 00000001 INTL 20060113) [ 0.654646] ACPI: Dynamic OEM Table Load: [ 0.654648] ACPI: SSDT (null) 00143 (v01 AMI CPU4PM 00000001 INTL 20060113) [ 0.654768] ACPI: Interpreter enabled [ 0.654770] ACPI: (supports S0 S1 S4 S5) [ 0.654784] ACPI: Using IOAPIC for interrupt routing [ 0.654801] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.655514] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in ACPI motherboard resources [ 0.693370] ACPI: No dock devices found. [ 0.693401] HEST: Table parsing has been initialized. [ 0.693404] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.693536] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.693673] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 0.693676] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 0.693678] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.693679] pci_root PNP0A08:00: host bridge window [mem 0x000d0000-0x000dffff] [ 0.693681] pci_root PNP0A08:00: host bridge window [mem 0xf0000000-0xffffffff] [ 0.693692] pci 0000:00:00.0: [8086:29f0] type 0 class 0x000600 [ 0.693728] pci 0000:00:01.0: [8086:29f1] type 1 class 0x000604 [ 0.693751] pci 0000:00:01.0: PME# supported from D0 D3hot D3cold [ 0.693753] pci 0000:00:01.0: PME# disabled [ 0.693787] pci 0000:00:1c.0: [8086:27d0] type 1 class 0x000604 [ 0.693831] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.693834] pci 0000:00:1c.0: PME# disabled [ 0.693853] pci 0000:00:1c.4: [8086:27e0] type 1 class 0x000604 [ 0.693899] pci 0000:00:1c.4: PME# supported from D0 D3hot D3cold [ 0.693902] pci 0000:00:1c.4: PME# disabled [ 0.693918] pci 0000:00:1c.5: [8086:27e2] type 1 class 0x000604 [ 0.693963] pci 0000:00:1c.5: PME# supported from D0 D3hot D3cold [ 0.693966] pci 0000:00:1c.5: PME# disabled [ 0.693982] pci 0000:00:1d.0: [8086:27c8] type 0 class 0x000c03 [ 0.694017] pci 0000:00:1d.0: reg 20: [io 0xcc00-0xcc1f] [ 0.694041] pci 0000:00:1d.1: [8086:27c9] type 0 class 0x000c03 [ 0.694074] pci 0000:00:1d.1: reg 20: [io 0xd000-0xd01f] [ 0.694098] pci 0000:00:1d.2: [8086:27ca] type 0 class 0x000c03 [ 0.694132] pci 0000:00:1d.2: reg 20: [io 0xd080-0xd09f] [ 0.694165] pci 0000:00:1d.7: [8086:27cc] type 0 class 0x000c03 [ 0.694181] pci 0000:00:1d.7: reg 10: [mem 0xfbcff800-0xfbcffbff] [ 0.694238] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.694242] pci 0000:00:1d.7: PME# disabled [ 0.694256] pci 0000:00:1e.0: [8086:244e] type 1 class 0x000604 [ 0.694304] pci 0000:00:1f.0: [8086:27b8] type 0 class 0x000601 [ 0.694376] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 1 PIO at 0280 (mask 00ff) [ 0.694379] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 2 PIO at 0ca0 (mask 0013) [ 0.694406] pci 0000:00:1f.1: [8086:27df] type 0 class 0x000101 [ 0.694417] pci 0000:00:1f.1: reg 10: [io 0x0000-0x0007] [ 0.694425] pci 0000:00:1f.1: reg 14: [io 0x0000-0x0003] [ 0.694432] pci 0000:00:1f.1: reg 18: [io 0x08f0-0x08f7] [ 0.694440] pci 0000:00:1f.1: reg 1c: [io 0x08f8-0x08fb] [ 0.694447] pci 0000:00:1f.1: reg 20: [io 0xffa0-0xffaf] [ 0.694475] pci 0000:00:1f.2: [8086:27c0] type 0 class 0x000101 [ 0.694486] pci 0000:00:1f.2: reg 10: [io 0xdc00-0xdc07] [ 0.694492] pci 0000:00:1f.2: reg 14: [io 0xd880-0xd883] [ 0.694499] pci 0000:00:1f.2: reg 18: [io 0xd800-0xd807] [ 0.694505] pci 0000:00:1f.2: reg 1c: [io 0xd480-0xd483] [ 0.694512] pci 0000:00:1f.2: reg 20: [io 0xd400-0xd40f] [ 0.694518] pci 0000:00:1f.2: reg 24: [mem 0xfbcffc00-0xfbcfffff] [ 0.694536] pci 0000:00:1f.2: PME# supported from D3hot [ 0.694539] pci 0000:00:1f.2: PME# disabled [ 0.694550] pci 0000:00:1f.3: [8086:27da] type 0 class 0x000c05 [ 0.694595] pci 0000:00:1f.3: reg 20: [io 0x0400-0x041f] [ 0.694641] pci 0000:00:01.0: PCI bridge to [bus 05-05] [ 0.694643] pci 0000:00:01.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.694646] pci 0000:00:01.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.694649] pci 0000:00:01.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.694681] pci 0000:00:1c.0: PCI bridge to [bus 04-04] [ 0.694684] pci 0000:00:1c.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.694687] pci 0000:00:1c.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.694692] pci 0000:00:1c.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.694742] pci 0000:03:00.0: [14e4:1659] type 0 class 0x000200 [ 0.694763] pci 0000:03:00.0: reg 10: [mem 0xfbff0000-0xfbffffff 64bit] [ 0.694845] pci 0000:03:00.0: PME# supported from D3hot D3cold [ 0.694849] pci 0000:03:00.0: PME# disabled [ 0.694868] pci 0000:03:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 0.694877] pci 0000:00:1c.4: PCI bridge to [bus 03-03] [ 0.694880] pci 0000:00:1c.4: bridge window [io 0xf000-0x0000] (disabled) [ 0.694884] pci 0000:00:1c.4: bridge window [mem 0xfbf00000-0xfbffffff] [ 0.694889] pci 0000:00:1c.4: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.694940] pci 0000:02:00.0: [14e4:1659] type 0 class 0x000200 [ 0.694961] pci 0000:02:00.0: reg 10: [mem 0xfbef0000-0xfbefffff 64bit] [ 0.695044] pci 0000:02:00.0: PME# supported from D3hot D3cold [ 0.695048] pci 0000:02:00.0: PME# disabled [ 0.695067] pci 0000:02:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force' [ 0.695075] pci 0000:00:1c.5: PCI bridge to [bus 02-02] [ 0.695078] pci 0000:00:1c.5: bridge window [io 0xf000-0x0000] (disabled) [ 0.695081] pci 0000:00:1c.5: bridge window [mem 0xfbe00000-0xfbefffff] [ 0.695086] pci 0000:00:1c.5: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.695115] pci 0000:01:03.0: [18ca:0020] type 0 class 0x000300 [ 0.695129] pci 0000:01:03.0: reg 10: [mem 0xf4000000-0xf7ffffff pref] [ 0.695137] pci 0000:01:03.0: reg 14: [mem 0xfbdc0000-0xfbdfffff] [ 0.695146] pci 0000:01:03.0: reg 18: [io 0xec00-0xec7f] [ 0.695188] pci 0000:01:03.0: supports D1 D2 [ 0.695223] pci 0000:00:1e.0: PCI bridge to [bus 01-01] (subtractive decode) [ 0.695227] pci 0000:00:1e.0: bridge window [io 0xe000-0xefff] [ 0.695230] pci 0000:00:1e.0: bridge window [mem 0xfbd00000-0xfbdfffff] [ 0.695234] pci 0000:00:1e.0: bridge window [mem 0xf4000000-0xf7ffffff 64bit pref] [ 0.695236] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.695238] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.695240] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.695242] pci 0000:00:1e.0: bridge window [mem 0x000d0000-0x000dffff] (subtractive decode) [ 0.695244] pci 0000:00:1e.0: bridge window [mem 0xf0000000-0xffffffff] (subtractive decode) [ 0.695261] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.695329] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P2._PRT] [ 0.695353] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P1._PRT] [ 0.695407] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P4._PRT] [ 0.695434] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P8._PRT] [ 0.695463] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P9._PRT] [ 0.695551] pci0000:00: Requesting ACPI _OSC control (0x1d) [ 0.695716] pci0000:00: ACPI _OSC control (0x19) granted [ 0.699362] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 7 10 *11 12 14 15) [ 0.699402] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 *10 11 12 14 15) [ 0.699438] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 *6 7 10 11 12 14 15) [ 0.699473] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 *5 6 7 10 11 12 14 15) [ 0.699508] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.699544] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.699580] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled. [ 0.699619] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 *7 10 11 12 14 15) [ 0.699710] vgaarb: device added: PCI:0000:01:03.0,decodes=io+mem,owns=io+mem,locks=none [ 0.699712] vgaarb: loaded [ 0.699859] SCSI subsystem initialized [ 0.699918] libata version 3.00 loaded. [ 0.700022] usbcore: registered new interface driver usbfs [ 0.700031] usbcore: registered new interface driver hub [ 0.700044] usbcore: registered new device driver usb [ 0.700063] wmi: Mapper loaded [ 0.700063] PCI: Using ACPI for IRQ routing [ 0.700063] PCI: pci_cache_line_size set to 64 bytes [ 0.700116] reserve RAM buffer: 000000000009fc00 - 000000000009ffff [ 0.700118] reserve RAM buffer: 00000000dff80000 - 00000000dfffffff [ 0.700198] NetLabel: Initializing [ 0.700200] NetLabel: domain hash size = 128 [ 0.700201] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.700210] NetLabel: unlabeled traffic allowed by default [ 0.700237] HPET: 3 timers in total, 0 timers will be used for per-cpu timer [ 0.700242] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 [ 0.700245] hpet0: 3 comparators, 64-bit 14.318180 MHz counter [ 0.720036] Switching to clocksource hpet [ 0.735705] AppArmor: AppArmor Filesystem Enabled [ 0.735734] pnp: PnP ACPI init [ 0.735748] ACPI: bus type pnp registered [ 0.735849] pnp 00:00: [bus 00-ff] [ 0.735851] pnp 00:00: [io 0x0cf8-0x0cff] [ 0.735853] pnp 00:00: [io 0x0000-0x0cf7 window] [ 0.735854] pnp 00:00: [io 0x0d00-0xffff window] [ 0.735856] pnp 00:00: [mem 0x000a0000-0x000bffff window] [ 0.735858] pnp 00:00: [mem 0x000d0000-0x000dffff window] [ 0.735859] pnp 00:00: [mem 0xe0000000-0xdfffffff window disabled] [ 0.735861] pnp 00:00: [mem 0xf0000000-0xffffffff window] [ 0.735911] pnp 00:00: Plug and Play ACPI device, IDs PNP0a08 PNP0a03 (active) [ 0.735919] pnp 00:01: [mem 0xfed14000-0xfed19fff] [ 0.735964] system 00:01: [mem 0xfed14000-0xfed19fff] has been reserved [ 0.735966] system 00:01: Plug and Play ACPI device, IDs PNP0c01 (active) [ 0.735994] pnp 00:02: [dma 4] [ 0.735995] pnp 00:02: [io 0x0000-0x000f] [ 0.735997] pnp 00:02: [io 0x0081-0x0083] [ 0.735998] pnp 00:02: [io 0x0087] [ 0.735999] pnp 00:02: [io 0x0089-0x008b] [ 0.736001] pnp 00:02: [io 0x008f] [ 0.736002] pnp 00:02: [io 0x00c0-0x00df] [ 0.736022] pnp 00:02: Plug and Play ACPI device, IDs PNP0200 (active) [ 0.736030] pnp 00:03: [io 0x0070-0x0071] [ 0.736040] pnp 00:03: [irq 8] [ 0.736062] pnp 00:03: Plug and Play ACPI device, IDs PNP0b00 (active) [ 0.736068] pnp 00:04: [io 0x0061] [ 0.736088] pnp 00:04: Plug and Play ACPI device, IDs PNP0800 (active) [ 0.736095] pnp 00:05: [io 0x00f0-0x00ff] [ 0.736099] pnp 00:05: [irq 13] [ 0.736120] pnp 00:05: Plug and Play ACPI device, IDs PNP0c04 (active) [ 0.736235] pnp 00:06: [io 0x0000-0xffffffffffffffff disabled] [ 0.736237] pnp 00:06: [io 0x0000-0xffffffffffffffff disabled] [ 0.736239] pnp 00:06: [io 0x0290-0x0297] [ 0.736271] system 00:06: [io 0x0290-0x0297] has been reserved [ 0.736274] system 00:06: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.736331] pnp 00:07: [io 0x0010-0x001f] [ 0.736333] pnp 00:07: [io 0x0022-0x003f] [ 0.736334] pnp 00:07: [io 0x0044-0x005f] [ 0.736335] pnp 00:07: [io 0x0062-0x0063] [ 0.736337] pnp 00:07: [io 0x0065-0x006f] [ 0.736338] pnp 00:07: [io 0x0072-0x007f] [ 0.736339] pnp 00:07: [io 0x0080] [ 0.736341] pnp 00:07: [io 0x0084-0x0086] [ 0.736342] pnp 00:07: [io 0x0088] [ 0.736343] pnp 00:07: [io 0x008c-0x008e] [ 0.736345] pnp 00:07: [io 0x0090-0x009f] [ 0.736348] pnp 00:07: [io 0x00a2-0x00bf] [ 0.736350] pnp 00:07: [io 0x00e0-0x00ef] [ 0.736351] pnp 00:07: [io 0x04d0-0x04d1] [ 0.736352] pnp 00:07: [io 0x0800-0x087f] [ 0.736354] pnp 00:07: [io 0x0000-0xffffffffffffffff disabled] [ 0.736355] pnp 00:07: [io 0x0480-0x04bf] [ 0.736357] pnp 00:07: [mem 0xfed1c000-0xfed1ffff] [ 0.736358] pnp 00:07: [mem 0xfed20000-0xfed3ffff] [ 0.736360] pnp 00:07: [mem 0xfed45000-0xfed89fff] [ 0.736405] system 00:07: [io 0x04d0-0x04d1] has been reserved [ 0.736407] system 00:07: [io 0x0800-0x087f] has been reserved [ 0.736409] system 00:07: [io 0x0480-0x04bf] has been reserved [ 0.736411] system 00:07: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.736413] system 00:07: [mem 0xfed20000-0xfed3ffff] has been reserved [ 0.736415] system 00:07: [mem 0xfed45000-0xfed89fff] has been reserved [ 0.736418] system 00:07: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.736460] pnp 00:08: [mem 0xfed00000-0xfed003ff] [ 0.736484] pnp 00:08: Plug and Play ACPI device, IDs PNP0103 (active) [ 0.736520] pnp 00:09: [mem 0xffb00000-0xffbfffff] [ 0.736522] pnp 00:09: [mem 0xfff00000-0xffffffff] [ 0.736544] pnp 00:09: Plug and Play ACPI device, IDs INT0800 (active) [ 0.736576] pnp 00:0a: [mem 0xffc00000-0xffefffff] [ 0.736616] system 00:0a: [mem 0xffc00000-0xffefffff] has been reserved [ 0.736618] system 00:0a: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.736640] pnp 00:0b: [io 0x0060] [ 0.736642] pnp 00:0b: [io 0x0064] [ 0.736646] pnp 00:0b: [irq 1] [ 0.736674] pnp 00:0b: Plug and Play ACPI device, IDs PNP0303 PNP030b (active) [ 0.736714] pnp 00:0c: [irq 12] [ 0.736736] pnp 00:0c: Plug and Play ACPI device, IDs PNP0f03 PNP0f13 (active) [ 0.736927] pnp 00:0d: [irq 4] [ 0.736929] pnp 00:0d: [dma 0 disabled] [ 0.736931] pnp 00:0d: [io 0x03f8-0x03ff] [ 0.736981] pnp 00:0d: Plug and Play ACPI device, IDs PNP0501 (active) [ 0.737168] pnp 00:0e: [irq 3] [ 0.737170] pnp 00:0e: [dma 0 disabled] [ 0.737171] pnp 00:0e: [io 0x02f8-0x02ff] [ 0.737220] pnp 00:0e: Plug and Play ACPI device, IDs PNP0501 (active) [ 0.737279] pnp 00:0f: [mem 0xfec00000-0xfec00fff] [ 0.737281] pnp 00:0f: [mem 0xfee00000-0xfee00fff] [ 0.737315] system 00:0f: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.737317] system 00:0f: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.737319] system 00:0f: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.737353] pnp 00:10: [mem 0xe0000000-0xefffffff] [ 0.737391] system 00:10: [mem 0xe0000000-0xefffffff] has been reserved [ 0.737394] system 00:10: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.737515] pnp 00:11: [mem 0x00000000-0x0009ffff] [ 0.737517] pnp 00:11: [mem 0x000c0000-0x000cffff] [ 0.737519] pnp 00:11: [mem 0x000e0000-0x000fffff] [ 0.737520] pnp 00:11: [mem 0x00100000-0xdfffffff] [ 0.737522] pnp 00:11: [mem 0x00000000-0xffffffffffffffff disabled] [ 0.737563] system 00:11: [mem 0x00000000-0x0009ffff] could not be reserved [ 0.737565] system 00:11: [mem 0x000c0000-0x000cffff] has been reserved [ 0.737567] system 00:11: [mem 0x000e0000-0x000fffff] could not be reserved [ 0.737569] system 00:11: [mem 0x00100000-0xdfffffff] could not be reserved [ 0.737572] system 00:11: Plug and Play ACPI device, IDs PNP0c01 (active) [ 0.737667] pnp: PnP ACPI: found 18 devices [ 0.737669] ACPI: ACPI bus type pnp unregistered [ 0.739808] Switched to NOHz mode on CPU #3 [ 0.739865] Switched to NOHz mode on CPU #2 [ 0.739904] Switched to NOHz mode on CPU #0 [ 0.739972] Switched to NOHz mode on CPU #1 [ 0.743451] pci 0000:00:1c.0: BAR 14: assigned [mem 0xf0000000-0xf01fffff] [ 0.743454] pci 0000:00:1c.0: BAR 15: assigned [mem 0xf0200000-0xf03fffff 64bit pref] [ 0.743457] pci 0000:00:1c.4: BAR 15: assigned [mem 0xf0400000-0xf05fffff 64bit pref] [ 0.743460] pci 0000:00:1c.5: BAR 15: assigned [mem 0xf0600000-0xf07fffff 64bit pref] [ 0.743462] pci 0000:00:1c.0: BAR 13: assigned [io 0x1000-0x1fff] [ 0.743464] pci 0000:00:1c.4: BAR 13: assigned [io 0x2000-0x2fff] [ 0.743466] pci 0000:00:1c.5: BAR 13: assigned [io 0x3000-0x3fff] [ 0.743468] pci 0000:00:01.0: PCI bridge to [bus 05-05] [ 0.743470] pci 0000:00:01.0: bridge window [io disabled] [ 0.743472] pci 0000:00:01.0: bridge window [mem disabled] [ 0.743475] pci 0000:00:01.0: bridge window [mem pref disabled] [ 0.743478] pci 0000:00:1c.0: PCI bridge to [bus 04-04] [ 0.743480] pci 0000:00:1c.0: bridge window [io 0x1000-0x1fff] [ 0.743484] pci 0000:00:1c.0: bridge window [mem 0xf0000000-0xf01fffff] [ 0.743487] pci 0000:00:1c.0: bridge window [mem 0xf0200000-0xf03fffff 64bit pref] [ 0.743492] pci 0000:00:1c.4: PCI bridge to [bus 03-03] [ 0.743494] pci 0000:00:1c.4: bridge window [io 0x2000-0x2fff] [ 0.743498] pci 0000:00:1c.4: bridge window [mem 0xfbf00000-0xfbffffff] [ 0.743501] pci 0000:00:1c.4: bridge window [mem 0xf0400000-0xf05fffff 64bit pref] [ 0.743505] pci 0000:00:1c.5: PCI bridge to [bus 02-02] [ 0.743508] pci 0000:00:1c.5: bridge window [io 0x3000-0x3fff] [ 0.743512] pci 0000:00:1c.5: bridge window [mem 0xfbe00000-0xfbefffff] [ 0.743515] pci 0000:00:1c.5: bridge window [mem 0xf0600000-0xf07fffff 64bit pref] [ 0.743521] pci 0000:00:1e.0: PCI bridge to [bus 01-01] [ 0.743523] pci 0000:00:1e.0: bridge window [io 0xe000-0xefff] [ 0.743527] pci 0000:00:1e.0: bridge window [mem 0xfbd00000-0xfbdfffff] [ 0.743530] pci 0000:00:1e.0: bridge window [mem 0xf4000000-0xf7ffffff 64bit pref] [ 0.743543] pci 0000:00:01.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.743546] pci 0000:00:01.0: setting latency timer to 64 [ 0.743550] pci 0000:00:1c.0: enabling device (0104 -> 0107) [ 0.743553] pci 0000:00:1c.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.743557] pci 0000:00:1c.0: setting latency timer to 64 [ 0.743561] pci 0000:00:1c.4: enabling device (0106 -> 0107) [ 0.743564] pci 0000:00:1c.4: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.743566] pci 0000:00:1c.4: setting latency timer to 64 [ 0.743571] pci 0000:00:1c.5: enabling device (0106 -> 0107) [ 0.743575] pci 0000:00:1c.5: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 0.743578] pci 0000:00:1c.5: setting latency timer to 64 [ 0.743583] pci 0000:00:1e.0: setting latency timer to 64 [ 0.743587] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 0.743588] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 0.743590] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.743592] pci_bus 0000:00: resource 7 [mem 0x000d0000-0x000dffff] [ 0.743593] pci_bus 0000:00: resource 8 [mem 0xf0000000-0xffffffff] [ 0.743595] pci_bus 0000:04: resource 0 [io 0x1000-0x1fff] [ 0.743597] pci_bus 0000:04: resource 1 [mem 0xf0000000-0xf01fffff] [ 0.743599] pci_bus 0000:04: resource 2 [mem 0xf0200000-0xf03fffff 64bit pref] [ 0.743601] pci_bus 0000:03: resource 0 [io 0x2000-0x2fff] [ 0.743602] pci_bus 0000:03: resource 1 [mem 0xfbf00000-0xfbffffff] [ 0.743604] pci_bus 0000:03: resource 2 [mem 0xf0400000-0xf05fffff 64bit pref] [ 0.743606] pci_bus 0000:02: resource 0 [io 0x3000-0x3fff] [ 0.743608] pci_bus 0000:02: resource 1 [mem 0xfbe00000-0xfbefffff] [ 0.743610] pci_bus 0000:02: resource 2 [mem 0xf0600000-0xf07fffff 64bit pref] [ 0.743611] pci_bus 0000:01: resource 0 [io 0xe000-0xefff] [ 0.743613] pci_bus 0000:01: resource 1 [mem 0xfbd00000-0xfbdfffff] [ 0.743615] pci_bus 0000:01: resource 2 [mem 0xf4000000-0xf7ffffff 64bit pref] [ 0.743617] pci_bus 0000:01: resource 4 [io 0x0000-0x0cf7] [ 0.743618] pci_bus 0000:01: resource 5 [io 0x0d00-0xffff] [ 0.743620] pci_bus 0000:01: resource 6 [mem 0x000a0000-0x000bffff] [ 0.743622] pci_bus 0000:01: resource 7 [mem 0x000d0000-0x000dffff] [ 0.743623] pci_bus 0000:01: resource 8 [mem 0xf0000000-0xffffffff] [ 0.743652] NET: Registered protocol family 2 [ 0.743840] IP route cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.744953] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 0.747985] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 0.748404] TCP: Hash tables configured (established 524288 bind 65536) [ 0.748406] TCP reno registered [ 0.748419] UDP hash table entries: 4096 (order: 5, 131072 bytes) [ 0.748483] UDP-Lite hash table entries: 4096 (order: 5, 131072 bytes) [ 0.748650] NET: Registered protocol family 1 [ 0.748755] pci 0000:01:03.0: Boot video device [ 0.748758] PCI: CLS 32 bytes, default 64 [ 0.748761] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) [ 0.748763] Placing 64MB software IO TLB between ffff8800dbc00000 - ffff8800dfc00000 [ 0.748764] software IO TLB at phys 0xdbc00000 - 0xdfc00000 [ 0.749140] audit: initializing netlink socket (disabled) [ 0.749150] type=2000 audit(1305555401.740:1): initialized [ 0.759657] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 0.761103] VFS: Disk quotas dquot_6.5.2 [ 0.761145] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.761628] fuse init (API version 7.16) [ 0.761695] msgmni has been set to 15972 [ 0.761939] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.761979] io scheduler noop registered [ 0.761981] io scheduler deadline registered (default) [ 0.762011] io scheduler cfq registered [ 0.762093] pcieport 0000:00:01.0: setting latency timer to 64 [ 0.762120] pcieport 0000:00:01.0: irq 40 for MSI/MSI-X [ 0.762161] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.762191] pcieport 0000:00:1c.0: irq 41 for MSI/MSI-X [ 0.762252] pcieport 0000:00:1c.4: setting latency timer to 64 [ 0.762282] pcieport 0000:00:1c.4: irq 42 for MSI/MSI-X [ 0.762341] pcieport 0000:00:1c.5: setting latency timer to 64 [ 0.762370] pcieport 0000:00:1c.5: irq 43 for MSI/MSI-X [ 0.762442] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.762488] pciehp 0000:00:1c.0:pcie04: HPC vendor_id 8086 device_id 27d0 ss_vid 1043 ss_did 819e [ 0.762516] pciehp 0000:00:1c.0:pcie04: service driver pciehp loaded [ 0.762525] pciehp 0000:00:1c.4:pcie04: HPC vendor_id 8086 device_id 27e0 ss_vid 1043 ss_did 819e [ 0.762543] pciehp 0000:00:1c.4:pcie04: service driver pciehp loaded [ 0.762551] pciehp 0000:00:1c.5:pcie04: HPC vendor_id 8086 device_id 27e2 ss_vid 1043 ss_did 819e [ 0.762574] pciehp 0000:00:1c.5:pcie04: service driver pciehp loaded [ 0.762580] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.762618] intel_idle: MWAIT substates: 0x22220 [ 0.762619] intel_idle: does not run on family 6 model 23 [ 0.762700] input: Power Button as /devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input0 [ 0.762706] ACPI: Power Button [PWRB] [ 0.762740] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 [ 0.762742] ACPI: Power Button [PWRF] [ 0.762873] ACPI: acpi_idle registered with cpuidle [ 0.764032] APEI: Can not request iomem region <00000000dffb20ea-00000000dffb20ec> for GARs. [ 0.764089] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled [ 0.784582] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 0.830039] Freeing initrd memory: 12776k freed [ 0.960469] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A [ 1.011879] 00:0d: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 1.032401] 00:0e: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A [ 1.032590] Linux agpgart interface v0.103 [ 1.033483] brd: module loaded [ 1.033887] loop: module loaded [ 1.033950] i2c-core: driver [adp5520] using legacy suspend method [ 1.033952] i2c-core: driver [adp5520] using legacy resume method [ 1.034028] ata_piix 0000:00:1f.1: version 2.13 [ 1.034042] ata_piix 0000:00:1f.1: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 1.034068] ata_piix 0000:00:1f.1: setting latency timer to 64 [ 1.034359] scsi0 : ata_piix [ 1.034455] scsi1 : ata_piix [ 1.035153] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0xffa0 irq 14 [ 1.035155] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0xffa8 irq 15 [ 1.035176] ata_piix 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.035181] ata_piix 0000:00:1f.2: MAP [ P0 P2 P1 P3 ] [ 1.035227] ata_piix 0000:00:1f.2: setting latency timer to 64 [ 1.035477] scsi2 : ata_piix [ 1.035556] scsi3 : ata_piix [ 1.036374] ata3: SATA max UDMA/133 cmd 0xdc00 ctl 0xd880 bmdma 0xd400 irq 19 [ 1.036376] ata4: SATA max UDMA/133 cmd 0xd800 ctl 0xd480 bmdma 0xd408 irq 19 [ 1.036628] Fixed MDIO Bus: probed [ 1.036649] PPP generic driver version 2.4.2 [ 1.036680] tun: Universal TUN/TAP device driver, 1.6 [ 1.036681] tun: (C) 1999-2004 Max Krasnyansky [ 1.036751] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 1.036766] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 1.036792] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 1.036795] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 1.036825] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 1 [ 1.036868] ehci_hcd 0000:00:1d.7: using broken periodic workaround [ 1.036877] ehci_hcd 0000:00:1d.7: debug port 1 [ 1.040763] ehci_hcd 0000:00:1d.7: cache line size of 32 is not supported [ 1.040775] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xfbcff800 [ 1.060011] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 1.060148] hub 1-0:1.0: USB hub found [ 1.060153] hub 1-0:1.0: 6 ports detected [ 1.060216] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 1.060225] uhci_hcd: USB Universal Host Controller Interface driver [ 1.060261] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 1.060265] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 1.060268] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 1.060302] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2 [ 1.070034] uhci_hcd 0000:00:1d.0: irq 23, io base 0x0000cc00 [ 1.070152] hub 2-0:1.0: USB hub found [ 1.070157] hub 2-0:1.0: 2 ports detected [ 1.070214] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.070219] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 1.070221] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 1.070254] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 3 [ 1.070290] uhci_hcd 0000:00:1d.1: irq 19, io base 0x0000d000 [ 1.070378] hub 3-0:1.0: USB hub found [ 1.070381] hub 3-0:1.0: 2 ports detected [ 1.070429] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 1.070433] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 1.070436] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 1.070461] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 4 [ 1.070503] uhci_hcd 0000:00:1d.2: irq 18, io base 0x0000d080 [ 1.070588] hub 4-0:1.0: USB hub found [ 1.070591] hub 4-0:1.0: 2 ports detected [ 1.070700] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f03:PS2M] at 0x60,0x64 irq 1,12 [ 1.073181] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 1.073189] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 1.073307] mousedev: PS/2 mouse device common for all mice [ 1.073408] rtc_cmos 00:03: RTC can wake from S4 [ 1.073517] rtc_cmos 00:03: rtc core: registered rtc_cmos as rtc0 [ 1.073539] rtc0: alarms up to one month, y3k, 114 bytes nvram, hpet irqs [ 1.073647] device-mapper: uevent: version 1.0.3 [ 1.073707] device-mapper: ioctl: 4.19.1-ioctl (2011-01-07) initialised: dm-devel@redhat.com [ 1.073816] device-mapper: multipath: version 1.2.0 loaded [ 1.073823] device-mapper: multipath round-robin: version 1.0.0 loaded [ 1.073981] cpuidle: using governor ladder [ 1.073987] cpuidle: using governor menu [ 1.074195] TCP cubic registered [ 1.074281] NET: Registered protocol family 10 [ 1.074651] NET: Registered protocol family 17 [ 1.074668] Registering the dns_resolver key type [ 1.075187] PM: Hibernation image not present or could not be loaded. [ 1.075200] registered taskstats version 1 [ 1.075398] Magic number: 11:399:283 [ 1.075518] rtc_cmos 00:03: setting system clock to 2011-05-16 14:16:42 UTC (1305555402) [ 1.075521] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 1.075522] EDD information not available. [ 1.099404] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input2 [ 1.240329] ata3.00: ATA-8: WDC WD1503FYYS-02W0B0, 01.01D01, max UDMA/133 [ 1.240332] ata3.00: 2930277168 sectors, multi 16: LBA48 NCQ (depth 0/32) [ 1.240477] ata3.01: ATA-8: WDC WD1503FYYS-02W0B0, 01.01D01, max UDMA/133 [ 1.240480] ata3.01: 2930277168 sectors, multi 16: LBA48 NCQ (depth 0/32) [ 1.260350] ata3.00: configured for UDMA/133 [ 1.280237] ata3.01: configured for UDMA/133 [ 1.280343] scsi 2:0:0:0: Direct-Access ATA WDC WD1503FYYS-0 01.0 PQ: 0 ANSI: 5 [ 1.280489] sd 2:0:0:0: Attached scsi generic sg0 type 0 [ 1.280493] sd 2:0:0:0: [sda] 2930277168 512-byte logical blocks: (1.50 TB/1.36 TiB) [ 1.280563] sd 2:0:0:0: [sda] Write Protect is off [ 1.280566] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.280604] scsi 2:0:1:0: Direct-Access ATA WDC WD1503FYYS-0 01.0 PQ: 0 ANSI: 5 [ 1.280609] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.280720] sd 2:0:1:0: [sdb] 2930277168 512-byte logical blocks: (1.50 TB/1.36 TiB) [ 1.280724] sd 2:0:1:0: Attached scsi generic sg1 type 0 [ 1.280789] sd 2:0:1:0: [sdb] Write Protect is off [ 1.280791] sd 2:0:1:0: [sdb] Mode Sense: 00 3a 00 00 [ 1.285048] sd 2:0:1:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.306064] sda: sda1 sda2 < sda5 > sda3 [ 1.319105] sd 2:0:0:0: [sda] Attached SCSI disk [ 1.319107] sdb: sdb1 [ 1.319297] sd 2:0:1:0: [sdb] Attached SCSI disk [ 1.320580] Freeing unused kernel memory: 880k freed [ 1.320789] Write protecting the kernel read-only data: 10240k [ 1.321207] Freeing unused kernel memory: 104k freed [ 1.325137] Freeing unused kernel memory: 1416k freed [ 1.340924] <30>udev[77]: starting version 167 [ 1.357836] Btrfs loaded [ 1.371852] tg3.c:v3.116 (December 3, 2010) [ 1.371868] tg3 0000:03:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 1.371877] tg3 0000:03:00.0: setting latency timer to 64 [ 1.380033] usb 1-4: new high speed USB device using ehci_hcd and address 2 [ 1.536646] Initializing USB Mass Storage driver... [ 1.536785] scsi4 : usb-storage 1-4:1.0 [ 1.536892] usbcore: registered new interface driver usb-storage [ 1.536893] USB Mass Storage support registered. [ 1.565803] tg3 0000:03:00.0: eth0: Tigon3 [partno(BCM95721) rev 4201] (PCI Express) MAC address bc:ae:c5:27:b1:6f [ 1.565806] tg3 0000:03:00.0: eth0: attached PHY is 5750 (10/100/1000Base-T Ethernet) (WireSpeed[1]) [ 1.565809] tg3 0000:03:00.0: eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1] [ 1.565811] tg3 0000:03:00.0: eth0: dma_rwctrl[76180000] dma_mask[64-bit] [ 1.565828] tg3 0000:02:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 1.565836] tg3 0000:02:00.0: setting latency timer to 64 [ 1.601240] device fsid 2423f112fb37678-686264745544bfb4 devid 2 transid 5185 /dev/sdb1 [ 1.656312] device fsid 2423f112fb37678-686264745544bfb4 devid 1 transid 5185 /dev/sda3 [ 1.725936] tg3 0000:02:00.0: eth1: Tigon3 [partno(BCM95721) rev 4201] (PCI Express) MAC address bc:ae:c5:27:b2:37 [ 1.725939] tg3 0000:02:00.0: eth1: attached PHY is 5750 (10/100/1000Base-T Ethernet) (WireSpeed[1]) [ 1.725942] tg3 0000:02:00.0: eth1: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1] [ 1.725944] tg3 0000:02:00.0: eth1: dma_rwctrl[76180000] dma_mask[64-bit] [ 1.737211] device fsid 2423f112fb37678-686264745544bfb4 devid 1 transid 5185 /dev/disk/by-uuid/7876b32f-113f-4202-b4bf-445574646268 [ 1.750051] Refined TSC clocksource calibration: 2833.010 MHz. [ 1.750055] Switching to clocksource tsc [ 2.530853] scsi 4:0:0:0: CD-ROM ASUS SBC-06D1S-U A301 PQ: 0 ANSI: 0 [ 2.535586] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 2.535589] cdrom: Uniform CD-ROM driver Revision: 3.20 [ 2.535691] sr 4:0:0:0: Attached scsi CD-ROM sr0 [ 2.535739] sr 4:0:0:0: Attached scsi generic sg2 type 5 [ 3.143783] <30>udev[324]: starting version 167 [ 3.172131] lp: driver loaded but no devices found [ 3.186355] EDAC MC: Ver: 2.1.0 Apr 11 2011 [ 3.211004] Adding 8387580k swap on /dev/sda5. Priority:-1 extents:1 across:8387580k [ 3.213599] EDAC MC0: Giving out device to 'i3200_edac' 'i3200': DEV 0000:00:00.0 [ 3.218559] intel_rng: FWH not detected [ 3.218910] xgifb: module is from the staging directory, the quality is unknown, you have been warned. [ 3.220374] [ 3.220375] XGIfb_init_module [ 3.220376] XGIfb: Mode 'none' not supported anymore. Using default. [ 3.220382] XGIfb: Options (null) [ 3.220407] XGIfb: Relocate IO address: ec00 [00000000] [ 3.220421] XGIfb:chipid = 31 [ 3.220424] No ROM [ 3.220424] XGIfb: Video ROM not found [ 3.220430] XGIfb: SR14=51 DramSzie 2000000 ChannelNum 1 [ 3.225726] XGIfb: Framebuffer at 0xf4000000, mapped to 0xffffc90011a00000, size 32768k [ 3.225728] XGIfb: MMIO at 0xfbdc0000, mapped to 0xffffc90013a80000, size 256k [ 3.225729] XGIfb: XGIInitNew() ...12345 [ 3.225736] BUG: unable to handle kernel NULL pointer dereference at 0000000000000065 [ 3.225741] IP: [] ReadVBIOSTablData+0x29/0x410 [xgifb] [ 3.225751] PGD 20b5aa067 PUD 20b5a9067 PMD 0 [ 3.225756] Oops: 0000 [#1] SMP [ 3.225759] last sysfs file: /sys/devices/virtual/block/loop4/removable [ 3.225763] CPU 0 [ 3.225764] Modules linked in: xgifb(C+) intel_rng(-) hed i3200_edac edac_core lp parport usb_storage tg3 btrfs zlib_deflate libcrc32c [ 3.225775] [ 3.225777] Pid: 414, comm: modprobe Tainted: G C 2.6.38-8-server #42-Ubuntu ASUS RS100-E5/PI2/P5BV-M/RS100-E5 [ 3.225784] RIP: 0010:[] [] ReadVBIOSTablData+0x29/0x410 [xgifb] [ 3.225793] RSP: 0018:ffff88020c81f8c8 EFLAGS: 00010246 [ 3.225795] RAX: 0000000000000000 RBX: ffffffffa012eb80 RCX: 000000000003ffff [ 3.225798] RDX: 0000000000000000 RSI: ffff88020c81f8d8 RDI: 0000000000000031 [ 3.225802] RBP: ffff88020c81f8c8 R08: 0000000000000000 R09: 000000000000c0c3 [ 3.225805] R10: 0000000000000000 R11: 0000000000000003 R12: 00000000fffffffb [ 3.225808] R13: ffff88020e9b6090 R14: ffff88020e9b6200 R15: 000000000040506a [ 3.225811] FS: 00007fddc20b9720(0000) GS:ffff8800dfc00000(0000) knlGS:0000000000000000 [ 3.225815] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 3.225819] CR2: 0000000000000065 CR3: 000000020b5a0000 CR4: 00000000000406f0 [ 3.225822] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 3.225826] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 3.225829] Process modprobe (pid: 414, threadinfo ffff88020c81e000, task ffff88020cde96e0) [ 3.225833] Stack: [ 3.225835] ffff88020c81fca8 ffffffffa01132da ffff88021fffcc00 000000000000ec44 [ 3.225840] 000000000000ec54 000000000000ec40 000000000000ec4e 000000000000ec42 [ 3.225845] ffff880200000041 000000000000ec4a 000000000000ec46 000000000000ec47 [ 3.225851] Call Trace: [ 3.225857] [] XGIInitNew+0x1ea/0xaa0 [xgifb] [ 3.225864] [] ? build_zonelists+0x1f0/0x290 [ 3.225869] [] ? put_dec+0x59/0x60 [ 3.225873] [] ? vsnprintf+0x35e/0x620 [ 3.225881] [] xgifb_probe+0x716/0x1051 [xgifb] [ 3.225885] [] local_pci_probe+0x5f/0xd0 [ 3.225889] [] pci_device_probe+0x129/0x130 [ 3.225895] [] ? driver_sysfs_add+0x7a/0xb0 [ 3.225898] [] really_probe+0x68/0x190 [ 3.225902] [] driver_probe_device+0x45/0x70 [ 3.225906] [] __driver_attach+0xab/0xb0 [ 3.225910] [] ? __driver_attach+0x0/0xb0 [ 3.225914] [] bus_for_each_dev+0x5e/0x90 [ 3.225918] [] driver_attach+0x1e/0x20 [ 3.225921] [] bus_add_driver+0xc5/0x280 [ 3.225927] [] ? xgifb_init_module+0x0/0xb55 [xgifb] [ 3.225931] [] driver_register+0x76/0x140 [ 3.225937] [] ? xgifb_init_module+0x0/0xb55 [xgifb] [ 3.225941] [] __pci_register_driver+0x56/0xd0 [ 3.225946] [] ? xgifb_init_module+0x0/0xb55 [xgifb] [ 3.225952] [] xgifb_init_module+0x7f/0xb55 [xgifb] [ 3.225958] [] do_one_initcall+0x45/0x190 [ 3.225964] [] sys_init_module+0xfb/0x250 [ 3.225968] [] system_call_fastpath+0x16/0x1b [ 3.225971] Code: 00 00 55 48 89 e5 0f 1f 44 00 00 48 8b 96 f0 00 00 00 40 80 ff 31 74 0a c9 c3 0f 1f 84 00 00 00 00 00 66 c7 86 b8 00 00 00 00 00 <0f> b6 42 65 a8 01 74 e5 66 c7 86 b8 00 00 00 01 00 0f b6 8a 16 [ 3.226002] RIP [] ReadVBIOSTablData+0x29/0x410 [xgifb] [ 3.226009] RSP [ 3.226012] CR2: 0000000000000065 [ 3.226015] ---[ end trace 6a41527bece9f972 ]--- [ 3.227554] ioremap error for 0xdffb2000-0xdffb3000, requested 0x10, got 0x0 [ 3.227561] GHES: probe of GHES.0 failed with error -5 [ 3.227571] ioremap error for 0xdffb2000-0xdffb3000, requested 0x10, got 0x0 [ 3.237165] GHES: probe of GHES.1 failed with error -5 [ 3.251498] leds_ss4200: no LED devices found [ 3.673732] type=1400 audit(1305555405.086:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient" pid=528 comm="apparmor_parser" [ 3.673745] type=1400 audit(1305555405.086:3): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=527 comm="apparmor_parser" [ 3.674409] type=1400 audit(1305555405.086:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=528 comm="apparmor_parser" [ 3.674418] type=1400 audit(1305555405.086:5): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=527 comm="apparmor_parser" [ 3.674836] type=1400 audit(1305555405.086:6): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=528 comm="apparmor_parser" [ 3.674849] type=1400 audit(1305555405.086:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=527 comm="apparmor_parser" [ 3.675423] type=1400 audit(1305555405.086:8): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=526 comm="apparmor_parser" [ 3.676095] type=1400 audit(1305555405.086:9): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=526 comm="apparmor_parser" [ 3.676525] type=1400 audit(1305555405.086:10): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=526 comm="apparmor_parser" [ 3.865656] input: ImPS/2 Generic Wheel Mouse as /devices/platform/i8042/serio1/input/input3 [ 4.004531] tg3 0000:03:00.0: irq 44 for MSI/MSI-X [ 4.175914] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 4.210041] EDAC MC0: UE page 0x0, offset 0x0, grain 1073741824, row 2, labels ":": i3200 UE [ 4.210051] EDAC MC0: UE page 0x0, offset 0x0, grain 1073741824, row 4, labels ":": i3200 UE [ 4.407207] vesafb: cannot reserve video memory at 0xf4000000 [ 4.407715] vesafb: framebuffer at 0xf4000000, mapped to 0xffffc90013b00000, using 3072k, total 3072k [ 4.407720] vesafb: mode is 1024x768x32, linelength=4096, pages=0 [ 4.407723] vesafb: scrolling: redraw [ 4.407726] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0 [ 4.407850] Console: switching to colour frame buffer device 128x48 [ 4.528749] fb0: VESA VGA frame buffer device [ 4.551117] device fsid 2423f112fb37678-686264745544bfb4 devid 2 transid 5185 /dev/sdb1 [ 4.553004] device fsid 2423f112fb37678-686264745544bfb4 devid 2 transid 5185 /dev/sdb1 [ 4.581489] device fsid 2423f112fb37678-686264745544bfb4 devid 1 transid 5185 /dev/sda3 [ 4.583319] device fsid 2423f112fb37678-686264745544bfb4 devid 1 transid 5185 /dev/sda3 [ 5.210028] EDAC MC0: UE page 0x0, offset 0x0, grain 1073741824, row 0, labels ":": i3200 UE [ 5.211919] EDAC MC0: UE page 0x0, offset 0x0, grain 1073741824, row 4, labels ":": i3200 UE [ 6.210048] EDAC MC0: UE page 0x0, offset 0x0, grain 1073741824, row 0, labels ":": i3200 UE [ 6.211923] EDAC MC0: UE page 0x0, offset 0x0, grain 1073741824, row 4, labels ":": i3200 UE [ 7.070109] tg3 0000:03:00.0: eth0: Link is up at 1000 Mbps, full duplex [ 7.071598] tg3 0000:03:00.0: eth0: Flow control is on for TX and on for RX [ 7.073806] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ 7.210022] EDAC MC0: UE page 0x0, offset 0x0, grain 1073741824, row 0, labels ":": i3200 UE [ 7.210026] EDAC MC0: UE page 0x0, offset 0x0, grain 1073741824, row 4, labels ":": i3200 UE [ 7.230313] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 7.236558] device fsid 2423f112fb37678-686264745544bfb4 devid 2 transid 5185 /dev/sdb1 [ 7.486411] type=1400 audit(1305555408.896:11): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=698 comm="apparmor_parser" [ 7.490021] type=1400 audit(1305555408.906:12): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=698 comm="apparmor_parser" [ 7.493981] type=1400 audit(1305555408.906:13): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=698 comm="apparmor_parser" [ 7.523807] type=1400 audit(1305555408.936:14): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=699 comm="apparmor_parser" Bug: 798795 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.38-8-generic (buildd@allspice) (gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu3) ) #42-Ubuntu SMP Mon Apr 11 03:31:24 UTC 2011 (Ubuntu 2.6.38-8.42-generic 2.6.38.2) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-2.6.38-8-generic root=UUID=AC42C9A542C9749C loop=/ubuntu/disks/root.disk ro quiet splash [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009d000 (usable) [ 0.000000] BIOS-e820: 000000000009d000 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000bf682000 (usable) [ 0.000000] BIOS-e820: 00000000bf682000 - 00000000bf6bf000 (reserved) [ 0.000000] BIOS-e820: 00000000bf6bf000 - 00000000bf75d000 (usable) [ 0.000000] BIOS-e820: 00000000bf75d000 - 00000000bf7bf000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000bf7bf000 - 00000000bf7e1000 (usable) [ 0.000000] BIOS-e820: 00000000bf7e1000 - 00000000bf7ff000 (ACPI data) [ 0.000000] BIOS-e820: 00000000bf7ff000 - 00000000bf800000 (usable) [ 0.000000] BIOS-e820: 00000000bf800000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000feb00000 - 00000000feb04000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) [ 0.000000] BIOS-e820: 00000000fed10000 - 00000000fed14000 (reserved) [ 0.000000] BIOS-e820: 00000000fed18000 - 00000000fed1a000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1b000 - 00000000fed20000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ffe80000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 0000000140000000 (usable) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI 2.6 present. [ 0.000000] DMI: Hewlett-Packard HP Pavilion dv6 Notebook PC/3659, BIOS F.17 02/06/2010 [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0x140000 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-EFFFF write-through [ 0.000000] F0000-FFFFF write-combining [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask F80000000 write-back [ 0.000000] 1 base 0FFE00000 mask FFFE00000 write-protect [ 0.000000] 2 base 080000000 mask FC0000000 write-back [ 0.000000] 3 base 0BF800000 mask FFF800000 uncachable [ 0.000000] 4 base 100000000 mask FC0000000 write-back [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] last_pfn = 0xbf800 max_arch_pfn = 0x400000000 [ 0.000000] initial memory mapped : 0 - 20000000 [ 0.000000] init_memory_mapping: 0000000000000000-00000000bf800000 [ 0.000000] 0000000000 - 00bf800000 page 2M [ 0.000000] kernel direct mapping tables up to bf800000 @ 1fffc000-20000000 [ 0.000000] init_memory_mapping: 0000000100000000-0000000140000000 [ 0.000000] 0100000000 - 0140000000 page 2M [ 0.000000] kernel direct mapping tables up to 140000000 @ bf7db000-bf7e1000 [ 0.000000] RAMDISK: 366e4000 - 3736a000 [ 0.000000] ACPI: RSDP 00000000000fe020 00024 (v02 HPQOEM) [ 0.000000] ACPI: XSDT 00000000bf7fe120 00074 (v01 HPQOEM SLIC-MPC 00000001 01000013) [ 0.000000] ACPI: FACP 00000000bf7fc000 000F4 (v04 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: DSDT 00000000bf7eb000 0DC73 (v02 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: FACS 00000000bf76f000 00040 [ 0.000000] ACPI: ASF! 00000000bf7fd000 000A5 (v32 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: HPET 00000000bf7fb000 00038 (v01 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: APIC 00000000bf7fa000 0008C (v02 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: MCFG 00000000bf7f9000 0003C (v01 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: SLIC 00000000bf7ea000 00176 (v01 HPQOEM SLIC-MPC 00000001 SLIC 000F4240) [ 0.000000] ACPI: BOOT 00000000bf7e7000 00028 (v01 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: ASPT 00000000bf7e3000 00034 (v04 HPQOEM SLIC-MPC 00000001 MSFT 01000013) [ 0.000000] ACPI: WDRT 00000000bf7e2000 00047 (v01 HPQOEM SLIC-MPC 00000000 MSFT 01000013) [ 0.000000] ACPI: SSDT 00000000bf7e1000 009F1 (v01 PmRef CpuPm 00003000 INTL 20051117) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at 0000000000000000-0000000140000000 [ 0.000000] Initmem setup node 0 0000000000000000-0000000140000000 [ 0.000000] NODE_DATA [000000013fffb000 - 000000013fffffff] [ 0.000000] [ffffea0000000000-ffffea00045fffff] PMD -> [ffff88013be00000-ffff88013f5fffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] DMA32 0x00001000 -> 0x00100000 [ 0.000000] Normal 0x00100000 -> 0x00140000 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[6] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009d [ 0.000000] 0: 0x00000100 -> 0x000bf682 [ 0.000000] 0: 0x000bf6bf -> 0x000bf75d [ 0.000000] 0: 0x000bf7bf -> 0x000bf7e1 [ 0.000000] 0: 0x000bf7ff -> 0x000bf800 [ 0.000000] 0: 0x00100000 -> 0x00140000 [ 0.000000] On node 0 totalpages: 1046224 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 6 pages reserved [ 0.000000] DMA zone: 3919 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 14280 pages used for memmap [ 0.000000] DMA32 zone: 765819 pages, LIFO batch:31 [ 0.000000] Normal zone: 3584 pages used for memmap [ 0.000000] Normal zone: 258560 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x02] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x04] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x06] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x05] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x06] lapic_id[0x03] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x07] lapic_id[0x05] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x08] lapic_id[0x07] enabled) [ 0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 8 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] PM: Registered nosave memory: 000000000009d000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] PM: Registered nosave memory: 00000000bf682000 - 00000000bf6bf000 [ 0.000000] PM: Registered nosave memory: 00000000bf75d000 - 00000000bf7bf000 [ 0.000000] PM: Registered nosave memory: 00000000bf7e1000 - 00000000bf7ff000 [ 0.000000] PM: Registered nosave memory: 00000000bf800000 - 00000000c0000000 [ 0.000000] PM: Registered nosave memory: 00000000c0000000 - 00000000e0000000 [ 0.000000] PM: Registered nosave memory: 00000000e0000000 - 00000000f0000000 [ 0.000000] PM: Registered nosave memory: 00000000f0000000 - 00000000feb00000 [ 0.000000] PM: Registered nosave memory: 00000000feb00000 - 00000000feb04000 [ 0.000000] PM: Registered nosave memory: 00000000feb04000 - 00000000fec00000 [ 0.000000] PM: Registered nosave memory: 00000000fec00000 - 00000000fec01000 [ 0.000000] PM: Registered nosave memory: 00000000fec01000 - 00000000fed10000 [ 0.000000] PM: Registered nosave memory: 00000000fed10000 - 00000000fed14000 [ 0.000000] PM: Registered nosave memory: 00000000fed14000 - 00000000fed18000 [ 0.000000] PM: Registered nosave memory: 00000000fed18000 - 00000000fed1a000 [ 0.000000] PM: Registered nosave memory: 00000000fed1a000 - 00000000fed1b000 [ 0.000000] PM: Registered nosave memory: 00000000fed1b000 - 00000000fed20000 [ 0.000000] PM: Registered nosave memory: 00000000fed20000 - 00000000fee00000 [ 0.000000] PM: Registered nosave memory: 00000000fee00000 - 00000000fee01000 [ 0.000000] PM: Registered nosave memory: 00000000fee01000 - 00000000ffe80000 [ 0.000000] PM: Registered nosave memory: 00000000ffe80000 - 0000000100000000 [ 0.000000] Allocating PCI resources starting at c0000000 (gap: c0000000:20000000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:256 nr_cpumask_bits:256 nr_cpu_ids:8 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 28 pages/cpu @ffff8800bf400000 s84416 r8192 d22080 u262144 [ 0.000000] pcpu-alloc: s84416 r8192 d22080 u262144 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 4 5 6 7 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 1028298 [ 0.000000] Policy zone: Normal [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.38-8-generic root=UUID=AC42C9A542C9749C loop=/ubuntu/disks/root.disk ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) [ 0.000000] Checking aperture... [ 0.000000] No AGP bridge found [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing! [ 0.000000] Memory: 4034328k/5242880k available (5940k kernel code, 1057984k absent, 150568k reserved, 5017k data, 956k init) [ 0.000000] SLUB: Genslabs=15, HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] RCU-based detection of stalled CPUs is disabled. [ 0.000000] NR_IRQS:16640 nr_irqs:744 16 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] Console: colour VGA+ 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] allocated 41943040 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.010000] Detected 1596.094 MHz processor. [ 0.000003] Calibrating delay loop (skipped), value calculated using timer frequency.. 3192.18 BogoMIPS (lpj=15960940) [ 0.000008] pid_max: default: 32768 minimum: 301 [ 0.000034] Security Framework initialized [ 0.000049] AppArmor: AppArmor initialized [ 0.000051] Yama: becoming mindful. [ 0.000540] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.001680] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.002157] Mount-cache hash table entries: 256 [ 0.002283] Initializing cgroup subsys ns [ 0.002287] ns_cgroup deprecated: consider using the 'clone_children' flag without the ns_cgroup. [ 0.002290] Initializing cgroup subsys cpuacct [ 0.002295] Initializing cgroup subsys memory [ 0.002302] Initializing cgroup subsys devices [ 0.002305] Initializing cgroup subsys freezer [ 0.002307] Initializing cgroup subsys net_cls [ 0.002309] Initializing cgroup subsys blkio [ 0.002341] CPU: Physical Processor ID: 0 [ 0.002342] CPU: Processor Core ID: 0 [ 0.002348] mce: CPU supports 9 MCE banks [ 0.002360] CPU0: Thermal monitoring enabled (TM1) [ 0.002367] using mwait in idle threads. [ 0.004927] ACPI: Core revision 20110112 [ 0.034513] ftrace: allocating 24314 entries in 96 pages [ 0.044701] Setting APIC routing to flat [ 0.045075] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.144997] CPU0: Intel(R) Core(TM) i7 CPU Q 720 @ 1.60GHz stepping 05 [ 0.257726] Performance Events: PEBS fmt1+, Nehalem events, Intel PMU driver. [ 0.257734] ... version: 3 [ 0.257735] ... bit width: 48 [ 0.257737] ... generic registers: 4 [ 0.257739] ... value mask: 0000ffffffffffff [ 0.257741] ... max period: 000000007fffffff [ 0.257743] ... fixed-purpose events: 3 [ 0.257744] ... event mask: 000000070000000f [ 0.258294] Booting Node 0, Processors #1 #2 #3 #4 #5 #6 #7 Ok. [ 1.946420] Brought up 8 CPUs [ 1.946424] Total of 8 processors activated (25538.29 BogoMIPS). [ 1.950604] devtmpfs: initialized [ 1.951812] print_constraints: dummy: [ 1.951844] Time: 2:02:17 Date: 06/17/11 [ 1.951882] NET: Registered protocol family 16 [ 1.951984] Trying to unpack rootfs image as initramfs... [ 1.951998] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it [ 1.952001] ACPI: bus type pci registered [ 1.952092] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 1.952096] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820 [ 2.010914] PCI: Using configuration type 1 for base access [ 2.011852] bio: create slab at 0 [ 2.014784] ACPI: EC: Look up EC in DSDT [ 2.017388] ACPI: Executed 1 blocks of module-level executable AML code [ 2.086232] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query ignored [ 2.092685] ACPI: SSDT 00000000bf691a98 002DA (v01 PmRef Cpu0Ist 00003000 INTL 20051117) [ 2.093366] ACPI: Dynamic OEM Table Load: [ 2.093370] ACPI: SSDT (null) 002DA (v01 PmRef Cpu0Ist 00003000 INTL 20051117) [ 2.093601] ACPI: SSDT 00000000bf690618 005CD (v01 PmRef Cpu0Cst 00003001 INTL 20051117) [ 2.094260] ACPI: Dynamic OEM Table Load: [ 2.094263] ACPI: SSDT (null) 005CD (v01 PmRef Cpu0Cst 00003001 INTL 20051117) [ 2.206491] ACPI: SSDT 00000000bf691718 00303 (v01 PmRef ApIst 00003000 INTL 20051117) [ 2.207213] ACPI: Dynamic OEM Table Load: [ 2.207216] ACPI: SSDT (null) 00303 (v01 PmRef ApIst 00003000 INTL 20051117) [ 2.246240] ACPI: SSDT 00000000bf68fd98 00119 (v01 PmRef ApCst 00003000 INTL 20051117) [ 2.246944] ACPI: Dynamic OEM Table Load: [ 2.246947] ACPI: SSDT (null) 00119 (v01 PmRef ApCst 00003000 INTL 20051117) [ 2.264585] Freeing initrd memory: 12824k freed [ 2.311935] ACPI: Interpreter enabled [ 2.311941] ACPI: (supports S0 S3 S4 S5) [ 2.311993] ACPI: Using IOAPIC for interrupt routing [ 2.342715] ACPI: EC: GPE = 0x16, I/O: command/status = 0x66, data = 0x62 [ 2.342942] ACPI: No dock devices found. [ 2.342944] HEST: Table not found. [ 2.342947] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 2.343491] \_SB_.PCI0:_OSC invalid UUID [ 2.343494] _OSC request data:1 8 1f [ 2.343499] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-fe]) [ 2.344391] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 2.344394] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 2.344397] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 2.344401] pci_root PNP0A08:00: host bridge window [mem 0xc0000000-0xfeafffff] [ 2.344416] pci 0000:00:00.0: [8086:d132] type 0 class 0x000600 [ 2.344473] pci 0000:00:03.0: [8086:d138] type 1 class 0x000604 [ 2.344521] pci 0000:00:03.0: PME# supported from D0 D3hot D3cold [ 2.344525] pci 0000:00:03.0: PME# disabled [ 2.344555] pci 0000:00:08.0: [8086:d155] type 0 class 0x000880 [ 2.344616] pci 0000:00:08.1: [8086:d156] type 0 class 0x000880 [ 2.344677] pci 0000:00:08.2: [8086:d157] type 0 class 0x000880 [ 2.344735] pci 0000:00:08.3: [8086:d158] type 0 class 0x000880 [ 2.344803] pci 0000:00:10.0: [8086:d150] type 0 class 0x000880 [ 2.344853] pci 0000:00:10.1: [8086:d151] type 0 class 0x000880 [ 2.344947] pci 0000:00:1a.0: [8086:3b3c] type 0 class 0x000c03 [ 2.345299] pci 0000:00:1a.0: reg 10: [mem 0xdb105c00-0xdb105fff] [ 2.347321] pci 0000:00:1a.0: PME# supported from D0 D3hot D3cold [ 2.347330] pci 0000:00:1a.0: PME# disabled [ 2.347372] pci 0000:00:1b.0: [8086:3b56] type 0 class 0x000403 [ 2.347394] pci 0000:00:1b.0: reg 10: [mem 0xdb100000-0xdb103fff 64bit] [ 2.347461] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 2.347470] pci 0000:00:1b.0: PME# disabled [ 2.347500] pci 0000:00:1c.0: [8086:3b42] type 1 class 0x000604 [ 2.347564] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 2.347572] pci 0000:00:1c.0: PME# disabled [ 2.347603] pci 0000:00:1c.1: [8086:3b44] type 1 class 0x000604 [ 2.347667] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold [ 2.347675] pci 0000:00:1c.1: PME# disabled [ 2.347708] pci 0000:00:1c.4: [8086:3b4a] type 1 class 0x000604 [ 2.347772] pci 0000:00:1c.4: PME# supported from D0 D3hot D3cold [ 2.347781] pci 0000:00:1c.4: PME# disabled [ 2.347813] pci 0000:00:1c.7: [8086:3b50] type 1 class 0x000604 [ 2.347877] pci 0000:00:1c.7: PME# supported from D0 D3hot D3cold [ 2.347886] pci 0000:00:1c.7: PME# disabled [ 2.347926] pci 0000:00:1d.0: [8086:3b34] type 0 class 0x000c03 [ 2.348269] pci 0000:00:1d.0: reg 10: [mem 0xdb105800-0xdb105bff] [ 2.350303] pci 0000:00:1d.0: PME# supported from D0 D3hot D3cold [ 2.350312] pci 0000:00:1d.0: PME# disabled [ 2.350342] pci 0000:00:1e.0: [8086:2448] type 1 class 0x000604 [ 2.350426] pci 0000:00:1f.0: [8086:3b03] type 0 class 0x000601 [ 2.350567] pci 0000:00:1f.2: [8086:3b2f] type 0 class 0x000106 [ 2.350592] pci 0000:00:1f.2: reg 10: [io 0x7048-0x704f] [ 2.350606] pci 0000:00:1f.2: reg 14: [io 0x7054-0x7057] [ 2.350619] pci 0000:00:1f.2: reg 18: [io 0x7040-0x7047] [ 2.350633] pci 0000:00:1f.2: reg 1c: [io 0x7050-0x7053] [ 2.350647] pci 0000:00:1f.2: reg 20: [io 0x7020-0x703f] [ 2.350660] pci 0000:00:1f.2: reg 24: [mem 0xdb105000-0xdb1057ff] [ 2.350706] pci 0000:00:1f.2: PME# supported from D3hot [ 2.350715] pci 0000:00:1f.2: PME# disabled [ 2.350750] pci 0000:00:1f.3: [8086:3b30] type 0 class 0x000c05 [ 2.350771] pci 0000:00:1f.3: reg 10: [mem 0xdb106000-0xdb1060ff 64bit] [ 2.350799] pci 0000:00:1f.3: reg 20: [io 0x7000-0x701f] [ 2.350886] pci 0000:01:00.0: [10de:0a28] type 0 class 0x000300 [ 2.350897] pci 0000:01:00.0: reg 10: [mem 0xd2000000-0xd2ffffff] [ 2.350908] pci 0000:01:00.0: reg 14: [mem 0xc0000000-0xcfffffff 64bit pref] [ 2.350919] pci 0000:01:00.0: reg 1c: [mem 0xd0000000-0xd1ffffff 64bit pref] [ 2.350927] pci 0000:01:00.0: reg 24: [io 0x6000-0x607f] [ 2.350935] pci 0000:01:00.0: reg 30: [mem 0xfff80000-0xffffffff pref] [ 2.350978] pci 0000:01:00.1: [10de:0be2] type 0 class 0x000403 [ 2.350989] pci 0000:01:00.1: reg 10: [mem 0xd3000000-0xd3003fff] [ 2.351062] pci 0000:00:03.0: PCI bridge to [bus 01-01] [ 2.351066] pci 0000:00:03.0: bridge window [io 0x6000-0x6fff] [ 2.351070] pci 0000:00:03.0: bridge window [mem 0xd2000000-0xd30fffff] [ 2.351076] pci 0000:00:03.0: bridge window [mem 0xc0000000-0xd1ffffff 64bit pref] [ 2.351339] pci 0000:02:00.0: [8086:4239] type 0 class 0x000280 [ 2.351578] pci 0000:02:00.0: reg 10: [mem 0xda100000-0xda101fff 64bit] [ 2.352594] pci 0000:02:00.0: PME# supported from D0 D3hot D3cold [ 2.352635] pci 0000:02:00.0: PME# disabled [ 2.352952] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 2.352961] pci 0000:00:1c.0: bridge window [io 0x5000-0x5fff] [ 2.352970] pci 0000:00:1c.0: bridge window [mem 0xda100000-0xdb0fffff] [ 2.352981] pci 0000:00:1c.0: bridge window [mem 0xd3100000-0xd40fffff 64bit pref] [ 2.353070] pci 0000:03:00.0: [10ec:8168] type 0 class 0x000200 [ 2.353169] pci 0000:03:00.0: reg 10: [io 0x4000-0x40ff] [ 2.353204] pci 0000:03:00.0: reg 18: [mem 0xd4104000-0xd4104fff 64bit pref] [ 2.353229] pci 0000:03:00.0: reg 20: [mem 0xd4100000-0xd4103fff 64bit pref] [ 2.353247] pci 0000:03:00.0: reg 30: [mem 0xffff0000-0xffffffff pref] [ 2.353298] pci 0000:03:00.0: supports D1 D2 [ 2.353300] pci 0000:03:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 2.353311] pci 0000:03:00.0: PME# disabled [ 2.353351] pci 0000:00:1c.1: PCI bridge to [bus 03-03] [ 2.353360] pci 0000:00:1c.1: bridge window [io 0x4000-0x4fff] [ 2.353369] pci 0000:00:1c.1: bridge window [mem 0xd9100000-0xda0fffff] [ 2.353381] pci 0000:00:1c.1: bridge window [mem 0xd4100000-0xd50fffff 64bit pref] [ 2.353494] pci 0000:04:00.0: [197b:2380] type 0 class 0x000c00 [ 2.353569] pci 0000:04:00.0: reg 10: [mem 0xd8100000-0xd81007ff] [ 2.353621] pci 0000:04:00.0: reg 14: [mem 0xd8100d00-0xd8100d7f] [ 2.353777] pci 0000:04:00.0: reg 20: [mem 0xd8100c80-0xd8100cff] [ 2.353829] pci 0000:04:00.0: reg 24: [mem 0xd8100c00-0xd8100c7f] [ 2.354146] pci 0000:04:00.1: [197b:2382] type 0 class 0x000880 [ 2.354208] pci 0000:04:00.1: reg 10: [mem 0xd8100b00-0xd8100bff] [ 2.354665] pci 0000:04:00.2: [197b:2381] type 0 class 0x000805 [ 2.354711] pci 0000:04:00.2: reg 10: [mem 0xd8100a00-0xd8100aff] [ 2.355163] pci 0000:04:00.3: [197b:2383] type 0 class 0x000880 [ 2.355208] pci 0000:04:00.3: reg 10: [mem 0xd8100900-0xd81009ff] [ 2.355660] pci 0000:04:00.4: [197b:2384] type 0 class 0x000880 [ 2.355726] pci 0000:04:00.4: reg 10: [mem 0xd8100800-0xd81008ff] [ 2.356201] pci 0000:00:1c.4: PCI bridge to [bus 04-04] [ 2.356210] pci 0000:00:1c.4: bridge window [io 0x3000-0x3fff] [ 2.356219] pci 0000:00:1c.4: bridge window [mem 0xd8100000-0xd90fffff] [ 2.356230] pci 0000:00:1c.4: bridge window [mem 0xd5100000-0xd60fffff 64bit pref] [ 2.356283] pci 0000:00:1c.7: PCI bridge to [bus 05-08] [ 2.356292] pci 0000:00:1c.7: bridge window [io 0x2000-0x2fff] [ 2.356301] pci 0000:00:1c.7: bridge window [mem 0xd7100000-0xd80fffff] [ 2.356312] pci 0000:00:1c.7: bridge window [mem 0xd6100000-0xd70fffff 64bit pref] [ 2.356382] pci 0000:00:1e.0: PCI bridge to [bus 09-09] (subtractive decode) [ 2.356391] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 2.356400] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 2.356412] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 2.356415] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 2.356418] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 2.356421] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 2.356424] pci 0000:00:1e.0: bridge window [mem 0xc0000000-0xfeafffff] (subtractive decode) [ 2.356458] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 2.356608] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P2._PRT] [ 2.356659] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P1._PRT] [ 2.356682] ACPI Warning: For \_SB_.PCI0.P0P1._PRT: Return Package has no elements (empty) (20110112/nspredef-456) [ 2.356723] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP01._PRT] [ 2.356767] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP02._PRT] [ 2.356821] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP05._PRT] [ 2.356893] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP08._PRT] [ 2.356998] \_SB_.PCI0:_OSC invalid UUID [ 2.357000] _OSC request data:1 19 1f [ 2.365956] ACPI: PCI Root Bridge [CPBG] (domain 0000 [bus ff]) [ 2.366050] pci 0000:ff:00.0: [8086:2c52] type 0 class 0x000600 [ 2.366075] pci 0000:ff:00.1: [8086:2c81] type 0 class 0x000600 [ 2.366101] pci 0000:ff:02.0: [8086:2c90] type 0 class 0x000600 [ 2.366127] pci 0000:ff:02.1: [8086:2c91] type 0 class 0x000600 [ 2.366156] pci 0000:ff:03.0: [8086:2c98] type 0 class 0x000600 [ 2.366178] pci 0000:ff:03.1: [8086:2c99] type 0 class 0x000600 [ 2.366200] pci 0000:ff:03.4: [8086:2c9c] type 0 class 0x000600 [ 2.366223] pci 0000:ff:04.0: [8086:2ca0] type 0 class 0x000600 [ 2.366245] pci 0000:ff:04.1: [8086:2ca1] type 0 class 0x000600 [ 2.366266] pci 0000:ff:04.2: [8086:2ca2] type 0 class 0x000600 [ 2.366288] pci 0000:ff:04.3: [8086:2ca3] type 0 class 0x000600 [ 2.366312] pci 0000:ff:05.0: [8086:2ca8] type 0 class 0x000600 [ 2.366335] pci 0000:ff:05.1: [8086:2ca9] type 0 class 0x000600 [ 2.366357] pci 0000:ff:05.2: [8086:2caa] type 0 class 0x000600 [ 2.366379] pci 0000:ff:05.3: [8086:2cab] type 0 class 0x000600 [ 2.367058] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 *5 6 7 10 12 14 15) [ 2.367128] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 *5 6 7 11 12 14 15) [ 2.367197] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 7 10 12 14 15) *11 [ 2.367266] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 *5 6 7 11 12 14 15) [ 2.367330] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled. [ 2.367399] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 *11 12 14 15) [ 2.367466] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 7 *10 12 14 15) [ 2.367534] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 5 6 7 11 12 14 15) *0, disabled. [ 2.367662] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none [ 2.367675] vgaarb: loaded [ 2.367862] SCSI subsystem initialized [ 2.367915] libata version 3.00 loaded. [ 2.367965] usbcore: registered new interface driver usbfs [ 2.367975] usbcore: registered new interface driver hub [ 2.367998] usbcore: registered new device driver usb [ 2.368221] wmi: Mapper loaded [ 2.368223] PCI: Using ACPI for IRQ routing [ 2.368226] PCI: pci_cache_line_size set to 64 bytes [ 2.368489] reserve RAM buffer: 000000000009d000 - 000000000009ffff [ 2.368491] reserve RAM buffer: 00000000bf682000 - 00000000bfffffff [ 2.368495] reserve RAM buffer: 00000000bf75d000 - 00000000bfffffff [ 2.368498] reserve RAM buffer: 00000000bf7e1000 - 00000000bfffffff [ 2.368500] reserve RAM buffer: 00000000bf800000 - 00000000bfffffff [ 2.368606] NetLabel: Initializing [ 2.368608] NetLabel: domain hash size = 128 [ 2.368609] NetLabel: protocols = UNLABELED CIPSOv4 [ 2.368621] NetLabel: unlabeled traffic allowed by default [ 2.368707] HPET: 8 timers in total, 5 timers will be used for per-cpu timer [ 2.368717] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 40, 41, 42, 43, 44, 0 [ 2.368724] hpet0: 8 comparators, 64-bit 14.318180 MHz counter [ 2.376043] hpet: hpet2 irq 40 for MSI [ 2.376165] hpet: hpet3 irq 41 for MSI [ 2.396148] hpet: hpet4 irq 42 for MSI [ 2.406157] hpet: hpet5 irq 43 for MSI [ 2.416145] hpet: hpet6 irq 44 for MSI [ 2.436183] Switching to clocksource hpet [ 2.443007] AppArmor: AppArmor Filesystem Enabled [ 2.443030] pnp: PnP ACPI init [ 2.443047] ACPI: bus type pnp registered [ 2.443848] pnp 00:00: [bus 00-fe] [ 2.443851] pnp 00:00: [io 0x0000-0x0cf7 window] [ 2.443854] pnp 00:00: [io 0x0cf8-0x0cff] [ 2.443856] pnp 00:00: [io 0x0d00-0xffff window] [ 2.443859] pnp 00:00: [mem 0x000a0000-0x000bffff window] [ 2.443861] pnp 00:00: [mem 0x000c0000-0x000c3fff window] [ 2.443864] pnp 00:00: [mem 0x000c4000-0x000c7fff window] [ 2.443866] pnp 00:00: [mem 0x000c8000-0x000cbfff window] [ 2.443869] pnp 00:00: [mem 0x000cc000-0x000cffff window] [ 2.443871] pnp 00:00: [mem 0x000d0000-0x000d3fff window] [ 2.443874] pnp 00:00: [mem 0x000d4000-0x000d7fff window] [ 2.443876] pnp 00:00: [mem 0x000d8000-0x000dbfff window] [ 2.443879] pnp 00:00: [mem 0x000dc000-0x000dffff window] [ 2.443881] pnp 00:00: [mem 0x000e0000-0x000e3fff window] [ 2.443884] pnp 00:00: [mem 0x000e4000-0x000e7fff window] [ 2.443886] pnp 00:00: [mem 0x000e8000-0x000ebfff window] [ 2.443889] pnp 00:00: [mem 0x000ec000-0x000effff window] [ 2.443891] pnp 00:00: [mem 0x000f0000-0x000fffff window] [ 2.443894] pnp 00:00: [mem 0xc0000000-0xfeafffff window] [ 2.443896] pnp 00:00: [mem 0xfed40000-0xfed44fff window] [ 2.443963] pnp 00:00: Plug and Play ACPI device, IDs PNP0a08 PNP0a03 (active) [ 2.444051] pnp 00:01: [io 0x0380-0x038e] [ 2.444064] pnp 00:01: [irq 4] [ 2.444098] pnp 00:01: Plug and Play ACPI device, IDs ENE0100 (active) [ 2.444112] pnp 00:02: [io 0x0000-0x001f] [ 2.444115] pnp 00:02: [io 0x0081-0x0091] [ 2.444117] pnp 00:02: [io 0x0093-0x009f] [ 2.444119] pnp 00:02: [io 0x00c0-0x00df] [ 2.444121] pnp 00:02: [dma 4] [ 2.444156] pnp 00:02: Plug and Play ACPI device, IDs PNP0200 (active) [ 2.444166] pnp 00:03: [mem 0xff000000-0xffffffff] [ 2.444198] pnp 00:03: Plug and Play ACPI device, IDs INT0800 (active) [ 2.444344] pnp 00:04: [mem 0xfed00000-0xfed003ff] [ 2.444380] pnp 00:04: Plug and Play ACPI device, IDs PNP0103 (active) [ 2.444393] pnp 00:05: [io 0x00f0] [ 2.444403] pnp 00:05: [irq 13] [ 2.444437] pnp 00:05: Plug and Play ACPI device, IDs PNP0c04 (active) [ 2.444450] pnp 00:06: [io 0x002e-0x002f] [ 2.444453] pnp 00:06: [io 0x004e-0x004f] [ 2.444455] pnp 00:06: [io 0x0061] [ 2.444457] pnp 00:06: [io 0x0063] [ 2.444459] pnp 00:06: [io 0x0065] [ 2.444461] pnp 00:06: [io 0x0067] [ 2.444462] pnp 00:06: [io 0x0070] [ 2.444464] pnp 00:06: [io 0x0080] [ 2.444466] pnp 00:06: [io 0x0092] [ 2.444468] pnp 00:06: [io 0x00b2-0x00b3] [ 2.444471] pnp 00:06: [io 0x0680-0x069f] [ 2.444473] pnp 00:06: [io 0x0800-0x080f] [ 2.444475] pnp 00:06: [io 0xffff] [ 2.444477] pnp 00:06: [io 0xffff] [ 2.444479] pnp 00:06: [io 0x0400-0x047f] [ 2.444481] pnp 00:06: [io 0x0500-0x057f] [ 2.444483] pnp 00:06: [io 0x164e-0x164f] [ 2.444485] pnp 00:06: [io 0x0380-0x038e] [ 2.444576] system 00:06: [io 0x0680-0x069f] has been reserved [ 2.444579] system 00:06: [io 0x0800-0x080f] has been reserved [ 2.444582] system 00:06: [io 0xffff] has been reserved [ 2.444585] system 00:06: [io 0xffff] has been reserved [ 2.444588] system 00:06: [io 0x0400-0x047f] has been reserved [ 2.444591] system 00:06: [io 0x0500-0x057f] has been reserved [ 2.444594] system 00:06: [io 0x164e-0x164f] has been reserved [ 2.444596] system 00:06: [io 0x0380-0x038e] has been reserved [ 2.444600] system 00:06: Plug and Play ACPI device, IDs PNP0c02 (active) [ 2.444614] pnp 00:07: [io 0x0070-0x0077] [ 2.444624] pnp 00:07: [irq 8] [ 2.444659] pnp 00:07: Plug and Play ACPI device, IDs PNP0b00 (active) [ 2.444671] pnp 00:08: [io 0x0060] [ 2.444673] pnp 00:08: [io 0x0064] [ 2.444679] pnp 00:08: [irq 1] [ 2.444716] pnp 00:08: Plug and Play ACPI device, IDs PNP0303 (active) [ 2.444738] pnp 00:09: [irq 12] [ 2.444779] pnp 00:09: Plug and Play ACPI device, IDs SYN1e10 SYN1e00 SYN0002 PNP0f13 (active) [ 2.444971] pnp 00:0a: [irq 23] [ 2.445022] pnp 00:0a: Plug and Play ACPI device, IDs HPQ0004 (active) [ 2.445293] pnp 00:0b: [mem 0xfed1c000-0xfed1ffff] [ 2.445297] pnp 00:0b: [mem 0x00000000-0xffffffffffffffff disabled] [ 2.445299] pnp 00:0b: [mem 0xfed1b000-0xfed1bfff] [ 2.445302] pnp 00:0b: [mem 0x00000000-0xffffffffffffffff disabled] [ 2.445304] pnp 00:0b: [mem 0xe0000000-0xefffffff] [ 2.445306] pnp 00:0b: [mem 0xfed20000-0xfed3ffff] [ 2.445309] pnp 00:0b: [mem 0xfed90000-0xfed8ffff disabled] [ 2.445312] pnp 00:0b: [mem 0xfed45000-0xfed8ffff] [ 2.445316] pnp 00:0b: [mem 0xff000000-0xffffffff] [ 2.445319] pnp 00:0b: [mem 0xfee00000-0xfeefffff] [ 2.445321] pnp 00:0b: [mem 0xdb200000-0xdb200fff] [ 2.445414] system 00:0b: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 2.445418] system 00:0b: [mem 0xfed1b000-0xfed1bfff] has been reserved [ 2.445421] system 00:0b: [mem 0xe0000000-0xefffffff] has been reserved [ 2.445424] system 00:0b: [mem 0xfed20000-0xfed3ffff] has been reserved [ 2.445427] system 00:0b: [mem 0xfed45000-0xfed8ffff] has been reserved [ 2.445431] system 00:0b: [mem 0xff000000-0xffffffff] could not be reserved [ 2.445434] system 00:0b: [mem 0xfee00000-0xfeefffff] could not be reserved [ 2.445437] system 00:0b: [mem 0xdb200000-0xdb200fff] has been reserved [ 2.445441] system 00:0b: Plug and Play ACPI device, IDs PNP0c02 (active) [ 2.445646] pnp 00:0c: [bus ff] [ 2.445697] pnp 00:0c: Plug and Play ACPI device, IDs PNP0a03 (active) [ 2.445718] pnp: PnP ACPI: found 13 devices [ 2.445720] ACPI: ACPI bus type pnp unregistered [ 2.446067] Switched to NOHz mode on CPU #6 [ 2.446089] Switched to NOHz mode on CPU #0 [ 2.446111] Switched to NOHz mode on CPU #5 [ 2.446123] Switched to NOHz mode on CPU #7 [ 2.446170] Switched to NOHz mode on CPU #3 [ 2.446172] Switched to NOHz mode on CPU #4 [ 2.446174] Switched to NOHz mode on CPU #2 [ 2.446176] Switched to NOHz mode on CPU #1 [ 2.446190] CE: hpet3 increased min_delta_ns to 7500 nsec [ 2.446193] CE: hpet5 increased min_delta_ns to 7500 nsec [ 2.446218] CE: hpet5 increased min_delta_ns to 11250 nsec [ 2.446220] CE: hpet3 increased min_delta_ns to 11250 nsec [ 2.452244] pci 0000:01:00.0: no compatible bridge window for [mem 0xfff80000-0xffffffff pref] [ 2.452249] pci 0000:03:00.0: no compatible bridge window for [mem 0xffff0000-0xffffffff pref] [ 2.452324] pci 0000:01:00.0: BAR 6: assigned [mem 0xd3080000-0xd30fffff pref] [ 2.452327] pci 0000:00:03.0: PCI bridge to [bus 01-01] [ 2.452331] pci 0000:00:03.0: bridge window [io 0x6000-0x6fff] [ 2.452336] pci 0000:00:03.0: bridge window [mem 0xd2000000-0xd30fffff] [ 2.452340] pci 0000:00:03.0: bridge window [mem 0xc0000000-0xd1ffffff 64bit pref] [ 2.452346] pci 0000:00:1c.0: PCI bridge to [bus 02-02] [ 2.452353] pci 0000:00:1c.0: bridge window [io 0x5000-0x5fff] [ 2.452363] pci 0000:00:1c.0: bridge window [mem 0xda100000-0xdb0fffff] [ 2.452373] pci 0000:00:1c.0: bridge window [mem 0xd3100000-0xd40fffff 64bit pref] [ 2.452385] pci 0000:03:00.0: BAR 6: assigned [mem 0xd4110000-0xd411ffff pref] [ 2.452388] pci 0000:00:1c.1: PCI bridge to [bus 03-03] [ 2.452395] pci 0000:00:1c.1: bridge window [io 0x4000-0x4fff] [ 2.452405] pci 0000:00:1c.1: bridge window [mem 0xd9100000-0xda0fffff] [ 2.452415] pci 0000:00:1c.1: bridge window [mem 0xd4100000-0xd50fffff 64bit pref] [ 2.452426] pci 0000:00:1c.4: PCI bridge to [bus 04-04] [ 2.452434] pci 0000:00:1c.4: bridge window [io 0x3000-0x3fff] [ 2.452444] pci 0000:00:1c.4: bridge window [mem 0xd8100000-0xd90fffff] [ 2.452454] pci 0000:00:1c.4: bridge window [mem 0xd5100000-0xd60fffff 64bit pref] [ 2.452465] pci 0000:00:1c.7: PCI bridge to [bus 05-08] [ 2.452473] pci 0000:00:1c.7: bridge window [io 0x2000-0x2fff] [ 2.452483] pci 0000:00:1c.7: bridge window [mem 0xd7100000-0xd80fffff] [ 2.452492] pci 0000:00:1c.7: bridge window [mem 0xd6100000-0xd70fffff 64bit pref] [ 2.452503] pci 0000:00:1e.0: PCI bridge to [bus 09-09] [ 2.452505] pci 0000:00:1e.0: bridge window [io disabled] [ 2.452515] pci 0000:00:1e.0: bridge window [mem disabled] [ 2.452524] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 2.452546] pci 0000:00:03.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 2.452551] pci 0000:00:03.0: setting latency timer to 64 [ 2.452571] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 2.452576] pci 0000:00:1c.0: setting latency timer to 64 [ 2.452591] pci 0000:00:1c.1: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 2.452600] pci 0000:00:1c.1: setting latency timer to 64 [ 2.452616] pci 0000:00:1c.4: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 2.452623] pci 0000:00:1c.4: setting latency timer to 64 [ 2.452638] pci 0000:00:1c.7: PCI INT B -> GSI 16 (level, low) -> IRQ 16 [ 2.452647] pci 0000:00:1c.7: setting latency timer to 64 [ 2.452662] pci 0000:00:1e.0: setting latency timer to 64 [ 2.452672] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 2.452675] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 2.452678] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 2.452680] pci_bus 0000:00: resource 7 [mem 0xc0000000-0xfeafffff] [ 2.452683] pci_bus 0000:01: resource 0 [io 0x6000-0x6fff] [ 2.452686] pci_bus 0000:01: resource 1 [mem 0xd2000000-0xd30fffff] [ 2.452688] pci_bus 0000:01: resource 2 [mem 0xc0000000-0xd1ffffff 64bit pref] [ 2.452691] pci_bus 0000:02: resource 0 [io 0x5000-0x5fff] [ 2.452694] pci_bus 0000:02: resource 1 [mem 0xda100000-0xdb0fffff] [ 2.452697] pci_bus 0000:02: resource 2 [mem 0xd3100000-0xd40fffff 64bit pref] [ 2.452700] pci_bus 0000:03: resource 0 [io 0x4000-0x4fff] [ 2.452702] pci_bus 0000:03: resource 1 [mem 0xd9100000-0xda0fffff] [ 2.452705] pci_bus 0000:03: resource 2 [mem 0xd4100000-0xd50fffff 64bit pref] [ 2.452708] pci_bus 0000:04: resource 0 [io 0x3000-0x3fff] [ 2.452710] pci_bus 0000:04: resource 1 [mem 0xd8100000-0xd90fffff] [ 2.452713] pci_bus 0000:04: resource 2 [mem 0xd5100000-0xd60fffff 64bit pref] [ 2.452716] pci_bus 0000:05: resource 0 [io 0x2000-0x2fff] [ 2.452718] pci_bus 0000:05: resource 1 [mem 0xd7100000-0xd80fffff] [ 2.452721] pci_bus 0000:05: resource 2 [mem 0xd6100000-0xd70fffff 64bit pref] [ 2.452724] pci_bus 0000:09: resource 4 [io 0x0000-0x0cf7] [ 2.452727] pci_bus 0000:09: resource 5 [io 0x0d00-0xffff] [ 2.452729] pci_bus 0000:09: resource 6 [mem 0x000a0000-0x000bffff] [ 2.452732] pci_bus 0000:09: resource 7 [mem 0xc0000000-0xfeafffff] [ 2.452767] NET: Registered protocol family 2 [ 2.452937] IP route cache hash table entries: 131072 (order: 8, 1048576 bytes) [ 2.454061] TCP established hash table entries: 524288 (order: 11, 8388608 bytes) [ 2.457630] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) [ 2.458057] TCP: Hash tables configured (established 524288 bind 65536) [ 2.458060] TCP reno registered [ 2.458072] UDP hash table entries: 2048 (order: 4, 65536 bytes) [ 2.458120] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) [ 2.458249] NET: Registered protocol family 1 [ 2.496247] pci 0000:01:00.0: Boot video device [ 2.496328] PCI: CLS 64 bytes, default 64 [ 2.496330] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) [ 2.496333] Placing 64MB software IO TLB between ffff8800bb280000 - ffff8800bf280000 [ 2.496335] software IO TLB at phys 0xbb280000 - 0xbf280000 [ 2.496379] Simple Boot Flag at 0x44 set to 0x1 [ 2.497133] audit: initializing netlink socket (disabled) [ 2.497142] type=2000 audit(1308276136.880:1): initialized [ 2.513929] HugeTLB registered 2 MB page size, pre-allocated 0 pages [ 2.516081] VFS: Disk quotas dquot_6.5.2 [ 2.516176] Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 2.516918] fuse init (API version 7.16) [ 2.517019] msgmni has been set to 7904 [ 2.517338] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 2.517380] io scheduler noop registered [ 2.517382] io scheduler deadline registered [ 2.517430] io scheduler cfq registered (default) [ 2.517798] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 2.517821] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 2.517871] intel_idle: MWAIT substates: 0x1120 [ 2.517889] intel_idle: v0.4 model 0x1E [ 2.517891] intel_idle: lapic_timer_reliable_states 0x2 [ 2.518336] ACPI: Deprecated procfs I/F for AC is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared [ 2.518690] ACPI: AC Adapter [ACAD] (on-line) [ 2.518794] input: Power Button as /devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input0 [ 2.518799] ACPI: Power Button [PWRB] [ 2.518879] input: Lid Switch as /devices/LNXSYSTM:00/device:00/PNP0C0D:00/input/input1 [ 2.519325] ACPI: Lid Switch [LID0] [ 2.519377] input: Sleep Button as /devices/LNXSYSTM:00/device:00/PNP0C0E:00/input/input2 [ 2.519409] ACPI: Sleep Button [SLPB] [ 2.519465] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3 [ 2.519469] ACPI: Power Button [PWRF] [ 2.519795] ACPI: acpi_idle yielding to intel_idle [ 2.523419] [Firmware Bug]: Invalid critical threshold (0) [ 2.525166] thermal LNXTHERM:00: registered as thermal_zone0 [ 2.525169] ACPI: Thermal Zone [TZ01] (69 C) [ 2.525188] ACPI: Deprecated procfs I/F for battery is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared [ 2.525244] ERST: Table is not found! [ 2.525301] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled [ 2.590756] ACPI: Battery Slot [BAT0] (battery present) [ 2.769201] Linux agpgart interface v0.103 [ 2.770479] brd: module loaded [ 2.771059] loop: module loaded [ 2.771142] i2c-core: driver [adp5520] using legacy suspend method [ 2.771144] i2c-core: driver [adp5520] using legacy resume method [ 2.771551] Fixed MDIO Bus: probed [ 2.771580] PPP generic driver version 2.4.2 [ 2.771622] tun: Universal TUN/TAP device driver, 1.6 [ 2.771624] tun: (C) 1999-2004 Max Krasnyansky [ 2.771710] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 2.771735] ehci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 2.771770] ehci_hcd 0000:00:1a.0: setting latency timer to 64 [ 2.771778] ehci_hcd 0000:00:1a.0: EHCI Host Controller [ 2.771818] ehci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 1 [ 2.771905] ehci_hcd 0000:00:1a.0: debug port 2 [ 2.775795] ehci_hcd 0000:00:1a.0: cache line size of 64 is not supported [ 2.775821] ehci_hcd 0000:00:1a.0: irq 16, io mem 0xdb105c00 [ 2.795933] ehci_hcd 0000:00:1a.0: USB 2.0 started, EHCI 1.00 [ 2.796082] hub 1-0:1.0: USB hub found [ 2.796087] hub 1-0:1.0: 3 ports detected [ 2.796192] ehci_hcd 0000:00:1d.0: PCI INT A -> GSI 21 (level, low) -> IRQ 21 [ 2.796211] ehci_hcd 0000:00:1d.0: setting latency timer to 64 [ 2.796219] ehci_hcd 0000:00:1d.0: EHCI Host Controller [ 2.796268] ehci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2 [ 2.796358] ehci_hcd 0000:00:1d.0: debug port 2 [ 2.800246] ehci_hcd 0000:00:1d.0: cache line size of 64 is not supported [ 2.800266] ehci_hcd 0000:00:1d.0: irq 21, io mem 0xdb105800 [ 2.815932] ehci_hcd 0000:00:1d.0: USB 2.0 started, EHCI 1.00 [ 2.816074] hub 2-0:1.0: USB hub found [ 2.816079] hub 2-0:1.0: 3 ports detected [ 2.816166] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 2.816180] uhci_hcd: USB Universal Host Controller Interface driver [ 2.816332] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 [ 2.839208] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 2.839215] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 2.839338] mousedev: PS/2 mouse device common for all mice [ 2.840728] rtc_cmos 00:07: RTC can wake from S4 [ 2.840815] rtc_cmos 00:07: rtc core: registered rtc_cmos as rtc0 [ 2.840855] rtc0: alarms up to one year, y3k, 242 bytes nvram, hpet irqs [ 2.840966] device-mapper: uevent: version 1.0.3 [ 2.841052] device-mapper: ioctl: 4.19.1-ioctl (2011-01-07) initialised: dm-devel@redhat.com [ 2.841146] device-mapper: multipath: version 1.2.0 loaded [ 2.841148] device-mapper: multipath round-robin: version 1.0.0 loaded [ 2.841497] cpuidle: using governor ladder [ 2.841839] cpuidle: using governor menu [ 2.842109] TCP cubic registered [ 2.842244] NET: Registered protocol family 10 [ 2.842806] NET: Registered protocol family 17 [ 2.842821] Registering the dns_resolver key type [ 2.846157] PM: Hibernation image not present or could not be loaded. [ 2.846163] registered taskstats version 1 [ 2.846639] Magic number: 15:446:5 [ 2.846862] rtc_cmos 00:07: setting system clock to 2011-06-17 02:02:17 UTC (1308276137) [ 2.846865] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 2.846867] EDD information not available. [ 2.848649] Freeing unused kernel memory: 956k freed [ 2.848776] Write protecting the kernel read-only data: 10240k [ 2.850002] Freeing unused kernel memory: 184k freed [ 2.854592] Freeing unused kernel memory: 1444k freed [ 2.861129] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4 [ 2.875342] <30>udev[87]: starting version 167 [ 2.916587] sdhci: Secure Digital Host Controller Interface driver [ 2.916592] sdhci: Copyright(c) Pierre Ossman [ 2.925418] sdhci-pci 0000:04:00.1: SDHCI controller found [197b:2382] (rev 0) [ 2.925446] sdhci-pci 0000:04:00.1: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 2.925509] sdhci-pci 0000:04:00.1: setting latency timer to 64 [ 2.925522] mmc0: no vmmc regulator found [ 2.925557] Registered led device: mmc0:: [ 2.925601] mmc0: SDHCI controller on PCI [0000:04:00.1] using DMA [ 2.925629] sdhci-pci 0000:04:00.2: SDHCI controller found [197b:2381] (rev 0) [ 2.925649] sdhci-pci 0000:04:00.2: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 2.925655] sdhci-pci 0000:04:00.2: Refusing to bind to secondary interface. [ 2.925665] sdhci-pci 0000:04:00.2: PCI INT A disabled [ 2.930998] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded [ 2.931023] r8169 0000:03:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17 [ 2.931072] r8169 0000:03:00.0: setting latency timer to 64 [ 2.931142] r8169 0000:03:00.0: irq 45 for MSI/MSI-X [ 2.931668] r8169 0000:03:00.0: eth0: RTL8168d/8111d at 0xffffc90011090000, c8:0a:a9:28:1b:75, XID 083000c0 IRQ 45 [ 2.941608] firewire_ohci 0000:04:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 2.941627] firewire_ohci 0000:04:00.0: setting latency timer to 64 [ 2.945047] ahci 0000:00:1f.2: version 3.0 [ 2.945071] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 2.945123] ahci 0000:00:1f.2: irq 46 for MSI/MSI-X [ 2.945202] ahci 0000:00:1f.2: AHCI 0001.0300 32 slots 6 ports 3 Gbps 0x33 impl SATA mode [ 2.945206] ahci 0000:00:1f.2: flags: 64bit ncq sntf ilck pm led clo pio slum part ems sxs apst [ 2.945215] ahci 0000:00:1f.2: setting latency timer to 64 [ 3.016722] scsi0 : ahci [ 3.016986] scsi1 : ahci [ 3.017267] scsi2 : ahci [ 3.017416] scsi3 : ahci [ 3.017743] scsi4 : ahci [ 3.017981] scsi5 : ahci [ 3.018079] ata1: SATA max UDMA/133 abar m2048@0xdb105000 port 0xdb105100 irq 46 [ 3.018089] ata2: SATA max UDMA/133 abar m2048@0xdb105000 port 0xdb105180 irq 46 [ 3.018093] ata3: DUMMY [ 3.018094] ata4: DUMMY [ 3.018100] ata5: SATA max UDMA/133 abar m2048@0xdb105000 port 0xdb105300 irq 46 [ 3.018106] ata6: SATA max UDMA/133 abar m2048@0xdb105000 port 0xdb105380 irq 46 [ 3.026152] firewire_ohci: Added fw-ohci device 0000:04:00.0, OHCI v1.10, 4 IR + 4 IT contexts, quirks 0x10 [ 3.126003] usb 1-1: new high speed USB device using ehci_hcd and address 2 [ 3.277033] hub 1-1:1.0: USB hub found [ 3.277293] hub 1-1:1.0: 6 ports detected [ 3.365753] ata6: SATA link down (SStatus 0 SControl 300) [ 3.365806] ata5: SATA link down (SStatus 0 SControl 300) [ 3.365829] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 3.366879] ata1.00: ATA-8: TOSHIBA MK5056GSY, LH003C, max UDMA/100 [ 3.366887] ata1.00: 976773168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA [ 3.368149] ata1.00: configured for UDMA/100 [ 3.368362] scsi 0:0:0:0: Direct-Access ATA TOSHIBA MK5056GS LH00 PQ: 0 ANSI: 5 [ 3.368550] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 3.368637] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/465 GiB) [ 3.368686] sd 0:0:0:0: [sda] Write Protect is off [ 3.368689] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 3.368710] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 3.375775] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 3.395674] usb 2-1: new high speed USB device using ehci_hcd and address 2 [ 3.395684] ata2.00: ATAPI: hp CDDVDW TS-L633N, 0300, max UDMA/100 [ 3.417211] ata2.00: configured for UDMA/100 [ 3.423085] scsi 1:0:0:0: CD-ROM hp CDDVDW TS-L633N 0300 PQ: 0 ANSI: 5 [ 3.431534] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray [ 3.431541] cdrom: Uniform CD-ROM driver Revision: 3.20 [ 3.431694] sr 1:0:0:0: Attached scsi CD-ROM sr0 [ 3.431756] sr 1:0:0:0: Attached scsi generic sg1 type 5 [ 3.432492] sda: sda1 sda2 sda3 sda4 [ 3.432855] sd 0:0:0:0: [sda] Attached SCSI disk [ 3.495631] Refined TSC clocksource calibration: 1596.178 MHz. [ 3.495640] Switching to clocksource tsc [ 3.525731] firewire_core: created device fw0: GUID 00241b00c3e9c701, S400 [ 3.546302] hub 2-1:1.0: USB hub found [ 3.546488] hub 2-1:1.0: 8 ports detected [ 3.625683] usb 1-1.1: new low speed USB device using ehci_hcd and address 3 [ 3.752687] usbcore: registered new interface driver usbhid [ 3.752690] usbhid: USB HID core driver [ 3.756855] input: A4Tech PS/2+USB Mouse as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/input/input5 [ 3.756937] a4tech 0003:09DA:000A.0001: input,hidraw0: USB HID v1.10 Mouse [A4Tech PS/2+USB Mouse] on usb-0000:00:1a.0-1.1/input0 [ 3.825473] usb 1-1.2: new high speed USB device using ehci_hcd and address 4 [ 3.944004] usbcore: registered new interface driver uas [ 3.947925] Initializing USB Mass Storage driver... [ 3.948240] scsi6 : usb-storage 1-1.2:1.0 [ 3.948499] usbcore: registered new interface driver usb-storage [ 3.948502] USB Mass Storage support registered. [ 4.015360] usb 2-1.1: new full speed USB device using ehci_hcd and address 3 [ 4.075002] CE: hpet increased min_delta_ns to 20113 nsec [ 4.205203] usb 2-1.2: new high speed USB device using ehci_hcd and address 4 [ 4.337824] EXT4-fs (loop0): mounted filesystem with ordered data mode. Opts: (null) [ 4.946010] scsi 6:0:0:0: Direct-Access Kingston DataTraveler G3 1.00 PQ: 0 ANSI: 2 [ 4.946862] sd 6:0:0:0: Attached scsi generic sg2 type 0 [ 4.947457] scsi7 : usb-storage 2-1.2:1.0 [ 4.947661] sd 6:0:0:0: [sdb] 7818184 512-byte logical blocks: (4.00 GB/3.72 GiB) [ 4.948353] sd 6:0:0:0: [sdb] Write Protect is off [ 4.948360] sd 6:0:0:0: [sdb] Mode Sense: 03 00 00 00 [ 4.949153] sd 6:0:0:0: [sdb] No Caching mode page present [ 4.949158] sd 6:0:0:0: [sdb] Assuming drive cache: write through [ 4.952032] sd 6:0:0:0: [sdb] No Caching mode page present [ 4.952038] sd 6:0:0:0: [sdb] Assuming drive cache: write through [ 4.952769] sdb: sdb1 [ 4.955567] sd 6:0:0:0: [sdb] No Caching mode page present [ 4.955573] sd 6:0:0:0: [sdb] Assuming drive cache: write through [ 4.955578] sd 6:0:0:0: [sdb] Attached SCSI removable disk [ 5.024561] usb 2-1.5: new high speed USB device using ehci_hcd and address 5 [ 5.244335] usb 2-1.7: new full speed USB device using ehci_hcd and address 6 [ 5.945345] scsi 7:0:0:0: Direct-Access WD My Passport 0730 1014 PQ: 0 ANSI: 6 [ 5.946458] scsi 7:0:0:1: Enclosure WD SES Device 1014 PQ: 0 ANSI: 6 [ 5.947789] sd 7:0:0:0: Attached scsi generic sg3 type 0 [ 5.947912] scsi 7:0:0:1: Attached scsi generic sg4 type 13 [ 5.948910] sd 7:0:0:0: [sdc] 976707584 512-byte logical blocks: (500 GB/465 GiB) [ 5.949629] sd 7:0:0:0: [sdc] Write Protect is off [ 5.949633] sd 7:0:0:0: [sdc] Mode Sense: 47 00 10 08 [ 5.951100] sd 7:0:0:0: [sdc] No Caching mode page present [ 5.951105] sd 7:0:0:0: [sdc] Assuming drive cache: write through [ 5.954140] sd 7:0:0:0: [sdc] No Caching mode page present [ 5.954143] sd 7:0:0:0: [sdc] Assuming drive cache: write through [ 6.325054] sdc: sdc1 [ 6.328441] sd 7:0:0:0: [sdc] No Caching mode page present [ 6.328444] sd 7:0:0:0: [sdc] Assuming drive cache: write through [ 6.328447] sd 7:0:0:0: [sdc] Attached SCSI disk [ 11.629885] <30>udev[360]: starting version 167 [ 11.683233] type=1400 audit(1308290546.330:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient" pid=430 comm="apparmor_parser" [ 11.684328] type=1400 audit(1308290546.330:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=430 comm="apparmor_parser" [ 11.685039] type=1400 audit(1308290546.330:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=430 comm="apparmor_parser" [ 11.692577] lp: driver loaded but no devices found [ 11.708056] EDAC MC: Ver: 2.1.0 Apr 11 2011 [ 11.728765] EDAC MC0: Giving out device to 'i7core_edac.c' 'i7 core #0': DEV 0000:ff:03.0 [ 11.728800] EDAC PCI0: Giving out device to module 'i7core_edac' controller 'EDAC PCI controller': DEV '0000:ff:03.0' (POLLED) [ 11.728806] EDAC i7core: Driver loaded. [ 11.761604] Linux video capture interface: v2.00 [ 11.769465] uvcvideo: Found UVC 1.00 device CNF9013 (04f2:b179) [ 11.785166] Bluetooth: Core ver 2.15 [ 11.785193] NET: Registered protocol family 31 [ 11.785196] Bluetooth: HCI device and connection manager initialized [ 11.785200] Bluetooth: HCI socket layer initialized [ 11.791745] input: CNF9013 as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5/2-1.5:1.0/input/input6 [ 11.791897] usbcore: registered new interface driver uvcvideo [ 11.791901] USB Video Class driver (v1.0.0) [ 11.840875] cfg80211: Calling CRDA to update world regulatory domain [ 11.849534] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 11.852095] usbcore: registered new interface driver btusb [ 11.852214] IR NEC protocol handler initialized [ 11.852879] acpi device:0c: registered as cooling_device8 [ 11.853012] input: Video Bus as /devices/LNXSYSTM:00/device:00/PNP0A08:00/device:09/LNXVIDEO:01/input/input7 [ 11.853095] ACPI: Video Device [VGA] (multi-head: yes rom: no post: no) [ 11.858366] IR RC5(x) protocol handler initialized [ 11.859541] ene_ir: chip is 0x3926 - kbver = 0x00, rev = 0xd2 [ 11.859545] ene_ir: PLL freq = 1406 [ 11.859547] ene_ir: KB3926D or higher detected [ 11.859573] ene_ir: Firmware regs: e0 00 [ 11.859575] ene_ir: Hardware features: [ 11.859577] ene_ir: * Uses GPIO 40 for IR demodulated input [ 11.895014] jmb38x_ms 0000:04:00.3: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 11.895024] jmb38x_ms 0000:04:00.3: setting latency timer to 64 [ 11.896109] IR RC6 protocol handler initialized [ 11.903928] IR JVC protocol handler initialized [ 11.904638] input: HP WMI hotkeys as /devices/virtual/input/input8 [ 11.909311] IR Sony protocol handler initialized [ 11.916857] lirc_dev: IR Remote Control driver registered, major 249 [ 11.936809] IR LIRC bridge handler initialized [ 11.937868] cfg80211: World regulatory domain updated: [ 11.937873] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 11.937878] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 11.937884] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 11.937889] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 11.937893] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 11.937898] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 11.948937] hp_accel: laptop model unknown, using default axes configuration [ 11.950558] lis3lv02d: 8 bits sensor found [ 11.958947] Registered IR keymap rc-rc6-mce [ 11.959340] input: ENE eHome Infrared Remote Receiver as /devices/virtual/rc/rc0/input9 [ 11.960028] rc0: ENE eHome Infrared Remote Receiver as /devices/virtual/rc/rc0 [ 11.964206] rc rc0: lirc_dev: driver ir-lirc-codec (ene_ir) registered at minor = 0 [ 11.964210] ene_ir: driver has been succesfully loaded [ 12.005383] BUG: unable to handle kernel NULL pointer dereference at 0000000000000008 [ 12.005605] IP: [] ses_enclosure_data_process+0x1a0/0x3a0 [ses] [ 12.005768] PGD 13361f067 PUD 133627067 PMD 0 [ 12.006051] Oops: 0002 [#1] SMP [ 12.006265] last sysfs file: /sys/module/snd_pcm/initstate [ 12.006340] CPU 4 [ 12.006399] Modules linked in: snd_usbmidi_lib snd_hda_codec snd_seq_midi snd_rawmidi iwlcore ir_lirc_codec rc_rc6_mce mac80211 lirc_dev psmouse ir_sony_decoder hp_accel(+) snd_seq_midi_event hp_wmi ir_jvc_decoder snd_seq ir_rc6_decoder snd_hwdep jmb38x_ms snd_seq_device snd_pcm sparse_keymap lis3lv02d ene_ir ir_rc5_decoder ir_nec_decoder btusb rc_core serio_raw memstick ses(+) snd_timer [ 12.008376] input: ST LIS3LV02DL Accelerometer as /devices/platform/lis3lv02d/input/input10 [ 12.008513] input_polldev cfg80211 [ 12.008589] Registered led device: hp::hddprotect [ 12.008612] hp_accel: driver loaded [ 12.008844] bluetooth uvcvideo videodev video enclosure i7core_edac snd edac_core v4l2_compat_ioctl32 soundcore lp snd_page_alloc parport usb_storage uas hid_a4tech usbhid hid ahci firewire_ohci libahci r8169 sdhci_pci firewire_core sdhci crc_itu_t [ 12.010496] [ 12.010582] Pid: 548, comm: modprobe Not tainted 2.6.38-8-generic #42-Ubuntu Hewlett-Packard HP Pavilion dv6 Notebook PC/3659 [ 12.010949] RIP: 0010:[] [] ses_enclosure_data_process+0x1a0/0x3a0 [ses] [ 12.011112] RSP: 0018:ffff8801035e9d88 EFLAGS: 00010286 [ 12.011197] RAX: ffff880101b3aeb8 RBX: 0000000000000000 RCX: 0000000000000000 [ 12.011280] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000 [ 12.011364] RBP: ffff8801035e9df8 R08: 00000000000007f9 R09: ffff880137022ddc [ 12.011448] R10: 0000000000000000 R11: ffff880101a00000 R12: ffff880134e5f442 [ 12.011532] R13: 0000000000000000 R14: ffff880134e04ea4 R15: 0000000000000237 [ 12.011614] FS: 00007fe283dec720(0000) GS:ffff8800bf500000(0000) knlGS:0000000000000000 [ 12.011783] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 12.011856] CR2: 0000000000000008 CR3: 0000000106387000 CR4: 00000000000006e0 [ 12.011945] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 12.012034] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 12.012119] Process modprobe (pid: 548, threadinfo ffff8801035e8000, task ffff8801059b8000) [ 12.012221] Stack: [ 12.012292] 0000000000000000 ffff880133249148 ffff002000830112 ffffffff00000000 [ 12.012609] ffff880101a00000 ffff8801050dfae0 ffff880137022dd8 000000d3000000e0 [ 12.013004] ffff8801035e9df8 ffff880102913540 ffff880133249000 ffff880101a00000 [ 12.013293] Call Trace: [ 12.013369] [] ses_match_to_enclosure+0xa5/0x1f0 [ses] [ 12.013453] [] ses_intf_add+0x4b8/0x578 [ses] [ 12.013539] [] ? ses_init+0x0/0x1000 [ses] [ 12.013621] [] class_interface_register+0xa9/0xe0 [ 12.013704] [] scsi_register_interface+0x16/0x20 [ 12.013786] [] ses_init+0x14/0x1000 [ses] [ 12.013868] [] do_one_initcall+0x45/0x190 [ 12.013952] [] sys_init_module+0xfb/0x250 [ 12.014028] [] system_call_fastpath+0x16/0x1b [ 12.014168] Code: 49 63 c0 41 83 c0 01 48 69 c0 78 02 00 00 49 8d 84 03 78 02 00 00 48 3d 00 f0 ff ff 77 29 4d 85 e4 74 24 41 0f b6 14 24 48 8b 30 <4c> 89 66 08 f6 c2 80 75 13 89 d0 83 e0 0f 83 f8 06 0f 84 89 00 [ 12.018123] RIP [] ses_enclosure_data_process+0x1a0/0x3a0 [ses] [ 12.018280] RSP [ 12.018360] CR2: 0000000000000008 [ 12.018482] ---[ end trace 817006b321490ab6 ]--- [ 12.028077] nvidia: module license 'NVIDIA' taints kernel. [ 12.028183] iwlagn: Intel(R) Wireless WiFi Link AGN driver for Linux, in-tree: [ 12.028302] iwlagn: Copyright(c) 2003-2010 Intel Corporation [ 12.028445] iwlagn 0000:02:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 12.028538] iwlagn 0000:02:00.0: setting latency timer to 64 [ 12.028647] iwlagn 0000:02:00.0: Detected Intel(R) Centrino(R) Advanced-N 6200 AGN, REV=0x74 [ 12.038639] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22 [ 12.038888] HDA Intel 0000:00:1b.0: irq 47 for MSI/MSI-X [ 12.039012] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 12.048467] iwlagn 0000:02:00.0: device EEPROM VER=0x436, CALIB=0x6 [ 12.048573] iwlagn 0000:02:00.0: Device SKU: 0Xb [ 12.048713] iwlagn 0000:02:00.0: Tunable channels: 13 802.11bg, 24 802.11a channels [ 12.048965] iwlagn 0000:02:00.0: irq 48 for MSI/MSI-X [ 12.049014] usbcore: registered new interface driver snd-usb-audio [ 12.051891] iwlagn 0000:02:00.0: loaded firmware version 9.221.4.1 build 25532 [ 12.052270] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain [ 12.062298] ieee80211 phy0: Selected rate control algorithm 'iwl-agn-rs' [ 12.188493] input: HDA Intel Mic at Ext Front Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input11 [ 12.188738] input: HDA Intel Line Out at Ext Front Jack as /devices/pci0000:00/0000:00:1b.0/sound/card0/input12 [ 12.189134] HDA Intel 0000:01:00.1: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 12.189281] hda_intel: Disable MSI for Nvidia chipset [ 12.189567] HDA Intel 0000:01:00.1: setting latency timer to 64 [ 12.928176] Synaptics Touchpad, model: 1, fw: 6.5, id: 0x1c0b1, caps: 0xa04751/0xa00000/0x0 [ 13.013239] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input13 [ 13.137972] Adding 262136k swap on /host/ubuntu/disks/swap.disk. Priority:-1 extents:1 across:262136k [ 13.168629] EXT4-fs (loop0): re-mounted. Opts: errors=remount-ro [ 13.295284] type=1400 audit(1308290547.940:5): apparmor="STATUS" operation="profile_load" name="/usr/share/gdm/guest-session/Xsession" pid=884 comm="apparmor_parser" [ 13.296124] type=1400 audit(1308290547.940:6): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=889 comm="apparmor_parser" [ 13.296351] type=1400 audit(1308290547.940:7): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=888 comm="apparmor_parser" [ 13.296536] type=1400 audit(1308290547.940:8): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=885 comm="apparmor_parser" [ 13.297558] type=1400 audit(1308290547.950:9): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=888 comm="apparmor_parser" [ 13.297724] type=1400 audit(1308290547.950:10): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=885 comm="apparmor_parser" [ 13.298422] type=1400 audit(1308290547.950:11): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=885 comm="apparmor_parser" [ 13.417045] Bluetooth: L2CAP ver 2.15 [ 13.417200] Bluetooth: L2CAP socket layer initialized [ 13.425408] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 13.425544] Bluetooth: BNEP filters: protocol multicast [ 13.429779] Bluetooth: SCO (Voice Link) ver 0.6 [ 13.429903] Bluetooth: SCO socket layer initialized fwts-test/oops-0001/test-0001.sh000077500000000000000000000006441465205512700162630ustar00rootroot00000000000000#!/bin/bash # TEST="Test oops against known failure patterns" NAME=test-0001.sh TMPLOG=$TMP/oops.log.$$ $FWTS --log-format="%line %owner " -w 80 --klog=$FWTSTESTDIR/oops-0001/oops.txt oops - | grep "^[0-9]*[ ]*oops" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/oops-0001/oops-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/oops-0001/test-0002.sh000077500000000000000000000007321465205512700162620ustar00rootroot00000000000000#!/bin/bash # TEST="Test oops summary table against known failure patterns" NAME=test-0002.sh TMPLOG=$TMP/oops.log.$$ $FWTS --log-format="%line %owner " -w 400 --klog=$FWTSTESTDIR/oops-0001/oops.txt oops - | grep summary | sed 's/line: [0-9]*//' | cut -c7- > $TMPLOG grep -v "log line:" $FWTSTESTDIR/oops-0001/oops-0002.log | diff $TMPLOG - >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/oops-0001/test-0003.sh000077500000000000000000000006531465205512700162650ustar00rootroot00000000000000#!/bin/bash # TEST="Test oops against known failure rate" NAME=test-0003.sh TMPLOG=$TMP/oops.log.$$ $FWTS --log-format="%line %owner " -w 80 --klog=$FWTSTESTDIR/oops-0001/oops.txt oops - | grep "oopses" | grep -v "summary" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/oops-0001/oops-0003.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/oops-0001/testcase.txt000066400000000000000000000000661465205512700167410ustar00rootroot00000000000000Test fwts oops test against real kernel oops messages fwts-test/osilinux-0001/000077500000000000000000000000001465205512700152555ustar00rootroot00000000000000fwts-test/osilinux-0001/acpidump-0001.log000066400000000000000000004054211465205512700201460ustar00rootroot00000000000000DSDT @ 0xbf6d9b6a 0000: 44 53 44 54 f4 5f 00 00 02 11 54 4f 53 43 50 4c DSDT._....TOSCPL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 49 4e 54 4c CRESTLNE....INTL 0020: 08 06 06 20 08 5a 30 30 30 01 08 5a 30 30 31 0a ... .Z000..Z001. 0030: 02 08 5a 30 30 32 0a 04 08 5a 30 30 33 0a 08 08 ..Z002...Z003... 0040: 5a 30 30 34 00 08 5a 30 30 35 0a 0f 08 5a 30 30 Z004..Z005...Z00 0050: 36 0a 0d 08 5a 30 30 37 0a 0b 08 5a 30 30 38 0a 6...Z007...Z008. 0060: 09 08 45 43 44 59 0a 07 5b 01 4d 55 54 58 00 5b ..ECDY..[.MUTX.[ 0070: 80 50 52 54 30 01 0a 80 0a 04 5b 81 0b 50 52 54 .PRT0.....[..PRT 0080: 30 13 50 38 30 48 20 14 4e 07 50 38 58 48 0a a0 0.P80H .N.P8XH.. 0090: 17 93 68 00 70 7d 7b 50 38 30 44 0c 00 ff ff ff ..h.p}{P80D..... 00a0: 00 69 00 50 38 30 44 a0 1b 93 68 01 70 7d 7b 50 .i.P80D...h.p}{P 00b0: 38 30 44 0c ff 00 ff ff 00 79 69 0a 08 00 00 50 80D......yi....P 00c0: 38 30 44 a0 1c 93 68 0a 02 70 7d 7b 50 38 30 44 80D...h..p}{P80D 00d0: 0c ff ff 00 ff 00 79 69 0a 10 00 00 50 38 30 44 ......yi....P80D 00e0: a0 1c 93 68 0a 03 70 7d 7b 50 38 30 44 0c ff ff ...h..p}{P80D... 00f0: ff 00 00 79 69 0a 18 00 00 50 38 30 44 70 50 38 ...yi....P80DpP8 0100: 30 44 50 38 30 48 14 0c 5f 50 49 43 01 70 68 47 0DP80H.._PIC.phG 0110: 50 49 43 14 46 06 5f 50 54 53 01 70 00 50 38 30 PIC.F._PTS.p.P80 0120: 44 50 38 58 48 00 68 a0 1e 93 68 0a 03 70 01 5c DP8XH.h...h..p.\ 0130: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0140: 30 5f 53 33 4c 44 a0 33 93 68 0a 04 70 01 5c 2f 0_S3LD.3.h..p.\/ 0150: 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 ._SB_PCI0LPCBEC0 0160: 5f 53 33 4c 44 5c 2f 04 5f 53 42 5f 50 43 49 30 _S3LD\/._SB_PCI0 0170: 4c 50 43 42 50 48 53 53 0a 0e 14 4c 1c 5f 57 41 LPCBPHSS...L._WA 0180: 4b 01 50 38 58 48 01 0a ab a0 30 91 93 68 0a 03 K.P8XH....0..h.. 0190: 93 68 0a 04 a0 25 7b 43 46 47 44 0c 00 00 00 01 .h...%{CFGD..... 01a0: 00 a0 18 90 7b 43 46 47 44 0a f0 00 93 4f 53 59 ....{CFGD....OSY 01b0: 53 0b d1 07 54 52 41 50 0a 3d a0 18 93 52 50 31 S...TRAP.=...RP1 01c0: 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 D..\/._SB_PCI0RP 01d0: 30 31 00 a0 18 93 52 50 32 44 00 86 5c 2f 03 5f 01....RP2D..\/._ 01e0: 53 42 5f 50 43 49 30 52 50 30 32 00 a0 18 93 52 SB_PCI0RP02....R 01f0: 50 33 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 P3D..\/._SB_PCI0 0200: 52 50 30 33 00 a0 18 93 52 50 34 44 00 86 5c 2f RP03....RP4D..\/ 0210: 03 5f 53 42 5f 50 43 49 30 52 50 30 34 00 a0 18 ._SB_PCI0RP04... 0220: 93 52 50 35 44 00 86 5c 2f 03 5f 53 42 5f 50 43 .RP5D..\/._SB_PC 0230: 49 30 52 50 30 35 00 a0 18 93 52 50 36 44 00 86 I0RP05....RP6D.. 0240: 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 36 00 \/._SB_PCI0RP06. 0250: a0 12 93 68 0a 03 50 38 58 48 00 0a 30 54 52 41 ...h..P8XH..0TRA 0260: 50 0a 46 a0 43 0d 93 68 0a 04 50 38 58 48 00 0a P.F.C..h..P8XH.. 0270: 40 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 @\/._SB_PCI0LPCB 0280: 50 48 53 53 0a 0f 70 57 41 4b 46 60 70 00 57 41 PHSS..pWAKF`p.WA 0290: 4b 46 7b 60 0a 05 60 a0 18 93 60 01 50 38 58 48 KF{`..`...`.P8XH 02a0: 00 0a 41 86 5c 2e 5f 53 42 5f 50 57 52 42 0a 02 ..A.\._SB_PWRB.. 02b0: a0 46 08 44 54 53 45 54 52 41 50 0a 47 a0 42 06 .F.DTSETRAP.G.B. 02c0: 90 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 .\/._SB_PCI0LPCB 02d0: 45 43 4f 4b 93 45 43 44 59 00 a0 27 92 95 44 54 ECOK.ECDY..'..DT 02e0: 53 31 44 54 53 32 70 44 54 53 31 5c 2f 05 5f 53 S1DTS2pDTS1\/._S 02f0: 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b B_PCI0LPCBEC0_SK 0300: 54 41 a1 1d 70 44 54 53 32 5c 2f 05 5f 53 42 5f TA..pDTS2\/._SB_ 0310: 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 PCI0LPCBEC0_SKTA 0320: a1 16 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 0330: 42 50 48 53 53 0a 10 5c 2e 5f 50 52 5f 52 50 50 BPHSS..\._PR_RPP 0340: 43 a4 12 04 02 00 00 14 1e 47 45 54 42 0b 77 68 C........GETB.wh 0350: 0a 08 60 77 69 0a 08 61 5b 13 6a 60 61 54 42 46 ..`wi..a[.j`aTBF 0360: 33 a4 54 42 46 33 14 42 09 50 4e 4f 54 08 a0 4a 3.TBF3.B.PNOT..J 0370: 06 4d 50 45 4e a0 31 7b 50 44 43 30 0a 08 00 86 .MPEN.1{PDC0.... 0380: 5c 2e 5f 50 52 5f 43 50 55 30 0a 80 a0 1a 7b 50 \._PR_CPU0....{P 0390: 44 43 30 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC0...[".d.\._PR 03a0: 5f 43 50 55 30 0a 81 a0 31 7b 50 44 43 31 0a 08 _CPU0...1{PDC1.. 03b0: 00 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 a0 1a ..\._PR_CPU1.... 03c0: 7b 50 44 43 31 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC1...[".d.\._ 03d0: 50 52 5f 43 50 55 31 0a 81 a1 1f 86 5c 2e 5f 50 PR_CPU1.....\._P 03e0: 52 5f 43 50 55 30 0a 80 5b 22 0a 64 86 5c 2e 5f R_CPU0..[".d.\._ 03f0: 50 52 5f 43 50 55 30 0a 81 14 17 54 52 41 50 09 PR_CPU0....TRAP. 0400: 70 68 53 4d 49 46 70 00 54 52 50 30 a4 53 4d 49 phSMIFp.TRP0.SMI 0410: 46 10 41 0f 5f 53 42 5f 14 4a 0e 5f 49 4e 49 00 F.A._SB_.J._INI. 0420: 70 0b 99 99 4d 41 52 4b a0 1c 44 54 53 45 54 52 p...MARK..DTSETR 0430: 41 50 0a 47 5e 2f 03 50 43 49 30 4c 50 43 42 50 AP.G^/.PCI0LPCBP 0440: 48 53 53 0a 10 70 0b d0 07 4f 53 59 53 a0 4a 09 HSS..p...OSYS.J. 0450: 5b 12 5f 4f 53 49 60 a0 18 5f 4f 53 49 0d 4c 69 [._OSI`.._OSI.Li 0460: 6e 75 78 00 70 01 4c 49 4e 58 70 00 45 43 44 59 nux.p.LINXp.ECDY 0470: a0 1b 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 .._OSI.Windows 2 0480: 30 30 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 001.p...OSYS.._O 0490: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04a0: 53 50 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f SP1.p...OSYS.._O 04b0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04c0: 53 50 32 00 70 0b d2 07 4f 53 59 53 a0 1b 5f 4f SP2.p...OSYS.._O 04d0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 00 SI.Windows 2006. 04e0: 70 0b d6 07 4f 53 59 53 a0 14 90 4d 50 45 4e 93 p...OSYS...MPEN. 04f0: 4f 53 59 53 0b d1 07 54 52 41 50 0a 3d 54 52 41 OSYS...TRAP.=TRA 0500: 50 0a 2b 5b 80 47 4e 56 53 00 0c bc 2d 6e bf 0b P.+[.GNVS...-n.. 0510: 00 01 5b 81 45 24 47 4e 56 53 10 4f 53 59 53 10 ..[.E$GNVS.OSYS. 0520: 53 4d 49 46 08 50 52 4d 30 08 50 52 4d 31 08 53 SMIF.PRM0.PRM1.S 0530: 43 49 46 08 50 52 4d 32 08 50 52 4d 33 08 4c 43 CIF.PRM2.PRM3.LC 0540: 4b 46 08 50 52 4d 34 08 50 52 4d 35 08 50 38 30 KF.PRM4.PRM5.P80 0550: 44 20 4c 49 44 53 08 50 57 52 53 08 44 42 47 53 D LIDS.PWRS.DBGS 0560: 08 4c 49 4e 58 08 00 08 41 43 54 31 08 41 43 54 .LINX...ACT1.ACT 0570: 54 08 50 53 56 54 08 54 43 31 56 08 54 43 32 56 T.PSVT.TC1V.TC2V 0580: 08 54 53 50 56 08 43 52 54 54 08 44 54 53 45 08 .TSPV.CRTT.DTSE. 0590: 44 54 53 31 08 44 54 53 32 08 00 40 05 41 50 49 DTS1.DTS2..@.API 05a0: 43 08 4d 50 45 4e 08 50 43 50 30 08 50 43 50 31 C.MPEN.PCP0.PCP1 05b0: 08 50 50 43 4d 08 00 28 43 4d 41 50 08 43 4d 42 .PPCM..(CMAP.CMB 05c0: 50 08 4c 50 54 50 08 46 44 43 50 08 00 30 49 47 P.LPTP.FDCP..0IG 05d0: 44 53 08 54 4c 53 54 08 43 41 44 4c 08 50 41 44 DS.TLST.CADL.PAD 05e0: 4c 08 43 53 54 45 10 4e 53 54 45 10 53 53 54 45 L.CSTE.NSTE.SSTE 05f0: 10 4e 44 49 44 08 44 49 44 31 20 44 49 44 32 20 .NDID.DID1 DID2 0600: 44 49 44 33 20 44 49 44 34 20 44 49 44 35 20 00 DID3 DID4 DID5 . 0610: 40 06 42 4c 43 53 08 42 52 54 4c 08 41 4c 53 45 @.BLCS.BRTL.ALSE 0620: 08 41 4c 41 46 08 4c 4c 4f 57 08 4c 48 49 48 08 .ALAF.LLOW.LHIH. 0630: 00 08 45 4d 41 45 08 45 4d 41 50 10 45 4d 41 4c ..EMAE.EMAP.EMAL 0640: 10 00 08 4d 45 46 45 08 00 18 54 50 4d 50 08 54 ...MEFE...TPMP.T 0650: 50 4d 45 08 00 40 04 47 54 46 30 38 47 54 46 32 PME..@.GTF08GTF2 0660: 38 49 44 45 4d 08 47 54 46 31 38 00 40 09 41 53 8IDEM.GTF18.@.AS 0670: 4c 42 20 49 42 54 54 08 49 50 41 54 08 49 54 56 LB IBTT.IPAT.ITV 0680: 46 08 49 54 56 4d 08 49 50 53 43 08 49 42 4c 43 F.ITVM.IPSC.IBLC 0690: 08 49 42 49 41 08 49 53 53 43 08 49 34 30 39 08 .IBIA.ISSC.I409. 06a0: 49 35 30 39 08 49 36 30 39 08 49 37 30 39 08 49 I509.I609.I709.I 06b0: 44 4d 4d 08 49 44 4d 53 08 49 46 31 45 08 48 56 DMM.IDMS.IF1E.HV 06c0: 43 4f 08 4e 58 44 31 20 4e 58 44 32 20 4d 41 52 CO.NXD1 NXD2 MAR 06d0: 4b 10 42 52 41 44 08 42 54 45 4e 08 56 56 45 4e K.BRAD.BTEN.VVEN 06e0: 08 42 47 54 4c 08 54 4d 45 45 01 00 07 53 43 55 .BGTL.TMEE...SCU 06f0: 30 01 53 43 55 31 01 53 43 55 32 01 53 43 55 33 0.SCU1.SCU2.SCU3 0700: 01 00 04 58 4b 53 50 01 58 4b 49 4e 01 58 4b 49 ...XKSP.XKIN.XKI 0710: 44 01 58 4b 4f 4b 01 00 04 42 47 55 31 08 42 53 D.XKOK...BGU1.BS 0720: 54 31 08 42 46 43 31 10 57 4b 4c 4e 08 57 41 4b T1.BFC1.WKLN.WAK 0730: 46 08 44 53 4d 44 08 42 41 59 53 08 48 41 50 45 F.DSMD.BAYS.HAPE 0740: 01 00 07 44 54 53 4d 01 00 07 4f 44 54 31 08 4f ...DTSM...ODT1.O 0750: 44 54 32 08 44 54 53 57 08 08 44 53 45 4e 01 08 DT2.DTSW..DSEN.. 0760: 45 43 4f 4e 00 08 47 50 49 43 00 08 43 54 59 50 ECON..GPIC..CTYP 0770: 00 08 4c 30 31 43 00 08 56 46 4e 30 00 08 56 46 ..L01C..VFN0..VF 0780: 4e 31 00 10 4a 7c 5f 47 50 45 14 46 35 5f 4c 30 N1..J|_GPE.F5_L0 0790: 31 00 72 4c 30 31 43 01 4c 30 31 43 50 38 58 48 1.rL01C.L01CP8XH 07a0: 00 01 50 38 58 48 01 4c 30 31 43 a0 48 08 90 93 ..P8XH.L01C.H... 07b0: 52 50 31 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 RP1D.\/._SB_PCI0 07c0: 52 50 30 31 48 50 53 58 5b 22 0a 64 a0 40 05 5c RP01HPSX[".d.@.\ 07d0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 /._SB_PCI0RP01PD 07e0: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 07f0: 50 30 31 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f P01PDCXp.\/._SB_ 0800: 50 43 49 30 52 50 30 31 48 50 53 58 86 5c 2f 03 PCI0RP01HPSX.\/. 0810: 5f 53 42 5f 50 43 49 30 52 50 30 31 00 a1 16 70 _SB_PCI0RP01...p 0820: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0830: 48 50 53 58 a0 48 08 90 93 52 50 32 44 00 5c 2f HPSX.H...RP2D.\/ 0840: 04 5f 53 42 5f 50 43 49 30 52 50 30 32 48 50 53 ._SB_PCI0RP02HPS 0850: 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 5f 50 X[".d.@.\/._SB_P 0860: 43 49 30 52 50 30 32 50 44 43 58 70 01 5c 2f 04 CI0RP02PDCXp.\/. 0870: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 44 43 58 _SB_PCI0RP02PDCX 0880: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 0890: 32 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 2HPSX.\/._SB_PCI 08a0: 30 52 50 30 32 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP02...p.\/._SB 08b0: 5f 50 43 49 30 52 50 30 32 48 50 53 58 a0 48 08 _PCI0RP02HPSX.H. 08c0: 90 93 52 50 33 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP3D.\/._SB_PC 08d0: 49 30 52 50 30 33 48 50 53 58 5b 22 0a 64 a0 40 I0RP03HPSX[".d.@ 08e0: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 .\/._SB_PCI0RP03 08f0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0900: 30 52 50 30 33 50 44 43 58 70 01 5c 2f 04 5f 53 0RP03PDCXp.\/._S 0910: 42 5f 50 43 49 30 52 50 30 33 48 50 53 58 86 5c B_PCI0RP03HPSX.\ 0920: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 33 00 a1 /._SB_PCI0RP03.. 0930: 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .p.\/._SB_PCI0RP 0940: 30 33 48 50 53 58 a0 48 08 90 93 52 50 34 44 00 03HPSX.H...RP4D. 0950: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 48 \/._SB_PCI0RP04H 0960: 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 PSX[".d.@.\/._SB 0970: 5f 50 43 49 30 52 50 30 34 50 44 43 58 70 01 5c _PCI0RP04PDCXp.\ 0980: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 44 /._SB_PCI0RP04PD 0990: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 09a0: 50 30 34 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 P04HPSX.\/._SB_P 09b0: 43 49 30 52 50 30 34 00 a1 16 70 01 5c 2f 04 5f CI0RP04...p.\/._ 09c0: 53 42 5f 50 43 49 30 52 50 30 34 48 50 53 58 a0 SB_PCI0RP04HPSX. 09d0: 48 08 90 93 52 50 35 44 00 5c 2f 04 5f 53 42 5f H...RP5D.\/._SB_ 09e0: 50 43 49 30 52 50 30 35 48 50 53 58 5b 22 0a 64 PCI0RP05HPSX[".d 09f0: a0 40 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .@.\/._SB_PCI0RP 0a00: 30 35 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 05PDCXp.\/._SB_P 0a10: 43 49 30 52 50 30 35 50 44 43 58 70 01 5c 2f 04 CI0RP05PDCXp.\/. 0a20: 5f 53 42 5f 50 43 49 30 52 50 30 35 48 50 53 58 _SB_PCI0RP05HPSX 0a30: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 35 .\/._SB_PCI0RP05 0a40: 00 a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ...p.\/._SB_PCI0 0a50: 52 50 30 35 48 50 53 58 a0 48 08 90 93 52 50 36 RP05HPSX.H...RP6 0a60: 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 D.\/._SB_PCI0RP0 0a70: 36 48 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 6HPSX[".d.@.\/._ 0a80: 53 42 5f 50 43 49 30 52 50 30 36 50 44 43 58 70 SB_PCI0RP06PDCXp 0a90: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 0aa0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0ab0: 30 52 50 30 36 48 50 53 58 86 5c 2f 03 5f 53 42 0RP06HPSX.\/._SB 0ac0: 5f 50 43 49 30 52 50 30 36 00 a1 16 70 01 5c 2f _PCI0RP06...p.\/ 0ad0: 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 50 53 ._SB_PCI0RP06HPS 0ae0: 58 14 42 0d 5f 4c 30 32 00 70 00 47 50 45 43 a0 X.B._L02.p.GPEC. 0af0: 4d 0a 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 M.\/._SB_PCI0LPC 0b00: 42 45 43 4f 4b a0 4e 04 93 44 54 53 57 01 a0 27 BECOK.N..DTSW..' 0b10: 92 95 44 54 53 31 44 54 53 32 70 44 54 53 31 5c ..DTS1DTS2pDTS1\ 0b20: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0b30: 30 5f 53 4b 54 41 a1 1d 70 44 54 53 32 5c 2f 05 0_SKTA..pDTS2\/. 0b40: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f _SB_PCI0LPCBEC0_ 0b50: 53 4b 54 41 a1 48 04 a0 27 92 95 4f 44 54 31 4f SKTA.H..'..ODT1O 0b60: 44 54 32 70 4f 44 54 31 5c 2f 05 5f 53 42 5f 50 DT2pODT1\/._SB_P 0b70: 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 CI0LPCBEC0_SKTA. 0b80: 1d 70 4f 44 54 32 5c 2f 05 5f 53 42 5f 50 43 49 .pODT2\/._SB_PCI 0b90: 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 16 5c 0LPCBEC0_SKTA..\ 0ba0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 50 48 /._SB_PCI0LPCBPH 0bb0: 53 53 0a 10 14 18 5f 4c 30 33 00 86 5c 2f 03 5f SS...._L03..\/._ 0bc0: 53 42 5f 50 43 49 30 55 53 42 31 0a 02 14 18 5f SB_PCI0USB1...._ 0bd0: 4c 30 34 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 L04..\/._SB_PCI0 0be0: 55 53 42 32 0a 02 14 18 5f 4c 30 35 00 86 5c 2f USB2...._L05..\/ 0bf0: 03 5f 53 42 5f 50 43 49 30 55 53 42 35 0a 02 14 ._SB_PCI0USB5... 0c00: 36 5f 4c 30 36 00 a0 27 5c 2f 04 5f 53 42 5f 50 6_L06..'\/._SB_P 0c10: 43 49 30 47 46 58 30 47 53 53 45 5c 2f 04 5f 53 CI0GFX0GSSE\/._S 0c20: 42 5f 50 43 49 30 47 46 58 30 47 53 43 49 a1 07 B_PCI0GFX0GSCI.. 0c30: 70 01 53 43 49 53 14 43 1f 5f 4c 30 39 00 a0 41 p.SCIS.C._L09..A 0c40: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0c50: 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PSPXp.\/._SB_PCI 0c60: 30 52 50 30 31 50 53 50 58 70 01 5c 2f 04 5f 53 0RP01PSPXp.\/._S 0c70: 42 5f 50 43 49 30 52 50 30 31 50 4d 53 58 86 5c B_PCI0RP01PMSX.\ 0c80: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 31 0a 02 /._SB_PCI0RP01.. 0c90: a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .A.\/._SB_PCI0RP 0ca0: 30 32 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 02PSPXp.\/._SB_P 0cb0: 43 49 30 52 50 30 32 50 53 50 58 70 01 5c 2f 04 CI0RP02PSPXp.\/. 0cc0: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 4d 53 58 _SB_PCI0RP02PMSX 0cd0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 0ce0: 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 ...A.\/._SB_PCI0 0cf0: 52 50 30 33 50 53 50 58 70 01 5c 2f 04 5f 53 42 RP03PSPXp.\/._SB 0d00: 5f 50 43 49 30 52 50 30 33 50 53 50 58 70 01 5c _PCI0RP03PSPXp.\ 0d10: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 50 4d /._SB_PCI0RP03PM 0d20: 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 SX.\/._SB_PCI0RP 0d30: 30 33 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 03...A.\/._SB_PC 0d40: 49 30 52 50 30 34 50 53 50 58 70 01 5c 2f 04 5f I0RP04PSPXp.\/._ 0d50: 53 42 5f 50 43 49 30 52 50 30 34 50 53 50 58 70 SB_PCI0RP04PSPXp 0d60: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 .\/._SB_PCI0RP04 0d70: 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 PMSX.\/._SB_PCI0 0d80: 52 50 30 34 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f RP04...A.\/._SB_ 0d90: 50 43 49 30 52 50 30 35 50 53 50 58 70 01 5c 2f PCI0RP05PSPXp.\/ 0da0: 04 5f 53 42 5f 50 43 49 30 52 50 30 35 50 53 50 ._SB_PCI0RP05PSP 0db0: 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 Xp.\/._SB_PCI0RP 0dc0: 30 35 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 05PMSX.\/._SB_PC 0dd0: 49 30 52 50 30 35 0a 02 a0 41 05 5c 2f 04 5f 53 I0RP05...A.\/._S 0de0: 42 5f 50 43 49 30 52 50 30 36 50 53 50 58 70 01 B_PCI0RP06PSPXp. 0df0: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 50 \/._SB_PCI0RP06P 0e00: 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 SPXp.\/._SB_PCI0 0e10: 52 50 30 36 50 4d 53 58 86 5c 2f 03 5f 53 42 5f RP06PMSX.\/._SB_ 0e20: 50 43 49 30 52 50 30 36 0a 02 14 18 5f 4c 30 42 PCI0RP06...._L0B 0e30: 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 50 43 49 ..\/._SB_PCI0PCI 0e40: 42 0a 02 14 18 5f 4c 30 43 00 86 5c 2f 03 5f 53 B...._L0C..\/._S 0e50: 42 5f 50 43 49 30 55 53 42 33 0a 02 14 4b 0b 5f B_PCI0USB3...K._ 0e60: 4c 30 44 00 a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 L0D..;\/._SB_PCI 0e70: 30 45 48 43 31 50 4d 45 53 70 01 5c 2f 04 5f 53 0EHC1PMESp.\/._S 0e80: 42 5f 50 43 49 30 45 48 43 31 50 4d 45 53 86 5c B_PCI0EHC1PMES.\ 0e90: 2f 03 5f 53 42 5f 50 43 49 30 45 48 43 31 0a 02 /._SB_PCI0EHC1.. 0ea0: a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 30 45 48 43 .;\/._SB_PCI0EHC 0eb0: 32 50 4d 45 53 70 01 5c 2f 04 5f 53 42 5f 50 43 2PMESp.\/._SB_PC 0ec0: 49 30 45 48 43 32 50 4d 45 53 86 5c 2f 03 5f 53 I0EHC2PMES.\/._S 0ed0: 42 5f 50 43 49 30 45 48 43 32 0a 02 a0 3b 5c 2f B_PCI0EHC2...;\/ 0ee0: 04 5f 53 42 5f 50 43 49 30 48 44 45 46 50 4d 45 ._SB_PCI0HDEFPME 0ef0: 53 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 48 44 Sp.\/._SB_PCI0HD 0f00: 45 46 50 4d 45 53 86 5c 2f 03 5f 53 42 5f 50 43 EFPMES.\/._SB_PC 0f10: 49 30 48 44 45 46 0a 02 14 18 5f 4c 30 45 00 86 I0HDEF...._L0E.. 0f20: 5c 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 34 0a \/._SB_PCI0USB4. 0f30: 02 14 1c 5f 4c 31 42 00 80 4c 50 4f 4c 4c 50 4f ..._L1B..LPOLLPO 0f40: 4c 86 5c 2e 5f 53 42 5f 4c 49 44 30 0a 80 10 46 L.\._SB_LID0...F 0f50: 0b 5f 50 52 5f 5b 83 0b 43 50 55 30 00 10 10 00 ._PR_[..CPU0.... 0f60: 00 06 5b 83 0b 43 50 55 31 01 10 10 00 00 06 14 ..[..CPU1....... 0f70: 45 09 52 50 50 43 00 a0 4d 08 93 4f 53 59 53 0b E.RPPC..M..OSYS. 0f80: d2 07 a0 42 08 7b 43 46 47 44 01 00 a0 42 04 94 ...B.{CFGD...B.. 0f90: 5e 2e 43 50 55 30 5f 50 50 43 00 74 5e 2e 43 50 ^.CPU0_PPC.t^.CP 0fa0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 0fb0: 43 50 4e 4f 54 72 5e 2e 43 50 55 30 5f 50 50 43 CPNOTr^.CPU0_PPC 0fc0: 01 5e 2e 43 50 55 30 5f 50 50 43 50 4e 4f 54 a1 .^.CPU0_PPCPNOT. 0fd0: 35 72 5e 2e 43 50 55 30 5f 50 50 43 01 5e 2e 43 5r^.CPU0_PPC.^.C 0fe0: 50 55 30 5f 50 50 43 50 4e 4f 54 74 5e 2e 43 50 PU0_PPCPNOTt^.CP 0ff0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 1000: 43 50 4e 4f 54 08 46 57 53 4f 0d 46 57 53 4f 00 CPNOT.FWSO.FWSO. 1010: 08 5f 50 53 43 00 14 12 5f 50 53 30 00 70 5f 50 ._PSC..._PS0.p_P 1020: 53 43 60 70 00 5f 50 53 43 14 0d 5f 50 53 33 00 SC`p._PSC.._PS3. 1030: 70 0a 03 5f 50 53 43 10 8c fb 04 5f 53 42 5f 5b p.._PSC...._SB_[ 1040: 82 4f 3e 41 4d 57 30 08 5f 48 49 44 0d 70 6e 70 .O>AMW0._HID.pnp 1050: 30 63 31 34 00 08 5f 55 49 44 00 08 5f 57 44 47 0c14.._UID.._WDG 1060: 11 3f 0a 3c a7 1d 85 2e 53 d0 5f 49 9d fa 1a 4a .?.<....S._I...J 1070: d6 2e 6a 86 41 43 01 00 3b 6d 43 71 dd fb 72 4c ..j.AC..;mCq..rL 1080: bc b8 43 5b fe 0d 64 f9 42 43 01 00 21 12 90 05 ..C[..d.BC..!... 1090: 66 d5 d1 11 b2 f0 00 a0 c9 06 29 10 42 41 01 00 f.........).BA.. 10a0: 08 53 54 41 43 11 07 0a 04 01 14 03 00 14 1f 57 .STAC..........W 10b0: 51 41 43 01 70 0d 4d 58 4d 54 43 43 6f 6e 66 69 QAC.p.MXMTCConfi 10c0: 67 44 61 74 61 00 5b 31 a4 53 54 41 43 08 53 54 gData.[1.STAC.ST 10d0: 42 43 11 07 0a 04 01 00 00 00 14 34 57 51 42 43 BC.........4WQBC 10e0: 01 70 0d 47 65 74 20 4d 58 4d 54 43 43 6f 6e 74 .p.Get MXMTCCont 10f0: 72 6f 6c 44 61 74 61 3a 20 53 54 42 43 20 3d 20 rolData: STBC = 1100: 00 5b 31 70 53 54 42 43 5b 31 a4 53 54 42 43 14 .[1pSTBC[1.STBC. 1110: 47 06 57 53 42 43 02 70 69 53 54 42 43 70 0d 53 G.WSBC.piSTBCp.S 1120: 65 74 20 4d 58 4d 54 43 43 6f 6e 74 72 6f 6c 44 et MXMTCControlD 1130: 61 74 61 3a 20 53 54 42 43 20 3d 20 00 5b 31 70 ata: STBC = .[1p 1140: 53 54 42 43 5b 31 a0 30 93 5e 5e 2f 03 50 43 49 STBC[1.0.^^/.PCI 1150: 30 4c 50 43 42 45 43 4f 4b 01 70 83 88 53 54 42 0LPCBECOK.p..STB 1160: 43 01 00 5e 5e 2f 04 50 43 49 30 4c 50 43 42 45 C..^^/.PCI0LPCBE 1170: 43 30 5f 53 4b 54 43 08 57 51 42 41 11 43 2b 0b C0_SKTC.WQBA.C+. 1180: ae 02 46 4f 4d 42 01 00 00 00 9e 02 00 00 c0 0b ..FOMB.......... 1190: 00 00 44 53 00 01 1a 7d da 54 28 d9 85 00 01 06 ..DS...}.T(..... 11a0: 18 42 10 07 10 0a 4b 61 02 c9 21 52 3c 18 94 05 .B....Ka..!R<... 11b0: 10 43 88 57 04 44 04 84 bc 0a b0 29 c0 24 88 fa .C.W.D.....).$.. 11c0: f7 87 28 09 0e 25 04 42 12 05 98 17 a0 5b 80 61 ..(..%.B.....[.a 11d0: 01 b6 05 98 16 e0 18 92 4a 03 a7 04 96 02 21 a1 ........J.....!. 11e0: 02 94 0b f0 2d 40 3b a2 24 0b b0 0c 23 02 8f 82 ....-@;.$...#... 11f0: a1 71 68 ec 30 2c 13 4c 83 38 8c b2 91 45 60 dc .qh.0,.L.8...E`. 1200: 4e 05 c8 15 20 4c 80 78 54 61 34 07 45 e0 42 63 N... L.xTa4.E.Bc 1210: 64 40 c8 a3 00 ab a3 d0 a4 12 d8 bd 00 65 02 2c d@...........e., 1220: 0a 10 27 c0 9a 00 63 48 32 28 40 9b 00 5b 20 42 ..'...cH2(@..[ B 1230: 0f d4 19 8a 46 70 02 51 6a 46 11 48 ac 1a 01 85 ....Fp.QjF.H.... 1240: 12 34 46 b0 10 81 c2 86 37 46 98 03 88 d1 fe 20 .4F.....7F..... 1250: 48 20 05 e3 66 91 46 83 1a 6b 82 63 f7 68 4e b8 H ..f.F..k.c.hN. 1260: 73 01 d2 e7 26 90 a3 3b b8 3a 07 4d 86 c7 b0 1e s...&..;.:.M.... 1270: 06 d8 29 00 ef 1a 50 d3 3f 78 26 08 0e 35 44 8f ..)...P.?x&..5D. 1280: 3a dc 09 1c fb 91 30 88 b3 3b 6e ac c3 c9 68 d0 :.....0..;n...h. 1290: a5 0a 30 7b 00 d0 d0 12 9c f6 99 84 7e 0f 38 9f ..0{........~.8. 12a0: 9e 21 89 fc 41 a0 46 e6 ff 3f b4 c7 78 5a 31 43 .!..A.F..?..xZ1C 12b0: 3e 0b 1c 16 13 0b a1 4d 6a 3c 40 40 e1 d1 40 08 >......Mj<@@..@. 12c0: 6f 06 9e af 09 46 86 90 93 f1 a0 06 e0 41 d7 3a o....F.......A.: 12d0: 32 8d 27 a6 21 cf e8 00 22 bf 32 78 0c 41 02 f9 2.'.!...".2x.A.. 12e0: c4 60 b8 c7 81 13 78 02 f0 59 40 10 92 00 21 51 .`....x..Y@...!Q 12f0: e3 a7 47 08 7e 7a 78 93 30 28 1f d2 99 f9 90 e1 ..G.~zx.0(...... 1300: 11 c2 07 c4 7b 9f 3b 19 c1 29 7b a4 e0 b0 7e 0e ....{.;..){...~. 1310: 20 c0 af 0f 8f 0d 09 7c ae 08 8c 1d aa fd 0a 40 ......|.......@ 1320: 08 1e ed 51 e0 54 23 1c 2d 78 08 8a 1c 03 4a cc ...Q.T#.-x....J. 1330: 18 50 03 38 85 d0 e7 73 04 47 14 25 f6 21 19 da .P.8...s.G.%.!.. 1340: 08 e1 1f 39 4e c1 f7 8b 23 3d ad 23 78 91 f0 08 ...9N...#=.#x... 1350: 30 e1 ce 28 a8 38 30 f4 ff 7f 4c 01 dc 7a 3b a6 0..(.80...L..z;. 1360: 80 3e c0 31 05 50 fc ff 3f a6 00 87 a8 c7 14 f4 .>.1.P..?....... 1370: 40 0c 7c 2e a1 0d ff 96 c1 8e 03 87 74 6a 8f 28 @.|.........tj.( 1380: 80 29 79 47 14 50 8c 14 d6 f1 04 18 05 3c 9b a0 .)yG.P.......<.. 1390: 22 1d 4f 80 ce ff ff 78 02 58 b8 9a bc 92 84 7d ".O....x.X.....} 13a0: 1e 78 1d 89 14 e3 41 e2 b5 e4 c1 24 46 98 08 8f .x....A....$F... 13b0: 27 1e 47 c0 b7 82 28 91 8e 3e c4 83 49 28 63 3e '.G...(..>..I(c> 13c0: a3 84 89 f9 04 70 22 ef 27 46 0a 73 2a 8f 27 2c .....p".'F.s*.', 13d0: c4 f1 04 a0 85 e2 e3 09 3a 2c 84 fe ff c7 13 dc ........:,...... 13e0: e1 c1 a7 0c fc 85 0c c6 f9 04 30 24 f0 7c 02 ca ..........0$.|.. 13f0: db 18 e6 80 02 8c 14 da f4 a9 d1 a8 55 83 32 35 ............U.25 1400: ca 34 a8 d5 a7 52 63 c6 4c 9c 52 bc 6c 8d df f2 .4...Rc.L.R.l... 1410: 9e 09 02 b1 20 0a 81 38 cc f3 42 20 96 a2 01 84 .... ..8..B .... 1420: 85 06 a1 42 a9 05 e2 98 20 34 92 0a 10 f6 ff 07 ...B.... 4...... 1430: 5b 82 1b 4c 49 44 30 08 5f 48 49 44 0c 41 d0 0c [..LID0._HID.A.. 1440: 0d 14 0b 5f 4c 49 44 00 a4 4c 50 4f 4c 5b 82 0f ..._LID..LPOL[.. 1450: 50 57 52 42 08 5f 48 49 44 0c 41 d0 0c 0c 5b 82 PWRB._HID.A...[. 1460: 84 b9 04 50 43 49 30 14 09 5f 53 33 44 00 a4 0a ...PCI0.._S3D... 1470: 02 14 09 5f 53 34 44 00 a4 0a 02 08 5f 48 49 44 ..._S4D....._HID 1480: 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 d0 0a 03 5b .A...._CID.A...[ 1490: 82 43 0e 4d 43 48 43 08 5f 41 44 52 00 5b 80 48 .C.MCHC._ADR.[.H 14a0: 42 55 53 02 0a 40 0a c0 5b 81 4a 0c 48 42 55 53 BUS..@..[.J.HBUS 14b0: 03 45 50 45 4e 01 00 0b 45 50 42 52 14 00 20 4d .EPEN...EPBR.. M 14c0: 48 45 4e 01 00 0d 4d 48 42 52 12 00 40 0a 50 58 HEN...MHBR..@.PX 14d0: 45 4e 01 50 58 53 5a 02 00 17 50 58 42 52 06 00 EN.PXSZ...PXBR.. 14e0: 20 44 49 45 4e 01 00 0b 44 49 42 52 14 00 20 49 DIEN...DIBR.. I 14f0: 50 45 4e 01 00 0b 49 50 42 52 14 00 40 0e 00 04 PEN...IPBR..@... 1500: 50 4d 30 48 02 00 02 50 4d 31 4c 02 00 02 50 4d PM0H...PM1L...PM 1510: 31 48 02 00 02 50 4d 32 4c 02 00 02 50 4d 32 48 1H...PM2L...PM2H 1520: 02 00 02 50 4d 33 4c 02 00 02 50 4d 33 48 02 00 ...PM3L...PM3H.. 1530: 02 50 4d 34 4c 02 00 02 50 4d 34 48 02 00 02 50 .PM4L...PM4H...P 1540: 4d 35 4c 02 00 02 50 4d 35 48 02 00 02 50 4d 36 M5L...PM5H...PM6 1550: 4c 02 00 02 50 4d 36 48 02 00 02 00 07 48 45 4e L...PM6H.....HEN 1560: 41 01 00 40 05 54 55 55 44 10 00 40 06 00 04 54 A..@.TUUD..@...T 1570: 4c 55 44 0c 08 42 55 46 30 11 4d 20 0b 08 02 88 LUD..BUF0.M .... 1580: 0d 00 02 0c 00 00 00 00 00 ff 00 00 00 00 01 87 ................ 1590: 17 00 01 0c 03 00 00 00 00 00 00 00 00 f7 0c 00 ................ 15a0: 00 00 00 00 00 f8 0c 00 00 47 01 f8 0c f8 0c 01 .........G...... 15b0: 08 87 17 00 01 0c 03 00 00 00 00 00 0d 00 00 ff ................ 15c0: ff 00 00 00 00 00 00 00 f3 00 00 87 17 00 00 0c ................ 15d0: 03 00 00 00 00 00 00 0a 00 ff ff 0b 00 00 00 00 ................ 15e0: 00 00 00 02 00 87 17 00 00 0c 03 00 00 00 00 00 ................ 15f0: 00 0c 00 ff 3f 0c 00 00 00 00 00 00 40 00 00 87 ....?.......@... 1600: 17 00 00 0c 03 00 00 00 00 00 40 0c 00 ff 7f 0c ..........@..... 1610: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 1620: 00 00 00 00 80 0c 00 ff bf 0c 00 00 00 00 00 00 ................ 1630: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0c @............... 1640: 00 ff ff 0c 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1650: 00 0c 03 00 00 00 00 00 00 0d 00 ff 3f 0d 00 00 ............?... 1660: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1670: 00 00 40 0d 00 ff 7f 0d 00 00 00 00 00 00 40 00 ..@...........@. 1680: 00 87 17 00 00 0c 03 00 00 00 00 00 80 0d 00 ff ................ 1690: bf 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c ........@....... 16a0: 03 00 00 00 00 00 c0 0d 00 ff ff 0d 00 00 00 00 ................ 16b0: 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 ..@............. 16c0: 00 0e 00 ff 3f 0e 00 00 00 00 00 00 40 00 00 87 ....?.......@... 16d0: 17 00 00 0c 03 00 00 00 00 00 40 0e 00 ff 7f 0e ..........@..... 16e0: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 16f0: 00 00 00 00 80 0e 00 ff bf 0e 00 00 00 00 00 00 ................ 1700: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0e @............... 1710: 00 ff ff 0e 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1720: 00 0c 03 00 00 00 00 00 00 0f 00 ff ff 0f 00 00 ................ 1730: 00 00 00 00 00 01 00 87 17 00 00 0c 03 00 00 00 ................ 1740: 00 00 00 00 00 ff ff ff df 00 00 00 00 00 00 00 ................ 1750: 00 87 17 00 00 0c 03 00 00 00 00 00 00 00 f0 ff ................ 1760: ff bf fe 00 00 00 00 00 00 c0 0e 87 17 00 00 0c ................ 1770: 03 00 00 00 00 00 00 d4 fe ff 4f d4 fe 00 00 00 ..........O..... 1780: 00 00 00 00 00 79 00 14 4b 3d 5f 43 52 53 08 a0 .....y..K=_CRS.. 1790: 1c 5e 2e 4d 43 48 43 50 4d 31 4c 8a 42 55 46 30 .^.MCHCPM1L.BUF0 17a0: 0a 7c 43 30 4c 4e 70 00 43 30 4c 4e a0 1f 93 5e .|C0LNp.C0LN...^ 17b0: 2e 4d 43 48 43 50 4d 31 4c 01 8d 42 55 46 30 0b .MCHCPM1L..BUF0. 17c0: 58 03 43 30 52 57 70 00 43 30 52 57 a0 1c 5e 2e X.C0RWp.C0RW..^. 17d0: 4d 43 48 43 50 4d 31 48 8a 42 55 46 30 0a 96 43 MCHCPM1H.BUF0..C 17e0: 34 4c 4e 70 00 43 34 4c 4e a0 1f 93 5e 2e 4d 43 4LNp.C4LN...^.MC 17f0: 48 43 50 4d 31 48 01 8d 42 55 46 30 0b 28 04 43 HCPM1H..BUF0.(.C 1800: 34 52 57 70 00 43 34 52 57 a0 1c 5e 2e 4d 43 48 4RWp.C4RW..^.MCH 1810: 43 50 4d 32 4c 8a 42 55 46 30 0a b0 43 38 4c 4e CPM2L.BUF0..C8LN 1820: 70 00 43 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 p.C8LN...^.MCHCP 1830: 4d 32 4c 01 8d 42 55 46 30 0b f8 04 43 38 52 57 M2L..BUF0...C8RW 1840: 70 00 43 38 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d p.C8RW..^.MCHCPM 1850: 32 48 8a 42 55 46 30 0a ca 43 43 4c 4e 70 00 43 2H.BUF0..CCLNp.C 1860: 43 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 32 48 CLN...^.MCHCPM2H 1870: 01 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 43 ..BUF0...CCRWp.C 1880: 43 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d 33 4c 8a CRW..^.MCHCPM3L. 1890: 42 55 46 30 0a e4 44 30 4c 4e 70 00 44 30 4c 4e BUF0..D0LNp.D0LN 18a0: a0 1f 93 5e 2e 4d 43 48 43 50 4d 33 4c 01 8d 42 ...^.MCHCPM3L..B 18b0: 55 46 30 0b 98 06 44 30 52 57 70 00 44 30 52 57 UF0...D0RWp.D0RW 18c0: a0 1c 5e 2e 4d 43 48 43 50 4d 33 48 8a 42 55 46 ..^.MCHCPM3H.BUF 18d0: 30 0a fe 44 34 4c 4e 70 00 44 34 4c 4e a0 1f 93 0..D4LNp.D4LN... 18e0: 5e 2e 4d 43 48 43 50 4d 33 48 01 8d 42 55 46 30 ^.MCHCPM3H..BUF0 18f0: 0b 68 07 44 34 52 57 70 00 44 34 52 57 a0 1d 5e .h.D4RWp.D4RW..^ 1900: 2e 4d 43 48 43 50 4d 34 4c 8a 42 55 46 30 0b 18 .MCHCPM4L.BUF0.. 1910: 01 44 38 4c 4e 70 00 44 38 4c 4e a0 1f 93 5e 2e .D8LNp.D8LN...^. 1920: 4d 43 48 43 50 4d 34 4c 01 8d 42 55 46 30 0b 38 MCHCPM4L..BUF0.8 1930: 08 44 38 52 57 70 00 44 38 52 57 a0 1d 5e 2e 4d .D8RWp.D8RW..^.M 1940: 43 48 43 50 4d 34 48 8a 42 55 46 30 0b 32 01 44 CHCPM4H.BUF0.2.D 1950: 43 4c 4e 70 00 44 43 4c 4e a0 1f 93 5e 2e 4d 43 CLNp.DCLN...^.MC 1960: 48 43 50 4d 34 48 01 8d 42 55 46 30 0b 08 09 44 HCPM4H..BUF0...D 1970: 43 52 57 70 00 44 43 52 57 a0 1d 5e 2e 4d 43 48 CRWp.DCRW..^.MCH 1980: 43 50 4d 35 4c 8a 42 55 46 30 0b 4c 01 45 30 4c CPM5L.BUF0.L.E0L 1990: 4e 70 00 45 30 4c 4e a0 1f 93 5e 2e 4d 43 48 43 Np.E0LN...^.MCHC 19a0: 50 4d 35 4c 01 8d 42 55 46 30 0b d8 09 45 30 52 PM5L..BUF0...E0R 19b0: 57 70 00 45 30 52 57 a0 1d 5e 2e 4d 43 48 43 50 Wp.E0RW..^.MCHCP 19c0: 4d 35 48 8a 42 55 46 30 0b 66 01 45 34 4c 4e 70 M5H.BUF0.f.E4LNp 19d0: 00 45 34 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d .E4LN...^.MCHCPM 19e0: 35 48 01 8d 42 55 46 30 0b a8 0a 45 34 52 57 70 5H..BUF0...E4RWp 19f0: 00 45 34 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 .E4RW..^.MCHCPM6 1a00: 4c 8a 42 55 46 30 0b 80 01 45 38 4c 4e 70 00 45 L.BUF0...E8LNp.E 1a10: 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 4c 8LN...^.MCHCPM6L 1a20: 01 8d 42 55 46 30 0b 78 0b 45 38 52 57 70 00 45 ..BUF0.x.E8RWp.E 1a30: 38 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 48 8a 8RW..^.MCHCPM6H. 1a40: 42 55 46 30 0b 9a 01 45 43 4c 4e 70 00 45 43 4c BUF0...ECLNp.ECL 1a50: 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 48 01 8d N...^.MCHCPM6H.. 1a60: 42 55 46 30 0b 48 0c 45 43 52 57 70 00 45 43 52 BUF0.H.ECRWp.ECR 1a70: 57 a0 1d 5e 2e 4d 43 48 43 50 4d 30 48 8a 42 55 W..^.MCHCPM0H.BU 1a80: 46 30 0b b4 01 46 30 4c 4e 70 00 46 30 4c 4e a0 F0...F0LNp.F0LN. 1a90: 1f 93 5e 2e 4d 43 48 43 50 4d 30 48 01 8d 42 55 ..^.MCHCPM0H..BU 1aa0: 46 30 0b 18 0d 46 30 52 57 70 00 46 30 52 57 8a F0...F0RWp.F0RW. 1ab0: 42 55 46 30 0b c2 01 4d 31 4d 4e 8a 42 55 46 30 BUF0...M1MN.BUF0 1ac0: 0b c6 01 4d 31 4d 58 8a 42 55 46 30 0b ce 01 4d ...M1MX.BUF0...M 1ad0: 31 4c 4e 8a 42 55 46 30 0b dc 01 4d 32 4d 4e 8a 1LN.BUF0...M2MN. 1ae0: 42 55 46 30 0b e0 01 4d 32 4d 58 8a 42 55 46 30 BUF0...M2MX.BUF0 1af0: 0b e8 01 4d 32 4c 4e 79 5e 2e 4d 43 48 43 50 58 ...M2LNy^.MCHCPX 1b00: 42 52 0a 1a 4d 31 4d 58 7a 0c 00 00 00 10 5e 2e BR..M1MXz.....^. 1b10: 4d 43 48 43 50 58 53 5a 60 72 4d 31 4d 58 60 4d MCHCPXSZ`rM1MX`M 1b20: 32 4d 4e 72 74 4d 32 4d 58 4d 32 4d 4e 00 01 4d 2MNrtM2MXM2MN..M 1b30: 32 4c 4e 74 4d 31 4d 58 01 4d 31 4d 58 79 5e 2e 2LNtM1MX.M1MXy^. 1b40: 4d 43 48 43 54 4c 55 44 0a 14 4d 31 4d 4e 72 74 MCHCTLUD..M1MNrt 1b50: 4d 31 4d 58 4d 31 4d 4e 00 01 4d 31 4c 4e a4 42 M1MXM1MN..M1LN.B 1b60: 55 46 30 14 47 28 5f 50 52 54 00 a0 45 0f 47 50 UF0.G(_PRT..E.GP 1b70: 49 43 a4 12 4d 0e 13 12 0b 04 0c ff ff 01 00 00 IC..M........... 1b80: 00 0a 10 12 0b 04 0c ff ff 02 00 00 00 0a 10 12 ................ 1b90: 0b 04 0c ff ff 07 00 00 00 0a 10 12 0b 04 0c ff ................ 1ba0: ff 19 00 00 00 0a 14 12 0b 04 0c ff ff 1a 00 00 ................ 1bb0: 00 0a 10 12 0b 04 0c ff ff 1a 00 01 00 0a 15 12 ................ 1bc0: 0c 04 0c ff ff 1a 00 0a 02 00 0a 12 12 0b 04 0c ................ 1bd0: ff ff 1b 00 00 00 0a 16 12 0b 04 0c ff ff 1c 00 ................ 1be0: 00 00 0a 11 12 0b 04 0c ff ff 1c 00 01 00 0a 10 ................ 1bf0: 12 0c 04 0c ff ff 1c 00 0a 02 00 0a 12 12 0c 04 ................ 1c00: 0c ff ff 1c 00 0a 03 00 0a 13 12 0b 04 0c ff ff ................ 1c10: 1d 00 00 00 0a 17 12 0b 04 0c ff ff 1d 00 01 00 ................ 1c20: 0a 13 12 0c 04 0c ff ff 1d 00 0a 02 00 0a 12 12 ................ 1c30: 0b 04 0c ff ff 1f 00 00 00 0a 13 12 0b 04 0c ff ................ 1c40: ff 1f 00 01 00 0a 13 12 0c 04 0c ff ff 1f 00 0a ................ 1c50: 02 00 0a 13 12 0c 04 0c ff ff 1f 00 0a 03 00 0a ................ 1c60: 10 a1 49 18 a4 12 45 18 13 12 13 04 0c ff ff 01 ..I...E......... 1c70: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1c80: 0c ff ff 02 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 ......^.LPCBLNKA 1c90: 00 12 13 04 0c ff ff 07 00 00 5e 2e 4c 50 43 42 ..........^.LPCB 1ca0: 4c 4e 4b 41 00 12 13 04 0c ff ff 19 00 00 5e 2e LNKA..........^. 1cb0: 4c 50 43 42 4c 4e 4b 45 00 12 13 04 0c ff ff 1a LPCBLNKE........ 1cc0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1cd0: 0c ff ff 1a 00 01 5e 2e 4c 50 43 42 4c 4e 4b 46 ......^.LPCBLNKF 1ce0: 00 12 14 04 0c ff ff 1a 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1cf0: 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1b 00 00 5e BLNKC..........^ 1d00: 2e 4c 50 43 42 4c 4e 4b 47 00 12 13 04 0c ff ff .LPCBLNKG....... 1d10: 1c 00 00 5e 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 ...^.LPCBLNKB... 1d20: 04 0c ff ff 1c 00 01 5e 2e 4c 50 43 42 4c 4e 4b .......^.LPCBLNK 1d30: 41 00 12 14 04 0c ff ff 1c 00 0a 02 5e 2e 4c 50 A...........^.LP 1d40: 43 42 4c 4e 4b 43 00 12 14 04 0c ff ff 1c 00 0a CBLNKC.......... 1d50: 03 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0c .^.LPCBLNKD..... 1d60: ff ff 1d 00 00 5e 2e 4c 50 43 42 4c 4e 4b 48 00 .....^.LPCBLNKH. 1d70: 12 13 04 0c ff ff 1d 00 01 5e 2e 4c 50 43 42 4c .........^.LPCBL 1d80: 4e 4b 44 00 12 14 04 0c ff ff 1d 00 0a 02 5e 2e NKD...........^. 1d90: 4c 50 43 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1f LPCBLNKC........ 1da0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 ..^.LPCBLNKD.... 1db0: 0c ff ff 1f 00 01 5e 2e 4c 50 43 42 4c 4e 4b 44 ......^.LPCBLNKD 1dc0: 00 12 14 04 0c ff ff 1f 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1dd0: 42 4c 4e 4b 44 00 12 14 04 0c ff ff 1f 00 0a 03 BLNKD........... 1de0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 40 14 50 ^.LPCBLNKA.[.@.P 1df0: 44 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 DRC._HID.A...._U 1e00: 49 44 01 08 42 55 46 30 11 46 06 0a 62 86 09 00 ID..BUF0.F..b... 1e10: 01 00 00 00 00 00 40 00 00 86 09 00 01 00 00 00 ......@......... 1e20: 00 00 40 00 00 86 09 00 01 00 00 00 00 00 10 00 ..@............. 1e30: 00 86 09 00 01 00 00 00 00 00 10 00 00 86 09 00 ................ 1e40: 01 00 00 00 00 00 00 00 00 86 09 00 01 00 00 d2 ................ 1e50: fe 00 00 02 00 86 09 00 01 00 00 d4 fe 00 50 00 ..............P. 1e60: 00 86 09 00 01 00 50 d4 fe 00 b0 04 00 79 00 14 ......P......y.. 1e70: 4d 0b 5f 43 52 53 08 8a 42 55 46 30 0a 04 52 42 M._CRS..BUF0..RB 1e80: 52 30 79 5e 5e 2e 4c 50 43 42 52 43 42 41 0a 0e R0y^^.LPCBRCBA.. 1e90: 52 42 52 30 8a 42 55 46 30 0a 10 4d 42 52 30 79 RBR0.BUF0..MBR0y 1ea0: 5e 5e 2e 4d 43 48 43 4d 48 42 52 0a 0e 4d 42 52 ^^.MCHCMHBR..MBR 1eb0: 30 8a 42 55 46 30 0a 1c 44 42 52 30 79 5e 5e 2e 0.BUF0..DBR0y^^. 1ec0: 4d 43 48 43 44 49 42 52 0a 0c 44 42 52 30 8a 42 MCHCDIBR..DBR0.B 1ed0: 55 46 30 0a 28 45 42 52 30 79 5e 5e 2e 4d 43 48 UF0.(EBR0y^^.MCH 1ee0: 43 45 50 42 52 0a 0c 45 42 52 30 8a 42 55 46 30 CEPBR..EBR0.BUF0 1ef0: 0a 34 58 42 52 30 79 5e 5e 2e 4d 43 48 43 50 58 .4XBR0y^^.MCHCPX 1f00: 42 52 0a 1a 58 42 52 30 8a 42 55 46 30 0a 38 58 BR..XBR0.BUF0.8X 1f10: 53 5a 30 7a 0c 00 00 00 10 5e 5e 2e 4d 43 48 43 SZ0z.....^^.MCHC 1f20: 50 58 53 5a 58 53 5a 30 a4 42 55 46 30 5b 82 4d PXSZXSZ0.BUF0[.M 1f30: 50 50 45 47 50 08 5f 41 44 52 0c 00 00 01 00 14 PPEGP._ADR...... 1f40: 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 2c A._PRT..3GPIC.., 1f50: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 1f60: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 1f70: 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 12 ............E... 1f80: 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 43 A.........^^.LPC 1f90: 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e 2e BLNKA........^^. 1fa0: 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff 0a LPCBLNKB........ 1fb0: 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 1fc0: 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 1fd0: 00 5b 82 49 46 56 47 41 5f 08 5f 41 44 52 00 08 .[.IFVGA_._ADR.. 1fe0: 53 57 49 54 01 08 43 52 54 41 01 08 4c 43 44 41 SWIT..CRTA..LCDA 1ff0: 01 08 54 56 41 41 01 08 56 4c 44 46 01 5b 80 56 ..TVAA..VLDF.[.V 2000: 49 44 53 02 00 0a c8 5b 81 0b 56 49 44 53 03 56 IDS....[..VIDS.V 2010: 44 49 44 20 14 09 5f 53 54 41 00 a4 0a 0f 08 5f DID .._STA....._ 2020: 50 53 43 00 14 0c 5f 50 53 30 00 70 00 5f 50 53 PSC..._PS0.p._PS 2030: 43 14 0c 5f 50 53 31 00 70 01 5f 50 53 43 14 0d C.._PS1.p._PSC.. 2040: 5f 50 53 33 00 70 0a 03 5f 50 53 43 14 10 5f 44 _PS3.p.._PSC.._D 2050: 4f 53 01 70 7b 68 0a 03 00 53 57 49 54 14 17 5f OS.p{h...SWIT.._ 2060: 44 4f 44 00 a4 12 0f 03 0c 00 01 01 00 0c 10 01 DOD............. 2070: 01 00 0b 00 02 5b 82 4d 08 43 52 54 5f 14 0a 5f .....[.M.CRT_.._ 2080: 41 44 52 00 a4 0b 00 01 14 41 06 5f 44 43 53 00 ADR......A._DCS. 2090: 5e 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 ^^^^.LPCBPHSS..p 20a0: 43 41 44 4c 60 70 43 53 54 45 61 7b 60 0a 02 60 CADL`pCSTEa{`..` 20b0: 7b 61 0a 02 61 a0 08 60 70 01 43 52 54 41 a1 07 {a..a..`p.CRTA.. 20c0: 70 00 43 52 54 41 a0 13 43 52 54 41 a0 08 93 61 p.CRTA..CRTA...a 20d0: 0a 02 a4 0a 1f a1 04 a4 0a 1d a1 0f a0 08 93 61 ...............a 20e0: 0a 02 a4 0a 0f a1 04 a4 0a 0d 14 12 5f 44 47 53 ............_DGS 20f0: 00 a0 07 43 52 54 41 a4 01 a1 03 a4 00 14 06 5f ...CRTA........_ 2100: 44 53 53 01 5b 82 47 0e 4c 43 44 5f 14 0a 5f 41 DSS.[.G.LCD_.._A 2110: 44 52 00 a4 0b 10 01 14 4d 05 5f 44 43 53 00 5e DR......M._DCS.^ 2120: 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 ^^^.LPCBPHSS..pC 2130: 41 44 4c 60 70 43 53 54 45 61 7b 60 01 60 7b 61 ADL`pCSTEa{`.`{a 2140: 01 61 a0 08 60 70 01 4c 43 44 41 a1 07 70 00 4c .a..`p.LCDA..p.L 2150: 43 44 41 a0 12 4c 43 44 41 a0 07 93 61 01 a4 0a CDA..LCDA...a... 2160: 1f a1 04 a4 0a 1d a1 0e a0 07 93 61 01 a4 0a 0f ...........a.... 2170: a1 04 a4 0a 0d 14 12 5f 44 47 53 00 a0 07 4c 43 ......._DGS...LC 2180: 44 41 a4 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 DA........_DSS.. 2190: 1d 5f 42 43 4c 00 a4 12 15 0a 0a 46 0a 28 00 0a ._BCL......F.(.. 21a0: 0a 0a 14 0a 1e 0a 28 0a 32 0a 3c 0a 46 14 20 5f ......(.2.<.F. _ 21b0: 42 43 4d 01 78 68 0a 0a 60 61 70 61 5e 5e 5e 5e BCM.xh..`apa^^^^ 21c0: 2f 03 4c 50 43 42 45 43 30 5f 42 52 54 53 14 1e /.LPCBEC0_BRTS.. 21d0: 5f 42 51 43 00 77 5e 5e 5e 5e 2f 03 4c 50 43 42 _BQC.w^^^^/.LPCB 21e0: 45 43 30 5f 42 52 54 53 0a 0a 60 a4 60 5b 82 4d EC0_BRTS..`.`[.M 21f0: 08 54 56 5f 5f 14 0a 5f 41 44 52 00 a4 0b 00 02 .TV__.._ADR..... 2200: 14 41 06 5f 44 43 53 00 5e 5e 5e 5e 2e 4c 50 43 .A._DCS.^^^^.LPC 2210: 42 50 48 53 53 0a 0c 70 43 41 44 4c 60 70 43 53 BPHSS..pCADL`pCS 2220: 54 45 61 7b 60 0a 04 60 7b 61 0a 04 61 a0 08 60 TEa{`..`{a..a..` 2230: 70 01 54 56 41 41 a1 07 70 00 54 56 41 41 a0 13 p.TVAA..p.TVAA.. 2240: 54 56 41 41 a0 08 93 61 0a 04 a4 0a 1f a1 04 a4 TVAA...a........ 2250: 0a 1d a1 0f a0 08 93 61 0a 04 a4 0a 0f a1 04 a4 .......a........ 2260: 0a 0d 14 12 5f 44 47 53 00 a0 07 54 56 41 41 a4 ...._DGS...TVAA. 2270: 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 49 10 44 ......._DSS..I.D 2280: 53 53 57 00 a0 4a 0e 93 53 57 49 54 00 5e 5e 5e SSW..J..SWIT.^^^ 2290: 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 41 44 4c .LPCBPHSS..pCADL 22a0: 60 70 43 53 54 45 61 a0 16 94 61 01 7b 60 61 56 `pCSTEa...a.{`aV 22b0: 4c 44 46 7b 56 4c 44 46 0a fe 56 4c 44 46 a0 43 LDF{VLDF..VLDF.C 22c0: 0a 56 4c 44 46 a0 27 93 60 0a 09 a0 0b 93 61 0a .VLDF.'.`.....a. 22d0: 08 53 54 42 4c 0a 02 a0 0a 93 61 01 53 54 42 4c .STBL.....a.STBL 22e0: 0a 03 a0 0a 93 61 0a 09 53 54 42 4c 01 a0 28 93 .....a..STBL..(. 22f0: 60 0a 0a a0 0b 93 61 0a 08 53 54 42 4c 0a 05 a0 `.....a..STBL... 2300: 0a 93 61 0a 02 53 54 42 4c 01 a0 0b 93 61 0a 0a ..a..STBL....a.. 2310: 53 54 42 4c 0a 04 a0 4b 04 93 60 0a 0b a0 0b 93 STBL...K..`..... 2320: 61 0a 08 53 54 42 4c 0a 02 a0 0b 93 61 0a 09 53 a..STBL.....a..S 2330: 54 42 4c 0a 05 a0 0a 93 61 01 53 54 42 4c 0a 03 TBL.....a.STBL.. 2340: a0 0b 93 61 0a 0a 53 54 42 4c 0a 04 a0 0a 93 61 ...a..STBL.....a 2350: 0a 02 53 54 42 4c 01 a0 0a 93 61 0a 0b 53 54 42 ..STBL....a..STB 2360: 4c 01 a1 0c 70 01 56 4c 44 46 53 54 42 4c 01 a1 L...p.VLDFSTBL.. 2370: 16 a0 14 93 53 57 49 54 01 5e 5e 5e 2e 4c 50 43 ....SWIT.^^^.LPC 2380: 42 50 48 53 53 01 14 45 0b 53 54 42 4c 01 a0 16 BPHSS..E.STBL... 2390: 93 68 01 70 00 43 52 54 41 70 01 4c 43 44 41 70 .h.p.CRTAp.LCDAp 23a0: 00 54 56 41 41 a0 17 93 68 0a 02 70 01 43 52 54 .TVAA...h..p.CRT 23b0: 41 70 00 4c 43 44 41 70 00 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23c0: 68 0a 03 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 23d0: 00 54 56 41 41 a0 17 93 68 0a 04 70 00 43 52 54 .TVAA...h..p.CRT 23e0: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23f0: 68 0a 05 70 00 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2400: 01 54 56 41 41 a0 17 93 68 0a 06 70 01 43 52 54 .TVAA...h..p.CRT 2410: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 2420: 68 0a 07 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2430: 01 54 56 41 41 86 56 47 41 5f 0a 80 5b 82 42 f8 .TVAA.VGA_..[.B. 2440: 47 46 58 30 08 5f 41 44 52 0c 00 00 02 00 14 10 GFX0._ADR....... 2450: 5f 44 4f 53 01 70 7b 68 0a 07 00 44 53 45 4e 14 _DOS.p{h...DSEN. 2460: 41 26 5f 44 4f 44 00 70 00 4e 44 49 44 a0 15 92 A&_DOD.p.NDID... 2470: 93 44 49 44 4c 00 70 53 44 44 4c 44 49 44 31 44 .DIDL.pSDDLDID1D 2480: 49 44 31 a0 15 92 93 44 44 4c 32 00 70 53 44 44 ID1....DDL2.pSDD 2490: 4c 44 49 44 32 44 49 44 32 a0 15 92 93 44 44 4c LDID2DID2....DDL 24a0: 33 00 70 53 44 44 4c 44 49 44 33 44 49 44 33 a0 3.pSDDLDID3DID3. 24b0: 15 92 93 44 44 4c 34 00 70 53 44 44 4c 44 49 44 ...DDL4.pSDDLDID 24c0: 34 44 49 44 34 a0 15 92 93 44 44 4c 35 00 70 53 4DID4....DDL5.pS 24d0: 44 44 4c 44 49 44 35 44 49 44 35 a0 2c 93 4e 44 DDLDID5DID5.,.ND 24e0: 49 44 01 08 54 4d 50 31 12 07 01 0c ff ff ff ff ID..TMP1........ 24f0: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2500: 31 00 00 a4 54 4d 50 31 a0 46 04 93 4e 44 49 44 1...TMP1.F..NDID 2510: 0a 02 08 54 4d 50 32 12 0c 02 0c ff ff ff ff 0c ...TMP2......... 2520: ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 ....p}.....DID1. 2530: 88 54 4d 50 32 00 00 70 7d 0c 00 00 01 00 44 49 .TMP2..p}.....DI 2540: 44 32 00 88 54 4d 50 32 01 00 a4 54 4d 50 32 a0 D2..TMP2...TMP2. 2550: 4f 05 93 4e 44 49 44 0a 03 08 54 4d 50 33 12 11 O..NDID...TMP3.. 2560: 03 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 2570: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2580: 33 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 3..p}.....DID2.. 2590: 54 4d 50 33 01 00 70 7d 0c 00 00 01 00 44 49 44 TMP3..p}.....DID 25a0: 33 00 88 54 4d 50 33 0a 02 00 a4 54 4d 50 33 a0 3..TMP3....TMP3. 25b0: 48 07 93 4e 44 49 44 0a 04 08 54 4d 50 34 12 16 H..NDID...TMP4.. 25c0: 04 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 25d0: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 25e0: 00 88 54 4d 50 34 00 00 70 7d 0c 00 00 01 00 44 ..TMP4..p}.....D 25f0: 49 44 32 00 88 54 4d 50 34 01 00 70 7d 0c 00 00 ID2..TMP4..p}... 2600: 01 00 44 49 44 33 00 88 54 4d 50 34 0a 02 00 70 ..DID3..TMP4...p 2610: 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d 50 34 }.....DID4..TMP4 2620: 0a 03 00 a4 54 4d 50 34 a0 41 09 94 4e 44 49 44 ....TMP4.A..NDID 2630: 0a 04 08 54 4d 50 35 12 1b 05 0c ff ff ff ff 0c ...TMP5......... 2640: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 2650: ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 88 ...p}.....DID1.. 2660: 54 4d 50 35 00 00 70 7d 0c 00 00 01 00 44 49 44 TMP5..p}.....DID 2670: 32 00 88 54 4d 50 35 01 00 70 7d 0c 00 00 01 00 2..TMP5..p}..... 2680: 44 49 44 33 00 88 54 4d 50 35 0a 02 00 70 7d 0c DID3..TMP5...p}. 2690: 00 00 01 00 44 49 44 34 00 88 54 4d 50 35 0a 03 ....DID4..TMP5.. 26a0: 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d .p}.....DID4..TM 26b0: 50 35 0a 04 00 a4 54 4d 50 35 a4 12 05 01 0b 00 P5....TMP5...... 26c0: 04 5b 82 43 06 44 44 30 31 14 1c 5f 41 44 52 08 .[.C.DD01.._ADR. 26d0: a0 09 93 44 49 44 31 00 a4 01 a1 0b a4 7b 0b ff ...DID1......{.. 26e0: ff 44 49 44 31 00 14 0f 5f 44 43 53 00 a4 43 44 .DID1..._DCS..CD 26f0: 44 53 44 49 44 31 14 0f 5f 44 47 53 00 a4 4e 44 DSDID1.._DGS..ND 2700: 44 53 44 49 44 31 14 1f 5f 44 53 53 01 a0 18 93 DSDID1.._DSS.... 2710: 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 {h...........pNS 2720: 54 45 43 53 54 45 5b 82 44 06 44 44 30 32 14 1d TECSTE[.D.DD02.. 2730: 5f 41 44 52 08 a0 0a 93 44 49 44 32 00 a4 0a 02 _ADR....DID2.... 2740: a1 0b a4 7b 0b ff ff 44 49 44 32 00 14 0f 5f 44 ...{...DID2..._D 2750: 43 53 00 a4 43 44 44 53 44 49 44 32 14 0f 5f 44 CS..CDDSDID2.._D 2760: 47 53 00 a4 4e 44 44 53 44 49 44 32 14 1f 5f 44 GS..NDDSDID2.._D 2770: 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 SS....{h........ 2780: 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 41 07 ...pNSTECSTE[.A. 2790: 44 44 30 33 14 1d 5f 41 44 52 08 a0 0a 93 44 49 DD03.._ADR....DI 27a0: 44 33 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 49 44 D3.......{...DID 27b0: 33 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 33 3..._DCS....DID3 27c0: 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 33 14 .......CDDSDID3. 27d0: 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 44 33 14 ._DGS..NDDSDID3. 27e0: 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 ._DSS....{h..... 27f0: 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 5b ......pNSTECSTE[ 2800: 82 41 07 44 44 30 34 14 1d 5f 41 44 52 08 a0 0a .A.DD04.._ADR... 2810: 93 44 49 44 34 00 a4 0a 04 a1 0b a4 7b 0b ff ff .DID4.......{... 2820: 44 49 44 34 00 14 1c 5f 44 43 53 00 a0 0a 93 44 DID4..._DCS....D 2830: 49 44 34 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 ID4.......CDDSDI 2840: 44 34 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 D4.._DGS..NDDSDI 2850: 44 34 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 D4.._DSS....{h.. 2860: 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 .........pNSTECS 2870: 54 45 5b 82 41 07 44 44 30 35 14 1d 5f 41 44 52 TE[.A.DD05.._ADR 2880: 08 a0 0a 93 44 49 44 35 00 a4 0a 05 a1 0b a4 7b ....DID5.......{ 2890: 0b ff ff 44 49 44 35 00 14 1c 5f 44 43 53 00 a0 ...DID5..._DCS.. 28a0: 0a 93 44 49 44 35 00 a4 0a 0b a1 0a a4 43 44 44 ..DID5.......CDD 28b0: 53 44 49 44 35 14 0f 5f 44 47 53 00 a4 4e 44 44 SDID5.._DGS..NDD 28c0: 53 44 49 44 35 14 1f 5f 44 53 53 01 a0 18 93 7b SDID5.._DSS....{ 28d0: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 28e0: 45 43 53 54 45 14 4e 06 53 44 44 4c 01 75 4e 44 ECSTE.N.SDDL.uND 28f0: 49 44 70 7b 68 0b 0f 0f 00 60 7d 0c 00 00 00 80 IDp{h....`}..... 2900: 60 61 a0 09 93 44 49 44 4c 60 a4 61 a0 09 93 44 `a...DIDL`.a...D 2910: 44 4c 32 60 a4 61 a0 09 93 44 44 4c 33 60 a4 61 DL2`.a...DDL3`.a 2920: a0 09 93 44 44 4c 34 60 a4 61 a0 09 93 44 44 4c ...DDL4`.a...DDL 2930: 35 60 a4 61 a0 09 93 44 44 4c 36 60 a4 61 a0 09 5`.a...DDL6`.a.. 2940: 93 44 44 4c 37 60 a4 61 a0 09 93 44 44 4c 38 60 .DDL7`.a...DDL8` 2950: a4 61 a4 00 14 4a 08 43 44 44 53 01 a0 0f 93 43 .a...J.CDDS....C 2960: 41 44 4c 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 ADL{h..........C 2970: 41 4c 32 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL2{h..........C 2980: 41 4c 33 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL3{h..........C 2990: 41 4c 34 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL4{h..........C 29a0: 41 4c 35 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL5{h..........C 29b0: 41 4c 36 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL6{h..........C 29c0: 41 4c 37 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL7{h..........C 29d0: 41 4c 38 7b 68 0b 0f 0f 00 a4 0a 1f a4 0a 1d 14 AL8{h........... 29e0: 41 08 4e 44 44 53 01 a0 0e 93 4e 41 44 4c 7b 68 A.NDDS....NADL{h 29f0: 0b 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 32 7b 68 0b .........NDL2{h. 2a00: 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 33 7b 68 0b 0f ........NDL3{h.. 2a10: 0f 00 a4 01 a0 0e 93 4e 44 4c 34 7b 68 0b 0f 0f .......NDL4{h... 2a20: 00 a4 01 a0 0e 93 4e 44 4c 35 7b 68 0b 0f 0f 00 ......NDL5{h.... 2a30: a4 01 a0 0e 93 4e 44 4c 36 7b 68 0b 0f 0f 00 a4 .....NDL6{h..... 2a40: 01 a0 0e 93 4e 44 4c 37 7b 68 0b 0f 0f 00 a4 01 ....NDL7{h...... 2a50: a0 0e 93 4e 44 4c 38 7b 68 0b 0f 0f 00 a4 01 a4 ...NDL8{h....... 2a60: 00 14 40 07 42 52 54 4e 09 a0 14 93 7b 44 49 44 ..@.BRTN....{DID 2a70: 31 0b 00 0f 00 0b 00 04 86 44 44 30 31 68 a0 14 1........DD01h.. 2a80: 93 7b 44 49 44 32 0b 00 0f 00 0b 00 04 86 44 44 .{DID2........DD 2a90: 30 32 68 a0 14 93 7b 44 49 44 33 0b 00 0f 00 0b 02h...{DID3..... 2aa0: 00 04 86 44 44 30 33 68 a0 14 93 7b 44 49 44 34 ...DD03h...{DID4 2ab0: 0b 00 0f 00 0b 00 04 86 44 44 30 34 68 a0 14 93 ........DD04h... 2ac0: 7b 44 49 44 35 0b 00 0f 00 0b 00 04 86 44 44 30 {DID5........DD0 2ad0: 35 68 10 24 5e 5e 50 43 49 30 5b 80 4d 43 48 50 5h.$^^PCI0[.MCHP 2ae0: 02 0a 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 ..@..[..MCHP..@0 2af0: 54 41 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 TASM...[.IGDP..@ 2b00: 0a c0 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 ..[.E.IGDP..@... 2b10: 47 49 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 GIVD...GUMA..... 2b20: 47 4d 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 GMFN....@FASLE.. 2b30: 18 47 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 .GSSE.GSSB.GSES. 2b40: 00 30 00 08 43 44 56 4c 05 00 03 00 18 4c 42 50 .0..CDVL.....LBP 2b50: 43 08 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 C..0ASLS [.IGDM. 2b60: 41 53 4c 42 0b 00 20 5b 81 4e 16 49 47 44 4d 00 ASLB.. [.N.IGDM. 2b70: 53 49 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 SIGN@.SIZE OVER 2b80: 53 56 45 52 40 10 56 56 45 52 40 08 47 56 45 52 SVER@.VVER@.GVER 2b90: 40 08 4d 42 4f 58 20 00 40 52 44 52 44 59 20 43 @.MBOX .@RDRDY C 2ba0: 53 54 53 20 43 45 56 54 20 00 40 0a 44 49 44 4c STS CEVT .@.DIDL 2bb0: 20 44 44 4c 32 20 44 44 4c 33 20 44 44 4c 34 20 DDL2 DDL3 DDL4 2bc0: 44 44 4c 35 20 44 44 4c 36 20 44 44 4c 37 20 44 DDL5 DDL6 DDL7 D 2bd0: 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 20 43 50 DL8 CPDL CPL2 CP 2be0: 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 43 50 4c L3 CPL4 CPL5 CPL 2bf0: 36 20 43 50 4c 37 20 43 50 4c 38 20 43 41 44 4c 6 CPL7 CPL8 CADL 2c00: 20 43 41 4c 32 20 43 41 4c 33 20 43 41 4c 34 20 CAL2 CAL3 CAL4 2c10: 43 41 4c 35 20 43 41 4c 36 20 43 41 4c 37 20 43 CAL5 CAL6 CAL7 C 2c20: 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 20 4e 44 AL8 NADL NDL2 ND 2c30: 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 4e 44 4c L3 NDL4 NDL5 NDL 2c40: 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 53 4c 50 6 NDL7 NDL8 ASLP 2c50: 20 54 49 44 58 20 43 48 50 44 20 43 4c 49 44 20 TIDX CHPD CLID 2c60: 43 44 43 4b 20 53 58 53 57 20 45 56 54 53 20 43 CDCK SXSW EVTS C 2c70: 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 43 49 45 NOT NRDY .@.SCIE 2c80: 01 47 45 46 43 04 47 58 46 43 03 47 45 53 46 08 .GEFC.GXFC.GESF. 2c90: 00 10 50 41 52 4d 20 44 53 4c 50 20 00 40 7a 41 ..PARM DSLP .@zA 2ca0: 52 44 59 20 41 53 4c 43 20 54 43 48 45 20 41 4c RDY ASLC TCHE AL 2cb0: 53 49 20 42 43 4c 50 20 50 46 49 54 20 43 42 4c SI BCLP PFIT CBL 2cc0: 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 00 40 5c V BCLM@.CPFM .@\ 2cd0: 47 56 44 31 80 00 0e 08 44 42 54 42 12 32 15 00 GVD1....DBTB.2.. 2ce0: 0a 07 0a 38 0b c0 01 0b 00 0e 0a 3f 0b c7 01 0b ...8.......?.... 2cf0: 07 0e 0b f8 01 0b 38 0e 0b c0 0f 00 00 00 00 00 ......8......... 2d00: 0b 00 70 0b 07 70 0b 38 70 0b c0 71 0b 00 7e 08 ..p..p.8p..q..~. 2d10: 43 44 43 54 12 23 03 12 0a 03 0a c8 0b 40 01 0b CDCT.#.......@.. 2d20: 90 01 12 0a 03 0a c8 0b 4d 01 0b 90 01 12 0a 03 ........M....... 2d30: 0a de 0b 4d 01 0b 7d 01 08 53 55 43 43 01 08 4e ...M..}..SUCC..N 2d40: 56 4c 44 0a 02 08 43 52 49 54 0a 04 08 4e 43 52 VLD...CRIT...NCR 2d50: 54 0a 06 14 4c 4a 47 53 43 49 08 14 44 1e 47 42 T...LJGSCI..D.GB 2d60: 44 41 08 a0 1a 93 47 45 53 46 00 70 0b 79 02 50 DA....GESF.p.y.P 2d70: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 1a ARMp.GESF.SUCC.. 2d80: 93 47 45 53 46 01 70 0b 40 02 50 41 52 4d 70 00 .GESF.p.@.PARMp. 2d90: 47 45 53 46 a4 53 55 43 43 a0 47 04 93 47 45 53 GESF.SUCC.G..GES 2da0: 46 0a 04 7b 50 41 52 4d 0c 00 00 ff ef 50 41 52 F..{PARM.....PAR 2db0: 4d 7b 50 41 52 4d 79 83 88 44 42 54 42 49 42 54 M{PARMy..DBTBIBT 2dc0: 54 00 0a 10 00 50 41 52 4d 7d 49 42 54 54 50 41 T....PARM}IBTTPA 2dd0: 52 4d 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 RMPARMp.GESF.SUC 2de0: 43 a0 4a 06 93 47 45 53 46 0a 05 70 49 50 53 43 C.J..GESF..pIPSC 2df0: 50 41 52 4d 7d 50 41 52 4d 79 49 50 41 54 0a 08 PARM}PARMyIPAT.. 2e00: 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 41 52 .PARMrPARM...PAR 2e10: 4d 7d 50 41 52 4d 79 4c 49 44 53 0a 10 00 50 41 M}PARMyLIDS...PA 2e20: 52 4d 72 50 41 52 4d 0c 00 00 01 00 50 41 52 4d RMrPARM.....PARM 2e30: 7d 50 41 52 4d 79 49 42 49 41 0a 14 00 50 41 52 }PARMyIBIA...PAR 2e40: 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 2d 93 47 Mp.GESF.SUCC.-.G 2e50: 45 53 46 0a 06 70 49 54 56 46 50 41 52 4d 7d 50 ESF..pITVFPARM}P 2e60: 41 52 4d 79 49 54 56 4d 0a 04 00 50 41 52 4d 70 ARMyITVM...PARMp 2e70: 00 47 45 53 46 a4 53 55 43 43 a0 4f 08 93 47 45 .GESF.SUCC.O..GE 2e80: 53 46 0a 07 70 47 49 56 44 50 41 52 4d 7f 50 41 SF..pGIVDPARM.PA 2e90: 52 4d 01 50 41 52 4d 7d 50 41 52 4d 79 47 4d 46 RM.PARM}PARMyGMF 2ea0: 4e 01 00 50 41 52 4d 7d 50 41 52 4d 0b 00 10 50 N..PARM}PARM...P 2eb0: 41 52 4d a0 16 49 44 4d 4d 7d 50 41 52 4d 79 49 ARM..IDMM}PARMyI 2ec0: 44 4d 53 0a 11 00 50 41 52 4d a1 12 7d 50 41 52 DMS...PARM..}PAR 2ed0: 4d 79 49 44 4d 53 0a 0d 00 50 41 52 4d 7d 79 83 MyIDMS...PARM}y. 2ee0: 88 83 88 43 44 43 54 48 56 43 4f 00 74 43 44 56 ...CDCTHVCO.tCDV 2ef0: 4c 01 00 00 0a 15 00 50 41 52 4d 50 41 52 4d 70 L......PARMPARMp 2f00: 01 47 45 53 46 a4 53 55 43 43 a0 2a 93 47 45 53 .GESF.SUCC.*.GES 2f10: 46 0a 0a 70 00 50 41 52 4d a0 10 49 53 53 43 7d F..p.PARM..ISSC} 2f20: 50 41 52 4d 0a 03 50 41 52 4d 70 00 47 45 53 46 PARM..PARMp.GESF 2f30: a4 53 55 43 43 70 00 47 45 53 46 a4 43 52 49 54 .SUCCp.GESF.CRIT 2f40: 14 41 28 53 42 43 42 08 a0 20 93 47 45 53 46 00 .A(SBCB.. .GESF. 2f50: 70 00 50 41 52 4d 70 0b 7d f7 50 41 52 4d 70 00 p.PARMp.}.PARMp. 2f60: 47 45 53 46 a4 53 55 43 43 a0 18 93 47 45 53 46 GESF.SUCC...GESF 2f70: 01 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 2f80: 43 43 a0 19 93 47 45 53 46 0a 03 70 00 47 45 53 CC...GESF..p.GES 2f90: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 Fp.PARM.SUCC...G 2fa0: 45 53 46 0a 04 70 00 47 45 53 46 70 00 50 41 52 ESF..p.GESFp.PAR 2fb0: 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 05 70 M.SUCC...GESF..p 2fc0: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 2fd0: a0 37 93 47 45 53 46 0a 06 70 7b 50 41 52 4d 0a .7.GESF..p{PARM. 2fe0: 0f 00 49 54 56 46 70 7a 7b 50 41 52 4d 0a f0 00 ..ITVFpz{PARM... 2ff0: 0a 04 00 49 54 56 4d 70 00 47 45 53 46 70 00 50 ...ITVMp.GESFp.P 3000: 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a ARM.SUCC...GESF. 3010: 07 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 3020: 43 43 a0 19 93 47 45 53 46 0a 08 70 00 47 45 53 CC...GESF..p.GES 3030: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 24 93 47 Fp.PARM.SUCC.$.G 3040: 45 53 46 0a 09 7b 50 41 52 4d 0a ff 49 42 54 54 ESF..{PARM..IBTT 3050: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 3060: 43 a0 46 05 93 47 45 53 46 0a 0a 7b 50 41 52 4d C.F..GESF..{PARM 3070: 0a ff 49 50 53 43 a0 21 7b 7a 50 41 52 4d 0a 08 ..IPSC.!{zPARM.. 3080: 00 0a ff 00 7b 7a 50 41 52 4d 0a 08 00 0a ff 49 ....{zPARM.....I 3090: 50 41 54 76 49 50 41 54 7b 7a 50 41 52 4d 0a 14 PATvIPAT{zPARM.. 30a0: 00 0a 07 49 42 49 41 70 00 47 45 53 46 70 00 50 ...IBIAp.GESFp.P 30b0: 41 52 4d a4 53 55 43 43 a0 40 06 93 47 45 53 46 ARM.SUCC.@..GESF 30c0: 0a 0b 7b 7a 50 41 52 4d 01 00 01 49 46 31 45 a0 ..{zPARM...IF1E. 30d0: 21 7b 50 41 52 4d 0c 00 e0 01 00 00 7b 7a 50 41 !{PARM......{zPA 30e0: 52 4d 0a 0d 00 0a 0f 49 44 4d 53 70 00 49 44 4d RM.....IDMSp.IDM 30f0: 4d a1 16 7b 7a 50 41 52 4d 0a 11 00 0a 0f 49 44 M..{zPARM.....ID 3100: 4d 53 70 01 49 44 4d 4d 70 00 47 45 53 46 70 00 MSp.IDMMp.GESFp. 3110: 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 PARM.SUCC...GESF 3120: 0a 10 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 ..p.GESFp.PARM.S 3130: 55 43 43 a0 1f 93 47 45 53 46 0a 11 7d 50 41 52 UCC...GESF..}PAR 3140: 4d 0b 00 01 50 41 52 4d 70 00 47 45 53 46 a4 53 M...PARMp.GESF.S 3150: 55 43 43 a0 49 04 93 47 45 53 46 0a 12 a0 26 7b UCC.I..GESF...&{ 3160: 50 41 52 4d 01 00 a0 10 93 7a 50 41 52 4d 01 00 PARM.....zPARM.. 3170: 01 70 01 49 53 53 43 a1 0c 70 00 47 45 53 46 a4 .p.ISSC..p.GESF. 3180: 43 52 49 54 a1 07 70 00 49 53 53 43 70 00 47 45 CRIT..p.ISSCp.GE 3190: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 SFp.PARM.SUCC... 31a0: 47 45 53 46 0a 13 70 00 47 45 53 46 70 00 50 41 GESF..p.GESFp.PA 31b0: 52 4d a4 53 55 43 43 70 00 47 45 53 46 a4 53 55 RM.SUCCp.GESF.SU 31c0: 43 43 a0 11 93 47 45 46 43 0a 04 70 47 42 44 41 CC...GEFC..pGBDA 31d0: 47 58 46 43 a0 11 93 47 45 46 43 0a 06 70 53 42 GXFC...GEFC..pSB 31e0: 43 42 47 58 46 43 70 00 47 45 46 43 70 01 53 43 CBGXFCp.GEFCp.SC 31f0: 49 53 70 00 47 53 53 45 70 00 53 43 49 45 a4 00 ISp.GSSEp.SCIE.. 3200: 14 19 50 44 52 44 00 a0 0c 92 44 52 44 59 5b 22 ..PDRD....DRDY[" 3210: 41 53 4c 50 a4 92 44 52 44 59 14 1d 50 53 54 53 ASLP..DRDY..PSTS 3220: 00 a0 0e 94 43 53 54 53 0a 02 5b 22 41 53 4c 50 ....CSTS..["ASLP 3230: a4 93 43 53 54 53 0a 03 14 47 06 47 4e 4f 54 02 ..CSTS...G.GNOT. 3240: a0 07 50 44 52 44 a4 01 a0 07 50 53 54 53 a4 01 ..PDRD....PSTS.. 3250: 70 68 43 45 56 54 70 0a 03 43 53 54 53 a0 2c 90 phCEVTp..CSTS.,. 3260: 93 43 48 50 44 00 93 69 00 a0 18 91 94 4f 53 59 .CHPD..i.....OSY 3270: 53 0b d0 07 95 4f 53 59 53 0b d6 07 86 50 43 49 S....OSYS....PCI 3280: 30 69 a1 07 86 47 46 58 30 69 86 47 46 58 30 0a 0i...GFX0i.GFX0. 3290: 80 a0 0c 92 50 53 54 53 70 00 43 45 56 54 a4 00 ....PSTSp.CEVT.. 32a0: 14 13 47 48 44 53 01 70 68 54 49 44 58 a4 47 4e ..GHDS.phTIDX.GN 32b0: 4f 54 01 00 14 14 47 4c 49 44 01 70 68 43 4c 49 OT....GLID.phCLI 32c0: 44 a4 47 4e 4f 54 0a 02 00 14 15 47 44 43 4b 01 D.GNOT.....GDCK. 32d0: 70 68 43 44 43 4b a4 47 4e 4f 54 0a 04 0a 80 14 phCDCK.GNOT..... 32e0: 19 50 41 52 44 00 a0 0c 92 41 52 44 59 5b 22 41 .PARD....ARDY["A 32f0: 53 4c 50 a4 92 41 52 44 59 14 46 0c 41 49 4e 54 SLP..ARDY.F.AINT 3300: 02 a0 0e 92 7b 54 43 48 45 79 01 68 00 00 a4 01 ....{TCHEy.h.... 3310: a0 07 50 41 52 44 a4 01 a0 4c 05 93 68 0a 02 a0 ..PARD...L..h... 3320: 33 43 50 46 4d a0 0e 93 43 50 46 4d 01 70 0a 06 3CPFM...CPFM.p.. 3330: 50 46 49 54 a0 0f 93 43 50 46 4d 0a 06 70 0a 08 PFIT...CPFM..p.. 3340: 50 46 49 54 a0 0e 93 43 50 46 4d 0a 08 70 01 50 PFIT...CPFM..p.P 3350: 46 49 54 a1 0c 7f 50 46 49 54 0a 07 50 46 49 54 FIT...PFIT..PFIT 3360: 7d 50 46 49 54 0c 00 00 00 80 50 46 49 54 70 0a }PFIT.....PFITp. 3370: 04 41 53 4c 43 a1 42 04 a0 28 93 68 01 70 78 77 .ASLC.B..(.h.pxw 3380: 69 0a ff 00 0a 64 00 00 42 43 4c 50 7d 42 43 4c i....d..BCLP}BCL 3390: 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 41 53 4c P.....BCLPp..ASL 33a0: 43 a1 16 a0 10 93 68 00 70 69 41 4c 53 49 70 01 C.....h.piALSIp. 33b0: 41 53 4c 43 a1 03 a4 01 70 00 4c 42 50 43 a4 00 ASLC....p.LBPC.. 33c0: 10 41 36 5c 00 5b 80 49 4f 5f 54 01 0b 00 08 0a .A6\.[.IO_T..... 33d0: 10 5b 81 0e 49 4f 5f 54 01 00 40 04 54 52 50 30 .[..IO_T..@.TRP0 33e0: 08 5b 80 50 4d 49 4f 01 0b 00 10 0a 80 5b 81 28 .[.PMIO......[.( 33f0: 50 4d 49 4f 01 00 40 15 00 08 00 02 41 43 50 57 PMIO..@.....ACPW 3400: 01 00 45 0b 00 01 47 50 45 43 01 00 4e 10 00 09 ..E...GPEC..N... 3410: 53 43 49 53 01 00 06 5b 80 47 50 49 4f 01 0b 80 SCIS...[.GPIO... 3420: 11 0a 3c 5b 81 40 0c 47 50 49 4f 01 47 55 30 30 ..<[.@.GPIO.GU00 3430: 08 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 .GU01.GU02.GU03. 3440: 47 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 GIO0.GIO1.GIO2.G 3450: 49 4f 33 08 00 20 47 4c 30 30 08 47 4c 30 31 08 IO3.. GL00.GL01. 3460: 47 4c 30 32 08 00 03 47 50 32 37 01 47 50 32 38 GL02...GP27.GP28 3470: 01 00 03 00 40 04 47 42 30 30 08 47 42 30 31 08 ....@.GB00.GB01. 3480: 47 42 30 32 08 47 42 30 33 08 00 40 08 47 49 56 GB02.GB03..@.GIV 3490: 30 08 00 03 4c 50 4f 4c 01 00 04 47 49 56 32 08 0...LPOL...GIV2. 34a0: 47 49 56 33 08 47 55 30 34 08 47 55 30 35 08 47 GIV3.GU04.GU05.G 34b0: 55 30 36 08 47 55 30 37 08 47 49 4f 34 08 47 49 U06.GU07.GIO4.GI 34c0: 4f 35 08 47 49 4f 36 08 47 49 4f 37 08 00 05 47 O5.GIO6.GIO7...G 34d0: 50 33 37 01 00 02 47 4c 30 35 08 47 4c 30 36 08 P37...GL05.GL06. 34e0: 47 4c 30 37 08 5b 80 52 43 52 42 00 0c 00 c0 d1 GL07.[.RCRB..... 34f0: fe 0b 00 40 5b 81 48 05 52 43 52 42 13 00 80 00 ...@[.H.RCRB.... 3500: 08 00 80 00 10 00 80 02 02 48 50 41 53 02 00 05 .........HPAS... 3510: 48 50 41 45 01 00 48 09 00 01 50 41 54 44 01 53 HPAE..H...PATD.S 3520: 41 54 44 01 53 4d 42 44 01 48 44 41 44 01 00 0b ATD.SMBD.HDAD... 3530: 52 50 31 44 01 52 50 32 44 01 52 50 33 44 01 52 RP1D.RP2D.RP3D.R 3540: 50 34 44 01 52 50 35 44 01 52 50 36 44 01 08 5f P4D.RP5D.RP6D.._ 3550: 53 30 5f 12 05 03 00 00 00 08 5f 53 33 5f 12 07 S0_......._S3_.. 3560: 03 0a 05 0a 05 00 08 5f 53 34 5f 12 07 03 0a 06 ......._S4_..... 3570: 0a 06 00 08 5f 53 35 5f 12 07 03 0a 07 0a 07 00 ...._S5_........ 3580: 14 45 04 47 45 54 50 09 a0 0e 93 7b 68 0a 09 00 .E.GETP....{h... 3590: 00 a4 0c ff ff ff ff a0 0d 93 7b 68 0a 09 00 0a ..........{h.... 35a0: 08 a4 0b 84 03 7a 7b 68 0b 00 03 00 0a 08 60 7a .....z{h......`z 35b0: 7b 68 0b 00 30 00 0a 0c 61 a4 77 0a 1e 74 0a 09 {h..0...a.w..t.. 35c0: 72 60 61 00 00 00 14 30 47 44 4d 41 0d a0 23 68 r`a....0GDMA..#h 35d0: a0 07 90 69 6c a4 0a 14 a0 0e 90 6a 6c a4 77 74 ...il......jl.wt 35e0: 0a 04 6b 00 0a 0f 00 a4 77 74 0a 04 6b 00 0a 1e ..k.....wt..k... 35f0: 00 a4 0c ff ff ff ff 14 1f 47 45 54 54 09 a4 77 .........GETT..w 3600: 0a 1e 74 0a 09 72 7b 7a 68 0a 02 00 0a 03 00 7b ..t..r{zh......{ 3610: 68 0a 03 00 00 00 00 14 44 06 47 45 54 46 0b 08 h.......D.GETF.. 3620: 54 4d 50 46 00 a0 0c 68 7d 54 4d 50 46 01 54 4d TMPF...h}TMPF.TM 3630: 50 46 a0 11 7b 6a 0a 02 00 7d 54 4d 50 46 0a 02 PF..{j...}TMPF.. 3640: 54 4d 50 46 a0 0d 69 7d 54 4d 50 46 0a 04 54 4d TMPF..i}TMPF..TM 3650: 50 46 a0 11 7b 6a 0a 20 00 7d 54 4d 50 46 0a 08 PF..{j. .}TMPF.. 3660: 54 4d 50 46 a0 12 7b 6a 0b 00 40 00 7d 54 4d 50 TMPF..{j..@.}TMP 3670: 46 0a 10 54 4d 50 46 a4 54 4d 50 46 14 3d 53 45 F..TMPF.TMPF.=SE 3680: 54 50 0b a0 08 94 68 0a f0 a4 0a 08 a1 2d a0 27 TP....h......-.' 3690: 7b 69 0a 02 00 a0 10 90 92 94 68 0a 78 7b 6a 0a {i........h.x{j. 36a0: 02 00 a4 0b 01 23 a0 0f 90 92 94 68 0a b4 7b 6a .....#.....h..{j 36b0: 01 00 a4 0b 01 21 a4 0b 01 10 14 37 53 44 4d 41 .....!.....7SDMA 36c0: 09 a0 08 92 94 68 0a 14 a4 01 a0 09 92 94 68 0a .....h........h. 36d0: 1e a4 0a 02 a0 08 92 94 68 0a 2d a4 01 a0 09 92 ........h.-..... 36e0: 94 68 0a 3c a4 0a 02 a0 08 92 94 68 0a 5a a4 01 .h.<.......h.Z.. 36f0: a4 00 14 2f 53 45 54 54 0b a0 25 7b 69 0a 02 00 .../SETT..%{i... 3700: a0 0f 90 92 94 68 0a 78 7b 6a 0a 02 00 a4 0a 0b .....h.x{j...... 3710: a0 0e 90 92 94 68 0a b4 7b 6a 01 00 a4 0a 09 a4 .....h..{j...... 3720: 0a 04 5b 82 4b 04 48 44 45 46 08 5f 41 44 52 0c ..[.K.HDEF._ADR. 3730: 00 00 1b 00 5b 80 48 44 41 52 02 0a 4c 0a 10 5b ....[.HDAR..L..[ 3740: 81 22 48 44 41 52 02 44 43 4b 41 01 00 07 44 43 ."HDAR.DCKA...DC 3750: 4b 4d 01 00 06 44 43 4b 53 01 00 30 00 0f 50 4d KM...DCKS..0..PM 3760: 45 53 01 08 5f 50 52 57 12 06 02 0a 0d 0a 03 5b ES.._PRW.......[ 3770: 82 41 10 52 50 30 31 08 5f 41 44 52 0c 00 00 1c .A.RP01._ADR.... 3780: 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 45 04 .[.PXCS..@..[.E. 3790: 50 58 43 53 40 00 40 09 00 0d 4c 41 53 58 01 00 PXCS@.@...LASX.. 37a0: 32 41 42 50 58 01 00 02 50 44 43 58 01 00 02 50 2ABPX...PDCX...P 37b0: 44 53 58 01 00 01 4c 53 43 58 01 00 27 00 10 50 DSX...LSCX..'..P 37c0: 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 01 50 4d SPX..O<..HPSX.PM 37d0: 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 44 52 00 SX.[..PXSX._ADR. 37e0: 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 .A._PRT..3GPIC.. 37f0: 2c 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ,............... 3800: ff ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a ................ 3810: 12 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 .............E.. 3820: 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 .A.........^^.LP 3830: 43 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e CBLNKA........^^ 3840: 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff .LPCBLNKB....... 3850: 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 ..^^.LPCBLNKC... 3860: 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b ......^^.LPCBLNK 3870: 44 00 5b 82 41 10 52 50 30 32 08 5f 41 44 52 0c D.[.A.RP02._ADR. 3880: 01 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b ....[.PXCS..@..[ 3890: 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c 41 53 .E.PXCS@.@...LAS 38a0: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 38b0: 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 ..PDSX...LSCX..' 38c0: 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 ..PSPX..O<..HPSX 38d0: 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 .PMSX.[..PXSX._A 38e0: 44 52 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 DR..A._PRT..3GPI 38f0: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 11 12 C..,............ 3900: 09 04 0b ff ff 01 00 0a 12 12 0a 04 0b ff ff 0a ................ 3910: 02 00 0a 13 12 0a 04 0b ff ff 0a 03 00 0a 10 a1 ................ 3920: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3930: 2e 4c 50 43 42 4c 4e 4b 42 00 12 12 04 0b ff ff .LPCBLNKB....... 3940: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 3950: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 3960: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3970: 4c 4e 4b 41 00 5b 82 4d 11 52 50 30 33 08 5f 41 LNKA.[.M.RP03._A 3980: 44 52 0c 02 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3990: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 39a0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 39b0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 39c0: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 39d0: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 39e0: 08 5f 41 44 52 00 08 2e 50 58 53 58 5f 52 4d 56 ._ADR...PXSX_RMV 39f0: 01 08 2e 50 58 53 58 5f 50 52 57 12 06 02 0a 09 ...PXSX_PRW..... 3a00: 0a 03 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 ...A._PRT..3GPIC 3a10: a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 12 12 09 ..,............. 3a20: 04 0b ff ff 01 00 0a 13 12 0a 04 0b ff ff 0a 02 ................ 3a30: 00 0a 10 12 0a 04 0b ff ff 0a 03 00 0a 11 a1 45 ...............E 3a40: 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e ...A.........^^. 3a50: 4c 50 43 42 4c 4e 4b 43 00 12 12 04 0b ff ff 01 LPCBLNKC........ 3a60: 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0b ^^.LPCBLNKD..... 3a70: ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 ....^^.LPCBLNKA. 3a80: 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3a90: 4e 4b 42 00 5b 82 4f 11 52 50 30 34 08 5f 41 44 NKB.[.O.RP04._AD 3aa0: 52 0c 03 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a R.....[.PXCS..@. 3ab0: c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c .[.E.PXCS@.@...L 3ac0: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 3ad0: 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 X...PDSX...LSCX. 3ae0: 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 .'..PSPX..O<..HP 3af0: 53 58 01 50 4d 53 58 01 5b 82 29 50 58 53 58 08 SX.PMSX.[.)PXSX. 3b00: 5f 41 44 52 00 14 1d 5f 50 52 57 00 a0 0d 57 4b _ADR..._PRW...WK 3b10: 4c 4e a4 12 06 02 0a 09 0a 03 a1 08 a4 12 05 02 LN.............. 3b20: 0a 09 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 ....A._PRT..3GPI 3b30: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 C..,............ 3b40: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 3b50: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 a1 ................ 3b60: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3b70: 2e 4c 50 43 42 4c 4e 4b 44 00 12 12 04 0b ff ff .LPCBLNKD....... 3b80: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 .^^.LPCBLNKA.... 3b90: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 .....^^.LPCBLNKB 3ba0: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3bb0: 4c 4e 4b 43 00 5b 82 41 10 52 50 30 35 08 5f 41 LNKC.[.A.RP05._A 3bc0: 44 52 0c 04 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3bd0: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 3be0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 3bf0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 3c00: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 3c10: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 3c20: 08 5f 41 44 52 00 14 41 09 5f 50 52 54 00 a0 33 ._ADR..A._PRT..3 3c30: 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 GPIC..,......... 3c40: 0a 10 12 09 04 0b ff ff 01 00 0a 11 12 0a 04 0b ................ 3c50: ff ff 0a 02 00 0a 12 12 0a 04 0b ff ff 0a 03 00 ................ 3c60: 0a 13 a1 45 05 a4 12 41 05 04 12 12 04 0b ff ff ...E...A........ 3c70: 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 12 04 .^^.LPCBLNKA.... 3c80: 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3c90: 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3ca0: 4e 4b 43 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c NKC.........^^.L 3cb0: 50 43 42 4c 4e 4b 44 00 5b 82 41 10 52 50 30 36 PCBLNKD.[.A.RP06 3cc0: 08 5f 41 44 52 0c 05 00 1c 00 5b 80 50 58 43 53 ._ADR.....[.PXCS 3cd0: 02 0a 40 0a c0 5b 81 45 04 50 58 43 53 40 00 40 ..@..[.E.PXCS@.@ 3ce0: 09 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 ...LASX..2ABPX.. 3cf0: 02 50 44 43 58 01 00 02 50 44 53 58 01 00 01 4c .PDCX...PDSX...L 3d00: 53 43 58 01 00 27 00 10 50 53 50 58 01 00 4f 3c SCX..'..PSPX..O< 3d10: 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 ..HPSX.PMSX.[..P 3d20: 58 53 58 08 5f 41 44 52 00 14 41 09 5f 50 52 54 XSX._ADR..A._PRT 3d30: 00 a0 33 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ..3GPIC..,...... 3d40: ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a 12 12 ................ 3d50: 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ff ff ................ 3d60: 0a 03 00 0a 10 a1 45 05 a4 12 41 05 04 12 12 04 ......E...A..... 3d70: 0b ff ff 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3d80: 12 12 04 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 3d90: 4b 43 00 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 KC.........^^.LP 3da0: 43 42 4c 4e 4b 44 00 12 13 04 0b ff ff 0a 03 5e CBLNKD.........^ 3db0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 4d 06 55 ^.LPCBLNKA.[.M.U 3dc0: 53 42 31 08 5f 41 44 52 0c 00 00 1d 00 5b 80 55 SB1._ADR.....[.U 3dd0: 31 43 53 02 0a c4 0a 04 5b 81 0b 55 31 43 53 03 1CS.....[..U1CS. 3de0: 55 31 45 4e 02 08 5f 50 52 57 12 06 02 0a 03 0a U1EN.._PRW...... 3df0: 03 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 ..$_PSW...hp.ACP 3e00: 57 a0 0c 41 43 50 57 70 0a 03 55 31 45 4e a1 07 W..ACPWp..U1EN.. 3e10: 70 00 55 31 45 4e 14 09 5f 53 33 44 00 a4 0a 02 p.U1EN.._S3D.... 3e20: 14 09 5f 53 34 44 00 a4 0a 02 5b 82 4c 06 55 53 .._S4D....[.L.US 3e30: 42 32 08 5f 41 44 52 0c 01 00 1d 00 5b 80 55 32 B2._ADR.....[.U2 3e40: 43 53 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 CS.....[..U2CS.U 3e50: 32 45 4e 02 08 5f 50 52 57 12 06 02 0a 04 0a 03 2EN.._PRW....... 3e60: 14 23 5f 50 53 57 01 a0 14 68 70 01 41 43 50 57 .#_PSW...hp.ACPW 3e70: a0 0b 41 43 50 57 70 01 55 32 45 4e a1 07 70 00 ..ACPWp.U2EN..p. 3e80: 55 32 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 U2EN.._S3D...... 3e90: 5f 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 33 _S4D....[.M.USB3 3ea0: 08 5f 41 44 52 0c 02 00 1d 00 5b 80 55 32 43 53 ._ADR.....[.U2CS 3eb0: 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 33 45 .....[..U2CS.U3E 3ec0: 4e 02 08 5f 50 52 57 12 06 02 0a 0c 0a 03 14 24 N.._PRW........$ 3ed0: 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c _PSW...hp.ACPW.. 3ee0: 41 43 50 57 70 0a 03 55 33 45 4e a1 07 70 00 55 ACPWp..U3EN..p.U 3ef0: 33 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 3EN.._S3D......_ 3f00: 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 34 08 S4D....[.M.USB4. 3f10: 5f 41 44 52 0c 00 00 1a 00 5b 80 55 34 43 53 02 _ADR.....[.U4CS. 3f20: 0a c4 0a 04 5b 81 0b 55 34 43 53 03 55 34 45 4e ....[..U4CS.U4EN 3f30: 02 08 5f 50 52 57 12 06 02 0a 0e 0a 03 14 24 5f .._PRW........$_ 3f40: 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c 41 PSW...hp.ACPW..A 3f50: 43 50 57 70 0a 03 55 34 45 4e a1 07 70 00 55 34 CPWp..U4EN..p.U4 3f60: 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 EN.._S3D......_S 3f70: 34 44 00 a4 0a 02 5b 82 41 06 55 53 42 35 08 5f 4D....[.A.USB5._ 3f80: 41 44 52 0c 01 00 1a 00 5b 80 55 35 43 53 02 0a ADR.....[.U5CS.. 3f90: c4 0a 04 5b 81 0b 55 35 43 53 03 55 35 45 4e 02 ...[..U5CS.U5EN. 3fa0: 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 .$_PSW...hp.ACPW 3fb0: a0 0c 41 43 50 57 70 0a 03 55 35 45 4e a1 07 70 ..ACPWp..U5EN..p 3fc0: 00 55 35 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 .U5EN.._S3D..... 3fd0: 09 5f 53 34 44 00 a4 0a 02 5b 82 4b 0a 45 48 43 ._S4D....[.K.EHC 3fe0: 31 08 5f 41 44 52 0c 07 00 1d 00 5b 80 55 37 43 1._ADR.....[.U7C 3ff0: 53 02 0a 54 0a 04 5b 81 0d 55 37 43 53 03 00 0f S..T..[..U7CS... 4000: 50 4d 45 53 01 5b 82 4f 05 48 55 42 37 08 5f 41 PMES.[.O.HUB7._A 4010: 44 52 00 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 DR.[..PRT1._ADR. 4020: 5b 82 0c 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 [..PRT2._ADR..[. 4030: 0c 50 52 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 .PRT3._ADR..[..P 4040: 52 54 34 08 5f 41 44 52 0a 04 5b 82 0c 50 52 54 RT4._ADR..[..PRT 4050: 35 08 5f 41 44 52 0a 05 5b 82 0c 50 52 54 36 08 5._ADR..[..PRT6. 4060: 5f 41 44 52 0a 06 08 5f 50 52 57 12 06 02 0a 0d _ADR..._PRW..... 4070: 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 ...._S3D......_S 4080: 34 44 00 a4 0a 02 5b 82 4f 08 45 48 43 32 08 5f 4D....[.O.EHC2._ 4090: 41 44 52 0c 07 00 1a 00 5b 80 55 46 43 53 02 0a ADR.....[.UFCS.. 40a0: 54 0a 04 5b 81 0d 55 46 43 53 03 00 0f 50 4d 45 T..[..UFCS...PME 40b0: 53 01 5b 82 43 04 48 55 42 37 08 5f 41 44 52 00 S.[.C.HUB7._ADR. 40c0: 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 5b 82 0c [..PRT1._ADR.[.. 40d0: 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 0c 50 52 PRT2._ADR..[..PR 40e0: 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 52 54 34 T3._ADR..[..PRT4 40f0: 08 5f 41 44 52 0a 04 08 5f 50 52 57 12 06 02 0a ._ADR..._PRW.... 4100: 0d 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f ....._S3D......_ 4110: 53 34 44 00 a4 0a 02 5b 82 4a 06 50 43 49 42 08 S4D....[.J.PCIB. 4120: 5f 41 44 52 0c 00 00 1e 00 14 49 05 5f 50 52 54 _ADR......I._PRT 4130: 00 a0 21 47 50 49 43 a4 12 1a 02 12 0b 04 0c ff ..!GPIC......... 4140: ff 06 00 00 00 0a 16 12 0b 04 0c ff ff 06 00 01 ................ 4150: 00 0a 17 a1 2f a4 12 2c 02 12 14 04 0c ff ff 06 ..../..,........ 4160: 00 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 47 00 12 14 ..^^.LPCBLNKG... 4170: 04 0c ff ff 06 00 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 4180: 4b 48 00 5b 82 8d 2e 01 4c 50 43 42 08 5f 41 44 KH.[....LPCB._AD 4190: 52 0c 00 00 1f 00 5b 80 4c 50 43 30 02 0a 40 0a R.....[.LPC0..@. 41a0: c0 5b 81 4d 07 4c 50 43 30 00 00 40 10 50 41 52 .[.M.LPC0..@.PAR 41b0: 43 08 50 42 52 43 08 50 43 52 43 08 50 44 52 43 C.PBRC.PCRC.PDRC 41c0: 08 00 20 50 45 52 43 08 50 46 52 43 08 50 47 52 .. PERC.PFRC.PGR 41d0: 43 08 50 48 52 43 08 00 40 0a 43 4d 41 52 03 00 C.PHRC..@.CMAR.. 41e0: 01 43 4d 42 52 03 00 01 4c 50 54 52 02 00 06 43 .CMBR...LPTR...C 41f0: 4d 41 44 01 43 4d 42 44 01 4c 50 54 44 01 46 44 MAD.CMBD.LPTD.FD 4200: 44 44 01 00 2c 49 4f 52 32 10 00 02 4c 47 52 4d DD..,IOR2...LGRM 4210: 06 00 48 32 52 41 45 4e 01 00 0d 52 43 42 41 12 ..H2RAEN...RCBA. 4220: 5b 80 53 4d 49 30 01 0c 00 fe 00 00 0c 02 00 00 [.SMI0.......... 4230: 00 5b 81 0b 53 4d 49 30 00 53 4d 49 43 08 5b 80 .[..SMI0.SMIC.[. 4240: 53 4d 49 31 00 0c bd 2e 6e bf 0c 90 00 00 00 5b SMI1....n......[ 4250: 81 16 53 4d 49 31 00 42 43 4d 44 08 44 49 44 5f ..SMI1.BCMD.DID_ 4260: 20 49 4e 46 4f 40 40 5b 81 15 53 4d 49 31 00 01 INFO@@[..SMI1.. 4270: 01 00 00 28 49 4e 46 5f 08 49 4e 46 31 20 5b 01 ...(INF_.INF1 [. 4280: 50 53 4d 58 00 14 27 50 48 53 53 01 5b 23 50 53 PSMX..'PHSS.[#PS 4290: 4d 58 ff ff 70 0a 80 42 43 4d 44 70 68 44 49 44 MX..p..BCMDphDID 42a0: 5f 70 00 53 4d 49 43 5b 27 50 53 4d 58 5b 82 41 _p.SMIC['PSMX[.A 42b0: 0a 4c 4e 4b 41 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKA._HID.A.... 42c0: 5f 55 49 44 01 14 0d 5f 44 49 53 08 70 0a 80 50 _UID..._DIS.p..P 42d0: 41 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ARC._PRS....#... 42e0: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 41 11 09 y..8_CRS..RTLA.. 42f0: 0a 06 23 00 00 18 79 00 8b 52 54 4c 41 01 49 52 ..#...y..RTLA.IR 4300: 51 30 70 00 49 52 51 30 79 01 7b 50 41 52 43 0a Q0p.IRQ0y.{PARC. 4310: 0f 00 49 52 51 30 a4 52 54 4c 41 14 1b 5f 53 52 ..IRQ0.RTLA.._SR 4320: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 4330: 60 70 60 50 41 52 43 14 18 5f 53 54 41 08 a0 0c `p`PARC.._STA... 4340: 7b 50 41 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PARC........... 4350: 5b 82 42 0a 4c 4e 4b 42 08 5f 48 49 44 0c 41 d0 [.B.LNKB._HID.A. 4360: 0c 0f 08 5f 55 49 44 0a 02 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4370: 70 0a 80 50 42 52 43 08 5f 50 52 53 11 09 0a 06 p..PBRC._PRS.... 4380: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4390: 4c 42 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LB....#...y..RTL 43a0: 42 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 B.IRQ0p.IRQ0y.{P 43b0: 42 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 42 14 BRC...IRQ0.RTLB. 43c0: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 43d0: 51 30 60 76 60 70 60 50 42 52 43 14 18 5f 53 54 Q0`v`p`PBRC.._ST 43e0: 41 08 a0 0c 7b 50 42 52 43 0a 80 00 a4 0a 09 a1 A...{PBRC....... 43f0: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 43 08 5f 48 49 ....[.B.LNKC._HI 4400: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 03 14 0d 5f D.A...._UID...._ 4410: 44 49 53 08 70 0a 80 50 43 52 43 08 5f 50 52 53 DIS.p..PCRC._PRS 4420: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 4430: 08 08 52 54 4c 43 11 09 0a 06 23 00 00 18 79 00 ..RTLC....#...y. 4440: 8b 52 54 4c 43 01 49 52 51 30 70 00 49 52 51 30 .RTLC.IRQ0p.IRQ0 4450: 79 01 7b 50 43 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PCRC...IRQ0.R 4460: 54 4c 43 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLC.._SRS..h.IRQ 4470: 30 82 49 52 51 30 60 76 60 70 60 50 43 52 43 14 0.IRQ0`v`p`PCRC. 4480: 18 5f 53 54 41 08 a0 0c 7b 50 43 52 43 0a 80 00 ._STA...{PCRC... 4490: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 44 ........[.B.LNKD 44a0: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 44b0: 04 14 0d 5f 44 49 53 08 70 0a 80 50 44 52 43 08 ..._DIS.p..PDRC. 44c0: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 44d0: 5f 43 52 53 08 08 52 54 4c 44 11 09 0a 06 23 00 _CRS..RTLD....#. 44e0: 00 18 79 00 8b 52 54 4c 44 01 49 52 51 30 70 00 ..y..RTLD.IRQ0p. 44f0: 49 52 51 30 79 01 7b 50 44 52 43 0a 0f 00 49 52 IRQ0y.{PDRC...IR 4500: 51 30 a4 52 54 4c 44 14 1b 5f 53 52 53 09 8b 68 Q0.RTLD.._SRS..h 4510: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 4520: 44 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 44 52 DRC.._STA...{PDR 4530: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a C...........[.B. 4540: 4c 4e 4b 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f LNKE._HID.A...._ 4550: 55 49 44 0a 05 14 0d 5f 44 49 53 08 70 0a 80 50 UID...._DIS.p..P 4560: 45 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ERC._PRS....#... 4570: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 45 11 09 y..8_CRS..RTLE.. 4580: 0a 06 23 00 00 18 79 00 8b 52 54 4c 45 01 49 52 ..#...y..RTLE.IR 4590: 51 30 70 00 49 52 51 30 79 01 7b 50 45 52 43 0a Q0p.IRQ0y.{PERC. 45a0: 0f 00 49 52 51 30 a4 52 54 4c 45 14 1b 5f 53 52 ..IRQ0.RTLE.._SR 45b0: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 45c0: 60 70 60 50 45 52 43 14 18 5f 53 54 41 08 a0 0c `p`PERC.._STA... 45d0: 7b 50 45 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PERC........... 45e0: 5b 82 42 0a 4c 4e 4b 46 08 5f 48 49 44 0c 41 d0 [.B.LNKF._HID.A. 45f0: 0c 0f 08 5f 55 49 44 0a 06 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4600: 70 0a 80 50 46 52 43 08 5f 50 52 53 11 09 0a 06 p..PFRC._PRS.... 4610: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4620: 4c 46 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LF....#...y..RTL 4630: 46 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 F.IRQ0p.IRQ0y.{P 4640: 46 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 46 14 FRC...IRQ0.RTLF. 4650: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 4660: 51 30 60 76 60 70 60 50 46 52 43 14 18 5f 53 54 Q0`v`p`PFRC.._ST 4670: 41 08 a0 0c 7b 50 46 52 43 0a 80 00 a4 0a 09 a1 A...{PFRC....... 4680: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 47 08 5f 48 49 ....[.B.LNKG._HI 4690: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 0d 5f D.A...._UID...._ 46a0: 44 49 53 08 70 0a 80 50 47 52 43 08 5f 50 52 53 DIS.p..PGRC._PRS 46b0: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 46c0: 08 08 52 54 4c 47 11 09 0a 06 23 00 00 18 79 00 ..RTLG....#...y. 46d0: 8b 52 54 4c 47 01 49 52 51 30 70 00 49 52 51 30 .RTLG.IRQ0p.IRQ0 46e0: 79 01 7b 50 47 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PGRC...IRQ0.R 46f0: 54 4c 47 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLG.._SRS..h.IRQ 4700: 30 82 49 52 51 30 60 76 60 70 60 50 47 52 43 14 0.IRQ0`v`p`PGRC. 4710: 18 5f 53 54 41 08 a0 0c 7b 50 47 52 43 0a 80 00 ._STA...{PGRC... 4720: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 48 ........[.B.LNKH 4730: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 4740: 08 14 0d 5f 44 49 53 08 70 0a 80 50 48 52 43 08 ..._DIS.p..PHRC. 4750: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 4760: 5f 43 52 53 08 08 52 54 4c 48 11 09 0a 06 23 00 _CRS..RTLH....#. 4770: 00 18 79 00 8b 52 54 4c 48 01 49 52 51 30 70 00 ..y..RTLH.IRQ0p. 4780: 49 52 51 30 79 01 7b 50 48 52 43 0a 0f 00 49 52 IRQ0y.{PHRC...IR 4790: 51 30 a4 52 54 4c 48 14 1b 5f 53 52 53 09 8b 68 Q0.RTLH.._SRS..h 47a0: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 47b0: 48 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 48 52 HRC.._STA...{PHR 47c0: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 3d 44 C...........[.=D 47d0: 4d 41 43 08 5f 48 49 44 0c 41 d0 02 00 08 5f 43 MAC._HID.A...._C 47e0: 52 53 11 28 0a 25 47 01 00 00 00 00 01 20 47 01 RS.(.%G...... G. 47f0: 81 00 81 00 01 11 47 01 93 00 93 00 01 0d 47 01 ......G.......G. 4800: c0 00 c0 00 01 20 2a 10 01 79 00 5b 82 26 46 57 ..... *..y.[.&FW 4810: 48 44 08 5f 48 49 44 0c 25 d4 08 00 08 5f 43 52 HD._HID.%...._CR 4820: 53 11 11 0a 0e 86 09 00 00 00 00 00 ff 00 00 00 S............... 4830: 01 79 00 5b 82 40 0b 48 50 45 54 08 5f 48 49 44 .y.[.@.HPET._HID 4840: 0c 41 d0 01 03 08 5f 43 49 44 0c 41 d0 0c 01 08 .A...._CID.A.... 4850: 42 55 46 30 11 11 0a 0e 86 09 00 00 00 00 d0 fe BUF0............ 4860: 00 04 00 00 79 00 14 27 5f 53 54 41 00 a0 13 92 ....y..'_STA.... 4870: 95 4f 53 59 53 0b d1 07 a0 08 48 50 41 45 a4 0a .OSYS.....HPAE.. 4880: 0f a1 0a a0 08 48 50 41 45 a4 0a 0b a4 00 14 46 .....HPAE......F 4890: 05 5f 43 52 53 08 a0 49 04 48 50 41 45 8a 42 55 ._CRS..I.HPAE.BU 48a0: 46 30 0a 04 48 50 54 30 a0 11 93 48 50 41 53 01 F0..HPT0...HPAS. 48b0: 70 0c 00 10 d0 fe 48 50 54 30 a0 12 93 48 50 41 p.....HPT0...HPA 48c0: 53 0a 02 70 0c 00 20 d0 fe 48 50 54 30 a0 12 93 S..p.. ..HPT0... 48d0: 48 50 41 53 0a 03 70 0c 00 30 d0 fe 48 50 54 30 HPAS..p..0..HPT0 48e0: a4 42 55 46 30 5b 82 45 0a 49 50 49 43 08 5f 48 .BUF0[.E.IPIC._H 48f0: 49 44 0b 41 d0 08 5f 43 52 53 11 41 09 0a 8d 47 ID.A.._CRS.A...G 4900: 01 20 00 20 00 01 02 47 01 24 00 24 00 01 02 47 . . ...G.$.$...G 4910: 01 28 00 28 00 01 02 47 01 2c 00 2c 00 01 02 47 .(.(...G.,.,...G 4920: 01 30 00 30 00 01 02 47 01 34 00 34 00 01 02 47 .0.0...G.4.4...G 4930: 01 38 00 38 00 01 02 47 01 3c 00 3c 00 01 02 47 .8.8...G.<.<...G 4940: 01 a0 00 a0 00 01 02 47 01 a4 00 a4 00 01 02 47 .......G.......G 4950: 01 a8 00 a8 00 01 02 47 01 ac 00 ac 00 01 02 47 .......G.......G 4960: 01 b0 00 b0 00 01 02 47 01 b4 00 b4 00 01 02 47 .......G.......G 4970: 01 b8 00 b8 00 01 02 47 01 bc 00 bc 00 01 02 47 .......G.......G 4980: 01 d0 04 d0 04 01 02 22 04 00 79 00 5b 82 25 4d ......."..y.[.%M 4990: 41 54 48 08 5f 48 49 44 0c 41 d0 0c 04 08 5f 43 ATH._HID.A...._C 49a0: 52 53 11 10 0a 0d 47 01 f0 00 f0 00 01 01 22 00 RS....G.......". 49b0: 20 79 00 5b 82 4b 09 4c 44 52 43 08 5f 48 49 44 y.[.K.LDRC._HID 49c0: 0c 41 d0 0c 02 08 5f 55 49 44 0a 02 08 5f 43 52 .A...._UID..._CR 49d0: 53 11 4e 07 0a 7a 47 01 2e 00 2e 00 01 02 47 01 S.N..zG.......G. 49e0: 4e 00 4e 00 01 02 47 01 61 00 61 00 01 01 47 01 N.N...G.a.a...G. 49f0: 63 00 63 00 01 01 47 01 65 00 65 00 01 01 47 01 c.c...G.e.e...G. 4a00: 67 00 67 00 01 01 47 01 80 00 80 00 01 01 47 01 g.g...G.......G. 4a10: 92 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 ......G.......G. 4a20: 80 06 80 06 01 20 47 01 00 08 00 08 01 10 47 01 ..... G.......G. 4a30: 00 10 00 10 01 80 47 01 80 11 80 11 01 40 47 01 ......G......@G. 4a40: 00 fe 00 fe 01 01 47 01 00 ff 00 ff 01 80 79 00 ......G.......y. 4a50: 5b 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b [.%RTC_._HID.A.. 4a60: 00 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 .._CRS....G.p.p. 4a70: 01 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f .."..y.[.-TIMR._ 4a80: 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a HID.A...._CRS... 4a90: 15 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 .G.@.@...G.P.P.. 4aa0: 04 22 01 00 79 00 5b 82 32 41 43 41 44 08 5f 48 ."..y.[.2ACAD._H 4ab0: 49 44 0d 41 43 50 49 30 30 30 33 00 08 5f 50 43 ID.ACPI0003.._PC 4ac0: 4c 12 06 01 5f 53 42 5f 14 11 5f 50 53 52 00 70 L..._SB_.._PSR.p 4ad0: 01 41 43 50 57 a4 41 43 50 57 14 1a 45 43 4f 4b .ACPW.ACPW..ECOK 4ae0: 00 a0 0f 93 5e 2e 45 43 30 5f 5a 30 30 39 01 a4 ....^.EC0_Z009.. 4af0: 01 a1 03 a4 00 5b 82 4e 6f 45 43 30 5f 08 5f 48 .....[.NoEC0_._H 4b00: 49 44 0c 41 d0 0c 09 08 5f 47 50 45 0a 1c 08 5a ID.A...._GPE...Z 4b10: 30 30 39 00 08 5f 43 52 53 11 15 0a 12 47 01 62 009.._CRS....G.b 4b20: 00 62 00 01 01 47 01 66 00 66 00 01 01 79 00 14 .b...G.f.f...y.. 4b30: 3b 5f 52 45 47 02 a0 34 93 68 0a 03 70 69 5a 30 ;_REG..4.h..piZ0 4b40: 30 39 a0 28 5b 12 5f 4f 53 49 60 70 00 42 54 44 09.([._OSI`p.BTD 4b50: 53 a0 19 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 S.._OSI.Windows 4b60: 32 30 30 36 00 70 01 42 54 44 53 5b 80 45 52 41 2006.p.BTDS[.ERA 4b70: 4d 03 00 0a ff 5b 81 4e 2e 45 52 41 4d 11 00 40 M....[.N.ERAM..@ 4b80: 30 53 4d 50 52 08 53 4d 53 54 08 53 4d 41 44 08 0SMPR.SMST.SMAD. 4b90: 53 4d 43 4d 08 53 4d 44 30 40 10 42 43 4e 54 08 SMCM.SMD0@.BCNT. 4ba0: 53 4d 41 41 18 00 40 04 43 48 47 4d 10 43 48 47 SMAA..@.CHGM.CHG 4bb0: 53 10 45 4e 49 44 08 45 4e 49 42 08 45 4e 44 44 S.ENID.ENIB.ENDD 4bc0: 08 43 48 47 56 08 43 48 47 41 10 42 41 4c 30 01 .CHGV.CHGA.BAL0. 4bd0: 42 41 4c 31 01 42 41 4c 32 01 42 41 4c 33 01 42 BAL1.BAL2.BAL3.B 4be0: 42 43 30 01 42 42 43 31 01 42 42 43 32 01 42 42 BC0.BBC1.BBC2.BB 4bf0: 43 33 01 00 08 50 48 44 44 01 49 46 44 44 01 49 C3...PHDD.IFDD.I 4c00: 4f 44 44 01 53 48 44 44 01 53 31 32 30 01 45 46 ODD.SHDD.S120.EF 4c10: 44 44 01 43 52 54 44 01 53 50 57 52 01 53 42 54 DD.CRTD.SPWR.SBT 4c20: 4e 01 56 49 44 4f 01 56 4f 4c 44 01 56 4f 4c 55 N.VIDO.VOLD.VOLU 4c30: 01 4d 55 54 45 01 43 4f 4e 54 01 42 52 47 54 01 .MUTE.CONT.BRGT. 4c40: 48 42 54 4e 01 53 34 53 54 01 53 4b 45 59 01 42 HBTN.S4ST.SKEY.B 4c50: 4b 45 59 01 54 4f 55 50 01 46 4e 42 4e 01 4c 49 KEY.TOUP.FNBN.LI 4c60: 44 46 01 44 49 47 4d 01 55 57 41 4b 01 00 08 44 DF.DIGM.UWAK...D 4c70: 4b 53 50 01 44 4b 49 4e 01 44 4b 49 44 01 44 4b KSP.DKIN.DKID.DK 4c80: 4f 4b 01 00 04 44 4b 50 57 01 00 07 42 54 4e 53 OK...DKPW...BTNS 4c90: 08 53 31 4c 44 01 53 33 4c 44 01 56 47 41 51 01 .S1LD.S3LD.VGAQ. 4ca0: 50 43 4d 51 01 50 43 4d 52 01 41 44 50 54 01 53 PCMQ.PCMR.ADPT.S 4cb0: 4c 4c 53 01 53 59 53 37 01 50 57 41 4b 01 4d 57 LLS.SYS7.PWAK.MW 4cc0: 41 4b 01 4c 57 41 4b 01 00 05 00 28 54 43 4e 4c AK.LWAK....(TCNL 4cd0: 08 54 4d 50 49 08 54 4d 53 44 08 46 41 53 4e 04 .TMPI.TMSD.FASN. 4ce0: 46 41 53 55 04 50 43 56 4c 04 00 02 53 57 54 4f FASU.PCVL...SWTO 4cf0: 01 48 57 54 4f 01 4d 4f 44 45 01 46 41 4e 53 02 .HWTO.MODE.FANS. 4d00: 49 4e 49 54 01 46 41 4e 31 01 46 41 4e 32 01 46 INIT.FAN1.FAN2.F 4d10: 41 4e 54 01 53 4b 4e 4d 01 43 54 4d 50 08 4c 49 ANT.SKNM.CTMP.LI 4d20: 44 45 01 50 4d 45 45 01 50 57 42 45 01 52 4e 47 DE.PMEE.PWBE.RNG 4d30: 45 01 42 54 57 45 01 44 43 4b 45 01 00 02 53 4b E.BTWE.DCKE...SK 4d40: 54 58 08 53 4b 54 42 08 53 4b 54 43 08 53 4b 54 TX.SKTB.SKTC.SKT 4d50: 41 08 00 08 48 41 50 4c 02 48 41 50 52 01 00 05 A...HAPL.HAPR... 4d60: 42 54 44 54 01 42 54 50 57 01 42 54 44 53 01 42 BTDT.BTPW.BTDS.B 4d70: 54 50 53 01 42 54 53 57 01 42 54 57 4b 01 42 54 TPS.BTSW.BTWK.BT 4d80: 4c 44 01 00 01 42 52 54 53 08 43 4e 54 53 08 57 LD...BRTS.CNTS.W 4d90: 4c 41 54 01 42 54 41 54 01 57 4c 45 58 01 42 54 LAT.BTAT.WLEX.BT 4da0: 45 58 01 4b 4c 53 57 01 57 4c 4f 4b 01 00 02 50 EX.KLSW.WLOK...P 4db0: 54 49 44 08 43 50 55 54 08 45 50 4b 54 08 47 48 TID.CPUT.EPKT.GH 4dc0: 49 44 08 00 04 42 4d 46 30 03 42 54 59 30 01 42 ID...BMF0.BTY0.B 4dd0: 53 54 30 08 42 52 43 30 10 42 53 4e 30 10 42 50 ST0.BRC0.BSN0.BP 4de0: 56 30 10 42 44 56 30 10 42 44 43 30 10 42 46 43 V0.BDV0.BDC0.BFC 4df0: 30 10 47 41 55 30 08 43 59 43 30 08 42 50 43 30 0.GAU0.CYC0.BPC0 4e00: 10 42 41 43 30 10 42 41 54 30 08 42 54 57 30 10 .BAC0.BAT0.BTW0. 4e10: 42 44 4e 30 08 00 40 04 00 04 42 4d 46 31 03 42 BDN0..@...BMF1.B 4e20: 54 59 31 01 42 53 54 31 08 42 52 43 31 10 42 53 TY1.BST1.BRC1.BS 4e30: 4e 31 10 42 50 56 31 10 42 44 56 31 10 42 44 43 N1.BPV1.BDV1.BDC 4e40: 31 10 42 46 43 31 10 47 41 55 31 08 43 59 43 31 1.BFC1.GAU1.CYC1 4e50: 08 42 50 43 31 10 42 41 43 31 10 42 41 54 31 08 .BPC1.BAC1.BAT1. 4e60: 42 54 57 31 10 14 37 5f 51 31 31 00 70 0a 87 50 BTW1..7_Q11.p..P 4e70: 38 30 48 a0 13 49 47 44 53 5e 5e 5e 2e 47 46 58 80H..IGDS^^^.GFX 4e80: 30 42 52 54 4e 0a 87 a1 15 86 5e 5e 5e 2f 03 50 0BRTN.....^^^/.P 4e90: 45 47 50 56 47 41 5f 4c 43 44 5f 0a 87 14 37 5f EGPVGA_LCD_...7_ 4ea0: 51 31 32 00 70 0a 86 50 38 30 48 a0 13 49 47 44 Q12.p..P80H..IGD 4eb0: 53 5e 5e 5e 2e 47 46 58 30 42 52 54 4e 0a 86 a1 S^^^.GFX0BRTN... 4ec0: 15 86 5e 5e 5e 2f 03 50 45 47 50 56 47 41 5f 4c ..^^^/.PEGPVGA_L 4ed0: 43 44 5f 0a 86 14 40 05 5f 51 31 43 00 70 0d 3d CD_...@._Q1C.p.= 4ee0: 3d 3d 3d 3d 51 55 45 52 59 5f 31 43 3d 3d 3d 3d ====QUERY_1C==== 4ef0: 3d 00 5b 31 a0 31 56 49 44 4f a0 12 49 47 44 53 =.[1.1VIDO..IGDS 4f00: 5e 5e 5e 2e 47 46 58 30 47 48 44 53 00 a1 12 5e ^^^.GFX0GHDS...^ 4f10: 5e 5e 2f 03 50 45 47 50 56 47 41 5f 44 53 53 57 ^^/.PEGPVGA_DSSW 4f20: 70 00 56 49 44 4f 14 21 5f 51 31 44 00 70 0d 3d p.VIDO.!_Q1D.p.= 4f30: 3d 3d 3d 3d 51 55 45 52 59 5f 31 44 3d 3d 3d 3d ====QUERY_1D==== 4f40: 3d 00 5b 31 50 43 4c 4b 14 21 5f 51 31 45 00 70 =.[1PCLK.!_Q1E.p 4f50: 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 31 45 3d 3d .=====QUERY_1E== 4f60: 3d 3d 3d 00 5b 31 50 43 4c 4b 14 39 5f 51 32 35 ===.[1PCLK.9_Q25 4f70: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 35 .p.=====QUERY_25 4f80: 3d 3d 3d 3d 3d 00 5b 31 5b 22 0b e8 03 86 5e 5e =====.[1["....^^ 4f90: 42 41 54 31 0a 81 5b 22 0b e8 03 86 5e 5e 42 41 BAT1..["....^^BA 4fa0: 54 31 0a 80 14 2f 5f 51 33 34 00 70 0d 3d 3d 3d T1.../_Q34.p.=== 4fb0: 3d 3d 51 55 45 52 59 5f 33 34 3d 3d 3d 3d 3d 00 ==QUERY_34=====. 4fc0: 5b 31 a0 11 42 4b 45 59 50 48 53 53 0a 71 70 00 [1..BKEYPHSS.qp. 4fd0: 42 4b 45 59 14 32 5f 51 33 37 00 70 0d 3d 3d 3d BKEY.2_Q37.p.=== 4fe0: 3d 3d 51 55 45 52 59 5f 33 37 3d 3d 3d 3d 3d 00 ==QUERY_37=====. 4ff0: 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 03 86 5e [1.ACAD..["....^ 5000: 5e 42 41 54 31 0a 80 14 32 5f 51 33 38 00 70 0d ^BAT1...2_Q38.p. 5010: 3d 3d 3d 3d 3d 51 55 45 52 59 5f 33 38 3d 3d 3d =====QUERY_38=== 5020: 3d 3d 00 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 ==.[1.ACAD..[".. 5030: 03 86 5e 5e 42 41 54 31 0a 80 14 29 5f 51 32 44 ..^^BAT1...)_Q2D 5040: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 44 .p.=====QUERY_2D 5050: 3d 3d 3d 3d 3d 00 5b 31 70 00 44 54 53 4d 54 52 =====.[1p.DTSMTR 5060: 41 50 0a 46 14 29 5f 51 32 45 00 70 0d 3d 3d 3d AP.F.)_Q2E.p.=== 5070: 3d 3d 51 55 45 52 59 5f 32 45 3d 3d 3d 3d 3d 00 ==QUERY_2E=====. 5080: 5b 31 70 01 44 54 53 4d 54 52 41 50 0a 46 5b 80 [1p.DTSMTRAP.F[. 5090: 43 43 4c 4b 01 0b 10 10 0a 04 5b 81 20 43 43 4c CCLK......[. CCL 50a0: 4b 03 00 01 44 55 54 59 03 54 48 45 4e 01 00 03 K...DUTY.THEN... 50b0: 46 54 54 5f 01 00 08 54 53 54 53 01 5b 80 45 43 FTT_...TSTS.[.EC 50c0: 52 4d 03 00 0a ff 5b 81 44 04 45 43 52 4d 11 00 RM....[.D.ECRM.. 50d0: 40 4a 45 52 49 42 10 45 52 42 44 08 00 48 0a 53 @JERIB.ERBD..H.S 50e0: 44 54 4d 08 46 53 53 4e 04 46 41 4e 55 04 50 54 DTM.FSSN.FANU.PT 50f0: 56 4c 03 00 04 54 54 48 52 01 00 48 06 50 4a 49 VL...TTHR..H.PJI 5100: 44 08 00 08 00 48 1d 52 46 52 44 10 5b 01 46 41 D....H.RFRD.[.FA 5110: 4d 58 00 14 22 46 41 4e 47 01 5b 23 46 41 4d 58 MX.."FANG.[#FAMX 5120: ff ff 70 68 45 52 49 42 70 45 52 42 44 60 5b 27 ..phERIBpERBD`[' 5130: 46 41 4d 58 a4 60 14 22 46 41 4e 57 02 5b 23 46 FAMX.`."FANW.[#F 5140: 41 4d 58 ff ff 70 68 45 52 49 42 70 69 45 52 42 AMX..phERIBpiERB 5150: 44 5b 27 46 41 4d 58 a4 69 14 09 54 55 56 52 01 D['FAMX.i..TUVR. 5160: a4 0a 03 14 2e 54 48 52 4f 01 a0 09 93 68 00 a4 .....THRO....h.. 5170: 54 48 45 4e a1 1d a0 09 93 68 01 a4 44 55 54 59 THEN.....h..DUTY 5180: a1 11 a0 0a 93 68 0a 02 a4 54 54 48 52 a1 04 a4 .....h...TTHR... 5190: 0a ff 14 2a 43 4c 43 4b 01 a0 10 93 68 00 70 00 ...*CLCK....h.p. 51a0: 54 48 45 4e 70 00 46 54 54 5f a1 0d 70 68 44 55 THENp.FTT_..phDU 51b0: 54 59 70 01 54 48 45 4e a4 54 48 45 4e 14 37 50 TYp.THEN.THEN.7P 51c0: 43 4c 4b 00 70 50 54 56 4c 60 a0 10 93 60 00 70 CLK.pPTVL`...`.p 51d0: 00 54 48 45 4e 70 00 46 54 54 5f a1 19 76 60 70 .THENp.FTT_..v`p 51e0: 80 60 00 61 7b 61 0a 07 61 70 61 44 55 54 59 70 .`.a{a..apaDUTYp 51f0: 01 54 48 45 4e 5b 82 4b 22 42 41 54 31 08 5f 48 .THEN[.K"BAT1._H 5200: 49 44 0c 41 d0 0c 0a 08 5f 55 49 44 01 08 5f 50 ID.A...._UID.._P 5210: 43 4c 12 06 01 5f 53 42 5f 14 39 5f 53 54 41 00 CL..._SB_.9_STA. 5220: a0 29 90 45 43 4f 4b 93 45 43 44 59 00 a0 13 5e .).ECOK.ECDY...^ 5230: 5e 2e 45 43 30 5f 42 41 4c 30 5b 22 0a 14 a4 0a ^.EC0_BAL0[".... 5240: 1f a1 08 5b 22 0a 14 a4 0a 0f a1 08 5b 22 0a 14 ...[".......[".. 5250: a4 0a 1f 14 48 10 5f 42 49 46 00 08 53 54 41 54 ....H._BIF..STAT 5260: 12 3a 0d 01 0b a0 0f 0b a0 0f 01 0b 5c 2b 0b a4 .:..........\+.. 5270: 01 0a 9c 0b 08 01 0b c4 0e 0d 50 41 33 34 36 35 ..........PA3465 5280: 55 20 00 0d 33 36 35 38 51 00 0d 4c 69 2d 49 6f U ..3658Q..Li-Io 5290: 6e 00 0d 43 4f 4d 50 41 4c 20 00 a0 4b 07 90 45 n..COMPAL ..K..E 52a0: 43 4f 4b 93 45 43 44 59 00 70 5e 5e 2e 45 43 30 COK.ECDY.p^^.EC0 52b0: 5f 42 44 4e 30 60 a0 23 93 60 0a 08 70 0a b4 88 _BDN0`.#.`..p... 52c0: 53 54 41 54 0a 06 00 70 0d 50 41 33 34 35 37 55 STAT...p.PA3457U 52d0: 20 00 88 53 54 41 54 0a 09 00 a0 24 93 60 0a 20 ..STAT....$.`. 52e0: 70 0b 02 01 88 53 54 41 54 0a 06 00 70 0d 50 41 p....STAT...p.PA 52f0: 33 34 35 37 55 20 00 88 53 54 41 54 0a 09 00 5b 3457U ..STAT...[ 5300: 22 0a 14 70 5e 5e 2e 45 43 30 5f 42 44 43 30 42 "..p^^.EC0_BDC0B 5310: 46 43 31 5b 22 0a 14 a1 12 70 0d 4c 69 2d 49 6f FC1["....p.Li-Io 5320: 6e 00 88 53 54 41 54 0a 0b 00 a0 2c 42 46 43 31 n..STAT....,BFC1 5330: 78 42 46 43 31 0a 64 60 61 77 61 0a 64 61 70 61 xBFC1.d`awa.dapa 5340: 42 46 43 31 70 61 88 53 54 41 54 01 00 70 61 88 BFC1pa.STAT..pa. 5350: 53 54 41 54 0a 02 00 a4 53 54 41 54 14 45 0c 5f STAT....STAT.E._ 5360: 42 53 54 00 08 50 42 53 54 12 10 04 00 0c ff ff BST..PBST....... 5370: ff ff 0c ff ff ff ff 0b 5c 2b 70 0b 5c 2b 63 a0 ........\+p.\+c. 5380: 38 90 45 43 4f 4b 93 45 43 44 59 00 5b 22 0a 14 8.ECOK.ECDY.[".. 5390: 70 5e 5e 2e 45 43 30 5f 42 53 54 30 42 53 54 31 p^^.EC0_BST0BST1 53a0: 5b 22 0a 14 70 5e 5e 2e 45 43 30 5f 47 41 55 30 ["..p^^.EC0_GAU0 53b0: 42 47 55 31 5b 22 0a 14 a0 15 42 46 43 31 77 42 BGU1["....BFC1wB 53c0: 47 55 31 42 46 43 31 62 78 62 0a 64 64 62 a1 09 GU1BFC1bxb.ddb.. 53d0: 77 42 47 55 31 0a 28 62 70 42 53 54 31 88 50 42 wBGU1.(bpBST1.PB 53e0: 53 54 00 00 70 00 88 50 42 53 54 01 00 70 62 88 ST..p..PBST..pb. 53f0: 50 42 53 54 0a 02 00 70 63 88 50 42 53 54 0a 03 PBST...pc.PBST.. 5400: 00 a0 1b 94 45 43 44 59 00 76 45 43 44 59 a0 0e ....ECDY.vECDY.. 5410: 93 45 43 44 59 00 86 42 41 54 31 0a 80 a4 50 42 .ECDY..BAT1...PB 5420: 53 54 5b 82 2e 50 53 32 4b 08 5f 48 49 44 0c 41 ST[..PS2K._HID.A 5430: d0 03 03 08 5f 43 52 53 11 19 0a 16 47 01 60 00 ...._CRS....G.`. 5440: 60 00 01 01 47 01 64 00 64 00 01 01 23 02 00 01 `...G.d.d...#... 5450: 79 00 5b 82 1e 50 53 32 4d 08 5f 48 49 44 0c 41 y.[..PS2M._HID.A 5460: d0 0f 13 08 5f 43 52 53 11 09 0a 06 23 00 10 01 ...._CRS....#... 5470: 79 00 5b 82 43 6a 50 41 54 41 08 5f 41 44 52 0c y.[.CjPATA._ADR. 5480: 01 00 1f 00 5b 80 50 41 43 53 02 0a 40 0a c0 5b ....[.PACS..@..[ 5490: 81 49 04 50 41 43 53 03 50 52 49 54 10 00 10 50 .I.PACS.PRIT...P 54a0: 53 49 54 04 00 1c 53 59 4e 43 04 00 0c 53 44 54 SIT...SYNC...SDT 54b0: 30 02 00 02 53 44 54 31 02 00 4a 04 49 43 52 30 0...SDT1..J.ICR0 54c0: 04 49 43 52 31 04 49 43 52 32 04 49 43 52 33 04 .ICR1.ICR2.ICR3. 54d0: 49 43 52 34 04 49 43 52 35 04 5b 82 4b 63 50 52 ICR4.ICR5.[.KcPR 54e0: 49 44 08 5f 41 44 52 00 14 40 17 5f 47 54 4d 00 ID._ADR..@._GTM. 54f0: 08 50 42 55 46 11 17 0a 14 00 00 00 00 00 00 00 .PBUF........... 5500: 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 50 42 ..............PB 5510: 55 46 00 50 49 4f 30 8a 50 42 55 46 0a 04 44 4d UF.PIO0.PBUF..DM 5520: 41 30 8a 50 42 55 46 0a 08 50 49 4f 31 8a 50 42 A0.PBUF..PIO1.PB 5530: 55 46 0a 0c 44 4d 41 31 8a 50 42 55 46 0a 10 46 UF..DMA1.PBUF..F 5540: 4c 41 47 70 47 45 54 50 50 52 49 54 50 49 4f 30 LAGpGETPPRITPIO0 5550: 70 47 44 4d 41 7b 53 59 4e 43 01 00 7b 49 43 52 pGDMA{SYNC..{ICR 5560: 33 01 00 7b 49 43 52 30 01 00 53 44 54 30 7b 49 3..{ICR0..SDT0{I 5570: 43 52 31 01 00 44 4d 41 30 a0 14 93 44 4d 41 30 CR1..DMA0...DMA0 5580: 0c ff ff ff ff 70 50 49 4f 30 44 4d 41 30 a0 2e .....pPIO0DMA0.. 5590: 7b 50 52 49 54 0b 00 40 00 a0 14 93 7b 50 52 49 {PRIT..@....{PRI 55a0: 54 0a 90 00 0a 80 70 0b 84 03 50 49 4f 31 a1 0e T.....p...PIO1.. 55b0: 70 47 45 54 54 50 53 49 54 50 49 4f 31 a1 0b 70 pGETTPSITPIO1..p 55c0: 0c ff ff ff ff 50 49 4f 31 70 47 44 4d 41 7b 53 .....PIO1pGDMA{S 55d0: 59 4e 43 0a 02 00 7b 49 43 52 33 0a 02 00 7b 49 YNC...{ICR3...{I 55e0: 43 52 30 0a 02 00 53 44 54 31 7b 49 43 52 31 0a CR0...SDT1{ICR1. 55f0: 02 00 44 4d 41 31 a0 14 93 44 4d 41 31 0c ff ff ..DMA1...DMA1... 5600: ff ff 70 50 49 4f 31 44 4d 41 31 70 47 45 54 46 ..pPIO1DMA1pGETF 5610: 7b 53 59 4e 43 01 00 7b 53 59 4e 43 0a 02 00 50 {SYNC..{SYNC...P 5620: 52 49 54 46 4c 41 47 a0 2c 7b 93 50 49 4f 30 0c RITFLAG.,{.PIO0. 5630: ff ff ff ff 93 44 4d 41 30 0c ff ff ff ff 00 70 .....DMA0......p 5640: 0a 78 50 49 4f 30 70 0a 14 44 4d 41 30 70 0a 03 .xPIO0p..DMA0p.. 5650: 46 4c 41 47 a4 50 42 55 46 14 4c 2a 5f 53 54 4d FLAG.PBUF.L*_STM 5660: 03 8a 68 00 50 49 4f 30 8a 68 0a 04 44 4d 41 30 ..h.PIO0.h..DMA0 5670: 8a 68 0a 08 50 49 4f 31 8a 68 0a 0c 44 4d 41 31 .h..PIO1.h..DMA1 5680: 8a 68 0a 10 46 4c 41 47 a0 41 12 93 87 69 0b 00 .h..FLAG.A...i.. 5690: 02 7b 50 52 49 54 0b f0 c0 50 52 49 54 7b 53 59 .{PRIT...PRIT{SY 56a0: 4e 43 0a 02 53 59 4e 43 70 00 53 44 54 30 7b 49 NC..SYNCp.SDT0{I 56b0: 43 52 30 0a 02 49 43 52 30 7b 49 43 52 31 0a 02 CR0..ICR0{ICR1.. 56c0: 49 43 52 31 7b 49 43 52 33 0a 02 49 43 52 33 7b ICR1{ICR3..ICR3{ 56d0: 49 43 52 35 0a 02 49 43 52 35 8b 69 0a 62 57 34 ICR5..ICR5.i.bW4 56e0: 39 30 8b 69 0a 6a 57 35 33 30 8b 69 0a 7e 57 36 90.i.jW530.i.~W6 56f0: 33 30 8b 69 0a 80 57 36 34 30 8b 69 0a b0 57 38 30.i..W640.i..W8 5700: 38 30 8b 69 0a ba 57 39 33 30 7d 50 52 49 54 0b 80.i..W930}PRIT. 5710: 04 80 50 52 49 54 a0 1e 90 7b 46 4c 41 47 0a 02 ..PRIT...{FLAG.. 5720: 00 7b 57 34 39 30 0b 00 08 00 7d 50 52 49 54 0a .{W490....}PRIT. 5730: 02 50 52 49 54 7d 50 52 49 54 53 45 54 50 50 49 .PRIT}PRITSETPPI 5740: 4f 30 57 35 33 30 57 36 34 30 50 52 49 54 a0 4b O0W530W640PRIT.K 5750: 05 7b 46 4c 41 47 01 00 7d 53 59 4e 43 01 53 59 .{FLAG..}SYNC.SY 5760: 4e 43 70 53 44 4d 41 44 4d 41 30 53 44 54 30 a0 NCpSDMADMA0SDT0. 5770: 12 95 44 4d 41 30 0a 1e 7d 49 43 52 33 01 49 43 ..DMA0..}ICR3.IC 5780: 52 33 a0 12 95 44 4d 41 30 0a 3c 7d 49 43 52 30 R3...DMA0.<}ICR0 5790: 01 49 43 52 30 a0 14 7b 57 39 33 30 0b 00 20 00 .ICR0..{W930.. . 57a0: 7d 49 43 52 31 01 49 43 52 31 a0 4b 15 93 87 6a }ICR1.ICR1.K...j 57b0: 0b 00 02 7b 50 52 49 54 0b 0f bf 50 52 49 54 70 ...{PRIT...PRITp 57c0: 00 50 53 49 54 7b 53 59 4e 43 01 53 59 4e 43 70 .PSIT{SYNC.SYNCp 57d0: 00 53 44 54 31 7b 49 43 52 30 01 49 43 52 30 7b .SDT1{ICR0.ICR0{ 57e0: 49 43 52 31 01 49 43 52 31 7b 49 43 52 33 01 49 ICR1.ICR1{ICR3.I 57f0: 43 52 33 7b 49 43 52 35 01 49 43 52 35 8b 6a 0a CR3{ICR5.ICR5.j. 5800: 62 57 34 39 31 8b 6a 0a 6a 57 35 33 31 8b 6a 0a bW491.j.jW531.j. 5810: 7e 57 36 33 31 8b 6a 0a 80 57 36 34 31 8b 6a 0a ~W631.j..W641.j. 5820: b0 57 38 38 31 8b 6a 0a ba 57 39 33 31 7d 50 52 .W881.j..W931}PR 5830: 49 54 0b 40 80 50 52 49 54 a0 1e 90 7b 46 4c 41 IT.@.PRIT...{FLA 5840: 47 0a 08 00 7b 57 34 39 31 0b 00 08 00 7d 50 52 G...{W491....}PR 5850: 49 54 0a 20 50 52 49 54 a0 4c 04 7b 46 4c 41 47 IT. PRIT.L.{FLAG 5860: 0a 10 00 7d 50 52 49 54 0b 00 40 50 52 49 54 a0 ...}PRIT..@PRIT. 5870: 13 94 50 49 4f 31 0a f0 7d 50 52 49 54 0a 80 50 ..PIO1..}PRIT..P 5880: 52 49 54 a1 21 7d 50 52 49 54 0a 10 50 52 49 54 RIT.!}PRIT..PRIT 5890: 70 53 45 54 54 50 49 4f 31 57 35 33 31 57 36 34 pSETTPIO1W531W64 58a0: 31 50 53 49 54 a0 40 06 7b 46 4c 41 47 0a 04 00 1PSIT.@.{FLAG... 58b0: 7d 53 59 4e 43 0a 02 53 59 4e 43 70 53 44 4d 41 }SYNC..SYNCpSDMA 58c0: 44 4d 41 31 53 44 54 31 a0 13 95 44 4d 41 31 0a DMA1SDT1...DMA1. 58d0: 1e 7d 49 43 52 33 0a 02 49 43 52 33 a0 13 95 44 .}ICR3..ICR3...D 58e0: 4d 41 31 0a 3c 7d 49 43 52 30 0a 02 49 43 52 30 MA1.<}ICR0..ICR0 58f0: a0 15 7b 57 39 33 31 0b 00 20 00 7d 49 43 52 31 ..{W931.. .}ICR1 5900: 0a 02 49 43 52 31 5b 82 47 10 50 5f 44 30 08 5f ..ICR1[.G.P_D0._ 5910: 41 44 52 00 14 4a 0f 5f 47 54 46 00 08 50 49 42 ADR..J._GTF..PIB 5920: 30 11 11 0a 0e 03 00 00 00 00 a0 ef 03 00 00 00 0............... 5930: 00 a0 ef 8c 50 49 42 30 01 50 4d 44 30 8c 50 49 ....PIB0.PMD0.PI 5940: 42 30 0a 08 44 4d 44 30 a0 40 06 7b 50 52 49 54 B0..DMD0.@.{PRIT 5950: 0a 02 00 a0 13 93 7b 50 52 49 54 0a 09 00 0a 08 ......{PRIT..... 5960: 70 0a 08 50 4d 44 30 a1 41 04 70 0a 0a 50 4d 44 p..PMD0.A.p..PMD 5970: 30 7a 7b 50 52 49 54 0b 00 03 00 0a 08 60 7a 7b 0z{PRIT......`z{ 5980: 50 52 49 54 0b 00 30 00 0a 0c 61 72 60 61 62 a0 PRIT..0...ar`ab. 5990: 0c 93 0a 03 62 70 0a 0b 50 4d 44 30 a0 0c 93 0a ....bp..PMD0.... 59a0: 05 62 70 0a 0c 50 4d 44 30 a1 07 70 01 50 4d 44 .bp..PMD0..p.PMD 59b0: 30 a0 43 04 7b 53 59 4e 43 01 00 70 7d 53 44 54 0.C.{SYNC..p}SDT 59c0: 30 0a 40 00 44 4d 44 30 a0 2c 7b 49 43 52 31 01 0.@.DMD0.,{ICR1. 59d0: 00 a0 13 7b 49 43 52 30 01 00 72 44 4d 44 30 0a ...{ICR0..rDMD0. 59e0: 02 44 4d 44 30 a0 0f 7b 49 43 52 33 01 00 70 0a .DMD0..{ICR3..p. 59f0: 45 44 4d 44 30 a1 14 7d 74 7b 50 4d 44 30 0a 07 EDMD0..}t{PMD0.. 5a00: 00 0a 02 00 0a 20 44 4d 44 30 a4 50 49 42 30 5b ..... DMD0.PIB0[ 5a10: 82 46 10 50 5f 44 31 08 5f 41 44 52 01 14 49 0f .F.P_D1._ADR..I. 5a20: 5f 47 54 46 00 08 50 49 42 31 11 11 0a 0e 03 00 _GTF..PIB1...... 5a30: 00 00 00 b0 ef 03 00 00 00 00 b0 ef 8c 50 49 42 .............PIB 5a40: 31 01 50 4d 44 31 8c 50 49 42 31 0a 08 44 4d 44 1.PMD1.PIB1..DMD 5a50: 31 a0 4b 05 7b 50 52 49 54 0a 20 00 a0 13 93 7b 1.K.{PRIT. ....{ 5a60: 50 52 49 54 0a 90 00 0a 80 70 0a 08 50 4d 44 31 PRIT.....p..PMD1 5a70: a1 3c 72 7b 50 53 49 54 0a 03 00 7a 7b 50 53 49 .. 0050: 80 49 ee 6a 65 26 72 1e cd bf 5f 2f 96 d6 c0 0a .I.je&r..._/.... 0060: 92 f5 06 b5 00 b2 3b 29 02 e2 4c 8d c2 f2 bc 41 ......;)..L....A 0070: 77 9c 70 f0 f3 1b 09 d2 63 5a dc a8 83 f8 5e c9 w.p.....cZ....^. 0080: 15 95 f9 fa fd dc 05 b7 4d 67 7f 2d b3 84 33 20 ........Mg.-..3 0090: e1 d1 79 2a a7 6a 77 d1 b6 20 2a 76 42 c5 d5 e9 ..y*.jw.. *vB... 00a0: b6 43 40 55 44 c3 c9 37 99 5f 41 97 70 f3 d1 f6 .C@UD..7._A.p... 00b0: 07 ec 7b 1a 29 a1 c1 f1 91 fd 48 86 6e 3e ce cb ..{.).....H.n>.. 00c0: 01 00 00 00 b6 00 00 00 00 00 02 00 4c 45 4e 4f ............LENO 00d0: 56 4f 54 50 2d 36 38 20 20 20 57 49 4e 44 4f 57 VOTP-68 WINDOW 00e0: 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 S .............. 00f0: 00 00 00 00 00 00 8a 6e 2e c9 36 e6 7f 10 8a ea .......n..6..... 0100: 14 ad d2 93 b7 6d 9b 73 ad 83 36 b8 6c a7 a7 ee .....m.s..6.l... 0110: 37 47 16 fe f3 fc cd c7 89 84 06 16 91 0b 1e 81 7G.............. 0120: 11 42 b1 35 52 57 f6 6b bb 5f a5 81 e2 ff 89 8a .B.5RW.k._...... 0130: 95 c3 4d fc e9 56 4f 4c 34 cc 99 5e 62 e1 90 8a ..M..VOL4..^b... 0140: 54 be 4a 00 5c 9b a0 86 41 46 66 9d e2 f2 e7 36 T.J.\...AFf....6 0150: 9c 33 91 27 e7 8d 5c a1 d8 f9 a4 61 8a 1c 04 07 .3.'..\....a.... 0160: e3 2a 1e 14 f1 bd 7f 4c 09 ff 19 11 a9 d4 74 ca .*.....L......t. 0170: 11 9e dc 54 39 bf ...T9. APIC @ 0xbf6dff70 0000: 41 50 49 43 68 00 00 00 01 13 50 54 4c 54 44 20 APICh.....PTLTD 0010: 09 20 41 50 49 43 20 20 00 00 04 06 20 4c 54 50 . APIC .... LTP 0020: 00 00 00 00 00 00 e0 fe 01 00 00 00 00 08 00 00 ................ 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0c 02 00 ................ 0040: 00 00 c0 fe 00 00 00 00 04 06 00 05 00 01 04 06 ................ 0050: 01 05 00 01 02 0a 00 00 02 00 00 00 05 00 02 0a ................ 0060: 00 09 09 00 00 00 0d 00 ........ BOOT @ 0xbf6dffd8 0000: 42 4f 4f 54 28 00 00 00 01 a5 50 54 4c 54 44 20 BOOT(.....PTLTD 0010: 24 53 42 46 54 42 4c 24 00 00 04 06 20 4c 54 50 $SBFTBL$.... LTP 0020: 01 00 00 00 36 00 00 00 ....6... SSDT @ 0xbf6d98bd 0000: 53 53 44 54 ad 02 00 00 01 59 53 61 74 61 52 65 SSDT.....YSataRe 0010: 53 61 74 61 41 68 63 69 00 10 00 00 49 4e 54 4c SataAhci....INTL 0020: 24 06 05 20 10 48 28 5c 2f 03 5f 53 42 5f 50 43 $.. .H(\/._SB_PC 0030: 49 30 53 41 54 41 5b 82 4f 0c 50 52 54 30 08 5f I0SATA[.O.PRT0._ 0040: 41 44 52 0b ff ff 14 44 0b 5f 53 44 44 01 08 47 ADR....D._SDD..G 0050: 42 55 30 11 0a 0a 07 00 00 00 00 00 a0 00 8c 47 BU0............G 0060: 42 55 30 0a 00 47 42 30 30 8c 47 42 55 30 0a 01 BU0..GB00.GBU0.. 0070: 47 42 30 31 8c 47 42 55 30 0a 02 47 42 30 32 8c GB01.GBU0..GB02. 0080: 47 42 55 30 0a 03 47 42 30 33 8c 47 42 55 30 0a GBU0..GB03.GBU0. 0090: 04 47 42 30 34 8c 47 42 55 30 0a 05 47 42 30 35 .GB04.GBU0..GB05 00a0: 8c 47 42 55 30 0a 06 47 42 30 36 a0 46 04 93 87 .GBU0..GB06.F... 00b0: 68 0b 00 02 8b 68 0a 9c 57 37 38 30 a0 1e 7b 57 h....h..W780..{W 00c0: 37 38 30 0a 08 00 70 0a 10 47 42 30 30 70 0a 03 780...p..GB00p.. 00d0: 47 42 30 31 70 0a ef 47 42 30 36 a1 16 70 0a 90 GB01p..GB06..p.. 00e0: 47 42 30 30 70 0a 03 47 42 30 31 70 0a ef 47 42 GB00p..GB01p..GB 00f0: 30 36 70 47 42 55 30 47 54 46 30 14 0b 5f 47 54 06pGBU0GTF0.._GT 0100: 46 00 a4 47 54 46 30 5b 82 41 0d 50 52 54 31 08 F..GTF0[.A.PRT1. 0110: 5f 41 44 52 0c ff ff 01 00 14 44 0b 5f 53 44 44 _ADR......D._SDD 0120: 01 08 47 42 55 31 11 0a 0a 07 00 00 00 00 00 a0 ..GBU1.......... 0130: 00 8c 47 42 55 31 0a 00 47 42 31 30 8c 47 42 55 ..GBU1..GB10.GBU 0140: 31 0a 01 47 42 31 31 8c 47 42 55 31 0a 02 47 42 1..GB11.GBU1..GB 0150: 31 32 8c 47 42 55 31 0a 03 47 42 31 33 8c 47 42 12.GBU1..GB13.GB 0160: 55 31 0a 04 47 42 31 34 8c 47 42 55 31 0a 05 47 U1..GB14.GBU1..G 0170: 42 31 35 8c 47 42 55 31 0a 06 47 42 31 36 a0 46 B15.GBU1..GB16.F 0180: 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 38 31 a0 ...h....h..W781. 0190: 1e 7b 57 37 38 31 0a 08 00 70 0a 10 47 42 31 30 .{W781...p..GB10 01a0: 70 0a 03 47 42 31 31 70 0a ef 47 42 31 36 a1 16 p..GB11p..GB16.. 01b0: 70 0a 90 47 42 31 30 70 0a 03 47 42 31 31 70 0a p..GB10p..GB11p. 01c0: ef 47 42 31 36 70 47 42 55 31 47 54 46 31 14 0b .GB16pGBU1GTF1.. 01d0: 5f 47 54 46 00 a4 47 54 46 31 5b 82 41 0d 50 52 _GTF..GTF1[.A.PR 01e0: 54 32 08 5f 41 44 52 0c ff ff 02 00 14 44 0b 5f T2._ADR......D._ 01f0: 53 44 44 01 08 47 42 55 32 11 0a 0a 07 00 00 00 SDD..GBU2....... 0200: 00 00 a0 00 8c 47 42 55 32 0a 00 47 42 32 30 8c .....GBU2..GB20. 0210: 47 42 55 32 0a 01 47 42 32 31 8c 47 42 55 32 0a GBU2..GB21.GBU2. 0220: 02 47 42 32 32 8c 47 42 55 32 0a 03 47 42 32 33 .GB22.GBU2..GB23 0230: 8c 47 42 55 32 0a 04 47 42 32 34 8c 47 42 55 32 .GBU2..GB24.GBU2 0240: 0a 05 47 42 32 35 8c 47 42 55 32 0a 06 47 42 32 ..GB25.GBU2..GB2 0250: 36 a0 46 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 6.F...h....h..W7 0260: 38 32 a0 1e 7b 57 37 38 32 0a 08 00 70 0a 10 47 82..{W782...p..G 0270: 42 32 30 70 0a 03 47 42 32 31 70 0a ef 47 42 32 B20p..GB21p..GB2 0280: 36 a1 16 70 0a 90 47 42 32 30 70 0a 03 47 42 32 6..p..GB20p..GB2 0290: 31 70 0a ef 47 42 32 36 70 47 42 55 32 47 54 46 1p..GB26pGBU2GTF 02a0: 32 14 0b 5f 47 54 46 00 a4 47 54 46 32 2.._GTF..GTF2 SSDT @ 0xbf6d981a 0000: 53 53 44 54 a3 00 00 00 01 ed 42 72 74 52 65 66 SSDT......BrtRef 0010: 44 44 30 31 42 52 54 00 00 10 00 00 49 4e 54 4c DD01BRT.....INTL 0020: 24 06 05 20 10 4e 07 5c 2f 04 5f 53 42 5f 50 43 $.. .N.\/._SB_PC 0030: 49 30 47 46 58 30 44 44 30 33 14 1e 5f 42 43 4c I0GFX0DD03.._BCL 0040: 00 a4 12 16 0a 0a 46 0a 28 0a 00 0a 0a 0a 14 0a ......F.(....... 0050: 1e 0a 28 0a 32 0a 3c 0a 46 14 25 5f 42 43 4d 01 ..(.2.<.F.%_BCM. 0060: 78 68 0a 0a 60 61 70 61 5c 2f 05 5f 53 42 5f 50 xh..`apa\/._SB_P 0070: 43 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 14 CI0LPCBEC0_BRTS. 0080: 23 5f 42 51 43 00 77 5c 2f 05 5f 53 42 5f 50 43 #_BQC.w\/._SB_PC 0090: 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 0a 0a I0LPCBEC0_BRTS.. 00a0: 60 a4 60 `.` SSDT @ 0xbf6d8e10 0000: 53 53 44 54 5f 02 00 00 01 c8 50 6d 52 65 66 00 SSDT_.....PmRef. 0010: 43 70 75 30 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu0Tst..0..INTL 0020: 24 06 05 20 10 4a 23 5c 2e 5f 50 52 5f 43 50 55 $.. .J#\._PR_CPU 0030: 30 08 5f 54 50 43 0a 00 14 4d 06 5f 50 54 43 00 0._TPC...M._PTC. 0040: a0 37 7b 50 44 43 30 0a 04 00 a4 12 2c 02 11 14 .7{PDC0.....,... 0050: 0a 11 82 0c 00 7f 00 00 00 00 00 00 00 00 00 00 ................ 0060: 00 79 00 11 14 0a 11 82 0c 00 7f 00 00 00 00 00 .y.............. 0070: 00 00 00 00 00 00 79 00 a4 12 2c 02 11 14 0a 11 ......y...,..... 0080: 82 0c 00 01 04 01 00 10 10 00 00 00 00 00 00 79 ...............y 0090: 00 11 14 0a 11 82 0c 00 01 04 01 00 10 10 00 00 ................ 00a0: 00 00 00 00 79 00 08 54 53 53 49 12 41 07 08 12 ....y..TSSI.A... 00b0: 0d 05 0a 64 0b e8 03 0a 00 0a 00 0a 00 12 0d 05 ...d............ 00c0: 0a 58 0b 6b 03 0a 00 0a 0f 0a 00 12 0d 05 0a 4b .X.k...........K 00d0: 0b ee 02 0a 00 0a 0e 0a 00 12 0d 05 0a 3f 0b 71 .............?.q 00e0: 02 0a 00 0a 0d 0a 00 12 0d 05 0a 32 0b f4 01 0a ...........2.... 00f0: 00 0a 0c 0a 00 12 0d 05 0a 26 0b 77 01 0a 00 0a .........&.w.... 0100: 0b 0a 00 12 0c 05 0a 19 0a fa 0a 00 0a 0a 0a 00 ................ 0110: 12 0c 05 0a 0d 0a 7d 0a 00 0a 09 0a 00 08 54 53 ......}.......TS 0120: 53 4d 12 41 07 08 12 0d 05 0a 64 0b e8 03 0a 00 SM.A......d..... 0130: 0a 00 0a 00 12 0d 05 0a 58 0b 6b 03 0a 00 0a 1e ........X.k..... 0140: 0a 00 12 0d 05 0a 4b 0b ee 02 0a 00 0a 1c 0a 00 ......K......... 0150: 12 0d 05 0a 3f 0b 71 02 0a 00 0a 1a 0a 00 12 0d ....?.q......... 0160: 05 0a 32 0b f4 01 0a 00 0a 18 0a 00 12 0d 05 0a ..2............. 0170: 26 0b 77 01 0a 00 0a 16 0a 00 12 0c 05 0a 19 0a &.w............. 0180: fa 0a 00 0a 14 0a 00 12 0c 05 0a 0d 0a 7d 0a 00 .............}.. 0190: 0a 12 0a 00 08 54 53 53 46 0a 00 14 43 08 5f 54 .....TSSF...C._T 01a0: 53 53 00 a0 47 06 90 92 54 53 53 46 5b 12 5f 50 SS..G...TSSF[._P 01b0: 53 53 00 70 5f 50 53 53 60 70 87 60 61 76 61 70 SS.p_PSS`p.`avap 01c0: 83 88 83 88 60 61 00 0a 01 00 62 70 0a 00 63 a2 ....`a....bp..c. 01d0: 35 95 63 87 54 53 53 49 70 78 77 62 74 0a 08 63 5.c.TSSIpxwbt..c 01e0: 00 00 0a 08 00 00 64 70 64 88 83 88 54 53 53 49 ......dpd...TSSI 01f0: 63 00 0a 01 00 70 64 88 83 88 54 53 53 4d 63 00 c....pd...TSSMc. 0200: 0a 01 00 75 63 70 ff 54 53 53 46 a0 0e 7b 50 44 ...ucp.TSSF..{PD 0210: 43 30 0a 04 00 a4 54 53 53 4d a4 54 53 53 49 14 C0....TSSM.TSSI. 0220: 3f 5f 54 53 44 00 a0 27 90 7b 43 46 47 44 0c 00 ?_TSD..'.{CFGD.. 0230: 00 00 01 00 92 7b 50 44 43 30 0a 04 00 a4 12 0f .....{PDC0...... 0240: 01 12 0c 05 0a 05 0a 00 0a 00 0a fd 0a 02 a4 12 ................ 0250: 0f 01 12 0c 05 0a 05 0a 00 0a 00 0a fc 0a 01 ............... SSDT @ 0xbf6d8d6a 0000: 53 53 44 54 a6 00 00 00 01 6d 50 6d 52 65 66 00 SSDT.....mPmRef. 0010: 43 70 75 31 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu1Tst..0..INTL 0020: 24 06 05 20 10 41 08 5c 2e 5f 50 52 5f 43 50 55 $.. .A.\._PR_CPU 0030: 31 08 5f 54 50 43 0a 00 14 16 5f 50 54 43 00 a4 1._TPC...._PTC.. 0040: 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 54 43 14 \/._PR_CPU0_PTC. 0050: 16 5f 54 53 53 00 a4 5c 2f 03 5f 50 52 5f 43 50 ._TSS..\/._PR_CP 0060: 55 30 5f 54 53 53 14 3f 5f 54 53 44 00 a0 27 90 U0_TSS.?_TSD..'. 0070: 7b 43 46 47 44 0c 00 00 00 01 00 92 7b 50 44 43 {CFGD.......{PDC 0080: 31 0a 04 00 a4 12 0f 01 12 0c 05 0a 05 0a 00 0a 1............... 0090: 00 0a fd 0a 02 a4 12 0f 01 12 0c 05 0a 05 0a 00 ................ 00a0: 0a 01 0a fc 0a 01 ...... SSDT @ 0xbf6d8884 0000: 53 53 44 54 e6 04 00 00 01 df 50 6d 52 65 66 00 SSDT......PmRef. 0010: 43 70 75 50 6d 00 00 00 00 30 00 00 49 4e 54 4c CpuPm....0..INTL 0020: 24 06 05 20 10 45 08 5c 00 08 53 53 44 54 12 43 $.. .E.\..SSDT.C 0030: 05 0c 0d 43 50 55 30 49 53 54 20 00 0c 9e 95 6d ...CPU0IST ....m 0040: bf 0c b4 01 00 00 0d 43 50 55 31 49 53 54 20 00 .......CPU1IST . 0050: 0c 52 97 6d bf 0c c8 00 00 00 0d 43 50 55 30 43 .R.m.......CPU0C 0060: 53 54 20 00 0c 6f 90 6d bf 0c aa 04 00 00 0d 43 ST ..o.m.......C 0070: 50 55 31 43 53 54 20 00 0c 19 95 6d bf 0c 85 00 PU1CST ....m.... 0080: 00 00 08 43 46 47 44 0c f1 69 3f 11 08 5c 50 44 ...CFGD..i?..\PD 0090: 43 30 0c 00 00 00 80 08 5c 50 44 43 31 0c 00 00 C0......\PDC1... 00a0: 00 80 08 5c 53 44 54 4c 0a 00 10 4d 21 5c 2e 5f ...\SDTL...M!\._ 00b0: 50 52 5f 43 50 55 30 08 48 49 30 5f 0a 00 08 48 PR_CPU0.HI0_...H 00c0: 43 30 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a C0_...H._PDC..h. 00d0: 00 52 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 .REVS.h..SIZEp.h 00e0: 60 70 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a `pt`...a[.h.@wa. 00f0: 08 00 54 45 4d 50 08 53 54 53 30 11 07 0a 04 00 ..TEMP.STS0..... 0100: 00 00 00 73 53 54 53 30 54 45 4d 50 62 5f 4f 53 ...sSTS0TEMPb_OS 0110: 43 11 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 C......w@.).G... 0120: 70 58 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 pXq9SREVSSIZEb.I 0130: 19 5f 4f 53 43 04 8a 6b 0a 00 53 54 53 30 8a 6b ._OSC..k..STS0.k 0140: 0a 04 43 41 50 30 8a 68 0a 00 49 49 44 30 8a 68 ..CAP0.h..IID0.h 0150: 0a 04 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 ..IID1.h..IID2.h 0160: 0a 0c 49 49 44 33 08 55 49 44 30 11 13 0a 10 16 ..IID3.UID0..... 0170: a6 77 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a .w@.).G...pXq9S. 0180: 55 49 44 30 0a 00 45 49 44 30 8a 55 49 44 30 0a UID0..EID0.UID0. 0190: 04 45 49 44 31 8a 55 49 44 30 0a 08 45 49 44 32 .EID1.UID0..EID2 01a0: 8a 55 49 44 30 0a 0c 45 49 44 33 a0 32 92 90 90 .UID0..EID3.2... 01b0: 93 49 49 44 30 45 49 44 30 93 49 49 44 31 45 49 .IID0EID0.IID1EI 01c0: 44 31 90 93 49 49 44 32 45 49 44 32 93 49 49 44 D1..IID2EID2.IID 01d0: 33 45 49 44 33 70 0a 06 53 54 53 30 a4 6b a0 0f 3EID3p..STS0.k.. 01e0: 92 93 69 0a 01 70 0a 0a 53 54 53 30 a4 6b 7d 7b ..i..p..STS0.k}{ 01f0: 50 44 43 30 0c ff ff ff 7f 00 43 41 50 30 50 44 PDC0......CAP0PD 0200: 43 30 70 7b 50 44 43 30 0a ff 00 50 43 50 30 a0 C0p{PDC0...PCP0. 0210: 4c 05 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b L.{CFGD....A...{ 0220: 43 46 47 44 0c 00 00 00 01 00 93 7b 50 44 43 30 CFGD.......{PDC0 0230: 0a 09 00 0a 09 92 7b 53 44 54 4c 0a 01 00 7d 53 ......{SDTL...}S 0240: 44 54 4c 0a 01 53 44 54 4c 5b 80 49 53 54 30 00 DTL..SDTL[.IST0. 0250: 83 88 53 53 44 54 0a 01 00 83 88 53 53 44 54 0a ..SSDT.....SSDT. 0260: 02 00 5b 20 49 53 54 30 48 49 30 5f a0 49 05 7b ..[ IST0HI0_.I.{ 0270: 43 46 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 CFGD....N...{CFG 0280: 44 0c 00 00 00 01 00 7b 50 44 43 30 0a 18 00 92 D......{PDC0.... 0290: 7b 53 44 54 4c 0a 02 00 7d 53 44 54 4c 0a 02 53 {SDTL...}SDTL..S 02a0: 44 54 4c 5b 80 43 53 54 30 00 83 88 53 53 44 54 DTL[.CST0...SSDT 02b0: 0a 07 00 83 88 53 53 44 54 0a 08 00 5b 20 43 53 .....SSDT...[ CS 02c0: 54 30 48 43 30 5f a4 6b 10 4d 21 5c 2e 5f 50 52 T0HC0_.k.M!\._PR 02d0: 5f 43 50 55 31 08 48 49 31 5f 0a 00 08 48 43 31 _CPU1.HI1_...HC1 02e0: 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a 00 52 _...H._PDC..h..R 02f0: 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 60 70 EVS.h..SIZEp.h`p 0300: 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a 08 00 t`...a[.h.@wa... 0310: 54 45 4d 50 08 53 54 53 31 11 07 0a 04 00 00 00 TEMP.STS1....... 0320: 00 73 53 54 53 31 54 45 4d 50 62 5f 4f 53 43 11 .sSTS1TEMPb_OSC. 0330: 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 70 58 .....w@.).G...pX 0340: 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 19 5f q9SREVSSIZEb.I._ 0350: 4f 53 43 04 8a 6b 0a 00 53 54 53 31 8a 6b 0a 04 OSC..k..STS1.k.. 0360: 43 41 50 31 8a 68 0a 00 49 49 44 30 8a 68 0a 04 CAP1.h..IID0.h.. 0370: 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 0a 0c IID1.h..IID2.h.. 0380: 49 49 44 33 08 55 49 44 31 11 13 0a 10 16 a6 77 IID3.UID1......w 0390: 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a 55 49 @.).G...pXq9S.UI 03a0: 44 31 0a 00 45 49 44 30 8a 55 49 44 31 0a 04 45 D1..EID0.UID1..E 03b0: 49 44 31 8a 55 49 44 31 0a 08 45 49 44 32 8a 55 ID1.UID1..EID2.U 03c0: 49 44 31 0a 0c 45 49 44 33 a0 32 92 90 90 93 49 ID1..EID3.2....I 03d0: 49 44 30 45 49 44 30 93 49 49 44 31 45 49 44 31 ID0EID0.IID1EID1 03e0: 90 93 49 49 44 32 45 49 44 32 93 49 49 44 33 45 ..IID2EID2.IID3E 03f0: 49 44 33 70 0a 06 53 54 53 31 a4 6b a0 0f 92 93 ID3p..STS1.k.... 0400: 69 0a 01 70 0a 0a 53 54 53 31 a4 6b 7d 7b 50 44 i..p..STS1.k}{PD 0410: 43 31 0c ff ff ff 7f 00 43 41 50 31 50 44 43 31 C1......CAP1PDC1 0420: 70 7b 50 44 43 31 0a ff 00 50 43 50 31 a0 4c 05 p{PDC1...PCP1.L. 0430: 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b 43 46 {CFGD....A...{CF 0440: 47 44 0c 00 00 00 01 00 93 7b 50 44 43 31 0a 09 GD.......{PDC1.. 0450: 00 0a 09 92 7b 53 44 54 4c 0a 10 00 7d 53 44 54 ....{SDTL...}SDT 0460: 4c 0a 10 53 44 54 4c 5b 80 49 53 54 31 00 83 88 L..SDTL[.IST1... 0470: 53 53 44 54 0a 04 00 83 88 53 53 44 54 0a 05 00 SSDT.....SSDT... 0480: 5b 20 49 53 54 31 48 49 31 5f a0 49 05 7b 43 46 [ IST1HI1_.I.{CF 0490: 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 44 0c GD....N...{CFGD. 04a0: 00 00 00 01 00 7b 50 44 43 31 0a 18 00 92 7b 53 .....{PDC1....{S 04b0: 44 54 4c 0a 20 00 7d 53 44 54 4c 0a 20 53 44 54 DTL. .}SDTL. SDT 04c0: 4c 5b 80 43 53 54 31 00 83 88 53 53 44 54 0a 0a L[.CST1...SSDT.. 04d0: 00 83 88 53 53 44 54 0a 0b 00 5b 20 43 53 54 31 ...SSDT...[ CST1 04e0: 48 43 31 5f a4 6b HC1_.k XSDT @ 0xbf6d87f0 0000: 58 53 44 54 94 00 00 00 01 c2 4c 45 4e 4f 56 4f XSDT......LENOVO 0010: 54 50 2d 36 38 20 20 20 00 00 04 06 20 4c 54 50 TP-68 .... LTP 0020: 00 00 00 00 d2 fb 6d bf 00 00 00 00 c6 fc 6d bf ......m.......m. 0030: 00 00 00 00 2e fd 6d bf 00 00 00 00 66 fd 6d bf ......m.....f.m. 0040: 00 00 00 00 a2 fd 6d bf 00 00 00 00 d4 fd 6d bf ......m.......m. 0050: 00 00 00 00 fa fd 6d bf 00 00 00 00 70 ff 6d bf ......m.....p.m. 0060: 00 00 00 00 d8 ff 6d bf 00 00 00 00 bd 98 6d bf ......m.......m. 0070: 00 00 00 00 1a 98 6d bf 00 00 00 00 10 8e 6d bf ......m.......m. 0080: 00 00 00 00 6a 8d 6d bf 00 00 00 00 84 88 6d bf ....j.m.......m. 0090: 00 00 00 00 .... RSD PTR @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... fwts-test/osilinux-0001/acpidump-0002.log000066400000000000000000004054211465205512700201470ustar00rootroot00000000000000DSDT @ 0xbf6d9b6a 0000: 44 53 44 54 f4 5f 00 00 02 11 54 4f 53 43 50 4c DSDT._....TOSCPL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 49 4e 54 4c CRESTLNE....INTL 0020: 08 06 06 20 08 5a 30 30 30 01 08 5a 30 30 31 0a ... .Z000..Z001. 0030: 02 08 5a 30 30 32 0a 04 08 5a 30 30 33 0a 08 08 ..Z002...Z003... 0040: 5a 30 30 34 00 08 5a 30 30 35 0a 0f 08 5a 30 30 Z004..Z005...Z00 0050: 36 0a 0d 08 5a 30 30 37 0a 0b 08 5a 30 30 38 0a 6...Z007...Z008. 0060: 09 08 45 43 44 59 0a 07 5b 01 4d 55 54 58 00 5b ..ECDY..[.MUTX.[ 0070: 80 50 52 54 30 01 0a 80 0a 04 5b 81 0b 50 52 54 .PRT0.....[..PRT 0080: 30 13 50 38 30 48 20 14 4e 07 50 38 58 48 0a a0 0.P80H .N.P8XH.. 0090: 17 93 68 00 70 7d 7b 50 38 30 44 0c 00 ff ff ff ..h.p}{P80D..... 00a0: 00 69 00 50 38 30 44 a0 1b 93 68 01 70 7d 7b 50 .i.P80D...h.p}{P 00b0: 38 30 44 0c ff 00 ff ff 00 79 69 0a 08 00 00 50 80D......yi....P 00c0: 38 30 44 a0 1c 93 68 0a 02 70 7d 7b 50 38 30 44 80D...h..p}{P80D 00d0: 0c ff ff 00 ff 00 79 69 0a 10 00 00 50 38 30 44 ......yi....P80D 00e0: a0 1c 93 68 0a 03 70 7d 7b 50 38 30 44 0c ff ff ...h..p}{P80D... 00f0: ff 00 00 79 69 0a 18 00 00 50 38 30 44 70 50 38 ...yi....P80DpP8 0100: 30 44 50 38 30 48 14 0c 5f 50 49 43 01 70 68 47 0DP80H.._PIC.phG 0110: 50 49 43 14 46 06 5f 50 54 53 01 70 00 50 38 30 PIC.F._PTS.p.P80 0120: 44 50 38 58 48 00 68 a0 1e 93 68 0a 03 70 01 5c DP8XH.h...h..p.\ 0130: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0140: 30 5f 53 33 4c 44 a0 33 93 68 0a 04 70 01 5c 2f 0_S3LD.3.h..p.\/ 0150: 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 ._SB_PCI0LPCBEC0 0160: 5f 53 33 4c 44 5c 2f 04 5f 53 42 5f 50 43 49 30 _S3LD\/._SB_PCI0 0170: 4c 50 43 42 50 48 53 53 0a 0e 14 4c 1c 5f 57 41 LPCBPHSS...L._WA 0180: 4b 01 50 38 58 48 01 0a ab a0 30 91 93 68 0a 03 K.P8XH....0..h.. 0190: 93 68 0a 04 a0 25 7b 43 46 47 44 0c 00 00 00 01 .h...%{CFGD..... 01a0: 00 a0 18 90 7b 43 46 47 44 0a f0 00 93 4f 53 59 ....{CFGD....OSY 01b0: 53 0b d1 07 54 52 41 50 0a 3d a0 18 93 52 50 31 S...TRAP.=...RP1 01c0: 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 D..\/._SB_PCI0RP 01d0: 30 31 00 a0 18 93 52 50 32 44 00 86 5c 2f 03 5f 01....RP2D..\/._ 01e0: 53 42 5f 50 43 49 30 52 50 30 32 00 a0 18 93 52 SB_PCI0RP02....R 01f0: 50 33 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 P3D..\/._SB_PCI0 0200: 52 50 30 33 00 a0 18 93 52 50 34 44 00 86 5c 2f RP03....RP4D..\/ 0210: 03 5f 53 42 5f 50 43 49 30 52 50 30 34 00 a0 18 ._SB_PCI0RP04... 0220: 93 52 50 35 44 00 86 5c 2f 03 5f 53 42 5f 50 43 .RP5D..\/._SB_PC 0230: 49 30 52 50 30 35 00 a0 18 93 52 50 36 44 00 86 I0RP05....RP6D.. 0240: 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 36 00 \/._SB_PCI0RP06. 0250: a0 12 93 68 0a 03 50 38 58 48 00 0a 30 54 52 41 ...h..P8XH..0TRA 0260: 50 0a 46 a0 43 0d 93 68 0a 04 50 38 58 48 00 0a P.F.C..h..P8XH.. 0270: 40 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 @\/._SB_PCI0LPCB 0280: 50 48 53 53 0a 0f 70 57 41 4b 46 60 70 00 57 41 PHSS..pWAKF`p.WA 0290: 4b 46 7b 60 0a 05 60 a0 18 93 60 01 50 38 58 48 KF{`..`...`.P8XH 02a0: 00 0a 41 86 5c 2e 5f 53 42 5f 50 57 52 42 0a 02 ..A.\._SB_PWRB.. 02b0: a0 46 08 44 54 53 45 54 52 41 50 0a 47 a0 42 06 .F.DTSETRAP.G.B. 02c0: 90 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 .\/._SB_PCI0LPCB 02d0: 45 43 4f 4b 93 45 43 44 59 00 a0 27 92 95 44 54 ECOK.ECDY..'..DT 02e0: 53 31 44 54 53 32 70 44 54 53 31 5c 2f 05 5f 53 S1DTS2pDTS1\/._S 02f0: 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b B_PCI0LPCBEC0_SK 0300: 54 41 a1 1d 70 44 54 53 32 5c 2f 05 5f 53 42 5f TA..pDTS2\/._SB_ 0310: 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 PCI0LPCBEC0_SKTA 0320: a1 16 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 0330: 42 50 48 53 53 0a 10 5c 2e 5f 50 52 5f 52 50 50 BPHSS..\._PR_RPP 0340: 43 a4 12 04 02 00 00 14 1e 47 45 54 42 0b 77 68 C........GETB.wh 0350: 0a 08 60 77 69 0a 08 61 5b 13 6a 60 61 54 42 46 ..`wi..a[.j`aTBF 0360: 33 a4 54 42 46 33 14 42 09 50 4e 4f 54 08 a0 4a 3.TBF3.B.PNOT..J 0370: 06 4d 50 45 4e a0 31 7b 50 44 43 30 0a 08 00 86 .MPEN.1{PDC0.... 0380: 5c 2e 5f 50 52 5f 43 50 55 30 0a 80 a0 1a 7b 50 \._PR_CPU0....{P 0390: 44 43 30 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC0...[".d.\._PR 03a0: 5f 43 50 55 30 0a 81 a0 31 7b 50 44 43 31 0a 08 _CPU0...1{PDC1.. 03b0: 00 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 a0 1a ..\._PR_CPU1.... 03c0: 7b 50 44 43 31 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC1...[".d.\._ 03d0: 50 52 5f 43 50 55 31 0a 81 a1 1f 86 5c 2e 5f 50 PR_CPU1.....\._P 03e0: 52 5f 43 50 55 30 0a 80 5b 22 0a 64 86 5c 2e 5f R_CPU0..[".d.\._ 03f0: 50 52 5f 43 50 55 30 0a 81 14 17 54 52 41 50 09 PR_CPU0....TRAP. 0400: 70 68 53 4d 49 46 70 00 54 52 50 30 a4 53 4d 49 phSMIFp.TRP0.SMI 0410: 46 10 41 0f 5f 53 42 5f 14 4a 0e 5f 49 4e 49 00 F.A._SB_.J._INI. 0420: 70 0b 99 99 4d 41 52 4b a0 1c 44 54 53 45 54 52 p...MARK..DTSETR 0430: 41 50 0a 47 5e 2f 03 50 43 49 30 4c 50 43 42 50 AP.G^/.PCI0LPCBP 0440: 48 53 53 0a 10 70 0b d0 07 4f 53 59 53 a0 4a 09 HSS..p...OSYS.J. 0450: 5b 12 5f 4f 53 49 60 a0 18 5f 4f 53 49 0d 4d 69 [._OSI`.._OSI.Mi 0460: 6e 69 78 00 70 01 4c 49 4e 58 70 00 45 43 44 59 nix.p.LINXp.ECDY 0470: a0 1b 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 .._OSI.Windows 2 0480: 30 30 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 001.p...OSYS.._O 0490: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04a0: 53 50 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f SP1.p...OSYS.._O 04b0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04c0: 53 50 32 00 70 0b d2 07 4f 53 59 53 a0 1b 5f 4f SP2.p...OSYS.._O 04d0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 00 SI.Windows 2006. 04e0: 70 0b d6 07 4f 53 59 53 a0 14 90 4d 50 45 4e 93 p...OSYS...MPEN. 04f0: 4f 53 59 53 0b d1 07 54 52 41 50 0a 3d 54 52 41 OSYS...TRAP.=TRA 0500: 50 0a 2b 5b 80 47 4e 56 53 00 0c bc 2d 6e bf 0b P.+[.GNVS...-n.. 0510: 00 01 5b 81 45 24 47 4e 56 53 10 4f 53 59 53 10 ..[.E$GNVS.OSYS. 0520: 53 4d 49 46 08 50 52 4d 30 08 50 52 4d 31 08 53 SMIF.PRM0.PRM1.S 0530: 43 49 46 08 50 52 4d 32 08 50 52 4d 33 08 4c 43 CIF.PRM2.PRM3.LC 0540: 4b 46 08 50 52 4d 34 08 50 52 4d 35 08 50 38 30 KF.PRM4.PRM5.P80 0550: 44 20 4c 49 44 53 08 50 57 52 53 08 44 42 47 53 D LIDS.PWRS.DBGS 0560: 08 4c 49 4e 58 08 00 08 41 43 54 31 08 41 43 54 .LINX...ACT1.ACT 0570: 54 08 50 53 56 54 08 54 43 31 56 08 54 43 32 56 T.PSVT.TC1V.TC2V 0580: 08 54 53 50 56 08 43 52 54 54 08 44 54 53 45 08 .TSPV.CRTT.DTSE. 0590: 44 54 53 31 08 44 54 53 32 08 00 40 05 41 50 49 DTS1.DTS2..@.API 05a0: 43 08 4d 50 45 4e 08 50 43 50 30 08 50 43 50 31 C.MPEN.PCP0.PCP1 05b0: 08 50 50 43 4d 08 00 28 43 4d 41 50 08 43 4d 42 .PPCM..(CMAP.CMB 05c0: 50 08 4c 50 54 50 08 46 44 43 50 08 00 30 49 47 P.LPTP.FDCP..0IG 05d0: 44 53 08 54 4c 53 54 08 43 41 44 4c 08 50 41 44 DS.TLST.CADL.PAD 05e0: 4c 08 43 53 54 45 10 4e 53 54 45 10 53 53 54 45 L.CSTE.NSTE.SSTE 05f0: 10 4e 44 49 44 08 44 49 44 31 20 44 49 44 32 20 .NDID.DID1 DID2 0600: 44 49 44 33 20 44 49 44 34 20 44 49 44 35 20 00 DID3 DID4 DID5 . 0610: 40 06 42 4c 43 53 08 42 52 54 4c 08 41 4c 53 45 @.BLCS.BRTL.ALSE 0620: 08 41 4c 41 46 08 4c 4c 4f 57 08 4c 48 49 48 08 .ALAF.LLOW.LHIH. 0630: 00 08 45 4d 41 45 08 45 4d 41 50 10 45 4d 41 4c ..EMAE.EMAP.EMAL 0640: 10 00 08 4d 45 46 45 08 00 18 54 50 4d 50 08 54 ...MEFE...TPMP.T 0650: 50 4d 45 08 00 40 04 47 54 46 30 38 47 54 46 32 PME..@.GTF08GTF2 0660: 38 49 44 45 4d 08 47 54 46 31 38 00 40 09 41 53 8IDEM.GTF18.@.AS 0670: 4c 42 20 49 42 54 54 08 49 50 41 54 08 49 54 56 LB IBTT.IPAT.ITV 0680: 46 08 49 54 56 4d 08 49 50 53 43 08 49 42 4c 43 F.ITVM.IPSC.IBLC 0690: 08 49 42 49 41 08 49 53 53 43 08 49 34 30 39 08 .IBIA.ISSC.I409. 06a0: 49 35 30 39 08 49 36 30 39 08 49 37 30 39 08 49 I509.I609.I709.I 06b0: 44 4d 4d 08 49 44 4d 53 08 49 46 31 45 08 48 56 DMM.IDMS.IF1E.HV 06c0: 43 4f 08 4e 58 44 31 20 4e 58 44 32 20 4d 41 52 CO.NXD1 NXD2 MAR 06d0: 4b 10 42 52 41 44 08 42 54 45 4e 08 56 56 45 4e K.BRAD.BTEN.VVEN 06e0: 08 42 47 54 4c 08 54 4d 45 45 01 00 07 53 43 55 .BGTL.TMEE...SCU 06f0: 30 01 53 43 55 31 01 53 43 55 32 01 53 43 55 33 0.SCU1.SCU2.SCU3 0700: 01 00 04 58 4b 53 50 01 58 4b 49 4e 01 58 4b 49 ...XKSP.XKIN.XKI 0710: 44 01 58 4b 4f 4b 01 00 04 42 47 55 31 08 42 53 D.XKOK...BGU1.BS 0720: 54 31 08 42 46 43 31 10 57 4b 4c 4e 08 57 41 4b T1.BFC1.WKLN.WAK 0730: 46 08 44 53 4d 44 08 42 41 59 53 08 48 41 50 45 F.DSMD.BAYS.HAPE 0740: 01 00 07 44 54 53 4d 01 00 07 4f 44 54 31 08 4f ...DTSM...ODT1.O 0750: 44 54 32 08 44 54 53 57 08 08 44 53 45 4e 01 08 DT2.DTSW..DSEN.. 0760: 45 43 4f 4e 00 08 47 50 49 43 00 08 43 54 59 50 ECON..GPIC..CTYP 0770: 00 08 4c 30 31 43 00 08 56 46 4e 30 00 08 56 46 ..L01C..VFN0..VF 0780: 4e 31 00 10 4a 7c 5f 47 50 45 14 46 35 5f 4c 30 N1..J|_GPE.F5_L0 0790: 31 00 72 4c 30 31 43 01 4c 30 31 43 50 38 58 48 1.rL01C.L01CP8XH 07a0: 00 01 50 38 58 48 01 4c 30 31 43 a0 48 08 90 93 ..P8XH.L01C.H... 07b0: 52 50 31 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 RP1D.\/._SB_PCI0 07c0: 52 50 30 31 48 50 53 58 5b 22 0a 64 a0 40 05 5c RP01HPSX[".d.@.\ 07d0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 /._SB_PCI0RP01PD 07e0: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 07f0: 50 30 31 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f P01PDCXp.\/._SB_ 0800: 50 43 49 30 52 50 30 31 48 50 53 58 86 5c 2f 03 PCI0RP01HPSX.\/. 0810: 5f 53 42 5f 50 43 49 30 52 50 30 31 00 a1 16 70 _SB_PCI0RP01...p 0820: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0830: 48 50 53 58 a0 48 08 90 93 52 50 32 44 00 5c 2f HPSX.H...RP2D.\/ 0840: 04 5f 53 42 5f 50 43 49 30 52 50 30 32 48 50 53 ._SB_PCI0RP02HPS 0850: 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 5f 50 X[".d.@.\/._SB_P 0860: 43 49 30 52 50 30 32 50 44 43 58 70 01 5c 2f 04 CI0RP02PDCXp.\/. 0870: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 44 43 58 _SB_PCI0RP02PDCX 0880: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 0890: 32 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 2HPSX.\/._SB_PCI 08a0: 30 52 50 30 32 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP02...p.\/._SB 08b0: 5f 50 43 49 30 52 50 30 32 48 50 53 58 a0 48 08 _PCI0RP02HPSX.H. 08c0: 90 93 52 50 33 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP3D.\/._SB_PC 08d0: 49 30 52 50 30 33 48 50 53 58 5b 22 0a 64 a0 40 I0RP03HPSX[".d.@ 08e0: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 .\/._SB_PCI0RP03 08f0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0900: 30 52 50 30 33 50 44 43 58 70 01 5c 2f 04 5f 53 0RP03PDCXp.\/._S 0910: 42 5f 50 43 49 30 52 50 30 33 48 50 53 58 86 5c B_PCI0RP03HPSX.\ 0920: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 33 00 a1 /._SB_PCI0RP03.. 0930: 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .p.\/._SB_PCI0RP 0940: 30 33 48 50 53 58 a0 48 08 90 93 52 50 34 44 00 03HPSX.H...RP4D. 0950: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 48 \/._SB_PCI0RP04H 0960: 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 PSX[".d.@.\/._SB 0970: 5f 50 43 49 30 52 50 30 34 50 44 43 58 70 01 5c _PCI0RP04PDCXp.\ 0980: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 44 /._SB_PCI0RP04PD 0990: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 09a0: 50 30 34 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 P04HPSX.\/._SB_P 09b0: 43 49 30 52 50 30 34 00 a1 16 70 01 5c 2f 04 5f CI0RP04...p.\/._ 09c0: 53 42 5f 50 43 49 30 52 50 30 34 48 50 53 58 a0 SB_PCI0RP04HPSX. 09d0: 48 08 90 93 52 50 35 44 00 5c 2f 04 5f 53 42 5f H...RP5D.\/._SB_ 09e0: 50 43 49 30 52 50 30 35 48 50 53 58 5b 22 0a 64 PCI0RP05HPSX[".d 09f0: a0 40 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .@.\/._SB_PCI0RP 0a00: 30 35 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 05PDCXp.\/._SB_P 0a10: 43 49 30 52 50 30 35 50 44 43 58 70 01 5c 2f 04 CI0RP05PDCXp.\/. 0a20: 5f 53 42 5f 50 43 49 30 52 50 30 35 48 50 53 58 _SB_PCI0RP05HPSX 0a30: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 35 .\/._SB_PCI0RP05 0a40: 00 a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ...p.\/._SB_PCI0 0a50: 52 50 30 35 48 50 53 58 a0 48 08 90 93 52 50 36 RP05HPSX.H...RP6 0a60: 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 D.\/._SB_PCI0RP0 0a70: 36 48 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 6HPSX[".d.@.\/._ 0a80: 53 42 5f 50 43 49 30 52 50 30 36 50 44 43 58 70 SB_PCI0RP06PDCXp 0a90: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 0aa0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0ab0: 30 52 50 30 36 48 50 53 58 86 5c 2f 03 5f 53 42 0RP06HPSX.\/._SB 0ac0: 5f 50 43 49 30 52 50 30 36 00 a1 16 70 01 5c 2f _PCI0RP06...p.\/ 0ad0: 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 50 53 ._SB_PCI0RP06HPS 0ae0: 58 14 42 0d 5f 4c 30 32 00 70 00 47 50 45 43 a0 X.B._L02.p.GPEC. 0af0: 4d 0a 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 M.\/._SB_PCI0LPC 0b00: 42 45 43 4f 4b a0 4e 04 93 44 54 53 57 01 a0 27 BECOK.N..DTSW..' 0b10: 92 95 44 54 53 31 44 54 53 32 70 44 54 53 31 5c ..DTS1DTS2pDTS1\ 0b20: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0b30: 30 5f 53 4b 54 41 a1 1d 70 44 54 53 32 5c 2f 05 0_SKTA..pDTS2\/. 0b40: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f _SB_PCI0LPCBEC0_ 0b50: 53 4b 54 41 a1 48 04 a0 27 92 95 4f 44 54 31 4f SKTA.H..'..ODT1O 0b60: 44 54 32 70 4f 44 54 31 5c 2f 05 5f 53 42 5f 50 DT2pODT1\/._SB_P 0b70: 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 CI0LPCBEC0_SKTA. 0b80: 1d 70 4f 44 54 32 5c 2f 05 5f 53 42 5f 50 43 49 .pODT2\/._SB_PCI 0b90: 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 16 5c 0LPCBEC0_SKTA..\ 0ba0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 50 48 /._SB_PCI0LPCBPH 0bb0: 53 53 0a 10 14 18 5f 4c 30 33 00 86 5c 2f 03 5f SS...._L03..\/._ 0bc0: 53 42 5f 50 43 49 30 55 53 42 31 0a 02 14 18 5f SB_PCI0USB1...._ 0bd0: 4c 30 34 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 L04..\/._SB_PCI0 0be0: 55 53 42 32 0a 02 14 18 5f 4c 30 35 00 86 5c 2f USB2...._L05..\/ 0bf0: 03 5f 53 42 5f 50 43 49 30 55 53 42 35 0a 02 14 ._SB_PCI0USB5... 0c00: 36 5f 4c 30 36 00 a0 27 5c 2f 04 5f 53 42 5f 50 6_L06..'\/._SB_P 0c10: 43 49 30 47 46 58 30 47 53 53 45 5c 2f 04 5f 53 CI0GFX0GSSE\/._S 0c20: 42 5f 50 43 49 30 47 46 58 30 47 53 43 49 a1 07 B_PCI0GFX0GSCI.. 0c30: 70 01 53 43 49 53 14 43 1f 5f 4c 30 39 00 a0 41 p.SCIS.C._L09..A 0c40: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0c50: 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PSPXp.\/._SB_PCI 0c60: 30 52 50 30 31 50 53 50 58 70 01 5c 2f 04 5f 53 0RP01PSPXp.\/._S 0c70: 42 5f 50 43 49 30 52 50 30 31 50 4d 53 58 86 5c B_PCI0RP01PMSX.\ 0c80: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 31 0a 02 /._SB_PCI0RP01.. 0c90: a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .A.\/._SB_PCI0RP 0ca0: 30 32 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 02PSPXp.\/._SB_P 0cb0: 43 49 30 52 50 30 32 50 53 50 58 70 01 5c 2f 04 CI0RP02PSPXp.\/. 0cc0: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 4d 53 58 _SB_PCI0RP02PMSX 0cd0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 0ce0: 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 ...A.\/._SB_PCI0 0cf0: 52 50 30 33 50 53 50 58 70 01 5c 2f 04 5f 53 42 RP03PSPXp.\/._SB 0d00: 5f 50 43 49 30 52 50 30 33 50 53 50 58 70 01 5c _PCI0RP03PSPXp.\ 0d10: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 50 4d /._SB_PCI0RP03PM 0d20: 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 SX.\/._SB_PCI0RP 0d30: 30 33 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 03...A.\/._SB_PC 0d40: 49 30 52 50 30 34 50 53 50 58 70 01 5c 2f 04 5f I0RP04PSPXp.\/._ 0d50: 53 42 5f 50 43 49 30 52 50 30 34 50 53 50 58 70 SB_PCI0RP04PSPXp 0d60: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 .\/._SB_PCI0RP04 0d70: 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 PMSX.\/._SB_PCI0 0d80: 52 50 30 34 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f RP04...A.\/._SB_ 0d90: 50 43 49 30 52 50 30 35 50 53 50 58 70 01 5c 2f PCI0RP05PSPXp.\/ 0da0: 04 5f 53 42 5f 50 43 49 30 52 50 30 35 50 53 50 ._SB_PCI0RP05PSP 0db0: 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 Xp.\/._SB_PCI0RP 0dc0: 30 35 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 05PMSX.\/._SB_PC 0dd0: 49 30 52 50 30 35 0a 02 a0 41 05 5c 2f 04 5f 53 I0RP05...A.\/._S 0de0: 42 5f 50 43 49 30 52 50 30 36 50 53 50 58 70 01 B_PCI0RP06PSPXp. 0df0: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 50 \/._SB_PCI0RP06P 0e00: 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 SPXp.\/._SB_PCI0 0e10: 52 50 30 36 50 4d 53 58 86 5c 2f 03 5f 53 42 5f RP06PMSX.\/._SB_ 0e20: 50 43 49 30 52 50 30 36 0a 02 14 18 5f 4c 30 42 PCI0RP06...._L0B 0e30: 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 50 43 49 ..\/._SB_PCI0PCI 0e40: 42 0a 02 14 18 5f 4c 30 43 00 86 5c 2f 03 5f 53 B...._L0C..\/._S 0e50: 42 5f 50 43 49 30 55 53 42 33 0a 02 14 4b 0b 5f B_PCI0USB3...K._ 0e60: 4c 30 44 00 a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 L0D..;\/._SB_PCI 0e70: 30 45 48 43 31 50 4d 45 53 70 01 5c 2f 04 5f 53 0EHC1PMESp.\/._S 0e80: 42 5f 50 43 49 30 45 48 43 31 50 4d 45 53 86 5c B_PCI0EHC1PMES.\ 0e90: 2f 03 5f 53 42 5f 50 43 49 30 45 48 43 31 0a 02 /._SB_PCI0EHC1.. 0ea0: a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 30 45 48 43 .;\/._SB_PCI0EHC 0eb0: 32 50 4d 45 53 70 01 5c 2f 04 5f 53 42 5f 50 43 2PMESp.\/._SB_PC 0ec0: 49 30 45 48 43 32 50 4d 45 53 86 5c 2f 03 5f 53 I0EHC2PMES.\/._S 0ed0: 42 5f 50 43 49 30 45 48 43 32 0a 02 a0 3b 5c 2f B_PCI0EHC2...;\/ 0ee0: 04 5f 53 42 5f 50 43 49 30 48 44 45 46 50 4d 45 ._SB_PCI0HDEFPME 0ef0: 53 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 48 44 Sp.\/._SB_PCI0HD 0f00: 45 46 50 4d 45 53 86 5c 2f 03 5f 53 42 5f 50 43 EFPMES.\/._SB_PC 0f10: 49 30 48 44 45 46 0a 02 14 18 5f 4c 30 45 00 86 I0HDEF...._L0E.. 0f20: 5c 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 34 0a \/._SB_PCI0USB4. 0f30: 02 14 1c 5f 4c 31 42 00 80 4c 50 4f 4c 4c 50 4f ..._L1B..LPOLLPO 0f40: 4c 86 5c 2e 5f 53 42 5f 4c 49 44 30 0a 80 10 46 L.\._SB_LID0...F 0f50: 0b 5f 50 52 5f 5b 83 0b 43 50 55 30 00 10 10 00 ._PR_[..CPU0.... 0f60: 00 06 5b 83 0b 43 50 55 31 01 10 10 00 00 06 14 ..[..CPU1....... 0f70: 45 09 52 50 50 43 00 a0 4d 08 93 4f 53 59 53 0b E.RPPC..M..OSYS. 0f80: d2 07 a0 42 08 7b 43 46 47 44 01 00 a0 42 04 94 ...B.{CFGD...B.. 0f90: 5e 2e 43 50 55 30 5f 50 50 43 00 74 5e 2e 43 50 ^.CPU0_PPC.t^.CP 0fa0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 0fb0: 43 50 4e 4f 54 72 5e 2e 43 50 55 30 5f 50 50 43 CPNOTr^.CPU0_PPC 0fc0: 01 5e 2e 43 50 55 30 5f 50 50 43 50 4e 4f 54 a1 .^.CPU0_PPCPNOT. 0fd0: 35 72 5e 2e 43 50 55 30 5f 50 50 43 01 5e 2e 43 5r^.CPU0_PPC.^.C 0fe0: 50 55 30 5f 50 50 43 50 4e 4f 54 74 5e 2e 43 50 PU0_PPCPNOTt^.CP 0ff0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 1000: 43 50 4e 4f 54 08 46 57 53 4f 0d 46 57 53 4f 00 CPNOT.FWSO.FWSO. 1010: 08 5f 50 53 43 00 14 12 5f 50 53 30 00 70 5f 50 ._PSC..._PS0.p_P 1020: 53 43 60 70 00 5f 50 53 43 14 0d 5f 50 53 33 00 SC`p._PSC.._PS3. 1030: 70 0a 03 5f 50 53 43 10 8c fb 04 5f 53 42 5f 5b p.._PSC...._SB_[ 1040: 82 4f 3e 41 4d 57 30 08 5f 48 49 44 0d 70 6e 70 .O>AMW0._HID.pnp 1050: 30 63 31 34 00 08 5f 55 49 44 00 08 5f 57 44 47 0c14.._UID.._WDG 1060: 11 3f 0a 3c a7 1d 85 2e 53 d0 5f 49 9d fa 1a 4a .?.<....S._I...J 1070: d6 2e 6a 86 41 43 01 00 3b 6d 43 71 dd fb 72 4c ..j.AC..;mCq..rL 1080: bc b8 43 5b fe 0d 64 f9 42 43 01 00 21 12 90 05 ..C[..d.BC..!... 1090: 66 d5 d1 11 b2 f0 00 a0 c9 06 29 10 42 41 01 00 f.........).BA.. 10a0: 08 53 54 41 43 11 07 0a 04 01 14 03 00 14 1f 57 .STAC..........W 10b0: 51 41 43 01 70 0d 4d 58 4d 54 43 43 6f 6e 66 69 QAC.p.MXMTCConfi 10c0: 67 44 61 74 61 00 5b 31 a4 53 54 41 43 08 53 54 gData.[1.STAC.ST 10d0: 42 43 11 07 0a 04 01 00 00 00 14 34 57 51 42 43 BC.........4WQBC 10e0: 01 70 0d 47 65 74 20 4d 58 4d 54 43 43 6f 6e 74 .p.Get MXMTCCont 10f0: 72 6f 6c 44 61 74 61 3a 20 53 54 42 43 20 3d 20 rolData: STBC = 1100: 00 5b 31 70 53 54 42 43 5b 31 a4 53 54 42 43 14 .[1pSTBC[1.STBC. 1110: 47 06 57 53 42 43 02 70 69 53 54 42 43 70 0d 53 G.WSBC.piSTBCp.S 1120: 65 74 20 4d 58 4d 54 43 43 6f 6e 74 72 6f 6c 44 et MXMTCControlD 1130: 61 74 61 3a 20 53 54 42 43 20 3d 20 00 5b 31 70 ata: STBC = .[1p 1140: 53 54 42 43 5b 31 a0 30 93 5e 5e 2f 03 50 43 49 STBC[1.0.^^/.PCI 1150: 30 4c 50 43 42 45 43 4f 4b 01 70 83 88 53 54 42 0LPCBECOK.p..STB 1160: 43 01 00 5e 5e 2f 04 50 43 49 30 4c 50 43 42 45 C..^^/.PCI0LPCBE 1170: 43 30 5f 53 4b 54 43 08 57 51 42 41 11 43 2b 0b C0_SKTC.WQBA.C+. 1180: ae 02 46 4f 4d 42 01 00 00 00 9e 02 00 00 c0 0b ..FOMB.......... 1190: 00 00 44 53 00 01 1a 7d da 54 28 d9 85 00 01 06 ..DS...}.T(..... 11a0: 18 42 10 07 10 0a 4b 61 02 c9 21 52 3c 18 94 05 .B....Ka..!R<... 11b0: 10 43 88 57 04 44 04 84 bc 0a b0 29 c0 24 88 fa .C.W.D.....).$.. 11c0: f7 87 28 09 0e 25 04 42 12 05 98 17 a0 5b 80 61 ..(..%.B.....[.a 11d0: 01 b6 05 98 16 e0 18 92 4a 03 a7 04 96 02 21 a1 ........J.....!. 11e0: 02 94 0b f0 2d 40 3b a2 24 0b b0 0c 23 02 8f 82 ....-@;.$...#... 11f0: a1 71 68 ec 30 2c 13 4c 83 38 8c b2 91 45 60 dc .qh.0,.L.8...E`. 1200: 4e 05 c8 15 20 4c 80 78 54 61 34 07 45 e0 42 63 N... L.xTa4.E.Bc 1210: 64 40 c8 a3 00 ab a3 d0 a4 12 d8 bd 00 65 02 2c d@...........e., 1220: 0a 10 27 c0 9a 00 63 48 32 28 40 9b 00 5b 20 42 ..'...cH2(@..[ B 1230: 0f d4 19 8a 46 70 02 51 6a 46 11 48 ac 1a 01 85 ....Fp.QjF.H.... 1240: 12 34 46 b0 10 81 c2 86 37 46 98 03 88 d1 fe 20 .4F.....7F..... 1250: 48 20 05 e3 66 91 46 83 1a 6b 82 63 f7 68 4e b8 H ..f.F..k.c.hN. 1260: 73 01 d2 e7 26 90 a3 3b b8 3a 07 4d 86 c7 b0 1e s...&..;.:.M.... 1270: 06 d8 29 00 ef 1a 50 d3 3f 78 26 08 0e 35 44 8f ..)...P.?x&..5D. 1280: 3a dc 09 1c fb 91 30 88 b3 3b 6e ac c3 c9 68 d0 :.....0..;n...h. 1290: a5 0a 30 7b 00 d0 d0 12 9c f6 99 84 7e 0f 38 9f ..0{........~.8. 12a0: 9e 21 89 fc 41 a0 46 e6 ff 3f b4 c7 78 5a 31 43 .!..A.F..?..xZ1C 12b0: 3e 0b 1c 16 13 0b a1 4d 6a 3c 40 40 e1 d1 40 08 >......Mj<@@..@. 12c0: 6f 06 9e af 09 46 86 90 93 f1 a0 06 e0 41 d7 3a o....F.......A.: 12d0: 32 8d 27 a6 21 cf e8 00 22 bf 32 78 0c 41 02 f9 2.'.!...".2x.A.. 12e0: c4 60 b8 c7 81 13 78 02 f0 59 40 10 92 00 21 51 .`....x..Y@...!Q 12f0: e3 a7 47 08 7e 7a 78 93 30 28 1f d2 99 f9 90 e1 ..G.~zx.0(...... 1300: 11 c2 07 c4 7b 9f 3b 19 c1 29 7b a4 e0 b0 7e 0e ....{.;..){...~. 1310: 20 c0 af 0f 8f 0d 09 7c ae 08 8c 1d aa fd 0a 40 ......|.......@ 1320: 08 1e ed 51 e0 54 23 1c 2d 78 08 8a 1c 03 4a cc ...Q.T#.-x....J. 1330: 18 50 03 38 85 d0 e7 73 04 47 14 25 f6 21 19 da .P.8...s.G.%.!.. 1340: 08 e1 1f 39 4e c1 f7 8b 23 3d ad 23 78 91 f0 08 ...9N...#=.#x... 1350: 30 e1 ce 28 a8 38 30 f4 ff 7f 4c 01 dc 7a 3b a6 0..(.80...L..z;. 1360: 80 3e c0 31 05 50 fc ff 3f a6 00 87 a8 c7 14 f4 .>.1.P..?....... 1370: 40 0c 7c 2e a1 0d ff 96 c1 8e 03 87 74 6a 8f 28 @.|.........tj.( 1380: 80 29 79 47 14 50 8c 14 d6 f1 04 18 05 3c 9b a0 .)yG.P.......<.. 1390: 22 1d 4f 80 ce ff ff 78 02 58 b8 9a bc 92 84 7d ".O....x.X.....} 13a0: 1e 78 1d 89 14 e3 41 e2 b5 e4 c1 24 46 98 08 8f .x....A....$F... 13b0: 27 1e 47 c0 b7 82 28 91 8e 3e c4 83 49 28 63 3e '.G...(..>..I(c> 13c0: a3 84 89 f9 04 70 22 ef 27 46 0a 73 2a 8f 27 2c .....p".'F.s*.', 13d0: c4 f1 04 a0 85 e2 e3 09 3a 2c 84 fe ff c7 13 dc ........:,...... 13e0: e1 c1 a7 0c fc 85 0c c6 f9 04 30 24 f0 7c 02 ca ..........0$.|.. 13f0: db 18 e6 80 02 8c 14 da f4 a9 d1 a8 55 83 32 35 ............U.25 1400: ca 34 a8 d5 a7 52 63 c6 4c 9c 52 bc 6c 8d df f2 .4...Rc.L.R.l... 1410: 9e 09 02 b1 20 0a 81 38 cc f3 42 20 96 a2 01 84 .... ..8..B .... 1420: 85 06 a1 42 a9 05 e2 98 20 34 92 0a 10 f6 ff 07 ...B.... 4...... 1430: 5b 82 1b 4c 49 44 30 08 5f 48 49 44 0c 41 d0 0c [..LID0._HID.A.. 1440: 0d 14 0b 5f 4c 49 44 00 a4 4c 50 4f 4c 5b 82 0f ..._LID..LPOL[.. 1450: 50 57 52 42 08 5f 48 49 44 0c 41 d0 0c 0c 5b 82 PWRB._HID.A...[. 1460: 84 b9 04 50 43 49 30 14 09 5f 53 33 44 00 a4 0a ...PCI0.._S3D... 1470: 02 14 09 5f 53 34 44 00 a4 0a 02 08 5f 48 49 44 ..._S4D....._HID 1480: 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 d0 0a 03 5b .A...._CID.A...[ 1490: 82 43 0e 4d 43 48 43 08 5f 41 44 52 00 5b 80 48 .C.MCHC._ADR.[.H 14a0: 42 55 53 02 0a 40 0a c0 5b 81 4a 0c 48 42 55 53 BUS..@..[.J.HBUS 14b0: 03 45 50 45 4e 01 00 0b 45 50 42 52 14 00 20 4d .EPEN...EPBR.. M 14c0: 48 45 4e 01 00 0d 4d 48 42 52 12 00 40 0a 50 58 HEN...MHBR..@.PX 14d0: 45 4e 01 50 58 53 5a 02 00 17 50 58 42 52 06 00 EN.PXSZ...PXBR.. 14e0: 20 44 49 45 4e 01 00 0b 44 49 42 52 14 00 20 49 DIEN...DIBR.. I 14f0: 50 45 4e 01 00 0b 49 50 42 52 14 00 40 0e 00 04 PEN...IPBR..@... 1500: 50 4d 30 48 02 00 02 50 4d 31 4c 02 00 02 50 4d PM0H...PM1L...PM 1510: 31 48 02 00 02 50 4d 32 4c 02 00 02 50 4d 32 48 1H...PM2L...PM2H 1520: 02 00 02 50 4d 33 4c 02 00 02 50 4d 33 48 02 00 ...PM3L...PM3H.. 1530: 02 50 4d 34 4c 02 00 02 50 4d 34 48 02 00 02 50 .PM4L...PM4H...P 1540: 4d 35 4c 02 00 02 50 4d 35 48 02 00 02 50 4d 36 M5L...PM5H...PM6 1550: 4c 02 00 02 50 4d 36 48 02 00 02 00 07 48 45 4e L...PM6H.....HEN 1560: 41 01 00 40 05 54 55 55 44 10 00 40 06 00 04 54 A..@.TUUD..@...T 1570: 4c 55 44 0c 08 42 55 46 30 11 4d 20 0b 08 02 88 LUD..BUF0.M .... 1580: 0d 00 02 0c 00 00 00 00 00 ff 00 00 00 00 01 87 ................ 1590: 17 00 01 0c 03 00 00 00 00 00 00 00 00 f7 0c 00 ................ 15a0: 00 00 00 00 00 f8 0c 00 00 47 01 f8 0c f8 0c 01 .........G...... 15b0: 08 87 17 00 01 0c 03 00 00 00 00 00 0d 00 00 ff ................ 15c0: ff 00 00 00 00 00 00 00 f3 00 00 87 17 00 00 0c ................ 15d0: 03 00 00 00 00 00 00 0a 00 ff ff 0b 00 00 00 00 ................ 15e0: 00 00 00 02 00 87 17 00 00 0c 03 00 00 00 00 00 ................ 15f0: 00 0c 00 ff 3f 0c 00 00 00 00 00 00 40 00 00 87 ....?.......@... 1600: 17 00 00 0c 03 00 00 00 00 00 40 0c 00 ff 7f 0c ..........@..... 1610: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 1620: 00 00 00 00 80 0c 00 ff bf 0c 00 00 00 00 00 00 ................ 1630: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0c @............... 1640: 00 ff ff 0c 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1650: 00 0c 03 00 00 00 00 00 00 0d 00 ff 3f 0d 00 00 ............?... 1660: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1670: 00 00 40 0d 00 ff 7f 0d 00 00 00 00 00 00 40 00 ..@...........@. 1680: 00 87 17 00 00 0c 03 00 00 00 00 00 80 0d 00 ff ................ 1690: bf 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c ........@....... 16a0: 03 00 00 00 00 00 c0 0d 00 ff ff 0d 00 00 00 00 ................ 16b0: 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 ..@............. 16c0: 00 0e 00 ff 3f 0e 00 00 00 00 00 00 40 00 00 87 ....?.......@... 16d0: 17 00 00 0c 03 00 00 00 00 00 40 0e 00 ff 7f 0e ..........@..... 16e0: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 16f0: 00 00 00 00 80 0e 00 ff bf 0e 00 00 00 00 00 00 ................ 1700: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0e @............... 1710: 00 ff ff 0e 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1720: 00 0c 03 00 00 00 00 00 00 0f 00 ff ff 0f 00 00 ................ 1730: 00 00 00 00 00 01 00 87 17 00 00 0c 03 00 00 00 ................ 1740: 00 00 00 00 00 ff ff ff df 00 00 00 00 00 00 00 ................ 1750: 00 87 17 00 00 0c 03 00 00 00 00 00 00 00 f0 ff ................ 1760: ff bf fe 00 00 00 00 00 00 c0 0e 87 17 00 00 0c ................ 1770: 03 00 00 00 00 00 00 d4 fe ff 4f d4 fe 00 00 00 ..........O..... 1780: 00 00 00 00 00 79 00 14 4b 3d 5f 43 52 53 08 a0 .....y..K=_CRS.. 1790: 1c 5e 2e 4d 43 48 43 50 4d 31 4c 8a 42 55 46 30 .^.MCHCPM1L.BUF0 17a0: 0a 7c 43 30 4c 4e 70 00 43 30 4c 4e a0 1f 93 5e .|C0LNp.C0LN...^ 17b0: 2e 4d 43 48 43 50 4d 31 4c 01 8d 42 55 46 30 0b .MCHCPM1L..BUF0. 17c0: 58 03 43 30 52 57 70 00 43 30 52 57 a0 1c 5e 2e X.C0RWp.C0RW..^. 17d0: 4d 43 48 43 50 4d 31 48 8a 42 55 46 30 0a 96 43 MCHCPM1H.BUF0..C 17e0: 34 4c 4e 70 00 43 34 4c 4e a0 1f 93 5e 2e 4d 43 4LNp.C4LN...^.MC 17f0: 48 43 50 4d 31 48 01 8d 42 55 46 30 0b 28 04 43 HCPM1H..BUF0.(.C 1800: 34 52 57 70 00 43 34 52 57 a0 1c 5e 2e 4d 43 48 4RWp.C4RW..^.MCH 1810: 43 50 4d 32 4c 8a 42 55 46 30 0a b0 43 38 4c 4e CPM2L.BUF0..C8LN 1820: 70 00 43 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 p.C8LN...^.MCHCP 1830: 4d 32 4c 01 8d 42 55 46 30 0b f8 04 43 38 52 57 M2L..BUF0...C8RW 1840: 70 00 43 38 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d p.C8RW..^.MCHCPM 1850: 32 48 8a 42 55 46 30 0a ca 43 43 4c 4e 70 00 43 2H.BUF0..CCLNp.C 1860: 43 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 32 48 CLN...^.MCHCPM2H 1870: 01 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 43 ..BUF0...CCRWp.C 1880: 43 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d 33 4c 8a CRW..^.MCHCPM3L. 1890: 42 55 46 30 0a e4 44 30 4c 4e 70 00 44 30 4c 4e BUF0..D0LNp.D0LN 18a0: a0 1f 93 5e 2e 4d 43 48 43 50 4d 33 4c 01 8d 42 ...^.MCHCPM3L..B 18b0: 55 46 30 0b 98 06 44 30 52 57 70 00 44 30 52 57 UF0...D0RWp.D0RW 18c0: a0 1c 5e 2e 4d 43 48 43 50 4d 33 48 8a 42 55 46 ..^.MCHCPM3H.BUF 18d0: 30 0a fe 44 34 4c 4e 70 00 44 34 4c 4e a0 1f 93 0..D4LNp.D4LN... 18e0: 5e 2e 4d 43 48 43 50 4d 33 48 01 8d 42 55 46 30 ^.MCHCPM3H..BUF0 18f0: 0b 68 07 44 34 52 57 70 00 44 34 52 57 a0 1d 5e .h.D4RWp.D4RW..^ 1900: 2e 4d 43 48 43 50 4d 34 4c 8a 42 55 46 30 0b 18 .MCHCPM4L.BUF0.. 1910: 01 44 38 4c 4e 70 00 44 38 4c 4e a0 1f 93 5e 2e .D8LNp.D8LN...^. 1920: 4d 43 48 43 50 4d 34 4c 01 8d 42 55 46 30 0b 38 MCHCPM4L..BUF0.8 1930: 08 44 38 52 57 70 00 44 38 52 57 a0 1d 5e 2e 4d .D8RWp.D8RW..^.M 1940: 43 48 43 50 4d 34 48 8a 42 55 46 30 0b 32 01 44 CHCPM4H.BUF0.2.D 1950: 43 4c 4e 70 00 44 43 4c 4e a0 1f 93 5e 2e 4d 43 CLNp.DCLN...^.MC 1960: 48 43 50 4d 34 48 01 8d 42 55 46 30 0b 08 09 44 HCPM4H..BUF0...D 1970: 43 52 57 70 00 44 43 52 57 a0 1d 5e 2e 4d 43 48 CRWp.DCRW..^.MCH 1980: 43 50 4d 35 4c 8a 42 55 46 30 0b 4c 01 45 30 4c CPM5L.BUF0.L.E0L 1990: 4e 70 00 45 30 4c 4e a0 1f 93 5e 2e 4d 43 48 43 Np.E0LN...^.MCHC 19a0: 50 4d 35 4c 01 8d 42 55 46 30 0b d8 09 45 30 52 PM5L..BUF0...E0R 19b0: 57 70 00 45 30 52 57 a0 1d 5e 2e 4d 43 48 43 50 Wp.E0RW..^.MCHCP 19c0: 4d 35 48 8a 42 55 46 30 0b 66 01 45 34 4c 4e 70 M5H.BUF0.f.E4LNp 19d0: 00 45 34 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d .E4LN...^.MCHCPM 19e0: 35 48 01 8d 42 55 46 30 0b a8 0a 45 34 52 57 70 5H..BUF0...E4RWp 19f0: 00 45 34 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 .E4RW..^.MCHCPM6 1a00: 4c 8a 42 55 46 30 0b 80 01 45 38 4c 4e 70 00 45 L.BUF0...E8LNp.E 1a10: 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 4c 8LN...^.MCHCPM6L 1a20: 01 8d 42 55 46 30 0b 78 0b 45 38 52 57 70 00 45 ..BUF0.x.E8RWp.E 1a30: 38 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 48 8a 8RW..^.MCHCPM6H. 1a40: 42 55 46 30 0b 9a 01 45 43 4c 4e 70 00 45 43 4c BUF0...ECLNp.ECL 1a50: 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 48 01 8d N...^.MCHCPM6H.. 1a60: 42 55 46 30 0b 48 0c 45 43 52 57 70 00 45 43 52 BUF0.H.ECRWp.ECR 1a70: 57 a0 1d 5e 2e 4d 43 48 43 50 4d 30 48 8a 42 55 W..^.MCHCPM0H.BU 1a80: 46 30 0b b4 01 46 30 4c 4e 70 00 46 30 4c 4e a0 F0...F0LNp.F0LN. 1a90: 1f 93 5e 2e 4d 43 48 43 50 4d 30 48 01 8d 42 55 ..^.MCHCPM0H..BU 1aa0: 46 30 0b 18 0d 46 30 52 57 70 00 46 30 52 57 8a F0...F0RWp.F0RW. 1ab0: 42 55 46 30 0b c2 01 4d 31 4d 4e 8a 42 55 46 30 BUF0...M1MN.BUF0 1ac0: 0b c6 01 4d 31 4d 58 8a 42 55 46 30 0b ce 01 4d ...M1MX.BUF0...M 1ad0: 31 4c 4e 8a 42 55 46 30 0b dc 01 4d 32 4d 4e 8a 1LN.BUF0...M2MN. 1ae0: 42 55 46 30 0b e0 01 4d 32 4d 58 8a 42 55 46 30 BUF0...M2MX.BUF0 1af0: 0b e8 01 4d 32 4c 4e 79 5e 2e 4d 43 48 43 50 58 ...M2LNy^.MCHCPX 1b00: 42 52 0a 1a 4d 31 4d 58 7a 0c 00 00 00 10 5e 2e BR..M1MXz.....^. 1b10: 4d 43 48 43 50 58 53 5a 60 72 4d 31 4d 58 60 4d MCHCPXSZ`rM1MX`M 1b20: 32 4d 4e 72 74 4d 32 4d 58 4d 32 4d 4e 00 01 4d 2MNrtM2MXM2MN..M 1b30: 32 4c 4e 74 4d 31 4d 58 01 4d 31 4d 58 79 5e 2e 2LNtM1MX.M1MXy^. 1b40: 4d 43 48 43 54 4c 55 44 0a 14 4d 31 4d 4e 72 74 MCHCTLUD..M1MNrt 1b50: 4d 31 4d 58 4d 31 4d 4e 00 01 4d 31 4c 4e a4 42 M1MXM1MN..M1LN.B 1b60: 55 46 30 14 47 28 5f 50 52 54 00 a0 45 0f 47 50 UF0.G(_PRT..E.GP 1b70: 49 43 a4 12 4d 0e 13 12 0b 04 0c ff ff 01 00 00 IC..M........... 1b80: 00 0a 10 12 0b 04 0c ff ff 02 00 00 00 0a 10 12 ................ 1b90: 0b 04 0c ff ff 07 00 00 00 0a 10 12 0b 04 0c ff ................ 1ba0: ff 19 00 00 00 0a 14 12 0b 04 0c ff ff 1a 00 00 ................ 1bb0: 00 0a 10 12 0b 04 0c ff ff 1a 00 01 00 0a 15 12 ................ 1bc0: 0c 04 0c ff ff 1a 00 0a 02 00 0a 12 12 0b 04 0c ................ 1bd0: ff ff 1b 00 00 00 0a 16 12 0b 04 0c ff ff 1c 00 ................ 1be0: 00 00 0a 11 12 0b 04 0c ff ff 1c 00 01 00 0a 10 ................ 1bf0: 12 0c 04 0c ff ff 1c 00 0a 02 00 0a 12 12 0c 04 ................ 1c00: 0c ff ff 1c 00 0a 03 00 0a 13 12 0b 04 0c ff ff ................ 1c10: 1d 00 00 00 0a 17 12 0b 04 0c ff ff 1d 00 01 00 ................ 1c20: 0a 13 12 0c 04 0c ff ff 1d 00 0a 02 00 0a 12 12 ................ 1c30: 0b 04 0c ff ff 1f 00 00 00 0a 13 12 0b 04 0c ff ................ 1c40: ff 1f 00 01 00 0a 13 12 0c 04 0c ff ff 1f 00 0a ................ 1c50: 02 00 0a 13 12 0c 04 0c ff ff 1f 00 0a 03 00 0a ................ 1c60: 10 a1 49 18 a4 12 45 18 13 12 13 04 0c ff ff 01 ..I...E......... 1c70: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1c80: 0c ff ff 02 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 ......^.LPCBLNKA 1c90: 00 12 13 04 0c ff ff 07 00 00 5e 2e 4c 50 43 42 ..........^.LPCB 1ca0: 4c 4e 4b 41 00 12 13 04 0c ff ff 19 00 00 5e 2e LNKA..........^. 1cb0: 4c 50 43 42 4c 4e 4b 45 00 12 13 04 0c ff ff 1a LPCBLNKE........ 1cc0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1cd0: 0c ff ff 1a 00 01 5e 2e 4c 50 43 42 4c 4e 4b 46 ......^.LPCBLNKF 1ce0: 00 12 14 04 0c ff ff 1a 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1cf0: 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1b 00 00 5e BLNKC..........^ 1d00: 2e 4c 50 43 42 4c 4e 4b 47 00 12 13 04 0c ff ff .LPCBLNKG....... 1d10: 1c 00 00 5e 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 ...^.LPCBLNKB... 1d20: 04 0c ff ff 1c 00 01 5e 2e 4c 50 43 42 4c 4e 4b .......^.LPCBLNK 1d30: 41 00 12 14 04 0c ff ff 1c 00 0a 02 5e 2e 4c 50 A...........^.LP 1d40: 43 42 4c 4e 4b 43 00 12 14 04 0c ff ff 1c 00 0a CBLNKC.......... 1d50: 03 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0c .^.LPCBLNKD..... 1d60: ff ff 1d 00 00 5e 2e 4c 50 43 42 4c 4e 4b 48 00 .....^.LPCBLNKH. 1d70: 12 13 04 0c ff ff 1d 00 01 5e 2e 4c 50 43 42 4c .........^.LPCBL 1d80: 4e 4b 44 00 12 14 04 0c ff ff 1d 00 0a 02 5e 2e NKD...........^. 1d90: 4c 50 43 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1f LPCBLNKC........ 1da0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 ..^.LPCBLNKD.... 1db0: 0c ff ff 1f 00 01 5e 2e 4c 50 43 42 4c 4e 4b 44 ......^.LPCBLNKD 1dc0: 00 12 14 04 0c ff ff 1f 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1dd0: 42 4c 4e 4b 44 00 12 14 04 0c ff ff 1f 00 0a 03 BLNKD........... 1de0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 40 14 50 ^.LPCBLNKA.[.@.P 1df0: 44 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 DRC._HID.A...._U 1e00: 49 44 01 08 42 55 46 30 11 46 06 0a 62 86 09 00 ID..BUF0.F..b... 1e10: 01 00 00 00 00 00 40 00 00 86 09 00 01 00 00 00 ......@......... 1e20: 00 00 40 00 00 86 09 00 01 00 00 00 00 00 10 00 ..@............. 1e30: 00 86 09 00 01 00 00 00 00 00 10 00 00 86 09 00 ................ 1e40: 01 00 00 00 00 00 00 00 00 86 09 00 01 00 00 d2 ................ 1e50: fe 00 00 02 00 86 09 00 01 00 00 d4 fe 00 50 00 ..............P. 1e60: 00 86 09 00 01 00 50 d4 fe 00 b0 04 00 79 00 14 ......P......y.. 1e70: 4d 0b 5f 43 52 53 08 8a 42 55 46 30 0a 04 52 42 M._CRS..BUF0..RB 1e80: 52 30 79 5e 5e 2e 4c 50 43 42 52 43 42 41 0a 0e R0y^^.LPCBRCBA.. 1e90: 52 42 52 30 8a 42 55 46 30 0a 10 4d 42 52 30 79 RBR0.BUF0..MBR0y 1ea0: 5e 5e 2e 4d 43 48 43 4d 48 42 52 0a 0e 4d 42 52 ^^.MCHCMHBR..MBR 1eb0: 30 8a 42 55 46 30 0a 1c 44 42 52 30 79 5e 5e 2e 0.BUF0..DBR0y^^. 1ec0: 4d 43 48 43 44 49 42 52 0a 0c 44 42 52 30 8a 42 MCHCDIBR..DBR0.B 1ed0: 55 46 30 0a 28 45 42 52 30 79 5e 5e 2e 4d 43 48 UF0.(EBR0y^^.MCH 1ee0: 43 45 50 42 52 0a 0c 45 42 52 30 8a 42 55 46 30 CEPBR..EBR0.BUF0 1ef0: 0a 34 58 42 52 30 79 5e 5e 2e 4d 43 48 43 50 58 .4XBR0y^^.MCHCPX 1f00: 42 52 0a 1a 58 42 52 30 8a 42 55 46 30 0a 38 58 BR..XBR0.BUF0.8X 1f10: 53 5a 30 7a 0c 00 00 00 10 5e 5e 2e 4d 43 48 43 SZ0z.....^^.MCHC 1f20: 50 58 53 5a 58 53 5a 30 a4 42 55 46 30 5b 82 4d PXSZXSZ0.BUF0[.M 1f30: 50 50 45 47 50 08 5f 41 44 52 0c 00 00 01 00 14 PPEGP._ADR...... 1f40: 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 2c A._PRT..3GPIC.., 1f50: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 1f60: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 1f70: 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 12 ............E... 1f80: 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 43 A.........^^.LPC 1f90: 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e 2e BLNKA........^^. 1fa0: 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff 0a LPCBLNKB........ 1fb0: 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 1fc0: 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 1fd0: 00 5b 82 49 46 56 47 41 5f 08 5f 41 44 52 00 08 .[.IFVGA_._ADR.. 1fe0: 53 57 49 54 01 08 43 52 54 41 01 08 4c 43 44 41 SWIT..CRTA..LCDA 1ff0: 01 08 54 56 41 41 01 08 56 4c 44 46 01 5b 80 56 ..TVAA..VLDF.[.V 2000: 49 44 53 02 00 0a c8 5b 81 0b 56 49 44 53 03 56 IDS....[..VIDS.V 2010: 44 49 44 20 14 09 5f 53 54 41 00 a4 0a 0f 08 5f DID .._STA....._ 2020: 50 53 43 00 14 0c 5f 50 53 30 00 70 00 5f 50 53 PSC..._PS0.p._PS 2030: 43 14 0c 5f 50 53 31 00 70 01 5f 50 53 43 14 0d C.._PS1.p._PSC.. 2040: 5f 50 53 33 00 70 0a 03 5f 50 53 43 14 10 5f 44 _PS3.p.._PSC.._D 2050: 4f 53 01 70 7b 68 0a 03 00 53 57 49 54 14 17 5f OS.p{h...SWIT.._ 2060: 44 4f 44 00 a4 12 0f 03 0c 00 01 01 00 0c 10 01 DOD............. 2070: 01 00 0b 00 02 5b 82 4d 08 43 52 54 5f 14 0a 5f .....[.M.CRT_.._ 2080: 41 44 52 00 a4 0b 00 01 14 41 06 5f 44 43 53 00 ADR......A._DCS. 2090: 5e 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 ^^^^.LPCBPHSS..p 20a0: 43 41 44 4c 60 70 43 53 54 45 61 7b 60 0a 02 60 CADL`pCSTEa{`..` 20b0: 7b 61 0a 02 61 a0 08 60 70 01 43 52 54 41 a1 07 {a..a..`p.CRTA.. 20c0: 70 00 43 52 54 41 a0 13 43 52 54 41 a0 08 93 61 p.CRTA..CRTA...a 20d0: 0a 02 a4 0a 1f a1 04 a4 0a 1d a1 0f a0 08 93 61 ...............a 20e0: 0a 02 a4 0a 0f a1 04 a4 0a 0d 14 12 5f 44 47 53 ............_DGS 20f0: 00 a0 07 43 52 54 41 a4 01 a1 03 a4 00 14 06 5f ...CRTA........_ 2100: 44 53 53 01 5b 82 47 0e 4c 43 44 5f 14 0a 5f 41 DSS.[.G.LCD_.._A 2110: 44 52 00 a4 0b 10 01 14 4d 05 5f 44 43 53 00 5e DR......M._DCS.^ 2120: 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 ^^^.LPCBPHSS..pC 2130: 41 44 4c 60 70 43 53 54 45 61 7b 60 01 60 7b 61 ADL`pCSTEa{`.`{a 2140: 01 61 a0 08 60 70 01 4c 43 44 41 a1 07 70 00 4c .a..`p.LCDA..p.L 2150: 43 44 41 a0 12 4c 43 44 41 a0 07 93 61 01 a4 0a CDA..LCDA...a... 2160: 1f a1 04 a4 0a 1d a1 0e a0 07 93 61 01 a4 0a 0f ...........a.... 2170: a1 04 a4 0a 0d 14 12 5f 44 47 53 00 a0 07 4c 43 ......._DGS...LC 2180: 44 41 a4 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 DA........_DSS.. 2190: 1d 5f 42 43 4c 00 a4 12 15 0a 0a 46 0a 28 00 0a ._BCL......F.(.. 21a0: 0a 0a 14 0a 1e 0a 28 0a 32 0a 3c 0a 46 14 20 5f ......(.2.<.F. _ 21b0: 42 43 4d 01 78 68 0a 0a 60 61 70 61 5e 5e 5e 5e BCM.xh..`apa^^^^ 21c0: 2f 03 4c 50 43 42 45 43 30 5f 42 52 54 53 14 1e /.LPCBEC0_BRTS.. 21d0: 5f 42 51 43 00 77 5e 5e 5e 5e 2f 03 4c 50 43 42 _BQC.w^^^^/.LPCB 21e0: 45 43 30 5f 42 52 54 53 0a 0a 60 a4 60 5b 82 4d EC0_BRTS..`.`[.M 21f0: 08 54 56 5f 5f 14 0a 5f 41 44 52 00 a4 0b 00 02 .TV__.._ADR..... 2200: 14 41 06 5f 44 43 53 00 5e 5e 5e 5e 2e 4c 50 43 .A._DCS.^^^^.LPC 2210: 42 50 48 53 53 0a 0c 70 43 41 44 4c 60 70 43 53 BPHSS..pCADL`pCS 2220: 54 45 61 7b 60 0a 04 60 7b 61 0a 04 61 a0 08 60 TEa{`..`{a..a..` 2230: 70 01 54 56 41 41 a1 07 70 00 54 56 41 41 a0 13 p.TVAA..p.TVAA.. 2240: 54 56 41 41 a0 08 93 61 0a 04 a4 0a 1f a1 04 a4 TVAA...a........ 2250: 0a 1d a1 0f a0 08 93 61 0a 04 a4 0a 0f a1 04 a4 .......a........ 2260: 0a 0d 14 12 5f 44 47 53 00 a0 07 54 56 41 41 a4 ...._DGS...TVAA. 2270: 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 49 10 44 ......._DSS..I.D 2280: 53 53 57 00 a0 4a 0e 93 53 57 49 54 00 5e 5e 5e SSW..J..SWIT.^^^ 2290: 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 41 44 4c .LPCBPHSS..pCADL 22a0: 60 70 43 53 54 45 61 a0 16 94 61 01 7b 60 61 56 `pCSTEa...a.{`aV 22b0: 4c 44 46 7b 56 4c 44 46 0a fe 56 4c 44 46 a0 43 LDF{VLDF..VLDF.C 22c0: 0a 56 4c 44 46 a0 27 93 60 0a 09 a0 0b 93 61 0a .VLDF.'.`.....a. 22d0: 08 53 54 42 4c 0a 02 a0 0a 93 61 01 53 54 42 4c .STBL.....a.STBL 22e0: 0a 03 a0 0a 93 61 0a 09 53 54 42 4c 01 a0 28 93 .....a..STBL..(. 22f0: 60 0a 0a a0 0b 93 61 0a 08 53 54 42 4c 0a 05 a0 `.....a..STBL... 2300: 0a 93 61 0a 02 53 54 42 4c 01 a0 0b 93 61 0a 0a ..a..STBL....a.. 2310: 53 54 42 4c 0a 04 a0 4b 04 93 60 0a 0b a0 0b 93 STBL...K..`..... 2320: 61 0a 08 53 54 42 4c 0a 02 a0 0b 93 61 0a 09 53 a..STBL.....a..S 2330: 54 42 4c 0a 05 a0 0a 93 61 01 53 54 42 4c 0a 03 TBL.....a.STBL.. 2340: a0 0b 93 61 0a 0a 53 54 42 4c 0a 04 a0 0a 93 61 ...a..STBL.....a 2350: 0a 02 53 54 42 4c 01 a0 0a 93 61 0a 0b 53 54 42 ..STBL....a..STB 2360: 4c 01 a1 0c 70 01 56 4c 44 46 53 54 42 4c 01 a1 L...p.VLDFSTBL.. 2370: 16 a0 14 93 53 57 49 54 01 5e 5e 5e 2e 4c 50 43 ....SWIT.^^^.LPC 2380: 42 50 48 53 53 01 14 45 0b 53 54 42 4c 01 a0 16 BPHSS..E.STBL... 2390: 93 68 01 70 00 43 52 54 41 70 01 4c 43 44 41 70 .h.p.CRTAp.LCDAp 23a0: 00 54 56 41 41 a0 17 93 68 0a 02 70 01 43 52 54 .TVAA...h..p.CRT 23b0: 41 70 00 4c 43 44 41 70 00 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23c0: 68 0a 03 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 23d0: 00 54 56 41 41 a0 17 93 68 0a 04 70 00 43 52 54 .TVAA...h..p.CRT 23e0: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23f0: 68 0a 05 70 00 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2400: 01 54 56 41 41 a0 17 93 68 0a 06 70 01 43 52 54 .TVAA...h..p.CRT 2410: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 2420: 68 0a 07 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2430: 01 54 56 41 41 86 56 47 41 5f 0a 80 5b 82 42 f8 .TVAA.VGA_..[.B. 2440: 47 46 58 30 08 5f 41 44 52 0c 00 00 02 00 14 10 GFX0._ADR....... 2450: 5f 44 4f 53 01 70 7b 68 0a 07 00 44 53 45 4e 14 _DOS.p{h...DSEN. 2460: 41 26 5f 44 4f 44 00 70 00 4e 44 49 44 a0 15 92 A&_DOD.p.NDID... 2470: 93 44 49 44 4c 00 70 53 44 44 4c 44 49 44 31 44 .DIDL.pSDDLDID1D 2480: 49 44 31 a0 15 92 93 44 44 4c 32 00 70 53 44 44 ID1....DDL2.pSDD 2490: 4c 44 49 44 32 44 49 44 32 a0 15 92 93 44 44 4c LDID2DID2....DDL 24a0: 33 00 70 53 44 44 4c 44 49 44 33 44 49 44 33 a0 3.pSDDLDID3DID3. 24b0: 15 92 93 44 44 4c 34 00 70 53 44 44 4c 44 49 44 ...DDL4.pSDDLDID 24c0: 34 44 49 44 34 a0 15 92 93 44 44 4c 35 00 70 53 4DID4....DDL5.pS 24d0: 44 44 4c 44 49 44 35 44 49 44 35 a0 2c 93 4e 44 DDLDID5DID5.,.ND 24e0: 49 44 01 08 54 4d 50 31 12 07 01 0c ff ff ff ff ID..TMP1........ 24f0: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2500: 31 00 00 a4 54 4d 50 31 a0 46 04 93 4e 44 49 44 1...TMP1.F..NDID 2510: 0a 02 08 54 4d 50 32 12 0c 02 0c ff ff ff ff 0c ...TMP2......... 2520: ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 ....p}.....DID1. 2530: 88 54 4d 50 32 00 00 70 7d 0c 00 00 01 00 44 49 .TMP2..p}.....DI 2540: 44 32 00 88 54 4d 50 32 01 00 a4 54 4d 50 32 a0 D2..TMP2...TMP2. 2550: 4f 05 93 4e 44 49 44 0a 03 08 54 4d 50 33 12 11 O..NDID...TMP3.. 2560: 03 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 2570: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2580: 33 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 3..p}.....DID2.. 2590: 54 4d 50 33 01 00 70 7d 0c 00 00 01 00 44 49 44 TMP3..p}.....DID 25a0: 33 00 88 54 4d 50 33 0a 02 00 a4 54 4d 50 33 a0 3..TMP3....TMP3. 25b0: 48 07 93 4e 44 49 44 0a 04 08 54 4d 50 34 12 16 H..NDID...TMP4.. 25c0: 04 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 25d0: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 25e0: 00 88 54 4d 50 34 00 00 70 7d 0c 00 00 01 00 44 ..TMP4..p}.....D 25f0: 49 44 32 00 88 54 4d 50 34 01 00 70 7d 0c 00 00 ID2..TMP4..p}... 2600: 01 00 44 49 44 33 00 88 54 4d 50 34 0a 02 00 70 ..DID3..TMP4...p 2610: 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d 50 34 }.....DID4..TMP4 2620: 0a 03 00 a4 54 4d 50 34 a0 41 09 94 4e 44 49 44 ....TMP4.A..NDID 2630: 0a 04 08 54 4d 50 35 12 1b 05 0c ff ff ff ff 0c ...TMP5......... 2640: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 2650: ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 88 ...p}.....DID1.. 2660: 54 4d 50 35 00 00 70 7d 0c 00 00 01 00 44 49 44 TMP5..p}.....DID 2670: 32 00 88 54 4d 50 35 01 00 70 7d 0c 00 00 01 00 2..TMP5..p}..... 2680: 44 49 44 33 00 88 54 4d 50 35 0a 02 00 70 7d 0c DID3..TMP5...p}. 2690: 00 00 01 00 44 49 44 34 00 88 54 4d 50 35 0a 03 ....DID4..TMP5.. 26a0: 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d .p}.....DID4..TM 26b0: 50 35 0a 04 00 a4 54 4d 50 35 a4 12 05 01 0b 00 P5....TMP5...... 26c0: 04 5b 82 43 06 44 44 30 31 14 1c 5f 41 44 52 08 .[.C.DD01.._ADR. 26d0: a0 09 93 44 49 44 31 00 a4 01 a1 0b a4 7b 0b ff ...DID1......{.. 26e0: ff 44 49 44 31 00 14 0f 5f 44 43 53 00 a4 43 44 .DID1..._DCS..CD 26f0: 44 53 44 49 44 31 14 0f 5f 44 47 53 00 a4 4e 44 DSDID1.._DGS..ND 2700: 44 53 44 49 44 31 14 1f 5f 44 53 53 01 a0 18 93 DSDID1.._DSS.... 2710: 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 {h...........pNS 2720: 54 45 43 53 54 45 5b 82 44 06 44 44 30 32 14 1d TECSTE[.D.DD02.. 2730: 5f 41 44 52 08 a0 0a 93 44 49 44 32 00 a4 0a 02 _ADR....DID2.... 2740: a1 0b a4 7b 0b ff ff 44 49 44 32 00 14 0f 5f 44 ...{...DID2..._D 2750: 43 53 00 a4 43 44 44 53 44 49 44 32 14 0f 5f 44 CS..CDDSDID2.._D 2760: 47 53 00 a4 4e 44 44 53 44 49 44 32 14 1f 5f 44 GS..NDDSDID2.._D 2770: 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 SS....{h........ 2780: 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 41 07 ...pNSTECSTE[.A. 2790: 44 44 30 33 14 1d 5f 41 44 52 08 a0 0a 93 44 49 DD03.._ADR....DI 27a0: 44 33 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 49 44 D3.......{...DID 27b0: 33 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 33 3..._DCS....DID3 27c0: 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 33 14 .......CDDSDID3. 27d0: 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 44 33 14 ._DGS..NDDSDID3. 27e0: 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 ._DSS....{h..... 27f0: 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 5b ......pNSTECSTE[ 2800: 82 41 07 44 44 30 34 14 1d 5f 41 44 52 08 a0 0a .A.DD04.._ADR... 2810: 93 44 49 44 34 00 a4 0a 04 a1 0b a4 7b 0b ff ff .DID4.......{... 2820: 44 49 44 34 00 14 1c 5f 44 43 53 00 a0 0a 93 44 DID4..._DCS....D 2830: 49 44 34 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 ID4.......CDDSDI 2840: 44 34 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 D4.._DGS..NDDSDI 2850: 44 34 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 D4.._DSS....{h.. 2860: 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 .........pNSTECS 2870: 54 45 5b 82 41 07 44 44 30 35 14 1d 5f 41 44 52 TE[.A.DD05.._ADR 2880: 08 a0 0a 93 44 49 44 35 00 a4 0a 05 a1 0b a4 7b ....DID5.......{ 2890: 0b ff ff 44 49 44 35 00 14 1c 5f 44 43 53 00 a0 ...DID5..._DCS.. 28a0: 0a 93 44 49 44 35 00 a4 0a 0b a1 0a a4 43 44 44 ..DID5.......CDD 28b0: 53 44 49 44 35 14 0f 5f 44 47 53 00 a4 4e 44 44 SDID5.._DGS..NDD 28c0: 53 44 49 44 35 14 1f 5f 44 53 53 01 a0 18 93 7b SDID5.._DSS....{ 28d0: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 28e0: 45 43 53 54 45 14 4e 06 53 44 44 4c 01 75 4e 44 ECSTE.N.SDDL.uND 28f0: 49 44 70 7b 68 0b 0f 0f 00 60 7d 0c 00 00 00 80 IDp{h....`}..... 2900: 60 61 a0 09 93 44 49 44 4c 60 a4 61 a0 09 93 44 `a...DIDL`.a...D 2910: 44 4c 32 60 a4 61 a0 09 93 44 44 4c 33 60 a4 61 DL2`.a...DDL3`.a 2920: a0 09 93 44 44 4c 34 60 a4 61 a0 09 93 44 44 4c ...DDL4`.a...DDL 2930: 35 60 a4 61 a0 09 93 44 44 4c 36 60 a4 61 a0 09 5`.a...DDL6`.a.. 2940: 93 44 44 4c 37 60 a4 61 a0 09 93 44 44 4c 38 60 .DDL7`.a...DDL8` 2950: a4 61 a4 00 14 4a 08 43 44 44 53 01 a0 0f 93 43 .a...J.CDDS....C 2960: 41 44 4c 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 ADL{h..........C 2970: 41 4c 32 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL2{h..........C 2980: 41 4c 33 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL3{h..........C 2990: 41 4c 34 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL4{h..........C 29a0: 41 4c 35 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL5{h..........C 29b0: 41 4c 36 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL6{h..........C 29c0: 41 4c 37 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL7{h..........C 29d0: 41 4c 38 7b 68 0b 0f 0f 00 a4 0a 1f a4 0a 1d 14 AL8{h........... 29e0: 41 08 4e 44 44 53 01 a0 0e 93 4e 41 44 4c 7b 68 A.NDDS....NADL{h 29f0: 0b 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 32 7b 68 0b .........NDL2{h. 2a00: 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 33 7b 68 0b 0f ........NDL3{h.. 2a10: 0f 00 a4 01 a0 0e 93 4e 44 4c 34 7b 68 0b 0f 0f .......NDL4{h... 2a20: 00 a4 01 a0 0e 93 4e 44 4c 35 7b 68 0b 0f 0f 00 ......NDL5{h.... 2a30: a4 01 a0 0e 93 4e 44 4c 36 7b 68 0b 0f 0f 00 a4 .....NDL6{h..... 2a40: 01 a0 0e 93 4e 44 4c 37 7b 68 0b 0f 0f 00 a4 01 ....NDL7{h...... 2a50: a0 0e 93 4e 44 4c 38 7b 68 0b 0f 0f 00 a4 01 a4 ...NDL8{h....... 2a60: 00 14 40 07 42 52 54 4e 09 a0 14 93 7b 44 49 44 ..@.BRTN....{DID 2a70: 31 0b 00 0f 00 0b 00 04 86 44 44 30 31 68 a0 14 1........DD01h.. 2a80: 93 7b 44 49 44 32 0b 00 0f 00 0b 00 04 86 44 44 .{DID2........DD 2a90: 30 32 68 a0 14 93 7b 44 49 44 33 0b 00 0f 00 0b 02h...{DID3..... 2aa0: 00 04 86 44 44 30 33 68 a0 14 93 7b 44 49 44 34 ...DD03h...{DID4 2ab0: 0b 00 0f 00 0b 00 04 86 44 44 30 34 68 a0 14 93 ........DD04h... 2ac0: 7b 44 49 44 35 0b 00 0f 00 0b 00 04 86 44 44 30 {DID5........DD0 2ad0: 35 68 10 24 5e 5e 50 43 49 30 5b 80 4d 43 48 50 5h.$^^PCI0[.MCHP 2ae0: 02 0a 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 ..@..[..MCHP..@0 2af0: 54 41 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 TASM...[.IGDP..@ 2b00: 0a c0 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 ..[.E.IGDP..@... 2b10: 47 49 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 GIVD...GUMA..... 2b20: 47 4d 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 GMFN....@FASLE.. 2b30: 18 47 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 .GSSE.GSSB.GSES. 2b40: 00 30 00 08 43 44 56 4c 05 00 03 00 18 4c 42 50 .0..CDVL.....LBP 2b50: 43 08 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 C..0ASLS [.IGDM. 2b60: 41 53 4c 42 0b 00 20 5b 81 4e 16 49 47 44 4d 00 ASLB.. [.N.IGDM. 2b70: 53 49 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 SIGN@.SIZE OVER 2b80: 53 56 45 52 40 10 56 56 45 52 40 08 47 56 45 52 SVER@.VVER@.GVER 2b90: 40 08 4d 42 4f 58 20 00 40 52 44 52 44 59 20 43 @.MBOX .@RDRDY C 2ba0: 53 54 53 20 43 45 56 54 20 00 40 0a 44 49 44 4c STS CEVT .@.DIDL 2bb0: 20 44 44 4c 32 20 44 44 4c 33 20 44 44 4c 34 20 DDL2 DDL3 DDL4 2bc0: 44 44 4c 35 20 44 44 4c 36 20 44 44 4c 37 20 44 DDL5 DDL6 DDL7 D 2bd0: 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 20 43 50 DL8 CPDL CPL2 CP 2be0: 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 43 50 4c L3 CPL4 CPL5 CPL 2bf0: 36 20 43 50 4c 37 20 43 50 4c 38 20 43 41 44 4c 6 CPL7 CPL8 CADL 2c00: 20 43 41 4c 32 20 43 41 4c 33 20 43 41 4c 34 20 CAL2 CAL3 CAL4 2c10: 43 41 4c 35 20 43 41 4c 36 20 43 41 4c 37 20 43 CAL5 CAL6 CAL7 C 2c20: 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 20 4e 44 AL8 NADL NDL2 ND 2c30: 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 4e 44 4c L3 NDL4 NDL5 NDL 2c40: 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 53 4c 50 6 NDL7 NDL8 ASLP 2c50: 20 54 49 44 58 20 43 48 50 44 20 43 4c 49 44 20 TIDX CHPD CLID 2c60: 43 44 43 4b 20 53 58 53 57 20 45 56 54 53 20 43 CDCK SXSW EVTS C 2c70: 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 43 49 45 NOT NRDY .@.SCIE 2c80: 01 47 45 46 43 04 47 58 46 43 03 47 45 53 46 08 .GEFC.GXFC.GESF. 2c90: 00 10 50 41 52 4d 20 44 53 4c 50 20 00 40 7a 41 ..PARM DSLP .@zA 2ca0: 52 44 59 20 41 53 4c 43 20 54 43 48 45 20 41 4c RDY ASLC TCHE AL 2cb0: 53 49 20 42 43 4c 50 20 50 46 49 54 20 43 42 4c SI BCLP PFIT CBL 2cc0: 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 00 40 5c V BCLM@.CPFM .@\ 2cd0: 47 56 44 31 80 00 0e 08 44 42 54 42 12 32 15 00 GVD1....DBTB.2.. 2ce0: 0a 07 0a 38 0b c0 01 0b 00 0e 0a 3f 0b c7 01 0b ...8.......?.... 2cf0: 07 0e 0b f8 01 0b 38 0e 0b c0 0f 00 00 00 00 00 ......8......... 2d00: 0b 00 70 0b 07 70 0b 38 70 0b c0 71 0b 00 7e 08 ..p..p.8p..q..~. 2d10: 43 44 43 54 12 23 03 12 0a 03 0a c8 0b 40 01 0b CDCT.#.......@.. 2d20: 90 01 12 0a 03 0a c8 0b 4d 01 0b 90 01 12 0a 03 ........M....... 2d30: 0a de 0b 4d 01 0b 7d 01 08 53 55 43 43 01 08 4e ...M..}..SUCC..N 2d40: 56 4c 44 0a 02 08 43 52 49 54 0a 04 08 4e 43 52 VLD...CRIT...NCR 2d50: 54 0a 06 14 4c 4a 47 53 43 49 08 14 44 1e 47 42 T...LJGSCI..D.GB 2d60: 44 41 08 a0 1a 93 47 45 53 46 00 70 0b 79 02 50 DA....GESF.p.y.P 2d70: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 1a ARMp.GESF.SUCC.. 2d80: 93 47 45 53 46 01 70 0b 40 02 50 41 52 4d 70 00 .GESF.p.@.PARMp. 2d90: 47 45 53 46 a4 53 55 43 43 a0 47 04 93 47 45 53 GESF.SUCC.G..GES 2da0: 46 0a 04 7b 50 41 52 4d 0c 00 00 ff ef 50 41 52 F..{PARM.....PAR 2db0: 4d 7b 50 41 52 4d 79 83 88 44 42 54 42 49 42 54 M{PARMy..DBTBIBT 2dc0: 54 00 0a 10 00 50 41 52 4d 7d 49 42 54 54 50 41 T....PARM}IBTTPA 2dd0: 52 4d 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 RMPARMp.GESF.SUC 2de0: 43 a0 4a 06 93 47 45 53 46 0a 05 70 49 50 53 43 C.J..GESF..pIPSC 2df0: 50 41 52 4d 7d 50 41 52 4d 79 49 50 41 54 0a 08 PARM}PARMyIPAT.. 2e00: 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 41 52 .PARMrPARM...PAR 2e10: 4d 7d 50 41 52 4d 79 4c 49 44 53 0a 10 00 50 41 M}PARMyLIDS...PA 2e20: 52 4d 72 50 41 52 4d 0c 00 00 01 00 50 41 52 4d RMrPARM.....PARM 2e30: 7d 50 41 52 4d 79 49 42 49 41 0a 14 00 50 41 52 }PARMyIBIA...PAR 2e40: 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 2d 93 47 Mp.GESF.SUCC.-.G 2e50: 45 53 46 0a 06 70 49 54 56 46 50 41 52 4d 7d 50 ESF..pITVFPARM}P 2e60: 41 52 4d 79 49 54 56 4d 0a 04 00 50 41 52 4d 70 ARMyITVM...PARMp 2e70: 00 47 45 53 46 a4 53 55 43 43 a0 4f 08 93 47 45 .GESF.SUCC.O..GE 2e80: 53 46 0a 07 70 47 49 56 44 50 41 52 4d 7f 50 41 SF..pGIVDPARM.PA 2e90: 52 4d 01 50 41 52 4d 7d 50 41 52 4d 79 47 4d 46 RM.PARM}PARMyGMF 2ea0: 4e 01 00 50 41 52 4d 7d 50 41 52 4d 0b 00 10 50 N..PARM}PARM...P 2eb0: 41 52 4d a0 16 49 44 4d 4d 7d 50 41 52 4d 79 49 ARM..IDMM}PARMyI 2ec0: 44 4d 53 0a 11 00 50 41 52 4d a1 12 7d 50 41 52 DMS...PARM..}PAR 2ed0: 4d 79 49 44 4d 53 0a 0d 00 50 41 52 4d 7d 79 83 MyIDMS...PARM}y. 2ee0: 88 83 88 43 44 43 54 48 56 43 4f 00 74 43 44 56 ...CDCTHVCO.tCDV 2ef0: 4c 01 00 00 0a 15 00 50 41 52 4d 50 41 52 4d 70 L......PARMPARMp 2f00: 01 47 45 53 46 a4 53 55 43 43 a0 2a 93 47 45 53 .GESF.SUCC.*.GES 2f10: 46 0a 0a 70 00 50 41 52 4d a0 10 49 53 53 43 7d F..p.PARM..ISSC} 2f20: 50 41 52 4d 0a 03 50 41 52 4d 70 00 47 45 53 46 PARM..PARMp.GESF 2f30: a4 53 55 43 43 70 00 47 45 53 46 a4 43 52 49 54 .SUCCp.GESF.CRIT 2f40: 14 41 28 53 42 43 42 08 a0 20 93 47 45 53 46 00 .A(SBCB.. .GESF. 2f50: 70 00 50 41 52 4d 70 0b 7d f7 50 41 52 4d 70 00 p.PARMp.}.PARMp. 2f60: 47 45 53 46 a4 53 55 43 43 a0 18 93 47 45 53 46 GESF.SUCC...GESF 2f70: 01 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 2f80: 43 43 a0 19 93 47 45 53 46 0a 03 70 00 47 45 53 CC...GESF..p.GES 2f90: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 Fp.PARM.SUCC...G 2fa0: 45 53 46 0a 04 70 00 47 45 53 46 70 00 50 41 52 ESF..p.GESFp.PAR 2fb0: 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 05 70 M.SUCC...GESF..p 2fc0: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 2fd0: a0 37 93 47 45 53 46 0a 06 70 7b 50 41 52 4d 0a .7.GESF..p{PARM. 2fe0: 0f 00 49 54 56 46 70 7a 7b 50 41 52 4d 0a f0 00 ..ITVFpz{PARM... 2ff0: 0a 04 00 49 54 56 4d 70 00 47 45 53 46 70 00 50 ...ITVMp.GESFp.P 3000: 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a ARM.SUCC...GESF. 3010: 07 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 3020: 43 43 a0 19 93 47 45 53 46 0a 08 70 00 47 45 53 CC...GESF..p.GES 3030: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 24 93 47 Fp.PARM.SUCC.$.G 3040: 45 53 46 0a 09 7b 50 41 52 4d 0a ff 49 42 54 54 ESF..{PARM..IBTT 3050: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 3060: 43 a0 46 05 93 47 45 53 46 0a 0a 7b 50 41 52 4d C.F..GESF..{PARM 3070: 0a ff 49 50 53 43 a0 21 7b 7a 50 41 52 4d 0a 08 ..IPSC.!{zPARM.. 3080: 00 0a ff 00 7b 7a 50 41 52 4d 0a 08 00 0a ff 49 ....{zPARM.....I 3090: 50 41 54 76 49 50 41 54 7b 7a 50 41 52 4d 0a 14 PATvIPAT{zPARM.. 30a0: 00 0a 07 49 42 49 41 70 00 47 45 53 46 70 00 50 ...IBIAp.GESFp.P 30b0: 41 52 4d a4 53 55 43 43 a0 40 06 93 47 45 53 46 ARM.SUCC.@..GESF 30c0: 0a 0b 7b 7a 50 41 52 4d 01 00 01 49 46 31 45 a0 ..{zPARM...IF1E. 30d0: 21 7b 50 41 52 4d 0c 00 e0 01 00 00 7b 7a 50 41 !{PARM......{zPA 30e0: 52 4d 0a 0d 00 0a 0f 49 44 4d 53 70 00 49 44 4d RM.....IDMSp.IDM 30f0: 4d a1 16 7b 7a 50 41 52 4d 0a 11 00 0a 0f 49 44 M..{zPARM.....ID 3100: 4d 53 70 01 49 44 4d 4d 70 00 47 45 53 46 70 00 MSp.IDMMp.GESFp. 3110: 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 PARM.SUCC...GESF 3120: 0a 10 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 ..p.GESFp.PARM.S 3130: 55 43 43 a0 1f 93 47 45 53 46 0a 11 7d 50 41 52 UCC...GESF..}PAR 3140: 4d 0b 00 01 50 41 52 4d 70 00 47 45 53 46 a4 53 M...PARMp.GESF.S 3150: 55 43 43 a0 49 04 93 47 45 53 46 0a 12 a0 26 7b UCC.I..GESF...&{ 3160: 50 41 52 4d 01 00 a0 10 93 7a 50 41 52 4d 01 00 PARM.....zPARM.. 3170: 01 70 01 49 53 53 43 a1 0c 70 00 47 45 53 46 a4 .p.ISSC..p.GESF. 3180: 43 52 49 54 a1 07 70 00 49 53 53 43 70 00 47 45 CRIT..p.ISSCp.GE 3190: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 SFp.PARM.SUCC... 31a0: 47 45 53 46 0a 13 70 00 47 45 53 46 70 00 50 41 GESF..p.GESFp.PA 31b0: 52 4d a4 53 55 43 43 70 00 47 45 53 46 a4 53 55 RM.SUCCp.GESF.SU 31c0: 43 43 a0 11 93 47 45 46 43 0a 04 70 47 42 44 41 CC...GEFC..pGBDA 31d0: 47 58 46 43 a0 11 93 47 45 46 43 0a 06 70 53 42 GXFC...GEFC..pSB 31e0: 43 42 47 58 46 43 70 00 47 45 46 43 70 01 53 43 CBGXFCp.GEFCp.SC 31f0: 49 53 70 00 47 53 53 45 70 00 53 43 49 45 a4 00 ISp.GSSEp.SCIE.. 3200: 14 19 50 44 52 44 00 a0 0c 92 44 52 44 59 5b 22 ..PDRD....DRDY[" 3210: 41 53 4c 50 a4 92 44 52 44 59 14 1d 50 53 54 53 ASLP..DRDY..PSTS 3220: 00 a0 0e 94 43 53 54 53 0a 02 5b 22 41 53 4c 50 ....CSTS..["ASLP 3230: a4 93 43 53 54 53 0a 03 14 47 06 47 4e 4f 54 02 ..CSTS...G.GNOT. 3240: a0 07 50 44 52 44 a4 01 a0 07 50 53 54 53 a4 01 ..PDRD....PSTS.. 3250: 70 68 43 45 56 54 70 0a 03 43 53 54 53 a0 2c 90 phCEVTp..CSTS.,. 3260: 93 43 48 50 44 00 93 69 00 a0 18 91 94 4f 53 59 .CHPD..i.....OSY 3270: 53 0b d0 07 95 4f 53 59 53 0b d6 07 86 50 43 49 S....OSYS....PCI 3280: 30 69 a1 07 86 47 46 58 30 69 86 47 46 58 30 0a 0i...GFX0i.GFX0. 3290: 80 a0 0c 92 50 53 54 53 70 00 43 45 56 54 a4 00 ....PSTSp.CEVT.. 32a0: 14 13 47 48 44 53 01 70 68 54 49 44 58 a4 47 4e ..GHDS.phTIDX.GN 32b0: 4f 54 01 00 14 14 47 4c 49 44 01 70 68 43 4c 49 OT....GLID.phCLI 32c0: 44 a4 47 4e 4f 54 0a 02 00 14 15 47 44 43 4b 01 D.GNOT.....GDCK. 32d0: 70 68 43 44 43 4b a4 47 4e 4f 54 0a 04 0a 80 14 phCDCK.GNOT..... 32e0: 19 50 41 52 44 00 a0 0c 92 41 52 44 59 5b 22 41 .PARD....ARDY["A 32f0: 53 4c 50 a4 92 41 52 44 59 14 46 0c 41 49 4e 54 SLP..ARDY.F.AINT 3300: 02 a0 0e 92 7b 54 43 48 45 79 01 68 00 00 a4 01 ....{TCHEy.h.... 3310: a0 07 50 41 52 44 a4 01 a0 4c 05 93 68 0a 02 a0 ..PARD...L..h... 3320: 33 43 50 46 4d a0 0e 93 43 50 46 4d 01 70 0a 06 3CPFM...CPFM.p.. 3330: 50 46 49 54 a0 0f 93 43 50 46 4d 0a 06 70 0a 08 PFIT...CPFM..p.. 3340: 50 46 49 54 a0 0e 93 43 50 46 4d 0a 08 70 01 50 PFIT...CPFM..p.P 3350: 46 49 54 a1 0c 7f 50 46 49 54 0a 07 50 46 49 54 FIT...PFIT..PFIT 3360: 7d 50 46 49 54 0c 00 00 00 80 50 46 49 54 70 0a }PFIT.....PFITp. 3370: 04 41 53 4c 43 a1 42 04 a0 28 93 68 01 70 78 77 .ASLC.B..(.h.pxw 3380: 69 0a ff 00 0a 64 00 00 42 43 4c 50 7d 42 43 4c i....d..BCLP}BCL 3390: 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 41 53 4c P.....BCLPp..ASL 33a0: 43 a1 16 a0 10 93 68 00 70 69 41 4c 53 49 70 01 C.....h.piALSIp. 33b0: 41 53 4c 43 a1 03 a4 01 70 00 4c 42 50 43 a4 00 ASLC....p.LBPC.. 33c0: 10 41 36 5c 00 5b 80 49 4f 5f 54 01 0b 00 08 0a .A6\.[.IO_T..... 33d0: 10 5b 81 0e 49 4f 5f 54 01 00 40 04 54 52 50 30 .[..IO_T..@.TRP0 33e0: 08 5b 80 50 4d 49 4f 01 0b 00 10 0a 80 5b 81 28 .[.PMIO......[.( 33f0: 50 4d 49 4f 01 00 40 15 00 08 00 02 41 43 50 57 PMIO..@.....ACPW 3400: 01 00 45 0b 00 01 47 50 45 43 01 00 4e 10 00 09 ..E...GPEC..N... 3410: 53 43 49 53 01 00 06 5b 80 47 50 49 4f 01 0b 80 SCIS...[.GPIO... 3420: 11 0a 3c 5b 81 40 0c 47 50 49 4f 01 47 55 30 30 ..<[.@.GPIO.GU00 3430: 08 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 .GU01.GU02.GU03. 3440: 47 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 GIO0.GIO1.GIO2.G 3450: 49 4f 33 08 00 20 47 4c 30 30 08 47 4c 30 31 08 IO3.. GL00.GL01. 3460: 47 4c 30 32 08 00 03 47 50 32 37 01 47 50 32 38 GL02...GP27.GP28 3470: 01 00 03 00 40 04 47 42 30 30 08 47 42 30 31 08 ....@.GB00.GB01. 3480: 47 42 30 32 08 47 42 30 33 08 00 40 08 47 49 56 GB02.GB03..@.GIV 3490: 30 08 00 03 4c 50 4f 4c 01 00 04 47 49 56 32 08 0...LPOL...GIV2. 34a0: 47 49 56 33 08 47 55 30 34 08 47 55 30 35 08 47 GIV3.GU04.GU05.G 34b0: 55 30 36 08 47 55 30 37 08 47 49 4f 34 08 47 49 U06.GU07.GIO4.GI 34c0: 4f 35 08 47 49 4f 36 08 47 49 4f 37 08 00 05 47 O5.GIO6.GIO7...G 34d0: 50 33 37 01 00 02 47 4c 30 35 08 47 4c 30 36 08 P37...GL05.GL06. 34e0: 47 4c 30 37 08 5b 80 52 43 52 42 00 0c 00 c0 d1 GL07.[.RCRB..... 34f0: fe 0b 00 40 5b 81 48 05 52 43 52 42 13 00 80 00 ...@[.H.RCRB.... 3500: 08 00 80 00 10 00 80 02 02 48 50 41 53 02 00 05 .........HPAS... 3510: 48 50 41 45 01 00 48 09 00 01 50 41 54 44 01 53 HPAE..H...PATD.S 3520: 41 54 44 01 53 4d 42 44 01 48 44 41 44 01 00 0b ATD.SMBD.HDAD... 3530: 52 50 31 44 01 52 50 32 44 01 52 50 33 44 01 52 RP1D.RP2D.RP3D.R 3540: 50 34 44 01 52 50 35 44 01 52 50 36 44 01 08 5f P4D.RP5D.RP6D.._ 3550: 53 30 5f 12 05 03 00 00 00 08 5f 53 33 5f 12 07 S0_......._S3_.. 3560: 03 0a 05 0a 05 00 08 5f 53 34 5f 12 07 03 0a 06 ......._S4_..... 3570: 0a 06 00 08 5f 53 35 5f 12 07 03 0a 07 0a 07 00 ...._S5_........ 3580: 14 45 04 47 45 54 50 09 a0 0e 93 7b 68 0a 09 00 .E.GETP....{h... 3590: 00 a4 0c ff ff ff ff a0 0d 93 7b 68 0a 09 00 0a ..........{h.... 35a0: 08 a4 0b 84 03 7a 7b 68 0b 00 03 00 0a 08 60 7a .....z{h......`z 35b0: 7b 68 0b 00 30 00 0a 0c 61 a4 77 0a 1e 74 0a 09 {h..0...a.w..t.. 35c0: 72 60 61 00 00 00 14 30 47 44 4d 41 0d a0 23 68 r`a....0GDMA..#h 35d0: a0 07 90 69 6c a4 0a 14 a0 0e 90 6a 6c a4 77 74 ...il......jl.wt 35e0: 0a 04 6b 00 0a 0f 00 a4 77 74 0a 04 6b 00 0a 1e ..k.....wt..k... 35f0: 00 a4 0c ff ff ff ff 14 1f 47 45 54 54 09 a4 77 .........GETT..w 3600: 0a 1e 74 0a 09 72 7b 7a 68 0a 02 00 0a 03 00 7b ..t..r{zh......{ 3610: 68 0a 03 00 00 00 00 14 44 06 47 45 54 46 0b 08 h.......D.GETF.. 3620: 54 4d 50 46 00 a0 0c 68 7d 54 4d 50 46 01 54 4d TMPF...h}TMPF.TM 3630: 50 46 a0 11 7b 6a 0a 02 00 7d 54 4d 50 46 0a 02 PF..{j...}TMPF.. 3640: 54 4d 50 46 a0 0d 69 7d 54 4d 50 46 0a 04 54 4d TMPF..i}TMPF..TM 3650: 50 46 a0 11 7b 6a 0a 20 00 7d 54 4d 50 46 0a 08 PF..{j. .}TMPF.. 3660: 54 4d 50 46 a0 12 7b 6a 0b 00 40 00 7d 54 4d 50 TMPF..{j..@.}TMP 3670: 46 0a 10 54 4d 50 46 a4 54 4d 50 46 14 3d 53 45 F..TMPF.TMPF.=SE 3680: 54 50 0b a0 08 94 68 0a f0 a4 0a 08 a1 2d a0 27 TP....h......-.' 3690: 7b 69 0a 02 00 a0 10 90 92 94 68 0a 78 7b 6a 0a {i........h.x{j. 36a0: 02 00 a4 0b 01 23 a0 0f 90 92 94 68 0a b4 7b 6a .....#.....h..{j 36b0: 01 00 a4 0b 01 21 a4 0b 01 10 14 37 53 44 4d 41 .....!.....7SDMA 36c0: 09 a0 08 92 94 68 0a 14 a4 01 a0 09 92 94 68 0a .....h........h. 36d0: 1e a4 0a 02 a0 08 92 94 68 0a 2d a4 01 a0 09 92 ........h.-..... 36e0: 94 68 0a 3c a4 0a 02 a0 08 92 94 68 0a 5a a4 01 .h.<.......h.Z.. 36f0: a4 00 14 2f 53 45 54 54 0b a0 25 7b 69 0a 02 00 .../SETT..%{i... 3700: a0 0f 90 92 94 68 0a 78 7b 6a 0a 02 00 a4 0a 0b .....h.x{j...... 3710: a0 0e 90 92 94 68 0a b4 7b 6a 01 00 a4 0a 09 a4 .....h..{j...... 3720: 0a 04 5b 82 4b 04 48 44 45 46 08 5f 41 44 52 0c ..[.K.HDEF._ADR. 3730: 00 00 1b 00 5b 80 48 44 41 52 02 0a 4c 0a 10 5b ....[.HDAR..L..[ 3740: 81 22 48 44 41 52 02 44 43 4b 41 01 00 07 44 43 ."HDAR.DCKA...DC 3750: 4b 4d 01 00 06 44 43 4b 53 01 00 30 00 0f 50 4d KM...DCKS..0..PM 3760: 45 53 01 08 5f 50 52 57 12 06 02 0a 0d 0a 03 5b ES.._PRW.......[ 3770: 82 41 10 52 50 30 31 08 5f 41 44 52 0c 00 00 1c .A.RP01._ADR.... 3780: 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 45 04 .[.PXCS..@..[.E. 3790: 50 58 43 53 40 00 40 09 00 0d 4c 41 53 58 01 00 PXCS@.@...LASX.. 37a0: 32 41 42 50 58 01 00 02 50 44 43 58 01 00 02 50 2ABPX...PDCX...P 37b0: 44 53 58 01 00 01 4c 53 43 58 01 00 27 00 10 50 DSX...LSCX..'..P 37c0: 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 01 50 4d SPX..O<..HPSX.PM 37d0: 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 44 52 00 SX.[..PXSX._ADR. 37e0: 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 .A._PRT..3GPIC.. 37f0: 2c 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ,............... 3800: ff ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a ................ 3810: 12 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 .............E.. 3820: 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 .A.........^^.LP 3830: 43 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e CBLNKA........^^ 3840: 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff .LPCBLNKB....... 3850: 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 ..^^.LPCBLNKC... 3860: 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b ......^^.LPCBLNK 3870: 44 00 5b 82 41 10 52 50 30 32 08 5f 41 44 52 0c D.[.A.RP02._ADR. 3880: 01 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b ....[.PXCS..@..[ 3890: 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c 41 53 .E.PXCS@.@...LAS 38a0: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 38b0: 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 ..PDSX...LSCX..' 38c0: 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 ..PSPX..O<..HPSX 38d0: 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 .PMSX.[..PXSX._A 38e0: 44 52 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 DR..A._PRT..3GPI 38f0: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 11 12 C..,............ 3900: 09 04 0b ff ff 01 00 0a 12 12 0a 04 0b ff ff 0a ................ 3910: 02 00 0a 13 12 0a 04 0b ff ff 0a 03 00 0a 10 a1 ................ 3920: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3930: 2e 4c 50 43 42 4c 4e 4b 42 00 12 12 04 0b ff ff .LPCBLNKB....... 3940: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 3950: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 3960: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3970: 4c 4e 4b 41 00 5b 82 4d 11 52 50 30 33 08 5f 41 LNKA.[.M.RP03._A 3980: 44 52 0c 02 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3990: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 39a0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 39b0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 39c0: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 39d0: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 39e0: 08 5f 41 44 52 00 08 2e 50 58 53 58 5f 52 4d 56 ._ADR...PXSX_RMV 39f0: 01 08 2e 50 58 53 58 5f 50 52 57 12 06 02 0a 09 ...PXSX_PRW..... 3a00: 0a 03 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 ...A._PRT..3GPIC 3a10: a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 12 12 09 ..,............. 3a20: 04 0b ff ff 01 00 0a 13 12 0a 04 0b ff ff 0a 02 ................ 3a30: 00 0a 10 12 0a 04 0b ff ff 0a 03 00 0a 11 a1 45 ...............E 3a40: 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e ...A.........^^. 3a50: 4c 50 43 42 4c 4e 4b 43 00 12 12 04 0b ff ff 01 LPCBLNKC........ 3a60: 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0b ^^.LPCBLNKD..... 3a70: ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 ....^^.LPCBLNKA. 3a80: 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3a90: 4e 4b 42 00 5b 82 4f 11 52 50 30 34 08 5f 41 44 NKB.[.O.RP04._AD 3aa0: 52 0c 03 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a R.....[.PXCS..@. 3ab0: c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c .[.E.PXCS@.@...L 3ac0: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 3ad0: 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 X...PDSX...LSCX. 3ae0: 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 .'..PSPX..O<..HP 3af0: 53 58 01 50 4d 53 58 01 5b 82 29 50 58 53 58 08 SX.PMSX.[.)PXSX. 3b00: 5f 41 44 52 00 14 1d 5f 50 52 57 00 a0 0d 57 4b _ADR..._PRW...WK 3b10: 4c 4e a4 12 06 02 0a 09 0a 03 a1 08 a4 12 05 02 LN.............. 3b20: 0a 09 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 ....A._PRT..3GPI 3b30: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 C..,............ 3b40: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 3b50: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 a1 ................ 3b60: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3b70: 2e 4c 50 43 42 4c 4e 4b 44 00 12 12 04 0b ff ff .LPCBLNKD....... 3b80: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 .^^.LPCBLNKA.... 3b90: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 .....^^.LPCBLNKB 3ba0: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3bb0: 4c 4e 4b 43 00 5b 82 41 10 52 50 30 35 08 5f 41 LNKC.[.A.RP05._A 3bc0: 44 52 0c 04 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3bd0: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 3be0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 3bf0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 3c00: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 3c10: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 3c20: 08 5f 41 44 52 00 14 41 09 5f 50 52 54 00 a0 33 ._ADR..A._PRT..3 3c30: 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 GPIC..,......... 3c40: 0a 10 12 09 04 0b ff ff 01 00 0a 11 12 0a 04 0b ................ 3c50: ff ff 0a 02 00 0a 12 12 0a 04 0b ff ff 0a 03 00 ................ 3c60: 0a 13 a1 45 05 a4 12 41 05 04 12 12 04 0b ff ff ...E...A........ 3c70: 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 12 04 .^^.LPCBLNKA.... 3c80: 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3c90: 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3ca0: 4e 4b 43 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c NKC.........^^.L 3cb0: 50 43 42 4c 4e 4b 44 00 5b 82 41 10 52 50 30 36 PCBLNKD.[.A.RP06 3cc0: 08 5f 41 44 52 0c 05 00 1c 00 5b 80 50 58 43 53 ._ADR.....[.PXCS 3cd0: 02 0a 40 0a c0 5b 81 45 04 50 58 43 53 40 00 40 ..@..[.E.PXCS@.@ 3ce0: 09 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 ...LASX..2ABPX.. 3cf0: 02 50 44 43 58 01 00 02 50 44 53 58 01 00 01 4c .PDCX...PDSX...L 3d00: 53 43 58 01 00 27 00 10 50 53 50 58 01 00 4f 3c SCX..'..PSPX..O< 3d10: 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 ..HPSX.PMSX.[..P 3d20: 58 53 58 08 5f 41 44 52 00 14 41 09 5f 50 52 54 XSX._ADR..A._PRT 3d30: 00 a0 33 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ..3GPIC..,...... 3d40: ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a 12 12 ................ 3d50: 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ff ff ................ 3d60: 0a 03 00 0a 10 a1 45 05 a4 12 41 05 04 12 12 04 ......E...A..... 3d70: 0b ff ff 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3d80: 12 12 04 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 3d90: 4b 43 00 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 KC.........^^.LP 3da0: 43 42 4c 4e 4b 44 00 12 13 04 0b ff ff 0a 03 5e CBLNKD.........^ 3db0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 4d 06 55 ^.LPCBLNKA.[.M.U 3dc0: 53 42 31 08 5f 41 44 52 0c 00 00 1d 00 5b 80 55 SB1._ADR.....[.U 3dd0: 31 43 53 02 0a c4 0a 04 5b 81 0b 55 31 43 53 03 1CS.....[..U1CS. 3de0: 55 31 45 4e 02 08 5f 50 52 57 12 06 02 0a 03 0a U1EN.._PRW...... 3df0: 03 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 ..$_PSW...hp.ACP 3e00: 57 a0 0c 41 43 50 57 70 0a 03 55 31 45 4e a1 07 W..ACPWp..U1EN.. 3e10: 70 00 55 31 45 4e 14 09 5f 53 33 44 00 a4 0a 02 p.U1EN.._S3D.... 3e20: 14 09 5f 53 34 44 00 a4 0a 02 5b 82 4c 06 55 53 .._S4D....[.L.US 3e30: 42 32 08 5f 41 44 52 0c 01 00 1d 00 5b 80 55 32 B2._ADR.....[.U2 3e40: 43 53 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 CS.....[..U2CS.U 3e50: 32 45 4e 02 08 5f 50 52 57 12 06 02 0a 04 0a 03 2EN.._PRW....... 3e60: 14 23 5f 50 53 57 01 a0 14 68 70 01 41 43 50 57 .#_PSW...hp.ACPW 3e70: a0 0b 41 43 50 57 70 01 55 32 45 4e a1 07 70 00 ..ACPWp.U2EN..p. 3e80: 55 32 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 U2EN.._S3D...... 3e90: 5f 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 33 _S4D....[.M.USB3 3ea0: 08 5f 41 44 52 0c 02 00 1d 00 5b 80 55 32 43 53 ._ADR.....[.U2CS 3eb0: 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 33 45 .....[..U2CS.U3E 3ec0: 4e 02 08 5f 50 52 57 12 06 02 0a 0c 0a 03 14 24 N.._PRW........$ 3ed0: 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c _PSW...hp.ACPW.. 3ee0: 41 43 50 57 70 0a 03 55 33 45 4e a1 07 70 00 55 ACPWp..U3EN..p.U 3ef0: 33 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 3EN.._S3D......_ 3f00: 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 34 08 S4D....[.M.USB4. 3f10: 5f 41 44 52 0c 00 00 1a 00 5b 80 55 34 43 53 02 _ADR.....[.U4CS. 3f20: 0a c4 0a 04 5b 81 0b 55 34 43 53 03 55 34 45 4e ....[..U4CS.U4EN 3f30: 02 08 5f 50 52 57 12 06 02 0a 0e 0a 03 14 24 5f .._PRW........$_ 3f40: 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c 41 PSW...hp.ACPW..A 3f50: 43 50 57 70 0a 03 55 34 45 4e a1 07 70 00 55 34 CPWp..U4EN..p.U4 3f60: 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 EN.._S3D......_S 3f70: 34 44 00 a4 0a 02 5b 82 41 06 55 53 42 35 08 5f 4D....[.A.USB5._ 3f80: 41 44 52 0c 01 00 1a 00 5b 80 55 35 43 53 02 0a ADR.....[.U5CS.. 3f90: c4 0a 04 5b 81 0b 55 35 43 53 03 55 35 45 4e 02 ...[..U5CS.U5EN. 3fa0: 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 .$_PSW...hp.ACPW 3fb0: a0 0c 41 43 50 57 70 0a 03 55 35 45 4e a1 07 70 ..ACPWp..U5EN..p 3fc0: 00 55 35 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 .U5EN.._S3D..... 3fd0: 09 5f 53 34 44 00 a4 0a 02 5b 82 4b 0a 45 48 43 ._S4D....[.K.EHC 3fe0: 31 08 5f 41 44 52 0c 07 00 1d 00 5b 80 55 37 43 1._ADR.....[.U7C 3ff0: 53 02 0a 54 0a 04 5b 81 0d 55 37 43 53 03 00 0f S..T..[..U7CS... 4000: 50 4d 45 53 01 5b 82 4f 05 48 55 42 37 08 5f 41 PMES.[.O.HUB7._A 4010: 44 52 00 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 DR.[..PRT1._ADR. 4020: 5b 82 0c 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 [..PRT2._ADR..[. 4030: 0c 50 52 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 .PRT3._ADR..[..P 4040: 52 54 34 08 5f 41 44 52 0a 04 5b 82 0c 50 52 54 RT4._ADR..[..PRT 4050: 35 08 5f 41 44 52 0a 05 5b 82 0c 50 52 54 36 08 5._ADR..[..PRT6. 4060: 5f 41 44 52 0a 06 08 5f 50 52 57 12 06 02 0a 0d _ADR..._PRW..... 4070: 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 ...._S3D......_S 4080: 34 44 00 a4 0a 02 5b 82 4f 08 45 48 43 32 08 5f 4D....[.O.EHC2._ 4090: 41 44 52 0c 07 00 1a 00 5b 80 55 46 43 53 02 0a ADR.....[.UFCS.. 40a0: 54 0a 04 5b 81 0d 55 46 43 53 03 00 0f 50 4d 45 T..[..UFCS...PME 40b0: 53 01 5b 82 43 04 48 55 42 37 08 5f 41 44 52 00 S.[.C.HUB7._ADR. 40c0: 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 5b 82 0c [..PRT1._ADR.[.. 40d0: 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 0c 50 52 PRT2._ADR..[..PR 40e0: 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 52 54 34 T3._ADR..[..PRT4 40f0: 08 5f 41 44 52 0a 04 08 5f 50 52 57 12 06 02 0a ._ADR..._PRW.... 4100: 0d 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f ....._S3D......_ 4110: 53 34 44 00 a4 0a 02 5b 82 4a 06 50 43 49 42 08 S4D....[.J.PCIB. 4120: 5f 41 44 52 0c 00 00 1e 00 14 49 05 5f 50 52 54 _ADR......I._PRT 4130: 00 a0 21 47 50 49 43 a4 12 1a 02 12 0b 04 0c ff ..!GPIC......... 4140: ff 06 00 00 00 0a 16 12 0b 04 0c ff ff 06 00 01 ................ 4150: 00 0a 17 a1 2f a4 12 2c 02 12 14 04 0c ff ff 06 ..../..,........ 4160: 00 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 47 00 12 14 ..^^.LPCBLNKG... 4170: 04 0c ff ff 06 00 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 4180: 4b 48 00 5b 82 8d 2e 01 4c 50 43 42 08 5f 41 44 KH.[....LPCB._AD 4190: 52 0c 00 00 1f 00 5b 80 4c 50 43 30 02 0a 40 0a R.....[.LPC0..@. 41a0: c0 5b 81 4d 07 4c 50 43 30 00 00 40 10 50 41 52 .[.M.LPC0..@.PAR 41b0: 43 08 50 42 52 43 08 50 43 52 43 08 50 44 52 43 C.PBRC.PCRC.PDRC 41c0: 08 00 20 50 45 52 43 08 50 46 52 43 08 50 47 52 .. PERC.PFRC.PGR 41d0: 43 08 50 48 52 43 08 00 40 0a 43 4d 41 52 03 00 C.PHRC..@.CMAR.. 41e0: 01 43 4d 42 52 03 00 01 4c 50 54 52 02 00 06 43 .CMBR...LPTR...C 41f0: 4d 41 44 01 43 4d 42 44 01 4c 50 54 44 01 46 44 MAD.CMBD.LPTD.FD 4200: 44 44 01 00 2c 49 4f 52 32 10 00 02 4c 47 52 4d DD..,IOR2...LGRM 4210: 06 00 48 32 52 41 45 4e 01 00 0d 52 43 42 41 12 ..H2RAEN...RCBA. 4220: 5b 80 53 4d 49 30 01 0c 00 fe 00 00 0c 02 00 00 [.SMI0.......... 4230: 00 5b 81 0b 53 4d 49 30 00 53 4d 49 43 08 5b 80 .[..SMI0.SMIC.[. 4240: 53 4d 49 31 00 0c bd 2e 6e bf 0c 90 00 00 00 5b SMI1....n......[ 4250: 81 16 53 4d 49 31 00 42 43 4d 44 08 44 49 44 5f ..SMI1.BCMD.DID_ 4260: 20 49 4e 46 4f 40 40 5b 81 15 53 4d 49 31 00 01 INFO@@[..SMI1.. 4270: 01 00 00 28 49 4e 46 5f 08 49 4e 46 31 20 5b 01 ...(INF_.INF1 [. 4280: 50 53 4d 58 00 14 27 50 48 53 53 01 5b 23 50 53 PSMX..'PHSS.[#PS 4290: 4d 58 ff ff 70 0a 80 42 43 4d 44 70 68 44 49 44 MX..p..BCMDphDID 42a0: 5f 70 00 53 4d 49 43 5b 27 50 53 4d 58 5b 82 41 _p.SMIC['PSMX[.A 42b0: 0a 4c 4e 4b 41 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKA._HID.A.... 42c0: 5f 55 49 44 01 14 0d 5f 44 49 53 08 70 0a 80 50 _UID..._DIS.p..P 42d0: 41 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ARC._PRS....#... 42e0: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 41 11 09 y..8_CRS..RTLA.. 42f0: 0a 06 23 00 00 18 79 00 8b 52 54 4c 41 01 49 52 ..#...y..RTLA.IR 4300: 51 30 70 00 49 52 51 30 79 01 7b 50 41 52 43 0a Q0p.IRQ0y.{PARC. 4310: 0f 00 49 52 51 30 a4 52 54 4c 41 14 1b 5f 53 52 ..IRQ0.RTLA.._SR 4320: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 4330: 60 70 60 50 41 52 43 14 18 5f 53 54 41 08 a0 0c `p`PARC.._STA... 4340: 7b 50 41 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PARC........... 4350: 5b 82 42 0a 4c 4e 4b 42 08 5f 48 49 44 0c 41 d0 [.B.LNKB._HID.A. 4360: 0c 0f 08 5f 55 49 44 0a 02 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4370: 70 0a 80 50 42 52 43 08 5f 50 52 53 11 09 0a 06 p..PBRC._PRS.... 4380: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4390: 4c 42 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LB....#...y..RTL 43a0: 42 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 B.IRQ0p.IRQ0y.{P 43b0: 42 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 42 14 BRC...IRQ0.RTLB. 43c0: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 43d0: 51 30 60 76 60 70 60 50 42 52 43 14 18 5f 53 54 Q0`v`p`PBRC.._ST 43e0: 41 08 a0 0c 7b 50 42 52 43 0a 80 00 a4 0a 09 a1 A...{PBRC....... 43f0: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 43 08 5f 48 49 ....[.B.LNKC._HI 4400: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 03 14 0d 5f D.A...._UID...._ 4410: 44 49 53 08 70 0a 80 50 43 52 43 08 5f 50 52 53 DIS.p..PCRC._PRS 4420: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 4430: 08 08 52 54 4c 43 11 09 0a 06 23 00 00 18 79 00 ..RTLC....#...y. 4440: 8b 52 54 4c 43 01 49 52 51 30 70 00 49 52 51 30 .RTLC.IRQ0p.IRQ0 4450: 79 01 7b 50 43 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PCRC...IRQ0.R 4460: 54 4c 43 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLC.._SRS..h.IRQ 4470: 30 82 49 52 51 30 60 76 60 70 60 50 43 52 43 14 0.IRQ0`v`p`PCRC. 4480: 18 5f 53 54 41 08 a0 0c 7b 50 43 52 43 0a 80 00 ._STA...{PCRC... 4490: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 44 ........[.B.LNKD 44a0: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 44b0: 04 14 0d 5f 44 49 53 08 70 0a 80 50 44 52 43 08 ..._DIS.p..PDRC. 44c0: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 44d0: 5f 43 52 53 08 08 52 54 4c 44 11 09 0a 06 23 00 _CRS..RTLD....#. 44e0: 00 18 79 00 8b 52 54 4c 44 01 49 52 51 30 70 00 ..y..RTLD.IRQ0p. 44f0: 49 52 51 30 79 01 7b 50 44 52 43 0a 0f 00 49 52 IRQ0y.{PDRC...IR 4500: 51 30 a4 52 54 4c 44 14 1b 5f 53 52 53 09 8b 68 Q0.RTLD.._SRS..h 4510: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 4520: 44 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 44 52 DRC.._STA...{PDR 4530: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a C...........[.B. 4540: 4c 4e 4b 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f LNKE._HID.A...._ 4550: 55 49 44 0a 05 14 0d 5f 44 49 53 08 70 0a 80 50 UID...._DIS.p..P 4560: 45 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ERC._PRS....#... 4570: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 45 11 09 y..8_CRS..RTLE.. 4580: 0a 06 23 00 00 18 79 00 8b 52 54 4c 45 01 49 52 ..#...y..RTLE.IR 4590: 51 30 70 00 49 52 51 30 79 01 7b 50 45 52 43 0a Q0p.IRQ0y.{PERC. 45a0: 0f 00 49 52 51 30 a4 52 54 4c 45 14 1b 5f 53 52 ..IRQ0.RTLE.._SR 45b0: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 45c0: 60 70 60 50 45 52 43 14 18 5f 53 54 41 08 a0 0c `p`PERC.._STA... 45d0: 7b 50 45 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PERC........... 45e0: 5b 82 42 0a 4c 4e 4b 46 08 5f 48 49 44 0c 41 d0 [.B.LNKF._HID.A. 45f0: 0c 0f 08 5f 55 49 44 0a 06 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4600: 70 0a 80 50 46 52 43 08 5f 50 52 53 11 09 0a 06 p..PFRC._PRS.... 4610: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4620: 4c 46 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LF....#...y..RTL 4630: 46 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 F.IRQ0p.IRQ0y.{P 4640: 46 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 46 14 FRC...IRQ0.RTLF. 4650: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 4660: 51 30 60 76 60 70 60 50 46 52 43 14 18 5f 53 54 Q0`v`p`PFRC.._ST 4670: 41 08 a0 0c 7b 50 46 52 43 0a 80 00 a4 0a 09 a1 A...{PFRC....... 4680: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 47 08 5f 48 49 ....[.B.LNKG._HI 4690: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 0d 5f D.A...._UID...._ 46a0: 44 49 53 08 70 0a 80 50 47 52 43 08 5f 50 52 53 DIS.p..PGRC._PRS 46b0: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 46c0: 08 08 52 54 4c 47 11 09 0a 06 23 00 00 18 79 00 ..RTLG....#...y. 46d0: 8b 52 54 4c 47 01 49 52 51 30 70 00 49 52 51 30 .RTLG.IRQ0p.IRQ0 46e0: 79 01 7b 50 47 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PGRC...IRQ0.R 46f0: 54 4c 47 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLG.._SRS..h.IRQ 4700: 30 82 49 52 51 30 60 76 60 70 60 50 47 52 43 14 0.IRQ0`v`p`PGRC. 4710: 18 5f 53 54 41 08 a0 0c 7b 50 47 52 43 0a 80 00 ._STA...{PGRC... 4720: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 48 ........[.B.LNKH 4730: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 4740: 08 14 0d 5f 44 49 53 08 70 0a 80 50 48 52 43 08 ..._DIS.p..PHRC. 4750: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 4760: 5f 43 52 53 08 08 52 54 4c 48 11 09 0a 06 23 00 _CRS..RTLH....#. 4770: 00 18 79 00 8b 52 54 4c 48 01 49 52 51 30 70 00 ..y..RTLH.IRQ0p. 4780: 49 52 51 30 79 01 7b 50 48 52 43 0a 0f 00 49 52 IRQ0y.{PHRC...IR 4790: 51 30 a4 52 54 4c 48 14 1b 5f 53 52 53 09 8b 68 Q0.RTLH.._SRS..h 47a0: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 47b0: 48 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 48 52 HRC.._STA...{PHR 47c0: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 3d 44 C...........[.=D 47d0: 4d 41 43 08 5f 48 49 44 0c 41 d0 02 00 08 5f 43 MAC._HID.A...._C 47e0: 52 53 11 28 0a 25 47 01 00 00 00 00 01 20 47 01 RS.(.%G...... G. 47f0: 81 00 81 00 01 11 47 01 93 00 93 00 01 0d 47 01 ......G.......G. 4800: c0 00 c0 00 01 20 2a 10 01 79 00 5b 82 26 46 57 ..... *..y.[.&FW 4810: 48 44 08 5f 48 49 44 0c 25 d4 08 00 08 5f 43 52 HD._HID.%...._CR 4820: 53 11 11 0a 0e 86 09 00 00 00 00 00 ff 00 00 00 S............... 4830: 01 79 00 5b 82 40 0b 48 50 45 54 08 5f 48 49 44 .y.[.@.HPET._HID 4840: 0c 41 d0 01 03 08 5f 43 49 44 0c 41 d0 0c 01 08 .A...._CID.A.... 4850: 42 55 46 30 11 11 0a 0e 86 09 00 00 00 00 d0 fe BUF0............ 4860: 00 04 00 00 79 00 14 27 5f 53 54 41 00 a0 13 92 ....y..'_STA.... 4870: 95 4f 53 59 53 0b d1 07 a0 08 48 50 41 45 a4 0a .OSYS.....HPAE.. 4880: 0f a1 0a a0 08 48 50 41 45 a4 0a 0b a4 00 14 46 .....HPAE......F 4890: 05 5f 43 52 53 08 a0 49 04 48 50 41 45 8a 42 55 ._CRS..I.HPAE.BU 48a0: 46 30 0a 04 48 50 54 30 a0 11 93 48 50 41 53 01 F0..HPT0...HPAS. 48b0: 70 0c 00 10 d0 fe 48 50 54 30 a0 12 93 48 50 41 p.....HPT0...HPA 48c0: 53 0a 02 70 0c 00 20 d0 fe 48 50 54 30 a0 12 93 S..p.. ..HPT0... 48d0: 48 50 41 53 0a 03 70 0c 00 30 d0 fe 48 50 54 30 HPAS..p..0..HPT0 48e0: a4 42 55 46 30 5b 82 45 0a 49 50 49 43 08 5f 48 .BUF0[.E.IPIC._H 48f0: 49 44 0b 41 d0 08 5f 43 52 53 11 41 09 0a 8d 47 ID.A.._CRS.A...G 4900: 01 20 00 20 00 01 02 47 01 24 00 24 00 01 02 47 . . ...G.$.$...G 4910: 01 28 00 28 00 01 02 47 01 2c 00 2c 00 01 02 47 .(.(...G.,.,...G 4920: 01 30 00 30 00 01 02 47 01 34 00 34 00 01 02 47 .0.0...G.4.4...G 4930: 01 38 00 38 00 01 02 47 01 3c 00 3c 00 01 02 47 .8.8...G.<.<...G 4940: 01 a0 00 a0 00 01 02 47 01 a4 00 a4 00 01 02 47 .......G.......G 4950: 01 a8 00 a8 00 01 02 47 01 ac 00 ac 00 01 02 47 .......G.......G 4960: 01 b0 00 b0 00 01 02 47 01 b4 00 b4 00 01 02 47 .......G.......G 4970: 01 b8 00 b8 00 01 02 47 01 bc 00 bc 00 01 02 47 .......G.......G 4980: 01 d0 04 d0 04 01 02 22 04 00 79 00 5b 82 25 4d ......."..y.[.%M 4990: 41 54 48 08 5f 48 49 44 0c 41 d0 0c 04 08 5f 43 ATH._HID.A...._C 49a0: 52 53 11 10 0a 0d 47 01 f0 00 f0 00 01 01 22 00 RS....G.......". 49b0: 20 79 00 5b 82 4b 09 4c 44 52 43 08 5f 48 49 44 y.[.K.LDRC._HID 49c0: 0c 41 d0 0c 02 08 5f 55 49 44 0a 02 08 5f 43 52 .A...._UID..._CR 49d0: 53 11 4e 07 0a 7a 47 01 2e 00 2e 00 01 02 47 01 S.N..zG.......G. 49e0: 4e 00 4e 00 01 02 47 01 61 00 61 00 01 01 47 01 N.N...G.a.a...G. 49f0: 63 00 63 00 01 01 47 01 65 00 65 00 01 01 47 01 c.c...G.e.e...G. 4a00: 67 00 67 00 01 01 47 01 80 00 80 00 01 01 47 01 g.g...G.......G. 4a10: 92 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 ......G.......G. 4a20: 80 06 80 06 01 20 47 01 00 08 00 08 01 10 47 01 ..... G.......G. 4a30: 00 10 00 10 01 80 47 01 80 11 80 11 01 40 47 01 ......G......@G. 4a40: 00 fe 00 fe 01 01 47 01 00 ff 00 ff 01 80 79 00 ......G.......y. 4a50: 5b 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b [.%RTC_._HID.A.. 4a60: 00 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 .._CRS....G.p.p. 4a70: 01 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f .."..y.[.-TIMR._ 4a80: 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a HID.A...._CRS... 4a90: 15 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 .G.@.@...G.P.P.. 4aa0: 04 22 01 00 79 00 5b 82 32 41 43 41 44 08 5f 48 ."..y.[.2ACAD._H 4ab0: 49 44 0d 41 43 50 49 30 30 30 33 00 08 5f 50 43 ID.ACPI0003.._PC 4ac0: 4c 12 06 01 5f 53 42 5f 14 11 5f 50 53 52 00 70 L..._SB_.._PSR.p 4ad0: 01 41 43 50 57 a4 41 43 50 57 14 1a 45 43 4f 4b .ACPW.ACPW..ECOK 4ae0: 00 a0 0f 93 5e 2e 45 43 30 5f 5a 30 30 39 01 a4 ....^.EC0_Z009.. 4af0: 01 a1 03 a4 00 5b 82 4e 6f 45 43 30 5f 08 5f 48 .....[.NoEC0_._H 4b00: 49 44 0c 41 d0 0c 09 08 5f 47 50 45 0a 1c 08 5a ID.A...._GPE...Z 4b10: 30 30 39 00 08 5f 43 52 53 11 15 0a 12 47 01 62 009.._CRS....G.b 4b20: 00 62 00 01 01 47 01 66 00 66 00 01 01 79 00 14 .b...G.f.f...y.. 4b30: 3b 5f 52 45 47 02 a0 34 93 68 0a 03 70 69 5a 30 ;_REG..4.h..piZ0 4b40: 30 39 a0 28 5b 12 5f 4f 53 49 60 70 00 42 54 44 09.([._OSI`p.BTD 4b50: 53 a0 19 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 S.._OSI.Windows 4b60: 32 30 30 36 00 70 01 42 54 44 53 5b 80 45 52 41 2006.p.BTDS[.ERA 4b70: 4d 03 00 0a ff 5b 81 4e 2e 45 52 41 4d 11 00 40 M....[.N.ERAM..@ 4b80: 30 53 4d 50 52 08 53 4d 53 54 08 53 4d 41 44 08 0SMPR.SMST.SMAD. 4b90: 53 4d 43 4d 08 53 4d 44 30 40 10 42 43 4e 54 08 SMCM.SMD0@.BCNT. 4ba0: 53 4d 41 41 18 00 40 04 43 48 47 4d 10 43 48 47 SMAA..@.CHGM.CHG 4bb0: 53 10 45 4e 49 44 08 45 4e 49 42 08 45 4e 44 44 S.ENID.ENIB.ENDD 4bc0: 08 43 48 47 56 08 43 48 47 41 10 42 41 4c 30 01 .CHGV.CHGA.BAL0. 4bd0: 42 41 4c 31 01 42 41 4c 32 01 42 41 4c 33 01 42 BAL1.BAL2.BAL3.B 4be0: 42 43 30 01 42 42 43 31 01 42 42 43 32 01 42 42 BC0.BBC1.BBC2.BB 4bf0: 43 33 01 00 08 50 48 44 44 01 49 46 44 44 01 49 C3...PHDD.IFDD.I 4c00: 4f 44 44 01 53 48 44 44 01 53 31 32 30 01 45 46 ODD.SHDD.S120.EF 4c10: 44 44 01 43 52 54 44 01 53 50 57 52 01 53 42 54 DD.CRTD.SPWR.SBT 4c20: 4e 01 56 49 44 4f 01 56 4f 4c 44 01 56 4f 4c 55 N.VIDO.VOLD.VOLU 4c30: 01 4d 55 54 45 01 43 4f 4e 54 01 42 52 47 54 01 .MUTE.CONT.BRGT. 4c40: 48 42 54 4e 01 53 34 53 54 01 53 4b 45 59 01 42 HBTN.S4ST.SKEY.B 4c50: 4b 45 59 01 54 4f 55 50 01 46 4e 42 4e 01 4c 49 KEY.TOUP.FNBN.LI 4c60: 44 46 01 44 49 47 4d 01 55 57 41 4b 01 00 08 44 DF.DIGM.UWAK...D 4c70: 4b 53 50 01 44 4b 49 4e 01 44 4b 49 44 01 44 4b KSP.DKIN.DKID.DK 4c80: 4f 4b 01 00 04 44 4b 50 57 01 00 07 42 54 4e 53 OK...DKPW...BTNS 4c90: 08 53 31 4c 44 01 53 33 4c 44 01 56 47 41 51 01 .S1LD.S3LD.VGAQ. 4ca0: 50 43 4d 51 01 50 43 4d 52 01 41 44 50 54 01 53 PCMQ.PCMR.ADPT.S 4cb0: 4c 4c 53 01 53 59 53 37 01 50 57 41 4b 01 4d 57 LLS.SYS7.PWAK.MW 4cc0: 41 4b 01 4c 57 41 4b 01 00 05 00 28 54 43 4e 4c AK.LWAK....(TCNL 4cd0: 08 54 4d 50 49 08 54 4d 53 44 08 46 41 53 4e 04 .TMPI.TMSD.FASN. 4ce0: 46 41 53 55 04 50 43 56 4c 04 00 02 53 57 54 4f FASU.PCVL...SWTO 4cf0: 01 48 57 54 4f 01 4d 4f 44 45 01 46 41 4e 53 02 .HWTO.MODE.FANS. 4d00: 49 4e 49 54 01 46 41 4e 31 01 46 41 4e 32 01 46 INIT.FAN1.FAN2.F 4d10: 41 4e 54 01 53 4b 4e 4d 01 43 54 4d 50 08 4c 49 ANT.SKNM.CTMP.LI 4d20: 44 45 01 50 4d 45 45 01 50 57 42 45 01 52 4e 47 DE.PMEE.PWBE.RNG 4d30: 45 01 42 54 57 45 01 44 43 4b 45 01 00 02 53 4b E.BTWE.DCKE...SK 4d40: 54 58 08 53 4b 54 42 08 53 4b 54 43 08 53 4b 54 TX.SKTB.SKTC.SKT 4d50: 41 08 00 08 48 41 50 4c 02 48 41 50 52 01 00 05 A...HAPL.HAPR... 4d60: 42 54 44 54 01 42 54 50 57 01 42 54 44 53 01 42 BTDT.BTPW.BTDS.B 4d70: 54 50 53 01 42 54 53 57 01 42 54 57 4b 01 42 54 TPS.BTSW.BTWK.BT 4d80: 4c 44 01 00 01 42 52 54 53 08 43 4e 54 53 08 57 LD...BRTS.CNTS.W 4d90: 4c 41 54 01 42 54 41 54 01 57 4c 45 58 01 42 54 LAT.BTAT.WLEX.BT 4da0: 45 58 01 4b 4c 53 57 01 57 4c 4f 4b 01 00 02 50 EX.KLSW.WLOK...P 4db0: 54 49 44 08 43 50 55 54 08 45 50 4b 54 08 47 48 TID.CPUT.EPKT.GH 4dc0: 49 44 08 00 04 42 4d 46 30 03 42 54 59 30 01 42 ID...BMF0.BTY0.B 4dd0: 53 54 30 08 42 52 43 30 10 42 53 4e 30 10 42 50 ST0.BRC0.BSN0.BP 4de0: 56 30 10 42 44 56 30 10 42 44 43 30 10 42 46 43 V0.BDV0.BDC0.BFC 4df0: 30 10 47 41 55 30 08 43 59 43 30 08 42 50 43 30 0.GAU0.CYC0.BPC0 4e00: 10 42 41 43 30 10 42 41 54 30 08 42 54 57 30 10 .BAC0.BAT0.BTW0. 4e10: 42 44 4e 30 08 00 40 04 00 04 42 4d 46 31 03 42 BDN0..@...BMF1.B 4e20: 54 59 31 01 42 53 54 31 08 42 52 43 31 10 42 53 TY1.BST1.BRC1.BS 4e30: 4e 31 10 42 50 56 31 10 42 44 56 31 10 42 44 43 N1.BPV1.BDV1.BDC 4e40: 31 10 42 46 43 31 10 47 41 55 31 08 43 59 43 31 1.BFC1.GAU1.CYC1 4e50: 08 42 50 43 31 10 42 41 43 31 10 42 41 54 31 08 .BPC1.BAC1.BAT1. 4e60: 42 54 57 31 10 14 37 5f 51 31 31 00 70 0a 87 50 BTW1..7_Q11.p..P 4e70: 38 30 48 a0 13 49 47 44 53 5e 5e 5e 2e 47 46 58 80H..IGDS^^^.GFX 4e80: 30 42 52 54 4e 0a 87 a1 15 86 5e 5e 5e 2f 03 50 0BRTN.....^^^/.P 4e90: 45 47 50 56 47 41 5f 4c 43 44 5f 0a 87 14 37 5f EGPVGA_LCD_...7_ 4ea0: 51 31 32 00 70 0a 86 50 38 30 48 a0 13 49 47 44 Q12.p..P80H..IGD 4eb0: 53 5e 5e 5e 2e 47 46 58 30 42 52 54 4e 0a 86 a1 S^^^.GFX0BRTN... 4ec0: 15 86 5e 5e 5e 2f 03 50 45 47 50 56 47 41 5f 4c ..^^^/.PEGPVGA_L 4ed0: 43 44 5f 0a 86 14 40 05 5f 51 31 43 00 70 0d 3d CD_...@._Q1C.p.= 4ee0: 3d 3d 3d 3d 51 55 45 52 59 5f 31 43 3d 3d 3d 3d ====QUERY_1C==== 4ef0: 3d 00 5b 31 a0 31 56 49 44 4f a0 12 49 47 44 53 =.[1.1VIDO..IGDS 4f00: 5e 5e 5e 2e 47 46 58 30 47 48 44 53 00 a1 12 5e ^^^.GFX0GHDS...^ 4f10: 5e 5e 2f 03 50 45 47 50 56 47 41 5f 44 53 53 57 ^^/.PEGPVGA_DSSW 4f20: 70 00 56 49 44 4f 14 21 5f 51 31 44 00 70 0d 3d p.VIDO.!_Q1D.p.= 4f30: 3d 3d 3d 3d 51 55 45 52 59 5f 31 44 3d 3d 3d 3d ====QUERY_1D==== 4f40: 3d 00 5b 31 50 43 4c 4b 14 21 5f 51 31 45 00 70 =.[1PCLK.!_Q1E.p 4f50: 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 31 45 3d 3d .=====QUERY_1E== 4f60: 3d 3d 3d 00 5b 31 50 43 4c 4b 14 39 5f 51 32 35 ===.[1PCLK.9_Q25 4f70: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 35 .p.=====QUERY_25 4f80: 3d 3d 3d 3d 3d 00 5b 31 5b 22 0b e8 03 86 5e 5e =====.[1["....^^ 4f90: 42 41 54 31 0a 81 5b 22 0b e8 03 86 5e 5e 42 41 BAT1..["....^^BA 4fa0: 54 31 0a 80 14 2f 5f 51 33 34 00 70 0d 3d 3d 3d T1.../_Q34.p.=== 4fb0: 3d 3d 51 55 45 52 59 5f 33 34 3d 3d 3d 3d 3d 00 ==QUERY_34=====. 4fc0: 5b 31 a0 11 42 4b 45 59 50 48 53 53 0a 71 70 00 [1..BKEYPHSS.qp. 4fd0: 42 4b 45 59 14 32 5f 51 33 37 00 70 0d 3d 3d 3d BKEY.2_Q37.p.=== 4fe0: 3d 3d 51 55 45 52 59 5f 33 37 3d 3d 3d 3d 3d 00 ==QUERY_37=====. 4ff0: 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 03 86 5e [1.ACAD..["....^ 5000: 5e 42 41 54 31 0a 80 14 32 5f 51 33 38 00 70 0d ^BAT1...2_Q38.p. 5010: 3d 3d 3d 3d 3d 51 55 45 52 59 5f 33 38 3d 3d 3d =====QUERY_38=== 5020: 3d 3d 00 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 ==.[1.ACAD..[".. 5030: 03 86 5e 5e 42 41 54 31 0a 80 14 29 5f 51 32 44 ..^^BAT1...)_Q2D 5040: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 44 .p.=====QUERY_2D 5050: 3d 3d 3d 3d 3d 00 5b 31 70 00 44 54 53 4d 54 52 =====.[1p.DTSMTR 5060: 41 50 0a 46 14 29 5f 51 32 45 00 70 0d 3d 3d 3d AP.F.)_Q2E.p.=== 5070: 3d 3d 51 55 45 52 59 5f 32 45 3d 3d 3d 3d 3d 00 ==QUERY_2E=====. 5080: 5b 31 70 01 44 54 53 4d 54 52 41 50 0a 46 5b 80 [1p.DTSMTRAP.F[. 5090: 43 43 4c 4b 01 0b 10 10 0a 04 5b 81 20 43 43 4c CCLK......[. CCL 50a0: 4b 03 00 01 44 55 54 59 03 54 48 45 4e 01 00 03 K...DUTY.THEN... 50b0: 46 54 54 5f 01 00 08 54 53 54 53 01 5b 80 45 43 FTT_...TSTS.[.EC 50c0: 52 4d 03 00 0a ff 5b 81 44 04 45 43 52 4d 11 00 RM....[.D.ECRM.. 50d0: 40 4a 45 52 49 42 10 45 52 42 44 08 00 48 0a 53 @JERIB.ERBD..H.S 50e0: 44 54 4d 08 46 53 53 4e 04 46 41 4e 55 04 50 54 DTM.FSSN.FANU.PT 50f0: 56 4c 03 00 04 54 54 48 52 01 00 48 06 50 4a 49 VL...TTHR..H.PJI 5100: 44 08 00 08 00 48 1d 52 46 52 44 10 5b 01 46 41 D....H.RFRD.[.FA 5110: 4d 58 00 14 22 46 41 4e 47 01 5b 23 46 41 4d 58 MX.."FANG.[#FAMX 5120: ff ff 70 68 45 52 49 42 70 45 52 42 44 60 5b 27 ..phERIBpERBD`[' 5130: 46 41 4d 58 a4 60 14 22 46 41 4e 57 02 5b 23 46 FAMX.`."FANW.[#F 5140: 41 4d 58 ff ff 70 68 45 52 49 42 70 69 45 52 42 AMX..phERIBpiERB 5150: 44 5b 27 46 41 4d 58 a4 69 14 09 54 55 56 52 01 D['FAMX.i..TUVR. 5160: a4 0a 03 14 2e 54 48 52 4f 01 a0 09 93 68 00 a4 .....THRO....h.. 5170: 54 48 45 4e a1 1d a0 09 93 68 01 a4 44 55 54 59 THEN.....h..DUTY 5180: a1 11 a0 0a 93 68 0a 02 a4 54 54 48 52 a1 04 a4 .....h...TTHR... 5190: 0a ff 14 2a 43 4c 43 4b 01 a0 10 93 68 00 70 00 ...*CLCK....h.p. 51a0: 54 48 45 4e 70 00 46 54 54 5f a1 0d 70 68 44 55 THENp.FTT_..phDU 51b0: 54 59 70 01 54 48 45 4e a4 54 48 45 4e 14 37 50 TYp.THEN.THEN.7P 51c0: 43 4c 4b 00 70 50 54 56 4c 60 a0 10 93 60 00 70 CLK.pPTVL`...`.p 51d0: 00 54 48 45 4e 70 00 46 54 54 5f a1 19 76 60 70 .THENp.FTT_..v`p 51e0: 80 60 00 61 7b 61 0a 07 61 70 61 44 55 54 59 70 .`.a{a..apaDUTYp 51f0: 01 54 48 45 4e 5b 82 4b 22 42 41 54 31 08 5f 48 .THEN[.K"BAT1._H 5200: 49 44 0c 41 d0 0c 0a 08 5f 55 49 44 01 08 5f 50 ID.A...._UID.._P 5210: 43 4c 12 06 01 5f 53 42 5f 14 39 5f 53 54 41 00 CL..._SB_.9_STA. 5220: a0 29 90 45 43 4f 4b 93 45 43 44 59 00 a0 13 5e .).ECOK.ECDY...^ 5230: 5e 2e 45 43 30 5f 42 41 4c 30 5b 22 0a 14 a4 0a ^.EC0_BAL0[".... 5240: 1f a1 08 5b 22 0a 14 a4 0a 0f a1 08 5b 22 0a 14 ...[".......[".. 5250: a4 0a 1f 14 48 10 5f 42 49 46 00 08 53 54 41 54 ....H._BIF..STAT 5260: 12 3a 0d 01 0b a0 0f 0b a0 0f 01 0b 5c 2b 0b a4 .:..........\+.. 5270: 01 0a 9c 0b 08 01 0b c4 0e 0d 50 41 33 34 36 35 ..........PA3465 5280: 55 20 00 0d 33 36 35 38 51 00 0d 4c 69 2d 49 6f U ..3658Q..Li-Io 5290: 6e 00 0d 43 4f 4d 50 41 4c 20 00 a0 4b 07 90 45 n..COMPAL ..K..E 52a0: 43 4f 4b 93 45 43 44 59 00 70 5e 5e 2e 45 43 30 COK.ECDY.p^^.EC0 52b0: 5f 42 44 4e 30 60 a0 23 93 60 0a 08 70 0a b4 88 _BDN0`.#.`..p... 52c0: 53 54 41 54 0a 06 00 70 0d 50 41 33 34 35 37 55 STAT...p.PA3457U 52d0: 20 00 88 53 54 41 54 0a 09 00 a0 24 93 60 0a 20 ..STAT....$.`. 52e0: 70 0b 02 01 88 53 54 41 54 0a 06 00 70 0d 50 41 p....STAT...p.PA 52f0: 33 34 35 37 55 20 00 88 53 54 41 54 0a 09 00 5b 3457U ..STAT...[ 5300: 22 0a 14 70 5e 5e 2e 45 43 30 5f 42 44 43 30 42 "..p^^.EC0_BDC0B 5310: 46 43 31 5b 22 0a 14 a1 12 70 0d 4c 69 2d 49 6f FC1["....p.Li-Io 5320: 6e 00 88 53 54 41 54 0a 0b 00 a0 2c 42 46 43 31 n..STAT....,BFC1 5330: 78 42 46 43 31 0a 64 60 61 77 61 0a 64 61 70 61 xBFC1.d`awa.dapa 5340: 42 46 43 31 70 61 88 53 54 41 54 01 00 70 61 88 BFC1pa.STAT..pa. 5350: 53 54 41 54 0a 02 00 a4 53 54 41 54 14 45 0c 5f STAT....STAT.E._ 5360: 42 53 54 00 08 50 42 53 54 12 10 04 00 0c ff ff BST..PBST....... 5370: ff ff 0c ff ff ff ff 0b 5c 2b 70 0b 5c 2b 63 a0 ........\+p.\+c. 5380: 38 90 45 43 4f 4b 93 45 43 44 59 00 5b 22 0a 14 8.ECOK.ECDY.[".. 5390: 70 5e 5e 2e 45 43 30 5f 42 53 54 30 42 53 54 31 p^^.EC0_BST0BST1 53a0: 5b 22 0a 14 70 5e 5e 2e 45 43 30 5f 47 41 55 30 ["..p^^.EC0_GAU0 53b0: 42 47 55 31 5b 22 0a 14 a0 15 42 46 43 31 77 42 BGU1["....BFC1wB 53c0: 47 55 31 42 46 43 31 62 78 62 0a 64 64 62 a1 09 GU1BFC1bxb.ddb.. 53d0: 77 42 47 55 31 0a 28 62 70 42 53 54 31 88 50 42 wBGU1.(bpBST1.PB 53e0: 53 54 00 00 70 00 88 50 42 53 54 01 00 70 62 88 ST..p..PBST..pb. 53f0: 50 42 53 54 0a 02 00 70 63 88 50 42 53 54 0a 03 PBST...pc.PBST.. 5400: 00 a0 1b 94 45 43 44 59 00 76 45 43 44 59 a0 0e ....ECDY.vECDY.. 5410: 93 45 43 44 59 00 86 42 41 54 31 0a 80 a4 50 42 .ECDY..BAT1...PB 5420: 53 54 5b 82 2e 50 53 32 4b 08 5f 48 49 44 0c 41 ST[..PS2K._HID.A 5430: d0 03 03 08 5f 43 52 53 11 19 0a 16 47 01 60 00 ...._CRS....G.`. 5440: 60 00 01 01 47 01 64 00 64 00 01 01 23 02 00 01 `...G.d.d...#... 5450: 79 00 5b 82 1e 50 53 32 4d 08 5f 48 49 44 0c 41 y.[..PS2M._HID.A 5460: d0 0f 13 08 5f 43 52 53 11 09 0a 06 23 00 10 01 ...._CRS....#... 5470: 79 00 5b 82 43 6a 50 41 54 41 08 5f 41 44 52 0c y.[.CjPATA._ADR. 5480: 01 00 1f 00 5b 80 50 41 43 53 02 0a 40 0a c0 5b ....[.PACS..@..[ 5490: 81 49 04 50 41 43 53 03 50 52 49 54 10 00 10 50 .I.PACS.PRIT...P 54a0: 53 49 54 04 00 1c 53 59 4e 43 04 00 0c 53 44 54 SIT...SYNC...SDT 54b0: 30 02 00 02 53 44 54 31 02 00 4a 04 49 43 52 30 0...SDT1..J.ICR0 54c0: 04 49 43 52 31 04 49 43 52 32 04 49 43 52 33 04 .ICR1.ICR2.ICR3. 54d0: 49 43 52 34 04 49 43 52 35 04 5b 82 4b 63 50 52 ICR4.ICR5.[.KcPR 54e0: 49 44 08 5f 41 44 52 00 14 40 17 5f 47 54 4d 00 ID._ADR..@._GTM. 54f0: 08 50 42 55 46 11 17 0a 14 00 00 00 00 00 00 00 .PBUF........... 5500: 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 50 42 ..............PB 5510: 55 46 00 50 49 4f 30 8a 50 42 55 46 0a 04 44 4d UF.PIO0.PBUF..DM 5520: 41 30 8a 50 42 55 46 0a 08 50 49 4f 31 8a 50 42 A0.PBUF..PIO1.PB 5530: 55 46 0a 0c 44 4d 41 31 8a 50 42 55 46 0a 10 46 UF..DMA1.PBUF..F 5540: 4c 41 47 70 47 45 54 50 50 52 49 54 50 49 4f 30 LAGpGETPPRITPIO0 5550: 70 47 44 4d 41 7b 53 59 4e 43 01 00 7b 49 43 52 pGDMA{SYNC..{ICR 5560: 33 01 00 7b 49 43 52 30 01 00 53 44 54 30 7b 49 3..{ICR0..SDT0{I 5570: 43 52 31 01 00 44 4d 41 30 a0 14 93 44 4d 41 30 CR1..DMA0...DMA0 5580: 0c ff ff ff ff 70 50 49 4f 30 44 4d 41 30 a0 2e .....pPIO0DMA0.. 5590: 7b 50 52 49 54 0b 00 40 00 a0 14 93 7b 50 52 49 {PRIT..@....{PRI 55a0: 54 0a 90 00 0a 80 70 0b 84 03 50 49 4f 31 a1 0e T.....p...PIO1.. 55b0: 70 47 45 54 54 50 53 49 54 50 49 4f 31 a1 0b 70 pGETTPSITPIO1..p 55c0: 0c ff ff ff ff 50 49 4f 31 70 47 44 4d 41 7b 53 .....PIO1pGDMA{S 55d0: 59 4e 43 0a 02 00 7b 49 43 52 33 0a 02 00 7b 49 YNC...{ICR3...{I 55e0: 43 52 30 0a 02 00 53 44 54 31 7b 49 43 52 31 0a CR0...SDT1{ICR1. 55f0: 02 00 44 4d 41 31 a0 14 93 44 4d 41 31 0c ff ff ..DMA1...DMA1... 5600: ff ff 70 50 49 4f 31 44 4d 41 31 70 47 45 54 46 ..pPIO1DMA1pGETF 5610: 7b 53 59 4e 43 01 00 7b 53 59 4e 43 0a 02 00 50 {SYNC..{SYNC...P 5620: 52 49 54 46 4c 41 47 a0 2c 7b 93 50 49 4f 30 0c RITFLAG.,{.PIO0. 5630: ff ff ff ff 93 44 4d 41 30 0c ff ff ff ff 00 70 .....DMA0......p 5640: 0a 78 50 49 4f 30 70 0a 14 44 4d 41 30 70 0a 03 .xPIO0p..DMA0p.. 5650: 46 4c 41 47 a4 50 42 55 46 14 4c 2a 5f 53 54 4d FLAG.PBUF.L*_STM 5660: 03 8a 68 00 50 49 4f 30 8a 68 0a 04 44 4d 41 30 ..h.PIO0.h..DMA0 5670: 8a 68 0a 08 50 49 4f 31 8a 68 0a 0c 44 4d 41 31 .h..PIO1.h..DMA1 5680: 8a 68 0a 10 46 4c 41 47 a0 41 12 93 87 69 0b 00 .h..FLAG.A...i.. 5690: 02 7b 50 52 49 54 0b f0 c0 50 52 49 54 7b 53 59 .{PRIT...PRIT{SY 56a0: 4e 43 0a 02 53 59 4e 43 70 00 53 44 54 30 7b 49 NC..SYNCp.SDT0{I 56b0: 43 52 30 0a 02 49 43 52 30 7b 49 43 52 31 0a 02 CR0..ICR0{ICR1.. 56c0: 49 43 52 31 7b 49 43 52 33 0a 02 49 43 52 33 7b ICR1{ICR3..ICR3{ 56d0: 49 43 52 35 0a 02 49 43 52 35 8b 69 0a 62 57 34 ICR5..ICR5.i.bW4 56e0: 39 30 8b 69 0a 6a 57 35 33 30 8b 69 0a 7e 57 36 90.i.jW530.i.~W6 56f0: 33 30 8b 69 0a 80 57 36 34 30 8b 69 0a b0 57 38 30.i..W640.i..W8 5700: 38 30 8b 69 0a ba 57 39 33 30 7d 50 52 49 54 0b 80.i..W930}PRIT. 5710: 04 80 50 52 49 54 a0 1e 90 7b 46 4c 41 47 0a 02 ..PRIT...{FLAG.. 5720: 00 7b 57 34 39 30 0b 00 08 00 7d 50 52 49 54 0a .{W490....}PRIT. 5730: 02 50 52 49 54 7d 50 52 49 54 53 45 54 50 50 49 .PRIT}PRITSETPPI 5740: 4f 30 57 35 33 30 57 36 34 30 50 52 49 54 a0 4b O0W530W640PRIT.K 5750: 05 7b 46 4c 41 47 01 00 7d 53 59 4e 43 01 53 59 .{FLAG..}SYNC.SY 5760: 4e 43 70 53 44 4d 41 44 4d 41 30 53 44 54 30 a0 NCpSDMADMA0SDT0. 5770: 12 95 44 4d 41 30 0a 1e 7d 49 43 52 33 01 49 43 ..DMA0..}ICR3.IC 5780: 52 33 a0 12 95 44 4d 41 30 0a 3c 7d 49 43 52 30 R3...DMA0.<}ICR0 5790: 01 49 43 52 30 a0 14 7b 57 39 33 30 0b 00 20 00 .ICR0..{W930.. . 57a0: 7d 49 43 52 31 01 49 43 52 31 a0 4b 15 93 87 6a }ICR1.ICR1.K...j 57b0: 0b 00 02 7b 50 52 49 54 0b 0f bf 50 52 49 54 70 ...{PRIT...PRITp 57c0: 00 50 53 49 54 7b 53 59 4e 43 01 53 59 4e 43 70 .PSIT{SYNC.SYNCp 57d0: 00 53 44 54 31 7b 49 43 52 30 01 49 43 52 30 7b .SDT1{ICR0.ICR0{ 57e0: 49 43 52 31 01 49 43 52 31 7b 49 43 52 33 01 49 ICR1.ICR1{ICR3.I 57f0: 43 52 33 7b 49 43 52 35 01 49 43 52 35 8b 6a 0a CR3{ICR5.ICR5.j. 5800: 62 57 34 39 31 8b 6a 0a 6a 57 35 33 31 8b 6a 0a bW491.j.jW531.j. 5810: 7e 57 36 33 31 8b 6a 0a 80 57 36 34 31 8b 6a 0a ~W631.j..W641.j. 5820: b0 57 38 38 31 8b 6a 0a ba 57 39 33 31 7d 50 52 .W881.j..W931}PR 5830: 49 54 0b 40 80 50 52 49 54 a0 1e 90 7b 46 4c 41 IT.@.PRIT...{FLA 5840: 47 0a 08 00 7b 57 34 39 31 0b 00 08 00 7d 50 52 G...{W491....}PR 5850: 49 54 0a 20 50 52 49 54 a0 4c 04 7b 46 4c 41 47 IT. PRIT.L.{FLAG 5860: 0a 10 00 7d 50 52 49 54 0b 00 40 50 52 49 54 a0 ...}PRIT..@PRIT. 5870: 13 94 50 49 4f 31 0a f0 7d 50 52 49 54 0a 80 50 ..PIO1..}PRIT..P 5880: 52 49 54 a1 21 7d 50 52 49 54 0a 10 50 52 49 54 RIT.!}PRIT..PRIT 5890: 70 53 45 54 54 50 49 4f 31 57 35 33 31 57 36 34 pSETTPIO1W531W64 58a0: 31 50 53 49 54 a0 40 06 7b 46 4c 41 47 0a 04 00 1PSIT.@.{FLAG... 58b0: 7d 53 59 4e 43 0a 02 53 59 4e 43 70 53 44 4d 41 }SYNC..SYNCpSDMA 58c0: 44 4d 41 31 53 44 54 31 a0 13 95 44 4d 41 31 0a DMA1SDT1...DMA1. 58d0: 1e 7d 49 43 52 33 0a 02 49 43 52 33 a0 13 95 44 .}ICR3..ICR3...D 58e0: 4d 41 31 0a 3c 7d 49 43 52 30 0a 02 49 43 52 30 MA1.<}ICR0..ICR0 58f0: a0 15 7b 57 39 33 31 0b 00 20 00 7d 49 43 52 31 ..{W931.. .}ICR1 5900: 0a 02 49 43 52 31 5b 82 47 10 50 5f 44 30 08 5f ..ICR1[.G.P_D0._ 5910: 41 44 52 00 14 4a 0f 5f 47 54 46 00 08 50 49 42 ADR..J._GTF..PIB 5920: 30 11 11 0a 0e 03 00 00 00 00 a0 ef 03 00 00 00 0............... 5930: 00 a0 ef 8c 50 49 42 30 01 50 4d 44 30 8c 50 49 ....PIB0.PMD0.PI 5940: 42 30 0a 08 44 4d 44 30 a0 40 06 7b 50 52 49 54 B0..DMD0.@.{PRIT 5950: 0a 02 00 a0 13 93 7b 50 52 49 54 0a 09 00 0a 08 ......{PRIT..... 5960: 70 0a 08 50 4d 44 30 a1 41 04 70 0a 0a 50 4d 44 p..PMD0.A.p..PMD 5970: 30 7a 7b 50 52 49 54 0b 00 03 00 0a 08 60 7a 7b 0z{PRIT......`z{ 5980: 50 52 49 54 0b 00 30 00 0a 0c 61 72 60 61 62 a0 PRIT..0...ar`ab. 5990: 0c 93 0a 03 62 70 0a 0b 50 4d 44 30 a0 0c 93 0a ....bp..PMD0.... 59a0: 05 62 70 0a 0c 50 4d 44 30 a1 07 70 01 50 4d 44 .bp..PMD0..p.PMD 59b0: 30 a0 43 04 7b 53 59 4e 43 01 00 70 7d 53 44 54 0.C.{SYNC..p}SDT 59c0: 30 0a 40 00 44 4d 44 30 a0 2c 7b 49 43 52 31 01 0.@.DMD0.,{ICR1. 59d0: 00 a0 13 7b 49 43 52 30 01 00 72 44 4d 44 30 0a ...{ICR0..rDMD0. 59e0: 02 44 4d 44 30 a0 0f 7b 49 43 52 33 01 00 70 0a .DMD0..{ICR3..p. 59f0: 45 44 4d 44 30 a1 14 7d 74 7b 50 4d 44 30 0a 07 EDMD0..}t{PMD0.. 5a00: 00 0a 02 00 0a 20 44 4d 44 30 a4 50 49 42 30 5b ..... DMD0.PIB0[ 5a10: 82 46 10 50 5f 44 31 08 5f 41 44 52 01 14 49 0f .F.P_D1._ADR..I. 5a20: 5f 47 54 46 00 08 50 49 42 31 11 11 0a 0e 03 00 _GTF..PIB1...... 5a30: 00 00 00 b0 ef 03 00 00 00 00 b0 ef 8c 50 49 42 .............PIB 5a40: 31 01 50 4d 44 31 8c 50 49 42 31 0a 08 44 4d 44 1.PMD1.PIB1..DMD 5a50: 31 a0 4b 05 7b 50 52 49 54 0a 20 00 a0 13 93 7b 1.K.{PRIT. ....{ 5a60: 50 52 49 54 0a 90 00 0a 80 70 0a 08 50 4d 44 31 PRIT.....p..PMD1 5a70: a1 3c 72 7b 50 53 49 54 0a 03 00 7a 7b 50 53 49 .. 0050: 80 49 ee 6a 65 26 72 1e cd bf 5f 2f 96 d6 c0 0a .I.je&r..._/.... 0060: 92 f5 06 b5 00 b2 3b 29 02 e2 4c 8d c2 f2 bc 41 ......;)..L....A 0070: 77 9c 70 f0 f3 1b 09 d2 63 5a dc a8 83 f8 5e c9 w.p.....cZ....^. 0080: 15 95 f9 fa fd dc 05 b7 4d 67 7f 2d b3 84 33 20 ........Mg.-..3 0090: e1 d1 79 2a a7 6a 77 d1 b6 20 2a 76 42 c5 d5 e9 ..y*.jw.. *vB... 00a0: b6 43 40 55 44 c3 c9 37 99 5f 41 97 70 f3 d1 f6 .C@UD..7._A.p... 00b0: 07 ec 7b 1a 29 a1 c1 f1 91 fd 48 86 6e 3e ce cb ..{.).....H.n>.. 00c0: 01 00 00 00 b6 00 00 00 00 00 02 00 4c 45 4e 4f ............LENO 00d0: 56 4f 54 50 2d 36 38 20 20 20 57 49 4e 44 4f 57 VOTP-68 WINDOW 00e0: 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 S .............. 00f0: 00 00 00 00 00 00 8a 6e 2e c9 36 e6 7f 10 8a ea .......n..6..... 0100: 14 ad d2 93 b7 6d 9b 73 ad 83 36 b8 6c a7 a7 ee .....m.s..6.l... 0110: 37 47 16 fe f3 fc cd c7 89 84 06 16 91 0b 1e 81 7G.............. 0120: 11 42 b1 35 52 57 f6 6b bb 5f a5 81 e2 ff 89 8a .B.5RW.k._...... 0130: 95 c3 4d fc e9 56 4f 4c 34 cc 99 5e 62 e1 90 8a ..M..VOL4..^b... 0140: 54 be 4a 00 5c 9b a0 86 41 46 66 9d e2 f2 e7 36 T.J.\...AFf....6 0150: 9c 33 91 27 e7 8d 5c a1 d8 f9 a4 61 8a 1c 04 07 .3.'..\....a.... 0160: e3 2a 1e 14 f1 bd 7f 4c 09 ff 19 11 a9 d4 74 ca .*.....L......t. 0170: 11 9e dc 54 39 bf ...T9. APIC @ 0xbf6dff70 0000: 41 50 49 43 68 00 00 00 01 13 50 54 4c 54 44 20 APICh.....PTLTD 0010: 09 20 41 50 49 43 20 20 00 00 04 06 20 4c 54 50 . APIC .... LTP 0020: 00 00 00 00 00 00 e0 fe 01 00 00 00 00 08 00 00 ................ 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0c 02 00 ................ 0040: 00 00 c0 fe 00 00 00 00 04 06 00 05 00 01 04 06 ................ 0050: 01 05 00 01 02 0a 00 00 02 00 00 00 05 00 02 0a ................ 0060: 00 09 09 00 00 00 0d 00 ........ BOOT @ 0xbf6dffd8 0000: 42 4f 4f 54 28 00 00 00 01 a5 50 54 4c 54 44 20 BOOT(.....PTLTD 0010: 24 53 42 46 54 42 4c 24 00 00 04 06 20 4c 54 50 $SBFTBL$.... LTP 0020: 01 00 00 00 36 00 00 00 ....6... SSDT @ 0xbf6d98bd 0000: 53 53 44 54 ad 02 00 00 01 59 53 61 74 61 52 65 SSDT.....YSataRe 0010: 53 61 74 61 41 68 63 69 00 10 00 00 49 4e 54 4c SataAhci....INTL 0020: 24 06 05 20 10 48 28 5c 2f 03 5f 53 42 5f 50 43 $.. .H(\/._SB_PC 0030: 49 30 53 41 54 41 5b 82 4f 0c 50 52 54 30 08 5f I0SATA[.O.PRT0._ 0040: 41 44 52 0b ff ff 14 44 0b 5f 53 44 44 01 08 47 ADR....D._SDD..G 0050: 42 55 30 11 0a 0a 07 00 00 00 00 00 a0 00 8c 47 BU0............G 0060: 42 55 30 0a 00 47 42 30 30 8c 47 42 55 30 0a 01 BU0..GB00.GBU0.. 0070: 47 42 30 31 8c 47 42 55 30 0a 02 47 42 30 32 8c GB01.GBU0..GB02. 0080: 47 42 55 30 0a 03 47 42 30 33 8c 47 42 55 30 0a GBU0..GB03.GBU0. 0090: 04 47 42 30 34 8c 47 42 55 30 0a 05 47 42 30 35 .GB04.GBU0..GB05 00a0: 8c 47 42 55 30 0a 06 47 42 30 36 a0 46 04 93 87 .GBU0..GB06.F... 00b0: 68 0b 00 02 8b 68 0a 9c 57 37 38 30 a0 1e 7b 57 h....h..W780..{W 00c0: 37 38 30 0a 08 00 70 0a 10 47 42 30 30 70 0a 03 780...p..GB00p.. 00d0: 47 42 30 31 70 0a ef 47 42 30 36 a1 16 70 0a 90 GB01p..GB06..p.. 00e0: 47 42 30 30 70 0a 03 47 42 30 31 70 0a ef 47 42 GB00p..GB01p..GB 00f0: 30 36 70 47 42 55 30 47 54 46 30 14 0b 5f 47 54 06pGBU0GTF0.._GT 0100: 46 00 a4 47 54 46 30 5b 82 41 0d 50 52 54 31 08 F..GTF0[.A.PRT1. 0110: 5f 41 44 52 0c ff ff 01 00 14 44 0b 5f 53 44 44 _ADR......D._SDD 0120: 01 08 47 42 55 31 11 0a 0a 07 00 00 00 00 00 a0 ..GBU1.......... 0130: 00 8c 47 42 55 31 0a 00 47 42 31 30 8c 47 42 55 ..GBU1..GB10.GBU 0140: 31 0a 01 47 42 31 31 8c 47 42 55 31 0a 02 47 42 1..GB11.GBU1..GB 0150: 31 32 8c 47 42 55 31 0a 03 47 42 31 33 8c 47 42 12.GBU1..GB13.GB 0160: 55 31 0a 04 47 42 31 34 8c 47 42 55 31 0a 05 47 U1..GB14.GBU1..G 0170: 42 31 35 8c 47 42 55 31 0a 06 47 42 31 36 a0 46 B15.GBU1..GB16.F 0180: 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 38 31 a0 ...h....h..W781. 0190: 1e 7b 57 37 38 31 0a 08 00 70 0a 10 47 42 31 30 .{W781...p..GB10 01a0: 70 0a 03 47 42 31 31 70 0a ef 47 42 31 36 a1 16 p..GB11p..GB16.. 01b0: 70 0a 90 47 42 31 30 70 0a 03 47 42 31 31 70 0a p..GB10p..GB11p. 01c0: ef 47 42 31 36 70 47 42 55 31 47 54 46 31 14 0b .GB16pGBU1GTF1.. 01d0: 5f 47 54 46 00 a4 47 54 46 31 5b 82 41 0d 50 52 _GTF..GTF1[.A.PR 01e0: 54 32 08 5f 41 44 52 0c ff ff 02 00 14 44 0b 5f T2._ADR......D._ 01f0: 53 44 44 01 08 47 42 55 32 11 0a 0a 07 00 00 00 SDD..GBU2....... 0200: 00 00 a0 00 8c 47 42 55 32 0a 00 47 42 32 30 8c .....GBU2..GB20. 0210: 47 42 55 32 0a 01 47 42 32 31 8c 47 42 55 32 0a GBU2..GB21.GBU2. 0220: 02 47 42 32 32 8c 47 42 55 32 0a 03 47 42 32 33 .GB22.GBU2..GB23 0230: 8c 47 42 55 32 0a 04 47 42 32 34 8c 47 42 55 32 .GBU2..GB24.GBU2 0240: 0a 05 47 42 32 35 8c 47 42 55 32 0a 06 47 42 32 ..GB25.GBU2..GB2 0250: 36 a0 46 04 93 87 68 0b 00 02 8b 68 0a 9c 57 37 6.F...h....h..W7 0260: 38 32 a0 1e 7b 57 37 38 32 0a 08 00 70 0a 10 47 82..{W782...p..G 0270: 42 32 30 70 0a 03 47 42 32 31 70 0a ef 47 42 32 B20p..GB21p..GB2 0280: 36 a1 16 70 0a 90 47 42 32 30 70 0a 03 47 42 32 6..p..GB20p..GB2 0290: 31 70 0a ef 47 42 32 36 70 47 42 55 32 47 54 46 1p..GB26pGBU2GTF 02a0: 32 14 0b 5f 47 54 46 00 a4 47 54 46 32 2.._GTF..GTF2 SSDT @ 0xbf6d981a 0000: 53 53 44 54 a3 00 00 00 01 ed 42 72 74 52 65 66 SSDT......BrtRef 0010: 44 44 30 31 42 52 54 00 00 10 00 00 49 4e 54 4c DD01BRT.....INTL 0020: 24 06 05 20 10 4e 07 5c 2f 04 5f 53 42 5f 50 43 $.. .N.\/._SB_PC 0030: 49 30 47 46 58 30 44 44 30 33 14 1e 5f 42 43 4c I0GFX0DD03.._BCL 0040: 00 a4 12 16 0a 0a 46 0a 28 0a 00 0a 0a 0a 14 0a ......F.(....... 0050: 1e 0a 28 0a 32 0a 3c 0a 46 14 25 5f 42 43 4d 01 ..(.2.<.F.%_BCM. 0060: 78 68 0a 0a 60 61 70 61 5c 2f 05 5f 53 42 5f 50 xh..`apa\/._SB_P 0070: 43 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 14 CI0LPCBEC0_BRTS. 0080: 23 5f 42 51 43 00 77 5c 2f 05 5f 53 42 5f 50 43 #_BQC.w\/._SB_PC 0090: 49 30 4c 50 43 42 45 43 30 5f 42 52 54 53 0a 0a I0LPCBEC0_BRTS.. 00a0: 60 a4 60 `.` SSDT @ 0xbf6d8e10 0000: 53 53 44 54 5f 02 00 00 01 c8 50 6d 52 65 66 00 SSDT_.....PmRef. 0010: 43 70 75 30 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu0Tst..0..INTL 0020: 24 06 05 20 10 4a 23 5c 2e 5f 50 52 5f 43 50 55 $.. .J#\._PR_CPU 0030: 30 08 5f 54 50 43 0a 00 14 4d 06 5f 50 54 43 00 0._TPC...M._PTC. 0040: a0 37 7b 50 44 43 30 0a 04 00 a4 12 2c 02 11 14 .7{PDC0.....,... 0050: 0a 11 82 0c 00 7f 00 00 00 00 00 00 00 00 00 00 ................ 0060: 00 79 00 11 14 0a 11 82 0c 00 7f 00 00 00 00 00 .y.............. 0070: 00 00 00 00 00 00 79 00 a4 12 2c 02 11 14 0a 11 ......y...,..... 0080: 82 0c 00 01 04 01 00 10 10 00 00 00 00 00 00 79 ...............y 0090: 00 11 14 0a 11 82 0c 00 01 04 01 00 10 10 00 00 ................ 00a0: 00 00 00 00 79 00 08 54 53 53 49 12 41 07 08 12 ....y..TSSI.A... 00b0: 0d 05 0a 64 0b e8 03 0a 00 0a 00 0a 00 12 0d 05 ...d............ 00c0: 0a 58 0b 6b 03 0a 00 0a 0f 0a 00 12 0d 05 0a 4b .X.k...........K 00d0: 0b ee 02 0a 00 0a 0e 0a 00 12 0d 05 0a 3f 0b 71 .............?.q 00e0: 02 0a 00 0a 0d 0a 00 12 0d 05 0a 32 0b f4 01 0a ...........2.... 00f0: 00 0a 0c 0a 00 12 0d 05 0a 26 0b 77 01 0a 00 0a .........&.w.... 0100: 0b 0a 00 12 0c 05 0a 19 0a fa 0a 00 0a 0a 0a 00 ................ 0110: 12 0c 05 0a 0d 0a 7d 0a 00 0a 09 0a 00 08 54 53 ......}.......TS 0120: 53 4d 12 41 07 08 12 0d 05 0a 64 0b e8 03 0a 00 SM.A......d..... 0130: 0a 00 0a 00 12 0d 05 0a 58 0b 6b 03 0a 00 0a 1e ........X.k..... 0140: 0a 00 12 0d 05 0a 4b 0b ee 02 0a 00 0a 1c 0a 00 ......K......... 0150: 12 0d 05 0a 3f 0b 71 02 0a 00 0a 1a 0a 00 12 0d ....?.q......... 0160: 05 0a 32 0b f4 01 0a 00 0a 18 0a 00 12 0d 05 0a ..2............. 0170: 26 0b 77 01 0a 00 0a 16 0a 00 12 0c 05 0a 19 0a &.w............. 0180: fa 0a 00 0a 14 0a 00 12 0c 05 0a 0d 0a 7d 0a 00 .............}.. 0190: 0a 12 0a 00 08 54 53 53 46 0a 00 14 43 08 5f 54 .....TSSF...C._T 01a0: 53 53 00 a0 47 06 90 92 54 53 53 46 5b 12 5f 50 SS..G...TSSF[._P 01b0: 53 53 00 70 5f 50 53 53 60 70 87 60 61 76 61 70 SS.p_PSS`p.`avap 01c0: 83 88 83 88 60 61 00 0a 01 00 62 70 0a 00 63 a2 ....`a....bp..c. 01d0: 35 95 63 87 54 53 53 49 70 78 77 62 74 0a 08 63 5.c.TSSIpxwbt..c 01e0: 00 00 0a 08 00 00 64 70 64 88 83 88 54 53 53 49 ......dpd...TSSI 01f0: 63 00 0a 01 00 70 64 88 83 88 54 53 53 4d 63 00 c....pd...TSSMc. 0200: 0a 01 00 75 63 70 ff 54 53 53 46 a0 0e 7b 50 44 ...ucp.TSSF..{PD 0210: 43 30 0a 04 00 a4 54 53 53 4d a4 54 53 53 49 14 C0....TSSM.TSSI. 0220: 3f 5f 54 53 44 00 a0 27 90 7b 43 46 47 44 0c 00 ?_TSD..'.{CFGD.. 0230: 00 00 01 00 92 7b 50 44 43 30 0a 04 00 a4 12 0f .....{PDC0...... 0240: 01 12 0c 05 0a 05 0a 00 0a 00 0a fd 0a 02 a4 12 ................ 0250: 0f 01 12 0c 05 0a 05 0a 00 0a 00 0a fc 0a 01 ............... SSDT @ 0xbf6d8d6a 0000: 53 53 44 54 a6 00 00 00 01 6d 50 6d 52 65 66 00 SSDT.....mPmRef. 0010: 43 70 75 31 54 73 74 00 00 30 00 00 49 4e 54 4c Cpu1Tst..0..INTL 0020: 24 06 05 20 10 41 08 5c 2e 5f 50 52 5f 43 50 55 $.. .A.\._PR_CPU 0030: 31 08 5f 54 50 43 0a 00 14 16 5f 50 54 43 00 a4 1._TPC...._PTC.. 0040: 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 54 43 14 \/._PR_CPU0_PTC. 0050: 16 5f 54 53 53 00 a4 5c 2f 03 5f 50 52 5f 43 50 ._TSS..\/._PR_CP 0060: 55 30 5f 54 53 53 14 3f 5f 54 53 44 00 a0 27 90 U0_TSS.?_TSD..'. 0070: 7b 43 46 47 44 0c 00 00 00 01 00 92 7b 50 44 43 {CFGD.......{PDC 0080: 31 0a 04 00 a4 12 0f 01 12 0c 05 0a 05 0a 00 0a 1............... 0090: 00 0a fd 0a 02 a4 12 0f 01 12 0c 05 0a 05 0a 00 ................ 00a0: 0a 01 0a fc 0a 01 ...... SSDT @ 0xbf6d8884 0000: 53 53 44 54 e6 04 00 00 01 df 50 6d 52 65 66 00 SSDT......PmRef. 0010: 43 70 75 50 6d 00 00 00 00 30 00 00 49 4e 54 4c CpuPm....0..INTL 0020: 24 06 05 20 10 45 08 5c 00 08 53 53 44 54 12 43 $.. .E.\..SSDT.C 0030: 05 0c 0d 43 50 55 30 49 53 54 20 00 0c 9e 95 6d ...CPU0IST ....m 0040: bf 0c b4 01 00 00 0d 43 50 55 31 49 53 54 20 00 .......CPU1IST . 0050: 0c 52 97 6d bf 0c c8 00 00 00 0d 43 50 55 30 43 .R.m.......CPU0C 0060: 53 54 20 00 0c 6f 90 6d bf 0c aa 04 00 00 0d 43 ST ..o.m.......C 0070: 50 55 31 43 53 54 20 00 0c 19 95 6d bf 0c 85 00 PU1CST ....m.... 0080: 00 00 08 43 46 47 44 0c f1 69 3f 11 08 5c 50 44 ...CFGD..i?..\PD 0090: 43 30 0c 00 00 00 80 08 5c 50 44 43 31 0c 00 00 C0......\PDC1... 00a0: 00 80 08 5c 53 44 54 4c 0a 00 10 4d 21 5c 2e 5f ...\SDTL...M!\._ 00b0: 50 52 5f 43 50 55 30 08 48 49 30 5f 0a 00 08 48 PR_CPU0.HI0_...H 00c0: 43 30 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a C0_...H._PDC..h. 00d0: 00 52 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 .REVS.h..SIZEp.h 00e0: 60 70 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a `pt`...a[.h.@wa. 00f0: 08 00 54 45 4d 50 08 53 54 53 30 11 07 0a 04 00 ..TEMP.STS0..... 0100: 00 00 00 73 53 54 53 30 54 45 4d 50 62 5f 4f 53 ...sSTS0TEMPb_OS 0110: 43 11 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 C......w@.).G... 0120: 70 58 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 pXq9SREVSSIZEb.I 0130: 19 5f 4f 53 43 04 8a 6b 0a 00 53 54 53 30 8a 6b ._OSC..k..STS0.k 0140: 0a 04 43 41 50 30 8a 68 0a 00 49 49 44 30 8a 68 ..CAP0.h..IID0.h 0150: 0a 04 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 ..IID1.h..IID2.h 0160: 0a 0c 49 49 44 33 08 55 49 44 30 11 13 0a 10 16 ..IID3.UID0..... 0170: a6 77 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a .w@.).G...pXq9S. 0180: 55 49 44 30 0a 00 45 49 44 30 8a 55 49 44 30 0a UID0..EID0.UID0. 0190: 04 45 49 44 31 8a 55 49 44 30 0a 08 45 49 44 32 .EID1.UID0..EID2 01a0: 8a 55 49 44 30 0a 0c 45 49 44 33 a0 32 92 90 90 .UID0..EID3.2... 01b0: 93 49 49 44 30 45 49 44 30 93 49 49 44 31 45 49 .IID0EID0.IID1EI 01c0: 44 31 90 93 49 49 44 32 45 49 44 32 93 49 49 44 D1..IID2EID2.IID 01d0: 33 45 49 44 33 70 0a 06 53 54 53 30 a4 6b a0 0f 3EID3p..STS0.k.. 01e0: 92 93 69 0a 01 70 0a 0a 53 54 53 30 a4 6b 7d 7b ..i..p..STS0.k}{ 01f0: 50 44 43 30 0c ff ff ff 7f 00 43 41 50 30 50 44 PDC0......CAP0PD 0200: 43 30 70 7b 50 44 43 30 0a ff 00 50 43 50 30 a0 C0p{PDC0...PCP0. 0210: 4c 05 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b L.{CFGD....A...{ 0220: 43 46 47 44 0c 00 00 00 01 00 93 7b 50 44 43 30 CFGD.......{PDC0 0230: 0a 09 00 0a 09 92 7b 53 44 54 4c 0a 01 00 7d 53 ......{SDTL...}S 0240: 44 54 4c 0a 01 53 44 54 4c 5b 80 49 53 54 30 00 DTL..SDTL[.IST0. 0250: 83 88 53 53 44 54 0a 01 00 83 88 53 53 44 54 0a ..SSDT.....SSDT. 0260: 02 00 5b 20 49 53 54 30 48 49 30 5f a0 49 05 7b ..[ IST0HI0_.I.{ 0270: 43 46 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 CFGD....N...{CFG 0280: 44 0c 00 00 00 01 00 7b 50 44 43 30 0a 18 00 92 D......{PDC0.... 0290: 7b 53 44 54 4c 0a 02 00 7d 53 44 54 4c 0a 02 53 {SDTL...}SDTL..S 02a0: 44 54 4c 5b 80 43 53 54 30 00 83 88 53 53 44 54 DTL[.CST0...SSDT 02b0: 0a 07 00 83 88 53 53 44 54 0a 08 00 5b 20 43 53 .....SSDT...[ CS 02c0: 54 30 48 43 30 5f a4 6b 10 4d 21 5c 2e 5f 50 52 T0HC0_.k.M!\._PR 02d0: 5f 43 50 55 31 08 48 49 31 5f 0a 00 08 48 43 31 _CPU1.HI1_...HC1 02e0: 5f 0a 00 14 48 06 5f 50 44 43 01 8a 68 0a 00 52 _...H._PDC..h..R 02f0: 45 56 53 8a 68 0a 04 53 49 5a 45 70 87 68 60 70 EVS.h..SIZEp.h`p 0300: 74 60 0a 08 00 61 5b 13 68 0a 40 77 61 0a 08 00 t`...a[.h.@wa... 0310: 54 45 4d 50 08 53 54 53 31 11 07 0a 04 00 00 00 TEMP.STS1....... 0320: 00 73 53 54 53 31 54 45 4d 50 62 5f 4f 53 43 11 .sSTS1TEMPb_OSC. 0330: 13 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 70 58 .....w@.).G...pX 0340: 71 39 53 52 45 56 53 53 49 5a 45 62 14 49 19 5f q9SREVSSIZEb.I._ 0350: 4f 53 43 04 8a 6b 0a 00 53 54 53 31 8a 6b 0a 04 OSC..k..STS1.k.. 0360: 43 41 50 31 8a 68 0a 00 49 49 44 30 8a 68 0a 04 CAP1.h..IID0.h.. 0370: 49 49 44 31 8a 68 0a 08 49 49 44 32 8a 68 0a 0c IID1.h..IID2.h.. 0380: 49 49 44 33 08 55 49 44 31 11 13 0a 10 16 a6 77 IID3.UID1......w 0390: 40 0c 29 be 47 9e bd d8 70 58 71 39 53 8a 55 49 @.).G...pXq9S.UI 03a0: 44 31 0a 00 45 49 44 30 8a 55 49 44 31 0a 04 45 D1..EID0.UID1..E 03b0: 49 44 31 8a 55 49 44 31 0a 08 45 49 44 32 8a 55 ID1.UID1..EID2.U 03c0: 49 44 31 0a 0c 45 49 44 33 a0 32 92 90 90 93 49 ID1..EID3.2....I 03d0: 49 44 30 45 49 44 30 93 49 49 44 31 45 49 44 31 ID0EID0.IID1EID1 03e0: 90 93 49 49 44 32 45 49 44 32 93 49 49 44 33 45 ..IID2EID2.IID3E 03f0: 49 44 33 70 0a 06 53 54 53 31 a4 6b a0 0f 92 93 ID3p..STS1.k.... 0400: 69 0a 01 70 0a 0a 53 54 53 31 a4 6b 7d 7b 50 44 i..p..STS1.k}{PD 0410: 43 31 0c ff ff ff 7f 00 43 41 50 31 50 44 43 31 C1......CAP1PDC1 0420: 70 7b 50 44 43 31 0a ff 00 50 43 50 31 a0 4c 05 p{PDC1...PCP1.L. 0430: 7b 43 46 47 44 0a 01 00 a0 41 05 90 90 7b 43 46 {CFGD....A...{CF 0440: 47 44 0c 00 00 00 01 00 93 7b 50 44 43 31 0a 09 GD.......{PDC1.. 0450: 00 0a 09 92 7b 53 44 54 4c 0a 10 00 7d 53 44 54 ....{SDTL...}SDT 0460: 4c 0a 10 53 44 54 4c 5b 80 49 53 54 31 00 83 88 L..SDTL[.IST1... 0470: 53 53 44 54 0a 04 00 83 88 53 53 44 54 0a 05 00 SSDT.....SSDT... 0480: 5b 20 49 53 54 31 48 49 31 5f a0 49 05 7b 43 46 [ IST1HI1_.I.{CF 0490: 47 44 0a f0 00 a0 4e 04 90 90 7b 43 46 47 44 0c GD....N...{CFGD. 04a0: 00 00 00 01 00 7b 50 44 43 31 0a 18 00 92 7b 53 .....{PDC1....{S 04b0: 44 54 4c 0a 20 00 7d 53 44 54 4c 0a 20 53 44 54 DTL. .}SDTL. SDT 04c0: 4c 5b 80 43 53 54 31 00 83 88 53 53 44 54 0a 0a L[.CST1...SSDT.. 04d0: 00 83 88 53 53 44 54 0a 0b 00 5b 20 43 53 54 31 ...SSDT...[ CST1 04e0: 48 43 31 5f a4 6b HC1_.k XSDT @ 0xbf6d87f0 0000: 58 53 44 54 94 00 00 00 01 c2 4c 45 4e 4f 56 4f XSDT......LENOVO 0010: 54 50 2d 36 38 20 20 20 00 00 04 06 20 4c 54 50 TP-68 .... LTP 0020: 00 00 00 00 d2 fb 6d bf 00 00 00 00 c6 fc 6d bf ......m.......m. 0030: 00 00 00 00 2e fd 6d bf 00 00 00 00 66 fd 6d bf ......m.....f.m. 0040: 00 00 00 00 a2 fd 6d bf 00 00 00 00 d4 fd 6d bf ......m.......m. 0050: 00 00 00 00 fa fd 6d bf 00 00 00 00 70 ff 6d bf ......m.....p.m. 0060: 00 00 00 00 d8 ff 6d bf 00 00 00 00 bd 98 6d bf ......m.......m. 0070: 00 00 00 00 1a 98 6d bf 00 00 00 00 10 8e 6d bf ......m.......m. 0080: 00 00 00 00 6a 8d 6d bf 00 00 00 00 84 88 6d bf ....j.m.......m. 0090: 00 00 00 00 .... RSD PTR @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... fwts-test/osilinux-0001/osilinux-0001.log000066400000000000000000000036301465205512700202120ustar00rootroot00000000000000osilinux osilinux: Disassemble DSDT to check for _OSI("Linux"). osilinux ---------------------------------------------------------- osilinux Test 1 of 1: Disassemble DSDT to check for _OSI("Linux"). osilinux This is not strictly a failure mode, it just alerts one osilinux that this has been defined in the DSDT and probably should osilinux be avoided since the Linux ACPI driver matches onto the osilinux Windows _OSI strings osilinux { osilinux If (_OSI ("Linux")) osilinux { osilinux Store (One, LINX) /* \LINX */ osilinux Store (Zero, ECDY) /* \ECDY */ osilinux } osilinux If (_OSI ("Windows 2001")) osilinux { osilinux Store (0x07D1, OSYS) /* \OSYS */ osilinux } osilinux If (_OSI ("Windows 2001 SP1")) osilinux { osilinux Store (0x07D1, OSYS) /* \OSYS */ osilinux } osilinux If (_OSI ("Windows 2001 SP2")) osilinux { osilinux Store (0x07D2, OSYS) /* \OSYS */ osilinux } osilinux If (_OSI ("Windows 2006")) osilinux { osilinux Store (0x07D6, OSYS) /* \OSYS */ osilinux } osilinux } osilinux WARNING: Test 1, DSDT implements a deprecated osilinux _OSI("Linux") test. osilinux osilinux ========================================================== osilinux 0 passed, 0 failed, 1 warning, 0 aborted, 0 skipped, 0 osilinux info only. osilinux ========================================================== fwts-test/osilinux-0001/osilinux-0002.log000066400000000000000000000015161465205512700202140ustar00rootroot00000000000000osilinux osilinux: Disassemble DSDT to check for _OSI("Linux"). osilinux ---------------------------------------------------------- osilinux Test 1 of 1: Disassemble DSDT to check for _OSI("Linux"). osilinux This is not strictly a failure mode, it just alerts one osilinux that this has been defined in the DSDT and probably should osilinux be avoided since the Linux ACPI driver matches onto the osilinux Windows _OSI strings osilinux PASSED: Test 1, DSDT does not implement a deprecated osilinux _OSI("Linux") test. osilinux osilinux ========================================================== osilinux 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 osilinux info only. osilinux ========================================================== fwts-test/osilinux-0001/test-0001.sh000077500000000000000000000010751465205512700171540ustar00rootroot00000000000000#!/bin/bash # TEST="Test osilinux against known incorrect ACPI tables" NAME=test-0001.sh TMPLOG=$TMP/osilinux.log.$$ $FWTS --show-tests | grep osilinux > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/osilinux-0001/acpidump-0001.log osilinux - | grep "^[0-9]*[ ]*osilinux" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/osilinux-0001/osilinux-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/osilinux-0001/test-0002.sh000077500000000000000000000010731465205512700171530ustar00rootroot00000000000000#!/bin/bash # TEST="Test osilinux against known correct ACPI tables" NAME=test-0002.sh TMPLOG=$TMP/osilinux.log.$$ $FWTS --show-tests | grep osilinux > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/osilinux-0001/acpidump-0002.log osilinux - | grep "^[0-9]*[ ]*osilinux" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/osilinux-0001/osilinux-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/pcct-0001/000077500000000000000000000000001465205512700143345ustar00rootroot00000000000000fwts-test/pcct-0001/acpidump-0001.log000066400000000000000000000104361465205512700172230ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... PCCT @ 0x00000000 0000: 50 43 43 54 4e 02 00 00 01 b2 49 4e 54 45 4c 20 PCCTN.....INTEL 0010: 54 65 6d 70 6c 61 74 65 01 00 00 00 49 4e 54 4c Template....INTL 0020: 28 07 17 20 01 00 00 00 00 00 00 00 00 00 00 00 (.. ............ 0030: 00 3e 00 00 00 00 00 00 11 11 11 11 11 11 11 11 .>.............. 0040: 22 22 22 22 22 22 22 22 01 32 00 03 33 33 33 33 """""""".2..3333 0050: 33 33 33 33 44 44 44 44 44 44 44 44 55 55 55 55 3333DDDDDDDDUUUU 0060: 55 55 55 55 66 66 66 66 77 77 77 77 88 88 01 3e UUUUffffwwww...> 0070: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 55 55 ..............UU 0080: 55 55 55 55 55 55 01 32 00 03 44 44 44 44 44 44 UUUUUU.2..DDDDDD 0090: 44 44 44 44 44 44 44 44 44 44 55 55 55 55 55 55 DDDDDDDDDDUUUUUU 00a0: 55 55 66 66 66 66 77 77 77 77 88 88 02 5a 01 00 UUffffwwww...Z.. 00b0: 00 00 01 00 00 00 00 00 00 00 00 00 99 99 99 99 ................ 00c0: 99 99 99 99 01 32 00 03 44 44 44 44 44 44 44 44 .....2..DDDDDDDD 00d0: 44 44 44 44 44 44 44 44 55 55 55 55 55 55 55 55 DDDDDDDDUUUUUUUU 00e0: 66 66 66 66 77 77 77 77 88 88 01 32 00 03 33 33 ffffwwww...2..33 00f0: 33 33 33 33 33 33 44 44 44 44 44 44 44 44 55 55 333333DDDDDDDDUU 0100: 55 55 55 55 55 55 03 a4 01 00 00 00 01 00 00 00 UUUUUU.......... 0110: 00 00 00 00 00 00 77 77 77 77 01 32 00 03 33 33 ......wwww.2..33 0120: 33 33 33 33 33 33 44 44 44 44 44 44 44 44 55 55 333333DDDDDDDDUU 0130: 55 55 55 55 55 55 66 66 66 66 77 77 77 77 88 88 UUUUUUffffwwww.. 0140: 88 88 01 32 00 03 33 33 33 33 33 33 33 33 99 99 ...2..33333333.. 0150: 99 99 99 99 99 99 00 00 00 00 00 00 00 00 00 00 ................ 0160: 00 00 00 00 00 00 01 32 00 03 33 33 33 33 33 33 .......2..333333 0170: 33 33 22 22 22 22 22 22 22 22 01 32 00 03 33 33 33"""""""".2..33 0180: 33 33 33 33 33 33 33 33 33 33 33 33 33 33 44 44 33333333333333DD 0190: 44 44 44 44 44 44 01 32 00 03 33 33 33 33 33 33 DDDDDD.2..333333 01a0: 33 33 55 55 55 55 55 55 55 55 04 a4 01 00 00 00 33UUUUUUUU...... 01b0: 01 00 00 00 00 00 00 00 00 00 88 88 88 88 01 32 ...............2 01c0: 00 03 33 33 33 33 33 33 33 33 44 44 44 44 44 44 ..33333333DDDDDD 01d0: 44 44 55 55 55 55 55 55 55 55 66 66 66 66 77 77 DDUUUUUUUUffffww 01e0: 77 77 88 88 88 88 01 32 00 03 33 33 33 33 33 33 ww.....2..333333 01f0: 33 33 99 99 99 99 99 99 99 99 00 00 00 00 00 00 33.............. 0200: 00 00 00 00 00 00 00 00 00 00 01 32 00 03 33 33 ...........2..33 0210: 33 33 33 33 33 33 22 22 22 22 22 22 22 22 01 32 333333"""""""".2 0220: 00 03 33 33 33 33 33 33 33 33 33 33 33 33 33 33 ..33333333333333 0230: 33 33 44 44 44 44 44 44 44 44 01 32 00 03 33 33 33DDDDDDDD.2..33 0240: 33 33 33 33 33 33 55 55 55 55 55 55 55 55 333333UUUUUUUU fwts-test/pcct-0001/acpidump-0002.log000066400000000000000000000103571465205512700172260ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... PCCT @ 0x00000000 0000: 50 43 43 54 4e 02 00 00 01 85 49 4e 54 45 4c 20 PCCTN.....INTEL 0010: 54 65 6d 70 6c 61 74 65 01 00 00 00 49 4e 54 4c Template....INTL 0020: 28 07 17 20 00 00 00 00 00 00 00 00 00 00 00 00 (.. ............ 0030: 00 3e 00 00 00 00 00 00 11 11 11 11 11 11 11 11 .>.............. 0040: 22 22 22 22 22 22 22 22 02 32 00 03 33 33 33 33 """""""".2..3333 0050: 33 33 33 33 44 44 44 44 44 44 44 44 55 55 55 55 3333DDDDDDDDUUUU 0060: 55 55 55 55 66 66 66 66 77 77 77 77 88 88 01 3e UUUUffffwwww...> 0070: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 55 55 ..............UU 0080: 55 55 55 55 55 55 04 32 00 03 44 44 44 44 44 44 UUUUUU.2..DDDDDD 0090: 44 44 44 44 44 44 44 44 44 44 55 55 55 55 55 55 DDDDDDDDDDUUUUUU 00a0: 55 55 66 66 66 66 77 77 77 77 88 88 02 5a 01 00 UUffffwwww...Z.. 00b0: 00 00 01 00 00 00 00 00 00 00 00 00 99 99 99 99 ................ 00c0: 99 99 99 99 03 32 00 03 44 44 44 44 44 44 44 44 .....2..DDDDDDDD 00d0: 44 44 44 44 44 44 44 44 55 55 55 55 55 55 55 55 DDDDDDDDUUUUUUUU 00e0: 66 66 66 66 77 77 77 77 88 88 03 32 00 03 33 33 ffffwwww...2..33 00f0: 33 33 33 33 33 33 44 44 44 44 44 44 44 44 55 55 333333DDDDDDDDUU 0100: 55 55 55 55 55 55 03 a4 01 00 00 00 01 00 00 00 UUUUUU.......... 0110: 00 00 00 00 00 00 77 77 77 77 05 32 00 03 33 33 ......wwww.2..33 0120: 33 33 33 33 33 33 44 44 44 44 44 44 44 44 55 55 333333DDDDDDDDUU 0130: 55 55 55 55 55 55 66 66 66 66 77 77 77 77 88 88 UUUUUUffffwwww.. 0140: 88 88 05 32 00 03 33 33 33 33 33 33 33 33 99 99 ...2..33333333.. 0150: 99 99 99 99 99 99 00 00 00 00 00 00 00 00 00 00 ................ 0160: 00 00 00 00 00 00 05 32 00 03 33 33 33 33 33 33 .......2..333333 0170: 33 33 22 22 22 22 22 22 22 22 05 32 00 03 33 33 33"""""""".2..33 0180: 33 33 33 33 33 33 33 33 33 33 33 33 33 33 44 44 33333333333333DD 0190: 44 44 44 44 44 44 05 32 00 03 33 33 33 33 33 33 DDDDDD.2..333333 01a0: 33 33 55 55 55 55 55 55 55 55 04 a4 01 00 00 00 33UUUUUUUU...... 01b0: 01 00 00 00 00 00 00 00 00 00 88 88 88 88 05 32 ...............2 01c0: 00 03 33 33 33 33 33 33 33 33 44 44 44 44 44 44 ..33333333DDDDDD 01d0: 44 44 55 55 55 55 55 55 55 55 66 66 66 66 77 77 DDUUUUUUUUffffww 01e0: 77 77 88 88 88 88 05 32 00 03 33 33 33 33 33 33 ww.....2..333333 01f0: 33 33 99 99 99 99 99 99 99 99 00 00 00 00 00 00 33.............. 0200: 00 00 00 00 00 00 00 00 00 00 05 32 00 03 33 33 ...........2..33 0210: 33 33 33 33 33 33 22 22 22 22 22 22 22 22 04 32 333333"""""""".2 0220: 00 03 33 33 33 33 33 33 33 33 33 33 33 33 33 33 ..33333333333333 0230: 33 33 44 44 44 44 44 44 44 44 04 32 00 03 33 33 33DDDDDDDD.2..33 0240: 33 33 33 33 33 33 55 55 55 55 55 55 55 55 333333UUUUUUUU fwts-test/pcct-0001/pcct-0001.log000066400000000000000000000236411465205512700163540ustar00rootroot00000000000000pcct pcct: PCCT Platform Communications Channel test. pcct ---------------------------------------------------------- pcct Test 1 of 1: Validate PCC table. pcct PCC Table: pcct Flags: 0x00000001 pcct Reserved: 0x0000000000000000 pcct pcct PCC Subspace Structure: pcct Type: 0x00 pcct Length: 0x3e pcct Reserved: 0x0000000000000000 pcct Base Address: 0x1111111111111111 pcct Length: 0x2222222222222222 pcct Doorbell Register: pcct Address Space ID 0x01 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct Doorbell Preserve: 0x4444444444444444 pcct Doorbell Write: 0x5555555555555555 pcct Nominal Latency: 0x66666666 pcct Max Periodic Access Rate: 0x77777777 pcct Min Request Turnaround Time: 0x8888 pcct pcct PCC Subspace Structure: pcct Type: 0x01 pcct Length: 0x3e pcct Platform Interrupt: 0x00000001 pcct Platform Interrupt Flags: 0x01 pcct Reserved: 0x00 pcct Base Address: 0x0000000000000000 pcct Length: 0x5555555555555555 pcct Doorbell Register: pcct Address Space ID 0x01 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x4444444444444444 pcct Doorbell Preserve: 0x4444444444444444 pcct Doorbell Write: 0x5555555555555555 pcct Nominal Latency: 0x66666666 pcct Max Periodic Access Rate: 0x77777777 pcct Min Request Turnaround Time: 0x8888 pcct pcct PCC Subspace Structure: pcct Type: 0x02 pcct Length: 0x5a pcct Platform Interrupt: 0x00000001 pcct Platform Interrupt Flags: 0x01 pcct Reserved: 0x00 pcct Base Address: 0x0000000000000000 pcct Length: 0x9999999999999999 pcct Doorbell Register: pcct Address Space ID 0x01 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x4444444444444444 pcct Doorbell Preserve: 0x4444444444444444 pcct Doorbell Write: 0x5555555555555555 pcct Nominal Latency: 0x66666666 pcct Max Periodic Access Rate: 0x77777777 pcct Min Request Turnaround Time: 0x8888 pcct Platform Interrupt Ack Register: pcct Address Space ID 0x01 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct Platform Ack Preserve: 0x4444444444444444 pcct Platform Ack Write: 0x5555555555555555 pcct pcct PCC Subspace Structure: pcct Type: 0x03 pcct Length: 0xa4 pcct Platform Interrupt: 0x00000001 pcct Platform Interrupt Flags: 0x01 pcct Reserved: 0x00 pcct Base Address: 0x0000000000000000 pcct Length: 0x77777777 pcct Doorbell Register: pcct Address Space ID 0x01 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct Doorbell Preserve: 0x4444444444444444 pcct Doorbell Write: 0x5555555555555555 pcct Nominal Latency: 0x66666666 pcct Max Periodic Access Rate: 0x77777777 pcct Min Request Turnaround Time: 0x88888888 pcct Platform Int Ack Register: pcct Address Space ID 0x01 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct Platform Int Ack Preserve: 0x9999999999999999 pcct Platform Int Ack Write: 0x0000000000000000 pcct Reserved: 0x0000000000000000 pcct Cmd Complete Check Register: pcct Address Space ID 0x01 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct Cmd Complete Check Mask: 0x2222222222222222 pcct Cmd Complete Update Register: pcct Address Space ID 0x01 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct Cmd Complete Update Mask: 0x3333333333333333 pcct Cmd Complete Set Mask: 0x3333333333333333 pcct Error Status Register: pcct Address Space ID 0x01 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct Error Status Mask: 0x5555555555555555 pcct pcct PCC Subspace Structure: pcct Type: 0x04 pcct Length: 0xa4 pcct Platform Interrupt: 0x00000001 pcct Platform Interrupt Flags: 0x01 pcct Reserved: 0x00 pcct Base Address: 0x0000000000000000 pcct Length: 0x88888888 pcct Doorbell Register: pcct Address Space ID 0x01 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct Doorbell Preserve: 0x4444444444444444 pcct Doorbell Write: 0x5555555555555555 pcct Nominal Latency: 0x66666666 pcct Max Periodic Access Rate: 0x77777777 pcct Min Request Turnaround Time: 0x88888888 pcct Platform Int Ack Register: pcct Address Space ID 0x01 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct Platform Int Ack Preserve: 0x9999999999999999 pcct Platform Int Ack Write: 0x0000000000000000 pcct Reserved: 0x0000000000000000 pcct Cmd Complete Check Register: pcct Address Space ID 0x01 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct Cmd Complete Check Mask: 0x2222222222222222 pcct Cmd Complete Update Register: pcct Address Space ID 0x01 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct Cmd Complete Update Mask: 0x3333333333333333 pcct Cmd Complete Set Mask: 0x3333333333333333 pcct Error Status Register: pcct Address Space ID 0x01 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct Error Status Mask: 0x5555555555555555 pcct pcct PASSED: Test 1, No issues found in PCC table. pcct pcct ========================================================== pcct 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 pcct info only. pcct ========================================================== fwts-test/pcct-0001/pcct-0002.log000066400000000000000000000330371465205512700163550ustar00rootroot00000000000000pcct pcct: PCCT Platform Communications Channel test. pcct ---------------------------------------------------------- pcct Test 1 of 1: Validate PCC table. pcct PCC Table: pcct Flags: 0x00000000 pcct Reserved: 0x0000000000000000 pcct pcct PCC Subspace Structure: pcct Type: 0x00 pcct Length: 0x3e pcct Reserved: 0x0000000000000000 pcct Base Address: 0x1111111111111111 pcct Length: 0x2222222222222222 pcct Doorbell Register: pcct Address Space ID 0x02 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct FAILED [HIGH] PCCTBadAddressSpaceId: Test 1, PCCT Subspace pcct Type 0 Space ID must be one of System Memory (0x0) or pcct System I/O (0x1), got PCI Configuration (0x2) instead. pcct Doorbell Preserve: 0x4444444444444444 pcct Doorbell Write: 0x5555555555555555 pcct Nominal Latency: 0x66666666 pcct Max Periodic Access Rate: 0x77777777 pcct Min Request Turnaround Time: 0x8888 pcct pcct PCC Subspace Structure: pcct Type: 0x01 pcct Length: 0x3e pcct Platform Interrupt: 0x00000001 pcct Platform Interrupt Flags: 0x01 pcct Reserved: 0x00 pcct Base Address: 0x0000000000000000 pcct Length: 0x5555555555555555 pcct Doorbell Register: pcct Address Space ID 0x04 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x4444444444444444 pcct FAILED [HIGH] PCCTBadAddressSpaceId: Test 1, PCCT Subspace pcct Type 1 Space ID must be one of System Memory (0x0), System pcct I/O (0x1) or Functional Fixed Hardware (0x7f), got SMBus pcct (0x4) instead. pcct Doorbell Preserve: 0x4444444444444444 pcct Doorbell Write: 0x5555555555555555 pcct Nominal Latency: 0x66666666 pcct Max Periodic Access Rate: 0x77777777 pcct Min Request Turnaround Time: 0x8888 pcct pcct PCC Subspace Structure: pcct Type: 0x02 pcct Length: 0x5a pcct Platform Interrupt: 0x00000001 pcct Platform Interrupt Flags: 0x01 pcct Reserved: 0x00 pcct Base Address: 0x0000000000000000 pcct Length: 0x9999999999999999 pcct Doorbell Register: pcct Address Space ID 0x03 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x4444444444444444 pcct FAILED [HIGH] PCCTBadAddressSpaceId: Test 1, PCCT Subspace pcct Type 2 Space ID must be one of System Memory (0x0), System pcct I/O (0x1) or Functional Fixed Hardware (0x7f), got pcct Embedded Controller (0x3) instead. pcct Doorbell Preserve: 0x4444444444444444 pcct Doorbell Write: 0x5555555555555555 pcct Nominal Latency: 0x66666666 pcct Max Periodic Access Rate: 0x77777777 pcct Min Request Turnaround Time: 0x8888 pcct Platform Interrupt Ack Register: pcct Address Space ID 0x03 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct FAILED [HIGH] PCCTBadAddressSpaceId: Test 1, PCCT Subspace pcct Type 2 Space ID must be one of System Memory (0x0), System pcct I/O (0x1) or Functional Fixed Hardware (0x7f), got pcct Embedded Controller (0x3) instead. pcct Platform Ack Preserve: 0x4444444444444444 pcct Platform Ack Write: 0x5555555555555555 pcct pcct PCC Subspace Structure: pcct Type: 0x03 pcct Length: 0xa4 pcct Platform Interrupt: 0x00000001 pcct Platform Interrupt Flags: 0x01 pcct Reserved: 0x00 pcct Base Address: 0x0000000000000000 pcct Length: 0x77777777 pcct Doorbell Register: pcct Address Space ID 0x05 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct FAILED [HIGH] PCCTBadAddressSpaceId: Test 1, PCCT Subspace pcct Type 3 Space ID must be one of System Memory (0x0), System pcct I/O (0x1) or Functional Fixed Hardware (0x7f), got pcct SystemCMOS (0x5) instead. pcct Doorbell Preserve: 0x4444444444444444 pcct Doorbell Write: 0x5555555555555555 pcct Nominal Latency: 0x66666666 pcct Max Periodic Access Rate: 0x77777777 pcct Min Request Turnaround Time: 0x88888888 pcct Platform Int Ack Register: pcct Address Space ID 0x05 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct FAILED [HIGH] PCCTBadAddressSpaceId: Test 1, PCCT Subspace pcct Type 3 Space ID must be one of System Memory (0x0), System pcct I/O (0x1) or Functional Fixed Hardware (0x7f), got pcct SystemCMOS (0x5) instead. pcct Platform Int Ack Preserve: 0x9999999999999999 pcct Platform Int Ack Write: 0x0000000000000000 pcct Reserved: 0x0000000000000000 pcct Cmd Complete Check Register: pcct Address Space ID 0x05 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct FAILED [HIGH] PCCTBadAddressSpaceId: Test 1, PCCT Subspace pcct Type 3 Space ID must be one of System Memory (0x0), System pcct I/O (0x1) or Functional Fixed Hardware (0x7f), got pcct SystemCMOS (0x5) instead. pcct Cmd Complete Check Mask: 0x2222222222222222 pcct Cmd Complete Update Register: pcct Address Space ID 0x05 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct FAILED [HIGH] PCCTBadAddressSpaceId: Test 1, PCCT Subspace pcct Type 3 Space ID must be one of System Memory (0x0), System pcct I/O (0x1) or Functional Fixed Hardware (0x7f), got pcct SystemCMOS (0x5) instead. pcct Cmd Complete Update Mask: 0x3333333333333333 pcct Cmd Complete Set Mask: 0x3333333333333333 pcct Error Status Register: pcct Address Space ID 0x05 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct FAILED [HIGH] PCCTBadAddressSpaceId: Test 1, PCCT Subspace pcct Type 3 Space ID must be one of System Memory (0x0), System pcct I/O (0x1) or Functional Fixed Hardware (0x7f), got pcct SystemCMOS (0x5) instead. pcct Error Status Mask: 0x5555555555555555 pcct pcct PCC Subspace Structure: pcct Type: 0x04 pcct Length: 0xa4 pcct FAILED [HIGH] PCCTBadFlags: Test 1, PCCT Platform pcct Interrupt in flags must be set when subspace type 4 is pcct present, got 0x00000000 instead pcct Platform Interrupt: 0x00000001 pcct Platform Interrupt Flags: 0x01 pcct Reserved: 0x00 pcct Base Address: 0x0000000000000000 pcct Length: 0x88888888 pcct Doorbell Register: pcct Address Space ID 0x05 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct FAILED [HIGH] PCCTBadAddressSpaceId: Test 1, PCCT Subspace pcct Type 4 Space ID must be one of System Memory (0x0), System pcct I/O (0x1) or Functional Fixed Hardware (0x7f), got pcct SystemCMOS (0x5) instead. pcct Doorbell Preserve: 0x4444444444444444 pcct Doorbell Write: 0x5555555555555555 pcct Nominal Latency: 0x66666666 pcct Max Periodic Access Rate: 0x77777777 pcct Min Request Turnaround Time: 0x88888888 pcct Platform Int Ack Register: pcct Address Space ID 0x05 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct FAILED [HIGH] PCCTBadAddressSpaceId: Test 1, PCCT Subspace pcct Type 4 Space ID must be one of System Memory (0x0), System pcct I/O (0x1) or Functional Fixed Hardware (0x7f), got pcct SystemCMOS (0x5) instead. pcct Platform Int Ack Preserve: 0x9999999999999999 pcct Platform Int Ack Write: 0x0000000000000000 pcct Reserved: 0x0000000000000000 pcct Cmd Complete Check Register: pcct Address Space ID 0x05 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct FAILED [HIGH] PCCTBadAddressSpaceId: Test 1, PCCT Subspace pcct Type 4 Space ID must be one of System Memory (0x0), System pcct I/O (0x1) or Functional Fixed Hardware (0x7f), got pcct SystemCMOS (0x5) instead. pcct Cmd Complete Check Mask: 0x2222222222222222 pcct Cmd Complete Update Register: pcct Address Space ID 0x04 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct FAILED [HIGH] PCCTBadAddressSpaceId: Test 1, PCCT Subspace pcct Type 4 Space ID must be one of System Memory (0x0), System pcct I/O (0x1) or Functional Fixed Hardware (0x7f), got SMBus pcct (0x4) instead. pcct Cmd Complete Update Mask: 0x3333333333333333 pcct Cmd Complete Set Mask: 0x3333333333333333 pcct Error Status Register: pcct Address Space ID 0x04 pcct Register Bit Width 0x32 pcct Register Bit Offset 0x00 pcct Access Size 0x03 pcct Address 0x3333333333333333 pcct FAILED [HIGH] PCCTBadAddressSpaceId: Test 1, PCCT Subspace pcct Type 4 Space ID must be one of System Memory (0x0), System pcct I/O (0x1) or Functional Fixed Hardware (0x7f), got SMBus pcct (0x4) instead. pcct Error Status Mask: 0x5555555555555555 pcct pcct pcct ========================================================== pcct 0 passed, 15 failed, 0 warning, 0 aborted, 0 skipped, 0 pcct info only. pcct ========================================================== fwts-test/pcct-0001/test-0001.sh000077500000000000000000000007741465205512700162400ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against PCCT" NAME=test-0001.sh TMPLOG=$TMP/pcct.log.$$ $FWTS --show-tests | grep PCCT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/pcct-0001/acpidump-0001.log pcct - | cut -c7- | grep "^pcct" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/pcct-0001/pcct-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/pcct-0001/test-0002.sh000077500000000000000000000010041465205512700162240ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid PCCT" NAME=test-0001.sh TMPLOG=$TMP/pcct.log.$$ $FWTS --show-tests | grep PCCT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/pcct-0001/acpidump-0002.log pcct - | cut -c7- | grep "^pcct" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/pcct-0001/pcct-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/pdtt-0001/000077500000000000000000000000001465205512700143565ustar00rootroot00000000000000fwts-test/pdtt-0001/acpidump-0001.log000066400000000000000000000035431465205512700172460ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... PDTT @ 0x0000000000000000 0000: 50 44 54 54 34 00 00 00 01 d2 49 4e 54 45 4c 20 PDTT4.....INTEL 0010: 54 65 6d 70 6c 61 74 65 01 00 00 00 49 4e 54 4c Template....INTL 0020: 29 09 17 20 04 00 00 00 2c 00 00 00 aa 03 bb 02 ).. ....,....... 0030: cc 01 dd 00 .... fwts-test/pdtt-0001/acpidump-0002.log000066400000000000000000000035431465205512700172470ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... PDTT @ 0x0000000000000000 0000: 50 44 54 54 34 00 00 00 01 d2 49 4e 54 45 4c 20 PDTT4.....INTEL 0010: 54 65 6d 70 6c 61 74 65 01 00 00 00 49 4e 54 4c Template....INTL 0020: 29 09 17 20 04 01 02 03 2c 00 00 00 aa 09 bb 02 ).. ....,....... 0030: cc 0a dd 08 .... fwts-test/pdtt-0001/pdtt-0001.log000066400000000000000000000022461465205512700164160ustar00rootroot00000000000000pdtt pdtt: PDTT Platform Debug Trigger Table test. pdtt ---------------------------------------------------------- pdtt Test 1 of 1: Validate PDTT table. pdtt PDTT Platform Debug Trigger Table: pdtt Trigger Count: 0x04 pdtt Reserved[3]: 0x000000 pdtt Trigger ID Array Offset: 0x0000002c pdtt Platform Communication Channel IDs pdtt Sub channel ID: 0xaa pdtt Flags: 0x03 pdtt Sub channel ID: 0xbb pdtt Flags: 0x02 pdtt Sub channel ID: 0xcc pdtt Flags: 0x01 pdtt Sub channel ID: 0xdd pdtt Flags: 0x00 pdtt pdtt PASSED: Test 1, No issues found in PDTT table. pdtt pdtt ========================================================== pdtt 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 pdtt info only. pdtt ========================================================== fwts-test/pdtt-0001/pdtt-0002.log000066400000000000000000000031741465205512700164200ustar00rootroot00000000000000pdtt pdtt: PDTT Platform Debug Trigger Table test. pdtt ---------------------------------------------------------- pdtt Test 1 of 1: Validate PDTT table. pdtt PDTT Platform Debug Trigger Table: pdtt Trigger Count: 0x04 pdtt Reserved[3]: 0x030201 pdtt Trigger ID Array Offset: 0x0000002c pdtt FAILED [MEDIUM] PDTTReservedNonZero: Test 1, PDTT Reserved pdtt field must be zero, got 0x00030201 instead pdtt Platform Communication Channel IDs pdtt Sub channel ID: 0xaa pdtt Flags: 0x09 pdtt FAILED [HIGH] PDTTReservedBitsNonZero: Test 1, PDTT Flags pdtt Bits [7..3] must be zero, got 0x09 instead pdtt Sub channel ID: 0xbb pdtt Flags: 0x02 pdtt Sub channel ID: 0xcc pdtt Flags: 0x0a pdtt FAILED [HIGH] PDTTReservedBitsNonZero: Test 1, PDTT Flags pdtt Bits [7..3] must be zero, got 0x0a instead pdtt Sub channel ID: 0xdd pdtt Flags: 0x08 pdtt FAILED [HIGH] PDTTReservedBitsNonZero: Test 1, PDTT Flags pdtt Bits [7..3] must be zero, got 0x08 instead pdtt pdtt pdtt ========================================================== pdtt 0 passed, 4 failed, 0 warning, 0 aborted, 0 skipped, 0 pdtt info only. pdtt ========================================================== fwts-test/pdtt-0001/test-0001.sh000077500000000000000000000010011465205512700162420ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against PDTT" NAME=test-0001.sh TMPLOG=$TMP/pdtt.log.$$ $FWTS --show-tests | grep pdtt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/pdtt-0001/acpidump-0001.log pdtt - | cut -c7- | grep "^pdtt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/pdtt-0001/pdtt-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/pdtt-0001/test-0002.sh000077500000000000000000000010111465205512700162440ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid PDTT" NAME=test-0001.sh TMPLOG=$TMP/pdtt.log.$$ $FWTS --show-tests | grep pdtt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/pdtt-0001/acpidump-0002.log pdtt - | cut -c7- | grep "^pdtt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/pdtt-0001/pdtt-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/phat-0001/000077500000000000000000000000001465205512700143375ustar00rootroot00000000000000fwts-test/phat-0001/acpidump-0001.log000066400000000000000000000053431465205512700172270ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... PHAT @ 0x0000000000000000 0000: 50 48 41 54 FC 00 00 00 01 20 49 4E 54 45 4C 20 PHAT..... INTEL 0010: 54 65 6D 70 6C 61 74 65 01 00 00 00 49 4E 54 4C Template....INTL 0020: 31 03 21 20 00 00 28 00 00 00 00 00 01 00 00 00 1.! ..(......... 0030: 30 05 AF 91 86 5D 0E 47 A6 B0 0A 2D B9 40 82 49 0....].G...-.@.I 0040: 08 07 06 05 04 03 02 01 0C 0B 0A 09 00 00 28 00 ..............(. 0050: 00 00 00 00 01 00 00 00 3C 73 2E 1E 0D 79 44 46 ........ /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/phat-0001/acpidump-0001.log phat - | cut -c7- | grep "^phat" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/phat-0001/phat-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/phat-0001/test-0002.sh000077500000000000000000000010111465205512700162250ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid PHAT" NAME=test-0001.sh TMPLOG=$TMP/phat.log.$$ $FWTS --show-tests | grep phat > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/phat-0001/acpidump-0002.log phat - | cut -c7- | grep "^phat" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/phat-0001/phat-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/phat-0001/test-0003.sh000077500000000000000000000010011465205512700162250ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against PHAT" NAME=test-0003.sh TMPLOG=$TMP/phat.log.$$ $FWTS --show-tests | grep phat > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/phat-0001/acpidump-0003.log phat - | cut -c7- | grep "^phat" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/phat-0001/phat-0003.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/pmtt-0001/000077500000000000000000000000001465205512700143675ustar00rootroot00000000000000fwts-test/pmtt-0001/acpidump-0001.log000066400000000000000000000046721465205512700172630ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... PMTT @ 0x0000000000000000 0000: 50 4D 54 54 BB 00 00 00 02 F7 49 4E 54 45 4C 20 PMTT......INTEL 0010: 54 45 4D 50 4C 41 54 45 01 00 00 00 49 4E 54 4C TEMPLATE....INTL 0020: 31 03 21 20 08 00 00 00 00 00 10 00 01 00 00 00 1.! ............ 0030: 03 00 00 00 01 00 00 00 01 00 10 00 02 00 00 00 ................ 0040: 02 00 00 00 44 44 00 00 02 00 10 00 04 00 00 00 ....DD.......... 0050: 01 00 00 00 34 12 00 00 FF 00 23 00 04 00 00 00 ....4.....#..... 0060: 03 00 00 00 03 02 01 00 08 04 07 06 08 09 0A 0B ................ 0070: 0C 0D 0E 0F 55 66 77 88 11 AA BB 00 00 10 00 03 ....Ufw......... 0080: 00 00 00 03 00 00 00 01 00 00 00 01 00 10 00 05 ................ 0090: 00 00 00 02 00 00 00 00 00 00 00 02 00 10 00 06 ................ 00A0: 00 00 00 01 00 00 00 34 12 00 00 02 00 10 00 09 .......4........ 00B0: 00 00 00 00 00 00 00 78 56 00 00 .......xV.. fwts-test/pmtt-0001/acpidump-0002.log000066400000000000000000000046721465205512700172640ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... PMTT @ 0x0000000000000000 0000: 50 4D 54 54 BB 00 00 00 02 33 49 4E 54 45 4C 20 PMTT.....3INTEL 0010: 54 45 4D 50 4C 41 54 45 01 00 00 00 49 4E 54 4C TEMPLATE....INTL 0020: 31 03 21 20 08 00 00 00 00 00 10 00 0D 00 00 00 1.! ............ 0030: 03 00 00 00 01 00 00 00 01 00 10 00 02 00 00 00 ................ 0040: 02 00 00 00 44 44 00 00 02 00 10 00 0C 00 00 00 ....DD.......... 0050: 01 00 00 00 34 12 78 56 FF 00 23 00 04 00 00 00 ....4.xV..#..... 0060: 03 00 00 00 03 02 01 00 08 04 07 06 08 09 0A 0B ................ 0070: 0C 0D 0E 0F 55 66 77 88 11 AA BB 00 00 10 00 0F ....Ufw......... 0080: 00 00 00 03 00 00 00 01 00 00 00 01 00 10 00 05 ................ 0090: 00 00 00 02 00 00 00 00 00 00 00 04 00 10 00 0E ................ 00A0: 00 00 00 01 00 00 00 78 56 34 12 02 00 00 00 09 .......xV4...... 00B0: 00 00 00 00 00 00 00 00 00 78 56 .........xV fwts-test/pmtt-0001/pmtt-0001.log000066400000000000000000000071201465205512700164340ustar00rootroot00000000000000pmtt pmtt: PMTT Memory Topology Table test. pmtt ---------------------------------------------------------- pmtt Test 1 of 1: Validate PMTT table. pmtt PMTT Table: pmtt Number of Memory Devices: 0x00000008 pmtt PMTT Subtable: pmtt Type: 0x00 pmtt Reserved: 0x00 pmtt Length: 0x0010 pmtt Flags: 0x0001 pmtt Reserved: 0x0000 pmtt Socket Identifier: 0x0001 pmtt Reserved: 0x0000 pmtt pmtt PMTT Subtable: pmtt Type: 0x01 pmtt Reserved: 0x00 pmtt Length: 0x0010 pmtt Flags: 0x0002 pmtt Reserved: 0x0000 pmtt Memory Controller ID 0x4444 pmtt Reserved: 0x0000 pmtt pmtt PMTT Subtable: pmtt Type: 0x02 pmtt Reserved: 0x00 pmtt Length: 0x0010 pmtt Flags: 0x0004 pmtt Reserved: 0x0000 pmtt SMBIOS Handle: 0x00001234 pmtt pmtt pmtt PMTT Subtable: pmtt Type: 0x00 pmtt Reserved: 0x00 pmtt Length: 0x0010 pmtt Flags: 0x0003 pmtt Reserved: 0x0000 pmtt Socket Identifier: 0x0001 pmtt Reserved: 0x0000 pmtt pmtt PMTT Subtable: pmtt Type: 0x01 pmtt Reserved: 0x00 pmtt Length: 0x0010 pmtt Flags: 0x0005 pmtt Reserved: 0x0000 pmtt Memory Controller ID 0x0000 pmtt Reserved: 0x0000 pmtt pmtt PMTT Subtable: pmtt Type: 0x02 pmtt Reserved: 0x00 pmtt Length: 0x0010 pmtt Flags: 0x0006 pmtt Reserved: 0x0000 pmtt SMBIOS Handle: 0x00001234 pmtt pmtt PMTT Subtable: pmtt Type: 0x02 pmtt Reserved: 0x00 pmtt Length: 0x0010 pmtt Flags: 0x0009 pmtt Reserved: 0x0000 pmtt SMBIOS Handle: 0x00005678 pmtt pmtt PASSED: Test 1, No issues found in PMTT table. pmtt pmtt ========================================================== pmtt 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 pmtt info only. pmtt ========================================================== fwts-test/pmtt-0001/pmtt-0002.log000066400000000000000000000067211465205512700164430ustar00rootroot00000000000000pmtt pmtt: PMTT Memory Topology Table test. pmtt ---------------------------------------------------------- pmtt Test 1 of 1: Validate PMTT table. pmtt PMTT Table: pmtt Number of Memory Devices: 0x00000008 pmtt PMTT Subtable: pmtt Type: 0x00 pmtt Reserved: 0x00 pmtt Length: 0x0010 pmtt Flags: 0x000d pmtt Reserved: 0x0000 pmtt FAILED [HIGH] PMTTBadFlags: Test 1, PMTT Flags's pmtt Bits[3..2] must not be 11b pmtt Socket Identifier: 0x0001 pmtt Reserved: 0x0000 pmtt pmtt PMTT Subtable: pmtt Type: 0x01 pmtt Reserved: 0x00 pmtt Length: 0x0010 pmtt Flags: 0x0002 pmtt Reserved: 0x0000 pmtt Memory Controller ID 0x4444 pmtt Reserved: 0x0000 pmtt pmtt PMTT Subtable: pmtt Type: 0x02 pmtt Reserved: 0x00 pmtt Length: 0x0010 pmtt Flags: 0x000c pmtt Reserved: 0x0000 pmtt FAILED [HIGH] PMTTBadFlags: Test 1, PMTT Flags's pmtt Bits[3..2] must not be 11b pmtt SMBIOS Handle: 0x56781234 pmtt FAILED [HIGH] PMTTBADSMBIOSHandle: Test 1, PMTT upper 2 pmtt bytes must be zero, got 0x56781234 instead pmtt pmtt pmtt PMTT Subtable: pmtt Type: 0x00 pmtt Reserved: 0x00 pmtt Length: 0x0010 pmtt Flags: 0x000f pmtt Reserved: 0x0000 pmtt FAILED [HIGH] PMTTBadFlags: Test 1, PMTT Flags's pmtt Bits[3..2] must not be 11b pmtt Socket Identifier: 0x0001 pmtt Reserved: 0x0000 pmtt pmtt PMTT Subtable: pmtt Type: 0x01 pmtt Reserved: 0x00 pmtt Length: 0x0010 pmtt Flags: 0x0005 pmtt Reserved: 0x0000 pmtt Memory Controller ID 0x0000 pmtt Reserved: 0x0000 pmtt pmtt FAILED [HIGH] PMTTBadSubtableType: Test 1, PMTT must have pmtt subtable with Type 1..2 or 0xFF, got 0x0004 instead pmtt pmtt FAILED [CRITICAL] PMTTStructLengthZero: Test 1, PMTT pmtt structure (offset 0x00ab) length cannot be 0 pmtt pmtt ========================================================== pmtt 0 passed, 6 failed, 0 warning, 0 aborted, 0 skipped, 0 pmtt info only. pmtt ========================================================== fwts-test/pmtt-0001/test-0001.sh000077500000000000000000000010011465205512700162530ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against PMTT" NAME=test-0001.sh TMPLOG=$TMP/pmtt.log.$$ $FWTS --show-tests | grep pmtt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/pmtt-0001/acpidump-0001.log pmtt - | cut -c7- | grep "^pmtt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/pmtt-0001/pmtt-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/pmtt-0001/test-0002.sh000077500000000000000000000010111465205512700162550ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid PMTT" NAME=test-0001.sh TMPLOG=$TMP/pmtt.log.$$ $FWTS --show-tests | grep pmtt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/pmtt-0001/acpidump-0002.log pmtt - | cut -c7- | grep "^pmtt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/pmtt-0001/pmtt-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/pptt-0001/000077500000000000000000000000001465205512700143725ustar00rootroot00000000000000fwts-test/pptt-0001/acpidump-0001.log000066400000000000000000000045431465205512700172630ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... PPTT @ 0x00000000 0000: 50 50 54 54 a6 00 00 00 01 93 49 4e 54 45 4c 20 PPTT......INTEL 0010: 54 45 4d 50 4c 41 54 45 01 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 29 06 17 20 00 18 00 00 00 00 00 00 00 00 00 00 ).. ............ 0030: 00 00 00 00 01 00 00 00 00 00 00 00 01 18 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: 00 00 00 00 00 1c 00 00 03 00 00 00 00 00 00 00 ................ 0060: 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 ................ 0070: 01 18 00 00 7f 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 00 00 00 02 1e 00 00 41 43 50 49 ............ACPI 0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00a0: 00 00 00 00 00 00 ...... fwts-test/pptt-0001/acpidump-0002.log000066400000000000000000000045431465205512700172640ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... PPTT @ 0x00000000 0000: 50 50 54 54 a6 00 00 00 01 0f 49 4e 54 45 4c 20 PPTT......INTEL 0010: 54 45 4d 50 4c 41 54 45 01 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 29 06 17 20 00 18 01 00 00 00 00 00 00 00 00 00 ).. ............ 0030: 00 00 00 00 01 00 00 00 00 00 00 00 01 18 02 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: 00 00 00 00 00 1c 03 00 07 00 00 00 00 00 00 00 ................ 0060: 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 ................ 0070: 01 18 04 00 ff 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 00 00 00 02 1e 05 00 41 43 50 49 ............ACPI 0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00a0: 00 00 00 00 00 00 ...... fwts-test/pptt-0001/pptt-0001.log000066400000000000000000000073051465205512700164470ustar00rootroot00000000000000pptt pptt: PPTT Processor Properties Topology Table test. pptt ---------------------------------------------------------- pptt Test 1 of 1: Validate PPTT table. pptt PPTT Processor Properties Topology Table: pptt Processor hierarchy node structure (Type 0): pptt Type: 0x00 pptt Length: 0x18 pptt Reserved: 0x0000 pptt Flags: 0x00000000 pptt Parent: 0x00000000 pptt ACPI Processor ID: 0x00000000 pptt Number of Private Resources: 0x00000001 pptt Private Resources[0]: 0x00000000 pptt pptt Cache Type Structure (Type 1): pptt Type: 0x01 pptt Length: 0x18 pptt Reserved: 0x0000 pptt Flags: 0x00000000 pptt Next Level of Cache: 0x00000000 pptt Size: 0x00000000 pptt Number of sets: 0x00000000 pptt Associativity: 0x00 pptt Attributes: 0x00 pptt Line size: 0x0000 pptt pptt Processor hierarchy node structure (Type 0): pptt Type: 0x00 pptt Length: 0x1c pptt Reserved: 0x0000 pptt Flags: 0x00000003 pptt Parent: 0x00000000 pptt ACPI Processor ID: 0x00000000 pptt Number of Private Resources: 0x00000002 pptt Private Resources[0]: 0x00000000 pptt Private Resources[1]: 0x00000000 pptt pptt Cache Type Structure (Type 1): pptt Type: 0x01 pptt Length: 0x18 pptt Reserved: 0x0000 pptt Flags: 0x0000007f pptt Next Level of Cache: 0x00000000 pptt Size: 0x00000000 pptt Number of sets: 0x00000000 pptt Associativity: 0xc0 pptt Attributes: 0x00 pptt Line size: 0x0000 pptt pptt PPTT type 2 is deprecated since ACPI 6.3 Errata A. pptt ID structure (Type 2): pptt Type: 0x02 pptt Length: 0x1e pptt Reserved: 0x0000 pptt VENDOR_ID: ACPI pptt LEVEL_1_ID: 0x0000000000000000 pptt LEVEL_2_ID: 0x0000000000000000 pptt MAJOR_REV: 0x0000 pptt MINOR_REV: 0x0000 pptt SPIN_REV: 0x0000 pptt pptt PASSED: Test 1, No issues found in PPTT table. pptt pptt ========================================================== pptt 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 pptt info only. pptt ========================================================== fwts-test/pptt-0001/pptt-0002.log000066400000000000000000000110501465205512700164400ustar00rootroot00000000000000pptt pptt: PPTT Processor Properties Topology Table test. pptt ---------------------------------------------------------- pptt Test 1 of 1: Validate PPTT table. pptt PPTT Processor Properties Topology Table: pptt Processor hierarchy node structure (Type 0): pptt Type: 0x00 pptt Length: 0x18 pptt Reserved: 0x0001 pptt Flags: 0x00000000 pptt Parent: 0x00000000 pptt ACPI Processor ID: 0x00000000 pptt Number of Private Resources: 0x00000001 pptt Private Resources[0]: 0x00000000 pptt FAILED [MEDIUM] PPTTReservedNonZero: Test 1, PPTT Reserved pptt field must be zero, got 0x0001 instead pptt pptt Cache Type Structure (Type 1): pptt Type: 0x01 pptt Length: 0x18 pptt Reserved: 0x0002 pptt Flags: 0x00000000 pptt Next Level of Cache: 0x00000000 pptt Size: 0x00000000 pptt Number of sets: 0x00000000 pptt Associativity: 0x00 pptt Attributes: 0x00 pptt Line size: 0x0000 pptt FAILED [MEDIUM] PPTTReservedNonZero: Test 1, PPTT Reserved pptt field must be zero, got 0x0002 instead pptt pptt Processor hierarchy node structure (Type 0): pptt Type: 0x00 pptt Length: 0x1c pptt Reserved: 0x0003 pptt Flags: 0x00000007 pptt Parent: 0x00000000 pptt ACPI Processor ID: 0x00000000 pptt Number of Private Resources: 0x00000002 pptt Private Resources[0]: 0x00000000 pptt Private Resources[1]: 0x00000000 pptt FAILED [MEDIUM] PPTTReservedNonZero: Test 1, PPTT Reserved pptt field must be zero, got 0x0003 instead pptt FAILED [HIGH] PPTTReservedBitsNonZero: Test 1, PPTT Flags pptt Bits [31..2] must be zero, got 0x00000007 instead pptt pptt Cache Type Structure (Type 1): pptt Type: 0x01 pptt Length: 0x18 pptt Reserved: 0x0004 pptt Flags: 0x000000ff pptt Next Level of Cache: 0x00000000 pptt Size: 0x00000000 pptt Number of sets: 0x00000000 pptt Associativity: 0xc0 pptt Attributes: 0x00 pptt Line size: 0x0000 pptt FAILED [MEDIUM] PPTTReservedNonZero: Test 1, PPTT Reserved pptt field must be zero, got 0x0004 instead pptt FAILED [HIGH] PPTTReservedBitsNonZero: Test 1, PPTT Flags pptt Bits [31..7] must be zero, got 0x000000ff instead pptt pptt PPTT type 2 is deprecated since ACPI 6.3 Errata A. pptt ID structure (Type 2): pptt Type: 0x02 pptt Length: 0x1e pptt Reserved: 0x0005 pptt VENDOR_ID: ACPI pptt LEVEL_1_ID: 0x0000000000000000 pptt LEVEL_2_ID: 0x0000000000000000 pptt MAJOR_REV: 0x0000 pptt MINOR_REV: 0x0000 pptt SPIN_REV: 0x0000 pptt FAILED [MEDIUM] PPTTReservedNonZero: Test 1, PPTT Reserved pptt field must be zero, got 0x0005 instead pptt pptt pptt ========================================================== pptt 0 passed, 7 failed, 0 warning, 0 aborted, 0 skipped, 0 pptt info only. pptt ========================================================== fwts-test/pptt-0001/test-0001.sh000077500000000000000000000010011465205512700162560ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against PPTT" NAME=test-0001.sh TMPLOG=$TMP/pptt.log.$$ $FWTS --show-tests | grep pptt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/pptt-0001/acpidump-0001.log pptt - | cut -c7- | grep "^pptt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/pptt-0001/pptt-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/pptt-0001/test-0002.sh000077500000000000000000000010111465205512700162600ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid PPTT" NAME=test-0001.sh TMPLOG=$TMP/pptt.log.$$ $FWTS --show-tests | grep pptt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/pptt-0001/acpidump-0002.log pptt - | cut -c7- | grep "^pptt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/pptt-0001/pptt-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/ras2-0001/000077500000000000000000000000001465205512700142525ustar00rootroot00000000000000fwts-test/ras2-0001/acpidump-0001.log000066400000000000000000000035471465205512700171460ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... RAS2 @ 0x0000000000000000 0000: 52 41 53 32 38 00 00 00 01 28 49 4E 54 45 4C 20 RAS28....(INTEL 0010: 54 65 6D 70 6C 61 74 65 01 00 00 00 49 4E 54 4C Template....INTL 0020: 28 06 23 20 00 00 02 00 00 00 00 00 01 00 00 00 (.# ............ 0030: 01 00 00 00 02 00 00 00 ........ fwts-test/ras2-0001/acpidump-0002.log000066400000000000000000000035471465205512700171470ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... RAS2 @ 0x0000000000000000 0000: 52 41 53 32 38 00 00 00 01 28 49 4E 54 45 4C 20 RAS28....(INTEL 0010: 54 65 6D 70 6C 61 74 65 01 00 00 00 49 4E 54 4C Template....INTL 0020: 28 06 23 20 00 00 02 00 00 00 FF 3F 01 00 00 00 (.# ............ 0030: 01 11 00 7F 02 00 00 00 ........ fwts-test/ras2-0001/ras2-0001.log000066400000000000000000000021761465205512700162100ustar00rootroot00000000000000ras2 ras2: ACPI RAS2 Feature Table test ras2 ---------------------------------------------------------- ras2 Test 1 of 1: Validate RAS2 table. ras2 RAS2 (ACPI RAS2 Feature) Table: ras2 Reserved: 0x0000 ras2 Number of PCC descriptors: 0x0002 ras2 PCC Descriptor List: ras2 PCC Identifier: 0x00 ras2 Reserved: 0x0000 ras2 Feature Type: 0x00 ras2 Instance: 0x00000001 ras2 PCC Descriptor List: ras2 PCC Identifier: 0x01 ras2 Reserved: 0x0000 ras2 Feature Type: 0x00 ras2 Instance: 0x00000002 ras2 PASSED: Test 1, No issues found in RAS2 table. ras2 ras2 ========================================================== ras2 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 ras2 info only. ras2 ========================================================== fwts-test/ras2-0001/ras2-0002.log000066400000000000000000000031011465205512700161760ustar00rootroot00000000000000ras2 ras2: ACPI RAS2 Feature Table test ras2 ---------------------------------------------------------- ras2 Test 1 of 1: Validate RAS2 table. ras2 RAS2 (ACPI RAS2 Feature) Table: ras2 Reserved: 0x0000 ras2 Number of PCC descriptors: 0x0002 ras2 PCC Descriptor List: ras2 PCC Identifier: 0x00 ras2 Reserved: 0xff00 ras2 Feature Type: 0x3f ras2 Instance: 0x00000001 ras2 FAILED [MEDIUM] RAS2ReservedNonZero: Test 1, RAS2 Reserved ras2 field must be zero, got 0xff00 instead ras2 FAILED [HIGH] RAS2ReservedType: Test 1, RAS2 RAS feature ras2 types 0x01-0x7f is reserved, got 0x3f ras2 PCC Descriptor List: ras2 PCC Identifier: 0x01 ras2 Reserved: 0x0011 ras2 Feature Type: 0x7f ras2 Instance: 0x00000002 ras2 FAILED [MEDIUM] RAS2ReservedNonZero: Test 1, RAS2 Reserved ras2 field must be zero, got 0x0011 instead ras2 FAILED [HIGH] RAS2ReservedType: Test 1, RAS2 RAS feature ras2 types 0x01-0x7f is reserved, got 0x7f ras2 ras2 ========================================================== ras2 0 passed, 4 failed, 0 warning, 0 aborted, 0 skipped, 0 ras2 info only. ras2 ========================================================== fwts-test/ras2-0001/test-0001.sh000077500000000000000000000010011465205512700161360ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against RAS2" NAME=test-0001.sh TMPLOG=$TMP/ras2.log.$$ $FWTS --show-tests | grep sdev > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/ras2-0001/acpidump-0001.log ras2 - | cut -c7- | grep "^ras2" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/ras2-0001/ras2-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/ras2-0001/test-0002.sh000077500000000000000000000010011465205512700161370ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against RAS2" NAME=test-0002.sh TMPLOG=$TMP/ras2.log.$$ $FWTS --show-tests | grep sdev > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/ras2-0001/acpidump-0002.log ras2 - | cut -c7- | grep "^ras2" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/ras2-0001/ras2-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/rasf-0001/000077500000000000000000000000001465205512700143365ustar00rootroot00000000000000fwts-test/rasf-0001/acpidump-0001.log000066400000000000000000000034441465205512700172260ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... RASF @ 0x0000000000000000 0000: 52 41 53 46 30 00 00 00 01 eb 49 4e 54 45 4c 20 RASF0.....INTEL 0010: 54 65 6d 70 6c 61 74 65 01 00 00 00 49 4e 54 4c Template....INTL 0020: 28 07 17 20 00 01 02 03 04 05 06 07 08 09 0a 0b (.. ............ fwts-test/rasf-0001/acpidump-0002.log000066400000000000000000000034441465205512700172270ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... RASF @ 0x0000000000000000 0000: 52 41 53 46 31 00 00 00 01 eb 49 4e 54 45 4c 20 RASF0.....INTEL 0010: 54 65 6d 70 6c 61 74 65 01 00 00 00 49 4e 54 4c Template....INTL 0020: 28 07 17 20 00 01 02 03 04 05 06 07 08 09 0a 0b (.. ............ fwts-test/rasf-0001/rasf-0001.log000066400000000000000000000021711465205512700163530ustar00rootroot00000000000000rasf rasf: RASF RAS Feature Table test rasf ---------------------------------------------------------- rasf Test 1 of 1: Validate RASF table. rasf RASF (RAS Feature) Table: rasf Channel Identifier [00]: 0x00 rasf Channel Identifier [01]: 0x01 rasf Channel Identifier [02]: 0x02 rasf Channel Identifier [03]: 0x03 rasf Channel Identifier [04]: 0x04 rasf Channel Identifier [05]: 0x05 rasf Channel Identifier [06]: 0x06 rasf Channel Identifier [07]: 0x07 rasf Channel Identifier [08]: 0x08 rasf Channel Identifier [09]: 0x09 rasf Channel Identifier [10]: 0x0a rasf Channel Identifier [11]: 0x0b rasf PASSED: Test 1, No issues found in RASF table. rasf rasf ========================================================== rasf 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 rasf info only. rasf ========================================================== fwts-test/rasf-0001/rasf-0002.log000066400000000000000000000011461465205512700163550ustar00rootroot00000000000000rasf rasf: RASF RAS Feature Table test rasf ---------------------------------------------------------- rasf Test 1 of 1: Validate RASF table. rasf RASF (RAS Feature) Table: rasf FAILED [CRITICAL] RASFBadLength: Test 1, RASF structure rasf must have length 0x00000030, got 0x00000031 rasf rasf ========================================================== rasf 0 passed, 1 failed, 0 warning, 0 aborted, 0 skipped, 0 rasf info only. rasf ========================================================== fwts-test/rasf-0001/test-0001.sh000077500000000000000000000010011465205512700162220ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against RASF" NAME=test-0001.sh TMPLOG=$TMP/rasf.log.$$ $FWTS --show-tests | grep rasf > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/rasf-0001/acpidump-0001.log rasf - | cut -c7- | grep "^rasf" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/rasf-0001/rasf-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/rasf-0001/test-0002.sh000077500000000000000000000010111465205512700162240ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid RASF" NAME=test-0001.sh TMPLOG=$TMP/rasf.log.$$ $FWTS --show-tests | grep rasf > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/rasf-0001/acpidump-0002.log rasf - | cut -c7- | grep "^rasf" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/rasf-0001/rasf-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/rgrt-0001/000077500000000000000000000000001465205512700143615ustar00rootroot00000000000000fwts-test/rgrt-0001/acpidump-0001.log000066400000000000000000000036671465205512700172600ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... RGRT @ 0x0000000000000000 0000: 52 47 52 54 50 00 00 00 01 33 49 4E 54 45 4C 20 RGRTP....3INTEL 0010: 54 65 6D 70 6C 61 74 65 01 00 00 00 49 4E 54 4C Template....INTL 0020: 31 03 21 20 01 00 01 00 AA 01 02 03 04 05 06 07 1.! ............ 0030: 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 ................ 0040: 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 ........ !"#$%&' fwts-test/rgrt-0001/acpidump-0002.log000066400000000000000000000036671465205512700172610ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... RGRT @ 0x0000000000000000 0000: 52 47 52 54 50 00 00 00 01 33 49 4E 54 45 4C 20 RGRTP....3INTEL 0010: 54 65 6D 70 6C 61 74 65 01 00 00 00 49 4E 54 4C Template....INTL 0020: 31 03 21 20 00 00 02 00 AA 01 02 03 04 05 06 07 1.! ............ 0030: 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 ................ 0040: 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 ........ !"#$%&' fwts-test/rgrt-0001/rgrt-0001.log000066400000000000000000000017561465205512700164310ustar00rootroot00000000000000rgrt rgrt: RGRT Regulatory Graphics Resource Table test rgrt ---------------------------------------------------------- rgrt Test 1 of 1: Validate RGRT table. rgrt RGRT Regulatory Graphics Resource Table: rgrt Version: 0x0001 rgrt Image Type: 0x01 rgrt Reserved: 0x00 rgrt Image: rgrt 0000: AA 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ................ rgrt 0010: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................ rgrt 0020: 20 21 22 23 24 25 26 27 !"#$%&' rgrt rgrt PASSED: Test 1, No issues found in RGRT table. rgrt rgrt ========================================================== rgrt 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 rgrt info only. rgrt ========================================================== fwts-test/rgrt-0001/rgrt-0002.log000066400000000000000000000022421465205512700164210ustar00rootroot00000000000000rgrt rgrt: RGRT Regulatory Graphics Resource Table test rgrt ---------------------------------------------------------- rgrt Test 1 of 1: Validate RGRT table. rgrt RGRT Regulatory Graphics Resource Table: rgrt Version: 0x0000 rgrt Image Type: 0x02 rgrt Reserved: 0x00 rgrt Image: rgrt 0000: AA 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ................ rgrt 0010: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................ rgrt 0020: 20 21 22 23 24 25 26 27 !"#$%&' rgrt FAILED [MEDIUM] RGRTBadFieldValue: Test 1, RGRT Version rgrt field must be 1, got 0 instead. rgrt FAILED [MEDIUM] RGRTBadFieldValue: Test 1, RGRT Image Type rgrt field must be 1, got 2 instead. rgrt rgrt rgrt ========================================================== rgrt 0 passed, 2 failed, 0 warning, 0 aborted, 0 skipped, 0 rgrt info only. rgrt ========================================================== fwts-test/rgrt-0001/test-0001.sh000077500000000000000000000010011465205512700162450ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against RGRT" NAME=test-0001.sh TMPLOG=$TMP/rgrt.log.$$ $FWTS --show-tests | grep rgrt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/rgrt-0001/acpidump-0001.log rgrt - | cut -c7- | grep "^rgrt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/rgrt-0001/rgrt-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/rgrt-0001/test-0002.sh000077500000000000000000000010011465205512700162460ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against RGRT" NAME=test-0001.sh TMPLOG=$TMP/rgrt.log.$$ $FWTS --show-tests | grep rgrt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/rgrt-0001/acpidump-0002.log rgrt - | cut -c7- | grep "^rgrt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/rgrt-0001/rgrt-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/rsdp-0001/000077500000000000000000000000001465205512700143535ustar00rootroot00000000000000fwts-test/rsdp-0001/acpidump-0001.log000066400000000000000000000043771465205512700172510ustar00rootroot00000000000000RSD @ 0x00000000000F0120 0000: 52 53 44 20 50 54 52 20 7F 4C 45 4E 4F 56 4F 02 RSD PTR .LENOVO. 0010: D4 E0 FF DA 24 00 00 00 70 E1 FF DA 00 00 00 00 ....$...p....... 0020: B2 00 00 00 .... RSDT @ 0x00000000DAFFE0D4 0000: 52 53 44 54 70 00 00 00 01 8C 4C 45 4E 4F 56 4F RSDTp.....LENOVO 0010: 54 50 2D 47 32 20 20 20 10 11 00 00 50 54 4C 20 TP-G2 ....PTL 0020: 02 00 00 00 00 50 FE DA 00 D0 FF DA 00 C0 FF DA .....P.......... 0030: 00 B0 FF DA 00 A0 FF DA 00 90 FF DA 00 40 FE DA .............@.. 0040: 00 30 FE DA 00 20 FE DA 00 10 FE DA 00 00 FE DA .0... .......... 0050: 00 70 FE DA 00 F0 FD DA 00 E0 FD DA 00 D0 FD DA .p.............. 0060: 00 C0 FD DA 00 B0 FD DA 00 A0 FD DA 00 90 FD DA ................ FACS @ 0x00000000DAF5A000 0000: 46 41 43 53 40 00 00 00 00 A2 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000DAFE5000 0000: 46 41 43 50 F4 00 00 00 04 50 4C 45 4E 4F 56 4F FACP.....PLENOVO 0010: 54 50 2D 47 32 20 20 20 10 11 00 00 50 54 4C 20 TP-G2 ....PTL 0020: 02 00 00 00 00 A0 F5 DA 00 80 FE DA 00 02 09 00 ................ 0030: B2 00 00 00 F2 F1 00 F3 00 04 00 00 00 00 00 00 ................ 0040: 04 04 00 00 00 00 00 00 50 04 00 00 08 04 00 00 ........P....... 0050: 20 04 00 00 00 00 00 00 04 02 01 04 10 00 10 F4 ............... 0060: 65 00 E9 03 00 00 00 00 01 03 0D 00 32 13 00 00 e...........2... 0070: AD 46 00 00 01 08 00 00 F9 0C 00 00 00 00 00 00 .F.............. 0080: 06 00 00 00 00 A0 F5 DA 00 00 00 00 00 80 FE DA ................ 0090: 00 00 00 00 01 20 00 00 00 04 00 00 00 00 00 00 ..... .......... 00A0: 01 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00B0: 04 04 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................ 00C0: 00 00 00 00 01 08 00 00 50 04 00 00 00 00 00 00 ........P....... 00D0: 01 20 00 00 08 04 00 00 00 00 00 00 01 80 00 00 . .............. 00E0: 20 04 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ............... 00F0: 00 00 00 00 .... fwts-test/rsdp-0001/rsdp.log000066400000000000000000000024741465205512700160350ustar00rootroot00000000000000rsdp rsdp: RSDP Root System Description Pointer test. rsdp ---------------------------------------------------------- rsdp Test 1 of 1: RSDP Root System Description Pointer test. rsdp PASSED: Test 1, RSDP first checksum is correct rsdp PASSED: Test 1, RSDP: oem_id contains only printable rsdp characters. rsdp PASSED: Test 1, RSDP: revision is 2. rsdp PASSED: Test 1, RSDP: at least one of RsdtAddress or rsdp XsdtAddress is non-zero. rsdp NOTE: The RSDT and XSDT are both defined. An operating rsdp system supporting ACPI 1.0 should use the RSDT, otherwise rsdp it will use the XSDT. RSDT = 0x3674202324, XSDT = rsdp 0x3220176896 rsdp PASSED: Test 1, RSDP: the correct RSDT/XSDT address is rsdp being used. rsdp PASSED: Test 1, RSDP: the table is the correct length. rsdp PASSED: Test 1, RSDP second checksum is correct rsdp PASSED: Test 1, RSDP: the reserved field is zero. rsdp rsdp ========================================================== rsdp 8 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 rsdp info only. rsdp ========================================================== fwts-test/rsdp-0001/test-0001.sh000077500000000000000000000010471465205512700162510ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against broken ACPI RSDP" NAME=test-0001.sh TMPLOG=$TMP/rsdp.log.$$ machine=$(uname -m) case $machine in x86 | x86_32 | x86_64 | i686 ) ;; *) echo SKIP: $TEST, $NAME exit 77 ;; esac $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/rsdp-0001/acpidump-0001.log rsdp - | cut -c7- | grep "^rsdp" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/rsdp-0001/rsdp.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/rsdt-0001/000077500000000000000000000000001465205512700143575ustar00rootroot00000000000000fwts-test/rsdt-0001/acpidump-0001.log000066400000000000000000000013761465205512700172510ustar00rootroot00000000000000RSDT @ 0xbf6d87f0 0000: 52 53 44 54 70 00 00 00 01 07 4c 45 4e 4f 56 4f RSDT......LENOVO 0010: 54 50 2d 36 38 20 20 20 00 00 04 06 20 4c 54 50 TP-68 .... LTP 0020: 00 00 00 00 00 00 00 bf 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ RSD PTR @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... fwts-test/rsdt-0001/rsdt-0001.log000066400000000000000000000204421465205512700164160ustar00rootroot00000000000000rsdt rsdt: RSDT Root System Description Table test. rsdt ---------------------------------------------------------- rsdt Cannot find FACP. rsdt Test 1 of 1: RSDT Root System Description Table test. rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 1 is null, rsdt should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 2 is null, rsdt should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 3 is null, rsdt should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 4 is null, rsdt should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 5 is null, rsdt should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 6 is null, rsdt should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 7 is null, rsdt should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 8 is null, rsdt should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 9 is null, rsdt should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 10 is null rsdt , should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 11 is null rsdt , should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 12 is null rsdt , should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 13 is null rsdt , should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 14 is null rsdt , should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 15 is null rsdt , should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 16 is null rsdt , should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 17 is null rsdt , should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt FAILED [HIGH] RSDTEntryNull: Test 1, RSDT Entry 18 is null rsdt , should not be non-zero. rsdt rsdt ADVICE: A RSDT pointer is null and therefore erroneously rsdt points to an invalid 32 bit ACPI table header. At worse rsdt this will cause the kernel to oops, at best the kernel may rsdt ignore this. However, it should be fixed where possible. rsdt rsdt rsdt ========================================================== rsdt 0 passed, 18 failed, 0 warning, 0 aborted, 0 skipped, 0 rsdt info only. rsdt ========================================================== fwts-test/rsdt-0001/test-0001.sh000077500000000000000000000010231465205512700162470ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against broken ACPI RSDT table" NAME=test-0001.sh TMPLOG=$TMP/rsdt.log.$$ $FWTS --show-tests | grep RSDT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/rsdt-0001/acpidump-0001.log rsdt - | cut -c7- | grep "^rsdt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/rsdt-0001/rsdt-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/s0idle-0001/000077500000000000000000000000001465205512700145635ustar00rootroot00000000000000fwts-test/s0idle-0001/acpidump-0001.log000066400000000000000000000031261465205512700174500ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 F4 00 00 00 03 B8 41 4D 44 20 20 20 FACP......AMD 0010: 47 55 41 4D 20 20 20 20 00 00 04 06 49 4E 54 4C GUAM ....INTL 0020: 28 05 20 20 C0 2F E9 AF 92 47 E8 AF 00 02 09 00 (. ./...G...... 0030: B0 00 00 00 F0 F1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 E9 03 00 00 00 00 01 00 0D 00 32 00 00 00 e...........2... 0070: A5 C1 20 00 00 00 00 00 00 00 00 00 00 00 00 00 .. ............. 0080: 00 00 00 00 C0 2F E9 AF 00 00 00 00 92 47 E8 AF ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00B0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00C0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00D0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00E0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00F0: 00 00 00 00 .... fwts-test/s0idle-0001/acpidump-0002.log000066400000000000000000000031261465205512700174510ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 F4 00 00 00 03 D8 41 4D 44 20 20 20 FACP......AMD 0010: 47 55 41 4D 20 20 20 20 00 00 04 06 49 4E 54 4C GUAM ....INTL 0020: 28 05 20 20 C0 2F E9 AF 92 47 E8 AF 00 02 09 00 (. ./...G...... 0030: B0 00 00 00 F0 F1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 E9 03 00 00 00 00 01 00 0D 00 32 00 00 00 e...........2... 0070: A5 C1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 C0 2F E9 AF 00 00 00 00 92 47 E8 AF ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00B0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00C0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00D0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00E0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00F0: 00 00 00 00 .... fwts-test/s0idle-0001/s0idle-0001.log000066400000000000000000000004651465205512700170310ustar00rootroot00000000000000s0idle s0idle: S0IDLE FADT Low Power S0 Idle tests. s0idle ---------------------------------------------------------- s0idle Test 1 of 1: Test ACPI FADT S0 idle capable. s0idle PASSED: Test 1, LOW_POWER_S0_IDLE_CAPABLE is set in ACPI s0idle FADT. s0idle fwts-test/s0idle-0001/s0idle-0002.log000066400000000000000000000005151465205512700170260ustar00rootroot00000000000000s0idle s0idle: S0IDLE FADT Low Power S0 Idle tests. s0idle ---------------------------------------------------------- s0idle Test 1 of 1: Test ACPI FADT S0 idle capable. s0idle FAILED [HIGH] S0idleNoFADT: Test 1, s0idle LOW_POWER_S0_IDLE_CAPABLE is not set in ACPI FADT. s0idle fwts-test/s0idle-0001/test-0001.sh000077500000000000000000000010141465205512700164530ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against S0IDLE" NAME=test-0001.sh TMPLOG=$TMP/s0idle.log.$$ $FWTS --show-tests | grep S0IDLE > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/s0idle-0001/acpidump-0001.log s0idle - | cut -c7- | grep "^s0idle" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/s0idle-0001/s0idle-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/s0idle-0001/test-0002.sh000077500000000000000000000010241465205512700164550ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid S0IDLE" NAME=test-0001.sh TMPLOG=$TMP/s0idle.log.$$ $FWTS --show-tests | grep S0IDLE > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/s0idle-0001/acpidump-0002.log s0idle - | cut -c7- | grep "^s0idle" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/s0idle-0001/s0idle-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/s3pt-0001/000077500000000000000000000000001465205512700142745ustar00rootroot00000000000000fwts-test/s3pt-0001/acpidump-0001.log000066400000000000000000000035321465205512700171620ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... S3PT @ 0x00000000 0000: 53 33 50 54 34 00 00 00 00 00 18 01 00 00 00 00 S3PT4........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 14 01 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 .... fwts-test/s3pt-0001/acpidump-0002.log000066400000000000000000000036541465205512700171700ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... S3PT @ 0x00000000 0000: 53 33 50 54 44 00 00 00 01 00 14 01 00 00 00 00 S3PT4........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 01 00 14 01 ................ 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 02 00 14 01 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 ............ fwts-test/s3pt-0001/s3pt-0001.log000066400000000000000000000022171465205512700162500ustar00rootroot00000000000000s3pt s3pt: S3 Performance Table test. s3pt ---------------------------------------------------------- s3pt Test 1 of 1: Validate S3PT table. s3pt S3 Performance Table: s3pt Basic S3 Resume Performance Record: s3pt Record Type: 0x0000 s3pt Record Length: 0x18 s3pt Revision: 0x01 s3pt Resume Count: 0x00000000 s3pt FullResume: 0x0000000000000000 s3pt AverageResume: 0x0000000000000000 s3pt s3pt Basic S3 Suspend Performance Record: s3pt Record Type: 0x0001 s3pt Record Length: 0x14 s3pt Revision: 0x01 s3pt SuspendStart: 0x0000000000000000 s3pt SuspendEnd: 0x0000000000000000 s3pt s3pt PASSED: Test 1, No issues found in S3PT table. s3pt s3pt ========================================================== s3pt 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 s3pt info only. s3pt ========================================================== fwts-test/s3pt-0001/s3pt-0002.log000066400000000000000000000030621465205512700162500ustar00rootroot00000000000000s3pt s3pt: S3 Performance Table test. s3pt ---------------------------------------------------------- s3pt Test 1 of 1: Validate S3PT table. s3pt S3 Performance Table: s3pt Basic S3 Suspend Performance Record: s3pt Record Type: 0x0001 s3pt Record Length: 0x14 s3pt Revision: 0x01 s3pt SuspendStart: 0x0000000000000000 s3pt SuspendEnd: 0x0000000000000000 s3pt s3pt Basic S3 Suspend Performance Record: s3pt Record Type: 0x0001 s3pt Record Length: 0x14 s3pt Revision: 0x01 s3pt SuspendStart: 0x0000000000000000 s3pt SuspendEnd: 0x0000000000000000 s3pt s3pt FAILED [HIGH] S3PTPerformanceRecordTypeInvalid: Test 1, s3pt S3PT Performance Record Type is 2 which is invalid value. s3pt s3pt FAILED [HIGH] S3PTBadRecordTypeCount: Test 1, One of the s3pt basic S3 resume performance record type and only will be s3pt produced, but got 0 s3pt FAILED [HIGH] S3PTBadRecordTypeCount: Test 1, Zero to one s3pt of the basic S3 suspend performance record type will be s3pt produced, but got 2 s3pt s3pt ========================================================== s3pt 0 passed, 3 failed, 0 warning, 0 aborted, 0 skipped, 0 s3pt info only. s3pt ========================================================== fwts-test/s3pt-0001/test-0001.sh000077500000000000000000000010011465205512700161600ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against S3PT" NAME=test-0001.sh TMPLOG=$TMP/s3pt.log.$$ $FWTS --show-tests | grep s3pt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/s3pt-0001/acpidump-0001.log s3pt - | cut -c7- | grep "^s3pt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/s3pt-0001/s3pt-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/s3pt-0001/test-0002.sh000077500000000000000000000010111465205512700161620ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid S3PT" NAME=test-0001.sh TMPLOG=$TMP/s3pt.log.$$ $FWTS --show-tests | grep s3pt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/s3pt-0001/acpidump-0002.log s3pt - | cut -c7- | grep "^s3pt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/s3pt-0001/s3pt-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/sbst-0001/000077500000000000000000000000001465205512700143565ustar00rootroot00000000000000fwts-test/sbst-0001/acpidump-0001.log000066400000000000000000000034341465205512700172450ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SBST @ 0x00000000 0000: 53 42 53 54 30 00 00 00 01 c7 4c 45 4e 4f 56 4f SBST0.....LENOVO 0010: 54 50 2d 48 4e 20 20 20 10 10 00 00 50 54 4c 20 TP-HN ....PTL 0020: 02 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 ................ fwts-test/sbst-0001/acpidump-0002.log000066400000000000000000000034341465205512700172460ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SBST @ 0x00000000 0000: 53 42 53 54 30 00 00 00 01 c7 4c 45 4e 4f 56 4f SBST0.....LENOVO 0010: 54 50 2d 48 4e 20 20 20 10 10 00 00 50 54 4c 20 TP-HN ....PTL 0020: 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 ................ fwts-test/sbst-0001/sbst-0001.log000066400000000000000000000010401465205512700164050ustar00rootroot00000000000000sbst sbst: SBST Smart Battery Specification Table test. sbst ---------------------------------------------------------- sbst Test 1 of 1: SBST Smart Battery Specification Table test. sbst PASSED: Test 1, No issues found in SBST table. sbst sbst ========================================================== sbst 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 sbst info only. sbst ========================================================== fwts-test/sbst-0001/sbst-0002.log000066400000000000000000000014261465205512700164160ustar00rootroot00000000000000sbst sbst: SBST Smart Battery Specification Table test. sbst ---------------------------------------------------------- sbst Test 1 of 1: SBST Smart Battery Specification Table test. sbst FAILED [MEDIUM] SBSTEnergeyLevel2: Test 1, SBST Low Energy sbst Energy Level (1) is greater than the Warning Energy Level sbst (0). sbst FAILED [MEDIUM] SBSTEnergyLevelZero: Test 1, SBST Warning sbst Energy Level is zero, which is probably too low. sbst sbst ========================================================== sbst 0 passed, 2 failed, 0 warning, 0 aborted, 0 skipped, 0 sbst info only. sbst ========================================================== fwts-test/sbst-0001/test-0001.sh000077500000000000000000000010011465205512700162420ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against SBST" NAME=test-0001.sh TMPLOG=$TMP/sbst.log.$$ $FWTS --show-tests | grep SBST > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/sbst-0001/acpidump-0001.log sbst - | cut -c7- | grep "^sbst" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/sbst-0001/sbst-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/sbst-0001/test-0002.sh000077500000000000000000000010111465205512700162440ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid SBST" NAME=test-0001.sh TMPLOG=$TMP/sbst.log.$$ $FWTS --show-tests | grep SBST > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/sbst-0001/acpidump-0002.log sbst - | cut -c7- | grep "^sbst" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/sbst-0001/sbst-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/sdei-0001/000077500000000000000000000000001465205512700143275ustar00rootroot00000000000000fwts-test/sdei-0001/acpidump-0001.log000066400000000000000000000034301465205512700172120ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SDEI @ 0x0000000000000000 0000: 53 44 45 49 24 00 00 00 01 7c 41 52 4d 20 20 20 SDEI$....|ARM 0010: 54 45 4d 50 4c 41 54 45 01 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 28 07 17 20 (.. fwts-test/sdei-0001/acpidump-0002.log000066400000000000000000000034301465205512700172130ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SDEI @ 0x0000000000000000 0000: 53 44 45 49 24 00 00 00 01 7c 41 52 4d 20 20 20 SDEI$....|ARM 0010: 54 45 4d 50 4c 41 54 45 01 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 28 07 17 20 (.. fwts-test/sdei-0001/sdei-0001.log000066400000000000000000000011471465205512700163370ustar00rootroot00000000000000sdei sdei: SDEI Software Delegated Exception Interface Table sdei test sdei ---------------------------------------------------------- sdei Test 1 of 1: Validate SDEI table. sdei SDEI (Software Delegated Exception Interface) Table: sdei PASSED: Test 1, No issues found in SDEI table. sdei sdei ========================================================== sdei 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 sdei info only. sdei ========================================================== fwts-test/sdei-0001/sdei-0002.log000066400000000000000000000011471465205512700163400ustar00rootroot00000000000000sdei sdei: SDEI Software Delegated Exception Interface Table sdei test sdei ---------------------------------------------------------- sdei Test 1 of 1: Validate SDEI table. sdei SDEI (Software Delegated Exception Interface) Table: sdei PASSED: Test 1, No issues found in SDEI table. sdei sdei ========================================================== sdei 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 sdei info only. sdei ========================================================== fwts-test/sdei-0001/test-0001.sh000077500000000000000000000010011465205512700162130ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against SDEI" NAME=test-0001.sh TMPLOG=$TMP/sdei.log.$$ $FWTS --show-tests | grep sdei > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/sdei-0001/acpidump-0001.log sdei - | cut -c7- | grep "^sdei" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/sdei-0001/sdei-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/sdei-0001/test-0002.sh000077500000000000000000000010111465205512700162150ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid SDEI" NAME=test-0001.sh TMPLOG=$TMP/sdei.log.$$ $FWTS --show-tests | grep sdei > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/sdei-0001/acpidump-0002.log sdei - | cut -c7- | grep "^sdei" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/sdei-0001/sdei-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/sdev-0001/000077500000000000000000000000001465205512700143445ustar00rootroot00000000000000fwts-test/sdev-0001/acpidump-0001.log000066400000000000000000000043321465205512700172310ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SDEV @ 0x0000000000000000 0000: 53 44 45 56 89 00 00 00 01 40 49 4E 54 45 4C 20 SDEV.....@INTEL 0010: 54 65 6D 70 6C 61 74 65 01 00 00 00 49 4E 54 4C Template....INTL 0020: 31 03 21 20 00 03 41 00 23 00 16 00 39 00 08 00 1.! ..A.#...9... 0030: 10 00 13 00 00 00 00 00 01 00 03 02 05 04 07 06 ................ 0040: 09 08 0A 0B 0C 0D 0E 5C 5C 5F 53 42 5F 2E 50 43 .......\\_SB_.PC 0050: 49 30 2E 55 53 42 31 2E 53 55 42 31 00 00 11 22 I0.USB1.SUB1..." 0060: 33 44 55 66 77 01 01 24 00 10 00 20 00 10 00 04 3DUfw..$... .... 0070: 00 14 00 10 00 11 22 33 44 EE DD CC BB AA 55 66 ......"3D.....Uf 0080: 77 88 99 AA BB CC DD EE FF w........ fwts-test/sdev-0001/acpidump-0002.log000066400000000000000000000043321465205512700172320ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SDEV @ 0x0000000000000000 0000: 53 44 45 56 89 00 00 00 01 40 49 4E 54 45 4C 20 SDEV.....@INTEL 0010: 54 65 6D 70 6C 61 74 65 01 00 00 00 49 4E 54 4C Template....INTL 0020: 31 03 21 20 00 07 41 00 23 00 16 00 39 00 08 00 1.! ..A.#...9... 0030: 10 00 13 00 00 00 00 00 01 00 03 02 05 04 07 06 ................ 0040: 09 08 0A 0B 0C 0D 0E 5C 5C 5F 53 42 5F 2E 50 43 .......\\_SB_.PC 0050: 49 30 2E 55 53 42 31 2E 53 55 42 31 00 00 11 22 I0.USB1.SUB1..." 0060: 33 44 55 66 77 01 03 24 00 10 00 20 00 10 00 04 3DUfw..$... .... 0070: 00 14 00 10 00 11 22 33 44 EE DD CC BB AA 55 66 ......"3D.....Uf 0080: 77 88 99 AA BB CC DD EE FF w........ fwts-test/sdev-0001/sdev-0001.log000066400000000000000000000035501465205512700163710ustar00rootroot00000000000000sdev sdev: SDEV Secure Devices Table test sdev ---------------------------------------------------------- sdev Test 1 of 1: Validate SDEV table. sdev SDEV Secure Devices Table: sdev ACPI Integrated Device (Type 0): sdev Type: 0x00 sdev Flags: 0x03 sdev Allow handoff to unsecure OS sdev Secure access components present sdev Length: 0x0041 sdev Device Id Offset: 0x0023 sdev Device Id Length: 0x0016 sdev Vendor Specific Data Offset: 0x0039 sdev Vendor Specific Data Length: 0x0008 sdev Secure Access Components Offset: 0x0010 sdev Secure Access Components Length: 0x0013 sdev sdev PCIe Endpoint Device (Type 1): sdev Type: 0x01 sdev Flags: 0x01 sdev Length: 0x0024 sdev PCI Segment Number: 0x0010 sdev Start Bus Number: 0x0020 sdev PCI Path Offset: 0x0010 sdev PCI Path Length: 0x0004 sdev Vendor Specific Data Offset: 0x0014 sdev Vendor Specific Data Length: 0x0010 sdev sdev sdev PASSED: Test 1, No issues found in SDEV table. sdev sdev ========================================================== sdev 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 sdev info only. sdev ========================================================== fwts-test/sdev-0001/sdev-0002.log000066400000000000000000000040651465205512700163740ustar00rootroot00000000000000sdev sdev: SDEV Secure Devices Table test sdev ---------------------------------------------------------- sdev Test 1 of 1: Validate SDEV table. sdev SDEV Secure Devices Table: sdev ACPI Integrated Device (Type 0): sdev Type: 0x00 sdev Flags: 0x07 sdev Allow handoff to unsecure OS sdev Secure access components present sdev Length: 0x0041 sdev Device Id Offset: 0x0023 sdev Device Id Length: 0x0016 sdev Vendor Specific Data Offset: 0x0039 sdev Vendor Specific Data Length: 0x0008 sdev Secure Access Components Offset: 0x0010 sdev Secure Access Components Length: 0x0013 sdev FAILED [HIGH] SDEVReservedBitsNonZero: Test 1, SDEV Flags sdev Bits [15..2] must be zero, got 0x07 instead sdev sdev PCIe Endpoint Device (Type 1): sdev Type: 0x01 sdev Flags: 0x03 sdev Length: 0x0024 sdev PCI Segment Number: 0x0010 sdev Start Bus Number: 0x0020 sdev PCI Path Offset: 0x0010 sdev PCI Path Length: 0x0004 sdev Vendor Specific Data Offset: 0x0014 sdev Vendor Specific Data Length: 0x0010 sdev FAILED [HIGH] SDEVReservedBitsNonZero: Test 1, SDEV Flags sdev Bits [15..1] must be zero, got 0x03 instead sdev sdev sdev sdev ========================================================== sdev 0 passed, 2 failed, 0 warning, 0 aborted, 0 skipped, 0 sdev info only. sdev ========================================================== fwts-test/sdev-0001/test-0001.sh000077500000000000000000000010011465205512700162300ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against SDEV" NAME=test-0001.sh TMPLOG=$TMP/sdev.log.$$ $FWTS --show-tests | grep sdev > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/sdev-0001/acpidump-0001.log sdev - | cut -c7- | grep "^sdev" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/sdev-0001/sdev-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/sdev-0001/test-0002.sh000077500000000000000000000010111465205512700162320ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid SDEV" NAME=test-0001.sh TMPLOG=$TMP/sdev.log.$$ $FWTS --show-tests | grep sdev > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/sdev-0001/acpidump-0002.log sdev - | cut -c7- | grep "^sdev" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/sdev-0001/sdev-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/skvl-0001/000077500000000000000000000000001465205512700143625ustar00rootroot00000000000000fwts-test/skvl-0001/acpidump-0001.log000066400000000000000000000037621465205512700172550ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SKVL @ 0x00000000 0000: 53 4B 56 4C 58 00 00 00 01 52 49 4E 54 45 4C 20 MISC.....RINTEL 0010: 54 65 6D 70 6C 61 74 65 00 00 00 00 49 4E 54 4C Template....INTL 0020: 05 01 21 20 03 00 00 00 00 00 00 00 11 22 00 00 ... ....."...... 0030: 11 22 33 44 55 66 77 88 00 00 00 00 22 33 00 00 ."3DUfw....."... 0040: 22 33 44 55 66 77 88 99 00 00 00 00 FF 00 00 00 "3DUfw.......... 0050: AA BB CC DD EE FF 00 11 ........ fwts-test/skvl-0001/acpidump-0002.log000066400000000000000000000037601465205512700172540ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SKVL @ 0x00000000 0000: 53 4B 56 4C 56 00 00 00 01 52 49 4E 54 45 4C 20 MISC.....RINTEL 0010: 54 65 6D 70 6C 61 74 65 00 00 00 00 49 4E 54 4C Template....INTL 0020: 05 01 21 20 03 00 00 00 01 00 00 00 11 22 00 00 ... ....."...... 0030: 11 22 33 44 55 66 77 88 00 00 FF 00 22 33 00 00 ."3DUfw....."... 0040: 22 33 44 55 66 77 88 99 00 00 00 00 FF 00 00 00 "3DUfw.......... 0050: AA BB CC DD EE FF ...... fwts-test/skvl-0001/skvl-0001.log000066400000000000000000000025011465205512700164200ustar00rootroot00000000000000skvl skvl: SKVL Storage Volume Key Location Table test. skvl ---------------------------------------------------------- skvl Test 1 of 1: Validate SKVL table. skvl Storage Volume Key Location Table: skvl Key Count: 0x00000003 skvl skvl Storage Volume Key Structure: skvl Key Type: 0x0000 skvl Key Format: 0x0000 skvl Key Size: 0x00002211 skvl Key Address: 0x8877665544332211 skvl skvl Storage Volume Key Structure: skvl Key Type: 0x0000 skvl Key Format: 0x0000 skvl Key Size: 0x00003322 skvl Key Address: 0x9988776655443322 skvl skvl Storage Volume Key Structure: skvl Key Type: 0x0000 skvl Key Format: 0x0000 skvl Key Size: 0x000000ff skvl Key Address: 0x1100ffeeddccbbaa skvl skvl PASSED: Test 1, No issues found in SKVL table. skvl skvl ========================================================== skvl 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 skvl info only. skvl ========================================================== fwts-test/skvl-0001/skvl-0002.log000066400000000000000000000025751465205512700164340ustar00rootroot00000000000000skvl skvl: SKVL Storage Volume Key Location Table test. skvl ---------------------------------------------------------- skvl Test 1 of 1: Validate SKVL table. skvl Storage Volume Key Location Table: skvl Key Count: 0x00000003 skvl skvl Storage Volume Key Structure: skvl Key Type: 0x0001 skvl FAILED [HIGH] SKVLBadFieldValue: Test 1, SKVL Key Type skvl field must be 0, got 1 instead. skvl Key Format: 0x0000 skvl Key Size: 0x00002211 skvl Key Address: 0x8877665544332211 skvl skvl Storage Volume Key Structure: skvl Key Type: 0x0000 skvl Key Format: 0x00ff skvl FAILED [HIGH] SKVLBadFieldValue: Test 1, SKVL Key Format skvl field must be 0, got 255 instead. skvl Key Size: 0x00003322 skvl Key Address: 0x9988776655443322 skvl skvl FAILED [HIGH] SKVLOutOfRangeOffset: Test 1, SKVL key skvl structure offset is out of range. skvl skvl ========================================================== skvl 0 passed, 3 failed, 0 warning, 0 aborted, 0 skipped, 0 skvl info only. skvl ========================================================== fwts-test/skvl-0001/test-0001.sh000077500000000000000000000010011465205512700162460ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against SKVL" NAME=test-0001.sh TMPLOG=$TMP/skvl.log.$$ $FWTS --show-tests | grep skvl > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/skvl-0001/acpidump-0001.log skvl - | cut -c7- | grep "^skvl" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/skvl-0001/skvl-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/skvl-0001/test-0002.sh000077500000000000000000000010011465205512700162470ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against SKVL" NAME=test-0002.sh TMPLOG=$TMP/skvl.log.$$ $FWTS --show-tests | grep skvl > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/skvl-0001/acpidump-0002.log skvl - | cut -c7- | grep "^skvl" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/skvl-0001/skvl-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/slic-0001/000077500000000000000000000000001465205512700143355ustar00rootroot00000000000000fwts-test/slic-0001/acpidump-0001.log000066400000000000000000000064451465205512700172310ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SLIC @ 0x00000000 0000: 53 4c 49 43 76 01 00 00 01 99 41 43 52 53 59 53 SLICv.....ACRSYS 0010: 41 43 52 50 52 44 43 54 01 00 00 00 31 30 32 35 ACRPRDCT....1025 0020: 00 00 04 00 00 00 00 00 9c 00 00 00 06 02 00 00 ................ 0030: 00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00 .$..RSA1........ 0040: b3 6d 83 60 8d 83 65 6e e6 4b a7 6f 38 04 31 c1 .m.`..en.K.o8.1. 0050: e2 45 bf 34 66 1f 17 91 7f 5c 15 12 b7 01 4d 57 .E.4f....\....MW 0060: 6d 8e ae 6b e4 cc f8 a0 e1 bb 79 ff 08 53 e3 77 m..k......y..S.w 0070: e7 d4 70 5e 5c ef 6f 81 dd 1b 5f 30 e2 99 9b b9 ..p^\.o..._0.... 0080: d0 93 46 ab d8 27 7a f0 f0 a7 4c 32 d4 91 86 ba ..F...z...L2.... 0090: a1 6c a2 3c 73 cf 86 2d 95 9a 06 50 23 f7 7e 06 .l. /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/slic-0001/acpidump-0001.log slic - | cut -c7- | grep "^slic" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/slic-0001/slic-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/slic-0001/test-0002.sh000077500000000000000000000010041465205512700162250ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid SLIC" NAME=test-0001.sh TMPLOG=$TMP/slic.log.$$ $FWTS --show-tests | grep SLIC > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/slic-0001/acpidump-0002.log slic - | cut -c7- | grep "^slic" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/slic-0001/slic-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/slit-0001/000077500000000000000000000000001465205512700143565ustar00rootroot00000000000000fwts-test/slit-0001/acpidump-0001.log000066400000000000000000000041001465205512700172340ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SLIT @ 0x00000000 0000: 53 4c 49 54 6c 00 00 00 01 20 41 4d 44 20 20 20 SLITl.... AMD 0010: 41 47 45 53 41 20 20 20 01 00 00 00 41 4d 44 20 AGESA ....AMD 0020: 01 00 00 00 08 00 00 00 00 00 00 00 0a 10 10 16 ................ 0030: 10 16 10 16 10 0a 16 10 16 10 10 16 10 16 0a 10 ................ 0040: 10 16 10 16 16 10 10 0a 10 16 16 10 10 16 10 10 ................ 0050: 0a 10 10 10 16 10 16 16 10 0a 10 10 10 10 10 16 ................ 0060: 10 10 0a 10 16 16 16 10 10 10 10 0a ............ fwts-test/slit-0001/acpidump-0002.log000066400000000000000000000041001465205512700172350ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SLIT @ 0x00000000 0000: 53 4c 49 54 6c 00 00 00 01 20 41 4d 44 20 20 20 SLITl.... AMD 0010: 41 47 45 53 41 20 20 20 01 00 00 00 41 4d 44 20 AGESA ....AMD 0020: 01 00 00 00 08 00 00 00 00 00 00 00 0b 10 10 16 ................ 0030: 11 16 10 16 10 0a 16 10 16 10 10 16 10 16 0a 10 ................ 0040: 10 16 93 16 16 09 10 0a 10 16 16 10 10 16 10 10 ................ 0050: 0a 14 10 10 16 10 16 16 10 0a 10 10 10 10 10 16 ................ 0060: 10 10 0a 10 16 16 16 10 10 10 10 fe ............ fwts-test/slit-0001/slit-0001.log000066400000000000000000000012661465205512700164170ustar00rootroot00000000000000slit slit: SLIT System Locality Distance Information test. slit ---------------------------------------------------------- slit Test 1 of 1: SLIT System Locality Distance Information slit test. slit SLIT System Locality Distance Information Table: slit Number of Localities: 0x0000000000000008 slit PASSED: Test 1, No issues found in SLIT table. slit slit ========================================================== slit 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 slit info only. slit ========================================================== fwts-test/slit-0001/slit-0002.log000066400000000000000000000045301465205512700164150ustar00rootroot00000000000000slit slit: SLIT System Locality Distance Information test. slit ---------------------------------------------------------- slit Test 1 of 1: SLIT System Locality Distance Information slit test. slit SLIT System Locality Distance Information Table: slit Number of Localities: 0x0000000000000008 slit FAILED [HIGH] SLITBadCornerEntry: Test 1, SLIT Entry[0][0] slit is 0xb, expecting value 0x0a. slit FAILED [HIGH] SLITBadCornerEntry: Test 1, SLIT Entry[7][7] slit is 0xfe, expecting value 0x0a. slit FAILED [HIGH] SLITEntryReserved: Test 1, SLIT Entry[0][4] slit is 0x11 and not the same as SLIT Entry[4][0] which is 0x10 slit FAILED [HIGH] SLITEntryReserved: Test 1, SLIT Entry[1][3] slit is 0x10 and not the same as SLIT Entry[3][1] which is 0x9 slit FAILED [HIGH] SLITEntryReserved: Test 1, SLIT Entry[2][6] slit is 0x93 and not the same as SLIT Entry[6][2] which is 0x10 slit FAILED [HIGH] SLITEntryReserved: Test 1, SLIT Entry[3][1] slit is 0x9 which is a reserved value and has no defined slit meaning slit FAILED [HIGH] SLITEntryReserved: Test 1, SLIT Entry[3][1] slit is 0x9 and not the same as SLIT Entry[1][3] which is 0x10 slit FAILED [HIGH] SLITEntryReserved: Test 1, SLIT Entry[4][0] slit is 0x10 and not the same as SLIT Entry[0][4] which is 0x11 slit FAILED [HIGH] SLITEntryReserved: Test 1, SLIT Entry[4][5] slit is 0x14 and not the same as SLIT Entry[5][4] which is 0x10 slit FAILED [HIGH] SLITEntryReserved: Test 1, SLIT Entry[5][4] slit is 0x10 and not the same as SLIT Entry[4][5] which is 0x14 slit FAILED [HIGH] SLITEntryReserved: Test 1, SLIT Entry[6][2] slit is 0x10 and not the same as SLIT Entry[2][6] which is 0x93 slit Total of 1 entries were using reserved values slit Total of 8 entries were not matching their diagonal parner slit element slit slit ========================================================== slit 0 passed, 11 failed, 0 warning, 0 aborted, 0 skipped, 0 slit info only. slit ========================================================== fwts-test/slit-0001/test-0001.sh000077500000000000000000000010011465205512700162420ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against SLIT" NAME=test-0001.sh TMPLOG=$TMP/slit.log.$$ $FWTS --show-tests | grep SLIT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/slit-0001/acpidump-0001.log slit - | cut -c7- | grep "^slit" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/slit-0001/slit-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/slit-0001/test-0002.sh000077500000000000000000000010111465205512700162440ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid SLIT" NAME=test-0001.sh TMPLOG=$TMP/slit.log.$$ $FWTS --show-tests | grep SLIT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/slit-0001/acpidump-0002.log slit - | cut -c7- | grep "^slit" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/slit-0001/slit-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/spcr-0001/000077500000000000000000000000001465205512700143525ustar00rootroot00000000000000fwts-test/spcr-0001/acpidump-0001.log000066400000000000000000000036561465205512700172470ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SPCR @ 0x00000000 0000: 53 50 43 52 50 00 00 00 01 53 53 55 4e 20 20 20 SPCRP....SSUN 0010: 58 34 32 30 30 20 4d 32 34 00 00 00 4d 53 46 54 X4200 M24...MSFT 0020: 97 00 00 00 00 00 00 00 01 08 00 00 f8 03 00 00 ................ 0030: 00 00 00 00 01 04 00 00 00 00 03 00 01 00 03 00 ................ 0040: ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 ................ fwts-test/spcr-0001/acpidump-0002.log000066400000000000000000000036561465205512700172500ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SPCR @ 0x00000000 0000: 53 50 43 52 50 00 00 00 04 53 53 55 4e 20 20 20 SPCRP....SSUN 0010: 58 34 32 30 30 20 4d 32 34 00 00 00 4d 53 46 54 X4200 M24...MSFT 0020: 97 00 00 00 08 f0 20 00 f1 08 00 00 f8 03 00 00 ................ 0030: 00 00 00 00 01 04 00 00 00 00 08 00 01 00 0f 00 ................ 0040: 2f ff ff ff 00 00 00 00 00 00 00 00 11 22 33 44 ................ fwts-test/spcr-0001/spcr-0001.log000066400000000000000000000015031465205512700164010ustar00rootroot00000000000000spcr spcr: SPCR Serial Port Console Redirection Table test. spcr ---------------------------------------------------------- spcr Test 1 of 3: SPCR Serial Port Console Redirection Table spcr test. spcr Serial Interface: 16550 compatible spcr Baud Rate: 9600 spcr Terminal Type: ANSI spcr PASSED: Test 1, No issues found in SPCR table. spcr spcr Test 2 of 3: SPCR Revision Test. spcr spcr Test 3 of 3: SPCR GSIV Interrupt Test. spcr spcr ========================================================== spcr 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 spcr info only. spcr ========================================================== fwts-test/spcr-0001/spcr-0002.log000066400000000000000000000026621465205512700164110ustar00rootroot00000000000000spcr spcr: SPCR Serial Port Console Redirection Table test. spcr ---------------------------------------------------------- spcr Test 1 of 3: SPCR Serial Port Console Redirection Table spcr test. spcr Serial Interface: APM88xxxx spcr FAILED [MEDIUM] SPCRReservedNonZero: Test 1, SPCR spcr Reserved1 field must be zero, got 0x000020f0 instead spcr Baud Rate: Reserved spcr FAILED [HIGH] SPCRBaudRateReserved: Test 1, SPCR Serial spcr baud rate type 0x08 is a reserved baud rate spcr Terminal Type: Reserved spcr FAILED [HIGH] SPCRTerminalTypeReserved: Test 1, SPCR spcr terminal type type 0x0f is a reserved terminal type spcr FAILED [HIGH] SPCRPciVendorID: Test 1, SPCR PCI vendor ID spcr is 0xffff, expecting non-0xffff for non-PCI device spcr FAILED [HIGH] SPCRPciFlagsBit0: Test 1, SPCR PCI flags spcr compatibility bit 0 is 0, expecting 1 for PCI device spcr spcr Test 2 of 3: SPCR Revision Test. spcr spcr Test 3 of 3: SPCR GSIV Interrupt Test. spcr spcr ========================================================== spcr 0 passed, 5 failed, 0 warning, 0 aborted, 0 skipped, 0 spcr info only. spcr ========================================================== fwts-test/spcr-0001/test-0001.sh000077500000000000000000000010011465205512700162360ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against SPCR" NAME=test-0001.sh TMPLOG=$TMP/spcr.log.$$ $FWTS --show-tests | grep SPCR > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/spcr-0001/acpidump-0001.log spcr - | cut -c7- | grep "^spcr" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/spcr-0001/spcr-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/spcr-0001/test-0002.sh000077500000000000000000000010111465205512700162400ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid SPCR" NAME=test-0001.sh TMPLOG=$TMP/spcr.log.$$ $FWTS --show-tests | grep SPCR > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/spcr-0001/acpidump-0002.log spcr - | cut -c7- | grep "^spcr" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/spcr-0001/spcr-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/srat-0001/000077500000000000000000000000001465205512700143545ustar00rootroot00000000000000fwts-test/srat-0001/acpidump-0001.log000066400000000000000000000054441465205512700172460ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SRAT @ 0x00000000 0000: 53 52 41 54 08 01 00 00 03 9e 41 4d 44 20 20 20 SRAT......AMD 0010: 46 41 4d 5f 46 5f 31 30 02 00 00 00 41 4d 44 20 FAM_F_10....AMD 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 10 00 01 01 00 00 00 00 00 00 00 01 00 00 00 ................ 0050: 00 10 00 02 01 00 00 00 00 00 00 00 02 00 00 00 ................ 0060: 00 10 00 03 01 00 00 00 00 00 00 00 03 00 00 00 ................ 0070: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .(.............. 0080: 00 00 0a 00 00 00 00 00 01 00 00 00 01 00 00 00 ................ 0090: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 .........(...... 00a0: 00 00 10 00 00 00 00 00 00 00 f0 cf 00 00 00 00 ................ 00b0: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 01 28 00 00 00 00 00 00 00 00 00 00 01 00 00 00 .(.............. 00d0: 00 00 00 30 01 00 00 00 01 00 00 00 01 00 00 00 ...0............ 00e0: 00 00 00 00 00 00 00 00 06 20 00 00 00 00 00 00 ................ 00f0: 00 11 22 33 44 55 66 77 00 11 22 33 00 00 00 00 ................ 0100: 00 00 00 00 00 00 00 00 ................ fwts-test/srat-0001/acpidump-0002.log000066400000000000000000000054451465205512700172500ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SRAT @ 0x00000000 0000: 53 52 41 54 08 01 00 00 03 9e 41 4d 44 20 20 20 SRAT......AMD 0010: 46 41 4d 5f 46 5f 31 30 02 00 00 00 41 4d 44 20 FAM_F_10....AMD 0020: 01 00 00 00 07 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 10 00 00 09 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 10 00 01 01 00 00 00 00 00 00 00 01 00 00 00 ................ 0050: 00 10 00 02 01 00 00 00 00 00 00 00 02 00 00 00 ................ 0060: 00 10 00 03 01 00 00 00 00 00 00 00 03 00 00 00 ................ 0070: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .(.............. 0080: 00 00 0a 00 00 00 00 00 01 00 00 00 01 00 00 00 ................ 0090: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 .........(...... 00a0: 00 00 10 00 00 00 00 00 00 00 f0 cf 00 00 00 00 ................ 00b0: 0f 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 01 28 00 00 00 00 00 00 00 00 00 00 01 00 00 00 .(.............. 00d0: 00 00 00 30 01 00 00 00 01 00 00 00 08 00 00 00 ...0............ 00e0: 00 00 00 00 00 00 00 00 06 20 01 01 00 00 00 00 ................ 00f0: 01 02 03 04 00 00 00 00 ff ff ff ff ff ff ff ff ................ 0100: 00 00 00 00 00 00 00 ff ................ fwts-test/srat-0001/srat-0001.log000066400000000000000000000120741465205512700164120ustar00rootroot00000000000000srat srat: SRAT System Resource Affinity Table test. srat ---------------------------------------------------------- srat Test 1 of 1: SRAT System Resource Affinity Table test. srat SRAT Local APIC/SAPIC Affinity Structure: srat Type: 0x00 srat Length: 0x10 srat Proximity Domain: [7:0] 0x00 srat APIC ID: 0x00 srat Flags: 0x00000001 srat Local SAPIC EID: 0x00 srat Proximity Domain: [8:15] 0x00 srat Proximity Domain: [16:23] 0x00 srat Proximity Domain: [23:31] 0x00 srat Clock Domain 0x00000000 srat srat SRAT Local APIC/SAPIC Affinity Structure: srat Type: 0x00 srat Length: 0x10 srat Proximity Domain: [7:0] 0x00 srat APIC ID: 0x01 srat Flags: 0x00000001 srat Local SAPIC EID: 0x00 srat Proximity Domain: [8:15] 0x00 srat Proximity Domain: [16:23] 0x00 srat Proximity Domain: [23:31] 0x00 srat Clock Domain 0x00000001 srat srat SRAT Local APIC/SAPIC Affinity Structure: srat Type: 0x00 srat Length: 0x10 srat Proximity Domain: [7:0] 0x00 srat APIC ID: 0x02 srat Flags: 0x00000001 srat Local SAPIC EID: 0x00 srat Proximity Domain: [8:15] 0x00 srat Proximity Domain: [16:23] 0x00 srat Proximity Domain: [23:31] 0x00 srat Clock Domain 0x00000002 srat srat SRAT Local APIC/SAPIC Affinity Structure: srat Type: 0x00 srat Length: 0x10 srat Proximity Domain: [7:0] 0x00 srat APIC ID: 0x03 srat Flags: 0x00000001 srat Local SAPIC EID: 0x00 srat Proximity Domain: [8:15] 0x00 srat Proximity Domain: [16:23] 0x00 srat Proximity Domain: [23:31] 0x00 srat Clock Domain 0x00000003 srat srat SRAT Memory Affinity Structure: srat Type: 0x01 srat Length: 0x28 srat Proximity Domain: 0x00000000 srat Reserved: 0x0000 srat Base Address: 0x0000000000000000 srat Length: 0x00000000000a0000 srat Reserved: 0x00000001 srat Flags: 0x00000001 srat Reserved: 0x0000000000000000 srat srat SRAT Memory Affinity Structure: srat Type: 0x01 srat Length: 0x28 srat Proximity Domain: 0x00000000 srat Reserved: 0x0000 srat Base Address: 0x0000000000100000 srat Length: 0x00000000cff00000 srat Reserved: 0x00000001 srat Flags: 0x00000001 srat Reserved: 0x0000000000000000 srat srat SRAT Memory Affinity Structure: srat Type: 0x01 srat Length: 0x28 srat Proximity Domain: 0x00000000 srat Reserved: 0x0000 srat Base Address: 0x0000000100000000 srat Length: 0x0000000130000000 srat Reserved: 0x00000001 srat Flags: 0x00000001 srat Reserved: 0x0000000000000000 srat srat SRAT Port Affinity Structure: srat Type: 0x06 srat Length: 0x20 srat Reserved: 0x00 srat Device Handle Type: 0x00 srat Proximity Domain: 0x00000000 srat Device Handle: srat ACPI _HID: 0x7766554433221100 srat ACPI _UID: 0x33221100 srat Reserved: 0x00000000 srat Flags: 0x00000000 srat Reserved: 0x00000000 srat srat PASSED: Test 1, No issues found in SRAT table. srat srat ========================================================== srat 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 srat info only. srat ========================================================== fwts-test/srat-0001/srat-0002.log000066400000000000000000000156661465205512700164250ustar00rootroot00000000000000srat srat: SRAT System Resource Affinity Table test. srat ---------------------------------------------------------- srat Test 1 of 1: SRAT System Resource Affinity Table test. srat FAILED [MEDIUM] SRATBadFieldValue: Test 1, SRAT Revision1 srat field must be 1, got 7 instead. srat SRAT Local APIC/SAPIC Affinity Structure: srat Type: 0x00 srat Length: 0x10 srat Proximity Domain: [7:0] 0x00 srat APIC ID: 0x00 srat Flags: 0x00000009 srat Local SAPIC EID: 0x00 srat Proximity Domain: [8:15] 0x00 srat Proximity Domain: [16:23] 0x00 srat Proximity Domain: [23:31] 0x00 srat Clock Domain 0x00000000 srat srat FAILED [HIGH] SRATReservedBitsNonZero: Test 1, SRAT Local srat APIC/SPAIC Affinity Flags Bits [31..1] must be zero, got srat 0x00000009 instead srat SRAT Local APIC/SAPIC Affinity Structure: srat Type: 0x00 srat Length: 0x10 srat Proximity Domain: [7:0] 0x00 srat APIC ID: 0x01 srat Flags: 0x00000001 srat Local SAPIC EID: 0x00 srat Proximity Domain: [8:15] 0x00 srat Proximity Domain: [16:23] 0x00 srat Proximity Domain: [23:31] 0x00 srat Clock Domain 0x00000001 srat srat SRAT Local APIC/SAPIC Affinity Structure: srat Type: 0x00 srat Length: 0x10 srat Proximity Domain: [7:0] 0x00 srat APIC ID: 0x02 srat Flags: 0x00000001 srat Local SAPIC EID: 0x00 srat Proximity Domain: [8:15] 0x00 srat Proximity Domain: [16:23] 0x00 srat Proximity Domain: [23:31] 0x00 srat Clock Domain 0x00000002 srat srat SRAT Local APIC/SAPIC Affinity Structure: srat Type: 0x00 srat Length: 0x10 srat Proximity Domain: [7:0] 0x00 srat APIC ID: 0x03 srat Flags: 0x00000001 srat Local SAPIC EID: 0x00 srat Proximity Domain: [8:15] 0x00 srat Proximity Domain: [16:23] 0x00 srat Proximity Domain: [23:31] 0x00 srat Clock Domain 0x00000003 srat srat SRAT Memory Affinity Structure: srat Type: 0x01 srat Length: 0x28 srat Proximity Domain: 0x00000000 srat Reserved: 0x0000 srat Base Address: 0x0000000000000000 srat Length: 0x00000000000a0000 srat Reserved: 0x00000001 srat Flags: 0x00000001 srat Reserved: 0x0000000000000000 srat srat SRAT Memory Affinity Structure: srat Type: 0x01 srat Length: 0x28 srat Proximity Domain: 0x00000000 srat Reserved: 0x0000 srat Base Address: 0x0000000000100000 srat Length: 0x00000000cff00000 srat Reserved: 0x0000000f srat Flags: 0x000000ff srat Reserved: 0x0000000000000000 srat srat FAILED [HIGH] SRATReservedBitsNonZero: Test 1, SRAT Memory srat Affinity Flags Bits [31..3] must be zero, got 0x000000ff srat instead srat SRAT Memory Affinity Structure: srat Type: 0x01 srat Length: 0x28 srat Proximity Domain: 0x00000000 srat Reserved: 0x0000 srat Base Address: 0x0000000100000000 srat Length: 0x0000000130000000 srat Reserved: 0x00000001 srat Flags: 0x00000008 srat Reserved: 0x0000000000000000 srat srat FAILED [HIGH] SRATReservedBitsNonZero: Test 1, SRAT Memory srat Affinity Flags Bits [31..3] must be zero, got 0x00000008 srat instead srat SRAT Port Affinity Structure: srat Type: 0x06 srat Length: 0x20 srat Reserved: 0x01 srat Device Handle Type: 0x01 srat Proximity Domain: 0x00000000 srat FAILED [MEDIUM] SRATReservedNonZero: Test 1, SRAT Port srat Affinity Reserved field must be zero, got 0x01 instead srat Device Handle: srat PCI Segment: 0x0201 srat PCI BDF Number: 0x0403 srat Reserved: srat 00 00 00 00 FF FF FF FF FF FF FF FF srat FAILED [MEDIUM] SRATReservedNonZero: Test 1, SRAT Port srat Affinity Device Handle Reserved field must be all zero, srat got below instead srat Port Affinity Device Handle Reserved [00] = 0x00 srat Port Affinity Device Handle Reserved [01] = 0x00 srat Port Affinity Device Handle Reserved [02] = 0x00 srat Port Affinity Device Handle Reserved [03] = 0x00 srat Port Affinity Device Handle Reserved [04] = 0xff srat Port Affinity Device Handle Reserved [05] = 0xff srat Port Affinity Device Handle Reserved [06] = 0xff srat Port Affinity Device Handle Reserved [07] = 0xff srat Port Affinity Device Handle Reserved [08] = 0xff srat Port Affinity Device Handle Reserved [09] = 0xff srat Port Affinity Device Handle Reserved [10] = 0xff srat Port Affinity Device Handle Reserved [11] = 0xff srat Flags: 0x00000000 srat Reserved: 0xff000000 srat srat FAILED [MEDIUM] SRATReservedNonZero: Test 1, SRAT Port srat Affinity Reserved field must be zero, got 0xff000000 srat instead srat srat ========================================================== srat 0 passed, 7 failed, 0 warning, 0 aborted, 0 skipped, 0 srat info only. srat ========================================================== fwts-test/srat-0001/test-0001.sh000077500000000000000000000010011465205512700162400ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against SRAT" NAME=test-0001.sh TMPLOG=$TMP/srat.log.$$ $FWTS --show-tests | grep SRAT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/srat-0001/acpidump-0001.log srat - | cut -c7- | grep "^srat" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/srat-0001/srat-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/srat-0001/test-0002.sh000077500000000000000000000010111465205512700162420ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid SRAT" NAME=test-0001.sh TMPLOG=$TMP/srat.log.$$ $FWTS --show-tests | grep SRAT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/srat-0001/acpidump-0002.log srat - | cut -c7- | grep "^srat" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/srat-0001/srat-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/stao-0001/000077500000000000000000000000001465205512700143515ustar00rootroot00000000000000fwts-test/stao-0001/acpidump-0001.log000066400000000000000000000050661465205512700172430ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... DSDT @ 0x00000000 0000: 44 53 44 54 91 00 00 00 01 f0 46 57 54 53 56 31 DSDT......FWTSV1 0010: 46 57 54 53 54 45 53 54 10 11 00 00 49 4e 54 4c FWTSTEST....INTL 0020: 19 06 15 20 10 4c 06 5f 53 42 5f 5b 82 20 43 30 ... .L._SB_[. C0 0030: 30 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 0E._HID.A...._UI 0040: 44 0a 70 14 09 5f 53 54 41 00 a4 0a 0f 5b 82 20 D.p.._STA....[. 0050: 43 30 31 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f C01E._HID.A...._ 0060: 55 49 44 0a 70 14 09 5f 53 54 41 00 a4 0a 0f 5b UID.p.._STA....[ 0070: 82 20 43 30 32 30 08 5f 48 49 44 0c 41 d0 0c 09 . C020._HID.A... 0080: 08 5f 55 49 44 0a 70 14 09 5f 53 54 41 00 a4 0a ._UID.p.._STA... 0090: 0f STAO @ 0x00000000 0000: 53 54 41 4f 43 00 00 00 01 e1 49 4e 54 45 4c 20 STAOC.....INTEL 0010: 54 45 4d 50 4c 41 54 45 00 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 19 06 15 20 01 5c 5f 53 42 2e 43 30 30 45 00 5c ... .\_SB.C00E.\ 0030: 5f 53 42 2e 43 30 32 30 00 5c 5f 53 42 2e 43 30 _SB.C020.\_SB.C0 0040: 31 45 00 fwts-test/stao-0001/acpidump-0002.log000066400000000000000000000050661465205512700172440ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... DSDT @ 0x00000000 0000: 44 53 44 54 91 00 00 00 01 f0 46 57 54 53 56 31 DSDT......FWTSV1 0010: 46 57 54 53 54 45 53 54 10 11 00 00 49 4e 54 4c FWTSTEST....INTL 0020: 19 06 15 20 10 4c 06 5f 53 42 5f 5b 82 20 43 30 ... .L._SB_[. C0 0030: 30 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 0E._HID.A...._UI 0040: 44 0a 70 14 09 5f 53 54 41 00 a4 0a 0f 5b 82 20 D.p.._STA....[. 0050: 43 30 31 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f C01E._HID.A...._ 0060: 55 49 44 0a 70 14 09 5f 53 54 41 00 a4 0a 0f 5b UID.p.._STA....[ 0070: 82 20 43 30 32 30 08 5f 48 49 44 0c 41 d0 0c 09 . C020._HID.A... 0080: 08 5f 55 49 44 0a 70 14 09 5f 53 54 41 00 a4 0a ._UID.p.._STA... 0090: 0f STAO @ 0x00000000 0000: 53 54 41 4f 43 00 00 00 01 e1 49 4e 54 45 4c 20 STAOC.....INTEL 0010: 54 45 4d 50 4c 41 54 45 00 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 19 06 15 20 01 5c 5f 53 42 2e 43 30 45 30 00 5c ... .\_SB.C0E0.\ 0030: 5f 53 42 2e 43 30 32 32 00 5c 5f 53 42 2e 43 30 _SB.C022.\_SB.C0 0040: 32 45 00 fwts-test/stao-0001/stao-0001.log000066400000000000000000000014151465205512700164010ustar00rootroot00000000000000stao stao: STAO Status Override Table test. stao ---------------------------------------------------------- stao Test 1 of 1: STAO Status Override Table test. stao STAO Status Override Table: stao UART: 0x01 stao ACPI String: '\_SB.C00E' stao ACPI String: '\_SB.C020' stao ACPI String: '\_SB.C01E' stao PASSED: Test 1, No issues found in STAO table. stao stao ========================================================== stao 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 stao info only. stao ========================================================== fwts-test/stao-0001/stao-0002.log000066400000000000000000000021761465205512700164070ustar00rootroot00000000000000stao stao: STAO Status Override Table test. stao ---------------------------------------------------------- stao Test 1 of 1: STAO Status Override Table test. stao STAO Status Override Table: stao UART: 0x01 stao ACPI String: '\_SB.C0E0' stao ACPI String: '\_SB.C022' stao ACPI String: '\_SB.C02E' stao FAILED [HIGH] STAOAcpiStringNotFound: Test 1, STAO ACPI stao String '\_SB.C0E0' not found in ACPI object name space. stao FAILED [HIGH] STAOAcpiStringNotFound: Test 1, STAO ACPI stao String '\_SB.C022' not found in ACPI object name space. stao FAILED [HIGH] STAOAcpiStringNotFound: Test 1, STAO ACPI stao String '\_SB.C02E' not found in ACPI object name space. stao stao ========================================================== stao 0 passed, 3 failed, 0 warning, 0 aborted, 0 skipped, 0 stao info only. stao ========================================================== fwts-test/stao-0001/test-0001.sh000077500000000000000000000010011465205512700162350ustar00rootroot00000000000000#!/bin/bash # TEST="Test apci table against STAO" NAME=test-0001.sh TMPLOG=$TMP/stao.log.$$ $FWTS --show-tests | grep STAO > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/stao-0001/acpidump-0001.log stao - | cut -c7- | grep "^stao" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/stao-0001/stao-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/stao-0001/test-0002.sh000077500000000000000000000010111465205512700162370ustar00rootroot00000000000000#!/bin/bash # TEST="Test apci table against invalid STAO" NAME=test-0001.sh TMPLOG=$TMP/stao.log.$$ $FWTS --show-tests | grep STAO > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/stao-0001/acpidump-0002.log stao - | cut -c7- | grep "^stao" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/stao-0001/stao-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/svkl-0001/000077500000000000000000000000001465205512700143625ustar00rootroot00000000000000fwts-test/svkl-0001/acpidump-0001.log000066400000000000000000000036601465205512700172520ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SVKL @ 0x0000000000000000 0000: 53 56 4B 4C 48 00 00 00 01 DB 49 4E 54 45 4C 20 SVKLH.....INTEL 0010: 54 65 6D 70 6C 61 74 65 01 00 00 00 49 4E 54 4C Template....INTL 0020: 31 03 21 20 02 00 00 00 00 00 00 00 21 43 AA AA 1.! ........!C.. 0030: EF CD AB 89 67 45 23 01 00 00 00 00 21 43 BB BB ....gE#.....!C.. 0040: EF CD AB 89 67 45 23 01 ....gE#. fwts-test/svkl-0001/acpidump-0002.log000066400000000000000000000036601465205512700172530ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SVKL @ 0x0000000000000000 0000: 53 56 4B 4C 48 00 00 00 01 DB 49 4E 54 45 4C 20 SVKLH.....INTEL 0010: 54 65 6D 70 6C 61 74 65 01 00 00 00 49 4E 54 4C Template....INTL 0020: 31 03 21 20 02 00 00 00 01 00 00 00 21 43 AA AA 1.! ........!C.. 0030: EF CD AB 89 67 45 23 01 00 00 02 00 21 43 BB BB ....gE#.....!C.. 0040: EF CD AB 89 67 45 23 01 ....gE#. fwts-test/svkl-0001/svkl-0001.log000066400000000000000000000021331465205512700164210ustar00rootroot00000000000000svkl svkl: SVKL Storage Volume Key Data table test. svkl ---------------------------------------------------------- svkl Test 1 of 1: Validate SVKL table. svkl SVKL Storage Volume Key Data Table: svkl Key Count: 0x00000002 svkl Storage Volume Key Structure 1 svkl Key Type: 0x0000 svkl Key Format: 0x0000 svkl Key Size: 0xaaaa4321 svkl Key Address: 0x0123456789abcdef svkl Storage Volume Key Structure 2 svkl Key Type: 0x0000 svkl Key Format: 0x0000 svkl Key Size: 0xbbbb4321 svkl Key Address: 0x0123456789abcdef svkl svkl PASSED: Test 1, No issues found in SVKL table. svkl svkl ========================================================== svkl 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 svkl info only. svkl ========================================================== fwts-test/svkl-0001/svkl-0002.log000066400000000000000000000024021465205512700164210ustar00rootroot00000000000000svkl svkl: SVKL Storage Volume Key Data table test. svkl ---------------------------------------------------------- svkl Test 1 of 1: Validate SVKL table. svkl SVKL Storage Volume Key Data Table: svkl Key Count: 0x00000002 svkl Storage Volume Key Structure 1 svkl Key Type: 0x0001 svkl FAILED [HIGH] SVKLBadKeyType: Test 1, SVKL key type not svkl zero, 1~0xFFFF reserved. svkl Key Format: 0x0000 svkl Key Size: 0xaaaa4321 svkl Key Address: 0x0123456789abcdef svkl Storage Volume Key Structure 2 svkl Key Type: 0x0000 svkl Key Format: 0x0002 svkl FAILED [HIGH] SVKLBadKeyFormat: Test 1, SVKL key format svkl not zero, 1~0xFFFF reserved. svkl Key Size: 0xbbbb4321 svkl Key Address: 0x0123456789abcdef svkl svkl svkl ========================================================== svkl 0 passed, 2 failed, 0 warning, 0 aborted, 0 skipped, 0 svkl info only. svkl ========================================================== fwts-test/svkl-0001/test-0001.sh000077500000000000000000000010011465205512700162460ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against SVKL" NAME=test-0001.sh TMPLOG=$TMP/svkl.log.$$ $FWTS --show-tests | grep svkl > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/svkl-0001/acpidump-0001.log svkl - | cut -c7- | grep "^svkl" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/svkl-0001/svkl-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/svkl-0001/test-0002.sh000077500000000000000000000010011465205512700162470ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against SVKL" NAME=test-0001.sh TMPLOG=$TMP/svkl.log.$$ $FWTS --show-tests | grep svkl > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/svkl-0001/acpidump-0002.log svkl - | cut -c7- | grep "^svkl" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/svkl-0001/svkl-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/syntaxcheck-0001/000077500000000000000000000000001465205512700157275ustar00rootroot00000000000000fwts-test/syntaxcheck-0001/acpidump-0001.log000066400000000000000000003707021465205512700206230ustar00rootroot00000000000000DSDT @ 0xbf6d9b6a 0000: 44 53 44 54 f4 5f 00 00 02 11 54 4f 53 43 50 4c DSDT._....TOSCPL 0010: 43 52 45 53 54 4c 4e 45 00 00 04 06 49 4e 54 4c CRESTLNE....INTL 0020: 08 06 06 20 08 5a 30 30 30 01 08 5a 30 30 31 0a ... .Z000..Z001. 0030: 02 08 5a 30 30 32 0a 04 08 5a 30 30 33 0a 08 08 ..Z002...Z003... 0040: 5a 30 30 34 00 08 5a 30 30 35 0a 0f 08 5a 30 30 Z004..Z005...Z00 0050: 36 0a 0d 08 5a 30 30 37 0a 0b 08 5a 30 30 38 0a 6...Z007...Z008. 0060: 09 08 45 43 44 59 0a 07 5b 01 4d 55 54 58 00 5b ..ECDY..[.MUTX.[ 0070: 80 50 52 54 30 01 0a 80 0a 04 5b 81 0b 50 52 54 .PRT0.....[..PRT 0080: 30 13 50 38 30 48 20 14 4e 07 50 38 58 48 0a a0 0.P80H .N.P8XH.. 0090: 17 93 68 00 70 7d 7b 50 38 30 44 0c 00 ff ff ff ..h.p}{P80D..... 00a0: 00 69 00 50 38 30 44 a0 1b 93 68 01 70 7d 7b 50 .i.P80D...h.p}{P 00b0: 38 30 44 0c ff 00 ff ff 00 79 69 0a 08 00 00 50 80D......yi....P 00c0: 38 30 44 a0 1c 93 68 0a 02 70 7d 7b 50 38 30 44 80D...h..p}{P80D 00d0: 0c ff ff 00 ff 00 79 69 0a 10 00 00 50 38 30 44 ......yi....P80D 00e0: a0 1c 93 68 0a 03 70 7d 7b 50 38 30 44 0c ff ff ...h..p}{P80D... 00f0: ff 00 00 79 69 0a 18 00 00 50 38 30 44 70 50 38 ...yi....P80DpP8 0100: 30 44 50 38 30 48 14 0c 5f 50 49 43 01 70 68 47 0DP80H.._PIC.phG 0110: 50 49 43 14 46 06 5f 50 54 53 01 70 00 50 38 30 PIC.F._PTS.p.P80 0120: 44 50 38 58 48 00 68 a0 1e 93 68 0a 03 70 01 5c DP8XH.h...h..p.\ 0130: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0140: 30 5f 53 33 4c 44 a0 33 93 68 0a 04 70 01 5c 2f 0_S3LD.3.h..p.\/ 0150: 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 ._SB_PCI0LPCBEC0 0160: 5f 53 33 4c 44 5c 2f 04 5f 53 42 5f 50 43 49 30 _S3LD\/._SB_PCI0 0170: 4c 50 43 42 50 48 53 53 0a 0e 14 4c 1c 5f 57 41 LPCBPHSS...L._WA 0180: 4b 01 50 38 58 48 01 0a ab a0 30 91 93 68 0a 03 K.P8XH....0..h.. 0190: 93 68 0a 04 a0 25 7b 43 46 47 44 0c 00 00 00 01 .h...%{CFGD..... 01a0: 00 a0 18 90 7b 43 46 47 44 0a f0 00 93 4f 53 59 ....{CFGD....OSY 01b0: 53 0b d1 07 54 52 41 50 0a 3d a0 18 93 52 50 31 S...TRAP.=...RP1 01c0: 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 D..\/._SB_PCI0RP 01d0: 30 31 00 a0 18 93 52 50 32 44 00 86 5c 2f 03 5f 01....RP2D..\/._ 01e0: 53 42 5f 50 43 49 30 52 50 30 32 00 a0 18 93 52 SB_PCI0RP02....R 01f0: 50 33 44 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 P3D..\/._SB_PCI0 0200: 52 50 30 33 00 a0 18 93 52 50 34 44 00 86 5c 2f RP03....RP4D..\/ 0210: 03 5f 53 42 5f 50 43 49 30 52 50 30 34 00 a0 18 ._SB_PCI0RP04... 0220: 93 52 50 35 44 00 86 5c 2f 03 5f 53 42 5f 50 43 .RP5D..\/._SB_PC 0230: 49 30 52 50 30 35 00 a0 18 93 52 50 36 44 00 86 I0RP05....RP6D.. 0240: 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 36 00 \/._SB_PCI0RP06. 0250: a0 12 93 68 0a 03 50 38 58 48 00 0a 30 54 52 41 ...h..P8XH..0TRA 0260: 50 0a 46 a0 43 0d 93 68 0a 04 50 38 58 48 00 0a P.F.C..h..P8XH.. 0270: 40 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 @\/._SB_PCI0LPCB 0280: 50 48 53 53 0a 0f 70 57 41 4b 46 60 70 00 57 41 PHSS..pWAKF`p.WA 0290: 4b 46 7b 60 0a 05 60 a0 18 93 60 01 50 38 58 48 KF{`..`...`.P8XH 02a0: 00 0a 41 86 5c 2e 5f 53 42 5f 50 57 52 42 0a 02 ..A.\._SB_PWRB.. 02b0: a0 46 08 44 54 53 45 54 52 41 50 0a 47 a0 42 06 .F.DTSETRAP.G.B. 02c0: 90 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 .\/._SB_PCI0LPCB 02d0: 45 43 4f 4b 93 45 43 44 59 00 a0 27 92 95 44 54 ECOK.ECDY..'..DT 02e0: 53 31 44 54 53 32 70 44 54 53 31 5c 2f 05 5f 53 S1DTS2pDTS1\/._S 02f0: 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b B_PCI0LPCBEC0_SK 0300: 54 41 a1 1d 70 44 54 53 32 5c 2f 05 5f 53 42 5f TA..pDTS2\/._SB_ 0310: 50 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 PCI0LPCBEC0_SKTA 0320: a1 16 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 0330: 42 50 48 53 53 0a 10 5c 2e 5f 50 52 5f 52 50 50 BPHSS..\._PR_RPP 0340: 43 a4 12 04 02 00 00 14 1e 47 45 54 42 0b 77 68 C........GETB.wh 0350: 0a 08 60 77 69 0a 08 61 5b 13 6a 60 61 54 42 46 ..`wi..a[.j`aTBF 0360: 33 a4 54 42 46 33 14 42 09 50 4e 4f 54 08 a0 4a 3.TBF3.B.PNOT..J 0370: 06 4d 50 45 4e a0 31 7b 50 44 43 30 0a 08 00 86 .MPEN.1{PDC0.... 0380: 5c 2e 5f 50 52 5f 43 50 55 30 0a 80 a0 1a 7b 50 \._PR_CPU0....{P 0390: 44 43 30 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC0...[".d.\._PR 03a0: 5f 43 50 55 30 0a 81 a0 31 7b 50 44 43 31 0a 08 _CPU0...1{PDC1.. 03b0: 00 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 80 a0 1a ..\._PR_CPU1.... 03c0: 7b 50 44 43 31 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC1...[".d.\._ 03d0: 50 52 5f 43 50 55 31 0a 81 a1 1f 86 5c 2e 5f 50 PR_CPU1.....\._P 03e0: 52 5f 43 50 55 30 0a 80 5b 22 0a 64 86 5c 2e 5f R_CPU0..[".d.\._ 03f0: 50 52 5f 43 50 55 30 0a 81 14 17 54 52 41 50 09 PR_CPU0....TRAP. 0400: 70 68 53 4d 49 46 70 00 54 52 50 30 a4 53 4d 49 phSMIFp.TRP0.SMI 0410: 46 10 41 0f 5f 53 42 5f 14 4a 0e 5f 49 4e 49 00 F.A._SB_.J._INI. 0420: 70 0b 99 99 4d 41 52 4b a0 1c 44 54 53 45 54 52 p...MARK..DTSETR 0430: 41 50 0a 47 5e 2f 03 50 43 49 30 4c 50 43 42 50 AP.G^/.PCI0LPCBP 0440: 48 53 53 0a 10 70 0b d0 07 4f 53 59 53 a0 4a 09 HSS..p...OSYS.J. 0450: 5b 12 5f 4f 53 49 60 a0 18 5f 4f 53 49 0d 4c 69 [._OSI`.._OSI.Li 0460: 6e 75 78 00 70 01 4c 49 4e 58 70 00 45 43 44 59 nux.p.LINXp.ECDY 0470: a0 1b 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 .._OSI.Windows 2 0480: 30 30 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f 001.p...OSYS.._O 0490: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04a0: 53 50 31 00 70 0b d1 07 4f 53 59 53 a0 1f 5f 4f SP1.p...OSYS.._O 04b0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 04c0: 53 50 32 00 70 0b d2 07 4f 53 59 53 a0 1b 5f 4f SP2.p...OSYS.._O 04d0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 00 SI.Windows 2006. 04e0: 70 0b d6 07 4f 53 59 53 a0 14 90 4d 50 45 4e 93 p...OSYS...MPEN. 04f0: 4f 53 59 53 0b d1 07 54 52 41 50 0a 3d 54 52 41 OSYS...TRAP.=TRA 0500: 50 0a 2b 5b 80 47 4e 56 53 00 0c bc 2d 6e bf 0b P.+[.GNVS...-n.. 0510: 00 01 5b 81 45 24 47 4e 56 53 10 4f 53 59 53 10 ..[.E$GNVS.OSYS. 0520: 53 4d 49 46 08 50 52 4d 30 08 50 52 4d 31 08 53 SMIF.PRM0.PRM1.S 0530: 43 49 46 08 50 52 4d 32 08 50 52 4d 33 08 4c 43 CIF.PRM2.PRM3.LC 0540: 4b 46 08 50 52 4d 34 08 50 52 4d 35 08 50 38 30 KF.PRM4.PRM5.P80 0550: 44 20 4c 49 44 53 08 50 57 52 53 08 44 42 47 53 D LIDS.PWRS.DBGS 0560: 08 4c 49 4e 58 08 00 08 41 43 54 31 08 41 43 54 .LINX...ACT1.ACT 0570: 54 08 50 53 56 54 08 54 43 31 56 08 54 43 32 56 T.PSVT.TC1V.TC2V 0580: 08 54 53 50 56 08 43 52 54 54 08 44 54 53 45 08 .TSPV.CRTT.DTSE. 0590: 44 54 53 31 08 44 54 53 32 08 00 40 05 41 50 49 DTS1.DTS2..@.API 05a0: 43 08 4d 50 45 4e 08 50 43 50 30 08 50 43 50 31 C.MPEN.PCP0.PCP1 05b0: 08 50 50 43 4d 08 00 28 43 4d 41 50 08 43 4d 42 .PPCM..(CMAP.CMB 05c0: 50 08 4c 50 54 50 08 46 44 43 50 08 00 30 49 47 P.LPTP.FDCP..0IG 05d0: 44 53 08 54 4c 53 54 08 43 41 44 4c 08 50 41 44 DS.TLST.CADL.PAD 05e0: 4c 08 43 53 54 45 10 4e 53 54 45 10 53 53 54 45 L.CSTE.NSTE.SSTE 05f0: 10 4e 44 49 44 08 44 49 44 31 20 44 49 44 32 20 .NDID.DID1 DID2 0600: 44 49 44 33 20 44 49 44 34 20 44 49 44 35 20 00 DID3 DID4 DID5 . 0610: 40 06 42 4c 43 53 08 42 52 54 4c 08 41 4c 53 45 @.BLCS.BRTL.ALSE 0620: 08 41 4c 41 46 08 4c 4c 4f 57 08 4c 48 49 48 08 .ALAF.LLOW.LHIH. 0630: 00 08 45 4d 41 45 08 45 4d 41 50 10 45 4d 41 4c ..EMAE.EMAP.EMAL 0640: 10 00 08 4d 45 46 45 08 00 18 54 50 4d 50 08 54 ...MEFE...TPMP.T 0650: 50 4d 45 08 00 40 04 47 54 46 30 38 47 54 46 32 PME..@.GTF08GTF2 0660: 38 49 44 45 4d 08 47 54 46 31 38 00 40 09 41 53 8IDEM.GTF18.@.AS 0670: 4c 42 20 49 42 54 54 08 49 50 41 54 08 49 54 56 LB IBTT.IPAT.ITV 0680: 46 08 49 54 56 4d 08 49 50 53 43 08 49 42 4c 43 F.ITVM.IPSC.IBLC 0690: 08 49 42 49 41 08 49 53 53 43 08 49 34 30 39 08 .IBIA.ISSC.I409. 06a0: 49 35 30 39 08 49 36 30 39 08 49 37 30 39 08 49 I509.I609.I709.I 06b0: 44 4d 4d 08 49 44 4d 53 08 49 46 31 45 08 48 56 DMM.IDMS.IF1E.HV 06c0: 43 4f 08 4e 58 44 31 20 4e 58 44 32 20 4d 41 52 CO.NXD1 NXD2 MAR 06d0: 4b 10 42 52 41 44 08 42 54 45 4e 08 56 56 45 4e K.BRAD.BTEN.VVEN 06e0: 08 42 47 54 4c 08 54 4d 45 45 01 00 07 53 43 55 .BGTL.TMEE...SCU 06f0: 30 01 53 43 55 31 01 53 43 55 32 01 53 43 55 33 0.SCU1.SCU2.SCU3 0700: 01 00 04 58 4b 53 50 01 58 4b 49 4e 01 58 4b 49 ...XKSP.XKIN.XKI 0710: 44 01 58 4b 4f 4b 01 00 04 42 47 55 31 08 42 53 D.XKOK...BGU1.BS 0720: 54 31 08 42 46 43 31 10 57 4b 4c 4e 08 57 41 4b T1.BFC1.WKLN.WAK 0730: 46 08 44 53 4d 44 08 42 41 59 53 08 48 41 50 45 F.DSMD.BAYS.HAPE 0740: 01 00 07 44 54 53 4d 01 00 07 4f 44 54 31 08 4f ...DTSM...ODT1.O 0750: 44 54 32 08 44 54 53 57 08 08 44 53 45 4e 01 08 DT2.DTSW..DSEN.. 0760: 45 43 4f 4e 00 08 47 50 49 43 00 08 43 54 59 50 ECON..GPIC..CTYP 0770: 00 08 4c 30 31 43 00 08 56 46 4e 30 00 08 56 46 ..L01C..VFN0..VF 0780: 4e 31 00 10 4a 7c 5f 47 50 45 14 46 35 5f 4c 30 N1..J|_GPE.F5_L0 0790: 31 00 72 4c 30 31 43 01 4c 30 31 43 50 38 58 48 1.rL01C.L01CP8XH 07a0: 00 01 50 38 58 48 01 4c 30 31 43 a0 48 08 90 93 ..P8XH.L01C.H... 07b0: 52 50 31 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 RP1D.\/._SB_PCI0 07c0: 52 50 30 31 48 50 53 58 5b 22 0a 64 a0 40 05 5c RP01HPSX[".d.@.\ 07d0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 50 44 /._SB_PCI0RP01PD 07e0: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 07f0: 50 30 31 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f P01PDCXp.\/._SB_ 0800: 50 43 49 30 52 50 30 31 48 50 53 58 86 5c 2f 03 PCI0RP01HPSX.\/. 0810: 5f 53 42 5f 50 43 49 30 52 50 30 31 00 a1 16 70 _SB_PCI0RP01...p 0820: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0830: 48 50 53 58 a0 48 08 90 93 52 50 32 44 00 5c 2f HPSX.H...RP2D.\/ 0840: 04 5f 53 42 5f 50 43 49 30 52 50 30 32 48 50 53 ._SB_PCI0RP02HPS 0850: 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 5f 50 X[".d.@.\/._SB_P 0860: 43 49 30 52 50 30 32 50 44 43 58 70 01 5c 2f 04 CI0RP02PDCXp.\/. 0870: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 44 43 58 _SB_PCI0RP02PDCX 0880: 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 p.\/._SB_PCI0RP0 0890: 32 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 2HPSX.\/._SB_PCI 08a0: 30 52 50 30 32 00 a1 16 70 01 5c 2f 04 5f 53 42 0RP02...p.\/._SB 08b0: 5f 50 43 49 30 52 50 30 32 48 50 53 58 a0 48 08 _PCI0RP02HPSX.H. 08c0: 90 93 52 50 33 44 00 5c 2f 04 5f 53 42 5f 50 43 ..RP3D.\/._SB_PC 08d0: 49 30 52 50 30 33 48 50 53 58 5b 22 0a 64 a0 40 I0RP03HPSX[".d.@ 08e0: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 .\/._SB_PCI0RP03 08f0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0900: 30 52 50 30 33 50 44 43 58 70 01 5c 2f 04 5f 53 0RP03PDCXp.\/._S 0910: 42 5f 50 43 49 30 52 50 30 33 48 50 53 58 86 5c B_PCI0RP03HPSX.\ 0920: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 33 00 a1 /._SB_PCI0RP03.. 0930: 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .p.\/._SB_PCI0RP 0940: 30 33 48 50 53 58 a0 48 08 90 93 52 50 34 44 00 03HPSX.H...RP4D. 0950: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 48 \/._SB_PCI0RP04H 0960: 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 53 42 PSX[".d.@.\/._SB 0970: 5f 50 43 49 30 52 50 30 34 50 44 43 58 70 01 5c _PCI0RP04PDCXp.\ 0980: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 44 /._SB_PCI0RP04PD 0990: 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 CXp.\/._SB_PCI0R 09a0: 50 30 34 48 50 53 58 86 5c 2f 03 5f 53 42 5f 50 P04HPSX.\/._SB_P 09b0: 43 49 30 52 50 30 34 00 a1 16 70 01 5c 2f 04 5f CI0RP04...p.\/._ 09c0: 53 42 5f 50 43 49 30 52 50 30 34 48 50 53 58 a0 SB_PCI0RP04HPSX. 09d0: 48 08 90 93 52 50 35 44 00 5c 2f 04 5f 53 42 5f H...RP5D.\/._SB_ 09e0: 50 43 49 30 52 50 30 35 48 50 53 58 5b 22 0a 64 PCI0RP05HPSX[".d 09f0: a0 40 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .@.\/._SB_PCI0RP 0a00: 30 35 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 05PDCXp.\/._SB_P 0a10: 43 49 30 52 50 30 35 50 44 43 58 70 01 5c 2f 04 CI0RP05PDCXp.\/. 0a20: 5f 53 42 5f 50 43 49 30 52 50 30 35 48 50 53 58 _SB_PCI0RP05HPSX 0a30: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 35 .\/._SB_PCI0RP05 0a40: 00 a1 16 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ...p.\/._SB_PCI0 0a50: 52 50 30 35 48 50 53 58 a0 48 08 90 93 52 50 36 RP05HPSX.H...RP6 0a60: 44 00 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 D.\/._SB_PCI0RP0 0a70: 36 48 50 53 58 5b 22 0a 64 a0 40 05 5c 2f 04 5f 6HPSX[".d.@.\/._ 0a80: 53 42 5f 50 43 49 30 52 50 30 36 50 44 43 58 70 SB_PCI0RP06PDCXp 0a90: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 .\/._SB_PCI0RP06 0aa0: 50 44 43 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PDCXp.\/._SB_PCI 0ab0: 30 52 50 30 36 48 50 53 58 86 5c 2f 03 5f 53 42 0RP06HPSX.\/._SB 0ac0: 5f 50 43 49 30 52 50 30 36 00 a1 16 70 01 5c 2f _PCI0RP06...p.\/ 0ad0: 04 5f 53 42 5f 50 43 49 30 52 50 30 36 48 50 53 ._SB_PCI0RP06HPS 0ae0: 58 14 42 0d 5f 4c 30 32 00 70 00 47 50 45 43 a0 X.B._L02.p.GPEC. 0af0: 4d 0a 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 M.\/._SB_PCI0LPC 0b00: 42 45 43 4f 4b a0 4e 04 93 44 54 53 57 01 a0 27 BECOK.N..DTSW..' 0b10: 92 95 44 54 53 31 44 54 53 32 70 44 54 53 31 5c ..DTS1DTS2pDTS1\ 0b20: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 /._SB_PCI0LPCBEC 0b30: 30 5f 53 4b 54 41 a1 1d 70 44 54 53 32 5c 2f 05 0_SKTA..pDTS2\/. 0b40: 5f 53 42 5f 50 43 49 30 4c 50 43 42 45 43 30 5f _SB_PCI0LPCBEC0_ 0b50: 53 4b 54 41 a1 48 04 a0 27 92 95 4f 44 54 31 4f SKTA.H..'..ODT1O 0b60: 44 54 32 70 4f 44 54 31 5c 2f 05 5f 53 42 5f 50 DT2pODT1\/._SB_P 0b70: 43 49 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 CI0LPCBEC0_SKTA. 0b80: 1d 70 4f 44 54 32 5c 2f 05 5f 53 42 5f 50 43 49 .pODT2\/._SB_PCI 0b90: 30 4c 50 43 42 45 43 30 5f 53 4b 54 41 a1 16 5c 0LPCBEC0_SKTA..\ 0ba0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 42 50 48 /._SB_PCI0LPCBPH 0bb0: 53 53 0a 10 14 18 5f 4c 30 33 00 86 5c 2f 03 5f SS...._L03..\/._ 0bc0: 53 42 5f 50 43 49 30 55 53 42 31 0a 02 14 18 5f SB_PCI0USB1...._ 0bd0: 4c 30 34 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 L04..\/._SB_PCI0 0be0: 55 53 42 32 0a 02 14 18 5f 4c 30 35 00 86 5c 2f USB2...._L05..\/ 0bf0: 03 5f 53 42 5f 50 43 49 30 55 53 42 35 0a 02 14 ._SB_PCI0USB5... 0c00: 36 5f 4c 30 36 00 a0 27 5c 2f 04 5f 53 42 5f 50 6_L06..'\/._SB_P 0c10: 43 49 30 47 46 58 30 47 53 53 45 5c 2f 04 5f 53 CI0GFX0GSSE\/._S 0c20: 42 5f 50 43 49 30 47 46 58 30 47 53 43 49 a1 07 B_PCI0GFX0GSCI.. 0c30: 70 01 53 43 49 53 14 43 1f 5f 4c 30 39 00 a0 41 p.SCIS.C._L09..A 0c40: 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 .\/._SB_PCI0RP01 0c50: 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 PSPXp.\/._SB_PCI 0c60: 30 52 50 30 31 50 53 50 58 70 01 5c 2f 04 5f 53 0RP01PSPXp.\/._S 0c70: 42 5f 50 43 49 30 52 50 30 31 50 4d 53 58 86 5c B_PCI0RP01PMSX.\ 0c80: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 31 0a 02 /._SB_PCI0RP01.. 0c90: a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .A.\/._SB_PCI0RP 0ca0: 30 32 50 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 02PSPXp.\/._SB_P 0cb0: 43 49 30 52 50 30 32 50 53 50 58 70 01 5c 2f 04 CI0RP02PSPXp.\/. 0cc0: 5f 53 42 5f 50 43 49 30 52 50 30 32 50 4d 53 58 _SB_PCI0RP02PMSX 0cd0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 0ce0: 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 49 30 ...A.\/._SB_PCI0 0cf0: 52 50 30 33 50 53 50 58 70 01 5c 2f 04 5f 53 42 RP03PSPXp.\/._SB 0d00: 5f 50 43 49 30 52 50 30 33 50 53 50 58 70 01 5c _PCI0RP03PSPXp.\ 0d10: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 33 50 4d /._SB_PCI0RP03PM 0d20: 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 SX.\/._SB_PCI0RP 0d30: 30 33 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f 50 43 03...A.\/._SB_PC 0d40: 49 30 52 50 30 34 50 53 50 58 70 01 5c 2f 04 5f I0RP04PSPXp.\/._ 0d50: 53 42 5f 50 43 49 30 52 50 30 34 50 53 50 58 70 SB_PCI0RP04PSPXp 0d60: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 .\/._SB_PCI0RP04 0d70: 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 49 30 PMSX.\/._SB_PCI0 0d80: 52 50 30 34 0a 02 a0 41 05 5c 2f 04 5f 53 42 5f RP04...A.\/._SB_ 0d90: 50 43 49 30 52 50 30 35 50 53 50 58 70 01 5c 2f PCI0RP05PSPXp.\/ 0da0: 04 5f 53 42 5f 50 43 49 30 52 50 30 35 50 53 50 ._SB_PCI0RP05PSP 0db0: 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 Xp.\/._SB_PCI0RP 0dc0: 30 35 50 4d 53 58 86 5c 2f 03 5f 53 42 5f 50 43 05PMSX.\/._SB_PC 0dd0: 49 30 52 50 30 35 0a 02 a0 41 05 5c 2f 04 5f 53 I0RP05...A.\/._S 0de0: 42 5f 50 43 49 30 52 50 30 36 50 53 50 58 70 01 B_PCI0RP06PSPXp. 0df0: 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 36 50 \/._SB_PCI0RP06P 0e00: 53 50 58 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 SPXp.\/._SB_PCI0 0e10: 52 50 30 36 50 4d 53 58 86 5c 2f 03 5f 53 42 5f RP06PMSX.\/._SB_ 0e20: 50 43 49 30 52 50 30 36 0a 02 14 18 5f 4c 30 42 PCI0RP06...._L0B 0e30: 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 50 43 49 ..\/._SB_PCI0PCI 0e40: 42 0a 02 14 18 5f 4c 30 43 00 86 5c 2f 03 5f 53 B...._L0C..\/._S 0e50: 42 5f 50 43 49 30 55 53 42 33 0a 02 14 4b 0b 5f B_PCI0USB3...K._ 0e60: 4c 30 44 00 a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 L0D..;\/._SB_PCI 0e70: 30 45 48 43 31 50 4d 45 53 70 01 5c 2f 04 5f 53 0EHC1PMESp.\/._S 0e80: 42 5f 50 43 49 30 45 48 43 31 50 4d 45 53 86 5c B_PCI0EHC1PMES.\ 0e90: 2f 03 5f 53 42 5f 50 43 49 30 45 48 43 31 0a 02 /._SB_PCI0EHC1.. 0ea0: a0 3b 5c 2f 04 5f 53 42 5f 50 43 49 30 45 48 43 .;\/._SB_PCI0EHC 0eb0: 32 50 4d 45 53 70 01 5c 2f 04 5f 53 42 5f 50 43 2PMESp.\/._SB_PC 0ec0: 49 30 45 48 43 32 50 4d 45 53 86 5c 2f 03 5f 53 I0EHC2PMES.\/._S 0ed0: 42 5f 50 43 49 30 45 48 43 32 0a 02 a0 3b 5c 2f B_PCI0EHC2...;\/ 0ee0: 04 5f 53 42 5f 50 43 49 30 48 44 45 46 50 4d 45 ._SB_PCI0HDEFPME 0ef0: 53 70 01 5c 2f 04 5f 53 42 5f 50 43 49 30 48 44 Sp.\/._SB_PCI0HD 0f00: 45 46 50 4d 45 53 86 5c 2f 03 5f 53 42 5f 50 43 EFPMES.\/._SB_PC 0f10: 49 30 48 44 45 46 0a 02 14 18 5f 4c 30 45 00 86 I0HDEF...._L0E.. 0f20: 5c 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 34 0a \/._SB_PCI0USB4. 0f30: 02 14 1c 5f 4c 31 42 00 80 4c 50 4f 4c 4c 50 4f ..._L1B..LPOLLPO 0f40: 4c 86 5c 2e 5f 53 42 5f 4c 49 44 30 0a 80 10 46 L.\._SB_LID0...F 0f50: 0b 5f 50 52 5f 5b 83 0b 43 50 55 30 00 10 10 00 ._PR_[..CPU0.... 0f60: 00 06 5b 83 0b 43 50 55 31 01 10 10 00 00 06 14 ..[..CPU1....... 0f70: 45 09 52 50 50 43 00 a0 4d 08 93 4f 53 59 53 0b E.RPPC..M..OSYS. 0f80: d2 07 a0 42 08 7b 43 46 47 44 01 00 a0 42 04 94 ...B.{CFGD...B.. 0f90: 5e 2e 43 50 55 30 5f 50 50 43 00 74 5e 2e 43 50 ^.CPU0_PPC.t^.CP 0fa0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 0fb0: 43 50 4e 4f 54 72 5e 2e 43 50 55 30 5f 50 50 43 CPNOTr^.CPU0_PPC 0fc0: 01 5e 2e 43 50 55 30 5f 50 50 43 50 4e 4f 54 a1 .^.CPU0_PPCPNOT. 0fd0: 35 72 5e 2e 43 50 55 30 5f 50 50 43 01 5e 2e 43 5r^.CPU0_PPC.^.C 0fe0: 50 55 30 5f 50 50 43 50 4e 4f 54 74 5e 2e 43 50 PU0_PPCPNOTt^.CP 0ff0: 55 30 5f 50 50 43 01 5e 2e 43 50 55 30 5f 50 50 U0_PPC.^.CPU0_PP 1000: 43 50 4e 4f 54 08 46 57 53 4f 0d 46 57 53 4f 00 CPNOT.FWSO.FWSO. 1010: 08 5f 50 53 43 00 14 12 5f 50 53 30 00 70 5f 50 ._PSC..._PS0.p_P 1020: 53 43 60 70 00 5f 50 53 43 14 0d 5f 50 53 33 00 SC`p._PSC.._PS3. 1030: 70 0a 03 5f 50 53 43 10 8c fb 04 5f 53 42 5f 5b p.._PSC...._SB_[ 1040: 82 4f 3e 41 4d 57 30 08 5f 48 49 44 0d 70 6e 70 .O>AMW0._HID.pnp 1050: 30 63 31 34 00 08 5f 55 49 44 00 08 5f 57 44 47 0c14.._UID.._WDG 1060: 11 3f 0a 3c a7 1d 85 2e 53 d0 5f 49 9d fa 1a 4a .?.<....S._I...J 1070: d6 2e 6a 86 41 43 01 00 3b 6d 43 71 dd fb 72 4c ..j.AC..;mCq..rL 1080: bc b8 43 5b fe 0d 64 f9 42 43 01 00 21 12 90 05 ..C[..d.BC..!... 1090: 66 d5 d1 11 b2 f0 00 a0 c9 06 29 10 42 41 01 00 f.........).BA.. 10a0: 08 53 54 41 43 11 07 0a 04 01 14 03 00 14 1f 57 .STAC..........W 10b0: 51 41 43 01 70 0d 4d 58 4d 54 43 43 6f 6e 66 69 QAC.p.MXMTCConfi 10c0: 67 44 61 74 61 00 5b 31 a4 53 54 41 43 08 53 54 gData.[1.STAC.ST 10d0: 42 43 11 07 0a 04 01 00 00 00 14 34 57 51 42 43 BC.........4WQBC 10e0: 01 70 0d 47 65 74 20 4d 58 4d 54 43 43 6f 6e 74 .p.Get MXMTCCont 10f0: 72 6f 6c 44 61 74 61 3a 20 53 54 42 43 20 3d 20 rolData: STBC = 1100: 00 5b 31 70 53 54 42 43 5b 31 a4 53 54 42 43 14 .[1pSTBC[1.STBC. 1110: 47 06 57 53 42 43 02 70 69 53 54 42 43 70 0d 53 G.WSBC.piSTBCp.S 1120: 65 74 20 4d 58 4d 54 43 43 6f 6e 74 72 6f 6c 44 et MXMTCControlD 1130: 61 74 61 3a 20 53 54 42 43 20 3d 20 00 5b 31 70 ata: STBC = .[1p 1140: 53 54 42 43 5b 31 a0 30 93 5e 5e 2f 03 50 43 49 STBC[1.0.^^/.PCI 1150: 30 4c 50 43 42 45 43 4f 4b 01 70 83 88 53 54 42 0LPCBECOK.p..STB 1160: 43 01 00 5e 5e 2f 04 50 43 49 30 4c 50 43 42 45 C..^^/.PCI0LPCBE 1170: 43 30 5f 53 4b 54 43 08 57 51 42 41 11 43 2b 0b C0_SKTC.WQBA.C+. 1180: ae 02 46 4f 4d 42 01 00 00 00 9e 02 00 00 c0 0b ..FOMB.......... 1190: 00 00 44 53 00 01 1a 7d da 54 28 d9 85 00 01 06 ..DS...}.T(..... 11a0: 18 42 10 07 10 0a 4b 61 02 c9 21 52 3c 18 94 05 .B....Ka..!R<... 11b0: 10 43 88 57 04 44 04 84 bc 0a b0 29 c0 24 88 fa .C.W.D.....).$.. 11c0: f7 87 28 09 0e 25 04 42 12 05 98 17 a0 5b 80 61 ..(..%.B.....[.a 11d0: 01 b6 05 98 16 e0 18 92 4a 03 a7 04 96 02 21 a1 ........J.....!. 11e0: 02 94 0b f0 2d 40 3b a2 24 0b b0 0c 23 02 8f 82 ....-@;.$...#... 11f0: a1 71 68 ec 30 2c 13 4c 83 38 8c b2 91 45 60 dc .qh.0,.L.8...E`. 1200: 4e 05 c8 15 20 4c 80 78 54 61 34 07 45 e0 42 63 N... L.xTa4.E.Bc 1210: 64 40 c8 a3 00 ab a3 d0 a4 12 d8 bd 00 65 02 2c d@...........e., 1220: 0a 10 27 c0 9a 00 63 48 32 28 40 9b 00 5b 20 42 ..'...cH2(@..[ B 1230: 0f d4 19 8a 46 70 02 51 6a 46 11 48 ac 1a 01 85 ....Fp.QjF.H.... 1240: 12 34 46 b0 10 81 c2 86 37 46 98 03 88 d1 fe 20 .4F.....7F..... 1250: 48 20 05 e3 66 91 46 83 1a 6b 82 63 f7 68 4e b8 H ..f.F..k.c.hN. 1260: 73 01 d2 e7 26 90 a3 3b b8 3a 07 4d 86 c7 b0 1e s...&..;.:.M.... 1270: 06 d8 29 00 ef 1a 50 d3 3f 78 26 08 0e 35 44 8f ..)...P.?x&..5D. 1280: 3a dc 09 1c fb 91 30 88 b3 3b 6e ac c3 c9 68 d0 :.....0..;n...h. 1290: a5 0a 30 7b 00 d0 d0 12 9c f6 99 84 7e 0f 38 9f ..0{........~.8. 12a0: 9e 21 89 fc 41 a0 46 e6 ff 3f b4 c7 78 5a 31 43 .!..A.F..?..xZ1C 12b0: 3e 0b 1c 16 13 0b a1 4d 6a 3c 40 40 e1 d1 40 08 >......Mj<@@..@. 12c0: 6f 06 9e af 09 46 86 90 93 f1 a0 06 e0 41 d7 3a o....F.......A.: 12d0: 32 8d 27 a6 21 cf e8 00 22 bf 32 78 0c 41 02 f9 2.'.!...".2x.A.. 12e0: c4 60 b8 c7 81 13 78 02 f0 59 40 10 92 00 21 51 .`....x..Y@...!Q 12f0: e3 a7 47 08 7e 7a 78 93 30 28 1f d2 99 f9 90 e1 ..G.~zx.0(...... 1300: 11 c2 07 c4 7b 9f 3b 19 c1 29 7b a4 e0 b0 7e 0e ....{.;..){...~. 1310: 20 c0 af 0f 8f 0d 09 7c ae 08 8c 1d aa fd 0a 40 ......|.......@ 1320: 08 1e ed 51 e0 54 23 1c 2d 78 08 8a 1c 03 4a cc ...Q.T#.-x....J. 1330: 18 50 03 38 85 d0 e7 73 04 47 14 25 f6 21 19 da .P.8...s.G.%.!.. 1340: 08 e1 1f 39 4e c1 f7 8b 23 3d ad 23 78 91 f0 08 ...9N...#=.#x... 1350: 30 e1 ce 28 a8 38 30 f4 ff 7f 4c 01 dc 7a 3b a6 0..(.80...L..z;. 1360: 80 3e c0 31 05 50 fc ff 3f a6 00 87 a8 c7 14 f4 .>.1.P..?....... 1370: 40 0c 7c 2e a1 0d ff 96 c1 8e 03 87 74 6a 8f 28 @.|.........tj.( 1380: 80 29 79 47 14 50 8c 14 d6 f1 04 18 05 3c 9b a0 .)yG.P.......<.. 1390: 22 1d 4f 80 ce ff ff 78 02 58 b8 9a bc 92 84 7d ".O....x.X.....} 13a0: 1e 78 1d 89 14 e3 41 e2 b5 e4 c1 24 46 98 08 8f .x....A....$F... 13b0: 27 1e 47 c0 b7 82 28 91 8e 3e c4 83 49 28 63 3e '.G...(..>..I(c> 13c0: a3 84 89 f9 04 70 22 ef 27 46 0a 73 2a 8f 27 2c .....p".'F.s*.', 13d0: c4 f1 04 a0 85 e2 e3 09 3a 2c 84 fe ff c7 13 dc ........:,...... 13e0: e1 c1 a7 0c fc 85 0c c6 f9 04 30 24 f0 7c 02 ca ..........0$.|.. 13f0: db 18 e6 80 02 8c 14 da f4 a9 d1 a8 55 83 32 35 ............U.25 1400: ca 34 a8 d5 a7 52 63 c6 4c 9c 52 bc 6c 8d df f2 .4...Rc.L.R.l... 1410: 9e 09 02 b1 20 0a 81 38 cc f3 42 20 96 a2 01 84 .... ..8..B .... 1420: 85 06 a1 42 a9 05 e2 98 20 34 92 0a 10 f6 ff 07 ...B.... 4...... 1430: 5b 82 1b 4c 49 44 30 08 5f 48 49 44 0c 41 d0 0c [..LID0._HID.A.. 1440: 0d 14 0b 5f 4c 49 44 00 a4 4c 50 4f 4c 5b 82 0f ..._LID..LPOL[.. 1450: 50 57 52 42 08 5f 48 49 44 0c 41 d0 0c 0c 5b 82 PWRB._HID.A...[. 1460: 84 b9 04 50 43 49 30 14 09 5f 53 33 44 00 a4 0a ...PCI0.._S3D... 1470: 02 14 09 5f 53 34 44 00 a4 0a 02 08 5f 48 49 44 ..._S4D....._HID 1480: 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 d0 0a 03 5b .A...._CID.A...[ 1490: 82 43 0e 4d 43 48 43 08 5f 41 44 52 00 5b 80 48 .C.MCHC._ADR.[.H 14a0: 42 55 53 02 0a 40 0a c0 5b 81 4a 0c 48 42 55 53 BUS..@..[.J.HBUS 14b0: 03 45 50 45 4e 01 00 0b 45 50 42 52 14 00 20 4d .EPEN...EPBR.. M 14c0: 48 45 4e 01 00 0d 4d 48 42 52 12 00 40 0a 50 58 HEN...MHBR..@.PX 14d0: 45 4e 01 50 58 53 5a 02 00 17 50 58 42 52 06 00 EN.PXSZ...PXBR.. 14e0: 20 44 49 45 4e 01 00 0b 44 49 42 52 14 00 20 49 DIEN...DIBR.. I 14f0: 50 45 4e 01 00 0b 49 50 42 52 14 00 40 0e 00 04 PEN...IPBR..@... 1500: 50 4d 30 48 02 00 02 50 4d 31 4c 02 00 02 50 4d PM0H...PM1L...PM 1510: 31 48 02 00 02 50 4d 32 4c 02 00 02 50 4d 32 48 1H...PM2L...PM2H 1520: 02 00 02 50 4d 33 4c 02 00 02 50 4d 33 48 02 00 ...PM3L...PM3H.. 1530: 02 50 4d 34 4c 02 00 02 50 4d 34 48 02 00 02 50 .PM4L...PM4H...P 1540: 4d 35 4c 02 00 02 50 4d 35 48 02 00 02 50 4d 36 M5L...PM5H...PM6 1550: 4c 02 00 02 50 4d 36 48 02 00 02 00 07 48 45 4e L...PM6H.....HEN 1560: 41 01 00 40 05 54 55 55 44 10 00 40 06 00 04 54 A..@.TUUD..@...T 1570: 4c 55 44 0c 08 42 55 46 30 11 4d 20 0b 08 02 88 LUD..BUF0.M .... 1580: 0d 00 02 0c 00 00 00 00 00 ff 00 00 00 00 01 87 ................ 1590: 17 00 01 0c 03 00 00 00 00 00 00 00 00 f7 0c 00 ................ 15a0: 00 00 00 00 00 f8 0c 00 00 47 01 f8 0c f8 0c 01 .........G...... 15b0: 08 87 17 00 01 0c 03 00 00 00 00 00 0d 00 00 ff ................ 15c0: ff 00 00 00 00 00 00 00 f3 00 00 87 17 00 00 0c ................ 15d0: 03 00 00 00 00 00 00 0a 00 ff ff 0b 00 00 00 00 ................ 15e0: 00 00 00 02 00 87 17 00 00 0c 03 00 00 00 00 00 ................ 15f0: 00 0c 00 ff 3f 0c 00 00 00 00 00 00 40 00 00 87 ....?.......@... 1600: 17 00 00 0c 03 00 00 00 00 00 40 0c 00 ff 7f 0c ..........@..... 1610: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 1620: 00 00 00 00 80 0c 00 ff bf 0c 00 00 00 00 00 00 ................ 1630: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0c @............... 1640: 00 ff ff 0c 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1650: 00 0c 03 00 00 00 00 00 00 0d 00 ff 3f 0d 00 00 ............?... 1660: 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 ....@........... 1670: 00 00 40 0d 00 ff 7f 0d 00 00 00 00 00 00 40 00 ..@...........@. 1680: 00 87 17 00 00 0c 03 00 00 00 00 00 80 0d 00 ff ................ 1690: bf 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c ........@....... 16a0: 03 00 00 00 00 00 c0 0d 00 ff ff 0d 00 00 00 00 ................ 16b0: 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 ..@............. 16c0: 00 0e 00 ff 3f 0e 00 00 00 00 00 00 40 00 00 87 ....?.......@... 16d0: 17 00 00 0c 03 00 00 00 00 00 40 0e 00 ff 7f 0e ..........@..... 16e0: 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 ......@......... 16f0: 00 00 00 00 80 0e 00 ff bf 0e 00 00 00 00 00 00 ................ 1700: 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0e @............... 1710: 00 ff ff 0e 00 00 00 00 00 00 40 00 00 87 17 00 ..........@..... 1720: 00 0c 03 00 00 00 00 00 00 0f 00 ff ff 0f 00 00 ................ 1730: 00 00 00 00 00 01 00 87 17 00 00 0c 03 00 00 00 ................ 1740: 00 00 00 00 00 ff ff ff df 00 00 00 00 00 00 00 ................ 1750: 00 87 17 00 00 0c 03 00 00 00 00 00 00 00 f0 ff ................ 1760: ff bf fe 00 00 00 00 00 00 c0 0e 87 17 00 00 0c ................ 1770: 03 00 00 00 00 00 00 d4 fe ff 4f d4 fe 00 00 00 ..........O..... 1780: 00 00 00 00 00 79 00 14 4b 3d 5f 43 52 53 08 a0 .....y..K=_CRS.. 1790: 1c 5e 2e 4d 43 48 43 50 4d 31 4c 8a 42 55 46 30 .^.MCHCPM1L.BUF0 17a0: 0a 7c 43 30 4c 4e 70 00 43 30 4c 4e a0 1f 93 5e .|C0LNp.C0LN...^ 17b0: 2e 4d 43 48 43 50 4d 31 4c 01 8d 42 55 46 30 0b .MCHCPM1L..BUF0. 17c0: 58 03 43 30 52 57 70 00 43 30 52 57 a0 1c 5e 2e X.C0RWp.C0RW..^. 17d0: 4d 43 48 43 50 4d 31 48 8a 42 55 46 30 0a 96 43 MCHCPM1H.BUF0..C 17e0: 34 4c 4e 70 00 43 34 4c 4e a0 1f 93 5e 2e 4d 43 4LNp.C4LN...^.MC 17f0: 48 43 50 4d 31 48 01 8d 42 55 46 30 0b 28 04 43 HCPM1H..BUF0.(.C 1800: 34 52 57 70 00 43 34 52 57 a0 1c 5e 2e 4d 43 48 4RWp.C4RW..^.MCH 1810: 43 50 4d 32 4c 8a 42 55 46 30 0a b0 43 38 4c 4e CPM2L.BUF0..C8LN 1820: 70 00 43 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 p.C8LN...^.MCHCP 1830: 4d 32 4c 01 8d 42 55 46 30 0b f8 04 43 38 52 57 M2L..BUF0...C8RW 1840: 70 00 43 38 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d p.C8RW..^.MCHCPM 1850: 32 48 8a 42 55 46 30 0a ca 43 43 4c 4e 70 00 43 2H.BUF0..CCLNp.C 1860: 43 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 32 48 CLN...^.MCHCPM2H 1870: 01 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 43 ..BUF0...CCRWp.C 1880: 43 52 57 a0 1c 5e 2e 4d 43 48 43 50 4d 33 4c 8a CRW..^.MCHCPM3L. 1890: 42 55 46 30 0a e4 44 30 4c 4e 70 00 44 30 4c 4e BUF0..D0LNp.D0LN 18a0: a0 1f 93 5e 2e 4d 43 48 43 50 4d 33 4c 01 8d 42 ...^.MCHCPM3L..B 18b0: 55 46 30 0b 98 06 44 30 52 57 70 00 44 30 52 57 UF0...D0RWp.D0RW 18c0: a0 1c 5e 2e 4d 43 48 43 50 4d 33 48 8a 42 55 46 ..^.MCHCPM3H.BUF 18d0: 30 0a fe 44 34 4c 4e 70 00 44 34 4c 4e a0 1f 93 0..D4LNp.D4LN... 18e0: 5e 2e 4d 43 48 43 50 4d 33 48 01 8d 42 55 46 30 ^.MCHCPM3H..BUF0 18f0: 0b 68 07 44 34 52 57 70 00 44 34 52 57 a0 1d 5e .h.D4RWp.D4RW..^ 1900: 2e 4d 43 48 43 50 4d 34 4c 8a 42 55 46 30 0b 18 .MCHCPM4L.BUF0.. 1910: 01 44 38 4c 4e 70 00 44 38 4c 4e a0 1f 93 5e 2e .D8LNp.D8LN...^. 1920: 4d 43 48 43 50 4d 34 4c 01 8d 42 55 46 30 0b 38 MCHCPM4L..BUF0.8 1930: 08 44 38 52 57 70 00 44 38 52 57 a0 1d 5e 2e 4d .D8RWp.D8RW..^.M 1940: 43 48 43 50 4d 34 48 8a 42 55 46 30 0b 32 01 44 CHCPM4H.BUF0.2.D 1950: 43 4c 4e 70 00 44 43 4c 4e a0 1f 93 5e 2e 4d 43 CLNp.DCLN...^.MC 1960: 48 43 50 4d 34 48 01 8d 42 55 46 30 0b 08 09 44 HCPM4H..BUF0...D 1970: 43 52 57 70 00 44 43 52 57 a0 1d 5e 2e 4d 43 48 CRWp.DCRW..^.MCH 1980: 43 50 4d 35 4c 8a 42 55 46 30 0b 4c 01 45 30 4c CPM5L.BUF0.L.E0L 1990: 4e 70 00 45 30 4c 4e a0 1f 93 5e 2e 4d 43 48 43 Np.E0LN...^.MCHC 19a0: 50 4d 35 4c 01 8d 42 55 46 30 0b d8 09 45 30 52 PM5L..BUF0...E0R 19b0: 57 70 00 45 30 52 57 a0 1d 5e 2e 4d 43 48 43 50 Wp.E0RW..^.MCHCP 19c0: 4d 35 48 8a 42 55 46 30 0b 66 01 45 34 4c 4e 70 M5H.BUF0.f.E4LNp 19d0: 00 45 34 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d .E4LN...^.MCHCPM 19e0: 35 48 01 8d 42 55 46 30 0b a8 0a 45 34 52 57 70 5H..BUF0...E4RWp 19f0: 00 45 34 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 .E4RW..^.MCHCPM6 1a00: 4c 8a 42 55 46 30 0b 80 01 45 38 4c 4e 70 00 45 L.BUF0...E8LNp.E 1a10: 38 4c 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 4c 8LN...^.MCHCPM6L 1a20: 01 8d 42 55 46 30 0b 78 0b 45 38 52 57 70 00 45 ..BUF0.x.E8RWp.E 1a30: 38 52 57 a0 1d 5e 2e 4d 43 48 43 50 4d 36 48 8a 8RW..^.MCHCPM6H. 1a40: 42 55 46 30 0b 9a 01 45 43 4c 4e 70 00 45 43 4c BUF0...ECLNp.ECL 1a50: 4e a0 1f 93 5e 2e 4d 43 48 43 50 4d 36 48 01 8d N...^.MCHCPM6H.. 1a60: 42 55 46 30 0b 48 0c 45 43 52 57 70 00 45 43 52 BUF0.H.ECRWp.ECR 1a70: 57 a0 1d 5e 2e 4d 43 48 43 50 4d 30 48 8a 42 55 W..^.MCHCPM0H.BU 1a80: 46 30 0b b4 01 46 30 4c 4e 70 00 46 30 4c 4e a0 F0...F0LNp.F0LN. 1a90: 1f 93 5e 2e 4d 43 48 43 50 4d 30 48 01 8d 42 55 ..^.MCHCPM0H..BU 1aa0: 46 30 0b 18 0d 46 30 52 57 70 00 46 30 52 57 8a F0...F0RWp.F0RW. 1ab0: 42 55 46 30 0b c2 01 4d 31 4d 4e 8a 42 55 46 30 BUF0...M1MN.BUF0 1ac0: 0b c6 01 4d 31 4d 58 8a 42 55 46 30 0b ce 01 4d ...M1MX.BUF0...M 1ad0: 31 4c 4e 8a 42 55 46 30 0b dc 01 4d 32 4d 4e 8a 1LN.BUF0...M2MN. 1ae0: 42 55 46 30 0b e0 01 4d 32 4d 58 8a 42 55 46 30 BUF0...M2MX.BUF0 1af0: 0b e8 01 4d 32 4c 4e 79 5e 2e 4d 43 48 43 50 58 ...M2LNy^.MCHCPX 1b00: 42 52 0a 1a 4d 31 4d 58 7a 0c 00 00 00 10 5e 2e BR..M1MXz.....^. 1b10: 4d 43 48 43 50 58 53 5a 60 72 4d 31 4d 58 60 4d MCHCPXSZ`rM1MX`M 1b20: 32 4d 4e 72 74 4d 32 4d 58 4d 32 4d 4e 00 01 4d 2MNrtM2MXM2MN..M 1b30: 32 4c 4e 74 4d 31 4d 58 01 4d 31 4d 58 79 5e 2e 2LNtM1MX.M1MXy^. 1b40: 4d 43 48 43 54 4c 55 44 0a 14 4d 31 4d 4e 72 74 MCHCTLUD..M1MNrt 1b50: 4d 31 4d 58 4d 31 4d 4e 00 01 4d 31 4c 4e a4 42 M1MXM1MN..M1LN.B 1b60: 55 46 30 14 47 28 5f 50 52 54 00 a0 45 0f 47 50 UF0.G(_PRT..E.GP 1b70: 49 43 a4 12 4d 0e 13 12 0b 04 0c ff ff 01 00 00 IC..M........... 1b80: 00 0a 10 12 0b 04 0c ff ff 02 00 00 00 0a 10 12 ................ 1b90: 0b 04 0c ff ff 07 00 00 00 0a 10 12 0b 04 0c ff ................ 1ba0: ff 19 00 00 00 0a 14 12 0b 04 0c ff ff 1a 00 00 ................ 1bb0: 00 0a 10 12 0b 04 0c ff ff 1a 00 01 00 0a 15 12 ................ 1bc0: 0c 04 0c ff ff 1a 00 0a 02 00 0a 12 12 0b 04 0c ................ 1bd0: ff ff 1b 00 00 00 0a 16 12 0b 04 0c ff ff 1c 00 ................ 1be0: 00 00 0a 11 12 0b 04 0c ff ff 1c 00 01 00 0a 10 ................ 1bf0: 12 0c 04 0c ff ff 1c 00 0a 02 00 0a 12 12 0c 04 ................ 1c00: 0c ff ff 1c 00 0a 03 00 0a 13 12 0b 04 0c ff ff ................ 1c10: 1d 00 00 00 0a 17 12 0b 04 0c ff ff 1d 00 01 00 ................ 1c20: 0a 13 12 0c 04 0c ff ff 1d 00 0a 02 00 0a 12 12 ................ 1c30: 0b 04 0c ff ff 1f 00 00 00 0a 13 12 0b 04 0c ff ................ 1c40: ff 1f 00 01 00 0a 13 12 0c 04 0c ff ff 1f 00 0a ................ 1c50: 02 00 0a 13 12 0c 04 0c ff ff 1f 00 0a 03 00 0a ................ 1c60: 10 a1 49 18 a4 12 45 18 13 12 13 04 0c ff ff 01 ..I...E......... 1c70: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1c80: 0c ff ff 02 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 ......^.LPCBLNKA 1c90: 00 12 13 04 0c ff ff 07 00 00 5e 2e 4c 50 43 42 ..........^.LPCB 1ca0: 4c 4e 4b 41 00 12 13 04 0c ff ff 19 00 00 5e 2e LNKA..........^. 1cb0: 4c 50 43 42 4c 4e 4b 45 00 12 13 04 0c ff ff 1a LPCBLNKE........ 1cc0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 ..^.LPCBLNKA.... 1cd0: 0c ff ff 1a 00 01 5e 2e 4c 50 43 42 4c 4e 4b 46 ......^.LPCBLNKF 1ce0: 00 12 14 04 0c ff ff 1a 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1cf0: 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1b 00 00 5e BLNKC..........^ 1d00: 2e 4c 50 43 42 4c 4e 4b 47 00 12 13 04 0c ff ff .LPCBLNKG....... 1d10: 1c 00 00 5e 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 ...^.LPCBLNKB... 1d20: 04 0c ff ff 1c 00 01 5e 2e 4c 50 43 42 4c 4e 4b .......^.LPCBLNK 1d30: 41 00 12 14 04 0c ff ff 1c 00 0a 02 5e 2e 4c 50 A...........^.LP 1d40: 43 42 4c 4e 4b 43 00 12 14 04 0c ff ff 1c 00 0a CBLNKC.......... 1d50: 03 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0c .^.LPCBLNKD..... 1d60: ff ff 1d 00 00 5e 2e 4c 50 43 42 4c 4e 4b 48 00 .....^.LPCBLNKH. 1d70: 12 13 04 0c ff ff 1d 00 01 5e 2e 4c 50 43 42 4c .........^.LPCBL 1d80: 4e 4b 44 00 12 14 04 0c ff ff 1d 00 0a 02 5e 2e NKD...........^. 1d90: 4c 50 43 42 4c 4e 4b 43 00 12 13 04 0c ff ff 1f LPCBLNKC........ 1da0: 00 00 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 ..^.LPCBLNKD.... 1db0: 0c ff ff 1f 00 01 5e 2e 4c 50 43 42 4c 4e 4b 44 ......^.LPCBLNKD 1dc0: 00 12 14 04 0c ff ff 1f 00 0a 02 5e 2e 4c 50 43 ...........^.LPC 1dd0: 42 4c 4e 4b 44 00 12 14 04 0c ff ff 1f 00 0a 03 BLNKD........... 1de0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 40 14 50 ^.LPCBLNKA.[.@.P 1df0: 44 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 DRC._HID.A...._U 1e00: 49 44 01 08 42 55 46 30 11 46 06 0a 62 86 09 00 ID..BUF0.F..b... 1e10: 01 00 00 00 00 00 40 00 00 86 09 00 01 00 00 00 ......@......... 1e20: 00 00 40 00 00 86 09 00 01 00 00 00 00 00 10 00 ..@............. 1e30: 00 86 09 00 01 00 00 00 00 00 10 00 00 86 09 00 ................ 1e40: 01 00 00 00 00 00 00 00 00 86 09 00 01 00 00 d2 ................ 1e50: fe 00 00 02 00 86 09 00 01 00 00 d4 fe 00 50 00 ..............P. 1e60: 00 86 09 00 01 00 50 d4 fe 00 b0 04 00 79 00 14 ......P......y.. 1e70: 4d 0b 5f 43 52 53 08 8a 42 55 46 30 0a 04 52 42 M._CRS..BUF0..RB 1e80: 52 30 79 5e 5e 2e 4c 50 43 42 52 43 42 41 0a 0e R0y^^.LPCBRCBA.. 1e90: 52 42 52 30 8a 42 55 46 30 0a 10 4d 42 52 30 79 RBR0.BUF0..MBR0y 1ea0: 5e 5e 2e 4d 43 48 43 4d 48 42 52 0a 0e 4d 42 52 ^^.MCHCMHBR..MBR 1eb0: 30 8a 42 55 46 30 0a 1c 44 42 52 30 79 5e 5e 2e 0.BUF0..DBR0y^^. 1ec0: 4d 43 48 43 44 49 42 52 0a 0c 44 42 52 30 8a 42 MCHCDIBR..DBR0.B 1ed0: 55 46 30 0a 28 45 42 52 30 79 5e 5e 2e 4d 43 48 UF0.(EBR0y^^.MCH 1ee0: 43 45 50 42 52 0a 0c 45 42 52 30 8a 42 55 46 30 CEPBR..EBR0.BUF0 1ef0: 0a 34 58 42 52 30 79 5e 5e 2e 4d 43 48 43 50 58 .4XBR0y^^.MCHCPX 1f00: 42 52 0a 1a 58 42 52 30 8a 42 55 46 30 0a 38 58 BR..XBR0.BUF0.8X 1f10: 53 5a 30 7a 0c 00 00 00 10 5e 5e 2e 4d 43 48 43 SZ0z.....^^.MCHC 1f20: 50 58 53 5a 58 53 5a 30 a4 42 55 46 30 5b 82 4d PXSZXSZ0.BUF0[.M 1f30: 50 50 45 47 50 08 5f 41 44 52 0c 00 00 01 00 14 PPEGP._ADR...... 1f40: 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 2c A._PRT..3GPIC.., 1f50: 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ff ................ 1f60: ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a 12 ................ 1f70: 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 12 ............E... 1f80: 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 43 A.........^^.LPC 1f90: 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e 2e BLNKA........^^. 1fa0: 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff 0a LPCBLNKB........ 1fb0: 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 1fc0: 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 1fd0: 00 5b 82 49 46 56 47 41 5f 08 5f 41 44 52 00 08 .[.IFVGA_._ADR.. 1fe0: 53 57 49 54 01 08 43 52 54 41 01 08 4c 43 44 41 SWIT..CRTA..LCDA 1ff0: 01 08 54 56 41 41 01 08 56 4c 44 46 01 5b 80 56 ..TVAA..VLDF.[.V 2000: 49 44 53 02 00 0a c8 5b 81 0b 56 49 44 53 03 56 IDS....[..VIDS.V 2010: 44 49 44 20 14 09 5f 53 54 41 00 a4 0a 0f 08 5f DID .._STA....._ 2020: 50 53 43 00 14 0c 5f 50 53 30 00 70 00 5f 50 53 PSC..._PS0.p._PS 2030: 43 14 0c 5f 50 53 31 00 70 01 5f 50 53 43 14 0d C.._PS1.p._PSC.. 2040: 5f 50 53 33 00 70 0a 03 5f 50 53 43 14 10 5f 44 _PS3.p.._PSC.._D 2050: 4f 53 01 70 7b 68 0a 03 00 53 57 49 54 14 17 5f OS.p{h...SWIT.._ 2060: 44 4f 44 00 a4 12 0f 03 0c 00 01 01 00 0c 10 01 DOD............. 2070: 01 00 0b 00 02 5b 82 4d 08 43 52 54 5f 14 0a 5f .....[.M.CRT_.._ 2080: 41 44 52 00 a4 0b 00 01 14 41 06 5f 44 43 53 00 ADR......A._DCS. 2090: 5e 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 ^^^^.LPCBPHSS..p 20a0: 43 41 44 4c 60 70 43 53 54 45 61 7b 60 0a 02 60 CADL`pCSTEa{`..` 20b0: 7b 61 0a 02 61 a0 08 60 70 01 43 52 54 41 a1 07 {a..a..`p.CRTA.. 20c0: 70 00 43 52 54 41 a0 13 43 52 54 41 a0 08 93 61 p.CRTA..CRTA...a 20d0: 0a 02 a4 0a 1f a1 04 a4 0a 1d a1 0f a0 08 93 61 ...............a 20e0: 0a 02 a4 0a 0f a1 04 a4 0a 0d 14 12 5f 44 47 53 ............_DGS 20f0: 00 a0 07 43 52 54 41 a4 01 a1 03 a4 00 14 06 5f ...CRTA........_ 2100: 44 53 53 01 5b 82 47 0e 4c 43 44 5f 14 0a 5f 41 DSS.[.G.LCD_.._A 2110: 44 52 00 a4 0b 10 01 14 4d 05 5f 44 43 53 00 5e DR......M._DCS.^ 2120: 5e 5e 5e 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 ^^^.LPCBPHSS..pC 2130: 41 44 4c 60 70 43 53 54 45 61 7b 60 01 60 7b 61 ADL`pCSTEa{`.`{a 2140: 01 61 a0 08 60 70 01 4c 43 44 41 a1 07 70 00 4c .a..`p.LCDA..p.L 2150: 43 44 41 a0 12 4c 43 44 41 a0 07 93 61 01 a4 0a CDA..LCDA...a... 2160: 1f a1 04 a4 0a 1d a1 0e a0 07 93 61 01 a4 0a 0f ...........a.... 2170: a1 04 a4 0a 0d 14 12 5f 44 47 53 00 a0 07 4c 43 ......._DGS...LC 2180: 44 41 a4 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 DA........_DSS.. 2190: 1d 5f 42 43 4c 00 a4 12 15 0a 0a 46 0a 28 00 0a ._BCL......F.(.. 21a0: 0a 0a 14 0a 1e 0a 28 0a 32 0a 3c 0a 46 14 20 5f ......(.2.<.F. _ 21b0: 42 43 4d 01 78 68 0a 0a 60 61 70 61 5e 5e 5e 5e BCM.xh..`apa^^^^ 21c0: 2f 03 4c 50 43 42 45 43 30 5f 42 52 54 53 14 1e /.LPCBEC0_BRTS.. 21d0: 5f 42 51 43 00 77 5e 5e 5e 5e 2f 03 4c 50 43 42 _BQC.w^^^^/.LPCB 21e0: 45 43 30 5f 42 52 54 53 0a 0a 60 a4 60 5b 82 4d EC0_BRTS..`.`[.M 21f0: 08 54 56 5f 5f 14 0a 5f 41 44 52 00 a4 0b 00 02 .TV__.._ADR..... 2200: 14 41 06 5f 44 43 53 00 5e 5e 5e 5e 2e 4c 50 43 .A._DCS.^^^^.LPC 2210: 42 50 48 53 53 0a 0c 70 43 41 44 4c 60 70 43 53 BPHSS..pCADL`pCS 2220: 54 45 61 7b 60 0a 04 60 7b 61 0a 04 61 a0 08 60 TEa{`..`{a..a..` 2230: 70 01 54 56 41 41 a1 07 70 00 54 56 41 41 a0 13 p.TVAA..p.TVAA.. 2240: 54 56 41 41 a0 08 93 61 0a 04 a4 0a 1f a1 04 a4 TVAA...a........ 2250: 0a 1d a1 0f a0 08 93 61 0a 04 a4 0a 0f a1 04 a4 .......a........ 2260: 0a 0d 14 12 5f 44 47 53 00 a0 07 54 56 41 41 a4 ...._DGS...TVAA. 2270: 01 a1 03 a4 00 14 06 5f 44 53 53 01 14 49 10 44 ......._DSS..I.D 2280: 53 53 57 00 a0 4a 0e 93 53 57 49 54 00 5e 5e 5e SSW..J..SWIT.^^^ 2290: 2e 4c 50 43 42 50 48 53 53 0a 0c 70 43 41 44 4c .LPCBPHSS..pCADL 22a0: 60 70 43 53 54 45 61 a0 16 94 61 01 7b 60 61 56 `pCSTEa...a.{`aV 22b0: 4c 44 46 7b 56 4c 44 46 0a fe 56 4c 44 46 a0 43 LDF{VLDF..VLDF.C 22c0: 0a 56 4c 44 46 a0 27 93 60 0a 09 a0 0b 93 61 0a .VLDF.'.`.....a. 22d0: 08 53 54 42 4c 0a 02 a0 0a 93 61 01 53 54 42 4c .STBL.....a.STBL 22e0: 0a 03 a0 0a 93 61 0a 09 53 54 42 4c 01 a0 28 93 .....a..STBL..(. 22f0: 60 0a 0a a0 0b 93 61 0a 08 53 54 42 4c 0a 05 a0 `.....a..STBL... 2300: 0a 93 61 0a 02 53 54 42 4c 01 a0 0b 93 61 0a 0a ..a..STBL....a.. 2310: 53 54 42 4c 0a 04 a0 4b 04 93 60 0a 0b a0 0b 93 STBL...K..`..... 2320: 61 0a 08 53 54 42 4c 0a 02 a0 0b 93 61 0a 09 53 a..STBL.....a..S 2330: 54 42 4c 0a 05 a0 0a 93 61 01 53 54 42 4c 0a 03 TBL.....a.STBL.. 2340: a0 0b 93 61 0a 0a 53 54 42 4c 0a 04 a0 0a 93 61 ...a..STBL.....a 2350: 0a 02 53 54 42 4c 01 a0 0a 93 61 0a 0b 53 54 42 ..STBL....a..STB 2360: 4c 01 a1 0c 70 01 56 4c 44 46 53 54 42 4c 01 a1 L...p.VLDFSTBL.. 2370: 16 a0 14 93 53 57 49 54 01 5e 5e 5e 2e 4c 50 43 ....SWIT.^^^.LPC 2380: 42 50 48 53 53 01 14 45 0b 53 54 42 4c 01 a0 16 BPHSS..E.STBL... 2390: 93 68 01 70 00 43 52 54 41 70 01 4c 43 44 41 70 .h.p.CRTAp.LCDAp 23a0: 00 54 56 41 41 a0 17 93 68 0a 02 70 01 43 52 54 .TVAA...h..p.CRT 23b0: 41 70 00 4c 43 44 41 70 00 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23c0: 68 0a 03 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 23d0: 00 54 56 41 41 a0 17 93 68 0a 04 70 00 43 52 54 .TVAA...h..p.CRT 23e0: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 23f0: 68 0a 05 70 00 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2400: 01 54 56 41 41 a0 17 93 68 0a 06 70 01 43 52 54 .TVAA...h..p.CRT 2410: 41 70 00 4c 43 44 41 70 01 54 56 41 41 a0 17 93 Ap.LCDAp.TVAA... 2420: 68 0a 07 70 01 43 52 54 41 70 01 4c 43 44 41 70 h..p.CRTAp.LCDAp 2430: 01 54 56 41 41 86 56 47 41 5f 0a 80 5b 82 42 f8 .TVAA.VGA_..[.B. 2440: 47 46 58 30 08 5f 41 44 52 0c 00 00 02 00 14 10 GFX0._ADR....... 2450: 5f 44 4f 53 01 70 7b 68 0a 07 00 44 53 45 4e 14 _DOS.p{h...DSEN. 2460: 41 26 5f 44 4f 44 00 70 00 4e 44 49 44 a0 15 92 A&_DOD.p.NDID... 2470: 93 44 49 44 4c 00 70 53 44 44 4c 44 49 44 31 44 .DIDL.pSDDLDID1D 2480: 49 44 31 a0 15 92 93 44 44 4c 32 00 70 53 44 44 ID1....DDL2.pSDD 2490: 4c 44 49 44 32 44 49 44 32 a0 15 92 93 44 44 4c LDID2DID2....DDL 24a0: 33 00 70 53 44 44 4c 44 49 44 33 44 49 44 33 a0 3.pSDDLDID3DID3. 24b0: 15 92 93 44 44 4c 34 00 70 53 44 44 4c 44 49 44 ...DDL4.pSDDLDID 24c0: 34 44 49 44 34 a0 15 92 93 44 44 4c 35 00 70 53 4DID4....DDL5.pS 24d0: 44 44 4c 44 49 44 35 44 49 44 35 a0 2c 93 4e 44 DDLDID5DID5.,.ND 24e0: 49 44 01 08 54 4d 50 31 12 07 01 0c ff ff ff ff ID..TMP1........ 24f0: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2500: 31 00 00 a4 54 4d 50 31 a0 46 04 93 4e 44 49 44 1...TMP1.F..NDID 2510: 0a 02 08 54 4d 50 32 12 0c 02 0c ff ff ff ff 0c ...TMP2......... 2520: ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 ....p}.....DID1. 2530: 88 54 4d 50 32 00 00 70 7d 0c 00 00 01 00 44 49 .TMP2..p}.....DI 2540: 44 32 00 88 54 4d 50 32 01 00 a4 54 4d 50 32 a0 D2..TMP2...TMP2. 2550: 4f 05 93 4e 44 49 44 0a 03 08 54 4d 50 33 12 11 O..NDID...TMP3.. 2560: 03 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 2570: 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 4d 50 p}.....DID1..TMP 2580: 33 00 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 3..p}.....DID2.. 2590: 54 4d 50 33 01 00 70 7d 0c 00 00 01 00 44 49 44 TMP3..p}.....DID 25a0: 33 00 88 54 4d 50 33 0a 02 00 a4 54 4d 50 33 a0 3..TMP3....TMP3. 25b0: 48 07 93 4e 44 49 44 0a 04 08 54 4d 50 34 12 16 H..NDID...TMP4.. 25c0: 04 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 25d0: 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 .....p}.....DID1 25e0: 00 88 54 4d 50 34 00 00 70 7d 0c 00 00 01 00 44 ..TMP4..p}.....D 25f0: 49 44 32 00 88 54 4d 50 34 01 00 70 7d 0c 00 00 ID2..TMP4..p}... 2600: 01 00 44 49 44 33 00 88 54 4d 50 34 0a 02 00 70 ..DID3..TMP4...p 2610: 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d 50 34 }.....DID4..TMP4 2620: 0a 03 00 a4 54 4d 50 34 a0 41 09 94 4e 44 49 44 ....TMP4.A..NDID 2630: 0a 04 08 54 4d 50 35 12 1b 05 0c ff ff ff ff 0c ...TMP5......... 2640: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 2650: ff ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 88 ...p}.....DID1.. 2660: 54 4d 50 35 00 00 70 7d 0c 00 00 01 00 44 49 44 TMP5..p}.....DID 2670: 32 00 88 54 4d 50 35 01 00 70 7d 0c 00 00 01 00 2..TMP5..p}..... 2680: 44 49 44 33 00 88 54 4d 50 35 0a 02 00 70 7d 0c DID3..TMP5...p}. 2690: 00 00 01 00 44 49 44 34 00 88 54 4d 50 35 0a 03 ....DID4..TMP5.. 26a0: 00 70 7d 0c 00 00 01 00 44 49 44 34 00 88 54 4d .p}.....DID4..TM 26b0: 50 35 0a 04 00 a4 54 4d 50 35 a4 12 05 01 0b 00 P5....TMP5...... 26c0: 04 5b 82 43 06 44 44 30 31 14 1c 5f 41 44 52 08 .[.C.DD01.._ADR. 26d0: a0 09 93 44 49 44 31 00 a4 01 a1 0b a4 7b 0b ff ...DID1......{.. 26e0: ff 44 49 44 31 00 14 0f 5f 44 43 53 00 a4 43 44 .DID1..._DCS..CD 26f0: 44 53 44 49 44 31 14 0f 5f 44 47 53 00 a4 4e 44 DSDID1.._DGS..ND 2700: 44 53 44 49 44 31 14 1f 5f 44 53 53 01 a0 18 93 DSDID1.._DSS.... 2710: 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 {h...........pNS 2720: 54 45 43 53 54 45 5b 82 44 06 44 44 30 32 14 1d TECSTE[.D.DD02.. 2730: 5f 41 44 52 08 a0 0a 93 44 49 44 32 00 a4 0a 02 _ADR....DID2.... 2740: a1 0b a4 7b 0b ff ff 44 49 44 32 00 14 0f 5f 44 ...{...DID2..._D 2750: 43 53 00 a4 43 44 44 53 44 49 44 32 14 0f 5f 44 CS..CDDSDID2.._D 2760: 47 53 00 a4 4e 44 44 53 44 49 44 32 14 1f 5f 44 GS..NDDSDID2.._D 2770: 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 SS....{h........ 2780: 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 41 07 ...pNSTECSTE[.A. 2790: 44 44 30 33 14 1d 5f 41 44 52 08 a0 0a 93 44 49 DD03.._ADR....DI 27a0: 44 33 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 49 44 D3.......{...DID 27b0: 33 00 14 1c 5f 44 43 53 00 a0 0a 93 44 49 44 33 3..._DCS....DID3 27c0: 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 33 14 .......CDDSDID3. 27d0: 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 44 33 14 ._DGS..NDDSDID3. 27e0: 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 ._DSS....{h..... 27f0: 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 5b ......pNSTECSTE[ 2800: 82 41 07 44 44 30 34 14 1d 5f 41 44 52 08 a0 0a .A.DD04.._ADR... 2810: 93 44 49 44 34 00 a4 0a 04 a1 0b a4 7b 0b ff ff .DID4.......{... 2820: 44 49 44 34 00 14 1c 5f 44 43 53 00 a0 0a 93 44 DID4..._DCS....D 2830: 49 44 34 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 ID4.......CDDSDI 2840: 44 34 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 D4.._DGS..NDDSDI 2850: 44 34 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 D4.._DSS....{h.. 2860: 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 .........pNSTECS 2870: 54 45 5b 82 41 07 44 44 30 35 14 1d 5f 41 44 52 TE[.A.DD05.._ADR 2880: 08 a0 0a 93 44 49 44 35 00 a4 0a 05 a1 0b a4 7b ....DID5.......{ 2890: 0b ff ff 44 49 44 35 00 14 1c 5f 44 43 53 00 a0 ...DID5..._DCS.. 28a0: 0a 93 44 49 44 35 00 a4 0a 0b a1 0a a4 43 44 44 ..DID5.......CDD 28b0: 53 44 49 44 35 14 0f 5f 44 47 53 00 a4 4e 44 44 SDID5.._DGS..NDD 28c0: 53 44 49 44 35 14 1f 5f 44 53 53 01 a0 18 93 7b SDID5.._DSS....{ 28d0: 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 h...........pNST 28e0: 45 43 53 54 45 14 4e 06 53 44 44 4c 01 75 4e 44 ECSTE.N.SDDL.uND 28f0: 49 44 70 7b 68 0b 0f 0f 00 60 7d 0c 00 00 00 80 IDp{h....`}..... 2900: 60 61 a0 09 93 44 49 44 4c 60 a4 61 a0 09 93 44 `a...DIDL`.a...D 2910: 44 4c 32 60 a4 61 a0 09 93 44 44 4c 33 60 a4 61 DL2`.a...DDL3`.a 2920: a0 09 93 44 44 4c 34 60 a4 61 a0 09 93 44 44 4c ...DDL4`.a...DDL 2930: 35 60 a4 61 a0 09 93 44 44 4c 36 60 a4 61 a0 09 5`.a...DDL6`.a.. 2940: 93 44 44 4c 37 60 a4 61 a0 09 93 44 44 4c 38 60 .DDL7`.a...DDL8` 2950: a4 61 a4 00 14 4a 08 43 44 44 53 01 a0 0f 93 43 .a...J.CDDS....C 2960: 41 44 4c 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 ADL{h..........C 2970: 41 4c 32 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL2{h..........C 2980: 41 4c 33 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL3{h..........C 2990: 41 4c 34 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL4{h..........C 29a0: 41 4c 35 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL5{h..........C 29b0: 41 4c 36 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL6{h..........C 29c0: 41 4c 37 7b 68 0b 0f 0f 00 a4 0a 1f a0 0f 93 43 AL7{h..........C 29d0: 41 4c 38 7b 68 0b 0f 0f 00 a4 0a 1f a4 0a 1d 14 AL8{h........... 29e0: 41 08 4e 44 44 53 01 a0 0e 93 4e 41 44 4c 7b 68 A.NDDS....NADL{h 29f0: 0b 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 32 7b 68 0b .........NDL2{h. 2a00: 0f 0f 00 a4 01 a0 0e 93 4e 44 4c 33 7b 68 0b 0f ........NDL3{h.. 2a10: 0f 00 a4 01 a0 0e 93 4e 44 4c 34 7b 68 0b 0f 0f .......NDL4{h... 2a20: 00 a4 01 a0 0e 93 4e 44 4c 35 7b 68 0b 0f 0f 00 ......NDL5{h.... 2a30: a4 01 a0 0e 93 4e 44 4c 36 7b 68 0b 0f 0f 00 a4 .....NDL6{h..... 2a40: 01 a0 0e 93 4e 44 4c 37 7b 68 0b 0f 0f 00 a4 01 ....NDL7{h...... 2a50: a0 0e 93 4e 44 4c 38 7b 68 0b 0f 0f 00 a4 01 a4 ...NDL8{h....... 2a60: 00 14 40 07 42 52 54 4e 09 a0 14 93 7b 44 49 44 ..@.BRTN....{DID 2a70: 31 0b 00 0f 00 0b 00 04 86 44 44 30 31 68 a0 14 1........DD01h.. 2a80: 93 7b 44 49 44 32 0b 00 0f 00 0b 00 04 86 44 44 .{DID2........DD 2a90: 30 32 68 a0 14 93 7b 44 49 44 33 0b 00 0f 00 0b 02h...{DID3..... 2aa0: 00 04 86 44 44 30 33 68 a0 14 93 7b 44 49 44 34 ...DD03h...{DID4 2ab0: 0b 00 0f 00 0b 00 04 86 44 44 30 34 68 a0 14 93 ........DD04h... 2ac0: 7b 44 49 44 35 0b 00 0f 00 0b 00 04 86 44 44 30 {DID5........DD0 2ad0: 35 68 10 24 5e 5e 50 43 49 30 5b 80 4d 43 48 50 5h.$^^PCI0[.MCHP 2ae0: 02 0a 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 ..@..[..MCHP..@0 2af0: 54 41 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 TASM...[.IGDP..@ 2b00: 0a c0 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 ..[.E.IGDP..@... 2b10: 47 49 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 GIVD...GUMA..... 2b20: 47 4d 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 GMFN....@FASLE.. 2b30: 18 47 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 .GSSE.GSSB.GSES. 2b40: 00 30 00 08 43 44 56 4c 05 00 03 00 18 4c 42 50 .0..CDVL.....LBP 2b50: 43 08 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 C..0ASLS [.IGDM. 2b60: 41 53 4c 42 0b 00 20 5b 81 4e 16 49 47 44 4d 00 ASLB.. [.N.IGDM. 2b70: 53 49 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 SIGN@.SIZE OVER 2b80: 53 56 45 52 40 10 56 56 45 52 40 08 47 56 45 52 SVER@.VVER@.GVER 2b90: 40 08 4d 42 4f 58 20 00 40 52 44 52 44 59 20 43 @.MBOX .@RDRDY C 2ba0: 53 54 53 20 43 45 56 54 20 00 40 0a 44 49 44 4c STS CEVT .@.DIDL 2bb0: 20 44 44 4c 32 20 44 44 4c 33 20 44 44 4c 34 20 DDL2 DDL3 DDL4 2bc0: 44 44 4c 35 20 44 44 4c 36 20 44 44 4c 37 20 44 DDL5 DDL6 DDL7 D 2bd0: 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 20 43 50 DL8 CPDL CPL2 CP 2be0: 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 43 50 4c L3 CPL4 CPL5 CPL 2bf0: 36 20 43 50 4c 37 20 43 50 4c 38 20 43 41 44 4c 6 CPL7 CPL8 CADL 2c00: 20 43 41 4c 32 20 43 41 4c 33 20 43 41 4c 34 20 CAL2 CAL3 CAL4 2c10: 43 41 4c 35 20 43 41 4c 36 20 43 41 4c 37 20 43 CAL5 CAL6 CAL7 C 2c20: 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 20 4e 44 AL8 NADL NDL2 ND 2c30: 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 4e 44 4c L3 NDL4 NDL5 NDL 2c40: 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 53 4c 50 6 NDL7 NDL8 ASLP 2c50: 20 54 49 44 58 20 43 48 50 44 20 43 4c 49 44 20 TIDX CHPD CLID 2c60: 43 44 43 4b 20 53 58 53 57 20 45 56 54 53 20 43 CDCK SXSW EVTS C 2c70: 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 43 49 45 NOT NRDY .@.SCIE 2c80: 01 47 45 46 43 04 47 58 46 43 03 47 45 53 46 08 .GEFC.GXFC.GESF. 2c90: 00 10 50 41 52 4d 20 44 53 4c 50 20 00 40 7a 41 ..PARM DSLP .@zA 2ca0: 52 44 59 20 41 53 4c 43 20 54 43 48 45 20 41 4c RDY ASLC TCHE AL 2cb0: 53 49 20 42 43 4c 50 20 50 46 49 54 20 43 42 4c SI BCLP PFIT CBL 2cc0: 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 00 40 5c V BCLM@.CPFM .@\ 2cd0: 47 56 44 31 80 00 0e 08 44 42 54 42 12 32 15 00 GVD1....DBTB.2.. 2ce0: 0a 07 0a 38 0b c0 01 0b 00 0e 0a 3f 0b c7 01 0b ...8.......?.... 2cf0: 07 0e 0b f8 01 0b 38 0e 0b c0 0f 00 00 00 00 00 ......8......... 2d00: 0b 00 70 0b 07 70 0b 38 70 0b c0 71 0b 00 7e 08 ..p..p.8p..q..~. 2d10: 43 44 43 54 12 23 03 12 0a 03 0a c8 0b 40 01 0b CDCT.#.......@.. 2d20: 90 01 12 0a 03 0a c8 0b 4d 01 0b 90 01 12 0a 03 ........M....... 2d30: 0a de 0b 4d 01 0b 7d 01 08 53 55 43 43 01 08 4e ...M..}..SUCC..N 2d40: 56 4c 44 0a 02 08 43 52 49 54 0a 04 08 4e 43 52 VLD...CRIT...NCR 2d50: 54 0a 06 14 4c 4a 47 53 43 49 08 14 44 1e 47 42 T...LJGSCI..D.GB 2d60: 44 41 08 a0 1a 93 47 45 53 46 00 70 0b 79 02 50 DA....GESF.p.y.P 2d70: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 1a ARMp.GESF.SUCC.. 2d80: 93 47 45 53 46 01 70 0b 40 02 50 41 52 4d 70 00 .GESF.p.@.PARMp. 2d90: 47 45 53 46 a4 53 55 43 43 a0 47 04 93 47 45 53 GESF.SUCC.G..GES 2da0: 46 0a 04 7b 50 41 52 4d 0c 00 00 ff ef 50 41 52 F..{PARM.....PAR 2db0: 4d 7b 50 41 52 4d 79 83 88 44 42 54 42 49 42 54 M{PARMy..DBTBIBT 2dc0: 54 00 0a 10 00 50 41 52 4d 7d 49 42 54 54 50 41 T....PARM}IBTTPA 2dd0: 52 4d 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 RMPARMp.GESF.SUC 2de0: 43 a0 4a 06 93 47 45 53 46 0a 05 70 49 50 53 43 C.J..GESF..pIPSC 2df0: 50 41 52 4d 7d 50 41 52 4d 79 49 50 41 54 0a 08 PARM}PARMyIPAT.. 2e00: 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 41 52 .PARMrPARM...PAR 2e10: 4d 7d 50 41 52 4d 79 4c 49 44 53 0a 10 00 50 41 M}PARMyLIDS...PA 2e20: 52 4d 72 50 41 52 4d 0c 00 00 01 00 50 41 52 4d RMrPARM.....PARM 2e30: 7d 50 41 52 4d 79 49 42 49 41 0a 14 00 50 41 52 }PARMyIBIA...PAR 2e40: 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 2d 93 47 Mp.GESF.SUCC.-.G 2e50: 45 53 46 0a 06 70 49 54 56 46 50 41 52 4d 7d 50 ESF..pITVFPARM}P 2e60: 41 52 4d 79 49 54 56 4d 0a 04 00 50 41 52 4d 70 ARMyITVM...PARMp 2e70: 00 47 45 53 46 a4 53 55 43 43 a0 4f 08 93 47 45 .GESF.SUCC.O..GE 2e80: 53 46 0a 07 70 47 49 56 44 50 41 52 4d 7f 50 41 SF..pGIVDPARM.PA 2e90: 52 4d 01 50 41 52 4d 7d 50 41 52 4d 79 47 4d 46 RM.PARM}PARMyGMF 2ea0: 4e 01 00 50 41 52 4d 7d 50 41 52 4d 0b 00 10 50 N..PARM}PARM...P 2eb0: 41 52 4d a0 16 49 44 4d 4d 7d 50 41 52 4d 79 49 ARM..IDMM}PARMyI 2ec0: 44 4d 53 0a 11 00 50 41 52 4d a1 12 7d 50 41 52 DMS...PARM..}PAR 2ed0: 4d 79 49 44 4d 53 0a 0d 00 50 41 52 4d 7d 79 83 MyIDMS...PARM}y. 2ee0: 88 83 88 43 44 43 54 48 56 43 4f 00 74 43 44 56 ...CDCTHVCO.tCDV 2ef0: 4c 01 00 00 0a 15 00 50 41 52 4d 50 41 52 4d 70 L......PARMPARMp 2f00: 01 47 45 53 46 a4 53 55 43 43 a0 2a 93 47 45 53 .GESF.SUCC.*.GES 2f10: 46 0a 0a 70 00 50 41 52 4d a0 10 49 53 53 43 7d F..p.PARM..ISSC} 2f20: 50 41 52 4d 0a 03 50 41 52 4d 70 00 47 45 53 46 PARM..PARMp.GESF 2f30: a4 53 55 43 43 70 00 47 45 53 46 a4 43 52 49 54 .SUCCp.GESF.CRIT 2f40: 14 41 28 53 42 43 42 08 a0 20 93 47 45 53 46 00 .A(SBCB.. .GESF. 2f50: 70 00 50 41 52 4d 70 0b 7d f7 50 41 52 4d 70 00 p.PARMp.}.PARMp. 2f60: 47 45 53 46 a4 53 55 43 43 a0 18 93 47 45 53 46 GESF.SUCC...GESF 2f70: 01 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 2f80: 43 43 a0 19 93 47 45 53 46 0a 03 70 00 47 45 53 CC...GESF..p.GES 2f90: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 Fp.PARM.SUCC...G 2fa0: 45 53 46 0a 04 70 00 47 45 53 46 70 00 50 41 52 ESF..p.GESFp.PAR 2fb0: 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 05 70 M.SUCC...GESF..p 2fc0: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 2fd0: a0 37 93 47 45 53 46 0a 06 70 7b 50 41 52 4d 0a .7.GESF..p{PARM. 2fe0: 0f 00 49 54 56 46 70 7a 7b 50 41 52 4d 0a f0 00 ..ITVFpz{PARM... 2ff0: 0a 04 00 49 54 56 4d 70 00 47 45 53 46 70 00 50 ...ITVMp.GESFp.P 3000: 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a ARM.SUCC...GESF. 3010: 07 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 .p.GESFp.PARM.SU 3020: 43 43 a0 19 93 47 45 53 46 0a 08 70 00 47 45 53 CC...GESF..p.GES 3030: 46 70 00 50 41 52 4d a4 53 55 43 43 a0 24 93 47 Fp.PARM.SUCC.$.G 3040: 45 53 46 0a 09 7b 50 41 52 4d 0a ff 49 42 54 54 ESF..{PARM..IBTT 3050: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 3060: 43 a0 46 05 93 47 45 53 46 0a 0a 7b 50 41 52 4d C.F..GESF..{PARM 3070: 0a ff 49 50 53 43 a0 21 7b 7a 50 41 52 4d 0a 08 ..IPSC.!{zPARM.. 3080: 00 0a ff 00 7b 7a 50 41 52 4d 0a 08 00 0a ff 49 ....{zPARM.....I 3090: 50 41 54 76 49 50 41 54 7b 7a 50 41 52 4d 0a 14 PATvIPAT{zPARM.. 30a0: 00 0a 07 49 42 49 41 70 00 47 45 53 46 70 00 50 ...IBIAp.GESFp.P 30b0: 41 52 4d a4 53 55 43 43 a0 40 06 93 47 45 53 46 ARM.SUCC.@..GESF 30c0: 0a 0b 7b 7a 50 41 52 4d 01 00 01 49 46 31 45 a0 ..{zPARM...IF1E. 30d0: 21 7b 50 41 52 4d 0c 00 e0 01 00 00 7b 7a 50 41 !{PARM......{zPA 30e0: 52 4d 0a 0d 00 0a 0f 49 44 4d 53 70 00 49 44 4d RM.....IDMSp.IDM 30f0: 4d a1 16 7b 7a 50 41 52 4d 0a 11 00 0a 0f 49 44 M..{zPARM.....ID 3100: 4d 53 70 01 49 44 4d 4d 70 00 47 45 53 46 70 00 MSp.IDMMp.GESFp. 3110: 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 PARM.SUCC...GESF 3120: 0a 10 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 ..p.GESFp.PARM.S 3130: 55 43 43 a0 1f 93 47 45 53 46 0a 11 7d 50 41 52 UCC...GESF..}PAR 3140: 4d 0b 00 01 50 41 52 4d 70 00 47 45 53 46 a4 53 M...PARMp.GESF.S 3150: 55 43 43 a0 49 04 93 47 45 53 46 0a 12 a0 26 7b UCC.I..GESF...&{ 3160: 50 41 52 4d 01 00 a0 10 93 7a 50 41 52 4d 01 00 PARM.....zPARM.. 3170: 01 70 01 49 53 53 43 a1 0c 70 00 47 45 53 46 a4 .p.ISSC..p.GESF. 3180: 43 52 49 54 a1 07 70 00 49 53 53 43 70 00 47 45 CRIT..p.ISSCp.GE 3190: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 SFp.PARM.SUCC... 31a0: 47 45 53 46 0a 13 70 00 47 45 53 46 70 00 50 41 GESF..p.GESFp.PA 31b0: 52 4d a4 53 55 43 43 70 00 47 45 53 46 a4 53 55 RM.SUCCp.GESF.SU 31c0: 43 43 a0 11 93 47 45 46 43 0a 04 70 47 42 44 41 CC...GEFC..pGBDA 31d0: 47 58 46 43 a0 11 93 47 45 46 43 0a 06 70 53 42 GXFC...GEFC..pSB 31e0: 43 42 47 58 46 43 70 00 47 45 46 43 70 01 53 43 CBGXFCp.GEFCp.SC 31f0: 49 53 70 00 47 53 53 45 70 00 53 43 49 45 a4 00 ISp.GSSEp.SCIE.. 3200: 14 19 50 44 52 44 00 a0 0c 92 44 52 44 59 5b 22 ..PDRD....DRDY[" 3210: 41 53 4c 50 a4 92 44 52 44 59 14 1d 50 53 54 53 ASLP..DRDY..PSTS 3220: 00 a0 0e 94 43 53 54 53 0a 02 5b 22 41 53 4c 50 ....CSTS..["ASLP 3230: a4 93 43 53 54 53 0a 03 14 47 06 47 4e 4f 54 02 ..CSTS...G.GNOT. 3240: a0 07 50 44 52 44 a4 01 a0 07 50 53 54 53 a4 01 ..PDRD....PSTS.. 3250: 70 68 43 45 56 54 70 0a 03 43 53 54 53 a0 2c 90 phCEVTp..CSTS.,. 3260: 93 43 48 50 44 00 93 69 00 a0 18 91 94 4f 53 59 .CHPD..i.....OSY 3270: 53 0b d0 07 95 4f 53 59 53 0b d6 07 86 50 43 49 S....OSYS....PCI 3280: 30 69 a1 07 86 47 46 58 30 69 86 47 46 58 30 0a 0i...GFX0i.GFX0. 3290: 80 a0 0c 92 50 53 54 53 70 00 43 45 56 54 a4 00 ....PSTSp.CEVT.. 32a0: 14 13 47 48 44 53 01 70 68 54 49 44 58 a4 47 4e ..GHDS.phTIDX.GN 32b0: 4f 54 01 00 14 14 47 4c 49 44 01 70 68 43 4c 49 OT....GLID.phCLI 32c0: 44 a4 47 4e 4f 54 0a 02 00 14 15 47 44 43 4b 01 D.GNOT.....GDCK. 32d0: 70 68 43 44 43 4b a4 47 4e 4f 54 0a 04 0a 80 14 phCDCK.GNOT..... 32e0: 19 50 41 52 44 00 a0 0c 92 41 52 44 59 5b 22 41 .PARD....ARDY["A 32f0: 53 4c 50 a4 92 41 52 44 59 14 46 0c 41 49 4e 54 SLP..ARDY.F.AINT 3300: 02 a0 0e 92 7b 54 43 48 45 79 01 68 00 00 a4 01 ....{TCHEy.h.... 3310: a0 07 50 41 52 44 a4 01 a0 4c 05 93 68 0a 02 a0 ..PARD...L..h... 3320: 33 43 50 46 4d a0 0e 93 43 50 46 4d 01 70 0a 06 3CPFM...CPFM.p.. 3330: 50 46 49 54 a0 0f 93 43 50 46 4d 0a 06 70 0a 08 PFIT...CPFM..p.. 3340: 50 46 49 54 a0 0e 93 43 50 46 4d 0a 08 70 01 50 PFIT...CPFM..p.P 3350: 46 49 54 a1 0c 7f 50 46 49 54 0a 07 50 46 49 54 FIT...PFIT..PFIT 3360: 7d 50 46 49 54 0c 00 00 00 80 50 46 49 54 70 0a }PFIT.....PFITp. 3370: 04 41 53 4c 43 a1 42 04 a0 28 93 68 01 70 78 77 .ASLC.B..(.h.pxw 3380: 69 0a ff 00 0a 64 00 00 42 43 4c 50 7d 42 43 4c i....d..BCLP}BCL 3390: 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 41 53 4c P.....BCLPp..ASL 33a0: 43 a1 16 a0 10 93 68 00 70 69 41 4c 53 49 70 01 C.....h.piALSIp. 33b0: 41 53 4c 43 a1 03 a4 01 70 00 4c 42 50 43 a4 00 ASLC....p.LBPC.. 33c0: 10 41 36 5c 00 5b 80 49 4f 5f 54 01 0b 00 08 0a .A6\.[.IO_T..... 33d0: 10 5b 81 0e 49 4f 5f 54 01 00 40 04 54 52 50 30 .[..IO_T..@.TRP0 33e0: 08 5b 80 50 4d 49 4f 01 0b 00 10 0a 80 5b 81 28 .[.PMIO......[.( 33f0: 50 4d 49 4f 01 00 40 15 00 08 00 02 41 43 50 57 PMIO..@.....ACPW 3400: 01 00 45 0b 00 01 47 50 45 43 01 00 4e 10 00 09 ..E...GPEC..N... 3410: 53 43 49 53 01 00 06 5b 80 47 50 49 4f 01 0b 80 SCIS...[.GPIO... 3420: 11 0a 3c 5b 81 40 0c 47 50 49 4f 01 47 55 30 30 ..<[.@.GPIO.GU00 3430: 08 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 .GU01.GU02.GU03. 3440: 47 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 GIO0.GIO1.GIO2.G 3450: 49 4f 33 08 00 20 47 4c 30 30 08 47 4c 30 31 08 IO3.. GL00.GL01. 3460: 47 4c 30 32 08 00 03 47 50 32 37 01 47 50 32 38 GL02...GP27.GP28 3470: 01 00 03 00 40 04 47 42 30 30 08 47 42 30 31 08 ....@.GB00.GB01. 3480: 47 42 30 32 08 47 42 30 33 08 00 40 08 47 49 56 GB02.GB03..@.GIV 3490: 30 08 00 03 4c 50 4f 4c 01 00 04 47 49 56 32 08 0...LPOL...GIV2. 34a0: 47 49 56 33 08 47 55 30 34 08 47 55 30 35 08 47 GIV3.GU04.GU05.G 34b0: 55 30 36 08 47 55 30 37 08 47 49 4f 34 08 47 49 U06.GU07.GIO4.GI 34c0: 4f 35 08 47 49 4f 36 08 47 49 4f 37 08 00 05 47 O5.GIO6.GIO7...G 34d0: 50 33 37 01 00 02 47 4c 30 35 08 47 4c 30 36 08 P37...GL05.GL06. 34e0: 47 4c 30 37 08 5b 80 52 43 52 42 00 0c 00 c0 d1 GL07.[.RCRB..... 34f0: fe 0b 00 40 5b 81 48 05 52 43 52 42 13 00 80 00 ...@[.H.RCRB.... 3500: 08 00 80 00 10 00 80 02 02 48 50 41 53 02 00 05 .........HPAS... 3510: 48 50 41 45 01 00 48 09 00 01 50 41 54 44 01 53 HPAE..H...PATD.S 3520: 41 54 44 01 53 4d 42 44 01 48 44 41 44 01 00 0b ATD.SMBD.HDAD... 3530: 52 50 31 44 01 52 50 32 44 01 52 50 33 44 01 52 RP1D.RP2D.RP3D.R 3540: 50 34 44 01 52 50 35 44 01 52 50 36 44 01 08 5f P4D.RP5D.RP6D.._ 3550: 53 30 5f 12 05 03 00 00 00 08 5f 53 33 5f 12 07 S0_......._S3_.. 3560: 03 0a 05 0a 05 00 08 5f 53 34 5f 12 07 03 0a 06 ......._S4_..... 3570: 0a 06 00 08 5f 53 35 5f 12 07 03 0a 07 0a 07 00 ...._S5_........ 3580: 14 45 04 47 45 54 50 09 a0 0e 93 7b 68 0a 09 00 .E.GETP....{h... 3590: 00 a4 0c ff ff ff ff a0 0d 93 7b 68 0a 09 00 0a ..........{h.... 35a0: 08 a4 0b 84 03 7a 7b 68 0b 00 03 00 0a 08 60 7a .....z{h......`z 35b0: 7b 68 0b 00 30 00 0a 0c 61 a4 77 0a 1e 74 0a 09 {h..0...a.w..t.. 35c0: 72 60 61 00 00 00 14 30 47 44 4d 41 0d a0 23 68 r`a....0GDMA..#h 35d0: a0 07 90 69 6c a4 0a 14 a0 0e 90 6a 6c a4 77 74 ...il......jl.wt 35e0: 0a 04 6b 00 0a 0f 00 a4 77 74 0a 04 6b 00 0a 1e ..k.....wt..k... 35f0: 00 a4 0c ff ff ff ff 14 1f 47 45 54 54 09 a4 77 .........GETT..w 3600: 0a 1e 74 0a 09 72 7b 7a 68 0a 02 00 0a 03 00 7b ..t..r{zh......{ 3610: 68 0a 03 00 00 00 00 14 44 06 47 45 54 46 0b 08 h.......D.GETF.. 3620: 54 4d 50 46 00 a0 0c 68 7d 54 4d 50 46 01 54 4d TMPF...h}TMPF.TM 3630: 50 46 a0 11 7b 6a 0a 02 00 7d 54 4d 50 46 0a 02 PF..{j...}TMPF.. 3640: 54 4d 50 46 a0 0d 69 7d 54 4d 50 46 0a 04 54 4d TMPF..i}TMPF..TM 3650: 50 46 a0 11 7b 6a 0a 20 00 7d 54 4d 50 46 0a 08 PF..{j. .}TMPF.. 3660: 54 4d 50 46 a0 12 7b 6a 0b 00 40 00 7d 54 4d 50 TMPF..{j..@.}TMP 3670: 46 0a 10 54 4d 50 46 a4 54 4d 50 46 14 3d 53 45 F..TMPF.TMPF.=SE 3680: 54 50 0b a0 08 94 68 0a f0 a4 0a 08 a1 2d a0 27 TP....h......-.' 3690: 7b 69 0a 02 00 a0 10 90 92 94 68 0a 78 7b 6a 0a {i........h.x{j. 36a0: 02 00 a4 0b 01 23 a0 0f 90 92 94 68 0a b4 7b 6a .....#.....h..{j 36b0: 01 00 a4 0b 01 21 a4 0b 01 10 14 37 53 44 4d 41 .....!.....7SDMA 36c0: 09 a0 08 92 94 68 0a 14 a4 01 a0 09 92 94 68 0a .....h........h. 36d0: 1e a4 0a 02 a0 08 92 94 68 0a 2d a4 01 a0 09 92 ........h.-..... 36e0: 94 68 0a 3c a4 0a 02 a0 08 92 94 68 0a 5a a4 01 .h.<.......h.Z.. 36f0: a4 00 14 2f 53 45 54 54 0b a0 25 7b 69 0a 02 00 .../SETT..%{i... 3700: a0 0f 90 92 94 68 0a 78 7b 6a 0a 02 00 a4 0a 0b .....h.x{j...... 3710: a0 0e 90 92 94 68 0a b4 7b 6a 01 00 a4 0a 09 a4 .....h..{j...... 3720: 0a 04 5b 82 4b 04 48 44 45 46 08 5f 41 44 52 0c ..[.K.HDEF._ADR. 3730: 00 00 1b 00 5b 80 48 44 41 52 02 0a 4c 0a 10 5b ....[.HDAR..L..[ 3740: 81 22 48 44 41 52 02 44 43 4b 41 01 00 07 44 43 ."HDAR.DCKA...DC 3750: 4b 4d 01 00 06 44 43 4b 53 01 00 30 00 0f 50 4d KM...DCKS..0..PM 3760: 45 53 01 08 5f 50 52 57 12 06 02 0a 0d 0a 03 5b ES.._PRW.......[ 3770: 82 41 10 52 50 30 31 08 5f 41 44 52 0c 00 00 1c .A.RP01._ADR.... 3780: 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 45 04 .[.PXCS..@..[.E. 3790: 50 58 43 53 40 00 40 09 00 0d 4c 41 53 58 01 00 PXCS@.@...LASX.. 37a0: 32 41 42 50 58 01 00 02 50 44 43 58 01 00 02 50 2ABPX...PDCX...P 37b0: 44 53 58 01 00 01 4c 53 43 58 01 00 27 00 10 50 DSX...LSCX..'..P 37c0: 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 01 50 4d SPX..O<..HPSX.PM 37d0: 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 44 52 00 SX.[..PXSX._ADR. 37e0: 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 a4 12 .A._PRT..3GPIC.. 37f0: 2c 04 12 09 04 0b ff ff 00 00 0a 10 12 09 04 0b ,............... 3800: ff ff 01 00 0a 11 12 0a 04 0b ff ff 0a 02 00 0a ................ 3810: 12 12 0a 04 0b ff ff 0a 03 00 0a 13 a1 45 05 a4 .............E.. 3820: 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e 4c 50 .A.........^^.LP 3830: 43 42 4c 4e 4b 41 00 12 12 04 0b ff ff 01 5e 5e CBLNKA........^^ 3840: 2e 4c 50 43 42 4c 4e 4b 42 00 12 13 04 0b ff ff .LPCBLNKB....... 3850: 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 ..^^.LPCBLNKC... 3860: 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c 4e 4b ......^^.LPCBLNK 3870: 44 00 5b 82 41 10 52 50 30 32 08 5f 41 44 52 0c D.[.A.RP02._ADR. 3880: 01 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a c0 5b ....[.PXCS..@..[ 3890: 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c 41 53 .E.PXCS@.@...LAS 38a0: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 38b0: 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 ..PDSX...LSCX..' 38c0: 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 53 58 ..PSPX..O<..HPSX 38d0: 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 08 5f 41 .PMSX.[..PXSX._A 38e0: 44 52 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 DR..A._PRT..3GPI 38f0: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 11 12 C..,............ 3900: 09 04 0b ff ff 01 00 0a 12 12 0a 04 0b ff ff 0a ................ 3910: 02 00 0a 13 12 0a 04 0b ff ff 0a 03 00 0a 10 a1 ................ 3920: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3930: 2e 4c 50 43 42 4c 4e 4b 42 00 12 12 04 0b ff ff .LPCBLNKB....... 3940: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 43 00 12 13 04 .^^.LPCBLNKC.... 3950: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 .....^^.LPCBLNKD 3960: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3970: 4c 4e 4b 41 00 5b 82 4d 11 52 50 30 33 08 5f 41 LNKA.[.M.RP03._A 3980: 44 52 0c 02 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3990: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 39a0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 39b0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 39c0: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 39d0: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 39e0: 08 5f 41 44 52 00 08 2e 50 58 53 58 5f 52 4d 56 ._ADR...PXSX_RMV 39f0: 01 08 2e 50 58 53 58 5f 50 52 57 12 06 02 0a 09 ...PXSX_PRW..... 3a00: 0a 03 14 41 09 5f 50 52 54 00 a0 33 47 50 49 43 ...A._PRT..3GPIC 3a10: a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 12 12 09 ..,............. 3a20: 04 0b ff ff 01 00 0a 13 12 0a 04 0b ff ff 0a 02 ................ 3a30: 00 0a 10 12 0a 04 0b ff ff 0a 03 00 0a 11 a1 45 ...............E 3a40: 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e 2e ...A.........^^. 3a50: 4c 50 43 42 4c 4e 4b 43 00 12 12 04 0b ff ff 01 LPCBLNKC........ 3a60: 5e 5e 2e 4c 50 43 42 4c 4e 4b 44 00 12 13 04 0b ^^.LPCBLNKD..... 3a70: ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 ....^^.LPCBLNKA. 3a80: 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3a90: 4e 4b 42 00 5b 82 4f 11 52 50 30 34 08 5f 41 44 NKB.[.O.RP04._AD 3aa0: 52 0c 03 00 1c 00 5b 80 50 58 43 53 02 0a 40 0a R.....[.PXCS..@. 3ab0: c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d 4c .[.E.PXCS@.@...L 3ac0: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 3ad0: 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 X...PDSX...LSCX. 3ae0: 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 50 .'..PSPX..O<..HP 3af0: 53 58 01 50 4d 53 58 01 5b 82 29 50 58 53 58 08 SX.PMSX.[.)PXSX. 3b00: 5f 41 44 52 00 14 1d 5f 50 52 57 00 a0 0d 57 4b _ADR..._PRW...WK 3b10: 4c 4e a4 12 06 02 0a 09 0a 03 a1 08 a4 12 05 02 LN.............. 3b20: 0a 09 00 14 41 09 5f 50 52 54 00 a0 33 47 50 49 ....A._PRT..3GPI 3b30: 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 0a 13 12 C..,............ 3b40: 09 04 0b ff ff 01 00 0a 10 12 0a 04 0b ff ff 0a ................ 3b50: 02 00 0a 11 12 0a 04 0b ff ff 0a 03 00 0a 12 a1 ................ 3b60: 45 05 a4 12 41 05 04 12 12 04 0b ff ff 00 5e 5e E...A.........^^ 3b70: 2e 4c 50 43 42 4c 4e 4b 44 00 12 12 04 0b ff ff .LPCBLNKD....... 3b80: 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 13 04 .^^.LPCBLNKA.... 3b90: 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 .....^^.LPCBLNKB 3ba0: 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 42 .........^^.LPCB 3bb0: 4c 4e 4b 43 00 5b 82 41 10 52 50 30 35 08 5f 41 LNKC.[.A.RP05._A 3bc0: 44 52 0c 04 00 1c 00 5b 80 50 58 43 53 02 0a 40 DR.....[.PXCS..@ 3bd0: 0a c0 5b 81 45 04 50 58 43 53 40 00 40 09 00 0d ..[.E.PXCS@.@... 3be0: 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 LASX..2ABPX...PD 3bf0: 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 CX...PDSX...LSCX 3c00: 01 00 27 00 10 50 53 50 58 01 00 4f 3c 00 1e 48 ..'..PSPX..O<..H 3c10: 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 58 53 58 PSX.PMSX.[..PXSX 3c20: 08 5f 41 44 52 00 14 41 09 5f 50 52 54 00 a0 33 ._ADR..A._PRT..3 3c30: 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ff 00 00 GPIC..,......... 3c40: 0a 10 12 09 04 0b ff ff 01 00 0a 11 12 0a 04 0b ................ 3c50: ff ff 0a 02 00 0a 12 12 0a 04 0b ff ff 0a 03 00 ................ 3c60: 0a 13 a1 45 05 a4 12 41 05 04 12 12 04 0b ff ff ...E...A........ 3c70: 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 41 00 12 12 04 .^^.LPCBLNKA.... 3c80: 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3c90: 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 43 42 4c ........^^.LPCBL 3ca0: 4e 4b 43 00 12 13 04 0b ff ff 0a 03 5e 5e 2e 4c NKC.........^^.L 3cb0: 50 43 42 4c 4e 4b 44 00 5b 82 41 10 52 50 30 36 PCBLNKD.[.A.RP06 3cc0: 08 5f 41 44 52 0c 05 00 1c 00 5b 80 50 58 43 53 ._ADR.....[.PXCS 3cd0: 02 0a 40 0a c0 5b 81 45 04 50 58 43 53 40 00 40 ..@..[.E.PXCS@.@ 3ce0: 09 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 ...LASX..2ABPX.. 3cf0: 02 50 44 43 58 01 00 02 50 44 53 58 01 00 01 4c .PDCX...PDSX...L 3d00: 53 43 58 01 00 27 00 10 50 53 50 58 01 00 4f 3c SCX..'..PSPX..O< 3d10: 00 1e 48 50 53 58 01 50 4d 53 58 01 5b 82 0b 50 ..HPSX.PMSX.[..P 3d20: 58 53 58 08 5f 41 44 52 00 14 41 09 5f 50 52 54 XSX._ADR..A._PRT 3d30: 00 a0 33 47 50 49 43 a4 12 2c 04 12 09 04 0b ff ..3GPIC..,...... 3d40: ff 00 00 0a 11 12 09 04 0b ff ff 01 00 0a 12 12 ................ 3d50: 0a 04 0b ff ff 0a 02 00 0a 13 12 0a 04 0b ff ff ................ 3d60: 0a 03 00 0a 10 a1 45 05 a4 12 41 05 04 12 12 04 ......E...A..... 3d70: 0b ff ff 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 42 00 ....^^.LPCBLNKB. 3d80: 12 12 04 0b ff ff 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 3d90: 4b 43 00 12 13 04 0b ff ff 0a 02 5e 5e 2e 4c 50 KC.........^^.LP 3da0: 43 42 4c 4e 4b 44 00 12 13 04 0b ff ff 0a 03 5e CBLNKD.........^ 3db0: 5e 2e 4c 50 43 42 4c 4e 4b 41 00 5b 82 4d 06 55 ^.LPCBLNKA.[.M.U 3dc0: 53 42 31 08 5f 41 44 52 0c 00 00 1d 00 5b 80 55 SB1._ADR.....[.U 3dd0: 31 43 53 02 0a c4 0a 04 5b 81 0b 55 31 43 53 03 1CS.....[..U1CS. 3de0: 55 31 45 4e 02 08 5f 50 52 57 12 06 02 0a 03 0a U1EN.._PRW...... 3df0: 03 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 ..$_PSW...hp.ACP 3e00: 57 a0 0c 41 43 50 57 70 0a 03 55 31 45 4e a1 07 W..ACPWp..U1EN.. 3e10: 70 00 55 31 45 4e 14 09 5f 53 33 44 00 a4 0a 02 p.U1EN.._S3D.... 3e20: 14 09 5f 53 34 44 00 a4 0a 02 5b 82 4c 06 55 53 .._S4D....[.L.US 3e30: 42 32 08 5f 41 44 52 0c 01 00 1d 00 5b 80 55 32 B2._ADR.....[.U2 3e40: 43 53 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 CS.....[..U2CS.U 3e50: 32 45 4e 02 08 5f 50 52 57 12 06 02 0a 04 0a 03 2EN.._PRW....... 3e60: 14 23 5f 50 53 57 01 a0 14 68 70 01 41 43 50 57 .#_PSW...hp.ACPW 3e70: a0 0b 41 43 50 57 70 01 55 32 45 4e a1 07 70 00 ..ACPWp.U2EN..p. 3e80: 55 32 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 U2EN.._S3D...... 3e90: 5f 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 33 _S4D....[.M.USB3 3ea0: 08 5f 41 44 52 0c 02 00 1d 00 5b 80 55 32 43 53 ._ADR.....[.U2CS 3eb0: 02 0a c4 0a 04 5b 81 0b 55 32 43 53 03 55 33 45 .....[..U2CS.U3E 3ec0: 4e 02 08 5f 50 52 57 12 06 02 0a 0c 0a 03 14 24 N.._PRW........$ 3ed0: 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c _PSW...hp.ACPW.. 3ee0: 41 43 50 57 70 0a 03 55 33 45 4e a1 07 70 00 55 ACPWp..U3EN..p.U 3ef0: 33 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 3EN.._S3D......_ 3f00: 53 34 44 00 a4 0a 02 5b 82 4d 06 55 53 42 34 08 S4D....[.M.USB4. 3f10: 5f 41 44 52 0c 00 00 1a 00 5b 80 55 34 43 53 02 _ADR.....[.U4CS. 3f20: 0a c4 0a 04 5b 81 0b 55 34 43 53 03 55 34 45 4e ....[..U4CS.U4EN 3f30: 02 08 5f 50 52 57 12 06 02 0a 0e 0a 03 14 24 5f .._PRW........$_ 3f40: 50 53 57 01 a0 15 68 70 01 41 43 50 57 a0 0c 41 PSW...hp.ACPW..A 3f50: 43 50 57 70 0a 03 55 34 45 4e a1 07 70 00 55 34 CPWp..U4EN..p.U4 3f60: 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 EN.._S3D......_S 3f70: 34 44 00 a4 0a 02 5b 82 41 06 55 53 42 35 08 5f 4D....[.A.USB5._ 3f80: 41 44 52 0c 01 00 1a 00 5b 80 55 35 43 53 02 0a ADR.....[.U5CS.. 3f90: c4 0a 04 5b 81 0b 55 35 43 53 03 55 35 45 4e 02 ...[..U5CS.U5EN. 3fa0: 14 24 5f 50 53 57 01 a0 15 68 70 01 41 43 50 57 .$_PSW...hp.ACPW 3fb0: a0 0c 41 43 50 57 70 0a 03 55 35 45 4e a1 07 70 ..ACPWp..U5EN..p 3fc0: 00 55 35 45 4e 14 09 5f 53 33 44 00 a4 0a 02 14 .U5EN.._S3D..... 3fd0: 09 5f 53 34 44 00 a4 0a 02 5b 82 4b 0a 45 48 43 ._S4D....[.K.EHC 3fe0: 31 08 5f 41 44 52 0c 07 00 1d 00 5b 80 55 37 43 1._ADR.....[.U7C 3ff0: 53 02 0a 54 0a 04 5b 81 0d 55 37 43 53 03 00 0f S..T..[..U7CS... 4000: 50 4d 45 53 01 5b 82 4f 05 48 55 42 37 08 5f 41 PMES.[.O.HUB7._A 4010: 44 52 00 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 DR.[..PRT1._ADR. 4020: 5b 82 0c 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 [..PRT2._ADR..[. 4030: 0c 50 52 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 .PRT3._ADR..[..P 4040: 52 54 34 08 5f 41 44 52 0a 04 5b 82 0c 50 52 54 RT4._ADR..[..PRT 4050: 35 08 5f 41 44 52 0a 05 5b 82 0c 50 52 54 36 08 5._ADR..[..PRT6. 4060: 5f 41 44 52 0a 06 08 5f 50 52 57 12 06 02 0a 0d _ADR..._PRW..... 4070: 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f 53 ...._S3D......_S 4080: 34 44 00 a4 0a 02 5b 82 4f 08 45 48 43 32 08 5f 4D....[.O.EHC2._ 4090: 41 44 52 0c 07 00 1a 00 5b 80 55 46 43 53 02 0a ADR.....[.UFCS.. 40a0: 54 0a 04 5b 81 0d 55 46 43 53 03 00 0f 50 4d 45 T..[..UFCS...PME 40b0: 53 01 5b 82 43 04 48 55 42 37 08 5f 41 44 52 00 S.[.C.HUB7._ADR. 40c0: 5b 82 0b 50 52 54 31 08 5f 41 44 52 01 5b 82 0c [..PRT1._ADR.[.. 40d0: 50 52 54 32 08 5f 41 44 52 0a 02 5b 82 0c 50 52 PRT2._ADR..[..PR 40e0: 54 33 08 5f 41 44 52 0a 03 5b 82 0c 50 52 54 34 T3._ADR..[..PRT4 40f0: 08 5f 41 44 52 0a 04 08 5f 50 52 57 12 06 02 0a ._ADR..._PRW.... 4100: 0d 0a 03 14 09 5f 53 33 44 00 a4 0a 02 14 09 5f ....._S3D......_ 4110: 53 34 44 00 a4 0a 02 5b 82 4a 06 50 43 49 42 08 S4D....[.J.PCIB. 4120: 5f 41 44 52 0c 00 00 1e 00 14 49 05 5f 50 52 54 _ADR......I._PRT 4130: 00 a0 21 47 50 49 43 a4 12 1a 02 12 0b 04 0c ff ..!GPIC......... 4140: ff 06 00 00 00 0a 16 12 0b 04 0c ff ff 06 00 01 ................ 4150: 00 0a 17 a1 2f a4 12 2c 02 12 14 04 0c ff ff 06 ..../..,........ 4160: 00 00 5e 5e 2e 4c 50 43 42 4c 4e 4b 47 00 12 14 ..^^.LPCBLNKG... 4170: 04 0c ff ff 06 00 01 5e 5e 2e 4c 50 43 42 4c 4e .......^^.LPCBLN 4180: 4b 48 00 5b 82 8d 2e 01 4c 50 43 42 08 5f 41 44 KH.[....LPCB._AD 4190: 52 0c 00 00 1f 00 5b 80 4c 50 43 30 02 0a 40 0a R.....[.LPC0..@. 41a0: c0 5b 81 4d 07 4c 50 43 30 00 00 40 10 50 41 52 .[.M.LPC0..@.PAR 41b0: 43 08 50 42 52 43 08 50 43 52 43 08 50 44 52 43 C.PBRC.PCRC.PDRC 41c0: 08 00 20 50 45 52 43 08 50 46 52 43 08 50 47 52 .. PERC.PFRC.PGR 41d0: 43 08 50 48 52 43 08 00 40 0a 43 4d 41 52 03 00 C.PHRC..@.CMAR.. 41e0: 01 43 4d 42 52 03 00 01 4c 50 54 52 02 00 06 43 .CMBR...LPTR...C 41f0: 4d 41 44 01 43 4d 42 44 01 4c 50 54 44 01 46 44 MAD.CMBD.LPTD.FD 4200: 44 44 01 00 2c 49 4f 52 32 10 00 02 4c 47 52 4d DD..,IOR2...LGRM 4210: 06 00 48 32 52 41 45 4e 01 00 0d 52 43 42 41 12 ..H2RAEN...RCBA. 4220: 5b 80 53 4d 49 30 01 0c 00 fe 00 00 0c 02 00 00 [.SMI0.......... 4230: 00 5b 81 0b 53 4d 49 30 00 53 4d 49 43 08 5b 80 .[..SMI0.SMIC.[. 4240: 53 4d 49 31 00 0c bd 2e 6e bf 0c 90 00 00 00 5b SMI1....n......[ 4250: 81 16 53 4d 49 31 00 42 43 4d 44 08 44 49 44 5f ..SMI1.BCMD.DID_ 4260: 20 49 4e 46 4f 40 40 5b 81 15 53 4d 49 31 00 01 INFO@@[..SMI1.. 4270: 01 00 00 28 49 4e 46 5f 08 49 4e 46 31 20 5b 01 ...(INF_.INF1 [. 4280: 50 53 4d 58 00 14 27 50 48 53 53 01 5b 23 50 53 PSMX..'PHSS.[#PS 4290: 4d 58 ff ff 70 0a 80 42 43 4d 44 70 68 44 49 44 MX..p..BCMDphDID 42a0: 5f 70 00 53 4d 49 43 5b 27 50 53 4d 58 5b 82 41 _p.SMIC['PSMX[.A 42b0: 0a 4c 4e 4b 41 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKA._HID.A.... 42c0: 5f 55 49 44 01 14 0d 5f 44 49 53 08 70 0a 80 50 _UID..._DIS.p..P 42d0: 41 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ARC._PRS....#... 42e0: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 41 11 09 y..8_CRS..RTLA.. 42f0: 0a 06 23 00 00 18 79 00 8b 52 54 4c 41 01 49 52 ..#...y..RTLA.IR 4300: 51 30 70 00 49 52 51 30 79 01 7b 50 41 52 43 0a Q0p.IRQ0y.{PARC. 4310: 0f 00 49 52 51 30 a4 52 54 4c 41 14 1b 5f 53 52 ..IRQ0.RTLA.._SR 4320: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 4330: 60 70 60 50 41 52 43 14 18 5f 53 54 41 08 a0 0c `p`PARC.._STA... 4340: 7b 50 41 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PARC........... 4350: 5b 82 42 0a 4c 4e 4b 42 08 5f 48 49 44 0c 41 d0 [.B.LNKB._HID.A. 4360: 0c 0f 08 5f 55 49 44 0a 02 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4370: 70 0a 80 50 42 52 43 08 5f 50 52 53 11 09 0a 06 p..PBRC._PRS.... 4380: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4390: 4c 42 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LB....#...y..RTL 43a0: 42 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 B.IRQ0p.IRQ0y.{P 43b0: 42 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 42 14 BRC...IRQ0.RTLB. 43c0: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 43d0: 51 30 60 76 60 70 60 50 42 52 43 14 18 5f 53 54 Q0`v`p`PBRC.._ST 43e0: 41 08 a0 0c 7b 50 42 52 43 0a 80 00 a4 0a 09 a1 A...{PBRC....... 43f0: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 43 08 5f 48 49 ....[.B.LNKC._HI 4400: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 03 14 0d 5f D.A...._UID...._ 4410: 44 49 53 08 70 0a 80 50 43 52 43 08 5f 50 52 53 DIS.p..PCRC._PRS 4420: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 4430: 08 08 52 54 4c 43 11 09 0a 06 23 00 00 18 79 00 ..RTLC....#...y. 4440: 8b 52 54 4c 43 01 49 52 51 30 70 00 49 52 51 30 .RTLC.IRQ0p.IRQ0 4450: 79 01 7b 50 43 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PCRC...IRQ0.R 4460: 54 4c 43 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLC.._SRS..h.IRQ 4470: 30 82 49 52 51 30 60 76 60 70 60 50 43 52 43 14 0.IRQ0`v`p`PCRC. 4480: 18 5f 53 54 41 08 a0 0c 7b 50 43 52 43 0a 80 00 ._STA...{PCRC... 4490: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 44 ........[.B.LNKD 44a0: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 44b0: 04 14 0d 5f 44 49 53 08 70 0a 80 50 44 52 43 08 ..._DIS.p..PDRC. 44c0: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 44d0: 5f 43 52 53 08 08 52 54 4c 44 11 09 0a 06 23 00 _CRS..RTLD....#. 44e0: 00 18 79 00 8b 52 54 4c 44 01 49 52 51 30 70 00 ..y..RTLD.IRQ0p. 44f0: 49 52 51 30 79 01 7b 50 44 52 43 0a 0f 00 49 52 IRQ0y.{PDRC...IR 4500: 51 30 a4 52 54 4c 44 14 1b 5f 53 52 53 09 8b 68 Q0.RTLD.._SRS..h 4510: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 4520: 44 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 44 52 DRC.._STA...{PDR 4530: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a C...........[.B. 4540: 4c 4e 4b 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f LNKE._HID.A...._ 4550: 55 49 44 0a 05 14 0d 5f 44 49 53 08 70 0a 80 50 UID...._DIS.p..P 4560: 45 52 43 08 5f 50 52 53 11 09 0a 06 23 fa d4 18 ERC._PRS....#... 4570: 79 00 14 38 5f 43 52 53 08 08 52 54 4c 45 11 09 y..8_CRS..RTLE.. 4580: 0a 06 23 00 00 18 79 00 8b 52 54 4c 45 01 49 52 ..#...y..RTLE.IR 4590: 51 30 70 00 49 52 51 30 79 01 7b 50 45 52 43 0a Q0p.IRQ0y.{PERC. 45a0: 0f 00 49 52 51 30 a4 52 54 4c 45 14 1b 5f 53 52 ..IRQ0.RTLE.._SR 45b0: 53 09 8b 68 01 49 52 51 30 82 49 52 51 30 60 76 S..h.IRQ0.IRQ0`v 45c0: 60 70 60 50 45 52 43 14 18 5f 53 54 41 08 a0 0c `p`PERC.._STA... 45d0: 7b 50 45 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b {PERC........... 45e0: 5b 82 42 0a 4c 4e 4b 46 08 5f 48 49 44 0c 41 d0 [.B.LNKF._HID.A. 45f0: 0c 0f 08 5f 55 49 44 0a 06 14 0d 5f 44 49 53 08 ..._UID...._DIS. 4600: 70 0a 80 50 46 52 43 08 5f 50 52 53 11 09 0a 06 p..PFRC._PRS.... 4610: 23 fa d8 18 79 00 14 38 5f 43 52 53 08 08 52 54 #...y..8_CRS..RT 4620: 4c 46 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c LF....#...y..RTL 4630: 46 01 49 52 51 30 70 00 49 52 51 30 79 01 7b 50 F.IRQ0p.IRQ0y.{P 4640: 46 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 46 14 FRC...IRQ0.RTLF. 4650: 1b 5f 53 52 53 09 8b 68 01 49 52 51 30 82 49 52 ._SRS..h.IRQ0.IR 4660: 51 30 60 76 60 70 60 50 46 52 43 14 18 5f 53 54 Q0`v`p`PFRC.._ST 4670: 41 08 a0 0c 7b 50 46 52 43 0a 80 00 a4 0a 09 a1 A...{PFRC....... 4680: 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 47 08 5f 48 49 ....[.B.LNKG._HI 4690: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 0d 5f D.A...._UID...._ 46a0: 44 49 53 08 70 0a 80 50 47 52 43 08 5f 50 52 53 DIS.p..PGRC._PRS 46b0: 11 09 0a 06 23 fa d4 18 79 00 14 38 5f 43 52 53 ....#...y..8_CRS 46c0: 08 08 52 54 4c 47 11 09 0a 06 23 00 00 18 79 00 ..RTLG....#...y. 46d0: 8b 52 54 4c 47 01 49 52 51 30 70 00 49 52 51 30 .RTLG.IRQ0p.IRQ0 46e0: 79 01 7b 50 47 52 43 0a 0f 00 49 52 51 30 a4 52 y.{PGRC...IRQ0.R 46f0: 54 4c 47 14 1b 5f 53 52 53 09 8b 68 01 49 52 51 TLG.._SRS..h.IRQ 4700: 30 82 49 52 51 30 60 76 60 70 60 50 47 52 43 14 0.IRQ0`v`p`PGRC. 4710: 18 5f 53 54 41 08 a0 0c 7b 50 47 52 43 0a 80 00 ._STA...{PGRC... 4720: a4 0a 09 a1 04 a4 0a 0b 5b 82 42 0a 4c 4e 4b 48 ........[.B.LNKH 4730: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 4740: 08 14 0d 5f 44 49 53 08 70 0a 80 50 48 52 43 08 ..._DIS.p..PHRC. 4750: 5f 50 52 53 11 09 0a 06 23 fa d8 18 79 00 14 38 _PRS....#...y..8 4760: 5f 43 52 53 08 08 52 54 4c 48 11 09 0a 06 23 00 _CRS..RTLH....#. 4770: 00 18 79 00 8b 52 54 4c 48 01 49 52 51 30 70 00 ..y..RTLH.IRQ0p. 4780: 49 52 51 30 79 01 7b 50 48 52 43 0a 0f 00 49 52 IRQ0y.{PHRC...IR 4790: 51 30 a4 52 54 4c 48 14 1b 5f 53 52 53 09 8b 68 Q0.RTLH.._SRS..h 47a0: 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 50 .IRQ0.IRQ0`v`p`P 47b0: 48 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 48 52 HRC.._STA...{PHR 47c0: 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 3d 44 C...........[.=D 47d0: 4d 41 43 08 5f 48 49 44 0c 41 d0 02 00 08 5f 43 MAC._HID.A...._C 47e0: 52 53 11 28 0a 25 47 01 00 00 00 00 01 20 47 01 RS.(.%G...... G. 47f0: 81 00 81 00 01 11 47 01 93 00 93 00 01 0d 47 01 ......G.......G. 4800: c0 00 c0 00 01 20 2a 10 01 79 00 5b 82 26 46 57 ..... *..y.[.&FW 4810: 48 44 08 5f 48 49 44 0c 25 d4 08 00 08 5f 43 52 HD._HID.%...._CR 4820: 53 11 11 0a 0e 86 09 00 00 00 00 00 ff 00 00 00 S............... 4830: 01 79 00 5b 82 40 0b 48 50 45 54 08 5f 48 49 44 .y.[.@.HPET._HID 4840: 0c 41 d0 01 03 08 5f 43 49 44 0c 41 d0 0c 01 08 .A...._CID.A.... 4850: 42 55 46 30 11 11 0a 0e 86 09 00 00 00 00 d0 fe BUF0............ 4860: 00 04 00 00 79 00 14 27 5f 53 54 41 00 a0 13 92 ....y..'_STA.... 4870: 95 4f 53 59 53 0b d1 07 a0 08 48 50 41 45 a4 0a .OSYS.....HPAE.. 4880: 0f a1 0a a0 08 48 50 41 45 a4 0a 0b a4 00 14 46 .....HPAE......F 4890: 05 5f 43 52 53 08 a0 49 04 48 50 41 45 8a 42 55 ._CRS..I.HPAE.BU 48a0: 46 30 0a 04 48 50 54 30 a0 11 93 48 50 41 53 01 F0..HPT0...HPAS. 48b0: 70 0c 00 10 d0 fe 48 50 54 30 a0 12 93 48 50 41 p.....HPT0...HPA 48c0: 53 0a 02 70 0c 00 20 d0 fe 48 50 54 30 a0 12 93 S..p.. ..HPT0... 48d0: 48 50 41 53 0a 03 70 0c 00 30 d0 fe 48 50 54 30 HPAS..p..0..HPT0 48e0: a4 42 55 46 30 5b 82 45 0a 49 50 49 43 08 5f 48 .BUF0[.E.IPIC._H 48f0: 49 44 0b 41 d0 08 5f 43 52 53 11 41 09 0a 8d 47 ID.A.._CRS.A...G 4900: 01 20 00 20 00 01 02 47 01 24 00 24 00 01 02 47 . . ...G.$.$...G 4910: 01 28 00 28 00 01 02 47 01 2c 00 2c 00 01 02 47 .(.(...G.,.,...G 4920: 01 30 00 30 00 01 02 47 01 34 00 34 00 01 02 47 .0.0...G.4.4...G 4930: 01 38 00 38 00 01 02 47 01 3c 00 3c 00 01 02 47 .8.8...G.<.<...G 4940: 01 a0 00 a0 00 01 02 47 01 a4 00 a4 00 01 02 47 .......G.......G 4950: 01 a8 00 a8 00 01 02 47 01 ac 00 ac 00 01 02 47 .......G.......G 4960: 01 b0 00 b0 00 01 02 47 01 b4 00 b4 00 01 02 47 .......G.......G 4970: 01 b8 00 b8 00 01 02 47 01 bc 00 bc 00 01 02 47 .......G.......G 4980: 01 d0 04 d0 04 01 02 22 04 00 79 00 5b 82 25 4d ......."..y.[.%M 4990: 41 54 48 08 5f 48 49 44 0c 41 d0 0c 04 08 5f 43 ATH._HID.A...._C 49a0: 52 53 11 10 0a 0d 47 01 f0 00 f0 00 01 01 22 00 RS....G.......". 49b0: 20 79 00 5b 82 4b 09 4c 44 52 43 08 5f 48 49 44 y.[.K.LDRC._HID 49c0: 0c 41 d0 0c 02 08 5f 55 49 44 0a 02 08 5f 43 52 .A...._UID..._CR 49d0: 53 11 4e 07 0a 7a 47 01 2e 00 2e 00 01 02 47 01 S.N..zG.......G. 49e0: 4e 00 4e 00 01 02 47 01 61 00 61 00 01 01 47 01 N.N...G.a.a...G. 49f0: 63 00 63 00 01 01 47 01 65 00 65 00 01 01 47 01 c.c...G.e.e...G. 4a00: 67 00 67 00 01 01 47 01 80 00 80 00 01 01 47 01 g.g...G.......G. 4a10: 92 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 ......G.......G. 4a20: 80 06 80 06 01 20 47 01 00 08 00 08 01 10 47 01 ..... G.......G. 4a30: 00 10 00 10 01 80 47 01 80 11 80 11 01 40 47 01 ......G......@G. 4a40: 00 fe 00 fe 01 01 47 01 00 ff 00 ff 01 80 79 00 ......G.......y. 4a50: 5b 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b [.%RTC_._HID.A.. 4a60: 00 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 .._CRS....G.p.p. 4a70: 01 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f .."..y.[.-TIMR._ 4a80: 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a HID.A...._CRS... 4a90: 15 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 .G.@.@...G.P.P.. 4aa0: 04 22 01 00 79 00 5b 82 32 41 43 41 44 08 5f 48 ."..y.[.2ACAD._H 4ab0: 49 44 0d 41 43 50 49 30 30 30 33 00 08 5f 50 43 ID.ACPI0003.._PC 4ac0: 4c 12 06 01 5f 53 42 5f 14 11 5f 50 53 52 00 70 L..._SB_.._PSR.p 4ad0: 01 41 43 50 57 a4 41 43 50 57 14 1a 45 43 4f 4b .ACPW.ACPW..ECOK 4ae0: 00 a0 0f 93 5e 2e 45 43 30 5f 5a 30 30 39 01 a4 ....^.EC0_Z009.. 4af0: 01 a1 03 a4 00 5b 82 4e 6f 45 43 30 5f 08 5f 48 .....[.NoEC0_._H 4b00: 49 44 0c 41 d0 0c 09 08 5f 47 50 45 0a 1c 08 5a ID.A...._GPE...Z 4b10: 30 30 39 00 08 5f 43 52 53 11 15 0a 12 47 01 62 009.._CRS....G.b 4b20: 00 62 00 01 01 47 01 66 00 66 00 01 01 79 00 14 .b...G.f.f...y.. 4b30: 3b 5f 52 45 47 02 a0 34 93 68 0a 03 70 69 5a 30 ;_REG..4.h..piZ0 4b40: 30 39 a0 28 5b 12 5f 4f 53 49 60 70 00 42 54 44 09.([._OSI`p.BTD 4b50: 53 a0 19 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 S.._OSI.Windows 4b60: 32 30 30 36 00 70 01 42 54 44 53 5b 80 45 52 41 2006.p.BTDS[.ERA 4b70: 4d 03 00 0a ff 5b 81 4e 2e 45 52 41 4d 11 00 40 M....[.N.ERAM..@ 4b80: 30 53 4d 50 52 08 53 4d 53 54 08 53 4d 41 44 08 0SMPR.SMST.SMAD. 4b90: 53 4d 43 4d 08 53 4d 44 30 40 10 42 43 4e 54 08 SMCM.SMD0@.BCNT. 4ba0: 53 4d 41 41 18 00 40 04 43 48 47 4d 10 43 48 47 SMAA..@.CHGM.CHG 4bb0: 53 10 45 4e 49 44 08 45 4e 49 42 08 45 4e 44 44 S.ENID.ENIB.ENDD 4bc0: 08 43 48 47 56 08 43 48 47 41 10 42 41 4c 30 01 .CHGV.CHGA.BAL0. 4bd0: 42 41 4c 31 01 42 41 4c 32 01 42 41 4c 33 01 42 BAL1.BAL2.BAL3.B 4be0: 42 43 30 01 42 42 43 31 01 42 42 43 32 01 42 42 BC0.BBC1.BBC2.BB 4bf0: 43 33 01 00 08 50 48 44 44 01 49 46 44 44 01 49 C3...PHDD.IFDD.I 4c00: 4f 44 44 01 53 48 44 44 01 53 31 32 30 01 45 46 ODD.SHDD.S120.EF 4c10: 44 44 01 43 52 54 44 01 53 50 57 52 01 53 42 54 DD.CRTD.SPWR.SBT 4c20: 4e 01 56 49 44 4f 01 56 4f 4c 44 01 56 4f 4c 55 N.VIDO.VOLD.VOLU 4c30: 01 4d 55 54 45 01 43 4f 4e 54 01 42 52 47 54 01 .MUTE.CONT.BRGT. 4c40: 48 42 54 4e 01 53 34 53 54 01 53 4b 45 59 01 42 HBTN.S4ST.SKEY.B 4c50: 4b 45 59 01 54 4f 55 50 01 46 4e 42 4e 01 4c 49 KEY.TOUP.FNBN.LI 4c60: 44 46 01 44 49 47 4d 01 55 57 41 4b 01 00 08 44 DF.DIGM.UWAK...D 4c70: 4b 53 50 01 44 4b 49 4e 01 44 4b 49 44 01 44 4b KSP.DKIN.DKID.DK 4c80: 4f 4b 01 00 04 44 4b 50 57 01 00 07 42 54 4e 53 OK...DKPW...BTNS 4c90: 08 53 31 4c 44 01 53 33 4c 44 01 56 47 41 51 01 .S1LD.S3LD.VGAQ. 4ca0: 50 43 4d 51 01 50 43 4d 52 01 41 44 50 54 01 53 PCMQ.PCMR.ADPT.S 4cb0: 4c 4c 53 01 53 59 53 37 01 50 57 41 4b 01 4d 57 LLS.SYS7.PWAK.MW 4cc0: 41 4b 01 4c 57 41 4b 01 00 05 00 28 54 43 4e 4c AK.LWAK....(TCNL 4cd0: 08 54 4d 50 49 08 54 4d 53 44 08 46 41 53 4e 04 .TMPI.TMSD.FASN. 4ce0: 46 41 53 55 04 50 43 56 4c 04 00 02 53 57 54 4f FASU.PCVL...SWTO 4cf0: 01 48 57 54 4f 01 4d 4f 44 45 01 46 41 4e 53 02 .HWTO.MODE.FANS. 4d00: 49 4e 49 54 01 46 41 4e 31 01 46 41 4e 32 01 46 INIT.FAN1.FAN2.F 4d10: 41 4e 54 01 53 4b 4e 4d 01 43 54 4d 50 08 4c 49 ANT.SKNM.CTMP.LI 4d20: 44 45 01 50 4d 45 45 01 50 57 42 45 01 52 4e 47 DE.PMEE.PWBE.RNG 4d30: 45 01 42 54 57 45 01 44 43 4b 45 01 00 02 53 4b E.BTWE.DCKE...SK 4d40: 54 58 08 53 4b 54 42 08 53 4b 54 43 08 53 4b 54 TX.SKTB.SKTC.SKT 4d50: 41 08 00 08 48 41 50 4c 02 48 41 50 52 01 00 05 A...HAPL.HAPR... 4d60: 42 54 44 54 01 42 54 50 57 01 42 54 44 53 01 42 BTDT.BTPW.BTDS.B 4d70: 54 50 53 01 42 54 53 57 01 42 54 57 4b 01 42 54 TPS.BTSW.BTWK.BT 4d80: 4c 44 01 00 01 42 52 54 53 08 43 4e 54 53 08 57 LD...BRTS.CNTS.W 4d90: 4c 41 54 01 42 54 41 54 01 57 4c 45 58 01 42 54 LAT.BTAT.WLEX.BT 4da0: 45 58 01 4b 4c 53 57 01 57 4c 4f 4b 01 00 02 50 EX.KLSW.WLOK...P 4db0: 54 49 44 08 43 50 55 54 08 45 50 4b 54 08 47 48 TID.CPUT.EPKT.GH 4dc0: 49 44 08 00 04 42 4d 46 30 03 42 54 59 30 01 42 ID...BMF0.BTY0.B 4dd0: 53 54 30 08 42 52 43 30 10 42 53 4e 30 10 42 50 ST0.BRC0.BSN0.BP 4de0: 56 30 10 42 44 56 30 10 42 44 43 30 10 42 46 43 V0.BDV0.BDC0.BFC 4df0: 30 10 47 41 55 30 08 43 59 43 30 08 42 50 43 30 0.GAU0.CYC0.BPC0 4e00: 10 42 41 43 30 10 42 41 54 30 08 42 54 57 30 10 .BAC0.BAT0.BTW0. 4e10: 42 44 4e 30 08 00 40 04 00 04 42 4d 46 31 03 42 BDN0..@...BMF1.B 4e20: 54 59 31 01 42 53 54 31 08 42 52 43 31 10 42 53 TY1.BST1.BRC1.BS 4e30: 4e 31 10 42 50 56 31 10 42 44 56 31 10 42 44 43 N1.BPV1.BDV1.BDC 4e40: 31 10 42 46 43 31 10 47 41 55 31 08 43 59 43 31 1.BFC1.GAU1.CYC1 4e50: 08 42 50 43 31 10 42 41 43 31 10 42 41 54 31 08 .BPC1.BAC1.BAT1. 4e60: 42 54 57 31 10 14 37 5f 51 31 31 00 70 0a 87 50 BTW1..7_Q11.p..P 4e70: 38 30 48 a0 13 49 47 44 53 5e 5e 5e 2e 47 46 58 80H..IGDS^^^.GFX 4e80: 30 42 52 54 4e 0a 87 a1 15 86 5e 5e 5e 2f 03 50 0BRTN.....^^^/.P 4e90: 45 47 50 56 47 41 5f 4c 43 44 5f 0a 87 14 37 5f EGPVGA_LCD_...7_ 4ea0: 51 31 32 00 70 0a 86 50 38 30 48 a0 13 49 47 44 Q12.p..P80H..IGD 4eb0: 53 5e 5e 5e 2e 47 46 58 30 42 52 54 4e 0a 86 a1 S^^^.GFX0BRTN... 4ec0: 15 86 5e 5e 5e 2f 03 50 45 47 50 56 47 41 5f 4c ..^^^/.PEGPVGA_L 4ed0: 43 44 5f 0a 86 14 40 05 5f 51 31 43 00 70 0d 3d CD_...@._Q1C.p.= 4ee0: 3d 3d 3d 3d 51 55 45 52 59 5f 31 43 3d 3d 3d 3d ====QUERY_1C==== 4ef0: 3d 00 5b 31 a0 31 56 49 44 4f a0 12 49 47 44 53 =.[1.1VIDO..IGDS 4f00: 5e 5e 5e 2e 47 46 58 30 47 48 44 53 00 a1 12 5e ^^^.GFX0GHDS...^ 4f10: 5e 5e 2f 03 50 45 47 50 56 47 41 5f 44 53 53 57 ^^/.PEGPVGA_DSSW 4f20: 70 00 56 49 44 4f 14 21 5f 51 31 44 00 70 0d 3d p.VIDO.!_Q1D.p.= 4f30: 3d 3d 3d 3d 51 55 45 52 59 5f 31 44 3d 3d 3d 3d ====QUERY_1D==== 4f40: 3d 00 5b 31 50 43 4c 4b 14 21 5f 51 31 45 00 70 =.[1PCLK.!_Q1E.p 4f50: 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 31 45 3d 3d .=====QUERY_1E== 4f60: 3d 3d 3d 00 5b 31 50 43 4c 4b 14 39 5f 51 32 35 ===.[1PCLK.9_Q25 4f70: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 35 .p.=====QUERY_25 4f80: 3d 3d 3d 3d 3d 00 5b 31 5b 22 0b e8 03 86 5e 5e =====.[1["....^^ 4f90: 42 41 54 31 0a 81 5b 22 0b e8 03 86 5e 5e 42 41 BAT1..["....^^BA 4fa0: 54 31 0a 80 14 2f 5f 51 33 34 00 70 0d 3d 3d 3d T1.../_Q34.p.=== 4fb0: 3d 3d 51 55 45 52 59 5f 33 34 3d 3d 3d 3d 3d 00 ==QUERY_34=====. 4fc0: 5b 31 a0 11 42 4b 45 59 50 48 53 53 0a 71 70 00 [1..BKEYPHSS.qp. 4fd0: 42 4b 45 59 14 32 5f 51 33 37 00 70 0d 3d 3d 3d BKEY.2_Q37.p.=== 4fe0: 3d 3d 51 55 45 52 59 5f 33 37 3d 3d 3d 3d 3d 00 ==QUERY_37=====. 4ff0: 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 03 86 5e [1.ACAD..["....^ 5000: 5e 42 41 54 31 0a 80 14 32 5f 51 33 38 00 70 0d ^BAT1...2_Q38.p. 5010: 3d 3d 3d 3d 3d 51 55 45 52 59 5f 33 38 3d 3d 3d =====QUERY_38=== 5020: 3d 3d 00 5b 31 86 41 43 41 44 0a 80 5b 22 0b e8 ==.[1.ACAD..[".. 5030: 03 86 5e 5e 42 41 54 31 0a 80 14 29 5f 51 32 44 ..^^BAT1...)_Q2D 5040: 00 70 0d 3d 3d 3d 3d 3d 51 55 45 52 59 5f 32 44 .p.=====QUERY_2D 5050: 3d 3d 3d 3d 3d 00 5b 31 70 00 44 54 53 4d 54 52 =====.[1p.DTSMTR 5060: 41 50 0a 46 14 29 5f 51 32 45 00 70 0d 3d 3d 3d AP.F.)_Q2E.p.=== 5070: 3d 3d 51 55 45 52 59 5f 32 45 3d 3d 3d 3d 3d 00 ==QUERY_2E=====. 5080: 5b 31 70 01 44 54 53 4d 54 52 41 50 0a 46 5b 80 [1p.DTSMTRAP.F[. 5090: 43 43 4c 4b 01 0b 10 10 0a 04 5b 81 20 43 43 4c CCLK......[. CCL 50a0: 4b 03 00 01 44 55 54 59 03 54 48 45 4e 01 00 03 K...DUTY.THEN... 50b0: 46 54 54 5f 01 00 08 54 53 54 53 01 5b 80 45 43 FTT_...TSTS.[.EC 50c0: 52 4d 03 00 0a ff 5b 81 44 04 45 43 52 4d 11 00 RM....[.D.ECRM.. 50d0: 40 4a 45 52 49 42 10 45 52 42 44 08 00 48 0a 53 @JERIB.ERBD..H.S 50e0: 44 54 4d 08 46 53 53 4e 04 46 41 4e 55 04 50 54 DTM.FSSN.FANU.PT 50f0: 56 4c 03 00 04 54 54 48 52 01 00 48 06 50 4a 49 VL...TTHR..H.PJI 5100: 44 08 00 08 00 48 1d 52 46 52 44 10 5b 01 46 41 D....H.RFRD.[.FA 5110: 4d 58 00 14 22 46 41 4e 47 01 5b 23 46 41 4d 58 MX.."FANG.[#FAMX 5120: ff ff 70 68 45 52 49 42 70 45 52 42 44 60 5b 27 ..phERIBpERBD`[' 5130: 46 41 4d 58 a4 60 14 22 46 41 4e 57 02 5b 23 46 FAMX.`."FANW.[#F 5140: 41 4d 58 ff ff 70 68 45 52 49 42 70 69 45 52 42 AMX..phERIBpiERB 5150: 44 5b 27 46 41 4d 58 a4 69 14 09 54 55 56 52 01 D['FAMX.i..TUVR. 5160: a4 0a 03 14 2e 54 48 52 4f 01 a0 09 93 68 00 a4 .....THRO....h.. 5170: 54 48 45 4e a1 1d a0 09 93 68 01 a4 44 55 54 59 THEN.....h..DUTY 5180: a1 11 a0 0a 93 68 0a 02 a4 54 54 48 52 a1 04 a4 .....h...TTHR... 5190: 0a ff 14 2a 43 4c 43 4b 01 a0 10 93 68 00 70 00 ...*CLCK....h.p. 51a0: 54 48 45 4e 70 00 46 54 54 5f a1 0d 70 68 44 55 THENp.FTT_..phDU 51b0: 54 59 70 01 54 48 45 4e a4 54 48 45 4e 14 37 50 TYp.THEN.THEN.7P 51c0: 43 4c 4b 00 70 50 54 56 4c 60 a0 10 93 60 00 70 CLK.pPTVL`...`.p 51d0: 00 54 48 45 4e 70 00 46 54 54 5f a1 19 76 60 70 .THENp.FTT_..v`p 51e0: 80 60 00 61 7b 61 0a 07 61 70 61 44 55 54 59 70 .`.a{a..apaDUTYp 51f0: 01 54 48 45 4e 5b 82 4b 22 42 41 54 31 08 5f 48 .THEN[.K"BAT1._H 5200: 49 44 0c 41 d0 0c 0a 08 5f 55 49 44 01 08 5f 50 ID.A...._UID.._P 5210: 43 4c 12 06 01 5f 53 42 5f 14 39 5f 53 54 41 00 CL..._SB_.9_STA. 5220: a0 29 90 45 43 4f 4b 93 45 43 44 59 00 a0 13 5e .).ECOK.ECDY...^ 5230: 5e 2e 45 43 30 5f 42 41 4c 30 5b 22 0a 14 a4 0a ^.EC0_BAL0[".... 5240: 1f a1 08 5b 22 0a 14 a4 0a 0f a1 08 5b 22 0a 14 ...[".......[".. 5250: a4 0a 1f 14 48 10 5f 42 49 46 00 08 53 54 41 54 ....H._BIF..STAT 5260: 12 3a 0d 01 0b a0 0f 0b a0 0f 01 0b 5c 2b 0b a4 .:..........\+.. 5270: 01 0a 9c 0b 08 01 0b c4 0e 0d 50 41 33 34 36 35 ..........PA3465 5280: 55 20 00 0d 33 36 35 38 51 00 0d 4c 69 2d 49 6f U ..3658Q..Li-Io 5290: 6e 00 0d 43 4f 4d 50 41 4c 20 00 a0 4b 07 90 45 n..COMPAL ..K..E 52a0: 43 4f 4b 93 45 43 44 59 00 70 5e 5e 2e 45 43 30 COK.ECDY.p^^.EC0 52b0: 5f 42 44 4e 30 60 a0 23 93 60 0a 08 70 0a b4 88 _BDN0`.#.`..p... 52c0: 53 54 41 54 0a 06 00 70 0d 50 41 33 34 35 37 55 STAT...p.PA3457U 52d0: 20 00 88 53 54 41 54 0a 09 00 a0 24 93 60 0a 20 ..STAT....$.`. 52e0: 70 0b 02 01 88 53 54 41 54 0a 06 00 70 0d 50 41 p....STAT...p.PA 52f0: 33 34 35 37 55 20 00 88 53 54 41 54 0a 09 00 5b 3457U ..STAT...[ 5300: 22 0a 14 70 5e 5e 2e 45 43 30 5f 42 44 43 30 42 "..p^^.EC0_BDC0B 5310: 46 43 31 5b 22 0a 14 a1 12 70 0d 4c 69 2d 49 6f FC1["....p.Li-Io 5320: 6e 00 88 53 54 41 54 0a 0b 00 a0 2c 42 46 43 31 n..STAT....,BFC1 5330: 78 42 46 43 31 0a 64 60 61 77 61 0a 64 61 70 61 xBFC1.d`awa.dapa 5340: 42 46 43 31 70 61 88 53 54 41 54 01 00 70 61 88 BFC1pa.STAT..pa. 5350: 53 54 41 54 0a 02 00 a4 53 54 41 54 14 45 0c 5f STAT....STAT.E._ 5360: 42 53 54 00 08 50 42 53 54 12 10 04 00 0c ff ff BST..PBST....... 5370: ff ff 0c ff ff ff ff 0b 5c 2b 70 0b 5c 2b 63 a0 ........\+p.\+c. 5380: 38 90 45 43 4f 4b 93 45 43 44 59 00 5b 22 0a 14 8.ECOK.ECDY.[".. 5390: 70 5e 5e 2e 45 43 30 5f 42 53 54 30 42 53 54 31 p^^.EC0_BST0BST1 53a0: 5b 22 0a 14 70 5e 5e 2e 45 43 30 5f 47 41 55 30 ["..p^^.EC0_GAU0 53b0: 42 47 55 31 5b 22 0a 14 a0 15 42 46 43 31 77 42 BGU1["....BFC1wB 53c0: 47 55 31 42 46 43 31 62 78 62 0a 64 64 62 a1 09 GU1BFC1bxb.ddb.. 53d0: 77 42 47 55 31 0a 28 62 70 42 53 54 31 88 50 42 wBGU1.(bpBST1.PB 53e0: 53 54 00 00 70 00 88 50 42 53 54 01 00 70 62 88 ST..p..PBST..pb. 53f0: 50 42 53 54 0a 02 00 70 63 88 50 42 53 54 0a 03 PBST...pc.PBST.. 5400: 00 a0 1b 94 45 43 44 59 00 76 45 43 44 59 a0 0e ....ECDY.vECDY.. 5410: 93 45 43 44 59 00 86 42 41 54 31 0a 80 a4 50 42 .ECDY..BAT1...PB 5420: 53 54 5b 82 2e 50 53 32 4b 08 5f 48 49 44 0c 41 ST[..PS2K._HID.A 5430: d0 03 03 08 5f 43 52 53 11 19 0a 16 47 01 60 00 ...._CRS....G.`. 5440: 60 00 01 01 47 01 64 00 64 00 01 01 23 02 00 01 `...G.d.d...#... 5450: 79 00 5b 82 1e 50 53 32 4d 08 5f 48 49 44 0c 41 y.[..PS2M._HID.A 5460: d0 0f 13 08 5f 43 52 53 11 09 0a 06 23 00 10 01 ...._CRS....#... 5470: 79 00 5b 82 43 6a 50 41 54 41 08 5f 41 44 52 0c y.[.CjPATA._ADR. 5480: 01 00 1f 00 5b 80 50 41 43 53 02 0a 40 0a c0 5b ....[.PACS..@..[ 5490: 81 49 04 50 41 43 53 03 50 52 49 54 10 00 10 50 .I.PACS.PRIT...P 54a0: 53 49 54 04 00 1c 53 59 4e 43 04 00 0c 53 44 54 SIT...SYNC...SDT 54b0: 30 02 00 02 53 44 54 31 02 00 4a 04 49 43 52 30 0...SDT1..J.ICR0 54c0: 04 49 43 52 31 04 49 43 52 32 04 49 43 52 33 04 .ICR1.ICR2.ICR3. 54d0: 49 43 52 34 04 49 43 52 35 04 5b 82 4b 63 50 52 ICR4.ICR5.[.KcPR 54e0: 49 44 08 5f 41 44 52 00 14 40 17 5f 47 54 4d 00 ID._ADR..@._GTM. 54f0: 08 50 42 55 46 11 17 0a 14 00 00 00 00 00 00 00 .PBUF........... 5500: 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 50 42 ..............PB 5510: 55 46 00 50 49 4f 30 8a 50 42 55 46 0a 04 44 4d UF.PIO0.PBUF..DM 5520: 41 30 8a 50 42 55 46 0a 08 50 49 4f 31 8a 50 42 A0.PBUF..PIO1.PB 5530: 55 46 0a 0c 44 4d 41 31 8a 50 42 55 46 0a 10 46 UF..DMA1.PBUF..F 5540: 4c 41 47 70 47 45 54 50 50 52 49 54 50 49 4f 30 LAGpGETPPRITPIO0 5550: 70 47 44 4d 41 7b 53 59 4e 43 01 00 7b 49 43 52 pGDMA{SYNC..{ICR 5560: 33 01 00 7b 49 43 52 30 01 00 53 44 54 30 7b 49 3..{ICR0..SDT0{I 5570: 43 52 31 01 00 44 4d 41 30 a0 14 93 44 4d 41 30 CR1..DMA0...DMA0 5580: 0c ff ff ff ff 70 50 49 4f 30 44 4d 41 30 a0 2e .....pPIO0DMA0.. 5590: 7b 50 52 49 54 0b 00 40 00 a0 14 93 7b 50 52 49 {PRIT..@....{PRI 55a0: 54 0a 90 00 0a 80 70 0b 84 03 50 49 4f 31 a1 0e T.....p...PIO1.. 55b0: 70 47 45 54 54 50 53 49 54 50 49 4f 31 a1 0b 70 pGETTPSITPIO1..p 55c0: 0c ff ff ff ff 50 49 4f 31 70 47 44 4d 41 7b 53 .....PIO1pGDMA{S 55d0: 59 4e 43 0a 02 00 7b 49 43 52 33 0a 02 00 7b 49 YNC...{ICR3...{I 55e0: 43 52 30 0a 02 00 53 44 54 31 7b 49 43 52 31 0a CR0...SDT1{ICR1. 55f0: 02 00 44 4d 41 31 a0 14 93 44 4d 41 31 0c ff ff ..DMA1...DMA1... 5600: ff ff 70 50 49 4f 31 44 4d 41 31 70 47 45 54 46 ..pPIO1DMA1pGETF 5610: 7b 53 59 4e 43 01 00 7b 53 59 4e 43 0a 02 00 50 {SYNC..{SYNC...P 5620: 52 49 54 46 4c 41 47 a0 2c 7b 93 50 49 4f 30 0c RITFLAG.,{.PIO0. 5630: ff ff ff ff 93 44 4d 41 30 0c ff ff ff ff 00 70 .....DMA0......p 5640: 0a 78 50 49 4f 30 70 0a 14 44 4d 41 30 70 0a 03 .xPIO0p..DMA0p.. 5650: 46 4c 41 47 a4 50 42 55 46 14 4c 2a 5f 53 54 4d FLAG.PBUF.L*_STM 5660: 03 8a 68 00 50 49 4f 30 8a 68 0a 04 44 4d 41 30 ..h.PIO0.h..DMA0 5670: 8a 68 0a 08 50 49 4f 31 8a 68 0a 0c 44 4d 41 31 .h..PIO1.h..DMA1 5680: 8a 68 0a 10 46 4c 41 47 a0 41 12 93 87 69 0b 00 .h..FLAG.A...i.. 5690: 02 7b 50 52 49 54 0b f0 c0 50 52 49 54 7b 53 59 .{PRIT...PRIT{SY 56a0: 4e 43 0a 02 53 59 4e 43 70 00 53 44 54 30 7b 49 NC..SYNCp.SDT0{I 56b0: 43 52 30 0a 02 49 43 52 30 7b 49 43 52 31 0a 02 CR0..ICR0{ICR1.. 56c0: 49 43 52 31 7b 49 43 52 33 0a 02 49 43 52 33 7b ICR1{ICR3..ICR3{ 56d0: 49 43 52 35 0a 02 49 43 52 35 8b 69 0a 62 57 34 ICR5..ICR5.i.bW4 56e0: 39 30 8b 69 0a 6a 57 35 33 30 8b 69 0a 7e 57 36 90.i.jW530.i.~W6 56f0: 33 30 8b 69 0a 80 57 36 34 30 8b 69 0a b0 57 38 30.i..W640.i..W8 5700: 38 30 8b 69 0a ba 57 39 33 30 7d 50 52 49 54 0b 80.i..W930}PRIT. 5710: 04 80 50 52 49 54 a0 1e 90 7b 46 4c 41 47 0a 02 ..PRIT...{FLAG.. 5720: 00 7b 57 34 39 30 0b 00 08 00 7d 50 52 49 54 0a .{W490....}PRIT. 5730: 02 50 52 49 54 7d 50 52 49 54 53 45 54 50 50 49 .PRIT}PRITSETPPI 5740: 4f 30 57 35 33 30 57 36 34 30 50 52 49 54 a0 4b O0W530W640PRIT.K 5750: 05 7b 46 4c 41 47 01 00 7d 53 59 4e 43 01 53 59 .{FLAG..}SYNC.SY 5760: 4e 43 70 53 44 4d 41 44 4d 41 30 53 44 54 30 a0 NCpSDMADMA0SDT0. 5770: 12 95 44 4d 41 30 0a 1e 7d 49 43 52 33 01 49 43 ..DMA0..}ICR3.IC 5780: 52 33 a0 12 95 44 4d 41 30 0a 3c 7d 49 43 52 30 R3...DMA0.<}ICR0 5790: 01 49 43 52 30 a0 14 7b 57 39 33 30 0b 00 20 00 .ICR0..{W930.. . 57a0: 7d 49 43 52 31 01 49 43 52 31 a0 4b 15 93 87 6a }ICR1.ICR1.K...j 57b0: 0b 00 02 7b 50 52 49 54 0b 0f bf 50 52 49 54 70 ...{PRIT...PRITp 57c0: 00 50 53 49 54 7b 53 59 4e 43 01 53 59 4e 43 70 .PSIT{SYNC.SYNCp 57d0: 00 53 44 54 31 7b 49 43 52 30 01 49 43 52 30 7b .SDT1{ICR0.ICR0{ 57e0: 49 43 52 31 01 49 43 52 31 7b 49 43 52 33 01 49 ICR1.ICR1{ICR3.I 57f0: 43 52 33 7b 49 43 52 35 01 49 43 52 35 8b 6a 0a CR3{ICR5.ICR5.j. 5800: 62 57 34 39 31 8b 6a 0a 6a 57 35 33 31 8b 6a 0a bW491.j.jW531.j. 5810: 7e 57 36 33 31 8b 6a 0a 80 57 36 34 31 8b 6a 0a ~W631.j..W641.j. 5820: b0 57 38 38 31 8b 6a 0a ba 57 39 33 31 7d 50 52 .W881.j..W931}PR 5830: 49 54 0b 40 80 50 52 49 54 a0 1e 90 7b 46 4c 41 IT.@.PRIT...{FLA 5840: 47 0a 08 00 7b 57 34 39 31 0b 00 08 00 7d 50 52 G...{W491....}PR 5850: 49 54 0a 20 50 52 49 54 a0 4c 04 7b 46 4c 41 47 IT. PRIT.L.{FLAG 5860: 0a 10 00 7d 50 52 49 54 0b 00 40 50 52 49 54 a0 ...}PRIT..@PRIT. 5870: 13 94 50 49 4f 31 0a f0 7d 50 52 49 54 0a 80 50 ..PIO1..}PRIT..P 5880: 52 49 54 a1 21 7d 50 52 49 54 0a 10 50 52 49 54 RIT.!}PRIT..PRIT 5890: 70 53 45 54 54 50 49 4f 31 57 35 33 31 57 36 34 pSETTPIO1W531W64 58a0: 31 50 53 49 54 a0 40 06 7b 46 4c 41 47 0a 04 00 1PSIT.@.{FLAG... 58b0: 7d 53 59 4e 43 0a 02 53 59 4e 43 70 53 44 4d 41 }SYNC..SYNCpSDMA 58c0: 44 4d 41 31 53 44 54 31 a0 13 95 44 4d 41 31 0a DMA1SDT1...DMA1. 58d0: 1e 7d 49 43 52 33 0a 02 49 43 52 33 a0 13 95 44 .}ICR3..ICR3...D 58e0: 4d 41 31 0a 3c 7d 49 43 52 30 0a 02 49 43 52 30 MA1.<}ICR0..ICR0 58f0: a0 15 7b 57 39 33 31 0b 00 20 00 7d 49 43 52 31 ..{W931.. .}ICR1 5900: 0a 02 49 43 52 31 5b 82 47 10 50 5f 44 30 08 5f ..ICR1[.G.P_D0._ 5910: 41 44 52 00 14 4a 0f 5f 47 54 46 00 08 50 49 42 ADR..J._GTF..PIB 5920: 30 11 11 0a 0e 03 00 00 00 00 a0 ef 03 00 00 00 0............... 5930: 00 a0 ef 8c 50 49 42 30 01 50 4d 44 30 8c 50 49 ....PIB0.PMD0.PI 5940: 42 30 0a 08 44 4d 44 30 a0 40 06 7b 50 52 49 54 B0..DMD0.@.{PRIT 5950: 0a 02 00 a0 13 93 7b 50 52 49 54 0a 09 00 0a 08 ......{PRIT..... 5960: 70 0a 08 50 4d 44 30 a1 41 04 70 0a 0a 50 4d 44 p..PMD0.A.p..PMD 5970: 30 7a 7b 50 52 49 54 0b 00 03 00 0a 08 60 7a 7b 0z{PRIT......`z{ 5980: 50 52 49 54 0b 00 30 00 0a 0c 61 72 60 61 62 a0 PRIT..0...ar`ab. 5990: 0c 93 0a 03 62 70 0a 0b 50 4d 44 30 a0 0c 93 0a ....bp..PMD0.... 59a0: 05 62 70 0a 0c 50 4d 44 30 a1 07 70 01 50 4d 44 .bp..PMD0..p.PMD 59b0: 30 a0 43 04 7b 53 59 4e 43 01 00 70 7d 53 44 54 0.C.{SYNC..p}SDT 59c0: 30 0a 40 00 44 4d 44 30 a0 2c 7b 49 43 52 31 01 0.@.DMD0.,{ICR1. 59d0: 00 a0 13 7b 49 43 52 30 01 00 72 44 4d 44 30 0a ...{ICR0..rDMD0. 59e0: 02 44 4d 44 30 a0 0f 7b 49 43 52 33 01 00 70 0a .DMD0..{ICR3..p. 59f0: 45 44 4d 44 30 a1 14 7d 74 7b 50 4d 44 30 0a 07 EDMD0..}t{PMD0.. 5a00: 00 0a 02 00 0a 20 44 4d 44 30 a4 50 49 42 30 5b ..... DMD0.PIB0[ 5a10: 82 46 10 50 5f 44 31 08 5f 41 44 52 01 14 49 0f .F.P_D1._ADR..I. 5a20: 5f 47 54 46 00 08 50 49 42 31 11 11 0a 0e 03 00 _GTF..PIB1...... 5a30: 00 00 00 b0 ef 03 00 00 00 00 b0 ef 8c 50 49 42 .............PIB 5a40: 31 01 50 4d 44 31 8c 50 49 42 31 0a 08 44 4d 44 1.PMD1.PIB1..DMD 5a50: 31 a0 4b 05 7b 50 52 49 54 0a 20 00 a0 13 93 7b 1.K.{PRIT. ....{ 5a60: 50 52 49 54 0a 90 00 0a 80 70 0a 08 50 4d 44 31 PRIT.....p..PMD1 5a70: a1 3c 72 7b 50 53 49 54 0a 03 00 7a 7b 50 53 49 . /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 -j $FWTSTESTDIR/../data --dumpfile=$FWTSTESTDIR/syntaxcheck-0001/acpidump-0001.log syntaxcheck - | grep "^[0-9]*[ ]*syntaxcheck" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/syntaxcheck-0001/syntaxcheck-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/tcpa-0001/000077500000000000000000000000001465205512700143325ustar00rootroot00000000000000fwts-test/tcpa-0001/acpidump-0001.log000066400000000000000000000036431465205512700172230ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... TCPA @ 0x00000000 0000: 54 43 50 41 32 00 00 00 02 44 41 50 54 49 4F 34 TCPA2....DAPTIO4 0010: 4E 41 50 41 41 53 46 00 01 00 00 00 4D 53 46 54 NAPAASF.....MSFT 0020: 13 00 00 01 00 00 00 00 01 00 10 C0 CB CA 00 00 ................ 0030: 00 00 .. fwts-test/tcpa-0001/acpidump-0002.log000066400000000000000000000036431465205512700172240ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... TCPA @ 0x00000000 0000: 54 43 50 41 64 00 00 00 01 75 41 50 54 49 4F 34 TCPA2....DAPTIO4 0010: 4E 41 50 41 41 53 46 00 01 00 00 00 4D 53 46 54 NAPAASF.....MSFT 0020: 13 00 00 01 00 00 00 00 01 00 10 C0 CB CA 00 00 ................ 0030: 00 00 .. fwts-test/tcpa-0001/tcpa-0001.log000066400000000000000000000014071465205512700163440ustar00rootroot00000000000000tcpa tcpa: TCPA Trusted Computing Platform Alliance tcpa Capabilities Table test. tcpa ---------------------------------------------------------- tcpa Test 1 of 1: Validate TCPA table. tcpa TCPA Table: tcpa Platform Class: 0x0000 tcpa Log Area Minimum Length: 0x00010000 tcpa Log Area Start Address: 0x00000000cacbc010 tcpa PASSED: Test 1, No issues found in TCPA table. tcpa tcpa ========================================================== tcpa 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 tcpa info only. tcpa ========================================================== fwts-test/tcpa-0001/tcpa-0002.log000066400000000000000000000016671465205512700163550ustar00rootroot00000000000000tcpa tcpa: TCPA Trusted Computing Platform Alliance tcpa Capabilities Table test. tcpa ---------------------------------------------------------- tcpa Test 1 of 1: Validate TCPA table. tcpa FAILED [HIGH] TCPABadFieldValue: Test 1, TCPA Length field tcpa must be 50, got 100 instead. tcpa FAILED [HIGH] TCPABadFieldValue: Test 1, TCPA Revision tcpa field must be 2, got 1 instead. tcpa TCPA Table: tcpa Platform Class: 0x0000 tcpa Log Area Minimum Length: 0x00010000 tcpa Log Area Start Address: 0x00000000cacbc010 tcpa tcpa ========================================================== tcpa 0 passed, 2 failed, 0 warning, 0 aborted, 0 skipped, 0 tcpa info only. tcpa ========================================================== fwts-test/tcpa-0001/test-0001.sh000077500000000000000000000007741465205512700162360ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against TCPA" NAME=test-0001.sh TMPLOG=$TMP/tcpa.log.$$ $FWTS --show-tests | grep TCPA > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/tcpa-0001/acpidump-0001.log tcpa - | cut -c7- | grep "^tcpa" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/tcpa-0001/tcpa-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/tcpa-0001/test-0002.sh000077500000000000000000000010041465205512700162220ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid TCPA" NAME=test-0001.sh TMPLOG=$TMP/tcpa.log.$$ $FWTS --show-tests | grep TCPA > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/tcpa-0001/acpidump-0002.log tcpa - | cut -c7- | grep "^tcpa" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/tcpa-0001/tcpa-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/tpm2-0001/000077500000000000000000000000001465205512700142655ustar00rootroot00000000000000fwts-test/tpm2-0001/acpidump-0001.log000066400000000000000000000035301465205512700171510ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... TPM2 @ 0x00000000 0000: 54 50 4D 32 34 00 00 00 03 4F 49 4E 54 45 4C 20 TPM24....OINTEL 0010: 54 45 4D 50 4C 41 54 45 01 00 00 00 49 4E 54 4C TEMPLATE....INTL 0020: 14 02 14 20 00 00 00 00 77 66 55 44 33 22 11 00 ... ....wfUD3".. 0030: 01 00 00 00 .... fwts-test/tpm2-0001/acpidump-0002.log000066400000000000000000000035301465205512700171520ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... TPM2 @ 0x00000000 0000: 54 50 4D 32 34 00 00 00 03 40 49 4E 54 45 4C 20 TPM24....@INTEL 0010: 54 45 4D 50 4C 41 54 45 01 00 00 00 49 4E 54 4C TEMPLATE....INTL 0020: 14 02 14 20 04 00 03 00 77 66 55 44 33 22 11 00 ... ....wfUD3".. 0030: FF 00 00 00 .... fwts-test/tpm2-0001/test-0001.sh000077500000000000000000000007741465205512700161710ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against TPM2" NAME=test-0001.sh TMPLOG=$TMP/tpm2.log.$$ $FWTS --show-tests | grep TPM2 > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/tpm2-0001/acpidump-0001.log tpm2 - | cut -c7- | grep "^tpm2" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/tpm2-0001/tpm2-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/tpm2-0001/test-0002.sh000077500000000000000000000010041465205512700161550ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid TPM2" NAME=test-0001.sh TMPLOG=$TMP/tpm2.log.$$ $FWTS --show-tests | grep TPM2 > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/tpm2-0001/acpidump-0002.log tpm2 - | cut -c7- | grep "^tpm2" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/tpm2-0001/tpm2-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/tpm2-0001/tpm2-0001.log000066400000000000000000000014241465205512700162310ustar00rootroot00000000000000tpm2 tpm2: TPM2 Trusted Platform Module 2 test. tpm2 ---------------------------------------------------------- tpm2 Test 1 of 1: Validate TPM2 table. tpm2 TPM2 Table: tpm2 Platform Class: 0x0000 tpm2 Reserved: 0x0000 tpm2 Address of Control Area: 0x0011223344556677 tpm2 Start Method: 0x00000001 tpm2 PASSED: Test 1, No issues found in TPM2 table. tpm2 tpm2 ========================================================== tpm2 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 tpm2 info only. tpm2 ========================================================== fwts-test/tpm2-0001/tpm2-0002.log000066400000000000000000000021741465205512700162350ustar00rootroot00000000000000tpm2 tpm2: TPM2 Trusted Platform Module 2 test. tpm2 ---------------------------------------------------------- tpm2 Test 1 of 1: Validate TPM2 table. tpm2 TPM2 Table: tpm2 Platform Class: 0x0004 tpm2 Reserved: 0x0003 tpm2 Address of Control Area: 0x0011223344556677 tpm2 Start Method: 0x000000ff tpm2 FAILED [HIGH] TPM2BadPlatformClass: Test 1, TPM2's tpm2 platform class must be zero (client) or one (server), got tpm2 0x4 tpm2 FAILED [MEDIUM] TPM2ReservedNonZero: Test 1, TPM2 Reserved tpm2 field must be zero, got 0x0003 instead tpm2 FAILED [HIGH] TPM2BadStartMethod: Test 1, TPM2's Start tpm2 Method must be between 0x1 and 0xd, got 0xff tpm2 tpm2 ========================================================== tpm2 0 passed, 3 failed, 0 warning, 0 aborted, 0 skipped, 0 tpm2 info only. tpm2 ========================================================== fwts-test/uefi-0001/000077500000000000000000000000001465205512700143335ustar00rootroot00000000000000fwts-test/uefi-0001/acpidump-0001.log000066400000000000000000000036741465205512700172300ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... UEFI @ 0x00000000 0000: 55 45 46 49 42 00 00 00 01 52 49 4E 54 45 4C 20 UEFIB....RINTEL 0010: 45 44 4B 32 20 20 20 20 02 00 00 00 20 20 20 20 EDK2 .... 0020: 13 00 00 01 E2 D8 8E C6 C6 9D BD 4C 9D 94 DB 65 ...........L...e 0030: AC C5 C3 32 36 00 03 00 00 00 00 00 00 00 00 00 ...26........... 0040: 00 00 fwts-test/uefi-0001/acpidump-0002.log000066400000000000000000000036741465205512700172310ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... UEFI @ 0x00000000 0000: 55 45 46 49 42 00 00 00 01 52 49 4E 54 45 4C 20 UEFIB....RINTEL 0010: 45 44 4B 32 20 20 20 20 02 00 00 00 20 20 20 20 EDK2 .... 0020: 13 00 00 01 E2 D8 8E C6 C6 9D BD 4C 9D 94 DB 65 ...........L...e 0030: AC C5 C3 32 46 00 03 00 00 00 00 00 00 00 00 00 ...26........... 0040: 00 00 fwts-test/uefi-0001/test-0001.sh000077500000000000000000000010031465205512700162210ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against UEFI" NAME=test-0001.sh TMPLOG=$TMP/uefi.log.$$ $FWTS --show-tests | grep "UEFI Data" > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/uefi-0001/acpidump-0001.log uefi - | cut -c7- | grep "^uefi" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/uefi-0001/uefi-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/uefi-0001/test-0002.sh000077500000000000000000000010131465205512700162230ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid UEFI" NAME=test-0001.sh TMPLOG=$TMP/uefi.log.$$ $FWTS --show-tests | grep "UEFI Data" > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/uefi-0001/acpidump-0002.log uefi - | cut -c7- | grep "^uefi" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/uefi-0001/uefi-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/uefi-0001/uefi-0001.log000066400000000000000000000013451465205512700163470ustar00rootroot00000000000000uefi uefi: UEFI Data Table test. uefi ---------------------------------------------------------- uefi Test 1 of 1: UEFI Data Table test. uefi UEFI ACPI Data Table: uefi Identifier: C68ED8E2-9DC6-4CBD-9D94-DB65ACC5C332 uefi DataOffset: 0x0036 uefi SW SMI Number: 0x00000003 uefi Buffer Ptr Address: 0x0000000000000000 uefi PASSED: Test 1, No issues found in UEFI table. uefi uefi ========================================================== uefi 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 uefi info only. uefi ========================================================== fwts-test/uefi-0001/uefi-0002.log000066400000000000000000000020311465205512700163410ustar00rootroot00000000000000uefi uefi: UEFI Data Table test. uefi ---------------------------------------------------------- uefi Test 1 of 1: UEFI Data Table test. uefi UEFI ACPI Data Table: uefi Identifier: C68ED8E2-9DC6-4CBD-9D94-DB65ACC5C332 uefi DataOffset: 0x0046 uefi FAILED [HIGH] UEFIDataOffset: Test 1, Invalid UEFI uefi DataOffset, exceed the whole table length 66 bytes, uefi instead got 70 offset bytes uefi FAILED [HIGH] UEFIDataOffset: Test 1, Invalid UEFI uefi DataOffset for SMM Communication table, DataOffset should uefi be 54, instead got 70 offset bytes uefi SW SMI Number: 0x00000003 uefi Buffer Ptr Address: 0x0000000000000000 uefi uefi ========================================================== uefi 0 passed, 2 failed, 0 warning, 0 aborted, 0 skipped, 0 uefi info only. uefi ========================================================== fwts-test/viot-0001/000077500000000000000000000000001465205512700143645ustar00rootroot00000000000000fwts-test/viot-0001/acpidump-0001.log000066400000000000000000000042161465205512700172520ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... VIOT @ 0x00000000 0000: 56 49 4F 54 80 00 00 00 00 52 49 4E 54 45 4C 20 VIOT.....RINTEL 0010: 54 65 6D 70 6C 61 74 65 00 00 00 00 49 4E 54 4C Template....INTL 0020: 05 01 21 20 04 00 30 00 00 00 00 00 00 00 00 00 ..! ..0......... 0030: 01 00 18 00 00 00 00 00 00 00 00 00 00 00 FF FF ................ 0040: 60 00 00 00 00 00 00 00 02 00 18 00 00 00 01 00 `............... 0050: 00 00 00 1C 00 00 00 00 70 00 00 00 00 00 00 00 ........p....... 0060: 03 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0070: 04 00 10 00 00 00 00 00 00 00 00 1D 00 00 00 00 ................ fwts-test/viot-0001/acpidump-0002.log000066400000000000000000000045541465205512700172600ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... VIOT @ 0x00000000 0000: 56 49 4F 54 B0 00 00 00 00 52 49 4E 54 45 4C 20 VIOT.....RINTEL 0010: 54 65 6D 70 6C 61 74 65 00 00 00 00 49 4E 54 4C Template....INTL 0020: 05 01 21 20 07 00 30 00 FF FF FF FF FF FF FF FF ..! ..0......... 0030: 01 FF 18 00 00 00 00 00 00 00 00 00 00 00 FF FF ................ 0040: 60 00 FF FF FF FF FF FF 02 FF 18 00 00 00 01 00 `............... 0050: 00 00 00 1C 00 00 00 00 70 00 FF FF FF FF FF FF ........p....... 0060: 03 FF 10 00 00 00 00 00 FF FF FF FF FF FF FF FF ................ 0070: 04 FF 10 00 FF FF FF FF 00 00 00 1D 00 00 00 00 ................ 0080: 00 FF 10 00 FF FF FF FF 00 00 00 1D 00 00 00 00 ................ 0090: 06 FF 10 00 FF FF FF FF 00 00 00 1D 00 00 00 00 ................ 00A0: 04 00 20 00 FF FF FF FF 00 00 00 1D 00 00 00 00 ................ fwts-test/viot-0001/test-0001.sh000077500000000000000000000010011465205512700162500ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against VIOT" NAME=test-0001.sh TMPLOG=$TMP/viot.log.$$ $FWTS --show-tests | grep viot > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/viot-0001/acpidump-0001.log viot - | cut -c7- | grep "^viot" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/viot-0001/viot-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/viot-0001/test-0002.sh000077500000000000000000000010011465205512700162510ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against VIOT" NAME=test-0002.sh TMPLOG=$TMP/viot.log.$$ $FWTS --show-tests | grep viot > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/viot-0001/acpidump-0002.log viot - | cut -c7- | grep "^viot" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/viot-0001/viot-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/viot-0001/viot-0001.log000066400000000000000000000044661465205512700164400ustar00rootroot00000000000000viot viot: VIOT Virtual I/O Translation Table test. viot ---------------------------------------------------------- viot Test 1 of 1: Validate VIOT table. viot VIOT Virtual I/O Translation Table: viot Node Count: 0x0004 viot Node Offset: 0x0030 viot Reserved: 0x0000000000000000 viot PCI Range Node Structure: viot Type: 0x01 viot Reserved: 0x00 viot length: 0x0018 viot Endpoint Start: 0x00000000 viot PCI Segment Start: 0x0000 viot PCI Segment End: 0x0000 viot PCI BDF Start: 0x0000 viot PCI BDF End: 0xffff viot PCI Segment End: 0x0060 viot 00 00 00 00 00 00 viot viot Single MMIO Endpoint Node Structure: viot Type: 0x02 viot Reserved: 0x00 viot length: 0x0018 viot Endpoint ID: 0x00010000 viot Base Address: 0x000000001c000000 viot Output Node: 0x0070 viot 00 00 00 00 00 00 viot viot Virtio-iommu based on virtio-pci Node Structure: viot Type: 0x03 viot Reserved: 0x00 viot length: 0x0010 viot PCI Segment: 0x0000 viot PCI BDF Number: 0x0000 viot Reserved: 0x0000000000000000 viot viot Virtio-iommu based on virtio-pci Node Structure: viot Type: 0x04 viot Reserved: 0x00 viot length: 0x0010 viot Reserved: 0x00000000 viot Base Address: 0x000000001d000000 viot viot PASSED: Test 1, No issues found in VIOT table. viot viot ========================================================== viot 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 viot info only. viot ========================================================== fwts-test/viot-0001/viot-0002.log000066400000000000000000000105371465205512700164350ustar00rootroot00000000000000viot viot: VIOT Virtual I/O Translation Table test. viot ---------------------------------------------------------- viot Test 1 of 1: Validate VIOT table. viot VIOT Virtual I/O Translation Table: viot Node Count: 0x0007 viot Node Offset: 0x0030 viot Reserved: 0xffffffffffffffff viot FAILED [MEDIUM] VIOTReservedNonZero: Test 1, VIOT Reserved viot field must be zero, got 0xffffffffffffffff instead viot PCI Range Node Structure: viot Type: 0x01 viot Reserved: 0xff viot FAILED [MEDIUM] VIOTReservedNonZero: Test 1, VIOT Reserved viot field must be zero, got 0xff instead viot length: 0x0018 viot Endpoint Start: 0x00000000 viot PCI Segment Start: 0x0000 viot PCI Segment End: 0x0000 viot PCI BDF Start: 0x0000 viot PCI BDF End: 0xffff viot PCI Segment End: 0x0060 viot FF FF FF FF FF FF viot FAILED [MEDIUM] VIOTReservedNonZero: Test 1, VIOT Reserved viot field must be all zero, got below instead viot Reserved [00] = 0xff viot Reserved [01] = 0xff viot Reserved [02] = 0xff viot Reserved [03] = 0xff viot Reserved [04] = 0xff viot Reserved [05] = 0xff viot viot Single MMIO Endpoint Node Structure: viot Type: 0x02 viot Reserved: 0xff viot FAILED [MEDIUM] VIOTReservedNonZero: Test 1, VIOT Reserved viot field must be zero, got 0xff instead viot length: 0x0018 viot Endpoint ID: 0x00010000 viot Base Address: 0x000000001c000000 viot Output Node: 0x0070 viot FF FF FF FF FF FF viot FAILED [MEDIUM] VIOTReservedNonZero: Test 1, VIOT Reserved viot field must be all zero, got below instead viot Reserved [00] = 0xff viot Reserved [01] = 0xff viot Reserved [02] = 0xff viot Reserved [03] = 0xff viot Reserved [04] = 0xff viot Reserved [05] = 0xff viot viot Virtio-iommu based on virtio-pci Node Structure: viot Type: 0x03 viot Reserved: 0xff viot FAILED [MEDIUM] VIOTReservedNonZero: Test 1, VIOT Reserved viot field must be zero, got 0xff instead viot length: 0x0010 viot PCI Segment: 0x0000 viot PCI BDF Number: 0x0000 viot Reserved: 0xffffffffffffffff viot FAILED [MEDIUM] VIOTReservedNonZero: Test 1, VIOT Reserved viot field must be zero, got 0xffffffffffffffff instead viot viot Virtio-iommu based on virtio-pci Node Structure: viot Type: 0x04 viot Reserved: 0xff viot FAILED [MEDIUM] VIOTReservedNonZero: Test 1, VIOT Reserved viot field must be zero, got 0xff instead viot length: 0x0010 viot Reserved: 0xffffffff viot FAILED [MEDIUM] VIOTReservedNonZero: Test 1, VIOT Reserved viot field must be zero, got 0xffffffff instead viot Base Address: 0x000000001d000000 viot viot FAILED [HIGH] VIOTBadNodeType: Test 1, VIOT node structure viot types must not have the value 0, 0x05..0xff, got 0x00 viot instead viot viot FAILED [HIGH] VIOTBadNodeType: Test 1, VIOT node structure viot types must not have the value 0, 0x05..0xff, got 0x06 viot instead viot viot FAILED [HIGH] VIOTOutOfRangeOffset: Test 1, VIOT Node Data viot Offset is out of range. viot viot ========================================================== viot 0 passed, 12 failed, 0 warning, 0 aborted, 0 skipped, 0 viot info only. viot ========================================================== fwts-test/waet-0001/000077500000000000000000000000001465205512700143435ustar00rootroot00000000000000fwts-test/waet-0001/acpidump-0001.log000066400000000000000000000033631465205512700172330ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... WAET @ 0x00000000 0000: 57 41 45 54 28 00 00 00 01 62 56 4d 57 41 52 45 WAET(....bVMWARE 0010: 56 4d 57 20 57 41 45 54 00 00 04 06 56 4d 57 20 VMW WAET....VMW 0020: 01 00 00 00 02 00 00 00 fwts-test/waet-0001/acpidump-0002.log000066400000000000000000000033631465205512700172340ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... WAET @ 0x00000000 0000: 57 41 45 54 28 00 00 00 01 62 56 4d 57 41 52 45 WAET(....bVMWARE 0010: 56 4d 57 20 57 41 45 54 00 00 04 06 56 4d 57 20 VMW WAET....VMW 0020: 01 00 00 00 fc ff ff ff fwts-test/waet-0001/acpidump-0003.log000066400000000000000000000033531465205512700172340ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... WAET @ 0x00000000 0000: 57 41 45 54 26 00 00 00 01 62 56 4d 57 41 52 45 WAET(....bVMWARE 0010: 56 4d 57 20 57 41 45 54 00 00 04 06 56 4d 57 20 VMW WAET....VMW 0020: 01 00 00 00 fc ff fwts-test/waet-0001/test-0001.sh000077500000000000000000000007741465205512700162470ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against WAET" NAME=test-0001.sh TMPLOG=$TMP/waet.log.$$ $FWTS --show-tests | grep WAET > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/waet-0001/acpidump-0001.log waet - | cut -c7- | grep "^waet" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/waet-0001/waet-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/waet-0001/test-0002.sh000077500000000000000000000010041465205512700162330ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid WAET" NAME=test-0001.sh TMPLOG=$TMP/waet.log.$$ $FWTS --show-tests | grep WAET > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/waet-0001/acpidump-0002.log waet - | cut -c7- | grep "^waet" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/waet-0001/waet-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/waet-0001/test-0003.sh000077500000000000000000000010041465205512700162340ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid WAET" NAME=test-0001.sh TMPLOG=$TMP/waet.log.$$ $FWTS --show-tests | grep WAET > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/waet-0001/acpidump-0003.log waet - | cut -c7- | grep "^waet" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/waet-0001/waet-0003.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/waet-0001/waet-0001.log000066400000000000000000000013371465205512700163700ustar00rootroot00000000000000waet waet: WAET Windows ACPI Emulated Devices Table test. waet ---------------------------------------------------------- waet Test 1 of 1: Windows ACPI Emulated Devices Table test. waet WAET Table: waet Emulated Device Flags: 0x00000002 waet Bit [0] RTC Good: 0 waet Bit [1] PM Timer Good: 1 waet waet PASSED: Test 1, No issues found in WAET table. waet waet ========================================================== waet 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 waet info only. waet ========================================================== fwts-test/waet-0001/waet-0002.log000066400000000000000000000015141465205512700163660ustar00rootroot00000000000000waet waet: WAET Windows ACPI Emulated Devices Table test. waet ---------------------------------------------------------- waet Test 1 of 1: Windows ACPI Emulated Devices Table test. waet WAET Table: waet Emulated Device Flags: 0xfffffffc waet Bit [0] RTC Good: 0 waet Bit [1] PM Timer Good: 0 waet waet FAILED [HIGH] WAETReservedBitsNonZero: Test 1, WAET waet Emulated Device Flags Bits [31..2] must be zero, got waet 0xfffffffc instead waet waet ========================================================== waet 0 passed, 1 failed, 0 warning, 0 aborted, 0 skipped, 0 waet info only. waet ========================================================== fwts-test/waet-0001/waet-0003.log000066400000000000000000000011431465205512700163650ustar00rootroot00000000000000waet waet: WAET Windows ACPI Emulated Devices Table test. waet ---------------------------------------------------------- waet Test 1 of 1: Windows ACPI Emulated Devices Table test. waet FAILED [HIGH] WAETTooShort: Test 1, WAET table too short, waet expecting 40 bytes, instead got 38 bytes waet waet ========================================================== waet 0 passed, 1 failed, 0 warning, 0 aborted, 0 skipped, 0 waet info only. waet ========================================================== fwts-test/wdat-0001/000077500000000000000000000000001465205512700143425ustar00rootroot00000000000000fwts-test/wdat-0001/acpidump-0001.log000066400000000000000000000100431465205512700172230ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... WDAT @ 0x00000000 0000: 57 44 41 54 24 02 00 00 01 8a 4c 47 45 20 20 20 WDAT$.....LGE 0010: 4c 47 50 43 20 20 20 20 01 00 00 00 4d 53 46 54 LGPC ....MSFT 0020: 13 00 00 01 20 00 00 00 ff 00 ff ff ff 00 00 00 .... ........... 0030: 58 02 00 00 ff 03 00 00 02 00 00 00 81 00 00 00 X............... 0040: 14 00 00 00 01 02 00 00 01 10 00 02 60 04 00 00 ............`... 0050: 00 00 00 00 00 00 00 00 ff 03 00 00 04 01 00 00 ................ 0060: 01 10 00 02 60 04 00 00 00 00 00 00 00 00 00 00 ....`........... 0070: ff 03 00 00 05 01 00 00 01 10 00 02 72 04 00 00 ............r... 0080: 00 00 00 00 00 00 00 00 ff 03 00 00 06 83 00 00 ................ 0090: 01 10 00 02 72 04 00 00 00 00 00 00 00 00 00 00 ....r........... 00a0: ff 03 00 00 08 00 00 00 01 10 0b 02 68 04 00 00 ............h... 00b0: 00 00 00 00 00 00 00 00 01 00 00 00 09 82 00 00 ................ 00c0: 01 10 00 02 68 04 00 00 00 00 00 00 00 00 00 00 ....h........... 00d0: 00 08 00 00 09 02 00 00 01 08 00 01 72 00 00 00 ............r... 00e0: 00 00 00 00 45 00 00 00 ff 00 00 00 09 82 00 00 ....E........... 00f0: 01 08 00 01 73 00 00 00 00 00 00 00 01 00 00 00 ....s........... 0100: 01 00 00 00 0a 00 00 00 01 10 0b 02 68 04 00 00 ............h... 0110: 00 00 00 00 01 00 00 00 01 00 00 00 0b 82 00 00 ................ 0120: 01 10 00 02 68 04 00 00 00 00 00 00 00 08 00 00 ....h........... 0130: 00 08 00 00 0b 02 00 00 01 08 00 01 72 00 00 00 ............r... 0140: 00 00 00 00 45 00 00 00 ff 00 00 00 0b 82 00 00 ....E........... 0150: 01 08 00 01 73 00 00 00 00 00 00 00 00 00 00 00 ....s........... 0160: 01 00 00 00 10 00 00 00 01 08 04 01 6a 04 00 00 ............j... 0170: 00 00 00 00 00 00 00 00 03 00 00 00 11 82 00 00 ................ 0180: 01 10 00 02 6a 04 00 00 00 00 00 00 00 00 00 00 ....j........... 0190: 30 00 00 00 12 00 00 00 01 08 04 01 6a 04 00 00 0...........j... 01a0: 00 00 00 00 01 00 00 00 03 00 00 00 13 82 00 00 ................ 01b0: 01 10 00 02 6a 04 00 00 00 00 00 00 10 00 00 00 ....j........... 01c0: 30 00 00 00 20 02 00 00 01 08 00 01 72 00 00 00 0... .......r... 01d0: 00 00 00 00 45 00 00 00 ff 00 00 00 20 00 00 00 ....E....... ... 01e0: 01 08 00 01 73 00 00 00 00 00 00 00 01 00 00 00 ....s........... 01f0: 01 00 00 00 21 02 00 00 01 08 00 01 72 00 00 00 ....!.......r... 0200: 00 00 00 00 45 00 00 00 ff 00 00 00 21 82 00 00 ....E.......!... 0210: 01 08 00 01 73 00 00 00 00 00 00 00 00 00 00 00 ....s........... 0220: 01 00 00 00 fwts-test/wdat-0001/acpidump-0002.log000066400000000000000000000100431465205512700172240ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... WDAT @ 0x00000000 0000: 57 44 41 54 24 02 00 00 01 8a 4c 47 45 20 20 20 WDAT$.....LGE 0010: 4c 47 50 43 20 20 20 20 01 00 00 00 4d 53 46 54 LGPC ....MSFT 0020: 13 00 00 01 20 00 00 00 ff 00 ff ff ff 10 20 30 .... ........... 0030: 58 02 00 00 ff 03 00 00 09 04 00 00 81 00 00 00 X............... 0040: 14 00 00 00 07 46 00 00 01 10 00 02 60 04 00 00 ............`... 0050: 00 00 00 00 00 00 00 00 ff 03 00 00 04 01 00 00 ................ 0060: 01 10 00 02 60 04 00 00 00 00 00 00 00 00 00 00 ....`........... 0070: ff 03 00 00 05 01 00 00 01 10 00 02 72 04 00 00 ............r... 0080: 00 00 00 00 00 00 00 00 ff 03 00 00 06 83 00 00 ................ 0090: 01 10 00 02 72 04 00 00 00 00 00 00 00 00 00 00 ....r........... 00a0: ff 03 00 00 08 00 00 00 01 10 0b 02 68 04 00 00 ............h... 00b0: 00 00 00 00 00 00 00 00 01 00 00 00 09 82 00 00 ................ 00c0: 01 10 00 02 68 04 00 00 00 00 00 00 00 00 00 00 ....h........... 00d0: 00 08 00 00 09 02 00 00 01 08 00 01 72 00 00 00 ............r... 00e0: 00 00 00 00 45 00 00 00 ff 00 00 00 09 82 00 00 ....E........... 00f0: 01 08 00 01 73 00 00 00 00 00 00 00 01 00 00 00 ....s........... 0100: 01 00 00 00 0a 00 00 00 01 10 0b 02 68 04 00 00 ............h... 0110: 00 00 00 00 01 00 00 00 01 00 00 00 0b 82 00 00 ................ 0120: 01 10 00 02 68 04 00 00 00 00 00 00 00 08 00 00 ....h........... 0130: 00 08 00 00 0b 02 00 00 01 08 00 01 72 00 00 00 ............r... 0140: 00 00 00 00 45 00 00 00 ff 00 00 00 0b 82 00 00 ....E........... 0150: 01 08 00 01 73 00 00 00 00 00 00 00 00 00 00 00 ....s........... 0160: 01 00 00 00 10 00 00 00 01 08 04 01 6a 04 00 00 ............j... 0170: 00 00 00 00 00 00 00 00 03 00 00 00 11 82 00 00 ................ 0180: 01 10 00 02 6a 04 00 00 00 00 00 00 00 00 00 00 ....j........... 0190: 30 00 00 00 12 00 00 00 01 08 04 01 6a 04 00 00 0...........j... 01a0: 00 00 00 00 01 00 00 00 03 00 00 00 13 82 00 00 ................ 01b0: 01 10 00 02 6a 04 00 00 00 00 00 00 10 00 00 00 ....j........... 01c0: 30 00 00 00 20 02 00 00 01 08 00 01 72 00 00 00 0... .......r... 01d0: 00 00 00 00 45 00 00 00 ff 00 00 00 20 00 00 00 ....E....... ... 01e0: 01 08 00 01 73 00 00 00 00 00 00 00 01 00 00 00 ....s........... 01f0: 01 00 00 00 21 02 00 00 01 08 00 01 72 00 00 00 ....!.......r... 0200: 00 00 00 00 45 00 00 00 ff 00 00 00 ff ff 00 00 ....E.......!... 0210: ff ff 00 ff 73 00 00 00 00 00 00 00 00 00 00 00 ....s........... 0220: 01 00 00 00 fwts-test/wdat-0001/test-0001.sh000077500000000000000000000010011465205512700162260ustar00rootroot00000000000000#!/bin/bash # TEST="Test apci table against WDAT" NAME=test-0001.sh TMPLOG=$TMP/wdat.log.$$ $FWTS --show-tests | grep WDAT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/wdat-0001/acpidump-0001.log wdat - | cut -c7- | grep "^wdat" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/wdat-0001/wdat-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/wdat-0001/test-0002.sh000077500000000000000000000010031465205512700162310ustar00rootroot00000000000000#!/bin/bash # TEST="Test apci against invalid WDAT" NAME=test-0002.sh TMPLOG=$TMP/wdat.log.$$ $FWTS --show-tests | grep WDAT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/wdat-0001/acpidump-0002.log wdat - | cut -c7- | grep "^wdat" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/wdat-0001/wdat-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/wdat-0001/wdat-0001.log000066400000000000000000000305271465205512700163710ustar00rootroot00000000000000wdat wdat: WDAT Microsoft Hardware Watchdog Action Table test. wdat ---------------------------------------------------------- wdat Test 1 of 1: WDAT Microsoft Hardware Watchdog Action Table wdat test. wdat WDAT Microsoft Watchdog Action Table: wdat Watchdog Header Length: 0x00000020 wdat PCI Segment: 0x00ff wdat PCI Bus Number: 0xff wdat PCI Device Number: 0xff wdat PCI Function Number: 0xff wdat Reserved: 0x00000000 wdat Timer Period: 0x00000258 wdat Maximum Count: 0x000003ff wdat Minimum Count: 0x00000002 wdat Watchdog Flags: 0x81 wdat Reserved: 0x00000000 wdat Watchdog Entries 0x00000014 wdat Watchdog Instruction Entry 1 wdat Watchdog Action: 0x01 wdat Instruction Flags: 0x02 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x0000000000000460 wdat Value: 0x00000000 wdat Mask: 0x000003ff wdat Watchdog Instruction Entry 2 wdat Watchdog Action: 0x04 wdat Instruction Flags: 0x01 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x0000000000000460 wdat Value: 0x00000000 wdat Mask: 0x000003ff wdat Watchdog Instruction Entry 3 wdat Watchdog Action: 0x05 wdat Instruction Flags: 0x01 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x0000000000000472 wdat Value: 0x00000000 wdat Mask: 0x000003ff wdat Watchdog Instruction Entry 4 wdat Watchdog Action: 0x06 wdat Instruction Flags: 0x83 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x0000000000000472 wdat Value: 0x00000000 wdat Mask: 0x000003ff wdat Watchdog Instruction Entry 5 wdat Watchdog Action: 0x08 wdat Instruction Flags: 0x00 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x0b wdat Access Size 0x02 wdat Address 0x0000000000000468 wdat Value: 0x00000000 wdat Mask: 0x00000001 wdat Watchdog Instruction Entry 6 wdat Watchdog Action: 0x09 wdat Instruction Flags: 0x82 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x0000000000000468 wdat Value: 0x00000000 wdat Mask: 0x00000800 wdat Watchdog Instruction Entry 7 wdat Watchdog Action: 0x09 wdat Instruction Flags: 0x02 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000072 wdat Value: 0x00000045 wdat Mask: 0x000000ff wdat Watchdog Instruction Entry 8 wdat Watchdog Action: 0x09 wdat Instruction Flags: 0x82 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000073 wdat Value: 0x00000001 wdat Mask: 0x00000001 wdat Watchdog Instruction Entry 9 wdat Watchdog Action: 0x0a wdat Instruction Flags: 0x00 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x0b wdat Access Size 0x02 wdat Address 0x0000000000000468 wdat Value: 0x00000001 wdat Mask: 0x00000001 wdat Watchdog Instruction Entry 10 wdat Watchdog Action: 0x0b wdat Instruction Flags: 0x82 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x0000000000000468 wdat Value: 0x00000800 wdat Mask: 0x00000800 wdat Watchdog Instruction Entry 11 wdat Watchdog Action: 0x0b wdat Instruction Flags: 0x02 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000072 wdat Value: 0x00000045 wdat Mask: 0x000000ff wdat Watchdog Instruction Entry 12 wdat Watchdog Action: 0x0b wdat Instruction Flags: 0x82 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000073 wdat Value: 0x00000000 wdat Mask: 0x00000001 wdat Watchdog Instruction Entry 13 wdat Watchdog Action: 0x10 wdat Instruction Flags: 0x00 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x04 wdat Access Size 0x01 wdat Address 0x000000000000046a wdat Value: 0x00000000 wdat Mask: 0x00000003 wdat Watchdog Instruction Entry 14 wdat Watchdog Action: 0x11 wdat Instruction Flags: 0x82 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x000000000000046a wdat Value: 0x00000000 wdat Mask: 0x00000030 wdat Watchdog Instruction Entry 15 wdat Watchdog Action: 0x12 wdat Instruction Flags: 0x00 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x04 wdat Access Size 0x01 wdat Address 0x000000000000046a wdat Value: 0x00000001 wdat Mask: 0x00000003 wdat Watchdog Instruction Entry 16 wdat Watchdog Action: 0x13 wdat Instruction Flags: 0x82 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x000000000000046a wdat Value: 0x00000010 wdat Mask: 0x00000030 wdat Watchdog Instruction Entry 17 wdat Watchdog Action: 0x20 wdat Instruction Flags: 0x02 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000072 wdat Value: 0x00000045 wdat Mask: 0x000000ff wdat Watchdog Instruction Entry 18 wdat Watchdog Action: 0x20 wdat Instruction Flags: 0x00 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000073 wdat Value: 0x00000001 wdat Mask: 0x00000001 wdat Watchdog Instruction Entry 19 wdat Watchdog Action: 0x21 wdat Instruction Flags: 0x02 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000072 wdat Value: 0x00000045 wdat Mask: 0x000000ff wdat Watchdog Instruction Entry 20 wdat Watchdog Action: 0x21 wdat Instruction Flags: 0x82 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000073 wdat Value: 0x00000000 wdat Mask: 0x00000001 wdat PASSED: Test 1, All 20 WDAT Watchdog Instruction Entries wdat look sane. wdat PASSED: Test 1, No issues found in WDAT table. wdat wdat ========================================================== wdat 2 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 wdat info only. wdat ========================================================== fwts-test/wdat-0001/wdat-0002.log000066400000000000000000000330221465205512700163630ustar00rootroot00000000000000wdat wdat: WDAT Microsoft Hardware Watchdog Action Table test. wdat ---------------------------------------------------------- wdat Test 1 of 1: WDAT Microsoft Hardware Watchdog Action Table wdat test. wdat WDAT Microsoft Watchdog Action Table: wdat Watchdog Header Length: 0x00000020 wdat PCI Segment: 0x00ff wdat PCI Bus Number: 0xff wdat PCI Device Number: 0xff wdat PCI Function Number: 0xff wdat Reserved: 0x00302010 wdat FAILED [MEDIUM] WDATReservedNonZero: Test 1, WDAT wdat Reserved1 field must be zero, got 0x00302010 instead wdat Timer Period: 0x00000258 wdat Maximum Count: 0x000003ff wdat Minimum Count: 0x00000409 wdat Watchdog Flags: 0x81 wdat Reserved: 0x00000000 wdat Watchdog Entries 0x00000014 wdat FAILED [MEDIUM] WDATMinGreaterThanMax: Test 1, WDAT wdat Minimum Count is 0x409 and is greater than the Maximum wdat Count of 0x3ff wdat Watchdog Instruction Entry 1 wdat Watchdog Action: 0x07 wdat Instruction Flags: 0x46 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x0000000000000460 wdat Value: 0x00000000 wdat Mask: 0x000003ff wdat FAILED [HIGH] WDATWatchdogActionInvalid: Test 1, WDAT wdat Watchdog Instruction Entry 1 Watchdog Action field is 0x7 wdat and should be one of 0x00, 0x04, 0x05, 0x06, 0x08, 0x09, wdat 0x0a, 0x0b, 0x10, 0x11, 0x12, 0x13, 0x20 or 0x21 wdat FAILED [HIGH] WDATInstructionFlagsInvalid: Test 1, WDAT wdat Watchdog Instruction Entry 1 Instruction Flags field is wdat 0x46 and should be one of 0x00, 0x01, 0x02, 0x03 or 0x80, wdat 0x81, 0x82, 0x83 wdat Watchdog Instruction Entry 2 wdat Watchdog Action: 0x04 wdat Instruction Flags: 0x01 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x0000000000000460 wdat Value: 0x00000000 wdat Mask: 0x000003ff wdat Watchdog Instruction Entry 3 wdat Watchdog Action: 0x05 wdat Instruction Flags: 0x01 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x0000000000000472 wdat Value: 0x00000000 wdat Mask: 0x000003ff wdat Watchdog Instruction Entry 4 wdat Watchdog Action: 0x06 wdat Instruction Flags: 0x83 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x0000000000000472 wdat Value: 0x00000000 wdat Mask: 0x000003ff wdat Watchdog Instruction Entry 5 wdat Watchdog Action: 0x08 wdat Instruction Flags: 0x00 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x0b wdat Access Size 0x02 wdat Address 0x0000000000000468 wdat Value: 0x00000000 wdat Mask: 0x00000001 wdat Watchdog Instruction Entry 6 wdat Watchdog Action: 0x09 wdat Instruction Flags: 0x82 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x0000000000000468 wdat Value: 0x00000000 wdat Mask: 0x00000800 wdat Watchdog Instruction Entry 7 wdat Watchdog Action: 0x09 wdat Instruction Flags: 0x02 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000072 wdat Value: 0x00000045 wdat Mask: 0x000000ff wdat Watchdog Instruction Entry 8 wdat Watchdog Action: 0x09 wdat Instruction Flags: 0x82 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000073 wdat Value: 0x00000001 wdat Mask: 0x00000001 wdat Watchdog Instruction Entry 9 wdat Watchdog Action: 0x0a wdat Instruction Flags: 0x00 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x0b wdat Access Size 0x02 wdat Address 0x0000000000000468 wdat Value: 0x00000001 wdat Mask: 0x00000001 wdat Watchdog Instruction Entry 10 wdat Watchdog Action: 0x0b wdat Instruction Flags: 0x82 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x0000000000000468 wdat Value: 0x00000800 wdat Mask: 0x00000800 wdat Watchdog Instruction Entry 11 wdat Watchdog Action: 0x0b wdat Instruction Flags: 0x02 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000072 wdat Value: 0x00000045 wdat Mask: 0x000000ff wdat Watchdog Instruction Entry 12 wdat Watchdog Action: 0x0b wdat Instruction Flags: 0x82 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000073 wdat Value: 0x00000000 wdat Mask: 0x00000001 wdat Watchdog Instruction Entry 13 wdat Watchdog Action: 0x10 wdat Instruction Flags: 0x00 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x04 wdat Access Size 0x01 wdat Address 0x000000000000046a wdat Value: 0x00000000 wdat Mask: 0x00000003 wdat Watchdog Instruction Entry 14 wdat Watchdog Action: 0x11 wdat Instruction Flags: 0x82 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x000000000000046a wdat Value: 0x00000000 wdat Mask: 0x00000030 wdat Watchdog Instruction Entry 15 wdat Watchdog Action: 0x12 wdat Instruction Flags: 0x00 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x04 wdat Access Size 0x01 wdat Address 0x000000000000046a wdat Value: 0x00000001 wdat Mask: 0x00000003 wdat Watchdog Instruction Entry 16 wdat Watchdog Action: 0x13 wdat Instruction Flags: 0x82 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x10 wdat Register Bit Offset 0x00 wdat Access Size 0x02 wdat Address 0x000000000000046a wdat Value: 0x00000010 wdat Mask: 0x00000030 wdat Watchdog Instruction Entry 17 wdat Watchdog Action: 0x20 wdat Instruction Flags: 0x02 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000072 wdat Value: 0x00000045 wdat Mask: 0x000000ff wdat Watchdog Instruction Entry 18 wdat Watchdog Action: 0x20 wdat Instruction Flags: 0x00 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000073 wdat Value: 0x00000001 wdat Mask: 0x00000001 wdat Watchdog Instruction Entry 19 wdat Watchdog Action: 0x21 wdat Instruction Flags: 0x02 wdat Reserved: 0x0000 wdat Address Space ID: 0x01 wdat Register Bit Width 0x08 wdat Register Bit Offset 0x00 wdat Access Size 0x01 wdat Address 0x0000000000000072 wdat Value: 0x00000045 wdat Mask: 0x000000ff wdat Watchdog Instruction Entry 20 wdat Watchdog Action: 0xff wdat Instruction Flags: 0xff wdat Reserved: 0x0000 wdat Address Space ID: 0xff wdat Register Bit Width 0xff wdat Register Bit Offset 0x00 wdat Access Size 0xff wdat Address 0x0000000000000073 wdat Value: 0x00000000 wdat Mask: 0x00000001 wdat FAILED [HIGH] WDATWatchdogActionInvalid: Test 1, WDAT wdat Watchdog Instruction Entry 20 Watchdog Action field is wdat 0xff and should be one of 0x00, 0x04, 0x05, 0x06, 0x08, wdat 0x09, 0x0a, 0x0b, 0x10, 0x11, 0x12, 0x13, 0x20 or 0x21 wdat FAILED [HIGH] WDATInstructionFlagsInvalid: Test 1, WDAT wdat Watchdog Instruction Entry 20 Instruction Flags field is wdat 0xff and should be one of 0x00, 0x01, 0x02, 0x03 or 0x80, wdat 0x81, 0x82, 0x83 wdat wdat ========================================================== wdat 0 passed, 6 failed, 0 warning, 0 aborted, 0 skipped, 0 wdat info only. wdat ========================================================== fwts-test/wmi-0001/000077500000000000000000000000001465205512700141775ustar00rootroot00000000000000fwts-test/wmi-0001/acpidump-0001.log000066400000000000000000012733641465205512700171020ustar00rootroot00000000000000DSDT @ 0xdafe8000 0000: 44 53 44 54 52 02 01 00 01 8d 4c 45 4e 4f 56 4f DSDTR.....LENOVO 0010: 54 50 2d 47 32 20 20 20 10 11 00 00 49 4e 54 4c TP-G2 ....INTL 0020: 09 11 06 20 10 4f 06 5c 5f 50 52 5f 5b 83 0b 43 ... .O.\_PR_[..C 0030: 50 55 30 01 10 04 00 00 06 5b 83 0b 43 50 55 31 PU0......[..CPU1 0040: 02 10 04 00 00 06 5b 83 0b 43 50 55 32 03 10 04 ......[..CPU2... 0050: 00 00 06 5b 83 0b 43 50 55 33 04 10 04 00 00 06 ...[..CPU3...... 0060: 5b 83 0b 43 50 55 34 05 10 04 00 00 06 5b 83 0b [..CPU4......[.. 0070: 43 50 55 35 06 10 04 00 00 06 5b 83 0b 43 50 55 CPU5......[..CPU 0080: 36 07 10 04 00 00 06 5b 83 0b 43 50 55 37 08 10 6......[..CPU7.. 0090: 04 00 00 06 10 47 1a 5c 00 14 42 1a 50 4e 54 46 .....G.\..B.PNTF 00a0: 01 a0 4c 17 7b 5c 50 50 4d 46 0b 00 04 00 a0 2d ..L.{\PPMF.....- 00b0: 91 90 7b 50 44 43 30 0a 08 00 91 93 68 0a 80 93 ..{PDC0.....h... 00c0: 68 0a 82 90 7b 50 44 43 30 0a 10 00 93 68 0a 81 h...{PDC0....h.. 00d0: 86 5c 2e 5f 50 52 5f 43 50 55 30 68 a0 2d 91 90 .\._PR_CPU0h.-.. 00e0: 7b 50 44 43 31 0a 08 00 91 93 68 0a 80 93 68 0a {PDC1.....h...h. 00f0: 82 90 7b 50 44 43 31 0a 10 00 93 68 0a 81 86 5c ..{PDC1....h...\ 0100: 2e 5f 50 52 5f 43 50 55 31 68 a0 2d 91 90 7b 50 ._PR_CPU1h.-..{P 0110: 44 43 32 0a 08 00 91 93 68 0a 80 93 68 0a 82 90 DC2.....h...h... 0120: 7b 50 44 43 32 0a 10 00 93 68 0a 81 86 5c 2e 5f {PDC2....h...\._ 0130: 50 52 5f 43 50 55 32 68 a0 2d 91 90 7b 50 44 43 PR_CPU2h.-..{PDC 0140: 33 0a 08 00 91 93 68 0a 80 93 68 0a 82 90 7b 50 3.....h...h...{P 0150: 44 43 33 0a 10 00 93 68 0a 81 86 5c 2e 5f 50 52 DC3....h...\._PR 0160: 5f 43 50 55 33 68 a0 2d 91 90 7b 50 44 43 34 0a _CPU3h.-..{PDC4. 0170: 08 00 91 93 68 0a 80 93 68 0a 82 90 7b 50 44 43 ....h...h...{PDC 0180: 34 0a 10 00 93 68 0a 81 86 5c 2e 5f 50 52 5f 43 4....h...\._PR_C 0190: 50 55 34 68 a0 2d 91 90 7b 50 44 43 35 0a 08 00 PU4h.-..{PDC5... 01a0: 91 93 68 0a 80 93 68 0a 82 90 7b 50 44 43 35 0a ..h...h...{PDC5. 01b0: 10 00 93 68 0a 81 86 5c 2e 5f 50 52 5f 43 50 55 ...h...\._PR_CPU 01c0: 35 68 a0 2d 91 90 7b 50 44 43 36 0a 08 00 91 93 5h.-..{PDC6..... 01d0: 68 0a 80 93 68 0a 82 90 7b 50 44 43 36 0a 10 00 h...h...{PDC6... 01e0: 93 68 0a 81 86 5c 2e 5f 50 52 5f 43 50 55 36 68 .h...\._PR_CPU6h 01f0: a0 2d 91 90 7b 50 44 43 37 0a 08 00 91 93 68 0a .-..{PDC7.....h. 0200: 80 93 68 0a 82 90 7b 50 44 43 37 0a 10 00 93 68 ..h...{PDC7....h 0210: 0a 81 86 5c 2e 5f 50 52 5f 43 50 55 37 68 a1 1d ...\._PR_CPU7h.. 0220: a0 1b 91 93 68 0a 80 91 93 68 0a 81 93 68 0a 82 ....h....h...h.. 0230: 86 5c 2e 5f 50 52 5f 43 50 55 30 68 5b 80 4d 4e .\._PR_CPU0h[.MN 0240: 56 53 00 0c 18 d0 f9 da 0b 00 10 5b 81 40 41 4d VS.........[.@AM 0250: 4e 56 53 03 00 80 80 06 47 41 50 41 20 47 41 50 NVS.....GAPA GAP 0260: 4c 20 44 43 4b 49 20 44 43 4b 53 20 56 43 44 4c L DCKI DCKS VCDL 0270: 01 56 43 44 43 01 56 43 44 54 01 56 43 44 44 01 .VCDC.VCDT.VCDD. 0280: 00 01 56 43 53 53 01 56 43 44 42 01 56 43 49 4e ..VCSS.VCDB.VCIN 0290: 01 56 56 50 4f 08 42 52 54 4e 08 42 52 4c 56 08 .VVPO.BRTN.BRLV. 02a0: 43 44 46 4c 08 43 44 41 48 08 50 4d 4f 44 02 50 CDFL.CDAH.PMOD.P 02b0: 44 49 52 01 50 44 4d 41 01 00 04 4c 46 44 43 01 DIR.PDMA...LFDC. 02c0: 00 07 43 32 4e 41 01 43 33 4e 41 01 43 34 4e 41 ..C2NA.C3NA.C4NA 02d0: 01 43 36 4e 41 01 43 37 4e 41 01 00 03 00 08 00 .C6NA.C7NA...... 02e0: 02 00 01 4e 48 50 53 01 4e 50 4d 45 01 00 03 55 ...NHPS.NPME...U 02f0: 4f 50 54 08 42 54 49 44 20 44 50 50 30 01 44 50 OPT.BTID DPP0.DP 0300: 50 31 01 44 50 50 32 01 44 50 50 33 01 44 50 50 P1.DPP2.DPP3.DPP 0310: 34 01 44 50 50 35 01 00 02 00 08 54 43 52 54 10 4.DPP5.....TCRT. 0320: 54 50 53 56 10 54 54 43 31 10 54 54 43 32 10 54 TPSV.TTC1.TTC2.T 0330: 54 53 50 10 53 52 41 48 08 53 52 48 45 08 53 52 TSP.SRAH.SRHE.SR 0340: 45 31 08 53 52 45 32 08 53 52 45 33 08 53 52 45 E1.SRE2.SRE3.SRE 0350: 34 08 53 52 45 35 08 53 52 45 36 08 53 52 55 31 4.SRE5.SRE6.SRU1 0360: 08 53 52 55 32 08 53 52 55 33 08 53 52 55 37 08 .SRU2.SRU3.SRU7. 0370: 53 52 55 34 08 53 52 55 35 08 53 52 55 38 08 53 SRU4.SRU5.SRU8.S 0380: 52 50 42 08 53 52 4c 50 08 53 52 53 41 08 53 52 RPB.SRLP.SRSA.SR 0390: 53 4d 08 43 57 41 43 01 43 57 41 53 01 43 57 55 SM.CWAC.CWAS.CWU 03a0: 45 01 43 57 55 53 01 00 04 43 57 41 50 10 43 57 E.CWUS...CWAP.CW 03b0: 41 54 10 44 42 47 43 01 00 07 46 53 31 4c 10 46 AT.DBGC...FS1L.F 03c0: 53 31 4d 10 46 53 31 48 10 46 53 32 4c 10 46 53 S1M.FS1H.FS2L.FS 03d0: 32 4d 10 46 53 32 48 10 46 53 33 4c 10 46 53 33 2M.FS2H.FS3L.FS3 03e0: 4d 10 46 53 33 48 10 54 41 54 43 01 00 06 54 41 M.FS3H.TATC...TA 03f0: 54 4c 01 54 41 54 57 08 54 4e 46 54 04 54 4e 54 TL.TATW.TNFT.TNT 0400: 54 04 54 44 46 41 04 54 44 54 41 04 54 44 46 44 T.TDFA.TDTA.TDFD 0410: 04 54 44 54 44 04 54 43 46 41 04 54 43 54 41 04 .TDTD.TCFA.TCTA. 0420: 54 43 46 44 04 54 43 54 44 04 54 53 46 54 04 54 TCFD.TCTD.TSFT.T 0430: 53 54 54 04 54 49 54 30 08 54 43 52 30 10 54 50 STT.TIT0.TCR0.TP 0440: 53 30 10 54 49 54 31 08 54 43 52 31 10 54 50 53 S0.TIT1.TCR1.TPS 0450: 31 10 54 49 54 32 08 54 43 52 32 10 54 50 53 32 1.TIT2.TCR2.TPS2 0460: 10 54 49 46 30 08 54 49 46 31 08 54 49 46 32 08 .TIF0.TIF1.TIF2. 0470: 00 38 42 54 48 49 01 00 07 48 44 49 52 01 48 44 .8BTHI...HDIR.HD 0480: 45 48 01 48 44 53 50 01 48 44 50 50 01 48 44 55 EH.HDSP.HDPP.HDU 0490: 42 01 48 44 4d 43 01 00 02 54 50 4d 45 08 42 49 B.HDMC...TPME.BI 04a0: 44 45 04 49 44 45 54 04 00 01 44 54 53 45 01 00 DE.IDET...DTSE.. 04b0: 06 44 54 53 30 08 44 54 53 31 08 44 54 30 30 01 .DTS0.DTS1.DT00. 04c0: 44 54 30 31 01 44 54 30 32 01 44 54 30 33 01 00 DT01.DT02.DT03.. 04d0: 04 4c 49 44 42 01 43 34 57 52 01 43 34 41 43 01 .LIDB.C4WR.C4AC. 04e0: 4f 44 44 58 01 43 4d 50 52 01 49 4c 4e 46 01 50 ODDX.CMPR.ILNF.P 04f0: 4c 55 58 01 00 01 00 48 05 00 04 00 01 49 44 4d LUX....H.....IDM 0500: 4d 01 00 02 00 03 00 01 00 01 4c 49 44 53 01 00 M.........LIDS.. 0510: 02 00 08 00 04 00 04 54 43 47 30 01 54 43 47 31 .......TCG0.TCG1 0520: 01 00 06 53 57 47 50 08 49 50 4d 53 08 49 50 4d ...SWGP.IPMS.IPM 0530: 42 48 07 49 50 4d 52 18 49 50 4d 4f 18 49 50 4d BH.IPMR.IPMO.IPM 0540: 41 08 56 49 47 44 01 56 44 53 43 01 00 02 56 44 A.VIGD.VDSC...VD 0550: 53 50 01 00 03 00 18 41 53 46 54 08 50 4c 31 4c SP.....ASFT.PL1L 0560: 08 50 4c 31 4d 08 43 48 4b 43 20 43 48 4b 45 20 .PL1M.CHKC CHKE 0570: 41 54 52 42 20 00 08 50 50 43 52 08 54 50 43 52 ATRB ..PPCR.TPCR 0580: 05 00 03 00 48 07 43 54 44 50 08 50 50 43 41 08 ....H.CTDP.PPCA. 0590: 54 50 43 41 05 00 03 42 46 57 42 48 12 4f 53 50 TPCA...BFWBH.OSP 05a0: 58 01 4f 53 43 34 01 00 06 53 50 45 4e 01 53 43 X.OSC4...SPEN.SC 05b0: 52 4d 01 47 46 50 4c 01 45 54 41 55 01 49 48 42 RM.GFPL.ETAU.IHB 05c0: 43 01 41 50 4d 44 01 00 02 46 54 50 53 08 48 49 C.APMD...FTPS.HI 05d0: 53 54 08 4c 50 53 54 08 4c 57 53 54 08 00 18 4d ST.LPST.LWST...M 05e0: 54 41 55 08 00 40 10 48 50 45 54 20 50 4b 4c 49 TAU..@.HPET PKLI 05f0: 10 56 4c 43 58 10 56 4e 49 54 08 56 42 44 30 08 .VLCX.VNIT.VBD0. 0600: 56 42 44 54 40 08 56 42 50 4c 10 56 42 50 48 10 VBDT@.VBPL.VBPH. 0610: 56 42 4d 4c 08 56 42 4d 48 08 56 45 44 49 40 40 VBML.VBMH.VEDI@@ 0620: 50 44 43 49 10 49 53 43 47 20 49 53 53 50 01 49 PDCI.ISCG ISSP.I 0630: 53 57 4b 02 00 05 53 48 41 31 40 0a 46 46 44 54 SWK...SHA1@.FFDT 0640: 01 00 07 4c 57 43 50 01 4c 57 45 4e 01 00 06 55 ...LWCP.LWEN...U 0650: 53 42 52 01 00 07 41 50 53 54 08 00 08 5b 81 44 SBR...APST...[.D 0660: 09 4d 4e 56 53 01 00 80 80 05 57 49 54 4d 08 57 .MNVS.....WITM.W 0670: 53 45 4c 08 57 4c 53 30 08 57 4c 53 31 08 57 4c SEL.WLS0.WLS1.WL 0680: 53 32 08 57 4c 53 33 08 57 4c 53 34 08 57 4c 53 S2.WLS3.WLS4.WLS 0690: 35 08 57 4c 53 36 08 57 4c 53 37 08 57 4c 53 38 5.WLS6.WLS7.WLS8 06a0: 08 57 4c 53 39 08 57 4c 53 41 08 57 4c 53 42 08 .WLS9.WLSA.WLSB. 06b0: 57 4c 53 43 08 57 4c 53 44 08 57 45 4e 43 08 57 WLSC.WLSD.WENC.W 06c0: 4b 42 44 08 57 50 54 59 08 57 50 41 53 48 40 57 KBD.WPTY.WPASH@W 06d0: 50 4e 57 48 40 57 53 50 4d 08 57 53 50 53 08 57 PNWH@WSPM.WSPS.W 06e0: 53 4d 4e 08 57 53 4d 58 08 57 53 45 4e 08 57 53 SMN.WSMX.WSEN.WS 06f0: 4b 42 08 5b 81 10 4d 4e 56 53 01 00 80 00 05 44 KB.[..MNVS.....D 0700: 42 47 53 40 40 5b 80 47 4e 56 53 00 0c 18 ce f6 BGS@@[.GNVS..... 0710: da 0b c8 01 5b 81 4b 2c 47 4e 56 53 10 4f 53 59 ....[.K,GNVS.OSY 0720: 53 10 53 4d 49 46 08 50 52 4d 30 08 50 52 4d 31 S.SMIF.PRM0.PRM1 0730: 08 00 48 05 50 57 52 53 08 00 48 06 00 38 52 45 ..H.PWRS..H..8RE 0740: 56 4e 08 00 10 41 50 49 43 08 54 43 4e 54 08 50 VN...APIC.TCNT.P 0750: 43 50 30 08 50 43 50 31 08 50 50 43 4d 08 50 50 CP0.PCP1.PPCM.PP 0760: 4d 46 20 43 36 37 4c 08 00 40 05 49 47 44 53 08 MF C67L..@.IGDS. 0770: 54 4c 53 54 08 43 41 44 4c 08 50 41 44 4c 08 43 TLST.CADL.PADL.C 0780: 53 54 45 10 4e 53 54 45 10 53 53 54 45 10 4e 44 STE.NSTE.SSTE.ND 0790: 49 44 08 44 49 44 31 20 44 49 44 32 20 44 49 44 ID.DID1 DID2 DID 07a0: 33 20 44 49 44 34 20 44 49 44 35 20 4b 53 56 30 3 DID4 DID5 KSV0 07b0: 20 4b 53 56 31 08 00 38 42 4c 43 53 08 42 52 54 KSV1..8BLCS.BRT 07c0: 4c 08 00 48 07 54 50 4d 50 08 00 08 4d 4f 52 44 L..H.TPMP...MORD 07d0: 08 54 43 47 50 08 50 50 52 50 20 50 50 52 51 08 .TCGP.PPRP PPRQ. 07e0: 4c 50 50 52 08 47 54 46 30 38 47 54 46 32 38 49 LPPR.GTF08GTF28I 07f0: 44 45 4d 08 47 54 46 31 38 42 49 44 5f 08 50 4c DEM.GTF18BID_.PL 0800: 49 44 08 41 4f 41 43 08 53 4c 44 52 20 57 41 4b ID.AOAC.SLDR WAK 0810: 52 08 00 40 05 41 53 4c 42 20 49 42 54 54 08 49 R..@.ASLB IBTT.I 0820: 50 41 54 08 49 54 56 46 08 49 54 56 4d 08 49 50 PAT.ITVF.ITVM.IP 0830: 53 43 08 49 42 4c 43 08 49 42 49 41 08 49 53 53 SC.IBLC.IBIA.ISS 0840: 43 08 49 34 30 39 08 49 35 30 39 08 49 36 30 39 C.I409.I509.I609 0850: 08 49 37 30 39 08 49 50 43 46 08 49 44 4d 53 08 .I709.IPCF.IDMS. 0860: 49 46 31 45 08 48 56 43 4f 08 4e 58 44 31 20 4e IF1E.HVCO.NXD1 N 0870: 58 44 32 20 4e 58 44 33 20 4e 58 44 34 20 4e 58 XD2 NXD3 NXD4 NX 0880: 44 35 20 4e 58 44 36 20 4e 58 44 37 20 4e 58 44 D5 NXD6 NXD7 NXD 0890: 38 20 47 53 4d 49 08 50 41 56 50 08 00 08 4f 53 8 GSMI.PAVP...OS 08a0: 43 43 08 4e 45 58 50 08 53 44 47 56 08 53 44 44 CC.NEXP.SDGV.SDD 08b0: 56 08 00 30 44 53 45 4e 08 45 43 4f 4e 08 00 08 V..0DSEN.ECON... 08c0: 43 54 59 50 08 4c 30 31 43 08 56 46 4e 30 08 56 CTYP.L01C.VFN0.V 08d0: 46 4e 31 08 00 40 07 4e 56 47 41 20 4e 56 48 41 FN1..@.NVGA NVHA 08e0: 20 41 4d 44 41 20 44 49 44 36 20 44 49 44 37 20 AMDA DID6 DID7 08f0: 44 49 44 38 20 45 42 41 53 20 43 50 53 50 20 45 DID8 EBAS CPSP E 0900: 45 43 50 20 45 56 43 50 20 58 42 41 53 20 4f 42 ECP EVCP XBAS OB 0910: 53 31 20 4f 42 53 32 20 4f 42 53 33 20 4f 42 53 S1 OBS2 OBS3 OBS 0920: 34 20 4f 42 53 35 20 4f 42 53 36 20 4f 42 53 37 4 OBS5 OBS6 OBS7 0930: 20 4f 42 53 38 20 00 48 05 41 54 4d 43 08 50 54 OBS8 .H.ATMC.PT 0940: 4d 43 08 41 54 52 41 08 50 54 52 41 08 50 4e 48 MC.ATRA.PTRA.PNH 0950: 4d 20 54 42 41 42 20 54 42 41 48 20 52 54 49 50 M TBAB TBAH RTIP 0960: 08 54 53 4f 44 08 41 54 50 43 08 50 54 50 43 08 .TSOD.ATPC.PTPC. 0970: 50 46 4c 56 08 42 52 45 56 08 48 47 4d 44 08 50 PFLV.BREV.HGMD.P 0980: 57 4f 4b 08 48 4c 52 53 08 44 53 45 4c 08 45 53 WOK.HLRS.DSEL.ES 0990: 45 4c 08 50 53 45 4c 08 50 57 45 4e 08 50 52 53 EL.PSEL.PWEN.PRS 09a0: 54 08 44 50 42 4d 08 44 50 43 4d 08 44 50 44 4d T.DPBM.DPCM.DPDM 09b0: 08 41 4c 46 50 08 49 4d 4f 4e 08 50 44 54 53 08 .ALFP.IMON.PDTS. 09c0: 50 4b 47 41 08 50 41 4d 54 08 41 43 30 46 08 41 PKGA.PAMT.AC0F.A 09d0: 43 31 46 08 00 48 19 58 48 43 4d 08 58 48 50 4d C1F..H.XHCM.XHPM 09e0: 08 10 8c 51 0d 5c 5f 53 42 5f 14 4a 30 5f 49 4e ...Q.\_SB_.J0_IN 09f0: 49 00 a0 43 0f 5b 12 5c 5f 4f 53 49 60 a0 2c 5c I..C.[.\_OSI`.,\ 0a00: 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 _OSI.Windows 200 0a10: 31 00 70 0a 01 5c 57 4e 54 46 70 0a 01 5c 57 58 1.p..\WNTFp..\WX 0a20: 50 46 70 0a 00 5c 57 53 50 56 a0 20 5c 5f 4f 53 PFp..\WSPV. \_OS 0a30: 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 53 I.Windows 2001 S 0a40: 50 31 00 70 0a 01 5c 57 53 50 56 a0 20 5c 5f 4f P1.p..\WSPV. \_O 0a50: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 31 20 SI.Windows 2001 0a60: 53 50 32 00 70 0a 02 5c 57 53 50 56 a0 1c 5c 5f SP2.p..\WSPV..\_ 0a70: 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 OSI.Windows 2006 0a80: 00 70 0a 01 5c 57 56 49 53 a0 2e 5c 5f 4f 53 49 .p..\WVIS..\_OSI 0a90: 0d 57 69 6e 64 6f 77 73 20 32 30 30 39 00 70 0a .Windows 2009.p. 0aa0: 01 5c 57 49 4e 37 70 0a 01 5c 2f 03 5f 53 42 5f .\WIN7p..\/._SB_ 0ab0: 47 44 43 4b 58 48 4f 53 a0 15 5c 5f 4f 53 49 0d GDCKXHOS..\_OSI. 0ac0: 4c 69 6e 75 78 00 70 0a 01 5c 4c 4e 55 58 a0 17 Linux.p..\LNUX.. 0ad0: 5c 5f 4f 53 49 0d 46 72 65 65 42 53 44 00 70 0a \_OSI.FreeBSD.p. 0ae0: 01 5c 4c 4e 55 58 a1 2d a0 2b 93 5c 53 43 4d 50 .\LNUX.-.+.\SCMP 0af0: 5c 5f 4f 53 5f 0d 4d 69 63 72 6f 73 6f 66 74 20 \_OS_.Microsoft 0b00: 57 69 6e 64 6f 77 73 20 4e 54 00 00 70 0a 01 5c Windows NT..p..\ 0b10: 57 4e 54 46 a0 12 92 95 5c 5f 52 45 56 0a 02 70 WNTF....\_REV..p 0b20: 0a 01 5c 48 38 44 52 70 0a 01 5c 4f 53 49 46 70 ..\H8DRp..\OSIFp 0b30: 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E 0b40: 43 5f 5f 41 43 5f 5f 5f 50 53 52 5c 50 57 52 53 C__AC___PSR\PWRS 0b50: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 4d \/._SB_PCI0LPC_M 0b60: 4f 55 5f 4d 48 49 44 a0 26 5c 4c 4e 55 58 5c 2f OU_MHID.&\LNUX\/ 0b70: 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ 0b80: 5f 53 41 55 4d 0a 02 5c 55 43 4d 53 0a 1c 70 5c _SAUM..\UCMS..p\ 0b90: 53 52 41 48 5c 2f 03 5f 53 42 5f 50 43 49 30 52 SRAH\/._SB_PCI0R 0ba0: 49 44 5f a0 1e 56 49 47 44 70 5c 53 52 48 45 5c ID_..VIGDp\SRHE\ 0bb0: 2f 04 5f 53 42 5f 50 43 49 30 56 49 44 5f 52 49 /._SB_PCI0VID_RI 0bc0: 44 5f a1 1a 70 5c 53 52 48 45 5c 2f 04 5f 53 42 D_..p\SRHE\/._SB 0bd0: 5f 50 43 49 30 50 45 47 5f 52 49 44 5f 70 5c 53 _PCI0PEG_RID_p\S 0be0: 52 45 31 5c 2f 04 5f 53 42 5f 50 43 49 30 45 58 RE1\/._SB_PCI0EX 0bf0: 50 31 52 49 44 5f 70 5c 53 52 45 32 5c 2f 04 5f P1RID_p\SRE2\/._ 0c00: 53 42 5f 50 43 49 30 45 58 50 32 52 49 44 5f 70 SB_PCI0EXP2RID_p 0c10: 5c 53 52 45 33 5c 2f 04 5f 53 42 5f 50 43 49 30 \SRE3\/._SB_PCI0 0c20: 45 58 50 33 52 49 44 5f 70 5c 53 52 55 37 5c 2f EXP3RID_p\SRU7\/ 0c30: 04 5f 53 42 5f 50 43 49 30 45 48 43 31 52 49 44 ._SB_PCI0EHC1RID 0c40: 5f 70 5c 53 52 55 38 5c 2f 04 5f 53 42 5f 50 43 _p\SRU8\/._SB_PC 0c50: 49 30 45 48 43 32 52 49 44 5f 70 5c 53 52 4c 50 I0EHC2RID_p\SRLP 0c60: 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 52 \/._SB_PCI0LPC_R 0c70: 49 44 5f 70 5c 53 52 53 41 5c 2f 04 5f 53 42 5f ID_p\SRSA\/._SB_ 0c80: 50 43 49 30 53 41 54 31 52 49 44 5f 70 5c 53 52 PCI0SAT1RID_p\SR 0c90: 53 4d 5c 2f 04 5f 53 42 5f 50 43 49 30 53 4d 42 SM\/._SB_PCI0SMB 0ca0: 55 52 49 44 5f a0 48 04 56 44 53 50 70 5c 56 48 URID_.H.VDSPp\VH 0cb0: 59 42 0a 05 0a 00 61 a0 36 7b 61 0a 80 00 a0 1a YB....a.6{a..... 0cc0: 5c 57 49 4e 37 a0 13 92 93 7b 61 0a 03 00 0a 03 \WIN7....{a..... 0cd0: 5c 56 48 59 42 0a 06 0a 03 a1 14 a0 12 93 7b 61 \VHYB.........{a 0ce0: 0a 03 00 0a 03 5c 56 48 59 42 0a 06 0a 02 5c 55 .....\VHYB....\U 0cf0: 43 4d 53 0a 1d 5b 82 4b 11 4c 4e 4b 41 08 5f 48 CMS..[.K.LNKA._H 0d00: 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 01 14 28 ID.A...._UID...( 0d10: 5f 53 54 41 00 a0 1c 92 56 50 49 52 5c 2f 04 5f _STA....VPIR\/._ 0d20: 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 52 41 a4 SB_PCI0LPC_PIRA. 0d30: 0a 09 a1 04 a4 0a 0b 08 5f 50 52 53 11 09 0a 06 ........_PRS.... 0d40: 23 f8 0e 18 79 00 14 2f 5f 44 49 53 00 7d 5c 2f #...y../_DIS.}\/ 0d50: 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 52 ._SB_PCI0LPC_PIR 0d60: 41 0a 80 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 A..\/._SB_PCI0LP 0d70: 43 5f 50 49 52 41 08 42 55 46 41 11 09 0a 06 23 C_PIRA.BUFA....# 0d80: 00 00 18 79 00 8b 42 55 46 41 0a 01 49 52 41 31 ...y..BUFA..IRA1 0d90: 14 3a 5f 43 52 53 00 7b 5c 2f 04 5f 53 42 5f 50 .:_CRS.{\/._SB_P 0da0: 43 49 30 4c 50 43 5f 50 49 52 41 0a 8f 60 a0 0e CI0LPC_PIRA..`.. 0db0: 56 50 49 52 60 79 0a 01 60 49 52 41 31 a1 08 70 VPIR`y..`IRA1..p 0dc0: 0a 00 49 52 41 31 a4 42 55 46 41 14 46 04 5f 53 ..IRA1.BUFA.F._S 0dd0: 52 53 01 8b 68 0a 01 49 52 41 32 82 49 52 41 32 RS..h..IRA2.IRA2 0de0: 60 7b 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 `{\/._SB_PCI0LPC 0df0: 5f 50 49 52 41 0a 70 61 7d 61 76 60 61 70 61 5c _PIRA.pa}av`apa\ 0e00: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 /._SB_PCI0LPC_PI 0e10: 52 41 5b 82 4b 11 4c 4e 4b 42 08 5f 48 49 44 0c RA[.K.LNKB._HID. 0e20: 41 d0 0c 0f 08 5f 55 49 44 0a 02 14 28 5f 53 54 A...._UID...(_ST 0e30: 41 00 a0 1c 92 56 50 49 52 5c 2f 04 5f 53 42 5f A....VPIR\/._SB_ 0e40: 50 43 49 30 4c 50 43 5f 50 49 52 42 a4 0a 09 a1 PCI0LPC_PIRB.... 0e50: 04 a4 0a 0b 08 5f 50 52 53 11 09 0a 06 23 f8 0e ....._PRS....#.. 0e60: 18 79 00 14 2f 5f 44 49 53 00 7d 5c 2f 04 5f 53 .y../_DIS.}\/._S 0e70: 42 5f 50 43 49 30 4c 50 43 5f 50 49 52 42 0a 80 B_PCI0LPC_PIRB.. 0e80: 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 50 \/._SB_PCI0LPC_P 0e90: 49 52 42 08 42 55 46 42 11 09 0a 06 23 00 00 18 IRB.BUFB....#... 0ea0: 79 00 8b 42 55 46 42 0a 01 49 52 42 31 14 3a 5f y..BUFB..IRB1.:_ 0eb0: 43 52 53 00 7b 5c 2f 04 5f 53 42 5f 50 43 49 30 CRS.{\/._SB_PCI0 0ec0: 4c 50 43 5f 50 49 52 42 0a 8f 60 a0 0e 56 50 49 LPC_PIRB..`..VPI 0ed0: 52 60 79 0a 01 60 49 52 42 31 a1 08 70 0a 00 49 R`y..`IRB1..p..I 0ee0: 52 42 31 a4 42 55 46 42 14 46 04 5f 53 52 53 01 RB1.BUFB.F._SRS. 0ef0: 8b 68 0a 01 49 52 42 32 82 49 52 42 32 60 7b 5c .h..IRB2.IRB2`{\ 0f00: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 /._SB_PCI0LPC_PI 0f10: 52 42 0a 70 61 7d 61 76 60 61 70 61 5c 2f 04 5f RB.pa}av`apa\/._ 0f20: 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 52 42 5b SB_PCI0LPC_PIRB[ 0f30: 82 4b 11 4c 4e 4b 43 08 5f 48 49 44 0c 41 d0 0c .K.LNKC._HID.A.. 0f40: 0f 08 5f 55 49 44 0a 03 14 28 5f 53 54 41 00 a0 .._UID...(_STA.. 0f50: 1c 92 56 50 49 52 5c 2f 04 5f 53 42 5f 50 43 49 ..VPIR\/._SB_PCI 0f60: 30 4c 50 43 5f 50 49 52 43 a4 0a 09 a1 04 a4 0a 0LPC_PIRC....... 0f70: 0b 08 5f 50 52 53 11 09 0a 06 23 f8 0e 18 79 00 .._PRS....#...y. 0f80: 14 2f 5f 44 49 53 00 7d 5c 2f 04 5f 53 42 5f 50 ./_DIS.}\/._SB_P 0f90: 43 49 30 4c 50 43 5f 50 49 52 43 0a 80 5c 2f 04 CI0LPC_PIRC..\/. 0fa0: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 52 43 _SB_PCI0LPC_PIRC 0fb0: 08 42 55 46 43 11 09 0a 06 23 00 00 18 79 00 8b .BUFC....#...y.. 0fc0: 42 55 46 43 0a 01 49 52 43 31 14 3a 5f 43 52 53 BUFC..IRC1.:_CRS 0fd0: 00 7b 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 .{\/._SB_PCI0LPC 0fe0: 5f 50 49 52 43 0a 8f 60 a0 0e 56 50 49 52 60 79 _PIRC..`..VPIR`y 0ff0: 0a 01 60 49 52 43 31 a1 08 70 0a 00 49 52 43 31 ..`IRC1..p..IRC1 1000: a4 42 55 46 43 14 46 04 5f 53 52 53 01 8b 68 0a .BUFC.F._SRS..h. 1010: 01 49 52 43 32 82 49 52 43 32 60 7b 5c 2f 04 5f .IRC2.IRC2`{\/._ 1020: 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 52 43 0a SB_PCI0LPC_PIRC. 1030: 70 61 7d 61 76 60 61 70 61 5c 2f 04 5f 53 42 5f pa}av`apa\/._SB_ 1040: 50 43 49 30 4c 50 43 5f 50 49 52 43 5b 82 4b 11 PCI0LPC_PIRC[.K. 1050: 4c 4e 4b 44 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f LNKD._HID.A...._ 1060: 55 49 44 0a 04 14 28 5f 53 54 41 00 a0 1c 92 56 UID...(_STA....V 1070: 50 49 52 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 PIR\/._SB_PCI0LP 1080: 43 5f 50 49 52 44 a4 0a 09 a1 04 a4 0a 0b 08 5f C_PIRD........._ 1090: 50 52 53 11 09 0a 06 23 f8 0e 18 79 00 14 2f 5f PRS....#...y../_ 10a0: 44 49 53 00 7d 5c 2f 04 5f 53 42 5f 50 43 49 30 DIS.}\/._SB_PCI0 10b0: 4c 50 43 5f 50 49 52 44 0a 80 5c 2f 04 5f 53 42 LPC_PIRD..\/._SB 10c0: 5f 50 43 49 30 4c 50 43 5f 50 49 52 44 08 42 55 _PCI0LPC_PIRD.BU 10d0: 46 44 11 09 0a 06 23 00 00 18 79 00 8b 42 55 46 FD....#...y..BUF 10e0: 44 0a 01 49 52 44 31 14 3a 5f 43 52 53 00 7b 5c D..IRD1.:_CRS.{\ 10f0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 /._SB_PCI0LPC_PI 1100: 52 44 0a 8f 60 a0 0e 56 50 49 52 60 79 0a 01 60 RD..`..VPIR`y..` 1110: 49 52 44 31 a1 08 70 0a 00 49 52 44 31 a4 42 55 IRD1..p..IRD1.BU 1120: 46 44 14 46 04 5f 53 52 53 01 8b 68 0a 01 49 52 FD.F._SRS..h..IR 1130: 44 32 82 49 52 44 32 60 7b 5c 2f 04 5f 53 42 5f D2.IRD2`{\/._SB_ 1140: 50 43 49 30 4c 50 43 5f 50 49 52 44 0a 70 61 7d PCI0LPC_PIRD.pa} 1150: 61 76 60 61 70 61 5c 2f 04 5f 53 42 5f 50 43 49 av`apa\/._SB_PCI 1160: 30 4c 50 43 5f 50 49 52 44 5b 82 4b 11 4c 4e 4b 0LPC_PIRD[.K.LNK 1170: 45 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 E._HID.A...._UID 1180: 0a 05 14 28 5f 53 54 41 00 a0 1c 92 56 50 49 52 ...(_STA....VPIR 1190: 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 50 \/._SB_PCI0LPC_P 11a0: 49 52 45 a4 0a 09 a1 04 a4 0a 0b 08 5f 50 52 53 IRE........._PRS 11b0: 11 09 0a 06 23 f8 0e 18 79 00 14 2f 5f 44 49 53 ....#...y../_DIS 11c0: 00 7d 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 .}\/._SB_PCI0LPC 11d0: 5f 50 49 52 45 0a 80 5c 2f 04 5f 53 42 5f 50 43 _PIRE..\/._SB_PC 11e0: 49 30 4c 50 43 5f 50 49 52 45 08 42 55 46 45 11 I0LPC_PIRE.BUFE. 11f0: 09 0a 06 23 00 00 18 79 00 8b 42 55 46 45 0a 01 ...#...y..BUFE.. 1200: 49 52 45 31 14 3a 5f 43 52 53 00 7b 5c 2f 04 5f IRE1.:_CRS.{\/._ 1210: 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 52 45 0a SB_PCI0LPC_PIRE. 1220: 8f 60 a0 0e 56 50 49 52 60 79 0a 01 60 49 52 45 .`..VPIR`y..`IRE 1230: 31 a1 08 70 0a 00 49 52 45 31 a4 42 55 46 45 14 1..p..IRE1.BUFE. 1240: 46 04 5f 53 52 53 01 8b 68 0a 01 49 52 45 32 82 F._SRS..h..IRE2. 1250: 49 52 45 32 60 7b 5c 2f 04 5f 53 42 5f 50 43 49 IRE2`{\/._SB_PCI 1260: 30 4c 50 43 5f 50 49 52 45 0a 70 61 7d 61 76 60 0LPC_PIRE.pa}av` 1270: 61 70 61 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 apa\/._SB_PCI0LP 1280: 43 5f 50 49 52 45 5b 82 4b 11 4c 4e 4b 46 08 5f C_PIRE[.K.LNKF._ 1290: 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 06 14 HID.A...._UID... 12a0: 28 5f 53 54 41 00 a0 1c 92 56 50 49 52 5c 2f 04 (_STA....VPIR\/. 12b0: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 52 46 _SB_PCI0LPC_PIRF 12c0: a4 0a 09 a1 04 a4 0a 0b 08 5f 50 52 53 11 09 0a ........._PRS... 12d0: 06 23 f8 0e 18 79 00 14 2f 5f 44 49 53 00 7d 5c .#...y../_DIS.}\ 12e0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 /._SB_PCI0LPC_PI 12f0: 52 46 0a 80 5c 2f 04 5f 53 42 5f 50 43 49 30 4c RF..\/._SB_PCI0L 1300: 50 43 5f 50 49 52 46 08 42 55 46 46 11 09 0a 06 PC_PIRF.BUFF.... 1310: 23 00 00 18 79 00 8b 42 55 46 46 0a 01 49 52 46 #...y..BUFF..IRF 1320: 31 14 3a 5f 43 52 53 00 7b 5c 2f 04 5f 53 42 5f 1.:_CRS.{\/._SB_ 1330: 50 43 49 30 4c 50 43 5f 50 49 52 46 0a 8f 60 a0 PCI0LPC_PIRF..`. 1340: 0e 56 50 49 52 60 79 0a 01 60 49 52 46 31 a1 08 .VPIR`y..`IRF1.. 1350: 70 0a 00 49 52 46 31 a4 42 55 46 46 14 46 04 5f p..IRF1.BUFF.F._ 1360: 53 52 53 01 8b 68 0a 01 49 52 46 32 82 49 52 46 SRS..h..IRF2.IRF 1370: 32 60 7b 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 2`{\/._SB_PCI0LP 1380: 43 5f 50 49 52 46 0a 70 61 7d 61 76 60 61 70 61 C_PIRF.pa}av`apa 1390: 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 50 \/._SB_PCI0LPC_P 13a0: 49 52 46 5b 82 4b 11 4c 4e 4b 47 08 5f 48 49 44 IRF[.K.LNKG._HID 13b0: 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 28 5f 53 .A...._UID...(_S 13c0: 54 41 00 a0 1c 92 56 50 49 52 5c 2f 04 5f 53 42 TA....VPIR\/._SB 13d0: 5f 50 43 49 30 4c 50 43 5f 50 49 52 47 a4 0a 09 _PCI0LPC_PIRG... 13e0: a1 04 a4 0a 0b 08 5f 50 52 53 11 09 0a 06 23 f8 ......_PRS....#. 13f0: 0e 18 79 00 14 2f 5f 44 49 53 00 7d 5c 2f 04 5f ..y../_DIS.}\/._ 1400: 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 52 47 0a SB_PCI0LPC_PIRG. 1410: 80 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ 1420: 50 49 52 47 08 42 55 46 47 11 09 0a 06 23 00 00 PIRG.BUFG....#.. 1430: 18 79 00 8b 42 55 46 47 0a 01 49 52 47 31 14 3a .y..BUFG..IRG1.: 1440: 5f 43 52 53 00 7b 5c 2f 04 5f 53 42 5f 50 43 49 _CRS.{\/._SB_PCI 1450: 30 4c 50 43 5f 50 49 52 47 0a 8f 60 a0 0e 56 50 0LPC_PIRG..`..VP 1460: 49 52 60 79 0a 01 60 49 52 47 31 a1 08 70 0a 00 IR`y..`IRG1..p.. 1470: 49 52 47 31 a4 42 55 46 47 14 46 04 5f 53 52 53 IRG1.BUFG.F._SRS 1480: 01 8b 68 0a 01 49 52 47 32 82 49 52 47 32 60 7b ..h..IRG2.IRG2`{ 1490: 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 50 \/._SB_PCI0LPC_P 14a0: 49 52 47 0a 70 61 7d 61 76 60 61 70 61 5c 2f 04 IRG.pa}av`apa\/. 14b0: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 52 47 _SB_PCI0LPC_PIRG 14c0: 5b 82 4b 11 4c 4e 4b 48 08 5f 48 49 44 0c 41 d0 [.K.LNKH._HID.A. 14d0: 0c 0f 08 5f 55 49 44 0a 08 14 28 5f 53 54 41 00 ..._UID...(_STA. 14e0: a0 1c 92 56 50 49 52 5c 2f 04 5f 53 42 5f 50 43 ...VPIR\/._SB_PC 14f0: 49 30 4c 50 43 5f 50 49 52 48 a4 0a 09 a1 04 a4 I0LPC_PIRH...... 1500: 0a 0b 08 5f 50 52 53 11 09 0a 06 23 f8 0e 18 79 ..._PRS....#...y 1510: 00 14 2f 5f 44 49 53 00 7d 5c 2f 04 5f 53 42 5f ../_DIS.}\/._SB_ 1520: 50 43 49 30 4c 50 43 5f 50 49 52 48 0a 80 5c 2f PCI0LPC_PIRH..\/ 1530: 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 52 ._SB_PCI0LPC_PIR 1540: 48 08 42 55 46 48 11 09 0a 06 23 00 00 18 79 00 H.BUFH....#...y. 1550: 8b 42 55 46 48 0a 01 49 52 48 31 14 3a 5f 43 52 .BUFH..IRH1.:_CR 1560: 53 00 7b 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 S.{\/._SB_PCI0LP 1570: 43 5f 50 49 52 48 0a 8f 60 a0 0e 56 50 49 52 60 C_PIRH..`..VPIR` 1580: 79 0a 01 60 49 52 48 31 a1 08 70 0a 00 49 52 48 y..`IRH1..p..IRH 1590: 31 a4 42 55 46 48 14 46 04 5f 53 52 53 01 8b 68 1.BUFH.F._SRS..h 15a0: 0a 01 49 52 48 32 82 49 52 48 32 60 7b 5c 2f 04 ..IRH2.IRH2`{\/. 15b0: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 50 49 52 48 _SB_PCI0LPC_PIRH 15c0: 0a 70 61 7d 61 76 60 61 70 61 5c 2f 04 5f 53 42 .pa}av`apa\/._SB 15d0: 5f 50 43 49 30 4c 50 43 5f 50 49 52 48 14 39 56 _PCI0LPC_PIRH.9V 15e0: 50 49 52 01 70 0a 01 60 a0 0a 7b 68 0a 80 00 70 PIR.p..`..{h...p 15f0: 0a 00 60 a1 21 7b 68 0a 0f 61 a0 09 95 61 0a 03 ..`.!{h..a...a.. 1600: 70 0a 00 60 a1 10 a0 0e 91 93 61 0a 08 93 61 0a p..`......a...a. 1610: 0d 70 0a 00 60 a4 60 5b 82 4f 47 4d 45 4d 5f 08 .p..`.`[.OGMEM_. 1620: 5f 48 49 44 0c 41 d0 0c 01 08 4d 45 4d 53 11 42 _HID.A....MEMS.B 1630: 0d 0a ce 86 09 00 01 00 00 00 00 00 00 0a 00 86 ................ 1640: 09 00 00 00 00 0c 00 00 00 00 00 86 09 00 00 00 ................ 1650: 40 0c 00 00 00 00 00 86 09 00 00 00 80 0c 00 00 @............... 1660: 00 00 00 86 09 00 00 00 c0 0c 00 00 00 00 00 86 ................ 1670: 09 00 00 00 00 0d 00 00 00 00 00 86 09 00 00 00 ................ 1680: 40 0d 00 00 00 00 00 86 09 00 00 00 80 0d 00 00 @............... 1690: 00 00 00 86 09 00 00 00 c0 0d 00 00 00 00 00 86 ................ 16a0: 09 00 00 00 00 0e 00 00 00 00 00 86 09 00 00 00 ................ 16b0: 40 0e 00 00 00 00 00 86 09 00 00 00 80 0e 00 00 @............... 16c0: 00 00 00 86 09 00 00 00 c0 0e 00 00 00 00 00 86 ................ 16d0: 09 00 00 00 00 0f 00 00 00 01 00 86 09 00 01 00 ................ 16e0: 00 10 00 00 00 ee 01 86 09 00 00 00 00 c0 fe 00 ................ 16f0: 00 14 00 86 09 00 00 00 c0 d4 fe 00 40 2b 01 79 ............@+.y 1700: 00 8a 4d 45 4d 53 0a 14 4d 43 30 4c 8a 4d 45 4d ..MEMS..MC0L.MEM 1710: 53 0a 20 4d 43 34 4c 8a 4d 45 4d 53 0a 2c 4d 43 S. MC4L.MEMS.,MC 1720: 38 4c 8a 4d 45 4d 53 0a 38 4d 43 43 4c 8a 4d 45 8L.MEMS.8MCCL.ME 1730: 4d 53 0a 44 4d 44 30 4c 8a 4d 45 4d 53 0a 50 4d MS.DMD0L.MEMS.PM 1740: 44 34 4c 8a 4d 45 4d 53 0a 5c 4d 44 38 4c 8a 4d D4L.MEMS.\MD8L.M 1750: 45 4d 53 0a 68 4d 44 43 4c 8a 4d 45 4d 53 0a 74 EMS.hMDCL.MEMS.t 1760: 4d 45 30 4c 8a 4d 45 4d 53 0a 80 4d 45 34 4c 8a ME0L.MEMS..ME4L. 1770: 4d 45 4d 53 0a 8c 4d 45 38 4c 8a 4d 45 4d 53 0a MEMS..ME8L.MEMS. 1780: 98 4d 45 43 4c 8d 4d 45 4d 53 0a 78 4d 43 30 57 .MECL.MEMS.xMC0W 1790: 8d 4d 45 4d 53 0a d8 4d 43 34 57 8d 4d 45 4d 53 .MEMS..MC4W.MEMS 17a0: 0b 38 01 4d 43 38 57 8d 4d 45 4d 53 0b 98 01 4d .8.MC8W.MEMS...M 17b0: 43 43 57 8d 4d 45 4d 53 0b f8 01 4d 44 30 57 8d CCW.MEMS...MD0W. 17c0: 4d 45 4d 53 0b 58 02 4d 44 34 57 8d 4d 45 4d 53 MEMS.X.MD4W.MEMS 17d0: 0b b8 02 4d 44 38 57 8d 4d 45 4d 53 0b 18 03 4d ...MD8W.MEMS...M 17e0: 44 43 57 8d 4d 45 4d 53 0b 78 03 4d 45 30 57 8d DCW.MEMS.x.ME0W. 17f0: 4d 45 4d 53 0b d8 03 4d 45 34 57 8d 4d 45 4d 53 MEMS...ME4W.MEMS 1800: 0b 38 04 4d 45 38 57 8d 4d 45 4d 53 0b 98 04 4d .8.ME8W.MEMS...M 1810: 45 43 57 8a 4d 45 4d 53 0a ac 4d 45 42 31 8a 4d ECW.MEMS..MEB1.M 1820: 45 4d 53 0a b0 4d 45 4c 31 8a 4d 45 4d 53 0a bc EMS..MEL1.MEMS.. 1830: 4d 45 4c 32 8a 4d 45 4d 53 0a c8 4d 45 4c 33 14 MEL2.MEMS..MEL3. 1840: 48 25 5f 43 52 53 00 7b 5c 2f 03 5f 53 42 5f 50 H%_CRS.{\/._SB_P 1850: 43 49 30 50 41 4d 31 0a 03 60 a0 18 60 70 0b 00 CI0PAM1..`..`p.. 1860: 40 4d 43 30 4c a0 0d 7b 60 0a 02 00 70 0a 01 4d @MC0L..{`...p..M 1870: 43 30 57 7b 5c 2f 03 5f 53 42 5f 50 43 49 30 50 C0W{\/._SB_PCI0P 1880: 41 4d 31 0a 30 60 a0 18 60 70 0b 00 40 4d 43 34 AM1.0`..`p..@MC4 1890: 4c a0 0d 7b 60 0a 20 00 70 0a 01 4d 43 34 57 7b L..{`. .p..MC4W{ 18a0: 5c 2f 03 5f 53 42 5f 50 43 49 30 50 41 4d 32 0a \/._SB_PCI0PAM2. 18b0: 03 60 a0 18 60 70 0b 00 40 4d 43 38 4c a0 0d 7b .`..`p..@MC8L..{ 18c0: 60 0a 02 00 70 0a 01 4d 43 38 57 7b 5c 2f 03 5f `...p..MC8W{\/._ 18d0: 53 42 5f 50 43 49 30 50 41 4d 32 0a 30 60 a0 18 SB_PCI0PAM2.0`.. 18e0: 60 70 0b 00 40 4d 43 43 4c a0 0d 7b 60 0a 20 00 `p..@MCCL..{`. . 18f0: 70 0a 01 4d 43 43 57 7b 5c 2f 03 5f 53 42 5f 50 p..MCCW{\/._SB_P 1900: 43 49 30 50 41 4d 33 0a 03 60 a0 18 60 70 0b 00 CI0PAM3..`..`p.. 1910: 40 4d 44 30 4c a0 0d 7b 60 0a 02 00 70 0a 01 4d @MD0L..{`...p..M 1920: 44 30 57 7b 5c 2f 03 5f 53 42 5f 50 43 49 30 50 D0W{\/._SB_PCI0P 1930: 41 4d 33 0a 30 60 a0 18 60 70 0b 00 40 4d 44 34 AM3.0`..`p..@MD4 1940: 4c a0 0d 7b 60 0a 20 00 70 0a 01 4d 44 34 57 7b L..{`. .p..MD4W{ 1950: 5c 2f 03 5f 53 42 5f 50 43 49 30 50 41 4d 34 0a \/._SB_PCI0PAM4. 1960: 03 60 a0 18 60 70 0b 00 40 4d 44 38 4c a0 0d 7b .`..`p..@MD8L..{ 1970: 60 0a 02 00 70 0a 01 4d 44 38 57 7b 5c 2f 03 5f `...p..MD8W{\/._ 1980: 53 42 5f 50 43 49 30 50 41 4d 34 0a 30 60 a0 18 SB_PCI0PAM4.0`.. 1990: 60 70 0b 00 40 4d 44 43 4c a0 0d 7b 60 0a 20 00 `p..@MDCL..{`. . 19a0: 70 0a 01 4d 44 43 57 7b 5c 2f 03 5f 53 42 5f 50 p..MDCW{\/._SB_P 19b0: 43 49 30 50 41 4d 35 0a 03 60 a0 18 60 70 0b 00 CI0PAM5..`..`p.. 19c0: 40 4d 45 30 4c a0 0d 7b 60 0a 02 00 70 0a 01 4d @ME0L..{`...p..M 19d0: 45 30 57 7b 5c 2f 03 5f 53 42 5f 50 43 49 30 50 E0W{\/._SB_PCI0P 19e0: 41 4d 35 0a 30 60 a0 18 60 70 0b 00 40 4d 45 34 AM5.0`..`p..@ME4 19f0: 4c a0 0d 7b 60 0a 20 00 70 0a 01 4d 45 34 57 7b L..{`. .p..ME4W{ 1a00: 5c 2f 03 5f 53 42 5f 50 43 49 30 50 41 4d 36 0a \/._SB_PCI0PAM6. 1a10: 03 60 a0 18 60 70 0b 00 40 4d 45 38 4c a0 0d 7b .`..`p..@ME8L..{ 1a20: 60 0a 02 00 70 0a 01 4d 45 38 57 7b 5c 2f 03 5f `...p..ME8W{\/._ 1a30: 53 42 5f 50 43 49 30 50 41 4d 36 0a 30 60 a0 18 SB_PCI0PAM6.0`.. 1a40: 60 70 0b 00 40 4d 45 43 4c a0 0d 7b 60 0a 20 00 `p..@MECL..{`. . 1a50: 70 0a 01 4d 45 43 57 74 5c 4d 45 4d 58 4d 45 42 p..MECWt\MEMXMEB 1a60: 31 4d 45 4c 31 a0 2d 92 93 5c 2f 05 5f 53 42 5f 1MEL1.-..\/._SB_ 1a70: 50 43 49 30 4c 50 43 5f 54 50 4d 5f 5f 53 54 41 PCI0LPC_TPM__STA 1a80: 0a 0f 70 0c 00 00 40 01 4d 45 4c 32 70 0a 00 4d ..p...@.MEL2p..M 1a90: 45 4c 33 a4 4d 45 4d 53 5b 82 48 10 4c 49 44 5f EL3.MEMS[.H.LID_ 1aa0: 08 5f 48 49 44 0c 41 d0 0c 0d 14 46 05 5f 4c 49 ._HID.A....F._LI 1ab0: 44 00 a0 49 04 90 93 5c 49 4c 4e 46 0a 00 93 5c D..I...\ILNF...\ 1ac0: 50 4c 55 58 0a 00 a0 1e 5c 48 38 44 52 a4 5c 2f PLUX....\H8DR.\/ 1ad0: 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ 1ae0: 5f 48 50 4c 44 a1 16 a0 0f 7b 5c 52 42 45 43 0a _HPLD....{\RBEC. 1af0: 46 0a 04 00 a4 0a 01 a1 04 a4 0a 00 a1 04 a4 0a F............... 1b00: 01 14 1f 5f 50 52 57 00 a0 0e 5c 4c 57 43 50 a4 ..._PRW...\LWCP. 1b10: 12 06 02 0a 1d 0a 04 a1 09 a4 12 06 02 0a 1d 0a ................ 1b20: 03 14 40 08 5f 50 53 57 01 a0 3f 5c 48 38 44 52 ..@._PSW..?\H8DR 1b30: a0 1c 68 70 0a 01 5c 2f 05 5f 53 42 5f 50 43 49 ..hp..\/._SB_PCI 1b40: 30 4c 50 43 5f 45 43 5f 5f 48 57 4c 4f a1 1b 70 0LPC_EC__HWLO..p 1b50: 0a 00 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 1b60: 5f 45 43 5f 5f 48 57 4c 4f a1 1c a0 0d 68 5c 4d _EC__HWLO....h\M 1b70: 42 45 43 0a 32 0a ff 0a 04 a1 0c 5c 4d 42 45 43 BEC.2......\MBEC 1b80: 0a 32 0a fb 0a 00 a0 1b 5c 4c 57 43 50 a0 0a 68 .2......\LWCP..h 1b90: 70 0a 01 5c 4c 57 45 4e a1 09 70 0a 00 5c 4c 57 p..\LWEN..p..\LW 1ba0: 45 4e 5b 82 44 08 53 4c 50 42 08 5f 48 49 44 0c EN[.D.SLPB._HID. 1bb0: 41 d0 0c 0e 14 0e 5f 50 52 57 00 a4 12 06 02 0a A....._PRW...... 1bc0: 1d 0a 03 14 44 06 5f 50 53 57 01 a0 3f 5c 48 38 ....D._PSW..?\H8 1bd0: 44 52 a0 1c 68 70 0a 01 5c 2f 05 5f 53 42 5f 50 DR..hp..\/._SB_P 1be0: 43 49 30 4c 50 43 5f 45 43 5f 5f 48 57 46 4e a1 CI0LPC_EC__HWFN. 1bf0: 1b 70 0a 00 5c 2f 05 5f 53 42 5f 50 43 49 30 4c .p..\/._SB_PCI0L 1c00: 50 43 5f 45 43 5f 5f 48 57 46 4e a1 1c a0 0d 68 PC_EC__HWFN....h 1c10: 5c 4d 42 45 43 0a 32 0a ff 0a 10 a1 0c 5c 4d 42 \MBEC.2......\MB 1c20: 45 43 0a 32 0a ef 0a 00 10 4e 19 5c 00 08 55 50 EC.2.....N.\..UP 1c30: 43 30 12 0a 04 0a ff 0a 00 0a 00 0a 00 08 50 4c C0............PL 1c40: 44 30 11 13 0a 10 81 00 00 00 00 00 00 00 91 12 D0.............. 1c50: 00 00 03 00 00 00 08 55 50 43 31 12 0a 04 0a ff .......UPC1..... 1c60: 0a 00 0a 00 0a 00 08 50 4c 44 31 11 13 0a 10 81 .......PLD1..... 1c70: 00 00 00 00 00 00 00 91 12 00 00 03 00 00 00 08 ................ 1c80: 55 50 43 32 12 0a 04 0a ff 0a ff 0a 00 0a 00 08 UPC2............ 1c90: 50 4c 44 32 11 13 0a 10 81 00 00 00 00 00 00 00 PLD2............ 1ca0: 33 1c 00 00 03 00 00 00 08 55 50 43 33 12 0a 04 3........UPC3... 1cb0: 0a ff 0a 02 0a 00 0a 00 08 50 4c 44 33 11 13 0a .........PLD3... 1cc0: 10 81 00 00 00 00 00 00 00 48 1d 00 00 00 00 00 .........H...... 1cd0: 00 08 55 50 43 34 12 0a 04 0a ff 0a 00 0a 00 0a ..UPC4.......... 1ce0: 00 08 50 4c 44 34 11 13 0a 10 81 00 00 00 00 00 ..PLD4.......... 1cf0: 00 00 69 0c 00 00 03 00 00 00 08 55 50 43 35 12 ..i........UPC5. 1d00: 0a 04 0a ff 0a 02 0a 00 0a 00 08 50 4c 44 35 11 ...........PLD5. 1d10: 13 0a 10 81 00 00 00 00 00 00 00 19 12 00 00 03 ................ 1d20: 00 00 00 08 55 50 43 36 12 0a 04 0a 00 0a ff 0a ....UPC6........ 1d30: 00 0a 00 08 50 4c 44 36 11 13 0a 10 81 00 00 00 ....PLD6........ 1d40: 00 00 00 00 30 1c 00 00 00 00 00 00 08 55 50 43 ....0........UPC 1d50: 37 12 0a 04 0a ff 0a ff 0a 00 0a 00 08 50 4c 44 7............PLD 1d60: 37 11 13 0a 10 81 00 00 00 00 00 00 00 33 1c 00 7............3.. 1d70: 00 03 00 00 00 08 55 50 43 39 12 0a 04 0a ff 0a ......UPC9...... 1d80: 00 0a 00 0a 00 08 50 4c 44 39 11 13 0a 10 81 00 ......PLD9...... 1d90: 00 00 00 00 00 00 59 12 00 00 03 00 00 00 08 55 ......Y........U 1da0: 50 43 49 12 0a 04 0a ff 0a ff 0a 00 0a 00 08 50 PCI............P 1db0: 4c 44 49 11 13 0a 10 81 00 00 00 00 00 00 00 30 LDI............0 1dc0: 1c 00 00 00 00 00 00 5b 82 81 e6 06 50 43 49 30 .......[....PCI0 1dd0: 08 5f 42 42 4e 0a 00 08 5f 41 44 52 0a 00 08 52 ._BBN..._ADR...R 1de0: 49 44 5f 0a 00 08 5f 53 33 44 0a 02 08 4c 52 52 ID_..._S3D...LRR 1df0: 54 12 47 1e 16 12 15 04 0c ff ff 01 00 0a 00 5c T.G............\ 1e00: 2e 5f 53 42 5f 4c 4e 4b 41 0a 00 12 15 04 0c ff ._SB_LNKA....... 1e10: ff 02 00 0a 00 5c 2e 5f 53 42 5f 4c 4e 4b 41 0a .....\._SB_LNKA. 1e20: 00 12 15 04 0c ff ff 14 00 0a 00 5c 2e 5f 53 42 ...........\._SB 1e30: 5f 4c 4e 4b 41 0a 00 12 15 04 0c ff ff 16 00 0a _LNKA........... 1e40: 00 5c 2e 5f 53 42 5f 4c 4e 4b 41 0a 00 12 15 04 .\._SB_LNKA..... 1e50: 0c ff ff 16 00 0a 01 5c 2e 5f 53 42 5f 4c 4e 4b .......\._SB_LNK 1e60: 44 0a 00 12 15 04 0c ff ff 16 00 0a 02 5c 2e 5f D............\._ 1e70: 53 42 5f 4c 4e 4b 43 0a 00 12 15 04 0c ff ff 16 SB_LNKC......... 1e80: 00 0a 03 5c 2e 5f 53 42 5f 4c 4e 4b 42 0a 00 12 ...\._SB_LNKB... 1e90: 15 04 0c ff ff 19 00 0a 00 5c 2e 5f 53 42 5f 4c .........\._SB_L 1ea0: 4e 4b 45 0a 00 12 15 04 0c ff ff 1a 00 0a 00 5c NKE............\ 1eb0: 2e 5f 53 42 5f 4c 4e 4b 41 0a 00 12 15 04 0c ff ._SB_LNKA....... 1ec0: ff 1b 00 0a 00 5c 2e 5f 53 42 5f 4c 4e 4b 47 0a .....\._SB_LNKG. 1ed0: 00 12 15 04 0c ff ff 1c 00 0a 00 5c 2e 5f 53 42 ...........\._SB 1ee0: 5f 4c 4e 4b 41 0a 00 12 15 04 0c ff ff 1c 00 0a _LNKA........... 1ef0: 01 5c 2e 5f 53 42 5f 4c 4e 4b 42 0a 00 12 15 04 .\._SB_LNKB..... 1f00: 0c ff ff 1c 00 0a 02 5c 2e 5f 53 42 5f 4c 4e 4b .......\._SB_LNK 1f10: 43 0a 00 12 15 04 0c ff ff 1c 00 0a 03 5c 2e 5f C............\._ 1f20: 53 42 5f 4c 4e 4b 44 0a 00 12 15 04 0c ff ff 1d SB_LNKD......... 1f30: 00 0a 00 5c 2e 5f 53 42 5f 4c 4e 4b 48 0a 00 12 ...\._SB_LNKH... 1f40: 15 04 0c ff ff 1d 00 0a 01 5c 2e 5f 53 42 5f 4c .........\._SB_L 1f50: 4e 4b 44 0a 00 12 15 04 0c ff ff 1d 00 0a 02 5c NKD............\ 1f60: 2e 5f 53 42 5f 4c 4e 4b 41 0a 00 12 15 04 0c ff ._SB_LNKA....... 1f70: ff 1d 00 0a 03 5c 2e 5f 53 42 5f 4c 4e 4b 43 0a .....\._SB_LNKC. 1f80: 00 12 15 04 0c ff ff 1f 00 0a 00 5c 2e 5f 53 42 ...........\._SB 1f90: 5f 4c 4e 4b 46 0a 00 12 15 04 0c ff ff 1f 00 0a _LNKF........... 1fa0: 01 5c 2e 5f 53 42 5f 4c 4e 4b 44 0a 00 12 15 04 .\._SB_LNKD..... 1fb0: 0c ff ff 1f 00 0a 02 5c 2e 5f 53 42 5f 4c 4e 4b .......\._SB_LNK 1fc0: 43 0a 00 12 15 04 0c ff ff 1f 00 0a 03 5c 2e 5f C............\._ 1fd0: 53 42 5f 4c 4e 4b 41 0a 00 08 41 52 52 54 12 47 SB_LNKA...ARRT.G 1fe0: 13 16 12 0d 04 0c ff ff 01 00 0a 00 0a 00 0a 10 ................ 1ff0: 12 0d 04 0c ff ff 02 00 0a 00 0a 00 0a 10 12 0d ................ 2000: 04 0c ff ff 14 00 0a 00 0a 00 0a 10 12 0d 04 0c ................ 2010: ff ff 16 00 0a 00 0a 00 0a 10 12 0d 04 0c ff ff ................ 2020: 16 00 0a 01 0a 00 0a 13 12 0d 04 0c ff ff 16 00 ................ 2030: 0a 02 0a 00 0a 12 12 0d 04 0c ff ff 16 00 0a 03 ................ 2040: 0a 00 0a 11 12 0d 04 0c ff ff 19 00 0a 00 0a 00 ................ 2050: 0a 14 12 0d 04 0c ff ff 1a 00 0a 00 0a 00 0a 10 ................ 2060: 12 0d 04 0c ff ff 1b 00 0a 00 0a 00 0a 16 12 0d ................ 2070: 04 0c ff ff 1c 00 0a 00 0a 00 0a 10 12 0d 04 0c ................ 2080: ff ff 1c 00 0a 01 0a 00 0a 11 12 0d 04 0c ff ff ................ 2090: 1c 00 0a 02 0a 00 0a 12 12 0d 04 0c ff ff 1c 00 ................ 20a0: 0a 03 0a 00 0a 13 12 0d 04 0c ff ff 1d 00 0a 00 ................ 20b0: 0a 00 0a 17 12 0d 04 0c ff ff 1d 00 0a 01 0a 00 ................ 20c0: 0a 13 12 0d 04 0c ff ff 1d 00 0a 02 0a 00 0a 10 ................ 20d0: 12 0d 04 0c ff ff 1d 00 0a 03 0a 00 0a 12 12 0d ................ 20e0: 04 0c ff ff 1f 00 0a 00 0a 00 0a 15 12 0d 04 0c ................ 20f0: ff ff 1f 00 0a 01 0a 00 0a 13 12 0d 04 0c ff ff ................ 2100: 1f 00 0a 02 0a 00 0a 12 12 0d 04 0c ff ff 1f 00 ................ 2110: 0a 03 0a 00 0a 10 14 19 5f 50 52 54 00 a0 0b 5c ........_PRT...\ 2120: 47 50 49 43 a4 41 52 52 54 a1 06 a4 4c 52 52 54 GPIC.ARRT...LRRT 2130: 08 5f 48 49 44 0c 41 d0 0a 08 08 5f 43 49 44 0c ._HID.A...._CID. 2140: 41 d0 0a 03 5b 80 4d 48 43 53 02 0a 40 0a c0 5b A...[.MHCS..@..[ 2150: 81 36 4d 48 43 53 03 00 40 20 50 41 4d 30 08 50 .6MHCS..@ PAM0.P 2160: 41 4d 31 08 50 41 4d 32 08 50 41 4d 33 08 50 41 AM1.PAM2.PAM3.PA 2170: 4d 34 08 50 41 4d 35 08 50 41 4d 36 08 00 48 1a M4.PAM5.PAM6..H. 2180: 00 14 54 4c 55 44 0c 08 5f 43 52 53 11 45 1c 0b ..TLUD.._CRS.E.. 2190: c0 01 88 0d 00 02 0c 00 00 00 00 00 ff 00 00 00 ................ 21a0: 00 01 47 01 f8 0c f8 0c 01 08 88 0d 00 01 0c 03 ..G............. 21b0: 00 00 00 00 f7 0c 00 00 f8 0c 88 0d 00 01 0c 03 ................ 21c0: 00 00 00 0d ff ff 00 00 00 f3 87 17 00 00 0c 03 ................ 21d0: 00 00 00 00 00 00 0a 00 ff ff 0b 00 00 00 00 00 ................ 21e0: 00 00 02 00 87 17 00 00 0c 03 00 00 00 00 00 00 ................ 21f0: 0c 00 ff 3f 0c 00 00 00 00 00 00 40 00 00 87 17 ...?.......@.... 2200: 00 00 0c 03 00 00 00 00 00 40 0c 00 ff 7f 0c 00 .........@...... 2210: 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 .....@.......... 2220: 00 00 00 80 0c 00 ff bf 0c 00 00 00 00 00 00 40 ...............@ 2230: 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0c 00 ................ 2240: ff ff 0c 00 00 00 00 00 00 40 00 00 87 17 00 00 .........@...... 2250: 0c 03 00 00 00 00 00 00 0d 00 ff 3f 0d 00 00 00 ...........?.... 2260: 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 ...@............ 2270: 00 40 0d 00 ff 7f 0d 00 00 00 00 00 00 40 00 00 .@...........@.. 2280: 87 17 00 00 0c 03 00 00 00 00 00 80 0d 00 ff bf ................ 2290: 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 .......@........ 22a0: 00 00 00 00 00 c0 0d 00 ff ff 0d 00 00 00 00 00 ................ 22b0: 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 00 .@.............. 22c0: 0e 00 ff 3f 0e 00 00 00 00 00 00 40 00 00 87 17 ...?.......@.... 22d0: 00 00 0c 03 00 00 00 00 00 40 0e 00 ff 7f 0e 00 .........@...... 22e0: 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 .....@.......... 22f0: 00 00 00 80 0e 00 ff bf 0e 00 00 00 00 00 00 40 ...............@ 2300: 00 00 87 17 00 00 0c 03 00 00 00 00 00 c0 0e 00 ................ 2310: ff ff 0e 00 00 00 00 00 00 40 00 00 87 17 00 00 .........@...... 2320: 0c 03 00 00 00 00 00 00 10 00 ff ff bf fe 00 00 ................ 2330: 00 00 00 00 b0 fe 87 17 00 00 0c 03 00 00 00 00 ................ 2340: 00 00 d4 fe ff bf d4 fe 00 00 00 00 00 c0 00 00 ................ 2350: 79 00 8a 5f 43 52 53 0a 68 43 30 4c 4e 8a 5f 43 y.._CRS.hC0LN._C 2360: 52 53 0a 82 43 34 4c 4e 8a 5f 43 52 53 0a 9c 43 RS..C4LN._CRS..C 2370: 38 4c 4e 8a 5f 43 52 53 0a b6 43 43 4c 4e 8a 5f 8LN._CRS..CCLN._ 2380: 43 52 53 0a d0 44 30 4c 4e 8a 5f 43 52 53 0a ea CRS..D0LN._CRS.. 2390: 44 34 4c 4e 8a 5f 43 52 53 0b 04 01 44 38 4c 4e D4LN._CRS...D8LN 23a0: 8a 5f 43 52 53 0b 1e 01 44 43 4c 4e 8a 5f 43 52 ._CRS...DCLN._CR 23b0: 53 0b 38 01 45 30 4c 4e 8a 5f 43 52 53 0b 52 01 S.8.E0LN._CRS.R. 23c0: 45 34 4c 4e 8a 5f 43 52 53 0b 6c 01 45 38 4c 4e E4LN._CRS.l.E8LN 23d0: 8a 5f 43 52 53 0b 86 01 45 43 4c 4e 8a 5f 43 52 ._CRS...ECLN._CR 23e0: 53 0b 94 01 58 58 4d 4e 8a 5f 43 52 53 0b 98 01 S...XXMN._CRS... 23f0: 58 58 4d 58 8a 5f 43 52 53 0b a0 01 58 58 4c 4e XXMX._CRS...XXLN 2400: 8a 5f 43 52 53 0b ae 01 46 34 4d 4e 8a 5f 43 52 ._CRS...F4MN._CR 2410: 53 0b b2 01 46 34 4d 58 8a 5f 43 52 53 0b ba 01 S...F4MX._CRS... 2420: 46 34 4c 4e 8b 5f 43 52 53 0a 0a 42 30 4d 58 8b F4LN._CRS..B0MX. 2430: 5f 43 52 53 0a 0e 42 30 4c 4e 14 4e 12 5f 49 4e _CRS..B0LN.N._IN 2440: 49 08 70 0a 3f 42 30 4d 58 70 72 0a 3f 0a 01 00 I.p.?B0MXpr.?... 2450: 42 30 4c 4e a0 11 92 5c 4f 53 49 46 5c 2e 5f 53 B0LN...\OSIF\._S 2460: 42 5f 5f 49 4e 49 79 54 4c 55 44 0a 14 60 70 60 B__INIyTLUD..`p` 2470: 5c 4d 45 4d 58 70 60 58 58 4d 4e 72 74 58 58 4d \MEMXp`XXMNrtXXM 2480: 58 58 58 4d 4e 00 0a 01 58 58 4c 4e a0 10 93 5c XXXMN...XXLN...\ 2490: 54 50 4d 50 0a 00 70 0a 00 46 34 4c 4e a0 10 7b TPMP..p..F4LN..{ 24a0: 50 41 4d 31 0a 03 00 70 0a 00 43 30 4c 4e a0 10 PAM1...p..C0LN.. 24b0: 7b 50 41 4d 31 0a 30 00 70 0a 00 43 34 4c 4e a0 {PAM1.0.p..C4LN. 24c0: 10 7b 50 41 4d 32 0a 03 00 70 0a 00 43 38 4c 4e .{PAM2...p..C8LN 24d0: a0 10 7b 50 41 4d 32 0a 30 00 70 0a 00 43 43 4c ..{PAM2.0.p..CCL 24e0: 4e a0 10 7b 50 41 4d 33 0a 03 00 70 0a 00 44 30 N..{PAM3...p..D0 24f0: 4c 4e a0 10 7b 50 41 4d 33 0a 30 00 70 0a 00 44 LN..{PAM3.0.p..D 2500: 34 4c 4e a0 10 7b 50 41 4d 34 0a 03 00 70 0a 00 4LN..{PAM4...p.. 2510: 44 38 4c 4e a0 10 7b 50 41 4d 34 0a 30 00 70 0a D8LN..{PAM4.0.p. 2520: 00 44 43 4c 4e a0 10 7b 50 41 4d 35 0a 03 00 70 .DCLN..{PAM5...p 2530: 0a 00 45 30 4c 4e a0 10 7b 50 41 4d 35 0a 30 00 ..E0LN..{PAM5.0. 2540: 70 0a 00 45 34 4c 4e a0 10 7b 50 41 4d 36 0a 03 p..E4LN..{PAM6.. 2550: 00 70 0a 00 45 38 4c 4e a0 10 7b 50 41 4d 36 0a .p..E8LN..{PAM6. 2560: 30 00 70 0a 00 45 43 4c 4e 08 53 55 50 50 0a 00 0.p..ECLN.SUPP.. 2570: 08 43 54 52 4c 0a 00 14 4d 2b 5f 4f 53 43 04 8a .CTRL...M+_OSC.. 2580: 6b 0a 00 43 44 57 31 8a 6b 0a 04 43 44 57 32 8a k..CDW1.k..CDW2. 2590: 6b 0a 08 43 44 57 33 a0 2c 5c 2f 04 5f 53 42 5f k..CDW3.,\/._SB_ 25a0: 50 43 49 30 58 48 43 49 43 55 49 44 68 a4 5c 2f PCI0XHCICUIDh.\/ 25b0: 04 5f 53 42 5f 50 43 49 30 58 48 43 49 50 4f 53 ._SB_PCI0XHCIPOS 25c0: 43 69 6a 6b a0 41 26 93 68 11 13 0a 10 5b 4d db Cijk.A&.h....[M. 25d0: 33 f7 1f 1c 40 96 57 74 41 c0 3d d7 66 70 43 44 3...@.WtA.=.fpCD 25e0: 57 32 53 55 50 50 70 43 44 57 33 43 54 52 4c 7b W2SUPPpCDW3CTRL{ 25f0: 43 54 52 4c 0a 0d 43 54 52 4c a0 49 1f 92 7b 43 CTRL..CTRL.I..{C 2600: 44 57 31 0a 01 00 a0 4a 0c 7b 43 54 52 4c 0a 01 DW1....J.{CTRL.. 2610: 00 a0 33 92 5c 56 49 47 44 70 0a 00 5c 2f 04 5f ..3.\VIGDp..\/._ 2620: 53 42 5f 50 43 49 30 50 45 47 5f 48 50 47 50 70 SB_PCI0PEG_HPGPp 2630: 0a 00 5c 2f 04 5f 53 42 5f 50 43 49 30 50 45 47 ..\/._SB_PCI0PEG 2640: 5f 47 4d 47 50 70 0a 00 5c 2f 04 5f 53 42 5f 50 _GMGPp..\/._SB_P 2650: 43 49 30 45 58 50 31 48 50 43 45 70 0a 01 5c 2f CI0EXP1HPCEp..\/ 2660: 04 5f 53 42 5f 50 43 49 30 45 58 50 31 48 50 43 ._SB_PCI0EXP1HPC 2670: 53 70 0a 01 5c 2f 04 5f 53 42 5f 50 43 49 30 45 Sp..\/._SB_PCI0E 2680: 58 50 31 50 44 43 5f 70 0a 00 5c 2f 04 5f 53 42 XP1PDC_p..\/._SB 2690: 5f 50 43 49 30 45 58 50 33 48 50 43 45 70 0a 01 _PCI0EXP3HPCEp.. 26a0: 5c 2f 04 5f 53 42 5f 50 43 49 30 45 58 50 33 48 \/._SB_PCI0EXP3H 26b0: 50 43 53 70 0a 01 5c 2f 04 5f 53 42 5f 50 43 49 PCSp..\/._SB_PCI 26c0: 30 45 58 50 33 50 44 43 5f 70 0a 01 5c 4e 48 50 0EXP3PDC_p..\NHP 26d0: 53 a0 42 12 7b 43 54 52 4c 0a 04 00 a0 33 92 5c S.B.{CTRL....3.\ 26e0: 56 49 47 44 70 0a 00 5c 2f 04 5f 53 42 5f 50 43 VIGDp..\/._SB_PC 26f0: 49 30 50 45 47 5f 50 4d 47 50 70 0a 00 5c 2f 04 I0PEG_PMGPp..\/. 2700: 5f 53 42 5f 50 43 49 30 50 45 47 5f 47 4d 47 50 _SB_PCI0PEG_GMGP 2710: a0 41 04 5c 2f 04 5f 53 42 5f 50 43 49 30 45 58 .A.\/._SB_PCI0EX 2720: 50 31 50 4d 43 45 70 0a 00 5c 2f 04 5f 53 42 5f P1PMCEp..\/._SB_ 2730: 50 43 49 30 45 58 50 31 50 4d 43 45 70 0a 01 5c PCI0EXP1PMCEp..\ 2740: 2f 04 5f 53 42 5f 50 43 49 30 45 58 50 31 50 4d /._SB_PCI0EXP1PM 2750: 43 53 a0 41 04 5c 2f 04 5f 53 42 5f 50 43 49 30 CS.A.\/._SB_PCI0 2760: 45 58 50 32 50 4d 43 45 70 0a 00 5c 2f 04 5f 53 EXP2PMCEp..\/._S 2770: 42 5f 50 43 49 30 45 58 50 32 50 4d 43 45 70 0a B_PCI0EXP2PMCEp. 2780: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 45 58 50 32 .\/._SB_PCI0EXP2 2790: 50 4d 43 53 a0 41 04 5c 2f 04 5f 53 42 5f 50 43 PMCS.A.\/._SB_PC 27a0: 49 30 45 58 50 33 50 4d 43 45 70 0a 00 5c 2f 04 I0EXP3PMCEp..\/. 27b0: 5f 53 42 5f 50 43 49 30 45 58 50 33 50 4d 43 45 _SB_PCI0EXP3PMCE 27c0: 70 0a 01 5c 2f 04 5f 53 42 5f 50 43 49 30 45 58 p..\/._SB_PCI0EX 27d0: 50 33 50 4d 43 53 70 0a 00 5c 2f 04 5f 53 42 5f P3PMCSp..\/._SB_ 27e0: 50 43 49 30 4c 50 43 5f 45 58 50 45 70 0a 01 5c PCI0LPC_EXPEp..\ 27f0: 4e 50 4d 45 a0 11 92 93 69 0a 01 7d 43 44 57 31 NPME....i..}CDW1 2800: 0a 0a 43 44 57 31 a0 16 92 93 43 44 57 33 43 54 ..CDW1....CDW3CT 2810: 52 4c 7d 43 44 57 31 0a 10 43 44 57 31 70 43 54 RL}CDW1..CDW1pCT 2820: 52 4c 43 44 57 33 a1 0c 7d 43 44 57 31 0a 06 43 RLCDW3..}CDW1..C 2830: 44 57 31 a4 6b 5b 01 4d 44 47 53 07 08 56 44 45 DW1.k[.MDGS..VDE 2840: 45 0a 01 08 56 44 44 41 11 03 0a 02 8d 56 44 44 E...VDDA.....VDD 2850: 41 0a 00 56 55 50 43 8d 56 44 44 41 0a 01 56 51 A..VUPC.VDDA..VQ 2860: 44 4c 8d 56 44 44 41 0a 02 56 51 44 43 8d 56 44 DL.VDDA..VQDC.VD 2870: 44 41 0a 03 56 51 44 30 8d 56 44 44 41 0a 04 56 DA..VQD0.VDDA..V 2880: 51 44 31 8d 56 44 44 41 0a 05 56 51 44 32 8d 56 QD1.VDDA..VQD2.V 2890: 44 44 41 0a 06 56 53 44 4c 8d 56 44 44 41 0a 07 DDA..VSDL.VDDA.. 28a0: 56 53 44 43 8d 56 44 44 41 0a 08 56 53 44 30 8d VSDC.VDDA..VSD0. 28b0: 56 44 44 41 0a 09 56 53 44 31 8d 56 44 44 41 0a VDDA..VSD1.VDDA. 28c0: 0a 56 53 44 32 8d 56 44 44 41 0a 0b 56 53 44 33 .VSD2.VDDA..VSD3 28d0: 8d 56 44 44 41 0a 0c 56 53 44 34 8d 56 44 44 41 .VDDA..VSD4.VDDA 28e0: 0a 0d 56 53 44 35 8d 56 44 44 41 0a 0e 4d 53 57 ..VSD5.VDDA..MSW 28f0: 54 5b 82 87 51 01 56 49 44 5f 08 5f 41 44 52 0c T[..Q.VID_._ADR. 2900: 00 00 02 00 08 52 49 44 5f 0a 00 5b 80 56 50 43 .....RID_..[.VPC 2910: 47 02 0a 00 0b 00 01 5b 81 0e 56 50 43 47 03 00 G......[..VPCG.. 2920: 40 6a 56 50 57 52 08 08 4d 49 44 4c 0b 00 04 08 @jVPWR..MIDL.... 2930: 4d 49 44 43 0b 00 01 08 4d 49 44 30 0b 00 03 08 MIDC....MID0.... 2940: 4d 49 44 31 0b 01 03 08 4d 49 44 32 0b 02 03 08 MID1....MID2.... 2950: 4d 49 44 33 0b 03 03 08 4d 49 44 34 0b 04 03 08 MID3....MID4.... 2960: 4d 49 44 35 0b 05 03 08 5f 53 33 44 0a 03 14 1a MID5...._S3D.... 2970: 5f 49 4e 49 00 70 5c 2f 03 5f 53 42 5f 4c 49 44 _INI.p\/._SB_LID 2980: 5f 5f 4c 49 44 43 4c 49 44 14 07 5f 50 53 30 00 __LIDCLID.._PS0. 2990: a3 14 07 5f 50 53 31 00 a3 14 07 5f 50 53 32 00 ..._PS1...._PS2. 29a0: a3 14 07 5f 50 53 33 00 a3 14 0c 56 53 57 54 00 ..._PS3....VSWT. 29b0: 47 48 44 53 0a 00 14 36 56 4c 4f 43 01 a0 2f 93 GHDS...6VLOC../. 29c0: 68 5c 2f 03 5f 53 42 5f 4c 49 44 5f 5f 4c 49 44 h\/._SB_LID__LID 29d0: 5c 56 53 4c 44 68 a0 16 93 56 50 57 52 0a 00 70 \VSLDh...VPWR..p 29e0: 68 43 4c 49 44 47 4e 4f 54 0a 02 0a 00 14 4c 07 hCLIDGNOT.....L. 29f0: 5f 44 4f 53 01 7b 68 0a 03 68 a0 3a 93 68 0a 02 _DOS.{h..h.:.h.. 2a00: 70 0a 14 60 a2 30 60 76 60 5b 23 4d 44 47 53 ff p..`.0`v`[#MDGS. 2a10: ff a0 19 93 0a 00 4d 53 57 54 70 0a 01 4d 53 57 ......MSWTp..MSW 2a20: 54 70 0a 00 60 70 68 56 44 45 45 5b 27 4d 44 47 Tp..`phVDEE['MDG 2a30: 53 5b 22 0a c8 a1 34 5b 23 4d 44 47 53 ff ff a0 S["...4[#MDGS... 2a40: 0f 93 56 44 45 45 0a 02 70 0a 00 4d 53 57 54 a0 ..VDEE..p..MSWT. 2a50: 0c 94 68 0a 02 70 0a 01 56 44 45 45 a1 07 70 68 ..h..p..VDEE..ph 2a60: 56 44 45 45 5b 27 4d 44 47 53 14 4c 57 5f 44 4f VDEE['MDGS.LW_DO 2a70: 44 00 70 0a 00 4e 44 49 44 a0 0e 92 93 44 49 44 D.p..NDID....DID 2a80: 4c 0a 00 75 4e 44 49 44 a0 0e 92 93 44 44 4c 32 L..uNDID....DDL2 2a90: 0a 00 75 4e 44 49 44 a0 0e 92 93 44 44 4c 33 0a ..uNDID....DDL3. 2aa0: 00 75 4e 44 49 44 a0 0e 92 93 44 44 4c 34 0a 00 .uNDID....DDL4.. 2ab0: 75 4e 44 49 44 a0 0e 92 93 44 44 4c 35 0a 00 75 uNDID....DDL5..u 2ac0: 4e 44 49 44 a0 0e 92 93 44 44 4c 36 0a 00 75 4e NDID....DDL6..uN 2ad0: 44 49 44 a0 0e 92 93 44 44 4c 37 0a 00 75 4e 44 DID....DDL7..uND 2ae0: 49 44 a0 0e 92 93 44 44 4c 38 0a 00 75 4e 44 49 ID....DDL8..uNDI 2af0: 44 a0 33 93 4e 44 49 44 0a 01 08 54 4d 50 31 12 D.3.NDID...TMP1. 2b00: 07 01 0c ff ff ff ff 70 7d 0c 00 00 01 80 7b 0b .......p}.....{. 2b10: 0f 0f 44 49 44 4c 00 00 88 54 4d 50 31 0a 00 00 ..DIDL...TMP1... 2b20: a4 54 4d 50 31 a0 42 05 93 4e 44 49 44 0a 02 08 .TMP1.B..NDID... 2b30: 54 4d 50 32 12 0c 02 0c ff ff ff ff 0c ff ff ff TMP2............ 2b40: ff 70 7d 0c 00 00 01 80 7b 0b 0f 0f 44 49 44 4c .p}.....{...DIDL 2b50: 00 00 88 54 4d 50 32 0a 00 00 70 7d 0c 00 00 01 ...TMP2...p}.... 2b60: 80 7b 0b 0f 0f 44 44 4c 32 00 00 88 54 4d 50 32 .{...DDL2...TMP2 2b70: 0a 01 00 a4 54 4d 50 32 a0 40 07 93 4e 44 49 44 ....TMP2.@..NDID 2b80: 0a 03 08 54 4d 50 33 12 11 03 0c ff ff ff ff 0c ...TMP3......... 2b90: ff ff ff ff 0c ff ff ff ff 70 7d 0c 00 00 01 80 .........p}..... 2ba0: 7b 0b 0f 0f 44 49 44 4c 00 00 88 54 4d 50 33 0a {...DIDL...TMP3. 2bb0: 00 00 70 7d 0c 00 00 01 80 7b 0b 0f 0f 44 44 4c ..p}.....{...DDL 2bc0: 32 00 00 88 54 4d 50 33 0a 01 00 70 7d 0c 00 00 2...TMP3...p}... 2bd0: 01 80 7b 0b 0f 0f 44 44 4c 33 00 00 88 54 4d 50 ..{...DDL3...TMP 2be0: 33 0a 02 00 a4 54 4d 50 33 a0 4e 08 93 4e 44 49 3....TMP3.N..NDI 2bf0: 44 0a 04 08 54 4d 50 34 12 16 04 0c ff ff ff ff D...TMP4........ 2c00: 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 70 ...............p 2c10: 7d 0c 00 00 01 80 7b 0b 0f 0f 44 49 44 4c 00 00 }.....{...DIDL.. 2c20: 88 54 4d 50 34 0a 00 00 70 7d 0c 00 00 01 80 7b .TMP4...p}.....{ 2c30: 0b 0f 0f 44 44 4c 32 00 00 88 54 4d 50 34 0a 01 ...DDL2...TMP4.. 2c40: 00 70 7d 0c 00 00 01 80 7b 0b 0f 0f 44 44 4c 33 .p}.....{...DDL3 2c50: 00 00 88 54 4d 50 34 0a 02 00 70 7d 0c 00 00 01 ...TMP4...p}.... 2c60: 80 7b 0b 0f 0f 44 44 4c 34 00 00 88 54 4d 50 34 .{...DDL4...TMP4 2c70: 0a 03 00 a4 54 4d 50 34 a0 4c 0a 93 4e 44 49 44 ....TMP4.L..NDID 2c80: 0a 05 08 54 4d 50 35 12 1b 05 0c ff ff ff ff 0c ...TMP5......... 2c90: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 2ca0: ff ff ff 70 7d 0c 00 00 01 80 7b 0b 0f 0f 44 49 ...p}.....{...DI 2cb0: 44 4c 00 00 88 54 4d 50 35 0a 00 00 70 7d 0c 00 DL...TMP5...p}.. 2cc0: 00 01 80 7b 0b 0f 0f 44 44 4c 32 00 00 88 54 4d ...{...DDL2...TM 2cd0: 50 35 0a 01 00 70 7d 0c 00 00 01 80 7b 0b 0f 0f P5...p}.....{... 2ce0: 44 44 4c 33 00 00 88 54 4d 50 35 0a 02 00 70 7d DDL3...TMP5...p} 2cf0: 0c 00 00 01 80 7b 0b 0f 0f 44 44 4c 34 00 00 88 .....{...DDL4... 2d00: 54 4d 50 35 0a 03 00 70 7d 0c 00 00 01 80 7b 0b TMP5...p}.....{. 2d10: 0f 0f 44 44 4c 35 00 00 88 54 4d 50 35 0a 04 00 ..DDL5...TMP5... 2d20: a4 54 4d 50 35 a0 4a 0c 93 4e 44 49 44 0a 06 08 .TMP5.J..NDID... 2d30: 54 4d 50 36 12 20 06 0c ff ff ff ff 0c ff ff ff TMP6. .......... 2d40: ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 2d50: 0c ff ff ff ff 70 7d 0c 00 00 01 80 7b 0b 0f 0f .....p}.....{... 2d60: 44 49 44 4c 00 00 88 54 4d 50 36 0a 00 00 70 7d DIDL...TMP6...p} 2d70: 0c 00 00 01 80 7b 0b 0f 0f 44 44 4c 32 00 00 88 .....{...DDL2... 2d80: 54 4d 50 36 0a 01 00 70 7d 0c 00 00 01 80 7b 0b TMP6...p}.....{. 2d90: 0f 0f 44 44 4c 33 00 00 88 54 4d 50 36 0a 02 00 ..DDL3...TMP6... 2da0: 70 7d 0c 00 00 01 80 7b 0b 0f 0f 44 44 4c 34 00 p}.....{...DDL4. 2db0: 00 88 54 4d 50 36 0a 03 00 70 7d 0c 00 00 01 80 ..TMP6...p}..... 2dc0: 7b 0b 0f 0f 44 44 4c 35 00 00 88 54 4d 50 36 0a {...DDL5...TMP6. 2dd0: 04 00 70 7d 0c 00 00 01 80 7b 0b 0f 0f 44 44 4c ..p}.....{...DDL 2de0: 36 00 00 88 54 4d 50 36 0a 05 00 a4 54 4d 50 36 6...TMP6....TMP6 2df0: a0 48 0e 93 4e 44 49 44 0a 07 08 54 4d 50 37 12 .H..NDID...TMP7. 2e00: 25 07 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff %............... 2e10: ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff ................ 2e20: 0c ff ff ff ff 70 7d 0c 00 00 01 80 7b 0b 0f 0f .....p}.....{... 2e30: 44 49 44 4c 00 00 88 54 4d 50 37 0a 00 00 70 7d DIDL...TMP7...p} 2e40: 0c 00 00 01 80 7b 0b 0f 0f 44 44 4c 32 00 00 88 .....{...DDL2... 2e50: 54 4d 50 37 0a 01 00 70 7d 0c 00 00 01 80 7b 0b TMP7...p}.....{. 2e60: 0f 0f 44 44 4c 33 00 00 88 54 4d 50 37 0a 02 00 ..DDL3...TMP7... 2e70: 70 7d 0c 00 00 01 80 7b 0b 0f 0f 44 44 4c 34 00 p}.....{...DDL4. 2e80: 00 88 54 4d 50 37 0a 03 00 70 7d 0c 00 00 01 80 ..TMP7...p}..... 2e90: 7b 0b 0f 0f 44 44 4c 35 00 00 88 54 4d 50 37 0a {...DDL5...TMP7. 2ea0: 04 00 70 7d 0c 00 00 01 80 7b 0b 0f 0f 44 44 4c ..p}.....{...DDL 2eb0: 36 00 00 88 54 4d 50 37 0a 05 00 70 7d 0c 00 00 6...TMP7...p}... 2ec0: 01 80 7b 0b 0f 0f 44 44 4c 37 00 00 88 54 4d 50 ..{...DDL7...TMP 2ed0: 37 0a 06 00 a4 54 4d 50 37 a0 46 10 94 4e 44 49 7....TMP7.F..NDI 2ee0: 44 0a 07 08 54 4d 50 38 12 2a 08 0c ff ff ff ff D...TMP8.*...... 2ef0: 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ................ 2f00: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ 2f10: ff ff ff 70 7d 0c 00 00 01 80 7b 0b 0f 0f 44 49 ...p}.....{...DI 2f20: 44 4c 00 00 88 54 4d 50 38 0a 00 00 70 7d 0c 00 DL...TMP8...p}.. 2f30: 00 01 80 7b 0b 0f 0f 44 44 4c 32 00 00 88 54 4d ...{...DDL2...TM 2f40: 50 38 0a 01 00 70 7d 0c 00 00 01 80 7b 0b 0f 0f P8...p}.....{... 2f50: 44 44 4c 33 00 00 88 54 4d 50 38 0a 02 00 70 7d DDL3...TMP8...p} 2f60: 0c 00 00 01 80 7b 0b 0f 0f 44 44 4c 34 00 00 88 .....{...DDL4... 2f70: 54 4d 50 38 0a 03 00 70 7d 0c 00 00 01 80 7b 0b TMP8...p}.....{. 2f80: 0f 0f 44 44 4c 35 00 00 88 54 4d 50 38 0a 04 00 ..DDL5...TMP8... 2f90: 70 7d 0c 00 00 01 80 7b 0b 0f 0f 44 44 4c 36 00 p}.....{...DDL6. 2fa0: 00 88 54 4d 50 38 0a 05 00 70 7d 0c 00 00 01 80 ..TMP8...p}..... 2fb0: 7b 0b 0f 0f 44 44 4c 37 00 00 88 54 4d 50 38 0a {...DDL7...TMP8. 2fc0: 06 00 70 7d 0c 00 00 01 80 7b 0b 0f 0f 44 44 4c ..p}.....{...DDL 2fd0: 38 00 00 88 54 4d 50 38 0a 07 00 a4 54 4d 50 38 8...TMP8....TMP8 2fe0: a4 12 05 01 0b 00 04 14 14 56 44 53 57 01 a0 0d .........VDSW... 2ff0: 93 56 50 57 52 0a 00 47 44 43 4b 68 14 4b 1e 56 .VPWR..GDCKh.K.V 3000: 43 41 44 01 70 0a 00 60 a0 10 93 7b 44 49 44 4c CAD.p..`...{DIDL 3010: 0b 0f 0f 00 68 70 0a 0d 60 a1 48 08 a0 10 93 7b ....hp..`.H....{ 3020: 44 44 4c 32 0b 0f 0f 00 68 70 0a 0d 60 a1 44 07 DDL2....hp..`.D. 3030: a0 10 93 7b 44 44 4c 33 0b 0f 0f 00 68 70 0a 0d ...{DDL3....hp.. 3040: 60 a1 40 06 a0 10 93 7b 44 44 4c 34 0b 0f 0f 00 `.@....{DDL4.... 3050: 68 70 0a 0d 60 a1 4c 04 a0 10 93 7b 44 44 4c 35 hp..`.L....{DDL5 3060: 0b 0f 0f 00 68 70 0a 0d 60 a1 38 a0 10 93 7b 44 ....hp..`.8...{D 3070: 44 4c 36 0b 0f 0f 00 68 70 0a 0d 60 a1 25 a0 10 DL6....hp..`.%.. 3080: 93 7b 44 44 4c 37 0b 0f 0f 00 68 70 0a 0d 60 a1 .{DDL7....hp..`. 3090: 12 a0 10 93 7b 44 44 4c 38 0b 0f 0f 00 68 70 0a ....{DDL8....hp. 30a0: 0d 60 a0 11 93 7b 43 50 44 4c 0b 0f 0f 00 68 7d .`...{CPDL....h} 30b0: 0a 10 60 60 a1 4f 08 a0 11 93 7b 43 50 4c 32 0b ..``.O....{CPL2. 30c0: 0f 0f 00 68 7d 0a 10 60 60 a1 4a 07 a0 11 93 7b ...h}..``.J....{ 30d0: 43 50 4c 33 0b 0f 0f 00 68 7d 0a 10 60 60 a1 45 CPL3....h}..``.E 30e0: 06 a0 11 93 7b 43 50 4c 34 0b 0f 0f 00 68 7d 0a ....{CPL4....h}. 30f0: 10 60 60 a1 40 05 a0 11 93 7b 43 50 4c 35 0b 0f .``.@....{CPL5.. 3100: 0f 00 68 7d 0a 10 60 60 a1 3b a0 11 93 7b 43 50 ..h}..``.;...{CP 3110: 4c 36 0b 0f 0f 00 68 7d 0a 10 60 60 a1 27 a0 11 L6....h}..``.'.. 3120: 93 7b 43 50 4c 37 0b 0f 0f 00 68 7d 0a 10 60 60 .{CPL7....h}..`` 3130: a1 13 a0 11 93 7b 43 50 4c 38 0b 0f 0f 00 68 7d .....{CPL8....h} 3140: 0a 10 60 60 a0 11 93 7b 43 41 44 4c 0b 0f 0f 00 ..``...{CADL.... 3150: 68 7d 0a 02 60 60 a1 4f 08 a0 11 93 7b 43 41 4c h}..``.O....{CAL 3160: 32 0b 0f 0f 00 68 7d 0a 02 60 60 a1 4a 07 a0 11 2....h}..``.J... 3170: 93 7b 43 41 4c 33 0b 0f 0f 00 68 7d 0a 02 60 60 .{CAL3....h}..`` 3180: a1 45 06 a0 11 93 7b 43 41 4c 34 0b 0f 0f 00 68 .E....{CAL4....h 3190: 7d 0a 02 60 60 a1 40 05 a0 11 93 7b 43 41 4c 35 }..``.@....{CAL5 31a0: 0b 0f 0f 00 68 7d 0a 02 60 60 a1 3b a0 11 93 7b ....h}..``.;...{ 31b0: 43 41 4c 36 0b 0f 0f 00 68 7d 0a 02 60 60 a1 27 CAL6....h}..``.' 31c0: a0 11 93 7b 43 41 4c 37 0b 0f 0f 00 68 7d 0a 02 ...{CAL7....h}.. 31d0: 60 60 a1 13 a0 11 93 7b 43 41 4c 38 0b 0f 0f 00 ``.....{CAL8.... 31e0: 68 7d 0a 02 60 60 a4 60 14 4c 09 4e 44 44 53 01 h}..``.`.L.NDDS. 31f0: a0 0f 93 7b 4e 41 44 4c 0b 0f 0f 00 68 a4 0a 01 ...{NADL....h... 3200: a1 41 08 a0 0f 93 7b 4e 44 4c 32 0b 0f 0f 00 68 .A....{NDL2....h 3210: a4 0a 01 a1 4e 06 a0 0f 93 7b 4e 44 4c 33 0b 0f ....N....{NDL3.. 3220: 0f 00 68 a4 0a 01 a1 4b 05 a0 0f 93 7b 4e 44 4c ..h....K....{NDL 3230: 34 0b 0f 0f 00 68 a4 0a 01 a1 48 04 a0 0f 93 7b 4....h....H....{ 3240: 4e 44 4c 35 0b 0f 0f 00 68 a4 0a 01 a1 35 a0 0f NDL5....h....5.. 3250: 93 7b 4e 44 4c 36 0b 0f 0f 00 68 a4 0a 01 a1 23 .{NDL6....h....# 3260: a0 0f 93 7b 4e 44 4c 37 0b 0f 0f 00 68 a4 0a 01 ...{NDL7....h... 3270: a1 11 a0 0f 93 7b 4e 44 4c 38 0b 0f 0f 00 68 a4 .....{NDL8....h. 3280: 0a 01 a4 0a 00 5b 82 44 06 4c 43 44 30 14 0a 5f .....[.D.LCD0.._ 3290: 41 44 52 00 a4 0b 00 04 14 0f 5f 44 43 53 00 a4 ADR......._DCS.. 32a0: 56 43 41 44 4d 49 44 4c 14 0f 5f 44 47 53 00 a4 VCADMIDL.._DGS.. 32b0: 4e 44 44 53 4d 49 44 4c 14 0e 5f 44 53 53 01 7b NDDSMIDL.._DSS.{ 32c0: 68 0a 01 56 53 44 4c 14 23 5f 44 44 43 01 a0 0b h..VSDL.#_DDC... 32d0: 93 68 0a 01 a4 5c 56 45 44 49 a1 0d a0 0b 93 68 .h...\VEDI.....h 32e0: 0a 02 a4 5c 56 45 44 49 a4 0a 00 5b 82 3f 43 52 ...\VEDI...[.?CR 32f0: 54 30 14 0a 5f 41 44 52 00 a4 0b 00 01 14 0f 5f T0.._ADR......._ 3300: 44 43 53 00 a4 56 43 41 44 4d 49 44 43 14 0f 5f DCS..VCADMIDC.._ 3310: 44 47 53 00 a4 4e 44 44 53 4d 49 44 43 14 0e 5f DGS..NDDSMIDC.._ 3320: 44 53 53 01 7b 68 0a 01 56 53 44 43 5b 82 3f 44 DSS.{h..VSDC[.?D 3330: 56 49 30 14 0a 5f 41 44 52 00 a4 0b 00 03 14 0f VI0.._ADR....... 3340: 5f 44 43 53 00 a4 56 43 41 44 4d 49 44 30 14 0f _DCS..VCADMID0.. 3350: 5f 44 47 53 00 a4 4e 44 44 53 4d 49 44 30 14 0e _DGS..NDDSMID0.. 3360: 5f 44 53 53 01 7b 68 0a 01 56 53 44 30 5b 82 3f _DSS.{h..VSD0[.? 3370: 44 56 49 31 14 0a 5f 41 44 52 00 a4 0b 01 03 14 DVI1.._ADR...... 3380: 0f 5f 44 43 53 00 a4 56 43 41 44 4d 49 44 31 14 ._DCS..VCADMID1. 3390: 0f 5f 44 47 53 00 a4 4e 44 44 53 4d 49 44 31 14 ._DGS..NDDSMID1. 33a0: 0e 5f 44 53 53 01 7b 68 0a 01 56 53 44 31 5b 82 ._DSS.{h..VSD1[. 33b0: 3f 44 56 49 32 14 0a 5f 41 44 52 00 a4 0b 02 03 ?DVI2.._ADR..... 33c0: 14 0f 5f 44 43 53 00 a4 56 43 41 44 4d 49 44 32 .._DCS..VCADMID2 33d0: 14 0f 5f 44 47 53 00 a4 4e 44 44 53 4d 49 44 32 .._DGS..NDDSMID2 33e0: 14 0e 5f 44 53 53 01 7b 68 0a 01 56 53 44 32 5b .._DSS.{h..VSD2[ 33f0: 82 3f 44 56 49 33 14 0a 5f 41 44 52 00 a4 0b 03 .?DVI3.._ADR.... 3400: 03 14 0f 5f 44 43 53 00 a4 56 43 41 44 4d 49 44 ..._DCS..VCADMID 3410: 33 14 0f 5f 44 47 53 00 a4 4e 44 44 53 4d 49 44 3.._DGS..NDDSMID 3420: 33 14 0e 5f 44 53 53 01 7b 68 0a 01 56 53 44 33 3.._DSS.{h..VSD3 3430: 5b 82 3f 44 56 49 34 14 0a 5f 41 44 52 00 a4 0b [.?DVI4.._ADR... 3440: 04 03 14 0f 5f 44 43 53 00 a4 56 43 41 44 4d 49 ...._DCS..VCADMI 3450: 44 34 14 0f 5f 44 47 53 00 a4 4e 44 44 53 4d 49 D4.._DGS..NDDSMI 3460: 44 34 14 0e 5f 44 53 53 01 7b 68 0a 01 56 53 44 D4.._DSS.{h..VSD 3470: 34 5b 82 3f 44 56 49 35 14 0a 5f 41 44 52 00 a4 4[.?DVI5.._ADR.. 3480: 0b 05 03 14 0f 5f 44 43 53 00 a4 56 43 41 44 4d ....._DCS..VCADM 3490: 49 44 35 14 0f 5f 44 47 53 00 a4 4e 44 44 53 4d ID5.._DGS..NDDSM 34a0: 49 44 35 14 0e 5f 44 53 53 01 7b 68 0a 01 56 53 ID5.._DSS.{h..VS 34b0: 44 35 5b 80 49 47 44 50 02 0a 40 0a c0 5b 81 45 D5[.IGDP..@..[.E 34c0: 05 49 47 44 50 00 00 40 09 00 01 47 49 56 44 01 .IGDP..@...GIVD. 34d0: 00 02 47 55 4d 41 03 00 09 00 04 47 4d 46 4e 01 ..GUMA.....GMFN. 34e0: 00 1b 00 40 46 41 53 4c 45 08 00 18 47 53 53 45 ...@FASLE...GSSE 34f0: 01 47 53 53 42 0e 47 53 45 53 01 00 30 00 0c 43 .GSSB.GSES..0..C 3500: 44 56 4c 01 00 03 00 18 4c 42 50 43 08 00 30 41 DVL.....LBPC..0A 3510: 53 4c 53 20 5b 80 49 47 44 4d 00 5c 41 53 4c 42 SLS [.IGDM.\ASLB 3520: 0b 00 20 5b 81 48 19 49 47 44 4d 00 53 49 47 4e .. [.H.IGDM.SIGN 3530: 40 08 53 49 5a 45 20 4f 56 45 52 20 53 56 45 52 @.SIZE OVER SVER 3540: 40 10 56 56 45 52 40 08 47 56 45 52 40 08 4d 42 @.VVER@.GVER@.MB 3550: 4f 58 20 44 4d 4f 44 20 00 40 50 44 52 44 59 20 OX DMOD .@PDRDY 3560: 43 53 54 53 20 43 45 56 54 20 00 40 0a 44 49 44 CSTS CEVT .@.DID 3570: 4c 20 44 44 4c 32 20 44 44 4c 33 20 44 44 4c 34 L DDL2 DDL3 DDL4 3580: 20 44 44 4c 35 20 44 44 4c 36 20 44 44 4c 37 20 DDL5 DDL6 DDL7 3590: 44 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 20 43 DDL8 CPDL CPL2 C 35a0: 50 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 43 50 PL3 CPL4 CPL5 CP 35b0: 4c 36 20 43 50 4c 37 20 43 50 4c 38 20 43 41 44 L6 CPL7 CPL8 CAD 35c0: 4c 20 43 41 4c 32 20 43 41 4c 33 20 43 41 4c 34 L CAL2 CAL3 CAL4 35d0: 20 43 41 4c 35 20 43 41 4c 36 20 43 41 4c 37 20 CAL5 CAL6 CAL7 35e0: 43 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 20 4e CAL8 NADL NDL2 N 35f0: 44 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 4e 44 DL3 NDL4 NDL5 ND 3600: 4c 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 53 4c L6 NDL7 NDL8 ASL 3610: 50 20 54 49 44 58 20 43 48 50 44 20 43 4c 49 44 P TIDX CHPD CLID 3620: 20 43 44 43 4b 20 53 58 53 57 20 45 56 54 53 20 CDCK SXSW EVTS 3630: 43 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 43 49 CNOT NRDY .@.SCI 3640: 45 01 47 45 46 43 04 47 58 46 43 03 47 45 53 46 E.GEFC.GXFC.GESF 3650: 08 00 10 50 41 52 4d 20 44 53 4c 50 20 00 40 7a ...PARM DSLP .@z 3660: 41 52 44 59 20 41 53 4c 43 20 54 43 48 45 20 41 ARDY ASLC TCHE A 3670: 4c 53 49 20 42 43 4c 50 20 50 46 49 54 20 43 42 LSI BCLP PFIT CB 3680: 4c 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 45 50 LV BCLM@.CPFM EP 3690: 46 4d 20 50 4c 55 54 40 25 50 46 4d 42 20 43 43 FM PLUT@%PFMB CC 36a0: 44 56 20 50 43 46 54 20 00 40 2f 47 56 44 31 80 DV PCFT .@/GVD1. 36b0: 00 0c 50 48 45 44 20 42 44 44 43 40 80 08 44 42 ..PHED BDDC@..DB 36c0: 54 42 12 38 15 0a 00 0a 07 0a 38 0b c0 01 0b 00 TB.8......8..... 36d0: 0e 0a 3f 0b c7 01 0b 07 0e 0b f8 01 0b 38 0e 0b ..?..........8.. 36e0: c0 0f 0a 00 0a 00 0a 00 0a 00 0a 00 0b 00 70 0b ..............p. 36f0: 07 70 0b 38 70 0b c0 71 0b 00 7e 08 43 44 43 54 .p.8p..q..~.CDCT 3700: 12 29 05 12 07 02 0a e4 0b 40 01 12 07 02 0a de .).......@...... 3710: 0b 4d 01 12 07 02 0a de 0b 4d 01 12 06 02 0a 00 .M.......M...... 3720: 0a 00 12 07 02 0a de 0b 4d 01 08 53 55 43 43 0a ........M..SUCC. 3730: 01 08 4e 56 4c 44 0a 02 08 43 52 49 54 0a 04 08 ..NVLD...CRIT... 3740: 4e 43 52 54 0a 06 14 48 05 47 53 43 49 08 a0 11 NCRT...H.GSCI... 3750: 93 47 45 46 43 0a 04 70 47 42 44 41 47 58 46 43 .GEFC..pGBDAGXFC 3760: a0 11 93 47 45 46 43 0a 06 70 53 42 43 42 47 58 ...GEFC..pSBCBGX 3770: 46 43 70 0a 00 47 45 46 43 70 0a 01 5c 2f 04 5f FCp..GEFCp..\/._ 3780: 53 42 5f 50 43 49 30 4c 50 43 5f 53 43 49 53 70 SB_PCI0LPC_SCISp 3790: 0a 00 47 53 53 45 70 0a 00 53 43 49 45 a4 00 14 ..GSSEp..SCIE... 37a0: 4b 1e 47 42 44 41 08 a0 1b 93 47 45 53 46 0a 00 K.GBDA....GESF.. 37b0: 70 0b 41 02 50 41 52 4d 70 00 47 45 53 46 a4 53 p.A.PARMp.GESF.S 37c0: 55 43 43 a0 1b 93 47 45 53 46 0a 01 70 0b 02 02 UCC...GESF..p... 37d0: 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 PARMp.GESF.SUCC. 37e0: 47 04 93 47 45 53 46 0a 04 7b 50 41 52 4d 0c 00 G..GESF..{PARM.. 37f0: 00 ff ef 50 41 52 4d 7b 50 41 52 4d 79 83 88 44 ...PARM{PARMy..D 3800: 42 54 42 49 42 54 54 00 0a 10 00 50 41 52 4d 7d BTBIBTT....PARM} 3810: 49 42 54 54 50 41 52 4d 50 41 52 4d 70 00 47 45 IBTTPARMPARMp.GE 3820: 53 46 a4 53 55 43 43 a0 45 08 93 47 45 53 46 0a SF.SUCC.E..GESF. 3830: 05 a0 17 5c 2f 03 5f 53 42 5f 4c 49 44 5f 5f 4c ...\/._SB_LID__L 3840: 49 44 70 0a 01 4c 49 44 53 a1 08 70 0a 00 4c 49 IDp..LIDS..p..LI 3850: 44 53 70 49 50 53 43 50 41 52 4d 72 50 41 52 4d DSpIPSCPARMrPARM 3860: 0a 01 50 41 52 4d 72 50 41 52 4d 0b 00 03 50 41 ..PARMrPARM...PA 3870: 52 4d 72 50 41 52 4d 0c 00 00 01 00 50 41 52 4d RMrPARM.....PARM 3880: 7d 50 41 52 4d 79 4c 49 44 53 0a 10 00 50 41 52 }PARMyLIDS...PAR 3890: 4d 7d 50 41 52 4d 79 49 42 49 41 0a 14 00 50 41 M}PARMyIBIA...PA 38a0: 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 2d 93 RMp.GESF.SUCC.-. 38b0: 47 45 53 46 0a 06 70 49 54 56 46 50 41 52 4d 7d GESF..pITVFPARM} 38c0: 50 41 52 4d 79 49 54 56 4d 0a 04 00 50 41 52 4d PARMyITVM...PARM 38d0: 70 00 47 45 53 46 a4 53 55 43 43 a0 47 07 93 47 p.GESF.SUCC.G..G 38e0: 45 53 46 0a 07 70 47 49 56 44 50 41 52 4d 7f 50 ESF..pGIVDPARM.P 38f0: 41 52 4d 0a 01 50 41 52 4d 7d 50 41 52 4d 79 47 ARM..PARM}PARMyG 3900: 4d 46 4e 0a 01 00 50 41 52 4d 7d 50 41 52 4d 79 MFN...PARM}PARMy 3910: 0a 03 0a 0b 00 50 41 52 4d 7d 50 41 52 4d 79 0a .....PARM}PARMy. 3920: 03 0a 11 00 50 41 52 4d 7d 79 83 88 83 88 43 44 ....PARM}y....CD 3930: 43 54 48 56 43 4f 00 43 44 56 4c 00 0a 15 00 50 CTHVCO.CDVL....P 3940: 41 52 4d 50 41 52 4d 70 0a 01 47 45 53 46 a4 53 ARMPARMp..GESF.S 3950: 55 43 43 a0 2c 93 47 45 53 46 0a 0a 70 0a 00 50 UCC.,.GESF..p..P 3960: 41 52 4d a0 10 49 53 53 43 7d 50 41 52 4d 0a 03 ARM..ISSC}PARM.. 3970: 50 41 52 4d 70 0a 00 47 45 53 46 a4 53 55 43 43 PARMp..GESF.SUCC 3980: 70 00 47 45 53 46 a4 43 52 49 54 14 4b 2a 53 42 p.GESF.CRIT.K*SB 3990: 43 42 08 a0 1b 93 47 45 53 46 0a 00 70 0b 01 01 CB....GESF..p... 39a0: 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 PARMp.GESF.SUCC. 39b0: 19 93 47 45 53 46 0a 01 70 00 47 45 53 46 70 00 ..GESF..p.GESFp. 39c0: 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 PARM.SUCC...GESF 39d0: 0a 03 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 ..p.GESFp.PARM.S 39e0: 55 43 43 a0 19 93 47 45 53 46 0a 04 70 00 47 45 UCC...GESF..p.GE 39f0: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 SFp.PARM.SUCC... 3a00: 47 45 53 46 0a 05 70 00 47 45 53 46 70 00 50 41 GESF..p.GESFp.PA 3a10: 52 4d a4 53 55 43 43 a0 37 93 47 45 53 46 0a 06 RM.SUCC.7.GESF.. 3a20: 70 7b 50 41 52 4d 0a 0f 00 49 54 56 46 70 7a 7b p{PARM...ITVFpz{ 3a30: 50 41 52 4d 0a f0 00 0a 04 00 49 54 56 4d 70 00 PARM......ITVMp. 3a40: 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 GESFp.PARM.SUCC. 3a50: 19 93 47 45 53 46 0a 07 70 00 47 45 53 46 70 00 ..GESF..p.GESFp. 3a60: 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 PARM.SUCC...GESF 3a70: 0a 08 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 ..p.GESFp.PARM.S 3a80: 55 43 43 a0 24 93 47 45 53 46 0a 09 7b 50 41 52 UCC.$.GESF..{PAR 3a90: 4d 0a ff 49 42 54 54 70 00 47 45 53 46 70 00 50 M..IBTTp.GESFp.P 3aa0: 41 52 4d a4 53 55 43 43 a0 46 05 93 47 45 53 46 ARM.SUCC.F..GESF 3ab0: 0a 0a 7b 50 41 52 4d 0a ff 49 50 53 43 a0 21 7b ..{PARM..IPSC.!{ 3ac0: 7a 50 41 52 4d 0a 08 00 0a ff 00 7b 7a 50 41 52 zPARM......{zPAR 3ad0: 4d 0a 08 00 0a ff 49 50 41 54 76 49 50 41 54 7b M.....IPATvIPAT{ 3ae0: 7a 50 41 52 4d 0a 14 00 0a 07 49 42 49 41 70 00 zPARM.....IBIAp. 3af0: 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 GESFp.PARM.SUCC. 3b00: 47 05 93 47 45 53 46 0a 0b 7b 7a 50 41 52 4d 0a G..GESF..{zPARM. 3b10: 01 00 0a 01 49 46 31 45 a0 1c 7b 50 41 52 4d 79 ....IF1E..{PARMy 3b20: 0a 0f 0a 0d 00 00 7b 7a 50 41 52 4d 0a 0d 00 0a ......{zPARM.... 3b30: 0f 49 44 4d 53 a1 10 7b 7a 50 41 52 4d 0a 11 00 .IDMS..{zPARM... 3b40: 0a 0f 49 44 4d 53 70 00 47 45 53 46 70 00 50 41 ..IDMSp.GESFp.PA 3b50: 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 10 RM.SUCC...GESF.. 3b60: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 3b70: 43 a0 2c 93 47 45 53 46 0a 11 70 79 4c 49 44 53 C.,.GESF..pyLIDS 3b80: 0a 08 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 ...PARMrPARM...P 3b90: 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 4e ARMp.GESF.SUCC.N 3ba0: 04 93 47 45 53 46 0a 12 a0 2a 7b 50 41 52 4d 0a ..GESF...*{PARM. 3bb0: 01 00 a0 13 93 7a 50 41 52 4d 0a 01 00 0a 01 70 .....zPARM.....p 3bc0: 0a 01 49 53 53 43 a1 0c 70 00 47 45 53 46 a4 43 ..ISSC..p.GESF.C 3bd0: 52 49 54 a1 08 70 0a 00 49 53 53 43 70 00 47 45 RIT..p..ISSCp.GE 3be0: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 SFp.PARM.SUCC... 3bf0: 47 45 53 46 0a 13 70 00 47 45 53 46 70 00 50 41 GESF..p.GESFp.PA 3c00: 52 4d a4 53 55 43 43 a0 24 93 47 45 53 46 0a 14 RM.SUCC.$.GESF.. 3c10: 7b 50 41 52 4d 0a 0f 50 41 56 50 70 00 47 45 53 {PARM..PAVPp.GES 3c20: 46 70 00 50 41 52 4d a4 53 55 43 43 70 00 47 45 Fp.PARM.SUCCp.GE 3c30: 53 46 a4 53 55 43 43 14 19 50 44 52 44 00 a0 0c SF.SUCC..PDRD... 3c40: 92 44 52 44 59 5b 22 41 53 4c 50 a4 92 44 52 44 .DRDY["ASLP..DRD 3c50: 59 14 1d 50 53 54 53 00 a0 0e 94 43 53 54 53 0a Y..PSTS....CSTS. 3c60: 02 5b 22 41 53 4c 50 a4 93 43 53 54 53 0a 03 14 .["ASLP..CSTS... 3c70: 45 07 47 4e 4f 54 02 a0 08 50 44 52 44 a4 0a 01 E.GNOT...PDRD... 3c80: 70 68 43 45 56 54 70 0a 03 43 53 54 53 a0 42 04 phCEVTp..CSTS.B. 3c90: 90 93 43 48 50 44 0a 00 93 69 0a 00 a0 33 92 93 ..CHPD...i...3.. 3ca0: 68 0a 01 a0 19 90 5c 57 58 50 46 92 5c 57 56 49 h.....\WXPF.\WVI 3cb0: 53 86 5c 2e 5f 53 42 5f 50 43 49 30 69 a1 12 86 S.\._SB_PCI0i... 3cc0: 5c 2f 03 5f 53 42 5f 50 43 49 30 56 49 44 5f 69 \/._SB_PCI0VID_i 3cd0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 56 49 44 5f .\/._SB_PCI0VID_ 3ce0: 0a 80 a4 0a 00 14 15 47 48 44 53 01 70 68 54 49 .......GHDS.phTI 3cf0: 44 58 a4 47 4e 4f 54 0a 01 0a 00 14 15 47 4c 49 DX.GNOT......GLI 3d00: 44 01 70 68 43 4c 49 44 a4 47 4e 4f 54 0a 02 0a D.phCLID.GNOT... 3d10: 00 14 0f 47 4c 49 53 01 70 68 43 4c 49 44 a4 0a ...GLIS.phCLID.. 3d20: 00 14 15 47 44 43 4b 01 70 68 43 44 43 4b a4 47 ...GDCK.phCDCK.G 3d30: 4e 4f 54 0a 04 0a 80 14 0c 47 44 43 53 01 70 68 NOT......GDCS.ph 3d40: 43 44 43 4b 14 19 50 41 52 44 00 a0 0c 92 41 52 CDCK..PARD....AR 3d50: 44 59 5b 22 41 53 4c 50 a4 92 41 52 44 59 14 4b DY["ASLP..ARDY.K 3d60: 0a 41 49 4e 54 02 a0 10 92 7b 54 43 48 45 79 0a .AINT....{TCHEy. 3d70: 01 68 00 00 a4 0a 01 a0 08 50 41 52 44 a4 0a 01 .h.......PARD... 3d80: a0 25 93 68 0a 02 7f 50 46 49 54 0a 07 50 46 49 .%.h...PFIT..PFI 3d90: 54 7d 50 46 49 54 0c 00 00 00 80 50 46 49 54 70 T}PFIT.....PFITp 3da0: 0a 04 41 53 4c 43 a1 49 05 a0 20 93 68 0a 01 70 ..ASLC.I.. .h..p 3db0: 69 42 43 4c 50 7d 42 43 4c 50 0c 00 00 00 80 42 iBCLP}BCLP.....B 3dc0: 43 4c 50 70 0a 0a 41 53 4c 43 a1 35 a0 19 93 68 CLPp..ASLC.5...h 3dd0: 0a 03 70 69 50 46 4d 42 7d 50 46 4d 42 0c 00 01 ..piPFMB}PFMB... 3de0: 00 80 50 46 4d 42 a1 19 a0 12 93 68 0a 00 70 69 ..PFMB.....h..pi 3df0: 41 4c 53 49 70 0a 01 41 53 4c 43 a1 04 a4 0a 01 ALSIp..ASLC..... 3e00: 70 0a 01 41 53 4c 45 a4 0a 00 5b 82 87 16 03 4c p..ASLE...[....L 3e10: 50 43 5f 08 5f 41 44 52 0c 00 00 1f 00 08 5f 53 PC_._ADR......_S 3e20: 33 44 0a 03 08 52 49 44 5f 0a 00 5b 82 4b 1c 53 3D...RID_..[.K.S 3e30: 49 4f 5f 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 IO_._HID.A...._U 3e40: 49 44 0a 00 08 53 43 52 53 11 4b 10 0b 06 01 47 ID...SCRS.K....G 3e50: 01 10 00 10 00 01 10 47 01 90 00 90 00 01 10 47 .......G.......G 3e60: 01 24 00 24 00 01 02 47 01 28 00 28 00 01 02 47 .$.$...G.(.(...G 3e70: 01 2c 00 2c 00 01 02 47 01 30 00 30 00 01 02 47 .,.,...G.0.0...G 3e80: 01 34 00 34 00 01 02 47 01 38 00 38 00 01 02 47 .4.4...G.8.8...G 3e90: 01 3c 00 3c 00 01 02 47 01 a4 00 a4 00 01 02 47 .<.<...G.......G 3ea0: 01 a8 00 a8 00 01 02 47 01 ac 00 ac 00 01 02 47 .......G.......G 3eb0: 01 b0 00 b0 00 01 06 47 01 b8 00 b8 00 01 02 47 .......G.......G 3ec0: 01 bc 00 bc 00 01 02 47 01 50 00 50 00 01 04 47 .......G.P.P...G 3ed0: 01 72 00 72 00 01 06 47 01 00 04 00 04 01 80 47 .r.r...G.......G 3ee0: 01 00 05 00 05 01 80 47 01 00 08 00 08 01 10 47 .......G.......G 3ef0: 01 e0 15 e0 15 01 10 47 01 00 16 00 16 01 80 86 .......G........ 3f00: 09 00 01 00 00 00 f8 00 00 00 04 86 09 00 01 00 ................ 3f10: 00 00 00 00 10 00 00 86 09 00 01 00 c0 d1 fe 00 ................ 3f20: 40 00 00 86 09 00 01 00 00 d1 fe 00 40 00 00 86 @...........@... 3f30: 09 00 01 00 80 d1 fe 00 10 00 00 86 09 00 01 00 ................ 3f40: 90 d1 fe 00 10 00 00 86 09 00 01 00 50 d4 fe 00 ............P... 3f50: 70 00 00 79 00 8a 53 43 52 53 0a c0 54 52 4d 42 p..y..SCRS..TRMB 3f60: 14 47 09 5f 43 52 53 00 70 5c 54 42 41 42 54 52 .G._CRS.p\TBABTR 3f70: 4d 42 a0 20 93 5c 2f 05 5f 53 42 5f 50 43 49 30 MB. .\/._SB_PCI0 3f80: 4c 50 43 5f 54 50 4d 5f 5f 53 54 41 0a 0f a4 53 LPC_TPM__STA...S 3f90: 43 52 53 a1 44 06 74 87 53 43 52 53 0a 02 60 08 CRS.D.t.SCRS..`. 3fa0: 42 55 46 30 11 02 60 72 60 87 5c 2f 05 5f 53 42 BUF0..`r`.\/._SB 3fb0: 5f 50 43 49 30 4c 50 43 5f 54 50 4d 5f 42 55 46 _PCI0LPC_TPM_BUF 3fc0: 31 60 08 42 55 46 31 11 02 60 70 53 43 52 53 42 1`.BUF1..`pSCRSB 3fd0: 55 46 30 73 42 55 46 30 5c 2f 05 5f 53 42 5f 50 UF0sBUF0\/._SB_P 3fe0: 43 49 30 4c 50 43 5f 54 50 4d 5f 42 55 46 31 42 CI0LPC_TPM_BUF1B 3ff0: 55 46 31 a4 42 55 46 31 5b 80 4c 50 43 53 02 0a UF1.BUF1[.LPCS.. 4000: 00 0b 00 01 5b 81 4b 09 4c 50 43 53 00 00 40 30 ....[.K.LPCS..@0 4010: 50 49 52 41 08 50 49 52 42 08 50 49 52 43 08 50 PIRA.PIRB.PIRC.P 4020: 49 52 44 08 53 45 52 51 08 00 18 50 49 52 45 08 IRD.SERQ...PIRE. 4030: 50 49 52 46 08 50 49 52 47 08 50 49 52 48 08 00 PIRF.PIRG.PIRH.. 4040: 40 0a 58 55 31 41 03 00 01 58 55 32 41 03 00 01 @.XU1A...XU2A... 4050: 58 50 41 5f 02 00 02 58 46 41 5f 01 00 03 58 55 XPA_...XFA_...XU 4060: 31 45 01 58 55 32 45 01 58 50 45 5f 01 58 46 45 1E.XU2E.XPE_.XFE 4070: 5f 01 00 0c 58 47 31 45 01 00 01 58 47 31 41 0e _...XG1E...XG1A. 4080: 00 10 58 47 32 45 01 00 01 58 47 32 41 0e 00 40 ..XG2E...XG2A..@ 4090: 0b 00 02 43 4c 4b 52 01 00 07 45 58 50 45 01 00 ...CLKR...EXPE.. 40a0: 05 5b 80 4c 50 49 4f 01 0b 00 05 0a 80 5b 81 4b .[.LPIO......[.K 40b0: 04 4c 50 49 4f 03 00 40 06 00 08 00 08 00 06 47 .LPIO..@.......G 40c0: 4c 49 53 01 00 01 00 08 00 40 0e 00 06 58 48 50 LIS......@...XHP 40d0: 44 01 00 49 05 00 06 50 49 44 48 02 00 08 50 49 D..I...PIDH...PI 40e0: 44 4c 02 00 4e 06 44 4f 49 30 01 44 4f 49 31 01 DL..N.DOI0.DOI1. 40f0: 44 4f 49 32 01 44 4f 49 33 01 5b 80 50 4d 49 4f DOI2.DOI3.[.PMIO 4100: 01 0b 00 04 0a 80 5b 81 1c 50 4d 49 4f 00 00 40 ......[..PMIO..@ 4110: 21 00 01 53 57 47 45 01 00 4e 10 00 09 53 43 49 !..SWGE..N...SCI 4120: 53 01 00 06 5b 80 49 4f 5f 54 01 0b 00 08 0a 10 S...[.IO_T...... 4130: 5b 81 24 49 4f 5f 54 01 54 52 50 49 10 00 10 00 [.$IO_T.TRPI.... 4140: 10 00 10 54 52 50 30 08 00 08 00 08 00 08 00 08 ...TRP0......... 4150: 00 08 00 08 00 08 5b 82 33 50 49 43 5f 08 5f 48 ......[.3PIC_._H 4160: 49 44 0b 41 d0 08 5f 43 52 53 11 20 0a 1d 47 01 ID.A.._CRS. ..G. 4170: 20 00 20 00 01 02 47 01 a0 00 a0 00 01 02 47 01 . ...G.......G. 4180: d0 04 d0 04 01 02 22 04 00 79 00 5b 82 25 54 49 ......"..y.[.%TI 4190: 4d 52 08 5f 48 49 44 0c 41 d0 01 00 08 5f 43 52 MR._HID.A...._CR 41a0: 53 11 10 0a 0d 47 01 40 00 40 00 01 04 22 01 00 S....G.@.@...".. 41b0: 79 00 5b 82 48 06 48 50 45 54 08 5f 48 49 44 0c y.[.H.HPET._HID. 41c0: 41 d0 01 03 14 1f 5f 53 54 41 00 a0 10 90 5c 57 A....._STA....\W 41d0: 4e 54 46 92 5c 57 58 50 46 a4 0a 00 a1 04 a4 0a NTF.\WXPF....... 41e0: 0f a4 0a 00 08 42 55 46 30 11 11 0a 0e 86 09 00 .....BUF0....... 41f0: 00 00 00 d0 fe 00 04 00 00 79 00 14 20 5f 43 52 .........y.. _CR 4200: 53 08 8a 42 55 46 30 0a 04 48 50 54 30 70 5c 48 S..BUF0..HPT0p\H 4210: 50 45 54 48 50 54 30 a4 42 55 46 30 5b 82 35 44 PETHPT0.BUF0[.5D 4220: 4d 41 43 08 5f 48 49 44 0c 41 d0 02 00 08 5f 43 MAC._HID.A...._C 4230: 52 53 11 20 0a 1d 47 01 00 00 00 00 01 10 47 01 RS. ..G.......G. 4240: 80 00 80 00 01 10 47 01 c0 00 c0 00 01 20 2a 10 ......G...... *. 4250: 05 79 00 5b 82 22 53 50 4b 52 08 5f 48 49 44 0c .y.[."SPKR._HID. 4260: 41 d0 08 00 08 5f 43 52 53 11 0d 0a 0a 47 01 61 A...._CRS....G.a 4270: 00 61 00 01 01 79 00 5b 82 25 46 50 55 5f 08 5f .a...y.[.%FPU_._ 4280: 48 49 44 0c 41 d0 0c 04 08 5f 43 52 53 11 10 0a HID.A...._CRS... 4290: 0d 47 01 f0 00 f0 00 01 01 22 00 20 79 00 5b 82 .G.......". y.[. 42a0: 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b 00 08 %RTC_._HID.A.... 42b0: 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 01 02 _CRS....G.p.p... 42c0: 22 00 01 79 00 5b 82 2d 4b 42 44 5f 08 5f 48 49 "..y.[.-KBD_._HI 42d0: 44 0c 41 d0 03 03 08 5f 43 52 53 11 18 0a 15 47 D.A...._CRS....G 42e0: 01 60 00 60 00 01 01 47 01 64 00 64 00 01 01 22 .`.`...G.d.d..." 42f0: 02 00 79 00 5b 82 4a 05 4d 4f 55 5f 08 5f 48 49 ..y.[.J.MOU_._HI 4300: 44 0c 24 4d 37 80 08 5f 43 49 44 0c 41 d0 0f 13 D.$M7.._CID.A... 4310: 08 5f 43 52 53 11 08 0a 05 22 00 10 79 00 14 31 ._CRS...."..y..1 4320: 4d 48 49 44 00 a0 1e 5c 2f 04 5f 53 42 5f 50 43 MHID...\/._SB_PC 4330: 49 30 4c 50 43 5f 50 41 44 44 70 0c 24 4d 37 80 I0LPC_PADDp.$M7. 4340: 5f 48 49 44 a1 0b 70 0c 30 ae 00 20 5f 48 49 44 _HID..p.0.. _HID 4350: 5b 80 49 4d 47 41 01 0b e0 15 0a 10 5b 81 21 49 [.IMGA......[.!I 4360: 4d 47 41 01 00 08 00 08 00 08 57 41 4b 52 10 00 MGA.......WAKR.. 4370: 38 47 41 49 58 08 00 08 47 41 44 54 08 00 08 5b 8GAIX...GADT...[ 4380: 86 4f 05 47 41 49 58 47 41 44 54 01 00 40 28 00 .O.GAIXGADT..@(. 4390: 03 49 56 50 57 01 44 56 50 57 01 42 4c 50 4c 01 .IVPW.DVPW.BLPL. 43a0: 00 02 54 50 34 52 01 50 41 44 52 01 42 50 41 44 ..TP4R.PADR.BPAD 43b0: 01 00 01 00 01 50 41 44 44 01 00 42 07 45 50 57 .....PADD..B.EPW 43c0: 47 01 00 01 43 53 4f 4e 01 44 53 43 49 01 44 53 G...CSON.DSCI.DS 43d0: 43 53 01 44 4c 41 4e 01 00 4a 30 47 41 49 44 08 CS.DLAN..J0GAID. 43e0: 10 48 0c 5c 5f 53 42 5f 08 54 43 47 50 11 0b 0a .H.\_SB_.TCGP... 43f0: 08 1f e0 1f 01 02 04 08 f0 8c 54 43 47 50 0a 00 ..........TCGP.. 4400: 50 50 52 51 8c 54 43 47 50 0a 01 50 50 4c 31 8c PPRQ.TCGP..PPL1. 4410: 54 43 47 50 0a 02 50 50 52 50 8c 54 43 47 50 0a TCGP..PPRP.TCGP. 4420: 03 54 50 52 53 8c 54 43 47 50 0a 04 50 50 4f 52 .TPRS.TCGP..PPOR 4430: 8c 54 43 47 50 0a 05 54 50 4d 56 8c 54 43 47 50 .TCGP..TPMV.TCGP 4440: 0a 06 4d 4f 52 5f 8c 54 43 47 50 0a 07 54 56 45 ..MOR_.TCGP..TVE 4450: 4e 5b 80 54 43 47 43 01 0a 72 0a 02 5b 81 10 54 N[.TCGC..r..[..T 4460: 43 47 43 11 54 49 44 58 08 54 50 44 41 08 5b 86 CGC.TIDX.TPDA.[. 4470: 1c 54 49 44 58 54 50 44 41 11 00 40 20 54 50 50 .TIDXTPDA..@ TPP 4480: 31 08 50 50 4c 4f 08 54 50 50 33 08 5b 80 53 4d 1.PPLO.TPP3.[.SM 4490: 49 50 01 0a b2 0a 02 5b 81 10 53 4d 49 50 02 53 IP.....[..SMIP.S 44a0: 4d 49 54 08 53 4d 49 44 08 5b 80 54 50 4d 46 00 MIT.SMID.[.TPMF. 44b0: 0c 00 00 ff ff 0b 55 aa 5b 81 10 54 50 4d 46 10 ......U.[..TPMF. 44c0: 50 50 49 50 08 50 50 49 43 08 5b 82 42 59 54 50 PPIP.PPIC.[.BYTP 44d0: 4d 5f 08 54 4d 50 56 0a 00 14 46 08 5f 48 49 44 M_.TMPV...F._HID 44e0: 00 a0 0f 93 54 56 49 44 0b d1 15 a4 0c 24 d8 01 ....TVID.....$.. 44f0: 02 a0 18 91 93 54 56 49 44 0b 50 10 93 54 56 49 .....TVID.P..TVI 4500: 44 0b 0b 10 a4 0c 5c a3 10 00 a0 0f 93 54 56 49 D.....\......TVI 4510: 44 0b fa 19 a4 0c 4d cf 35 04 a0 0f 93 54 44 49 D.....M.5....TDI 4520: 44 0b 02 10 a4 0c 08 6d 01 02 a0 0f 93 54 44 49 D......m.....TDI 4530: 44 0b 01 10 a4 0c 08 6d 01 01 a0 0f 93 54 56 49 D......m.....TVI 4540: 44 0b 14 11 a4 0c 06 8d 12 00 a0 0f 93 54 56 49 D............TVI 4550: 44 0b 4a 10 a4 0c 4d af 12 00 a4 0c 41 d0 0c 31 D.J...M.....A..1 4560: 08 5f 43 49 44 0c 41 d0 0c 31 08 5f 55 49 44 0a ._CID.A..1._UID. 4570: 01 5b 80 54 4d 4d 42 00 0c 00 00 d4 fe 0b 00 10 .[.TMMB......... 4580: 5b 81 26 54 4d 4d 42 11 41 43 43 53 08 00 48 0b [.&TMMB.ACCS..H. 4590: 54 53 54 41 08 54 42 43 41 08 00 80 73 07 54 56 TSTA.TBCA...s.TV 45a0: 49 44 10 54 44 49 44 10 14 23 5f 53 54 41 00 a0 ID.TDID..#_STA.. 45b0: 0b 93 41 43 43 53 0a ff a4 0a 00 a1 0d a0 0b 93 ..ACCS.......... 45c0: 54 50 4d 45 0a 00 a4 0a 00 a4 0a 0f 08 42 55 46 TPME.........BUF 45d0: 31 11 11 0a 0e 86 09 00 00 00 00 d4 fe 00 50 00 1.............P. 45e0: 00 79 00 14 0b 5f 43 52 53 08 a4 42 55 46 31 14 .y..._CRS..BUF1. 45f0: 3c 55 43 4d 50 02 a0 0a 92 93 0a 10 87 68 a4 0a 4f30: a0 1e 90 62 92 57 42 4f 4e 5c 57 42 45 43 0a 07 ...b.WBON\WBEC.. 4f40: 0a 00 5c 57 42 45 43 0a 06 0a 00 5b 22 0a 64 a0 ..\WBEC....[".d. 4f50: 0e 92 93 61 0a ff 5c 57 42 45 43 0a 07 61 a0 0e ...a..\WBEC..a.. 4f60: 92 93 60 0a ff 5c 57 42 45 43 0a 06 60 a0 05 93 ..`..\WBEC..`... 4f70: 68 0a 03 a0 0a 93 68 0a 07 5b 22 0b f4 01 14 42 h.....h..["....B 4f80: 07 45 56 4e 54 01 a0 37 5c 48 38 44 52 a0 18 68 .EVNT..7\H8DR..h 4f90: 7d 48 41 4d 37 0a 01 48 41 4d 37 7d 48 41 4d 35 }HAM7..HAM7}HAM5 4fa0: 0a 04 48 41 4d 35 a1 17 7b 48 41 4d 37 0a fe 48 ..HAM5..{HAM7..H 4fb0: 41 4d 37 7b 48 41 4d 35 0a fb 48 41 4d 35 a1 32 AM7{HAM5..HAM5.2 4fc0: a0 18 68 5c 4d 42 45 43 0a 17 0a ff 0a 01 5c 4d ..h\MBEC......\M 4fd0: 42 45 43 0a 15 0a ff 0a 04 a1 17 5c 4d 42 45 43 BEC........\MBEC 4fe0: 0a 17 0a fe 0a 00 5c 4d 42 45 43 0a 15 0a fb 0a ......\MBEC..... 4ff0: 00 5b 84 49 07 50 55 42 53 03 00 00 14 2b 5f 53 .[.I.PUBS....+_S 5000: 54 41 00 a0 0c 5c 48 38 44 52 70 48 55 42 53 60 TA...\H8DRpHUBS` 5010: a1 0c 7b 5c 52 42 45 43 0a 3b 0a 10 60 a0 05 60 ..{\RBEC.;..`..` 5020: a4 0a 01 a1 04 a4 0a 00 14 21 5f 4f 4e 5f 00 a0 .........!_ON_.. 5030: 0d 5c 48 38 44 52 70 0a 01 48 55 42 53 a1 0c 5c .\H8DRp..HUBS..\ 5040: 4d 42 45 43 0a 3b 0a ff 0a 10 14 21 5f 4f 46 46 MBEC.;.....!_OFF 5050: 00 a0 0d 5c 48 38 44 52 70 0a 00 48 55 42 53 a1 ...\H8DRp..HUBS. 5060: 0c 5c 4d 42 45 43 0a 3b 0a ef 0a 00 14 2b 43 48 .\MBEC.;.....+CH 5070: 4b 53 00 70 0b e8 03 60 a2 13 48 4d 50 52 5b 22 KS.p...`..HMPR[" 5080: 0a 01 76 60 a0 07 92 60 a4 0b 80 80 a0 07 48 4d ..v`...`......HM 5090: 44 4e a4 00 a4 0b 81 80 14 4b 12 4c 50 4d 44 00 DN.......K.LPMD. 50a0: 70 0a 00 60 70 0a 00 61 70 0a 00 62 a0 40 08 5c p..`p..ap..b.@.\ 50b0: 48 38 44 52 a0 48 07 48 50 41 43 a0 0c 48 50 4c H8DR.H.HPAC..HPL 50c0: 4f 70 5c 4c 50 53 54 60 a1 44 06 a0 41 06 95 48 Op\LPST`.D..A..H 50d0: 57 41 54 0a 5a a0 1f 48 42 30 41 a0 19 91 7b 48 WAT.Z..HB0A...{H 50e0: 42 30 53 0a 10 00 95 7b 48 42 30 53 0a 07 00 0a B0S....{HB0S.... 50f0: 02 70 0a 01 61 a1 05 70 0a 01 61 a0 1f 48 42 31 .p..a..p..a..HB1 5100: 41 a0 19 91 7b 48 42 31 53 0a 10 00 95 7b 48 42 A...{HB1S....{HB 5110: 31 53 0a 07 00 0a 02 70 0a 01 62 a1 05 70 0a 01 1S.....p..b..p.. 5120: 62 a0 0b 90 61 62 70 5c 4c 50 53 54 60 a1 44 09 b...abp\LPST`.D. 5130: a0 41 09 7b 5c 52 42 45 43 0a 46 0a 10 00 a0 13 .A.{\RBEC.F..... 5140: 7b 5c 52 42 45 43 0a 34 0a 80 00 70 5c 4c 50 53 {\RBEC.4...p\LPS 5150: 54 60 a1 4f 06 a0 4c 06 95 5c 52 42 45 43 0a c9 T`.O..L..\RBEC.. 5160: 0a 5a 70 5c 52 42 45 43 0a 38 63 a0 1a 7b 63 0a .Zp\RBEC.8c..{c. 5170: 80 00 a0 13 91 7b 63 0a 10 00 95 7b 63 0a 07 00 .....{c....{c... 5180: 0a 02 70 0a 01 61 a1 05 70 0a 01 62 70 5c 52 42 ..p..a..p..bp\RB 5190: 45 43 0a 39 63 a0 1a 7b 63 0a 80 00 a0 13 91 7b EC.9c..{c......{ 51a0: 63 0a 10 00 95 7b 63 0a 07 00 0a 02 70 0a 01 61 c....{c.....p..a 51b0: a1 05 70 0a 01 62 a0 0b 90 61 62 70 5c 4c 50 53 ..p..b...abp\LPS 51c0: 54 60 a4 60 14 3a 43 4c 50 4d 00 a0 33 7b 5c 50 T`.`.:CLPM..3{\P 51d0: 50 4d 46 0a 01 00 a0 0d 5c 4f 53 50 58 5c 50 4e PMF.....\OSPX\PN 51e0: 54 46 0a 80 a1 1a 70 4c 50 4d 44 60 a0 09 60 5c TF....pLPMD`..`\ 51f0: 53 54 45 50 0a 04 a1 08 5c 53 54 45 50 0a 05 5b STEP....\STEP..[ 5200: 01 4d 43 50 55 07 14 44 04 5f 51 31 30 00 a0 3c .MCPU..D._Q10..< 5210: 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E 5220: 43 5f 5f 48 4b 45 59 4d 48 4b 4b 0a 01 5c 2f 06 C__HKEYMHKK..\/. 5230: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 5240: 48 4b 45 59 4d 48 4b 51 0b 01 10 14 07 5f 51 31 HKEYMHKQ....._Q1 5250: 31 00 a3 14 44 04 5f 51 31 32 00 a0 3c 5c 2f 06 1...D._Q12..<\/. 5260: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 5270: 48 4b 45 59 4d 48 4b 4b 0a 02 5c 2f 06 5f 53 42 HKEYMHKK..\/._SB 5280: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 _PCI0LPC_EC__HKE 5290: 59 4d 48 4b 51 0b 02 10 14 41 05 5f 51 31 33 00 YMHKQ....A._Q13. 52a0: a0 3a 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 .:\/._SB_PCI0LPC 52b0: 5f 45 43 5f 5f 48 4b 45 59 44 48 4b 43 5c 2f 06 _EC__HKEYDHKC\/. 52c0: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 52d0: 48 4b 45 59 4d 48 4b 51 0b 04 10 a1 0e 86 5c 2e HKEYMHKQ......\. 52e0: 5f 53 42 5f 53 4c 50 42 0a 80 14 44 04 5f 51 36 _SB_SLPB...D._Q6 52f0: 34 00 a0 3c 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 4..<\/._SB_PCI0L 5300: 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 4b 0a PC_EC__HKEYMHKK. 5310: 10 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ 5320: 45 43 5f 5f 48 4b 45 59 4d 48 4b 51 0b 05 10 14 EC__HKEYMHKQ.... 5330: 44 04 5f 51 36 35 00 a0 3c 5c 2f 06 5f 53 42 5f D._Q65..<\/._SB_ 5340: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 PCI0LPC_EC__HKEY 5350: 4d 48 4b 4b 0a 20 5c 2f 06 5f 53 42 5f 50 43 49 MHKK. \/._SB_PCI 5360: 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 0LPC_EC__HKEYMHK 5370: 51 0b 06 10 14 4b 09 5f 51 31 36 00 a0 3c 5c 2f Q....K._Q16..<\/ 5380: 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ 5390: 5f 48 4b 45 59 4d 48 4b 4b 0a 40 5c 2f 06 5f 53 _HKEYMHKK.@\/._S 53a0: 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b B_PCI0LPC_EC__HK 53b0: 45 59 4d 48 4b 51 0b 07 10 a1 46 05 a0 21 93 5c EYMHKQ....F..!.\ 53c0: 56 48 59 42 0a 03 0a 00 0a 03 86 5c 2f 03 5f 53 VHYB.......\/._S 53d0: 42 5f 50 43 49 30 56 49 44 5f 0a 80 a4 00 a0 18 B_PCI0VID_...... 53e0: 56 49 47 44 5c 2f 04 5f 53 42 5f 50 43 49 30 56 VIGD\/._SB_PCI0V 53f0: 49 44 5f 56 53 57 54 a1 18 5c 2f 05 5f 53 42 5f ID_VSWT..\/._SB_ 5400: 50 43 49 30 50 45 47 5f 56 49 44 5f 56 53 57 54 PCI0PEG_VID_VSWT 5410: 14 42 05 5f 51 31 37 00 a0 3c 5c 2f 06 5f 53 42 .B._Q17..<\/._SB 5420: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 _PCI0LPC_EC__HKE 5430: 59 4d 48 4b 4b 0a 80 5c 2f 06 5f 53 42 5f 50 43 YMHKK..\/._SB_PC 5440: 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 I0LPC_EC__HKEYMH 5450: 4b 51 0b 08 10 a1 0d a0 0b 92 5c 57 4e 54 46 56 KQ........\WNTFV 5460: 45 58 50 14 46 04 5f 51 31 38 00 a0 3d 5c 2f 06 EXP.F._Q18..=\/. 5470: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 5480: 48 4b 45 59 4d 48 4b 4b 0b 00 01 5c 2f 06 5f 53 HKEYMHKK...\/._S 5490: 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b B_PCI0LPC_EC__HK 54a0: 45 59 4d 48 4b 51 0b 09 10 a3 14 45 04 5f 51 36 EYMHKQ.....E._Q6 54b0: 36 00 a0 3d 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 6..=\/._SB_PCI0L 54c0: 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 4b 0b PC_EC__HKEYMHKK. 54d0: 00 02 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 54e0: 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 51 0b 0a 10 _EC__HKEYMHKQ... 54f0: 14 45 04 5f 51 31 41 00 a0 3d 5c 2f 06 5f 53 42 .E._Q1A..=\/._SB 5500: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 _PCI0LPC_EC__HKE 5510: 59 4d 48 4b 4b 0b 00 04 5c 2f 06 5f 53 42 5f 50 YMHKK...\/._SB_P 5520: 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d CI0LPC_EC__HKEYM 5530: 48 4b 51 0b 0b 10 14 24 5f 51 31 42 00 5c 2f 06 HKQ....$_Q1B.\/. 5540: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 5550: 48 4b 45 59 4d 48 4b 51 0b 0c 10 14 45 04 5f 51 HKEYMHKQ....E._Q 5560: 36 32 00 a0 3d 5c 2f 06 5f 53 42 5f 50 43 49 30 62..=\/._SB_PCI0 5570: 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 4b LPC_EC__HKEYMHKK 5580: 0b 00 10 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 ...\/._SB_PCI0LP 5590: 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 51 0b 0d C_EC__HKEYMHKQ.. 55a0: 10 14 45 04 5f 51 36 30 00 a0 3d 5c 2f 06 5f 53 ..E._Q60..=\/._S 55b0: 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b B_PCI0LPC_EC__HK 55c0: 45 59 4d 48 4b 4b 0b 00 20 5c 2f 06 5f 53 42 5f EYMHKK.. \/._SB_ 55d0: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 PCI0LPC_EC__HKEY 55e0: 4d 48 4b 51 0b 0e 10 14 45 04 5f 51 36 31 00 a0 MHKQ....E._Q61.. 55f0: 3d 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f =\/._SB_PCI0LPC_ 5600: 45 43 5f 5f 48 4b 45 59 4d 48 4b 4b 0b 00 40 5c EC__HKEYMHKK..@\ 5610: 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 /._SB_PCI0LPC_EC 5620: 5f 5f 48 4b 45 59 4d 48 4b 51 0b 0f 10 14 4e 04 __HKEYMHKQ....N. 5630: 5f 51 31 46 00 a0 3f 5c 2f 06 5f 53 42 5f 50 43 _Q1F..?\/._SB_PC 5640: 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 I0LPC_EC__HKEYMH 5650: 4b 4b 0c 00 00 02 00 5c 2f 06 5f 53 42 5f 50 43 KK.....\/._SB_PC 5660: 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 I0LPC_EC__HKEYMH 5670: 4b 51 0b 12 10 5c 55 43 4d 53 0a 0e 14 47 04 5f KQ...\UCMS...G._ 5680: 51 36 37 00 a0 3f 5c 2f 06 5f 53 42 5f 50 43 49 Q67..?\/._SB_PCI 5690: 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 0LPC_EC__HKEYMHK 56a0: 4b 0c 00 00 04 00 5c 2f 06 5f 53 42 5f 50 43 49 K.....\/._SB_PCI 56b0: 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 0LPC_EC__HKEYMHK 56c0: 51 0b 13 10 14 47 04 5f 51 31 43 00 a0 3f 5c 2f Q....G._Q1C..?\/ 56d0: 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ 56e0: 5f 48 4b 45 59 4d 48 4b 4b 0c 00 00 00 01 5c 2f _HKEYMHKK.....\/ 56f0: 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ 5700: 5f 48 4b 45 59 4d 48 4b 51 0b 19 10 14 47 04 5f _HKEYMHKQ....G._ 5710: 51 31 44 00 a0 3f 5c 2f 06 5f 53 42 5f 50 43 49 Q1D..?\/._SB_PCI 5720: 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 0LPC_EC__HKEYMHK 5730: 4b 0c 00 00 00 02 5c 2f 06 5f 53 42 5f 50 43 49 K.....\/._SB_PCI 5740: 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 0LPC_EC__HKEYMHK 5750: 51 0b 1a 10 14 48 0f 5f 51 32 36 00 a0 28 56 49 Q....H._Q26..(VI 5760: 47 44 a0 0b 5c 57 56 49 53 5c 56 42 54 44 5c 2f GD..\WVIS\VBTD\/ 5770: 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ 5780: 5f 42 52 4e 53 a1 08 5c 55 43 4d 53 0a 12 a0 2e _BRNS..\UCMS.... 5790: 5c 2f 05 5f 53 42 5f 50 43 49 30 50 45 47 5f 56 \/._SB_PCI0PEG_V 57a0: 49 44 5f 49 53 4f 50 86 5c 2f 04 5f 53 42 5f 50 ID_ISOP.\/._SB_P 57b0: 43 49 30 50 45 47 5f 56 49 44 5f 0a df 5b 22 0b CI0PEG_VID_..[". 57c0: f4 01 86 41 43 5f 5f 0a 80 86 5c 2e 5f 54 5a 5f ...AC__...\._TZ_ 57d0: 54 48 4d 30 0a 80 a0 0e 5c 57 58 50 46 5b 23 4d THM0....\WXPF[#M 57e0: 43 50 55 ff ff 70 0a 01 50 57 52 53 a0 18 7b 5c CPU..p..PWRS..{\ 57f0: 50 50 4d 46 0a 01 00 a0 0d 5c 4f 53 50 58 5c 50 PPMF.....\OSPX\P 5800: 4e 54 46 0a 80 a0 0a 5c 57 58 50 46 5b 22 0a 64 NTF....\WXPF[".d 5810: a0 0d 5c 4f 53 43 34 5c 50 4e 54 46 0a 81 a0 0c ..\OSC4\PNTF.... 5820: 5c 57 58 50 46 5b 27 4d 43 50 55 5c 2f 06 5f 53 \WXPF['MCPU\/._S 5830: 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b B_PCI0LPC_EC__HK 5840: 45 59 4d 48 4b 51 0b 40 60 41 54 4d 43 14 24 5f EYMHKQ.@`ATMC.$_ 5850: 51 32 45 00 5c 2f 06 5f 53 42 5f 50 43 49 30 4c Q2E.\/._SB_PCI0L 5860: 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 51 0b PC_EC__HKEYMHKQ. 5870: 40 60 14 48 0f 5f 51 32 37 00 a0 28 56 49 47 44 @`.H._Q27..(VIGD 5880: a0 0b 5c 57 56 49 53 5c 56 42 54 44 5c 2f 05 5f ..\WVIS\VBTD\/._ 5890: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 42 SB_PCI0LPC_EC__B 58a0: 52 4e 53 a1 08 5c 55 43 4d 53 0a 12 a0 2e 5c 2f RNS..\UCMS....\/ 58b0: 05 5f 53 42 5f 50 43 49 30 50 45 47 5f 56 49 44 ._SB_PCI0PEG_VID 58c0: 5f 49 53 4f 50 86 5c 2f 04 5f 53 42 5f 50 43 49 _ISOP.\/._SB_PCI 58d0: 30 50 45 47 5f 56 49 44 5f 0a df 5b 22 0b f4 01 0PEG_VID_..["... 58e0: 86 41 43 5f 5f 0a 80 86 5c 2e 5f 54 5a 5f 54 48 .AC__...\._TZ_TH 58f0: 4d 30 0a 80 a0 0e 5c 57 58 50 46 5b 23 4d 43 50 M0....\WXPF[#MCP 5900: 55 ff ff 70 0a 00 50 57 52 53 a0 18 7b 5c 50 50 U..p..PWRS..{\PP 5910: 4d 46 0a 01 00 a0 0d 5c 4f 53 50 58 5c 50 4e 54 MF.....\OSPX\PNT 5920: 46 0a 80 a0 0a 5c 57 58 50 46 5b 22 0a 64 a0 0d F....\WXPF[".d.. 5930: 5c 4f 53 43 34 5c 50 4e 54 46 0a 81 a0 0c 5c 57 \OSC4\PNTF....\W 5940: 58 50 46 5b 27 4d 43 50 55 5c 2f 06 5f 53 42 5f XPF['MCPU\/._SB_ 5950: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 PCI0LPC_EC__HKEY 5960: 4d 48 4b 51 0b 40 60 41 54 4d 43 14 24 5f 51 32 MHKQ.@`ATMC.$_Q2 5970: 46 00 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 F.\/._SB_PCI0LPC 5980: 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 51 0b 40 60 _EC__HKEYMHKQ.@` 5990: 14 49 0a 5f 51 32 41 00 5c 56 43 4d 53 0a 01 5c .I._Q2A.\VCMS..\ 59a0: 2f 03 5f 53 42 5f 4c 49 44 5f 5f 4c 49 44 a0 4b /._SB_LID__LID.K 59b0: 08 93 5c 49 4c 4e 46 0a 00 5c 2f 06 5f 53 42 5f ..\ILNF..\/._SB_ 59c0: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 PCI0LPC_EC__HKEY 59d0: 4d 48 4b 51 0b 02 50 a0 42 06 93 5c 50 4c 55 58 MHKQ..P.B..\PLUX 59e0: 0a 00 a0 2f 56 49 47 44 5c 2f 04 5f 53 42 5f 50 .../VIGD\/._SB_P 59f0: 43 49 30 56 49 44 5f 47 4c 49 53 0a 01 5c 2f 04 CI0VID_GLIS..\/. 5a00: 5f 53 42 5f 50 43 49 30 56 49 44 5f 56 4c 4f 43 _SB_PCI0VID_VLOC 5a10: 0a 01 a1 1a 5c 2f 05 5f 53 42 5f 50 43 49 30 50 ....\/._SB_PCI0P 5a20: 45 47 5f 56 49 44 5f 56 4c 4f 43 0a 01 86 5c 2e EG_VID_VLOC...\. 5a30: 5f 53 42 5f 4c 49 44 5f 0a 80 14 4b 09 5f 51 32 _SB_LID_...K._Q2 5a40: 42 00 5c 55 43 4d 53 0a 0d 5c 56 43 4d 53 0a 01 B.\UCMS..\VCMS.. 5a50: 5c 2f 03 5f 53 42 5f 4c 49 44 5f 5f 4c 49 44 a0 \/._SB_LID__LID. 5a60: 46 07 93 5c 49 4c 4e 46 0a 00 5c 2f 06 5f 53 42 F..\ILNF..\/._SB 5a70: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 _PCI0LPC_EC__HKE 5a80: 59 4d 48 4b 51 0b 01 50 a0 4d 04 93 5c 50 4c 55 YMHKQ..P.M..\PLU 5a90: 58 0a 00 a0 1a 56 49 47 44 5c 2f 04 5f 53 42 5f X....VIGD\/._SB_ 5aa0: 50 43 49 30 56 49 44 5f 47 4c 49 53 0a 00 a1 1a PCI0VID_GLIS.... 5ab0: 5c 2f 05 5f 53 42 5f 50 43 49 30 50 45 47 5f 56 \/._SB_PCI0PEG_V 5ac0: 49 44 5f 56 4c 4f 43 0a 00 86 5c 2e 5f 53 42 5f ID_VLOC...\._SB_ 5ad0: 4c 49 44 5f 0a 80 14 06 5f 51 33 44 00 14 43 04 LID_...._Q3D..C. 5ae0: 5f 51 34 38 00 a0 3b 7b 5c 50 50 4d 46 0a 01 00 _Q48..;{\PPMF... 5af0: a0 0d 5c 4f 53 50 58 5c 50 4e 54 46 0a 80 a1 08 ..\OSPX\PNTF.... 5b00: 5c 53 54 45 50 0a 04 70 0a 01 5c 2f 05 5f 53 42 \STEP..p..\/._SB 5b10: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 43 41 4c _PCI0LPC_EC__CAL 5b20: 4d 14 28 5f 51 34 39 00 a0 21 7b 5c 50 50 4d 46 M.(_Q49..!{\PPMF 5b30: 0a 01 00 a0 0d 5c 4f 53 50 58 5c 50 4e 54 46 0a .....\OSPX\PNTF. 5b40: 80 a1 08 5c 53 54 45 50 0a 05 14 10 5f 51 37 46 ...\STEP...._Q7F 5b50: 00 5b 32 01 00 00 01 80 0b c3 02 14 24 5f 51 34 .[2.........$_Q4 5b60: 45 00 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 E.\/._SB_PCI0LPC 5b70: 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 51 0b 11 60 _EC__HKEYMHKQ..` 5b80: 14 24 5f 51 34 46 00 5c 2f 06 5f 53 42 5f 50 43 .$_Q4F.\/._SB_PC 5b90: 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 I0LPC_EC__HKEYMH 5ba0: 4b 51 0b 12 60 14 24 5f 51 34 36 00 5c 2f 06 5f KQ..`.$_Q46.\/._ 5bb0: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 SB_PCI0LPC_EC__H 5bc0: 4b 45 59 4d 48 4b 51 0b 12 60 14 24 5f 51 32 32 KEYMHKQ..`.$_Q22 5bd0: 00 43 4c 50 4d a0 0c 48 42 30 41 86 42 41 54 30 .CLPM..HB0A.BAT0 5be0: 0a 80 a0 0c 48 42 31 41 86 42 41 54 31 0a 80 14 ....HB1A.BAT1... 5bf0: 11 5f 51 34 41 00 43 4c 50 4d 86 42 41 54 30 0a ._Q4A.CLPM.BAT0. 5c00: 81 14 0d 5f 51 34 42 00 86 42 41 54 30 0a 80 14 ..._Q4B..BAT0... 5c10: 49 08 5f 51 34 43 00 43 4c 50 4d a0 41 06 5c 57 I._Q4C.CLPM.A.\W 5c20: 4e 54 46 a0 3d 48 42 31 41 70 0a 01 5c 2f 06 5f NTF.=HB1Ap..\/._ 5c30: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 42 SB_PCI0LPC_EC__B 5c40: 41 54 31 58 42 31 53 86 5c 2f 05 5f 53 42 5f 50 AT1XB1S.\/._SB_P 5c50: 43 49 30 4c 50 43 5f 45 43 5f 5f 42 41 54 31 0a CI0LPC_EC__BAT1. 5c60: 01 a1 1b 86 5c 2f 05 5f 53 42 5f 50 43 49 30 4c ....\/._SB_PCI0L 5c70: 50 43 5f 45 43 5f 5f 42 41 54 31 0a 03 a1 1b 86 PC_EC__BAT1..... 5c80: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E 5c90: 43 5f 5f 42 41 54 31 0a 81 14 25 5f 51 34 44 00 C__BAT1...%_Q4D. 5ca0: a0 1e 7b 5e 2e 42 41 54 31 42 31 53 54 5e 2e 42 ..{^.BAT1B1ST^.B 5cb0: 41 54 31 58 42 31 53 00 86 42 41 54 31 0a 80 14 AT1XB1S..BAT1... 5cc0: 11 5f 51 32 34 00 43 4c 50 4d 86 42 41 54 30 0a ._Q24.CLPM.BAT0. 5cd0: 80 14 29 5f 51 32 35 00 a0 22 7b 5e 2e 42 41 54 ..)_Q25.."{^.BAT 5ce0: 31 42 31 53 54 5e 2e 42 41 54 31 58 42 31 53 00 1B1ST^.BAT1XB1S. 5cf0: 43 4c 50 4d 86 42 41 54 31 0a 80 14 47 08 42 41 CLPM.BAT1...G.BA 5d00: 54 57 01 70 5c 2f 06 5f 53 42 5f 50 43 49 30 4c TW.p\/._SB_PCI0L 5d10: 50 43 5f 45 43 5f 5f 42 41 54 31 58 42 31 53 60 PC_EC__BAT1XB1S` 5d20: a0 0c 5c 48 38 44 52 70 48 42 31 41 61 a1 18 a0 ..\H8DRpHB1Aa... 5d30: 10 7b 5c 52 42 45 43 0a 39 0a 80 00 70 0a 01 61 .{\RBEC.9...p..a 5d40: a1 05 70 0a 00 61 a0 3c 7f 60 61 00 70 61 5c 2f ..p..a.<.`a.pa\/ 5d50: 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ 5d60: 5f 42 41 54 31 58 42 31 53 86 5c 2f 05 5f 53 42 _BAT1XB1S.\/._SB 5d70: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 42 41 54 _PCI0LPC_EC__BAT 5d80: 31 0a 01 5b 81 31 45 43 4f 52 01 00 40 50 53 42 1..[.1ECOR..@PSB 5d90: 52 43 10 53 42 46 43 10 53 42 41 45 10 53 42 52 RC.SBFC.SBAE.SBR 5da0: 53 10 53 42 41 43 10 53 42 56 4f 10 53 42 41 46 S.SBAC.SBVO.SBAF 5db0: 10 53 42 42 53 10 5b 81 18 45 43 4f 52 01 00 40 .SBBS.[..ECOR..@ 5dc0: 50 53 42 42 4d 10 53 42 4d 44 10 53 42 43 43 10 PSBBM.SBMD.SBCC. 5dd0: 5b 81 27 45 43 4f 52 01 00 40 50 53 42 44 43 10 [.'ECOR..@PSBDC. 5de0: 53 42 44 56 10 53 42 4f 4d 10 53 42 53 49 10 53 SBDV.SBOM.SBSI.S 5df0: 42 44 54 10 53 42 53 4e 10 5b 81 0e 45 43 4f 52 BDT.SBSN.[..ECOR 5e00: 01 00 40 50 53 42 43 48 20 5b 81 0f 45 43 4f 52 ..@PSBCH [..ECOR 5e10: 01 00 40 50 53 42 4d 4e 40 08 5b 81 0f 45 43 4f ..@PSBMN@.[..ECO 5e20: 52 01 00 40 50 53 42 44 4e 40 08 5b 01 42 41 54 R..@PSBDN@.[.BAT 5e30: 4d 07 14 48 16 47 42 49 46 03 5b 23 42 41 54 4d M..H.GBIF.[#BATM 5e40: ff ff a0 48 12 6a 7d 68 0a 01 48 49 49 44 70 53 ...H.j}h..HIIDpS 5e50: 42 42 4d 67 7a 67 0a 0f 67 7f 67 0a 01 88 69 0a BBMgzg..g.g...i. 5e60: 00 00 70 68 48 49 49 44 a0 0a 67 77 53 42 46 43 ..phHIID..gwSBFC 5e70: 0a 0a 61 a1 07 70 53 42 46 43 61 70 61 88 69 0a ..a..pSBFCapa.i. 5e80: 02 00 7d 68 0a 02 48 49 49 44 a0 0a 67 77 53 42 ..}h..HIID..gwSB 5e90: 44 43 0a 0a 60 a1 07 70 53 42 44 43 60 70 60 88 DC..`..pSBDC`p`. 5ea0: 69 0a 01 00 78 61 0a 14 62 88 69 0a 05 00 a0 0a i...xa..b.i..... 5eb0: 67 70 0a c8 88 69 0a 06 00 a1 21 a0 15 53 42 44 gp...i....!..SBD 5ec0: 56 78 0c 40 0d 03 00 53 42 44 56 62 88 69 0a 06 Vx.@...SBDVb.i.. 5ed0: 00 a1 09 70 0a 00 88 69 0a 06 00 70 53 42 44 56 ...p...i...pSBDV 5ee0: 88 69 0a 04 00 70 53 42 53 4e 60 08 53 45 52 4e .i...pSBSN`.SERN 5ef0: 11 09 0a 06 20 20 20 20 20 00 70 0a 04 62 a2 15 .... .p..b.. 5f00: 60 78 60 0a 0a 61 60 72 61 0a 30 88 53 45 52 4e `x`..a`ra.0.SERN 5f10: 62 00 76 62 70 53 45 52 4e 88 69 0a 0a 00 7d 68 b.vbpSERN.i...}h 5f20: 0a 06 48 49 49 44 70 53 42 44 4e 88 69 0a 09 00 ..HIIDpSBDN.i... 5f30: 7d 68 0a 04 48 49 49 44 08 42 54 59 50 11 08 0a }h..HIID.BTYP... 5f40: 05 00 00 00 00 00 70 53 42 43 48 42 54 59 50 70 ......pSBCHBTYPp 5f50: 42 54 59 50 88 69 0a 0b 00 7d 68 0a 05 48 49 49 BTYP.i...}h..HII 5f60: 44 70 53 42 4d 4e 88 69 0a 0c 00 a1 27 70 0c ff DpSBMN.i....'p.. 5f70: ff ff ff 88 69 0a 01 00 70 0a 00 88 69 0a 05 00 ....i...p...i... 5f80: 70 0a 00 88 69 0a 06 00 70 0c ff ff ff ff 88 69 p...i...p......i 5f90: 0a 02 00 5b 27 42 41 54 4d a4 69 14 4a 0d 47 42 ...['BATM.i.J.GB 5fa0: 53 54 04 5b 23 42 41 54 4d ff ff a0 0a 7b 69 0a ST.[#BATM....{i. 5fb0: 20 00 70 0a 02 60 a1 12 a0 0a 7b 69 0a 40 00 70 .p..`....{i.@.p 5fc0: 0a 01 60 a1 05 70 0a 00 60 a0 06 7b 69 0a 07 00 ..`..p..`..{i... 5fd0: a1 06 7d 60 0a 04 60 a0 19 93 7b 69 0a 07 00 0a ..}`..`...{i.... 5fe0: 07 70 0a 04 60 70 0a 00 61 70 0a 00 62 70 0a 00 .p..`p..ap..bp.. 5ff0: 63 a1 40 06 70 68 48 49 49 44 70 53 42 56 4f 63 c.@.phHIIDpSBVOc 6000: a0 0a 6a 77 53 42 52 43 0a 0a 62 a1 07 70 53 42 ..jwSBRC..b..pSB 6010: 52 43 62 70 53 42 41 43 61 a0 1c 92 95 61 0b 00 RCbpSBACa....a.. 6020: 80 a0 0e 7b 60 0a 01 00 74 0c 00 00 01 00 61 61 ...{`...t.....aa 6030: a1 05 70 0a 00 61 a1 0d a0 0b 92 7b 60 0a 02 00 ..p..a.....{`... 6040: 70 0a 00 61 a0 0d 6a 77 63 61 61 78 61 0b e8 03 p..a..jwcaaxa... 6050: 67 61 70 60 88 6b 0a 00 00 70 61 88 6b 0a 01 00 gap`.k...pa.k... 6060: 70 62 88 6b 0a 02 00 70 63 88 6b 0a 03 00 5b 27 pb.k...pc.k...[' 6070: 42 41 54 4d a4 6b 5b 82 47 15 42 41 54 30 08 5f BATM.k[.G.BAT0._ 6080: 48 49 44 0c 41 d0 0c 0a 08 5f 55 49 44 0a 00 08 HID.A...._UID... 6090: 5f 50 43 4c 12 07 01 5c 5f 53 42 5f 08 42 30 53 _PCL...\_SB_.B0S 60a0: 54 0a 00 08 42 54 30 49 12 23 0d 0a 00 0c ff ff T...BT0I.#...... 60b0: ff ff 0c ff ff ff ff 0a 01 0b 30 2a 0a 00 0a 00 ..........0*.... 60c0: 0a 01 0a 01 0d 00 0d 00 0d 00 0d 00 08 42 54 30 .............BT0 60d0: 50 12 02 04 14 44 04 5f 53 54 41 00 a0 0f 5c 48 P....D._STA...\H 60e0: 38 44 52 70 48 42 30 41 42 30 53 54 a1 1e a0 13 8DRpHB0AB0ST.... 60f0: 7b 5c 52 42 45 43 0a 38 0a 80 00 70 0a 01 42 30 {\RBEC.8...p..B0 6100: 53 54 a1 08 70 0a 00 42 30 53 54 a0 08 42 30 53 ST..p..B0ST..B0S 6110: 54 a4 0a 1f a1 04 a4 0a 0f 14 47 04 5f 42 49 46 T.........G._BIF 6120: 00 70 0a 00 67 70 0a 0a 66 a2 2b 90 92 67 66 a0 .p..gp..f.+..gf. 6130: 1f 48 42 30 41 a0 13 93 7b 48 42 30 53 0a 07 00 .HB0A...{HB0S... 6140: 0a 07 5b 22 0b e8 03 76 66 a1 05 70 0a 01 67 a1 ..["...vf..p..g. 6150: 05 70 0a 00 66 a4 47 42 49 46 0a 00 42 54 30 49 .p..f.GBIF..BT0I 6160: 67 14 23 5f 42 53 54 00 7f 83 88 42 54 30 49 0a g.#_BST....BT0I. 6170: 00 00 0a 01 60 a4 47 42 53 54 0a 00 48 42 30 53 ....`.GBST..HB0S 6180: 60 42 54 30 50 14 49 04 5f 42 54 50 01 7b 48 41 `BT0P.I._BTP.{HA 6190: 4d 34 0a ef 48 41 4d 34 a0 36 68 70 68 61 a0 11 M4..HAM4.6hpha.. 61a0: 92 83 88 42 54 30 49 0a 00 00 78 61 0a 0a 60 61 ...BT0I...xa..`a 61b0: 7b 61 0a ff 48 54 30 4c 7b 7a 61 0a 08 00 0a ff {a..HT0L{za..... 61c0: 48 54 30 48 7d 48 41 4d 34 0a 10 48 41 4d 34 5b HT0H}HAM4..HAM4[ 61d0: 82 49 19 42 41 54 31 08 5f 48 49 44 0c 41 d0 0c .I.BAT1._HID.A.. 61e0: 0a 08 5f 55 49 44 0a 01 08 5f 50 43 4c 12 07 01 .._UID..._PCL... 61f0: 5c 5f 53 42 5f 08 42 31 53 54 0a 00 08 58 42 31 \_SB_.B1ST...XB1 6200: 53 0a 01 08 42 54 31 49 12 23 0d 0a 00 0c ff ff S...BT1I.#...... 6210: ff ff 0c ff ff ff ff 0a 01 0b 30 2a 0a 00 0a 00 ..........0*.... 6220: 0a 01 0a 01 0d 00 0d 00 0d 00 0d 00 08 42 54 31 .............BT1 6230: 50 12 02 04 14 47 06 5f 53 54 41 00 a0 0f 5c 48 P....G._STA...\H 6240: 38 44 52 70 48 42 31 41 42 31 53 54 a1 1e a0 13 8DRpHB1AB1ST.... 6250: 7b 5c 52 42 45 43 0a 39 0a 80 00 70 0a 01 42 31 {\RBEC.9...p..B1 6260: 53 54 a1 08 70 0a 00 42 31 53 54 a0 1f 42 31 53 ST..p..B1ST..B1S 6270: 54 a0 08 58 42 31 53 a4 0a 1f a1 10 a0 09 5c 57 T..XB1S.......\W 6280: 4e 54 46 a4 0a 00 a1 04 a4 0a 1f a1 10 a0 09 5c NTF............\ 6290: 57 4e 54 46 a4 0a 00 a1 04 a4 0a 0f 14 47 04 5f WNTF.........G._ 62a0: 42 49 46 00 70 0a 00 67 70 0a 0a 66 a2 2b 90 92 BIF.p..gp..f.+.. 62b0: 67 66 a0 1f 48 42 31 41 a0 13 93 7b 48 42 31 53 gf..HB1A...{HB1S 62c0: 0a 07 00 0a 07 5b 22 0b e8 03 76 66 a1 05 70 0a .....["...vf..p. 62d0: 01 67 a1 05 70 0a 00 66 a4 47 42 49 46 0a 10 42 .g..p..f.GBIF..B 62e0: 54 31 49 67 14 23 5f 42 53 54 00 7f 83 88 42 54 T1Ig.#_BST....BT 62f0: 31 49 0a 00 00 0a 01 60 a4 47 42 53 54 0a 10 48 1I.....`.GBST..H 6300: 42 31 53 60 42 54 31 50 14 49 04 5f 42 54 50 01 B1S`BT1P.I._BTP. 6310: 7b 48 41 4d 34 0a df 48 41 4d 34 a0 36 68 70 68 {HAM4..HAM4.6hph 6320: 61 a0 11 92 83 88 42 54 31 49 0a 00 00 78 61 0a a.....BT1I...xa. 6330: 0a 60 61 7b 61 0a ff 48 54 31 4c 7b 7a 61 0a 08 .`a{a..HT1L{za.. 6340: 00 0a ff 48 54 31 48 7d 48 41 4d 34 0a 20 48 41 ...HT1H}HAM4. HA 6350: 4d 34 14 17 5f 45 4a 30 01 a0 10 68 70 0a 00 42 M4.._EJ0...hp..B 6360: 31 53 54 70 0a 00 58 42 31 53 5b 82 4d 05 41 43 1STp..XB1S[.M.AC 6370: 5f 5f 08 5f 48 49 44 0d 41 43 50 49 30 30 30 33 __._HID.ACPI0003 6380: 00 08 5f 55 49 44 0a 00 08 5f 50 43 4c 12 07 01 .._UID..._PCL... 6390: 5c 5f 53 42 5f 14 29 5f 50 53 52 00 a0 0b 5c 48 \_SB_.)_PSR...\H 63a0: 38 44 52 a4 48 50 41 43 a1 16 a0 0f 7b 5c 52 42 8DR.HPAC....{\RB 63b0: 45 43 0a 46 0a 10 00 a4 0a 01 a1 04 a4 0a 00 14 EC.F............ 63c0: 09 5f 53 54 41 00 a4 0a 0f 5b 82 4a 75 48 4b 45 ._STA....[.JuHKE 63d0: 59 08 5f 48 49 44 0c 30 ae 00 68 14 09 5f 53 54 Y._HID.0..h.._ST 63e0: 41 00 a4 0a 0f 14 0a 4d 48 4b 56 00 a4 0b 00 01 A......MHKV..... 63f0: 08 44 48 4b 43 0a 00 08 44 48 4b 42 0a 01 5b 01 .DHKC...DHKB..[. 6400: 58 44 48 4b 07 08 44 48 4b 48 0a 00 08 44 48 4b XDHK..DHKH...DHK 6410: 57 0a 00 08 44 48 4b 53 0a 00 08 44 48 4b 44 0a W...DHKS...DHKD. 6420: 00 08 44 48 4b 4e 0b 08 08 08 44 48 4b 54 0a 00 ..DHKN....DHKT.. 6430: 08 44 48 57 57 0a 00 14 0c 4d 48 4b 41 00 a4 0c .DHWW....MHKA... 6440: fb ff ff 07 14 0b 4d 48 4b 4e 00 a4 44 48 4b 4e ......MHKN..DHKN 6450: 14 18 4d 48 4b 4b 01 a0 0d 44 48 4b 43 a4 7b 44 ..MHKK...DHKC.{D 6460: 48 4b 4e 68 00 a1 03 a4 00 14 40 05 4d 48 4b 4d HKNh......@.MHKM 6470: 02 5b 23 58 44 48 4b ff ff a0 06 94 68 0a 20 a3 .[#XDHK.....h. . 6480: a1 33 79 01 76 68 60 a0 29 7b 60 0c fb ff ff 07 .3y.vh`.){`..... 6490: 00 a0 0c 69 7d 60 44 48 4b 4e 44 48 4b 4e a1 12 ...i}`DHKNDHKN.. 64a0: 7b 44 48 4b 4e 7f 60 0c ff ff ff ff 00 44 48 4b {DHKN.`......DHK 64b0: 4e a1 02 a3 5b 27 58 44 48 4b 14 13 4d 48 4b 53 N...['XDHK..MHKS 64c0: 00 86 5c 2e 5f 53 42 5f 53 4c 50 42 0a 80 14 0c ..\._SB_SLPB.... 64d0: 4d 48 4b 43 01 70 68 44 48 4b 43 14 49 08 4d 48 MHKC.phDHKC.I.MH 64e0: 4b 50 00 5b 23 58 44 48 4b ff ff a0 11 44 48 57 KP.[#XDHK....DHW 64f0: 57 70 44 48 57 57 61 70 00 44 48 57 57 a1 4f 05 WpDHWWap.DHWW.O. 6500: a0 11 44 48 4b 57 70 44 48 4b 57 61 70 00 44 48 ..DHKWpDHKWap.DH 6510: 4b 57 a1 4a 04 a0 11 44 48 4b 44 70 44 48 4b 44 KW.J...DHKDpDHKD 6520: 61 70 00 44 48 4b 44 a1 35 a0 11 44 48 4b 53 70 ap.DHKD.5..DHKSp 6530: 44 48 4b 53 61 70 00 44 48 4b 53 a1 21 a0 11 44 DHKSap.DHKS.!..D 6540: 48 4b 54 70 44 48 4b 54 61 70 00 44 48 4b 54 a1 HKTpDHKTap.DHKT. 6550: 0d 70 44 48 4b 48 61 70 00 44 48 4b 48 5b 27 58 .pDHKHap.DHKH['X 6560: 44 48 4b a4 61 14 3e 4d 48 4b 45 01 70 68 44 48 DHK.a.>MHKE.phDH 6570: 4b 42 5b 23 58 44 48 4b ff ff 70 00 44 48 4b 48 KB[#XDHK..p.DHKH 6580: 70 00 44 48 4b 57 70 00 44 48 4b 53 70 00 44 48 p.DHKWp.DHKSp.DH 6590: 4b 44 70 00 44 48 4b 54 70 00 44 48 57 57 5b 27 KDp.DHKTp.DHWW[' 65a0: 58 44 48 4b 14 45 0b 4d 48 4b 51 01 a0 4d 0a 44 XDHK.E.MHKQ..M.D 65b0: 48 4b 42 a0 40 09 44 48 4b 43 5b 23 58 44 48 4b HKB.@.DHKC[#XDHK 65c0: ff ff a0 06 95 68 0b 00 10 a1 4d 06 a0 0c 95 68 .....h....M....h 65d0: 0b 00 20 70 68 44 48 4b 48 a1 4d 05 a0 0c 95 68 .. phDHKH.M....h 65e0: 0b 00 30 70 68 44 48 4b 57 a1 4d 04 a0 0c 95 68 ..0phDHKW.M....h 65f0: 0b 00 40 70 68 44 48 4b 53 a1 3d a0 0c 95 68 0b ..@phDHKS.=...h. 6600: 00 50 70 68 44 48 4b 44 a1 2e a0 0c 95 68 0b 00 .PphDHKD.....h.. 6610: 60 70 68 44 48 4b 48 a1 1f a0 0c 95 68 0b 00 70 `phDHKH.....h..p 6620: 70 68 44 48 4b 54 a1 10 a0 0c 95 68 0b 00 80 70 phDHKT.....h...p 6630: 68 44 48 57 57 a1 01 5b 27 58 44 48 4b 86 48 4b hDHWW..['XDHK.HK 6640: 45 59 0a 80 a1 15 a0 13 93 68 0b 04 10 86 5c 2e EY.......h....\. 6650: 5f 53 42 5f 53 4c 50 42 0a 80 14 49 05 4d 48 4b _SB_SLPB...I.MHK 6660: 42 01 a0 26 93 68 0a 00 5c 2f 05 5f 53 42 5f 50 B..&.h..\/._SB_P 6670: 43 49 30 4c 50 43 5f 45 43 5f 5f 42 45 45 50 0a CI0LPC_EC__BEEP. 6680: 11 70 0a 00 5c 4c 49 44 42 a1 2a a0 26 93 68 0a .p..\LIDB.*.&.h. 6690: 01 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ 66a0: 45 43 5f 5f 42 45 45 50 0a 10 70 0a 01 5c 4c 49 EC__BEEP..p..\LI 66b0: 44 42 a1 01 14 47 04 4d 48 4b 44 00 a0 3f 93 5c DB...G.MHKD..?.\ 66c0: 50 4c 55 58 0a 00 a0 1a 56 49 47 44 5c 2f 04 5f PLUX....VIGD\/._ 66d0: 53 42 5f 50 43 49 30 56 49 44 5f 56 4c 4f 43 0a SB_PCI0VID_VLOC. 66e0: 00 a1 1a 5c 2f 05 5f 53 42 5f 50 43 49 30 50 45 ...\/._SB_PCI0PE 66f0: 47 5f 56 49 44 5f 56 4c 4f 43 0a 00 14 3e 4d 48 G_VID_VLOC...>MH 6700: 51 43 01 a0 31 5c 57 4e 54 46 a0 0b 93 68 0a 00 QC..1\WNTF...h.. 6710: a4 5c 43 57 41 43 a1 1e a0 0b 93 68 0a 01 a4 5c .\CWAC.....h...\ 6720: 43 57 41 50 a1 10 a0 0b 93 68 0a 02 a4 5c 43 57 CWAP.....h...\CW 6730: 41 54 a1 02 a3 a1 02 a3 a4 0a 00 14 35 4d 48 47 AT..........5MHG 6740: 43 00 a0 28 5c 57 4e 54 46 5b 23 58 44 48 4b ff C..(\WNTF[#XDHK. 6750: ff a0 0b 43 4b 43 34 0a 00 70 0a 03 60 a1 05 70 ...CKC4..p..`..p 6760: 0a 04 60 5b 27 58 44 48 4b a4 60 a1 02 a3 a4 0a ..`['XDHK.`..... 6770: 00 14 4c 06 4d 48 53 43 01 a0 41 06 90 5c 43 57 ..L.MHSC..A..\CW 6780: 41 43 5c 57 4e 54 46 5b 23 58 44 48 4b ff ff a0 AC\WNTF[#XDHK... 6790: 45 04 5c 4f 53 43 34 a0 1c 93 68 0a 03 a0 16 92 E.\OSC4...h..... 67a0: 5c 43 57 41 53 5c 50 4e 54 46 0a 81 70 0a 01 5c \CWAS\PNTF..p..\ 67b0: 43 57 41 53 a1 20 a0 1b 93 68 0a 04 a0 15 5c 43 CWAS. ...h....\C 67c0: 57 41 53 5c 50 4e 54 46 0a 81 70 0a 00 5c 43 57 WAS\PNTF..p..\CW 67d0: 41 53 a1 02 a3 5b 27 58 44 48 4b a1 02 a3 14 47 AS...['XDHK....G 67e0: 05 43 4b 43 34 01 70 0a 00 60 a0 13 5c 43 34 57 .CKC4.p..`..\C4W 67f0: 52 a0 0c 92 5c 43 34 41 43 7d 60 0a 01 60 a0 0b R...\C4AC}`..`.. 6800: 5c 43 34 4e 41 7d 60 0a 02 60 a0 11 90 5c 43 57 \C4NA}`..`...\CW 6810: 41 43 5c 43 57 41 53 7d 60 0a 04 60 a0 11 90 5c AC\CWAS}`..`...\ 6820: 43 57 55 45 5c 43 57 55 53 7d 60 0a 08 60 7b 60 CWUE\CWUS}`..`{` 6830: 80 68 00 60 a4 60 14 0c 4d 48 51 45 00 a4 5c 43 .h.`.`..MHQE..\C 6840: 34 57 52 14 19 4d 48 47 45 00 a0 0f 90 5c 43 34 4WR..MHGE....\C4 6850: 57 52 5c 43 34 41 43 a4 0a 04 a4 0a 03 14 44 06 WR\C4AC.......D. 6860: 4d 48 53 45 01 a0 4c 05 5c 43 34 57 52 70 5c 43 MHSE..L.\C4WRp\C 6870: 34 41 43 60 a0 25 93 68 0a 03 70 0a 00 5c 43 34 4AC`.%.h..p..\C4 6880: 41 43 a0 17 7f 60 5c 43 34 41 43 00 a0 0d 5c 4f AC...`\C4AC...\O 6890: 53 43 34 5c 50 4e 54 46 0a 81 a1 27 a0 25 93 68 SC4\PNTF...'.%.h 68a0: 0a 04 70 0a 01 5c 43 34 41 43 a0 17 7f 60 5c 43 ..p..\C4AC...`\C 68b0: 34 41 43 00 a0 0d 5c 4f 53 43 34 5c 50 4e 54 46 4AC...\OSC4\PNTF 68c0: 0a 81 14 0d 55 41 57 4f 01 a4 5c 55 41 57 53 68 ....UAWO..\UAWSh 68d0: 14 13 4d 4c 43 47 01 70 5c 4b 42 4c 53 0a 00 0a ..MLCG.p\KBLS... 68e0: 00 60 a4 60 14 4a 08 4d 4c 43 53 01 70 5c 4b 42 .`.`.J.MLCS.p\KB 68f0: 4c 53 0a 01 68 60 a0 46 07 92 7b 60 0c 00 00 00 LS..h`.F..{`.... 6900: 80 00 a0 27 7b 68 0c 00 00 01 00 00 5c 2f 06 5f ...'{h......\/._ 6910: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 SB_PCI0LPC_EC__H 6920: 4b 45 59 4d 48 4b 51 0b 01 60 a1 42 04 a0 3f 5c KEYMHKQ..`.B..?\ 6930: 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 /._SB_PCI0LPC_EC 6940: 5f 5f 48 4b 45 59 4d 48 4b 4b 0c 00 00 02 00 5c __HKEYMHKK.....\ 6950: 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 /._SB_PCI0LPC_EC 6960: 5f 5f 48 4b 45 59 4d 48 4b 51 0b 12 10 a4 60 14 __HKEYMHKQ....`. 6970: 12 44 53 53 47 01 7d 0b 00 04 5c 50 44 43 49 60 .DSSG.}...\PDCI` 6980: a4 60 14 12 44 53 53 53 01 7d 5c 50 44 43 49 68 .`..DSSS.}\PDCIh 6990: 5c 50 44 43 49 14 10 53 42 53 47 01 a4 5c 53 59 \PDCI..SBSG..\SY 69a0: 42 43 0a 00 0a 00 14 0f 53 42 53 53 01 a4 5c 53 BC......SBSS..\S 69b0: 59 42 43 0a 01 68 14 15 50 42 4c 47 01 70 5c 42 YBC..h..PBLG.p\B 69c0: 52 4c 56 60 7d 60 0b 00 0f 61 a4 61 14 41 06 50 RLV`}`...a.a.A.P 69d0: 42 4c 53 01 70 68 5c 42 52 4c 56 a0 1d 5c 56 49 BLS.ph\BRLV..\VI 69e0: 47 44 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 GD\/._SB_PCI0LPC 69f0: 5f 45 43 5f 5f 42 52 4e 53 a1 0b 5c 56 42 52 43 _EC__BRNS..\VBRC 6a00: 5c 42 52 4c 56 a0 25 92 5c 4e 42 43 46 5c 2f 06 \BRLV.%.\NBCF\/. 6a10: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 6a20: 48 4b 45 59 4d 48 4b 51 0b 50 60 a4 0a 00 14 4b HKEYMHKQ.P`....K 6a30: 04 50 4d 53 47 01 70 5c 50 52 53 4d 0a 00 0a 00 .PMSG.p\PRSM.... 6a40: 60 a0 36 92 5c 41 50 49 4e a0 0e 7b 60 0a 10 00 `.6.\APIN..{`... 6a50: 70 0a 01 5c 41 50 4d 44 a1 09 70 0a 00 5c 41 50 p..\APMD..p..\AP 6a60: 4d 44 a0 0d 5c 4f 53 50 58 5c 50 4e 54 46 0a 80 MD..\OSPX\PNTF.. 6a70: 70 0a 01 5c 41 50 49 4e a4 60 14 45 05 50 4d 53 p..\APIN.`.E.PMS 6a80: 53 01 5c 50 52 53 4d 0a 01 68 a0 42 04 91 90 92 S.\PRSM..h.B.... 6a90: 5c 41 50 4d 44 7b 68 0a 10 00 90 5c 41 50 4d 44 \APMD{h....\APMD 6aa0: 92 7b 68 0a 10 00 a0 0e 7b 68 0a 10 00 70 0a 01 .{h.....{h...p.. 6ab0: 5c 41 50 4d 44 a1 09 70 0a 00 5c 41 50 4d 44 a0 \APMD..p..\APMD. 6ac0: 0d 5c 4f 53 50 58 5c 50 4e 54 46 0a 80 a4 0a 00 .\OSPX\PNTF..... 6ad0: 14 20 49 53 53 47 01 70 5c 49 53 53 50 60 7d 60 . ISSG.p\ISSP`}` 6ae0: 0a 80 60 7d 60 7b 5c 49 53 43 47 0a 30 00 60 a4 ..`}`{\ISCG.0.`. 6af0: 60 14 10 49 53 53 53 01 70 68 5c 49 53 43 47 a4 `..ISSS.ph\ISCG. 6b00: 0a 00 14 10 46 46 53 47 01 a4 5c 49 46 52 53 0a ....FFSG..\IFRS. 6b10: 00 0a 00 14 11 46 46 53 53 01 5c 49 46 52 53 0a .....FFSS.\IFRS. 6b20: 01 68 a4 0a 00 10 46 27 5c 2f 05 5f 53 42 5f 50 .h....F'\/._SB_P 6b30: 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 08 CI0LPC_EC__HKEY. 6b40: 49 4e 44 56 0a 00 14 4c 07 4d 48 51 49 00 a0 15 INDV...L.MHQI... 6b50: 7b 5c 49 50 4d 53 0a 01 00 7d 49 4e 44 56 0a 01 {\IPMS...}INDV.. 6b60: 49 4e 44 56 a0 15 7b 5c 49 50 4d 53 0a 02 00 7d INDV..{\IPMS...} 6b70: 49 4e 44 56 0a 02 49 4e 44 56 a0 16 7b 5c 49 50 INDV..INDV..{\IP 6b80: 4d 53 0a 04 00 7d 49 4e 44 56 0b 00 01 49 4e 44 MS...}INDV...IND 6b90: 56 a0 16 7b 5c 49 50 4d 53 0a 08 00 7d 49 4e 44 V..{\IPMS...}IND 6ba0: 56 0b 00 02 49 4e 44 56 a0 15 7b 5c 49 50 4d 53 V...INDV..{\IPMS 6bb0: 0a 10 00 7d 49 4e 44 56 0a 04 49 4e 44 56 a4 49 ...}INDV..INDV.I 6bc0: 4e 44 56 14 42 17 4d 48 47 49 01 08 52 45 54 42 NDV.B.MHGI..RETB 6bd0: 11 03 0a 10 8c 52 45 54 42 0a 00 4d 48 47 53 79 .....RETB..MHGSy 6be0: 0a 01 68 60 a0 4c 14 7b 49 4e 44 56 60 00 a0 24 ..h`.L.{INDV`..$ 6bf0: 93 68 0a 00 5b 13 52 45 54 42 0a 08 0a 78 42 52 .h..[.RETB...xBR 6c00: 42 55 70 5c 49 50 4d 42 42 52 42 55 70 0a 10 4d BUp\IPMBBRBUp..M 6c10: 48 47 53 a1 4d 11 a0 24 93 68 0a 01 5b 13 52 45 HGS.M..$.h..[.RE 6c20: 54 42 0a 08 0a 18 52 52 42 55 70 5c 49 50 4d 52 TB....RRBUp\IPMR 6c30: 52 52 42 55 70 0a 04 4d 48 47 53 a1 45 0f a0 48 RRBUp..MHGS.E..H 6c40: 08 93 68 0a 08 5b 13 52 45 54 42 0a 10 0a 18 4f ..h..[.RETB....O 6c50: 44 42 55 8c 52 45 54 42 0a 01 4d 48 47 5a 70 5c DBU.RETB..MHGZp\ 6c60: 49 50 4d 4f 4f 44 42 55 a0 47 05 93 5e 5e 42 44 IPMOODBU.G..^^BD 6c70: 45 56 0a 03 a0 0e 5c 48 38 44 52 70 5e 5e 48 50 EV....\H8DRp^^HP 6c80: 42 55 61 a1 0c 7b 5c 52 42 45 43 0a 47 0a 01 61 BUa..{\RBEC.G..a 6c90: a0 0e 92 61 7d 0a 04 4d 48 47 5a 4d 48 47 5a a0 ...a}..MHGZMHGZ. 6ca0: 20 93 5e 5e 42 53 54 53 0a 00 7d 0a 01 4d 48 47 .^^BSTS..}..MHG 6cb0: 5a 4d 48 47 5a 7d 0a 02 4d 48 47 5a 4d 48 47 5a ZMHGZ}..MHGZMHGZ 6cc0: 70 0a 05 4d 48 47 53 a1 49 06 a0 2f 93 68 0a 09 p..MHGS.I../.h.. 6cd0: 5b 13 52 45 54 42 0a 10 0a 08 41 55 42 55 70 5c [.RETB....AUBUp\ 6ce0: 49 50 4d 41 41 55 42 55 70 0a 01 88 52 45 54 42 IPMAAUBUp...RETB 6cf0: 0a 01 00 70 0a 03 4d 48 47 53 a1 36 a0 34 93 68 ...p..MHGS.6.4.h 6d00: 0a 02 70 5c 56 44 59 4e 0a 00 0a 00 61 7b 61 0a ..p\VDYN....a{a. 6d10: 0f 88 52 45 54 42 0a 02 00 7a 61 0a 04 61 7b 61 ..RETB...za..a{a 6d20: 0a 0f 88 52 45 54 42 0a 01 00 70 0a 03 4d 48 47 ...RETB...p..MHG 6d30: 53 a4 52 45 54 42 14 45 06 4d 48 53 49 02 79 0a S.RETB.E.MHSI.y. 6d40: 01 68 60 a0 48 05 7b 49 4e 44 56 60 00 a0 3e 93 .h`.H.{INDV`..>. 6d50: 68 0a 08 a0 38 69 a0 0e 5c 48 38 44 52 70 5e 5e h...8i..\H8DRp^^ 6d60: 48 50 42 55 61 a1 0c 7b 5c 52 42 45 43 0a 47 0a HPBUa..{\RBEC.G. 6d70: 01 61 a0 19 92 61 70 5e 5e 42 47 49 44 0a 00 5e .a...ap^^BGID..^ 6d80: 5e 42 44 45 56 5e 5e 4e 42 49 4e 61 a1 0f a0 0d ^BDEV^^NBINa.... 6d90: 93 68 0a 02 5c 56 44 59 4e 0a 01 69 10 47 06 5c .h..\VDYN..i.G.\ 6da0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 /._SB_PCI0LPC_EC 6db0: 5f 5f 14 41 05 5f 51 36 41 00 a0 06 48 44 4d 43 __.A._Q6A...HDMC 6dc0: a3 a1 42 04 a0 3f 5c 2f 06 5f 53 42 5f 50 43 49 ..B..?\/._SB_PCI 6dd0: 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 0LPC_EC__HKEYMHK 6de0: 4b 0c 00 00 00 04 5c 2f 06 5f 53 42 5f 50 43 49 K.....\/._SB_PCI 6df0: 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 0LPC_EC__HKEYMHK 6e00: 51 0b 1b 10 10 48 0a 5c 2f 05 5f 53 42 5f 50 43 Q....H.\/._SB_PC 6e10: 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 14 1b I0LPC_EC__HKEY.. 6e20: 4d 4d 54 47 00 70 0b 01 01 60 a0 0d 48 44 4d 43 MMTG.p...`..HDMC 6e30: 7d 60 0c 00 00 01 00 60 a4 60 14 42 07 4d 4d 54 }`.....`.`.B.MMT 6e40: 53 01 a0 06 48 44 4d 43 a3 a1 43 06 a0 20 93 68 S...HDMC..C.. .h 6e50: 0a 02 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 6e60: 5f 45 43 5f 5f 4c 45 44 5f 0a 0e 0a 80 a1 3f a0 _EC__LED_.....?. 6e70: 20 93 68 0a 03 5c 2f 05 5f 53 42 5f 50 43 49 30 .h..\/._SB_PCI0 6e80: 4c 50 43 5f 45 43 5f 5f 4c 45 44 5f 0a 0e 0a c0 LPC_EC__LED_.... 6e90: a1 1c 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 6ea0: 5f 45 43 5f 5f 4c 45 44 5f 0a 0e 0a 00 10 45 06 _EC__LED_.....E. 6eb0: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E 6ec0: 43 5f 5f 48 4b 45 59 14 09 50 57 4d 43 00 a4 0a C__HKEY..PWMC... 6ed0: 01 14 41 04 50 57 4d 47 00 70 5c 2f 05 5f 53 42 ..A.PWMG.p\/._SB 6ee0: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 50 57 4d _PCI0LPC_EC__PWM 6ef0: 48 60 79 60 0a 08 60 7d 60 5c 2f 05 5f 53 42 5f H`y`..`}`\/._SB_ 6f00: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 50 57 4d 4c PCI0LPC_EC__PWML 6f10: 60 a4 60 10 39 5c 2f 04 5f 53 42 5f 50 43 49 30 `.`.9\/._SB_PCI0 6f20: 4c 50 43 5f 45 43 5f 5f 14 24 5f 51 33 46 00 5c LPC_EC__.$_Q3F.\ 6f30: 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 /._SB_PCI0LPC_EC 6f40: 5f 5f 48 4b 45 59 4d 48 4b 51 0b 00 60 10 25 5c __HKEYMHKQ..`.%\ 6f50: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 /._SB_PCI0LPC_EC 6f60: 5f 5f 48 4b 45 59 14 0c 4e 55 4d 47 00 70 0a 00 __HKEY..NUMG.p.. 6f70: 60 a4 60 5b 82 43 b1 50 45 47 5f 08 5f 41 44 52 `.`[.C.PEG_._ADR 6f80: 0c 00 00 01 00 08 5f 53 33 44 0a 03 08 52 49 44 ......_S3D...RID 6f90: 5f 0a 00 08 4c 41 52 54 12 2a 02 12 13 04 0b ff _...LART.*...... 6fa0: ff 0a 00 5c 2e 5f 53 42 5f 4c 4e 4b 41 0a 00 12 ...\._SB_LNKA... 6fb0: 13 04 0b ff ff 0a 01 5c 2e 5f 53 42 5f 4c 4e 4b .......\._SB_LNK 6fc0: 42 0a 00 08 41 41 52 54 12 1a 02 12 0b 04 0b ff B...AART........ 6fd0: ff 0a 00 0a 00 0a 10 12 0b 04 0b ff ff 0a 01 0a ................ 6fe0: 00 0a 11 14 19 5f 50 52 54 00 a0 0b 5c 47 50 49 ....._PRT...\GPI 6ff0: 43 a4 41 41 52 54 a1 06 a4 4c 41 52 54 5b 01 4d C.AART...LART[.M 7000: 44 47 53 07 08 56 44 45 45 0a 01 08 56 44 44 41 DGS..VDEE...VDDA 7010: 11 03 0a 04 8d 56 44 44 41 0a 00 56 55 50 43 8d .....VDDA..VUPC. 7020: 56 44 44 41 0a 01 56 51 44 4c 8d 56 44 44 41 0a VDDA..VQDL.VDDA. 7030: 02 56 51 44 43 8d 56 44 44 41 0a 03 56 51 44 30 .VQDC.VDDA..VQD0 7040: 8d 56 44 44 41 0a 04 56 51 44 31 8d 56 44 44 41 .VDDA..VQD1.VDDA 7050: 0a 05 56 51 44 32 8d 56 44 44 41 0a 06 56 51 44 ..VQD2.VDDA..VQD 7060: 33 8d 56 44 44 41 0a 07 56 51 44 34 8d 56 44 44 3.VDDA..VQD4.VDD 7070: 41 0a 08 56 51 44 35 8d 56 44 44 41 0a 09 56 53 A..VQD5.VDDA..VS 7080: 44 4c 8d 56 44 44 41 0a 0a 56 53 44 43 8d 56 44 DL.VDDA..VSDC.VD 7090: 44 41 0a 0b 56 53 44 30 8d 56 44 44 41 0a 0c 56 DA..VSD0.VDDA..V 70a0: 53 44 31 8d 56 44 44 41 0a 0d 56 53 44 32 8d 56 SD1.VDDA..VSD2.V 70b0: 44 44 41 0a 0e 56 53 44 33 8d 56 44 44 41 0a 0f DDA..VSD3.VDDA.. 70c0: 56 53 44 34 8d 56 44 44 41 0a 10 56 53 44 35 8d VSD4.VDDA..VSD5. 70d0: 56 44 44 41 0a 11 4d 53 57 54 8d 56 44 44 41 0a VDDA..MSWT.VDDA. 70e0: 12 56 57 53 54 5b 82 4b 97 56 49 44 5f 08 5f 41 .VWST[.K.VID_._A 70f0: 44 52 0a 00 5b 80 56 50 43 47 02 0a 00 0b 00 01 DR..[.VPCG...... 7100: 5b 81 1e 56 50 43 47 03 00 40 16 56 53 49 44 20 [..VPCG..@.VSID 7110: 00 40 08 56 49 44 53 20 00 40 16 56 50 57 52 08 .@.VIDS .@.VPWR. 7120: 08 5f 53 33 44 0a 03 08 44 47 4f 53 0a 00 14 45 ._S3D...DGOS...E 7130: 04 5f 49 4e 49 00 5c 56 55 50 53 0a 02 70 5c 56 ._INI.\VUPS..p\V 7140: 43 44 4c 56 51 44 4c 70 5c 56 43 44 43 56 51 44 CDLVQDLp\VCDCVQD 7150: 43 70 5c 56 43 44 54 56 51 44 30 70 5c 56 43 44 Cp\VCDTVQD0p\VCD 7160: 44 56 51 44 31 a0 0e 49 53 4f 50 5c 56 48 59 42 DVQD1..ISOP\VHYB 7170: 0a 04 0a 01 14 4d 0c 5f 50 53 30 00 a0 49 0b 49 .....M._PS0..I.I 7180: 53 4f 50 a0 4c 07 44 47 4f 53 5c 56 48 59 42 0a SOP.L.DGOS\VHYB. 7190: 02 0a 00 5b 22 0a 64 5c 56 48 59 42 0a 00 0a 01 ...[".d\VHYB.... 71a0: 5b 22 0a 0a 5c 56 48 59 42 0a 0a 0a 01 5b 22 0a ["..\VHYB....[". 71b0: 64 5c 56 48 59 42 0a 02 0a 01 5b 22 0a 01 5c 56 d\VHYB....["..\V 71c0: 48 59 42 0a 08 0a 01 70 0a 0a 60 70 0a 32 61 a2 HYB....p..`p.2a. 71d0: 11 61 5b 22 60 a0 09 5c 4c 43 48 4b 0a 01 a5 76 .a["`..\LCHK...v 71e0: 61 5c 56 48 59 42 0a 0a 0a 00 5c 56 48 59 42 0a a\VHYB....\VHYB. 71f0: 04 0a 00 5c 53 57 54 54 0a 01 70 00 44 47 4f 53 ...\SWTT..p.DGOS 7200: a1 17 a0 15 92 93 56 53 49 44 0c aa 17 f4 21 5c ......VSID....!\ 7210: 56 48 59 42 0a 04 0a 00 5c 56 48 59 42 0a 09 5c VHYB....\VHYB..\ 7220: 2f 05 5f 53 42 5f 50 43 49 30 50 45 47 5f 56 49 /._SB_PCI0PEG_VI 7230: 44 5f 48 44 41 53 a1 0b 70 0c aa 17 f3 21 56 49 D_HDAS..p....!VI 7240: 44 53 14 07 5f 50 53 31 00 a3 14 07 5f 50 53 32 DS.._PS1...._PS2 7250: 00 a3 14 4b 08 5f 50 53 33 00 a0 43 08 49 53 4f ...K._PS3..C.ISO 7260: 50 a0 4c 07 93 5c 2f 05 5f 53 42 5f 50 43 49 30 P.L..\/._SB_PCI0 7270: 50 45 47 5f 56 49 44 5f 4f 4d 50 52 0a 03 5c 53 PEG_VID_OMPR..\S 7280: 57 54 54 0a 00 5c 56 48 59 42 0a 08 0a 00 70 0a WTT..\VHYB....p. 7290: 0a 60 70 0a 32 61 a2 11 61 5b 22 60 a0 09 5c 4c .`p.2a..a["`..\L 72a0: 43 48 4b 0a 00 a5 76 61 5c 56 48 59 42 0a 02 0a CHK...va\VHYB... 72b0: 00 5b 22 0a 64 5c 56 48 59 42 0a 00 0a 00 70 01 .[".d\VHYB....p. 72c0: 44 47 4f 53 70 0a 02 5c 2f 05 5f 53 42 5f 50 43 DGOSp..\/._SB_PC 72d0: 49 30 50 45 47 5f 56 49 44 5f 4f 4d 50 52 14 09 I0PEG_VID_OMPR.. 72e0: 5f 53 54 41 00 a4 0a 0f 14 4a 05 5f 44 53 4d 04 _STA.....J._DSM. 72f0: a0 24 5c 43 4d 50 42 68 11 13 0a 10 f8 d8 86 a4 .$\CMPBh........ 7300: da 0b 1b 47 a7 2b 60 42 a6 b5 be e0 a4 4e 56 4f ...G.+`B.....NVO 7310: 50 68 69 6a 6b a0 24 5c 43 4d 50 42 68 11 13 0a Phijk.$\CMPBh... 7320: 10 01 2d 13 a3 da 8c ba 49 a5 2e bc 9d 46 df 6b ..-.....I....F.k 7330: 81 a4 4e 56 50 53 68 69 6a 6b a4 11 07 0a 04 01 ..NVPShijk...... 7340: 00 00 80 08 5f 49 52 43 0a 00 5b 80 41 54 52 50 ...._IRC..[.ATRP 7350: 00 5c 41 54 52 42 0c 00 00 01 00 5b 81 14 41 54 .\ATRB.....[..AT 7360: 52 50 10 49 44 58 30 80 00 40 49 44 58 31 80 00 RP.IDX0..@IDX1.. 7370: 40 14 4d 05 5f 52 4f 4d 0a a0 17 92 95 68 0b 00 @.M._ROM.....h.. 7380: 80 a4 47 45 54 42 74 68 0b 00 80 00 69 49 44 58 ..GETBth....iIDX 7390: 31 a0 32 94 72 68 69 00 0b 00 80 74 0b 00 80 68 1.2.rhi....t...h 73a0: 60 74 69 60 61 70 47 45 54 42 68 60 49 44 58 30 `ti`apGETBh`IDX0 73b0: 63 70 47 45 54 42 0a 00 61 49 44 58 31 64 73 63 cpGETB..aIDX1dsc 73c0: 64 65 a4 65 a4 47 45 54 42 68 69 49 44 58 30 14 de.e.GETBhiIDX0. 73d0: 1e 47 45 54 42 0b 77 68 0a 08 60 77 69 0a 08 61 .GETB.wh..`wi..a 73e0: 5b 13 6a 60 61 54 42 46 33 a4 54 42 46 33 14 30 [.j`aTBF3.TBF3.0 73f0: 56 53 57 54 00 a0 0f 5c 57 56 49 53 70 5c 56 45 VSWT...\WVISp\VE 7400: 56 54 0a 07 60 a1 0a 70 5c 56 45 56 54 0a 05 60 VT..`..p\VEVT..` 7410: 7b 0a ff 60 61 a0 09 61 41 53 57 54 61 0a 01 14 {..`a..aASWTa... 7420: 44 05 56 4c 4f 43 01 a0 4c 04 93 68 5c 2f 03 5f D.VLOC..L..h\/._ 7430: 53 42 5f 4c 49 44 5f 5f 4c 49 44 5c 56 53 4c 44 SB_LID__LID\VSLD 7440: 68 a0 32 93 7b 56 50 57 52 0a 03 00 0a 00 a0 0b h.2.{VPWR....... 7450: 68 70 5c 56 45 56 54 0a 01 60 a1 0a 70 5c 56 45 hp\VEVT..`..p\VE 7460: 56 54 0a 02 60 7b 0a 0f 60 61 a0 09 61 41 53 57 VT..`{..`a..aASW 7470: 54 61 0a 00 14 47 07 5f 44 4f 53 01 a0 3a 93 68 Ta...G._DOS..:.h 7480: 0a 02 70 0a 14 60 a2 30 60 76 60 5b 23 4d 44 47 ..p..`.0`v`[#MDG 7490: 53 ff ff a0 19 93 0a 00 4d 53 57 54 70 0a 01 4d S.......MSWTp..M 74a0: 53 57 54 70 0a 00 60 70 68 56 44 45 45 5b 27 4d SWTp..`phVDEE['M 74b0: 44 47 53 5b 22 0a c8 a1 34 5b 23 4d 44 47 53 ff DGS["...4[#MDGS. 74c0: ff a0 0f 93 56 44 45 45 0a 02 70 0a 00 4d 53 57 ....VDEE..p..MSW 74d0: 54 a0 0c 94 68 0a 02 70 0a 01 56 44 45 45 a1 07 T...h..p..VDEE.. 74e0: 70 68 56 44 45 45 5b 27 4d 44 47 53 14 22 5f 44 phVDEE['MDGS."_D 74f0: 4f 44 00 a4 12 1a 08 0b 00 01 0b 14 01 0b 11 01 OD.............. 7500: 0b 15 01 0b 12 01 0b 16 01 0b 13 01 0b 10 01 14 ................ 7510: 4f 12 41 53 57 54 02 a0 14 93 0a 01 56 44 45 45 O.ASWT......VDEE 7520: 7b 0a 01 69 61 5c 56 53 44 53 68 61 a1 42 11 70 {..ia\VSDSha.B.p 7530: 0a 14 60 a2 44 0f 60 76 60 5b 23 4d 44 47 53 ff ..`.D.`v`[#MDGS. 7540: ff a0 4c 0d 93 0a 00 4d 53 57 54 70 0a 00 60 a0 ..L....MSWTp..`. 7550: 0d 7b 0a 01 69 00 70 0a 01 56 55 50 43 a1 08 70 .{..i.p..VUPC..p 7560: 0a 00 56 55 50 43 a0 0d 7b 0a 01 68 00 70 0a 01 ..VUPC..{..h.p.. 7570: 56 51 44 4c a1 08 70 0a 00 56 51 44 4c a0 0d 7b VQDL..p..VQDL..{ 7580: 0a 02 68 00 70 0a 01 56 51 44 43 a1 08 70 0a 00 ..h.p..VQDC..p.. 7590: 56 51 44 43 a0 0d 7b 0a 04 68 00 70 0a 01 56 51 VQDC..{..h.p..VQ 75a0: 44 30 a1 08 70 0a 00 56 51 44 30 a0 0d 7b 0a 08 D0..p..VQD0..{.. 75b0: 68 00 70 0a 01 56 51 44 31 a1 08 70 0a 00 56 51 h.p..VQD1..p..VQ 75c0: 44 31 a0 0d 7b 0a 10 68 00 70 0a 01 56 51 44 32 D1..{..h.p..VQD2 75d0: a1 08 70 0a 00 56 51 44 32 a0 0d 7b 0a 20 68 00 ..p..VQD2..{. h. 75e0: 70 0a 01 56 51 44 33 a1 08 70 0a 00 56 51 44 33 p..VQD3..p..VQD3 75f0: a0 0d 7b 0a 40 68 00 70 0a 01 56 51 44 34 a1 08 ..{.@h.p..VQD4.. 7600: 70 0a 00 56 51 44 34 a0 0d 7b 0a 80 68 00 70 0a p..VQD4..{..h.p. 7610: 01 56 51 44 35 a1 08 70 0a 00 56 51 44 35 5b 27 .VQD5..p..VQD5[' 7620: 4d 44 47 53 5b 22 0a c8 a0 0d 7b 0a 02 69 00 86 MDGS["....{..i.. 7630: 56 49 44 5f 0a 81 a1 08 86 56 49 44 5f 0a 80 14 VID_.....VID_... 7640: 35 56 44 53 57 01 a0 2e 93 56 50 57 52 0a 00 a0 5VDSW....VPWR... 7650: 0b 68 70 5c 56 45 56 54 0a 03 60 a1 0a 70 5c 56 .hp\VEVT..`..p\V 7660: 45 56 54 0a 04 60 7b 0a 0f 60 61 a0 09 61 41 53 EVT..`{..`a..aAS 7670: 57 54 61 0a 00 5b 82 48 09 4c 43 44 30 14 0a 5f WTa..[.H.LCD0.._ 7680: 41 44 52 00 a4 0b 10 01 14 1c 5f 44 43 53 00 5c ADR......._DCS.\ 7690: 56 55 50 53 0a 00 a0 09 5c 56 43 44 4c a4 0a 1f VUPS....\VCDL... 76a0: a1 04 a4 0a 1d 14 0b 5f 44 47 53 00 a4 56 51 44 ......._DGS..VQD 76b0: 4c 14 30 5f 44 53 53 01 7b 68 0a 01 56 53 44 4c L.0_DSS.{h..VSDL 76c0: a0 21 7b 68 0c 00 00 00 80 00 a0 0f 7b 68 0c 00 .!{h........{h.. 76d0: 00 00 40 00 44 53 57 54 0a 02 a1 07 44 53 57 54 ..@.DSWT....DSWT 76e0: 0a 01 14 2c 5f 44 44 43 01 a0 08 49 53 4f 50 a4 ...,_DDC...ISOP. 76f0: 0a 00 a0 0b 93 68 0a 01 a4 5c 56 45 44 49 a1 0d .....h...\VEDI.. 7700: a0 0b 93 68 0a 02 a4 5c 56 45 44 49 a4 0a 00 5b ...h...\VEDI...[ 7710: 82 43 08 43 52 54 30 14 0a 5f 41 44 52 00 a4 0b .C.CRT0.._ADR... 7720: 00 01 14 34 5f 44 43 53 00 5c 56 55 50 53 0a 01 ...4_DCS.\VUPS.. 7730: a0 15 5c 56 43 53 53 a0 09 5c 56 43 44 43 a4 0a ..\VCSS..\VCDC.. 7740: 1f a1 04 a4 0a 1d a1 10 a0 09 5c 56 43 44 43 a4 ..........\VCDC. 7750: 0a 0f a1 04 a4 0a 0d 14 0b 5f 44 47 53 00 a4 56 ........._DGS..V 7760: 51 44 43 14 30 5f 44 53 53 01 7b 68 0a 01 56 53 QDC.0_DSS.{h..VS 7770: 44 43 a0 21 7b 68 0c 00 00 00 80 00 a0 0f 7b 68 DC.!{h........{h 7780: 0c 00 00 00 40 00 44 53 57 54 0a 02 a1 07 44 53 ....@.DSWT....DS 7790: 57 54 0a 01 5b 82 4b 06 44 56 49 30 14 0a 5f 41 WT..[.K.DVI0.._A 77a0: 44 52 00 a4 0b 11 01 14 1c 5f 44 43 53 00 5c 56 DR......._DCS.\V 77b0: 55 50 53 0a 00 a0 09 5c 56 43 44 44 a4 0a 1f a1 UPS....\VCDD.... 77c0: 04 a4 0a 1d 14 0b 5f 44 47 53 00 a4 56 51 44 31 ......_DGS..VQD1 77d0: 14 30 5f 44 53 53 01 7b 68 0a 01 56 53 44 31 a0 .0_DSS.{h..VSD1. 77e0: 21 7b 68 0c 00 00 00 80 00 a0 0f 7b 68 0c 00 00 !{h........{h... 77f0: 00 40 00 44 53 57 54 0a 02 a1 07 44 53 57 54 0a .@.DSWT....DSWT. 7800: 01 5b 82 4b 06 44 50 30 5f 14 0a 5f 41 44 52 00 .[.K.DP0_.._ADR. 7810: a4 0b 14 01 14 1c 5f 44 43 53 00 5c 56 55 50 53 ......_DCS.\VUPS 7820: 0a 00 a0 09 5c 56 43 44 54 a4 0a 1f a1 04 a4 0a ....\VCDT....... 7830: 1d 14 0b 5f 44 47 53 00 a4 56 51 44 30 14 30 5f ..._DGS..VQD0.0_ 7840: 44 53 53 01 7b 68 0a 01 56 53 44 30 a0 21 7b 68 DSS.{h..VSD0.!{h 7850: 0c 00 00 00 80 00 a0 0f 7b 68 0c 00 00 00 40 00 ........{h....@. 7860: 44 53 57 54 0a 02 a1 07 44 53 57 54 0a 01 5b 82 DSWT....DSWT..[. 7870: 4b 06 44 56 49 31 14 0a 5f 41 44 52 00 a4 0b 12 K.DVI1.._ADR.... 7880: 01 14 1c 5f 44 43 53 00 5c 56 55 50 53 0a 00 a0 ..._DCS.\VUPS... 7890: 09 5c 56 43 44 44 a4 0a 1f a1 04 a4 0a 1d 14 0b .\VCDD.......... 78a0: 5f 44 47 53 00 a4 56 51 44 33 14 30 5f 44 53 53 _DGS..VQD3.0_DSS 78b0: 01 7b 68 0a 01 56 53 44 33 a0 21 7b 68 0c 00 00 .{h..VSD3.!{h... 78c0: 00 80 00 a0 0f 7b 68 0c 00 00 00 40 00 44 53 57 .....{h....@.DSW 78d0: 54 0a 02 a1 07 44 53 57 54 0a 01 5b 82 4b 06 44 T....DSWT..[.K.D 78e0: 50 31 5f 14 0a 5f 41 44 52 00 a4 0b 15 01 14 1c P1_.._ADR....... 78f0: 5f 44 43 53 00 5c 56 55 50 53 0a 00 a0 09 5c 56 _DCS.\VUPS....\V 7900: 43 44 54 a4 0a 1f a1 04 a4 0a 1d 14 0b 5f 44 47 CDT.........._DG 7910: 53 00 a4 56 51 44 32 14 30 5f 44 53 53 01 7b 68 S..VQD2.0_DSS.{h 7920: 0a 01 56 53 44 32 a0 21 7b 68 0c 00 00 00 80 00 ..VSD2.!{h...... 7930: a0 0f 7b 68 0c 00 00 00 40 00 44 53 57 54 0a 02 ..{h....@.DSWT.. 7940: a1 07 44 53 57 54 0a 01 5b 82 4b 06 44 56 49 32 ..DSWT..[.K.DVI2 7950: 14 0a 5f 41 44 52 00 a4 0b 13 01 14 1c 5f 44 43 .._ADR......._DC 7960: 53 00 5c 56 55 50 53 0a 00 a0 09 5c 56 43 44 44 S.\VUPS....\VCDD 7970: a4 0a 1f a1 04 a4 0a 1d 14 0b 5f 44 47 53 00 a4 .........._DGS.. 7980: 56 51 44 35 14 30 5f 44 53 53 01 7b 68 0a 01 56 VQD5.0_DSS.{h..V 7990: 53 44 35 a0 21 7b 68 0c 00 00 00 80 00 a0 0f 7b SD5.!{h........{ 79a0: 68 0c 00 00 00 40 00 44 53 57 54 0a 02 a1 07 44 h....@.DSWT....D 79b0: 53 57 54 0a 01 5b 82 4b 06 44 50 32 5f 14 0a 5f SWT..[.K.DP2_.._ 79c0: 41 44 52 00 a4 0b 16 01 14 1c 5f 44 43 53 00 5c ADR......._DCS.\ 79d0: 56 55 50 53 0a 00 a0 09 5c 56 43 44 54 a4 0a 1f VUPS....\VCDT... 79e0: a1 04 a4 0a 1d 14 0b 5f 44 47 53 00 a4 56 51 44 ......._DGS..VQD 79f0: 34 14 30 5f 44 53 53 01 7b 68 0a 01 56 53 44 34 4.0_DSS.{h..VSD4 7a00: a0 21 7b 68 0c 00 00 00 80 00 a0 0f 7b 68 0c 00 .!{h........{h.. 7a10: 00 00 40 00 44 53 57 54 0a 02 a1 07 44 53 57 54 ..@.DSWT....DSWT 7a20: 0a 01 14 3f 44 53 57 54 01 a0 09 56 53 44 4c 70 ...?DSWT...VSDLp 7a30: 0a 01 60 a1 05 70 0a 00 60 a0 0a 56 53 44 43 7d ..`..p..`..VSDC} 7a40: 0a 02 60 60 a0 0a 56 53 44 30 7d 0a 08 60 60 a0 ..``..VSD0}..``. 7a50: 0f 60 a0 0c 56 55 50 43 5c 56 53 44 53 60 68 a1 .`..VUPC\VSDS`h. 7a60: 02 a3 5b 80 50 45 47 43 02 0a 00 0b 00 01 5b 81 ..[.PEGC......[. 7a70: 18 50 45 47 43 03 00 40 76 47 4d 47 50 01 48 50 .PEGC..@vGMGP.HP 7a80: 47 50 01 50 4d 47 50 01 5b 82 29 49 47 42 45 08 GP.PMGP.[.)IGBE. 7a90: 5f 41 44 52 0c 00 00 19 00 08 5f 53 33 44 0a 03 _ADR......_S3D.. 7aa0: 08 52 49 44 5f 0a 00 08 5f 50 52 57 12 06 02 0a .RID_..._PRW.... 7ab0: 0d 0a 04 5b 82 48 13 45 58 50 31 08 5f 41 44 52 ...[.H.EXP1._ADR 7ac0: 0c 00 00 1c 00 08 52 49 44 5f 0a 00 5b 80 50 45 ......RID_..[.PE 7ad0: 43 53 02 0a 00 0b 00 01 5b 81 43 04 50 45 43 53 CS......[.C.PECS 7ae0: 03 00 40 2d 00 03 50 44 43 5f 01 00 02 50 44 53 ..@-..PDC_...PDS 7af0: 5f 01 00 01 00 38 50 53 5f 5f 01 50 50 5f 5f 01 _....8PS__.PP__. 7b00: 00 46 3c 00 06 48 50 43 45 01 50 4d 43 45 01 00 .F<..HPCE.PMCE.. 7b10: 18 00 06 48 50 43 53 01 50 4d 43 53 01 14 0f 5f ...HPCS.PMCS..._ 7b20: 49 4e 49 00 70 50 44 53 5f 50 44 53 46 08 4c 50 INI.pPDS_PDSF.LP 7b30: 52 54 12 43 05 04 12 13 04 0b ff ff 0a 00 5c 2e RT.C..........\. 7b40: 5f 53 42 5f 4c 4e 4b 41 0a 00 12 13 04 0b ff ff _SB_LNKA........ 7b50: 0a 01 5c 2e 5f 53 42 5f 4c 4e 4b 42 0a 00 12 13 ..\._SB_LNKB.... 7b60: 04 0b ff ff 0a 02 5c 2e 5f 53 42 5f 4c 4e 4b 43 ......\._SB_LNKC 7b70: 0a 00 12 13 04 0b ff ff 0a 03 5c 2e 5f 53 42 5f ..........\._SB_ 7b80: 4c 4e 4b 44 0a 00 08 41 50 52 54 12 32 04 12 0b LNKD...APRT.2... 7b90: 04 0b ff ff 0a 00 0a 00 0a 10 12 0b 04 0b ff ff ................ 7ba0: 0a 01 0a 00 0a 11 12 0b 04 0b ff ff 0a 02 0a 00 ................ 7bb0: 0a 12 12 0b 04 0b ff ff 0a 03 0a 00 0a 13 14 19 ................ 7bc0: 5f 50 52 54 00 a0 0b 5c 47 50 49 43 a4 41 50 52 _PRT...\GPIC.APR 7bd0: 54 a1 06 a4 4c 50 52 54 08 50 44 53 46 0a 00 5b T...LPRT.PDSF..[ 7be0: 82 0c 53 4c 4f 54 08 5f 41 44 52 0a 00 5b 82 46 ..SLOT._ADR..[.F 7bf0: 0f 45 58 50 32 08 5f 41 44 52 0c 01 00 1c 00 08 .EXP2._ADR...... 7c00: 52 49 44 5f 0a 00 5b 80 50 45 43 53 02 0a 00 0b RID_..[.PECS.... 7c10: 00 01 5b 81 26 50 45 43 53 03 00 40 31 50 53 5f ..[.&PECS..@1PS_ 7c20: 5f 01 50 50 5f 5f 01 00 46 3c 00 07 50 4d 43 45 _.PP__..F<..PMCE 7c30: 01 00 18 00 07 50 4d 43 53 01 08 4c 50 52 54 12 .....PMCS..LPRT. 7c40: 43 05 04 12 13 04 0b ff ff 0a 00 5c 2e 5f 53 42 C..........\._SB 7c50: 5f 4c 4e 4b 42 0a 00 12 13 04 0b ff ff 0a 01 5c _LNKB..........\ 7c60: 2e 5f 53 42 5f 4c 4e 4b 43 0a 00 12 13 04 0b ff ._SB_LNKC....... 7c70: ff 0a 02 5c 2e 5f 53 42 5f 4c 4e 4b 44 0a 00 12 ...\._SB_LNKD... 7c80: 13 04 0b ff ff 0a 03 5c 2e 5f 53 42 5f 4c 4e 4b .......\._SB_LNK 7c90: 41 0a 00 08 41 50 52 54 12 32 04 12 0b 04 0b ff A...APRT.2...... 7ca0: ff 0a 00 0a 00 0a 11 12 0b 04 0b ff ff 0a 01 0a ................ 7cb0: 00 0a 12 12 0b 04 0b ff ff 0a 02 0a 00 0a 13 12 ................ 7cc0: 0b 04 0b ff ff 0a 03 0a 00 0a 10 14 19 5f 50 52 ............._PR 7cd0: 54 00 a0 0b 5c 47 50 49 43 a4 41 50 52 54 a1 06 T...\GPIC.APRT.. 7ce0: a4 4c 50 52 54 5b 82 4e 14 45 58 50 33 08 5f 41 .LPRT[.N.EXP3._A 7cf0: 44 52 0c 02 00 1c 00 08 52 49 44 5f 0a 00 5b 80 DR......RID_..[. 7d00: 50 45 43 53 02 0a 00 0b 00 01 5b 81 43 04 50 45 PECS......[.C.PE 7d10: 43 53 03 00 40 2d 00 03 50 44 43 5f 01 00 02 50 CS..@-..PDC_...P 7d20: 44 53 5f 01 00 01 00 38 50 53 5f 5f 01 50 50 5f DS_....8PS__.PP_ 7d30: 5f 01 00 46 3c 00 06 48 50 43 45 01 50 4d 43 45 _..F<..HPCE.PMCE 7d40: 01 00 18 00 06 48 50 43 53 01 50 4d 43 53 01 14 .....HPCS.PMCS.. 7d50: 0f 5f 49 4e 49 00 70 50 44 53 5f 50 44 53 46 08 ._INI.pPDS_PDSF. 7d60: 5f 50 52 57 12 06 02 0a 09 0a 04 08 4c 50 52 54 _PRW........LPRT 7d70: 12 43 05 04 12 13 04 0b ff ff 0a 00 5c 2e 5f 53 .C..........\._S 7d80: 42 5f 4c 4e 4b 43 0a 00 12 13 04 0b ff ff 0a 01 B_LNKC.......... 7d90: 5c 2e 5f 53 42 5f 4c 4e 4b 44 0a 00 12 13 04 0b \._SB_LNKD...... 7da0: ff ff 0a 02 5c 2e 5f 53 42 5f 4c 4e 4b 41 0a 00 ....\._SB_LNKA.. 7db0: 12 13 04 0b ff ff 0a 03 5c 2e 5f 53 42 5f 4c 4e ........\._SB_LN 7dc0: 4b 42 0a 00 08 41 50 52 54 12 32 04 12 0b 04 0b KB...APRT.2..... 7dd0: ff ff 0a 00 0a 00 0a 12 12 0b 04 0b ff ff 0a 01 ................ 7de0: 0a 00 0a 13 12 0b 04 0b ff ff 0a 02 0a 00 0a 10 ................ 7df0: 12 0b 04 0b ff ff 0a 03 0a 00 0a 11 14 19 5f 50 .............._P 7e00: 52 54 00 a0 0b 5c 47 50 49 43 a4 41 50 52 54 a1 RT...\GPIC.APRT. 7e10: 06 a4 4c 50 52 54 08 50 44 53 46 0a 00 5b 82 16 ..LPRT.PDSF..[.. 7e20: 53 4c 4f 54 08 5f 41 44 52 0a 00 14 09 5f 52 4d SLOT._ADR...._RM 7e30: 56 00 a4 0a 01 5b 82 1d 53 41 54 31 08 5f 41 44 V....[..SAT1._AD 7e40: 52 0c 02 00 1f 00 08 5f 53 33 44 0a 03 08 52 49 R......_S3D...RI 7e50: 44 5f 0a 00 5b 82 1d 53 41 54 32 08 5f 41 44 52 D_..[..SAT2._ADR 7e60: 0c 05 00 1f 00 08 5f 53 33 44 0a 03 08 52 49 44 ......_S3D...RID 7e70: 5f 0a 00 5b 82 1d 53 4d 42 55 08 5f 41 44 52 0c _..[..SMBU._ADR. 7e80: 03 00 1f 00 08 5f 53 33 44 0a 03 08 52 49 44 5f ....._S3D...RID_ 7e90: 0a 00 5b 82 40 69 58 48 43 49 08 5f 41 44 52 0c ..[.@iXHCI._ADR. 7ea0: 00 00 14 00 08 5f 53 33 44 0a 03 08 52 49 44 5f ....._S3D...RID_ 7eb0: 0a 00 5b 80 58 48 43 53 02 0a 00 0b 00 01 5b 81 ..[.XHCS......[. 7ec0: 1d 58 48 43 53 03 00 40 68 50 52 32 5f 20 50 52 .XHCS..@hPR2_ PR 7ed0: 32 4d 20 50 52 33 5f 20 50 52 33 4d 20 08 5f 50 2M PR3_ PR3M ._P 7ee0: 52 30 12 19 01 5c 2f 05 5f 53 42 5f 50 43 49 30 R0...\/._SB_PCI0 7ef0: 4c 50 43 5f 45 43 5f 5f 50 55 42 53 08 5f 50 52 LPC_EC__PUBS._PR 7f00: 31 12 19 01 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 1...\/._SB_PCI0L 7f10: 50 43 5f 45 43 5f 5f 50 55 42 53 08 5f 50 52 32 PC_EC__PUBS._PR2 7f20: 12 19 01 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 ...\/._SB_PCI0LP 7f30: 43 5f 45 43 5f 5f 50 55 42 53 08 5f 50 52 57 12 C_EC__PUBS._PRW. 7f40: 1d 03 0a 0d 0a 03 5c 2f 05 5f 53 42 5f 50 43 49 ......\/._SB_PCI 7f50: 30 4c 50 43 5f 45 43 5f 5f 50 55 42 53 14 24 43 0LPC_EC__PUBS.$C 7f60: 55 49 44 09 a0 1a 93 68 11 13 0a 10 a9 12 95 7c UID....h.......| 7f70: 05 17 b4 4c af 7d 50 6a 24 23 ab 71 a4 0a 01 a4 ...L.}Pj$#.q.... 7f80: 0a 00 14 48 05 50 4f 53 43 0b 8a 6a 0a 00 43 44 ...H.POSC..j..CD 7f90: 57 31 a0 10 92 93 68 01 7d 43 44 57 31 0a 08 43 W1....h.}CDW1..C 7fa0: 44 57 31 a0 14 93 5c 58 48 43 4d 0a 00 7d 43 44 DW1...\XHCM..}CD 7fb0: 57 31 0a 02 43 44 57 31 a0 20 90 92 7b 43 44 57 W1..CDW1. ..{CDW 7fc0: 31 0a 01 00 91 93 5c 58 48 43 4d 0a 02 93 5c 58 1.....\XHCM...\X 7fd0: 48 43 4d 0a 03 53 58 48 43 a4 6a 14 49 08 53 58 HCM..SXHC.j.I.SX 7fe0: 48 43 00 70 0a 00 60 7b 50 52 33 5f 0c f0 ff ff HC.p..`{PR3_.... 7ff0: ff 60 7d 60 5c 58 48 50 4d 60 a0 1b 93 5c 2f 03 .`}`\XHPM`...\/. 8000: 5f 53 42 5f 47 44 43 4b 47 47 49 44 0a 05 7b 60 _SB_GDCKGGID..{` 8010: 0c fb ff ff ff 60 7b 60 50 52 33 4d 50 52 33 5f .....`{`PR3MPR3_ 8020: 70 0a 00 60 7b 50 52 32 5f 0c f0 ff ff ff 60 7d p..`{PR2_.....`} 8030: 60 5c 58 48 50 4d 60 a0 1b 93 5c 2f 03 5f 53 42 `\XHPM`...\/._SB 8040: 5f 47 44 43 4b 47 47 49 44 0a 05 7b 60 0c fb ff _GDCKGGID..{`... 8050: ff ff 60 7b 60 50 52 32 4d 50 52 32 5f 70 0a 01 ..`{`PR2MPR2_p.. 8060: 5c 55 53 42 52 5b 82 4d 4b 55 52 54 48 08 5f 41 \USBR[.MKURTH._A 8070: 44 52 0a 00 5b 82 49 08 48 53 50 30 08 5f 41 44 DR..[.I.HSP0._AD 8080: 52 0a 01 14 3b 5f 55 50 43 08 08 55 50 43 50 12 R...;_UPC..UPCP. 8090: 0a 04 0a 00 0a 00 0a 00 0a 00 9d 5c 55 50 43 30 ...........\UPC0 80a0: 55 50 43 50 a0 15 92 7b 50 52 32 5f 0a 01 00 70 UPCP...{PR2_...p 80b0: 0a 00 88 55 50 43 50 0a 00 00 a4 55 50 43 50 14 ...UPCP....UPCP. 80c0: 3f 5f 50 4c 44 08 08 50 4c 44 50 11 03 0a 10 70 ?_PLD..PLDP....p 80d0: 5c 50 4c 44 30 50 4c 44 50 8d 50 4c 44 50 0a 40 \PLD0PLDP.PLDP.@ 80e0: 56 49 53 5f a0 15 92 7b 50 52 32 5f 0a 01 00 7b VIS_...{PR2_...{ 80f0: 56 49 53 5f 0a 00 56 49 53 5f a4 50 4c 44 50 5b VIS_..VIS_.PLDP[ 8100: 82 49 08 48 53 50 31 08 5f 41 44 52 0a 02 14 3b .I.HSP1._ADR...; 8110: 5f 55 50 43 08 08 55 50 43 50 12 0a 04 0a 00 0a _UPC..UPCP...... 8120: 00 0a 00 0a 00 9d 5c 55 50 43 31 55 50 43 50 a0 ......\UPC1UPCP. 8130: 15 92 7b 50 52 32 5f 0a 02 00 70 0a 00 88 55 50 ..{PR2_...p...UP 8140: 43 50 0a 00 00 a4 55 50 43 50 14 3f 5f 50 4c 44 CP....UPCP.?_PLD 8150: 08 08 50 4c 44 50 11 03 0a 10 70 5c 50 4c 44 31 ..PLDP....p\PLD1 8160: 50 4c 44 50 8d 50 4c 44 50 0a 40 56 49 53 5f a0 PLDP.PLDP.@VIS_. 8170: 15 92 7b 50 52 32 5f 0a 02 00 7b 56 49 53 5f 0a ..{PR2_...{VIS_. 8180: 00 56 49 53 5f a4 50 4c 44 50 5b 82 49 08 48 53 .VIS_.PLDP[.I.HS 8190: 50 32 08 5f 41 44 52 0a 03 14 3b 5f 55 50 43 08 P2._ADR...;_UPC. 81a0: 08 55 50 43 50 12 0a 04 0a 00 0a 00 0a 00 0a 00 .UPCP........... 81b0: 9d 5c 55 50 43 32 55 50 43 50 a0 15 92 7b 50 52 .\UPC2UPCP...{PR 81c0: 32 5f 0a 04 00 70 0a 00 88 55 50 43 50 0a 00 00 2_...p...UPCP... 81d0: a4 55 50 43 50 14 3f 5f 50 4c 44 08 08 50 4c 44 .UPCP.?_PLD..PLD 81e0: 50 11 03 0a 10 70 5c 50 4c 44 32 50 4c 44 50 8d P....p\PLD2PLDP. 81f0: 50 4c 44 50 0a 40 56 49 53 5f a0 15 92 7b 50 52 PLDP.@VIS_...{PR 8200: 32 5f 0a 04 00 7b 56 49 53 5f 0a 00 56 49 53 5f 2_...{VIS_..VIS_ 8210: a4 50 4c 44 50 5b 82 49 08 48 53 50 33 08 5f 41 .PLDP[.I.HSP3._A 8220: 44 52 0a 04 14 3b 5f 55 50 43 08 08 55 50 43 50 DR...;_UPC..UPCP 8230: 12 0a 04 0a 00 0a 00 0a 00 0a 00 9d 5c 55 50 43 ............\UPC 8240: 33 55 50 43 50 a0 15 92 7b 50 52 32 5f 0a 08 00 3UPCP...{PR2_... 8250: 70 0a 00 88 55 50 43 50 0a 00 00 a4 55 50 43 50 p...UPCP....UPCP 8260: 14 3f 5f 50 4c 44 08 08 50 4c 44 50 11 03 0a 10 .?_PLD..PLDP.... 8270: 70 5c 50 4c 44 33 50 4c 44 50 8d 50 4c 44 50 0a p\PLD3PLDP.PLDP. 8280: 40 56 49 53 5f a0 15 92 7b 50 52 32 5f 0a 08 00 @VIS_...{PR2_... 8290: 7b 56 49 53 5f 0a 00 56 49 53 5f a4 50 4c 44 50 {VIS_..VIS_.PLDP 82a0: 5b 82 4f 09 53 53 50 30 08 5f 41 44 52 0a 05 14 [.O.SSP0._ADR... 82b0: 46 04 5f 55 50 43 08 08 55 50 43 50 12 0a 04 0a F._UPC..UPCP.... 82c0: 00 0a 00 0a 00 0a 00 9d 5c 55 50 43 30 55 50 43 ........\UPC0UPC 82d0: 50 a0 1f 91 92 7b 50 52 32 5f 0a 01 00 92 7b 50 P....{PR2_....{P 82e0: 52 33 5f 0a 01 00 70 0a 00 88 55 50 43 50 0a 00 R3_...p...UPCP.. 82f0: 00 a4 55 50 43 50 14 4a 04 5f 50 4c 44 08 08 50 ..UPCP.J._PLD..P 8300: 4c 44 50 11 03 0a 10 70 5c 50 4c 44 30 50 4c 44 LDP....p\PLD0PLD 8310: 50 8d 50 4c 44 50 0a 40 56 49 53 5f a0 1f 91 92 P.PLDP.@VIS_.... 8320: 7b 50 52 32 5f 0a 01 00 92 7b 50 52 33 5f 0a 01 {PR2_....{PR3_.. 8330: 00 7b 56 49 53 5f 0a 00 56 49 53 5f a4 50 4c 44 .{VIS_..VIS_.PLD 8340: 50 5b 82 4f 09 53 53 50 31 08 5f 41 44 52 0a 06 P[.O.SSP1._ADR.. 8350: 14 46 04 5f 55 50 43 08 08 55 50 43 50 12 0a 04 .F._UPC..UPCP... 8360: 0a 00 0a 00 0a 00 0a 00 9d 5c 55 50 43 31 55 50 .........\UPC1UP 8370: 43 50 a0 1f 91 92 7b 50 52 32 5f 0a 02 00 92 7b CP....{PR2_....{ 8380: 50 52 33 5f 0a 02 00 70 0a 00 88 55 50 43 50 0a PR3_...p...UPCP. 8390: 00 00 a4 55 50 43 50 14 4a 04 5f 50 4c 44 08 08 ...UPCP.J._PLD.. 83a0: 50 4c 44 50 11 03 0a 10 70 5c 50 4c 44 31 50 4c PLDP....p\PLD1PL 83b0: 44 50 8d 50 4c 44 50 0a 40 56 49 53 5f a0 1f 91 DP.PLDP.@VIS_... 83c0: 92 7b 50 52 32 5f 0a 02 00 92 7b 50 52 33 5f 0a .{PR2_....{PR3_. 83d0: 02 00 7b 56 49 53 5f 0a 00 56 49 53 5f a4 50 4c ..{VIS_..VIS_.PL 83e0: 44 50 5b 82 4f 09 53 53 50 32 08 5f 41 44 52 0a DP[.O.SSP2._ADR. 83f0: 07 14 46 04 5f 55 50 43 08 08 55 50 43 50 12 0a ..F._UPC..UPCP.. 8400: 04 0a 00 0a 00 0a 00 0a 00 9d 5c 55 50 43 32 55 ..........\UPC2U 8410: 50 43 50 a0 1f 91 92 7b 50 52 32 5f 0a 04 00 92 PCP....{PR2_.... 8420: 7b 50 52 33 5f 0a 04 00 70 0a 00 88 55 50 43 50 {PR3_...p...UPCP 8430: 0a 00 00 a4 55 50 43 50 14 4a 04 5f 50 4c 44 08 ....UPCP.J._PLD. 8440: 08 50 4c 44 50 11 03 0a 10 70 5c 50 4c 44 32 50 .PLDP....p\PLD2P 8450: 4c 44 50 8d 50 4c 44 50 0a 40 56 49 53 5f a0 1f LDP.PLDP.@VIS_.. 8460: 91 92 7b 50 52 32 5f 0a 04 00 92 7b 50 52 33 5f ..{PR2_....{PR3_ 8470: 0a 04 00 7b 56 49 53 5f 0a 00 56 49 53 5f a4 50 ...{VIS_..VIS_.P 8480: 4c 44 50 5b 82 4f 09 53 53 50 33 08 5f 41 44 52 LDP[.O.SSP3._ADR 8490: 0a 08 14 46 04 5f 55 50 43 08 08 55 50 43 50 12 ...F._UPC..UPCP. 84a0: 0a 04 0a 00 0a 00 0a 00 0a 00 9d 5c 55 50 43 33 ...........\UPC3 84b0: 55 50 43 50 a0 1f 91 92 7b 50 52 32 5f 0a 08 00 UPCP....{PR2_... 84c0: 92 7b 50 52 33 5f 0a 08 00 70 0a 00 88 55 50 43 .{PR3_...p...UPC 84d0: 50 0a 00 00 a4 55 50 43 50 14 4a 04 5f 50 4c 44 P....UPCP.J._PLD 84e0: 08 08 50 4c 44 50 11 03 0a 10 70 5c 50 4c 44 33 ..PLDP....p\PLD3 84f0: 50 4c 44 50 8d 50 4c 44 50 0a 40 56 49 53 5f a0 PLDP.PLDP.@VIS_. 8500: 1f 91 92 7b 50 52 32 5f 0a 08 00 92 7b 50 52 33 ...{PR2_....{PR3 8510: 5f 0a 08 00 7b 56 49 53 5f 0a 00 56 49 53 5f a4 _...{VIS_..VIS_. 8520: 50 4c 44 50 5b 82 41 4d 45 48 43 31 08 5f 41 44 PLDP[.AMEHC1._AD 8530: 52 0c 00 00 1d 00 08 5f 53 33 44 0a 03 08 52 49 R......_S3D...RI 8540: 44 5f 0a 00 5b 80 45 48 43 53 02 0a 00 0b 00 01 D_..[.EHCS...... 8550: 5b 81 15 45 48 43 53 03 00 40 31 50 57 4b 49 01 [..EHCS..@1PWKI. 8560: 50 57 55 43 08 00 07 08 5f 50 52 30 12 19 01 5c PWUC...._PR0...\ 8570: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 /._SB_PCI0LPC_EC 8580: 5f 5f 50 55 42 53 08 5f 50 52 31 12 19 01 5c 2f __PUBS._PR1...\/ 8590: 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ 85a0: 5f 50 55 42 53 08 5f 50 52 32 12 19 01 5c 2f 05 _PUBS._PR2...\/. 85b0: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 85c0: 50 55 42 53 14 14 5f 49 4e 49 00 70 0a 01 50 57 PUBS.._INI.p..PW 85d0: 4b 49 70 0a 23 50 57 55 43 08 5f 50 52 57 12 1d KIp.#PWUC._PRW.. 85e0: 03 0a 0d 0a 03 5c 2f 05 5f 53 42 5f 50 43 49 30 .....\/._SB_PCI0 85f0: 4c 50 43 5f 45 43 5f 5f 50 55 42 53 5b 82 49 3f LPC_EC__PUBS[.I? 8600: 55 52 54 48 08 5f 41 44 52 0a 00 5b 82 4a 3e 55 URTH._ADR..[.J>U 8610: 52 4d 48 08 5f 41 44 52 0a 01 14 0c 5f 55 50 43 RMH._ADR...._UPC 8620: 08 a4 5c 55 50 43 49 14 0c 5f 50 4c 44 08 a4 5c ..\UPCI.._PLD..\ 8630: 50 4c 44 49 5b 82 4f 0b 50 52 54 30 08 5f 41 44 PLDI[.O.PRT0._AD 8640: 52 0a 01 14 46 05 5f 55 50 43 08 08 55 50 43 50 R...F._UPC..UPCP 8650: 12 0a 04 0a 00 0a 00 0a 00 0a 00 9d 5c 55 50 43 ............\UPC 8660: 30 55 50 43 50 a0 09 93 5c 58 48 43 4d 0a 00 a1 0UPCP...\XHCM... 8670: 25 a0 23 7b 5c 2f 04 5f 53 42 5f 50 43 49 30 58 %.#{\/._SB_PCI0X 8680: 48 43 49 50 52 32 5f 0a 01 00 70 0a 00 88 55 50 HCIPR2_...p...UP 8690: 43 50 0a 00 00 a4 55 50 43 50 14 4a 05 5f 50 4c CP....UPCP.J._PL 86a0: 44 08 08 50 4c 44 50 11 03 0a 10 70 5c 50 4c 44 D..PLDP....p\PLD 86b0: 30 50 4c 44 50 8d 50 4c 44 50 0a 40 56 49 53 5f 0PLDP.PLDP.@VIS_ 86c0: a0 09 93 5c 58 48 43 4d 0a 00 a1 2a a0 23 7b 5c ...\XHCM...*.#{\ 86d0: 2f 04 5f 53 42 5f 50 43 49 30 58 48 43 49 50 52 /._SB_PCI0XHCIPR 86e0: 32 5f 0a 01 00 7b 56 49 53 5f 0a 00 56 49 53 5f 2_...{VIS_..VIS_ 86f0: a4 50 4c 44 50 5b 82 4f 0b 50 52 54 31 08 5f 41 .PLDP[.O.PRT1._A 8700: 44 52 0a 02 14 46 05 5f 55 50 43 08 08 55 50 43 DR...F._UPC..UPC 8710: 50 12 0a 04 0a 00 0a 00 0a 00 0a 00 9d 5c 55 50 P............\UP 8720: 43 31 55 50 43 50 a0 09 93 5c 58 48 43 4d 0a 00 C1UPCP...\XHCM.. 8730: a1 25 a0 23 7b 5c 2f 04 5f 53 42 5f 50 43 49 30 .%.#{\/._SB_PCI0 8740: 58 48 43 49 50 52 32 5f 0a 02 00 70 0a 00 88 55 XHCIPR2_...p...U 8750: 50 43 50 0a 00 00 a4 55 50 43 50 14 4a 05 5f 50 PCP....UPCP.J._P 8760: 4c 44 08 08 50 4c 44 50 11 03 0a 10 70 5c 50 4c LD..PLDP....p\PL 8770: 44 31 50 4c 44 50 8d 50 4c 44 50 0a 40 56 49 53 D1PLDP.PLDP.@VIS 8780: 5f a0 09 93 5c 58 48 43 4d 0a 00 a1 25 a0 23 7b _...\XHCM...%.#{ 8790: 5c 2f 04 5f 53 42 5f 50 43 49 30 58 48 43 49 50 \/._SB_PCI0XHCIP 87a0: 52 32 5f 0a 02 00 7b 56 49 53 5f 0a 00 56 49 53 R2_...{VIS_..VIS 87b0: 5f a4 50 4c 44 50 5b 82 4e 0d 50 52 54 32 08 5f _.PLDP[.N.PRT2._ 87c0: 41 44 52 0a 03 14 46 05 5f 55 50 43 08 08 55 50 ADR...F._UPC..UP 87d0: 43 50 12 0a 04 0a 00 0a 00 0a 00 0a 00 9d 5c 55 CP............\U 87e0: 50 43 32 55 50 43 50 a0 09 93 5c 58 48 43 4d 0a PC2UPCP...\XHCM. 87f0: 00 a1 25 a0 23 7b 5c 2f 04 5f 53 42 5f 50 43 49 ..%.#{\/._SB_PCI 8800: 30 58 48 43 49 50 52 32 5f 0a 04 00 70 0a 00 88 0XHCIPR2_...p... 8810: 55 50 43 50 0a 00 00 a4 55 50 43 50 14 49 07 5f UPCP....UPCP.I._ 8820: 50 4c 44 08 08 50 4c 44 50 11 03 0a 10 70 5c 50 PLD..PLDP....p\P 8830: 4c 44 32 50 4c 44 50 8d 50 4c 44 50 0a 40 56 49 LD2PLDP.PLDP.@VI 8840: 53 5f a0 09 93 5c 58 48 43 4d 0a 00 a1 25 a0 23 S_...\XHCM...%.# 8850: 7b 5c 2f 04 5f 53 42 5f 50 43 49 30 58 48 43 49 {\/._SB_PCI0XHCI 8860: 50 52 32 5f 0a 04 00 7b 56 49 53 5f 0a 00 56 49 PR2_...{VIS_..VI 8870: 53 5f a0 1e 93 5c 2f 03 5f 53 42 5f 47 44 43 4b S_...\/._SB_GDCK 8880: 47 47 49 44 0a 05 7b 56 49 53 5f 0a 00 56 49 53 GGID..{VIS_..VIS 8890: 5f a4 50 4c 44 50 5b 82 4f 0b 50 52 54 33 08 5f _.PLDP[.O.PRT3._ 88a0: 41 44 52 0a 04 14 46 05 5f 55 50 43 08 08 55 50 ADR...F._UPC..UP 88b0: 43 50 12 0a 04 0a 00 0a 00 0a 00 0a 00 9d 5c 55 CP............\U 88c0: 50 43 33 55 50 43 50 a0 09 93 5c 58 48 43 4d 0a PC3UPCP...\XHCM. 88d0: 00 a1 25 a0 23 7b 5c 2f 04 5f 53 42 5f 50 43 49 ..%.#{\/._SB_PCI 88e0: 30 58 48 43 49 50 52 32 5f 0a 08 00 70 0a 00 88 0XHCIPR2_...p... 88f0: 55 50 43 50 0a 00 00 a4 55 50 43 50 14 4a 05 5f UPCP....UPCP.J._ 8900: 50 4c 44 08 08 50 4c 44 50 11 03 0a 10 70 5c 50 PLD..PLDP....p\P 8910: 4c 44 33 50 4c 44 50 8d 50 4c 44 50 0a 40 56 49 LD3PLDP.PLDP.@VI 8920: 53 5f a0 09 93 5c 58 48 43 4d 0a 00 a1 25 a0 23 S_...\XHCM...%.# 8930: 7b 5c 2f 04 5f 53 42 5f 50 43 49 30 58 48 43 49 {\/._SB_PCI0XHCI 8940: 50 52 32 5f 0a 08 00 7b 56 49 53 5f 0a 00 56 49 PR2_...{VIS_..VI 8950: 53 5f a4 50 4c 44 50 5b 82 26 50 52 54 34 08 5f S_.PLDP[.&PRT4._ 8960: 41 44 52 0a 05 14 0c 5f 55 50 43 08 a4 5c 55 50 ADR...._UPC..\UP 8970: 43 34 14 0c 5f 50 4c 44 08 a4 5c 50 4c 44 34 5b C4.._PLD..\PLD4[ 8980: 82 26 50 52 54 35 08 5f 41 44 52 0a 06 14 0c 5f .&PRT5._ADR...._ 8990: 55 50 43 08 a4 5c 55 50 43 35 14 0c 5f 50 4c 44 UPC..\UPC5.._PLD 89a0: 08 a4 5c 50 4c 44 35 5b 82 26 50 52 54 36 08 5f ..\PLD5[.&PRT6._ 89b0: 41 44 52 0a 07 14 0c 5f 55 50 43 08 a4 5c 55 50 ADR...._UPC..\UP 89c0: 43 36 14 0c 5f 50 4c 44 08 a4 5c 50 4c 44 36 5b C6.._PLD..\PLD6[ 89d0: 82 26 50 52 54 37 08 5f 41 44 52 0a 08 14 0c 5f .&PRT7._ADR...._ 89e0: 55 50 43 08 a4 5c 55 50 43 37 14 0c 5f 50 4c 44 UPC..\UPC7.._PLD 89f0: 08 a4 5c 50 4c 44 37 5b 82 4e 1f 45 48 43 32 08 ..\PLD7[.N.EHC2. 8a00: 5f 41 44 52 0c 00 00 1a 00 08 5f 53 33 44 0a 03 _ADR......_S3D.. 8a10: 08 52 49 44 5f 0a 00 5b 80 45 48 43 53 02 0a 00 .RID_..[.EHCS... 8a20: 0b 00 01 5b 81 15 45 48 43 53 03 00 40 31 50 57 ...[..EHCS..@1PW 8a30: 4b 49 01 50 57 55 43 06 00 09 08 5f 50 52 30 12 KI.PWUC...._PR0. 8a40: 19 01 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 8a50: 5f 45 43 5f 5f 50 55 42 53 08 5f 50 52 31 12 19 _EC__PUBS._PR1.. 8a60: 01 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ 8a70: 45 43 5f 5f 50 55 42 53 08 5f 50 52 32 12 19 01 EC__PUBS._PR2... 8a80: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E 8a90: 43 5f 5f 50 55 42 53 14 14 5f 49 4e 49 00 70 0a C__PUBS.._INI.p. 8aa0: 01 50 57 4b 49 70 0a 13 50 57 55 43 08 5f 50 52 .PWKIp..PWUC._PR 8ab0: 57 12 1d 03 0a 0d 0a 03 5c 2f 05 5f 53 42 5f 50 W.......\/._SB_P 8ac0: 43 49 30 4c 50 43 5f 45 43 5f 5f 50 55 42 53 5b CI0LPC_EC__PUBS[ 8ad0: 82 46 12 55 52 54 48 08 5f 41 44 52 0a 00 5b 82 .F.URTH._ADR..[. 8ae0: 47 11 55 52 4d 48 08 5f 41 44 52 0a 01 14 0c 5f G.URMH._ADR...._ 8af0: 55 50 43 08 a4 5c 55 50 43 49 14 0c 5f 50 4c 44 UPC..\UPCI.._PLD 8b00: 08 a4 5c 50 4c 44 49 5b 82 26 50 52 54 38 08 5f ..\PLDI[.&PRT8._ 8b10: 41 44 52 0a 01 14 0c 5f 55 50 43 08 a4 5c 55 50 ADR...._UPC..\UP 8b20: 43 49 14 0c 5f 50 4c 44 08 a4 5c 50 4c 44 49 5b CI.._PLD..\PLDI[ 8b30: 82 26 50 52 54 39 08 5f 41 44 52 0a 02 14 0c 5f .&PRT9._ADR...._ 8b40: 55 50 43 08 a4 5c 55 50 43 39 14 0c 5f 50 4c 44 UPC..\UPC9.._PLD 8b50: 08 a4 5c 50 4c 44 39 5b 82 26 50 52 54 41 08 5f ..\PLD9[.&PRTA._ 8b60: 41 44 52 0a 03 14 0c 5f 55 50 43 08 a4 5c 55 50 ADR...._UPC..\UP 8b70: 43 49 14 0c 5f 50 4c 44 08 a4 5c 50 4c 44 49 5b CI.._PLD..\PLDI[ 8b80: 82 26 50 52 54 42 08 5f 41 44 52 0a 04 14 0c 5f .&PRTB._ADR...._ 8b90: 55 50 43 08 a4 5c 55 50 43 49 14 0c 5f 50 4c 44 UPC..\UPCI.._PLD 8ba0: 08 a4 5c 50 4c 44 49 5b 82 26 50 52 54 43 08 5f ..\PLDI[.&PRTC._ 8bb0: 41 44 52 0a 05 14 0c 5f 55 50 43 08 a4 5c 55 50 ADR...._UPC..\UP 8bc0: 43 49 14 0c 5f 50 4c 44 08 a4 5c 50 4c 44 49 5b CI.._PLD..\PLDI[ 8bd0: 82 26 50 52 54 44 08 5f 41 44 52 0a 06 14 0c 5f .&PRTD._ADR...._ 8be0: 55 50 43 08 a4 5c 55 50 43 49 14 0c 5f 50 4c 44 UPC..\UPCI.._PLD 8bf0: 08 a4 5c 50 4c 44 49 5b 82 31 48 44 45 46 08 5f ..\PLDI[.1HDEF._ 8c00: 41 44 52 0c 00 00 1b 00 08 5f 53 33 44 0a 03 08 ADR......_S3D... 8c10: 52 49 44 5f 0a 00 08 5f 50 52 57 12 06 02 0a 0d RID_..._PRW..... 8c20: 0a 04 14 07 5f 50 53 57 01 a3 10 47 66 5c 2f 04 ...._PSW...Gf\/. 8c30: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 8c40: 08 42 44 45 56 0a ff 08 42 53 54 53 0a 00 08 42 .BDEV...BSTS...B 8c50: 48 4b 45 0a 00 14 22 5f 51 32 43 00 a0 1b 93 42 HKE..."_Q2C....B 8c60: 53 54 53 0a 00 70 42 47 49 44 0a 00 42 44 45 56 STS..pBGID..BDEV 8c70: 4e 42 52 45 42 44 45 56 14 19 5f 51 32 44 00 70 NBREBDEV.._Q2D.p 8c80: 42 47 49 44 0a 00 42 44 45 56 4e 42 49 4e 42 44 BGID..BDEVNBINBD 8c90: 45 56 14 44 08 5f 51 33 38 00 70 42 47 49 44 0a EV.D._Q38.pBGID. 8ca0: 00 60 a0 4f 05 93 60 0a 0f 42 44 49 53 5c 42 48 .`.O..`..BDIS\BH 8cb0: 44 50 0a 01 0a 00 4e 42 45 4a 42 44 45 56 70 60 DP....NBEJBDEVp` 8cc0: 42 44 45 56 a0 3d 93 5c 42 49 44 45 0a 03 70 0a BDEV.=.\BIDE..p. 8cd0: 00 5c 2f 05 5f 53 42 5f 50 43 49 30 53 41 54 31 .\/._SB_PCI0SAT1 8ce0: 50 52 49 4d 47 54 4d 45 70 0a 00 5c 2f 05 5f 53 PRIMGTMEp..\/._S 8cf0: 42 5f 50 43 49 30 53 41 54 31 53 43 4e 44 47 54 B_PCI0SAT1SCNDGT 8d00: 4d 45 a1 14 a0 05 48 50 42 55 a1 0c 70 60 42 44 ME....HPBU..p`BD 8d10: 45 56 4e 42 49 4e 60 08 4f 44 45 4a 0a 00 14 4c EVNBIN`.ODEJ...L 8d20: 05 5f 51 34 34 00 a0 44 05 5c 2f 04 5f 53 42 5f ._Q44..D.\/._SB_ 8d30: 50 43 49 30 4c 50 43 5f 43 53 4f 4e 70 0a 01 4f PCI0LPC_CSONp..O 8d40: 44 45 4a 70 42 47 49 44 0a 00 42 44 45 56 4e 42 DEJpBGID..BDEVNB 8d50: 49 4e 42 44 45 56 70 0a 00 4f 44 45 4a 5c 2f 06 INBDEVp..ODEJ\/. 8d60: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 8d70: 48 4b 45 59 4d 48 4b 51 0b 06 30 14 4a 04 4e 42 HKEYMHKQ..0.J.NB 8d80: 52 45 01 a0 42 04 95 68 0a 0c a0 23 93 5c 42 49 RE..B..h...#.\BI 8d90: 44 45 0a 03 86 5c 2f 05 5f 53 42 5f 50 43 49 30 DE...\/._SB_PCI0 8da0: 53 41 54 31 53 43 4e 44 4d 53 54 52 0a 03 a1 17 SAT1SCNDMSTR.... 8db0: 86 5c 2f 04 5f 53 42 5f 50 43 49 30 53 41 54 31 .\/._SB_PCI0SAT1 8dc0: 50 52 54 31 0a 03 14 41 06 4e 42 45 4a 01 a0 4c PRT1...A.NBEJ..L 8dd0: 04 93 42 53 54 53 0a 00 a0 42 04 95 68 0a 0c a0 ..BSTS...B..h... 8de0: 23 93 5c 42 49 44 45 0a 03 86 5c 2f 05 5f 53 42 #.\BIDE...\/._SB 8df0: 5f 50 43 49 30 53 41 54 31 53 43 4e 44 4d 53 54 _PCI0SAT1SCNDMST 8e00: 52 0a 01 a1 17 86 5c 2f 04 5f 53 42 5f 50 43 49 R.....\/._SB_PCI 8e10: 30 53 41 54 31 50 52 54 31 0a 01 42 45 45 50 0a 0SAT1PRT1..BEEP. 8e20: 00 70 0a 00 42 53 54 53 14 4d 05 4e 42 49 4e 01 .p..BSTS.M.NBIN. 8e30: a0 48 04 95 68 0a 0c 42 45 4e 5f 0a 01 a0 23 93 .H..h..BEN_...#. 8e40: 5c 42 49 44 45 0a 03 86 5c 2f 05 5f 53 42 5f 50 \BIDE...\/._SB_P 8e50: 43 49 30 53 41 54 31 53 43 4e 44 4d 53 54 52 0a CI0SAT1SCNDMSTR. 8e60: 01 a1 17 86 5c 2f 04 5f 53 42 5f 50 43 49 30 53 ....\/._SB_PCI0S 8e70: 41 54 31 50 52 54 31 0a 01 42 45 45 50 0a 00 70 AT1PRT1..BEEP..p 8e80: 0a 00 42 53 54 53 14 4c 04 42 53 43 4e 00 a0 44 ..BSTS.L.BSCN..D 8e90: 04 92 48 50 42 55 70 42 47 49 44 0a 00 60 70 60 ..HPBUpBGID..`p` 8ea0: 42 44 45 56 a0 21 95 60 0a 0c a0 0b 93 60 0a 06 BDEV.!.`.....`.. 8eb0: 42 45 4e 5f 0a 02 a1 07 42 45 4e 5f 0a 01 4c 45 BEN_....BEN_..LE 8ec0: 44 5f 0a 04 0a 80 42 45 45 50 0a 00 70 0a 00 42 D_....BEEP..p..B 8ed0: 53 54 53 14 43 05 42 45 4a 30 01 a0 42 04 68 42 STS.C.BEJ0..B.hB 8ee0: 44 49 53 5c 42 48 44 50 0a 01 0a 00 70 0a 01 42 DIS\BHDP....p..B 8ef0: 53 54 53 a0 2a 42 48 4b 45 70 0a 00 42 48 4b 45 STS.*BHKEp..BHKE 8f00: 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E 8f10: 43 5f 5f 48 4b 45 59 4d 48 4b 51 0b 03 30 a1 08 C__HKEYMHKQ..0.. 8f20: 70 0a 00 42 53 54 53 14 1d 42 45 4a 33 01 a0 0d p..BSTS..BEJ3... 8f30: 68 42 44 49 53 70 0a 01 42 53 54 53 a1 08 70 0a hBDISp..BSTS..p. 8f40: 00 42 53 54 53 14 32 42 50 54 53 01 70 0a 01 48 .BSTS.2BPTS.p..H 8f50: 44 42 4d a0 17 92 93 42 53 54 53 0a 00 70 0a 0f DBM....BSTS..p.. 8f60: 42 44 45 56 70 0a 00 42 53 54 53 70 0a 00 42 48 BDEVp..BSTSp..BH 8f70: 4b 45 42 55 57 4b 0a 00 14 41 08 42 57 41 4b 01 KEBUWK...A.BWAK. 8f80: 42 55 57 4b 0a 00 70 42 47 49 44 0a 00 60 a0 42 BUWK..pBGID..`.B 8f90: 05 93 42 53 54 53 0a 00 a0 1b 92 93 60 42 44 45 ..BSTS......`BDE 8fa0: 56 4e 42 45 4a 42 44 45 56 70 60 42 44 45 56 4e VNBEJBDEVp`BDEVN 8fb0: 42 49 4e 60 a1 2c a0 2a 91 5c 4c 46 44 43 92 93 BIN`.,.*.\LFDC.. 8fc0: 42 44 45 56 0a 0d a0 1a 92 93 60 0a 0f a0 13 48 BDEV......`....H 8fd0: 50 42 55 a0 06 92 94 68 0a 02 a1 06 4e 42 52 45 PBU....h....NBRE 8fe0: 60 a0 0f 95 42 44 45 56 0a 0c 5c 55 42 49 53 0a `...BDEV..\UBIS. 8ff0: 00 a1 08 5c 55 42 49 53 0a 01 14 49 05 42 44 49 ...\UBIS...I.BDI 9000: 53 00 a0 41 05 92 5c 2f 04 5f 53 42 5f 50 43 49 S..A..\/._SB_PCI 9010: 30 4c 50 43 5f 43 53 4f 4e a0 1c 92 5c 2f 04 5f 0LPC_CSON...\/._ 9020: 53 42 5f 50 43 49 30 4c 50 43 5f 47 4c 49 53 5c SB_PCI0LPC_GLIS\ 9030: 55 42 49 53 0a 01 70 0a 01 5c 2f 04 5f 53 42 5f UBIS..p..\/._SB_ 9040: 50 43 49 30 4c 50 43 5f 43 53 4f 4e 70 0a 0f 5c PCI0LPC_CSONp..\ 9050: 49 44 45 54 14 4f 04 42 50 4f 4e 01 a0 47 04 5c IDET.O.BPON..G.\ 9060: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 43 53 /._SB_PCI0LPC_CS 9070: 4f 4e 70 0a 00 5c 2f 04 5f 53 42 5f 50 43 49 30 ONp..\/._SB_PCI0 9080: 4c 50 43 5f 43 53 4f 4e a0 1b 5c 2f 04 5f 53 42 LPC_CSON..\/._SB 9090: 5f 50 43 49 30 4c 50 43 5f 47 4c 49 53 5c 55 42 _PCI0LPC_GLIS\UB 90a0: 49 53 0a 00 14 4e 04 42 45 4e 5f 01 a0 46 04 5c IS...N.BEN_..F.\ 90b0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 43 53 /._SB_PCI0LPC_CS 90c0: 4f 4e 42 50 4f 4e 68 a0 24 90 68 93 4f 44 45 4a ONBPONh.$.h.ODEJ 90d0: 0a 01 70 0a 09 5c 2f 05 5f 53 42 5f 50 43 49 30 ..p..\/._SB_PCI0 90e0: 4c 50 43 5f 45 43 5f 5f 48 41 4e 54 a0 06 68 49 LPC_EC__HANT..hI 90f0: 52 44 59 14 40 06 42 53 54 41 01 70 5c 2f 03 5f RDY.@.BSTA.p\/._ 9100: 53 42 5f 47 44 43 4b 47 47 49 44 60 a0 18 93 60 SB_GDCKGGID`...` 9110: 0a 00 a0 12 44 4f 43 44 a0 0c 93 0a 00 5c 44 45 ....DOCD.....\DE 9120: 53 53 a4 0a 01 a1 2b a0 17 5c 2f 04 5f 53 42 5f SS....+..\/._SB_ 9130: 50 43 49 30 4c 50 43 5f 43 53 4f 4e a4 0a 00 42 PCI0LPC_CSON...B 9140: 49 4e 49 a0 0d 93 68 0a 01 a4 95 42 44 45 56 0a INI...h....BDEV. 9150: 0c a4 0a 00 14 44 06 42 55 57 4b 01 a0 3f 5c 48 .....D.BUWK..?\H 9160: 38 44 52 a0 1c 68 70 0a 01 5c 2f 05 5f 53 42 5f 8DR..hp..\/._SB_ 9170: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 57 42 55 PCI0LPC_EC__HWBU 9180: a1 1b 70 0a 00 5c 2f 05 5f 53 42 5f 50 43 49 30 ..p..\/._SB_PCI0 9190: 4c 50 43 5f 45 43 5f 5f 48 57 42 55 a1 1c a0 0d LPC_EC__HWBU.... 91a0: 68 5c 4d 42 45 43 0a 32 0a ff 0a 80 a1 0c 5c 4d h\MBEC.2......\M 91b0: 42 45 43 0a 32 0a 7f 0a 00 14 1a 42 49 4e 49 00 BEC.2......BINI. 91c0: a0 13 93 42 44 45 56 0a ff 70 42 47 49 44 0a 00 ...BDEV..pBGID.. 91d0: 42 44 45 56 14 4a 08 42 47 49 44 01 a0 06 68 70 BDEV.J.BGID...hp 91e0: 0a ff 60 a1 49 06 a0 12 5c 48 38 44 52 70 48 50 ..`.I...\H8DRpHP 91f0: 42 55 61 70 48 42 49 44 62 a1 18 70 52 42 45 43 BUapHBIDb..pRBEC 9200: 0a 47 62 7b 62 0a 01 61 7b 62 0a 04 62 7a 62 0a .Gb{b..a{b..bzb. 9210: 02 62 a0 06 62 70 0a 0f 60 a1 2d a0 09 48 44 55 .b..bp..`.-..HDU 9220: 42 70 0a 0f 60 a1 21 a0 19 91 93 5c 49 44 45 54 Bp..`.!....\IDET 9230: 0a 03 93 5c 49 44 45 54 0a 06 70 5c 49 44 45 54 ...\IDET..p\IDET 9240: 60 a1 05 70 0a 07 60 a0 05 93 60 0a 0f a0 0f 90 `..p..`...`..... 9250: 5c 48 44 55 42 95 60 0a 0c 70 0a 0f 60 a4 60 14 \HDUB.`..p..`.`. 9260: 32 49 52 44 59 00 70 0b f4 01 60 70 0a 3c 61 70 2IRDY.p...`p..GGID 9330: 0a 07 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 9340: 5f 45 43 5f 5f 44 41 54 54 0a 01 0a 00 5c 2f 05 _EC__DATT....\/. 9350: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 9360: 44 41 54 54 0a 00 0a 01 a1 37 5c 2f 05 5f 53 42 DATT.....7\/._SB 9370: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 44 41 54 _PCI0LPC_EC__DAT 9380: 54 0a 01 0a 01 5c 2f 05 5f 53 42 5f 50 43 49 30 T....\/._SB_PCI0 9390: 4c 50 43 5f 45 43 5f 5f 44 41 54 54 0a 00 0a 00 LPC_EC__DATT.... 93a0: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E 93b0: 43 5f 5f 44 44 57 4b 0a 00 70 0a 01 5c 2f 04 5f C__DDWK..p..\/._ 93c0: 53 42 5f 50 43 49 30 4c 50 43 5f 44 53 43 49 14 SB_PCI0LPC_DSCI. 93d0: 2f 5f 44 43 4b 01 70 0a 00 60 a0 22 93 47 47 49 /_DCK.p..`.".GGI 93e0: 44 0a 05 70 5c 2f 05 5f 53 42 5f 50 43 49 30 4c D..p\/._SB_PCI0L 93f0: 50 43 5f 45 43 5f 5f 53 44 43 4b 68 60 a4 60 08 PC_EC__SDCKh`.`. 9400: 55 44 4f 50 0a 00 14 27 5f 45 4a 30 01 a0 20 93 UDOP...'_EJ0.. . 9410: 47 47 49 44 0a 05 5c 2f 05 5f 53 42 5f 50 43 49 GGID..\/._SB_PCI 9420: 30 4c 50 43 5f 45 43 5f 5f 53 45 4a 30 68 14 27 0LPC_EC__SEJ0h.' 9430: 5f 45 4a 33 01 a0 20 93 47 47 49 44 0a 05 5c 2f _EJ3.. .GGID..\/ 9440: 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ 9450: 5f 53 45 4a 33 68 14 27 5f 45 4a 34 01 a0 20 93 _SEJ3h.'_EJ4.. . 9460: 47 47 49 44 0a 05 5c 2f 05 5f 53 42 5f 50 43 49 GGID..\/._SB_PCI 9470: 30 4c 50 43 5f 45 43 5f 5f 53 45 4a 34 68 14 26 0LPC_EC__SEJ4h.& 9480: 50 45 4a 33 00 a0 1f 93 47 47 49 44 0a 05 5c 2f PEJ3....GGID..\/ 9490: 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ 94a0: 5f 50 53 45 33 14 2e 5f 42 44 4e 00 70 0a 00 60 _PSE3.._BDN.p..` 94b0: a0 21 93 47 47 49 44 0a 05 70 5c 2f 05 5f 53 42 .!.GGID..p\/._SB 94c0: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 53 4c 42 _PCI0LPC_EC__SLB 94d0: 4e 60 a4 60 14 2e 5f 55 49 44 00 70 0a 00 60 a0 N`.`.._UID.p..`. 94e0: 21 93 47 47 49 44 0a 05 70 5c 2f 05 5f 53 42 5f !.GGID..p\/._SB_ 94f0: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 53 4c 55 44 PCI0LPC_EC__SLUD 9500: 60 a4 60 14 1e 47 50 54 53 01 5c 2f 05 5f 53 42 `.`..GPTS.\/._SB 9510: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 53 50 54 _PCI0LPC_EC__SPT 9520: 53 68 14 37 47 57 41 4b 01 5c 2f 05 5f 53 42 5f Sh.7GWAK.\/._SB_ 9530: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 53 57 41 4b PCI0LPC_EC__SWAK 9540: 68 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f h\/._SB_PCI0LPC_ 9550: 45 43 5f 5f 44 44 57 4b 0a 00 14 26 47 47 50 45 EC__DDWK...&GGPE 9560: 00 a0 1f 93 47 47 49 44 0a 05 5c 2f 05 5f 53 42 ....GGID..\/._SB 9570: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 53 47 50 _PCI0LPC_EC__SGP 9580: 45 08 47 5f 49 44 0c ff ff ff ff 14 4e 05 47 47 E.G_ID......N.GG 9590: 49 44 00 70 5c 2f 04 5f 53 42 5f 50 43 49 30 4c ID.p\/._SB_PCI0L 95a0: 50 43 5f 44 4f 49 30 60 70 5c 2f 04 5f 53 42 5f PC_DOI0`p\/._SB_ 95b0: 50 43 49 30 4c 50 43 5f 44 4f 49 31 61 70 5c 2f PCI0LPC_DOI1ap\/ 95c0: 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 44 4f 49 ._SB_PCI0LPC_DOI 95d0: 32 62 7d 60 79 61 0a 01 00 60 7d 60 79 62 0a 02 2b}`ya...`}`yb.. 95e0: 00 60 70 60 47 5f 49 44 a4 60 10 43 5e 5c 2f 04 .`p`G_ID.`.C^\/. 95f0: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 9600: 14 4b 08 5f 51 35 30 00 70 5c 2f 03 5f 53 42 5f .K._Q50.p\/._SB_ 9610: 47 44 43 4b 47 47 49 44 60 a0 42 07 92 93 60 0a GDCKGGID`.B...`. 9620: 07 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ 9630: 45 43 5f 5f 4c 45 44 5f 0a 08 0a 80 5c 2f 05 5f EC__LED_....\/._ 9640: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 4c SB_PCI0LPC_EC__L 9650: 45 44 5f 0a 08 0a c0 a0 27 93 60 0a 05 5c 2f 05 ED_.....'.`..\/. 9660: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 9670: 53 50 45 4a 47 55 53 42 0a 00 5b 22 0b 2c 01 86 SPEJGUSB..[".,.. 9680: 5c 2e 5f 53 42 5f 47 44 43 4b 0a 03 14 4d 28 5f \._SB_GDCK...M(_ 9690: 51 34 35 00 70 0c ff ff ff ff 5c 2f 03 5f 53 42 Q45.p.....\/._SB 96a0: 5f 47 44 43 4b 47 5f 49 44 70 0c ff ff ff ff 5c _GDCKG_IDp.....\ 96b0: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 /._SB_PCI0LPC_EC 96c0: 5f 5f 53 4c 49 44 70 5c 2f 03 5f 53 42 5f 47 44 __SLIDp\/._SB_GD 96d0: 43 4b 47 47 49 44 60 a0 33 93 60 0a 07 5c 2f 05 CKGGID`.3.`..\/. 96e0: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 96f0: 4c 45 44 5f 0a 08 0a 00 47 55 53 42 0a 00 86 5c LED_....GUSB...\ 9700: 2e 5f 53 42 5f 47 44 43 4b 0a 03 a0 4e 0d 93 60 ._SB_GDCK...N..` 9710: 0a 05 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 9720: 5f 45 43 5f 5f 4c 45 44 5f 0a 08 0a 80 41 53 53 _EC__LED_....ASS 9730: 49 0a 00 a0 42 04 7b 5c 2f 04 5f 53 42 5f 50 43 I...B.{\/._SB_PC 9740: 49 30 58 48 43 49 50 52 32 5f 0a 04 00 7b 5c 2f I0XHCIPR2_...{\/ 9750: 04 5f 53 42 5f 50 43 49 30 58 48 43 49 50 52 32 ._SB_PCI0XHCIPR2 9760: 5f 0a fb 5c 2f 04 5f 53 42 5f 50 43 49 30 58 48 _..\/._SB_PCI0XH 9770: 43 49 50 52 32 5f a0 42 04 7b 5c 2f 04 5f 53 42 CIPR2_.B.{\/._SB 9780: 5f 50 43 49 30 58 48 43 49 50 52 33 5f 0a 04 00 _PCI0XHCIPR3_... 9790: 7b 5c 2f 04 5f 53 42 5f 50 43 49 30 58 48 43 49 {\/._SB_PCI0XHCI 97a0: 50 52 33 5f 0a fb 5c 2f 04 5f 53 42 5f 50 43 49 PR3_..\/._SB_PCI 97b0: 30 58 48 43 49 50 52 33 5f 5b 22 0a 64 a0 0c 5c 0XHCIPR3_[".d..\ 97c0: 48 38 44 52 70 53 4c 49 53 61 a1 0c 7b 5c 52 42 H8DRpSLISa..{\RB 97d0: 45 43 0a 02 0a 01 61 a0 12 93 61 0a 01 86 5c 2e EC....a...a...\. 97e0: 5f 53 42 5f 47 44 43 4b 0a 00 a1 4f 12 a0 4e 0f _SB_GDCK...O..N. 97f0: 44 4f 43 44 5b 22 0a 64 a0 15 5c 2f 04 5f 53 42 DOCD[".d..\/._SB 9800: 5f 50 43 49 30 4c 50 43 5f 45 50 57 47 a3 a1 0b _PCI0LPC_EPWG... 9810: a0 09 48 50 41 43 5f 51 32 37 41 53 53 49 0a 02 ..HPAC_Q27ASSI.. 9820: 5b 22 0a 64 a0 49 0a 90 92 93 5c 2f 03 5f 53 42 [".d.I....\/._SB 9830: 5f 47 44 43 4b 58 48 4f 53 0a 00 92 93 5c 58 48 _GDCKXHOS....\XH 9840: 43 4d 0a 00 a0 44 04 80 7b 5c 2f 04 5f 53 42 5f CM...D..{\/._SB_ 9850: 50 43 49 30 58 48 43 49 50 52 32 5f 0a 04 00 00 PCI0XHCIPR2_.... 9860: 7d 5c 2f 04 5f 53 42 5f 50 43 49 30 58 48 43 49 }\/._SB_PCI0XHCI 9870: 50 52 32 5f 0a 04 5c 2f 04 5f 53 42 5f 50 43 49 PR2_..\/._SB_PCI 9880: 30 58 48 43 49 50 52 32 5f a0 44 04 80 7b 5c 2f 0XHCIPR2_.D..{\/ 9890: 04 5f 53 42 5f 50 43 49 30 58 48 43 49 50 52 33 ._SB_PCI0XHCIPR3 98a0: 5f 0a 04 00 00 7d 5c 2f 04 5f 53 42 5f 50 43 49 _....}\/._SB_PCI 98b0: 30 58 48 43 49 50 52 33 5f 0a 04 5c 2f 04 5f 53 0XHCIPR3_..\/._S 98c0: 42 5f 50 43 49 30 58 48 43 49 50 52 33 5f 5c 2f B_PCI0XHCIPR3_\/ 98d0: 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ 98e0: 5f 48 4b 45 59 4d 48 4b 51 0b 10 40 a1 2d 5b 22 _HKEYMHKQ..@.-[" 98f0: 0a 64 a0 09 48 50 41 43 5f 51 32 36 5c 2f 06 5f .d..HPAC_Q26\/._ 9900: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 SB_PCI0LPC_EC__H 9910: 4b 45 59 4d 48 4b 51 0b 11 40 14 40 0a 47 55 53 KEYMHKQ..@.@.GUS 9920: 42 01 a0 4c 08 5c 48 38 44 52 70 68 53 4c 49 53 B..L.\H8DRphSLIS 9930: a0 4e 07 93 68 0a 00 5c 2f 05 5f 53 42 5f 50 43 .N..h..\/._SB_PC 9940: 49 30 4c 50 43 5f 45 43 5f 5f 4c 45 44 5f 0a 08 I0LPC_EC__LED_.. 9950: 0a 00 a0 27 93 5c 58 48 43 4d 0a 00 86 5c 2f 06 ...'.\XHCM...\/. 9960: 5f 53 42 5f 50 43 49 30 45 48 43 31 55 52 54 48 _SB_PCI0EHC1URTH 9970: 55 52 4d 48 50 52 54 32 0a 03 a1 34 a0 32 7b 5c URMHPRT2...4.2{\ 9980: 2f 04 5f 53 42 5f 50 43 49 30 58 48 43 49 50 52 /._SB_PCI0XHCIPR 9990: 32 5f 0a 04 00 86 5c 2f 05 5f 53 42 5f 50 43 49 2_....\/._SB_PCI 99a0: 30 58 48 43 49 55 52 54 48 48 53 50 32 0a 03 a1 0XHCIURTHHSP2... 99b0: 0b 5c 4d 42 45 43 0a 02 0a fe 68 14 46 19 44 41 .\MBEC....h.F.DA 99c0: 54 54 02 70 0a 00 60 a0 42 08 93 68 0a 00 a0 28 TT.p..`.B..h...( 99d0: 93 69 0a 01 a0 11 5c 48 38 44 52 7d 48 41 4d 36 .i....\H8DR}HAM6 99e0: 0a 80 48 41 4d 36 a1 0c 5c 4d 42 45 43 0a 16 0a ..HAM6..\MBEC... 99f0: ff 0a 80 70 0a 01 60 a0 24 93 69 0a 00 a0 11 5c ...p..`.$.i....\ 9a00: 48 38 44 52 7b 48 41 4d 36 0a 7f 48 41 4d 36 a1 H8DR{HAM6..HAM6. 9a10: 0c 5c 4d 42 45 43 0a 16 0a 7f 0a 00 a0 2d 93 69 .\MBEC.......-.i 9a20: 0a 02 a0 14 5c 48 38 44 52 a0 0d 7b 48 41 4d 36 ....\H8DR..{HAM6 9a30: 0a 80 00 70 0a 01 60 a1 12 a0 10 7b 5c 52 42 45 ...p..`....{\RBE 9a40: 43 0a 16 0a 80 00 70 0a 01 60 a0 42 08 93 68 0a C.....p..`.B..h. 9a50: 01 a0 28 93 69 0a 01 a0 11 5c 48 38 44 52 7d 48 ..(.i....\H8DR}H 9a60: 41 4d 41 0a 01 48 41 4d 41 a1 0c 5c 4d 42 45 43 AMA..HAMA..\MBEC 9a70: 0a 1a 0a ff 0a 01 70 0a 01 60 a0 24 93 69 0a 00 ......p..`.$.i.. 9a80: a0 11 5c 48 38 44 52 7b 48 41 4d 41 0a fe 48 41 ..\H8DR{HAMA..HA 9a90: 4d 41 a1 0c 5c 4d 42 45 43 0a 1a 0a fe 0a 00 a0 MA..\MBEC....... 9aa0: 2d 93 69 0a 02 a0 14 5c 48 38 44 52 a0 0d 7b 48 -.i....\H8DR..{H 9ab0: 41 4d 41 0a 01 00 70 0a 01 60 a1 12 a0 10 7b 5c AMA...p..`....{\ 9ac0: 52 42 45 43 0a 1a 0a 01 00 70 0a 01 60 a0 42 08 RBEC.....p..`.B. 9ad0: 93 68 0a 02 a0 28 93 69 0a 01 a0 11 5c 48 38 44 .h...(.i....\H8D 9ae0: 52 7d 48 41 4d 42 0a 01 48 41 4d 42 a1 0c 5c 4d R}HAMB..HAMB..\M 9af0: 42 45 43 0a 1b 0a ff 0a 01 70 0a 01 60 a0 24 93 BEC......p..`.$. 9b00: 69 0a 00 a0 11 5c 48 38 44 52 7b 48 41 4d 42 0a i....\H8DR{HAMB. 9b10: fe 48 41 4d 42 a1 0c 5c 4d 42 45 43 0a 1b 0a fe .HAMB..\MBEC.... 9b20: 0a 00 a0 2d 93 69 0a 02 a0 14 5c 48 38 44 52 a0 ...-.i....\H8DR. 9b30: 0d 7b 48 41 4d 42 0a 01 00 70 0a 01 60 a1 12 a0 .{HAMB...p..`... 9b40: 10 7b 5c 52 42 45 43 0a 1b 0a 01 00 70 0a 01 60 .{\RBEC.....p..` 9b50: a4 60 14 4b 07 44 44 57 4b 01 70 0a 00 60 a0 23 .`.K.DDWK.p..`.# 9b60: 93 68 0a 01 a0 0c 5c 48 38 44 52 70 01 48 57 44 .h....\H8DRp.HWD 9b70: 4b a1 0c 5c 4d 42 45 43 0a 32 0a ff 0a 08 70 0a K..\MBEC.2....p. 9b80: 01 60 a0 1f 93 68 0a 00 a0 0c 5c 48 38 44 52 70 .`...h....\H8DRp 9b90: 00 48 57 44 4b a1 0c 5c 4d 42 45 43 0a 32 0a f7 .HWDK..\MBEC.2.. 9ba0: 0a 00 a0 29 93 68 0a 02 a0 10 5c 48 38 44 52 a0 ...).h....\H8DR. 9bb0: 09 48 57 44 4b 70 0a 01 60 a1 12 a0 10 7b 5c 52 .HWDKp..`....{\R 9bc0: 42 45 43 0a 32 0a 08 00 70 0a 01 60 a4 60 10 4c BEC.2...p..`.`.L 9bd0: 08 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ 9be0: 45 43 5f 5f 48 4b 45 59 14 42 07 47 44 4b 53 00 EC__HKEY.B.GDKS. 9bf0: 70 0a 00 60 5b 22 0b f4 01 a0 4f 05 93 5c 2f 05 p..`["....O..\/. 9c00: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 9c10: 44 4f 43 44 0a 01 a0 23 44 4f 43 44 70 5c 2f 05 DOCD...#DOCDp\/. 9c20: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 9c30: 41 43 53 42 60 79 60 0a 01 60 7d 60 0a 01 60 70 ACSB`y`..`}`..`p 9c40: 5c 2f 03 5f 53 42 5f 47 44 43 4b 47 47 49 44 61 \/._SB_GDCKGGIDa 9c50: 79 61 0a 08 61 7d 60 61 60 a4 60 10 4c 5a 5c 2f ya..a}`a`.`.LZ\/ 9c60: 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ 9c70: 5f 08 53 4c 49 44 0c ff ff ff ff 08 53 49 44 42 _.SLID......SIDB 9c80: 0c ff ff ff ff 08 53 46 4c 47 0a 00 08 53 55 43 ......SFLG...SUC 9c90: 54 0a 00 08 53 48 4b 45 0a 00 14 24 53 4c 42 4e T...SHKE...$SLBN 9ca0: 00 70 0a 00 60 a0 19 93 5c 2f 03 5f 53 42 5f 47 .p..`...\/._SB_G 9cb0: 44 43 4b 47 47 49 44 0a 05 a4 0c 30 ae 00 02 14 DCKGGID....0.... 9cc0: 09 53 4c 55 44 00 a4 0a 00 14 3f 53 53 54 41 00 .SLUD.....?SSTA. 9cd0: 53 55 44 4b 53 55 44 54 a0 0c 93 47 53 49 44 0a SUDKSUDT...GSID. 9ce0: 05 70 0a 0f 60 a1 13 a0 0b 92 5c 57 39 38 46 70 .p..`.....\W98Fp 9cf0: 0a 00 60 a1 05 70 0a 0c 60 a0 0d 5c 57 39 38 46 ..`..p..`..\W98F 9d00: 70 48 49 44 53 60 60 a4 60 14 2b 53 49 4e 49 00 pHIDS``.`.+SINI. 9d10: a0 14 93 47 53 49 44 0a 05 7d 53 46 4c 47 0b 00 ...GSID..}SFLG.. 9d20: 04 53 46 4c 47 a1 0f 7b 53 46 4c 47 80 0b 00 04 .SFLG..{SFLG.... 9d30: 00 53 46 4c 47 14 4c 07 53 50 54 53 01 a0 44 07 .SFLG.L.SPTS..D. 9d40: 90 92 95 68 0a 01 92 94 68 0a 04 70 0a 00 53 48 ...h....h..p..SH 9d50: 4b 45 70 0a 00 53 49 44 42 a0 1d 7b 53 46 4c 47 KEp..SIDB..{SFLG 9d60: 0a 02 00 70 0a 00 53 4c 49 44 7b 53 46 4c 47 80 ...p..SLID{SFLG. 9d70: 0a 02 00 53 46 4c 47 a0 2e 93 47 53 49 44 0a 05 ...SFLG...GSID.. 9d80: a0 1e 93 68 0a 03 5c 2f 05 5f 53 42 5f 50 43 49 ...h..\/._SB_PCI 9d90: 30 4c 50 43 5f 45 43 5f 5f 44 44 57 4b 0a 01 70 0LPC_EC__DDWK..p 9da0: 0a 05 53 49 44 42 7d 53 46 4c 47 0b 00 01 53 46 ..SIDB}SFLG...SF 9db0: 4c 47 14 46 0b 53 57 41 4b 01 70 0c ff ff ff ff LG.F.SWAK.p..... 9dc0: 53 4c 49 44 a0 44 0a 90 92 95 68 0a 01 92 94 68 SLID.D....h....h 9dd0: 0a 04 a0 45 04 93 53 49 44 42 0a 05 a0 18 93 47 ...E..SIDB.....G 9de0: 53 49 44 0a 05 4c 45 44 5f 0a 03 0a 80 79 68 0a SID..LED_....yh. 9df0: 08 53 48 4b 45 a1 22 47 55 53 42 0a 00 86 5c 2e .SHKE."GUSB...\. 9e00: 5f 53 42 5f 47 44 43 4b 0a 00 7b 53 46 4c 47 80 _SB_GDCK..{SFLG. 9e10: 0b 00 04 00 53 46 4c 47 a1 1b a0 16 93 47 53 49 ....SFLG.....GSI 9e20: 44 0a 05 41 53 53 49 0a 00 5b 22 0a 64 57 53 44 D..ASSI..[".dWSD 9e30: 4b a1 02 a3 7b 53 46 4c 47 80 0b 00 01 00 53 46 K...{SFLG.....SF 9e40: 4c 47 7b 53 46 4c 47 80 0a 02 00 53 46 4c 47 7b LG{SFLG....SFLG{ 9e50: 53 46 4c 47 80 0a 10 00 53 46 4c 47 7b 53 46 4c SFLG....SFLG{SFL 9e60: 47 80 0a 20 00 53 46 4c 47 14 11 53 47 50 45 00 G.. .SFLG..SGPE. 9e70: 7d 53 46 4c 47 0a 08 53 46 4c 47 14 4e 0c 53 44 }SFLG..SFLG.N.SD 9e80: 43 4b 01 a0 43 0c 5c 48 38 44 52 a0 2d 68 42 53 CK..C.\H8DR.-hBS 9e90: 43 4e 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 CN\/._SB_PCI0LPC 9ea0: 5f 45 43 5f 5f 44 41 54 54 0a 01 0a 01 7d 53 46 _EC__DATT....}SF 9eb0: 4c 47 0b 00 04 53 46 4c 47 a1 4d 08 7d 53 46 4c LG...SFLG.M.}SFL 9ec0: 47 0a 02 53 46 4c 47 47 55 53 42 0a 00 70 0a 01 G..SFLGGUSB..p.. 9ed0: 48 42 31 49 a0 43 04 5c 57 4e 54 46 70 0a 00 5c HB1I.C.\WNTFp..\ 9ee0: 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 /._SB_PCI0LPC_EC 9ef0: 5f 5f 42 41 54 31 42 31 53 54 70 0a 00 5c 2f 06 __BAT1B1STp..\/. 9f00: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 9f10: 42 41 54 31 58 42 31 53 42 45 4a 30 0a 01 5c 2f BAT1XB1SBEJ0..\/ 9f20: 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ 9f30: 5f 44 41 54 54 0a 01 0a 00 7b 53 46 4c 47 80 0b _DATT....{SFLG.. 9f40: 00 04 00 53 46 4c 47 a4 0a 01 14 2f 53 45 4a 30 ...SFLG..../SEJ0 9f50: 01 70 0a 00 53 4c 49 44 a0 08 68 41 53 53 49 0a .p..SLID..hASSI. 9f60: 01 4c 45 44 5f 0a 03 0a 00 53 55 44 49 7b 53 46 .LED_....SUDI{SF 9f70: 4c 47 80 0a 02 00 53 46 4c 47 14 1f 53 45 4a 33 LG....SFLG..SEJ3 9f80: 01 7d 53 46 4c 47 0a 10 53 46 4c 47 a0 0d 93 5c .}SFLG..SFLG...\ 9f90: 53 50 53 5f 0a 03 50 53 45 33 14 11 53 45 4a 34 SPS_..PSE3..SEJ4 9fa0: 01 7d 53 46 4c 47 0a 20 53 46 4c 47 14 18 50 53 .}SFLG. SFLG..PS 9fb0: 45 33 00 a0 11 7b 53 46 4c 47 0a 10 00 4c 45 44 E3...{SFLG...LED 9fc0: 5f 0a 03 0a 00 08 53 48 44 45 0a 00 14 44 04 57 _.....SHDE...D.W 9fd0: 53 44 4b 00 a0 2d 7b 53 46 4c 47 7d 0a 10 0a 20 SDK..-{SFLG}... 9fe0: 00 00 53 44 43 4b 0a 01 a0 19 5c 57 39 38 46 7d ..SDCK....\W98F} 9ff0: 53 46 4c 47 0b 00 02 53 46 4c 47 70 0a 05 53 48 SFLG...SFLGp..SH a000: 44 45 a1 0e 86 5c 2e 5f 53 42 5f 47 44 43 4b 0a DE...\._SB_GDCK. a010: 00 14 40 06 48 49 44 53 01 70 68 60 a0 43 05 7b ..@.HIDS.ph`.C.{ a020: 53 46 4c 47 0b 00 02 00 a0 37 93 68 0a 0f a0 0a SFLG.....7.h.... a030: 5c 57 39 38 46 70 0a 0c 60 76 53 48 44 45 a0 21 \W98Fp..`vSHDE.! a040: 92 53 48 44 45 7b 53 46 4c 47 80 0b 00 02 00 53 .SHDE{SFLG.....S a050: 46 4c 47 86 5c 2e 5f 53 42 5f 47 44 43 4b 0a 00 FLG.\._SB_GDCK.. a060: a1 0f 7b 53 46 4c 47 80 0b 00 02 00 53 46 4c 47 ..{SFLG.....SFLG a070: a4 60 14 44 08 53 55 44 4b 00 a0 4c 07 7b 53 46 .`.D.SUDK..L.{SF a080: 4c 47 0a 08 00 a0 41 07 92 7b 53 46 4c 47 0b 00 LG....A..{SFLG.. a090: 01 00 7d 53 48 4b 45 0b 04 20 53 48 4b 45 a0 28 ..}SHKE.. SHKE.( a0a0: 93 5c 55 4f 50 54 0a 00 5c 2f 06 5f 53 42 5f 50 .\UOPT..\/._SB_P a0b0: 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d CI0LPC_EC__HKEYM a0c0: 48 4b 51 53 48 4b 45 a0 13 5c 57 39 38 46 86 5c HKQSHKE..\W98F.\ a0d0: 2e 5f 53 42 5f 47 44 43 4b 0a 01 a1 0e 86 5c 2e ._SB_GDCK.....\. a0e0: 5f 53 42 5f 47 44 43 4b 0a 03 7b 53 46 4c 47 80 _SB_GDCK..{SFLG. a0f0: 0a 08 00 53 46 4c 47 14 1d 53 55 44 49 00 a0 0d ...SFLG..SUDI... a100: 5c 57 4e 54 46 70 0a 01 53 55 43 54 a1 08 70 0a \WNTFp..SUCT..p. a110: 05 53 55 43 54 14 43 05 53 55 44 54 00 a0 4b 04 .SUCT.C.SUDT..K. a120: 7b 53 48 4b 45 0b 04 20 00 a0 3f 93 47 53 49 44 {SHKE.. ..?.GSID a130: 0a 00 a0 36 92 76 53 55 43 54 70 0a 00 53 48 4b ...6.vSUCTp..SHK a140: 45 a0 27 93 5c 55 4f 50 54 0a 00 5c 2f 06 5f 53 E.'.\UOPT..\/._S a150: 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b B_PCI0LPC_EC__HK a160: 45 59 4d 48 4b 51 0b 03 40 14 42 05 47 53 49 44 EYMHKQ..@.B.GSID a170: 00 a0 45 04 93 53 4c 49 44 0c ff ff ff ff 70 0c ..E..SLID.....p. a180: ff ff ff ff 5c 2f 03 5f 53 42 5f 47 44 43 4b 47 ....\/._SB_GDCKG a190: 5f 49 44 a0 1a 93 5c 2f 03 5f 53 42 5f 47 44 43 _ID...\/._SB_GDC a1a0: 4b 47 47 49 44 0a 05 70 0a 05 53 4c 49 44 a1 08 KGGID..p..SLID.. a1b0: 70 0a 00 53 4c 49 44 a4 53 4c 49 44 14 4b 04 53 p..SLID.SLID.K.S a1c0: 50 45 4a 00 4c 45 44 5f 0a 03 0a 00 5b 22 0a c8 PEJ.LED_....[".. a1d0: 4c 45 44 5f 0a 08 0a 80 5b 22 0a c8 4c 45 44 5f LED_....["..LED_ a1e0: 0a 08 0a 00 5b 22 0a c8 4c 45 44 5f 0a 08 0a 80 ....["..LED_.... a1f0: 5b 22 0a c8 4c 45 44 5f 0a 08 0a 00 5b 22 0a c8 ["..LED_....[".. a200: 4c 45 44 5f 0a 08 0a 80 10 40 05 5c 2f 04 5f 53 LED_.....@.\/._S a210: 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 14 0d B_PCI0LPC_EC__.. a220: 5f 51 34 33 00 5c 55 43 4d 53 0a 18 14 2c 53 41 _Q43.\UCMS...,SA a230: 55 4d 01 a0 06 94 68 0a 03 a3 a1 1e a0 0c 5c 48 UM....h.......\H a240: 38 44 52 70 68 48 41 55 4d a1 0f 5c 4d 42 45 43 8DRphHAUM..\MBEC a250: 0a 03 0a 9f 79 68 0a 05 00 10 42 05 5c 2f 05 5f ....yh....B.\/._ a260: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 SB_PCI0LPC_EC__H a270: 4b 45 59 14 10 47 53 4d 53 01 a4 5c 41 55 44 43 KEY..GSMS..\AUDC a280: 0a 00 0a 00 14 13 53 53 4d 53 01 a4 5c 41 55 44 ......SSMS..\AUD a290: 43 0a 01 7b 68 0a 01 00 14 13 53 48 44 41 01 a4 C..{h.....SHDA.. a2a0: 5c 41 55 44 43 0a 02 7b 68 0a 01 00 10 4c 36 5c \AUDC..{h....L6\ a2b0: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 /._SB_PCI0LPC_EC a2c0: 5f 5f 08 42 52 54 57 12 26 12 0a 64 0a 64 0a 0a __.BRTW.&..d.d.. a2d0: 0a 0f 0a 14 0a 19 0a 1e 0a 23 0a 28 0a 2d 0a 32 .........#.(.-.2 a2e0: 0a 37 0a 3c 0a 41 0a 46 0a 50 0a 5a 0a 64 08 42 .7.<.A.F.P.Z.d.B a2f0: 52 54 42 12 42 09 03 12 30 16 0a 14 0a 04 0a 04 RTB.B...0....... a300: 0a 08 0a 0c 0a 13 0a 19 0a 20 0a 27 0a 30 0a 39 ......... .'.0.9 a310: 0a 43 0a 4e 0a 5c 0a 71 0a 8b 0a b4 0a ff 0b 45 .C.N.\.q.......E a320: 01 0b 45 01 0a 04 0a 04 12 2e 16 0a 1e 0a 03 0a ..E............. a330: 03 0a 06 0a 09 0a 0c 0a 0f 0a 13 0a 17 0a 1c 0a ................ a340: 21 0a 28 0a 32 0a 41 0a 58 0a 7d 0a b9 0a ff 0a !.(.2.A.X.}..... a350: d2 0a d2 0a 03 0a 03 12 2e 16 0a 00 0a 04 0a 04 ................ a360: 0a 07 0a 09 0a 0c 0a 10 0a 15 0a 1c 0a 25 0a 32 .............%.2 a370: 0a 40 0a 50 0a 64 0a 82 0a a5 0a cd 0a ff 0a dc .@.P.d.......... a380: 0a dc 0a 04 0a 04 14 4a 0e 5f 51 31 34 00 a0 3d .......J._Q14..= a390: 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E a3a0: 43 5f 5f 48 4b 45 59 4d 48 4b 4b 0b 00 80 5c 2f C__HKEYMHKK...\/ a3b0: 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ a3c0: 5f 48 4b 45 59 4d 48 4b 51 0b 10 10 a0 3f 5c 4e _HKEYMHKQ....?\N a3d0: 42 43 46 a0 1c 5c 56 49 47 44 86 5c 2f 04 5f 53 BCF..\VIGD.\/._S a3e0: 42 5f 50 43 49 30 56 49 44 5f 4c 43 44 30 0a 86 B_PCI0VID_LCD0.. a3f0: a1 1b 86 5c 2f 05 5f 53 42 5f 50 43 49 30 50 45 ...\/._SB_PCI0PE a400: 47 5f 56 49 44 5f 4c 43 44 30 0a 86 a1 44 06 70 G_VID_LCD0...D.p a410: 5c 42 52 4c 56 60 a0 0f 92 93 60 0a 0f 75 60 70 \BRLV`....`..u`p a420: 60 5c 42 52 4c 56 a0 24 5c 56 49 47 44 5c 55 43 `\BRLV.$\VIGD\UC a430: 4d 53 0a 16 5c 2f 05 5f 53 42 5f 50 43 49 30 4c MS..\/._SB_PCI0L a440: 50 43 5f 45 43 5f 5f 42 52 4e 53 a1 07 5c 56 42 PC_EC__BRNS..\VB a450: 52 43 60 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 RC`\/._SB_PCI0LP a460: 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 51 0b 50 C_EC__HKEYMHKQ.P a470: 60 14 4a 0e 5f 51 31 35 00 a0 3f 5c 2f 06 5f 53 `.J._Q15..?\/._S a480: 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b B_PCI0LPC_EC__HK a490: 45 59 4d 48 4b 4b 0c 00 00 01 00 5c 2f 06 5f 53 EYMHKK.....\/._S a4a0: 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b B_PCI0LPC_EC__HK a4b0: 45 59 4d 48 4b 51 0b 11 10 a0 3f 5c 4e 42 43 46 EYMHKQ....?\NBCF a4c0: a0 1c 5c 56 49 47 44 86 5c 2f 04 5f 53 42 5f 50 ..\VIGD.\/._SB_P a4d0: 43 49 30 56 49 44 5f 4c 43 44 30 0a 87 a1 1b 86 CI0VID_LCD0..... a4e0: 5c 2f 05 5f 53 42 5f 50 43 49 30 50 45 47 5f 56 \/._SB_PCI0PEG_V a4f0: 49 44 5f 4c 43 44 30 0a 87 a1 40 06 70 5c 42 52 ID_LCD0...@.p\BR a500: 4c 56 60 a0 0b 60 76 60 70 60 5c 42 52 4c 56 a0 LV`..`v`p`\BRLV. a510: 24 5c 56 49 47 44 5c 55 43 4d 53 0a 16 5c 2f 05 $\VIGD\UCMS..\/. a520: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ a530: 42 52 4e 53 a1 07 5c 56 42 52 43 60 5c 2f 06 5f BRNS..\VBRC`\/._ a540: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 SB_PCI0LPC_EC__H a550: 4b 45 59 4d 48 4b 51 0b 50 60 a4 00 14 4c 0b 42 KEYMHKQ.P`...L.B a560: 52 4e 53 00 72 5c 42 52 4c 56 0a 02 60 70 5c 42 RNS.r\BRLV..`p\B a570: 52 54 4e 63 a0 4b 09 5c 2f 04 5f 53 42 5f 50 43 RTNc.K.\/._SB_PC a580: 49 30 56 49 44 5f 44 52 44 59 a0 23 93 0a 00 60 I0VID_DRDY.#...` a590: 70 83 88 83 88 42 52 54 42 63 00 0a 14 00 61 70 p....BRTBc....ap a5a0: 83 88 83 88 42 52 54 42 63 00 0a 12 00 62 a1 1f ....BRTBc....b.. a5b0: 70 83 88 83 88 42 52 54 42 63 00 0a 15 00 61 70 p....BRTBc....ap a5c0: 83 88 83 88 42 52 54 42 63 00 0a 13 00 62 7d 61 ....BRTBc....b}a a5d0: 79 62 0a 09 00 62 5c 2f 04 5f 53 42 5f 50 43 49 yb...b\/._SB_PCI a5e0: 30 56 49 44 5f 41 49 4e 54 0a 03 62 70 83 88 83 0VID_AINT..bp... a5f0: 88 42 52 54 42 63 00 60 00 62 5c 2f 04 5f 53 42 .BRTBc.`.b\/._SB a600: 5f 50 43 49 30 56 49 44 5f 41 49 4e 54 0a 01 62 _PCI0VID_AINT..b a610: a1 08 5c 55 43 4d 53 0a 12 10 44 06 5c 2f 04 5f ..\UCMS...D.\/._ a620: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 14 SB_PCI0LPC_EC__. a630: 4e 04 5f 51 31 39 00 a0 3f 5c 2f 06 5f 53 42 5f N._Q19..?\/._SB_ a640: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 PCI0LPC_EC__HKEY a650: 4d 48 4b 4b 0c 00 00 80 00 5c 2f 06 5f 53 42 5f MHKK.....\/._SB_ a660: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 PCI0LPC_EC__HKEY a670: 4d 48 4b 51 0b 18 10 5c 55 43 4d 53 0a 03 10 44 MHKQ...\UCMS...D a680: 06 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ a690: 45 43 5f 5f 14 4e 04 5f 51 36 33 00 a0 3f 5c 2f EC__.N._Q63..?\/ a6a0: 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ a6b0: 5f 48 4b 45 59 4d 48 4b 4b 0c 00 00 08 00 5c 2f _HKEYMHKK.....\/ a6c0: 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ a6d0: 5f 48 4b 45 59 4d 48 4b 51 0b 14 10 5c 55 43 4d _HKEYMHKQ...\UCM a6e0: 53 0a 0b 10 42 0b 5c 2f 04 5f 53 42 5f 50 43 49 S...B.\/._SB_PCI a6f0: 30 4c 50 43 5f 45 43 5f 5f 14 0a 5f 51 37 30 00 0LPC_EC__.._Q70. a700: 46 4e 53 54 14 0a 5f 51 37 32 00 46 4e 53 54 14 FNST.._Q72.FNST. a710: 0a 5f 51 37 33 00 46 4e 53 54 14 4b 07 46 4e 53 ._Q73.FNST.K.FNS a720: 54 00 a0 12 5c 48 38 44 52 70 48 46 4e 53 60 70 T...\H8DRpHFNS`p a730: 48 46 4e 45 61 a1 17 7b 5c 52 42 45 43 0a 0e 0a HFNEa..{\RBEC... a740: 03 60 7b 5c 52 42 45 43 0a 00 0a 08 61 a0 48 04 .`{\RBEC....a.H. a750: 61 a0 0c 93 60 0a 00 5c 55 43 4d 53 0a 11 a0 0c a...`..\UCMS.... a760: 93 60 0a 01 5c 55 43 4d 53 0a 0f a0 0c 93 60 0a .`..\UCMS.....`. a770: 02 5c 55 43 4d 53 0a 10 5c 2f 06 5f 53 42 5f 50 .\UCMS..\/._SB_P a780: 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d CI0LPC_EC__HKEYM a790: 48 4b 51 0b 05 60 10 3d 5c 2f 05 5f 53 42 5f 50 HKQ..`.=\/._SB_P a7a0: 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 14 CI0LPC_EC__HKEY. a7b0: 10 47 48 53 4c 01 a4 5c 46 4e 53 43 0a 00 0a 00 .GHSL..\FNSC.... a7c0: 14 13 53 48 53 4c 01 a4 5c 46 4e 53 43 0a 01 7b ..SHSL..\FNSC..{ a7d0: 68 0a 01 00 10 47 30 5c 2f 05 5f 53 42 5f 50 43 h....G0\/._SB_PC a7e0: 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 08 57 I0LPC_EC__HKEY.W a7f0: 47 46 4c 0a 00 14 09 57 53 49 46 00 a4 0a 00 14 GFL....WSIF..... a800: 1e 57 4c 53 57 00 a4 5c 2f 05 5f 53 42 5f 50 43 .WLSW..\/._SB_PC a810: 49 30 4c 50 43 5f 45 43 5f 5f 47 53 54 53 14 37 I0LPC_EC__GSTS.7 a820: 47 57 41 4e 00 70 0a 00 60 a0 0e 7b 57 47 46 4c GWAN.p..`..{WGFL a830: 0a 01 00 7d 60 0a 01 60 a0 0b 7b 57 47 46 4c 0a ...}`..`..{WGFL. a840: 08 00 a4 60 a0 0a 57 50 57 53 7d 60 0a 02 60 7d ...`..WPWS}`..`} a850: 60 0a 04 60 a4 60 14 1b 53 57 41 4e 01 a0 0c 7b `..`.`..SWAN...{ a860: 68 0a 02 00 57 50 57 43 0a 01 a1 07 57 50 57 43 h...WPWC....WPWC a870: 0a 00 14 37 47 42 44 43 00 70 0a 00 60 a0 0e 7b ...7GBDC.p..`..{ a880: 57 47 46 4c 0a 10 00 7d 60 0a 01 60 a0 0b 7b 57 WGFL...}`..`..{W a890: 47 46 4c 0a 80 00 a4 60 a0 0a 42 50 57 53 7d 60 GFL....`..BPWS}` a8a0: 0a 02 60 7d 60 0a 04 60 a4 60 14 1b 53 42 44 43 ..`}`..`.`..SBDC a8b0: 01 a0 0c 7b 68 0a 02 00 42 50 57 43 0a 01 a1 07 ...{h...BPWC.... a8c0: 42 50 57 43 0a 00 14 3b 57 50 57 53 00 a0 1f 5c BPWC...;WPWS...\ a8d0: 48 38 44 52 70 5c 2f 05 5f 53 42 5f 50 43 49 30 H8DRp\/._SB_PCI0 a8e0: 4c 50 43 5f 45 43 5f 5f 44 43 57 57 60 a1 12 70 LPC_EC__DCWW`..p a8f0: 7a 7b 5c 52 42 45 43 0a 3a 0a 40 00 0a 06 00 60 z{\RBEC.:.@....` a900: a4 60 14 42 09 57 50 57 43 01 a0 4e 04 90 68 90 .`.B.WPWC..N..h. a910: 7b 57 47 46 4c 0a 01 00 92 7b 57 47 46 4c 0a 08 {WGFL....{WGFL.. a920: 00 a0 1f 5c 48 38 44 52 70 01 5c 2f 05 5f 53 42 ...\H8DRp.\/._SB a930: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 44 43 57 _PCI0LPC_EC__DCW a940: 57 a1 0c 5c 4d 42 45 43 0a 3a 0a ff 0a 40 7d 57 W..\MBEC.:...@}W a950: 47 46 4c 0a 02 57 47 46 4c a1 3b a0 1f 5c 48 38 GFL..WGFL.;..\H8 a960: 44 52 70 00 5c 2f 05 5f 53 42 5f 50 43 49 30 4c DRp.\/._SB_PCI0L a970: 50 43 5f 45 43 5f 5f 44 43 57 57 a1 0c 5c 4d 42 PC_EC__DCWW..\MB a980: 45 43 0a 3a 0a bf 0a 00 7b 57 47 46 4c 80 0a 02 EC.:....{WGFL... a990: 00 57 47 46 4c 14 3b 42 50 57 53 00 a0 1f 5c 48 .WGFL.;BPWS...\H a9a0: 38 44 52 70 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 8DRp\/._SB_PCI0L a9b0: 50 43 5f 45 43 5f 5f 44 43 42 44 60 a1 12 70 7a PC_EC__DCBD`..pz a9c0: 7b 5c 52 42 45 43 0a 3a 0a 10 00 0a 04 00 60 a4 {\RBEC.:......`. a9d0: 60 14 42 09 42 50 57 43 01 a0 4e 04 90 68 90 7b `.B.BPWC..N..h.{ a9e0: 57 47 46 4c 0a 10 00 92 7b 57 47 46 4c 0a 80 00 WGFL....{WGFL... a9f0: a0 1f 5c 48 38 44 52 70 01 5c 2f 05 5f 53 42 5f ..\H8DRp.\/._SB_ aa00: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 44 43 42 44 PCI0LPC_EC__DCBD aa10: a1 0c 5c 4d 42 45 43 0a 3a 0a ff 0a 10 7d 57 47 ..\MBEC.:....}WG aa20: 46 4c 0a 20 57 47 46 4c a1 3b a0 1f 5c 48 38 44 FL. WGFL.;..\H8D aa30: 52 70 00 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 Rp.\/._SB_PCI0LP aa40: 43 5f 45 43 5f 5f 44 43 42 44 a1 0c 5c 4d 42 45 C_EC__DCBD..\MBE aa50: 43 0a 3a 0a ef 0a 00 7b 57 47 46 4c 80 0a 20 00 C.:....{WGFL.. . aa60: 57 47 46 4c 14 3b 57 47 49 4e 00 70 0a 00 57 47 WGFL.;WGIN.p..WG aa70: 46 4c 70 5c 57 47 53 56 0a 01 57 47 46 4c a0 10 FLp\WGSV..WGFL.. aa80: 57 50 57 53 7d 57 47 46 4c 0a 02 57 47 46 4c a0 WPWS}WGFL..WGFL. aa90: 10 42 50 57 53 7d 57 47 46 4c 0a 20 57 47 46 4c .BPWS}WGFL. WGFL aaa0: 14 14 57 47 50 53 01 a0 0d 92 95 68 0a 04 5c 42 ..WGPS.....h..\B aab0: 4c 54 48 0a 05 14 26 57 47 57 4b 01 a0 0f 7b 57 LTH...&WGWK...{W aac0: 47 46 4c 0a 20 00 42 50 57 43 0a 01 a0 0f 7b 57 GFL. .BPWC....{W aad0: 47 46 4c 0a 02 00 57 50 57 43 0a 01 10 39 5c 2f GFL...WPWC...9\/ aae0: 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ aaf0: 5f 14 24 5f 51 34 31 00 5c 2f 06 5f 53 42 5f 50 _.$_Q41.\/._SB_P ab00: 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d CI0LPC_EC__HKEYM ab10: 48 4b 51 0b 00 70 5b 82 85 1f 02 57 4d 49 31 08 HKQ..p[....WMI1. ab20: 5f 48 49 44 0c 41 d0 0c 14 08 5f 55 49 44 0a 01 _HID.A...._UID.. ab30: 08 5f 57 44 47 11 48 0b 0a b4 0e 23 f5 51 77 96 ._WDG.H....#.Qw. ab40: cd 46 a1 cf c0 b2 3e e3 4d b7 41 30 50 05 64 9a .F....>.M.A0P.d. ab50: 47 98 f5 33 33 4e a7 07 8e 25 1e bb c3 a1 41 31 G..33N...%....A1 ab60: 01 06 ef 54 4b 6a ed a5 33 4d 94 55 b0 d9 b4 8d ...TKj..3M.U.... ab70: f4 b3 41 32 01 06 b6 eb f1 74 7a 92 7d 4c 95 df ..A2.....tz.}L.. ab80: 69 8e 21 e8 0e b5 41 33 01 06 ff 04 ef 7e 28 43 i.!...A3.....~(C ab90: 7c 44 b5 bb d4 49 92 5d 53 8d 41 34 01 06 9e 15 |D...I.]S.A4.... aba0: db 8a 32 1e 5c 45 bc 93 30 8a 7e d9 82 46 41 35 ..2.\E..0.~..FA5 abb0: 01 01 fd d9 51 26 1c 91 69 4b b9 4e d0 de d5 96 ....Q&..iK.N.... abc0: 3b d7 41 36 01 06 1a 65 64 73 2f 13 e7 4f ad aa ;.A6...eds/..O.. abd0: 40 c6 c7 ee 2e 3b 41 37 01 06 21 12 90 05 66 d5 @....;A7..!...f. abe0: d1 11 b2 f0 00 a0 c9 06 29 10 42 41 01 00 08 52 ........).BA...R abf0: 45 54 4e 12 4a 04 05 0d 53 75 63 63 65 73 73 00 ETN.J...Success. ac00: 0d 4e 6f 74 20 53 75 70 70 6f 72 74 65 64 00 0d .Not Supported.. ac10: 49 6e 76 61 6c 69 64 20 50 61 72 61 6d 65 74 65 Invalid Paramete ac20: 72 00 0d 41 63 63 65 73 73 20 44 65 6e 69 65 64 r..Access Denied ac30: 00 0d 53 79 73 74 65 6d 20 42 75 73 79 00 08 49 ..System Busy..I ac40: 54 45 4d 12 43 7c 51 12 0f 02 0a 0e 0d 57 61 6b TEM.C|Q......Wak ac50: 65 4f 6e 4c 41 4e 00 12 1a 02 0a 00 0d 45 74 68 eOnLAN.......Eth ac60: 65 72 6e 65 74 4c 41 4e 4f 70 74 69 6f 6e 52 4f ernetLANOptionRO ac70: 4d 00 12 14 02 0a 00 0d 55 53 42 42 49 4f 53 53 M.......USBBIOSS ac80: 75 70 70 6f 72 74 00 12 11 02 0a 00 0d 41 6c 77 upport.......Alw ac90: 61 79 73 4f 6e 55 53 42 00 12 10 02 0a 01 0d 54 aysOnUSB.......T aca0: 72 61 63 6b 50 6f 69 6e 74 00 12 0e 02 0a 01 0d rackPoint....... acb0: 54 6f 75 63 68 50 61 64 00 12 0f 02 0a 00 0d 46 TouchPad.......F acc0: 6e 4b 65 79 4c 6f 63 6b 00 12 15 02 0a 04 0d 54 nKeyLock.......T acd0: 68 69 6e 6b 50 61 64 4e 75 6d 4c 6f 63 6b 00 12 hinkPadNumLock.. ace0: 14 02 0a 0c 0d 50 6f 77 65 72 4f 6e 4e 75 6d 4c .....PowerOnNumL acf0: 6f 63 6b 00 12 17 02 0a 05 0d 42 6f 6f 74 44 69 ock.......BootDi ad00: 73 70 6c 61 79 44 65 76 69 63 65 00 12 0f 02 0a splayDevice..... ad10: 00 0d 53 70 65 65 64 53 74 65 70 00 12 21 02 0a ..SpeedStep..!.. ad20: 09 0d 41 64 61 70 74 69 76 65 54 68 65 72 6d 61 ..AdaptiveTherma ad30: 6c 4d 61 6e 61 67 65 6d 65 6e 74 41 43 00 12 26 lManagementAC..& ad40: 02 0a 09 0d 41 64 61 70 74 69 76 65 54 68 65 72 ....AdaptiveTher ad50: 6d 61 6c 4d 61 6e 61 67 65 6d 65 6e 74 42 61 74 malManagementBat ad60: 74 65 72 79 00 12 10 02 0a 06 0d 43 44 52 4f 4d tery.......CDROM ad70: 53 70 65 65 64 00 12 18 02 0a 01 0d 43 50 55 50 Speed.......CPUP ad80: 6f 77 65 72 4d 61 6e 61 67 65 6d 65 6e 74 00 12 owerManagement.. ad90: 16 02 0a 00 0d 50 6f 77 65 72 43 6f 6e 74 72 6f .....PowerContro ada0: 6c 42 65 65 70 00 12 15 02 0a 00 0d 4c 6f 77 42 lBeep.......LowB adb0: 61 74 74 65 72 79 41 6c 61 72 6d 00 12 12 02 0a atteryAlarm..... adc0: 00 0d 50 61 73 73 77 6f 72 64 42 65 65 70 00 12 ..PasswordBeep.. add0: 12 02 0a 00 0d 4b 65 79 62 6f 61 72 64 42 65 65 .....KeyboardBee ade0: 70 00 12 18 02 0a 00 0d 45 78 74 65 6e 64 65 64 p.......Extended adf0: 4d 65 6d 6f 72 79 54 65 73 74 00 12 18 02 0a 07 MemoryTest...... ae00: 0d 53 41 54 41 43 6f 6e 74 72 6f 6c 6c 65 72 4d .SATAControllerM ae10: 6f 64 65 00 12 19 02 0a 00 0d 43 6f 72 65 4d 75 ode.......CoreMu ae20: 6c 74 69 50 72 6f 63 65 73 73 69 6e 67 00 12 1e ltiProcessing... ae30: 02 0a 00 0d 56 69 72 74 75 61 6c 69 7a 61 74 69 ....Virtualizati ae40: 6f 6e 54 65 63 68 6e 6f 6c 6f 67 79 00 12 15 02 onTechnology.... ae50: 0a 00 0d 4c 6f 63 6b 42 49 4f 53 53 65 74 74 69 ...LockBIOSSetti ae60: 6e 67 00 12 1b 02 0a 0b 0d 4d 69 6e 69 6d 75 6d ng.......Minimum ae70: 50 61 73 73 77 6f 72 64 4c 65 6e 67 74 68 00 12 PasswordLength.. ae80: 22 02 0a 00 0d 42 49 4f 53 50 61 73 73 77 6f 72 "....BIOSPasswor ae90: 64 41 74 55 6e 61 74 74 65 6e 64 65 64 42 6f 6f dAtUnattendedBoo aea0: 74 00 12 29 02 0a 00 0d 46 69 6e 67 65 72 70 72 t..)....Fingerpr aeb0: 69 6e 74 50 72 65 64 65 73 6b 74 6f 70 41 75 74 intPredesktopAut aec0: 68 65 6e 74 69 63 61 74 69 6f 6e 00 12 1f 02 0a hentication..... aed0: 08 0d 46 69 6e 67 65 72 70 72 69 6e 74 52 65 61 ..FingerprintRea aee0: 64 65 72 50 72 69 6f 72 69 74 79 00 12 1d 02 0a derPriority..... aef0: 03 0d 46 69 6e 67 65 72 70 72 69 6e 74 53 65 63 ..FingerprintSec af00: 75 72 69 74 79 4d 6f 64 65 00 12 12 02 0a 02 0d urityMode....... af10: 53 65 63 75 72 69 74 79 43 68 69 70 00 12 1a 02 SecurityChip.... af20: 0a 00 0d 42 49 4f 53 55 70 64 61 74 65 42 79 45 ...BIOSUpdateByE af30: 6e 64 55 73 65 72 73 00 12 1d 02 0a 00 0d 44 61 ndUsers.......Da af40: 74 61 45 78 65 63 75 74 69 6f 6e 50 72 65 76 65 taExecutionPreve af50: 6e 74 69 6f 6e 00 12 17 02 0a 00 0d 45 74 68 65 ntion.......Ethe af60: 72 6e 65 74 4c 41 4e 41 63 63 65 73 73 00 12 17 rnetLANAccess... af70: 02 0a 00 0d 57 69 72 65 6c 65 73 73 4c 41 4e 41 ....WirelessLANA af80: 63 63 65 73 73 00 12 17 02 0a 00 0d 57 69 72 65 ccess.......Wire af90: 6c 65 73 73 57 41 4e 41 63 63 65 73 73 00 12 15 lessWANAccess... afa0: 02 0a 00 0d 42 6c 75 65 74 6f 6f 74 68 41 63 63 ....BluetoothAcc afb0: 65 73 73 00 12 17 02 0a 00 0d 57 69 72 65 6c 65 ess.......Wirele afc0: 73 73 55 53 42 41 63 63 65 73 73 00 12 11 02 0a ssUSBAccess..... afd0: 00 0d 4d 6f 64 65 6d 41 63 63 65 73 73 00 12 13 ..ModemAccess... afe0: 02 0a 00 0d 55 53 42 50 6f 72 74 41 63 63 65 73 ....USBPortAcces aff0: 73 00 12 14 02 0a 00 0d 49 45 45 45 31 33 39 34 s.......IEEE1394 b000: 41 63 63 65 73 73 00 12 17 02 0a 00 0d 45 78 70 Access.......Exp b010: 72 65 73 73 43 61 72 64 41 63 63 65 73 73 00 12 ressCardAccess.. b020: 1a 02 0a 00 0d 50 43 49 45 78 70 72 65 73 73 53 .....PCIExpressS b030: 6c 6f 74 41 63 63 65 73 73 00 12 14 02 0a 00 0d lotAccess....... b040: 55 6c 74 72 61 62 61 79 41 63 63 65 73 73 00 12 UltrabayAccess.. b050: 1a 02 0a 00 0d 4d 65 6d 6f 72 79 43 61 72 64 53 .....MemoryCardS b060: 6c 6f 74 41 63 63 65 73 73 00 12 19 02 0a 00 0d lotAccess....... b070: 53 6d 61 72 74 43 61 72 64 53 6c 6f 74 41 63 63 SmartCardSlotAcc b080: 65 73 73 00 12 1c 02 0a 00 0d 49 6e 74 65 67 72 ess.......Integr b090: 61 74 65 64 43 61 6d 65 72 61 41 63 63 65 73 73 atedCameraAccess b0a0: 00 12 16 02 0a 00 0d 4d 69 63 72 6f 70 68 6f 6e .......Microphon b0b0: 65 41 63 63 65 73 73 00 12 0e 02 0a 0a 0d 42 6f eAccess.......Bo b0c0: 6f 74 4d 6f 64 65 00 12 17 02 0a 00 0d 53 74 61 otMode.......Sta b0d0: 72 74 75 70 4f 70 74 69 6f 6e 4b 65 79 73 00 12 rtupOptionKeys.. b0e0: 1d 02 0a 00 0d 42 6f 6f 74 44 65 76 69 63 65 4c .....BootDeviceL b0f0: 69 73 74 46 31 32 4f 70 74 69 6f 6e 00 12 0f 02 istF12Option.... b100: 0a 64 0d 42 6f 6f 74 4f 72 64 65 72 00 12 11 02 .d.BootOrder.... b110: 0a 00 0d 57 69 4d 41 58 41 63 63 65 73 73 00 12 ...WiMAXAccess.. b120: 14 02 0a 0d 0d 47 72 61 70 68 69 63 73 44 65 76 .....GraphicsDev b130: 69 63 65 00 12 10 02 0a 00 0d 54 58 54 46 65 61 ice.......TXTFea b140: 74 75 72 65 00 12 10 02 0a 00 0d 56 54 64 46 65 ture.......VTdFe b150: 61 74 75 72 65 00 12 10 02 0a 0f 0d 41 4d 54 43 ature.......AMTC b160: 6f 6e 74 72 6f 6c 00 12 27 02 0a 00 0d 46 69 6e ontrol..'....Fin b170: 67 65 72 70 72 69 6e 74 50 61 73 73 77 6f 72 64 gerprintPassword b180: 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 00 12 Authentication.. b190: 1d 02 0a 00 0d 46 69 6e 67 65 72 70 72 69 6e 74 .....Fingerprint b1a0: 52 65 61 64 65 72 41 63 63 65 73 73 00 12 26 02 ReaderAccess..&. b1b0: 0a 00 0d 4f 73 44 65 74 65 63 74 69 6f 6e 46 6f ...OsDetectionFo b1c0: 72 53 77 69 74 63 68 61 62 6c 65 47 72 61 70 68 rSwitchableGraph b1d0: 69 63 73 00 12 20 02 0a 0f 0d 43 6f 6d 70 75 74 ics.. ....Comput b1e0: 72 61 63 65 4d 6f 64 75 6c 65 41 63 74 69 76 61 raceModuleActiva b1f0: 74 69 6f 6e 00 12 1f 02 0a 01 0d 50 43 49 45 78 tion.......PCIEx b200: 70 72 65 73 73 50 6f 77 65 72 4d 61 6e 61 67 65 pressPowerManage b210: 6d 65 6e 74 00 12 19 02 0a 0f 0d 41 54 70 4d 6f ment.......ATpMo b220: 64 75 6c 65 41 63 74 69 76 61 74 69 6f 6e 00 12 duleActivation.. b230: 15 02 0a 00 0d 65 53 41 54 41 50 6f 72 74 41 63 .....eSATAPortAc b240: 63 65 73 73 00 12 1d 02 0a 00 0d 48 61 72 64 77 cess.......Hardw b250: 61 72 65 50 61 73 73 77 6f 72 64 4d 61 6e 61 67 arePasswordManag b260: 65 72 00 12 1e 02 0a 00 0d 48 79 70 65 72 54 68 er.......HyperTh b270: 72 65 61 64 69 6e 67 54 65 63 68 6e 6f 6c 6f 67 readingTechnolog b280: 79 00 12 13 02 0a 00 0d 46 6e 43 74 72 6c 4b 65 y.......FnCtrlKe b290: 79 53 77 61 70 00 12 1a 02 0a 00 0d 42 49 4f 53 ySwap.......BIOS b2a0: 50 61 73 73 77 6f 72 64 41 74 52 65 62 6f 6f 74 PasswordAtReboot b2b0: 00 12 12 02 0a 00 0d 4f 6e 42 79 41 63 41 74 74 .......OnByAcAtt b2c0: 61 63 68 00 12 11 02 0a 64 0d 4e 65 74 77 6f 72 ach.....d.Networ b2d0: 6b 42 6f 6f 74 00 12 13 02 0a 00 0d 42 6f 6f 74 kBoot.......Boot b2e0: 4f 72 64 65 72 4c 6f 63 6b 00 12 0f 02 0a 10 0d OrderLock....... b2f0: 55 53 42 33 30 4d 6f 64 65 00 12 16 02 0a 11 0d USB30Mode....... b300: 45 78 70 72 65 73 73 43 61 72 64 53 70 65 65 64 ExpressCardSpeed b310: 00 12 1a 02 0a 00 0d 52 61 70 69 64 53 74 61 72 .......RapidStar b320: 74 54 65 63 68 6e 6f 6c 6f 67 79 00 12 1a 02 0a tTechnology..... b330: 12 0d 4b 65 79 62 6f 61 72 64 49 6c 6c 75 6d 69 ..KeyboardIllumi b340: 6e 61 74 69 6f 6e 00 12 16 02 0a 00 0d 49 50 76 nation.......IPv b350: 34 4e 65 74 77 6f 72 6b 53 74 61 63 6b 00 12 16 4NetworkStack... b360: 02 0a 00 0d 49 50 76 36 4e 65 74 77 6f 72 6b 53 ....IPv6NetworkS b370: 74 61 63 6b 00 12 19 02 0a 13 0d 55 65 66 69 50 tack.......UefiP b380: 78 65 42 6f 6f 74 50 72 69 6f 72 69 74 79 00 12 xeBootPriority.. b390: 25 02 0a 00 0d 50 68 79 73 69 63 61 6c 50 72 65 %....PhysicalPre b3a0: 73 65 6e 63 65 46 6f 72 54 70 6d 50 72 6f 76 69 senceForTpmProvi b3b0: 73 69 6f 6e 00 12 21 02 0a 00 0d 50 68 79 73 69 sion..!....Physi b3c0: 63 61 6c 50 72 65 73 65 6e 63 65 46 6f 72 54 70 calPresenceForTp b3d0: 6d 43 6c 65 61 72 00 12 1e 02 0a 00 0d 53 65 63 mClear.......Sec b3e0: 75 72 65 52 6f 6c 6c 42 61 63 6b 50 72 65 76 65 ureRollBackPreve b3f0: 6e 74 69 6f 6e 00 12 10 02 0a 00 0d 53 65 63 75 ntion.......Secu b400: 72 65 42 6f 6f 74 00 08 56 53 45 4c 12 42 26 14 reBoot..VSEL.B&. b410: 12 13 02 0d 44 69 73 61 62 6c 65 00 0d 45 6e 61 ....Disable..Ena b420: 62 6c 65 00 12 16 02 0d 44 69 73 61 62 6c 65 00 ble.....Disable. b430: 0d 41 75 74 6f 6d 61 74 69 63 00 12 1d 03 0d 41 .Automatic.....A b440: 63 74 69 76 65 00 0d 49 6e 61 63 74 69 76 65 00 ctive..Inactive. b450: 0d 44 69 73 61 62 6c 65 00 12 10 02 0d 4e 6f 72 .Disable.....Nor b460: 6d 61 6c 00 0d 48 69 67 68 00 12 1d 02 0d 49 6e mal..High.....In b470: 64 65 70 65 6e 64 65 6e 74 00 0d 53 79 6e 63 68 dependent..Synch b480: 72 6f 6e 69 7a 65 64 00 12 35 05 0d 4c 43 44 00 ronized..5..LCD. b490: 0d 56 47 41 00 0d 44 69 67 69 74 61 6c 00 0d 44 .VGA..Digital..D b4a0: 69 67 69 74 61 6c 31 6f 6e 44 6f 63 6b 00 0d 44 igital1onDock..D b4b0: 69 67 69 74 61 6c 32 6f 6e 44 6f 63 6b 00 12 18 igital2onDock... b4c0: 03 0d 48 69 67 68 00 0d 4e 6f 72 6d 61 6c 00 0d ..High..Normal.. b4d0: 53 69 6c 65 6e 74 00 12 17 02 0d 43 6f 6d 70 61 Silent.....Compa b4e0: 74 69 62 69 6c 69 74 79 00 0d 41 48 43 49 00 12 tibility..AHCI.. b4f0: 1a 02 0d 45 78 74 65 72 6e 61 6c 00 0d 49 6e 74 ...External..Int b500: 65 72 6e 61 6c 4f 6e 6c 79 00 12 21 02 0d 4d 61 ernalOnly..!..Ma b510: 78 69 6d 69 7a 65 50 65 72 66 6f 72 6d 61 6e 63 ximizePerformanc b520: 65 00 0d 42 61 6c 61 6e 63 65 64 00 12 16 02 0d e..Balanced..... b530: 51 75 69 63 6b 00 0d 44 69 61 67 6e 6f 73 74 69 Quick..Diagnosti b540: 63 73 00 12 29 0a 0d 44 69 73 61 62 6c 65 00 0d cs..)..Disable.. b550: 34 00 0d 35 00 0d 36 00 0d 37 00 0d 38 00 0d 39 4..5..6..7..8..9 b560: 00 0d 31 30 00 0d 31 31 00 0d 31 32 00 12 11 03 ..10..11..12.... b570: 0d 41 75 74 6f 00 0d 4f 6e 00 0d 4f 66 66 00 12 .Auto..On..Off.. b580: 2d 03 0d 49 6e 74 65 67 72 61 74 65 64 47 66 78 -..IntegratedGfx b590: 00 0d 44 69 73 63 72 65 74 65 47 66 78 00 0d 53 ..DiscreteGfx..S b5a0: 77 69 74 63 68 61 62 6c 65 47 66 78 00 12 29 04 witchableGfx..). b5b0: 0d 44 69 73 61 62 6c 65 00 0d 41 43 4f 6e 6c 79 .Disable..ACOnly b5c0: 00 0d 41 43 61 6e 64 42 61 74 74 65 72 79 00 0d ..ACandBattery.. b5d0: 45 6e 61 62 6c 65 00 12 1c 03 0d 44 69 73 61 62 Enable.....Disab b5e0: 6c 65 00 0d 45 6e 61 62 6c 65 00 0d 44 69 73 61 le..Enable..Disa b5f0: 62 6c 65 00 12 1e 03 0d 44 69 73 61 62 6c 65 00 ble.....Disable. b600: 0d 45 6e 61 62 6c 65 00 0d 41 75 74 6f 6d 61 74 .Enable..Automat b610: 69 63 00 12 1a 02 0d 47 65 6e 65 72 61 74 69 6f ic.....Generatio b620: 6e 31 00 0d 41 75 74 6f 6d 61 74 69 63 00 12 27 n1..Automatic..' b630: 03 0d 54 68 69 6e 6b 4c 69 67 68 74 4f 6e 6c 79 ..ThinkLightOnly b640: 00 0d 42 61 63 6b 6c 69 67 68 74 4f 6e 6c 79 00 ..BacklightOnly. b650: 0d 42 6f 74 68 00 12 18 02 0d 49 50 76 34 46 69 .Both.....IPv4Fi b660: 72 73 74 00 0d 49 50 76 36 46 69 72 73 74 00 08 rst..IPv6First.. b670: 56 4c 53 54 12 48 07 0f 0d 48 44 44 30 00 0d 48 VLST.H...HDD0..H b680: 44 44 31 00 0d 48 44 44 32 00 0d 48 44 44 33 00 DD1..HDD2..HDD3. b690: 0d 48 44 44 34 00 0d 50 43 49 4c 41 4e 00 0d 41 .HDD4..PCILAN..A b6a0: 54 41 50 49 43 44 30 00 0d 41 54 41 50 49 43 44 TAPICD0..ATAPICD b6b0: 31 00 0d 41 54 41 50 49 43 44 32 00 0d 55 53 42 1..ATAPICD2..USB b6c0: 46 44 44 00 0d 55 53 42 43 44 00 0d 55 53 42 48 FDD..USBCD..USBH b6d0: 44 44 00 0d 4f 74 68 65 72 48 44 44 00 0d 4f 74 DD..OtherHDD..Ot b6e0: 68 65 72 43 44 00 0d 4e 4f 44 45 56 00 08 50 45 herCD..NODEV..PE b6f0: 4e 43 12 13 02 0d 61 73 63 69 69 00 0d 73 63 61 NC....ascii..sca b700: 6e 63 6f 64 65 00 08 50 4b 42 44 12 0e 03 0d 75 ncode..PKBD....u b710: 73 00 0d 66 72 00 0d 67 72 00 08 50 54 59 50 12 s..fr..gr..PTYP. b720: 36 08 0d 70 61 70 00 0d 70 6f 70 00 0d 75 68 64 6..pap..pop..uhd b730: 70 31 00 0d 6d 68 64 70 31 00 0d 75 68 64 70 32 p1..mhdp1..uhdp2 b740: 00 0d 6d 68 64 70 32 00 0d 75 68 64 70 33 00 0d ..mhdp2..uhdp3.. b750: 6d 68 64 70 33 00 5b 01 4d 57 4d 49 07 08 50 43 mhdp3.[.MWMI..PC b760: 46 47 11 03 0a 18 08 49 42 55 46 11 04 0b 00 01 FG.....IBUF..... b770: 08 49 4c 45 4e 0a 00 08 50 53 54 52 11 03 0a 81 .ILEN...PSTR.... b780: 14 4d 22 57 51 41 30 01 5b 23 4d 57 4d 49 ff ff .M"WQA0.[#MWMI.. b790: a0 16 92 93 5c 57 4d 49 53 0a 00 68 0a 00 5b 27 ....\WMIS..h..[' b7a0: 4d 57 4d 49 a4 0d 00 70 83 88 49 54 45 4d 5c 57 MWMI...p..ITEM\W b7b0: 49 54 4d 00 60 70 83 88 60 0a 00 00 61 70 83 88 ITM.`p..`...ap.. b7c0: 60 0a 01 00 62 a0 21 95 61 0a 64 73 62 0d 2c 00 `...b.!.a.dsb.,. b7d0: 66 70 83 88 56 53 45 4c 61 00 63 73 66 83 88 63 fp..VSELa.csf..c b7e0: 5c 57 53 45 4c 00 67 a1 4e 1b 70 87 56 4c 53 54 \WSEL.g.N.p.VLST b7f0: 63 a0 1e 92 94 5c 57 4c 53 30 63 73 62 0d 2c 00 c....\WLS0csb.,. b800: 67 73 67 83 88 56 4c 53 54 5c 57 4c 53 30 00 62 gsg..VLST\WLS0.b b810: a0 1e 92 94 5c 57 4c 53 31 63 73 62 0d 3a 00 67 ....\WLS1csb.:.g b820: 73 67 83 88 56 4c 53 54 5c 57 4c 53 31 00 62 a0 sg..VLST\WLS1.b. b830: 1e 92 94 5c 57 4c 53 32 63 73 62 0d 3a 00 67 73 ...\WLS2csb.:.gs b840: 67 83 88 56 4c 53 54 5c 57 4c 53 32 00 62 a0 1e g..VLST\WLS2.b.. b850: 92 94 5c 57 4c 53 33 63 73 62 0d 3a 00 67 73 67 ..\WLS3csb.:.gsg b860: 83 88 56 4c 53 54 5c 57 4c 53 33 00 62 a0 1e 92 ..VLST\WLS3.b... b870: 94 5c 57 4c 53 34 63 73 62 0d 3a 00 67 73 67 83 .\WLS4csb.:.gsg. b880: 88 56 4c 53 54 5c 57 4c 53 34 00 62 a0 1e 92 94 .VLST\WLS4.b.... b890: 5c 57 4c 53 35 63 73 62 0d 3a 00 67 73 67 83 88 \WLS5csb.:.gsg.. b8a0: 56 4c 53 54 5c 57 4c 53 35 00 62 a0 1e 92 94 5c VLST\WLS5.b....\ b8b0: 57 4c 53 36 63 73 62 0d 3a 00 67 73 67 83 88 56 WLS6csb.:.gsg..V b8c0: 4c 53 54 5c 57 4c 53 36 00 62 a0 1e 92 94 5c 57 LST\WLS6.b....\W b8d0: 4c 53 37 63 73 62 0d 3a 00 67 73 67 83 88 56 4c LS7csb.:.gsg..VL b8e0: 53 54 5c 57 4c 53 37 00 62 a0 1e 92 94 5c 57 4c ST\WLS7.b....\WL b8f0: 53 38 63 73 62 0d 3a 00 67 73 67 83 88 56 4c 53 S8csb.:.gsg..VLS b900: 54 5c 57 4c 53 38 00 62 a0 1e 92 94 5c 57 4c 53 T\WLS8.b....\WLS b910: 39 63 73 62 0d 3a 00 67 73 67 83 88 56 4c 53 54 9csb.:.gsg..VLST b920: 5c 57 4c 53 39 00 62 a0 1e 92 94 5c 57 4c 53 41 \WLS9.b....\WLSA b930: 63 73 62 0d 3a 00 67 73 67 83 88 56 4c 53 54 5c csb.:.gsg..VLST\ b940: 57 4c 53 41 00 62 a0 1e 92 94 5c 57 4c 53 42 63 WLSA.b....\WLSBc b950: 73 62 0d 3a 00 67 73 67 83 88 56 4c 53 54 5c 57 sb.:.gsg..VLST\W b960: 4c 53 42 00 62 a0 1e 92 94 5c 57 4c 53 43 63 73 LSB.b....\WLSCcs b970: 62 0d 3a 00 67 73 67 83 88 56 4c 53 54 5c 57 4c b.:.gsg..VLST\WL b980: 53 43 00 62 a0 1e 92 94 5c 57 4c 53 44 63 73 62 SC.b....\WLSDcsb b990: 0d 3a 00 67 73 67 83 88 56 4c 53 54 5c 57 4c 53 .:.gsg..VLST\WLS b9a0: 44 00 62 70 62 67 5b 27 4d 57 4d 49 a4 67 14 47 D.bpbg['MWMI.g.G b9b0: 05 57 4d 41 31 03 5b 23 4d 57 4d 49 ff ff a0 0a .WMA1.[#MWMI.... b9c0: 93 87 6a 0a 00 70 0a 02 60 a1 2d 70 43 41 52 47 ..j..p..`.-pCARG b9d0: 6a 60 a0 24 93 60 0a 00 70 57 53 45 54 49 54 45 j`.$.`..pWSETITE b9e0: 4d 56 53 45 4c 60 a0 10 93 60 0a 00 70 5c 57 4d MVSEL`...`..p\WM b9f0: 49 53 0a 01 0a 00 60 5b 27 4d 57 4d 49 a4 83 88 IS....`['MWMI... ba00: 52 45 54 4e 60 00 14 42 05 57 4d 41 32 03 5b 23 RETN`..B.WMA2.[# ba10: 4d 57 4d 49 ff ff 70 43 41 52 47 6a 60 a0 2c 93 MWMI..pCARGj`.,. ba20: 60 0a 00 a0 15 92 93 49 4c 45 4e 0a 00 70 43 50 `......ILEN..pCP ba30: 41 53 49 42 55 46 0a 00 60 a0 10 93 60 0a 00 70 ASIBUF..`...`..p ba40: 5c 57 4d 49 53 0a 02 0a 00 60 5b 27 4d 57 4d 49 \WMIS....`['MWMI ba50: a4 83 88 52 45 54 4e 60 00 14 42 05 57 4d 41 33 ...RETN`..B.WMA3 ba60: 03 5b 23 4d 57 4d 49 ff ff 70 43 41 52 47 6a 60 .[#MWMI..pCARGj` ba70: a0 2c 93 60 0a 00 a0 15 92 93 49 4c 45 4e 0a 00 .,.`......ILEN.. ba80: 70 43 50 41 53 49 42 55 46 0a 00 60 a0 10 93 60 pCPASIBUF..`...` ba90: 0a 00 70 5c 57 4d 49 53 0a 03 0a 00 60 5b 27 4d ..p\WMIS....`['M baa0: 57 4d 49 a4 83 88 52 45 54 4e 60 00 14 42 05 57 WMI...RETN`..B.W bab0: 4d 41 34 03 5b 23 4d 57 4d 49 ff ff 70 43 41 52 MA4.[#MWMI..pCAR bac0: 47 6a 60 a0 2c 93 60 0a 00 a0 15 92 93 49 4c 45 Gj`.,.`......ILE bad0: 4e 0a 00 70 43 50 41 53 49 42 55 46 0a 00 60 a0 N..pCPASIBUF..`. bae0: 10 93 60 0a 00 70 5c 57 4d 49 53 0a 04 0a 00 60 ..`..p\WMIS....` baf0: 5b 27 4d 57 4d 49 a4 83 88 52 45 54 4e 60 00 14 ['MWMI...RETN`.. bb00: 49 07 57 51 41 35 01 5b 23 4d 57 4d 49 ff ff 70 I.WQA5.[#MWMI..p bb10: 5c 57 4d 49 53 0a 05 0a 00 60 70 5c 57 53 50 4d \WMIS....`p\WSPM bb20: 88 50 43 46 47 0a 00 00 70 5c 57 53 50 53 88 50 .PCFG...p\WSPS.P bb30: 43 46 47 0a 04 00 70 5c 57 53 4d 4e 88 50 43 46 CFG...p\WSMN.PCF bb40: 47 0a 08 00 70 5c 57 53 4d 58 88 50 43 46 47 0a G...p\WSMX.PCFG. bb50: 0c 00 70 5c 57 53 45 4e 88 50 43 46 47 0a 10 00 ..p\WSEN.PCFG... bb60: 70 5c 57 53 4b 42 88 50 43 46 47 0a 14 00 5b 27 p\WSKB.PCFG...[' bb70: 4d 57 4d 49 a4 50 43 46 47 14 4d 05 57 4d 41 36 MWMI.PCFG.M.WMA6 bb80: 03 5b 23 4d 57 4d 49 ff ff a0 0a 93 87 6a 0a 00 .[#MWMI......j.. bb90: 70 0a 02 60 a1 33 70 43 41 52 47 6a 60 a0 2a 93 p..`.3pCARGj`.*. bba0: 60 0a 00 a0 13 92 93 49 4c 45 4e 0a 00 70 53 50 `......ILEN..pSP bbb0: 41 53 49 42 55 46 60 a0 10 93 60 0a 00 70 5c 57 ASIBUF`...`..p\W bbc0: 4d 49 53 0a 06 0a 00 60 5b 27 4d 57 4d 49 a4 83 MIS....`['MWMI.. bbd0: 88 52 45 54 4e 60 00 14 4c 0b 57 4d 41 37 03 a0 .RETN`..L.WMA7.. bbe0: 09 93 87 6a 0a 00 a4 0d 00 70 43 41 52 47 6a 60 ...j.....pCARGj` bbf0: a0 41 0a 93 60 0a 00 70 47 49 54 4d 49 42 55 46 .A..`..pGITMIBUF bc00: 49 54 45 4d 61 a0 07 93 61 ff a4 0d 00 70 83 88 ITEMa...a....p.. bc10: 49 54 45 4d 61 00 60 70 83 88 60 0a 00 00 61 a0 ITEMa.`p..`...a. bc20: 3f 95 61 0a 64 70 83 88 56 53 45 4c 61 00 63 70 ?.a.dp..VSELa.cp bc30: 83 88 63 0a 00 00 62 70 87 63 64 70 0a 01 65 a2 ..c...bp.cdp..e. bc40: 1f 95 65 64 70 83 88 63 65 00 66 a0 11 92 93 87 ..edp..ce.f..... bc50: 66 0a 00 73 62 0d 2c 00 67 73 67 66 62 75 65 a1 f..sb.,.gsgfbue. bc60: 32 70 83 88 56 4c 53 54 0a 00 00 62 70 87 56 4c 2p..VLST...bp.VL bc70: 53 54 64 70 0a 01 65 a2 1a 95 65 64 70 83 88 56 STdp..e...edp..V bc80: 4c 53 54 65 00 66 73 62 0d 2c 00 67 73 67 66 62 LSTe.fsb.,.gsgfb bc90: 75 65 a4 62 14 40 07 43 41 52 47 01 70 87 68 60 ue.b.@.CARG.p.h` bca0: a0 16 93 60 0a 00 70 0a 00 49 42 55 46 70 0a 00 ...`..p..IBUFp.. bcb0: 49 4c 45 4e a4 0a 00 a0 0a 92 93 8e 68 0a 02 a4 ILEN........h... bcc0: 0a 02 a0 09 92 95 60 0a ff a4 0a 02 70 68 49 42 ......`.....phIB bcd0: 55 46 76 60 70 83 88 49 42 55 46 60 00 61 a0 1a UFv`p..IBUF`.a.. bce0: 91 93 61 0a 3b 93 61 0a 2a 70 0a 00 88 49 42 55 ..a.;.a.*p...IBU bcf0: 46 60 00 70 60 49 4c 45 4e a1 08 70 87 68 49 4c F`.p`ILEN..p.hIL bd00: 45 4e a4 0a 00 14 41 07 53 43 4d 50 03 70 87 68 EN....A.SCMP.p.h bd10: 60 a0 08 93 60 0a 00 a4 0a 00 75 60 08 53 54 52 `...`.....u`.STR bd20: 31 11 02 60 70 68 53 54 52 31 76 60 70 0a 00 61 1..`phSTR1v`p..a bd30: 70 6a 62 a2 22 95 61 60 70 83 88 53 54 52 31 61 pjb.".a`p..STR1a bd40: 00 63 70 83 88 69 62 00 64 a0 08 92 93 63 64 a4 .cp..ib.d....cd. bd50: 0a 00 75 61 75 62 70 83 88 69 62 00 64 a0 08 93 ..uaubp..ib.d... bd60: 64 0a 00 a4 0a 01 a0 0d 91 93 64 0a 2c 93 64 0a d.........d.,.d. bd70: 3a a4 0a 01 a4 0a 00 14 2f 47 49 54 4d 02 70 0a :......./GITM.p. bd80: 00 60 70 87 69 61 a2 1e 95 60 61 70 83 88 83 88 .`p.ia...`ap.... bd90: 69 60 00 0a 01 00 63 a0 0b 53 43 4d 50 63 68 0a i`....c..SCMPch. bda0: 00 a4 60 75 60 a4 ff 14 29 47 53 45 4c 03 70 0a ..`u`...)GSEL.p. bdb0: 00 60 70 87 68 61 a2 18 95 60 61 70 83 88 68 60 .`p.ha...`ap..h` bdc0: 00 62 a0 0a 53 43 4d 50 62 69 6a a4 60 75 60 a4 .b..SCMPbij.`u`. bdd0: ff 14 10 53 4c 45 4e 02 70 83 88 68 69 00 60 a4 ...SLEN.p..hi.`. bde0: 87 60 14 16 43 4c 52 50 00 70 0a 00 5c 57 50 41 .`..CLRP.p..\WPA bdf0: 53 70 0a 00 5c 57 50 4e 57 14 4c 04 47 50 41 53 Sp..\WPNW.L.GPAS be00: 02 70 69 60 70 0a 00 61 a2 31 92 94 61 0a 80 70 .pi`p..a.1..a..p be10: 83 88 68 60 00 62 a0 16 91 93 62 0a 2c 93 62 0a ..h`.b....b.,.b. be20: 00 70 0a 00 88 50 53 54 52 61 00 a4 61 70 62 88 .p...PSTRa..apb. be30: 50 53 54 52 61 00 75 60 75 61 70 0a 00 88 50 53 PSTRa.u`uap...PS be40: 54 52 61 00 a4 ff 14 43 09 43 50 41 53 02 43 4c TRa....C.CPAS.CL be50: 52 50 70 69 60 70 47 50 41 53 68 60 61 a0 07 93 RPpi`pGPASh`a... be60: 61 ff a4 0a 02 a0 08 93 61 0a 00 a4 0a 02 70 50 a.......a.....pP be70: 53 54 52 5c 57 50 41 53 72 60 61 60 75 60 70 47 STR\WPASr`a`u`pG be80: 53 45 4c 50 45 4e 43 68 60 66 a0 07 93 66 ff a4 SELPENCh`f...f.. be90: 0a 02 70 66 5c 57 45 4e 43 a0 3d 93 66 0a 00 72 ..pf\WENC.=.f..r bea0: 60 53 4c 45 4e 50 45 4e 43 0a 00 60 a0 0d 92 93 `SLENPENC..`.... beb0: 83 88 68 60 00 0a 2c a4 0a 02 75 60 70 47 53 45 ..h`..,...u`pGSE bec0: 4c 50 4b 42 44 68 60 66 a0 07 93 66 ff a4 0a 02 LPKBDh`f...f.... bed0: 70 66 5c 57 4b 42 44 a4 0a 00 14 4e 0f 53 50 41 pf\WKBD....N.SPA bee0: 53 01 43 4c 52 50 70 47 53 45 4c 50 54 59 50 68 S.CLRPpGSELPTYPh bef0: 0a 00 66 a0 07 93 66 ff a4 0a 02 70 66 5c 57 50 ..f...f....pf\WP bf00: 54 59 70 53 4c 45 4e 50 54 59 50 66 60 a0 0d 92 TYpSLENPTYPf`... bf10: 93 83 88 68 60 00 0a 2c a4 0a 02 75 60 70 47 50 ...h`..,...u`pGP bf20: 41 53 68 60 61 a0 0c 91 93 61 ff 93 61 0a 00 a4 ASh`a....a..a... bf30: 0a 02 70 50 53 54 52 5c 57 50 41 53 72 60 61 60 ..pPSTR\WPASr`a` bf40: a0 0d 92 93 83 88 68 60 00 0a 2c a4 0a 02 75 60 ......h`..,...u` bf50: 70 47 50 41 53 68 60 61 a0 07 93 61 ff a4 0a 02 pGPASh`a...a.... bf60: a0 0c 93 61 0a 00 70 0a 00 50 53 54 52 70 50 53 ...a..p..PSTRpPS bf70: 54 52 5c 57 50 4e 57 72 60 61 60 75 60 70 47 53 TR\WPNWr`a`u`pGS bf80: 45 4c 50 45 4e 43 68 60 66 a0 07 93 66 ff a4 0a ELPENCh`f...f... bf90: 02 70 66 5c 57 45 4e 43 a0 3d 93 66 0a 00 72 60 .pf\WENC.=.f..r` bfa0: 53 4c 45 4e 50 45 4e 43 0a 00 60 a0 0d 92 93 83 SLENPENC..`..... bfb0: 88 68 60 00 0a 2c a4 0a 02 75 60 70 47 53 45 4c .h`..,...u`pGSEL bfc0: 50 4b 42 44 68 60 66 a0 07 93 66 ff a4 0a 02 70 PKBDh`f...f....p bfd0: 66 5c 57 4b 42 44 a4 0a 00 14 4b 48 57 53 45 54 f\WKBD....KHWSET bfe0: 02 70 49 4c 45 4e 60 75 60 70 47 49 54 4d 49 42 .pILEN`u`pGITMIB bff0: 55 46 68 61 a0 07 93 61 ff a4 0a 02 70 61 5c 57 UFha...a....pa\W c000: 49 54 4d 70 83 88 68 61 00 63 70 83 88 63 0a 01 ITMp..ha.cp..c.. c010: 00 64 70 87 64 62 75 62 70 83 88 63 0a 00 00 64 .dp.dbubp..c...d c020: a0 3a 95 64 0a 64 70 83 88 69 64 00 65 70 47 53 .:.d.dp..id.epGS c030: 45 4c 65 49 42 55 46 62 66 a0 07 93 66 ff a4 0a ELeIBUFbf...f... c040: 02 70 66 5c 57 53 45 4c 72 62 53 4c 45 4e 65 66 .pf\WSELrbSLENef c050: 62 70 83 88 49 42 55 46 62 00 64 a1 46 3e 70 0a bp..IBUFb.d.F>p. c060: 3f 5c 57 4c 53 30 70 0a 3f 5c 57 4c 53 31 70 0a ?\WLS0p.?\WLS1p. c070: 3f 5c 57 4c 53 32 70 0a 3f 5c 57 4c 53 33 70 0a ?\WLS2p.?\WLS3p. c080: 3f 5c 57 4c 53 34 70 0a 3f 5c 57 4c 53 35 70 0a ?\WLS4p.?\WLS5p. c090: 3f 5c 57 4c 53 36 70 0a 3f 5c 57 4c 53 37 70 0a ?\WLS6p.?\WLS7p. c0a0: 3f 5c 57 4c 53 38 70 0a 3f 5c 57 4c 53 39 70 0a ?\WLS8p.?\WLS9p. c0b0: 3f 5c 57 4c 53 41 70 0a 3f 5c 57 4c 53 42 70 0a ?\WLSAp.?\WLSBp. c0c0: 3f 5c 57 4c 53 43 70 0a 3f 5c 57 4c 53 44 70 47 ?\WLSCp.?\WLSDpG c0d0: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... c0e0: 66 ff a4 0a 02 70 66 5c 57 4c 53 30 72 62 53 4c f....pf\WLS0rbSL c0f0: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb c100: 00 64 a0 3f 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.?..b`.d.:ubpG c110: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... c120: 66 ff a4 0a 02 70 66 5c 57 4c 53 31 72 62 53 4c f....pf\WLS1rbSL c130: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb c140: 00 64 a0 3f 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.?..b`.d.:ubpG c150: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... c160: 66 ff a4 0a 02 70 66 5c 57 4c 53 32 72 62 53 4c f....pf\WLS2rbSL c170: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb c180: 00 64 a0 3f 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.?..b`.d.:ubpG c190: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... c1a0: 66 ff a4 0a 02 70 66 5c 57 4c 53 33 72 62 53 4c f....pf\WLS3rbSL c1b0: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb c1c0: 00 64 a0 3f 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.?..b`.d.:ubpG c1d0: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... c1e0: 66 ff a4 0a 02 70 66 5c 57 4c 53 34 72 62 53 4c f....pf\WLS4rbSL c1f0: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb c200: 00 64 a0 3f 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.?..b`.d.:ubpG c210: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... c220: 66 ff a4 0a 02 70 66 5c 57 4c 53 35 72 62 53 4c f....pf\WLS5rbSL c230: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb c240: 00 64 a0 3f 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.?..b`.d.:ubpG c250: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... c260: 66 ff a4 0a 02 70 66 5c 57 4c 53 36 72 62 53 4c f....pf\WLS6rbSL c270: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb c280: 00 64 a0 3f 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.?..b`.d.:ubpG c290: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... c2a0: 66 ff a4 0a 02 70 66 5c 57 4c 53 37 72 62 53 4c f....pf\WLS7rbSL c2b0: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb c2c0: 00 64 a0 3f 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.?..b`.d.:ubpG c2d0: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... c2e0: 66 ff a4 0a 02 70 66 5c 57 4c 53 38 72 62 53 4c f....pf\WLS8rbSL c2f0: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb c300: 00 64 a0 3f 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.?..b`.d.:ubpG c310: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... c320: 66 ff a4 0a 02 70 66 5c 57 4c 53 39 72 62 53 4c f....pf\WLS9rbSL c330: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb c340: 00 64 a0 3f 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.?..b`.d.:ubpG c350: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... c360: 66 ff a4 0a 02 70 66 5c 57 4c 53 41 72 62 53 4c f....pf\WLSArbSL c370: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb c380: 00 64 a0 3f 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.?..b`.d.:ubpG c390: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... c3a0: 66 ff a4 0a 02 70 66 5c 57 4c 53 42 72 62 53 4c f....pf\WLSBrbSL c3b0: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb c3c0: 00 64 a0 3f 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.?..b`.d.:ubpG c3d0: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... c3e0: 66 ff a4 0a 02 70 66 5c 57 4c 53 43 72 62 53 4c f....pf\WLSCrbSL c3f0: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb c400: 00 64 a0 3f 90 95 62 60 93 64 0a 3a 75 62 70 47 .d.?..b`.d.:ubpG c410: 53 45 4c 56 4c 53 54 49 42 55 46 62 66 a0 07 93 SELVLSTIBUFbf... c420: 66 ff a4 0a 02 70 66 5c 57 4c 53 44 72 62 53 4c f....pf\WLSDrbSL c430: 45 4e 56 4c 53 54 66 62 70 83 88 49 42 55 46 62 ENVLSTfbp..IBUFb c440: 00 64 a0 1f 90 93 64 0a 2c 95 62 60 75 62 70 43 .d....d.,.b`ubpC c450: 50 41 53 49 42 55 46 62 60 a0 08 92 93 60 0a 00 PASIBUFb`....`.. c460: a4 60 a4 0a 00 08 57 51 42 41 11 42 8a 0b 9d 08 .`....WQBA.B.... c470: 46 4f 4d 42 01 00 00 00 8d 08 00 00 f2 36 00 00 FOMB.........6.. c480: 44 53 00 01 1a 7d da 54 a8 c9 9a 00 01 06 18 42 DS...}.T.......B c490: 10 13 10 0a 0d 21 02 0b 83 50 4c 18 14 a0 45 41 .....!...PL...EA c4a0: c8 05 14 95 02 21 c3 02 14 0b 70 2e 40 ba 00 e5 .....!....p.@... c4b0: 28 72 0c 22 02 f7 ef 0f 31 0e 88 14 40 48 26 84 (r."....1...@H&. c4c0: 44 00 53 21 70 84 a0 5f 01 08 1d a2 c9 a0 00 a7 D.S!p.._........ c4d0: 08 82 b4 65 01 ba 05 f8 16 a0 1d 42 68 15 0a 30 ...e.......Bh..0 c4e0: 29 c0 27 98 2c 0a 90 0d 26 db 70 64 18 4c e4 18 ).'.,...&.pd.L.. c4f0: 50 62 c6 80 d2 39 05 d9 04 16 74 a1 28 9a 46 94 Pb...9....t.(.F. c500: 04 07 75 0c 11 82 97 2b 40 f2 04 a4 79 5e b2 3e ..u....+@...y^.> c510: 08 0d 81 8d 80 47 91 00 c2 62 2c 53 e2 61 50 1e .....G...b,S.aP. c520: 40 24 67 a8 28 60 7b 9d 88 86 75 9c 4c 12 1c 6a @$g.(`{...u.L..j c530: 94 96 28 c0 fc c8 34 91 63 6b 7a c4 82 64 d2 86 ..(...4.ckz..d.. c540: 82 1a ba a7 75 52 9e 68 c4 83 32 4c 02 8f 82 a1 ....uR.h..2L.... c550: 71 82 b2 20 e4 60 a0 28 c0 93 f0 1c 8b 17 20 7c q.. .`.(...... | c560: c6 e4 28 10 23 81 8f 04 1e cd 31 63 81 c2 05 3c ..(.#.....1c...< c570: 9f 63 88 1c f7 50 63 1c 45 e4 04 ef 00 51 8c 56 .c...Pc.E....Q.V c580: d0 bc 85 18 2c 9a c1 7a 06 27 83 4e f0 ff 3f 02 ....,..z.'.N..?. c590: 2e 03 42 1e 05 58 1d 94 a6 61 82 ee 05 bc 1a 1a ..B..X...a...... c5a0: 13 a0 11 43 ca 04 38 bb 2f 68 46 6d 09 30 27 40 ...C..8./hFm.0'@ c5b0: 9b 00 6f 08 42 39 cf 28 c7 72 8a 51 1e 06 62 be ..o.B9.(.r.Q..b. c5c0: 0c 04 8d 12 23 e6 b9 c4 35 6c 84 18 21 4f 21 50 ....#...5l..!O!P c5d0: dc f6 07 41 06 8d 1b bd 4f 0b 67 75 02 47 ff a4 ...A....O.gu.G.. c5e0: 60 02 4f f9 c0 9e 0d 4e e0 58 a3 c6 38 95 04 8e `.O....N.X..8... c5f0: fd 80 90 06 10 45 82 47 9d 16 7c 2e f0 d0 0e da .....E.G..|..... c600: 73 3c 81 20 87 70 04 4f 0c 0f 04 1e 03 bb 29 f8 s<. .p.O......). c610: 08 e0 13 02 de 35 a0 ae 06 0f 06 6c d0 e1 30 e3 .....5.....l..0. c620: f5 f0 c3 9d c0 49 3e 60 f0 c3 86 07 87 9b e7 c9 .....I>`........ c630: 1c 59 a9 02 cc 1e 0e 74 90 f0 69 83 9d 01 30 f2 .Y.....t..i...0. c640: 07 81 1a 99 a1 3d ee 97 0e 43 3e 27 1c 16 13 7b .....=...C>'...{ c650: ea a0 e3 01 ff 65 e4 39 c3 d3 f7 7c 4d 30 ec c0 .....e.9...|M0.. c660: d1 03 31 f4 c3 c6 61 9c 86 ef 1f 3e 2f c0 38 05 ..1...a....>/.8. c670: 78 e4 fe ff 1f 52 7c 9a e0 47 0b 9f 26 d8 f5 e0 x....R|..G..&... c680: 34 9e 03 3c 9c b3 f2 61 02 6c f7 13 36 a2 77 0b 4..<...a.l..6.w. c690: 8f 06 7b 0a 00 df f9 05 9c 77 0d 36 58 18 e7 17 ..{......w.6X... c6a0: e0 71 42 f0 10 f8 41 c2 43 e0 03 78 fe 38 43 2b .qB...A.C..x.8C+ c6b0: 9d 17 72 60 f0 ce 39 30 46 c1 f3 3c 36 4c a0 20 ..r`..90F..<6L. c6c0: af 01 85 7a 16 50 18 9f 6a 80 d7 ff ff 54 03 5c ...z.P..j....T.\ c6d0: 0e 07 b8 93 03 dc 7b 01 bb 38 3c d7 c0 15 7d ae ......{..8<...}. c6e0: 81 7a 6f 29 6e 8c ba c6 04 79 14 78 a4 89 f2 3c .zo)n....y.x...< c6f0: f3 2e 13 e1 d9 c6 d7 1a 4f 21 8e af 35 46 7c 99 ........O!..5F|. c700: 78 b7 31 ee c1 3d d6 3c e4 18 e4 68 22 bc 18 04 x.1..=.<...h"... c710: 7c bc f1 b1 06 bc 62 5e 28 b2 70 ac 01 34 fe ff |.....b^(.p..4.. c720: 8f 35 c0 0d eb 01 05 7c 47 06 76 43 81 77 42 01 .5.....|G.vC.wB. c730: fc 24 7e 01 e8 c8 e1 b4 20 b2 f1 06 f0 29 80 aa .$~..... ....).. c740: 01 d2 34 61 13 4c 4f 2e 78 1f 09 9c 9b 44 c9 87 ..4a.LO.x....D.. c750: 45 e1 9c f5 20 42 41 0c e8 20 c7 09 f4 19 c5 07 E... BA.. ...... c760: 91 13 7d 22 f4 a0 3c 8c 77 14 76 02 f1 61 c2 63 ..}"..<.w.v..a.c c770: f7 31 81 ff 63 3c 1b a3 5b 0d 86 fe ff e7 14 0e .1..c<..[....... c780: e6 83 08 27 a8 eb 26 01 32 7d 47 05 50 00 f9 5e ...'..&.2}G.P..^ c790: e0 73 c0 b3 01 1b c3 a3 80 d1 8c ce c3 4f 16 15 .s...........O.. c7a0: 77 b2 14 c4 93 75 94 c9 a2 67 e2 7b 85 67 f4 a6 w....u...g.{.g.. c7b0: e5 39 7a c2 be 87 c0 3a 0c 84 7c 30 f0 34 0c e7 .9z....:..|0.4.. c7c0: c9 72 38 4f 96 8f c5 d7 10 f0 09 9c 2d c8 e1 31 .r8O........-..1 c7d0: b1 46 45 af 42 1e 1e bf 1c 78 3e cf 08 47 f9 24 .FE.B....x>..G.$ c7e0: 81 c3 78 26 f1 10 7d 2b 82 35 91 93 f6 6d e1 64 ..x&..}+.5...m.d c7f0: 83 be 9e 61 6e 45 b0 ff ff b7 22 38 17 34 98 99 ...anE...."8.4.. c800: ee 55 a8 58 f7 2a 40 ec b0 5e 7b 7c b0 82 7b af .U.X.*@..^{|..{. c810: 82 7b a9 7a 56 38 c6 f0 0f 53 31 4e e9 b5 d3 40 .{.zV8...S1N...@ c820: 61 a2 c4 7b af f2 18 df ab d8 15 2a 4c ac 97 2b a..{.......*L..+ c830: a3 be 4e 84 0b 14 24 d2 ab 55 94 c8 f1 0d f9 5e ..N...$..U.....^ c840: 05 5e 39 f7 2a 90 fd ff ef 55 80 79 b4 f7 2a 30 .^9.*....U.y..*0 c850: 5e 1b d8 0d 09 16 d0 8b 15 60 28 f3 c5 8a e6 bd ^........`(..... c860: 58 21 fe ff e7 12 a6 e7 62 45 e6 09 ff 66 05 70 X!......bE...f.p c870: fa ff 7f b3 02 8c dd 8b 30 47 2b 78 29 6f 56 34 ........0G+x)oV4 c880: ce 32 14 70 41 14 c6 37 2b c0 d1 75 05 37 64 b8 .2.pA..7+..u.7d. c890: 60 51 82 f9 10 e2 e9 1c f1 43 c2 4b c0 63 8e 07 `Q.......C.K.c.. c8a0: fc 40 e0 cb 15 98 fe ff 04 3e f9 9e e5 db d4 7b .@.......>.....{ c8b0: 2f 3f 60 bd 57 f9 f0 1b eb 9d e1 e5 ca 23 89 72 /?`.W........#.r c8c0: 12 a1 7c b7 7a af 32 4a c4 17 62 9f 82 0d 6d 94 ..|.z.2J..b...m. c8d0: a7 8a e8 c6 7b b9 02 af a4 cb 15 40 93 e1 bf 5c ....{......@...\ c8e0: 81 ef e6 80 bd 26 c1 f9 ff 5f 93 f8 f5 0a f0 93 .....&..._...... c8f0: fd 7a 45 73 5f af 50 a2 20 a4 08 48 33 05 cf fd .zEs_.P. ..H3... c900: 0a e0 c4 ff ff 7e 05 58 0e 77 bf 02 7a b7 23 f0 .....~.X.w..z.#. c910: a2 bc 1d 61 af 58 f8 8c 57 2c 1a 66 25 8a b7 26 ...a.X..W,.f%..& c920: 0a e3 2b 16 30 f9 ff 5f b1 80 d9 41 14 37 6a b8 ..+.0.._...A.7j. c930: 17 27 df 7a 3c df 88 be c3 60 4e 58 30 6e 58 f0 .'.z<....`NX0nX. c940: 87 f4 30 ec 93 c4 3b 96 8f 56 06 79 03 7e b2 7a ..0...;..V.y.~.z c950: b0 8a 62 84 80 c7 f3 2e ec a3 d5 9b 96 51 62 c7 ..b..........Qb. c960: f2 85 ea 59 cb d7 2c 43 c4 7d 20 f6 0d 0b b0 fd ...Y..,C.} ..... c970: ff bf 61 01 8e 2e 0e fc e0 80 bd 61 01 3e 67 0a ..a........a.>g. c980: 9e 1b 16 b0 f9 ff df b0 00 fe ff ff 6f 58 c0 e1 ............oX.. c990: 76 85 bd 65 61 6f 2f 64 15 34 d4 4a 14 fc 7b 65 v..eao/d.4.J..{e c9a0: 18 7a c3 02 1c 8d db a3 06 c7 d9 e0 49 02 73 ae .z..........I.s. c9b0: c6 cd e6 e0 02 47 e8 1d 54 73 67 97 14 18 b7 2c .....G..Tsg...., c9c0: b8 97 aa 87 86 28 07 f1 2a fc 60 f5 28 75 64 8f .....(..*.`.(ud. c9d0: 57 4f c3 3e 66 f9 96 65 a8 08 6f 59 ec 0c 11 2f WO.>f..e..oY.../ c9e0: 56 94 10 ef 15 a1 7d e7 32 f8 a3 b1 51 83 be 1c V.....}.2...Q... c9f0: bf 65 c1 fb ff df b2 e0 8b fc ab e8 44 e0 5b 16 .e..........D.[. ca00: c0 8f 60 10 72 32 70 f4 79 01 3f 80 87 11 0f 89 ..`.r2p.y.?..... ca10: 05 18 38 bd 2f f9 4c c1 0f 18 3e 53 b0 eb 41 f4 ..8./.L...>S..A. ca20: c7 00 9f 4b 30 83 03 ff b5 e2 d0 3d 8a d7 07 13 ...K0......=.... ca30: 78 70 fc ff 3f 38 b8 77 86 23 f2 1d c6 83 03 db xp..?8.w.#...... ca40: 41 00 38 0c 0e 1f 6a 70 e8 f1 18 38 a4 cf 63 ec A.8...jp...8..c. ca50: c2 f0 90 e3 a1 81 0d d0 43 03 96 93 78 0a 39 34 ........C...x.94 ca60: 30 4b 18 1a 50 8a 37 34 fa ff 1f 1a 1f 92 0f 0b 0K..P.74........ ca70: 31 9f 72 22 bc 2f f8 04 c5 d0 5f 53 7c bb f0 4d 1.r"./...._S|..M ca80: 10 37 3e 70 5d 3a 3d 3e e0 73 e4 f2 f8 70 47 27 .7>p]:=>.s...pG' ca90: 8f 0f 86 cb ab 0c 39 9a f8 68 c5 86 07 b6 9b 9e ......9..h...... caa0: 87 07 7c ae 9b 60 bc 42 f2 6b 09 8c 13 14 fe ba ..|..`.B.k...... cab0: 09 de ff ff 75 13 78 8e 82 6b bd 64 d3 20 af 1c ....u.x..k.d. .. cac0: c5 7a 11 50 18 9f d9 00 47 63 7d 66 03 cb bd 80 .z.P....Gc}f.... cad0: dd d8 e0 9e d6 60 df 1d 1e ce 1e d3 1e d5 1e d0 .....`.......... cae0: 7c c4 8e f1 96 16 24 4e 84 d7 81 a7 35 5f 32 e2 |.....$N....5_2. caf0: 05 7a 5a 33 46 9c 97 36 23 be 52 84 78 58 f3 c9 .zZ3F..6#.R.xX.. cb00: cd 78 0f 13 e1 c2 bc b0 3d ad 81 e3 ff 7f 5a 83 .x......=.....Z. cb10: 23 e7 8a 0d d0 e4 a2 8f 3b a4 80 e5 da c0 6e 29 #.......;.....n) cb20: f0 2e d8 c0 f9 ff 7f 44 01 5f 96 0b 36 cd 71 c1 .......D._..6.q. cb30: 46 71 58 0d 90 e6 09 ff 7a 0d fe 49 f8 7a 0d d8 FqX.....z..I.z.. cb40: be c5 e2 ae d7 c0 ea ff 7f bd 06 96 82 47 4a ef .............GJ. cb50: d4 e0 ba 69 e3 41 df b4 61 0a be 45 d1 28 e4 8a ...i.A..a..E.(.. cb60: b6 10 0a e3 5b 14 e0 08 fb 2d 0a 2c 17 a7 b7 28 ....[....-.,...( cb70: fc 0c 3c 68 df 75 18 a6 ef d0 f0 4f 4d cf 4d 0f ..H.p......^.. cb90: d4 6b 94 2f 30 c7 10 31 ca cb b4 21 e2 f9 d4 e4 .k./0..1...!.... cba0: b3 42 dc 10 0f d1 46 88 fa 3c ed 09 bd 46 81 57 .B....F..<...F.W cbb0: d0 35 0a a0 c9 fd 08 77 8d 02 cb bd 81 9d 87 f8 .5.....w........ cbc0: 95 c8 d7 06 18 f7 28 38 ff ff 7b 14 60 23 cc 3d ......(8..{.`#.= cbd0: 8a 06 b9 47 a1 4e 26 be d4 79 a2 e0 08 7f 91 42 ...G.N&..y.....B cbe0: c5 26 51 e8 c3 10 2a e6 61 84 82 18 d0 19 4e 14 .&Q...*.a.....N. cbf0: 68 15 27 0a 72 8b f1 a4 1e a3 00 5f cb f4 50 79 h.'.r......_..Py cc00: e4 a1 52 10 0f d5 71 86 8a 9e a4 e7 8f f9 ff 1f ..R...q......... cc10: 1c b0 07 29 80 17 0a 6d fa d4 68 d4 aa 41 99 1a ...)...m..h..A.. cc20: 65 1a d4 ea 53 a9 31 63 e7 50 4b 3b 4b 50 31 8b e...S.1c.PK;KP1. cc30: d1 68 1c 05 84 ca fe 9b 0b c4 21 9f 3a 02 74 b0 .h........!.:.t. cc40: 17 95 80 2c 6b 6d 02 71 7c 13 10 8d 80 48 cb 63 ...,km.q|....H.c cc50: 42 40 ce 0d 22 20 ab 58 93 80 ac f9 01 23 70 eb B@.." .X.....#p. cc60: d4 01 c4 52 82 d0 44 0b 17 a8 e3 81 68 30 84 46 ...R..D.....h0.F cc70: 40 0e 46 21 20 cb f8 74 0b dc 02 ac 00 31 f9 20 @.F! ..t.....1. cc80: 54 b0 17 50 a6 1e 44 40 56 ba 56 01 59 37 88 80 T..P..D@V.V.Y7.. cc90: fe ff 2f 83 32 03 ce 32 ba 01 62 0a 1f 0a 02 b1 ../.2..2..b..... cca0: 26 3d a0 4c 20 88 ae 1c c4 0f 10 93 06 22 20 c7 &=.L ........" . ccb0: 39 98 08 dc 71 14 01 52 47 c3 a5 20 54 fc f3 44 9...q..RG.. T..D ccc0: 20 16 64 09 8c 82 d0 08 9a 40 98 3c 4f 20 2c d4 .d......@..x....Q d1f0: b8 80 e7 73 0c 91 e3 1e 6a 8c a3 88 7c 38 0c ed ...s....j...|8.. d200: 74 e3 1c d8 e9 14 04 2e 90 60 3d cf 59 20 ff ff t........`=.Y .. d210: 18 07 c1 f0 8e 01 23 03 42 1e 05 58 1d 96 26 91 ......#.B..X..&. d220: c0 ee 05 68 bc 04 48 e1 20 a5 0c 42 30 8d 09 b0 ...h..H. ..B0... d230: 75 68 90 37 01 d6 ae 02 42 89 74 02 71 42 44 89 uh.7....B.t.qBD. d240: 18 d4 40 51 6a 43 15 4c 67 c3 13 66 dc 10 31 0c ..@QjC.Lg..f..1. d250: 14 b7 fd 41 90 61 e3 c6 ef 41 9d d6 d9 1d d3 ab ...A.a...A...... d260: 82 09 3c e9 37 84 a7 83 a3 38 da a8 31 9a 23 65 ..<.7....8..1.#e d270: ab d6 b9 c2 91 e0 51 e7 05 9f 0c 3c b4 c3 f6 60 ......Q....<...` d280: cf d2 43 38 82 67 86 47 02 8f 81 dd 15 7c 08 f0 ..C8.g.G.....|.. d290: 19 01 ef 1a 50 97 83 47 03 36 e9 70 98 f1 7a ee ....P..G.6.p..z. d2a0: 9e ba cf 18 fc bc e1 c1 e1 46 7a 32 47 56 aa 00 .........Fz2GV.. d2b0: b3 d7 00 1d 25 7c e0 60 77 81 a7 00 13 58 fe 20 ....%|.`w....X. d2c0: 50 23 33 b4 c7 fb de 61 c8 27 85 c3 62 62 0f 1e P#3....a.'..bb.. d2d0: 74 3c e0 bf 8f 3c 69 78 fa 9e af 09 06 86 90 95 t<.....y./.o.& d320: 88 f6 10 03 c6 19 e1 ce 1b 70 4e 31 c0 03 ea 10 .........pN1.... d330: 30 87 09 0f 81 0f e0 19 e4 1c 7d cc 39 33 dc 71 0.........}.93.q d340: 07 6c c3 e0 91 2d 80 b0 38 4f 02 05 7c 1b 50 18 .l...-..8O..|.P. d350: 1f 6e c0 fb ff 3f dc 00 d7 f3 01 ee f8 00 f7 62 .n...?.........b d360: c1 0e 0f 8f 37 c0 60 48 8f 34 6f 35 31 5e 6d 42 ....7.`H.4o51^mB d370: 44 78 a8 79 b7 31 52 bc c7 1b 76 8d 39 8b 07 90 Dx.y.1R...v.9... d380: 28 c5 a1 e9 62 13 23 ca 9b 8d 61 df 74 0c 14 2a (...b.#...a.t..* d390: 52 84 30 2f 16 21 1e 6f c0 2c e9 a5 a2 cf 81 8f R.0/.!.o.,...... d3a0: 37 80 97 ff ff f1 06 f0 30 0c 1f 53 c0 76 73 60 7.......0..S.vs` d3b0: f7 14 f8 e7 14 c0 91 90 47 80 0e 1e 16 01 22 1b ........G.....". d3c0: cf 00 9f 89 a8 40 2a cd 14 2c e3 14 ac 4e 88 5c .....@*..,...N.\ d3d0: 06 85 44 40 68 64 86 f3 21 d1 60 06 f1 f9 c0 67 ..D@hd..!.`....g d3e0: 0a 9f 9c f8 ff ff e4 04 9e 83 c9 43 05 2c 44 9f ...........C.,D. d3f0: 16 38 9c cf 2c 1c ce 47 12 7e 80 e4 47 25 70 09 .8..,..G.~..G%p. d400: 3c 34 80 02 c8 f7 03 9f 03 9e 11 d8 1c 1e 09 7c <4.............| d410: 20 60 f0 3c da a8 e8 d1 c6 c3 e3 47 06 cf e7 81 `.<.......G.... d420: e0 28 1f 09 70 18 ef 17 1e a2 4f 39 b0 26 72 d4 .(..p.....O9.&r. d430: 16 7d 22 10 e8 33 17 e6 94 03 9c 82 8f 1e 15 f5 .}"..3.......... d440: 40 0a da 93 82 cf 0a 3e 7c c1 ff ff 1f be e0 cc @......>|....... d450: eb 65 cd 07 8e 38 67 71 ba ef 16 f8 13 29 30 0b .e...8gq.....)0. d460: 72 22 45 c1 f8 44 0a d8 bc 05 60 af 0b 4f 22 30 r"E..D....`..O"0 d470: ce 11 cf 58 30 0f 55 a7 f8 52 f5 c6 10 e1 c9 ea ...X0.U..R...... d480: 35 ea 01 cb 60 2f 02 86 79 c5 f2 e9 2a c4 03 96 5...`/..y...*... d490: cf 5a d1 42 84 8c 12 ec 15 eb 55 c6 47 2a 83 07 .Z.B......U.G*.. d4a0: 0c 1b 2d 52 84 47 2c fc ff ff 88 05 1e 09 07 52 ..-R.G,........R d4b0: 80 2a 03 c7 1d 48 81 fd 69 02 7f bd f0 78 b0 ff .*...H..i....x.. d4c0: ff 73 00 f8 0e 31 c0 60 c0 30 0e 31 c0 43 f0 c9 .s...1.`.0.1.C.. d4d0: 0c f4 c7 1d f8 e3 e0 19 9f 1c 26 50 98 13 29 0a ..........&P..). d4e0: c6 27 52 c0 d9 ff ff 70 05 86 e3 0d f8 6f 33 3e .'R....p.....o3> d4f0: 84 fa 7c e3 0b a9 21 5e 6c de d4 5e 09 5e df d9 ..|...!^l..^.^.. d500: b5 e6 f5 dd a7 82 27 d1 08 21 a3 bc e4 18 24 c4 ......'..!....$. d510: eb a8 01 83 05 89 78 0a 4f 3b 8f 37 e0 15 75 20 ......x.O;.7..u d520: 05 e8 f1 ff 3f 90 02 83 7b 0a ec 73 0a e0 29 f9 ....?...{..s..). d530: 89 94 a6 3e 91 a2 15 01 69 aa 60 21 98 fe 44 4a ...>....i.`!..DJ d540: 0f 06 ce 4d a2 e4 43 a3 70 ce 7a 20 a1 20 06 74 ...M..C.p.z . .t d550: 90 43 05 fa ac e2 03 c9 81 3c 22 7a 58 3e 54 fa .C.......<"zX>T. d560: ae e2 73 88 8f 14 1e bf 0f 0b fc 3f e3 e3 28 03 ..s........?..(. d570: af e6 bc 82 02 f3 69 14 a3 eb 3e 01 92 ff ff fc ......i...>..... d580: b8 be c3 28 c8 d1 79 f8 c9 a2 e2 4e 96 82 78 b2 ...(..y....N..x. d590: 8e 32 59 f4 4c 7c bb f0 8c de bb 7c 83 65 37 59 .2Y.L|.....|.e7Y d5a0: 78 97 81 90 8f 06 be c9 c2 1d 8b 2f 23 e0 bb c9 x........../#... d5b0: 02 5e 47 e3 b3 05 3b 85 f8 ba 06 4b a1 4d 9f 1a .^G...;....K.M.. d5c0: 8d 5a fd ff 1b 94 a9 51 a6 41 ad 3e 95 1a 33 76 .Z.....Q.A.>..3v d5d0: a1 b0 b8 0b 06 95 b4 2c 8d cb 81 40 68 80 5b a9 .......,...@h.[. d5e0: 40 1c fa 0b a4 53 02 f9 6a 09 c8 62 57 25 10 cb @....S..j..bW%.. d5f0: 54 01 d1 c8 dd c2 20 02 72 bc 4f 8d 40 1d 49 07 T..... .r.O.@.I. d600: 10 13 e4 63 ac f4 25 20 10 cb a6 15 a0 e5 3a 01 ...c..% ......:. d610: 62 61 41 68 c0 5f b5 86 e0 b4 20 02 72 32 2d 40 baAh._.... .r2-@ d620: 2c 27 88 80 fc ff 07 10 41 0d 5c 2f 05 5f 53 42 ,'......A.\/._SB d630: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 _PCI0LPC_EC__HKE d640: 59 5b 01 42 46 57 4d 07 14 10 4d 48 43 46 01 70 Y[.BFWM...MHCF.p d650: 5c 42 46 57 43 68 60 a4 60 14 4f 05 4d 48 50 46 \BFWCh`.`.O.MHPF d660: 01 08 52 45 54 42 11 03 0a 25 5b 23 42 46 57 4d ..RETB...%[#BFWM d670: ff ff a0 3b 92 94 87 68 0a 25 70 68 5c 42 46 57 ...;...h.%ph\BFW d680: 42 a0 22 5c 42 46 57 50 5c 2f 05 5f 53 42 5f 50 B."\BFWP\/._SB_P d690: 43 49 30 4c 50 43 5f 45 43 5f 5f 43 48 4b 53 5c CI0LPC_EC__CHKS\ d6a0: 42 46 57 4c 70 5c 42 46 57 42 52 45 54 42 5b 27 BFWLp\BFWBRETB[' d6b0: 42 46 57 4d a4 52 45 54 42 14 32 4d 48 49 46 01 BFWM.RETB.2MHIF. d6c0: 08 52 45 54 42 11 03 0a 0a 5b 23 42 46 57 4d ff .RETB....[#BFWM. d6d0: ff 5c 42 46 57 47 68 70 5c 42 46 57 42 52 45 54 .\BFWGhp\BFWBRET d6e0: 42 5b 27 42 46 57 4d a4 52 45 54 42 14 0c 4d 48 B['BFWM.RETB..MH d6f0: 44 4d 01 5c 42 44 4d 43 68 10 4a 0c 5c 2f 05 5f DM.\BDMCh.J.\/._ d700: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 SB_PCI0LPC_EC__H d710: 4b 45 59 14 10 50 53 53 47 01 a4 5c 50 53 49 46 KEY..PSSG..\PSIF d720: 0a 00 0a 00 14 0f 50 53 53 53 01 a4 5c 50 53 49 ......PSSS..\PSI d730: 46 0a 01 68 14 0f 50 53 42 53 01 a4 5c 50 53 49 F..h..PSBS..\PSI d740: 46 0a 02 68 14 0f 42 49 43 47 01 a4 5c 50 53 49 F..h..BICG..\PSI d750: 46 0a 03 68 14 0f 42 49 43 53 01 a4 5c 50 53 49 F..h..BICS..\PSI d760: 46 0a 04 68 14 0f 42 43 54 47 01 a4 5c 50 53 49 F..h..BCTG..\PSI d770: 46 0a 05 68 14 0f 42 43 43 53 01 a4 5c 50 53 49 F..h..BCCS..\PSI d780: 46 0a 06 68 14 0f 42 43 53 47 01 a4 5c 50 53 49 F..h..BCSG..\PSI d790: 46 0a 07 68 14 0f 42 43 53 53 01 a4 5c 50 53 49 F..h..BCSS..\PSI d7a0: 46 0a 08 68 14 0f 42 44 53 47 01 a4 5c 50 53 49 F..h..BDSG..\PSI d7b0: 46 0a 09 68 14 0f 42 44 53 53 01 a4 5c 50 53 49 F..h..BDSS..\PSI d7c0: 46 0a 0a 68 10 4a 0a 5c 2f 05 5f 53 42 5f 50 43 F..h.J.\/._SB_PC d7d0: 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 14 10 I0LPC_EC__HKEY.. d7e0: 47 49 4c 4e 00 a4 7d 0a 02 5c 49 4c 4e 46 00 14 GILN..}..\ILNF.. d7f0: 3d 53 49 4c 4e 01 a0 17 93 0a 01 68 70 0a 01 5c =SILN......hp..\ d800: 49 4c 4e 46 70 0a 00 42 42 4c 53 a4 0a 00 a1 1e ILNFp..BBLS..... d810: a0 17 93 0a 02 68 70 0a 00 5c 49 4c 4e 46 70 0a .....hp..\ILNFp. d820: 01 42 42 4c 53 a4 0a 00 a1 04 a4 0a 01 14 41 04 .BBLS.........A. d830: 47 4c 53 49 00 a0 22 5c 48 38 44 52 a4 72 0a 02 GLSI.."\H8DR.r.. d840: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E d850: 43 5f 5f 48 50 4c 44 00 a1 16 a0 0f 7b 5c 52 42 C__HPLD.....{\RB d860: 45 43 0a 46 0a 04 00 a4 0a 03 a1 04 a4 0a 02 10 EC.F............ d870: 4a 05 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 J.\/._SB_PCI0LPC d880: 5f 45 43 5f 5f 48 4b 45 59 14 10 47 44 4c 4e 00 _EC__HKEY..GDLN. d890: a4 7d 0a 02 5c 50 4c 55 58 00 14 2f 53 44 4c 4e .}..\PLUX../SDLN d8a0: 01 a0 10 93 0a 01 68 70 0a 01 5c 50 4c 55 58 a4 ......hp..\PLUX. d8b0: 0a 00 a1 17 a0 10 93 0a 02 68 70 0a 00 5c 50 4c .........hp..\PL d8c0: 55 58 a4 0a 00 a1 04 a4 0a 01 08 5c 56 48 43 43 UX.........\VHCC d8d0: 0a 00 10 2a 5c 2f 04 5f 53 42 5f 50 43 49 30 50 ...*\/._SB_PCI0P d8e0: 45 47 5f 56 49 44 5f 14 15 49 53 4f 50 00 a4 90 EG_VID_..ISOP... d8f0: 56 44 53 50 90 56 49 47 44 56 44 53 43 10 2e 5c VDSP.VIGDVDSC..\ d900: 2e 5f 53 42 5f 50 43 49 30 08 4f 54 4d 5f 0d 4f ._SB_PCI0.OTM_.O d910: 54 4d 41 43 50 49 20 32 30 30 39 2d 4e 6f 76 2d TMACPI 2009-Nov- d920: 31 32 20 31 38 3a 31 38 3a 35 31 00 10 46 12 5c 12 18:18:51..F.\ d930: 2f 04 5f 53 42 5f 50 43 49 30 50 45 47 5f 56 49 /._SB_PCI0PEG_VI d940: 44 5f 14 40 11 47 4f 42 54 01 08 4f 50 56 4b 11 D_.@.GOBT..OPVK. d950: 4a 0e 0a e6 e4 b8 4f 51 50 72 8a c2 4b 56 e6 00 J.....OQPr..KV.. d960: 00 00 01 00 31 34 38 35 39 37 34 35 36 39 38 35 ....148597456985 d970: 47 65 6e 75 69 6e 65 20 4e 56 49 44 49 41 20 43 Genuine NVIDIA C d980: 65 72 74 69 66 69 65 64 20 4f 70 74 69 6d 75 73 ertified Optimus d990: 20 52 65 61 64 79 20 4d 6f 74 68 65 72 62 6f 61 Ready Motherboa d9a0: 72 64 20 66 6f 72 20 36 38 38 33 32 35 6e 6f 7a rd for 688325noz d9b0: 6f 6d 69 32 31 44 35 20 20 20 20 20 2d 20 40 4a omi21D5 - @J d9c0: 20 24 55 27 5c 22 54 20 29 5f 47 42 20 50 2f 41 $U'\"T )_GB P/A d9d0: 4f 5c 37 22 3d 46 37 39 4b 37 2b 5f 3f 4b 48 5c O\7"=F79K7+_?KH\ d9e0: 5f 46 58 48 5f 44 57 32 26 4a 46 50 52 25 24 2f _FXH_DW2&JFPR%$/ d9f0: 46 24 20 2d 20 43 6f 70 79 72 69 67 68 74 20 32 F$ - Copyright 2 da00: 30 31 30 20 4e 56 49 44 49 41 20 43 6f 72 70 6f 010 NVIDIA Corpo da10: 72 61 74 69 6f 6e 20 41 6c 6c 20 52 69 67 68 74 ration All Right da20: 73 20 52 65 73 65 72 76 65 64 2d 31 34 38 35 39 s Reserved-14859 da30: 37 34 35 36 39 38 35 28 52 29 8b 68 0a 02 55 53 7456985(R).h..US da40: 52 47 a0 0e 93 55 53 52 47 0b 4b 56 a4 4f 50 56 RG...USRG.KV.OPV da50: 4b a4 00 10 48 25 5c 2f 04 5f 53 42 5f 50 43 49 K...H%\/._SB_PCI da60: 30 50 45 47 5f 56 49 44 5f 08 4f 4d 50 52 0a 02 0PEG_VID_.OMPR.. da70: 08 48 44 41 53 0a 00 14 44 23 4e 56 4f 50 04 08 .HDAS...D#NVOP.. da80: 5f 54 5f 30 00 70 0d 2d 2d 2d 2d 2d 2d 2d 20 4e _T_0.p.------- N da90: 56 20 4f 50 54 49 4d 55 53 20 44 53 4d 20 2d 2d V OPTIMUS DSM -- daa0: 2d 2d 2d 2d 2d 2d 00 5b 31 a0 0d 92 93 69 0b 00 ------.[1....i.. dab0: 01 a4 0c 01 00 00 80 70 99 6a 00 5f 54 5f 30 a0 .......p.j._T_0. dac0: 41 07 93 5f 54 5f 30 0a 00 70 11 07 0a 04 00 00 A.._T_0..p...... dad0: 00 00 60 78 0a 00 0a 08 62 61 79 0a 01 62 62 7d ..`x....bay..bb} dae0: 83 88 60 61 00 62 88 60 61 00 78 0a 1a 0a 08 62 ..`a.b.`a.x....b daf0: 61 79 0a 01 62 62 7d 83 88 60 61 00 62 88 60 61 ay..bb}..`a.b.`a db00: 00 78 0a 1b 0a 08 62 61 79 0a 01 62 62 7d 83 88 .x....bay..bb}.. db10: 60 61 00 62 88 60 61 00 78 0a 10 0a 08 62 61 79 `a.b.`a.x....bay db20: 0a 01 62 62 7d 83 88 60 61 00 62 88 60 61 00 a4 ..bb}..`a.b.`a.. db30: 60 a1 44 17 a0 4c 0a 93 5f 54 5f 30 0a 1a 5b 13 `.D..L.._T_0..[. db40: 6b 0a 18 0a 02 4f 50 43 45 5b 13 6b 0a 00 0a 01 k....OPCE[.k.... db50: 46 4c 43 48 a0 10 99 46 4c 43 48 00 70 4f 50 43 FLCH...FLCH.pOPC db60: 45 4f 4d 50 52 70 11 07 0a 04 00 00 00 00 60 5b EOMPRp........`[ db70: 13 60 0a 00 0a 01 4f 50 45 4e 5b 13 60 0a 03 0a .`....OPEN[.`... db80: 02 43 47 43 53 5b 13 60 0a 06 0a 01 53 48 50 43 .CGCS[.`....SHPC db90: 5b 13 60 0a 18 0a 03 44 47 50 43 5b 13 60 0a 1b [.`....DGPC[.`.. dba0: 0a 02 48 44 41 43 70 01 4f 50 45 4e 70 01 53 48 ..HDACp.OPENp.SH dbb0: 50 43 70 01 44 47 50 43 a0 1f 5c 2f 05 5f 53 42 PCp.DGPC..\/._SB dbc0: 5f 50 43 49 30 50 45 47 5f 56 49 44 5f 5f 53 54 _PCI0PEG_VID__ST dbd0: 41 70 0a 03 43 47 43 53 70 0a 02 48 44 41 43 a4 Ap..CGCSp..HDAC. dbe0: 60 a1 44 0c a0 4d 09 93 5f 54 5f 30 0a 1b 5b 13 `.D..M.._T_0..[. dbf0: 6b 0a 00 0a 01 48 44 41 55 5b 13 6b 0a 01 0a 01 k....HDAU[.k.... dc00: 48 44 41 52 70 11 07 0a 04 00 00 00 00 60 5b 13 HDARp........`[. dc10: 60 0a 02 0a 02 52 51 47 53 5b 13 60 0a 04 0a 01 `....RQGS[.`.... dc20: 50 57 53 54 70 01 50 57 53 54 a0 3a 90 5c 2f 05 PWSTp.PWST.:.\/. dc30: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ dc40: 44 4f 43 44 5c 2f 06 5f 53 42 5f 50 43 49 30 4c DOCD\/._SB_PCI0L dc50: 50 43 5f 45 43 5f 5f 41 43 5f 5f 5f 50 53 52 70 PC_EC__AC___PSRp dc60: 01 52 51 47 53 a1 07 70 00 52 51 47 53 a0 12 99 .RQGS..p.RQGS... dc70: 48 44 41 52 00 70 99 48 44 41 55 00 48 44 41 53 HDAR.p.HDAU.HDAS dc80: a4 60 a1 23 a0 21 93 5f 54 5f 30 0a 10 a4 5c 2f .`.#.!._T_0...\/ dc90: 05 5f 53 42 5f 50 43 49 30 50 45 47 5f 56 49 44 ._SB_PCI0PEG_VID dca0: 5f 47 4f 42 54 6b a4 0c 02 00 00 80 10 37 5c 00 _GOBTk.......7\. dcb0: 14 33 43 4d 50 42 02 70 87 68 61 a0 09 92 93 61 .3CMPB.p.ha....a dcc0: 87 69 a4 0a 00 70 0a 00 60 a2 17 95 60 61 a0 10 .i...p..`...`a.. dcd0: 92 93 83 88 68 60 00 83 88 69 60 00 a4 0a 00 75 ....h`...i`....u dce0: 60 a4 0a 01 10 49 21 5c 2f 04 5f 53 42 5f 50 43 `....I!\/._SB_PC dcf0: 49 30 50 45 47 5f 56 49 44 5f 08 43 50 50 43 0a I0PEG_VID_.CPPC. dd00: 00 14 4c 1f 4e 56 50 53 04 08 5f 54 5f 31 00 08 ..L.NVPS.._T_1.. dd10: 5f 54 5f 30 00 70 0d 2d 2d 2d 2d 2d 2d 2d 20 4e _T_0.p.------- N dd20: 56 20 47 50 53 20 44 53 4d 20 2d 2d 2d 2d 2d 2d V GPS DSM ------ dd30: 2d 2d 00 5b 31 70 99 6a 00 5f 54 5f 30 a0 46 05 --.[1p.j._T_0.F. dd40: 93 5f 54 5f 30 0a 00 70 11 0b 0a 08 00 00 00 00 ._T_0..p........ dd50: 00 00 00 00 60 70 11 0a 0a 07 00 20 21 22 23 2a ....`p..... !"#* dd60: ff 63 70 00 64 70 83 88 63 64 00 65 a2 25 92 93 .cp.dp..cd.e.%.. dd70: 65 0a ff 78 65 0a 08 62 61 79 0a 01 62 62 7d 83 e..xe..bay..bb}. dd80: 88 60 61 00 62 88 60 61 00 75 64 70 83 88 63 64 .`a.b.`a.udp..cd dd90: 00 65 a4 60 a1 40 16 a0 36 93 5f 54 5f 30 0a 20 .e.`.@..6._T_0. dda0: 70 11 07 0a 04 00 00 00 00 60 5b 13 60 0a 18 0a p........`[.`... ddb0: 01 43 55 49 54 5b 13 60 0a 1e 0a 01 50 53 45 52 .CUIT[.`....PSER ddc0: 70 01 43 55 49 54 70 01 50 53 45 52 a4 60 a1 46 p.CUITp.PSER.`.F ddd0: 12 a0 18 93 5f 54 5f 30 0a 21 a4 5c 2f 03 5f 50 ...._T_0.!.\/._P dde0: 52 5f 43 50 55 30 5f 50 53 53 a1 4a 10 a0 2c 93 R_CPU0_PSS.J..,. ddf0: 5f 54 5f 30 0a 22 5b 13 6b 0a 00 0a 08 50 50 43 _T_0."[.k....PPC de00: 56 70 50 50 43 56 43 50 50 43 5c 50 4e 54 46 0a VpPPCVCPPC\PNTF. de10: 80 a4 11 07 0a 04 00 00 00 00 a1 4a 0d a0 1e 93 ...........J.... de20: 5f 54 5f 30 0a 23 70 11 07 0a 04 00 00 00 00 60 _T_0.#p........` de30: 70 43 50 50 43 88 60 0a 00 00 a4 60 a1 48 0b a0 pCPPC.`....`.H.. de40: 45 0b 93 5f 54 5f 30 0a 2a 70 11 27 0a 24 00 02 E.._T_0.*p.'.$.. de50: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ de60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ de70: 00 00 60 70 83 88 6b 0a 00 00 88 60 0a 00 00 5b ..`p..k....`...[ de80: 13 6b 0a 00 0a 04 51 54 59 50 70 99 51 54 59 50 .k....QTYPp.QTYP de90: 00 5f 54 5f 31 a0 2e 93 5f 54 5f 31 0a 00 70 5c ._T_1..._T_1..p\ dea0: 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 /._SB_PCI0LPC_EC deb0: 5f 5f 54 4d 50 30 61 70 7b 61 0a ff 00 88 60 0a __TMP0ap{a....`. dec0: 0c 00 a4 60 a1 30 a0 1a 93 5f 54 5f 31 0a 01 70 ...`.0..._T_1..p ded0: 0a 08 88 60 0a 0d 00 70 0a 03 88 60 0a 01 00 a4 ...`...p...`.... dee0: 60 a1 13 a0 11 93 5f 54 5f 31 0a 02 70 00 88 60 `....._T_1..p..` def0: 0a 01 00 a4 60 a4 11 07 0a 04 02 00 00 80 10 2c ....`.........., df00: 5c 2f 06 5f 53 42 5f 50 43 49 30 45 48 43 32 55 \/._SB_PCI0EHC2U df10: 52 54 48 55 52 4d 48 50 52 54 43 08 5f 45 4a 44 RTHURMHPRTC._EJD df20: 0d 5c 5f 53 42 2e 47 44 43 4b 00 10 36 5c 2f 06 .\_SB.GDCK..6\/. df30: 5f 53 42 5f 50 43 49 30 45 48 43 31 55 52 54 48 _SB_PCI0EHC1URTH df40: 55 52 4d 48 50 52 54 35 08 5f 45 4a 44 0d 5c 5f URMHPRT5._EJD.\_ df50: 53 42 2e 50 43 49 30 2e 45 58 50 33 2e 53 4c 4f SB.PCI0.EXP3.SLO df60: 54 00 10 38 5c 2f 04 5f 53 42 5f 50 43 49 30 45 T..8\/._SB_PCI0E df70: 58 50 33 53 4c 4f 54 08 5f 45 4a 44 0d 5c 5f 53 XP3SLOT._EJD.\_S df80: 42 2e 50 43 49 30 2e 45 48 43 31 2e 55 52 54 48 B.PCI0.EHC1.URTH df90: 2e 55 52 4d 48 2e 50 52 54 35 00 08 5c 5f 53 30 .URMH.PRT5..\_S0 dfa0: 5f 12 0a 04 0a 00 0a 00 0a 00 0a 00 08 5c 5f 53 _............\_S dfb0: 33 5f 12 0a 04 0a 05 0a 05 0a 00 0a 00 08 5c 5f 3_............\_ dfc0: 53 34 5f 12 0a 04 0a 06 0a 06 0a 00 0a 00 08 5c S4_............\ dfd0: 5f 53 35 5f 12 0a 04 0a 07 0a 07 0a 00 0a 00 14 _S5_............ dfe0: 45 26 5c 5f 50 54 53 01 70 0a 01 60 a0 0c 93 68 E&\_PTS.p..`...h dff0: 5c 53 50 53 5f 70 0a 00 60 a0 0f 91 93 68 0a 00 \SPS_p..`....h.. e000: 92 95 68 0a 06 70 0a 00 60 a0 4b 23 60 70 68 5c ..h..p..`.K#`ph\ e010: 53 50 53 5f 5c 2f 06 5f 53 42 5f 50 43 49 30 4c SPS_\/._SB_PCI0L e020: 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 45 0a PC_EC__HKEYMHKE. e030: 00 a0 1f 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 ...\/._SB_PCI0LP e040: 43 5f 45 43 5f 5f 4b 42 4c 54 5c 55 43 4d 53 0a C_EC__KBLT\UCMS. e050: 0d a0 47 05 93 68 0a 01 70 5c 2f 05 5f 53 42 5f ..G..h..p\/._SB_ e060: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 46 4e 49 PCI0LPC_EC__HFNI e070: 5c 46 4e 49 44 70 0a 00 5c 2f 05 5f 53 42 5f 50 \FNIDp..\/._SB_P e080: 43 49 30 4c 50 43 5f 45 43 5f 5f 48 46 4e 49 70 CI0LPC_EC__HFNIp e090: 0a 00 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC e0a0: 5f 45 43 5f 5f 48 46 53 50 a0 3a 93 68 0a 03 5c _EC__HFSP.:.h..\ e0b0: 56 56 50 44 0a 03 5c 54 52 41 50 70 5c 2f 06 5f VVPD..\TRAPp\/._ e0c0: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 41 SB_PCI0LPC_EC__A e0d0: 43 5f 5f 5f 50 53 52 5c 41 43 53 54 70 0a 00 5c C___PSR\ACSTp..\ e0e0: 41 50 49 4e a0 46 04 93 68 0a 04 a0 0b 56 44 53 APIN.F..h....VDS e0f0: 50 70 00 53 48 41 31 5c 2f 03 5f 53 42 5f 53 4c Pp.SHA1\/._SB_SL e100: 50 42 5f 50 53 57 0a 00 5c 54 52 41 50 5c 2f 05 PB_PSW..\TRAP\/. e110: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 54 50 4d 5f _SB_PCI0LPC_TPM_ e120: 43 4d 4f 52 5c 41 57 4f 4e 0a 04 a0 28 93 68 0a CMOR\AWON...(.h. e130: 05 5c 54 52 41 50 5c 2f 05 5f 53 42 5f 50 43 49 .\TRAP\/._SB_PCI e140: 30 4c 50 43 5f 54 50 4d 5f 43 4d 4f 52 5c 41 57 0LPC_TPM_CMOR\AW e150: 4f 4e 0a 05 5c 2f 05 5f 53 42 5f 50 43 49 30 4c ON..\/._SB_PCI0L e160: 50 43 5f 45 43 5f 5f 42 50 54 53 68 a0 20 92 95 PC_EC__BPTSh. .. e170: 68 0a 04 70 0a 00 5c 2f 05 5f 53 42 5f 50 43 49 h..p..\/._SB_PCI e180: 30 4c 50 43 5f 45 43 5f 5f 48 57 4c 42 a1 1b 70 0LPC_EC__HWLB..p e190: 0a 01 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC e1a0: 5f 45 43 5f 5f 48 57 4c 42 a0 4f 07 92 93 68 0a _EC__HWLB.O...h. e1b0: 05 70 0a 01 5c 2f 05 5f 53 42 5f 50 43 49 30 4c .p..\/._SB_PCI0L e1c0: 50 43 5f 45 43 5f 5f 48 43 4d 55 5c 2f 03 5f 53 PC_EC__HCMU\/._S e1d0: 42 5f 47 44 43 4b 47 50 54 53 68 70 5c 2f 04 5f B_GDCKGPTShp\/._ e1e0: 53 42 5f 50 43 49 30 45 58 50 31 50 44 53 5f 5c SB_PCI0EXP1PDS_\ e1f0: 2f 04 5f 53 42 5f 50 43 49 30 45 58 50 31 50 44 /._SB_PCI0EXP1PD e200: 53 46 70 5c 2f 04 5f 53 42 5f 50 43 49 30 45 58 SFp\/._SB_PCI0EX e210: 50 33 50 44 53 5f 5c 2f 04 5f 53 42 5f 50 43 49 P3PDS_\/._SB_PCI e220: 30 45 58 50 33 50 44 53 46 5c 2f 06 5f 53 42 5f 0EXP3PDSF\/._SB_ e230: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 PCI0LPC_EC__HKEY e240: 57 47 50 53 68 08 57 41 4b 49 12 06 02 0a 00 0a WGPSh.WAKI...... e250: 00 14 45 85 5c 5f 57 41 4b 01 a0 10 91 93 68 0a ..E.\_WAK.....h. e260: 00 92 95 68 0a 05 a4 57 41 4b 49 70 0a 00 5c 53 ...h...WAKIp..\S e270: 50 53 5f 70 0a 00 5c 2f 05 5f 53 42 5f 50 43 49 PS_p..\/._SB_PCI e280: 30 4c 50 43 5f 45 43 5f 5f 48 43 4d 55 5c 2f 05 0LPC_EC__HCMU\/. e290: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ e2a0: 45 56 4e 54 0a 01 5c 2f 06 5f 53 42 5f 50 43 49 EVNT..\/._SB_PCI e2b0: 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 4b 0LPC_EC__HKEYMHK e2c0: 45 0a 01 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 E..\/._SB_PCI0LP e2d0: 43 5f 45 43 5f 5f 46 4e 53 54 5c 55 43 4d 53 0a C_EC__FNST\UCMS. e2e0: 0d 70 0a 00 5c 4c 49 44 42 a0 22 93 68 0a 01 70 .p..\LIDB.".h..p e2f0: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E e300: 43 5f 5f 48 46 4e 49 5c 46 4e 49 44 a0 4e 3b 93 C__HFNI\FNID.N;. e310: 68 0a 03 5c 4e 56 53 53 0a 00 70 5c 2f 06 5f 53 h..\NVSS..p\/._S e320: 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 41 43 B_PCI0LPC_EC__AC e330: 5f 5f 5f 50 53 52 5c 50 57 52 53 5c 2f 05 5f 53 ___PSR\PWRS\/._S e340: 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 4c 45 B_PCI0LPC_EC__LE e350: 44 5f 0a 08 0a 80 a0 0d 5c 4f 53 43 34 5c 50 4e D_......\OSC4\PN e360: 54 46 0a 81 a0 3a 92 93 5c 41 43 53 54 5c 2f 06 TF...:..\ACST\/. e370: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ e380: 41 43 5f 5f 5f 50 53 52 5c 2f 05 5f 53 42 5f 50 AC___PSR\/._SB_P e390: 43 49 30 4c 50 43 5f 45 43 5f 5f 41 54 4d 43 a0 CI0LPC_EC__ATMC. e3a0: 44 0c 5c 53 43 52 4d 70 0a 07 5c 2f 05 5f 53 42 D.\SCRMp..\/._SB e3b0: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 46 53 _PCI0LPC_EC__HFS e3c0: 50 a0 42 0a 5c 4d 54 41 55 70 0b e8 03 62 a2 20 P.B.\MTAUp...b. e3d0: 90 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ e3e0: 45 43 5f 5f 50 49 42 53 62 5b 22 0a 01 76 62 a0 EC__PIBSb["..vb. e3f0: 44 07 62 70 0a 01 5c 2f 05 5f 53 42 5f 50 43 49 D.bp..\/._SB_PCI e400: 30 4c 50 43 5f 45 43 5f 5f 50 4c 53 4c 70 5c 4d 0LPC_EC__PLSLp\M e410: 54 41 55 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 TAU\/._SB_PCI0LP e420: 43 5f 45 43 5f 5f 50 4c 54 55 70 5c 50 4c 31 4c C_EC__PLTUp\PL1L e430: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E e440: 43 5f 5f 50 4c 4c 53 70 5c 50 4c 31 4d 5c 2f 05 C__PLLSp\PL1M\/. e450: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ e460: 50 4c 4d 53 a0 45 04 93 5c 49 53 57 4b 0a 01 a0 PLMS.E..\ISWK... e470: 3a 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f :\/._SB_PCI0LPC_ e480: 45 43 5f 5f 48 4b 45 59 44 48 4b 43 5c 2f 06 5f EC__HKEYDHKC\/._ e490: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 SB_PCI0LPC_EC__H e4a0: 4b 45 59 4d 48 4b 51 0b 70 60 a0 4d 07 5c 56 49 KEYMHKQ.p`.M.\VI e4b0: 47 44 5c 2f 04 5f 53 42 5f 50 43 49 30 56 49 44 GD\/._SB_PCI0VID e4c0: 5f 47 4c 49 53 5c 2f 03 5f 53 42 5f 4c 49 44 5f _GLIS\/._SB_LID_ e4d0: 5f 4c 49 44 70 5c 2f 03 5f 53 42 5f 47 44 43 4b _LIDp\/._SB_GDCK e4e0: 47 47 49 44 60 a0 1f 91 93 60 0a 00 93 60 0a 01 GGID`....`...`.. e4f0: 5c 2f 04 5f 53 42 5f 50 43 49 30 56 49 44 5f 47 \/._SB_PCI0VID_G e500: 44 43 53 0a 01 a1 16 5c 2f 04 5f 53 42 5f 50 43 DCS....\/._SB_PC e510: 49 30 56 49 44 5f 47 44 43 53 0a 00 a0 0b 5c 57 I0VID_GDCS....\W e520: 56 49 53 5c 56 42 54 44 a1 49 07 a0 46 07 5c 57 VIS\VBTD.I..F.\W e530: 56 49 53 5c 2f 04 5f 53 42 5f 50 43 49 30 56 49 VIS\/._SB_PCI0VI e540: 44 5f 47 4c 49 53 5c 2f 03 5f 53 42 5f 4c 49 44 D_GLIS\/._SB_LID e550: 5f 5f 4c 49 44 70 5c 2f 03 5f 53 42 5f 47 44 43 __LIDp\/._SB_GDC e560: 4b 47 47 49 44 60 a0 1f 91 93 60 0a 00 93 60 0a KGGID`....`...`. e570: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 56 49 44 5f .\/._SB_PCI0VID_ e580: 47 44 43 53 0a 01 a1 16 5c 2f 04 5f 53 42 5f 50 GDCS....\/._SB_P e590: 43 49 30 56 49 44 5f 47 44 43 53 0a 00 5c 56 42 CI0VID_GDCS..\VB e5a0: 54 44 5c 56 43 4d 53 0a 01 5c 2f 03 5f 53 42 5f TD\VCMS..\/._SB_ e5b0: 4c 49 44 5f 5f 4c 49 44 5c 41 57 4f 4e 0a 00 a0 LID__LID\AWON... e5c0: 1b 5c 43 4d 50 52 86 5c 2e 5f 53 42 5f 53 4c 50 .\CMPR.\._SB_SLP e5d0: 42 0a 02 70 0a 00 5c 43 4d 50 52 a0 4f 0e 5c 55 B..p..\CMPR.O.\U e5e0: 53 42 52 a0 47 0e 91 93 5c 58 48 43 4d 0a 02 93 SBR.G...\XHCM... e5f0: 5c 58 48 43 4d 0a 03 70 0a 00 60 7b 5c 2f 04 5f \XHCM..p..`{\/._ e600: 53 42 5f 50 43 49 30 58 48 43 49 50 52 33 5f 0c SB_PCI0XHCIPR3_. e610: f0 ff ff ff 60 7d 60 5c 58 48 50 4d 60 a0 1b 93 ....`}`\XHPM`... e620: 5c 2f 03 5f 53 42 5f 47 44 43 4b 47 47 49 44 0a \/._SB_GDCKGGID. e630: 05 7b 60 0c fb ff ff ff 60 7b 60 5c 2f 04 5f 53 .{`.....`{`\/._S e640: 42 5f 50 43 49 30 58 48 43 49 50 52 33 4d 5c 2f B_PCI0XHCIPR3M\/ e650: 04 5f 53 42 5f 50 43 49 30 58 48 43 49 50 52 33 ._SB_PCI0XHCIPR3 e660: 5f 70 0a 00 60 7b 5c 2f 04 5f 53 42 5f 50 43 49 _p..`{\/._SB_PCI e670: 30 58 48 43 49 50 52 32 5f 0c f0 ff ff ff 60 7d 0XHCIPR2_.....`} e680: 60 5c 58 48 50 4d 60 a0 1b 93 5c 2f 03 5f 53 42 `\XHPM`...\/._SB e690: 5f 47 44 43 4b 47 47 49 44 0a 05 7b 60 0c fb ff _GDCKGGID..{`... e6a0: ff ff 60 7b 60 5c 2f 04 5f 53 42 5f 50 43 49 30 ..`{`\/._SB_PCI0 e6b0: 58 48 43 49 50 52 32 4d 5c 2f 04 5f 53 42 5f 50 XHCIPR2M\/._SB_P e6c0: 43 49 30 58 48 43 49 50 52 32 5f a0 4a 1a 93 68 CI0XHCIPR2_.J..h e6d0: 0a 04 5c 4e 56 53 53 0a 00 70 0a 00 5c 2f 05 5f ..\NVSS..p..\/._ e6e0: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 SB_PCI0LPC_EC__H e6f0: 53 50 41 70 5c 2f 06 5f 53 42 5f 50 43 49 30 4c SPAp\/._SB_PCI0L e700: 50 43 5f 45 43 5f 5f 41 43 5f 5f 5f 50 53 52 5c PC_EC__AC___PSR\ e710: 50 57 52 53 a0 0d 5c 4f 53 43 34 5c 50 4e 54 46 PWRS..\OSC4\PNTF e720: 0a 81 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC e730: 5f 45 43 5f 5f 41 54 4d 43 a0 44 0c 5c 53 43 52 _EC__ATMC.D.\SCR e740: 4d 70 0a 07 5c 2f 05 5f 53 42 5f 50 43 49 30 4c Mp..\/._SB_PCI0L e750: 50 43 5f 45 43 5f 5f 48 46 53 50 a0 42 0a 5c 4d PC_EC__HFSP.B.\M e760: 54 41 55 70 0b e8 03 62 a2 20 90 5c 2f 05 5f 53 TAUp...b. .\/._S e770: 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 50 49 B_PCI0LPC_EC__PI e780: 42 53 62 5b 22 0a 01 76 62 a0 44 07 62 70 0a 01 BSb["..vb.D.bp.. e790: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E e7a0: 43 5f 5f 50 4c 53 4c 70 5c 4d 54 41 55 5c 2f 05 C__PLSLp\MTAU\/. e7b0: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ e7c0: 50 4c 54 55 70 5c 50 4c 31 4c 5c 2f 05 5f 53 42 PLTUp\PL1L\/._SB e7d0: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 50 4c 4c _PCI0LPC_EC__PLL e7e0: 53 70 5c 50 4c 31 4d 5c 2f 05 5f 53 42 5f 50 43 Sp\PL1M\/._SB_PC e7f0: 49 30 4c 50 43 5f 45 43 5f 5f 50 4c 4d 53 a0 31 I0LPC_EC__PLMS.1 e800: 92 5c 4e 42 43 46 a0 1d 5c 56 49 47 44 5c 2f 05 .\NBCF..\VIGD\/. e810: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ e820: 42 52 4e 53 a1 0b 5c 56 42 52 43 5c 42 52 4c 56 BRNS..\VBRC\BRLV e830: a0 45 04 93 5c 49 53 57 4b 0a 02 a0 3a 5c 2f 06 .E..\ISWK...:\/. e840: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ e850: 48 4b 45 59 44 48 4b 43 5c 2f 06 5f 53 42 5f 50 HKEYDHKC\/._SB_P e860: 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d CI0LPC_EC__HKEYM e870: 48 4b 51 0b 80 60 a0 43 06 7f 5c 2f 04 5f 53 42 HKQ..`.C..\/._SB e880: 5f 50 43 49 30 45 58 50 31 50 44 53 5f 5c 2f 04 _PCI0EXP1PDS_\/. e890: 5f 53 42 5f 50 43 49 30 45 58 50 31 50 44 53 46 _SB_PCI0EXP1PDSF e8a0: 00 70 5c 2f 04 5f 53 42 5f 50 43 49 30 45 58 50 .p\/._SB_PCI0EXP e8b0: 31 50 44 53 5f 5c 2f 04 5f 53 42 5f 50 43 49 30 1PDS_\/._SB_PCI0 e8c0: 45 58 50 31 50 44 53 46 86 5c 2f 03 5f 53 42 5f EXP1PDSF.\/._SB_ e8d0: 50 43 49 30 45 58 50 31 0a 00 a0 43 06 7f 5c 2f PCI0EXP1...C..\/ e8e0: 04 5f 53 42 5f 50 43 49 30 45 58 50 33 50 44 53 ._SB_PCI0EXP3PDS e8f0: 5f 5c 2f 04 5f 53 42 5f 50 43 49 30 45 58 50 33 _\/._SB_PCI0EXP3 e900: 50 44 53 46 00 70 5c 2f 04 5f 53 42 5f 50 43 49 PDSF.p\/._SB_PCI e910: 30 45 58 50 33 50 44 53 5f 5c 2f 04 5f 53 42 5f 0EXP3PDS_\/._SB_ e920: 50 43 49 30 45 58 50 33 50 44 53 46 86 5c 2f 03 PCI0EXP3PDSF.\/. e930: 5f 53 42 5f 50 43 49 30 45 58 50 33 0a 00 5c 2f _SB_PCI0EXP3..\/ e940: 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ e950: 5f 42 41 54 57 68 5c 2f 03 5f 53 42 5f 47 44 43 _BATWh\/._SB_GDC e960: 4b 47 57 41 4b 68 5c 2f 05 5f 53 42 5f 50 43 49 KGWAKh\/._SB_PCI e970: 30 4c 50 43 5f 45 43 5f 5f 42 57 41 4b 68 5c 2f 0LPC_EC__BWAKh\/ e980: 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ e990: 5f 48 4b 45 59 57 47 57 4b 68 86 5c 2e 5f 54 5a _HKEYWGWKh.\._TZ e9a0: 5f 54 48 4d 30 0a 80 5c 56 53 4c 44 5c 2f 03 5f _THM0..\VSLD\/._ e9b0: 53 42 5f 4c 49 44 5f 5f 4c 49 44 a0 28 5c 56 49 SB_LID__LID.(\VI e9c0: 47 44 5c 2f 04 5f 53 42 5f 50 43 49 30 56 49 44 GD\/._SB_PCI0VID e9d0: 5f 47 4c 49 53 5c 2f 03 5f 53 42 5f 4c 49 44 5f _GLIS\/._SB_LID_ e9e0: 5f 4c 49 44 a1 2a a0 28 5c 57 56 49 53 5c 2f 04 _LID.*.(\WVIS\/. e9f0: 5f 53 42 5f 50 43 49 30 56 49 44 5f 47 4c 49 53 _SB_PCI0VID_GLIS ea00: 5c 2f 03 5f 53 42 5f 4c 49 44 5f 5f 4c 49 44 a0 \/._SB_LID__LID. ea10: 39 95 68 0a 04 a0 33 7b 5c 52 52 42 46 0a 02 00 9.h...3{\RRBF... ea20: 79 68 0a 08 60 70 7d 0b 13 20 60 00 60 5c 2f 06 yh..`p}.. `.`\/. ea30: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ ea40: 48 4b 45 59 4d 48 4b 51 60 a0 41 05 93 68 0a 04 HKEYMHKQ`.A..h.. ea50: 70 0a 00 60 70 5c 43 53 55 4d 0a 00 61 a0 14 92 p..`p\CSUM..a... ea60: 93 61 5c 43 48 4b 43 70 0a 01 60 70 61 5c 43 48 .a\CHKCp..`pa\CH ea70: 4b 43 70 5c 43 53 55 4d 0a 01 61 a0 14 92 93 61 KCp\CSUM..a....a ea80: 5c 43 48 4b 45 70 0a 01 60 70 61 5c 43 48 4b 45 \CHKEp..`pa\CHKE ea90: a0 0a 60 86 5c 5f 53 42 5f 0a 00 70 00 5c 52 52 ..`.\_SB_..p.\RR eaa0: 42 46 a4 57 41 4b 49 10 47 21 5c 5f 53 49 5f 14 BF.WAKI.G!\_SI_. eab0: 4f 20 5f 53 53 54 01 a0 3b 93 68 0a 00 5c 2f 05 O _SST..;.h..\/. eac0: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ ead0: 4c 45 44 5f 0a 00 0a 00 5c 2f 05 5f 53 42 5f 50 LED_....\/._SB_P eae0: 43 49 30 4c 50 43 5f 45 43 5f 5f 4c 45 44 5f 0a CI0LPC_EC__LED_. eaf0: 07 0a 00 a0 42 06 93 68 0a 01 a0 25 91 5c 53 50 ....B..h...%.\SP eb00: 53 5f 5c 57 4e 54 46 5c 2f 05 5f 53 42 5f 50 43 S_\WNTF\/._SB_PC eb10: 49 30 4c 50 43 5f 45 43 5f 5f 42 45 45 50 0a 05 I0LPC_EC__BEEP.. eb20: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E eb30: 43 5f 5f 4c 45 44 5f 0a 00 0a 80 5c 2f 05 5f 53 C__LED_....\/._S eb40: 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 4c 45 B_PCI0LPC_EC__LE eb50: 44 5f 0a 07 0a 00 a0 3b 93 68 0a 02 5c 2f 05 5f D_.....;.h..\/._ eb60: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 4c SB_PCI0LPC_EC__L eb70: 45 44 5f 0a 00 0a c0 5c 2f 05 5f 53 42 5f 50 43 ED_....\/._SB_PC eb80: 49 30 4c 50 43 5f 45 43 5f 5f 4c 45 44 5f 0a 07 I0LPC_EC__LED_.. eb90: 0a c0 a0 46 0d 93 68 0a 03 a0 22 94 5c 53 50 53 ...F..h...".\SPS eba0: 5f 0a 03 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 _..\/._SB_PCI0LP ebb0: 43 5f 45 43 5f 5f 42 45 45 50 0a 07 a1 4f 04 a0 C_EC__BEEP...O.. ebc0: 31 93 5c 53 50 53 5f 0a 03 5c 2f 05 5f 53 42 5f 1.\SPS_..\/._SB_ ebd0: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 42 45 45 50 PCI0LPC_EC__BEEP ebe0: 0a 03 5c 2f 03 5f 53 42 5f 47 44 43 4b 50 45 4a ..\/._SB_GDCKPEJ ebf0: 33 a1 1a 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 3..\/._SB_PCI0LP ec00: 43 5f 45 43 5f 5f 42 45 45 50 0a 04 a0 09 93 5c C_EC__BEEP.....\ ec10: 53 50 53 5f 0a 03 a1 1c 5c 2f 05 5f 53 42 5f 50 SPS_....\/._SB_P ec20: 43 49 30 4c 50 43 5f 45 43 5f 5f 4c 45 44 5f 0a CI0LPC_EC__LED_. ec30: 00 0a 80 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 ...\/._SB_PCI0LP ec40: 43 5f 45 43 5f 5f 4c 45 44 5f 0a 07 0a c0 5c 2f C_EC__LED_....\/ ec50: 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ ec60: 5f 4c 45 44 5f 0a 00 0a c0 a0 45 05 93 68 0a 04 _LED_.....E..h.. ec70: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E ec80: 43 5f 5f 42 45 45 50 0a 03 5c 2f 05 5f 53 42 5f C__BEEP..\/._SB_ ec90: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 4c 45 44 5f PCI0LPC_EC__LED_ eca0: 0a 07 0a c0 5c 2f 05 5f 53 42 5f 50 43 49 30 4c ....\/._SB_PCI0L ecb0: 50 43 5f 45 43 5f 5f 4c 45 44 5f 0a 00 0a c0 10 PC_EC__LED_..... ecc0: 41 3e 5c 5f 47 50 45 14 48 09 5f 4c 31 44 00 70 A>\_GPE.H._L1D.p ecd0: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E ece0: 43 5f 5f 48 57 41 4b 60 70 60 5c 52 52 42 46 5b C__HWAK`p`\RRBF[ ecf0: 22 0a 0a a0 06 7b 60 0a 02 00 a0 13 7b 60 0a 04 "....{`.....{`.. ed00: 00 86 5c 2e 5f 53 42 5f 4c 49 44 5f 0a 02 a0 22 ..\._SB_LID_..." ed10: 7b 60 0a 08 00 5c 2f 03 5f 53 42 5f 47 44 43 4b {`...\/._SB_GDCK ed20: 47 47 50 45 86 5c 2e 5f 53 42 5f 53 4c 50 42 0a GGPE.\._SB_SLPB. ed30: 02 a0 13 7b 60 0a 10 00 86 5c 2e 5f 53 42 5f 53 ...{`....\._SB_S ed40: 4c 50 42 0a 02 a0 06 7b 60 0a 40 00 a0 13 7b 60 LPB....{`.@...{` ed50: 0a 80 00 86 5c 2e 5f 53 42 5f 53 4c 50 42 0a 02 ....\._SB_SLPB.. ed60: 14 43 10 5f 4c 30 39 00 a0 43 05 5c 2f 04 5f 53 .C._L09..C.\/._S ed70: 42 5f 50 43 49 30 45 58 50 31 50 53 5f 5f 70 0a B_PCI0EXP1PS__p. ed80: 01 5c 2f 04 5f 53 42 5f 50 43 49 30 45 58 50 31 .\/._SB_PCI0EXP1 ed90: 50 53 5f 5f 70 0a 01 5c 2f 04 5f 53 42 5f 50 43 PS__p..\/._SB_PC eda0: 49 30 45 58 50 31 50 4d 43 53 86 5c 2f 03 5f 53 I0EXP1PMCS.\/._S edb0: 42 5f 50 43 49 30 45 58 50 31 0a 02 a0 43 05 5c B_PCI0EXP1...C.\ edc0: 2f 04 5f 53 42 5f 50 43 49 30 45 58 50 32 50 53 /._SB_PCI0EXP2PS edd0: 5f 5f 70 0a 01 5c 2f 04 5f 53 42 5f 50 43 49 30 __p..\/._SB_PCI0 ede0: 45 58 50 32 50 53 5f 5f 70 0a 01 5c 2f 04 5f 53 EXP2PS__p..\/._S edf0: 42 5f 50 43 49 30 45 58 50 32 50 4d 43 53 86 5c B_PCI0EXP2PMCS.\ ee00: 2f 03 5f 53 42 5f 50 43 49 30 45 58 50 32 0a 02 /._SB_PCI0EXP2.. ee10: a0 43 05 5c 2f 04 5f 53 42 5f 50 43 49 30 45 58 .C.\/._SB_PCI0EX ee20: 50 33 50 53 5f 5f 70 0a 01 5c 2f 04 5f 53 42 5f P3PS__p..\/._SB_ ee30: 50 43 49 30 45 58 50 33 50 53 5f 5f 70 0a 01 5c PCI0EXP3PS__p..\ ee40: 2f 04 5f 53 42 5f 50 43 49 30 45 58 50 33 50 4d /._SB_PCI0EXP3PM ee50: 43 53 86 5c 2f 03 5f 53 42 5f 50 43 49 30 45 58 CS.\/._SB_PCI0EX ee60: 50 33 0a 02 14 41 13 5f 4c 30 31 00 a0 44 09 5c P3...A._L01..D.\ ee70: 2f 04 5f 53 42 5f 50 43 49 30 45 58 50 31 48 50 /._SB_PCI0EXP1HP ee80: 43 53 5b 22 0a 64 70 0a 01 5c 2f 04 5f 53 42 5f CS[".dp..\/._SB_ ee90: 50 43 49 30 45 58 50 31 48 50 43 53 a0 44 06 5c PCI0EXP1HPCS.D.\ eea0: 2f 04 5f 53 42 5f 50 43 49 30 45 58 50 31 50 44 /._SB_PCI0EXP1PD eeb0: 43 5f 70 0a 01 5c 2f 04 5f 53 42 5f 50 43 49 30 C_p..\/._SB_PCI0 eec0: 45 58 50 31 50 44 43 5f 70 5c 2f 04 5f 53 42 5f EXP1PDC_p\/._SB_ eed0: 50 43 49 30 45 58 50 31 50 44 53 5f 5c 2f 04 5f PCI0EXP1PDS_\/._ eee0: 53 42 5f 50 43 49 30 45 58 50 31 50 44 53 46 86 SB_PCI0EXP1PDSF. eef0: 5c 2f 03 5f 53 42 5f 50 43 49 30 45 58 50 31 0a \/._SB_PCI0EXP1. ef00: 00 a0 44 09 5c 2f 04 5f 53 42 5f 50 43 49 30 45 ..D.\/._SB_PCI0E ef10: 58 50 33 48 50 43 53 5b 22 0a 64 70 0a 01 5c 2f XP3HPCS[".dp..\/ ef20: 04 5f 53 42 5f 50 43 49 30 45 58 50 33 48 50 43 ._SB_PCI0EXP3HPC ef30: 53 a0 44 06 5c 2f 04 5f 53 42 5f 50 43 49 30 45 S.D.\/._SB_PCI0E ef40: 58 50 33 50 44 43 5f 70 0a 01 5c 2f 04 5f 53 42 XP3PDC_p..\/._SB ef50: 5f 50 43 49 30 45 58 50 33 50 44 43 5f 70 5c 2f _PCI0EXP3PDC_p\/ ef60: 04 5f 53 42 5f 50 43 49 30 45 58 50 33 50 44 53 ._SB_PCI0EXP3PDS ef70: 5f 5c 2f 04 5f 53 42 5f 50 43 49 30 45 58 50 33 _\/._SB_PCI0EXP3 ef80: 50 44 53 46 86 5c 2f 03 5f 53 42 5f 50 43 49 30 PDSF.\/._SB_PCI0 ef90: 45 58 50 33 0a 00 14 4b 04 5f 4c 30 32 00 70 0a EXP3...K._L02.p. efa0: 00 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ efb0: 53 57 47 45 a0 2d 90 5c 43 57 55 45 7b 5c 53 57 SWGE.-.\CWUE{\SW efc0: 47 50 0a 02 00 7b 5c 53 57 47 50 80 0a 02 00 5c GP...{\SWGP....\ efd0: 53 57 47 50 a0 0d 5c 4f 53 43 34 5c 50 4e 54 46 SWGP..\OSC4\PNTF efe0: 0a 81 14 47 04 5f 4c 30 36 00 a0 27 5c 2f 04 5f ...G._L06..'\/._ eff0: 53 42 5f 50 43 49 30 56 49 44 5f 47 53 53 45 5c SB_PCI0VID_GSSE\ f000: 2f 04 5f 53 42 5f 50 43 49 30 56 49 44 5f 47 53 /._SB_PCI0VID_GS f010: 43 49 a1 17 70 0a 01 5c 2f 04 5f 53 42 5f 50 43 CI..p..\/._SB_PC f020: 49 30 4c 50 43 5f 53 43 49 53 14 46 07 5f 4c 31 I0LPC_SCIS.F._L1 f030: 36 00 a0 45 04 5c 2f 05 5f 53 42 5f 50 43 49 30 6..E.\/._SB_PCI0 f040: 50 45 47 5f 56 49 44 5f 49 53 4f 50 a0 2b 92 5c PEG_VID_ISOP.+.\ f050: 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 58 48 /._SB_PCI0LPC_XH f060: 50 44 86 5c 2f 04 5f 53 42 5f 50 43 49 30 50 45 PD.\/._SB_PCI0PE f070: 47 5f 56 49 44 5f 0a 81 7f 5c 2f 04 5f 53 42 5f G_VID_...\/._SB_ f080: 50 43 49 30 4c 50 43 5f 58 48 50 44 0a 01 5c 2f PCI0LPC_XHPD..\/ f090: 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f 58 48 50 ._SB_PCI0LPC_XHP f0a0: 44 10 4d 58 5c 2f 05 5f 53 42 5f 50 43 49 30 4c D.MX\/._SB_PCI0L f0b0: 50 43 5f 45 43 5f 5f 48 4b 45 59 14 48 0c 4d 48 PC_EC__HKEY.H.MH f0c0: 51 54 01 a0 4d 0b 90 5c 57 4e 54 46 5c 54 41 54 QT..M..\WNTF\TAT f0d0: 43 a0 0e 93 68 0a 00 70 5c 54 41 54 43 60 a4 60 C...h..p\TATC`.` f0e0: a1 40 0a a0 4b 04 93 68 0a 01 70 5c 54 44 46 41 .@..K..h..p\TDFA f0f0: 60 72 60 79 5c 54 44 54 41 0a 04 00 60 72 60 79 `r`y\TDTA...`r`y f100: 5c 54 44 46 44 0a 08 00 60 72 60 79 5c 54 44 54 \TDFD...`r`y\TDT f110: 44 0a 0c 00 60 72 60 79 5c 54 4e 46 54 0a 10 00 D...`r`y\TNFT... f120: 60 72 60 79 5c 54 4e 54 54 0a 14 00 60 a4 60 a1 `r`y\TNTT...`.`. f130: 41 05 a0 32 93 68 0a 02 70 5c 54 43 46 41 60 72 A..2.h..p\TCFA`r f140: 60 79 5c 54 43 54 41 0a 04 00 60 72 60 79 5c 54 `y\TCTA...`r`y\T f150: 43 46 44 0a 08 00 60 72 60 79 5c 54 43 54 44 0a CFD...`r`y\TCTD. f160: 0c 00 60 a4 60 a1 1b a0 05 93 68 0a 03 a1 13 a0 ..`.`.....h..... f170: 0e 93 68 0a 04 70 5c 54 41 54 57 60 a4 60 a1 02 ..h..p\TATW`.`.. f180: a3 a4 0a 00 14 46 25 4d 48 41 54 01 a0 4b 24 90 .....F%MHAT..K$. f190: 5c 57 4e 54 46 5c 54 41 54 43 70 7b 68 0a ff 00 \WNTF\TATCp{h... f1a0: 60 a0 0a 92 41 54 4d 56 60 a4 0a 00 70 7b 7a 68 `...ATMV`...p{zh f1b0: 0a 08 00 0a ff 00 60 a0 0a 92 41 54 4d 56 60 a4 ......`...ATMV`. f1c0: 0a 00 70 7b 68 0a 0f 00 5c 54 43 46 41 70 7b 7a ..p{h...\TCFAp{z f1d0: 68 0a 04 00 0a 0f 00 5c 54 43 54 41 70 7b 7a 68 h......\TCTAp{zh f1e0: 0a 08 00 0a 0f 00 5c 54 43 46 44 70 7b 7a 68 0a ......\TCFDp{zh. f1f0: 0c 00 0a 0f 00 5c 54 43 54 44 41 54 4d 43 a0 4e .....\TCTDATMC.N f200: 07 7b 5c 50 50 4d 46 0a 80 00 70 5c 46 54 50 53 .{\PPMF...p\FTPS f210: 61 a0 30 7b 68 0c 00 00 01 00 00 a0 1c 5c 2e 5f a.0{h........\._ f220: 50 52 5f 43 4c 56 4c 70 5c 43 54 44 50 5c 46 54 PR_CLVLp\CTDP\FT f230: 50 53 75 5c 46 54 50 53 a1 09 70 0a 01 5c 46 54 PSu\FTPS..p..\FT f240: 50 53 a1 22 a0 16 5c 2e 5f 50 52 5f 43 4c 56 4c PS."..\._PR_CLVL f250: 70 5c 43 54 44 50 5c 46 54 50 53 a1 09 70 0a 00 p\CTDP\FTPS..p.. f260: 5c 46 54 50 53 a0 17 7f 5c 46 54 50 53 61 00 a0 \FTPS...\FTPSa.. f270: 0d 5c 4f 53 50 58 5c 50 4e 54 46 0a 80 70 5c 53 .\OSPX\PNTF..p\S f280: 43 52 4d 62 a0 2b 7b 68 0c 00 00 04 00 00 70 0a CRMb.+{h......p. f290: 01 5c 53 43 52 4d 70 0a 07 5c 2f 05 5f 53 42 5f .\SCRMp..\/._SB_ f2a0: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 46 53 50 PCI0LPC_EC__HFSP f2b0: a1 23 70 0a 00 5c 53 43 52 4d 70 0a 80 5c 2f 05 .#p..\SCRMp..\/. f2c0: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ f2d0: 48 46 53 50 70 5c 45 54 41 55 63 a0 11 7b 68 0c HFSPp\ETAUc..{h. f2e0: 00 00 02 00 00 70 0a 01 5c 45 54 41 55 a1 09 70 .....p..\ETAU..p f2f0: 0a 00 5c 45 54 41 55 a0 4d 0d 5c 4d 54 41 55 a0 ..\ETAU.M.\MTAU. f300: 45 0d 91 7f 5c 53 43 52 4d 62 00 7f 5c 45 54 41 E...\SCRMb..\ETA f310: 55 63 00 70 0b e8 03 64 a2 25 5c 2f 05 5f 53 42 Uc.p...d.%\/._SB f320: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 50 49 42 _PCI0LPC_EC__PIB f330: 53 5b 22 0a 01 76 64 a0 06 92 64 a4 0a 00 70 0a S["..vd...d...p. f340: 01 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ f350: 45 43 5f 5f 50 4c 53 4c a0 26 7b 68 0c 00 00 06 EC__PLSL.&{h.... f360: 00 00 70 5c 4d 54 41 55 5c 2f 05 5f 53 42 5f 50 ..p\MTAU\/._SB_P f370: 43 49 30 4c 50 43 5f 45 43 5f 5f 50 4c 54 55 a1 CI0LPC_EC__PLTU. f380: 1b 70 0a 1c 5c 2f 05 5f 53 42 5f 50 43 49 30 4c .p..\/._SB_PCI0L f390: 50 43 5f 45 43 5f 5f 50 4c 54 55 70 5c 50 4c 31 PC_EC__PLTUp\PL1 f3a0: 4c 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f L\/._SB_PCI0LPC_ f3b0: 45 43 5f 5f 50 4c 4c 53 70 5c 50 4c 31 4d 5c 2f EC__PLLSp\PL1M\/ f3c0: 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ f3d0: 5f 50 4c 4d 53 a4 0a 01 a4 0a 00 14 42 12 4d 48 _PLMS.......B.MH f3e0: 47 54 01 a0 47 11 90 5c 57 4e 54 46 5c 54 41 54 GT..G..\WNTF\TAT f3f0: 43 70 0c 00 00 00 01 60 a0 12 7b 5c 50 50 4d 46 Cp.....`..{\PPMF f400: 0a 80 00 7d 60 0c 00 00 00 08 60 a0 0e 5c 53 43 ...}`.....`..\SC f410: 52 4d 7d 60 0c 00 00 00 10 60 a0 0e 5c 45 54 41 RM}`.....`..\ETA f420: 55 7d 60 0c 00 00 00 04 60 a0 14 95 5c 43 54 44 U}`.....`...\CTD f430: 50 5c 46 54 50 53 7d 60 0c 00 00 00 02 60 72 60 P\FTPS}`.....`r` f440: 79 5c 54 53 46 54 0a 10 00 60 72 60 79 5c 54 53 y\TSFT...`r`y\TS f450: 54 54 0a 14 00 60 70 7b 68 0a ff 00 61 a0 0f 92 TT...`p{h...a... f460: 41 54 4d 56 61 7d 60 0b ff ff 60 a4 60 70 7b 68 ATMVa}`...`.`p{h f470: 0a 0f 00 61 a0 0d 93 61 0a 00 72 60 5c 54 49 46 ...a...a..r`\TIF f480: 30 60 a1 26 a0 0d 93 61 0a 01 72 60 5c 54 49 46 0`.&...a..r`\TIF f490: 31 60 a1 16 a0 0d 93 61 0a 02 72 60 5c 54 49 46 1`.....a..r`\TIF f4a0: 32 60 a1 06 72 60 0a ff 60 70 7b 7a 68 0a 04 00 2`..r`..`p{zh... f4b0: 0a 0f 00 61 a0 11 93 61 0a 00 72 60 79 5c 54 49 ...a...a..r`y\TI f4c0: 54 30 0a 08 00 60 a1 32 a0 11 93 61 0a 01 72 60 T0...`.2...a..r` f4d0: 79 5c 54 49 54 31 0a 08 00 60 a1 1e a0 11 93 61 y\TIT1...`.....a f4e0: 0a 02 72 60 79 5c 54 49 54 32 0a 08 00 60 a1 0a ..r`y\TIT2...`.. f4f0: 72 60 79 0a ff 0a 08 00 60 a4 60 a4 0a 00 14 4c r`y.....`.`....L f500: 04 41 54 4d 56 01 70 7b 68 0a 0f 00 61 70 5c 54 .ATMV.p{h...ap\T f510: 4e 46 54 60 a0 08 92 95 61 60 a4 0a 00 70 7b 7a NFT`....a`...p{z f520: 68 0a 04 00 0a 0f 00 62 70 5c 54 4e 54 54 60 a0 h......bp\TNTT`. f530: 08 92 95 62 60 a4 0a 00 a0 0f 5c 54 41 54 4c a0 ...b`.....\TATL. f540: 08 7f 61 62 00 a4 0a 00 a4 0a 01 14 43 0e 4d 48 ..ab........C.MH f550: 43 54 01 70 0a 00 60 a0 14 5c 53 50 45 4e 70 5c CT.p..`..\SPENp\ f560: 4c 57 53 54 60 75 60 79 60 0a 08 60 70 0a 08 61 LWST`u`y`..`p..a f570: 79 61 0a 08 61 a0 4d 04 93 68 0c ff ff ff ff 7d ya..a.M..h.....} f580: 61 5c 54 50 43 52 61 a0 34 5c 53 50 45 4e 7d 60 a\TPCRa.4\SPEN}` f590: 5c 50 50 43 52 60 a0 12 92 90 5c 50 50 4d 46 0c \PPCR`....\PPMF. f5a0: 00 00 00 02 7d 61 0a 80 61 a0 12 92 90 5c 50 50 ....}a..a....\PP f5b0: 4d 46 0c 00 00 00 08 7d 61 0a 40 61 a1 06 7d 61 MF.....}a.@a..}a f5c0: 0a c0 61 a1 40 06 a0 35 90 5c 4f 53 50 58 5c 53 ..a.@..5.\OSPX\S f5d0: 50 45 4e 7b 68 0c 00 00 ff 00 62 7a 62 0a 10 62 PEN{h.....bzb..b f5e0: 7d 60 62 60 a0 17 7f 62 5c 50 50 43 52 00 70 62 }`b`...b\PPCR.pb f5f0: 5c 50 50 43 41 5c 50 4e 54 46 0a 80 a0 27 5c 57 \PPCA\PNTF...'\W f600: 56 49 53 7b 68 0a 1f 62 7d 61 62 61 a0 17 7f 62 VIS{h..b}aba...b f610: 5c 54 50 43 52 00 70 62 5c 54 50 43 41 5c 50 4e \TPCR.pb\TPCA\PN f620: 54 46 0a 82 79 60 0a 10 60 7d 60 61 60 a4 60 10 TF..y`..`}`a`.`. f630: 42 15 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 B.\/._SB_PCI0LPC f640: 5f 45 43 5f 5f 14 4c 13 41 54 4d 43 00 a0 44 13 _EC__.L.ATMC..D. f650: 90 5c 57 4e 54 46 5c 54 41 54 43 a0 4f 06 48 50 .\WNTF\TATC.O.HP f660: 41 43 70 5c 54 43 46 41 60 70 5c 54 43 54 41 61 ACp\TCFA`p\TCTAa f670: 70 7d 79 61 0a 04 00 60 00 62 7f 62 41 54 4d 58 p}ya...`.b.bATMX f680: 63 70 62 41 54 4d 58 a0 1f 93 5c 54 43 54 41 0a cpbATMX...\TCTA. f690: 00 70 5c 54 43 52 30 5c 54 43 52 54 70 5c 54 50 .p\TCR0\TCRTp\TP f6a0: 53 30 5c 54 50 53 56 a1 23 a0 1f 93 5c 54 43 54 S0\TPSV.#...\TCT f6b0: 41 0a 01 70 5c 54 43 52 31 5c 54 43 52 54 70 5c A..p\TCR1\TCRTp\ f6c0: 54 50 53 31 5c 54 50 53 56 a1 01 a1 4b 06 70 5c TPS1\TPSV...K.p\ f6d0: 54 43 46 44 60 70 5c 54 43 54 44 61 70 7d 79 61 TCFD`p\TCTDap}ya f6e0: 0a 04 00 60 00 62 7f 62 41 54 4d 58 63 70 62 41 ...`.b.bATMXcpbA f6f0: 54 4d 58 a0 1f 93 5c 54 43 54 44 0a 00 70 5c 54 TMX...\TCTD..p\T f700: 43 52 30 5c 54 43 52 54 70 5c 54 50 53 30 5c 54 CR0\TCRTp\TPS0\T f710: 50 53 56 a1 23 a0 1f 93 5c 54 43 54 44 0a 01 70 PSV.#...\TCTD..p f720: 5c 54 43 52 31 5c 54 43 52 54 70 5c 54 50 53 31 \TCR1\TCRTp\TPS1 f730: 5c 54 50 53 56 a1 01 a0 3d 63 a0 3a 5c 2f 06 5f \TPSV...=c.:\/._ f740: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 SB_PCI0LPC_EC__H f750: 4b 45 59 44 48 4b 43 5c 2f 06 5f 53 42 5f 50 43 KEYDHKC\/._SB_PC f760: 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d 48 I0LPC_EC__HKEYMH f770: 4b 51 0b 30 60 86 5c 2e 5f 54 5a 5f 54 48 4d 30 KQ.0`.\._TZ_THM0 f780: 0a 81 10 4b 14 5c 5f 54 5a 5f 5b 85 46 11 54 48 ...K.\_TZ_[.F.TH f790: 4d 30 14 0c 5f 43 52 54 00 a4 5c 54 43 52 54 14 M0.._CRT..\TCRT. f7a0: 42 10 5f 54 4d 50 00 a0 42 05 5c 48 38 44 52 70 B._TMP..B.\H8DRp f7b0: 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 \/._SB_PCI0LPC_E f7c0: 43 5f 5f 54 4d 50 30 60 70 5c 2f 05 5f 53 42 5f C__TMP0`p\/._SB_ f7d0: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 54 53 4c 32 PCI0LPC_EC__TSL2 f7e0: 61 70 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 ap\/._SB_PCI0LPC f7f0: 5f 45 43 5f 5f 54 53 4c 33 62 a1 24 70 5c 52 42 _EC__TSL3b.$p\RB f800: 45 43 0a 78 60 70 7b 5c 52 42 45 43 0a 8a 0a 7f EC.x`p{\RBEC.... f810: 00 61 70 7b 5c 52 42 45 43 0a 8b 0a 7f 00 62 a0 .ap{\RBEC.....b. f820: 09 93 60 0a 80 70 0a 30 60 7d 79 5c 2f 04 5f 53 ..`..p.0`}y\/._S f830: 42 5f 50 43 49 30 4c 50 43 5f 50 49 44 48 0a 02 B_PCI0LPC_PIDH.. f840: 00 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ f850: 50 49 44 4c 63 a0 0a 95 63 0a 04 7b 62 0a 00 62 PIDLc...c..{b..b f860: a0 0e 62 5c 54 53 44 4c a4 43 32 4b 5f 0a 80 a0 ..b\TSDL.C2K_... f870: 2c 92 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 ,.\/._SB_PCI0LPC f880: 5f 45 43 5f 5f 48 4b 45 59 44 48 4b 43 a0 0e 61 _EC__HKEYDHKC..a f890: 5c 54 53 44 4c a4 43 32 4b 5f 0a 80 a4 43 32 4b \TSDL.C2K_...C2K f8a0: 5f 60 14 2b 43 32 4b 5f 01 72 77 68 0a 0a 00 0b _`.+C2K_.rwh.... f8b0: ac 0a 60 a0 0c 92 94 60 0b ac 0a 70 0b b8 0b 60 ..`....`...p...` f8c0: a0 0b 94 60 0b ac 0f 70 0b b8 0b 60 a4 60 10 41 ...`...p...`.`.A f8d0: 0f 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ f8e0: 45 43 5f 5f 14 4b 0d 5f 51 34 30 00 86 5c 2e 5f EC__.K._Q40..\._ f8f0: 54 5a 5f 54 48 4d 30 0a 80 a0 1f 5c 48 38 44 52 TZ_THM0....\H8DR f900: 70 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f p\/._SB_PCI0LPC_ f910: 45 43 5f 5f 54 53 4c 32 61 a1 0e 70 7b 5c 52 42 EC__TSL2a..p{\RB f920: 45 43 0a 8a 0a 7f 00 61 a0 3d 5c 2f 06 5f 53 42 EC.....a.=\/._SB f930: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 _PCI0LPC_EC__HKE f940: 59 44 48 4b 43 a0 20 61 5c 2f 06 5f 53 42 5f 50 YDHKC. a\/._SB_P f950: 43 49 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 4d CI0LPC_EC__HKEYM f960: 48 4b 51 0b 22 60 a0 06 56 49 47 44 a3 a1 06 5c HKQ."`..VIGD...\ f970: 56 54 48 52 a0 4b 04 7b 5c 50 50 4d 46 0a 01 00 VTHR.K.{\PPMF... f980: a0 0d 5c 4f 53 50 58 5c 50 4e 54 46 0a 80 a1 31 ..\OSPX\PNTF...1 f990: 70 7b 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 p{\/._SB_PCI0LPC f9a0: 5f 45 43 5f 5f 54 53 4c 30 0a 77 00 62 a0 09 62 _EC__TSL0.w.b..b f9b0: 5c 53 54 45 50 0a 09 a1 08 5c 53 54 45 50 0a 0a \STEP....\STEP.. f9c0: 08 47 50 49 43 0a 00 14 0d 5f 50 49 43 01 70 68 .GPIC...._PIC.ph f9d0: 5c 47 50 49 43 5b 80 53 4d 49 30 01 0a b2 0a 01 \GPIC[.SMI0..... f9e0: 5b 81 0b 53 4d 49 30 01 41 50 4d 43 08 5b 81 28 [..SMI0.APMC.[.( f9f0: 4d 4e 56 53 00 00 80 e0 07 43 4d 44 5f 08 45 52 MNVS.....CMD_.ER fa00: 52 5f 20 50 41 52 30 20 50 41 52 31 20 50 41 52 R_ PAR0 PAR1 PAR fa10: 32 20 50 41 52 33 20 5b 01 4d 53 4d 49 07 14 4d 2 PAR3 [.MSMI..M fa20: 05 53 4d 49 5f 05 5b 23 4d 53 4d 49 ff ff 70 68 .SMI_.[#MSMI..ph fa30: 43 4d 44 5f 70 0a 01 45 52 52 5f 70 69 50 41 52 CMD_p..ERR_piPAR fa40: 30 70 6a 50 41 52 31 70 6b 50 41 52 32 70 6c 50 0pjPAR1pkPAR2plP fa50: 41 52 33 70 0a f5 41 50 4d 43 a2 13 93 45 52 52 AR3p..APMC...ERR fa60: 5f 0a 01 5b 22 0a 01 70 0a f5 41 50 4d 43 70 50 _..["..p..APMCpP fa70: 41 52 30 60 5b 27 4d 53 4d 49 a4 60 14 14 52 50 AR0`['MSMI.`..RP fa80: 43 49 01 a4 53 4d 49 5f 0a 00 0a 00 68 0a 00 0a CI..SMI_....h... fa90: 00 14 12 57 50 43 49 02 53 4d 49 5f 0a 00 0a 01 ...WPCI.SMI_.... faa0: 68 69 0a 00 14 11 4d 50 43 49 03 53 4d 49 5f 0a hi....MPCI.SMI_. fab0: 00 0a 02 68 69 6a 14 14 52 42 45 43 01 a4 53 4d ...hij..RBEC..SM fac0: 49 5f 0a 00 0a 03 68 0a 00 0a 00 14 12 57 42 45 I_....h......WBE fad0: 43 02 53 4d 49 5f 0a 00 0a 04 68 69 0a 00 14 11 C.SMI_....hi.... fae0: 4d 42 45 43 03 53 4d 49 5f 0a 00 0a 05 68 69 6a MBEC.SMI_....hij faf0: 14 14 52 49 53 41 01 a4 53 4d 49 5f 0a 00 0a 06 ..RISA..SMI_.... fb00: 68 0a 00 0a 00 14 12 57 49 53 41 02 53 4d 49 5f h......WISA.SMI_ fb10: 0a 00 0a 07 68 69 0a 00 14 11 4d 49 53 41 03 53 ....hi....MISA.S fb20: 4d 49 5f 0a 00 0a 08 68 69 6a 14 14 56 45 58 50 MI_....hij..VEXP fb30: 00 53 4d 49 5f 0a 01 0a 00 0a 00 0a 00 0a 00 14 .SMI_........... fb40: 13 56 55 50 53 01 53 4d 49 5f 0a 01 0a 01 68 0a .VUPS.SMI_....h. fb50: 00 0a 00 14 12 56 53 44 53 02 53 4d 49 5f 0a 01 .....VSDS.SMI_.. fb60: 0a 02 68 69 0a 00 14 14 56 44 44 43 00 53 4d 49 ..hi....VDDC.SMI fb70: 5f 0a 01 0a 03 0a 00 0a 00 0a 00 14 13 56 56 50 _............VVP fb80: 44 01 53 4d 49 5f 0a 01 0a 04 68 0a 00 0a 00 14 D.SMI_....h..... fb90: 13 56 4e 52 53 01 53 4d 49 5f 0a 01 0a 05 68 0a .VNRS.SMI_....h. fba0: 00 0a 00 14 15 47 4c 50 57 00 a4 53 4d 49 5f 0a .....GLPW..SMI_. fbb0: 01 0a 06 0a 00 0a 00 0a 00 14 13 56 53 4c 44 01 ...........VSLD. fbc0: 53 4d 49 5f 0a 01 0a 07 68 0a 00 0a 00 14 14 56 SMI_....h......V fbd0: 45 56 54 01 a4 53 4d 49 5f 0a 01 0a 08 68 0a 00 EVT..SMI_....h.. fbe0: 0a 00 14 15 56 54 48 52 00 a4 53 4d 49 5f 0a 01 ....VTHR..SMI_.. fbf0: 0a 09 0a 00 0a 00 0a 00 14 13 56 42 52 43 01 53 ..........VBRC.S fc00: 4d 49 5f 0a 01 0a 0a 68 0a 00 0a 00 14 15 56 42 MI_....h......VB fc10: 52 47 00 a4 53 4d 49 5f 0a 01 0a 0e 0a 00 0a 00 RG..SMI_........ fc20: 0a 00 14 13 56 43 4d 53 02 a4 53 4d 49 5f 0a 01 ....VCMS..SMI_.. fc30: 0a 0b 68 69 0a 00 14 15 56 42 54 44 00 a4 53 4d ..hi....VBTD..SM fc40: 49 5f 0a 01 0a 0f 0a 00 0a 00 0a 00 14 13 56 48 I_............VH fc50: 59 42 02 a4 53 4d 49 5f 0a 01 0a 10 68 69 0a 00 YB..SMI_....hi.. fc60: 14 13 56 44 59 4e 02 a4 53 4d 49 5f 0a 01 0a 11 ..VDYN..SMI_.... fc70: 68 69 0a 00 14 14 55 43 4d 53 01 a4 53 4d 49 5f hi....UCMS..SMI_ fc80: 0a 02 68 0a 00 0a 00 0a 00 14 13 42 48 44 50 02 ..h........BHDP. fc90: a4 53 4d 49 5f 0a 03 0a 00 68 69 0a 00 14 13 53 .SMI_....hi....S fca0: 54 45 50 01 53 4d 49 5f 0a 04 68 0a 00 0a 00 0a TEP.SMI_..h..... fcb0: 00 14 14 54 52 41 50 00 53 4d 49 5f 0a 05 0a 00 ...TRAP.SMI_.... fcc0: 0a 00 0a 00 0a 00 14 14 43 42 52 49 00 53 4d 49 ........CBRI.SMI fcd0: 5f 0a 05 0a 01 0a 00 0a 00 0a 00 14 15 42 43 48 _............BCH fce0: 4b 00 a4 53 4d 49 5f 0a 05 0a 04 0a 00 0a 00 0a K..SMI_......... fcf0: 00 14 14 42 59 52 53 00 53 4d 49 5f 0a 05 0a 05 ...BYRS.SMI_.... fd00: 0a 00 0a 00 0a 00 14 14 4c 43 48 4b 01 a4 53 4d ........LCHK..SM fd10: 49 5f 0a 05 0a 06 68 0a 00 0a 00 14 13 41 53 53 I_....h......ASS fd20: 49 01 53 4d 49 5f 0a 05 0a 07 68 0a 00 0a 00 14 I.SMI_....h..... fd30: 15 44 45 53 53 00 a4 53 4d 49 5f 0a 05 0a 08 0a .DESS..SMI_..... fd40: 00 0a 00 0a 00 14 14 42 4c 54 48 01 a4 53 4d 49 .......BLTH..SMI fd50: 5f 0a 06 68 0a 00 0a 00 0a 00 14 13 50 52 53 4d _..h........PRSM fd60: 02 a4 53 4d 49 5f 0a 07 0a 00 68 69 0a 00 14 13 ..SMI_....hi.... fd70: 49 46 52 53 02 a4 53 4d 49 5f 0a 07 0a 01 68 69 IFRS..SMI_....hi fd80: 0a 00 14 14 54 44 50 43 01 a4 53 4d 49 5f 0a 07 ....TDPC..SMI_.. fd90: 0a 02 68 0a 00 0a 00 14 14 57 47 53 56 01 a4 53 ..h......WGSV..S fda0: 4d 49 5f 0a 09 68 0a 00 0a 00 0a 00 14 42 05 53 MI_..h.......B.S fdb0: 57 54 54 01 a0 4a 04 53 4d 49 5f 0a 0a 0a 02 68 WTT..J.SMI_....h fdc0: 0a 00 0a 00 a0 3a 5c 2f 06 5f 53 42 5f 50 43 49 .....:\/._SB_PCI fdd0: 30 4c 50 43 5f 45 43 5f 5f 48 4b 45 59 44 48 4b 0LPC_EC__HKEYDHK fde0: 43 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f C\/._SB_PCI0LPC_ fdf0: 45 43 5f 5f 48 4b 45 59 4d 48 4b 51 0b 30 60 14 EC__HKEYMHKQ.0`. fe00: 15 54 53 44 4c 00 a4 53 4d 49 5f 0a 0a 0a 03 0a .TSDL..SMI_..... fe10: 00 0a 00 0a 00 14 13 54 50 48 59 01 53 4d 49 5f .......TPHY.SMI_ fe20: 0a 0c 68 0a 00 0a 00 0a 00 14 14 43 53 55 4d 01 ..h........CSUM. fe30: a4 53 4d 49 5f 0a 0e 68 0a 00 0a 00 0a 00 14 14 .SMI_..h........ fe40: 4e 56 53 53 01 a4 53 4d 49 5f 0a 0f 68 0a 00 0a NVSS..SMI_..h... fe50: 00 0a 00 14 13 57 4d 49 53 02 a4 53 4d 49 5f 0a .....WMIS..SMI_. fe60: 10 68 69 0a 00 0a 00 14 14 41 57 4f 4e 01 a4 53 .hi......AWON..S fe70: 4d 49 5f 0a 12 68 0a 00 0a 00 0a 00 14 2f 50 4d MI_..h......./PM fe80: 4f 4e 02 70 87 68 60 08 54 53 54 52 11 02 60 70 ON.p.h`.TSTR..`p fe90: 68 54 53 54 52 70 54 53 54 52 5c 44 42 47 53 53 hTSTRpTSTR\DBGSS fea0: 4d 49 5f 0a 11 69 0a 00 0a 00 0a 00 14 14 55 41 MI_..i........UA feb0: 57 53 01 a4 53 4d 49 5f 0a 13 68 0a 00 0a 00 0a WS..SMI_..h..... fec0: 00 14 14 42 46 57 43 01 a4 53 4d 49 5f 0a 14 0a ...BFWC..SMI_... fed0: 00 68 0a 00 0a 00 14 15 42 46 57 50 00 a4 53 4d .h......BFWP..SM fee0: 49 5f 0a 14 0a 01 0a 00 0a 00 0a 00 14 14 42 46 I_............BF fef0: 57 4c 00 53 4d 49 5f 0a 14 0a 02 0a 00 0a 00 0a WL.SMI_......... ff00: 00 14 13 42 46 57 47 01 53 4d 49 5f 0a 14 0a 03 ...BFWG.SMI_.... ff10: 68 0a 00 0a 00 14 13 42 44 4d 43 01 53 4d 49 5f h......BDMC.SMI_ ff20: 0a 14 0a 04 68 0a 00 0a 00 14 13 50 53 49 46 02 ....h......PSIF. ff30: a4 53 4d 49 5f 0a 14 0a 05 68 69 0a 00 14 13 46 .SMI_....hi....F ff40: 4e 53 43 02 a4 53 4d 49 5f 0a 14 0a 06 68 69 0a NSC..SMI_....hi. ff50: 00 14 13 41 55 44 43 02 a4 53 4d 49 5f 0a 14 0a ...AUDC..SMI_... ff60: 07 68 69 0a 00 14 13 53 59 42 43 02 a4 53 4d 49 .hi....SYBC..SMI ff70: 5f 0a 14 0a 08 68 69 0a 00 14 13 4b 42 4c 53 02 _....hi....KBLS. ff80: a4 53 4d 49 5f 0a 14 0a 09 68 69 0a 00 14 14 55 .SMI_....hi....U ff90: 42 49 53 01 a4 53 4d 49 5f 0a 15 0a 00 68 0a 00 BIS..SMI_....h.. ffa0: 0a 00 14 33 44 50 49 4f 02 a0 06 92 68 a4 0a 00 ...3DPIO....h... ffb0: a0 08 94 68 0a f0 a4 0a 00 a0 10 94 68 0a b4 a0 ...h........h... ffc0: 05 69 a4 0a 02 a1 04 a4 0a 01 a0 08 94 68 0a 78 .i...........h.x ffd0: a4 0a 03 a4 0a 04 14 3d 44 55 44 4d 02 a0 06 92 .......=DUDM.... ffe0: 69 a4 0a ff a0 08 94 68 0a 5a a4 0a 00 a0 08 94 i......h.Z...... fff0: 68 0a 3c a4 0a 01 a0 08 94 68 0a 2d a4 0a 02 a0 h.<......h.-.... 10000: 08 94 68 0a 1e a4 0a 03 a0 08 94 68 0a 14 a4 0a ..h........h.... 10010: 04 a4 0a 05 14 28 44 4d 44 4d 02 a0 05 69 a4 0a .....(DMDM...i.. 10020: 00 a0 06 92 68 a4 0a 00 a0 08 94 68 0a 96 a4 0a ....h......h.... 10030: 01 a0 08 94 68 0a 78 a4 0a 02 a4 0a 03 14 41 05 ....h.x.......A. 10040: 55 55 44 4d 02 a0 0a 92 7b 68 0a 04 00 a4 0a 00 UUDM....{h...... 10050: a0 09 7b 69 0a 20 00 a4 0a 14 a0 09 7b 69 0a 10 ..{i. ......{i.. 10060: 00 a4 0a 1e a0 09 7b 69 0a 08 00 a4 0a 2d a0 09 ......{i.....-.. 10070: 7b 69 0a 04 00 a4 0a 3c a0 09 7b 69 0a 02 00 a4 {i.....<..{i.... 10080: 0a 5a a0 09 7b 69 0a 01 00 a4 0a 78 a4 0a 00 14 .Z..{i.....x.... 10090: 48 04 55 4d 44 4d 04 a0 0a 92 7b 68 0a 02 00 a4 H.UMDM....{h.... 100a0: 0a 00 a0 08 7b 69 0a 04 00 a4 6b a0 14 7b 69 0a ....{i....k..{i. 100b0: 02 00 a0 09 92 94 6b 0a 78 a4 0a b4 a1 03 a4 6b ......k.x......k 100c0: a0 14 7b 6a 0a 04 00 a0 09 92 94 6b 0a b4 a4 0a ..{j.......k.... 100d0: f0 a1 03 a4 6b a4 0a 00 14 4b 04 55 50 49 4f 04 ....k....K.UPIO. 100e0: a0 16 92 7b 68 0a 02 00 a0 08 93 6a 0a 02 a4 0a ...{h......j.... 100f0: f0 a1 05 a4 0b 84 03 a0 08 7b 69 0a 02 00 a4 6b .........{i....k 10100: a0 14 7b 69 0a 01 00 a0 09 92 94 6b 0a 78 a4 0a ..{i.......k.x.. 10110: b4 a1 03 a4 6b a0 08 93 6a 0a 02 a4 0a f0 a1 05 ....k...j....... 10120: a4 0b 84 03 14 2d 46 44 4d 41 02 a0 0c 92 93 69 .....-FDMA.....i 10130: 0a ff a4 7d 69 0a 40 00 a0 10 92 95 68 0a 03 a4 ...}i.@.....h... 10140: 7d 74 68 0a 02 00 0a 20 00 a0 05 68 a4 0a 12 a4 }th.... ...h.... 10150: 0a 00 14 1f 46 50 49 4f 01 a0 0c 92 95 68 0a 03 ....FPIO.....h.. 10160: a4 7d 68 0a 08 00 a0 08 93 68 0a 01 a4 0a 01 a4 .}h......h...... 10170: 0a 00 14 4a 05 53 43 4d 50 02 70 87 68 60 a0 08 ...J.SCMP.p.h`.. 10180: 92 93 60 87 69 a4 01 75 60 08 53 54 52 31 11 02 ..`.i..u`.STR1.. 10190: 60 08 53 54 52 32 11 02 60 70 68 53 54 52 31 70 `.STR2..`phSTR1p 101a0: 69 53 54 52 32 70 00 61 a2 22 95 61 60 70 83 88 iSTR2p.a.".a`p.. 101b0: 53 54 52 31 61 00 62 70 83 88 53 54 52 32 61 00 STR1a.bp..STR2a. 101c0: 63 a0 07 92 93 62 63 a4 01 75 61 a4 00 08 53 50 c....bc..ua...SP 101d0: 53 5f 0a 00 08 4f 53 49 46 0a 00 08 57 39 38 46 S_...OSIF...W98F 101e0: 0a 00 08 57 4e 54 46 0a 00 08 57 58 50 46 0a 00 ...WNTF...WXPF.. 101f0: 08 57 56 49 53 0a 00 08 57 49 4e 37 0a 00 08 57 .WVIS...WIN7...W 10200: 53 50 56 0a 00 08 4c 4e 55 58 0a 00 08 48 38 44 SPV...LNUX...H8D 10210: 52 0a 00 08 4d 45 4d 58 0a 00 08 41 43 53 54 0a R...MEMX...ACST. 10220: 00 08 46 4d 42 4c 0a 01 08 46 44 54 50 0a 02 08 ..FMBL...FDTP... 10230: 46 55 50 53 0a 03 08 46 4e 49 44 0a 00 08 52 52 FUPS...FNID...RR 10240: 42 46 0a 00 08 4e 42 43 46 0a 00 08 41 50 49 4e BF...NBCF...APIN 10250: 0a 00 .. FACS @ 0xdaf5a000 0000: 46 41 43 53 40 00 00 00 00 a2 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0xdafe5000 0000: 46 41 43 50 f4 00 00 00 04 50 4c 45 4e 4f 56 4f FACP.....PLENOVO 0010: 54 50 2d 47 32 20 20 20 10 11 00 00 50 54 4c 20 TP-G2 ....PTL 0020: 02 00 00 00 00 a0 f5 da 00 80 fe da 00 02 09 00 ................ 0030: b2 00 00 00 f2 f1 00 f3 00 04 00 00 00 00 00 00 ................ 0040: 04 04 00 00 00 00 00 00 50 04 00 00 08 04 00 00 ........P....... 0050: 20 04 00 00 00 00 00 00 04 02 01 04 10 00 10 f4 ............... 0060: 65 00 e9 03 00 00 00 00 01 03 0d 00 32 13 00 00 e...........2... 0070: ad 46 00 00 01 08 00 00 f9 0c 00 00 00 00 00 00 .F.............. 0080: 06 00 00 00 00 a0 f5 da 00 00 00 00 00 80 fe da ................ 0090: 00 00 00 00 01 20 00 00 00 04 00 00 00 00 00 00 ..... .......... 00a0: 01 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 04 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 50 04 00 00 00 00 00 00 ........P....... 00d0: 01 20 00 00 08 04 00 00 00 00 00 00 01 80 00 00 . .............. 00e0: 20 04 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... SLIC @ 0xdaffd000 0000: 53 4c 49 43 76 01 00 00 01 c3 4c 45 4e 4f 56 4f SLICv.....LENOVO 0010: 54 50 2d 47 32 20 20 20 10 11 00 00 50 54 4c 20 TP-G2 ....PTL 0020: 01 00 00 00 00 00 00 00 9c 00 00 00 06 02 00 00 ................ 0030: 00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00 .$..RSA1........ 0040: 69 16 4a 9f b1 4b 3a fb 80 20 aa af c4 f9 3e c1 i.J..K:.. ....>. 0050: 80 49 ee 6a 65 26 72 1e cd bf 5f 2f 96 d6 c0 0a .I.je&r..._/.... 0060: 92 f5 06 b5 00 b2 3b 29 02 e2 4c 8d c2 f2 bc 41 ......;)..L....A 0070: 77 9c 70 f0 f3 1b 09 d2 63 5a dc a8 83 f8 5e c9 w.p.....cZ....^. 0080: 15 95 f9 fa fd dc 05 b7 4d 67 7f 2d b3 84 33 20 ........Mg.-..3 0090: e1 d1 79 2a a7 6a 77 d1 b6 20 2a 76 42 c5 d5 e9 ..y*.jw.. *vB... 00a0: b6 43 40 55 44 c3 c9 37 99 5f 41 97 70 f3 d1 f6 .C@UD..7._A.p... 00b0: 07 ec 7b 1a 29 a1 c1 f1 91 fd 48 86 6e 3e ce cb ..{.).....H.n>.. 00c0: 01 00 00 00 b6 00 00 00 00 00 02 00 4c 45 4e 4f ............LENO 00d0: 56 4f 54 50 2d 47 32 20 20 20 57 49 4e 44 4f 57 VOTP-G2 WINDOW 00e0: 53 20 01 00 02 00 00 00 00 00 00 00 00 00 00 00 S .............. 00f0: 00 00 00 00 00 00 71 c8 5a 3a 03 f6 43 06 26 ce ......q.Z:..C.&. 0100: b3 7c 04 21 76 ba a3 79 1f 85 8c 96 94 0a 74 be .|.!v..y......t. 0110: bb a4 b8 35 ca fb eb ca 42 2e af 9b 7f 62 ad c9 ...5....B....b.. 0120: ab 2b 59 33 00 ca 3f 17 b4 5d f9 c9 36 38 bc 60 .+Y3..?..]..68.` 0130: 5d c2 ca 84 4a 9b 79 5c ed ad ec b9 93 76 8b 03 ]...J.y\.....v.. 0140: 4a 29 6d 09 29 8b ff c9 e4 aa 37 fa a4 42 57 b7 J)m.).....7..BW. 0150: 88 2e e1 6e 88 4d dc ab 1a e1 4c 26 f7 87 09 24 ...n.M....L&...$ 0160: 32 06 86 f6 5f 9b 9a 0b 3c 32 a0 eb e8 c6 4c f6 2..._...<2....L. 0170: b2 8d c3 65 27 23 ...e'# TCPA @ 0xdaffc000 0000: 54 43 50 41 32 00 00 00 02 f6 50 54 4c 00 00 00 TCPA2.....PTL... 0010: 4c 45 4e 4f 56 4f 00 00 00 00 04 06 4c 4e 56 4f LENOVO......LNVO 0020: 01 00 00 00 00 00 00 00 01 00 00 d0 f6 da 00 00 ................ 0030: 00 00 .. SSDT @ 0xdaffb000 0000: 53 53 44 54 49 02 00 00 01 1d 4c 45 4e 4f 56 4f SSDTI.....LENOVO 0010: 54 50 2d 53 53 44 54 32 00 02 00 00 49 4e 54 4c TP-SSDT2....INTL 0020: 09 11 06 20 10 0e 5c 00 14 0a 4b 4f 55 32 00 5b ... ..\...KOU2.[ 0030: 21 0a 64 10 4f 0c 5c 2f 04 5f 53 42 5f 50 43 49 !.d.O.\/._SB_PCI 0040: 30 56 49 44 5f 4c 43 44 30 14 26 5f 42 43 4c 00 0VID_LCD0.&_BCL. 0050: 70 0a 01 5c 4e 42 43 46 a4 5c 2f 05 5f 53 42 5f p..\NBCF.\/._SB_ 0060: 50 43 49 30 4c 50 43 5f 45 43 5f 5f 42 52 54 57 PCI0LPC_EC__BRTW 0070: 14 48 05 5f 42 43 4d 01 70 89 5c 2f 05 5f 53 42 .H._BCM.p.\/._SB 0080: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 42 52 54 _PCI0LPC_EC__BRT 0090: 57 01 68 00 0a 00 0a 02 60 a0 2f 92 93 60 ff 74 W.h.....`./..`.t 00a0: 60 0a 02 61 70 61 5c 42 52 4c 56 5c 2f 05 5f 53 `..apa\BRLV\/._S 00b0: 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 42 52 B_PCI0LPC_EC__BR 00c0: 4e 53 5c 55 43 4d 53 0a 16 14 39 5f 42 51 43 00 NS\UCMS...9_BQC. 00d0: 70 5c 42 52 4c 56 60 72 60 0a 02 61 a0 22 92 94 p\BRLV`r`..a.".. 00e0: 61 0a 11 a4 83 88 5c 2f 05 5f 53 42 5f 50 43 49 a.....\/._SB_PCI 00f0: 30 4c 50 43 5f 45 43 5f 5f 42 52 54 57 61 00 a1 0LPC_EC__BRTWa.. 0100: 03 a4 00 10 45 14 5c 2f 05 5f 53 42 5f 50 43 49 ....E.\/._SB_PCI 0110: 30 50 45 47 5f 56 49 44 5f 4c 43 44 30 14 2d 5f 0PEG_VID_LCD0.-_ 0120: 42 43 4c 00 a0 0e 5c 57 56 49 53 70 0a 01 5c 4e BCL...\WVISp..\N 0130: 42 43 46 a4 5c 2f 05 5f 53 42 5f 50 43 49 30 4c BCF.\/._SB_PCI0L 0140: 50 43 5f 45 43 5f 5f 42 52 54 57 14 45 08 5f 42 PC_EC__BRTW.E._B 0150: 43 4d 01 a0 3a 90 92 93 5c 57 49 4e 37 0a 00 5c CM..:...\WIN7..\ 0160: 2f 05 5f 53 42 5f 50 43 49 30 50 45 47 5f 56 49 /._SB_PCI0PEG_VI 0170: 44 5f 49 53 4f 50 5c 2f 05 5f 53 42 5f 50 43 49 D_ISOP\/._SB_PCI 0180: 30 56 49 44 5f 4c 43 44 30 5f 42 43 4d 68 a1 42 0VID_LCD0_BCMh.B 0190: 04 a0 3f 5c 4e 42 43 46 70 89 5c 2f 05 5f 53 42 ..?\NBCFp.\/._SB 01a0: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 42 52 54 _PCI0LPC_EC__BRT 01b0: 57 01 68 00 0a 00 0a 02 60 a0 17 92 93 60 ff 74 W.h.....`....`.t 01c0: 60 0a 02 61 5c 56 42 52 43 61 70 61 5c 42 52 4c `..a\VBRCapa\BRL 01d0: 56 14 47 07 5f 42 51 43 00 a0 3a 90 92 93 5c 57 V.G._BQC..:...\W 01e0: 49 4e 37 0a 00 5c 2f 05 5f 53 42 5f 50 43 49 30 IN7..\/._SB_PCI0 01f0: 50 45 47 5f 56 49 44 5f 49 53 4f 50 a4 5c 2f 05 PEG_VID_ISOP.\/. 0200: 5f 53 42 5f 50 43 49 30 56 49 44 5f 4c 43 44 30 _SB_PCI0VID_LCD0 0210: 5f 42 51 43 a1 34 70 5c 42 52 4c 56 60 72 60 0a _BQC.4p\BRLV`r`. 0220: 02 61 a0 22 92 94 61 0a 11 a4 83 88 5c 2f 05 5f .a."..a.....\/._ 0230: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 42 SB_PCI0LPC_EC__B 0240: 52 54 57 61 00 a1 03 a4 00 RTWa..... SSDT @ 0xdaffa000 0000: 53 53 44 54 33 00 00 00 01 61 4c 45 4e 4f 56 4f SSDT3....aLENOVO 0010: 54 50 2d 53 53 44 54 31 00 01 00 00 49 4e 54 4c TP-SSDT1....INTL 0020: 09 11 06 20 10 0e 5c 00 14 0a 4b 4f 55 31 00 5b ... ..\...KOU1.[ 0030: 21 0a 64 !.d SSDT @ 0xdaff9000 0000: 53 53 44 54 a8 07 00 00 01 7b 4c 45 4e 4f 56 4f SSDT.....{LENOVO 0010: 53 61 74 61 41 68 63 69 00 10 00 00 49 4e 54 4c SataAhci....INTL 0020: 09 11 06 20 10 43 78 5c 2f 03 5f 53 42 5f 50 43 ... .Cx\/._SB_PC 0030: 49 30 53 41 54 31 5b 82 4a 13 50 52 54 30 08 44 I0SAT1[.J.PRT0.D 0040: 49 50 30 0a 00 08 48 44 54 46 11 11 0a 0e 02 00 IP0...HDTF...... 0050: 00 00 00 a0 ef 00 00 00 00 00 a0 f5 08 45 52 54 .............ERT 0060: 46 11 18 0a 15 02 00 00 00 00 a0 ef 00 00 00 00 F............... 0070: 00 a0 f5 5f 00 00 00 00 a0 ef 08 48 50 54 46 11 ..._.......HPTF. 0080: 18 0a 15 02 00 00 00 00 a0 ef 00 00 00 00 00 a0 ................ 0090: f5 10 03 00 00 00 a0 ef 08 48 58 54 46 11 1f 0a .........HXTF... 00a0: 1c 02 00 00 00 00 a0 ef 00 00 00 00 00 a0 f5 5f ..............._ 00b0: 00 00 00 00 a0 ef 10 03 00 00 00 a0 ef 08 44 44 ..............DD 00c0: 54 46 11 11 0a 0e 00 00 00 00 00 a0 e3 00 00 00 TF.............. 00d0: 00 00 a0 e3 8c 44 44 54 46 0a 01 44 54 41 54 8c .....DDTF..DTAT. 00e0: 44 44 54 46 0a 08 44 54 46 54 08 44 47 54 46 11 DDTF..DTFT.DGTF. 00f0: 18 0a 15 00 00 00 00 00 a0 e3 00 00 00 00 00 a0 ................ 0100: e3 10 03 00 00 00 a0 ef 8c 44 47 54 46 0a 01 47 .........DGTF..G 0110: 54 41 54 8c 44 47 54 46 0a 08 47 54 46 54 08 5f TAT.DGTF..GTFT._ 0120: 41 44 52 0b ff ff 14 34 5f 53 44 44 01 70 0a 00 ADR....4_SDD.p.. 0130: 44 49 50 30 a0 26 93 87 68 0b 00 02 8b 68 0a 9c DIP0.&..h....h.. 0140: 4d 30 37 38 a0 16 90 5c 44 50 50 30 7b 4d 30 37 M078...\DPP0{M07 0150: 38 0a 08 00 70 0a 01 44 49 50 30 14 16 5f 47 54 8...p..DIP0.._GT 0160: 46 00 a0 0a 44 49 50 30 a4 48 50 54 46 a4 48 44 F...DIP0.HPTF.HD 0170: 54 46 5b 82 4a 27 50 52 54 31 08 44 49 50 30 0a TF[.J'PRT1.DIP0. 0180: 00 08 48 44 54 46 11 11 0a 0e 02 00 00 00 00 a0 ..HDTF.......... 0190: ef 00 00 00 00 00 a0 f5 08 45 52 54 46 11 18 0a .........ERTF... 01a0: 15 02 00 00 00 00 a0 ef 00 00 00 00 00 a0 f5 5f ..............._ 01b0: 00 00 00 00 a0 ef 08 48 50 54 46 11 18 0a 15 02 .......HPTF..... 01c0: 00 00 00 00 a0 ef 00 00 00 00 00 a0 f5 10 03 00 ................ 01d0: 00 00 a0 ef 08 48 58 54 46 11 1f 0a 1c 02 00 00 .....HXTF....... 01e0: 00 00 a0 ef 00 00 00 00 00 a0 f5 5f 00 00 00 00 ..........._.... 01f0: a0 ef 10 03 00 00 00 a0 ef 08 44 44 54 46 11 11 ..........DDTF.. 0200: 0a 0e 00 00 00 00 00 a0 e3 00 00 00 00 00 a0 e3 ................ 0210: 8c 44 44 54 46 0a 01 44 54 41 54 8c 44 44 54 46 .DDTF..DTAT.DDTF 0220: 0a 08 44 54 46 54 08 44 47 54 46 11 18 0a 15 00 ..DTFT.DGTF..... 0230: 00 00 00 00 a0 e3 00 00 00 00 00 a0 e3 10 03 00 ................ 0240: 00 00 a0 ef 8c 44 47 54 46 0a 01 47 54 41 54 8c .....DGTF..GTAT. 0250: 44 47 54 46 0a 08 47 54 46 54 14 1e 5f 45 4a 30 DGTF..GTFT.._EJ0 0260: 01 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ 0270: 45 43 5f 5f 42 45 4a 30 68 14 29 5f 53 54 41 00 EC__BEJ0h.)_STA. 0280: a0 1d 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 ..\/._SB_PCI0LPC 0290: 5f 45 43 5f 5f 42 53 54 41 0a 01 a4 0a 0f a1 04 _EC__BSTA....... 02a0: a4 0a 00 08 5f 41 44 52 0c ff ff 01 00 14 4b 09 ...._ADR......K. 02b0: 5f 53 44 44 01 70 0a 00 44 49 50 30 a0 4c 08 93 _SDD.p..DIP0.L.. 02c0: 87 68 0b 00 02 8b 68 0a 9c 4d 30 37 38 8b 68 0a .h....h..M078.h. 02d0: 00 4d 30 30 30 a0 38 7b 4d 30 30 30 0b 00 c0 00 .M000.8{M000.... 02e0: a0 2d 92 7b 4d 30 30 30 0b 00 40 00 70 0a 03 5c .-.{M000..@.p..\ 02f0: 49 44 45 54 70 0a 03 5c 2f 05 5f 53 42 5f 50 43 IDETp..\/._SB_PC 0300: 49 30 4c 50 43 5f 45 43 5f 5f 42 44 45 56 a1 23 I0LPC_EC__BDEV.# 0310: 70 0a 06 5c 49 44 45 54 70 0a 06 5c 2f 05 5f 53 p..\IDETp..\/._S 0320: 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 42 44 B_PCI0LPC_EC__BD 0330: 45 56 a0 16 90 5c 44 50 50 31 7b 4d 30 37 38 0a EV...\DPP1{M078. 0340: 08 00 70 0a 01 44 49 50 30 14 44 0a 5f 47 54 46 ..p..DIP0.D._GTF 0350: 00 70 5c 2f 03 5f 53 42 5f 47 44 43 4b 47 47 49 .p\/._SB_GDCKGGI 0360: 44 61 a0 15 93 61 0a 00 a0 0a 44 49 50 30 a4 48 Da...a....DIP0.H 0370: 50 54 46 a4 48 44 54 46 a1 45 07 70 5c 2f 05 5f PTF.HDTF.E.p\/._ 0380: 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 42 SB_PCI0LPC_EC__B 0390: 47 49 44 0a 00 60 a0 09 93 60 0a 07 70 0a 06 60 GID..`...`..p..` 03a0: a0 15 93 60 0a 06 a0 0a 44 49 50 30 a4 48 50 54 ...`....DIP0.HPT 03b0: 46 a4 48 44 54 46 a0 1e 44 49 50 30 70 5c 43 44 F.HDTF..DIP0p\CD 03c0: 46 4c 47 54 46 54 70 5c 43 44 41 48 47 54 41 54 FLGTFTp\CDAHGTAT 03d0: a4 44 47 54 46 70 5c 43 44 46 4c 44 54 46 54 70 .DGTFp\CDFLDTFTp 03e0: 5c 43 44 41 48 44 54 41 54 a4 44 44 54 46 5b 82 \CDAHDTAT.DDTF[. 03f0: 4c 13 50 52 54 32 08 44 49 50 30 0a 00 08 48 44 L.PRT2.DIP0...HD 0400: 54 46 11 11 0a 0e 02 00 00 00 00 a0 ef 00 00 00 TF.............. 0410: 00 00 a0 f5 08 45 52 54 46 11 18 0a 15 02 00 00 .....ERTF....... 0420: 00 00 a0 ef 00 00 00 00 00 a0 f5 5f 00 00 00 00 ..........._.... 0430: a0 ef 08 48 50 54 46 11 18 0a 15 02 00 00 00 00 ...HPTF......... 0440: a0 ef 00 00 00 00 00 a0 f5 10 03 00 00 00 a0 ef ................ 0450: 08 48 58 54 46 11 1f 0a 1c 02 00 00 00 00 a0 ef .HXTF........... 0460: 00 00 00 00 00 a0 f5 5f 00 00 00 00 a0 ef 10 03 ......._........ 0470: 00 00 00 a0 ef 08 44 44 54 46 11 11 0a 0e 00 00 ......DDTF...... 0480: 00 00 00 a0 e3 00 00 00 00 00 a0 e3 8c 44 44 54 .............DDT 0490: 46 0a 01 44 54 41 54 8c 44 44 54 46 0a 08 44 54 F..DTAT.DDTF..DT 04a0: 46 54 08 44 47 54 46 11 18 0a 15 00 00 00 00 00 FT.DGTF......... 04b0: a0 e3 00 00 00 00 00 a0 e3 10 03 00 00 00 a0 ef ................ 04c0: 8c 44 47 54 46 0a 01 47 54 41 54 8c 44 47 54 46 .DGTF..GTAT.DGTF 04d0: 0a 08 47 54 46 54 08 5f 41 44 52 0c ff ff 02 00 ..GTFT._ADR..... 04e0: 14 34 5f 53 44 44 01 70 0a 00 44 49 50 30 a0 26 .4_SDD.p..DIP0.& 04f0: 93 87 68 0b 00 02 8b 68 0a 9c 4d 30 37 38 a0 16 ..h....h..M078.. 0500: 90 5c 44 50 50 32 7b 4d 30 37 38 0a 08 00 70 0a .\DPP2{M078...p. 0510: 01 44 49 50 30 14 16 5f 47 54 46 00 a0 0a 44 49 .DIP0.._GTF...DI 0520: 50 30 a4 48 50 54 46 a4 48 44 54 46 5b 82 4c 13 P0.HPTF.HDTF[.L. 0530: 50 52 54 33 08 44 49 50 30 0a 00 08 48 44 54 46 PRT3.DIP0...HDTF 0540: 11 11 0a 0e 02 00 00 00 00 a0 ef 00 00 00 00 00 ................ 0550: a0 f5 08 45 52 54 46 11 18 0a 15 02 00 00 00 00 ...ERTF......... 0560: a0 ef 00 00 00 00 00 a0 f5 5f 00 00 00 00 a0 ef ........._...... 0570: 08 48 50 54 46 11 18 0a 15 02 00 00 00 00 a0 ef .HPTF........... 0580: 00 00 00 00 00 a0 f5 10 03 00 00 00 a0 ef 08 48 ...............H 0590: 58 54 46 11 1f 0a 1c 02 00 00 00 00 a0 ef 00 00 XTF............. 05a0: 00 00 00 a0 f5 5f 00 00 00 00 a0 ef 10 03 00 00 ....._.......... 05b0: 00 a0 ef 08 44 44 54 46 11 11 0a 0e 00 00 00 00 ....DDTF........ 05c0: 00 a0 e3 00 00 00 00 00 a0 e3 8c 44 44 54 46 0a ...........DDTF. 05d0: 01 44 54 41 54 8c 44 44 54 46 0a 08 44 54 46 54 .DTAT.DDTF..DTFT 05e0: 08 44 47 54 46 11 18 0a 15 00 00 00 00 00 a0 e3 .DGTF........... 05f0: 00 00 00 00 00 a0 e3 10 03 00 00 00 a0 ef 8c 44 ...............D 0600: 47 54 46 0a 01 47 54 41 54 8c 44 47 54 46 0a 08 GTF..GTAT.DGTF.. 0610: 47 54 46 54 08 5f 41 44 52 0c ff ff 03 00 14 34 GTFT._ADR......4 0620: 5f 53 44 44 01 70 0a 00 44 49 50 30 a0 26 93 87 _SDD.p..DIP0.&.. 0630: 68 0b 00 02 8b 68 0a 9c 4d 30 37 38 a0 16 90 5c h....h..M078...\ 0640: 44 50 50 33 7b 4d 30 37 38 0a 08 00 70 0a 01 44 DPP3{M078...p..D 0650: 49 50 30 14 16 5f 47 54 46 00 a0 0a 44 49 50 30 IP0.._GTF...DIP0 0660: a4 48 50 54 46 a4 48 44 54 46 5b 82 4c 13 50 52 .HPTF.HDTF[.L.PR 0670: 54 34 08 44 49 50 30 0a 00 08 48 44 54 46 11 11 T4.DIP0...HDTF.. 0680: 0a 0e 02 00 00 00 00 a0 ef 00 00 00 00 00 a0 f5 ................ 0690: 08 45 52 54 46 11 18 0a 15 02 00 00 00 00 a0 ef .ERTF........... 06a0: 00 00 00 00 00 a0 f5 5f 00 00 00 00 a0 ef 08 48 ......._.......H 06b0: 50 54 46 11 18 0a 15 02 00 00 00 00 a0 ef 00 00 PTF............. 06c0: 00 00 00 a0 f5 10 03 00 00 00 a0 ef 08 48 58 54 .............HXT 06d0: 46 11 1f 0a 1c 02 00 00 00 00 a0 ef 00 00 00 00 F............... 06e0: 00 a0 f5 5f 00 00 00 00 a0 ef 10 03 00 00 00 a0 ..._............ 06f0: ef 08 44 44 54 46 11 11 0a 0e 00 00 00 00 00 a0 ..DDTF.......... 0700: e3 00 00 00 00 00 a0 e3 8c 44 44 54 46 0a 01 44 .........DDTF..D 0710: 54 41 54 8c 44 44 54 46 0a 08 44 54 46 54 08 44 TAT.DDTF..DTFT.D 0720: 47 54 46 11 18 0a 15 00 00 00 00 00 a0 e3 00 00 GTF............. 0730: 00 00 00 a0 e3 10 03 00 00 00 a0 ef 8c 44 47 54 .............DGT 0740: 46 0a 01 47 54 41 54 8c 44 47 54 46 0a 08 47 54 F..GTAT.DGTF..GT 0750: 46 54 08 5f 41 44 52 0c ff ff 04 00 14 34 5f 53 FT._ADR......4_S 0760: 44 44 01 70 0a 00 44 49 50 30 a0 26 93 87 68 0b DD.p..DIP0.&..h. 0770: 00 02 8b 68 0a 9c 4d 30 37 38 a0 16 90 5c 44 50 ...h..M078...\DP 0780: 50 34 7b 4d 30 37 38 0a 08 00 70 0a 01 44 49 50 P4{M078...p..DIP 0790: 30 14 16 5f 47 54 46 00 a0 0a 44 49 50 30 a4 48 0.._GTF...DIP0.H 07a0: 50 54 46 a4 48 44 54 46 PTF.HDTF HPET @ 0xdafe4000 0000: 48 50 45 54 38 00 00 00 01 ee 4c 45 4e 4f 56 4f HPET8.....LENOVO 0010: 54 50 2d 47 32 20 20 20 10 11 00 00 50 54 4c 20 TP-G2 ....PTL 0020: 02 00 00 00 01 a3 86 80 00 00 00 00 00 00 d0 fe ................ 0030: 00 00 00 00 00 80 00 00 ........ APIC @ 0xdafe3000 0000: 41 50 49 43 98 00 00 00 01 26 4c 45 4e 4f 56 4f APIC.....&LENOVO 0010: 54 50 2d 47 32 20 20 20 10 11 00 00 50 54 4c 20 TP-G2 ....PTL 0020: 02 00 00 00 00 00 e0 fe 01 00 00 00 00 08 01 00 ................ 0030: 01 00 00 00 00 08 02 01 01 00 00 00 00 08 03 02 ................ 0040: 01 00 00 00 00 08 04 03 01 00 00 00 00 08 05 00 ................ 0050: 00 00 00 00 00 08 06 00 00 00 00 00 00 08 07 00 ................ 0060: 00 00 00 00 00 08 08 00 00 00 00 00 01 0c 02 00 ................ 0070: 00 00 c0 fe 00 00 00 00 02 0a 00 00 02 00 00 00 ................ 0080: 00 00 02 0a 00 09 09 00 00 00 0d 00 04 06 00 05 ................ 0090: 00 01 04 06 01 05 00 01 ........ MCFG @ 0xdafe2000 0000: 4d 43 46 47 3c 00 00 00 01 bf 4c 45 4e 4f 56 4f MCFG<.....LENOVO 0010: 54 50 2d 47 32 20 20 20 10 11 00 00 50 54 4c 20 TP-G2 ....PTL 0020: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f8 ................ 0030: 00 00 00 00 00 00 00 3f 00 00 00 00 .......?.... ECDT @ 0xdafe1000 0000: 45 43 44 54 52 00 00 00 01 a5 4c 45 4e 4f 56 4f ECDTR.....LENOVO 0010: 54 50 2d 47 32 20 20 20 10 11 00 00 50 54 4c 20 TP-G2 ....PTL 0020: 02 00 00 00 01 08 00 00 66 00 00 00 00 00 00 00 ........f....... 0030: 01 08 00 00 62 00 00 00 00 00 00 00 00 00 00 00 ....b........... 0040: 11 5c 5f 53 42 2e 50 43 49 30 2e 4c 50 43 2e 45 .\_SB.PCI0.LPC.E 0050: 43 00 C. FPDT @ 0xdafe0000 0000: 46 50 44 54 54 00 00 00 01 66 4c 45 4e 4f 56 4f FPDTT....fLENOVO 0010: 54 50 2d 47 32 20 20 20 10 11 00 00 50 54 4c 20 TP-G2 ....PTL 0020: 02 00 00 00 00 00 10 01 00 00 00 00 18 f5 eb d9 ................ 0030: 00 00 00 00 00 30 10 01 00 00 00 00 18 d0 eb d9 .....0.......... 0040: 00 00 00 00 01 30 10 01 00 00 00 00 18 80 e5 d9 .....0.......... 0050: 00 00 00 00 .... ASF! @ 0xdafe7000 0000: 41 53 46 21 a5 00 00 00 20 3d 4c 45 4e 4f 56 4f ASF!.... =LENOVO 0010: 54 50 2d 47 32 20 20 20 10 11 00 00 50 54 4c 20 TP-G2 ....PTL 0020: 02 00 00 00 00 00 10 00 ff ff 17 20 00 00 4a 66 ........... ..Jf 0030: 00 00 00 00 01 00 2c 00 00 00 03 0c 00 00 00 00 ......,......... 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0060: 02 00 18 00 04 04 00 00 00 88 00 03 01 88 00 02 ................ 0070: 02 88 00 01 03 88 00 04 03 00 17 00 00 f8 00 00 ................ 0080: 00 13 f0 01 00 00 00 00 00 00 00 00 00 00 00 84 ................ 0090: 00 16 00 00 10 5c 68 88 c2 d2 dc a0 a2 a4 a6 c8 .....\h......... 00a0: 00 00 00 00 00 ..... UEFI @ 0xdafdf000 0000: 55 45 46 49 3e 00 00 00 01 0a 4c 45 4e 4f 56 4f UEFI>.....LENOVO 0010: 54 50 2d 47 32 20 20 20 10 11 00 00 50 54 4c 20 TP-G2 ....PTL 0020: 02 00 00 00 e8 63 95 d2 e1 cf 41 4d 8e 54 da 43 .....c....AM.T.C 0030: 22 fe de 5c 36 00 00 90 f5 da 00 00 00 00 "..\6......... UEFI @ 0xdafde000 0000: 55 45 46 49 42 00 00 00 01 b6 50 54 4c 20 20 20 UEFIB.....PTL 0010: 43 4f 4d 42 55 46 00 00 01 00 00 00 50 54 4c 20 COMBUF......PTL 0020: 01 00 00 00 be 96 e8 15 df 0c e2 47 9b 97 a2 8a ...........G.... 0030: 39 8b c7 65 36 00 02 00 00 00 a8 16 3f d8 00 00 9..e6.......?... 0040: 00 00 .. POAT @ 0xdafdd000 0000: 50 4f 41 54 55 00 00 00 03 c4 4c 45 4e 4f 56 4f POATU.....LENOVO 0010: 54 50 2d 47 32 20 20 20 10 11 00 00 50 54 4c 20 TP-G2 ....PTL 0020: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: 00 00 00 00 00 ..... SSDT @ 0xdafdc000 0000: 53 53 44 54 37 0c 00 00 01 64 50 6d 52 65 66 00 SSDT7....dPmRef. 0010: 43 70 75 30 49 73 74 00 00 30 00 00 49 4e 54 4c Cpu0Ist..0..INTL 0020: 09 11 06 20 10 42 c1 5c 2e 5f 50 52 5f 43 50 55 ... .B.\._PR_CPU 0030: 30 14 42 2d 5f 50 50 43 00 70 00 60 70 5c 2f 05 0.B-_PPC.p.`p\/. 0040: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 0050: 4c 50 4d 44 60 a0 44 0f 92 60 a0 4a 06 91 90 5c LPMD`.D..`.J...\ 0060: 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 /._SB_PCI0LPC_EC 0070: 5f 5f 41 43 5f 5f 5f 50 53 52 5c 54 43 46 41 90 __AC___PSR\TCFA. 0080: 92 5c 2f 06 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ 0090: 45 43 5f 5f 41 43 5f 5f 5f 50 53 52 5c 54 43 46 EC__AC___PSR\TCF 00a0: 44 a0 23 7b 5c 2f 05 5f 53 42 5f 50 43 49 30 4c D.#{\/._SB_PCI0L 00b0: 50 43 5f 45 43 5f 5f 54 53 4c 30 0a 76 00 70 5c PC_EC__TSL0.v.p\ 00c0: 4c 57 53 54 60 a1 25 a0 23 7b 5c 2f 05 5f 53 42 LWST`.%.#{\/._SB 00d0: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 54 53 4c _PCI0LPC_EC__TSL 00e0: 30 0a 77 00 70 5c 4c 57 53 54 60 a0 4e 05 92 60 0.w.p\LWST`.N..` 00f0: a0 0d 5c 41 50 4d 44 70 5c 41 50 53 54 60 a0 4b ..\APMDp\APST`.K 0100: 04 92 60 a0 19 5c 2e 5f 50 52 5f 43 4c 56 4c a0 ..`..\._PR_CLVL. 0110: 0d 5c 50 50 43 41 70 5c 50 50 43 41 60 a1 2c a0 .\PPCAp\PPCA`.,. 0120: 2a 91 5c 50 50 43 41 5c 46 54 50 53 a0 14 92 94 *.\PPCA\FTPS.... 0130: 5c 46 54 50 53 5c 50 50 43 41 70 5c 50 50 43 41 \FTPS\PPCAp\PPCA 0140: 60 a1 08 70 5c 46 54 50 53 60 a0 43 16 91 90 5c `..p\FTPS`.C...\ 0150: 47 46 50 4c 92 60 90 92 5c 47 46 50 4c 60 70 0b GFPL.`..\GFPL`p. 0160: e8 03 61 a2 2a 5c 2f 05 5f 53 42 5f 50 43 49 30 ..a.*\/._SB_PCI0 0170: 4c 50 43 5f 45 43 5f 5f 50 49 42 53 5b 22 01 76 LPC_EC__PIBS[".v 0180: 61 a0 0c 92 61 70 60 5c 50 50 43 52 a4 60 a0 49 a...ap`\PPCR.`.I 0190: 07 60 a0 45 07 92 5c 47 46 50 4c 70 01 5c 47 46 .`.E..\GFPLp.\GF 01a0: 50 4c 70 0a 04 5c 2f 05 5f 53 42 5f 50 43 49 30 PLp..\/._SB_PCI0 01b0: 4c 50 43 5f 45 43 5f 5f 50 4c 53 4c 70 01 5c 2f LPC_EC__PLSLp.\/ 01c0: 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f ._SB_PCI0LPC_EC_ 01d0: 5f 50 4c 54 55 70 0a 0d 5c 2f 05 5f 53 42 5f 50 _PLTUp..\/._SB_P 01e0: 43 49 30 4c 50 43 5f 45 43 5f 5f 50 4c 4c 53 70 CI0LPC_EC__PLLSp 01f0: 00 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f .\/._SB_PCI0LPC_ 0200: 45 43 5f 5f 50 4c 4d 53 a1 45 0a a0 42 0a 5c 47 EC__PLMS.E..B.\G 0210: 46 50 4c 70 00 5c 47 46 50 4c 70 0a 04 5c 2f 05 FPLp.\GFPLp..\/. 0220: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 0230: 50 4c 53 4c a0 23 5c 4d 54 41 55 70 5c 4d 54 41 PLSL.#\MTAUp\MTA 0240: 55 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 50 43 5f U\/._SB_PCI0LPC_ 0250: 45 43 5f 5f 50 4c 54 55 a1 1b 70 0a 1c 5c 2f 05 EC__PLTU..p..\/. 0260: 5f 53 42 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f _SB_PCI0LPC_EC__ 0270: 50 4c 54 55 70 5c 50 4c 31 4c 5c 2f 05 5f 53 42 PLTUp\PL1L\/._SB 0280: 5f 50 43 49 30 4c 50 43 5f 45 43 5f 5f 50 4c 4c _PCI0LPC_EC__PLL 0290: 53 70 5c 50 4c 31 4d 5c 2f 05 5f 53 42 5f 50 43 Sp\PL1M\/._SB_PC 02a0: 49 30 4c 50 43 5f 45 43 5f 5f 50 4c 4d 53 a0 4c I0LPC_EC__PLMS.L 02b0: 04 5c 2e 5f 50 52 5f 43 4c 56 4c a0 21 93 60 00 .\._PR_CLVL.!.`. 02c0: a0 13 95 5c 43 54 44 50 5c 46 54 50 53 70 5c 46 ...\CTDP\FTPSp\F 02d0: 54 50 53 60 a1 08 70 5c 43 54 44 50 60 a1 1d a0 TPS`..p\CTDP`... 02e0: 1b 92 95 5c 43 54 44 50 60 70 5c 43 54 44 50 60 ...\CTDP`p\CTDP` 02f0: a0 0a 94 5c 4c 57 53 54 60 75 60 70 60 5c 50 50 ...\LWST`u`p`\PP 0300: 43 52 a4 60 14 40 09 5f 50 43 54 00 a0 1b 5c 2e CR.`.@._PCT...\. 0310: 5f 50 52 5f 43 4c 56 4c 70 5c 2e 5f 50 52 5f 43 _PR_CLVLp\._PR_C 0320: 50 50 43 5c 43 54 44 50 a0 3e 90 7b 43 46 47 44 PPC\CTDP.>.{CFGD 0330: 01 00 7b 50 44 43 30 01 00 a4 12 2c 02 11 14 0a ..{PDC0....,.... 0340: 11 82 0c 00 7f 00 00 00 00 00 00 00 00 00 00 00 ................ 0350: 79 00 11 14 0a 11 82 0c 00 7f 00 00 00 00 00 00 y............... 0360: 00 00 00 00 00 79 00 a4 12 2c 02 11 14 0a 11 82 .....y...,...... 0370: 0c 00 01 10 00 00 00 08 00 00 00 00 00 00 79 00 ..............y. 0380: 11 14 0a 11 82 0c 00 01 08 00 00 b3 00 00 00 00 ................ 0390: 00 00 00 79 00 14 19 58 50 53 53 00 a0 0d 7b 50 ...y...XPSS...{P 03a0: 44 43 30 01 00 a4 4e 50 53 53 a4 53 50 53 53 08 DC0...NPSS.SPSS. 03b0: 53 50 53 53 12 42 1f 0f 12 20 06 0c c5 09 00 00 SPSS.B... ...... 03c0: 0c b8 88 00 00 0c 6e 00 00 00 0c 0a 00 00 00 0c ......n......... 03d0: 83 00 00 00 0c 00 00 00 00 12 20 06 0c c4 09 00 .......... ..... 03e0: 00 0c b8 88 00 00 0c 6e 00 00 00 0c 0a 00 00 00 .......n........ 03f0: 0c 83 01 00 00 0c 01 00 00 00 12 20 06 0c 60 09 ........... ..`. 0400: 00 00 0c c2 81 00 00 0c 6e 00 00 00 0c 0a 00 00 ........n....... 0410: 00 0c 83 02 00 00 0c 02 00 00 00 12 20 06 0c fc ............ ... 0420: 08 00 00 0c ee 7a 00 00 0c 6e 00 00 00 0c 0a 00 .....z...n...... 0430: 00 00 0c 83 03 00 00 0c 03 00 00 00 12 20 06 0c ............. .. 0440: 98 08 00 00 0c 3b 74 00 00 0c 6e 00 00 00 0c 0a .....;t...n..... 0450: 00 00 00 0c 83 04 00 00 0c 04 00 00 00 12 20 06 .............. . 0460: 0c 34 08 00 00 0c aa 6d 00 00 0c 6e 00 00 00 0c .4.....m...n.... 0470: 0a 00 00 00 0c 83 05 00 00 0c 05 00 00 00 12 20 ............... 0480: 06 0c d0 07 00 00 0c 3a 67 00 00 0c 6e 00 00 00 .......:g...n... 0490: 0c 0a 00 00 00 0c 83 06 00 00 0c 06 00 00 00 12 ................ 04a0: 20 06 0c 6c 07 00 00 0c f0 60 00 00 0c 6e 00 00 ..l.....`...n.. 04b0: 00 0c 0a 00 00 00 0c 83 07 00 00 0c 07 00 00 00 ................ 04c0: 12 20 06 0c 08 07 00 00 0c c1 5a 00 00 0c 6e 00 . ........Z...n. 04d0: 00 00 0c 0a 00 00 00 0c 83 08 00 00 0c 08 00 00 ................ 04e0: 00 12 20 06 0c a4 06 00 00 0c b3 54 00 00 0c 6e .. ........T...n 04f0: 00 00 00 0c 0a 00 00 00 0c 83 09 00 00 0c 09 00 ................ 0500: 00 00 12 20 06 0c 40 06 00 00 0c c4 4e 00 00 0c ... ..@.....N... 0510: 6e 00 00 00 0c 0a 00 00 00 0c 83 0a 00 00 0c 0a n............... 0520: 00 00 00 12 20 06 0c dc 05 00 00 0c f6 48 00 00 .... ........H.. 0530: 0c 6e 00 00 00 0c 0a 00 00 00 0c 83 0b 00 00 0c .n.............. 0540: 0b 00 00 00 12 20 06 0c 78 05 00 00 0c 4a 43 00 ..... ..x....JC. 0550: 00 0c 6e 00 00 00 0c 0a 00 00 00 0c 83 0c 00 00 ..n............. 0560: 0c 0c 00 00 00 12 20 06 0c 14 05 00 00 0c ba 3d ...... ........= 0570: 00 00 0c 6e 00 00 00 0c 0a 00 00 00 0c 83 0d 00 ...n............ 0580: 00 0c 0d 00 00 00 12 20 06 0c b0 04 00 00 0c 48 ....... .......H 0590: 38 00 00 0c 6e 00 00 00 0c 0a 00 00 00 0c 83 0e 8...n........... 05a0: 00 00 0c 0e 00 00 00 12 20 06 0c 00 00 00 80 0c ........ ....... 05b0: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 ................ 05c0: 00 00 80 0c 00 00 00 80 12 20 06 0c 00 00 00 80 ......... ...... 05d0: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c ................ 05e0: 00 00 00 80 0c 00 00 00 80 12 20 06 0c 00 00 00 .......... ..... 05f0: 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 0600: 0c 00 00 00 80 0c 00 00 00 80 12 20 06 0c 00 00 ........... .... 0610: 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ................ 0620: 80 0c 00 00 00 80 0c 00 00 00 80 12 20 06 0c 00 ............ ... 0630: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 ................ 0640: 00 80 0c 00 00 00 80 0c 00 00 00 80 12 20 06 0c ............. .. 0650: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 ................ 0660: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 12 20 06 .............. . 0670: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c ................ 0680: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 12 20 ............... 0690: 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 06a0: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 12 ................ 06b0: 20 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ............... 06c0: 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 06d0: 12 20 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 . .............. 06e0: 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ................ 06f0: 80 12 20 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 .. ............. 0700: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 ................ 0710: 00 80 12 20 06 0c 00 00 00 80 0c 00 00 00 80 0c ... ............ 0720: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 ................ 0730: 00 00 80 12 20 06 0c 00 00 00 80 0c 00 00 00 80 .... ........... 0740: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c ................ 0750: 00 00 00 80 12 20 06 0c 00 00 00 80 0c 00 00 00 ..... .......... 0760: 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 0770: 0c 00 00 00 80 12 20 06 0c 00 00 00 80 0c 00 00 ...... ......... 0780: 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ................ 0790: 80 0c 00 00 00 80 12 20 06 0c 00 00 00 80 0c 00 ....... ........ 07a0: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 ................ 07b0: 00 80 0c 00 00 00 80 08 5f 50 53 53 12 42 1f 0f ........_PSS.B.. 07c0: 12 20 06 0c c5 09 00 00 0c b8 88 00 00 0c 0a 00 . .............. 07d0: 00 00 0c 0a 00 00 00 0c 00 1f 00 00 0c 00 1f 00 ................ 07e0: 00 12 20 06 0c c4 09 00 00 0c b8 88 00 00 0c 0a .. ............. 07f0: 00 00 00 0c 0a 00 00 00 0c 00 19 00 00 0c 00 19 ................ 0800: 00 00 12 20 06 0c 60 09 00 00 0c c2 81 00 00 0c ... ..`......... 0810: 0a 00 00 00 0c 0a 00 00 00 0c 00 18 00 00 0c 00 ................ 0820: 18 00 00 12 20 06 0c fc 08 00 00 0c ee 7a 00 00 .... ........z.. 0830: 0c 0a 00 00 00 0c 0a 00 00 00 0c 00 17 00 00 0c ................ 0840: 00 17 00 00 12 20 06 0c 98 08 00 00 0c 3b 74 00 ..... .......;t. 0850: 00 0c 0a 00 00 00 0c 0a 00 00 00 0c 00 16 00 00 ................ 0860: 0c 00 16 00 00 12 20 06 0c 34 08 00 00 0c aa 6d ...... ..4.....m 0870: 00 00 0c 0a 00 00 00 0c 0a 00 00 00 0c 00 15 00 ................ 0880: 00 0c 00 15 00 00 12 20 06 0c d0 07 00 00 0c 3a ....... .......: 0890: 67 00 00 0c 0a 00 00 00 0c 0a 00 00 00 0c 00 14 g............... 08a0: 00 00 0c 00 14 00 00 12 20 06 0c 6c 07 00 00 0c ........ ..l.... 08b0: f0 60 00 00 0c 0a 00 00 00 0c 0a 00 00 00 0c 00 .`.............. 08c0: 13 00 00 0c 00 13 00 00 12 20 06 0c 08 07 00 00 ......... ...... 08d0: 0c c1 5a 00 00 0c 0a 00 00 00 0c 0a 00 00 00 0c ..Z............. 08e0: 00 12 00 00 0c 00 12 00 00 12 20 06 0c a4 06 00 .......... ..... 08f0: 00 0c b3 54 00 00 0c 0a 00 00 00 0c 0a 00 00 00 ...T............ 0900: 0c 00 11 00 00 0c 00 11 00 00 12 20 06 0c 40 06 ........... ..@. 0910: 00 00 0c c4 4e 00 00 0c 0a 00 00 00 0c 0a 00 00 ....N........... 0920: 00 0c 00 10 00 00 0c 00 10 00 00 12 20 06 0c dc ............ ... 0930: 05 00 00 0c f6 48 00 00 0c 0a 00 00 00 0c 0a 00 .....H.......... 0940: 00 00 0c 00 0f 00 00 0c 00 0f 00 00 12 20 06 0c ............. .. 0950: 78 05 00 00 0c 4a 43 00 00 0c 0a 00 00 00 0c 0a x....JC......... 0960: 00 00 00 0c 00 0e 00 00 0c 00 0e 00 00 12 20 06 .............. . 0970: 0c 14 05 00 00 0c ba 3d 00 00 0c 0a 00 00 00 0c .......=........ 0980: 0a 00 00 00 0c 00 0d 00 00 0c 00 0d 00 00 12 20 ............... 0990: 06 0c b0 04 00 00 0c 48 38 00 00 0c 0a 00 00 00 .......H8....... 09a0: 0c 0a 00 00 00 0c 00 0c 00 00 0c 00 0c 00 00 12 ................ 09b0: 20 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ............... 09c0: 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 09d0: 12 20 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 . .............. 09e0: 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ................ 09f0: 80 12 20 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 .. ............. 0a00: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 ................ 0a10: 00 80 12 20 06 0c 00 00 00 80 0c 00 00 00 80 0c ... ............ 0a20: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 ................ 0a30: 00 00 80 12 20 06 0c 00 00 00 80 0c 00 00 00 80 .... ........... 0a40: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c ................ 0a50: 00 00 00 80 12 20 06 0c 00 00 00 80 0c 00 00 00 ..... .......... 0a60: 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 0a70: 0c 00 00 00 80 12 20 06 0c 00 00 00 80 0c 00 00 ...... ......... 0a80: 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ................ 0a90: 80 0c 00 00 00 80 12 20 06 0c 00 00 00 80 0c 00 ....... ........ 0aa0: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 ................ 0ab0: 00 80 0c 00 00 00 80 12 20 06 0c 00 00 00 80 0c ........ ....... 0ac0: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 ................ 0ad0: 00 00 80 0c 00 00 00 80 12 20 06 0c 00 00 00 80 ......... ...... 0ae0: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c ................ 0af0: 00 00 00 80 0c 00 00 00 80 12 20 06 0c 00 00 00 .......... ..... 0b00: 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 0b10: 0c 00 00 00 80 0c 00 00 00 80 12 20 06 0c 00 00 ........... .... 0b20: 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ................ 0b30: 80 0c 00 00 00 80 0c 00 00 00 80 12 20 06 0c 00 ............ ... 0b40: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 ................ 0b50: 00 80 0c 00 00 00 80 0c 00 00 00 80 12 20 06 0c ............. .. 0b60: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 ................ 0b70: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 12 20 06 .............. . 0b80: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c ................ 0b90: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 12 20 ............... 0ba0: 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 0bb0: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 08 ................ 0bc0: 50 53 44 46 00 14 4b 04 5f 50 53 44 00 a0 2e 92 PSDF..K._PSD.... 0bd0: 50 53 44 46 70 54 43 4e 54 88 83 88 48 50 53 44 PSDFpTCNT...HPSD 0be0: 00 00 0a 04 00 70 54 43 4e 54 88 83 88 53 50 53 .....pTCNT...SPS 0bf0: 44 00 00 0a 04 00 70 ff 50 53 44 46 a0 0f 7b 50 D.....p.PSDF..{P 0c00: 44 43 30 0b 00 08 00 a4 48 50 53 44 a4 53 50 53 DC0.....HPSD.SPS 0c10: 44 08 48 50 53 44 12 0d 01 12 0a 05 0a 05 00 00 D.HPSD.......... 0c20: 0a fe 0a 80 08 53 50 53 44 12 0d 01 12 0a 05 0a .....SPSD....... 0c30: 05 00 00 0a fc 0a 80 ....... SSDT @ 0xdafdb000 0000: 53 53 44 54 7e 0a 00 00 01 c5 50 6d 52 65 66 00 SSDT~.....PmRef. 0010: 43 70 75 50 6d 00 00 00 00 30 00 00 49 4e 54 4c CpuPm....0..INTL 0020: 09 11 06 20 10 46 0c 5c 00 08 53 53 44 54 12 43 ... .F.\..SSDT.C 0030: 05 0c 0d 43 50 55 30 49 53 54 20 00 0c 18 80 7f ...CPU0IST ..... 0040: d5 0c 37 0c 00 00 0d 41 50 49 53 54 20 20 20 00 ..7....APIST . 0050: 0c 98 ba e3 da 0c 03 03 00 00 0d 43 50 55 30 43 ...........CPU0C 0060: 53 54 20 00 0c 18 a0 e3 da 0c 01 0a 00 00 0d 41 ST ............A 0070: 50 43 53 54 20 20 20 00 0c 98 9d e3 da 0c 19 01 PCST ......... 0080: 00 00 08 43 46 47 44 0c ff f6 66 00 08 5c 50 44 ...CFGD...f..\PD 0090: 43 30 0c 00 00 00 80 08 5c 50 44 43 31 0c 00 00 C0......\PDC1... 00a0: 00 80 08 5c 50 44 43 32 0c 00 00 00 80 08 5c 50 ...\PDC2......\P 00b0: 44 43 33 0c 00 00 00 80 08 5c 50 44 43 34 0c 00 DC3......\PDC4.. 00c0: 00 00 80 08 5c 50 44 43 35 0c 00 00 00 80 08 5c ....\PDC5......\ 00d0: 50 44 43 36 0c 00 00 00 80 08 5c 50 44 43 37 0c PDC6......\PDC7. 00e0: 00 00 00 80 08 5c 53 44 54 4c 00 10 48 0a 5c 5f .....\SDTL..H.\_ 00f0: 50 52 5f 5b 80 50 50 4d 54 00 0c 98 8f f5 da 0b PR_[.PPMT....... 0100: 29 00 5b 81 40 09 50 50 4d 54 10 50 47 52 56 08 ).[.@.PPMT.PGRV. 0110: 00 28 41 43 52 54 08 41 50 53 56 08 41 41 43 30 .(ACRT.APSV.AAC0 0120: 08 43 50 49 44 20 43 50 50 43 08 43 43 54 50 08 .CPID CPPC.CCTP. 0130: 43 4c 56 4c 08 43 42 4d 49 08 50 4c 31 30 10 50 CLVL.CBMI.PL10.P 0140: 4c 32 30 10 50 4c 57 30 08 43 54 43 30 08 54 41 L20.PLW0.CTC0.TA 0150: 52 30 08 50 50 43 30 08 50 4c 31 31 10 50 4c 32 R0.PPC0.PL11.PL2 0160: 31 10 50 4c 57 31 08 43 54 43 31 08 54 41 52 31 1.PLW1.CTC1.TAR1 0170: 08 50 50 43 31 08 50 4c 31 32 10 50 4c 32 32 10 .PPC1.PL12.PL22. 0180: 50 4c 57 32 08 43 54 43 32 08 54 41 52 32 08 50 PLW2.CTC2.TAR2.P 0190: 50 43 32 08 10 4b 21 5c 2e 5f 50 52 5f 43 50 55 PC2..K!\._PR_CPU 01a0: 30 08 48 49 30 5f 00 08 48 43 30 5f 00 14 14 5f 0.HI0_..HC0_..._ 01b0: 50 44 43 01 70 43 50 44 43 68 60 47 43 41 50 60 PDC.pCPDCh`GCAP` 01c0: a4 60 14 17 5f 4f 53 43 04 70 43 4f 53 43 68 69 .`.._OSC.pCOSChi 01d0: 6a 6b 60 47 43 41 50 60 a4 60 14 48 06 43 50 44 jk`GCAP`.`.H.CPD 01e0: 43 01 8a 68 00 52 45 56 53 8a 68 0a 04 53 49 5a C..h.REVS.h..SIZ 01f0: 45 70 87 68 60 70 74 60 0a 08 00 61 5b 13 68 0a Ep.h`pt`...a[.h. 0200: 40 77 61 0a 08 00 54 45 4d 50 08 53 54 53 30 11 @wa...TEMP.STS0. 0210: 07 0a 04 00 00 00 00 73 53 54 53 30 54 45 4d 50 .......sSTS0TEMP 0220: 62 a4 43 4f 53 43 11 13 0a 10 16 a6 77 40 0c 29 b.COSC......w@.) 0230: be 47 9e bd d8 70 58 71 39 53 52 45 56 53 53 49 .G...pXq9SREVSSI 0240: 5a 45 62 14 4d 0b 43 4f 53 43 04 8a 6b 00 53 54 ZEb.M.COSC..k.ST 0250: 53 30 8a 6b 0a 04 43 41 50 30 8a 68 00 49 49 44 S0.k..CAP0.h.IID 0260: 30 8a 68 0a 04 49 49 44 31 8a 68 0a 08 49 49 44 0.h..IID1.h..IID 0270: 32 8a 68 0a 0c 49 49 44 33 08 55 49 44 30 11 13 2.h..IID3.UID0.. 0280: 0a 10 16 a6 77 40 0c 29 be 47 9e bd d8 70 58 71 ....w@.).G...pXq 0290: 39 53 8a 55 49 44 30 00 45 49 44 30 8a 55 49 44 9S.UID0.EID0.UID 02a0: 30 0a 04 45 49 44 31 8a 55 49 44 30 0a 08 45 49 0..EID1.UID0..EI 02b0: 44 32 8a 55 49 44 30 0a 0c 45 49 44 33 a0 32 92 D2.UID0..EID3.2. 02c0: 90 90 93 49 49 44 30 45 49 44 30 93 49 49 44 31 ...IID0EID0.IID1 02d0: 45 49 44 31 90 93 49 49 44 32 45 49 44 32 93 49 EID1..IID2EID2.I 02e0: 49 44 33 45 49 44 33 70 0a 06 53 54 53 30 a4 6b ID3EID3p..STS0.k 02f0: a0 0e 92 93 69 01 70 0a 0a 53 54 53 30 a4 6b a4 ....i.p..STS0.k. 0300: 6b 14 4e 0a 47 43 41 50 01 8a 68 00 53 54 53 30 k.N.GCAP..h.STS0 0310: 8a 68 0a 04 43 41 50 30 a0 12 91 93 53 54 53 30 .h..CAP0....STS0 0320: 0a 06 93 53 54 53 30 0a 0a a4 00 a0 16 7b 53 54 ...STS0......{ST 0330: 53 30 01 00 7b 43 41 50 30 0b ff 0b 43 41 50 30 S0..{CAP0...CAP0 0340: a4 00 7d 7b 50 44 43 30 0c ff ff ff 7f 00 43 41 ..}{PDC0......CA 0350: 50 30 50 44 43 30 a0 47 05 7b 43 46 47 44 0a 3e P0PDC0.G.{CFGD.> 0360: 00 a0 4c 04 90 90 7b 43 46 47 44 0b 00 04 00 7b ..L...{CFGD....{ 0370: 50 44 43 30 0a 18 00 92 7b 53 44 54 4c 0a 02 00 PDC0....{SDTL... 0380: 7d 53 44 54 4c 0a 02 53 44 54 4c 5b 80 43 53 54 }SDTL..SDTL[.CST 0390: 30 00 83 88 53 53 44 54 0a 07 00 83 88 53 53 44 0...SSDT.....SSD 03a0: 54 0a 08 00 5b 20 43 53 54 30 48 43 30 5f a4 00 T...[ CST0HC0_.. 03b0: 10 4f 16 5c 2e 5f 50 52 5f 43 50 55 31 08 48 49 .O.\._PR_CPU1.HI 03c0: 31 5f 00 08 48 43 31 5f 00 14 1f 5f 50 44 43 01 1_..HC1_..._PDC. 03d0: 70 5c 2f 03 5f 50 52 5f 43 50 55 30 43 50 44 43 p\/._PR_CPU0CPDC 03e0: 68 60 47 43 41 50 60 a4 60 14 22 5f 4f 53 43 04 h`GCAP`.`."_OSC. 03f0: 70 5c 2f 03 5f 50 52 5f 43 50 55 30 43 4f 53 43 p\/._PR_CPU0COSC 0400: 68 69 6a 6b 60 47 43 41 50 60 a4 60 14 4e 07 47 hijk`GCAP`.`.N.G 0410: 43 41 50 01 8a 68 00 53 54 53 31 8a 68 0a 04 43 CAP..h.STS1.h..C 0420: 41 50 31 a0 12 91 93 53 54 53 31 0a 06 93 53 54 AP1....STS1...ST 0430: 53 31 0a 0a a4 00 a0 16 7b 53 54 53 31 01 00 7b S1......{STS1..{ 0440: 43 41 50 31 0b ff 0b 43 41 50 31 a4 00 7d 7b 50 CAP1...CAP1..}{P 0450: 44 43 31 0c ff ff ff 7f 00 43 41 50 31 50 44 43 DC1......CAP1PDC 0460: 31 a0 10 93 7b 50 44 43 31 0a 09 00 0a 09 41 50 1...{PDC1.....AP 0470: 50 54 a0 0d 7b 50 44 43 31 0a 18 00 41 50 43 54 PT..{PDC1...APCT 0480: 70 50 44 43 31 50 44 43 30 a4 00 14 4a 04 41 50 pPDC1PDC0...J.AP 0490: 43 54 00 a0 42 04 90 7b 43 46 47 44 0a 2e 00 92 CT..B..{CFGD.... 04a0: 7b 53 44 54 4c 0a 20 00 7d 53 44 54 4c 0a 20 53 {SDTL. .}SDTL. S 04b0: 44 54 4c 5b 80 43 53 54 31 00 83 88 53 53 44 54 DTL[.CST1...SSDT 04c0: 0a 0a 00 83 88 53 53 44 54 0a 0b 00 5b 20 43 53 .....SSDT...[ CS 04d0: 54 31 48 43 31 5f 14 49 04 41 50 50 54 00 a0 41 T1HC1_.I.APPT..A 04e0: 04 90 7b 43 46 47 44 01 00 92 7b 53 44 54 4c 0a ..{CFGD...{SDTL. 04f0: 10 00 7d 53 44 54 4c 0a 10 53 44 54 4c 5b 80 49 ..}SDTL..SDTL[.I 0500: 53 54 31 00 83 88 53 53 44 54 0a 04 00 83 88 53 ST1...SSDT.....S 0510: 53 44 54 0a 05 00 5b 20 49 53 54 31 48 49 31 5f SDT...[ IST1HI1_ 0520: 10 44 0e 5c 2e 5f 50 52 5f 43 50 55 32 14 1f 5f .D.\._PR_CPU2.._ 0530: 50 44 43 01 70 5c 2f 03 5f 50 52 5f 43 50 55 30 PDC.p\/._PR_CPU0 0540: 43 50 44 43 68 60 47 43 41 50 60 a4 60 14 22 5f CPDCh`GCAP`.`."_ 0550: 4f 53 43 04 70 5c 2f 03 5f 50 52 5f 43 50 55 30 OSC.p\/._PR_CPU0 0560: 43 4f 53 43 68 69 6a 6b 60 47 43 41 50 60 a4 60 COSChijk`GCAP`.` 0570: 14 44 09 47 43 41 50 01 8a 68 00 53 54 53 32 8a .D.GCAP..h.STS2. 0580: 68 0a 04 43 41 50 32 a0 12 91 93 53 54 53 32 0a h..CAP2....STS2. 0590: 06 93 53 54 53 32 0a 0a a4 00 a0 16 7b 53 54 53 ..STS2......{STS 05a0: 32 01 00 7b 43 41 50 32 0b ff 0b 43 41 50 32 a4 2..{CAP2...CAP2. 05b0: 00 7d 7b 50 44 43 32 0c ff ff ff 7f 00 43 41 50 .}{PDC2......CAP 05c0: 32 50 44 43 32 a0 1b 93 7b 50 44 43 32 0a 09 00 2PDC2...{PDC2... 05d0: 0a 09 5c 2f 03 5f 50 52 5f 43 50 55 31 41 50 50 ..\/._PR_CPU1APP 05e0: 54 a0 18 7b 50 44 43 32 0a 18 00 5c 2f 03 5f 50 T..{PDC2...\/._P 05f0: 52 5f 43 50 55 31 41 50 43 54 70 50 44 43 32 50 R_CPU1APCTpPDC2P 0600: 44 43 30 a4 00 10 44 0e 5c 2e 5f 50 52 5f 43 50 DC0...D.\._PR_CP 0610: 55 33 14 1f 5f 50 44 43 01 70 5c 2f 03 5f 50 52 U3.._PDC.p\/._PR 0620: 5f 43 50 55 30 43 50 44 43 68 60 47 43 41 50 60 _CPU0CPDCh`GCAP` 0630: a4 60 14 22 5f 4f 53 43 04 70 5c 2f 03 5f 50 52 .`."_OSC.p\/._PR 0640: 5f 43 50 55 30 43 4f 53 43 68 69 6a 6b 60 47 43 _CPU0COSChijk`GC 0650: 41 50 60 a4 60 14 44 09 47 43 41 50 01 8a 68 00 AP`.`.D.GCAP..h. 0660: 53 54 53 33 8a 68 0a 04 43 41 50 33 a0 12 91 93 STS3.h..CAP3.... 0670: 53 54 53 33 0a 06 93 53 54 53 33 0a 0a a4 00 a0 STS3...STS3..... 0680: 16 7b 53 54 53 33 01 00 7b 43 41 50 33 0b ff 0b .{STS3..{CAP3... 0690: 43 41 50 33 a4 00 7d 7b 50 44 43 33 0c ff ff ff CAP3..}{PDC3.... 06a0: 7f 00 43 41 50 33 50 44 43 33 a0 1b 93 7b 50 44 ..CAP3PDC3...{PD 06b0: 43 33 0a 09 00 0a 09 5c 2f 03 5f 50 52 5f 43 50 C3.....\/._PR_CP 06c0: 55 31 41 50 50 54 a0 18 7b 50 44 43 33 0a 18 00 U1APPT..{PDC3... 06d0: 5c 2f 03 5f 50 52 5f 43 50 55 31 41 50 43 54 70 \/._PR_CPU1APCTp 06e0: 50 44 43 33 50 44 43 30 a4 00 10 44 0e 5c 2e 5f PDC3PDC0...D.\._ 06f0: 50 52 5f 43 50 55 34 14 1f 5f 50 44 43 01 70 5c PR_CPU4.._PDC.p\ 0700: 2f 03 5f 50 52 5f 43 50 55 30 43 50 44 43 68 60 /._PR_CPU0CPDCh` 0710: 47 43 41 50 60 a4 60 14 22 5f 4f 53 43 04 70 5c GCAP`.`."_OSC.p\ 0720: 2f 03 5f 50 52 5f 43 50 55 30 43 4f 53 43 68 69 /._PR_CPU0COSChi 0730: 6a 6b 60 47 43 41 50 60 a4 60 14 44 09 47 43 41 jk`GCAP`.`.D.GCA 0740: 50 01 8a 68 00 53 54 53 34 8a 68 0a 04 43 41 50 P..h.STS4.h..CAP 0750: 34 a0 12 91 93 53 54 53 34 0a 06 93 53 54 53 34 4....STS4...STS4 0760: 0a 0a a4 00 a0 16 7b 53 54 53 34 01 00 7b 43 41 ......{STS4..{CA 0770: 50 34 0b ff 0b 43 41 50 34 a4 00 7d 7b 50 44 43 P4...CAP4..}{PDC 0780: 34 0c ff ff ff 7f 00 43 41 50 34 50 44 43 34 a0 4......CAP4PDC4. 0790: 1b 93 7b 50 44 43 34 0a 09 00 0a 09 5c 2f 03 5f ..{PDC4.....\/._ 07a0: 50 52 5f 43 50 55 31 41 50 50 54 a0 18 7b 50 44 PR_CPU1APPT..{PD 07b0: 43 34 0a 18 00 5c 2f 03 5f 50 52 5f 43 50 55 31 C4...\/._PR_CPU1 07c0: 41 50 43 54 70 50 44 43 34 50 44 43 30 a4 00 10 APCTpPDC4PDC0... 07d0: 44 0e 5c 2e 5f 50 52 5f 43 50 55 35 14 1f 5f 50 D.\._PR_CPU5.._P 07e0: 44 43 01 70 5c 2f 03 5f 50 52 5f 43 50 55 30 43 DC.p\/._PR_CPU0C 07f0: 50 44 43 68 60 47 43 41 50 60 a4 60 14 22 5f 4f PDCh`GCAP`.`."_O 0800: 53 43 04 70 5c 2f 03 5f 50 52 5f 43 50 55 30 43 SC.p\/._PR_CPU0C 0810: 4f 53 43 68 69 6a 6b 60 47 43 41 50 60 a4 60 14 OSChijk`GCAP`.`. 0820: 44 09 47 43 41 50 01 8a 68 00 53 54 53 35 8a 68 D.GCAP..h.STS5.h 0830: 0a 04 43 41 50 35 a0 12 91 93 53 54 53 35 0a 06 ..CAP5....STS5.. 0840: 93 53 54 53 35 0a 0a a4 00 a0 16 7b 53 54 53 35 .STS5......{STS5 0850: 01 00 7b 43 41 50 35 0b ff 0b 43 41 50 35 a4 00 ..{CAP5...CAP5.. 0860: 7d 7b 50 44 43 35 0c ff ff ff 7f 00 43 41 50 35 }{PDC5......CAP5 0870: 50 44 43 35 a0 1b 93 7b 50 44 43 35 0a 09 00 0a PDC5...{PDC5.... 0880: 09 5c 2f 03 5f 50 52 5f 43 50 55 31 41 50 50 54 .\/._PR_CPU1APPT 0890: a0 18 7b 50 44 43 35 0a 18 00 5c 2f 03 5f 50 52 ..{PDC5...\/._PR 08a0: 5f 43 50 55 31 41 50 43 54 70 50 44 43 35 50 44 _CPU1APCTpPDC5PD 08b0: 43 30 a4 00 10 44 0e 5c 2e 5f 50 52 5f 43 50 55 C0...D.\._PR_CPU 08c0: 36 14 1f 5f 50 44 43 01 70 5c 2f 03 5f 50 52 5f 6.._PDC.p\/._PR_ 08d0: 43 50 55 30 43 50 44 43 68 60 47 43 41 50 60 a4 CPU0CPDCh`GCAP`. 08e0: 60 14 22 5f 4f 53 43 04 70 5c 2f 03 5f 50 52 5f `."_OSC.p\/._PR_ 08f0: 43 50 55 30 43 4f 53 43 68 69 6a 6b 60 47 43 41 CPU0COSChijk`GCA 0900: 50 60 a4 60 14 44 09 47 43 41 50 01 8a 68 00 53 P`.`.D.GCAP..h.S 0910: 54 53 36 8a 68 0a 04 43 41 50 36 a0 12 91 93 53 TS6.h..CAP6....S 0920: 54 53 36 0a 06 93 53 54 53 36 0a 0a a4 00 a0 16 TS6...STS6...... 0930: 7b 53 54 53 36 01 00 7b 43 41 50 36 0b ff 0b 43 {STS6..{CAP6...C 0940: 41 50 36 a4 00 7d 7b 50 44 43 36 0c ff ff ff 7f AP6..}{PDC6..... 0950: 00 43 41 50 36 50 44 43 36 a0 1b 93 7b 50 44 43 .CAP6PDC6...{PDC 0960: 36 0a 09 00 0a 09 5c 2f 03 5f 50 52 5f 43 50 55 6.....\/._PR_CPU 0970: 31 41 50 50 54 a0 18 7b 50 44 43 36 0a 18 00 5c 1APPT..{PDC6...\ 0980: 2f 03 5f 50 52 5f 43 50 55 31 41 50 43 54 70 50 /._PR_CPU1APCTpP 0990: 44 43 36 50 44 43 30 a4 00 10 44 0e 5c 2e 5f 50 DC6PDC0...D.\._P 09a0: 52 5f 43 50 55 37 14 1f 5f 50 44 43 01 70 5c 2f R_CPU7.._PDC.p\/ 09b0: 03 5f 50 52 5f 43 50 55 30 43 50 44 43 68 60 47 ._PR_CPU0CPDCh`G 09c0: 43 41 50 60 a4 60 14 22 5f 4f 53 43 04 70 5c 2f CAP`.`."_OSC.p\/ 09d0: 03 5f 50 52 5f 43 50 55 30 43 4f 53 43 68 69 6a ._PR_CPU0COSChij 09e0: 6b 60 47 43 41 50 60 a4 60 14 44 09 47 43 41 50 k`GCAP`.`.D.GCAP 09f0: 01 8a 68 00 53 54 53 37 8a 68 0a 04 43 41 50 37 ..h.STS7.h..CAP7 0a00: a0 12 91 93 53 54 53 37 0a 06 93 53 54 53 37 0a ....STS7...STS7. 0a10: 0a a4 00 a0 16 7b 53 54 53 37 01 00 7b 43 41 50 .....{STS7..{CAP 0a20: 37 0b ff 0b 43 41 50 37 a4 00 7d 7b 50 44 43 37 7...CAP7..}{PDC7 0a30: 0c ff ff ff 7f 00 43 41 50 37 50 44 43 37 a0 1b ......CAP7PDC7.. 0a40: 93 7b 50 44 43 37 0a 09 00 0a 09 5c 2f 03 5f 50 .{PDC7.....\/._P 0a50: 52 5f 43 50 55 31 41 50 50 54 a0 18 7b 50 44 43 R_CPU1APPT..{PDC 0a60: 37 0a 18 00 5c 2f 03 5f 50 52 5f 43 50 55 31 41 7...\/._PR_CPU1A 0a70: 50 43 54 70 50 44 43 37 50 44 43 30 a4 00 PCTpPDC7PDC0.. DMAR @ 0xdafda000 0000: 44 4d 41 52 b8 00 00 00 01 e3 49 4e 54 45 4c 20 DMAR......INTEL 0010: 53 4e 42 20 00 00 00 00 01 00 00 00 49 4e 54 4c SNB ........INTL 0020: 01 00 00 00 23 01 00 00 00 00 00 00 00 00 00 00 ....#........... 0030: 00 00 18 00 00 00 00 00 00 00 d9 fe 00 00 00 00 ................ 0040: 01 08 00 00 00 00 02 00 00 00 20 00 01 00 00 00 .......... ..... 0050: 00 10 d9 fe 00 00 00 00 03 08 00 00 02 f0 1f 00 ................ 0060: 04 08 00 00 00 f0 0f 00 01 00 30 00 00 00 00 00 ..........0..... 0070: 00 00 2f da 00 00 00 00 ff 6f 30 da 00 00 00 00 ../......o0..... 0080: 01 08 00 00 00 00 1d 00 01 08 00 00 00 00 1a 00 ................ 0090: 01 08 00 00 00 00 14 00 01 00 20 00 00 00 00 00 .......... ..... 00a0: 00 00 80 db 00 00 00 00 ff ff 9f df 00 00 00 00 ................ 00b0: 01 08 00 00 00 00 02 00 ........ UEFI @ 0xdafd9000 0000: 55 45 46 49 a6 02 00 00 01 94 4c 45 4e 4f 56 4f UEFI......LENOVO 0010: 54 50 2d 47 32 20 20 20 10 11 00 00 50 54 4c 20 TP-G2 ....PTL 0020: 02 00 00 00 97 b1 9f 0d fc ce 91 4e ac b1 25 35 ...........N..%5 0030: d9 e5 a8 44 36 00 1f 00 00 00 42 00 00 00 43 00 ...D6.....B...C. 0040: 00 00 44 00 00 00 45 00 00 00 46 00 00 00 47 00 ..D...E...F...G. 0050: 00 00 48 00 00 00 49 00 00 00 4a 00 00 00 4b 00 ..H...I...J...K. 0060: 00 00 4d 00 00 00 51 00 00 00 f2 00 00 00 f1 00 ..M...Q......... 0070: 00 00 52 00 00 00 e9 00 00 00 01 00 00 00 02 00 ..R............. 0080: 00 00 ab 00 00 00 03 00 00 00 20 00 00 00 04 00 .......... ..... 0090: 00 00 05 00 00 00 06 00 00 00 c1 00 00 00 07 00 ................ 00a0: 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0b 00 ................ 00b0: 00 00 0c 00 00 00 83 0c fa 0e d7 03 b9 44 9c 8d .............D.. 00c0: 6f 32 e6 3e c0 98 78 98 e4 93 55 ad fd 46 b6 16 o2.>..x...U..F.. 00d0: 6c 4e 69 9a 6b 9e e9 79 fb c0 21 28 21 4c 9a bb lNi.k..y..!(!L.. 00e0: 9e 7e b2 ca 15 f4 39 12 2f ce 28 7d f2 43 b5 15 .~....9./.(}.C.. 00f0: 5e 60 9f 10 06 0c b8 6e 83 9e 86 8a 60 4a 83 a9 ^`.....n....`J.. 0100: d4 41 e9 6a 27 05 62 40 78 f8 bd 63 de 44 af 27 .A.j'.b@x..c.D.' 0110: f8 27 fd 67 89 06 c5 c0 04 ae 4c 4b 82 44 a3 53 .'.g......LK.D.S 0120: c1 38 2b 4a 08 48 ed 36 ec ca ae c7 d9 4e b5 e1 .8+J.H.6.....N.. 0130: e3 4e 15 cb 8f 04 4a df a9 58 ef fb c8 4d a3 9f .N....J..X...M.. 0140: 8d b6 be 0f 83 70 1d b2 04 dc 15 5d 50 4d a2 d8 .....p.....]PM.. 0150: 5d 1b 4f 82 ac 11 8f 0a 9e ca 15 f8 29 4a a7 16 ].O.........)J.. 0160: eb ae 45 ca 63 6e 63 db 4b cc a3 ad 42 48 ba 0c ..E.cnc.K...BH.. 0170: 50 58 ad 17 d3 d8 e2 36 f7 1b fc f4 39 4c 9e 9b PX.....6....9L.. 0180: ce a8 35 39 c3 1a 9c 9c c7 c4 09 9f 51 41 99 c4 ..59........QA.. 0190: 53 a0 0a 4a 94 96 00 a8 63 ef 86 95 fb 42 84 ab S..J....c....B.. 01a0: ea 59 0b f1 41 aa 58 dc af d8 22 6e f8 42 99 66 .Y..A.X..."n.B.f 01b0: 36 ff 78 8c 9c af cf 73 d7 68 b2 fb dd 47 ac d1 6.x....s.h...G.. 01c0: 21 8e f9 19 a5 2c 5e 1d 9c 62 bd f6 52 4f 8a 5f !....,^..b..RO._ 01d0: 93 96 e7 28 9b ec c1 50 59 3f ba 9c 76 4e b2 aa ...(...PY?..vN.. 01e0: 83 4f da 5e 07 c9 65 00 9b 59 30 86 71 4b b4 9c .O.^..e..Y0.qK.. 01f0: 0b 12 af 56 07 80 66 73 5e 52 29 84 65 4b b1 77 ...V..fs^R).eK.w 0200: 3b 79 04 dd bf 85 7f ee 45 d0 be 98 eb 4f bd 30 ;y......E....O.0 0210: d6 76 37 7d ce f8 a9 0b 09 b4 66 d2 03 4e be 37 .v7}......f..N.7 0220: ad bd bc 85 63 fd 25 51 b0 6d bb 88 8e 41 a4 bc ....c.%Q.m...A.. 0230: ef c4 17 4d 69 bc 38 b4 91 da 47 8b 0a 4d ad 56 ...Mi.8...G..M.V 0240: c7 28 a9 4c 7f 58 9c 7c 96 6e 42 8e 65 48 9d 6c .(.L.X.|.nB.eH.l 0250: 4f 80 05 2f 2c 0e c9 27 0d b0 dc cc 13 44 90 78 O../,..'.....D.x 0260: 14 88 a0 0c b6 fe ec 9a 91 b8 9c 93 4b 47 a9 18 ............KG.. 0270: 29 9f b2 65 93 6c 8a 8c 3c 24 d0 bb a9 4a be 17 )..e.l..<$...J.. 0280: cf 9b 58 31 30 ec 05 9e e1 ee 9a 07 17 4d 8f 46 ..X10........M.F 0290: cf 81 12 60 db 26 c7 76 9f 9b fa 28 2b 45 97 1f ...`.&.v...(+E.. 02a0: c1 20 ed 9f 5e 99 . ..^. XSDT @ 0xdaffe170 0000: 58 53 44 54 bc 00 00 00 01 3a 4c 45 4e 4f 56 4f XSDT.....:LENOVO 0010: 54 50 2d 47 32 20 20 20 10 11 00 00 50 54 4c 20 TP-G2 ....PTL 0020: 02 00 00 00 00 50 fe da 00 00 00 00 00 d0 ff da .....P.......... 0030: 00 00 00 00 00 c0 ff da 00 00 00 00 00 b0 ff da ................ 0040: 00 00 00 00 00 a0 ff da 00 00 00 00 00 90 ff da ................ 0050: 00 00 00 00 00 40 fe da 00 00 00 00 00 30 fe da .....@.......0.. 0060: 00 00 00 00 00 20 fe da 00 00 00 00 00 10 fe da ..... .......... 0070: 00 00 00 00 00 00 fe da 00 00 00 00 00 70 fe da .............p.. 0080: 00 00 00 00 00 f0 fd da 00 00 00 00 00 e0 fd da ................ 0090: 00 00 00 00 00 d0 fd da 00 00 00 00 00 c0 fd da ................ 00a0: 00 00 00 00 00 b0 fd da 00 00 00 00 00 a0 fd da ................ 00b0: 00 00 00 00 00 90 fd da 00 00 00 00 ............ RSD PTR @ 0xf0120 0000: 52 53 44 20 50 54 52 20 7f 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: d4 e0 ff da 24 00 00 00 70 e1 ff da 00 00 00 00 ....$...p....... 0020: b2 00 00 00 .... fwts-test/wmi-0001/acpidump-0002.log000066400000000000000000013006751465205512700170770ustar00rootroot00000000000000APIC @ 0x00000000 0000: 41 50 49 43 cc 00 00 00 02 d3 5f 41 53 55 53 5f APIC......_ASUS_ 0010: 4e 6f 74 65 62 6f 6f 6b 04 20 22 06 4d 53 46 54 Notebook. ".MSFT 0020: 13 00 01 00 00 00 e0 fe 01 00 00 00 00 08 01 00 ................ 0030: 01 00 00 00 00 08 02 02 01 00 00 00 00 08 03 04 ................ 0040: 01 00 00 00 00 08 04 06 01 00 00 00 00 08 05 01 ................ 0050: 01 00 00 00 00 08 06 03 01 00 00 00 00 08 07 05 ................ 0060: 01 00 00 00 00 08 08 07 01 00 00 00 00 08 09 08 ................ 0070: 00 00 00 00 00 08 0a 09 00 00 00 00 00 08 0b 0a ................ 0080: 00 00 00 00 00 08 0c 0b 00 00 00 00 00 08 0d 0c ................ 0090: 00 00 00 00 00 08 0e 0d 00 00 00 00 00 08 0f 0e ................ 00a0: 00 00 00 00 00 08 10 0f 00 00 00 00 01 0c 02 00 ................ 00b0: 00 00 c0 fe 00 00 00 00 02 0a 00 00 02 00 00 00 ................ 00c0: 00 00 02 0a 00 09 09 00 00 00 0d 00 ............ ASF! @ 0x00000000 0000: 41 53 46 21 a0 00 00 00 20 3e 49 4e 54 45 4c 20 ASF!.... >INTEL 0010: 20 48 43 47 00 00 00 00 01 00 00 00 54 46 53 4d HCG........TFSM 0020: 40 42 0f 00 00 00 10 00 ff ff 01 00 00 00 01 57 @B.............W 0030: 00 00 00 00 01 00 2c 00 00 00 03 0c 89 04 01 01 ......,......... 0040: 05 6f 00 68 08 88 17 00 89 04 04 04 07 6f 00 68 .o.h.........o.h 0050: 20 88 03 00 89 05 01 01 19 6f 00 68 20 88 22 00 ........o.h .". 0060: 02 00 18 00 04 04 00 00 00 88 00 03 01 88 00 02 ................ 0070: 02 88 00 01 03 88 00 04 03 00 17 00 20 f8 00 00 ............ ... 0080: 00 13 f0 00 00 00 01 57 00 00 00 00 01 00 00 84 .......W........ 0090: 00 11 00 00 0b 5c 68 88 c2 d2 dc a0 a2 a4 a6 c8 .....\h......... DBGP @ 0x00000000 0000: 44 42 47 50 34 00 00 00 01 8e 5f 41 53 55 53 5f DBGP4....._ASUS_ 0010: 4e 6f 74 65 62 6f 6f 6b 04 20 22 06 4d 53 46 54 Notebook. ".MSFT 0020: 13 00 01 00 00 00 00 00 01 08 00 00 40 02 00 00 ............@... 0030: 00 00 00 00 .... ECDT @ 0x00000000 0000: 45 43 44 54 c1 00 00 00 01 ce 5f 41 53 55 53 5f ECDT......_ASUS_ 0010: 4e 6f 74 65 62 6f 6f 6b 04 20 22 06 41 4d 49 2e Notebook. ".AMI. 0020: 03 00 00 00 01 08 00 00 66 00 00 00 00 00 00 00 ........f....... 0030: 01 08 00 00 62 00 00 00 00 00 00 00 00 00 00 00 ....b........... 0040: 1b 5c 5f 53 42 2e 50 43 49 30 2e 53 42 52 47 2e .\_SB.PCI0.SBRG. 0050: 45 43 30 00 00 00 00 00 00 00 00 00 00 00 00 00 EC0............. 0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 . DSDT @ 0x00000000 0000: 44 53 44 54 bd 0d 01 00 01 04 5f 41 53 55 53 5f DSDT......_ASUS_ 0010: 4e 6f 74 65 62 6f 6f 6b 00 00 00 00 49 4e 54 4c Notebook....INTL 0020: 12 11 09 20 08 53 53 31 5f 0a 01 08 53 53 32 5f ... .SS1_...SS2_ 0030: 0a 00 08 53 53 33 5f 0a 01 08 53 53 34 5f 0a 01 ...SS3_...SS4_.. 0040: 08 49 4f 53 54 0b 00 44 08 54 4f 50 4d 0c ff ff .IOST..D.TOPM... 0050: ff bf 08 52 4f 4d 53 0c 00 00 e0 ff 08 4d 47 31 ...ROMS......MG1 0060: 42 0c 00 00 00 00 08 4d 47 31 4c 0c 00 00 00 00 B......MG1L..... 0070: 08 4d 47 32 42 0c 00 00 00 c0 08 4d 47 32 4c 0c .MG2B......MG2L. 0080: 00 c0 50 24 08 4d 43 48 42 0c 00 00 d1 fe 08 4d ..P$.MCHB......M 0090: 43 48 4c 0b 00 40 08 45 47 50 42 0c 00 90 d1 fe CHL..@.EGPB..... 00a0: 08 45 47 50 4c 0b 00 10 08 44 4d 49 42 0c 00 80 .EGPL....DMIB... 00b0: d1 fe 08 44 4d 49 4c 0b 00 10 08 49 46 50 42 0c ...DMIL....IFPB. 00c0: 00 40 d1 fe 08 49 46 50 4c 0b 00 10 08 50 45 42 .@...IFPL....PEB 00d0: 53 0c 00 00 00 e0 08 50 45 4c 4e 0c 00 00 00 04 S......PELN..... 00e0: 08 54 54 54 42 0c 00 00 d2 fe 08 54 54 54 4c 0c .TTTB......TTTL. 00f0: 00 00 02 00 08 53 4d 42 53 0b a0 ef 08 53 4d 42 .....SMBS....SMB 0100: 4c 0a 10 08 50 42 4c 4b 0b 10 04 08 50 4d 42 53 L...PBLK....PMBS 0110: 0b 00 04 08 50 4d 4c 4e 0a 80 08 4c 56 4c 32 0b ....PMLN...LVL2. 0120: 14 04 08 4c 56 4c 33 0b 15 04 08 4c 56 4c 34 0b ...LVL3....LVL4. 0130: 16 04 08 53 4d 49 50 0a b2 08 47 50 42 53 0b 00 ...SMIP...GPBS.. 0140: 05 08 47 50 4c 4e 0a 80 08 41 50 43 42 0c 00 00 ..GPLN...APCB... 0150: c0 fe 08 41 50 43 4c 0b 00 10 08 50 4d 33 30 0b ...APCL....PM30. 0160: 30 04 08 53 52 43 42 0c 00 c0 d1 fe 08 53 52 43 0..SRCB......SRC 0170: 4c 0b 00 40 08 53 55 53 57 0a ff 08 48 50 54 42 L..@.SUSW...HPTB 0180: 0c 00 00 d0 fe 08 48 50 54 43 0c 04 f4 d1 fe 08 ......HPTC...... 0190: 41 43 50 48 0a de 08 41 53 53 42 0a 00 08 41 4f ACPH...ASSB...AO 01a0: 54 42 0a 00 08 41 41 58 42 0a 00 08 50 45 48 50 TB...AAXB...PEHP 01b0: 0a 00 08 53 48 50 43 0a 01 08 50 45 50 4d 0a 00 ...SHPC...PEPM.. 01c0: 08 50 45 45 52 0a 00 08 50 45 43 53 0a 00 08 49 .PEER...PECS...I 01d0: 54 4b 45 0a 00 08 44 53 53 50 0a 00 08 46 48 50 TKE...DSSP...FHP 01e0: 50 0a 01 08 46 4d 42 4c 0a 01 08 46 44 54 50 0a P...FMBL...FDTP. 01f0: 02 08 46 55 50 53 0a 03 08 42 53 48 5f 0a 00 08 ..FUPS...BSH_... 0200: 42 45 4c 5f 0a 01 08 42 45 48 5f 0a 02 08 42 52 BEL_...BEH_...BR 0210: 48 5f 0a 03 08 42 54 46 5f 0a 04 08 42 48 43 5f H_...BTF_...BHC_ 0220: 0a 05 08 42 59 42 5f 0a 06 08 42 50 48 5f 0a 07 ...BYB_...BPH_.. 0230: 08 42 53 48 53 0a 08 08 42 45 4c 53 0a 09 08 42 .BSHS...BELS...B 0240: 52 48 53 0a 0a 08 42 54 46 53 0a 0b 08 42 45 48 RHS...BTFS...BEH 0250: 53 0a 0c 08 42 50 48 53 0a 0d 08 42 54 4c 5f 0a S...BPHS...BTL_. 0260: 10 08 42 53 52 5f 0a 14 08 42 53 43 5f 0a 1b 08 ..BSR_...BSC_... 0270: 42 43 43 5f 0a 1c 08 42 4f 46 5f 0a 20 08 42 45 BCC_...BOF_. .BE 0280: 46 5f 0a 21 08 42 4c 4c 45 0a 22 08 42 4c 4c 43 F_.!.BLLE.".BLLC 0290: 0a 23 08 42 4c 43 41 0a 24 08 42 4c 4c 53 0a 25 .#.BLCA.$.BLLS.% 02a0: 08 42 4c 4c 50 0a 26 08 42 4c 4c 44 0a 27 08 42 .BLLP.&.BLLD.'.B 02b0: 48 42 45 0a 30 08 42 48 42 43 0a 31 08 42 48 42 HBE.0.BHBC.1.BHB 02c0: 4e 0a 32 08 42 48 42 4d 0a 33 08 54 52 54 50 0a N.2.BHBM.3.TRTP. 02d0: 01 08 57 44 54 45 0a 01 08 54 52 54 44 0a 02 08 ..WDTE...TRTD... 02e0: 54 52 54 49 0a 03 08 47 43 44 44 0a 01 08 44 53 TRTI...GCDD...DS 02f0: 54 41 0a 0a 08 44 53 4c 4f 0a 0c 08 44 53 4c 43 TA...DSLO...DSLC 0300: 0a 0e 08 50 49 54 53 0a 10 08 53 42 43 53 0a 12 ...PITS...SBCS.. 0310: 08 53 41 4c 53 0a 13 08 4c 53 53 53 0a 2a 08 53 .SALS...LSSS.*.S 0320: 4f 4f 54 0a 35 08 50 44 42 52 0a 4d 08 4d 42 45 OOT.5.PDBR.M.MBE 0330: 43 0a 00 08 4d 42 4c 46 0a 0a 5b 80 47 4e 56 53 C...MBLF..[.GNVS 0340: 00 0c 18 be 79 bf 0b a8 01 5b 81 4a 3b 47 4e 56 ....y....[.J;GNV 0350: 53 10 4f 53 59 53 10 53 4d 49 46 08 50 52 4d 30 S.OSYS.SMIF.PRM0 0360: 08 50 52 4d 31 08 53 43 49 46 08 50 52 4d 32 08 .PRM1.SCIF.PRM2. 0370: 50 52 4d 33 08 4c 43 4b 46 08 50 52 4d 34 08 50 PRM3.LCKF.PRM4.P 0380: 52 4d 35 08 50 38 30 44 20 4c 49 44 53 08 50 57 RM5.P80D LIDS.PW 0390: 52 53 08 44 42 47 53 08 54 48 4f 46 08 41 43 54 RS.DBGS.THOF.ACT 03a0: 31 08 41 43 54 54 08 50 53 56 54 08 54 43 31 56 1.ACTT.PSVT.TC1V 03b0: 08 54 43 32 56 08 54 53 50 56 08 43 52 54 54 08 .TC2V.TSPV.CRTT. 03c0: 44 54 53 45 08 44 54 53 31 08 44 54 53 32 08 44 DTSE.DTS1.DTS2.D 03d0: 54 53 46 08 00 38 52 45 56 4e 08 00 10 41 50 49 TSF..8REVN...API 03e0: 43 08 54 43 4e 54 08 50 43 50 30 08 50 43 50 31 C.TCNT.PCP0.PCP1 03f0: 08 50 50 43 4d 08 50 50 4d 46 20 43 36 37 4c 08 .PPCM.PPMF C67L. 0400: 4e 41 54 50 08 43 4d 41 50 08 43 4d 42 50 08 4c NATP.CMAP.CMBP.L 0410: 50 54 50 08 46 44 43 50 08 43 4d 43 50 08 43 49 PTP.FDCP.CMCP.CI 0420: 52 50 08 53 4d 53 43 08 57 33 38 31 08 53 4d 43 RP.SMSC.W381.SMC 0430: 31 08 49 47 44 53 08 54 4c 53 54 08 43 41 44 4c 1.IGDS.TLST.CADL 0440: 08 50 41 44 4c 08 43 53 54 45 10 4e 53 54 45 10 .PADL.CSTE.NSTE. 0450: 53 53 54 45 10 4e 44 49 44 08 44 49 44 31 20 44 SSTE.NDID.DID1 D 0460: 49 44 32 20 44 49 44 33 20 44 49 44 34 20 44 49 ID2 DID3 DID4 DI 0470: 44 35 20 4b 53 56 30 20 4b 53 56 31 08 00 38 42 D5 KSV0 KSV1..8B 0480: 4c 43 53 08 42 52 54 4c 08 41 4c 53 45 08 41 4c LCS.BRTL.ALSE.AL 0490: 41 46 08 4c 4c 4f 57 08 4c 48 49 48 08 00 08 45 AF.LLOW.LHIH...E 04a0: 4d 41 45 08 45 4d 41 50 10 45 4d 41 4c 10 00 08 MAE.EMAP.EMAL... 04b0: 4d 45 46 45 08 44 53 54 53 08 00 10 54 50 4d 50 MEFE.DSTS...TPMP 04c0: 08 54 50 4d 45 08 4d 4f 52 44 08 54 43 47 50 08 .TPME.MORD.TCGP. 04d0: 50 50 52 50 20 50 50 52 51 08 4c 50 50 52 08 47 PPRP PPRQ.LPPR.G 04e0: 54 46 30 38 47 54 46 32 38 49 44 45 4d 08 47 54 TF08GTF28IDEM.GT 04f0: 46 31 38 42 49 44 5f 08 00 48 08 41 53 4c 42 20 F18BID_..H.ASLB 0500: 49 42 54 54 08 49 50 41 54 08 49 54 56 46 08 49 IBTT.IPAT.ITVF.I 0510: 54 56 4d 08 49 50 53 43 08 49 42 4c 43 08 49 42 TVM.IPSC.IBLC.IB 0520: 49 41 08 49 53 53 43 08 49 34 30 39 08 49 35 30 IA.ISSC.I409.I50 0530: 39 08 49 36 30 39 08 49 37 30 39 08 49 50 43 46 9.I609.I709.IPCF 0540: 08 49 44 4d 53 08 49 46 31 45 08 48 56 43 4f 08 .IDMS.IF1E.HVCO. 0550: 4e 58 44 31 20 4e 58 44 32 20 4e 58 44 33 20 4e NXD1 NXD2 NXD3 N 0560: 58 44 34 20 4e 58 44 35 20 4e 58 44 36 20 4e 58 XD4 NXD5 NXD6 NX 0570: 44 37 20 4e 58 44 38 20 47 53 4d 49 08 50 41 56 D7 NXD8 GSMI.PAV 0580: 50 08 00 08 4f 53 43 43 08 4e 45 58 50 08 53 42 P...OSCC.NEXP.SB 0590: 56 31 08 53 42 56 32 08 00 30 44 53 45 4e 08 45 V1.SBV2..0DSEN.E 05a0: 43 4f 4e 08 47 50 49 43 08 43 54 59 50 08 4c 30 CON.GPIC.CTYP.L0 05b0: 31 43 08 56 46 4e 30 08 56 46 4e 31 08 56 46 4e 1C.VFN0.VFN1.VFN 05c0: 32 08 56 46 4e 33 08 56 46 4e 34 08 00 48 05 4e 2.VFN3.VFN4..H.N 05d0: 56 47 41 20 4e 56 48 41 20 41 4d 44 41 20 44 49 VGA NVHA AMDA DI 05e0: 44 36 20 44 49 44 37 20 44 49 44 38 20 45 42 41 D6 DID7 DID8 EBA 05f0: 53 20 43 50 53 50 20 45 45 43 50 20 45 56 43 50 S CPSP EECP EVCP 0600: 20 58 42 41 53 20 4f 42 53 31 20 4f 42 53 32 20 XBAS OBS1 OBS2 0610: 4f 42 53 33 20 4f 42 53 34 20 4f 42 53 35 20 4f OBS3 OBS4 OBS5 O 0620: 42 53 36 20 4f 42 53 37 20 4f 42 53 38 20 00 48 BS6 OBS7 OBS8 .H 0630: 05 41 54 4d 43 08 50 54 4d 43 08 41 54 52 41 08 .ATMC.PTMC.ATRA. 0640: 50 54 52 41 08 50 4e 48 4d 20 54 42 41 42 20 54 PTRA.PNHM TBAB T 0650: 42 41 48 20 52 54 49 50 08 54 53 4f 44 08 41 54 BAH RTIP.TSOD.AT 0660: 50 43 08 50 54 50 43 08 50 46 4c 56 08 42 52 45 PC.PTPC.PFLV.BRE 0670: 56 08 53 47 4d 44 08 53 47 46 4c 08 50 57 4f 4b V.SGMD.SGFL.PWOK 0680: 08 48 4c 52 53 08 44 53 45 4c 08 45 53 45 4c 08 .HLRS.DSEL.ESEL. 0690: 50 53 45 4c 08 50 57 45 4e 08 50 52 53 54 08 4d PSEL.PWEN.PRST.M 06a0: 58 44 31 20 4d 58 44 32 20 4d 58 44 33 20 4d 58 XD1 MXD2 MXD3 MX 06b0: 44 34 20 4d 58 44 35 20 4d 58 44 36 20 4d 58 44 D4 MXD5 MXD6 MXD 06c0: 37 20 4d 58 44 38 20 47 42 41 53 10 00 28 41 4c 7 MXD8 GBAS..(AL 06d0: 46 50 08 49 4d 4f 4e 08 50 44 54 53 08 50 4b 47 FP.IMON.PDTS.PKG 06e0: 41 08 50 41 4d 54 08 41 43 30 46 08 41 43 31 46 A.PAMT.AC0F.AC1F 06f0: 08 44 54 53 33 08 44 54 53 34 08 52 53 56 32 08 .DTS3.DTS4.RSV2. 0700: 52 53 56 33 08 10 86 68 06 5c 5f 53 42 5f 08 50 RSV3...h.\_SB_.P 0710: 52 30 30 12 43 24 24 12 0f 04 0c ff ff 01 00 0a R00.C$$......... 0720: 00 4c 4e 4b 41 0a 00 12 0f 04 0c ff ff 01 00 0a .LNKA........... 0730: 01 4c 4e 4b 42 0a 00 12 0f 04 0c ff ff 01 00 0a .LNKB........... 0740: 02 4c 4e 4b 43 0a 00 12 0f 04 0c ff ff 01 00 0a .LNKC........... 0750: 03 4c 4e 4b 44 0a 00 12 0f 04 0c ff ff 06 00 0a .LNKD........... 0760: 00 4c 4e 4b 44 0a 00 12 0f 04 0c ff ff 06 00 0a .LNKD........... 0770: 01 4c 4e 4b 41 0a 00 12 0f 04 0c ff ff 06 00 0a .LNKA........... 0780: 02 4c 4e 4b 42 0a 00 12 0f 04 0c ff ff 06 00 0a .LNKB........... 0790: 03 4c 4e 4b 43 0a 00 12 0f 04 0c ff ff 04 00 0a .LNKC........... 07a0: 00 4c 4e 4b 41 0a 00 12 0f 04 0c ff ff 04 00 0a .LNKA........... 07b0: 01 4c 4e 4b 42 0a 00 12 0f 04 0c ff ff 04 00 0a .LNKB........... 07c0: 02 4c 4e 4b 43 0a 00 12 0f 04 0c ff ff 04 00 0a .LNKC........... 07d0: 03 4c 4e 4b 44 0a 00 12 0f 04 0c ff ff 1f 00 0a .LNKD........... 07e0: 02 4c 4e 4b 43 0a 00 12 0f 04 0c ff ff 1f 00 0a .LNKC........... 07f0: 03 4c 4e 4b 41 0a 00 12 0f 04 0c ff ff 1b 00 0a .LNKA........... 0800: 00 4c 4e 4b 47 0a 00 12 0f 04 0c ff ff 18 00 0a .LNKG........... 0810: 00 4c 4e 4b 45 0a 00 12 0f 04 0c ff ff 19 00 0a .LNKE........... 0820: 00 4c 4e 4b 45 0a 00 12 0f 04 0c ff ff 16 00 0a .LNKE........... 0830: 00 4c 4e 4b 41 0a 00 12 0f 04 0c ff ff 16 00 0a .LNKA........... 0840: 01 4c 4e 4b 44 0a 00 12 0f 04 0c ff ff 16 00 0a .LNKD........... 0850: 02 4c 4e 4b 43 0a 00 12 0f 04 0c ff ff 16 00 0a .LNKC........... 0860: 03 4c 4e 4b 42 0a 00 12 0f 04 0c ff ff 1f 00 0a .LNKB........... 0870: 00 4c 4e 4b 46 0a 00 12 0f 04 0c ff ff 1f 00 0a .LNKF........... 0880: 01 4c 4e 4b 44 0a 00 12 0f 04 0c ff ff 1d 00 0a .LNKD........... 0890: 00 4c 4e 4b 48 0a 00 12 0f 04 0c ff ff 1d 00 0a .LNKH........... 08a0: 01 4c 4e 4b 44 0a 00 12 0f 04 0c ff ff 1d 00 0a .LNKD........... 08b0: 02 4c 4e 4b 41 0a 00 12 0f 04 0c ff ff 1d 00 0a .LNKA........... 08c0: 03 4c 4e 4b 43 0a 00 12 0f 04 0c ff ff 1a 00 0a .LNKC........... 08d0: 00 4c 4e 4b 41 0a 00 12 0f 04 0c ff ff 1a 00 0a .LNKA........... 08e0: 01 4c 4e 4b 46 0a 00 12 0f 04 0c ff ff 1a 00 0a .LNKF........... 08f0: 02 4c 4e 4b 43 0a 00 12 0f 04 0c ff ff 1a 00 0a .LNKC........... 0900: 03 4c 4e 4b 44 0a 00 12 0f 04 0c ff ff 1c 00 0a .LNKD........... 0910: 00 4c 4e 4b 41 0a 00 12 0f 04 0c ff ff 1c 00 0a .LNKA........... 0920: 01 4c 4e 4b 42 0a 00 12 0f 04 0c ff ff 1c 00 0a .LNKB........... 0930: 02 4c 4e 4b 43 0a 00 12 0f 04 0c ff ff 1c 00 0a .LNKC........... 0940: 03 4c 4e 4b 44 0a 00 12 0f 04 0c ff ff 02 00 0a .LNKD........... 0950: 00 4c 4e 4b 41 0a 00 08 41 52 30 30 12 4b 1f 24 .LNKA...AR00.K.$ 0960: 12 0d 04 0c ff ff 01 00 0a 00 0a 00 0a 10 12 0d ................ 0970: 04 0c ff ff 01 00 0a 01 0a 00 0a 11 12 0d 04 0c ................ 0980: ff ff 01 00 0a 02 0a 00 0a 12 12 0d 04 0c ff ff ................ 0990: 01 00 0a 03 0a 00 0a 13 12 0d 04 0c ff ff 06 00 ................ 09a0: 0a 00 0a 00 0a 13 12 0d 04 0c ff ff 06 00 0a 01 ................ 09b0: 0a 00 0a 10 12 0d 04 0c ff ff 06 00 0a 02 0a 00 ................ 09c0: 0a 11 12 0d 04 0c ff ff 06 00 0a 03 0a 00 0a 12 ................ 09d0: 12 0d 04 0c ff ff 04 00 0a 00 0a 00 0a 10 12 0d ................ 09e0: 04 0c ff ff 04 00 0a 01 0a 00 0a 11 12 0d 04 0c ................ 09f0: ff ff 04 00 0a 02 0a 00 0a 12 12 0d 04 0c ff ff ................ 0a00: 04 00 0a 03 0a 00 0a 13 12 0d 04 0c ff ff 1f 00 ................ 0a10: 0a 02 0a 00 0a 12 12 0d 04 0c ff ff 1f 00 0a 03 ................ 0a20: 0a 00 0a 10 12 0d 04 0c ff ff 1b 00 0a 00 0a 00 ................ 0a30: 0a 16 12 0d 04 0c ff ff 18 00 0a 00 0a 00 0a 14 ................ 0a40: 12 0d 04 0c ff ff 19 00 0a 00 0a 00 0a 14 12 0d ................ 0a50: 04 0c ff ff 16 00 0a 00 0a 00 0a 10 12 0d 04 0c ................ 0a60: ff ff 16 00 0a 01 0a 00 0a 13 12 0d 04 0c ff ff ................ 0a70: 16 00 0a 02 0a 00 0a 12 12 0d 04 0c ff ff 16 00 ................ 0a80: 0a 03 0a 00 0a 11 12 0d 04 0c ff ff 1f 00 0a 00 ................ 0a90: 0a 00 0a 15 12 0d 04 0c ff ff 1f 00 0a 01 0a 00 ................ 0aa0: 0a 13 12 0d 04 0c ff ff 1d 00 0a 00 0a 00 0a 17 ................ 0ab0: 12 0d 04 0c ff ff 1d 00 0a 01 0a 00 0a 13 12 0d ................ 0ac0: 04 0c ff ff 1d 00 0a 02 0a 00 0a 10 12 0d 04 0c ................ 0ad0: ff ff 1d 00 0a 03 0a 00 0a 12 12 0d 04 0c ff ff ................ 0ae0: 1a 00 0a 00 0a 00 0a 10 12 0d 04 0c ff ff 1a 00 ................ 0af0: 0a 01 0a 00 0a 15 12 0d 04 0c ff ff 1a 00 0a 02 ................ 0b00: 0a 00 0a 12 12 0d 04 0c ff ff 1a 00 0a 03 0a 00 ................ 0b10: 0a 13 12 0d 04 0c ff ff 1c 00 0a 00 0a 00 0a 10 ................ 0b20: 12 0d 04 0c ff ff 1c 00 0a 01 0a 00 0a 11 12 0d ................ 0b30: 04 0c ff ff 1c 00 0a 02 0a 00 0a 12 12 0d 04 0c ................ 0b40: ff ff 1c 00 0a 03 0a 00 0a 13 12 0d 04 0c ff ff ................ 0b50: 02 00 0a 00 0a 00 0a 10 08 50 52 30 32 12 3a 04 .........PR02.:. 0b60: 12 0d 04 0b ff ff 0a 00 4c 4e 4b 41 0a 00 12 0d ........LNKA.... 0b70: 04 0b ff ff 0a 01 4c 4e 4b 42 0a 00 12 0d 04 0b ......LNKB...... 0b80: ff ff 0a 02 4c 4e 4b 43 0a 00 12 0d 04 0b ff ff ....LNKC........ 0b90: 0a 03 4c 4e 4b 44 0a 00 08 41 52 30 32 12 32 04 ..LNKD...AR02.2. 0ba0: 12 0b 04 0b ff ff 0a 00 0a 00 0a 10 12 0b 04 0b ................ 0bb0: ff ff 0a 01 0a 00 0a 11 12 0b 04 0b ff ff 0a 02 ................ 0bc0: 0a 00 0a 12 12 0b 04 0b ff ff 0a 03 0a 00 0a 13 ................ 0bd0: 08 50 52 30 41 12 3a 04 12 0d 04 0b ff ff 0a 00 .PR0A.:......... 0be0: 4c 4e 4b 42 0a 00 12 0d 04 0b ff ff 0a 01 4c 4e LNKB..........LN 0bf0: 4b 43 0a 00 12 0d 04 0b ff ff 0a 02 4c 4e 4b 44 KC..........LNKD 0c00: 0a 00 12 0d 04 0b ff ff 0a 03 4c 4e 4b 41 0a 00 ..........LNKA.. 0c10: 08 41 52 30 41 12 32 04 12 0b 04 0b ff ff 0a 00 .AR0A.2......... 0c20: 0a 00 0a 11 12 0b 04 0b ff ff 0a 01 0a 00 0a 12 ................ 0c30: 12 0b 04 0b ff ff 0a 02 0a 00 0a 13 12 0b 04 0b ................ 0c40: ff ff 0a 03 0a 00 0a 10 08 50 52 30 42 12 3a 04 .........PR0B.:. 0c50: 12 0d 04 0b ff ff 0a 00 4c 4e 4b 43 0a 00 12 0d ........LNKC.... 0c60: 04 0b ff ff 0a 01 4c 4e 4b 44 0a 00 12 0d 04 0b ......LNKD...... 0c70: ff ff 0a 02 4c 4e 4b 41 0a 00 12 0d 04 0b ff ff ....LNKA........ 0c80: 0a 03 4c 4e 4b 42 0a 00 08 41 52 30 42 12 32 04 ..LNKB...AR0B.2. 0c90: 12 0b 04 0b ff ff 0a 00 0a 00 0a 12 12 0b 04 0b ................ 0ca0: ff ff 0a 01 0a 00 0a 13 12 0b 04 0b ff ff 0a 02 ................ 0cb0: 0a 00 0a 10 12 0b 04 0b ff ff 0a 03 0a 00 0a 11 ................ 0cc0: 08 50 52 30 43 12 3a 04 12 0d 04 0b ff ff 0a 00 .PR0C.:......... 0cd0: 4c 4e 4b 44 0a 00 12 0d 04 0b ff ff 0a 01 4c 4e LNKD..........LN 0ce0: 4b 41 0a 00 12 0d 04 0b ff ff 0a 02 4c 4e 4b 42 KA..........LNKB 0cf0: 0a 00 12 0d 04 0b ff ff 0a 03 4c 4e 4b 43 0a 00 ..........LNKC.. 0d00: 08 41 52 30 43 12 32 04 12 0b 04 0b ff ff 0a 00 .AR0C.2......... 0d10: 0a 00 0a 13 12 0b 04 0b ff ff 0a 01 0a 00 0a 10 ................ 0d20: 12 0b 04 0b ff ff 0a 02 0a 00 0a 11 12 0b 04 0b ................ 0d30: ff ff 0a 03 0a 00 0a 12 08 50 52 30 34 12 3a 04 .........PR04.:. 0d40: 12 0d 04 0b ff ff 0a 00 4c 4e 4b 41 0a 00 12 0d ........LNKA.... 0d50: 04 0b ff ff 0a 01 4c 4e 4b 42 0a 00 12 0d 04 0b ......LNKB...... 0d60: ff ff 0a 02 4c 4e 4b 43 0a 00 12 0d 04 0b ff ff ....LNKC........ 0d70: 0a 03 4c 4e 4b 44 0a 00 08 41 52 30 34 12 32 04 ..LNKD...AR04.2. 0d80: 12 0b 04 0b ff ff 0a 00 0a 00 0a 10 12 0b 04 0b ................ 0d90: ff ff 0a 01 0a 00 0a 11 12 0b 04 0b ff ff 0a 02 ................ 0da0: 0a 00 0a 12 12 0b 04 0b ff ff 0a 03 0a 00 0a 13 ................ 0db0: 08 50 52 30 35 12 3a 04 12 0d 04 0b ff ff 0a 00 .PR05.:......... 0dc0: 4c 4e 4b 42 0a 00 12 0d 04 0b ff ff 0a 01 4c 4e LNKB..........LN 0dd0: 4b 43 0a 00 12 0d 04 0b ff ff 0a 02 4c 4e 4b 44 KC..........LNKD 0de0: 0a 00 12 0d 04 0b ff ff 0a 03 4c 4e 4b 41 0a 00 ..........LNKA.. 0df0: 08 41 52 30 35 12 32 04 12 0b 04 0b ff ff 0a 00 .AR05.2......... 0e00: 0a 00 0a 11 12 0b 04 0b ff ff 0a 01 0a 00 0a 12 ................ 0e10: 12 0b 04 0b ff ff 0a 02 0a 00 0a 13 12 0b 04 0b ................ 0e20: ff ff 0a 03 0a 00 0a 10 08 50 52 30 36 12 3a 04 .........PR06.:. 0e30: 12 0d 04 0b ff ff 0a 00 4c 4e 4b 43 0a 00 12 0d ........LNKC.... 0e40: 04 0b ff ff 0a 01 4c 4e 4b 44 0a 00 12 0d 04 0b ......LNKD...... 0e50: ff ff 0a 02 4c 4e 4b 41 0a 00 12 0d 04 0b ff ff ....LNKA........ 0e60: 0a 03 4c 4e 4b 42 0a 00 08 41 52 30 36 12 32 04 ..LNKB...AR06.2. 0e70: 12 0b 04 0b ff ff 0a 00 0a 00 0a 12 12 0b 04 0b ................ 0e80: ff ff 0a 01 0a 00 0a 13 12 0b 04 0b ff ff 0a 02 ................ 0e90: 0a 00 0a 10 12 0b 04 0b ff ff 0a 03 0a 00 0a 11 ................ 0ea0: 08 50 52 30 37 12 3a 04 12 0d 04 0b ff ff 0a 00 .PR07.:......... 0eb0: 4c 4e 4b 44 0a 00 12 0d 04 0b ff ff 0a 01 4c 4e LNKD..........LN 0ec0: 4b 41 0a 00 12 0d 04 0b ff ff 0a 02 4c 4e 4b 42 KA..........LNKB 0ed0: 0a 00 12 0d 04 0b ff ff 0a 03 4c 4e 4b 43 0a 00 ..........LNKC.. 0ee0: 08 41 52 30 37 12 32 04 12 0b 04 0b ff ff 0a 00 .AR07.2......... 0ef0: 0a 00 0a 13 12 0b 04 0b ff ff 0a 01 0a 00 0a 10 ................ 0f00: 12 0b 04 0b ff ff 0a 02 0a 00 0a 11 12 0b 04 0b ................ 0f10: ff ff 0a 03 0a 00 0a 12 08 50 52 30 38 12 3a 04 .........PR08.:. 0f20: 12 0d 04 0b ff ff 0a 00 4c 4e 4b 41 0a 00 12 0d ........LNKA.... 0f30: 04 0b ff ff 0a 01 4c 4e 4b 42 0a 00 12 0d 04 0b ......LNKB...... 0f40: ff ff 0a 02 4c 4e 4b 43 0a 00 12 0d 04 0b ff ff ....LNKC........ 0f50: 0a 03 4c 4e 4b 44 0a 00 08 41 52 30 38 12 32 04 ..LNKD...AR08.2. 0f60: 12 0b 04 0b ff ff 0a 00 0a 00 0a 10 12 0b 04 0b ................ 0f70: ff ff 0a 01 0a 00 0a 11 12 0b 04 0b ff ff 0a 02 ................ 0f80: 0a 00 0a 12 12 0b 04 0b ff ff 0a 03 0a 00 0a 13 ................ 0f90: 08 50 52 30 39 12 3a 04 12 0d 04 0b ff ff 0a 00 .PR09.:......... 0fa0: 4c 4e 4b 42 0a 00 12 0d 04 0b ff ff 0a 01 4c 4e LNKB..........LN 0fb0: 4b 43 0a 00 12 0d 04 0b ff ff 0a 02 4c 4e 4b 44 KC..........LNKD 0fc0: 0a 00 12 0d 04 0b ff ff 0a 03 4c 4e 4b 41 0a 00 ..........LNKA.. 0fd0: 08 41 52 30 39 12 32 04 12 0b 04 0b ff ff 0a 00 .AR09.2......... 0fe0: 0a 00 0a 11 12 0b 04 0b ff ff 0a 01 0a 00 0a 12 ................ 0ff0: 12 0b 04 0b ff ff 0a 02 0a 00 0a 13 12 0b 04 0b ................ 1000: ff ff 0a 03 0a 00 0a 10 08 50 52 30 45 12 3a 04 .........PR0E.:. 1010: 12 0d 04 0b ff ff 0a 00 4c 4e 4b 43 0a 00 12 0d ........LNKC.... 1020: 04 0b ff ff 0a 01 4c 4e 4b 44 0a 00 12 0d 04 0b ......LNKD...... 1030: ff ff 0a 02 4c 4e 4b 41 0a 00 12 0d 04 0b ff ff ....LNKA........ 1040: 0a 03 4c 4e 4b 42 0a 00 08 41 52 30 45 12 32 04 ..LNKB...AR0E.2. 1050: 12 0b 04 0b ff ff 0a 00 0a 00 0a 12 12 0b 04 0b ................ 1060: ff ff 0a 01 0a 00 0a 13 12 0b 04 0b ff ff 0a 02 ................ 1070: 0a 00 0a 10 12 0b 04 0b ff ff 0a 03 0a 00 0a 11 ................ 1080: 08 50 52 30 46 12 3a 04 12 0d 04 0b ff ff 0a 00 .PR0F.:......... 1090: 4c 4e 4b 44 0a 00 12 0d 04 0b ff ff 0a 01 4c 4e LNKD..........LN 10a0: 4b 41 0a 00 12 0d 04 0b ff ff 0a 02 4c 4e 4b 42 KA..........LNKB 10b0: 0a 00 12 0d 04 0b ff ff 0a 03 4c 4e 4b 43 0a 00 ..........LNKC.. 10c0: 08 41 52 30 46 12 32 04 12 0b 04 0b ff ff 0a 00 .AR0F.2......... 10d0: 0a 00 0a 13 12 0b 04 0b ff ff 0a 01 0a 00 0a 10 ................ 10e0: 12 0b 04 0b ff ff 0a 02 0a 00 0a 11 12 0b 04 0b ................ 10f0: ff ff 0a 03 0a 00 0a 12 08 50 52 30 31 12 4b 13 .........PR01.K. 1100: 14 12 0f 04 0c ff ff 03 00 0a 00 4c 4e 4b 44 0a ...........LNKD. 1110: 00 12 0f 04 0c ff ff 03 00 0a 01 4c 4e 4b 43 0a ...........LNKC. 1120: 00 12 0f 04 0c ff ff 03 00 0a 02 4c 4e 4b 46 0a ...........LNKF. 1130: 00 12 0f 04 0c ff ff 03 00 0a 03 4c 4e 4b 47 0a ...........LNKG. 1140: 00 12 0f 04 0c ff ff 02 00 0a 00 4c 4e 4b 43 0a ...........LNKC. 1150: 00 12 0f 04 0c ff ff 02 00 0a 01 4c 4e 4b 44 0a ...........LNKD. 1160: 00 12 0f 04 0c ff ff 02 00 0a 02 4c 4e 4b 42 0a ...........LNKB. 1170: 00 12 0f 04 0c ff ff 02 00 0a 03 4c 4e 4b 41 0a ...........LNKA. 1180: 00 12 0d 04 0b ff ff 0a 00 4c 4e 4b 46 0a 00 12 .........LNKF... 1190: 0d 04 0b ff ff 0a 01 4c 4e 4b 47 0a 00 12 0d 04 .......LNKG..... 11a0: 0b ff ff 0a 02 4c 4e 4b 48 0a 00 12 0d 04 0b ff .....LNKH....... 11b0: ff 0a 03 4c 4e 4b 45 0a 00 12 0f 04 0c ff ff 01 ...LNKE......... 11c0: 00 0a 00 4c 4e 4b 47 0a 00 12 0f 04 0c ff ff 01 ...LNKG......... 11d0: 00 0a 01 4c 4e 4b 46 0a 00 12 0f 04 0c ff ff 01 ...LNKF......... 11e0: 00 0a 02 4c 4e 4b 45 0a 00 12 0f 04 0c ff ff 01 ...LNKE......... 11f0: 00 0a 03 4c 4e 4b 48 0a 00 12 0f 04 0c ff ff 05 ...LNKH......... 1200: 00 0a 00 4c 4e 4b 43 0a 00 12 0f 04 0c ff ff 05 ...LNKC......... 1210: 00 0a 01 4c 4e 4b 45 0a 00 12 0f 04 0c ff ff 05 ...LNKE......... 1220: 00 0a 02 4c 4e 4b 47 0a 00 12 0f 04 0c ff ff 05 ...LNKG......... 1230: 00 0a 03 4c 4e 4b 46 0a 00 08 41 52 30 31 12 43 ...LNKF...AR01.C 1240: 11 14 12 0d 04 0c ff ff 03 00 0a 00 0a 00 0a 13 ................ 1250: 12 0d 04 0c ff ff 03 00 0a 01 0a 00 0a 12 12 0d ................ 1260: 04 0c ff ff 03 00 0a 02 0a 00 0a 15 12 0d 04 0c ................ 1270: ff ff 03 00 0a 03 0a 00 0a 16 12 0d 04 0c ff ff ................ 1280: 02 00 0a 00 0a 00 0a 12 12 0d 04 0c ff ff 02 00 ................ 1290: 0a 01 0a 00 0a 13 12 0d 04 0c ff ff 02 00 0a 02 ................ 12a0: 0a 00 0a 11 12 0d 04 0c ff ff 02 00 0a 03 0a 00 ................ 12b0: 0a 10 12 0b 04 0b ff ff 0a 00 0a 00 0a 15 12 0b ................ 12c0: 04 0b ff ff 0a 01 0a 00 0a 16 12 0b 04 0b ff ff ................ 12d0: 0a 02 0a 00 0a 17 12 0b 04 0b ff ff 0a 03 0a 00 ................ 12e0: 0a 14 12 0d 04 0c ff ff 01 00 0a 00 0a 00 0a 16 ................ 12f0: 12 0d 04 0c ff ff 01 00 0a 01 0a 00 0a 15 12 0d ................ 1300: 04 0c ff ff 01 00 0a 02 0a 00 0a 14 12 0d 04 0c ................ 1310: ff ff 01 00 0a 03 0a 00 0a 17 12 0d 04 0c ff ff ................ 1320: 05 00 0a 00 0a 00 0a 12 12 0d 04 0c ff ff 05 00 ................ 1330: 0a 01 0a 00 0a 14 12 0d 04 0c ff ff 05 00 0a 02 ................ 1340: 0a 00 0a 16 12 0d 04 0c ff ff 05 00 0a 03 0a 00 ................ 1350: 0a 15 08 50 52 53 41 11 09 0a 06 23 f8 1c 18 79 ...PRSA....#...y 1360: 00 08 50 52 53 42 11 09 0a 06 23 f8 14 18 79 00 ..PRSB....#...y. 1370: 06 50 52 53 42 50 52 53 43 06 50 52 53 42 50 52 .PRSBPRSC.PRSBPR 1380: 53 44 06 50 52 53 42 50 52 53 45 06 50 52 53 42 SD.PRSBPRSE.PRSB 1390: 50 52 53 46 06 50 52 53 42 50 52 53 47 06 50 52 PRSF.PRSBPRSG.PR 13a0: 53 42 50 52 53 48 5b 82 84 9e 05 50 43 49 30 08 SBPRSH[....PCI0. 13b0: 5f 48 49 44 0c 41 d0 0a 08 08 5f 43 49 44 0c 41 _HID.A...._CID.A 13c0: d0 0a 03 08 5f 41 44 52 0a 00 14 0a 5e 42 4e 30 ...._ADR....^BN0 13d0: 30 00 a4 0a 00 14 0b 5f 42 42 4e 00 a4 42 4e 30 0......_BBN..BN0 13e0: 30 08 5f 55 49 44 0a 00 14 16 5f 50 52 54 00 a0 0._UID...._PRT.. 13f0: 0a 50 49 43 4d a4 41 52 30 30 a4 50 52 30 30 5b .PICM.AR00.PR00[ 1400: 80 48 42 55 53 02 0a 00 0b 00 01 5b 81 4b 0d 48 .HBUS......[.K.H 1410: 42 55 53 03 00 40 20 45 50 45 4e 01 00 0b 45 50 BUS..@ EPEN...EP 1420: 42 52 14 00 20 4d 48 45 4e 01 00 0e 4d 48 42 52 BR.. MHEN...MHBR 1430: 11 00 20 47 43 4c 4b 01 00 1f 44 30 45 4e 01 00 .. GCLK...D0EN.. 1440: 4f 05 50 58 45 4e 01 50 58 53 5a 02 00 17 50 58 O.PXEN.PXSZ...PX 1450: 42 52 06 00 20 44 49 45 4e 01 00 0b 44 49 42 52 BR.. DIEN...DIBR 1460: 14 00 20 00 14 4d 45 42 52 0c 00 40 06 00 04 50 .. ..MEBR..@...P 1470: 4d 30 48 02 00 02 50 4d 31 4c 02 00 02 50 4d 31 M0H...PM1L...PM1 1480: 48 02 00 02 50 4d 32 4c 02 00 02 50 4d 32 48 02 H...PM2L...PM2H. 1490: 00 02 50 4d 33 4c 02 00 02 50 4d 33 48 02 00 02 ..PM3L...PM3H... 14a0: 50 4d 34 4c 02 00 02 50 4d 34 48 02 00 02 50 4d PM4L...PM4H...PM 14b0: 35 4c 02 00 02 50 4d 35 48 02 00 02 50 4d 36 4c 5L...PM5H...PM6L 14c0: 02 00 02 50 4d 36 48 02 00 02 00 48 10 00 14 54 ...PM6H....H...T 14d0: 55 55 44 13 00 49 07 00 14 54 4c 55 44 0c 00 40 UUD..I...TLUD..@ 14e0: 04 00 07 48 54 53 45 01 5b 80 4d 43 48 54 00 0c ...HTSE.[.MCHT.. 14f0: 00 00 d1 fe 0b 00 11 5b 81 06 4d 43 48 54 01 08 .......[..MCHT.. 1500: 42 55 46 30 11 43 1f 0b ee 01 88 0d 00 02 0c 00 BUF0.C.......... 1510: 00 00 00 00 ff 00 00 00 00 01 87 17 00 01 0c 03 ................ 1520: 00 00 00 00 00 00 00 00 f7 0c 00 00 00 00 00 00 ................ 1530: f8 0c 00 00 47 01 f8 0c f8 0c 01 08 87 17 00 01 ....G........... 1540: 0c 03 00 00 00 00 00 0d 00 00 ff ff 00 00 00 00 ................ 1550: 00 00 00 f3 00 00 87 17 00 00 0c 03 00 00 00 00 ................ 1560: 00 00 0a 00 ff ff 0b 00 00 00 00 00 00 00 02 00 ................ 1570: 87 17 00 00 0c 03 00 00 00 00 00 00 0c 00 ff 3f ...............? 1580: 0c 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 .......@........ 1590: 00 00 00 00 00 40 0c 00 ff 7f 0c 00 00 00 00 00 .....@.......... 15a0: 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 80 .@.............. 15b0: 0c 00 ff bf 0c 00 00 00 00 00 00 40 00 00 87 17 ...........@.... 15c0: 00 00 0c 03 00 00 00 00 00 c0 0c 00 ff ff 0c 00 ................ 15d0: 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 .....@.......... 15e0: 00 00 00 00 0d 00 ff 3f 0d 00 00 00 00 00 00 40 .......?.......@ 15f0: 00 00 87 17 00 00 0c 03 00 00 00 00 00 40 0d 00 .............@.. 1600: ff 7f 0d 00 00 00 00 00 00 40 00 00 87 17 00 00 .........@...... 1610: 0c 03 00 00 00 00 00 80 0d 00 ff bf 0d 00 00 00 ................ 1620: 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 ...@............ 1630: 00 c0 0d 00 ff ff 0d 00 00 00 00 00 00 40 00 00 .............@.. 1640: 87 17 00 00 0c 03 00 00 00 00 00 00 0e 00 ff 3f ...............? 1650: 0e 00 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 .......@........ 1660: 00 00 00 00 00 40 0e 00 ff 7f 0e 00 00 00 00 00 .....@.......... 1670: 00 40 00 00 87 17 00 00 0c 03 00 00 00 00 00 80 .@.............. 1680: 0e 00 ff bf 0e 00 00 00 00 00 00 40 00 00 87 17 ...........@.... 1690: 00 00 0c 03 00 00 00 00 00 c0 0e 00 ff ff 0e 00 ................ 16a0: 00 00 00 00 00 40 00 00 87 17 00 00 0c 03 00 00 .....@.......... 16b0: 00 00 00 00 0f 00 ff ff 0f 00 00 00 00 00 00 00 ................ 16c0: 01 00 87 17 00 00 0c 03 00 00 00 00 00 00 00 00 ................ 16d0: ff ff af fe 00 00 00 00 00 00 b0 fe 87 17 00 00 ................ 16e0: 0c 03 00 00 00 00 00 00 d4 fe ff 4f d4 fe 00 00 ...........O.... 16f0: 00 00 00 50 00 00 79 00 14 47 31 5f 43 52 53 08 ...P..y..G1_CRS. 1700: 8b 42 55 46 30 0a 0a 50 42 4d 58 70 74 7a 5c 50 .BUF0..PBMXptz\P 1710: 45 4c 4e 0a 14 00 0a 02 00 50 42 4d 58 8b 42 55 ELN......PBMX.BU 1720: 46 30 0a 0e 50 42 4c 4e 70 74 7a 5c 50 45 4c 4e F0..PBLNptz\PELN 1730: 0a 14 00 0a 01 00 50 42 4c 4e a0 16 50 4d 31 4c ......PBLN..PM1L 1740: 8a 42 55 46 30 0a 7c 43 30 4c 4e 70 00 43 30 4c .BUF0.|C0LNp.C0L 1750: 4e a0 1a 93 50 4d 31 4c 0a 01 8d 42 55 46 30 0b N...PM1L...BUF0. 1760: 58 03 43 30 52 57 70 00 43 30 52 57 a0 16 50 4d X.C0RWp.C0RW..PM 1770: 31 48 8a 42 55 46 30 0a 96 43 34 4c 4e 70 00 43 1H.BUF0..C4LNp.C 1780: 34 4c 4e a0 1a 93 50 4d 31 48 0a 01 8d 42 55 46 4LN...PM1H...BUF 1790: 30 0b 28 04 43 34 52 57 70 00 43 34 52 57 a0 16 0.(.C4RWp.C4RW.. 17a0: 50 4d 32 4c 8a 42 55 46 30 0a b0 43 38 4c 4e 70 PM2L.BUF0..C8LNp 17b0: 00 43 38 4c 4e a0 1a 93 50 4d 32 4c 0a 01 8d 42 .C8LN...PM2L...B 17c0: 55 46 30 0b f8 04 43 38 52 57 70 00 43 38 52 57 UF0...C8RWp.C8RW 17d0: a0 16 50 4d 32 48 8a 42 55 46 30 0a ca 43 43 4c ..PM2H.BUF0..CCL 17e0: 4e 70 00 43 43 4c 4e a0 1a 93 50 4d 32 48 0a 01 Np.CCLN...PM2H.. 17f0: 8d 42 55 46 30 0b c8 05 43 43 52 57 70 00 43 43 .BUF0...CCRWp.CC 1800: 52 57 a0 16 50 4d 33 4c 8a 42 55 46 30 0a e4 44 RW..PM3L.BUF0..D 1810: 30 4c 4e 70 00 44 30 4c 4e a0 1a 93 50 4d 33 4c 0LNp.D0LN...PM3L 1820: 0a 01 8d 42 55 46 30 0b 98 06 44 30 52 57 70 00 ...BUF0...D0RWp. 1830: 44 30 52 57 a0 16 50 4d 33 48 8a 42 55 46 30 0a D0RW..PM3H.BUF0. 1840: fe 44 34 4c 4e 70 00 44 34 4c 4e a0 1a 93 50 4d .D4LNp.D4LN...PM 1850: 33 48 0a 01 8d 42 55 46 30 0b 68 07 44 34 52 57 3H...BUF0.h.D4RW 1860: 70 00 44 34 52 57 a0 17 50 4d 34 4c 8a 42 55 46 p.D4RW..PM4L.BUF 1870: 30 0b 18 01 44 38 4c 4e 70 00 44 38 4c 4e a0 1a 0...D8LNp.D8LN.. 1880: 93 50 4d 34 4c 0a 01 8d 42 55 46 30 0b 38 08 44 .PM4L...BUF0.8.D 1890: 38 52 57 70 00 44 38 52 57 a0 17 50 4d 34 48 8a 8RWp.D8RW..PM4H. 18a0: 42 55 46 30 0b 32 01 44 43 4c 4e 70 00 44 43 4c BUF0.2.DCLNp.DCL 18b0: 4e a0 1a 93 50 4d 34 48 0a 01 8d 42 55 46 30 0b N...PM4H...BUF0. 18c0: 08 09 44 43 52 57 70 00 44 43 52 57 a0 17 50 4d ..DCRWp.DCRW..PM 18d0: 35 4c 8a 42 55 46 30 0b 4c 01 45 30 4c 4e 70 00 5L.BUF0.L.E0LNp. 18e0: 45 30 4c 4e a0 1a 93 50 4d 35 4c 0a 01 8d 42 55 E0LN...PM5L...BU 18f0: 46 30 0b d8 09 45 30 52 57 70 00 45 30 52 57 a0 F0...E0RWp.E0RW. 1900: 17 50 4d 35 48 8a 42 55 46 30 0b 66 01 45 34 4c .PM5H.BUF0.f.E4L 1910: 4e 70 00 45 34 4c 4e a0 1a 93 50 4d 35 48 0a 01 Np.E4LN...PM5H.. 1920: 8d 42 55 46 30 0b a8 0a 45 34 52 57 70 00 45 34 .BUF0...E4RWp.E4 1930: 52 57 a0 17 50 4d 36 4c 8a 42 55 46 30 0b 80 01 RW..PM6L.BUF0... 1940: 45 38 4c 4e 70 00 45 38 4c 4e a0 1a 93 50 4d 36 E8LNp.E8LN...PM6 1950: 4c 0a 01 8d 42 55 46 30 0b 78 0b 45 38 52 57 70 L...BUF0.x.E8RWp 1960: 00 45 38 52 57 a0 17 50 4d 36 48 8a 42 55 46 30 .E8RW..PM6H.BUF0 1970: 0b 9a 01 45 43 4c 4e 70 00 45 43 4c 4e a0 1a 93 ...ECLNp.ECLN... 1980: 50 4d 36 48 0a 01 8d 42 55 46 30 0b 48 0c 45 43 PM6H...BUF0.H.EC 1990: 52 57 70 00 45 43 52 57 a0 17 50 4d 30 48 8a 42 RWp.ECRW..PM0H.B 19a0: 55 46 30 0b b4 01 46 30 4c 4e 70 00 46 30 4c 4e UF0...F0LNp.F0LN 19b0: a0 1a 93 50 4d 30 48 0a 01 8d 42 55 46 30 0b 18 ...PM0H...BUF0.. 19c0: 0d 46 30 52 57 70 00 46 30 52 57 8a 42 55 46 30 .F0RWp.F0RW.BUF0 19d0: 0b c2 01 4d 31 4d 4e 8a 42 55 46 30 0b c6 01 4d ...M1MN.BUF0...M 19e0: 31 4d 58 8a 42 55 46 30 0b ce 01 4d 31 4c 4e 79 1MX.BUF0...M1LNy 19f0: 54 4c 55 44 0a 14 4d 31 4d 4e 72 74 4d 31 4d 58 TLUD..M1MNrtM1MX 1a00: 4d 31 4d 4e 00 0a 01 4d 31 4c 4e a4 42 55 46 30 M1MN...M1LN.BUF0 1a10: 08 47 55 49 44 11 13 0a 10 5b 4d db 33 f7 1f 1c .GUID....[M.3... 1a20: 40 96 57 74 41 c0 3d d7 66 08 53 55 50 50 0a 00 @.WtA.=.f.SUPP.. 1a30: 08 43 54 52 4c 0a 00 14 40 0b 5f 4f 53 43 0c 70 .CTRL...@._OSC.p 1a40: 6b 60 8a 60 0a 00 43 44 57 31 8a 60 0a 04 43 44 k`.`..CDW1.`..CD 1a50: 57 32 8a 60 0a 08 43 44 57 33 a0 4e 07 93 68 47 W2.`..CDW3.N..hG 1a60: 55 49 44 70 43 44 57 32 53 55 50 50 70 43 44 57 UIDpCDW2SUPPpCDW 1a70: 33 43 54 52 4c a0 27 80 7b 43 44 57 31 0a 01 00 3CTRL.'.{CDW1... 1a80: 00 a0 0d 7b 43 54 52 4c 0a 01 00 4e 48 50 47 a0 ...{CTRL...NHPG. 1a90: 0d 7b 43 54 52 4c 0a 04 00 4e 50 4d 45 a0 10 92 .{CTRL...NPME... 1aa0: 93 69 01 7d 43 44 57 31 0a 08 43 44 57 31 a0 16 .i.}CDW1..CDW1.. 1ab0: 92 93 43 44 57 33 43 54 52 4c 7d 43 44 57 31 0a ..CDW3CTRL}CDW1. 1ac0: 10 43 44 57 31 70 43 54 52 4c 43 44 57 33 70 43 .CDW1pCTRLCDW3pC 1ad0: 54 52 4c 4f 53 43 43 a4 60 a1 0e 7d 43 44 57 31 TRLOSCC.`..}CDW1 1ae0: 0a 04 43 44 57 31 a4 60 10 48 19 5c 2e 5f 53 42 ..CDW1.`.H.\._SB 1af0: 5f 50 43 49 30 14 11 41 52 30 30 00 a4 5c 2e 5f _PCI0..AR00..\._ 1b00: 53 42 5f 41 52 30 30 14 11 50 52 30 30 00 a4 5c SB_AR00..PR00..\ 1b10: 2e 5f 53 42 5f 50 52 30 30 14 11 41 52 30 31 00 ._SB_PR00..AR01. 1b20: a4 5c 2e 5f 53 42 5f 41 52 30 31 14 11 50 52 30 .\._SB_AR01..PR0 1b30: 31 00 a4 5c 2e 5f 53 42 5f 50 52 30 31 14 11 41 1..\._SB_PR01..A 1b40: 52 30 32 00 a4 5c 2e 5f 53 42 5f 41 52 30 32 14 R02..\._SB_AR02. 1b50: 11 50 52 30 32 00 a4 5c 2e 5f 53 42 5f 50 52 30 .PR02..\._SB_PR0 1b60: 32 14 11 41 52 30 34 00 a4 5c 2e 5f 53 42 5f 41 2..AR04..\._SB_A 1b70: 52 30 34 14 11 50 52 30 34 00 a4 5c 2e 5f 53 42 R04..PR04..\._SB 1b80: 5f 50 52 30 34 14 11 41 52 30 35 00 a4 5c 2e 5f _PR04..AR05..\._ 1b90: 53 42 5f 41 52 30 35 14 11 50 52 30 35 00 a4 5c SB_AR05..PR05..\ 1ba0: 2e 5f 53 42 5f 50 52 30 35 14 11 41 52 30 36 00 ._SB_PR05..AR06. 1bb0: a4 5c 2e 5f 53 42 5f 41 52 30 36 14 11 50 52 30 .\._SB_AR06..PR0 1bc0: 36 00 a4 5c 2e 5f 53 42 5f 50 52 30 36 14 11 41 6..\._SB_PR06..A 1bd0: 52 30 37 00 a4 5c 2e 5f 53 42 5f 41 52 30 37 14 R07..\._SB_AR07. 1be0: 11 50 52 30 37 00 a4 5c 2e 5f 53 42 5f 50 52 30 .PR07..\._SB_PR0 1bf0: 37 14 11 41 52 30 38 00 a4 5c 2e 5f 53 42 5f 41 7..AR08..\._SB_A 1c00: 52 30 38 14 11 50 52 30 38 00 a4 5c 2e 5f 53 42 R08..PR08..\._SB 1c10: 5f 50 52 30 38 14 11 41 52 30 39 00 a4 5c 2e 5f _PR08..AR09..\._ 1c20: 53 42 5f 41 52 30 39 14 11 50 52 30 39 00 a4 5c SB_AR09..PR09..\ 1c30: 2e 5f 53 42 5f 50 52 30 39 14 11 41 52 30 41 00 ._SB_PR09..AR0A. 1c40: a4 5c 2e 5f 53 42 5f 41 52 30 41 14 11 50 52 30 .\._SB_AR0A..PR0 1c50: 41 00 a4 5c 2e 5f 53 42 5f 50 52 30 41 14 11 41 A..\._SB_PR0A..A 1c60: 52 30 42 00 a4 5c 2e 5f 53 42 5f 41 52 30 42 14 R0B..\._SB_AR0B. 1c70: 11 50 52 30 42 00 a4 5c 2e 5f 53 42 5f 50 52 30 .PR0B..\._SB_PR0 1c80: 42 5b 82 45 04 50 45 47 30 08 5f 41 44 52 0c 00 B[.E.PEG0._ADR.. 1c90: 00 01 00 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a ....._PRW..GPRW. 1ca0: 09 0a 04 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d ....._PRT...PICM 1cb0: a4 41 52 30 32 a4 50 52 30 32 5b 82 0c 47 46 58 .AR02.PR02[..GFX 1cc0: 30 08 5f 41 44 52 0a 00 5b 82 36 50 45 47 31 08 0._ADR..[.6PEG1. 1cd0: 5f 41 44 52 0c 01 00 01 00 14 0f 5f 50 52 57 00 _ADR......._PRW. 1ce0: a4 47 50 52 57 0a 09 0a 04 14 16 5f 50 52 54 00 .GPRW......_PRT. 1cf0: a0 0a 50 49 43 4d a4 41 52 30 41 a4 50 52 30 41 ..PICM.AR0A.PR0A 1d00: 5b 82 36 50 45 47 32 08 5f 41 44 52 0c 02 00 01 [.6PEG2._ADR.... 1d10: 00 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 09 0a ..._PRW..GPRW... 1d20: 04 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 41 ..._PRT...PICM.A 1d30: 52 30 42 a4 50 52 30 42 5b 82 36 50 45 47 33 08 R0B.PR0B[.6PEG3. 1d40: 5f 41 44 52 0c 00 00 06 00 14 0f 5f 50 52 57 00 _ADR......._PRW. 1d50: a4 47 50 52 57 0a 09 0a 04 14 16 5f 50 52 54 00 .GPRW......_PRT. 1d60: a0 0a 50 49 43 4d a4 41 52 30 43 a4 50 52 30 43 ..PICM.AR0C.PR0C 1d70: 5b 82 1f 42 30 44 34 08 5f 41 44 52 0c 00 00 04 [..B0D4._ADR.... 1d80: 00 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 09 0a ..._PRW..GPRW... 1d90: 04 5b 82 36 50 30 50 31 08 5f 41 44 52 0c 00 00 .[.6P0P1._ADR... 1da0: 1e 00 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 0b ...._PRW..GPRW.. 1db0: 0a 04 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 ...._PRT...PICM. 1dc0: 41 52 30 31 a4 50 52 30 31 5b 82 4f 49 53 42 55 AR01.PR01[.OISBU 1dd0: 53 08 5f 41 44 52 0c 03 00 1f 00 5b 80 53 4d 42 S._ADR.....[.SMB 1de0: 50 02 0a 40 0a c0 5b 81 0d 53 4d 42 50 03 00 02 P..@..[..SMBP... 1df0: 49 32 43 45 01 5b 80 53 4d 50 42 02 0a 20 0a 04 I2CE.[.SMPB.. .. 1e00: 5b 81 0d 53 4d 50 42 03 00 05 53 42 41 52 0b 5b [..SMPB...SBAR.[ 1e10: 80 53 4d 42 49 01 79 53 42 41 52 0a 05 00 0a 10 .SMBI.ySBAR..... 1e20: 5b 81 3a 53 4d 42 49 01 48 53 54 53 08 00 08 48 [.:SMBI.HSTS...H 1e30: 43 4f 4e 08 48 43 4f 4d 08 54 58 53 41 08 44 41 CON.HCOM.TXSA.DA 1e40: 54 30 08 44 41 54 31 08 48 42 44 52 08 50 45 43 T0.DAT1.HBDR.PEC 1e50: 52 08 52 58 53 41 08 53 44 41 54 10 14 48 04 53 R.RXSA.SDAT..H.S 1e60: 53 58 42 0a a0 08 53 54 52 54 a4 0a 00 70 0a 00 SXB...STRT...p.. 1e70: 49 32 43 45 70 0a bf 48 53 54 53 70 68 54 58 53 I2CEp..HSTSphTXS 1e80: 41 70 69 48 43 4f 4d 70 0a 48 48 43 4f 4e a0 13 ApiHCOMp.HHCON.. 1e90: 43 4f 4d 50 7d 48 53 54 53 0a ff 48 53 54 53 a4 COMP}HSTS..HSTS. 1ea0: 0a 01 a4 0a 00 14 4a 04 53 52 58 42 09 a0 09 53 ......J.SRXB...S 1eb0: 54 52 54 a4 0b ff ff 70 0a 00 49 32 43 45 70 0a TRT....p..I2CEp. 1ec0: bf 48 53 54 53 70 7d 68 0a 01 00 54 58 53 41 70 .HSTSp}h...TXSAp 1ed0: 0a 44 48 43 4f 4e a0 15 43 4f 4d 50 7d 48 53 54 .DHCON..COMP}HST 1ee0: 53 0a ff 48 53 54 53 a4 44 41 54 30 a4 0b ff ff S..HSTS.DAT0.... 1ef0: 14 4e 04 53 57 52 42 0b a0 08 53 54 52 54 a4 0a .N.SWRB...STRT.. 1f00: 00 70 0a 00 49 32 43 45 70 0a bf 48 53 54 53 70 .p..I2CEp..HSTSp 1f10: 68 54 58 53 41 70 69 48 43 4f 4d 70 6a 44 41 54 hTXSApiHCOMpjDAT 1f20: 30 70 0a 48 48 43 4f 4e a0 13 43 4f 4d 50 7d 48 0p.HHCON..COMP}H 1f30: 53 54 53 0a ff 48 53 54 53 a4 0a 01 a4 0a 00 14 STS..HSTS....... 1f40: 40 05 53 52 44 42 0a a0 09 53 54 52 54 a4 0b ff @.SRDB...STRT... 1f50: ff 70 0a 00 49 32 43 45 70 0a bf 48 53 54 53 70 .p..I2CEp..HSTSp 1f60: 7d 68 0a 01 00 54 58 53 41 70 69 48 43 4f 4d 70 }h...TXSApiHCOMp 1f70: 0a 48 48 43 4f 4e a0 15 43 4f 4d 50 7d 48 53 54 .HHCON..COMP}HST 1f80: 53 0a ff 48 53 54 53 a4 44 41 54 30 a4 0b ff ff S..HSTS.DAT0.... 1f90: 14 4c 05 53 57 52 57 0b a0 08 53 54 52 54 a4 0a .L.SWRW...STRT.. 1fa0: 00 70 0a 00 49 32 43 45 70 0a bf 48 53 54 53 70 .p..I2CEp..HSTSp 1fb0: 68 54 58 53 41 70 69 48 43 4f 4d 7b 6a 0a ff 44 hTXSApiHCOM{j..D 1fc0: 41 54 31 7b 7a 6a 0a 08 00 0a ff 44 41 54 30 70 AT1{zj.....DAT0p 1fd0: 0a 4c 48 43 4f 4e a0 13 43 4f 4d 50 7d 48 53 54 .LHCON..COMP}HST 1fe0: 53 0a ff 48 53 54 53 a4 0a 01 a4 0a 00 14 4c 05 S..HSTS.......L. 1ff0: 53 52 44 57 0a a0 09 53 54 52 54 a4 0b ff ff 70 SRDW...STRT....p 2000: 0a 00 49 32 43 45 70 0a bf 48 53 54 53 70 7d 68 ..I2CEp..HSTSp}h 2010: 0a 01 00 54 58 53 41 70 69 48 43 4f 4d 70 0a 4c ...TXSApiHCOMp.L 2020: 48 43 4f 4e a0 1f 43 4f 4d 50 7d 48 53 54 53 0a HCON..COMP}HSTS. 2030: ff 48 53 54 53 a4 7d 79 44 41 54 30 0a 08 00 44 .HSTS.}yDAT0...D 2040: 41 54 31 00 a4 0c ff ff ff ff 14 40 0a 53 42 4c AT1........@.SBL 2050: 57 0c a0 08 53 54 52 54 a4 0a 00 70 6b 49 32 43 W...STRT...pkI2C 2060: 45 70 0a bf 48 53 54 53 70 68 54 58 53 41 70 69 Ep..HSTSphTXSApi 2070: 48 43 4f 4d 70 87 6a 44 41 54 30 70 0a 00 61 70 HCOMp.jDAT0p..ap 2080: 83 88 6a 0a 00 00 48 42 44 52 70 0a 54 48 43 4f ..j...HBDRp.THCO 2090: 4e a2 42 04 94 87 6a 61 70 0b a0 0f 60 a2 12 90 N.B...jap...`... 20a0: 92 7b 48 53 54 53 0a 80 00 60 76 60 5b 21 0a 32 .{HSTS...`v`[!.2 20b0: a0 0a 92 60 4b 49 4c 4c a4 0a 00 70 0a 80 48 53 ...`KILL...p..HS 20c0: 54 53 75 61 a0 0f 94 87 6a 61 70 83 88 6a 61 00 TSua....jap..ja. 20d0: 48 42 44 52 a0 13 43 4f 4d 50 7d 48 53 54 53 0a HBDR..COMP}HSTS. 20e0: ff 48 53 54 53 a4 0a 01 a4 0a 00 14 48 0d 53 42 .HSTS.......H.SB 20f0: 4c 52 0b 08 54 42 55 46 11 04 0b 00 01 a0 08 53 LR..TBUF.......S 2100: 54 52 54 a4 0a 00 70 6a 49 32 43 45 70 0a bf 48 TRT...pjI2CEp..H 2110: 53 54 53 70 7d 68 0a 01 00 54 58 53 41 70 69 48 STSp}h...TXSApiH 2120: 43 4f 4d 70 0a 54 48 43 4f 4e 70 0b a0 0f 60 a2 COMp.THCONp...`. 2130: 12 90 92 7b 48 53 54 53 0a 80 00 60 76 60 5b 21 ...{HSTS...`v`[! 2140: 0a 32 a0 0a 92 60 4b 49 4c 4c a4 0a 00 70 44 41 .2...`KILL...pDA 2150: 54 30 88 54 42 55 46 0a 00 00 70 0a 80 48 53 54 T0.TBUF...p..HST 2160: 53 70 0a 01 61 a2 45 04 95 61 83 88 54 42 55 46 Sp..a.E..a..TBUF 2170: 0a 00 00 70 0b a0 0f 60 a2 12 90 92 7b 48 53 54 ...p...`....{HST 2180: 53 0a 80 00 60 76 60 5b 21 0a 32 a0 0a 92 60 4b S...`v`[!.2...`K 2190: 49 4c 4c a4 0a 00 70 48 42 44 52 88 54 42 55 46 ILL...pHBDR.TBUF 21a0: 61 00 70 0a 80 48 53 54 53 75 61 a0 15 43 4f 4d a.p..HSTSua..COM 21b0: 50 7d 48 53 54 53 0a ff 48 53 54 53 a4 54 42 55 P}HSTS..HSTS.TBU 21c0: 46 a4 0a 00 14 47 05 53 54 52 54 08 70 0a c8 60 F....G.STRT.p..` 21d0: a2 21 60 a0 18 7b 48 53 54 53 0a 40 00 76 60 5b .!`..{HSTS.@.v`[ 21e0: 22 0a 01 a0 08 93 60 0a 00 a4 0a 01 a1 05 70 0a ".....`.......p. 21f0: 00 60 70 0b a0 0f 60 a2 21 60 a0 19 7b 48 53 54 .`p...`.!`..{HST 2200: 53 0a 01 00 76 60 5b 21 0a 32 a0 09 93 60 0a 00 S...v`[!.2...`.. 2210: 4b 49 4c 4c a1 04 a4 0a 00 a4 0a 01 14 30 43 4f KILL.........0CO 2220: 4d 50 08 70 0b a0 0f 60 a2 21 60 a0 0c 7b 48 53 MP.p...`.!`..{HS 2230: 54 53 0a 02 00 a4 0a 01 a1 11 76 60 5b 21 0a 32 TS........v`[!.2 2240: a0 09 93 60 0a 00 4b 49 4c 4c a4 0a 00 14 1c 4b ...`..KILL.....K 2250: 49 4c 4c 08 7d 48 43 4f 4e 0a 02 48 43 4f 4e 7d ILL.}HCON..HCON} 2260: 48 53 54 53 0a ff 48 53 54 53 5b 82 4f 04 48 44 HSTS..HSTS[.O.HD 2270: 45 46 08 5f 41 44 52 0c 00 00 1b 00 5b 80 48 44 EF._ADR.....[.HD 2280: 41 52 02 0a 4c 0a 10 5b 81 22 48 44 41 52 02 44 AR..L..[."HDAR.D 2290: 43 4b 41 01 00 07 44 43 4b 4d 01 00 06 44 43 4b CKA...DCKM...DCK 22a0: 53 01 00 30 00 0f 50 4d 45 53 01 14 0f 5f 50 52 S..0..PMES..._PR 22b0: 57 00 a4 47 50 52 57 0a 0d 0a 04 5b 82 1f 47 4c W..GPRW....[..GL 22c0: 41 4e 08 5f 41 44 52 0c 00 00 19 00 14 0f 5f 50 AN._ADR......._P 22d0: 52 57 00 a4 47 50 52 57 0a 0d 0a 04 5b 82 44 ec RW..GPRW....[.D. 22e0: 53 42 52 47 08 5f 41 44 52 0c 00 00 1f 00 10 46 SBRG._ADR......F 22f0: 5a 5c 5f 53 42 5f 5b 80 5c 2f 04 5f 53 42 5f 50 Z\_SB_[.\/._SB_P 2300: 43 49 30 53 42 52 47 4c 50 43 31 02 0a 40 0a c0 CI0SBRGLPC1..@.. 2310: 5b 81 43 04 5c 2f 04 5f 53 42 5f 50 43 49 30 53 [.C.\/._SB_PCI0S 2320: 42 52 47 4c 50 43 31 00 00 40 10 50 41 52 43 08 BRGLPC1..@.PARC. 2330: 50 42 52 43 08 50 43 52 43 08 50 44 52 43 08 00 PBRC.PCRC.PDRC.. 2340: 20 50 45 52 43 08 50 46 52 43 08 50 47 52 43 08 PERC.PFRC.PGRC. 2350: 50 48 52 43 08 5b 82 46 0a 4c 4e 4b 41 08 5f 48 PHRC.[.F.LNKA._H 2360: 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 01 14 11 ID.A...._UID.... 2370: 5f 44 49 53 08 7d 50 41 52 43 0a 80 50 41 52 43 _DIS.}PARC..PARC 2380: 14 0b 5f 50 52 53 08 a4 50 52 53 41 14 3a 5f 43 .._PRS..PRSA.:_C 2390: 52 53 08 08 52 54 4c 41 11 09 0a 06 23 00 00 18 RS..RTLA....#... 23a0: 79 00 8b 52 54 4c 41 0a 01 49 52 51 30 70 00 49 y..RTLA..IRQ0p.I 23b0: 52 51 30 79 0a 01 7b 50 41 52 43 0a 0f 00 49 52 RQ0y..{PARC...IR 23c0: 51 30 a4 52 54 4c 41 14 1c 5f 53 52 53 09 8b 68 Q0.RTLA.._SRS..h 23d0: 0a 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 ..IRQ0.IRQ0`v`p` 23e0: 50 41 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 41 PARC.._STA...{PA 23f0: 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 46 RC...........[.F 2400: 0a 4c 4e 4b 42 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKB._HID.A.... 2410: 5f 55 49 44 0a 02 14 11 5f 44 49 53 08 7d 50 42 _UID...._DIS.}PB 2420: 52 43 0a 80 50 42 52 43 14 0b 5f 50 52 53 08 a4 RC..PBRC.._PRS.. 2430: 50 52 53 42 14 3a 5f 43 52 53 08 08 52 54 4c 42 PRSB.:_CRS..RTLB 2440: 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c 42 0a ....#...y..RTLB. 2450: 01 49 52 51 30 70 00 49 52 51 30 79 0a 01 7b 50 .IRQ0p.IRQ0y..{P 2460: 42 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 42 14 BRC...IRQ0.RTLB. 2470: 1c 5f 53 52 53 09 8b 68 0a 01 49 52 51 30 82 49 ._SRS..h..IRQ0.I 2480: 52 51 30 60 76 60 70 60 50 42 52 43 14 18 5f 53 RQ0`v`p`PBRC.._S 2490: 54 41 08 a0 0c 7b 50 42 52 43 0a 80 00 a4 0a 09 TA...{PBRC...... 24a0: a1 04 a4 0a 0b 5b 82 46 0a 4c 4e 4b 43 08 5f 48 .....[.F.LNKC._H 24b0: 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 03 14 11 ID.A...._UID.... 24c0: 5f 44 49 53 08 7d 50 43 52 43 0a 80 50 43 52 43 _DIS.}PCRC..PCRC 24d0: 14 0b 5f 50 52 53 08 a4 50 52 53 43 14 3a 5f 43 .._PRS..PRSC.:_C 24e0: 52 53 08 08 52 54 4c 43 11 09 0a 06 23 00 00 18 RS..RTLC....#... 24f0: 79 00 8b 52 54 4c 43 0a 01 49 52 51 30 70 00 49 y..RTLC..IRQ0p.I 2500: 52 51 30 79 0a 01 7b 50 43 52 43 0a 0f 00 49 52 RQ0y..{PCRC...IR 2510: 51 30 a4 52 54 4c 43 14 1c 5f 53 52 53 09 8b 68 Q0.RTLC.._SRS..h 2520: 0a 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 ..IRQ0.IRQ0`v`p` 2530: 50 43 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 43 PCRC.._STA...{PC 2540: 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 46 RC...........[.F 2550: 0a 4c 4e 4b 44 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKD._HID.A.... 2560: 5f 55 49 44 0a 04 14 11 5f 44 49 53 08 7d 50 44 _UID...._DIS.}PD 2570: 52 43 0a 80 50 44 52 43 14 0b 5f 50 52 53 08 a4 RC..PDRC.._PRS.. 2580: 50 52 53 44 14 3a 5f 43 52 53 08 08 52 54 4c 44 PRSD.:_CRS..RTLD 2590: 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c 44 0a ....#...y..RTLD. 25a0: 01 49 52 51 30 70 00 49 52 51 30 79 0a 01 7b 50 .IRQ0p.IRQ0y..{P 25b0: 44 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 44 14 DRC...IRQ0.RTLD. 25c0: 1c 5f 53 52 53 09 8b 68 0a 01 49 52 51 30 82 49 ._SRS..h..IRQ0.I 25d0: 52 51 30 60 76 60 70 60 50 44 52 43 14 18 5f 53 RQ0`v`p`PDRC.._S 25e0: 54 41 08 a0 0c 7b 50 44 52 43 0a 80 00 a4 0a 09 TA...{PDRC...... 25f0: a1 04 a4 0a 0b 5b 82 46 0a 4c 4e 4b 45 08 5f 48 .....[.F.LNKE._H 2600: 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 05 14 11 ID.A...._UID.... 2610: 5f 44 49 53 08 7d 50 45 52 43 0a 80 50 45 52 43 _DIS.}PERC..PERC 2620: 14 0b 5f 50 52 53 08 a4 50 52 53 45 14 3a 5f 43 .._PRS..PRSE.:_C 2630: 52 53 08 08 52 54 4c 45 11 09 0a 06 23 00 00 18 RS..RTLE....#... 2640: 79 00 8b 52 54 4c 45 0a 01 49 52 51 30 70 00 49 y..RTLE..IRQ0p.I 2650: 52 51 30 79 0a 01 7b 50 45 52 43 0a 0f 00 49 52 RQ0y..{PERC...IR 2660: 51 30 a4 52 54 4c 45 14 1c 5f 53 52 53 09 8b 68 Q0.RTLE.._SRS..h 2670: 0a 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 ..IRQ0.IRQ0`v`p` 2680: 50 45 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 45 PERC.._STA...{PE 2690: 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 46 RC...........[.F 26a0: 0a 4c 4e 4b 46 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKF._HID.A.... 26b0: 5f 55 49 44 0a 06 14 11 5f 44 49 53 08 7d 50 46 _UID...._DIS.}PF 26c0: 52 43 0a 80 50 46 52 43 14 0b 5f 50 52 53 08 a4 RC..PFRC.._PRS.. 26d0: 50 52 53 46 14 3a 5f 43 52 53 08 08 52 54 4c 46 PRSF.:_CRS..RTLF 26e0: 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c 46 0a ....#...y..RTLF. 26f0: 01 49 52 51 30 70 00 49 52 51 30 79 0a 01 7b 50 .IRQ0p.IRQ0y..{P 2700: 46 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 46 14 FRC...IRQ0.RTLF. 2710: 1c 5f 53 52 53 09 8b 68 0a 01 49 52 51 30 82 49 ._SRS..h..IRQ0.I 2720: 52 51 30 60 76 60 70 60 50 46 52 43 14 18 5f 53 RQ0`v`p`PFRC.._S 2730: 54 41 08 a0 0c 7b 50 46 52 43 0a 80 00 a4 0a 09 TA...{PFRC...... 2740: a1 04 a4 0a 0b 5b 82 46 0a 4c 4e 4b 47 08 5f 48 .....[.F.LNKG._H 2750: 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 11 ID.A...._UID.... 2760: 5f 44 49 53 08 7d 50 47 52 43 0a 80 50 47 52 43 _DIS.}PGRC..PGRC 2770: 14 0b 5f 50 52 53 08 a4 50 52 53 47 14 3a 5f 43 .._PRS..PRSG.:_C 2780: 52 53 08 08 52 54 4c 47 11 09 0a 06 23 00 00 18 RS..RTLG....#... 2790: 79 00 8b 52 54 4c 47 0a 01 49 52 51 30 70 00 49 y..RTLG..IRQ0p.I 27a0: 52 51 30 79 0a 01 7b 50 47 52 43 0a 0f 00 49 52 RQ0y..{PGRC...IR 27b0: 51 30 a4 52 54 4c 47 14 1c 5f 53 52 53 09 8b 68 Q0.RTLG.._SRS..h 27c0: 0a 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 ..IRQ0.IRQ0`v`p` 27d0: 50 47 52 43 14 18 5f 53 54 41 08 a0 0c 7b 50 47 PGRC.._STA...{PG 27e0: 52 43 0a 80 00 a4 0a 09 a1 04 a4 0a 0b 5b 82 46 RC...........[.F 27f0: 0a 4c 4e 4b 48 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKH._HID.A.... 2800: 5f 55 49 44 0a 08 14 11 5f 44 49 53 08 7d 50 48 _UID...._DIS.}PH 2810: 52 43 0a 80 50 48 52 43 14 0b 5f 50 52 53 08 a4 RC..PHRC.._PRS.. 2820: 50 52 53 48 14 3a 5f 43 52 53 08 08 52 54 4c 48 PRSH.:_CRS..RTLH 2830: 11 09 0a 06 23 00 00 18 79 00 8b 52 54 4c 48 0a ....#...y..RTLH. 2840: 01 49 52 51 30 70 00 49 52 51 30 79 0a 01 7b 50 .IRQ0p.IRQ0y..{P 2850: 48 52 43 0a 0f 00 49 52 51 30 a4 52 54 4c 48 14 HRC...IRQ0.RTLH. 2860: 1c 5f 53 52 53 09 8b 68 0a 01 49 52 51 30 82 49 ._SRS..h..IRQ0.I 2870: 52 51 30 60 76 60 70 60 50 48 52 43 14 18 5f 53 RQ0`v`p`PHRC.._S 2880: 54 41 08 a0 0c 7b 50 48 52 43 0a 80 00 a4 0a 09 TA...{PHRC...... 2890: a1 04 a4 0a 0b 5b 80 4c 50 43 30 02 0a 40 0a c0 .....[.LPC0..@.. 28a0: 5b 81 22 4c 50 43 30 00 00 40 20 49 4f 44 30 08 [."LPC0..@ IOD0. 28b0: 49 4f 44 31 08 00 40 37 52 41 45 4e 01 00 0d 52 IOD1..@7RAEN...R 28c0: 43 42 41 12 5b 82 3d 44 4d 41 43 08 5f 48 49 44 CBA.[.=DMAC._HID 28d0: 0c 41 d0 02 00 08 5f 43 52 53 11 28 0a 25 47 01 .A...._CRS.(.%G. 28e0: 00 00 00 00 01 20 47 01 81 00 81 00 01 11 47 01 ..... G.......G. 28f0: 93 00 93 00 01 0d 47 01 c0 00 c0 00 01 20 2a 10 ......G...... *. 2900: 01 79 00 5b 82 26 46 57 48 44 08 5f 48 49 44 0c .y.[.&FWHD._HID. 2910: 25 d4 08 00 08 5f 43 52 53 11 11 0a 0e 86 09 00 %...._CRS....... 2920: 00 00 00 00 ff 00 00 00 01 79 00 5b 82 4f 0a 48 .........y.[.O.H 2930: 50 45 54 08 5f 48 49 44 0c 41 d0 01 03 08 5f 55 PET._HID.A...._U 2940: 49 44 0a 00 08 42 55 46 30 11 11 0a 0e 86 09 00 ID...BUF0....... 2950: 01 00 00 d0 fe 00 04 00 00 79 00 14 28 5f 53 54 .........y..(_ST 2960: 41 00 a0 13 92 95 4f 53 59 53 0b d1 07 a0 08 48 A.....OSYS.....H 2970: 50 41 45 a4 0a 0f a1 0a a0 08 48 50 41 45 a4 0a PAE.......HPAE.. 2980: 0b a4 0a 00 14 47 05 5f 43 52 53 08 a0 4a 04 48 .....G._CRS..J.H 2990: 50 41 45 8a 42 55 46 30 0a 04 48 50 54 30 a0 12 PAE.BUF0..HPT0.. 29a0: 93 48 50 41 53 0a 01 70 0c 00 10 d0 fe 48 50 54 .HPAS..p.....HPT 29b0: 30 a0 12 93 48 50 41 53 0a 02 70 0c 00 20 d0 fe 0...HPAS..p.. .. 29c0: 48 50 54 30 a0 12 93 48 50 41 53 0a 03 70 0c 00 HPT0...HPAS..p.. 29d0: 30 d0 fe 48 50 54 30 a4 42 55 46 30 5b 82 45 0a 0..HPT0.BUF0[.E. 29e0: 49 50 49 43 08 5f 48 49 44 0b 41 d0 08 5f 43 52 IPIC._HID.A.._CR 29f0: 53 11 41 09 0a 8d 47 01 20 00 20 00 01 02 47 01 S.A...G. . ...G. 2a00: 24 00 24 00 01 02 47 01 28 00 28 00 01 02 47 01 $.$...G.(.(...G. 2a10: 2c 00 2c 00 01 02 47 01 30 00 30 00 01 02 47 01 ,.,...G.0.0...G. 2a20: 34 00 34 00 01 02 47 01 38 00 38 00 01 02 47 01 4.4...G.8.8...G. 2a30: 3c 00 3c 00 01 02 47 01 a0 00 a0 00 01 02 47 01 <.<...G.......G. 2a40: a4 00 a4 00 01 02 47 01 a8 00 a8 00 01 02 47 01 ......G.......G. 2a50: ac 00 ac 00 01 02 47 01 b0 00 b0 00 01 02 47 01 ......G.......G. 2a60: b4 00 b4 00 01 02 47 01 b8 00 b8 00 01 02 47 01 ......G.......G. 2a70: bc 00 bc 00 01 02 47 01 d0 04 d0 04 01 02 22 04 ......G.......". 2a80: 00 79 00 5b 82 25 4d 41 54 48 08 5f 48 49 44 0c .y.[.%MATH._HID. 2a90: 41 d0 0c 04 08 5f 43 52 53 11 10 0a 0d 47 01 f0 A...._CRS....G.. 2aa0: 00 f0 00 01 01 22 00 20 79 00 5b 82 43 1e 4c 44 .....". y.[.C.LD 2ab0: 52 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 49 RC._HID.A...._UI 2ac0: 44 0a 02 08 42 55 46 30 11 4e 08 0a 8a 47 01 2e D...BUF0.N...G.. 2ad0: 00 2e 00 01 02 47 01 4e 00 4e 00 01 02 47 01 61 .....G.N.N...G.a 2ae0: 00 61 00 01 01 47 01 63 00 63 00 01 01 47 01 65 .a...G.c.c...G.e 2af0: 00 65 00 01 01 47 01 67 00 67 00 01 01 47 01 70 .e...G.g.g...G.p 2b00: 00 70 00 01 01 47 01 80 00 80 00 01 01 47 01 92 .p...G.......G.. 2b10: 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 80 .....G.......G.. 2b20: 06 80 06 01 20 47 01 ff ff ff ff 01 01 47 01 ff .... G.......G.. 2b30: ff ff ff 01 01 47 01 ff ff ff ff 01 01 47 01 00 .....G.......G.. 2b40: 04 00 04 01 80 47 01 00 05 00 05 01 80 47 01 4e .....G.......G.N 2b50: 16 4e 16 01 02 79 00 08 42 55 46 31 11 46 09 0a .N...y..BUF1.F.. 2b60: 92 47 01 2e 00 2e 00 01 02 47 01 4e 00 4e 00 01 .G.......G.N.N.. 2b70: 02 47 01 61 00 61 00 01 01 47 01 63 00 63 00 01 .G.a.a...G.c.c.. 2b80: 01 47 01 65 00 65 00 01 01 47 01 67 00 67 00 01 .G.e.e...G.g.g.. 2b90: 01 47 01 70 00 70 00 01 01 47 01 80 00 80 00 01 .G.p.p...G...... 2ba0: 01 47 01 92 00 92 00 01 01 47 01 b2 00 b2 00 01 .G.......G...... 2bb0: 02 47 01 80 06 80 06 01 20 47 01 ff ff ff ff 01 .G...... G...... 2bc0: 01 47 01 ff ff ff ff 01 01 47 01 ff ff ff ff 01 .G.......G...... 2bd0: 01 47 01 00 04 00 04 01 54 47 01 58 04 58 04 01 .G......TG.X.X.. 2be0: 28 47 01 00 05 00 05 01 80 47 01 4e 16 4e 16 01 (G.......G.N.N.. 2bf0: 02 79 00 08 5f 43 52 53 11 46 09 0a 92 47 01 2e .y.._CRS.F...G.. 2c00: 00 2e 00 01 02 47 01 4e 00 4e 00 01 02 47 01 61 .....G.N.N...G.a 2c10: 00 61 00 01 01 47 01 63 00 63 00 01 01 47 01 65 .a...G.c.c...G.e 2c20: 00 65 00 01 01 47 01 67 00 67 00 01 01 47 01 70 .e...G.g.g...G.p 2c30: 00 70 00 01 01 47 01 80 00 80 00 01 01 47 01 92 .p...G.......G.. 2c40: 00 92 00 01 01 47 01 b2 00 b2 00 01 02 47 01 80 .....G.......G.. 2c50: 06 80 06 01 20 47 01 00 10 00 10 01 10 47 01 ff .... G.......G.. 2c60: ff ff ff 01 01 47 01 ff ff ff ff 01 01 47 01 00 .....G.......G.. 2c70: 04 00 04 01 54 47 01 58 04 58 04 01 28 47 01 00 ....TG.X.X..(G.. 2c80: 05 00 05 01 80 47 01 4e 16 4e 16 01 02 79 00 5b .....G.N.N...y.[ 2c90: 82 25 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b 00 .%RTC_._HID.A... 2ca0: 08 5f 43 52 53 11 10 0a 0d 47 01 70 00 70 00 01 ._CRS....G.p.p.. 2cb0: 08 22 00 01 79 00 5b 82 2d 54 49 4d 52 08 5f 48 ."..y.[.-TIMR._H 2cc0: 49 44 0c 41 d0 01 00 08 5f 43 52 53 11 18 0a 15 ID.A...._CRS.... 2cd0: 47 01 40 00 40 00 01 04 47 01 50 00 50 00 10 04 G.@.@...G.P.P... 2ce0: 22 01 00 79 00 5b 82 43 04 43 57 44 54 08 5f 48 "..y.[.C.CWDT._H 2cf0: 49 44 0c 25 d4 3f 0d 08 5f 43 49 44 0c 41 d0 0c ID.%.?.._CID.A.. 2d00: 02 08 42 55 46 30 11 0d 0a 0a 47 01 54 04 54 04 ..BUF0....G.T.T. 2d10: 04 04 79 00 14 09 5f 53 54 41 08 a4 0a 0f 14 0b ..y..._STA...... 2d20: 5f 43 52 53 08 a4 42 55 46 30 5b 82 40 31 41 44 _CRS..BUF0[.@1AD 2d30: 42 47 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 55 49 BG._HID.A...._UI 2d40: 44 0a 13 08 43 52 53 31 11 0d 0a 0a 47 01 40 02 D...CRS1....G.@. 2d50: 40 02 01 1a 79 00 5b 80 44 42 47 43 01 0b 59 02 @...y.[.DBGC..Y. 2d60: 0a 10 5b 81 0b 44 42 47 43 11 44 42 47 50 08 5b ..[..DBGC.DBGP.[ 2d70: 80 44 42 50 50 01 0b 50 02 0a 02 5b 81 10 44 42 .DBPP..P...[..DB 2d80: 50 50 11 50 50 44 54 08 50 50 53 54 08 5b 80 44 PP.PPDT.PPST.[.D 2d90: 42 38 30 01 0a 80 0a 01 5b 81 0b 44 42 38 30 11 B80.....[..DB80. 2da0: 44 50 38 30 08 14 0b 5f 43 52 53 00 a4 43 52 53 DP80..._CRS..CRS 2db0: 31 14 0d 43 41 4c 4c 08 5c 49 53 4d 49 0a 96 14 1..CALL.\ISMI... 2dc0: 4d 0b 50 55 54 44 09 7d 7b 68 0a 0f 00 0a 10 60 M.PUTD.}{h.....` 2dd0: 7b 7a 68 0a 04 00 0a 0f 61 7b 80 61 00 0a 0f 62 {zh.....a{.a...b 2de0: 70 0b ff 3f 64 70 60 50 50 44 54 70 7a 7f 50 50 p..?dp`PPDTpz.PP 2df0: 53 54 0a 80 00 0a 03 00 63 a2 20 90 92 93 63 0a ST......c. ...c. 2e00: 10 92 93 64 0a 00 70 7a 7f 50 50 53 54 0a 80 00 ...d..pz.PPST... 2e10: 0a 03 00 63 76 64 5b 21 0a 1e a0 0f 93 64 0a 00 ...cvd[!.....d.. 2e20: 70 0a 00 50 50 44 54 a4 0a 00 70 0b ff 3f 64 70 p..PPDT...p..?dp 2e30: 61 50 50 44 54 70 7a 7f 50 50 53 54 0a 80 00 0a aPPDTpz.PPST.... 2e40: 03 00 63 a2 20 90 92 93 63 0a 00 92 93 64 0a 00 ..c. ...c....d.. 2e50: 70 7a 7f 50 50 53 54 0a 80 00 0a 03 00 63 76 64 pz.PPST......cvd 2e60: 5b 21 0a 1e a0 0f 93 64 0a 00 70 0a 00 50 50 44 [!.....d..p..PPD 2e70: 54 a4 0a 00 70 62 50 50 44 54 a4 0a 01 14 48 08 T...pbPPDT....H. 2e80: 4f 55 54 53 09 a0 4b 07 92 93 5c 2f 05 5f 53 42 OUTS..K...\/._SB 2e90: 5f 50 43 49 30 53 42 52 47 41 44 42 47 44 42 47 _PCI0SBRGADBGDBG 2ea0: 50 0a ff 72 87 68 0a 01 60 70 0a 00 61 08 42 55 P..r.h..`p..a.BU 2eb0: 46 46 11 02 60 70 68 42 55 46 46 74 60 0a 01 60 FF..`phBUFFt`..` 2ec0: a0 0d 93 50 55 54 44 0a 53 0a 00 a4 0a 00 a2 29 ...PUTD.S......) 2ed0: 92 93 83 88 42 55 46 46 61 00 0a 00 a0 19 93 50 ....BUFFa......P 2ee0: 55 54 44 83 88 42 55 46 46 61 00 0a 00 50 55 54 UTD..BUFFa...PUT 2ef0: 44 0a 00 a4 0a 00 75 61 50 55 54 44 0a 00 a4 0a D.....uaPUTD.... 2f00: 01 a1 04 a4 0a 00 14 4d 09 4f 55 54 44 09 08 44 .......M.OUTD..D 2f10: 45 43 5f 11 0e 0a 0b 30 31 32 33 34 35 36 37 38 EC_....012345678 2f20: 39 00 08 54 4d 50 5f 11 03 0a 0b 70 0a 00 60 70 9..TMP_....p..`p 2f30: 68 61 a0 0c 93 61 0a 00 4f 55 54 53 0d 30 00 a1 ha...a..OUTS.0.. 2f40: 44 06 a2 27 94 61 0a 00 78 61 0a 0a 62 61 70 83 D..'.a..xa..bap. 2f50: 88 44 45 43 5f 62 00 88 54 4d 50 5f 60 00 75 60 .DEC_b..TMP_`.u` 2f60: 70 0a 00 88 54 4d 50 5f 60 00 70 0a 00 62 76 60 p...TMP_`.p..bv` 2f70: a2 2b 95 62 60 70 83 88 54 4d 50 5f 62 00 63 70 .+.b`p..TMP_b.cp 2f80: 83 88 54 4d 50 5f 60 00 88 54 4d 50 5f 62 00 70 ..TMP_`..TMP_b.p 2f90: 63 88 54 4d 50 5f 60 00 75 62 76 60 4f 55 54 53 c.TMP_`.ubv`OUTS 2fa0: 54 4d 50 5f 14 47 09 4f 55 54 48 09 08 48 45 58 TMP_.G.OUTH..HEX 2fb0: 5f 11 14 0a 11 30 31 32 33 34 35 36 37 38 39 41 _....0123456789A 2fc0: 42 43 44 45 46 00 08 54 4d 50 5f 11 03 0a 0a 70 BCDEF..TMP_....p 2fd0: 0a 00 60 70 68 61 a2 2b 95 60 0a 08 7b 61 0a 0f ..`pha.+.`..{a.. 2fe0: 62 70 83 88 48 45 58 5f 62 00 88 54 4d 50 5f 60 bp..HEX_b..TMP_` 2ff0: 00 7a 61 0a 04 61 75 60 70 0a 00 88 54 4d 50 5f .za..au`p...TMP_ 3000: 60 00 70 0a 00 62 76 60 a2 2b 95 62 60 70 83 88 `.p..bv`.+.b`p.. 3010: 54 4d 50 5f 62 00 63 70 83 88 54 4d 50 5f 60 00 TMP_b.cp..TMP_`. 3020: 88 54 4d 50 5f 62 00 70 63 88 54 4d 50 5f 60 00 .TMP_b.pc.TMP_`. 3030: 75 62 76 60 4f 55 54 53 54 4d 50 5f 5b 82 4e 0e ubv`OUTSTMP_[.N. 3040: 50 53 32 4d 14 45 05 5f 48 49 44 00 a0 11 5c 2e PS2M.E._HID...\. 3050: 5f 53 42 5f 53 59 4e 41 a4 0c 4f 2e 0a 06 a0 11 _SB_SYNA..O..... 3060: 5c 2e 5f 53 42 5f 41 4c 50 53 a4 0c 06 a9 13 07 \._SB_ALPS...... 3070: a0 11 5c 2e 5f 53 42 5f 45 4c 41 4e a4 0c 16 84 ..\._SB_ELAN.... 3080: 01 01 a0 11 5c 2e 5f 53 42 5f 53 54 4c 43 a4 0c ....\._SB_STLC.. 3090: 4e 8c c1 41 a4 0c 4f 2e 0a 06 08 5f 43 49 44 12 N..A..O...._CID. 30a0: 1b 05 0c 4f 2e 0a 00 0c 4f 2e 00 02 0c 41 d0 0f ...O....O....A.. 30b0: 03 0c 41 d0 0f 13 0c 41 d0 0f 12 14 21 5f 53 54 ..A....A....!_ST 30c0: 41 00 79 0a 01 0a 0e 60 a0 0c 7b 5c 49 4f 53 54 A.y....`..{\IOST 30d0: 60 00 a4 0a 0f a1 04 a4 0a 00 a4 0a 00 08 43 52 `.............CR 30e0: 53 31 11 08 0a 05 22 00 10 79 00 08 43 52 53 32 S1...."..y..CRS2 30f0: 11 18 0a 15 47 01 60 00 60 00 00 01 47 01 64 00 ....G.`.`...G.d. 3100: 64 00 00 01 22 00 10 79 00 14 22 5f 43 52 53 00 d..."..y.."_CRS. 3110: 79 0a 01 0a 0a 60 a0 0e 7b 5c 49 4f 53 54 60 00 y....`..{\IOST`. 3120: a4 43 52 53 31 a1 06 a4 43 52 53 32 5b 82 44 07 .CRS1...CRS2[.D. 3130: 50 53 32 4b 08 5f 48 49 44 0c 41 d0 03 03 08 5f PS2K._HID.A...._ 3140: 43 49 44 0c 41 d0 03 0b 14 1a 5f 53 54 41 00 a0 CID.A....._STA.. 3150: 0e 7b 5c 49 4f 53 54 0b 00 04 00 a4 0a 0f a1 04 .{\IOST......... 3160: a4 0a 00 08 5f 43 52 53 11 18 0a 15 47 01 60 00 ...._CRS....G.`. 3170: 60 00 00 01 47 01 64 00 64 00 00 01 22 02 00 79 `...G.d.d..."..y 3180: 00 08 5f 50 52 53 11 1b 0a 18 31 00 47 01 60 00 .._PRS....1.G.`. 3190: 60 00 00 01 47 01 64 00 64 00 00 01 22 02 00 38 `...G.d.d..."..8 31a0: 79 00 5b 82 46 71 49 44 45 30 08 5f 41 44 52 0c y.[.FqIDE0._ADR. 31b0: 02 00 1f 00 08 52 45 47 46 0a 01 14 12 5f 52 45 .....REGF...._RE 31c0: 47 02 a0 0b 93 68 0a 02 70 69 52 45 47 46 5b 82 G....h..piREGF[. 31d0: 49 04 43 48 4e 30 08 5f 41 44 52 0a 00 5b 82 1c I.CHN0._ADR..[.. 31e0: 44 52 56 30 08 5f 41 44 52 0a 00 14 0f 5f 47 54 DRV0._ADR...._GT 31f0: 46 00 a4 52 41 54 41 41 54 41 30 5b 82 1c 44 52 F..RATAATA0[..DR 3200: 56 31 08 5f 41 44 52 0a 01 14 0f 5f 47 54 46 00 V1._ADR...._GTF. 3210: a4 52 41 54 41 41 54 41 31 5b 82 49 04 43 48 4e .RATAATA1[.I.CHN 3220: 31 08 5f 41 44 52 0a 01 5b 82 1c 44 52 56 30 08 1._ADR..[..DRV0. 3230: 5f 41 44 52 0a 00 14 0f 5f 47 54 46 00 a4 52 41 _ADR...._GTF..RA 3240: 54 41 41 54 41 32 5b 82 1c 44 52 56 31 08 5f 41 TAATA2[..DRV1._A 3250: 44 52 0a 01 14 0f 5f 47 54 46 00 a4 52 41 54 41 DR...._GTF..RATA 3260: 41 54 41 33 08 41 54 30 31 11 0a 0a 07 03 00 00 ATA3.AT01....... 3270: 00 00 00 ef 08 41 54 30 32 11 0a 0a 07 00 00 00 .....AT02....... 3280: 00 00 00 90 08 41 54 30 33 11 0a 0a 07 00 00 00 .....AT03....... 3290: 00 00 00 c6 08 41 54 30 34 11 0a 0a 07 00 00 00 .....AT04....... 32a0: 00 00 00 91 08 41 54 30 35 11 0a 0a 07 00 00 00 .....AT05....... 32b0: 00 00 00 f5 08 41 54 30 36 11 0a 0a 07 10 03 00 .....AT06....... 32c0: 00 00 00 ef 08 41 54 36 31 11 0a 0a 07 90 03 00 .....AT61....... 32d0: 00 00 00 ef 08 41 54 30 37 11 0a 0a 07 10 06 00 .....AT07....... 32e0: 00 00 00 ef 08 41 54 30 38 11 0a 0a 07 41 00 00 .....AT08....A.. 32f0: 00 00 00 ef 08 41 54 38 31 11 0a 0a 07 c1 00 00 .....AT81....... 3300: 00 00 00 ef 08 41 54 30 39 11 0a 0a 07 90 05 00 .....AT09....... 3310: 00 00 00 ef 08 41 54 41 30 11 03 0a 32 08 41 54 .....ATA0...2.AT 3320: 41 31 11 03 0a 32 08 41 54 41 32 11 03 0a 32 08 A1...2.ATA2...2. 3330: 41 54 41 33 11 03 0a 32 08 41 54 41 42 11 03 0a ATA3...2.ATAB... 3340: 32 8c 41 54 41 42 0a 00 43 4d 44 43 14 4c 05 47 2.ATAB..CMDC.L.G 3350: 54 46 42 0b 77 43 4d 44 43 0a 38 60 72 60 0a 08 TFB.wCMDC.8`r`.. 3360: 61 5b 13 41 54 41 42 61 0a 38 43 4d 44 58 77 43 a[.ATABa.8CMDXwC 3370: 4d 44 43 0a 07 60 8c 41 54 41 42 72 60 0a 02 00 MDC..`.ATABr`... 3380: 41 30 30 31 8c 41 54 41 42 72 60 0a 06 00 41 30 A001.ATABr`...A0 3390: 30 35 70 68 43 4d 44 58 70 69 41 30 30 31 70 6a 05phCMDXpiA001pj 33a0: 41 30 30 35 75 43 4d 44 43 14 41 1f 47 54 46 5f A005uCMDC.A.GTF_ 33b0: 0a 70 69 5b 31 70 0a 00 43 4d 44 43 08 49 44 30 .pi[1p..CMDC.ID0 33c0: 30 0a 00 08 49 44 34 39 0b 00 0c 08 49 44 35 39 0...ID49....ID59 33d0: 0a 00 08 49 44 35 33 0a 04 08 49 44 36 33 0b 00 ...ID53...ID63.. 33e0: 0f 08 49 44 38 38 0b 00 0f 08 49 44 37 38 0a 00 ..ID88....ID78.. 33f0: 08 57 31 32 38 0a 00 08 57 31 31 39 0a 00 08 57 .W128...W119...W 3400: 31 32 30 0a 00 08 49 52 44 59 0a 01 08 50 49 4f 120...IRDY...PIO 3410: 54 0a 00 08 44 4d 41 54 0a 00 a0 43 0b 93 87 69 T...DMAT...C...i 3420: 0b 00 02 8b 69 0a 00 49 57 30 30 70 49 57 30 30 ....i..IW00pIW00 3430: 49 44 30 30 8b 69 0a 62 49 57 34 39 70 49 57 34 ID00.i.bIW49pIW4 3440: 39 49 44 34 39 8b 69 0a 6a 49 57 35 33 70 49 57 9ID49.i.jIW53pIW 3450: 35 33 49 44 35 33 8b 69 0a 7e 49 57 36 33 70 49 53ID53.i.~IW63pI 3460: 57 36 33 49 44 36 33 8b 69 0a 76 49 57 35 39 70 W63ID63.i.vIW59p 3470: 49 57 35 39 49 44 35 39 8b 69 0a b0 49 57 38 38 IW59ID59.i..IW88 3480: 70 49 57 38 38 49 44 38 38 8b 69 0a 9c 49 57 37 pIW88ID88.i..IW7 3490: 38 70 49 57 37 38 49 44 37 38 8b 69 0b 00 01 49 8pIW78ID78.i...I 34a0: 31 32 38 70 49 31 32 38 57 31 32 38 8b 69 0a ee 128pI128W128.i.. 34b0: 49 31 31 39 70 49 31 31 39 57 31 31 39 8b 69 0a I119pI119W119.i. 34c0: f0 49 31 32 30 70 49 31 32 30 57 31 32 30 70 0a .I120pI120W120p. 34d0: a0 67 a0 06 68 70 0a b0 67 a0 24 90 7b 49 44 35 .g..hp..g.$.{ID5 34e0: 39 0b 00 01 00 7b 49 44 35 39 0a ff 00 47 54 46 9....{ID59...GTF 34f0: 42 41 54 30 33 7b 49 44 35 39 0a ff 00 67 a0 40 BAT03{ID59...g.@ 3500: 09 93 67 0a a0 a0 14 7b 57 31 32 38 0a 01 00 47 ..g....{W128...G 3510: 54 46 42 41 54 30 35 0a 00 67 a0 14 7b 49 44 37 TFBAT05..g..{ID7 3520: 38 0a 40 00 47 54 46 42 41 54 30 37 0a 06 67 a0 8.@.GTFBAT07..g. 3530: 2d 7b 49 44 37 38 0a 08 00 a0 16 5c 2e 5f 53 42 -{ID78.....\._SB 3540: 5f 4c 44 46 54 47 54 46 42 41 54 30 36 0a 03 67 _LDFTGTFBAT06..g 3550: a1 0c 47 54 46 42 41 54 36 31 0a 03 67 a0 31 7b ..GTFBAT61..g.1{ 3560: 57 31 31 39 0a 20 00 a0 1a 7b 5c 2e 5f 53 42 5f W119. ...{\._SB_ 3570: 48 44 44 46 0a 01 00 47 54 46 42 41 54 30 38 0a HDDF...GTFBAT08. 3580: 00 67 a1 0c 47 54 46 42 41 54 38 31 0a 00 67 70 .g..GTFBAT81..gp 3590: 41 54 41 42 5b 31 a4 41 54 41 42 14 2c 52 41 54 ATAB[1.ATAB.,RAT 35a0: 41 01 8c 68 0a 00 43 4d 44 4e 77 43 4d 44 4e 0a A..h..CMDNwCMDN. 35b0: 38 60 5b 13 68 0a 08 60 52 45 54 42 70 52 45 54 8`[.h..`RETBpRET 35c0: 42 5b 31 a4 52 45 54 42 08 41 54 50 30 11 03 0a B[1.RETB.ATP0... 35d0: 32 5b 82 30 50 52 54 30 08 5f 41 44 52 0b ff ff 2[.0PRT0._ADR... 35e0: 14 12 5f 53 44 44 01 70 41 47 54 46 0a 00 68 41 .._SDD.pAGTF..hA 35f0: 54 50 30 14 0f 5f 47 54 46 00 a4 52 41 54 41 41 TP0.._GTF..RATAA 3600: 54 50 30 08 41 54 50 32 11 03 0a 32 5b 82 40 1e TP0.ATP2...2[.@. 3610: 50 52 54 32 08 5f 41 44 52 0c ff ff 02 00 08 4f PRT2._ADR......O 3620: 46 4c 47 0a 01 14 12 5f 53 44 44 01 70 41 47 54 FLG...._SDD.pAGT 3630: 46 0a 00 68 41 54 50 32 14 0f 5f 47 54 46 00 a4 F..hATP2.._GTF.. 3640: 52 41 54 41 41 54 50 32 14 45 1a 5f 44 53 4d 0c RATAATP2.E._DSM. 3650: 08 5f 54 5f 31 00 08 5f 54 5f 30 00 a0 4c 18 93 ._T_1.._T_0..L.. 3660: 68 11 13 0a 10 30 ef fa bd bb ae de 11 8a 39 08 h....0........9. 3670: 00 20 0c 9a 66 a2 43 17 01 70 99 6a 00 5f 54 5f . ..f.C..p.j._T_ 3680: 30 a0 2b 93 5f 54 5f 30 0a 00 a2 22 01 70 99 69 0.+._T_0...".p.i 3690: 00 5f 54 5f 31 a0 0e 93 5f 54 5f 31 0a 01 a4 11 ._T_1..._T_1.... 36a0: 04 0a 01 0f a1 07 a4 11 04 0a 01 00 a5 a1 4a 13 ..............J. 36b0: a0 0b 93 5f 54 5f 30 0a 01 a4 0a 01 a1 4b 12 a0 ..._T_0......K.. 36c0: 4c 0a 93 5f 54 5f 30 0a 02 70 5c 2f 04 5f 53 42 L.._T_0..p\/._SB 36d0: 5f 50 43 49 30 53 42 52 47 47 50 4c 4b 66 70 0a _PCI0SBRGGPLKfp. 36e0: 00 5c 2f 04 5f 53 42 5f 50 43 49 30 53 42 52 47 .\/._SB_PCI0SBRG 36f0: 47 50 4c 4b 70 0a 00 47 50 45 33 70 0a 01 47 50 GPLKp..GPE3p..GP 3700: 53 33 70 0a 00 4f 46 4c 47 a0 17 93 7b 47 4c 30 S3p..OFLG...{GL0 3710: 30 0a 08 00 0a 08 7d 47 49 56 30 0a 08 47 49 56 0.....}GIV0..GIV 3720: 30 a1 0c 7b 47 49 56 30 0a f7 47 49 56 30 7d 5c 0..{GIV0..GIV0}\ 3730: 47 4c 30 38 0a 10 5c 47 4c 30 38 5b 22 0a c8 70 GL08..\GL08["..p 3740: 0a 01 4f 46 4c 47 70 0a 01 47 50 53 33 70 0a 01 ..OFLGp..GPS3p.. 3750: 47 50 45 33 70 66 5c 2f 04 5f 53 42 5f 50 43 49 GPE3pf\/._SB_PCI 3760: 30 53 42 52 47 47 50 4c 4b a4 0a 01 a1 4b 07 a0 0SBRGGPLK....K.. 3770: 43 07 93 5f 54 5f 30 0a 03 a0 44 06 4f 46 4c 47 C.._T_0...D.OFLG 3780: 70 5c 2f 04 5f 53 42 5f 50 43 49 30 53 42 52 47 p\/._SB_PCI0SBRG 3790: 47 50 4c 4b 66 70 0a 00 5c 2f 04 5f 53 42 5f 50 GPLKfp..\/._SB_P 37a0: 43 49 30 53 42 52 47 47 50 4c 4b 70 0a 00 47 50 CI0SBRGGPLKp..GP 37b0: 45 33 70 0a 01 47 50 53 33 7b 5c 47 4c 30 38 0a E3p..GPS3{\GL08. 37c0: ef 5c 47 4c 30 38 70 66 5c 2f 04 5f 53 42 5f 50 .\GL08pf\/._SB_P 37d0: 43 49 30 53 42 52 47 47 50 4c 4b a4 0a 01 a1 04 CI0SBRGGPLK..... 37e0: a4 0a 00 a1 04 a4 0a 00 a5 a1 04 a4 0a 00 14 4b ...............K 37f0: 0c 41 47 54 46 0a 70 0a a0 60 70 0a 00 43 4d 44 .AGTF.p..`p..CMD 3800: 43 a0 43 0b 93 87 69 0b 00 02 8b 69 0a 00 49 57 C.C...i....i..IW 3810: 30 30 8b 69 0b 00 01 49 31 32 38 a0 14 7b 49 31 00.i...I128..{I1 3820: 32 38 0a 01 00 47 54 46 42 41 54 30 35 0a 00 60 28...GTFBAT05..` 3830: 8b 69 0a 9c 49 57 37 38 a0 14 7b 49 57 37 38 0a .i..IW78..{IW78. 3840: 40 00 47 54 46 42 41 54 30 37 0a 06 60 a0 2d 7b @.GTFBAT07..`.-{ 3850: 49 57 37 38 0a 08 00 a0 16 5c 2e 5f 53 42 5f 4c IW78.....\._SB_L 3860: 44 46 54 47 54 46 42 41 54 30 36 0a 03 60 a1 0c DFTGTFBAT06..`.. 3870: 47 54 46 42 41 54 36 31 0a 03 60 8b 69 0a ee 49 GTFBAT61..`.i..I 3880: 31 31 39 a0 31 7b 49 31 31 39 0a 20 00 a0 1a 7b 119.1{I119. ...{ 3890: 5c 2e 5f 53 42 5f 48 44 44 46 0a 01 00 47 54 46 \._SB_HDDF...GTF 38a0: 42 41 54 30 38 0a 00 60 a1 0c 47 54 46 42 41 54 BAT08..`..GTFBAT 38b0: 38 31 0a 00 60 a4 41 54 41 42 5b 82 4b 56 49 44 81..`.ATAB[.KVID 38c0: 45 31 08 5f 41 44 52 0c 05 00 1f 00 08 52 45 47 E1._ADR......REG 38d0: 46 0a 01 14 12 5f 52 45 47 02 a0 0b 93 68 0a 02 F...._REG....h.. 38e0: 70 69 52 45 47 46 5b 80 42 41 52 30 02 0a 00 0b piREGF[.BAR0.... 38f0: 00 01 5b 81 4d 06 42 41 52 30 03 56 44 49 44 20 ..[.M.BAR0.VDID 3900: 00 30 53 43 43 52 08 42 43 43 52 08 00 40 42 4d .0SCCR.BCCR..@BM 3910: 41 50 56 02 00 04 53 4d 53 5f 02 00 08 50 30 45 APV...SMS_...P0E 3920: 4e 01 50 31 45 4e 01 50 32 45 4e 01 50 33 45 4e N.P1EN.P2EN.P3EN 3930: 01 50 34 45 4e 01 50 35 45 4e 01 00 01 00 01 50 .P4EN.P5EN.....P 3940: 30 50 46 01 50 31 50 46 01 50 32 50 46 01 50 33 0PF.P1PF.P2PF.P3 3950: 50 46 01 50 34 50 46 01 50 35 50 46 01 00 01 00 PF.P4PF.P5PF.... 3960: 01 5b 82 49 04 43 48 4e 30 08 5f 41 44 52 0a 00 .[.I.CHN0._ADR.. 3970: 5b 82 1c 44 52 56 30 08 5f 41 44 52 0a 00 14 0f [..DRV0._ADR.... 3980: 5f 47 54 46 00 a4 52 41 54 41 41 54 41 30 5b 82 _GTF..RATAATA0[. 3990: 1c 44 52 56 31 08 5f 41 44 52 0a 01 14 0f 5f 47 .DRV1._ADR...._G 39a0: 54 46 00 a4 52 41 54 41 41 54 41 31 5b 82 49 04 TF..RATAATA1[.I. 39b0: 43 48 4e 31 08 5f 41 44 52 0a 01 5b 82 1c 44 52 CHN1._ADR..[..DR 39c0: 56 30 08 5f 41 44 52 0a 00 14 0f 5f 47 54 46 00 V0._ADR...._GTF. 39d0: a4 52 41 54 41 41 54 41 32 5b 82 1c 44 52 56 31 .RATAATA2[..DRV1 39e0: 08 5f 41 44 52 0a 01 14 0f 5f 47 54 46 00 a4 52 ._ADR...._GTF..R 39f0: 41 54 41 41 54 41 33 08 41 54 30 31 11 0a 0a 07 ATAATA3.AT01.... 3a00: 03 00 00 00 00 00 ef 08 41 54 30 32 11 0a 0a 07 ........AT02.... 3a10: 00 00 00 00 00 00 90 08 41 54 30 33 11 0a 0a 07 ........AT03.... 3a20: 00 00 00 00 00 00 c6 08 41 54 30 34 11 0a 0a 07 ........AT04.... 3a30: 00 00 00 00 00 00 91 08 41 54 30 35 11 0a 0a 07 ........AT05.... 3a40: 00 00 00 00 00 00 f5 08 41 54 30 36 11 0a 0a 07 ........AT06.... 3a50: 10 03 00 00 00 00 ef 08 41 54 36 31 11 0a 0a 07 ........AT61.... 3a60: 90 03 00 00 00 00 ef 08 41 54 30 37 11 0a 0a 07 ........AT07.... 3a70: 10 06 00 00 00 00 ef 08 41 54 30 38 11 0a 0a 07 ........AT08.... 3a80: 41 00 00 00 00 00 ef 08 41 54 38 31 11 0a 0a 07 A.......AT81.... 3a90: c1 00 00 00 00 00 ef 08 41 54 30 39 11 0a 0a 07 ........AT09.... 3aa0: 90 05 00 00 00 00 ef 08 41 54 41 30 11 03 0a 32 ........ATA0...2 3ab0: 08 41 54 41 31 11 03 0a 32 08 41 54 41 32 11 03 .ATA1...2.ATA2.. 3ac0: 0a 32 08 41 54 41 33 11 03 0a 32 08 41 54 41 42 .2.ATA3...2.ATAB 3ad0: 11 03 0a 32 8c 41 54 41 42 0a 00 43 4d 44 43 14 ...2.ATAB..CMDC. 3ae0: 4c 05 47 54 46 42 0b 77 43 4d 44 43 0a 38 60 72 L.GTFB.wCMDC.8`r 3af0: 60 0a 08 61 5b 13 41 54 41 42 61 0a 38 43 4d 44 `..a[.ATABa.8CMD 3b00: 58 77 43 4d 44 43 0a 07 60 8c 41 54 41 42 72 60 XwCMDC..`.ATABr` 3b10: 0a 02 00 41 30 30 31 8c 41 54 41 42 72 60 0a 06 ...A001.ATABr`.. 3b20: 00 41 30 30 35 70 68 43 4d 44 58 70 69 41 30 30 .A005phCMDXpiA00 3b30: 31 70 6a 41 30 30 35 75 43 4d 44 43 14 41 1f 47 1pjA005uCMDC.A.G 3b40: 54 46 5f 0a 70 69 5b 31 70 0a 00 43 4d 44 43 08 TF_.pi[1p..CMDC. 3b50: 49 44 30 30 0a 00 08 49 44 34 39 0b 00 0c 08 49 ID00...ID49....I 3b60: 44 35 39 0a 00 08 49 44 35 33 0a 04 08 49 44 36 D59...ID53...ID6 3b70: 33 0b 00 0f 08 49 44 38 38 0b 00 0f 08 49 44 37 3....ID88....ID7 3b80: 38 0a 00 08 57 31 32 38 0a 00 08 57 31 31 39 0a 8...W128...W119. 3b90: 00 08 57 31 32 30 0a 00 08 49 52 44 59 0a 01 08 ..W120...IRDY... 3ba0: 50 49 4f 54 0a 00 08 44 4d 41 54 0a 00 a0 43 0b PIOT...DMAT...C. 3bb0: 93 87 69 0b 00 02 8b 69 0a 00 49 57 30 30 70 49 ..i....i..IW00pI 3bc0: 57 30 30 49 44 30 30 8b 69 0a 62 49 57 34 39 70 W00ID00.i.bIW49p 3bd0: 49 57 34 39 49 44 34 39 8b 69 0a 6a 49 57 35 33 IW49ID49.i.jIW53 3be0: 70 49 57 35 33 49 44 35 33 8b 69 0a 7e 49 57 36 pIW53ID53.i.~IW6 3bf0: 33 70 49 57 36 33 49 44 36 33 8b 69 0a 76 49 57 3pIW63ID63.i.vIW 3c00: 35 39 70 49 57 35 39 49 44 35 39 8b 69 0a b0 49 59pIW59ID59.i..I 3c10: 57 38 38 70 49 57 38 38 49 44 38 38 8b 69 0a 9c W88pIW88ID88.i.. 3c20: 49 57 37 38 70 49 57 37 38 49 44 37 38 8b 69 0b IW78pIW78ID78.i. 3c30: 00 01 49 31 32 38 70 49 31 32 38 57 31 32 38 8b ..I128pI128W128. 3c40: 69 0a ee 49 31 31 39 70 49 31 31 39 57 31 31 39 i..I119pI119W119 3c50: 8b 69 0a f0 49 31 32 30 70 49 31 32 30 57 31 32 .i..I120pI120W12 3c60: 30 70 0a a0 67 a0 06 68 70 0a b0 67 a0 24 90 7b 0p..g..hp..g.$.{ 3c70: 49 44 35 39 0b 00 01 00 7b 49 44 35 39 0a ff 00 ID59....{ID59... 3c80: 47 54 46 42 41 54 30 33 7b 49 44 35 39 0a ff 00 GTFBAT03{ID59... 3c90: 67 a0 40 09 93 67 0a a0 a0 14 7b 57 31 32 38 0a g.@..g....{W128. 3ca0: 01 00 47 54 46 42 41 54 30 35 0a 00 67 a0 14 7b ..GTFBAT05..g..{ 3cb0: 49 44 37 38 0a 40 00 47 54 46 42 41 54 30 37 0a ID78.@.GTFBAT07. 3cc0: 06 67 a0 2d 7b 49 44 37 38 0a 08 00 a0 16 5c 2e .g.-{ID78.....\. 3cd0: 5f 53 42 5f 4c 44 46 54 47 54 46 42 41 54 30 36 _SB_LDFTGTFBAT06 3ce0: 0a 03 67 a1 0c 47 54 46 42 41 54 36 31 0a 03 67 ..g..GTFBAT61..g 3cf0: a0 31 7b 57 31 31 39 0a 20 00 a0 1a 7b 5c 2e 5f .1{W119. ...{\._ 3d00: 53 42 5f 48 44 44 46 0a 01 00 47 54 46 42 41 54 SB_HDDF...GTFBAT 3d10: 30 38 0a 00 67 a1 0c 47 54 46 42 41 54 38 31 0a 08..g..GTFBAT81. 3d20: 00 67 70 41 54 41 42 5b 31 a4 41 54 41 42 14 2c .gpATAB[1.ATAB., 3d30: 52 41 54 41 01 8c 68 0a 00 43 4d 44 4e 77 43 4d RATA..h..CMDNwCM 3d40: 44 4e 0a 38 60 5b 13 68 0a 08 60 52 45 54 42 70 DN.8`[.h..`RETBp 3d50: 52 45 54 42 5b 31 a4 52 45 54 42 14 4b 0c 41 47 RETB[1.RETB.K.AG 3d60: 54 46 0a 70 0a a0 60 70 0a 00 43 4d 44 43 a0 43 TF.p..`p..CMDC.C 3d70: 0b 93 87 69 0b 00 02 8b 69 0a 00 49 57 30 30 8b ...i....i..IW00. 3d80: 69 0b 00 01 49 31 32 38 a0 14 7b 49 31 32 38 0a i...I128..{I128. 3d90: 01 00 47 54 46 42 41 54 30 35 0a 00 60 8b 69 0a ..GTFBAT05..`.i. 3da0: 9c 49 57 37 38 a0 14 7b 49 57 37 38 0a 40 00 47 .IW78..{IW78.@.G 3db0: 54 46 42 41 54 30 37 0a 06 60 a0 2d 7b 49 57 37 TFBAT07..`.-{IW7 3dc0: 38 0a 08 00 a0 16 5c 2e 5f 53 42 5f 4c 44 46 54 8.....\._SB_LDFT 3dd0: 47 54 46 42 41 54 30 36 0a 03 60 a1 0c 47 54 46 GTFBAT06..`..GTF 3de0: 42 41 54 36 31 0a 03 60 8b 69 0a ee 49 31 31 39 BAT61..`.i..I119 3df0: a0 31 7b 49 31 31 39 0a 20 00 a0 1a 7b 5c 2e 5f .1{I119. ...{\._ 3e00: 53 42 5f 48 44 44 46 0a 01 00 47 54 46 42 41 54 SB_HDDF...GTFBAT 3e10: 30 38 0a 00 60 a1 0c 47 54 46 42 41 54 38 31 0a 08..`..GTFBAT81. 3e20: 00 60 a4 41 54 41 42 5b 82 1f 45 48 43 31 08 5f .`.ATAB[..EHC1._ 3e30: 41 44 52 0c 00 00 1d 00 14 0f 5f 50 52 57 00 a4 ADR......._PRW.. 3e40: 47 50 52 57 0a 0d 0a 03 5b 82 1f 55 53 42 31 08 GPRW....[..USB1. 3e50: 5f 41 44 52 0c 01 00 1d 00 14 0f 5f 50 52 57 00 _ADR......._PRW. 3e60: a4 47 50 52 57 0a 03 0a 03 5b 82 1f 55 53 42 32 .GPRW....[..USB2 3e70: 08 5f 41 44 52 0c 02 00 1d 00 14 0f 5f 50 52 57 ._ADR......._PRW 3e80: 00 a4 47 50 52 57 0a 04 0a 03 5b 82 1f 55 53 42 ..GPRW....[..USB 3e90: 33 08 5f 41 44 52 0c 03 00 1d 00 14 0f 5f 50 52 3._ADR......._PR 3ea0: 57 00 a4 47 50 52 57 0a 0c 0a 03 5b 82 1f 55 53 W..GPRW....[..US 3eb0: 42 34 08 5f 41 44 52 0c 04 00 1d 00 14 0f 5f 50 B4._ADR......._P 3ec0: 52 57 00 a4 47 50 52 57 0a 0e 0a 03 5b 82 1f 45 RW..GPRW....[..E 3ed0: 48 43 32 08 5f 41 44 52 0c 00 00 1a 00 14 0f 5f HC2._ADR......._ 3ee0: 50 52 57 00 a4 47 50 52 57 0a 0d 0a 03 5b 82 1f PRW..GPRW....[.. 3ef0: 55 53 42 35 08 5f 41 44 52 0c 01 00 1a 00 14 0f USB5._ADR....... 3f00: 5f 50 52 57 00 a4 47 50 52 57 0a 05 0a 03 5b 82 _PRW..GPRW....[. 3f10: 1f 55 53 42 36 08 5f 41 44 52 0c 02 00 1a 00 14 .USB6._ADR...... 3f20: 0f 5f 50 52 57 00 a4 47 50 52 57 0a 20 0a 03 5b ._PRW..GPRW. ..[ 3f30: 82 1f 55 53 42 37 08 5f 41 44 52 0c 03 00 1a 00 ..USB7._ADR..... 3f40: 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 25 0a 03 .._PRW..GPRW.%.. 3f50: 5b 82 45 19 52 50 30 31 08 5f 41 44 52 0c 00 00 [.E.RP01._ADR... 3f60: 1c 00 5b 80 4c 43 54 4c 02 0a 50 0a 04 5b 81 12 ..[.LCTL..P..[.. 3f70: 4c 43 54 4c 01 00 04 50 45 4c 44 01 50 45 52 4c LCTL...PELD.PERL 3f80: 01 5b 80 53 4c 4f 54 02 0a 54 0a 10 5b 81 43 04 .[.SLOT..T..[.C. 3f90: 53 4c 4f 54 01 53 43 41 50 20 53 43 54 4c 10 41 SLOT.SCAP SCTL.A 3fa0: 42 50 31 01 50 46 44 31 01 4d 53 43 31 01 50 44 BP1.PFD1.MSC1.PD 3fb0: 43 31 01 43 43 31 30 01 4d 53 31 30 01 50 44 53 C1.CC10.MS10.PDS 3fc0: 31 01 52 53 56 30 01 4c 41 53 43 01 52 53 56 31 1.RSV0.LASC.RSV1 3fd0: 07 5b 80 52 48 55 42 02 0a 60 0a 10 5b 81 1a 52 .[.RHUB..`..[..R 3fe0: 48 55 42 01 50 4d 49 44 10 50 4d 45 53 01 50 4d HUB.PMID.PMES.PM 3ff0: 45 50 01 52 53 56 32 0e 5b 80 4d 49 53 43 02 0a EP.RSV2.[.MISC.. 4000: d8 0a 08 5b 81 3d 4d 49 53 43 01 52 53 56 34 1e ...[.=MISC.RSV4. 4010: 50 4d 43 45 01 48 50 43 45 01 50 4d 4d 53 01 48 PMCE.HPCE.PMMS.H 4020: 50 50 44 01 48 50 41 42 01 48 50 43 43 01 48 50 PPD.HPAB.HPCC.HP 4030: 4c 41 01 52 53 56 33 19 48 50 43 53 01 50 4d 43 LA.RSV3.HPCS.PMC 4040: 53 01 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 41 S.[.PXCS..@..[.A 4050: 05 50 58 43 53 40 00 40 09 00 0d 4c 41 53 58 01 .PXCS@.@...LASX. 4060: 00 32 41 42 50 58 01 00 02 50 44 43 58 01 00 02 .2ABPX...PDCX... 4070: 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 00 10 PDSX...LSCX..'.. 4080: 50 53 50 58 01 00 4f 3a 00 1e 48 50 45 58 01 50 PSPX..O:..HPEX.P 4090: 4d 45 58 01 00 1e 48 50 53 58 01 50 4d 53 58 01 MEX...HPSX.PMSX. 40a0: 14 1f 48 50 48 4b 00 70 0a 01 50 44 43 31 70 0a ..HPHK.p..PDC1p. 40b0: 01 48 50 43 53 70 0a 00 50 45 4c 44 5b 22 0a fa .HPCSp..PELD[".. 40c0: 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 09 0a 04 .._PRW..GPRW.... 40d0: 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 41 52 .._PRT...PICM.AR 40e0: 30 34 a4 50 52 30 34 5b 82 45 21 52 50 30 32 08 04.PR04[.E!RP02. 40f0: 5f 41 44 52 0c 01 00 1c 00 5b 80 4c 43 54 4c 02 _ADR.....[.LCTL. 4100: 0a 50 0a 04 5b 81 12 4c 43 54 4c 01 00 04 50 45 .P..[..LCTL...PE 4110: 4c 44 01 50 45 52 4c 01 5b 80 53 4c 4f 54 02 0a LD.PERL.[.SLOT.. 4120: 54 0a 10 5b 81 43 04 53 4c 4f 54 01 53 43 41 50 T..[.C.SLOT.SCAP 4130: 20 53 43 54 4c 10 41 42 50 31 01 50 46 44 31 01 SCTL.ABP1.PFD1. 4140: 4d 53 43 31 01 50 44 43 31 01 43 43 31 30 01 4d MSC1.PDC1.CC10.M 4150: 53 31 30 01 50 44 53 31 01 52 53 56 30 01 4c 41 S10.PDS1.RSV0.LA 4160: 53 43 01 52 53 56 31 07 5b 80 52 48 55 42 02 0a SC.RSV1.[.RHUB.. 4170: 60 0a 10 5b 81 1a 52 48 55 42 01 50 4d 49 44 10 `..[..RHUB.PMID. 4180: 50 4d 45 53 01 50 4d 45 50 01 52 53 56 32 0e 5b PMES.PMEP.RSV2.[ 4190: 80 4d 49 53 43 02 0a d8 0a 08 5b 81 3d 4d 49 53 .MISC.....[.=MIS 41a0: 43 01 52 53 56 34 1e 50 4d 43 45 01 48 50 43 45 C.RSV4.PMCE.HPCE 41b0: 01 50 4d 4d 53 01 48 50 50 44 01 48 50 41 42 01 .PMMS.HPPD.HPAB. 41c0: 48 50 43 43 01 48 50 4c 41 01 52 53 56 33 19 48 HPCC.HPLA.RSV3.H 41d0: 50 43 53 01 50 4d 43 53 01 5b 80 50 58 43 53 02 PCS.PMCS.[.PXCS. 41e0: 0a 40 0a c0 5b 81 41 05 50 58 43 53 40 00 40 09 .@..[.A.PXCS@.@. 41f0: 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 00 02 ..LASX..2ABPX... 4200: 50 44 43 58 01 00 02 50 44 53 58 01 00 01 4c 53 PDCX...PDSX...LS 4210: 43 58 01 00 27 00 10 50 53 50 58 01 00 4f 3a 00 CX..'..PSPX..O:. 4220: 1e 48 50 45 58 01 50 4d 45 58 01 00 1e 48 50 53 .HPEX.PMEX...HPS 4230: 58 01 50 4d 53 58 01 14 1f 48 50 48 4b 00 70 0a X.PMSX...HPHK.p. 4240: 01 50 44 43 31 70 0a 01 48 50 43 53 70 0a 00 50 .PDC1p..HPCSp..P 4250: 45 4c 44 5b 22 0a fa 14 0f 5f 50 52 57 00 a4 47 ELD["...._PRW..G 4260: 50 52 57 0a 09 0a 04 14 16 5f 50 52 54 00 a0 0a PRW......_PRT... 4270: 50 49 43 4d a4 41 52 30 35 a4 50 52 30 35 5b 82 PICM.AR05.PR05[. 4280: 4e 07 57 4c 41 4e 08 5f 41 44 52 0a 00 14 08 5f N.WLAN._ADR...._ 4290: 52 4d 56 00 a4 00 5b 80 4d 49 4e 50 02 0a 00 0a RMV...[.MINP.... 42a0: 68 5b 81 26 4d 49 4e 50 01 56 4e 55 4d 20 00 28 h[.&MINP.VNUM .( 42b0: 50 49 4e 46 08 53 42 43 43 08 42 53 43 43 08 00 PINF.SBCC.BSCC.. 42c0: 40 10 53 4e 55 4d 20 00 20 14 24 4d 50 44 50 00 @.SNUM . .$MPDP. 42d0: a0 0e 93 53 4e 55 4d 0c ff ff ff ff a4 0a 00 a0 ...SNUM......... 42e0: 0c 92 93 42 53 43 43 0a 02 a4 0a 00 a4 01 14 0f ...BSCC......... 42f0: 5f 50 52 57 00 a4 47 50 52 57 0a 09 0a 03 5b 82 _PRW..GPRW....[. 4300: 42 28 52 50 30 34 08 5f 41 44 52 0c 03 00 1c 00 B(RP04._ADR..... 4310: 5b 80 4c 43 54 4c 02 0a 50 0a 04 5b 81 12 4c 43 [.LCTL..P..[..LC 4320: 54 4c 01 00 04 50 45 4c 44 01 50 45 52 4c 01 5b TL...PELD.PERL.[ 4330: 80 53 4c 4f 54 02 0a 54 0a 10 5b 81 43 04 53 4c .SLOT..T..[.C.SL 4340: 4f 54 01 53 43 41 50 20 53 43 54 4c 10 41 42 50 OT.SCAP SCTL.ABP 4350: 31 01 50 46 44 31 01 4d 53 43 31 01 50 44 43 31 1.PFD1.MSC1.PDC1 4360: 01 43 43 31 30 01 4d 53 31 30 01 50 44 53 31 01 .CC10.MS10.PDS1. 4370: 52 53 56 30 01 4c 41 53 43 01 52 53 56 31 07 5b RSV0.LASC.RSV1.[ 4380: 80 52 48 55 42 02 0a 60 0a 10 5b 81 1a 52 48 55 .RHUB..`..[..RHU 4390: 42 01 50 4d 49 44 10 50 4d 45 53 01 50 4d 45 50 B.PMID.PMES.PMEP 43a0: 01 52 53 56 32 0e 5b 80 4d 49 53 43 02 0a d8 0a .RSV2.[.MISC.... 43b0: 08 5b 81 3d 4d 49 53 43 01 52 53 56 34 1e 50 4d .[.=MISC.RSV4.PM 43c0: 43 45 01 48 50 43 45 01 50 4d 4d 53 01 48 50 50 CE.HPCE.PMMS.HPP 43d0: 44 01 48 50 41 42 01 48 50 43 43 01 48 50 4c 41 D.HPAB.HPCC.HPLA 43e0: 01 52 53 56 33 19 48 50 43 53 01 50 4d 43 53 01 .RSV3.HPCS.PMCS. 43f0: 5b 80 50 58 43 53 02 0a 40 0a c0 5b 81 41 05 50 [.PXCS..@..[.A.P 4400: 58 43 53 40 00 40 09 00 0d 4c 41 53 58 01 00 32 XCS@.@...LASX..2 4410: 41 42 50 58 01 00 02 50 44 43 58 01 00 02 50 44 ABPX...PDCX...PD 4420: 53 58 01 00 01 4c 53 43 58 01 00 27 00 10 50 53 SX...LSCX..'..PS 4430: 50 58 01 00 4f 3a 00 1e 48 50 45 58 01 50 4d 45 PX..O:..HPEX.PME 4440: 58 01 00 1e 48 50 53 58 01 50 4d 53 58 01 14 1f X...HPSX.PMSX... 4450: 48 50 48 4b 00 70 0a 01 50 44 43 31 70 0a 01 48 HPHK.p..PDC1p..H 4460: 50 43 53 70 0a 00 50 45 4c 44 5b 22 0a fa 14 0f PCSp..PELD[".... 4470: 5f 50 52 57 00 a4 47 50 52 57 0a 09 0a 04 14 16 _PRW..GPRW...... 4480: 5f 50 52 54 00 a0 0a 50 49 43 4d a4 41 52 30 37 _PRT...PICM.AR07 4490: a4 50 52 30 37 5b 82 4b 0e 58 48 43 49 08 5f 41 .PR07[.K.XHCI._A 44a0: 44 52 0a 00 5b 80 58 48 50 43 02 0a 00 0b 00 01 DR..[.XHPC...... 44b0: 5b 81 18 58 48 50 43 01 58 48 56 44 20 58 48 30 [..XHPC.XHVD XH0 44c0: 34 08 00 48 05 58 48 31 30 20 08 54 4d 50 30 0a 4..H.XH10 .TMP0. 44d0: 00 08 54 4d 50 31 0a 00 14 09 5f 52 4d 56 00 a4 ..TMP1...._RMV.. 44e0: 0a 00 14 46 04 5f 4f 4e 5f 00 5c 2f 05 5f 53 42 ...F._ON_.\/._SB 44f0: 5f 50 43 49 30 53 42 52 47 45 43 30 5f 53 54 38 _PCI0SBRGEC0_ST8 4500: 37 0a 20 0a 25 5b 22 0a 64 5c 2f 05 5f 53 42 5f 7. .%[".d\/._SB_ 4510: 50 43 49 30 53 42 52 47 45 43 30 5f 53 54 38 37 PCI0SBRGEC0_ST87 4520: 0a 20 0a 45 5b 22 0b e8 03 14 06 5f 49 4e 49 00 . .E["....._INI. 4530: 14 41 04 5f 4f 46 46 00 70 5c 2f 05 5f 53 42 5f .A._OFF.p\/._SB_ 4540: 50 43 49 30 53 42 52 47 45 43 30 5f 53 54 38 37 PCI0SBRGEC0_ST87 4550: 0a 40 0a 45 61 70 5c 2f 05 5f 53 42 5f 50 43 49 .@.Eap\/._SB_PCI 4560: 30 53 42 52 47 45 43 30 5f 53 54 38 37 0a 40 0a 0SBRGEC0_ST87.@. 4570: 25 61 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 09 %a.._PRW..GPRW.. 4580: 0a 03 5b 82 45 19 52 50 30 35 08 5f 41 44 52 0c ..[.E.RP05._ADR. 4590: 04 00 1c 00 5b 80 4c 43 54 4c 02 0a 50 0a 04 5b ....[.LCTL..P..[ 45a0: 81 12 4c 43 54 4c 01 00 04 50 45 4c 44 01 50 45 ..LCTL...PELD.PE 45b0: 52 4c 01 5b 80 53 4c 4f 54 02 0a 54 0a 10 5b 81 RL.[.SLOT..T..[. 45c0: 43 04 53 4c 4f 54 01 53 43 41 50 20 53 43 54 4c C.SLOT.SCAP SCTL 45d0: 10 41 42 50 31 01 50 46 44 31 01 4d 53 43 31 01 .ABP1.PFD1.MSC1. 45e0: 50 44 43 31 01 43 43 31 30 01 4d 53 31 30 01 50 PDC1.CC10.MS10.P 45f0: 44 53 31 01 52 53 56 30 01 4c 41 53 43 01 52 53 DS1.RSV0.LASC.RS 4600: 56 31 07 5b 80 52 48 55 42 02 0a 60 0a 10 5b 81 V1.[.RHUB..`..[. 4610: 1a 52 48 55 42 01 50 4d 49 44 10 50 4d 45 53 01 .RHUB.PMID.PMES. 4620: 50 4d 45 50 01 52 53 56 32 0e 5b 80 4d 49 53 43 PMEP.RSV2.[.MISC 4630: 02 0a d8 0a 08 5b 81 3d 4d 49 53 43 01 52 53 56 .....[.=MISC.RSV 4640: 34 1e 50 4d 43 45 01 48 50 43 45 01 50 4d 4d 53 4.PMCE.HPCE.PMMS 4650: 01 48 50 50 44 01 48 50 41 42 01 48 50 43 43 01 .HPPD.HPAB.HPCC. 4660: 48 50 4c 41 01 52 53 56 33 19 48 50 43 53 01 50 HPLA.RSV3.HPCS.P 4670: 4d 43 53 01 5b 80 50 58 43 53 02 0a 40 0a c0 5b MCS.[.PXCS..@..[ 4680: 81 41 05 50 58 43 53 40 00 40 09 00 0d 4c 41 53 .A.PXCS@.@...LAS 4690: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 46a0: 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 ..PDSX...LSCX..' 46b0: 00 10 50 53 50 58 01 00 4f 3a 00 1e 48 50 45 58 ..PSPX..O:..HPEX 46c0: 01 50 4d 45 58 01 00 1e 48 50 53 58 01 50 4d 53 .PMEX...HPSX.PMS 46d0: 58 01 14 1f 48 50 48 4b 00 70 0a 01 50 44 43 31 X...HPHK.p..PDC1 46e0: 70 0a 01 48 50 43 53 70 0a 00 50 45 4c 44 5b 22 p..HPCSp..PELD[" 46f0: 0a fa 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 09 ...._PRW..GPRW.. 4700: 0a 04 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 ...._PRT...PICM. 4710: 41 52 30 38 a4 50 52 30 38 5b 82 40 1e 52 50 30 AR08.PR08[.@.RP0 4720: 36 08 5f 41 44 52 0c 05 00 1c 00 5b 80 4c 43 54 6._ADR.....[.LCT 4730: 4c 02 0a 50 0a 04 5b 81 12 4c 43 54 4c 01 00 04 L..P..[..LCTL... 4740: 50 45 4c 44 01 50 45 52 4c 01 5b 80 53 4c 4f 54 PELD.PERL.[.SLOT 4750: 02 0a 54 0a 10 5b 81 43 04 53 4c 4f 54 01 53 43 ..T..[.C.SLOT.SC 4760: 41 50 20 53 43 54 4c 10 41 42 50 31 01 50 46 44 AP SCTL.ABP1.PFD 4770: 31 01 4d 53 43 31 01 50 44 43 31 01 43 43 31 30 1.MSC1.PDC1.CC10 4780: 01 4d 53 31 30 01 50 44 53 31 01 52 53 56 30 01 .MS10.PDS1.RSV0. 4790: 4c 41 53 43 01 52 53 56 31 07 5b 80 52 48 55 42 LASC.RSV1.[.RHUB 47a0: 02 0a 60 0a 10 5b 81 1a 52 48 55 42 01 50 4d 49 ..`..[..RHUB.PMI 47b0: 44 10 50 4d 45 53 01 50 4d 45 50 01 52 53 56 32 D.PMES.PMEP.RSV2 47c0: 0e 5b 80 4d 49 53 43 02 0a d8 0a 08 5b 81 3d 4d .[.MISC.....[.=M 47d0: 49 53 43 01 52 53 56 34 1e 50 4d 43 45 01 48 50 ISC.RSV4.PMCE.HP 47e0: 43 45 01 50 4d 4d 53 01 48 50 50 44 01 48 50 41 CE.PMMS.HPPD.HPA 47f0: 42 01 48 50 43 43 01 48 50 4c 41 01 52 53 56 33 B.HPCC.HPLA.RSV3 4800: 19 48 50 43 53 01 50 4d 43 53 01 5b 80 50 58 43 .HPCS.PMCS.[.PXC 4810: 53 02 0a 40 0a c0 5b 81 41 05 50 58 43 53 40 00 S..@..[.A.PXCS@. 4820: 40 09 00 0d 4c 41 53 58 01 00 32 41 42 50 58 01 @...LASX..2ABPX. 4830: 00 02 50 44 43 58 01 00 02 50 44 53 58 01 00 01 ..PDCX...PDSX... 4840: 4c 53 43 58 01 00 27 00 10 50 53 50 58 01 00 4f LSCX..'..PSPX..O 4850: 3a 00 1e 48 50 45 58 01 50 4d 45 58 01 00 1e 48 :..HPEX.PMEX...H 4860: 50 53 58 01 50 4d 53 58 01 14 1f 48 50 48 4b 00 PSX.PMSX...HPHK. 4870: 70 0a 01 50 44 43 31 70 0a 01 48 50 43 53 70 0a p..PDC1p..HPCSp. 4880: 00 50 45 4c 44 5b 22 0a fa 14 0f 5f 50 52 57 00 .PELD["...._PRW. 4890: a4 47 50 52 57 0a 09 0a 04 14 16 5f 50 52 54 00 .GPRW......_PRT. 48a0: a0 0a 50 49 43 4d a4 41 52 30 39 a4 50 52 30 39 ..PICM.AR09.PR09 48b0: 5b 82 49 04 47 4c 41 4e 08 5f 41 44 52 0a 00 14 [.I.GLAN._ADR... 48c0: 08 5f 52 4d 56 00 a4 00 5b 80 4c 41 4e 52 02 0a ._RMV...[.LANR.. 48d0: 00 0b 00 01 5b 81 15 4c 41 4e 52 01 56 49 44 5f ....[..LANR.VID_ 48e0: 10 00 40 6f 00 0f 50 4d 45 53 01 14 0f 5f 50 52 ..@o..PMES..._PR 48f0: 57 00 a4 47 50 52 57 0a 09 0a 04 5b 82 45 19 52 W..GPRW....[.E.R 4900: 50 30 37 08 5f 41 44 52 0c 06 00 1c 00 5b 80 4c P07._ADR.....[.L 4910: 43 54 4c 02 0a 50 0a 04 5b 81 12 4c 43 54 4c 01 CTL..P..[..LCTL. 4920: 00 04 50 45 4c 44 01 50 45 52 4c 01 5b 80 53 4c ..PELD.PERL.[.SL 4930: 4f 54 02 0a 54 0a 10 5b 81 43 04 53 4c 4f 54 01 OT..T..[.C.SLOT. 4940: 53 43 41 50 20 53 43 54 4c 10 41 42 50 31 01 50 SCAP SCTL.ABP1.P 4950: 46 44 31 01 4d 53 43 31 01 50 44 43 31 01 43 43 FD1.MSC1.PDC1.CC 4960: 31 30 01 4d 53 31 30 01 50 44 53 31 01 52 53 56 10.MS10.PDS1.RSV 4970: 30 01 4c 41 53 43 01 52 53 56 31 07 5b 80 52 48 0.LASC.RSV1.[.RH 4980: 55 42 02 0a 60 0a 10 5b 81 1a 52 48 55 42 01 50 UB..`..[..RHUB.P 4990: 4d 49 44 10 50 4d 45 53 01 50 4d 45 50 01 52 53 MID.PMES.PMEP.RS 49a0: 56 32 0e 5b 80 4d 49 53 43 02 0a d8 0a 08 5b 81 V2.[.MISC.....[. 49b0: 3d 4d 49 53 43 01 52 53 56 34 1e 50 4d 43 45 01 =MISC.RSV4.PMCE. 49c0: 48 50 43 45 01 50 4d 4d 53 01 48 50 50 44 01 48 HPCE.PMMS.HPPD.H 49d0: 50 41 42 01 48 50 43 43 01 48 50 4c 41 01 52 53 PAB.HPCC.HPLA.RS 49e0: 56 33 19 48 50 43 53 01 50 4d 43 53 01 5b 80 50 V3.HPCS.PMCS.[.P 49f0: 58 43 53 02 0a 40 0a c0 5b 81 41 05 50 58 43 53 XCS..@..[.A.PXCS 4a00: 40 00 40 09 00 0d 4c 41 53 58 01 00 32 41 42 50 @.@...LASX..2ABP 4a10: 58 01 00 02 50 44 43 58 01 00 02 50 44 53 58 01 X...PDCX...PDSX. 4a20: 00 01 4c 53 43 58 01 00 27 00 10 50 53 50 58 01 ..LSCX..'..PSPX. 4a30: 00 4f 3a 00 1e 48 50 45 58 01 50 4d 45 58 01 00 .O:..HPEX.PMEX.. 4a40: 1e 48 50 53 58 01 50 4d 53 58 01 14 1f 48 50 48 .HPSX.PMSX...HPH 4a50: 4b 00 70 0a 01 50 44 43 31 70 0a 01 48 50 43 53 K.p..PDC1p..HPCS 4a60: 70 0a 00 50 45 4c 44 5b 22 0a fa 14 0f 5f 50 52 p..PELD["...._PR 4a70: 57 00 a4 47 50 52 57 0a 09 0a 04 14 16 5f 50 52 W..GPRW......_PR 4a80: 54 00 a0 0a 50 49 43 4d a4 41 52 30 45 a4 50 52 T...PICM.AR0E.PR 4a90: 30 45 5b 82 45 19 52 50 30 38 08 5f 41 44 52 0c 0E[.E.RP08._ADR. 4aa0: 07 00 1c 00 5b 80 4c 43 54 4c 02 0a 50 0a 04 5b ....[.LCTL..P..[ 4ab0: 81 12 4c 43 54 4c 01 00 04 50 45 4c 44 01 50 45 ..LCTL...PELD.PE 4ac0: 52 4c 01 5b 80 53 4c 4f 54 02 0a 54 0a 10 5b 81 RL.[.SLOT..T..[. 4ad0: 43 04 53 4c 4f 54 01 53 43 41 50 20 53 43 54 4c C.SLOT.SCAP SCTL 4ae0: 10 41 42 50 31 01 50 46 44 31 01 4d 53 43 31 01 .ABP1.PFD1.MSC1. 4af0: 50 44 43 31 01 43 43 31 30 01 4d 53 31 30 01 50 PDC1.CC10.MS10.P 4b00: 44 53 31 01 52 53 56 30 01 4c 41 53 43 01 52 53 DS1.RSV0.LASC.RS 4b10: 56 31 07 5b 80 52 48 55 42 02 0a 60 0a 10 5b 81 V1.[.RHUB..`..[. 4b20: 1a 52 48 55 42 01 50 4d 49 44 10 50 4d 45 53 01 .RHUB.PMID.PMES. 4b30: 50 4d 45 50 01 52 53 56 32 0e 5b 80 4d 49 53 43 PMEP.RSV2.[.MISC 4b40: 02 0a d8 0a 08 5b 81 3d 4d 49 53 43 01 52 53 56 .....[.=MISC.RSV 4b50: 34 1e 50 4d 43 45 01 48 50 43 45 01 50 4d 4d 53 4.PMCE.HPCE.PMMS 4b60: 01 48 50 50 44 01 48 50 41 42 01 48 50 43 43 01 .HPPD.HPAB.HPCC. 4b70: 48 50 4c 41 01 52 53 56 33 19 48 50 43 53 01 50 HPLA.RSV3.HPCS.P 4b80: 4d 43 53 01 5b 80 50 58 43 53 02 0a 40 0a c0 5b MCS.[.PXCS..@..[ 4b90: 81 41 05 50 58 43 53 40 00 40 09 00 0d 4c 41 53 .A.PXCS@.@...LAS 4ba0: 58 01 00 32 41 42 50 58 01 00 02 50 44 43 58 01 X..2ABPX...PDCX. 4bb0: 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 00 27 ..PDSX...LSCX..' 4bc0: 00 10 50 53 50 58 01 00 4f 3a 00 1e 48 50 45 58 ..PSPX..O:..HPEX 4bd0: 01 50 4d 45 58 01 00 1e 48 50 53 58 01 50 4d 53 .PMEX...HPSX.PMS 4be0: 58 01 14 1f 48 50 48 4b 00 70 0a 01 50 44 43 31 X...HPHK.p..PDC1 4bf0: 70 0a 01 48 50 43 53 70 0a 00 50 45 4c 44 5b 22 p..HPCSp..PELD[" 4c00: 0a fa 14 0f 5f 50 52 57 00 a4 47 50 52 57 0a 09 ...._PRW..GPRW.. 4c10: 0a 04 14 16 5f 50 52 54 00 a0 0a 50 49 43 4d a4 ...._PRT...PICM. 4c20: 41 52 30 46 a4 50 52 30 46 5b 82 89 ed 01 47 46 AR0F.PR0F[....GF 4c30: 58 30 08 5f 41 44 52 0c 00 00 02 00 5b 80 56 53 X0._ADR.....[.VS 4c40: 49 44 02 0a 00 0a 04 5b 81 0b 56 53 49 44 01 52 ID.....[..VSID.R 4c50: 45 47 30 20 08 50 43 54 47 12 02 0b 10 28 5c 2e EG0 .PCTG....(\. 4c60: 5f 53 42 5f 50 43 49 30 5b 80 4d 43 48 50 02 0a _SB_PCI0[.MCHP.. 4c70: 40 0a c0 5b 81 10 4d 43 48 50 00 00 40 30 54 41 @..[..MCHP..@0TA 4c80: 53 4d 0a 00 06 5b 80 49 47 44 50 02 0a 40 0a c0 SM...[.IGDP..@.. 4c90: 5b 81 45 05 49 47 44 50 00 00 40 09 00 01 47 49 [.E.IGDP..@...GI 4ca0: 56 44 01 00 02 47 55 4d 41 03 00 09 00 04 47 4d VD...GUMA.....GM 4cb0: 46 4e 01 00 1b 00 40 46 41 53 4c 45 08 00 18 47 FN....@FASLE...G 4cc0: 53 53 45 01 47 53 53 42 0e 47 53 45 53 01 00 30 SSE.GSSB.GSES..0 4cd0: 00 0c 43 44 56 4c 01 00 03 00 18 4c 42 50 43 08 ..CDVL.....LBPC. 4ce0: 00 30 41 53 4c 53 20 5b 80 49 47 44 4d 00 41 53 .0ASLS [.IGDM.AS 4cf0: 4c 42 0b 00 20 5b 81 48 19 49 47 44 4d 00 53 49 LB.. [.H.IGDM.SI 4d00: 47 4e 40 08 53 49 5a 45 20 4f 56 45 52 20 53 56 GN@.SIZE OVER SV 4d10: 45 52 40 10 56 56 45 52 40 08 47 56 45 52 40 08 ER@.VVER@.GVER@. 4d20: 4d 42 4f 58 20 44 4d 4f 44 20 00 40 50 44 52 44 MBOX DMOD .@PDRD 4d30: 59 20 43 53 54 53 20 43 45 56 54 20 00 40 0a 44 Y CSTS CEVT .@.D 4d40: 49 44 4c 20 44 44 4c 32 20 44 44 4c 33 20 44 44 IDL DDL2 DDL3 DD 4d50: 4c 34 20 44 44 4c 35 20 44 44 4c 36 20 44 44 4c L4 DDL5 DDL6 DDL 4d60: 37 20 44 44 4c 38 20 43 50 44 4c 20 43 50 4c 32 7 DDL8 CPDL CPL2 4d70: 20 43 50 4c 33 20 43 50 4c 34 20 43 50 4c 35 20 CPL3 CPL4 CPL5 4d80: 43 50 4c 36 20 43 50 4c 37 20 43 50 4c 38 20 43 CPL6 CPL7 CPL8 C 4d90: 41 44 4c 20 43 41 4c 32 20 43 41 4c 33 20 43 41 ADL CAL2 CAL3 CA 4da0: 4c 34 20 43 41 4c 35 20 43 41 4c 36 20 43 41 4c L4 CAL5 CAL6 CAL 4db0: 37 20 43 41 4c 38 20 4e 41 44 4c 20 4e 44 4c 32 7 CAL8 NADL NDL2 4dc0: 20 4e 44 4c 33 20 4e 44 4c 34 20 4e 44 4c 35 20 NDL3 NDL4 NDL5 4dd0: 4e 44 4c 36 20 4e 44 4c 37 20 4e 44 4c 38 20 41 NDL6 NDL7 NDL8 A 4de0: 53 4c 50 20 54 49 44 58 20 43 48 50 44 20 43 4c SLP TIDX CHPD CL 4df0: 49 44 20 43 44 43 4b 20 53 58 53 57 20 45 56 54 ID CDCK SXSW EVT 4e00: 53 20 43 4e 4f 54 20 4e 52 44 59 20 00 40 1e 53 S CNOT NRDY .@.S 4e10: 43 49 45 01 47 45 46 43 04 47 58 46 43 03 47 45 CIE.GEFC.GXFC.GE 4e20: 53 46 08 00 10 50 41 52 4d 20 44 53 4c 50 20 00 SF...PARM DSLP . 4e30: 40 7a 41 52 44 59 20 41 53 4c 43 20 54 43 48 45 @zARDY ASLC TCHE 4e40: 20 41 4c 53 49 20 42 43 4c 50 20 50 46 49 54 20 ALSI BCLP PFIT 4e50: 43 42 4c 56 20 42 43 4c 4d 40 14 43 50 46 4d 20 CBLV BCLM@.CPFM 4e60: 45 50 46 4d 20 50 4c 55 54 40 25 50 46 4d 42 20 EPFM PLUT@%PFMB 4e70: 43 43 44 56 20 50 43 46 54 20 00 40 2f 47 56 44 CCDV PCFT .@/GVD 4e80: 31 80 00 0c 50 48 45 44 20 42 44 44 43 40 80 08 1...PHED BDDC@.. 4e90: 44 42 54 42 12 38 15 0a 00 0a 07 0a 38 0b c0 01 DBTB.8......8... 4ea0: 0b 00 0e 0a 3f 0b c7 01 0b 07 0e 0b f8 01 0b 38 ....?..........8 4eb0: 0e 0b c0 0f 0a 00 0a 00 0a 00 0a 00 0a 00 0b 00 ................ 4ec0: 70 0b 07 70 0b 38 70 0b c0 71 0b 00 7e 08 43 44 p..p.8p..q..~.CD 4ed0: 43 54 12 29 05 12 07 02 0a e4 0b 40 01 12 07 02 CT.).......@.... 4ee0: 0a de 0b 4d 01 12 07 02 0a de 0b 4d 01 12 06 02 ...M.......M.... 4ef0: 0a 00 0a 00 12 07 02 0a de 0b 4d 01 08 53 55 43 ..........M..SUC 4f00: 43 0a 01 08 4e 56 4c 44 0a 02 08 43 52 49 54 0a C...NVLD...CRIT. 4f10: 04 08 4e 43 52 54 0a 06 14 4e 51 47 53 43 49 08 ..NCRT...NQGSCI. 4f20: 14 42 1f 47 42 44 41 08 a0 1b 93 47 45 53 46 0a .B.GBDA....GESF. 4f30: 00 70 0b 79 06 50 41 52 4d 70 00 47 45 53 46 a4 .p.y.PARMp.GESF. 4f40: 53 55 43 43 a0 1b 93 47 45 53 46 0a 01 70 0b 40 SUCC...GESF..p.@ 4f50: 02 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 .PARMp.GESF.SUCC 4f60: a0 47 04 93 47 45 53 46 0a 04 7b 50 41 52 4d 0c .G..GESF..{PARM. 4f70: 00 00 ff ef 50 41 52 4d 7b 50 41 52 4d 79 83 88 ....PARM{PARMy.. 4f80: 44 42 54 42 49 42 54 54 00 0a 10 00 50 41 52 4d DBTBIBTT....PARM 4f90: 7d 49 42 54 54 50 41 52 4d 50 41 52 4d 70 00 47 }IBTTPARMPARMp.G 4fa0: 45 53 46 a4 53 55 43 43 a0 4a 06 93 47 45 53 46 ESF.SUCC.J..GESF 4fb0: 0a 05 70 49 50 53 43 50 41 52 4d 7d 50 41 52 4d ..pIPSCPARM}PARM 4fc0: 79 49 50 41 54 0a 08 00 50 41 52 4d 72 50 41 52 yIPAT...PARMrPAR 4fd0: 4d 0b 00 01 50 41 52 4d 7d 50 41 52 4d 79 4c 49 M...PARM}PARMyLI 4fe0: 44 53 0a 10 00 50 41 52 4d 72 50 41 52 4d 0c 00 DS...PARMrPARM.. 4ff0: 00 01 00 50 41 52 4d 7d 50 41 52 4d 79 49 42 49 ...PARM}PARMyIBI 5000: 41 0a 14 00 50 41 52 4d 70 00 47 45 53 46 a4 53 A...PARMp.GESF.S 5010: 55 43 43 a0 2d 93 47 45 53 46 0a 06 70 49 54 56 UCC.-.GESF..pITV 5020: 46 50 41 52 4d 7d 50 41 52 4d 79 49 54 56 4d 0a FPARM}PARMyITVM. 5030: 04 00 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 ..PARMp.GESF.SUC 5040: 43 a0 49 07 93 47 45 53 46 0a 07 70 47 49 56 44 C.I..GESF..pGIVD 5050: 50 41 52 4d 7f 50 41 52 4d 0a 01 50 41 52 4d 7d PARM.PARM..PARM} 5060: 50 41 52 4d 79 47 4d 46 4e 0a 01 00 50 41 52 4d PARMyGMFN...PARM 5070: 7d 50 41 52 4d 79 0a 03 0a 0b 00 50 41 52 4d 7d }PARMy.....PARM} 5080: 50 41 52 4d 79 49 44 4d 53 0a 11 00 50 41 52 4d PARMyIDMS...PARM 5090: 7d 79 83 88 83 88 43 44 43 54 48 56 43 4f 00 43 }y....CDCTHVCO.C 50a0: 44 56 4c 00 0a 15 00 50 41 52 4d 50 41 52 4d 70 DVL....PARMPARMp 50b0: 0a 01 47 45 53 46 a4 53 55 43 43 a0 2c 93 47 45 ..GESF.SUCC.,.GE 50c0: 53 46 0a 0a 70 0a 00 50 41 52 4d a0 10 49 53 53 SF..p..PARM..ISS 50d0: 43 7d 50 41 52 4d 0a 03 50 41 52 4d 70 0a 00 47 C}PARM..PARMp..G 50e0: 45 53 46 a4 53 55 43 43 a0 1f 93 47 45 53 46 0a ESF.SUCC...GESF. 50f0: 0b 70 4b 53 56 30 50 41 52 4d 70 4b 53 56 31 47 .pKSV0PARMpKSV1G 5100: 45 53 46 a4 53 55 43 43 70 00 47 45 53 46 a4 43 ESF.SUCCp.GESF.C 5110: 52 49 54 14 41 2e 53 42 43 42 08 a0 24 93 47 45 RIT.A.SBCB..$.GE 5120: 53 46 0a 00 70 0a 00 50 41 52 4d 70 0c fd 87 0f SF..p..PARMp.... 5130: 00 50 41 52 4d 70 00 47 45 53 46 a4 53 55 43 43 .PARMp.GESF.SUCC 5140: a0 19 93 47 45 53 46 0a 01 70 00 47 45 53 46 70 ...GESF..p.GESFp 5150: 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 53 .PARM.SUCC...GES 5160: 46 0a 03 70 00 47 45 53 46 70 00 50 41 52 4d a4 F..p.GESFp.PARM. 5170: 53 55 43 43 a0 19 93 47 45 53 46 0a 04 70 00 47 SUCC...GESF..p.G 5180: 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 19 ESFp.PARM.SUCC.. 5190: 93 47 45 53 46 0a 05 70 00 47 45 53 46 70 00 50 .GESF..p.GESFp.P 51a0: 41 52 4d a4 53 55 43 43 a0 37 93 47 45 53 46 0a ARM.SUCC.7.GESF. 51b0: 06 70 7b 50 41 52 4d 0a 0f 00 49 54 56 46 70 7a .p{PARM...ITVFpz 51c0: 7b 50 41 52 4d 0a f0 00 0a 04 00 49 54 56 4d 70 {PARM......ITVMp 51d0: 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 .GESFp.PARM.SUCC 51e0: a0 46 04 93 47 45 53 46 0a 07 a0 2b 93 50 41 52 .F..GESF...+.PAR 51f0: 4d 0a 00 70 43 4c 49 44 60 a0 1c 7b 0c 00 00 00 M..pCLID`..{.... 5200: 80 60 00 7b 43 4c 49 44 0a 0f 43 4c 49 44 47 4c .`.{CLID..CLIDGL 5210: 49 44 43 4c 49 44 70 00 47 45 53 46 70 00 50 41 IDCLIDp.GESFp.PA 5220: 52 4d a4 53 55 43 43 a0 19 93 47 45 53 46 0a 08 RM.SUCC...GESF.. 5230: 70 00 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 p.GESFp.PARM.SUC 5240: 43 a0 24 93 47 45 53 46 0a 09 7b 50 41 52 4d 0a C.$.GESF..{PARM. 5250: ff 49 42 54 54 70 00 47 45 53 46 70 00 50 41 52 .IBTTp.GESFp.PAR 5260: 4d a4 53 55 43 43 a0 46 05 93 47 45 53 46 0a 0a M.SUCC.F..GESF.. 5270: 7b 50 41 52 4d 0a ff 49 50 53 43 a0 21 7b 7a 50 {PARM..IPSC.!{zP 5280: 41 52 4d 0a 08 00 0a ff 00 7b 7a 50 41 52 4d 0a ARM......{zPARM. 5290: 08 00 0a ff 49 50 41 54 76 49 50 41 54 7b 7a 50 ....IPATvIPAT{zP 52a0: 41 52 4d 0a 14 00 0a 07 49 42 49 41 70 00 47 45 ARM.....IBIAp.GE 52b0: 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 47 05 SFp.PARM.SUCC.G. 52c0: 93 47 45 53 46 0a 0b 7b 7a 50 41 52 4d 0a 01 00 .GESF..{zPARM... 52d0: 0a 01 49 46 31 45 a0 1c 7b 50 41 52 4d 79 0a 0f ..IF1E..{PARMy.. 52e0: 0a 0d 00 00 7b 7a 50 41 52 4d 0a 0d 00 0a 0f 49 ....{zPARM.....I 52f0: 44 4d 53 a1 10 7b 7a 50 41 52 4d 0a 11 00 0a 0f DMS..{zPARM..... 5300: 49 44 4d 53 70 00 47 45 53 46 70 00 50 41 52 4d IDMSp.GESFp.PARM 5310: a4 53 55 43 43 a0 19 93 47 45 53 46 0a 10 70 00 .SUCC...GESF..p. 5320: 47 45 53 46 70 00 50 41 52 4d a4 53 55 43 43 a0 GESFp.PARM.SUCC. 5330: 2c 93 47 45 53 46 0a 11 70 79 4c 49 44 53 0a 08 ,.GESF..pyLIDS.. 5340: 00 50 41 52 4d 72 50 41 52 4d 0b 00 01 50 41 52 .PARMrPARM...PAR 5350: 4d 70 00 47 45 53 46 a4 53 55 43 43 a0 4e 04 93 Mp.GESF.SUCC.N.. 5360: 47 45 53 46 0a 12 a0 2a 7b 50 41 52 4d 0a 01 00 GESF...*{PARM... 5370: a0 13 93 7a 50 41 52 4d 0a 01 00 0a 01 70 0a 01 ...zPARM.....p.. 5380: 49 53 53 43 a1 0c 70 00 47 45 53 46 a4 43 52 49 ISSC..p.GESF.CRI 5390: 54 a1 08 70 0a 00 49 53 53 43 70 00 47 45 53 46 T..p..ISSCp.GESF 53a0: 70 00 50 41 52 4d a4 53 55 43 43 a0 19 93 47 45 p.PARM.SUCC...GE 53b0: 53 46 0a 13 70 00 47 45 53 46 70 00 50 41 52 4d SF..p.GESFp.PARM 53c0: a4 53 55 43 43 a0 24 93 47 45 53 46 0a 14 7b 50 .SUCC.$.GESF..{P 53d0: 41 52 4d 0a 0f 50 41 56 50 70 00 47 45 53 46 70 ARM..PAVPp.GESFp 53e0: 00 50 41 52 4d a4 53 55 43 43 70 00 47 45 53 46 .PARM.SUCCp.GESF 53f0: a4 53 55 43 43 a0 11 93 47 45 46 43 0a 04 70 47 .SUCC...GEFC..pG 5400: 42 44 41 47 58 46 43 a0 11 93 47 45 46 43 0a 06 BDAGXFC...GEFC.. 5410: 70 53 42 43 42 47 58 46 43 70 0a 00 47 45 46 43 pSBCBGXFCp..GEFC 5420: 70 0a 01 53 43 49 53 70 0a 00 47 53 53 45 70 0a p..SCISp..GSSEp. 5430: 00 53 43 49 45 a4 00 14 19 50 44 52 44 00 a0 0c .SCIE....PDRD... 5440: 92 44 52 44 59 5b 22 41 53 4c 50 a4 92 44 52 44 .DRDY["ASLP..DRD 5450: 59 14 1d 50 53 54 53 00 a0 0e 94 43 53 54 53 0a Y..PSTS....CSTS. 5460: 02 5b 22 41 53 4c 50 a4 93 43 53 54 53 0a 03 14 .["ASLP..CSTS... 5470: 42 08 47 4e 4f 54 02 a0 08 50 44 52 44 a4 0a 01 B.GNOT...PDRD... 5480: 70 68 43 45 56 54 70 0a 03 43 53 54 53 a0 3f 90 phCEVTp..CSTS.?. 5490: 93 43 48 50 44 0a 00 93 69 0a 00 a0 1e 91 94 4f .CHPD...i......O 54a0: 53 59 53 0b d0 07 95 4f 53 59 53 0b d6 07 86 5c SYS....OSYS....\ 54b0: 2e 5f 53 42 5f 50 43 49 30 69 a1 12 86 5c 2f 03 ._SB_PCI0i...\/. 54c0: 5f 53 42 5f 50 43 49 30 47 46 58 30 69 a0 0d 5b _SB_PCI0GFX0i..[ 54d0: 12 48 4e 4f 54 00 48 4e 4f 54 68 a1 13 86 5c 2f .HNOT.HNOTh...\/ 54e0: 03 5f 53 42 5f 50 43 49 30 47 46 58 30 0a 80 a4 ._SB_PCI0GFX0... 54f0: 0a 00 14 15 47 48 44 53 01 70 68 54 49 44 58 a4 ....GHDS.phTIDX. 5500: 47 4e 4f 54 0a 01 0a 00 14 15 47 4c 49 44 01 70 GNOT......GLID.p 5510: 68 43 4c 49 44 a4 47 4e 4f 54 0a 02 0a 00 14 15 hCLID.GNOT...... 5520: 47 44 43 4b 01 70 68 43 44 43 4b a4 47 4e 4f 54 GDCK.phCDCK.GNOT 5530: 0a 04 0a 00 14 19 50 41 52 44 00 a0 0c 92 41 52 ......PARD....AR 5540: 44 59 5b 22 41 53 4c 50 a4 92 41 52 44 59 14 49 DY["ASLP..ARDY.I 5550: 13 41 49 4e 54 02 a0 10 92 7b 54 43 48 45 79 0a .AINT....{TCHEy. 5560: 01 68 00 00 a4 0a 01 a0 08 50 41 52 44 a4 0a 01 .h.......PARD... 5570: a0 46 0c 93 68 0a 02 a0 4d 09 43 50 46 4d 7b 43 .F..h...M.CPFM{C 5580: 50 46 4d 0a 0f 60 7b 45 50 46 4d 0a 0f 61 a0 2c PFM..`{EPFM..a., 5590: 93 60 0a 01 a0 0d 7b 61 0a 06 00 70 0a 06 50 46 .`....{a...p..PF 55a0: 49 54 a1 18 a0 0d 7b 61 0a 08 00 70 0a 08 50 46 IT....{a...p..PF 55b0: 49 54 a1 08 70 0a 01 50 46 49 54 a0 2c 93 60 0a IT..p..PFIT.,.`. 55c0: 06 a0 0d 7b 61 0a 08 00 70 0a 08 50 46 49 54 a1 ...{a...p..PFIT. 55d0: 18 a0 0d 7b 61 0a 01 00 70 0a 01 50 46 49 54 a1 ...{a...p..PFIT. 55e0: 08 70 0a 06 50 46 49 54 a0 2c 93 60 0a 08 a0 0d .p..PFIT.,.`.... 55f0: 7b 61 0a 01 00 70 0a 01 50 46 49 54 a1 18 a0 0d {a...p..PFIT.... 5600: 7b 61 0a 06 00 70 0a 06 50 46 49 54 a1 08 70 0a {a...p..PFIT..p. 5610: 08 50 46 49 54 a1 0c 7f 50 46 49 54 0a 07 50 46 .PFIT...PFIT..PF 5620: 49 54 7d 50 46 49 54 0c 00 00 00 80 50 46 49 54 IT}PFIT.....PFIT 5630: 70 0a 04 41 53 4c 43 a1 46 04 a0 29 93 68 0a 01 p..ASLC.F..).h.. 5640: 70 78 77 69 0a ff 00 0a 64 00 00 42 43 4c 50 7d pxwi....d..BCLP} 5650: 42 43 4c 50 0c 00 00 00 80 42 43 4c 50 70 0a 02 BCLP.....BCLPp.. 5660: 41 53 4c 43 a1 19 a0 12 93 68 0a 00 70 69 41 4c ASLC.....h..piAL 5670: 53 49 70 0a 01 41 53 4c 43 a1 04 a4 0a 01 70 0a SIp..ASLC.....p. 5680: 01 41 53 4c 45 a4 0a 00 14 19 53 43 49 50 00 a0 .ASLE.....SCIP.. 5690: 0f 92 93 4f 56 45 52 0a 00 a4 92 47 53 4d 49 a4 ...OVER....GSMI. 56a0: 0a 00 08 4f 50 42 53 0c 00 ff ff ff 14 25 4f 50 ...OPBS......%OP 56b0: 54 53 01 a0 1e 7b 5c 2e 5f 53 42 5f 56 47 41 46 TS...{\._SB_VGAF 56c0: 0a 01 00 a0 0e 93 68 0a 03 70 41 53 4c 53 4f 50 ......h..pASLSOP 56d0: 42 53 14 43 04 4f 57 41 4b 01 a0 3b 7b 5c 2e 5f BS.C.OWAK..;{\._ 56e0: 53 42 5f 56 47 41 46 0a 01 00 a0 15 93 68 0a 03 SB_VGAF......h.. 56f0: 70 4f 50 42 53 41 53 4c 53 70 0a 01 47 53 45 53 pOPBSASLSp..GSES 5700: 70 0a 01 5c 2f 04 5f 53 42 5f 50 43 49 30 47 46 p..\/._SB_PCI0GF 5710: 58 30 43 4c 49 44 14 4e 14 4f 47 43 44 00 a0 19 X0CLID.N.OGCD... 5720: 93 43 41 44 4c 0a 00 70 4c 43 44 4d 5c 2e 5f 53 .CADL..pLCDM\._S 5730: 42 5f 43 53 54 45 a4 00 70 4f 41 32 44 43 41 44 B_CSTE..pOA2DCAD 5740: 4c 5c 2e 5f 53 42 5f 43 53 54 45 a0 0a 93 43 41 L\._SB_CSTE...CA 5750: 4c 32 0a 00 a4 00 7d 4f 41 32 44 43 41 4c 32 5c L2....}OA2DCAL2\ 5760: 2e 5f 53 42 5f 43 53 54 45 5c 2e 5f 53 42 5f 43 ._SB_CSTE\._SB_C 5770: 53 54 45 a0 0a 93 43 41 4c 33 0a 00 a4 00 7d 4f STE...CAL3....}O 5780: 41 32 44 43 41 4c 33 5c 2e 5f 53 42 5f 43 53 54 A2DCAL3\._SB_CST 5790: 45 5c 2e 5f 53 42 5f 43 53 54 45 a0 0a 93 43 41 E\._SB_CSTE...CA 57a0: 4c 34 0a 00 a4 00 7d 4f 41 32 44 43 41 4c 34 5c L4....}OA2DCAL4\ 57b0: 2e 5f 53 42 5f 43 53 54 45 5c 2e 5f 53 42 5f 43 ._SB_CSTE\._SB_C 57c0: 53 54 45 a0 0a 93 43 41 4c 35 0a 00 a4 00 7d 4f STE...CAL5....}O 57d0: 41 32 44 43 41 4c 35 5c 2e 5f 53 42 5f 43 53 54 A2DCAL5\._SB_CST 57e0: 45 5c 2e 5f 53 42 5f 43 53 54 45 a0 0a 93 43 41 E\._SB_CSTE...CA 57f0: 4c 36 0a 00 a4 00 7d 4f 41 32 44 43 41 4c 36 5c L6....}OA2DCAL6\ 5800: 2e 5f 53 42 5f 43 53 54 45 5c 2e 5f 53 42 5f 43 ._SB_CSTE\._SB_C 5810: 53 54 45 a0 0a 93 43 41 4c 37 0a 00 a4 00 7d 4f STE...CAL7....}O 5820: 41 32 44 43 41 4c 37 5c 2e 5f 53 42 5f 43 53 54 A2DCAL7\._SB_CST 5830: 45 5c 2e 5f 53 42 5f 43 53 54 45 a0 0a 93 43 41 E\._SB_CSTE...CA 5840: 4c 38 0a 00 a4 00 7d 4f 41 32 44 43 41 4c 38 5c L8....}OA2DCAL8\ 5850: 2e 5f 53 42 5f 43 53 54 45 5c 2e 5f 53 42 5f 43 ._SB_CSTE\._SB_C 5860: 53 54 45 a4 00 14 42 15 4f 47 43 41 00 53 44 54 STE...B.OGCA.SDT 5870: 50 a0 19 93 43 50 44 4c 0a 00 70 4c 43 44 4d 5c P...CPDL..pLCDM\ 5880: 2e 5f 53 42 5f 43 41 44 4c a4 00 70 4f 41 32 44 ._SB_CADL..pOA2D 5890: 43 50 44 4c 5c 2e 5f 53 42 5f 43 41 44 4c a0 0a CPDL\._SB_CADL.. 58a0: 93 43 50 4c 32 0a 00 a4 00 7d 4f 41 32 44 43 50 .CPL2....}OA2DCP 58b0: 4c 32 5c 2e 5f 53 42 5f 43 41 44 4c 5c 2e 5f 53 L2\._SB_CADL\._S 58c0: 42 5f 43 41 44 4c a0 0a 93 43 50 4c 33 0a 00 a4 B_CADL...CPL3... 58d0: 00 7d 4f 41 32 44 43 50 4c 33 5c 2e 5f 53 42 5f .}OA2DCPL3\._SB_ 58e0: 43 41 44 4c 5c 2e 5f 53 42 5f 43 41 44 4c a0 0a CADL\._SB_CADL.. 58f0: 93 43 50 4c 34 0a 00 a4 00 7d 4f 41 32 44 43 50 .CPL4....}OA2DCP 5900: 4c 34 5c 2e 5f 53 42 5f 43 41 44 4c 5c 2e 5f 53 L4\._SB_CADL\._S 5910: 42 5f 43 41 44 4c a0 0a 93 43 50 4c 35 0a 00 a4 B_CADL...CPL5... 5920: 00 7d 4f 41 32 44 43 50 4c 35 5c 2e 5f 53 42 5f .}OA2DCPL5\._SB_ 5930: 43 41 44 4c 5c 2e 5f 53 42 5f 43 41 44 4c a0 0a CADL\._SB_CADL.. 5940: 93 43 50 4c 36 0a 00 a4 00 7d 4f 41 32 44 43 50 .CPL6....}OA2DCP 5950: 4c 36 5c 2e 5f 53 42 5f 43 41 44 4c 5c 2e 5f 53 L6\._SB_CADL\._S 5960: 42 5f 43 41 44 4c a0 0a 93 43 50 4c 37 0a 00 a4 B_CADL...CPL7... 5970: 00 7d 4f 41 32 44 43 50 4c 37 5c 2e 5f 53 42 5f .}OA2DCPL7\._SB_ 5980: 43 41 44 4c 5c 2e 5f 53 42 5f 43 41 44 4c a0 0a CADL\._SB_CADL.. 5990: 93 43 50 4c 38 0a 00 a4 00 7d 4f 41 32 44 43 50 .CPL8....}OA2DCP 59a0: 4c 38 5c 2e 5f 53 42 5f 43 41 44 4c 5c 2e 5f 53 L8\._SB_CADL\._S 59b0: 42 5f 43 41 44 4c a4 00 14 46 06 4f 41 32 44 01 B_CADL...F.OA2D. 59c0: 70 00 60 a0 0e 93 68 4c 46 49 44 7d 60 4c 43 44 p.`...hLFID}`LCD 59d0: 4d 60 a0 0e 93 68 43 52 49 44 7d 60 43 52 54 4d M`...hCRID}`CRTM 59e0: 60 a0 0e 93 68 54 56 49 44 7d 60 54 56 4f 4d 60 `...hTVID}`TVOM` 59f0: a0 0e 93 68 48 44 49 44 7d 60 48 44 4d 4d 60 a0 ...hHDID}`HDMM`. 5a00: 0e 93 68 44 56 49 44 7d 60 44 56 49 4d 60 a0 0e ..hDVID}`DVIM`.. 5a10: 93 68 44 50 49 44 7d 60 44 50 4f 4d 60 a4 60 08 .hDPID}`DPOM`.`. 5a20: 44 44 49 44 0a 00 14 46 0a 57 4e 44 44 01 70 47 DDID...F.WNDD.pG 5a30: 44 49 44 68 44 44 49 44 70 44 44 49 44 4e 41 44 DIDhDDIDpDDIDNAD 5a40: 4c 70 47 44 49 44 68 44 44 49 44 70 44 44 49 44 LpGDIDhDDIDpDDID 5a50: 4e 44 4c 32 70 47 44 49 44 68 44 44 49 44 70 44 NDL2pGDIDhDDIDpD 5a60: 44 49 44 4e 44 4c 33 70 47 44 49 44 68 44 44 49 DIDNDL3pGDIDhDDI 5a70: 44 70 44 44 49 44 4e 44 4c 34 70 47 44 49 44 68 DpDDIDNDL4pGDIDh 5a80: 44 44 49 44 70 44 44 49 44 4e 44 4c 35 70 47 44 DDIDpDDIDNDL5pGD 5a90: 49 44 68 44 44 49 44 70 44 44 49 44 4e 44 4c 36 IDhDDIDpDDIDNDL6 5aa0: 70 47 44 49 44 68 44 44 49 44 70 44 44 49 44 4e pGDIDhDDIDpDDIDN 5ab0: 44 4c 37 70 47 44 49 44 68 44 44 49 44 70 44 44 DL7pGDIDhDDIDpDD 5ac0: 49 44 4e 44 4c 38 70 0a 00 43 4f 4e 54 08 43 4f IDNDL8p..CONT.CO 5ad0: 4e 54 0a 00 14 45 08 47 44 49 44 01 a2 4a 07 95 NT...E.GDID..J.. 5ae0: 43 4f 4e 54 0a 08 70 0a 01 60 79 60 43 4f 4e 54 CONT..p..`y`CONT 5af0: 60 7b 5c 2e 5f 53 42 5f 4e 53 54 45 60 61 75 43 `{\._SB_NSTE`auC 5b00: 4f 4e 54 a0 0d 7b 61 4c 43 44 4d 00 a4 4c 46 49 ONT..{aLCDM..LFI 5b10: 44 a0 0d 7b 61 43 52 54 4d 00 a4 43 52 49 44 a0 D..{aCRTM..CRID. 5b20: 0d 7b 61 54 56 4f 4d 00 a4 54 56 49 44 a0 0d 7b .{aTVOM..TVID..{ 5b30: 61 48 44 4d 4d 00 a4 48 44 49 44 a0 0d 7b 61 44 aHDMM..HDID..{aD 5b40: 56 49 4d 00 a4 44 56 49 44 a0 0d 7b 61 44 50 4f VIM..DVID..{aDPO 5b50: 4d 00 a4 44 50 49 44 a4 0a 00 08 4c 46 49 44 0c M..DPID....LFID. 5b60: ff ff ff ff 08 43 52 49 44 0c ff ff ff ff 08 54 .....CRID......T 5b70: 56 49 44 0c ff ff ff ff 08 44 50 49 44 0c ff ff VID......DPID... 5b80: ff ff 08 48 44 49 44 0c ff ff ff ff 08 44 56 49 ...HDID......DVI 5b90: 44 0c ff ff ff ff 14 41 04 47 44 54 50 01 7b 68 D......A.GDTP.{h 5ba0: 0b 00 0f 60 a0 0c 93 60 0b 00 01 70 68 43 52 49 ...`...`...phCRI 5bb0: 44 a0 0c 93 60 0b 00 02 70 68 54 56 49 44 a0 0c D...`...phTVID.. 5bc0: 93 60 0b 00 04 70 68 4c 46 49 44 a0 0c 93 68 0b .`...phLFID...h. 5bd0: 00 03 70 68 48 44 49 44 14 47 04 53 44 54 50 00 ..phHDID.G.SDTP. 5be0: 47 44 54 50 43 50 44 4c 47 44 54 50 43 50 4c 32 GDTPCPDLGDTPCPL2 5bf0: 47 44 54 50 43 50 4c 33 47 44 54 50 43 50 4c 34 GDTPCPL3GDTPCPL4 5c00: 47 44 54 50 43 50 4c 35 47 44 54 50 43 50 4c 36 GDTPCPL5GDTPCPL6 5c10: 47 44 54 50 43 50 4c 37 47 44 54 50 43 50 4c 38 GDTPCPL7GDTPCPL8 5c20: 14 18 50 52 53 54 00 a0 0d 93 52 45 47 30 0c ff ..PRST....REG0.. 5c30: ff ff ff a4 00 a1 03 a4 01 08 4c 43 44 4d 0b 08 ..........LCDM.. 5c40: 08 08 43 52 54 4d 0b 01 01 08 54 56 4f 4d 0b 02 ..CRTM....TVOM.. 5c50: 02 08 48 44 4d 4d 0b 04 04 08 44 56 49 4d 0b 40 ..HDMM....DVIM.@ 5c60: 40 08 44 50 4f 4d 0b 80 80 08 44 4f 53 46 01 08 @.DPOM....DOSF.. 5c70: 42 52 4e 43 00 08 55 50 44 4e 01 08 4e 58 54 44 BRNC..UPDN..NXTD 5c80: 0a 01 14 49 06 4d 44 32 41 01 70 00 60 a0 0d 7b ...I.MD2A.p.`..{ 5c90: 68 4c 43 44 4d 00 7d 60 0a 01 60 a0 0d 7b 68 43 hLCDM.}`..`..{hC 5ca0: 52 54 4d 00 7d 60 0a 02 60 a0 0d 7b 68 54 56 4f RTM.}`..`..{hTVO 5cb0: 4d 00 7d 60 0a 04 60 a0 0d 7b 68 44 56 49 4d 00 M.}`..`..{hDVIM. 5cc0: 7d 60 0a 08 60 a0 0d 7b 68 48 44 4d 4d 00 7d 60 }`..`..{hHDMM.}` 5cd0: 0a 10 60 a0 0d 7b 68 44 50 4f 4d 00 7d 60 0a 20 ..`..{hDPOM.}`. 5ce0: 60 a0 08 92 60 a4 4e 58 54 44 a4 60 14 49 06 4d `...`.NXTD.`.I.M 5cf0: 41 32 44 01 70 00 60 a0 0d 7b 68 0a 01 00 7d 60 A2D.p.`..{h...}` 5d00: 4c 43 44 4d 60 a0 0d 7b 68 0a 02 00 7d 60 43 52 LCDM`..{h...}`CR 5d10: 54 4d 60 a0 0d 7b 68 0a 04 00 7d 60 54 56 4f 4d TM`..{h...}`TVOM 5d20: 60 a0 0d 7b 68 0a 08 00 7d 60 44 56 49 4d 60 a0 `..{h...}`DVIM`. 5d30: 0d 7b 68 0a 10 00 7d 60 48 44 4d 4d 60 a0 0d 7b .{h...}`HDMM`..{ 5d40: 68 0a 20 00 7d 60 44 50 4f 4d 60 a0 08 92 60 a4 h. .}`DPOM`...`. 5d50: 4c 43 44 4d a4 60 14 06 5f 49 4e 49 00 14 37 5f LCDM.`.._INI..7_ 5d60: 44 4f 53 01 47 56 49 46 a0 2c 7b 5c 2e 5f 53 42 DOS.GVIF.,{\._SB 5d70: 5f 56 42 49 46 0a 01 00 7b 68 0a 03 44 4f 53 46 _VBIF...{h..DOSF 5d80: 70 7a 68 0a 02 00 42 52 4e 43 7b 42 52 4e 43 0a pzh...BRNC{BRNC. 5d90: 01 42 52 4e 43 14 4c 26 5f 44 4f 44 00 70 0a 00 .BRNC.L&_DOD.p.. 5da0: 4e 44 49 44 a0 15 92 93 44 49 44 4c 00 70 53 44 NDID....DIDL.pSD 5db0: 44 4c 44 49 44 4c 44 49 44 31 a0 15 92 93 44 44 DLDIDLDID1....DD 5dc0: 4c 32 00 70 53 44 44 4c 44 44 4c 32 44 49 44 32 L2.pSDDLDDL2DID2 5dd0: a0 15 92 93 44 44 4c 33 00 70 53 44 44 4c 44 44 ....DDL3.pSDDLDD 5de0: 4c 33 44 49 44 33 a0 15 92 93 44 44 4c 34 00 70 L3DID3....DDL4.p 5df0: 53 44 44 4c 44 44 4c 34 44 49 44 34 a0 15 92 93 SDDLDDL4DID4.... 5e00: 44 44 4c 35 00 70 53 44 44 4c 44 44 4c 35 44 49 DDL5.pSDDLDDL5DI 5e10: 44 35 a0 2e 93 4e 44 49 44 0a 01 08 54 4d 50 31 D5...NDID...TMP1 5e20: 12 07 01 0c ff ff ff ff 70 7d 0c 00 00 01 00 44 ........p}.....D 5e30: 49 44 31 00 88 54 4d 50 31 0a 00 00 a4 54 4d 50 ID1..TMP1....TMP 5e40: 31 a0 48 04 93 4e 44 49 44 0a 02 08 54 4d 50 32 1.H..NDID...TMP2 5e50: 12 0c 02 0c ff ff ff ff 0c ff ff ff ff 70 7d 0c .............p}. 5e60: 00 00 01 00 44 49 44 31 00 88 54 4d 50 32 0a 00 ....DID1..TMP2.. 5e70: 00 70 7d 0c 00 00 01 00 44 49 44 32 00 88 54 4d .p}.....DID2..TM 5e80: 50 32 0a 01 00 a4 54 4d 50 32 a0 41 06 93 4e 44 P2....TMP2.A..ND 5e90: 49 44 0a 03 08 54 4d 50 33 12 11 03 0c ff ff ff ID...TMP3....... 5ea0: ff 0c ff ff ff ff 0c ff ff ff ff 70 7d 0c 00 00 ...........p}... 5eb0: 01 00 44 49 44 31 00 88 54 4d 50 33 0a 00 00 70 ..DID1..TMP3...p 5ec0: 7d 0c 00 00 01 00 44 49 44 32 00 88 54 4d 50 33 }.....DID2..TMP3 5ed0: 0a 01 00 70 7d 0c 00 00 01 00 44 49 44 33 00 88 ...p}.....DID3.. 5ee0: 54 4d 50 33 0a 02 00 a4 54 4d 50 33 a0 4a 07 93 TMP3....TMP3.J.. 5ef0: 4e 44 49 44 0a 04 08 54 4d 50 34 12 16 04 0c ff NDID...TMP4..... 5f00: ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ................ 5f10: ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 ..p}.....DID1..T 5f20: 4d 50 34 0a 00 00 70 7d 0c 00 00 01 00 44 49 44 MP4...p}.....DID 5f30: 32 00 88 54 4d 50 34 0a 01 00 70 7d 0c 00 00 01 2..TMP4...p}.... 5f40: 00 44 49 44 33 00 88 54 4d 50 34 0a 02 00 70 7d .DID3..TMP4...p} 5f50: 0c 00 00 01 00 44 49 44 34 00 88 54 4d 50 34 0a .....DID4..TMP4. 5f60: 03 00 a4 54 4d 50 34 a0 43 09 94 4e 44 49 44 0a ...TMP4.C..NDID. 5f70: 04 08 54 4d 50 35 12 1b 05 0c ff ff ff ff 0c ff ..TMP5.......... 5f80: ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ff ................ 5f90: ff ff 70 7d 0c 00 00 01 00 44 49 44 31 00 88 54 ..p}.....DID1..T 5fa0: 4d 50 35 0a 00 00 70 7d 0c 00 00 01 00 44 49 44 MP5...p}.....DID 5fb0: 32 00 88 54 4d 50 35 0a 01 00 70 7d 0c 00 00 01 2..TMP5...p}.... 5fc0: 00 44 49 44 33 00 88 54 4d 50 35 0a 02 00 70 7d .DID3..TMP5...p} 5fd0: 0c 00 00 01 00 44 49 44 34 00 88 54 4d 50 35 0a .....DID4..TMP5. 5fe0: 03 00 70 7d 0c 00 00 01 00 44 49 44 35 00 88 54 ..p}.....DID5..T 5ff0: 4d 50 35 0a 04 00 a4 54 4d 50 35 a4 12 05 01 0b MP5....TMP5..... 6000: 00 04 5b 82 45 06 44 44 30 31 14 1e 5f 41 44 52 ..[.E.DD01.._ADR 6010: 08 a0 0b 93 44 49 44 31 0a 00 a4 0a 01 a1 0b a4 ....DID1........ 6020: 7b 0b ff ff 44 49 44 31 00 14 0f 5f 44 43 53 00 {...DID1..._DCS. 6030: a4 43 44 44 53 44 49 44 31 14 0f 5f 44 47 53 00 .CDDSDID1.._DGS. 6040: a4 4e 44 44 53 44 49 44 31 14 1f 5f 44 53 53 01 .NDDSDID1.._DSS. 6050: a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 ...{h........... 6060: 70 4e 53 54 45 43 53 54 45 5b 82 42 12 4c 43 44 pNSTECSTE[.B.LCD 6070: 44 14 1e 5f 41 44 52 08 a0 0b 93 44 49 44 32 0a D.._ADR....DID2. 6080: 00 a4 0a 02 a1 0b a4 7b 0b ff ff 44 49 44 32 00 .......{...DID2. 6090: 14 0f 5f 44 43 53 00 a4 43 44 44 53 44 49 44 32 .._DCS..CDDSDID2 60a0: 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 44 32 .._DGS..NDDSDID2 60b0: 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 00 .._DSS....{h.... 60c0: c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 45 .......pNSTECSTE 60d0: 14 46 06 5f 42 43 4c 00 70 0a 00 60 70 42 52 54 .F._BCL.p..`pBRT 60e0: 49 64 79 64 0a 04 64 a2 4a 04 95 60 0a 0b 74 0a Idyd..d.J..`..t. 60f0: 0b 60 63 74 63 0a 01 63 70 72 64 63 00 63 70 83 .`ctc..cprdc.cp. 6100: 88 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 52 47 .\/._SB_PCI0SBRG 6110: 45 43 30 5f 50 57 41 43 63 00 61 70 78 77 61 0a EC0_PWACc.apxwa. 6120: 64 00 0a ff 00 00 62 70 62 88 50 43 54 47 60 00 d.....bpb.PCTG`. 6130: 75 60 a4 50 43 54 47 08 42 43 42 48 0a 00 14 3c u`.PCTG.BCBH...< 6140: 5f 42 43 4d 01 70 01 42 43 4d 44 70 47 43 42 4c _BCM.p.BCMDpGCBL 6150: 68 60 74 74 0a 0b 0a 01 00 60 5c 2e 5f 53 42 5f h`tt.....`\._SB_ 6160: 4c 42 54 4e 5c 2f 05 5f 53 42 5f 50 43 49 30 53 LBTN\/._SB_PCI0S 6170: 42 52 47 45 43 30 5f 53 54 42 52 14 11 5f 42 51 BRGEC0_STBR.._BQ 6180: 43 00 a4 5c 2e 5f 53 42 5f 4c 42 54 4e 5b 82 43 C..\._SB_LBTN[.C 6190: 07 44 44 30 33 14 1e 5f 41 44 52 08 a0 0b 93 44 .DD03.._ADR....D 61a0: 49 44 33 0a 00 a4 0a 03 a1 0b a4 7b 0b ff ff 44 ID3........{...D 61b0: 49 44 33 00 14 1d 5f 44 43 53 00 a0 0b 93 44 49 ID3..._DCS....DI 61c0: 44 33 0a 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 D3........CDDSDI 61d0: 44 33 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 D3.._DGS..NDDSDI 61e0: 44 33 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 D3.._DSS....{h.. 61f0: 00 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 .........pNSTECS 6200: 54 45 5b 82 43 07 44 44 30 34 14 1e 5f 41 44 52 TE[.C.DD04.._ADR 6210: 08 a0 0b 93 44 49 44 34 0a 00 a4 0a 04 a1 0b a4 ....DID4........ 6220: 7b 0b ff ff 44 49 44 34 00 14 1d 5f 44 43 53 00 {...DID4..._DCS. 6230: a0 0b 93 44 49 44 34 0a 00 a4 0a 0b a1 0a a4 43 ...DID4........C 6240: 44 44 53 44 49 44 34 14 0f 5f 44 47 53 00 a4 4e DDSDID4.._DGS..N 6250: 44 44 53 44 49 44 34 14 1f 5f 44 53 53 01 a0 18 DDSDID4.._DSS... 6260: 93 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e .{h...........pN 6270: 53 54 45 43 53 54 45 5b 82 43 07 44 44 30 35 14 STECSTE[.C.DD05. 6280: 1e 5f 41 44 52 08 a0 0b 93 44 49 44 35 0a 00 a4 ._ADR....DID5... 6290: 0a 05 a1 0b a4 7b 0b ff ff 44 49 44 35 00 14 1d .....{...DID5... 62a0: 5f 44 43 53 00 a0 0b 93 44 49 44 35 0a 00 a4 0a _DCS....DID5.... 62b0: 0b a1 0a a4 43 44 44 53 44 49 44 35 14 0f 5f 44 ....CDDSDID5.._D 62c0: 47 53 00 a4 4e 44 44 53 44 49 44 35 14 1f 5f 44 GS..NDDSDID5.._D 62d0: 53 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 SS....{h........ 62e0: 00 00 c0 70 4e 53 54 45 43 53 54 45 5b 82 43 07 ...pNSTECSTE[.C. 62f0: 44 44 30 36 14 1e 5f 41 44 52 08 a0 0b 93 44 49 DD06.._ADR....DI 6300: 44 36 0a 00 a4 0a 06 a1 0b a4 7b 0b ff ff 44 49 D6........{...DI 6310: 44 36 00 14 1d 5f 44 43 53 00 a0 0b 93 44 49 44 D6..._DCS....DID 6320: 36 0a 00 a4 0a 0b a1 0a a4 43 44 44 53 44 49 44 6........CDDSDID 6330: 36 14 0f 5f 44 47 53 00 a4 4e 44 44 53 44 49 44 6.._DGS..NDDSDID 6340: 36 14 1f 5f 44 53 53 01 a0 18 93 7b 68 0c 00 00 6.._DSS....{h... 6350: 00 c0 00 0c 00 00 00 c0 70 4e 53 54 45 43 53 54 ........pNSTECST 6360: 45 5b 82 43 07 44 44 30 37 14 1e 5f 41 44 52 08 E[.C.DD07.._ADR. 6370: a0 0b 93 44 49 44 37 0a 00 a4 0a 07 a1 0b a4 7b ...DID7........{ 6380: 0b ff ff 44 49 44 37 00 14 1d 5f 44 43 53 00 a0 ...DID7..._DCS.. 6390: 0b 93 44 49 44 37 0a 00 a4 0a 0b a1 0a a4 43 44 ..DID7........CD 63a0: 44 53 44 49 44 37 14 0f 5f 44 47 53 00 a4 4e 44 DSDID7.._DGS..ND 63b0: 44 53 44 49 44 37 14 1f 5f 44 53 53 01 a0 18 93 DSDID7.._DSS.... 63c0: 7b 68 0c 00 00 00 c0 00 0c 00 00 00 c0 70 4e 53 {h...........pNS 63d0: 54 45 43 53 54 45 5b 82 43 07 44 44 30 38 14 1e TECSTE[.C.DD08.. 63e0: 5f 41 44 52 08 a0 0b 93 44 49 44 38 0a 00 a4 0a _ADR....DID8.... 63f0: 08 a1 0b a4 7b 0b ff ff 44 49 44 38 00 14 1d 5f ....{...DID8..._ 6400: 44 43 53 00 a0 0b 93 44 49 44 38 0a 00 a4 0a 0b DCS....DID8..... 6410: a1 0a a4 43 44 44 53 44 49 44 38 14 0f 5f 44 47 ...CDDSDID8.._DG 6420: 53 00 a4 4e 44 44 53 44 49 44 38 14 1f 5f 44 53 S..NDDSDID8.._DS 6430: 53 01 a0 18 93 7b 68 0c 00 00 00 c0 00 0c 00 00 S....{h......... 6440: 00 c0 70 4e 53 54 45 43 53 54 45 14 4f 06 53 44 ..pNSTECSTE.O.SD 6450: 44 4c 01 75 4e 44 49 44 70 7b 68 0b 0f 0f 00 60 DL.uNDIDp{h....` 6460: 7d 0c 00 00 00 80 60 61 a0 09 93 44 49 44 4c 60 }.....`a...DIDL` 6470: a4 61 a0 09 93 44 44 4c 32 60 a4 61 a0 09 93 44 .a...DDL2`.a...D 6480: 44 4c 33 60 a4 61 a0 09 93 44 44 4c 34 60 a4 61 DL3`.a...DDL4`.a 6490: a0 09 93 44 44 4c 35 60 a4 61 a0 09 93 44 44 4c ...DDL5`.a...DDL 64a0: 36 60 a4 61 a0 09 93 44 44 4c 37 60 a4 61 a0 09 6`.a...DDL7`.a.. 64b0: 93 44 44 4c 38 60 a4 61 a4 0a 00 14 43 07 43 44 .DDL8`.a....C.CD 64c0: 44 53 01 70 7b 68 0b 0f 0f 00 60 a0 08 93 0a 00 DS.p{h....`..... 64d0: 60 a4 0a 1d a0 0a 93 43 41 44 4c 60 a4 0a 1f a0 `......CADL`.... 64e0: 0a 93 43 41 4c 32 60 a4 0a 1f a0 0a 93 43 41 4c ..CAL2`......CAL 64f0: 33 60 a4 0a 1f a0 0a 93 43 41 4c 34 60 a4 0a 1f 3`......CAL4`... 6500: a0 0a 93 43 41 4c 35 60 a4 0a 1f a0 0a 93 43 41 ...CAL5`......CA 6510: 4c 36 60 a4 0a 1f a0 0a 93 43 41 4c 37 60 a4 0a L6`......CAL7`.. 6520: 1f a0 0a 93 43 41 4c 38 60 a4 0a 1f a4 0a 1d 14 ....CAL8`....... 6530: 43 07 4e 44 44 53 01 70 7b 68 0b 0f 0f 00 60 a0 C.NDDS.p{h....`. 6540: 08 93 0a 00 60 a4 0a 00 a0 0a 93 4e 41 44 4c 60 ....`......NADL` 6550: a4 0a 01 a0 0a 93 4e 44 4c 32 60 a4 0a 01 a0 0a ......NDL2`..... 6560: 93 4e 44 4c 33 60 a4 0a 01 a0 0a 93 4e 44 4c 34 .NDL3`......NDL4 6570: 60 a4 0a 01 a0 0a 93 4e 44 4c 35 60 a4 0a 01 a0 `......NDL5`.... 6580: 0a 93 4e 44 4c 36 60 a4 0a 01 a0 0a 93 4e 44 4c ..NDL6`......NDL 6590: 37 60 a4 0a 01 a0 0a 93 4e 44 4c 38 60 a4 0a 01 7`......NDL8`... 65a0: a4 0a 00 14 4b 14 53 57 48 44 09 70 01 55 50 44 ....K.SWHD.p.UPD 65b0: 4e a0 4c 07 93 44 4f 53 46 0a 01 a0 13 5c 4e 41 N.L..DOSF....\NA 65c0: 54 4b 70 0a 00 5c 2e 5f 53 42 5f 53 46 55 4e a1 TKp..\._SB_SFUN. 65d0: 0e 70 0a 04 5c 2e 5f 53 42 5f 53 46 55 4e 70 68 .p..\._SB_SFUNph 65e0: 5c 2e 5f 53 42 5f 53 53 54 45 a0 2b 5c 4e 41 54 \._SB_SSTE.+\NAT 65f0: 4b 70 4d 41 32 44 68 5c 2e 5f 53 42 5f 4e 53 54 KpMA2Dh\._SB_NST 6600: 45 70 5c 2e 5f 53 42 5f 4e 53 54 45 5c 2e 5f 53 Ep\._SB_NSTE\._S 6610: 42 5f 53 53 54 45 49 53 4d 49 0a 94 86 5c 2f 03 B_SSTEISMI...\/. 6620: 5f 53 42 5f 50 43 49 30 47 46 58 30 0a 81 a1 4d _SB_PCI0GFX0...M 6630: 0b 70 0a 01 5c 2f 04 5f 53 42 5f 50 43 49 30 47 .p..\/._SB_PCI0G 6640: 46 58 30 43 45 56 54 70 0a 03 5c 2f 04 5f 53 42 FX0CEVTp..\/._SB 6650: 5f 50 43 49 30 47 46 58 30 43 53 54 53 a0 4e 05 _PCI0GFX0CSTS.N. 6660: 92 93 5c 2e 5f 53 42 5f 43 41 44 4c 5c 2e 5f 53 ..\._SB_CADL\._S 6670: 42 5f 50 41 44 4c 70 5c 2e 5f 53 42 5f 43 41 44 B_PADLp\._SB_CAD 6680: 4c 5c 2e 5f 53 42 5f 50 41 44 4c a0 17 93 4f 53 L\._SB_PADL...OS 6690: 46 47 4f 53 58 50 86 5c 2e 5f 53 42 5f 50 43 49 FGOSXP.\._SB_PCI 66a0: 30 0a 00 a1 13 86 5c 2f 03 5f 53 42 5f 50 43 49 0.....\/._SB_PCI 66b0: 30 47 46 58 30 0a 00 5b 22 0b e8 03 70 4d 41 32 0GFX0..["...pMA2 66c0: 44 68 5c 2e 5f 53 42 5f 4e 53 54 45 57 4e 44 44 Dh\._SB_NSTEWNDD 66d0: 5c 2e 5f 53 42 5f 4e 53 54 45 86 5c 2f 03 5f 53 \._SB_NSTE.\/._S 66e0: 42 5f 50 43 49 30 47 46 58 30 0a 80 a4 0a 00 14 B_PCI0GFX0...... 66f0: 24 47 43 44 44 00 70 0a 01 5c 2e 5f 53 42 5f 53 $GCDD.p..\._SB_S 6700: 46 55 4e 49 53 4d 49 0a 95 a4 5c 2e 5f 53 42 5f FUNISMI...\._SB_ 6710: 43 53 54 45 14 24 47 4e 44 44 00 70 0a 05 5c 2e CSTE.$GNDD.p..\. 6720: 5f 53 42 5f 53 46 55 4e 49 53 4d 49 0a 95 a4 5c _SB_SFUNISMI...\ 6730: 2e 5f 53 42 5f 4e 53 54 45 14 24 47 43 41 44 00 ._SB_NSTE.$GCAD. 6740: 70 0a 02 5c 2e 5f 53 42 5f 53 46 55 4e 49 53 4d p..\._SB_SFUNISM 6750: 49 0a 95 a4 5c 2e 5f 53 42 5f 43 41 44 4c 14 31 I...\._SB_CADL.1 6760: 47 56 49 46 00 70 0a 67 5c 2e 5f 53 42 5f 56 42 GVIF.p.g\._SB_VB 6770: 49 46 70 0a 00 5c 2e 5f 53 42 5f 53 46 55 4e 49 IFp..\._SB_SFUNI 6780: 53 4d 49 0a 95 a4 5c 2e 5f 53 42 5f 56 42 49 46 SMI...\._SB_VBIF 6790: 14 44 27 41 44 56 44 00 a0 15 7b 44 4f 53 46 0a .D'ADVD...{DOSF. 67a0: 03 00 47 43 44 44 47 43 41 44 47 56 49 46 a1 09 ..GCDDGCADGVIF.. 67b0: 4f 47 43 41 4f 47 43 44 a0 47 24 5c 4e 41 54 4b OGCAOGCD.G$\NATK 67c0: a0 1e 55 50 44 4e 70 4d 44 32 41 5c 2e 5f 53 42 ..UPDNpMD2A\._SB 67d0: 5f 43 53 54 45 4e 58 54 44 70 00 55 50 44 4e 70 _CSTENXTDp.UPDNp 67e0: 00 60 70 4d 44 32 41 5c 2e 5f 53 42 5f 43 41 44 .`pMD2A\._SB_CAD 67f0: 4c 61 70 00 62 a0 1d 7b 5c 2e 5f 53 42 5f 56 47 Lap.b..{\._SB_VG 6800: 41 46 0a 01 00 7b 5c 2e 5f 53 42 5f 56 42 49 46 AF...{\._SB_VBIF 6810: 0a 08 62 a0 25 7b 93 62 0a 08 7b 5c 2e 5f 53 42 ..b.%{.b..{\._SB 6820: 5f 56 47 41 46 0a 01 00 00 7b 4e 58 54 44 61 4e _VGAF....{NXTDaN 6830: 58 54 44 70 4e 58 54 44 60 a2 41 1c 92 93 4e 58 XTDpNXTD`.A...NX 6840: 54 44 60 75 4e 58 54 44 a0 15 90 93 44 4f 53 46 TD`uNXTD....DOSF 6850: 0a 01 93 4e 58 54 44 0a 03 75 4e 58 54 44 a0 25 ...NXTD..uNXTD.% 6860: 7b 44 4f 53 46 0a 03 00 a0 0d 93 4e 58 54 44 0a {DOSF......NXTD. 6870: 05 75 4e 58 54 44 a0 0d 93 4e 58 54 44 0a 06 75 .uNXTD...NXTD..u 6880: 4e 58 54 44 a0 0d 93 4e 58 54 44 0a 07 75 4e 58 NXTD...NXTD..uNX 6890: 54 44 a0 17 7b 44 4f 53 46 0a 03 00 a0 0d 93 4e TD..{DOSF......N 68a0: 58 54 44 0a 09 75 4e 58 54 44 a0 15 90 93 44 4f XTD..uNXTD....DO 68b0: 53 46 0a 01 93 4e 58 54 44 0a 0a 75 4e 58 54 44 SF...NXTD..uNXTD 68c0: a0 0d 93 4e 58 54 44 0a 0b 75 4e 58 54 44 a0 15 ...NXTD..uNXTD.. 68d0: 90 93 44 4f 53 46 0a 01 93 4e 58 54 44 0a 0c 75 ..DOSF...NXTD..u 68e0: 4e 58 54 44 a2 15 90 94 4e 58 54 44 0a 0c 95 4e NXTD....NXTD...N 68f0: 58 54 44 0a 10 75 4e 58 54 44 a0 24 93 44 4f 53 XTD..uNXTD.$.DOS 6900: 46 0a 01 a0 0d 93 4e 58 54 44 0a 11 75 4e 58 54 F.....NXTD..uNXT 6910: 44 a0 0d 93 4e 58 54 44 0a 12 75 4e 58 54 44 a0 D...NXTD..uNXTD. 6920: 0d 93 4e 58 54 44 0a 13 75 4e 58 54 44 a0 3b 93 ..NXTD..uNXTD.;. 6930: 44 4f 53 46 0a 01 a2 16 90 92 95 4e 58 54 44 0a DOSF.......NXTD. 6940: 14 95 4e 58 54 44 0a 20 75 4e 58 54 44 a0 0d 93 ..NXTD. uNXTD... 6950: 4e 58 54 44 0a 21 75 4e 58 54 44 a0 0d 93 4e 58 NXTD.!uNXTD...NX 6960: 54 44 0a 22 75 4e 58 54 44 a0 0d 93 4e 58 54 44 TD."uNXTD...NXTD 6970: 0a 23 75 4e 58 54 44 a0 15 90 93 44 4f 53 46 0a .#uNXTD....DOSF. 6980: 01 93 4e 58 54 44 0a 24 75 4e 58 54 44 a2 15 90 ..NXTD.$uNXTD... 6990: 94 4e 58 54 44 0a 24 95 4e 58 54 44 0a 28 75 4e .NXTD.$.NXTD.(uN 69a0: 58 54 44 a0 15 90 93 44 4f 53 46 0a 01 93 4e 58 XTD....DOSF...NX 69b0: 54 44 0a 28 75 4e 58 54 44 a2 15 90 94 4e 58 54 TD.(uNXTD....NXT 69c0: 44 0a 28 95 4e 58 54 44 0a 30 75 4e 58 54 44 a0 D.(.NXTD.0uNXTD. 69d0: 15 90 93 44 4f 53 46 0a 01 93 4e 58 54 44 0a 30 ...DOSF...NXTD.0 69e0: 75 4e 58 54 44 a0 0e 94 4e 58 54 44 0a 30 70 01 uNXTD...NXTD.0p. 69f0: 4e 58 54 44 7b 4e 58 54 44 61 60 a4 4e 58 54 44 NXTD{NXTDa`.NXTD 6a00: a4 47 4e 44 44 14 35 47 43 44 53 00 a0 15 7b 44 .GNDD.5GCDS...{D 6a10: 4f 53 46 0a 03 00 47 43 44 44 47 43 41 44 47 56 OSF...GCDDGCADGV 6a20: 49 46 a1 09 4f 47 43 41 4f 47 43 44 a4 4d 44 32 IF..OGCAOGCD.MD2 6a30: 41 5c 2e 5f 53 42 5f 43 53 54 45 14 08 4e 41 54 A\._SB_CSTE..NAT 6a40: 4b 00 a4 01 08 42 43 4d 44 0a 00 14 0f 55 50 42 K....BCMD....UPB 6a50: 4c 00 86 4c 43 44 44 0a 86 a4 00 14 0f 44 57 42 L..LCDD......DWB 6a60: 4c 00 86 4c 43 44 44 0a 87 a4 00 14 44 04 47 43 L..LCDD.....D.GC 6a70: 42 4c 01 70 0a 00 60 7b 68 0c ff ff ff 7f 68 a2 BL.p..`{h.....h. 6a80: 2e 95 60 74 0a 0b 0a 01 00 70 83 88 50 43 54 47 ..`t.....p..PCTG 6a90: 60 00 61 70 83 88 50 43 54 47 72 60 0a 01 00 00 `.ap..PCTGr`.... 6aa0: 62 a0 0a 90 92 94 68 61 94 68 62 a5 75 60 a4 60 b.....ha.hb.u`.` 6ab0: 5b 82 42 05 5c 2e 5f 53 42 5f 4d 45 4d 32 08 5f [.B.\._SB_MEM2._ 6ac0: 48 49 44 0c 41 d0 0c 01 08 5f 55 49 44 0a 02 08 HID.A...._UID... 6ad0: 43 52 53 5f 11 1d 0a 1a 86 09 00 01 00 00 00 20 CRS_........... 6ae0: 00 00 20 00 86 09 00 01 00 00 00 40 00 00 20 00 .. ........@.. . 6af0: 79 00 14 11 5f 43 52 53 00 a0 0a 49 47 44 53 a4 y..._CRS...IGDS. 6b00: 43 52 53 5f 5b 82 46 28 52 50 30 33 08 5f 41 44 CRS_[.F(RP03._AD 6b10: 52 0c 02 00 1c 00 08 5f 48 50 50 12 0a 04 0a 08 R......_HPP..... 6b20: 0a 40 0a 01 0a 00 5b 80 4c 43 54 4c 02 0a 50 0a .@....[.LCTL..P. 6b30: 04 5b 81 12 4c 43 54 4c 01 00 04 50 45 4c 44 01 .[..LCTL...PELD. 6b40: 50 45 52 4c 01 5b 80 53 4c 4f 54 02 0a 54 0a 10 PERL.[.SLOT..T.. 6b50: 5b 81 43 04 53 4c 4f 54 01 53 43 41 50 20 53 43 [.C.SLOT.SCAP SC 6b60: 54 4c 10 41 42 50 31 01 50 46 44 31 01 4d 53 43 TL.ABP1.PFD1.MSC 6b70: 31 01 50 44 43 31 01 43 43 31 30 01 4d 53 31 30 1.PDC1.CC10.MS10 6b80: 01 50 44 53 31 01 52 53 56 30 01 4c 41 53 43 01 .PDS1.RSV0.LASC. 6b90: 52 53 56 31 07 5b 80 52 48 55 42 02 0a 60 0a 10 RSV1.[.RHUB..`.. 6ba0: 5b 81 1a 52 48 55 42 01 50 4d 49 44 10 50 4d 45 [..RHUB.PMID.PME 6bb0: 53 01 50 4d 45 50 01 52 53 56 32 0e 5b 80 4d 49 S.PMEP.RSV2.[.MI 6bc0: 53 43 02 0a d8 0a 08 5b 81 3d 4d 49 53 43 01 52 SC.....[.=MISC.R 6bd0: 53 56 34 1e 50 4d 43 45 01 48 50 43 45 01 50 4d SV4.PMCE.HPCE.PM 6be0: 4d 53 01 48 50 50 44 01 48 50 41 42 01 48 50 43 MS.HPPD.HPAB.HPC 6bf0: 43 01 48 50 4c 41 01 52 53 56 33 19 48 50 43 53 C.HPLA.RSV3.HPCS 6c00: 01 50 4d 43 53 01 5b 80 50 58 43 53 02 0a 40 0a .PMCS.[.PXCS..@. 6c10: c0 5b 81 41 05 50 58 43 53 40 00 40 09 00 0d 4c .[.A.PXCS@.@...L 6c20: 41 53 58 01 00 32 41 42 50 58 01 00 02 50 44 43 ASX..2ABPX...PDC 6c30: 58 01 00 02 50 44 53 58 01 00 01 4c 53 43 58 01 X...PDSX...LSCX. 6c40: 00 27 00 10 50 53 50 58 01 00 4f 3a 00 1e 48 50 .'..PSPX..O:..HP 6c50: 45 58 01 50 4d 45 58 01 00 1e 48 50 53 58 01 50 EX.PMEX...HPSX.P 6c60: 4d 53 58 01 14 1f 48 50 48 4b 00 70 0a 01 50 44 MSX...HPHK.p..PD 6c70: 43 31 70 0a 01 48 50 43 53 70 0a 00 50 45 4c 44 C1p..HPCSp..PELD 6c80: 5b 22 0a fa 5b 82 4c 04 58 43 46 30 08 5f 41 44 ["..[.L.XCF0._AD 6c90: 52 0a 00 14 35 5f 53 54 41 00 a0 10 7b 5c 46 44 R...5_STA...{\FD 6ca0: 52 54 0c 00 00 04 00 00 a4 0a 00 70 5c 2e 5f 53 RT.........p\._S 6cb0: 42 5f 52 42 50 45 0c 5a 20 0e 00 60 a0 09 7b 60 B_RBPE.Z ..`..{` 6cc0: 0a 40 00 a4 0a 0f a4 0a 00 14 08 5f 52 4d 56 00 .@........._RMV. 6cd0: a4 01 5b 82 13 58 43 46 31 08 5f 41 44 52 0a 01 ..[..XCF1._ADR.. 6ce0: 14 06 5f 45 4a 30 01 5b 82 13 58 43 46 32 08 5f .._EJ0.[..XCF2._ 6cf0: 41 44 52 0a 02 14 06 5f 45 4a 30 01 5b 82 13 58 ADR...._EJ0.[..X 6d00: 43 46 33 08 5f 41 44 52 0a 03 14 06 5f 45 4a 30 CF3._ADR...._EJ0 6d10: 01 5b 82 13 58 43 46 34 08 5f 41 44 52 0a 04 14 .[..XCF4._ADR... 6d20: 06 5f 45 4a 30 01 5b 82 13 58 43 46 35 08 5f 41 ._EJ0.[..XCF5._A 6d30: 44 52 0a 05 14 06 5f 45 4a 30 01 5b 82 13 58 43 DR...._EJ0.[..XC 6d40: 46 36 08 5f 41 44 52 0a 06 14 06 5f 45 4a 30 01 F6._ADR...._EJ0. 6d50: 5b 82 13 58 43 46 37 08 5f 41 44 52 0a 07 14 06 [..XCF7._ADR.... 6d60: 5f 45 4a 30 01 14 0f 5f 50 52 57 00 a4 47 50 52 _EJ0..._PRW..GPR 6d70: 57 0a 09 0a 04 14 16 5f 50 52 54 00 a0 0a 50 49 W......_PRT...PI 6d80: 43 4d a4 41 52 30 36 a4 50 52 30 36 5b 01 4d 55 CM.AR06.PR06[.MU 6d90: 54 58 00 5b 80 50 52 54 30 01 0a 80 0a 04 5b 81 TX.[.PRT0.....[. 6da0: 0b 50 52 54 30 13 50 38 30 48 20 14 40 08 50 38 .PRT0.P80H .@.P8 6db0: 58 48 0a a0 18 93 68 0a 00 70 7d 7b 50 38 30 44 XH....h..p}{P80D 6dc0: 0c 00 ff ff ff 00 69 00 50 38 30 44 a0 1c 93 68 ......i.P80D...h 6dd0: 0a 01 70 7d 7b 50 38 30 44 0c ff 00 ff ff 00 79 ..p}{P80D......y 6de0: 69 0a 08 00 00 50 38 30 44 a0 1c 93 68 0a 02 70 i....P80D...h..p 6df0: 7d 7b 50 38 30 44 0c ff ff 00 ff 00 79 69 0a 10 }{P80D......yi.. 6e00: 00 00 50 38 30 44 a0 1c 93 68 0a 03 70 7d 7b 50 ..P80D...h..p}{P 6e10: 38 30 44 0c ff ff ff 00 00 79 69 0a 18 00 00 50 80D......yi....P 6e20: 38 30 44 70 50 38 30 44 50 38 30 48 5b 80 53 50 80DpP80DP80H[.SP 6e30: 52 54 01 0a b2 0a 02 5b 81 0b 53 50 52 54 11 53 RT.....[..SPRT.S 6e40: 53 4d 50 08 14 13 5c 5f 50 49 43 01 70 68 47 50 SMP...\_PIC.phGP 6e50: 49 43 70 68 50 49 43 4d 14 0b 5f 50 54 53 01 50 ICphPICM.._PTS.P 6e60: 54 53 5f 68 14 13 5f 57 41 4b 09 57 41 4b 5f 68 TS_h.._WAK.WAK_h 6e70: a4 12 06 02 0a 00 0a 00 14 1e 47 45 54 42 0b 77 ..........GETB.w 6e80: 68 0a 08 60 77 69 0a 08 61 5b 13 6a 60 61 54 42 h..`wi..a[.j`aTB 6e90: 46 33 a4 54 42 46 33 14 41 1c 50 4e 4f 54 08 a0 F3.TBF3.A.PNOT.. 6ea0: 49 19 94 54 43 4e 54 0a 01 a0 31 7b 50 44 43 30 I..TCNT...1{PDC0 6eb0: 0a 08 00 86 5c 2e 5f 50 52 5f 43 50 55 30 0a 80 ....\._PR_CPU0.. 6ec0: a0 1a 7b 50 44 43 30 0a 10 00 5b 22 0a 64 86 5c ..{PDC0...[".d.\ 6ed0: 2e 5f 50 52 5f 43 50 55 30 0a 81 a0 31 7b 50 44 ._PR_CPU0...1{PD 6ee0: 43 31 0a 08 00 86 5c 2e 5f 50 52 5f 43 50 55 31 C1....\._PR_CPU1 6ef0: 0a 80 a0 1a 7b 50 44 43 31 0a 10 00 5b 22 0a 64 ....{PDC1...[".d 6f00: 86 5c 2e 5f 50 52 5f 43 50 55 31 0a 81 a0 31 7b .\._PR_CPU1...1{ 6f10: 50 44 43 32 0a 08 00 86 5c 2e 5f 50 52 5f 43 50 PDC2....\._PR_CP 6f20: 55 32 0a 80 a0 1a 7b 50 44 43 32 0a 10 00 5b 22 U2....{PDC2...[" 6f30: 0a 64 86 5c 2e 5f 50 52 5f 43 50 55 32 0a 81 a0 .d.\._PR_CPU2... 6f40: 31 7b 50 44 43 33 0a 08 00 86 5c 2e 5f 50 52 5f 1{PDC3....\._PR_ 6f50: 43 50 55 33 0a 80 a0 1a 7b 50 44 43 33 0a 10 00 CPU3....{PDC3... 6f60: 5b 22 0a 64 86 5c 2e 5f 50 52 5f 43 50 55 33 0a [".d.\._PR_CPU3. 6f70: 81 a0 31 7b 50 44 43 34 0a 08 00 86 5c 2e 5f 50 ..1{PDC4....\._P 6f80: 52 5f 43 50 55 34 0a 80 a0 1a 7b 50 44 43 34 0a R_CPU4....{PDC4. 6f90: 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 5f 43 50 55 ..[".d.\._PR_CPU 6fa0: 34 0a 81 a0 31 7b 50 44 43 35 0a 08 00 86 5c 2e 4...1{PDC5....\. 6fb0: 5f 50 52 5f 43 50 55 35 0a 80 a0 1a 7b 50 44 43 _PR_CPU5....{PDC 6fc0: 35 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 5f 43 5...[".d.\._PR_C 6fd0: 50 55 35 0a 81 a0 31 7b 50 44 43 36 0a 08 00 86 PU5...1{PDC6.... 6fe0: 5c 2e 5f 50 52 5f 43 50 55 36 0a 80 a0 1a 7b 50 \._PR_CPU6....{P 6ff0: 44 43 36 0a 10 00 5b 22 0a 64 86 5c 2e 5f 50 52 DC6...[".d.\._PR 7000: 5f 43 50 55 36 0a 81 a0 31 7b 50 44 43 37 0a 08 _CPU6...1{PDC7.. 7010: 00 86 5c 2e 5f 50 52 5f 43 50 55 37 0a 80 a0 1a ..\._PR_CPU7.... 7020: 7b 50 44 43 37 0a 10 00 5b 22 0a 64 86 5c 2e 5f {PDC7...[".d.\._ 7030: 50 52 5f 43 50 55 37 0a 81 a1 1f 86 5c 2e 5f 50 PR_CPU7.....\._P 7040: 52 5f 43 50 55 30 0a 80 5b 22 0a 64 86 5c 2e 5f R_CPU0..[".d.\._ 7050: 50 52 5f 43 50 55 30 0a 81 14 3c 54 52 41 50 0a PR_CPU0...BIF0..0ECAV 9e50: a0 0b 42 53 4c 46 70 42 31 4d 44 60 a1 07 70 42 ..BSLFpB1MD`..pB 9e60: 30 4d 44 60 a0 16 92 93 60 0b ff ff 7a 60 0a 0f 0MD`....`...z`.. 9e70: 61 7b 61 0a 01 61 7f 61 0a 01 60 a1 04 70 ff 60 a{a..a.a..`..p.` 9e80: a4 60 14 2d 42 49 46 31 00 a0 1f 45 43 41 56 a0 .`.-BIF1...ECAV. 9e90: 0b 42 53 4c 46 70 42 31 44 43 60 a1 07 70 42 30 .BSLFpB1DC`..pB0 9ea0: 44 43 60 7b 60 0b ff ff 60 a1 04 70 ff 60 a4 60 DC`{`...`..p.`.` 9eb0: 14 2d 42 49 46 32 00 a0 1f 45 43 41 56 a0 0b 42 .-BIF2...ECAV..B 9ec0: 53 4c 46 70 42 31 46 43 60 a1 07 70 42 30 46 43 SLFpB1FC`..pB0FC 9ed0: 60 7b 60 0b ff ff 60 a1 04 70 ff 60 a4 60 14 3e `{`...`..p.`.`.> 9ee0: 42 49 46 33 00 a0 30 45 43 41 56 a0 0b 42 53 4c BIF3..0ECAV..BSL 9ef0: 46 70 42 31 4d 44 60 a1 07 70 42 30 4d 44 60 a0 FpB1MD`..pB0MD`. 9f00: 16 92 93 60 0b ff ff 7a 60 0a 09 60 7b 60 0a 01 ...`...z`..`{`.. 9f10: 60 7f 60 0a 01 60 a1 04 70 ff 60 a4 60 14 27 42 `.`..`..p.`.`.'B 9f20: 49 46 34 00 a0 19 45 43 41 56 a0 0b 42 53 4c 46 IF4...ECAV..BSLF 9f30: 70 42 31 44 56 60 a1 07 70 42 30 44 56 60 a1 04 pB1DV`..pB0DV`.. 9f40: 70 ff 60 a4 60 14 47 06 42 49 46 39 00 08 42 53 p.`.`.G.BIF9..BS 9f50: 54 52 11 03 0a 20 70 53 4d 42 52 52 44 42 4c 42 TR... pSMBRRDBLB 9f60: 41 44 52 0a 21 60 a0 25 92 93 83 88 60 0a 00 00 ADR.!`.%....`... 9f70: 0a 00 70 5c 2e 5f 53 42 5f 4d 4e 41 4d 42 53 54 ..p\._SB_MNAMBST 9f80: 52 70 0a 00 88 42 53 54 52 0a 04 00 a1 1b 70 83 Rp...BSTR.....p. 9f90: 88 60 0a 02 00 42 53 54 52 70 0a 00 88 42 53 54 .`...BSTRp...BST 9fa0: 52 83 88 60 0a 01 00 00 a4 42 53 54 52 14 27 42 R..`.....BSTR.'B 9fb0: 49 46 41 00 a0 19 45 43 41 56 a0 0b 42 53 4c 46 IFA...ECAV..BSLF 9fc0: 70 42 31 53 4e 60 a1 07 70 42 30 53 4e 60 a1 04 pB1SN`..pB0SN`.. 9fd0: 70 ff 60 a4 60 14 27 42 53 54 53 00 a0 19 45 43 p.`.`.'BSTS...EC 9fe0: 41 56 a0 0b 42 53 4c 46 70 42 31 53 54 60 a1 07 AV..BSLFpB1ST`.. 9ff0: 70 42 30 53 54 60 a1 04 70 ff 60 a4 60 14 27 42 pB0ST`..p.`.`.'B a000: 43 52 54 00 a0 19 45 43 41 56 a0 0b 42 53 4c 46 CRT...ECAV..BSLF a010: 70 42 31 43 43 60 a1 07 70 42 30 43 43 60 a1 04 pB1CC`..pB0CC`.. a020: 70 ff 60 a4 60 14 31 42 52 43 50 00 a0 23 45 43 p.`.`.1BRCP..#EC a030: 41 56 a0 0b 42 53 4c 46 70 42 31 52 43 60 a1 07 AV..BSLFpB1RC`.. a040: 70 42 30 52 43 60 a0 09 93 60 0b ff ff 70 ff 60 pB0RC`...`...p.` a050: a1 04 70 ff 60 a4 60 14 27 42 56 4f 54 00 a0 19 ..p.`.`.'BVOT... a060: 45 43 41 56 a0 0b 42 53 4c 46 70 42 31 56 4c 60 ECAV..BSLFpB1VL` a070: a1 07 70 42 30 56 4c 60 a1 04 70 ff 60 a4 60 10 ..pB0VL`..p.`.`. a080: 4e 06 5c 00 14 22 43 48 47 53 09 70 5c 2f 05 5f N.\.."CHGS.p\/._ a090: 53 42 5f 50 43 49 30 53 42 52 47 45 43 30 5f 42 SB_PCI0SBRGEC0_B a0a0: 43 48 47 68 60 a4 60 08 42 53 4c 46 00 14 17 42 CHGh`.`.BSLF...B a0b0: 41 54 53 09 a0 08 68 70 01 42 53 4c 46 a1 07 70 ATS...hp.BSLF..p a0c0: 00 42 53 4c 46 5b 01 4d 4d 50 58 00 14 0e 42 41 .BSLF[.MMPX...BA a0d0: 54 4f 08 5b 23 4d 4d 50 58 ff ff 14 0c 42 41 54 TO.[#MMPX....BAT a0e0: 52 08 5b 27 4d 4d 50 58 08 42 4c 4c 4f 00 10 43 R.['MMPX.BLLO..C a0f0: 14 5c 2f 04 5f 53 42 5f 50 43 49 30 53 42 52 47 .\/._SB_PCI0SBRG a100: 45 43 30 5f 14 4d 04 5f 51 41 31 00 70 44 43 50 EC0_.M._QA1.pDCP a110: 53 0a 00 5c 2e 5f 53 42 5f 44 43 50 46 a0 10 5c S..\._SB_DCPF..\ a120: 2e 5f 53 42 5f 44 43 50 46 5b 22 0b d0 07 86 5c ._SB_DCPF["....\ a130: 2f 03 5f 53 42 5f 50 43 49 30 42 41 54 30 0a 80 /._SB_PCI0BAT0.. a140: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 42 41 54 30 .\/._SB_PCI0BAT0 a150: 0a 81 14 46 04 5f 51 41 35 00 70 01 42 4c 4c 4f ...F._QA5.p.BLLO a160: a0 1c 5c 2e 5f 53 42 5f 41 54 4b 50 5c 2f 03 5f ..\._SB_ATKP\/._ a170: 53 42 5f 41 54 4b 44 49 41 4e 45 0a 6e a1 1b a0 SB_ATKDIANE.n... a180: 19 42 41 54 50 0a 00 86 5c 2f 03 5f 53 42 5f 50 .BATP...\/._SB_P a190: 43 49 30 42 41 54 30 0a 80 14 46 05 5f 51 41 33 CI0BAT0...F._QA3 a1a0: 00 a0 4e 04 42 41 54 50 0a 00 70 42 43 4c 45 0a ..N.BATP..pBCLE. a1b0: 00 60 a0 17 93 60 0a 00 86 5c 2f 03 5f 53 42 5f .`...`...\/._SB_ a1c0: 50 43 49 30 42 41 54 30 0a 80 a1 25 86 5c 2f 03 PCI0BAT0...%.\/. a1d0: 5f 53 42 5f 50 43 49 30 42 41 54 30 0a 81 86 5c _SB_PCI0BAT0...\ a1e0: 2f 03 5f 53 42 5f 50 43 49 30 41 43 30 5f 0a 80 /._SB_PCI0AC0_.. a1f0: 14 21 42 41 54 50 09 a0 0d 68 a4 5c 2e 5f 53 42 .!BATP...h.\._SB a200: 5f 44 43 50 32 a1 0c a4 5c 2e 5f 53 42 5f 44 43 _DCP2...\._SB_DC a210: 50 46 14 1f 4e 42 41 54 01 a0 18 42 41 54 50 0a PF..NBAT...BATP. a220: 00 86 5c 2f 03 5f 53 42 5f 50 43 49 30 42 41 54 ..\/._SB_PCI0BAT a230: 30 68 10 44 11 5c 00 08 4d 45 53 34 00 14 4d 08 0h.D.\..MES4..M. a240: 4f 45 4d 53 01 a0 2d 93 68 0a 03 a0 19 92 94 5c OEMS..-.h......\ a250: 4f 53 46 47 5c 4f 53 4d 45 70 01 5c 2e 5f 53 42 OSFG\OSMEp.\._SB a260: 5f 57 49 44 45 a1 0d 70 00 5c 2e 5f 53 42 5f 57 _WIDE..p.\._SB_W a270: 49 44 45 53 42 52 53 68 5c 2f 05 5f 53 42 5f 50 IDESBRSh\/._SB_P a280: 43 49 30 53 42 52 47 45 43 30 5f 45 43 30 53 68 CI0SBRGEC0_EC0Sh a290: 70 68 5c 2e 5f 53 42 5f 53 4c 50 4e 5c 44 49 41 ph\._SB_SLPN\DIA a2a0: 47 72 68 0a d0 00 50 50 52 4a 68 70 68 5c 2e 5f Grh...PPRJhph\._ a2b0: 53 42 5f 53 4c 50 54 a0 08 68 53 54 52 50 0a 01 SB_SLPT..hSTRP.. a2c0: 50 52 4a 53 68 49 53 4d 49 0a 9d 14 4b 07 4f 45 PRJShISMI...K.OE a2d0: 4d 57 01 49 53 4d 49 0a 9e 70 00 5c 2e 5f 53 42 MW.ISMI..p.\._SB a2e0: 5f 53 4c 50 54 5c 2f 05 5f 53 42 5f 50 43 49 30 _SLPT\/._SB_PCI0 a2f0: 53 42 52 47 45 43 30 5f 45 43 30 57 68 a0 22 93 SBRGEC0_EC0Wh.". a300: 68 0a 04 a0 14 92 94 5c 4f 53 46 47 5c 4f 53 4d h......\OSFG\OSM a310: 45 70 0a 02 4d 45 53 34 a1 07 70 00 4d 45 53 34 Ep..MES4..p.MES4 a320: 53 42 52 57 68 a0 12 93 68 0a 04 86 5c 2e 5f 53 SBRWh...h...\._S a330: 42 5f 53 4c 50 42 0a 02 50 52 4a 57 68 5c 44 49 B_SLPB..PRJWh\DI a340: 41 47 72 68 0a f0 00 10 4e 50 5c 5f 53 42 5f 5b AGrh....NP\_SB_[ a350: 82 45 50 50 54 49 44 08 43 41 44 52 0a 00 08 57 .EPPTID.CADR...W a360: 4c 45 4e 0a 00 08 52 4c 45 4e 0a 00 08 43 41 4d LEN...RLEN...CAM a370: 44 0a 00 08 4f 42 55 46 11 03 0a 10 08 49 42 55 D...OBUF.....IBU a380: 46 11 03 0a 0f 08 45 52 52 4e 0a 00 08 5f 48 49 F.....ERRN..._HI a390: 44 0c 25 d4 34 0e 08 5f 43 49 44 0c 41 d0 0c 02 D.%.4.._CID.A... a3a0: 08 49 56 45 52 0c 00 00 03 00 08 54 53 44 4c 12 .IVER......TSDL. a3b0: 28 04 0a 00 0d 43 50 55 20 54 65 6d 70 65 72 61 (....CPU Tempera a3c0: 74 75 72 65 00 0a 05 0d 50 43 48 20 54 65 6d 70 ture....PCH Temp a3d0: 65 72 61 74 75 72 65 00 08 54 4d 50 56 12 0c 02 erature..TMPV... a3e0: 0c 00 00 00 80 0c 00 00 00 80 08 50 53 44 4c 12 ...........PSDL. a3f0: 1c 04 0a 00 0d 43 50 55 20 50 6f 77 65 72 00 0a .....CPU Power.. a400: 01 0d 47 66 78 20 50 6f 77 65 72 00 08 50 57 52 ..Gfx Power..PWR a410: 56 12 0c 02 0c 00 00 00 80 0c 00 00 00 80 08 4f V..............O a420: 53 44 4c 12 2a 06 0a 04 0d 46 61 6e 20 52 50 4d SDL.*....Fan RPM a430: 00 0d 52 50 4d 00 0a 0c 0d 42 61 74 74 65 72 79 ..RPM....Battery a440: 20 43 61 70 61 63 69 79 00 0d 6d 41 68 00 08 4f Capaciy..mAh..O a450: 53 44 56 12 0c 02 0c 00 00 00 80 0c 00 00 00 80 SDV............. a460: 14 45 06 54 53 44 44 00 08 54 4d 50 43 0a 00 70 .E.TSDD..TMPC..p a470: 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 52 47 45 \/._SB_PCI0SBRGE a480: 43 30 5f 45 43 50 55 54 4d 50 43 70 54 4d 50 43 C0_ECPUTMPCpTMPC a490: 88 54 4d 50 56 0a 00 00 70 5c 2f 05 5f 53 42 5f .TMPV...p\/._SB_ a4a0: 50 43 49 30 53 42 52 47 45 43 30 5f 45 43 50 55 PCI0SBRGEC0_ECPU a4b0: 54 4d 50 43 70 54 4d 50 43 88 54 4d 50 56 0a 01 TMPCpTMPC.TMPV.. a4c0: 00 a4 54 4d 50 56 14 08 50 57 52 47 00 a4 ff 14 ..TMPV..PWRG.... a4d0: 3e 50 53 44 44 00 08 50 57 52 43 0a 00 70 50 57 >PSDD..PWRC..pPW a4e0: 52 47 50 57 52 43 70 50 57 52 43 88 50 57 52 56 RGPWRCpPWRC.PWRV a4f0: 0a 00 00 70 50 57 52 47 50 57 52 43 70 50 57 52 ...pPWRGPWRCpPWR a500: 43 88 50 57 52 56 0a 01 00 a4 50 57 52 56 14 08 C.PWRV....PWRV.. a510: 4f 53 44 47 00 a4 ff 14 3e 4f 53 44 44 00 08 4f OSDG....>OSDD..O a520: 53 44 43 0a 00 70 4f 53 44 47 4f 53 44 43 70 4f SDC..pOSDGOSDCpO a530: 53 44 43 88 4f 53 44 56 0a 00 00 70 4f 53 44 47 SDC.OSDV...pOSDG a540: 4f 53 44 43 70 4f 53 44 43 88 4f 53 44 56 0a 01 OSDCpOSDC.OSDV.. a550: 00 a4 4f 53 44 56 14 09 53 44 53 50 00 a4 0a 0a ..OSDV..SDSP.... a560: 08 4d 42 4f 58 11 03 0a 1a 08 50 41 44 41 12 2e .MBOX.....PADA.. a570: 0a 0a 01 0c ff ff ff ff 0c ff ff ff ff 0a 1a 0c ................ a580: ff ff ff ff 0c ff ff ff ff 0c ff ff ff ff 0c ff ................ a590: ff ff ff 0c ff ff ff ff 0c ff ff ff ff 08 50 41 ..............PA a5a0: 44 44 12 18 0a 0a 02 0b 71 02 0b 70 02 0a 1a 0a DD......q..p.... a5b0: 62 0a 63 0a 60 0a 61 0a 65 0a 64 14 31 50 41 44 b.c.`.a.e.d.1PAD a5c0: 54 00 7b 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 T.{\/._SB_PCI0SB a5d0: 52 47 45 43 30 5f 50 42 53 59 0a 80 60 a0 0a 93 RGEC0_PBSY..`... a5e0: 60 0a 00 a4 50 41 44 44 a4 50 41 44 41 14 3c 52 `...PADD.PADA.\._SB_A a860: 54 4b 44 14 43 13 41 47 46 4e 09 a0 10 93 68 0a TKD.C.AGFN....h. a870: 00 a4 5c 2e 5f 53 42 5f 47 4e 42 46 70 0a 00 60 ..\._SB_GNBFp..` a880: 5b 80 5c 50 41 52 4d 00 68 0a 08 5b 81 20 5c 50 [.\PARM.h..[. \P a890: 41 52 4d 03 4d 46 55 4e 10 53 46 55 4e 10 4c 45 ARM.MFUN.SFUN.LE a8a0: 4e 5f 10 53 54 41 53 08 45 52 4f 52 08 70 0a 00 N_.STAS.EROR.p.. a8b0: 45 52 4f 52 70 0a 01 53 54 41 53 a0 18 93 4d 46 ERORp..STAS...MF a8c0: 55 4e 0a 02 42 53 4d 49 68 7b 53 54 41 53 0a fe UN..BSMIh{STAS.. a8d0: 53 54 41 53 7b 4d 46 55 4e 0a f0 60 a0 16 93 60 STAS{MFUN..`...` a8e0: 0a 10 4d 46 31 58 68 4c 45 4e 5f 4d 46 55 4e 53 ..MF1XhLEN_MFUNS a8f0: 46 55 4e a0 20 93 4d 46 55 4e 0a 42 4d 46 34 32 FUN. .MFUN.BMF42 a900: 68 53 46 55 4e 4c 45 4e 5f 7b 53 54 41 53 0a fe hSFUNLEN_{STAS.. a910: 53 54 41 53 a0 1c 93 4d 46 55 4e 0a 01 47 56 45 STAS...MFUN..GVE a920: 52 68 4c 45 4e 5f 7b 53 54 41 53 0a fe 53 54 41 RhLEN_{STAS..STA a930: 53 a0 20 93 4d 46 55 4e 0a 30 4d 46 33 30 68 53 S. .MFUN.0MF30hS a940: 46 55 4e 4c 45 4e 5f 7b 53 54 41 53 0a fe 53 54 FUNLEN_{STAS..ST a950: 41 53 41 47 4c 4e 68 4d 46 55 4e 53 46 55 4e 4c ASAGLNhMFUNSFUNL a960: 45 4e 5f a0 1a 93 53 54 41 53 0a 01 70 0a 01 45 EN_...STAS..p..E a970: 52 4f 52 7d 53 54 41 53 0a 02 53 54 41 53 7b 53 ROR}STAS..STAS{S a980: 54 41 53 0a fe 53 54 41 53 7d 53 54 41 53 0a 80 TAS..STAS}STAS.. a990: 53 54 41 53 a4 0a 00 14 29 47 56 45 52 02 5b 80 STAS....)GVER.[. a9a0: 5c 46 47 56 52 00 68 69 5b 81 14 5c 46 47 56 52 \FGVR.hi[..\FGVR a9b0: 03 00 40 04 41 50 49 44 10 41 50 52 56 20 a4 0a ..@.APID.APRV .. a9c0: 00 14 45 07 4d 46 33 30 03 5b 80 46 4d 33 30 00 ..E.MF30.[.FM30. a9d0: 68 0a 08 5b 81 12 46 4d 33 30 03 00 30 53 4d 33 h..[..FM30..0SM3 a9e0: 30 08 45 4d 33 30 08 70 0a 01 60 a0 0d 93 69 0a 0.EM30.p..`...i. a9f0: 00 70 47 33 30 56 68 6a 60 a0 0d 93 69 0a 01 70 .pG30Vhj`...i..p aa00: 45 43 30 31 68 6a 60 a0 0d 93 69 0a 02 70 45 43 EC01hj`...i..pEC aa10: 30 32 68 6a 60 a0 13 60 70 60 45 4d 33 30 7d 53 02hj`..`p`EM30}S aa20: 4d 33 30 0a 02 53 4d 33 30 7d 53 4d 33 30 0a 80 M30..SM30}SM30.. aa30: 53 4d 33 30 a4 0a 00 14 41 04 47 33 30 56 02 a0 SM30....A.G30V.. aa40: 08 95 69 0a 0c a4 0a 02 5b 80 5c 46 33 30 30 00 ..i.....[.\F300. aa50: 68 69 5b 81 14 5c 46 33 30 30 03 00 40 04 53 56 hi[..\F300..@.SV aa60: 45 52 10 4d 56 45 52 10 70 0a 00 4d 56 45 52 70 ER.MVER.p..MVERp aa70: 0a 00 53 56 45 52 a4 0a 00 14 41 0b 45 43 30 31 ..SVER....A.EC01 aa80: 02 a0 08 95 69 0a 10 a4 0a 02 5b 80 46 45 43 31 ....i.....[.FEC1 aa90: 00 68 69 5b 81 27 46 45 43 31 03 00 40 04 45 43 .hi[.'FEC1..@.EC aaa0: 4d 44 08 45 44 41 31 08 45 44 41 32 08 45 44 41 MD.EDA1.EDA2.EDA aab0: 33 08 45 44 41 34 08 45 44 41 35 08 70 5c 2f 05 3.EDA4.EDA5.p\/. aac0: 5f 53 42 5f 50 43 49 30 53 42 52 47 45 43 30 5f _SB_PCI0SBRGEC0_ aad0: 45 43 58 54 45 43 4d 44 45 44 41 31 45 44 41 32 ECXTECMDEDA1EDA2 aae0: 45 44 41 33 45 44 41 34 45 44 41 35 60 70 83 88 EDA3EDA4EDA5`p.. aaf0: 60 0a 01 00 45 44 41 31 70 83 88 60 0a 02 00 45 `...EDA1p..`...E ab00: 44 41 32 70 83 88 60 0a 03 00 45 44 41 33 70 83 DA2p..`...EDA3p. ab10: 88 60 0a 04 00 45 44 41 34 70 83 88 60 0a 05 00 .`...EDA4p..`... ab20: 45 44 41 35 a4 83 88 60 0a 00 00 14 49 0e 45 43 EDA5...`....I.EC ab30: 30 32 02 a0 08 95 69 0a 30 a4 0a 02 5b 80 46 45 02....i.0...[.FE ab40: 43 32 00 68 69 5b 81 37 46 45 43 32 03 00 40 04 C2.hi[.7FEC2..@. ab50: 42 55 53 4e 08 50 52 4f 54 08 44 41 44 44 08 44 BUSN.PROT.DADD.D ab60: 52 45 47 08 44 41 54 30 08 44 41 54 31 08 42 4c REG.DAT0.DAT1.BL ab70: 45 4e 08 52 45 56 42 08 42 4c 4b 4b 40 10 70 12 EN.REVB.BLKK@.p. ab80: 08 02 0a 00 11 03 0a 20 61 70 42 4c 45 4e 88 61 ....... apBLEN.a ab90: 0a 00 00 70 42 4c 4b 4b 88 61 0a 01 00 70 5c 2f ...pBLKK.a...p\/ aba0: 05 5f 53 42 5f 50 43 49 30 53 42 52 47 45 43 30 ._SB_PCI0SBRGEC0 abb0: 5f 45 43 53 42 42 55 53 4e 50 52 4f 54 44 41 44 _ECSBBUSNPROTDAD abc0: 44 44 52 45 47 44 41 54 30 44 41 54 31 61 60 a0 DDREGDAT0DAT1a`. abd0: 36 93 83 88 60 0a 00 00 0a 00 70 83 88 60 0a 01 6...`.....p..`.. abe0: 00 44 41 54 30 70 83 88 60 0a 02 00 44 41 54 31 .DAT0p..`...DAT1 abf0: 70 83 88 60 0a 03 00 42 4c 45 4e 70 83 88 60 0a p..`...BLENp..`. ac00: 04 00 42 4c 4b 4b 70 83 88 60 0a 00 00 62 7b 62 ..BLKKp..`...b{b ac10: 0a 3f 62 a4 62 14 13 47 45 4e 57 01 70 0a 00 5c .?b.b..GENW.p..\ ac20: 2e 5f 53 42 5f 52 54 43 57 14 18 42 53 4d 49 09 ._SB_RTCW..BSMI. ac30: 70 68 5c 2e 5f 53 42 5f 42 49 50 41 49 53 4d 49 ph\._SB_BIPAISMI ac40: 0a a1 10 81 3b 01 5c 2e 5f 53 42 5f 41 54 4b 44 ....;.\._SB_ATKD ac50: 14 48 0f 4d 46 31 58 04 5b 80 46 4d 31 58 00 68 .H.MF1X.[.FM1X.h ac60: 0a 08 5b 81 12 46 4d 31 58 03 00 30 53 4d 31 58 ..[..FM1X..0SM1X ac70: 08 45 4d 31 58 08 70 0a 01 60 a0 0e 93 6a 0a 10 .EM1X.p..`...j.. ac80: 70 4d 46 31 30 68 69 6b 60 a0 0e 93 6a 0a 11 70 pMF10hik`...j..p ac90: 4d 46 31 31 68 69 6b 60 a0 0e 93 6a 0a 12 70 4d MF11hik`...j..pM aca0: 46 31 32 68 69 6b 60 a0 0e 93 6a 0a 13 70 4d 46 F12hik`...j..pMF acb0: 31 33 68 69 6b 60 a0 0e 93 6a 0a 14 70 4d 46 31 13hik`...j..pMF1 acc0: 34 68 69 6b 60 a0 0e 93 6a 0a 15 70 4d 46 31 35 4hik`...j..pMF15 acd0: 68 69 6b 60 a0 0e 93 6a 0a 16 70 4d 46 31 36 68 hik`...j..pMF16h ace0: 69 6b 60 a0 0e 93 6a 0a 17 70 4d 46 31 37 68 69 ik`...j..pMF17hi acf0: 6b 60 a0 0e 93 6a 0a 18 70 4d 46 31 38 68 69 6b k`...j..pMF18hik ad00: 60 a0 0e 93 6a 0a 19 70 4d 46 31 39 68 69 6b 60 `...j..pMF19hik` ad10: a0 0e 93 6a 0a 1f 70 4d 46 31 46 68 69 6b 60 7b ...j..pMF1Fhik`{ ad20: 53 4d 31 58 0a fe 53 4d 31 58 a0 13 60 70 60 45 SM1X..SM1X..`p`E ad30: 4d 31 58 7d 53 4d 31 58 0a 02 53 4d 31 58 7d 53 M1X}SM1X..SM1X}S ad40: 4d 31 58 0a 80 53 4d 31 58 14 28 4d 46 31 30 03 M1X..SM1X.(MF10. ad50: 70 0a 01 60 a0 0d 93 6a 0a 00 70 47 31 30 56 68 p..`...j..pG10Vh ad60: 69 60 a0 0d 93 6a 0a 01 70 53 52 54 43 68 69 60 i`...j..pSRTChi` ad70: a4 60 14 41 04 47 31 30 56 02 a0 08 95 69 0a 0c .`.A.G10V....i.. ad80: a4 0a 02 5b 80 5c 46 31 30 30 00 68 69 5b 81 14 ...[.\F100.hi[.. ad90: 5c 46 31 30 30 03 00 40 04 53 56 45 52 10 4d 56 \F100..@.SVER.MV ada0: 45 52 10 70 0a 00 4d 56 45 52 70 0a 00 53 56 45 ER.p..MVERp..SVE adb0: 52 a4 0a 00 14 3c 53 52 54 43 02 a0 08 95 69 0a R....G b590: 56 53 56 02 a0 08 95 69 0a 0b a4 0a 02 5b 80 5c VSV....i.....[.\ b5a0: 46 31 33 34 00 68 69 5b 81 14 5c 46 31 33 34 03 F134.hi[..\F134. b5b0: 00 40 04 56 53 4e 4d 08 56 53 56 4c 10 a0 0b 94 .@.VSNM.VSVL.... b5c0: 56 53 4e 4d 0a 00 a4 0a 10 a4 0a 00 14 34 47 46 VSNM.........4GF b5d0: 4e 4e 02 a0 08 95 69 0a 09 a4 0a 02 5b 80 5c 46 NN....i.....[.\F b5e0: 31 33 35 00 68 69 5b 81 0f 5c 46 31 33 35 03 00 135.hi[..\F135.. b5f0: 40 04 4e 4d 46 4e 20 70 0a 01 4e 4d 46 4e a4 0a @.NMFN p..NMFN.. b600: 00 14 4f 05 47 46 4e 53 02 a0 08 95 69 0a 0d a4 ..O.GFNS....i... b610: 0a 02 5b 80 5c 46 31 33 36 00 68 69 5b 81 14 5c ..[.\F136.hi[..\ b620: 46 31 33 36 03 00 40 04 46 4e 4e 4d 08 47 46 4e F136..@.FNNM.GFN b630: 53 20 a0 14 7d 93 46 4e 4e 4d 0a 00 94 46 4e 4e S ..}.FNNM...FNN b640: 4d 0a 01 00 a4 0a 10 70 46 4e 4e 4d 60 70 5c 2e M......pFNNM`p\. b650: 5f 54 5a 5f 52 46 41 4e 76 60 47 46 4e 53 a4 0a _TZ_RFANv`GFNS.. b660: 00 14 4e 05 53 46 4e 53 02 a0 08 95 69 0a 0a a4 ..N.SFNS....i... b670: 0a 02 5b 80 5c 46 31 33 37 00 68 69 5b 81 14 5c ..[.\F137.hi[..\ b680: 46 31 33 37 03 00 40 04 46 4e 4e 42 08 46 4e 53 F137..@.FNNB.FNS b690: 50 08 a0 0b 94 46 4e 4e 42 0a 01 a4 0a 10 5c 2f P....FNNB.....\/ b6a0: 05 5f 53 42 5f 50 43 49 30 53 42 52 47 45 43 30 ._SB_PCI0SBRGEC0 b6b0: 5f 53 46 4e 56 46 4e 4e 42 46 4e 53 50 a4 0a 00 _SFNVFNNBFNSP... b6c0: 14 36 4d 46 31 34 03 70 0a 01 60 a0 0d 93 6a 0a .6MF14.p..`...j. b6d0: 00 70 47 31 34 56 68 69 60 a0 0d 93 6a 0a 01 70 .pG14Vhi`...j..p b6e0: 47 4e 42 54 68 69 60 a0 0d 93 6a 0a 02 70 47 42 GNBThi`...j..pGB b6f0: 54 53 68 69 60 a4 60 14 41 04 47 31 34 56 02 a0 TShi`.`.A.G14V.. b700: 08 95 69 0a 0c a4 0a 02 5b 80 5c 46 31 34 30 00 ..i.....[.\F140. b710: 68 69 5b 81 14 5c 46 31 34 30 03 00 40 04 53 56 hi[..\F140..@.SV b720: 45 52 10 4d 56 45 52 10 70 0a 00 4d 56 45 52 70 ER.MVER.p..MVERp b730: 0a 00 53 56 45 52 a4 0a 00 14 34 47 4e 42 54 02 ..SVER....4GNBT. b740: a0 08 95 69 0a 09 a4 0a 02 5b 80 5c 46 31 34 31 ...i.....[.\F141 b750: 00 68 69 5b 81 0f 5c 46 31 34 31 03 00 40 04 4e .hi[..\F141..@.N b760: 42 42 54 08 70 0a 05 4e 42 42 54 a4 0a 00 14 4f BBT.p..NBBT....O b770: 0e 47 42 54 53 02 a0 08 95 69 0a 0a a4 0a 02 5b .GBTS....i.....[ b780: 80 5c 46 31 34 32 00 68 69 5b 81 14 5c 46 31 34 .\F142.hi[..\F14 b790: 32 03 00 40 04 42 54 4e 4d 08 42 54 53 54 08 08 2..@.BTNM.BTST.. b7a0: 42 54 54 42 12 2f 05 12 08 03 0a 0c 0a 00 0a 00 BTTB./.......... b7b0: 12 08 03 0a 0d 0a 00 0a 00 12 08 03 0a 0e 0a 00 ................ b7c0: 0a 00 12 08 03 0a 0f 0a 00 0a 00 12 08 03 0a 15 ................ b7d0: 0a 00 0a 00 a0 0b 94 42 54 4e 4d 0a 05 a4 0a 10 .......BTNM..... b7e0: 70 42 54 4e 4d 60 76 60 70 83 88 42 54 54 42 60 pBTNM`v`p..BTTB` b7f0: 00 61 a0 29 93 83 88 61 0a 01 00 0a 00 70 5c 2f .a.)...a.....p\/ b800: 05 5f 53 42 5f 50 43 49 30 53 42 52 47 45 43 30 ._SB_PCI0SBRGEC0 b810: 5f 52 50 49 4e 83 88 61 0a 00 00 62 a0 19 93 83 _RPIN..a...b.... b820: 88 61 0a 01 00 0a 01 70 5c 52 47 50 4c 83 88 61 .a.....p\RGPL..a b830: 0a 00 00 0a 01 62 a0 0a 93 83 88 61 0a 01 00 0a .....b.....a.... b840: 03 a0 10 93 83 88 61 0a 02 00 62 70 0a 00 42 54 ......a...bp..BT b850: 53 54 a1 08 70 0a 01 42 54 53 54 a4 0a 00 14 43 ST..p..BTST....C b860: 05 4d 46 31 35 03 70 0a 01 60 a0 0d 93 6a 0a 00 .MF15.p..`...j.. b870: 70 47 31 35 56 68 69 60 a0 0d 93 6a 0a 01 70 47 pG15Vhi`...j..pG b880: 4c 44 42 68 69 60 a0 0d 93 6a 0a 02 70 53 4c 44 LDBhi`...j..pSLD b890: 42 68 69 60 a0 0d 93 6a 0a 03 70 47 44 50 49 68 Bhi`...j..pGDPIh b8a0: 69 60 a0 0d 93 6a 0a 04 70 53 4f 44 50 68 69 60 i`...j..pSODPhi` b8b0: a4 60 14 41 04 47 31 35 56 02 a0 08 95 69 0a 0c .`.A.G15V....i.. b8c0: a4 0a 02 5b 80 5c 46 31 35 30 00 68 69 5b 81 14 ...[.\F150.hi[.. b8d0: 5c 46 31 35 30 03 00 40 04 53 56 45 52 10 4d 56 \F150..@.SVER.MV b8e0: 45 52 10 70 0a 00 4d 56 45 52 70 0a 00 53 56 45 ER.p..MVERp..SVE b8f0: 52 a4 0a 00 14 43 04 47 4c 44 42 02 a0 08 95 69 R....C.GLDB....i b900: 0a 0a a4 0a 02 5b 80 5c 46 31 35 31 00 68 69 5b .....[.\F151.hi[ b910: 81 14 5c 46 31 35 31 03 00 40 04 4c 43 44 42 08 ..\F151..@.LCDB. b920: 4d 4c 44 42 08 70 47 50 4c 56 4c 43 44 42 70 0a MLDB.pGPLVLCDBp. b930: 0b 4d 4c 44 42 a4 0a 00 14 4a 07 53 4c 44 42 02 .MLDB....J.SLDB. b940: a0 08 95 69 0a 0a a4 0a 02 5b 80 5c 46 31 35 32 ...i.....[.\F152 b950: 00 68 69 5b 81 14 5c 46 31 35 32 03 00 40 04 4c .hi[..\F152..@.L b960: 43 44 4c 08 4c 54 50 45 08 a0 1f 93 4c 54 50 45 CDL.LTPE....LTPE b970: 0a 00 a0 0b 94 4c 43 44 4c 0a 0b a4 0a 10 53 50 .....LCDL.....SP b980: 4c 56 4c 43 44 4c a4 0a 00 a0 26 93 4c 54 50 45 LVLCDL....&.LTPE b990: 0a 01 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 52 ..\/._SB_PCI0SBR b9a0: 47 45 43 30 5f 53 42 52 56 4c 43 44 4c a4 0a 00 GEC0_SBRVLCDL... b9b0: a4 0a 11 14 4c 04 47 44 50 49 02 a0 08 95 69 0a ....L.GDPI....i. b9c0: 10 a4 0a 02 5b 80 5c 46 31 35 33 00 68 69 5b 81 ....[.\F153.hi[. b9d0: 14 5c 46 31 35 33 03 00 40 04 4f 44 50 49 20 4f .\F153..@.ODPI O b9e0: 44 50 43 08 70 0a 00 60 7d 60 0a 01 60 7d 60 0a DPC.p..`}`..`}`. b9f0: 02 60 70 60 4f 44 50 49 42 53 4d 49 68 a4 0a 00 .`p`ODPIBSMIh... ba00: 14 46 05 53 4f 44 50 02 a0 08 95 69 0a 0c a4 0a .F.SODP....i.... ba10: 02 5b 80 5c 46 31 35 34 00 68 69 5b 81 0f 5c 46 .[.\F154.hi[..\F ba20: 31 35 34 03 00 40 04 4f 44 50 4d 20 70 0a 00 60 154..@.ODPM p..` ba30: 7d 60 0a 01 60 7d 60 0a 02 60 7b 4f 44 50 4d 60 }`..`}`..`{ODPM` ba40: 60 a0 12 93 60 4f 44 50 4d 53 44 53 50 4f 44 50 `...`ODPMSDSPODP ba50: 4d a4 0a 00 a4 0a 10 14 36 4d 46 31 36 03 70 0a M.......6MF16.p. ba60: 01 60 a0 0d 93 6a 0a 00 70 47 31 36 56 68 69 60 .`...j..pG16Vhi` ba70: a0 0d 93 6a 0a 01 70 53 46 42 44 68 69 60 a0 0d ...j..pSFBDhi`.. ba80: 93 6a 0a 02 70 4c 43 4d 44 68 69 60 a4 60 14 41 .j..pLCMDhi`.`.A ba90: 04 47 31 36 56 02 a0 08 95 69 0a 0c a4 0a 02 5b .G16V....i.....[ baa0: 80 5c 46 31 36 30 00 68 69 5b 81 14 5c 46 31 36 .\F160.hi[..\F16 bab0: 30 03 00 40 04 53 56 45 52 10 4d 56 45 52 10 70 0..@.SVER.MVER.p bac0: 0a 00 4d 56 45 52 70 0a 00 53 56 45 52 a4 0a 00 ..MVERp..SVER... bad0: 14 4c 04 53 46 42 44 02 a0 08 95 69 0a 0a a4 0a .L.SFBD....i.... bae0: 02 5b 80 5c 46 31 36 31 00 68 69 5b 81 0f 5c 46 .[.\F161.hi[..\F baf0: 31 36 31 03 00 40 04 4e 58 42 44 08 a0 1b 4f 46 161..@.NXBD...OF bb00: 42 44 4e 58 42 44 70 4e 58 42 44 5c 2e 5f 53 42 BDNXBDpNXBD\._SB bb10: 5f 55 48 44 42 a4 0a 00 a1 04 a4 0a 10 14 17 4c _UHDB..........L bb20: 43 4d 44 02 a0 08 95 69 0a 0a a4 0a 02 42 53 4d CMD....i.....BSM bb30: 49 68 a4 0a 00 14 45 04 4d 46 31 37 03 70 0a 01 Ih....E.MF17.p.. bb40: 60 a0 0d 93 6a 0a 00 70 47 31 37 56 68 69 60 a0 `...j..pG17Vhi`. bb50: 0d 93 6a 0a 01 70 47 4d 44 4c 68 69 60 a0 0d 93 ..j..pGMDLhi`... bb60: 6a 0a 02 70 47 42 53 49 68 69 60 a0 0d 93 6a 0a j..pGBSIhi`...j. bb70: 03 70 47 45 43 49 68 69 60 a4 60 14 41 04 47 31 .pGECIhi`.`.A.G1 bb80: 37 56 02 a0 08 95 69 0a 0c a4 0a 02 5b 80 5c 46 7V....i.....[.\F bb90: 31 37 30 00 68 69 5b 81 14 5c 46 31 37 30 03 00 170.hi[..\F170.. bba0: 40 04 53 56 45 52 10 4d 56 45 52 10 70 0a 00 4d @.SVER.MVER.p..M bbb0: 56 45 52 70 0a 00 53 56 45 52 a4 0a 00 14 4d 0c VERp..SVER....M. bbc0: 47 4d 44 4c 02 a0 08 95 69 0a 19 a4 0a 02 5b 80 GMDL....i.....[. bbd0: 5c 46 31 37 31 00 68 69 5b 81 23 5c 46 31 37 31 \F171.hi[.#\F171 bbe0: 03 00 40 04 4d 4c 45 4e 08 4d 44 4c 31 20 4d 44 ..@.MLEN.MDL1 MD bbf0: 4c 32 20 4d 44 4c 33 20 4d 44 4c 34 20 70 0a 00 L2 MDL3 MDL4 p.. bc00: 4d 44 4c 31 70 0a 00 4d 44 4c 32 70 0a 00 4d 44 MDL1p..MDL2p..MD bc10: 4c 33 70 0a 00 4d 44 4c 34 08 42 42 55 46 11 03 L3p..MDL4.BBUF.. bc20: 0a 10 8a 42 42 55 46 0a 00 44 41 54 31 8a 42 42 ...BBUF..DAT1.BB bc30: 55 46 0a 04 44 41 54 32 8a 42 42 55 46 0a 08 44 UF..DAT2.BBUF..D bc40: 41 54 33 8a 42 42 55 46 0a 0c 44 41 54 34 70 47 AT3.BBUF..DAT4pG bc50: 42 4d 4e 60 70 87 60 4d 4c 45 4e 70 47 42 4d 4e BMN`p.`MLENpGBMN bc60: 42 42 55 46 70 44 41 54 31 4d 44 4c 31 70 44 41 BBUFpDAT1MDL1pDA bc70: 54 32 4d 44 4c 32 70 44 41 54 33 4d 44 4c 33 70 T2MDL2pDAT3MDL3p bc80: 44 41 54 34 4d 44 4c 34 a4 0a 00 14 4d 0c 47 42 DAT4MDL4....M.GB bc90: 53 49 02 a0 08 95 69 0a 19 a4 0a 02 5b 80 5c 46 SI....i.....[.\F bca0: 31 37 32 00 68 69 5b 81 23 5c 46 31 37 32 03 00 172.hi[.#\F172.. bcb0: 40 04 42 4c 45 4e 08 42 44 4c 31 20 42 44 4c 32 @.BLEN.BDL1 BDL2 bcc0: 20 42 44 4c 33 20 42 44 4c 34 20 70 0a 00 42 44 BDL3 BDL4 p..BD bcd0: 4c 31 70 0a 00 42 44 4c 32 70 0a 00 42 44 4c 33 L1p..BDL2p..BDL3 bce0: 70 0a 00 42 44 4c 34 08 42 42 55 46 11 03 0a 10 p..BDL4.BBUF.... bcf0: 8a 42 42 55 46 0a 00 44 41 54 31 8a 42 42 55 46 .BBUF..DAT1.BBUF bd00: 0a 04 44 41 54 32 8a 42 42 55 46 0a 08 44 41 54 ..DAT2.BBUF..DAT bd10: 33 8a 42 42 55 46 0a 0c 44 41 54 34 70 47 42 52 3.BBUF..DAT4pGBR bd20: 56 60 70 87 60 42 4c 45 4e 70 47 42 52 56 42 42 V`p.`BLENpGBRVBB bd30: 55 46 70 44 41 54 31 42 44 4c 31 70 44 41 54 32 UFpDAT1BDL1pDAT2 bd40: 42 44 4c 32 70 44 41 54 33 42 44 4c 33 70 44 41 BDL2pDAT3BDL3pDA bd50: 54 34 42 44 4c 34 a4 0a 00 14 43 06 47 45 43 49 T4BDL4....C.GECI bd60: 02 a0 08 95 69 0a 19 a4 0a 02 5b 80 5c 46 31 37 ....i.....[.\F17 bd70: 33 00 68 69 5b 81 23 5c 46 31 37 33 03 00 40 04 3.hi[.#\F173..@. bd80: 45 4c 45 4e 08 45 44 4c 31 20 45 44 4c 32 20 45 ELEN.EDL1 EDL2 E bd90: 44 4c 33 20 45 44 4c 34 20 70 0a 00 45 44 4c 31 DL3 EDL4 p..EDL1 bda0: 70 0a 00 45 44 4c 32 70 0a 00 45 44 4c 33 70 0a p..EDL2p..EDL3p. bdb0: 00 45 44 4c 34 42 53 4d 49 68 a4 0a 00 14 45 04 .EDL4BSMIh....E. bdc0: 4d 46 31 38 03 70 0a 01 60 a0 0d 93 6a 0a 00 70 MF18.p..`...j..p bdd0: 47 31 38 56 68 69 60 a0 0d 93 6a 0a 01 70 47 44 G18Vhi`...j..pGD bde0: 56 49 68 69 60 a0 0d 93 6a 0a 02 70 47 44 56 53 VIhi`...j..pGDVS bdf0: 68 69 60 a0 0d 93 6a 0a 03 70 53 44 50 57 68 69 hi`...j..pSDPWhi be00: 60 a4 60 14 41 04 47 31 38 56 02 a0 08 95 69 0a `.`.A.G18V....i. be10: 0c a4 0a 02 5b 80 5c 46 31 38 30 00 68 69 5b 81 ....[.\F180.hi[. be20: 14 5c 46 31 38 30 03 00 40 04 53 56 45 52 10 4d .\F180..@.SVER.M be30: 56 45 52 10 70 0a 00 4d 56 45 52 70 0a 00 53 56 VER.p..MVERp..SV be40: 45 52 a4 0a 00 14 3b 47 44 56 49 02 a0 08 95 69 ER....;GDVI....i be50: 0a 18 a4 0a 02 5b 80 5c 46 31 38 31 00 68 69 5b .....[.\F181.hi[ be60: 81 14 5c 46 31 38 31 03 00 40 04 4c 44 49 30 20 ..\F181..@.LDI0 be70: 4c 44 49 31 20 70 46 45 42 4c 4c 44 49 30 a4 0a LDI1 pFEBLLDI0.. be80: 00 14 4a 04 47 44 56 53 02 a0 08 95 69 0a 0a a4 ..J.GDVS....i... be90: 0a 02 5b 80 5c 46 31 38 32 00 68 69 5b 81 14 5c ..[.\F182.hi[..\ bea0: 46 31 38 32 03 00 40 04 44 4e 55 4d 08 44 53 54 F182..@.DNUM.DST beb0: 53 08 79 0a 01 44 4e 55 4d 60 a0 0e 93 7b 60 46 S.y..DNUM`...{`F bec0: 45 42 4c 00 0a 00 a4 0a 10 a4 0a 00 14 46 05 53 EBL..........F.S bed0: 44 50 57 02 a0 08 95 69 0a 0a a4 0a 02 5b 80 5c DPW....i.....[.\ bee0: 46 31 38 33 00 68 69 5b 81 14 5c 46 31 38 33 03 F183.hi[..\F183. bef0: 00 40 04 44 4e 55 4d 08 44 43 54 52 08 79 0a 01 .@.DNUM.DCTR.y.. bf00: 44 4e 55 4d 60 a0 0e 93 7b 60 46 45 42 4c 00 0a DNUM`...{`FEBL.. bf10: 00 a4 0a 10 a0 0b 94 44 43 54 52 0a 01 a4 0a 11 .......DCTR..... bf20: a4 0a 00 14 36 4d 46 31 39 03 70 0a 01 60 a0 0d ....6MF19.p..`.. bf30: 93 6a 0a 00 70 47 31 39 56 68 69 60 a0 0d 93 6a .j..pG19Vhi`...j bf40: 0a 01 70 41 43 4d 53 68 69 60 a0 0d 93 6a 0a 02 ..pACMShi`...j.. bf50: 70 43 53 49 4e 68 69 60 a4 60 14 41 04 47 31 39 pCSINhi`.`.A.G19 bf60: 56 02 a0 08 95 69 0a 0c a4 0a 02 5b 80 5c 46 31 V....i.....[.\F1 bf70: 39 30 00 68 69 5b 81 14 5c 46 31 39 30 03 00 40 90.hi[..\F190..@ bf80: 04 53 56 45 52 10 4d 56 45 52 10 70 0a 00 4d 56 .SVER.MVER.p..MV bf90: 45 52 70 0a 00 53 56 45 52 a4 0a 00 14 0e 41 43 ERp..SVER.....AC bfa0: 4d 53 02 42 53 4d 49 68 a4 0a 00 14 39 43 53 49 MS.BSMIh....9CSI bfb0: 4e 02 a0 08 95 69 0a 0a a4 0a 02 5b 80 5c 46 31 N....i.....[.\F1 bfc0: 39 32 00 68 69 5b 81 0f 5c 46 31 39 32 03 00 40 92.hi[..\F192..@ bfd0: 04 43 4d 41 58 10 70 74 0b 00 01 0a 01 00 43 4d .CMAX.pt......CM bfe0: 41 58 a4 0a 00 14 0e 4d 46 31 46 03 42 53 4d 49 AX.....MF1F.BSMI bff0: 68 a4 0a 00 10 12 5c 2e 5f 53 42 5f 41 54 4b 44 h.....\._SB_ATKD c000: 14 06 41 47 4c 4e 04 10 49 1b 5c 2e 5f 53 42 5f ..AGLN..I.\._SB_ c010: 41 54 4b 44 14 49 04 4f 46 42 44 01 08 46 42 44 ATKD.I.OFBD..FBD c020: 54 12 2a 14 0a e0 0a e1 0a e2 0a e3 0a e4 0a e5 T.*............. c030: 0a e6 0a e7 0a e8 0a e9 0a ea 0a eb 0a ec 0a ed ................ c040: 0a ee 0a ef 0a f1 0a f2 0a f3 0a f6 70 89 46 42 ............p.FB c050: 44 54 01 68 00 0a 00 0a 00 60 75 60 a4 60 14 0f DT.h.....`u`.`.. c060: 47 42 52 56 00 70 0d 32 30 38 00 60 a4 60 14 11 GBRV.p.208.`.`.. c070: 47 42 4d 4e 00 70 0d 4b 34 33 53 41 00 60 a4 60 GBMN.p.K43SA.`.` c080: 14 0f 4f 47 44 50 01 70 68 60 70 0a 02 61 a4 61 ..OGDP.ph`p..a.a c090: 14 09 52 53 49 44 00 a4 0a 00 14 0c 4f 53 44 50 ..RSID......OSDP c0a0: 02 70 68 60 70 69 61 14 45 07 4d 46 34 32 03 5b .ph`pia.E.MF42.[ c0b0: 80 46 4d 34 32 00 68 0a 08 5b 81 12 46 4d 34 32 .FM42.h..[..FM42 c0c0: 03 00 30 53 4d 34 32 08 45 4d 34 32 08 70 0a 01 ..0SM42.EM42.p.. c0d0: 60 a0 0d 93 69 0a 01 70 53 46 42 4f 68 6a 60 a0 `...i..pSFBOhj`. c0e0: 0d 93 69 0a 02 70 53 41 4f 43 68 6a 60 a0 0d 93 ..i..pSAOChj`... c0f0: 69 0a 03 70 47 42 53 54 68 6a 60 a0 13 60 70 60 i..pGBSThj`..`p` c100: 45 4d 34 32 7d 53 4d 34 32 0a 02 53 4d 34 32 7d EM42}SM42..SM42} c110: 53 4d 34 32 0a 80 53 4d 34 32 a4 0a 00 14 24 53 SM42..SM42....$S c120: 46 42 4f 02 5b 80 5c 46 34 32 31 00 68 69 5b 81 FBO.[.\F421.hi[. c130: 0f 5c 46 34 32 31 03 00 40 04 53 4f 50 54 08 a4 .\F421..@.SOPT.. c140: 0a 00 14 24 53 41 4f 43 02 5b 80 5c 46 34 32 32 ...$SAOC.[.\F422 c150: 00 68 69 5b 81 0f 5c 46 34 32 32 03 00 40 04 43 .hi[..\F422..@.C c160: 4e 54 46 08 a4 0a 00 14 49 05 47 42 53 54 02 5b NTF.....I.GBST.[ c170: 80 5c 46 34 32 33 00 68 69 5b 81 16 5c 46 34 32 .\F423.hi[..\F42 c180: 33 03 00 40 04 42 4f 54 31 40 04 42 4f 54 32 40 3..@.BOT1@.BOT2@ c190: 04 70 54 42 4f 54 42 4f 54 31 70 52 54 43 33 60 .pTBOTBOT1pRTC3` c1a0: 79 60 0a 08 60 72 52 54 43 32 60 60 79 60 0a 08 y`..`rRTC2``y`.. c1b0: 60 72 52 54 43 31 60 60 70 60 42 4f 54 32 a4 0a `rRTC1``p`BOT2.. c1c0: 00 10 8f 4b 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ...K.\/._SB_PCI0 c1d0: 53 42 52 47 45 43 30 5f 14 28 47 42 54 54 09 a0 SBRGEC0_.(GBTT.. c1e0: 19 45 43 41 56 a0 0b 93 68 0a 00 70 45 42 30 54 .ECAV...h..pEB0T c1f0: 60 a1 07 70 45 42 31 54 60 a1 05 70 0a ff 60 a4 `..pEB1T`..p..`. c200: 60 14 20 57 43 4d 44 09 a0 19 45 43 41 56 5b 23 `. WCMD...ECAV[# c210: 4d 55 45 43 ff ff 70 68 43 4d 44 31 5b 27 4d 55 MUEC..phCMD1['MU c220: 45 43 14 4e 05 44 4c 59 30 09 a0 08 92 45 43 41 EC.N.DLY0....ECA c230: 56 a4 ff 70 ff 60 5b 23 4d 55 45 43 ff ff 70 68 V..p.`[#MUEC..ph c240: 43 44 54 31 70 0a 6b 43 44 54 32 70 0a 00 43 44 CDT1p.kCDT2p..CD c250: 54 33 70 0a bb 43 4d 44 31 70 0a 7f 61 a2 0d 90 T3p..CMD1p..a... c260: 61 43 4d 44 31 5b 22 0a 01 76 61 a0 0d 93 43 4d aCMD1["..va...CM c270: 44 31 00 70 43 44 54 31 60 5b 27 4d 55 45 43 a4 D1.pCDT1`['MUEC. c280: 60 14 41 07 52 52 41 4d 09 a0 47 06 45 43 41 56 `.A.RRAM..G.ECAV c290: 5b 23 4d 55 45 43 ff ff 70 68 60 7b 60 0a ff 61 [#MUEC..ph`{`..a c2a0: 7a 60 0a 08 60 7b 60 0a ff 60 70 61 43 44 54 33 z`..`{`..`paCDT3 c2b0: 70 60 43 44 54 32 70 0a 80 43 44 54 31 70 0a b6 p`CDT2p..CDT1p.. c2c0: 43 4d 44 31 70 0a 7f 60 a2 0d 90 60 43 4d 44 31 CMD1p..`...`CMD1 c2d0: 5b 22 0a 01 76 60 a0 0d 93 43 4d 44 31 00 70 43 ["..v`...CMD1.pC c2e0: 44 54 31 60 a1 04 70 ff 60 5b 27 4d 55 45 43 a4 DT1`..p.`['MUEC. c2f0: 60 a4 ff 14 44 07 57 52 41 4d 0a a0 4a 06 45 43 `...D.WRAM..J.EC c300: 41 56 5b 23 4d 55 45 43 ff ff 70 68 60 7b 60 0a AV[#MUEC..ph`{`. c310: ff 61 7a 60 0a 08 60 7b 60 0a ff 60 70 61 43 44 .az`..`{`..`paCD c320: 54 33 70 60 43 44 54 32 70 0a 81 43 44 54 31 70 T3p`CDT2p..CDT1p c330: 69 43 44 54 34 70 0a b6 43 4d 44 31 70 0a 7f 60 iCDT4p..CMD1p..` c340: a2 0d 90 60 43 4d 44 31 5b 22 0a 01 76 60 a0 0a ...`CMD1["..v`.. c350: 93 43 4d 44 31 00 70 01 60 a1 04 70 ff 60 5b 27 .CMD1.p.`..p.`[' c360: 4d 55 45 43 a4 60 a4 ff 14 48 05 53 54 42 52 08 MUEC.`...H.STBR. c370: 70 0a 00 60 70 0a 00 61 70 0a 00 62 a0 13 7b 5c p..`p..ap..b..{\ c380: 2e 5f 53 42 5f 56 47 41 46 0a 01 00 70 0a 01 60 ._SB_VGAF...p..` c390: a0 09 61 5c 49 53 4d 49 0a 9a a1 26 a0 1e 62 a0 ..a\ISMI...&..b. c3a0: 12 92 93 4f 53 46 47 4f 53 45 47 5c 49 53 4d 49 ...OSFGOSEG\ISMI c3b0: 0a 9a a1 08 5c 49 53 4d 49 0a 9a a1 05 45 43 43 ....\ISMI....ECC c3c0: 42 14 4f 04 45 43 43 42 08 a0 1b 91 41 43 41 50 B.O.ECCB....ACAP c3d0: 93 4f 53 46 47 4f 53 56 54 70 5c 2e 5f 53 42 5f .OSFGOSVTp\._SB_ c3e0: 4c 42 54 4e 60 a1 0d 70 5c 2e 5f 53 42 5f 4c 42 LBTN`..p\._SB_LB c3f0: 54 4e 60 70 42 52 54 49 61 79 61 0a 04 61 72 60 TN`pBRTIaya..ar` c400: 61 61 70 83 88 50 57 41 43 61 00 60 53 41 44 43 aap..PWACa.`SADC c410: 60 14 0d 53 42 52 56 09 53 54 38 36 0a 00 68 08 `..SBRV.ST86..h. c420: 44 45 43 46 0a 00 14 4d 0b 53 46 4e 56 0a a0 40 DECF...M.SFNV..@ c430: 05 93 68 0a 00 a0 1f 7b 44 45 43 46 0a 01 00 70 ..h....{DECF...p c440: 52 52 41 4d 0b 21 05 60 7d 60 0a 80 60 57 52 41 RRAM.!.`}`..`WRA c450: 4d 0b 21 05 60 a0 1f 7b 44 45 43 46 0a 02 00 70 M.!.`..{DECF...p c460: 52 52 41 4d 0b 22 05 60 7d 60 0a 80 60 57 52 41 RRAM.".`}`..`WRA c470: 4d 0b 22 05 60 70 0a 00 44 45 43 46 a4 0a 00 a0 M.".`p..DECF.... c480: 30 93 68 0a 01 70 52 52 41 4d 0b 21 05 60 7b 60 0.h..pRRAM.!.`{` c490: 0a 7f 60 57 52 41 4d 0b 21 05 60 7d 44 45 43 46 ..`WRAM.!.`}DECF c4a0: 0a 01 44 45 43 46 53 54 38 34 0a 00 69 a4 0a 00 ..DECFST84..i... c4b0: a0 30 93 68 0a 02 70 52 52 41 4d 0b 22 05 60 7b .0.h..pRRAM.".`{ c4c0: 60 0a 7f 60 57 52 41 4d 0b 22 05 60 7d 44 45 43 `..`WRAM.".`}DEC c4d0: 46 0a 02 44 45 43 46 53 54 38 34 0a 01 69 a4 0a F..DECFST84..i.. c4e0: 00 a4 0a 00 14 4f 05 53 41 44 43 09 a0 45 05 45 .....O.SADC..E.E c4f0: 43 41 56 5b 23 4d 55 45 43 ff ff 70 0a 86 43 44 CAV[#MUEC..p..CD c500: 54 31 70 00 43 44 54 32 70 68 43 44 54 33 70 0a T1p.CDT2phCDT3p. c510: b6 43 4d 44 31 70 0a 7f 60 a2 0d 90 60 43 4d 44 .CMD1p..`...`CMD c520: 31 5b 22 0a 01 76 60 a0 0d 93 43 4d 44 31 00 70 1["..v`...CMD1.p c530: 43 44 54 31 60 a1 04 70 ff 60 5b 27 4d 55 45 43 CDT1`..p.`['MUEC c540: a4 60 a4 ff 14 1b 53 50 49 4e 0a a0 09 69 53 54 .`....SPIN...iST c550: 38 37 0a 20 68 a1 08 53 54 38 37 0a 40 68 a4 01 87. h..ST87.@h.. c560: 14 11 52 50 49 4e 09 70 53 54 38 37 0a 00 68 61 ..RPIN.pST87..ha c570: a4 61 14 4e 06 52 42 41 54 0a a0 08 92 45 43 41 .a.N.RBAT....ECA c580: 56 a4 ff 5b 23 4d 55 45 43 ff ff 70 0a 03 60 a2 V..[#MUEC..p..`. c590: 47 04 60 70 68 43 44 54 32 70 69 61 79 61 0a 01 G.`phCDT2piaya.. c5a0: 61 72 61 0a da 61 70 61 43 4d 44 31 70 0a 7f 61 ara..apaCMD1p..a c5b0: a2 0d 90 43 4d 44 31 61 76 61 5b 22 0a 01 a0 11 ...CMD1ava[".... c5c0: 93 43 4d 44 31 0a 00 70 43 44 54 31 61 70 00 60 .CMD1..pCDT1ap.` c5d0: a1 06 70 ff 61 76 60 5b 27 4d 55 45 43 a4 61 a4 ..p.av`['MUEC.a. c5e0: ff 14 4f 05 57 42 41 54 0b 7d 68 0a 80 63 a0 08 ..O.WBAT.}h..c.. c5f0: 92 45 43 41 56 a4 ff 5b 23 4d 55 45 43 ff ff 70 .ECAV..[#MUEC..p c600: 0a 03 60 a2 33 60 70 6a 43 44 54 31 70 63 43 44 ..`.3`pjCDT1pcCD c610: 54 32 70 69 61 79 61 0a 01 61 72 61 0a da 61 70 T2piaya..ara..ap c620: 61 43 4d 44 31 70 0a 7f 61 a2 0d 90 43 4d 44 31 aCMD1p..a...CMD1 c630: 61 76 61 5b 22 0a 01 5b 27 4d 55 45 43 a4 61 a4 ava["..['MUEC.a. c640: ff 14 3f 46 4e 43 54 0a a0 38 45 43 41 56 5b 23 ..?FNCT..8ECAV[# c650: 4d 55 45 43 ff ff 70 68 43 44 54 32 70 69 43 44 MUEC..phCDT2piCD c660: 54 31 70 0a c4 43 4d 44 31 70 0a 7f 60 a2 0d 90 T1p..CMD1p..`... c670: 60 43 4d 44 31 5b 22 0a 01 76 60 5b 27 4d 55 45 `CMD1["..v`['MUE c680: 43 08 57 52 51 4b 0a 02 08 52 44 51 4b 0a 03 08 C.WRQK...RDQK... c690: 53 44 42 54 0a 04 08 52 43 42 54 0a 05 08 57 52 SDBT...RCBT...WR c6a0: 42 54 0a 06 08 52 44 42 54 0a 07 08 57 52 57 44 BT...RDBT...WRWD c6b0: 0a 08 08 52 44 57 44 0a 09 08 57 52 42 4c 0a 0a ...RDWD...WRBL.. c6c0: 08 52 44 42 4c 0a 0b 08 50 43 4c 4c 0a 0c 08 47 .RDBL...PCLL...G c6d0: 4f 4f 44 0a 00 08 55 4b 45 52 0a 07 08 44 41 45 OOD...UKER...DAE c6e0: 52 0a 10 08 43 4d 44 4e 0a 12 08 55 4b 45 32 0a R...CMDN...UKE2. c6f0: 13 08 44 41 44 4e 0a 17 08 53 42 54 4f 0a 18 08 ..DADN...SBTO... c700: 55 53 50 54 0a 19 08 53 42 42 59 0a 1a 14 4e 04 USPT...SBBY...N. c710: 53 57 54 43 09 70 55 4b 45 52 60 70 0a 03 61 a2 SWTC.pUKER`p..a. c720: 3a 90 60 61 70 0a 23 62 a2 19 62 a0 0b 50 52 54 :.`ap.#b..b..PRT c730: 43 5b 22 0a 01 76 62 a1 0a 70 00 62 70 53 53 54 C["..vb..p.bpSST c740: 53 60 a0 17 60 70 00 50 52 54 43 76 61 a0 0c 61 S`..`p.PRTCva..a c750: 5b 22 0a 01 70 68 50 52 54 43 a4 60 14 4b 14 53 ["..phPRTC.`.K.S c760: 4d 42 52 0b 70 12 08 03 0a 07 0a 00 0a 00 60 a0 MBR.p.........`. c770: 08 92 45 43 41 56 a4 60 a0 2e 92 93 68 52 44 42 ..ECAV.`....hRDB c780: 4c a0 25 92 93 68 52 44 57 44 a0 1c 92 93 68 52 L.%..hRDWD....hR c790: 44 42 54 a0 13 92 93 68 52 43 42 54 a0 0a 92 93 DBT....hRCBT.... c7a0: 68 52 44 51 4b a4 60 5b 23 4d 55 45 43 ff ff 70 hRDQK.`[#MUEC..p c7b0: 50 52 54 43 61 70 00 62 a2 28 92 93 61 0a 00 5b PRTCap.b.(..a..[ c7c0: 21 0a 0a 75 62 a0 13 94 62 0b e8 03 70 53 42 42 !..ub...b...pSBB c7d0: 59 88 60 0a 00 00 70 00 61 a1 07 70 50 52 54 43 Y.`...p.a..pPRTC c7e0: 61 a0 4e 0b 92 94 62 0b e8 03 79 69 0a 01 63 7d a.N...b...yi..c} c7f0: 63 0a 01 63 70 63 41 44 44 52 a0 17 92 93 68 52 c..cpcADDR....hR c800: 44 51 4b a0 0e 92 93 68 52 43 42 54 70 6a 43 4d DQK....hRCBTpjCM c810: 44 42 70 0a 00 42 44 41 54 70 68 50 52 54 43 70 DBp..BDATphPRTCp c820: 53 57 54 43 68 88 60 0a 00 00 a0 45 07 93 83 88 SWTCh.`....E.... c830: 60 0a 00 00 0a 00 a0 1b 93 68 52 44 42 4c 70 42 `........hRDBLpB c840: 43 4e 54 88 60 0a 01 00 70 42 44 41 54 88 60 0a CNT.`...pBDAT.`. c850: 02 00 a0 19 93 68 52 44 57 44 70 0a 02 88 60 0a .....hRDWDp...`. c860: 01 00 70 44 54 32 42 88 60 0a 02 00 a0 19 93 68 ..pDT2B.`......h c870: 52 44 42 54 70 0a 01 88 60 0a 01 00 70 44 41 54 RDBTp...`...pDAT c880: 30 88 60 0a 02 00 a0 19 93 68 52 43 42 54 70 0a 0.`......hRCBTp. c890: 01 88 60 0a 01 00 70 44 41 54 30 88 60 0a 02 00 ..`...pDAT0.`... c8a0: 5b 27 4d 55 45 43 a4 60 14 4a 10 53 4d 42 57 0d ['MUEC.`.J.SMBW. c8b0: 70 12 04 01 0a 07 60 a0 08 92 45 43 41 56 a4 60 p.....`...ECAV.` c8c0: a0 2e 92 93 68 57 52 42 4c a0 25 92 93 68 57 52 ....hWRBL.%..hWR c8d0: 57 44 a0 1c 92 93 68 57 52 42 54 a0 13 92 93 68 WD....hWRBT....h c8e0: 53 44 42 54 a0 0a 92 93 68 57 52 51 4b a4 60 5b SDBT....hWRQK.`[ c8f0: 23 4d 55 45 43 ff ff 70 50 52 54 43 61 70 00 62 #MUEC..pPRTCap.b c900: a2 28 92 93 61 0a 00 5b 21 0a 0a 75 62 a0 13 94 .(..a..[!..ub... c910: 62 0b e8 03 70 53 42 42 59 88 60 0a 00 00 70 00 b...pSBBY.`...p. c920: 61 a1 07 70 50 52 54 43 61 a0 41 08 92 94 62 0b a..pPRTCa.A...b. c930: e8 03 70 0a 00 42 44 41 54 79 69 0a 01 63 70 63 ..p..BDATyi..cpc c940: 41 44 44 52 a0 17 92 93 68 57 52 51 4b a0 0e 92 ADDR....hWRQK... c950: 93 68 53 44 42 54 70 6a 43 4d 44 42 a0 13 93 68 .hSDBTpjCMDB...h c960: 57 52 42 4c 70 6b 42 43 4e 54 70 6c 42 44 41 54 WRBLpkBCNTplBDAT c970: a0 0d 93 68 57 52 57 44 70 6c 44 54 32 42 a0 0d ...hWRWDplDT2B.. c980: 93 68 57 52 42 54 70 6c 44 41 54 30 a0 0d 93 68 .hWRBTplDAT0...h c990: 53 44 42 54 70 6c 44 41 54 30 70 68 50 52 54 43 SDBTplDAT0phPRTC c9a0: 70 53 57 54 43 68 88 60 0a 00 00 5b 27 4d 55 45 pSWTCh.`...['MUE c9b0: 43 a4 60 5b 01 4d 55 45 50 00 14 4e 0a 52 42 45 C.`[.MUEP..N.RBE c9c0: 50 01 70 0b ff ff 61 5b 23 4d 55 45 50 ff ff 70 P.p...a[#MUEP..p c9d0: 52 52 41 4d 0b 20 06 63 7b 63 0a 7f 64 57 52 41 RRAM. .c{c..dWRA c9e0: 4d 0b 20 06 64 70 0a 10 62 70 0a 10 61 a2 4a 04 M. .dp..bp..a.J. c9f0: 7b 93 61 0a 10 92 93 62 0a 00 00 53 4d 42 57 57 {.a....b...SMBWW ca00: 52 57 44 42 41 44 52 0a 00 0a 02 0b 35 06 53 4d RWDBADR.....5.SM ca10: 42 57 57 52 57 44 42 41 44 52 0a 00 0a 02 0b 06 BWWRWDBADR...... ca20: 06 70 53 4d 42 52 52 44 42 54 0a 50 68 60 70 83 .pSMBRRDBT.Ph`p. ca30: 88 60 0a 00 00 61 76 62 5c 2f 05 5f 53 42 5f 50 .`...avb\/._SB_P ca40: 43 49 30 53 42 52 47 45 43 30 5f 57 52 41 4d 0b CI0SBRGEC0_WRAM. ca50: 20 06 63 79 61 0a 08 61 7d 61 83 88 60 0a 02 00 .cya..a}a..`... ca60: 61 5b 27 4d 55 45 50 a4 61 14 43 0a 57 42 45 50 a['MUEP.a.C.WBEP ca70: 02 70 0b ff ff 61 5b 23 4d 55 45 50 ff ff 70 52 .p...a[#MUEP..pR ca80: 52 41 4d 0b 20 06 63 7b 63 0a 7f 64 57 52 41 4d RAM. .c{c..dWRAM ca90: 0b 20 06 64 70 0a 10 62 70 0a 10 61 a2 4d 04 7b . .dp..bp..a.M.{ caa0: 93 61 0a 10 92 93 62 0a 00 00 53 4d 42 57 57 52 .a....b...SMBWWR cab0: 57 44 42 41 44 52 0a 00 0a 02 0b 35 06 53 4d 42 WDBADR.....5.SMB cac0: 57 57 52 57 44 42 41 44 52 0a 00 0a 02 0b 06 06 WWRWDBADR....... cad0: 70 53 4d 42 57 57 52 42 54 0a 50 68 0a 01 69 60 pSMBWWRBT.Ph..i` cae0: 70 83 88 60 0a 00 00 61 76 62 5c 2f 05 5f 53 42 p..`...avb\/._SB caf0: 5f 50 43 49 30 53 42 52 47 45 43 30 5f 57 52 41 _PCI0SBRGEC0_WRA cb00: 4d 0b 20 06 63 5b 27 4d 55 45 50 a4 61 14 4c 0a M. .c['MUEP.a.L. cb10: 45 43 58 54 06 70 12 0e 06 0a 10 0a 00 0a 00 0a ECXT.p.......... cb20: 00 0a 00 0a 00 61 a0 41 09 45 43 41 56 5b 23 4d .....a.A.ECAV[#M cb30: 55 45 43 ff ff 70 69 43 44 54 31 70 6a 43 44 54 UEC..piCDT1pjCDT cb40: 32 70 6b 43 44 54 33 70 6c 43 44 54 34 70 6d 43 2pkCDT3plCDT4pmC cb50: 44 54 35 70 68 43 4d 44 31 70 0a 7f 60 a2 0d 90 DT5phCMD1p..`... cb60: 60 43 4d 44 31 5b 22 0a 01 76 60 a0 3c 60 70 0a `CMD1["..v`.<`p. cb70: 00 88 61 0a 00 00 70 43 44 54 31 88 61 0a 01 00 ..a...pCDT1.a... cb80: 70 43 44 54 32 88 61 0a 02 00 70 43 44 54 33 88 pCDT2.a...pCDT3. cb90: 61 0a 03 00 70 43 44 54 34 88 61 0a 04 00 70 43 a...pCDT4.a...pC cba0: 44 54 35 88 61 0a 05 00 a1 09 70 0a 10 88 61 0a DT5.a.....p...a. cbb0: 00 00 5b 27 4d 55 45 43 a4 61 14 48 1a 45 43 53 ..['MUEC.a.H.ECS cbc0: 42 07 70 12 0e 05 0a 11 0a 00 0a 00 0a 00 11 03 B.p............. cbd0: 0a 20 61 a0 07 94 68 0a 01 a4 61 a0 45 18 45 43 . a...h...a.E.EC cbe0: 41 56 5b 23 4d 55 45 43 ff ff a0 0b 93 68 0a 00 AV[#MUEC.....h.. cbf0: 70 50 52 54 43 60 a1 07 70 50 52 54 32 60 70 00 pPRTC`..pPRT2`p. cc00: 62 a2 36 92 93 60 0a 00 5b 21 0a 0a 75 62 a0 13 b.6..`..[!..ub.. cc10: 94 62 0b e8 03 70 53 42 42 59 88 61 0a 00 00 70 .b...pSBBY.a...p cc20: 00 60 a1 15 a0 0b 93 68 0a 00 70 50 52 54 43 60 .`.....h..pPRTC` cc30: a1 07 70 50 52 54 32 60 a0 42 12 92 94 62 0b e8 ..pPRT2`.B...b.. cc40: 03 a0 39 93 68 0a 00 70 6a 41 44 44 52 70 6b 43 ..9.h..pjADDRpkC cc50: 4d 44 42 70 6c 44 41 54 30 70 6d 44 41 54 31 70 MDBplDAT0pmDAT1p cc60: 83 88 6e 0a 00 00 42 43 4e 54 70 83 88 6e 0a 01 ..n...BCNTp..n.. cc70: 00 42 44 41 54 70 69 50 52 54 43 a1 35 70 6a 41 .BDATpiPRTC.5pjA cc80: 44 44 32 70 6b 43 4d 44 32 70 6c 44 41 32 30 70 DD2pkCMD2plDA20p cc90: 6d 44 41 32 31 70 83 88 6e 0a 00 00 42 43 4e 32 mDA21p..n...BCN2 cca0: 70 83 88 6e 0a 01 00 42 44 41 32 70 69 50 52 54 p..n...BDA2piPRT ccb0: 32 70 0a 7f 60 a0 11 93 68 0a 00 a2 0b 50 52 54 2p..`...h....PRT ccc0: 43 5b 22 0a 01 76 60 a1 0d a2 0b 50 52 54 32 5b C["..v`....PRT2[ ccd0: 22 0a 01 76 60 a0 4b 07 60 a0 33 93 68 0a 00 70 "..v`.K.`.3.h..p cce0: 53 53 54 53 60 70 44 41 54 30 88 61 0a 01 00 70 SSTS`pDAT0.a...p ccf0: 44 41 54 31 88 61 0a 02 00 70 42 43 4e 54 88 61 DAT1.a...pBCNT.a cd00: 0a 03 00 70 42 44 41 54 88 61 0a 04 00 a1 2f 70 ...pBDAT.a..../p cd10: 53 53 54 32 60 70 44 41 32 30 88 61 0a 01 00 70 SST2`pDA20.a...p cd20: 44 41 32 31 88 61 0a 02 00 70 42 43 4e 32 88 61 DA21.a...pBCN2.a cd30: 0a 03 00 70 42 44 41 32 88 61 0a 04 00 7b 60 0a ...pBDA2.a...{`. cd40: 1f 60 a0 07 60 72 60 0a 10 60 70 60 88 61 0a 00 .`..`r`..`p`.a.. cd50: 00 a1 09 70 0a 10 88 61 0a 00 00 5b 27 4d 55 45 ...p...a...['MUE cd60: 43 a4 61 5b 80 45 43 49 44 01 0b 57 02 0a 01 5b C.a[.ECID..W...[ cd70: 81 0b 45 43 49 44 01 45 43 34 44 08 5b 80 45 43 ..ECID.EC4D.[.EC cd80: 49 43 01 0b 58 02 0a 01 5b 81 0b 45 43 49 43 01 IC..X...[..ECIC. cd90: 45 43 34 43 08 14 28 57 45 49 45 08 70 0b ff ff EC4C..(WEIE.p... cda0: 60 a2 1a 93 7b 45 43 34 43 0a 02 00 0a 02 a0 07 `...{EC4C....... cdb0: 93 60 0a 00 a4 ff 76 60 5b 22 0a 05 a4 00 14 29 .`....v`[".....) cdc0: 57 45 4f 46 08 70 0b ff ff 60 a2 1b 92 93 7b 45 WEOF.p...`....{E cdd0: 43 34 43 0a 01 00 0a 01 a0 07 93 60 0a 00 a4 ff C4C........`.... cde0: 76 60 5b 22 0a 05 a4 00 14 2e 57 45 4f 45 00 70 v`["......WEOE.p cdf0: 0b ff ff 60 a2 20 93 7b 45 43 34 43 0a 01 00 0a ...`. .{EC4C.... ce00: 01 a0 07 93 60 0a 00 a4 ff 76 60 5b 22 0a 05 70 ....`....v`["..p ce10: 45 43 34 44 61 a4 00 14 40 0a 53 54 38 33 09 a0 EC4Da...@.ST83.. ce20: 46 09 45 43 41 56 5b 23 4d 55 34 54 ff ff a0 10 F.ECAV[#MU4T.... ce30: 92 93 57 45 4f 45 00 5b 27 4d 55 34 54 a4 ff a0 ..WEOE.['MU4T... ce40: 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff ...WEIE.['MU4T.. ce50: 70 0a ff 45 43 34 43 a0 10 92 93 57 45 49 45 00 p..EC4C....WEIE. ce60: 5b 27 4d 55 34 54 a4 ff 70 0a 83 45 43 34 43 a0 ['MU4T..p..EC4C. ce70: 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff ...WEIE.['MU4T.. ce80: 70 68 45 43 34 44 a0 10 92 93 57 45 49 45 00 5b phEC4D....WEIE.[ ce90: 27 4d 55 34 54 a4 ff a0 10 92 93 57 45 4f 46 00 'MU4T......WEOF. cea0: 5b 27 4d 55 34 54 a4 ff 70 45 43 34 44 60 5b 27 ['MU4T..pEC4D`[' ceb0: 4d 55 34 54 a4 60 a4 ff 14 40 0a 53 54 38 34 0a MU4T.`...@.ST84. cec0: a0 46 09 45 43 41 56 5b 23 4d 55 34 54 ff ff a0 .F.ECAV[#MU4T... ced0: 10 92 93 57 45 4f 45 00 5b 27 4d 55 34 54 a4 ff ...WEOE.['MU4T.. cee0: a0 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ....WEIE.['MU4T. cef0: ff 70 0a ff 45 43 34 43 a0 10 92 93 57 45 49 45 .p..EC4C....WEIE cf00: 00 5b 27 4d 55 34 54 a4 ff 70 0a 84 45 43 34 43 .['MU4T..p..EC4C cf10: a0 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ....WEIE.['MU4T. cf20: ff 70 68 45 43 34 44 a0 10 92 93 57 45 49 45 00 .phEC4D....WEIE. cf30: 5b 27 4d 55 34 54 a4 ff 70 69 45 43 34 44 a0 10 ['MU4T..piEC4D.. cf40: 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff 5b ..WEIE.['MU4T..[ cf50: 27 4d 55 34 54 a4 00 a4 ff 14 45 0c 53 54 39 35 'MU4T.....E.ST95 cf60: 0a a0 4b 0b 45 43 41 56 5b 23 4d 55 34 54 ff ff ..K.ECAV[#MU4T.. cf70: a0 10 92 93 57 45 4f 45 00 5b 27 4d 55 34 54 a4 ....WEOE.['MU4T. cf80: ff a0 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 .....WEIE.['MU4T cf90: a4 ff 70 0a ff 45 43 34 43 a0 10 92 93 57 45 49 ..p..EC4C....WEI cfa0: 45 00 5b 27 4d 55 34 54 a4 ff 70 0a 95 45 43 34 E.['MU4T..p..EC4 cfb0: 43 a0 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 C....WEIE.['MU4T cfc0: a4 ff 70 68 45 43 34 44 a0 10 92 93 57 45 49 45 ..phEC4D....WEIE cfd0: 00 5b 27 4d 55 34 54 a4 ff 70 69 45 43 34 44 a0 .['MU4T..piEC4D. cfe0: 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff ...WEIE.['MU4T.. cff0: a0 1c 93 68 0a 00 a0 10 92 93 57 45 4f 46 00 5b ...h......WEOF.[ d000: 27 4d 55 34 54 a4 ff 70 45 43 34 44 60 5b 27 4d 'MU4T..pEC4D`['M d010: 55 34 54 a0 07 93 68 0a 00 a4 60 a4 00 a4 ff 14 U4T...h...`..... d020: 45 0c 53 54 38 37 0a a0 4b 0b 45 43 41 56 5b 23 E.ST87..K.ECAV[# d030: 4d 55 34 54 ff ff a0 10 92 93 57 45 4f 45 00 5b MU4T......WEOE.[ d040: 27 4d 55 34 54 a4 ff a0 10 92 93 57 45 49 45 00 'MU4T......WEIE. d050: 5b 27 4d 55 34 54 a4 ff 70 0a ff 45 43 34 43 a0 ['MU4T..p..EC4C. d060: 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff ...WEIE.['MU4T.. d070: 70 0a 87 45 43 34 43 a0 10 92 93 57 45 49 45 00 p..EC4C....WEIE. d080: 5b 27 4d 55 34 54 a4 ff 70 68 45 43 34 44 a0 10 ['MU4T..phEC4D.. d090: 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff 70 ..WEIE.['MU4T..p d0a0: 69 45 43 34 44 a0 10 92 93 57 45 49 45 00 5b 27 iEC4D....WEIE.[' d0b0: 4d 55 34 54 a4 ff a0 1c 93 68 0a 00 a0 10 92 93 MU4T.....h...... d0c0: 57 45 4f 46 00 5b 27 4d 55 34 54 a4 ff 70 45 43 WEOF.['MU4T..pEC d0d0: 34 44 60 5b 27 4d 55 34 54 a0 07 93 68 0a 00 a4 4D`['MU4T...h... d0e0: 60 a4 00 a4 ff 14 40 0a 53 54 38 35 09 a0 46 09 `.....@.ST85..F. d0f0: 45 43 41 56 5b 23 4d 55 34 54 ff ff a0 10 92 93 ECAV[#MU4T...... d100: 57 45 4f 45 00 5b 27 4d 55 34 54 a4 ff a0 10 92 WEOE.['MU4T..... d110: 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff 70 0a .WEIE.['MU4T..p. d120: ff 45 43 34 43 a0 10 92 93 57 45 49 45 00 5b 27 .EC4C....WEIE.[' d130: 4d 55 34 54 a4 ff 70 0a 85 45 43 34 43 a0 10 92 MU4T..p..EC4C... d140: 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff 70 68 .WEIE.['MU4T..ph d150: 45 43 34 44 a0 10 92 93 57 45 49 45 00 5b 27 4d EC4D....WEIE.['M d160: 55 34 54 a4 ff a0 10 92 93 57 45 4f 46 00 5b 27 U4T......WEOF.[' d170: 4d 55 34 54 a4 ff 70 45 43 34 44 60 5b 27 4d 55 MU4T..pEC4D`['MU d180: 34 54 a4 60 a4 ff 14 40 0a 53 54 38 36 0a a0 46 4T.`...@.ST86..F d190: 09 45 43 41 56 5b 23 4d 55 34 54 ff ff a0 10 92 .ECAV[#MU4T..... d1a0: 93 57 45 4f 45 00 5b 27 4d 55 34 54 a4 ff a0 10 .WEOE.['MU4T.... d1b0: 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff 70 ..WEIE.['MU4T..p d1c0: 0a ff 45 43 34 43 a0 10 92 93 57 45 49 45 00 5b ..EC4C....WEIE.[ d1d0: 27 4d 55 34 54 a4 ff 70 0a 86 45 43 34 43 a0 10 'MU4T..p..EC4C.. d1e0: 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff 70 ..WEIE.['MU4T..p d1f0: 68 45 43 34 44 a0 10 92 93 57 45 49 45 00 5b 27 hEC4D....WEIE.[' d200: 4d 55 34 54 a4 ff 70 69 45 43 34 44 a0 10 92 93 MU4T..piEC4D.... d210: 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff 5b 27 4d WEIE.['MU4T..['M d220: 55 34 54 a4 00 a4 ff 14 47 0b 53 54 38 45 0a a0 U4T.....G.ST8E.. d230: 4d 0a 45 43 41 56 5b 23 4d 55 34 54 ff ff a0 10 M.ECAV[#MU4T.... d240: 92 93 57 45 4f 45 00 5b 27 4d 55 34 54 a4 ff a0 ..WEOE.['MU4T... d250: 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff ...WEIE.['MU4T.. d260: 70 0a ff 45 43 34 43 a0 10 92 93 57 45 49 45 00 p..EC4C....WEIE. d270: 5b 27 4d 55 34 54 a4 ff 70 0a 8e 45 43 34 43 a0 ['MU4T..p..EC4C. d280: 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff ...WEIE.['MU4T.. d290: 70 68 45 43 34 44 a0 10 92 93 57 45 49 45 00 5b phEC4D....WEIE.[ d2a0: 27 4d 55 34 54 a4 ff 70 69 45 43 34 44 a0 10 92 'MU4T..piEC4D... d2b0: 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff a0 10 .WEIE.['MU4T.... d2c0: 92 93 57 45 4f 46 00 5b 27 4d 55 34 54 a4 ff 70 ..WEOF.['MU4T..p d2d0: 45 43 34 44 60 5b 27 4d 55 34 54 a4 60 a4 ff 14 EC4D`['MU4T.`... d2e0: 47 0b 53 54 39 45 0b a0 4d 0a 45 43 41 56 5b 23 G.ST9E..M.ECAV[# d2f0: 4d 55 34 54 ff ff a0 10 92 93 57 45 4f 45 00 5b MU4T......WEOE.[ d300: 27 4d 55 34 54 a4 ff a0 10 92 93 57 45 49 45 00 'MU4T......WEIE. d310: 5b 27 4d 55 34 54 a4 ff 70 0a ff 45 43 34 43 a0 ['MU4T..p..EC4C. d320: 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff ...WEIE.['MU4T.. d330: 70 0a 9e 45 43 34 43 a0 10 92 93 57 45 49 45 00 p..EC4C....WEIE. d340: 5b 27 4d 55 34 54 a4 ff 70 68 45 43 34 44 a0 10 ['MU4T..phEC4D.. d350: 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff 70 ..WEIE.['MU4T..p d360: 69 45 43 34 44 a0 10 92 93 57 45 49 45 00 5b 27 iEC4D....WEIE.[' d370: 4d 55 34 54 a4 ff 70 6a 45 43 34 44 a0 10 92 93 MU4T..pjEC4D.... d380: 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff 5b 27 4d WEIE.['MU4T..['M d390: 55 34 54 a4 00 a4 ff 14 47 0b 53 54 39 46 0b a0 U4T.....G.ST9F.. d3a0: 4d 0a 45 43 41 56 5b 23 4d 55 34 54 ff ff a0 10 M.ECAV[#MU4T.... d3b0: 92 93 57 45 4f 45 00 5b 27 4d 55 34 54 a4 ff a0 ..WEOE.['MU4T... d3c0: 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff ...WEIE.['MU4T.. d3d0: 70 0a ff 45 43 34 43 a0 10 92 93 57 45 49 45 00 p..EC4C....WEIE. d3e0: 5b 27 4d 55 34 54 a4 ff 70 0a 9f 45 43 34 43 a0 ['MU4T..p..EC4C. d3f0: 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff ...WEIE.['MU4T.. d400: 70 68 45 43 34 44 a0 10 92 93 57 45 49 45 00 5b phEC4D....WEIE.[ d410: 27 4d 55 34 54 a4 ff 70 69 45 43 34 44 a0 10 92 'MU4T..piEC4D... d420: 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff 70 6a .WEIE.['MU4T..pj d430: 45 43 34 44 a0 10 92 93 57 45 49 45 00 5b 27 4d EC4D....WEIE.['M d440: 55 34 54 a4 ff 5b 27 4d 55 34 54 a4 00 a4 ff 14 U4T..['MU4T..... d450: 48 08 53 54 41 39 0a a0 4e 07 45 43 41 56 5b 23 H.STA9..N.ECAV[# d460: 4d 55 34 54 ff ff a0 10 92 93 57 45 4f 45 00 5b MU4T......WEOE.[ d470: 27 4d 55 34 54 a4 ff a0 10 92 93 57 45 49 45 00 'MU4T......WEIE. d480: 5b 27 4d 55 34 54 a4 ff 70 0a a9 45 43 34 43 a0 ['MU4T..p..EC4C. d490: 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff ...WEIE.['MU4T.. d4a0: 70 68 45 43 34 44 a0 10 92 93 57 45 49 45 00 5b phEC4D....WEIE.[ d4b0: 27 4d 55 34 54 a4 ff 70 69 45 43 34 44 a0 10 92 'MU4T..piEC4D... d4c0: 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ff 5b 27 .WEIE.['MU4T..[' d4d0: 4d 55 34 54 a4 00 a4 ff 14 40 0a 53 54 41 38 09 MU4T.....@.STA8. d4e0: a0 46 09 45 43 41 56 5b 23 4d 55 34 54 ff ff a0 .F.ECAV[#MU4T... d4f0: 10 92 93 57 45 4f 45 00 5b 27 4d 55 34 54 a4 ff ...WEOE.['MU4T.. d500: a0 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ....WEIE.['MU4T. d510: ff 70 0a ff 45 43 34 43 a0 10 92 93 57 45 49 45 .p..EC4C....WEIE d520: 00 5b 27 4d 55 34 54 a4 ff 70 0a a8 45 43 34 43 .['MU4T..p..EC4C d530: a0 10 92 93 57 45 49 45 00 5b 27 4d 55 34 54 a4 ....WEIE.['MU4T. d540: ff 70 68 45 43 34 44 a0 10 92 93 57 45 49 45 00 .phEC4D....WEIE. d550: 5b 27 4d 55 34 54 a4 ff a0 10 92 93 57 45 4f 46 ['MU4T......WEOF d560: 00 5b 27 4d 55 34 54 a4 ff 70 45 43 34 44 60 5b .['MU4T..pEC4D`[ d570: 27 4d 55 34 54 a4 60 a4 ff 14 47 05 54 50 53 57 'MU4T.`...G.TPSW d580: 01 7b 68 0a 01 60 a0 25 60 5c 2f 05 5f 53 42 5f .{h..`.%`\/._SB_ d590: 50 43 49 30 53 42 52 47 45 43 30 5f 45 43 58 54 PCI0SBRGEC0_ECXT d5a0: 0a b6 0a b8 0a 01 0a 01 0a 00 0a 00 a1 24 5c 2f .............$\/ d5b0: 05 5f 53 42 5f 50 43 49 30 53 42 52 47 45 43 30 ._SB_PCI0SBRGEC0 d5c0: 5f 45 43 58 54 0a b6 0a b8 0a 01 0a 02 0a 00 0a _ECXT........... d5d0: 00 14 42 04 54 50 53 54 00 70 5c 2f 05 5f 53 42 ..B.TPST.p\/._SB d5e0: 5f 50 43 49 30 53 42 52 47 45 43 30 5f 45 43 58 _PCI0SBRGEC0_ECX d5f0: 54 0a b6 0a b8 0a 02 0a 00 0a 00 0a 00 60 70 83 T............`p. d600: 88 60 0a 01 00 61 a0 08 93 61 0a 00 a4 0a 01 a1 .`...a...a...... d610: 04 a4 0a 00 14 45 05 4c 42 53 57 01 a0 28 93 68 .....E.LBSW..(.h d620: 0a 01 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 52 ..\/._SB_PCI0SBR d630: 47 45 43 30 5f 45 43 58 54 0a b6 0a b9 0a 01 0a GEC0_ECXT....... d640: 00 0a 00 0a 00 a1 24 5c 2f 05 5f 53 42 5f 50 43 ......$\/._SB_PC d650: 49 30 53 42 52 47 45 43 30 5f 45 43 58 54 0a b6 I0SBRGEC0_ECXT.. d660: 0a b9 0a 02 0a 00 0a 00 0a 00 14 16 4c 42 53 54 ............LBST d670: 00 70 52 52 41 4d 0b 4a 04 60 7b 60 0a 03 60 a4 .pRRAM.J.`{`..`. d680: 60 10 18 5c 00 08 54 53 50 5f 0a 0a 08 54 43 31 `..\..TSP_...TC1 d690: 5f 0a 02 08 54 43 32 5f 0a 0a 10 46 14 5c 5f 54 _...TC2_...F.\_T d6a0: 5a 5f 14 32 4b 45 4c 56 01 7b 68 0a ff 60 a0 19 Z_.2KELV.{h..`.. d6b0: 92 95 60 0a 80 74 0b 00 01 60 60 77 60 0a 0a 60 ..`..t...``w`..` d6c0: 74 0b ac 0a 60 60 a4 60 77 60 0a 0a 60 72 60 0b t...``.`w`..`r`. d6d0: ac 0a 60 a4 60 14 14 43 45 4c 43 01 74 68 0b ac ..`.`..CELC.th.. d6e0: 0a 60 78 60 0a 0a 61 60 a4 60 08 50 4c 43 59 0a .`x`..a`.`.PLCY. d6f0: 00 5b 85 4e 0e 54 48 52 4d 14 19 5f 43 52 54 00 .[.N.THRM.._CRT. d700: 52 43 52 54 a4 4b 45 4c 56 5c 2e 5f 53 42 5f 54 RCRT.KELV\._SB_T d710: 43 52 54 14 2f 5f 54 4d 50 00 70 0a 05 61 a2 1e CRT./_TMP.p..a.. d720: 61 70 52 54 4d 50 60 a0 0f 94 60 5c 2e 5f 53 42 apRTMP`...`\._SB d730: 5f 54 43 52 54 76 61 a1 05 70 0a 00 61 a4 4b 45 _TCRTva..p..a.KE d740: 4c 56 60 08 5f 50 53 4c 12 2a 04 5c 2e 5f 50 52 LV`._PSL.*.\._PR d750: 5f 43 50 55 30 5c 2e 5f 50 52 5f 43 50 55 31 5c _CPU0\._PR_CPU1\ d760: 2e 5f 50 52 5f 43 50 55 32 5c 2e 5f 50 52 5f 43 ._PR_CPU2\._PR_C d770: 50 55 33 14 10 5f 54 53 50 00 77 54 53 50 5f 0a PU3.._TSP.wTSP_. d780: 0a 60 a4 60 14 0b 5f 54 43 31 00 a4 54 43 31 5f .`.`.._TC1..TC1_ d790: 14 0b 5f 54 43 32 00 a4 54 43 32 5f 14 30 5f 50 .._TC2..TC2_.0_P d7a0: 53 56 00 52 50 53 56 a0 14 50 4c 43 59 a4 4b 45 SV.RPSV..PLCY.KE d7b0: 4c 56 5c 2e 5f 53 42 5f 50 50 53 56 a1 10 a4 4b LV\._SB_PPSV...K d7c0: 45 4c 56 5c 2e 5f 53 42 5f 54 50 53 56 14 13 5f ELV\._SB_TPSV.._ d7d0: 53 43 50 01 70 00 50 4c 43 59 86 54 48 52 4d 0a SCP.p.PLCY.THRM. d7e0: 81 10 4e 20 5c 5f 54 5a 5f 08 41 54 4d 50 0a 3c ..N \_TZ_.ATMP.< d7f0: 08 4c 54 4d 50 0a 3c 08 46 41 4e 53 0a 00 14 4a .LTMP.<.FANS...J d800: 04 52 54 4d 50 00 a0 3d 5c 2f 05 5f 53 42 5f 50 .RTMP..=\/._SB_P d810: 43 49 30 53 42 52 47 45 43 30 5f 45 43 41 56 70 CI0SBRGEC0_ECAVp d820: 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 52 47 45 \/._SB_PCI0SBRGE d830: 43 30 5f 45 43 50 55 60 a0 0b 95 60 0a 80 70 60 C0_ECPU`...`..p` d840: 4c 54 4d 50 a4 4c 54 4d 50 14 4c 04 52 43 52 54 LTMP.LTMP.L.RCRT d850: 00 a0 44 04 5c 2f 05 5f 53 42 5f 50 43 49 30 53 ..D.\/._SB_PCI0S d860: 42 52 47 45 43 30 5f 45 43 41 56 70 5c 2f 05 5f BRGEC0_ECAVp\/._ d870: 53 42 5f 50 43 49 30 53 42 52 47 45 43 30 5f 45 SB_PCI0SBRGEC0_E d880: 43 52 54 60 a0 11 95 60 0a 80 70 60 5c 2e 5f 53 CRT`...`..p`\._S d890: 42 5f 54 43 52 54 14 4c 04 52 50 53 56 00 a0 44 B_TCRT.L.RPSV..D d8a0: 04 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 52 47 .\/._SB_PCI0SBRG d8b0: 45 43 30 5f 45 43 41 56 70 5c 2f 05 5f 53 42 5f EC0_ECAVp\/._SB_ d8c0: 50 43 49 30 53 42 52 47 45 43 30 5f 45 50 53 56 PCI0SBRGEC0_EPSV d8d0: 60 a0 11 95 60 0a 80 70 60 5c 2e 5f 53 42 5f 54 `...`..p`\._SB_T d8e0: 50 53 56 14 44 08 52 46 41 4e 01 a0 45 07 5c 2f PSV.D.RFAN..E.\/ d8f0: 05 5f 53 42 5f 50 43 49 30 53 42 52 47 45 43 30 ._SB_PCI0SBRGEC0 d900: 5f 45 43 41 56 70 5c 2f 05 5f 53 42 5f 50 43 49 _ECAVp\/._SB_PCI d910: 30 53 42 52 47 45 43 30 5f 53 54 38 33 68 60 a0 0SBRGEC0_ST83h`. d920: 07 93 60 0a ff a4 60 70 5c 2f 05 5f 53 42 5f 50 ..`...`p\/._SB_P d930: 43 49 30 53 42 52 47 45 43 30 5f 54 41 43 48 68 CI0SBRGEC0_TACHh d940: 60 78 60 0a 64 61 60 72 60 0a 01 60 a0 0c 92 94 `x`.da`r`..`.... d950: 60 0a 3c 70 60 46 41 4e 53 a1 07 70 46 41 4e 53 `.LID_ ea90: 08 5f 48 49 44 0c 41 d0 0c 0d 14 2e 5f 4c 49 44 ._HID.A....._LID eaa0: 00 70 01 60 70 5c 2f 05 5f 53 42 5f 50 43 49 30 .p.`p\/._SB_PCI0 eab0: 53 42 52 47 45 43 30 5f 52 50 49 4e 0a 46 60 a0 SBRGEC0_RPIN.F`. eac0: 07 93 60 ff 70 01 60 a4 60 10 06 5c 5f 47 50 45 ..`.p.`.`..\_GPE ead0: 10 28 5c 2f 04 5f 53 42 5f 50 43 49 30 53 42 52 .(\/._SB_PCI0SBR eae0: 47 45 43 30 5f 14 13 5f 51 38 33 00 86 5c 2e 5f GEC0_.._Q83..\._ eaf0: 53 42 5f 4c 49 44 5f 0a 80 10 26 5c 5f 53 42 5f SB_LID_...&\_SB_ eb00: 5b 82 1e 53 4c 50 42 08 5f 48 49 44 0c 41 d0 0c [..SLPB._HID.A.. eb10: 0e 14 0e 5f 50 52 57 00 a4 12 06 02 0a 0b 0a 04 ..._PRW......... eb20: 10 49 21 5c 2e 5f 53 42 5f 41 54 4b 44 14 28 46 .I!\._SB_ATKD.(F eb30: 53 4d 49 01 70 68 5c 2e 5f 53 42 5f 46 53 46 4e SMI.ph\._SB_FSFN eb40: 7d 68 0a a0 60 49 53 4d 49 0a 90 a4 5c 2e 5f 53 }h..`ISMI...\._S eb50: 42 5f 46 53 54 41 14 18 46 4c 53 48 01 70 68 5c B_FSTA..FLSH.ph\ eb60: 2e 5f 53 42 5f 46 53 54 41 46 53 4d 49 0a 00 14 ._SB_FSTAFSMI... eb70: 19 46 49 4e 49 01 70 68 5c 2e 5f 53 42 5f 46 41 .FINI.ph\._SB_FA eb80: 44 52 a4 46 53 4d 49 0a 01 14 19 46 45 52 53 01 DR.FSMI....FERS. eb90: 70 68 5c 2e 5f 53 42 5f 46 53 54 41 a4 46 53 4d ph\._SB_FSTA.FSM eba0: 49 0a 02 14 2c 46 57 52 49 01 70 68 5c 2e 5f 53 I...,FWRI.ph\._S ebb0: 42 5f 46 41 44 52 70 0b 00 10 5c 2e 5f 53 42 5f B_FADRp...\._SB_ ebc0: 46 53 49 5a a4 74 0b 00 10 46 53 4d 49 0a 03 00 FSIZ.t...FSMI... ebd0: 14 1f 46 57 52 50 00 70 0a 00 5c 2e 5f 53 42 5f ..FWRP.p..\._SB_ ebe0: 46 53 49 5a a4 74 0b 00 10 46 53 4d 49 0a 03 00 FSIZ.t...FSMI... ebf0: 14 19 46 45 42 57 01 70 68 5c 2e 5f 53 42 5f 46 ..FEBW.ph\._SB_F ec00: 41 44 52 a4 46 53 4d 49 0a 04 14 19 46 45 42 52 ADR.FSMI....FEBR ec10: 01 70 68 5c 2e 5f 53 42 5f 46 41 44 52 a4 46 53 .ph\._SB_FADR.FS ec20: 4d 49 0a 05 14 0d 46 45 44 57 00 a4 46 53 4d 49 MI....FEDW..FSMI ec30: 0a 06 14 19 45 43 53 52 01 70 68 5c 2e 5f 53 42 ....ECSR.ph\._SB ec40: 5f 46 53 54 41 a4 46 53 4d 49 0a 07 14 19 46 4c _FSTA.FSMI....FL ec50: 53 43 01 70 68 5c 2e 5f 53 42 5f 46 53 54 41 a4 SC.ph\._SB_FSTA. ec60: 46 53 4d 49 0a 08 14 4f 07 46 49 4d 45 01 70 68 FSMI...O.FIME.ph ec70: 5c 2e 5f 53 42 5f 46 53 54 41 a0 3e 7d 93 68 0a \._SB_FSTA.>}.h. ec80: 04 93 68 0a 05 00 46 53 4d 49 0a 09 a0 14 93 68 ..h...FSMI.....h ec90: 0a 04 70 5c 2e 5f 53 42 5f 46 41 44 52 55 4c 43 ..p\._SB_FADRULC eca0: 4b 70 0a 00 5c 2e 5f 53 42 5f 46 53 54 41 a4 5c Kp..\._SB_FSTA.\ ecb0: 2e 5f 53 42 5f 46 53 54 41 a0 25 93 68 0b 00 80 ._SB_FSTA.%.h... ecc0: 70 0b 00 10 5c 2e 5f 53 42 5f 46 53 49 5a 46 53 p...\._SB_FSIZFS ecd0: 4d 49 0a 09 a4 5c 2e 5f 53 42 5f 46 53 54 41 a4 MI...\._SB_FSTA. ece0: 46 53 4d 49 0a 09 14 4c 04 46 52 45 43 01 a0 31 FSMI...L.FREC..1 ecf0: 93 68 0b 00 80 70 68 5c 2e 5f 53 42 5f 46 53 54 .h...ph\._SB_FST ed00: 41 46 53 4d 49 0a 0a 70 0b 00 10 5c 2e 5f 53 42 AFSMI..p...\._SB ed10: 5f 46 53 49 5a a4 5c 2e 5f 53 42 5f 46 53 54 41 _FSIZ.\._SB_FSTA ed20: 70 68 5c 2e 5f 53 42 5f 46 53 54 41 a4 46 53 4d ph\._SB_FSTA.FSM ed30: 49 0a 0a 08 55 4c 43 4b 0a 00 10 44 2a 5c 5f 53 I...ULCK...D*\_S ed40: 42 5f 08 58 43 50 44 0a 00 08 58 4e 50 54 0a 01 B_.XCPD...XNPT.. ed50: 08 58 43 41 50 0a 02 08 58 44 43 50 0a 04 08 58 .XCAP...XDCP...X ed60: 44 43 54 0a 08 08 58 44 53 54 0a 0a 08 58 4c 43 DCT...XDST...XLC ed70: 50 0a 0c 08 58 4c 43 54 0a 10 08 58 4c 53 54 0a P...XLCT...XLST. ed80: 12 08 58 53 43 50 0a 14 08 58 53 43 54 0a 18 08 ..XSCP...XSCT... ed90: 58 53 53 54 0a 1a 08 58 52 43 54 0a 1c 5b 01 4d XSST...XRCT..[.M eda0: 55 54 45 00 14 28 42 44 46 52 04 79 68 0a 14 68 UTE..(BDFR.yh..h edb0: 79 69 0a 0f 69 79 6a 0a 0c 6a 72 68 0a 00 60 72 yi..iyj..jrh..`r edc0: 69 60 60 72 6a 60 60 72 6b 60 60 a4 60 14 38 52 i``rj``rk``.`.8R edd0: 42 50 45 01 5b 23 4d 55 54 45 ff ff 72 68 5c 50 BPE.[#MUTE..rh\P ede0: 45 42 53 60 5b 80 50 43 46 47 00 60 0a 01 5b 81 EBS`[.PCFG.`..[. edf0: 0b 50 43 46 47 01 58 43 46 47 08 5b 27 4d 55 54 .PCFG.XCFG.['MUT ee00: 45 a4 58 43 46 47 14 41 04 52 57 50 45 01 5b 23 E.XCFG.A.RWPE.[# ee10: 4d 55 54 45 ff ff 7b 68 0c fe ff ff ff 68 72 68 MUTE..{h.....hrh ee20: 5c 50 45 42 53 60 5b 80 50 43 46 47 00 60 0a 02 \PEBS`[.PCFG.`.. ee30: 5b 81 0b 50 43 46 47 02 58 43 46 47 10 5b 27 4d [..PCFG.XCFG.['M ee40: 55 54 45 a4 58 43 46 47 14 41 04 52 44 50 45 01 UTE.XCFG.A.RDPE. ee50: 5b 23 4d 55 54 45 ff ff 7b 68 0c fc ff ff ff 68 [#MUTE..{h.....h ee60: 72 68 5c 50 45 42 53 60 5b 80 50 43 46 47 00 60 rh\PEBS`[.PCFG.` ee70: 0a 04 5b 81 0b 50 43 46 47 03 58 43 46 47 20 5b ..[..PCFG.XCFG [ ee80: 27 4d 55 54 45 a4 58 43 46 47 14 39 57 42 50 45 'MUTE.XCFG.9WBPE ee90: 02 5b 23 4d 55 54 45 ff ff 72 68 5c 50 45 42 53 .[#MUTE..rh\PEBS eea0: 60 5b 80 50 43 46 47 00 60 0a 01 5b 81 0b 50 43 `[.PCFG.`..[..PC eeb0: 46 47 01 58 43 46 47 08 70 69 58 43 46 47 5b 27 FG.XCFG.piXCFG[' eec0: 4d 55 54 45 14 42 04 57 57 50 45 02 5b 23 4d 55 MUTE.B.WWPE.[#MU eed0: 54 45 ff ff 7b 68 0c fe ff ff ff 68 72 68 5c 50 TE..{h.....hrh\P eee0: 45 42 53 60 5b 80 50 43 46 47 00 60 0a 02 5b 81 EBS`[.PCFG.`..[. eef0: 0b 50 43 46 47 02 58 43 46 47 10 70 69 58 43 46 .PCFG.XCFG.piXCF ef00: 47 5b 27 4d 55 54 45 14 42 04 57 44 50 45 02 5b G['MUTE.B.WDPE.[ ef10: 23 4d 55 54 45 ff ff 7b 68 0c fc ff ff ff 68 72 #MUTE..{h.....hr ef20: 68 5c 50 45 42 53 60 5b 80 50 43 46 47 00 60 0a h\PEBS`[.PCFG.`. ef30: 04 5b 81 0b 50 43 46 47 03 58 43 46 47 20 70 69 .[..PCFG.XCFG pi ef40: 58 43 46 47 5b 27 4d 55 54 45 14 4a 04 52 57 44 XCFG['MUTE.J.RWD ef50: 50 03 5b 23 4d 55 54 45 ff ff 7b 68 0c fc ff ff P.[#MUTE..{h.... ef60: ff 68 72 68 5c 50 45 42 53 60 5b 80 50 43 46 47 .hrh\PEBS`[.PCFG ef70: 00 60 0a 04 5b 81 0b 50 43 46 47 03 58 43 46 47 .`..[..PCFG.XCFG ef80: 20 7b 58 43 46 47 6a 61 7d 61 69 58 43 46 47 5b {XCFGja}aiXCFG[ ef90: 27 4d 55 54 45 14 49 04 52 50 4d 45 01 72 68 0a 'MUTE.I.RPME.rh. efa0: 84 60 70 5c 2e 5f 53 42 5f 52 44 50 45 60 61 a0 .`p\._SB_RDPE`a. efb0: 0b 93 61 0c ff ff ff ff a4 0a 00 a1 23 a0 1e 90 ..a.........#... efc0: 61 0c 00 00 01 00 5c 2e 5f 53 42 5f 57 44 50 45 a.....\._SB_WDPE efd0: 60 7b 61 0c 00 00 01 00 00 a4 0a 01 a4 0a 00 10 `{a............. efe0: 44 08 5c 2e 5f 53 42 5f 50 43 49 30 5b 82 46 07 D.\._SB_PCI0[.F. eff0: 52 45 53 43 08 5f 48 49 44 0c 41 d0 0c 02 08 5f RESC._HID.A...._ f000: 55 49 44 0a 09 08 42 55 46 30 11 11 0a 0e 86 09 UID...BUF0...... f010: 00 01 00 00 00 00 00 10 00 00 79 00 14 47 04 5f ..........y..G._ f020: 43 52 53 08 8a 42 55 46 30 0a 04 50 54 42 30 70 CRS..BUF0..PTB0p f030: 5c 2e 5f 53 42 5f 50 54 41 42 50 54 42 30 8a 42 \._SB_PTABPTB0.B f040: 55 46 30 0a 08 50 54 4c 4e a0 15 93 5c 2e 5f 53 UF0..PTLN...\._S f050: 42 5f 50 54 41 42 0a 00 70 0a 00 50 54 4c 4e a4 B_PTAB..p..PTLN. f060: 42 55 46 30 10 4f 64 5c 00 5b 80 5c 50 4d 49 4f BUF0.Od\.[.\PMIO f070: 01 0b 00 04 0a 80 5b 81 4f 15 5c 50 4d 49 4f 01 ......[.O.\PMIO. f080: 00 40 08 00 01 54 44 54 59 03 54 45 4e 41 01 54 .@...TDTY.TENA.T f090: 54 44 54 03 46 52 43 54 01 00 08 54 48 4c 53 01 TDT.FRCT...THLS. f0a0: 00 06 00 48 06 00 01 50 45 48 53 01 00 07 50 45 ...H...PEHS...PE f0b0: 50 53 01 42 4c 53 54 01 53 42 50 53 01 00 04 47 PS.BLST.SBPS...G f0c0: 30 30 53 01 47 30 31 53 01 47 30 32 53 01 47 50 00S.G01S.G02S.GP f0d0: 53 33 01 47 30 34 53 01 47 30 35 53 01 47 30 36 S3.G04S.G05S.G06 f0e0: 53 01 47 30 37 53 01 47 30 38 53 01 47 30 39 53 S.G07S.G08S.G09S f0f0: 01 47 30 41 53 01 47 30 42 53 01 47 30 43 53 01 .G0AS.G0BS.G0CS. f100: 47 30 44 53 01 47 30 45 53 01 47 30 46 53 01 00 G0DS.G0ES.G0FS.. f110: 20 00 01 50 45 48 45 01 00 07 50 45 50 45 01 42 ..PEHE...PEPE.B f120: 4c 45 4e 01 53 42 50 45 01 00 04 47 30 30 45 01 LEN.SBPE...G00E. f130: 47 30 31 45 01 47 30 32 45 01 47 50 45 33 01 47 G01E.G02E.GPE3.G f140: 30 34 45 01 47 30 35 45 01 47 30 36 45 01 47 30 04E.G05E.G06E.G0 f150: 37 45 01 47 30 38 45 01 47 30 39 45 01 47 30 41 7E.G08E.G09E.G0A f160: 45 01 47 30 42 45 01 47 30 43 45 01 47 30 44 45 E.G0BE.G0CE.G0DE f170: 01 47 30 45 45 01 47 30 46 45 01 00 20 00 04 53 .G0EE.G0FE.. ..S f180: 4c 50 45 01 41 50 4d 45 01 00 05 4d 43 53 45 01 LPE.APME...MCSE. f190: 00 01 54 43 4f 45 01 50 45 52 45 01 00 01 00 10 ..TCOE.PERE..... f1a0: 00 04 53 4c 50 53 01 41 50 4d 53 01 00 05 4d 43 ..SLPS.APMS...MC f1b0: 53 53 01 00 01 54 43 4f 53 01 50 45 52 53 01 00 SS...TCOS.PERS.. f1c0: 01 00 40 06 00 01 47 50 45 43 01 00 4e 10 00 09 ..@...GPEC..N... f1d0: 53 43 49 53 01 00 06 5b 80 5c 47 50 49 53 01 0b SCIS...[.\GPIS.. f1e0: 00 04 0a 50 5b 81 0f 5c 47 50 49 53 01 00 40 11 ...P[..\GPIS..@. f1f0: 47 53 30 30 10 5b 80 5c 47 50 30 31 01 0b 00 05 GS00.[.\GP01.... f200: 0a 64 5b 81 42 0f 5c 47 50 30 31 01 47 55 30 30 .d[.B.\GP01.GU00 f210: 08 47 55 30 31 08 47 55 30 32 08 47 55 30 33 08 .GU01.GU02.GU03. f220: 47 49 4f 30 08 47 49 4f 31 08 47 49 4f 32 08 47 GIO0.GIO1.GIO2.G f230: 49 4f 33 08 00 20 00 08 47 4c 30 31 08 47 4c 30 IO3.. ..GL01.GL0 f240: 32 08 00 03 47 50 32 37 01 47 50 32 38 01 00 03 2...GP27.GP28... f250: 00 40 04 00 08 47 42 30 31 08 47 42 30 32 08 47 .@...GB01.GB02.G f260: 42 30 33 08 00 40 08 47 49 56 30 08 47 49 56 31 B03..@.GIV0.GIV1 f270: 08 47 49 56 32 08 47 49 56 33 08 47 55 30 34 08 .GIV2.GIV3.GU04. f280: 47 55 30 35 08 47 55 30 36 08 47 55 30 37 08 47 GU05.GU06.GU07.G f290: 49 4f 34 08 47 49 4f 35 08 47 49 4f 36 08 47 49 IO4.GIO5.GIO6.GI f2a0: 4f 37 08 00 05 00 01 00 02 47 4c 30 35 08 47 4c O7.......GL05.GL f2b0: 30 36 08 47 4c 30 37 08 00 20 47 55 30 38 08 47 06.GL07.. GU08.G f2c0: 55 30 39 08 47 55 30 41 08 47 55 30 42 08 47 49 U09.GU0A.GU0B.GI f2d0: 4f 38 08 47 49 4f 39 08 47 49 4f 41 08 47 49 4f O8.GIO9.GIOA.GIO f2e0: 42 08 47 4c 30 38 08 47 4c 30 39 08 47 4c 30 41 B.GL08.GL09.GL0A f2f0: 08 47 4c 30 42 08 5b 80 5c 47 50 49 4f 01 0b 00 .GL0B.[.\GPIO... f300: 05 0a 80 5b 81 34 5c 47 50 49 4f 01 00 40 06 47 ...[.4\GPIO..@.G f310: 4c 30 30 10 47 4c 31 30 10 00 40 04 47 42 30 30 L00.GL10..@.GB00 f320: 20 00 40 08 47 50 30 30 10 00 40 05 47 4c 32 30 .@.GP00..@.GL20 f330: 20 00 40 06 47 4c 34 30 20 5b 80 52 43 42 41 00 .@.GL40 [.RCBA. f340: 0c 00 c0 d1 fe 0b 00 40 5b 81 0f 52 43 42 41 01 .......@[..RCBA. f350: 00 80 0c 1a 46 44 52 54 20 14 45 07 52 47 50 4c ....FDRT .E.RGPL f360: 0a 70 69 60 70 00 61 a2 0e 60 79 61 0a 01 61 7d .pi`p.a..`ya..a} f370: 61 0a 01 61 76 60 a0 17 95 68 0a 10 79 61 68 61 a..av`...h..yaha f380: 70 47 4c 30 30 60 7b 60 61 60 7a 60 68 60 a1 3e pGL00`{`a`z`h`.> f390: a0 10 95 68 0a 20 70 47 4c 31 30 60 74 68 0a 10 ...h. pGL10`th.. f3a0: 62 a1 1f a0 10 95 68 0a 40 70 47 4c 32 30 60 74 b.....h.@pGL20`t f3b0: 68 0a 20 62 a1 0c 70 47 4c 34 30 60 74 68 0a 40 h. b..pGL40`th.@ f3c0: 62 79 61 62 61 7b 60 61 60 7a 60 62 60 a4 60 14 byaba{`a`z`b`.`. f3d0: 48 0e 53 47 50 4c 0b 70 5c 2f 04 5f 53 42 5f 50 H.SGPL.p\/._SB_P f3e0: 43 49 30 53 42 52 47 47 50 4c 4b 67 70 0a 00 5c CI0SBRGGPLKgp..\ f3f0: 2f 04 5f 53 42 5f 50 43 49 30 53 42 52 47 47 50 /._SB_PCI0SBRGGP f400: 4c 4b 70 69 60 70 00 61 a2 0e 60 79 61 0a 01 61 LKpi`p.a..`ya..a f410: 7d 61 0a 01 61 76 60 a0 4d 06 92 95 68 0a 10 a0 }a..av`.M...h... f420: 10 95 68 0a 20 70 47 4c 31 30 60 74 68 0a 10 62 ..h. pGL10`th..b f430: a1 1f a0 10 95 68 0a 40 70 47 4c 32 30 60 74 68 .....h.@pGL20`th f440: 0a 20 62 a1 0c 70 47 4c 34 30 60 74 68 0a 40 62 . b..pGL40`th.@b f450: 79 61 62 61 80 61 63 7b 60 63 60 79 6a 62 64 7d yaba.ac{`c`yjbd} f460: 60 64 60 a0 0b 95 68 0a 20 70 60 47 4c 31 30 a1 `d`...h. p`GL10. f470: 15 a0 0b 95 68 0a 40 70 60 47 4c 32 30 a1 07 70 ....h.@p`GL20..p f480: 60 47 4c 34 30 a1 1d 79 61 68 61 80 61 63 7b 47 `GL40..yaha.ac{G f490: 4c 30 30 63 60 79 6a 68 64 7d 60 64 60 70 60 47 L00c`yjhd}`d`p`G f4a0: 4c 30 30 70 67 5c 2f 04 5f 53 42 5f 50 43 49 30 L00pg\/._SB_PCI0 f4b0: 53 42 52 47 47 50 4c 4b 14 14 52 47 50 50 09 7a SBRGGPLK..RGPP.z f4c0: 47 50 30 30 68 60 7b 60 0a 01 60 a4 60 14 46 05 GP00h`{`..`.`.F. f4d0: 54 47 50 50 09 70 5c 2f 04 5f 53 42 5f 50 43 49 TGPP.p\/._SB_PCI f4e0: 30 53 42 52 47 47 50 4c 4b 67 70 0a 00 5c 2f 04 0SBRGGPLKgp..\/. f4f0: 5f 53 42 5f 50 43 49 30 53 42 52 47 47 50 4c 4b _SB_PCI0SBRGGPLK f500: 79 0a 01 68 60 7f 47 50 30 30 60 47 50 30 30 70 y..h`.GP00`GP00p f510: 67 5c 2f 04 5f 53 42 5f 50 43 49 30 53 42 52 47 g\/._SB_PCI0SBRG f520: 47 50 4c 4b 14 48 06 53 47 50 50 0a 70 5c 2f 04 GPLK.H.SGPP.p\/. f530: 5f 53 42 5f 50 43 49 30 53 42 52 47 47 50 4c 4b _SB_PCI0SBRGGPLK f540: 67 70 0a 00 5c 2f 04 5f 53 42 5f 50 43 49 30 53 gp..\/._SB_PCI0S f550: 42 52 47 47 50 4c 4b 79 0a 01 68 60 a0 0c 69 7d BRGGPLKy..h`..i} f560: 47 50 30 30 60 47 50 30 30 a1 0e 80 60 61 7b 47 GP00`GP00...`a{G f570: 50 30 30 61 47 50 30 30 70 67 5c 2f 04 5f 53 42 P00aGP00pg\/._SB f580: 5f 50 43 49 30 53 42 52 47 47 50 4c 4b 08 50 4d _PCI0SBRGGPLK.PM f590: 45 57 00 14 0b 53 42 52 53 01 5c 43 50 58 53 14 EW...SBRS.\CPXS. f5a0: 11 53 42 52 57 01 70 5c 53 42 50 53 5c 50 4d 45 .SBRW.p\SBPS\PME f5b0: 57 14 27 53 54 52 50 01 a0 10 68 70 01 5c 53 4c W.'STRP...hp.\SL f5c0: 50 53 70 01 5c 53 4c 50 45 a1 0f 70 00 5c 53 4c PSp.\SLPE..p.\SL f5d0: 50 45 70 01 5c 53 4c 50 53 14 17 48 4b 54 48 08 PEp.\SLPS..HKTH. f5e0: a0 0a 54 48 4c 53 a4 54 54 44 54 a1 05 a4 0b ff ..THLS.TTDT..... f5f0: ff 14 42 0c 43 50 58 53 00 70 0a 00 60 70 0c 00 ..B.CPXS.p..`p.. f600: 00 01 00 61 70 0c 60 00 0e 00 62 70 0c dc 00 0e ...ap.`...bp.... f610: 00 63 a2 49 08 95 60 0a 04 a0 4f 06 92 7b 5c 46 .c.I..`...O..{\F f620: 44 52 54 61 00 a2 31 7b 5c 2e 5f 53 42 5f 52 44 DRTa..1{\._SB_RD f630: 50 45 62 0c 00 00 01 00 00 7d 5c 2e 5f 53 42 5f PEb......}\._SB_ f640: 52 44 50 45 62 0c 00 00 01 00 64 5c 2e 5f 53 42 RDPEb.....d\._SB f650: 5f 57 44 50 45 62 64 a2 31 7b 5c 2e 5f 53 42 5f _WDPEbd.1{\._SB_ f660: 52 44 50 45 63 0c 00 00 00 80 00 7d 5c 2e 5f 53 RDPEc......}\._S f670: 42 5f 52 44 50 45 63 0c 00 00 00 80 64 5c 2e 5f B_RDPEc.....d\._ f680: 53 42 5f 57 44 50 45 63 64 72 62 0b 00 10 62 72 SB_WDPEcdrb...br f690: 63 0b 00 10 63 79 61 0a 01 61 75 60 a2 17 7b 5c c...cya..au`..{\ f6a0: 50 45 50 53 0a 01 00 7d 5c 50 45 50 53 0a 01 5c PEPS...}\PEPS..\ f6b0: 50 45 50 53 10 49 20 5c 5f 47 50 45 14 41 05 5f PEPS.I \_GPE.A._ f6c0: 4c 30 31 00 a0 49 04 92 7b 5c 46 44 52 54 0c 00 L01..I..{\FDRT.. f6d0: 00 04 00 00 a0 39 5c 2f 04 5f 53 42 5f 50 43 49 .....9\/._SB_PCI f6e0: 30 52 50 30 33 48 50 43 53 5c 2f 04 5f 53 42 5f 0RP03HPCS\/._SB_ f6f0: 50 43 49 30 52 50 30 33 48 50 48 4b 86 5c 2f 03 PCI0RP03HPHK.\/. f700: 5f 53 42 5f 50 43 49 30 52 50 30 33 0a 00 14 4f _SB_PCI0RP03...O f710: 1a 5f 4c 30 39 00 a0 49 06 5c 2f 04 5f 53 42 5f ._L09..I.\/._SB_ f720: 50 43 49 30 52 50 30 31 50 4d 45 53 a2 41 04 5c PCI0RP01PMES.A.\ f730: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 31 50 4d /._SB_PCI0RP01PM f740: 45 53 70 0a 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ESp..\/._SB_PCI0 f750: 52 50 30 31 50 4d 45 53 70 0a 01 5c 2f 04 5f 53 RP01PMESp..\/._S f760: 42 5f 50 43 49 30 52 50 30 31 50 4d 43 53 86 5c B_PCI0RP01PMCS.\ f770: 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 31 0a 02 /._SB_PCI0RP01.. f780: a0 49 06 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .I.\/._SB_PCI0RP f790: 30 32 50 4d 45 53 a2 41 04 5c 2f 04 5f 53 42 5f 02PMES.A.\/._SB_ f7a0: 50 43 49 30 52 50 30 32 50 4d 45 53 70 0a 01 5c PCI0RP02PMESp..\ f7b0: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 32 50 4d /._SB_PCI0RP02PM f7c0: 45 53 70 0a 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ESp..\/._SB_PCI0 f7d0: 52 50 30 32 50 4d 43 53 86 5c 2f 03 5f 53 42 5f RP02PMCS.\/._SB_ f7e0: 50 43 49 30 52 50 30 32 0a 02 a0 49 06 5c 2f 04 PCI0RP02...I.\/. f7f0: 5f 53 42 5f 50 43 49 30 52 50 30 34 50 4d 45 53 _SB_PCI0RP04PMES f800: a2 41 04 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 .A.\/._SB_PCI0RP f810: 30 34 50 4d 45 53 70 0a 01 5c 2f 04 5f 53 42 5f 04PMESp..\/._SB_ f820: 50 43 49 30 52 50 30 34 50 4d 45 53 70 0a 01 5c PCI0RP04PMESp..\ f830: 2f 04 5f 53 42 5f 50 43 49 30 52 50 30 34 50 4d /._SB_PCI0RP04PM f840: 43 53 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 CS.\/._SB_PCI0RP f850: 30 34 0a 02 a0 49 06 5c 2f 04 5f 53 42 5f 50 43 04...I.\/._SB_PC f860: 49 30 52 50 30 36 50 4d 45 53 a2 41 04 5c 2f 04 I0RP06PMES.A.\/. f870: 5f 53 42 5f 50 43 49 30 52 50 30 36 50 4d 45 53 _SB_PCI0RP06PMES f880: 70 0a 01 5c 2f 04 5f 53 42 5f 50 43 49 30 52 50 p..\/._SB_PCI0RP f890: 30 36 50 4d 45 53 70 0a 01 5c 2f 04 5f 53 42 5f 06PMESp..\/._SB_ f8a0: 50 43 49 30 52 50 30 36 50 4d 43 53 86 5c 2f 03 PCI0RP06PMCS.\/. f8b0: 5f 53 42 5f 50 43 49 30 52 50 30 36 0a 02 10 4f _SB_PCI0RP06...O f8c0: 06 5c 2f 03 5f 53 42 5f 50 43 49 30 53 42 52 47 .\/._SB_PCI0SBRG f8d0: 5b 80 52 58 34 30 02 0a 40 0a 10 5b 81 0e 52 58 [.RX40..@..[..RX f8e0: 34 30 01 00 40 06 47 50 4c 4b 01 5b 80 52 58 41 40..@.GPLK.[.RXA f8f0: 30 02 0a a0 0a 20 5b 81 36 52 58 41 30 01 00 09 0.... [.6RXA0... f900: 50 42 4c 56 01 42 43 50 45 01 00 45 07 00 01 50 PBLV.BCPE..E...P f910: 42 4d 53 01 00 01 50 4d 43 53 01 45 43 4e 53 01 BMS...PMCS.ECNS. f920: 00 03 45 43 54 31 10 45 4c 45 4e 01 00 07 10 43 ..ECT1.ELEN....C f930: 44 5c 00 5b 80 53 4d 42 30 01 5c 2e 5f 53 42 5f D\.[.SMB0.\._SB_ f940: 53 4d 42 42 0a 10 5b 81 48 04 53 4d 42 30 01 48 SMBB..[.H.SMB0.H f950: 53 54 53 08 53 53 54 53 08 48 53 54 43 08 48 43 STS.SSTS.HSTC.HC f960: 4d 44 08 48 41 44 52 08 48 44 54 30 08 48 44 54 MD.HADR.HDT0.HDT f970: 31 08 42 4c 4b 44 08 53 50 45 43 08 53 52 43 56 1.BLKD.SPEC.SRCV f980: 08 53 4c 56 44 10 41 55 58 53 08 41 55 58 43 08 .SLVD.AUXS.AUXC. f990: 08 52 42 55 46 11 03 0a 20 14 22 48 42 53 59 00 .RBUF... ."HBSY. f9a0: 70 0c ff ff 0f 00 60 a2 12 60 7b 48 53 54 53 0a p.....`..`{HSTS. f9b0: 01 61 a0 05 92 61 a4 00 76 60 a4 01 14 29 57 54 .a...a..v`...)WT f9c0: 53 42 00 70 0c ff ff 0f 00 60 a2 19 60 76 60 7b SB.p.....`..`v`{ f9d0: 48 53 54 53 0a 1e 61 a0 07 93 61 0a 02 a4 01 a0 HSTS..a...a..... f9e0: 04 61 a4 00 a4 00 5b 01 5c 50 34 53 4d 00 14 4f .a....[.\P4SM..O f9f0: 05 53 42 59 54 0a 5b 23 5c 50 34 53 4d ff ff 70 .SBYT.[#\P4SM..p fa00: 41 55 58 43 60 70 0a 00 41 55 58 43 70 68 48 41 AUXC`p..AUXCphHA fa10: 44 52 70 69 48 43 4d 44 70 0a ff 48 53 54 53 70 DRpiHCMDp..HSTSp fa20: 0a 44 48 53 54 43 a0 14 57 54 53 42 70 60 41 55 .DHSTC..WTSBp`AU fa30: 58 43 5b 27 5c 50 34 53 4d a4 01 a1 10 70 60 41 XC['\P4SM....p`A fa40: 55 58 43 5b 27 5c 50 34 53 4d a4 00 a4 ff 14 4d UXC['\P4SM.....M fa50: 05 57 42 59 54 0b 5b 23 5c 50 34 53 4d ff ff 70 .WBYT.[#\P4SM..p fa60: 0a 05 60 a2 3f 60 a0 07 48 42 53 59 76 60 a1 34 ..`.?`..HBSYv`.4 fa70: 70 68 48 41 44 52 70 69 48 43 4d 44 70 6a 48 44 phHADRpiHCMDpjHD fa80: 54 30 70 0a ff 48 53 54 53 70 0a 48 48 53 54 43 T0p..HSTSp.HHSTC fa90: a0 0e 57 54 53 42 5b 27 5c 50 34 53 4d a4 01 a1 ..WTSB['\P4SM... faa0: 03 76 60 5b 27 5c 50 34 53 4d a4 ff 14 44 07 57 .v`['\P4SM...D.W fab0: 57 52 44 0b 5b 23 5c 50 34 53 4d ff ff 70 0a 05 WRD.[#\P4SM..p.. fac0: 60 a2 46 05 60 a0 07 48 42 53 59 76 60 a1 4a 04 `.F.`..HBSYv`.J. fad0: 70 68 48 41 44 52 70 69 48 43 4d 44 7b 6a 0a ff phHADRpiHCMD{j.. fae0: 61 7a 6a 0a 08 62 7b 62 0a ff 62 70 62 48 44 54 azj..b{b..bpbHDT faf0: 30 70 61 48 44 54 31 70 0a ff 48 53 54 53 70 0a 0paHDT1p..HSTSp. fb00: 4c 48 53 54 43 a0 0e 57 54 53 42 5b 27 5c 50 34 LHSTC..WTSB['\P4 fb10: 53 4d a4 01 a1 03 76 60 5b 27 5c 50 34 53 4d a4 SM....v`['\P4SM. fb20: ff 14 41 09 57 42 4c 4b 0b 5b 23 5c 50 34 53 4d ..A.WBLK.[#\P4SM fb30: ff ff 70 0a 05 60 a2 43 07 60 a0 07 48 42 53 59 ..p..`.C.`..HBSY fb40: 76 60 a1 47 06 7d 41 55 58 43 0a 02 41 55 58 43 v`.G.}AUXC..AUXC fb50: 70 68 48 41 44 52 70 69 48 43 4d 44 70 48 53 54 phHADRpiHCMDpHST fb60: 43 61 70 6a 62 70 0a 00 61 a2 13 62 70 83 88 52 Capjbp..a..bp..R fb70: 42 55 46 61 00 42 4c 4b 44 76 62 75 61 70 6a 48 BUFa.BLKDvbuapjH fb80: 44 54 30 70 48 53 54 43 61 70 0a ff 48 53 54 53 DT0pHSTCap..HSTS fb90: 70 0a 54 48 53 54 43 a0 0e 57 54 53 42 5b 27 5c p.THSTC..WTSB['\ fba0: 50 34 53 4d a4 01 a1 03 76 60 5b 27 5c 50 34 53 P4SM....v`['\P4S fbb0: 4d a4 ff 14 4c 05 52 53 42 54 0a 5b 23 5c 50 34 M...L.RSBT.[#\P4 fbc0: 53 4d ff ff 70 0a 05 60 a2 3e 60 a0 07 48 42 53 SM..p..`.>`..HBS fbd0: 59 76 60 a1 33 7d 68 0a 01 48 41 44 52 70 69 48 Yv`.3}h..HADRpiH fbe0: 43 4d 44 70 0a ff 48 53 54 53 70 0a 44 48 53 54 CMDp..HSTSp.DHST fbf0: 43 a0 11 57 54 53 42 5b 27 5c 50 34 53 4d a4 48 C..WTSB['\P4SM.H fc00: 44 54 30 a1 03 76 60 5b 27 5c 50 34 53 4d a4 ff DT0..v`['\P4SM.. fc10: 14 4c 05 52 42 59 54 0a 5b 23 5c 50 34 53 4d ff .L.RBYT.[#\P4SM. fc20: ff 70 0a 05 60 a2 3e 60 a0 07 48 42 53 59 76 60 .p..`.>`..HBSYv` fc30: a1 33 7d 68 0a 01 48 41 44 52 70 69 48 43 4d 44 .3}h..HADRpiHCMD fc40: 70 0a ff 48 53 54 53 70 0a 48 48 53 54 43 a0 11 p..HSTSp.HHSTC.. fc50: 57 54 53 42 5b 27 5c 50 34 53 4d a4 48 44 54 30 WTSB['\P4SM.HDT0 fc60: a1 03 76 60 5b 27 5c 50 34 53 4d a4 ff 14 40 07 ..v`['\P4SM...@. fc70: 52 57 52 44 0a 5b 23 5c 50 34 53 4d ff ff 70 0a RWRD.[#\P4SM..p. fc80: 05 60 a2 42 05 60 a0 07 48 42 53 59 76 60 a1 46 .`.B.`..HBSYv`.F fc90: 04 7d 68 0a 01 48 41 44 52 70 69 48 43 4d 44 70 .}h..HADRpiHCMDp fca0: 0a ff 48 53 54 53 70 0a 4c 48 53 54 43 a0 23 57 ..HSTSp.LHSTC.#W fcb0: 54 53 42 70 48 44 54 30 61 79 61 0a 08 61 70 48 TSBpHDT0aya..apH fcc0: 44 54 31 62 72 61 62 61 5b 27 5c 50 34 53 4d a4 DT1braba['\P4SM. fcd0: 61 a1 03 76 60 5b 27 5c 50 34 53 4d a4 ff 14 43 a..v`['\P4SM...C fce0: 09 52 42 4c 4b 0b 5b 23 5c 50 34 53 4d ff ff 70 .RBLK.[#\P4SM..p fcf0: 0a 05 60 a2 45 07 60 a0 07 48 42 53 59 76 60 a1 ..`.E.`..HBSYv`. fd00: 49 06 7d 41 55 58 43 0a 02 41 55 58 43 7d 68 0a I.}AUXC..AUXC}h. fd10: 01 48 41 44 52 70 69 48 43 4d 44 70 0a ff 48 53 .HADRpiHCMDp..HS fd20: 54 53 70 0a 54 48 53 54 43 a0 3b 57 54 53 42 70 TSp.THSTC.;WTSBp fd30: 48 53 54 43 61 70 48 44 54 30 62 70 62 63 70 0a HSTCapHDT0bpbcp. fd40: 00 52 42 55 46 70 0a 00 61 a2 12 62 70 42 4c 4b .RBUFp..a..bpBLK fd50: 44 88 52 42 55 46 61 00 76 62 75 61 5b 27 5c 50 D.RBUFa.vbua['\P fd60: 34 53 4d a4 63 a1 03 76 60 5b 27 5c 50 34 53 4d 4SM.c..v`['\P4SM fd70: a4 ff 10 43 1c 5c 5f 47 50 45 14 18 5f 4c 30 33 ...C.\_GPE.._L03 fd80: 08 86 5c 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 ..\/._SB_PCI0USB fd90: 31 0a 02 14 18 5f 4c 30 34 08 86 5c 2f 03 5f 53 1...._L04..\/._S fda0: 42 5f 50 43 49 30 55 53 42 32 0a 02 14 18 5f 4c B_PCI0USB2...._L fdb0: 30 43 08 86 5c 2f 03 5f 53 42 5f 50 43 49 30 55 0C..\/._SB_PCI0U fdc0: 53 42 33 0a 02 14 18 5f 4c 30 45 08 86 5c 2f 03 SB3...._L0E..\/. fdd0: 5f 53 42 5f 50 43 49 30 55 53 42 34 0a 02 14 18 _SB_PCI0USB4.... fde0: 5f 4c 30 35 08 86 5c 2f 03 5f 53 42 5f 50 43 49 _L05..\/._SB_PCI fdf0: 30 55 53 42 35 0a 02 14 2a 5f 4c 32 30 08 86 5c 0USB5...*_L20..\ fe00: 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 36 0a 02 /._SB_PCI0USB6.. fe10: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 55 53 42 37 .\/._SB_PCI0USB7 fe20: 0a 02 14 2a 5f 4c 30 44 08 86 5c 2f 03 5f 53 42 ...*_L0D..\/._SB fe30: 5f 50 43 49 30 45 48 43 31 0a 02 86 5c 2f 03 5f _PCI0EHC1...\/._ fe40: 53 42 5f 50 43 49 30 45 48 43 32 0a 02 14 18 5f SB_PCI0EHC2...._ fe50: 4c 30 38 08 86 5c 2f 03 5f 53 42 5f 50 43 49 30 L08..\/._SB_PCI0 fe60: 48 44 45 46 0a 02 14 35 5f 4c 30 42 08 a0 2c 5c HDEF...5_L0B..,\ fe70: 50 4d 45 57 86 5c 2e 5f 53 42 5f 50 43 49 30 0a PMEW.\._SB_PCI0. fe80: 02 86 5c 2f 03 5f 53 42 5f 50 43 49 30 52 50 30 ..\/._SB_PCI0RP0 fe90: 32 0a 02 70 00 5c 50 4d 45 57 a1 01 14 49 09 5f 2..p.\PMEW...I._ fea0: 4c 31 33 00 a0 0c 93 50 46 4c 56 46 44 54 50 a4 L13....PFLVFDTP. feb0: 00 a0 42 08 5c 2f 05 5f 53 42 5f 50 43 49 30 49 ..B.\/._SB_PCI0I fec0: 44 45 30 50 52 54 32 4f 46 4c 47 70 5c 2f 04 5f DE0PRT2OFLGp\/._ fed0: 53 42 5f 50 43 49 30 53 42 52 47 47 50 4c 4b 67 SB_PCI0SBRGGPLKg fee0: 70 0a 00 5c 2f 04 5f 53 42 5f 50 43 49 30 53 42 p..\/._SB_PCI0SB fef0: 52 47 47 50 4c 4b 70 0a 00 47 50 45 33 7b 47 4c RGGPLKp..GPE3{GL ff00: 30 38 0a ef 47 4c 30 38 70 67 5c 2f 04 5f 53 42 08..GL08pg\/._SB ff10: 5f 50 43 49 30 53 42 52 47 47 50 4c 4b 5b 22 0b _PCI0SBRGGPLK[". ff20: 20 03 86 5c 2f 03 5f 53 42 5f 50 43 49 30 49 44 ..\/._SB_PCI0ID ff30: 45 30 0a 82 a4 00 10 4f 1e 5c 2f 03 5f 53 42 5f E0.....O.\/._SB_ ff40: 50 43 49 30 45 48 43 31 5b 82 4c 1d 52 48 55 42 PCI0EHC1[.L.RHUB ff50: 08 5f 41 44 52 0a 00 5b 82 4d 1c 50 52 54 31 08 ._ADR..[.M.PRT1. ff60: 5f 41 44 52 0a 01 08 5f 55 50 43 12 0a 04 0a 00 _ADR..._UPC..... ff70: 0a ff 0a 00 0a 00 5b 82 34 50 52 54 31 08 5f 41 ......[.4PRT1._A ff80: 44 52 0a 01 14 13 5f 55 50 43 00 5c 4f 55 50 43 DR...._UPC.\OUPC ff90: 0a 00 a4 5c 42 55 50 43 14 13 5f 50 4c 44 00 5c ...\BUPC.._PLD.\ ffa0: 4f 50 4c 44 0a 00 a4 5c 42 50 4c 44 5b 82 34 50 OPLD...\BPLD[.4P ffb0: 52 54 32 08 5f 41 44 52 0a 02 14 13 5f 55 50 43 RT2._ADR...._UPC ffc0: 00 5c 4f 55 50 43 0a 01 a4 5c 42 55 50 43 14 13 .\OUPC...\BUPC.. ffd0: 5f 50 4c 44 00 5c 4f 50 4c 44 0a 01 a4 5c 42 50 _PLD.\OPLD...\BP ffe0: 4c 44 5b 82 34 50 52 54 33 08 5f 41 44 52 0a 03 LD[.4PRT3._ADR.. fff0: 14 13 5f 55 50 43 00 5c 4f 55 50 43 0a 02 a4 5c .._UPC.\OUPC...\ 10000: 42 55 50 43 14 13 5f 50 4c 44 00 5c 4f 50 4c 44 BUPC.._PLD.\OPLD 10010: 0a 02 a4 5c 42 50 4c 44 5b 82 34 50 52 54 34 08 ...\BPLD[.4PRT4. 10020: 5f 41 44 52 0a 04 14 13 5f 55 50 43 00 5c 4f 55 _ADR...._UPC.\OU 10030: 50 43 0a 03 a4 5c 42 55 50 43 14 13 5f 50 4c 44 PC...\BUPC.._PLD 10040: 00 5c 4f 50 4c 44 0a 03 a4 5c 42 50 4c 44 5b 82 .\OPLD...\BPLD[. 10050: 34 50 52 54 35 08 5f 41 44 52 0a 05 14 13 5f 55 4PRT5._ADR...._U 10060: 50 43 00 5c 4f 55 50 43 0a 04 a4 5c 42 55 50 43 PC.\OUPC...\BUPC 10070: 14 13 5f 50 4c 44 00 5c 4f 50 4c 44 0a 04 a4 5c .._PLD.\OPLD...\ 10080: 42 50 4c 44 5b 82 34 50 52 54 36 08 5f 41 44 52 BPLD[.4PRT6._ADR 10090: 0a 06 14 13 5f 55 50 43 00 5c 4f 55 50 43 0a 05 ...._UPC.\OUPC.. 100a0: a4 5c 42 55 50 43 14 13 5f 50 4c 44 00 5c 4f 50 .\BUPC.._PLD.\OP 100b0: 4c 44 0a 05 a4 5c 42 50 4c 44 5b 82 34 50 52 54 LD...\BPLD[.4PRT 100c0: 37 08 5f 41 44 52 0a 07 14 13 5f 55 50 43 00 5c 7._ADR...._UPC.\ 100d0: 4f 55 50 43 0a 06 a4 5c 42 55 50 43 14 13 5f 50 OUPC...\BUPC.._P 100e0: 4c 44 00 5c 4f 50 4c 44 0a 06 a4 5c 42 50 4c 44 LD.\OPLD...\BPLD 100f0: 5b 82 34 50 52 54 38 08 5f 41 44 52 0a 08 14 13 [.4PRT8._ADR.... 10100: 5f 55 50 43 00 5c 4f 55 50 43 0a 07 a4 5c 42 55 _UPC.\OUPC...\BU 10110: 50 43 14 13 5f 50 4c 44 00 5c 4f 50 4c 44 0a 07 PC.._PLD.\OPLD.. 10120: a4 5c 42 50 4c 44 10 43 18 5c 2f 03 5f 53 42 5f .\BPLD.C.\/._SB_ 10130: 50 43 49 30 45 48 43 32 5b 82 40 17 52 48 55 42 PCI0EHC2[.@.RHUB 10140: 08 5f 41 44 52 0a 00 5b 82 41 16 50 52 54 31 08 ._ADR..[.A.PRT1. 10150: 5f 41 44 52 0a 01 08 5f 55 50 43 12 0a 04 0a 00 _ADR..._UPC..... 10160: 0a ff 0a 00 0a 00 5b 82 34 50 52 54 31 08 5f 41 ......[.4PRT1._A 10170: 44 52 0a 01 14 13 5f 55 50 43 00 5c 4f 55 50 43 DR...._UPC.\OUPC 10180: 0a 08 a4 5c 42 55 50 43 14 13 5f 50 4c 44 00 5c ...\BUPC.._PLD.\ 10190: 4f 50 4c 44 0a 08 a4 5c 42 50 4c 44 5b 82 34 50 OPLD...\BPLD[.4P 101a0: 52 54 32 08 5f 41 44 52 0a 02 14 13 5f 55 50 43 RT2._ADR...._UPC 101b0: 00 5c 4f 55 50 43 0a 09 a4 5c 42 55 50 43 14 13 .\OUPC...\BUPC.. 101c0: 5f 50 4c 44 00 5c 4f 50 4c 44 0a 09 a4 5c 42 50 _PLD.\OPLD...\BP 101d0: 4c 44 5b 82 34 50 52 54 33 08 5f 41 44 52 0a 03 LD[.4PRT3._ADR.. 101e0: 14 13 5f 55 50 43 00 5c 4f 55 50 43 0a 0a a4 5c .._UPC.\OUPC...\ 101f0: 42 55 50 43 14 13 5f 50 4c 44 00 5c 4f 50 4c 44 BUPC.._PLD.\OPLD 10200: 0a 0a a4 5c 42 50 4c 44 5b 82 34 50 52 54 34 08 ...\BPLD[.4PRT4. 10210: 5f 41 44 52 0a 04 14 13 5f 55 50 43 00 5c 4f 55 _ADR...._UPC.\OU 10220: 50 43 0a 0b a4 5c 42 55 50 43 14 13 5f 50 4c 44 PC...\BUPC.._PLD 10230: 00 5c 4f 50 4c 44 0a 0b a4 5c 42 50 4c 44 5b 82 .\OPLD...\BPLD[. 10240: 34 50 52 54 35 08 5f 41 44 52 0a 05 14 13 5f 55 4PRT5._ADR...._U 10250: 50 43 00 5c 4f 55 50 43 0a 0c a4 5c 42 55 50 43 PC.\OUPC...\BUPC 10260: 14 13 5f 50 4c 44 00 5c 4f 50 4c 44 0a 0c a4 5c .._PLD.\OPLD...\ 10270: 42 50 4c 44 5b 82 34 50 52 54 36 08 5f 41 44 52 BPLD[.4PRT6._ADR 10280: 0a 06 14 13 5f 55 50 43 00 5c 4f 55 50 43 0a 0d ...._UPC.\OUPC.. 10290: a4 5c 42 55 50 43 14 13 5f 50 4c 44 00 5c 4f 50 .\BUPC.._PLD.\OP 102a0: 4c 44 0a 0d a4 5c 42 50 4c 44 10 49 0d 5c 00 08 LD...\BPLD.I.\.. 102b0: 43 4e 54 42 11 11 0a 0e ff ff ff 00 00 00 00 00 CNTB............ 102c0: ff ff 00 ff ff 00 08 56 49 53 42 11 11 0a 0e 01 .......VISB..... 102d0: 01 01 00 00 00 00 00 00 00 00 00 00 00 08 53 48 ..............SH 102e0: 50 42 11 11 0a 0e 07 07 07 07 07 07 07 07 07 07 PB.............. 102f0: 07 07 07 07 08 42 55 50 43 12 0a 04 0a ff 0a 00 .....BUPC....... 10300: 0a 00 0a 00 08 42 50 4c 44 11 07 0a 10 81 00 31 .....BPLD......1 10310: 00 14 1a 4f 55 50 43 09 70 83 88 43 4e 54 42 68 ...OUPC.p..CNTBh 10320: 00 60 70 60 88 42 55 50 43 0a 00 00 14 47 05 4f .`p`.BUPC....G.O 10330: 50 4c 44 09 70 83 88 56 49 53 42 68 00 60 70 83 PLD.p..VISBh.`p. 10340: 88 42 50 4c 44 0a 08 00 61 7b 61 0a fe 61 7d 61 .BPLD...a{a..a}a 10350: 60 61 70 61 88 42 50 4c 44 0a 08 00 70 83 88 53 `apa.BPLD...p..S 10360: 48 50 42 68 00 60 70 83 88 42 50 4c 44 0a 09 00 HPBh.`p..BPLD... 10370: 61 7b 61 0a c3 61 7d 61 60 61 70 61 88 42 50 4c a{a..a}a`apa.BPL 10380: 44 0a 09 00 10 45 49 5c 00 14 1e 4c 49 4d 54 00 D....EI\...LIMT. 10390: 74 5c 2e 5f 53 42 5f 43 50 55 50 5c 2e 5f 53 42 t\._SB_CPUP\._SB 103a0: 5f 53 4c 4d 54 60 a4 60 08 4c 43 44 42 0a 00 14 _SLMT`.`.LCDB... 103b0: 2e 50 50 52 4a 09 a0 10 94 68 0a 03 5c 53 47 50 .PPRJ....h..\SGP 103c0: 4c 0a 18 0a 01 0a 00 5c 2f 05 5f 53 42 5f 50 43 L......\/._SB_PC 103d0: 49 30 52 50 30 34 58 48 43 49 5f 4f 4e 5f 14 11 I0RP04XHCI_ON_.. 103e0: 50 52 4a 53 09 5c 53 47 50 4c 0a 0f 0a 01 0a 00 PRJS.\SGPL...... 103f0: 14 1d 50 52 4a 57 09 5c 2f 05 5f 53 42 5f 50 43 ..PRJW.\/._SB_PC 10400: 49 30 53 42 52 47 45 43 30 5f 53 54 42 52 14 20 I0SBRGEC0_STBR. 10410: 47 4c 49 44 08 a4 5c 2f 05 5f 53 42 5f 50 43 49 GLID..\/._SB_PCI 10420: 30 53 42 52 47 45 43 30 5f 52 50 49 4e 0a 46 14 0SBRGEC0_RPIN.F. 10430: 06 54 4c 49 44 08 14 06 54 47 41 43 08 14 06 54 .TLID...TGAC...T 10440: 47 44 43 09 14 06 46 43 54 52 0b 14 10 4f 57 47 GDC...FCTR...OWG 10450: 44 09 5c 53 47 50 4c 0a 16 0a 01 68 14 38 4f 57 D.\SGPL....h.8OW 10460: 4c 44 09 70 68 5c 2e 5f 53 42 5f 57 52 53 54 7f LD.ph\._SB_WRST. 10470: 68 0a 01 68 a0 20 93 90 5c 2f 03 5f 53 42 5f 41 h..h. ..\/._SB_A 10480: 54 4b 44 57 41 50 46 0a 05 0a 00 5c 53 47 50 4c TKDWAPF....\SGPL 10490: 0a 1c 0a 01 68 14 26 4f 42 54 44 09 70 68 5c 2e ....h.&OBTD.ph\. 104a0: 5f 53 42 5f 42 52 53 54 5c 53 47 50 4c 0a 39 0a _SB_BRST\SGPL.9. 104b0: 01 68 5c 53 47 50 4c 0a 0f 0a 01 68 14 45 05 4f .h\SGPL....h.E.O 104c0: 55 57 44 09 70 68 5c 2e 5f 53 42 5f 55 57 53 54 UWD.ph\._SB_UWST 104d0: a0 1f 68 70 5c 2f 05 5f 53 42 5f 50 43 49 30 53 ..hp\/._SB_PCI0S 104e0: 42 52 47 45 43 30 5f 53 54 38 37 0a 40 0a ff 60 BRGEC0_ST87.@..` 104f0: a1 1e 70 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 ..p\/._SB_PCI0SB 10500: 52 47 45 43 30 5f 53 54 38 37 0a 20 0a ff 60 a4 RGEC0_ST87. ..`. 10510: 0a 01 14 45 05 4f 57 4d 44 09 70 68 5c 2e 5f 53 ...E.OWMD.ph\._S 10520: 42 5f 57 4d 53 54 a0 1f 68 70 5c 2f 05 5f 53 42 B_WMST..hp\/._SB 10530: 5f 50 43 49 30 53 42 52 47 45 43 30 5f 53 54 38 _PCI0SBRGEC0_ST8 10540: 37 0a 40 0a ff 60 a1 1e 70 5c 2f 05 5f 53 42 5f 7.@..`..p\/._SB_ 10550: 50 43 49 30 53 42 52 47 45 43 30 5f 53 54 38 37 PCI0SBRGEC0_ST87 10560: 0a 20 0a ff 60 a4 0a 01 14 45 05 4f 47 50 44 09 . ..`....E.OGPD. 10570: 70 68 5c 2e 5f 53 42 5f 47 50 53 54 a0 1f 68 70 ph\._SB_GPST..hp 10580: 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 52 47 45 \/._SB_PCI0SBRGE 10590: 43 30 5f 53 54 38 37 0a 40 0a ff 60 a1 1e 70 5c C0_ST87.@..`..p\ 105a0: 2f 05 5f 53 42 5f 50 43 49 30 53 42 52 47 45 43 /._SB_PCI0SBRGEC 105b0: 30 5f 53 54 38 37 0a 20 0a ff 60 a4 0a 01 14 45 0_ST87. ..`....E 105c0: 05 4f 54 47 44 09 70 68 5c 2e 5f 53 42 5f 54 47 .OTGD.ph\._SB_TG 105d0: 53 54 a0 1f 68 70 5c 2f 05 5f 53 42 5f 50 43 49 ST..hp\/._SB_PCI 105e0: 30 53 42 52 47 45 43 30 5f 53 54 38 37 0a 40 0a 0SBRGEC0_ST87.@. 105f0: ff 60 a1 1e 70 5c 2f 05 5f 53 42 5f 50 43 49 30 .`..p\/._SB_PCI0 10600: 53 42 52 47 45 43 30 5f 53 54 38 37 0a 20 0a ff SBRGEC0_ST87. .. 10610: 60 a4 0a 01 14 40 08 4f 48 57 52 08 70 00 60 a0 `....@.OHWR.p.`. 10620: 1d 5c 2f 05 5f 53 42 5f 50 43 49 30 52 50 30 32 .\/._SB_PCI0RP02 10630: 57 4c 41 4e 4d 50 44 50 7d 60 0a 80 60 a0 11 5c WLANMPDP}`..`..\ 10640: 2e 5f 53 42 5f 42 54 44 50 7d 60 0b 00 01 60 a0 ._SB_BTDP}`...`. 10650: 10 5c 2e 5f 53 42 5f 55 57 44 50 7d 60 0a 08 60 .\._SB_UWDP}`..` 10660: a0 10 5c 2e 5f 53 42 5f 57 4d 44 50 7d 60 0a 10 ..\._SB_WMDP}`.. 10670: 60 a0 10 5c 2e 5f 53 42 5f 47 50 44 50 7d 60 0a `..\._SB_GPDP}`. 10680: 20 60 a0 10 5c 2e 5f 53 42 5f 54 47 44 50 7d 60 `..\._SB_TGDP}` 10690: 0a 40 60 a4 60 14 43 07 4f 52 53 54 08 70 0a 00 .@`.`.C.ORST.p.. 106a0: 60 a0 10 5c 2e 5f 53 42 5f 57 52 53 54 7d 60 0a `..\._SB_WRST}`. 106b0: 01 60 a0 10 5c 2e 5f 53 42 5f 42 52 53 54 7d 60 .`..\._SB_BRST}` 106c0: 0a 02 60 a0 10 5c 2e 5f 53 42 5f 55 57 53 54 7d ..`..\._SB_UWST} 106d0: 60 0a 04 60 a0 10 5c 2e 5f 53 42 5f 57 4d 53 54 `..`..\._SB_WMST 106e0: 7d 60 0a 08 60 a0 10 5c 2e 5f 53 42 5f 47 50 53 }`..`..\._SB_GPS 106f0: 54 7d 60 0a 10 60 a0 10 5c 2e 5f 53 42 5f 54 47 T}`..`..\._SB_TG 10700: 53 54 7d 60 0a 20 60 a4 60 14 20 47 42 54 4c 08 ST}`. `.`. GBTL. 10710: a4 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 52 47 .\/._SB_PCI0SBRG 10720: 45 43 30 5f 52 50 49 4e 0a 73 14 20 53 42 54 4c EC0_RPIN.s. SBTL 10730: 09 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 52 47 .\/._SB_PCI0SBRG 10740: 45 43 30 5f 53 50 49 4e 0a 73 68 14 08 42 4c 32 EC0_SPIN.sh..BL2 10750: 43 00 a4 00 14 27 53 54 43 46 09 a0 20 93 68 0a C....'STCF.. .h. 10760: 01 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 52 47 .\/._SB_PCI0SBRG 10770: 45 43 30 5f 46 4e 43 54 0a 84 0a 00 14 0b 4f 54 EC0_FNCT......OT 10780: 47 42 08 70 01 60 a4 60 14 28 44 43 50 53 09 70 GB.p.`.`.(DCPS.p 10790: 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 52 47 45 \/._SB_PCI0SBRGE 107a0: 43 30 5f 52 50 49 4e 0a 26 60 7f 60 0a 01 60 a4 C0_RPIN.&`.`..`. 107b0: 60 14 28 41 43 50 53 08 70 5c 2f 05 5f 53 42 5f `.(ACPS.p\/._SB_ 107c0: 50 43 49 30 53 42 52 47 45 43 30 5f 52 50 49 4e PCI0SBRGEC0_RPIN 107d0: 0a 24 60 7f 60 0a 01 60 a4 60 14 3f 4f 4c 50 4d .$`.`..`.`.?OLPM 107e0: 08 a0 38 93 5c 2e 5f 53 42 5f 41 43 50 46 0a 00 ..8.\._SB_ACPF.. 107f0: a0 29 92 94 5c 2f 05 5f 53 42 5f 50 43 49 30 53 .)..\/._SB_PCI0S 10800: 42 52 47 45 43 30 5f 42 30 44 43 0b b8 0b 70 01 BRGEC0_B0DC...p. 10810: 5c 2e 5f 53 42 5f 53 4c 4d 54 10 06 5c 5f 47 50 \._SB_SLMT..\_GP 10820: 45 10 14 5c 2f 04 5f 53 42 5f 50 43 49 30 53 42 E..\/._SB_PCI0SB 10830: 52 47 45 43 30 5f 10 41 4e 5c 2f 04 5f 53 42 5f RGEC0_.AN\/._SB_ 10840: 50 43 49 30 50 45 47 30 47 46 58 30 5b 80 56 53 PCI0PEG0GFX0[.VS 10850: 49 44 02 0a 00 0a 04 5b 81 0b 56 53 49 44 01 52 ID.....[..VSID.R 10860: 45 47 30 20 08 50 43 54 47 12 02 0b 14 18 50 52 EG0 .PCTG.....PR 10870: 53 54 00 a0 0d 93 52 45 47 30 0c ff ff ff ff a4 ST....REG0...... 10880: 00 a1 03 a4 01 08 55 50 44 4e 01 08 4e 58 54 44 ......UPDN..NXTD 10890: 0a 01 08 4c 43 44 4d 0a 01 08 43 52 54 4d 0a 02 ...LCDM...CRTM.. 108a0: 08 54 56 4f 4d 0a 04 08 44 56 49 4d 0a 08 08 48 .TVOM...DVIM...H 108b0: 44 4d 4d 0a 10 08 50 41 43 48 00 08 44 4f 4e 45 DMM...PACH..DONE 108c0: 00 08 44 4f 53 46 01 08 42 52 4e 43 00 14 19 5f ..DOSF..BRNC..._ 108d0: 49 4e 49 00 70 44 4f 53 46 5c 2e 5f 53 42 5f 44 INI.pDOSF\._SB_D 108e0: 4f 53 46 47 45 54 44 14 32 5f 44 4f 53 01 7b 68 OSFGETD.2_DOS.{h 108f0: 0a 03 44 4f 53 46 70 44 4f 53 46 5c 2e 5f 53 42 ..DOSFpDOSF\._SB 10900: 5f 44 4f 53 46 70 7a 68 0a 02 00 42 52 4e 43 7b _DOSFpzh...BRNC{ 10910: 42 52 4e 43 0a 01 42 52 4e 43 08 44 4f 44 50 12 BRNC..BRNC.DODP. 10920: 11 03 0c 00 01 01 00 0c 10 01 01 00 0c 10 00 ff ................ 10930: ff 14 40 06 5f 44 4f 44 00 a0 43 05 92 50 41 43 ..@._DOD..C..PAC 10940: 48 a0 28 93 5c 2e 5f 53 42 5f 56 47 41 46 0a 02 H.(.\._SB_VGAF.. 10950: 70 0b 10 02 88 44 4f 44 50 89 44 4f 44 50 01 0c p....DODP.DODP.. 10960: 10 00 ff ff 00 0a 00 0a 00 00 a1 1b 70 0b 21 01 ............p.!. 10970: 88 44 4f 44 50 89 44 4f 44 50 01 0c 10 00 ff ff .DODP.DODP...... 10980: 00 0a 00 0a 00 00 70 0a 01 50 41 43 48 a4 44 4f ......p..PACH.DO 10990: 44 50 5b 82 4a 05 43 52 54 44 08 5f 41 44 52 0b DP[.J.CRTD._ADR. 109a0: 00 01 14 24 5f 44 43 53 00 70 5c 2e 5f 53 42 5f ...$_DCS.p\._SB_ 109b0: 41 56 4c 44 60 a0 0e 60 a0 0b 7b 60 43 52 54 4d AVLD`..`..{`CRTM 109c0: 00 a4 0a 1f a4 0a 1d 14 19 5f 44 47 53 00 7b 4e ........._DGS.{N 109d0: 58 54 44 43 52 54 4d 60 a0 05 60 a4 0a 01 a4 0a XTDCRTM`..`..... 109e0: 00 14 0c 5f 44 53 53 01 70 01 44 4f 4e 45 5b 82 ..._DSS.p.DONE[. 109f0: 42 07 48 44 4d 49 14 1f 5f 41 44 52 00 a0 12 93 B.HDMI.._ADR.... 10a00: 5c 2e 5f 53 42 5f 56 47 41 46 0a 02 a4 0b 10 02 \._SB_VGAF...... 10a10: a1 05 a4 0b 21 01 14 24 5f 44 43 53 00 70 5c 2e ....!..$_DCS.p\. 10a20: 5f 53 42 5f 41 56 4c 44 60 a0 0e 60 a0 0b 7b 60 _SB_AVLD`..`..{` 10a30: 48 44 4d 4d 00 a4 0a 1f a4 0a 1d 14 19 5f 44 47 HDMM........._DG 10a40: 53 00 7b 4e 58 54 44 48 44 4d 4d 60 a0 05 60 a4 S.{NXTDHDMM`..`. 10a50: 0a 01 a4 0a 00 14 0c 5f 44 53 53 01 70 01 44 4f ......._DSS.p.DO 10a60: 4e 45 5b 82 47 11 4c 43 44 44 08 5f 41 44 52 0b NE[.G.LCDD._ADR. 10a70: 10 01 14 2a 5f 44 43 53 00 49 53 4d 49 0a 95 70 ...*_DCS.ISMI..p 10a80: 5c 2e 5f 53 42 5f 41 43 54 44 60 a0 0e 60 a0 0b \._SB_ACTD`..`.. 10a90: 7b 60 4c 43 44 4d 00 a4 0a 1f a4 0a 1d 14 19 5f {`LCDM........._ 10aa0: 44 47 53 00 7b 4e 58 54 44 4c 43 44 4d 60 a0 05 DGS.{NXTDLCDM`.. 10ab0: 60 a4 0a 01 a4 0a 00 14 0c 5f 44 53 53 01 70 01 `........_DSS.p. 10ac0: 44 4f 4e 45 14 46 06 5f 42 43 4c 00 70 0a 00 60 DONE.F._BCL.p..` 10ad0: 70 42 52 54 49 64 79 64 0a 04 64 a2 4a 04 95 60 pBRTIdyd..d.J..` 10ae0: 0a 0b 74 0a 0b 60 63 74 63 0a 01 63 70 72 64 63 ..t..`ctc..cprdc 10af0: 00 63 70 83 88 5c 2f 05 5f 53 42 5f 50 43 49 30 .cp..\/._SB_PCI0 10b00: 53 42 52 47 45 43 30 5f 50 57 41 43 63 00 61 70 SBRGEC0_PWACc.ap 10b10: 78 77 61 0a 64 00 0a ff 00 00 62 70 62 88 50 43 xwa.d.....bpb.PC 10b20: 54 47 60 00 75 60 a4 50 43 54 47 08 42 43 42 48 TG`.u`.PCTG.BCBH 10b30: 0a 00 14 36 5f 42 43 4d 01 70 47 43 42 4c 68 60 ...6_BCM.pGCBLh` 10b40: 74 74 0a 0b 0a 01 00 60 5c 2e 5f 53 42 5f 4c 42 tt.....`\._SB_LB 10b50: 54 4e 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 52 TN\/._SB_PCI0SBR 10b60: 47 45 43 30 5f 53 54 42 52 14 11 5f 42 51 43 00 GEC0_STBR.._BQC. 10b70: a4 5c 2e 5f 53 42 5f 4c 42 54 4e 14 42 07 53 57 .\._SB_LBTN.B.SW 10b80: 48 44 09 70 01 55 50 44 4e a0 1a 93 44 4f 53 46 HD.p.UPDN...DOSF 10b90: 0a 01 70 68 5c 2e 5f 53 42 5f 53 45 54 44 49 53 ..ph\._SB_SETDIS 10ba0: 4d 49 0a 94 a1 49 04 70 68 4e 58 54 44 70 68 5c MI...I.phNXTDph\ 10bb0: 2e 5f 53 42 5f 53 45 54 44 70 00 44 4f 4e 45 86 ._SB_SETDp.DONE. 10bc0: 47 46 58 30 0a 80 70 0b f4 01 60 a2 22 60 47 45 GFX0..p...`."`GE 10bd0: 54 44 a0 13 93 5c 2e 5f 53 42 5f 41 43 54 44 4e TD...\._SB_ACTDN 10be0: 58 54 44 70 00 60 a1 07 5b 22 0a 0a 76 60 14 17 XTDp.`..["..v`.. 10bf0: 47 45 54 44 00 49 53 4d 49 0a 95 a4 5c 2e 5f 53 GETD.ISMI...\._S 10c00: 42 5f 41 43 54 44 14 17 47 4e 44 44 00 49 53 4d B_ACTD..GNDD.ISM 10c10: 49 0a a0 a4 5c 2e 5f 53 42 5f 53 45 54 44 14 45 I...\._SB_SETD.E 10c20: 08 41 44 56 44 00 a0 4f 05 55 50 44 4e 70 00 55 .ADVD..O.UPDNp.U 10c30: 50 44 4e 5c 2f 05 5f 53 42 5f 50 43 49 30 53 42 PDN\/._SB_PCI0SB 10c40: 52 47 45 43 30 5f 53 50 49 4e 0a 40 0a 00 47 45 RGEC0_SPIN.@..GE 10c50: 54 44 5b 22 0a 01 5c 2f 05 5f 53 42 5f 50 43 49 TD["..\/._SB_PCI 10c60: 30 53 42 52 47 45 43 30 5f 53 50 49 4e 0a 40 0a 0SBRGEC0_SPIN.@. 10c70: 01 70 5c 2e 5f 53 42 5f 41 43 54 44 5c 2e 5f 53 .p\._SB_ACTD\._S 10c80: 42 5f 53 45 54 44 47 4e 44 44 70 5c 2e 5f 53 42 B_SETDGNDDp\._SB 10c90: 5f 53 45 54 44 4e 58 54 44 a4 5c 2e 5f 53 42 5f _SETDNXTD.\._SB_ 10ca0: 53 45 54 44 14 0b 47 43 44 53 00 a4 47 45 54 44 SETD..GCDS..GETD 10cb0: 14 08 4e 41 54 4b 00 a4 01 14 0d 55 50 42 4c 00 ..NATK.....UPBL. 10cc0: 86 4c 43 44 44 0a 86 14 0d 44 57 42 4c 00 86 4c .LCDD....DWBL..L 10cd0: 43 44 44 0a 87 14 42 04 47 43 42 4c 01 7b 68 0c CDD...B.GCBL.{h. 10ce0: ff ff ff 7f 68 70 0a 00 60 a2 18 95 60 0a 0b 70 ....hp..`...`..p 10cf0: 83 88 50 43 54 47 60 00 61 a0 06 92 94 61 68 a5 ..PCTG`.a....ah. 10d00: 75 60 a0 0e 92 95 60 0a 0b 70 74 0a 0b 0a 01 00 u`....`..pt..... 10d10: 62 a1 04 70 60 62 a4 62 08 5c 5f 53 30 5f 12 0a b..p`b.b.\_S0_.. 10d20: 04 0a 00 0a 00 0a 00 0a 00 a0 16 53 53 33 5f 08 ...........SS3_. 10d30: 5c 5f 53 33 5f 12 0a 04 0a 05 0a 00 0a 00 0a 00 \_S3_........... 10d40: a0 16 53 53 34 5f 08 5c 5f 53 34 5f 12 0a 04 0a ..SS4_.\_S4_.... 10d50: 06 0a 00 0a 00 0a 00 08 5c 5f 53 35 5f 12 0a 04 ........\_S5_... 10d60: 0a 07 0a 00 0a 00 0a 00 14 23 50 54 53 5f 01 a0 .........#PTS_.. 10d70: 1c 68 5c 2f 04 5f 53 42 5f 50 43 49 30 47 46 58 .h\/._SB_PCI0GFX 10d80: 30 4f 50 54 53 68 5c 4f 45 4d 53 68 14 30 57 41 0OPTSh\OEMSh.0WA 10d90: 4b 5f 01 5c 2f 03 5f 53 42 5f 41 54 4b 44 47 45 K_.\/._SB_ATKDGE 10da0: 4e 57 68 5c 2f 04 5f 53 42 5f 50 43 49 30 47 46 NWh\/._SB_PCI0GF 10db0: 58 30 4f 57 41 4b 68 5c 4f 45 4d 57 68 X0OWAKh\OEMWh FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 04 9c 5f 41 53 55 53 5f FACP......_ASUS_ 0010: 4e 6f 74 65 62 6f 6f 6b 04 20 22 06 4d 53 46 54 Notebook. ".MSFT 0020: 13 00 01 00 40 4e 7e bf 18 90 78 bf 01 02 09 00 ....@N~...x..... 0030: b2 00 00 00 b0 b1 00 80 00 04 00 00 00 00 00 00 ................ 0040: 04 04 00 00 00 00 00 00 50 04 00 00 08 04 00 00 ........P....... 0050: 20 04 00 00 00 00 00 00 04 02 01 04 10 00 00 85 ............... 0060: 65 00 e9 03 00 04 10 00 01 03 7d 7e 32 13 00 00 e.........}~2... 0070: a5 86 03 00 01 08 00 00 f9 0c 00 00 00 00 00 00 ................ 0080: 06 00 00 00 40 4d 7e bf 00 00 00 00 18 90 78 bf ....@M~.......x. 0090: 00 00 00 00 01 20 00 00 00 04 00 00 00 00 00 00 ..... .......... 00a0: 01 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 04 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 50 04 00 00 00 00 00 00 ........P....... 00d0: 01 20 00 00 08 04 00 00 00 00 00 00 01 80 00 00 . .............. 00e0: 20 04 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ HPET @ 0x00000000 0000: 48 50 45 54 38 00 00 00 01 66 5f 41 53 55 53 5f HPET8....f_ASUS_ 0010: 4e 6f 74 65 62 6f 6f 6b 04 20 22 06 41 4d 49 2e Notebook. ".AMI. 0020: 03 00 00 00 01 a7 86 80 00 00 00 00 00 00 d0 fe ................ 0030: 00 00 00 00 00 ee 37 00 ......7. MCFG @ 0x00000000 0000: 4d 43 46 47 3c 00 00 00 01 2f 5f 41 53 55 53 5f MCFG<..../_ASUS_ 0010: 4e 6f 74 65 62 6f 6f 6b 04 20 22 06 4d 53 46 54 Notebook. ".MSFT 0020: 97 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e0 ................ 0030: 00 00 00 00 00 00 00 3f 00 00 00 00 .......?.... SSDT1 @ 0x00000000 0000: 53 53 44 54 55 09 00 00 01 47 50 6d 52 65 66 00 SSDTU....GPmRef. 0010: 43 70 75 30 49 73 74 00 00 30 00 00 49 4e 54 4c Cpu0Ist..0..INTL 0020: 12 11 09 20 10 40 93 5c 2e 5f 50 52 5f 43 50 55 ... .@.\._PR_CPU 0030: 30 14 0c 5f 50 50 43 00 a4 5c 4c 49 4d 54 14 44 0.._PPC..\LIMT.D 0040: 07 5f 50 43 54 00 a0 3e 90 7b 43 46 47 44 01 00 ._PCT..>.{CFGD.. 0050: 7b 50 44 43 30 01 00 a4 12 2c 02 11 14 0a 11 82 {PDC0....,...... 0060: 0c 00 7f 00 00 00 00 00 00 00 00 00 00 00 79 00 ..............y. 0070: 11 14 0a 11 82 0c 00 7f 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 79 00 a4 12 2c 02 11 14 0a 11 82 0c 00 ...y...,........ 0090: 01 10 00 00 00 10 00 00 00 00 00 00 79 00 11 14 ............y... 00a0: 0a 11 82 0c 00 01 08 00 00 b3 00 00 00 00 00 00 ................ 00b0: 00 79 00 14 19 58 50 53 53 00 a0 0d 7b 50 44 43 .y...XPSS...{PDC 00c0: 30 01 00 a4 4e 50 53 53 a4 53 50 53 53 08 53 50 0...NPSS.SPSS.SP 00d0: 53 53 12 42 1f 0f 12 20 06 0c 99 08 00 00 0c c8 SS.B... ........ 00e0: af 00 00 0c 6e 00 00 00 0c 0a 00 00 00 0c 83 00 ....n........... 00f0: 00 00 0c 00 00 00 00 12 20 06 0c 98 08 00 00 0c ........ ....... 0100: c8 af 00 00 0c 6e 00 00 00 0c 0a 00 00 00 0c 83 .....n.......... 0110: 01 00 00 0c 01 00 00 00 12 20 06 0c d0 07 00 00 ......... ...... 0120: 0c 9d 9a 00 00 0c 6e 00 00 00 0c 0a 00 00 00 0c ......n......... 0130: 83 02 00 00 0c 02 00 00 00 12 20 06 0c 6c 07 00 .......... ..l.. 0140: 00 0c 0b 92 00 00 0c 6e 00 00 00 0c 0a 00 00 00 .......n........ 0150: 0c 83 03 00 00 0c 03 00 00 00 12 20 06 0c 08 07 ........... .... 0160: 00 00 0c f6 87 00 00 0c 6e 00 00 00 0c 0a 00 00 ........n....... 0170: 00 0c 83 04 00 00 0c 04 00 00 00 12 20 06 0c a4 ............ ... 0180: 06 00 00 0c bf 7f 00 00 0c 6e 00 00 00 0c 0a 00 .........n...... 0190: 00 00 0c 83 05 00 00 0c 05 00 00 00 12 20 06 0c ............. .. 01a0: 40 06 00 00 0c 13 76 00 00 0c 6e 00 00 00 0c 0a @.....v...n..... 01b0: 00 00 00 0c 83 06 00 00 0c 06 00 00 00 12 20 06 .............. . 01c0: 0c dc 05 00 00 0c 34 6e 00 00 0c 6e 00 00 00 0c ......4n...n.... 01d0: 0a 00 00 00 0c 83 07 00 00 0c 07 00 00 00 12 20 ............... 01e0: 06 0c 78 05 00 00 0c e4 64 00 00 0c 6e 00 00 00 ..x.....d...n... 01f0: 0c 0a 00 00 00 0c 83 08 00 00 0c 08 00 00 00 12 ................ 0200: 20 06 0c 14 05 00 00 0c 5c 5d 00 00 0c 6e 00 00 .......\]...n.. 0210: 00 0c 0a 00 00 00 0c 83 09 00 00 0c 09 00 00 00 ................ 0220: 12 20 06 0c b0 04 00 00 0c 6d 54 00 00 0c 6e 00 . .......mT...n. 0230: 00 00 0c 0a 00 00 00 0c 83 0a 00 00 0c 0a 00 00 ................ 0240: 00 12 20 06 0c 4c 04 00 00 0c 3f 4d 00 00 0c 6e .. ..L....?M...n 0250: 00 00 00 0c 0a 00 00 00 0c 83 0b 00 00 0c 0b 00 ................ 0260: 00 00 12 20 06 0c e8 03 00 00 0c ae 44 00 00 0c ... ........D... 0270: 6e 00 00 00 0c 0a 00 00 00 0c 83 0c 00 00 0c 0c n............... 0280: 00 00 00 12 20 06 0c 84 03 00 00 0c 4d 3c 00 00 .... .......M<.. 0290: 0c 6e 00 00 00 0c 0a 00 00 00 0c 83 0d 00 00 0c .n.............. 02a0: 0d 00 00 00 12 20 06 0c 20 03 00 00 0c 9b 35 00 ..... .. .....5. 02b0: 00 0c 6e 00 00 00 0c 0a 00 00 00 0c 83 0e 00 00 ..n............. 02c0: 0c 0e 00 00 00 12 20 06 0c 00 00 00 80 0c 00 00 ...... ......... 02d0: 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ................ 02e0: 80 0c 00 00 00 80 12 20 06 0c 00 00 00 80 0c 00 ....... ........ 02f0: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 ................ 0300: 00 80 0c 00 00 00 80 12 20 06 0c 00 00 00 80 0c ........ ....... 0310: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 ................ 0320: 00 00 80 0c 00 00 00 80 12 20 06 0c 00 00 00 80 ......... ...... 0330: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c ................ 0340: 00 00 00 80 0c 00 00 00 80 12 20 06 0c 00 00 00 .......... ..... 0350: 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 0360: 0c 00 00 00 80 0c 00 00 00 80 12 20 06 0c 00 00 ........... .... 0370: 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ................ 0380: 80 0c 00 00 00 80 0c 00 00 00 80 12 20 06 0c 00 ............ ... 0390: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 ................ 03a0: 00 80 0c 00 00 00 80 0c 00 00 00 80 12 20 06 0c ............. .. 03b0: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 ................ 03c0: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 12 20 06 .............. . 03d0: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c ................ 03e0: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 12 20 ............... 03f0: 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 0400: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 12 ................ 0410: 20 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ............... 0420: 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 0430: 12 20 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 . .............. 0440: 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ................ 0450: 80 12 20 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 .. ............. 0460: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 ................ 0470: 00 80 12 20 06 0c 00 00 00 80 0c 00 00 00 80 0c ... ............ 0480: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 ................ 0490: 00 00 80 12 20 06 0c 00 00 00 80 0c 00 00 00 80 .... ........... 04a0: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c ................ 04b0: 00 00 00 80 12 20 06 0c 00 00 00 80 0c 00 00 00 ..... .......... 04c0: 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 04d0: 0c 00 00 00 80 08 5f 50 53 53 12 42 1f 0f 12 20 ......_PSS.B... 04e0: 06 0c 99 08 00 00 0c c8 af 00 00 0c 0a 00 00 00 ................ 04f0: 0c 0a 00 00 00 0c 00 1f 00 00 0c 00 1f 00 00 12 ................ 0500: 20 06 0c 98 08 00 00 0c c8 af 00 00 0c 0a 00 00 ............... 0510: 00 0c 0a 00 00 00 0c 00 16 00 00 0c 00 16 00 00 ................ 0520: 12 20 06 0c d0 07 00 00 0c 9d 9a 00 00 0c 0a 00 . .............. 0530: 00 00 0c 0a 00 00 00 0c 00 14 00 00 0c 00 14 00 ................ 0540: 00 12 20 06 0c 6c 07 00 00 0c 0b 92 00 00 0c 0a .. ..l.......... 0550: 00 00 00 0c 0a 00 00 00 0c 00 13 00 00 0c 00 13 ................ 0560: 00 00 12 20 06 0c 08 07 00 00 0c f6 87 00 00 0c ... ............ 0570: 0a 00 00 00 0c 0a 00 00 00 0c 00 12 00 00 0c 00 ................ 0580: 12 00 00 12 20 06 0c a4 06 00 00 0c bf 7f 00 00 .... ........... 0590: 0c 0a 00 00 00 0c 0a 00 00 00 0c 00 11 00 00 0c ................ 05a0: 00 11 00 00 12 20 06 0c 40 06 00 00 0c 13 76 00 ..... ..@.....v. 05b0: 00 0c 0a 00 00 00 0c 0a 00 00 00 0c 00 10 00 00 ................ 05c0: 0c 00 10 00 00 12 20 06 0c dc 05 00 00 0c 34 6e ...... .......4n 05d0: 00 00 0c 0a 00 00 00 0c 0a 00 00 00 0c 00 0f 00 ................ 05e0: 00 0c 00 0f 00 00 12 20 06 0c 78 05 00 00 0c e4 ....... ..x..... 05f0: 64 00 00 0c 0a 00 00 00 0c 0a 00 00 00 0c 00 0e d............... 0600: 00 00 0c 00 0e 00 00 12 20 06 0c 14 05 00 00 0c ........ ....... 0610: 5c 5d 00 00 0c 0a 00 00 00 0c 0a 00 00 00 0c 00 \].............. 0620: 0d 00 00 0c 00 0d 00 00 12 20 06 0c b0 04 00 00 ......... ...... 0630: 0c 6d 54 00 00 0c 0a 00 00 00 0c 0a 00 00 00 0c .mT............. 0640: 00 0c 00 00 0c 00 0c 00 00 12 20 06 0c 4c 04 00 .......... ..L.. 0650: 00 0c 3f 4d 00 00 0c 0a 00 00 00 0c 0a 00 00 00 ..?M............ 0660: 0c 00 0b 00 00 0c 00 0b 00 00 12 20 06 0c e8 03 ........... .... 0670: 00 00 0c ae 44 00 00 0c 0a 00 00 00 0c 0a 00 00 ....D........... 0680: 00 0c 00 0a 00 00 0c 00 0a 00 00 12 20 06 0c 84 ............ ... 0690: 03 00 00 0c 4d 3c 00 00 0c 0a 00 00 00 0c 0a 00 ....M<.......... 06a0: 00 00 0c 00 09 00 00 0c 00 09 00 00 12 20 06 0c ............. .. 06b0: 20 03 00 00 0c 9b 35 00 00 0c 0a 00 00 00 0c 0a .....5......... 06c0: 00 00 00 0c 00 08 00 00 0c 00 08 00 00 12 20 06 .............. . 06d0: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c ................ 06e0: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 12 20 ............... 06f0: 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 0700: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 12 ................ 0710: 20 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ............... 0720: 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 0730: 12 20 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 . .............. 0740: 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ................ 0750: 80 12 20 06 0c 00 00 00 80 0c 00 00 00 80 0c 00 .. ............. 0760: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 ................ 0770: 00 80 12 20 06 0c 00 00 00 80 0c 00 00 00 80 0c ... ............ 0780: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 ................ 0790: 00 00 80 12 20 06 0c 00 00 00 80 0c 00 00 00 80 .... ........... 07a0: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c ................ 07b0: 00 00 00 80 12 20 06 0c 00 00 00 80 0c 00 00 00 ..... .......... 07c0: 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 07d0: 0c 00 00 00 80 12 20 06 0c 00 00 00 80 0c 00 00 ...... ......... 07e0: 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ................ 07f0: 80 0c 00 00 00 80 12 20 06 0c 00 00 00 80 0c 00 ....... ........ 0800: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 ................ 0810: 00 80 0c 00 00 00 80 12 20 06 0c 00 00 00 80 0c ........ ....... 0820: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 ................ 0830: 00 00 80 0c 00 00 00 80 12 20 06 0c 00 00 00 80 ......... ...... 0840: 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c ................ 0850: 00 00 00 80 0c 00 00 00 80 12 20 06 0c 00 00 00 .......... ..... 0860: 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 ................ 0870: 0c 00 00 00 80 0c 00 00 00 80 12 20 06 0c 00 00 ........... .... 0880: 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 00 ................ 0890: 80 0c 00 00 00 80 0c 00 00 00 80 12 20 06 0c 00 ............ ... 08a0: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 00 ................ 08b0: 00 80 0c 00 00 00 80 0c 00 00 00 80 12 20 06 0c ............. .. 08c0: 00 00 00 80 0c 00 00 00 80 0c 00 00 00 80 0c 00 ................ 08d0: 00 00 80 0c 00 00 00 80 0c 00 00 00 80 08 50 53 ..............PS 08e0: 44 46 00 14 4b 04 5f 50 53 44 00 a0 2e 92 50 53 DF..K._PSD....PS 08f0: 44 46 70 54 43 4e 54 88 83 88 48 50 53 44 00 00 DFpTCNT...HPSD.. 0900: 0a 04 00 70 54 43 4e 54 88 83 88 53 50 53 44 00 ...pTCNT...SPSD. 0910: 00 0a 04 00 70 ff 50 53 44 46 a0 0f 7b 50 44 43 ....p.PSDF..{PDC 0920: 30 0b 00 08 00 a4 48 50 53 44 a4 53 50 53 44 08 0.....HPSD.SPSD. 0930: 48 50 53 44 12 0d 01 12 0a 05 0a 05 00 00 0a fe HPSD............ 0940: 0a 80 08 53 50 53 44 12 0d 01 12 0a 05 0a 05 00 ...SPSD......... 0950: 00 0a fc 0a 80 ..... SSDT2 @ 0x00000000 0000: 53 53 44 54 96 09 00 00 01 ae 50 6d 52 65 66 00 SSDT......PmRef. 0010: 43 70 75 50 6d 00 00 00 00 30 00 00 49 4e 54 4c CpuPm....0..INTL 0020: 12 11 09 20 10 46 0c 5c 00 08 53 53 44 54 12 43 ... .F.\..SSDT.C 0030: 05 0c 0d 43 50 55 30 49 53 54 20 00 0c 18 a0 09 ...CPU0IST ..... 0040: 02 0c 55 09 00 00 0d 41 50 49 53 54 20 20 20 00 ..U....APIST . 0050: 0c 98 ba 5c bf 0c 03 03 00 00 0d 43 50 55 30 43 ...\.......CPU0C 0060: 53 54 20 00 0c 98 a7 5c bf 0c 3f 07 00 00 0d 41 ST ....\..?....A 0070: 50 43 53 54 20 20 20 00 0c 98 9d 5c bf 0c 19 01 PCST ....\.... 0080: 00 00 08 43 46 47 44 0c ff f6 70 00 08 5c 50 44 ...CFGD...p..\PD 0090: 43 30 0c 00 00 00 80 08 5c 50 44 43 31 0c 00 00 C0......\PDC1... 00a0: 00 80 08 5c 50 44 43 32 0c 00 00 00 80 08 5c 50 ...\PDC2......\P 00b0: 44 43 33 0c 00 00 00 80 08 5c 50 44 43 34 0c 00 DC3......\PDC4.. 00c0: 00 00 80 08 5c 50 44 43 35 0c 00 00 00 80 08 5c ....\PDC5......\ 00d0: 50 44 43 36 0c 00 00 00 80 08 5c 50 44 43 37 0c PDC6......\PDC7. 00e0: 00 00 00 80 08 5c 53 44 54 4c 00 10 4b 21 5c 2e .....\SDTL..K!\. 00f0: 5f 50 52 5f 43 50 55 30 08 48 49 30 5f 00 08 48 _PR_CPU0.HI0_..H 0100: 43 30 5f 00 14 14 5f 50 44 43 01 70 43 50 44 43 C0_..._PDC.pCPDC 0110: 68 60 47 43 41 50 60 a4 60 14 17 5f 4f 53 43 04 h`GCAP`.`.._OSC. 0120: 70 43 4f 53 43 68 69 6a 6b 60 47 43 41 50 60 a4 pCOSChijk`GCAP`. 0130: 60 14 48 06 43 50 44 43 01 8a 68 00 52 45 56 53 `.H.CPDC..h.REVS 0140: 8a 68 0a 04 53 49 5a 45 70 87 68 60 70 74 60 0a .h..SIZEp.h`pt`. 0150: 08 00 61 5b 13 68 0a 40 77 61 0a 08 00 54 45 4d ..a[.h.@wa...TEM 0160: 50 08 53 54 53 30 11 07 0a 04 00 00 00 00 73 53 P.STS0........sS 0170: 54 53 30 54 45 4d 50 62 a4 43 4f 53 43 11 13 0a TS0TEMPb.COSC... 0180: 10 16 a6 77 40 0c 29 be 47 9e bd d8 70 58 71 39 ...w@.).G...pXq9 0190: 53 52 45 56 53 53 49 5a 45 62 14 4d 0b 43 4f 53 SREVSSIZEb.M.COS 01a0: 43 04 8a 6b 00 53 54 53 30 8a 6b 0a 04 43 41 50 C..k.STS0.k..CAP 01b0: 30 8a 68 00 49 49 44 30 8a 68 0a 04 49 49 44 31 0.h.IID0.h..IID1 01c0: 8a 68 0a 08 49 49 44 32 8a 68 0a 0c 49 49 44 33 .h..IID2.h..IID3 01d0: 08 55 49 44 30 11 13 0a 10 16 a6 77 40 0c 29 be .UID0......w@.). 01e0: 47 9e bd d8 70 58 71 39 53 8a 55 49 44 30 00 45 G...pXq9S.UID0.E 01f0: 49 44 30 8a 55 49 44 30 0a 04 45 49 44 31 8a 55 ID0.UID0..EID1.U 0200: 49 44 30 0a 08 45 49 44 32 8a 55 49 44 30 0a 0c ID0..EID2.UID0.. 0210: 45 49 44 33 a0 32 92 90 90 93 49 49 44 30 45 49 EID3.2....IID0EI 0220: 44 30 93 49 49 44 31 45 49 44 31 90 93 49 49 44 D0.IID1EID1..IID 0230: 32 45 49 44 32 93 49 49 44 33 45 49 44 33 70 0a 2EID2.IID3EID3p. 0240: 06 53 54 53 30 a4 6b a0 0e 92 93 69 01 70 0a 0a .STS0.k....i.p.. 0250: 53 54 53 30 a4 6b a4 6b 14 4e 0a 47 43 41 50 01 STS0.k.k.N.GCAP. 0260: 8a 68 00 53 54 53 30 8a 68 0a 04 43 41 50 30 a0 .h.STS0.h..CAP0. 0270: 12 91 93 53 54 53 30 0a 06 93 53 54 53 30 0a 0a ...STS0...STS0.. 0280: a4 00 a0 16 7b 53 54 53 30 01 00 7b 43 41 50 30 ....{STS0..{CAP0 0290: 0b ff 0b 43 41 50 30 a4 00 7d 7b 50 44 43 30 0c ...CAP0..}{PDC0. 02a0: ff ff ff 7f 00 43 41 50 30 50 44 43 30 a0 47 05 .....CAP0PDC0.G. 02b0: 7b 43 46 47 44 0a 3e 00 a0 4c 04 90 90 7b 43 46 {CFGD.>..L...{CF 02c0: 47 44 0b 00 04 00 7b 50 44 43 30 0a 18 00 92 7b GD....{PDC0....{ 02d0: 53 44 54 4c 0a 02 00 7d 53 44 54 4c 0a 02 53 44 SDTL...}SDTL..SD 02e0: 54 4c 5b 80 43 53 54 30 00 83 88 53 53 44 54 0a TL[.CST0...SSDT. 02f0: 07 00 83 88 53 53 44 54 0a 08 00 5b 20 43 53 54 ....SSDT...[ CST 0300: 30 48 43 30 5f a4 00 10 46 16 5c 2e 5f 50 52 5f 0HC0_...F.\._PR_ 0310: 43 50 55 31 08 48 49 31 5f 00 08 48 43 31 5f 00 CPU1.HI1_..HC1_. 0320: 14 1f 5f 50 44 43 01 70 5c 2f 03 5f 50 52 5f 43 .._PDC.p\/._PR_C 0330: 50 55 30 43 50 44 43 68 60 47 43 41 50 60 a4 60 PU0CPDCh`GCAP`.` 0340: 14 22 5f 4f 53 43 04 70 5c 2f 03 5f 50 52 5f 43 ."_OSC.p\/._PR_C 0350: 50 55 30 43 4f 53 43 68 69 6a 6b 60 47 43 41 50 PU0COSChijk`GCAP 0360: 60 a4 60 14 45 07 47 43 41 50 01 8a 68 00 53 54 `.`.E.GCAP..h.ST 0370: 53 31 8a 68 0a 04 43 41 50 31 a0 12 91 93 53 54 S1.h..CAP1....ST 0380: 53 31 0a 06 93 53 54 53 31 0a 0a a4 00 a0 16 7b S1...STS1......{ 0390: 53 54 53 31 01 00 7b 43 41 50 31 0b ff 0b 43 41 STS1..{CAP1...CA 03a0: 50 31 a4 00 7d 7b 50 44 43 31 0c ff ff ff 7f 00 P1..}{PDC1...... 03b0: 43 41 50 31 50 44 43 31 a0 10 93 7b 50 44 43 30 CAP1PDC1...{PDC0 03c0: 0a 09 00 0a 09 41 50 50 54 a0 0d 7b 50 44 43 30 .....APPT..{PDC0 03d0: 0a 18 00 41 50 43 54 a4 00 14 4a 04 41 50 43 54 ...APCT...J.APCT 03e0: 00 a0 42 04 90 7b 43 46 47 44 0a 2e 00 92 7b 53 ..B..{CFGD....{S 03f0: 44 54 4c 0a 20 00 7d 53 44 54 4c 0a 20 53 44 54 DTL. .}SDTL. SDT 0400: 4c 5b 80 43 53 54 31 00 83 88 53 53 44 54 0a 0a L[.CST1...SSDT.. 0410: 00 83 88 53 53 44 54 0a 0b 00 5b 20 43 53 54 31 ...SSDT...[ CST1 0420: 48 43 31 5f 14 49 04 41 50 50 54 00 a0 41 04 90 HC1_.I.APPT..A.. 0430: 7b 43 46 47 44 01 00 92 7b 53 44 54 4c 0a 10 00 {CFGD...{SDTL... 0440: 7d 53 44 54 4c 0a 10 53 44 54 4c 5b 80 49 53 54 }SDTL..SDTL[.IST 0450: 31 00 83 88 53 53 44 54 0a 04 00 83 88 53 53 44 1...SSDT.....SSD 0460: 54 0a 05 00 5b 20 49 53 54 31 48 49 31 5f 10 4b T...[ IST1HI1_.K 0470: 0d 5c 2e 5f 50 52 5f 43 50 55 32 14 1f 5f 50 44 .\._PR_CPU2.._PD 0480: 43 01 70 5c 2f 03 5f 50 52 5f 43 50 55 30 43 50 C.p\/._PR_CPU0CP 0490: 44 43 68 60 47 43 41 50 60 a4 60 14 22 5f 4f 53 DCh`GCAP`.`."_OS 04a0: 43 04 70 5c 2f 03 5f 50 52 5f 43 50 55 30 43 4f C.p\/._PR_CPU0CO 04b0: 53 43 68 69 6a 6b 60 47 43 41 50 60 a4 60 14 4b SChijk`GCAP`.`.K 04c0: 08 47 43 41 50 01 8a 68 00 53 54 53 32 8a 68 0a .GCAP..h.STS2.h. 04d0: 04 43 41 50 32 a0 12 91 93 53 54 53 32 0a 06 93 .CAP2....STS2... 04e0: 53 54 53 32 0a 0a a4 00 a0 16 7b 53 54 53 32 01 STS2......{STS2. 04f0: 00 7b 43 41 50 32 0b ff 0b 43 41 50 32 a4 00 7d .{CAP2...CAP2..} 0500: 7b 50 44 43 32 0c ff ff ff 7f 00 43 41 50 32 50 {PDC2......CAP2P 0510: 44 43 32 a0 1b 93 7b 50 44 43 32 0a 09 00 0a 09 DC2...{PDC2..... 0520: 5c 2f 03 5f 50 52 5f 43 50 55 31 41 50 50 54 a0 \/._PR_CPU1APPT. 0530: 18 7b 50 44 43 32 0a 18 00 5c 2f 03 5f 50 52 5f .{PDC2...\/._PR_ 0540: 43 50 55 31 41 50 43 54 a4 00 10 4b 0d 5c 2e 5f CPU1APCT...K.\._ 0550: 50 52 5f 43 50 55 33 14 1f 5f 50 44 43 01 70 5c PR_CPU3.._PDC.p\ 0560: 2f 03 5f 50 52 5f 43 50 55 30 43 50 44 43 68 60 /._PR_CPU0CPDCh` 0570: 47 43 41 50 60 a4 60 14 22 5f 4f 53 43 04 70 5c GCAP`.`."_OSC.p\ 0580: 2f 03 5f 50 52 5f 43 50 55 30 43 4f 53 43 68 69 /._PR_CPU0COSChi 0590: 6a 6b 60 47 43 41 50 60 a4 60 14 4b 08 47 43 41 jk`GCAP`.`.K.GCA 05a0: 50 01 8a 68 00 53 54 53 33 8a 68 0a 04 43 41 50 P..h.STS3.h..CAP 05b0: 33 a0 12 91 93 53 54 53 33 0a 06 93 53 54 53 33 3....STS3...STS3 05c0: 0a 0a a4 00 a0 16 7b 53 54 53 33 01 00 7b 43 41 ......{STS3..{CA 05d0: 50 33 0b ff 0b 43 41 50 33 a4 00 7d 7b 50 44 43 P3...CAP3..}{PDC 05e0: 33 0c ff ff ff 7f 00 43 41 50 33 50 44 43 33 a0 3......CAP3PDC3. 05f0: 1b 93 7b 50 44 43 33 0a 09 00 0a 09 5c 2f 03 5f ..{PDC3.....\/._ 0600: 50 52 5f 43 50 55 31 41 50 50 54 a0 18 7b 50 44 PR_CPU1APPT..{PD 0610: 43 33 0a 18 00 5c 2f 03 5f 50 52 5f 43 50 55 31 C3...\/._PR_CPU1 0620: 41 50 43 54 a4 00 10 4b 0d 5c 2e 5f 50 52 5f 43 APCT...K.\._PR_C 0630: 50 55 34 14 1f 5f 50 44 43 01 70 5c 2f 03 5f 50 PU4.._PDC.p\/._P 0640: 52 5f 43 50 55 30 43 50 44 43 68 60 47 43 41 50 R_CPU0CPDCh`GCAP 0650: 60 a4 60 14 22 5f 4f 53 43 04 70 5c 2f 03 5f 50 `.`."_OSC.p\/._P 0660: 52 5f 43 50 55 30 43 4f 53 43 68 69 6a 6b 60 47 R_CPU0COSChijk`G 0670: 43 41 50 60 a4 60 14 4b 08 47 43 41 50 01 8a 68 CAP`.`.K.GCAP..h 0680: 00 53 54 53 34 8a 68 0a 04 43 41 50 34 a0 12 91 .STS4.h..CAP4... 0690: 93 53 54 53 34 0a 06 93 53 54 53 34 0a 0a a4 00 .STS4...STS4.... 06a0: a0 16 7b 53 54 53 34 01 00 7b 43 41 50 34 0b ff ..{STS4..{CAP4.. 06b0: 0b 43 41 50 34 a4 00 7d 7b 50 44 43 34 0c ff ff .CAP4..}{PDC4... 06c0: ff 7f 00 43 41 50 34 50 44 43 34 a0 1b 93 7b 50 ...CAP4PDC4...{P 06d0: 44 43 34 0a 09 00 0a 09 5c 2f 03 5f 50 52 5f 43 DC4.....\/._PR_C 06e0: 50 55 31 41 50 50 54 a0 18 7b 50 44 43 34 0a 18 PU1APPT..{PDC4.. 06f0: 00 5c 2f 03 5f 50 52 5f 43 50 55 31 41 50 43 54 .\/._PR_CPU1APCT 0700: a4 00 10 4b 0d 5c 2e 5f 50 52 5f 43 50 55 35 14 ...K.\._PR_CPU5. 0710: 1f 5f 50 44 43 01 70 5c 2f 03 5f 50 52 5f 43 50 ._PDC.p\/._PR_CP 0720: 55 30 43 50 44 43 68 60 47 43 41 50 60 a4 60 14 U0CPDCh`GCAP`.`. 0730: 22 5f 4f 53 43 04 70 5c 2f 03 5f 50 52 5f 43 50 "_OSC.p\/._PR_CP 0740: 55 30 43 4f 53 43 68 69 6a 6b 60 47 43 41 50 60 U0COSChijk`GCAP` 0750: a4 60 14 4b 08 47 43 41 50 01 8a 68 00 53 54 53 .`.K.GCAP..h.STS 0760: 35 8a 68 0a 04 43 41 50 35 a0 12 91 93 53 54 53 5.h..CAP5....STS 0770: 35 0a 06 93 53 54 53 35 0a 0a a4 00 a0 16 7b 53 5...STS5......{S 0780: 54 53 35 01 00 7b 43 41 50 35 0b ff 0b 43 41 50 TS5..{CAP5...CAP 0790: 35 a4 00 7d 7b 50 44 43 35 0c ff ff ff 7f 00 43 5..}{PDC5......C 07a0: 41 50 35 50 44 43 35 a0 1b 93 7b 50 44 43 35 0a AP5PDC5...{PDC5. 07b0: 09 00 0a 09 5c 2f 03 5f 50 52 5f 43 50 55 31 41 ....\/._PR_CPU1A 07c0: 50 50 54 a0 18 7b 50 44 43 35 0a 18 00 5c 2f 03 PPT..{PDC5...\/. 07d0: 5f 50 52 5f 43 50 55 31 41 50 43 54 a4 00 10 4b _PR_CPU1APCT...K 07e0: 0d 5c 2e 5f 50 52 5f 43 50 55 36 14 1f 5f 50 44 .\._PR_CPU6.._PD 07f0: 43 01 70 5c 2f 03 5f 50 52 5f 43 50 55 30 43 50 C.p\/._PR_CPU0CP 0800: 44 43 68 60 47 43 41 50 60 a4 60 14 22 5f 4f 53 DCh`GCAP`.`."_OS 0810: 43 04 70 5c 2f 03 5f 50 52 5f 43 50 55 30 43 4f C.p\/._PR_CPU0CO 0820: 53 43 68 69 6a 6b 60 47 43 41 50 60 a4 60 14 4b SChijk`GCAP`.`.K 0830: 08 47 43 41 50 01 8a 68 00 53 54 53 36 8a 68 0a .GCAP..h.STS6.h. 0840: 04 43 41 50 36 a0 12 91 93 53 54 53 36 0a 06 93 .CAP6....STS6... 0850: 53 54 53 36 0a 0a a4 00 a0 16 7b 53 54 53 36 01 STS6......{STS6. 0860: 00 7b 43 41 50 36 0b ff 0b 43 41 50 36 a4 00 7d .{CAP6...CAP6..} 0870: 7b 50 44 43 36 0c ff ff ff 7f 00 43 41 50 36 50 {PDC6......CAP6P 0880: 44 43 36 a0 1b 93 7b 50 44 43 36 0a 09 00 0a 09 DC6...{PDC6..... 0890: 5c 2f 03 5f 50 52 5f 43 50 55 31 41 50 50 54 a0 \/._PR_CPU1APPT. 08a0: 18 7b 50 44 43 36 0a 18 00 5c 2f 03 5f 50 52 5f .{PDC6...\/._PR_ 08b0: 43 50 55 31 41 50 43 54 a4 00 10 4b 0d 5c 2e 5f CPU1APCT...K.\._ 08c0: 50 52 5f 43 50 55 37 14 1f 5f 50 44 43 01 70 5c PR_CPU7.._PDC.p\ 08d0: 2f 03 5f 50 52 5f 43 50 55 30 43 50 44 43 68 60 /._PR_CPU0CPDCh` 08e0: 47 43 41 50 60 a4 60 14 22 5f 4f 53 43 04 70 5c GCAP`.`."_OSC.p\ 08f0: 2f 03 5f 50 52 5f 43 50 55 30 43 4f 53 43 68 69 /._PR_CPU0COSChi 0900: 6a 6b 60 47 43 41 50 60 a4 60 14 4b 08 47 43 41 jk`GCAP`.`.K.GCA 0910: 50 01 8a 68 00 53 54 53 37 8a 68 0a 04 43 41 50 P..h.STS7.h..CAP 0920: 37 a0 12 91 93 53 54 53 37 0a 06 93 53 54 53 37 7....STS7...STS7 0930: 0a 0a a4 00 a0 16 7b 53 54 53 37 01 00 7b 43 41 ......{STS7..{CA 0940: 50 37 0b ff 0b 43 41 50 37 a4 00 7d 7b 50 44 43 P7...CAP7..}{PDC 0950: 37 0c ff ff ff 7f 00 43 41 50 37 50 44 43 37 a0 7......CAP7PDC7. 0960: 1b 93 7b 50 44 43 37 0a 09 00 0a 09 5c 2f 03 5f ..{PDC7.....\/._ 0970: 50 52 5f 43 50 55 31 41 50 50 54 a0 18 7b 50 44 PR_CPU1APPT..{PD 0980: 43 37 0a 18 00 5c 2f 03 5f 50 52 5f 43 50 55 31 C7...\/._PR_CPU1 0990: 41 50 43 54 a4 00 APCT.. SSDT3 @ 0x00000000 0000: 53 53 44 54 3f 07 00 00 01 2b 50 6d 52 65 66 00 SSDT?....+PmRef. 0010: 43 70 75 30 43 73 74 00 01 30 00 00 49 4e 54 4c Cpu0Cst..0..INTL 0020: 12 11 09 20 10 4a 71 5c 2e 5f 50 52 5f 43 50 55 ... .Jq\._PR_CPU 0030: 30 08 43 31 4c 4d 12 1c 04 11 14 0a 11 82 0c 00 0.C1LM.......... 0040: 7f 01 02 01 00 00 00 00 00 00 00 00 79 00 01 01 ............y... 0050: 0b e8 03 08 43 31 4c 48 12 1c 04 11 14 0a 11 82 ....C1LH........ 0060: 0c 00 7f 00 00 00 00 00 00 00 00 00 00 00 79 00 ..............y. 0070: 01 01 0b e8 03 08 43 33 4c 4d 12 1e 04 11 14 0a ......C3LM...... 0080: 11 82 0c 00 7f 01 02 01 10 00 00 00 00 00 00 00 ................ 0090: 79 00 0a 02 0a 9c 0b f4 01 08 43 37 53 4d 12 1d y.........C7SM.. 00a0: 04 11 14 0a 11 82 0c 00 7f 01 02 01 31 00 00 00 ............1... 00b0: 00 00 00 00 79 00 0a 03 0a c7 0a c8 08 43 37 4c ....y........C7L 00c0: 4d 12 1d 04 11 14 0a 11 82 0c 00 7f 01 02 01 30 M..............0 00d0: 00 00 00 00 00 00 00 79 00 0a 03 0a c7 0a c8 08 .......y........ 00e0: 43 36 4c 4d 12 1e 04 11 14 0a 11 82 0c 00 7f 01 C6LM............ 00f0: 02 01 20 00 00 00 00 00 00 00 79 00 0a 03 0a b5 .. .......y..... 0100: 0b 5e 01 08 43 33 4c 49 12 1e 04 11 14 0a 11 82 .^..C3LI........ 0110: 0c 00 01 08 00 00 14 04 00 00 00 00 00 00 79 00 ..............y. 0120: 0a 02 0a 9c 0b f4 01 08 43 36 4c 49 12 1e 04 11 ........C6LI.... 0130: 14 0a 11 82 0c 00 01 08 00 00 15 04 00 00 00 00 ................ 0140: 00 00 79 00 0a 03 0a b5 0b 5e 01 08 43 37 4c 49 ..y......^..C7LI 0150: 12 1d 04 11 14 0a 11 82 0c 00 01 08 00 00 16 04 ................ 0160: 00 00 00 00 00 00 79 00 0a 03 0a c7 0a c8 08 43 ......y........C 0170: 33 53 54 12 0d 04 0a 03 12 02 00 12 02 00 12 02 3ST............. 0180: 00 08 43 32 53 54 12 0a 03 0a 02 12 02 00 12 02 ..C2ST.......... 0190: 00 08 43 31 53 54 12 06 02 01 12 02 00 08 43 53 ..C1ST........CS 01a0: 54 46 00 14 4b 59 5f 43 53 54 08 70 5c 2f 04 5f TF..KY_CST.p\/._ 01b0: 53 42 5f 50 43 49 30 41 43 30 5f 5f 50 53 52 50 SB_PCI0AC0__PSRP 01c0: 57 52 53 a0 46 06 90 92 43 53 54 46 7b 43 46 47 WRS.F...CSTF{CFG 01d0: 44 0c 00 00 40 00 00 70 0a 50 88 43 33 4c 49 0a D...@..p.P.C3LI. 01e0: 02 00 70 0a 50 88 43 33 4c 4d 0a 02 00 70 0a 6d ..p.P.C3LM...p.m 01f0: 88 43 37 53 4d 0a 02 00 70 0a 6d 88 43 37 4c 4d .C7SM...p.m.C7LM 0200: 0a 02 00 70 0a 68 88 43 36 4c 4d 0a 02 00 70 0a ...p.h.C6LM...p. 0210: 6d 88 43 37 4c 49 0a 02 00 70 0a 68 88 43 36 4c m.C7LI...p.h.C6L 0220: 49 0a 02 00 70 ff 43 53 54 46 a0 4a 1f 90 7b 43 I...p.CSTF.J..{C 0230: 46 47 44 0b 00 10 00 7b 50 44 43 30 0b 00 02 00 FGD....{PDC0.... 0240: a0 40 17 91 92 50 57 52 53 92 93 50 46 4c 56 46 .@...PWRS..PFLVF 0250: 4d 42 4c a0 42 06 7b 43 46 47 44 0c 00 00 01 00 MBL.B.{CFGD..... 0260: 00 a0 34 7b 43 46 47 44 0a 08 00 70 43 31 4c 4d ..4{CFGD...pC1LM 0270: 88 43 33 53 54 01 00 70 43 33 4c 4d 88 43 33 53 .C3ST..pC3LM.C3S 0280: 54 0a 02 00 70 43 37 53 4d 88 43 33 53 54 0a 03 T...pC7SM.C3ST.. 0290: 00 a4 43 33 53 54 a1 1f 70 43 31 4c 4d 88 43 32 ..C3ST..pC1LM.C2 02a0: 53 54 01 00 70 43 37 53 4d 88 43 32 53 54 0a 02 ST..pC7SM.C2ST.. 02b0: 00 a4 43 32 53 54 a0 4f 05 7b 43 46 47 44 0a 20 ..C2ST.O.{CFGD. 02c0: 00 a0 34 7b 43 46 47 44 0a 08 00 70 43 31 4c 4d ..4{CFGD...pC1LM 02d0: 88 43 33 53 54 01 00 70 43 33 4c 4d 88 43 33 53 .C3ST..pC3LM.C3S 02e0: 54 0a 02 00 70 43 37 4c 4d 88 43 33 53 54 0a 03 T...pC7LM.C3ST.. 02f0: 00 a4 43 33 53 54 a1 1f 70 43 31 4c 4d 88 43 32 ..C3ST..pC1LM.C2 0300: 53 54 01 00 70 43 37 4c 4d 88 43 32 53 54 0a 02 ST..pC7LM.C2ST.. 0310: 00 a4 43 32 53 54 a0 4f 05 7b 43 46 47 44 0a 10 ..C2ST.O.{CFGD.. 0320: 00 a0 34 7b 43 46 47 44 0a 08 00 70 43 31 4c 4d ..4{CFGD...pC1LM 0330: 88 43 33 53 54 01 00 70 43 33 4c 4d 88 43 33 53 .C3ST..pC3LM.C3S 0340: 54 0a 02 00 70 43 36 4c 4d 88 43 33 53 54 0a 03 T...pC6LM.C3ST.. 0350: 00 a4 43 33 53 54 a1 1f 70 43 31 4c 4d 88 43 32 ..C3ST..pC1LM.C2 0360: 53 54 01 00 70 43 36 4c 4d 88 43 32 53 54 0a 02 ST..pC6LM.C2ST.. 0370: 00 a4 43 32 53 54 a0 27 7b 43 46 47 44 0a 08 00 ..C2ST.'{CFGD... 0380: 70 43 31 4c 4d 88 43 32 53 54 01 00 70 43 33 4c pC1LM.C2ST..pC3L 0390: 4d 88 43 32 53 54 0a 02 00 a4 43 32 53 54 a1 12 M.C2ST....C2ST.. 03a0: 70 43 31 4c 4d 88 43 31 53 54 01 00 a4 43 31 53 pC1LM.C1ST...C1S 03b0: 54 a0 36 7b 43 46 47 44 0a 10 00 70 43 31 4c 4d T.6{CFGD...pC1LM 03c0: 88 43 32 53 54 01 00 70 43 36 4c 4d 88 43 32 53 .C2ST..pC6LM.C2S 03d0: 54 0a 02 00 70 0a 02 88 83 88 43 32 53 54 0a 02 T...p.....C2ST.. 03e0: 00 01 00 a4 43 32 53 54 a1 3c a0 27 7b 43 46 47 ....C2ST.<.'{CFG 03f0: 44 0a 08 00 70 43 31 4c 4d 88 43 32 53 54 01 00 D...pC1LM.C2ST.. 0400: 70 43 33 4c 4d 88 43 32 53 54 0a 02 00 a4 43 32 pC3LM.C2ST....C2 0410: 53 54 a1 12 70 43 31 4c 4d 88 43 31 53 54 01 00 ST..pC1LM.C1ST.. 0420: a4 43 31 53 54 a0 47 19 90 7b 43 46 47 44 0b 00 .C1ST.G..{CFGD.. 0430: 10 00 7b 50 44 43 30 0b 00 01 00 a0 4d 10 91 92 ..{PDC0.....M... 0440: 50 57 52 53 92 93 50 46 4c 56 46 4d 42 4c a0 4f PWRS..PFLVFMBL.O 0450: 05 7b 43 46 47 44 0a 20 00 a0 34 7b 43 46 47 44 .{CFGD. ..4{CFGD 0460: 0a 08 00 70 43 31 4c 4d 88 43 33 53 54 01 00 70 ...pC1LM.C3ST..p 0470: 43 33 4c 49 88 43 33 53 54 0a 02 00 70 43 37 4c C3LI.C3ST...pC7L 0480: 49 88 43 33 53 54 0a 03 00 a4 43 33 53 54 a1 1f I.C3ST....C3ST.. 0490: 70 43 31 4c 4d 88 43 32 53 54 01 00 70 43 37 4c pC1LM.C2ST..pC7L 04a0: 49 88 43 32 53 54 0a 02 00 a4 43 32 53 54 a0 4f I.C2ST....C2ST.O 04b0: 05 7b 43 46 47 44 0a 10 00 a0 34 7b 43 46 47 44 .{CFGD....4{CFGD 04c0: 0a 08 00 70 43 31 4c 4d 88 43 33 53 54 01 00 70 ...pC1LM.C3ST..p 04d0: 43 33 4c 49 88 43 33 53 54 0a 02 00 70 43 36 4c C3LI.C3ST...pC6L 04e0: 49 88 43 33 53 54 0a 03 00 a4 43 33 53 54 a1 1f I.C3ST....C3ST.. 04f0: 70 43 31 4c 4d 88 43 32 53 54 01 00 70 43 36 4c pC1LM.C2ST..pC6L 0500: 49 88 43 32 53 54 0a 02 00 a4 43 32 53 54 a0 27 I.C2ST....C2ST.' 0510: 7b 43 46 47 44 0a 08 00 70 43 31 4c 4d 88 43 32 {CFGD...pC1LM.C2 0520: 53 54 01 00 70 43 33 4c 49 88 43 32 53 54 0a 02 ST..pC3LI.C2ST.. 0530: 00 a4 43 32 53 54 a1 12 70 43 31 4c 4d 88 43 31 ..C2ST..pC1LM.C1 0540: 53 54 01 00 a4 43 31 53 54 a0 36 7b 43 46 47 44 ST...C1ST.6{CFGD 0550: 0a 10 00 70 43 31 4c 4d 88 43 32 53 54 01 00 70 ...pC1LM.C2ST..p 0560: 43 36 4c 49 88 43 32 53 54 0a 02 00 70 0a 02 88 C6LI.C2ST...p... 0570: 83 88 43 32 53 54 0a 02 00 01 00 a4 43 32 53 54 ..C2ST......C2ST 0580: a1 3c a0 27 7b 43 46 47 44 0a 08 00 70 43 31 4c .<.'{CFGD...pC1L 0590: 4d 88 43 32 53 54 01 00 70 43 33 4c 49 88 43 32 M.C2ST..pC3LI.C2 05a0: 53 54 0a 02 00 a4 43 32 53 54 a1 12 70 43 31 4c ST....C2ST..pC1L 05b0: 4d 88 43 31 53 54 01 00 a4 43 31 53 54 a0 4d 10 M.C1ST...C1ST.M. 05c0: 91 92 50 57 52 53 92 93 50 46 4c 56 46 4d 42 4c ..PWRS..PFLVFMBL 05d0: a0 4f 05 7b 43 46 47 44 0a 20 00 a0 34 7b 43 46 .O.{CFGD. ..4{CF 05e0: 47 44 0a 08 00 70 43 31 4c 48 88 43 33 53 54 01 GD...pC1LH.C3ST. 05f0: 00 70 43 33 4c 49 88 43 33 53 54 0a 02 00 70 43 .pC3LI.C3ST...pC 0600: 37 4c 49 88 43 33 53 54 0a 03 00 a4 43 33 53 54 7LI.C3ST....C3ST 0610: a1 1f 70 43 31 4c 48 88 43 32 53 54 01 00 70 43 ..pC1LH.C2ST..pC 0620: 37 4c 49 88 43 32 53 54 0a 02 00 a4 43 32 53 54 7LI.C2ST....C2ST 0630: a0 4f 05 7b 43 46 47 44 0a 10 00 a0 34 7b 43 46 .O.{CFGD....4{CF 0640: 47 44 0a 08 00 70 43 31 4c 48 88 43 33 53 54 01 GD...pC1LH.C3ST. 0650: 00 70 43 33 4c 49 88 43 33 53 54 0a 02 00 70 43 .pC3LI.C3ST...pC 0660: 36 4c 49 88 43 33 53 54 0a 03 00 a4 43 33 53 54 6LI.C3ST....C3ST 0670: a1 1f 70 43 31 4c 48 88 43 32 53 54 01 00 70 43 ..pC1LH.C2ST..pC 0680: 36 4c 49 88 43 32 53 54 0a 02 00 a4 43 32 53 54 6LI.C2ST....C2ST 0690: a0 27 7b 43 46 47 44 0a 08 00 70 43 31 4c 48 88 .'{CFGD...pC1LH. 06a0: 43 32 53 54 01 00 70 43 33 4c 49 88 43 32 53 54 C2ST..pC3LI.C2ST 06b0: 0a 02 00 a4 43 32 53 54 a1 12 70 43 31 4c 48 88 ....C2ST..pC1LH. 06c0: 43 31 53 54 01 00 a4 43 31 53 54 a0 36 7b 43 46 C1ST...C1ST.6{CF 06d0: 47 44 0a 10 00 70 43 31 4c 48 88 43 32 53 54 01 GD...pC1LH.C2ST. 06e0: 00 70 43 36 4c 49 88 43 32 53 54 0a 02 00 70 0a .pC6LI.C2ST...p. 06f0: 02 88 83 88 43 32 53 54 0a 02 00 01 00 a4 43 32 ....C2ST......C2 0700: 53 54 a1 3c a0 27 7b 43 46 47 44 0a 08 00 70 43 ST.<.'{CFGD...pC 0710: 31 4c 48 88 43 32 53 54 01 00 70 43 33 4c 49 88 1LH.C2ST..pC3LI. 0720: 43 32 53 54 0a 02 00 a4 43 32 53 54 a1 12 70 43 C2ST....C2ST..pC SSDT4 @ 0x00000000 0000: 53 53 44 54 03 03 00 00 01 77 50 6d 52 65 66 00 SSDT.....wPmRef. 0010: 41 70 49 73 74 00 00 00 00 30 00 00 49 4e 54 4c ApIst....0..INTL 0020: 12 11 09 20 10 48 06 5c 2e 5f 50 52 5f 43 50 55 ... .H.\._PR_CPU 0030: 31 14 16 5f 50 50 43 00 a4 5c 2f 03 5f 50 52 5f 1.._PPC..\/._PR_ 0040: 43 50 55 30 5f 50 50 43 14 16 5f 50 43 54 00 a4 CPU0_PPC.._PCT.. 0050: 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 43 54 14 \/._PR_CPU0_PCT. 0060: 16 5f 50 53 53 00 a4 5c 2f 03 5f 50 52 5f 43 50 ._PSS..\/._PR_CP 0070: 55 30 5f 50 53 53 14 16 5f 50 53 44 00 a4 5c 2f U0_PSS.._PSD..\/ 0080: 03 5f 50 52 5f 43 50 55 30 5f 50 53 44 10 48 06 ._PR_CPU0_PSD.H. 0090: 5c 2e 5f 50 52 5f 43 50 55 32 14 16 5f 50 50 43 \._PR_CPU2.._PPC 00a0: 00 a4 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 50 ..\/._PR_CPU0_PP 00b0: 43 14 16 5f 50 43 54 00 a4 5c 2f 03 5f 50 52 5f C.._PCT..\/._PR_ 00c0: 43 50 55 30 5f 50 43 54 14 16 5f 50 53 53 00 a4 CPU0_PCT.._PSS.. 00d0: 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 53 53 14 \/._PR_CPU0_PSS. 00e0: 16 5f 50 53 44 00 a4 5c 2f 03 5f 50 52 5f 43 50 ._PSD..\/._PR_CP 00f0: 55 30 5f 50 53 44 10 48 06 5c 2e 5f 50 52 5f 43 U0_PSD.H.\._PR_C 0100: 50 55 33 14 16 5f 50 50 43 00 a4 5c 2f 03 5f 50 PU3.._PPC..\/._P 0110: 52 5f 43 50 55 30 5f 50 50 43 14 16 5f 50 43 54 R_CPU0_PPC.._PCT 0120: 00 a4 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 43 ..\/._PR_CPU0_PC 0130: 54 14 16 5f 50 53 53 00 a4 5c 2f 03 5f 50 52 5f T.._PSS..\/._PR_ 0140: 43 50 55 30 5f 50 53 53 14 16 5f 50 53 44 00 a4 CPU0_PSS.._PSD.. 0150: 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 53 44 10 \/._PR_CPU0_PSD. 0160: 48 06 5c 2e 5f 50 52 5f 43 50 55 34 14 16 5f 50 H.\._PR_CPU4.._P 0170: 50 43 00 a4 5c 2f 03 5f 50 52 5f 43 50 55 30 5f PC..\/._PR_CPU0_ 0180: 50 50 43 14 16 5f 50 43 54 00 a4 5c 2f 03 5f 50 PPC.._PCT..\/._P 0190: 52 5f 43 50 55 30 5f 50 43 54 14 16 5f 50 53 53 R_CPU0_PCT.._PSS 01a0: 00 a4 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 53 ..\/._PR_CPU0_PS 01b0: 53 14 16 5f 50 53 44 00 a4 5c 2f 03 5f 50 52 5f S.._PSD..\/._PR_ 01c0: 43 50 55 30 5f 50 53 44 10 48 06 5c 2e 5f 50 52 CPU0_PSD.H.\._PR 01d0: 5f 43 50 55 35 14 16 5f 50 50 43 00 a4 5c 2f 03 _CPU5.._PPC..\/. 01e0: 5f 50 52 5f 43 50 55 30 5f 50 50 43 14 16 5f 50 _PR_CPU0_PPC.._P 01f0: 43 54 00 a4 5c 2f 03 5f 50 52 5f 43 50 55 30 5f CT..\/._PR_CPU0_ 0200: 50 43 54 14 16 5f 50 53 53 00 a4 5c 2f 03 5f 50 PCT.._PSS..\/._P 0210: 52 5f 43 50 55 30 5f 50 53 53 14 16 5f 50 53 44 R_CPU0_PSS.._PSD 0220: 00 a4 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 50 53 ..\/._PR_CPU0_PS 0230: 44 10 48 06 5c 2e 5f 50 52 5f 43 50 55 36 14 16 D.H.\._PR_CPU6.. 0240: 5f 50 50 43 00 a4 5c 2f 03 5f 50 52 5f 43 50 55 _PPC..\/._PR_CPU 0250: 30 5f 50 50 43 14 16 5f 50 43 54 00 a4 5c 2f 03 0_PPC.._PCT..\/. 0260: 5f 50 52 5f 43 50 55 30 5f 50 43 54 14 16 5f 50 _PR_CPU0_PCT.._P 0270: 53 53 00 a4 5c 2f 03 5f 50 52 5f 43 50 55 30 5f SS..\/._PR_CPU0_ 0280: 50 53 53 14 16 5f 50 53 44 00 a4 5c 2f 03 5f 50 PSS.._PSD..\/._P 0290: 52 5f 43 50 55 30 5f 50 53 44 10 48 06 5c 2e 5f R_CPU0_PSD.H.\._ 02a0: 50 52 5f 43 50 55 37 14 16 5f 50 50 43 00 a4 5c PR_CPU7.._PPC..\ 02b0: 2f 03 5f 50 52 5f 43 50 55 30 5f 50 50 43 14 16 /._PR_CPU0_PPC.. 02c0: 5f 50 43 54 00 a4 5c 2f 03 5f 50 52 5f 43 50 55 _PCT..\/._PR_CPU 02d0: 30 5f 50 43 54 14 16 5f 50 53 53 00 a4 5c 2f 03 0_PCT.._PSS..\/. 02e0: 5f 50 52 5f 43 50 55 30 5f 50 53 53 14 16 5f 50 _PR_CPU0_PSS.._P 02f0: 53 44 00 a4 5c 2f 03 5f 50 52 5f 43 50 55 30 5f SD..\/._PR_CPU0_ 0300: 50 53 44 PSD SSDT5 @ 0x00000000 0000: 53 53 44 54 19 01 00 00 01 ed 50 6d 52 65 66 00 SSDT......PmRef. 0010: 41 70 43 73 74 00 00 00 00 30 00 00 49 4e 54 4c ApCst....0..INTL 0020: 12 11 09 20 10 22 5c 2e 5f 50 52 5f 43 50 55 31 ... ."\._PR_CPU1 0030: 14 16 5f 43 53 54 00 a4 5c 2f 03 5f 50 52 5f 43 .._CST..\/._PR_C 0040: 50 55 30 5f 43 53 54 10 22 5c 2e 5f 50 52 5f 43 PU0_CST."\._PR_C 0050: 50 55 32 14 16 5f 43 53 54 00 a4 5c 2f 03 5f 50 PU2.._CST..\/._P 0060: 52 5f 43 50 55 30 5f 43 53 54 10 22 5c 2e 5f 50 R_CPU0_CST."\._P 0070: 52 5f 43 50 55 33 14 16 5f 43 53 54 00 a4 5c 2f R_CPU3.._CST..\/ 0080: 03 5f 50 52 5f 43 50 55 30 5f 43 53 54 10 22 5c ._PR_CPU0_CST."\ 0090: 2e 5f 50 52 5f 43 50 55 34 14 16 5f 43 53 54 00 ._PR_CPU4.._CST. 00a0: a4 5c 2f 03 5f 50 52 5f 43 50 55 30 5f 43 53 54 .\/._PR_CPU0_CST 00b0: 10 22 5c 2e 5f 50 52 5f 43 50 55 35 14 16 5f 43 ."\._PR_CPU5.._C 00c0: 53 54 00 a4 5c 2f 03 5f 50 52 5f 43 50 55 30 5f ST..\/._PR_CPU0_ 00d0: 43 53 54 10 22 5c 2e 5f 50 52 5f 43 50 55 36 14 CST."\._PR_CPU6. 00e0: 16 5f 43 53 54 00 a4 5c 2f 03 5f 50 52 5f 43 50 ._CST..\/._PR_CP 00f0: 55 30 5f 43 53 54 10 22 5c 2e 5f 50 52 5f 43 50 U0_CST."\._PR_CP 0100: 55 37 14 16 5f 43 53 54 00 a4 5c 2f 03 5f 50 52 U7.._CST..\/._PR 0110: 5f 43 50 55 30 5f 43 53 54 _CPU0_CST fwts-test/wmi-0001/acpidump-0003.log000066400000000000000000012270061465205512700170740ustar00rootroot00000000000000DSDT @ 0x00000000 0000: 44 53 44 54 41 f7 00 00 01 7d 44 45 4c 4c 20 20 DSDTA....}DELL 0010: 51 41 30 39 20 20 20 00 00 10 00 00 4c 4f 48 52 QA09 .....LOHR 0020: 02 00 00 00 5b 80 4e 56 31 5f 01 0a 72 0a 02 5b ....[.NV1_..r..[ 0030: 81 10 4e 56 31 5f 01 49 4e 44 58 08 44 41 54 41 ..NV1_.INDX.DATA 0040: 08 5b 86 20 49 4e 44 58 44 41 54 41 01 00 40 60 .[. INDXDATA..@` 0050: 42 52 47 41 04 00 04 42 52 47 44 04 00 14 53 34 BRGA...BRGD...S4 0060: 46 47 08 10 39 5f 50 52 5f 5b 83 0b 43 30 30 30 FG..9_PR_[..C000 0070: 00 10 08 00 00 06 5b 83 0b 43 30 30 31 01 10 08 ......[..C001... 0080: 00 00 06 5b 83 0b 43 30 30 32 02 10 08 00 00 06 ...[..C002...... 0090: 5b 83 0b 43 30 30 33 03 10 08 00 00 06 08 5f 53 [..C003......._S 00a0: 30 5f 12 0a 04 0a 00 0a 00 0a 00 0a 00 08 5f 53 0_............_S 00b0: 33 5f 12 0a 04 0a 03 0a 03 0a 00 0a 00 08 5f 53 3_............_S 00c0: 34 5f 12 0a 04 0a 04 0a 04 0a 00 0a 00 08 5f 53 4_............_S 00d0: 35 5f 12 0a 04 0a 05 0a 05 0a 00 0a 00 08 54 5a 5_............TZ 00e0: 46 47 0a 00 5b 80 44 45 42 32 01 0a 80 0a 02 5b FG..[.DEB2.....[ 00f0: 81 0b 44 45 42 32 02 50 38 30 48 10 5b 80 50 4d ..DEB2.P80H.[.PM 0100: 49 4f 01 0b d6 0c 0a 02 5b 81 10 50 4d 49 4f 01 IO......[..PMIO. 0110: 50 49 44 58 08 50 44 41 54 08 5b 80 50 30 31 5f PIDX.PDAT.[.P01_ 0120: 01 0b 01 08 0a 01 5b 81 0b 50 30 31 5f 01 50 53 ......[..P01_.PS 0130: 54 31 08 5b 80 53 50 52 54 01 0a b0 0a 02 5b 81 T1.[.SPRT.....[. 0140: 10 53 50 52 54 11 53 53 4d 50 08 53 53 4d 44 08 .SPRT.SSMP.SSMD. 0150: 5b 80 4f 4e 56 53 00 0c 98 0f 34 5e 0b 05 00 5b [.ONVS....4^...[ 0160: 81 1f 4f 4e 56 53 00 42 52 49 44 08 50 57 52 53 ..ONVS.BRID.PWRS 0170: 08 45 43 4f 4e 08 42 52 54 4c 08 4c 49 44 53 08 .ECON.BRTL.LIDS. 0180: 10 4b 2f 5f 53 42 5f 08 4c 49 4e 58 0a 00 08 4f .K/_SB_.LINX...O 0190: 53 53 50 0a 00 08 4f 53 54 42 ff 5b 80 4f 53 54 SSP...OSTB.[.OST 01a0: 59 00 0c 18 0f 34 5e 0c 01 00 00 00 5b 81 0b 4f Y....4^.....[..O 01b0: 53 54 59 00 54 50 4f 53 08 14 46 26 4f 53 54 50 STY.TPOS..F&OSTP 01c0: 00 a0 49 25 93 4f 53 54 42 ff a0 49 16 5b 12 5f ..I%.OSTB..I.[._ 01d0: 4f 53 49 60 70 0a 00 4f 53 54 42 70 0a 00 54 50 OSI`p..OSTBp..TP 01e0: 4f 53 a0 21 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 OS.!_OSI.Windows 01f0: 20 32 30 30 31 00 70 0a 08 4f 53 54 42 70 0a 08 2001.p..OSTBp.. 0200: 54 50 4f 53 a0 23 5f 4f 53 49 0d 57 69 6e 64 6f TPOS.#_OSI.Windo 0210: 77 73 20 32 30 30 31 2e 31 00 70 0a 20 4f 53 54 ws 2001.1.p. OST 0220: 42 70 0a 20 54 50 4f 53 a0 25 5f 4f 53 49 0d 57 Bp. TPOS.%_OSI.W 0230: 69 6e 64 6f 77 73 20 32 30 30 31 20 53 50 31 00 indows 2001 SP1. 0240: 70 0a 10 4f 53 54 42 70 0a 10 54 50 4f 53 a0 25 p..OSTBp..TPOS.% 0250: 5f 4f 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 _OSI.Windows 200 0260: 31 20 53 50 32 00 70 0a 11 4f 53 54 42 70 0a 11 1 SP2.p..OSTBp.. 0270: 54 50 4f 53 a0 25 5f 4f 53 49 0d 57 69 6e 64 6f TPOS.%_OSI.Windo 0280: 77 73 20 32 30 30 31 20 53 50 33 00 70 0a 12 4f ws 2001 SP3.p..O 0290: 53 54 42 70 0a 12 54 50 4f 53 a0 21 5f 4f 53 49 STBp..TPOS.!_OSI 02a0: 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 00 70 0a .Windows 2006.p. 02b0: 40 4f 53 54 42 70 0a 40 54 50 4f 53 a0 2c 5f 4f @OSTBp.@TPOS.,_O 02c0: 53 49 0d 57 69 6e 64 6f 77 73 20 32 30 30 36 20 SI.Windows 2006 02d0: 53 50 31 00 70 0a 01 4f 53 53 50 70 0a 40 4f 53 SP1.p..OSSPp.@OS 02e0: 54 42 70 0a 40 54 50 4f 53 a0 28 5f 4f 53 49 0d TBp.@TPOS.(_OSI. 02f0: 57 69 6e 64 6f 77 73 20 32 30 30 39 00 70 0a 01 Windows 2009.p.. 0300: 4f 53 53 50 70 0a 50 4f 53 54 42 70 0a 50 54 50 OSSPp.POSTBp.PTP 0310: 4f 53 a0 21 5f 4f 53 49 0d 4c 69 6e 75 78 00 70 OS.!_OSI.Linux.p 0320: 0a 01 4c 49 4e 58 70 0a 80 4f 53 54 42 70 0a 80 ..LINXp..OSTBp.. 0330: 54 50 4f 53 a1 4c 0c a0 49 0b 5b 12 5f 4f 53 5f TPOS.L..I.[._OS_ 0340: 60 a0 2a 53 45 51 4c 5f 4f 53 5f 0d 4d 69 63 72 `.*SEQL_OS_.Micr 0350: 6f 73 6f 66 74 20 57 69 6e 64 6f 77 73 00 70 0a osoft Windows.p. 0360: 01 4f 53 54 42 70 0a 01 54 50 4f 53 a1 44 08 a0 .OSTBp..TPOS.D.. 0370: 41 04 53 45 51 4c 5f 4f 53 5f 0d 4d 69 63 72 6f A.SEQL_OS_.Micro 0380: 73 6f 66 74 20 57 69 6e 64 6f 77 73 4d 45 3a 20 soft WindowsME: 0390: 4d 69 6c 6c 65 6e 6e 69 75 6d 20 45 64 69 74 69 Millennium Editi 03a0: 6f 6e 00 70 0a 02 4f 53 54 42 70 0a 02 54 50 4f on.p..OSTBp..TPO 03b0: 53 a1 3f a0 2d 53 45 51 4c 5f 4f 53 5f 0d 4d 69 S.?.-SEQL_OS_.Mi 03c0: 63 72 6f 73 6f 66 74 20 57 69 6e 64 6f 77 73 20 crosoft Windows 03d0: 4e 54 00 70 0a 04 4f 53 54 42 70 0a 04 54 50 4f NT.p..OSTBp..TPO 03e0: 53 a1 0f 70 0a 00 4f 53 54 42 70 0a 00 54 50 4f S..p..OSTBp..TPO 03f0: 53 a1 0f 70 0a 00 4f 53 54 42 70 0a 00 54 50 4f S..p..OSTBp..TPO 0400: 53 5e 2f 03 50 43 49 30 4c 50 43 30 50 48 53 31 S^/.PCI0LPC0PHS1 0410: 0a b0 a0 08 93 54 50 4f 53 0a 80 a4 4f 53 54 42 .....TPOS...OSTB 0420: 14 4b 05 53 45 51 4c 0a 70 87 68 60 70 87 69 61 .K.SEQL.p.h`p.ia 0430: a0 07 92 93 60 61 a4 00 08 42 55 46 30 11 02 60 ....`a...BUF0..` 0440: 70 68 42 55 46 30 08 42 55 46 31 11 02 60 70 69 phBUF0.BUF1..`pi 0450: 42 55 46 31 70 00 62 a2 22 95 62 60 70 83 88 42 BUF1p.b.".b`p..B 0460: 55 46 30 62 00 63 70 83 88 42 55 46 31 62 00 64 UF0b.cp..BUF1b.d 0470: a0 07 92 93 63 64 a4 00 75 62 a4 01 08 4d 59 39 ....cd..ub...MY9 0480: 46 0a 00 14 43 08 5f 50 54 53 01 70 0a 01 4d 59 F...C._PTS.p..MY 0490: 39 46 a0 05 93 68 0a 05 a0 21 93 68 0a 04 70 0a 9F...h...!.h..p. 04a0: 01 53 34 46 47 70 00 5c 2f 04 5f 53 42 5f 50 43 .S4FGp.\/._SB_PC 04b0: 49 30 53 4d 42 5f 50 48 59 44 a0 30 93 68 0a 03 I0SMB_PHYD.0.h.. 04c0: 70 00 5c 2f 04 5f 53 42 5f 50 43 49 30 53 4d 42 p.\/._SB_PCI0SMB 04d0: 5f 52 53 54 55 70 0a 01 5c 2f 04 5f 53 42 5f 50 _RSTUp..\/._SB_P 04e0: 43 49 30 53 4d 42 5f 42 4c 4e 4b a0 1b 93 68 0a CI0SMB_BLNK...h. 04f0: 01 70 0a 02 5c 2f 04 5f 53 42 5f 50 43 49 30 53 .p..\/._SB_PCI0S 0500: 4d 42 5f 42 4c 4e 4b 14 43 23 5f 57 41 4b 01 70 MB_BLNK.C#_WAK.p 0510: 0a 00 4d 59 39 46 a0 0f 92 95 5c 2e 5f 53 42 5f ..MY9F....\._SB_ 0520: 54 50 4f 53 0a 40 a0 0e 93 5c 2e 5f 53 42 5f 54 TPOS.@...\._SB_T 0530: 50 4f 53 0a 80 70 54 5a 46 47 60 a0 0c 60 5c 2e POS..pTZFG`..`\. 0540: 5f 54 5a 5f 49 4e 49 54 a0 4c 04 93 68 0a 03 5c _TZ_INIT.L..h..\ 0550: 2e 5f 47 50 45 54 52 49 47 5c 2e 5f 47 50 45 57 ._GPETRIG\._GPEW 0560: 4c 45 4e 70 0a 71 53 53 4d 50 70 01 5c 2f 04 5f LENp.qSSMPp.\/._ 0570: 53 42 5f 50 43 49 30 53 4d 42 5f 52 53 54 55 70 SB_PCI0SMB_RSTUp 0580: 0a 00 5c 2f 04 5f 53 42 5f 50 43 49 30 53 4d 42 ..\/._SB_PCI0SMB 0590: 5f 53 52 42 54 a0 41 08 93 68 0a 04 a0 18 47 50 _SRBT.A..h....GP 05a0: 49 43 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 IC\/._SB_PCI0LPC 05b0: 30 44 53 50 49 5c 2e 5f 47 50 45 54 52 49 47 5c 0DSPI\._GPETRIG\ 05c0: 2e 5f 47 50 45 57 4c 45 4e 70 01 5c 2f 04 5f 53 ._GPEWLENp.\/._S 05d0: 42 5f 50 43 49 30 53 4d 42 5f 50 48 59 44 70 0a B_PCI0SMB_PHYDp. 05e0: 0f 5c 2f 04 5f 53 42 5f 50 43 49 30 4c 50 43 30 .\/._SB_PCI0LPC0 05f0: 42 43 4d 44 70 0a ab 5c 2f 04 5f 53 42 5f 50 43 BCMDp..\/._SB_PC 0600: 49 30 4c 50 43 30 53 4d 49 43 86 5c 2e 5f 53 42 I0LPC0SMIC.\._SB 0610: 5f 50 57 52 42 0a 02 a0 20 93 68 0a 01 7b 50 53 _PWRB... .h..{PS 0620: 54 31 0a 04 60 a0 12 93 60 0a 00 86 5c 2e 5f 53 T1..`...`...\._S 0630: 42 5f 50 57 52 42 0a 02 70 0a 03 5c 2f 04 5f 53 B_PWRB..p..\/._S 0640: 42 5f 50 43 49 30 53 4d 42 5f 42 4c 4e 4b 86 5c B_PCI0SMB_BLNK.\ 0650: 2e 5f 53 42 5f 50 43 49 30 0a 00 5b 23 5c 2f 05 ._SB_PCI0..[#\/. 0660: 5f 53 42 5f 50 43 49 30 4c 50 43 30 45 43 30 5f _SB_PCI0LPC0EC0_ 0670: 4d 55 54 30 ff ff 70 5c 2f 05 5f 53 42 5f 50 43 MUT0..p\/._SB_PC 0680: 49 30 4c 50 43 30 45 43 30 5f 41 43 49 4e 50 57 I0LPC0EC0_ACINPW 0690: 52 53 5b 27 5c 2f 05 5f 53 42 5f 50 43 49 30 4c RS['\/._SB_PCI0L 06a0: 50 43 30 45 43 30 5f 4d 55 54 30 86 5c 2e 5f 53 PC0EC0_MUT0.\._S 06b0: 42 5f 41 43 41 44 0a 80 5b 23 5c 2f 05 5f 53 42 B_ACAD..[#\/._SB 06c0: 5f 50 43 49 30 4c 50 43 30 45 43 30 5f 4d 55 54 _PCI0LPC0EC0_MUT 06d0: 30 ff ff 70 5c 2f 05 5f 53 42 5f 50 43 49 30 4c 0..p\/._SB_PCI0L 06e0: 50 43 30 45 43 30 5f 42 30 49 4e 5c 2f 03 5f 53 PC0EC0_B0IN\/._S 06f0: 42 5f 42 41 54 54 42 53 54 41 5b 27 5c 2f 05 5f B_BATTBSTA['\/._ 0700: 53 42 5f 50 43 49 30 4c 50 43 30 45 43 30 5f 4d SB_PCI0LPC0EC0_M 0710: 55 54 30 86 5c 2e 5f 53 42 5f 42 41 54 54 0a 80 UT0.\._SB_BATT.. 0720: 70 0a 00 5c 2e 5f 53 42 5f 57 43 41 31 5c 2e 5f p..\._SB_WCA1\._ 0730: 53 42 5f 46 4f 57 4d 0a 11 0a 0b 10 4a 09 5f 53 SB_FOWM.....J._S 0740: 49 5f 14 43 09 5f 53 53 54 01 a0 21 93 68 0a 01 I_.C._SST..!.h.. 0750: 70 0d 3d 3d 3d 3d 3d 20 53 53 54 20 57 6f 72 6b p.===== SST Work 0760: 69 6e 67 20 3d 3d 3d 3d 3d 00 5b 31 a0 20 93 68 ing =====.[1. .h 0770: 0a 02 70 0d 3d 3d 3d 3d 3d 20 53 53 54 20 57 61 ..p.===== SST Wa 0780: 6b 69 6e 67 20 3d 3d 3d 3d 3d 00 5b 31 a0 22 93 king =====.[1.". 0790: 68 0a 03 70 0d 3d 3d 3d 3d 3d 20 53 53 54 20 53 h..p.===== SST S 07a0: 6c 65 65 70 69 6e 67 20 3d 3d 3d 3d 3d 00 5b 31 leeping =====.[1 07b0: a0 25 93 68 0a 04 70 0d 3d 3d 3d 3d 3d 20 53 53 .%.h..p.===== SS 07c0: 54 20 53 6c 65 65 70 69 6e 67 20 53 34 20 3d 3d T Sleeping S4 == 07d0: 3d 3d 3d 00 5b 31 08 47 50 49 43 0a 00 14 22 5f ===.[1.GPIC..."_ 07e0: 50 49 43 01 70 68 47 50 49 43 a0 15 68 5c 2f 04 PIC.phGPIC..h\/. 07f0: 5f 53 42 5f 50 43 49 30 4c 50 43 30 44 53 50 49 _SB_PCI0LPC0DSPI 0800: 10 83 16 0e 5f 53 42 5f 5b 82 4a 7d 41 4d 57 30 ...._SB_[.J}AMW0 0810: 5b 01 57 4d 49 58 01 08 5f 48 49 44 0d 50 4e 50 [.WMIX.._HID.PNP 0820: 30 43 31 34 00 08 5f 55 49 44 0a 00 14 13 53 54 0C14.._UID....ST 0830: 42 59 03 8c 68 69 54 4d 50 5f 70 6a 54 4d 50 5f BY..hiTMP_pjTMP_ 0840: 14 13 53 54 57 44 03 8b 68 69 54 4d 50 5f 70 6a ..STWD..hiTMP_pj 0850: 54 4d 50 5f 14 13 53 54 44 57 03 8a 68 69 54 4d TMP_..STDW..hiTM 0860: 50 5f 70 6a 54 4d 50 5f 14 1a 43 4c 42 59 01 70 P_pjTMP_..CLBY.p 0870: 0a 00 60 a2 0f 95 60 87 68 53 54 42 59 68 60 0a ..`...`.hSTBYh`. 0880: 00 75 60 08 5f 57 44 47 11 4c 07 0a 78 bc dc 9d .u`._WDG.L..x... 0890: 8d 97 a9 da 11 b0 12 b6 22 a1 ef 54 92 41 41 01 ........"..T.AA. 08a0: 00 ce 93 05 a8 97 a9 da 11 b0 12 b6 22 a1 ef 54 ............"..T 08b0: 92 42 41 01 02 70 76 8c dd b5 1c db 11 a9 8b 66 .BA..pv........f 08c0: 9a 0c 20 00 08 42 43 01 02 94 59 bb 9d 97 a9 da .. ..BC...Y..... 08d0: 11 b0 12 b6 22 a1 ef 54 92 d0 00 01 08 e0 6c 77 ...."..T......lw 08e0: a3 88 1e db 11 a9 8b 08 00 20 0c 9a 66 42 43 01 ......... ..fBC. 08f0: 00 21 12 90 05 66 d5 d1 11 b2 f0 00 a0 c9 06 29 .!...f.........) 0900: 10 4d 4f 01 00 08 49 4e 46 4f 11 03 0a 80 8b 49 .MO...INFO.....I 0910: 4e 46 4f 0a 00 49 4e 46 30 8b 49 4e 46 4f 0a 02 NFO..INF0.INFO.. 0920: 49 4e 46 31 8b 49 4e 46 4f 0a 04 49 4e 46 32 8b INF1.INFO..INF2. 0930: 49 4e 46 4f 0a 06 49 4e 46 33 8b 49 4e 46 4f 0a INFO..INF3.INFO. 0940: 08 49 4e 46 34 8b 49 4e 46 4f 0a 0a 49 4e 46 35 .INF4.INFO..INF5 0950: 8b 49 4e 46 4f 0a 0c 49 4e 46 36 8b 49 4e 46 4f .INFO..INF6.INFO 0960: 0a 0e 49 4e 46 37 08 45 43 44 30 0a 00 14 0e 57 ..INF7.ECD0....W 0970: 45 44 30 01 70 68 45 43 44 30 a4 68 14 08 57 43 ED0.phECD0.h..WC 0980: 41 41 01 a4 68 14 4b 06 57 51 41 41 01 5b 23 57 AA..h.K.WQAA.[#W 0990: 4d 49 58 ff ff 43 4c 42 59 49 4e 46 4f a0 0c 92 MIX..CLBYINFO... 09a0: 93 68 0a 00 70 49 4e 46 4f 61 a1 3e 53 54 44 57 .h..pINFOa.>STDW 09b0: 49 4e 46 4f 0a 00 0c 44 45 4c 4c 53 54 44 57 49 INFO...DELLSTDWI 09c0: 4e 46 4f 0a 04 0c 20 57 4d 49 53 54 44 57 49 4e NFO... WMISTDWIN 09d0: 46 4f 0a 08 0a 00 53 54 44 57 49 4e 46 4f 0a 0c FO....STDWINFO.. 09e0: 0b 00 10 70 49 4e 46 4f 61 5b 27 57 4d 49 58 a4 ...pINFOa['WMIX. 09f0: 61 14 08 57 53 41 41 02 a4 69 14 0d 57 4d 49 5f a..WSAA..i..WMI_ 0a00: 02 a4 50 48 57 4d 68 69 14 28 57 4d 42 41 03 8a ..PHWMhi.(WMBA.. 0a10: 6a 0a 28 57 42 55 46 72 57 42 55 46 0a 2c 61 a0 j.(WBUFrWBUF.,a. 0a20: 0f 92 94 61 0b 00 10 70 57 4d 49 5f 6a 61 60 a4 ...a...pWMI_ja`. 0a30: 60 14 08 57 4d 42 43 03 a4 6a 14 24 5f 57 45 44 `..WMBC..j.$_WED 0a40: 01 a0 0a 93 68 0a d0 a4 49 4e 46 4f 43 4c 42 59 ....h...INFOCLBY 0a50: 49 4e 46 4f 70 68 49 4e 46 4f a4 49 4e 46 4f 08 INFOphINFO.INFO. 0a60: 57 51 4d 4f 11 4f 57 0b 7a 05 46 4f 4d 42 01 00 WQMO.OW.z.FOMB.. 0a70: 00 00 6a 05 00 00 98 1c 00 00 44 53 00 01 1a 7d ..j.......DS...} 0a80: da 54 18 d9 8d 00 01 06 18 42 10 0f 10 22 21 04 .T.......B..."!. 0a90: 12 01 a1 c8 2c 0c 86 10 38 2e 84 1c 40 48 1c 14 ....,...8...@H.. 0aa0: 4a 08 84 fa 13 c8 af 00 84 0e 05 c8 14 60 50 80 J............`P. 0ab0: 53 04 11 f4 2a c0 a6 00 93 02 2c 0a d0 2e c0 b2 S...*.....,..... 0ac0: 00 dd 02 a4 c3 12 91 e0 28 31 e0 28 9d d8 c2 0d ........(1.(.... 0ad0: 1b bc 50 14 cd 20 4a 82 ca 05 f8 46 10 78 b9 02 ..P.. J....F.x.. 0ae0: 24 4f 40 9a 05 18 16 60 5d 80 ec 21 50 a9 43 40 $O@....`]..!P.C@ 0af0: c9 19 02 6a 00 ad 4e 40 f8 95 4e 09 49 10 ce 58 ...j..N@..N.I..X 0b00: c5 e3 6b 16 4d cf 49 ce 31 e4 78 5c e8 41 f0 40 ..k.M.I.1.x\.A.@ 0b10: 0a 40 58 78 08 45 80 41 49 18 0b 75 31 6a d4 48 .@Xx.E.AI..u1j.H 0b20: d9 80 0c 51 da a8 d1 03 3a bf 23 39 bb a3 3b 92 ...Q....:.#9..;. 0b30: 04 46 3d a6 63 2c 6c 46 42 8d d1 1c 14 81 c6 0d .F=.c,lFB....... 0b40: da 12 61 35 ae d8 67 66 e1 c3 12 c6 11 1c 58 82 ..a5..gf......X. 0b50: 46 d1 34 c7 b3 0d 91 e0 20 42 63 64 40 c8 f3 b0 F.4..... Bcd@... 0b60: 05 7a e4 09 ec 1e 51 0a 11 34 df 13 a9 51 80 36 .z....Q..4...Q.6 0b70: 0c d9 3a 1b 68 a8 b1 1a 43 11 44 84 a0 51 0c 16 ..:.h...C.D..Q.. 0b80: 21 54 88 ff 7f 94 a8 a7 14 24 6a 65 20 42 0b 66 !T.......$je B.f 0b90: 04 66 7f 10 24 c6 99 41 87 05 cb 00 91 11 41 a3 .f..$..A......A. 0ba0: 61 67 01 0f c7 33 69 7e 62 1a 9c 09 c6 86 90 06 ag...3i~b....... 0bb0: 08 89 3a 38 50 02 4b 19 38 b1 3d 2e 8d ef 8c a3 ..:8P.K.8.=..... 0bc0: 86 38 f5 33 f3 3f c2 5b f0 11 80 8f c1 83 3d 84 .8.3.?.[......=. 0bd0: 80 47 c8 ce 00 06 c4 7b 9f 34 99 8b cf 02 30 86 .G.....{.4....0. 0be0: 0f d7 f8 28 34 1e 76 3e 60 e3 e2 f0 3e 14 9c 70 ...(4.v>`...>..p 0bf0: b1 20 0a 00 21 59 e7 03 f4 ac 8f 2d e0 c3 40 b3 . ..!Y.....-..@. 0c00: 77 08 42 f0 22 e0 a3 83 8f 1b 1e f7 f3 06 18 0e w.B."........... 0c10: 07 1e 8e 4f 1b c0 65 04 5c da 93 c2 04 92 fc 04 ...O..e.\....... 0c20: 90 18 18 d4 81 c0 07 0b b8 92 e0 50 c3 f3 c4 1e ...........P.... 0c30: 10 fe ff 47 79 22 2f 06 9e fe 63 00 8c 03 82 a7 ...Gy"/...c..... 0c40: 75 52 be 79 3c 48 78 50 61 12 f8 94 c0 d0 f8 71 uR.y 0cc0: 4e f8 5c 80 77 0d a8 19 fa b0 01 e7 d0 81 3f 4d N.\.w.........?M 0cd0: e0 0f 16 f8 f1 f8 9a c3 26 9c c0 f2 07 81 1a 99 ........&....... 0ce0: a1 3d cb d3 7a 0d f0 69 c7 04 3e 6f f8 ff ff cf .=..z..i..>o.... 0cf0: f1 78 c0 af f8 74 41 ee 0a 9e af cf 2e cc c6 78 .x...tA........x 0d00: 50 a3 f0 01 07 77 76 f1 11 c0 67 17 e0 39 89 67 P....wv...g..9.g 0d10: 09 f0 1e 02 7c 22 89 f7 b0 05 63 c4 78 c8 33 ae ....|"....c.x.3. 0d20: 7a 18 ba 08 58 dd 7d 05 75 f4 02 13 d4 6b 06 ee z...X.}.u....k.. 0d30: f4 02 7c 4e 59 f0 fe ff a7 2c e0 7e 55 e0 47 14 ..|NY....,.~U.G. 0d40: 30 40 76 76 3a 11 c2 7b c9 73 88 6f 57 3e 98 04 0@vv:..{.s.oW>.. 0d50: 79 0e 88 f0 94 c5 ef 03 51 62 1e 50 a4 28 46 0c y.......Qb.P.(F. 0d60: f2 84 e5 eb 49 0c 43 07 0b 17 3e c2 53 16 60 f1 ....I.C...>.S.`. 0d70: 92 85 39 65 c1 7c 1b f8 94 05 8e ff ff 29 0b 5c ..9e.|.......).\ 0d80: e3 7e ca 02 66 d2 9f 02 3e d5 f8 09 a0 e8 07 0b .~..f...>....... 0d90: 0a e3 53 16 e0 4a de 01 01 34 67 27 df 16 0c 76 ..S..J...4g'...v 0da0: cc be 64 f8 94 08 86 43 86 ef 54 87 f2 c8 f1 14 ..d....C..T..... 0db0: e0 23 16 d8 e3 1c 03 74 5c f1 11 cb ff ff 23 16 .#.....t\.....#. 0dc0: c0 8d 03 08 fe d4 01 eb 1e 10 d6 87 0e e0 21 fb ..............!. 0dd0: 21 a0 33 8c 25 83 c8 c6 b9 86 8e d1 e2 17 aa 9b !.3.%........... 0de0: 42 ec 83 e1 b2 81 04 ea e1 5a 30 85 44 d1 68 34 B........Z0.D.h4 0df0: 06 26 30 82 33 88 01 9d 11 42 87 32 9c 8a f3 10 .&0.3....B.2.... 0e00: ea ff 4f 30 d4 8d 89 ce ce f3 e7 b7 11 9f 08 0c ..O0............ 0e10: ec 2b c4 5b 06 58 86 e5 c5 3d 01 1c e3 49 26 a8 .+.[.X...=...I&. 0e20: e6 58 83 9a 83 af 02 6f 64 26 f0 15 0c 6c a7 19 .X.....od&...l.. 0e30: 8c be 3b 01 28 80 7c 14 f0 7d f9 6d 80 cd e2 95 ..;.(.|..}.m.... 0e40: d9 68 3e 7f 22 86 8e 12 33 74 0a e2 a1 3b e8 d0 .h>."...3t...;.. 0e50: d1 c7 01 9f ac 70 c1 0e 5f d0 26 77 b4 27 e6 59 .....p.._.&w.'.Y 0e60: 78 9e b8 b9 83 e9 88 04 63 f0 98 c9 83 59 e0 e4 x.......c....Y.. 0e70: 41 f1 ff 9f 3c 4c 78 4c d8 c3 21 3d 74 78 64 7c A....0..9..g.;.3.. 0e90: d6 23 e7 b0 46 0b 7b c0 cf 21 be c3 f8 c0 c3 60 .#..F.{..!.....` 0ea0: 7d 7a 01 c7 f1 0b fe 69 00 3c 07 10 8f e1 05 84 }z.....i.<...... 0eb0: 13 14 7d fe a5 42 17 27 99 30 a8 d3 14 e0 ea f4 ..}..B.'.0...... 0ec0: 06 9e ab 3e ee 2c 85 fb ff 9f a5 60 1c 7e 7d 81 ...>.,.....`.~}. 0ed0: f7 5d ca 08 07 f2 2c 05 f6 f8 cf 10 1d 02 7c 96 .]....,.......|. 0ee0: 02 f8 21 e4 4c 09 e5 3c 83 0b 7e a6 04 5a ff ff ..!.L..<..~..Z.. 0ef0: 53 08 f8 8f 11 3e e2 c0 3d 54 f2 00 87 30 28 87 S....>..=T...0(. 0f00: 4a b8 c7 5f 70 1c 8e f9 39 03 77 24 03 1e a7 67 J.._p...9.w$...g 0f10: dc 28 3d 04 3e 80 56 e7 46 4e 3e a7 84 3b 12 f0 .(=.>.V.FN>..;.. 0f20: 29 e1 06 80 09 70 ce 04 d4 fc ff cf 99 80 01 90 )....p.......... 0f30: 08 ef 0a 51 df 93 0d f1 9c cc 70 5e 22 1e 61 9e ...Q......p^".a. 0f40: 93 c1 79 ce 04 f8 f2 ff 3f d6 c3 be 29 04 7f 0a ..y.....?...)... 0f50: 01 26 e2 cf 99 54 f8 39 13 da 5c 3c 6d 9f 33 01 .&...T.9..\..>.p.. 6830: 50 49 30 5f 70 50 49 5f 5f 60 70 0a 00 61 a2 10 PI0_pPI__`p..a.. 6840: 60 a0 08 7b 60 0a 01 00 75 61 7a 60 0a 01 60 70 `..{`...uaz`..`p 6850: 76 61 4e 50 4f 54 70 0a 00 57 52 45 4e 5b 82 46 vaNPOTp..WREN[.F 6860: 06 50 52 54 31 08 5f 41 44 52 0a 01 14 22 5f 53 .PRT1._ADR..."_S 6870: 54 41 00 a0 16 93 5e 5e 5e 2e 41 46 44 5f 4f 44 TA....^^^.AFD_OD 6880: 5a 50 0c 01 00 00 80 a4 0a 00 a1 04 a4 0a 0f 14 ZP.............. 6890: 0e 44 49 53 5f 00 45 4e 50 5f 0a 01 0a 00 14 0e .DIS_.ENP_...... 68a0: 45 4e 41 5f 00 45 4e 50 5f 0a 01 0a 01 5b 82 16 ENA_.ENP_....[.. 68b0: 4f 44 44 5f 08 5f 41 44 52 0a 00 14 09 5f 52 4d ODD_._ADR...._RM 68c0: 56 00 a4 0a 01 5b 82 24 50 52 54 32 08 5f 41 44 V....[.$PRT2._AD 68d0: 52 0a 02 5b 82 16 45 53 41 54 08 5f 41 44 52 0a R..[..ESAT._ADR. 68e0: 00 14 09 5f 52 4d 56 00 a4 0a 01 5b 82 24 50 52 ..._RMV....[.$PR 68f0: 54 33 08 5f 41 44 52 0a 03 5b 82 16 45 53 41 54 T3._ADR..[..ESAT 6900: 08 5f 41 44 52 0a 00 14 09 5f 52 4d 56 00 a4 0a ._ADR...._RMV... 6910: 01 5b 82 24 50 52 54 34 08 5f 41 44 52 0a 04 5b .[.$PRT4._ADR..[ 6920: 82 16 45 53 41 54 08 5f 41 44 52 0a 00 14 09 5f ..ESAT._ADR...._ 6930: 52 4d 56 00 a4 0a 01 5b 82 24 50 52 54 35 08 5f RMV....[.$PRT5._ 6940: 41 44 52 0a 05 5b 82 16 45 53 41 54 08 5f 41 44 ADR..[..ESAT._AD 6950: 52 0a 00 14 09 5f 52 4d 56 00 a4 0a 01 5b 82 48 R...._RMV....[.H 6960: 87 53 4d 42 5f 08 5f 41 44 52 0c 00 00 14 00 5b .SMB_._ADR.....[ 6970: 80 53 42 52 56 02 0a 08 0b 00 01 5b 81 48 04 53 .SBRV......[.H.S 6980: 42 52 56 00 52 56 49 44 08 00 48 05 48 50 42 53 BRV.RVID..H.HPBS 6990: 20 00 48 15 00 03 48 49 48 50 01 00 44 0f 49 31 .H...HIHP..D.I1 69a0: 46 5f 01 49 31 32 46 01 00 0e 00 0a 48 50 45 54 F_.I12F.....HPET 69b0: 01 00 45 0e 00 02 47 33 31 4f 01 00 45 2f 00 06 ..E...G31O..E/.. 69c0: 41 43 49 52 01 5b 80 50 4d 49 4f 01 0b d6 0c 0a ACIR.[.PMIO..... 69d0: 02 5b 81 10 50 4d 49 4f 01 49 4e 50 4d 08 44 41 .[..PMIO.INPM.DA 69e0: 50 4d 08 5b 86 1a 49 4e 50 4d 44 41 50 4d 01 00 PM.[..INPMDAPM.. 69f0: 40 12 4d 4d 53 4f 20 00 40 1c 50 31 45 42 10 5b @.MMSO .@.P1EB.[ 6a00: 80 45 52 4d 4d 00 4d 4d 53 4f 0b 00 10 5b 81 45 .ERMM.MMSO...[.E 6a10: 71 45 52 4d 4d 00 00 40 80 00 05 50 30 31 45 01 qERMM..@...P01E. 6a20: 50 30 31 4f 01 50 30 31 49 01 00 20 00 05 50 30 P01O.P01I.. ..P0 6a30: 36 45 01 50 30 36 4f 01 50 30 36 49 01 00 05 50 6E.P06O.P06I...P 6a40: 30 37 45 01 50 30 37 4f 01 50 30 37 49 01 00 18 07E.P07O.P07I... 6a50: 00 05 50 30 42 45 01 50 30 42 4f 01 50 30 42 49 ..P0BE.P0BO.P0BI 6a60: 01 00 05 50 30 43 45 01 50 30 43 4f 01 50 30 43 ...P0CE.P0CO.P0C 6a70: 49 01 00 05 50 30 44 45 01 50 30 44 4f 01 50 30 I...P0DE.P0DO.P0 6a80: 44 49 01 00 05 50 30 45 45 01 50 30 45 4f 01 50 DI...P0EE.P0EO.P 6a90: 30 45 49 01 00 05 50 30 46 45 01 50 30 46 4f 01 0EI...P0FE.P0FO. 6aa0: 50 30 46 49 01 00 05 50 31 30 45 01 50 31 30 4f P0FI...P10E.P10O 6ab0: 01 50 31 30 49 01 00 18 00 05 50 31 34 45 01 50 .P10I.....P14E.P 6ac0: 31 34 4f 01 50 31 34 49 01 00 05 50 31 35 45 01 14O.P14I...P15E. 6ad0: 50 31 35 4f 01 50 31 35 49 01 00 05 50 31 36 45 P15O.P15I...P16E 6ae0: 01 50 31 36 4f 01 50 31 36 49 01 00 05 50 31 37 .P16O.P16I...P17 6af0: 45 01 50 31 37 4f 01 50 31 37 49 01 00 18 00 05 E.P17O.P17I..... 6b00: 50 31 42 45 01 50 31 42 4f 01 50 31 42 49 01 00 P1BE.P1BO.P1BI.. 6b10: 05 50 31 43 45 01 50 31 43 4f 01 50 31 43 49 01 .P1CE.P1CO.P1CI. 6b20: 00 18 00 05 50 32 30 45 01 50 32 30 4f 01 50 32 ....P20E.P20O.P2 6b30: 30 49 01 00 05 50 32 31 45 01 50 32 31 4f 01 50 0I...P21E.P21O.P 6b40: 32 31 49 01 00 05 50 32 32 45 01 50 32 32 4f 01 21I...P22E.P22O. 6b50: 50 32 32 49 01 00 05 50 32 33 45 01 50 32 33 4f P22I...P23E.P23O 6b60: 01 50 32 33 49 01 00 28 00 01 50 32 39 48 01 50 .P23I..(..P29H.P 6b70: 32 39 53 01 50 32 39 55 01 50 32 39 44 01 50 32 29S.P29U.P29D.P2 6b80: 39 45 01 50 32 39 4f 01 50 32 39 49 01 00 10 00 9E.P29O.P29I.... 6b90: 05 50 32 43 45 01 50 32 43 4f 01 50 32 43 49 01 .P2CE.P2CO.P2CI. 6ba0: 00 05 50 32 44 45 01 50 32 44 4f 01 50 32 44 49 ..P2DE.P2DO.P2DI 6bb0: 01 00 01 50 32 45 48 01 50 32 45 53 01 50 32 45 ...P2EH.P2ES.P2E 6bc0: 55 01 50 32 45 44 01 50 32 45 45 01 50 32 45 4f U.P2ED.P2EE.P2EO 6bd0: 01 50 32 45 49 01 00 20 00 05 50 33 33 45 01 50 .P2EI.. ..P33E.P 6be0: 33 33 4f 01 50 33 33 49 01 00 08 00 05 50 33 35 33O.P33I.....P35 6bf0: 45 01 50 33 35 4f 01 50 33 35 49 01 00 08 00 05 E.P35O.P35I..... 6c00: 50 33 37 45 01 50 33 37 4f 01 50 33 37 49 01 00 P37E.P37O.P37I.. 6c10: 08 00 05 50 33 39 45 01 50 33 39 4f 01 50 33 39 ...P39E.P39O.P39 6c20: 49 01 00 08 00 05 50 33 42 45 01 50 33 42 4f 01 I.....P3BE.P3BO. 6c30: 50 33 42 49 01 00 08 50 4f 33 44 08 00 01 50 33 P3BI...PO3D...P3 6c40: 45 48 01 50 33 45 53 01 50 33 45 55 01 50 33 45 EH.P3ES.P3EU.P3E 6c50: 44 01 50 33 45 45 01 50 33 45 4f 01 50 33 45 49 D.P3EE.P3EO.P3EI 6c60: 01 00 01 50 33 46 48 01 50 33 46 53 01 50 33 46 ...P3FH.P3FS.P3F 6c70: 55 01 50 33 46 44 01 50 33 46 45 01 50 33 46 4f U.P3FD.P3FE.P3FO 6c80: 01 50 33 46 49 01 00 01 50 34 30 48 01 50 34 30 .P3FI...P40H.P40 6c90: 53 01 50 34 30 55 01 50 34 30 44 01 50 34 30 45 S.P40U.P40D.P40E 6ca0: 01 50 34 30 4f 01 50 34 30 49 01 00 08 00 05 50 .P40O.P40I.....P 6cb0: 34 32 45 01 50 34 32 4f 01 50 34 32 49 01 00 40 42E.P42O.P42I..@ 6cc0: 11 00 07 47 45 30 35 01 00 05 50 36 36 45 01 50 ...GE05...P66E.P 6cd0: 36 36 4f 01 50 36 36 49 01 00 20 47 45 31 31 08 66O.P66I.. GE11. 6ce0: 00 05 50 36 43 45 01 50 36 43 4f 01 50 36 43 49 ..P6CE.P6CO.P6CI 6cf0: 01 00 10 00 07 47 45 31 35 01 00 07 47 45 31 36 .....GE15...GE16 6d00: 01 00 20 47 45 32 31 08 00 07 47 45 32 32 01 00 .. GE21...GE22.. 6d10: 48 17 50 4f 41 36 08 00 18 00 05 50 41 41 45 01 H.POA6.....PAAE. 6d20: 50 41 41 4f 01 50 41 41 49 01 00 20 00 05 50 41 PAAO.PAAI.. ..PA 6d30: 46 45 01 50 41 46 4f 01 50 41 46 49 01 00 05 50 FE.PAFO.PAFI...P 6d40: 42 30 45 01 50 42 30 4f 01 50 42 30 49 01 00 05 B0E.PB0O.PB0I... 6d50: 50 42 31 45 01 50 42 31 4f 01 50 42 31 49 01 00 PB1E.PB1O.PB1I.. 6d60: 05 50 42 32 45 01 50 42 32 4f 01 50 42 32 49 01 .PB2E.PB2O.PB2I. 6d70: 00 05 50 42 33 45 01 50 42 33 4f 01 50 42 33 49 ..PB3E.PB3O.PB3I 6d80: 01 00 05 50 42 34 45 01 50 42 34 4f 01 50 42 34 ...PB4E.PB4O.PB4 6d90: 49 01 00 05 50 42 35 45 01 50 42 35 4f 01 50 42 I...PB5E.PB5O.PB 6da0: 35 49 01 00 05 50 42 36 45 01 50 42 36 4f 01 50 5I...PB6E.PB6O.P 6db0: 42 36 49 01 00 40 07 00 05 50 43 35 45 01 50 43 B6I..@...PC5E.PC 6dc0: 35 4f 01 50 43 35 49 01 00 08 00 05 50 43 37 45 5O.PC5I.....PC7E 6dd0: 01 50 43 37 4f 01 50 43 37 49 01 00 05 50 43 38 .PC7O.PC7I...PC8 6de0: 45 01 50 43 38 4f 01 50 43 38 49 01 00 48 1b 00 E.PC8O.PC8I..H.. 6df0: 01 45 30 31 53 01 00 03 45 30 35 53 01 00 09 45 .E01S...E05S...E 6e00: 31 35 53 01 45 31 36 53 01 00 05 45 32 32 53 01 15S.E16S...E22S. 6e10: 00 09 00 01 45 30 31 45 01 00 03 45 30 35 45 01 ....E01E...E05E. 6e20: 00 09 45 31 35 45 01 45 31 36 45 01 00 05 45 32 ..E15E.E16E...E2 6e30: 32 45 01 00 09 00 01 45 30 31 43 01 00 03 45 30 2E.....E01C...E0 6e40: 35 43 01 00 09 45 31 35 43 01 45 31 36 43 01 00 5C...E15C.E16C.. 6e50: 05 45 32 32 43 01 00 03 45 32 36 43 01 00 05 00 .E22C...E26C.... 6e60: 01 45 30 31 4c 01 00 03 45 30 35 4c 01 00 09 45 .E01L...E05L...E 6e70: 31 35 4c 01 45 31 36 4c 01 00 05 45 32 32 4c 01 15L.E16L...E22L. 6e80: 00 49 3c 00 01 43 4c 50 53 01 00 46 08 00 07 47 .I<..CLPS..F...G 6e90: 31 35 41 01 00 40 09 00 06 53 52 42 54 02 00 18 15A..@...SRBT... 6ea0: 00 02 53 4c 50 53 02 00 0c 00 04 53 50 42 54 02 ..SLPS.....SPBT. 6eb0: 00 4a 57 00 06 4d 54 33 41 01 00 41 0a 45 50 4e .JW..MT3A..A.EPN 6ec0: 4d 01 44 50 50 46 01 00 4e 21 00 06 50 57 44 45 M.DPPF..N!..PWDE 6ed0: 01 00 11 00 05 41 4c 4c 53 01 00 4a 04 00 02 54 .....ALLS..J...T 6ee0: 46 54 45 01 00 45 0b 42 4c 4e 4b 02 00 46 08 50 FTE..E.BLNK..F.P 6ef0: 48 59 44 01 00 01 52 53 54 55 01 55 53 35 52 01 HYD...RSTU.US5R. 6f00: 00 4c 07 46 30 43 54 08 46 30 4d 53 08 46 30 46 .L.F0CT.F0MS.F0F 6f10: 51 08 46 30 4c 44 08 46 30 4d 44 08 46 30 4d 50 Q.F0LD.F0MD.F0MP 6f20: 08 4c 54 30 4c 08 4c 54 30 48 08 4d 54 30 4c 08 .LT0L.LT0H.MT0L. 6f30: 4d 54 30 48 08 48 54 30 4c 08 48 54 30 48 08 4c MT0H.HT0L.HT0H.L 6f40: 52 47 30 08 4c 48 43 30 08 00 10 46 31 43 54 08 RG0.LHC0...F1CT. 6f50: 46 31 4d 53 08 46 31 46 51 08 46 31 4c 44 08 46 F1MS.F1FQ.F1LD.F 6f60: 31 4d 44 08 46 31 4d 50 08 4c 54 31 4c 08 4c 54 1MD.F1MP.LT1L.LT 6f70: 31 48 08 4d 54 31 4c 08 4d 54 31 48 08 48 54 31 1H.MT1L.MT1H.HT1 6f80: 4c 08 48 54 31 48 08 4c 52 47 31 08 4c 48 43 31 L.HT1H.LRG1.LHC1 6f90: 08 00 10 46 32 43 54 08 46 32 4d 53 08 46 32 46 ...F2CT.F2MS.F2F 6fa0: 51 08 46 32 4c 44 08 46 32 4d 44 08 46 32 4d 50 Q.F2LD.F2MD.F2MP 6fb0: 08 4c 54 32 4c 08 4c 54 32 48 08 4d 54 32 4c 08 .LT2L.LT2H.MT2L. 6fc0: 4d 54 32 48 08 48 54 32 4c 08 48 54 32 48 08 4c MT2H.HT2L.HT2H.L 6fd0: 52 47 32 08 4c 48 43 32 08 00 10 46 33 43 54 08 RG2.LHC2...F3CT. 6fe0: 46 33 4d 53 08 46 33 46 51 08 46 33 4c 44 08 46 F3MS.F3FQ.F3LD.F 6ff0: 33 4d 44 08 46 33 4d 50 08 4c 54 33 4c 08 4c 54 3MD.F3MP.LT3L.LT 7000: 33 48 08 4d 54 33 4c 08 4d 54 33 48 08 48 54 33 3H.MT3L.MT3H.HT3 7010: 4c 08 48 54 33 48 08 4c 52 47 33 08 4c 48 43 33 L.HT3H.LRG3.LHC3 7020: 08 00 80 61 01 53 45 43 5f 08 00 08 4d 49 4e 5f ...a.SEC_...MIN_ 7030: 08 00 80 ff 02 4d 58 30 31 08 00 28 4d 58 30 37 .....MX01..(MX07 7040: 08 00 30 4d 58 31 34 08 4d 58 31 35 08 4d 58 31 ..0MX14.MX15.MX1 7050: 36 08 00 20 4d 58 32 31 08 4d 58 32 32 08 4d 58 6.. MX21.MX22.MX 7060: 32 33 08 00 18 4d 58 32 37 08 4d 58 32 38 08 00 23...MX27.MX28.. 7070: 18 4d 58 33 32 08 4d 58 33 33 08 4d 58 33 34 08 .MX32.MX33.MX34. 7080: 00 30 4d 58 34 31 08 00 10 4d 58 34 34 08 00 40 .0MX41...MX44..@ 7090: 04 4d 58 35 33 08 00 18 4d 58 35 37 08 4d 58 35 .MX53...MX57.MX5 70a0: 38 08 4d 58 35 39 08 00 30 4d 58 36 36 08 00 48 8.MX59..0MX66..H 70b0: 11 4d 31 30 32 08 00 28 4d 31 30 38 08 00 48 1e .M102..(M108..H. 70c0: 4d 31 37 30 08 00 20 4d 31 37 35 08 4d 31 37 36 M170.. M175.M176 70d0: 08 00 18 4d 31 38 30 08 4d 31 38 31 08 4d 31 38 ...M180.M181.M18 70e0: 32 08 00 40 07 4d 31 39 37 08 00 08 4d 31 39 39 2..@.M197...M199 70f0: 08 4d 32 30 30 08 00 48 1b 4d 53 30 30 08 4d 53 .M200..H.MS00.MS 7100: 30 31 08 4d 53 30 32 08 4d 53 30 33 08 4d 53 30 01.MS02.MS03.MS0 7110: 34 08 00 48 1d 4d 53 34 30 08 00 40 20 00 02 45 4..H.MS40..@ ..E 7120: 43 45 53 01 5b 80 50 31 45 30 01 50 31 45 42 0a CES.[.P1E0.P1EB. 7130: 04 5b 81 19 50 31 45 30 01 00 0e 50 45 57 53 01 .[..P1E0...PEWS. 7140: 57 53 54 41 01 00 0e 50 45 57 44 01 14 0c 54 52 WSTA...PEWD...TR 7150: 4d 44 00 70 00 54 46 54 45 14 06 48 54 43 44 00 MD.p.TFTE..HTCD. 7160: 5b 80 41 42 49 4f 01 0b d8 0c 0a 08 5b 81 10 41 [.ABIO......[..A 7170: 42 49 4f 03 49 4e 41 42 20 44 41 41 42 20 14 11 BIO.INAB DAAB .. 7180: 52 44 41 42 01 70 68 49 4e 41 42 a4 44 41 41 42 RDAB.phINAB.DAAB 7190: 14 12 57 54 41 42 02 70 68 49 4e 41 42 70 69 44 ..WTAB.phINABpiD 71a0: 41 41 42 14 18 52 57 41 42 03 7b 52 44 41 42 68 AAB..RWAB.{RDABh 71b0: 69 60 7d 60 6a 61 57 54 41 42 68 61 14 1a 43 41 i`}`jaWTABha..CA 71c0: 42 52 03 79 68 0a 05 60 72 60 69 61 79 61 0a 18 BR.yh..`r`iaya.. 71d0: 62 72 62 6a 63 a4 63 5b 82 81 c5 01 4c 50 43 30 brbjc.c[....LPC0 71e0: 08 5f 41 44 52 0c 03 00 14 00 5b 80 50 49 52 51 ._ADR.....[.PIRQ 71f0: 01 0b 00 0c 0a 02 5b 81 10 50 49 52 51 01 50 49 ......[..PIRQ.PI 7200: 49 44 08 50 49 44 41 08 5b 86 43 09 50 49 49 44 ID.PIDA.[.C.PIID 7210: 50 49 44 41 01 50 49 52 41 08 50 49 52 42 08 50 PIDA.PIRA.PIRB.P 7220: 49 52 43 08 50 49 52 44 08 50 49 52 45 08 50 49 IRC.PIRD.PIRE.PI 7230: 52 46 08 50 49 52 47 08 50 49 52 48 08 00 40 04 RF.PIRG.PIRH..@. 7240: 50 49 52 53 08 00 10 48 44 41 44 08 00 08 47 45 PIRS...HDAD...GE 7250: 43 5f 08 00 40 0d 55 53 42 31 08 55 53 42 32 08 C_..@.USB1.USB2. 7260: 55 53 42 33 08 55 53 42 34 08 55 53 42 35 08 55 USB3.USB4.USB5.U 7270: 53 42 36 08 55 53 42 37 08 00 48 04 49 44 45 5f SB6.USB7..H.IDE_ 7280: 08 53 41 54 41 08 00 40 07 47 50 50 30 08 47 50 .SATA..@.GPP0.GP 7290: 50 31 08 47 50 50 32 08 47 50 50 33 08 08 49 50 P1.GPP2.GPP3..IP 72a0: 52 53 11 09 0a 06 23 00 0c 18 79 00 08 55 50 52 RS....#...y..UPR 72b0: 53 11 09 0a 06 23 b8 00 08 79 00 14 3a 44 53 50 S....#...y..:DSP 72c0: 49 00 49 4e 54 41 0a 1f 49 4e 54 42 0a 1f 49 4e I.INTA..INTB..IN 72d0: 54 43 0a 1f 49 4e 54 44 0a 1f 70 0a 1f 50 49 52 TC..INTD..p..PIR 72e0: 45 70 0a 1f 50 49 52 46 70 0a 1f 50 49 52 47 70 Ep..PIRFp..PIRGp 72f0: 0a 1f 50 49 52 48 14 1e 49 4e 54 41 01 70 68 50 ..PIRH..INTA.phP 7300: 49 52 41 70 68 48 44 41 44 70 68 47 45 43 5f 70 IRAphHDADphGEC_p 7310: 68 47 50 50 30 14 2a 49 4e 54 42 01 70 68 50 49 hGPP0.*INTB.phPI 7320: 52 42 70 68 55 53 42 32 70 68 55 53 42 34 70 68 RBphUSB2phUSB4ph 7330: 55 53 42 36 70 68 47 50 50 31 70 68 49 44 45 5f USB6phGPP1phIDE_ 7340: 14 2a 49 4e 54 43 01 70 68 50 49 52 43 70 68 55 .*INTC.phPIRCphU 7350: 53 42 31 70 68 55 53 42 33 70 68 55 53 42 35 70 SB1phUSB3phUSB5p 7360: 68 55 53 42 37 70 68 47 50 50 32 14 18 49 4e 54 hUSB7phGPP2..INT 7370: 44 01 70 68 50 49 52 44 70 68 53 41 54 41 70 68 D.phPIRDphSATAph 7380: 47 50 50 33 5b 82 43 08 4c 4e 4b 41 08 5f 48 49 GPP3[.C.LNKA._HI 7390: 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 01 14 14 5f D.A...._UID...._ 73a0: 53 54 41 00 a0 08 50 49 52 41 a4 0a 0b a1 04 a4 STA...PIRA...... 73b0: 0a 09 14 0b 5f 50 52 53 00 a4 49 50 52 53 14 0c ...._PRS..IPRS.. 73c0: 5f 44 49 53 00 49 4e 54 41 0a 1f 14 21 5f 43 52 _DIS.INTA...!_CR 73d0: 53 00 70 49 50 52 53 60 8b 60 0a 01 49 52 51 30 S.pIPRS`.`..IRQ0 73e0: 79 0a 01 50 49 52 41 49 52 51 30 a4 60 14 1b 5f y..PIRAIRQ0.`.._ 73f0: 53 52 53 01 8b 68 0a 01 49 52 51 30 82 49 52 51 SRS..h..IRQ0.IRQ 7400: 30 60 76 60 49 4e 54 41 60 5b 82 43 08 4c 4e 4b 0`v`INTA`[.C.LNK 7410: 42 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 B._HID.A...._UID 7420: 0a 02 14 14 5f 53 54 41 00 a0 08 50 49 52 42 a4 ...._STA...PIRB. 7430: 0a 0b a1 04 a4 0a 09 14 0b 5f 50 52 53 00 a4 49 ........._PRS..I 7440: 50 52 53 14 0c 5f 44 49 53 00 49 4e 54 42 0a 1f PRS.._DIS.INTB.. 7450: 14 21 5f 43 52 53 00 70 49 50 52 53 60 8b 60 0a .!_CRS.pIPRS`.`. 7460: 01 49 52 51 30 79 0a 01 50 49 52 42 49 52 51 30 .IRQ0y..PIRBIRQ0 7470: a4 60 14 1b 5f 53 52 53 01 8b 68 0a 01 49 52 51 .`.._SRS..h..IRQ 7480: 30 82 49 52 51 30 60 76 60 49 4e 54 42 60 5b 82 0.IRQ0`v`INTB`[. 7490: 43 08 4c 4e 4b 43 08 5f 48 49 44 0c 41 d0 0c 0f C.LNKC._HID.A... 74a0: 08 5f 55 49 44 0a 03 14 14 5f 53 54 41 00 a0 08 ._UID...._STA... 74b0: 50 49 52 43 a4 0a 0b a1 04 a4 0a 09 14 0b 5f 50 PIRC.........._P 74c0: 52 53 00 a4 49 50 52 53 14 0c 5f 44 49 53 00 49 RS..IPRS.._DIS.I 74d0: 4e 54 43 0a 1f 14 21 5f 43 52 53 00 70 49 50 52 NTC...!_CRS.pIPR 74e0: 53 60 8b 60 0a 01 49 52 51 30 79 0a 01 50 49 52 S`.`..IRQ0y..PIR 74f0: 43 49 52 51 30 a4 60 14 1b 5f 53 52 53 01 8b 68 CIRQ0.`.._SRS..h 7500: 0a 01 49 52 51 30 82 49 52 51 30 60 76 60 49 4e ..IRQ0.IRQ0`v`IN 7510: 54 43 60 5b 82 43 08 4c 4e 4b 44 08 5f 48 49 44 TC`[.C.LNKD._HID 7520: 0c 41 d0 0c 0f 08 5f 55 49 44 0a 04 14 14 5f 53 .A...._UID...._S 7530: 54 41 00 a0 08 50 49 52 44 a4 0a 0b a1 04 a4 0a TA...PIRD....... 7540: 09 14 0b 5f 50 52 53 00 a4 49 50 52 53 14 0c 5f ..._PRS..IPRS.._ 7550: 44 49 53 00 49 4e 54 44 0a 1f 14 21 5f 43 52 53 DIS.INTD...!_CRS 7560: 00 70 49 50 52 53 60 8b 60 0a 01 49 52 51 30 79 .pIPRS`.`..IRQ0y 7570: 0a 01 50 49 52 44 49 52 51 30 a4 60 14 1b 5f 53 ..PIRDIRQ0.`.._S 7580: 52 53 01 8b 68 0a 01 49 52 51 30 82 49 52 51 30 RS..h..IRQ0.IRQ0 7590: 60 76 60 49 4e 54 44 60 5b 82 45 08 4c 4e 4b 45 `v`INTD`[.E.LNKE 75a0: 08 5f 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a ._HID.A...._UID. 75b0: 05 14 14 5f 53 54 41 00 a0 08 50 49 52 45 a4 0a ..._STA...PIRE.. 75c0: 0b a1 04 a4 0a 09 14 0b 5f 50 52 53 00 a4 49 50 ........_PRS..IP 75d0: 52 53 14 0d 5f 44 49 53 00 70 0a 1f 50 49 52 45 RS.._DIS.p..PIRE 75e0: 14 21 5f 43 52 53 00 70 49 50 52 53 60 8b 60 0a .!_CRS.pIPRS`.`. 75f0: 01 49 52 51 30 79 0a 01 50 49 52 45 49 52 51 30 .IRQ0y..PIREIRQ0 7600: a4 60 14 1c 5f 53 52 53 01 8b 68 0a 01 49 52 51 .`.._SRS..h..IRQ 7610: 30 82 49 52 51 30 60 76 60 70 60 50 49 52 45 5b 0.IRQ0`v`p`PIRE[ 7620: 82 45 08 4c 4e 4b 46 08 5f 48 49 44 0c 41 d0 0c .E.LNKF._HID.A.. 7630: 0f 08 5f 55 49 44 0a 06 14 14 5f 53 54 41 00 a0 .._UID...._STA.. 7640: 08 50 49 52 46 a4 0a 0b a1 04 a4 0a 09 14 0b 5f .PIRF.........._ 7650: 50 52 53 00 a4 49 50 52 53 14 0d 5f 44 49 53 00 PRS..IPRS.._DIS. 7660: 70 0a 1f 50 49 52 46 14 21 5f 43 52 53 00 70 49 p..PIRF.!_CRS.pI 7670: 50 52 53 60 8b 60 0a 01 49 52 51 30 79 0a 01 50 PRS`.`..IRQ0y..P 7680: 49 52 46 49 52 51 30 a4 60 14 1c 5f 53 52 53 01 IRFIRQ0.`.._SRS. 7690: 8b 68 0a 01 49 52 51 30 82 49 52 51 30 60 76 60 .h..IRQ0.IRQ0`v` 76a0: 70 60 50 49 52 46 5b 82 45 08 4c 4e 4b 47 08 5f p`PIRF[.E.LNKG._ 76b0: 48 49 44 0c 41 d0 0c 0f 08 5f 55 49 44 0a 07 14 HID.A...._UID... 76c0: 14 5f 53 54 41 00 a0 08 50 49 52 47 a4 0a 0b a1 ._STA...PIRG.... 76d0: 04 a4 0a 09 14 0b 5f 50 52 53 00 a4 49 50 52 53 ......_PRS..IPRS 76e0: 14 0d 5f 44 49 53 00 70 0a 1f 50 49 52 47 14 21 .._DIS.p..PIRG.! 76f0: 5f 43 52 53 00 70 49 50 52 53 60 8b 60 0a 01 49 _CRS.pIPRS`.`..I 7700: 52 51 30 79 0a 01 50 49 52 47 49 52 51 30 a4 60 RQ0y..PIRGIRQ0.` 7710: 14 1c 5f 53 52 53 01 8b 68 0a 01 49 52 51 30 82 .._SRS..h..IRQ0. 7720: 49 52 51 30 60 76 60 70 60 50 49 52 47 5b 82 45 IRQ0`v`p`PIRG[.E 7730: 08 4c 4e 4b 48 08 5f 48 49 44 0c 41 d0 0c 0f 08 .LNKH._HID.A.... 7740: 5f 55 49 44 0a 08 14 14 5f 53 54 41 00 a0 08 50 _UID...._STA...P 7750: 49 52 48 a4 0a 0b a1 04 a4 0a 09 14 0b 5f 50 52 IRH.........._PR 7760: 53 00 a4 49 50 52 53 14 0d 5f 44 49 53 00 70 0a S..IPRS.._DIS.p. 7770: 1f 50 49 52 48 14 21 5f 43 52 53 00 70 49 50 52 .PIRH.!_CRS.pIPR 7780: 53 60 8b 60 0a 01 49 52 51 30 79 0a 01 50 49 52 S`.`..IRQ0y..PIR 7790: 48 49 52 51 30 a4 60 14 1c 5f 53 52 53 01 8b 68 HIRQ0.`.._SRS..h 77a0: 0a 01 49 52 51 30 82 49 52 51 30 60 76 60 70 60 ..IRQ0.IRQ0`v`p` 77b0: 50 49 52 48 5b 80 4c 50 43 52 02 0a 04 0a 42 5b PIRH[.LPCR....B[ 77c0: 81 4f 05 4c 50 43 52 01 50 43 4d 44 02 00 4e 1f .O.LPCR.PCMD..N. 77d0: 43 4d 41 30 01 43 4d 41 31 01 43 4d 41 32 01 43 CMA0.CMA1.CMA2.C 77e0: 4d 41 33 01 43 4d 41 34 01 43 4d 41 35 01 43 4d MA3.CMA4.CMA5.CM 77f0: 41 36 01 43 4d 41 37 01 43 4d 42 30 01 43 4d 42 A6.CMA7.CMB0.CMB 7800: 31 01 43 4d 42 32 01 43 4d 42 33 01 43 4d 42 34 1.CMB2.CMB3.CMB4 7810: 01 43 4d 42 35 01 43 4d 42 36 01 43 4d 42 37 01 .CMB5.CMB6.CMB7. 7820: 5b 82 46 04 44 4d 41 43 08 5f 48 49 44 0c 41 d0 [.F.DMAC._HID.A. 7830: 02 00 08 5f 43 52 53 11 30 0a 2d 47 01 00 00 00 ..._CRS.0.-G.... 7840: 00 01 20 47 01 81 00 81 00 01 0f 47 01 c0 00 c0 .. G.......G.... 7850: 00 01 1f 47 01 0b 04 0b 04 01 01 47 01 d6 04 d6 ...G.......G.... 7860: 04 01 01 2a 10 01 79 00 5b 82 26 4d 41 54 48 08 ...*..y.[.&MATH. 7870: 5f 48 49 44 0c 41 d0 0c 04 08 5f 43 52 53 11 11 _HID.A...._CRS.. 7880: 0a 0e 47 01 f0 00 f0 00 01 0f 23 00 20 01 79 00 ..G.......#. .y. 7890: 5b 82 2c 50 49 43 5f 08 5f 48 49 44 0b 41 d0 08 [.,PIC_._HID.A.. 78a0: 5f 43 52 53 11 19 0a 16 47 01 20 00 20 00 01 02 _CRS....G. . ... 78b0: 47 01 a0 00 a0 00 01 02 23 04 00 01 79 00 5b 82 G.......#...y.[. 78c0: 26 52 54 43 5f 08 5f 48 49 44 0c 41 d0 0b 00 08 &RTC_._HID.A.... 78d0: 5f 43 52 53 11 11 0a 0e 47 01 70 00 70 00 01 02 _CRS....G.p.p... 78e0: 23 00 01 01 79 00 5b 82 22 53 50 4b 52 08 5f 48 #...y.[."SPKR._H 78f0: 49 44 0c 41 d0 08 00 08 5f 43 52 53 11 0d 0a 0a ID.A...._CRS.... 7900: 47 01 61 00 61 00 01 01 79 00 5b 82 26 54 49 4d G.a.a...y.[.&TIM 7910: 45 08 5f 48 49 44 0c 41 d0 01 00 08 5f 43 52 53 E._HID.A...._CRS 7920: 11 11 0a 0e 47 01 40 00 40 00 01 04 23 01 00 01 ....G.@.@...#... 7930: 79 00 5b 82 35 4b 42 43 30 08 5f 48 49 44 0c 41 y.[.5KBC0._HID.A 7940: d0 03 03 08 5f 43 52 53 11 19 0a 16 47 01 60 00 ...._CRS....G.`. 7950: 60 00 01 01 47 01 64 00 64 00 01 01 23 02 00 01 `...G.d.d...#... 7960: 79 00 14 06 5f 50 53 57 01 5b 80 50 4b 42 53 01 y..._PSW.[.PKBS. 7970: 0a 60 0a 05 5b 81 16 50 4b 42 53 11 50 4b 42 44 .`..[..PKBS.PKBD 7980: 08 00 08 00 08 00 08 50 4b 42 43 08 5b 82 4d 06 .......PKBC.[.M. 7990: 50 53 32 4d 14 1d 5f 48 49 44 00 a0 0e 93 42 52 PS2M.._HID....BR 79a0: 49 44 0a 01 a4 0c 11 8c 04 c3 a1 07 a4 0c 11 8c ID.............. 79b0: 04 c2 08 5f 43 49 44 0c 41 d0 0f 13 14 1e 5f 53 ..._CID.A....._S 79c0: 54 41 00 a0 14 7b 93 50 4b 42 44 0a ff 93 50 4b TA...{.PKBD...PK 79d0: 42 43 0a ff 00 a4 0a 00 a4 0a 0f 08 5f 43 52 53 BC.........._CRS 79e0: 11 09 0a 06 23 00 10 01 79 00 08 5f 50 52 53 11 ....#...y.._PRS. 79f0: 0b 0a 08 31 00 22 00 10 38 79 00 5b 82 4c 10 53 ...1."..8y.[.L.S 7a00: 59 53 52 08 5f 48 49 44 0c 41 d0 0c 02 08 5f 43 YSR._HID.A...._C 7a10: 52 53 11 46 0f 0a f2 47 01 22 00 22 00 01 02 47 RS.F...G."."...G 7a20: 01 2e 00 2e 00 01 02 47 01 72 00 72 00 01 02 47 .......G.r.r...G 7a30: 01 80 00 80 00 01 01 47 01 92 00 92 00 01 01 47 .......G.......G 7a40: 01 b0 00 b0 00 01 02 47 01 b2 00 b2 00 01 01 47 .......G.......G 7a50: 01 b8 00 b8 00 01 01 47 01 bc 00 bc 00 01 01 47 .......G.......G 7a60: 01 f0 00 f0 00 01 01 47 01 d0 04 d0 04 01 02 47 .......G.......G 7a70: 01 30 05 30 05 01 08 47 01 00 08 00 08 01 28 47 .0.0...G......(G 7a80: 01 30 08 30 08 01 01 47 01 40 08 40 08 01 08 47 .0.0...G.@.@...G 7a90: 01 00 0b 00 0b 01 20 47 01 20 0b 20 0b 01 20 47 ...... G. . .. G 7aa0: 01 00 0c 00 0c 01 02 47 01 14 0c 14 0c 01 01 47 .......G.......G 7ab0: 01 50 0c 50 0c 01 03 47 01 d0 0c d0 0c 01 02 47 .P.P...G.......G 7ac0: 01 d2 0c d2 0c 01 02 47 01 d4 0c d4 0c 01 02 47 .......G.......G 7ad0: 01 d6 0c d6 0c 01 02 47 01 d8 0c d8 0c 01 08 47 .......G.......G 7ae0: 01 f9 0c f9 0c 01 01 88 0d 00 01 0c 03 00 00 00 ................ 7af0: 81 ff 81 00 00 00 01 88 0d 00 01 0c 03 00 00 00 ................ 7b00: 82 ff 82 00 00 00 01 79 00 5b 80 4c 50 43 53 02 .......y.[.LPCS. 7b10: 0a a0 0a 04 5b 81 0b 4c 50 43 53 03 53 50 42 41 ....[..LPCS.SPBA 7b20: 20 5b 82 40 0e 4d 45 4d 5f 08 5f 48 49 44 0c 41 [.@.MEM_._HID.A 7b30: d0 0c 01 08 4d 53 52 43 11 4a 05 0a 56 86 09 00 ....MSRC.J..V... 7b40: 00 00 00 0e 00 00 00 02 00 86 09 00 00 00 00 e0 ................ 7b50: ff 00 00 20 00 86 09 00 01 00 00 00 00 00 00 00 ... ............ 7b60: 00 86 09 00 01 00 00 c1 fe 20 00 00 00 86 09 00 ......... ...... 7b70: 00 00 00 d0 fe 00 04 00 00 86 09 00 01 00 10 d6 ................ 7b80: fe 00 04 00 00 86 09 00 01 00 00 d8 fe 00 10 00 ................ 7b90: 00 79 00 14 45 06 5f 43 52 53 00 8a 4d 53 52 43 .y..E._CRS..MSRC 7ba0: 0a 1c 42 41 52 58 8a 4d 53 52 43 0a 20 47 41 4c ..BARX.MSRC. GAL 7bb0: 4e 8a 4d 53 52 43 0a 28 4d 42 30 31 8a 4d 53 52 N.MSRC.(MB01.MSR 7bc0: 43 0a 2c 4d 4c 30 31 70 53 50 42 41 60 7b 60 0c C.,ML01pSPBA`{`. 7bd0: e0 ff ff ff 4d 42 30 31 70 4e 42 42 41 60 a0 15 ....MB01pNBBA`.. 7be0: 60 70 0b 00 10 47 41 4c 4e 7b 60 0c f0 ff ff ff `p...GALN{`..... 7bf0: 42 41 52 58 a4 4d 53 52 43 14 09 5f 53 54 41 00 BARX.MSRC.._STA. 7c00: a4 0a 0f 5b 01 50 53 4d 58 00 5b 80 53 4d 49 30 ...[.PSMX.[.SMI0 7c10: 01 0a b0 0a 01 5b 81 0b 53 4d 49 30 00 53 4d 49 .....[..SMI0.SMI 7c20: 43 08 5b 80 53 4d 49 31 00 0c 18 a0 0c 5e 0c 00 C.[.SMI1.....^.. 7c30: 10 00 00 5b 81 16 53 4d 49 31 00 42 43 4d 44 10 ...[..SMI1.BCMD. 7c40: 44 49 44 5f 20 49 4e 46 4f 40 40 5b 81 30 53 4d DID_ INFO@@[.0SM 7c50: 49 31 00 00 30 49 4e 46 30 08 49 4e 46 31 08 49 I1..0INF0.INF1.I 7c60: 4e 46 32 08 49 4e 46 33 08 49 4e 46 34 08 49 4e NF2.INF3.INF4.IN 7c70: 46 35 08 49 4e 46 36 08 49 4e 46 37 08 5b 81 0d F5.INF6.INF7.[.. 7c80: 53 4d 49 31 00 00 30 49 4e 46 44 20 14 13 50 48 SMI1..0INFD ..PH 7c90: 53 31 01 70 68 42 43 4d 44 70 0a ab 53 4d 49 43 S1.phBCMDp..SMIC 7ca0: 14 3d 50 48 53 32 02 5b 23 50 53 4d 58 ff ff 70 .=PHS2.[#PSMX..p 7cb0: 0a 00 44 49 44 5f 70 69 49 4e 46 4f 70 68 42 43 ..DID_piINFOphBC 7cc0: 4d 44 70 0a ab 53 4d 49 43 70 49 4e 46 4f 60 5b MDp..SMICpINFO`[ 7cd0: 27 50 53 4d 58 70 0a 00 42 43 4d 44 a4 60 14 2d 'PSMXp..BCMD.`.- 7ce0: 50 48 53 33 03 5b 23 50 53 4d 58 ff ff 70 68 42 PHS3.[#PSMX..phB 7cf0: 43 4d 44 70 69 44 49 44 5f 70 6a 49 4e 46 4f 70 CMDpiDID_pjINFOp 7d00: 0a ab 53 4d 49 43 5b 27 50 53 4d 58 5b 82 1c 4d ..SMIC['PSMX[..M 7d10: 42 54 5f 08 5f 48 49 44 0c 41 d0 0c 32 14 0c 47 BT_._HID.A..2..G 7d20: 48 49 44 00 a4 11 04 0a 01 02 5b 82 8e 0f 01 45 HID.......[....E 7d30: 43 30 5f 08 5f 48 49 44 0c 41 d0 0c 09 14 26 5f C0_._HID.A....&_ 7d40: 43 52 53 00 08 42 46 46 52 11 15 0a 12 47 01 62 CRS..BFFR....G.b 7d50: 00 62 00 00 01 47 01 66 00 66 00 00 01 79 00 a4 .b...G.f.f...y.. 7d60: 42 46 46 52 14 43 13 5f 52 45 47 02 a0 4b 12 90 BFFR.C._REG..K.. 7d70: 93 68 0a 03 93 69 0a 01 70 0a 01 45 43 4f 4e 5b .h...i..p..ECON[ 7d80: 23 4d 55 54 30 ff ff 70 41 43 49 4e 50 57 52 53 #MUT0..pACINPWRS 7d90: 70 42 30 49 4e 5e 5e 5e 5e 2e 42 41 54 54 42 53 pB0IN^^^^.BATTBS 7da0: 54 41 5b 27 4d 55 54 30 a0 1d 93 54 50 4f 53 0a TA['MUT0...TPOS. 7db0: 80 5b 23 4d 55 54 30 ff ff 70 0a 40 41 43 4f 53 .[#MUT0..p.@ACOS 7dc0: 5b 27 4d 55 54 30 a0 1d 93 54 50 4f 53 0a 04 5b ['MUT0...TPOS..[ 7dd0: 23 4d 55 54 30 ff ff 70 0a 08 41 43 4f 53 5b 27 #MUT0..p..ACOS[' 7de0: 4d 55 54 30 a0 1d 93 54 50 4f 53 0a 08 5b 23 4d MUT0...TPOS..[#M 7df0: 55 54 30 ff ff 70 0a 10 41 43 4f 53 5b 27 4d 55 UT0..p..ACOS['MU 7e00: 54 30 a0 1d 93 54 50 4f 53 0a 10 5b 23 4d 55 54 T0...TPOS..[#MUT 7e10: 30 ff ff 70 0a 10 41 43 4f 53 5b 27 4d 55 54 30 0..p..ACOS['MUT0 7e20: a0 1d 93 54 50 4f 53 0a 11 5b 23 4d 55 54 30 ff ...TPOS..[#MUT0. 7e30: ff 70 0a 10 41 43 4f 53 5b 27 4d 55 54 30 a0 1d .p..ACOS['MUT0.. 7e40: 93 54 50 4f 53 0a 12 5b 23 4d 55 54 30 ff ff 70 .TPOS..[#MUT0..p 7e50: 0a 10 41 43 4f 53 5b 27 4d 55 54 30 a0 1d 93 54 ..ACOS['MUT0...T 7e60: 50 4f 53 0a 40 5b 23 4d 55 54 30 ff ff 70 0a 20 POS.@[#MUT0..p. 7e70: 41 43 4f 53 5b 27 4d 55 54 30 a0 1d 93 54 50 4f ACOS['MUT0...TPO 7e80: 53 0a 50 5b 23 4d 55 54 30 ff ff 70 0a 80 41 43 S.P[#MUT0..p..AC 7e90: 4f 53 5b 27 4d 55 54 30 08 5f 47 50 45 0a 03 5b OS['MUT0._GPE..[ 7ea0: 80 45 43 52 4d 03 0a 00 0b 00 01 5b 81 42 42 45 .ECRM......[.BBE 7eb0: 43 52 4d 11 57 4b 45 56 08 00 48 0b 50 52 54 43 CRM.WKEV..H.PRTC 7ec0: 08 53 53 54 41 08 53 41 44 52 08 53 43 4d 44 08 .SSTA.SADR.SCMD. 7ed0: 53 4d 49 44 08 53 44 41 54 08 53 44 54 31 08 00 SMID.SDAT.SDT1.. 7ee0: 48 0e 42 43 4e 54 08 41 4c 52 41 08 41 4c 44 30 H.BCNT.ALRA.ALD0 7ef0: 08 41 4c 44 31 08 41 43 49 4e 01 50 57 4f 4e 01 .ALD1.ACIN.PWON. 7f00: 49 4e 53 33 01 57 50 53 57 01 49 4e 53 34 01 53 INS3.WPSW.INS4.S 7f10: 4d 4f 4e 01 57 50 57 47 01 52 56 43 4f 01 53 55 MON.WPWG.RVCO.SU 7f20: 53 42 01 53 55 53 43 01 46 41 4e 4f 01 53 4e 49 SB.SUSC.FANO.SNI 7f30: 46 01 4c 49 44 41 01 00 03 4b 42 42 50 01 44 41 F.LIDA...KBBP.DA 7f40: 44 50 01 4d 4d 42 54 01 4b 42 53 4f 01 4b 42 45 DP.MMBT.KBSO.KBE 7f50: 52 01 45 43 43 42 01 43 49 52 42 01 4d 55 54 45 R.ECCB.CIRB.MUTE 7f60: 01 54 53 4e 30 01 54 53 4e 31 01 4f 53 54 50 01 .TSN0.TSN1.OSTP. 7f70: 54 53 4e 32 01 45 42 4b 30 01 45 42 4b 31 01 45 TSN2.EBK0.EBK1.E 7f80: 42 4b 32 01 45 42 4b 33 01 00 08 00 04 51 41 33 BK2.EBK3.....QA3 7f90: 45 01 00 43 05 54 4f 46 53 08 00 10 54 54 52 54 E..C.TOFS...TTRT 7fa0: 01 43 43 50 55 01 00 0e 4f 54 50 43 08 56 47 41 .CCPU...OTPC.VGA 7fb0: 54 08 43 48 50 54 08 43 50 55 54 08 53 59 53 54 T.CHPT.CPUT.SYST 7fc0: 08 44 54 53 31 08 44 54 53 32 08 00 10 48 57 53 .DTS1.DTS2...HWS 7fd0: 4e 08 43 54 59 50 08 46 43 4e 54 01 46 54 53 54 N.CTYP.FCNT.FTST 7fe0: 01 00 03 46 41 44 4a 01 54 43 54 4c 01 46 41 54 ...FADJ.TCTL.FAT 7ff0: 4f 01 44 41 43 31 08 44 41 43 32 08 46 4c 56 4c O.DAC1.DAC2.FLVL 8000: 08 43 54 4c 31 10 43 54 4c 32 10 46 41 4e 48 08 .CTL1.CTL2.FANH. 8010: 46 41 4e 4c 08 52 50 4d 32 10 46 54 41 43 10 46 FANL.RPM2.FTAC.F 8020: 53 50 44 10 53 4c 45 44 01 4e 4c 45 44 01 43 4c SPD.SLED.NLED.CL 8030: 45 44 01 00 05 42 54 31 4c 01 42 54 32 4c 01 53 ED...BT1L.BT2L.S 8040: 4e 49 4c 01 00 15 42 4c 42 55 01 42 4c 42 44 01 NIL...BLBU.BLBD. 8050: 42 4c 42 48 01 00 05 42 48 4c 4c 08 42 54 4c 4c BLBH...BHLL.BTLL 8060: 08 42 54 4c 49 08 00 08 53 56 50 4c 08 44 49 41 .BTLI...SVPL.DIA 8070: 47 08 4b 4c 45 44 08 00 20 41 43 54 50 08 00 08 G.KLED.. ACTP... 8080: 4e 4f 53 30 08 00 30 41 43 4f 53 08 00 08 4b 42 NOS0..0ACOS...KB 8090: 54 4c 08 4b 42 42 4c 08 42 52 53 4c 08 50 4c 47 TL.KBBL.BRSL.PLG 80a0: 48 08 50 4c 47 4c 08 00 48 06 53 42 46 30 08 00 H.PLGL..H.SBF0.. 80b0: 10 43 41 50 30 10 52 43 50 30 10 56 4f 54 30 10 .CAP0.RCP0.VOT0. 80c0: 43 52 54 30 10 42 54 4d 30 10 42 53 54 30 10 42 CRT0.BTM0.BST0.B 80d0: 52 43 30 10 46 43 50 30 10 44 43 50 30 10 44 56 RC0.FCP0.DCP0.DV 80e0: 54 30 10 4d 45 52 30 10 4d 46 44 30 10 42 53 4e T0.MER0.MFD0.BSN 80f0: 30 10 4d 41 53 30 10 00 38 42 43 53 30 08 4d 4e 0.MAS0..8BCS0.MN 8100: 4e 30 08 44 4e 4e 30 08 42 43 4e 30 08 42 4f 43 N0.DNN0.BCN0.BOC 8110: 30 08 42 46 43 30 08 42 4d 44 30 08 43 50 4c 30 0.BFC0.BMD0.CPL0 8120: 08 42 30 49 4e 01 42 30 44 59 01 42 30 50 46 01 .B0IN.B0DY.B0PF. 8130: 42 30 54 46 01 42 30 43 4c 01 42 30 4c 57 01 42 B0TF.B0CL.B0LW.B 8140: 30 44 43 01 42 30 44 44 01 42 30 46 43 01 42 30 0DC.B0DD.B0FC.B0 8150: 50 43 01 42 30 4f 54 01 00 01 42 30 57 4b 01 42 PC.B0OT...B0WK.B 8160: 30 49 43 01 42 30 57 43 01 42 30 4c 33 01 42 30 0IC.B0WC.B0L3.B0 8170: 46 47 01 42 30 44 47 01 42 30 56 4c 01 42 30 52 FG.B0DG.B0VL.B0R 8180: 59 01 42 30 41 4c 01 42 30 41 46 01 42 30 4e 49 Y.B0AL.B0AF.B0NI 8190: 01 42 30 4c 49 01 53 4d 45 30 01 53 4d 45 31 01 .B0LI.SME0.SME1. 81a0: 53 4d 45 32 01 53 4d 45 33 01 46 4c 44 47 01 46 SME2.SME3.FLDG.F 81b0: 4c 43 47 01 44 53 47 30 01 49 4e 49 54 01 52 54 LCG.DSG0.INIT.RT 81c0: 41 4d 01 52 43 41 4d 01 00 01 54 44 41 4d 01 4f AM.RCAM...TDAM.O 81d0: 54 41 4d 01 00 01 54 43 41 4d 01 4f 43 41 4d 01 TAM...TCAM.OCAM. 81e0: 43 41 50 31 10 52 43 50 31 10 56 4f 54 31 10 43 CAP1.RCP1.VOT1.C 81f0: 52 54 31 10 42 54 4d 31 10 42 53 54 31 10 42 52 RT1.BTM1.BST1.BR 8200: 43 31 10 46 43 50 31 10 44 43 50 31 10 44 56 54 C1.FCP1.DCP1.DVT 8210: 31 10 4d 45 52 31 10 4d 46 44 31 10 42 53 4e 31 1.MER1.MFD1.BSN1 8220: 10 4d 41 53 31 10 00 38 42 43 53 31 08 4d 4e 4e .MAS1..8BCS1.MNN 8230: 31 08 44 4e 4e 31 08 42 43 4e 31 08 42 4f 43 31 1.DNN1.BCN1.BOC1 8240: 08 42 46 43 31 08 42 4d 44 31 08 43 50 4c 31 08 .BFC1.BMD1.CPL1. 8250: 42 31 49 4e 01 42 31 44 59 01 42 31 50 46 01 42 B1IN.B1DY.B1PF.B 8260: 31 54 46 01 42 31 43 4c 01 42 31 4c 57 01 42 31 1TF.B1CL.B1LW.B1 8270: 44 43 01 42 31 44 44 01 42 31 46 43 01 42 31 50 DC.B1DD.B1FC.B1P 8280: 43 01 42 31 4f 54 01 00 01 42 31 57 4b 01 42 31 C.B1OT...B1WK.B1 8290: 49 43 01 42 31 57 43 01 42 31 4c 33 01 42 31 46 IC.B1WC.B1L3.B1F 82a0: 47 01 42 31 44 47 01 42 31 56 4c 01 42 31 52 59 G.B1DG.B1VL.B1RY 82b0: 01 42 31 41 4c 01 42 31 41 46 01 42 31 4e 49 01 .B1AL.B1AF.B1NI. 82c0: 42 31 4c 49 01 53 4c 4d 31 08 53 4c 4d 32 08 5b B1LI.SLM1.SLM2.[ 82d0: 01 4d 55 54 30 00 14 0d 5f 51 42 31 00 70 0a b1 .MUT0..._QB1.p.. 82e0: 50 38 30 48 14 43 0b 5f 51 38 30 00 70 0a 80 50 P80H.C._Q80.p..P 82f0: 38 30 48 a0 0b 50 57 52 53 70 42 52 47 41 60 a1 80H..PWRSpBRGA`. 8300: 07 70 42 52 47 44 60 a0 36 92 95 54 50 4f 53 0a .pBRGD`.6..TPOS. 8310: 40 70 0a 00 60 86 5e 5e 5e 2e 56 47 41 5f 4c 43 @p..`.^^^.VGA_LC 8320: 44 5f 0a 86 86 5e 5e 5e 2f 03 50 42 33 5f 56 47 D_...^^^/.PB3_VG 8330: 41 5f 4c 43 44 5f 0a 86 70 42 52 54 4c 60 a1 09 A_LCD_..pBRTL`.. 8340: 50 48 53 32 0a 8a 0a 02 a0 08 92 93 60 0a 0f 75 PHS2........`..u 8350: 60 70 0a 03 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 `p..^^^^.AMW0INF 8360: 30 70 0a 00 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 0p..^^^^.AMW0INF 8370: 31 70 0b 06 e0 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 1p...^^^^.AMW0IN 8380: 46 32 70 60 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 F2p`^^^^.AMW0INF 8390: 33 86 41 4d 57 30 0a d0 14 43 0b 5f 51 38 31 00 3.AMW0...C._Q81. 83a0: 70 0a 81 50 38 30 48 a0 0b 50 57 52 53 70 42 52 p..P80H..PWRSpBR 83b0: 47 41 60 a1 07 70 42 52 47 44 60 a0 36 92 95 54 GA`..pBRGD`.6..T 83c0: 50 4f 53 0a 40 70 0a 00 60 86 5e 5e 5e 2e 56 47 POS.@p..`.^^^.VG 83d0: 41 5f 4c 43 44 5f 0a 87 86 5e 5e 5e 2f 03 50 42 A_LCD_...^^^/.PB 83e0: 33 5f 56 47 41 5f 4c 43 44 5f 0a 87 70 42 52 54 3_VGA_LCD_..pBRT 83f0: 4c 60 a1 09 50 48 53 32 0a 8a 0a 03 a0 08 92 93 L`..PHS2........ 8400: 60 0a 00 76 60 70 0a 03 5e 5e 5e 5e 2e 41 4d 57 `..v`p..^^^^.AMW 8410: 30 49 4e 46 30 70 0a 00 5e 5e 5e 5e 2e 41 4d 57 0INF0p..^^^^.AMW 8420: 30 49 4e 46 31 70 0b 05 e0 5e 5e 5e 5e 2e 41 4d 0INF1p...^^^^.AM 8430: 57 30 49 4e 46 32 70 60 5e 5e 5e 5e 2e 41 4d 57 W0INF2p`^^^^.AMW 8440: 30 49 4e 46 33 86 41 4d 57 30 0a d0 14 14 5f 51 0INF3.AMW0...._Q 8450: 38 32 00 70 0a 82 50 38 30 48 86 4c 49 44 5f 0a 82.p..P80H.LID_. 8460: 80 14 44 06 5f 51 38 33 00 70 0a 83 50 38 30 48 ..D._Q83.p..P80H 8470: 5b 23 4d 55 54 30 ff ff 70 41 43 49 4e 50 57 52 [#MUT0..pACINPWR 8480: 53 5b 27 4d 55 54 30 86 41 43 41 44 0a 80 a0 26 S['MUT0.ACAD...& 8490: 93 45 43 4f 4e 0a 01 86 5c 2e 5f 50 52 5f 43 30 .ECON...\._PR_C0 84a0: 30 30 0a 80 5b 22 0a 64 86 5c 2e 5f 50 52 5f 43 00..[".d.\._PR_C 84b0: 30 30 30 0a 81 a0 10 95 54 50 4f 53 0a 40 50 48 000.....TPOS.@PH 84c0: 53 32 0a 8a 0a 01 14 44 06 5f 51 38 34 00 70 0a S2.....D._Q84.p. 84d0: 84 50 38 30 48 5b 23 4d 55 54 30 ff ff 70 41 43 .P80H[#MUT0..pAC 84e0: 49 4e 50 57 52 53 5b 27 4d 55 54 30 86 41 43 41 INPWRS['MUT0.ACA 84f0: 44 0a 80 a0 26 93 45 43 4f 4e 0a 01 86 5c 2e 5f D...&.ECON...\._ 8500: 50 52 5f 43 30 30 30 0a 80 5b 22 0a 64 86 5c 2e PR_C000..[".d.\. 8510: 5f 50 52 5f 43 30 30 30 0a 81 a0 10 95 54 50 4f _PR_C000.....TPO 8520: 53 0a 40 50 48 53 32 0a 8a 0a 00 14 43 09 5f 51 S.@PHS2.....C._Q 8530: 38 35 00 70 0a 85 50 38 30 48 5b 23 4d 55 54 30 85.p..P80H[#MUT0 8540: ff ff 5e 5e 5e 5e 2e 42 41 54 54 42 54 53 54 86 ..^^^^.BATTBTST. 8550: 42 41 54 54 0a 80 5b 22 0b f4 01 a0 25 5e 5e 5e BATT..["....%^^^ 8560: 5e 2e 42 41 54 54 42 54 43 48 86 42 41 54 54 0a ^.BATTBTCH.BATT. 8570: 81 70 0a 00 5e 5e 5e 5e 2e 42 41 54 54 42 54 43 .p..^^^^.BATTBTC 8580: 48 70 0a 02 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 Hp..^^^^.AMW0INF 8590: 30 70 0a 00 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 0p..^^^^.AMW0INF 85a0: 31 70 0b 0e e0 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 1p...^^^^.AMW0IN 85b0: 46 32 86 41 4d 57 30 0a d0 5b 27 4d 55 54 30 14 F2.AMW0..['MUT0. 85c0: 47 08 5f 51 38 36 00 70 0a 86 50 38 30 48 5b 23 G._Q86.p..P80H[# 85d0: 4d 55 54 30 ff ff 70 0a 00 5e 5e 5e 5e 2e 42 41 MUT0..p..^^^^.BA 85e0: 54 54 42 53 54 41 86 42 41 54 54 0a 80 5b 22 0b TTBSTA.BATT..[". 85f0: f4 01 86 42 41 54 54 0a 81 70 0a 00 5e 5e 5e 5e ...BATT..p..^^^^ 8600: 2e 42 41 54 54 42 54 50 5f 5b 27 4d 55 54 30 70 .BATTBTP_['MUT0p 8610: 0a 02 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 30 70 ..^^^^.AMW0INF0p 8620: 0a 00 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 31 70 ..^^^^.AMW0INF1p 8630: 0b 0e e0 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 32 ...^^^^.AMW0INF2 8640: 86 41 4d 57 30 0a d0 14 0d 5f 51 38 37 00 70 0a .AMW0...._Q87.p. 8650: 87 50 38 30 48 14 0d 5f 51 38 38 00 70 0a 88 50 .P80H.._Q88.p..P 8660: 38 30 48 14 0d 5f 51 38 39 00 70 0a 89 50 38 30 80H.._Q89.p..P80 8670: 48 14 0d 5f 51 38 41 00 70 0a 8a 50 38 30 48 14 H.._Q8A.p..P80H. 8680: 4d 0b 5f 51 38 43 00 70 0a 8c 50 38 30 48 70 0a M._Q8C.p..P80Hp. 8690: 00 60 70 0a 00 61 70 0a 00 62 70 0a 00 63 70 0a .`p..ap..bp..cp. 86a0: f2 57 43 41 31 46 4f 57 4d 0a 11 0a 0b 70 57 46 .WCA1FOWM....pWF 86b0: 49 31 60 70 57 46 49 32 61 70 0b 00 01 62 70 0a I1`pWFI2ap...bp. 86c0: 01 63 a0 4a 07 57 49 46 53 70 0a 06 5e 5e 5e 5e .c.J.WIFSp..^^^^ 86d0: 2e 41 4d 57 30 49 4e 46 30 70 0a 00 5e 5e 5e 5e .AMW0INF0p..^^^^ 86e0: 2e 41 4d 57 30 49 4e 46 31 70 0b 08 e0 5e 5e 5e .AMW0INF1p...^^^ 86f0: 5e 2e 41 4d 57 30 49 4e 46 32 70 60 5e 5e 5e 5e ^.AMW0INF2p`^^^^ 8700: 2e 41 4d 57 30 49 4e 46 33 70 61 5e 5e 5e 5e 2e .AMW0INF3pa^^^^. 8710: 41 4d 57 30 49 4e 46 34 70 62 5e 5e 5e 5e 2e 41 AMW0INF4pb^^^^.A 8720: 4d 57 30 49 4e 46 35 70 63 5e 5e 5e 5e 2e 41 4d MW0INF5pc^^^^.AM 8730: 57 30 49 4e 46 36 86 41 4d 57 30 0a d0 14 0d 5f W0INF6.AMW0...._ 8740: 51 38 44 00 70 0a 8d 50 38 30 48 14 14 5f 51 38 Q8D.p..P80H.._Q8 8750: 45 00 70 0a 8e 50 38 30 48 86 53 4c 50 42 0a 80 E.p..P80H.SLPB.. 8760: 14 14 5f 51 38 46 00 70 0a 8f 50 38 30 48 86 42 .._Q8F.p..P80H.B 8770: 41 54 54 0a 80 14 14 5f 51 39 30 00 70 0a 90 50 ATT...._Q90.p..P 8780: 38 30 48 86 42 41 54 54 0a 80 14 1b 5f 51 39 31 80H.BATT...._Q91 8790: 00 70 0a 91 50 38 30 48 70 0a 91 53 53 4d 44 70 .p..P80Hp..SSMDp 87a0: 0a 77 53 53 4d 50 14 14 5f 51 39 32 00 70 0a 92 .wSSMP.._Q92.p.. 87b0: 53 53 4d 44 70 0a 77 53 53 4d 50 14 14 5f 51 39 SSMDp.wSSMP.._Q9 87c0: 33 00 70 0a 93 53 53 4d 44 70 0a 77 53 53 4d 50 3.p..SSMDp.wSSMP 87d0: 14 14 5f 51 39 34 00 70 0a 94 53 53 4d 44 70 0a .._Q94.p..SSMDp. 87e0: 77 53 53 4d 50 14 14 5f 51 39 35 00 70 0a 95 53 wSSMP.._Q95.p..S 87f0: 53 4d 44 70 0a 77 53 53 4d 50 14 14 5f 51 39 36 SMDp.wSSMP.._Q96 8800: 00 70 0a 96 53 53 4d 44 70 0a 77 53 53 4d 50 14 .p..SSMDp.wSSMP. 8810: 14 5f 51 39 37 00 70 0a 97 53 53 4d 44 70 0a 77 ._Q97.p..SSMDp.w 8820: 53 53 4d 50 14 14 5f 51 39 38 00 70 0a 98 53 53 SSMP.._Q98.p..SS 8830: 4d 44 70 0a 77 53 53 4d 50 14 31 5f 51 39 41 00 MDp.wSSMP.1_Q9A. 8840: 70 0a 9a 50 38 30 48 70 4e 4f 53 30 60 70 60 5c p..P80HpNOS0`p`\ 8850: 2f 03 5f 50 52 5f 43 30 30 30 5f 50 50 43 86 5c /._PR_C000_PPC.\ 8860: 2e 5f 50 52 5f 43 30 30 30 0a 80 14 06 5f 51 41 ._PR_C000...._QA 8870: 30 00 14 06 5f 51 41 31 00 14 06 5f 51 41 32 00 0..._QA1..._QA2. 8880: 14 06 5f 51 41 33 00 14 06 5f 51 41 34 00 14 06 .._QA3..._QA4... 8890: 5f 51 41 36 00 14 06 5f 51 41 37 00 14 06 5f 51 _QA6..._QA7..._Q 88a0: 41 38 00 14 06 5f 51 41 39 00 14 06 5f 51 41 41 A8..._QA9..._QAA 88b0: 00 14 4a 04 5f 51 41 43 00 5b 22 0a 32 70 0a ac ..J._QAC.[".2p.. 88c0: 50 38 30 48 70 0a 02 5e 5e 5e 5e 2e 41 4d 57 30 P80Hp..^^^^.AMW0 88d0: 49 4e 46 30 70 0a 00 5e 5e 5e 5e 2e 41 4d 57 30 INF0p..^^^^.AMW0 88e0: 49 4e 46 31 70 0b 27 e0 5e 5e 5e 5e 2e 41 4d 57 INF1p.'.^^^^.AMW 88f0: 30 49 4e 46 32 86 41 4d 57 30 0a d0 14 14 5f 51 0INF2.AMW0...._Q 8900: 41 46 00 70 0a af 50 38 30 48 86 4d 42 54 5f 0a AF.p..P80H.MBT_. 8910: 80 14 46 04 5f 51 41 44 00 70 0a ad 50 38 30 48 ..F._QAD.p..P80H 8920: 70 0a 02 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 30 p..^^^^.AMW0INF0 8930: 70 0a 00 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 31 p..^^^^.AMW0INF1 8940: 70 0b 25 e0 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 p.%.^^^^.AMW0INF 8950: 32 86 41 4d 57 30 0a d0 14 46 04 5f 51 41 45 00 2.AMW0...F._QAE. 8960: 70 0a ae 50 38 30 48 70 0a 02 5e 5e 5e 5e 2e 41 p..P80Hp..^^^^.A 8970: 4d 57 30 49 4e 46 30 70 0a 00 5e 5e 5e 5e 2e 41 MW0INF0p..^^^^.A 8980: 4d 57 30 49 4e 46 31 70 0b 28 e0 5e 5e 5e 5e 2e MW0INF1p.(.^^^^. 8990: 41 4d 57 30 49 4e 46 32 86 41 4d 57 30 0a d0 14 AMW0INF2.AMW0... 89a0: 06 5f 51 42 30 00 14 06 5f 51 44 30 00 14 06 5f ._QB0..._QD0..._ 89b0: 51 44 31 00 14 3d 5f 51 45 30 00 70 0a e0 50 38 QD1..=_QE0.p..P8 89c0: 30 48 70 0a 02 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 0Hp..^^^^.AMW0IN 89d0: 46 30 70 0a 00 5e 5e 5e 5e 2e 41 4d 57 30 49 4e F0p..^^^^.AMW0IN 89e0: 46 31 70 0a 3a 5e 5e 5e 5e 2e 41 4d 57 30 49 4e F1p.:^^^^.AMW0IN 89f0: 46 32 14 3e 5f 51 45 31 00 70 0a e1 50 38 30 48 F2.>_QE1.p..P80H 8a00: 70 0a 02 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 30 p..^^^^.AMW0INF0 8a10: 70 0a 00 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 31 p..^^^^.AMW0INF1 8a20: 70 0b 45 e0 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 p.E.^^^^.AMW0INF 8a30: 32 14 47 22 5f 51 45 33 00 70 0a e3 50 38 30 48 2.G"_QE3.p..P80H 8a40: 70 0a 00 57 43 41 33 70 0a 00 57 43 41 34 46 4f p..WCA3p..WCA4FO 8a50: 57 4d 0a 11 0a 05 5b 23 4d 55 54 30 ff ff 70 41 WM....[#MUT0..pA 8a60: 43 49 4e 60 70 44 41 44 50 61 70 41 43 54 50 62 CIN`pDADPapACTPb 8a70: 70 0a 06 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 30 p..^^^^.AMW0INF0 8a80: 70 0a 00 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 31 p..^^^^.AMW0INF1 8a90: 70 0b 0d e0 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 p...^^^^.AMW0INF 8aa0: 32 70 0a 00 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 2p..^^^^.AMW0INF 8ab0: 33 70 0a 00 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 3p..^^^^.AMW0INF 8ac0: 34 70 0a 00 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 4p..^^^^.AMW0INF 8ad0: 35 70 0a 00 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 5p..^^^^.AMW0INF 8ae0: 36 a0 0c 93 54 59 50 45 0a 00 70 0a 41 67 a0 0c 6...TYPE..p.Ag.. 8af0: 93 54 59 50 45 0a 01 70 0a 5a 67 a0 49 07 93 42 .TYPE..p.Zg.I..B 8b00: 45 4d 51 0a 02 a0 4f 06 93 42 30 49 4e 0a 01 a0 EMQ...O..B0IN... 8b10: 20 92 93 44 4e 4e 30 0a ff 70 0a 12 5e 5e 5e 5e ..DNN0..p..^^^^ 8b20: 2e 41 4d 57 30 49 4e 46 33 86 41 4d 57 30 0a d0 .AMW0INF3.AMW0.. 8b30: a1 44 04 a0 1f 93 42 30 50 46 0a 01 70 0a 16 5e .D....B0PF..p..^ 8b40: 5e 5e 5e 2e 41 4d 57 30 49 4e 46 33 86 41 4d 57 ^^^.AMW0INF3.AMW 8b50: 30 0a d0 a1 21 a0 1f 93 42 30 54 46 0a 01 70 0a 0...!...B0TF..p. 8b60: 15 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 33 86 41 .^^^^.AMW0INF3.A 8b70: 4d 57 30 0a d0 a0 4d 0d 93 42 45 4d 51 0a 01 70 MW0...M..BEMQ..p 8b80: 0a 01 50 38 30 48 a0 47 04 93 60 0a 01 79 67 0a ..P80H.G..`..yg. 8b90: 08 67 a0 3b 93 62 0a 00 70 0a 01 5e 5e 5e 5e 2e .g.;.b..p..^^^^. 8ba0: 41 4d 57 30 49 4e 46 33 70 0a 01 5e 5e 5e 5e 2e AMW0INF3p..^^^^. 8bb0: 41 4d 57 30 49 4e 46 35 70 67 5e 5e 5e 5e 2e 41 AMW0INF5pg^^^^.A 8bc0: 4d 57 30 49 4e 46 36 86 41 4d 57 30 0a d0 a0 44 MW0INF6.AMW0...D 8bd0: 08 95 62 67 70 0a 02 50 38 30 48 a0 3b 93 62 0a ..bgp..P80H.;.b. 8be0: 2d 70 0a 03 50 38 30 48 70 0a 05 5e 5e 5e 5e 2e -p..P80Hp..^^^^. 8bf0: 41 4d 57 30 49 4e 46 33 70 0a 01 5e 5e 5e 5e 2e AMW0INF3p..^^^^. 8c00: 41 4d 57 30 49 4e 46 35 70 67 5e 5e 5e 5e 2e 41 AMW0INF5pg^^^^.A 8c10: 4d 57 30 49 4e 46 36 a0 34 93 62 0a 41 70 0a 02 MW0INF6.4.b.Ap.. 8c20: 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 33 70 0a 04 ^^^^.AMW0INF3p.. 8c30: 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 35 70 67 5e ^^^^.AMW0INF5pg^ 8c40: 5e 5e 5e 2e 41 4d 57 30 49 4e 46 36 86 41 4d 57 ^^^.AMW0INF6.AMW 8c50: 30 0a d0 5b 27 4d 55 54 30 14 41 06 5f 51 45 35 0..['MUT0.A._QE5 8c60: 00 70 0a e5 50 38 30 48 5b 23 4d 55 54 30 ff ff .p..P80H[#MUT0.. 8c70: 5e 5e 5e 5e 2e 42 41 54 54 42 54 53 54 70 0a 02 ^^^^.BATTBTSTp.. 8c80: 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 30 70 0a 00 ^^^^.AMW0INF0p.. 8c90: 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 31 70 0b 0e ^^^^.AMW0INF1p.. 8ca0: e0 5e 5e 5e 5e 2e 41 4d 57 30 49 4e 46 32 86 41 .^^^^.AMW0INF2.A 8cb0: 4d 57 30 0a d0 5b 27 4d 55 54 30 14 0d 5f 51 46 MW0..['MUT0.._QF 8cc0: 31 00 70 0a f1 50 38 30 48 14 0d 5f 51 46 32 00 1.p..P80H.._QF2. 8cd0: 70 0a f2 50 38 30 48 14 0d 5f 51 46 33 00 70 0a p..P80H.._QF3.p. 8ce0: f3 50 38 30 48 14 0d 5f 51 46 34 00 70 0a f4 50 .P80H.._QF4.p..P 8cf0: 38 30 48 14 0d 5f 51 46 35 00 70 0a f5 50 38 30 80H.._QF5.p..P80 8d00: 48 14 0d 5f 51 46 36 00 70 0a f6 50 38 30 48 14 H.._QF6.p..P80H. 8d10: 0d 5f 51 46 37 00 70 0a f7 50 38 30 48 14 0d 5f ._QF7.p..P80H.._ 8d20: 51 46 38 00 70 0a f8 50 38 30 48 14 0d 5f 51 46 QF8.p..P80H.._QF 8d30: 39 00 70 0a f9 50 38 30 48 14 0d 5f 51 46 41 00 9.p..P80H.._QFA. 8d40: 70 0a fa 50 38 30 48 14 0d 5f 51 46 42 00 70 0a p..P80H.._QFB.p. 8d50: fb 50 38 30 48 14 0d 5f 51 46 43 00 70 0a fc 50 .P80H.._QFC.p..P 8d60: 38 30 48 14 46 0c 5f 51 39 46 00 70 0a 9f 50 38 80H.F._Q9F.p..P8 8d70: 30 48 70 0a 00 60 70 0a 00 61 70 0a 00 62 70 0a 0Hp..`p..ap..bp. 8d80: 00 63 a0 17 93 51 43 4b 53 0a 00 70 0a f2 57 43 .c...QCKS..p..WC 8d90: 41 31 46 4f 57 4d 0a 11 0a 0b 70 57 46 49 31 60 A1FOWM....pWFI1` 8da0: 70 57 46 49 32 61 70 0b 00 01 62 70 0a 01 63 a0 pWFI2ap...bp..c. 8db0: 4a 07 57 49 46 53 70 0a 06 5e 5e 5e 5e 2e 41 4d J.WIFSp..^^^^.AM 8dc0: 57 30 49 4e 46 30 70 0a 00 5e 5e 5e 5e 2e 41 4d W0INF0p..^^^^.AM 8dd0: 57 30 49 4e 46 31 70 0b 08 e0 5e 5e 5e 5e 2e 41 W0INF1p...^^^^.A 8de0: 4d 57 30 49 4e 46 32 70 60 5e 5e 5e 5e 2e 41 4d MW0INF2p`^^^^.AM 8df0: 57 30 49 4e 46 33 70 61 5e 5e 5e 5e 2e 41 4d 57 W0INF3pa^^^^.AMW 8e00: 30 49 4e 46 34 70 62 5e 5e 5e 5e 2e 41 4d 57 30 0INF4pb^^^^.AMW0 8e10: 49 4e 46 35 70 63 5e 5e 5e 5e 2e 41 4d 57 30 49 INF5pc^^^^.AMW0I 8e20: 4e 46 36 86 41 4d 57 30 0a d0 5b 82 40 16 50 32 NF6.AMW0..[.@.P2 8e30: 50 5f 08 5f 41 44 52 0c 04 00 14 00 08 5f 50 52 P_._ADR......_PR 8e40: 57 12 06 02 0a 04 0a 05 14 43 14 5f 50 52 54 00 W........C._PRT. 8e50: a0 4b 07 47 50 49 43 a4 12 43 07 08 12 0d 04 0c .K.GPIC..C...... 8e60: ff ff 04 00 0a 00 0a 00 0a 15 12 0d 04 0c ff ff ................ 8e70: 04 00 0a 01 0a 00 0a 16 12 0d 04 0c ff ff 04 00 ................ 8e80: 0a 02 0a 00 0a 17 12 0d 04 0c ff ff 04 00 0a 03 ................ 8e90: 0a 00 0a 14 12 0d 04 0c ff ff 05 00 0a 00 0a 00 ................ 8ea0: 0a 14 12 0d 04 0c ff ff 05 00 0a 01 0a 00 0a 15 ................ 8eb0: 12 0d 04 0c ff ff 05 00 0a 02 0a 00 0a 16 12 0d ................ 8ec0: 04 0c ff ff 05 00 0a 03 0a 00 0a 17 a1 4f 0b a4 .............O.. 8ed0: 12 4b 0b 08 12 16 04 0c ff ff 04 00 0a 00 5e 5e .K............^^ 8ee0: 2e 4c 50 43 30 4c 4e 4b 46 0a 00 12 16 04 0c ff .LPC0LNKF....... 8ef0: ff 04 00 0a 01 5e 5e 2e 4c 50 43 30 4c 4e 4b 47 .....^^.LPC0LNKG 8f00: 0a 00 12 16 04 0c ff ff 04 00 0a 02 5e 5e 2e 4c ............^^.L 8f10: 50 43 30 4c 4e 4b 48 0a 00 12 16 04 0c ff ff 04 PC0LNKH......... 8f20: 00 0a 03 5e 5e 2e 4c 50 43 30 4c 4e 4b 45 0a 00 ...^^.LPC0LNKE.. 8f30: 12 16 04 0c ff ff 05 00 0a 00 5e 5e 2e 4c 50 43 ..........^^.LPC 8f40: 30 4c 4e 4b 45 0a 00 12 16 04 0c ff ff 05 00 0a 0LNKE........... 8f50: 01 5e 5e 2e 4c 50 43 30 4c 4e 4b 46 0a 00 12 16 .^^.LPC0LNKF.... 8f60: 04 0c ff ff 05 00 0a 02 5e 5e 2e 4c 50 43 30 4c ........^^.LPC0L 8f70: 4e 4b 47 0a 00 12 16 04 0c ff ff 05 00 0a 03 5e NKG............^ 8f80: 5e 2e 4c 50 43 30 4c 4e 4b 48 0a 00 5b 82 45 57 ^.LPC0LNKH..[.EW 8f90: 53 50 42 30 08 5f 41 44 52 0c 00 00 15 00 08 5f SPB0._ADR......_ 8fa0: 50 52 57 12 06 02 0a 08 0a 04 14 4d 09 5f 50 52 PRW........M._PR 8fb0: 54 00 a0 39 47 50 49 43 a4 12 32 04 12 0b 04 0b T..9GPIC..2..... 8fc0: ff ff 0a 00 0a 00 0a 10 12 0b 04 0b ff ff 0a 01 ................ 8fd0: 0a 00 0a 11 12 0b 04 0b ff ff 0a 02 0a 00 0a 12 ................ 8fe0: 12 0b 04 0b ff ff 0a 03 0a 00 0a 13 a1 4b 05 a4 .............K.. 8ff0: 12 47 05 04 12 14 04 0b ff ff 0a 00 5e 5e 2e 4c .G..........^^.L 9000: 50 43 30 4c 4e 4b 41 0a 00 12 14 04 0b ff ff 0a PC0LNKA......... 9010: 01 5e 5e 2e 4c 50 43 30 4c 4e 4b 42 0a 00 12 14 .^^.LPC0LNKB.... 9020: 04 0b ff ff 0a 02 5e 5e 2e 4c 50 43 30 4c 4e 4b ......^^.LPC0LNK 9030: 43 0a 00 12 14 04 0b ff ff 0a 03 5e 5e 2e 4c 50 C..........^^.LP 9040: 43 30 4c 4e 4b 44 0a 00 5b 80 50 43 46 47 02 0a C0LNKD..[.PCFG.. 9050: 00 0a 20 5b 81 18 50 43 46 47 03 44 56 49 44 20 .. [..PCFG.DVID 9060: 50 43 4d 53 20 00 40 08 53 42 55 53 20 5b 80 58 PCMS .@.SBUS [.X 9070: 50 43 42 02 0a 58 0a 40 5b 81 39 58 50 43 42 00 PCB..X.@[.9XPCB. 9080: 00 40 08 4c 4b 43 4e 10 4c 4b 53 54 10 00 30 00 .@.LKCN.LKST..0. 9090: 03 50 53 44 43 01 00 02 50 53 44 53 01 00 01 48 .PSDC...PSDS...H 90a0: 50 43 53 01 00 37 50 4d 45 53 01 00 4f 06 54 47 PCS..7PMES..O.TG 90b0: 4c 53 04 14 0f 47 50 50 42 00 a4 7b 5f 41 44 52 LS...GPPB..{_ADR 90c0: 0a 07 00 14 48 30 47 48 50 53 02 70 47 50 50 42 ....H0GHPS.pGPPB 90d0: 60 a0 4e 13 93 68 0a 00 a0 4c 04 93 60 0a 00 5e `.N..h...L..`..^ 90e0: 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 ^.SMB_RWAB^^.SMB 90f0: 5f 43 41 42 52 0a 06 0a 00 0a c0 0c ff ef ff ff _CABR........... 9100: 0a 00 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e ..^^.SMB_RWAB^^. 9110: 53 4d 42 5f 43 41 42 52 0a 01 0a 00 0a 65 0c fe SMB_CABR.....e.. 9120: fe ff ff 0a 00 a0 4c 04 93 60 0a 01 5e 5e 2e 53 ......L..`..^^.S 9130: 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 MB_RWAB^^.SMB_CA 9140: 42 52 0a 06 0a 00 0a c0 0c ff df ff ff 0a 00 5e BR.............^ 9150: 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 ^.SMB_RWAB^^.SMB 9160: 5f 43 41 42 52 0a 01 0a 00 0a 65 0c fd fd ff ff _CABR.....e..... 9170: 0a 00 a0 4c 04 93 60 0a 02 5e 5e 2e 53 4d 42 5f ...L..`..^^.SMB_ 9180: 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a RWAB^^.SMB_CABR. 9190: 06 0a 00 0a c0 0c ff bf ff ff 0a 00 5e 5e 2e 53 ............^^.S 91a0: 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 MB_RWAB^^.SMB_CA 91b0: 42 52 0a 01 0a 00 0a 65 0c fb fb ff ff 0a 00 a0 BR.....e........ 91c0: 4c 04 93 60 0a 03 5e 5e 2e 53 4d 42 5f 52 57 41 L..`..^^.SMB_RWA 91d0: 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 06 0a 00 B^^.SMB_CABR.... 91e0: 0a c0 0c ff 7f ff ff 0a 00 5e 5e 2e 53 4d 42 5f .........^^.SMB_ 91f0: 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a RWAB^^.SMB_CABR. 9200: 01 0a 00 0a 65 0c f7 f7 ff ff 0a 00 5b 21 0a c8 ....e.......[!.. 9210: a0 46 14 93 68 0a 01 a0 4e 04 93 60 0a 00 5e 5e .F..h...N..`..^^ 9220: 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f .SMB_RWAB^^.SMB_ 9230: 43 41 42 52 0a 06 0a 00 0a c0 0c ff ef ff ff 0b CABR............ 9240: 00 10 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e ..^^.SMB_RWAB^^. 9250: 53 4d 42 5f 43 41 42 52 0a 01 0a 00 0a 65 0c fe SMB_CABR.....e.. 9260: fe ff ff 0b 01 01 a0 4e 04 93 60 0a 01 5e 5e 2e .......N..`..^^. 9270: 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 SMB_RWAB^^.SMB_C 9280: 41 42 52 0a 06 0a 00 0a c0 0c ff df ff ff 0b 00 ABR............. 9290: 20 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 ^^.SMB_RWAB^^.S 92a0: 4d 42 5f 43 41 42 52 0a 01 0a 00 0a 65 0c fd fd MB_CABR.....e... 92b0: ff ff 0b 02 02 a0 4e 04 93 60 0a 02 5e 5e 2e 53 ......N..`..^^.S 92c0: 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 MB_RWAB^^.SMB_CA 92d0: 42 52 0a 06 0a 00 0a c0 0c ff bf ff ff 0b 00 40 BR.............@ 92e0: 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d ^^.SMB_RWAB^^.SM 92f0: 42 5f 43 41 42 52 0a 01 0a 00 0a 65 0c fb fb ff B_CABR.....e.... 9300: ff 0b 04 04 a0 4e 04 93 60 0a 03 5e 5e 2e 53 4d .....N..`..^^.SM 9310: 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 B_RWAB^^.SMB_CAB 9320: 52 0a 06 0a 00 0a c0 0c ff 7f ff ff 0b 00 80 5e R..............^ 9330: 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 ^.SMB_RWAB^^.SMB 9340: 5f 43 41 42 52 0a 01 0a 00 0a 65 0c f7 f7 ff ff _CABR.....e..... 9350: 0b 08 08 5b 21 0a c8 a0 44 07 93 68 0a 00 47 45 ...[!...D..h..GE 9360: 4e 32 70 5e 5e 2e 53 4d 42 5f 52 44 41 42 5e 5e N2p^^.SMB_RDAB^^ 9370: 2e 53 4d 42 5f 43 41 42 52 0a 03 60 0a a5 61 7b .SMB_CABR..`..a{ 9380: 61 0a ff 61 70 0b f4 01 62 a2 37 90 92 93 61 0a a..ap...b.7...a. 9390: 10 94 62 0a 00 76 62 5b 21 0a c8 5b 21 0a c8 70 ..b..vb[!..[!..p 93a0: 5e 5e 2e 53 4d 42 5f 52 44 41 42 5e 5e 2e 53 4d ^^.SMB_RDAB^^.SM 93b0: 42 5f 43 41 42 52 0a 03 60 0a a5 61 7b 61 0a ff B_CABR..`..a{a.. 93c0: 61 a0 0a 92 93 61 0a 10 47 45 4e 31 14 49 0a 47 a....a..GEN1.I.G 93d0: 45 4e 32 00 70 0a 02 54 47 4c 53 70 47 50 50 42 EN2.p..TGLSpGPPB 93e0: 60 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 `^^.SMB_RWAB^^.S 93f0: 4d 42 5f 43 41 42 52 0a 03 60 0a a4 0c fe ff ff MB_CABR..`...... 9400: ff 0a 01 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e ...^^.SMB_RWAB^^ 9410: 2e 53 4d 42 5f 43 41 42 52 0a 03 60 0a a2 0c ff .SMB_CABR..`.... 9420: df ff ff 0b 00 20 5e 5e 2e 53 4d 42 5f 52 57 41 ..... ^^.SMB_RWA 9430: 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 03 60 0a B^^.SMB_CABR..`. 9440: c0 0c ff 7f ff ff 0b 00 80 5e 5e 2e 53 4d 42 5f .........^^.SMB_ 9450: 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a RWAB^^.SMB_CABR. 9460: 03 60 0a a4 0c ff ff ff df 0c 00 00 00 20 5b 21 .`........... [! 9470: 0a c8 5b 21 0a c8 14 41 06 47 45 4e 31 00 70 0a ..[!...A.GEN1.p. 9480: 01 54 47 4c 53 70 47 50 50 42 60 5e 5e 2e 53 4d .TGLSpGPPB`^^.SM 9490: 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 B_RWAB^^.SMB_CAB 94a0: 52 0a 03 60 0a a4 0c fe ff ff ff 0a 00 5e 5e 2e R..`.........^^. 94b0: 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 SMB_RWAB^^.SMB_C 94c0: 41 42 52 0a 03 60 0a a2 0c ff df ff ff 0b 00 20 ABR..`......... 94d0: 5b 21 0a c8 5b 21 0a c8 5b 82 29 58 50 44 56 08 [!..[!..[.)XPDV. 94e0: 5f 41 44 52 0a 00 5b 80 50 43 46 47 02 0a 00 0a _ADR..[.PCFG.... 94f0: 08 5b 81 10 50 43 46 47 03 44 56 49 44 20 50 43 .[..PCFG.DVID PC 9500: 4d 53 20 5b 82 45 57 53 50 42 31 08 5f 41 44 52 MS [.EWSPB1._ADR 9510: 0c 01 00 15 00 08 5f 50 52 57 12 06 02 0a 08 0a ......_PRW...... 9520: 04 14 4d 09 5f 50 52 54 00 a0 39 47 50 49 43 a4 ..M._PRT..9GPIC. 9530: 12 32 04 12 0b 04 0b ff ff 0a 00 0a 00 0a 11 12 .2.............. 9540: 0b 04 0b ff ff 0a 01 0a 00 0a 12 12 0b 04 0b ff ................ 9550: ff 0a 02 0a 00 0a 13 12 0b 04 0b ff ff 0a 03 0a ................ 9560: 00 0a 10 a1 4b 05 a4 12 47 05 04 12 14 04 0b ff ....K...G....... 9570: ff 0a 00 5e 5e 2e 4c 50 43 30 4c 4e 4b 42 0a 00 ...^^.LPC0LNKB.. 9580: 12 14 04 0b ff ff 0a 01 5e 5e 2e 4c 50 43 30 4c ........^^.LPC0L 9590: 4e 4b 43 0a 00 12 14 04 0b ff ff 0a 02 5e 5e 2e NKC..........^^. 95a0: 4c 50 43 30 4c 4e 4b 44 0a 00 12 14 04 0b ff ff LPC0LNKD........ 95b0: 0a 03 5e 5e 2e 4c 50 43 30 4c 4e 4b 41 0a 00 5b ..^^.LPC0LNKA..[ 95c0: 80 50 43 46 47 02 0a 00 0a 20 5b 81 18 50 43 46 .PCFG.... [..PCF 95d0: 47 03 44 56 49 44 20 50 43 4d 53 20 00 40 08 53 G.DVID PCMS .@.S 95e0: 42 55 53 20 5b 80 58 50 43 42 02 0a 58 0a 40 5b BUS [.XPCB..X.@[ 95f0: 81 39 58 50 43 42 00 00 40 08 4c 4b 43 4e 10 4c .9XPCB..@.LKCN.L 9600: 4b 53 54 10 00 30 00 03 50 53 44 43 01 00 02 50 KST..0..PSDC...P 9610: 53 44 53 01 00 01 48 50 43 53 01 00 37 50 4d 45 SDS...HPCS..7PME 9620: 53 01 00 4f 06 54 47 4c 53 04 14 0f 47 50 50 42 S..O.TGLS...GPPB 9630: 00 a4 7b 5f 41 44 52 0a 07 00 14 48 30 47 48 50 ..{_ADR....H0GHP 9640: 53 02 70 47 50 50 42 60 a0 4e 13 93 68 0a 00 a0 S.pGPPB`.N..h... 9650: 4c 04 93 60 0a 00 5e 5e 2e 53 4d 42 5f 52 57 41 L..`..^^.SMB_RWA 9660: 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 06 0a 00 B^^.SMB_CABR.... 9670: 0a c0 0c ff ef ff ff 0a 00 5e 5e 2e 53 4d 42 5f .........^^.SMB_ 9680: 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a RWAB^^.SMB_CABR. 9690: 01 0a 00 0a 65 0c fe fe ff ff 0a 00 a0 4c 04 93 ....e........L.. 96a0: 60 0a 01 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e `..^^.SMB_RWAB^^ 96b0: 2e 53 4d 42 5f 43 41 42 52 0a 06 0a 00 0a c0 0c .SMB_CABR....... 96c0: ff df ff ff 0a 00 5e 5e 2e 53 4d 42 5f 52 57 41 ......^^.SMB_RWA 96d0: 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 01 0a 00 B^^.SMB_CABR.... 96e0: 0a 65 0c fd fd ff ff 0a 00 a0 4c 04 93 60 0a 02 .e........L..`.. 96f0: 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d ^^.SMB_RWAB^^.SM 9700: 42 5f 43 41 42 52 0a 06 0a 00 0a c0 0c ff bf ff B_CABR.......... 9710: ff 0a 00 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e ...^^.SMB_RWAB^^ 9720: 2e 53 4d 42 5f 43 41 42 52 0a 01 0a 00 0a 65 0c .SMB_CABR.....e. 9730: fb fb ff ff 0a 00 a0 4c 04 93 60 0a 03 5e 5e 2e .......L..`..^^. 9740: 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 SMB_RWAB^^.SMB_C 9750: 41 42 52 0a 06 0a 00 0a c0 0c ff 7f ff ff 0a 00 ABR............. 9760: 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d ^^.SMB_RWAB^^.SM 9770: 42 5f 43 41 42 52 0a 01 0a 00 0a 65 0c f7 f7 ff B_CABR.....e.... 9780: ff 0a 00 5b 21 0a c8 a0 46 14 93 68 0a 01 a0 4e ...[!...F..h...N 9790: 04 93 60 0a 00 5e 5e 2e 53 4d 42 5f 52 57 41 42 ..`..^^.SMB_RWAB 97a0: 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 06 0a 00 0a ^^.SMB_CABR..... 97b0: c0 0c ff ef ff ff 0b 00 10 5e 5e 2e 53 4d 42 5f .........^^.SMB_ 97c0: 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a RWAB^^.SMB_CABR. 97d0: 01 0a 00 0a 65 0c fe fe ff ff 0b 01 01 a0 4e 04 ....e.........N. 97e0: 93 60 0a 01 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e .`..^^.SMB_RWAB^ 97f0: 5e 2e 53 4d 42 5f 43 41 42 52 0a 06 0a 00 0a c0 ^.SMB_CABR...... 9800: 0c ff df ff ff 0b 00 20 5e 5e 2e 53 4d 42 5f 52 ....... ^^.SMB_R 9810: 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 01 WAB^^.SMB_CABR.. 9820: 0a 00 0a 65 0c fd fd ff ff 0b 02 02 a0 4e 04 93 ...e.........N.. 9830: 60 0a 02 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e `..^^.SMB_RWAB^^ 9840: 2e 53 4d 42 5f 43 41 42 52 0a 06 0a 00 0a c0 0c .SMB_CABR....... 9850: ff bf ff ff 0b 00 40 5e 5e 2e 53 4d 42 5f 52 57 ......@^^.SMB_RW 9860: 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 01 0a AB^^.SMB_CABR... 9870: 00 0a 65 0c fb fb ff ff 0b 04 04 a0 4e 04 93 60 ..e.........N..` 9880: 0a 03 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e ..^^.SMB_RWAB^^. 9890: 53 4d 42 5f 43 41 42 52 0a 06 0a 00 0a c0 0c ff SMB_CABR........ 98a0: 7f ff ff 0b 00 80 5e 5e 2e 53 4d 42 5f 52 57 41 ......^^.SMB_RWA 98b0: 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 01 0a 00 B^^.SMB_CABR.... 98c0: 0a 65 0c f7 f7 ff ff 0b 08 08 5b 21 0a c8 a0 44 .e........[!...D 98d0: 07 93 68 0a 00 47 45 4e 32 70 5e 5e 2e 53 4d 42 ..h..GEN2p^^.SMB 98e0: 5f 52 44 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 _RDAB^^.SMB_CABR 98f0: 0a 03 60 0a a5 61 7b 61 0a ff 61 70 0b f4 01 62 ..`..a{a..ap...b 9900: a2 37 90 92 93 61 0a 10 94 62 0a 00 76 62 5b 21 .7...a...b..vb[! 9910: 0a c8 5b 21 0a c8 70 5e 5e 2e 53 4d 42 5f 52 44 ..[!..p^^.SMB_RD 9920: 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 03 60 AB^^.SMB_CABR..` 9930: 0a a5 61 7b 61 0a ff 61 a0 0a 92 93 61 0a 10 47 ..a{a..a....a..G 9940: 45 4e 31 14 49 0a 47 45 4e 32 00 70 0a 02 54 47 EN1.I.GEN2.p..TG 9950: 4c 53 70 47 50 50 42 60 5e 5e 2e 53 4d 42 5f 52 LSpGPPB`^^.SMB_R 9960: 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 03 WAB^^.SMB_CABR.. 9970: 60 0a a4 0c fe ff ff ff 0a 01 5e 5e 2e 53 4d 42 `.........^^.SMB 9980: 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 _RWAB^^.SMB_CABR 9990: 0a 03 60 0a a2 0c ff df ff ff 0b 00 20 5e 5e 2e ..`......... ^^. 99a0: 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 SMB_RWAB^^.SMB_C 99b0: 41 42 52 0a 03 60 0a c0 0c ff 7f ff ff 0b 00 80 ABR..`.......... 99c0: 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d ^^.SMB_RWAB^^.SM 99d0: 42 5f 43 41 42 52 0a 03 60 0a a4 0c ff ff ff df B_CABR..`....... 99e0: 0c 00 00 00 20 5b 21 0a c8 5b 21 0a c8 14 41 06 .... [!..[!...A. 99f0: 47 45 4e 31 00 70 0a 01 54 47 4c 53 70 47 50 50 GEN1.p..TGLSpGPP 9a00: 42 60 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e B`^^.SMB_RWAB^^. 9a10: 53 4d 42 5f 43 41 42 52 0a 03 60 0a a4 0c fe ff SMB_CABR..`..... 9a20: ff ff 0a 00 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e ....^^.SMB_RWAB^ 9a30: 5e 2e 53 4d 42 5f 43 41 42 52 0a 03 60 0a a2 0c ^.SMB_CABR..`... 9a40: ff df ff ff 0b 00 20 5b 21 0a c8 5b 21 0a c8 5b ...... [!..[!..[ 9a50: 82 29 58 50 44 56 08 5f 41 44 52 0a 00 5b 80 50 .)XPDV._ADR..[.P 9a60: 43 46 47 02 0a 00 0a 08 5b 81 10 50 43 46 47 03 CFG.....[..PCFG. 9a70: 44 56 49 44 20 50 43 4d 53 20 5b 82 45 57 53 50 DVID PCMS [.EWSP 9a80: 42 32 08 5f 41 44 52 0c 02 00 15 00 08 5f 50 52 B2._ADR......_PR 9a90: 57 12 06 02 0a 08 0a 04 14 4d 09 5f 50 52 54 00 W........M._PRT. 9aa0: a0 39 47 50 49 43 a4 12 32 04 12 0b 04 0b ff ff .9GPIC..2....... 9ab0: 0a 00 0a 00 0a 12 12 0b 04 0b ff ff 0a 01 0a 00 ................ 9ac0: 0a 13 12 0b 04 0b ff ff 0a 02 0a 00 0a 10 12 0b ................ 9ad0: 04 0b ff ff 0a 03 0a 00 0a 11 a1 4b 05 a4 12 47 ...........K...G 9ae0: 05 04 12 14 04 0b ff ff 0a 00 5e 5e 2e 4c 50 43 ..........^^.LPC 9af0: 30 4c 4e 4b 43 0a 00 12 14 04 0b ff ff 0a 01 5e 0LNKC..........^ 9b00: 5e 2e 4c 50 43 30 4c 4e 4b 44 0a 00 12 14 04 0b ^.LPC0LNKD...... 9b10: ff ff 0a 02 5e 5e 2e 4c 50 43 30 4c 4e 4b 41 0a ....^^.LPC0LNKA. 9b20: 00 12 14 04 0b ff ff 0a 03 5e 5e 2e 4c 50 43 30 .........^^.LPC0 9b30: 4c 4e 4b 42 0a 00 5b 80 50 43 46 47 02 0a 00 0a LNKB..[.PCFG.... 9b40: 20 5b 81 18 50 43 46 47 03 44 56 49 44 20 50 43 [..PCFG.DVID PC 9b50: 4d 53 20 00 40 08 53 42 55 53 20 5b 80 58 50 43 MS .@.SBUS [.XPC 9b60: 42 02 0a 58 0a 40 5b 81 39 58 50 43 42 00 00 40 B..X.@[.9XPCB..@ 9b70: 08 4c 4b 43 4e 10 4c 4b 53 54 10 00 30 00 03 50 .LKCN.LKST..0..P 9b80: 53 44 43 01 00 02 50 53 44 53 01 00 01 48 50 43 SDC...PSDS...HPC 9b90: 53 01 00 37 50 4d 45 53 01 00 4f 06 54 47 4c 53 S..7PMES..O.TGLS 9ba0: 04 14 0f 47 50 50 42 00 a4 7b 5f 41 44 52 0a 07 ...GPPB..{_ADR.. 9bb0: 00 14 48 30 47 48 50 53 02 70 47 50 50 42 60 a0 ..H0GHPS.pGPPB`. 9bc0: 4e 13 93 68 0a 00 a0 4c 04 93 60 0a 00 5e 5e 2e N..h...L..`..^^. 9bd0: 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 SMB_RWAB^^.SMB_C 9be0: 41 42 52 0a 06 0a 00 0a c0 0c ff ef ff ff 0a 00 ABR............. 9bf0: 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d ^^.SMB_RWAB^^.SM 9c00: 42 5f 43 41 42 52 0a 01 0a 00 0a 65 0c fe fe ff B_CABR.....e.... 9c10: ff 0a 00 a0 4c 04 93 60 0a 01 5e 5e 2e 53 4d 42 ....L..`..^^.SMB 9c20: 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 _RWAB^^.SMB_CABR 9c30: 0a 06 0a 00 0a c0 0c ff df ff ff 0a 00 5e 5e 2e .............^^. 9c40: 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 SMB_RWAB^^.SMB_C 9c50: 41 42 52 0a 01 0a 00 0a 65 0c fd fd ff ff 0a 00 ABR.....e....... 9c60: a0 4c 04 93 60 0a 02 5e 5e 2e 53 4d 42 5f 52 57 .L..`..^^.SMB_RW 9c70: 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 06 0a AB^^.SMB_CABR... 9c80: 00 0a c0 0c ff bf ff ff 0a 00 5e 5e 2e 53 4d 42 ..........^^.SMB 9c90: 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 _RWAB^^.SMB_CABR 9ca0: 0a 01 0a 00 0a 65 0c fb fb ff ff 0a 00 a0 4c 04 .....e........L. 9cb0: 93 60 0a 03 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e .`..^^.SMB_RWAB^ 9cc0: 5e 2e 53 4d 42 5f 43 41 42 52 0a 06 0a 00 0a c0 ^.SMB_CABR...... 9cd0: 0c ff 7f ff ff 0a 00 5e 5e 2e 53 4d 42 5f 52 57 .......^^.SMB_RW 9ce0: 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 01 0a AB^^.SMB_CABR... 9cf0: 00 0a 65 0c f7 f7 ff ff 0a 00 5b 21 0a c8 a0 46 ..e.......[!...F 9d00: 14 93 68 0a 01 a0 4e 04 93 60 0a 00 5e 5e 2e 53 ..h...N..`..^^.S 9d10: 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 MB_RWAB^^.SMB_CA 9d20: 42 52 0a 06 0a 00 0a c0 0c ff ef ff ff 0b 00 10 BR.............. 9d30: 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d ^^.SMB_RWAB^^.SM 9d40: 42 5f 43 41 42 52 0a 01 0a 00 0a 65 0c fe fe ff B_CABR.....e.... 9d50: ff 0b 01 01 a0 4e 04 93 60 0a 01 5e 5e 2e 53 4d .....N..`..^^.SM 9d60: 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 B_RWAB^^.SMB_CAB 9d70: 52 0a 06 0a 00 0a c0 0c ff df ff ff 0b 00 20 5e R............. ^ 9d80: 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 ^.SMB_RWAB^^.SMB 9d90: 5f 43 41 42 52 0a 01 0a 00 0a 65 0c fd fd ff ff _CABR.....e..... 9da0: 0b 02 02 a0 4e 04 93 60 0a 02 5e 5e 2e 53 4d 42 ....N..`..^^.SMB 9db0: 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 _RWAB^^.SMB_CABR 9dc0: 0a 06 0a 00 0a c0 0c ff bf ff ff 0b 00 40 5e 5e .............@^^ 9dd0: 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f .SMB_RWAB^^.SMB_ 9de0: 43 41 42 52 0a 01 0a 00 0a 65 0c fb fb ff ff 0b CABR.....e...... 9df0: 04 04 a0 4e 04 93 60 0a 03 5e 5e 2e 53 4d 42 5f ...N..`..^^.SMB_ 9e00: 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a RWAB^^.SMB_CABR. 9e10: 06 0a 00 0a c0 0c ff 7f ff ff 0b 00 80 5e 5e 2e .............^^. 9e20: 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 SMB_RWAB^^.SMB_C 9e30: 41 42 52 0a 01 0a 00 0a 65 0c f7 f7 ff ff 0b 08 ABR.....e....... 9e40: 08 5b 21 0a c8 a0 44 07 93 68 0a 00 47 45 4e 32 .[!...D..h..GEN2 9e50: 70 5e 5e 2e 53 4d 42 5f 52 44 41 42 5e 5e 2e 53 p^^.SMB_RDAB^^.S 9e60: 4d 42 5f 43 41 42 52 0a 03 60 0a a5 61 7b 61 0a MB_CABR..`..a{a. 9e70: ff 61 70 0b f4 01 62 a2 37 90 92 93 61 0a 10 94 .ap...b.7...a... 9e80: 62 0a 00 76 62 5b 21 0a c8 5b 21 0a c8 70 5e 5e b..vb[!..[!..p^^ 9e90: 2e 53 4d 42 5f 52 44 41 42 5e 5e 2e 53 4d 42 5f .SMB_RDAB^^.SMB_ 9ea0: 43 41 42 52 0a 03 60 0a a5 61 7b 61 0a ff 61 a0 CABR..`..a{a..a. 9eb0: 0a 92 93 61 0a 10 47 45 4e 31 14 49 0a 47 45 4e ...a..GEN1.I.GEN 9ec0: 32 00 70 0a 02 54 47 4c 53 70 47 50 50 42 60 5e 2.p..TGLSpGPPB`^ 9ed0: 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 ^.SMB_RWAB^^.SMB 9ee0: 5f 43 41 42 52 0a 03 60 0a a4 0c fe ff ff ff 0a _CABR..`........ 9ef0: 01 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 .^^.SMB_RWAB^^.S 9f00: 4d 42 5f 43 41 42 52 0a 03 60 0a a2 0c ff df ff MB_CABR..`...... 9f10: ff 0b 00 20 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e ... ^^.SMB_RWAB^ 9f20: 5e 2e 53 4d 42 5f 43 41 42 52 0a 03 60 0a c0 0c ^.SMB_CABR..`... 9f30: ff 7f ff ff 0b 00 80 5e 5e 2e 53 4d 42 5f 52 57 .......^^.SMB_RW 9f40: 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 03 60 AB^^.SMB_CABR..` 9f50: 0a a4 0c ff ff ff df 0c 00 00 00 20 5b 21 0a c8 ........... [!.. 9f60: 5b 21 0a c8 14 41 06 47 45 4e 31 00 70 0a 01 54 [!...A.GEN1.p..T 9f70: 47 4c 53 70 47 50 50 42 60 5e 5e 2e 53 4d 42 5f GLSpGPPB`^^.SMB_ 9f80: 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a RWAB^^.SMB_CABR. 9f90: 03 60 0a a4 0c fe ff ff ff 0a 00 5e 5e 2e 53 4d .`.........^^.SM 9fa0: 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 B_RWAB^^.SMB_CAB 9fb0: 52 0a 03 60 0a a2 0c ff df ff ff 0b 00 20 5b 21 R..`......... [! 9fc0: 0a c8 5b 21 0a c8 5b 82 29 58 50 44 56 08 5f 41 ..[!..[.)XPDV._A 9fd0: 44 52 0a 00 5b 80 50 43 46 47 02 0a 00 0a 08 5b DR..[.PCFG.....[ 9fe0: 81 10 50 43 46 47 03 44 56 49 44 20 50 43 4d 53 ..PCFG.DVID PCMS 9ff0: 20 5b 82 45 57 53 50 42 33 08 5f 41 44 52 0c 03 [.EWSPB3._ADR.. a000: 00 15 00 08 5f 50 52 57 12 06 02 0a 08 0a 04 14 ...._PRW........ a010: 4d 09 5f 50 52 54 00 a0 39 47 50 49 43 a4 12 32 M._PRT..9GPIC..2 a020: 04 12 0b 04 0b ff ff 0a 00 0a 00 0a 13 12 0b 04 ................ a030: 0b ff ff 0a 01 0a 00 0a 10 12 0b 04 0b ff ff 0a ................ a040: 02 0a 00 0a 11 12 0b 04 0b ff ff 0a 03 0a 00 0a ................ a050: 12 a1 4b 05 a4 12 47 05 04 12 14 04 0b ff ff 0a ..K...G......... a060: 00 5e 5e 2e 4c 50 43 30 4c 4e 4b 44 0a 00 12 14 .^^.LPC0LNKD.... a070: 04 0b ff ff 0a 01 5e 5e 2e 4c 50 43 30 4c 4e 4b ......^^.LPC0LNK a080: 41 0a 00 12 14 04 0b ff ff 0a 02 5e 5e 2e 4c 50 A..........^^.LP a090: 43 30 4c 4e 4b 42 0a 00 12 14 04 0b ff ff 0a 03 C0LNKB.......... a0a0: 5e 5e 2e 4c 50 43 30 4c 4e 4b 43 0a 00 5b 80 50 ^^.LPC0LNKC..[.P a0b0: 43 46 47 02 0a 00 0a 20 5b 81 18 50 43 46 47 03 CFG.... [..PCFG. a0c0: 44 56 49 44 20 50 43 4d 53 20 00 40 08 53 42 55 DVID PCMS .@.SBU a0d0: 53 20 5b 80 58 50 43 42 02 0a 58 0a 40 5b 81 39 S [.XPCB..X.@[.9 a0e0: 58 50 43 42 00 00 40 08 4c 4b 43 4e 10 4c 4b 53 XPCB..@.LKCN.LKS a0f0: 54 10 00 30 00 03 50 53 44 43 01 00 02 50 53 44 T..0..PSDC...PSD a100: 53 01 00 01 48 50 43 53 01 00 37 50 4d 45 53 01 S...HPCS..7PMES. a110: 00 4f 06 54 47 4c 53 04 14 0f 47 50 50 42 00 a4 .O.TGLS...GPPB.. a120: 7b 5f 41 44 52 0a 07 00 14 48 30 47 48 50 53 02 {_ADR....H0GHPS. a130: 70 47 50 50 42 60 a0 4e 13 93 68 0a 00 a0 4c 04 pGPPB`.N..h...L. a140: 93 60 0a 00 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e .`..^^.SMB_RWAB^ a150: 5e 2e 53 4d 42 5f 43 41 42 52 0a 06 0a 00 0a c0 ^.SMB_CABR...... a160: 0c ff ef ff ff 0a 00 5e 5e 2e 53 4d 42 5f 52 57 .......^^.SMB_RW a170: 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 01 0a AB^^.SMB_CABR... a180: 00 0a 65 0c fe fe ff ff 0a 00 a0 4c 04 93 60 0a ..e........L..`. a190: 01 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 .^^.SMB_RWAB^^.S a1a0: 4d 42 5f 43 41 42 52 0a 06 0a 00 0a c0 0c ff df MB_CABR......... a1b0: ff ff 0a 00 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e ....^^.SMB_RWAB^ a1c0: 5e 2e 53 4d 42 5f 43 41 42 52 0a 01 0a 00 0a 65 ^.SMB_CABR.....e a1d0: 0c fd fd ff ff 0a 00 a0 4c 04 93 60 0a 02 5e 5e ........L..`..^^ a1e0: 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f .SMB_RWAB^^.SMB_ a1f0: 43 41 42 52 0a 06 0a 00 0a c0 0c ff bf ff ff 0a CABR............ a200: 00 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 .^^.SMB_RWAB^^.S a210: 4d 42 5f 43 41 42 52 0a 01 0a 00 0a 65 0c fb fb MB_CABR.....e... a220: ff ff 0a 00 a0 4c 04 93 60 0a 03 5e 5e 2e 53 4d .....L..`..^^.SM a230: 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 B_RWAB^^.SMB_CAB a240: 52 0a 06 0a 00 0a c0 0c ff 7f ff ff 0a 00 5e 5e R.............^^ a250: 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f .SMB_RWAB^^.SMB_ a260: 43 41 42 52 0a 01 0a 00 0a 65 0c f7 f7 ff ff 0a CABR.....e...... a270: 00 5b 21 0a c8 a0 46 14 93 68 0a 01 a0 4e 04 93 .[!...F..h...N.. a280: 60 0a 00 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e `..^^.SMB_RWAB^^ a290: 2e 53 4d 42 5f 43 41 42 52 0a 06 0a 00 0a c0 0c .SMB_CABR....... a2a0: ff ef ff ff 0b 00 10 5e 5e 2e 53 4d 42 5f 52 57 .......^^.SMB_RW a2b0: 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 01 0a AB^^.SMB_CABR... a2c0: 00 0a 65 0c fe fe ff ff 0b 01 01 a0 4e 04 93 60 ..e.........N..` a2d0: 0a 01 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e ..^^.SMB_RWAB^^. a2e0: 53 4d 42 5f 43 41 42 52 0a 06 0a 00 0a c0 0c ff SMB_CABR........ a2f0: df ff ff 0b 00 20 5e 5e 2e 53 4d 42 5f 52 57 41 ..... ^^.SMB_RWA a300: 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 01 0a 00 B^^.SMB_CABR.... a310: 0a 65 0c fd fd ff ff 0b 02 02 a0 4e 04 93 60 0a .e.........N..`. a320: 02 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 .^^.SMB_RWAB^^.S a330: 4d 42 5f 43 41 42 52 0a 06 0a 00 0a c0 0c ff bf MB_CABR......... a340: ff ff 0b 00 40 5e 5e 2e 53 4d 42 5f 52 57 41 42 ....@^^.SMB_RWAB a350: 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 01 0a 00 0a ^^.SMB_CABR..... a360: 65 0c fb fb ff ff 0b 04 04 a0 4e 04 93 60 0a 03 e.........N..`.. a370: 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d ^^.SMB_RWAB^^.SM a380: 42 5f 43 41 42 52 0a 06 0a 00 0a c0 0c ff 7f ff B_CABR.......... a390: ff 0b 00 80 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e ....^^.SMB_RWAB^ a3a0: 5e 2e 53 4d 42 5f 43 41 42 52 0a 01 0a 00 0a 65 ^.SMB_CABR.....e a3b0: 0c f7 f7 ff ff 0b 08 08 5b 21 0a c8 a0 44 07 93 ........[!...D.. a3c0: 68 0a 00 47 45 4e 32 70 5e 5e 2e 53 4d 42 5f 52 h..GEN2p^^.SMB_R a3d0: 44 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 03 DAB^^.SMB_CABR.. a3e0: 60 0a a5 61 7b 61 0a ff 61 70 0b f4 01 62 a2 37 `..a{a..ap...b.7 a3f0: 90 92 93 61 0a 10 94 62 0a 00 76 62 5b 21 0a c8 ...a...b..vb[!.. a400: 5b 21 0a c8 70 5e 5e 2e 53 4d 42 5f 52 44 41 42 [!..p^^.SMB_RDAB a410: 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 03 60 0a a5 ^^.SMB_CABR..`.. a420: 61 7b 61 0a ff 61 a0 0a 92 93 61 0a 10 47 45 4e a{a..a....a..GEN a430: 31 14 49 0a 47 45 4e 32 00 70 0a 02 54 47 4c 53 1.I.GEN2.p..TGLS a440: 70 47 50 50 42 60 5e 5e 2e 53 4d 42 5f 52 57 41 pGPPB`^^.SMB_RWA a450: 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 03 60 0a B^^.SMB_CABR..`. a460: a4 0c fe ff ff ff 0a 01 5e 5e 2e 53 4d 42 5f 52 ........^^.SMB_R a470: 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 52 0a 03 WAB^^.SMB_CABR.. a480: 60 0a a2 0c ff df ff ff 0b 00 20 5e 5e 2e 53 4d `......... ^^.SM a490: 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f 43 41 42 B_RWAB^^.SMB_CAB a4a0: 52 0a 03 60 0a c0 0c ff 7f ff ff 0b 00 80 5e 5e R..`..........^^ a4b0: 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d 42 5f .SMB_RWAB^^.SMB_ a4c0: 43 41 42 52 0a 03 60 0a a4 0c ff ff ff df 0c 00 CABR..`......... a4d0: 00 00 20 5b 21 0a c8 5b 21 0a c8 14 41 06 47 45 .. [!..[!...A.GE a4e0: 4e 31 00 70 0a 01 54 47 4c 53 70 47 50 50 42 60 N1.p..TGLSpGPPB` a4f0: 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e 53 4d ^^.SMB_RWAB^^.SM a500: 42 5f 43 41 42 52 0a 03 60 0a a4 0c fe ff ff ff B_CABR..`....... a510: 0a 00 5e 5e 2e 53 4d 42 5f 52 57 41 42 5e 5e 2e ..^^.SMB_RWAB^^. a520: 53 4d 42 5f 43 41 42 52 0a 03 60 0a a2 0c ff df SMB_CABR..`..... a530: ff ff 0b 00 20 5b 21 0a c8 5b 21 0a c8 5b 82 29 .... [!..[!..[.) a540: 58 50 44 56 08 5f 41 44 52 0a 00 5b 80 50 43 46 XPDV._ADR..[.PCF a550: 47 02 0a 00 0a 08 5b 81 10 50 43 46 47 03 44 56 G.....[..PCFG.DV a560: 49 44 20 50 43 4d 53 20 5b 82 4d a2 56 47 41 5f ID PCMS [.M.VGA_ a570: 08 5f 41 44 52 0c 00 00 01 00 08 50 58 45 4e 0c ._ADR......PXEN. a580: 01 00 00 80 08 50 58 49 44 0c 00 00 03 00 08 50 .....PXID......P a590: 58 4d 58 0c 01 00 00 80 08 4c 43 44 54 0c 00 00 XMX......LCDT... a5a0: 00 80 08 44 53 43 54 0c 00 00 00 80 08 50 58 46 ...DSCT......PXF a5b0: 58 0c 00 00 00 80 08 50 58 44 59 0c 01 00 00 80 X......PXDY..... a5c0: 08 41 46 37 45 0c 00 00 00 80 08 42 4c 56 4c 11 .AF7E......BLVL. a5d0: 13 0a 10 00 20 30 40 50 58 60 70 80 90 a0 b0 c0 .... 0@PX`p..... a5e0: d0 e0 ff 08 44 4f 53 50 0a 00 14 09 5f 53 54 41 ....DOSP...._STA a5f0: 00 a4 0a 0f 14 0c 5f 44 4f 53 01 70 68 44 4f 53 ......_DOS.phDOS a600: 50 14 21 5f 44 4f 44 00 a4 12 19 05 0c 00 01 01 P.!_DOD......... a610: 00 0c 10 01 01 00 0b 00 02 0c 10 02 01 00 0c 20 ............... a620: 02 01 00 5b 82 4a 0d 4c 43 44 5f 14 0a 5f 41 44 ...[.J.LCD_.._AD a630: 52 00 a4 0b 10 01 14 2e 5f 42 43 4c 00 a4 12 26 R......._BCL...& a640: 12 0a 64 0a 1e 0a 06 0a 0c 0a 12 0a 18 0a 1e 0a ..d............. a650: 24 0a 2a 0a 30 0a 36 0a 3c 0a 42 0a 48 0a 4e 0a $.*.0.6.<.B.H.N. a660: 54 0a 5a 0a 64 14 49 09 5f 42 43 4d 01 a0 2b 93 T.Z.d.I._BCM..+. a670: 41 46 37 45 0c 01 00 00 80 78 72 77 68 0a 03 00 AF7E.....xrwh... a680: 0a 13 00 0a 14 61 60 70 83 88 42 4c 56 4c 60 00 .....a`p..BLVL`. a690: 63 5e 5e 5e 41 46 4e 37 63 a1 4b 04 5b 23 5e 5e c^^^AFN7c.K.[#^^ a6a0: 5e 2e 4c 50 43 30 50 53 4d 58 ff ff 70 0a 01 5e ^.LPC0PSMX..p..^ a6b0: 5e 5e 2e 4c 50 43 30 49 4e 46 30 70 68 5e 5e 5e ^^.LPC0INF0ph^^^ a6c0: 2e 4c 50 43 30 49 4e 46 31 5e 5e 5e 2e 4c 50 43 .LPC0INF1^^^.LPC a6d0: 30 50 48 53 31 0a 8a 5b 27 5e 5e 5e 2e 4c 50 43 0PHS1..['^^^.LPC a6e0: 30 50 53 4d 58 a0 0e 50 57 52 53 70 42 52 47 41 0PSMX..PWRSpBRGA a6f0: 42 52 54 4c a1 0a 70 42 52 47 44 42 52 54 4c 08 BRTL..pBRGDBRTL. a700: 41 54 49 42 11 04 0b 00 01 14 4a 09 41 54 49 46 ATIB......J.ATIF a710: 0a a0 0a 93 68 0a 00 a4 41 46 30 30 a0 0a 93 68 ....h...AF00...h a720: 0a 01 a4 41 46 30 31 a0 0a 93 68 0a 02 a4 41 46 ...AF01...h...AF a730: 30 32 a0 16 93 68 0a 03 a4 41 46 30 33 83 88 69 02...h...AF03..i a740: 0a 02 00 83 88 69 0a 04 00 a0 0a 93 68 0a 0f a4 .....i......h... a750: 41 46 31 35 a1 4f 04 8b 41 54 49 42 0a 00 53 53 AF15.O..ATIB..SS a760: 5a 45 8b 41 54 49 42 0a 02 56 45 52 4e 8a 41 54 ZE.ATIB..VERN.AT a770: 49 42 0a 04 4e 4d 53 4b 8a 41 54 49 42 0a 08 53 IB..NMSK.ATIB..S a780: 46 55 4e 70 0a 00 53 53 5a 45 70 0a 00 56 45 52 FUNp..SSZEp..VER a790: 4e 70 0a 00 4e 4d 53 4b 70 0a 00 53 46 55 4e a4 Np..NMSKp..SFUN. a7a0: 41 54 49 42 14 41 09 41 46 30 30 00 70 0a f0 50 ATIB.A.AF00.p..P a7b0: 38 30 48 8b 41 54 49 42 0a 00 53 53 5a 45 8b 41 80H.ATIB..SSZE.A a7c0: 54 49 42 0a 02 56 45 52 4e 8a 41 54 49 42 0a 04 TIB..VERN.ATIB.. a7d0: 4e 4d 53 4b 8a 41 54 49 42 0a 08 53 46 55 4e 70 NMSK.ATIB..SFUNp a7e0: 0a 0c 53 53 5a 45 70 0a 01 56 45 52 4e a0 12 93 ..SSZEp..VERN... a7f0: 50 58 45 4e 0c 00 00 00 80 70 0a 11 4e 4d 53 4b PXEN.....p..NMSK a800: a1 08 70 0a 51 4e 4d 53 4b a0 16 93 41 46 37 45 ..p.QNMSK...AF7E a810: 0c 01 00 00 80 7d 4e 4d 53 4b 0a 80 4e 4d 53 4b .....}NMSK..NMSK a820: 70 4e 4d 53 4b 4d 53 4b 4e 70 0b 07 40 53 46 55 pNMSKMSKNp..@SFU a830: 4e a4 41 54 49 42 08 4e 43 4f 44 0a 81 14 47 05 N.ATIB.NCOD...G. a840: 41 46 30 31 00 70 0a f1 50 38 30 48 8b 41 54 49 AF01.p..P80H.ATI a850: 42 0a 00 53 53 5a 45 8a 41 54 49 42 0a 02 56 4d B..SSZE.ATIB..VM a860: 53 4b 8a 41 54 49 42 0a 06 46 4c 47 53 70 0a 0b SK.ATIB..FLGSp.. a870: 56 4d 53 4b 70 0a 0a 53 53 5a 45 70 0a 03 56 4d VMSKp..SSZEp..VM a880: 53 4b 70 0a 01 46 4c 47 53 70 0a 81 4e 43 4f 44 SKp..FLGSp..NCOD a890: a4 41 54 49 42 08 50 53 42 52 11 07 0a 04 00 00 .ATIB.PSBR...... a8a0: 00 00 08 4d 53 4b 4e 0a 00 08 53 45 58 4d 0a 00 ...MSKN...SEXM.. a8b0: 08 53 54 48 47 0a 00 08 53 54 48 49 0a 00 08 53 .STHG...STHI...S a8c0: 46 50 47 0a 00 08 53 46 50 49 0a 00 08 53 53 50 FPG...SFPI...SSP a8d0: 53 0a 00 08 53 53 44 4d 0a 0a 08 53 43 44 59 0a S...SSDM...SCDY. a8e0: 00 08 53 41 43 54 11 0a 0a 07 01 02 08 80 03 09 ..SACT.......... a8f0: 81 14 4b 19 41 46 30 32 00 70 0a f2 50 38 30 48 ..K.AF02.p..P80H a900: 8d 50 53 42 52 0a 00 50 44 53 57 8d 50 53 42 52 .PSBR..PDSW.PSBR a910: 0a 01 50 45 58 4d 8d 50 53 42 52 0a 02 50 54 48 ..PEXM.PSBR..PTH a920: 52 8d 50 53 42 52 0a 03 50 46 50 53 8d 50 53 42 R.PSBR..PFPS.PSB a930: 52 0a 04 50 53 50 53 8d 50 53 42 52 0a 05 50 44 R..PSPS.PSBR..PD a940: 43 43 8d 50 53 42 52 0a 06 50 58 50 53 8d 50 53 CC.PSBR..PXPS.PS a950: 42 52 0a 07 50 42 52 54 8b 41 54 49 42 0a 00 53 BR..PBRT.ATIB..S a960: 53 5a 45 8a 41 54 49 42 0a 02 50 53 42 49 8c 41 SZE.ATIB..PSBI.A a970: 54 49 42 0a 06 45 58 50 4d 8c 41 54 49 42 0a 07 TIB..EXPM.ATIB.. a980: 54 48 52 4d 8c 41 54 49 42 0a 08 54 48 49 44 8c THRM.ATIB..THID. a990: 41 54 49 42 0a 09 46 50 57 52 8c 41 54 49 42 0a ATIB..FPWR.ATIB. a9a0: 0a 46 50 49 44 8c 41 54 49 42 0a 0b 53 50 57 52 .FPID.ATIB..SPWR a9b0: 8c 41 54 49 42 0a 0c 42 52 54 4c 70 0a 0d 53 53 .ATIB..BRTLp..SS a9c0: 5a 45 70 50 53 42 52 50 53 42 49 a0 12 50 44 53 ZEpPSBRPSBI..PDS a9d0: 57 70 0a 82 50 38 30 48 70 00 50 44 53 57 a0 1a Wp..P80Hp.PDSW.. a9e0: 50 45 58 4d 70 53 45 58 4d 45 58 50 4d 70 00 53 PEXMpSEXMEXPMp.S a9f0: 45 58 4d 70 00 50 45 58 4d a0 29 50 54 48 52 70 EXMp.PEXM.)PTHRp aa00: 53 54 48 47 54 48 52 4d 70 53 54 48 49 54 48 49 STHGTHRMpSTHITHI aa10: 44 70 00 53 54 48 47 70 00 53 54 48 49 70 00 50 Dp.STHGp.STHIp.P aa20: 54 48 52 a0 29 50 46 50 53 70 53 46 50 47 46 50 THR.)PFPSpSFPGFP aa30: 57 52 70 53 46 50 49 46 50 57 52 70 00 53 46 50 WRpSFPIFPWRp.SFP aa40: 47 70 00 53 46 50 49 70 00 50 46 50 53 a0 14 50 Gp.SFPIp.PFPS..P aa50: 53 50 53 70 53 53 50 53 53 50 57 52 70 00 50 53 SPSpSSPSSPWRp.PS aa60: 50 53 a0 12 50 58 50 53 70 0a a2 50 38 30 48 70 PS..PXPSp..P80Hp aa70: 00 50 58 50 53 a0 12 50 42 52 54 70 0a f7 50 38 .PXPS..PBRTp..P8 aa80: 30 48 70 00 50 42 52 54 a4 41 54 49 42 14 49 14 0Hp.PBRT.ATIB.I. aa90: 41 46 30 33 02 70 0a f3 50 38 30 48 8b 41 54 49 AF03.p..P80H.ATI aaa0: 42 0a 00 53 53 5a 45 8b 41 54 49 42 0a 02 53 53 B..SSZE.ATIB..SS aab0: 44 50 8b 41 54 49 42 0a 04 53 43 44 50 70 68 53 DP.ATIB..SCDPphS aac0: 53 44 50 70 69 53 43 44 50 08 4e 58 54 44 0a 06 SDPpiSCDP.NXTD.. aad0: 08 43 49 44 58 0a 06 70 53 53 44 50 61 7b 61 0a .CIDX..pSSDPa{a. aae0: 8b 61 70 53 43 44 50 62 a0 27 5b 12 5e 5e 5e 2e .apSCDPb.'[.^^^. aaf0: 4c 49 44 5f 5f 4c 49 44 64 7b 62 0c fe ff ff ff LID__LIDd{b..... ab00: 62 7d 62 5e 5e 5e 2e 4c 49 44 5f 5f 4c 49 44 62 b}b^^^.LID__LIDb ab10: a1 06 7d 62 0a 01 62 70 62 50 38 30 48 70 00 60 ..}b..bpbP80Hp.` ab20: a2 28 95 60 87 53 41 43 54 70 83 88 53 41 43 54 .(.`.SACTp..SACT ab30: 60 00 63 a0 11 93 63 61 70 60 43 49 44 58 70 87 `.c...cap`CIDXp. ab40: 53 41 43 54 60 a1 03 75 60 70 43 49 44 58 60 a2 SACT`..u`pCIDX`. ab50: 36 95 60 87 53 41 43 54 75 60 a0 0c 93 60 87 53 6.`.SACTu`...`.S ab60: 41 43 54 70 0a 00 60 70 83 88 53 41 43 54 60 00 ACTp..`p..SACT`. ab70: 63 a0 14 93 7b 63 62 00 63 70 60 4e 58 54 44 70 c...{cb.cp`NXTDp ab80: 87 53 41 43 54 60 a0 11 93 4e 58 54 44 87 53 41 .SACT`...NXTD.SA ab90: 43 54 70 00 53 53 44 50 a1 29 70 4e 58 54 44 60 CTp.SSDP.)pNXTD` aba0: 70 83 88 53 41 43 54 60 00 63 7b 53 53 44 50 0c p..SACT`.c{SSDP. abb0: 74 ff ff ff 53 53 44 50 7d 53 53 44 50 63 53 53 t...SSDP}SSDPcSS abc0: 44 50 70 0a 04 53 53 5a 45 70 53 53 44 50 50 38 DPp..SSZEpSSDPP8 abd0: 30 48 a4 41 54 49 42 14 2a 41 46 4e 30 08 a0 23 0H.ATIB.*AFN0..# abe0: 7b 4d 53 4b 4e 0a 01 00 8d 50 53 42 52 0a 00 50 {MSKN....PSBR..P abf0: 44 53 57 70 01 50 44 53 57 86 56 47 41 5f 4e 43 DSWp.PDSW.VGA_NC ac00: 4f 44 14 41 04 41 46 4e 33 0a a0 39 7b 4d 53 4b OD.A.AFN3..9{MSK ac10: 4e 0a 08 00 70 68 60 70 60 53 46 50 49 70 69 60 N...ph`p`SFPIpi` ac20: 70 7b 60 0a 03 60 53 46 50 47 8d 50 53 42 52 0a p{`..`SFPG.PSBR. ac30: 03 50 46 50 53 70 01 50 46 50 53 86 56 47 41 5f .PFPSp.PFPS.VGA_ ac40: 4e 43 4f 44 14 41 04 41 46 4e 34 09 a0 39 7b 4d NCOD.A.AFN4..9{M ac50: 53 4b 4e 0a 10 00 70 68 60 70 53 53 50 53 61 70 SKN...ph`pSSPSap ac60: 60 53 53 50 53 a0 04 93 60 61 a1 1b 8d 50 53 42 `SSPS...`a...PSB ac70: 52 0a 04 50 53 50 53 70 01 50 53 50 53 86 56 47 R..PSPSp.PSPS.VG ac80: 41 5f 4e 43 4f 44 14 2a 41 46 4e 35 08 a0 23 7b A_NCOD.*AFN5..#{ ac90: 4d 53 4b 4e 0a 20 00 8d 50 53 42 52 0a 05 50 44 MSKN. ..PSBR..PD aca0: 43 43 70 01 50 44 43 43 86 56 47 41 5f 4e 43 4f CCp.PDCC.VGA_NCO acb0: 44 14 2a 41 46 4e 36 08 a0 23 7b 4d 53 4b 4e 0a D.*AFN6..#{MSKN. acc0: 40 00 8d 50 53 42 52 0a 06 50 58 50 53 70 01 50 @..PSBR..PXPSp.P acd0: 58 50 53 86 56 47 41 5f 4e 43 4f 44 14 3b 41 46 XPS.VGA_NCOD.;AF ace0: 4e 37 09 a0 34 7b 4d 53 4b 4e 0a 80 00 8d 50 53 N7..4{MSKN....PS acf0: 42 52 0a 07 50 42 52 54 70 01 50 42 52 54 8c 41 BR..PBRTp.PBRT.A ad00: 54 49 42 0a 0c 42 52 54 4c 70 68 42 52 54 4c 86 TIB..BRTLphBRTL. ad10: 56 47 41 5f 4e 43 4f 44 14 43 05 41 46 31 35 00 VGA_NCOD.C.AF15. ad20: 70 0a ff 50 38 30 48 8b 41 54 49 42 0a 00 44 4e p..P80H.ATIB..DN ad30: 55 4d 8b 41 54 49 42 0a 02 44 53 5a 45 70 0a 08 UM.ATIB..DSZEp.. ad40: 44 53 5a 45 5e 5e 2e 4c 50 43 30 50 48 53 33 0a DSZE^^.LPC0PHS3. ad50: 8d 0a 0f 41 54 49 42 70 5e 5e 2e 4c 50 43 30 49 ...ATIBp^^.LPC0I ad60: 4e 46 4f 41 54 49 42 a4 41 54 49 42 08 41 54 30 NFOATIB.ATIB.AT0 ad70: 30 11 03 0a ff 08 41 54 30 31 11 03 0a 03 14 3f 0.....AT01.....? ad80: 41 54 43 53 0a a0 09 93 68 0a 00 41 54 43 30 a0 ATCS....h..ATC0. ad90: 09 93 68 0a 01 41 54 43 31 a0 0a 93 68 0a 02 41 ..h..ATC1...h..A ada0: 54 43 32 69 a0 09 93 68 0a 03 41 54 43 33 a0 0a TC2i...h..ATC3.. adb0: 93 68 0a 04 41 54 43 34 69 a4 41 54 30 30 14 3c .h..ATC4i.AT00.< adc0: 41 54 43 30 00 8b 41 54 30 30 0a 00 53 5a 5a 45 ATC0..AT00..SZZE add0: 8b 41 54 30 30 0a 02 49 4e 54 46 8a 41 54 30 30 .AT00..INTF.AT00 ade0: 0a 04 53 55 50 50 70 0a 08 53 5a 5a 45 70 0a 01 ..SUPPp..SZZEp.. adf0: 49 4e 54 46 70 0a 0f 53 55 50 50 14 42 05 41 54 INTFp..SUPP.B.AT ae00: 43 31 08 8b 41 54 30 30 0a 00 53 5a 5a 45 8a 41 C1..AT00..SZZE.A ae10: 54 30 30 0a 02 56 46 4d 4b 8a 41 54 30 30 0a 06 T00..VFMK.AT00.. ae20: 46 4c 41 47 5b 13 41 54 30 30 0a 30 0a 01 44 4f FLAG[.AT00.0..DO ae30: 43 4b 70 0a 0a 53 5a 5a 45 70 0a 01 56 46 4d 4b CKp..SZZEp..VFMK ae40: 70 0a 00 46 4c 41 47 70 0a 01 44 4f 43 4b 14 4b p..FLAGp..DOCK.K ae50: 08 41 54 43 32 09 5b 13 68 0a 10 0a 03 46 55 43 .ATC2.[.h....FUC ae60: 43 5b 13 68 0a 13 0a 06 44 45 56 56 8c 68 0a 03 C[.h....DEVV.h.. ae70: 42 55 53 53 8a 68 0a 04 56 46 4d 4b 8a 68 0a 06 BUSS.h..VFMK.h.. ae80: 46 4c 41 47 5b 13 68 0a 30 0a 01 41 44 56 43 5b FLAG[.h.0..ADVC[ ae90: 13 68 0a 31 0a 01 57 46 43 4d 8c 68 0a 08 52 51 .h.1..WFCM.h..RQ aea0: 53 54 8c 68 0a 09 50 46 52 51 8b 41 54 30 30 0a ST.h..PFRQ.AT00. aeb0: 00 53 5a 5a 45 8c 41 54 30 30 0a 02 52 45 54 56 .SZZE.AT00..RETV aec0: 70 0a 03 53 5a 5a 45 70 0a 01 52 45 54 56 70 41 p..SZZEp..RETVpA aed0: 4c 49 42 0a 02 68 41 54 30 30 14 4e 05 41 54 43 LIB..hAT00.N.ATC aee0: 33 08 8b 41 54 30 30 0a 00 53 5a 5a 45 8c 41 54 3..AT00..SZZE.AT aef0: 30 30 0a 02 52 45 54 56 8b 41 54 30 31 0a 00 53 00..RETV.AT01..S af00: 5a 5a 42 8c 41 54 30 31 0a 02 50 53 50 50 70 0a ZZB.AT01..PSPPp. af10: 03 53 5a 5a 45 70 0a 01 52 45 54 56 70 0a 03 53 .SZZEp..RETVp..S af20: 5a 5a 42 70 0a 01 50 53 50 50 70 41 4c 49 42 0a ZZBp..PSPPpALIB. af30: 03 41 54 30 31 41 54 30 30 14 4d 05 41 54 43 34 .AT01AT00.M.ATC4 af40: 09 5b 13 68 0a 10 0a 03 46 55 43 43 5b 13 68 0a .[.h....FUCC[.h. af50: 13 0a 06 44 45 56 56 8c 68 0a 03 42 55 53 53 8c ...DEVV.h..BUSS. af60: 68 0a 04 4e 55 4c 4e 8b 41 54 30 30 0a 00 53 5a h..NULN.AT00..SZ af70: 5a 45 8c 41 54 30 30 0a 02 4e 55 4c 4d 70 0a 03 ZE.AT00..NULMp.. af80: 53 5a 5a 45 70 0a 01 4e 55 4c 4d 70 41 4c 49 42 SZZEp..NULMpALIB af90: 0a 04 68 41 54 30 30 10 4d b8 56 47 41 5f 08 41 ..hAT00.M.VGA_.A afa0: 54 50 42 11 04 0b 00 01 08 44 53 49 44 0c ff ff TPB......DSID... afb0: ff ff 08 47 50 46 41 0c ff ff ff ff 08 48 53 49 ...GPFA......HSI afc0: 44 0c ff ff ff ff 08 43 4e 54 30 11 08 0a 05 05 D......CNT0..... afd0: 00 00 10 01 08 43 4e 54 31 11 08 0a 05 05 01 00 .....CNT1....... afe0: 00 01 08 43 4e 54 32 11 08 0a 05 07 03 00 10 02 ...CNT2......... aff0: 08 43 4e 54 33 11 08 0a 05 07 07 00 20 02 08 43 .CNT3....... ..C b000: 4e 54 34 11 08 0a 05 00 09 00 30 02 08 43 4e 54 NT4.......0..CNT b010: 35 11 08 0a 05 01 00 01 10 01 08 43 4e 54 36 11 5..........CNT6. b020: 08 0a 05 01 01 01 00 01 08 43 4e 54 37 11 08 0a .........CNT7... b030: 05 03 03 01 10 02 08 43 4e 54 38 11 08 0a 05 03 .......CNT8..... b040: 07 01 20 02 08 43 4e 54 39 11 08 0a 05 00 09 01 .. ..CNT9....... b050: 30 02 14 4d 0a 41 54 50 58 0a a0 0a 93 68 0a 00 0..M.ATPX....h.. b060: a4 50 58 30 30 a0 0a 93 68 0a 01 a4 50 58 30 31 .PX00...h...PX01 b070: a0 14 93 68 0a 02 50 58 30 32 83 88 69 0a 02 00 ...h..PX02..i... b080: a4 41 54 50 42 a0 14 93 68 0a 03 50 58 30 33 83 .ATPB...h..PX03. b090: 88 69 0a 02 00 a4 41 54 50 42 a0 14 93 68 0a 04 .i....ATPB...h.. b0a0: 50 58 30 34 83 88 69 0a 02 00 a4 41 54 50 42 a0 PX04..i....ATPB. b0b0: 0a 93 68 0a 08 a4 50 58 30 38 a0 0a 93 68 0a 09 ..h...PX08...h.. b0c0: a4 50 58 30 39 8b 41 54 50 42 0a 00 53 53 5a 45 .PX09.ATPB..SSZE b0d0: 8b 41 54 50 42 0a 02 56 45 52 4e 8a 41 54 50 42 .ATPB..VERN.ATPB b0e0: 0a 04 53 46 55 4e 70 0a 00 53 53 5a 45 70 0a 00 ..SFUNp..SSZEp.. b0f0: 56 45 52 4e 70 0a 00 53 46 55 4e a4 41 54 50 42 VERNp..SFUN.ATPB b100: 14 48 0f 50 58 30 30 00 70 0a e0 50 38 30 48 8b .H.PX00.p..P80H. b110: 41 54 50 42 0a 00 53 53 5a 45 8b 41 54 50 42 0a ATPB..SSZE.ATPB. b120: 02 56 45 52 4e 8a 41 54 50 42 0a 04 53 46 55 4e .VERN.ATPB..SFUN b130: 70 0a 08 53 53 5a 45 70 0a 01 56 45 52 4e a0 17 p..SSZEp..VERN.. b140: 93 50 58 45 4e 0c 00 00 00 80 70 0a 00 53 46 55 .PXEN.....p..SFU b150: 4e a4 41 54 50 42 a0 13 93 50 58 4d 58 0c 00 00 N.ATPB...PXMX... b160: 00 80 70 0b 8f 01 53 46 55 4e a1 09 70 0b 83 01 ..p...SFUN..p... b170: 53 46 55 4e a0 19 93 50 58 44 59 0c 01 00 00 80 SFUN...PXDY..... b180: 7b 53 46 55 4e 0c fd ff ff ff 53 46 55 4e a0 21 {SFUN.....SFUN.! b190: 90 93 50 58 44 59 0c 01 00 00 80 93 50 58 46 58 ..PXDY......PXFX b1a0: 0c 01 00 00 80 7d 53 46 55 4e 0a 02 53 46 55 4e .....}SFUN..SFUN b1b0: 70 5e 5e 2f 03 50 42 33 5f 56 47 41 5f 53 56 49 p^^/.PB3_VGA_SVI b1c0: 44 60 70 5e 5e 2f 03 50 42 33 5f 48 44 41 55 53 D`p^^/.PB3_HDAUS b1d0: 56 49 44 61 a0 0f 92 93 60 0c ff ff ff ff 70 60 VIDa....`.....p` b1e0: 44 53 49 44 a0 0f 92 93 61 0c ff ff ff ff 70 61 DSID....a.....pa b1f0: 48 53 49 44 a4 41 54 50 42 14 42 08 50 58 30 31 HSID.ATPB.B.PX01 b200: 00 70 0a e1 50 38 30 48 8b 41 54 50 42 0a 00 53 .p..P80H.ATPB..S b210: 53 5a 45 8a 41 54 50 42 0a 02 56 4d 53 4b 8a 41 SZE.ATPB..VMSK.A b220: 54 50 42 0a 06 46 4c 47 53 70 0a 0a 53 53 5a 45 TPB..FLGSp..SSZE b230: 70 0b ff 01 56 4d 53 4b a0 12 93 50 58 4d 58 0c p...VMSK...PXMX. b240: 00 00 00 80 70 0a 4b 46 4c 47 53 a1 1f 70 0a 00 ....p.KFLGS..p.. b250: 46 4c 47 53 a0 16 93 50 58 44 59 0c 01 00 00 80 FLGS...PXDY..... b260: 7d 46 4c 47 53 0a 80 46 4c 47 53 7d 46 4c 47 53 }FLGS..FLGS}FLGS b270: 0b 00 01 46 4c 47 53 a4 41 54 50 42 14 48 48 50 ...FLGS.ATPB.HHP b280: 58 30 32 01 8b 41 54 50 42 0a 00 53 53 5a 45 8c X02..ATPB..SSZE. b290: 41 54 50 42 0a 02 50 57 53 54 70 0a 03 53 53 5a ATPB..PWSTp..SSZ b2a0: 45 70 11 03 0a 05 67 8b 67 0a 00 53 5a 5a 45 5b Ep....g.g..SZZE[ b2b0: 13 67 0a 10 0a 03 46 55 43 43 5b 13 67 0a 13 0a .g....FUCC[.g... b2c0: 05 44 45 56 56 8c 67 0a 03 42 55 53 53 8c 67 0a .DEVV.g..BUSS.g. b2d0: 04 48 50 53 54 70 0a 05 53 5a 5a 45 70 0a 00 42 .HPSTp..SZZEp..B b2e0: 55 53 53 70 0a 00 46 55 43 43 70 11 03 0a 04 66 USSp..FUCCp....f b2f0: 8c 66 0a 02 48 50 4f 58 7b 68 0a 01 50 57 53 54 .f..HPOX{h..PWST b300: 08 48 50 4f 4b 0a 00 a0 46 26 50 57 53 54 70 0b .HPOK...F&PWSTp. b310: e2 11 50 38 30 48 7d 5e 5e 2e 53 4d 42 5f 4d 53 ..P80H}^^.SMB_MS b320: 30 34 0a f0 5e 5e 2e 53 4d 42 5f 4d 53 30 34 70 04..^^.SMB_MS04p b330: 00 5e 5e 2e 53 4d 42 5f 50 32 43 4f 70 00 5e 5e .^^.SMB_P2COp.^^ b340: 2e 53 4d 42 5f 50 32 43 45 70 00 5e 5e 2e 53 4d .SMB_P2CEp.^^.SM b350: 42 5f 50 32 44 4f 70 00 5e 5e 2e 53 4d 42 5f 50 B_P2DOp.^^.SMB_P b360: 32 44 45 5b 22 0a 0a 70 01 5e 5e 2e 53 4d 42 5f 2DE["..p.^^.SMB_ b370: 50 32 44 4f 70 00 5e 5e 2e 53 4d 42 5f 50 32 44 P2DOp.^^.SMB_P2D b380: 45 5b 22 0a 0a 70 01 5e 5e 2e 53 4d 42 5f 50 33 E["..p.^^.SMB_P3 b390: 37 4f 70 00 5e 5e 2e 53 4d 42 5f 50 33 37 45 5b 7Op.^^.SMB_P37E[ b3a0: 22 0a 0a 70 01 5e 5e 2e 53 4d 42 5f 4d 58 32 38 "..p.^^.SMB_MX28 b3b0: a2 0f 93 5e 5e 2e 53 4d 42 5f 50 31 43 49 0a 00 ...^^.SMB_P1CI.. b3c0: 70 01 5e 5e 2e 53 4d 42 5f 50 32 43 4f 70 00 5e p.^^.SMB_P2COp.^ b3d0: 5e 2e 53 4d 42 5f 50 32 43 45 70 0b e2 12 50 38 ^.SMB_P2CEp...P8 b3e0: 30 48 70 0a 00 48 50 4f 4b 5b 22 0a 64 5b 22 0a 0Hp..HPOK[".d[". b3f0: 64 70 0a 03 44 45 56 56 70 0a 01 48 50 53 54 70 dp..DEVVp..HPSTp b400: 41 4c 49 42 0a 06 67 66 5b 22 0a 14 70 0a 00 62 ALIB..gf["..p..b b410: a2 44 0d 95 62 0a 0f 70 01 5e 5e 2e 50 42 33 5f .D..b..p.^^.PB3_ b420: 50 53 44 43 70 0a 01 64 70 0a c8 65 a2 31 90 64 PSDCp..dp..e.1.d b430: 65 70 5e 5e 2e 50 42 33 5f 58 50 52 44 0a a5 60 ep^^.PB3_XPRD..` b440: 7b 60 0a 7f 60 a0 10 90 92 95 60 0a 10 92 93 60 {`..`.....`....` b450: 0a 7f 70 0a 00 64 a1 07 5b 22 0a 05 76 65 a0 40 ..p..d..["..ve.@ b460: 08 92 64 70 5e 5e 2e 50 42 33 5f 58 50 44 4c 65 ..dp^^.PB3_XPDLe b470: a0 13 65 5e 5e 2e 50 42 33 5f 58 50 52 54 5b 22 ..e^^.PB3_XPRT[" b480: 0a 05 75 62 a1 4a 05 79 0a 03 0a 03 47 50 46 41 ..ub.J.y....GPFA b490: 70 47 50 46 41 5e 5e 2e 4c 50 43 30 49 4e 46 4f pGPFA^^.LPC0INFO b4a0: 5e 5e 2e 4c 50 43 30 50 48 53 31 0a 87 70 0a 00 ^^.LPC0PHS1..p.. b4b0: 60 a0 12 93 5e 5e 2e 50 42 33 5f 58 50 52 32 ff `...^^.PB3_XPR2. b4c0: 70 0a 01 60 a0 0d 60 70 0a 01 48 50 4f 4b 70 0a p..`..`p..HPOKp. b4d0: 10 62 a1 0c 70 0a 00 48 50 4f 4b 70 0a 10 62 a1 .b..p..HPOKp..b. b4e0: 05 70 0a 10 62 a0 40 08 92 48 50 4f 4b 70 0b e2 .p..b.@..HPOKp.. b4f0: 13 50 38 30 48 70 5e 5e 2f 03 50 42 33 5f 56 47 .P80Hp^^/.PB3_VG b500: 41 5f 44 56 49 44 61 5b 22 0a 0a 70 0a 01 64 70 A_DVIDa["..p..dp b510: 0a 05 65 a2 3d 90 64 65 70 5e 5e 2e 50 42 33 5f ..e.=.dep^^.PB3_ b520: 58 50 52 44 0a a5 60 7b 60 0a 7f 60 a0 0a 92 94 XPRD..`{`..`.... b530: 60 0a 04 70 0a 00 64 a1 19 70 5e 5e 2f 03 50 42 `..p..d..p^^/.PB b540: 33 5f 56 47 41 5f 44 56 49 44 61 5b 22 0a 05 76 3_VGA_DVIDa["..v b550: 65 70 0a 03 44 45 56 56 70 0a 00 48 50 53 54 41 ep..DEVVp..HPSTA b560: 4c 49 42 0a 06 67 70 0b e2 14 50 38 30 48 a1 40 LIB..gp...P80H.@ b570: 13 70 0b e2 02 50 38 30 48 79 0a 03 0a 03 47 50 .p...P80Hy....GP b580: 46 41 70 47 50 46 41 5e 5e 2e 4c 50 43 30 49 4e FApGPFA^^.LPC0IN b590: 46 4f 5e 5e 2e 4c 50 43 30 50 48 53 31 0a 84 70 FO^^.LPC0PHS1..p b5a0: 00 5e 5e 2e 53 4d 42 5f 50 32 43 4f 70 00 5e 5e .^^.SMB_P2COp.^^ b5b0: 2e 53 4d 42 5f 50 32 43 45 70 00 5e 5e 2e 53 4d .SMB_P2CEp.^^.SM b5c0: 42 5f 50 33 37 4f 70 00 5e 5e 2e 53 4d 42 5f 50 B_P37Op.^^.SMB_P b5d0: 33 37 45 5b 22 0a 0a 70 00 5e 5e 2e 53 4d 42 5f 37E["..p.^^.SMB_ b5e0: 50 32 44 4f 70 00 5e 5e 2e 53 4d 42 5f 50 32 44 P2DOp.^^.SMB_P2D b5f0: 45 70 0b e2 03 50 38 30 48 70 01 5e 5e 2e 50 42 Ep...P80Hp.^^.PB b600: 33 5f 50 53 44 43 70 5e 5e 2f 03 50 42 33 5f 56 3_PSDCp^^/.PB3_V b610: 47 41 5f 44 56 49 44 61 5b 22 0a 0a 70 0a 01 64 GA_DVIDa["..p..d b620: 70 0a 05 65 a2 3d 90 64 65 70 5e 5e 2e 50 42 33 p..e.=.dep^^.PB3 b630: 5f 58 50 52 44 0a a5 60 7b 60 0a 7f 60 a0 0a 92 _XPRD..`{`..`... b640: 94 60 0a 04 70 0a 00 64 a1 19 70 5e 5e 2f 03 50 .`..p..d..p^^/.P b650: 42 33 5f 56 47 41 5f 44 56 49 44 61 5b 22 0a 05 B3_VGA_DVIDa[".. b660: 76 65 70 0a 03 44 45 56 56 70 0a 00 48 50 53 54 vep..DEVVp..HPST b670: 41 4c 49 42 0a 06 67 70 0a 02 48 50 4f 4b 7b 5e ALIB..gp..HPOK{^ b680: 5e 2e 53 4d 42 5f 4d 53 30 34 0a 0f 5e 5e 2e 53 ^.SMB_MS04..^^.S b690: 4d 42 5f 4d 53 30 34 70 0b e2 04 50 38 30 48 a0 MB_MS04p...P80H. b6a0: 45 06 48 50 4f 4b a0 47 05 90 93 48 50 4f 4b 0a E.HPOK.G...HPOK. b6b0: 01 92 93 44 53 49 44 0c ff ff ff ff 70 44 53 49 ...DSID.....pDSI b6c0: 44 61 70 61 5e 5e 2f 03 50 42 33 5f 56 47 41 5f Dapa^^/.PB3_VGA_ b6d0: 53 4d 49 44 5b 22 0a 0a 70 48 53 49 44 61 a0 1b SMID["..pHSIDa.. b6e0: 92 93 61 0c ff ff ff ff 70 61 5e 5e 2f 03 50 42 ..a.....pa^^/.PB b6f0: 33 5f 48 44 41 55 53 4d 49 44 5b 22 0a 0a 86 50 3_HDAUSMID["...P b700: 42 33 5f 0a 00 14 4c 07 50 58 30 33 01 8b 41 54 B3_...L.PX03..AT b710: 50 42 0a 00 53 53 5a 45 8b 41 54 50 42 0a 02 44 PB..SSZE.ATPB..D b720: 50 53 57 70 0a 04 53 53 5a 45 7b 68 0a 01 44 50 PSWp..SSZE{h..DP b730: 53 57 a0 29 44 50 53 57 70 0b e3 02 50 38 30 48 SW.)DPSWp...P80H b740: 70 0a 01 5e 5e 2e 53 4d 42 5f 50 30 36 4f 70 0a p..^^.SMB_P06Op. b750: 00 5e 5e 2e 53 4d 42 5f 50 30 36 45 a1 25 70 0b .^^.SMB_P06E.%p. b760: e3 01 50 38 30 48 70 0a 00 5e 5e 2e 53 4d 42 5f ..P80Hp..^^.SMB_ b770: 50 30 36 4f 70 0a 00 5e 5e 2e 53 4d 42 5f 50 30 P06Op..^^.SMB_P0 b780: 36 45 14 43 08 50 58 30 34 01 70 0a e4 50 38 30 6E.C.PX04.p..P80 b790: 48 8b 41 54 50 42 0a 00 53 53 5a 45 8b 41 54 50 H.ATPB..SSZE.ATP b7a0: 42 0a 02 49 43 53 57 70 0a 04 53 53 5a 45 7b 68 B..ICSWp..SSZE{h b7b0: 0a 01 49 43 53 57 a0 29 49 43 53 57 70 0b e4 02 ..ICSW.)ICSWp... b7c0: 50 38 30 48 70 0a 01 5e 5e 2e 53 4d 42 5f 50 31 P80Hp..^^.SMB_P1 b7d0: 34 4f 70 0a 00 5e 5e 2e 53 4d 42 5f 50 31 34 45 4Op..^^.SMB_P14E b7e0: a1 25 70 0b e4 01 50 38 30 48 70 0a 00 5e 5e 2e .%p...P80Hp..^^. b7f0: 53 4d 42 5f 50 31 34 4f 70 0a 00 5e 5e 2e 53 4d SMB_P14Op..^^.SM b800: 42 5f 50 31 34 45 14 4a 27 50 58 30 38 00 70 0a B_P14E.J'PX08.p. b810: e8 50 38 30 48 8b 41 54 50 42 0a 00 43 4e 55 4d .P80H.ATPB..CNUM b820: 8b 41 54 50 42 0a 02 43 53 53 5a 70 0a 0a 43 4e .ATPB..CSSZp..CN b830: 55 4d 70 0a 05 43 53 53 5a 5b 13 41 54 50 42 0a UMp..CSSZ[.ATPB. b840: 20 0a 28 43 54 49 30 70 43 4e 54 30 43 54 49 30 .(CTI0pCNT0CTI0 b850: 5b 13 41 54 50 42 0a 48 0a 28 43 54 49 31 70 43 [.ATPB.H.(CTI1pC b860: 4e 54 31 43 54 49 31 5b 13 41 54 50 42 0a 70 0a NT1CTI1[.ATPB.p. b870: 28 43 54 49 32 8c 43 4e 54 32 0a 00 46 4c 47 32 (CTI2.CNT2..FLG2 b880: a0 31 93 4c 43 44 54 0c 01 00 00 80 a0 12 93 44 .1.LCDT........D b890: 53 43 54 0c 01 00 00 80 70 0a 00 46 4c 47 32 a0 SCT.....p..FLG2. b8a0: 12 93 44 53 43 54 0c 02 00 00 80 70 0a 07 46 4c ..DSCT.....p..FL b8b0: 47 32 70 43 4e 54 32 43 54 49 32 5b 13 41 54 50 G2pCNT2CTI2[.ATP b8c0: 42 0a 98 0a 28 43 54 49 33 8c 43 4e 54 33 0a 00 B...(CTI3.CNT3.. b8d0: 46 4c 47 33 a0 12 93 4c 43 44 54 0c 00 00 00 80 FLG3...LCDT..... b8e0: 70 0a 07 46 4c 47 33 a0 25 93 4c 43 44 54 0c 01 p..FLG3.%.LCDT.. b8f0: 00 00 80 70 0a 00 46 4c 47 33 a0 12 93 44 53 43 ...p..FLG3...DSC b900: 54 0c 02 00 00 80 70 0a 00 46 4c 47 33 a0 25 93 T.....p..FLG3.%. b910: 4c 43 44 54 0c 02 00 00 80 70 0a 00 46 4c 47 33 LCDT.....p..FLG3 b920: a0 12 93 44 53 43 54 0c 02 00 00 80 70 0a 07 46 ...DSCT.....p..F b930: 4c 47 33 70 43 4e 54 33 43 54 49 33 5b 13 41 54 LG3pCNT3CTI3[.AT b940: 50 42 0a c0 0a 28 43 54 49 34 70 43 4e 54 34 43 PB...(CTI4pCNT4C b950: 54 49 34 5b 13 41 54 50 42 0a e8 0a 28 43 54 49 TI4[.ATPB...(CTI b960: 35 70 43 4e 54 35 43 54 49 35 5b 13 41 54 50 42 5pCNT5CTI5[.ATPB b970: 0b 10 01 0a 28 43 54 49 36 70 43 4e 54 36 43 54 ....(CTI6pCNT6CT b980: 49 36 5b 13 41 54 50 42 0b 38 01 0a 28 43 54 49 I6[.ATPB.8..(CTI b990: 37 8c 43 4e 54 37 0a 00 46 4c 47 37 a0 31 93 4c 7.CNT7..FLG7.1.L b9a0: 43 44 54 0c 01 00 00 80 a0 12 93 44 53 43 54 0c CDT........DSCT. b9b0: 01 00 00 80 70 0a 00 46 4c 47 37 a0 12 93 44 53 ....p..FLG7...DS b9c0: 43 54 0c 02 00 00 80 70 0a 07 46 4c 47 37 70 43 CT.....p..FLG7pC b9d0: 4e 54 37 43 54 49 37 5b 13 41 54 50 42 0b 60 01 NT7CTI7[.ATPB.`. b9e0: 0a 28 43 54 49 38 8c 43 4e 54 38 0a 00 46 4c 47 .(CTI8.CNT8..FLG b9f0: 38 a0 12 93 4c 43 44 54 0c 00 00 00 80 70 0a 07 8...LCDT.....p.. ba00: 46 4c 47 38 a0 12 93 4c 43 44 54 0c 01 00 00 80 FLG8...LCDT..... ba10: 70 0a 00 46 4c 47 38 a0 12 93 4c 43 44 54 0c 02 p..FLG8...LCDT.. ba20: 00 00 80 70 0a 00 46 4c 47 38 a0 12 93 44 53 43 ...p..FLG8...DSC ba30: 54 0c 02 00 00 80 70 0a 07 46 4c 47 38 70 43 4e T.....p..FLG8pCN ba40: 54 38 43 54 49 38 5b 13 41 54 50 42 0b 88 01 0a T8CTI8[.ATPB.... ba50: 28 43 54 49 39 8c 43 4e 54 39 0a 00 46 4c 47 39 (CTI9.CNT9..FLG9 ba60: a0 12 93 44 53 43 54 0c 02 00 00 80 70 0a 07 46 ...DSCT.....p..F ba70: 4c 47 39 70 43 4e 54 39 43 54 49 39 a4 41 54 50 LG9pCNT9CTI9.ATP ba80: 42 14 43 0a 50 58 30 39 00 70 0a e9 50 38 30 48 B.C.PX09.p..P80H ba90: 8b 41 54 50 42 0a 00 43 4e 55 4d 8b 41 54 50 42 .ATPB..CNUM.ATPB baa0: 0a 02 43 53 53 5a 70 0a 00 43 4e 55 4d 70 0a 00 ..CSSZp..CNUMp.. bab0: 43 53 53 5a 8c 41 54 50 42 0a 04 41 54 49 30 8c CSSZ.ATPB..ATI0. bac0: 41 54 50 42 0a 05 48 50 44 30 8c 41 54 50 42 0a ATPB..HPD0.ATPB. bad0: 06 44 44 43 30 70 0a 00 41 54 49 30 70 0a 00 48 .DDC0p..ATI0p..H bae0: 50 44 30 70 0a 00 44 44 43 30 8c 41 54 50 42 0a PD0p..DDC0.ATPB. baf0: 07 41 54 49 31 8c 41 54 50 42 0a 08 48 50 44 31 .ATI1.ATPB..HPD1 bb00: 8c 41 54 50 42 0a 09 44 44 43 31 70 0a 00 41 54 .ATPB..DDC1p..AT bb10: 49 31 70 0a 00 48 50 44 31 70 0a 00 44 44 43 31 I1p..HPD1p..DDC1 bb20: a4 41 54 50 42 10 48 0d 56 47 41 5f 5b 80 52 45 .ATPB.H.VGA_[.RE bb30: 56 44 00 0c 18 a0 2f 5e 0c 04 ec 00 00 5b 81 12 VD..../^.....[.. bb40: 52 45 56 44 00 53 52 4f 4d 20 56 52 4f 4d 80 00 REVD.SROM VROM.. bb50: 76 08 54 56 47 41 11 05 0b 00 ec 00 14 41 0a 41 v.TVGA.......A.A bb60: 54 52 4d 0a 72 68 69 60 a0 3d 92 94 60 53 52 4f TRM.rhi`.=..`SRO bb70: 4d 77 69 0a 08 61 77 68 0a 08 62 70 56 52 4f 4d Mwi..awh..bpVROM bb80: 54 56 47 41 5b 13 54 56 47 41 62 61 54 45 4d 50 TVGA[.TVGAbaTEMP bb90: 08 52 45 54 42 11 02 69 70 54 45 4d 50 52 45 54 .RETB..ipTEMPRET bba0: 42 a4 52 45 54 42 a1 47 05 a0 44 04 95 68 53 52 B.RETB.G..D..hSR bbb0: 4f 4d 74 53 52 4f 4d 68 63 77 63 0a 08 61 77 68 OMtSROMhcwc..awh bbc0: 0a 08 62 70 56 52 4f 4d 54 56 47 41 5b 13 54 56 ..bpVROMTVGA[.TV bbd0: 47 41 62 61 54 45 4d 5f 08 52 45 54 43 11 02 63 GAbaTEM_.RETC..c bbe0: 70 54 45 4d 5f 52 45 54 43 a4 52 45 54 43 a1 0f pTEM_RETC.RETC.. bbf0: 08 52 45 54 44 11 03 0a 01 a4 52 45 54 44 08 41 .RETD.....RETD.A bc00: 46 43 42 11 03 0a b8 08 43 41 4c 42 11 03 0a 05 FCB.....CALB.... bc10: 5b 82 84 92 01 41 46 44 5f 08 5f 48 49 44 0d 41 [....AFD_._HID.A bc20: 46 44 30 30 30 31 00 08 41 46 45 4e 0c 00 00 00 FD0001..AFEN.... bc30: 80 08 46 55 33 45 0c 00 00 00 80 08 48 44 44 30 ..FU3E......HDD0 bc40: 0c 00 00 00 80 08 4f 44 5a 50 0c 01 00 00 80 08 ......ODZP...... bc50: 44 41 54 33 11 11 0a 0e 0e 00 03 0c 03 00 00 00 DAT3............ bc60: 92 00 03 00 00 00 08 44 41 54 34 11 11 0a 0e 0e .......DAT4..... bc70: 00 11 0d 03 00 00 00 a5 00 02 00 00 00 08 44 41 ..............DA bc80: 54 35 11 11 0a 0e 0e 00 00 03 00 00 00 ff 00 00 T5.............. bc90: 00 00 00 00 08 44 41 54 36 11 11 0a 0e 0e 00 00 .....DAT6....... bca0: 0c 00 00 00 ff 00 00 00 00 00 00 08 44 41 54 37 ............DAT7 bcb0: 11 11 0a 0e 0e 00 03 0c 03 00 00 00 00 ff 00 00 ................ bcc0: 00 00 08 44 41 54 38 11 11 0a 0e 0e 00 00 02 00 ...DAT8......... bcd0: 00 00 ff 00 00 00 00 00 00 08 44 41 54 39 11 11 ..........DAT9.. bce0: 0a 0e 0e 00 ff ff 00 00 00 ff 00 00 00 00 00 00 ................ bcf0: 08 44 41 54 41 11 11 0a 0e 0e 00 ff ff 00 00 00 .DATA........... bd00: ff 00 00 00 00 00 00 08 44 41 54 42 11 11 0a 0e ........DATB.... bd10: 0e 00 ff ff 00 00 00 ff 00 00 00 00 00 00 08 44 ...............D bd20: 41 54 43 11 11 0a 0e 0e 00 01 04 00 00 00 ff 00 ATC............. bd30: 00 00 00 00 00 14 1a 5f 53 54 41 00 a0 0e 93 41 ......._STA....A bd40: 46 45 4e 0c 00 00 00 80 a4 0a 00 a1 04 a4 0a 0f FEN............. bd50: 14 4c 06 41 46 43 4d 03 7b 68 0a ff 68 a0 0a 93 .L.AFCM.{h..h... bd60: 68 0a 00 a4 41 46 43 30 a0 0a 93 68 0a 01 a4 41 h...AFC0...h...A bd70: 46 43 31 a0 0c 93 68 0a 02 a4 41 46 43 32 69 6a FC1...h...AFC2ij bd80: a1 3c 8b 41 46 43 42 0a 00 53 53 5a 45 8b 41 46 .<.AFCB..SSZE.AF bd90: 43 42 0a 02 56 45 52 4e 8a 41 46 43 42 0a 04 53 CB..VERN.AFCB..S bda0: 46 55 4e 70 0a 00 53 53 5a 45 70 0a 00 56 45 52 FUNp..SSZEp..VER bdb0: 4e 70 0a 00 53 46 55 4e a4 41 46 43 42 14 42 05 Np..SFUN.AFCB.B. bdc0: 41 46 43 30 00 70 0b 00 af 50 38 30 48 8b 41 46 AFC0.p...P80H.AF bdd0: 43 42 0a 00 53 53 5a 45 8b 41 46 43 42 0a 02 56 CB..SSZE.AFCB..V bde0: 45 52 4e 8a 41 46 43 42 0a 04 53 46 55 4e 70 0a ERN.AFCB..SFUNp. bdf0: 08 53 53 5a 45 70 0a 01 56 45 52 4e 70 0a 03 53 .SSZEp..VERNp..S be00: 46 55 4e 70 0b 00 ae 50 38 30 48 a4 41 46 43 42 FUNp...P80H.AFCB be10: 14 41 67 41 46 43 31 00 70 0b 01 af 50 38 30 48 .AgAFC1.p...P80H be20: 8b 41 46 43 42 0a 00 53 53 5a 45 8b 41 46 43 42 .AFCB..SSZE.AFCB be30: 0a 02 45 53 5a 30 8b 41 46 43 42 0a 04 43 43 44 ..ESZ0.AFCB..CCD be40: 30 8b 41 46 43 42 0a 06 45 42 55 30 8b 41 46 43 0.AFCB..EBU0.AFC be50: 42 0a 08 43 46 47 30 8b 41 46 43 42 0a 0a 50 43 B..CFG0.AFCB..PC be60: 41 30 8b 41 46 43 42 0a 0c 44 43 50 30 8b 41 46 A0.AFCB..DCP0.AF be70: 43 42 0a 0e 44 52 41 30 70 0a 0e 45 53 5a 30 70 CB..DRA0p..ESZ0p be80: 0a 02 45 42 55 30 70 0a 00 43 46 47 30 70 0a 88 ..EBU0p..CFG0p.. be90: 50 43 41 30 a0 2f 93 5e 5e 2e 53 41 54 41 56 49 PCA0./.^^.SATAVI bea0: 44 49 0c 22 10 00 78 70 0a 01 45 42 55 30 70 0b DI."..xp..EBU0p. beb0: 01 01 43 43 44 30 70 0a 00 44 43 50 30 70 0a 00 ..CCD0p..DCP0p.. bec0: 44 52 41 30 a0 28 93 5e 5e 2e 53 41 54 41 56 49 DRA0.(.^^.SATAVI bed0: 44 49 0c 22 10 01 78 70 0b 06 01 43 43 44 30 70 DI."..xp...CCD0p bee0: 0a 00 44 43 50 30 70 0a 00 44 52 41 30 a0 28 93 ..DCP0p..DRA0.(. bef0: 5e 5e 2e 53 41 54 41 56 49 44 49 0c 22 10 02 78 ^^.SATAVIDI."..x bf00: 70 0b 04 01 43 43 44 30 70 0a 00 44 43 50 30 70 p...CCD0p..DCP0p bf10: 0a 00 44 52 41 30 a0 28 93 5e 5e 2e 53 41 54 41 ..DRA0.(.^^.SATA bf20: 56 49 44 49 0c 22 10 03 78 70 0b 04 01 43 43 44 VIDI."..xp...CCD bf30: 30 70 0a 00 44 43 50 30 70 0a 00 44 52 41 30 a0 0p..DCP0p..DRA0. bf40: 28 93 5e 5e 2e 53 41 54 41 56 49 44 49 0c 22 10 (.^^.SATAVIDI.". bf50: 04 78 70 0b 06 01 43 43 44 30 70 0a 00 44 43 50 .xp...CCD0p..DCP bf60: 30 70 0a 00 44 52 41 30 8b 41 46 43 42 0a 10 45 0p..DRA0.AFCB..E bf70: 53 5a 31 8b 41 46 43 42 0a 12 43 43 44 31 8b 41 SZ1.AFCB..CCD1.A bf80: 46 43 42 0a 14 45 42 55 31 8b 41 46 43 42 0a 16 FCB..EBU1.AFCB.. bf90: 43 46 47 31 8b 41 46 43 42 0a 18 50 43 41 31 8b CFG1.AFCB..PCA1. bfa0: 41 46 43 42 0a 1a 44 43 50 31 8b 41 46 43 42 0a AFCB..DCP1.AFCB. bfb0: 1c 44 52 41 31 70 0a 0e 45 53 5a 31 70 0a 02 45 .DRA1p..ESZ1p..E bfc0: 42 55 31 70 0a 00 43 46 47 31 70 0a 88 50 43 41 BU1p..CFG1p..PCA bfd0: 31 a0 2f 93 5e 5e 2e 53 41 54 41 56 49 44 49 0c 1./.^^.SATAVIDI. bfe0: 22 10 00 78 70 0a 01 45 42 55 31 70 0b 01 01 43 "..xp..EBU1p...C bff0: 43 44 31 70 0a 01 44 43 50 31 70 0a 01 44 52 41 CD1p..DCP1p..DRA c000: 31 a0 28 93 5e 5e 2e 53 41 54 41 56 49 44 49 0c 1.(.^^.SATAVIDI. c010: 22 10 01 78 70 0b 06 01 43 43 44 31 70 0a 01 44 "..xp...CCD1p..D c020: 43 50 31 70 0a 00 44 52 41 31 a0 28 93 5e 5e 2e CP1p..DRA1.(.^^. c030: 53 41 54 41 56 49 44 49 0c 22 10 02 78 70 0b 04 SATAVIDI."..xp.. c040: 01 43 43 44 31 70 0a 00 44 43 50 31 70 0a 00 44 .CCD1p..DCP1p..D c050: 52 41 31 a0 28 93 5e 5e 2e 53 41 54 41 56 49 44 RA1.(.^^.SATAVID c060: 49 0c 22 10 03 78 70 0b 04 01 43 43 44 31 70 0a I."..xp...CCD1p. c070: 00 44 43 50 31 70 0a 00 44 52 41 31 a0 28 93 5e .DCP1p..DRA1.(.^ c080: 5e 2e 53 41 54 41 56 49 44 49 0c 22 10 04 78 70 ^.SATAVIDI."..xp c090: 0b 06 01 43 43 44 31 70 0a 01 44 43 50 31 70 0a ...CCD1p..DCP1p. c0a0: 00 44 52 41 31 8b 41 46 43 42 0a 1e 45 53 5a 32 .DRA1.AFCB..ESZ2 c0b0: 8b 41 46 43 42 0a 20 43 43 44 32 8b 41 46 43 42 .AFCB. CCD2.AFCB c0c0: 0a 22 45 42 55 32 8b 41 46 43 42 0a 24 43 46 47 ."EBU2.AFCB.$CFG c0d0: 32 8b 41 46 43 42 0a 26 50 43 41 32 8b 41 46 43 2.AFCB.&PCA2.AFC c0e0: 42 0a 28 44 43 50 32 8b 41 46 43 42 0a 2a 44 52 B.(DCP2.AFCB.*DR c0f0: 41 32 70 0a 0e 45 53 5a 32 70 0a 02 45 42 55 32 A2p..ESZ2p..EBU2 c100: 70 0a 00 43 46 47 32 70 0a 88 50 43 41 32 a0 2f p..CFG2p..PCA2./ c110: 93 5e 5e 2e 53 41 54 41 56 49 44 49 0c 22 10 00 .^^.SATAVIDI.".. c120: 78 70 0a 01 45 42 55 32 70 0b 01 01 43 43 44 32 xp..EBU2p...CCD2 c130: 70 0a 00 44 43 50 32 70 0a 01 44 52 41 32 a0 28 p..DCP2p..DRA2.( c140: 93 5e 5e 2e 53 41 54 41 56 49 44 49 0c 22 10 01 .^^.SATAVIDI.".. c150: 78 70 0b 06 01 43 43 44 32 70 0a 02 44 43 50 32 xp...CCD2p..DCP2 c160: 70 0a 00 44 52 41 32 a0 28 93 5e 5e 2e 53 41 54 p..DRA2.(.^^.SAT c170: 41 56 49 44 49 0c 22 10 02 78 70 0b 04 01 43 43 AVIDI."..xp...CC c180: 44 32 70 0a 00 44 43 50 32 70 0a 00 44 52 41 32 D2p..DCP2p..DRA2 c190: a0 28 93 5e 5e 2e 53 41 54 41 56 49 44 49 0c 22 .(.^^.SATAVIDI." c1a0: 10 03 78 70 0b 04 01 43 43 44 32 70 0a 00 44 43 ..xp...CCD2p..DC c1b0: 50 32 70 0a 00 44 52 41 32 a0 28 93 5e 5e 2e 53 P2p..DRA2.(.^^.S c1c0: 41 54 41 56 49 44 49 0c 22 10 04 78 70 0b 06 01 ATAVIDI."..xp... c1d0: 43 43 44 32 70 0a 02 44 43 50 32 70 0a 00 44 52 CCD2p..DCP2p..DR c1e0: 41 32 5b 13 41 46 43 42 0b 60 01 0a 70 49 44 58 A2[.AFCB.`..pIDX c1f0: 33 70 44 41 54 33 49 44 58 33 5b 13 41 46 43 42 3pDAT3IDX3[.AFCB c200: 0b d0 01 0a 70 49 44 58 34 70 44 41 54 34 49 44 ....pIDX4pDAT4ID c210: 58 34 5b 13 41 46 43 42 0b 40 02 0a 70 49 44 58 X4[.AFCB.@..pIDX c220: 35 8c 44 41 54 35 0a 07 42 55 53 35 a0 19 93 5e 5.DAT5..BUS5...^ c230: 5e 2e 56 47 41 5f 50 58 45 4e 0c 00 00 00 80 70 ^.VGA_PXEN.....p c240: 0a ff 42 55 53 35 a1 4e 05 a0 25 93 5e 5e 2e 56 ..BUS5.N..%.^^.V c250: 47 41 5f 50 58 49 44 5e 5e 2e 50 42 32 5f 5f 41 GA_PXID^^.PB2__A c260: 44 52 70 5e 5e 2e 50 42 32 5f 53 42 55 53 60 a0 DRp^^.PB2_SBUS`. c270: 25 93 5e 5e 2e 56 47 41 5f 50 58 49 44 5e 5e 2e %.^^.VGA_PXID^^. c280: 50 42 33 5f 5f 41 44 52 70 5e 5e 2e 50 42 33 5f PB3__ADRp^^.PB3_ c290: 53 42 55 53 60 7a 60 0a 08 60 7b 60 0a ff 60 70 SBUS`z`..`{`..`p c2a0: 60 42 55 53 35 70 44 41 54 35 49 44 58 35 5b 13 `BUS5pDAT5IDX5[. c2b0: 41 46 43 42 0b b0 02 0a 70 49 44 58 36 8c 44 41 AFCB....pIDX6.DA c2c0: 54 36 0a 07 42 55 53 36 70 5e 5e 2e 50 42 37 5f T6..BUS6p^^.PB7_ c2d0: 53 42 55 53 60 7a 60 0a 08 60 7b 60 0a ff 60 70 SBUS`z`..`{`..`p c2e0: 60 42 55 53 36 70 44 41 54 36 49 44 58 36 5b 13 `BUS6pDAT6IDX6[. c2f0: 41 46 43 42 0b 20 03 0a 70 49 44 58 37 a0 34 92 AFCB. ..pIDX7.4. c300: 93 46 55 33 45 0c 00 00 00 80 8c 44 41 54 37 0a .FU3E......DAT7. c310: 09 42 55 53 37 70 5e 5e 2e 53 50 42 31 53 42 55 .BUS7p^^.SPB1SBU c320: 53 60 7a 60 0a 08 60 7b 60 0a ff 60 70 60 42 55 S`z`..`{`..`p`BU c330: 53 37 70 44 41 54 37 49 44 58 37 5b 13 41 46 43 S7pDAT7IDX7[.AFC c340: 42 0b 90 03 0a 70 49 44 58 38 8c 44 41 54 38 0a B....pIDX8.DAT8. c350: 07 42 55 53 38 70 5e 5e 2e 50 42 34 5f 53 42 55 .BUS8p^^.PB4_SBU c360: 53 60 7a 60 0a 08 60 7b 60 0a ff 60 70 60 42 55 S`z`..`{`..`p`BU c370: 53 38 70 44 41 54 38 49 44 58 38 5b 13 41 46 43 S8pDAT8IDX8[.AFC c380: 42 0b 00 04 0a 70 49 44 58 39 8c 44 41 54 39 0a B....pIDX9.DAT9. c390: 07 42 55 53 39 70 5e 5e 2e 50 42 36 5f 53 42 55 .BUS9p^^.PB6_SBU c3a0: 53 60 7a 60 0a 08 60 7b 60 0a ff 60 70 60 42 55 S`z`..`{`..`p`BU c3b0: 53 39 70 44 41 54 39 49 44 58 39 5b 13 41 46 43 S9pDAT9IDX9[.AFC c3c0: 42 0b 70 04 0a 70 49 44 58 41 8c 44 41 54 41 0a B.p..pIDXA.DATA. c3d0: 07 42 55 53 41 70 5e 5e 2e 53 50 42 30 53 42 55 .BUSAp^^.SPB0SBU c3e0: 53 60 7a 60 0a 08 60 7b 60 0a ff 60 70 60 42 55 S`z`..`{`..`p`BU c3f0: 53 41 70 44 41 54 41 49 44 58 41 5b 13 41 46 43 SApDATAIDXA[.AFC c400: 42 0b e0 04 0a 70 49 44 58 42 8c 44 41 54 42 0a B....pIDXB.DATB. c410: 07 42 55 53 42 70 5e 5e 2e 50 42 35 5f 53 42 55 .BUSBp^^.PB5_SBU c420: 53 60 7a 60 0a 08 60 7b 60 0a ff 60 70 60 42 55 S`z`..`{`..`p`BU c430: 53 42 70 44 41 54 42 49 44 58 42 5b 13 41 46 43 SBpDATBIDXB[.AFC c440: 42 0b 50 05 0a 70 49 44 58 43 8c 44 41 54 43 0a B.P..pIDXC.DATC. c450: 07 42 55 53 43 7a 60 0a 08 60 7b 60 0a ff 60 70 .BUSCz`..`{`..`p c460: 60 42 55 53 43 70 44 41 54 43 49 44 58 43 70 0a `BUSCpDATCIDXCp. c470: b8 53 53 5a 45 70 0b 01 ae 50 38 30 48 a4 41 46 .SSZEp...P80H.AF c480: 43 42 14 83 0b 01 41 46 43 32 02 70 0b 02 af 50 CB....AFC2.p...P c490: 38 30 48 8a 41 46 43 42 0a 00 46 4c 41 47 8c 41 80H.AFCB..FLAG.A c4a0: 46 43 42 0a 04 50 57 53 54 8c 41 46 43 42 0a 05 FCB..PWST.AFCB.. c4b0: 44 49 4e 44 8b 43 41 4c 42 0a 00 53 5a 5a 45 5b DIND.CALB..SZZE[ c4c0: 13 43 41 4c 42 0a 10 0a 03 46 55 43 43 5b 13 43 .CALB....FUCC[.C c4d0: 41 4c 42 0a 13 0a 05 44 45 56 56 5b 13 43 41 4c ALB....DEVV[.CAL c4e0: 42 0a 18 0a 08 42 55 53 53 8c 43 41 4c 42 0a 04 B....BUSS.CALB.. c4f0: 48 50 53 54 70 0a 05 53 5a 5a 45 7b 68 0a ff 50 HPSTp..SZZE{h..P c500: 57 53 54 7b 69 0a ff 44 49 4e 44 a0 44 18 93 44 WST{i..DIND.D..D c510: 49 4e 44 0a 00 a0 34 91 93 5e 5e 2e 53 41 54 41 IND...4..^^.SATA c520: 56 49 44 49 0c 22 10 02 78 93 5e 5e 2e 53 41 54 VIDI."..x.^^.SAT c530: 41 56 49 44 49 0c 22 10 03 78 7d 46 4c 41 47 0a AVIDI."..x}FLAG. c540: 80 46 4c 41 47 a4 46 4c 41 47 70 0a 01 5e 5e 2e .FLAG.FLAGp..^^. c550: 53 4d 42 5f 4d 58 35 37 70 0a 01 5e 5e 2e 53 4d SMB_MX57p..^^.SM c560: 42 5f 4d 31 37 30 a0 49 06 93 50 57 53 54 0a 00 B_M170.I..PWST.. c570: a0 25 93 5e 5e 2e 53 41 54 41 56 49 44 49 0c 22 .%.^^.SATAVIDI." c580: 10 00 78 86 5e 5e 2f 03 53 41 54 41 50 52 49 44 ..x.^^/.SATAPRID c590: 50 5f 44 30 0a 03 a0 32 91 93 5e 5e 2e 53 41 54 P_D0...2..^^.SAT c5a0: 41 56 49 44 49 0c 22 10 01 78 93 5e 5e 2e 53 41 AVIDI."..x.^^.SA c5b0: 54 41 56 49 44 49 0c 22 10 04 78 86 5e 5e 2e 53 TAVIDI."..x.^^.S c5c0: 41 54 41 50 52 49 44 0a 03 70 0a 00 46 4c 41 47 ATAPRID..p..FLAG c5d0: a0 46 0a 93 50 57 53 54 0a 01 70 0a 00 5e 5e 2e .F..PWST..p..^^. c5e0: 53 4d 42 5f 50 41 41 4f 70 0a 00 5e 5e 2e 53 4d SMB_PAAOp..^^.SM c5f0: 42 5f 50 41 41 45 70 0a 01 5e 5e 2e 53 4d 42 5f B_PAAEp..^^.SMB_ c600: 50 33 39 4f 70 0a 00 5e 5e 2e 53 4d 42 5f 50 33 P39Op..^^.SMB_P3 c610: 39 45 5b 22 0b e8 03 a0 25 93 5e 5e 2e 53 41 54 9E["....%.^^.SAT c620: 41 56 49 44 49 0c 22 10 00 78 86 5e 5e 2f 03 53 AVIDI."..x.^^/.S c630: 41 54 41 50 52 49 44 50 5f 44 30 0a 01 a0 32 91 ATAPRIDP_D0...2. c640: 93 5e 5e 2e 53 41 54 41 56 49 44 49 0c 22 10 01 .^^.SATAVIDI.".. c650: 78 93 5e 5e 2e 53 41 54 41 56 49 44 49 0c 22 10 x.^^.SATAVIDI.". c660: 04 78 86 5e 5e 2e 53 41 54 41 50 52 49 44 0a 01 .x.^^.SATAPRID.. c670: 70 0a 01 46 4c 41 47 a0 18 93 50 57 53 54 0a ff p..FLAG...PWST.. c680: 70 5e 5e 2e 53 4d 42 5f 50 33 39 4f 46 4c 41 47 p^^.SMB_P39OFLAG c690: a0 4a 3f 93 44 49 4e 44 0a 01 a0 34 91 93 5e 5e .J?.DIND...4..^^ c6a0: 2e 53 41 54 41 56 49 44 49 0c 22 10 02 78 93 5e .SATAVIDI."..x.^ c6b0: 5e 2e 53 41 54 41 56 49 44 49 0c 22 10 03 78 7d ^.SATAVIDI."..x} c6c0: 46 4c 41 47 0a 80 46 4c 41 47 a4 46 4c 41 47 70 FLAG..FLAG.FLAGp c6d0: 0a 01 5e 5e 2e 53 4d 42 5f 4d 58 35 33 70 0a 01 ..^^.SMB_MX53p.. c6e0: 5e 5e 2e 53 4d 42 5f 4d 31 37 30 a0 4e 19 93 4f ^^.SMB_M170.N..O c6f0: 44 5a 50 0c 00 00 00 80 a0 4d 09 93 50 57 53 54 DZP......M..PWST c700: 0a 00 a0 25 93 5e 5e 2e 53 41 54 41 56 49 44 49 ...%.^^.SATAVIDI c710: 0c 22 10 00 78 86 5e 5e 2f 03 53 41 54 41 50 52 ."..x.^^/.SATAPR c720: 54 31 4f 44 44 5f 0a 03 a0 46 06 91 93 5e 5e 2e T1ODD_...F...^^. c730: 53 41 54 41 56 49 44 49 0c 22 10 01 78 93 5e 5e SATAVIDI."..x.^^ c740: 2e 53 41 54 41 56 49 44 49 0c 22 10 04 78 a0 16 .SATAVIDI."..x.. c750: 93 48 44 44 30 0a 01 86 5e 5e 2e 53 41 54 41 50 .HDD0...^^.SATAP c760: 52 54 31 0a 03 a1 29 a0 17 92 95 54 50 4f 53 0a RT1...)....TPOS. c770: 50 86 5e 5e 2e 53 41 54 41 50 52 54 31 0a 03 a1 P.^^.SATAPRT1... c780: 0f 86 5e 5e 2e 53 41 54 41 50 52 49 44 0a 03 70 ..^^.SATAPRID..p c790: 0a 00 46 4c 41 47 a0 4a 0d 93 50 57 53 54 0a 01 ..FLAG.J..PWST.. c7a0: 70 0a 00 5e 5e 2e 53 4d 42 5f 50 41 41 4f 70 0a p..^^.SMB_PAAOp. c7b0: 00 5e 5e 2e 53 4d 42 5f 50 41 41 45 70 0a 01 5e .^^.SMB_PAAEp..^ c7c0: 5e 2e 53 4d 42 5f 50 33 39 4f 70 0a 00 5e 5e 2e ^.SMB_P39Op..^^. c7d0: 53 4d 42 5f 50 33 39 45 5b 22 0b e8 03 a0 25 93 SMB_P39E["....%. c7e0: 5e 5e 2e 53 41 54 41 56 49 44 49 0c 22 10 00 78 ^^.SATAVIDI."..x c7f0: 86 5e 5e 2f 03 53 41 54 41 50 52 54 31 4f 44 44 .^^/.SATAPRT1ODD c800: 5f 0a 01 a0 46 06 91 93 5e 5e 2e 53 41 54 41 56 _...F...^^.SATAV c810: 49 44 49 0c 22 10 01 78 93 5e 5e 2e 53 41 54 41 IDI."..x.^^.SATA c820: 56 49 44 49 0c 22 10 04 78 a0 16 93 48 44 44 30 VIDI."..x...HDD0 c830: 0a 01 86 5e 5e 2e 53 41 54 41 50 52 54 31 0a 01 ...^^.SATAPRT1.. c840: a1 29 a0 17 92 95 54 50 4f 53 0a 50 86 5e 5e 2e .)....TPOS.P.^^. c850: 53 41 54 41 50 52 54 31 0a 01 a1 0f 86 5e 5e 2e SATAPRT1.....^^. c860: 53 41 54 41 50 52 49 44 0a 01 70 0a 01 46 4c 41 SATAPRID..p..FLA c870: 47 a0 18 93 50 57 53 54 0a ff 70 5e 5e 2e 53 4d G...PWST..p^^.SM c880: 42 5f 50 33 35 4f 46 4c 41 47 a1 40 20 a0 32 93 B_P35OFLAG.@ .2. c890: 5e 5e 2e 53 41 54 41 56 49 44 49 0c 22 10 04 78 ^^.SATAVIDI."..x c8a0: 70 5e 5e 2e 53 4d 42 5f 50 33 35 4f 46 4c 41 47 p^^.SMB_P35OFLAG c8b0: 7d 46 4c 41 47 0a c0 46 4c 41 47 a4 46 4c 41 47 }FLAG..FLAG.FLAG c8c0: a0 45 09 93 50 57 53 54 0a 00 a0 25 93 5e 5e 2e .E..PWST...%.^^. c8d0: 53 41 54 41 56 49 44 49 0c 22 10 00 78 86 5e 5e SATAVIDI."..x.^^ c8e0: 2f 03 53 41 54 41 4f 44 44 5a 4f 44 44 5f 0a 03 /.SATAODDZODD_.. c8f0: a0 4e 05 93 5e 5e 2e 53 41 54 41 56 49 44 49 0c .N..^^.SATAVIDI. c900: 22 10 01 78 a0 1b 93 48 44 44 30 0a 01 86 5e 5e "..x...HDD0...^^ c910: 2f 03 53 41 54 41 4f 44 44 5a 4f 44 44 5f 0a 03 /.SATAODDZODD_.. c920: a1 2e a0 1c 92 95 54 50 4f 53 0a 50 86 5e 5e 2f ......TPOS.P.^^/ c930: 03 53 41 54 41 4f 44 44 5a 4f 44 44 5f 0a 03 a1 .SATAODDZODD_... c940: 0f 86 5e 5e 2e 53 41 54 41 50 52 49 44 0a 03 70 ..^^.SATAPRID..p c950: 0a 00 46 4c 41 47 a0 42 0d 93 50 57 53 54 0a 01 ..FLAG.B..PWST.. c960: 70 0a 00 5e 5e 2e 53 4d 42 5f 50 41 41 4f 70 0a p..^^.SMB_PAAOp. c970: 00 5e 5e 2e 53 4d 42 5f 50 41 41 45 70 0a 01 5e .^^.SMB_PAAEp..^ c980: 5e 2e 53 4d 42 5f 50 33 35 4f 70 0a 00 5e 5e 2e ^.SMB_P35Op..^^. c990: 53 4d 42 5f 50 33 35 45 5b 22 0b e8 03 a0 25 93 SMB_P35E["....%. c9a0: 5e 5e 2e 53 41 54 41 56 49 44 49 0c 22 10 00 78 ^^.SATAVIDI."..x c9b0: 86 5e 5e 2f 03 53 41 54 41 4f 44 44 5a 4f 44 44 .^^/.SATAODDZODD c9c0: 5f 0a 01 a0 4e 05 93 5e 5e 2e 53 41 54 41 56 49 _...N..^^.SATAVI c9d0: 44 49 0c 22 10 01 78 a0 1b 93 48 44 44 30 0a 01 DI."..x...HDD0.. c9e0: 86 5e 5e 2f 03 53 41 54 41 4f 44 44 5a 4f 44 44 .^^/.SATAODDZODD c9f0: 5f 0a 01 a1 2e a0 1c 92 95 54 50 4f 53 0a 50 86 _........TPOS.P. ca00: 5e 5e 2f 03 53 41 54 41 4f 44 44 5a 4f 44 44 5f ^^/.SATAODDZODD_ ca10: 0a 01 a1 0f 86 5e 5e 2e 53 41 54 41 50 52 49 44 .....^^.SATAPRID ca20: 0a 01 70 0a 01 46 4c 41 47 a0 41 06 93 50 57 53 ..p..FLAG.A..PWS ca30: 54 0a ff 70 5e 5e 2e 53 4d 42 5f 50 33 35 4f 46 T..p^^.SMB_P35OF ca40: 4c 41 47 a0 2f 91 93 5e 5e 2e 53 41 54 41 56 49 LAG./..^^.SATAVI ca50: 44 49 0c 22 10 00 78 93 5e 5e 2e 53 41 54 41 56 DI."..x.^^.SATAV ca60: 49 44 49 0c 22 10 01 78 7b 46 4c 41 47 0a 7f 46 IDI."..x{FLAG..F ca70: 4c 41 47 a1 0c 7d 46 4c 41 47 0a 80 46 4c 41 47 LAG..}FLAG..FLAG ca80: 7d 46 4c 41 47 0a 40 46 4c 41 47 a0 45 1a 93 44 }FLAG.@FLAG.E..D ca90: 49 4e 44 0a 02 a0 34 91 93 5e 5e 2e 53 41 54 41 IND...4..^^.SATA caa0: 56 49 44 49 0c 22 10 02 78 93 5e 5e 2e 53 41 54 VIDI."..x.^^.SAT cab0: 41 56 49 44 49 0c 22 10 03 78 7d 46 4c 41 47 0a AVIDI."..x}FLAG. cac0: 80 46 4c 41 47 a4 46 4c 41 47 70 0a 01 5e 5e 2e .FLAG.FLAGp..^^. cad0: 53 4d 42 5f 4d 58 35 38 70 0a 01 5e 5e 2e 53 4d SMB_MX58p..^^.SM cae0: 42 5f 4d 31 37 30 a0 49 06 93 50 57 53 54 0a 00 B_M170.I..PWST.. caf0: a0 25 93 5e 5e 2e 53 41 54 41 56 49 44 49 0c 22 .%.^^.SATAVIDI." cb00: 10 00 78 86 5e 5e 2f 03 53 41 54 41 50 52 49 44 ..x.^^/.SATAPRID cb10: 50 5f 44 31 0a 03 a0 32 91 93 5e 5e 2e 53 41 54 P_D1...2..^^.SAT cb20: 41 56 49 44 49 0c 22 10 01 78 93 5e 5e 2e 53 41 AVIDI."..x.^^.SA cb30: 54 41 56 49 44 49 0c 22 10 04 78 86 5e 5e 2e 53 TAVIDI."..x.^^.S cb40: 41 54 41 53 45 43 44 0a 03 70 0a 00 46 4c 41 47 ATASECD..p..FLAG cb50: a0 47 0c 93 50 57 53 54 0a 01 70 0a 00 5e 5e 2e .G..PWST..p..^^. cb60: 53 4d 42 5f 50 41 41 4f 70 0a 00 5e 5e 2e 53 4d SMB_PAAOp..^^.SM cb70: 42 5f 50 41 41 45 5b 22 0b e8 03 70 0a 01 5e 5e B_PAAE["...p..^^ cb80: 2e 53 4d 42 5f 50 33 35 4f 70 0a 00 5e 5e 2e 53 .SMB_P35Op..^^.S cb90: 4d 42 5f 50 33 35 45 5b 22 0b e8 03 70 0a 01 5e MB_P35E["...p..^ cba0: 5e 2e 53 4d 42 5f 50 41 41 4f 70 0a 00 5e 5e 2e ^.SMB_PAAOp..^^. cbb0: 53 4d 42 5f 50 41 41 45 a0 25 93 5e 5e 2e 53 41 SMB_PAAE.%.^^.SA cbc0: 54 41 56 49 44 49 0c 22 10 00 78 86 5e 5e 2f 03 TAVIDI."..x.^^/. cbd0: 53 41 54 41 50 52 49 44 50 5f 44 31 0a 01 a0 32 SATAPRIDP_D1...2 cbe0: 91 93 5e 5e 2e 53 41 54 41 56 49 44 49 0c 22 10 ..^^.SATAVIDI.". cbf0: 01 78 93 5e 5e 2e 53 41 54 41 56 49 44 49 0c 22 .x.^^.SATAVIDI." cc00: 10 04 78 86 5e 5e 2e 53 41 54 41 53 45 43 44 0a ..x.^^.SATASECD. cc10: 01 70 0a 01 46 4c 41 47 a0 18 93 50 57 53 54 0a .p..FLAG...PWST. cc20: ff 70 5e 5e 2e 53 4d 42 5f 50 33 35 4f 46 4c 41 .p^^.SMB_P35OFLA cc30: 47 a0 48 08 93 44 49 4e 44 0a 03 70 0a 01 5e 5e G.H..DIND..p..^^ cc40: 2e 53 4d 42 5f 4d 58 36 36 a0 29 93 50 57 53 54 .SMB_MX66.).PWST cc50: 0a 00 70 01 5e 5e 2e 53 4d 42 5f 50 34 32 4f 70 ..p.^^.SMB_P42Op cc60: 00 5e 5e 2e 53 4d 42 5f 50 34 32 45 70 0a 00 46 .^^.SMB_P42Ep..F cc70: 4c 41 47 a0 2d 93 50 57 53 54 0a 01 70 00 5e 5e LAG.-.PWST..p.^^ cc80: 2e 53 4d 42 5f 50 34 32 4f 70 00 5e 5e 2e 53 4d .SMB_P42Op.^^.SM cc90: 42 5f 50 34 32 45 5b 22 0a 28 70 0a 01 46 4c 41 B_P42E[".(p..FLA cca0: 47 a0 18 93 50 57 53 54 0a ff 70 5e 5e 2e 53 4d G...PWST..p^^.SM ccb0: 42 5f 50 34 32 4f 46 4c 41 47 a0 47 09 93 44 49 B_P42OFLAG.G..DI ccc0: 4e 44 0a 04 70 0a 01 5e 5e 2e 53 4d 42 5f 4d 58 ND..p..^^.SMB_MX ccd0: 30 37 a0 22 93 50 57 53 54 0a 00 86 5e 5e 2f 03 07.".PWST...^^/. cce0: 4f 48 43 34 52 48 55 42 50 52 54 32 0a 03 70 0a OHC4RHUBPRT2..p. ccf0: 00 46 4c 41 47 a0 43 04 93 50 57 53 54 0a 01 70 .FLAG.C..PWST..p cd00: 0a 01 5e 5e 2e 53 4d 42 5f 50 30 37 4f 70 0a 00 ..^^.SMB_P07Op.. cd10: 5e 5e 2e 53 4d 42 5f 50 30 37 45 5b 22 0a 28 86 ^^.SMB_P07E[".(. cd20: 5e 5e 2f 03 4f 48 43 34 52 48 55 42 50 52 54 32 ^^/.OHC4RHUBPRT2 cd30: 0a 01 70 0a 01 46 4c 41 47 a0 18 93 50 57 53 54 ..p..FLAG...PWST cd40: 0a ff 70 5e 5e 2e 53 4d 42 5f 50 30 37 4f 46 4c ..p^^.SMB_P07OFL cd50: 41 47 a0 4a 0b 93 44 49 4e 44 0a 05 a0 32 93 5e AG.J..DIND...2.^ cd60: 5e 2e 56 47 41 5f 50 58 45 4e 0c 00 00 00 80 70 ^.VGA_PXEN.....p cd70: 5e 5e 2e 53 4d 42 5f 50 32 44 4f 46 4c 41 47 7d ^^.SMB_P2DOFLAG} cd80: 46 4c 41 47 0a 80 46 4c 41 47 a4 46 4c 41 47 a0 FLAG..FLAG.FLAG. cd90: 1d 93 50 57 53 54 0a 00 86 5e 5e 2e 50 42 33 5f ..PWST...^^.PB3_ cda0: 56 47 41 5f 0a 03 70 0a 00 46 4c 41 47 a0 46 04 VGA_..p..FLAG.F. cdb0: 93 50 57 53 54 0a 01 a0 18 5e 5e 2e 53 4d 42 5f .PWST....^^.SMB_ cdc0: 50 32 44 4f 70 0a 01 46 4c 41 47 a4 46 4c 41 47 P2DOp..FLAG.FLAG cdd0: a1 23 5e 5e 2e 56 47 41 5f 50 58 30 32 0a 01 86 .#^^.VGA_PX02... cde0: 5e 5e 2e 50 42 33 5f 56 47 41 5f 0a 01 70 0a 01 ^^.PB3_VGA_..p.. cdf0: 46 4c 41 47 a0 18 93 50 57 53 54 0a ff 70 5e 5e FLAG...PWST..p^^ ce00: 2e 53 4d 42 5f 50 32 44 4f 46 4c 41 47 a0 4f 18 .SMB_P2DOFLAG.O. ce10: 93 44 49 4e 44 0a 06 70 0a 02 5e 5e 2e 53 4d 42 .DIND..p..^^.SMB ce20: 5f 4d 58 35 39 70 0a 01 5e 5e 2e 53 4d 42 5f 4d _MX59p..^^.SMB_M ce30: 58 32 37 a0 25 93 50 57 53 54 0a 00 86 5e 5e 2e X27.%.PWST...^^. ce40: 50 42 37 5f 58 50 44 56 0a 03 70 0a 00 46 4c 41 PB7_XPDV..p..FLA ce50: 47 70 0b 60 af 50 38 30 48 a0 4a 12 93 50 57 53 Gp.`.P80H.J..PWS ce60: 54 0a 01 70 0a 00 5e 5e 2e 53 4d 42 5f 50 31 42 T..p..^^.SMB_P1B ce70: 4f 70 0a 00 5e 5e 2e 53 4d 42 5f 50 31 42 45 5b Op..^^.SMB_P1BE[ ce80: 22 0a 28 70 0a 01 5e 5e 2e 53 4d 42 5f 50 33 42 ".(p..^^.SMB_P3B ce90: 4f 70 0a 00 5e 5e 2e 53 4d 42 5f 50 33 42 45 5b Op..^^.SMB_P3BE[ cea0: 22 0a 28 70 5e 5e 2e 53 4d 42 5f 4d 53 30 34 60 ".(p^^.SMB_MS04` ceb0: 7d 60 0a 0f 61 70 61 5e 5e 2e 53 4d 42 5f 4d 53 }`..apa^^.SMB_MS cec0: 30 34 5b 22 0a 28 70 0a 01 5e 5e 2e 53 4d 42 5f 04[".(p..^^.SMB_ ced0: 50 31 42 4f 70 0a 00 5e 5e 2e 53 4d 42 5f 50 31 P1BOp..^^.SMB_P1 cee0: 42 45 5b 22 0a 28 70 01 5e 5e 2e 53 4d 42 5f 50 BE[".(p.^^.SMB_P cef0: 32 39 48 70 01 5e 5e 2e 53 4d 42 5f 50 32 39 53 29Hp.^^.SMB_P29S cf00: 70 00 5e 5e 2e 53 4d 42 5f 50 32 39 55 5b 22 0a p.^^.SMB_P29U[". cf10: 28 70 0a 00 46 55 43 43 70 0a 07 44 45 56 56 70 (p..FUCCp..DEVVp cf20: 0a 00 42 55 53 53 70 0a 01 48 50 53 54 41 4c 49 ..BUSSp..HPSTALI cf30: 42 0a 06 43 41 4c 42 5b 22 0a 28 70 5e 5e 2f 03 B..CALB[".(p^^/. cf40: 50 42 37 5f 58 50 44 56 44 49 53 46 60 7b 60 0c PB7_XPDVDISF`{`. cf50: f9 ff ff ff 60 70 60 5e 5e 2f 03 50 42 37 5f 58 ....`p`^^/.PB7_X cf60: 50 44 56 44 49 53 46 86 5e 5e 2e 50 42 37 5f 58 PDVDISF.^^.PB7_X cf70: 50 44 56 0a 01 70 0a 01 46 4c 41 47 70 0b 61 af PDV..p..FLAGp.a. cf80: 50 38 30 48 a0 18 93 50 57 53 54 0a ff 70 5e 5e P80H...PWST..p^^ cf90: 2e 53 4d 42 5f 50 33 42 4f 46 4c 41 47 a0 47 0e .SMB_P3BOFLAG.G. cfa0: 93 44 49 4e 44 0a 07 70 0a 02 5e 5e 2e 53 4d 42 .DIND..p..^^.SMB cfb0: 5f 4d 32 30 30 a0 25 93 50 57 53 54 0a 00 86 5e _M200.%.PWST...^ cfc0: 5e 2e 53 50 42 31 58 50 44 56 0a 03 70 0a 00 46 ^.SPB1XPDV..p..F cfd0: 4c 41 47 70 0b 70 ae 50 38 30 48 a0 40 09 93 50 LAGp.p.P80H.@..P cfe0: 57 53 54 0a 01 70 0a 01 5e 5e 2e 53 4d 42 5f 50 WST..p..^^.SMB_P cff0: 43 38 4f 70 0a 00 5e 5e 2e 53 4d 42 5f 50 43 38 C8Op..^^.SMB_PC8 d000: 45 5b 22 0a 28 70 5e 5e 2e 53 4d 42 5f 4d 53 30 E[".(p^^.SMB_MS0 d010: 33 60 7d 60 0a f0 61 70 61 5e 5e 2e 53 4d 42 5f 3`}`..apa^^.SMB_ d020: 4d 53 30 33 70 01 5e 5e 2e 53 4d 42 5f 50 32 45 MS03p.^^.SMB_P2E d030: 48 70 01 5e 5e 2e 53 4d 42 5f 50 32 45 53 70 00 Hp.^^.SMB_P2ESp. d040: 5e 5e 2e 53 4d 42 5f 50 32 45 55 5b 22 0a 28 86 ^^.SMB_P2EU[".(. d050: 5e 5e 2e 53 50 42 31 58 50 44 56 0a 01 70 0a 01 ^^.SPB1XPDV..p.. d060: 46 4c 41 47 70 0b 71 ae 50 38 30 48 a0 18 93 50 FLAGp.q.P80H...P d070: 57 53 54 0a ff 70 5e 5e 2e 53 4d 42 5f 50 43 38 WST..p^^.SMB_PC8 d080: 4f 46 4c 41 47 a0 4d 0f 93 44 49 4e 44 0a 08 70 OFLAG.M..DIND..p d090: 0a 02 5e 5e 2e 53 4d 42 5f 4d 31 39 37 a0 1d 93 ..^^.SMB_M197... d0a0: 50 57 53 54 0a 00 86 5e 5e 2e 50 42 34 5f 58 50 PWST...^^.PB4_XP d0b0: 44 56 0a 03 70 0a 00 46 4c 41 47 a0 4e 0a 93 50 DV..p..FLAG.N..P d0c0: 57 53 54 0a 01 70 0a 01 5e 5e 2e 53 4d 42 5f 50 WST..p..^^.SMB_P d0d0: 43 35 4f 70 0a 00 5e 5e 2e 53 4d 42 5f 50 43 35 C5Op..^^.SMB_PC5 d0e0: 45 5b 22 0a c8 70 5e 5e 2e 53 4d 42 5f 4d 53 30 E["..p^^.SMB_MS0 d0f0: 31 60 7d 60 0a f0 61 70 61 5e 5e 2e 53 4d 42 5f 1`}`..apa^^.SMB_ d100: 4d 53 30 31 70 01 5e 5e 2e 53 4d 42 5f 50 33 46 MS01p.^^.SMB_P3F d110: 48 70 01 5e 5e 2e 53 4d 42 5f 50 33 46 53 70 00 Hp.^^.SMB_P3FSp. d120: 5e 5e 2e 53 4d 42 5f 50 33 46 55 5b 22 0a c8 70 ^^.SMB_P3FU["..p d130: 0a 00 46 55 43 43 70 0a 04 44 45 56 56 70 0a 00 ..FUCCp..DEVVp.. d140: 42 55 53 53 70 0a 01 48 50 53 54 41 4c 49 42 0a BUSSp..HPSTALIB. d150: 06 43 41 4c 42 86 5e 5e 2e 50 42 34 5f 58 50 44 .CALB.^^.PB4_XPD d160: 56 0a 01 70 0a 01 46 4c 41 47 a0 18 93 50 57 53 V..p..FLAG...PWS d170: 54 0a ff 70 5e 5e 2e 53 4d 42 5f 50 43 35 4f 46 T..p^^.SMB_PC5OF d180: 4c 41 47 a0 4e 12 93 44 49 4e 44 0a 09 70 0a 01 LAG.N..DIND..p.. d190: 5e 5e 2e 53 4d 42 5f 4d 31 37 36 a0 1d 93 50 57 ^^.SMB_M176...PW d1a0: 53 54 0a 00 86 5e 5e 2e 50 42 36 5f 58 50 44 56 ST...^^.PB6_XPDV d1b0: 0a 03 70 0a 00 46 4c 41 47 a0 42 0d 93 50 57 53 ..p..FLAG.B..PWS d1c0: 54 0a 01 5b 22 0a 28 70 0a 01 5e 5e 2e 53 4d 42 T..[".(p..^^.SMB d1d0: 5f 50 30 45 4f 70 0a 00 5e 5e 2e 53 4d 42 5f 50 _P0EOp..^^.SMB_P d1e0: 30 45 45 70 0a 00 5e 5e 2e 53 4d 42 5f 50 42 30 0EEp..^^.SMB_PB0 d1f0: 4f 70 0a 00 5e 5e 2e 53 4d 42 5f 50 42 30 45 5b Op..^^.SMB_PB0E[ d200: 22 0a c8 70 5e 5e 2e 53 4d 42 5f 4d 53 30 32 60 "..p^^.SMB_MS02` d210: 7d 60 0a 0f 61 70 61 5e 5e 2e 53 4d 42 5f 4d 53 }`..apa^^.SMB_MS d220: 30 32 5b 22 0a 28 70 01 5e 5e 2e 53 4d 42 5f 50 02[".(p.^^.SMB_P d230: 34 30 48 70 01 5e 5e 2e 53 4d 42 5f 50 34 30 53 40Hp.^^.SMB_P40S d240: 70 00 5e 5e 2e 53 4d 42 5f 50 34 30 55 5b 22 0a p.^^.SMB_P40U[". d250: c8 70 0a 00 46 55 43 43 70 0a 06 44 45 56 56 70 .p..FUCCp..DEVVp d260: 0a 00 42 55 53 53 70 0a 01 48 50 53 54 41 4c 49 ..BUSSp..HPSTALI d270: 42 0a 06 43 41 4c 42 86 5e 5e 2e 50 42 36 5f 58 B..CALB.^^.PB6_X d280: 50 44 56 0a 01 70 0a 01 46 4c 41 47 a0 25 93 50 PDV..p..FLAG.%.P d290: 57 53 54 0a ff 70 5e 5e 2e 53 4d 42 5f 50 42 30 WST..p^^.SMB_PB0 d2a0: 4f 60 7b 60 0a 01 60 7f 60 0a 01 60 70 60 46 4c O`{`..`.`..`p`FL d2b0: 41 47 a0 4a 0b 93 44 49 4e 44 0a 0a 70 0a 01 5e AG.J..DIND..p..^ d2c0: 5e 2e 53 4d 42 5f 4d 31 37 35 a0 1d 93 50 57 53 ^.SMB_M175...PWS d2d0: 54 0a 00 86 5e 5e 2e 53 50 42 30 58 50 44 56 0a T...^^.SPB0XPDV. d2e0: 03 70 0a 00 46 4c 41 47 a0 4e 05 93 50 57 53 54 .p..FLAG.N..PWST d2f0: 0a 01 70 0a 01 5e 5e 2e 53 4d 42 5f 50 30 43 4f ..p..^^.SMB_P0CO d300: 70 0a 00 5e 5e 2e 53 4d 42 5f 50 30 43 45 5b 22 p..^^.SMB_P0CE[" d310: 0a 28 70 0a 00 5e 5e 2e 53 4d 42 5f 50 41 46 4f .(p..^^.SMB_PAFO d320: 70 0a 00 5e 5e 2e 53 4d 42 5f 50 41 46 45 5b 22 p..^^.SMB_PAFE[" d330: 0a c8 86 5e 5e 2e 53 50 42 30 58 50 44 56 0a 01 ...^^.SPB0XPDV.. d340: 70 0a 01 46 4c 41 47 a0 25 93 50 57 53 54 0a ff p..FLAG.%.PWST.. d350: 70 5e 5e 2e 53 4d 42 5f 50 41 46 4f 60 7b 60 0a p^^.SMB_PAFO`{`. d360: 01 60 7f 60 0a 01 60 70 60 46 4c 41 47 a0 4e 12 .`.`..`p`FLAG.N. d370: 93 44 49 4e 44 0a 0b 70 0a 01 5e 5e 2e 53 4d 42 .DIND..p..^^.SMB d380: 5f 50 42 31 4f a0 1d 93 50 57 53 54 0a 00 86 5e _PB1O...PWST...^ d390: 5e 2e 50 42 35 5f 58 50 44 56 0a 03 70 0a 00 46 ^.PB5_XPDV..p..F d3a0: 4c 41 47 a0 42 0d 93 50 57 53 54 0a 01 5b 22 0a LAG.B..PWST..[". d3b0: 28 70 0a 01 5e 5e 2e 53 4d 42 5f 50 30 44 4f 70 (p..^^.SMB_P0DOp d3c0: 0a 00 5e 5e 2e 53 4d 42 5f 50 30 44 45 70 0a 00 ..^^.SMB_P0DEp.. d3d0: 5e 5e 2e 53 4d 42 5f 50 42 31 4f 70 0a 00 5e 5e ^^.SMB_PB1Op..^^ d3e0: 2e 53 4d 42 5f 50 42 31 45 5b 22 0a c8 70 5e 5e .SMB_PB1E["..p^^ d3f0: 2e 53 4d 42 5f 4d 53 30 31 60 7d 60 0a 0f 61 70 .SMB_MS01`}`..ap d400: 61 5e 5e 2e 53 4d 42 5f 4d 53 30 31 5b 22 0a 28 a^^.SMB_MS01[".( d410: 70 01 5e 5e 2e 53 4d 42 5f 50 33 45 48 70 01 5e p.^^.SMB_P3EHp.^ d420: 5e 2e 53 4d 42 5f 50 33 45 53 70 00 5e 5e 2e 53 ^.SMB_P3ESp.^^.S d430: 4d 42 5f 50 33 45 55 5b 22 0a c8 70 0a 00 46 55 MB_P3EU["..p..FU d440: 43 43 70 0a 05 44 45 56 56 70 0a 00 42 55 53 53 CCp..DEVVp..BUSS d450: 70 0a 01 48 50 53 54 41 4c 49 42 0a 06 43 41 4c p..HPSTALIB..CAL d460: 42 86 5e 5e 2e 50 42 35 5f 58 50 44 56 0a 01 70 B.^^.PB5_XPDV..p d470: 0a 01 46 4c 41 47 a0 25 93 50 57 53 54 0a ff 70 ..FLAG.%.PWST..p d480: 5e 5e 2e 53 4d 42 5f 50 42 31 4f 60 7b 60 0a 01 ^^.SMB_PB1O`{`.. d490: 60 7f 60 0a 01 60 70 60 46 4c 41 47 a0 4c 08 93 `.`..`p`FLAG.L.. d4a0: 44 49 4e 44 0a 0c 70 0a 01 5e 5e 2e 53 4d 42 5f DIND..p..^^.SMB_ d4b0: 4d 58 32 33 a0 2b 93 50 57 53 54 0a 00 70 0a 00 MX23.+.PWST..p.. d4c0: 5e 5e 2e 53 4d 42 5f 50 31 37 4f 70 0a 00 5e 5e ^^.SMB_P17Op..^^ d4d0: 2e 53 4d 42 5f 50 31 37 45 70 0a 00 46 4c 41 47 .SMB_P17Ep..FLAG d4e0: a0 2f 93 50 57 53 54 0a 01 70 0a 01 5e 5e 2e 53 ./.PWST..p..^^.S d4f0: 4d 42 5f 50 31 37 4f 70 0a 00 5e 5e 2e 53 4d 42 MB_P17Op..^^.SMB d500: 5f 50 31 37 45 5b 22 0a c8 70 0a 01 46 4c 41 47 _P17E["..p..FLAG d510: a0 18 93 50 57 53 54 0a ff 70 5e 5e 2e 53 4d 42 ...PWST..p^^.SMB d520: 5f 50 31 37 4f 46 4c 41 47 70 0b 02 ae 50 38 30 _P17OFLAGp...P80 d530: 48 a4 46 4c 41 47 10 4a 0a 2e 53 41 54 41 50 52 H.FLAG.J..SATAPR d540: 49 44 14 4e 09 5f 45 4a 58 01 70 0a 00 5e 5e 5e ID.N._EJX.p..^^^ d550: 2e 53 4d 42 5f 50 41 41 4f 70 0a 00 5e 5e 5e 2e .SMB_PAAOp..^^^. d560: 53 4d 42 5f 50 41 41 45 5b 22 0a 28 a0 2e 93 5e SMB_PAAE[".(...^ d570: 5e 5e 2e 41 46 44 5f 48 44 44 30 0a 01 70 0a 00 ^^.AFD_HDD0..p.. d580: 5e 5e 5e 2e 53 4d 42 5f 50 33 39 4f 70 0a 00 5e ^^^.SMB_P39Op..^ d590: 5e 5e 2e 53 4d 42 5f 50 33 39 45 a1 1f 70 0a 00 ^^.SMB_P39E..p.. d5a0: 5e 5e 5e 2e 53 4d 42 5f 50 33 35 4f 70 0a 00 5e ^^^.SMB_P35Op..^ d5b0: 5e 5e 2e 53 4d 42 5f 50 33 35 45 5b 22 0a 28 70 ^^.SMB_P35E[".(p d5c0: 0a 01 5e 5e 5e 2e 53 4d 42 5f 50 41 41 4f 70 0a ..^^^.SMB_PAAOp. d5d0: 00 5e 5e 5e 2e 53 4d 42 5f 50 41 41 45 5b 22 0a .^^^.SMB_PAAE[". d5e0: 28 10 44 08 2f 03 53 41 54 41 50 52 49 44 50 5f (.D./.SATAPRIDP_ d5f0: 44 30 14 43 07 5f 45 4a 58 01 70 0a 00 5e 5e 5e D0.C._EJX.p..^^^ d600: 5e 2e 53 4d 42 5f 50 41 41 4f 70 0a 00 5e 5e 5e ^.SMB_PAAOp..^^^ d610: 5e 2e 53 4d 42 5f 50 41 41 45 5b 22 0a 28 70 0a ^.SMB_PAAE[".(p. d620: 00 5e 5e 5e 5e 2e 53 4d 42 5f 50 33 39 4f 70 0a .^^^^.SMB_P39Op. d630: 00 5e 5e 5e 5e 2e 53 4d 42 5f 50 33 39 45 5b 22 .^^^^.SMB_P39E[" d640: 0a 28 70 0a 01 5e 5e 5e 5e 2e 53 4d 42 5f 50 41 .(p..^^^^.SMB_PA d650: 41 4f 70 0a 00 5e 5e 5e 5e 2e 53 4d 42 5f 50 41 AOp..^^^^.SMB_PA d660: 41 45 5b 22 0a 28 10 49 07 2e 53 41 54 41 50 52 AE[".(.I..SATAPR d670: 54 31 14 4d 06 5f 45 4a 58 01 70 0a 00 5e 5e 5e T1.M._EJX.p..^^^ d680: 2e 53 4d 42 5f 50 41 41 4f 70 0a 00 5e 5e 5e 2e .SMB_PAAOp..^^^. d690: 53 4d 42 5f 50 41 41 45 5b 22 0a 28 70 0a 00 5e SMB_PAAE[".(p..^ d6a0: 5e 5e 2e 53 4d 42 5f 50 33 39 4f 70 0a 00 5e 5e ^^.SMB_P39Op..^^ d6b0: 5e 2e 53 4d 42 5f 50 33 39 45 5b 22 0a 28 70 0a ^.SMB_P39E[".(p. d6c0: 01 5e 5e 5e 2e 53 4d 42 5f 50 41 41 4f 70 0a 00 .^^^.SMB_PAAOp.. d6d0: 5e 5e 5e 2e 53 4d 42 5f 50 41 41 45 5b 22 0a 28 ^^^.SMB_PAAE[".( d6e0: 10 44 08 2f 03 53 41 54 41 50 52 54 31 4f 44 44 .D./.SATAPRT1ODD d6f0: 5f 14 43 07 5f 45 4a 58 01 70 0a 00 5e 5e 5e 5e _.C._EJX.p..^^^^ d700: 2e 53 4d 42 5f 50 41 41 4f 70 0a 00 5e 5e 5e 5e .SMB_PAAOp..^^^^ d710: 2e 53 4d 42 5f 50 41 41 45 5b 22 0a 28 70 0a 00 .SMB_PAAE[".(p.. d720: 5e 5e 5e 5e 2e 53 4d 42 5f 50 33 39 4f 70 0a 00 ^^^^.SMB_P39Op.. d730: 5e 5e 5e 5e 2e 53 4d 42 5f 50 33 39 45 5b 22 0a ^^^^.SMB_P39E[". d740: 28 70 0a 01 5e 5e 5e 5e 2e 53 4d 42 5f 50 41 41 (p..^^^^.SMB_PAA d750: 4f 70 0a 00 5e 5e 5e 5e 2e 53 4d 42 5f 50 41 41 Op..^^^^.SMB_PAA d760: 45 5b 22 0a 28 10 49 07 2e 53 41 54 41 53 45 43 E[".(.I..SATASEC d770: 44 14 4d 06 5f 45 4a 58 01 70 0a 00 5e 5e 5e 2e D.M._EJX.p..^^^. d780: 53 4d 42 5f 50 41 41 4f 70 0a 00 5e 5e 5e 2e 53 SMB_PAAOp..^^^.S d790: 4d 42 5f 50 41 41 45 5b 22 0a 28 70 0a 00 5e 5e MB_PAAE[".(p..^^ d7a0: 5e 2e 53 4d 42 5f 50 33 39 4f 70 0a 00 5e 5e 5e ^.SMB_P39Op..^^^ d7b0: 2e 53 4d 42 5f 50 33 39 45 5b 22 0a 28 70 0a 01 .SMB_P39E[".(p.. d7c0: 5e 5e 5e 2e 53 4d 42 5f 50 41 41 4f 70 0a 00 5e ^^^.SMB_PAAOp..^ d7d0: 5e 5e 2e 53 4d 42 5f 50 41 41 45 5b 22 0a 28 10 ^^.SMB_PAAE[".(. d7e0: 44 08 2f 03 53 41 54 41 50 52 49 44 50 5f 44 31 D./.SATAPRIDP_D1 d7f0: 14 43 07 5f 45 4a 58 01 70 0a 00 5e 5e 5e 5e 2e .C._EJX.p..^^^^. d800: 53 4d 42 5f 50 41 41 4f 70 0a 00 5e 5e 5e 5e 2e SMB_PAAOp..^^^^. d810: 53 4d 42 5f 50 41 41 45 5b 22 0a 28 70 0a 00 5e SMB_PAAE[".(p..^ d820: 5e 5e 5e 2e 53 4d 42 5f 50 33 39 4f 70 0a 00 5e ^^^.SMB_P39Op..^ d830: 5e 5e 5e 2e 53 4d 42 5f 50 33 39 45 5b 22 0a 28 ^^^.SMB_P39E[".( d840: 70 0a 01 5e 5e 5e 5e 2e 53 4d 42 5f 50 41 41 4f p..^^^^.SMB_PAAO d850: 70 0a 00 5e 5e 5e 5e 2e 53 4d 42 5f 50 41 41 45 p..^^^^.SMB_PAAE d860: 5b 22 0a 28 10 4d 05 4f 48 43 31 5b 82 45 05 52 [".(.M.OHC1[.E.R d870: 48 55 42 08 5f 41 44 52 0a 00 5b 82 0c 50 52 54 HUB._ADR..[..PRT d880: 31 08 5f 41 44 52 0a 01 5b 82 0c 50 52 54 32 08 1._ADR..[..PRT2. d890: 5f 41 44 52 0a 02 5b 82 0c 50 52 54 33 08 5f 41 _ADR..[..PRT3._A d8a0: 44 52 0a 03 5b 82 1c 50 52 54 35 08 5f 41 44 52 DR..[..PRT5._ADR d8b0: 0a 05 08 5f 55 50 43 12 0a 04 0a 00 0a ff 0a 00 ..._UPC......... d8c0: 0a 00 10 3d 45 48 43 31 5b 82 36 52 48 55 42 08 ...=EHC1[.6RHUB. d8d0: 5f 41 44 52 0a 00 5b 82 0c 50 52 54 31 08 5f 41 _ADR..[..PRT1._A d8e0: 44 52 0a 01 5b 82 0c 50 52 54 32 08 5f 41 44 52 DR..[..PRT2._ADR d8f0: 0a 02 5b 82 0c 50 52 54 33 08 5f 41 44 52 0a 03 ..[..PRT3._ADR.. d900: 10 41 05 45 48 43 32 5b 82 49 04 52 48 55 42 08 .A.EHC2[.I.RHUB. d910: 5f 41 44 52 0a 00 5b 82 1c 50 52 54 34 08 5f 41 _ADR..[..PRT4._A d920: 44 52 0a 04 08 5f 55 50 43 12 0a 04 0a 00 0a ff DR..._UPC....... d930: 0a 00 0a 00 5b 82 1c 50 52 54 35 08 5f 41 44 52 ....[..PRT5._ADR d940: 0a 05 08 5f 55 50 43 12 0a 04 0a 00 0a ff 0a 00 ..._UPC......... d950: 0a 00 10 40 06 4f 48 43 34 5b 82 48 05 52 48 55 ...@.OHC4[.H.RHU d960: 42 08 5f 41 44 52 0a 00 5b 82 0c 50 52 54 31 08 B._ADR..[..PRT1. d970: 5f 41 44 52 0a 01 5b 82 3b 50 52 54 32 08 5f 41 _ADR..[.;PRT2._A d980: 44 52 0a 02 14 2e 5f 45 4a 58 01 5b 22 0a 28 70 DR...._EJX.[".(p d990: 0a 00 5e 5e 5e 5e 2e 53 4d 42 5f 50 30 37 4f 70 ..^^^^.SMB_P07Op d9a0: 0a 00 5e 5e 5e 5e 2e 53 4d 42 5f 50 30 37 45 5b ..^^^^.SMB_P07E[ d9b0: 22 0a 28 10 27 2e 50 42 32 5f 56 47 41 5f 14 1c ".(.'.PB2_VGA_.. d9c0: 5f 45 4a 58 01 5b 22 0a 28 5e 5e 5e 2e 56 47 41 _EJX.[".(^^^.VGA d9d0: 5f 50 58 30 32 0a 00 5b 22 0a 28 10 27 2e 50 42 _PX02..[".(.'.PB d9e0: 33 5f 56 47 41 5f 14 1c 5f 45 4a 58 01 5b 22 0a 3_VGA_.._EJX.[". d9f0: 28 5e 5e 5e 2e 56 47 41 5f 50 58 30 32 0a 00 5b (^^^.VGA_PX02..[ da00: 22 0a 28 10 40 14 2e 50 42 37 5f 58 50 44 56 14 ".(.@..PB7_XPDV. da10: 44 13 5f 45 4a 58 01 8b 43 41 4c 42 0a 00 53 5a D._EJX..CALB..SZ da20: 5a 45 5b 13 43 41 4c 42 0a 10 0a 03 46 55 43 43 ZE[.CALB....FUCC da30: 5b 13 43 41 4c 42 0a 13 0a 05 44 45 56 56 5b 13 [.CALB....DEVV[. da40: 43 41 4c 42 0a 18 0a 08 42 55 53 53 8c 43 41 4c CALB....BUSS.CAL da50: 42 0a 04 48 50 53 54 70 0a 05 53 5a 5a 45 70 0a B..HPSTp..SZZEp. da60: 00 46 55 43 43 70 0a 07 44 45 56 56 70 0a 00 42 .FUCCp..DEVVp..B da70: 55 53 53 70 0a 00 48 50 53 54 41 4c 49 42 0a 06 USSp..HPSTALIB.. da80: 43 41 4c 42 5b 22 0a 28 70 01 5e 5e 5e 2e 53 4d CALB[".(p.^^^.SM da90: 42 5f 50 32 39 48 70 01 5e 5e 5e 2e 53 4d 42 5f B_P29Hp.^^^.SMB_ daa0: 50 32 39 53 70 01 5e 5e 5e 2e 53 4d 42 5f 50 32 P29Sp.^^^.SMB_P2 dab0: 39 55 5b 22 0a 28 70 5e 5e 5e 2e 53 4d 42 5f 4d 9U[".(p^^^.SMB_M dac0: 53 30 34 60 7b 60 0c f0 ff ff ff 61 70 61 5e 5e S04`{`.....apa^^ dad0: 5e 2e 53 4d 42 5f 4d 53 30 34 5b 22 0a 28 70 0a ^.SMB_MS04[".(p. dae0: 00 5e 5e 5e 2e 53 4d 42 5f 50 41 41 4f 70 0a 00 .^^^.SMB_PAAOp.. daf0: 5e 5e 5e 2e 53 4d 42 5f 50 41 41 45 5b 22 0a 28 ^^^.SMB_PAAE[".( db00: 70 0a 00 5e 5e 5e 2e 53 4d 42 5f 50 33 42 4f 70 p..^^^.SMB_P3BOp db10: 0a 00 5e 5e 5e 2e 53 4d 42 5f 50 33 42 45 5b 22 ..^^^.SMB_P3BE[" db20: 0a 28 70 0a 01 5e 5e 5e 2e 53 4d 42 5f 50 41 41 .(p..^^^.SMB_PAA db30: 4f 70 0a 00 5e 5e 5e 2e 53 4d 42 5f 50 41 41 45 Op..^^^.SMB_PAAE db40: 5b 22 0a 28 10 47 08 2e 53 50 42 31 58 50 44 56 [".(.G..SPB1XPDV db50: 14 4b 07 5f 45 4a 58 01 70 01 5e 5e 5e 2e 53 4d .K._EJX.p.^^^.SM db60: 42 5f 50 32 45 48 70 01 5e 5e 5e 2e 53 4d 42 5f B_P2EHp.^^^.SMB_ db70: 50 32 45 53 70 01 5e 5e 5e 2e 53 4d 42 5f 50 32 P2ESp.^^^.SMB_P2 db80: 45 55 5b 22 0a 28 70 5e 5e 5e 2e 53 4d 42 5f 4d EU[".(p^^^.SMB_M db90: 53 30 33 60 7b 60 0c 0f ff ff ff 61 70 61 5e 5e S03`{`.....apa^^ dba0: 5e 2e 53 4d 42 5f 4d 53 30 33 70 0a 00 5e 5e 5e ^.SMB_MS03p..^^^ dbb0: 2e 53 4d 42 5f 50 43 38 4f 70 0a 00 5e 5e 5e 2e .SMB_PC8Op..^^^. dbc0: 53 4d 42 5f 50 43 38 45 5b 22 0a 28 10 43 05 2e SMB_PC8E[".(.C.. dbd0: 53 50 42 30 58 50 44 56 14 47 04 5f 45 4a 58 01 SPB0XPDV.G._EJX. dbe0: 70 0a 01 5e 5e 5e 2e 53 4d 42 5f 50 41 46 4f 70 p..^^^.SMB_PAFOp dbf0: 0a 00 5e 5e 5e 2e 53 4d 42 5f 50 41 46 45 70 0a ..^^^.SMB_PAFEp. dc00: 00 5e 5e 5e 2e 53 4d 42 5f 50 30 43 4f 70 0a 00 .^^^.SMB_P0COp.. dc10: 5e 5e 5e 2e 53 4d 42 5f 50 30 43 45 5b 22 0a 28 ^^^.SMB_P0CE[".( dc20: 10 4c 0f 2e 50 42 34 5f 58 50 44 56 14 40 0f 5f .L..PB4_XPDV.@._ dc30: 45 4a 58 01 8b 43 41 4c 42 0a 00 53 5a 5a 45 5b EJX..CALB..SZZE[ dc40: 13 43 41 4c 42 0a 10 0a 03 46 55 43 43 5b 13 43 .CALB....FUCC[.C dc50: 41 4c 42 0a 13 0a 05 44 45 56 56 5b 13 43 41 4c ALB....DEVV[.CAL dc60: 42 0a 18 0a 08 42 55 53 53 8c 43 41 4c 42 0a 04 B....BUSS.CALB.. dc70: 48 50 53 54 70 0a 05 53 5a 5a 45 70 0a 00 46 55 HPSTp..SZZEp..FU dc80: 43 43 70 0a 04 44 45 56 56 70 0a 00 42 55 53 53 CCp..DEVVp..BUSS dc90: 70 0a 00 48 50 53 54 41 4c 49 42 0a 06 43 41 4c p..HPSTALIB..CAL dca0: 42 5b 22 0a 28 70 01 5e 5e 5e 2e 53 4d 42 5f 50 B[".(p.^^^.SMB_P dcb0: 33 46 48 70 01 5e 5e 5e 2e 53 4d 42 5f 50 33 46 3FHp.^^^.SMB_P3F dcc0: 53 70 01 5e 5e 5e 2e 53 4d 42 5f 50 33 46 55 5b Sp.^^^.SMB_P3FU[ dcd0: 22 0a 28 70 5e 5e 5e 2e 53 4d 42 5f 4d 53 30 31 ".(p^^^.SMB_MS01 dce0: 60 7b 60 0c 0f ff ff ff 61 70 61 5e 5e 5e 2e 53 `{`.....apa^^^.S dcf0: 4d 42 5f 4d 53 30 31 5b 22 0a 28 70 0a 00 5e 5e MB_MS01[".(p..^^ dd00: 5e 2e 53 4d 42 5f 50 43 35 4f 70 0a 00 5e 5e 5e ^.SMB_PC5Op..^^^ dd10: 2e 53 4d 42 5f 50 43 35 45 5b 22 0a 28 10 4e 11 .SMB_PC5E[".(.N. dd20: 2e 50 42 35 5f 58 50 44 56 14 42 11 5f 45 4a 58 .PB5_XPDV.B._EJX dd30: 01 8b 43 41 4c 42 0a 00 53 5a 5a 45 5b 13 43 41 ..CALB..SZZE[.CA dd40: 4c 42 0a 10 0a 03 46 55 43 43 5b 13 43 41 4c 42 LB....FUCC[.CALB dd50: 0a 13 0a 05 44 45 56 56 5b 13 43 41 4c 42 0a 18 ....DEVV[.CALB.. dd60: 0a 08 42 55 53 53 8c 43 41 4c 42 0a 04 48 50 53 ..BUSS.CALB..HPS dd70: 54 70 0a 05 53 5a 5a 45 70 0a 00 46 55 43 43 70 Tp..SZZEp..FUCCp dd80: 0a 05 44 45 56 56 70 0a 00 42 55 53 53 70 0a 00 ..DEVVp..BUSSp.. dd90: 48 50 53 54 41 4c 49 42 0a 06 43 41 4c 42 5b 22 HPSTALIB..CALB[" dda0: 0a 28 70 01 5e 5e 5e 2e 53 4d 42 5f 50 33 45 48 .(p.^^^.SMB_P3EH ddb0: 70 01 5e 5e 5e 2e 53 4d 42 5f 50 33 45 53 70 01 p.^^^.SMB_P3ESp. ddc0: 5e 5e 5e 2e 53 4d 42 5f 50 33 45 55 5b 22 0a 28 ^^^.SMB_P3EU[".( ddd0: 70 5e 5e 5e 2e 53 4d 42 5f 4d 53 30 31 60 7b 60 p^^^.SMB_MS01`{` dde0: 0c f0 ff ff ff 61 70 61 5e 5e 5e 2e 53 4d 42 5f .....apa^^^.SMB_ ddf0: 4d 53 30 31 5b 22 0a 28 70 0a 01 5e 5e 5e 2e 53 MS01[".(p..^^^.S de00: 4d 42 5f 50 42 31 4f 70 0a 00 5e 5e 5e 2e 53 4d MB_PB1Op..^^^.SM de10: 42 5f 50 42 31 45 5b 22 0a 28 70 0a 00 5e 5e 5e B_PB1E[".(p..^^^ de20: 2e 53 4d 42 5f 50 30 44 4f 70 0a 00 5e 5e 5e 2e .SMB_P0DOp..^^^. de30: 53 4d 42 5f 50 30 44 45 5b 22 0a 28 10 4e 11 2e SMB_P0DE[".(.N.. de40: 50 42 36 5f 58 50 44 56 14 42 11 5f 45 4a 58 01 PB6_XPDV.B._EJX. de50: 8b 43 41 4c 42 0a 00 53 5a 5a 45 5b 13 43 41 4c .CALB..SZZE[.CAL de60: 42 0a 10 0a 03 46 55 43 43 5b 13 43 41 4c 42 0a B....FUCC[.CALB. de70: 13 0a 05 44 45 56 56 5b 13 43 41 4c 42 0a 18 0a ...DEVV[.CALB... de80: 08 42 55 53 53 8c 43 41 4c 42 0a 04 48 50 53 54 .BUSS.CALB..HPST de90: 70 0a 05 53 5a 5a 45 70 0a 00 46 55 43 43 70 0a p..SZZEp..FUCCp. dea0: 06 44 45 56 56 70 0a 00 42 55 53 53 70 0a 00 48 .DEVVp..BUSSp..H deb0: 50 53 54 41 4c 49 42 0a 06 43 41 4c 42 5b 22 0a PSTALIB..CALB[". dec0: 28 70 01 5e 5e 5e 2e 53 4d 42 5f 50 34 30 48 70 (p.^^^.SMB_P40Hp ded0: 01 5e 5e 5e 2e 53 4d 42 5f 50 34 30 53 70 01 5e .^^^.SMB_P40Sp.^ dee0: 5e 5e 2e 53 4d 42 5f 50 34 30 55 5b 22 0a 28 70 ^^.SMB_P40U[".(p def0: 5e 5e 5e 2e 53 4d 42 5f 4d 53 30 32 60 7b 60 0c ^^^.SMB_MS02`{`. df00: f0 ff ff ff 61 70 61 5e 5e 5e 2e 53 4d 42 5f 4d ....apa^^^.SMB_M df10: 53 30 32 5b 22 0a 28 70 0a 01 5e 5e 5e 2e 53 4d S02[".(p..^^^.SM df20: 42 5f 50 42 30 4f 70 0a 00 5e 5e 5e 2e 53 4d 42 B_PB0Op..^^^.SMB df30: 5f 50 42 30 45 5b 22 0a 28 70 0a 00 5e 5e 5e 2e _PB0E[".(p..^^^. df40: 53 4d 42 5f 50 30 45 4f 70 0a 00 5e 5e 5e 2e 53 SMB_P0EOp..^^^.S df50: 4d 42 5f 50 30 45 45 5b 22 0a 28 10 46 1e 53 41 MB_P0EE[".(.F.SA df60: 54 41 5b 82 4e 1d 4f 44 44 5a 08 5f 41 44 52 0a TA[.N.ODDZ._ADR. df70: 01 08 4f 44 50 53 0a 00 14 22 5f 53 54 41 00 a0 ..ODPS..."_STA.. df80: 16 93 5e 5e 5e 2e 41 46 44 5f 4f 44 5a 50 0c 00 ..^^^.AFD_ODZP.. df90: 00 00 80 a4 0a 00 a1 04 a4 0a 0f 14 48 09 5f 50 ............H._P dfa0: 53 30 00 70 0b 00 df 50 38 30 48 a0 41 08 93 5e S0.p...P80H.A..^ dfb0: 5e 5e 2e 41 46 44 5f 4f 44 5a 50 0c 01 00 00 80 ^^.AFD_ODZP..... dfc0: a0 4c 06 93 56 49 44 49 0c 22 10 04 78 70 0a 00 .L..VIDI."..xp.. dfd0: 44 49 53 31 70 0a 01 57 52 45 4e 70 0a 01 50 49 DIS1p..WRENp..PI dfe0: 31 5f 70 0a 00 57 52 45 4e 5b 22 0a 28 70 0a 00 1_p..WREN[".(p.. dff0: 5e 5e 5e 2e 53 4d 42 5f 50 41 41 4f 70 0a 00 5e ^^^.SMB_PAAOp..^ e000: 5e 5e 2e 53 4d 42 5f 50 41 41 45 70 0a 01 5e 5e ^^.SMB_PAAEp..^^ e010: 5e 2e 53 4d 42 5f 50 33 35 4f 70 0a 00 5e 5e 5e ^.SMB_P35Op..^^^ e020: 2e 53 4d 42 5f 50 33 35 45 5b 22 0a 28 70 0a 00 .SMB_P35E[".(p.. e030: 4f 44 50 53 14 48 09 5f 50 53 33 00 70 0b 03 df ODPS.H._PS3.p... e040: 50 38 30 48 a0 41 08 93 5e 5e 5e 2e 41 46 44 5f P80H.A..^^^.AFD_ e050: 4f 44 5a 50 0c 01 00 00 80 a0 4c 06 93 56 49 44 ODZP......L..VID e060: 49 0c 22 10 04 78 5b 22 0a 28 70 0a 00 5e 5e 5e I."..x[".(p..^^^ e070: 2e 53 4d 42 5f 50 41 41 4f 70 0a 00 5e 5e 5e 2e .SMB_PAAOp..^^^. e080: 53 4d 42 5f 50 41 41 45 70 0a 00 5e 5e 5e 2e 53 SMB_PAAEp..^^^.S e090: 4d 42 5f 50 33 35 4f 70 0a 00 5e 5e 5e 2e 53 4d MB_P35Op..^^^.SM e0a0: 42 5f 50 33 35 45 5b 22 0a 28 70 0a 01 44 49 53 B_P35E[".(p..DIS e0b0: 31 70 0a 01 57 52 45 4e 70 0a 00 50 49 31 5f 70 1p..WRENp..PI1_p e0c0: 0a 00 57 52 45 4e 70 0a 03 4f 44 50 53 14 0b 5f ..WRENp..ODPS.._ e0d0: 50 53 43 00 a4 4f 44 50 53 5b 82 47 06 4f 44 44 PSC..ODPS[.G.ODD e0e0: 5f 08 5f 41 44 52 0a 00 14 09 5f 52 4d 56 00 a4 _._ADR...._RMV.. e0f0: 0a 01 14 4f 04 5f 45 4a 58 01 5b 22 0a 28 70 0a ...O._EJX.[".(p. e100: 00 5e 5e 5e 5e 2e 53 4d 42 5f 50 41 41 4f 70 0a .^^^^.SMB_PAAOp. e110: 00 5e 5e 5e 5e 2e 53 4d 42 5f 50 41 41 45 70 0a .^^^^.SMB_PAAEp. e120: 00 5e 5e 5e 5e 2e 53 4d 42 5f 50 33 35 4f 70 0a .^^^^.SMB_P35Op. e130: 00 5e 5e 5e 5e 2e 53 4d 42 5f 50 33 35 45 5b 22 .^^^^.SMB_P35E[" e140: 0a 28 5b 82 2c 41 43 41 44 08 5f 48 49 44 0d 41 .([.,ACAD._HID.A e150: 43 50 49 30 30 30 33 00 14 0b 5f 50 53 52 00 a4 CPI0003..._PSR.. e160: 50 57 52 53 14 0b 5f 50 43 4c 00 a4 5f 53 42 5f PWRS.._PCL.._SB_ e170: 5b 82 4e 6b 42 41 54 54 08 5f 48 49 44 0c 41 d0 [.NkBATT._HID.A. e180: 0c 0a 08 5f 55 49 44 0a 01 08 5f 50 43 4c 12 06 ..._UID..._PCL.. e190: 01 50 43 49 30 08 42 54 50 5f 0a 00 08 42 54 43 .PCI0.BTP_...BTC e1a0: 48 0a 00 08 42 53 54 41 0a 00 08 50 42 49 46 12 H...BSTA...PBIF. e1b0: 39 0d 0a 01 0c ff ff ff ff 0c ff ff ff ff 0a 00 9............... e1c0: 0c ff ff ff ff 0a 00 0a 00 0a 64 0a 00 0d 42 41 ..........d...BA e1d0: 54 30 00 0d 31 32 33 34 35 36 37 38 39 00 0d 4c T0..123456789..L e1e0: 69 4f 4e 00 0d 50 54 4c 00 08 50 42 53 54 12 0f iON..PTL..PBST.. e1f0: 04 0a 00 0c ff ff ff ff 0b 34 10 0b 30 2a 5b 01 .........4..0*[. e200: 45 43 4d 55 00 14 22 5f 53 54 41 00 a0 0b 93 45 ECMU.."_STA....E e210: 43 4f 4e 0a 00 a4 0a 0f a1 0f a0 08 42 53 54 41 CON.........BSTA e220: a4 0a 1f a1 04 a4 0a 0f 14 47 07 42 54 53 54 00 .........G.BTST. e230: 5b 23 5e 5e 2f 04 50 43 49 30 4c 50 43 30 45 43 [#^^/.PCI0LPC0EC e240: 30 5f 4d 55 54 30 ff ff 70 5e 5e 2f 04 50 43 49 0_MUT0..p^^/.PCI e250: 30 4c 50 43 30 45 43 30 5f 42 30 49 4e 42 53 54 0LPC0EC0_B0INBST e260: 41 5b 27 5e 5e 2f 04 50 43 49 30 4c 50 43 30 45 A['^^/.PCI0LPC0E e270: 43 30 5f 4d 55 54 30 a0 1f 93 42 53 54 41 0a 01 C0_MUT0...BSTA.. e280: a0 16 93 42 54 50 5f 0a 00 70 0a 01 42 54 43 48 ...BTP_..p..BTCH e290: 70 0a 01 42 54 50 5f a1 08 70 0a 00 42 54 50 5f p..BTP_..p..BTP_ e2a0: 14 46 06 49 54 4f 53 01 70 11 0c 0a 09 30 00 00 .F.ITOS.p....0.. e2b0: 00 00 00 00 00 00 60 70 11 14 0a 11 30 31 32 33 ......`p....0123 e2c0: 34 35 36 37 38 39 41 42 43 44 45 46 00 67 70 0a 456789ABCDEF.gp. e2d0: 08 61 70 0a 00 62 70 0a 00 63 a2 2a 61 76 61 7b .ap..bp..c.*ava{ e2e0: 7a 68 79 61 0a 02 00 00 0a 0f 64 a0 05 64 70 ff zhya......d..dp. e2f0: 63 a0 13 63 47 42 46 45 67 64 71 65 50 42 46 45 c..cGBFEgdqePBFE e300: 60 62 65 75 62 a4 60 14 13 47 42 46 45 03 8c 68 `beub.`..GBFE..h e310: 69 54 49 44 58 70 54 49 44 58 6a 14 13 50 42 46 iTIDXpTIDXj..PBF e320: 45 03 8c 68 69 54 49 44 58 70 6a 54 49 44 58 14 E..hiTIDXpjTIDX. e330: 4c 37 5f 42 49 46 00 08 5f 54 5f 32 00 08 5f 54 L7_BIF.._T_2.._T e340: 5f 31 00 08 5f 54 5f 30 00 5b 23 5e 5e 2f 04 50 _1.._T_0.[#^^/.P e350: 43 49 30 4c 50 43 30 45 43 30 5f 4d 55 54 30 ff CI0LPC0EC0_MUT0. e360: ff 70 5e 5e 2f 04 50 43 49 30 4c 50 43 30 45 43 .p^^/.PCI0LPC0EC e370: 30 5f 44 43 50 30 88 50 42 49 46 0a 01 00 70 5e 0_DCP0.PBIF...p^ e380: 5e 2f 04 50 43 49 30 4c 50 43 30 45 43 30 5f 46 ^/.PCI0LPC0EC0_F e390: 43 50 30 60 70 60 88 50 42 49 46 0a 02 00 70 5e CP0`p`.PBIF...p^ e3a0: 5e 2f 04 50 43 49 30 4c 50 43 30 45 43 30 5f 44 ^/.PCI0LPC0EC0_D e3b0: 56 54 30 88 50 42 49 46 0a 04 00 70 5e 5e 2f 04 VT0.PBIF...p^^/. e3c0: 50 43 49 30 4c 50 43 30 45 43 30 5f 44 4e 4e 30 PCI0LPC0EC0_DNN0 e3d0: 61 70 5e 5e 2f 04 50 43 49 30 4c 50 43 30 45 43 ap^^/.PCI0LPC0EC e3e0: 30 5f 42 53 4e 30 62 70 5e 5e 2f 04 50 43 49 30 0_BSN0bp^^/.PCI0 e3f0: 4c 50 43 30 45 43 30 5f 42 43 4e 30 63 70 5e 5e LPC0EC0_BCN0cp^^ e400: 2f 04 50 43 49 30 4c 50 43 30 45 43 30 5f 4d 4e /.PCI0LPC0EC0_MN e410: 4e 30 64 5b 27 5e 5e 2f 04 50 43 49 30 4c 50 43 N0d['^^/.PCI0LPC e420: 30 45 43 30 5f 4d 55 54 30 70 78 60 0a 0a 00 00 0EC0_MUT0px`.... e430: 88 50 42 49 46 0a 05 00 70 0a 00 88 50 42 49 46 .PBIF...p...PBIF e440: 0a 06 00 70 99 61 00 5f 54 5f 30 a0 19 93 5f 54 ...p.a._T_0..._T e450: 5f 30 0a 00 70 0d 55 6e 6b 6e 6f 77 00 88 50 42 _0..p.Unknow..PB e460: 49 46 0a 09 00 a1 19 a0 17 93 5f 54 5f 30 0a ff IF........_T_0.. e470: 70 0d 44 65 6c 6c 00 88 50 42 49 46 0a 09 00 70 p.Dell..PBIF...p e480: 49 54 4f 53 5b 29 62 00 88 50 42 49 46 0a 0a 00 ITOS[)b..PBIF... e490: 70 99 63 00 5f 54 5f 31 a0 19 93 5f 54 5f 31 0a p.c._T_1..._T_1. e4a0: 00 70 0d 55 6e 6b 6e 6f 77 00 88 50 42 49 46 0a .p.Unknow..PBIF. e4b0: 0b 00 a1 43 0d a0 17 93 5f 54 5f 31 0a 01 70 0d ...C...._T_1..p. e4c0: 50 42 41 43 00 88 50 42 49 46 0a 0b 00 a1 48 0b PBAC..PBIF....H. e4d0: a0 17 93 5f 54 5f 31 0a 02 70 0d 4c 49 4f 4e 00 ..._T_1..p.LION. e4e0: 88 50 42 49 46 0a 0b 00 a1 4d 09 a0 17 93 5f 54 .PBIF....M...._T e4f0: 5f 31 0a 03 70 0d 4e 49 43 44 00 88 50 42 49 46 _1..p.NICD..PBIF e500: 0a 0b 00 a1 42 08 a0 17 93 5f 54 5f 31 0a 04 70 ....B...._T_1..p e510: 0d 4e 49 4d 48 00 88 50 42 49 46 0a 0b 00 a1 47 .NIMH..PBIF....G e520: 06 a0 17 93 5f 54 5f 31 0a 05 70 0d 4e 49 5a 4e ...._T_1..p.NIZN e530: 00 88 50 42 49 46 0a 0b 00 a1 4c 04 a0 16 93 5f ..PBIF....L...._ e540: 54 5f 31 0a 06 70 0d 52 41 4d 00 88 50 42 49 46 T_1..p.RAM..PBIF e550: 0a 0b 00 a1 32 a0 17 93 5f 54 5f 31 0a 07 70 0d ....2..._T_1..p. e560: 5a 4e 41 52 00 88 50 42 49 46 0a 0b 00 a1 18 a0 ZNAR..PBIF...... e570: 16 93 5f 54 5f 31 0a 08 70 0d 4c 49 50 00 88 50 .._T_1..p.LIP..P e580: 42 49 46 0a 0b 00 70 99 64 00 5f 54 5f 32 a0 19 BIF...p.d._T_2.. e590: 93 5f 54 5f 32 0a 00 70 0d 55 6e 6b 6e 6f 77 00 ._T_2..p.Unknow. e5a0: 88 50 42 49 46 0a 0c 00 a1 4e 0f a0 17 93 5f 54 .PBIF....N...._T e5b0: 5f 32 0a 01 70 0d 44 65 6c 6c 00 88 50 42 49 46 _2..p.Dell..PBIF e5c0: 0a 0c 00 a1 43 0e a0 17 93 5f 54 5f 32 0a 02 70 ....C...._T_2..p e5d0: 0d 53 4f 4e 59 00 88 50 42 49 46 0a 0c 00 a1 48 .SONY..PBIF....H e5e0: 0c a0 18 93 5f 54 5f 32 0a 03 70 0d 53 41 4e 59 ...._T_2..p.SANY e5f0: 4f 00 88 50 42 49 46 0a 0c 00 a1 4c 0a a0 1c 93 O..PBIF....L.... e600: 5f 54 5f 32 0a 04 70 0d 50 41 4e 41 53 4f 4e 49 _T_2..p.PANASONI e610: 43 00 88 50 42 49 46 0a 0c 00 a1 4c 08 a0 1b 93 C..PBIF....L.... e620: 5f 54 5f 32 0a 05 70 0d 53 4f 4e 59 5f 4f 4c 44 _T_2..p.SONY_OLD e630: 00 88 50 42 49 46 0a 0c 00 a1 4d 06 a0 16 93 5f ..PBIF....M...._ e640: 54 5f 32 0a 06 70 0d 53 44 49 00 88 50 42 49 46 T_2..p.SDI..PBIF e650: 0a 0c 00 a1 43 05 a0 19 93 5f 54 5f 32 0a 07 70 ....C...._T_2..p e660: 0d 53 49 4d 50 4c 4f 00 88 50 42 49 46 0a 0c 00 .SIMPLO..PBIF... e670: a1 36 a0 1b 93 5f 54 5f 32 0a 08 70 0d 4d 4f 54 .6..._T_2..p.MOT e680: 4f 52 4f 4c 41 00 88 50 42 49 46 0a 0c 00 a1 18 OROLA..PBIF..... e690: a0 16 93 5f 54 5f 32 0a 09 70 0d 4c 47 43 00 88 ..._T_2..p.LGC.. e6a0: 50 42 49 46 0a 0c 00 a4 50 42 49 46 14 43 18 5f PBIF....PBIF.C._ e6b0: 42 53 54 00 5b 23 5e 5e 2f 04 50 43 49 30 4c 50 BST.[#^^/.PCI0LP e6c0: 43 30 45 43 30 5f 4d 55 54 30 ff ff 70 5e 5e 2f C0EC0_MUT0..p^^/ e6d0: 04 50 43 49 30 4c 50 43 30 45 43 30 5f 42 30 44 .PCI0LPC0EC0_B0D e6e0: 43 60 70 5e 5e 2f 04 50 43 49 30 4c 50 43 30 45 C`p^^/.PCI0LPC0E e6f0: 43 30 5f 42 30 49 43 61 79 61 0a 01 61 72 60 61 C0_B0ICaya..ar`a e700: 60 70 5e 5e 2f 04 50 43 49 30 4c 50 43 30 45 43 `p^^/.PCI0LPC0EC e710: 30 5f 42 30 43 4c 61 5b 27 5e 5e 2f 04 50 43 49 0_B0CLa['^^/.PCI e720: 30 4c 50 43 30 45 43 30 5f 4d 55 54 30 79 61 0a 0LPC0EC0_MUT0ya. e730: 02 61 72 60 61 60 70 60 88 50 42 53 54 0a 00 00 .ar`a`p`.PBST... e740: 5b 23 5e 5e 2f 04 50 43 49 30 4c 50 43 30 45 43 [#^^/.PCI0LPC0EC e750: 30 5f 4d 55 54 30 ff ff 70 5e 5e 2f 04 50 43 49 0_MUT0..p^^/.PCI e760: 30 4c 50 43 30 45 43 30 5f 43 41 50 30 88 50 42 0LPC0EC0_CAP0.PB e770: 53 54 0a 02 00 70 5e 5e 2f 04 50 43 49 30 4c 50 ST...p^^/.PCI0LP e780: 43 30 45 43 30 5f 56 4f 54 30 88 50 42 53 54 0a C0EC0_VOT0.PBST. e790: 03 00 5b 27 5e 5e 2f 04 50 43 49 30 4c 50 43 30 ..['^^/.PCI0LPC0 e7a0: 45 43 30 5f 4d 55 54 30 5b 23 5e 5e 2f 04 50 43 EC0_MUT0[#^^/.PC e7b0: 49 30 4c 50 43 30 45 43 30 5f 4d 55 54 30 ff ff I0LPC0EC0_MUT0.. e7c0: 70 5e 5e 2f 04 50 43 49 30 4c 50 43 30 45 43 30 p^^/.PCI0LPC0EC0 e7d0: 5f 43 52 54 30 60 5b 27 5e 5e 2f 04 50 43 49 30 _CRT0`['^^/.PCI0 e7e0: 4c 50 43 30 45 43 30 5f 4d 55 54 30 a0 07 93 60 LPC0EC0_MUT0...` e7f0: 0a 00 75 60 a1 2c a0 10 50 57 52 53 a0 0a 7b 60 ..u`.,..PWRS..{` e800: 0b 00 80 00 70 ff 60 a1 19 a0 12 7b 60 0b 00 80 ....p.`....{`... e810: 00 74 0a 00 60 60 7b 60 0b ff ff 60 a1 04 70 ff .t..``{`...`..p. e820: 60 70 60 88 50 42 53 54 0a 01 00 a4 50 42 53 54 `p`.PBST....PBST e830: 5b 82 41 12 4c 49 44 5f 08 5f 48 49 44 0c 41 d0 [.A.LID_._HID.A. e840: 0c 0d 08 5f 50 52 57 12 06 02 0a 0a 0a 03 14 48 ..._PRW........H e850: 09 5f 50 53 57 01 a0 48 04 68 5b 23 5e 5e 2f 04 ._PSW..H.h[#^^/. e860: 50 43 49 30 4c 50 43 30 45 43 30 5f 4d 55 54 30 PCI0LPC0EC0_MUT0 e870: ff ff 70 0a 02 5e 5e 2f 04 50 43 49 30 4c 50 43 ..p..^^/.PCI0LPC e880: 30 45 43 30 5f 57 4b 45 56 5b 27 5e 5e 2f 04 50 0EC0_WKEV['^^/.P e890: 43 49 30 4c 50 43 30 45 43 30 5f 4d 55 54 30 a1 CI0LPC0EC0_MUT0. e8a0: 47 04 5b 23 5e 5e 2f 04 50 43 49 30 4c 50 43 30 G.[#^^/.PCI0LPC0 e8b0: 45 43 30 5f 4d 55 54 30 ff ff 70 0a 00 5e 5e 2f EC0_MUT0..p..^^/ e8c0: 04 50 43 49 30 4c 50 43 30 45 43 30 5f 57 4b 45 .PCI0LPC0EC0_WKE e8d0: 56 5b 27 5e 5e 2f 04 50 43 49 30 4c 50 43 30 45 V['^^/.PCI0LPC0E e8e0: 43 30 5f 4d 55 54 30 14 4b 06 5f 4c 49 44 00 a0 C0_MUT0.K._LID.. e8f0: 0f 93 45 43 4f 4e 0a 00 70 0a 01 4c 49 44 53 a1 ..ECON..p..LIDS. e900: 4e 04 5b 23 5e 5e 2f 04 50 43 49 30 4c 50 43 30 N.[#^^/.PCI0LPC0 e910: 45 43 30 5f 4d 55 54 30 ff ff 70 5e 5e 2f 04 50 EC0_MUT0..p^^/.P e920: 43 49 30 4c 50 43 30 45 43 30 5f 4c 49 44 41 60 CI0LPC0EC0_LIDA` e930: 5b 27 5e 5e 2f 04 50 43 49 30 4c 50 43 30 45 43 ['^^/.PCI0LPC0EC e940: 30 5f 4d 55 54 30 7f 60 0a 01 4c 49 44 53 a4 4c 0_MUT0.`..LIDS.L e950: 49 44 53 5b 82 0f 53 4c 50 42 08 5f 48 49 44 0c IDS[..SLPB._HID. e960: 41 d0 0c 0e 10 4d 05 5c 00 08 48 50 44 54 12 3e A....M.\..HPDT.> e970: 09 0d 4c 45 47 41 43 59 48 50 00 0c 00 00 00 80 ..LEGACYHP...... e980: 0c 00 00 00 80 0d 4e 41 54 49 56 45 48 50 00 0c ......NATIVEHP.. e990: 00 00 00 80 0c 00 00 00 80 0d 54 48 45 52 4d 41 ..........THERMA e9a0: 4c 58 00 0c 00 00 00 80 0c 00 00 00 80 08 44 44 LX............DD e9b0: 42 30 0a 00 08 44 44 42 31 0a 00 08 44 44 42 32 B0...DDB1...DDB2 e9c0: 0a 00 10 45 7e 5f 47 50 45 14 16 54 52 49 47 00 ...E~_GPE..TRIG. e9d0: 54 52 49 45 54 52 49 43 54 52 49 5a 54 52 49 42 TRIETRICTRIZTRIB e9e0: 14 4d 04 54 52 49 42 00 a0 45 04 5c 2f 04 5f 53 .M.TRIB..E.\/._S e9f0: 42 5f 50 43 49 30 53 4d 42 5f 50 30 37 49 70 0a B_PCI0SMB_P07Ip. ea00: 00 5c 2f 04 5f 53 42 5f 50 43 49 30 53 4d 42 5f .\/._SB_PCI0SMB_ ea10: 50 30 37 4f 5b 22 0a 64 70 0a 01 5c 2f 04 5f 53 P07O[".dp..\/._S ea20: 42 5f 50 43 49 30 53 4d 42 5f 50 30 37 4f 14 45 B_PCI0SMB_P07O.E ea30: 04 5f 4c 31 43 00 70 0b ff ff 61 70 5c 2f 04 5f ._L1C.p...ap\/._ ea40: 53 42 5f 50 43 49 30 53 4d 42 5f 4d 49 4e 5f 62 SB_PCI0SMB_MIN_b ea50: 79 62 0a 08 61 70 5c 2f 04 5f 53 42 5f 50 43 49 yb..ap\/._SB_PCI ea60: 30 53 4d 42 5f 53 45 43 5f 62 7d 61 62 61 70 61 0SMB_SEC_b}abapa ea70: 50 38 30 48 14 49 0a 5f 4c 30 38 00 86 5c 2f 03 P80H.I._L08..\/. ea80: 5f 53 42 5f 50 43 49 30 50 42 32 5f 0a 02 86 5c _SB_PCI0PB2_...\ ea90: 2f 03 5f 53 42 5f 50 43 49 30 50 42 34 5f 0a 02 /._SB_PCI0PB4_.. eaa0: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 50 42 35 5f .\/._SB_PCI0PB5_ eab0: 0a 02 86 5c 2f 03 5f 53 42 5f 50 43 49 30 50 42 ...\/._SB_PCI0PB eac0: 36 5f 0a 02 86 5c 2f 03 5f 53 42 5f 50 43 49 30 6_...\/._SB_PCI0 ead0: 50 42 37 5f 0a 02 86 5c 2f 03 5f 53 42 5f 50 43 PB7_...\/._SB_PC eae0: 49 30 53 50 42 30 0a 02 86 5c 2f 03 5f 53 42 5f I0SPB0...\/._SB_ eaf0: 50 43 49 30 53 50 42 31 0a 02 86 5c 2f 03 5f 53 PCI0SPB1...\/._S eb00: 42 5f 50 43 49 30 53 50 42 32 0a 02 86 5c 2f 03 B_PCI0SPB2...\/. eb10: 5f 53 42 5f 50 43 49 30 53 50 42 33 0a 02 14 49 _SB_PCI0SPB3...I eb20: 0a 5f 4c 31 38 00 86 5c 2f 03 5f 53 42 5f 50 43 ._L18..\/._SB_PC eb30: 49 30 4f 48 43 31 0a 02 86 5c 2f 03 5f 53 42 5f I0OHC1...\/._SB_ eb40: 50 43 49 30 4f 48 43 32 0a 02 86 5c 2f 03 5f 53 PCI0OHC2...\/._S eb50: 42 5f 50 43 49 30 4f 48 43 33 0a 02 86 5c 2f 03 B_PCI0OHC3...\/. eb60: 5f 53 42 5f 50 43 49 30 4f 48 43 34 0a 02 86 5c _SB_PCI0OHC4...\ eb70: 2f 03 5f 53 42 5f 50 43 49 30 45 48 43 31 0a 02 /._SB_PCI0EHC1.. eb80: 86 5c 2f 03 5f 53 42 5f 50 43 49 30 45 48 43 32 .\/._SB_PCI0EHC2 eb90: 0a 02 86 5c 2f 03 5f 53 42 5f 50 43 49 30 45 48 ...\/._SB_PCI0EH eba0: 43 33 0a 02 86 5c 2f 03 5f 53 42 5f 50 43 49 30 C3...\/._SB_PCI0 ebb0: 58 48 43 31 0a 02 86 5c 2f 03 5f 53 42 5f 50 43 XHC1...\/._SB_PC ebc0: 49 30 58 48 43 32 0a 02 14 2f 54 52 49 43 00 70 I0XHC2.../TRIC.p ebd0: 80 5c 2f 04 5f 53 42 5f 50 43 49 30 53 4d 42 5f .\/._SB_PCI0SMB_ ebe0: 47 45 31 35 00 5c 2f 04 5f 53 42 5f 50 43 49 30 GE15.\/._SB_PCI0 ebf0: 53 4d 42 5f 45 31 35 43 14 2f 54 52 49 45 00 70 SMB_E15C./TRIE.p ec00: 80 5c 2f 04 5f 53 42 5f 50 43 49 30 53 4d 42 5f .\/._SB_PCI0SMB_ ec10: 47 45 30 35 00 5c 2f 04 5f 53 42 5f 50 43 49 30 GE05.\/._SB_PCI0 ec20: 53 4d 42 5f 45 30 35 43 14 47 0c 5f 4c 30 35 00 SMB_E05C.G._L05. ec30: 5b 22 0a c8 a0 4b 05 5c 2f 04 5f 53 42 5f 50 43 ["...K.\/._SB_PC ec40: 49 30 53 4d 42 5f 45 30 35 43 a0 45 04 5c 2f 04 I0SMB_E05C.E.\/. ec50: 5f 53 42 5f 50 43 49 30 53 4d 42 5f 47 45 30 35 _SB_PCI0SMB_GE05 ec60: 5c 2f 04 5f 53 42 5f 50 43 49 30 53 50 42 30 47 \/._SB_PCI0SPB0G ec70: 48 50 53 5c 2f 04 5f 53 42 5f 50 43 49 30 53 4d HPS\/._SB_PCI0SM ec80: 42 5f 47 45 30 35 0a 00 70 0b 05 0f 50 38 30 48 B_GE05..p...P80H ec90: a1 49 04 a0 46 04 92 5c 2f 04 5f 53 42 5f 50 43 .I..F..\/._SB_PC eca0: 49 30 53 4d 42 5f 47 45 30 35 5c 2f 04 5f 53 42 I0SMB_GE05\/._SB ecb0: 5f 50 43 49 30 53 50 42 30 47 48 50 53 5c 2f 04 _PCI0SPB0GHPS\/. ecc0: 5f 53 42 5f 50 43 49 30 53 4d 42 5f 47 45 30 35 _SB_PCI0SMB_GE05 ecd0: 0a 00 70 0b 05 1f 50 38 30 48 54 52 49 45 86 5c ..p...P80HTRIE.\ ece0: 2f 03 5f 53 42 5f 50 43 49 30 53 50 42 30 0a 01 /._SB_PCI0SPB0.. ecf0: 08 57 4c 41 4e 0a 00 08 57 4c 53 54 0a 01 14 4f .WLAN...WLST...O ed00: 05 5f 4c 30 39 00 70 57 4c 53 54 60 a0 14 93 60 ._L09.pWLST`...` ed10: 0a 01 70 0a 00 57 4c 53 54 70 0b 34 12 50 38 30 ..p..WLSTp.4.P80 ed20: 48 a0 14 93 60 0a 00 70 0a 01 57 4c 53 54 70 0b H...`..p..WLSTp. ed30: 21 43 50 38 30 48 57 4c 45 4e 86 5c 2f 03 5f 53 !CP80HWLEN.\/._S ed40: 42 5f 50 43 49 30 50 42 37 5f 0a 00 86 5c 2f 03 B_PCI0PB7_...\/. ed50: 5f 53 42 5f 50 43 49 30 53 50 42 32 0a 00 14 4f _SB_PCI0SPB2...O ed60: 1f 57 4c 45 4e 00 70 57 4c 53 54 60 70 57 4c 41 .WLEN.pWLST`pWLA ed70: 4e 61 70 0a 00 5c 2f 04 5f 53 42 5f 50 43 49 30 Nap..\/._SB_PCI0 ed80: 53 4d 42 5f 50 30 37 45 70 0a 00 5c 2f 04 5f 53 SMB_P07Ep..\/._S ed90: 42 5f 50 43 49 30 53 4d 42 5f 50 30 44 45 70 0a B_PCI0SMB_P0DEp. eda0: 00 5c 2f 04 5f 53 42 5f 50 43 49 30 53 4d 42 5f .\/._SB_PCI0SMB_ edb0: 50 30 45 45 70 0a 00 5c 2f 04 5f 53 42 5f 50 43 P0EEp..\/._SB_PC edc0: 49 30 53 4d 42 5f 50 42 34 45 70 0a 00 5c 2f 04 I0SMB_PB4Ep..\/. edd0: 5f 53 42 5f 50 43 49 30 53 4d 42 5f 50 43 37 45 _SB_PCI0SMB_PC7E ede0: a0 46 0c 93 60 0a 01 a0 4d 07 93 61 0a 01 70 0a .F..`...M..a..p. edf0: 00 5c 2f 04 5f 53 42 5f 50 43 49 30 53 4d 42 5f .\/._SB_PCI0SMB_ ee00: 50 42 34 4f 70 0a 00 5c 2f 04 5f 53 42 5f 50 43 PB4Op..\/._SB_PC ee10: 49 30 53 4d 42 5f 50 43 37 4f 5c 2f 04 5f 53 42 I0SMB_PC7O\/._SB ee20: 5f 50 43 49 30 50 42 37 5f 58 50 4c 50 0a 01 5b _PCI0PB7_XPLP..[ ee30: 22 0a 64 5b 22 0a 64 5c 2f 03 5f 53 42 5f 50 43 ".d[".d\/._SB_PC ee40: 49 30 58 50 54 52 0a 07 0a 01 5c 2f 04 5f 53 42 I0XPTR....\/._SB ee50: 5f 50 43 49 30 53 50 42 32 47 48 50 53 0a 00 0a _PCI0SPB2GHPS... ee60: 02 5b 22 0a 14 70 0a 01 5c 2f 04 5f 53 42 5f 50 .["..p..\/._SB_P ee70: 43 49 30 53 4d 42 5f 50 30 44 4f 70 0a 01 5c 2f CI0SMB_P0DOp..\/ ee80: 04 5f 53 42 5f 50 43 49 30 53 4d 42 5f 50 30 45 ._SB_PCI0SMB_P0E ee90: 4f 70 0a 01 5c 2f 04 5f 53 42 5f 50 43 49 30 53 Op..\/._SB_PCI0S eea0: 4d 42 5f 50 30 37 4f a1 46 0b 70 0a 00 5c 2f 04 MB_P07O.F.p..\/. eeb0: 5f 53 42 5f 50 43 49 30 53 4d 42 5f 50 30 44 4f _SB_PCI0SMB_P0DO eec0: 70 0a 00 5c 2f 04 5f 53 42 5f 50 43 49 30 53 4d p..\/._SB_PCI0SM eed0: 42 5f 50 30 45 4f 70 0a 00 5c 2f 04 5f 53 42 5f B_P0EOp..\/._SB_ eee0: 50 43 49 30 53 4d 42 5f 50 30 37 4f a0 41 07 93 PCI0SMB_P07O.A.. eef0: 61 0a 01 5c 2f 03 5f 53 42 5f 50 43 49 30 58 50 a..\/._SB_PCI0XP ef00: 54 52 0a 07 0a 00 5c 2f 04 5f 53 42 5f 50 43 49 TR....\/._SB_PCI ef10: 30 53 50 42 32 47 48 50 53 0a 01 0a 02 5c 2f 04 0SPB2GHPS....\/. ef20: 5f 53 42 5f 50 43 49 30 50 42 37 5f 58 50 4c 50 _SB_PCI0PB7_XPLP ef30: 0a 00 70 0a 01 5c 2f 04 5f 53 42 5f 50 43 49 30 ..p..\/._SB_PCI0 ef40: 53 4d 42 5f 50 42 34 4f 70 0a 01 5c 2f 04 5f 53 SMB_PB4Op..\/._S ef50: 42 5f 50 43 49 30 53 4d 42 5f 50 43 37 4f 14 2f B_PCI0SMB_PC7O./ ef60: 54 52 49 5a 00 70 80 5c 2f 04 5f 53 42 5f 50 43 TRIZ.p.\/._SB_PC ef70: 49 30 53 4d 42 5f 47 45 31 36 00 5c 2f 04 5f 53 I0SMB_GE16.\/._S ef80: 42 5f 50 43 49 30 53 4d 42 5f 45 31 36 43 14 49 B_PCI0SMB_E16C.I ef90: 21 5f 4c 31 30 00 a0 41 21 93 5c 2f 04 5f 53 42 !_L10..A!.\/._SB efa0: 5f 50 43 49 30 41 46 44 5f 4f 44 5a 50 0c 01 00 _PCI0AFD_ODZP... efb0: 00 80 a0 4c 10 5c 2f 04 5f 53 42 5f 50 43 49 30 ...L.\/._SB_PCI0 efc0: 53 4d 42 5f 45 31 36 43 5b 22 0a 14 a0 42 0f 5c SMB_E16C["...B.\ efd0: 2f 04 5f 53 42 5f 50 43 49 30 53 4d 42 5f 45 31 /._SB_PCI0SMB_E1 efe0: 36 43 a0 4c 0d 5c 2f 04 5f 53 42 5f 50 43 49 30 6C.L.\/._SB_PCI0 eff0: 53 4d 42 5f 47 45 31 36 70 00 5c 2f 04 5f 53 42 SMB_GE16p.\/._SB f000: 5f 50 43 49 30 53 4d 42 5f 45 31 36 43 a0 47 04 _PCI0SMB_E16C.G. f010: 91 93 5c 2f 04 5f 53 42 5f 50 43 49 30 53 41 54 ..\/._SB_PCI0SAT f020: 41 56 49 44 49 0c 22 10 00 78 93 5c 2f 04 5f 53 AVIDI."..x.\/._S f030: 42 5f 50 43 49 30 53 41 54 41 56 49 44 49 0c 22 B_PCI0SATAVIDI." f040: 10 01 78 86 5c 2f 03 5f 53 42 5f 50 43 49 30 41 ..x.\/._SB_PCI0A f050: 46 44 5f 0a 80 a0 41 06 93 5c 2f 04 5f 53 42 5f FD_...A..\/._SB_ f060: 50 43 49 30 53 41 54 41 56 49 44 49 0c 22 10 04 PCI0SATAVIDI.".. f070: 78 a0 2d 93 5c 2f 04 5f 53 42 5f 50 43 49 30 41 x.-.\/._SB_PCI0A f080: 46 44 5f 48 44 44 30 0a 01 86 5c 2f 04 5f 53 42 FD_HDD0...\/._SB f090: 5f 50 43 49 30 53 41 54 41 4f 44 44 5a 0a 80 a1 _PCI0SATAODDZ... f0a0: 17 86 5c 2f 04 5f 53 42 5f 50 43 49 30 53 41 54 ..\/._SB_PCI0SAT f0b0: 41 4f 44 44 5a 0a 80 70 0b 15 df 50 38 30 48 a1 AODDZ..p...P80H. f0c0: 44 0e 5b 22 0a 14 a0 4d 0d 92 5c 2f 04 5f 53 42 D.["...M..\/._SB f0d0: 5f 50 43 49 30 53 4d 42 5f 47 45 31 36 70 01 5c _PCI0SMB_GE16p.\ f0e0: 2f 04 5f 53 42 5f 50 43 49 30 53 4d 42 5f 45 31 /._SB_PCI0SMB_E1 f0f0: 36 43 a0 47 04 91 93 5c 2f 04 5f 53 42 5f 50 43 6C.G...\/._SB_PC f100: 49 30 53 41 54 41 56 49 44 49 0c 22 10 00 78 93 I0SATAVIDI."..x. f110: 5c 2f 04 5f 53 42 5f 50 43 49 30 53 41 54 41 56 \/._SB_PCI0SATAV f120: 49 44 49 0c 22 10 01 78 86 5c 2f 03 5f 53 42 5f IDI."..x.\/._SB_ f130: 50 43 49 30 41 46 44 5f 0a 80 a0 41 06 93 5c 2f PCI0AFD_...A..\/ f140: 04 5f 53 42 5f 50 43 49 30 53 41 54 41 56 49 44 ._SB_PCI0SATAVID f150: 49 0c 22 10 04 78 a0 2d 93 5c 2f 04 5f 53 42 5f I."..x.-.\/._SB_ f160: 50 43 49 30 41 46 44 5f 48 44 44 30 0a 01 86 5c PCI0AFD_HDD0...\ f170: 2f 04 5f 53 42 5f 50 43 49 30 53 41 54 41 4f 44 /._SB_PCI0SATAOD f180: 44 5a 0a 80 a1 17 86 5c 2f 04 5f 53 42 5f 50 43 DZ.....\/._SB_PC f190: 49 30 53 41 54 41 4f 44 44 5a 0a 80 70 0b 14 df I0SATAODDZ..p... f1a0: 50 38 30 48 54 52 49 5a 10 4b 47 2f 03 5f 53 42 P80HTRIZ.KG/._SB f1b0: 5f 50 43 49 30 53 4d 42 5f 5b 01 53 42 58 30 00 _PCI0SMB_[.SBX0. f1c0: 5b 80 53 4d 42 30 01 0b 00 0b 0a 10 5b 81 2e 53 [.SMB0......[..S f1d0: 4d 42 30 01 48 53 54 30 08 53 4c 56 30 08 43 4e MB0.HST0.SLV0.CN f1e0: 54 30 08 43 4d 44 30 08 41 44 44 30 08 44 54 30 T0.CMD0.ADD0.DT0 f1f0: 30 08 44 54 31 30 08 42 4c 4b 30 08 14 42 06 57 0.DT10.BLK0..B.W f200: 42 44 30 01 70 68 60 70 0a 00 62 70 48 53 54 30 BD0.ph`p..bpHST0 f210: 63 70 7b 63 0a 80 00 61 a2 2c 92 93 61 0a 80 a0 cp{c...a.,..a... f220: 0d 95 60 0a 0a 70 0a 18 62 70 0a 00 61 a1 17 5b ..`..p..bp..a..[ f230: 22 0a 0a 74 60 0a 0a 60 70 48 53 54 30 63 70 7b "..t`..`pHST0cp{ f240: 63 0a 80 00 61 a0 17 92 93 62 0a 18 70 7b 48 53 c...a....b..p{HS f250: 54 30 0a 1c 00 61 a0 06 61 70 0a 07 62 a4 62 14 T0...a..ap..b.b. f260: 4c 06 57 54 43 30 01 70 68 60 70 0a 07 62 70 0a L.WTC0.ph`p..bp. f270: 01 61 a2 4a 04 93 61 0a 01 70 7b 48 53 54 30 0a .a.J..a..p{HST0. f280: 1d 00 63 a0 2f 92 93 63 0a 00 a0 1e 93 63 0a 01 ..c./..c.....c.. f290: a0 0d 95 60 0a 0a 70 0a 18 62 70 0a 00 61 a1 0a ...`..p..bp..a.. f2a0: 5b 22 0a 0a 74 60 0a 0a 60 a1 09 70 0a 07 62 70 ["..t`..`..p..bp f2b0: 0a 00 61 a1 09 70 0a 00 62 70 0a 00 61 70 7d 48 ..a..p..bp..ap}H f2c0: 53 54 30 0a 1f 00 48 53 54 30 a4 62 14 46 1f 53 ST0...HST0.b.F.S f2d0: 42 52 30 03 70 12 08 22 0a 07 0a 00 0a 00 60 70 BR0.p.."......`p f2e0: 7b 68 0a 5f 00 64 a0 2c 92 93 64 0a 03 a0 25 92 {h._.d.,..d...%. f2f0: 93 64 0a 05 a0 1e 92 93 64 0a 07 a0 17 92 93 64 .d......d......d f300: 0a 09 a0 10 92 93 64 0a 0b 70 0a 19 88 60 0a 00 ......d..p...`.. f310: 00 a4 60 a0 4d 1a 93 5b 23 53 42 58 30 ff ff 0a ..`.M..[#SBX0... f320: 00 70 7d 79 69 0a 01 00 0a 01 00 41 44 44 30 70 .p}yi......ADD0p f330: 6a 43 4d 44 30 70 7d 48 53 54 30 0a 1f 00 48 53 jCMD0p}HST0...HS f340: 54 30 70 7b 68 0a a0 00 61 70 7d 7b 43 4e 54 30 T0p{h...ap}{CNT0 f350: 0a 5f 00 61 00 43 4e 54 30 a0 16 93 64 0a 03 70 ._.a.CNT0...d..p f360: 7d 7b 43 4e 54 30 0a a0 00 0a 40 00 43 4e 54 30 }{CNT0....@.CNT0 f370: a0 16 93 64 0a 05 70 7d 7b 43 4e 54 30 0a a0 00 ...d..p}{CNT0... f380: 0a 44 00 43 4e 54 30 a0 16 93 64 0a 07 70 7d 7b .D.CNT0...d..p}{ f390: 43 4e 54 30 0a a0 00 0a 48 00 43 4e 54 30 a0 16 CNT0....H.CNT0.. f3a0: 93 64 0a 09 70 7d 7b 43 4e 54 30 0a a0 00 0a 4c .d..p}{CNT0....L f3b0: 00 43 4e 54 30 a0 2a 93 64 0a 0b 70 7d 48 53 54 .CNT0.*.d..p}HST f3c0: 30 0a 80 00 48 53 54 30 70 0a 00 44 54 30 30 70 0...HST0p..DT00p f3d0: 7d 7b 43 4e 54 30 0a a0 00 0a 54 00 43 4e 54 30 }{CNT0....T.CNT0 f3e0: 70 57 54 43 30 0b e8 03 61 70 61 88 60 0a 00 00 pWTC0...apa.`... f3f0: a0 4d 0b 93 61 0a 00 a0 17 93 64 0a 05 70 0a 01 .M..a.....d..p.. f400: 88 60 0a 01 00 70 44 54 30 30 88 60 0a 02 00 a0 .`...pDT00.`.... f410: 17 93 64 0a 07 70 0a 01 88 60 0a 01 00 70 44 54 ..d..p...`...pDT f420: 30 30 88 60 0a 02 00 a0 26 93 64 0a 09 70 0a 02 00.`....&.d..p.. f430: 88 60 0a 01 00 70 44 54 31 30 62 79 62 0a 08 62 .`...pDT10byb..b f440: 72 62 44 54 30 30 62 70 62 88 60 0a 02 00 a0 4f rbDT00bpb.`....O f450: 05 93 64 0a 0b 70 57 42 44 30 0b f4 01 61 a0 0d ..d..pWBD0...a.. f460: 92 93 61 0a 00 70 61 88 60 0a 00 00 a1 41 04 70 ..a..pa.`....A.p f470: 44 54 30 30 88 60 0a 01 00 70 44 54 30 30 61 70 DT00.`...pDT00ap f480: 43 4e 54 30 62 70 0a 00 62 a2 17 95 62 61 72 0a CNT0bp..b...bar. f490: 02 62 63 70 42 4c 4b 30 88 60 63 00 72 0a 01 62 .bcpBLK0.`c.r..b f4a0: 62 70 7d 48 53 54 30 0a 80 00 48 53 54 30 70 7b bp}HST0...HST0p{ f4b0: 43 4e 54 30 0a 5f 00 43 4e 54 30 5b 27 53 42 58 CNT0._.CNT0['SBX f4c0: 30 a4 60 14 40 16 53 42 57 30 05 70 12 04 01 0a 0.`.@.SBW0.p.... f4d0: 07 60 70 7b 68 0a 5f 00 64 a0 2c 92 93 64 0a 02 .`p{h._.d.,..d.. f4e0: a0 25 92 93 64 0a 04 a0 1e 92 93 64 0a 06 a0 17 .%..d......d.... f4f0: 92 93 64 0a 08 a0 10 92 93 64 0a 0a 70 0a 19 88 ..d......d..p... f500: 60 0a 00 00 a4 60 a0 4b 11 93 5b 23 53 42 58 30 `....`.K..[#SBX0 f510: ff ff 0a 00 70 79 69 0a 01 00 41 44 44 30 70 6a ....pyi...ADD0pj f520: 43 4d 44 30 70 7d 48 53 54 30 0a 1f 00 48 53 54 CMD0p}HST0...HST f530: 30 70 7b 68 0a a0 00 61 70 7d 7b 43 4e 54 30 0a 0p{h...ap}{CNT0. f540: 5f 00 61 00 43 4e 54 30 a0 16 93 64 0a 02 70 7d _.a.CNT0...d..p} f550: 7b 43 4e 54 30 0a a0 00 0a 40 00 43 4e 54 30 a0 {CNT0....@.CNT0. f560: 16 93 64 0a 04 70 7d 7b 43 4e 54 30 0a a0 00 0a ..d..p}{CNT0.... f570: 44 00 43 4e 54 30 a0 1c 93 64 0a 06 70 6c 44 54 D.CNT0...d..plDT f580: 30 30 70 7d 7b 43 4e 54 30 0a a0 00 0a 48 00 43 00p}{CNT0....H.C f590: 4e 54 30 a0 26 93 64 0a 08 7b 6c 0a ff 44 54 30 NT0.&.d..{l..DT0 f5a0: 30 7a 6c 0a 08 44 54 31 30 70 7d 7b 43 4e 54 30 0zl..DT10p}{CNT0 f5b0: 0a a0 00 0a 4c 00 43 4e 54 30 a0 47 04 93 64 0a ....L.CNT0.G..d. f5c0: 0a 70 7d 48 53 54 30 0a 80 00 48 53 54 30 70 43 .p}HST0...HST0pC f5d0: 4e 54 30 61 70 6b 44 54 30 30 70 0a 00 62 a2 12 NT0apkDT00p..b.. f5e0: 95 62 6b 70 88 6c 62 00 42 4c 4b 30 72 0a 01 62 .bkp.lb.BLK0r..b f5f0: 62 70 7d 7b 43 4e 54 30 0a a0 00 0a 54 00 43 4e bp}{CNT0....T.CN f600: 54 30 70 57 54 43 30 0b e8 03 88 60 0a 00 00 70 T0pWTC0....`...p f610: 7b 43 4e 54 30 0a 5f 00 43 4e 54 30 5b 27 53 42 {CNT0._.CNT0['SB f620: 58 30 a4 60 10 4c 11 5f 54 5a 5f 5b 80 53 54 53 X0.`.L._TZ_[.STS f630: 49 00 0c e8 31 0c f8 0a 08 5b 81 12 53 54 53 49 I...1....[..STSI f640: 03 54 53 49 49 08 00 18 54 53 49 44 08 5b 86 4a .TSII...TSID.[.J f650: 07 54 53 49 49 54 53 49 44 01 00 08 54 53 30 31 .TSIITSID...TS01 f660: 08 54 53 30 32 08 54 53 30 33 08 54 53 30 34 08 .TS02.TS03.TS04. f670: 54 53 30 35 08 54 53 30 36 08 54 53 30 37 08 54 TS05.TS06.TS07.T f680: 53 30 38 08 54 53 30 39 08 00 30 54 53 31 30 08 S08.TS09..0TS10. f690: 54 53 31 31 08 54 53 31 32 08 54 53 31 33 08 54 TS11.TS12.TS13.T f6a0: 53 31 34 08 00 48 06 54 53 32 32 08 00 48 07 54 S14..H.TS22..H.T f6b0: 53 33 32 08 00 40 46 54 53 42 46 08 00 40 1f 54 S32..@FTSBF..@.T f6c0: 53 46 45 08 54 53 46 46 08 08 5a 30 43 54 0a 73 SFE.TSFF..Z0CT.s f6d0: 14 48 04 47 5a 58 54 08 7d 54 53 30 33 0a 40 54 .H.GZXT.}TS03.@T f6e0: 53 30 39 70 54 53 30 31 61 70 54 53 31 30 62 7b S09pTS01apTS10b{ f6f0: 54 53 30 33 0a bf 54 53 30 39 72 77 0b 00 01 61 TS03..TS09rw...a f700: 00 62 63 7a 63 0a 05 63 72 0b ac 0a 78 77 63 0a .bczc..cr...xwc. f710: 7d 00 0a 64 00 00 66 a4 66 5b 85 26 54 48 5a 30 }..d..f.f[.&THZ0 f720: 14 14 5f 43 52 54 08 a4 72 0b ac 0a 77 5a 30 43 .._CRT..r...wZ0C f730: 54 0a 0a 00 00 14 0b 5f 54 4d 50 08 a4 47 5a 58 T......_TMP..GZX f740: 54 T FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 a2 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 04 2f 44 45 4c 4c 20 20 FACP...../DELL 0010: 51 41 30 39 20 20 20 00 02 00 00 00 50 54 4c 20 QA09 .....PTL 0020: 02 00 00 00 00 f0 32 5e 00 f0 3a 5e 01 02 09 00 ......2^..:^.... 0030: b0 00 00 00 a0 a1 00 00 00 08 00 00 00 00 00 00 ................ 0040: 04 08 00 00 00 00 00 00 00 00 00 00 08 08 00 00 ................ 0050: 20 08 00 00 00 00 00 00 04 02 00 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 00 11 00 00 e............... 0070: ad 05 00 00 01 08 00 01 64 00 00 00 00 00 00 00 ........d....... 0080: fe 00 00 00 00 f0 32 5e 00 00 00 00 00 f0 3a 5e ......2^......:^ 0090: 00 00 00 00 01 20 00 02 00 08 00 00 00 00 00 00 ..... .......... 00a0: 01 00 00 02 00 00 00 00 00 00 00 00 01 10 00 02 ................ 00b0: 04 08 00 00 00 00 00 00 01 00 00 02 00 00 00 00 ................ 00c0: 00 00 00 00 01 00 00 01 00 00 00 00 00 00 00 00 ................ 00d0: 01 20 00 03 08 08 00 00 00 00 00 00 01 40 00 03 . ...........@.. 00e0: 20 08 00 00 00 00 00 00 01 00 00 03 00 00 00 00 ............... 00f0: 00 00 00 00 .... SLIC @ 0x00000000 0000: 53 4c 49 43 76 01 00 00 01 23 44 45 4c 4c 20 20 SLICv....#DELL 0010: 51 41 30 39 20 20 20 00 02 00 00 00 4c 4f 48 52 QA09 .....LOHR 0020: 01 00 00 00 00 00 00 00 9c 00 00 00 06 02 00 00 ................ 0030: 00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00 .$..RSA1........ 0040: 7f f6 c1 05 be 5c 57 63 a5 8a 68 f3 6e 8f 06 fa .....\Wc..h.n... 0050: af b4 9f 68 82 23 ec 50 40 5a 73 7f ec e4 07 cb ...h.#.P@Zs..... 0060: dc 25 1a 9c e3 e3 66 11 e0 a5 98 06 c5 80 0a fa .%....f......... 0070: 42 93 86 98 e7 d5 1b d4 d7 3a a4 0b ee e2 7d be B........:....}. 0080: 5f 5b 15 0c ab d0 21 de bf e9 b5 6e a4 57 b9 8c _[....!....n.W.. 0090: 0c d2 ba 3a 69 30 76 94 71 a2 64 d7 4c d8 85 bf ...:i0v.q.d.L... 00a0: df a5 6a c8 dc 45 d5 4d 8c b8 8c 05 2f fc 2e 23 ..j..E.M..../..# 00b0: c4 29 c5 6f 3f 29 6c 6d 57 79 0e b6 75 ed 21 95 .).o?)lmWy..u.!. 00c0: 01 00 00 00 b6 00 00 00 00 00 02 00 44 45 4c 4c ............DELL 00d0: 20 20 51 41 30 39 20 20 20 00 57 49 4e 44 4f 57 QA09 .WINDOW 00e0: 53 20 01 00 02 00 00 00 00 00 00 00 00 00 00 00 S .............. 00f0: 00 00 00 00 00 00 33 b8 a7 56 40 af 02 b9 42 a8 ......3..V@...B. 0100: 07 7a d1 57 85 0f 88 e7 04 11 fb 35 34 14 60 b7 .z.W.......54.`. 0110: 78 82 53 7b 67 3b 40 3f 40 c1 01 84 cb 05 c5 30 x.S{g;@?@......0 0120: 7d 36 82 60 f1 24 2e 46 15 9f ce 5a 24 44 5f 7f }6.`.$.F...Z$D_. 0130: cf 5d b8 63 10 82 74 80 f7 7a f0 93 e2 21 2a af .].c..t..z...!*. 0140: 6a 00 e3 1e 1a 36 dc 1e bd 2b 11 08 35 cf 24 52 j....6...+..5.$R 0150: 22 d9 03 53 f2 6b 4b 13 ef 79 63 d9 5f a1 37 da "..S.kK..yc._.7. 0160: 61 87 6f dd c5 07 b4 3e 48 7d 61 48 49 fb 25 d3 a.o....>H}aHI.%. 0170: fc 2e e4 44 ef 38 ...D.8 HPET @ 0x00000000 0000: 48 50 45 54 38 00 00 00 01 b2 44 45 4c 4c 20 20 HPET8.....DELL 0010: 51 41 30 39 20 20 20 00 02 00 00 00 50 54 4c 20 QA09 .....PTL 0020: 02 00 00 00 10 82 53 43 00 08 00 00 00 00 d0 fe ......SC........ 0030: 00 00 00 00 02 14 00 00 ........ APIC @ 0x00000000 0000: 41 50 49 43 7a 00 00 00 02 69 44 45 4c 4c 20 20 APICz....iDELL 0010: 51 41 30 39 20 20 20 00 02 00 00 00 50 54 4c 20 QA09 .....PTL 0020: 02 00 00 00 00 00 e0 fe 01 00 00 00 00 08 00 00 ................ 0030: 01 00 00 00 00 08 01 01 01 00 00 00 00 08 02 02 ................ 0040: 00 00 00 00 00 08 03 03 00 00 00 00 01 0c 02 00 ................ 0050: 00 00 c0 fe 00 00 00 00 02 0a 00 00 02 00 00 00 ................ 0060: 00 00 04 06 00 05 00 01 04 06 01 05 00 01 04 06 ................ 0070: 02 05 00 01 04 06 03 05 00 01 .......... MCFG @ 0x00000000 0000: 4d 43 46 47 3c 00 00 00 01 9f 44 45 4c 4c 20 20 MCFG<.....DELL 0010: 51 41 30 39 20 20 20 00 02 00 00 00 50 54 4c 20 QA09 .....PTL 0020: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f8 ................ 0030: 00 00 00 00 00 00 00 3f 00 00 00 00 .......?.... SBST @ 0x00000000 0000: 53 42 53 54 30 00 00 00 01 c3 44 45 4c 4c 20 20 SBST0.....DELL 0010: 51 41 30 39 20 20 20 00 02 00 00 00 50 54 4c 20 QA09 .....PTL 0020: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ UEFI1 @ 0x00000000 0000: 55 45 46 49 3e 00 00 00 01 0b 44 45 4c 4c 20 20 UEFI>.....DELL 0010: 51 41 30 39 20 20 20 00 02 00 00 00 50 54 4c 20 QA09 .....PTL 0020: 02 00 00 00 e8 63 95 d2 e1 cf 41 4d 8e 54 da 43 .....c....AM.T.C 0030: 22 fe de 5c 36 00 00 b0 30 5e 00 00 00 00 "..\6...0^.... UEFI2 @ 0x00000000 0000: 55 45 46 49 42 00 00 00 01 f0 50 54 4c 20 20 20 UEFIB.....PTL 0010: 43 4f 4d 42 55 46 00 00 01 00 00 00 50 54 4c 20 COMBUF......PTL 0020: 01 00 00 00 be 96 e8 15 df 0c e2 47 9b 97 a2 8a ...........G.... 0030: 39 8b c7 65 36 00 01 00 00 00 28 37 e0 5d 00 00 9..e6.....(7.].. 0040: 00 00 .. SSDT1 @ 0x00000000 0000: 53 53 44 54 26 07 00 00 01 f0 41 4d 44 20 20 20 SSDT&.....AMD 0010: 50 4f 57 45 52 4e 4f 57 01 00 00 00 41 4d 44 20 POWERNOW....AMD 0020: 01 00 00 00 10 40 38 5c 2e 5f 50 52 5f 43 30 30 .....@8\._PR_C00 0030: 30 08 5f 50 43 54 12 2c 02 11 14 0a 11 82 0c 00 0._PCT.,........ 0040: 7f 40 00 00 62 00 01 c0 00 00 00 00 79 00 11 14 .@..b.......y... 0050: 0a 11 82 0c 00 7f 40 00 00 00 00 00 00 00 00 00 ......@......... 0060: 00 79 00 08 5f 50 53 53 12 4a 0e 07 12 20 06 0c .y.._PSS.J... .. 0070: 6c 07 00 00 0c 46 23 00 00 0c 00 00 00 00 0c 00 l....F#......... 0080: 00 00 00 0c 00 00 00 00 0c 00 00 00 00 12 20 06 .............. . 0090: 0c 08 07 00 00 0c d0 20 00 00 0c 00 00 00 00 0c ....... ........ 00a0: 00 00 00 00 0c 01 00 00 00 0c 01 00 00 00 12 20 ............... 00b0: 06 0c 40 06 00 00 0c 14 1c 00 00 0c 00 00 00 00 ..@............. 00c0: 0c 00 00 00 00 0c 02 00 00 00 0c 02 00 00 00 12 ................ 00d0: 20 06 0c 78 05 00 00 0c b0 18 00 00 0c 00 00 00 ..x............ 00e0: 00 0c 00 00 00 00 0c 03 00 00 00 0c 03 00 00 00 ................ 00f0: 12 20 06 0c b0 04 00 00 0c c8 14 00 00 0c 00 00 . .............. 0100: 00 00 0c 00 00 00 00 0c 04 00 00 00 0c 04 00 00 ................ 0110: 00 12 20 06 0c e8 03 00 00 0c ad 12 00 00 0c 00 .. ............. 0120: 00 00 00 0c 00 00 00 00 0c 05 00 00 00 0c 05 00 ................ 0130: 00 00 12 20 06 0c 20 03 00 00 0c 9f 10 00 00 0c ... .. ......... 0140: 00 00 00 00 0c 00 00 00 00 0c 06 00 00 00 0c 06 ................ 0150: 00 00 00 08 58 50 53 53 12 4b 1f 07 12 47 04 08 ....XPSS.K...G.. 0160: 0c 6c 07 00 00 0c 46 23 00 00 0c 00 00 00 00 0c .l....F#........ 0170: 00 00 00 00 11 0b 0a 08 00 00 00 00 00 00 00 00 ................ 0180: 11 0b 0a 08 00 00 00 00 00 00 00 00 11 0b 0a 08 ................ 0190: 00 00 00 00 00 00 00 00 11 0b 0a 08 00 00 00 00 ................ 01a0: 00 00 00 00 12 47 04 08 0c 08 07 00 00 0c d0 20 .....G......... 01b0: 00 00 0c 00 00 00 00 0c 00 00 00 00 11 0b 0a 08 ................ 01c0: 01 00 00 00 00 00 00 00 11 0b 0a 08 01 00 00 00 ................ 01d0: 00 00 00 00 11 0b 0a 08 00 00 00 00 00 00 00 00 ................ 01e0: 11 0b 0a 08 00 00 00 00 00 00 00 00 12 47 04 08 .............G.. 01f0: 0c 40 06 00 00 0c 14 1c 00 00 0c 00 00 00 00 0c .@.............. 0200: 00 00 00 00 11 0b 0a 08 02 00 00 00 00 00 00 00 ................ 0210: 11 0b 0a 08 02 00 00 00 00 00 00 00 11 0b 0a 08 ................ 0220: 00 00 00 00 00 00 00 00 11 0b 0a 08 00 00 00 00 ................ 0230: 00 00 00 00 12 47 04 08 0c 78 05 00 00 0c b0 18 .....G...x...... 0240: 00 00 0c 00 00 00 00 0c 00 00 00 00 11 0b 0a 08 ................ 0250: 03 00 00 00 00 00 00 00 11 0b 0a 08 03 00 00 00 ................ 0260: 00 00 00 00 11 0b 0a 08 00 00 00 00 00 00 00 00 ................ 0270: 11 0b 0a 08 00 00 00 00 00 00 00 00 12 47 04 08 .............G.. 0280: 0c b0 04 00 00 0c c8 14 00 00 0c 00 00 00 00 0c ................ 0290: 00 00 00 00 11 0b 0a 08 04 00 00 00 00 00 00 00 ................ 02a0: 11 0b 0a 08 04 00 00 00 00 00 00 00 11 0b 0a 08 ................ 02b0: 00 00 00 00 00 00 00 00 11 0b 0a 08 00 00 00 00 ................ 02c0: 00 00 00 00 12 47 04 08 0c e8 03 00 00 0c ad 12 .....G.......... 02d0: 00 00 0c 00 00 00 00 0c 00 00 00 00 11 0b 0a 08 ................ 02e0: 05 00 00 00 00 00 00 00 11 0b 0a 08 05 00 00 00 ................ 02f0: 00 00 00 00 11 0b 0a 08 00 00 00 00 00 00 00 00 ................ 0300: 11 0b 0a 08 00 00 00 00 00 00 00 00 12 47 04 08 .............G.. 0310: 0c 20 03 00 00 0c 9f 10 00 00 0c 00 00 00 00 0c . .............. 0320: 00 00 00 00 11 0b 0a 08 06 00 00 00 00 00 00 00 ................ 0330: 11 0b 0a 08 06 00 00 00 00 00 00 00 11 0b 0a 08 ................ 0340: 00 00 00 00 00 00 00 00 11 0b 0a 08 00 00 00 00 ................ 0350: 00 00 00 00 08 5f 50 53 44 12 18 01 12 15 05 0a ....._PSD....... 0360: 05 0a 00 0c 00 00 00 00 0c fc 00 00 00 0c 02 00 ................ 0370: 00 00 08 5f 50 50 43 0a 00 08 5f 43 53 54 12 26 ..._PPC..._CST.& 0380: 02 0a 01 12 21 04 11 14 0a 11 82 0c 00 01 08 00 ....!........... 0390: 01 41 08 00 00 00 00 00 00 79 00 0a 02 0b 64 00 .A.......y....d. 03a0: 0c 00 00 00 00 10 40 38 5c 2e 5f 50 52 5f 43 30 ......@8\._PR_C0 03b0: 30 31 08 5f 50 43 54 12 2c 02 11 14 0a 11 82 0c 01._PCT.,....... 03c0: 00 7f 40 00 00 62 00 01 c0 00 00 00 00 79 00 11 ..@..b.......y.. 03d0: 14 0a 11 82 0c 00 7f 40 00 00 00 00 00 00 00 00 .......@........ 03e0: 00 00 79 00 08 5f 50 53 53 12 4a 0e 07 12 20 06 ..y.._PSS.J... . 03f0: 0c 6c 07 00 00 0c 46 23 00 00 0c 00 00 00 00 0c .l....F#........ 0400: 00 00 00 00 0c 00 00 00 00 0c 00 00 00 00 12 20 ............... 0410: 06 0c 08 07 00 00 0c d0 20 00 00 0c 00 00 00 00 ........ ....... 0420: 0c 00 00 00 00 0c 01 00 00 00 0c 01 00 00 00 12 ................ 0430: 20 06 0c 40 06 00 00 0c 14 1c 00 00 0c 00 00 00 ..@............ 0440: 00 0c 00 00 00 00 0c 02 00 00 00 0c 02 00 00 00 ................ 0450: 12 20 06 0c 78 05 00 00 0c b0 18 00 00 0c 00 00 . ..x........... 0460: 00 00 0c 00 00 00 00 0c 03 00 00 00 0c 03 00 00 ................ 0470: 00 12 20 06 0c b0 04 00 00 0c c8 14 00 00 0c 00 .. ............. 0480: 00 00 00 0c 00 00 00 00 0c 04 00 00 00 0c 04 00 ................ 0490: 00 00 12 20 06 0c e8 03 00 00 0c ad 12 00 00 0c ... ............ 04a0: 00 00 00 00 0c 00 00 00 00 0c 05 00 00 00 0c 05 ................ 04b0: 00 00 00 12 20 06 0c 20 03 00 00 0c 9f 10 00 00 .... .. ........ 04c0: 0c 00 00 00 00 0c 00 00 00 00 0c 06 00 00 00 0c ................ 04d0: 06 00 00 00 08 58 50 53 53 12 4b 1f 07 12 47 04 .....XPSS.K...G. 04e0: 08 0c 6c 07 00 00 0c 46 23 00 00 0c 00 00 00 00 ..l....F#....... 04f0: 0c 00 00 00 00 11 0b 0a 08 00 00 00 00 00 00 00 ................ 0500: 00 11 0b 0a 08 00 00 00 00 00 00 00 00 11 0b 0a ................ 0510: 08 00 00 00 00 00 00 00 00 11 0b 0a 08 00 00 00 ................ 0520: 00 00 00 00 00 12 47 04 08 0c 08 07 00 00 0c d0 ......G......... 0530: 20 00 00 0c 00 00 00 00 0c 00 00 00 00 11 0b 0a ............... 0540: 08 01 00 00 00 00 00 00 00 11 0b 0a 08 01 00 00 ................ 0550: 00 00 00 00 00 11 0b 0a 08 00 00 00 00 00 00 00 ................ 0560: 00 11 0b 0a 08 00 00 00 00 00 00 00 00 12 47 04 ..............G. 0570: 08 0c 40 06 00 00 0c 14 1c 00 00 0c 00 00 00 00 ..@............. 0580: 0c 00 00 00 00 11 0b 0a 08 02 00 00 00 00 00 00 ................ 0590: 00 11 0b 0a 08 02 00 00 00 00 00 00 00 11 0b 0a ................ 05a0: 08 00 00 00 00 00 00 00 00 11 0b 0a 08 00 00 00 ................ 05b0: 00 00 00 00 00 12 47 04 08 0c 78 05 00 00 0c b0 ......G...x..... 05c0: 18 00 00 0c 00 00 00 00 0c 00 00 00 00 11 0b 0a ................ 05d0: 08 03 00 00 00 00 00 00 00 11 0b 0a 08 03 00 00 ................ 05e0: 00 00 00 00 00 11 0b 0a 08 00 00 00 00 00 00 00 ................ 05f0: 00 11 0b 0a 08 00 00 00 00 00 00 00 00 12 47 04 ..............G. 0600: 08 0c b0 04 00 00 0c c8 14 00 00 0c 00 00 00 00 ................ 0610: 0c 00 00 00 00 11 0b 0a 08 04 00 00 00 00 00 00 ................ 0620: 00 11 0b 0a 08 04 00 00 00 00 00 00 00 11 0b 0a ................ 0630: 08 00 00 00 00 00 00 00 00 11 0b 0a 08 00 00 00 ................ 0640: 00 00 00 00 00 12 47 04 08 0c e8 03 00 00 0c ad ......G......... 0650: 12 00 00 0c 00 00 00 00 0c 00 00 00 00 11 0b 0a ................ 0660: 08 05 00 00 00 00 00 00 00 11 0b 0a 08 05 00 00 ................ 0670: 00 00 00 00 00 11 0b 0a 08 00 00 00 00 00 00 00 ................ 0680: 00 11 0b 0a 08 00 00 00 00 00 00 00 00 12 47 04 ..............G. 0690: 08 0c 20 03 00 00 0c 9f 10 00 00 0c 00 00 00 00 .. ............. 06a0: 0c 00 00 00 00 11 0b 0a 08 06 00 00 00 00 00 00 ................ 06b0: 00 11 0b 0a 08 06 00 00 00 00 00 00 00 11 0b 0a ................ 06c0: 08 00 00 00 00 00 00 00 00 11 0b 0a 08 00 00 00 ................ 06d0: 00 00 00 00 00 08 5f 50 53 44 12 18 01 12 15 05 ......_PSD...... 06e0: 0a 05 0a 00 0c 00 00 00 00 0c fc 00 00 00 0c 02 ................ 06f0: 00 00 00 08 5f 50 50 43 0a 00 08 5f 43 53 54 12 ...._PPC..._CST. 0700: 26 02 0a 01 12 21 04 11 14 0a 11 82 0c 00 01 08 &....!.......... 0710: 00 01 41 08 00 00 00 00 00 00 79 00 0a 02 0b 64 ..A.......y....d 0720: 00 0c 00 00 00 00 ...... SSDT2 @ 0x00000000 0000: 53 53 44 54 0a 19 00 00 02 af 41 4d 44 00 00 00 SSDT......AMD... 0010: 41 4c 49 42 00 00 00 00 01 00 00 00 4d 53 46 54 ALIB........MSFT 0020: 00 00 00 04 10 85 8e 01 5c 5f 53 42 5f 08 41 30 ........\_SB_.A0 0030: 30 31 0a 06 08 41 44 30 31 0c 00 00 00 f8 06 41 01...AD01......A 0040: 44 30 31 41 30 39 31 08 41 44 30 37 12 43 07 08 D01A091.AD07.C.. 0050: 11 0d 0a 0a 00 00 00 00 00 00 00 00 00 00 11 0d ................ 0060: 0a 0a 10 17 08 0f 01 31 01 04 02 00 11 0d 0a 0a .......1........ 0070: 04 04 04 04 01 30 01 00 01 00 11 0d 0a 0a 05 05 .....0.......... 0080: 05 05 02 30 01 00 01 00 11 0d 0a 0a 06 06 06 06 ...0............ 0090: 03 30 01 00 02 00 11 0d 0a 0a 07 07 07 07 04 30 .0.............0 00a0: 01 00 02 00 11 0d 0a 0a 00 03 00 03 00 30 01 00 .............0.. 00b0: 02 00 11 0d 0a 0a 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 06 41 44 30 37 41 30 39 32 08 41 30 39 33 11 04 .AD07A092.A093.. 00d0: 0b 00 01 14 41 05 41 4c 49 42 02 a0 0b 93 68 0a ....A.ALIB....h. 00e0: 01 a4 41 30 33 35 69 a0 0b 93 68 0a 02 a4 41 30 ..A035i...h...A0 00f0: 33 37 69 a0 0b 93 68 0a 03 a4 41 30 34 38 69 a0 37i...h...A048i. 0100: 0b 93 68 0a 04 a4 41 30 37 33 69 a0 0a 93 68 0a ..h...A073i...h. 0110: 05 a4 41 30 39 34 a0 0b 93 68 0a 06 a4 41 30 37 ..A094...h...A07 0120: 37 69 a4 0a 00 14 09 41 30 39 34 08 a4 0a 00 14 7i.....A094..... 0130: 31 41 30 30 38 0a 72 41 30 39 31 79 68 0a 0c 00 1A008.rA091yh... 0140: 60 72 69 60 60 5b 80 41 30 39 35 00 60 0a 04 5b `ri``[.A095.`..[ 0150: 81 0b 41 30 39 35 03 41 30 39 36 20 a4 41 30 39 ..A095.A096 .A09 0160: 36 14 32 41 30 30 39 0b 72 41 30 39 31 79 68 0a 6.2A009.rA091yh. 0170: 0c 00 60 72 69 60 60 5b 80 41 30 39 35 00 60 0a ..`ri``[.A095.`. 0180: 04 5b 81 0b 41 30 39 35 03 41 30 39 36 20 70 6a .[..A095.A096 pj 0190: 41 30 39 36 14 1c 41 30 35 38 0c 70 41 30 30 38 A096..A058.pA008 01a0: 68 69 60 7d 7b 60 6a 00 6b 60 41 30 30 39 68 69 hi`}{`j.k`A009hi 01b0: 60 5b 01 41 30 39 37 00 14 32 41 30 35 39 02 5b `[.A097..2A059.[ 01c0: 23 41 30 39 37 ff ff 70 79 72 68 0a 02 00 0a 03 #A097..pyrh..... 01d0: 00 60 41 30 30 39 60 0a e0 69 70 41 30 30 38 60 .`A009`..ipA008` 01e0: 0a e4 60 5b 27 41 30 39 37 a4 60 14 2f 41 30 39 ..`['A097.`./A09 01f0: 38 03 5b 23 41 30 39 37 ff ff 70 79 72 68 0a 02 8.[#A097..pyrh.. 0200: 00 0a 03 00 60 41 30 30 39 60 0a e0 69 41 30 30 ....`A009`..iA00 0210: 39 60 0a e4 6a 5b 27 41 30 39 37 14 1c 41 30 35 9`..j['A097..A05 0220: 36 04 70 41 30 35 39 68 69 60 7d 7b 60 6a 00 6b 6.pA059hi`}{`j.k 0230: 60 41 30 39 38 68 69 60 5b 01 41 30 39 39 00 14 `A098hi`[.A099.. 0240: 29 41 30 31 36 03 5b 23 41 30 39 39 ff ff 41 30 )A016.[#A099..A0 0250: 30 39 68 69 6a 70 41 30 30 38 68 72 69 0a 04 00 09hijpA008hri... 0260: 60 5b 27 41 30 39 39 a4 60 14 26 41 30 34 39 04 `['A099.`.&A049. 0270: 5b 23 41 30 39 39 ff ff 41 30 30 39 68 69 6a 41 [#A099..A009hijA 0280: 30 30 39 68 72 69 0a 04 00 6b 5b 27 41 30 39 39 009hri...k['A099 0290: 14 1e 41 30 31 37 05 70 41 30 31 36 68 69 6a 60 ..A017.pA016hij` 02a0: 7d 7b 60 6b 00 6c 60 41 30 34 39 68 69 6a 60 14 }{`k.l`A049hij`. 02b0: 0f 41 30 38 31 01 a4 83 88 41 30 39 32 68 00 14 .A081....A092h.. 02c0: 42 05 41 30 36 35 02 70 0a 34 61 a0 11 93 41 30 B.A065.p.4a...A0 02d0: 30 38 68 0a 00 0c ff ff ff ff a4 0a 00 70 0a 01 08h..........p.. 02e0: 60 a2 2e 93 60 0a 01 70 7b 41 30 30 38 68 61 0a `...`..p{A008ha. 02f0: ff 00 61 a0 06 93 61 0a 00 a5 a0 11 93 7b 41 30 ..a...a......{A0 0300: 30 38 68 61 0a ff 00 69 70 0a 00 60 a1 03 75 61 08ha...ip..`..ua 0310: a4 61 14 47 09 41 30 36 34 0a 5b 80 50 4d 49 4f .a.G.A064.[.PMIO 0320: 01 0b d6 0c 0a 02 5b 81 10 50 4d 49 4f 01 50 4d ......[..PMIO.PM 0330: 52 49 08 50 4d 52 44 08 5b 86 12 50 4d 52 49 50 RI.PMRD.[..PMRIP 0340: 4d 52 44 01 00 40 70 41 42 41 52 20 5b 80 41 43 MRD..@pABAR [.AC 0350: 46 47 01 41 42 41 52 0a 08 5b 81 10 41 43 46 47 FG.ABAR..[..ACFG 0360: 03 41 42 49 58 20 41 42 44 41 20 70 0a 00 60 a0 .ABIX ABDA p..`. 0370: 17 93 69 0a 00 70 0c 68 00 00 80 41 42 49 58 70 ..i..p.h...ABIXp 0380: 41 42 44 41 60 a4 60 a1 22 70 0c 68 00 00 80 41 ABDA`.`."p.h...A 0390: 42 49 58 70 41 42 44 41 60 7d 7b 60 0c fc ff ff BIXpABDA`}{`.... 03a0: ff 00 68 60 70 60 41 42 44 41 14 48 05 41 30 38 ..h`p`ABDA.H.A08 03b0: 37 01 70 41 30 31 36 0a 00 0a 60 0a cd 60 75 68 7.pA016...`..`uh 03c0: 7d 7b 60 0c ff ff ff fe 00 7b 80 7b 60 0c 00 00 }{`......{.{`... 03d0: 00 01 00 00 0c 00 00 00 01 00 60 7d 7b 60 0c ff ..........`}{`.. 03e0: ff 00 fd 00 79 68 0a 10 00 60 41 30 34 39 0a 00 ....yh...`A049.. 03f0: 0a 60 0a cd 60 70 41 30 31 36 0a 00 0a 60 0a ce .`..`pA016...`.. 0400: 60 a4 60 14 47 0a 41 30 38 38 03 70 41 30 31 36 `.`.G.A088.pA016 0410: 0a 00 0a 60 0a cd 60 70 7b 69 0b ff ff 00 61 7d ...`..`p{i....a} 0420: 7b 60 0c ff ff ff fe 00 7b 80 7b 60 0c 00 00 00 {`......{.{`.... 0430: 01 00 00 0c 00 00 00 01 00 60 7d 7b 60 0c 00 00 .........`}{`... 0440: 00 fd 00 79 68 0a 10 00 60 7d 60 0c 00 00 00 02 ...yh...`}`..... 0450: 60 7d 60 61 60 41 30 34 39 0a 00 0a 60 0a cd 60 `}`a`A049...`..` 0460: a0 4a 04 93 6a 0a 01 70 7a 69 0a 10 00 61 7d 7b .J..j..pzi...a}{ 0470: 60 0c ff ff ff fe 00 7b 80 7b 60 0c 00 00 00 01 `......{.{`..... 0480: 00 00 0c 00 00 00 01 00 60 7d 7b 60 0c 00 00 00 ........`}{`.... 0490: ff 00 79 72 68 0a 01 00 0a 10 00 60 7d 60 61 60 ..yrh......`}`a` 04a0: 41 30 34 39 0a 00 0a 60 0a cd 60 14 4f 04 41 30 A049...`..`.O.A0 04b0: 31 31 02 7d 79 68 0a 03 00 0a 01 60 41 30 38 38 11.}yh.....`A088 04c0: 0a 03 60 0a 01 a0 15 90 69 0a 01 a2 0f 92 93 7b ..`.....i......{ 04d0: 41 30 38 37 0a 03 0a 02 00 0a 02 a0 15 90 69 0a A087..........i. 04e0: 02 a2 0f 92 93 7b 41 30 38 37 0a 03 0a 04 00 0a .....{A087...... 04f0: 04 41 30 38 38 0a 03 0a 00 0a 01 14 18 41 30 31 .A088........A01 0500: 30 02 41 30 38 38 0a 0b 68 0a 00 41 30 38 38 0a 0.A088..h..A088. 0510: 05 69 0a 01 14 19 41 30 30 37 01 41 30 38 38 0a .i....A007.A088. 0520: 0b 68 0a 00 70 41 30 38 37 0a 05 60 a4 60 14 49 .h..pA087..`.`.I 0530: 07 41 30 38 39 01 70 7d 7b 68 0a ff 00 0c 00 50 .A089.p}{h.....P 0540: 86 01 00 60 70 7d 7b 68 0c 00 ff ff ff 00 0a 04 ...`p}{h........ 0550: 00 61 70 7d 79 0a 03 0a 1e 00 79 0a 01 0a 12 00 .ap}y.....y..... 0560: 00 62 41 30 31 30 0b 00 86 60 41 30 31 30 0b 04 .bA010...`A010.. 0570: 86 61 41 30 31 30 0b 08 86 62 a0 12 93 7a 68 0a .aA010...b...zh. 0580: 10 00 0b 00 fe 41 30 31 31 0a 0d 0a 03 a0 12 93 .....A011....... 0590: 7a 68 0a 10 00 0b 30 fe 41 30 31 31 0a 0b 0a 03 zh....0.A011.... 05a0: a4 41 30 30 37 0b 50 86 14 44 06 41 30 39 30 02 .A007.P..D.A090. 05b0: 70 7d 7b 68 0a ff 00 0c 00 50 86 01 00 60 70 7d p}{h.....P...`p} 05c0: 7b 68 0c 00 ff ff ff 00 0a 04 00 61 70 7d 79 0a {h.........ap}y. 05d0: 03 0a 1e 00 79 0a 01 0a 12 00 00 62 7d 62 79 0a ....y......b}by. 05e0: 01 0a 10 00 62 41 30 31 30 0b 00 86 60 41 30 31 ....bA010...`A01 05f0: 30 0b 04 86 61 41 30 31 30 0b 08 86 62 41 30 31 0...aA010...bA01 0600: 30 0b 50 86 69 41 30 31 31 0a 0b 0a 03 08 41 44 0.P.iA011.....AD 0610: 30 32 0a 03 06 41 44 30 32 41 30 31 38 08 41 44 02...AD02A018.AD 0620: 30 33 0a 03 06 41 44 30 33 41 30 31 39 08 41 44 03...AD03A019.AD 0630: 30 34 0a 00 06 41 44 30 34 41 30 32 30 08 41 44 04...AD04A020.AD 0640: 30 35 0a 01 06 41 44 30 35 41 30 32 31 08 41 44 05...AD05A021.AD 0650: 30 36 12 12 08 0a 00 0a 02 0a 01 0a 01 0a 00 0a 06.............. 0660: 00 0a 02 0a 00 06 41 44 30 36 41 30 32 32 08 41 ......AD06A022.A 0670: 44 30 38 12 12 08 0a 00 0a 00 0a 00 0a 00 0a 00 D08............. 0680: 0a 00 0a 00 0a 00 06 41 44 30 38 41 30 32 33 08 .......AD08A023. 0690: 41 30 32 34 0a 00 08 41 30 32 35 0a 00 08 41 30 A024...A025...A0 06a0: 32 36 0a 01 08 41 30 32 37 12 12 08 0a 00 0a 00 26...A027....... 06b0: 0a 00 0a 00 0a 00 0a 00 0a 00 0a 00 08 41 30 32 .............A02 06c0: 38 12 12 08 0a 00 0a 00 0a 00 0a 00 0a 00 0a 00 8............... 06d0: 0a 00 0a 00 08 41 30 32 39 12 12 08 0a 00 0a 00 .....A029....... 06e0: 0a 00 0a 00 0a 00 0a 00 0a 00 0a 00 08 41 44 30 .............AD0 06f0: 39 12 12 08 0a 00 0a 00 0a 00 0a 00 0a 00 0a 00 9............... 0700: 0a 00 0a 00 06 41 44 30 39 41 30 33 30 08 41 30 .....AD09A030.A0 0710: 33 31 12 12 08 0a 01 0a 01 0a 01 0a 01 0a 01 0a 31.............. 0720: 01 0a 01 0a 01 08 41 30 33 32 12 12 08 0a 00 0a ......A032...... 0730: 00 0a 00 0a 00 0a 00 0a 00 0a 00 0a 00 08 41 30 ..............A0 0740: 33 34 0a 00 14 4a 09 41 30 33 35 09 70 83 88 68 34...J.A035.p..h 0750: 0a 02 00 61 70 41 30 31 33 60 70 61 41 30 32 35 ...apA013`paA025 0760: 7d 79 0a 01 0a 05 00 79 0a 01 0a 06 00 62 7d 79 }y.....y.....b}y 0770: 41 30 32 35 0a 05 00 79 41 30 32 36 0a 06 00 63 A025...yA026...c 0780: 41 30 31 37 0a 00 0a 60 0a f4 80 62 00 7b 62 63 A017...`...b.{bc 0790: 00 a0 07 93 61 60 a4 0a 00 41 30 30 36 41 30 32 ....a`...A006A02 07a0: 35 a0 14 93 41 30 31 38 0a 04 41 30 31 32 0a 01 5...A018..A012.. 07b0: 41 30 31 34 0a 01 a0 15 91 92 94 41 30 31 38 0a A014.......A018. 07c0: 01 92 95 41 30 31 38 0a 04 a4 0a 00 a0 0b 93 41 ...A018........A 07d0: 30 32 34 0a 00 a4 0a 00 41 30 33 36 a4 0a 00 14 024.....A036.... 07e0: 24 41 30 33 37 01 70 41 30 33 38 68 67 70 83 88 $A037.pA038hgp.. 07f0: 67 0a 02 00 60 a0 08 92 93 60 0a 02 a4 67 41 30 g...`....`...gA0 0800: 33 36 a4 67 14 4e 1b 41 30 33 38 01 08 41 30 33 36.g.N.A038..A03 0810: 39 0a 00 70 0a 00 41 30 33 34 70 11 03 0a 0a 67 9..p..A034p....g 0820: 8b 67 0a 00 41 30 34 30 70 0a 03 41 30 34 30 8c .g..A040p..A040. 0830: 67 0a 02 41 30 34 31 70 0a 01 41 30 34 31 a0 14 g..A041p..A041.. 0840: 91 92 94 41 30 31 38 0a 01 92 95 41 30 31 38 0a ...A018....A018. 0850: 04 a4 67 a0 0a 93 41 30 32 34 0a 00 a4 67 8b 68 ..g...A024...g.h 0860: 0a 02 41 30 34 32 8b 68 0a 04 41 30 34 33 8b 68 ..A042.h..A043.h 0870: 0a 06 41 30 34 34 8c 68 0a 08 41 30 34 35 8c 68 ..A044.h..A045.h 0880: 0a 09 41 30 34 36 7b 7a 41 30 34 32 0a 08 00 0a ..A046{zA042.... 0890: ff 41 30 33 39 a2 47 05 92 94 41 30 33 34 41 30 .A039.G...A034A0 08a0: 30 31 a0 45 04 93 41 30 34 37 41 30 33 34 0a 01 01.E..A047A034.. 08b0: 70 41 30 30 38 79 72 41 30 33 34 0a 02 00 0a 03 pA008yrA034..... 08c0: 00 0a 18 61 7b 7a 61 0a 10 00 0a ff 62 7b 7a 61 ...a{za.....b{za 08d0: 0a 08 00 0a ff 61 a0 11 90 92 95 41 30 33 39 61 .....a.....A039a 08e0: 92 94 41 30 33 39 62 a5 75 41 30 33 34 a0 0c 94 ..A039b.uA034... 08f0: 41 30 33 34 41 30 30 31 a4 67 a0 1e 93 83 88 41 A034A001.g.....A 0900: 30 32 37 41 30 33 34 00 0a 00 70 41 30 34 32 88 027A034...pA042. 0910: 41 30 32 37 41 30 33 34 00 a1 16 a0 14 92 93 83 A027A034........ 0920: 88 41 30 32 37 41 30 33 34 00 41 30 34 32 a4 67 .A027A034.A042.g 0930: 70 0a 00 88 41 30 33 32 41 30 33 34 00 a0 15 93 p...A032A034.... 0940: 41 30 34 36 0a 00 70 0a 00 88 41 30 32 37 41 30 A046..p...A027A0 0950: 33 34 00 a0 15 93 41 30 34 36 0a 01 70 0a 01 88 34....A046..p... 0960: 41 30 33 32 41 30 33 34 00 a0 15 93 41 30 34 36 A032A034....A046 0970: 0a 02 70 0a 01 88 41 30 32 39 41 30 33 34 00 a0 ..p...A029A034.. 0980: 15 93 41 30 34 36 0a 03 70 0a 02 88 41 30 32 39 ..A046..p...A029 0990: 41 30 33 34 00 a0 24 93 7b 41 30 34 33 41 30 34 A034..$.{A043A04 09a0: 34 00 0a 01 70 83 88 41 30 32 32 41 30 33 34 00 4...p..A022A034. 09b0: 88 41 30 32 39 41 30 33 34 00 70 0a 02 41 30 34 .A029A034.p..A04 09c0: 31 a4 67 14 19 41 30 34 37 09 a0 0f 93 83 88 41 1.g..A047......A 09d0: 30 32 32 68 00 0a 00 a4 0a 00 a4 0a 01 14 43 13 022h..........C. 09e0: 41 30 34 38 09 70 11 04 0b 00 01 67 70 0a 03 88 A048.p.....gp... 09f0: 67 0a 00 00 70 0a 00 88 67 0a 01 00 70 0a 00 88 g...p...g...p... 0a00: 67 0a 02 00 70 83 88 68 0a 02 00 41 30 32 34 70 g...p..h...A024p 0a10: 41 30 31 36 0a 00 0a 60 0a f4 60 a0 19 93 41 30 A016...`..`...A0 0a20: 32 34 0a 01 a0 0b 93 7b 60 0a 01 00 0a 01 a4 67 24.....{`......g 0a30: 7d 60 0a 01 60 a0 1b 93 41 30 32 34 0a 00 a0 0b }`..`...A024.... 0a40: 93 7b 60 0a 01 00 0a 00 a4 67 7b 60 80 0a 01 00 .{`......g{`.... 0a50: 60 7d 60 79 41 30 31 38 0a 01 00 60 41 30 34 39 `}`yA018...`A049 0a60: 0a 00 0a 60 0a f4 60 41 30 35 30 71 41 30 32 38 ...`..`A050qA028 0a70: 71 41 30 32 37 41 30 30 36 41 30 32 35 a0 14 93 qA027A006A025... 0a80: 41 30 31 38 0a 04 41 30 31 32 0a 01 41 30 31 34 A018..A012..A014 0a90: 0a 01 a0 4c 07 90 94 41 30 31 38 0a 01 95 41 30 ...L...A018...A0 0aa0: 31 38 0a 04 a0 46 05 93 41 30 31 38 0a 02 41 30 18...F..A018..A0 0ab0: 35 30 71 41 30 32 32 71 41 30 33 30 70 0a 00 41 50qA022qA030p..A 0ac0: 30 33 34 a2 37 92 94 41 30 33 34 41 30 30 31 a0 034.7..A034A001. 0ad0: 26 92 93 83 88 41 30 32 33 41 30 33 34 00 0a 00 &....A023A034... 0ae0: 70 83 88 41 30 32 33 41 30 33 34 00 88 41 30 33 p..A023A034..A03 0af0: 30 41 30 33 34 00 75 41 30 33 34 a1 0f 41 30 35 0A034.uA034..A05 0b00: 30 71 41 30 33 31 71 41 30 33 30 41 30 33 36 a4 0qA031qA030A036. 0b10: 67 08 41 30 35 31 12 12 08 0a 00 0a 00 0a 00 0a g.A051.......... 0b20: 00 0a 00 0a 00 0a 00 0a 00 14 42 12 41 30 33 36 ..........B.A036 0b30: 08 70 0a 00 41 30 33 34 41 30 35 30 71 41 30 33 .p..A034A050qA03 0b40: 31 71 41 30 35 31 a2 30 92 94 41 30 33 34 41 30 1qA051.0..A034A0 0b50: 30 31 a0 1f 93 41 30 34 37 41 30 33 34 0a 01 70 01...A047A034..p 0b60: 41 30 35 32 41 30 33 34 88 41 30 35 31 41 30 33 A052A034.A051A03 0b70: 34 00 75 41 30 33 34 a0 1f 92 93 89 41 30 33 32 4.uA034.....A032 0b80: 01 0a 01 00 0a 00 0a 00 ff 41 30 35 30 71 41 30 .........A050qA0 0b90: 33 31 71 41 30 35 31 a0 27 92 93 89 41 30 35 31 31qA051.'...A051 0ba0: 01 0a 02 00 0a 00 0a 00 ff 41 30 31 34 0a 02 41 .........A014..A 0bb0: 30 35 33 41 30 31 39 0a 01 41 30 31 32 0a 02 70 053A019..A012..p 0bc0: 0a 00 41 30 33 34 a2 4e 05 92 94 41 30 33 34 41 ..A034.N...A034A 0bd0: 30 30 31 a0 12 93 41 30 34 37 41 30 33 34 0a 00 001...A047A034.. 0be0: 75 41 30 33 34 9f 70 83 88 41 30 33 30 41 30 33 uA034.p..A030A03 0bf0: 34 00 60 70 83 88 41 30 35 31 41 30 33 34 00 62 4.`p..A051A034.b 0c00: a0 0a 93 60 62 75 41 30 33 34 9f 70 62 88 41 30 ...`buA034.pb.A0 0c10: 33 30 41 30 33 34 00 41 30 35 34 41 30 33 34 62 30A034.A054A034b 0c20: 75 41 30 33 34 a0 26 93 89 41 30 35 31 01 0a 02 uA034.&..A051... 0c30: 00 0a 00 0a 00 ff 41 30 31 32 0a 01 41 30 35 33 ......A012..A053 0c40: 41 30 32 30 0a 00 41 30 31 34 0a 01 14 43 05 41 A020..A014...C.A 0c50: 30 35 32 01 70 0a 02 60 a0 39 93 83 88 41 30 32 052.p..`.9...A02 0c60: 37 68 00 0a 00 a0 14 91 93 41 30 31 33 0a 01 93 7h.......A013... 0c70: 41 30 31 38 0a 03 70 0a 01 60 a0 17 92 93 83 88 A018..p..`...... 0c80: 41 30 32 33 68 00 0a 00 70 83 88 41 30 32 33 68 A023h...p..A023h 0c90: 00 60 a1 0b 70 83 88 41 30 32 39 68 00 60 a4 60 .`..p..A029h.`.` 0ca0: 14 43 0e 41 30 35 34 02 a0 15 93 68 0a 06 41 30 .C.A054....h..A0 0cb0: 31 37 0a 00 0a 60 0a 80 80 0a 40 00 0a 40 41 30 17...`....@..@A0 0cc0: 35 35 68 69 a0 1b 92 93 83 88 41 30 32 37 68 00 55hi......A027h. 0cd0: 0a 00 41 30 35 36 68 0a a1 80 0b 00 10 00 0a 00 ..A056h......... 0ce0: a1 10 41 30 35 36 68 0a a1 80 0b 00 10 00 0b 00 ..A056h......... 0cf0: 10 70 79 72 68 0a 02 00 0a 03 00 61 7b 41 30 30 .pyrh......a{A00 0d00: 38 61 0a 70 0c 00 00 40 00 63 a0 41 06 92 93 63 8a.p...@.c.A...c 0d10: 0a 00 41 30 35 37 68 70 0a 01 62 a2 4b 04 62 41 ..A057hp..b.K.bA 0d20: 30 35 38 61 0a 68 80 0a 00 00 0a 20 5b 22 0a 1e 058a.h..... [".. 0d30: a2 13 7b 41 30 30 38 61 0a 68 0c 00 00 00 08 00 ..{A008a.h...... 0d40: 5b 22 0a 0a 70 0a 00 62 a0 1e 93 69 0a 01 70 41 ["..p..b...i..pA 0d50: 30 35 39 68 0a a4 64 a0 0f 92 93 7b 64 0b 00 08 059h..d....{d... 0d60: 00 0a 00 70 0a 01 62 41 30 36 30 68 a1 01 a0 15 ...p..bA060h.... 0d70: 93 68 0a 06 41 30 31 37 0a 00 0a 60 0a 80 80 0a .h..A017...`.... 0d80: 40 00 0a 00 08 41 30 36 31 12 14 09 0a 00 0a 00 @....A061....... 0d90: 0a 00 0a 00 0a 00 0a 00 0a 00 0a 00 0a 00 08 41 ...............A 0da0: 30 36 32 0a 00 08 41 30 36 33 0a 00 14 4c 0e 41 062...A063...L.A 0db0: 30 35 37 09 70 0a 00 41 30 36 32 70 0a 00 41 30 057.p..A062p..A0 0dc0: 36 33 70 79 72 68 0a 02 00 0a 03 00 61 a0 21 93 63pyrh......a.!. 0dd0: 68 0a 06 70 41 30 36 34 0a 00 0a 00 88 41 30 36 h..pA064.....A06 0de0: 31 0a 00 00 41 30 36 34 0a 00 0a 01 a4 0a 00 70 1...A064.......p 0df0: 41 30 30 38 61 0a 18 63 70 7b 7a 63 0a 08 00 0a A008a..cp{zc.... 0e00: ff 00 63 70 79 63 0a 08 00 62 70 41 30 30 38 62 ..cpyc...bpA008b 0e10: 0a 0c 63 70 7b 7a 63 0a 10 00 0a ff 00 63 a0 0e ..cp{zc......c.. 0e20: 92 93 7b 63 0a 80 00 0a 00 70 0a 07 60 a1 05 70 ..{c.....p..`..p 0e30: 0a 00 60 70 0a 00 64 a2 41 06 92 94 64 60 70 41 ..`p..d.A...d`pA 0e40: 30 36 35 72 62 64 00 0a 10 41 30 36 32 a0 0b 93 065rbd...A062... 0e50: 41 30 36 32 0a 00 75 64 9f 72 41 30 36 32 0a 10 A062..ud.rA062.. 0e60: 41 30 36 32 70 41 30 30 38 72 62 64 00 41 30 36 A062pA008rbd.A06 0e70: 32 41 30 36 33 70 7b 41 30 36 33 0a 03 00 88 41 2A063p{A063....A 0e80: 30 36 31 64 00 41 30 35 38 72 62 64 00 41 30 36 061d.A058rbd.A06 0e90: 32 80 0a 03 00 0a 00 75 64 14 43 0c 41 30 36 30 2......ud.C.A060 0ea0: 09 70 0a 00 41 30 36 32 70 0a 00 41 30 36 33 a0 .p..A062p..A063. 0eb0: 17 93 68 0a 06 41 30 36 34 83 88 41 30 36 31 0a ..h..A064..A061. 0ec0: 00 00 0a 01 a4 0a 00 70 79 72 68 0a 02 00 0a 03 .......pyrh..... 0ed0: 00 61 70 41 30 30 38 61 0a 18 63 70 7b 7a 63 0a .apA008a..cp{zc. 0ee0: 08 00 0a ff 00 63 70 79 63 0a 08 00 62 70 41 30 .....cpyc...bpA0 0ef0: 30 38 62 0a 0c 63 70 7b 7a 63 0a 10 00 0a ff 00 08b..cp{zc...... 0f00: 63 a0 0e 92 93 7b 63 0a 80 00 0a 00 70 0a 07 60 c....{c.....p..` 0f10: a1 05 70 0a 00 60 70 0a 00 64 a2 42 04 92 94 64 ..p..`p..d.B...d 0f20: 60 70 41 30 36 35 72 62 64 00 0a 10 41 30 36 32 `pA065rbd...A062 0f30: a0 0b 93 41 30 36 32 0a 00 75 64 9f 72 41 30 36 ...A062..ud.rA06 0f40: 32 0a 10 41 30 36 32 41 30 30 39 72 62 64 00 41 2..A062A009rbd.A 0f50: 30 36 32 83 88 41 30 36 31 64 00 75 64 14 47 05 062..A061d.ud.G. 0f60: 41 30 35 35 02 70 79 72 68 0a 02 00 0a 03 00 60 A055.pyrh......` 0f70: a0 22 93 69 0a 01 41 30 35 38 60 0a 88 80 0a 2f .".i..A058`..../ 0f80: 00 0a 21 41 30 35 36 68 0a a4 80 0c 01 00 00 20 ..!A056h....... 0f90: 00 0a 00 a1 21 41 30 35 36 68 0a a4 80 0c 01 00 ....!A056h...... 0fa0: 00 20 00 0c 01 00 00 20 41 30 35 38 60 0a 88 80 . ..... A058`... 0fb0: 0a 2f 00 0a 02 14 41 07 41 30 35 33 0a 70 41 30 ./....A.A053.pA0 0fc0: 31 36 0a 00 0a 60 0a ea 61 7d 61 0a 02 61 41 30 16...`..a}a..aA0 0fd0: 34 39 0a 00 0a 60 0a ea 61 7b 61 80 79 0a 03 0a 49...`..a{a.y... 0fe0: 03 00 00 61 7d 61 79 68 0a 03 00 61 7b 80 61 00 ...a}ayh...a{.a. 0ff0: 0a 04 62 7d 7b 61 80 0a 04 00 00 62 61 41 30 34 ..b}{a.....baA04 1000: 39 0a 00 0a 60 0a ea 61 a0 1e 92 93 69 0a 00 a2 9...`..a....i... 1010: 17 92 93 79 61 0a 02 00 62 7b 41 30 31 36 0a 00 ...ya...b{A016.. 1020: 0a 60 0a eb 0a 01 61 14 21 41 30 35 30 02 70 87 .`....a.!A050.p. 1030: 68 61 70 0a 00 60 a2 12 95 60 61 70 83 88 83 68 hap..`...`ap...h 1040: 60 00 88 83 69 60 00 75 60 14 11 41 30 31 33 00 `...i`.u`..A013. 1050: a4 7b 41 30 32 35 41 30 32 36 00 08 41 30 36 36 .{A025A026..A066 1060: 0a 00 08 41 30 36 37 0a 00 08 41 30 36 38 0a 00 ...A067...A068.. 1070: 08 41 30 36 39 0a 00 08 41 30 37 30 0a 00 08 41 .A069...A070...A 1080: 30 37 31 0a 00 08 41 30 37 32 11 13 0a 10 01 02 071...A072...... 1090: 04 04 08 08 08 08 10 10 10 10 10 10 10 10 14 48 ...............H 10a0: 0f 41 30 37 33 01 08 41 30 33 39 0a 00 08 41 30 .A073..A039...A0 10b0: 37 34 0a 00 70 0a 00 41 30 33 34 70 11 03 0a 0a 74..p..A034p.... 10c0: 67 70 83 88 68 0a 03 00 41 30 33 39 70 83 88 68 gp..h...A039p..h 10d0: 0a 04 00 41 30 37 34 70 0a 03 88 67 0a 00 00 70 ...A074p...g...p 10e0: 0a 00 88 67 0a 01 00 70 41 30 37 34 88 67 0a 02 ...g...pA074.g.. 10f0: 00 a2 47 05 92 94 41 30 33 34 41 30 30 31 a0 45 ..G...A034A001.E 1100: 04 93 41 30 34 37 41 30 33 34 0a 01 70 41 30 30 ..A047A034..pA00 1110: 38 79 72 41 30 33 34 0a 02 00 0a 03 00 0a 18 61 8yrA034........a 1120: 7b 7a 61 0a 10 00 0a ff 62 7b 7a 61 0a 08 00 0a {za.....b{za.... 1130: ff 61 a0 11 90 92 95 41 30 33 39 61 92 94 41 30 .a.....A039a..A0 1140: 33 39 62 a5 75 41 30 33 34 a0 0c 94 41 30 33 34 39b.uA034...A034 1150: 41 30 30 31 a4 67 a0 13 92 94 41 30 37 35 41 30 A001.g....A075A0 1160: 33 34 0a 01 41 30 37 34 a4 67 70 83 88 41 30 37 34..A074.gp..A07 1170: 32 41 30 37 34 00 61 41 30 37 36 41 30 33 34 0a 2A074.aA076A034. 1180: 01 0a 00 41 30 37 36 41 30 33 34 0a 02 61 70 61 ...A076A034..apa 1190: 88 67 0a 02 00 a4 67 14 4c 06 41 30 37 37 09 70 .g....g.L.A077.p 11a0: 83 88 68 0a 04 00 60 70 83 88 68 0a 02 00 61 74 ..h...`p..h...at 11b0: 7a 61 0a 03 00 0a 02 61 a0 09 93 60 0a 01 70 0a za.....a...`..p. 11c0: 06 62 a1 05 70 0a 04 62 70 41 30 37 38 61 62 60 .b..p..bpA078ab` 11d0: 70 11 03 0a 0a 67 8b 67 0a 00 41 30 34 30 8c 67 p....g.g..A040.g 11e0: 0a 02 41 30 34 31 8c 67 0a 03 41 30 37 39 70 0a ..A041.g..A079p. 11f0: 04 41 30 34 30 70 0a 00 41 30 34 31 70 60 41 30 .A040p..A041p`A0 1200: 37 39 a4 67 08 41 30 38 30 11 0d 0a 0a 00 00 00 79.g.A080....... 1210: 00 00 00 00 00 00 00 14 45 1a 41 30 37 38 0a 70 ........E.A078.p 1220: 0a 00 64 70 41 30 38 31 68 67 70 83 88 67 0a 07 ..dpA081hgp..g.. 1230: 00 61 a0 08 92 93 61 0a 01 a4 64 70 69 62 a2 4c .a....a...dpib.L 1240: 17 92 93 62 0a 08 a0 41 04 93 62 0a 06 70 0a 00 ...b...A..b..p.. 1250: 88 41 30 32 33 68 00 41 30 35 36 68 0a a2 80 0b .A023h.A056h.... 1260: 00 20 00 0a 00 70 0a 00 41 30 32 36 41 30 33 36 . ...p..A026A036 1270: 41 30 37 36 68 0a 01 0a 00 41 30 38 32 68 0a 00 A076h....A082h.. 1280: 70 0a 01 62 70 0a 00 63 a0 31 93 62 0a 01 7b 41 p..bp..c.1.b..{A 1290: 30 35 39 68 0a a5 0a 3f 61 a0 0e 94 61 0a 04 70 059h...?a...a..p 12a0: 0a 02 62 70 0a 00 63 9f a0 0b 95 63 0a 50 5b 22 ..bp..c....c.P[" 12b0: 0a 01 75 63 a1 05 70 0a 04 62 a0 4c 06 93 62 0a ..uc..p..b.L..b. 12c0: 02 70 41 30 35 39 68 0a a5 61 7b 61 0a 3f 61 a0 .pA059h..a{a.?a. 12d0: 0a 93 61 0a 10 70 0a 05 62 9f a0 0c 95 63 0a 50 ..a..p..b....c.P 12e0: 5b 22 0a 01 75 63 9f 70 0a 04 62 a0 0d 93 83 88 ["..uc.p..b..... 12f0: 41 30 32 33 68 00 0a 01 9f a0 2d 93 41 30 38 33 A023h.....-.A083 1300: 68 0a 01 41 30 35 36 68 0a a2 80 0b 00 20 00 0b h..A056h..... .. 1310: 00 20 70 0a 01 88 41 30 32 33 68 00 41 30 35 35 . p...A023h.A055 1320: 68 0a 01 70 0a 07 62 a0 23 93 62 0a 04 41 30 38 h..p..b.#.b..A08 1330: 32 68 0a 01 41 30 37 36 68 0a 00 0a 00 70 0a 01 2h..A076h....p.. 1340: 88 41 30 32 33 68 00 70 0a 00 62 a0 4c 04 93 62 .A023h.p..b.L..b 1350: 0a 07 a0 41 04 5b 12 5c 2e 5f 53 42 5f 41 4c 49 ...A.[.\._SB_ALI 1360: 43 66 70 79 72 68 0a 02 00 0a 03 00 61 5c 2e 5f Cfpyrh......a\._ 1370: 53 42 5f 41 4c 49 43 61 0a 00 5b 22 0a 02 5c 2e SB_ALICa..["..\. 1380: 5f 53 42 5f 41 4c 49 43 61 0a 01 70 0a 00 63 70 _SB_ALICa..p..cp 1390: 0a 01 62 9f 70 0a 04 62 a0 0d 93 62 0a 05 70 0a ..b.p..b...b..p. 13a0: 01 64 70 0a 00 62 a0 14 93 62 0a 00 70 0a 01 41 .dp..b...b..p..A 13b0: 30 32 36 41 30 33 36 70 0a 08 62 a4 64 14 40 0b 026A036p..b.d.@. 13c0: 41 30 37 36 0b 70 41 30 38 31 68 67 70 83 88 67 A076.pA081hgp..g 13d0: 0a 02 00 41 30 36 38 70 83 88 67 0a 03 00 41 30 ...A068p..g...A0 13e0: 36 39 a0 14 93 69 0a 00 41 30 38 34 68 41 30 36 69...i..A084hA06 13f0: 38 41 30 36 39 0a 01 a0 14 93 69 0a 01 41 30 38 8A069.....i..A08 1400: 34 68 41 30 36 38 41 30 36 39 0a 00 a0 09 92 93 4hA068A069...... 1410: 69 0a 02 a4 0a 00 a0 0e 93 6a 0a 00 70 41 30 37 i........j..pA07 1420: 35 68 0a 00 62 a1 04 70 6a 62 a0 0e 92 94 41 30 5h..b..pjb....A0 1430: 37 35 68 0a 01 62 a4 0a 00 70 41 30 38 35 68 61 75h..b...pA085ha 1440: a0 12 93 61 0a 00 72 41 30 36 38 62 63 70 41 30 ...a..rA068bcpA0 1450: 36 39 64 a1 0e 74 41 30 36 39 62 64 70 41 30 36 69d..tA069bdpA06 1460: 38 63 41 30 38 34 68 63 64 0a 01 a4 0a 00 14 40 8cA084hcd......@ 1470: 09 41 30 38 33 01 70 11 03 0a 10 61 70 0a 00 60 .A083.p....ap..` 1480: a2 45 05 92 94 60 0a 03 70 41 30 35 39 68 72 60 .E...`..pA059hr` 1490: 0a a5 00 62 70 62 88 61 77 60 0a 04 00 00 70 7a ...bpb.aw`....pz 14a0: 62 0a 08 00 88 61 72 77 60 0a 04 00 0a 01 00 00 b....arw`....... 14b0: 70 7a 62 0a 10 00 88 61 72 77 60 0a 04 00 0a 02 pzb....arw`..... 14c0: 00 00 70 7a 62 0a 18 00 88 61 72 77 60 0a 04 00 ..pzb....arw`... 14d0: 0a 03 00 00 75 60 70 0a 00 60 a2 21 95 60 0a 0f ....u`p..`.!.`.. 14e0: a0 19 90 93 83 88 61 60 00 0a 2a 93 83 88 61 72 ......a`..*...ar 14f0: 60 0a 01 00 00 0a 09 a4 0a 01 75 60 a4 0a 00 14 `.........u`.... 1500: 4b 04 41 30 38 35 09 70 41 30 38 31 68 67 70 83 K.A085.pA081hgp. 1510: 88 67 0a 00 00 41 30 36 36 70 83 88 67 0a 01 00 .g...A066p..g... 1520: 41 30 36 37 70 0a 00 60 a0 0e 94 41 30 36 36 41 A067p..`...A066A 1530: 30 36 37 70 0a 01 60 7b 41 30 35 39 68 0a 50 0a 067p..`{A059h.P. 1540: 01 61 a4 7b 7f 60 61 00 0a 01 00 14 49 05 41 30 .a.{.`a.....I.A0 1550: 38 32 02 70 41 30 38 31 68 67 70 83 88 67 0a 04 82.pA081hgp..g.. 1560: 00 41 30 37 31 70 7d 79 83 88 67 72 0a 05 0a 01 .A071p}y..gr.... 1570: 00 00 0a 08 00 83 88 67 0a 05 00 00 41 30 37 30 .......g....A070 1580: 41 30 31 37 0a 00 0a e0 7d 79 41 30 37 30 0a 10 A017....}yA070.. 1590: 00 72 0b 00 08 77 0b 00 01 41 30 37 31 00 00 00 .r...w...A071... 15a0: 80 0a 01 00 69 08 41 30 38 36 11 0a 0a 07 00 01 ....i.A086...... 15b0: 02 04 08 0c 10 14 4b 06 41 30 37 35 02 a0 1e 93 ......K.A075.... 15c0: 69 0a 00 7b 7a 41 30 35 39 68 0a a2 0a 04 00 0a i..{zA059h...... 15d0: 07 60 70 83 88 41 30 38 36 60 00 61 a1 42 04 70 .`p..A086`.a.B.p 15e0: 41 30 38 31 68 67 70 83 88 67 0a 00 00 41 30 36 A081hgp..g...A06 15f0: 36 70 83 88 67 0a 01 00 41 30 36 37 a0 14 94 41 6p..g...A067...A 1600: 30 36 36 41 30 36 37 74 41 30 36 36 41 30 36 37 066A067tA066A067 1610: 61 a1 0b 74 41 30 36 37 41 30 36 36 61 75 61 a4 a..tA067A066aua. 1620: 61 14 4c 09 41 30 38 34 0c 70 41 30 38 31 68 67 a.L.A084.pA081hg 1630: 70 69 41 30 36 38 70 6a 41 30 36 39 70 7d 79 83 piA068pjA069p}y. 1640: 88 67 72 0a 05 0a 01 00 00 0a 08 00 83 88 67 0a .gr...........g. 1650: 05 00 00 41 30 37 30 a0 1a 94 41 30 36 38 41 30 ...A070...A068A0 1660: 36 39 74 41 30 36 38 41 30 36 39 61 70 41 30 36 69tA068A069apA06 1670: 39 62 a1 11 74 41 30 36 39 41 30 36 38 61 70 41 9b..tA069A068apA 1680: 30 36 38 62 79 74 79 0a 01 72 61 0a 01 00 00 0a 068byty..ra..... 1690: 01 00 62 63 70 80 63 00 64 a0 09 93 6b 0a 01 70 ..bcp.c.d...k..p 16a0: 0a 00 63 41 30 31 37 0a 00 0a e0 7d 79 41 30 37 ..cA017....}yA07 16b0: 30 0a 10 00 0b 23 80 00 64 63 5b 21 0a 0a 08 41 0....#..dc[!...A 16c0: 30 30 32 0a 00 08 41 30 30 33 0a 00 08 41 30 30 002...A003...A00 16d0: 34 0a 00 08 41 30 30 35 0a 00 14 45 0d 41 30 30 4...A005...E.A00 16e0: 36 01 70 7d 79 0a 18 0a 03 00 0a 04 00 61 a0 35 6.p}y........a.5 16f0: 93 41 30 30 35 0a 00 70 41 30 30 37 0b 80 85 41 .A005..pA007...A 1700: 30 30 33 70 41 30 30 38 61 0b 5c 01 41 30 30 32 003pA008a.\.A002 1710: 70 41 30 30 38 61 0b a4 01 41 30 30 34 70 0a 01 pA008a...A004p.. 1720: 41 30 30 35 70 41 30 30 37 0b 80 85 60 70 7d 79 A005pA007...`p}y 1730: 0a 18 0a 03 00 0a 04 00 61 70 41 30 30 38 61 0b ........apA008a. 1740: 5c 01 62 70 41 30 30 38 61 0b a4 01 63 a0 1a 93 \.bpA008a...c... 1750: 68 0a 01 7b 60 0c fe ff ff ff 60 7b 62 0c fc ff h..{`.....`{b... 1760: ff ff 62 7d 63 0a 03 63 a1 25 7d 60 7b 41 30 30 ..b}c..c.%}`{A00 1770: 33 0a 01 00 60 7d 62 7b 41 30 30 32 0a 03 00 62 3...`}b{A002...b 1780: 7b 63 7d 0c fc ff ff ff 41 30 30 34 00 63 41 30 {c}.....A004.cA0 1790: 30 39 61 0b a4 01 63 41 30 30 39 61 0b 5c 01 62 09a...cA009a.\.b 17a0: 41 30 31 30 0b 80 85 60 41 30 31 31 0a 12 0a 03 A010...`A011.... 17b0: 14 41 06 41 30 31 32 01 70 41 30 31 33 61 70 41 .A.A012.pA013apA 17c0: 30 30 37 0b 90 84 60 a0 4a 04 92 93 7b 60 0a f0 007...`.J...{`.. 17d0: 00 0a 00 a0 12 93 68 0a 02 7b 60 0c a0 ff ff ff ......h..{`..... 17e0: 60 7d 60 0a a0 60 a1 23 a0 12 93 61 0a 00 7b 60 `}`..`.#...a..{` 17f0: 0c 60 ff ff ff 60 7d 60 0a 60 60 a1 0e 7b 60 0c .`...`}`.``..{`. 1800: 20 ff ff ff 60 7d 60 0a 20 60 41 30 31 30 0b 90 ...`}`. `A010.. 1810: 84 60 08 41 44 30 41 0a 00 14 47 04 41 30 31 34 .`.AD0A...G.A014 1820: 01 a0 3f 93 41 44 30 41 0a 01 70 41 30 31 33 61 ..?.AD0A..pA013a 1830: 70 41 30 30 37 0b 2c 84 60 7b 60 0c fe ff ff ff pA007.,.`{`..... 1840: 60 a0 0f 90 93 68 0a 01 93 61 0a 01 7d 60 0a 01 `....h...a..}`.. 1850: 60 41 30 31 30 0b 2c 84 60 41 30 31 31 0a 1b 0a `A010.,.`A011... 1860: 03 14 48 0a 41 30 31 35 01 70 68 60 a0 09 93 68 ..H.A015.ph`...h 1870: 0a 02 70 0a 00 60 a0 49 04 92 93 41 30 31 36 0a ..p..`.I...A016. 1880: 00 0a e0 0c 23 80 30 01 0a 00 41 30 31 37 0a 00 ....#.0...A017.. 1890: 0a e0 0c 16 80 30 01 80 0b 00 10 00 79 60 0a 0c .....0......y`.. 18a0: 00 a2 1e 92 93 7b 41 30 31 36 0a 00 0a e0 0c 16 .....{A016...... 18b0: 80 30 01 0b 00 20 00 79 60 0a 0d 00 5b 21 0a 0a .0... .y`...[!.. 18c0: a0 49 04 92 93 41 30 31 36 0a 00 0a e0 0c 23 80 .I...A016.....#. 18d0: 31 01 0a 00 41 30 31 37 0a 00 0a e0 0c 16 80 31 1...A017.......1 18e0: 01 80 0b 00 10 00 79 60 0a 0c 00 a2 1e 92 93 7b ......y`.......{ 18f0: 41 30 31 36 0a 00 0a e0 0c 16 80 31 01 0b 00 20 A016.......1... 1900: 00 79 60 0a 0d 00 5b 21 0a 0a .y`...[!.. UEFI3 @ 0x00000000 0000: 55 45 46 49 42 02 00 00 01 91 44 45 4c 4c 20 20 UEFIB.....DELL 0010: 51 41 30 39 20 20 20 00 02 00 00 00 50 54 4c 20 QA09 .....PTL 0020: 02 00 00 00 97 b1 9f 0d fc ce 91 4e ac b1 25 35 ...........N..%5 0030: d9 e5 a8 44 36 00 1a 00 00 00 42 00 00 00 43 00 ...D6.....B...C. 0040: 00 00 44 00 00 00 45 00 00 00 46 00 00 00 47 00 ..D...E...F...G. 0050: 00 00 48 00 00 00 49 00 00 00 4a 00 00 00 4b 00 ..H...I...J...K. 0060: 00 00 4d 00 00 00 f2 00 00 00 f1 00 00 00 f3 00 ..M............. 0070: 00 00 81 00 00 00 e9 00 00 00 01 00 00 00 ab 00 ................ 0080: 00 00 02 00 00 00 03 00 00 00 c1 00 00 00 04 00 ................ 0090: 00 00 05 00 00 00 06 00 00 00 07 00 00 00 08 00 ................ 00a0: 00 00 83 0c fa 0e d7 03 b9 44 9c 8d 6f 32 e6 3e .........D..o2.> 00b0: c0 98 78 98 e4 93 55 ad fd 46 b6 16 6c 4e 69 9a ..x...U..F..lNi. 00c0: 6b 9e e9 79 fb c0 21 28 21 4c 9a bb 9e 7e b2 ca k..y..!(!L...~.. 00d0: 15 f4 39 12 2f ce 28 7d f2 43 b5 15 5e 60 9f 10 ..9./.(}.C..^`.. 00e0: 06 0c b8 6e 83 9e 86 8a 60 4a 83 a9 d4 41 e9 6a ...n....`J...A.j 00f0: 27 05 62 40 78 f8 bd 63 de 44 af 27 f8 27 fd 67 '.b@x..c.D.'.'.g 0100: 89 06 c5 c0 04 ae 4c 4b 82 44 a3 53 c1 38 2b 4a ......LK.D.S.8+J 0110: 08 48 ed 36 ec ca ae c7 d9 4e b5 e1 e3 4e 15 cb .H.6.....N...N.. 0120: 8f 04 4a df a9 58 ef fb c8 4d a3 9f 8d b6 be 0f ..J..X...M...... 0130: 83 70 1d b2 04 dc 15 5d 50 4d a2 d8 5d 1b 4f 82 .p.....]PM..].O. 0140: ac 11 8f 0a 9e ca 15 f8 29 4a a7 16 eb ae 45 ca ........)J....E. 0150: 63 6e e2 36 f7 1b fc f4 39 4c 9e 9b ce a8 35 39 cn.6....9L....59 0160: c3 1a 9c 9c c7 c4 09 9f 51 41 99 c4 53 a0 0a 4a ........QA..S..J 0170: 94 96 00 a8 63 ef 86 95 fb 42 84 ab ea 59 0b f1 ....c....B...Y.. 0180: 41 aa 3d be 20 33 92 49 cd 4f b8 6c 60 e5 e9 15 A.=. 3.I.O.l`... 0190: 69 1e 58 dc af d8 22 6e f8 42 99 66 36 ff 78 8c i.X..."n.B.f6.x. 01a0: 9c af 5e 1d 9c 62 bd f6 52 4f 8a 5f 93 96 e7 28 ..^..b..RO._...( 01b0: 9b ec c1 50 59 3f ba 9c 76 4e b2 aa 83 4f da 5e ...PY?..vN...O.^ 01c0: 07 c9 14 d5 a5 bb 70 a9 56 41 8d dd a5 ed e2 1b ......p.VA...... 01d0: bf 5f 7f ee 45 d0 be 98 eb 4f bd 30 d6 76 37 7d ._..E....O.0.v7} 01e0: ce f8 38 b4 91 da 47 8b 0a 4d ad 56 c7 28 a9 4c ..8...G..M.V.(.L 01f0: 7f 58 aa 9b df 6c 34 f9 c2 43 a8 5f 28 63 86 a9 .X...l4..C._(c.. 0200: 76 c4 a9 0b 09 b4 66 d2 03 4e be 37 ad bd bc 85 v.....f..N.7.... 0210: 63 fd 9c 7c 96 6e 42 8e 65 48 9d 6c 4f 80 05 2f c..|.nB.eH.lO../ 0220: 2c 0e ec 9a 91 b8 9c 93 4b 47 a9 18 29 9f b2 65 ,.......KG..)..e 0230: 93 6c 8a 8c 3c 24 d0 bb a9 4a be 17 cf 9b 58 31 .l..<$...J....X1 0240: 30 ec 0. fwts-test/wmi-0001/test-0001.sh000077500000000000000000000010231465205512700160670ustar00rootroot00000000000000#!/bin/bash # TEST="Test wmi against known correct ACPI tables" NAME=test-0001.sh TMPLOG=$TMP/wmi.log.$$ $FWTS --show-tests | grep wmi > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/wmi-0001/acpidump-0001.log wmi - | grep "^[0-9]*[ ]*wmi" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/wmi-0001/wmi-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/wmi-0001/test-0002.sh000077500000000000000000000010231465205512700160700ustar00rootroot00000000000000#!/bin/bash # TEST="Test wmi against known correct ACPI tables" NAME=test-0002.sh TMPLOG=$TMP/wmi.log.$$ $FWTS --show-tests | grep wmi > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/wmi-0001/acpidump-0002.log wmi - | grep "^[0-9]*[ ]*wmi" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/wmi-0001/wmi-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/wmi-0001/test-0003.sh000077500000000000000000000010251465205512700160730ustar00rootroot00000000000000#!/bin/bash # TEST="Test wmi against known incorrect ACPI tables" NAME=test-0003.sh TMPLOG=$TMP/wmi.log.$$ $FWTS --show-tests | grep wmi > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/wmi-0001/acpidump-0003.log wmi - | grep "^[0-9]*[ ]*wmi" | cut -c7- > $TMPLOG diff $TMPLOG $FWTSTESTDIR/wmi-0001/wmi-0003.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/wmi-0001/wmi-0001.log000066400000000000000000000202271465205512700160570ustar00rootroot00000000000000wmi wmi: Extract and analyse Windows Management wmi Instrumentation (WMI). wmi ---------------------------------------------------------- wmi Test 1 of 1: Windows Management Instrumentation test. wmi wmi \_SB_.WMI1._WDG (1 of 9) wmi GUID: 51F5230E-9677-46CD-A1CF-C0B23EE34DB7 wmi WMI Block: wmi Flags : 0x05 (Expensive | String) wmi Object ID : A0 wmi Instance : 0x50 wmi Driver : think-lmi (Lenovo) wmi PASSED: Test 1, 51F5230E-9677-46CD-A1CF-C0B23EE34DB7 has wmi associated query method \_SB_.WMI1.WQA0 wmi PASSED: Test 1, 51F5230E-9677-46CD-A1CF-C0B23EE34DB7 has wmi more than zero instances wmi wmi \_SB_.WMI1._WDG (2 of 9) wmi GUID: 98479A64-33F5-4E33-A707-8E251EBBC3A1 wmi WMI Method: wmi Flags : 0x06 (Method | String) wmi Object ID : A1 wmi Instance : 0x01 wmi Driver : think-lmi (Lenovo) wmi PASSED: Test 1, 98479A64-33F5-4E33-A707-8E251EBBC3A1 has wmi associated method \_SB_.WMI1.WMA1 wmi PASSED: Test 1, 98479A64-33F5-4E33-A707-8E251EBBC3A1 has wmi more than zero instances wmi wmi \_SB_.WMI1._WDG (3 of 9) wmi GUID: 6A4B54EF-A5ED-4D33-9455-B0D9B48DF4B3 wmi WMI Method: wmi Flags : 0x06 (Method | String) wmi Object ID : A2 wmi Instance : 0x01 wmi Driver : think-lmi (Lenovo) wmi PASSED: Test 1, 6A4B54EF-A5ED-4D33-9455-B0D9B48DF4B3 has wmi associated method \_SB_.WMI1.WMA2 wmi PASSED: Test 1, 6A4B54EF-A5ED-4D33-9455-B0D9B48DF4B3 has wmi more than zero instances wmi wmi \_SB_.WMI1._WDG (4 of 9) wmi GUID: 74F1EBB6-927A-4C7D-95DF-698E21E80EB5 wmi WMI Method: wmi Flags : 0x06 (Method | String) wmi Object ID : A3 wmi Instance : 0x01 wmi PASSED: Test 1, 74F1EBB6-927A-4C7D-95DF-698E21E80EB5 has wmi associated method \_SB_.WMI1.WMA3 wmi PASSED: Test 1, 74F1EBB6-927A-4C7D-95DF-698E21E80EB5 has wmi more than zero instances wmi wmi \_SB_.WMI1._WDG (5 of 9) wmi GUID: 7EEF04FF-4328-447C-B5BB-D449925D538D wmi WMI Method: wmi Flags : 0x06 (Method | String) wmi Object ID : A4 wmi Instance : 0x01 wmi PASSED: Test 1, 7EEF04FF-4328-447C-B5BB-D449925D538D has wmi associated method \_SB_.WMI1.WMA4 wmi PASSED: Test 1, 7EEF04FF-4328-447C-B5BB-D449925D538D has wmi more than zero instances wmi wmi \_SB_.WMI1._WDG (6 of 9) wmi GUID: 8ADB159E-1E32-455C-BC93-308A7ED98246 wmi WMI Block: wmi Flags : 0x01 (Expensive) wmi Object ID : A5 wmi Instance : 0x01 wmi Driver : think-lmi (Lenovo) wmi PASSED: Test 1, 8ADB159E-1E32-455C-BC93-308A7ED98246 has wmi associated query method \_SB_.WMI1.WQA5 wmi PASSED: Test 1, 8ADB159E-1E32-455C-BC93-308A7ED98246 has wmi more than zero instances wmi wmi \_SB_.WMI1._WDG (7 of 9) wmi GUID: 2651D9FD-911C-4B69-B94E-D0DED5963BD7 wmi WMI Method: wmi Flags : 0x06 (Method | String) wmi Object ID : A6 wmi Instance : 0x01 wmi Driver : think-lmi (Lenovo) wmi PASSED: Test 1, 2651D9FD-911C-4B69-B94E-D0DED5963BD7 has wmi associated method \_SB_.WMI1.WMA6 wmi PASSED: Test 1, 2651D9FD-911C-4B69-B94E-D0DED5963BD7 has wmi more than zero instances wmi wmi \_SB_.WMI1._WDG (8 of 9) wmi GUID: 7364651A-132F-4FE7-ADAA-40C6C7EE2E3B wmi WMI Method: wmi Flags : 0x06 (Method | String) wmi Object ID : A7 wmi Instance : 0x01 wmi Driver : think-lmi (Lenovo) wmi PASSED: Test 1, 7364651A-132F-4FE7-ADAA-40C6C7EE2E3B has wmi associated method \_SB_.WMI1.WMA7 wmi PASSED: Test 1, 7364651A-132F-4FE7-ADAA-40C6C7EE2E3B has wmi more than zero instances wmi wmi \_SB_.WMI1._WDG (9 of 9) wmi GUID: 05901221-D566-11D1-B2F0-00A0C9062910 wmi WMI Block: wmi Flags : 0x00 (None) wmi Object ID : BA wmi Instance : 0x01 wmi Driver : wmi-bmof (Generic) wmi PASSED: Test 1, 05901221-D566-11D1-B2F0-00A0C9062910 has wmi associated query method \_SB_.WMI1.WQBA wmi PASSED: Test 1, 05901221-D566-11D1-B2F0-00A0C9062910 has wmi more than zero instances wmi wmi \_SB_.WMI2._WDG (1 of 5) wmi GUID: FCB424F1-075A-4E0E-BFC4-62F3E71771FA wmi WMI Block: wmi Flags : 0x01 (Expensive) wmi Object ID : A7 wmi Instance : 0x01 wmi PASSED: Test 1, FCB424F1-075A-4E0E-BFC4-62F3E71771FA has wmi associated query method \_SB_.WMI2.WQA7 wmi PASSED: Test 1, FCB424F1-075A-4E0E-BFC4-62F3E71771FA has wmi more than zero instances wmi wmi \_SB_.WMI2._WDG (2 of 5) wmi GUID: E2BE5EE3-42DA-49DB-8378-1F5247388202 wmi WMI Method: wmi Flags : 0x02 (Method) wmi Object ID : A8 wmi Instance : 0x01 wmi PASSED: Test 1, E2BE5EE3-42DA-49DB-8378-1F5247388202 has wmi associated method \_SB_.WMI2.WMA8 wmi PASSED: Test 1, E2BE5EE3-42DA-49DB-8378-1F5247388202 has wmi more than zero instances wmi wmi \_SB_.WMI2._WDG (3 of 5) wmi GUID: 7430019A-DCE9-4548-BAB0-9FDE0935CAFF wmi WMI Block: wmi Flags : 0x05 (Expensive | String) wmi Object ID : A9 wmi Instance : 0x0a wmi PASSED: Test 1, 7430019A-DCE9-4548-BAB0-9FDE0935CAFF has wmi associated query method \_SB_.WMI2.WQA9 wmi PASSED: Test 1, 7430019A-DCE9-4548-BAB0-9FDE0935CAFF has wmi more than zero instances wmi wmi \_SB_.WMI2._WDG (4 of 5) wmi GUID: 7FF47003-3B6C-4E5E-A227-E979824A85D1 wmi WMI Method: wmi Flags : 0x06 (Method | String) wmi Object ID : AA wmi Instance : 0x01 wmi PASSED: Test 1, 7FF47003-3B6C-4E5E-A227-E979824A85D1 has wmi associated method \_SB_.WMI2.WMAA wmi PASSED: Test 1, 7FF47003-3B6C-4E5E-A227-E979824A85D1 has wmi more than zero instances wmi wmi \_SB_.WMI2._WDG (5 of 5) wmi GUID: 05901221-D566-11D1-B2F0-00A0C9062910 wmi WMI Block: wmi Flags : 0x00 (None) wmi Object ID : BB wmi Instance : 0x01 wmi Driver : wmi-bmof (Generic) wmi PASSED: Test 1, 05901221-D566-11D1-B2F0-00A0C9062910 has wmi associated query method \_SB_.WMI2.WQBB wmi PASSED: Test 1, 05901221-D566-11D1-B2F0-00A0C9062910 has wmi more than zero instances wmi wmi ========================================================== wmi 28 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 wmi info only. wmi ========================================================== fwts-test/wmi-0001/wmi-0002.log000066400000000000000000000032421465205512700160560ustar00rootroot00000000000000wmi wmi: Extract and analyse Windows Management wmi Instrumentation (WMI). wmi ---------------------------------------------------------- wmi Test 1 of 1: Windows Management Instrumentation test. wmi wmi \_SB_.ATKD._WDG (1 of 2) wmi GUID: 97845ED0-4E6D-11DE-8A39-0800200C9A66 wmi WMI Method: wmi Flags : 0x02 (Method) wmi Object ID : NB wmi Instance : 0x01 wmi Driver : asus-wmi (Asus) wmi PASSED: Test 1, 97845ED0-4E6D-11DE-8A39-0800200C9A66 has wmi associated method \_SB_.ATKD.WMNB wmi PASSED: Test 1, 97845ED0-4E6D-11DE-8A39-0800200C9A66 has wmi more than zero instances wmi wmi \_SB_.ATKD._WDG (2 of 2) wmi GUID: 0B3CBB35-E3C2-45ED-91C2-4C5A6D195D1C wmi WMI Event: wmi Flags : 0x08 (Event) wmi Notification ID: 0xff wmi Reserved : 0x00 wmi Instance : 0x01 wmi Driver : asus-nb-wmi (Asus) wmi PASSED: Test 1, 0B3CBB35-E3C2-45ED-91C2-4C5A6D195D1C has wmi more than zero instances wmi PASSED: Test 1, All events associated with \_SB_.ATKD._WDG wmi are handled by a kernel driver. wmi wmi ========================================================== wmi 4 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 wmi info only. wmi ========================================================== fwts-test/wmi-0001/wmi-0003.log000066400000000000000000000076731465205512700160730ustar00rootroot00000000000000wmi wmi: Extract and analyse Windows Management wmi Instrumentation (WMI). wmi ---------------------------------------------------------- wmi Test 1 of 1: Windows Management Instrumentation test. wmi wmi \_SB_.AMW0._WDG (1 of 6) wmi GUID: 8D9DDCBC-A997-11DA-B012-B622A1EF5492 wmi WMI Block: wmi Flags : 0x00 (None) wmi Object ID : AA wmi Instance : 0x01 wmi Driver : dell-wmi-descriptor (Dell) wmi PASSED: Test 1, 8D9DDCBC-A997-11DA-B012-B622A1EF5492 has wmi associated query method \_SB_.AMW0.WQAA wmi PASSED: Test 1, 8D9DDCBC-A997-11DA-B012-B622A1EF5492 has wmi more than zero instances wmi wmi \_SB_.AMW0._WDG (2 of 6) wmi GUID: A80593CE-A997-11DA-B012-B622A1EF5492 wmi WMI Method: wmi Flags : 0x02 (Method) wmi Object ID : BA wmi Instance : 0x01 wmi Driver : alienware-wmi (Alienware) wmi PASSED: Test 1, A80593CE-A997-11DA-B012-B622A1EF5492 has wmi associated method \_SB_.AMW0.WMBA wmi PASSED: Test 1, A80593CE-A997-11DA-B012-B622A1EF5492 has wmi more than zero instances wmi wmi \_SB_.AMW0._WDG (3 of 6) wmi GUID: DD8C7670-1CB5-11DB-A98B-669A0C200008 wmi WMI Method: wmi Flags : 0x02 (Method) wmi Object ID : BC wmi Instance : 0x01 wmi PASSED: Test 1, DD8C7670-1CB5-11DB-A98B-669A0C200008 has wmi associated method \_SB_.AMW0.WMBC wmi PASSED: Test 1, DD8C7670-1CB5-11DB-A98B-669A0C200008 has wmi more than zero instances wmi wmi \_SB_.AMW0._WDG (4 of 6) wmi GUID: 9DBB5994-A997-11DA-B012-B622A1EF5492 wmi WMI Event: wmi Flags : 0x08 (Event) wmi Notification ID: 0xd0 wmi Reserved : 0x00 wmi Instance : 0x01 wmi Driver : dell-wmi-base (Dell) wmi PASSED: Test 1, 9DBB5994-A997-11DA-B012-B622A1EF5492 has wmi more than zero instances wmi wmi \_SB_.AMW0._WDG (5 of 6) wmi GUID: A3776CE0-1E88-11DB-A98B-0800200C9A66 wmi WMI Block: wmi Flags : 0x00 (None) wmi Object ID : BC wmi Instance : 0x01 wmi FAILED [LOW] WMIMissingQueryMethod: Test 1, GUID wmi A3776CE0-1E88-11DB-A98B-0800200C9A66 should have an wmi associated query method WQBC defined, however this does wmi not seem to exist. wmi PASSED: Test 1, A3776CE0-1E88-11DB-A98B-0800200C9A66 has wmi more than zero instances wmi wmi \_SB_.AMW0._WDG (6 of 6) wmi GUID: 05901221-D566-11D1-B2F0-00A0C9062910 wmi WMI Block: wmi Flags : 0x00 (None) wmi Object ID : MO wmi Instance : 0x01 wmi Driver : wmi-bmof (Generic) wmi PASSED: Test 1, 05901221-D566-11D1-B2F0-00A0C9062910 has wmi associated query method \_SB_.AMW0.WQMO wmi PASSED: Test 1, 05901221-D566-11D1-B2F0-00A0C9062910 has wmi more than zero instances wmi PASSED: Test 1, All events associated with \_SB_.AMW0._WDG wmi are handled by a kernel driver. wmi wmi ========================================================== wmi 11 passed, 1 failed, 0 warning, 0 aborted, 0 skipped, 0 wmi info only. wmi ========================================================== fwts-test/wpbt-0001/000077500000000000000000000000001465205512700143575ustar00rootroot00000000000000fwts-test/wpbt-0001/acpidump-0001.log000066400000000000000000000045551465205512700172530ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... WPBT @ 0x0000000000000000 0000: 57 50 42 54 98 00 00 00 01 23 49 4e 54 45 4c 20 WPBT.....#INTEL 0010: 54 45 4d 50 4c 41 54 45 01 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 27 05 16 20 78 56 34 12 00 00 00 bb 00 00 00 aa '.. xV4......... 0030: 01 01 64 00 34 00 20 00 73 00 63 00 6f 00 72 00 ..d.4. .s.c.o.r. 0040: 65 00 20 00 61 00 6e 00 64 00 20 00 37 00 20 00 e. .a.n.d. .7. . 0050: 79 00 65 00 61 00 72 00 73 00 20 00 61 00 67 00 y.e.a.r.s. .a.g. 0060: 6f 00 20 00 6f 00 75 00 72 00 20 00 66 00 61 00 o. .o.u.r. .f.a. 0070: 74 00 68 00 65 00 72 00 73 00 20 00 62 00 72 00 t.h.e.r.s. .b.r. 0080: 6f 00 75 00 67 00 68 00 74 00 20 00 66 00 6f 00 o.u.g.h.t. .f.o. 0090: 72 00 74 00 68 00 00 00 r.t.h... fwts-test/wpbt-0001/acpidump-0002.log000066400000000000000000000044431465205512700172500ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... WPBT @ 0x0000000000000000 0000: 57 50 42 54 98 00 00 00 01 6a 49 4e 54 45 4c 20 WPBT.....jINTEL 0010: 54 45 4d 50 4c 41 54 45 01 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 27 05 16 20 78 56 34 12 00 00 00 bb 00 00 00 aa '.. xV4......... 0030: 33 88 64 00 34 00 20 00 73 00 63 00 6f 00 72 00 3.d.4. .s.c.o.r. 0040: 65 00 20 00 61 00 6e 00 64 00 20 00 37 00 20 00 e. .a.n.d. .7. . 0050: 79 00 65 00 61 00 72 00 73 00 20 00 61 00 67 00 y.e.a.r.s. .a.g. 0060: 6f 00 20 00 6f 00 75 00 72 00 20 00 66 00 61 00 o. .o.u.r. .f.a. 0070: 74 00 68 00 65 00 72 00 73 00 20 00 62 00 72 00 t.h.e.r.s. .b.r. 0080: 6f 00 75 00 67 00 68 00 74 00 20 00 66 00 6f 00 o.u.g.h.t. .f.o. 0090: 72 00 74 00 68 00 00 00 r.t.h... fwts-test/wpbt-0001/test-0001.sh000077500000000000000000000010011465205512700162430ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against WPBT" NAME=test-0001.sh TMPLOG=$TMP/wpbt.log.$$ $FWTS --show-tests | grep wpbt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/wpbt-0001/acpidump-0001.log wpbt - | cut -c7- | grep "^wpbt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/wpbt-0001/wpbt-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/wpbt-0001/test-0002.sh000077500000000000000000000010111465205512700162450ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid WPBT" NAME=test-0001.sh TMPLOG=$TMP/wpbt.log.$$ $FWTS --show-tests | grep wpbt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/wpbt-0001/acpidump-0002.log wpbt - | cut -c7- | grep "^wpbt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/wpbt-0001/wpbt-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/wpbt-0001/wpbt-0001.log000066400000000000000000000015501465205512700164150ustar00rootroot00000000000000wpbt wpbt: WPBT Windows Platform Binary Table test. wpbt ---------------------------------------------------------- wpbt Test 1 of 1: WPBT Windows Platform Binary Table test. wpbt WPBT Windows Platform Binary Table: wpbt Handoff Memory Size: 0x12345678 wpbt Handoff Memory Location: 0xaa000000bb000000 wpbt Content Layout: 0x01 wpbt Content Type: 0x01 wpbt Arguments Length: 0x0064 wpbt wpbt PASSED: Test 1, No issues found in WPBT table. wpbt wpbt ========================================================== wpbt 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 wpbt info only. wpbt ========================================================== fwts-test/wpbt-0001/wpbt-0002.log000066400000000000000000000017411465205512700164200ustar00rootroot00000000000000wpbt wpbt: WPBT Windows Platform Binary Table test. wpbt ---------------------------------------------------------- wpbt Test 1 of 1: WPBT Windows Platform Binary Table test. wpbt WPBT Windows Platform Binary Table: wpbt Handoff Memory Size: 0x12345678 wpbt Handoff Memory Location: 0xaa000000bb000000 wpbt Content Layout: 0x33 wpbt Content Type: 0x88 wpbt FAILED [HIGH] WPBTBadFieldValue: Test 1, WPBT Layout field wpbt must be 1, got 51 instead. wpbt FAILED [HIGH] WPBTBadFieldValue: Test 1, WPBT Type field wpbt must be 1, got 136 instead. wpbt wpbt wpbt ========================================================== wpbt 0 passed, 2 failed, 0 warning, 0 aborted, 0 skipped, 0 wpbt info only. wpbt ========================================================== fwts-test/wsmt-0001/000077500000000000000000000000001465205512700143755ustar00rootroot00000000000000fwts-test/wsmt-0001/acpidump-0001.log000066400000000000000000000034341465205512700172640ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... WSMT @ 0x0000000000000000 0000: 57 53 4d 54 28 00 00 00 00 ea 49 4e 54 45 4c 20 WSMT(.....INTEL 0010: 54 45 4d 50 4c 41 54 45 00 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 31 05 17 20 07 00 00 00 1.. .... fwts-test/wsmt-0001/acpidump-0002.log000066400000000000000000000034351465205512700172660ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... WSMT @ 0x0000000000000000 0000: 57 53 4d 54 28 00 00 00 00 e8 49 4e 54 45 4c 20 WSMT(.....INTEL 0010: 54 45 4d 50 4c 41 54 45 00 00 00 00 49 4e 54 4c TEMPLATE....INTL 0020: 31 05 17 20 09 00 00 00 1.. .... fwts-test/wsmt-0001/test-0001.sh000077500000000000000000000010011465205512700162610ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against WSMT" NAME=test-0001.sh TMPLOG=$TMP/wsmt.log.$$ $FWTS --show-tests | grep wsmt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/wsmt-0001/acpidump-0001.log wsmt - | cut -c7- | grep "^wsmt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/wsmt-0001/wsmt-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/wsmt-0001/test-0002.sh000077500000000000000000000010111465205512700162630ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against invalid WSMT" NAME=test-0001.sh TMPLOG=$TMP/wsmt.log.$$ $FWTS --show-tests | grep wsmt > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/wsmt-0001/acpidump-0002.log wsmt - | cut -c7- | grep "^wsmt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/wsmt-0001/wsmt-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/wsmt-0001/wsmt-0001.log000066400000000000000000000012741465205512700164540ustar00rootroot00000000000000wsmt wsmt: WSMT Windows SMM Security Mitigations Table test. wsmt ---------------------------------------------------------- wsmt Test 1 of 1: WSMT Windows SMM Security Mitigations Table wsmt test. wsmt WSMT Windows SMM Security Mitigations Table: wsmt Protection Flags: 0x00000007 wsmt wsmt PASSED: Test 1, No issues found in WSMT table. wsmt wsmt ========================================================== wsmt 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 wsmt info only. wsmt ========================================================== fwts-test/wsmt-0001/wsmt-0002.log000066400000000000000000000014441465205512700164540ustar00rootroot00000000000000wsmt wsmt: WSMT Windows SMM Security Mitigations Table test. wsmt ---------------------------------------------------------- wsmt Test 1 of 1: WSMT Windows SMM Security Mitigations Table wsmt test. wsmt WSMT Windows SMM Security Mitigations Table: wsmt Protection Flags: 0x00000009 wsmt FAILED [HIGH] WSMTReservedBitsNonZero: Test 1, WSMT wsmt Protection Flags Bits [31..3] must be zero, got 0x00000009 wsmt instead wsmt wsmt wsmt ========================================================== wsmt 0 passed, 1 failed, 0 warning, 0 aborted, 0 skipped, 0 wsmt info only. wsmt ========================================================== fwts-test/xenv-0001/000077500000000000000000000000001465205512700143635ustar00rootroot00000000000000fwts-test/xenv-0001/acpidump-0001.log000066400000000000000000000035401465205512700172500ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... XENV @ 0x00000000 0000: 58 45 4E 56 39 00 00 00 01 35 58 65 6E 56 4D 4D XENV9....5XenVMM 0010: 54 45 4D 50 4C 41 54 45 00 00 00 00 49 4E 54 4C TEMPLATE....INTL 0020: 14 02 14 20 00 00 00 10 00 00 00 00 00 20 00 00 ... ......... .. 0030: 00 00 00 00 00 00 00 25 03 .......%. fwts-test/xenv-0001/acpidump-0002.log000066400000000000000000000035411465205512700172520ustar00rootroot00000000000000FACS @ 0x00000000 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@........... 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FACP @ 0x00000000 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD 0010: 47 55 41 4d 20 20 20 20 00 00 04 06 41 4d 44 20 GUAM ....AMD 0020: 40 42 0f 00 c0 2f e9 af 92 47 e8 af 00 02 09 00 @B.../...G...... 0030: b0 00 00 00 f0 f1 00 00 00 80 00 00 00 00 00 00 ................ 0040: 04 80 00 00 00 00 00 00 00 82 00 00 08 80 00 00 ................ 0050: 20 80 00 00 00 00 00 00 04 02 01 04 08 00 00 00 ............... 0060: 65 00 e9 03 00 00 00 00 01 00 0d 00 32 00 00 00 e...........2... 0070: a5 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 c0 2f e9 af 00 00 00 00 92 47 e8 af ...../.......G.. 0090: 00 00 00 00 01 20 00 00 00 80 00 00 00 00 00 00 ..... .......... 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 00b0: 04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00c0: 00 00 00 00 01 08 00 00 00 82 00 00 00 00 00 00 ................ 00d0: 01 20 00 00 08 80 00 00 00 00 00 00 01 40 00 00 . ...........@.. 00e0: 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... 00f0: 00 00 00 00 .... XENV @ 0x00000000 0000: 58 45 4E 56 39 00 00 00 01 31 58 65 6E 56 4D 4D XENV9....5XenVMM 0010: 54 45 4D 50 4C 41 54 45 00 00 00 00 49 4E 54 4C TEMPLATE....INTL 0020: 14 02 14 20 00 00 00 10 00 00 00 00 00 20 00 00 ... ......... .. 0030: 00 00 00 00 00 00 00 25 07 .......%. fwts-test/xenv-0001/test-0001.sh000077500000000000000000000007751465205512700162700ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against XENV" NAME=test-0001.sh TMPLOG=$TMP/xenv.log.$$ $FWTS --show-tests | grep XENV > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/xenv-0001/acpidump-0001.log xenv - | cut -c7- | grep "^xenv" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/xenv-0001/xenv-0001.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/xenv-0001/test-0002.sh000077500000000000000000000010041465205512700162530ustar00rootroot00000000000000#!/bin/bash # TEST="Test table against invalid XENV" NAME=test-0001.sh TMPLOG=$TMP/xenv.log.$$ $FWTS --show-tests | grep XENV > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/xenv-0001/acpidump-0002.log xenv - | cut -c7- | grep "^xenv" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/xenv-0001/xenv-0002.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/xenv-0001/xenv-0001.log000066400000000000000000000014331465205512700164250ustar00rootroot00000000000000xenv xenv: XENV Xen Environment Table tests. xenv ---------------------------------------------------------- xenv Test 1 of 1: Validate XENV table. xenv XENV Table: xenv GNT Start Address: 0x0000000010000000 xenv GNT Size: 0x0000000000002000 xenv Evtchn Intr: 0x25000000 xenv Evtchn Intr Flags: 0x03 xenv PASSED: Test 1, No issues found in XENV table. xenv xenv ========================================================== xenv 1 passed, 0 failed, 0 warning, 0 aborted, 0 skipped, 0 xenv info only. xenv ========================================================== fwts-test/xenv-0001/xenv-0002.log000066400000000000000000000015551465205512700164330ustar00rootroot00000000000000xenv xenv: XENV Xen Environment Table tests. xenv ---------------------------------------------------------- xenv Test 1 of 1: Validate XENV table. xenv XENV Table: xenv GNT Start Address: 0x0000000010000000 xenv GNT Size: 0x0000000000002000 xenv Evtchn Intr: 0x25000000 xenv Evtchn Intr Flags: 0x07 xenv FAILED [HIGH] XENVReservedBitsNonZero: Test 1, XENV Evtchn xenv Intr Flags Bits [7..2] must be zero, got 0x07 instead xenv xenv ========================================================== xenv 0 passed, 1 failed, 0 warning, 0 aborted, 0 skipped, 0 xenv info only. xenv ========================================================== fwts-test/xsdt-0001/000077500000000000000000000000001465205512700143655ustar00rootroot00000000000000fwts-test/xsdt-0001/acpidump-0001.log000066400000000000000000000017201465205512700172500ustar00rootroot00000000000000XSDT @ 0xbf6d87f0 0000: 58 53 44 54 94 00 00 00 01 9c 4c 45 4e 4f 56 4f XSDT......LENOVO 0010: 54 50 2d 36 38 20 20 20 00 00 04 06 20 4c 54 50 TP-68 .... LTP 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0090: 00 00 00 00 .... RSD PTR @ 0xf7240 0000: 52 53 44 20 50 54 52 20 c5 4c 45 4e 4f 56 4f 02 RSD PTR .LENOVO. 0010: 94 87 6d bf 24 00 00 00 f0 87 6d bf 00 00 00 00 ..m.$.....m..... 0020: 39 00 00 00 9... fwts-test/xsdt-0001/test-0001.sh000077500000000000000000000010171465205512700162600ustar00rootroot00000000000000#!/bin/bash # TEST="Test acpitables against broken ACPI XSDT table" NAME=test-0001.sh TMPLOG=$TMP/xsdt.log.$$ $FWTS --show-tests | grep XSDT > /dev/null if [ $? -eq 1 ]; then echo SKIP: $TEST, $NAME exit 77 fi $FWTS --log-format="%line %owner " -w 80 --dumpfile=$FWTSTESTDIR/xsdt-0001/acpidump-0001.log xsdt - | cut -c7- | grep "^xsdt" > $TMPLOG diff $TMPLOG $FWTSTESTDIR/xsdt-0001/xsdt.log >> $FAILURE_LOG ret=$? if [ $ret -eq 0 ]; then echo PASSED: $TEST, $NAME else echo FAILED: $TEST, $NAME fi rm $TMPLOG exit $ret fwts-test/xsdt-0001/xsdt.log000066400000000000000000000151201465205512700160510ustar00rootroot00000000000000xsdt xsdt: XSDT Extended System Description Table test. xsdt ---------------------------------------------------------- xsdt Cannot find FACP. xsdt Test 1 of 1: XSDT Extended System Description Table test. xsdt FAILED [MEDIUM] XSDTEntryNull: Test 1, XSDT Entry 0 is xsdt null, should not be non-zero. xsdt xsdt ADVICE: A XSDT pointer is null and therefore erroneously xsdt points to an invalid 64 bit ACPI table header. At worse xsdt this will cause the kernel to oops, at best the kernel may xsdt ignore this. However, it should be fixed where possible. xsdt xsdt FAILED [MEDIUM] XSDTEntryNull: Test 1, XSDT Entry 1 is xsdt null, should not be non-zero. xsdt xsdt ADVICE: A XSDT pointer is null and therefore erroneously xsdt points to an invalid 64 bit ACPI table header. At worse xsdt this will cause the kernel to oops, at best the kernel may xsdt ignore this. However, it should be fixed where possible. xsdt xsdt FAILED [MEDIUM] XSDTEntryNull: Test 1, XSDT Entry 2 is xsdt null, should not be non-zero. xsdt xsdt ADVICE: A XSDT pointer is null and therefore erroneously xsdt points to an invalid 64 bit ACPI table header. At worse xsdt this will cause the kernel to oops, at best the kernel may xsdt ignore this. However, it should be fixed where possible. xsdt xsdt FAILED [MEDIUM] XSDTEntryNull: Test 1, XSDT Entry 3 is xsdt null, should not be non-zero. xsdt xsdt ADVICE: A XSDT pointer is null and therefore erroneously xsdt points to an invalid 64 bit ACPI table header. At worse xsdt this will cause the kernel to oops, at best the kernel may xsdt ignore this. However, it should be fixed where possible. xsdt xsdt FAILED [MEDIUM] XSDTEntryNull: Test 1, XSDT Entry 4 is xsdt null, should not be non-zero. xsdt xsdt ADVICE: A XSDT pointer is null and therefore erroneously xsdt points to an invalid 64 bit ACPI table header. At worse xsdt this will cause the kernel to oops, at best the kernel may xsdt ignore this. However, it should be fixed where possible. xsdt xsdt FAILED [MEDIUM] XSDTEntryNull: Test 1, XSDT Entry 5 is xsdt null, should not be non-zero. xsdt xsdt ADVICE: A XSDT pointer is null and therefore erroneously xsdt points to an invalid 64 bit ACPI table header. At worse xsdt this will cause the kernel to oops, at best the kernel may xsdt ignore this. However, it should be fixed where possible. xsdt xsdt FAILED [MEDIUM] XSDTEntryNull: Test 1, XSDT Entry 6 is xsdt null, should not be non-zero. xsdt xsdt ADVICE: A XSDT pointer is null and therefore erroneously xsdt points to an invalid 64 bit ACPI table header. At worse xsdt this will cause the kernel to oops, at best the kernel may xsdt ignore this. However, it should be fixed where possible. xsdt xsdt FAILED [MEDIUM] XSDTEntryNull: Test 1, XSDT Entry 7 is xsdt null, should not be non-zero. xsdt xsdt ADVICE: A XSDT pointer is null and therefore erroneously xsdt points to an invalid 64 bit ACPI table header. At worse xsdt this will cause the kernel to oops, at best the kernel may xsdt ignore this. However, it should be fixed where possible. xsdt xsdt FAILED [MEDIUM] XSDTEntryNull: Test 1, XSDT Entry 8 is xsdt null, should not be non-zero. xsdt xsdt ADVICE: A XSDT pointer is null and therefore erroneously xsdt points to an invalid 64 bit ACPI table header. At worse xsdt this will cause the kernel to oops, at best the kernel may xsdt ignore this. However, it should be fixed where possible. xsdt xsdt FAILED [MEDIUM] XSDTEntryNull: Test 1, XSDT Entry 9 is xsdt null, should not be non-zero. xsdt xsdt ADVICE: A XSDT pointer is null and therefore erroneously xsdt points to an invalid 64 bit ACPI table header. At worse xsdt this will cause the kernel to oops, at best the kernel may xsdt ignore this. However, it should be fixed where possible. xsdt xsdt FAILED [MEDIUM] XSDTEntryNull: Test 1, XSDT Entry 10 is xsdt null, should not be non-zero. xsdt xsdt ADVICE: A XSDT pointer is null and therefore erroneously xsdt points to an invalid 64 bit ACPI table header. At worse xsdt this will cause the kernel to oops, at best the kernel may xsdt ignore this. However, it should be fixed where possible. xsdt xsdt FAILED [MEDIUM] XSDTEntryNull: Test 1, XSDT Entry 11 is xsdt null, should not be non-zero. xsdt xsdt ADVICE: A XSDT pointer is null and therefore erroneously xsdt points to an invalid 64 bit ACPI table header. At worse xsdt this will cause the kernel to oops, at best the kernel may xsdt ignore this. However, it should be fixed where possible. xsdt xsdt FAILED [MEDIUM] XSDTEntryNull: Test 1, XSDT Entry 12 is xsdt null, should not be non-zero. xsdt xsdt ADVICE: A XSDT pointer is null and therefore erroneously xsdt points to an invalid 64 bit ACPI table header. At worse xsdt this will cause the kernel to oops, at best the kernel may xsdt ignore this. However, it should be fixed where possible. xsdt xsdt FAILED [MEDIUM] XSDTEntryNull: Test 1, XSDT Entry 13 is xsdt null, should not be non-zero. xsdt xsdt ADVICE: A XSDT pointer is null and therefore erroneously xsdt points to an invalid 64 bit ACPI table header. At worse xsdt this will cause the kernel to oops, at best the kernel may xsdt ignore this. However, it should be fixed where possible. xsdt xsdt xsdt ========================================================== xsdt 0 passed, 14 failed, 0 warning, 0 aborted, 0 skipped, 0 xsdt info only. xsdt ========================================================== git.mk000066400000000000000000000306011465205512700122010ustar00rootroot00000000000000# git.mk, a small Makefile to autogenerate .gitignore files # for autotools-based projects. # # Copyright 2009, Red Hat, Inc. # Copyright 2010,2011,2012,2013 Behdad Esfahbod # Written by Behdad Esfahbod # # Copying and distribution of this file, with or without modification, # is permitted in any medium without royalty provided the copyright # notice and this notice are preserved. # # The latest version of this file can be downloaded from: GIT_MK_URL = https://raw.githubusercontent.com/behdad/git.mk/master/git.mk # # Bugs, etc, should be reported upstream at: # https://github.com/behdad/git.mk # # To use in your project, import this file in your git repo's toplevel, # then do "make -f git.mk". This modifies all Makefile.am files in # your project to -include git.mk. Remember to add that line to new # Makefile.am files you create in your project, or just rerun the # "make -f git.mk". # # This enables automatic .gitignore generation. If you need to ignore # more files, add them to the GITIGNOREFILES variable in your Makefile.am. # But think twice before doing that. If a file has to be in .gitignore, # chances are very high that it's a generated file and should be in one # of MOSTLYCLEANFILES, CLEANFILES, DISTCLEANFILES, or MAINTAINERCLEANFILES. # # The only case that you need to manually add a file to GITIGNOREFILES is # when remove files in one of mostlyclean-local, clean-local, distclean-local, # or maintainer-clean-local make targets. # # Note that for files like editor backup, etc, there are better places to # ignore them. See "man gitignore". # # If "make maintainer-clean" removes the files but they are not recognized # by this script (that is, if "git status" shows untracked files still), send # me the output of "git status" as well as your Makefile.am and Makefile for # the directories involved and I'll diagnose. # # For a list of toplevel files that should be in MAINTAINERCLEANFILES, see # Makefile.am.sample in the git.mk git repo. # # Don't EXTRA_DIST this file. It is supposed to only live in git clones, # not tarballs. It serves no useful purpose in tarballs and clutters the # build dir. # # This file knows how to handle autoconf, automake, libtool, gtk-doc, # gnome-doc-utils, yelp.m4, mallard, intltool, gsettings, dejagnu, appdata, # appstream, hotdoc. # # This makefile provides the following targets: # # - all: "make all" will build all gitignore files. # - gitignore: makes all gitignore files in the current dir and subdirs. # - .gitignore: make gitignore file for the current dir. # - gitignore-recurse: makes all gitignore files in the subdirs. # # KNOWN ISSUES: # # - Recursive configure doesn't work as $(top_srcdir)/git.mk inside the # submodule doesn't find us. If you have configure.{in,ac} files in # subdirs, add a proxy git.mk file in those dirs that simply does: # "include $(top_srcdir)/../git.mk". Add more ..'s to your taste. # And add those files to git. See vte/gnome-pty-helper/git.mk for # example. # ############################################################################### # Variables user modules may want to add to toplevel MAINTAINERCLEANFILES: ############################################################################### # # Most autotools-using modules should be fine including this variable in their # toplevel MAINTAINERCLEANFILES: GITIGNORE_MAINTAINERCLEANFILES_TOPLEVEL = \ $(srcdir)/aclocal.m4 \ $(srcdir)/autoscan.log \ $(srcdir)/configure.scan \ `AUX_DIR=$(srcdir)/$$(cd $(top_srcdir); $(AUTOCONF) --trace 'AC_CONFIG_AUX_DIR:$$1' ./configure.ac); \ test "x$$AUX_DIR" = "x$(srcdir)/" && AUX_DIR=$(srcdir); \ for x in \ ar-lib \ compile \ config.guess \ config.rpath \ config.sub \ depcomp \ install-sh \ ltmain.sh \ missing \ mkinstalldirs \ test-driver \ ylwrap \ ; do echo "$$AUX_DIR/$$x"; done` \ `cd $(top_srcdir); $(AUTOCONF) --trace 'AC_CONFIG_HEADERS:$$1' ./configure.ac | \ head -n 1 | while read f; do echo "$(srcdir)/$$f.in"; done` # # All modules should also be fine including the following variable, which # removes automake-generated Makefile.in files: GITIGNORE_MAINTAINERCLEANFILES_MAKEFILE_IN = \ `cd $(top_srcdir); $(AUTOCONF) --trace 'AC_CONFIG_FILES:$$1' ./configure.ac | \ while read f; do \ case $$f in Makefile|*/Makefile) \ test -f "$(srcdir)/$$f.am" && echo "$(srcdir)/$$f.in";; esac; \ done` # # Modules that use libtool and use AC_CONFIG_MACRO_DIR() may also include this, # though it's harmless to include regardless. GITIGNORE_MAINTAINERCLEANFILES_M4_LIBTOOL = \ `MACRO_DIR=$(srcdir)/$$(cd $(top_srcdir); $(AUTOCONF) --trace 'AC_CONFIG_MACRO_DIR:$$1' ./configure.ac); \ if test "x$$MACRO_DIR" != "x$(srcdir)/"; then \ for x in \ libtool.m4 \ ltoptions.m4 \ ltsugar.m4 \ ltversion.m4 \ lt~obsolete.m4 \ ; do echo "$$MACRO_DIR/$$x"; done; \ fi` # # Modules that use gettext and use AC_CONFIG_MACRO_DIR() may also include this, # though it's harmless to include regardless. GITIGNORE_MAINTAINERCLEANFILES_M4_GETTEXT = \ `MACRO_DIR=$(srcdir)/$$(cd $(top_srcdir); $(AUTOCONF) --trace 'AC_CONFIG_MACRO_DIR:$$1' ./configure.ac); \ if test "x$$MACRO_DIR" != "x$(srcdir)/"; then \ for x in \ codeset.m4 \ extern-inline.m4 \ fcntl-o.m4 \ gettext.m4 \ glibc2.m4 \ glibc21.m4 \ iconv.m4 \ intdiv0.m4 \ intl.m4 \ intldir.m4 \ intlmacosx.m4 \ intmax.m4 \ inttypes-pri.m4 \ inttypes_h.m4 \ lcmessage.m4 \ lib-ld.m4 \ lib-link.m4 \ lib-prefix.m4 \ lock.m4 \ longlong.m4 \ nls.m4 \ po.m4 \ printf-posix.m4 \ progtest.m4 \ size_max.m4 \ stdint_h.m4 \ threadlib.m4 \ uintmax_t.m4 \ visibility.m4 \ wchar_t.m4 \ wint_t.m4 \ xsize.m4 \ ; do echo "$$MACRO_DIR/$$x"; done; \ fi` ############################################################################### # Default rule is to install ourselves in all Makefile.am files: ############################################################################### git-all: git-mk-install git-mk-install: @echo "Installing git makefile" @any_failed=; \ find "`test -z "$(top_srcdir)" && echo . || echo "$(top_srcdir)"`" -name Makefile.am | while read x; do \ if grep 'include .*/git.mk' $$x >/dev/null; then \ echo "$$x already includes git.mk"; \ else \ failed=; \ echo "Updating $$x"; \ { cat $$x; \ echo ''; \ echo '-include $$(top_srcdir)/git.mk'; \ } > $$x.tmp || failed=1; \ if test x$$failed = x; then \ mv $$x.tmp $$x || failed=1; \ fi; \ if test x$$failed = x; then : else \ echo "Failed updating $$x"; >&2 \ any_failed=1; \ fi; \ fi; done; test -z "$$any_failed" git-mk-update: wget $(GIT_MK_URL) -O $(top_srcdir)/git.mk .PHONY: git-all git-mk-install git-mk-update ############################################################################### # Actual .gitignore generation: ############################################################################### $(srcdir)/.gitignore: Makefile.am $(top_srcdir)/git.mk $(top_srcdir)/configure.ac @echo "git.mk: Generating $@" @{ \ if test "x$(DOC_MODULE)" = x -o "x$(DOC_MAIN_SGML_FILE)" = x; then :; else \ for x in \ $(DOC_MODULE)-decl-list.txt \ $(DOC_MODULE)-decl.txt \ tmpl/$(DOC_MODULE)-unused.sgml \ "tmpl/*.bak" \ $(REPORT_FILES) \ $(DOC_MODULE).pdf \ xml html \ ; do echo "/$$x"; done; \ FLAVOR=$$(cd $(top_srcdir); $(AUTOCONF) --trace 'GTK_DOC_CHECK:$$2' ./configure.ac); \ case $$FLAVOR in *no-tmpl*) echo /tmpl;; esac; \ if echo "$(SCAN_OPTIONS)" | grep -q "\-\-rebuild-types"; then \ echo "/$(DOC_MODULE).types"; \ fi; \ if echo "$(SCAN_OPTIONS)" | grep -q "\-\-rebuild-sections"; then \ echo "/$(DOC_MODULE)-sections.txt"; \ fi; \ if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ for x in \ $(SETUP_FILES) \ $(DOC_MODULE).types \ ; do echo "/$$x"; done; \ fi; \ fi; \ if test "x$(DOC_MODULE)$(DOC_ID)" = x -o "x$(DOC_LINGUAS)" = x; then :; else \ for lc in $(DOC_LINGUAS); do \ for x in \ $(if $(DOC_MODULE),$(DOC_MODULE).xml) \ $(DOC_PAGES) \ $(DOC_INCLUDES) \ ; do echo "/$$lc/$$x"; done; \ done; \ for x in \ $(_DOC_OMF_ALL) \ $(_DOC_DSK_ALL) \ $(_DOC_HTML_ALL) \ $(_DOC_MOFILES) \ $(DOC_H_FILE) \ "*/.xml2po.mo" \ "*/*.omf.out" \ ; do echo /$$x; done; \ fi; \ if test "x$(HOTDOC)" = x; then :; else \ $(foreach project, $(HOTDOC_PROJECTS),echo "/$(call HOTDOC_TARGET,$(project))"; \ echo "/$(shell $(call HOTDOC_PROJECT_COMMAND,$(project)) --get-conf-path output)" ; \ echo "/$(shell $(call HOTDOC_PROJECT_COMMAND,$(project)) --get-private-folder)" ; \ ) \ for x in \ .hotdoc.d \ ; do echo "/$$x"; done; \ fi; \ if test "x$(HELP_ID)" = x -o "x$(HELP_LINGUAS)" = x; then :; else \ for lc in $(HELP_LINGUAS); do \ for x in \ $(HELP_FILES) \ "$$lc.stamp" \ "$$lc.mo" \ ; do echo "/$$lc/$$x"; done; \ done; \ fi; \ if test "x$(gsettings_SCHEMAS)" = x; then :; else \ for x in \ $(gsettings_SCHEMAS:.xml=.valid) \ $(gsettings__enum_file) \ ; do echo "/$$x"; done; \ fi; \ if test "x$(appdata_XML)" = x; then :; else \ for x in \ $(appdata_XML:.xml=.valid) \ ; do echo "/$$x"; done; \ fi; \ if test "x$(appstream_XML)" = x; then :; else \ for x in \ $(appstream_XML:.xml=.valid) \ ; do echo "/$$x"; done; \ fi; \ if test -f $(srcdir)/po/Makefile.in.in; then \ for x in \ ABOUT-NLS \ po/Makefile.in.in \ po/Makefile.in.in~ \ po/Makefile.in \ po/Makefile \ po/Makevars.template \ po/POTFILES \ po/Rules-quot \ po/stamp-it \ po/stamp-po \ po/.intltool-merge-cache \ "po/*.gmo" \ "po/*.header" \ "po/*.mo" \ "po/*.sed" \ "po/*.sin" \ po/$(GETTEXT_PACKAGE).pot \ intltool-extract.in \ intltool-merge.in \ intltool-update.in \ ; do echo "/$$x"; done; \ fi; \ if test -f $(srcdir)/configure; then \ for x in \ autom4te.cache \ configure \ config.h \ stamp-h1 \ libtool \ config.lt \ ; do echo "/$$x"; done; \ fi; \ if test "x$(DEJATOOL)" = x; then :; else \ for x in \ $(DEJATOOL) \ ; do echo "/$$x.sum"; echo "/$$x.log"; done; \ echo /site.exp; \ fi; \ if test "x$(am__dirstamp)" = x; then :; else \ echo "$(am__dirstamp)"; \ fi; \ if test "x$(findstring libtool,$(LTCOMPILE))" = x -a "x$(findstring libtool,$(LTCXXCOMPILE))" = x -a "x$(GTKDOC_RUN)" = x; then :; else \ for x in \ "*.lo" \ ".libs" "_libs" \ ; do echo "$$x"; done; \ fi; \ for x in \ .gitignore \ $(GITIGNOREFILES) \ $(CLEANFILES) \ $(PROGRAMS) $(check_PROGRAMS) $(EXTRA_PROGRAMS) \ $(LIBRARIES) $(check_LIBRARIES) $(EXTRA_LIBRARIES) \ $(LTLIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LTLIBRARIES) \ so_locations \ $(MOSTLYCLEANFILES) \ $(TEST_LOGS) \ $(TEST_LOGS:.log=.trs) \ $(TEST_SUITE_LOG) \ $(TESTS:=.test) \ "*.gcda" \ "*.gcno" \ $(DISTCLEANFILES) \ $(am__CONFIG_DISTCLEAN_FILES) \ $(CONFIG_CLEAN_FILES) \ TAGS ID GTAGS GRTAGS GSYMS GPATH tags \ "*.tab.c" \ $(MAINTAINERCLEANFILES) \ $(BUILT_SOURCES) \ $(patsubst %.vala,%.c,$(filter %.vala,$(SOURCES))) \ $(filter %_vala.stamp,$(DIST_COMMON)) \ $(filter %.vapi,$(DIST_COMMON)) \ $(filter $(addprefix %,$(notdir $(patsubst %.vapi,%.h,$(filter %.vapi,$(DIST_COMMON))))),$(DIST_COMMON)) \ Makefile \ Makefile.in \ "*.orig" \ "*.rej" \ "*.bak" \ "*~" \ ".*.sw[nop]" \ ".dirstamp" \ "*.tab.h" \ "*.patch" \ ; do echo "/$$x"; done; \ for x in \ "*.$(OBJEXT)" \ $(DEPDIR) \ ; do echo "$$x"; done; \ } | \ sed "s@^/`echo "$(srcdir)" | sed 's/\(.\)/[\1]/g'`/@/@" | \ sed 's@/[.]/@/@g' | \ LC_ALL=C sort | uniq > $@.tmp && \ mv $@.tmp $@; all: $(srcdir)/.gitignore gitignore-recurse-maybe gitignore: $(srcdir)/.gitignore gitignore-recurse gitignore-recurse-maybe: @for subdir in $(DIST_SUBDIRS); do \ case " $(SUBDIRS) " in \ *" $$subdir "*) :;; \ *) test "$$subdir" = . -o -e "$$subdir/.git" || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) gitignore || echo "Skipping $$subdir");; \ esac; \ done gitignore-recurse: @for subdir in $(DIST_SUBDIRS); do \ test "$$subdir" = . -o -e "$$subdir/.git" || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) gitignore || echo "Skipping $$subdir"); \ done maintainer-clean: gitignore-clean gitignore-clean: -rm -f $(srcdir)/.gitignore .PHONY: gitignore-clean gitignore gitignore-recurse gitignore-recurse-maybe live-image/000077500000000000000000000000001465205512700131045ustar00rootroot00000000000000live-image/fwts-frontend-text000077500000000000000000000325071465205512700166230ustar00rootroot00000000000000#!/bin/bash # # Copyright (C) 2010-2024 Canonical # Some of this work - Copyright (C) 2017-2019 IBM # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # FWTS="Firmware Test Suite" OPTIONS="/tmp/options.$$" DIALOG_CMD="/tmp/fwts.cmd.$$" OEM_TESTS_FILE="/fwts/oem-tests.lst" export DIALOGRC="/usr/share/fwts/fwts-live-dialogrc" FWTS_DATE=`date +%d%m%Y` FWTS_TIME=`date +%H%M` # # Check if executed as root or with sudo # if [ $EUID -ne 0 ]; then echo "`basename $0`: must be executed with sudo" exit 1 fi # # for debugging, use: # - WORK_DIR=./fwts/$FWTS_DATE/$FWTS_TIME # if booting in fwts-live # - change FWTS_AUTO_SHUTDOWN= to alter default shutdown after testing completion # WORK_DIR=/fwts/$FWTS_DATE/$FWTS_TIME FWTS_AUTO_SHUTDOWN="$1" # Change shutdown to non-destructive default to not power cycle box unknowingly SHUTDOWN_AT_END=0 # # set WORK_DIR to /cdrom/fwts if booting via casper # if [ `grep -qs boot=casper /proc/cmdline; echo $?` -eq 0 ]; then CASPER_DETECTED=1 WORK_DIR=/cdrom/fwts/$FWTS_DATE/$FWTS_TIME fi # # check /proc/cmdline and argv[1] for FWTS_AUTO_SHUTDOWN to toggle auto shutdown # # live-build v5 uses boot=live, leave the following for backward compatibility if [ `grep -qs FWTS_AUTO_SHUTDOWN=1 /proc/cmdline; echo $?` -ne 0 ]; then if [ -n "${CASPER_DETECTED:+x}" ]; then SHUTDOWN_AT_END=0 elif [ -n "${FWTS_AUTO_SHUTDOWN:+x}" ]; then SHUTDOWN_AT_END=0 fi fi do_help() { dialog --backtitle "$FWTS" --title "Help" --msgbox \ "To make selections from the menu use the following keys:\n\nUse the up/down cursor keys to navigate to the desired menu option and the bar to tick the menu selection.\n\nUse the left/right or tab keys to navigate the button options and press the key to select." 13 60 } # # Run a bunch of tests and monitor progress # do_test() { num_tests=`fwts $1 --show-tests | wc -l` num_tests=$((num_tests - 1)) if [ $num_tests -gt 0 ]; then fwts --force-clean $1 --show-progress-dialog --log-type plaintext,html | dialog --backtitle "$FWTS" --title "$2" --gauge "" 13 80 0 fi # sleep so the progress dialog is shown for a period of time, otherwise it just flashes by and end-user cannot tell what it was sleep 1 } # # Get user choice of tests to run # select_tests() { while true do declare -a tests x=0 # # Discover available tests # fwts --batch --batch-experimental --uefitests --unsafe --utils --show-tests | grep "^ "| sort | uniq > $OPTIONS while read test text do ((x++)) tests[$x]=$test txt="${txt} ${x} \"${text}\" off" done < $OPTIONS rm $OPTIONS # # Construct and run dialog # echo dialog --backtitle '"$FWTS"' --title '"Select Tests to Run"' --help-button --checklist '"Select from the list below the test(s) you want to run. Use up/down cursor keys, space to select and enter to start:"' 20 70 $x $txt > $DIALOG_CMD . $DIALOG_CMD 2> $OPTIONS ret=$? rm $DIALOG_CMD # # Scan return selections and build fwts test scenarios # x=0 for i in `cat $OPTIONS` do ((x++)) i=${i#\"} i=${i%\"} run_tests="$run_tests ${tests[$i]}" done # # Handle dialog exit states: # case $ret in 0) if [ $x -eq 0 ]; then dialog --backtitle "$FWTS" --title "No Tests Selected!" --msgbox \ " You did not select any tests to be run." 5 50 else fwts --force-clean $run_tests --show-progress-dialog --log-type plaintext,html | dialog --backtitle "$FWTS" --title "$2" --gauge "" 15 80 0 done_tests_finish fi ;; 1) return ;; 2) do_help ;; 255) no_tests_finish ;; esac done } # # Get user choices to create oem-tests.lst # select_oem_automation() { while true do declare -a tests x=0 # # Discover available tests # fwts --batch --batch-experimental --uefitests --unsafe --show-tests | grep "^ "| sort | uniq > $OPTIONS while read test text do ((x++)) tests[$x]=$test txt="${txt} ${x} \"${text}\" off" done < $OPTIONS rm $OPTIONS # # Construct and run dialog # echo dialog --backtitle '"$FWTS"' --title '"Select Tests for Automation"' --help-button --checklist '"Select from the list below the test(s) for oem-tests.lst. Use up/down cursor keys, space to select and enter to start:"' 20 70 $x $txt > $DIALOG_CMD . $DIALOG_CMD 2> $OPTIONS ret=$? rm $DIALOG_CMD # # Scan return selections and build fwts test scenarios # x=0 for i in `cat $OPTIONS` do ((x++)) i=${i#\"} i=${i%\"} run_tests="$run_tests ${tests[$i]}" done # # Handle dialog exit states: # case $ret in 0) if [ $x -eq 0 ]; then dialog --backtitle "$FWTS" --title "No Tests Selected!" --msgbox \ " You did not select any tests to be run." 5 50 else # remove leading space and output to oem-tests.lst echo "TESTS=$(echo $run_tests)" > $OEM_TESTS_FILE echo "POST=poweroff" >> $OEM_TESTS_FILE dialog --backtitle "$FWTS" --title "Auto-tests Saved!" --msgbox \ " Auto-tests are saved to $OEM_TESTS_FILE" 5 50 finish fi ;; 1) return ;; 2) do_help ;; 255) no_tests_finish ;; esac done } # # View the results log # view_results() { tempfile=/tmp/view_results.tmp.$$ dialog --print-maxsize 2>| $tempfile term_height=`sed -n "s/^MaxSize: \([0-9]*\), \([0-9]*\)$/\1/p" $tempfile 2> /dev/null` term_width=` sed -n "s/^MaxSize: \([0-9]*\), \([0-9]*\)$/\2/p" $tempfile 2> /dev/null` term_height=$((term_height)) term_width=$((term_width - 2)) rm $tempfile dialog --backtitle "$FWTS" --title "Test Results" \ --textbox results.log \ $term_height $term_width } # # Shutdown or exit # finish() { dialog --help-button --backtitle "$FWTS" --title "Choose Exit" --menu \ "\nSelect if you want to exit to a command line or poweroff.\n\nIf you select to poweroff and this is running from a LIVE USB, the host will be powered down.\n\nIf you are running this from a VM and you choose to poweroff, then only the VM will be powered down."\ 22 70 2 \ "Exit" "Exit to a command line" \ "Poweroff" "Shutdown and power off" \ 2> $OPTIONS case $? in 0) cd $WORK_DIR >& /dev/null case `cat $OPTIONS` in 'Exit') dialog --backtitle "$FWTS" --title "EXIT to Command Line" --msgbox "\nAfter doing all you want from the command line you can enter the following to power down the host.\n\n\"sudo poweroff\" ... you will need the sudo password.\n\nIf you enter \"exit\" you will be returned back to this application where you can run more tests or select the exit paths again (if you choose Poweroff from the menu you will NOT need the sudo password)." 20 80 exit 0 ;; 'Poweroff') dialog --backtitle "$FWTS" --infobox "Shutting down and powering off..." 5 80 sleep 2 poweroff exit 0 ;; esac ;; 1|255) return ;; 2) do_help ;; esac } # # Aborted, no tests run # no_tests_finish() { dialog --backtitle "$FWTS" --title "Abort Testing!" --msgbox \ "You did not select any tests to be run.\n\nPress Enter to continue." 7 50 finish } # # Finish after running some tests # done_tests_finish() { # # Dump out firmware and system data, LP: #1322543 # cd $WORK_DIR fwts --dump > /dev/null dialog --backtitle "$FWTS" --title "Testing Complete" --yesno \ "The results can be found on the USB stick in the\n the directory: /fwts/$FWTS_DATE/$FWTS_TIME/results.log\n\n Do you want to view the results log now?" 9 55 case $? in 0) view_results ;; 1|255) ;; esac dialog --backtitle "$FWTS" --title "Testing Complete" --msgbox \ "The results can be found on the USB stick in the\n the directory: /fwts/$FWTS_DATE/$FWTS_TIME/results.log\n\nPress Enter to continue." 9 55 finish } # # Check & run OEM customised tests in /fwts/oem-tests.lst # check_run_oem_tests() { if [ -f $OEM_TESTS_FILE ]; then cd $WORK_DIR >& /dev/null OEM_TESTS=$(echo $(grep TESTS $OEM_TESTS_FILE) | cut -d '=' -f 2) do_test "${OEM_TESTS}" 'Running OEM Specified Tests' fwts --dump > /dev/null POST_ACTION=$(echo $(grep POST $OEM_TESTS_FILE) | cut -d '=' -f 2) if [ $POST_ACTION == "poweroff" ]; then dialog --backtitle "$FWTS" --infobox "Shutting down and powering off..." 5 80 elif [ $POST_ACTION == "reboot" ]; then dialog --backtitle "$FWTS" --infobox "Restarting system..." 5 80 else dialog --backtitle "$FWTS" --infobox "Exiting to terminal..." 5 80 POST_ACTION="" fi sleep 2 $POST_ACTION exit 0 fi } # # Here we go.. # mkdir -p $WORK_DIR >& /dev/null if [ $? -ne 0 ]; then dialog --ok-label "Finish and End" --backtitle "$FWTS" --title "Error" --msgbox "Could not create directory fwts/$FWTS_DATE/$FWTS_TIME to store test results.\n\nPress Enter to continue." 8 50 finish exit 0 fi UNAME_PLATFORM=`(uname -m) 2>/dev/null` || UNAME_PLATFORM=unknown while true do check_run_oem_tests case "${UNAME_PLATFORM}" in ppc*) dialog --help-button --backtitle "$FWTS" --title "Select Tests" --radiolist \ "This will run a suite of firmware tests that will check the device tree and related subsystems. It can also find issues that can cause Linux problems.\n\nThe default below is to run just all the Batch Tests, but you can select more tests below if required.\n\nPlease select below (using cursor up/down and space) and press enter to continue."\ 22 70 4 \ "All" "All Batch Tests" on \ "Recommended" "Recommended Tests" off \ "Selected" "Select Individual Tests" off \ "Abort" "Abort Testing" off \ 2> $OPTIONS ;; aarch64) dialog --help-button --backtitle "$FWTS" --title "Select Tests" --radiolist \ "This will run a suite of firmware tests that will check the BIOS and ACPI tables. It can also find issues that can cause Linux problems.\n\nThe default below is to run just all the Batch Tests, but you can select more tests below if required.\n\nPlease select below (using cursor up/down and space) and press enter to continue."\ 24 70 8 \ "All" "All Batch Tests" on \ "ACPI" "ACPI Tests" off \ "UEFI" "UEFI Tests" off \ "TPM" "TPM Tests" off \ "EBBR" "ARM EBBR Tests" off \ "SBBR" "ARM SBBR Tests" off \ "Recommended" "Recommended Tests" off \ "Recommended for IFV" "Recommended Tests for F/W Vendors" off \ "Selected" "Select Individual Tests" off \ "Automated" "Create Auto-Tests" off \ "Abort" "Abort Testing" off \ 2> $OPTIONS ;; *) dialog --help-button --backtitle "$FWTS" --title "Select Tests" --radiolist \ "This will run a suite of firmware tests that will check the BIOS and ACPI tables. It can also find issues that can cause Linux problems.\n\nThe default below is to run just all the Batch Tests, but you can select more tests below if required.\n\nPlease select below (using cursor up/down and space) and press enter to continue."\ 24 70 8 \ "All" "All Batch Tests" on \ "ACPI" "ACPI Tests" off \ "UEFI" "UEFI Tests" off \ "TPM" "TPM Tests" off \ "Recommended" "Recommended Tests" off \ "Recommended for IFV" "Recommended Tests for F/W Vendors" off \ "Selected" "Select Individual Tests" off \ "Automated" "Create Auto-Tests" off \ "Abort" "Abort Testing" off \ 2> $OPTIONS ;; esac case $? in 0) cd $WORK_DIR >& /dev/null case `cat $OPTIONS` in 'All') case "${UNAME_PLATFORM}" in ppc*) FWTS_OPTIONS="--batch" ;; *) FWTS_OPTIONS="--batch --uefitests" ;; esac do_test "${FWTS_OPTIONS}" 'Running Batch Tests' done_tests_finish ;; 'ACPI') do_test "--acpitests" 'Running ACPI Tests' done_tests_finish ;; 'UEFI') do_test "--uefitests" 'Running UEFI Tests' done_tests_finish ;; 'TPM') do_test "tpm2 tpmevlog tpmevlogdump" 'Running TPM Tests' done_tests_finish ;; 'EBBR') do_test "--ebbr" 'Embedded Base Boot Requirements (EBBR) Tests' done_tests_finish ;; 'SBBR') do_test "--sbbr" 'Server Base Boot Requirements (SBBR) Tests' done_tests_finish ;; 'Recommended') case "${UNAME_PLATFORM}" in ppc*) FWTS_OPTIONS="--batch" ;; aarch64) FWTS_OPTIONS="version cpufreq aspm dmicheck klog oops --acpitests --uefitests --log-level=medium" ;; *) FWTS_OPTIONS="version cpufreq maxfreq msr mtrr nx virt aspm dmicheck apicedge klog oops --acpitests --uefitests --log-level=medium" ;; esac do_test "${FWTS_OPTIONS}" 'Running Recommended Tests' done_tests_finish ;; 'Recommended for IFV') case "${UNAME_PLATFORM}" in aarch64) FWTS_OPTIONS="version cpufreq aspm dmicheck klog oops --acpitests --uefitests --ifv" ;; *) FWTS_OPTIONS="version cpufreq maxfreq msr mtrr nx virt aspm dmicheck apicedge klog oops --acpitests --uefitests --ifv" ;; esac do_test "${FWTS_OPTIONS}" 'Running Recommended Tests for F/W Vendors' done_tests_finish ;; 'Selected') select_tests ;; 'Automated') select_oem_automation ;; 'Abort') no_tests_finish ;; esac ;; 2) do_help ;; 1|255) no_tests_finish ;; esac done live-image/fwts-live-dialogrc000066400000000000000000000050271465205512700165350ustar00rootroot00000000000000# # Run-time configuration file for dialog # # Automatically generated by "dialog --create-rc " # # # Types of values: # # Number - # String - "string" # Boolean - # Attribute - (foreground,background,highlight?) # Set aspect-ration. aspect = 0 # Set separator (for multiple widgets output). separate_widget = "" # Set tab-length (for textbox tab-conversion). tab_len = 0 # Make tab-traversal for checklist, etc., include the list. visit_items = OFF # Shadow dialog boxes? This also turns on color. use_shadow = ON # Turn color support ON or OFF use_colors = ON # Screen color screen_color = (WHITE,MAGENTA,ON) # Shadow color shadow_color = (BLACK,BLACK,ON) # Dialog box color dialog_color = (BLACK,WHITE,OFF) # Dialog box title color title_color = (RED,WHITE,ON) # Dialog box border color border_color = (WHITE,WHITE,ON) # Active button color button_active_color = (WHITE,RED,ON) # Inactive button color button_inactive_color = (BLACK,WHITE,OFF) # Active button key color button_key_active_color = (WHITE,RED,ON) # Inactive button key color button_key_inactive_color = (RED,WHITE,OFF) # Active button label color button_label_active_color = (YELLOW,RED,ON) # Inactive button label color button_label_inactive_color = (BLACK,WHITE,ON) # Input box color inputbox_color = (BLACK,WHITE,OFF) # Input box border color inputbox_border_color = (BLACK,WHITE,OFF) # Search box color searchbox_color = (BLACK,WHITE,OFF) # Search box title color searchbox_title_color = (RED,WHITE,ON) # Search box border color searchbox_border_color = (WHITE,WHITE,ON) # File position indicator color position_indicator_color = (RED,WHITE,ON) # Menu box color menubox_color = (BLACK,WHITE,OFF) # Menu box border color menubox_border_color = (WHITE,WHITE,ON) # Item color item_color = (BLACK,WHITE,OFF) # Selected item color item_selected_color = (WHITE,RED,ON) # Tag color tag_color = (RED,WHITE,ON) # Selected tag color tag_selected_color = (YELLOW,RED,ON) # Tag key color tag_key_color = (RED,WHITE,OFF) # Selected tag key color tag_key_selected_color = (WHITE,RED,ON) # Check box color check_color = (BLACK,WHITE,OFF) # Selected check box color check_selected_color = (WHITE,RED,ON) # Up arrow color uarrow_color = (GREEN,WHITE,ON) # Down arrow color darrow_color = (GREEN,WHITE,ON) # Item help-text color itemhelp_color = (WHITE,BLACK,OFF) # Active form text color form_active_text_color = (WHITE,RED,ON) # Form text color form_text_color = (WHITE,CYAN,ON) # Readonly form item color form_item_readonly_color = (CYAN,WHITE,ON) make_orig_tarball.sh000077500000000000000000000020321465205512700150570ustar00rootroot00000000000000#!/bin/sh # # Copyright (C) 2016-2024 Canonical # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # # Generate a Debian orig tarball from latest tagged release # TAG=$(git tag | tail -1 | sed s/V//) git reset --hard V${TAG} git clean -fd echo "Making debian orig tarball for fwts V${TAG}" rm -f m4/* ../fwts_* git archive V${TAG} -o ../fwts_${TAG}.orig.tar gzip -9 ../fwts_${TAG}.orig.tar scripts/000077500000000000000000000000001465205512700125545ustar00rootroot00000000000000scripts/bash-completion/000077500000000000000000000000001465205512700156405ustar00rootroot00000000000000scripts/bash-completion/Makefile.am000066400000000000000000000001471465205512700176760ustar00rootroot00000000000000bashcompletiondir = @bashcompletiondir@ dist_bashcompletion_DATA = fwts -include $(top_srcdir)/git.mk scripts/bash-completion/fwts000066400000000000000000000054541465205512700165560ustar00rootroot00000000000000#!/bin/bash # # FWTS tab completion for bash. # # Copyright (C) 2017-2024 Canonical # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. _fwts() { local cur prev cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} case $prev in '--arch') COMPREPLY=( $(compgen -W "x86 x86_32 x86_64 ia64 arm64 aarch64" -- $cur) ) compopt -o nosort return 0 ;; '--dumpfile'|'-k'|'--klog'|'-J'|'--json-data-file'|'--lspci'|'-o'|'--olog'|'--s3-resume-hook'|'-r'|'--results-output') _filedir return 0 ;; '-j'|'--json-data-path'|'-t'|'--table-path') local IFS=$'\n' compopt -o filenames COMPREPLY=( $(compgen -d -- ${cur}) ) return 0 ;; '--log-level') COMPREPLY=( $(compgen -W "critical high medium low info all" -- $cur) ) compopt -o nosort return 0 ;; '--log-type') COMPREPLY=( $(compgen -W "plaintext json xml" -- $cur) ) return 0 ;; '--pm-method') COMPREPLY=( $(compgen -W "logind pm-utils sysfs" -- $cur) ) return 0 ;; '--log-filter'|'--log-format'|'-w'|'--log-width'|'-R'|'-rsdp'|\ '--s3-delay-delta'|'--s3-device-check-delay'|'--s3-max-delay'|'--s3-min-delay'|'--s3-multiple'|\ '--s3-quirks'|'--s3-resume-time'|'--s3-sleep-delay'|'--s3-suspend-time'|'--s3power-sleep-delay'|\ '--s4-delay-delta'|'--s4-device-check-delay'|'--s4-max-delay'|'--s4-min-delay'|'--s4-multiple'|'--s4-quirks'|'--s4-sleep-delay'|\ '-s'|'--skip-test'|'--uefi-get-var-multiple'|'--uefi-query-var-multiple'|'--uefi-set-var-multiple') # argument required but no completions available return 0 ;; '-h'|'--help'|'-v'|'--version'|'-d'|'--dump'|'-s'|'--show-tests'|'--show-tests-full'|'--show-tests-categories'|'--log-fields') # all other arguments are noop with these return 0 ;; esac local all_tests=`fwts --show-tests | sed '/.*:/d;/^$/d' | awk '{ print $1 }'` local all_long_options=$( _parse_help "$1" --help ) if [ -z "$cur" ]; then COMPREPLY=( $( compgen -W "${all_tests}" -- "$cur" ) ) else COMPREPLY=( $( compgen -W "${all_tests} ${all_long_options}" -- "$cur" ) ) fi return 0 } # load the completion complete -F _fwts fwts scripts/fwts-collect000077500000000000000000000066771465205512700151300ustar00rootroot00000000000000#!/bin/bash # # Copyright (C) 2012-2024 Canonical # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # OUTNAME=fwts-logs.tar.gz TMPDIR=/tmp/fwts.$$ FWTS=`which fwts` # # Check if executed as root or with sudo # if [ $EUID -ne 0 ]; then echo "`basename $0`: must be executed with sudo" exit 1 fi # # sighandler # on_die() { if [ -d $TMPDIR ]; then rm -rf $TMPDIR echo "Interrupted, exiting." exit 1 fi } # # Show how to use this script # show_help() { cat << EOD fwts-collect [ LOGFILEs... ] Collect up fwts related logs and put them in a gzip'd tar file for appending to bug reports. By default this will collect the basic logs and system related information, but one can also specify extra files to add to the archive too. example: sudo fwts-collect report.log /var/log/messages EOD } # # Dump out ACPI interrupt stats # acpi_irq_dump() { if [ -d /sys/firmware/acpi/interrupts ]; then echo "/sys/firmware/acpi/interrupts:" echo " " for I in /sys/firmware/acpi/interrupts/* do name=`basename $I` echo -e "$name\t" `cat $I` done fi } while getopts "o:h" opt; do case $opt in h) show_help exit 0 ;; \?) echo "Invalid option: -$OPTARG" 1>&2 exit 1 ;; esac done OUTFILE=`basename $OUTNAME` OUTPATH=$PWD OUTNAME=$OUTPATH/$OUTFILE # # Sanity checks # if [ -d $OUTNAME ] ; then echo "$OUTNAME is a directory and already exists." 1>&2 exit 1 fi if [ -e $OUTNAME ] ; then echo "File $OUTFILE already exists." 1>&2 exit 1 fi if [[ $EUID -ne 0 ]]; then echo "Need to run this as root" 1>&2 exit 1 fi if [ -z $FWTS ]; then echo "Firmware test suite fwts does not exist!" 1>&2 exit 1 fi if [ -d $TMPDIR ]; then echo "Cannot create temporary directory $TMPDIR: already exists!" 1>&2 exit 1 fi trap 'on_die' TERM INT mkdir $TMPDIR err=$? if [ $err -ne 0 ]; then echo "Cannot create temporary directory $TMPDIR: error $err" 1>&2 exit 1 fi # # Dump out logs # cd $TMPDIR # # General /proc info # cat /proc/iomem > iomem.log cat /proc/mtrr > mtrr.log cat /proc/interrupts > interrupts.log acpi_irq_dump > acpi_irqs.log # # Copy of kernel log # cp /var/log/kern.log kern.log # # fwts specific output # fwts --dump >& /dev/null fwts cmosdump --log-format="" -r cmosdump.log >& /dev/null fwts uefidump --log-format="" -r uefidump.log >& /dev/null fwts memmapdump --log-format="" -r memmap.log >& /dev/null fwts acpidump --log-format="" -r acpitables.log >& /dev/null fwts mpdump --log-format="" -r mpdump.log >& /dev/null fwts version --log-format="" -r version.log >& /dev/null # # Copy over any extra user specified logs # cd $OUTPATH while [ $# -ne 0 ] do if [ -e $1 ]; then cp $1 $TMPDIR else echo "File $1 does not exist!" 1>& 2 rm -rf $TMPDIR exit 1 fi shift done # # Now archive up the files # cd $TMPDIR tar cfz - . > $OUTNAME cd $OUTPATH rm -rf $TMPDIR exit 0 smatchify.sh000077500000000000000000000050441465205512700134160ustar00rootroot00000000000000#!/bin/bash # # Copyright (C) 2012-2024 Canonical # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # SMATCH_DIR=smatch SMATCH_REPO=git://repo.or.cz/smatch DEPENDENCIES="libxml2-dev llvm-dev libsqlite3-dev" INCLUDES="-I/usr/lib/gcc/i686-linux-gnu/ -I/usr/include/x86_64-linux-gnu" HERE=$(pwd) # # Install any packages we depend on to build smatch # smatch_install_dependencies() { install="" echo "Checking for dependencies for smatch.." for d in ${DEPENDENCIES} do if [ "$(dpkg -l | grep $d)" == "" ]; then install="$install $d" fi done if [ "$install" != "" ]; then echo "Need to install:$install" sudo apt-get install $install if [ $? -ne 0 ]; then echo "Installation of packages failed" exit 1 fi fi } # # Get an up to date version of smatch # smatch_get() { if [ -d ${SMATCH_DIR} ]; then echo "Getting latest version of smatch.." cd ${SMATCH_DIR} git checkout -f master >& /dev/null git fetch origin >& /dev/null git fetch origin master >& /dev/null git reset --hard FETCH_HEAD >& /dev/null cd ${HERE} else echo "Getting smatch.." git clone ${SMATCH_REPO} ${SMATCH_DIR} fi } # # Build smatch # smatch_build() { cd ${SMATCH_DIR} echo "Smatch: make clean.." make clean >& /dev/null echo "Smatch: make.." make > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "Build of smatch succeeded" else echo "Build of smatchfailed" exit 1 fi cd ${HERE} } # # Build fwts using smatch # smatch_fwts() { echo "Building fwts.." autoreconf -ivf > /dev/null ./configure > /dev/null make clean make CHECK="${HERE}/${SMATCH_DIR}/smatch --full-path --two-passes" \ CC="${HERE}/${SMATCH_DIR}/cgcc $INCLUDES" | tee smatch.log } # # Check for errors # smatch_errors() { errors=$(grep "error: " smatch.log | wc -l) echo " " echo "Smatch found $errors errors, see smatch.log for more details." } smatch_install_dependencies smatch_get smatch_build smatch_fwts smatch_errors smccc_test/000077500000000000000000000000001465205512700132145ustar00rootroot00000000000000smccc_test/Makefile000066400000000000000000000017521465205512700146610ustar00rootroot00000000000000# # Copyright (C) 2021-2024 Canonical, Ltd. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # KVER ?= `uname -r` KBUILD_MODPOST_WARN=y obj-m += smccc_test.o all: make -C /lib/modules/$(KVER)/build M=`pwd` modules install: make -C /lib/modules/$(KVER)/build M=`pwd` modules_install clean: make -C /lib/modules/$(KVER)/build M=`pwd` clean smccc_test/smccc_test.c000066400000000000000000000133711465205512700155140ustar00rootroot00000000000000/* * SMCCC test driver * * Copyright(C) 2021-2024 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. */ #include #include #include #include #include #include #include /* * ARM SMCCC kernel test driver * https://developer.arm.com/documentation/den0115/latest */ #if defined(__aarch64__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)) #include #endif #include "smccc_test.h" #define MODULE_NAME "smccc_test" #define SMCCC_TEST_VERSION (0x00000001) MODULE_AUTHOR("Colin Ian King"); MODULE_DESCRIPTION("SMCCC Test Driver"); MODULE_LICENSE("GPL"); #if defined(__aarch64__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0)) /* PCI ECAM conduit (defined by ARM DEN0115A) */ #define SMCCC_PCI_CALL_VAL(val) \ ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \ ARM_SMCCC_SMC_32, \ ARM_SMCCC_OWNER_STANDARD, val) #ifndef SMCCC_PCI_VERSION #define SMCCC_PCI_VERSION SMCCC_PCI_CALL_VAL(0x0130) #endif #ifndef SMCCC_PCI_FEATURES #define SMCCC_PCI_FEATURES SMCCC_PCI_CALL_VAL(0x131) #endif #ifndef SMCCC_PCI_READ #define SMCCC_PCI_READ SMCCC_PCI_CALL_VAL(0x132) #endif #ifndef SMCCC_PCI_WRITE #define SMCCC_PCI_WRITE SMCCC_PCI_CALL_VAL(0x133) #endif #ifndef SMCCC_PCI_SEG_INFO #define SMCCC_PCI_SEG_INFO SMCCC_PCI_CALL_VAL(0x134) #endif /* * smccc_test_copy_to_user() * copy arm_res a* registers to user space test_arg w array */ static int smccc_test_copy_to_user(unsigned long arg, struct arm_smccc_res *arm_res, int conduit) { struct smccc_test_arg test_arg = { }, __user *test_arg_user; test_arg_user = (struct smccc_test_arg __user *)arg; test_arg.size = sizeof(test_arg); test_arg.conduit = conduit; test_arg.w[0] = arm_res->a0; test_arg.w[1] = arm_res->a1; test_arg.w[2] = arm_res->a2; test_arg.w[3] = arm_res->a3; if (copy_to_user(test_arg_user, &test_arg, sizeof(*test_arg_user))) return -EFAULT; return 0; } /* * smccc_test_copy_from_user() * copy user space test_arg data to test_arg */ static int smccc_test_copy_from_user(struct smccc_test_arg *test_arg, unsigned long arg) { struct smccc_test_arg __user *user; user = (struct smccc_test_arg __user *)arg; return copy_from_user(test_arg, user, sizeof(*test_arg)); } static long smccc_test_pci_version(unsigned long arg) { struct arm_smccc_res arm_res = { }; int conduit; conduit = arm_smccc_1_1_invoke(SMCCC_PCI_VERSION, 0, 0, 0, 0, 0, 0, 0, &arm_res); return smccc_test_copy_to_user(arg, &arm_res, conduit); } static long smccc_test_pci_features(unsigned long arg) { struct arm_smccc_res arm_res = { }; struct smccc_test_arg test_arg; int ret, conduit; ret = smccc_test_copy_from_user(&test_arg, arg); if (ret) return ret; conduit = arm_smccc_1_1_invoke(SMCCC_PCI_FEATURES, test_arg.w[0], 0, 0, 0, 0, 0, 0, &arm_res); return smccc_test_copy_to_user(arg, &arm_res, conduit); } static long smccc_test_pci_get_seg_info(unsigned long arg) { struct arm_smccc_res arm_res = { }; struct smccc_test_arg test_arg; int ret, conduit; ret = smccc_test_copy_from_user(&test_arg, arg); if (ret) return ret; conduit = arm_smccc_1_1_invoke(SMCCC_PCI_SEG_INFO, test_arg.w[1], 0, 0, 0, 0, 0, 0, &arm_res); return smccc_test_copy_to_user(arg, &arm_res, conduit); } static long smccc_test_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { u32 size; u32 __user *user_size = (u32 __user *)arg; if (get_user(size, user_size)) return -EFAULT; if (size != sizeof(struct smccc_test_arg)) return -EINVAL; switch (cmd) { case SMCCC_TEST_PCI_VERSION: return smccc_test_pci_version(arg); case SMCCC_TEST_PCI_FEATURES: return smccc_test_pci_features(arg); case SMCCC_TEST_PCI_READ: /* TODO */ return -ENOTSUPP; case SMCCC_TEST_PCI_WRITE: /* TODO */ return -ENOTSUPP; case SMCCC_TEST_PCI_GET_SEG_INFO: return smccc_test_pci_get_seg_info(arg); default: break; } return -ENOTTY; } static int smccc_test_open(struct inode *inode, struct file *file) { return 0; } static int smccc_test_close(struct inode *inode, struct file *file) { return 0; } static const struct file_operations smccc_test_fops = { .owner = THIS_MODULE, .unlocked_ioctl = smccc_test_ioctl, .open = smccc_test_open, .release = smccc_test_close, .llseek = no_llseek, }; static struct miscdevice smccc_test_dev = { MISC_DYNAMIC_MINOR, "smccc_test", &smccc_test_fops }; static int __init smccc_test_init(void) { int ret; ret = arm_smccc_get_version(); pr_info(MODULE_NAME ": ARM SMCCC version %d.%d.%d\n", (ret >> 16) & 0xff, (ret >> 8) & 0xff, ret & 0xff); ret = misc_register(&smccc_test_dev); if (ret) { pr_err(MODULE_NAME ": can't misc_register on minor=%d\n", MISC_DYNAMIC_MINOR); return ret; } return 0; } static void __exit smccc_test_exit(void) { misc_deregister(&smccc_test_dev); } #else static int __init smccc_test_init(void) { pr_info(MODULE_NAME ": ARM SMCCC not supported on this kernel and architecture\n"); return -ENODEV; } static void __exit smccc_test_exit(void) { } #endif module_init(smccc_test_init); module_exit(smccc_test_exit); smccc_test/smccc_test.h000066400000000000000000000025251465205512700155200ustar00rootroot00000000000000/* * SMCCC test driver * * Copyright(C) 2021-2024 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. */ #ifndef _SMCCC_TEST_H_ #define _SMCCC_TEST_H_ #include struct smccc_test_arg { __u32 size; __u32 conduit; __u32 w[8]; }; #define SMCCC_TEST_PCI_VERSION \ _IOWR('p', 0x01, struct smccc_test_arg) #define SMCCC_TEST_PCI_FEATURES \ _IOWR('p', 0x02, struct smccc_test_arg) #define SMCCC_TEST_PCI_READ \ _IOWR('p', 0x03, struct smccc_test_arg) #define SMCCC_TEST_PCI_WRITE \ _IOWR('p', 0x04, struct smccc_test_arg) #define SMCCC_TEST_PCI_GET_SEG_INFO \ _IOWR('p', 0x05, struct smccc_test_arg) #endif snapcraft.yaml000066400000000000000000000025501465205512700137340ustar00rootroot00000000000000name: fwts version: V24.07.00 summary: The Firmware Test Suite (FWTS) description: This is a firmware test suite that performs sanity checks on system firmware. It is intended to identify BIOS and ACPI errors and if appropriate it will try to explain the errors and give advice to help workaround or fix firmware bugs. It is primarily intended to be a Linux-centric firmware troubleshooting tool. confinement: devmode type: app grade: stable assumes: [snapd2.45] base: core20 architectures: - build-on: s390x - build-on: ppc64el - build-on: arm64 - build-on: armhf - build-on: amd64 - build-on: riscv64 - build-on: i386 parts: fwts: plugin: autotools source: https://github.com/fwts/fwts source-type: git stage-packages: - libfdt1 - libbsd0 - libpci3 build-packages: - gcc - make - autoconf - automake - libtool - flex - bison - dh-autoreconf - libglib2.0-dev - libfdt-dev - libbsd-dev apps: fwts: plugs: [home, hardware-observe, io-ports-control, kernel-module-control, log-observe, system-observe ] command: usr/local/bin/fwts environment: LD_LIBRARY_PATH: $LD_LIBRARY_PATH:$SNAP/usr/local/lib/fwts src/000077500000000000000000000000001465205512700116545ustar00rootroot00000000000000src/Makefile.am000066400000000000000000000140711465205512700137130ustar00rootroot00000000000000# Must build in this order: # 1. acpica/source/compiler # 2. lib # 3. acpica # ... because the libs in this bundled acpica/ depend on lib/ (libfwts.so), # but libfwts.so depends on libraries produced by acpica/source/compiler. SUBDIRS = libfwtsiasl lib libfwtsacpica AM_CPPFLAGS = \ -I$(top_srcdir)/src/lib/include \ -I$(top_srcdir)/src/acpica/source/include \ -I$(top_srcdir)/src/acpica/source/compiler \ -I$(top_srcdir)/efi_runtime \ -I$(top_srcdir)/smccc_test \ -pthread \ -Wall -Werror -Wextra \ -Wno-address-of-packed-member \ -Wfloat-equal -Wmissing-declarations \ -Wno-long-long -Wredundant-decls -Wshadow \ -Wno-missing-field-initializers \ -Wno-missing-braces -Wno-sign-compare \ -Wno-multichar -Wcast-qual bin_PROGRAMS = fwts fwts_CPPFLAGS = \ $(AM_CPPFLAGS) \ @GIO_CFLAGS@ \ @GLIB_CFLAGS@ \ -DACPI_DEBUG_OUTPUT if HAVE_LIBFDT dt_tests = \ devicetree/dt_base/dt_base.c \ devicetree/dt_sysinfo/dt_sysinfo.c mem_tests = \ opal/mem_info.c \ opal/reserv_mem.c cpu_tests = \ opal/cpu_info.c power_mgmt_tests = \ opal/power_mgmt_info.c endif if HAVE_LIBFDT if HAVE_LIBPCI pci_tests = \ opal/pci_info.c endif endif # # fwts main + tests # fwts_SOURCES = main.c \ acpi/ac_adapter/ac_adapter.c \ acpi/acpidump/acpidump.c \ acpi/acpiinfo/acpiinfo.c \ acpi/acpipld/acpipld.c \ acpi/acpitables/acpitables.c \ sbbr/acpitables/acpitables.c \ acpi/aest/aest.c \ acpi/apicinstance/apicinstance.c \ acpi/asf/asf.c \ acpi/aspt/aspt.c \ acpi/battery/battery.c \ acpi/bert/bert.c \ acpi/bgrt/bgrt.c \ acpi/boot/boot.c \ acpi/brightness/brightness-helper.c \ acpi/brightness/brightness.c \ acpi/brightness/autobrightness.c \ acpi/ccel/ccel.c \ acpi/cedt/cedt.c \ acpi/checksum/checksum.c \ acpi/cpep/cpep.c \ acpi/crsdump/crsdump.c \ acpi/crsdump/prsdump.c \ acpi/csrt/csrt.c \ acpi/cstates/cstates.c \ acpi/dbgp/dbgp.c \ acpi/dbg2/dbg2.c \ acpi/devices/ac_adapter/ac.c \ acpi/devices/battery/battery.c \ acpi/devices/battery/smart_battery.c \ acpi/devices/ec/ec.c \ acpi/devices/buttons/power_button.c \ acpi/devices/buttons/sleep_button.c \ acpi/devices/lid/lid.c \ acpi/devices/nvdimm/nvdimm.c \ acpi/devices/sensor/als.c \ acpi/devices/time/time.c \ acpi/devices/wpc/wpc.c \ acpi/dmar/dmar.c \ acpi/dppt/dppt.c \ acpi/drtm/drtm.c \ acpi/dsddump/dsddump.c \ acpi/ecdt/ecdt.c \ acpi/einj/einj.c \ acpi/erst/erst.c \ acpi/facs/facs.c \ acpi/fadt/fadt.c \ sbbr/fadt/fadt.c \ acpi/fan/fan.c \ acpi/fpdt/fpdt.c \ acpi/gpedump/gpedump.c \ acpi/gtdt/gtdt.c \ acpi/hest/hest.c \ acpi/hpet/hpet.c \ acpi/hmat/hmat.c \ acpi/iort/iort.c \ acpi/ibft/ibft.c \ acpi/ivrs/ivrs.c \ acpi/lid/lid.c \ acpi/lpit/lpit.c \ acpi/madt/madt.c \ acpi/mcfg/mcfg.c \ acpi/mchi/mchi.c \ acpi/misc/misc.c \ acpi/mpam/mpam.c \ acpi/mpst/mpst.c \ acpi/msct/msct.c \ acpi/msdm/msdm.c \ acpi/method/method.c \ acpi/nfit/nfit.c \ acpi/nhltdump/nhltdump.c \ acpi/osilinux/osilinux.c \ acpi/pcc/pcc.c \ acpi/pcct/pcct.c \ acpi/pdtt/pdtt.c \ acpi/powerbutton/powerbutton.c \ acpi/plddump/plddump.c \ acpi/phat/phat.c \ acpi/pmtt/pmtt.c \ acpi/pptt/pptt.c \ acpi/rasf/rasf.c \ acpi/ras2/ras2.c \ acpi/rgrt/rgrt.c \ acpi/rsdp/rsdp.c \ sbbr/rsdp/rsdp.c \ acpi/rsdt/rsdt.c \ acpi/s3/s3.c \ acpi/s3pt/s3pt.c \ acpi/s3power/s3power.c \ acpi/s4/s4.c \ acpi/sbst/sbst.c \ acpi/sdei/sdei.c \ acpi/sdev/sdev.c \ acpi/skvl/skvl.c \ acpi/slic/slic.c \ acpi/slit/slit.c \ acpi/spcr/spcr.c \ acpi/spmi/spmi.c \ acpi/srat/srat.c \ acpi/stao/stao.c \ acpi/svkl/svkl.c \ acpi/syntaxcheck/syntaxcheck.c \ acpi/tcpa/tcpa.c \ acpi/tpm2/tpm2.c \ acpi/uefi/uefi.c \ acpi/uniqueid/uniqueid.c \ acpi/viot/viot.c \ acpi/waet/waet.c \ acpi/wakealarm/wakealarm.c \ acpi/wdat/wdat.c \ acpi/wmi/wmi.c \ acpi/wpbt/wpbt.c \ acpi/wsmt/wsmt.c \ acpi/xsdt/xsdt.c \ acpi/xenv/xenv.c \ apic/apicedge/apicedge.c \ bios/bios_info/bios_info.c \ bios/bios32/bios32.c \ bios/ebda_region/ebda_region.c \ bios/ebdadump/ebdadump.c \ bios/hdaaudio/hdaaudio.c \ bios/interrupt/interrupt.c \ bios/memmapdump/memmapdump.c \ bios/mtrr/mtrr.c \ bios/multiproc/mpcheck.c \ bios/multiproc/mpdump.c \ bios/pciirq/pciirq.c \ bios/pnp/pnp.c \ bios/romdump/romdump.c \ bios/s0idle/s0idle.c \ bios/smm/smm.c \ cmos/cmosdump/cmosdump.c \ coreboot/clog/clog.c \ cpu/virt/virt.c \ cpu/virt/virt_svm.c \ cpu/virt/virt_vmx.c \ cpu/maxfreq/maxfreq.c \ cpu/cpufreq/cpufreq.c \ cpu/nx/nx.c \ cpu/msr/msr.c \ cpu/microcode/microcode.c \ dmi/dmicheck/dmicheck.c \ hotkey/hotkey/hotkey.c \ ipmi/bmc/bmc_info.c \ kernel/klog/klog.c \ kernel/olog/olog.c \ kernel/oops/oops.c \ kernel/version/version.c \ opal/mtd_info.c \ opal/prd_info.c \ pci/aspm/aspm.c \ pci/crs/crs.c \ pci/maxreadreq/maxreadreq.c \ pci/smccc/smccc.c \ tpm/tpmevlog/tpmevlog.c \ tpm/tpmevlogdump/tpmevlogdump.c \ uefi/csm/csm.c \ uefi/uefidump/uefidump.c \ uefi/uefirttime/uefirttime.c \ uefi/uefirtvariable/uefirtvariable.c \ uefi/uefirtmisc/uefirtmisc.c \ uefi/securebootcert/securebootcert.c \ uefi/uefivarinfo/uefivarinfo.c \ uefi/uefibootpath/uefibootpath.c \ uefi/uefirtauthvar/uefirtauthvar.c \ uefi/esrtdump/esrtdump.c \ uefi/esrt/esrt.c \ $(pci_tests) \ $(mem_tests) \ $(cpu_tests) \ $(power_mgmt_tests) \ $(dt_tests) fwts_LDFLAGS = -no-undefined fwts_LDADD = \ -lbsd \ $(top_builddir)/src/lib/src/libfwts.la \ $(top_builddir)/src/libfwtsiasl/libfwtsiasl.la \ $(top_builddir)/src/libfwtsacpica/libfwtsacpica.la man_MANS = ../doc/fwts.1 ../doc/fwts-collect.1 ../doc/fwts-frontend-text.1 -include $(top_srcdir)/git.mk src/acpi/000077500000000000000000000000001465205512700125705ustar00rootroot00000000000000src/acpi/ac_adapter/000077500000000000000000000000001465205512700146535ustar00rootroot00000000000000src/acpi/ac_adapter/ac_adapter.c000066400000000000000000000110001465205512700170720ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include static int ac_adapter_init(fwts_framework *fw) { int matching = 0; int not_matching = 0; if (fwts_ac_adapter_get_state(FWTS_AC_ADAPTER_ANY, &matching, ¬_matching) != FWTS_OK) { fwts_log_error(fw, "Power Supply does not exist, skipping test"); return FWTS_SKIP; } return FWTS_OK; } static int ac_adapter_test1(fwts_framework *fw) { int matching = 0; int not_matching = 0; fwts_ac_adapter_get_state(FWTS_AC_ADAPTER_ANY, &matching, ¬_matching); if ((matching == 0) || (not_matching > 0)) fwts_failed(fw, LOG_LEVEL_LOW, "NoACAdapterState", "Failed to detect any state in the ac_adapter state info."); else fwts_passed(fw, "Detected a state in the ac_adapter state info."); return FWTS_OK; } static int ac_adapter_test2(fwts_framework *fw) { int matching = 0; int not_matching = 0; fwts_printf(fw, "==== Make sure laptop is connected to the mains power. ====\n"); fwts_press_enter(fw); fwts_ac_adapter_get_state(FWTS_AC_ADAPTER_ONLINE, &matching, ¬_matching); if ((matching == 0) || (not_matching > 0)) fwts_failed(fw, LOG_LEVEL_HIGH, "NoACAdapterOnLine", "Failed to detect an ac_adapter on-line state."); else fwts_passed(fw, "Detected ac_adapter on-line state."); return FWTS_OK; } static int ac_adapter_test3(fwts_framework *fw) { int fd; size_t len; char *buffer; int matching; int not_matching; int events; int i; if ((fd = fwts_acpi_event_open()) < 0) { fwts_log_error(fw, "Cannot connect to acpid."); return FWTS_ERROR; } events = 0; matching = 0; not_matching = 0; fwts_printf(fw, "==== Please unplug the laptop power. ====\n"); for (i = 0; i < 20; i++) { if ((buffer = fwts_acpi_event_read(fd, &len, 1)) != NULL) { if (strstr(buffer, "ac_adapter")) { events++; fwts_ac_adapter_get_state(FWTS_AC_ADAPTER_OFFLINE, &matching, ¬_matching); break; } free(buffer); } fwts_printf(fw, "Waiting %2.2d/20\r", 20-i); } if (events == 0) fwts_failed(fw, LOG_LEVEL_HIGH, "NoACAdapterEventsOff", "Did not detect any ACPI ac-adapter events while waiting for power to be disconnected."); else if ((matching == 0) || (not_matching > 0)) fwts_failed(fw, LOG_LEVEL_HIGH, "NoACAdapterOffline", "Could not detect ac_adapter off-line state."); else fwts_passed(fw, "Detected ac_adapter off-line state."); events = 0; matching = 0; not_matching = 0; fwts_printf(fw, "==== Please re-connect the laptop power. ====\n"); for (i = 0; i < 20; i++) { if ((buffer = fwts_acpi_event_read(fd, &len, 1)) != NULL) { events++; if (strstr(buffer, "ac_adapter")) { events++; fwts_ac_adapter_get_state(FWTS_AC_ADAPTER_ONLINE, &matching, ¬_matching); break; } free(buffer); } fwts_printf(fw, "Waiting %2.2d/20\r", 20-i); } if (events == 0) fwts_failed(fw, LOG_LEVEL_HIGH, "NoACAdapterEventsOn", "Did not detect any ACPI ac-adapter events while waiting for power to be re-connected."); else if ((matching == 0) || (not_matching > 0)) fwts_failed(fw, LOG_LEVEL_HIGH, "NoACAdapterOnline", "Could not detect ac_adapter on-line state."); else fwts_passed(fw, "Detected ac_adapter on-line state."); fwts_acpi_event_close(fd); return FWTS_OK; } static fwts_framework_minor_test ac_adapter_tests[] = { { ac_adapter_test1, "Test ACPI ac_adapter state." }, { ac_adapter_test2, "Test ac_adapter initial on-line state." }, { ac_adapter_test3, "Test ac_adapter state changes." }, { NULL, NULL } }; static fwts_framework_ops ac_adapter_ops = { .description = "Interactive ac_adapter power test.", .init = ac_adapter_init, .minor_tests = ac_adapter_tests }; FWTS_REGISTER("ac_adapter", &ac_adapter_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_INTERACTIVE) #endif src/acpi/acpidump/000077500000000000000000000000001465205512700143725ustar00rootroot00000000000000src/acpi/acpidump/acpidump.c000066400000000000000000000150341465205512700163430ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include #include #include #include static void acpi_dump_raw_table( fwts_framework *fw, const fwts_acpi_table_info *table) { const uint8_t *data = (uint8_t *)table->data; const size_t length = table->length; size_t n; fwts_log_nl(fw); for (n = 0; n < length; n += 16) { int left = length - n; char buffer[128]; fwts_dump_raw_data(buffer, sizeof(buffer), data + n, n, left > 16 ? 16 : left); fwts_log_info_verbatim(fw, "%s", buffer); } } /* * Dump ACPI header in a form that matches IASL's header dump format */ static void acpidump_hdr( fwts_framework *fw, const fwts_acpi_table_header *hdr, const size_t length) { if (length < sizeof(fwts_acpi_table_header)) return; fwts_log_info_verbatim(fw, "[000h 0000 4] Signature : \"%4.4s\"", hdr->signature); fwts_log_info_verbatim(fw, "[004h 0004 4] Table Length : %8.8" PRIx32, hdr->length); fwts_log_info_verbatim(fw, "[008h 0008 1] Revision : %2.2" PRIx8, hdr->revision); fwts_log_info_verbatim(fw, "[009h 0009 1] Checksum : %2.2" PRIx8, hdr->checksum); fwts_log_info_verbatim(fw, "[00Ah 0010 6] Oem ID : \"%6.6s\"", hdr->oem_id); fwts_log_info_verbatim(fw, "[010h 0016 8] Oem Table ID : \"%8.8s\"", hdr->oem_tbl_id); fwts_log_info_verbatim(fw, "[018h 0024 4] Oem Revision : %8.8" PRIx32, hdr->oem_revision); fwts_log_info_verbatim(fw, "[01Ch 0028 4] Asl Compiler ID : \"%4.4s\"", hdr->creator_id); fwts_log_info_verbatim(fw, "[020h 0032 4] Asl Compiler Revision : %8.8" PRIx32, hdr->creator_revision); } /* * Alas, RSDP is a special case */ static void acpidump_rsdp( fwts_framework *fw, const fwts_acpi_table_info *table) { fwts_acpi_table_rsdp *rsdp = (fwts_acpi_table_rsdp *)table->data; if (table->length < sizeof(fwts_acpi_table_rsdp)) return; fwts_log_info_verbatim(fw, "[000h 0000 8] Signature : \"%8.8s\"", rsdp->signature); fwts_log_info_verbatim(fw, "[008h 0008 1] Checksum : %1.1" PRIx8, rsdp->checksum); fwts_log_info_verbatim(fw, "[009h 0009 6] Oem ID : \"%6.6s\"", rsdp->oem_id); fwts_log_info_verbatim(fw, "[00fh 0015 1] Revision : %2.2" PRIx8, rsdp->revision); fwts_log_info_verbatim(fw, "[010h 0016 4] RSDT Address : %8.8" PRIx32, rsdp->rsdt_address); fwts_log_info_verbatim(fw, "[014h 0020 4] Table Length : %8.8" PRIx32, rsdp->length); fwts_log_info_verbatim(fw, "[018h 0024 8] XSDT Address : %16.16" PRIx64, rsdp->xsdt_address); fwts_log_info_verbatim(fw, "[020h 0032 1] Extended Checksum : %2.2" PRIx8, rsdp->extended_checksum); fwts_log_info_verbatim(fw, "[021h 0033 3] Reserved : %2.2" PRIx8 " %2.2" PRIx8 " %2.2" PRIx8, rsdp->reserved[0], rsdp->reserved[1], rsdp->reserved[2]); } static int acpidump_test1(fwts_framework *fw) { int i; fwts_infoonly(fw); if (fwts_iasl_init(fw) != FWTS_OK) { fwts_aborted(fw, "Failure to initialise iasl, aborting."); return FWTS_ERROR; } for (i = 0; i < ACPI_MAX_TABLES; i++) { fwts_acpi_table_info *table; fwts_list *output; char *provenance; if (fwts_acpi_get_table(fw, i, &table) != FWTS_OK) break; if (table == NULL) break; switch (table->provenance) { case FWTS_ACPI_TABLE_FROM_FILE: provenance = " (loaded from file)"; break; case FWTS_ACPI_TABLE_FROM_FIXUP: provenance = " (generated by fwts)"; break; default: provenance = ""; break; } fwts_log_info_verbatim(fw, "%s @ %lx (%zd bytes)%s", table->name, (unsigned long)table->addr, table->length, provenance); fwts_log_info_verbatim(fw, "----"); if (!strcmp(table->name, "RSDP")) { /* RSDP is a special case */ acpidump_rsdp(fw, table); } else if (table->has_aml) { /* Disassembling the AML bloats the output, so ignore */ uint8_t *data = (uint8_t *)table->data; fwts_acpi_table_header hdr; fwts_acpi_table_get_header(&hdr, data); acpidump_hdr(fw, &hdr, table->length); fwts_log_info_verbatim(fw, "Contains AML Object Code."); } else if (fwts_iasl_disassemble(fw, table, true, &output) != FWTS_OK) { /* Cannot find, assume standard table header */ uint8_t *data = (uint8_t *)table->data; fwts_acpi_table_header hdr; fwts_acpi_table_get_header(&hdr, data); acpidump_hdr(fw, &hdr, table->length); acpi_dump_raw_table(fw, table); } else { /* Successfully disassembled, so parse */ fwts_list_link *line; bool skip = false; bool unknown = false; fwts_list_foreach(line, output) { char *text = fwts_text_list_text(line); bool ignore = (strstr(text, "Raw Table Data:") != NULL); /* We don't want to emit this line */ if (strstr(text, "Unknown ACPI table signature") != NULL) { unknown = true; ignore = true; } /* and we want to ignore text in comments */ if (!strncmp(text, "/*", 2)) skip = true; if (!(ignore | skip | unknown)) fwts_log_info_verbatim(fw, "%s", fwts_text_list_text(line)); if (!strncmp(text, " */", 3)) skip = false; } fwts_text_list_free(output); if (unknown) acpi_dump_raw_table(fw, table); } fwts_log_nl(fw); } fwts_iasl_deinit(); /* Some systems don't have any ACPI tables */ if (!i) fwts_log_info(fw, "Cannot find any ACPI tables."); return FWTS_OK; } static fwts_framework_minor_test acpidump_tests[] = { { acpidump_test1, "Dump ACPI tables." }, { NULL, NULL } }; static fwts_framework_ops acpidump_ops = { .description = "Dump ACPI tables.", .minor_tests = acpidump_tests }; FWTS_REGISTER("acpidump", &acpidump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS) #endif src/acpi/acpiinfo/000077500000000000000000000000001465205512700143605ustar00rootroot00000000000000src/acpi/acpiinfo/acpiinfo.c000066400000000000000000000100711465205512700163130ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include static int acpiinfo_compiled_by(fwts_framework *fw, char *name, int instance) { char *compiler; char tmp[80]; char num[10]; fwts_acpi_table_info *table; fwts_acpi_table_header *header; if (fwts_acpi_find_table(fw, name, instance < 0 ? 0 : instance, &table) != FWTS_OK) return FWTS_ERROR; if (table == NULL || table->data == NULL) return FWTS_ERROR; header = (fwts_acpi_table_header *)table->data; if (strncmp(header->creator_id, "MSFT", 4) == 0) { compiler = "Microsoft"; } else if (strncmp(header->creator_id, "INTL", 4) == 0) { compiler = "Intel"; } else { snprintf(tmp, sizeof(tmp), "Unknown (%4.4s)", header->creator_id); compiler = tmp; } if (instance == -1) *num = '\0'; else snprintf(num, sizeof(num), "%d", instance); fwts_log_info(fw, "Table %4.4s%s, OEM %6.6s, created with %4.4s (%s) compiler.", header->signature, num, header->oem_id, header->creator_id, compiler); return FWTS_OK; } static int acpiinfo_test1(fwts_framework *fw) { char *str; if (((str = fwts_get("/sys/module/acpi/parameters/acpica_version")) == NULL) && ((str = fwts_get("/proc/acpi/info")) == NULL)) fwts_log_info(fw, "Cannot get ACPI version info from " "/sys/module/acpi/parameters/acpica_version or /proc/acpi/info"); else { float version; int yearmonth; fwts_chop_newline(str); sscanf(str, "%6d", &yearmonth); if (yearmonth > 202103) { version = 6.4; } else if (yearmonth > 201902) { version = 6.3; } else if (yearmonth > 201609) { version = 6.2; } else if (yearmonth > 201509) { version = 6.1; } else if (yearmonth > 201404) { version = 6.0; } else if (yearmonth > 201110) { version = 5.0; } else if (yearmonth > 200906) { version = 4.0; } else if (yearmonth > 200505) { version = 3.0; } else { version = 2.0; } fwts_log_info(fw, "Kernel ACPICA driver version: %s, supports ACPI %2.1f", str, version); free(str); } fwts_infoonly(fw); return FWTS_OK; } static int acpiinfo_test2(fwts_framework *fw) { fwts_acpi_table_info *table; uint8_t major; uint8_t minor = 0; if (fwts_acpi_find_table(fw, "FACP", 0, &table) != FWTS_OK) return FWTS_ERROR; if (table == NULL || table->data == NULL) return FWTS_ERROR; fwts_get_fadt_version(fw, &major, &minor); fwts_log_info(fw, "FACP ACPI Version: %" PRIu8 ".%" PRIu8, major, minor); fwts_infoonly(fw); return FWTS_OK; } static int acpiinfo_test3(fwts_framework *fw) { int i; fwts_log_info(fw, "Determine the compiler used to generate the ACPI AML in the DSDT and SSDT."); acpiinfo_compiled_by(fw, "DSDT", -1); for (i = 0; i < 32 ; i++) { /* If we can't fetch the Nth SSDT, we've reached the end */ if (acpiinfo_compiled_by(fw, "SSDT", i) != FWTS_OK) break; } fwts_infoonly(fw); return FWTS_OK; } static fwts_framework_minor_test acpiinfo_tests[] = { { acpiinfo_test1, "Determine Kernel ACPI version." }, { acpiinfo_test2, "Determine machine's ACPI version." }, { acpiinfo_test3, "Determine AML compiler." }, { NULL, NULL } }; static fwts_framework_ops acpiinfo_ops = { .description = "General ACPI information test.", .minor_tests = acpiinfo_tests }; FWTS_REGISTER("acpiinfo", &acpiinfo_ops, FWTS_TEST_EARLY, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/acpipld/000077500000000000000000000000001465205512700142045ustar00rootroot00000000000000src/acpi/acpipld/acpipld.c000066400000000000000000000063151465205512700157710ustar00rootroot00000000000000/* * Copyright (C) 2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include "fwts_acpi_object_eval.h" /* * acpipld_init() * initialize ACPI */ static int acpipld_init(fwts_framework *fw) { if (fwts_acpi_init(fw) != FWTS_OK) { fwts_log_error(fw, "Cannot initialise ACPI."); return FWTS_ERROR; } return FWTS_OK; } /* * acpipld_deinit * de-intialize ACPI */ static int acpipld_deinit(fwts_framework *fw) { return fwts_acpi_deinit(fw); } static int acpipld_test1(fwts_framework *fw) { fwts_list_link *item; fwts_list *objects; const size_t name_len = 4; bool failed = false; if ((objects = fwts_acpi_object_get_names()) == NULL) { fwts_log_info(fw, "Cannot find any ACPI objects"); return FWTS_ERROR; } fwts_list_foreach(item, objects) { char *name = fwts_list_data(char *, item); const size_t len = strlen(name); if (!strncmp("_PLD", name + len - name_len, name_len)) { fwts_list_link *item_upc; char *name_cmp; name_cmp = strdup(name); strcpy(name_cmp + len - name_len, "_UPC"); fwts_list_foreach(item_upc, objects) { char *name_upc = fwts_list_data(char *, item_upc); if (!strncmp(name_cmp, name_upc, len)) { ACPI_OBJECT_LIST arg_list; ACPI_BUFFER buf; ACPI_OBJECT *obj; int ret; arg_list.Count = 0; arg_list.Pointer = NULL; ret = fwts_acpi_object_evaluate(fw, name_upc, &arg_list, &buf); if ((ACPI_FAILURE(ret) != AE_OK) || (buf.Pointer == NULL)) continue; obj = buf.Pointer; if (obj->Package.Elements[0].Integer.Value == 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ACPIPLDExistNotConnectable", "The ACPI method %s exists on the port " "claimed not connectable by the %s.", name, name_upc); failed = true; } free(buf.Pointer); } } free(name_cmp); } } if (!failed) fwts_passed(fw, "All _PLD methods exist only on the port connectable."); return FWTS_OK; } static fwts_framework_minor_test acpipld_tests[] = { { acpipld_test1, "Check the ACPI _PLD methods exist only on the port connectable." }, { NULL, NULL } }; static fwts_framework_ops acpipld_ops = { .description = "Check if the ACPI _PLD methods exist only on the port connectable.", .init = acpipld_init, .deinit = acpipld_deinit, .minor_tests = acpipld_tests }; FWTS_REGISTER("acpipld", &acpipld_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/acpitables/000077500000000000000000000000001465205512700146775ustar00rootroot00000000000000src/acpi/acpitables/acpitables.c000066400000000000000000000172271465205512700171630ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include #include #include #include typedef struct { const char *name; const uint8_t revision; } fwts_acpi_table_rev; static bool acpi_table_check_field(const char *field, const size_t len) { size_t i; for (i = 0; i < len; i++) if (!isascii(field[i])) return false; return true; } static bool acpi_table_check_field_test( fwts_framework *fw, const char *table_name, const char *field_name, const char *field, const size_t len) { if (!acpi_table_check_field(field, len)) { fwts_failed(fw, LOG_LEVEL_LOW, "ACPITableHdrInfo", "ACPI Table %s has non-ASCII characters in " "header field %s", table_name, field_name); return false; } return true; } static int acpi_table_check_test1(fwts_framework *fw) { int i; bool checked = false; for (i = 0; ; i++) { fwts_acpi_table_info *info; fwts_acpi_table_header *hdr; char name[50]; bool passed; if (fwts_acpi_get_table(fw, i, &info) != FWTS_OK) break; if (info == NULL) continue; checked = true; /* RSDP and FACS are special cases, skip these */ if (!strcmp(info->name, "RSDP") || !strcmp(info->name, "FACS")) continue; hdr = (fwts_acpi_table_header *)info->data; if (acpi_table_check_field(hdr->signature, 4)) { snprintf(name, sizeof(name), "%4.4s", hdr->signature); } else { /* Table name not printable, so identify it by the address */ snprintf(name, sizeof(name), "at address 0x%" PRIx64, info->addr); } /* * Tables shouldn't be short, however, they do have at * least 4 bytes with their signature else they would not * have been loaded by this stage. */ if (hdr->length < sizeof(fwts_acpi_table_header)) { fwts_failed(fw, LOG_LEVEL_HIGH, "ACPITableHdrShort", "ACPI Table %s is too short, only %" PRIu32 " bytes long. Further " "header checks will be omitted.", name, hdr->length); continue; } /* Warn about empty tables */ if (hdr->length == sizeof(fwts_acpi_table_header)) { fwts_warning(fw, "ACPI Table %s is empty and just contains a table header. Further " "header checks will be omitted.", name); continue; } passed = acpi_table_check_field_test(fw, name, "Signature", hdr->signature, 4) & acpi_table_check_field_test(fw, name, "OEM ID", hdr->oem_id, 6) & acpi_table_check_field_test(fw, name, "OEM Table ID", hdr->oem_tbl_id, 8) & acpi_table_check_field_test(fw, name, "Creator ID", hdr->creator_id, 4); if (passed) fwts_passed(fw, "Table %s has valid signature and ID strings.", name); } if (!checked) fwts_aborted(fw, "Cannot find any ACPI tables."); return FWTS_OK; } /* Supported ACPI tables (see Table 5-30 in ACPI spec) * Note: OEMx (N/A) and PSDT (deleted) aren't included. */ static const fwts_acpi_table_rev acpi_61_rev[] = { {"APIC", 4}, {"BERT", 1}, {"BGRT", 1}, {"CPEP", 1}, {"DSDT", 2}, {"ECDT", 1}, {"EINJ", 1}, {"ERST", 1}, {"FACP", 6}, {"FPDT", 1}, {"GTDT", 2}, {"HEST", 1}, {"MSCT", 1}, {"MPST", 1}, {"NFIT", 1}, {"PCCT", 1}, {"PMTT", 1}, {"RASF", 1}, {"RSDT", 1}, {"SBST", 1}, {"SLIT", 1}, {"SRAT", 3}, {"SSDT", 2}, {"XSDT", 1}, {NULL, 0xff} // end of table }; static const fwts_acpi_table_rev acpi_62_rev[] = { {"APIC", 4}, {"BERT", 1}, {"BGRT", 1}, {"CPEP", 1}, {"DSDT", 2}, {"ECDT", 1}, {"EINJ", 1}, {"ERST", 1}, {"FACP", 6}, {"FPDT", 1}, {"GTDT", 2}, {"HEST", 1}, {"MSCT", 1}, {"MPST", 1}, {"NFIT", 1}, {"PCCT", 1}, {"PMTT", 1}, {"PPTT", 1}, {"RASF", 1}, {"RSDT", 1}, {"SBST", 1}, {"SLIT", 1}, {"SRAT", 3}, {"SSDT", 2}, {"XSDT", 1}, {NULL, 0xff} // end of table }; static const fwts_acpi_table_rev acpi_63_rev[] = { {"APIC", 5}, {"BERT", 1}, {"BGRT", 1}, {"CPEP", 1}, {"DSDT", 2}, {"ECDT", 1}, {"EINJ", 1}, {"ERST", 1}, {"FACP", 6}, {"FPDT", 1}, {"GTDT", 3}, {"HEST", 1}, {"MSCT", 1}, {"MPST", 1}, {"NFIT", 1}, {"PCCT", 2}, {"PMTT", 1}, {"PPTT", 2}, {"RASF", 1}, {"RSDT", 1}, {"SBST", 1}, {"SDEV", 1}, {"SLIT", 1}, {"SRAT", 3}, {"SSDT", 2}, {"XSDT", 1}, {NULL, 0xff} // end of table }; static const fwts_acpi_table_rev acpi_64_rev[] = { {"APIC", 5}, {"BERT", 1}, {"BGRT", 1}, {"CPEP", 1}, {"DSDT", 2}, {"ECDT", 1}, {"EINJ", 1}, {"ERST", 1}, {"FACP", 6}, {"FPDT", 1}, {"GTDT", 3}, {"HEST", 1}, {"MSCT", 1}, {"MPST", 1}, {"NFIT", 1}, {"PCCT", 2}, {"PHAT", 1}, {"PMTT", 2}, {"PPTT", 3}, {"RASF", 1}, {"RSDT", 1}, {"SBST", 1}, {"SDEV", 1}, {"SLIT", 1}, {"SRAT", 3}, {"SSDT", 2}, {"XSDT", 1}, {NULL, 0xff} // end of table }; static int acpi_table_check_test2(fwts_framework *fw) { const fwts_acpi_table_rev *tables_rev; bool failed = false; uint32_t version; int i; version = fwts_get_acpi_version(fw); fwts_log_info_verbatim(fw, "System supports ACPI %4.4" PRIx32, version); switch (version) { case FWTS_ACPI_VERSION_61: tables_rev = acpi_61_rev; break; case FWTS_ACPI_VERSION_62: tables_rev = acpi_62_rev; break; case FWTS_ACPI_VERSION_63: tables_rev = acpi_63_rev; break; case FWTS_ACPI_VERSION_64: tables_rev = acpi_64_rev; break; default: fwts_log_info_verbatim(fw, "This test does not support ACPI %4.4" PRIx32 ".", version); return FWTS_SKIP; } for (i = 0; ; i++) { const fwts_acpi_table_rev *table_rev; fwts_acpi_table_header *hdr; fwts_acpi_table_info *info; if (fwts_acpi_get_table(fw, i, &info) != FWTS_OK) break; if (info == NULL) continue; if (!strcmp(info->name, "FACP") || !strcmp(info->name, "FACS") || !strcmp(info->name, "RSDP")) continue; hdr = (fwts_acpi_table_header *) info->data; for (table_rev = tables_rev; ; table_rev++) { if (!table_rev->name) break; if (!strncmp(info->name, table_rev->name, 4)) { if (table_rev->revision != hdr->revision) { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "ACPITableBadRevision", "ACPI Table %s revision was expected to be %" PRIu8 ", got %" PRIu8 ".", info->name, table_rev->revision, hdr->revision); } else fwts_log_info(fw, "Table %s has a matched revision.", info->name); } } } if (!failed) fwts_passed(fw, "ACPI spec %4.4" PRIx32 " has matched table revisions.", version); else fwts_advice(fw, "In \"ACPI Table Revision Overview\", ASWG suggests \"Conforming to a given ACPI " "specification means that each and every ACPI-related table conforms to the version " "number for that table that is listed in that version of the specification.\" " "Please refer to https://uefi.org/node/4185 for details."); return FWTS_OK; } static fwts_framework_minor_test acpi_table_check_tests[] = { { acpi_table_check_test1, "Test ACPI headers." }, { acpi_table_check_test2, "Test ACPI spec versus table revisions." }, { NULL, NULL } }; static fwts_framework_ops acpi_table_check_ops = { .description = "ACPI table headers sanity tests.", .minor_tests = acpi_table_check_tests }; FWTS_REGISTER("acpitables", &acpi_table_check_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI | FWTS_FLAG_SBBR) #endif src/acpi/aest/000077500000000000000000000000001465205512700135245ustar00rootroot00000000000000src/acpi/aest/aest.c000066400000000000000000000255441465205512700146360ustar00rootroot00000000000000/* * Copyright (C) 2022-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(AEST, &table) static void aest_processor_test( fwts_framework *fw, fwts_acpi_table_aest_processor *entry, uint32_t *offset, bool *passed) { fwts_log_info_verbatim(fw, " Node-specific data (Processor):"); fwts_log_info_simp_int(fw, " ACPI Processor ID: ", entry->acpi_processor_id); fwts_log_info_simp_int(fw, " Resource Type: ", entry->resource_type); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_log_info_simp_int(fw, " Flags: ", entry->flags); fwts_log_info_simp_int(fw, " Revision: ", entry->revision); fwts_log_info_simp_int(fw, " Processor affinity lvl ind: ", entry->processor_affinity_level_indicator); fwts_acpi_reserved_zero("AEST", "Reserved", entry->reserved, passed); fwts_acpi_reserved_bits("AEST", "Flags", entry->flags, 2, 7, passed); *offset += sizeof(fwts_acpi_table_aest_processor); if (entry->resource_type == FWTS_AEST_RESOURCE_CACHE) { fwts_acpi_table_aest_cache_resource_substructure *cache = (fwts_acpi_table_aest_cache_resource_substructure *) ((uint8_t *)entry + sizeof(fwts_acpi_table_aest_processor)); fwts_log_info_simp_int(fw, " Cache Reference: ", cache->cache_reference); fwts_log_info_simp_int(fw, " Reserved: ", cache->reserved); fwts_acpi_reserved_zero("AEST", "Reserved", cache->reserved, passed); *offset += sizeof(fwts_acpi_table_aest_cache_resource_substructure); } else if (entry->resource_type == FWTS_AEST_RESOURCE_TLB) { fwts_acpi_table_aest_tlb_resource_substructure *tlb = (fwts_acpi_table_aest_tlb_resource_substructure *) ((uint8_t *)entry + sizeof(fwts_acpi_table_aest_processor)); fwts_log_info_simp_int(fw, " TLB Reference: ", tlb->tlb_reference); fwts_log_info_simp_int(fw, " Reserved: ", tlb->reserved); fwts_acpi_reserved_zero("AEST", "Reserved", tlb->reserved, passed); *offset += sizeof(fwts_acpi_table_aest_tlb_resource_substructure); } else if (entry->resource_type == FWTS_AEST_RESOURCE_GENERIC) { fwts_acpi_table_aest_generic_resource_substructure *generic = (fwts_acpi_table_aest_generic_resource_substructure *) ((uint8_t *)entry + sizeof(fwts_acpi_table_aest_processor)); fwts_log_info_simp_int(fw, " Data: ", generic->data); *offset += sizeof(fwts_acpi_table_aest_generic_resource_substructure); } else fwts_acpi_reserved_type(fw, "AEST", entry->resource_type, 0, FWTS_AEST_RESOURCE_RESERVED, passed); } static void aest_interface_test( fwts_framework *fw, fwts_acpi_table_aest_interface *entry, bool *passed) { uint32_t reserved = entry->reserved[0] + (entry->reserved[1] << 8) + (entry->reserved[2] << 16); fwts_log_info_verbatim(fw, " Interface:"); fwts_log_info_simp_int(fw, " Interface Type: ", entry->interface_type); fwts_log_info_simp_int(fw, " Reserved: ", reserved); fwts_log_info_simp_int(fw, " Flags: ", entry->flags); fwts_log_info_simp_int(fw, " Base Address: ", entry->base_address); fwts_log_info_simp_int(fw, " Start Error Record Index: ", entry->start_error_record_index); fwts_log_info_simp_int(fw, " Number Of Error Records: ", entry->number_of_error_records); fwts_log_info_simp_int(fw, " Error Record Implemented: ", entry->error_record_implemented); fwts_log_info_simp_int(fw, " Status Reporting Supported: ", entry->error_record_based_status_reporting_supported); fwts_log_info_simp_int(fw, " Addressing Mode: ", entry->addressing_mode); fwts_acpi_reserved_zero("AEST", "Reserved", reserved, passed); fwts_acpi_reserved_bits("AEST", "Flags", entry->flags, 2, 31, passed); fwts_acpi_reserved_type(fw, "AEST", entry->interface_type, 0, 2, passed); } static void aest_interrupt_test( fwts_framework *fw, fwts_acpi_table_aest_interrupt *entry, bool *passed) { uint32_t reserved1 = entry->reserved1[0] + (entry->reserved1[1] << 8)+ (entry->reserved1[2] << 16); fwts_log_info_simp_int(fw, " Interrupt Type: ", entry->interrupt_type); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_log_info_simp_int(fw, " Interrupt Flags: ", entry->interrupt_flags); fwts_log_info_simp_int(fw, " Interrupt GSIV: ", entry->interrupt_gsiv); fwts_log_info_simp_int(fw, " ID: ", entry->id); fwts_log_info_simp_int(fw, " Reserved1: ", reserved1); fwts_acpi_reserved_zero("AEST", "Reserved", entry->reserved, passed); fwts_acpi_reserved_bits("AEST", "Interrupt Type", entry->interrupt_type, 2, 7, passed); fwts_acpi_reserved_bits("AEST", "Interrupt Flags", entry->interrupt_flags, 1, 31, passed); fwts_acpi_reserved_zero("AEST", "Reserved1", reserved1, passed); fwts_acpi_reserved_type(fw, "AEST", entry->interrupt_type, 0, 2, passed); } static int aest_test1(fwts_framework *fw) { fwts_acpi_table_aest_node *node; bool passed = true; uint32_t offset; fwts_log_info_verbatim(fw, "AEST Arm Error Source Table:"); node = (fwts_acpi_table_aest_node *)(table->data + sizeof(fwts_acpi_table_aest)); offset = sizeof(fwts_acpi_table_aest); while (offset < table->length) { fwts_acpi_table_aest_processor *processor = NULL; fwts_acpi_table_aest_memory_controller *mem_controller = NULL; fwts_acpi_table_aest_smmu *smmu = NULL; fwts_acpi_table_aest_vendor_defined *vendor_defined = NULL; fwts_acpi_table_aest_gic *gic = NULL; if (fwts_acpi_structure_length_zero(fw, "AEST", node->length, offset)) { passed = false; break; } fwts_log_info_verbatim(fw, " AEST node structure:"); fwts_log_info_simp_int(fw, " Type: ", node->type); fwts_log_info_simp_int(fw, " Length: ", node->length); fwts_log_info_simp_int(fw, " Reserved: ", node->reserved); fwts_log_info_simp_int(fw, " Offset to Node-specific data: ", node->offset_node_specific_data); fwts_log_info_simp_int(fw, " Offset to Node Interface: ", node->offset_node_interface); fwts_log_info_simp_int(fw, " Offset to Node Interrupt Array: ", node->offset_node_interrupt_array); fwts_log_info_simp_int(fw, " Node Interrupt Array Size: ", node->node_interrupt_size); fwts_log_info_simp_int(fw, " Timestamp Rate: ", node->timestamp_rate); fwts_log_info_simp_int(fw, " Reserved1: ", node->reserved1); fwts_log_info_simp_int(fw, " Error Injection Countdown Rate: ", node->error_injection_countdown_rate); fwts_acpi_reserved_zero("AEST", "Reserved", node->reserved, &passed); fwts_acpi_reserved_zero("AEST", "Reserved1", node->reserved1, &passed); offset += sizeof(fwts_acpi_table_aest_node); switch(node->type) { case FWTS_AEST_PROCESSOR: processor = (fwts_acpi_table_aest_processor *)(table->data + offset); aest_processor_test(fw, processor, &offset, &passed); break; case FWTS_AEST_MEMORY: mem_controller = (fwts_acpi_table_aest_memory_controller *)(table->data + offset); fwts_log_info_verbatim(fw, " Node-specific data (Memory Controller):"); fwts_log_info_simp_int(fw, " Proximity Domain: ", mem_controller->proximity_domain); offset += sizeof(fwts_acpi_table_aest_memory_controller); break; case FWTS_AEST_SMMU: smmu = (fwts_acpi_table_aest_smmu *)(table->data + offset); fwts_log_info_verbatim(fw, " Node-specific data (SMMU):"); fwts_log_info_simp_int(fw, " IORT Node Reference: ", smmu->iort_node_reference); fwts_log_info_simp_int(fw, " SMMU-specific Data Subcomponent Reference: ", smmu->smmu_specific_data_subcomponent_reference); offset += sizeof(fwts_acpi_table_aest_smmu); break; case FWTS_AEST_VENDOR_DEFINED: vendor_defined = (fwts_acpi_table_aest_vendor_defined *)(table->data + offset); fwts_log_info_verbatim(fw, " Node-specific data (Vendor-defined):"); fwts_log_info_simp_int(fw, " Hardware ID: ", vendor_defined->hardware_id); fwts_log_info_simp_int(fw, " SMMU-specific Data Subcomponent Reference: ", vendor_defined->unique_id); fwts_log_info_verbatim(fw, " Vendor-specific data:"); fwts_hexdump_data_prefix_all(fw, vendor_defined->vendor_specific_data, " ", sizeof(vendor_defined->vendor_specific_data)); offset += sizeof(fwts_acpi_table_aest_vendor_defined); break; case FWTS_AEST_GIC: gic = (fwts_acpi_table_aest_gic *)(table->data + offset); fwts_log_info_verbatim(fw, " Node-specific data (GIC):"); fwts_log_info_simp_int(fw, " Interface Type: ", gic->interface_type); fwts_log_info_simp_int(fw, " Instance Identifier: ", gic->instance_identifier); fwts_acpi_reserved_type(fw, "AEST", gic->interface_type, 0, FWTS_AEST_GIC_RESERVED, &passed); offset += sizeof(fwts_acpi_table_aest_gic); break; default: fwts_acpi_reserved_type(fw, "AEST", node->type, 0, FWTS_AEST_RESERVED, &passed); break; } if (node->offset_node_interface >= sizeof(fwts_acpi_table_aest_interface)) { aest_interface_test(fw, (fwts_acpi_table_aest_interface *)(table->data + offset), &passed); offset += sizeof(fwts_acpi_table_aest_interface); } uint32_t i; for (i = 0; i < node->node_interrupt_size; i++) { fwts_log_info_verbatim(fw, " Interrupt Array"); aest_interrupt_test(fw, (fwts_acpi_table_aest_interrupt *)(table->data + offset), &passed); offset += sizeof(fwts_acpi_table_aest_interrupt); } node = (fwts_acpi_table_aest_node *)(table->data + offset); fwts_log_nl(fw); } if (passed) fwts_passed(fw, "No issues found in AEST table."); return FWTS_OK; } static fwts_framework_minor_test aest_tests[] = { { aest_test1, "Validate AEST table." }, { NULL, NULL } }; static fwts_framework_ops aest_ops = { .description = "AEST Arm Error Source Table test.", .init = AEST_init, .minor_tests = aest_tests }; FWTS_REGISTER("aest", &aest_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/apicinstance/000077500000000000000000000000001465205512700152315ustar00rootroot00000000000000src/acpi/apicinstance/apicinstance.c000066400000000000000000000050251465205512700200400ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL static int apicinstance_test1(fwts_framework *fw) { fwts_acpi_table_info *first_madt_table = NULL; int i; int count; for (i = 0, count = 0;; i++) { fwts_acpi_table_info *table; if (fwts_acpi_get_table(fw, i, &table) != FWTS_OK) { fwts_aborted(fw, "Cannot load ACPI table."); return FWTS_ERROR; } if (table == NULL) break; if (strcmp(table->name, "APIC") == 0) { fwts_log_info(fw, "Found APIC/MADT table %s @ %" PRIx64 ", length 0x%zx", table->name, table->addr, table->length); if (first_madt_table == NULL) first_madt_table = table; else { if ((first_madt_table->length == table->length) && (memcmp(first_madt_table->data, table->data, table->length) == 0)) fwts_log_info(fw, " (and matches the first APIC/MADT table)."); else fwts_log_info(fw, " (and differs from first APIC/MADT table)."); } count++; } } if (count > 1) { char buffer[32]; fwts_failed(fw, LOG_LEVEL_HIGH, "MultipleAPICMADT", "Found %d APIC/MADT tables, the kernel expects just one.", count); snprintf(buffer, sizeof(buffer), " (or up to %d)", count); fwts_log_advice(fw, "If you find any APIC issues, perhaps try using " "acpi_apic_instance=2%s.", count > 2 ? buffer : ""); } else fwts_passed(fw, "Found %d APIC/MADT table(s), as expected.", count); return FWTS_OK; } static fwts_framework_minor_test apicinstance_tests[] = { { apicinstance_test1, "Test for single instance of APIC/MADT table." }, { NULL, NULL } }; static fwts_framework_ops apicinstance_ops = { .description = "Test for single instance of APIC/MADT table.", .minor_tests = apicinstance_tests }; FWTS_REGISTER("apicinstance", &apicinstance_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/asf/000077500000000000000000000000001465205512700133415ustar00rootroot00000000000000src/acpi/asf/asf.c000066400000000000000000000421651465205512700142660ustar00rootroot00000000000000/* * Copyright (C) 2016-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; static int asf_init(fwts_framework *fw) { if (fwts_acpi_find_table(fw, "ASF!", 0, &table) != FWTS_OK) { fwts_log_error(fw, "Cannot read ACPI tables."); return FWTS_ERROR; } if (table == NULL || (table && table->length == 0)) { fwts_log_error(fw, "ACPI ASF! table does not exist, skipping test"); return FWTS_SKIP; } return FWTS_OK; } /* * 4.1.2.1 ASF_INFO */ static void asf_check_info( fwts_framework *fw, ssize_t length, uint8_t *data, bool *passed, bool *abort) { fwts_acpi_table_asf_info *info = (fwts_acpi_table_asf_info *)data; if (length < (ssize_t)sizeof(fwts_acpi_table_asf_info)) { fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!InfoRecordTooShort", "ASF! ASF_INFO Record too short, " "expecting %zu bytes, instead got %zu bytes", sizeof(fwts_acpi_table_asf_info), length); *passed = false; *abort = true; return; } fwts_log_info_verbatim(fw, "ASF! ASF_INFO Record:"); fwts_log_info_verbatim(fw, " Min Watchdog Reset Value: 0x%2.2" PRIx8, info->watchdog_reset_value); fwts_log_info_verbatim(fw, " Min Poll Wait Time: 0x%2.2" PRIx8, info->min_sensor_poll_wait_time); fwts_log_info_verbatim(fw, " System ID: 0x%2.2" PRIx8, info->id); fwts_log_info_verbatim(fw, " IANA Manufacturer ID: 0x%2.2" PRIx8, info->iana_id); fwts_log_info_verbatim(fw, " Feature Flags: 0x%2.2" PRIx8, info->flags); fwts_log_info_verbatim(fw, " Reserved: 0x%2.2" PRIx8, info->reserved1); fwts_log_info_verbatim(fw, " Reserved: 0x%2.2" PRIx8, info->reserved2); fwts_log_info_verbatim(fw, " Reserved: 0x%2.2" PRIx8, info->reserved3); if (info->min_sensor_poll_wait_time < 2) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!InfoMinPollWaitTimeInvalid", "ASF! ASF_INFO Minimum Poll Wait Time is 0x%" PRIx8 " and must be in the range 0x02..0xff", info->min_sensor_poll_wait_time); } fwts_acpi_reserved_bits("ASF!", "ASF_INFO Feature Flags", info->flags, 1, 7, passed); fwts_acpi_reserved_zero("ASF!", "ASF_INFO Reserved1", info->reserved1, passed); fwts_acpi_reserved_zero("ASF!", "ASF_INFO Reserved2", info->reserved2, passed); fwts_acpi_reserved_zero("ASF!", "ASF_INFO Reserved3", info->reserved3, passed); if (*passed) fwts_passed(fw, "No issues found in ASF! ASF_INFO record."); } /* * 4.1.2.2 ASF_ALRT */ static void asf_check_alrt( fwts_framework *fw, ssize_t record_length, ssize_t length, uint8_t *data, bool *passed, bool *abort) { fwts_acpi_table_asf_alrt *alrt = (fwts_acpi_table_asf_alrt *)data; uint8_t i; ssize_t total_length; if (length < (ssize_t)sizeof(fwts_acpi_table_asf_alrt)) { fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!AlrtRecordTooShort", "ASF! ASF_ALRT Record too short, " "expecting %zu bytes, instead got %zu bytes", sizeof(fwts_acpi_table_asf_alrt), length); *passed = false; *abort = true; return; } fwts_log_info_verbatim(fw, "ASF! ASF_ALRT Record:"); fwts_log_info_verbatim(fw, " Assertion Event Mask: 0x%2.2" PRIx8, alrt->assertion_mask); fwts_log_info_verbatim(fw, " De-Assertion Event Mask: 0x%2.2" PRIx8, alrt->deassertion_mask); fwts_log_info_verbatim(fw, " Number of Alerts: 0x%2.2" PRIx8, alrt->number_of_alerts); fwts_log_info_verbatim(fw, " Array Element Length: 0x%2.2" PRIx8, alrt->array_length); if ((alrt->number_of_alerts < 1) || (alrt->number_of_alerts > 8)) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!AlrtNumOfAlertsInvalid", "ASF! ASF_ALRT Number of Alerts field is 0x%" PRIx8 " and must be in the range 0x01..0x08", alrt->number_of_alerts); /* Don't trust the ALRT data, so abort */ return; } if (alrt->array_length != sizeof(fwts_acpi_table_asf_alrt_element)) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!AlrtArrayElementLengthInvalid", "ASF! ASF_ALRT Array Element Length is 0x%" PRIx8 " and must be instead 0x%" PRIx8, alrt->array_length, (uint8_t)sizeof(fwts_acpi_table_asf_alrt_element)); } total_length = sizeof(fwts_acpi_table_asf_alrt) + (alrt->number_of_alerts * sizeof(fwts_acpi_table_asf_alrt_element)); if (total_length > record_length) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!AlrtArrayElementLengthInvalid", "ASF! ASF_ALRT Array Element Length makes the " "total ASF_ALRT record size to be %zu bytes, however the " "table is only %zu bytes long", total_length, record_length); *passed = false; *abort = true; return; } data += sizeof(fwts_acpi_table_asf_alrt); for (i = 0; i < alrt->number_of_alerts; i++) { fwts_acpi_table_asf_alrt_element *element = (fwts_acpi_table_asf_alrt_element *)data; fwts_log_info_verbatim(fw, "ASF! ASF_ALRT Element %" PRIu8 ":", i); fwts_log_info_verbatim(fw, " Device Address: 0x%2.2" PRIx8, element->device_addr); fwts_log_info_verbatim(fw, " Alert Command: 0x%2.2" PRIx8, element->command); fwts_log_info_verbatim(fw, " Alert Data Mask: 0x%2.2" PRIx8, element->data_mask); fwts_log_info_verbatim(fw, " Alert Compare Value: 0x%2.2" PRIx8, element->compare_value); fwts_log_info_verbatim(fw, " Alert Event Sensor Type: 0x%2.2" PRIx8, element->sensor_type); fwts_log_info_verbatim(fw, " Alert Event Type: 0x%2.2" PRIx8, element->event_type); fwts_log_info_verbatim(fw, " Alert Event Offset: 0x%2.2" PRIx8, element->event_offset); fwts_log_info_verbatim(fw, " Alert Source Type: 0x%2.2" PRIx8, element->event_source_type); fwts_log_info_verbatim(fw, " Alert Event Severity: 0x%2.2" PRIx8, element->event_severity); fwts_log_info_verbatim(fw, " Alert Sensor Number: 0x%2.2" PRIx8, element->sensor_number); fwts_log_info_verbatim(fw, " Alert Entity: 0x%2.2" PRIx8, element->entity); fwts_log_info_verbatim(fw, " Alert Entity Instance: 0x%2.2" PRIx8, element->entity_instance); if (element->event_offset & 0x80) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!AlrtEventOffsetBit7Set", "ASF! ASF_ALRT Array Element %" PRIu8 " Event Offset Bit 7 is 1, " " and should be 0", i); } data += sizeof(fwts_acpi_table_asf_alrt_element); } if (*passed) fwts_passed(fw, "No issues found in ASF! ASF_ALRT record."); } /* * 4.1.2.4 ASF_RCTL */ static void asf_check_rctl( fwts_framework *fw, ssize_t record_length, ssize_t length, uint8_t *data, bool *passed, bool *abort) { fwts_acpi_table_asf_rctl *rctl = (fwts_acpi_table_asf_rctl *)data; uint8_t i; ssize_t total_length; if (length < (ssize_t)sizeof(fwts_acpi_table_asf_rctl)) { fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!RctlRecordTooShort", "ASF! ASF_RCTL Record too short, " "expecting %zu bytes, instead got %zu bytes", sizeof(fwts_acpi_table_asf_rctl), length); *passed = false; *abort = true; return; } fwts_log_info_verbatim(fw, "ASF! ASF_RCTL Record:"); fwts_log_info_verbatim(fw, " Number of Controls: 0x%2.2" PRIx8, rctl->number_of_controls); fwts_log_info_verbatim(fw, " Array Element Length: 0x%2.2" PRIx8, rctl->array_element_length); fwts_log_info_verbatim(fw, " Reserved: 0x%4.4" PRIx16, rctl->array_element_length); if (rctl->array_element_length != sizeof(fwts_acpi_table_asf_rctl_element)) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!RctlArrayElementLengthInvalid", "ASF! ASF_RCTL Array Element Length is 0x%" PRIx8 " and must be instead 0x%" PRIx8, rctl->array_element_length, (uint8_t)sizeof(fwts_acpi_table_asf_rctl_element)); } total_length = sizeof(fwts_acpi_table_asf_rctl) + (rctl->number_of_controls * sizeof(fwts_acpi_table_asf_rctl_element)); if (total_length > record_length) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!RctlArrayElementLengthInvalid", "ASF! ASF_RCTL Array Element Length makes the " "total ASF_RCTL record size to be %zu bytes, however the " "table is only %zu bytes long", total_length, record_length); *passed = false; *abort = true; return; } data += sizeof(fwts_acpi_table_asf_rctl); for (i = 0; i < rctl->number_of_controls; i++) { fwts_acpi_table_asf_rctl_element *element = (fwts_acpi_table_asf_rctl_element *)data; fwts_log_info_verbatim(fw, "ASF! ASF_RCTL Element %" PRIu8 ":", i); fwts_log_info_verbatim(fw, " Control Function: 0x%2.2" PRIx8, element->control_function); fwts_log_info_verbatim(fw, " Control Device Address: 0x%2.2" PRIx8, element->control_device_addr); fwts_log_info_verbatim(fw, " Control Command: 0x%2.2" PRIx8, element->control_command); fwts_log_info_verbatim(fw, " Control Value: 0x%2.2" PRIx8, element->control_value); if (element->control_function > 0x03) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!RctlCtrlFuncInvalid", "ASF! ASF_RCTL Control Function is 0x%" PRIx8 " and must be in the range 0x00..0x03", element->control_function); } data += sizeof(fwts_acpi_table_asf_rctl_element); } if (*passed) fwts_passed(fw, "No issues found in ASF! ASF_RCTL record."); } /* * 4.1.2.6 ASF_RMCP */ static void asf_check_rmcp( fwts_framework *fw, ssize_t length, uint8_t *data, bool *passed, bool *abort) { fwts_acpi_table_asf_rmcp *rmcp = (fwts_acpi_table_asf_rmcp *)data; if (length < (ssize_t)sizeof(fwts_acpi_table_asf_rmcp)) { fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!RmcpRecordTooShort", "ASF! ASF_RMCP Record too short, " "expecting %zu bytes, instead got %zu bytes", sizeof(fwts_acpi_table_asf_rmcp), length); *passed = false; *abort = true; return; } fwts_log_info_verbatim(fw, "ASF! ASF_RMCP Record:"); fwts_log_info_verbatim(fw, " Remote Control Cap.: " "0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " " "0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8, rmcp->remote_control_capabilities[0], rmcp->remote_control_capabilities[1], rmcp->remote_control_capabilities[2], rmcp->remote_control_capabilities[3], rmcp->remote_control_capabilities[4], rmcp->remote_control_capabilities[5], rmcp->remote_control_capabilities[6]); fwts_log_info_verbatim(fw, " Boot Opt. Completion Code:0x%2.2" PRIx8, rmcp->completion_code); fwts_log_info_verbatim(fw, " IANA Enterprise ID: 0x%8.8" PRIx32, rmcp->iana); fwts_log_info_verbatim(fw, " Special Command: 0x%2.2" PRIx8, rmcp->special_command); fwts_log_info_verbatim(fw, " Special Command Parameter:0x%4.4" PRIx16, rmcp->special_command_param); fwts_log_info_verbatim(fw, " Boot Options: 0x%2.2" PRIx8 " 0x%2.2" PRIx8, rmcp->boot_options[0], rmcp->boot_options[1]); fwts_log_info_verbatim(fw, " OEM Parameters: 0x%4.4" PRIx16, rmcp->oem_parameters); /* Specification, page 33-34 */ if (rmcp->iana == 0x4542) { /* Values 0x00..0x05 and 0xc0..0xff are allowed */ if ((rmcp->special_command > 0x05) && (rmcp->special_command < 0xc0)) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!RmcpSpecialCommandInvalid", "ASF! ASF_RMCP Special Command is 0x%" PRIx8 "and should be 0x00..0x05 or 0xc0..0xff", rmcp->special_command); } } if (*passed) fwts_passed(fw, "No issues found in ASF! ASF_RMCP record."); } /* * 4.1.2.7 ASF_ADDR */ static void asf_check_addr( fwts_framework *fw, ssize_t record_length, ssize_t length, uint8_t *data, bool *passed, bool *abort) { ssize_t total_length; fwts_acpi_table_asf_addr *addr = (fwts_acpi_table_asf_addr *)data; uint8_t i; if (length < (ssize_t)sizeof(fwts_acpi_table_asf_addr)) { fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!AddrRecordTooShort", "ASF! ASF_ADDR Record too short, " "expecting %zu bytes, instead got %zu bytes", sizeof(fwts_acpi_table_asf_addr), length); *passed = false; *abort = true; return; } fwts_log_info_verbatim(fw, "ASF! ASF_ADDR Record:"); fwts_log_info_verbatim(fw, " SEEPROM Address: 0x%2.2" PRIx8, addr->seeprom_addr); fwts_log_info_verbatim(fw, " Number of Devices: 0x%2.2" PRIx8, addr->number_of_devices); total_length = sizeof(fwts_acpi_table_asf_addr) + (addr->number_of_devices * sizeof(fwts_acpi_table_asf_addr_element)); if (total_length > record_length) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!AddrArrayElementLengthInvalid", "ASF! ASF_ADDR Number of Devices makes the " "total ASF_ADDR record size to be %zu bytes, however the " "table is only %zu bytes long", total_length, record_length); *passed = false; *abort = true; return; } data += sizeof(fwts_acpi_table_asf_addr); for (i = 0; i < addr->number_of_devices; i++) { fwts_acpi_table_asf_addr_element *element = (fwts_acpi_table_asf_addr_element *)data; fwts_log_info_verbatim(fw, " Fixed SMBus Address 0x%2.2" PRIx8, element->fixed_smbus_addr); data += sizeof(fwts_acpi_table_asf_addr_element); } if (*passed) fwts_passed(fw, "No issues found in ASF! ASF_ADDR record."); } /* * ASF! Hardware Error Source Table test * http://www.dmtf.org/sites/default/files/standards/documents/DSP0136.pdf */ static int asf_test1(fwts_framework *fw) { bool passed = true; bool abort = false; fwts_acpi_table_header *hdr = (fwts_acpi_table_header *)table->data; uint8_t *data = (uint8_t *)table->data; ssize_t length = (ssize_t)hdr->length; fwts_log_info_verbatim(fw, "ASF! Hardware Error Source Table"); data += sizeof(fwts_acpi_table_header); length -= sizeof(fwts_acpi_table_header); while (!abort && (length > 0)) { bool asf_passed = true; fwts_acpi_table_asf_header *asf_hdr = (fwts_acpi_table_asf_header *)data; /* Must have enough for a info header */ if (length < (ssize_t)sizeof(fwts_acpi_table_asf_header)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!TooShort", "ASF! table too short, expecting at least %zu bytes " "for an ASF! information record header, " "instead got %zu bytes", sizeof(fwts_acpi_table_asf_header), table->length); break; } fwts_log_info_verbatim(fw, "Type: 0x%2.2" PRIx8, asf_hdr->type); fwts_log_info_verbatim(fw, "Reserved: 0x%2.2" PRIx8, asf_hdr->reserved); fwts_log_info_verbatim(fw, "Length: 0x%4.4" PRIx16, asf_hdr->length); fwts_acpi_reserved_zero("ASF!", "Information Record Reserved", asf_hdr->reserved, &passed); if (asf_hdr->length > (uint32_t)length) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!InfoRecordLengthTooLong", "ASF! Information Record Reserved length is %" PRIu32 " and this is too long for the size given by " "the ASF! table. Expected at most %zu bytes.", asf_hdr->length, length); /* Since we can't trust the table, abort */ break; } switch (asf_hdr->type) { case 0x00: case 0x80: asf_check_info(fw, length - sizeof(*asf_hdr), data + sizeof(*asf_hdr), &asf_passed, &abort); data += asf_hdr->length; length -= asf_hdr->length; break; case 0x01: case 0x81: asf_check_alrt(fw, asf_hdr->length, length - sizeof(*asf_hdr), data + sizeof(*asf_hdr), &asf_passed, &abort); data += asf_hdr->length; length -= asf_hdr->length; break; case 0x02: case 0x82: asf_check_rctl(fw, asf_hdr->length, length - sizeof(*asf_hdr), data + sizeof(*asf_hdr), &asf_passed, &abort); data += asf_hdr->length; length -= asf_hdr->length; break; case 0x03: case 0x83: asf_check_rmcp(fw, length - sizeof(*asf_hdr), data + sizeof(*asf_hdr), &asf_passed, &abort); data += asf_hdr->length; length -= asf_hdr->length; break; case 0x04: case 0x84: asf_check_addr(fw, asf_hdr->length, length - sizeof(*asf_hdr), data + sizeof(*asf_hdr), &asf_passed, &abort); data += asf_hdr->length; length -= asf_hdr->length; break; default: fwts_failed(fw, LOG_LEVEL_HIGH, "ASF!InvalidType", "ASF! Information Record Type 0x%4.4" PRIx16 " is invalid, aborting check", asf_hdr->type); passed = false; length = 0; break; } passed &= asf_passed; fwts_log_nl(fw); } fwts_log_nl(fw); if (passed) fwts_passed(fw, "No issues found in ASF! table."); return FWTS_OK; } static fwts_framework_minor_test asf_tests[] = { { asf_test1, "ASF! Alert Standard Format Table test." }, { NULL, NULL } }; static fwts_framework_ops asf_ops = { .description = "ASF! Alert Standard Format Table test.", .init = asf_init, .minor_tests = asf_tests }; FWTS_REGISTER("asf", &asf_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/aspt/000077500000000000000000000000001465205512700135375ustar00rootroot00000000000000src/acpi/aspt/aspt.c000066400000000000000000000051541465205512700146570ustar00rootroot00000000000000/* * Copyright (C) 2016-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(ASPT, &table) /* * ASPT Table * (reverse engineered, table is common on AMD machines) */ static int aspt_test1(fwts_framework *fw) { bool passed = true; fwts_acpi_table_aspt *aspt = (fwts_acpi_table_aspt *)table->data; if (!fwts_acpi_table_length(fw, "ASPT", table->length, sizeof(fwts_acpi_table_aspt))) { passed = false; goto done; } fwts_log_info_verbatim(fw, "ASPT Table:"); fwts_log_info_simp_int(fw, " SPTT Start Address: ", aspt->sptt_addr_start); fwts_log_info_simp_int(fw, " SPTT End Address: ", aspt->sptt_addr_end); fwts_log_info_simp_int(fw, " AMRT Start Address: ", aspt->amrt_addr_start); fwts_log_info_simp_int(fw, " AMRT End Address: ", aspt->amrt_addr_end); fwts_log_nl(fw); /* * Without a specification to work with there is very * little we can do to validate this apart from the * simplest sanity check */ if (aspt->sptt_addr_end < aspt->sptt_addr_start) { fwts_failed(fw, LOG_LEVEL_HIGH, "ASPTSpttEndError", "ASPT SPTT end address is less than the SPTT start " "address."); passed = false; } if (aspt->amrt_addr_end < aspt->amrt_addr_start) { fwts_failed(fw, LOG_LEVEL_HIGH, "ASPTAmrtEndError", "ASPT AMRT end address is less than the AMRT start " "address."); passed = false; } done: if (passed) fwts_passed(fw, "No issues found in ASPT table."); return FWTS_OK; } static fwts_framework_minor_test aspt_tests[] = { { aspt_test1, "ASPT Table test." }, { NULL, NULL } }; static fwts_framework_ops aspt_ops = { .description = "ASPT Table test.", .init = ASPT_init, .minor_tests = aspt_tests }; FWTS_REGISTER("aspt", &aspt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/battery/000077500000000000000000000000001465205512700142425ustar00rootroot00000000000000src/acpi/battery/battery.c000066400000000000000000000207431465205512700160660ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corporation * Copyright (C) 2010-2024 Canonical * * This file was originally part of the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #include #include #include #include static void battery_discharge(fwts_framework *fw, const int secs) { int i; fwts_cpu_consume_start(); for (i = 0; i < secs; i++) { fwts_printf(fw, "Waiting %2.2d/%d\r", secs-i, secs); sleep(1); } fwts_cpu_consume_complete(); } static uint32_t get_full(fwts_framework *fw, const uint32_t index) { uint32_t capacity_mAh; uint32_t capacity_mWh; fwts_battery_get_capacity(fw, FWTS_BATTERY_REMAINING_CAPACITY, index, &capacity_mAh, &capacity_mWh); if (capacity_mAh != 0) { return capacity_mAh; } if (capacity_mWh != 0) { return capacity_mWh; } return 0; } static int wait_for_acpi_event(fwts_framework *fw, const char *name) { int gpe_count = 0; int fd; int events = 0; int matching = 0; size_t len; int i; fwts_gpe *gpes_start; fwts_gpe *gpes_end; if ((gpe_count = fwts_gpe_read(&gpes_start)) == FWTS_ERROR) { fwts_log_error(fw, "Cannot read GPEs."); return FWTS_ERROR; } if ((fd = fwts_acpi_event_open()) < 0) { fwts_log_error(fw, "Cannot connect to acpid."); fwts_gpe_free(gpes_start, gpe_count); return FWTS_ERROR; } for (i = 0; i <= 20; i++) { char *buffer; if ((buffer = fwts_acpi_event_read(fd, &len, 1)) != NULL) { char *str; if ((str = strstr(buffer, "battery")) != NULL) { events++; if (strstr(str, name) != NULL) { matching++; free(buffer); break; } } free(buffer); } fwts_printf(fw, "Waiting %2.2d/20\r", 20-i); } fwts_acpi_event_close(fd); if ((gpe_count = fwts_gpe_read(&gpes_end)) == FWTS_ERROR) { fwts_log_error(fw, "Cannot read GPEs."); fwts_gpe_free(gpes_start, gpe_count); return FWTS_ERROR; } fwts_gpe_test(fw, gpes_start, gpes_end, gpe_count); fwts_gpe_free(gpes_start, gpe_count); fwts_gpe_free(gpes_end, gpe_count); if (events == 0) fwts_failed(fw, LOG_LEVEL_HIGH, "BatteryNoEvents", "Did not detect any ACPI battery events."); else { fwts_passed(fw, "Detected ACPI battery events."); if (matching == 0) fwts_failed(fw, LOG_LEVEL_HIGH, "BatteryNoEvents", "Could not detect ACPI events for battery %s.", name); else fwts_passed(fw, "Detected ACPI event for battery %s.", name); } return FWTS_OK; } static void check_charging( fwts_framework *fw, const uint32_t index, const char *name) { uint32_t i; /* when we get here we KNOW the state is "charging" */ uint32_t initial_value; fwts_printf(fw, "==== Waiting to see if battery '%s' charges ====\n", name); initial_value = get_full(fw, index); for (i = 0; i <= 120; i++) { uint32_t new_value = get_full(fw, index); if (new_value>initial_value) { fwts_passed(fw, "Battery %s charge is incrementing as expected.", name); return; } fwts_printf(fw, "Waiting %3.3d/120\r", 120-i); sleep(1); } fwts_failed(fw, LOG_LEVEL_MEDIUM, "BatteryNotCharging", "Battery %s claims it's charging but no charge is added", name); } static void check_discharging( fwts_framework *fw, const uint32_t index, const char *name) { uint32_t i; /* when we get here we KNOW the state is "discharging" */ uint32_t initial_value; fwts_printf(fw, "==== Waiting to see if battery '%s' discharges ====\n", name); fwts_cpu_consume_start(); initial_value = get_full(fw, index); for (i = 0; i <= 120; i++) { uint32_t new_value = get_full(fw, index); if (new_value #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(BERT, &table) /* * For BERT refer to 18.3.1 Boot Error Record Table */ static int bert_test1(fwts_framework *fw) { bool passed = true; const fwts_acpi_table_bert *bert = (const fwts_acpi_table_bert *)table->data; void *mapping; size_t len; fwts_log_info_verbatim(fw, "Boot Error Record Table:"); fwts_log_info_simp_int(fw, " Error Region Length ", bert->boot_error_region_length); fwts_log_info_simp_int(fw, " Error Region ", bert->boot_error_region); fwts_log_nl(fw); /* Sanity check length */ if (bert->boot_error_region_length < sizeof(fwts_acpi_table_boot_error_region)) { fwts_failed(fw, LOG_LEVEL_HIGH, "BERTBootErrorRegionDataLength", "BERT Boot Error Region Length %" PRIu32 " is smaller than the minimum allowed size of %zu" " bytes", bert->boot_error_region_length, sizeof(fwts_acpi_table_boot_error_region)); passed = false; goto done; } /* * If the tables directly from the machine we're running on * then we can check out the error region too. */ if (table->provenance != FWTS_ACPI_TABLE_FROM_FIRMWARE) { fwts_log_info(fw, "ACPI table loaded from file so fwts will not memory map " "BERT boot error region 0x%16.16" PRIx64 ", skipping boot error region sanity checks.", bert->boot_error_region); goto done; } len = (size_t)bert->boot_error_region_length; mapping = fwts_mmap(bert->boot_error_region, len); if (mapping == FWTS_MAP_FAILED) { fwts_log_info(fw, "Cannot memory map BERT boot error region 0x%16.16" PRIx64 ", skipping boot error region sanity checks.", bert->boot_error_region); goto done; } if (fwts_safe_memread(mapping, len) != FWTS_OK) { fwts_log_info(fw, "Cannot read BERT boot error region 0x%16.16" PRIx64 ", skipping boot error region sanity checks.", bert->boot_error_region); goto done; } fwts_acpi_table_boot_error_region *region = (fwts_acpi_table_boot_error_region *)mapping; fwts_log_info_verbatim(fw, "Boot Error Region:"); fwts_log_info_verbatim(fw, " Block Status: bit [0] 0x%" PRIx32 " (Uncorrectable Error Valid)", (region->block_status >> 0) & 1); fwts_log_info_verbatim(fw, " Block Status: bit [1] 0x%" PRIx32 " (Correctable Error Valid)", (region->block_status >> 1) & 1); fwts_log_info_verbatim(fw, " Block Status: bit [2] 0x%" PRIx32 " (Multiple Uncorrectable Errors)", (region->block_status >> 2) & 1); fwts_log_info_verbatim(fw, " Block Status: bit [3] 0x%" PRIx32 " (Multiple Correctable Errors)", (region->block_status >> 3) & 1); fwts_log_info_verbatim(fw, " Block Status: bit [13:4] 0x%" PRIx32 " (Error Data Entry Count)", (region->block_status >> 4) & 0x3ff); fwts_log_info_simp_int(fw, " Raw Data Offset: ", region->raw_data_offset); fwts_log_info_simp_int(fw, " Raw Data Length: ", region->raw_data_length); fwts_log_info_simp_int(fw, " Data Length: ", region->data_length); fwts_log_info_simp_int(fw, " Error Severity ", region->error_severity); /* Sanity check raw data fields */ if (region->raw_data_offset > bert->boot_error_region_length) { fwts_failed(fw, LOG_LEVEL_HIGH, "BERTBootErrorRegionRawDataOffset", "BERT Boot Error Region Raw Data Offset %" PRIx32 " is larger than the region size of %" PRIu32 " bytes", region->raw_data_offset, bert->boot_error_region_length); passed = false; } if (region->raw_data_offset < sizeof(fwts_acpi_table_boot_error_region) + region->data_length) { if (region->raw_data_length) { fwts_failed(fw, LOG_LEVEL_HIGH, "BERTBootErrorRegionRawDataOffset", "BERT Boot Error Region Raw Data Offset %" PRIu32 " is smaller than end of the data region and" " BERT Boot Error Region Raw Data Length %" PRIu32 " is non-zero.", region->raw_data_offset, region->raw_data_length); passed = false; } } if (region->raw_data_length + region->raw_data_offset > bert->boot_error_region_length) { fwts_failed(fw, LOG_LEVEL_HIGH, "BERTBootErrorRegionRawDatalength", "BERT Boot Error Region Raw Data Length %" PRIu32 " is larger than the region size less the raw data offset of %" PRIu32 " bytes", region->raw_data_length, bert->boot_error_region_length - region->raw_data_offset); passed = false; } /* Sanity check data length */ if (region->data_length + sizeof(fwts_acpi_table_boot_error_region) > bert->boot_error_region_length) { fwts_failed(fw, LOG_LEVEL_HIGH, "BERTBootErrorRegionDatalength", "BERT Boot Error Region Data Length %" PRIu32 " is larger than the region size less the boot error region header of %" PRIu32 " bytes", region->data_length, bert->boot_error_region_length - (uint32_t)sizeof(fwts_acpi_table_boot_error_region)); passed = false; } if (region->error_severity > 3) { fwts_failed(fw, LOG_LEVEL_HIGH, "BERTBootErrorRegionDataLength", "BERT Boot Error Region Data Length %" PRIu32 " is larger than the remaining region size of %" PRIu32 " bytes", region->raw_data_length, bert->boot_error_region_length); passed = false; } fwts_munmap(mapping, (size_t)bert->boot_error_region_length); done: if (passed) fwts_passed(fw, "No issues found in BERT table."); return FWTS_OK; } static fwts_framework_minor_test bert_tests[] = { { bert_test1, "BERT Boot Error Record Table test." }, { NULL, NULL } }; static fwts_framework_ops bert_ops = { .description = "BERT Boot Error Record Table test.", .init = BERT_init, .minor_tests = bert_tests }; FWTS_REGISTER("bert", &bert_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/bgrt/000077500000000000000000000000001465205512700135265ustar00rootroot00000000000000src/acpi/bgrt/bgrt.c000066400000000000000000000046331465205512700146360ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(BGRT, &table) /* * BGRT Boot Graphics Resource Table */ static int bgrt_test1(fwts_framework *fw) { fwts_acpi_table_bgrt *bgrt = (fwts_acpi_table_bgrt*)table->data; bool passed = true; fwts_log_info_verbatim(fw, "BGRT Boot Graphics Resource Table:"); fwts_log_info_simp_int(fw, " Version: ", bgrt->version); fwts_log_info_simp_int(fw, " Status: ", bgrt->status); fwts_log_info_simp_int(fw, " Image Type: ", bgrt->image_type); fwts_log_info_simp_int(fw, " Image Memory Address: ", bgrt->image_addr); fwts_log_info_simp_int(fw, " Image Offset X: ", bgrt->image_offset_x); fwts_log_info_simp_int(fw, " Image Offset Y: ", bgrt->image_offset_y); fwts_acpi_fixed_value(fw, LOG_LEVEL_MEDIUM, "BGRT", "Version", bgrt->version, 1, &passed); fwts_acpi_reserved_bits("BGRT", "BGRT Status", bgrt->status, 3, 7, &passed); fwts_acpi_fixed_value(fw, LOG_LEVEL_MEDIUM, "BGRT", "Image Type", bgrt->image_type, 0, &passed); if (passed) fwts_passed(fw, "No issues found in BGRT table."); return FWTS_OK; } static fwts_framework_minor_test bgrt_tests[] = { { bgrt_test1, "BGRT Boot Graphics Resource Table test." }, { NULL, NULL } }; static fwts_framework_ops bgrt_ops = { .description = "BGRT Boot Graphics Resource Table test.", .init = BGRT_init, .minor_tests = bgrt_tests }; FWTS_REGISTER("bgrt", &bgrt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/boot/000077500000000000000000000000001465205512700135335ustar00rootroot00000000000000src/acpi/boot/boot.c000066400000000000000000000067751465205512700146610ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) && !(FWTS_ARCH_AARCH64) #include #include #include #include #include static fwts_acpi_table_info *table; static int boot_init(fwts_framework *fw) { if (fwts_acpi_find_table(fw, "BOOT", 0, &table) != FWTS_OK) { fwts_log_error(fw, "Cannot read ACPI tables."); return FWTS_ERROR; } if (fw->firmware_type == FWTS_FIRMWARE_UEFI) { fwts_log_error(fw, "ACPI BOOT table is deprecated on UEFI firmware, skipping test"); return FWTS_SKIP; } if (table == NULL || (table && table->length == 0)) { fwts_log_error(fw, "ACPI BOOT table does not exist, skipping test"); return FWTS_SKIP; } return FWTS_OK; } /* * BOOT Table * see https://msdn.microsoft.com/en-us/windows/hardware/gg463443.aspx */ static int boot_test1(fwts_framework *fw) { bool passed = true; fwts_acpi_table_boot *boot = (fwts_acpi_table_boot *)table->data; if (!fwts_acpi_table_length(fw, "BOOT", table->length, sizeof(fwts_acpi_table_boot))) { passed = false; goto done; } fwts_log_info_verbatim(fw, "BOOT Table:"); fwts_log_info_simp_int(fw, " CMOS Index: ", boot->cmos_index); fwts_log_info_simp_int(fw, " Reserved: ", boot->reserved[0]); fwts_log_info_simp_int(fw, " Reserved: ", boot->reserved[1]); fwts_log_info_simp_int(fw, " Reserved: ", boot->reserved[2]); fwts_log_nl(fw); /* * If the tables directly from the machine we're running on * then we can check out the error region too. */ if (table->provenance != FWTS_ACPI_TABLE_FROM_FIRMWARE) { fwts_log_info(fw, "ACPI table loaded from file so fwts will " "skip the read of the CMOS boot register"); } else { uint8_t val; fwts_cmos_read(boot->cmos_index, &val); fwts_log_info_simp_int(fw, "CMOS value: Bit ", val); fwts_log_info_simp_int(fw, " PnP OS [0] ", (val >> 0) & 1); fwts_log_info_simp_int(fw, " Booting Bit [1] ", (val >> 1) & 1); fwts_log_info_simp_int(fw, " DIAG Bit [2] ", (val >> 2) & 1); fwts_log_info_simp_int(fw, " SUPPRESSBOOTDISPLAY [3] ", (val >> 3) & 1); fwts_log_info_simp_int(fw, " RESERVED [4-6] ", (val >> 4) & 7); fwts_log_info_simp_int(fw, " PARITY [7] ", (val >> 7) & 1); /* Ignore doing parity check sum */ } done: if (passed) fwts_passed(fw, "No issues found in BOOT table."); return FWTS_OK; } static fwts_framework_minor_test boot_tests[] = { { boot_test1, "BOOT Table test." }, { NULL, NULL } }; static fwts_framework_ops boot_ops = { .description = "BOOT Table test.", .init = boot_init, .minor_tests = boot_tests }; FWTS_REGISTER("boot", &boot_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/brightness/000077500000000000000000000000001465205512700147405ustar00rootroot00000000000000src/acpi/brightness/autobrightness.c000066400000000000000000000137051465205512700201530ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #include #include #include #include "brightness-helper.h" static bool skip_tests; static int auto_brightness_test1(fwts_framework *fw) { struct dirent *entry; int actual_brightness; int max_brightness; DIR *brightness_dir = brightness_get_dir(); skip_tests = true; rewinddir(brightness_dir); do { entry = readdir(brightness_dir); if (entry == NULL || entry->d_name[0] == '.') continue; if (brightness_get_setting(entry->d_name, "actual_brightness", &actual_brightness) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotFound", "Actual brightness could not be accessed for %s.", entry->d_name); continue; } if (brightness_get_setting(entry->d_name, "max_brightness", &max_brightness) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Maximum brightness could not be accessed for %s.", entry->d_name); continue; } skip_tests = false; if (max_brightness <= 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessMaxTest1", "Maximum brightness for %s is %d and should be > 0.", entry->d_name, max_brightness); continue; } fwts_passed(fw, "Maximum brightness for %s is %d which is sane.", entry->d_name, max_brightness); if ((actual_brightness >= 0) && (actual_brightness <= max_brightness)) fwts_passed(fw, "Actual brightness for %s is %d which is in range 0..%d.", entry->d_name, actual_brightness, max_brightness); else fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessOutofRange", "Actual brightness for %s not in range 0..%d.", entry->d_name, max_brightness); } while (entry); return FWTS_OK; } static int auto_brightness_test2(fwts_framework *fw) { struct dirent *entry; int max_brightness; int actual_brightness; int saved_brightness; DIR *brightness_dir = brightness_get_dir(); rewinddir(brightness_dir); do { int i; int failures = 0; bool *brightness_fail; entry = readdir(brightness_dir); if (entry == NULL || entry->d_name[0] == '.') continue; if (brightness_get_setting(entry->d_name, "max_brightness", &max_brightness) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Maximum brightness could not be accessed for %s.", entry->d_name); continue; } if (max_brightness <= 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessMaxTest2", "Maximum brightness for %s is %d and should be > 0.", entry->d_name, max_brightness); continue; } if (brightness_get_setting(entry->d_name, "actual_brightness", &saved_brightness) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Maximum brightness could not be accessed for %s.", entry->d_name); continue; } brightness_fail = calloc(sizeof(bool), max_brightness + 1); if (brightness_fail == NULL) { fwts_log_error(fw, "Cannot allocate brightness table."); continue; } for (i = 0; i <= max_brightness; i++) { brightness_set_setting(entry->d_name, "brightness", i); if (brightness_get_setting(entry->d_name, "actual_brightness", &actual_brightness) != FWTS_OK) { fwts_log_info(fw, "Cannot get brightness setting %d for backlight %s.", i, entry->d_name); failures++; brightness_fail[i] = true; continue; } if (actual_brightness != i) { failures++; brightness_fail[i] = true; } else { brightness_fail[i] = false; } } if (failures) { char *msg = NULL; char buf[40]; /* Find the ranges of the failed levels */ for (i = 0; i <= max_brightness; i++) { int end = i; if (brightness_fail[i]) { int j; /* Scan until we don't find a failure */ for (j = i; j <= max_brightness && brightness_fail[j]; j++) end = j; if (i == end) { /* Just one failure */ snprintf(buf, sizeof(buf), " %d", i); } else { /* A contiguous range of failures */ snprintf(buf, sizeof(buf), " %d-%d", i, end); i = end; } msg = fwts_realloc_strcat(msg, buf); } } fwts_failed(fw, LOG_LEVEL_MEDIUM, "BrightnessMismatch", "%d brightness levels did not match the brightness level " "just set for backlight %s.", failures, entry->d_name); fwts_log_info(fw, "The failed brightness levels were:%s.", msg); free(msg); } else fwts_passed(fw, "Actual brightness matches the brightness level for " "all %d levels for backlight %s.", max_brightness, entry->d_name); free(brightness_fail); /* Restore original setting */ brightness_set_setting(entry->d_name, "brightness", saved_brightness); } while (entry); return FWTS_OK; } static fwts_framework_minor_test auto_brightness_tests[] = { { auto_brightness_test1, "Test for maximum and actual brightness." }, { auto_brightness_test2, "Change actual brightness." }, { NULL, NULL } }; static fwts_framework_ops auto_brightness_ops = { .description = "Automated LCD brightness test.", .init = brightness_init, .deinit = brightness_deinit, .minor_tests = auto_brightness_tests }; FWTS_REGISTER("autobrightness", &auto_brightness_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH) #endif src/acpi/brightness/brightness-helper.c000066400000000000000000000057121465205512700205360ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include "brightness-helper.h" #include #include #include #include /* * Brightness tests helper functions */ static DIR *brightness_dir; static const char *brightness_path; /* * brightness_get_dir() * return /sys interface DIR handle opened by brightness_init() */ DIR *brightness_get_dir(void) { return brightness_dir; } /* * brightness_get_path() * */ const char *brightness_get_path(void) { return brightness_path; } /* * brightness_init() * generic brightness test init, if successful * it opens a directory for the /sys interface */ int brightness_init(fwts_framework *fw) { int i; static const char *sys_path[] = { "/sys/class/backlight", "/sys/devices/virtual/backlight", NULL }; brightness_path = NULL; brightness_dir = NULL; for (i = 0; sys_path[i]; i++) { brightness_dir = opendir(sys_path[i]); if (brightness_dir) { brightness_path = sys_path[i]; return FWTS_OK; } } fwts_failed(fw, LOG_LEVEL_LOW, "BacklightNoPath", "No sysfs backlight directory available: cannot test."); return FWTS_ERROR; } /* * brightness_deinit() */ int brightness_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); if (brightness_dir) (void)closedir(brightness_dir); brightness_path = NULL; brightness_dir = NULL; return FWTS_OK; } /* * brightness_get_setting() * get a brightness setting */ int brightness_get_setting(const char *entry_name, const char *setting, int *value) { char path[PATH_MAX]; FILE *fp; snprintf(path, sizeof(path), "%s/%s/%s", brightness_path, entry_name, setting); if ((fp = fopen(path, "r")) == NULL) return FWTS_ERROR; if (fscanf(fp, "%d", value) != 1) { (void)fclose(fp); return FWTS_ERROR; } (void)fclose(fp); return FWTS_OK; } /* * brightness_set_setting() * set a brightness setting */ int brightness_set_setting(const char *entry_name, const char *setting, const int value) { char path[PATH_MAX]; FILE *fp; snprintf(path, sizeof(path), "%s/%s/%s", brightness_path, entry_name, setting); if ((fp = fopen(path, "w")) == NULL) return FWTS_ERROR; if (fprintf(fp, "%d", value) < 1) { (void)fclose(fp); return FWTS_ERROR; } (void)fclose(fp); return FWTS_OK; } src/acpi/brightness/brightness-helper.h000066400000000000000000000023111465205512700205330ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __BRIGHTNESS_HELPER__ #define __BRIGHTNESS_HELPER__ #include "fwts.h" #include #include DIR *brightness_get_dir(void); const char *brightness_get_path(void); int brightness_init(fwts_framework *fw); int brightness_deinit(fwts_framework *fw); int brightness_get_setting(const char *entry_name, const char *setting, int *value); int brightness_set_setting(const char *entry_name, const char *setting, const int value); #endif src/acpi/brightness/brightness.c000066400000000000000000000205041465205512700172550ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #include #include #include #include "brightness-helper.h" static bool skip_tests = false; static int brightness_test1(fwts_framework *fw) { struct dirent *entry; int max_brightness; int saved_brightness; DIR *brightness_dir = brightness_get_dir(); if (skip_tests) { fwts_skipped(fw, "Test skipped because previous test failed."); return FWTS_SKIP; } rewinddir(brightness_dir); do { int ch; entry = readdir(brightness_dir); if (entry == NULL || entry->d_name[0] == '.') continue; if (brightness_get_setting(entry->d_name, "max_brightness", &max_brightness) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Maximum brightness could not be accessed for %s.", entry->d_name); continue; } if (max_brightness <= 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessMaxTest1", "Maximum brightness for %s is %d and should be > 0.", entry->d_name, max_brightness); continue; } if (brightness_get_setting(entry->d_name, "actual_brightness", &saved_brightness) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessMaxTest1", "Failed to get current brightness setting for %s.", entry->d_name); continue; } fwts_printf(fw, "==== Setting backlight to a low level ====\n"); /* * Setting it to zero on some machines turns * off the backlight, so set to a low value instead */ brightness_set_setting(entry->d_name, "brightness", 1); ch = fwts_get_reply(fw, "==== Is the Backlight now set to a dim level? [Y/N]: ", "ynYN"); if (ch == 'y' || ch == 'Y') fwts_passed(fw, "Backlight %s set to dim level.", entry->d_name); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "BrightnessDimLevel", "Backlight %s was NOT set to dim level.", entry->d_name); fwts_printf(fw, "==== Setting backlight to highest level ====\n"); brightness_set_setting(entry->d_name, "brightness", max_brightness); ch = fwts_get_reply(fw, "==== Is the Backlight now set to a bright level? [Y/N]: ", "ynYN"); if (ch == 'y' || ch == 'Y') fwts_passed(fw, "Backlight %s set to bright level.", entry->d_name); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "BrightnessBrightLevel", "Backlight %s was NOT set to bright level.", entry->d_name); /* Restore */ brightness_set_setting(entry->d_name, "brightness", saved_brightness); } while (entry); return FWTS_OK; } static int brightness_test2(fwts_framework *fw) { struct dirent *entry; int max_brightness; int saved_brightness; DIR *brightness_dir = brightness_get_dir(); if (skip_tests) { fwts_skipped(fw, "Test skipped because previous test failed."); return FWTS_SKIP; } rewinddir(brightness_dir); do { entry = readdir(brightness_dir); if (entry == NULL || entry->d_name[0] == '.') continue; if (brightness_get_setting(entry->d_name, "max_brightness", &max_brightness) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Maximum brightness could not be accessed for %s.", entry->d_name); continue; } if (max_brightness <= 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessMaxTest2", "Maximum brightness for %s is %d and should be > 0.", entry->d_name, max_brightness); continue; } fwts_printf(fw, "==== Backlight will now slowly transition from dim to bright ====\n"); if (brightness_get_setting(entry->d_name, "actual_brightness", &saved_brightness) == FWTS_OK) { long delay = 5000000 / max_brightness; int ch, i; if (delay > 1000000) delay = 1000000; for (i = 0; i <= max_brightness; i++) { fwts_printf(fw, "Setting to brightness level %d\r", i); brightness_set_setting(entry->d_name, "brightness", i); usleep(delay); } ch = fwts_get_reply(fw, "==== Did the backlight go from dim to bright? [Y/N]: ", "ynYN"); if (ch == 'y' || ch == 'Y') fwts_passed(fw, "Backlight %s was observed going from dim to bright.", entry->d_name); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "BrightnessNoDimming", "Backlight %s was NOT observed going from dim to bright.", entry->d_name); /* Restore */ brightness_set_setting(entry->d_name, "brightness", saved_brightness); } } while (entry); return FWTS_OK; } static int brightness_wait_event(fwts_framework *fw) { int fd; int events = 0; size_t len; int i; if ((fd = fwts_acpi_event_open()) < 0) { fwts_log_error(fw, "Cannot connect to acpid."); return FWTS_ERROR; } for (i = 0; i <= 20; i++) { char *buffer; if ((buffer = fwts_acpi_event_read(fd, &len, 1)) != NULL) if (strstr(buffer, "video")) { free(buffer); events++; break; } fwts_printf(fw, "Waiting %2.2d/20\r", 20 - i); } fwts_acpi_event_close(fd); return events; } static int brightness_test3(fwts_framework *fw) { struct dirent *entry; int saved_brightness; DIR *brightness_dir = brightness_get_dir(); rewinddir(brightness_dir); do { int tmp; entry = readdir(brightness_dir); if (entry == NULL || entry->d_name[0] == '.') continue; if (brightness_get_setting(entry->d_name, "actual_brightness", &saved_brightness) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Actual brightness could not be accessed for %s.", entry->d_name); continue; } brightness_set_setting(entry->d_name, "brightness", 1); fwts_printf(fw, "==== Press the brightness UP hotkey for %s ====\n", entry->d_name); if (brightness_wait_event(fw) == 0) fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNoHotKey", "Did not detect ACPI hotkey event."); else { int new_brightness; if (brightness_get_setting(entry->d_name, "actual_brightness", &new_brightness) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Actual brightness could not be accessed for %s.", entry->d_name); } else { if (new_brightness > 0) fwts_passed(fw, "Brightness increased on UP hotkey for %s.", entry->d_name); else fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNoIncrease", "Did not see brightness increased for %s.", entry->d_name); } } tmp = (saved_brightness > 0) ? saved_brightness : 1; brightness_set_setting(entry->d_name, "brightness", tmp); fwts_printf(fw, "==== Press the brightness DOWN hotkey for %s ====\n", entry->d_name); if (brightness_wait_event(fw) == 0) fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNoHotKey", "Did not detect ACPI hotkey event."); else { int new_brightness; if (brightness_get_setting(entry->d_name, "actual_brightness", &new_brightness) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Actual brightness could not be accessed for %s.", entry->d_name); } else { if (new_brightness < tmp) fwts_passed(fw, "Brightness decreased on DOWN hotkey for %s.", entry->d_name); else fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNoDecrease", "Did not see brightness decrease for %s.", entry->d_name); } } } while (entry); return FWTS_OK; } static fwts_framework_minor_test brightness_tests[] = { { brightness_test1, "Observe all brightness changes." }, { brightness_test2, "Observe min, max brightness changes." }, { brightness_test3, "Test brightness hotkeys." }, { NULL, NULL } }; static fwts_framework_ops brightness_ops = { .description = "Interactive LCD brightness test.", .init = brightness_init, .deinit = brightness_deinit, .minor_tests = brightness_tests }; FWTS_REGISTER("brightness", &brightness_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_INTERACTIVE) #endif src/acpi/ccel/000077500000000000000000000000001465205512700134765ustar00rootroot00000000000000src/acpi/ccel/ccel.c000066400000000000000000000045601465205512700145550ustar00rootroot00000000000000/* * Copyright (C) 2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(CCEL, &table) static int ccel_test1(fwts_framework *fw) { bool passed = true; fwts_acpi_table_ccel *ccel = (fwts_acpi_table_ccel *)table->data; if (ccel->header.length != sizeof(fwts_acpi_table_ccel)) { fwts_failed(fw, LOG_LEVEL_HIGH, "CCELBadTableLength", "CCEL table lengthe shoud be %" PRIu32 ", got %" PRIu32 " instead.", (uint32_t)sizeof(fwts_acpi_table_ccel), ccel->header.length); return FWTS_OK; } fwts_log_info_verbatim(fw, "CC Event Log ACPI Table:"); fwts_log_info_simp_int(fw, " CC Type: ", ccel->cc_type); if (ccel->cc_type == 0 || ccel->cc_type >= 3) { fwts_failed(fw, LOG_LEVEL_HIGH, "CCELBadCCType", "CCEL CC types must not have the reaserved value 0, 0x03..0xff, " "got 0x%2.2" PRIx8 " instead.", ccel->cc_type); passed = false; } fwts_log_info_simp_int(fw, " CC Subtype: ", ccel->cc_subtype); fwts_log_info_simp_int(fw, " Reserved: ", ccel->reserved); fwts_acpi_reserved_zero("CCEL", "Reserved", ccel->reserved, &passed); fwts_log_info_simp_int(fw, " Log Area Minimum Length(LAML): ", ccel->laml); fwts_log_info_simp_int(fw, " Log Area Start Address(LASA): ", ccel->lasa); fwts_log_nl(fw); if (passed) fwts_passed(fw, "No issues found in CCEL table."); return FWTS_OK; } static fwts_framework_minor_test ccel_tests[] = { { ccel_test1, "Validate CCEL table." }, { NULL, NULL } }; static fwts_framework_ops ccel_ops = { .description = "CCEL CC Event Log ACPI Table test.", .init = CCEL_init, .minor_tests = ccel_tests }; FWTS_REGISTER("ccel", &ccel_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/cedt/000077500000000000000000000000001465205512700135075ustar00rootroot00000000000000src/acpi/cedt/cedt.c000066400000000000000000000214241465205512700145750ustar00rootroot00000000000000/* * Copyright (C) 2022-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(CEDT, &table) static void cedt_chbs_test( fwts_framework *fw, const fwts_acpi_table_cedt_chbs *entry, bool *passed) { fwts_log_info_verbatim(fw, " CXL Host Bridge Structure (CHBS):"); fwts_log_info_simp_int(fw, " Type: ", entry->header.type); fwts_log_info_simp_int(fw, " Reserved: ", entry->header.reserved); fwts_log_info_simp_int(fw, " Record Length: ", entry->header.record_length); fwts_log_info_simp_int(fw, " UID: ", entry->uid); fwts_log_info_simp_int(fw, " CXL Version: ", entry->cxl_version); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_log_info_simp_int(fw, " Base: ", entry->base); fwts_log_info_simp_int(fw, " Length: ", entry->length); fwts_acpi_reserved_zero("CEDT", "Reserved", entry->header.reserved, passed); fwts_acpi_reserved_zero("CEDT", "Reserved", entry->reserved, passed); switch(entry->cxl_version) { case 0: /* RCH */ if (entry->length != 0x2000) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CEDTBadCHBSLength", "CEDT CHBS Length must be 0x2000, got " "0x%" PRIx64 " instead", entry->length); } break; case 1: /* Host Bridge */ if (entry->length != 0x10000) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CEDTBadCHBSLength", "CEDT CHBS Length must be 0x10000, got " "0x%" PRIx64 " instead", entry->length); } break; default: *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CEDTBadCXLVersion", "CXL Version must have the value with 0 or 1, got " "0x%" PRIx32 " instead", entry->cxl_version); break; } } static void cedt_cfmws_test( fwts_framework *fw, fwts_acpi_table_cedt_cfmws *entry, bool *passed) { fwts_log_info_verbatim(fw, " CXL Fixed Memory Window Structure (CFMWS):"); fwts_log_info_simp_int(fw, " Type: ", entry->header.type); fwts_log_info_simp_int(fw, " Reserved: ", entry->header.reserved); fwts_log_info_simp_int(fw, " Record Length: ", entry->header.record_length); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved1); fwts_log_info_simp_int(fw, " Base HPA: ", entry->base_hpa); fwts_log_info_simp_int(fw, " Window Size: ", entry->window_size); fwts_log_info_simp_int(fw, " ENIW: ", entry->eniw); fwts_log_info_simp_int(fw, " Interleave Arithmetic: ", entry->interleave_arithmetic); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved2); fwts_log_info_simp_int(fw, " HBIG: ", entry->hbig); fwts_log_info_simp_int(fw, " Window Restrictions: ", entry->window_restrictions); fwts_log_info_simp_int(fw, " QTG ID: ", entry->qtg_id); fwts_log_info_verbatim(fw, " Interleave Target List:"); fwts_hexdump_data_prefix_all(fw, (uint8_t *)entry->interleave_target_list, " ",sizeof(uint32_t) * entry->eniw ); fwts_acpi_reserved_zero("CEDT", "Reserved", entry->header.reserved, passed); fwts_acpi_reserved_zero("CEDT", "Reserved", entry->reserved1, passed); fwts_acpi_reserved_zero("CEDT", "Reserved", entry->reserved2, passed); if (entry->interleave_arithmetic > 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CEDTBadInterleaveArithmetic", "CEDT CFMWS interleave arithmetic must have the value with 0 or 1, got " "0x%2.2" PRIx8 "instead", entry->interleave_arithmetic); } fwts_acpi_reserved_bits("CEDT", "Window Restrictions", entry->window_restrictions, 5, 15, passed); } static void cedt_cxims_test( fwts_framework *fw, const fwts_acpi_table_cedt_cxims *entry, bool *passed) { int i; fwts_log_info_verbatim(fw, " CXL XOR Interleave Math Structure (CXIMS):"); fwts_log_info_simp_int(fw, " Type: ", entry->header.type); fwts_log_info_simp_int(fw, " Reserved: ", entry->header.reserved); fwts_log_info_simp_int(fw, " Record Length: ", entry->header.record_length); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_log_info_simp_int(fw, " HBIG: ", entry->hbig); fwts_log_info_simp_int(fw, " Number of Bitmap Entries(NIB): ", entry->nig); for (i= 0; i < entry->nig; i++) fwts_log_info_simp_int(fw, " XORMAP List ", entry->xormap_list[i]); fwts_acpi_reserved_zero("CEDT", "Reserved", entry->header.reserved, passed); fwts_acpi_reserved_zero("CEDT", "Reserved", entry->reserved, passed); } static void cedt_rdpas_test( fwts_framework *fw, const fwts_acpi_table_cedt_rdpas *entry, bool *passed) { fwts_log_info_verbatim(fw, " RCEC Downstream Port Association Structure (RDPAS):"); fwts_log_info_simp_int(fw, " Type: ", entry->header.type); fwts_log_info_simp_int(fw, " Reserved: ", entry->header.reserved); fwts_log_info_simp_int(fw, " Record Length: ", entry->header.record_length); fwts_log_info_simp_int(fw, " RCEC Segment Number ", entry->rece_seg_num); fwts_log_info_simp_int(fw, " RCEC BDF: ", entry->rece_bdf); fwts_log_info_simp_int(fw, " Protocol Type: ", entry->protocol_type); fwts_log_info_simp_int(fw, " Base Address ", entry->base_addr); fwts_acpi_reserved_zero("CEDT", "Reserved", entry->header.reserved, passed); if (entry->protocol_type > 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CEDTBadProtocolType", "CEDT CFMWS protocol type must have the value with 0 or 1, got " "0x%2.2" PRIx8 " instead", entry->protocol_type); } } static void cedt_structure( fwts_framework *fw, fwts_acpi_table_cedt_header *entry, bool *passed) { switch(entry->type) { case FWTS_CEDT_TYPE_CHBS: cedt_chbs_test(fw, (fwts_acpi_table_cedt_chbs *)entry, passed); break; case FWTS_CEDT_TYPE_CFMWS: cedt_cfmws_test(fw, (fwts_acpi_table_cedt_cfmws *)entry, passed); break; case FWTS_CEDT_TYPE_CXIMS: cedt_cxims_test(fw, (fwts_acpi_table_cedt_cxims *)entry, passed); break; case FWTS_CEDT_TYPE_RDPAS: cedt_rdpas_test(fw, (fwts_acpi_table_cedt_rdpas *)entry, passed); break; default: *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CEDTBadSubtableType", "CEDT must have subtable with Type 0 to 3, got " "0x%4.4" PRIx16 " instead", entry->type); break; } } static int cedt_test1(fwts_framework *fw) { fwts_acpi_table_cedt_header *entry; bool passed = true; uint32_t offset; if (!fwts_acpi_table_length(fw, "CEDT", table->length, sizeof(fwts_acpi_table_cedt))) return FWTS_OK; fwts_log_info_verbatim(fw, "CEDT CXL Early Discovery Table:"); entry = (fwts_acpi_table_cedt_header *) (table->data + sizeof(fwts_acpi_table_cedt)); offset = sizeof(fwts_acpi_table_cedt); while (offset < table->length) { if (fwts_acpi_structure_length_zero(fw, "CEDT", entry->record_length, offset)) { passed = false; break; } cedt_structure(fw, entry, &passed); offset += entry->record_length; if (fwts_acpi_structure_range(fw, "CEDT", table->length, offset)) { passed = false; break; } entry = (fwts_acpi_table_cedt_header *) (table->data + offset); fwts_log_nl(fw); } if (passed) fwts_passed(fw, "No issues found in CEDT table."); return FWTS_OK; } static fwts_framework_minor_test cedt_tests[] = { { cedt_test1, "Validate CEDT table." }, { NULL, NULL } }; static fwts_framework_ops cedt_ops = { .description = "CEDT CXL Early Discovery Table test", .init = CEDT_init, .minor_tests = cedt_tests }; FWTS_REGISTER("cedt", &cedt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/checksum/000077500000000000000000000000001465205512700143725ustar00rootroot00000000000000src/acpi/checksum/checksum.c000066400000000000000000000112311465205512700163360ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include #include #include #include static void checksum_rsdp(fwts_framework *fw, fwts_acpi_table_info *table) { uint8_t checksum; fwts_acpi_table_rsdp *rsdp = (fwts_acpi_table_rsdp*)table->data; if (table->length < 20) { fwts_failed(fw, LOG_LEVEL_HIGH, "ACPITableCheckSumShortRSDP", "RSDP was expected to be at least 20 bytes long, " "got a shortened size of %zd bytes.", table->length); /* Won't test on a short RSDP */ return; } /* Version 1.0 RSDP checksum, always applies */ checksum = fwts_checksum(table->data, 20); if (checksum != 0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "ACPITableChecksumRSDP", "RSDP has incorrect checksum, expected 0x%2.2" PRIx8 ", " "got 0x%2.2" PRIx8 ".", (uint8_t)(rsdp->checksum-checksum), rsdp->checksum); fwts_advice(fw, "The kernel will not load the RSDP with an " "invalid checksum and hence all other ACPI " "tables will also fail to load."); } else fwts_passed(fw, "Table RSDP has correct checksum 0x%2.2" PRIx8 ".", rsdp->checksum); /* * Version 2.0 RSP or more. Note ACPI 1.0 is indicated by a * zero version number */ if (rsdp->revision > 0) { if (table->length < sizeof(fwts_acpi_table_rsdp)) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "ACPITableCheckSumShortRSDP", "RSDP was expected to be %zd bytes long, " "got a shortened size of %zd bytes.", sizeof(fwts_acpi_table_rsdp), table->length); /* Won't test on a short RSDP */ return; } checksum = fwts_checksum(table->data, sizeof(fwts_acpi_table_rsdp)); if (checksum != 0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "ACPITableChecksumRSDP", "RSDP has incorrect extended checksum, " "expected 0x%2.2" PRIx8 ", got 0x%2.2" PRIx8 ".", (uint8_t)(rsdp->extended_checksum-checksum), rsdp->extended_checksum); fwts_advice(fw, "The kernel will not load the RSDP with an " "invalid extended checksum and hence all " "other ACPI tables will also fail to load."); } else fwts_passed(fw, "Table RSDP has correct extended " "checksum 0x%2.2" PRIx8 ".", rsdp->extended_checksum); } } static int checksum_scan_tables(fwts_framework *fw) { int i; for (i = 0;; i++) { fwts_acpi_table_info *table; fwts_acpi_table_header *hdr; uint8_t checksum; if (fwts_acpi_get_table(fw, i, &table) != FWTS_OK) { fwts_aborted(fw, "Cannot load ACPI tables."); return FWTS_ABORTED; } if (table == NULL) break; hdr = (fwts_acpi_table_header*)table->data; if (strcmp("RSDP", table->name) == 0) { checksum_rsdp(fw, table); continue; } /* FACS doesn't have a checksum, so ignore */ if (strcmp("FACS", table->name) == 0) continue; checksum = fwts_checksum(table->data, table->length); if (checksum == 0) fwts_passed(fw, "Table %s has correct checksum 0x%2.2" PRIx8, table->name, hdr->checksum); else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ACPITableChecksum", "Table %s has incorrect checksum, " "expected 0x%2.2" PRIx8 ", got 0x%2.2" PRIx8 ".", table->name, (uint8_t)(hdr->checksum-checksum), hdr->checksum); fwts_advice(fw, "The kernel will warn that this table has " "an invalid checksum but will ignore the " "error and still load it. This is not a " "critical issue, but should be fixed if " "possible to avoid the warning messages."); } } return FWTS_OK; } static int checksum_test1(fwts_framework *fw) { return checksum_scan_tables(fw); } static fwts_framework_minor_test checksum_tests[] = { { checksum_test1, "ACPI table checksum test." }, { NULL, NULL } }; static fwts_framework_ops checksum_ops = { .description = "ACPI table checksum test.", .minor_tests = checksum_tests }; FWTS_REGISTER("checksum", &checksum_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/cpep/000077500000000000000000000000001465205512700135175ustar00rootroot00000000000000src/acpi/cpep/cpep.c000066400000000000000000000067541465205512700146260ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(CPEP, &table) /* * CPEP Corrected Platform Error Polling Table */ static int cpep_test1(fwts_framework *fw) { fwts_acpi_table_cpep *cpep = (fwts_acpi_table_cpep*)table->data; bool passed = true; uint64_t reserved; uint32_t i, n; fwts_log_info_verbatim(fw, "CPEP Corrected Platform Error Polling Table:"); fwts_log_info_verbatim(fw, " Reserved: " " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 , cpep->reserved[0], cpep->reserved[1], cpep->reserved[2], cpep->reserved[3], cpep->reserved[4], cpep->reserved[4], cpep->reserved[6], cpep->reserved[7]); reserved = cpep->reserved[0] + ((uint64_t) cpep->reserved[1] << 8) + ((uint64_t) cpep->reserved[2] << 16) + ((uint64_t) cpep->reserved[3] << 24) + ((uint64_t) cpep->reserved[4] << 32) + ((uint64_t) cpep->reserved[5] << 40) + ((uint64_t) cpep->reserved[6] << 48) + ((uint64_t) cpep->reserved[7] << 56); fwts_acpi_reserved_zero("CPEP", "Reserved", reserved, &passed); n = (table->length - sizeof(fwts_acpi_table_cpep)) / sizeof(fwts_acpi_cpep_processor_info); for (i = 0; i < n; i++) { bool cpep_passed = true; char label[40]; fwts_acpi_cpep_processor_info *info = &cpep->cpep_info[i]; snprintf(label, 40, "Processor Structure %d Type", i); fwts_acpi_fixed_value(fw, LOG_LEVEL_HIGH, "CPEP", label, info->type, 0, &cpep_passed); snprintf(label, 40, "Processor Structure %d Length", i); fwts_acpi_fixed_value(fw, LOG_LEVEL_MEDIUM, "CPEP", label, info->length, 8, &cpep_passed); /* Should probably sanity check processor UID, EIDs at a later date */ /* Some feedback if polling interval is very short */ if (info->polling_interval < 5) { fwts_warning(fw, "CPEP Processor Structure %" PRIu32 " Polling Interval of %" PRIu32 " milliseconds is relatively short and may " "cause excessive polling CPU load", i, info->polling_interval); } if (cpep_passed) fwts_log_info(fw, "CPEP Processor Structure %" PRIu32 " looks sane.", i); passed &= cpep_passed; } if (passed) fwts_passed(fw, "No issues found in CPEP table."); return FWTS_OK; } static fwts_framework_minor_test cpep_tests[] = { { cpep_test1, "CPEP Corrected Platform Error Polling Table test." }, { NULL, NULL } }; static fwts_framework_ops cpep_ops = { .description = "CPEP Corrected Platform Error Polling Table test.", .init = CPEP_init, .minor_tests = cpep_tests }; FWTS_REGISTER("cpep", &cpep_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/crsdump/000077500000000000000000000000001465205512700142455ustar00rootroot00000000000000src/acpi/crsdump/crsdump.c000066400000000000000000000601671465205512700161000ustar00rootroot00000000000000/* * Copyright (C) 2013-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include #include "fwts_acpi_object_eval.h" #include "crsdump.h" typedef struct { const char *label; /* Field label */ size_t offset; /* Offset into _CRS buffer */ size_t bitlength; /* Size of field in bits */ uint64_t bitmask; /* Bit mask, 0 = use all bits */ uint8_t shift; /* Value shift */ const char **annotation; /* Annotations */ const char *(*callback)(const uint64_t val); /* val -> string mapping callback for CRS_UINTX */ } crsdump_info; #define CRS_UINT(label, offset, bitlength) { label, offset, bitlength, 0, 0, NULL, NULL } #define CRS_UINT24(label, offset, bitlength) { label, offset, bitlength, 0, 8, NULL, NULL } #define CRS_UINTX(label, offset, bitlength, callback) { label, offset, bitlength, 0, 0, NULL, callback } #define CRS_BITS(label, offset, bitmask) { label, offset, 8, bitmask, 0, NULL, NULL } #define CRS_BITX(label, offset, bitmask, annotation) { label, offset, 8, bitmask, 0, annotation, NULL } #define CRS_END { NULL, 0, 0, 0, 0, 0, NULL } static void crsdump_show_header( fwts_framework *fw, const char *objname, const char *crs_name) { fwts_log_info_verbatim(fw, "%s (%s):", objname, crs_name); } static void crsdump_show_info( fwts_framework *fw, const uint8_t *data, const size_t length, const crsdump_info *info) { /* * Walk through fields and dump data according to the mapping */ for ( ; info->label; info++) { uint64_t val; uint64_t mask = info->bitmask; int hexdigits = info->bitlength >> 2; if (info->offset + (info->bitlength >> 3) > length) continue; if (info->bitmask) { /* * CRS_BIT*() data */ val = (uint64_t)*(const uint8_t *)(data + info->offset); while (mask && ((mask & 1) == 0)) { val >>= 1; mask >>= 1; } val &= mask; hexdigits = 2; } else { /* * CRS_UINT*() data */ switch (info->bitlength) { case 8: val = (uint64_t)*(const uint8_t*)(data + info->offset); break; case 16: val = (uint64_t)*(const uint16_t*)(data + info->offset); break; case 32: val = (uint64_t)*(const uint32_t*)(data + info->offset); break; case 64: val = (uint64_t)*(const uint64_t*)(data + info->offset); break; default: val = ~0; break; } } val = val << info->shift; if (info->annotation) { fwts_log_info_verbatim(fw, " 0x%4.4" PRIx16 ": %-30.30s: 0x%-*.*" PRIx64 " (%s)", (uint16_t)info->offset, info->label, hexdigits, hexdigits, val, info->annotation[val]); } else if (info->callback) { fwts_log_info_verbatim(fw, " 0x%4.4" PRIx16 ": %-30.30s: 0x%-*.*" PRIx64 " (%s)", (uint16_t)info->offset, info->label, hexdigits, hexdigits, val, info->callback(val)); } else { fwts_log_info_verbatim(fw, " 0x%4.4" PRIx16 ": %-30.30s: 0x%-*.*" PRIx64, (uint16_t)info->offset, info->label, hexdigits, hexdigits, val); } } } static void crsdump_show( fwts_framework *fw, const char *objname, const char *crs_name, const uint8_t *data, const size_t length, const crsdump_info *header, const crsdump_info *info) { crsdump_show_header(fw, objname, crs_name); crsdump_show_info(fw, data, length, header); crsdump_show_info(fw, data, length, info); } static void crsdump_data( fwts_framework *fw, const uint8_t *data, const size_t from, const size_t to) { size_t i; char buffer[120]; for (i = from; i < to; i+= 16) { size_t n = to - i; fwts_dump_raw_data(buffer, sizeof(buffer), data + i, i, n > 16 ? 16 : n); buffer[56] = '\0'; /* Truncate off text version of hex dump */ fwts_log_info_verbatim(fw, " 0x%4.4" PRIx16 ": %-30.30s: %s", (uint16_t)i, "Hex Dump", buffer + 8); } } /* * crsdump_init() * initialize ACPI */ static int crsdump_init(fwts_framework *fw) { if (fwts_acpi_init(fw) != FWTS_OK) { fwts_log_error(fw, "Cannot initialise ACPI."); return FWTS_ERROR; } return FWTS_OK; } /* * crsdump_deinit * de-intialize ACPI */ static int crsdump_deinit(fwts_framework *fw) { return fwts_acpi_deinit(fw); } /* * See section 6.4.2.7 Fixed DMA Descriptor, DMA transfer width */ static const char *crs_dma_transfer_width(const uint64_t val) { switch (val) { case 0x00: return "8 bit"; case 0x01: return "16 bit"; case 0x02: return "32 bit"; case 0x03: return "64 bit"; case 0x04: return "128 bit"; case 0x05: return "256 bit"; default: return "reserved"; } } /* * See section 6.4.3.5.2 DWord Address Space Descriptor Resource Type */ static const char *crs_resource_type(const uint64_t val) { switch (val) { case 0x00: return "Memory range"; case 0x01: return "I/O range"; case 0x02: return "Bus number range"; case 0xc0 ... 0xff: return "Hardware Vendor Defined"; default: return "Reserved"; } } /* * See section 6.4.8.1. Generic Register Descriptor Address Space ID */ static const char *crs_address_space_id(const uint64_t val) { switch (val) { case 0x00: return "System Memory"; case 0x01: return "System I/O"; case 0x02: return "PCI Configuration Space"; case 0x03: return "Embedded Controller"; case 0x04: return "SMBus"; case 0x0a: return "PCC"; case 0x7f: return "Functional Fixed Hardware"; default: return "Unknown"; } } /* * See section 6.4.8.1. Generic Register Descriptor Address Size */ static const char *crs_address_size(const uint64_t val) { switch (val) { case 0x00: return "Undefined (legacy)"; case 0x01: return "Byte Access"; case 0x02: return "Word Access"; case 0x04: return "Dword Access"; case 0x08: return "Qword Access"; default: return "Unknown"; } } /* * See section 6.4.3.8.1 GPIO Connection Description */ static const char *crs_gpio_connection_type(const uint64_t val) { switch (val) { case 0x00: return "Interrupt Connection"; case 0x01: return "I/O Connection"; default: return "Reserved"; } } /* * See section 6.4.3.8.1 GPIO Connection Description */ static const char *crs_pin_configuration(const uint64_t val) { switch (val) { case 0x00: return "Default Configuration"; case 0x01: return "Pull-Up"; case 0x02: return "Pull-Down"; case 0x03: return "No Pull"; case 0x80 ... 0xff: return "Vendor Defined"; default: return "Reserved"; } } /* * Convert IRQ mask into list of IRQs */ static const char *crs_irq_map(const uint64_t val) { static char buf[6 + (32 * 4)]; strncpy(buf, "IRQ:", 5); if (!val) { strncat(buf, " none", 6); } else { unsigned int i; for (i = 0; i < 32; i++) { if (val & (1UL << i)) { char tmp[5]; snprintf(tmp, sizeof(tmp), " %u", i); strlcat(buf, tmp, sizeof(tmp)); } } } return buf; } /* * CRS small resource checks, simple checking */ static void crsdump_small_resource_items( fwts_framework *fw, const char *objname, const uint8_t *data, const size_t length) { uint8_t tag_item = (data[0] >> 3) & 0xf; size_t crs_length = 1 + (data[0] & 7); static const crsdump_info header[] = { CRS_BITS("Tag Type", 0, 128), CRS_BITS("Tag Item ID", 0, 64 | 32 | 16 | 8), CRS_BITS("Tag Length", 0, 4 | 2 | 1), }; /* Ensure we just dump minimum _CRS buffer length */ if (crs_length > length) crs_length = length; switch (tag_item) { case 0x4: /* 6.4.2.1 IRQ Descriptor */ { static const char *sharing[] = { "Exclusive", "Shared", "Exclusive And Wake", "Shared And Wake" }; static const char *polarity[] = { "Active-High", "Active-Low" }; static const char *mode[] = { "Level-Triggered", "Edge-Triggered" }; static const crsdump_info info[] = { CRS_UINTX("IRQ Mask", 1, 16, crs_irq_map), CRS_BITS("Reserved", 3, 128 | 64), CRS_BITX("Interrupt Sharing", 3, 32 | 16, sharing), CRS_BITX("Interrupt Polarity", 3, 8, polarity), CRS_BITS("Ignored", 3, 4 | 2), CRS_BITX("Interrupt Mode", 3, 1, mode), CRS_END }; crsdump_show(fw, objname, "IRQ Descriptor", data, crs_length, header, info); } break; case 0x5: /* 6.4.2.2 DMA Descriptor */ { static const char *dma_speed[] = { "Compatibility Mode", "Type A DMA", "Type B DMA", "Type F DMA" }; static const char *bus_master[] = { "Not a bus master", "Is a bus master" }; static const char *dma_size[] = { "8 bit only", "8 and 16 bit", "16 bit only", "Reserved" }; static const crsdump_info info[] = { CRS_UINT("DMA channel mask", 1, 16), CRS_BITS("Reserved", 2, 128), CRS_BITX("DMA channel speed", 2, 64 | 32, dma_speed), CRS_BITS("Ignored", 2, 16 | 8), CRS_BITX("Logical device bus master", 2, 4, bus_master), CRS_BITX("DMA transfer type preference",2, 2 | 1, dma_size), CRS_END }; crsdump_show(fw, objname, "DMA Descriptor", data, crs_length, header, info); } break; case 0x6: /* 6.4.2.3 Start Dependent Functions Descriptor */ { static const char *config[] = { "Good configurarion", "Acceptable configuration", "Sub-optimal configuration", "Reserved" }; static const crsdump_info info[] = { CRS_BITS("Reserved", 1, 0xf0), CRS_BITX("Performance/robustness", 1, 8 | 4, config), CRS_BITX("Compatibility priority", 1, 2 | 1, config), CRS_END }; crsdump_show(fw, objname, "Start Dependent Functions Descriptor", data, crs_length, header, info); } break; case 0x7: /* 6.4.2.4 End Dependent Functions Descriptor */ crsdump_show_header(fw, objname, "End Dependent Functions Descriptor"); break; case 0x8: /* 6.4.2.5 I/O Port Descriptor */ { static const char *decodes[] = { "16 bit addresses", "10 bit addresses" }; static const crsdump_info info[] = { CRS_BITS("Reserved", 1, 0xfe), CRS_BITX("Logical Device Decode", 1, 1, decodes), CRS_UINT("Minimum Base Address", 2, 16), CRS_UINT("Maximum Base Address", 4, 16), CRS_UINT("Base Alignment", 6, 8), CRS_UINT("Range Length", 7, 8), CRS_END }; crsdump_show(fw, objname, "I/O Port Descriptor", data, crs_length, header, info); } break; case 0x9: /* 6.4.2.6 Fixed Location I/O Port Descriptor */ { static const crsdump_info info[] = { CRS_UINT("Range Base Address", 1, 16), CRS_UINT("Range Length", 3, 8), CRS_END }; crsdump_show(fw, objname, "Fixed Location I/O Port Descriptor", data, crs_length, header, info); } break; case 0xa: /* 6.4.2.7 Fixed DMA Descriptor */ { static const crsdump_info info[] = { CRS_UINT("DMA Request Line", 1, 16), CRS_UINT("DMA Channel", 3, 16), CRS_UINTX("DMA Transfer Width", 5, 1, crs_dma_transfer_width), CRS_END }; crsdump_show(fw, objname, "Fixed DMA Descriptor", data, crs_length, header, info); } break; case 0xe: /* 6.4.2.8 Vendor-Defined Descriptor */ crsdump_show_header(fw, objname, "Vendor-Defined Descriptor"); crsdump_show_info(fw, data, crs_length, header); crsdump_data(fw, data, 3, crs_length); break; case 0xf: /* 6.4.2.9 End Tag */ { static const crsdump_info info[] = { CRS_UINT("Checksum", 1, 8), CRS_END }; crsdump_show(fw, objname, "End Tag", data, crs_length, header, info); } break; default: crsdump_show_header(fw, objname, "Unknown type"); crsdump_show_info(fw, data, crs_length, header); crsdump_data(fw, data, 1, crs_length); break; } fwts_log_nl(fw); } /* * CRS large resource checks, simple checking */ static void crsdump_large_resource_items( fwts_framework *fw, const char *objname, const uint8_t *data, const uint64_t length) { uint8_t tag_item = data[0] & 0x7f; size_t crs_length = data[1] + (data[2] << 8) + 3; static const crsdump_info header[] = { CRS_BITS("Tag Type", 0, 128), CRS_BITS("Tag Item ID", 0, 0x7f), CRS_UINT("Length", 1, 16), CRS_END }; static const char *write_status[] = { "non-writeable, read-only", "writeable, read/write" }; static const char *mifmaf[] = { "Not fixed", "Fixed" }; static const char *decode_type[] = { "Bridge Positively decodes this address", "Bridge Subtractively decode this address" }; static const char *sharing[] = { "Exclusive", "Shared", "Exclusive and Wake", "Shared and Wake" }; static const char *polarity[] = { "Active-High", "Active-Low", "Active-Both", "Reserved" }; static const char *mode[] = { "Level-Triggered", "Edge-Triggered" }; static const char *consumer[] = { "producer and consumer", "consumer" }; /* Ensure we just dump minimum _CRS buffer length */ if (crs_length > length) crs_length = length; switch (tag_item) { case 0x1: /* 6.4.3.1 24-Bit Memory Range Descriptor */ { static const crsdump_info info[] = { CRS_BITX("Write Status", 3, 1, write_status), CRS_UINT24("Range Minimum Base", 4, 16), CRS_UINT24("Range Maximum Base", 6, 16), CRS_UINT("Base Alignment", 8, 16), CRS_UINT("Range Length", 10, 16), CRS_END }; crsdump_show(fw, objname, "24-Bit Memory Range Descriptor", data, crs_length, header, info); } break; case 0x2: /* 6.4.3.7 Generic Register Descriptor */ { static const crsdump_info info[] = { CRS_UINTX("Address Space ID", 3, 8, crs_address_space_id), CRS_UINT("Address Bit Width", 4, 8), CRS_UINT("Register Bit Offset", 5, 8), CRS_UINTX("Address Size", 6, 8, crs_address_size), CRS_UINT("Register Address", 7, 64), CRS_END }; crsdump_show(fw, objname, "Generic Register Descriptor", data, crs_length, header, info); } break; case 0x4: /* 6.4.3.2 Vendor-Defined Descriptor */ crsdump_show_header(fw, objname, "Vendor-Defined Descriptor"); crsdump_show_info(fw, data, crs_length, header); crsdump_data(fw, data, 3, crs_length); break; case 0x5: /* 6.4.3.3 32-Bit Memory Range Descriptor */ { static const crsdump_info info[] = { CRS_BITX("Write Status", 3, 1, write_status), CRS_UINT("Range Minimum Address", 4, 32), CRS_UINT("Range Maximum Address", 8, 32), CRS_UINT("Base Alignment", 12, 32), CRS_UINT("Range Length", 16, 32), CRS_END }; crsdump_show(fw, objname, "32-Bit Memory Range Descriptor", data, crs_length, header, info); } break; case 0x6: /* 6.4.3.4 32-Bit Fixed Memory Range Descriptor */ { static const crsdump_info info[] = { CRS_BITX("Write Status", 3, 1, write_status), CRS_UINT("Range Base Address", 4, 32), CRS_UINT("Range Length", 8, 32), CRS_END }; crsdump_show(fw, objname, "32-Bit Fixed Memory Range Descriptor", data, crs_length, header, info); } break; case 0x7: /* 6.4.3.5.2 DWord Address Space Descriptor */ { static const crsdump_info info[] = { CRS_UINTX("Resource Type", 3, 8, crs_resource_type), CRS_BITS("Reserved", 4, 0xf0), CRS_BITX("Max Address Fixed", 4, 8, mifmaf), CRS_BITX("Min Address Fixed", 4, 4, mifmaf), CRS_BITX("Decode Type", 4, 2, decode_type), CRS_BITS("Ignored", 4, 1), CRS_UINT("Type Specific Flags", 5, 8), CRS_UINT("Address Space Granularity", 6, 32), CRS_UINT("Address Range Minimum", 10, 32), CRS_UINT("Address Range Maximum", 14, 32), CRS_UINT("Address Translation Offset", 18, 32), CRS_UINT("Address Length", 22, 32), CRS_UINT("Resource Source Index", 26, 1), /* Skip Resource Source String */ CRS_END }; crsdump_show(fw, objname, "DWord Address Space Descriptor", data, crs_length, header, info); } break; case 0x8: /* 6.4.3.5.3 Word Address Space Descriptor */ { static const crsdump_info info[] = { CRS_UINTX("Resource Type", 3, 8, crs_resource_type), CRS_BITS("Reserved", 4, 0xf0), CRS_BITX("Max Address Fixed", 4, 8, mifmaf), CRS_BITX("Min Address Fixed", 4, 4, mifmaf), CRS_BITX("Decode Type", 4, 2, decode_type), CRS_BITS("Ignored", 4, 1), CRS_UINT("Type Specific Flags", 5, 8), CRS_UINT("Address Space Granularity", 6, 16), CRS_UINT("Address Range Minimum", 8, 16), CRS_UINT("Address Range Maximum", 10, 16), CRS_UINT("Address Translation Offset", 12, 16), CRS_UINT("Address Length", 14, 16), CRS_UINT("Resource Source Index", 16, 1), /* Skip Resource Source String */ CRS_END }; crsdump_show(fw, objname, "Word Address Space Descriptor", data, crs_length, header, info); } break; case 0x9: /* 6.4.3.6 Extended Interrupt Descriptor */ { static const crsdump_info info[] = { CRS_BITS("Reserved", 3, 128 | 64 | 32), CRS_BITX("Interrupt Sharing", 3, 16 | 8, sharing), CRS_BITX("Interrupt Polarity", 7, 4, polarity), CRS_BITX("Interrupt Mode", 7, 2, mode), CRS_BITX("Interrupt Consumer/Producer", 7, 1, consumer), CRS_UINT("Interrupt Table Length", 8, 8), CRS_END }; crsdump_show(fw, objname, "Extended Interrupt Descriptor", data, crs_length, header, info); crsdump_data(fw, data, 5, crs_length); } break; case 0xa: /* 6.4.3.5.1 QWord Address Space Descriptor */ { static const crsdump_info info[] = { CRS_UINTX("Resource Type", 3, 8, crs_resource_type), CRS_BITS("Reserved", 4, 0xf0), CRS_BITX("Max Address Fixed", 4, 8, mifmaf), CRS_BITX("Min Address Fixed", 4, 4, mifmaf), CRS_BITX("Decode Type", 4, 2, decode_type), CRS_BITS("Ignored", 4, 1), CRS_UINT("Type Specific Flags", 5, 8), CRS_UINT("Address Space Granularity", 6, 64), CRS_UINT("Address Range Minimum", 14, 64), CRS_UINT("Address Range Maximum", 22, 64), CRS_UINT("Address Translation Offset", 30, 64), CRS_UINT("Address Length", 38, 64), CRS_UINT("Resource Source Index", 46, 1), /* Skip Resource Source String */ CRS_END }; crsdump_show(fw, objname, "QWord Address Space Descriptor", data, crs_length, header, info); } break; case 0xb: /* 6.4.3.5.4 Extended Address Space Descriptor */ { static const crsdump_info info[] = { CRS_UINTX("Resource Type", 3, 8, crs_resource_type), CRS_BITS("Reserved", 4, 0xf0), CRS_BITX("Max Address Fixed", 4, 8, mifmaf), CRS_BITX("Min Address Fixed", 4, 4, mifmaf), CRS_BITX("Decode Type", 4, 2, decode_type), CRS_BITX("Consumer/Producer", 4, 1, consumer), CRS_UINT("Type Specific Flags", 5, 8), CRS_UINT("Revision ID", 6, 8), CRS_UINT("Reserved", 7, 8), CRS_UINT("Address Space Granularity", 8, 64), CRS_UINT("Address Range Minimum", 16, 64), CRS_UINT("Address Range Maximum", 24, 64), CRS_UINT("Address Translation Offset", 32, 64), CRS_UINT("Address Length", 40, 64), CRS_UINT("Type Specific Attribute", 48, 64), CRS_END }; crsdump_show(fw, objname, "Extended Address Space Descriptor", data, crs_length, header, info); } break; case 0xc: /* 6.4.3.8.1 GPIO Connection Descriptor */ { if (crs_length < 4) break; if (data[4] == 0) { /* Interrupt connection */ static const crsdump_info info[] = { CRS_UINT("Revision ID", 3, 8), CRS_UINTX("GPIO Connection Type", 4, 8, crs_gpio_connection_type), CRS_BITS("Reserved", 5, 0xfe), CRS_BITX("Consumer/Producer", 5, 1, consumer), CRS_UINT("Reserved", 6, 8), CRS_BITS("Reserved", 7, 128 | 64 | 32), CRS_BITX("Interrupt Sharing and Wake", 7, 16 | 8, sharing), CRS_BITX("Interrupt Polarity", 7, 4 | 2, polarity), CRS_BITX("Interrupt Mode", 7, 1, mode), CRS_UINT("Interrupt and I/O Flags", 8, 8), CRS_UINTX("Pin Configuration", 9, 8, crs_pin_configuration), CRS_UINT("Output Driver Strength", 10, 16), CRS_UINT("Debounce Timeout (bits)", 12, 16), CRS_UINT("Pin Table Offset", 14, 16), CRS_UINT("Resource Source Index", 16, 8), CRS_UINT("Resource Name Offset", 17, 16), CRS_UINT("Vendor Data Offset", 19, 16), CRS_UINT("Vendor Data Length", 21, 16), /* Skip pin table */ CRS_END }; crsdump_show(fw, objname, "GPIO Connection Descriptor", data, crs_length, header, info); } else if (data[4] == 1) { static const char *int_sharing[] = { "Exclusive", "Shared", }; static const char *restriction[] = { "Input or Output", "Input Only", "Output Only", "Input or Output, config must be preserved" }; /* I/O connection */ static const crsdump_info info[] = { CRS_UINT("Revision ID", 3, 8), CRS_UINTX("GPIO Connection Type", 4, 8, crs_gpio_connection_type), CRS_BITS("Reserved", 5, 0xfe), CRS_BITX("Consumer/Producer", 5, 1, consumer), CRS_UINT("Reserved", 6, 8), CRS_BITS("Reserved", 7, 128 | 64 | 32 | 16), CRS_BITX("Interrupt Sharing", 7, 8, int_sharing), CRS_BITS("Reserved", 7, 4), CRS_BITX("I/O Restriction", 7, 2 | 1, restriction), CRS_UINT("Interrupt and I/O Flags", 8, 8), CRS_UINTX("Pin Configuration", 9, 8, crs_pin_configuration), CRS_UINT("Output Driver Strength", 10, 16), CRS_UINT("Debounce Timeout (bits)", 12, 16), CRS_UINT("Pin Table Offset", 14, 16), CRS_UINT("Resource Source Index", 16, 8), CRS_UINT("Resource Name Offset", 17, 16), CRS_UINT("Vendor Data Offset", 19, 16), CRS_UINT("Vendor Data Length", 21, 16), /* Skip pin table */ CRS_END }; crsdump_show(fw, objname, "GPIO Connection Descriptor", data, crs_length, header, info); } else { /* No idea of the connection type */ static const crsdump_info info[] = { CRS_UINT("Revision ID", 3, 8), CRS_UINT("GPIO Connection Type", 4, 8), CRS_END }; crsdump_show(fw, objname, "GPIO Connection Descriptor", data, crs_length, header, info); } } break; case 0xe: /* 6.4.3.8.2 Serial Bus Connection Descriptors */ /* This is not frequently used, deferring implementation to later */ crsdump_show_header(fw, objname, "Serial Bus Connection Descriptor"); crsdump_show_info(fw, data, crs_length, header); crsdump_data(fw, data, 3, crs_length); break; default: crsdump_show_header(fw, objname, "Unknown type"); crsdump_show_info(fw, data, crs_length, header); crsdump_data(fw, data, 3, crs_length); break; } fwts_log_nl(fw); } int resource_dump(fwts_framework *fw, const char *objname) { fwts_list_link *item; fwts_list *objects; const size_t name_len = strlen(objname); if ((objects = fwts_acpi_object_get_names()) == NULL) { fwts_log_info(fw, "Cannot find any ACPI objects"); return FWTS_ERROR; } fwts_list_foreach(item, objects) { char *name = fwts_list_data(char*, item); const size_t len = strlen(name); if (strncmp(objname, name + len - name_len, name_len) == 0) { ACPI_OBJECT_LIST arg_list; ACPI_BUFFER buf; ACPI_OBJECT *obj; int ret; arg_list.Count = 0; arg_list.Pointer = NULL; ret = fwts_acpi_object_evaluate(fw, name, &arg_list, &buf); if ((ACPI_FAILURE(ret) != AE_OK) || (buf.Pointer == NULL)) continue; /* Do we have a valid resource buffer to dump? */ obj = buf.Pointer; if ((obj->Type == ACPI_TYPE_BUFFER) && (obj->Buffer.Pointer != NULL) && (obj->Buffer.Length > 0)) { uint8_t *data = (uint8_t*)obj->Buffer.Pointer; if (data[0] & 128) crsdump_large_resource_items(fw, name, data, obj->Buffer.Length); else crsdump_small_resource_items(fw, name, data, obj->Buffer.Length); } free(buf.Pointer); } } return FWTS_OK; } static int crsdump_test1(fwts_framework *fw) { return resource_dump(fw, "_CRS"); } static fwts_framework_minor_test crsdump_tests[] = { { crsdump_test1, "Dump ACPI _CRS (Current Resource Settings)." }, { NULL, NULL } }; static fwts_framework_ops crsdump_ops = { .description = "Dump ACPI _CRS resources.", .init = crsdump_init, .deinit = crsdump_deinit, .minor_tests = crsdump_tests }; FWTS_REGISTER("crsdump", &crsdump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS) #endif src/acpi/crsdump/crsdump.h000066400000000000000000000016371465205512700161020ustar00rootroot00000000000000/* * Copyright (C) 2014-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_ACPI_CRSDUMP_H__ #define __FWTS_ACPI_CRSDUMP_H__ #include "fwts.h" extern int resource_dump(fwts_framework *fw, const char *objname); #endif src/acpi/crsdump/prsdump.c000066400000000000000000000032631465205512700161070ustar00rootroot00000000000000/* * Copyright (C) 2014-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include "crsdump.h" /* * prsdump_init() * initialize ACPI */ static int prsdump_init(fwts_framework *fw) { if (fwts_acpi_init(fw) != FWTS_OK) { fwts_log_error(fw, "Cannot initialise ACPI."); return FWTS_ERROR; } return FWTS_OK; } /* * prsdump_deinit * de-intialize ACPI */ static int prsdump_deinit(fwts_framework *fw) { return fwts_acpi_deinit(fw); } static int prsdump_test1(fwts_framework *fw) { return resource_dump(fw, "_PRS"); } static fwts_framework_minor_test prsdump_tests[] = { { prsdump_test1, "Dump ACPI _PRS (Possible Resource Settings)." }, { NULL, NULL } }; static fwts_framework_ops prsdump_ops = { .description = "Dump ACPI _PRS resources.", .init = prsdump_init, .deinit = prsdump_deinit, .minor_tests = prsdump_tests }; FWTS_REGISTER("prsdump", &prsdump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS) #endif src/acpi/csrt/000077500000000000000000000000001465205512700135435ustar00rootroot00000000000000src/acpi/csrt/csrt.c000066400000000000000000000167371465205512700147000ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(CSRT, &table) /* * CSRT Core System Resource Table * https://acpica.org/sites/acpica/files/CSRT.doc */ static int csrt_test1(fwts_framework *fw) { size_t rg_offset; fwts_acpi_table_csrt_resource_group *rg; bool passed = true; int rg_count = 0; /* Note: CSRT header is actually just an ACPI header */ if (table->length < sizeof(fwts_acpi_table_csrt)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CSRTToosShort", "CSRT is only %zu bytes long, expecting at least " "%zu bytes", table->length, sizeof(fwts_acpi_table_csrt)); goto done; } rg_offset = sizeof(fwts_acpi_table_csrt); rg = (fwts_acpi_table_csrt_resource_group *) (table->data + sizeof(fwts_acpi_table_csrt)); while (rg_offset < table->length) { size_t rg_length = table->length - rg_offset; /* Sanity check size of what we've got left */ if (rg_length < sizeof(fwts_acpi_table_csrt_resource_group)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CSRTResourceGroupTooShort", "CSRT Resource Group %d is only %zu bytes long, " "expecting at least %zu bytes", rg_count, rg_length, sizeof(fwts_acpi_table_csrt_resource_group)); goto done; /* Bad size, bail out */ } /* Sanity check resource group header size */ if (rg->length < sizeof(fwts_acpi_table_csrt_resource_group)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CSRTResourceGroupLengthFieldTooShort", "CSRT Resource Group %d Length Field is %" PRIu32 " and was expecting at least %zu ", rg_count, rg->length, sizeof(fwts_acpi_table_csrt_resource_group)); goto done; /* Bad size, bail out */ } /* * Enough space for a header, so we can now check the * if we have a shared info following the header and before the * resource descriptor */ if (rg->length < (sizeof(fwts_acpi_table_csrt_resource_group) + rg->shared_info_length)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CSRTResourceGroupLengthFieldTooShort", "CSRT Resource Group %d Length Field is %" PRIu32 " and was expecting at least %zu ", rg_count, rg->length, sizeof(fwts_acpi_table_csrt_resource_group) + rg->shared_info_length); goto done; /* Bad size, bail out */ } /* Reserved must be zero */ if (rg->reserved != 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CSRTResourceGroupReservedFieldNonZero", "CSRT Resource Group %d Reserved Field is 0x%4.4" PRIx16 " and was expecting a zero value", rg_count, rg->reserved); } /* Do we have enough space for a resource descriptor? */ if (rg_length > sizeof(fwts_acpi_table_csrt_resource_descriptor)) { size_t rd_offset = sizeof(fwts_acpi_table_csrt_resource_group) + rg->shared_info_length; int rd_count = 0; fwts_acpi_table_csrt_resource_descriptor *rd = (fwts_acpi_table_csrt_resource_descriptor *) ((uint8_t *)rg + sizeof(fwts_acpi_table_csrt_resource_group) + rg->shared_info_length); /* Handle 1 or more resource descriptors */ while (rd_offset < rg->length) { /* Advertised length must be sane */ if (rd->length < sizeof(fwts_acpi_table_csrt_resource_descriptor)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CSRTResourceDescriptorLengthFieldTooShort", "CSRT Resource Group %d Descriptor %d " "Length Field is %" PRIu32 " and was " "expecting at least %zu", rg_count, rd_count, rd->length, sizeof(fwts_acpi_table_csrt_resource_descriptor)); goto next; /* Bad size, skip to next */ } /* Sanity check type and subtype */ switch (rd->type) { case 0x0000: case 0x0800 ... 0xffff: passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CSRTResourceDescriptorResourceTypeInvalid", "CSRT Resource Group %d Descriptor %d " "Resource Type is 0x%4.4" PRIx16 " which is a " "reserved type", rg_count, rd_count, rd->type); break; case 0x0001: /* Interrupt */ if (rd->subtype > 1) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CSRTResourceDescriptorResourceSubTypeInvalid", "CSRT Resource Group %d Descriptor %d " "Resource Subtype is 0x%4.4" PRIx16 " which is a " "reserved type, expecting 0x0000 (Interrupt " "Line) or 0x0001 (Interrupt Controller)", rg_count, rd_count, rd->subtype); } break; case 0x0002: /* Timer */ if (rd->subtype > 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CSRTResourceDescriptorResourceSubTypeInvalid", "CSRT Resource Group %d Descriptor %d " "Resource Subtype is 0x%4.4" PRIx16 " which is a " "reserved type, expecting 0x0000 (Timer)", rg_count, rd_count, rd->subtype); } break; case 0x0003: /* DMA */ if (rd->subtype > 1) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CSRTResourceDescriptorResourceSubTypeInvalid", "CSRT Resource Group %d Descriptor %d " "Resource Subtype is 0x%4.4" PRIx16 " which is a " "reserved type, expecting 0x0000 (DMA channel) " "or 0x0001 (DMA controller)", rg_count, rd_count, rd->subtype); } break; default: /* For future use */ passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CSRTResourceDescriptorResourceTypeInvalid", "CSRT Resource Group %d Descriptor %d " "Resource Type is 0x%4.4" PRIx16 " which is a " "reserved type for future use only", rg_count, rd_count, rd->type); break; } /* Check for reserved UID */ if (rd->uid == 0xffffffff) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "CSRTResourceDescriptorReservedUID", "CSRT Resource Group %d Descriptor %d " "UID Field is 0x%8.8" PRIx32 " and this is " "a reserved UID value", rg_count, rd_count, rd->uid); } /* the silicon vendor info is not specified, can't check */ rd_offset += rd->length; rd_count++; rd = (fwts_acpi_table_csrt_resource_descriptor *) ((uint8_t *)rd + rd->length); } } next: rg_offset += rg->length; rg_count++; rg = (fwts_acpi_table_csrt_resource_group *) ((uint8_t*)rg + rg->length); } done: if (passed) fwts_passed(fw, "No issues found in CSRT table."); return FWTS_OK; } static fwts_framework_minor_test csrt_tests[] = { { csrt_test1, "CSRT Core System Resource Table test." }, { NULL, NULL } }; static fwts_framework_ops csrt_ops = { .description = "CSRT Core System Resource Table test.", .init = CSRT_init, .minor_tests = csrt_tests }; FWTS_REGISTER("csrt", &csrt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/cstates/000077500000000000000000000000001465205512700142365ustar00rootroot00000000000000src/acpi/cstates/cstates.c000066400000000000000000000145471465205512700160630ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corporation * Copyright (C) 2010-2024 Canonical * * This file is was originally from the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define _GNU_SOURCE /* for sched_setaffinity */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #define PROCESSOR_PATH "/sys/devices/system/cpu" #include #include #include #include #include #include #include #include #define MIN_CSTATE 1 #define MAX_CSTATE 16 typedef struct { int counts[MAX_CSTATE]; bool used[MAX_CSTATE]; bool present[MAX_CSTATE]; } fwts_cstates; static int statecount = -1; static int firstcpu = -1; static void get_cstates(char *path, fwts_cstates *state) { struct dirent *entry; char filename[PATH_MAX]; char *data; DIR *dir; int i; for (i = MIN_CSTATE; i < MAX_CSTATE; i++) { state->counts[i] = 0; state->present[i] = false; state->used[i] = false; } if ((dir = opendir(path)) == NULL) return; while ((entry = readdir(dir)) != NULL) { if (strlen(entry->d_name) > 3) { long int nr; int count; snprintf(filename, sizeof(filename), "%s/%s/name", path, entry->d_name); if ((data = fwts_get(filename)) == NULL) break; /* * Names can be "Cx\n", or "ATM-Cx\n", or "SNB-Cx\n", * or newer kernels can be "Cx\n" or "Cx-SNB\n" etc * where x is the C state number. */ if ((data[0] == 'C') && isdigit(data[1])) nr = strtol(data + 1, NULL, 10); else if (strcmp("POLL", data) == 0) nr = 0; else { char *ptr = strstr(data, "-C"); if (ptr) nr = strtol(ptr + 2, NULL, 10); else nr = 0; } free(data); snprintf(filename, sizeof(filename), "%s/%s/usage", path, entry->d_name); if ((data = fwts_get(filename)) == NULL) break; count = strtoull(data, NULL, 10); free(data); if ((nr >= 0) && (nr < MAX_CSTATE)) { state->counts[nr] = count; state->present[nr] = true; } } } closedir(dir); } #define TOTAL_WAIT_TIME 20 static void do_cpu(fwts_framework *fw, int nth, int cpus, int cpu, char *path) { fwts_cstates initial, current; int count; char buffer[128]; char tmp[8]; bool keepgoing = true; int i; get_cstates(path, &initial); for (i = 0; (i < TOTAL_WAIT_TIME) && keepgoing; i++) { int j; snprintf(buffer, sizeof(buffer),"(CPU %d of %d)", nth + 1, cpus); fwts_progress_message(fw, 100 * (i + (TOTAL_WAIT_TIME*nth)) / (cpus * TOTAL_WAIT_TIME), buffer); if ((i & 7) < 4) sleep(1); else { fwts_cpu_benchmark_result result; if (fwts_cpu_benchmark(fw, cpu, &result) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_HIGH, "CPUFailedPerformance", "Could not determine the CPU performance, this " "may be due to not being able to get or set the " "CPU affinity for CPU %d.", cpu); } } get_cstates(path, ¤t); keepgoing = false; for (j = MIN_CSTATE; j < MAX_CSTATE; j++) { if (initial.counts[j] != current.counts[j]) { initial.counts[j] = current.counts[j]; initial.used[j] = true; } if (initial.present[j] && !initial.used[j]) keepgoing = true; } } *buffer = '\0'; if (keepgoing) { /* Not a failure, but not a pass either! */ for (i = MIN_CSTATE; i < MAX_CSTATE; i++) { if (initial.present[i] && !initial.used[i]) { snprintf(tmp, sizeof(tmp), "C%d ", i); strcat(buffer, tmp); } } fwts_log_info(fw, "Processor %d has not reached %s during tests. " "This is not a failure, however it is not a " "complete and thorough test.", cpu, buffer); } else { for (i = MIN_CSTATE; i < MAX_CSTATE; i++) { if (initial.present[i] && initial.used[i]) { snprintf(tmp, sizeof(tmp), "C%d ", i); strcat(buffer, tmp); } } fwts_passed(fw, "Processor %d has reached all C-states: %s", cpu, buffer); } count = 0; for (i = MIN_CSTATE; i < MAX_CSTATE; i++) if (initial.present[i]) count++; if (statecount == -1) statecount = count; if (statecount != count) fwts_failed(fw, LOG_LEVEL_HIGH, "CPUNoCState", "Processor %d is expected to have %d C-states but has %d.", cpu, statecount, count); else if (firstcpu == -1) firstcpu = cpu; else fwts_passed(fw, "Processor %d has the same number of C-states as processor %d", cpu, firstcpu); } static int cstates_test1(fwts_framework *fw) { DIR *dir; struct dirent *entry; int cpus; int i; fwts_log_info(fw, "This test checks if all processors have the same number of " "C-states, if the C-state counter works and if C-state " "transitions happen."); if ((dir = opendir(PROCESSOR_PATH)) == NULL) { fwts_failed(fw, LOG_LEVEL_HIGH, "CPUNoSysMounted", "Cannot open %s: /sys not mounted?", PROCESSOR_PATH); return FWTS_ERROR; } /* How many CPUs are there? */ for (cpus = 0; (entry = readdir(dir)) != NULL; ) if (entry && (strlen(entry->d_name)>3) && (strncmp(entry->d_name, "cpu", 3) == 0) && (isdigit(entry->d_name[3]))) cpus++; rewinddir(dir); for (i = 0; (cpus > 0) && (entry = readdir(dir)) != NULL; ) { if (entry && (strlen(entry->d_name)>3) && (strncmp(entry->d_name, "cpu", 3) == 0) && (isdigit(entry->d_name[3]))) { char cpupath[PATH_MAX]; snprintf(cpupath, sizeof(cpupath), "%s/%s/cpuidle", PROCESSOR_PATH, entry->d_name); do_cpu(fw, i++, cpus, strtoul(entry->d_name+3, NULL, 10), cpupath); } } closedir(dir); return FWTS_OK; } static fwts_framework_minor_test cstates_tests[] = { { cstates_test1, "Test all CPUs C-states." }, { NULL, NULL } }; static fwts_framework_ops cstates_ops = { .description = "Processor C state support test.", .minor_tests = cstates_tests }; FWTS_REGISTER("cstates", &cstates_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/dbg2/000077500000000000000000000000001465205512700134065ustar00rootroot00000000000000src/acpi/dbg2/dbg2.c000066400000000000000000000304341465205512700143740ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include "fwts_acpi_object_eval.h" #define SBBR_DBG2_PORT_SERIAL 0x8000 #define SBBR_DBG2_FULLY_16550_COMPAT 0x0000 #define SBBR_DBG2_16550_SUBSET_COMPAT 0x0001 #define SBBR_DBG2_ARM_PL011_UART 0x0003 #define SBBR_DBG2_ARM_SBSA_UART 0x000E #define SBBR_DBG2_16550_COMPAT_GAS 0x0012 static fwts_acpi_table_info *table; acpi_table_init(DBG2, &table) static int dbg2_test2(fwts_framework *fw) { uint32_t i; if (!(fw->flags & FWTS_FLAG_SBBR)) return FWTS_SKIP; fwts_acpi_table_dbg2 *dbg2 = (fwts_acpi_table_dbg2 *)table->data; fwts_acpi_table_dbg2_info *info; info = (fwts_acpi_table_dbg2_info *)(table->data + dbg2->info_offset); for (i = 0; i < dbg2->info_count; i++) { if ((uint8_t*)&info->length >= ((uint8_t*)table + table->length)) break; if (((uint8_t*)info + info->length) >= ((uint8_t*)table + table->length)) break; if (info->port_type == SBBR_DBG2_PORT_SERIAL && (info->port_subtype == SBBR_DBG2_FULLY_16550_COMPAT || info->port_subtype == SBBR_DBG2_16550_SUBSET_COMPAT || info->port_subtype == SBBR_DBG2_ARM_PL011_UART || info->port_subtype == SBBR_DBG2_ARM_SBSA_UART || info->port_subtype == SBBR_DBG2_16550_COMPAT_GAS)) { fwts_passed(fw, "DBG2 provides a standard serial debug " "port and describes ARM BSA compliant UART"); return FWTS_OK; } /* ..and onto the next info structure .. */ info = (fwts_acpi_table_dbg2_info *)((uint8_t *)info + info->length); } fwts_failed(fw, LOG_LEVEL_CRITICAL, "dbg2_sbsa_uart:", "DBG2 provides a non standard debug port"); return FWTS_OK; } /* * dbg2_check_offset() * check if offset does not fall off end of table */ static void dbg2_check_offset( fwts_framework *fw, const size_t table_length, const size_t offset, const char *msg, bool *passed) { if (table_length < offset) { fwts_failed(fw, LOG_LEVEL_HIGH, "DBG2TooShort", "DBG2 table too short, expecting %zu bytes, " "instead got %zu bytes for a DBG2 table and %s", offset, table->length, msg); *passed = false; } } /* * dbg2_check_namespace_string() * check namespace string is '\0' termimated */ static void dbg2_check_namespace_string( fwts_framework *fw, const char *str, size_t length, bool *passed) { size_t i; for (i = 0; i < length; i++) { if (*(str + i) == '\0') return; } fwts_failed(fw, LOG_LEVEL_HIGH, "DBG2NameSpaceStringNull", "DBG2 Name Space String was not null terminated"); *passed = false; } /* * DBG2 Table * see https://msdn.microsoft.com/en-us/library/windows/hardware/dn639131%28v=vs.85%29.aspx */ static int dbg2_test1(fwts_framework *fw) { bool passed = true; fwts_acpi_table_dbg2 *dbg2 = (fwts_acpi_table_dbg2 *)table->data; fwts_acpi_table_dbg2_info *info; uint32_t i; size_t total_size; /* Enough length for the initial dbg2 header? */ if (!fwts_acpi_table_length(fw, "DBG2", table->length, sizeof(fwts_acpi_table_dbg2))) { passed = false; goto done; } fwts_log_info_verbatim(fw, "DBG2 Table:"); fwts_log_info_simp_int(fw, " Info Offset: ", dbg2->info_offset); fwts_log_info_simp_int(fw, " Info Count: ", dbg2->info_count); fwts_log_nl(fw); total_size = dbg2->info_offset + (dbg2->info_count * sizeof(fwts_acpi_table_dbg2_info)); if (table->length < total_size) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "DBG2TooShort", "DBG2 table too short, expecting %zu bytes, " "instead got %zu bytes for a DBG2 table " "containing %" PRIu32 " debug device " "information structures", sizeof(fwts_acpi_table_dbg2), table->length, dbg2->info_count); goto done; } info = (fwts_acpi_table_dbg2_info *)(table->data + dbg2->info_offset); /* * Sanity check structures */ for (i = 0; i < dbg2->info_count; i++) { uint32_t offset = (uint8_t *)info - (uint8_t *)table->data; bool ok, length_ok; char *port = NULL, *subport = NULL; switch (info->port_type) { case 0x8000: port = "Serial"; switch (info->port_subtype) { case 0x0000: subport = "Fully 16550-compatible"; break; case 0x0001: subport = "16550 subset compatible"; break; case 0x0002: subport = "MAX311xE SPI UART"; break; case 0x0003: subport = "ARMPL011 UART"; break; case 0x0004: subport = "MSM8x60 (e.g. 8960)"; break; case 0x0005: subport = "Nvidia 16550"; break; case 0x0006: subport = "TI OMAP"; break; case 0x0008: subport = "APM88xxxx"; break; case 0x0009: subport = "MSM8974"; break; case 0x000a: subport = "SAM5250"; break; case 0x000b: subport = "Intel USIF"; break; case 0x000c: subport = "i.MX 6"; break; case 0x000d: subport = "ARM SBSA Generic UART (deprecated)"; break; case 0x000e: subport = "ARM SBSA Generic UART"; break; case 0x000f: subport = "ARM DCC"; break; case 0x0010: subport = "BCM2835"; break; case 0x0011: subport = "SDM845 with clock rate of 1.8432 MHz"; break; case 0x0012: subport = "16550-compatible with parameters in GAS"; break; case 0x0013: subport = "SDM845 with clock rate of 7.372 MHz"; break; case 0x0014: subport = "Intel LPSS"; break; case 0x0015: subport = "RISC-V SBI console (any supported SBI mechanism)"; break; default: break; } break; case 0x8001: port = "1394"; switch (info->port_subtype) { case 0x0000: subport = "IEEE1394"; break; default: break; } break; case 0x8002: port = "USB"; switch (info->port_subtype) { case 0x0000: subport = "XHCI controller"; break; case 0x0001: subport = "EHCI controller"; break; default: break; } break; case 0x8003: port = "Net"; subport = "PCI"; break; default: break; } fwts_log_info_verbatim(fw, "DBG2 Info Structure %" PRIu32 ":", i); fwts_log_info_simp_int(fw, " Revision: ", info->revision); fwts_log_info_simp_int(fw, " Length: ", info->length); fwts_log_info_simp_int(fw, " Number of Registers ", info->number_of_regs); fwts_log_info_simp_int(fw, " Namespace String Length: ", info->namespace_length); fwts_log_info_simp_int(fw, " Namespace String Offset: ", info->namespace_offset); fwts_log_info_simp_int(fw, " OEM Data Length: ", info->oem_data_length); fwts_log_info_simp_int(fw, " OEM Data Offset: ", info->oem_data_offset); fwts_log_info_verbatim(fw, " Port Type: 0x%4.4" PRIx16 " (%s)", info->port_type, port ? port : "(Reserved)"); fwts_log_info_verbatim(fw, " Port Subtype: 0x%4.4" PRIx16 " (%s)", info->port_subtype, subport ? subport : "(Reserved)"); fwts_log_info_simp_int(fw, " Reserved: ", info->reserved); fwts_log_info_simp_int(fw, " Base Address Offset: ", info->base_address_offset); fwts_log_info_simp_int(fw, " Address Size Offset: ", info->address_size_offset); fwts_log_nl(fw); fwts_acpi_fixed_value(fw, LOG_LEVEL_HIGH, "DBG2", "Info Structure Revision", info->revision, 0, &passed); if (port == NULL) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "DBG2PortTypeReserved", "DBG2 Info Structure Port Type is 0x%4.4" PRIx16 " which is a reserved type.", info->port_type); } if (subport == NULL) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "DBG2PortSubTypeReserved", "DBG2 Info Structure Port Subtype is 0x%4.4" PRIx16 " which is a reserved type.", info->port_subtype); } fwts_acpi_reserved_zero("DBG2", "Info Structure Reserved", info->reserved, &passed); length_ok = true; dbg2_check_offset(fw, table->length, offset + info->length, "DBG2 Info Structure Namespace Length", &length_ok); passed &= length_ok; ok = true; dbg2_check_offset(fw, table->length, offset + info->namespace_offset, "DBG2 Info Structure Namespace String Offset", &ok); dbg2_check_offset(fw, table->length, offset + info->namespace_offset + info->namespace_length, "DBG2 Info Structure Namespace String End", &ok); if (ok) { char *str = (char *)table->data + offset + info->namespace_offset; dbg2_check_namespace_string(fw, str, info->namespace_length, &passed); fwts_log_info_verbatim(fw, " Namespace String: '%s'", str); if (strcmp(str, ".") != 0) { bool found = fwts_acpi_obj_find(fw, str); if (!found) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "DBG2DeviceNotFound", "DBG2 Device '%s' not found in ACPI object name space.", str); } } } dbg2_check_offset(fw, table->length, offset + info->oem_data_offset, "DBG2 Info Structure OEM Data Offset", &passed); dbg2_check_offset(fw, table->length, offset + info->oem_data_offset + info->oem_data_length, "DBG2 Info Structure OEM Data End", &passed); ok = true; total_size = info->number_of_regs * sizeof(fwts_acpi_gas); dbg2_check_offset(fw, table->length, offset + info->base_address_offset, "DBG2 Info Structure Base Address Offset", &ok); dbg2_check_offset(fw, table->length, offset + info->base_address_offset + total_size, "DBG2 Info Structure Base Address End", &ok); total_size = info->number_of_regs * sizeof(uint32_t); dbg2_check_offset(fw, table->length, offset + info->address_size_offset, "DBG2 Info Structure Address Size Offset", &ok); dbg2_check_offset(fw, table->length, offset + info->address_size_offset + total_size, "DBG2 Info Structure Address Size End", &ok); passed &= ok; /* Sanity check the GAS array */ if (ok) { uint8_t j; fwts_acpi_gas *gas = (fwts_acpi_gas *)(table->data + offset + info->base_address_offset); uint32_t *addrsize = (uint32_t *)(table->data + offset + info->address_size_offset); for (j = 0; j < info->number_of_regs; j++, gas++, addrsize++) { fwts_log_info_simp_int(fw, " Address Space ID: ", gas->address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", gas->register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", gas->register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", gas->access_width); fwts_log_info_simp_int(fw, " Address ", gas->address); fwts_log_nl(fw); if (*addrsize == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "DBG2InvalidAddressSize", "DBG2 Address Size is 0"); } if (gas->register_bit_width == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "DBG2InvalidGasWidth", "DBG2 Generic Address Structure has " "zero register bit width which is probably incorrect"); } if (gas->address == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "DBG2InvalidGasAddress", "DBG2 Generic Address Structure has " "a NULL Address which is incorrect"); } } } if (!length_ok) break; /* ..and onto the next info structure .. */ info = (fwts_acpi_table_dbg2_info *) ((uint8_t *)info + info->length); } done: if (passed) fwts_passed(fw, "No issues found in DBG2 table."); return FWTS_OK; } static fwts_framework_minor_test dbg2_tests[] = { { dbg2_test1, "DBG2 (Debug Port Table 2) test." }, { dbg2_test2, "DBG2 ARM BSA compliant UART test," }, { NULL, NULL } }; static fwts_framework_ops dbg2_ops = { .description = "DBG2 (Debug Port Table 2) test.", .init = DBG2_init, .minor_tests = dbg2_tests }; FWTS_REGISTER("dbg2", &dbg2_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI | FWTS_FLAG_SBBR) #endif src/acpi/dbgp/000077500000000000000000000000001465205512700135045ustar00rootroot00000000000000src/acpi/dbgp/dbgp.c000066400000000000000000000074641465205512700145770ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) && !(FWTS_ARCH_AARCH64) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(DBGP, &table) /* * DBGP Table * see https://msdn.microsoft.com/en-us/library/windows/hardware/dn639130%28v=vs.85%29.aspx */ static int dbgp_test1(fwts_framework *fw) { fwts_acpi_table_dbgp *dbgp = (fwts_acpi_table_dbgp *)table->data; char *interface_type; bool passed = true; uint32_t reserved; if (!fwts_acpi_table_length(fw, "DBGP", table->length, sizeof(fwts_acpi_table_dbgp))) { passed = false; goto done; } switch (dbgp->interface_type) { case 0: interface_type = "Full 16550 interface"; break; case 1: interface_type = "16550 subset interface"; break; default: interface_type = "Reserved"; break; } reserved = dbgp->reserved[0] + ((uint32_t) dbgp->reserved[1] << 8) + ((uint32_t) dbgp->reserved[2] << 16); fwts_log_info_verbatim(fw, "DBGP Table:"); fwts_log_info_verbatim(fw, " Interface Type 0x%2.2" PRIx8 " (%s)", dbgp->interface_type, interface_type); fwts_log_info_simp_int(fw, " Reserved: " , reserved); fwts_log_info_verbatim(fw, " Base Address:"); fwts_log_info_simp_int(fw, " Address Space ID: ", dbgp->base_address.address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", dbgp->base_address.register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", dbgp->base_address.register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", dbgp->base_address.access_width); fwts_log_info_simp_int(fw, " Address ", dbgp->base_address.address); fwts_log_nl(fw); if (dbgp->interface_type > 2) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "DBGPReservedInterfaceType", "DBGP Interface Type is 0x%2.2" PRIx8 " which is a reserved interface type. Expecting " " 0x00 (Full 16550) or 0x01 (16550 subset)", dbgp->interface_type); } fwts_acpi_reserved_zero("DBGP", "Reserved", reserved, &passed); if (dbgp->base_address.register_bit_width == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "DBGPBaseAddrBitWidthZero", "DBGP Base Address Bit Width is zero."); } fwts_acpi_space_id(fw, "DBGP", "Base Address", &passed, dbgp->base_address.address_space_id, 7, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_MEMORY, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_IO, FWTS_GAS_ADDR_SPACE_ID_PCI_CONFIG, FWTS_GAS_ADDR_SPACE_ID_EC, FWTS_GAS_ADDR_SPACE_ID_SMBUS, FWTS_GAS_ADDR_SPACE_ID_PCC, FWTS_GAS_ADDR_SPACE_ID_FFH); done: if (passed) fwts_passed(fw, "No issues found in DBGP table."); return FWTS_OK; } static fwts_framework_minor_test dbgp_tests[] = { { dbgp_test1, "DBGP (Debug Port) Table test." }, { NULL, NULL } }; static fwts_framework_ops dbgp_ops = { .description = "DBGP (Debug Port) Table test.", .init = DBGP_init, .minor_tests = dbgp_tests }; FWTS_REGISTER("dbgp", &dbgp_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/devices/000077500000000000000000000000001465205512700142125ustar00rootroot00000000000000src/acpi/devices/ac_adapter/000077500000000000000000000000001465205512700162755ustar00rootroot00000000000000src/acpi/devices/ac_adapter/ac.c000066400000000000000000000166111465205512700170310ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #define FWTS_ACPI_DEVICE_HID "ACPI0003" #define FWTS_ACPI_DEVICE "AC adapter" static ACPI_HANDLE device; static ACPI_STATUS get_device_handle(ACPI_HANDLE handle, uint32_t level, void *context, void **ret_val) { FWTS_UNUSED(level); FWTS_UNUSED(context); FWTS_UNUSED(ret_val); device = handle; return AE_CTRL_TERMINATE; } static int acpi_ac_init(fwts_framework *fw) { ACPI_STATUS status; if (fwts_acpica_init(fw) != FWTS_OK) return FWTS_ERROR; status = AcpiGetDevices(FWTS_ACPI_DEVICE_HID, get_device_handle, NULL, NULL); if (ACPI_FAILURE(status)) { fwts_log_error(fw, "Cannot find the ACPI device"); return FWTS_ERROR; } if (!device) { fwts_log_error(fw, "ACPI %s device does not exist, skipping test", FWTS_ACPI_DEVICE); fwts_acpica_deinit(); return FWTS_SKIP; } else { ACPI_BUFFER buffer; char full_name[128]; buffer.Length = sizeof(full_name); buffer.Pointer = full_name; status = AcpiGetName(device, ACPI_FULL_PATHNAME, &buffer); if (ACPI_SUCCESS(status)) { fwts_log_info_verbatim(fw, "ACPI %s device: %s", FWTS_ACPI_DEVICE, full_name); fwts_log_nl(fw); } } return FWTS_OK; } static void method_test_PSR_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; if (obj->Integer.Value > 2) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_PSRZeroOrOne", "%s returned 0x%8.8" PRIx64 ", expected 0 " "(offline) or 1 (online)", name, (uint64_t)obj->Integer.Value); } else fwts_method_passed_sane_uint64(fw, name, obj->Integer.Value); } static int method_test_PSR(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_PSR", NULL, 0, method_test_PSR_return, NULL); } static void method_test_PCL_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_LOCAL_REFERENCE) != FWTS_OK) return; fwts_passed(fw, "%s returned a sane package of %" PRIu32 " references.", name, obj->Package.Count); } static int method_test_PCL(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_PCL", NULL, 0, method_test_PCL_return, NULL); } static void method_test_PIF_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { static const fwts_package_element elements[] = { { ACPI_TYPE_INTEGER, "Power Source State" }, { ACPI_TYPE_INTEGER, "Maximum Output Power" }, { ACPI_TYPE_INTEGER, "Maximum Input Power" }, { ACPI_TYPE_STRING, "Model Number" }, { ACPI_TYPE_STRING, "Serial Number" }, { ACPI_TYPE_STRING, "OEM Information" } }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_count_equal(fw, name, obj, 6) != FWTS_OK) return; if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK) return; fwts_acpi_object_dump(fw, obj); fwts_method_passed_sane(fw, name, "package"); } static int method_test_PIF(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_PIF", NULL, 0, method_test_PIF_return, NULL); } static void method_test_PRL_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_LOCAL_REFERENCE) != FWTS_OK) return; fwts_method_passed_sane(fw, name, "package"); } static int method_test_PRL(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_PRL", NULL, 0, method_test_PRL_return, NULL); } /* Evaluate Device Identification Objects - all are optional */ static int method_test_ADR(fwts_framework *fw) { return fwts_method_test_ADR(fw, &device); } static int method_test_CID(fwts_framework *fw) { return fwts_method_test_CID(fw, &device); } static int method_test_CLS(fwts_framework *fw) { return fwts_method_test_CLS(fw, &device); } static int method_test_DDN(fwts_framework *fw) { return fwts_method_test_DDN(fw, &device); } static int method_test_HID(fwts_framework *fw) { return fwts_method_test_HID(fw, &device); } static int method_test_HRV(fwts_framework *fw) { return fwts_method_test_HRV(fw, &device); } static int method_test_MLS(fwts_framework *fw) { return fwts_method_test_MLS(fw, &device); } static int method_test_PLD(fwts_framework *fw) { return fwts_method_test_PLD(fw, &device); } static int method_test_SUB(fwts_framework *fw) { return fwts_method_test_SUB(fw, &device); } static int method_test_SUN(fwts_framework *fw) { return fwts_method_test_SUN(fw, &device); } static int method_test_STR(fwts_framework *fw) { return fwts_method_test_STR(fw, &device); } static int method_test_UID(fwts_framework *fw) { return fwts_method_test_UID(fw, &device); } static fwts_framework_minor_test acpi_ac_tests[] = { /* Device Specific Objects */ { method_test_PSR, "Test _PSR (Power Source)." }, { method_test_PCL, "Test _PCL (Power Consumer List)." }, { method_test_PIF, "Test _PIF (Power Source Information)." }, { method_test_PRL, "Test _PRL (Power Source Redundancy List)." }, /* Device Identification Objects - all are optional */ { method_test_ADR, "Test _ADR (Return Unique ID for Device)." }, { method_test_CID, "Test _CID (Compatible ID)." }, { method_test_CLS, "Test _CLS (Class Code)." }, { method_test_DDN, "Test _DDN (DOS Device Name)." }, { method_test_HID, "Test _HID (Hardware ID)." }, { method_test_HRV, "Test _HRV (Hardware Revision Number)." }, { method_test_MLS, "Test _MLS (Multiple Language String)." }, { method_test_PLD, "Test _PLD (Physical Device Location)." }, { method_test_SUB, "Test _SUB (Subsystem ID)." }, { method_test_SUN, "Test _SUN (Slot User Number)." }, { method_test_STR, "Test _STR (String)." }, { method_test_UID, "Test _UID (Unique ID)." }, { NULL, NULL } }; static int acpi_ac_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_acpica_deinit(); return FWTS_OK; } static fwts_framework_ops acpi_ac_ops = { .description = "AC adapter device test", .init = acpi_ac_init, .deinit = acpi_ac_deinit, .minor_tests = acpi_ac_tests }; FWTS_REGISTER("acpi_ac", &acpi_ac_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/devices/battery/000077500000000000000000000000001465205512700156645ustar00rootroot00000000000000src/acpi/devices/battery/battery.c000066400000000000000000000257641465205512700175200ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #define FWTS_ACPI_DEVICE_HID "PNP0C0A" #define FWTS_ACPI_DEVICE "battery" static ACPI_HANDLE device; static ACPI_STATUS get_device_handle(ACPI_HANDLE handle, uint32_t level, void *context, void **ret_val) { FWTS_UNUSED(level); FWTS_UNUSED(context); FWTS_UNUSED(ret_val); device = handle; return AE_CTRL_TERMINATE; } static int acpi_battery_init(fwts_framework *fw) { ACPI_STATUS status; if (fwts_acpica_init(fw) != FWTS_OK) return FWTS_ERROR; status = AcpiGetDevices(FWTS_ACPI_DEVICE_HID, get_device_handle, NULL, NULL); if (ACPI_FAILURE(status)) { fwts_log_error(fw, "Cannot find the ACPI device"); return FWTS_ERROR; } if (!device) { fwts_log_error(fw, "ACPI %s device does not exist, skipping test", FWTS_ACPI_DEVICE); fwts_acpica_deinit(); return FWTS_SKIP; } else { ACPI_BUFFER buffer; char full_name[128]; buffer.Length = sizeof(full_name); buffer.Pointer = full_name; status = AcpiGetName(device, ACPI_FULL_PATHNAME, &buffer); if (ACPI_SUCCESS(status)) { fwts_log_info_verbatim(fw, "ACPI %s device: %s", FWTS_ACPI_DEVICE, full_name); fwts_log_nl(fw); } } return FWTS_OK; } static int method_test_BIF(fwts_framework *fw) { ACPI_STATUS status; ACPI_HANDLE method; /* _BIF can be superseded by _BIX */ status = AcpiGetHandle (device, "_BIX", &method); if (ACPI_SUCCESS(status)) return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_BIF", NULL, 0, fwts_method_test_BIF_return, NULL); else return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_BIF", NULL, 0, fwts_method_test_BIF_return, NULL); } static int method_test_BIX(fwts_framework *fw) { ACPI_STATUS status; ACPI_HANDLE method; /* _BIX may not supported by older firmware */ status = AcpiGetHandle (device, "_BIF", &method); if (ACPI_SUCCESS(status)) return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_BIX", NULL, 0, fwts_method_test_BIX_return, NULL); else return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_BIX", NULL, 0, fwts_method_test_BIX_return, NULL); } static int method_test_BMA(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_BMA", arg, 1, fwts_method_test_passed_failed_return, "_BMA"); } static int method_test_BMS(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_BMS", arg, 1, fwts_method_test_passed_failed_return, "_BMS"); } static int method_test_BPC(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_BPC", NULL, 0, fwts_method_test_BPC_return, NULL); } static int method_test_BPS(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_BPS", NULL, 0, fwts_method_test_BPS_return, NULL); } static int method_test_BPT(fwts_framework *fw) { ACPI_OBJECT arg[3]; uint64_t max = 5; int i; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; arg[2].Type = ACPI_TYPE_INTEGER; arg[2].Integer.Value = 0; for (i = 0; i <= 2; i++) { arg[1].Type = ACPI_TYPE_INTEGER; arg[1].Integer.Value = i; if (fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_BPT", arg, 2, fwts_method_test_integer_max_return, &max) == FWTS_NOT_EXIST) break; fwts_log_nl(fw); } return FWTS_OK; } static int method_test_BST(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_BST", NULL, 0, fwts_method_test_BST_return, NULL); } static int method_test_BTH(fwts_framework *fw) { ACPI_OBJECT arg[1]; uint8_t i, ret; arg[0].Type = ACPI_TYPE_INTEGER; for (i = 0; i <= 100; i++) { arg[0].Integer.Value = i; ret = fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_BTH", arg, 1, fwts_method_test_NULL_return, NULL); if (ret != FWTS_OK) break; } return ret; } static int method_test_BTP(fwts_framework *fw) { static const int values[] = { 0, 1, 100, 200, 0x7fffffff }; ACPI_STATUS status; uint8_t i; for (i = 0; i < FWTS_ARRAY_SIZE(values); i++) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = values[i]; status = fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_BTP", arg, 1, fwts_method_test_NULL_return, NULL); if (ACPI_FAILURE(status)) break; } return FWTS_OK; } static void method_test_PCL_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_LOCAL_REFERENCE) != FWTS_OK) return; fwts_passed(fw, "%s returned a sane package of %" PRIu32 " references.", name, obj->Package.Count); } static int method_test_PCL(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_PCL", NULL, 0, method_test_PCL_return, NULL); } static int method_test_STA(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_STA", NULL, 0, fwts_method_test_STA_return, NULL); } static int method_test_BTM(fwts_framework *fw) { static const int values[] = { 0, 1, 100, 200, 0x7fffffff }; ACPI_STATUS status; uint8_t i; for (i = 0; i < FWTS_ARRAY_SIZE(values); i++) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = values[i]; status = fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_BTM", arg, 1, fwts_method_test_NULL_return, NULL); if (ACPI_FAILURE(status)) break; } return FWTS_OK; } static int method_test_BCT(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 50; /* 50% */ /* * For now, just check that we get some integer back, values * can be 0x00000000, 0x00000001-0xfffffffe and 0xffffffff, * so anything is valid as long as it is an integer */ return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_BCT", arg, 1, fwts_method_test_integer_return, NULL); } static int method_test_BMD(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_BMD", NULL, 0, fwts_method_test_BMD_return, NULL); } static int method_test_BMC(fwts_framework *fw) { static const int values[] = { 0, 1, 2, 4, 8}; ACPI_STATUS status; uint8_t i; for (i = 0; i < FWTS_ARRAY_SIZE(values); i++) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = values[i]; status = fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_BMC", arg, 1, fwts_method_test_NULL_return, NULL); if (ACPI_FAILURE(status)) break; } return FWTS_OK; } /* Evaluate Device Identification Objects - all are optional */ static int method_test_ADR(fwts_framework *fw) { return fwts_method_test_ADR(fw, &device); } static int method_test_CID(fwts_framework *fw) { return fwts_method_test_CID(fw, &device); } static int method_test_CLS(fwts_framework *fw) { return fwts_method_test_CLS(fw, &device); } static int method_test_DDN(fwts_framework *fw) { return fwts_method_test_DDN(fw, &device); } static int method_test_HID(fwts_framework *fw) { return fwts_method_test_HID(fw, &device); } static int method_test_HRV(fwts_framework *fw) { return fwts_method_test_HRV(fw, &device); } static int method_test_MLS(fwts_framework *fw) { return fwts_method_test_MLS(fw, &device); } static int method_test_PLD(fwts_framework *fw) { return fwts_method_test_PLD(fw, &device); } static int method_test_SUB(fwts_framework *fw) { return fwts_method_test_SUB(fw, &device); } static int method_test_SUN(fwts_framework *fw) { return fwts_method_test_SUN(fw, &device); } static int method_test_STR(fwts_framework *fw) { return fwts_method_test_STR(fw, &device); } static int method_test_UID(fwts_framework *fw) { return fwts_method_test_UID(fw, &device); } static fwts_framework_minor_test acpi_battery_tests[] = { /* Device Specific Objects */ { method_test_BIF, "Test _BIF (Battery Information)." }, { method_test_BIX, "Test _BIX (Battery Information Extended)." }, { method_test_BMA, "Test _BMA (Battery Measurement Averaging)." }, { method_test_BMS, "Test _BMS (Battery Measurement Sampling Time)." }, { method_test_BPC, "Test _BPC (Battery Power Characteristics)." }, { method_test_BPS, "Test _BPS (Battery Power State)." }, { method_test_BPT, "Test _BPT (Battery Power Threshold)." }, { method_test_BPC, "Test _BPC (Battery Power Characteristics)." }, { method_test_BPS, "Test _BPS (Battery Power State)." }, { method_test_BPT, "Test _BPT (Battery Power Threshold)." }, { method_test_BST, "Test _BST (Battery Status)." }, { method_test_BTH, "Test _BTH (Battery Throttle Limit)." }, { method_test_BTP, "Test _BTP (Battery Trip Point)." }, { method_test_PCL, "Test _PCL (Power Consumer List)." }, { method_test_STA, "Test _STA (Status)." }, { method_test_BTM, "Test _BTM (Battery Time)." }, { method_test_BCT, "Test _BCT (Battery Charge Time)." }, { method_test_BMD, "Test _BMD (Battery Maintenance Data)." }, { method_test_BMC, "Test _BMC (Battery Maintenance Control)." }, /* Device Identification Objects - all are optional */ { method_test_ADR, "Test _ADR (Return Unique ID for Device)." }, { method_test_CID, "Test _CID (Compatible ID)." }, { method_test_CLS, "Test _CLS (Class Code)." }, { method_test_DDN, "Test _DDN (DOS Device Name)." }, { method_test_HID, "Test _HID (Hardware ID)." }, { method_test_HRV, "Test _HRV (Hardware Revision Number)." }, { method_test_MLS, "Test _MLS (Multiple Language String)." }, { method_test_PLD, "Test _PLD (Physical Device Location)." }, { method_test_SUB, "Test _SUB (Subsystem ID)." }, { method_test_SUN, "Test _SUN (Slot User Number)." }, { method_test_STR, "Test _STR (String)." }, { method_test_UID, "Test _UID (Unique ID)." }, { NULL, NULL } }; static int acpi_battery_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_acpica_deinit(); return FWTS_OK; } static fwts_framework_ops acpi_battery_ops = { .description = "ACPI battery device test", .init = acpi_battery_init, .deinit = acpi_battery_deinit, .minor_tests = acpi_battery_tests }; FWTS_REGISTER("acpi_battery", &acpi_battery_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/devices/battery/smart_battery.c000066400000000000000000000134601465205512700207140ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #define FWTS_ACPI_DEVICE_HID "ACPI0002" #define FWTS_ACPI_DEVICE "smart battery" static ACPI_HANDLE device; static ACPI_STATUS get_device_handle(ACPI_HANDLE handle, uint32_t level, void *context, void **ret_val) { FWTS_UNUSED(level); FWTS_UNUSED(context); FWTS_UNUSED(ret_val); device = handle; return AE_CTRL_TERMINATE; } static int smart_battery_init(fwts_framework *fw) { ACPI_STATUS status; if (fwts_acpica_init(fw) != FWTS_OK) return FWTS_ERROR; status = AcpiGetDevices(FWTS_ACPI_DEVICE_HID, get_device_handle, NULL, NULL); if (ACPI_FAILURE(status)) { fwts_log_error(fw, "Cannot find the ACPI device"); return FWTS_ERROR; } if (!device) { fwts_log_error(fw, "ACPI %s device does not exist, skipping test", FWTS_ACPI_DEVICE); fwts_acpica_deinit(); return FWTS_SKIP; } else { ACPI_BUFFER buffer; char full_name[128]; buffer.Length = sizeof(full_name); buffer.Pointer = full_name; status = AcpiGetName(device, ACPI_FULL_PATHNAME, &buffer); if (ACPI_SUCCESS(status)) { fwts_log_info_verbatim(fw, "ACPI %s device: %s", FWTS_ACPI_DEVICE, full_name); fwts_log_nl(fw); } } return FWTS_OK; } static void method_test_SBS_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { static const char *sbs_info[] = { "Maximum 1 Smart Battery, system manager/selector not present", "Maximum 1 Smart Battery, system manager/selector present", "Maximum 2 Smart Batteries, system manager/selector present", "Maximum 3 Smart Batteries, system manager/selector present", "Maximum 4 Smart Batteries, system manager/selector present" }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; switch (obj->Integer.Value) { case 0 ... 4: fwts_passed(fw, "%s correctly returned value %" PRIu64 " %s", name, (uint64_t)obj->Integer.Value, sbs_info[obj->Integer.Value]); break; default: fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_SBSReturn", "%s returned %" PRIu64 ", should be between 0 and 4.", name, (uint64_t)obj->Integer.Value); fwts_advice(fw, "Smart Battery %s is incorrectly informing " "the OS about the smart battery " "configuration. This is a bug and needs to be " "fixed.", name); break; } } static int method_test_SBS(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_SBS", NULL, 0, method_test_SBS_return, NULL); } /* Evaluate Device Identification Objects - all are optional */ static int method_test_ADR(fwts_framework *fw) { return fwts_method_test_ADR(fw, &device); } static int method_test_CID(fwts_framework *fw) { return fwts_method_test_CID(fw, &device); } static int method_test_CLS(fwts_framework *fw) { return fwts_method_test_CLS(fw, &device); } static int method_test_DDN(fwts_framework *fw) { return fwts_method_test_DDN(fw, &device); } static int method_test_HID(fwts_framework *fw) { return fwts_method_test_HID(fw, &device); } static int method_test_HRV(fwts_framework *fw) { return fwts_method_test_HRV(fw, &device); } static int method_test_MLS(fwts_framework *fw) { return fwts_method_test_MLS(fw, &device); } static int method_test_PLD(fwts_framework *fw) { return fwts_method_test_PLD(fw, &device); } static int method_test_SUB(fwts_framework *fw) { return fwts_method_test_SUB(fw, &device); } static int method_test_SUN(fwts_framework *fw) { return fwts_method_test_SUN(fw, &device); } static int method_test_STR(fwts_framework *fw) { return fwts_method_test_STR(fw, &device); } static int method_test_UID(fwts_framework *fw) { return fwts_method_test_UID(fw, &device); } static fwts_framework_minor_test smart_battery_tests[] = { /* Device Specific Objects */ { method_test_SBS, "Test _SBS (Smart Battery Subsystem)." }, /* Device Identification Objects - all are optional */ { method_test_ADR, "Test _ADR (Return Unique ID for Device)." }, { method_test_CID, "Test _CID (Compatible ID)." }, { method_test_CLS, "Test _CLS (Class Code)." }, { method_test_DDN, "Test _DDN (DOS Device Name)." }, { method_test_HID, "Test _HID (Hardware ID)." }, { method_test_HRV, "Test _HRV (Hardware Revision Number)." }, { method_test_MLS, "Test _MLS (Multiple Language String)." }, { method_test_PLD, "Test _PLD (Physical Device Location)." }, { method_test_SUB, "Test _SUB (Subsystem ID)." }, { method_test_SUN, "Test _SUN (Slot User Number)." }, { method_test_STR, "Test _STR (String)." }, { method_test_UID, "Test _UID (Unique ID)." }, { NULL, NULL } }; static int smart_battery_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_acpica_deinit(); return FWTS_OK; } static fwts_framework_ops smart_battery_ops = { .description = "ACPI smart battery device test", .init = smart_battery_init, .deinit = smart_battery_deinit, .minor_tests = smart_battery_tests }; FWTS_REGISTER("smart_battery", &smart_battery_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/devices/buttons/000077500000000000000000000000001465205512700157105ustar00rootroot00000000000000src/acpi/devices/buttons/power_button.c000066400000000000000000000107111465205512700206030ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #define FWTS_ACPI_DEVICE_HID "PNP0C0C" #define FWTS_ACPI_DEVICE "power button" static ACPI_HANDLE device; static ACPI_STATUS get_device_handle(ACPI_HANDLE handle, uint32_t level, void *context, void **ret_val) { FWTS_UNUSED(level); FWTS_UNUSED(context); FWTS_UNUSED(ret_val); device = handle; return AE_CTRL_TERMINATE; } static int power_button_init(fwts_framework *fw) { ACPI_STATUS status; if (fwts_acpica_init(fw) != FWTS_OK) return FWTS_ERROR; status = AcpiGetDevices(FWTS_ACPI_DEVICE_HID, get_device_handle, NULL, NULL); if (ACPI_FAILURE(status)) { fwts_log_error(fw, "Cannot find the ACPI device"); return FWTS_ERROR; } if (!device) { fwts_log_error(fw, "ACPI %s device does not exist, skipping test", FWTS_ACPI_DEVICE); fwts_acpica_deinit(); return FWTS_SKIP; } else { ACPI_BUFFER buffer; char full_name[128]; buffer.Length = sizeof(full_name); buffer.Pointer = full_name; status = AcpiGetName(device, ACPI_FULL_PATHNAME, &buffer); if (ACPI_SUCCESS(status)) { fwts_log_info_verbatim(fw, "ACPI %s device: %s", FWTS_ACPI_DEVICE, full_name); fwts_log_nl(fw); } } return FWTS_OK; } static int method_test_HID(fwts_framework *fw) { return fwts_method_test_HID(fw, &device); } /* Evaluate Device Identification Objects - all are optional */ static int method_test_ADR(fwts_framework *fw) { return fwts_method_test_ADR(fw, &device); } static int method_test_CID(fwts_framework *fw) { return fwts_method_test_CID(fw, &device); } static int method_test_CLS(fwts_framework *fw) { return fwts_method_test_CLS(fw, &device); } static int method_test_DDN(fwts_framework *fw) { return fwts_method_test_DDN(fw, &device); } static int method_test_HRV(fwts_framework *fw) { return fwts_method_test_HRV(fw, &device); } static int method_test_MLS(fwts_framework *fw) { return fwts_method_test_MLS(fw, &device); } static int method_test_PLD(fwts_framework *fw) { return fwts_method_test_PLD(fw, &device); } static int method_test_SUB(fwts_framework *fw) { return fwts_method_test_SUB(fw, &device); } static int method_test_SUN(fwts_framework *fw) { return fwts_method_test_SUN(fw, &device); } static int method_test_STR(fwts_framework *fw) { return fwts_method_test_STR(fw, &device); } static int method_test_UID(fwts_framework *fw) { return fwts_method_test_UID(fw, &device); } static fwts_framework_minor_test power_button_tests[] = { /* Device Specific Objects */ { method_test_HID, "Test _HID (Hardware ID)." }, /* Device Identification Objects - all are optional */ { method_test_ADR, "Test _ADR (Return Unique ID for Device)." }, { method_test_CID, "Test _CID (Compatible ID)." }, { method_test_CLS, "Test _CLS (Class Code)." }, { method_test_DDN, "Test _DDN (DOS Device Name)." }, { method_test_HRV, "Test _HRV (Hardware Revision Number)." }, { method_test_MLS, "Test _MLS (Multiple Language String)." }, { method_test_PLD, "Test _PLD (Physical Device Location)." }, { method_test_SUB, "Test _SUB (Subsystem ID)." }, { method_test_SUN, "Test _SUN (Slot User Number)." }, { method_test_STR, "Test _STR (String)." }, { method_test_UID, "Test _UID (Unique ID)." }, { NULL, NULL } }; static int power_button_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_acpica_deinit(); return FWTS_OK; } static fwts_framework_ops power_button_ops = { .description = "Power button device test", .init = power_button_init, .deinit = power_button_deinit, .minor_tests = power_button_tests }; FWTS_REGISTER("acpi_pwrb", &power_button_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/devices/buttons/sleep_button.c000066400000000000000000000107101465205512700205560ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #define FWTS_ACPI_DEVICE_HID "PNP0C0E" #define FWTS_ACPI_DEVICE "sleep button" static ACPI_HANDLE device; static ACPI_STATUS get_device_handle(ACPI_HANDLE handle, uint32_t level, void *context, void **ret_val) { FWTS_UNUSED(level); FWTS_UNUSED(context); FWTS_UNUSED(ret_val); device = handle; return AE_CTRL_TERMINATE; } static int sleep_button_init(fwts_framework *fw) { ACPI_STATUS status; if (fwts_acpica_init(fw) != FWTS_OK) return FWTS_ERROR; status = AcpiGetDevices(FWTS_ACPI_DEVICE_HID, get_device_handle, NULL, NULL); if (ACPI_FAILURE(status)) { fwts_log_error(fw, "Cannot find the ACPI device"); return FWTS_ERROR; } if (!device) { fwts_log_error(fw, "ACPI %s device does not exist, skipping test", FWTS_ACPI_DEVICE); fwts_acpica_deinit(); return FWTS_SKIP; } else { ACPI_BUFFER buffer; char full_name[128]; buffer.Length = sizeof(full_name); buffer.Pointer = full_name; status = AcpiGetName(device, ACPI_FULL_PATHNAME, &buffer); if (ACPI_SUCCESS(status)) { fwts_log_info_verbatim(fw, "ACPI %s device: %s", FWTS_ACPI_DEVICE, full_name); fwts_log_nl(fw); } } return FWTS_OK; } static int method_test_HID(fwts_framework *fw) { return fwts_method_test_HID(fw, &device); } /* Evaluate Device Identification Objects - all are optional */ static int method_test_ADR(fwts_framework *fw) { return fwts_method_test_ADR(fw, &device); } static int method_test_CID(fwts_framework *fw) { return fwts_method_test_CID(fw, &device); } static int method_test_CLS(fwts_framework *fw) { return fwts_method_test_CLS(fw, &device); } static int method_test_DDN(fwts_framework *fw) { return fwts_method_test_DDN(fw, &device); } static int method_test_HRV(fwts_framework *fw) { return fwts_method_test_HRV(fw, &device); } static int method_test_MLS(fwts_framework *fw) { return fwts_method_test_MLS(fw, &device); } static int method_test_PLD(fwts_framework *fw) { return fwts_method_test_PLD(fw, &device); } static int method_test_SUB(fwts_framework *fw) { return fwts_method_test_SUB(fw, &device); } static int method_test_SUN(fwts_framework *fw) { return fwts_method_test_SUN(fw, &device); } static int method_test_STR(fwts_framework *fw) { return fwts_method_test_STR(fw, &device); } static int method_test_UID(fwts_framework *fw) { return fwts_method_test_UID(fw, &device); } static fwts_framework_minor_test sleep_button_tests[] = { /* Device Specific Objects */ { method_test_HID, "Test _HID (Hardware ID)." }, /* Device Identification Objects - all are optional */ { method_test_ADR, "Test _ADR (Return Unique ID for Device)." }, { method_test_CID, "Test _CID (Compatible ID)." }, { method_test_CLS, "Test _CLS (Class Code)." }, { method_test_DDN, "Test _DDN (DOS Device Name)." }, { method_test_HRV, "Test _HRV (Hardware Revision Number)." }, { method_test_MLS, "Test _MLS (Multiple Language String)." }, { method_test_PLD, "Test _PLD (Physical Device Location)." }, { method_test_SUB, "Test _SUB (Subsystem ID)." }, { method_test_SUN, "Test _SUN (Slot User Number)." }, { method_test_STR, "Test _STR (String)." }, { method_test_UID, "Test _UID (Unique ID)." }, { NULL, NULL } }; static int sleep_button_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_acpica_deinit(); return FWTS_OK; } static fwts_framework_ops sleep_button_ops = { .description = "Sleep button device test", .init = sleep_button_init, .deinit = sleep_button_deinit, .minor_tests = sleep_button_tests }; FWTS_REGISTER("acpi_slpb", &sleep_button_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/devices/ec/000077500000000000000000000000001465205512700146015ustar00rootroot00000000000000src/acpi/devices/ec/ec.c000066400000000000000000000165401465205512700153420ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #define FWTS_ACPI_DEVICE_HID "PNP0C09" #define FWTS_ACPI_DEVICE "EC" static ACPI_HANDLE device; static ACPI_STATUS get_device_handle(ACPI_HANDLE handle, uint32_t level, void *context, void **ret_val) { FWTS_UNUSED(level); FWTS_UNUSED(context); FWTS_UNUSED(ret_val); device = handle; return AE_CTRL_TERMINATE; } static int acpi_ec_init(fwts_framework *fw) { ACPI_STATUS status; if (fwts_acpica_init(fw) != FWTS_OK) return FWTS_ERROR; status = AcpiGetDevices(FWTS_ACPI_DEVICE_HID, get_device_handle, NULL, NULL); if (ACPI_FAILURE(status)) { fwts_log_error(fw, "Cannot find the ACPI device"); return FWTS_ERROR; } if (!device) { fwts_log_error(fw, "ACPI %s device does not exist, skipping test", FWTS_ACPI_DEVICE); fwts_acpica_deinit(); return FWTS_SKIP; } else { ACPI_BUFFER buffer; char full_name[128]; buffer.Length = sizeof(full_name); buffer.Pointer = full_name; status = AcpiGetName(device, ACPI_FULL_PATHNAME, &buffer); if (ACPI_SUCCESS(status)) { fwts_log_info_verbatim(fw, "ACPI %s device: %s", FWTS_ACPI_DEVICE, full_name); fwts_log_nl(fw); } } return FWTS_OK; } static int method_test_HID(fwts_framework *fw) { return fwts_method_test_HID(fw, &device); } static void method_test_GPE_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); FWTS_UNUSED(buf); bool failed = false; if (fwts_acpi_is_reduced_hardware(fw)) { fwts_failed(fw, LOG_LEVEL_HIGH, "MethodGPEExist", "%s is not required for Hardware-reduced ACPI platforms", name); return; } switch (obj->Type) { case ACPI_TYPE_INTEGER: if (obj->Integer.Value <= 255) fwts_passed(fw, "%s returned an integer 0x%8.8" PRIx64, name, (uint64_t)obj->Integer.Value); else fwts_failed(fw, LOG_LEVEL_CRITICAL, "MethodGPEBadInteger", "%s returned an invalid integer 0x%8.8" PRIx64, name, (uint64_t)obj->Integer.Value); break; case ACPI_TYPE_PACKAGE: if (obj->Package.Elements[0].Type != ACPI_TYPE_LOCAL_REFERENCE) { failed = true; fwts_failed(fw, LOG_LEVEL_CRITICAL, "MethodGPEBadPackage", "%s sub-package element 0 is not a reference.", name); } if (obj->Package.Elements[1].Type != ACPI_TYPE_INTEGER) { failed = true; fwts_failed(fw, LOG_LEVEL_CRITICAL, "MethodGPEBadPackage", "%s sub-package element 1 is not an integer.", name); } if (!failed) fwts_method_passed_sane(fw, name, "package"); break; default: fwts_failed(fw, LOG_LEVEL_CRITICAL, "MethodGPEBadReturnType", "%s did not return an integer or a package.", name); break; } } static int method_test_GPE(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_GPE", NULL, 0, method_test_GPE_return, "_GPE"); } static void method_test_CRS_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint8_t *data; bool passed = true; const char *tag = "Unknown"; char *objname = (char*)private; char tmp[128]; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_BUFFER) != FWTS_OK) return; if (obj->Buffer.Pointer == NULL) { snprintf(tmp, sizeof(tmp), "Method%sNullBuffer", objname); fwts_failed(fw, LOG_LEVEL_CRITICAL, tmp, "%s returned a NULL buffer pointer.", name); return; } if (obj->Buffer.Length < 1) { snprintf(tmp, sizeof(tmp), "Method%sBufferTooSmall", objname); fwts_failed(fw, LOG_LEVEL_CRITICAL, tmp, "%s should return a buffer of at least one byte in length.", name); return; } data = (uint8_t*)obj->Buffer.Pointer; if (data[0] & 128) fwts_method_test_CRS_large_resource_items(fw, name, objname, data, obj->Buffer.Length, &passed, &tag); else fwts_method_test_CRS_small_resource_items(fw, name, objname, data, obj->Buffer.Length, &passed, &tag); if (passed) fwts_passed(fw, "%s (%s) looks sane.", name, tag); } static int method_test_CRS(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_CRS", NULL, 0, method_test_CRS_return, NULL); } /* Evaluate Device Identification Objects - all are optional */ static int method_test_ADR(fwts_framework *fw) { return fwts_method_test_ADR(fw, &device); } static int method_test_CID(fwts_framework *fw) { return fwts_method_test_CID(fw, &device); } static int method_test_CLS(fwts_framework *fw) { return fwts_method_test_CLS(fw, &device); } static int method_test_DDN(fwts_framework *fw) { return fwts_method_test_DDN(fw, &device); } static int method_test_HRV(fwts_framework *fw) { return fwts_method_test_HRV(fw, &device); } static int method_test_MLS(fwts_framework *fw) { return fwts_method_test_MLS(fw, &device); } static int method_test_PLD(fwts_framework *fw) { return fwts_method_test_PLD(fw, &device); } static int method_test_SUB(fwts_framework *fw) { return fwts_method_test_SUB(fw, &device); } static int method_test_SUN(fwts_framework *fw) { return fwts_method_test_SUN(fw, &device); } static int method_test_STR(fwts_framework *fw) { return fwts_method_test_STR(fw, &device); } static int method_test_UID(fwts_framework *fw) { return fwts_method_test_UID(fw, &device); } static fwts_framework_minor_test acpi_ec_tests[] = { /* Device Specific Objects */ { method_test_CRS, "Test _CRS (Current Resource Settings)." }, { method_test_HID, "Test _HID (Hardware ID)." }, { method_test_GPE, "Test _GPE (General Purpose Events)." }, /* Device Identification Objects - all are optional */ { method_test_ADR, "Test _ADR (Return Unique ID for Device)." }, { method_test_CID, "Test _CID (Compatible ID)." }, { method_test_CLS, "Test _CLS (Class Code)." }, { method_test_DDN, "Test _DDN (DOS Device Name)." }, { method_test_HID, "Test _HID (Hardware ID)." }, { method_test_HRV, "Test _HRV (Hardware Revision Number)." }, { method_test_MLS, "Test _MLS (Multiple Language String)." }, { method_test_PLD, "Test _PLD (Physical Device Location)." }, { method_test_SUB, "Test _SUB (Subsystem ID)." }, { method_test_SUN, "Test _SUN (Slot User Number)." }, { method_test_STR, "Test _STR (String)." }, { method_test_UID, "Test _UID (Unique ID)." }, { NULL, NULL } }; static int acpi_ec_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_acpica_deinit(); return FWTS_OK; } static fwts_framework_ops acpi_ec_ops = { .description = "ACPI embedded controller device test", .init = acpi_ec_init, .deinit = acpi_ec_deinit, .minor_tests = acpi_ec_tests }; FWTS_REGISTER("acpi_ec", &acpi_ec_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/devices/lid/000077500000000000000000000000001465205512700147625ustar00rootroot00000000000000src/acpi/devices/lid/lid.c000066400000000000000000000166151465205512700157070ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #define FWTS_ACPI_DEVICE_HID "PNP0C0D" #define FWTS_ACPI_DEVICE "lid" static ACPI_HANDLE device; static ACPI_STATUS get_device_handle(ACPI_HANDLE handle, uint32_t level, void *context, void **ret_val) { FWTS_UNUSED(level); FWTS_UNUSED(context); FWTS_UNUSED(ret_val); device = handle; return AE_CTRL_TERMINATE; } static int acpi_lid_init(fwts_framework *fw) { ACPI_STATUS status; if (fwts_acpica_init(fw) != FWTS_OK) return FWTS_ERROR; status = AcpiGetDevices(FWTS_ACPI_DEVICE_HID, get_device_handle, NULL, NULL); if (ACPI_FAILURE(status)) { fwts_log_error(fw, "Cannot find the ACPI device"); return FWTS_ERROR; } if (!device) { fwts_log_error(fw, "ACPI %s device does not exist, skipping test", FWTS_ACPI_DEVICE); fwts_acpica_deinit(); return FWTS_SKIP; } else { ACPI_BUFFER buffer; char full_name[128]; buffer.Length = sizeof(full_name); buffer.Pointer = full_name; status = AcpiGetName(device, ACPI_FULL_PATHNAME, &buffer); if (ACPI_SUCCESS(status)) { fwts_log_info_verbatim(fw, "ACPI %s device: %s", FWTS_ACPI_DEVICE, full_name); fwts_log_nl(fw); } } return FWTS_OK; } static void method_test_LID_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) == FWTS_OK) fwts_method_passed_sane_uint64(fw, name, obj->Integer.Value); } static int method_test_LID(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_LID", NULL, 0, method_test_LID_return, NULL); } static void method_test_PRW_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_count_min(fw, name, obj, 2) != FWTS_OK) return; if (obj->Package.Elements[0].Type != ACPI_TYPE_INTEGER && obj->Package.Elements[0].Type != ACPI_TYPE_PACKAGE) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_PRWBadPackageReturnType", "%s element 0 is not an integer or an package.", name); failed = true; } if (obj->Package.Elements[0].Type == ACPI_TYPE_PACKAGE) { ACPI_OBJECT *pkg; pkg = &obj->Package.Elements[0]; if (pkg->Package.Count != 2) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_PRWSubPackageElementCount", "%s sub-package 0 was expected to have 2" "elements, got %" PRIu32 " elements instead.", name, pkg->Package.Count); failed = true; } if (pkg->Package.Elements[0].Type != ACPI_TYPE_LOCAL_REFERENCE) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_PRWBadSubPackageElementType", "%s sub-package 0 element 0 is not " "a reference.",name); failed = true; } if (pkg->Package.Elements[1].Type != ACPI_TYPE_INTEGER) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_PRWBadSubPackageElementType", "%s sub-package 0 element 0 is not " "an integer.",name); failed = true; } } if (obj->Package.Elements[1].Type != ACPI_TYPE_INTEGER) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_PRWBadPackageReturnType", "%s element 1 is not an integer.", name); failed = true; } for (i = 2; i < obj->Package.Count - 1; i++) { if (obj->Package.Elements[i].Type != ACPI_TYPE_LOCAL_REFERENCE) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_PRWBadPackageReturnType", "%s package %" PRIu32 " element 0 is not a reference.", name, i); failed = true; } } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_PRW(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_PRW", NULL, 0, method_test_PRW_return, NULL); } static int method_test_PSW(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_PSW", arg, 1, fwts_method_test_NULL_return, NULL); } /* Evaluate Device Identification Objects - all are optional */ static int method_test_ADR(fwts_framework *fw) { return fwts_method_test_ADR(fw, &device); } static int method_test_CID(fwts_framework *fw) { return fwts_method_test_CID(fw, &device); } static int method_test_CLS(fwts_framework *fw) { return fwts_method_test_CLS(fw, &device); } static int method_test_DDN(fwts_framework *fw) { return fwts_method_test_DDN(fw, &device); } static int method_test_HID(fwts_framework *fw) { return fwts_method_test_HID(fw, &device); } static int method_test_HRV(fwts_framework *fw) { return fwts_method_test_HRV(fw, &device); } static int method_test_MLS(fwts_framework *fw) { return fwts_method_test_MLS(fw, &device); } static int method_test_PLD(fwts_framework *fw) { return fwts_method_test_PLD(fw, &device); } static int method_test_SUB(fwts_framework *fw) { return fwts_method_test_SUB(fw, &device); } static int method_test_SUN(fwts_framework *fw) { return fwts_method_test_SUN(fw, &device); } static int method_test_STR(fwts_framework *fw) { return fwts_method_test_STR(fw, &device); } static int method_test_UID(fwts_framework *fw) { return fwts_method_test_UID(fw, &device); } static fwts_framework_minor_test acpi_lid_tests[] = { /* Device Specific Objects */ { method_test_LID, "Test _LID (Lid Status)." }, { method_test_PRW, "Test _PRW (Power Resources for Wake)." }, { method_test_PSW, "Test _PSW (Power State Wake)." }, /* Device Identification Objects - all are optional */ { method_test_ADR, "Test _ADR (Return Unique ID for Device)." }, { method_test_CID, "Test _CID (Compatible ID)." }, { method_test_CLS, "Test _CLS (Class Code)." }, { method_test_DDN, "Test _DDN (DOS Device Name)." }, { method_test_HID, "Test _HID (Hardware ID)." }, { method_test_HRV, "Test _HRV (Hardware Revision Number)." }, { method_test_MLS, "Test _MLS (Multiple Language String)." }, { method_test_PLD, "Test _PLD (Physical Device Location)." }, { method_test_SUB, "Test _SUB (Subsystem ID)." }, { method_test_SUN, "Test _SUN (Slot User Number)." }, { method_test_STR, "Test _STR (String)." }, { method_test_UID, "Test _UID (Unique ID)." }, { NULL, NULL } }; static int acpi_lid_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_acpica_deinit(); return FWTS_OK; } static fwts_framework_ops acpi_lid_ops = { .description = "Lid device test", .init = acpi_lid_init, .deinit = acpi_lid_deinit, .minor_tests = acpi_lid_tests }; FWTS_REGISTER("acpi_lid", &acpi_lid_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/devices/nvdimm/000077500000000000000000000000001465205512700155045ustar00rootroot00000000000000src/acpi/devices/nvdimm/nvdimm.c000066400000000000000000000077471465205512700171610ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #define FWTS_ACPI_DEVICE_HID "ACPI0012" #define FWTS_ACPI_DEVICE "NVDIMM" static ACPI_HANDLE device; static ACPI_STATUS get_device_handle(ACPI_HANDLE handle, uint32_t level, void *context, void **ret_val) { FWTS_UNUSED(level); FWTS_UNUSED(context); FWTS_UNUSED(ret_val); device = handle; return AE_CTRL_TERMINATE; } static int acpi_nvdimm_init(fwts_framework *fw) { ACPI_STATUS status; if (fwts_acpica_init(fw) != FWTS_OK) return FWTS_ERROR; status = AcpiGetDevices(FWTS_ACPI_DEVICE_HID, get_device_handle, NULL, NULL); if (ACPI_FAILURE(status)) { fwts_log_error(fw, "Cannot find the ACPI device"); return FWTS_ERROR; } if (!device) { fwts_log_error(fw, "ACPI %s device does not exist, skipping test", FWTS_ACPI_DEVICE); fwts_acpica_deinit(); return FWTS_SKIP; } else { ACPI_BUFFER buffer; char full_name[128]; buffer.Length = sizeof(full_name); buffer.Pointer = full_name; status = AcpiGetName(device, ACPI_FULL_PATHNAME, &buffer); if (ACPI_SUCCESS(status)) { fwts_log_info_verbatim(fw, "ACPI %s device: %s", FWTS_ACPI_DEVICE, full_name); fwts_log_nl(fw); } } return FWTS_OK; } static int method_test_NCH(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_NCH", NULL, 0, fwts_method_test_NCH_return, NULL); } static int method_test_NBS(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_NBS", NULL, 0, fwts_method_test_NBS_return, NULL); } static int method_test_NIC(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_NIC", NULL, 0, fwts_method_test_NIC_return, NULL); } static int method_test_NIH(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_NIH", NULL, 0, fwts_method_test_NIH_return, NULL); } static int method_test_NIG(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_NIG", NULL, 0, fwts_method_test_NIG_return, NULL); } /* Evaluate Device Identification Objects - all are optional */ static int method_test_HID(fwts_framework *fw) { return fwts_method_test_HID(fw, &device); } static fwts_framework_minor_test acpi_nvdimm_tests[] = { /* Device Specific Objects */ { method_test_NCH, "Test _NCH (NVDIMM Current Health Information)." }, { method_test_NBS, "Test _NBS (NVDIMM Boot Status)." }, { method_test_NIC, "Test _NIC (NVDIMM Health Error Injection Capabilities)." }, { method_test_NIH, "Test _NIH (NVDIMM Inject/Clear Health Errors)." }, { method_test_NIG, "Test _NIG (NVDIMM Inject Health Error Status)." }, /* Device Identification Objects - all are optional */ { method_test_HID, "Test _HID (Hardware ID)." }, { NULL, NULL } }; static int acpi_nvdimm_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_acpica_deinit(); return FWTS_OK; } static fwts_framework_ops acpi_nvdimm_ops = { .description = "NVDIMM device test", .init = acpi_nvdimm_init, .deinit = acpi_nvdimm_deinit, .minor_tests = acpi_nvdimm_tests }; FWTS_REGISTER("acpi_nvdimm", &acpi_nvdimm_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/devices/sensor/000077500000000000000000000000001465205512700155235ustar00rootroot00000000000000src/acpi/devices/sensor/als.c000066400000000000000000000163071465205512700164550ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #define FWTS_ACPI_DEVICE_HID "ACPI0008" #define FWTS_ACPI_DEVICE "ambient light sensor" static ACPI_HANDLE device; static ACPI_STATUS get_device_handle(ACPI_HANDLE handle, uint32_t level, void *context, void **ret_val) { FWTS_UNUSED(level); FWTS_UNUSED(context); FWTS_UNUSED(ret_val); device = handle; return AE_CTRL_TERMINATE; } static int ambient_light_init(fwts_framework *fw) { ACPI_STATUS status; if (fwts_acpica_init(fw) != FWTS_OK) return FWTS_ERROR; status = AcpiGetDevices(FWTS_ACPI_DEVICE_HID, get_device_handle, NULL, NULL); if (ACPI_FAILURE(status)) { fwts_log_error(fw, "Cannot find the ACPI device"); return FWTS_ERROR; } if (!device) { fwts_log_error(fw, "ACPI %s device does not exist, skipping test", FWTS_ACPI_DEVICE); fwts_acpica_deinit(); return FWTS_SKIP; } else { ACPI_BUFFER buffer; char full_name[128]; buffer.Length = sizeof(full_name); buffer.Pointer = full_name; status = AcpiGetName(device, ACPI_FULL_PATHNAME, &buffer); if (ACPI_SUCCESS(status)) { fwts_log_info_verbatim(fw, "ACPI %s device: %s", FWTS_ACPI_DEVICE, full_name); fwts_log_nl(fw); } } return FWTS_OK; } static int method_test_ALI(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_ALI", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_ALC(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_ALC", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_ALT(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_ALT", NULL, 0, fwts_method_test_integer_return, NULL); } static void method_test_ALR_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; uint32_t adjustment = 0, illuminance = 0; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; /* Could be one or more sub-packages */ for (i = 0; i < obj->Package.Count; i++) { ACPI_OBJECT *pkg; pkg = &obj->Package.Elements[i]; if (pkg->Package.Count != 2) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_ALRBadSubPackageElementCount", "%s sub-package %" PRIu32 " was expected to " "have 2 elements, got %" PRIu32 " elements instead.", name, i, pkg->Package.Count); failed = true; } else { /* elements should be listed in monotonically increasing order */ if (pkg->Package.Elements[0].Type != ACPI_TYPE_INTEGER || adjustment > pkg->Package.Elements[0].Integer.Value) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_ALRBadSubPackageReturnType", "%s sub-package %" PRIu32 " element 0 is an invalid integer.", name, i); failed = true; } if (pkg->Package.Elements[1].Type != ACPI_TYPE_INTEGER || illuminance > pkg->Package.Elements[1].Integer.Value) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_ALRBadSubPackageReturnType", "%s sub-package %" PRIu32 " element 1 is an invalid integer.", name, i); failed = true; } adjustment = pkg->Package.Elements[0].Integer.Value; illuminance = pkg->Package.Elements[1].Integer.Value; } } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_ALR(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_ALR", NULL, 0, method_test_ALR_return, NULL); } static int method_test_ALP(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_ALP", NULL, 0, fwts_method_test_polling_return, "_ALP"); } /* Evaluate Device Identification Objects - all are optional */ static int method_test_ADR(fwts_framework *fw) { return fwts_method_test_ADR(fw, &device); } static int method_test_CID(fwts_framework *fw) { return fwts_method_test_CID(fw, &device); } static int method_test_CLS(fwts_framework *fw) { return fwts_method_test_CLS(fw, &device); } static int method_test_DDN(fwts_framework *fw) { return fwts_method_test_DDN(fw, &device); } static int method_test_HID(fwts_framework *fw) { return fwts_method_test_HID(fw, &device); } static int method_test_HRV(fwts_framework *fw) { return fwts_method_test_HRV(fw, &device); } static int method_test_MLS(fwts_framework *fw) { return fwts_method_test_MLS(fw, &device); } static int method_test_PLD(fwts_framework *fw) { return fwts_method_test_PLD(fw, &device); } static int method_test_SUB(fwts_framework *fw) { return fwts_method_test_SUB(fw, &device); } static int method_test_SUN(fwts_framework *fw) { return fwts_method_test_SUN(fw, &device); } static int method_test_STR(fwts_framework *fw) { return fwts_method_test_STR(fw, &device); } static int method_test_UID(fwts_framework *fw) { return fwts_method_test_UID(fw, &device); } static fwts_framework_minor_test ambient_light_tests[] = { /* Device Specific Objects */ { method_test_ALI, "Test _ALI (Ambient Light Illuminance)." }, { method_test_ALC, "Test _ALC (Ambient Light Colour Chromaticity)." }, { method_test_ALT, "Test _ALT (Ambient Light Temperature)." }, { method_test_ALR, "Test _ALR (Ambient Light Response)."}, { method_test_ALP, "Test _ALP (Ambient Light Polling)."}, /* Device Identification Objects - all are optional */ { method_test_ADR, "Test _ADR (Return Unique ID for Device)." }, { method_test_CID, "Test _CID (Compatible ID)." }, { method_test_CLS, "Test _CLS (Class Code)." }, { method_test_DDN, "Test _DDN (DOS Device Name)." }, { method_test_HID, "Test _HID (Hardware ID)." }, { method_test_HRV, "Test _HRV (Hardware Revision Number)." }, { method_test_MLS, "Test _MLS (Multiple Language String)." }, { method_test_PLD, "Test _PLD (Physical Device Location)." }, { method_test_SUB, "Test _SUB (Subsystem ID)." }, { method_test_SUN, "Test _SUN (Slot User Number)." }, { method_test_STR, "Test _STR (String)." }, { method_test_UID, "Test _UID (Unique ID)." }, { NULL, NULL } }; static int ambient_light_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_acpica_deinit(); return FWTS_OK; } static fwts_framework_ops ambient_light_ops = { .description = "Ambient light sensor device test", .init = ambient_light_init, .deinit = ambient_light_deinit, .minor_tests = ambient_light_tests }; FWTS_REGISTER("acpi_als", &ambient_light_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/devices/time/000077500000000000000000000000001465205512700151505ustar00rootroot00000000000000src/acpi/devices/time/time.c000066400000000000000000000263111465205512700162550ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #define FWTS_ACPI_DEVICE_HID "ACPI000E" #define FWTS_ACPI_DEVICE "time and alarm" static ACPI_HANDLE device; static uint32_t capability; static bool is_AC_wake_implemented(void) { if (capability & 0x01) return true; return false; } static ACPI_STATUS get_device_handle(ACPI_HANDLE handle, uint32_t level, void *context, void **ret_val) { FWTS_UNUSED(level); FWTS_UNUSED(context); FWTS_UNUSED(ret_val); device = handle; return AE_CTRL_TERMINATE; } static int acpi_time_alarm_init(fwts_framework *fw) { ACPI_STATUS status; if (fwts_acpica_init(fw) != FWTS_OK) return FWTS_ERROR; status = AcpiGetDevices(FWTS_ACPI_DEVICE_HID, get_device_handle, NULL, NULL); if (ACPI_FAILURE(status)) { fwts_log_error(fw, "Cannot find the ACPI device"); return FWTS_ERROR; } if (!device) { fwts_log_error(fw, "ACPI %s device does not exist, skipping test", FWTS_ACPI_DEVICE); fwts_acpica_deinit(); return FWTS_SKIP; } else { ACPI_BUFFER buffer; char full_name[128]; buffer.Length = sizeof(full_name); buffer.Pointer = full_name; status = AcpiGetName(device, ACPI_FULL_PATHNAME, &buffer); if (ACPI_SUCCESS(status)) { fwts_log_info_verbatim(fw, "ACPI %s device: %s", FWTS_ACPI_DEVICE, full_name); fwts_log_nl(fw); } } return FWTS_OK; } static void method_test_GCP_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; capability = obj->Integer.Value; if (obj->Integer.Value & ~0x1ff) fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_GCPReturn", "%s returned %" PRId64 ", should be between 0 and 0x1ff, " "one or more of the reserved bits 9..31 seem " "to be set.", name, (uint64_t)obj->Integer.Value); else fwts_method_passed_sane_uint64(fw, name, obj->Integer.Value); } static int method_test_GCP(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_GCP", NULL, 0, method_test_GCP_return, NULL); } static void method_test_GRT_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_BUFFER) != FWTS_OK) return; if (fwts_method_buffer_size(fw, name, obj, 16) != FWTS_OK) return; /* * Should sanity check this, but we can't read the * the data in this emulated mode, so ignore */ fwts_method_passed_sane(fw, name, "buffer"); } static int method_test_GRT(fwts_framework *fw) { if (capability & 0x04) return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_GRT", NULL, 0, method_test_GRT_return, NULL); else return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_GRT", NULL, 0, method_test_GRT_return, NULL); } static void method_test_SRT_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; fwts_method_passed_sane_uint64(fw, name, obj->Integer.Value); } static int method_test_SRT(fwts_framework *fw) { uint32_t time_size = sizeof(fwts_acpi_time_buffer); fwts_acpi_time_buffer real_time; ACPI_OBJECT arg0; real_time.year = 2000; real_time.month = 1; real_time.day = 1; real_time.hour = 0; real_time.minute = 0; real_time.milliseconds = 1; real_time.timezone = 0; arg0.Type = ACPI_TYPE_BUFFER; arg0.Buffer.Length = time_size; arg0.Buffer.Pointer = (void *)&real_time; if (capability & 0x04) return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_SRT", &arg0, 1, method_test_SRT_return, NULL); else return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_SRT", &arg0, 1, method_test_SRT_return, NULL); } static void method_test_GWS_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; if (obj->Integer.Value & ~0x3) fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_GWSReturn", "%s returned %" PRIu64 ", should be between 0 and 3, " "one or more of the reserved bits 2..31 seem " "to be set.", name, (uint64_t)obj->Integer.Value); else fwts_method_passed_sane_uint64(fw, name, obj->Integer.Value); } static int method_test_GWS(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; /* DC timer */ if (is_AC_wake_implemented()) return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_GWS", arg, 1, method_test_GWS_return, NULL); else return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_GWS", arg, 1, method_test_GWS_return, NULL);} static void method_test_CWS_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; if (obj->Integer.Value != 0 && obj->Integer.Value != 1) fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_CWSInvalidInteger", "%s returned %" PRIu64 ", should be 0 or 1.", name, (uint64_t)obj->Integer.Value); else fwts_method_passed_sane_uint64(fw, name, obj->Integer.Value); } static int method_test_CWS(fwts_framework *fw) { ACPI_OBJECT arg[1]; int i, ret; arg[0].Type = ACPI_TYPE_INTEGER; for (i = 0; i < 2; i++) { arg[0].Integer.Value = i; if (is_AC_wake_implemented()) ret = fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_CWS", arg, 1, method_test_CWS_return, NULL); else ret = fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_CWS", arg, 1, method_test_CWS_return, NULL); if (ret != FWTS_OK) break; } return ret; } static int method_test_STP(fwts_framework *fw) { ACPI_OBJECT arg[2]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; /* DC timer */ arg[1].Type = ACPI_TYPE_INTEGER; arg[1].Integer.Value = 0; /* wake up instantly */ return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_STP", arg, 2, fwts_method_test_passed_failed_return, "_STP"); } static int method_test_STV(fwts_framework *fw) { ACPI_OBJECT arg[2]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; /* DC timer */ arg[1].Type = ACPI_TYPE_INTEGER; arg[1].Integer.Value = 100; /* timer value */ if (is_AC_wake_implemented()) return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_STV", arg, 2, fwts_method_test_passed_failed_return, "_STV"); else return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_STV", arg, 2, fwts_method_test_passed_failed_return, "_STV"); } static int method_test_TIP(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; /* DC timer */ if (is_AC_wake_implemented()) return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_TIP", arg, 1, fwts_method_test_integer_return, NULL); else return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_TIP", arg, 1, fwts_method_test_integer_return, NULL); } static int method_test_TIV(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; /* DC timer */ if (is_AC_wake_implemented()) return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_TIV", arg, 1, fwts_method_test_integer_return, NULL); else return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_TIV", arg, 1, fwts_method_test_integer_return, NULL); } /* Evaluate Device Identification Objects - all are optional */ static int method_test_ADR(fwts_framework *fw) { return fwts_method_test_ADR(fw, &device); } static int method_test_CID(fwts_framework *fw) { return fwts_method_test_CID(fw, &device); } static int method_test_CLS(fwts_framework *fw) { return fwts_method_test_CLS(fw, &device); } static int method_test_DDN(fwts_framework *fw) { return fwts_method_test_DDN(fw, &device); } static int method_test_HID(fwts_framework *fw) { return fwts_method_test_HID(fw, &device); } static int method_test_HRV(fwts_framework *fw) { return fwts_method_test_HRV(fw, &device); } static int method_test_MLS(fwts_framework *fw) { return fwts_method_test_MLS(fw, &device); } static int method_test_PLD(fwts_framework *fw) { return fwts_method_test_PLD(fw, &device); } static int method_test_SUB(fwts_framework *fw) { return fwts_method_test_SUB(fw, &device); } static int method_test_SUN(fwts_framework *fw) { return fwts_method_test_SUN(fw, &device); } static int method_test_STR(fwts_framework *fw) { return fwts_method_test_STR(fw, &device); } static int method_test_UID(fwts_framework *fw) { return fwts_method_test_UID(fw, &device); } static fwts_framework_minor_test acpi_time_alarm_tests[] = { /* Device Specific Objects */ { method_test_GCP, "Test _GCP (Get Capabilities)." }, { method_test_GRT, "Test _GRT (Get Real Time)." }, { method_test_SRT, "Test _SRT (Set Real Time)." }, { method_test_GWS, "Test _GWS (Get Wake Status)." }, { method_test_CWS, "Test _CWS (Clear Wake Status)." }, { method_test_STP, "Test _STP (Set Expired Timer Wake Policy)." }, { method_test_STV, "Test _STV (Set Timer Value)." }, { method_test_TIP, "Test _TIP (Expired Timer Wake Policy)." }, { method_test_TIV, "Test _TIV (Timer Values)." }, /* Device Identification Objects - all are optional */ { method_test_ADR, "Test _ADR (Return Unique ID for Device)." }, { method_test_CID, "Test _CID (Compatible ID)." }, { method_test_CLS, "Test _CLS (Class Code)." }, { method_test_DDN, "Test _DDN (DOS Device Name)." }, { method_test_HID, "Test _HID (Hardware ID)." }, { method_test_HRV, "Test _HRV (Hardware Revision Number)." }, { method_test_MLS, "Test _MLS (Multiple Language String)." }, { method_test_PLD, "Test _PLD (Physical Device Location)." }, { method_test_SUB, "Test _SUB (Subsystem ID)." }, { method_test_SUN, "Test _SUN (Slot User Number)." }, { method_test_STR, "Test _STR (String)." }, { method_test_UID, "Test _UID (Unique ID)." }, { NULL, NULL } }; static int acpi_time_alarm_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_acpica_deinit(); return FWTS_OK; } static fwts_framework_ops acpi_time_alarm_ops = { .description = "Time and alarm device test", .init = acpi_time_alarm_init, .deinit = acpi_time_alarm_deinit, .minor_tests = acpi_time_alarm_tests }; FWTS_REGISTER("acpi_time", &acpi_time_alarm_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/devices/wpc/000077500000000000000000000000001465205512700150035ustar00rootroot00000000000000src/acpi/devices/wpc/wpc.c000066400000000000000000000126241465205512700157450ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #define FWTS_ACPI_DEVICE_HID "ACPI0014" #define FWTS_ACPI_DEVICE "wireless power calibration" static ACPI_HANDLE device; static ACPI_STATUS get_device_handle(ACPI_HANDLE handle, uint32_t level, void *context, void **ret_val) { FWTS_UNUSED(level); FWTS_UNUSED(context); FWTS_UNUSED(ret_val); device = handle; return AE_CTRL_TERMINATE; } static int acpi_wpc_init(fwts_framework *fw) { ACPI_STATUS status; if (fwts_acpica_init(fw) != FWTS_OK) return FWTS_ERROR; status = AcpiGetDevices(FWTS_ACPI_DEVICE_HID, get_device_handle, NULL, NULL); if (ACPI_FAILURE(status)) { fwts_log_error(fw, "Cannot find the ACPI device"); return FWTS_ERROR; } if (!device) { fwts_log_error(fw, "ACPI %s device does not exist, skipping test", FWTS_ACPI_DEVICE); fwts_acpica_deinit(); return FWTS_SKIP; } else { ACPI_BUFFER buffer; char full_name[128]; buffer.Length = sizeof(full_name); buffer.Pointer = full_name; status = AcpiGetName(device, ACPI_FULL_PATHNAME, &buffer); if (ACPI_SUCCESS(status)) { fwts_log_info_verbatim(fw, "ACPI %s device: %s", FWTS_ACPI_DEVICE, full_name); fwts_log_nl(fw); } } return FWTS_OK; } static void method_test_WPC_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; if (obj->Integer.Value <= 0x02 || obj->Integer.Value == 0xff) fwts_method_passed_sane(fw, name, "integer"); else fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_WPCInvalidInteger", "%s returned an invalid integer 0x%8.8" PRIx64, name, (uint64_t)obj->Integer.Value); } static int method_test_WPC(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_MANDATORY, &device, "_WPC", NULL, 0, method_test_WPC_return, "_WPC"); } static int method_test_WPP(fwts_framework *fw) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, &device, "_WPP", NULL, 0, fwts_method_test_integer_return, NULL); } /* Evaluate Device Identification Objects - all are optional */ static int method_test_ADR(fwts_framework *fw) { return fwts_method_test_ADR(fw, &device); } static int method_test_CID(fwts_framework *fw) { return fwts_method_test_CID(fw, &device); } static int method_test_CLS(fwts_framework *fw) { return fwts_method_test_CLS(fw, &device); } static int method_test_DDN(fwts_framework *fw) { return fwts_method_test_DDN(fw, &device); } static int method_test_HID(fwts_framework *fw) { return fwts_method_test_HID(fw, &device); } static int method_test_HRV(fwts_framework *fw) { return fwts_method_test_HRV(fw, &device); } static int method_test_MLS(fwts_framework *fw) { return fwts_method_test_MLS(fw, &device); } static int method_test_PLD(fwts_framework *fw) { return fwts_method_test_PLD(fw, &device); } static int method_test_SUB(fwts_framework *fw) { return fwts_method_test_SUB(fw, &device); } static int method_test_SUN(fwts_framework *fw) { return fwts_method_test_SUN(fw, &device); } static int method_test_STR(fwts_framework *fw) { return fwts_method_test_STR(fw, &device); } static int method_test_UID(fwts_framework *fw) { return fwts_method_test_UID(fw, &device); } static fwts_framework_minor_test acpi_wpc_tests[] = { /* Device Specific Objects */ { method_test_WPC, "Test _WPC (Wireless Power Calibration)." }, { method_test_WPP, "Test _WPP (Wireless Power Polling)." }, /* Device Identification Objects - all are optional */ { method_test_ADR, "Test _ADR (Return Unique ID for Device)." }, { method_test_CID, "Test _CID (Compatible ID)." }, { method_test_CLS, "Test _CLS (Class Code)." }, { method_test_DDN, "Test _DDN (DOS Device Name)." }, { method_test_HID, "Test _HID (Hardware ID)." }, { method_test_HRV, "Test _HRV (Hardware Revision Number)." }, { method_test_MLS, "Test _MLS (Multiple Language String)." }, { method_test_PLD, "Test _PLD (Physical Device Location)." }, { method_test_SUB, "Test _SUB (Subsystem ID)." }, { method_test_SUN, "Test _SUN (Slot User Number)." }, { method_test_STR, "Test _STR (String)." }, { method_test_UID, "Test _UID (Unique ID)." }, { NULL, NULL } }; static int acpi_wpc_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_acpica_deinit(); return FWTS_OK; } static fwts_framework_ops acpi_wpc_ops = { .description = "Wireless power calibration device test", .init = acpi_wpc_init, .deinit = acpi_wpc_deinit, .minor_tests = acpi_wpc_tests }; FWTS_REGISTER("acpi_wpc", &acpi_wpc_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/dmar/000077500000000000000000000000001465205512700135135ustar00rootroot00000000000000src/acpi/dmar/dmar.c000066400000000000000000000214321465205512700146040ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corporation * Copyright (C) 2010-2024 Canonical * * This file was originally part of the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #define MASK_4K 0xfff /* See https://software.intel.com/content/dam/develop/external/us/en/documents-tps/vt-directed-io-spec.pdf */ /* DMA Remapping Reporting Table (DMAR) */ struct acpi_table_dmar { uint8_t head[36]; uint8_t haw; uint8_t flags; uint8_t reserved[10]; } __attribute__((packed)); #define DMAR_HEADER_SIZE sizeof(struct acpi_table_dmar) struct acpi_dmar_entry_header { uint16_t type; uint16_t length; } __attribute__((packed)); enum acpi_dmar_entry_type { ACPI_DMAR_DRHD = 0, ACPI_DMAR_RMRR, ACPI_DMAR_ASTR, ACPI_DMAR_ENTRY_COUNT }; struct acpi_table_drhd { struct acpi_dmar_entry_header header; uint8_t flags; /* BIT0: INCLUDE_ALL */ uint8_t reserved; uint16_t segment; uint64_t address; /* register base address for this drhd */ } __attribute__ ((packed)); struct acpi_table_rmrr { struct acpi_dmar_entry_header header; uint16_t reserved; uint16_t segment; uint64_t base_address; uint64_t end_address; } __attribute__ ((packed)); enum acpi_dev_scope_type { ACPI_DEV_ENDPOINT = 0x01, ACPI_DEV_P2PBRIDGE, ACPI_DEV_IOAPIC, ACPI_DEV_HPET, ACPI_DEV_ENTRY_COUNT }; struct acpi_dev_scope { uint8_t dev_type; uint8_t length; uint16_t reserved; uint8_t enumeration_id; uint8_t start_bus; } __attribute__((packed)); struct acpi_pci_path { uint8_t dev; uint8_t fn; } __attribute__((packed)); #define MIN_SCOPE_LEN (sizeof(struct acpi_pci_path) + \ sizeof(struct acpi_dev_scope)) /* * = -1, no such device * = 0, normal pci device * = 1, pci bridge, sec_bus gets set */ static int read_pci_device_secondary_bus_number(const uint8_t seg, const uint8_t bus, const uint8_t dev, const uint8_t fn, uint8_t *sec_bus) { FILE *file; char path[PATH_MAX]; char configs[64]; size_t count; snprintf(path, sizeof(path), "/sys/bus/pci/devices/%04x:%02x:%02x.%" PRIu8 "/config", seg, bus, dev, fn); if ((file = fopen(path, "r")) == NULL) return -1; count = fread(configs, sizeof(char), 64, file); (void)fclose(file); if (count < 64) return -1; /* header type is at 0x0e */ if ((configs[0xe] & 0x7f) != 1) /* not a pci bridge */ return 0; *sec_bus = configs[0x19]; /* secondary bus number */ return 1; } static int acpi_parse_one_dev_scope(fwts_framework *fw, struct acpi_dev_scope *scope, const uint16_t seg) { struct acpi_pci_path *path; int count; uint8_t bus; uint8_t sec_bus = 0; int dev_type; if (scope->length < MIN_SCOPE_LEN) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidDevScope", "Invalid device scope entry."); return FWTS_ERROR; } if (scope->dev_type >= ACPI_DEV_ENTRY_COUNT) { fwts_warning(fw, "Unknown device scope type."); return FWTS_ERROR; } if (scope->dev_type > ACPI_DEV_P2PBRIDGE) { fwts_log_info(fw, "Unknown device scope type, " "the test case should be fixed."); return FWTS_ERROR; } bus = scope->start_bus; count = (scope->length - sizeof(struct acpi_dev_scope)) /sizeof(struct acpi_pci_path); path = (struct acpi_pci_path *)(scope + 1); if (!count) goto error; dev_type = 1; while (count) { if (dev_type <= 0) /* last device isn't a pci bridge */ goto error; dev_type = read_pci_device_secondary_bus_number(seg, bus, path->dev, path->fn, &sec_bus); if (dev_type < 0) { /* no such device */ fwts_warning(fw, "PCI device %04Xh:%02Xh:%02Xh.%02Xh is not found.", seg, bus, path->dev, path->fn); goto error; } path++; count--; bus = sec_bus; } if ((scope->dev_type == ACPI_DEV_ENDPOINT && dev_type > 0) || (scope->dev_type == ACPI_DEV_P2PBRIDGE && dev_type == 0)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DevScopeTypeNoMatch", "Device scope type not match."); return FWTS_ERROR; } return FWTS_OK; error: fwts_failed(fw, LOG_LEVEL_MEDIUM, "DevScopeDevNotFound", "Device scope device not found."); return FWTS_ERROR; } static int acpi_parse_dev_scope(fwts_framework *fw, uint8_t *start, const uint8_t *end, const uint16_t seg) { while (start < end) { struct acpi_dev_scope *scope = (struct acpi_dev_scope *)start; int ret = acpi_parse_one_dev_scope(fw, scope, seg); if (ret) return ret; start += scope->length; } return FWTS_OK; } static int acpi_parse_one_drhd(fwts_framework *fw, struct acpi_dmar_entry_header *header) { struct acpi_table_drhd *drhd = (struct acpi_table_drhd*)header; if (drhd->address & MASK_4K) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidDRHDRegAddr", "Invalid drhd register address."); return FWTS_ERROR; } if (drhd->flags & 1) { static int include_all; if (include_all == 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "MultipleDRHDSFlag", "Multiple drhds have include_all flag set."); return FWTS_ERROR; } include_all = 1; } else { return acpi_parse_dev_scope(fw, (uint8_t *)(drhd + 1), ((uint8_t *)drhd) + header->length, drhd->segment); } return FWTS_OK; } static int acpi_parse_one_rmrr(fwts_framework *fw, struct acpi_dmar_entry_header *header) { struct acpi_table_rmrr *rmrr = (struct acpi_table_rmrr *)header; if ((rmrr->base_address & MASK_4K) || (rmrr->end_address < rmrr->base_address) || ((rmrr->end_address - rmrr->base_address + 1) & MASK_4K)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidRMRRRangeAddr", "Invalid rmrr range address."); return FWTS_ERROR; } return acpi_parse_dev_scope(fw, (uint8_t *)(rmrr + 1), ((uint8_t *)rmrr) + header->length, rmrr->segment); } static int dmar_acpi_table_check(fwts_framework *fw) { uint8_t *table_ptr; struct acpi_dmar_entry_header *header; fwts_acpi_table_info *table; int failed = 0; if (fwts_acpi_find_table(fw, "DMAR", 0, &table) != FWTS_OK) { fwts_log_error(fw, "Cannot load ACPI table."); return FWTS_ERROR; } if (table == NULL) { fwts_skipped(fw, "No DMAR table. This is not necessarily a " "failure as most systems do not have this table."); return FWTS_SKIP; } table_ptr = (uint8_t*)table->data; if (table->length <= DMAR_HEADER_SIZE) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidDMAR", "Invalid DMAR ACPI table."); return FWTS_ERROR; } header = (struct acpi_dmar_entry_header *)(table_ptr+DMAR_HEADER_SIZE); while ((unsigned long)header < (unsigned long)(table_ptr + table->length)) { if ((header->type == ACPI_DMAR_DRHD) && (acpi_parse_one_drhd(fw, header) != FWTS_OK)) { failed++; break; } if ((header->type == ACPI_DMAR_RMRR) && (acpi_parse_one_rmrr(fw, header) != FWTS_OK)) { failed++; break; } header = (struct acpi_dmar_entry_header *) (((char *)header) + header->length); } if (!failed) fwts_passed(fw, "DMAR ACPI table has passed test."); return FWTS_OK; } static void acpiinfo_check(fwts_framework *fw, char *line, int repeated, char *prevline, void *private, int *errors) { FWTS_UNUSED(repeated); FWTS_UNUSED(prevline); FWTS_UNUSED(private); FWTS_UNUSED(errors); if (strstr(line, "DMAR:[fault reason")) fwts_failed(fw, LOG_LEVEL_MEDIUM, "DMARError", "Found DMAR error: %s", line); } static int dmar_test1(fwts_framework *fw) { if (dmar_acpi_table_check(fw) == FWTS_OK) { fwts_list *klog; int errors = 0; if ((klog = fwts_klog_read()) == NULL) { fwts_log_error(fw, "Cannot read kernel log."); return FWTS_ERROR; } if (fwts_klog_scan(fw, klog, acpiinfo_check, NULL, NULL, &errors)) { fwts_log_error(fw, "Failed to scan kernel log."); fwts_klog_free(klog); return FWTS_ERROR; } if (errors == 0) fwts_passed(fw, "Found no DMAR errors in kernel log."); fwts_klog_free(klog); } return FWTS_OK; } static fwts_framework_minor_test dmar_tests[] = { { dmar_test1, "DMA Remapping test." }, { NULL, NULL } }; static fwts_framework_ops dmar_ops = { .description = "DMA Remapping (VT-d) test.", .minor_tests = dmar_tests }; FWTS_REGISTER("dmar", &dmar_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI | FWTS_FLAG_ROOT_PRIV) #endif src/acpi/dppt/000077500000000000000000000000001465205512700135375ustar00rootroot00000000000000src/acpi/dppt/dppt.c000066400000000000000000000031711465205512700146540ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(DPPT, &table) static int dppt_test1(fwts_framework *fw) { fwts_acpi_table_dppt *dppt = (fwts_acpi_table_dppt *) table->data; bool passed = true; FWTS_UNUSED(dppt); fwts_log_info_verbatim(fw, "DPPT DMA Protection Policy Table test:"); if (passed) fwts_passed(fw, "No issues found in DPPT table."); return FWTS_OK; } static fwts_framework_minor_test dppt_tests[] = { { dppt_test1, "Validate DPPT table." }, { NULL, NULL } }; static fwts_framework_ops dppt_ops = { .description = "DPPT DMA Protection Policy Table test", .init = DPPT_init, .minor_tests = dppt_tests }; FWTS_REGISTER("dppt", &dppt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/drtm/000077500000000000000000000000001465205512700135365ustar00rootroot00000000000000src/acpi/drtm/drtm.c000066400000000000000000000122271465205512700146540ustar00rootroot00000000000000/* * Copyright (C) 2016-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(DRTM, &table) /* * DRTM D-RTM Resources Table */ static int drtm_test1(fwts_framework *fw) { fwts_acpi_table_drtm *drtm = (fwts_acpi_table_drtm*) table->data; fwts_acpi_table_drtm_vtl *drtm_vtl; fwts_acpi_table_drtm_rtl *drtm_rtl; fwts_acpi_table_drtm_dps *drtm_dps; bool passed = true; uint32_t offset; uint32_t i; fwts_log_info_verbatim(fw, "DRTM D-RTM Resources Table:"); fwts_log_info_simp_int(fw, " DL_Entry_Base: ", drtm->entry_base_address); fwts_log_info_simp_int(fw, " DL_Entry_Length: ", drtm->entry_length); fwts_log_info_simp_int(fw, " DL_Entry32: ", drtm->entry_address32); fwts_log_info_simp_int(fw, " DL_Entry64: ", drtm->entry_address64); fwts_log_info_simp_int(fw, " DLME_Exit: ", drtm->exit_address); fwts_log_info_simp_int(fw, " Log_Area_Start: ", drtm->log_area_address); fwts_log_info_simp_int(fw, " Log_Area_Length: ", drtm->log_area_length); fwts_log_info_simp_int(fw, " Architecture_Dependent: ", drtm->arch_dependent_address); fwts_log_info_simp_int(fw, " DRT_Flags: ", drtm->flags); fwts_acpi_reserved_bits("DRTM", "DRT_Flags", drtm->flags, 4, 31, &passed); fwts_log_nl(fw); offset = sizeof(fwts_acpi_table_drtm); drtm_vtl = (fwts_acpi_table_drtm_vtl *) (table->data + offset); fwts_log_info_simp_int(fw, " VTL_Length: ", drtm_vtl->validated_table_count); offset += sizeof(drtm_vtl->validated_table_count); if (drtm->header.length < offset + sizeof(uint64_t) * drtm_vtl->validated_table_count) { fwts_failed(fw, LOG_LEVEL_HIGH, "DRTMOutOfBound", "DRTM's length is too small to contain all fields"); goto error; } for (i = 0; i < drtm_vtl->validated_table_count; i++) { fwts_log_info_simp_int(fw, " Validated_Tables: ", drtm_vtl->validated_tables[i]); offset += sizeof(drtm_vtl->validated_tables[i]); } fwts_log_nl(fw); drtm_rtl = (fwts_acpi_table_drtm_rtl *) (table->data + offset); fwts_log_info_simp_int(fw, " RL_Length: ", drtm_rtl->resource_count); offset += sizeof(drtm_rtl->resource_count); if (drtm->header.length < offset + sizeof(fwts_acpi_drtm_resource) * drtm_rtl->resource_count) { fwts_failed(fw, LOG_LEVEL_HIGH, "DRTMOutOfBound", "DRTM's length is too small to contain all fields"); goto error; } for (i = 0; i < drtm_rtl->resource_count; i++) { fwts_acpi_drtm_resource *resource = (fwts_acpi_drtm_resource *) (table->data + offset); uint64_t size; size = resource->size[0] + ((uint64_t) resource->size[1] << 8) + ((uint64_t) resource->size[2] << 16) + ((uint64_t) resource->size[3] << 24) + ((uint64_t) resource->size[4] << 32) + ((uint64_t) resource->size[5] << 40) + ((uint64_t) resource->size[6] << 48); fwts_log_info_simp_int(fw, " Resource Size: ", size); fwts_log_info_simp_int(fw, " Resource Type: ", resource->type); fwts_log_info_simp_int(fw, " Resource Address: ", resource->address); if (resource->type & 0x7C) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "DRTMBadResourceType", "DRTM Resource Type Bits [6:2] are reserved, got 0x%2.2" PRIx8 " instead", resource->type); } offset += sizeof(fwts_acpi_drtm_resource); fwts_log_nl(fw); } drtm_dps = (fwts_acpi_table_drtm_dps *) (table->data + offset); fwts_log_info_simp_int(fw, " DPS_Length: ", drtm_dps->dps_id_length); if (drtm->header.length < offset + sizeof(fwts_acpi_table_drtm_dps)) { fwts_failed(fw, LOG_LEVEL_HIGH, "DRTMOutOfBound", "DRTM's length is too small to contain all fields"); goto error; } for (i = 0; i < sizeof(drtm_dps->dps_id); i++) { fwts_log_info_simp_int(fw, " DLME Platform Id: ", drtm_dps->dps_id[i]); } fwts_log_nl(fw); if (passed) fwts_passed(fw, "No issues found in DRTM table."); error: return FWTS_OK; } static fwts_framework_minor_test drtm_tests[] = { { drtm_test1, "DRTM D-RTM Resources Table test." }, { NULL, NULL } }; static fwts_framework_ops drtm_ops = { .description = "DRTM D-RTM Resources Table test.", .init = DRTM_init, .minor_tests = drtm_tests }; FWTS_REGISTER("drtm", &drtm_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/dsddump/000077500000000000000000000000001465205512700142305ustar00rootroot00000000000000src/acpi/dsddump/dsddump.c000066400000000000000000000124061465205512700160370ustar00rootroot00000000000000/* * Copyright (C) 2020-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include "fwts_acpi_object_eval.h" #define DEVICE_PROPERITY_UUID "DAFFD814-6EBA-4D8C-8A91-BC9BBF4AA301" #define HIERARCHICAL_DATA_EXTENSION "DBB8E3E6-5886-4BA6-8795-1319F52A966B" /* * dsddump_init() * initialize ACPI */ static int dsddump_init(fwts_framework *fw) { if (fwts_acpi_init(fw) != FWTS_OK) { fwts_log_error(fw, "Cannot initialise ACPI."); return FWTS_ERROR; } return FWTS_OK; } /* * dsddump_deinit * de-intialize ACPI */ static int dsddump_deinit(fwts_framework *fw) { return fwts_acpi_deinit(fw); } static void print_package_element(fwts_framework *fw, ACPI_OBJECT *obj) { char full_name[128]; ACPI_STATUS status; ACPI_BUFFER buffer; buffer.Length = sizeof(full_name); buffer.Pointer = full_name; switch (obj->Type) { case ACPI_TYPE_INTEGER: fwts_log_info_verbatim(fw, " Value: 0x%8.8" PRIx64, obj->Integer.Value); break; case ACPI_TYPE_STRING: fwts_log_info_verbatim(fw, " Value: %s", obj->String.Pointer); break; case ACPI_TYPE_LOCAL_REFERENCE: status = AcpiGetName(obj->Reference.Handle, ACPI_FULL_PATHNAME, &buffer); if (ACPI_SUCCESS(status)) fwts_log_info_verbatim(fw, " Value: %s", full_name); break; default: fwts_log_info_verbatim(fw, " Value: %s", "Unknown"); break; } } static void parse_device_properity(fwts_framework *fw, ACPI_OBJECT *pkg) { uint32_t i; fwts_log_info_verbatim(fw, " Package:"); for (i = 0; i < pkg->Package.Count; i++) { ACPI_OBJECT *element = &pkg->Package.Elements[i]; fwts_log_info_verbatim(fw, " Key: %s", element->Package.Elements[0].String.Pointer); if (element->Package.Elements[1].Type == ACPI_TYPE_PACKAGE) { ACPI_OBJECT *sub_pkg = &element->Package.Elements[1]; uint32_t j; for (j = 0; j < sub_pkg->Package.Count; j++) print_package_element(fw, &sub_pkg->Package.Elements[j]); } else print_package_element(fw, &element->Package.Elements[1]); } } static void parse_hierarchical_data_ext(fwts_framework *fw, ACPI_OBJECT *pkg) { uint32_t i; fwts_log_info_verbatim(fw, " Package:"); for (i = 0; i < pkg->Package.Count; i++) { ACPI_OBJECT *element = &pkg->Package.Elements[i]; fwts_log_info_verbatim(fw, " Key: %s", element->Package.Elements[0].String.Pointer); print_package_element(fw, &element->Package.Elements[1]); } } static void dsddump_package( fwts_framework *fw, ACPI_OBJECT *uuid, ACPI_OBJECT *pkg) { char guid[37]; fwts_guid_buf_to_str(uuid->Buffer.Pointer, guid, sizeof(guid)); if (!strncmp(guid, DEVICE_PROPERITY_UUID, sizeof(guid))) { fwts_log_info_verbatim(fw, " Device Properties UUID: %s", guid); parse_device_properity(fw, pkg); } else if (!strncmp(guid, HIERARCHICAL_DATA_EXTENSION, sizeof(guid))) { fwts_log_info_verbatim(fw, " Hierarchical Data Extension UUID: %s", guid); parse_hierarchical_data_ext(fw, pkg); } } static int dsddump_test1(fwts_framework *fw) { const size_t name_len = 4; fwts_list_link *item; fwts_list *objects; bool found = false; if ((objects = fwts_acpi_object_get_names()) == NULL) { fwts_log_info(fw, "Cannot find any ACPI objects"); return FWTS_ERROR; } fwts_list_foreach(item, objects) { char *name = fwts_list_data(char *, item); const size_t len = strlen(name); if (!strncmp("_DSD", name + len - name_len, name_len)) { ACPI_OBJECT_LIST arg_list; ACPI_OBJECT *obj; ACPI_BUFFER buf; int ret; arg_list.Count = 0; arg_list.Pointer = NULL; ret = fwts_acpi_object_evaluate(fw, name, &arg_list, &buf); if ((ACPI_FAILURE(ret) != AE_OK) || (buf.Pointer == NULL)) continue; /* Do we have a valid buffer in the package to dump? */ obj = buf.Pointer; if ((obj->Type == ACPI_TYPE_PACKAGE) && (obj->Package.Count) && (obj->Package.Elements[0].Type == ACPI_TYPE_BUFFER) && (obj->Package.Elements[0].Buffer.Pointer != NULL) && (obj->Package.Elements[0].Buffer.Length == 16)) { uint32_t i; fwts_log_info_verbatim(fw, "Name: %s", name); for (i = 0; i < obj->Package.Count; i += 2) dsddump_package(fw, &obj->Package.Elements[i], &obj->Package.Elements[i+1]); fwts_log_nl(fw); found = true; } free(buf.Pointer); } } if (!found) fwts_log_info_verbatim(fw, "No _DSD objects found."); return FWTS_OK; } static fwts_framework_minor_test dsddump_tests[] = { { dsddump_test1, "Dump ACPI _DSD (Device Specific Data)." }, { NULL, NULL } }; static fwts_framework_ops dsddump_ops = { .description = "Dump ACPI _DSD (Device Specific Data).", .init = dsddump_init, .deinit = dsddump_deinit, .minor_tests = dsddump_tests }; FWTS_REGISTER("dsddump", &dsddump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS) #endif src/acpi/ecdt/000077500000000000000000000000001465205512700135075ustar00rootroot00000000000000src/acpi/ecdt/ecdt.c000066400000000000000000000150431465205512700145750ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include "fwts_acpi_object_eval.h" static fwts_acpi_table_info *table; acpi_table_init(ECDT, &table) /* * See ACPI 6.0, Section 5.2.15 */ static int ecdt_test1(fwts_framework *fw) { const fwts_acpi_table_ecdt *ecdt = (const fwts_acpi_table_ecdt *)table->data; bool passed = true, found_null = false; uint32_t min_length; int i; /* Must be I/O Address Space or a Memory Space */ fwts_acpi_space_id(fw, "ECDT", "EC_CONTROL", &passed, ecdt->ec_control.address_space_id, 2, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_MEMORY, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_IO); /* Must be correct Access Size */ if (ecdt->ec_control.access_width > 4) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ECDTECControlAccessSize", "ECDT EC_CONTROL Access Size is 0x%2.2" PRIx8 "which is not valid", ecdt->ec_control.access_width); passed = false; } /* Must be I/O Address Space or a Memory Space */ fwts_acpi_space_id(fw, "ECDT", "EC_DATA", &passed, ecdt->ec_control.address_space_id, 2, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_MEMORY, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_IO); /* Must be correct Access Size */ if (ecdt->ec_data.access_width > 4) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ECDTECDataAccessSize", "ECDT EC_DATA Access Size is 0x%2.2" PRIx8 "which is not valid", ecdt->ec_data.access_width); passed = false; } /* EC_ID must be at least 1 byte long for the null terminator */ min_length = (const void *)&ecdt->ec_id[0] - (const void *)ecdt; if (ecdt->header.length < min_length + 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ECDTBadLength", "ECDT is too short to have a valid EC_ID string that is " "at least one byte long, length is only %" PRIu32 " bytes and expecting at least %" PRIu32 "bytes", ecdt->header.length, min_length); passed = false; goto done; } /* Now find if EC_ID has a terminating null char */ for (i = 0; min_length < ecdt->header.length; i++, min_length++) { if (ecdt->ec_id[i] == '\0') { found_null = true; break; } } if (!found_null) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ECDTBadECIDString", "ECDT EC_ID string is not null terminated"); passed = false; goto done; } /* Now we have got some sane data, dump the ECDT */ fwts_log_info_verbatim(fw, "ECDT Embedded Controller Boot Resources Table:"); fwts_log_info_verbatim(fw, " EC_CONTROL:"); fwts_log_info_simp_int(fw, " Address Space ID: ", ecdt->ec_control.address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", ecdt->ec_control.register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", ecdt->ec_control.register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", ecdt->ec_control.access_width); fwts_log_info_simp_int(fw, " Address ", ecdt->ec_control.address); fwts_log_info_verbatim(fw, " EC_DATA:"); fwts_log_info_simp_int(fw, " Address Space ID: ", ecdt->ec_data.address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", ecdt->ec_data.register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", ecdt->ec_data.register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", ecdt->ec_data.access_width); fwts_log_info_simp_int(fw, " Address ", ecdt->ec_data.address); fwts_log_info_simp_int(fw, " UID: ", ecdt->uid); fwts_log_info_simp_int(fw, " GPE_BIT: ", ecdt->gpe_bit); fwts_log_info_verbatim(fw, " EC_ID: '%s'", (const char *)ecdt->ec_id); fwts_log_nl(fw); if (fwts_acpi_init(fw) != FWTS_OK) { fwts_log_error(fw, "Cannot initialise ACPI, skipping UID evaluation check"); goto done; } else { /* * Now evaluate the EC_ID UID object and compare it to the * UID in the ECDT. They should be the same. */ ACPI_OBJECT_LIST arg_list; ACPI_BUFFER buf; ACPI_OBJECT *obj; int ret; size_t len = strlen((const char *)ecdt->ec_id) + 6; char name[len]; snprintf(name, len, "%s._UID", (const char *)ecdt->ec_id); arg_list.Count = 0; arg_list.Pointer = NULL; ret = fwts_acpi_object_evaluate(fw, name, &arg_list, &buf); if ((ACPI_FAILURE(ret) != AE_OK) || (buf.Pointer == NULL)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ECDTEvalUidFailed", "Failed to evaluate ECDT UID %s, cannot check UID", name); free(buf.Pointer); goto deinit; } /* Do we have a valid buffer to dump? */ obj = buf.Pointer; if (obj->Type != ACPI_TYPE_INTEGER) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ECDTEvalUidInvalidType", "Evaluating ECDT UID %s returned non-integer object type", name); free(buf.Pointer); goto deinit; } if (obj->Integer.Value != ecdt->uid) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ECDTEvalUidInvalidValue", "Evaluating ECDT UID %s returned 0x%" PRIx32 " which is different from the ECDT UID value 0x%" PRIx32, name, (uint32_t)obj->Integer.Value, ecdt->uid); } else { fwts_passed(fw, "Found and evaluated %s, returns expected value 0x%" PRIx32, name, (uint32_t)obj->Integer.Value); } free(buf.Pointer); } deinit: (void)fwts_acpi_deinit(fw); done: if (passed) fwts_passed(fw, "No issues found in ECDT table."); return FWTS_OK; } static fwts_framework_minor_test ecdt_tests[] = { { ecdt_test1, "ECDT Embedded Controller Boot Resources Table test." }, { NULL, NULL } }; static fwts_framework_ops ecdt_ops = { .description = "ECDT Embedded Controller Boot Resources Table test.", .init = ECDT_init, .minor_tests = ecdt_tests }; FWTS_REGISTER("ecdt", &ecdt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/einj/000077500000000000000000000000001465205512700135155ustar00rootroot00000000000000src/acpi/einj/einj.c000066400000000000000000000110621465205512700146060ustar00rootroot00000000000000/* * Copyright (C) 2016-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(EINJ, &table) /* * EINJ Error Injection Table */ static int einj_test1(fwts_framework *fw) { fwts_acpi_table_einj *einj = (fwts_acpi_table_einj *) table->data; fwts_acpi_serialization_instruction_entries *entry; uint32_t reserved, i; bool passed = true; reserved = einj->reserved[0] + ((uint32_t) einj->reserved[1] << 8) + ((uint32_t) einj->reserved[2] << 16); fwts_log_info_verbatim(fw, "EINJ Error Injection Table:"); fwts_log_info_simp_int(fw, " Injection Header Size: ", einj->header_size); fwts_log_info_simp_int(fw, " Injection Flags: ", einj->flags); fwts_log_info_simp_int(fw, " Reserved: ", reserved); fwts_log_info_simp_int(fw, " Injection Entry Count: ", einj->count); fwts_acpi_reserved_bits("EINJ", "Injection Flags", einj->flags, 0, 31, &passed); fwts_acpi_reserved_zero("EINJ", "Reserved", reserved, &passed); fwts_log_nl(fw); entry = (fwts_acpi_serialization_instruction_entries *) (char *)(einj + 48); for (i = 0; i < einj->count; i++, entry++) { fwts_acpi_gas gas = entry->register_region; fwts_log_info_verbatim(fw, " Injection Instruction Entry %2.2" PRId8, i); fwts_log_info_verbatim(fw, " Injection Action : 0x%2.2" PRIx8, entry->serialization_action); fwts_log_info_verbatim(fw, " Instruction : 0x%2.2" PRIx8, entry->instruction); fwts_log_info_verbatim(fw, " Flags : 0x%2.2" PRIx8, entry->flags); fwts_log_info_verbatim(fw, " Reserved : 0x%2.2" PRIx8, entry->reserved); fwts_log_info_verbatim(fw, " Address Space ID : 0x%2.2" PRIx8, gas.address_space_id); fwts_log_info_verbatim(fw, " Register Bit Width : 0x%2.2" PRIx8, gas.register_bit_width); fwts_log_info_verbatim(fw, " Register Bit Offset : 0x%2.2" PRIx8, gas.register_bit_offset); fwts_log_info_verbatim(fw, " Access Size : 0x%2.2" PRIx8, gas.access_width); fwts_log_info_verbatim(fw, " Address : 0x%16.16" PRIx64, gas.address); fwts_log_info_verbatim(fw, " Value : 0x%16.16" PRIx64, entry->value); fwts_log_info_verbatim(fw, " Mask : 0x%16.16" PRIx64, entry->mask); if (einj->header.revision >= 2) { if (entry->serialization_action > 0x11 && entry->serialization_action != 0xFF) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "EINJBadInjectionAction", "EINJ Injection Action must be within 0~9 " "or 0xFF got 0x%" PRIx8 " instead", entry->serialization_action); passed = false; } } else { if (entry->serialization_action > 0x9 && entry->serialization_action != 0xFF) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "EINJBadInjectionAction", "EINJ Injection Action must be within 0~9 " "or 0xFF got 0x%" PRIx8 " instead", entry->serialization_action); passed = false; } } if (entry->instruction > 0x4) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "EINJBadInstruction", "EINJ Instruction must be within 0~4, got " "0x%" PRIx8 " instead", entry->instruction); passed = false; } fwts_acpi_reserved_zero("EINJ", "Reserved", entry->reserved, &passed); fwts_acpi_space_id(fw, "EINJ", "Register Region", &passed, gas.address_space_id, 2, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_MEMORY, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_IO); fwts_log_nl(fw); } if (passed) fwts_passed(fw, "No issues found in EINJ table."); return FWTS_OK; } static fwts_framework_minor_test einj_tests[] = { { einj_test1, "EINJ Error Injection Table test." }, { NULL, NULL } }; static fwts_framework_ops einj_ops = { .description = "EINJ Error Injection Table test.", .init = EINJ_init, .minor_tests = einj_tests }; FWTS_REGISTER("einj", &einj_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/erst/000077500000000000000000000000001465205512700135455ustar00rootroot00000000000000src/acpi/erst/erst.c000066400000000000000000000137731465205512700147010ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(ERST, &table) /* * ERST Extended System Description Table */ static int erst_test1(fwts_framework *fw) { fwts_acpi_table_erst *erst = (fwts_acpi_table_erst*)table->data; bool passed = true; uint64_t total_length; uint32_t i; fwts_log_info_verbatim(fw, "ERST Error Record Serialization Table :"); fwts_log_info_simp_int(fw, " Serialization Hdr. Size: ", erst->serialization_header_size); fwts_log_info_simp_int(fw, " Reserved: ", erst->reserved); fwts_log_info_simp_int(fw, " Instruction Entry Count: ", erst->instruction_entry_count); fwts_acpi_reserved_zero("ERST", "Reserved", erst->reserved, &passed); if (erst->serialization_header_size > table->length) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ERSTHeaderSizeTooLong", "ERST Serialization Header size %" PRIu32 " is greater " "than the entire table length of %zu", erst->serialization_header_size, table->length); goto done; } total_length = ((uint64_t)sizeof(fwts_acpi_serialization_instruction_entries) * erst->instruction_entry_count) + sizeof(fwts_acpi_table_erst); if (total_length > table->length) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ERSTTooManyEntries", "ERST size of %" PRIu64 " based on %" PRIu32 " Serialization Instruction Entries of %zu " "bytes is longer the entire table length of %zu", total_length, erst->instruction_entry_count, sizeof(fwts_acpi_serialization_instruction_entries), table->length); goto done; } if (passed) fwts_log_info(fw, "ERST header looks sane."); for (i = 0; i < erst->instruction_entry_count; i++) { fwts_acpi_serialization_instruction_entries *entry = &erst->entries[i]; bool entry_passed = true; #if defined(ERST_DEBUG_ENTRY) /* Disable this for now, it causes the test to be too verbose */ fwts_log_info_verbatim(fw, "ERST Serialization Instruction Entry %" PRIu32 ":", i); fwts_log_info_simp_int(fw, " Serialization Action: ", entry->serialization_action); fwts_log_info_simp_int(fw, " Instruction: ", entry->instruction); fwts_log_info_simp_int(fw, " Flags: ", entry->flags); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_log_info_simp_int(fw, " Value: ", entry->value); fwts_log_info_simp_int(fw, " Mask: ", entry->mask); fwts_log_info_simp_int(fw, " Address Space ID: ", entry->register_region.address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", entry->register_region.register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", entry->register_region.register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", entry->register_region.access_width); fwts_log_info_simp_int(fw, " Address ", entry->register_region.address); #endif switch (entry->serialization_action) { case 0x00 ... 0x10: /* Allow for reserved too */ break; default: entry_passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ERSTIInvalidAction", "ERST Serialization Action 0x%" PRIx8 " is an invalid value, values allowed are " "0x00..0x10", entry->serialization_action); break; } switch (entry->instruction) { case 0x00 ... 0x01: case 0x04 ... 0x12: break; case 0x02 ... 0x03: /* * "For WRITE_REGISTER and WRITE_REGISTER_VALUE instructions, * this flag indicates that bits within the register that * are not being written must be preserved rather than destroyed. * For READ_REGISTER instructions, this flag is ignored." */ if (entry->flags > 1) { entry_passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ERSTIInvalidFlag", "ERST Serialization Flag 0x%" PRIx8 " is an invalid value, values allowed are " "0x00..0x01 for the WRITE_REGISTER and " "WRITE_REGISTER_VALUE instructions", entry->flags); } break; default: entry_passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ERSTIInvalidInstruction", "ERST Serialization Instruction 0x%" PRIx8 " is an invalid value, values allowed are " "0x00..0x12", entry->instruction); break; } /* 0 = Undefined, 1 = byte ... 4 = QWord */ if (entry->register_region.access_width > 4) { entry_passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "ERSTIInvalidGasAccessSize", "ERST Serialization Generic Address Access Size 0x%" PRIx8 " is invalid, should be 0x00 .. 0x04", entry->register_region.access_width); } if (entry_passed) fwts_log_info(fw, "ERST Serialization Entry 0x%" PRIx32 " looks sane.", i); passed &= entry_passed; } done: if (passed) fwts_passed(fw, "No issues found in ERST table."); return FWTS_OK; } static fwts_framework_minor_test erst_tests[] = { { erst_test1, "ERST Error Record Serialization Table test." }, { NULL, NULL } }; static fwts_framework_ops erst_ops = { .description = "ERST Error Record Serialization Table test.", .init = ERST_init, .minor_tests = erst_tests }; FWTS_REGISTER("erst", &erst_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/facs/000077500000000000000000000000001465205512700135045ustar00rootroot00000000000000src/acpi/facs/facs.c000066400000000000000000000114001465205512700145600ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(FACS, &table) /* * FACS Firmware ACPI Control Structure test */ static int facs_test1(fwts_framework *fw) { fwts_acpi_table_facs *facs = (fwts_acpi_table_facs*)table->data; bool passed = true; uint32_t reserved; int i; if (table->length < 64) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "FACSInvalidLength", "FACS: Length field is %" PRIu32 " and should be at least 64", facs->length); goto done; } reserved = facs->reserved[0] + ((uint32_t) facs->reserved[1] << 8) + ((uint32_t) facs->reserved[2] << 16); fwts_log_info_verbatim(fw, "FACS Firmware ACPI Control Structure:"); fwts_log_info_verbatim(fw, " Signature: '%4.4s'", facs->signature); fwts_log_info_simp_int(fw, " Length: ", facs->length); fwts_log_info_simp_int(fw, " Hardware Signature: ", facs->hardware_signature); fwts_log_info_simp_int(fw, " Firmware Waking Vector: ", facs->firmware_waking_vector); fwts_log_info_simp_int(fw, " Global Lock: ", facs->global_lock); fwts_log_info_simp_int(fw, " Flags: ", facs->flags); fwts_log_info_simp_int(fw, " X-Firmware Waking Vector: ", facs->x_firmware_waking_vector); fwts_log_info_simp_int(fw, " Version: ", facs->version); fwts_log_info_simp_int(fw, " Reserved: ", reserved); fwts_log_info_simp_int(fw, " OSPM Flags: ", facs->ospm_flags); for (i = 0; i < 24; i+= 4) { fwts_log_info_verbatim(fw, " Reserved: " "0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8, facs->reserved2[i + 0], facs->reserved2[i + 1], facs->reserved2[i + 2], facs->reserved2[i + 3]); } /* * If we've loaded the table from memory we can do some extra checks */ if (table->provenance == FWTS_ACPI_TABLE_FROM_FIRMWARE) { fwts_list *memory_map; if (table->addr & 0x3f) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "FACSInvalidAlignment", "FACS: The FACS address is 0x%" PRIx64 " which is not aligned on a 64 byte boundary", table->addr); } memory_map = fwts_memory_map_table_load(fw); if (fwts_memory_map_is_reserved(memory_map, table->addr) == FWTS_FALSE) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "FACSNotReserved", "FACS: The FACS does not seem to be in a reserved " "memory region, check that the BIOS memory map is " "correctly reserving the address space 0x%" PRIx64 "-0x%" PRIx64, table->addr, table->addr + table->length); } fwts_memory_map_table_free(memory_map); } /* * Check for incorrectly set facs length field, we know that * the table that has been loaded is large enough because of * the first check. We don't need to bail if the following * test fails. */ if (facs->length < 64) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "FACSInvalidLength", "FACS: Length field is %" PRIu32 " and should be at least 64", facs->length); } fwts_acpi_reserved_zero("FACS", "Reserved", reserved, &passed); fwts_acpi_reserved_bits("FACS", "Flags", facs->flags, 2, 31, &passed); fwts_acpi_reserved_bits("FACS", "OSPM Flags", facs->ospm_flags, 1, 31, &passed); for (i = 0; i < 24; i++) { if (facs->reserved2[i]) { passed = false; fwts_failed(fw, LOG_LEVEL_LOW, "FACSInvalidReserved1", "FACS: 2nd Reserved field is non-zero"); break; } } done: if (passed) fwts_passed(fw, "No issues found in FACS table."); return FWTS_OK; } static fwts_framework_minor_test facs_tests[] = { { facs_test1, "FACS Firmware ACPI Control Structure test." }, { NULL, NULL } }; static fwts_framework_ops facs_ops = { .description = "FACS Firmware ACPI Control Structure test.", .init = FACS_init, .minor_tests = facs_tests }; FWTS_REGISTER("facs", &facs_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/fadt/000077500000000000000000000000001465205512700135065ustar00rootroot00000000000000src/acpi/fadt/fadt.c000066400000000000000000001661761465205512700146110ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * Portions of this code original from the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #ifdef FWTS_ARCH_INTEL #include #else static inline int ioperm(int a, ...) { return a * 0; } #endif #include #include #include #define FADT_RESET_SUPPORTED (1 << 10) static const fwts_acpi_table_fadt *fadt; static int fadt_size; static const fwts_acpi_table_facs *facs; static int fadt_init(fwts_framework *fw) { fwts_acpi_table_info *table; if (fwts_acpi_find_table(fw, "FACP", 0, &table) != FWTS_OK) { fwts_log_error(fw, "Cannot read ACPI table FACP."); return FWTS_ERROR; } if (table == NULL) { fwts_log_error(fw, "ACPI table FACP does not exist!"); return FWTS_ERROR; } fadt = (const fwts_acpi_table_fadt *)table->data; fadt_size = table->length; /* Not having a FADT is not a failure on x86 */ if (fadt_size == 0) { if (fw->target_arch == FWTS_ARCH_X86) { fwts_log_info(fw, "FADT does not exist, this is not " "necessarily a failure, skipping tests."); return FWTS_SKIP; } else { fwts_log_error(fw, "ACPI table FACP has zero length!"); return FWTS_ERROR; } } /* * Some tests require data from the FACS (5.2.10), which * requires that we are not in hardware-reduced mode */ if (!fwts_acpi_is_reduced_hardware(fw)) { if (fwts_acpi_find_table(fw, "FACS", 0, &table) != FWTS_OK) { fwts_log_error(fw, "Cannot read ACPI table FACS."); return FWTS_ERROR; } if (table == NULL) { fwts_log_error(fw, "ACPI table FACS does not exist!"); return FWTS_ERROR; } facs = (const fwts_acpi_table_facs *)table->data; } return FWTS_OK; } static void flag_info(fwts_framework *fw, const char *name, int state) { const char *enabled = "set"; const char *disabled = "not set"; const char *ptr; ptr = (state) ? enabled : disabled; fwts_log_info(fw, " %s is %s", name, ptr); } static int fadt_info(fwts_framework *fw) { fwts_log_info(fw, "FADT: flag states"); flag_info(fw, "WBINVD", fadt->flags & FWTS_FACP_FLAG_WBINVD); flag_info(fw, "WBINVD_FLUSH", fadt->flags & FWTS_FACP_FLAG_WBINVD_FLUSH); flag_info(fw, "PROC_C1", fadt->flags & FWTS_FACP_FLAG_PROC_C1); flag_info(fw, "P_LVL2_UP", fadt->flags & FWTS_FACP_FLAG_P_LVL2_UP); flag_info(fw, "PWR_BUTTON", fadt->flags & FWTS_FACP_FLAG_PWR_BUTTON); flag_info(fw, "SLP_BUTTON", fadt->flags & FWTS_FACP_FLAG_SLP_BUTTON); flag_info(fw, "FIX_RTC", fadt->flags & FWTS_FACP_FLAG_FIX_RTC); flag_info(fw, "RTC_S4", fadt->flags & FWTS_FACP_FLAG_RTC_S4); flag_info(fw, "TMR_VAL_EXT", fadt->flags & FWTS_FACP_FLAG_TMR_VAL_EXT); flag_info(fw, "DCK_CAP", fadt->flags & FWTS_FACP_FLAG_DCK_CAP); flag_info(fw, "RESET_REG_SUP", fadt->flags & FWTS_FACP_FLAG_RESET_REG_SUP); flag_info(fw, "SEALED_CASE", fadt->flags & FWTS_FACP_FLAG_SEALED_CASE); flag_info(fw, "HEADLESS", fadt->flags & FWTS_FACP_FLAG_HEADLESS); flag_info(fw, "CPU_SW_SLP", fadt->flags & FWTS_FACP_FLAG_CPU_SW_SLP); flag_info(fw, "PCI_EXP_WAK", fadt->flags & FWTS_FACP_FLAG_PCI_EXP_WAK); flag_info(fw, "USE_PLATFORM_CLOCK", fadt->flags & FWTS_FACP_FLAG_USE_PLATFORM_CLOCK); flag_info(fw, "S4_RTC_STS_VALID", fadt->flags & FWTS_FACP_FLAG_S4_RTC_STS_VALID); flag_info(fw, "REMOTE_POWER_ON_CAPABLE", fadt->flags & FWTS_FACP_FLAG_REMOTE_POWER_ON_CAPABLE); flag_info(fw, "FORCE_APIC_CLUSTER_MODEL", fadt->flags & FWTS_FACP_FLAG_FORCE_APIC_CLUSTER_MODEL); flag_info(fw, "FORCE_APIC_PHYSICAL_DESTINATION_MODE", fadt->flags & FWTS_FACP_FLAG_FORCE_APIC_PHYSICAL_DESTINATION_MODE); flag_info(fw, "HW_REDUCED_ACPI", fadt->flags & FWTS_FACP_FLAG_HW_REDUCED_ACPI); flag_info(fw, "LOW_POWER_S0_IDLE_CAPABLE", fadt->flags & FWTS_FACP_FLAG_LOW_POWER_S0_IDLE_CAPABLE); if ((fadt->flags & FWTS_FACP_FLAG_PERSISTENT_CPU_CACHES) == 0) fwts_log_info(fw, " PERSISTENT_CPU_CACHES is not reported"); else if ((fadt->flags & FWTS_FACP_FLAG_PERSISTENT_CPU_CACHES) == FWTS_FACP_FLAG_PERSISTENT_CPU_CACHES) { fwts_failed(fw, LOG_LEVEL_HIGH, "FADTCPUCACHESRESERVED", "FADT persistent cpu caches value 11b should be reserved."); } else { fwts_log_info(fw, " PERSISTENT_CPU_CACHES is 0x%" PRIx8, (fadt->flags & FWTS_FACP_FLAG_PERSISTENT_CPU_CACHES) >> 22); } fwts_log_info(fw, "FADT: IA-PC Boot Architecture flag states"); flag_info(fw, "LEGACY_DEVICES", fadt->iapc_boot_arch & FWTS_FACP_IAPC_BOOT_ARCH_LEGACY_DEVICES); flag_info(fw, "8042", fadt->iapc_boot_arch & FWTS_FACP_IAPC_BOOT_ARCH_8042); flag_info(fw, "VGA_NOT_PRESENT", fadt->iapc_boot_arch & FWTS_FACP_IAPC_BOOT_ARCH_VGA_NOT_PRESENT); flag_info(fw, "MSI_NOT_SUPPORTED", fadt->iapc_boot_arch & FWTS_FACP_IAPC_BOOT_ARCH_MSI_NOT_SUPPORTED); flag_info(fw, "PCIE_ASPM_CONTROLS", fadt->iapc_boot_arch & FWTS_FACP_IAPC_BOOT_ARCH_PCIE_ASPM_CONTROLS); flag_info(fw, "CMOS_RTC_NOT_PRESENT", fadt->iapc_boot_arch & FWTS_FACP_IAPC_BOOT_ARCH_CMOS_RTC_NOT_PRESENT); fwts_log_info(fw, "FADT: ARM Boot Architecture flag states"); flag_info(fw, "PSCI_COMPLIANT", fadt->arm_boot_flags & FWTS_FACP_ARM_BOOT_ARCH_PSCI_COMPLIANT); flag_info(fw, "PSCI_USE_HVC", fadt->arm_boot_flags & FWTS_FACP_ARM_BOOT_ARCH_PSCI_USE_HVC); fwts_infoonly(fw); return FWTS_OK; } static int fadt_checksum(fwts_framework *fw) { const uint8_t *data = (const uint8_t *)fadt; ssize_t length = fadt->header.length; uint8_t checksum = 0; /* verify the table checksum */ checksum = fwts_checksum(data, length); if (checksum == 0) fwts_passed(fw, "FADT checksum is correct"); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTChecksum", "FADT checksum is incorrect: 0x%x", checksum); return FWTS_OK; } static int fadt_revision(fwts_framework *fw) { const uint8_t LATEST_MAJOR = (FWTS_ACPI_VERSION_NOW & 0xF00) >> 8; const uint8_t LATEST_MINOR = (FWTS_ACPI_VERSION_NOW & 0xFF) >> 4; uint8_t major; uint8_t minor; fwts_get_fadt_version(fw, &major, &minor); fwts_log_info(fw, "FADT revision: %" PRIu8 ".%" PRIu8, major, minor); fwts_log_info(fw, "FADT table length: %" PRIu32, fadt->header.length); if (major == LATEST_MAJOR && minor == LATEST_MINOR) fwts_passed(fw, "FADT revision is up to date."); else { fwts_warning(fw, "FADT revision is outdated: %" PRIu8 ".%" PRIu8, major, minor); fwts_advice(fw, "The most recent revision of the FADT " "defined in the ACPI specification is %" PRIu8 ".%" PRIu8 ". " "While older revisions of the FADT can be used, " "newer ones may enable additional functionality " "that cannot be used until the FADT is updated.", LATEST_MAJOR, LATEST_MINOR); } return FWTS_OK; } static void acpi_table_check_fadt_firmware_ctrl(fwts_framework *fw) { /* tests for very old FADTs */ if (fadt->header.length < 140 && fadt->firmware_control == 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADT32BitFACSNull", "FADT 32 bit FIRMWARE_CONTROL is null."); fwts_advice(fw, "The ACPI version 1.0 FADT has a NULL " "FIRMWARE_CTRL and it needs to be defined " "to point to a valid Firmware ACPI Control " "Structure (FACS)."); /* can't do much else */ return; } /* for more recent FADTs, things get more complicated */ if (fadt->firmware_control == 0 && fadt->x_firmware_ctrl == 0) { if (fwts_acpi_is_reduced_hardware(fw)) { fwts_passed(fw, "FADT 32 bit FIRMWARE_CONTROL and " "64 bit X_FIRMWARE_CONTROL (FACS " "address) are null in hardware reduced " "mode."); fwts_advice(fw, "When in hardware reduced mode, it is " "allowed to have both the 32-bit " "FIRMWARE_CTRL and 64-bit X_FIRMWARE_CTRL " "fields set to zero as they are. This " "indicates that no FACS is available."); } else { fwts_failed(fw, LOG_LEVEL_CRITICAL, "FADTFACSZero", "FADT 32 bit FIRMWARE_CONTROL and " "64 bit X_FIRMWARE_CONTROL (FACS " "address) are both null."); fwts_advice(fw, "The 32 bit FIRMWARE_CTRL or 64 " "bit X_FIRMWARE_CTRL should point " "to a valid Firmware ACPI Control " "Structure (FACS) when ACPI hardware " "reduced mode is not set. "); } } else if (fadt->firmware_control != 0 && fadt->x_firmware_ctrl != 0) { if ((uint64_t)fadt->firmware_control == fadt->x_firmware_ctrl) { fwts_passed(fw, "Both FIRMWARE_CTRL and X_FIRMWARE_CTRL " "are being used and contain the same FACS " "address."); fwts_advice(fw, "While having FIRMWARE_CTRL and " "X_FIRMWARE_CTRL both set to an address " "is not compliant with the ACPI " "specification, they are both set to " "the same address, which at least " "mitigates the ambiguity in determining " "which address is the correct one to use " "for the FACS. Ideally, only one of the " "two addresses should be set but as a " "practical matter, this will work."); } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FwCtrl32and64Differ", "FIRMWARE_CONTROL is 0x%" PRIx32 " and differs from X_FIRMWARE_CONTROL " "0x%" PRIx64, fadt->firmware_control, fadt->x_firmware_ctrl); fwts_advice(fw, "One would expect the 32 bit FIRMWARE_CTRL " "and 64 bit X_FIRMWARE_CTRL pointers to " "point to the same FACS, however they do " "not which is clearly ambiguous and wrong. " "The kernel works around this by using the " "64-bit X_FIRMWARE_CTRL pointer to the " "FACS. "); } } else { /* only one of firmware_control/x_firmware_ctrl is 0 */ fwts_passed(fw, "Only one of FIRMWARE_CTRL and X_FIRMWARE_CTRL " "is non-zero."); } } static void acpi_table_check_fadt_dsdt(fwts_framework *fw) { /* check out older FADTs */ if (fadt->header.length < 148) { if (fadt->dsdt == 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTDSDTNull", "FADT DSDT address is null."); /* can't do much else */ return; } /* if one field is being used, the other should be null */ if ((fadt->dsdt != 0 && fadt->x_dsdt == 0) || (fadt->dsdt == 0 && fadt->x_dsdt != 0)) fwts_passed(fw, "FADT has only one of X_DSDT or DSDT addresses " "being used."); else { if (fadt->dsdt == 0 && fadt->x_dsdt == 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTOneDSDTNull", "FADT X_DSDT and DSDT addresses cannot " "both be null."); } /* unexpected use of addresses */ if (fadt->dsdt != 0 && fadt->x_dsdt == 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTXDSDTNull", "FADT X_DSDT address is null."); fwts_advice(fw, "An ACPI 2.0 or newer FADT is being used but " "the 64 bit X_DSDT is null. " "The kernel will fall back to using " "the 32 bit DSDT pointer instead."); } /* * If you are going to insist on using both fields, even though * that is incorrect, at least make it unambiguous as to which * address is the one to use, by using the same value in both * fields. */ if ((uint64_t)fadt->dsdt == fadt->x_dsdt && fadt->dsdt != 0) { fwts_passed(fw, "FADT 32 bit DSDT and 64 bit X_DSDT " "both point to the same physical address " "(0x%" PRIx64 ").", fadt->x_dsdt); fwts_advice(fw, "While it is not correct to use both of the " "32- and 64-bit DSDT address fields in recent " "versions of ACPI, they are at least the same " "address, which keeps the kernel from getting " "confused. At some point, the 32-bit DSDT " "address may get ignored so it is recommended " "that the FADT be upgraded to only use the 64-" "bit X_DSDT field. In the meantime, however, " "ACPI will still behave correctly."); } if ((uint64_t)fadt->dsdt != fadt->x_dsdt && fadt->dsdt != 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADT32And64Mismatch", "FADT 32 bit DSDT (0x%" PRIx32 ") " "does not point to same " "physical address as 64 bit X_DSDT " "(0x%" PRIx64 ").", fadt->dsdt, fadt->x_dsdt); fwts_advice(fw, "One would expect the 32 bit DSDT and " "64 bit X_DSDT pointers to point to the " "same DSDT, however they don't which is " "clearly ambiguous and wrong. " "The kernel works around this by assuming the " "64 bit X_DSDT pointer to the DSDT is the correct " "one to use."); } } static void acpi_table_check_fadt_reserved(fwts_framework *fw) { if (fadt->reserved == (uint8_t)0) fwts_passed(fw, "FADT first reserved field is zero."); else if (fadt->reserved == (uint8_t)1) fwts_passed(fw, "FADT first reserved field is one " "(compatible with ACPI 1.0)."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTReservedZero", "FADT first reserved field is not zero: 0x%02x", fadt->reserved); if (fadt->header.length < 112) return; if (fadt->reserved1 == (uint8_t)0) fwts_passed(fw, "FADT second reserved field is zero."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTReservedZero", "FADT second reserved field is not zero: 0x%02x", fadt->reserved1); if (fadt->header.revision == 5 && fadt->minor_version == 0 && fadt->arm_boot_flags != 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTReservedZero", "FADT 5.0 reserved field 'arm_boot_flags' is not zero: 0x%04x", fadt->arm_boot_flags); } static void acpi_table_check_fadt_pm_profile(fwts_framework *fw) { fwts_log_info(fw, "FADT Preferred PM Profile: %hhu (%s)", fadt->preferred_pm_profile, fwts_acpi_fadt_preferred_pm_profile(fadt->preferred_pm_profile)); if (fadt->preferred_pm_profile <= 8) fwts_passed(fw, "FADT has a valid preferred PM profile."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPMProfile", "FADT preferred PM profile is invalid."); } static void acpi_table_check_fadt_reduced_hardware(fwts_framework *fw) { const char *IS = "IS"; const char *IS_NOT = "IS NOT"; bool rhw; bool passed; static const fwts_acpi_gas null_gas; uint32_t flag_mask; rhw = fwts_acpi_is_reduced_hardware(fw); fwts_log_info(fw, "FADT indicates ACPI %s in reduced hardware mode.", rhw ? IS : IS_NOT); if (!rhw) return; passed = true; /* check all the fields that will be ignored */ if (fadt->smi_cmd != 0) { passed = false; fwts_log_info(fw, "SMI_CMD is non-zero: 0x%x", fadt->smi_cmd); } if (fadt->acpi_enable != 0) { passed = false; fwts_log_info(fw, "ACPI_ENABLE is non-zero: 0x%x", fadt->acpi_enable); } if (fadt->acpi_disable != 0) { passed = false; fwts_log_info(fw, "ACPI_DISABLE is non-zero: 0x%x", fadt->acpi_disable); } if (fadt->s4bios_req != 0) { passed = false; fwts_log_info(fw, "S4BIOS_REQ is non-zero: 0x%x", fadt->s4bios_req); } if (fadt->pstate_cnt != 0) { passed = false; fwts_log_info(fw, "PSTATE_CNT is non-zero: 0x%x", fadt->pstate_cnt); } if (fadt->pm1a_evt_blk != 0) { passed = false; fwts_log_info(fw, "PM1A_EVT_BLK is non-zero: 0x%x", fadt->pm1a_evt_blk); } if (fadt->pm1b_evt_blk != 0) { passed = false; fwts_log_info(fw, "PM1B_EVT_BLK is non-zero: 0x%x", fadt->pm1b_evt_blk); } if (fadt->pm1a_cnt_blk != 0) { passed = false; fwts_log_info(fw, "PM1A_CNT_BLK is non-zero: 0x%x", fadt->pm1a_cnt_blk); } if (fadt->pm1b_cnt_blk != 0) { passed = false; fwts_log_info(fw, "PM1B_CNT_BLK is non-zero: 0x%x", fadt->pm1b_cnt_blk); } if (fadt->pm2_cnt_blk != 0) { passed = false; fwts_log_info(fw, "PM2_CNT_BLK is non-zero: 0x%x", fadt->pm2_cnt_blk); } if (fadt->pm_tmr_blk != 0) { passed = false; fwts_log_info(fw, "PM_TMR_BLK is non-zero: 0x%x", fadt->pm_tmr_blk); } if (fadt->gpe0_blk != 0) { passed = false; fwts_log_info(fw, "GPE0_BLK is non-zero: 0x%x", fadt->gpe0_blk); } if (fadt->gpe1_blk != 0) { passed = false; fwts_log_info(fw, "GPE1_BLK is non-zero: 0x%x", fadt->gpe1_blk); } if (fadt->pm1_evt_len != 0) { passed = false; fwts_log_info(fw, "PM1_EVT_LEN is non-zero: 0x%x", fadt->pm1_evt_len); } if (fadt->pm1_cnt_len != 0) { passed = false; fwts_log_info(fw, "PM1_CNT_LEN is non-zero: 0x%x", fadt->pm1_cnt_len); } if (fadt->pm2_cnt_len != 0) { passed = false; fwts_log_info(fw, "PM2_CNT_LEN is non-zero: 0x%x", fadt->pm2_cnt_len); } if (fadt->pm_tmr_len != 0) { passed = false; fwts_log_info(fw, "PM_TMR_LEN is non-zero: 0x%x", fadt->pm_tmr_len); } if (fadt->gpe0_blk_len != 0) { passed = false; fwts_log_info(fw, "GPE0_BLK_LEN is non-zero: 0x%x", fadt->gpe0_blk_len); } if (fadt->gpe1_blk_len != 0) { passed = false; fwts_log_info(fw, "GPE1_BLK_LEN is non-zero: 0x%x", fadt->gpe1_blk_len); } if (fadt->gpe1_base != 0) { passed = false; fwts_log_info(fw, "GPE1_BASE is non-zero: 0x%x", fadt->gpe1_base); } if (fadt->cst_cnt != 0) { passed = false; fwts_log_info(fw, "CST_CNT is non-zero: 0x%x", fadt->cst_cnt); } if (fadt->p_lvl2_lat != 0) { passed = false; fwts_log_info(fw, "P_LVL2_LAT is non-zero: 0x%x", fadt->p_lvl2_lat); } if (fadt->p_lvl3_lat != 0) { passed = false; fwts_log_info(fw, "P_LVL3_LAT is non-zero: 0x%x", fadt->p_lvl3_lat); } if (fadt->flush_size != 0) { passed = false; fwts_log_info(fw, "FLUSH_SIZE is non-zero: 0x%x", fadt->flush_size); } if (fadt->flush_stride != 0) { passed = false; fwts_log_info(fw, "FLUSH_STRIDE is non-zero: 0x%x", fadt->flush_stride); } if (fadt->duty_offset != 0) { passed = false; fwts_log_info(fw, "DUTY_OFFSET is non-zero: 0x%x", fadt->duty_offset); } if (fadt->duty_width != 0) { passed = false; fwts_log_info(fw, "DUTY_WIDTH is non-zero: 0x%x", fadt->duty_width); } if (fadt->day_alrm != 0) { passed = false; fwts_log_info(fw, "DAY_ALRM is non-zero: 0x%x", fadt->day_alrm); } if (fadt->mon_alrm != 0) { passed = false; fwts_log_info(fw, "MON_ALRM is non-zero: 0x%x", fadt->mon_alrm); } if (fadt->century != 0) { passed = false; fwts_log_info(fw, "CENTURY is non-zero: 0x%x", fadt->century); } if (memcmp((const void *)&fadt->x_pm1a_evt_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_info(fw, "X_PM1A_EVT_BLK is a non-zero general " "address structure."); } if (memcmp((const void *)&fadt->x_pm1b_evt_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_info(fw, "X_PM1B_EVT_BLK is a non-zero general " "address structure."); } if (memcmp((const void *)&fadt->x_pm1a_cnt_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_info(fw, "X_PM1A_CNT_BLK is a non-zero general " "address structure."); } if (memcmp((const void *)&fadt->x_pm1b_cnt_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_info(fw, "X_PM1B_CNT_BLK is a non-zero general " "address structure."); } if (memcmp((const void *)&fadt->x_pm2_cnt_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_info(fw, "X_PM2_CNT_BLK is a non-zero general " "address structure."); } if (memcmp((const void *)&fadt->x_pm_tmr_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_info(fw, "X_PM_TMR_BLK is a non-zero general " "address structure."); } if (memcmp((const void *)&fadt->x_gpe0_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_info(fw, "X_GPE0_BLK is a non-zero general " "address structure."); } if (memcmp((const void *)&fadt->x_gpe1_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_info(fw, "X_GPE1_BLK is a non-zero general " "address structure."); } if (passed) fwts_passed(fw, "All FADT reduced hardware fields are zero."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTRHWNonZero", "Some FADT reduced hardware fields are non-zero."); /* now check all the reserved flags */ flag_mask = FWTS_FACP_FLAG_WBINVD_FLUSH | FWTS_FACP_FLAG_PROC_C1 | FWTS_FACP_FLAG_P_LVL2_UP | FWTS_FACP_FLAG_RTC_S4 | FWTS_FACP_FLAG_TMR_VAL_EXT | FWTS_FACP_FLAG_CPU_SW_SLP | FWTS_FACP_FLAG_PCI_EXP_WAK | FWTS_FACP_FLAG_S4_RTC_STS_VALID | FWTS_FACP_FLAG_REMOTE_POWER_ON_CAPABLE; if (fadt->flags & flag_mask) fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTRHWFlagsNonZero", "Some FADT reduced hardware flags are set."); else fwts_passed(fw, "All FADT reduced hardware flags are not set."); if ((fadt->flags & FWTS_FACP_FLAG_FORCE_APIC_CLUSTER_MODEL) || (fadt->flags & FWTS_FACP_FLAG_FORCE_APIC_PHYSICAL_DESTINATION_MODE)) fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTRHWAPICFlags", "FADT APIC flags are set for reduced hardware " "mode but may be irrelevant."); else fwts_passed(fw, "FADT APIC flags are not set in reduced " "hardware mode."); } static void acpi_table_check_fadt_smi_cmd(fwts_framework *fw) { /* * Section 5.2.9 (Fixed ACPI Description Table) of the ACPI 5.0 * specification states that if SMI_CMD is zero then it is * a system that does not support System Management Mode, so * in that case, don't check SCI_INT being valid. */ if (fadt->smi_cmd != 0) { if (fadt->sci_int == 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTSCIIRQZero", "FADT SCI Interrupt is 0x00, but must " "be defined since SMI command indicates " "System Management Mode is supported."); else fwts_passed(fw, "FADT SMI_CMD indicates System Management " "Mode is supported, and the SCI Interrupt " "is non-zero."); } else { if ((fadt->acpi_enable == 0) && (fadt->acpi_disable == 0) && (fadt->s4bios_req == 0) && (fadt->pstate_cnt == 0) && (fadt->cst_cnt == 0)) { /* * Not an error, but intentional, so feedback * this finding. */ fwts_passed(fw, "The FADT SMI_CMD is zero, system " "does not support System Management Mode."); } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTSMICMDZero", "FADT SMI_CMD is 0x00, however, one or " "more of ACPI_ENABLE, ACPI_DISABLE, " "S4BIOS_REQ, PSTATE_CNT and CST_CNT are " "defined which means SMI_CMD should be " "defined, otherwise SMI commands cannot " "be sent."); fwts_advice(fw, "The configuration seems to suggest that " "SMI command should be defined to allow " "the kernel to trigger system management " "interrupts via the SMD_CMD port. The " "fact that SMD_CMD is zero which is " "invalid means that SMIs are not possible " "through the normal ACPI mechanisms. This " "means some firmware based machine " "specific functions will not work."); } } } static void acpi_table_check_fadt_acpi_enable(fwts_framework *fw) { if (fadt->acpi_enable != 0) { if (fadt->smi_cmd == 0) fwts_failed(fw, LOG_LEVEL_HIGH, "SMMNeedsAcpiEnableCmd", "FADT SMI ACPI enable command is non-zero, " "but SMM is not supported."); else fwts_passed(fw, "FADT SMI ACPI enable command is " "non-zero, and SMM is supported."); } return; } static void acpi_table_check_fadt_acpi_disable(fwts_framework *fw) { if (fadt->acpi_disable != 0) { if (fadt->smi_cmd == 0) fwts_failed(fw, LOG_LEVEL_HIGH, "SMMNeedsAcpiDisableCmd", "FADT SMI ACPI disable command is " "non-zero, but SMM is not supported."); else fwts_passed(fw, "FADT SMI ACPI disable command is " "non-zero, and SMM is supported."); } return; } static void acpi_table_check_fadt_s4bios_req(fwts_framework *fw) { if (facs && facs->length >= 24) fwts_passed(fw, "FADT indicates we are not in reduced hardware " "mode, and required FACS is present."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "FACSMustBePresent", "FADT indicates we are not in reduced hardware " "mode, which requires an FACS be present, but " "none has been found."); if (facs && (facs->flags & FWTS_FACS_FLAG_S4BIOS_F)) { if (fadt->s4bios_req == 0) { if (fadt->smi_cmd == 0) { fwts_passed(fw, "FADT indicates System Management " "Mode is not supported, which " "allows a zero S4BIOS_REQ value."); fwts_advice(fw, "There is an inconsistency between " "the FADT and FACS. The FADT " "indicates no SMM support, and " "no S4BIOS_REQ command, but the " "FACS indicates S4BIOS_REQ is " "supported. One of these may " "be incorrect."); } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SMMHasNoS4BIOSReqCmd", "FADT SMI S4BIOS_REQ command is " "zero, but this is not allowed " "when SMM is supported, and the " "S4BIOS_F flag is set in the " "FACS."); } } else { if (fadt->smi_cmd == 0) { fwts_passed(fw, "FADT indicates System Management " "Mode is not supported, but a " "S4BIOS_REQ command is defined."); fwts_advice(fw, "There is an inconsistency between " "the FADT and FACS. The FADT " "indicates no SMM support, but it " "defines an S4BIOS_REQ command, " "and the FACS indicates " "S4BIOS_REQ is supported. One " "of these may be incorrect."); } else { fwts_passed(fw, "FADT S4BIOS_REQ command is " "non-zero, SMM is supported so " "the command can be used, and " "the FACS indicates S4BIOS_REQ " "is supported."); } } } else { if (fadt->s4bios_req == 0) fwts_passed(fw, "FADT S4BIOS_REQ command is not set " "and FACS indicates it is not supported."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "SMMS4BIOSCmdDefined", "FADT S4BIOS_REQ command is defined " "but FACS indicates it is not supported."); } return; } static void acpi_table_check_fadt_pstate_cnt(fwts_framework *fw) { if (fadt->pstate_cnt == 0) { if (fadt->smi_cmd == 0) fwts_passed(fw, "FADT SMI PSTATE_CNT command is zero, " "which is allowed since SMM is not " "supported."); } else { if (fadt->smi_cmd == 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "SMMHasExtraPstateCntCmd", "FADT SMI PSTATE_CNT command is " "non-zero, but SMM is not supported."); else fwts_passed(fw, "FADT SMI PSTATE_CNT command is " "non-zero, and SMM is supported."); } return; } static void acpi_table_check_fadt_pm1a_evt_blk(fwts_framework *fw) { bool both_zero; bool both_nonzero; if (fadt->header.length < 160) { if (fadt->pm1a_evt_blk == 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPm1aEvtBlkNotSet", "FADT PM1A_EVT_BLK is a required field " "and must have a 32-bit address set."); else fwts_passed(fw, "FADT required PM1A_EVT_BLK field is " "non-zero."); /* can't do much else */ return; } if (fadt->pm1a_evt_blk == 0 && fadt->x_pm1a_evt_blk.address == 0) { both_zero = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPm1aEvtBlkNotSet", "FADT PM1A_EVT_BLK is a required field and must " "have either a 32-bit or 64-bit address set."); } else { both_zero = false; fwts_passed(fw, "FADT required PM1A_EVT_BLK field is non-zero"); } if (fadt->pm1a_evt_blk != 0 && fadt->x_pm1a_evt_blk.address != 0) both_nonzero = true; else { both_nonzero = false; if (!both_zero) fwts_passed(fw, "FADT one required PM1A_EVT_BLK field " "is non-zero"); } if (both_nonzero && ((uint64_t)fadt->pm1a_evt_blk == fadt->x_pm1a_evt_blk.address)) { fwts_passed(fw, "FADT 32- and 64-bit PM1A_EVT_BLK fields are " "at least equal."); fwts_advice(fw, "Both FADT 32- and 64-bit PM1A_EVT_BLK " "fields are being used, but only one should be " "non-zero. However, they are at least equal so " "the kernel will at least have a usable value."); } else { if (fwts_get_acpi_version(fw) <= FWTS_ACPI_VERSION_61) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPm1aEvtBlkNotSet", "FADT PM1A_EVT_BLK is a required field and must " "have either a 32-bit or 64-bit address set."); fwts_advice(fw, "Both FADT 32- and 64-bit PM1A_EVT_BLK " "fields are being used, but only one " "should be non-zero. Since the fields " "value are not equal the kernel cannot " "unambiguously determine which value " "is the correct one."); } fwts_passed(fw, "FADT 64-bit X_PM1A_EVT_BLK field is set " "and 32-bit PM1A_EVT_BLK will be ignored."); } } static void acpi_table_check_fadt_pm1b_evt_blk(fwts_framework *fw) { if (fadt->pm1b_evt_blk == 0 && fadt->header.length < 172) { fwts_skipped(fw, "FADT PM1B_EVT_BLK not being used."); return; } if (fadt->pm1b_evt_blk == 0 && fadt->x_pm1b_evt_blk.address == 0) { fwts_skipped(fw, "FADT PM1B_EVT_BLK not being used."); return; } if ((fadt->pm1b_evt_blk != 0 && fadt->x_pm1b_evt_blk.address == 0) || (fadt->pm1b_evt_blk == 0 && fadt->x_pm1b_evt_blk.address != 0)) fwts_passed(fw, "FADT only one of the 32-bit or 64-bit " "PM1B_EVT_BLK fields is being used."); if ((uint64_t)fadt->pm1b_evt_blk == fadt->x_pm1b_evt_blk.address) { fwts_passed(fw, "FADT 32- and 64-bit PM1B_EVT_BLK fields are " "at least equal."); fwts_advice(fw, "Both FADT 32- and 64-bit PM1B_EVT_BLK " "fields are being used, but only one should be " "non-zero. However, they are at least equal so " "the kernel will at least have a usable value."); } else { if (fwts_get_acpi_version(fw) <= FWTS_ACPI_VERSION_61) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPm1bEvtBlkNotSet", "FADT PM1B_EVT_BLK is a required field and must " "have either a 32-bit or 64-bit address set."); fwts_advice(fw, "Both FADT 32- and 64-bit PM1B_EVT_BLK " "fields are being used, but only one should be " "non-zero. Since the fields value are not equal " "the kernel cannot unambiguously determine which " "value is the correct one."); } fwts_passed(fw, "FADT 64-bit X_PM1B_EVT_BLK field is set " "and 32-bit PM1B_EVT_BLK will be ignored."); } } static void acpi_table_check_fadt_pm1a_cnt_blk(fwts_framework *fw) { if (fadt->header.length < 184) { if (fadt->pm1a_cnt_blk == 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPm1aCntBlkNotSet", "FADT PM1A_CNT_BLK is a required field " "and must have a 32-bit address set."); else fwts_passed(fw, "FADT required PM1A_EVT_BLK field is " "non-zero."); /* can't do much else */ return; } if (fadt->pm1a_cnt_blk != 0 || fadt->x_pm1a_cnt_blk.address != 0) fwts_passed(fw, "FADT required PM1A_CNT_BLK field is non-zero"); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPm1aCntBlkNotSet", "FADT PM1A_CNT_BLK is a required field and must " "have either a 32-bit or 64-bit address set."); if ((fadt->pm1a_cnt_blk != 0 && fadt->x_pm1a_cnt_blk.address == 0) || (fadt->pm1a_cnt_blk == 0 && fadt->x_pm1a_cnt_blk.address != 0)) fwts_passed(fw, "FADT only one of the 32-bit or 64-bit " "PM1A_CNT_BLK fields is being used."); if ((uint64_t)fadt->pm1a_cnt_blk == fadt->x_pm1a_cnt_blk.address) { fwts_passed(fw, "FADT 32- and 64-bit PM1A_CNT_BLK fields are " "at least equal."); fwts_advice(fw, "Both FADT 32- and 64-bit PM1A_CNT_BLK " "fields are being used, but only one should be " "non-zero. However, they are at least equal so " "the kernel will at least have a usable value."); } else { if (fwts_get_acpi_version(fw) <= FWTS_ACPI_VERSION_61) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPm1aCntBlkNotSet", "FADT PM1A_CNT_BLK is a required field and must " "have either a 32-bit or 64-bit address set."); fwts_advice(fw, "Both FADT 32- and 64-bit PM1A_CNT_BLK " "fields are being used, but only one should be " "non-zero. Since the fields value are not equal " "the kernel cannot unambiguously determine which " "value is the correct one."); } fwts_passed(fw, "FADT 64-bit X_PM1A_CNT_BLK field is set " "and 32-bit PM1A_CNT_BLK will be ignored."); } } static void acpi_table_check_fadt_pm1b_cnt_blk(fwts_framework *fw) { if (fadt->pm1b_cnt_blk == 0 && fadt->header.length < 196) { fwts_skipped(fw, "FADT PM1B_CNT_BLK not being used."); return; } if (fadt->pm1b_cnt_blk == 0 && fadt->x_pm1b_cnt_blk.address == 0) { fwts_skipped(fw, "FADT PM1B_CNT_BLK not being used."); return; } if ((fadt->pm1b_cnt_blk != 0 && fadt->x_pm1b_cnt_blk.address == 0) || (fadt->pm1b_cnt_blk == 0 && fadt->x_pm1b_cnt_blk.address != 0)) fwts_passed(fw, "FADT only one of the 32-bit or 64-bit " "PM1B_CNT_BLK fields is being used."); if ((uint64_t)fadt->pm1b_cnt_blk == fadt->x_pm1b_cnt_blk.address) { fwts_passed(fw, "FADT 32- and 64-bit PM1B_CNT_BLK fields are " "at least equal."); fwts_advice(fw, "Both FADT 32- and 64-bit PM1B_CNT_BLK " "fields are being used, but only one should be " "non-zero. However, they are at least equal so " "the kernel will at least have a usable value."); } else { if (fwts_get_acpi_version(fw) <= FWTS_ACPI_VERSION_61) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPm1bCntBlkNotSet", "FADT PM1B_CNT_BLK is a required field and must " "have either a 32-bit or 64-bit address set."); fwts_advice(fw, "Both FADT 32- and 64-bit PM1B_CNT_BLK " "fields are being used, but only one should be " "non-zero. Since the fields value are not equal " "the kernel cannot unambiguously determine which " "value is the correct one."); } fwts_passed(fw, "FADT 64-bit X_PM1B_CNT_BLK field is set " "and 32-bit PM1B_CNT_BLK will be ignored."); } } static void acpi_table_check_fadt_pm2_cnt_blk(fwts_framework *fw) { if (fadt->pm2_cnt_blk == 0 && fadt->header.length < 208) { fwts_skipped(fw, "FADT PM2_CNT_BLK not being used."); return; } if (fadt->pm2_cnt_blk == 0 && fadt->x_pm2_cnt_blk.address == 0) { fwts_skipped(fw, "FADT PM2_CNT_BLK not being used."); return; } if ((fadt->pm2_cnt_blk != 0 && fadt->x_pm2_cnt_blk.address == 0) || (fadt->pm2_cnt_blk == 0 && fadt->x_pm2_cnt_blk.address != 0)) fwts_passed(fw, "FADT only one of the 32-bit or 64-bit " "PM2_CNT_BLK fields is being used."); if ((uint64_t)fadt->pm2_cnt_blk == fadt->x_pm2_cnt_blk.address) { fwts_passed(fw, "FADT 32- and 64-bit PM2_CNT_BLK fields are " "at least equal."); fwts_advice(fw, "Both FADT 32- and 64-bit PM2_CNT_BLK " "fields are being used, but only one should be " "non-zero. However, they are at least equal so " "the kernel will at least have a usable value."); } else { if (fwts_get_acpi_version(fw) <= FWTS_ACPI_VERSION_61) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPm2CntBlkNotSet", "FADT PM2_CNT_BLK is a required field and must " "have either a 32-bit or 64-bit address set."); fwts_advice(fw, "Both FADT 32- and 64-bit PM2_CNT_BLK " "fields are being used, but only one should be " "non-zero. Since the fields value are not equal " "the kernel cannot unambiguously determine which " "value is the correct one."); } fwts_passed(fw, "FADT 64-bit X_PM2_CNT_BLK field is set " "and 32-bit PM2_CNT_BLK will be ignored."); } } static void acpi_table_check_fadt_pm_tmr_blk(fwts_framework *fw) { if (fadt->pm_tmr_blk == 0 && fadt->header.length < 220) { fwts_skipped(fw, "FADT PM_TMR_BLK not being used."); return; } if (fadt->pm_tmr_blk == 0 && fadt->x_pm_tmr_blk.address == 0) { fwts_skipped(fw, "FADT PM_TMR_BLK not being used."); return; } if ((fadt->pm_tmr_blk != 0 && fadt->x_pm_tmr_blk.address == 0) || (fadt->pm_tmr_blk == 0 && fadt->x_pm_tmr_blk.address != 0)) fwts_passed(fw, "FADT only one of the 32-bit or 64-bit " "PM_TMR_BLK fields is being used."); if ((uint64_t)fadt->pm_tmr_blk == fadt->x_pm_tmr_blk.address) { fwts_passed(fw, "FADT 32- and 64-bit PM_TMR_BLK fields are " "at least equal."); fwts_advice(fw, "Both FADT 32- and 64-bit PM_TMR_BLK " "fields are being used, but only one should be " "non-zero. However, they are at least equal so " "the kernel will at least have a usable value."); } else { if (fwts_get_acpi_version(fw) <= FWTS_ACPI_VERSION_61) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPm2CntBlkNotSet", "FADT PM1A_CNT_BLK is a required field and must " "have either a 32-bit or 64-bit address set."); fwts_advice(fw, "Both FADT 32- and 64-bit PM_TMR_BLK " "fields are being used, but only one should be " "non-zero. Since the fields value are not equal " "the kernel cannot unambiguously determine which " "value is the correct one."); } fwts_passed(fw, "FADT 64-bit X_PM_TMR_BLK field is set " "and 32-bit PM_TMR_BLK will be ignored."); } } static void acpi_table_check_fadt_pm1_evt_len(fwts_framework *fw) { if (fadt->pm1_evt_len >= 4) fwts_passed(fw, "FADT PM1_EVT_LEN >= 4."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPm1EvtLenTooSmall", "FADT PM1_EVT_LEN must be >= 4, but is %" PRIu8 ".", fadt->pm1_evt_len); return; } static void acpi_table_check_fadt_pm1_cnt_len(fwts_framework *fw) { if (fadt->pm1_cnt_len >= 2) fwts_passed(fw, "FADT PM1_CNT_LEN >= 2."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPm1CntLenTooSmall", "FADT PM1_CNT_LEN must be >= 2, but is %" PRIu8 ".", fadt->pm1_cnt_len); return; } static void acpi_table_check_fadt_pm2_cnt_len(fwts_framework *fw) { if (fadt->pm2_cnt_blk == 0) { if (fadt->pm2_cnt_len == 0) fwts_passed(fw, "FADT PM2_CNT_LEN is zero and " "PM2_CNT_BLK is not supported."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPm2CntLenInconsistent", "FADT PM2_CNT_LEN must be zero because " "PM2_CNT_BLK is not supported, but is %" PRIu8 ".", fadt->pm2_cnt_len); return; } if (fadt->pm2_cnt_len >= 1) fwts_passed(fw, "FADT PM2_CNT_LEN >= 1."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPm2CntLenTooSmall", "FADT PM2_CNT_LEN must be >= 1, but is %" PRIu8 ".", fadt->pm2_cnt_len); return; } static void acpi_table_check_fadt_pm_tmr_len(fwts_framework *fw) { if (fadt->pm_tmr_len == 0) { if (fadt->pm_tmr_blk == 0) fwts_passed(fw, "FADT PM_TMR_LEN is zero and " "PM_TMR_BLK is not supported."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPmTmrLenInconsistent", "FADT PM_TMR_LEN must be zero because " "PM_TMR_BLK is not supported, but is %" PRIu8 ".", fadt->pm_tmr_len); return; } if (fadt->pm_tmr_len == 4) fwts_passed(fw, "FADT PM_TMR_LEN is 4."); else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTBadPMTMRLEN", "FADT PM_TMR_LEN is %" PRIu8 ", should be 4.", fadt->pm_tmr_len); fwts_advice(fw, "FADT field PM_TMR_LEN defines the number " "of bytes decoded by PM_TMR_BLK. " "This fields value must be 4. If it is not " "the correct size then the kernel will not " "request a region for the pm timer block. "); } } static void acpi_table_check_fadt_gpe0_blk_len(fwts_framework *fw) { if (fadt->gpe0_blk_len & 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTBadGPE0BLKLEN", "FADT GPE0_BLK_LEN is %" PRIu8 ", should a multiple of 2.", fadt->gpe0_blk_len); fwts_advice(fw, "The FADT GPE0_BLK_LEN should be a multiple of 2. " "Because it isn't, the ACPI driver will not map in " "the GPE0 region. This could mean that General " "Purpose Events will not function correctly (for " "example lid or AC-power events)."); } else { if (fadt->gpe0_blk_len) fwts_passed(fw, "FADT GPE0_BLK_LEN non-zero and a " "non-negative multiple of 2: %" PRIu8 ".", fadt->gpe0_blk_len); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTZeroGPE0BlkLen", "FADT GPE0_BLK_LEN is zero, but must be " "set to a non-negative multiple of 2."); } } static void acpi_table_check_fadt_gpe1_blk_len(fwts_framework *fw) { if (fadt->gpe1_blk_len == 0) { if (fadt->gpe1_blk == 0) fwts_passed(fw, "FADT GPE1_BLK_LEN is zero and " "GPE1_BLK is not supported."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTGPE1BlkLenInconsistent", "FADT GPE1_BLK_LEN must be zero because " "GPE1_BLK is not supported, but is %" PRIu8 ".", fadt->gpe1_blk_len); return; } if (fadt->gpe1_blk_len & 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTBadGPE1BLKLEN", "FADT GPE1_BLK_LEN is %" PRIu8 ", should a multiple of 2.", fadt->gpe1_blk_len); fwts_advice(fw, "The FADT GPE1_BLK_LEN should be a multiple of 2. " "Because it isn't, the ACPI driver will not map in " "the GPE1 region. This could mean that General " "Purpose Events will not function correctly (for " "example lid or AC-power events)."); } else { if (fadt->gpe1_blk_len) fwts_passed(fw, "FADT GPE1_BLK_LEN non-zero and a " "non-negative multiple of 2: %" PRIu8 ".", fadt->gpe1_blk_len); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTZeroGPE1BlkLen", "FADT GPE1_BLK_LEN is zero, but must be " "set to a non-negative multiple of 2."); } } static void acpi_table_check_fadt_cst_cnt(fwts_framework *fw) { if (fadt->cst_cnt == 0) { if (fadt->smi_cmd == 0) fwts_passed(fw, "FADT SMI CST_CNT command is zero, " "which is allowed since SMM is not " "supported."); } else { if (fadt->smi_cmd == 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "SMMHasExtraCSTCntCmd", "FADT SMI CST_CNT command is " "non-zero, but SMM is not supported."); else fwts_passed(fw, "FADT SMI CST_CNT command is " "non-zero, and SMM is supported."); } return; } static uint64_t fadt_find_p_blk(fwts_framework *fw) { uint64_t pblk; fwts_list *objects; pblk = 0; objects = fwts_acpi_object_get_names(); if (objects) { fwts_list_link *obj; fwts_list_foreach(obj, objects) { char *name = fwts_list_data(char*, obj); ACPI_OBJECT pr = { 0 }; ACPI_BUFFER buf = { sizeof(ACPI_OBJECT), &pr }; ACPI_HANDLE handle; ACPI_OBJECT_TYPE type; ACPI_STATUS status; status = AcpiGetHandle(NULL, name, &handle); if (ACPI_FAILURE(status)) { fwts_warning(fw, "Failed to get handle for " "object %s.", name); continue; } status = AcpiGetType(handle, &type); if (ACPI_FAILURE(status)) { fwts_warning(fw, "Failed to get type for " "object %s.", name); continue; } /* * If a CPU is not defined as a Processor object, * we don't care here. Per section 8.1.2 and 8.1.3, * defining a CPU with a Device object implies that * a _CST method must be defined, and whatever is * in the _CST overrides the P_BLK and P_LVL*_LAT * values. Since we're only trying to validate the * P_LVL*_LAT values, and they're only used if the * CPUs are defined as Processor objects, we can * ignore any CPUs defined as Device objects. */ if (type == ACPI_TYPE_PROCESSOR) { status = AcpiEvaluateObject(handle, NULL, NULL, &buf); if (ACPI_FAILURE(status)) fwts_warning(fw, "Could not evaluate " "Processor %s", name); else { if (pr.Processor.PblkAddress) pblk = pr.Processor.PblkAddress; } } } } fwts_log_info(fw, "Using P_BLK address of 0x%" PRIx64, pblk); return pblk; } static void get_cst_c2c3(fwts_framework *fw, uint16_t *c2, uint16_t *c3) { const size_t name_len = 4; fwts_list_link *item; fwts_list *objects; if ((objects = fwts_acpi_object_get_names()) == NULL) { fwts_log_info(fw, "Cannot find any ACPI objects"); return; } fwts_list_foreach(item, objects) { char *name = fwts_list_data(char*, item); const size_t len = strlen(name); if (strncmp("_CST", name + len - name_len, name_len) == 0) { ACPI_OBJECT_LIST arg_list; ACPI_BUFFER buf; ACPI_OBJECT *obj; int ret; arg_list.Count = 0; arg_list.Pointer = NULL; ret = fwts_acpi_object_evaluate(fw, name, &arg_list, &buf); if ((ACPI_FAILURE(ret) != AE_OK) || (buf.Pointer == NULL)) continue; obj = buf.Pointer; if ((obj->Type == ACPI_TYPE_PACKAGE) && (obj->Package.Count) && (obj->Package.Elements[0].Type == ACPI_TYPE_INTEGER) && (obj->Package.Elements[0].Integer.Value == (obj->Package.Count - 1))) { ACPI_OBJECT *pkg = NULL; uint32_t i; for (i = 1; i < obj->Package.Count; i++){ if (*c2 == 0 || *c3 == 0) { pkg = &obj->Package.Elements[i]; if ((uint8_t)pkg->Package.Elements[1].Integer.Value == 2) *c2 = (uint16_t)pkg->Package.Elements[2].Integer.Value; else if ((uint8_t)pkg->Package.Elements[1].Integer.Value == 3) *c3 = (uint16_t)pkg->Package.Elements[2].Integer.Value; } } } free(buf.Pointer); } } return; } static void acpi_table_check_fadt_p_lvl2_lat(fwts_framework *fw, uint64_t pblk, uint16_t c2) { if (pblk || c2) { if (fadt->p_lvl2_lat <= 100) fwts_passed(fw, "FADT P_LVL2_LAT is within proper range " "at %" PRIu16, fadt->p_lvl2_lat); else fwts_warning(fw, "FADT P_LVL2_LAT is > 100 (%" PRIu16 ") " "but a P_BLK or _CST C2 is defined. This " "implies a C2 state is not supported, but " "there is a P_BLK register block or _CST " "C2 defined which implies there might be " "a C2 state that works. There is not " "enough information to determine if this " "is expected or not.", fadt->p_lvl2_lat); } else { if (fadt->p_lvl2_lat <= 100) fwts_failed(fw, LOG_LEVEL_MEDIUM, "PLvl2LatDefinedButNotUsable", "FADT P_LVL2_LAT is <= 100 (%" PRIu16 ") " "which implies a C2 state is supported " "but there is no P_BLK register block " "or _CST C2 defined to enable the C2 " "transition.", fadt->p_lvl2_lat); else fwts_passed(fw, "FADT P_LVL2_LAT is > 100 (%" PRIu16 ") " "and no P_BLK or _CST C2 is defined.", fadt->p_lvl2_lat); } return; } static void acpi_table_check_fadt_p_lvl3_lat(fwts_framework *fw, uint64_t pblk, uint16_t c3) { if (pblk || c3) { if (fadt->p_lvl3_lat <= 1000) fwts_passed(fw, "FADT P_LVL3_LAT is within proper range " "at %" PRIu16, fadt->p_lvl3_lat); else fwts_warning(fw, "FADT P_LVL3_LAT is > 1000 (%" PRIu16 ") " "but a P_BLK or _CST C3 is defined. This " "implies a C3 state is not supported, but " "there is a P_BLK register block or _CST " "C3 defined which implies there might be " "a C3 state that works. There is not " "enough information to determine if this " "is expected or not.", fadt->p_lvl3_lat); } else { if (fadt->p_lvl3_lat <= 1000) fwts_failed(fw, LOG_LEVEL_MEDIUM, "PLvl3LatDefinedButNotUsable", "FADT P_LVL3_LAT is <= 1000 (%" PRIu16 ") " "which implies a C3 state is supported " "but there is no P_BLK register block " "or _CST C3 defined to enable the C3 " "transition.", fadt->p_lvl3_lat); else fwts_passed(fw, "FADT P_LVL3_LAT is > 1000 (%" PRIu16 ") " "and no P_BLK or _CST C3 is defined.", fadt->p_lvl3_lat); } return; } static void acpi_table_check_fadt_x_gpex_blk(fwts_framework *fw) { if (fwts_acpi_is_reduced_hardware(fw)) return; if (fadt->x_gpe0_blk.access_width == 1) fwts_passed(fw, "FADT X_GPE0_BLK has correct byte access width."); else { if (!fwts_acpi_data_zero((const void *) &fadt->x_gpe0_blk, sizeof(fwts_acpi_gas))) fwts_failed(fw, LOG_LEVEL_HIGH, "X_GPE0_BLKBadAccessWidth", "FADT X_GPE0_BLK Access width 0x%2.2" PRIx8 " but it should be 1 (byte access).", fadt->x_gpe0_blk.access_width); } if (fadt->x_gpe1_blk.access_width == 1) fwts_passed(fw, "FADT X_GPE1_BLK has correct byte access width."); else { if (!fwts_acpi_data_zero((const void *) &fadt->x_gpe1_blk, sizeof(fwts_acpi_gas))) fwts_failed(fw, LOG_LEVEL_HIGH, "X_GPE1_BLKBadAccessWidth", "FADT X_GPE1_BLK Access width 0x%2.2" PRIx8 " but it should be 1 (byte access).", fadt->x_gpe1_blk.access_width); } } static void acpi_table_check_fadt_sleep_control_reg(fwts_framework *fw) { if (fwts_acpi_is_reduced_hardware(fw)) { if (fadt->sleep_control_reg.address == 0) fwts_passed(fw, "FADT SLEEP_CONTROL_REG not in use."); else { if (fadt->sleep_control_reg.register_bit_width == 8 && fadt->sleep_control_reg.register_bit_offset == 0) fwts_passed(fw, "FADT SLEEP_CONTROL_REG is " "in use and well-defined."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "SleepControlRegHasBadGAS", "FADT SLEEP_CONTROL_REG is " "in use but register width or " "offset is incorrect."); } } else { if (fadt->sleep_control_reg.address == 0) fwts_passed(fw, "FADT SLEEP_CONTROL_REG is null and " "not available when not in reduced " "hardware mode."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "SleepControlRegNotAllowed", "FADT SLEEP_CONTROL_REG is defined but " "will be ignored when not in reduced hardware mode."); } } static void acpi_table_check_fadt_sleep_status_reg(fwts_framework *fw) { if (fwts_acpi_is_reduced_hardware(fw)) { if (fadt->sleep_status_reg.address == 0) fwts_passed(fw, "FADT SLEEP_STATUS_REG not in use."); else { if (fadt->sleep_status_reg.register_bit_width == 8 && fadt->sleep_status_reg.register_bit_offset == 0) fwts_passed(fw, "FADT SLEEP_STATUS_REG is " "in use and well-defined."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "SleepStatusRegHasBadGAS", "FADT SLEEP_STATUS_REG is " "in use but register width or " "offset is incorrect."); } } else { if (fadt->sleep_status_reg.address == 0) fwts_passed(fw, "FADT SLEEP_STATUS_REG is null and " "not available when not in reduced " "hardware mode."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "SleepStatusRegNotAllowed", "FADT SLEEP_STATUS_REG is defined but " "will be ignored when not in reduced hardware mode."); } } static int fadt_test1(fwts_framework *fw) { acpi_table_check_fadt_firmware_ctrl(fw); acpi_table_check_fadt_dsdt(fw); acpi_table_check_fadt_reserved(fw); acpi_table_check_fadt_pm_profile(fw); acpi_table_check_fadt_reduced_hardware(fw); /* * If a field can be tested, we call a function to do so. If * any value is reasonable and allowable, we simply log the value. * For example, the SCI_INT is one byte and can be from 0..255, and * there is no other info (as far as this author knows) that can be * used to verify that the value is correct. */ if (!fwts_acpi_is_reduced_hardware(fw)) { fwts_log_info(fw, "FADT SCI_INT is %" PRIu8, fadt->sci_int); acpi_table_check_fadt_smi_cmd(fw); acpi_table_check_fadt_acpi_enable(fw); acpi_table_check_fadt_acpi_disable(fw); acpi_table_check_fadt_s4bios_req(fw); acpi_table_check_fadt_pstate_cnt(fw); acpi_table_check_fadt_pm1a_evt_blk(fw); acpi_table_check_fadt_pm1b_evt_blk(fw); acpi_table_check_fadt_pm1a_cnt_blk(fw); acpi_table_check_fadt_pm1b_cnt_blk(fw); acpi_table_check_fadt_pm2_cnt_blk(fw); acpi_table_check_fadt_pm_tmr_blk(fw); acpi_table_check_fadt_pm1_evt_len(fw); acpi_table_check_fadt_pm1_cnt_len(fw); acpi_table_check_fadt_pm2_cnt_len(fw); acpi_table_check_fadt_pm_tmr_len(fw); acpi_table_check_fadt_gpe0_blk_len(fw); acpi_table_check_fadt_gpe1_blk_len(fw); fwts_log_info(fw, "FADT GPE1_BASE is %" PRIu8, fadt->gpe1_base); acpi_table_check_fadt_cst_cnt(fw); if (fwts_acpi_init(fw) == FWTS_OK) { uint64_t pblk = fadt_find_p_blk(fw); uint16_t c2 = 0; uint16_t c3 = 0; get_cst_c2c3(fw, &c2, &c3); acpi_table_check_fadt_p_lvl2_lat(fw, pblk, c2); acpi_table_check_fadt_p_lvl3_lat(fw, pblk, c3); fwts_acpi_deinit(fw); } else { fwts_log_error(fw, "Cannot initialize ACPI namespace."); fwts_log_info(fw, "Without a namespace, cannot test " "values of P_LVL2_LAT or P_LVL3_LAT " "for correctness."); } fwts_log_info(fw, "FADT FLUSH_SIZE is %" PRIu16, fadt->flush_size); fwts_log_info(fw, "FADT FLUSH_STRIDE is %" PRIu16, fadt->flush_stride); fwts_log_info(fw, "FADT DUTY_OFFSET is %" PRIu8, fadt->duty_offset); fwts_log_info(fw, "FADT DUTY_WIDTH is %" PRIu8, fadt->duty_width); fwts_log_info(fw, "FADT DAY_ALRM is %" PRIu8, fadt->day_alrm); fwts_log_info(fw, "FADT MON_ALRM is %" PRIu8, fadt->mon_alrm); fwts_log_info(fw, "FADT CENTURY is %" PRIu8, fadt->century); } acpi_table_check_fadt_x_gpex_blk(fw); acpi_table_check_fadt_sleep_control_reg(fw); acpi_table_check_fadt_sleep_status_reg(fw); /* * Cannot really test the Hypervisor Vendor Identity since * the value is provided by the hypervisor to the OS (as a * sign that the ACPI tables have been fabricated), if it * being used at all. Or, it's set to zero. */ fwts_log_info(fw, "FADT Hypervisor Vendor Identity is %" PRIu64, fadt->hypervisor_id); return FWTS_OK; } static int fadt_test2(fwts_framework *fw) { uint32_t port, width, val32; int ret = FWTS_OK; if (fwts_acpi_is_reduced_hardware(fw)) { fwts_skipped(fw, "In reduced hardware mode, skipping test."); return FWTS_OK; } port = fadt->pm1a_cnt_blk; width = fadt->pm1_cnt_len * 8; /* In bits */ if ((fadt->header.revision > 1) || (fadt->header.length >= 244)) { /* Sanity check sizes with extended address variants */ fwts_log_info(fw, "FADT is greater than ACPI version 1.0"); if ((uint64_t)port != fadt->x_pm1a_cnt_blk.address) fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPM1CNTAddrMismatch", "32 and 64 bit versions of FADT pm1_cnt address do not match (0x%8.8x vs 0x%16.16" PRIx64 ").", port, fadt->x_pm1a_cnt_blk.address); if (width != fadt->x_pm1a_cnt_blk.register_bit_width) fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTPM1CNTSizeMismatch", "32 and 64 bit versions of FADT pm1_cnt size do not match (0x%x vs 0x%x).", width, fadt->x_pm1a_cnt_blk.register_bit_width); port = fadt->x_pm1a_cnt_blk.address; width = fadt->x_pm1a_cnt_blk.register_bit_width; } switch (width) { case 8: if (ioperm(port, width/8, 1) < 0) ret = FWTS_ERROR; else { uint8_t val8; ret = fwts_inb(port, &val8); val32 = val8; ioperm(port, width/8, 0); } break; case 16: if (ioperm(port, width/8, 1) < 0) ret = FWTS_ERROR; else { uint16_t val16; ret = fwts_inw(port, &val16); val32 = val16; ioperm(port, width/8, 0); } break; case 32: if (ioperm(port, width/8, 1) < 0) ret = FWTS_ERROR; else { ret = fwts_inl(port, &val32); ioperm(port, width/8, 0); } break; default: fwts_failed(fw, LOG_LEVEL_HIGH, "FADTPM1AInvalidWidth", "FADT pm1a register has invalid bit width of %" PRIu32 ".", width); return FWTS_OK; } if (ret != FWTS_OK) { fwts_log_error(fw, "Cannot read FADT PM1A_CNT_BLK port 0x%" PRIx32 ".", port); return FWTS_ERROR; } if (val32 & 0x01) fwts_passed(fw, "SCI_EN bit in PM1a Control Register Block is enabled."); else fwts_failed(fw, LOG_LEVEL_HIGH, "SCI_ENNotEnabled", "SCI_EN bit in PM1a Control Register Block is not enabled."); return FWTS_OK; } static int fadt_test3(fwts_framework *fw) { if (fwts_acpi_is_reduced_hardware(fw)) { fwts_skipped(fw, "In reduced hardware mode, skipping test."); return FWTS_OK; } if ((fadt->header.revision == 1) || (fadt->header.length < 244)) { fwts_skipped(fw, "Header size indicates an ACPI 1.0 FADT, skipping test."); return FWTS_SKIP; } /* * Sanity check Reset reg, c.f. ACPICA * commit 57bdfbee675cd2c0618c66882d68a6bdf9f8efc4 */ if (fadt->flags & FADT_RESET_SUPPORTED) { if (fadt->reset_reg.register_bit_width != 8) { fwts_failed(fw, LOG_LEVEL_HIGH, "FadtResetRegWidth", "FADT reset register is not 8 bits wide, got instead: %" PRIi8 ".", fadt->reset_reg.register_bit_width); fwts_advice(fw, "Section 5.2.9 Fixed ACPI Description Table (Table 5-34) of the ACPI " "specification states that the FADT register width should " "be 8 bits wide. However, recent versions of ACPICA will ignore this " "and default to 8 bits."); } else fwts_passed(fw, "FADT reset register width is 8 bits wide as expected."); if (fadt->reset_reg.register_bit_offset != 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "FadtResetRegBitOffset", "FADT reset register bit offset is not 0, got instead: %" PRIi8 ".", fadt->reset_reg.register_bit_offset); fwts_advice(fw, "Section 5.2.9 Fixed ACPI Description Table (Table 5-34) of the ACPI " "specification states that the FADT register bit offset should be 0."); } else fwts_passed(fw, "FADT register bit offset is 0 as expected."); if (fadt->header.length >= 129) { if ((fadt->reset_reg.address_space_id != 0) && (fadt->reset_reg.address_space_id != 1) && (fadt->reset_reg.address_space_id != 2)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADTBadRESETREG", "FADT RESET_REG address space ID was %" PRIu8 ", must be System Memory space (0), " "System I/O space (1), or PCI configuration " "space (2).", fadt->reset_reg.address_space_id); fwts_advice(fw, "If the FADT RESET_REG address space ID is " "not set correctly then ACPI writes " "to this register *may* nor work correctly, " "meaning a reboot via this mechanism may not work."); } if ((fadt->reset_value == 0) && (fadt->reset_reg.address != 0)) fwts_warning(fw, "FADT RESET_VALUE is zero, which " "may be incorrect, it is usually non-zero."); } } else { fwts_skipped(fw, "FADT flags indicates reset register not supported, skipping test."); return FWTS_SKIP; } return FWTS_OK; } static fwts_framework_minor_test fadt_tests[] = { { fadt_info, "ACPI FADT Description Table flag info." }, { fadt_checksum, "FADT checksum test." }, { fadt_revision, "FADT revision test." }, { fadt_test1, "ACPI FADT Description Table tests." }, { fadt_test2, "Test FADT SCI_EN bit is enabled." }, { fadt_test3, "Test FADT reset register." }, { NULL, NULL } }; static fwts_framework_ops fadt_ops = { .description = "FADT Fixed ACPI Description Table tests.", .init = fadt_init, .minor_tests = fadt_tests }; FWTS_REGISTER("fadt", &fadt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV | FWTS_FLAG_ACPI | FWTS_FLAG_COMPLIANCE_ACPI) #endif src/acpi/fan/000077500000000000000000000000001465205512700133345ustar00rootroot00000000000000src/acpi/fan/fan.c000066400000000000000000000166171465205512700142570ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corporation * Copyright (C) 2010-2024 Canonical * * This file was originally part of the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #include #include #define COOLING_DEV "cooling_device" #define THERMAL_PATH "/sys/class/thermal" typedef struct { char *name; char *type; int max_state; int cur_state; } fan_info; static void free_fan_info(void *ptr) { fan_info *info = (fan_info*)ptr; free(info->name); free(info->type); free(info); } static fwts_list *get_fan_info(fwts_framework *fw) { DIR *dir; struct dirent *entry; fwts_list *fans; if ((fans = fwts_list_new()) == NULL) { fwts_log_error(fw, "Out of memory gathing fan information."); return NULL; } if (!(dir = opendir(THERMAL_PATH))) return fans; do { entry = readdir(dir); if (entry && strstr(entry->d_name, COOLING_DEV)) { char path[PATH_MAX]; fan_info *info; char *str; info = calloc(1, sizeof(fan_info)); if (info == NULL) { fwts_log_error(fw, "Out of memory gathing fan information."); fwts_list_free(fans, free_fan_info); closedir(dir); return NULL; } if ((info->name = strdup(entry->d_name)) == NULL) { fwts_log_error(fw, "Out of memory gathing fan information."); fwts_list_free(fans, free_fan_info); free(info); closedir(dir); return NULL; } snprintf(path, sizeof(path), THERMAL_PATH "/%s/type", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "NoFanType", "Fan present but has no fan type present."); } else { fwts_chop_newline(str); } info->type = str; /* NULL is OK */ snprintf(path, sizeof(path), THERMAL_PATH "/%s/max_state", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "NoFanMaxState", "Fan present but has no max_state present."); info->max_state = -1; } else { info->max_state = atoi(str); free(str); } snprintf(path, sizeof(path), THERMAL_PATH "/%s/cur_state", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "NoFanCurState", "Fan present but has no cur_state present."); info->cur_state = -1; } else { info->cur_state = atoi(str); free(str); } fwts_list_append(fans, info); } } while (entry); closedir(dir); return fans; } static int fan_test1(fwts_framework *fw) { fwts_list *fans; fwts_list_link *item; fwts_log_info(fw, "Test how many fans there are in the system. " "Check for the current status of the fan(s)."); if ((fans = get_fan_info(fw)) == NULL) return FWTS_ERROR; if (fwts_list_len(fans) == 0) { fwts_skipped(fw, "No thermal cooling information present: cannot test."); fwts_list_free(fans, free_fan_info); return FWTS_SKIP; } fwts_list_foreach(item, fans) { fan_info *info = fwts_list_data(fan_info *, item); if (info->type == NULL) fwts_failed(fw, LOG_LEVEL_MEDIUM, "NoFanType", "Fan %s present but has no fan type present.", info->name); if (info->max_state == -1) fwts_failed(fw, LOG_LEVEL_MEDIUM, "NoFanMaxState", "Fan %s present but has no max_state present.", info->name); if (info->type) { if ((info->cur_state == -1) && strcmp(info->type, "intel_powerclamp")) fwts_failed(fw, LOG_LEVEL_MEDIUM, "NoFanCurState", "Fan %s present but has no cur_state present.", info->name); if ((info->max_state >= 0) && (info->cur_state >= 0)) fwts_passed(fw, "Fan %s of type %s has max cooling " "state %d and current cooling state %d.", info->name, info->type, info->max_state, info->cur_state); } } fwts_list_free(fans, free_fan_info); return FWTS_OK; } static int fan_test2(fwts_framework *fw) { fwts_list *fans1, *fans2; fwts_list_link *item1, *item2; bool changed = false; int i; fwts_log_info(fw, "Test how many fans there are in the system. " "Check for the current status of the fan(s)."); if ((fans1 = get_fan_info(fw)) == NULL) return FWTS_ERROR; if (fwts_list_len(fans1) == 0) { fwts_skipped(fw, "No thermal cooling information present: cannot test."); fwts_list_free(fans1, free_fan_info); return FWTS_SKIP; } fwts_log_info(fw, "Loading CPUs for 20 seconds to try and get fan speeds to change."); for (i = 0; i < 20; i++) { fwts_progress(fw, (1+i) * 5); fwts_cpu_consume(1); } fwts_progress(fw, 100); if ((fans2 = get_fan_info(fw)) == NULL) { fwts_list_free(fans1, free_fan_info); return FWTS_ERROR; } if (fwts_list_len(fans2) == 0) { fwts_skipped(fw, "No thermal cooling information present: cannot test."); fwts_list_free(fans1, free_fan_info); fwts_list_free(fans2, free_fan_info); return FWTS_SKIP; } fwts_list_foreach(item1, fans1) { fan_info *info1 = fwts_list_data(fan_info *, item1); if (!info1->type) continue; fwts_list_foreach(item2, fans2) { fan_info *info2 = fwts_list_data(fan_info *, item2); if (!info2->type) continue; if (strcmp(info1->type, "Processor") == 0) { if (strcmp(info1->name, info2->name) == 0) { if (info2->cur_state < info1->cur_state) { fwts_failed(fw, LOG_LEVEL_HIGH, "FanCurStateDecreased", "Fan %s current state decreased from %d to %d " "while CPUs were busy, expected an increase.", info1->name, info1->cur_state, info2->cur_state); changed = true; } if (info2->cur_state > info1->cur_state) { fwts_passed(fw, "Fan %s current state increased from %d to %d " "while CPUs were busy.", info1->name, info1->cur_state, info2->cur_state); changed = true; } if (info2->cur_state == info1->cur_state) fwts_log_info(fw, "Fan %s current state did not change from value %d " "while CPUs were busy.", info1->name, info1->cur_state); } } } } if (!changed) { fwts_advice(fw, "Did not detect any change in the CPU related thermal cooling device states. " "It could be that the devices are returning static information back " "to the driver and/or the fan speed is automatically being " "controlled by firmware using System Management Mode in which case " "the kernel interfaces being examined may not work anyway."); } fwts_list_free(fans1, free_fan_info); fwts_list_free(fans2, free_fan_info); return FWTS_OK; } static fwts_framework_minor_test fan_tests[] = { { fan_test1, "Test fan status." }, { fan_test2, "Load system, check CPU fan status." }, { NULL, NULL} }; static fwts_framework_ops fan_ops = { .description = "Simple fan tests.", .minor_tests = fan_tests }; FWTS_REGISTER("fan", &fan_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH) #endif src/acpi/fpdt/000077500000000000000000000000001465205512700135255ustar00rootroot00000000000000src/acpi/fpdt/fpdt.c000066400000000000000000000157761465205512700146460ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(FPDT, &table) static void fpdt_rec_header_dump( fwts_framework *fw, const char *type_name, fwts_acpi_table_fpdt_header *header) { fwts_log_info_verbatim(fw, " %s:", type_name); fwts_log_info_simp_int(fw, " Perf Rec Type: ", header->type); fwts_log_info_simp_int(fw, " Rec Length: ", header->length); fwts_log_info_simp_int(fw, " Revision: ", header->revision); } static void fpdt_dump_raw_data( fwts_framework *fw, const uint8_t *data, const size_t length, const size_t offset) { size_t n; fwts_log_info_verbatim(fw, " Data:"); for (n = 0; n < length; n += 16) { int left = length - n; char buffer[128]; fwts_dump_raw_data(buffer, sizeof(buffer), data + n, n + offset, left > 16 ? 16 : left); fwts_log_info_verbatim(fw, "%s", buffer); } } static int fpdt_test1(fwts_framework *fw) { uint8_t *data = (uint8_t *)table->data, *ptr = data; fwts_acpi_table_header *header= (fwts_acpi_table_header *)table->data; bool passed = true; const size_t fpdt_hdr_len = sizeof(fwts_acpi_table_fpdt_header); /* Size sanity, got enough table to get initial header */ if (!fwts_acpi_table_length(fw, "FPDT", table->length, sizeof(fwts_acpi_table_header))) { passed = false; goto done; } fwts_acpi_revision_check("FPDT", header->revision, 1, &passed); ptr += sizeof(fwts_acpi_table_header); while (ptr < data + table->length) { fwts_acpi_table_fpdt_header *fpdt = (fwts_acpi_table_fpdt_header *)ptr; fwts_acpi_table_fpdt_basic_boot_perf_ptr *fbbpr = (fwts_acpi_table_fpdt_basic_boot_perf_ptr *)ptr; fwts_acpi_table_fpdt_s3_perf_ptr *s3ptpr = (fwts_acpi_table_fpdt_s3_perf_ptr *)ptr; /* checking if the fpdt header fully available */ if (ptr + sizeof(fwts_acpi_table_fpdt_header) > (data + table->length)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "FPDTPerformanceRecordOutsideTable", "FPDT performance record header is not fully" "available, outside the FPDT table."); goto done; } switch (fpdt->type) { case 0x0000: /* Firmware Basic Boot Performance Pointer Record */ if (fbbpr->fpdt.length != sizeof(fwts_acpi_table_fpdt_basic_boot_perf_ptr)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "FPDTFWBootPerfPrtRecBadLength", "FPDT Firmware Basic Boot Performance Pointer Record is %" PRIu32 " bytes and should be %zu bytes in size", fbbpr->fpdt.length, sizeof(fwts_acpi_table_fpdt_basic_boot_perf_ptr)); } else { fpdt_rec_header_dump(fw, " Firmware Basic Boot Performance Pointer Record", fpdt); fwts_log_info_simp_int(fw, " Reserved: ", fbbpr->reserved); fwts_log_info_simp_int(fw, " FBPT Pointer: ", fbbpr->fbpt_addr); fwts_acpi_reserved_zero("FPDT", "Reserved", fbbpr->reserved, &passed); /* * For the moment, only dump the 64-bit processor-relative physical address * of the Firmware Basic Boot Performance Table, should also get and check * the table from the address */ fwts_log_info(fw, "Note: currently fwts does not check FBPT validity and the associated data"); } fwts_acpi_fixed_value(fw, LOG_LEVEL_MEDIUM, "FPDT", "FBPT Revision", fbbpr->fpdt.revision, 1, &passed); /* Spec doesn't mention Reserved field should be 0 or not, skip checking the reserved field */ break; case 0x0001: /* S3 Performance Table Pointer Record */ if (s3ptpr->fpdt.length != sizeof(fwts_acpi_table_fpdt_s3_perf_ptr)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "FPDTS3PerfPrtRecBadLength", "FPDT S3 Performance Table Pointer Record is %" PRIu32 " bytes and should be %zu bytes in size", s3ptpr->fpdt.length, sizeof(fwts_acpi_table_fpdt_s3_perf_ptr)); } else { fpdt_rec_header_dump(fw, "S3 Performance Table Pointer Record", fpdt); fwts_log_info_simp_int(fw, " Reserved: ", s3ptpr->reserved); fwts_log_info_simp_int(fw, " S3PT Pointer: ", s3ptpr->s3pt_addr); fwts_acpi_reserved_zero("FPDT", "Reserved", s3ptpr->reserved, &passed); /* * For the moment, only dump 64-bit processor-relative physical * address of the S3 Performance Table, should also get and check * the table from the address */ fwts_log_info(fw, "Note: currently fwts does not check S3PT validity and the associated data"); } fwts_acpi_fixed_value(fw, LOG_LEVEL_MEDIUM, "FPDT", "S3PT Revision", s3ptpr->fpdt.revision, 1, &passed); /* Spec doesn't mention Reserved field should be 0 or not, skip checking the reserved field */ break; case 0x0002 ... 0x0fff: fpdt_rec_header_dump(fw, "Reserved for ACPI specification use", fpdt); fpdt_dump_raw_data(fw, ptr + fpdt_hdr_len, fpdt->length - fpdt_hdr_len, ptr + fpdt_hdr_len - data); break; case 0x1000 ... 0x1fff: fpdt_rec_header_dump(fw, "Reserved for Platform Vendor use", fpdt); fpdt_dump_raw_data(fw, ptr + fpdt_hdr_len, fpdt->length - fpdt_hdr_len, ptr + fpdt_hdr_len - data); break; case 0x2000 ... 0x2fff: fpdt_rec_header_dump(fw, "Reserved for Hardware Vendor use", fpdt); fpdt_dump_raw_data(fw, ptr + fpdt_hdr_len, fpdt->length - fpdt_hdr_len, ptr + fpdt_hdr_len - data); break; case 0x3000 ... 0x3fff: fpdt_rec_header_dump(fw, "Reserved for BIOS Vendor use", fpdt); fpdt_dump_raw_data(fw, ptr + fpdt_hdr_len, fpdt->length - fpdt_hdr_len, ptr + fpdt_hdr_len - data); break; default: /* For future use */ passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "FPDTPerformanceRecordTypeInvalid", "FPDT Performance Record Type is 0x%4.4" PRIx16 " which is a reserved type for future use only", fpdt->type); break; } ptr += fpdt->length; /* terminate loop for buggy BIOS */ if (fpdt->length == 0) break; } done: if (passed) fwts_passed(fw, "No issues found in FPDT table."); return FWTS_OK; } static fwts_framework_minor_test fpdt_tests[] = { { fpdt_test1, "FPDT Firmware Performance Data Table test." }, { NULL, NULL } }; static fwts_framework_ops fpdt_ops = { .description = "FPDT Firmware Performance Data Table test.", .init = FPDT_init, .minor_tests = fpdt_tests }; FWTS_REGISTER("fpdt", &fpdt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/gpedump/000077500000000000000000000000001465205512700142315ustar00rootroot00000000000000src/acpi/gpedump/gpedump.c000066400000000000000000000127201465205512700160400ustar00rootroot00000000000000/* * Copyright (C) 2014-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include "fwts_acpi_object_eval.h" #include "acpi.h" #include "aclocal.h" #include "acobject.h" #include "acstruct.h" #include "acglobal.h" /* * gpedump_init() * initialize ACPI */ static int gpedump_init(fwts_framework *fw) { if (fwts_acpi_init(fw) != FWTS_OK) { fwts_log_error(fw, "Cannot initialise ACPI."); return FWTS_ERROR; } return FWTS_OK; } /* * gpedump_deinit * de-intialize ACPI */ static int gpedump_deinit(fwts_framework *fw) { return fwts_acpi_deinit(fw); } static void gpu_dump_gpes( fwts_framework *fw, uint32_t reg, ACPI_GPE_BLOCK_INFO *gpe_block_info) { uint32_t i, gpe = ACPI_GPE_REGISTER_WIDTH * reg; for (i = 0; i < ACPI_GPE_REGISTER_WIDTH; i++, gpe++) { char buf[80]; uint32_t n; ACPI_GPE_NOTIFY_INFO *notify_info; ACPI_GPE_EVENT_INFO *GpeEventInfo = &gpe_block_info->EventInfo[gpe]; if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) == ACPI_GPE_DISPATCH_NONE) continue; switch (GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) { case ACPI_GPE_DISPATCH_NONE: strncpy(buf, "none", sizeof(buf)); break; case ACPI_GPE_DISPATCH_HANDLER: strncpy(buf, "handler", sizeof(buf)); break; case ACPI_GPE_DISPATCH_METHOD: strncpy(buf, "method", sizeof(buf)); break; case ACPI_GPE_DISPATCH_NOTIFY: for (n = 0, notify_info = GpeEventInfo->Dispatch.NotifyList; notify_info; notify_info = notify_info->Next) n++; snprintf(buf, sizeof(buf), "notifies %" PRIu32 " devices", n); break; default: strncpy(buf, "unknown", sizeof(buf)); break; } fwts_log_info_verbatim(fw, " GPE 0x%2.2" PRIx8 ":", gpe_block_info->BlockBaseNumber + gpe); fwts_log_info_verbatim(fw, " Flags: 0x%2.2" PRIx8 " (trigger: %s, wake: %s)", GpeEventInfo->Flags, (GpeEventInfo->Flags & ACPI_GPE_LEVEL_TRIGGERED) ? "level" : "edge", (GpeEventInfo->Flags & ACPI_GPE_CAN_WAKE) ? "can wake" : "run only"); fwts_log_info_verbatim(fw, " Dispatch: %s", buf); } } static void gpedump_block( fwts_framework *fw, ACPI_GPE_XRUPT_INFO *gpe_xrupt_info, ACPI_GPE_BLOCK_INFO *gpe_block_info, uint32_t block) { ACPI_BUFFER buffer; ACPI_STATUS Status; uint32_t reg; char name[128]; buffer.Length = sizeof(name); buffer.Pointer = name; Status = AcpiGetName (gpe_block_info->Node, ACPI_FULL_PATHNAME, &buffer); if (ACPI_FAILURE (Status)) strncpy(name, "unknown", sizeof(name)); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "Block %" PRIu32": DeviceNode %s (%s)\n", block, name, gpe_block_info->Node == AcpiGbl_FadtGpeDevice ? "FADT Defined GPE Block" : "GPE Block Device"); fwts_log_info_verbatim(fw, " GPE range: 0x%2.2" PRIx8 " to 0x%2.2" PRIx8 " on interrupt %" PRIu32 "\n", (uint8_t)gpe_block_info->BlockBaseNumber, (uint8_t)gpe_block_info->BlockBaseNumber + (gpe_block_info->GpeCount - 1), (uint32_t)gpe_xrupt_info->InterruptNumber); fwts_log_info_verbatim(fw, " GPE count: %" PRIu32 " (%" PRIu32 " registers)\n", (uint32_t)gpe_block_info->GpeCount, (uint32_t)gpe_block_info->RegisterCount); for (reg = 0; reg < gpe_block_info->RegisterCount; reg++) { ACPI_GPE_REGISTER_INFO *gpe_reg_info = &gpe_block_info->RegisterInfo[reg]; fwts_log_nl(fw); fwts_log_info_verbatim(fw, " Register %" PRIu32 ": (GPE 0x%2.2" PRIx8 "-0x%2.2" PRIx8 ")", reg, gpe_reg_info->BaseGpeNumber, gpe_reg_info->BaseGpeNumber + (ACPI_GPE_REGISTER_WIDTH - 1)); fwts_log_info_verbatim(fw, " Run Enable: 0x%2.2" PRIx8, gpe_reg_info->EnableForRun); fwts_log_info_verbatim(fw, " Wake Enable: 0x%2.2" PRIx8, gpe_reg_info->EnableForWake); fwts_log_info_verbatim(fw, " Status Address: 0x%8.8" PRIx64, (uint64_t)gpe_reg_info->StatusAddress.Address); fwts_log_info_verbatim(fw, " Enable Address: 0x%8.8" PRIx64, (uint64_t)gpe_reg_info->EnableAddress.Address); gpu_dump_gpes(fw, reg, gpe_block_info); } } static int gpedump_test1(fwts_framework *fw) { ACPI_GPE_XRUPT_INFO *gpe_xrupt_info = AcpiGbl_GpeXruptListHead; uint32_t block = 0; while (gpe_xrupt_info) { ACPI_GPE_BLOCK_INFO *gpe_block_info = gpe_xrupt_info->GpeBlockListHead; while (gpe_block_info) { gpedump_block(fw, gpe_xrupt_info, gpe_block_info, block); block++; gpe_block_info = gpe_block_info->Next; } gpe_xrupt_info = gpe_xrupt_info->Next; } return FWTS_OK; } static fwts_framework_minor_test gpedump_tests[] = { { gpedump_test1, "Dump GPEs." }, { NULL, NULL } }; static fwts_framework_ops gpedump_ops = { .description = "Dump GPEs.", .init = gpedump_init, .deinit = gpedump_deinit, .minor_tests = gpedump_tests }; FWTS_REGISTER("gpedump", &gpedump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS) #endif src/acpi/gtdt/000077500000000000000000000000001465205512700135325ustar00rootroot00000000000000src/acpi/gtdt/gtdt.c000066400000000000000000000177261465205512700146550ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(GTDT, &table) /* * GTDT Generic Timer Description Table */ static int gtdt_test1(fwts_framework *fw) { bool passed = true; uint8_t *ptr, *end_ptr; uint32_t i = 0, n; const fwts_acpi_table_gtdt *gtdt = (const fwts_acpi_table_gtdt *)table->data; if (gtdt->cnt_control_base_phys_addr == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "GTDTInvalidBaseAddr", "The 64-bit physical address at which the " "Counter Control block should not be Zero. " "If not provided, this field must be 0xFFFFFFFFFFFFFFFF"); } if (gtdt->cnt_read_base_phys_addr == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "GTDTInvalidBaseAddr", "The 64-bit physical address at which the " "Counter Read block Read block should not be Zero. " "If not provided, this field must be 0xFFFFFFFFFFFFFFFF"); } fwts_acpi_reserved_bits("GTDT", "Flags", gtdt->virtual_timer_flags, 3, 31, &passed); ptr = (uint8_t *)table->data + gtdt->platform_timer_offset; n = gtdt->platform_timer_count; end_ptr = (uint8_t *)table->data + table->length; while ((i < n) && (ptr < end_ptr)) { uint32_t len, j; fwts_acpi_table_gtdt_block *block; fwts_acpi_table_gtdt_block_timer *block_timer; fwts_acpi_table_gtdt_watchdog *watchdog; char field[80]; switch (*ptr) { case 0x00: /* GT Block Structure */ block = (fwts_acpi_table_gtdt_block *)ptr; if (ptr + 20 > end_ptr) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTShortBlock", "GTDT block is too short"); goto done; } if (block->length < 20) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTInvalidBlockLength", "GTDT block %" PRIu32 " length has in " "invalid length: %" PRIu32 " bytes", i, block->length); goto done; } if (block->physical_address == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTBlockInvalidBaseAddr", "The 64-bit physical address at which the " "GT CntCTLBase Block shouldn't be zero."); } if (block->reserved) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTInvalidBlockReserved", "GTDT block %" PRIu32 " reserved is " "non-zero, got 0x%" PRIx8, i, block->reserved); } if (block->block_timer_count > 8) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTInvalidBlockTimerCount", "GTDT block %" PRIu32 " timer count " "is too large, %" PRIu32 ", must be <= 8", i, block->block_timer_count); break; } len = (block->block_timer_count * 40) + 20; if (len != block->length) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTInvalidTimerCountOrLength", "GTDT block %" PRIu32 " timer count %" PRIu32 " and block length %" PRIu32 ", " "expected length of %" PRIu32, i, block->block_timer_count, block->length, len); /* length may be inconsistent, don't trust it so stop here */ goto done; } block_timer = &block->block_timers[0]; for (j = 0; j < block->block_timer_count; j++) { if (((uint8_t *)block_timer + sizeof(*block_timer)) > end_ptr) break; if (block_timer->frame_number > 7) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTInvalidGTFrameNumber", "GTDT block frame number is %" PRIu8 ", expecting 0..7", block_timer->frame_number); } if (block_timer->reserved[0] | block_timer->reserved[1] | block_timer->reserved[2]) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTBlockTimerReservedNotZero", "GTDT block %" PRIu32 " timer reserved " "space is not zero, got 0x" "%" PRIx8 "%" PRIx8 "%" PRIx8 " instead", i, block_timer->reserved[0], block_timer->reserved[1], block_timer->reserved[2]); } if (block_timer->cntbase == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTGTxInvalidBaseAddr", "Physical Address at which the " "CntBase block for GTx shouldn't be zero."); } if (block_timer->cntel0base == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "GTDTGTxInvalidBaseAddr", "Physical Address at which the " "CntEL0Base block for GTx should not be Zero. " "If not provided, this field must be 0xFFFFFFFFFFFFFFFF"); } snprintf(field, sizeof(field), "block %" PRIu32 " physical timer flags", i); fwts_acpi_reserved_bits("GTDT", field, block_timer->phys_timer_flags, 2, 31, &passed); snprintf(field, sizeof(field), "block %" PRIu32 " virtual timer flags", i); fwts_acpi_reserved_bits("GTDT", field, block_timer->virt_timer_flags, 2, 31, &passed); snprintf(field, sizeof(field), "block %" PRIu32 " common flags", i); fwts_acpi_reserved_bits("GTDT", field, block_timer->common_flags, 2, 31, &passed); } ptr += block->length; break; case 0x01: /* SBSA Generic Watchdog Timer Structure */ watchdog = (fwts_acpi_table_gtdt_watchdog *)ptr; if (ptr + 28 > end_ptr) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTShortWatchDogTimer", "GTDT SBSA generic watchdog timer %" PRIu32 " is too short", i); goto done; } if (watchdog->length != 28) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTInvalidWatchDogTimeLength", "GTDT SBSA generic watchdog timer %" PRIu32 " length has in invalid length: %" PRIu32 " bytes", i, watchdog->length); goto done; } if (watchdog->reserved) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTInvalidWatchDogReserved", "GTDT SBSA generic watchdog timer %" PRIu32 " reserved is non-zero, got 0x%" PRIx8, i, watchdog->reserved); } if (watchdog->refresh_frame_addr == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTInvalidWatchDogBaseAddr", "Physical Address at which the " "RefreshFrame block shouldn't be zero."); } if (watchdog->watchdog_control_frame_addr == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTInvalidWatchDogBaseAddr", "Physical Address at which the " "Watchdog Control Frame block shouldn't be zero."); } snprintf(field, sizeof(field), "SBSA generic watchdog timer %" PRIu32 " flags", i); fwts_acpi_reserved_bits("GTDT", field, watchdog->watchdog_timer_flags, 3, 31, &passed); ptr += watchdog->length; break; default: passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "GTDTInvalidType", "GTDT platform timer structure %" PRIu32 " has an invalid type: 0x%" PRIx8, i, *ptr); /* Can't determine field length, so end of parsing */ goto done; } i++; } done: if (passed) fwts_passed(fw, "No issues found in GTDT table."); return FWTS_OK; } static fwts_framework_minor_test gtdt_tests[] = { { gtdt_test1, "GTDT Generic Timer Description Table test." }, { NULL, NULL } }; static fwts_framework_ops gtdt_ops = { .description = "GTDT Generic Timer Description Table test.", .init = GTDT_init, .minor_tests = gtdt_tests }; FWTS_REGISTER("gtdt", >dt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI | FWTS_FLAG_SBBR) #endif src/acpi/hest/000077500000000000000000000000001465205512700135335ustar00rootroot00000000000000src/acpi/hest/hest.c000066400000000000000000001100131465205512700146360ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(HEST, &table) /* * ACPI Section 18.3.2.1 IA-32 Architecture Machine Check Exception */ static void hest_check_ia32_arch_machine_check_exception( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { ssize_t i, total_size; uint64_t reserved2; fwts_acpi_table_hest_ia32_machine_check_exception *exception = (fwts_acpi_table_hest_ia32_machine_check_exception *)*data; if (*length < (ssize_t)sizeof(fwts_acpi_table_hest_ia32_machine_check_exception)) { fwts_failed(fw, LOG_LEVEL_HIGH, "HESTIA32MachineCheckTooShort", "HEST IA-32 Architecture Machine Check Exception " "too short, expecting %zu bytes, " "instead got %zu bytes", sizeof(fwts_acpi_table_hest_ia32_machine_check_exception), *length); *passed = false; *length = 0; /* Forces an early abort */ return; } total_size = sizeof(fwts_acpi_table_hest_ia32_machine_check_exception) + (exception->number_of_hardware_banks * sizeof(fwts_acpi_table_hest_machine_check_bank)); if (*length < total_size) { *passed = false; *length = 0; /* Forces an early abort */ return; } reserved2 = exception->reserved2[0] + ((uint64_t) exception->reserved2[1] << 8) + ((uint64_t) exception->reserved2[2] << 16) + ((uint64_t) exception->reserved2[3] << 24) + ((uint64_t) exception->reserved2[4] << 32) + ((uint64_t) exception->reserved2[5] << 40) + ((uint64_t) exception->reserved2[6] << 48); fwts_log_info_verbatim(fw, "HEST IA-32 Architecture Machine Check Exception:"); fwts_log_info_simp_int(fw, " Type: ", exception->type); fwts_log_info_simp_int(fw, " Source ID: ", exception->source_id); fwts_log_info_simp_int(fw, " Reserved: ", exception->reserved1); fwts_log_info_simp_int(fw, " Flags: ", exception->flags); fwts_log_info_simp_int(fw, " Enabled: ", exception->enabled); fwts_log_info_simp_int(fw, " Number of Records: ", exception->number_of_records_to_preallocate); fwts_log_info_simp_int(fw, " Max Sections Per Record: ", exception->max_sections_per_record); fwts_log_info_simp_int(fw, " Global Capability Data: ", exception->global_capability_init_data); fwts_log_info_simp_int(fw, " Global Control Data: ", exception->global_control_init_data); fwts_log_info_simp_int(fw, " Number of Hardware Banks: ", exception->number_of_hardware_banks); fwts_log_info_simp_int(fw, " Reserved: ", reserved2); fwts_log_nl(fw); fwts_acpi_reserved_zero("HEST", "MCE Reserved1", exception->reserved1, passed); if (exception->flags & ~0x5) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "HESTIA32FlagsReserved", "HEST IA-32 Architecture MCE Flags Reserved bits " "[1] & [3:7] must be zero, instead got 0x%" PRIx8, exception->flags); *passed = false; } else if (exception->flags == 0x5) { fwts_failed(fw, LOG_LEVEL_HIGH, "HESTIA32BadFlags", "HEST IA-32 Architecture MCE Flags bits [0] & [2] " "are mutually exclusive, instead got 0x%" PRIx8, exception->flags); *passed = false; } fwts_acpi_reserved_zero("HEST", "MCE Reserved2", reserved2, passed); for (i = 0; i < exception->number_of_hardware_banks; i++) { fwts_acpi_table_hest_machine_check_bank *bank = &exception->bank[i]; fwts_log_info_verbatim(fw, " HEST IA-32 Architecture Machine Check Exception Bank %zd", i); fwts_log_info_simp_int(fw, " Bank Number: ", bank->bank_number); fwts_log_info_simp_int(fw, " Clear Status On Init.: ", bank->clear_status_on_initialization); fwts_log_info_simp_int(fw, " Status Data Format: ", bank->status_data_format); fwts_log_info_simp_int(fw, " Reserved: ", bank->reserved); fwts_log_info_simp_int(fw, " Control Reg. MSR Addr: ", bank->control_register_msr_address); fwts_log_info_simp_int(fw, " Control Init Data: ", bank->control_init_data); fwts_log_info_simp_int(fw, " Status Reg. MSR Addr: ", bank->status_register_msr_address); fwts_log_info_simp_int(fw, " Addr Reg. MSR Addr: ", bank->address_register_msr_address); fwts_log_info_simp_int(fw, " Misc Reg. MSR Addr: ", bank->misc_register_msr_address); fwts_log_nl(fw); if (bank->clear_status_on_initialization > 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTIA32InvalidClearStatusOnInit", "HEST Machine Check Exception Bank Clear Status On Initialization " "has value 0x%" PRIx8 " and only valid values are " "0x00 (Clear) or 0x01 (Don't Clear)", bank->clear_status_on_initialization); } if (bank->status_data_format > 2) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTIA32InvalidBankStatusDataFormat", "HEST Machine Check Exception Bank Status Data Format " "has value 0x%" PRIx8 " and only valid values are " "0x00 (IA-32 MCA), 0x01 (Intel 64 MCA) or " "0x02 (AMD64 MCA).", bank->status_data_format); } } *length -= total_size; *data += total_size; } /* * ACPI Section 18.3.2.2 IA-32 Architecture Corrected Machine Check */ static void hest_check_ia32_arch_corrected_machine_check( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { ssize_t i, total_size; uint32_t reserved2; fwts_acpi_table_hest_ia32_corrected_machine_check *check = (fwts_acpi_table_hest_ia32_corrected_machine_check *)*data; if (*length < (ssize_t)sizeof(fwts_acpi_table_hest_ia32_corrected_machine_check)) { fwts_failed(fw, LOG_LEVEL_HIGH, "HESTIA32CorrectedMachineCheckTooShort", "HEST IA-32 Architecture Corrected Machine Check " "too short, expecting %zu bytes, " "instead got %zu bytes", sizeof(fwts_acpi_table_hest_ia32_corrected_machine_check), *length); *passed = false; *length = 0; /* Forces an early abort */ return; } total_size = sizeof(fwts_acpi_table_hest_ia32_corrected_machine_check) + (check->number_of_hardware_banks * sizeof(fwts_acpi_table_hest_machine_check_bank)); if (*length < total_size) { *passed = false; *length = 0; /* Forces an early abort */ return; } reserved2 = check->reserved2[0] + ((uint32_t) check->reserved2[1] << 8) + ((uint32_t) check->reserved2[2] << 16); fwts_log_info_verbatim(fw, "HEST IA-32 Architecture Machine Check:"); fwts_log_info_simp_int(fw, " Type: ", check->type); fwts_log_info_simp_int(fw, " Source ID: ", check->source_id); fwts_log_info_simp_int(fw, " Reserved: ", check->reserved1); fwts_log_info_simp_int(fw, " Flags: ", check->flags); fwts_log_info_simp_int(fw, " Enabled: ", check->enabled); fwts_log_info_simp_int(fw, " Number of Records: ", check->number_of_records_to_preallocate); fwts_log_info_simp_int(fw, " Max Sections Per Record: ", check->max_sections_per_record); fwts_log_info_verbatim(fw, " Hardware Error Notification:"); fwts_log_info_simp_int(fw, " Type: ", check->notification.type); fwts_log_info_simp_int(fw, " Length: ", check->notification.length); fwts_log_info_simp_int(fw, " Config. Write. Enable: ", check->notification.configuration_write_enable); fwts_log_info_simp_int(fw, " Poll Interval: ", check->notification.poll_interval); fwts_log_info_simp_int(fw, " Interrupt Vector: ", check->notification.vector); fwts_log_info_simp_int(fw, " Sw. to Polling Value: ", check->notification.switch_to_polling_threshold_value); fwts_log_info_simp_int(fw, " Sw. to Polling Window: ", check->notification.switch_to_polling_threshold_window); fwts_log_info_simp_int(fw, " Error: Thresh. Value: ", check->notification.error_threshold_value); fwts_log_info_simp_int(fw, " Error: Thresh. Window: ", check->notification.error_threshold_window); fwts_log_info_simp_int(fw, " Number of Hardware Banks: ", check->number_of_hardware_banks); fwts_log_info_simp_int(fw, " Reserved: ", reserved2); fwts_log_nl(fw); fwts_acpi_reserved_zero("HEST", "Machine Check Reserved1", check->reserved1, passed); if (check->flags & ~0x5) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "HESTIA32CorrectedMachineCheckFlagsReserved", "HEST IA-32 Architecture MC Flags Reserved bits " "[1] & [3:7] must be zero, instead got 0x%" PRIx8, check->flags); *passed = false; } else if (check->flags == 0x5) { fwts_failed(fw, LOG_LEVEL_HIGH, "HESTIA32CorrectedMachineCheckBadFlags", "HEST IA-32 Architecture MC Flags bits [0] & [2] " "are mutually exclusive, instead got 0x%" PRIx8, check->flags); *passed = false; } if (check->notification.type > 11) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidHardwareErrorNotificationType", "HEST Hardware Error Notification Type is " "an invalid reserved value of %2.2" PRIu8 "," "expecting value 0 to 11", check->notification.type); } fwts_acpi_reserved_zero("HEST", "Machine Check Reserved2", reserved2, passed); for (i = 0; i < check->number_of_hardware_banks; i++) { fwts_acpi_table_hest_machine_check_bank *bank = &check->bank[i]; fwts_log_info_verbatim(fw, " HEST IA-32 Architecture Machine Check Bank %zd", i); fwts_log_info_simp_int(fw, " Bank Number: ", bank->bank_number); fwts_log_info_simp_int(fw, " Clear Status On Init.: ", bank->clear_status_on_initialization); fwts_log_info_simp_int(fw, " Status Data Format: ", bank->status_data_format); fwts_log_info_simp_int(fw, " Reserved: ", bank->reserved); fwts_log_info_simp_int(fw, " Control Reg. MSR Addr: ", bank->control_register_msr_address); fwts_log_info_simp_int(fw, " Control Init Data: ", bank->control_init_data); fwts_log_info_simp_int(fw, " Status Reg. MSR Addr: ", bank->status_register_msr_address); fwts_log_info_simp_int(fw, " Addr Reg. MSR Addr: ", bank->address_register_msr_address); fwts_log_info_simp_int(fw, " Misc Reg. MSR Addr: ", bank->misc_register_msr_address); fwts_log_nl(fw); if (bank->clear_status_on_initialization > 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTIA32InvalidClearStatusOnInit", "HEST IA-32 Architecture Machine Check Bank Clear Status On Initialization " "has value 0x%" PRIx8 " and only valid values are " "0x00 (Clear) or 0x01 (Don't Clear)", bank->clear_status_on_initialization); } if (bank->status_data_format > 2) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTIA32InvalidBankStatusDataFormat", "HEST IA-32 Architecture Machine Check Bank Status Data Format " "has value 0x%" PRIx8 " and only valid values are " "0x00 (IA-32 MCA), 0x01 (Intel 64 MCA) or " "0x02 (AMD64 MCA).", bank->status_data_format); } } *length -= total_size; *data += total_size; } /* * ACPI Section 18.3.2.2.1, IA-32 Architecture Non-Maskable Interrupt * - note, this should be a higher section number, the ACPI 6.0 * specification seems to have numbered this incorrectly. */ static void hest_check_acpi_table_hest_nmi_error( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { fwts_acpi_table_hest_nmi_error *err = (fwts_acpi_table_hest_nmi_error *)*data; if (*length < (ssize_t)sizeof(fwts_acpi_table_hest_nmi_error)) { fwts_failed(fw, LOG_LEVEL_HIGH, "HESTIA-32ArchitectureNmiTooShort", "HEST IA-32 Architecture Non-Mastable Interrupt " "too short, expecting %zu bytes, " "instead got %zu bytes", sizeof(fwts_acpi_table_hest_nmi_error), *length); *passed = false; *length = 0; /* Forces an early abort */ return; } fwts_log_info_verbatim(fw, "HEST IA-32 Architecture Non-Maskable Interrupt:"); fwts_log_info_simp_int(fw, " Type: ", err->type); fwts_log_info_simp_int(fw, " Source ID: ", err->source_id); fwts_log_info_simp_int(fw, " Reserved: ", err->reserved1); fwts_log_info_simp_int(fw, " Number of Records: ", err->number_of_records_to_preallocate); fwts_log_info_simp_int(fw, " Max Sections Per Record: ", err->max_sections_per_record); fwts_log_info_simp_int(fw, " Max Raw Data Length: ", err->max_raw_data_length); fwts_log_nl(fw); fwts_acpi_reserved_zero("HEST", "NMI Reserved", err->reserved1, passed); if (err->number_of_records_to_preallocate < 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidRecordsToPreallocate", "HEST IA-32 Architecture NMI Number of Records " "to Preallocate is 0x%" PRIx16 " and must be " "more than zero.", err->number_of_records_to_preallocate); } if (err->max_sections_per_record < 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidMaxSectionsPerRecord", "HEST A-32 Architecture NMI Max Sections Per " "Record is 0x%" PRIx16 " and must be " "more than zero.", err->max_sections_per_record); } *length -= sizeof(fwts_acpi_table_hest_nmi_error); *data += sizeof(fwts_acpi_table_hest_nmi_error); } /* * ACPI Section 18.3.2.3 PCI Express Root Port AER Structure */ static void hest_check_pci_express_root_port_aer( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { fwts_acpi_table_hest_pci_express_root_port_aer *aer = (fwts_acpi_table_hest_pci_express_root_port_aer *)*data; if (*length < (ssize_t)sizeof(fwts_acpi_table_hest_pci_express_root_port_aer)) { fwts_failed(fw, LOG_LEVEL_HIGH, "HESTPciExpressRootPortAerTooShort", "HEST PCI Express Root Port AER " "too short, expecting %zu bytes, " "instead got %zu bytes", sizeof(fwts_acpi_table_hest_pci_express_root_port_aer), *length); *passed = false; *length = 0; /* Forces an early abort */ return; } fwts_log_info_verbatim(fw, "HEST PCI Express Root Port AER:"); fwts_log_info_simp_int(fw, " Type: ", aer->type); fwts_log_info_simp_int(fw, " Source ID: ", aer->source_id); fwts_log_info_simp_int(fw, " Reserved: ", aer->reserved1); fwts_log_info_simp_int(fw, " Flags: ", aer->flags); fwts_log_info_simp_int(fw, " Enabled: ", aer->enabled); fwts_log_info_simp_int(fw, " Number of Records: ", aer->number_of_records_to_preallocate); fwts_log_info_simp_int(fw, " Max Sections Per Record: ", aer->max_sections_per_record); fwts_log_info_simp_int(fw, " Bus: ", aer->bus); fwts_log_info_simp_int(fw, " Device: ", aer->device); fwts_log_info_simp_int(fw, " Function: ", aer->function); fwts_log_info_simp_int(fw, " Device Control: ", aer->device_control); fwts_log_info_simp_int(fw, " Reserved: ", aer->reserved2); fwts_log_info_simp_int(fw, " Uncorrectable Mask: ", aer->uncorrectable_error_mask); fwts_log_info_simp_int(fw, " Uncorrectable Severity: ", aer->uncorrectable_error_severity); fwts_log_info_simp_int(fw, " Correctable Error Mask: ", aer->correctable_error_mask); fwts_log_info_simp_int(fw, " Advanced Capabilities: ", aer->advanced_error_capabilities_and_control); fwts_log_info_simp_int(fw, " Root Error Command: ", aer->root_error_command); fwts_log_nl(fw); fwts_acpi_reserved_zero("HEST", "PCI Express Root Port Reserved1", aer->reserved1, passed); fwts_acpi_reserved_bits("HEST", "PCI Express Root Port Flags", aer->flags, 2, 7, passed); fwts_acpi_reserved_zero("HEST", "PCI Express Root Port Reserved2", aer->reserved2, passed); if (aer->number_of_records_to_preallocate < 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidRecordsToPreallocate", "HEST PCI Express Root Port Number of Records " "to Preallocate is 0x%" PRIx16 " and must be " "more than zero.", aer->number_of_records_to_preallocate); } if (aer->max_sections_per_record < 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidMaxSectionsPerRecord", "HEST PCI Express Root Port Max Sections Per " "Record is 0x%" PRIx16 " and must be " "more than zero.", aer->max_sections_per_record); } *length -= sizeof(fwts_acpi_table_hest_pci_express_root_port_aer); *data += sizeof(fwts_acpi_table_hest_pci_express_root_port_aer); } /* * ACPI Section 18.3.2.4 PCI Express Device AER Structure */ static void hest_check_pci_express_device_aer( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { fwts_acpi_table_hest_pci_express_device_aer *aer = (fwts_acpi_table_hest_pci_express_device_aer *)*data; if (*length < (ssize_t)sizeof(fwts_acpi_table_hest_pci_express_device_aer)) { fwts_failed(fw, LOG_LEVEL_HIGH, "HESTPciExpressDeviceAerTooShort", "HEST PCI Express Device AER " "too short, expecting %zu bytes, " "instead got %zu bytes", sizeof(fwts_acpi_table_hest_pci_express_device_aer), *length); *passed = false; *length = 0; /* Forces an early abort */ return; } fwts_log_info_verbatim(fw, "HEST PCI Express Device AER:"); fwts_log_info_simp_int(fw, " Type: ", aer->type); fwts_log_info_simp_int(fw, " Source ID: ", aer->source_id); fwts_log_info_simp_int(fw, " Reserved: ", aer->reserved1); fwts_log_info_simp_int(fw, " Flags: ", aer->flags); fwts_log_info_simp_int(fw, " Enabled: ", aer->enabled); fwts_log_info_simp_int(fw, " Number of Records: ", aer->number_of_records_to_preallocate); fwts_log_info_simp_int(fw, " Max Sections Per Record: ", aer->max_sections_per_record); fwts_log_info_simp_int(fw, " Bus: ", aer->bus); fwts_log_info_simp_int(fw, " Device: ", aer->device); fwts_log_info_simp_int(fw, " Function: ", aer->function); fwts_log_info_simp_int(fw, " Device Control: ", aer->device_control); fwts_log_info_simp_int(fw, " Uncorrectable Mask: ", aer->uncorrectable_error_mask); fwts_log_info_simp_int(fw, " Uncorrectable Severity: ", aer->uncorrectable_error_severity); fwts_log_info_simp_int(fw, " Correctable Error Mask: ", aer->correctable_error_mask); fwts_log_info_simp_int(fw, " Advanced Capabilities: ", aer->advanced_error_capabilities_and_control); fwts_log_nl(fw); fwts_acpi_reserved_zero("HEST", "PCI Express Device Reserved1", aer->reserved1, passed); fwts_acpi_reserved_bits("HEST", "PCI Express Device Flags", aer->flags, 2, 7, passed); fwts_acpi_reserved_zero("HEST", "PCI Express Device Reserved2", aer->reserved2, passed); if (aer->number_of_records_to_preallocate < 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidRecordsToPreallocate", "HEST PCI Express Device Number of Records " "to Preallocate is 0x%" PRIx16 " and must be " "more than zero.", aer->number_of_records_to_preallocate); } if (aer->max_sections_per_record < 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidMaxSectionsPerRecord", "HEST PCI Express Device Max Sections Per " "Record is 0x%" PRIx16 " and must be " "more than zero.", aer->max_sections_per_record); } *length -= sizeof(fwts_acpi_table_hest_pci_express_device_aer); *data += sizeof(fwts_acpi_table_hest_pci_express_device_aer); } /* * ACPI Section 18.3.2.5 PCI Express/PCI-X Bridge AER Structure */ static void hest_heck_pci_express_bridge_aer( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { fwts_acpi_table_hest_pci_express_bridge_aer *aer = (fwts_acpi_table_hest_pci_express_bridge_aer *)*data; if (*length < (ssize_t)sizeof(fwts_acpi_table_hest_pci_express_bridge_aer)) { fwts_failed(fw, LOG_LEVEL_HIGH, "HESTPciExpressBridgeAerTooShort", "HEST PCI Express Bridge AER " "too short, expecting %zu bytes, " "instead got %zu bytes", sizeof(fwts_acpi_table_hest_pci_express_bridge_aer), *length); *passed = false; *length = 0; /* Forces an early abort */ return; } fwts_log_info_verbatim(fw, "HEST PCI Express Bridge AER:"); fwts_log_info_simp_int(fw, " Type: ", aer->type); fwts_log_info_simp_int(fw, " Source ID: ", aer->source_id); fwts_log_info_simp_int(fw, " Reserved: ", aer->reserved1); fwts_log_info_simp_int(fw, " Flags: ", aer->flags); fwts_log_info_simp_int(fw, " Enabled: ", aer->enabled); fwts_log_info_simp_int(fw, " Number of Records: ", aer->number_of_records_to_preallocate); fwts_log_info_simp_int(fw, " Max Sections Per Record: ", aer->max_sections_per_record); fwts_log_info_simp_int(fw, " Bus: ", aer->bus); fwts_log_info_simp_int(fw, " Device: ", aer->device); fwts_log_info_simp_int(fw, " Function: ", aer->function); fwts_log_info_simp_int(fw, " Device Control: ", aer->device_control); fwts_log_info_simp_int(fw, " Reserved: ", aer->reserved2); fwts_log_info_simp_int(fw, " Uncorrectable Mask: ", aer->uncorrectable_error_mask); fwts_log_info_simp_int(fw, " Uncorrectable Severity: ", aer->uncorrectable_error_severity); fwts_log_info_simp_int(fw, " Correctable Mask: ", aer->correctable_error_mask); fwts_log_info_simp_int(fw, " Advanced Capabilities: ", aer->advanced_error_capabilities_and_control); fwts_log_info_simp_int(fw, " 2nd Uncorrectable Mask: ", aer->secondary_uncorrectable_error_mask); fwts_log_info_simp_int(fw, " 2nd Uncurrectable Svrity: ", aer->secondary_uncorrectable_error_severity); fwts_log_info_simp_int(fw, " 2nd Advanced Capabilities:", aer->secondary_advanced_error_capabilities_and_control); fwts_log_nl(fw); fwts_acpi_reserved_zero("HEST", "PCI Express Bridge Reserved1", aer->reserved1, passed); fwts_acpi_reserved_bits("HEST", "PCI Express Bridge Flags", aer->flags, 2, 7, passed); fwts_acpi_reserved_zero("HEST", "PCI Express Bridge Reserved2", aer->reserved2, passed); if (aer->number_of_records_to_preallocate < 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidRecordsToPreallocate", "HEST PCI Express Bridge Number of Records " "to Preallocate is 0x%" PRIx16 " and must be " "more than zero.", aer->number_of_records_to_preallocate); } if (aer->max_sections_per_record < 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidMaxSectionsPerRecord", "HEST PCI Express Brdige Max Sections Per " "Record is 0x%" PRIx16 " and must be " "more than zero.", aer->max_sections_per_record); } *length -= sizeof(fwts_acpi_table_hest_pci_express_bridge_aer); *data += sizeof(fwts_acpi_table_hest_pci_express_bridge_aer); } /* * ACPI Section 18.3.2.6 Generic Error Source */ static void hest_check_generic_error_source( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { fwts_acpi_table_hest_generic_hardware_error_source *source = (fwts_acpi_table_hest_generic_hardware_error_source *)*data; /* Enough data for an empty machine check exceptions structure? */ if (*length < (ssize_t)sizeof(fwts_acpi_table_hest_generic_hardware_error_source)) { fwts_failed(fw, LOG_LEVEL_HIGH, "HESTGenericHardwareErrorSourceTooShort", "HEST Generic Hardware Error Source Too Short " "too short, expecting %zu bytes, " "instead got %zu bytes", sizeof(fwts_acpi_table_hest_generic_hardware_error_source), *length); *passed = false; *length = 0; /* Forces an early abort */ return; } fwts_log_info_verbatim(fw, "HEST Generic Hardware Error Source"); fwts_log_info_simp_int(fw, " Type: ", source->type); fwts_log_info_simp_int(fw, " Source ID: ", source->source_id); fwts_log_info_simp_int(fw, " Related Source ID: ", source->related_source_id); fwts_log_info_simp_int(fw, " Flags: ", source->flags); fwts_log_info_simp_int(fw, " Enabled: ", source->enabled); fwts_log_info_simp_int(fw, " Num. Records. Prealloc.: ", source->number_of_records_to_preallocate); fwts_log_info_simp_int(fw, " Max. Sections Per Rec.: ", source->max_sections_per_record); fwts_log_info_simp_int(fw, " Max. Raw Data Length: ", source->max_raw_data_length); fwts_log_info_verbatim(fw, " Error Status Address:"); fwts_log_info_simp_int(fw, " Address Space ID: ", source->error_status_address.address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", source->error_status_address.register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", source->error_status_address.register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", source->error_status_address.access_width); fwts_log_info_simp_int(fw, " Address ", source->error_status_address.address); fwts_log_info_verbatim(fw, " Hardware Error Notification:"); fwts_log_info_simp_int(fw, " Type: ", source->notification.type); fwts_log_info_simp_int(fw, " Length: ", source->notification.length); fwts_log_info_simp_int(fw, " Config. Write. Enable: ", source->notification.configuration_write_enable); fwts_log_info_simp_int(fw, " Poll Interval: ", source->notification.poll_interval); fwts_log_info_simp_int(fw, " Interrupt Vector: ", source->notification.vector); fwts_log_info_simp_int(fw, " Sw. to Polling Value: ", source->notification.switch_to_polling_threshold_value); fwts_log_info_simp_int(fw, " Sw. to Polling Window: ", source->notification.switch_to_polling_threshold_window); fwts_log_info_simp_int(fw, " Error: Thresh. Value: ", source->notification.error_threshold_value); fwts_log_info_simp_int(fw, " Error: Thresh. Window: ", source->notification.error_threshold_window); fwts_log_info_simp_int(fw, " Error Status Blk. Length: ", source->error_status_block_length); fwts_log_nl(fw); if (source->number_of_records_to_preallocate < 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidRecordsToPreallocate", "HEST Hardware Error Source Number of Records " "to Preallocate is 0x%" PRIx16 " and must be " "more than zero.", source->number_of_records_to_preallocate); } if (source->max_sections_per_record < 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidMaxSectionsPerRecord", "HEST Hardware Error Source Max Sections Per " "Record is 0x%" PRIx16 " and must be " "more than zero.", source->max_sections_per_record); } if (source->notification.type > 11) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidHardwareErrorNotificationType", "HEST Hardware Error Notification Type is " "an invalid reserved value of %2.2" PRIu8 "," "expecting value 0 to 11", source->notification.type); } fwts_acpi_reserved_bits("HEST", "HEST Configuration Write Enabled", source->notification.configuration_write_enable, 6, 31, passed); *length -= sizeof(fwts_acpi_table_hest_generic_hardware_error_source); *data += sizeof(fwts_acpi_table_hest_generic_hardware_error_source); } /* * ACPI Section 18.3.2.8 Generic Error Source version 2 */ static void hest_check_generic_error_source_v2( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { fwts_acpi_table_hest_generic_hardware_error_source_v2 *source = (fwts_acpi_table_hest_generic_hardware_error_source_v2 *)*data; /* Enough data for an empty machine check exceptions structure? */ if (*length < (ssize_t)sizeof(fwts_acpi_table_hest_generic_hardware_error_source_v2)) { fwts_failed(fw, LOG_LEVEL_HIGH, "HESTGenericHardwareErrorSourceTooShort", "HEST Generic Hardware Error Source Too Short " "too short, expecting %zu bytes, " "instead got %zu bytes", sizeof(fwts_acpi_table_hest_generic_hardware_error_source_v2), *length); *passed = false; *length = 0; /* Forces an early abort */ return; } fwts_log_info_verbatim(fw, "HEST Generic Hardware Error Source version 2"); fwts_log_info_simp_int(fw, " Type: ", source->type); fwts_log_info_simp_int(fw, " Source ID: ", source->source_id); fwts_log_info_simp_int(fw, " Related Source ID: ", source->related_source_id); fwts_log_info_simp_int(fw, " Flags: ", source->flags); fwts_log_info_simp_int(fw, " Enabled: ", source->enabled); fwts_log_info_simp_int(fw, " Num. Records. Prealloc.: ", source->number_of_records_to_preallocate); fwts_log_info_simp_int(fw, " Max. Sections Per Rec.: ", source->max_sections_per_record); fwts_log_info_simp_int(fw, " Max. Raw Data Length: ", source->max_raw_data_length); fwts_log_info_verbatim(fw, " Error Status Address:"); fwts_log_info_simp_int(fw, " Address Space ID: ", source->error_status_address.address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", source->error_status_address.register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", source->error_status_address.register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", source->error_status_address.access_width); fwts_log_info_simp_int(fw, " Address ", source->error_status_address.address); fwts_log_info_verbatim(fw, " Hardware Error Notification:"); fwts_log_info_simp_int(fw, " Type: ", source->notification.type); fwts_log_info_simp_int(fw, " Length: ", source->notification.length); fwts_log_info_simp_int(fw, " Config. Write. Enable: ", source->notification.configuration_write_enable); fwts_log_info_simp_int(fw, " Poll Interval: ", source->notification.poll_interval); fwts_log_info_simp_int(fw, " Interrupt Vector: ", source->notification.vector); fwts_log_info_simp_int(fw, " Sw. to Polling Value: ", source->notification.switch_to_polling_threshold_value); fwts_log_info_simp_int(fw, " Sw. to Polling Window: ", source->notification.switch_to_polling_threshold_window); fwts_log_info_simp_int(fw, " Error: Thresh. Value: ", source->notification.error_threshold_value); fwts_log_info_simp_int(fw, " Error: Thresh. Window: ", source->notification.error_threshold_window); fwts_log_info_simp_int(fw, " Error Status Blk. Length: ", source->error_status_block_length); fwts_log_info_verbatim(fw, " Read Ack Register:"); fwts_log_info_simp_int(fw, " Address Space ID: ", source->read_ack_register.address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", source->read_ack_register.register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", source->read_ack_register.register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", source->read_ack_register.access_width); fwts_log_info_simp_int(fw, " Address ", source->read_ack_register.address); fwts_log_info_simp_int(fw, " Read Ack Preserve: ", source->read_ack_preserve); fwts_log_info_simp_int(fw, " Read Ack Write: ", source->read_ack_write); fwts_log_nl(fw); if (source->number_of_records_to_preallocate < 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidRecordsToPreallocate", "HEST Hardware Error Source Number of Records " "to Preallocate is 0x%" PRIx16 " and must be " "more than zero.", source->number_of_records_to_preallocate); } if (source->max_sections_per_record < 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidMaxSectionsPerRecord", "HEST Hardware Error Source Max Sections Per " "Record is 0x%" PRIx16 " and must be " "more than zero.", source->max_sections_per_record); } if (source->notification.type > 11) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidHardwareErrorNotificationType", "HEST Hardware Error Notification Type is " "an invalid reserved value of %2.2" PRIu8 "," "expecting value 0 to 11", source->notification.type); } fwts_acpi_reserved_bits("HEST", "HEST Configuration Write Enabled", source->notification.configuration_write_enable, 6, 31, passed); *length -= sizeof(fwts_acpi_table_hest_generic_hardware_error_source_v2); *data += sizeof(fwts_acpi_table_hest_generic_hardware_error_source_v2); } /* * ACPI Section 18.3.2.8 */ /* * HEST Hardware Error Source Table test * ACPI section 18.3.2 "ACPI Error Source" */ static int hest_test1(fwts_framework *fw) { bool passed = true; fwts_acpi_table_hest *hest = (fwts_acpi_table_hest *)table->data; uint8_t *data = (uint8_t *)table->data; ssize_t length = (ssize_t)hest->header.length; uint32_t hest_type_00_count = 0, hest_type_01_count = 0, hest_type_02_count = 0, hest_type_11_count = 0; if (!fwts_acpi_table_length(fw, "HEST", table->length, sizeof(fwts_acpi_table_hest))) { passed = false; goto done; } fwts_log_info_verbatim(fw, "HEST Hardware Error Source Table test"); fwts_log_info_simp_int(fw, " Error Source Count: ", hest->error_source_count); fwts_log_nl(fw); data += sizeof(fwts_acpi_table_hest); length -= sizeof(fwts_acpi_table_hest); while (length > 0) { uint16_t *type = (uint16_t *)data; switch (*type) { case 0: hest_check_ia32_arch_machine_check_exception(fw, &length, &data, &passed); hest_type_00_count++; break; case 1: hest_check_ia32_arch_corrected_machine_check(fw, &length, &data, &passed); hest_type_01_count++; break; case 2: hest_check_acpi_table_hest_nmi_error(fw, &length, &data, &passed); hest_type_02_count++; break; case 6: hest_check_pci_express_root_port_aer(fw, &length, &data, &passed); break; case 7: hest_check_pci_express_device_aer(fw, &length, &data, &passed); break; case 8: hest_heck_pci_express_bridge_aer(fw, &length, &data, &passed); break; case 9: hest_check_generic_error_source(fw, &length, &data, &passed); break; case 10: hest_check_generic_error_source_v2(fw, &length, &data, &passed); break; case 11: /* the structure of type 11 is the same as type 1 */ hest_check_ia32_arch_corrected_machine_check(fw, &length, &data, &passed); hest_type_11_count++; break; default: fwts_failed(fw, LOG_LEVEL_HIGH, "HESTInvalidType", "HEST Type 0x%4.4" PRIx16 " is invalid, aborting check", *type); passed = false; length = 0; break; } } if (hest_type_00_count > 1) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTTooManyIA32ArchMachineCheckExceptions", "HEST Contained %" PRIu32 " IA32 Architecture " "Machine Check Exception Entries, maximum allowed " "per HEST is just 1.", hest_type_00_count); } if (hest_type_01_count > 1) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTTooManyIA32CorrectedMachineChecks", "HEST Contained %" PRIu32 " IA32 Architecture " "Corrected Machine Check Exception Entries, maximum allowed " "per HEST is just 1.", hest_type_01_count); } if (hest_type_02_count > 1) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HESTTooManyNmiErrors", "HEST Contained %" PRIu32 " NMI Error Entries, " "maximum allowed per HEST is just 1.", hest_type_02_count); } if (passed) fwts_passed(fw, "No issues found in HEST table."); done: return FWTS_OK; } static fwts_framework_minor_test hest_tests[] = { { hest_test1, "HEST Hardware Error Source Table test." }, { NULL, NULL } }; static fwts_framework_ops hest_ops = { .description = "HEST Hardware Error Source Table test.", .init = HEST_init, .minor_tests = hest_tests }; FWTS_REGISTER("hest", &hest_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/hmat/000077500000000000000000000000001465205512700135215ustar00rootroot00000000000000src/acpi/hmat/hmat.c000066400000000000000000000221351465205512700146210ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(HMAT, &table) static void hmat_proximity_domain_test( fwts_framework *fw, const fwts_acpi_table_hmat_proximity_domain *entry, bool *passed) { fwts_log_info_verbatim(fw, " Memory Proximity Domain Attributes (Type 0):"); fwts_log_info_simp_int(fw, " Type: ", entry->header.type); fwts_log_info_simp_int(fw, " Reserved: ", entry->header.reserved); fwts_log_info_simp_int(fw, " Length: ", entry->header.length); fwts_log_info_simp_int(fw, " Flags: ", entry->flags); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved1); fwts_log_info_simp_int(fw, " Proximity Domain for Initiator: ", entry->initiator_proximity_domain); fwts_log_info_simp_int(fw, " Proximity Domain for Memory: ", entry->memory_proximity_domain); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved2); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved3); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved4); fwts_acpi_reserved_zero("HMAT", "Reserved", entry->header.reserved, passed); fwts_acpi_reserved_bits("HMAT", "Flags", entry->flags, 1, 15, passed); fwts_acpi_reserved_zero("HMAT", "Reserved", entry->reserved1, passed); fwts_acpi_reserved_zero("HMAT", "Reserved", entry->reserved2, passed); fwts_acpi_reserved_zero("HMAT", "Reserved", entry->reserved3, passed); fwts_acpi_reserved_zero("HMAT", "Reserved", entry->reserved4, passed); } static void hmat_locality_test( fwts_framework *fw, const fwts_acpi_table_hmat_locality *entry, bool *passed) { uint32_t pd_size; uint16_t reserved1 = (entry->reserved1 << 8) + entry->min_transfer_size; fwts_log_info_verbatim(fw, " System Locality Latency and Bandwidth Information (Type 1):"); fwts_log_info_simp_int(fw, " Type: ", entry->header.type); fwts_log_info_simp_int(fw, " Reserved: ", entry->header.reserved); fwts_log_info_simp_int(fw, " Length: ", entry->header.length); fwts_log_info_simp_int(fw, " Flags: ", entry->flags); fwts_log_info_simp_int(fw, " Data Type: ", entry->data_type); if (fwts_get_acpi_version(fw) >= FWTS_ACPI_VERSION_64) { fwts_log_info_simp_int(fw, " MinTransferSize: ", entry->min_transfer_size); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved1); } else fwts_log_info_simp_int(fw, " Reserved: ", reserved1); fwts_log_info_simp_int(fw, " Number of Initiator PDs: ", entry->num_initiator); fwts_log_info_simp_int(fw, " Number of Target PDs: ", entry->num_target); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved2); fwts_log_info_simp_int(fw, " Entry Base Unit: ", entry->entry_base_unit); fwts_acpi_reserved_zero("HMAT", "Reserved", entry->header.reserved, passed); fwts_acpi_reserved_bits("HMAT", "Flags", entry->flags, 6, 7, passed); if (entry->data_type > 5) { *passed = false; fwts_failed(fw, LOG_LEVEL_CRITICAL, "HMATBadFDataType", "HMAT Data Type must be 0..5, got " "0x%2.2" PRIx8 " instead", entry->data_type); } if (fwts_get_acpi_version(fw) >= FWTS_ACPI_VERSION_64) fwts_acpi_reserved_zero("HMAT", "Reserved", entry->reserved1, passed); else fwts_acpi_reserved_zero("HMAT", "Reserved", reserved1, passed); fwts_acpi_reserved_zero("HMAT", "Reserved", entry->reserved2, passed); pd_size = (entry->num_initiator + entry->num_target) * 4 + (entry->num_initiator * entry->num_target * 2); if ((entry->header.length - sizeof(fwts_acpi_table_hmat_locality)) != pd_size) { *passed = false; fwts_failed(fw, LOG_LEVEL_LOW, "HMATBadNumProximityDomain", "HMAT length does not match to the number of Proximity Domains "); } if (!entry->entry_base_unit) { *passed = false; fwts_failed(fw, LOG_LEVEL_CRITICAL, "HMATBadBaseUnit", "HMAT Type 1 Entry Base Unit must be non-zero"); } } static void hmat_cache_test( fwts_framework *fw, const fwts_acpi_table_hmat_cache *entry, bool *passed) { fwts_log_info_verbatim(fw, " Memory Side Cache Information (Type 2):"); fwts_log_info_simp_int(fw, " Type: ", entry->header.type); fwts_log_info_simp_int(fw, " Reserved: ", entry->header.reserved); fwts_log_info_simp_int(fw, " Length: ", entry->header.length); fwts_log_info_simp_int(fw, " Proximity Domain for Memory: ", entry->memory_proximity_domain); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved1); fwts_log_info_simp_int(fw, " Memory Side Cache Size: ", entry->cache_size); fwts_log_info_simp_int(fw, " Cache Attributes: ", entry->cache_attr); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved2); fwts_log_info_simp_int(fw, " Number of SMBIOS Handles: ", entry->num_smbios); fwts_acpi_reserved_zero("HMAT", "Reserved", entry->header.reserved, passed); if ((entry->cache_attr & 0xf) > 3 || ((entry->cache_attr >> 4) & 0xf) > 3 || ((entry->cache_attr >> 8) & 0xf) > 2 || ((entry->cache_attr >> 12) & 0xf) > 2) { *passed = false; fwts_failed(fw, LOG_LEVEL_CRITICAL, "HMATBadCacheAttributeReserved", "HMAT Cache Attribute reserved values are used, got " "0x%8.8" PRIx32 " instead", entry->cache_attr); } fwts_acpi_reserved_zero("HMAT", "Reserved", entry->reserved1, passed); fwts_acpi_reserved_zero("HMAT", "Reserved", entry->reserved2, passed); if ((entry->header.length - sizeof(fwts_acpi_table_hmat_cache)) / 2 != entry->num_smbios) { *passed = false; fwts_failed(fw, LOG_LEVEL_CRITICAL, "HMATBadNumberOfSMBIOS", "HMAT length does not match to " "the number of SMBIOS handles"); } } static int hmat_test1(fwts_framework *fw) { fwts_acpi_table_hmat *hmat = (fwts_acpi_table_hmat*) table->data; fwts_acpi_table_hmat_header *entry; bool passed = true; uint32_t offset; fwts_log_info_verbatim(fw, "HMAT Heterogeneous Memory Attribute Table:"); fwts_log_info_simp_int(fw, " Reserved: ", hmat->reserved); fwts_acpi_reserved_zero("HMAT", "Reserved", hmat->reserved, &passed); entry = (fwts_acpi_table_hmat_header *) (table->data + sizeof(fwts_acpi_table_hmat)); offset = sizeof(fwts_acpi_table_hmat); while (offset < table->length) { uint32_t type_length; if (fwts_acpi_structure_length_zero(fw, "HMAT", entry->length, offset)) { passed = false; break; } if (entry->type == FWTS_HMAT_TYPE_PROXIMITY_DOMAIN) { hmat_proximity_domain_test(fw, (fwts_acpi_table_hmat_proximity_domain *) entry, &passed); type_length = sizeof(fwts_acpi_table_hmat_proximity_domain); } else if (entry->type == FWTS_HMAT_TYPE_LOCALITY) { fwts_acpi_table_hmat_locality *locality = (fwts_acpi_table_hmat_locality *) entry; hmat_locality_test(fw, (fwts_acpi_table_hmat_locality *) entry, &passed); type_length = sizeof(fwts_acpi_table_hmat_locality) + (locality->num_initiator + locality->num_target) * 4 + (locality->num_initiator * locality->num_target * 2); } else if (entry->type == FWTS_HMAT_TYPE_CACHE) { hmat_cache_test(fw, (fwts_acpi_table_hmat_cache *) entry, &passed); type_length = sizeof(fwts_acpi_table_hmat_cache) + ((fwts_acpi_table_hmat_cache *) entry)->num_smbios * 2; } else { fwts_acpi_reserved_type(fw, "HMAT", entry->type, 0, FWTS_HMAT_TYPE_RESERVED, &passed); break; } if (!fwts_acpi_structure_length(fw, "HMAT", entry->type, entry->length, type_length)) { passed = false; break; } offset += entry->length; if (fwts_acpi_structure_range(fw, "HMAT", table->length, offset)) { passed = false; break; } entry = (fwts_acpi_table_hmat_header *) (table->data + offset); fwts_log_nl(fw); } fwts_log_nl(fw); if (passed) fwts_passed(fw, "No issues found in HMAT table."); return FWTS_OK; } static fwts_framework_minor_test hmat_tests[] = { { hmat_test1, "Validate HMAT table." }, { NULL, NULL } }; static fwts_framework_ops hmat_ops = { .description = "HMAT Heterogeneous Memory Attribute Table test.", .init = HMAT_init, .minor_tests = hmat_tests }; FWTS_REGISTER("hmat", &hmat_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/hpet/000077500000000000000000000000001465205512700135305ustar00rootroot00000000000000src/acpi/hpet/hpet.c000066400000000000000000000323711465205512700146420ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corporation * Copyright (C) 2010-2024 Canonical * * This code was originally part of the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include static fwts_list *klog; #define HPET_REG_SIZE (0x400) #define MAX_CLK_PERIOD (100000000) static uint64_t hpet_base_p = 0; static void *hpet_base_v = 0; static void hpet_parse_check_base( fwts_framework *fw, const char *table, fwts_list_link *item, bool *parsed) { char *val; if ((val = strstr(fwts_text_list_text(item), "0x")) != NULL) { uint64_t address_base; char *idx = index(val, ','); if (idx) *idx = '\0'; address_base = strtoul(val, NULL, 0x10); if (hpet_base_p != 0) { *parsed = true; if (hpet_base_p != address_base) fwts_failed(fw, LOG_LEVEL_MEDIUM, "HPETBaseMismatch", "Mismatched HPET base between %s (%" PRIx64 ") " "and the kernel (0x%" PRIx64 ").", table, hpet_base_p, address_base); else fwts_passed(fw, "HPET base matches that between %s and " "the kernel (0x%" PRIx64 ").", table, hpet_base_p); } } } static void hpet_parse_device_hpet( fwts_framework *fw, const char *table, fwts_list_link *item, bool *parsed) { for (; item != NULL; item = item->next) { const char *str = fwts_text_list_text(item); if ((strstr(str, "Name") != NULL) && (strstr(str, "ResourceTemplate") != NULL)) { fwts_list_link *tmp_item = item->next; for (; tmp_item != NULL; tmp_item = tmp_item->next) { const char *tmpstr = fwts_text_list_text(tmp_item); if (strstr(tmpstr, "Memory32Fixed") != NULL) { /* Next line contains base address */ if (tmp_item->next != NULL) { hpet_parse_check_base(fw, table, tmp_item->next, parsed); return; } } else if (strstr(tmpstr, "DWordMemory") != NULL) { if (tmp_item->next != NULL && /* Granularity */ tmp_item->next->next != NULL) { /* Base address */ hpet_parse_check_base(fw, table, tmp_item->next->next, parsed); return; } } } } } } /* * check_hpet_base_dsdt() * used to parse the DSDT for HPET base info */ static void hpet_check_base_acpi_table( fwts_framework *fw, fwts_acpi_table_info *info, bool *parsed) { fwts_list *output; fwts_list_link *item; if (fwts_iasl_disassemble(fw, info, true, &output) != FWTS_OK) { fwts_iasl_deinit(); return; } if (output == NULL) return; fwts_list_foreach(item, output) if (strstr(fwts_text_list_text(item), "Device (HPET)") != NULL) hpet_parse_device_hpet(fw, info->name, item, parsed); fwts_text_list_free(output); } static int hpet_check_init(fwts_framework *fw) { if ((klog = fwts_klog_read()) == NULL) { fwts_log_error(fw, "Cannot read kernel log."); return FWTS_ERROR; } return FWTS_OK; } static int hpet_check_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); if (klog) fwts_text_list_free(klog); return FWTS_OK; } static int hpet_check_test1(fwts_framework *fw) { fwts_list_link *item; if (klog == NULL) return FWTS_ERROR; fwts_log_info(fw, "This test checks the HPET PCI BAR for each timer block " "in the timer. The base address is passed by the firmware " "via an ACPI table. IRQ routing and initialization is also " "verified by the test."); fwts_list_foreach(item, klog) { char *text = fwts_text_list_text(item); /* Old format */ if (strstr(text, "ACPI: HPET id:") != NULL) { char *str = strstr(text, "base: "); if (str) { hpet_base_p = strtoul(str+6, NULL, 0x10); fwts_passed(fw, "Found HPET base 0x%" PRIx64 " in kernel log.", hpet_base_p); break; } } /* New format */ /* [ 0.277934] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 */ if ((strstr(text, "hpet") != NULL) && (strstr(text, "IRQs") != NULL)) { char *str = strstr(text, "at MMIO "); if (str) { hpet_base_p = strtoul(str+8, NULL, 0x10); fwts_passed(fw, "Found HPET base 0x%" PRIx64 " in kernel log.", hpet_base_p); break; } } } if (hpet_base_p == 0) { fwts_log_info(fw, "No base address found for HPET in the kernel log."); return FWTS_ERROR; } return FWTS_OK; } /* * Sanity check HPET table, see: * http://www.intel.co.uk/content/www/uk/en/software-developers/software-developers-hpet-spec-1-0a.html */ static int hpet_check_test2(fwts_framework *fw) { fwts_acpi_table_info *table; fwts_acpi_table_hpet *hpet; bool passed = true; char *page_prot; if (fwts_acpi_find_table(fw, "HPET", 0, &table) != FWTS_OK) { fwts_log_error(fw, "Cannot read ACPI table HPET."); return FWTS_ERROR; } if (table == NULL) { fwts_log_error(fw, "ACPI table HPET does not exist!"); return FWTS_ERROR; } if (table->length < sizeof(fwts_acpi_table_hpet)) { fwts_failed(fw, LOG_LEVEL_HIGH, "HPETAcpiTableTooSmall", "HPET ACPI table is %zd bytes long which is smaller " "than the expected size of %zd bytes.", table->length, sizeof(fwts_acpi_table_hpet)); return FWTS_ERROR; } hpet = (fwts_acpi_table_hpet *)table->data; if (hpet->base_address.address == 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "HPETAcpiBaseAddressNull", "HPET base address in ACPI HPET table is null."); passed = false; } /* * If we've already figured out the HPET base address then * sanity check it against HPET. This should never happen. */ if ((hpet_base_p != 0) && (hpet_base_p != hpet->base_address.address)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "HPETAcpiBaseAddressDifferFromKernel", "HPET base address in ACPI HPET table " "is 0x%" PRIx64 " which is different from " "the kernel HPET base address of " "0x%" PRIx64 ".", hpet->base_address.address, hpet_base_p); passed = false; } #if 0 /* * The Intel spec states that the address space ID * must be memory or I/O space. */ if ((hpet->base_address.address_space_id != 0) && (hpet->base_address.address_space_id != 1)) { fwts_failed(fw, LOG_LEVEL_HIGH, "HPETAcpiBaseAddressSpaceId", "The HPET base address space ID was 0x%" PRIx8 ", was expecting 0 (System Memory) or " "1 (System I/O).", hpet->base_address.address_space_id); passed = false; } #endif /* * The kernel expects the HPET address space ID * to be memory. */ if (hpet->base_address.address_space_id != 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "HPETAcpiBaseAddressSpaceIdNotMemory", "The HPET base address space ID was 0x%" PRIx8 ", however, the Kernel expects the HPET address " "space ID to be 0 (System Memory). The kernel " "will not parse this and the HPET configuration " "will be ignored.", hpet->base_address.address_space_id); } /* * Some broken firmware advertises the HPET at * 0xfed0000000000000 instead of 0xfed00000. The kernel * detects this and fixes it, but even so, it is wrong * so lets check for this. */ if ((hpet->base_address.address >> 32) != 0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "HPETAcpiBaseAddressBogus", "The HPET base address is bogus: 0x%" PRIx64 ".", hpet->base_address.address); fwts_advice(fw, "Bogus HPET base address can be worked around " "by using the kernel parameter 'hpet=force' if " "the base address is 0xfed0000000000000. " "This will make the kernel shift the address " "down 32 bits to 0xfed00000."); passed = false; } if (((hpet->event_timer_block_id >> 16) & 0xffff) == 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "HPETVendorIdZero", "HPET PCI Vendor ID is 0x0000, which is invalid."); fwts_advice(fw, "The HPET specification (http://www.intel.com/hardwaredesign/hpetspec_1.pdf) " "describes the HPET table in section 3.2.4 'The ACPI " "2.0 HPET Description Table (HPET)'. The top 16 bits " "of the Event Timer Block ID specify the Vendor ID " "and this should not be zero. This won't affect the " "kernel behaviour, but should be fixed as it is an " "undefined ID value."); } /* * We don't need to check for GAS address space widths etc * since the kernel does not care and the spec doesn't * stipulate these need to be sane */ /* * Dump out HPET */ fwts_log_info_verbatim(fw, "Hardware ID of Event Block:"); fwts_log_info_verbatim(fw, " PCI Vendor ID : 0x%" PRIx32, (hpet->event_timer_block_id >> 16) & 0xffff); fwts_log_info_verbatim(fw, " Legacy IRQ Routing Capable : %" PRIu32, (hpet->event_timer_block_id >> 15) & 1); fwts_log_info_verbatim(fw, " COUNT_SIZE_CAP counter size: %" PRIu32, (hpet->event_timer_block_id >> 13) & 1); fwts_log_info_verbatim(fw, " Number of comparators : %" PRIu32, (hpet->event_timer_block_id >> 8) & 0x1f); fwts_log_info_verbatim(fw, " Hardwre Revision ID : 0x%" PRIx8, hpet->event_timer_block_id & 0xff); fwts_log_info_verbatim(fw, "Lower 32 bit base Address : 0x%" PRIx64, hpet->base_address.address); fwts_log_info_verbatim(fw, " Address Space ID : 0x%" PRIx8, hpet->base_address.address_space_id); fwts_log_info_verbatim(fw, " Register Bit Width : 0x%" PRIx8, hpet->base_address.register_bit_width); fwts_log_info_verbatim(fw, " Register Bit Offset : 0x%" PRIx8, hpet->base_address.register_bit_offset); fwts_log_info_verbatim(fw, " Address Width : 0x%" PRIx8, hpet->base_address.access_width); fwts_log_info_verbatim(fw, "HPET sequence number : 0x%" PRIx8, hpet->hpet_number); fwts_log_info_verbatim(fw, "Minimum clock tick : 0x%" PRIx16, hpet->main_counter_minimum); switch (hpet->page_prot_and_oem_attribute & 0xf) { case 0: page_prot = "No guaranteed protection"; break; case 1: page_prot = "4K page protected"; break; case 2: page_prot = "64K page protected"; break; default: page_prot = "Reserved"; break; } fwts_log_info_verbatim(fw, "Page Protection : 0x%" PRIx8 " (%s)", hpet->page_prot_and_oem_attribute & 0xf, page_prot); fwts_log_info_verbatim(fw, "OEM attributes : 0x%" PRIx8, (hpet->page_prot_and_oem_attribute >> 4) & 0xf); if (passed) fwts_passed(fw, "HPET looks sane."); return FWTS_OK; } static int hpet_check_test3(fwts_framework *fw) { int i; bool parsed = false; if (hpet_base_p == 0) { fwts_log_info(fw, "Test skipped because HPET address was not found."); return FWTS_SKIP; } if (fwts_iasl_init(fw) != FWTS_OK) { fwts_warning(fw, "Failure to initialise iasl, aborting."); fwts_iasl_deinit(); return FWTS_ERROR; } for (i = 0; i < ACPI_MAX_TABLES; i++) { fwts_acpi_table_info *info; if (fwts_acpi_get_table(fw, i, &info) != FWTS_OK) break; if (info && info->has_aml) hpet_check_base_acpi_table(fw, info, &parsed); } fwts_iasl_deinit(); if (!parsed) fwts_warning(fw, "Test skipped because HPET Device address was not found in DSDT/SSDT."); return FWTS_OK; } static int hpet_check_test4(fwts_framework *fw) { uint64_t hpet_id; uint32_t vendor_id; uint32_t clk_period; if (hpet_base_p == 0) { fwts_log_info(fw, "Test skipped because HPET address was not found."); return FWTS_SKIP; } hpet_base_v = fwts_mmap(hpet_base_p, HPET_REG_SIZE); if (hpet_base_v == FWTS_MAP_FAILED) { fwts_log_error(fw, "Cannot mmap to /dev/mem."); return FWTS_ERROR; } if (fwts_safe_memread64(hpet_base_v, HPET_REG_SIZE / 8) != FWTS_OK) { fwts_log_info(fw, "Test skipped because HPET region cannot be read."); (void)fwts_munmap(hpet_base_v, HPET_REG_SIZE); return FWTS_SKIP; } usleep(10); hpet_id = *(uint64_t*) hpet_base_v; vendor_id = (hpet_id & 0xffff0000) >> 16; if (vendor_id == 0xffff) fwts_failed(fw, LOG_LEVEL_MEDIUM, "HPETVendorId", "Invalid Vendor ID: %04" PRIx32 " - this should be configured.", vendor_id); else fwts_passed(fw, "Vendor ID looks sane: 0x%04" PRIx32 ".", vendor_id); clk_period = hpet_id >> 32; if ((clk_period > MAX_CLK_PERIOD) || (clk_period == 0)) fwts_failed(fw, LOG_LEVEL_MEDIUM, "HPETClockPeriod", "Invalid clock period %" PRIu32 ", must be non-zero and " "less than 10^8.", clk_period); else fwts_passed(fw, "Valid clock period %" PRIu32 ".", clk_period); (void)fwts_munmap(hpet_base_v, HPET_REG_SIZE); return FWTS_OK; } static fwts_framework_minor_test hpet_check_tests[] = { { hpet_check_test1, "Test HPET base in kernel log." }, { hpet_check_test2, "Test HPET base in HPET table."}, { hpet_check_test3, "Test HPET base in DSDT and/or SSDT."}, { hpet_check_test4, "Test HPET configuration." }, { NULL, NULL } }; static fwts_framework_ops hpet_check_ops = { .description = "HPET IA-PC High Precision Event Timer Table tests.", .init = hpet_check_init, .deinit = hpet_check_deinit, .minor_tests = hpet_check_tests }; FWTS_REGISTER("hpet", &hpet_check_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV | FWTS_FLAG_ACPI) #endif src/acpi/ibft/000077500000000000000000000000001465205512700135145ustar00rootroot00000000000000src/acpi/ibft/ibft.c000066400000000000000000000333151465205512700146110ustar00rootroot00000000000000/* * Copyright (C) 2023-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(iBFT, &table) static void ibfg_std_dump( fwts_framework *fw, const fwts_acpi_ibft_standard *std) { fwts_log_info_simp_int(fw, " Structure ID: ", std->structure_id); fwts_log_info_simp_int(fw, " Version: ", std->version); fwts_log_info_simp_int(fw, " Length: ", std->length); fwts_log_info_simp_int(fw, " Index: ", std->index); fwts_log_info_simp_int(fw, " Flags: ", std->flags); } static void ibfg_extensions_check( fwts_framework *fw, uint32_t offset, bool *passed) { fwts_log_info_verbatim(fw, "iBFT Extensions Structure:"); fwts_acpi_ibft_standard *std = (fwts_acpi_ibft_standard *)(table->data + offset); if (offset >= table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadStructureOffset", "iBFT Extensions structure exceed the table length, " "table length 0x%8.8" PRIx32 ", but got 0x%8.8" PRIx32, (uint32_t)table->length, offset); *passed = false; return; } if (std->length < sizeof(fwts_acpi_ibft_standard)) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadStructureLength", "iBFT Extensions structure type length too short, " "at least 0x%4.4" PRIx16 ", but got 0x%4.4" PRIx16, (uint16_t)sizeof(fwts_acpi_ibft_standard), std->length); *passed = false; return; } ibfg_std_dump(fw, std); } static void ibfg_initiator_check( fwts_framework *fw, uint32_t offset, bool *passed) { fwts_acpi_ibft_initiator *initiator = (fwts_acpi_ibft_initiator *)(table->data + offset); if (offset >= table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadStructureOffset", "iBFT Initiator structure exceed the table length, " "table length 0x%8.8" PRIx32 ", but got 0x%8.8" PRIx32, (uint32_t)table->length, offset); *passed = false; return; } if (initiator->std.length < sizeof(fwts_acpi_ibft_initiator)) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadStructureLength", "iBFT Initiator structure type length is not correct, " "expecting 0x%4.4" PRIx16 ", but got 0x%4.4" PRIx16, (uint16_t)sizeof(fwts_acpi_ibft_initiator), initiator->std.length); *passed = false; return; } fwts_log_info_verbatim(fw, "iBFT Initiator Structure:"); ibfg_std_dump(fw, &initiator->std); fwts_acpi_reserved_bits("iBAF", "Flags", initiator->std.flags, 2, 7, passed); fwts_log_info_verbatim(fw, " iSNS Server:"); fwts_hexdump_data_prefix_all(fw, initiator->isns_server, " ", sizeof(initiator->isns_server)); fwts_log_info_verbatim(fw, " SLP Server:"); fwts_hexdump_data_prefix_all(fw, initiator->slp_server, " ", sizeof(initiator->slp_server)); fwts_log_info_verbatim(fw, " Primary Radius Server:"); fwts_hexdump_data_prefix_all(fw, initiator->primary_radius_server, " ", sizeof(initiator->primary_radius_server)); fwts_log_info_verbatim(fw, " Secondary Radius Server:"); fwts_hexdump_data_prefix_all(fw, initiator->secondary_radius_server, " ", sizeof(initiator->secondary_radius_server)); fwts_log_info_simp_int(fw, " Initiator Name Length: ", initiator->initiator_name_length); fwts_log_info_simp_int(fw, " Initiator Name Offset: ", initiator->initiator_name_offset); if ((initiator->initiator_name_length + initiator->initiator_name_offset) > table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadOffset", "iBFT initiator name offset exceed table length"); *passed = false; return; } } static void ibfg_nic_check( fwts_framework *fw, uint32_t offset, bool *passed) { fwts_acpi_ibft_nic *nic = (fwts_acpi_ibft_nic *)(table->data + offset); if (offset >= table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadStructureOffset", "iBFT NIC structure exceed the table length, " "table length 0x%8.8" PRIx32 ", but got 0x%8.8" PRIx32, (uint32_t)table->length, offset); *passed = false; return; } if (nic->std.length < sizeof(fwts_acpi_ibft_nic)) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadStructureLength", "iBFT NIC structure type length is not correct, " "expecting 0x%4.4" PRIx16 ", but got 0x%4.4" PRIx16, (uint16_t)sizeof(fwts_acpi_ibft_nic), nic->std.length); *passed = false; return; } fwts_log_info_verbatim(fw, "iBFT NIC Structure:"); ibfg_std_dump(fw, &nic->std); fwts_acpi_reserved_bits("iBAF", "Flags", nic->std.flags, 3, 7, passed); fwts_log_info_verbatim(fw, " IP Address:"); fwts_hexdump_data_prefix_all(fw, nic->ip_address, " ", sizeof(nic->ip_address)); fwts_log_info_simp_int(fw, " Subnet Mask Prefix: ", nic->subnet_mask_prefix); fwts_log_info_simp_int(fw, " Origin: ", nic->origin); fwts_log_info_verbatim(fw, " Gateway:"); fwts_hexdump_data_prefix_all(fw, nic->gateway, " ", sizeof(nic->gateway)); fwts_log_info_verbatim(fw, " Primary DNS:"); fwts_hexdump_data_prefix_all(fw, nic->primary_dns, " ", sizeof(nic->primary_dns)); fwts_log_info_verbatim(fw, " Secondary DNS:"); fwts_hexdump_data_prefix_all(fw, nic->secondary_dns, " ", sizeof(nic->secondary_dns)); fwts_log_info_verbatim(fw, " DHCP:"); fwts_hexdump_data_prefix_all(fw, nic->dhcp, " ", sizeof(nic->dhcp)); fwts_log_info_simp_int(fw, " VLAN: ", nic->vlan); fwts_log_info_verbatim(fw, " MAC Address:"); fwts_hexdump_data_prefix_all(fw, nic->mac_address, " ", sizeof(nic->mac_address)); fwts_log_info_simp_int(fw, " PCI Bus/Dev/Func: ", nic->pci_bus_dev_func); fwts_log_info_simp_int(fw, " Host Name Length: ", nic->host_name_length); fwts_log_info_simp_int(fw, " Host Name Offset: ", nic->host_name_offset); if ((nic->host_name_length + nic->host_name_offset) > table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadOffset", "iBFT host name offset exceed table length"); *passed = false; return; } } static void ibfg_target_check( fwts_framework *fw, uint32_t offset, bool *passed) { fwts_acpi_ibft_target *target = (fwts_acpi_ibft_target *)(table->data + offset); if (offset >= table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadStructureOffset", "iBFT Target structure exceed the table length, " "table length 0x%8.8" PRIx32 ", but got 0x%8.8" PRIx32, (uint32_t)table->length, offset); *passed = false; return; } if (target->std.length < sizeof(fwts_acpi_ibft_target)) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadStructureLength", "iBFT Target structure type length is not correct, " "expecting 0x%4.4" PRIx16 ", but got 0x%4.4" PRIx16, (uint16_t)sizeof(fwts_acpi_ibft_target), target->std.length); *passed = false; return; } fwts_log_info_verbatim(fw, "iBFT Target Structure:"); ibfg_std_dump(fw, &target->std); fwts_acpi_reserved_bits("iBAF", "Flags", target->std.flags, 4, 7, passed); fwts_log_info_verbatim(fw, " Target IP Address:"); fwts_hexdump_data_prefix_all(fw, target->target_ip_address, " ", sizeof(target->target_ip_address)); fwts_log_info_simp_int(fw, " Target IP Socket: ", target->target_ip_socket); fwts_log_info_simp_int(fw, " Target Boot LUN: ", target->target_boot_lun); fwts_log_info_simp_int(fw, " CHAP Type: ", target->chap_type); fwts_acpi_reserved_type(fw, "iBFT", target->chap_type, 0, 2, passed); fwts_log_info_simp_int(fw, " NIC Association: ", target->nic_sssociation); fwts_log_info_simp_int(fw, " Target Name Length: ", target->target_name_length); fwts_log_info_simp_int(fw, " Target Name Offset: ", target->target_name_offset); if ((target->target_name_length + target->target_name_offset) > table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadOffset", "iBFT target name offset exceed table length"); *passed = false; } fwts_log_info_simp_int(fw, " CHAP Name Length: ", target->chap_name_length); fwts_log_info_simp_int(fw, " CHAP Name Offset: ", target->chap_name_offset); if ((target->chap_name_length + target->chap_name_offset) > table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadOffset", "iBFT chap name offset exceed table length"); *passed = false; } fwts_log_info_simp_int(fw, " CHAP Secret Length: ", target->chap_secret_length); fwts_log_info_simp_int(fw, " CHAP Secret Offset: ", target->chap_secret_offset); if ((target->chap_secret_length + target->chap_secret_offset) > table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadOffset", "iBFT chat secret offset exceed table length"); *passed = false; } fwts_log_info_simp_int(fw, " Reverse CHAP Name Length: ", target->reverse_chap_name_length); fwts_log_info_simp_int(fw, " Reverse CHAP Name Offset: ", target->reverse_chap_name_offset); if ((target->reverse_chap_name_length + target->reverse_chap_name_offset) > table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadOffset", "iBFT resverse chap name offset exceed table length"); *passed = false; } fwts_log_info_simp_int(fw, " Reverse CHAP Secret Length: ", target->reverse_chap_secret_length); fwts_log_info_simp_int(fw, " Reverse CHAP Secret Offset: ", target->reverse_chap_secret_offset); if ((target->reverse_chap_secret_length + target->reverse_chap_secret_offset) > table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadOffset", "iBFT reverse chap secret offset exceed table length"); *passed = false; } } static int ibfg_test1(fwts_framework *fw) { fwts_acpi_ibft_header *header; fwts_acpi_ibft_control *control; bool passed = true; uint32_t offset; fwts_log_info_verbatim(fw, "iSCSI Boot Firmware Table:"); header = (fwts_acpi_ibft_header *)(table->data); fwts_acpi_reserved_zero_array(fw, "iBFT", "Reserved", header->reserved, 24, &passed); offset = sizeof(fwts_acpi_ibft_header); control = (fwts_acpi_ibft_control *)(table->data + offset); if (control->std.length < sizeof(fwts_acpi_ibft_control)) { fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadStructureLength", "iBFT Control structure type length too short, " "at least 0x%4.4" PRIx16 ", but got 0x%4.4" PRIx16, (uint16_t)sizeof(fwts_acpi_ibft_control), control->std.length); return FWTS_OK; } if (control->std.structure_id != FWTS_IBFT_CONTROL ) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadStructureType", "iBFT first structure type must to be control type(1) , got " "0x%2.2" PRIx8 " instead", control->std.structure_id); return FWTS_OK; } fwts_log_info_verbatim(fw, "iBFT Control Structure:"); ibfg_std_dump(fw, &control->std); fwts_acpi_reserved_bits("iBAF", "Flags", control->std.flags, 1, 7, &passed); fwts_log_info_simp_int(fw, " Extensions: ", control->extensions); if (control->extensions != 0) ibfg_extensions_check(fw, control->extensions, &passed); fwts_log_info_simp_int(fw, " Initiator Offset: ", control->initiator_offset); if (control->initiator_offset != 0) ibfg_initiator_check(fw, control->initiator_offset, &passed); fwts_log_info_simp_int(fw, " NIC 0 Offset: ", control->nic_0_offset); if (control->nic_0_offset != 0) ibfg_nic_check(fw, control->nic_0_offset, &passed); fwts_log_info_simp_int(fw, " Target 0 Offset: ", control->target_0_offset); if (control->target_0_offset != 0) ibfg_target_check(fw, control->target_0_offset, &passed); fwts_log_info_simp_int(fw, " NIC 1 Offset: ", control->nic_1_offset); if (control->nic_1_offset != 0) ibfg_nic_check(fw, control->nic_1_offset, &passed); fwts_log_info_simp_int(fw, " Target 1 Offset: ", control->target_1_offset); if (control->target_1_offset != 0) ibfg_target_check(fw, control->target_1_offset, &passed); offset += sizeof(fwts_acpi_ibft_control); while (offset < control->std.length) { /* Optional Structure Expansion */ fwts_log_info_verbatim(fw, "iBFT Optional Structure Expansion:"); fwts_acpi_ibft_standard *std = (fwts_acpi_ibft_standard *)(table + offset); switch(std->structure_id) { case FWTS_IBFT_INITIATOR: ibfg_initiator_check(fw, offset, &passed); break; case FWTS_IBFT_NIC: ibfg_nic_check(fw, offset, &passed); break; case FWTS_IBFT_TARGET: ibfg_target_check(fw, offset, &passed); break; case FWTS_IBFT_EXTENSIONS: ibfg_extensions_check(fw, offset, &passed); break; case FWTS_IBFT_CONTROL: passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadStructureID", "iBFT Control structure shouldn't got the Optional " "Structure Expansion for Control structiure ID(1)"); break; case FWTS_IBFT_RESERVED: default: passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "iBFTBadStructureID", "iBFT Optional Structure Expansion for Control structiure ID was reserved, got " "or unknown got 0x%2.2" PRIx8, std->structure_id); break; } offset += sizeof(uint16_t); } if (passed) fwts_passed(fw, "No issues found in iBFT table."); return FWTS_OK; } static fwts_framework_minor_test ibfg_tests[] = { { ibfg_test1, "Validate iBFT table." }, { NULL, NULL } }; static fwts_framework_ops ibfg_ops = { .description = "iBFT iSCSI Boot Firmware Table test.", .init = iBFT_init, .minor_tests = ibfg_tests }; FWTS_REGISTER("ibft", &ibfg_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/iort/000077500000000000000000000000001465205512700135455ustar00rootroot00000000000000src/acpi/iort/iort.c000066400000000000000000000625511465205512700146770ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(IORT, &table) /* * iort_node_dump() * dump IORT Node header, common to all IORT node types */ static void iort_node_dump( fwts_framework *fw, const char *node_name, fwts_acpi_table_iort_node *node) { fwts_log_info_verbatim(fw, "%s:", node_name); fwts_log_info_simp_int(fw, " Type: ", node->type); fwts_log_info_simp_int(fw, " Length: ", node->length); fwts_log_info_simp_int(fw, " Revision: ", node->revision); fwts_log_info_simp_int(fw, " Identifier: ", node->identifier); fwts_log_info_simp_int(fw, " Number of ID mappings: ", node->id_mappings_count); fwts_log_info_simp_int(fw, " Reference to ID Array: ", node->id_array_offset); } /* * iort_node_check() * sanity check IORT Node header */ static void iort_node_check( fwts_framework *fw, uint8_t *data, bool no_id_mappings, bool no_id_array, bool *passed) { fwts_acpi_table_iort_node *node = (fwts_acpi_table_iort_node *)data; if (node->type == 1 || node->type == 2) { if (node->revision > 4) { *passed = false; fwts_failed(fw, LOG_LEVEL_LOW, "IORTNodeRevisionInvalid", "IORT Node Revision field is 0x%2.2" PRIx8 " and should be less than 5.", node->revision); } } else if (node->type == 3 || node->type == 6) { if (node->revision > 3) { *passed = false; fwts_failed(fw, LOG_LEVEL_LOW, "IORTNodeRevisionInvalid", "IORT Node Revision field is 0x%2.2" PRIx8 " and should be less than 4.", node->revision); } } else if (node->type == 5) { if (node->revision > 2) { *passed = false; fwts_failed(fw, LOG_LEVEL_LOW, "IORTNodeRevisionInvalid", "IORT Node Revision field is 0x%2.2" PRIx8 " and should be less than 3.", node->revision); } } else if (node->type == 4) { if (node->revision > 5) { *passed = false; fwts_failed(fw, LOG_LEVEL_LOW, "IORTNodeRevisionInvalid", "IORT Node Revision field is 0x%2.2" PRIx8 " and should be less than 6.", node->revision); } } else { /* type 0 */ if (node->revision > 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_LOW, "IORTNodeRevisionInvalid", "IORT Node Revision field is 0x%2.2" PRIx8 " and should be zero or one.", node->revision); } } if (no_id_mappings && node->id_mappings_count) { *passed = false; fwts_failed(fw, LOG_LEVEL_LOW, "IORTNodeMappingsCountNonZero", "IORT Node Number of ID Mappings field is 0x0%8.8" PRIx32 " and should be zero for this node type.", node->id_mappings_count); } if (no_id_array && node->id_array_offset) { *passed = false; fwts_failed(fw, LOG_LEVEL_LOW, "IORTNodeRefToIdArrayNonZero", "IORT Node Referenced to ID Array field is 0x0%8.8" PRIx32 " and should be zero for this node type.", node->id_array_offset); } } /* * IORT ID mappings */ /* * iort_id_mapping_dump() * dump IORT ID mapping */ static void iort_id_mapping_dump( fwts_framework *fw, uint32_t i, fwts_acpi_table_iort_id_mapping *id_mapping) { fwts_log_info_verbatim(fw, "ID Mapping %" PRIu32, i); fwts_log_info_simp_int(fw, " Input Base: ", id_mapping->input_base); fwts_log_info_simp_int(fw, " ID Count: ", id_mapping->id_count); fwts_log_info_simp_int(fw, " Output Base: ", id_mapping->output_base); fwts_log_info_simp_int(fw, " Output Reference: ", id_mapping->output_reference); fwts_log_info_simp_int(fw, " Flags: ", id_mapping->flags); } /* * iort_id_mappings_dump() * dump array of ID mappings */ static void iort_id_mappings_dump( fwts_framework *fw, uint8_t *data, const uint8_t *data_end) { uint32_t i; fwts_acpi_table_iort_node *node = (fwts_acpi_table_iort_node *)data; fwts_acpi_table_iort_id_mapping *id_mapping; id_mapping = (fwts_acpi_table_iort_id_mapping *)(data + node->id_array_offset); for (i = 0; i < node->id_mappings_count; i++, id_mapping++) { if (sizeof(*id_mapping) + (uint8_t *)id_mapping > data_end) break; iort_id_mapping_dump(fw, i, id_mapping); } } /* * iort_id_mappings_check() * snaity check array of ID mappings */ static void iort_id_mappings_check( fwts_framework *fw, uint8_t *data, const uint8_t *data_end, bool *passed) { uint32_t i; fwts_acpi_table_iort_node *node = (fwts_acpi_table_iort_node *)data; fwts_acpi_table_iort_id_mapping *id_mapping; char field[80]; id_mapping = (fwts_acpi_table_iort_id_mapping *)(data + node->id_array_offset); for (i = 0; i < node->id_mappings_count; i++, id_mapping++) { if (sizeof(*id_mapping) + (uint8_t *)id_mapping > data_end) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTIdMappingOutsideTable", "IORT ID Mapping %" PRIu32 " is outside the " "IORT ACPI table. Either the offset is incorrect " "or the IORT table size or the node is too small.", i); break; } snprintf(field, sizeof(field), "ID Mapping %" PRIu32 " flags", i); fwts_acpi_reserved_bits("IORT", field, id_mapping->flags, 1, 31, passed); } } /* * IORT SMMU interrupts */ /* * iort_smmu_interrupt_dump() * dump array of SMMU interrupts */ static void iort_smmu_interrupt_dump( fwts_framework *fw, uint8_t *data, const uint8_t *data_end, uint32_t offset, uint32_t count) { uint32_t i; fwts_acpi_table_iort_smmu_interrupt *intr = (fwts_acpi_table_iort_smmu_interrupt *)(data + offset); for (i = 0; i < count; i++, intr++) { if (sizeof(*intr) + (uint8_t *)intr > data_end) break; fwts_log_info_simp_int(fw, " GSIV: ", intr->gsiv); fwts_log_info_simp_int(fw, " Interrupt Flags: ", intr->flags); } } /* * iort_smmu_interrupt_flags_check() * sanity check SMMU interrupt flag bits */ static void iort_smmu_interrupt_flags_check( fwts_framework *fw, char *name, uint32_t flags, bool *passed) { fwts_acpi_reserved_bits("IORT", name, flags, 1, 31, passed); } /* * iort_smmu_interrupt_check() * sanity check array of SMMU interrupts */ static void iort_smmu_interrupt_check( fwts_framework *fw, uint8_t *data, const uint8_t *data_end, uint32_t offset, uint32_t count, bool *passed) { uint32_t i; fwts_acpi_table_iort_smmu_interrupt *intr = (fwts_acpi_table_iort_smmu_interrupt *)(data + offset); for (i = 0; i < count; i++, intr++) { if (sizeof(*intr) + (uint8_t *)intr > data_end) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTSmmuInterruptsOutsideTable", "IORT SMMU Interrupt %" PRIu32 " is outside the " "IORT ACPI table. Either the offset is incorrect " "or the IORT table size is too small.", i); break; } iort_smmu_interrupt_flags_check(fw, "SMMU_GSV", intr->flags, passed); } } /* * IORT Global Interrupts */ /* * iort_smmu_global_interrupt_dump() * dump SMMU global interrupts */ static void iort_smmu_global_interrupt_dump( fwts_framework *fw, uint8_t *data, const uint8_t *data_end, uint32_t offset) { fwts_acpi_table_iort_smmu_global_interrupt_array *intr = (fwts_acpi_table_iort_smmu_global_interrupt_array *)(data + offset); if (sizeof(*intr) + (uint8_t*)intr <= data_end) { fwts_log_info_simp_int(fw, " SMMU_NSgIrpt: ", intr->smmu_nsgirpt); fwts_log_info_simp_int(fw, " SMMU_NSgIrpt Flags: ", intr->smmu_nsgirpt_flags); fwts_log_info_simp_int(fw, " SMMU_NSgCfgIrpt: ", intr->smmu_nsgcfgirpt); fwts_log_info_simp_int(fw, " SMMU_NSgCfgIrpt Flags: ", intr->smmu_nsgcfgirpt_flags); } } /* * iort_smmu_global_interrupt_check() * sanity check SMMU global interrupts */ static void iort_smmu_global_interrupt_check( fwts_framework *fw, uint8_t *data, const uint8_t *data_end, uint32_t offset, bool *passed) { fwts_acpi_table_iort_smmu_global_interrupt_array *intr = (fwts_acpi_table_iort_smmu_global_interrupt_array *)(data + offset); uint8_t *intr_end = data + offset + sizeof(fwts_acpi_table_iort_smmu_global_interrupt_array); if (intr_end > data_end) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTSmmuGlobalInterruptsOutsideTable", "IORT SMMU Global Interrupt is outside the " "IORT ACPI table. The offset is incorrect " "or the IORT table size is too small."); return; } iort_smmu_interrupt_flags_check(fw, "SMMU_NsgIrpt", intr->smmu_nsgirpt_flags, passed); iort_smmu_interrupt_flags_check(fw, "SMMU_NsgCfgIrpt", intr->smmu_nsgcfgirpt_flags, passed); } /* * IORT Node checks */ /* * Check IORT ITS Group Node */ static void iort_check_its_group( fwts_framework *fw, uint8_t *data, const uint8_t *node_end, bool *passed) { fwts_acpi_table_iort_its_group_node *node = (fwts_acpi_table_iort_its_group_node *)data; uint32_t *its_id = node->identifier_array; size_t its_id_array_size = node->its_count * sizeof(*its_id); iort_node_dump(fw, "IORT ITS Group Node", (fwts_acpi_table_iort_node *)data); fwts_log_info_simp_int(fw, " Number of ITSs: ", node->its_count); /* Array too big? */ if (its_id_array_size + (uint8_t*)its_id > node_end) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTItsIdArrayOutsideTable", "IORT ITS Identifier Array end is outside the " "IORT ACPI table. Either the Number of ID mappings is " "too large or the IORT table size or ITS Group Node is too small."); } else { uint32_t i; for (i = 0; i < node->its_count; i++, its_id++) { fwts_log_info_simp_int(fw, " GIC ITS Identifier: ", *its_id); } } iort_node_check(fw, data, true, true, passed); fwts_log_nl(fw); } /* * iort_memory_access_properties_check() * sanity check memory access properties */ static void iort_memory_access_properties_check( fwts_framework *fw, const char *name, fwts_acpi_table_iort_properties *properties, bool *passed) { uint8_t cca, cpm, dacs; char field[80]; if (properties->cache_coherent > 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTCacheCoherentAttrInvalid", "IORT %s Coherent Attribute " "is 0x%" PRIx32 " and should be either " "0 (device is fully coherent) or 1 (device is " "not coherent).", name, properties->cache_coherent); } snprintf(field, sizeof(field), "%s Allocation Hints", name); fwts_acpi_reserved_bits("IORT", field, properties->allocation_hints, 4, 7, passed); snprintf(field, sizeof(field), "%s Reserved", name); fwts_acpi_reserved_zero("IORT", field, properties->reserved, passed); snprintf(field, sizeof(field), "%s Memory Access Flags", name); fwts_acpi_reserved_bits("IORT", field, properties->memory_access_flags, 2, 7, passed); cca = properties->cache_coherent & 1; cpm = properties->memory_access_flags & 1; dacs = (properties->memory_access_flags >> 1) & 1; if ((cca == 1) && (cpm == 0)) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTMemAttrInvalid", "IORT %s Memory Attributes are illegal, " "CCA cannot be 1 if CPM is 0.", name); } if ((cca == 0) && (cpm == 1) && (dacs == 1)) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTMemAttrInvalid", "IORT %s Memory Attributes are illegal, " "CCA cannot be 0 if CPM and DACS are 1. If the device " "has a coherent path to memory and natively outputs " "IWB-OWB-ISH then CCA must be 1.", name); } } /* * Check IORT Named Component Node */ static void iort_check_named_component( fwts_framework *fw, uint8_t *data, uint8_t *node_end, bool *passed) { fwts_acpi_table_iort_named_component_node *node = (fwts_acpi_table_iort_named_component_node *)data; uint8_t *obj_name; iort_node_dump(fw, "IORT Named Component Node", (fwts_acpi_table_iort_node *)data); fwts_log_info_simp_int(fw, " Node Flags: ", node->flags); fwts_log_info_simp_int(fw, " Cache Coherent Attribute: ", node->properties.cache_coherent); fwts_log_info_simp_int(fw, " Allocation Hints: ", node->properties.allocation_hints); fwts_log_info_simp_int(fw, " Reserved: ", node->properties.reserved); fwts_log_info_simp_int(fw, " Memory Access Flags ", node->properties.memory_access_flags); fwts_log_info_simp_int(fw, " Device Memory Addr. Size: ", node->device_memory_address_size); /* Is object name sane, zero terminated and inside the table? */ for (obj_name = node->device_object_name; *obj_name; obj_name++) { if (obj_name > node_end) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTBadNamedComponentDeviceObjectName", "IORT Named Component Device Object Name string " "does not contain a null byte string terminator " "inside the IORT ACPI table. Either the null " "terminator is missing, or the IORT ACPI table " "is truncated."); /* Need to skip dumping it out as it is probably garbage */ goto next; } } fwts_log_info_verbatim(fw, " Device Object Name: %s", (char *)node->device_object_name); next: iort_id_mappings_dump(fw, data, node_end); iort_node_check(fw, data, false, false, passed); if (node->flags) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTNamedComponentNodeFlagsNonZero", "IORT Named Component Node Flags is 0x%" PRIx32 " and is " "reserved and should be zero.", node->flags); } iort_memory_access_properties_check(fw, "Named Component Node", &node->properties, passed); iort_id_mappings_check(fw, data, node_end, passed); fwts_log_nl(fw); } /* * Check IORT PCI Root Complex Node */ static void iort_check_pci_root_complex( fwts_framework *fw, uint8_t *data, uint8_t *node_end, bool *passed) { fwts_acpi_table_iort_pci_root_complex_node *node = (fwts_acpi_table_iort_pci_root_complex_node *)data; iort_node_dump(fw, "IORT PCI Root Complex Node", (fwts_acpi_table_iort_node *)data); fwts_log_info_simp_int(fw, " Cache Coherent Attribute: ", node->properties.cache_coherent); fwts_log_info_simp_int(fw, " Allocation Hints: ", node->properties.allocation_hints); fwts_log_info_simp_int(fw, " Reserved: ", node->properties.reserved); fwts_log_info_simp_int(fw, " Memory Access Flags ", node->properties.memory_access_flags); fwts_log_info_simp_int(fw, " ATS Attribute: ", node->ats_attribute); fwts_log_info_simp_int(fw, " PCI Segment Number: ", node->pci_segment_number); fwts_log_info_simp_int(fw, " Memory addr. size limit: ", node->memory_addr_size_limit); fwts_log_info_simp_int(fw, " PASID capabilities: ", node->pasid_cap); fwts_log_info_simp_int(fw, " Reserved: ", node->reserved); fwts_log_info_simp_int(fw, " Flags: ", node->flags); iort_id_mappings_dump(fw, data, node_end); iort_node_check(fw, data, false, false, passed); iort_memory_access_properties_check(fw, "PCI Root Complex Node", &node->properties, passed); fwts_acpi_reserved_bits("IORT", "ATS Attribute", node->ats_attribute, 3, 31, passed); fwts_acpi_reserved_bits("IORT", "PASID capabilities", node->pasid_cap, 5, 15, passed); fwts_acpi_reserved_zero("IORT", "Reserved", node->reserved, passed); if (node->flags > 1) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTPCIRootComplexNodeFlagsInvalid", "IORT PCI Root Complex Node flag " "is 0x%" PRIx32 " and should be either " "0 (not support PASID) or 1 (supports PASID).", node->flags); } iort_id_mappings_check(fw, data, node_end, passed); fwts_log_nl(fw); } /* * Check IORT SMMUv1, SMMUv2 node */ static void iort_check_smmu( fwts_framework *fw, uint8_t *data, uint8_t *node_end, bool *passed) { fwts_acpi_table_iort_smmu_node *node = (fwts_acpi_table_iort_smmu_node *)data; iort_node_dump(fw, "IORT SMMU node", (fwts_acpi_table_iort_node *)data); fwts_log_info_simp_int(fw, " Base Address: ", node->base_address); fwts_log_info_simp_int(fw, " Span: ", node->span); fwts_log_info_simp_int(fw, " Model: ", node->model); fwts_log_info_simp_int(fw, " Flags: ", node->flags); fwts_log_info_simp_int(fw, " Global Intr. Offset: ", node->global_interrupt_array_offset); fwts_log_info_simp_int(fw, " Number of Context Intr.: ", node->context_interrupt_count); fwts_log_info_simp_int(fw, " Context Intr. Offset: ", node->context_interrupt_array_offset); fwts_log_info_simp_int(fw, " Number of PMU Intr.: ", node->pmu_interrupt_count); fwts_log_info_simp_int(fw, " PMU Intr. Offset: ", node->pmu_interrupt_array_offset); fwts_log_info_verbatim(fw, "Global Interrupt Array:"); iort_smmu_global_interrupt_dump(fw, data, node_end, node->global_interrupt_array_offset); fwts_log_info_verbatim(fw, "Context Interrupt Array:"); iort_smmu_interrupt_dump(fw, data, node_end, node->context_interrupt_array_offset, node->context_interrupt_count); fwts_log_info_verbatim(fw, "PMU Interrupt Array:"); iort_smmu_interrupt_dump(fw, data, node_end, node->pmu_interrupt_array_offset, node->pmu_interrupt_count); iort_id_mappings_dump(fw, data, node_end); iort_node_check(fw, data, false, false, passed); iort_smmu_global_interrupt_check(fw, data, node_end, node->global_interrupt_array_offset, passed); iort_smmu_interrupt_check(fw, data, node_end, node->context_interrupt_array_offset, node->context_interrupt_count, passed); iort_smmu_interrupt_check(fw, data, node_end, node->pmu_interrupt_array_offset, node->pmu_interrupt_count, passed); iort_id_mappings_check(fw, data, node_end, passed); if (node->model > 5) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTSmmuInvalidModel", "IORT SMMU Model is 0x%" PRIx32 " and was expecting " "a model value 0 to 5.", node->model); } fwts_acpi_reserved_bits("IORT", "SMMU Reserved Flags", node->flags, 2, 31, passed); fwts_log_nl(fw); } /* * Check IORT SMMUv3 */ static void iort_check_smmuv3( fwts_framework *fw, uint8_t *data, uint8_t *node_end, bool *passed) { fwts_acpi_table_iort_smmuv3_node *node = (fwts_acpi_table_iort_smmuv3_node *)data; iort_node_dump(fw, "IORT SMMUv3 node", (fwts_acpi_table_iort_node *)data); fwts_log_info_simp_int(fw, " Base Address: ", node->base_address); fwts_log_info_simp_int(fw, " Flags: ", node->flags); fwts_log_info_simp_int(fw, " Reserved: ", node->reserved); fwts_log_info_simp_int(fw, " VATOS Address: ", node->vatos_address); fwts_log_info_simp_int(fw, " Model: ", node->model); fwts_log_info_simp_int(fw, " Event: ", node->event); fwts_log_info_simp_int(fw, " PRI: ", node->pri); fwts_log_info_simp_int(fw, " GERR: ", node->gerr); fwts_log_info_simp_int(fw, " Sync: ", node->sync); fwts_log_info_simp_int(fw, " Proximity Domain: ", node->proximity_domain); fwts_log_info_simp_int(fw, " DeviceId Mapping Index: ", node->deviceid_mapping_idx); iort_id_mappings_dump(fw, data, node_end); iort_node_check(fw, data, false, false, passed); iort_id_mappings_check(fw, data, node_end, passed); fwts_acpi_reserved_bits("IORT", "SMMUv3 Reserved Flags", node->flags, 5, 31, passed); fwts_acpi_reserved_zero("IORT", "Reserved", node->reserved, passed); if (node->model > 2) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTSmmuv3InvalidModel", "IORT SMMUv3 Model is 0x%" PRIx32 " and was expecting " "a model value less than 3.", node->model); } fwts_log_nl(fw); } /* * Check IORT Performance Monitoring Counter Group (PMCG) */ static void iort_check_pmcg( fwts_framework *fw, uint8_t *data, uint8_t *node_end, bool *passed) { fwts_acpi_table_iort_pmcg_node *node = (fwts_acpi_table_iort_pmcg_node *)data; iort_node_dump(fw, "IORT PMCG node", (fwts_acpi_table_iort_node *)data); fwts_log_info_simp_int(fw, " Base Address: ", node->base_address); fwts_log_info_simp_int(fw, " Overflow interrupt GSIV: ", node->gsiv); fwts_log_info_simp_int(fw, " Node reference: ", node->node_ref); fwts_log_info_simp_int(fw, " Page 1 Base Address: ", node->p1_base_address); iort_id_mappings_dump(fw, data, node_end); iort_node_check(fw, data, false, false, passed); iort_id_mappings_check(fw, data, node_end, passed); fwts_log_nl(fw); } /* * Check IORT Reserved Memory Range node (RMR) */ static void iort_check_rmr( fwts_framework *fw, uint8_t *data, uint8_t *node_end, bool *passed) { uint32_t i; fwts_acpi_table_iort_rmr_node *node = (fwts_acpi_table_iort_rmr_node *)data; iort_node_dump(fw, "IORT RMR node", (fwts_acpi_table_iort_node *)data); fwts_log_info_simp_int(fw, " Flags: ", node->flags); fwts_log_info_simp_int(fw, " Number of memory range descriptors: ", node->num_mem_rng_des); fwts_log_info_simp_int(fw, " Reference to memory range descriptors: ", node->mem_rng_des_offset); iort_node_check(fw, data, false, false, passed); iort_id_mappings_check(fw, data, node_end, passed); fwts_acpi_reserved_bits("IORT", "RMR Reserved Flags", node->flags, 10, 31, passed); fwts_acpi_table_iort_mem_rng_des *descriptor = (fwts_acpi_table_iort_mem_rng_des *)(data + node->mem_rng_des_offset); for (i = 0; i < node->num_mem_rng_des; i++, descriptor++) { if (sizeof(*descriptor) + (uint8_t *)descriptor > node_end) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTMemRangeDescriptorOutsideTable", "IORT memory range descriptors %" PRIu32 " is outside the " "IORT ACPI table. Either the offset is incorrect " "or the IORT table size or the node is too small.", i); break; } fwts_log_info_simp_int(fw, " Physical Range offset: ", descriptor->physical_range_offset); fwts_log_info_simp_int(fw, " Physical Range length: ", descriptor->physical_range_length); fwts_log_info_simp_int(fw, " Reserved: ", descriptor->reserved); fwts_acpi_reserved_zero("IORT", "Reserved", descriptor->reserved, passed); } fwts_log_nl(fw); } /* * IORT Remapping Table * http://infocenter.arm.com/help/topic/com.arm.doc.den0049a/DEN0049A_IO_Remapping_Table.pdf */ static int iort_test1(fwts_framework *fw) { bool passed = true; fwts_acpi_table_iort *iort = (fwts_acpi_table_iort *)table->data; uint8_t *data = (uint8_t *)table->data; uint8_t *data_end; uint32_t count; if (table->length < (size_t)iort->header.length) { fwts_failed(fw, LOG_LEVEL_HIGH, "IORTTooShort", "IORT table incorrectly sized, IORT " "header reports it is %" PRIu32 " bytes, " "instead got %zu bytes", iort->header.length, table->length); goto done; } if (table->length < sizeof(fwts_acpi_table_iort)) { fwts_failed(fw, LOG_LEVEL_HIGH, "IORTTooShort", "IORT table too short, expecting %zu bytes, " "instead got %zu bytes", sizeof(fwts_acpi_table_iort), table->length); goto done; } data_end = data + table->length; fwts_log_info_verbatim(fw, "IORT IO Remapping Table test"); fwts_log_info_simp_int(fw, " Number of IORT Nodes: ", iort->io_rt_nodes_count); fwts_log_info_simp_int(fw, " IORT Node Array Offset: ", iort->io_rt_offset); fwts_log_info_simp_int(fw, " Reserved: ", iort->reserved); fwts_acpi_reserved_zero("IORT", "Reserved", iort->reserved, &passed); fwts_log_nl(fw); data = (uint8_t *)table->data + iort->io_rt_offset; for (count = 0; count < iort->io_rt_nodes_count; count++) { fwts_acpi_table_iort_node *node = (fwts_acpi_table_iort_node *)data; uint8_t *node_end; if (data + node->length > data_end) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTTooShort", "IORT table too short, parsing IORT node %" PRIu32 " and the end of this node falls outside " "the IORT table.", count); break; } node_end = data + node->length; switch (node->type) { case 0x00: iort_check_its_group(fw, data, node_end, &passed); break; case 0x01: iort_check_named_component(fw, data, node_end, &passed); break; case 0x02: iort_check_pci_root_complex(fw, data, node_end, &passed); break; case 0x03: iort_check_smmu(fw, data, node_end, &passed); break; case 0x04: iort_check_smmuv3(fw, data, node_end, &passed); break; case 0x05: iort_check_pmcg(fw, data, node_end, &passed); break; case 0x06: iort_check_rmr(fw, data, node_end, &passed); break; default: /* reserved */ passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IORTInvalidType", "IORT Type 0x%2.2" PRIx8 " is invalid, aborting check", node->type); data = data_end; /* Forces termination */ break; } data += node->length; } if (passed) fwts_passed(fw, "No issues found in IORT."); done: return FWTS_OK; } static fwts_framework_minor_test iort_tests[] = { { iort_test1, "IORT IO Remapping Table test." }, { NULL, NULL } }; static fwts_framework_ops iort_ops = { .description = "IORT IO Remapping Table test.", .init = IORT_init, .minor_tests = iort_tests }; FWTS_REGISTER("iort", &iort_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/ivrs/000077500000000000000000000000001465205512700135535ustar00rootroot00000000000000src/acpi/ivrs/ivrs.c000066400000000000000000000205021465205512700147010ustar00rootroot00000000000000/* * Copyright (C) 2023-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(IVRS, &table) static void ivrs_ivhd_device_entries_check( fwts_framework *fw, const uint8_t *entries, const uint16_t entries_len, bool *passed) { uint8_t type_range = entries[0] >> 6; uint16_t offset = 0; while (offset < entries_len) { type_range = entries[offset] >> 6; if (type_range == 0) { fwts_acpi_reserved_type(fw, "IVRS", entries[offset], 1, 5, passed); offset += 4; } else if (type_range == 1) { if (entries[offset] < 66 || entries[offset] == 68 || entries[offset] == 68 || entries[offset] > 72) { fwts_failed(fw, LOG_LEVEL_HIGH, "IVRSBadType", "IVRS must have device entry types 66..67 or 70..72" ", got %" PRId8 " instead", entries[offset]); *passed = false; } offset += 8; } else break; } } static void ivrs_ivhd_10_test( fwts_framework *fw, const fwts_acpi_table_ivhd_10 *entry, bool *passed) { uint16_t entries_len = entry->ivhd.length - sizeof(fwts_acpi_table_ivhd_10); fwts_log_info_verbatim(fw, " I/O Virtualization Hardware Definition Type 10h:"); fwts_log_info_simp_int(fw, " Type: ", entry->ivhd.type); fwts_log_info_simp_int(fw, " Flags: ", entry->ivhd.flags); fwts_log_info_simp_int(fw, " Length: ", entry->ivhd.length); fwts_log_info_simp_int(fw, " DeviceID: ", entry->ivhd.device_id); fwts_log_info_simp_int(fw, " Capability Offset: ", entry->ivhd.capability_offset); fwts_log_info_simp_int(fw, " IOMMU Base Address: ", entry->ivhd.iommu_base_address); fwts_log_info_simp_int(fw, " PCI Segment Group: ", entry->ivhd.pci_seg_group); fwts_log_info_simp_int(fw, " IOMMU Info: ", entry->ivhd.iommu_info); fwts_log_info_simp_int(fw, " IOMMU Feature Reporting: ", entry->iommu_feature_reoprt); fwts_acpi_reserved_bits("IVRS", "IOMMU Info", entry->ivhd.iommu_info, 5, 7, passed); fwts_acpi_reserved_bits("IVRS", "IOMMU Info", entry->ivhd.iommu_info, 13, 15, passed); ivrs_ivhd_device_entries_check(fw, entry->ivhd_device_entries,entries_len , passed); } static void ivrs_ivhd_11_40_test( fwts_framework *fw, const fwts_acpi_table_ivhd_11_40 *entry, bool *passed) { uint16_t entries_len = entry->ivhd.length - sizeof(fwts_acpi_table_ivhd_11_40); fwts_log_info_simp_int(fw, " Type: ", entry->ivhd.type); fwts_log_info_simp_int(fw, " Flags: ", entry->ivhd.flags); fwts_log_info_simp_int(fw, " Length: ", entry->ivhd.length); fwts_log_info_simp_int(fw, " DeviceID: ", entry->ivhd.device_id); fwts_log_info_simp_int(fw, " Capability Offset: ", entry->ivhd.capability_offset); fwts_log_info_simp_int(fw, " IOMMU Base Address: ", entry->ivhd.iommu_base_address); fwts_log_info_simp_int(fw, " PCI Segment Group: ", entry->ivhd.pci_seg_group); fwts_log_info_simp_int(fw, " IOMMU Info: ", entry->ivhd.iommu_info); fwts_log_info_simp_int(fw, " IOMMU Attribute: ", entry->iommu_attr); fwts_log_info_simp_int(fw, " EFR Register Image: ", entry->efr_reg_image); fwts_log_info_simp_int(fw, " WFR Register Image 2: ", entry->efr_reg_image_2); fwts_acpi_reserved_bits("IVRS", "Flags", entry->ivhd.flags, 6, 7, passed); fwts_acpi_reserved_bits("IVRS", "IOMMU Info", entry->ivhd.iommu_info, 5, 7, passed); fwts_acpi_reserved_bits("IVRS", "IOMMU Info", entry->ivhd.iommu_info, 13, 15, passed); fwts_acpi_reserved_bits("IVRS", "IOMMU Attribute", entry->iommu_attr, 0, 12, passed); fwts_acpi_reserved_bits("IVRS", "IOMMU Attribute", entry->iommu_attr, 28, 31, passed); ivrs_ivhd_device_entries_check(fw, entry->ivhd_device_entries, entries_len, passed); } static void ivrs_ivmd_test( fwts_framework *fw, const fwts_acpi_table_ivmd *entry, bool *passed) { fwts_log_info_verbatim(fw, " I/O Virtualization Memory Definition:"); fwts_log_info_simp_int(fw, " Type: ", entry->type); fwts_log_info_simp_int(fw, " Flags: ", entry->flags); fwts_log_info_simp_int(fw, " Length: ", entry->length); fwts_log_info_simp_int(fw, " DeviceID: ", entry->device_id); fwts_log_info_simp_int(fw, " Auxiliary data: ", entry->auxiliary_data); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_log_info_simp_int(fw, " PCI Segment Group: ", entry->pci_seg_group); fwts_log_info_simp_int(fw, " Start address: ", entry->start_address); fwts_log_info_simp_int(fw, " Memory block length: ", entry->mem_block_len); fwts_acpi_reserved_bits("IVRS", "Flags", entry->flags, 4, 7, passed); fwts_acpi_reserved_zero("IVRS", "Reserved", entry->reserved, passed); } static int ivrs_test1(fwts_framework *fw) { bool passed = true; fwts_acpi_table_ivrs *ivrs = (fwts_acpi_table_ivrs *)table->data; fwts_acpi_table_ivhd *entry; uint32_t offset; if (!fwts_acpi_table_length(fw, "IVRS", table->length, sizeof(fwts_acpi_table_ivrs))) return FWTS_OK; fwts_log_info_verbatim(fw, "IVRS I/O Virtualization Reporting Structure:"); fwts_log_info_simp_int(fw, " IVinfo: ", ivrs->ivinfo); fwts_log_info_simp_int(fw, " Reserved: ", ivrs->reserved); fwts_log_nl(fw); if (ivrs->header.revision == 0 || ivrs->header.revision > 2) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IVRSBadRevision", "IVRS format revision number must have the value with 1 or 2, got " "0x%2.2" PRIx8 "instead", ivrs->header.revision); } fwts_acpi_reserved_bits("IVRS", "IVinfo", ivrs->ivinfo, 2, 4, &passed); fwts_acpi_reserved_bits("IVRS", "IVinfo", ivrs->ivinfo, 23, 31, &passed); fwts_acpi_reserved_zero("IVRS", "Reserved", ivrs->reserved, &passed); entry = (fwts_acpi_table_ivhd *) (table->data + sizeof(fwts_acpi_table_ivrs)); offset = sizeof(fwts_acpi_table_ivrs); while (offset < table->length) { switch(entry->type) { case 0x10: ivrs_ivhd_10_test(fw, (fwts_acpi_table_ivhd_10 *)entry, &passed); offset += entry->length; break; case 0x11: fwts_log_info_verbatim(fw, " I/O Virtualization Hardware Definition Type 11h:"); ivrs_ivhd_11_40_test(fw, (fwts_acpi_table_ivhd_11_40 *)entry, &passed); offset += entry->length; break; case 0x40: fwts_log_info_verbatim(fw, " I/O Virtualization Hardware Definition Type 40h:"); if (ivrs->header.revision != 2) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IVRSBadRevision", "IVRS only allows the inclusion of IVHD type 40h on the revision 2, got " "0x%2.2" PRIx8 "instead", ivrs->header.revision); } ivrs_ivhd_11_40_test(fw, (fwts_acpi_table_ivhd_11_40 *)entry, &passed); offset += entry->length; break; case 0x20: case 0x21: case 0x22: ivrs_ivmd_test(fw, (fwts_acpi_table_ivmd *)entry, &passed); offset += entry->length; break; default: passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "IVRSBadIVHDType", "IVHD or IVMD must have type with Type 0x10, 0x11, 0x20 to 0x22 " "and 0x40 , got 0x%2.2" PRIx8 " instead", entry->type); offset += entry->length; break; } if (fwts_acpi_structure_range(fw, "IVRS", table->length, offset)) { passed = false; break; } entry = (fwts_acpi_table_ivhd *) (table->data + offset); fwts_log_nl(fw); } if (passed) fwts_passed(fw, "No issues found in IVRS table."); return FWTS_OK; } static fwts_framework_minor_test ivrs_tests[] = { { ivrs_test1, "Validate IVRS table." }, { NULL, NULL } }; static fwts_framework_ops ivrs_ops = { .description = "IVRS I/O Virtualization Reporting Structure test.", .init = IVRS_init, .minor_tests = ivrs_tests }; FWTS_REGISTER("ivrs", &ivrs_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/lid/000077500000000000000000000000001465205512700133405ustar00rootroot00000000000000src/acpi/lid/lid.c000066400000000000000000000122531465205512700142570ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #include #include static int lid_init(fwts_framework *fw) { uint32_t matched, not_matched; if (fwts_button_match_state(fw, FWTS_BUTTON_LID_ANY, &matched, ¬_matched) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_LOW, "NoLIDPath", "No lid interface available: cannot test."); return FWTS_ERROR; } return FWTS_OK; } static void lid_check_field_poll( fwts_framework *fw, const uint32_t button, uint32_t *matching, uint32_t *not_matching) { int i; uint32_t tmp_matching = 0; uint32_t tmp_not_matching = 0; for (i = 0; i < 100; i++) { fwts_button_match_state(fw, button, &tmp_matching, &tmp_not_matching); usleep(10); if (tmp_matching != 0) break; } *matching = tmp_matching; *not_matching = tmp_not_matching; } static int lid_test1(fwts_framework *fw) { uint32_t matching = 0; uint32_t not_matching = 0; fwts_printf(fw, "==== Make sure laptop lid is open. ====\n"); fwts_press_enter(fw); lid_check_field_poll(fw, FWTS_BUTTON_LID_OPENED, &matching, ¬_matching); if ((matching == 0) || (not_matching > 0)) fwts_failed(fw, LOG_LEVEL_HIGH, "LidNotOpen", "Detected a closed LID state."); else fwts_passed(fw, "Detected open LID state."); return FWTS_OK; } static int lid_test_state(fwts_framework *fw, int button) { int gpe_count = 0; int fd; uint32_t matching = 0; uint32_t not_matching = 0; int events = 0; size_t len; char *state; int i; fwts_gpe *gpes_start; fwts_gpe *gpes_end; switch (button) { case FWTS_BUTTON_LID_OPENED: state = "open"; break; case FWTS_BUTTON_LID_CLOSED: state = "closed"; break; default: state = "unknown"; break; } if ((gpe_count = fwts_gpe_read(&gpes_start)) == FWTS_ERROR) { fwts_log_error(fw, "Cannot read GPEs."); return FWTS_ERROR; } if ((fd = fwts_acpi_event_open()) < 0) { fwts_log_error(fw, "Cannot connect to acpid."); fwts_gpe_free(gpes_start, gpe_count); return FWTS_ERROR; } for (i = 0; i <= 20; i++) { char *buffer; if ((buffer = fwts_acpi_event_read(fd, &len, 1)) != NULL) { if (strstr(buffer, "button/lid")) { events++; lid_check_field_poll(fw, button, &matching, ¬_matching); break; } free(buffer); } fwts_printf(fw, "Waiting %2.2d/20\r", 20-i); } fwts_acpi_event_close(fd); if ((gpe_count = fwts_gpe_read(&gpes_end)) == FWTS_ERROR) { fwts_log_error(fw, "Cannot read GPEs."); fwts_gpe_free(gpes_start, gpe_count); return FWTS_ERROR; } fwts_gpe_test(fw, gpes_start, gpes_end, gpe_count); fwts_gpe_free(gpes_start, gpe_count); fwts_gpe_free(gpes_end, gpe_count); if (events == 0) fwts_failed(fw, LOG_LEVEL_HIGH, "NoLidEvents", "Did not detect any ACPI LID events while waiting for to LID %s.", state); else { fwts_passed(fw, "Detected ACPI LID events while waiting for LID to %s.", state); if ((matching == 0) || (not_matching > 0)) fwts_failed(fw, LOG_LEVEL_HIGH, "NoLidState", "Could not detect lid %s state.", state); else fwts_passed(fw, "Detected lid %s state.", state); } return FWTS_OK; } static int lid_test2(fwts_framework *fw) { int ret; fwts_printf(fw, "==== Please close laptop lid for 2 seconds and then re-open. ====\n"); if ((ret = lid_test_state(fw, FWTS_BUTTON_LID_CLOSED)) != FWTS_OK) return ret; if ((ret = lid_test_state(fw, FWTS_BUTTON_LID_OPENED)) != FWTS_OK) return ret; return FWTS_OK; } static int lid_test3(fwts_framework *fw) { int i; fwts_log_info(fw, "Some machines may have EC or ACPI faults that cause detection of multiple open/close events to fail."); for (i = 1; i < 4; i++) { int ret; fwts_printf(fw, "==== %d of %d: Please close laptop lid for 2 seconds and then re-open. ====\n", i,3); if ((ret = lid_test_state(fw, FWTS_BUTTON_LID_CLOSED)) != FWTS_OK) return ret; if ((ret = lid_test_state(fw, FWTS_BUTTON_LID_OPENED)) != FWTS_OK) return ret; } return FWTS_OK; } static fwts_framework_minor_test lid_tests[] = { { lid_test1, "Test LID buttons report open correctly." }, { lid_test2, "Test LID buttons on a single open/close." }, { lid_test3, "Test LID buttons on multiple open/close events." }, { NULL, NULL } }; static fwts_framework_ops lid_ops = { .description = "Interactive lid button test.", .init = lid_init, .minor_tests = lid_tests }; FWTS_REGISTER("lid", &lid_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_INTERACTIVE) #endif src/acpi/lpit/000077500000000000000000000000001465205512700135405ustar00rootroot00000000000000src/acpi/lpit/lpit.c000066400000000000000000000172761465205512700146710ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) && !(FWTS_ARCH_AARCH64) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(LPIT, &table) static void lpit_check_type_0( fwts_framework *fw, uint32_t *length, uint8_t **data, bool *passed) { fwts_acpi_table_lpit_c_state *lpi = (fwts_acpi_table_lpit_c_state *)*data; /* We know table is at least long enough to access type and length.. */ fwts_log_info_verbatim(fw, "Native C-state based LPI structure:"); fwts_log_info_simp_int(fw, " Type: ", lpi->type); fwts_log_info_simp_int(fw, " Length: ", lpi->length); if (lpi->length < sizeof(fwts_acpi_table_lpit_c_state)) { *passed = false; *length = 0; /* Force loop exit */ fwts_failed(fw, LOG_LEVEL_HIGH, "LPITNativeCStateLpitShort", "Native C-state based LPI structure is too short, " "got %" PRIu32 " bytes, expected %zu bytes", lpi->length, sizeof(fwts_acpi_table_lpit_c_state)); return; } fwts_log_info_simp_int(fw, " ID: ", lpi->id); fwts_log_info_simp_int(fw, " Reserved: ", lpi->reserved); fwts_log_info_simp_int(fw, " Flags: ", lpi->flags); fwts_log_info_verbatim(fw, " Entry Trigger:"); fwts_log_info_simp_int(fw, " Address Space ID: ", lpi->entry_trigger.address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", lpi->entry_trigger.register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", lpi->entry_trigger.register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", lpi->entry_trigger.access_width); fwts_log_info_simp_int(fw, " Address ", lpi->entry_trigger.address); fwts_log_info_simp_int(fw, " Residency: ", lpi->residency); fwts_log_info_simp_int(fw, " Latency: ", lpi->latency); /* If flags [1] set, then counter is not available */ if (lpi->flags & 0x2) { fwts_log_info_verbatim(fw, " Residency Counter not available"); } else { fwts_log_info_verbatim(fw, " Residency Counter:"); fwts_log_info_simp_int(fw, " Address Space ID: ", lpi->residency_counter.address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", lpi->residency_counter.register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", lpi->residency_counter.register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", lpi->residency_counter.access_width); fwts_log_info_simp_int(fw, " Address ", lpi->residency_counter.address); fwts_log_info_simp_int(fw, " Residency Counter Freq: ", lpi->residency_counter_freq); } fwts_log_nl(fw); fwts_acpi_reserved_zero("LPIT", "Native C-state based LPI structure reserved", lpi->reserved, passed); fwts_acpi_reserved_bits("LPIT", "LPI structure flags", lpi->flags, 2, 31, passed); /* 2.2.1.2, if FFH, then it is a MSR, check GAS fields */ if (((lpi->flags & 2) == 0) && (lpi->residency_counter.address_space_id == FWTS_GAS_ADDR_SPACE_ID_FFH)) { if (lpi->residency_counter.register_bit_width != 64) { *passed = false; fwts_failed(fw, LOG_LEVEL_LOW, "LPITNativeCStateLpitResidencyCounterWidth", "Native C-state based LPI structure Residency Structure " "Register Bit Width was %" PRIu8 " for a FFH Address " "Space (e.g. a MSR), and was expecting 64.", lpi->residency_counter.register_bit_width); } if (lpi->residency_counter.register_bit_offset != 0) { *passed = false; fwts_failed(fw, LOG_LEVEL_LOW, "LPITNativeCStateLpitResidencyCounterOffset", "Native C-state based LPI structure Residency Structure " "Register Bit Offset %" PRIu8 " for a FFH Address " "Space (e.g. a MSR), and was expecting 0.", lpi->residency_counter.register_bit_offset); } if (lpi->residency_counter.access_width != 0) { *passed = false; fwts_failed(fw, LOG_LEVEL_LOW, "LPITNativeCStateLpitResidencyCounterAccessSize", "Native C-state based LPI structure Residency Structure " "Register Access Size %" PRIu8 " for a FFH Address " "Space (e.g. a MSR), and was expecting 0.", lpi->residency_counter.access_width); } } if (! *passed) fwts_log_nl(fw); *length -= lpi->length; *data += lpi->length; } /* * http://www.uefi.org/sites/default/files/resources/ACPI_Low_Power_Idle_Table.pdf */ static int lpit_test1(fwts_framework *fw) { uint8_t *data; bool passed = true; uint32_t length; uint16_t uid = 0, init_id = 0; fwts_acpi_table_lpit *lpit = (fwts_acpi_table_lpit *)table->data; if (table->length < sizeof(fwts_acpi_table_lpit)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "LPITTooShort", "LPIT is only %zu bytes long, " "expected at least %zu bytes for the " "header structure", table->length, sizeof(fwts_acpi_table_lpit_c_state)); goto done; } length = lpit->header.length - sizeof(fwts_acpi_table_lpit); data = (uint8_t *)table->data + sizeof(fwts_acpi_table_lpit); /* Got enough data to be able to inspect the initial 2 x 32 bit words.. */ while (length > 8) { fwts_acpi_table_lpit_c_state *lpi = (fwts_acpi_table_lpit_c_state *)data; uint32_t *ptr = (uint32_t *)data; uint32_t lpi_length = *(ptr + 1); /* Stated LPI length must not be longer than what's left in the table */ if (length < lpi_length) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "LPITTooShort", "LPIT LPI structure type is only %" PRIu32 " bytes long, expected at least %zu bytes", length, table->length); break; } /* For now, just one type is described in the specification */ switch (*ptr) { case 0x0: lpit_check_type_0(fw, &length, &data, &passed); /* check lpi->id starts from zero */ if (init_id == 0 && lpi->id != 0) { passed = false; fwts_failed(fw, LOG_LEVEL_CRITICAL, "LPITNativeCStateBadUID", "Unique ID of Native C-state based LPI " "structure must start from zero"); } else init_id = 1; /* check lpi->id increases monotonically */ if (uid > lpi->id || (lpi->id - uid) > 1) { passed = false; fwts_failed(fw, LOG_LEVEL_CRITICAL, "LPITNativeCStateBadUID", "Unique ID of Native C-state based LPI " "structure must be a zero-based monotonically " "increasing value"); } uid = lpi->id; break; default: passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "LPITInvalidType", "LPIT Type 0x8.8%" PRIx32 " is an invalid type, expecting 0", *ptr); length = 0; break; } } done: if (passed) fwts_passed(fw, "No issues found in LPIT table."); return FWTS_OK; } static fwts_framework_minor_test lpit_tests[] = { { lpit_test1, "LPIT Low Power Idle Table test." }, { NULL, NULL } }; static fwts_framework_ops lpit_ops = { .description = "LPIT Low Power Idle Table test.", .init = LPIT_init, .minor_tests = lpit_tests }; FWTS_REGISTER("lpit", &lpit_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/madt/000077500000000000000000000000001465205512700135155ustar00rootroot00000000000000src/acpi/madt/madt.c000066400000000000000000001552141465205512700146160ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * Portions added (c) 2015, Al Stone * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #include /* * The Long, Sad, True Story of the MADT * * Once upon a time in ACPI 1.0, there was the MADT. It was a nice table, * and it had two subtables all of its own. But, it was also a pretty * busy table, too, so over time the MADT gathered up other nice little * subtables. By the time ACPI 6.0 came around, the MADT had 16 of the * little guys. * * Now, the MADT kept a little counter around for the subtables. In fact, * it kept two counters: one was the revision level, which was supposed to * change when new subtables came to be, or as the ones already around grew * up. The second counter was a type number, because the MADT needed a unique * type for each subtable so he could tell them apart. But, sometimes the * MADT got so busy, he forgot to increment the revision level when he needed * to. Fortunately, the type counter kept increasing since that's the only * way the MADT could find each little subtable. It just wouldn't do to have * every subtable called Number 6. * * In the next valley over, a castle full of wizards was watching the MADT * and made a pact to keep their own counter. Every time the MADT found a * new subtable, or a subtable grew up, the wizards promised they would * increment their counter. Well, wizards being the forgetful sort, they * didn't always do that. And, since there quite a lot of them, they * couldn't always remember who was supposed to keep track of the MADT, * especially if dinner was coming up soon. Their counter was called the * spec version. * * Every now and then, the MADT would gather up all its little subtables * and take them in to the cobbler to get new boots. This was a very, very * meticulous cobbler, so every time they came, he wrote down all the boot * sizes for all of the little subtables. The cobbler would ask each subtable * for its length, check that against his careful notes, and then go get the * right boots. Sometimes, a little subtable would change a bit, and their * length did not match what the cobbler had written down. If the wizards * or the MADT had incremented their counters, the cobbler would breath a * sigh of relief and write down the new length as the right one. But, if * none of the counters had changed, this would make the cobbler very, very * mad. He couldn't tell if he had the right size boots or not for the * little subtable. He would have to *guess* and this really bugged him. * * Well, when the cobbler got mad like this, he would go into hiding. He * would not make or sell any boots. He would not go out at all. Pretty * soon, the coffee shop would have to close because the cobbler wasn't * coming by twice a day any more. Then the grocery store would have to * close because he wouldn't eat much. After a while, everyone would panic * and have to move from the village and go live with all their relatives * (usually the ones they didn't like very much). * * Eventually, the cobbler would work his way out of his bad mood, and * open up his boot business again. Then, everyone else could move back * to the village and restart their lives, too. * * Fortunately, we have been able to collect up all the cobbler's careful * notes (and we wrote them down below). We'll have to keep checking these * notes over time, too, just as the cobbler does. But, in the meantime, * we can avoid the panic and the reboot since we can make sure that each * subtable is doing okay. And that's what our tests below check. * * * FADT Major Version -> 1 3 4 4 5 5 6 6 6 * FADT Minor Version -> x x x x x 1 0 0 1 * MADT revision -> 1 1 2 3 3 3 3 4 4 * Spec Version -> 1.0 2.0 3.0b 4.0a 5.0b 5.1a 6.0 6.0a 6.1 * Subtable Name Type Expected Length -> * Processor Local APIC 0x0 8 8 8 8 8 8 8 8 8 * IO APIC 0x1 12 12 12 12 12 12 12 12 12 * Int Src Override 0x2 10 10 10 10 10 10 10 10 10 * NMI Src 0x3 8 8 8 8 8 8 8 8 8 * Local APIC NMI Struct 0x4 6 6 6 6 6 6 6 6 6 * Local APIC Addr Ovrrd 0x5 16 12 12 12 12 12 12 12 * IO SAPIC 0x6 20 16 16 16 16 16 16 16 * Local SAPIC 0x7 8 >16 >16 >16 >16 >16 >16 >16 * Platform Int Src 0x8 16 16 16 16 16 16 16 16 * Proc Local x2APIC 0x9 16 16 16 16 16 16 * Local x2APIC NMI 0xa 12 12 12 12 12 12 * GICC CPU I/F 0xb 40 76 80 80 80 * GICD 0xc 24 24 24 24 24 * GICv2m MSI 0xd 24 24 24 24 * GICR 0xe 16 16 16 16 * GIC ITS 0xf 20 20 20 * * In the table, each length entry is what should be in the length * field of the subtable, and -- in general -- it should match the * size of the struct for the subtable. Any value that is not set * (i.e., is zero) indicates that the subtable is not defined for * that version of the ACPI spec. * */ #define FADT_MAX_MAJOR_REVISION ((uint8_t)((FWTS_ACPI_VERSION_NOW & 0xF00) >> 8)) #define FADT_MAX_MINOR_REVISION ((uint8_t)(FWTS_ACPI_VERSION_NOW & 0xF0) >> 4) #define MADT_MAX_REVISION ((uint8_t)6) #define SUBTABLE_UNDEFINED 0x00 #define SUBTABLE_VARIABLE 0xff #define NUM_SUBTABLE_TYPES 24 #define MAX_IO_APIC_ID 256 /* IO APIC ID field is 1 byte */ #define SBBR_ACPI_MAJOR_VERSION 6 struct acpi_madt_subtable_lengths { unsigned short major_version; /* from revision in FADT header */ unsigned short minor_version; /* FADT field starting with 5.1 */ unsigned short madt_version; /* MADT revision */ unsigned short num_types; /* types possible for this version */ unsigned short lengths[NUM_SUBTABLE_TYPES]; /* subtable lengths, indexed by type */ }; static struct acpi_madt_subtable_lengths spec_info[] = { { /* for ACPI 1.0b */ .major_version = 1, .minor_version = 0, .madt_version = 1, .num_types = 5, .lengths = { 8, 12, 10, 8, 6 } }, { /* for ACPI 2.0 */ .major_version = 3, .minor_version = 0, .madt_version = 1, .num_types = 9, .lengths = { 8, 12, 10, 8, 6, 16, 20, 8, 16 } }, { /* for ACPI 3.0b */ .major_version = 4, .minor_version = 0, .madt_version = 2, .num_types = 9, .lengths = { 8, 12, 10, 8, 6, 12, 16, SUBTABLE_VARIABLE, 16 } }, { /* for ACPI 4.0a */ .major_version = 4, .minor_version = 0, .madt_version = 3, .num_types = 11, .lengths = { 8, 12, 10, 8, 6, 12, 16, SUBTABLE_VARIABLE, 16, 16, 12 } }, { /* for ACPI 5.0b */ .major_version = 5, .minor_version = 0, .madt_version = 3, .num_types = 13, .lengths = { 8, 12, 10, 8, 6, 12, 16, SUBTABLE_VARIABLE, 16, 16, 12, 40, 24 } }, { /* for ACPI 5.1a */ .major_version = 5, .minor_version = 1, .madt_version = 3, .num_types = 15, .lengths = { 8, 12, 10, 8, 6, 12, 16, SUBTABLE_VARIABLE, 16, 16, 12, 76, 24, 24, 16 } }, { /* for ACPI 6.0 */ .major_version = 6, .minor_version = 0, .madt_version = 3, .num_types = 16, .lengths = { 8, 12, 10, 8, 6, 12, 16, SUBTABLE_VARIABLE, 16, 16, 12, 80, 24, 24, 16, 20 } /* * The spec technically defines the GIC ITS node length to be * 16, but this is a clear mistake as the fields add up to be * length 20, and the length was corrected in the next revision. * Test for 20, as that is what is expected to be used in real, * implementations and using length 20 ensures that the test can * correctly find the start of any following nodes. */ }, { /* for ACPI 6.0a */ .major_version = 6, .minor_version = 0, .madt_version = 4, .num_types = 16, .lengths = { 8, 12, 10, 8, 6, 12, 16, SUBTABLE_VARIABLE, 16, 16, 12, 80, 24, 24, 16, 20 } }, { /* for ACPI 6.1 */ .major_version = 6, .minor_version = 1, .madt_version = 4, .num_types = 16, .lengths = { 8, 12, 10, 8, 6, 12, 16, SUBTABLE_VARIABLE, 16, 16, 12, 80, 24, 24, 16, 20 } }, { /* for ACPI 6.2 */ .major_version = 6, .minor_version = 2, .madt_version = 4, .num_types = 16, .lengths = { 8, 12, 10, 8, 6, 12, 16, SUBTABLE_VARIABLE, 16, 16, 12, 80, 24, 24, 16, 20 } }, { /* for ACPI 6.3 & 6.3a*/ .major_version = 6, .minor_version = 3, .madt_version = 5, .num_types = 16, .lengths = { 8, 12, 10, 8, 6, 12, 16, SUBTABLE_VARIABLE, 16, 16, 12, 80, 24, 24, 16, 20 } }, { /* for ACPI 6.4 */ .major_version = 6, .minor_version = 4, .madt_version = 5, .num_types = 16, .lengths = { 8, 12, 10, 8, 6, 12, 16, SUBTABLE_VARIABLE, 16, 16, 12, 80, 24, 24, 16, 20 } }, { /* for ACPI 6.5 */ .major_version = 6, .minor_version = 5, .madt_version = 6, .num_types = 24, .lengths = { 8, 12, 10, 8, 6, 12, 16, SUBTABLE_VARIABLE, 16, 16, 12, 82, 24, 24, 16, 20, 16, 15, 23, 21, 13, 19, 17, 15 } }, { /* terminator */ .major_version = 0, .minor_version = 0, .madt_version = 0, .num_types = 0, .lengths = { 0 } } }; static struct acpi_madt_subtable_lengths *spec_data; static uint8_t fadt_major; static uint8_t fadt_minor; static fwts_acpi_table_info *mtable; static fwts_acpi_table_info *ftable; static fwts_list msi_frame_ids; static fwts_list its_ids; static fwts_list processor_uids; struct acpi_integer { ACPI_OBJECT_TYPE type; uint64_t value; }; static ACPI_STATUS madt_processor_handler(ACPI_HANDLE ObjHandle, uint32_t level, void *context, void **returnvalue) { ACPI_OBJECT_TYPE acpi_type; ACPI_STATUS status; ACPI_OBJECT obj; struct acpi_buffer buf = {sizeof(ACPI_OBJECT), &obj}; struct acpi_integer *listint; /* Prevent -Werror=unused-parameter from complaining */ FWTS_UNUSED(level); FWTS_UNUSED(context); FWTS_UNUSED(returnvalue); listint = malloc(sizeof(struct acpi_integer)); if (!listint) return (!AE_OK); status = AcpiGetType(ObjHandle, &acpi_type); if (ACPI_FAILURE(status)) { free(listint); return (!AE_OK); } switch(acpi_type) { case ACPI_TYPE_PROCESSOR: status = AcpiEvaluateObject(ObjHandle, NULL, NULL, &buf); if (ACPI_FAILURE(status)) { free(listint); return status; } listint->value = obj.Processor.ProcId; break; case ACPI_TYPE_DEVICE: status = AcpiEvaluateObject(ObjHandle, "_UID", NULL, &buf); if (ACPI_FAILURE(status)) { free(listint); return status; } listint->value = obj.Integer.Value; break; default: free(listint); return (!AE_OK); } listint->type = acpi_type; fwts_list_append(&processor_uids, listint); return (AE_OK); } static ACPI_OBJECT_TYPE madt_find_processor_uid(fwts_framework *fw, uint64_t uid, char *table_name) { char table_label[64]; fwts_list_link *item; fwts_list_foreach(item, &processor_uids) { struct acpi_integer *listint = fwts_list_data(struct acpi_integer *, item); if (uid == listint->value) { fwts_passed(fw, "MADT %s has matching processor " "UID %" PRIu64 ".", table_name, uid); return listint->type; } if ((uid == 0xFF) && (strcmp(table_name, "LAPICNMI") == 0)) { fwts_passed(fw, "MADT %s has processor " "UID 0x%" PRIx64 " which signifies " "that this applies to all processors " "in the machine.", table_name, uid); return listint->type; } } sprintf(table_label, "MADT%sUidMismatch", table_name); fwts_failed(fw, LOG_LEVEL_MEDIUM, table_label, "%s has no matching processor UID %" PRIu64, table_name, uid); return ACPI_NUM_TYPES; } static int madt_init(fwts_framework *fw) { fwts_acpi_table_madt *madt; fwts_acpi_table_fadt *fadt; struct acpi_madt_subtable_lengths *ms = spec_info; /* find the ACPI tables needed */ if (fwts_acpi_find_table(fw, "APIC", 0, &mtable) != FWTS_OK) { fwts_log_error(fw, "Cannot find ACPI MADT tables."); return FWTS_ERROR; } if (!mtable) { fwts_log_error(fw, "Cannot read ACPI MADT tables."); return FWTS_ERROR; } if (fwts_acpi_find_table(fw, "FACP", 0, &ftable) != FWTS_OK) { fwts_log_error(fw, "Cannot find ACPI FADT tables."); return FWTS_ERROR; } if (!ftable) { fwts_log_error(fw, "Cannot read ACPI FADT tables."); return FWTS_ERROR; } if (!mtable || mtable->length == 0) { fwts_log_error(fw, "Required ACPI MADT (APIC) table not found"); return FWTS_ERROR; } if (!ftable || ftable->length == 0) { fwts_log_error(fw, "Required ACPI FADT (FACP) table not found"); return FWTS_ERROR; } /* determine the reference data needed */ madt = (fwts_acpi_table_madt *)mtable->data; fadt = (fwts_acpi_table_fadt *)ftable->data; fadt_major = fadt->header.revision; fadt_minor = 0; if (fw->flags & FWTS_FLAG_SBBR) { if (fadt_major < SBBR_ACPI_MAJOR_VERSION) { fwts_log_error(fw, "SBBR support starts with ACPI v6.0," " Current revision is outdated: %" PRIu8 ".%" PRIu8, fadt_major, fadt_minor); return FWTS_ERROR; } } fwts_get_fadt_version(fw, &fadt_major, &fadt_minor); /* find the first occurrence for this version of MADT */ while (ms->num_types != 0) { if (ms->madt_version == madt->header.revision) break; ms++; } /* now, find the largest FADT version supported */ spec_data = NULL; while (ms->num_types && ms->madt_version == madt->header.revision) { if (ms->major_version <= fadt_major && ms->minor_version <= fadt_minor) { spec_data = ms; } ms++; } /* * Initialize the MSI frame ID and ITS ID lists should we need * them later */ fwts_list_init(&msi_frame_ids); fwts_list_init(&its_ids); fwts_list_init(&processor_uids); if (fwts_acpica_init(fw) != FWTS_OK) return FWTS_ERROR; PRAGMA_PUSH PRAGMA_NULL_PTR_MATH AcpiWalkNamespace(0x0c, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, madt_processor_handler, NULL, NULL, NULL); PRAGMA_POP AcpiGetDevices("ACPI0007", madt_processor_handler, NULL, NULL); if (!spec_data) fwts_acpica_deinit(); return (spec_data) ? FWTS_OK : FWTS_ERROR; } static int madt_checksum(fwts_framework *fw) { uint8_t *data = mtable->data; ssize_t length = mtable->length; uint8_t checksum = 0; /* verify the table checksum */ checksum = fwts_checksum(data, length); if (checksum == 0) fwts_passed(fw, "MADT checksum is correct"); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTChecksum", "MADT checksum is incorrect: 0x%x", checksum); return FWTS_OK; } static int madt_revision(fwts_framework *fw) { fwts_acpi_table_madt *madt = (fwts_acpi_table_madt *)mtable->data; struct acpi_madt_subtable_lengths *ms = spec_data; /* check the table revision */ fwts_log_advice(fw, "Most recent FADT revision is %" PRIu8 ".%" PRIu8 ".", FADT_MAX_MAJOR_REVISION, FADT_MAX_MINOR_REVISION); fwts_log_advice(fw, "Most recent MADT revision is %" PRIu8 ".", MADT_MAX_REVISION); /* is the madt revision defined at all? */ if (!ms->num_types) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTRevision", "Undefined MADT revision being used: %" PRIu8, madt->header.revision); } else { fwts_passed(fw, "MADT revision %" PRIu8 " is defined.", madt->header.revision); } /* is the madt revision in sync with the fadt revision? */ if (ms->major_version != fadt_major || ms->minor_version != fadt_minor) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTFADTRevisions", "MADT revision is not in sync with " "the FADT revision;\n" "MADT %" PRIu8 " expects FADT %" PRIu8 ".%" PRIu8 " " "but found %" PRIu8 ".%" PRIu8 " instead.", madt->header.revision, ms->major_version, ms->minor_version, fadt_major, fadt_minor); } else { fwts_passed(fw, "MADT revision %" PRIu8 " is in sync " "with FADT revision %" PRIu8 ".%" PRIu8 ".", madt->header.revision, fadt_major, fadt_minor); } return FWTS_OK; } static int madt_arch_revision(fwts_framework *fw) { fwts_acpi_table_madt *madt = (fwts_acpi_table_madt *)mtable->data; uint8_t minrev; const char *arch; /* initialize starting assumptions */ if (fw->target_arch == FWTS_ARCH_ARM64) { minrev = 3; arch = "aarch64"; } else { minrev = 1; arch = "intel"; } /* check the supported revision for this architecture */ if (madt->header.revision >= minrev) fwts_passed(fw, "MADT revision %" PRIu8 " meets the minimum needed " "(%" PRIu8 ") for the %s architecture.", madt->header.revision, minrev, arch); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTArchRevision", "MADT revision is %" PRIu8 ", must be >= %" PRIu8 " " "when running on %s", madt->header.revision, minrev, arch); return FWTS_OK; } static int madt_flags(fwts_framework *fw) { fwts_acpi_table_madt *madt = (fwts_acpi_table_madt *)mtable->data; /* make sure the reserved bits in the flag field are zero */ if (madt->flags & 0xfffffffe) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTFlagsNonZero", "MADT flags field, bits 1..31 are reserved and " "should be zero, but are set as: %" PRIx32 ".\n", madt->flags); else fwts_passed(fw, "MADT flags reserved bits are not set."); return FWTS_OK; } static const char *madt_sub_names[] = { /* 0x00 */ "Processor Local APIC", /* 0x01 */ "I/O APIC", /* 0x02 */ "Interrupt Source Override", /* 0x03 */ "Non-maskable Interrupt Source (NMI)", /* 0x04 */ "Local APIC NMI", /* 0x05 */ "Local APIC Address Override", /* 0x06 */ "I/O SAPIC", /* 0x07 */ "Local SAPIC", /* 0x08 */ "Platform Interrupt Sources", /* 0x09 */ "Processor Local x2APIC", /* 0x0a */ "Local x2APIC NMI", /* 0x0b */ "GICC CPU Interface", /* 0x0c */ "GICD GIC Distributor", /* 0x0d */ "GICv2m MSI Frame", /* 0x0e */ "GICR Redistributor", /* 0x0f */ "GIC Interrupt Translation Service (ITS)", /* 0x10 */ "Multiprocessor Wakeup", /* 0x11 */ "CORE PIC", /* 0x12 */ "LIO PIC", /* 0x13 */ "HT PIC", /* 0x14 */ "EIO PIC", /* 0x15 */ "MSI PIC", /* 0x16 */ "BIO PIC", /* 0x17 */ "LPC PIC", /* 0x18 - 0x7f */ "Reserved. OSPM skips structures of the reserved type.", /* 0x80 - 0xff */ "Reserved for OEM use", NULL }; /* check flags points to Table 5-48 Local APIC Flags */ static void check_madt_apic_flags( fwts_framework *fw, const uint8_t type, const uint32_t flags) { fwts_acpi_table_madt *madt = (fwts_acpi_table_madt *) mtable->data; bool passed = true; uint8_t head = 2; if (madt->header.revision < 5) head = 1; fwts_acpi_reserved_bits("MADT", "Local APIC Flags", flags, head, 31, &passed); if (passed) fwts_passed(fw, "MADT %s flags field, bits %" PRIu8 "..31 are reserved and properly set to zero.", madt_sub_names[type], head); } static int madt_local_apic(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 0: Processor Local APIC */ fwts_acpi_madt_processor_local_apic *lapic = (fwts_acpi_madt_processor_local_apic *)data; /* only test table if enabled */ if (!(lapic->flags & 0x1)) { fwts_skipped(fw, "MADT %s is disabled. Skipping test.", madt_sub_names[hdr->type]); goto out; } madt_find_processor_uid(fw, lapic->acpi_processor_id, "LAPIC"); check_madt_apic_flags (fw, hdr->type, lapic->flags); out: return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static unsigned char madt_io_apics[MAX_IO_APIC_ID]; static int madt_io_apic(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 1: I/O APIC */ fwts_acpi_madt_io_apic *ioapic = (fwts_acpi_madt_io_apic *)data; if (ioapic->reserved != 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTIOAPICFlags", "MADT %s flags are reserved, should be zero " "but are set to: %" PRIx32 ".", madt_sub_names[hdr->type], ioapic->reserved); else fwts_passed(fw, "MADT %s flags are reserved, and set to zero.", madt_sub_names[hdr->type]); if (ioapic->io_apic_phys_address == 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTIOAPICAddrZero", "MADT %s address is zero, needs to be defined.", madt_sub_names[hdr->type]); else fwts_passed(fw, "MADT %s address in non-zero.", madt_sub_names[hdr->type]); if (!madt_io_apics[ioapic->io_apic_id]) madt_io_apics[ioapic->io_apic_id] = 1; else fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADIOSAPICNotUnique", "There are multiple entries for id %" PRIu8 ".", ioapic->io_apic_id); return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_interrupt_override(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 2: Interrupt Source Override */ fwts_acpi_madt_interrupt_override *int_override = (fwts_acpi_madt_interrupt_override *)data; if (int_override->bus != 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTIRQSrcISA", "MADT %s bus should be 0 for ISA bus.", madt_sub_names[hdr->type]); else fwts_passed(fw, "MADT %s Bus is 0 for ISA bus.", madt_sub_names[hdr->type]); if (int_override->flags & 0xfffffff0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTIRQSrcFlags", "MADT %s flags, bits 4..31 are reserved " "and should be zero, but are set as: %" PRIx32 ".", madt_sub_names[hdr->type], int_override->flags); else fwts_passed(fw, "MADT %s flags, bits 4..31 are reserved " "and set to zero.", madt_sub_names[hdr->type]); return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_nmi_source(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 3: NMI Source */ fwts_acpi_madt_nmi *nmi = (fwts_acpi_madt_nmi *)data; if (nmi->flags & 0xfffffff0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTNMISrcFlags", "MADT %s flags, bits 4..31 are reserved " "and should be zero, but are set as: %" PRIx32 ".", madt_sub_names[hdr->type], nmi->flags); else fwts_passed(fw, "MADT %s flags, bits 4..31 are reserved " "and set to zero.", madt_sub_names[hdr->type]); return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_local_apic_nmi(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 4: Local APIC NMI */ fwts_acpi_madt_local_apic_nmi *nmi = (fwts_acpi_madt_local_apic_nmi *)data; madt_find_processor_uid(fw, nmi->acpi_processor_id, "LAPICNMI"); if (nmi->flags & 0xfffffff0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTLAPICNMIFlags", "MADT %s flags, bits 4..31 are reserved " "and should be zero, but are set as: %" PRIx32 ".", madt_sub_names[hdr->type], nmi->flags); else fwts_passed(fw, "MADT %s flags, bits 4..31 are reserved " "and set to zero.", madt_sub_names[hdr->type]); return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_lapic_addr_override(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 5: Local APIC Address Override */ static int count; fwts_acpi_madt_local_apic_addr_override *laao = (fwts_acpi_madt_local_apic_addr_override *)data; count++; if (laao->reserved != 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTLAPICOVRReserved", "MADT %s bytes 2..4 are reserved " "and should be zero, but are set as: %" PRIx32 ".", madt_sub_names[hdr->type], laao->reserved); else fwts_passed(fw, "MADT %s bytes 2..4 are reserved and set to zero.", madt_sub_names[hdr->type]); if (laao->address == 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTLAPICOVRAddress", "MADT %s address should not be set to zero.", madt_sub_names[hdr->type]); else fwts_passed(fw, "MADT %s address set to non-zero value.", madt_sub_names[hdr->type]); if (count > 1) fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTLAPICOVRCount", "Only one MADT %s allowed, %d found.", madt_sub_names[hdr->type], count); return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static unsigned char madt_io_sapics[MAX_IO_APIC_ID]; static int madt_io_sapic(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 6: I/O SAPIC */ fwts_acpi_madt_io_sapic *sapic = (fwts_acpi_madt_io_sapic *)data; if (sapic->reserved != 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTIOSAPICReserved", "MADT %s byte offset 3 is reserved " "and should be zero, but is set to: %" PRIx32 ".", madt_sub_names[hdr->type], sapic->reserved); else fwts_passed(fw, "MADT %s bytes 2..4 are reserved and set to zero.", madt_sub_names[hdr->type]); if (sapic->address == 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADIOSAPICAddrZero", "MADT %s address is zero, needs to be defined.", madt_sub_names[hdr->type]); else fwts_passed(fw, "MADT %s address set to non-zero value.", madt_sub_names[hdr->type]); if (!madt_io_sapics[sapic->io_sapic_id]) madt_io_sapics[sapic->io_sapic_id] = 1; else fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADIOSAPICNotUnique", "There are multiple entries for id %" PRIu8 ".", sapic->io_sapic_id); return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_local_sapic(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 7: Processor Local SAPIC */ fwts_acpi_madt_local_sapic *lsapic = (fwts_acpi_madt_local_sapic *)data; uint8_t tmp; int ii; ACPI_OBJECT_TYPE type; /* * TODO: if using the SAPIC model, check that each processor in * the system has a SAPIC record as required. The table is not * required to match hotplug additions, but should at least match * initial boot state. */ if (hdr->length != (strlen(lsapic->uid_string) + 16)) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTLSAPICLength", "MADT %s length of %" PRIu8 " bytes does not match " "actual length of %zd bytes.", madt_sub_names[hdr->type], hdr->length, strlen(lsapic->uid_string) + 16); else fwts_passed(fw, "MADT %s table length (%" PRIu8 ") is correct.", madt_sub_names[hdr->type], hdr->length); /* only continue testing table if enabled */ if (!(lsapic->flags & 0x1)) { fwts_skipped(fw, "MADT %s is disabled. Skipping test.", madt_sub_names[hdr->type]); goto out; } /* * There are three values that need to be checked for a valid * processor UID: the ACPI processor ID, the UID value, and the UID * string (which is an ascii representation of the UID value). All * three should have the same value in order for the test to pass. */ type = madt_find_processor_uid(fw, lsapic->acpi_processor_id, "LSAPIC"); switch(type) { case ACPI_TYPE_PROCESSOR: break; /* nothing more to do */ case ACPI_TYPE_DEVICE: if (lsapic->uid_value == lsapic->acpi_processor_id) fwts_passed(fw, "MADT LSAPIC UID value is %" PRIu32 ".", lsapic->uid_value); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTLSAPICUidCompare", "MADT LSAPIC UID value (%" PRIu32 ") does not " "match ACPI processor ID (%" PRIu8 ").", lsapic->uid_value, lsapic->acpi_processor_id); if (atoi(lsapic->uid_string) == lsapic->acpi_processor_id) fwts_passed(fw, "MADT ACPI processor id string is %s.", lsapic->uid_string); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTLSAPICUidCompare", "MADT LSAPIC UID string (%s) does not " "match UID value (%" PRIu8 ").", lsapic->uid_string, lsapic->acpi_processor_id); break; default: /* Error already reported in madt_find_processor_uid() call */ fwts_warning(fw, "MADT LSAPIC UID value (%" PRIu32 ") and UID string " "(%s) may be incorrect.", lsapic->uid_value, lsapic->uid_string); break; } for (tmp = 0, ii = 0; ii < 3; tmp |= lsapic->reserved[ii], ii++) ; if (tmp) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTLSAPICReservedNonZero", "MADT %s reserved field, byte offsets 5..8 are " "reserved and should be zero, but are set " "to: 0x%2x %2x %2x.", madt_sub_names[hdr->type], lsapic->reserved[0], lsapic->reserved[1], lsapic->reserved[2]); else fwts_passed(fw, "MADT %s reserved field, byte offsets 5..8 are " "reserved and properly set to zero.", madt_sub_names[hdr->type]); check_madt_apic_flags (fw, hdr->type, lsapic->flags); for (tmp = 0, ii = 0; ii < (int)strlen(lsapic->uid_string); ii++) if (isascii(lsapic->uid_string[ii])) tmp++; else break; if (tmp < strlen(lsapic->uid_string)) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTLSAPICUIDNonAscii", "MADT %s UID string has non-ASCII character " "in position %" PRIu8 ".", madt_sub_names[hdr->type], tmp); else fwts_passed(fw, "MADT %s UID string is an ASCII string.", madt_sub_names[hdr->type]); out: return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_platform_int_source(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 8: Platform Interrupt Sources */ fwts_acpi_madt_platform_int_source *src = (fwts_acpi_madt_platform_int_source *)data; if (src->flags & 0xfffffff0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTPlatIRQSrcFlags", "MADT %s flags, bits 4..31 are reserved and " "should be zero, but are set as: %" PRIx32 ".", madt_sub_names[hdr->type], src->flags); else fwts_passed(fw, "MADT %s flags, bits 4..31 are reserved and " "set to zero.", madt_sub_names[hdr->type]); if (src->type < 1 || src->type > 3) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTPlatIRQType", "MADT %s type field is %" PRIu8 ", must be 1..3.", madt_sub_names[hdr->type], src->type); else fwts_passed(fw, "MADT %s type field is %" PRIu8 "and in 1..3.", madt_sub_names[hdr->type], src->type); /* TODO: verify Processor ID actually exists. */ /* TODO: verify Processor EID actually exists. */ if (src->io_sapic_vector == 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTPlatIRQIOSAPICVector", "MADT %s IO SAPIC Vector is " "zero, appears not to be defined.", madt_sub_names[hdr->type]); else fwts_passed(fw, "MADT %s IO SAPIC Vector is non-zero.", madt_sub_names[hdr->type]); /* TODO: verify the GSI is properly set? */ if (src->pis_flags & 0xfffffffe) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTPlatIRQSrcFlagsNonZero", "MADT %s, Platform Interrupt Source flag " "bits 1..31 are reserved and should be zero, " "but are set as: %" PRIx32 ".", madt_sub_names[hdr->type], src->pis_flags); else fwts_passed(fw, "MADT %s, Platform Interrupt Source flag " "bits 1..31 are reserved and set to zero.", madt_sub_names[hdr->type]); return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_local_x2apic(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 9: Processor Local x2APIC */ fwts_acpi_madt_local_x2apic *lx2apic = (fwts_acpi_madt_local_x2apic *)data; /* only test table if enabled */ if (!(lx2apic->flags & 0x1)) { fwts_skipped(fw, "MADT %s is disabled. Skipping test.", madt_sub_names[hdr->type]); goto out; } if (lx2apic->reserved) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTLX2APICReservedNonZero", "MADT %s reserved field, byte offsets 2..3 are " "reserved and should be zero, but are set " "to: 0x%8x.", madt_sub_names[hdr->type], lx2apic->reserved); else fwts_passed(fw, "MADT %s reserved field, byte offsets 2..3 are " "reserved and properly set to zero.", madt_sub_names[hdr->type]); check_madt_apic_flags (fw, hdr->type, lx2apic->flags); madt_find_processor_uid(fw, lx2apic->processor_uid, "X2APIC"); out: return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_local_x2apic_nmi(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 0xa: Local x2APIC NMI */ fwts_acpi_madt_local_x2apic_nmi *nmi = (fwts_acpi_madt_local_x2apic_nmi *)data; if (nmi->flags & 0xfffffff0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTLAPICX2APICNMIFlags", "MADT %s, flags, bits 4..31 are reserved and " "should be zero, but are set as: %" PRIx32 ".", madt_sub_names[hdr->type], nmi->flags); else fwts_passed(fw, "MADT %s flags field, bits 4..31 are " "reserved and properly set to zero.", madt_sub_names[hdr->type]); return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_gicc(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 0xb: GICC */ fwts_acpi_madt_gic *gic = (fwts_acpi_madt_gic *)data; uint32_t mask; int start; if (gic->reserved) fwts_failed(fw, LOG_LEVEL_LOW, "MADTGICCReservedNonZero", "MADT %s reserved field should be zero, but is " "instead 0x%" PRIx32 ".", madt_sub_names[hdr->type], gic->reserved); else fwts_passed(fw, "MADT %s reserved field properly set to zero.", madt_sub_names[hdr->type]); madt_find_processor_uid(fw, gic->processor_uid, "GICC"); mask = 0xfffffffc; start = 2; if (hdr->length == 80) { /* ACPI 6.0 */ mask = 0xfffffff8; start = 3; } if (hdr->length == 82) { /* ACPI 6.5 */ mask = 0xfffffff0; start = 4; } if (gic->flags & mask) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTGICFLags", "MADT %s, flags, bits %d..31 are reserved " "and should be zero, but are set as: %" PRIx32 ".", madt_sub_names[hdr->type], start, gic->flags); else fwts_passed(fw, "MADT %s, flags, bits %d..31 are reserved and " "properly set to zero.", madt_sub_names[hdr->type], start); if (hdr->length == 82) { /* ACPI 6.5 */ /* If the Enabled bit is set, Online Capable bit is reserved and must be zero. */ if ((gic->flags & 1) && (gic->flags & (1 << 3))) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTGICBadFLag", "MADT %s, flags, if Enable bit is set, the Online Capable bit " "is reserved and must be zero.",madt_sub_names[hdr->type]); } if (gic->parking_protocol_version != 0 && gic->parking_protocol_version != 1) fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTGICCParkingVersion", "MADT %s, protocol versions defined are 0..1 but " "%" PRIu32 " is being used.", madt_sub_names[hdr->type], gic->parking_protocol_version); else fwts_passed(fw, "MADT %s, is using a defined parking protocol " "version.", madt_sub_names[hdr->type]); /* * TODO: is it even possible to verify the MPIDR is valid? Or, * is there sufficient variation that it is not predictable? */ if (hdr->length == 80) { /* added in ACPI 6.0 */ uint8_t tmp; if (fwts_get_acpi_version(fw) >= FWTS_ACPI_VERSION_63) tmp = gic->reserved2[0]; else tmp = gic->reserved2[0] | gic->reserved2[1] | gic->reserved2[2]; if (tmp) fwts_failed(fw, LOG_LEVEL_LOW, "MADTGICCReserved2NonZero", "MADT %s second reserved field must " "be zero.", madt_sub_names[hdr->type]); else fwts_passed(fw, "MADT %s second reserved field properly " "set to zero.", madt_sub_names[hdr->type]); } /* * TODO: the local GICC corresponding to the boot processor must * be the the first entry in the interrupt controller structure * list. */ return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_gicd(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 0xc: GIC Distributor */ fwts_acpi_madt_gicd *gicd = (fwts_acpi_madt_gicd *)data; uint32_t gicd_reserve2 = gicd->reserved2[0] + (gicd->reserved2[1] << 4) + (gicd->reserved2[2] << 8); if (gicd->reserved) fwts_failed(fw, LOG_LEVEL_LOW, "MADTGICDReservedNonZero", "MADT %s reserved field should be zero, " "instead got 0x%" PRIx32 ".", madt_sub_names[hdr->type], gicd->reserved); else fwts_passed(fw, "MADT %s reserved field properly set to zero.", madt_sub_names[hdr->type]); /* TODO: is the physical base address required to be non-zero? */ if (gicd->system_vector_base) fwts_failed(fw, LOG_LEVEL_LOW, "MADTGICDSystemVectorBaseNonZero", "MADT %s system vector base field should be zero, " "instead got 0x%" PRIx32 ".", madt_sub_names[hdr->type], gicd->system_vector_base); else fwts_passed(fw, "MADT %s system vector base field is properly set " "to zero.", madt_sub_names[hdr->type]); if (gicd->gic_version != 0 && gicd->gic_version > 4) fwts_failed(fw, LOG_LEVEL_LOW, "SPECMADTGICDVersion", "MADT %s GIC version field should be in 0..4, " "but instead have 0x%" PRIx32 ".", madt_sub_names[hdr->type], gicd->gic_version); else fwts_passed(fw, "MADT %s GIC version field is in 0..4.", madt_sub_names[hdr->type]); if (gicd_reserve2) fwts_failed(fw, LOG_LEVEL_LOW, "MADTGICDReserved2NonZero", "MADT %s second reserved field should be zero, " "instead got 0x%" PRIx32 ".", madt_sub_names[hdr->type], gicd_reserve2); else fwts_passed(fw, "MADT %s second reserved field is properly set " "to zero.", madt_sub_names[hdr->type]); return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_gic_msi_frame(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 0xd: GIC MSI Frame */ fwts_acpi_madt_gic_msi *gic_msi = (fwts_acpi_madt_gic_msi *)data; fwts_list_link *item; bool found; /* * TODO: is there some way to test that the entries found are * for only non-secure MSI frames? */ if (gic_msi->reserved) fwts_failed(fw, LOG_LEVEL_LOW, "MADTGICMSIReservedNonZero", "MADT %s reserved field should be zero, " "instead got 0x%" PRIx32 ".", madt_sub_names[hdr->type], gic_msi->reserved); else fwts_passed(fw, "MADT %s reserved field properly set to zero.", madt_sub_names[hdr->type]); /* * Check MSI Frame ID against previously found IDs to see if it * is unique. According to the spec, they must be. */ found = false; fwts_list_foreach(item, &msi_frame_ids) { uint32_t *frame_id = fwts_list_data(uint32_t *, item); if (*frame_id == gic_msi->frame_id) found = true; } if (found) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTGICMSINonUniqueFrameId", "MADT %s Frame ID 0x%" PRIx32 " is not unique " "and has already be defined in a previous %s.", madt_sub_names[hdr->type], gic_msi->frame_id, madt_sub_names[hdr->type]); } else { fwts_list_append(&msi_frame_ids, &(gic_msi->frame_id)); fwts_passed(fw, "MADT %s Frame ID 0x%" PRIx32 " is unique " "as is required.", madt_sub_names[hdr->type], gic_msi->frame_id); } /* * TODO: can the physical base address be tested, or is zero * allowed? */ if (gic_msi->flags & 0xfffffffe) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTGICMSIFLags", "MADT %s, flags, bits 1..31 are reserved " "and should be zero, but are set as: %" PRIx32 ".", madt_sub_names[hdr->type], gic_msi->flags); else fwts_passed(fw, "MADT %s, flags, bits 1..31 are reserved " "and properly set to zero.", madt_sub_names[hdr->type]); /* * TODO: can we check the SPI Count and SPI Base against the MSI_TYPER * register in the frame at this point? Or is this something that * can only been done when running on the arch we're testing for? */ return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_gicr(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 0xe: GICR */ fwts_acpi_madt_gicr *gicr = (fwts_acpi_madt_gicr *)data; /* * TODO: GICR structures should only be used when GICs implement * version 3 or higher. */ if (gicr->reserved) fwts_failed(fw, LOG_LEVEL_LOW, "MADTGICRReservedNonZero", "MADT %s reserved field should be zero, " "instead got 0x%" PRIx32 ".", madt_sub_names[hdr->type], gicr->reserved); else fwts_passed(fw, "MADT %s reserved field properly set to zero.", madt_sub_names[hdr->type]); /* * TODO: can Discovery Range Base Address ever be zero? * Or, can we assume it must be non-zero? */ if (gicr->discovery_range_length == 0) fwts_failed(fw, LOG_LEVEL_LOW, "SPECMADTGICRZeroLength", "MADT %s discovery range length should be > 0.", madt_sub_names[hdr->type]); else fwts_passed(fw, "MADT %s discovery range length of %" PRIu32 " > 0.", madt_sub_names[hdr->type], gicr->discovery_range_length); return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_gic_its(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 0xf: GIC ITS */ fwts_acpi_madt_gic_its *gic_its = (fwts_acpi_madt_gic_its *)data; fwts_list_link *item; bool found; if (gic_its->reserved) fwts_failed(fw, LOG_LEVEL_LOW, "SPECMADTGICITSReservedNonZero", "MADT %s first reserved field should be zero, " "instead got 0x%" PRIx32 ".", madt_sub_names[hdr->type], gic_its->reserved); else fwts_passed(fw, "MADT %s first reserved field is properly set " "to zero.", madt_sub_names[hdr->type]); /* * Check ITS ID against previously found IDs to see if it * is unique. According to the spec, they must be. */ found = false; fwts_list_foreach(item, &its_ids) { uint32_t *its_id = fwts_list_data(uint32_t *, item); if (*its_id == gic_its->its_id) found = true; } if (found) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTGICITSNonUniqueId", "MADT %s ITS ID 0x%" PRIx32 " is not unique " "and has already be defined in a previous %s.", madt_sub_names[hdr->type], gic_its->its_id, madt_sub_names[hdr->type]); } else { fwts_list_append(&its_ids, &(gic_its->its_id)); fwts_passed(fw, "MADT %s ITS ID 0x%" PRIx32 " is unique " "as is required.", madt_sub_names[hdr->type], gic_its->its_id); } /* * TODO: can the physical base address be tested, or is zero * allowed? */ if (gic_its->reserved2) fwts_failed(fw, LOG_LEVEL_LOW, "SPECMADTGICITSReserved2NonZero", "MADT %s second reserved field should be zero, " "instead got 0x%" PRIx32 ".", madt_sub_names[hdr->type], gic_its->reserved2); else fwts_passed(fw, "MADT %s second reserved field is properly set " "to zero.", madt_sub_names[hdr->type]); return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_mp_wakup(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { /* specific checks for subtable type 0x10: Multiprocessor Wakeup */ fwts_acpi_madt_mp_wakeup *mp_wakeup = (fwts_acpi_madt_mp_wakeup *) data; if (mp_wakeup->mail_box_version != 0) fwts_failed(fw, LOG_LEVEL_LOW, "SPECMADTMPWAKEUPVersion", "MADT %s mailbox version should be in 0, " "but instead have 0x%" PRIx32 ".", madt_sub_names[hdr->type], mp_wakeup->mail_box_version); else fwts_passed(fw, "MADT %s mailbox version is in 0.", madt_sub_names[hdr->type]); if (mp_wakeup->reserved) fwts_failed(fw, LOG_LEVEL_LOW, "SPECMADTMPWAKEUPReservedNonZero", "MADT %s reserved field should be zero, " "instead got 0x%" PRIx32 ".", madt_sub_names[hdr->type], mp_wakeup->reserved); else fwts_passed(fw, "MADT %s reserved field is properly set " "to zero.", madt_sub_names[hdr->type]); if (mp_wakeup->mail_box_address % 0x1000) fwts_failed(fw, LOG_LEVEL_HIGH, "SPECMADTMPWAKEUPAddress", "MADT %s mailbox address should be 4K bytes aligned, " "but instead have 0x%" PRIx64 ".", madt_sub_names[hdr->type], mp_wakeup->mail_box_address); else fwts_passed(fw, "MADT %s mailbox version is in 0.", madt_sub_names[hdr->type]); return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_core_pic(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { fwts_acpi_madt_core_pic *core_pic = (fwts_acpi_madt_core_pic *)data; if (core_pic->version > 1) fwts_failed(fw, LOG_LEVEL_LOW, "SPECMADTPicVersion", "MADT %s version should not over 1, " "but instead have 0x%" PRIx32 ".", madt_sub_names[hdr->type], core_pic->version); else fwts_passed(fw, "MADT %s version is properly set.", madt_sub_names[hdr->type]); if (core_pic->flag & 0xfffffffe) fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTPicFlag", "MADT %s flags, bits 1..31 are reserved " "and should be zero, but are set as: %" PRIx32 ".", madt_sub_names[hdr->type], core_pic->flag); else fwts_passed(fw, "MADT %s flags, bits 1..31 are reserved " "and set to zero.", madt_sub_names[hdr->type]); return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static int madt_general_pic(fwts_framework *fw, fwts_acpi_madt_sub_table_header *hdr, uint8_t *data) { uint8_t *version = (uint8_t *)data; if (*version > 1) fwts_failed(fw, LOG_LEVEL_LOW, "SPECMADTPicVersion", "MADT %s version should not over 1, " "but instead have 0x%" PRIx32 ".", madt_sub_names[hdr->type], *version); else fwts_passed(fw, "MADT %s version is properly set.", madt_sub_names[hdr->type]); return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); } static void madt_ioapic_sapic_compare(fwts_framework *fw, int num_ioapics, int num_iosapics) { bool failed; int ioapic; if (!num_iosapics) return; /* Nothing to do */ /* * If both I/O APIC and I/O SAPIC subtables exist, there must be at * least as many I/O SAPIC subtables as I/O APIC subtables. */ if (num_iosapics < num_ioapics) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTIOAPICSAPICCOMPARELessThan ", "The number of IO SAPICS (%d) is less than " "the number of IO APICS (%d).", num_iosapics, num_ioapics); else fwts_passed(fw, "The number of IO SAPICS (%d) is at least" "equal to the number of IO APICS (%d)", num_iosapics, num_ioapics); /* Every I/O APIC must have a corresponding I/O SAPIC. */ failed = false; for (ioapic = 0; ioapic < MAX_IO_APIC_ID; ioapic++) if (madt_io_apics[ioapic] && (madt_io_apics[ioapic] != madt_io_sapics[ioapic])) { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MADTIOAPICSAPICCOMPARENoSAPIC ", "IO APIC %d does not have a IO " "SAPIC entry", ioapic); } if (!failed) fwts_passed(fw, "Each IO APIC entry has a corresponding" "SAPIC entry."); } static int madt_subtables(fwts_framework *fw) { fwts_acpi_table_madt *madt = (fwts_acpi_table_madt *)mtable->data; fwts_acpi_madt_sub_table_header *hdr; fwts_acpi_madt_local_sapic *lsapic; struct acpi_madt_subtable_lengths *ms = spec_data; uint8_t *data = mtable->data; ssize_t length = mtable->length; int ii = 0; int proper_len; int num_ioapics = 0; int num_iosapics = 0; /* * check the correctness of each subtable type, and whether or * not the subtable is allowed for this revision of the MADT */ data += sizeof(fwts_acpi_table_madt); length -= sizeof(fwts_acpi_table_madt); if (!ms->num_types) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTRevision", "Undefined MADT revision being used: %" PRIu8, madt->header.revision); } else { fwts_passed(fw, "MADT revision %" PRIu8 " is defined.", madt->header.revision); } while (length > (ssize_t)sizeof(fwts_acpi_madt_sub_table_header)) { ssize_t skip = 0; int len = 0; int type; int offset = 0; hdr = (fwts_acpi_madt_sub_table_header *)data; ii++; data += sizeof(fwts_acpi_madt_sub_table_header); offset = (int)(mtable->length - length); length -= sizeof(fwts_acpi_madt_sub_table_header); /* * set initial type value, will be overridden for OEM and * reserved entries */ type = hdr->type; /* check for OEM and reserved entries */ if (hdr->type >= NUM_SUBTABLE_TYPES) { if (hdr->type < 0x80) type = FWTS_MADT_RESERVED; else type = FWTS_MADT_OEM; len = hdr->length; } else { /* this subtable is defined */ len = ms->lengths[hdr->type]; } if (!len) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTSubType", "Undefined MADT subtable type for this " "version of the MADT: %" PRIu8 " (%s)", hdr->type, madt_sub_names[type]); } else { fwts_passed(fw, "MADT subtable type %" PRIu8 " (%s) is defined.", hdr->type, madt_sub_names[type]); } if (!(fw->flags & FWTS_FLAG_SBBR)) { bool passed = true; /* verify that the length is what we expect */ if (len == SUBTABLE_VARIABLE) { if (hdr->type == FWTS_MADT_LOCAL_SAPIC) { lsapic = (fwts_acpi_madt_local_sapic *)hdr; proper_len = sizeof(fwts_acpi_madt_local_sapic) + strlen(lsapic->uid_string) + 1; if (proper_len != hdr->length) passed = false; } } else { if (hdr->length != len) passed = false; } if (passed) { fwts_passed(fw, "Subtable %d (offset 0x%x) of " "type %" PRIu8 " (%s) is the correct length: %" PRIu8, ii, offset, hdr->type, madt_sub_names[type], hdr->length); } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTSubLen", "Subtable %d (offset 0x%x) of " "type %" PRIu8 " (%s) is %d bytes " "long but should be %d bytes", ii, offset, hdr->type, madt_sub_names[type], hdr->length, len); } } /* perform checks specific to subtable types */ switch (type) { case FWTS_MADT_LOCAL_APIC: skip = madt_local_apic(fw, hdr, data); break; case FWTS_MADT_IO_APIC: skip = madt_io_apic(fw, hdr, data); num_ioapics++; break; case FWTS_MADT_INTERRUPT_OVERRIDE: skip = madt_interrupt_override(fw, hdr, data); break; case FWTS_MADT_NMI_SOURCE: skip = madt_nmi_source(fw, hdr, data); break; case FWTS_MADT_LOCAL_APIC_NMI: skip = madt_local_apic_nmi(fw, hdr, data); break; case FWTS_MADT_LOCAL_APIC_OVERRIDE: skip = madt_lapic_addr_override(fw, hdr, data); break; case FWTS_MADT_IO_SAPIC: skip = madt_io_sapic(fw, hdr, data); num_iosapics++; break; case FWTS_MADT_LOCAL_SAPIC: skip = madt_local_sapic(fw, hdr, data); break; case FWTS_MADT_INTERRUPT_SOURCE: skip = madt_platform_int_source(fw, hdr, data); break; case FWTS_MADT_LOCAL_X2APIC: skip = madt_local_x2apic(fw, hdr, data); break; case FWTS_MADT_LOCAL_X2APIC_NMI: skip = madt_local_x2apic_nmi(fw, hdr, data); break; case FWTS_MADT_GIC_C_CPU_INTERFACE: skip = madt_gicc(fw, hdr, data); break; case FWTS_MADT_GIC_D_GOC_DISTRIBUTOR: skip = madt_gicd(fw, hdr, data); break; case FWTS_MADT_GIC_V2M_MSI_FRAME: skip = madt_gic_msi_frame(fw, hdr, data); break; case FWTS_MADT_GIC_R_REDISTRIBUTOR: skip = madt_gicr(fw, hdr, data); break; case FWTS_MADT_GIC_ITS: skip = madt_gic_its(fw, hdr, data); break; case FWTS_MADT_MP_WAKEUP: skip = madt_mp_wakup(fw, hdr, data); break; case FWTS_MADT_CORE_PIC: skip = madt_core_pic(fw, hdr, data); break; case FWTS_MADT_LIO_PIC: case FWTS_MADT_HT_PIC: case FWTS_MADT_EIO_PIC: case FWTS_MADT_MSI_PIC: case FWTS_MADT_BIO_PIC: case FWTS_MADT_LPC_PIC: skip = madt_general_pic(fw, hdr, data); break; case FWTS_MADT_RESERVED: fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTSubReservedID", "MADT subtable %d (offset 0x%x) is " "using the reserved value 0x%" PRIx8 " for a " "type. Subtable type values 0x%" PRIx8 "..0x7f " "are reserved; 0x80..0xff can be " "used by OEMs.", ii, offset, hdr->type, FWTS_MADT_RESERVED); skip = (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); break; case FWTS_MADT_OEM: /* OEM entries must be assumed to be valid */ skip = (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); break; default: fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPECMADTSubReservedID", "MADT subtable %d (offset 0x%x) is " "using value 0x%" PRIx8 " for a type. This " "value is out of the expected range " "of 0x00 .. 0xff.", ii, offset, hdr->type); skip = (hdr->length - sizeof(fwts_acpi_madt_sub_table_header)); break; } if (hdr->length == 0) { fwts_log_error(fw, "INTERNAL ERROR: " "zero length subtable means something " "is seriously broken. Subtable %d " "(offset 0x%0x) has the problem.", ii, offset); break; } data += skip; length -= skip; } if (!(fw->flags & FWTS_FLAG_SBBR)) { /* run comparison tests */ madt_ioapic_sapic_compare(fw, num_ioapics, num_iosapics); } return FWTS_OK; } static int madt_deinit(fwts_framework *fw) { fwts_acpica_deinit(); /* only minor clean up needed */ fwts_list_free_items(&msi_frame_ids, NULL); fwts_list_free_items(&its_ids, NULL); fwts_list_free_items(&processor_uids, NULL); return (fw) ? FWTS_ERROR : FWTS_OK; } static fwts_framework_minor_test madt_tests[] = { { madt_checksum, "MADT checksum test." }, { madt_revision, "MADT revision test." }, { madt_arch_revision, "MADT architecture minimum revision test." }, { madt_flags, "MADT flags field reserved bits test." }, { madt_subtables, "MADT subtable tests." }, { NULL, NULL } }; static fwts_framework_ops madt_ops = { .description = "MADT Multiple APIC Description Table (spec compliant).", .init = madt_init, .deinit = madt_deinit, .minor_tests = madt_tests }; FWTS_REGISTER("madt", &madt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI | FWTS_FLAG_COMPLIANCE_ACPI | FWTS_FLAG_SBBR) #endif src/acpi/mcfg/000077500000000000000000000000001465205512700135045ustar00rootroot00000000000000src/acpi/mcfg/mcfg.c000066400000000000000000000203651465205512700145720ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_list *memory_map_list; static fwts_acpi_table_info *mcfg_table; acpi_table_init(MCFG, &mcfg_table) static int compare_config_space( fwts_framework *fw, const fwts_acpi_mcfg_configuration *config) { uint8_t *mapped_config_space; uint8_t config_space[16]; size_t page_size, n; bool match; char path[PATH_MAX]; FILE *fp; int i; page_size = fwts_page_size(); /* * Sanity check on first config, this is enough to * see if MMIO base is OK or not */ snprintf(path, sizeof(path), "/sys/bus/pci/devices/%4.4" PRIx16 ":00:00.0/config", config->pci_segment_group_number); if ((fp = fopen(path, "r")) == NULL) { fwts_warning(fw, "Could not open %s.", path); return FWTS_ERROR; } n = fread(config_space, 1, sizeof(config_space), fp); (void)fclose(fp); if (n != sizeof(config_space)) { fwts_warning(fw, "Could only read %zd bytes from %s, expecting %zd.", n, path, sizeof(config_space)); return FWTS_ERROR; } if ((mapped_config_space = fwts_mmap(config->base_address, page_size)) == FWTS_MAP_FAILED) { char *data; if ((data = fwts_get("/sys/kernel/security/lockdown")) != NULL) { if (strstr(data, "[none]") == NULL) { free(data); fwts_log_info(fw, "Kernel is in lockdown mode. Aborted."); fwts_log_info(fw, "Please unlock the kernel before testing."); fwts_log_info(fw, "Make sure you disable secureboot and disable " "the kernel lockdown, (by kernel parameter lockdown=None)."); return FWTS_ABORTED; } } free(data); fwts_failed(fw, LOG_LEVEL_MEDIUM, "MMapUnmappable", "Cannot mmap PCI config space at 0x%" PRIx64 ".", config->base_address); return FWTS_ERROR; } /* We only need to check if just the config space is readable */ if (fwts_safe_memread(mapped_config_space, sizeof(config_space)) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "PCIUnreadable", "Cannot read PCI config space at 0x%" PRIx64 ".", config->base_address); (void)fwts_munmap(mapped_config_space, page_size); return FWTS_ERROR; } /* * Need to explicitly do byte comparisons on region * memcmp() fails as this can do 64 bit reads */ for (match = true, i = 0; i < 16; i++) { if (config_space[i] != mapped_config_space[i]) { match = false; break; } } (void)fwts_munmap(mapped_config_space, page_size); if (match) fwts_passed(fw, "PCI config space verified."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "PCIConfigSpaceBad", "PCI config space appears to not work."); return FWTS_OK; } static int mcfg_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); if (memory_map_list) fwts_memory_map_table_free(memory_map_list); return FWTS_OK; } static int mcfg_test1(fwts_framework *fw) { int nr, i; fwts_acpi_table_mcfg *mcfg = (fwts_acpi_table_mcfg*)mcfg_table->data; fwts_acpi_mcfg_configuration *config; bool failed = false; ssize_t mcfg_size; const char *memory_map_name; memory_map_name = fwts_memory_map_name(fw->firmware_type); fwts_log_info(fw, "This test tries to validate the MCFG table by comparing the first " "16 bytes in the MMIO mapped config space with the 'traditional' config " "space of the first PCI device (root bridge). The MCFG data is only " "trusted if it is marked reserved in the %s", memory_map_name); fwts_log_nl(fw); if ((memory_map_list = fwts_memory_map_table_load(fw)) == NULL) { /* Not fatal, just means test will be less comprehensive */ fwts_log_warning(fw, "No memory map table found"); } else { fwts_memory_map_table_dump(fw, memory_map_list); fwts_log_nl(fw); } mcfg_size = mcfg_table->length; mcfg_size -= sizeof(fwts_acpi_table_mcfg); if (mcfg_size < 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidSize", "Invalid MCFG ACPI table size: got %zd bytes expecting more", mcfg_size + sizeof(fwts_acpi_table_mcfg)); fwts_advice(fw, "MCFG table must be least %zd bytes (header size) with " "multiples of %zd bytes for each MCFG entry.", sizeof(fwts_acpi_table_mcfg), sizeof(fwts_acpi_mcfg_configuration)); return FWTS_ERROR; } nr = mcfg_size / sizeof(fwts_acpi_mcfg_configuration); if (!nr) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "MCFGNoEntries", "No MCFG ACPI table entries"); return FWTS_ERROR; } if (mcfg_size != (ssize_t)(nr * sizeof(fwts_acpi_mcfg_configuration))) { fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidSize2", "MCFG table is not a multiple of record size"); return FWTS_ERROR; } fwts_log_info(fw, "MCFG table found, size is %zd bytes (excluding header) (%i entries).", mcfg_size, nr); if (mcfg == NULL) { fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidTable", "Invalid MCFG ACPI table"); return FWTS_ERROR; } if (memory_map_list == NULL) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MMapUnreadable", "Cannot check MCFG MMIO space against memory map table: could not read memory map table."); config = &mcfg->configuration[0]; for (i = 0; i < nr; i++, config++) { fwts_log_info_verbatim(fw, "Configuration Entry #%d:", i); fwts_log_info_verbatim(fw, " Base Address : 0x%" PRIx64, config->base_address); fwts_log_info_verbatim(fw, " Segment : %" PRIu8, config->pci_segment_group_number); fwts_log_info_verbatim(fw, " Start bus : %" PRIu8, config->start_bus_number); fwts_log_info_verbatim(fw, " End bus : %" PRIu8, config->end_bus_number); if ((memory_map_list != NULL) && (!fwts_memory_map_is_reserved(memory_map_list, config->base_address))) { fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGMMIONotReserved", "MCFG MMIO config space at 0x%" PRIx64 " is not reserved in the memory map table", config->base_address); fwts_advice(fw, "The PCI Express specification states that the " "PCI Express configuration space should " "be defined in the MCFG table and *maybe* " "optionally defined in the %s if ACPI MCFG is " "present. Linux checks if the region is reserved " "in the memory map table and will reject the " "MMCONFIG if there is a discrepancy between MCFG " "and the memory map table for the PCI Express region. " "[See arch/x86/pci/mmconfig-shared.c pci_mmcfg_reject_broken()]. " "It is recommended that this is defined in the " "%s table for Linux.", memory_map_name, memory_map_name); failed = true; } } if (!failed) fwts_passed(fw, "MCFG MMIO config space is reserved in memory map table."); return FWTS_OK; } #define SINGLE_CONFIG_TABLE_SIZE \ (sizeof(fwts_acpi_table_mcfg) + sizeof(fwts_acpi_mcfg_configuration)) static int mcfg_test2(fwts_framework *fw) { fwts_acpi_table_mcfg *mcfg = (fwts_acpi_table_mcfg *)mcfg_table->data; if (mcfg == NULL) { fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidTable", "Invalid MCFG ACPI table"); return FWTS_ERROR; } /* Need at least one config entry */ if (mcfg_table->length < SINGLE_CONFIG_TABLE_SIZE) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "MCFGNoEntries", "No MCFG ACPI table entries"); return FWTS_ERROR; } return compare_config_space(fw, &mcfg->configuration[0]); } static fwts_framework_minor_test mcfg_tests[] = { { mcfg_test1, "Validate MCFG table." }, { mcfg_test2, "Validate MCFG PCI config space." }, { NULL, NULL } }; static fwts_framework_ops mcfg_ops = { .description = "MCFG PCI Express* memory mapped config space test.", .init = MCFG_init, .deinit = mcfg_deinit, .minor_tests = mcfg_tests }; FWTS_REGISTER("mcfg", &mcfg_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV | FWTS_FLAG_ACPI | FWTS_FLAG_SBBR) #endif src/acpi/mchi/000077500000000000000000000000001465205512700135105ustar00rootroot00000000000000src/acpi/mchi/mchi.c000066400000000000000000000174171465205512700146060ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #define DUMP_MCHI_TABLE (1) /* table is small and not used much, so dump it */ static fwts_acpi_table_info *table; acpi_table_init(MCHI, &table) /* * MCHI Management Controller Host Interface Table * http://www.dmtf.org/sites/default/files/standards/documents/DSP0256_1.0.0.pdf */ static int mchi_test1(fwts_framework *fw) { bool passed = true; fwts_acpi_table_mchi *mchi = (fwts_acpi_table_mchi *)table->data; if (!fwts_acpi_table_length(fw, "MCHI", table->length, sizeof(fwts_acpi_table_mchi))) { passed = false; goto done; } #if DUMP_MCHI_TABLE fwts_log_info_verbatim(fw, "MCHI Table:"); fwts_log_info_simp_int(fw, " Interface Type: ", mchi->interface_type); fwts_log_info_simp_int(fw, " Protocol Identifier ", mchi->protocol_identifier); fwts_log_info_verbatim(fw, " Protocol Data: " "0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8, mchi->protocol_data[0], mchi->protocol_data[1], mchi->protocol_data[2], mchi->protocol_data[3]); fwts_log_info_verbatim(fw, " " "0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8, mchi->protocol_data[4], mchi->protocol_data[5], mchi->protocol_data[6], mchi->protocol_data[7]); fwts_log_info_simp_int(fw, " Interrupt Type: ", mchi->interrupt_type); fwts_log_info_simp_int(fw, " GPE: ", mchi->gpe); fwts_log_info_simp_int(fw, " PCI Device Flag: ", mchi->pci_device_flag); fwts_log_info_simp_int(fw, " Global System Interrupt: ", mchi->global_system_interrupt); fwts_log_info_verbatim(fw, " Base Address:"); fwts_log_info_simp_int(fw, " Address Space ID: ", mchi->base_address.address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", mchi->base_address.register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", mchi->base_address.register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", mchi->base_address.access_width); fwts_log_info_simp_int(fw, " Address ", mchi->base_address.address); if ((mchi->pci_device_flag & 1) == 1) { fwts_log_info_simp_int(fw, " PCI Segment Group: ", mchi->bytes[0]); fwts_log_info_simp_int(fw, " PCI Bus Number: ", mchi->bytes[1]); fwts_log_info_simp_int(fw, " PCI Device Number: ", mchi->bytes[2]); fwts_log_info_simp_int(fw, " PCI Function Number: ", mchi->bytes[3]); } else { /* Zero -> UIDS */ fwts_log_info_verbatim(fw, " UID Bytes 1-4: " "0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8, mchi->bytes[0], mchi->bytes[1], mchi->bytes[2], mchi->bytes[3]); } fwts_log_nl(fw); #endif if ((mchi->interface_type < 2) || (mchi->interface_type > 8)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "MCHIInvalidInterfaceType", "MCHI Interface Type is 0x%2.2" PRIx8 " which is reserved, " "allowed values are 0x02..0x08", mchi->interface_type); } if ((mchi->protocol_identifier > 2) && (mchi->protocol_identifier < 255)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "MCHIInvalidProtocolIdentifier", "MCHI Protocol Identifier 0x%2.2" PRIx8 " which is reserved, " "allowed values are 0x00 (Unspecifier), 0x01 (MCTP), 0x02 (IPMI) or " "255 (OEM defined)", mchi->protocol_identifier); } fwts_acpi_reserved_bits("MCHI", "Interrupt Type", mchi->interrupt_type, 2, 7, &passed); if (((mchi->interrupt_type & 0x01) == 0) && (mchi->gpe != 0)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "MCHIGpeNonZero", "MCHI GPE is 0x%2.2" PRIx8 " and should be zero " "when bit 0 of the Interrupt Type field is 0 " "(SCI triggered through GPE non-supported)", mchi->gpe); } fwts_acpi_reserved_bits("MCHI", "PCI Device Flag", mchi->pci_device_flag, 1, 7, &passed); if (((mchi->interrupt_type & 0x02) == 0) && (mchi->global_system_interrupt != 0)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "MCHIGsiNonZero", "MCHI Global System Interrupt is 0x%2.2" PRIx8 " and should be zero " "when bit 1 of the Interrupt Type field is 0", mchi->global_system_interrupt); } fwts_acpi_space_id(fw, "MCHI", "Base Address", &passed, mchi->base_address.address_space_id, 3, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_MEMORY, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_IO, FWTS_GAS_ADDR_SPACE_ID_SMBUS); /* SMBus specific checks */ if (mchi->base_address.address_space_id == FWTS_GAS_ADDR_SPACE_ID_SMBUS) { if ((mchi->pci_device_flag & 0x01) == 1) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "MCHIPciDeviceFlagInvalid", "MCHI PCI Device Flag is 0x%2.2" PRIx8 " and bit [0] should be 0 for a SMBus Address Space ID", mchi->pci_device_flag); } if (mchi->base_address.register_bit_width != 0) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MCHISmbusRegBitWidthNonZero", "MCHI Base Address Register Bit Width is 0x%2.2" PRIx8 " and should be zero for a SMBus Address Space ID", mchi->base_address.register_bit_width); } if (mchi->base_address.register_bit_offset != 0) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MCHISmbusRegBitOffsetNonZero", "MCHI Base Address Register Bit Offset is 0x%2.2" PRIx8 " and should be zero for a SMBus Address Space ID", mchi->base_address.register_bit_offset); } if (mchi->base_address.access_width != 1) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MCHISmbusRegAddressSizeInvalid", "MCHI Base Address Register Address Size is 0x%2.2" PRIx8 " and should be 1 (byte access) for a SMBus Address Space ID", mchi->base_address.access_width); } if (mchi->base_address.address & ~(0x7fULL)) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MCHISmbusAddressInvalid", "MCHI Base Address is 0x%16.16" PRIx64 " and should be 0x00..0x7f a SMBus Address Space ID", mchi->base_address.address); } } /* PCI Device field specific checks */ if (mchi->pci_device_flag & 0x01) { if (mchi->bytes[2] & ~0x1f) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MCHIPciDeviceNumberInvalid", "MCHI PCI Device Number is 0x%2.2" PRIx8 " and reserved bits [7:5] should be zero", mchi->bytes[2]); } if (mchi->bytes[3] & ~0x47) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MCHIPciFunctionNumberInvalid", "MCHI PCI Function Number is 0x%2.2" PRIx8 " and reserved bits [7] and [5:3] should be zero", mchi->bytes[3]); } } done: if (passed) fwts_passed(fw, "No issues found in MCHI table."); return FWTS_OK; } static fwts_framework_minor_test mchi_tests[] = { { mchi_test1, "MCHI Management Controller Host Interface Table test." }, { NULL, NULL } }; static fwts_framework_ops mchi_ops = { .description = "MCHI Management Controller Host Interface Table test.", .init = MCHI_init, .minor_tests = mchi_tests }; FWTS_REGISTER("mchi", &mchi_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/method/000077500000000000000000000000001465205512700140505ustar00rootroot00000000000000src/acpi/method/method.c000066400000000000000000004331211465205512700155000ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include #include #include "fwts_acpi_object_eval.h" /* * ACPI methods + objects used in Linux ACPI driver: * * Name Tested * _ACx Y * _ADR Y * _AEI Y * _ALC Y * _ALI Y * _ALP Y * _ALR Y * _ALT Y * _ALx Y * _ART Y * _BBN Y * _BCL Y * _BCM Y * _BCT Y * _BDN Y * _BFS deprecated * _BIF Y * _BIX Y * _BLT N not easily tested * _BMA Y * _BMC Y * _BMD Y * _BMS Y * _BPC Y * _BPS Y * _BPT Y * _BQC Y * _BST Y * _BTH Y * _BTM Y * _BTP Y * _CBA Y * _CBR Y * _CCA Y * _CDM Y * _CID Y * _CLS Y * _CPC Y * _CR3 Y * _CRS Y * _CRT Y * _CSD Y * _CST Y * _CWS Y * _DCK Y * _DCS Y * _DDC Y * _DDN Y * _DEP Y * _DGS Y * _DIS Y * _DLM Y * _DMA Y * _DOD Y * _DOS Y * _DSC Y * _DSD Y * _DSM N * _DSS Y * _DSW Y * _DTI Y * _Exx n/a * _EC_ Y * _EDL Y * _EJD Y * _EJx Y * _EVT Y * _FDE N (floppy controller, ignore) * _FDI N (floppy controller, ignore) * _FDM N (floppy controller, ignore) * _FIF Y * _FIT Y * _FIX Y * _FPS Y * _FSL Y * _FST Y * _GAI Y * _GCP Y * _GHL Y * _GL n/a * _GLK Y * _GPD Y * _GPE Y * _GRT Y * _GSB Y * _GTF Y * _GTM Y * _GTS deprecated * _GWS Y * _HID Y * _HOT Y * _HPP Y * _HPX N * _HRV Y * _IFT Y * _INI Y * _IRC Y * _Lxx n/a * _LCK Y * _LID Y * _LPI Y * _LSI Y * _LSR N * _LSW N * _MAT Y * _MBM Y * _MLS Y * _MSG Y * _MSM N * _MTL Y * _NBS Y * _NCH Y * _NIC Y * _NIH Y * _NIG Y * _NTT Y * _OFF Y * _ON_ Y * _OSC n/a * _OST n/a * _PAI n/a * _PCL Y * _PCT Y * _PDC deprecated * _PDL Y * _PDO Y * _PIC Y * _PIF Y * _PLD Y * _PMC Y * _PMD Y * _PMM Y * _PPC Y * _PPE Y * _PR0 Y * _PR1 Y * _PR2 Y * _PR3 Y * _PRE Y * _PRL Y * _PRR Y * _PRS Y * _PRT Y * _PRW Y * _PS0 Y * _PS1 Y * _PS2 Y * _PS3 Y * _PSC Y * _PSD Y * _PSE Y * _PSL Y * _PSR Y * _PSS Y * _PSV Y * _PSW Y * _PTC Y * _PTP n/a * _PTS Y * _PUR Y * _PXM Y * _Qxx n/a * _RDI Y * _REG n/a * _RMV Y * _ROM Y * _RST Y * _RTV Y * _S0_ Y * _S1_ Y * _S2_ Y * _S3_ Y * _S4_ Y * _S5_ Y * _S1D Y * _S2D Y * _S3D Y * _S4D Y * _S0W Y * _S1W Y * _S2W Y * _S3W Y * _S4W Y * _SBS Y * _SCP Y * _SDD n/a * _SEG Y * _SHL n/a * _SLI Y * _SPD Y * _SRS n/a * _SRT Y * _SRV Y * _SST Y * _STA Y * _STM n/a * _STP Y * _STR Y * _STV Y * _SUB Y * _SUN Y * _SWS Y * _T_x n/a * _TC1 Y * _TC2 Y * _TDL Y * _TFP Y * _TIP Y * _TIV Y * _TMP Y * _TPC Y * _TPT Y * _TRT Y * _TSD Y * _TSN Y * _TSP Y * _TSS Y * _TST Y * _TTS Y * _TZD Y * _TZM Y * _TZP Y * _UID Y * _UPC Y * _UPD Y * _UPP Y * _VPO Y * _WAK Y * _WPC Y * _WPP Y * _Wxx n/a * _WDG N * _WED N */ #define DEVICE_D3HOT 3 #define DEVICE_D3COLD 4 static bool fadt_mobile_platform; /* True if a mobile platform */ static uint32_t gcp_return_value; #define method_test_integer(name, type) \ static int method_test ## name(fwts_framework *fw) \ { \ return method_evaluate_method(fw, type, # name, \ NULL, 0, fwts_method_test_integer_return, # name); \ } /* * Helper functions to facilitate the evaluations */ /****************************************************************************/ /* * method_init() * initialize ACPI */ static int method_init(fwts_framework *fw) { fwts_acpi_table_info *info; int i; bool got_fadt = false; fadt_mobile_platform = false; gcp_return_value = 0; /* Some systems have multiple FADTs, sigh */ for (i = 0; i < 256; i++) { fwts_acpi_table_fadt *fadt; int ret = fwts_acpi_find_table(fw, "FACP", i, &info); if (ret == FWTS_NULL_POINTER || info == NULL) break; fadt = (fwts_acpi_table_fadt*)info->data; got_fadt = true; if (fadt->preferred_pm_profile == 2) { fadt_mobile_platform = true; break; } } if (got_fadt && !fadt_mobile_platform) { fwts_log_info(fw, "FADT Preferred PM profile indicates this is not " "a Mobile Platform."); } if (fwts_acpi_init(fw) != FWTS_OK) { fwts_log_error(fw, "Cannot initialise ACPI."); return FWTS_ERROR; } return FWTS_OK; } /* * method_deinit * de-intialize ACPI */ static int method_deinit(fwts_framework *fw) { return fwts_acpi_deinit(fw); } /* * method_evaluate_found_method * find a given object name and evaluate it */ void method_evaluate_found_method( fwts_framework *fw, char *name, fwts_method_return check_func, void *private, ACPI_OBJECT_LIST *arg_list) { ACPI_BUFFER buf; ACPI_STATUS ret; int sem_acquired; int sem_released; fwts_acpica_sem_count_clear(); ret = fwts_acpi_object_evaluate(fw, name, arg_list, &buf); if (ACPI_FAILURE(ret) != AE_OK) { fwts_acpi_object_evaluate_report_error(fw, name, ret); } else { if (check_func != NULL) { ACPI_OBJECT *obj = buf.Pointer; check_func(fw, name, &buf, obj, private); } } free(buf.Pointer); fwts_acpica_sem_count_get(&sem_acquired, &sem_released); if (sem_acquired != sem_released) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "AMLLocksAcquired", "%s left %d locks in an acquired state.", name, sem_acquired - sem_released); fwts_advice(fw, "Locks left in an acquired state generally indicates " "that the AML code is not releasing a lock. This can " "sometimes occur when a method hits an error " "condition and exits prematurely without releasing an " "acquired lock. It may be occurring in the method " "being tested or other methods used while evaluating " "the method."); } } /* * method_evaluate_method * find all matching object names and evaluate them, * also run the callback check_func to sanity check * any returned values */ static int method_evaluate_method(fwts_framework *fw, int test_type, /* Manditory or optional */ char *name, ACPI_OBJECT *args, int num_args, fwts_method_return check_func, void *private) { fwts_list *methods; size_t name_len = strlen(name); bool found = false; if ((methods = fwts_acpi_object_get_names()) != NULL) { fwts_list_link *item; fwts_list_foreach(item, methods) { char *method_name = fwts_list_data(char*, item); ACPI_HANDLE method_handle; ACPI_OBJECT_TYPE type; ACPI_STATUS status; size_t len = strlen(method_name); if (strncmp(name, method_name + len - name_len, name_len) == 0) { ACPI_OBJECT_LIST arg_list; status = AcpiGetHandle (NULL, method_name, &method_handle); if (ACPI_FAILURE(status)) { fwts_warning(fw, "Failed to get handle for object %s.", name); continue; } status = AcpiGetType(method_handle, &type); if (ACPI_FAILURE(status)) { fwts_warning(fw, "Failed to get object type for %s.",name); continue; } if (type == ACPI_TYPE_LOCAL_SCOPE) continue; found = true; arg_list.Count = num_args; arg_list.Pointer = args; method_evaluate_found_method(fw, method_name, check_func, private, &arg_list); } } } if (found) { if ((test_type & METHOD_MOBILE) && (!fadt_mobile_platform)) { fwts_warning(fw, "The FADT indictates that this machine is not " "a mobile platform, however it has a mobile " "platform specific object %s defined. " "Either the FADT referred PM profile is " "incorrect or this machine has mobile " "platform objects defined when it should not.", name); } return FWTS_OK; } else { if (!(test_type & METHOD_SILENT)) { /* Mandatory not-found test are a failure */ if (test_type & METHOD_MANDATORY) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodNotExist", "Object %s did not exist.", name); } /* Mobile specific tests on non-mobile platform? */ if ((test_type & METHOD_MOBILE) && (!fadt_mobile_platform)) { fwts_skipped(fw, "Machine is not a mobile platform, skipping " "test for non-existent mobile platform " "related object %s.", name); } else { fwts_skipped(fw, "Skipping test for non-existent object %s.", name); } } return FWTS_NOT_EXIST; } } /* * method_name_check * sanity check object name conforms to ACPI specification */ static int method_name_check(fwts_framework *fw) { fwts_list *methods; if ((methods = fwts_acpi_object_get_names()) != NULL) { fwts_list_link *item; bool failed = false; fwts_log_info(fw, "Found %d Objects", methods->len); fwts_list_foreach(item, methods) { char *ptr; for (ptr = fwts_list_data(char *, item); *ptr; ptr++) { if (!((*ptr == '\\') || (*ptr == '.') || (*ptr == '_') || (isdigit(*ptr)) || (isupper(*ptr))) ) { fwts_failed(fw, LOG_LEVEL_HIGH, "MethodIllegalName", "Method %s contains an illegal " "character: '%c'. This should " "be corrected.", fwts_list_data(char *, item), *ptr); failed = true; break; } } } if (!failed) fwts_passed(fw, "Method names contain legal characters."); } return FWTS_OK; } /****************************************************************************/ /* * Section 5.6 ACPI Event Programming Model */ static void method_test_AEI_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { ACPI_STATUS status; ACPI_RESOURCE *resource; ACPI_RESOURCE_GPIO* gpio; bool failed = false; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_BUFFER) != FWTS_OK) return; status = AcpiBufferToResource(obj->Buffer.Pointer, obj->Buffer.Length, &resource); if (ACPI_FAILURE(status)) return; do { if (resource->Type == ACPI_RESOURCE_TYPE_GPIO) { gpio = &resource->Data.Gpio; if (gpio->ConnectionType != ACPI_RESOURCE_GPIO_TYPE_INT) { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_AEIBadGpioElement", "%s should contain only GPIO Connection Type 0, got %" PRIu32, name, gpio->ConnectionType); } } else { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_AEIBadElement", "%s should contain only Resource Type 17, got%" PRIu32, name, resource->Type); } resource = ACPI_NEXT_RESOURCE(resource); } while (resource->Type != ACPI_RESOURCE_TYPE_END_TAG); if (!failed) fwts_method_passed_sane(fw, name, "buffer"); } static int method_test_AEI(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_AEI", NULL, 0, method_test_AEI_return, NULL); } static void check_evt_event ( fwts_framework *fw, ACPI_RESOURCE_GPIO *gpio) { ACPI_OBJECT arg[1]; ACPI_HANDLE evt_handle; ACPI_STATUS status; char path[256]; uint16_t i; /* Skip the leading spaces in ResourceSource. */ for (i = 0; i < gpio->ResourceSource.StringLength; i++) { if (gpio->ResourceSource.StringPtr[i] != ' ') break; } if (i == gpio->ResourceSource.StringLength) { fwts_log_warning(fw, "Invalid ResourceSource"); return; } /* Get the handle of return;the _EVT method. */ snprintf (path, 251, "%s._EVT", &gpio->ResourceSource.StringPtr[i]); status = AcpiGetHandle (NULL, path, &evt_handle); if (ACPI_FAILURE(status)) { fwts_log_warning(fw, "Failed to find valid handle for _EVT method (0x%x), %s", status, path); return; } /* Call the _EVT method with all the pins defined for the GpioInt */ for (i = 0; i < gpio->PinTableLength; i++) { ACPI_OBJECT_LIST arg_list; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = gpio->PinTable[i]; arg_list.Count = 1; arg_list.Pointer = arg; method_evaluate_found_method(fw, path, fwts_method_test_NULL_return, NULL, &arg_list); } } static void method_test_EVT_return ( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { ACPI_RESOURCE *resource = NULL; ACPI_STATUS status; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_BUFFER) != FWTS_OK) return; status = AcpiBufferToResource(obj->Buffer.Pointer, obj->Buffer.Length, &resource); if (ACPI_FAILURE(status) || !resource) return; do { if (!resource->Length) { fwts_log_warning(fw, "Invalid zero length descriptor in resource list\n"); break; } if (resource->Type == ACPI_RESOURCE_TYPE_GPIO && resource->Data.Gpio.ConnectionType == ACPI_RESOURCE_GPIO_TYPE_INT) check_evt_event(fw, &resource->Data.Gpio); resource = ACPI_NEXT_RESOURCE(resource); } while (resource && resource->Type != ACPI_RESOURCE_TYPE_END_TAG); } static int method_test_EVT(fwts_framework *fw) { int ret; /* Only test the _EVT method with pins defined in AEI. */ if (fw->flags & FWTS_FLAG_SBBR) ret = method_evaluate_method(fw, METHOD_MANDATORY | METHOD_SILENT, "_AEI", NULL, 0, method_test_EVT_return, NULL); else ret = method_evaluate_method(fw, METHOD_OPTIONAL | METHOD_SILENT, "_AEI", NULL, 0, method_test_EVT_return, NULL); if (ret == FWTS_NOT_EXIST) fwts_skipped(fw, "Skipping test for non-existent object _EVT."); return ret; } /* * Section 5.7 Predefined Objects */ static void method_test_DLM_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_PACKAGE) != FWTS_OK) return; /* Could be one or more packages */ for (i = 0; i < obj->Package.Count; i++) { ACPI_OBJECT *pkg = &obj->Package.Elements[i]; if (fwts_method_subpackage_count_equal(fw, name, pkg, i, 2) != FWTS_OK) { failed = true; continue; } if (fwts_method_check_element_type(fw, name, pkg, i, 0, ACPI_TYPE_LOCAL_REFERENCE)) failed = true; if (pkg->Package.Elements[1].Type != ACPI_TYPE_LOCAL_REFERENCE && pkg->Package.Elements[1].Type != ACPI_TYPE_BUFFER) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_DLMBadSubPackageReturnType", "%s sub-package %" PRIu32 " element 1 is not a reference or a buffer.", name, i); failed = true; } } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_DLM(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_DLM", NULL, 0, method_test_DLM_return, NULL); } /* * Section 5.8 System Configuration Objects */ static int method_test_PIC(fwts_framework *fw) { ACPI_OBJECT arg[1]; int i, ret; arg[0].Type = ACPI_TYPE_INTEGER; for (i = 0; i < 3; i++) { arg[0].Integer.Value = i; ret = method_evaluate_method(fw, METHOD_OPTIONAL, "_PIC", arg, 1, fwts_method_test_NULL_return, NULL); if (ret != FWTS_OK) break; } return ret; } /* * Section 6.1 Device Identification Objects */ static int method_test_CLS(fwts_framework *fw) { uint32_t element_size = 3; return method_evaluate_method(fw, METHOD_OPTIONAL, "_CLS", NULL, 0, fwts_method_test_package_integer_return, &element_size); } static int method_test_DDN(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_DDN", NULL, 0, fwts_method_test_string_return, NULL); } static int method_test_HID(fwts_framework *fw) { if (fw->flags & FWTS_FLAG_SBBR) return method_evaluate_method(fw, METHOD_MANDATORY, "_HID", NULL, 0, fwts_method_test_HID_return, NULL); else return method_evaluate_method(fw, METHOD_OPTIONAL, "_HID", NULL, 0, fwts_method_test_HID_return, NULL); } static int method_test_CID(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_CID", NULL, 0, fwts_method_test_CID_return, NULL); } static int method_test_MLS(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_MLS", NULL, 0, fwts_method_test_MLS_return, NULL); } static int method_test_HRV(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_HRV", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_STR(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_STR", NULL, 0, fwts_method_test_buffer_return, NULL); } static int method_test_PLD(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PLD", NULL, 0, fwts_method_test_PLD_return, NULL); } static int method_test_SUB(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_SUB", NULL, 0, fwts_method_test_SUB_return, NULL); } static int method_test_SUN(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_SUN", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_UID(fwts_framework *fw) { if (fw->flags & FWTS_FLAG_SBBR) return method_evaluate_method(fw, METHOD_MANDATORY, "_UID", NULL, 0, fwts_method_test_UID_return, NULL); else return method_evaluate_method(fw, METHOD_OPTIONAL, "_UID", NULL, 0, fwts_method_test_UID_return, NULL); } static void method_test_CRS_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint8_t *data; bool passed = true; const char *tag = "Unknown"; char *objname = (char*)private; char tmp[128]; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_BUFFER) != FWTS_OK) return; if (obj->Buffer.Pointer == NULL) { snprintf(tmp, sizeof(tmp), "Method%sNullBuffer", objname); fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s returned a NULL buffer pointer.", name); return; } if (obj->Buffer.Length < 1) { snprintf(tmp, sizeof(tmp), "Method%sBufferTooSmall", objname); fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s should return a buffer of at least one byte in length.", name); return; } data = (uint8_t*)obj->Buffer.Pointer; if (data[0] & 128) fwts_method_test_CRS_large_resource_items(fw, name, objname, data, obj->Buffer.Length, &passed, &tag); else fwts_method_test_CRS_small_resource_items(fw, name, objname, data, obj->Buffer.Length, &passed, &tag); if (passed) fwts_passed(fw, "%s (%s) looks sane.", name, tag); } static int method_test_CRS(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_MANDATORY, "_CRS", NULL, 0, method_test_CRS_return, "_CRS"); } static int method_test_MAT(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_MAT", NULL, 0, fwts_method_test_buffer_return, NULL); } static int method_test_PRS(fwts_framework *fw) { /* Re-use the _CRS checking on the returned buffer */ return method_evaluate_method(fw, METHOD_OPTIONAL, "_PRS", NULL, 0, method_test_CRS_return, "_PRS"); } static void method_test_PRT_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i, j; bool failed = false; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_PACKAGE) != FWTS_OK) return; for (i = 0; i < obj->Package.Count; i++) { ACPI_OBJECT *pkg; ACPI_OBJECT *element; pkg = &obj->Package.Elements[i]; /* check size of sub-packages */ if (fwts_method_subpackage_count_equal(fw, name, pkg, i, 4) != FWTS_OK) { failed = true; continue; } /* check types of sub-packages' elements */ for (j = 0; j < 4; j++) { element = &pkg->Package.Elements[j]; if (j == 2) { if (element->Type != ACPI_TYPE_INTEGER && element->Type != ACPI_TYPE_LOCAL_REFERENCE) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_PRTBadSubElementType", "%s element %" PRIu32 " is not an integer or a NamePath.", name, j); failed = true; } continue; } if (element->Type != ACPI_TYPE_INTEGER) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_PRTBadSubElementType", "%s element %" PRIu32 " is not an integer.", name, j); failed = true; } } /* check sub-packages's PCI address */ element = &pkg->Package.Elements[0]; if ((element->Integer.Value & 0xFFFF) != 0xFFFF) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_PRTBadSubElement", "%s element 0 is expected to end with 0xFFFF, got 0x%" PRIx32 ".", name, (uint32_t) element->Integer.Value); failed = true; } /* check sub-packages's PCI pin number */ element = &pkg->Package.Elements[1]; if (element->Integer.Value > 3) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_PRTBadSubElement", "%s element 1 is expected to be 0..3, got 0x%" PRIx32 ".", name, (uint32_t) element->Integer.Value); failed = true; } } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_PRT(fwts_framework *fw) { /* Re-use the _CRS checking on the returned buffer */ return method_evaluate_method(fw, METHOD_OPTIONAL, "_PRT", NULL, 0, method_test_PRT_return, "_PRT"); } static int method_test_DMA(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_DMA", NULL, 0, fwts_method_test_buffer_return, NULL); } static void method_test_FIX_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; char tmp[8]; bool failed = false; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; /* All elements in the package must be integers */ if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_INTEGER) != FWTS_OK) return; /* And they need to be valid IDs */ for (i = 0; i < obj->Package.Count; i++) { if (!fwts_method_valid_EISA_ID( (uint32_t)obj->Package.Elements[i].Integer.Value, tmp, sizeof(tmp))) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_FIXInvalidElementValue", "%s returned an integer " "0x%8.8" PRIx64 " in package element " "%" PRIu32 " that is not a valid " "EISA ID.", name, (uint64_t)obj->Integer.Value, i); failed = true; } } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_FIX(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_FIX", NULL, 0, method_test_FIX_return, NULL); } /* * Section 6.2.5 _DSD Device Specific Data, ACPI 5.1 */ static void method_test_DSD_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool failed = false; uint32_t i; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; /* Must be an even number of items in package */ if (obj->Package.Count & 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_DSDElementCount", "There must be an even number of items in the %s " "package, instead, got %" PRIu32 " elements.", name, obj->Package.Count); return; } for (i = 0; i < obj->Package.Count; i += 2) { /* UUID should be a buffer */ if (!fwts_method_type_matches(obj->Package.Elements[i].Type, ACPI_TYPE_BUFFER)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_DSDElementBuffer", "%s package element %" PRIu32 " was not the expected " "type '%s', was instead type '%s'.", name, i, fwts_method_type_name(ACPI_TYPE_BUFFER), fwts_method_type_name(obj->Package.Elements[i].Type)); failed = true; } /* Data should be a package */ if (!fwts_method_type_matches(obj->Package.Elements[i + 1].Type, ACPI_TYPE_PACKAGE)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_DSDElementPackage", "%s package element %" PRIu32 " was not the expected " "type '%s', was instead type '%s'.", name, i + 1, fwts_method_type_name(ACPI_TYPE_PACKAGE), fwts_method_type_name(obj->Package.Elements[i + 1].Type)); failed = true; } } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_DSD(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_DSD", NULL, 0, method_test_DSD_return, NULL); } static int method_test_DIS(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_DIS", NULL, 0, fwts_method_test_NULL_return, NULL); } static int method_test_GSB(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_GSB", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_HPP(fwts_framework *fw) { uint32_t element_size = 4; return method_evaluate_method(fw, METHOD_OPTIONAL, "_HPP", NULL, 0, fwts_method_test_package_integer_return, &element_size); } static int method_test_PXM(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PXM", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_SLI(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_SLI", NULL, 0, fwts_method_test_buffer_return, NULL); } /* Section 6.2.17 _CCA */ static int method_test_CCA(fwts_framework *fw) { if (fw->flags & FWTS_FLAG_SBBR) return method_evaluate_method(fw, METHOD_MANDATORY, "_CCA", NULL, 0, fwts_method_test_passed_failed_return, "_CCA"); else return method_evaluate_method(fw, METHOD_OPTIONAL, "_CCA", NULL, 0, fwts_method_test_passed_failed_return, "_CCA"); } /* * Section 6.3 Device Insertion, Removal and Status Objects */ static int method_test_EDL(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_EDL", NULL, 0, fwts_method_test_all_reference_package_return, "_EDL"); } static int method_test_EJD(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_EJD", NULL, 0, fwts_method_test_string_return, NULL); } #define method_test_EJx(name) \ static int method_test ## name(fwts_framework *fw) \ { \ ACPI_OBJECT arg[1]; \ \ arg[0].Type = ACPI_TYPE_INTEGER; \ arg[0].Integer.Value = 1; \ \ return method_evaluate_method(fw, METHOD_OPTIONAL, \ # name, arg, 1, fwts_method_test_NULL_return, # name); \ } method_test_EJx(_EJ0) method_test_EJx(_EJ1) method_test_EJx(_EJ2) method_test_EJx(_EJ3) method_test_EJx(_EJ4) static int method_test_LCK(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; return method_evaluate_method(fw, METHOD_OPTIONAL, "_LCK", arg, 1, fwts_method_test_NULL_return, NULL); } static int method_test_RMV(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_RMV", NULL, 0, fwts_method_test_passed_failed_return, "_RMV"); } static int method_test_STA(fwts_framework *fw) { if (fw->flags & FWTS_FLAG_SBBR) return method_evaluate_method(fw, METHOD_MANDATORY, "_STA", NULL, 0, fwts_method_test_STA_return, "_STA"); else return method_evaluate_method(fw, METHOD_OPTIONAL, "_STA", NULL, 0, fwts_method_test_STA_return, "_STA"); } /* * Section 6.5 Other Objects and Controls */ static int method_test_BBN(fwts_framework *fw) { uint64_t mask = ~0xff; return method_evaluate_method(fw, METHOD_OPTIONAL, "_BBN", NULL, 0, fwts_method_test_integer_reserved_bits_return, &mask); } static int method_test_BDN(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_MOBILE, "_BDN", NULL, 0, fwts_method_test_integer_return, "_BDN"); } static int method_test_DEP(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_DEP", NULL, 0, fwts_method_test_all_reference_package_return, "_DEP"); } static int method_test_FIT(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_FIT", NULL, 0, fwts_method_test_buffer_return, NULL); } static int method_test_LSI(fwts_framework *fw) { uint32_t element_size = 3; return method_evaluate_method(fw, METHOD_OPTIONAL, "_LSI", NULL, 0, fwts_method_test_package_integer_return, &element_size); } static int method_test_DCK(fwts_framework *fw) { int i; for (i = 0; i <= 1; i++) { /* Undock, Dock */ ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = i; if (method_evaluate_method(fw, METHOD_MOBILE, "_DCK", arg, 1, fwts_method_test_passed_failed_return, "_DCK") != FWTS_OK) break; fwts_log_nl(fw); } return FWTS_OK; } static int method_test_INI(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_INI", NULL, 0, fwts_method_test_NULL_return, NULL); } static int method_test_SEG(fwts_framework *fw) { uint64_t mask = ~0xffff; return method_evaluate_method(fw, METHOD_OPTIONAL, "_SEG", NULL, 0, fwts_method_test_integer_reserved_bits_return, &mask); } static void method_test_GLK_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool failed = false; FWTS_UNUSED(buf); FWTS_UNUSED(private); switch (obj->Type) { case ACPI_TYPE_INTEGER: if (obj->Integer.Value == 0 || obj->Integer.Value == 1) fwts_passed(fw, "%s returned an integer 0x%8.8" PRIx64, name, (uint64_t)obj->Integer.Value); else { fwts_failed(fw, LOG_LEVEL_HIGH, "MethodGLKInvalidInteger", "%s returned an invalid integer 0x%8.8" PRIx64, name, (uint64_t)obj->Integer.Value); failed = true; } break; default: fwts_failed(fw, LOG_LEVEL_HIGH, "Method_GLKBadReturnType", "%s did not return an integer.", name); failed = true; break; } if (!failed) fwts_method_passed_sane(fw, name, "integer"); } static int method_test_GLK(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_GLK", NULL, 0, method_test_GLK_return, "_GLK"); } /* * Section 7.1 Declaring a Power Resource Object */ static int method_test_ON_(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_ON_", NULL, 0, fwts_method_test_NULL_return, NULL); } static int method_test_OFF(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_OFF", NULL, 0, fwts_method_test_NULL_return, NULL); } /* * Section 7.2 Device Power Management Objects */ static int method_test_DSW(fwts_framework *fw) { ACPI_OBJECT arg[3]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; arg[1].Type = ACPI_TYPE_INTEGER; arg[1].Integer.Value = 0; arg[2].Type = ACPI_TYPE_INTEGER; arg[2].Integer.Value = 3; return method_evaluate_method(fw, METHOD_OPTIONAL, "_DSW", arg, 3, fwts_method_test_NULL_return, NULL); } static int method_test_PSx(fwts_framework *fw, char *name) { /* * iASL (ACPICA commit 6922796cfdfca041fdb96dc9e3918cbc7f43d830) * checks that _PS0 must exist if we have _PS1, _PS2, _PS3 * so check this here too. */ if ((fwts_acpi_object_exists(name) != NULL) && (fwts_acpi_object_exists("_PS0") == NULL)) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_PSx", "%s requires that the _PS0 " "control method must also exist, however, " "it was not found.", name); } return method_evaluate_method(fw, METHOD_OPTIONAL, name, NULL, 0, fwts_method_test_NULL_return, name); } static void method_test_PRW_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; static const fwts_package_element elements[] = { { ACPI_TYPE_LOCAL_REFERENCE, "DeviceName" }, { ACPI_TYPE_INTEGER, "Index" }, }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_count_min(fw, name, obj, 2) != FWTS_OK) return; if (obj->Package.Elements[0].Type != ACPI_TYPE_INTEGER && obj->Package.Elements[0].Type != ACPI_TYPE_PACKAGE) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_PRWBadPackageReturnType", "%s element 0 is not an integer or an package.", name); failed = true; } if (obj->Package.Elements[0].Type == ACPI_TYPE_PACKAGE) { ACPI_OBJECT *pkg; pkg = &obj->Package.Elements[0]; if (fwts_method_package_elements_type(fw, name, pkg, elements) != FWTS_OK) failed = true; } if (obj->Package.Elements[1].Type != ACPI_TYPE_INTEGER) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_PRWBadPackageReturnType", "%s element 1 is not an integer.", name); failed = true; } for (i = 2; i < obj->Package.Count - 1; i++) { if (obj->Package.Elements[i].Type != ACPI_TYPE_LOCAL_REFERENCE) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_PRWBadPackageReturnType", "%s package %" PRIu32 " element 0 is not a reference.", name, i); failed = true; } } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_PRW(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PRW", NULL, 0, method_test_PRW_return, NULL); } static void method_test_PS0_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { ACPI_HANDLE handle; ACPI_STATUS status; char *ps3path; /* Check _PS3 according to ACPI spec: * If any ACPI Object that controls power (_PSx or _PRx, where x = 0, 1, 2, * or 3) exists, then methods to set the device into D0 and D3 device * states (at least) must be present. */ ps3path = (char*) strdup(name); if (ps3path) { strcpy(ps3path, name); ps3path[strlen(name) - 1] = '3'; status = AcpiGetHandle(NULL, ps3path, &handle); if (status == AE_NOT_FOUND) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_PS0", "%s requires _PS3 control methods but " "it was not found.", name); } free(ps3path); } fwts_method_test_NULL_return(fw, name, buf, obj, private); } static int method_test_PS0(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PS0", NULL, 0, method_test_PS0_return, NULL); } static int method_test_PS1(fwts_framework *fw) { return method_test_PSx(fw, "_PS1"); } static int method_test_PS2(fwts_framework *fw) { return method_test_PSx(fw, "_PS2"); } static int method_test_PS3(fwts_framework *fw) { return method_test_PSx(fw, "_PS3"); } static int method_test_PSC(fwts_framework *fw) { uint64_t max = 3; return method_evaluate_method(fw, METHOD_OPTIONAL, "_PSC", NULL, 0, fwts_method_test_integer_max_return, &max); } static int method_test_PSE(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; return method_evaluate_method(fw, METHOD_OPTIONAL, "_PSE", arg, 1, fwts_method_test_NULL_return, NULL); } static void method_test_power_resources_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_LOCAL_REFERENCE) != FWTS_OK) return; fwts_method_passed_sane(fw, name, "package"); } #define method_test_POWER(name) \ static int method_test ## name(fwts_framework *fw) \ { \ return method_evaluate_method(fw, METHOD_OPTIONAL, \ # name, NULL, 0, method_test_power_resources_return, # name);\ } method_test_POWER(_PR0) method_test_POWER(_PR1) method_test_POWER(_PR2) method_test_POWER(_PR3) method_test_POWER(_PRE) static int method_test_PSW(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; return method_evaluate_method(fw, METHOD_OPTIONAL, "_PSW", arg, 1, fwts_method_test_NULL_return, NULL); } #define method_test_SxD(name) \ static int method_test ## name(fwts_framework *fw) \ { \ uint64_t max = DEVICE_D3HOT; \ return method_evaluate_method(fw, METHOD_OPTIONAL, \ # name, NULL, 0, fwts_method_test_integer_max_return, &max); \ } method_test_SxD(_S1D) method_test_SxD(_S2D) method_test_SxD(_S3D) method_test_SxD(_S4D) #define method_test_SxW(name) \ static int method_test ## name(fwts_framework *fw) \ { \ uint64_t max = DEVICE_D3COLD; \ return method_evaluate_method(fw, METHOD_OPTIONAL, \ # name, NULL, 0, fwts_method_test_integer_max_return, &max); \ } method_test_SxW(_S0W) method_test_SxW(_S1W) method_test_SxW(_S2W) method_test_SxW(_S3W) method_test_SxW(_S4W) method_test_SxW(_DSC) static int method_test_RST(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_RST", NULL, 0, fwts_method_test_NULL_return, NULL); } static void method_test_PRR_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { static const fwts_package_element elements[] = { { ACPI_TYPE_LOCAL_REFERENCE, "Power Reset Resource" }, }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK) return; fwts_method_passed_sane(fw, name, "package"); } static int method_test_PRR(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PRR", NULL, 0, method_test_PRR_return, NULL); } static int method_test_IRC(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_IRC", NULL, 0, fwts_method_test_NULL_return, NULL); } /* * Section 7.3 OEM Supplied System-Level Control Methods */ static void method_test_Sx__return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool failed = false; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; /* * The ACPI spec states it should have 1 integer, with the * values packed into each byte. However, nearly all BIOS * vendors don't do this, instead they return a package of * 2 or more integers with each integer lower byte containing * the data we are interested in. The kernel handles this * the non-compliant way. Doh. See drivers/acpi/acpica/hwxface.c * for the kernel implementation and also * source/components/hardware/hwxface.c in the reference ACPICA * sources. */ /* Something is really wrong if we don't have any elements in _Sx_ */ if (fwts_method_package_count_min(fw, name, obj, 1) != FWTS_OK) return; /* * Oh dear, BIOS is conforming to the spec but won't work in * Linux */ if (obj->Package.Count == 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_SxElementCount", "The ACPI specification states that %s should " "return a package of a single integer which " "this firmware does do. However, nearly all of the " "BIOS vendors return the values in the low 8 bits " "in a package of 2 to 4 integers which is not " "compliant with the specification BUT is the way " "that the ACPICA reference engine and the kernel " "expect. So, while this is conforming to the ACPI " "specification it will in fact not work in the " "Linux kernel.", name); return; } /* Yes, we really want integers! */ if ((obj->Package.Elements[0].Type != ACPI_TYPE_INTEGER) || (obj->Package.Elements[1].Type != ACPI_TYPE_INTEGER)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_SxElementType", "%s returned a package that did not contain " "an integer.", name); return; } if (obj->Package.Elements[0].Integer.Value & 0xffffff00) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_SxElementValue", "%s package element 0 had upper 24 bits " "of bits that were non-zero.", name); failed = true; } if (obj->Package.Elements[1].Integer.Value & 0xffffff00) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_SxElementValue", "%s package element 1 had upper 24 bits " "of bits that were non-zero.", name); failed = true; } fwts_log_info(fw, "%s PM1a_CNT.SLP_TYP value: 0x%8.8" PRIx64, name, (uint64_t)obj->Package.Elements[0].Integer.Value); fwts_log_info(fw, "%s PM1b_CNT.SLP_TYP value: 0x%8.8" PRIx64, name, (uint64_t)obj->Package.Elements[1].Integer.Value); if (!failed) fwts_method_passed_sane(fw, name, "package"); } #define method_test_Sx_(name) \ static int method_test ## name(fwts_framework *fw) \ { \ return method_evaluate_method(fw, METHOD_OPTIONAL, \ # name, NULL, 0, method_test_Sx__return, # name); \ } method_test_Sx_(_S0_) method_test_Sx_(_S1_) method_test_Sx_(_S2_) method_test_Sx_(_S3_) method_test_Sx_(_S4_) method_test_Sx_(_S5_) static int method_test_SWS(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_SWS", NULL, 0, fwts_method_test_integer_return, NULL); } /* * Section 8.4 Declaring Processors */ static void method_test_CPC_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint8_t revision; static const fwts_package_element elementsv1[] = { { ACPI_TYPE_INTEGER, "Number of Entries" }, { ACPI_TYPE_INTEGER, "Revision" }, { ACPI_TYPE_INTBUF, "Highest Performance" }, { ACPI_TYPE_INTBUF, "Nominal Performance" }, { ACPI_TYPE_INTBUF, "Lowest Non Linear Performance" }, { ACPI_TYPE_INTBUF, "Lowest Performance" }, { ACPI_TYPE_BUFFER, "Guaranteed Performance Register" }, { ACPI_TYPE_BUFFER, "Desired Performance Register" }, { ACPI_TYPE_BUFFER, "Minimum Performance Register" }, { ACPI_TYPE_BUFFER, "Maximum Performance Register" }, { ACPI_TYPE_BUFFER, "Performance Reduction Tolerance Register" }, { ACPI_TYPE_BUFFER, "Timed Window Register" }, { ACPI_TYPE_INTBUF, "Counter Wraparound Time" }, { ACPI_TYPE_BUFFER, "Nominal Counter Register" }, { ACPI_TYPE_BUFFER, "Delivered Counter Register" }, { ACPI_TYPE_BUFFER, "Performance Limited Register" }, { ACPI_TYPE_BUFFER, "Enable Register" } }; static const fwts_package_element elementsv2[] = { { ACPI_TYPE_INTEGER, "Number of Entries" }, { ACPI_TYPE_INTEGER, "Revision" }, { ACPI_TYPE_INTBUF, "Highest Performance" }, { ACPI_TYPE_INTBUF, "Nominal Performance" }, { ACPI_TYPE_INTBUF, "Lowest Non Linear Performance" }, { ACPI_TYPE_INTBUF, "Lowest Performance" }, { ACPI_TYPE_BUFFER, "Guaranteed Performance Register" }, { ACPI_TYPE_BUFFER, "Desired Performance Register" }, { ACPI_TYPE_BUFFER, "Minimum Performance Register" }, { ACPI_TYPE_BUFFER, "Maximum Performance Register" }, { ACPI_TYPE_BUFFER, "Performance Reduction Tolerance Register" }, { ACPI_TYPE_BUFFER, "Timed Window Register" }, { ACPI_TYPE_INTBUF, "Counter Wraparound Time" }, { ACPI_TYPE_BUFFER, "Reference Performance Counter Register" }, { ACPI_TYPE_BUFFER, "Delivered Performance Counter Register" }, { ACPI_TYPE_BUFFER, "Performance Limited Register" }, { ACPI_TYPE_BUFFER, "CPPC Enable Register" }, { ACPI_TYPE_INTBUF, "Autonomous Selection Enable" }, { ACPI_TYPE_BUFFER, "Autonomous Activity Window Register" }, { ACPI_TYPE_BUFFER, "Energy Performance Preference Register" }, { ACPI_TYPE_INTBUF, "Reference Performance" } }; static const fwts_package_element elementsv3[] = { { ACPI_TYPE_INTEGER, "Number of Entries" }, { ACPI_TYPE_INTEGER, "Revision" }, { ACPI_TYPE_INTBUF, "Highest Performance" }, { ACPI_TYPE_INTBUF, "Nominal Performance" }, { ACPI_TYPE_INTBUF, "Lowest Non Linear Performance" }, { ACPI_TYPE_INTBUF, "Lowest Performance" }, { ACPI_TYPE_BUFFER, "Guaranteed Performance Register" }, { ACPI_TYPE_BUFFER, "Desired Performance Register" }, { ACPI_TYPE_BUFFER, "Minimum Performance Register" }, { ACPI_TYPE_BUFFER, "Maximum Performance Register" }, { ACPI_TYPE_BUFFER, "Performance Reduction Tolerance Register" }, { ACPI_TYPE_BUFFER, "Timed Window Register" }, { ACPI_TYPE_INTBUF, "Counter Wraparound Time" }, { ACPI_TYPE_BUFFER, "Reference Performance Counter Register" }, { ACPI_TYPE_BUFFER, "Delivered Performance Counter Register" }, { ACPI_TYPE_BUFFER, "Performance Limited Register" }, { ACPI_TYPE_BUFFER, "CPPC Enable Register" }, { ACPI_TYPE_INTBUF, "Autonomous Selection Enable" }, { ACPI_TYPE_BUFFER, "Autonomous Activity Window Register" }, { ACPI_TYPE_BUFFER, "Energy Performance Preference Register" }, { ACPI_TYPE_INTBUF, "Reference Performance" }, { ACPI_TYPE_INTBUF, "Lowest Frequency" }, { ACPI_TYPE_INTBUF, "Nominal Frequency" } }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; revision = obj->Package.Elements[1].Integer.Value; if (revision == 1) { // acpi 5.0 /* For now, just check types */ if (fwts_method_package_elements_type(fw, name, obj, elementsv1) != FWTS_OK) return; } else if (revision == 2) { // acpi 5.1 ~ acpi 6.1a /* For now, just check types */ if (fwts_method_package_elements_type(fw, name, obj, elementsv2) != FWTS_OK) return; } else if (revision == 3) { // acpi 6.2 and later /* For now, just check types */ if (fwts_method_package_elements_type(fw, name, obj, elementsv3) != FWTS_OK) return; } else { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_CPCBadRevision", "_CPC's revision is incorrect, " "expecting 1, 2 or 3, got 0x%" PRIx8 , revision); return; } fwts_method_passed_sane(fw, name, "package"); } static int method_test_CPC(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_CPC", NULL, 0, method_test_CPC_return, NULL); } static void method_test_xSD_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { char *objname = (char*) private; uint64_t element_size; bool failed = false; bool is_csd = false; uint32_t i; static const fwts_package_element c_elements[] = { { ACPI_TYPE_INTEGER, "NumEntries" }, { ACPI_TYPE_INTEGER, "Revision" }, { ACPI_TYPE_INTEGER, "Domain" }, { ACPI_TYPE_INTEGER, "CoordType" }, { ACPI_TYPE_INTEGER, "NumProcessors" }, { ACPI_TYPE_INTEGER, "Index" }, }; static const fwts_package_element tp_elements[] = { { ACPI_TYPE_INTEGER, "NumEntries" }, { ACPI_TYPE_INTEGER, "Revision" }, { ACPI_TYPE_INTEGER, "Domain" }, { ACPI_TYPE_INTEGER, "CoordType" }, { ACPI_TYPE_INTEGER, "NumProcessors" }, }; if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (objname != NULL && !strncmp("_CSD", objname, strlen("_CSD"))) { is_csd = true; element_size = FWTS_ARRAY_SIZE(c_elements); if (fwts_method_package_count_min(fw, name, obj, 1) != FWTS_OK) return; } else { /* for _PSD & _TSD */ element_size = FWTS_ARRAY_SIZE(tp_elements); if (fwts_get_acpi_version(fw) >= FWTS_ACPI_VERSION_62) { if (fwts_method_package_count_equal(fw, name, obj, 1) != FWTS_OK) return; } else if (fwts_method_package_count_min(fw, name, obj, 1) != FWTS_OK) return; } if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_PACKAGE) != FWTS_OK) return; for (i = 0; i < obj->Package.Count; i++) { ACPI_OBJECT *pkg; char tmp[128]; int elements_ok; pkg = &obj->Package.Elements[i]; if (is_csd) elements_ok = fwts_method_package_elements_type(fw, name, pkg, c_elements); else elements_ok = fwts_method_package_elements_type(fw, name, pkg, tp_elements); if (elements_ok != FWTS_OK) { failed = true; continue; } snprintf(tmp, sizeof(tmp), "Method%sSubPackageElement", objname); if (pkg->Package.Elements[0].Integer.Value != element_size) { fwts_failed(fw, LOG_LEVEL_HIGH, tmp, "%s sub-package %" PRIu32 " element 0 (NumEntries) " "was expected to be %" PRIu64 ", " "got %" PRIu64 " instead.", name, i, element_size, pkg->Package.Elements[0].Integer.Value); failed = true; } if (pkg->Package.Elements[1].Integer.Value != 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s sub-package %" PRIu32 " element 1 (Revision) " "was expected to have value 0, instead it " "was 0x%" PRIx64 ".", name, i, (uint64_t)pkg->Package.Elements[1].Integer.Value); failed = true; } /* Element 3 should contain 0xfc..0xfe */ if ((pkg->Package.Elements[3].Integer.Value != 0xfc) && (pkg->Package.Elements[3].Integer.Value != 0xfd) && (pkg->Package.Elements[3].Integer.Value != 0xfe)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s sub-package %" PRIu32 " element 3 (CoordType) " "was expected to have value 0xfc (SW_ALL), " "0xfd (SW_ANY) or 0xfe (HW_ALL), instead it " "was 0x%" PRIx64 ".", name, i, (uint64_t)pkg->Package.Elements[3].Integer.Value); failed = true; } } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_CSD(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_CSD", NULL, 0, method_test_xSD_return, "_CSD"); } static void method_test_CST_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; bool *cst_elements_ok; bool an_element_ok = false; static const fwts_package_element elements[] = { { ACPI_TYPE_BUFFER, "Register" }, { ACPI_TYPE_INTEGER, "Type" }, { ACPI_TYPE_INTEGER, "Latency" }, { ACPI_TYPE_INTEGER, "Power" }, }; FWTS_UNUSED(private); if (obj == NULL) return; if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; /* _CST has at least two elements */ if (fwts_method_package_count_min(fw, name, obj, 2) != FWTS_OK) return; /* Element 1 must be an integer */ if (obj->Package.Elements[0].Type != ACPI_TYPE_INTEGER) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_CSTElement0NotInteger", "%s should return package with element zero being an integer " "count of the number of C state sub-packages.", name); return; } if (obj->Package.Elements[0].Integer.Value != obj->Package.Count - 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_CSTElement0CountMismatch", "%s should return package with element zero containing " "the number of C state sub-elements. However, _CST has " "%" PRIu32 " returned C state sub-elements yet _CST " "reports it has %" PRIu64 " C states.", name, obj->Package.Count - 1, (uint64_t)obj->Package.Elements[0].Integer.Value); return; } cst_elements_ok = calloc(obj->Package.Count, sizeof(bool)); if (cst_elements_ok == NULL) { fwts_log_error(fw, "Cannot allocate an array. Test aborted."); return; } /* Could be one or more packages */ for (i = 1; i < obj->Package.Count; i++) { ACPI_OBJECT *pkg; cst_elements_ok[i] = true; if (obj->Package.Elements[i].Type != ACPI_TYPE_PACKAGE) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_CSTElementType", "%s package element %" PRIu32 " was not a package.", name, i); cst_elements_ok[i] = false; failed = true; continue; /* Skip processing sub-package */ } pkg = &obj->Package.Elements[i]; if (fwts_method_package_elements_type(fw, name, pkg, elements) != FWTS_OK) { cst_elements_ok[i] = false; failed = true; continue; } /* Some very simple sanity checks on Register Resource Buffer */ if (pkg->Package.Elements[0].Type == ACPI_TYPE_BUFFER) { if (pkg->Package.Elements[0].Buffer.Pointer == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_CSTCStateRegisterResourceBufferNull", "%s C-State package %" PRIu32 " has a NULL " "Register Resource Buffer", name, i); failed = true; } else { uint8_t *data = (uint8_t *)pkg->Package.Elements[0].Buffer.Pointer; size_t length = (size_t)pkg->Package.Elements[0].Buffer.Length; if (data[0] != 0x82) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_CSTCStateResourceBufferWrongType", "%s C-State package %" PRIu32 " has a Resource " "type 0x%2.2" PRIx8 ", however, was expecting a Register " "Resource type 0x82.", name, i, data[0]); failed = true; } else { bool passed = true; fwts_method_test_CRS_large_size(fw, name, "_CST", data, length, 12, 12, &passed); if (!passed) failed = true; } } } if (cst_elements_ok[i]) an_element_ok = true; } /* Now dump out per CPU C-state information */ if (an_element_ok) { fwts_log_info_verbatim(fw, "%s values:", name); fwts_log_info_verbatim(fw, "# C-State Latency Power"); fwts_log_info_verbatim(fw, " (us) (mW)"); for (i = 1; i < obj->Package.Count; i++){ if (cst_elements_ok[i]) { ACPI_OBJECT *pkg = &obj->Package.Elements[i]; fwts_log_info_verbatim(fw, "%2" PRIu32 " C%" PRIu64 " %6" PRIu64 " %6" PRIu64, i, (uint64_t)pkg->Package.Elements[1].Integer.Value, (uint64_t)pkg->Package.Elements[2].Integer.Value, (uint64_t)pkg->Package.Elements[3].Integer.Value); } else { fwts_log_info_verbatim(fw, "%2" PRIu32 " -- ----- -----", i); } } } free(cst_elements_ok); if (!failed) fwts_method_passed_sane(fw, name, "values"); } static int method_test_CST(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_CST", NULL, 0, method_test_CST_return, NULL); } static void method_test_PCT_PTC_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; char *objname = (char *)private; char tmp[128]; static const fwts_package_element elements[] = { { ACPI_TYPE_BUFFER, "ControlRegister" }, { ACPI_TYPE_BUFFER, "StatusRegister" }, }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK) return; snprintf(tmp, sizeof(tmp), "Method%sBadElement", objname); for (i = 0; i < obj->Package.Count; i++) { ACPI_RESOURCE *resource = NULL; ACPI_STATUS status; ACPI_OBJECT *element_buf = &obj->Package.Elements[i]; status = AcpiBufferToResource(element_buf->Buffer.Pointer, element_buf->Buffer.Length, &resource); if (ACPI_FAILURE(status) || !resource) { failed = true; fwts_failed(fw, LOG_LEVEL_HIGH, tmp, "%s should contain only Resource Descriptors", name); continue; } if (resource->Type != ACPI_RESOURCE_TYPE_GENERIC_REGISTER) { failed = true; fwts_failed(fw, LOG_LEVEL_HIGH, tmp, "%s should contain only Resource Type 16, got %" PRIu32 "\n", name, resource->Type); } } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_PCT(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PCT", NULL, 0, method_test_PCT_PTC_return, "_PCT"); } static void method_test_PSS_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; uint32_t max_freq = 0; uint32_t prev_power = 0; bool max_freq_valid = false; bool dump_elements = false; bool *element_ok; static const fwts_package_element elements[] = { { ACPI_TYPE_INTEGER, "CoreFrequency" }, { ACPI_TYPE_INTEGER, "Power" }, { ACPI_TYPE_INTEGER, "Latency" }, { ACPI_TYPE_INTEGER, "BusMasterLatency" }, { ACPI_TYPE_INTEGER, "Control" }, { ACPI_TYPE_INTEGER, "Status" }, }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; /* Something is really wrong if we don't have any elements in _PSS */ if (fwts_method_package_count_min(fw, name, obj, 1) != FWTS_OK) return; element_ok = calloc(obj->Package.Count, sizeof(bool)); if (element_ok == NULL) { fwts_log_error(fw, "Cannot allocate an array. Test aborted."); return; } if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_PACKAGE) != FWTS_OK) { free(element_ok); return; } for (i = 0; i < obj->Package.Count; i++) { ACPI_OBJECT *pstate; element_ok[i] = true; pstate = &obj->Package.Elements[i]; if (fwts_method_package_elements_type(fw, name, pstate, elements) != FWTS_OK) { element_ok[i] = false; failed = true; continue; } /* At least one element is OK, so the element can be dumped out */ dump_elements = true; /* * Collect maximum frequency. The sub-packages are sorted in * descending power dissipation order, so one would assume that * the highest frequency is first. However, it is not clear * from the ACPI spec that this is necessarily an assumption we * should make, so instead we should probably scan through all * the valid sub-packages and find the highest frequency. */ if (max_freq < pstate->Package.Elements[0].Integer.Value) { max_freq = pstate->Package.Elements[0].Integer.Value; max_freq_valid = true; } /* Sanity check descending power dissipation levels */ if ((i > 0) && (prev_power != 0) && (pstate->Package.Elements[1].Integer.Value > prev_power)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_PSSSubPackagePowerNotDecending", "%s P-State sub-package %" PRIu32 " has a larger " "power dissipation setting than the previous " "sub-package.", name, i); fwts_advice(fw, "_PSS P-States must be ordered in descending " "order of power dissipation, so that the " "zero'th entry has the highest power " "dissipation level and the Nth has the " "lowest."); failed = true; } prev_power = pstate->Package.Elements[1].Integer.Value; } /* * If we have some valid data then dump it out, it is useful to see */ if (dump_elements) { fwts_log_info_verbatim(fw, "%s values:", name); fwts_log_info_verbatim(fw, "P-State Freq Power Latency Bus Master"); fwts_log_info_verbatim(fw, " (MHz) (mW) (us) Latency (us)"); for (i = 0; i < obj->Package.Count; i++) { ACPI_OBJECT *pstate = &obj->Package.Elements[i]; if (element_ok[i]) { fwts_log_info_verbatim(fw, " %3d %7" PRIu64 " %8" PRIu64 " %5" PRIu64 " %5" PRIu64, i, (uint64_t)pstate->Package.Elements[0].Integer.Value, (uint64_t)pstate->Package.Elements[1].Integer.Value, (uint64_t)pstate->Package.Elements[2].Integer.Value, (uint64_t)pstate->Package.Elements[3].Integer.Value); } else { fwts_log_info_verbatim(fw, " %3d ---- ----- -- -- (invalid)", i); } } } free(element_ok); /* * Sanity check maximum frequency. We could also check the DMI data * for a BIOS date (but this can be wrong) or check the CPU identity * (which requires adding in new CPU identity checks) to make a decision * on when it is reasonable to assume a CPU is modern and hence clocked * incorrectly. For now, just flag up a low level error that the * frequency looks rather low rather than try to be intelligent (and * possibly make a mistake). I'd rather flag up a few false positives * on older machines than miss flagging up bad _PSS settings on new * machines. */ if (max_freq_valid && max_freq < 1000) { fwts_failed(fw, LOG_LEVEL_LOW, "Method_PSSSubPackageLowFreq", "Maximum CPU frequency is %" PRIu32 "Hz and this is low for " "a modern processor. This may indicate the _PSS " "P-States are incorrect\n", max_freq); fwts_advice(fw, "The _PSS P-States are used by the Linux CPU frequency " "driver to set the CPU frequencies according to system " "load. Sometimes the firmware sets these incorrectly " "and the machine runs at a sub-optimal speed. One can " "view the firmware defined CPU frequencies via " "/sys/devices/system/cpu/cpu*/cpufreq/" "scaling_available_frequencies"); failed = true; } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_PSS(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PSS", NULL, 0, method_test_PSS_return, NULL); } static int method_test_PPC(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PPC", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_PPE(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PPE", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_PSD(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PSD", NULL, 0, method_test_xSD_return, "_PSD"); } static int method_test_PDL(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PDL", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_PTC(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PTC", NULL, 0, method_test_PCT_PTC_return, "_PTC"); } static int method_test_TDL(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_TDL", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_TPC(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_TPC", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_TSD(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_TSD", NULL, 0, method_test_xSD_return, "_TSD"); } static void method_test_TSS_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; bool *tss_elements_ok; bool an_element_ok = false; static const fwts_package_element elements[] = { { ACPI_TYPE_INTEGER, "Percent" }, { ACPI_TYPE_INTEGER, "Power" }, { ACPI_TYPE_INTEGER, "Latency" }, { ACPI_TYPE_INTEGER, "CoordType" }, { ACPI_TYPE_INTEGER, "Status" }, }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; /* Something is really wrong if we don't have any elements in _TSS */ if (fwts_method_package_count_min(fw, name, obj, 1) != FWTS_OK) return; tss_elements_ok = calloc(obj->Package.Count, sizeof(bool)); if (tss_elements_ok == NULL) { fwts_log_error(fw, "Cannot allocate an array. Test aborted."); return; } if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_PACKAGE) != FWTS_OK) { free(tss_elements_ok); return; } /* Could be one or more packages */ for (i = 0; i < obj->Package.Count; i++) { ACPI_OBJECT *pkg; tss_elements_ok[i] = true; pkg = &obj->Package.Elements[i]; if (fwts_method_package_elements_type(fw, name, pkg, elements) != FWTS_OK) { tss_elements_ok[i] = false; failed = true; continue; } /* At least one element is OK, so the element can be dumped out */ an_element_ok = true; /* Element 0 must be 1..100 */ if ((pkg->Package.Elements[0].Integer.Value < 1) || (pkg->Package.Elements[0].Integer.Value > 100)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_TSDSubPackageElement", "%s sub-package %" PRIu32 " element 0 " "was expected to have value 1..100, instead " "was %" PRIu64 ".", name, i, (uint64_t)pkg->Package.Elements[0].Integer.Value); failed = true; } /* Skip checking elements 1..4 */ } /* Summary info */ if (an_element_ok) { fwts_log_info_verbatim(fw, "%s values:", name); fwts_log_info_verbatim(fw, "T-State CPU Power Latency Control Status"); fwts_log_info_verbatim(fw, " Freq (mW) (usecs)"); for (i = 0; i < obj->Package.Count; i++) { if (tss_elements_ok[i]) { ACPI_OBJECT *pkg = &obj->Package.Elements[i]; fwts_log_info_verbatim(fw, " %3d %3" PRIu64 "%% %7" PRIu64 " %7" PRIu64 " %2.2" PRIx64 " %2.2" PRIx64, i, (uint64_t)pkg->Package.Elements[0].Integer.Value, (uint64_t)pkg->Package.Elements[1].Integer.Value, (uint64_t)pkg->Package.Elements[2].Integer.Value, (uint64_t)pkg->Package.Elements[3].Integer.Value, (uint64_t)pkg->Package.Elements[4].Integer.Value); } else { fwts_log_info_verbatim(fw, " %3d ---- ----- ----- -- -- (invalid)", i); } } } free(tss_elements_ok); if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_TSS(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_TSS", NULL, 0, method_test_TSS_return, NULL); } /* * Section 8.4.4 Lower Power Idle States */ static void method_test_LPI_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i, j; bool failed = false; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_count_min(fw, name, obj, 3) != FWTS_OK) return; /* first 3 elements are integers, and rests are packages */ for (i = 0; i < obj->Package.Count; i++) { if (i < 3) { if (obj->Package.Elements[i].Type != ACPI_TYPE_INTEGER) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_LPIBadElementType", "%s element %" PRIu32 " is not an integer.", name, i); failed = true; continue; } if (i == 0) { if (fwts_method_test_revision(fw, name, obj->Package.Elements[i].Integer.Value, 0) != FWTS_OK) failed = true; } else if (i == 2) { if (obj->Package.Elements[i].Integer.Value != obj->Package.Count - 3) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_LPIBadCount", "%s Count reports %" PRIu32 ", but there are %" PRIu32 " sub-packages.", name, (uint32_t) obj->Package.Elements[i].Integer.Value, obj->Package.Count - 3); failed = true; } } } else { ACPI_OBJECT *pkg; if (obj->Package.Elements[i].Type != ACPI_TYPE_PACKAGE) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_LPIBadElementType", "%s element %" PRIu32 " is not a package.", name, i); failed = true; continue; } pkg = &obj->Package.Elements[i]; for (j = 0; j < pkg->Package.Count; j++) { switch (j) { case 0 ... 5: if (pkg->Package.Elements[j].Type != ACPI_TYPE_INTEGER) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_LPIBadSubElementType", "%s sub-package %" PRIu32 " element %" PRIu32 " is not " "an integer.", name, i, j); failed = true; } break; case 6: if (pkg->Package.Elements[j].Type != ACPI_TYPE_INTEGER && pkg->Package.Elements[j].Type != ACPI_TYPE_BUFFER) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_LPIBadSubElementType", "%s sub-package %" PRIu32 " element %" PRIu32 " is not " "a buffer or an integer.", name, i, j); failed = true; } break; case 7 ... 8: if (pkg->Package.Elements[j].Type != ACPI_TYPE_BUFFER) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_LPIBadSubElementType", "%s sub-package %" PRIu32 " element %" PRIu32 " is not " "a buffer.", name, i, j); failed = true; } break; case 9: if (pkg->Package.Elements[j].Type != ACPI_TYPE_STRING) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_LPIBadSubElementType", "%s sub-package %" PRIu32 " element %" PRIu32 " is not " "a string.", name, i, j); failed = true; } break; default: fwts_failed(fw, LOG_LEVEL_HIGH, "Method_LPIBadSubElement", "%s sub-package %" PRIu32 " element %" PRIu32 " should have " "9 elements, got .", name, i, j+1); failed = true; break; } } } } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_LPI(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_LPI", NULL, 0, method_test_LPI_return, NULL); } static void method_test_RDI_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i, j; bool failed = false; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; /* First element is Revision */ if (obj->Package.Elements[0].Integer.Value != 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_RDIBadID", "%s: Expected Revision to be 0, " "got 0x%4.4" PRIx64 ".", name, (uint64_t)obj->Package.Elements[0].Integer.Value); failed = true; } /* The rest of elements are packages with references */ for (i = 1; i < obj->Package.Count; i++) { ACPI_OBJECT *pkg; pkg = &obj->Package.Elements[i]; if (pkg->Type != ACPI_TYPE_PACKAGE) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_RDIBadElementType", "%s element %" PRIu32 " is not a package.", name, i); failed = true; continue; } for (j = 0; j < pkg->Package.Count; j++) { if (pkg->Package.Elements[j].Type != ACPI_TYPE_LOCAL_REFERENCE) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_RDIBadSubElementType", "%s sub-package %" PRIu32 " element %" PRIu32 " is not " "a Reference.", name, i, j); failed = true; } } } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_RDI(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_RDI", NULL, 0, method_test_RDI_return, NULL); } /* * Section 8.5 Processor Aggregator Device */ static void method_test_PUR_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { static const fwts_package_element elements[] = { { ACPI_TYPE_INTEGER, "RevisionID" }, { ACPI_TYPE_INTEGER, "NumProcessors" }, }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_count_equal(fw, name, obj, 2) != FWTS_OK) return; if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK) return; /* RevisionID */ if (obj->Package.Elements[0].Integer.Value != 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_PURBadID", "%s: Expected RevisionID to be 1, " "got 0x%8.8" PRIx64 ".", name, (uint64_t)obj->Package.Elements[0].Integer.Value); return; } fwts_method_passed_sane(fw, name, "package"); } static int method_test_PUR(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PUR", NULL, 0, method_test_PUR_return, NULL); } /* * Section 9.1 System Indicators */ static int method_test_SST(fwts_framework *fw) { ACPI_OBJECT arg[1]; int ret, i; arg[0].Type = ACPI_TYPE_INTEGER; for (i = 0; i <= 4; i++) { arg[0].Integer.Value = i; ret = method_evaluate_method(fw, METHOD_OPTIONAL, "_SST", arg, 1, fwts_method_test_NULL_return, NULL); if (ret == FWTS_NOT_EXIST && (fw->flags & FWTS_FLAG_SBBR)) { fwts_warning(fw, "_SST method not found. This should be treated as error " "if the platform provides user visible status such as LED."); } if (ret != FWTS_OK) break; } return ret; } static int method_test_MSG(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 0; return method_evaluate_method(fw, METHOD_OPTIONAL, "_MSG", arg, 1, fwts_method_test_NULL_return, NULL); } /* * Section 9.2 Ambient Light Sensor Device */ method_test_integer(_ALC, METHOD_OPTIONAL) method_test_integer(_ALI, METHOD_OPTIONAL) method_test_integer(_ALT, METHOD_OPTIONAL) static void method_test_ALR_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; uint32_t adjustment = 0, illuminance = 0; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; /* Could be one or more sub-packages */ for (i = 0; i < obj->Package.Count; i++) { ACPI_OBJECT *pkg; pkg = &obj->Package.Elements[i]; if (fwts_method_subpackage_count_equal(fw, name, pkg, i, 2) != FWTS_OK) { failed = true; } else { /* elements should be listed in monotonically increasing order */ if (pkg->Package.Elements[0].Type != ACPI_TYPE_INTEGER || adjustment > pkg->Package.Elements[0].Integer.Value) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_ALRBadSubPackageReturnType", "%s sub-package %" PRIu32 " element 0 is an invalid integer.", name, i); failed = true; } if (pkg->Package.Elements[1].Type != ACPI_TYPE_INTEGER || illuminance > pkg->Package.Elements[1].Integer.Value) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_ALRBadSubPackageReturnType", "%s sub-package %" PRIu32 " element 1 is an invalid integer.", name, i); failed = true; } adjustment = pkg->Package.Elements[0].Integer.Value; illuminance = pkg->Package.Elements[1].Integer.Value; } } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_ALR(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_ALR", NULL, 0, method_test_ALR_return, NULL); } static int method_test_ALP(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_ALP", NULL, 0, fwts_method_test_polling_return, "_ALP"); } /* * Section 9.4 Lid control */ static int method_test_LID(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_MOBILE, "_LID", NULL, 0, fwts_method_test_integer_return, NULL); } /* * Section 9.8 ATA Controllers */ static void method_test_GTF_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_BUFFER) != FWTS_OK) return; if (obj->Buffer.Length % 7) fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_GTFBadBufferSize", "%s should return a buffer with size of multiple of 7.", name); else fwts_method_passed_sane(fw, name, "buffer"); } static int method_test_GTF(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_GTF", NULL, 0, method_test_GTF_return, NULL); } static void method_test_GTM_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_BUFFER) != FWTS_OK) return; if (fwts_method_buffer_size(fw, name, obj, 20) == FWTS_OK) fwts_method_passed_sane(fw, name, "buffer"); } static int method_test_GTM(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_GTM", NULL, 0, method_test_GTM_return, NULL); } /* * Section 9.12 Memory Devices */ static int method_test_MBM(fwts_framework *fw) { uint32_t element_size = 8; return method_evaluate_method(fw, METHOD_OPTIONAL, "_MBM", NULL, 0, fwts_method_test_package_integer_return, &element_size); } /* * Section 9.13 USB Port Capabilities */ static void method_test_UPC_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t connector_type, capabilities; static const fwts_package_element elements[] = { { ACPI_TYPE_INTEGER, "Connectable" }, { ACPI_TYPE_INTEGER, "Type" }, { ACPI_TYPE_INTEGER, "USB-C Port Capabilities" }, { ACPI_TYPE_INTEGER, "Reserved1" }, }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK) return; connector_type = obj->Package.Elements[1].Integer.Value; if (connector_type > 0x0a && connector_type < 0xFF) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_UPCBadReturnType", "%s element 1 returned reserved value.", name); return; } capabilities = obj->Package.Elements[2].Integer.Value; switch (connector_type) { case 0x08: case 0x09: case 0x0a: if (capabilities & 0xffffffc0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_UPCBadReturnType", "%s %s set reserved bits (%d)", name, elements[2].name, capabilities); return; } break; default: if (capabilities != 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_UPCBadReturnType", "%s %s returned %d which is incompatible with connector type %d.", name, elements[2].name, capabilities, connector_type); return; } break; } if (obj->Package.Elements[3].Integer.Value != 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_UPCBadReturnType", "%s element 3 is not zero.", name); return; } fwts_method_passed_sane(fw, name, "package"); } static int method_test_UPC(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_UPC", NULL, 0, method_test_UPC_return, NULL); } /* * Section 9.13 USB Power Data Object ACPI6.5 */ static void method_test_PDO_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i, j; bool failed = false; uint32_t flags; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (obj->Package.Elements[0].Type != ACPI_TYPE_INTEGER) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_PDOBadElementType", "%s element %" PRIu32 " is not an integer.", name, 0); failed = true; } if (obj->Package.Elements[1].Type != ACPI_TYPE_INTEGER) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_PDOBadElementType", "%s element %" PRIu32 " is not an integer.", name, 1); failed = true; } flags = obj->Package.Elements[1].Integer.Value; if (flags & 0xfffffff0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_PDOElementValue", "%s package element 1 had upper 28 bits " "of bits that were non-zero, value 0x%4.4" PRIu32 ".", name, flags); failed = true; } if ((flags & 0x7) > 4) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_PDOElementValue", "%s package element 1 has reserved bits that are non-zero " "Bits[2:0] value 101b-111b is reserved.", name); failed = true; } for (i = 2; i < 4; i++) { ACPI_OBJECT *pkg; if (obj->Package.Elements[i].Type != ACPI_TYPE_PACKAGE) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_PDOBadElementType", "%s element %" PRIu32 " is not a package.", name, i); failed = true; continue; } pkg = &obj->Package.Elements[i]; for (j = 0; j < pkg->Package.Count; j++) { if (pkg->Package.Elements[j].Type != ACPI_TYPE_INTEGER) { fwts_failed(fw, LOG_LEVEL_HIGH, "Method_PDOBadSubElementType", "%s sub-package %" PRIu32 " element %" PRIu32 " is not " "an integer.", name, i, j); failed = true; } } } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_PDO(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PDO", NULL, 0, method_test_PDO_return, NULL); } /* * Section 9.16 User Presence Detection Device */ static int method_test_UPD(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_UPD", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_UPP(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_UPP", NULL, 0, fwts_method_test_polling_return, NULL); } /* * Section 9.18 Wake Alarm Device */ static void method_test_GCP_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t *mask = (uint32_t *) private; bool failed = false; if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; gcp_return_value = obj->Integer.Value; if (gcp_return_value & *mask) { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodIllegalReserved", "%s returned value 0x%4.4" PRIx32 " and some of the " "reserved bits are set when they should be zero.", name, (uint32_t)obj->Integer.Value); } /* If wake on DC is supported (bit 1), then wake from AC (bit 0) must be supported */ if (gcp_return_value & (1 << 1) && !(gcp_return_value & 1)) { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodBadSupport", "%s returned value 0x%4.4" PRIx32 ", if DC is supported(bit 1), " "then wake from AC(bit 0) must be supported.", name, gcp_return_value); } /* If wake on AC from S5 is supported (bit 6), then wake on AC from S4 must be supported (bit 5) */ if (gcp_return_value & (1 << 6) && !(gcp_return_value & (1 << 5))) { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodBadSupport", "%s returned value 0x%4.4" PRIx32 ", if wake on AC from S5 is supported(bit 6), " "then wake on AC from S4 must be supported(bit 5).", name, gcp_return_value); } /* If wake on AC from S4 is supported (bit 5), then wake on AC must be supported (bit 0) */ if (gcp_return_value & (1 << 5) && !(gcp_return_value & 1)) { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodBadSupport", "%s returned value 0x%4.4" PRIx32 ", if wake on AC from S4 is supported(bit 5), " "then wake on AC must be supported(bit 0).", name, gcp_return_value); } /* If wake on DC from S5 is supported (bit 8), then wake on DC from S4 must be supported (bit 7) */ if (gcp_return_value & (1 << 8) && !(gcp_return_value & (1 << 7))) { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodBadSupport", "%s returned value 0x%4.4" PRIx32 ", if wake on DC from S5 is supported(bit 8), " "then wake on DC from S4 must be supported(bit 7).", name, gcp_return_value); } /* If wake on DC from S4 is supported (bit 7), then wake on DC must be supported (bit 1) */ if (gcp_return_value & (1 << 7) && !(gcp_return_value & (1 << 1))) { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodBadSupport", "%s returned value 0x%4.4" PRIx32 ", if wake on DC from S4 is supported(bit 7), " "then wake on DC must be supported(bit 1).", name, gcp_return_value); } /* If wake on DC from S4 is supported (bit 7), then wake on AC from S4 must be supported (bit 5) */ if (gcp_return_value & (1 << 7) && !(gcp_return_value & (1 << 5))) { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodBadSupport", "%s returned value 0x%4.4" PRIx32 ", if wake on DC from S4 is supported(bit 7), " "then wake on AC from S4 must be supported(bit 5).", name, gcp_return_value); } /* If wake on DC from S5 is supported (bit 8), then wake on AC from S5 must be supported (bit 6) */ if (gcp_return_value & (1 << 8) && !(gcp_return_value & (1 << 6))) { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodBadSupport", "%s returned value 0x%4.4" PRIx32 ", if wake on DC from S5 is supported(bit 8), " "then wake on AC from S5 must be supported(bit 6).", name, gcp_return_value); } /* If wake from S4/S5 is supported (bits 5-8), then _GWS must be supported (bit 4) */ if (gcp_return_value & 0x1e0 && !(gcp_return_value & (1 << 4))) { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodBadSupport", "%s returned value 0x%4.4" PRIx32 ", if wake from S4/S5 is supported(bits 5-8), " "then _GWS must be supported(bit 4).", name, gcp_return_value); } if (!failed) fwts_passed(fw, "%s correctly returned an integer.", name); } static int method_test_GCP(fwts_framework *fw) { uint32_t mask = ~0x1ff; return method_evaluate_method(fw, METHOD_OPTIONAL, "_GCP", NULL, 0, method_test_GCP_return, &mask); } static void method_test_GRT_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_BUFFER) != FWTS_OK) return; if (fwts_method_buffer_size(fw, name, obj, 16) != FWTS_OK) return; /* * Should sanity check this, but we can't read the * the data in this emulated mode, so ignore */ fwts_method_passed_sane(fw, name, "buffer"); } static int method_test_GRT(fwts_framework *fw) { /* This object is required if the capabilities bit 2 is set to 1 */ if (gcp_return_value & (1 << 2)) return method_evaluate_method(fw, METHOD_MANDATORY, "_GRT", NULL, 0, method_test_GRT_return, NULL); else return method_evaluate_method(fw, METHOD_OPTIONAL, "_GRT", NULL, 0, method_test_GRT_return, NULL); } static int method_test_SRT(fwts_framework *fw) { uint32_t time_size = sizeof(fwts_acpi_time_buffer); fwts_acpi_time_buffer real_time; ACPI_OBJECT arg0; real_time.year = 2000; real_time.month = 1; real_time.day = 1; real_time.hour = 0; real_time.minute = 0; real_time.milliseconds = 1; real_time.timezone = 0; arg0.Type = ACPI_TYPE_BUFFER; arg0.Buffer.Length = time_size; arg0.Buffer.Pointer = (void *)&real_time; /* This object is required if the capabilities bit 2 is set to 1 */ if (gcp_return_value & (1 << 2)) return method_evaluate_method(fw, METHOD_MANDATORY, "_SRT", &arg0, 1, fwts_method_test_integer_return, NULL); else return method_evaluate_method(fw, METHOD_OPTIONAL, "_SRT", &arg0, 1, fwts_method_test_integer_return, NULL); } static int method_test_GWS(fwts_framework *fw) { uint64_t mask = ~0x3; ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; /* DC timer */ /* This object is required if the capabilities bit 0 is set to 1 */ if (gcp_return_value & 1) return method_evaluate_method(fw, METHOD_MANDATORY, "_GWS", arg, 1, fwts_method_test_integer_reserved_bits_return, &mask); else return method_evaluate_method(fw, METHOD_OPTIONAL, "_GWS", arg, 1, fwts_method_test_integer_reserved_bits_return, &mask); } static void method_test_CWS_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; if (obj->Integer.Value != 0 && obj->Integer.Value != 1) fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_CWSInvalidInteger", "%s returned %" PRIu64 ", should be 0 or 1.", name, (uint64_t)obj->Integer.Value); else fwts_method_passed_sane_uint64(fw, name, obj->Integer.Value); } static int method_test_CWS(fwts_framework *fw) { ACPI_OBJECT arg[1]; int i, ret; arg[0].Type = ACPI_TYPE_INTEGER; for (i = 0; i < 2; i++) { arg[0].Integer.Value = i; /* This object is required if the capabilities bit 0 is set to 1 */ if (gcp_return_value & 1) ret = method_evaluate_method(fw, METHOD_MANDATORY, "_CWS", arg, 1, method_test_CWS_return, NULL); else ret = method_evaluate_method(fw, METHOD_OPTIONAL, "_CWS", arg, 1, method_test_CWS_return, NULL); if (ret != FWTS_OK) break; } return ret; } static int method_test_STP(fwts_framework *fw) { ACPI_OBJECT arg[2]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; /* DC timer */ arg[1].Type = ACPI_TYPE_INTEGER; arg[1].Integer.Value = 0; /* wake up instantly */ /* This object is required if the capabilities bit 0 is set to 1 */ if (gcp_return_value & 1) return method_evaluate_method(fw, METHOD_MANDATORY, "_STP", arg, 2, fwts_method_test_passed_failed_return, "_STP"); else return method_evaluate_method(fw, METHOD_OPTIONAL, "_STP", arg, 2, fwts_method_test_passed_failed_return, "_STP"); } static int method_test_STV(fwts_framework *fw) { ACPI_OBJECT arg[2]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; /* DC timer */ arg[1].Type = ACPI_TYPE_INTEGER; arg[1].Integer.Value = 100; /* timer value */ /* This object is required if the capabilities bit 0 is set to 1 */ if (gcp_return_value & 1) return method_evaluate_method(fw, METHOD_MANDATORY, "_STV", arg, 2, fwts_method_test_passed_failed_return, "_STV"); else return method_evaluate_method(fw, METHOD_OPTIONAL, "_STV", arg, 2, fwts_method_test_passed_failed_return, "_STV"); } static int method_test_TIP(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; /* DC timer */ /* This object is required if the capabilities bit 0 is set to 1 */ if (gcp_return_value & 1) return method_evaluate_method(fw, METHOD_MANDATORY, "_TIP", arg, 1, fwts_method_test_integer_return, NULL); else return method_evaluate_method(fw, METHOD_OPTIONAL, "_TIP", arg, 1, fwts_method_test_integer_return, NULL); } static int method_test_TIV(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; /* DC timer */ /* This object is required if the capabilities bit 0 is set to 1 */ if (gcp_return_value & 1) return method_evaluate_method(fw, METHOD_MANDATORY, "_TIV", arg, 1, fwts_method_test_integer_return, NULL); else return method_evaluate_method(fw, METHOD_OPTIONAL, "_TIV", arg, 1, fwts_method_test_integer_return, NULL); } /* * Section 9.20 NVDIMM Devices */ static int method_test_NBS(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_NBS", NULL, 0, fwts_method_test_NBS_return, NULL); } static int method_test_NCH(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_NCH", NULL, 0, fwts_method_test_NCH_return, NULL); } static int method_test_NIC(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_NIC", NULL, 0, fwts_method_test_NIC_return, NULL); } static int method_test_NIH(fwts_framework *fw) { ACPI_OBJECT arg0; char data[64]; int result; int i, j; memset(data, 0, sizeof(data)); arg0.Type = ACPI_TYPE_BUFFER; arg0.Buffer.Length = 64; arg0.Buffer.Pointer = (void *)data; /* not permanent (j = 0) and permanent (j = 1) errors */ for (j = 0; j <= 1; j++) { /* inject (i = 1) and clear (i = 2) errors */ for (i = 1; i <= 2; i++) { data[0] = i; data[4] = 3; data[5] = 7; data[6] = 7; data[8] = j; result = method_evaluate_method(fw, METHOD_OPTIONAL, "_NIH", &arg0, 1, fwts_method_test_NIH_return, NULL); if (result != FWTS_OK) return result; } } return FWTS_OK; } static int method_test_NIG(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_NIG", NULL, 0, fwts_method_test_NIG_return, NULL); } /* * Section 10.1 Smart Battery */ static void method_test_SBS_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { static const char *sbs_info[] = { "Maximum 1 Smart Battery, system manager/selector not present", "Maximum 1 Smart Battery, system manager/selector present", "Maximum 2 Smart Batteries, system manager/selector present", "Maximum 3 Smart Batteries, system manager/selector present", "Maximum 4 Smart Batteries, system manager/selector present" }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; switch (obj->Integer.Value) { case 0 ... 4: fwts_passed(fw, "%s correctly returned value %" PRIu64 " %s", name, (uint64_t)obj->Integer.Value, sbs_info[obj->Integer.Value]); break; default: fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_SBSReturn", "%s returned %" PRIu64 ", should be between 0 and 4.", name, (uint64_t)obj->Integer.Value); fwts_advice(fw, "Smart Battery %s is incorrectly informing " "the OS about the smart battery " "configuration. This is a bug and needs to be " "fixed.", name); break; } } static int method_test_SBS(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_MOBILE, "_SBS", NULL, 0, method_test_SBS_return, NULL); } /* * Section 10.2 Battery Control Methods */ static int method_test_BCT(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 50; /* 50% */ /* * For now, just check that we get some integer back, values * can be 0x00000000, 0x00000001-0xfffffffe and 0xffffffff, * so anything is valid as long as it is an integer */ return method_evaluate_method(fw, METHOD_MOBILE, "_BCT", arg, 1, fwts_method_test_integer_return, NULL); } static int method_test_BIF(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_MOBILE, "_BIF", NULL, 0, fwts_method_test_BIF_return, NULL); } static int method_test_BIX(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_MOBILE, "_BIX", NULL, 0, fwts_method_test_BIX_return, NULL); } static int method_test_BMA(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; return method_evaluate_method(fw, METHOD_MOBILE, "_BMA", arg, 1, fwts_method_test_passed_failed_return, "_BMA"); } static int method_test_BMS(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; return method_evaluate_method(fw, METHOD_MOBILE, "_BMS", arg, 1, fwts_method_test_passed_failed_return, "_BMS"); } static int method_test_BPC(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_BPC", NULL, 0, fwts_method_test_BPC_return, NULL); } static int method_test_BPS(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_BPS", NULL, 0, fwts_method_test_BPS_return, NULL); } static int method_test_BPT(fwts_framework *fw) { ACPI_OBJECT arg[3]; uint64_t max = 5; int i; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 1; arg[2].Type = ACPI_TYPE_INTEGER; arg[2].Integer.Value = 0; for (i = 0; i <= 2; i++) { arg[1].Type = ACPI_TYPE_INTEGER; arg[1].Integer.Value = i; if (method_evaluate_method(fw, METHOD_OPTIONAL, "_BPT", arg, 2, fwts_method_test_integer_max_return, &max) == FWTS_NOT_EXIST) break; fwts_log_nl(fw); } return FWTS_OK; } static int method_test_BST(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_MOBILE, "_BST", NULL, 0, fwts_method_test_BST_return, NULL); } static int method_test_BTP(fwts_framework *fw) { static const int values[] = { 0, 1, 100, 200, 0x7fffffff }; int i; for (i = 0; i < FWTS_ARRAY_SIZE(values); i++) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = values[i]; if (method_evaluate_method(fw, METHOD_MOBILE, "_BTP", arg, 1, fwts_method_test_NULL_return, NULL) == FWTS_NOT_EXIST) break; fwts_log_nl(fw); } return FWTS_OK; } static int method_test_PCL(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_MOBILE, "_PCL", NULL, 0, fwts_method_test_all_reference_package_return, "_PCL"); } static int method_test_BTH(fwts_framework *fw) { ACPI_OBJECT arg[1]; int i, ret; arg[0].Type = ACPI_TYPE_INTEGER; for (i = 0; i <= 100; i++) { arg[0].Integer.Value = i; ret = method_evaluate_method(fw, METHOD_OPTIONAL, "_BTH", arg, 1, fwts_method_test_NULL_return, NULL); if (ret != FWTS_OK) break; } return ret; } static int method_test_BTM(fwts_framework *fw) { static const int values[] = { 0, 1, 100, 200, 0x7fffffff }; int i; for (i = 0; i < FWTS_ARRAY_SIZE(values); i++) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = values[i]; if (method_evaluate_method(fw, METHOD_MOBILE, "_BTM", arg, 1, fwts_method_test_NULL_return, NULL) == FWTS_NOT_EXIST) break; fwts_log_nl(fw); } return FWTS_OK; } static int method_test_BMD(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_MOBILE, "_BMD", NULL, 0, fwts_method_test_BMD_return, NULL); } static int method_test_BMC(fwts_framework *fw) { static const int values[] = { 0, 1, 2, 4, 8}; int i; for (i = 0; i < FWTS_ARRAY_SIZE(values); i++) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = values[i]; if (method_evaluate_method(fw, METHOD_MOBILE, "_BMC", arg, 1, fwts_method_test_NULL_return, NULL) == FWTS_NOT_EXIST) break; fwts_log_nl(fw); } return FWTS_OK; } /* * Section 10.3 AC Adapters and Power Sources Objects */ static int method_test_PRL(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PRL", NULL, 0, fwts_method_test_all_reference_package_return, "_PRL"); } static int method_test_PSR(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PSR", NULL, 0, fwts_method_test_passed_failed_return, "_PSR"); } static void method_test_PIF_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { static const fwts_package_element elements[] = { { ACPI_TYPE_INTEGER, "Power Source State" }, { ACPI_TYPE_INTEGER, "Maximum Output Power" }, { ACPI_TYPE_INTEGER, "Maximum Input Power" }, { ACPI_TYPE_STRING, "Model Number" }, { ACPI_TYPE_STRING, "Serial Number" }, { ACPI_TYPE_STRING, "OEM Information" } }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_count_equal(fw, name, obj, 6) != FWTS_OK) return; if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK) return; fwts_acpi_object_dump(fw, obj); fwts_method_passed_sane(fw, name, "package"); } static int method_test_PIF(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PIF", NULL, 0, method_test_PIF_return, NULL); } /* * Section 10.4 Power Meters */ static int method_test_GAI(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_GAI", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_GHL(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_GHL", NULL, 0, fwts_method_test_integer_return, NULL); } static void method_test_PMC_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool failed = false; ACPI_OBJECT *element; static const fwts_package_element elements[] = { { ACPI_TYPE_INTEGER, "Supported Capabilities" }, { ACPI_TYPE_INTEGER, "Measurement" }, { ACPI_TYPE_INTEGER, "Measurement Type" }, { ACPI_TYPE_INTEGER, "Measurement Accuracy" }, { ACPI_TYPE_INTEGER, "Measurement Sampling Time" }, { ACPI_TYPE_INTEGER, "Minimum Averaging Interval" }, { ACPI_TYPE_INTEGER, "Maximum Averaging Interval" }, { ACPI_TYPE_INTEGER, "Hysteresis Margin" }, { ACPI_TYPE_INTEGER, "Hardware Limit Is Configurable" }, { ACPI_TYPE_INTEGER, "Min Configurable Hardware Limit" }, { ACPI_TYPE_INTEGER, "Max Configurable Hardware Limit" }, { ACPI_TYPE_STRING, "Model Number" }, { ACPI_TYPE_STRING, "Serial Number" }, { ACPI_TYPE_STRING, "OEM Information" }, }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK) return; /* check element's constraints */ element = &obj->Package.Elements[0]; if (element->Integer.Value & 0xFFFFFEF0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_PMCBadElement", "%s element 0 has reserved bits that are non-zero, got " "0x%" PRIx32 " and expected 0 for these field. ", name, (uint32_t) element->Integer.Value); failed = true; } element = &obj->Package.Elements[1]; if (element->Integer.Value != 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_PMCBadElement", "%s element 1 is expected to be 0, got 0x%" PRIx32 ".", name, (uint32_t) element->Integer.Value); failed = true; } element = &obj->Package.Elements[2]; if (element->Integer.Value != 0 && element->Integer.Value != 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_PMCBadElement", "%s element 2 is expected to be 0 or 1, got 0x%" PRIx32 ".", name, (uint32_t) element->Integer.Value); failed = true; } element = &obj->Package.Elements[3]; if (element->Integer.Value > 100000) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_PMCBadElement", "%s element 3 exceeds 100000 (100 percent) = 0x%" PRIx32 ".", name, (uint32_t) element->Integer.Value); failed = true; } /* nothing to check for elements 4~7 */ element = &obj->Package.Elements[8]; if (element->Integer.Value != 0 && element->Integer.Value != 0xFFFFFFFF) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_PMCBadElement", "%s element 8 is expected to be 0 or 1, got 0x%" PRIx32 ".", name, (uint32_t) element->Integer.Value); failed = true; } /* nothing to check for elements 9~13 */ if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_PMC(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PMC", NULL, 0, method_test_PMC_return, NULL); } static int method_test_PMD(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PMD", NULL, 0, fwts_method_test_all_reference_package_return, "_PMD"); } static int method_test_PMM(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PMM", NULL, 0, fwts_method_test_integer_return, NULL); } /* * Section 10.5 Wireless Power Controllers */ static void method_test_WPC_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; if (obj->Integer.Value <= 0x02 || obj->Integer.Value == 0xff) fwts_method_passed_sane(fw, name, "integer"); else fwts_failed(fw, LOG_LEVEL_HIGH, "Method_WPCInvalidInteger", "%s returned an invalid integer 0x%8.8" PRIx64, name, (uint64_t)obj->Integer.Value); } static int method_test_WPC(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_WPC", NULL, 0, method_test_WPC_return, "_WPC"); } static int method_test_WPP(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_WPP", NULL, 0, fwts_method_test_polling_return, NULL); } /* * Section 11.3 Fan Devices */ static int method_test_FIF(fwts_framework *fw) { uint32_t element_size = 4; return method_evaluate_method(fw, METHOD_OPTIONAL, "_FIF", NULL, 0, fwts_method_test_package_integer_return, &element_size); } static void method_test_FPS_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (obj->Package.Elements[0].Type == ACPI_TYPE_INTEGER) { if (fwts_method_test_revision(fw, name, obj->Package.Elements[0].Integer.Value, 0) != FWTS_OK) failed = true; } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_FPSBadReturnType", "%s element 0 is not an integer.", name); failed = true; } /* Could be one or more sub-packages */ for (i = 1; i < obj->Package.Count; i++) { ACPI_OBJECT *pkg; uint32_t j; bool elements_ok = true; if (obj->Package.Elements[i].Type != ACPI_TYPE_PACKAGE) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_FPSBadReturnType", "%s element %" PRIu32 " is not a package.", name, i); failed = true; continue; } pkg = &obj->Package.Elements[i]; if (fwts_method_subpackage_count_equal(fw, name, pkg, i, 5) != FWTS_OK) { failed = true; continue; } for (j = 0; j < 5; j++) { /* TODO - field 0 and 1 can be related to other control method */ if (fwts_method_check_element_type(fw, name, pkg, i, j, ACPI_TYPE_INTEGER)) elements_ok = false; } if (!elements_ok) failed = true; } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_FPS(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_FPS", NULL, 0, method_test_FPS_return, NULL); } static int method_test_FSL(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 50; return method_evaluate_method(fw, METHOD_OPTIONAL, "_FSL", arg, 1, fwts_method_test_NULL_return, NULL); } static int method_test_FST(fwts_framework *fw) { uint32_t element_size = 3; return method_evaluate_method(fw, METHOD_OPTIONAL, "_FST", NULL, 0, fwts_method_test_package_integer_return, &element_size); } /* * Section 11.4 Thermal */ static void method_test_THERM_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { char *method = (char*)private; if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; if (fwts_acpi_region_handler_called_get()) { /* * We accessed some memory or I/O region during the * evaluation which returns spoofed values, so we * should not test the value being returned. In this * case, just pass this as a valid return type. */ fwts_method_passed_sane(fw, name, "return type"); } else { /* * The evaluation probably was a hard-coded value, * so sanity check it */ if (obj->Integer.Value >= 2732) { fwts_passed(fw, "%s correctly returned sane looking " "value 0x%8.8" PRIx64 " (%5.1f degrees K)", method, (uint64_t)obj->Integer.Value, (float)((uint64_t)obj->Integer.Value) / 10.0); } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodBadTemp", "%s returned a dubious value below " "0 degrees C: 0x%8.8" PRIx64 " (%5.1f " "degrees K)", method, (uint64_t)obj->Integer.Value, (float)((uint64_t)obj->Integer.Value) / 10.0); fwts_advice(fw, "The value returned was probably a " "hard-coded thermal value which is " "out of range because fwts did not " "detect any ACPI region handler " "accesses of I/O or system memory " "to evaluate the thermal value. " "It is worth sanity checking these " "values in " "/sys/class/thermal/thermal_zone*."); } } } #define method_test_THERM(name, type) \ static int method_test ## name(fwts_framework *fw) \ { \ fwts_acpi_region_handler_called_set(false); \ return method_evaluate_method(fw, type, # name, \ NULL, 0, method_test_THERM_return, # name); \ } method_test_THERM(_CRT, METHOD_OPTIONAL) method_test_THERM(_CR3, METHOD_OPTIONAL) method_test_THERM(_HOT, METHOD_OPTIONAL) method_test_THERM(_TMP, METHOD_OPTIONAL) method_test_THERM(_NTT, METHOD_OPTIONAL) method_test_THERM(_PSV, METHOD_OPTIONAL) method_test_THERM(_TST, METHOD_OPTIONAL) static void method_test_MTL_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint64_t val; bool failed = false; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; val = (uint64_t) obj->Integer.Value; if (val > 100) { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_MTLBadReturnType", "%s should return a percentage, got %" PRIu64 " instead", name, val); } if (!failed) fwts_method_passed_sane_uint64(fw, name, obj->Integer.Value); return; } static int method_test_MTL(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_MTL", NULL, 0, method_test_MTL_return, NULL); } static void method_test_ART_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (obj->Package.Elements[0].Type == ACPI_TYPE_INTEGER) { if (fwts_method_test_revision(fw, name, obj->Package.Elements[0].Integer.Value, 0) != FWTS_OK) failed = true; } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_ARTBadReturnType", "%s element 0 is not an integer.", name); failed = true; } /* Could be one or more sub-packages */ for (i = 1; i < obj->Package.Count; i++) { ACPI_OBJECT *pkg; uint32_t j; bool elements_ok = true; if (obj->Package.Elements[i].Type != ACPI_TYPE_PACKAGE) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_ARTBadReturnType", "%s element %" PRIu32 " is not a package.", name, i); failed = true; continue; } pkg = &obj->Package.Elements[i]; if (fwts_method_subpackage_count_equal(fw, name, pkg, i, 13) != FWTS_OK) { failed = true; continue; } /* First two elements are references, and rests are integers */ for (j = 0; j < 2; j++) { if (fwts_method_check_element_type(fw, name, pkg, i, j, ACPI_TYPE_LOCAL_REFERENCE)) elements_ok = false; } for (j = 2; j < 13; j++) { if (fwts_method_check_element_type(fw, name, pkg, i, j, ACPI_TYPE_INTEGER)) elements_ok = false; } if (!elements_ok) failed = true; } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_ART(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_ART", NULL, 0, method_test_ART_return, "_ART"); } static int method_test_PSL(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_PSL", NULL, 0, fwts_method_test_all_reference_package_return, "_PSL"); } static void method_test_TRT_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_PACKAGE) != FWTS_OK) return; /* Could be one or more packages */ for (i = 0; i < obj->Package.Count; i++) { ACPI_OBJECT *pkg; uint32_t j; bool elements_ok = true; pkg = &obj->Package.Elements[i]; if (fwts_method_subpackage_count_equal(fw, name, pkg, i, 8) != FWTS_OK) { failed = true; continue; } /* First two elements are references, and rests are integers */ for (j = 0; j < 2; j++) { if (fwts_method_check_element_type(fw, name, pkg, i, j, ACPI_TYPE_LOCAL_REFERENCE)) elements_ok = false; } for (j = 2; j < 8; j++) { if (fwts_method_check_element_type(fw, name, pkg, i, j, ACPI_TYPE_INTEGER)) elements_ok = false; } if (!elements_ok) failed = true; } if (!failed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_TRT(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_TRT", NULL, 0, method_test_TRT_return, "_TRT"); } static int method_test_TSN(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_TSN", NULL, 0, fwts_method_test_reference_return, "_TSN"); } static int method_test_TSP(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_TSP", NULL, 0, fwts_method_test_polling_return, "_TSP"); } static int method_test_TC1(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_TC1", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_TC2(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_TC2", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_TFP(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_TFP", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_ACx(fwts_framework *fw) { int i; for (i = 0; i < 10; i++) { char buffer[6]; snprintf(buffer, sizeof(buffer), "_AC%1d", i); method_evaluate_method(fw, METHOD_OPTIONAL, buffer, NULL, 0, method_test_THERM_return, buffer); fwts_log_nl(fw); } return FWTS_OK; } static int method_test_ALx(fwts_framework *fw) { int i; for (i = 0; i < 10; i++) { char buffer[6]; snprintf(buffer, sizeof(buffer), "_AL%1d", i); method_evaluate_method(fw, METHOD_OPTIONAL, buffer, NULL, 0, fwts_method_test_all_reference_package_return, buffer); fwts_log_nl(fw); } return FWTS_OK; } static int method_test_DTI(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 2732 + 800; /* 80 degrees C */ return method_evaluate_method(fw, METHOD_OPTIONAL, "_DTI", arg, 1, fwts_method_test_NULL_return, NULL); } static int method_test_SCP(fwts_framework *fw) { int i; for (i = 0; i < 2; i++) { ACPI_OBJECT arg[3]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = i; /* Mode */ arg[1].Type = ACPI_TYPE_INTEGER; arg[1].Integer.Value = 5; /* Acoustic limit */ arg[2].Type = ACPI_TYPE_INTEGER; arg[2].Integer.Value = 5; /* Power limit */ if (method_evaluate_method(fw, METHOD_OPTIONAL, "_DTI", arg, 1, fwts_method_test_NULL_return, NULL) == FWTS_NOT_EXIST) break; fwts_log_nl(fw); arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = i; /* Mode */ arg[1].Type = ACPI_TYPE_INTEGER; arg[1].Integer.Value = 1; /* Acoustic limit */ arg[2].Type = ACPI_TYPE_INTEGER; arg[2].Integer.Value = 1; /* Power limit */ if (method_evaluate_method(fw, METHOD_OPTIONAL, "_DTI", arg, 1, fwts_method_test_NULL_return, NULL) == FWTS_NOT_EXIST) break; } return FWTS_OK; } static int method_test_RTV(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_RTV", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_TPT(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 2732 + 900; /* 90 degrees C */ return method_evaluate_method(fw, METHOD_OPTIONAL, "_TPT", arg, 1, fwts_method_test_NULL_return, NULL); } static int method_test_TZD(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_TZD", NULL, 0, fwts_method_test_all_reference_package_return, "_TZD"); } static int method_test_TZM(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_TZM", NULL, 0, fwts_method_test_reference_return, "_TZM"); } static int method_test_TZP(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_TZP", NULL, 0, fwts_method_test_polling_return, "_TZP"); } /* * Section 12 Embedded Controller */ static void method_test_GPE_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); FWTS_UNUSED(buf); static const fwts_package_element elem[] = { { ACPI_TYPE_LOCAL_REFERENCE, "GPE block device" }, { ACPI_TYPE_INTEGER, "SCI interrupt" }, }; switch (obj->Type) { case ACPI_TYPE_INTEGER: if (obj->Integer.Value <= 255) fwts_passed(fw, "%s returned an integer 0x%8.8" PRIx64, name, (uint64_t)obj->Integer.Value); else fwts_failed(fw, LOG_LEVEL_HIGH, "MethodGPEInvalidInteger", "%s returned an invalid integer 0x%8.8" PRIx64, name, (uint64_t)obj->Integer.Value); break; case ACPI_TYPE_PACKAGE: if (fwts_method_package_elements_type(fw, name, obj, elem) == FWTS_OK) fwts_method_passed_sane(fw, name, "package"); break; default: fwts_failed(fw, LOG_LEVEL_HIGH, "Method_GPEBadSubReturnType", "%s did not return an integer or a package.", name); break; } } static int method_test_GPE(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_GPE", NULL, 0, method_test_GPE_return, "_GPE"); } static int method_test_EC_(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_EC_", NULL, 0, fwts_method_test_integer_return, NULL); } /* * Section 16 Waking and Sleeping */ static int method_test_PTS(fwts_framework *fw) { int i; for (i = 1; i < 6; i++) { ACPI_OBJECT arg[1]; char name[6]; snprintf(name, sizeof(name), "_S%1d_", i); if (fwts_acpi_object_exists(name) == NULL) continue; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = i; fwts_log_info(fw, "Test _PTS(%d).", i); method_evaluate_method(fw, METHOD_OPTIONAL, "_PTS", arg, 1, fwts_method_test_NULL_return, NULL); fwts_log_nl(fw); } return FWTS_OK; } static int method_test_TTS(fwts_framework *fw) { if (fwts_acpi_object_exists("_TTS") != NULL) { int i; for (i = 1; i < 6; i++) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = i; fwts_log_info(fw, "Test _TTS(%d) Transition To State S%d.", i, i); if (method_evaluate_method(fw, METHOD_MANDATORY, "_TTS", arg, 1, fwts_method_test_NULL_return, NULL) == FWTS_NOT_EXIST) { fwts_advice(fw, "Could not find _TTS. This method is invoked " "at the beginning of the the sleep transition " "for S1, S2, S3, S4 and S5 shutdown. The Linux " "kernel caters for firmware that does not implement " "_TTS, however, it will issue a warning that this " "control method is missing."); break; } fwts_log_nl(fw); } } else { fwts_skipped(fw, "Optional control method _TTS does not exist."); } return FWTS_OK; } static void method_test_WAK_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { static const fwts_package_element elements[] = { { ACPI_TYPE_INTEGER, "Wake Signal" }, { ACPI_TYPE_INTEGER, "Power Supply S-state" }, }; FWTS_UNUSED(private); FWTS_UNUSED(buf); switch (obj->Type) { case ACPI_TYPE_PACKAGE: if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK) return; fwts_method_passed_sane(fw, name, "package"); break; case ACPI_TYPE_INTEGER: fwts_warning(fw, "In ACPI spec, _WAK shall return a package " "containing two integers; however, Linux " "also accepts an integer for legacy reasons."); fwts_method_passed_sane(fw, name, "integer"); break; default: fwts_failed(fw, LOG_LEVEL_CRITICAL, "MethodReturnBadType", "%s did not return a package or an integer.", name); break; } } static int method_test_WAK(fwts_framework *fw) { uint32_t i; for (i = 1; i < 6; i++) { ACPI_OBJECT arg[1]; char name[6]; snprintf(name, sizeof(name), "_S%1" PRIu32 "_", i); if (fwts_acpi_object_exists(name) == NULL) continue; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = i; fwts_log_info(fw, "Test _WAK(%d) System Wake, State S%d.", i, i); method_evaluate_method(fw, METHOD_OPTIONAL, "_WAK", arg, 1, method_test_WAK_return, &i); fwts_log_nl(fw); } return FWTS_OK; } /* * Appendix B ACPI Extensions for Display Adapters */ static int method_test_DOS(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 0 << 2 | 1; /* * BIOS should toggle active display, BIOS controls brightness of * LCD on AC/DC power changes */ return method_evaluate_method(fw, METHOD_OPTIONAL, "_DOS", arg, 1, fwts_method_test_NULL_return, NULL); } static void method_test_DOD_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; static const char *dod_type[] = { "Other", "VGA, CRT or VESA Compatible Analog Monitor", "TV/HDTV or other Analog-Video Monitor", "External Digital Monitor", "Internal/Integrated Digital Flat Panel", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved" }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; for (i = 0; i < obj->Package.Count; i++) { if (obj->Package.Elements[i].Type != ACPI_TYPE_INTEGER) failed = true; else { uint32_t val = obj->Package.Elements[i].Integer.Value; fwts_log_info_verbatim(fw, "Device %" PRIu32 ":", i); if ((val & 0x80000000)) { fwts_log_info_verbatim(fw, " Video Chip Vendor Scheme %" PRIu32, val); } else { fwts_log_info_verbatim(fw, " Instance: %" PRIu32, val & 0xf); fwts_log_info_verbatim(fw, " Display port attachment: %" PRIu32, (val >> 4) & 0xf); fwts_log_info_verbatim(fw, " Type of display: %" PRIu32 " (%s)", (val >> 8) & 0xf, dod_type[(val >> 8) & 0xf]); fwts_log_info_verbatim(fw, " BIOS can detect device: %" PRIu32, (val >> 16) & 1); fwts_log_info_verbatim(fw, " Non-VGA device: %" PRIu32, (val >> 17) & 1); fwts_log_info_verbatim(fw, " Head or pipe ID: %" PRIu32, (val >> 18) & 0x7); } } } if (failed) fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_DODNoPackage", "Method _DOD did not return a package of " "%" PRIu32 " integers.", obj->Package.Count); else fwts_method_passed_sane(fw, name, "package"); } static int method_test_DOD(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_DOD", NULL, 0, method_test_DOD_return, NULL); } static int method_test_ROM(fwts_framework *fw) { ACPI_OBJECT arg[2]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 0; arg[1].Type = ACPI_TYPE_INTEGER; arg[1].Integer.Value = 4096; return method_evaluate_method(fw, METHOD_OPTIONAL, "_ROM", arg, 2, fwts_method_test_buffer_return, NULL); } static int method_test_GPD(fwts_framework *fw) { uint64_t mask = ~0x3; return method_evaluate_method(fw, METHOD_OPTIONAL, "_GPD", NULL, 0, fwts_method_test_integer_reserved_bits_return, &mask); } static int method_test_SPD(fwts_framework *fw) { ACPI_OBJECT arg[2]; int i; for (i = 0; i < 4; i++) { arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = i; /* bits 00..11, post device */ if (method_evaluate_method(fw, METHOD_OPTIONAL, "_SPD", arg, 1, fwts_method_test_passed_failed_return, NULL) == FWTS_NOT_EXIST) break; } return FWTS_OK; } static int method_test_VPO(fwts_framework *fw) { uint64_t mask = ~0xf; return method_evaluate_method(fw, METHOD_OPTIONAL, "_VPO", NULL, 0, fwts_method_test_integer_reserved_bits_return, &mask); } static int method_test_ADR(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_ADR", NULL, 0, fwts_method_test_integer_return, NULL); } static void method_test_BCL_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; bool ascending_levels = false; char *str = NULL; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_count_min(fw, name, obj, 3) != FWTS_OK) return; if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_INTEGER) != FWTS_OK) return; if (obj->Package.Elements[0].Integer.Value < obj->Package.Elements[1].Integer.Value) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_BCLMaxLevel", "Brightness level when on full " " power (%" PRIu64 ") is less than " "brightness level when on " "battery power (%" PRIu64 ").", (uint64_t)obj->Package.Elements[0].Integer.Value, (uint64_t)obj->Package.Elements[1].Integer.Value); failed = true; } for (i = 2; i < obj->Package.Count - 1; i++) { if (obj->Package.Elements[i].Integer.Value > obj->Package.Elements[i+1].Integer.Value) { fwts_log_info(fw, "Brightness level %" PRIu64 " (index %" PRIu32 ") is greater " "than brightness level %" PRIu64 " (index %" PRIu32 "), should " "be in ascending order.", (uint64_t)obj->Package.Elements[i].Integer.Value, i, (uint64_t)obj->Package.Elements[i+1].Integer.Value, i+1); ascending_levels = true; failed = true; } } if (ascending_levels) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_BCLAscendingOrder", "Some or all of the brightness " "level are not in ascending " "order which should be fixed " "in the firmware."); failed = true; } fwts_log_info(fw, "Brightness levels for %s:" ,name); fwts_log_info_verbatim(fw, " Level on full power : %" PRIu64, (uint64_t)obj->Package.Elements[0].Integer.Value); fwts_log_info_verbatim(fw, " Level on battery power: %" PRIu64, (uint64_t)obj->Package.Elements[1].Integer.Value); for (i = 2; i < obj->Package.Count; i++) { char tmp[12]; snprintf(tmp, sizeof(tmp), "%s%" PRIu64, i == 2 ? "" : ", ", (uint64_t)obj->Package.Elements[i].Integer.Value); str = fwts_realloc_strcat(str, tmp); if (!str) break; } if (str) { fwts_log_info_verbatim(fw, " Brightness Levels : %s", str); free(str); } if (!access("/sys/class/backlight/acpi_video0", R_OK)) { bool matching_levels = false; for (i = 2; i < obj->Package.Count; i++) { if (obj->Package.Elements[0].Integer.Value == obj->Package.Elements[i].Integer.Value) { matching_levels = true; break; } } if (!matching_levels) { failed = true; fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BCLFullNotInList", "brightness level on full power (%" PRIu64 ") is not in brightness levels.", obj->Package.Elements[0].Integer.Value); } matching_levels = false; for (i = 2; i < obj->Package.Count; i++) { if (obj->Package.Elements[1].Integer.Value == obj->Package.Elements[i].Integer.Value) { matching_levels = true; break; } } if (!matching_levels) { failed = true; fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BCLBatteryNotInList", "brightness level on battery (%" PRIu64 ") is not in brightness levels.", obj->Package.Elements[1].Integer.Value); } } if (failed) fwts_advice(fw, "%s seems to be " "misconfigured and is " "returning incorrect " "brightness levels." "It is worth sanity checking " "this with the firmware test " "suite interactive test " "'brightness' to see how " "broken this is. As it is, " "_BCL is broken and needs to " "be fixed.", name); else fwts_passed(fw, "%s returned a sane " "package of %" PRIu32 " integers.", name, obj->Package.Count); } static int method_test_BCL(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_BCL", NULL, 0, method_test_BCL_return, NULL); } static int method_test_BCM(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 0; return method_evaluate_method(fw, METHOD_OPTIONAL, "_BCM", arg, 1, fwts_method_test_NULL_return, NULL); } static int method_test_BQC(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_BQC", NULL, 0, fwts_method_test_integer_return, NULL); } static void method_test_DDC_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t requested = *(uint32_t*)private; FWTS_UNUSED(buf); if (obj == NULL) { fwts_method_failed_null_object(fw, name, "a buffer or integer"); return; } switch (obj->Type) { case ACPI_TYPE_BUFFER: if (requested != obj->Buffer.Length) fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_DDCElementCount", "%s returned a buffer of %" PRIu32 " items, " "expected %" PRIu32 ".", name, obj->Buffer.Length, requested); else fwts_passed(fw, "Method %s returned a buffer of %d items " "as expected.", name, obj->Buffer.Length); break; case ACPI_TYPE_INTEGER: fwts_passed(fw, "%s could not return a buffer of %d " "items and instead returned an error " "status.", name, obj->Buffer.Length); break; default: fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_DDCBadReturnType", "%s did not return a buffer or an integer.", name); break; } } static int method_test_DDC(fwts_framework *fw) { static int values[] = { 128, 256, 384, 512 }; ACPI_OBJECT arg[1]; uint32_t i; for (i = 0; i < FWTS_ARRAY_SIZE(values); i++) { arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = values[i]; if (method_evaluate_method(fw, METHOD_OPTIONAL, "_DDC", arg, 1, method_test_DDC_return, (void *) &values[i]) == FWTS_NOT_EXIST) break; } return FWTS_OK; } static int method_test_DCS(fwts_framework *fw) { uint64_t mask = ~0x1f; return method_evaluate_method(fw, METHOD_OPTIONAL, "_DCS", NULL, 0, fwts_method_test_integer_reserved_bits_return, &mask); } static int method_test_DGS(fwts_framework *fw) { uint64_t mask = ~0x1; return method_evaluate_method(fw, METHOD_OPTIONAL, "_DGS", NULL, 0, fwts_method_test_integer_reserved_bits_return, &mask); } static int method_test_DSS(fwts_framework *fw) { ACPI_OBJECT arg[1]; arg[0].Type = ACPI_TYPE_INTEGER; arg[0].Integer.Value = 0; return method_evaluate_method(fw, METHOD_OPTIONAL, "_DSS", arg, 1, fwts_method_test_NULL_return, NULL); } static int method_test_CBA(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_CBA", NULL, 0, fwts_method_test_integer_return, NULL); } static void method_test_CBR_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t version, length; bool passed = true; static const fwts_package_element elements[] = { { ACPI_TYPE_INTEGER, "Version," }, { ACPI_TYPE_INTEGER, "Base" }, { ACPI_TYPE_INTEGER, "Length" } }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK) return; version = obj->Package.Elements[0].Integer.Value; length = obj->Package.Elements[2].Integer.Value; switch (version) { case 0: if (length != 0x2000) /* 8 KB */ fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_CBRLength", "CXL 1.1 expects length of 8KB (0x2000), got 0x%" PRIx32 , length); break; case 1: if (length != 0x10000) /* 64 KB */ fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_CBRLength", "CXL 2.0 expects length of 64KB (0x10000), got 0x%" PRIx32 , length); break; default: fwts_failed(fw, LOG_LEVEL_HIGH, "Method_CBRBadVersion", "Expecting 0 or 1, got 0x%" PRIx8 , version); break; } if (passed) fwts_method_passed_sane(fw, name, "package"); } static int method_test_CBR(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_CBR", NULL, 0, method_test_CBR_return, NULL); } static int method_test_CDM(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_CDM", NULL, 0, fwts_method_test_integer_return, NULL); } /* * Intelligent Platform Management Interface (IPMI) Specification */ static int method_test_IFT(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_IFT", NULL, 0, fwts_method_test_integer_return, NULL); } static int method_test_SRV(fwts_framework *fw) { return method_evaluate_method(fw, METHOD_OPTIONAL, "_SRV", NULL, 0, fwts_method_test_integer_return, NULL); } /* * Tests */ static fwts_framework_minor_test method_tests[] = { { method_name_check, "Test Method Names." }, /* Section 5.3 */ /* { method_test_PR , "Test _PR (Processor)." }, */ /* Section 5.6 ACPI Event Programming Model */ /* { method_test_Wxx, "Test _Wxx (Wake Event)." }, */ { method_test_AEI, "Test _AEI." }, { method_test_EVT, "Test _EVT (Event Method)." }, /* Section 5.7 Predefined Objects */ { method_test_DLM, "Test _DLM (Device Lock Mutex)." }, /* { method_test_GL , "Test _GL (Global Lock)." }, */ /* { method_test_OS , "Test _OS (Operating System)." }, */ /* { method_test_REV, "Test _REV (Revision)." }, */ /* Section 5.8 System Configuration Objects */ { method_test_PIC, "Test _PIC (Inform AML of Interrupt Model)." }, /* Section 6.1 Device Identification Objects */ { method_test_CID, "Test _CID (Compatible ID)." }, { method_test_CLS, "Test _CLS (Class Code)." }, { method_test_DDN, "Test _DDN (DOS Device Name)." }, { method_test_HID, "Test _HID (Hardware ID)." }, { method_test_HRV, "Test _HRV (Hardware Revision Number)." }, { method_test_MLS, "Test _MLS (Multiple Language String)." }, { method_test_PLD, "Test _PLD (Physical Device Location)." }, { method_test_SUB, "Test _SUB (Subsystem ID)." }, { method_test_SUN, "Test _SUN (Slot User Number)." }, { method_test_STR, "Test _STR (String)." }, { method_test_UID, "Test _UID (Unique ID)." }, /* Section 6.2 Device Configurations Objects */ { method_test_CDM, "Test _CDM (Clock Domain)." }, { method_test_CRS, "Test _CRS (Current Resource Settings)." }, { method_test_DSD, "Test _DSD (Device Specific Data)." }, { method_test_DIS, "Test _DIS (Disable)." }, { method_test_DMA, "Test _DMA (Direct Memory Access)." }, { method_test_FIX, "Test _FIX (Fixed Register Resource Provider)." }, { method_test_GSB, "Test _GSB (Global System Interrupt Base)." }, { method_test_HPP, "Test _HPP (Hot Plug Parameters)." }, /* { method_test_HPX, "Test _HPX (Hot Plug Extensions)." }, */ { method_test_MAT, "Test _MAT (Multiple APIC Table Entry)." }, { method_test_PRS, "Test _PRS (Possible Resource Settings)." }, { method_test_PRT, "Test _PRT (PCI Routing Table)." }, { method_test_PXM, "Test _PXM (Proximity)." }, { method_test_SLI, "Test _SLI (System Locality Information)." }, /* { method_test_SRS, "Test _SRS (Set Resource Settings)." }, */ { method_test_CCA, "Test _CCA (Cache Coherency Attribute)." }, /* Section 6.3 Device Insertion, Removal and Status Objects */ { method_test_EDL, "Test _EDL (Eject Device List)." }, { method_test_EJD, "Test _EJD (Ejection Dependent Device)." }, { method_test_EJ0, "Test _EJ0 (Eject)." }, { method_test_EJ1, "Test _EJ1 (Eject)." }, { method_test_EJ2, "Test _EJ2 (Eject)." }, { method_test_EJ3, "Test _EJ3 (Eject)." }, { method_test_EJ4, "Test _EJ4 (Eject)." }, { method_test_LCK, "Test _LCK (Lock)." }, /* { method_test_OST, "Test _OST (OSPM Status Indication)." }, */ { method_test_RMV, "Test _RMV (Remove)." }, { method_test_STA, "Test _STA (Status)." }, /* Section 6.4 Resource Data Types for ACPI */ /* Section 6.5 Other Objects and Controls */ { method_test_DEP, "Test _DEP (Operational Region Dependencies)." }, { method_test_FIT, "Test _FIT (Firmware Interface Table)." }, { method_test_BDN, "Test _BDN (BIOS Dock Name)." }, { method_test_BBN, "Test _BBN (Base Bus Number)." }, { method_test_DCK, "Test _DCK (Dock)." }, { method_test_INI, "Test _INI (Initialize)." }, { method_test_GLK, "Test _GLK (Global Lock)." }, /* { method_test_REG, "Test _REG (Region)." }, */ { method_test_SEG, "Test _SEG (Segment)." }, /* Section 6.5.10 NVDIMM Label Methods */ { method_test_LSI, "Test _LSI (Label Storage Information)." }, /* Section 6.5.10 CXL Host Bridge Register Info */ { method_test_CBR, "Test _CBR (CXL Host Bridge Register)." }, /* Section 7.1 Declaring a Power Resource Object */ { method_test_OFF, "Test _OFF (Set resource off)." }, { method_test_ON_, "Test _ON_ (Set resource on)." }, /* Section 7.2 Device Power Management Objects */ { method_test_DSW, "Test _DSW (Device Sleep Wake)." }, { method_test_IRC, "Test _IRC (In Rush Current)." }, { method_test_PRE, "Test _PRE (Power Resources for Enumeration)." }, { method_test_PR0, "Test _PR0 (Power Resources for D0)." }, { method_test_PR1, "Test _PR1 (Power Resources for D1)." }, { method_test_PR2, "Test _PR2 (Power Resources for D2)." }, { method_test_PR3, "Test _PR3 (Power Resources for D3)." }, { method_test_PRW, "Test _PRW (Power Resources for Wake)." }, { method_test_PS0, "Test _PS0 (Power State 0)." }, { method_test_PS1, "Test _PS1 (Power State 1)." }, { method_test_PS2, "Test _PS2 (Power State 2)." }, { method_test_PS3, "Test _PS3 (Power State 3)." }, { method_test_PSC, "Test _PSC (Power State Current)." }, { method_test_PSE, "Test _PSE (Power State for Enumeration)." }, { method_test_PSW, "Test _PSW (Power State Wake)." }, { method_test_S1D, "Test _S1D (S1 Device State)." }, { method_test_S2D, "Test _S2D (S2 Device State)." }, { method_test_S3D, "Test _S3D (S3 Device State)." }, { method_test_S4D, "Test _S4D (S4 Device State)." }, { method_test_S0W, "Test _S0W (S0 Device Wake State)." }, { method_test_S1W, "Test _S1W (S1 Device Wake State)." }, { method_test_S2W, "Test _S2W (S2 Device Wake State)." }, { method_test_S3W, "Test _S3W (S3 Device Wake State)." }, { method_test_S4W, "Test _S4W (S4 Device Wake State)." }, { method_test_RST, "Test _RST (Device Reset)." }, { method_test_PRR, "Test _PRR (Power Resource for Reset)." }, { method_test_DSC, "Test _DSC (Deepest State for Configuration)." }, /* Section 7.3 OEM-Supplied System-Level Control Methods */ { method_test_S0_, "Test _S0_ (S0 System State)." }, { method_test_S1_, "Test _S1_ (S1 System State)." }, { method_test_S2_, "Test _S2_ (S2 System State)." }, { method_test_S3_, "Test _S3_ (S3 System State)." }, { method_test_S4_, "Test _S4_ (S4 System State)." }, { method_test_S5_, "Test _S5_ (S5 System State)." }, { method_test_SWS, "Test _SWS (System Wake Source)." }, /* Section 8.4 Declaring Processors */ { method_test_PSS, "Test _PSS (Performance Supported States)." }, { method_test_CPC, "Test _CPC (Continuous Performance Control)." }, { method_test_CSD, "Test _CSD (C State Dependencies)." }, { method_test_CST, "Test _CST (C States)." }, { method_test_PCT, "Test _PCT (Performance Control)." }, /* { method_test_PDC, "Test _PDC (Processor Driver Capabilities)." }, */ { method_test_PDL, "Test _PDL (P-State Depth Limit)." }, { method_test_PPC, "Test _PPC (Performance Present Capabilities)." }, { method_test_PPE, "Test _PPE (Polling for Platform Error)." }, { method_test_PSD, "Test _PSD (Power State Dependencies)." }, { method_test_PTC, "Test _PTC (Processor Throttling Control)." }, { method_test_TDL, "Test _TDL (T-State Depth Limit)." }, { method_test_TPC, "Test _TPC (Throttling Present Capabilities)." }, { method_test_TSD, "Test _TSD (Throttling State Dependencies)." }, { method_test_TSS, "Test _TSS (Throttling Supported States)." }, /* Section 8.4.4 Lower Power Idle States */ { method_test_LPI, "Test _LPI (Low Power Idle States)." }, { method_test_RDI, "Test _RDI (Resource Dependencies for Idle)." }, /* Section 8.5 Processor Aggregator Device */ { method_test_PUR, "Test _PUR (Processor Utilization Request)." }, /* Section 9.1 System Indicators */ { method_test_MSG, "Test _MSG (Message)." }, { method_test_SST, "Test _SST (System Status)." }, /* Section 9.2 Ambient Light Sensor Device */ { method_test_ALC, "Test _ALC (Ambient Light Colour Chromaticity)." }, { method_test_ALI, "Test _ALI (Ambient Light Illuminance)." }, { method_test_ALT, "Test _ALT (Ambient Light Temperature)." }, { method_test_ALP, "Test _ALP (Ambient Light Polling)."}, { method_test_ALR, "Test _ALR (Ambient Light Response)."}, /* Section 9.3 Battery Device */ /* Section 9.4 Lid Device */ { method_test_LID, "Test _LID (Lid Status)." }, /* Section 9.8 ATA Controllers */ { method_test_GTF, "Test _GTF (Get Task File)." }, { method_test_GTM, "Test _GTM (Get Timing Mode)." }, /* { method_test_SDD, "Test _SDD (Set Device Data)." }, */ /* { method_test_STM, "Test _STM (Set Timing Mode)." }, */ /* Section 9.9 Floppy Controllers */ /* { method_test_FDE, "Test _FDE (Floppy Disk Enumerate)." }, */ /* { method_test_FDI, "Test _FDI (Floppy Drive Information)." }, */ /* { method_test_FDM, "Test _FDM (Floppy Drive Mode)." }, */ /* Section 9.12 Memory Devices */ { method_test_MBM, "Test _MBM (Memory Bandwidth Monitoring Data)." }, /* { method_test_MSM, "Test _MSM (Memory Set Monitoring)." }, */ /* Section 9.13 USB Port Capabilities */ { method_test_UPC, "Test _UPC (USB Port Capabilities)." }, /* Section 9.13 USB Power Data Object ACPI(6.5)*/ { method_test_PDO, "Test _PDO (USB Power Data Object)." }, /* Section 9.14 Device Object Name Collision */ /* { method_test_DSM, "Test _DSM (Device Specific Method)." }, */ /* Section 9.16 User Presence Detection Device */ { method_test_UPD, "Test _UPD (User Presence Detect)." }, { method_test_UPP, "Test _UPP (User Presence Polling)." }, /* Section 9.18 Wake Alarm Device */ { method_test_GCP, "Test _GCP (Get Capabilities)." }, { method_test_GRT, "Test _GRT (Get Real Time)." }, { method_test_GWS, "Test _GWS (Get Wake Status)." }, { method_test_CWS, "Test _CWS (Clear Wake Status)." }, { method_test_SRT, "Test _SRT (Set Real Time)." }, { method_test_STP, "Test _STP (Set Expired Timer Wake Policy)." }, { method_test_STV, "Test _STV (Set Timer Value)." }, { method_test_TIP, "Test _TIP (Expired Timer Wake Policy)." }, { method_test_TIV, "Test _TIV (Timer Values)." }, /* Section 9.20 NVDIMM Devices */ { method_test_NBS, "Test _NBS (NVDIMM Boot Status)." }, { method_test_NCH, "Test _NCH (NVDIMM Current Health Information)." }, { method_test_NIC, "Test _NIC (NVDIMM Health Error Injection Capabilities)." }, { method_test_NIH, "Test _NIH (NVDIMM Inject/Clear Health Errors)." }, { method_test_NIG, "Test _NIG (NVDIMM Inject Health Error Status)." }, /* Section 10.1 Smart Battery */ { method_test_SBS, "Test _SBS (Smart Battery Subsystem)." }, /* Section 10.2 Battery Controls */ { method_test_BCT, "Test _BCT (Battery Charge Time)." }, { method_test_BIF, "Test _BIF (Battery Information)." }, { method_test_BIX, "Test _BIX (Battery Information Extended)." }, { method_test_BMA, "Test _BMA (Battery Measurement Averaging)." }, { method_test_BMC, "Test _BMC (Battery Maintenance Control)." }, { method_test_BMD, "Test _BMD (Battery Maintenance Data)." }, { method_test_BMS, "Test _BMS (Battery Measurement Sampling Time)." }, { method_test_BPC, "Test _BPC (Battery Power Characteristics)." }, { method_test_BPS, "Test _BPS (Battery Power State)." }, { method_test_BPT, "Test _BPT (Battery Power Threshold)." }, { method_test_BST, "Test _BST (Battery Status)." }, { method_test_BTP, "Test _BTP (Battery Trip Point)." }, { method_test_BTH, "Test _BTH (Battery Throttle Limit)." }, { method_test_BTM, "Test _BTM (Battery Time)." }, /* { method_test_BLT, "Test _BLT (Battery Level Threshold)." }, */ /* Section 10.3 AC Adapters and Power Source Objects */ { method_test_PCL, "Test _PCL (Power Consumer List)." }, { method_test_PIF, "Test _PIF (Power Source Information)." }, { method_test_PRL, "Test _PRL (Power Source Redundancy List)." }, { method_test_PSR, "Test _PSR (Power Source)." }, /* Section 10.4 Power Meters */ { method_test_GAI, "Test _GAI (Get Averaging Level)." }, { method_test_GHL, "Test _GHL (Get Hardware Limit)." }, /* { method_test_PAI, "Test _PAI (Power Averaging Interval)." }, */ { method_test_PMC, "Test _PMC (Power Meter Capabilities)." }, { method_test_PMD, "Test _PMD (Power Meter Devices)." }, { method_test_PMM, "Test _PMM (Power Meter Measurement)." }, /* { method_test_PTP, "Test _PTP (Power Trip Points)." }, */ /* { method_test_SHL, "Test _SHL (Set Hardware Limit)." }, */ /* Section 10.5 Wireless Power Controllers */ { method_test_WPC, "Test _WPC (Wireless Power Calibration)." }, { method_test_WPP, "Test _WPP (Wireless Power Polling)." }, /* Section 11.3 Fan Devices */ { method_test_FIF, "Test _FIF (Fan Information)." }, { method_test_FPS, "Test _FPS (Fan Performance States)." }, { method_test_FSL, "Test _FSL (Fan Set Level)." }, { method_test_FST, "Test _FST (Fan Status)." }, /* Section 11.4 Thermal Objects */ { method_test_ACx, "Test _ACx (Active Cooling)." }, { method_test_ART, "Test _ART (Active Cooling Relationship Table)." }, { method_test_ALx, "Test _ALx (Active List)." }, { method_test_CRT, "Test _CRT (Critical Trip Point)." }, { method_test_CR3, "Test _CR3 (Warm/Standby Temperature)." }, { method_test_DTI, "Test _DTI (Device Temperature Indication)." }, { method_test_HOT, "Test _HOT (Hot Temperature)." }, { method_test_MTL, "Test _MTL (Minimum Throttle Limit)." }, { method_test_NTT, "Test _NTT (Notification Temp Threshold)." }, { method_test_PSL, "Test _PSL (Passive List)." }, { method_test_PSV, "Test _PSV (Passive Temp)." }, { method_test_RTV, "Test _RTV (Relative Temp Values)." }, { method_test_SCP, "Test _SCP (Set Cooling Policy)." }, { method_test_TC1, "Test _TC1 (Thermal Constant 1)." }, { method_test_TC2, "Test _TC2 (Thermal Constant 2)." }, { method_test_TFP, "Test _TFP (Thermal fast Sampling Period)." }, { method_test_TMP, "Test _TMP (Thermal Zone Current Temp)." }, { method_test_TPT, "Test _TPT (Trip Point Temperature)." }, { method_test_TRT, "Test _TRT (Thermal Relationship Table)." }, { method_test_TSN, "Test _TSN (Thermal Sensor Device)." }, { method_test_TSP, "Test _TSP (Thermal Sampling Period)." }, { method_test_TST, "Test _TST (Temperature Sensor Threshold)." }, { method_test_TZD, "Test _TZD (Thermal Zone Devices)." }, { method_test_TZM, "Test _TZM (Thermal Zone member)." }, { method_test_TZP, "Test _TZP (Thermal Zone Polling)." }, /* Section 12 Embedded Controller Interface */ { method_test_GPE, "Test _GPE (General Purpose Events)." }, { method_test_EC_, "Test _EC_ (EC Offset Query)." }, /* Section 16 Waking and Sleeping */ { method_test_PTS, "Test _PTS (Prepare to Sleep)." }, { method_test_TTS, "Test _TTS (Transition to State)." }, { method_test_WAK, "Test _WAK (System Wake)." }, /* Appendix B, ACPI Extensions for Display Adapters */ { method_test_ADR, "Test _ADR (Return Unique ID for Device)." }, { method_test_BCL, "Test _BCL (Query List of Brightness Control Levels Supported)." }, { method_test_BCM, "Test _BCM (Set Brightness Level)." }, { method_test_BQC, "Test _BQC (Brightness Query Current Level)." }, { method_test_DCS, "Test _DCS (Return the Status of Output Device)." }, { method_test_DDC, "Test _DDC (Return the EDID for this Device)." }, { method_test_DSS, "Test _DSS (Device Set State)." }, { method_test_DGS, "Test _DGS (Query Graphics State)." }, { method_test_DOD, "Test _DOD (Enumerate All Devices Attached to Display Adapter)." }, { method_test_DOS, "Test _DOS (Enable/Disable Output Switching)." }, { method_test_GPD, "Test _GPD (Get POST Device)." }, { method_test_ROM, "Test _ROM (Get ROM Data)." }, { method_test_SPD, "Test _SPD (Set POST Device)." }, { method_test_VPO, "Test _VPO (Video POST Options)." }, /* From PCI Specification */ { method_test_CBA, "Test _CBA (Configuration Base Address)." }, /* From IPMI Specification 2.0 */ { method_test_IFT, "Test _IFT (IPMI Interface Type)." }, { method_test_SRV, "Test _SRV (IPMI Interface Revision)." }, /* End! */ { NULL, NULL } }; static fwts_framework_ops method_ops = { .description = "ACPI DSDT Method Semantic tests.", .init = method_init, .deinit = method_deinit, .minor_tests = method_tests }; FWTS_REGISTER("method", &method_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI | FWTS_FLAG_SBBR) #endif src/acpi/misc/000077500000000000000000000000001465205512700135235ustar00rootroot00000000000000src/acpi/misc/misc.c000066400000000000000000000050051465205512700146220ustar00rootroot00000000000000/* * Copyright (C) 2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(MISC, &table) static int misc_test1(fwts_framework *fw) { fwts_acpi_misc_guided_entry *entry; bool passed = true; uint32_t offset; offset = sizeof(fwts_acpi_table_misc); entry = (fwts_acpi_misc_guided_entry *)(table->data + offset); while (offset < table->length) { char guid_str[37]; if (fwts_acpi_structure_length_zero(fw, "MISC", entry->entry_len, offset)) { passed = false; break; } if ((offset + entry->entry_len) > table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "MISCOutOfRangeOffset", "MISC GUIDed Entry Offset is out of range."); passed = false; break; } fwts_log_info_verbatim(fw, "Miscellaneous GUIDed Table Entries:"); fwts_guid_buf_to_str(entry->entry_guid, guid_str, sizeof(guid_str)); fwts_log_info_verbatim(fw, " Entry GUID ID: %s", guid_str); fwts_log_info_simp_int(fw, " Entry Length: ", entry->entry_len); fwts_log_info_simp_int(fw, " Revision: ", entry->revision); fwts_log_info_simp_int(fw, " Producer ID: ", entry->producer_id); fwts_log_info_verbatim(fw, " Data:"); fwts_hexdump_data_prefix_all(fw, entry->data, " ", (entry->entry_len - sizeof(fwts_acpi_misc_guided_entry))); /* Nothing else need to be checked currently */ offset += entry->entry_len; entry = (fwts_acpi_misc_guided_entry *)(table->data + offset); fwts_log_nl(fw); } if (passed) fwts_passed(fw, "No issues found in MISC table."); return FWTS_OK; } static fwts_framework_minor_test misc_tests[] = { { misc_test1, "Validate MISC table." }, { NULL, NULL } }; static fwts_framework_ops misc_ops = { .description = "MISC Miscellaneous GUIDed Table Entries test.", .init = MISC_init, .minor_tests = misc_tests }; FWTS_REGISTER("misc", &misc_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/mpam/000077500000000000000000000000001465205512700135225ustar00rootroot00000000000000src/acpi/mpam/mpam.c000066400000000000000000000220121465205512700146150ustar00rootroot00000000000000/* * Copyright (C) 2023-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(MPAM, &table) static int mpam_test1(fwts_framework *fw) { fwts_acpi_mpam_msc_node *node; bool passed = true; uint32_t offset; fwts_log_info_verbatim(fw, "MPAM Memory System Resource Partitioning And Monitoring Table:"); offset = sizeof(fwts_acpi_table_mpam); node = (fwts_acpi_mpam_msc_node *)(table->data + offset); while (offset < table->length) { if (fwts_acpi_structure_length_zero(fw, "MPAM", node->length, offset)) { passed = false; break; } fwts_log_info_verbatim(fw, "MPAM MSC node:"); fwts_log_info_simp_int(fw, " Length: ", node->length); fwts_log_info_simp_int(fw, " Interface type: ", node->interface_type); fwts_log_info_simp_int(fw, " Reserved: ", node->reserved); fwts_log_info_simp_int(fw, " Identifier: ", node->identifier); fwts_log_info_simp_int(fw, " Base address: ", node->base_address); fwts_log_info_simp_int(fw, " MMIO size: ", node->mmio_size); fwts_log_info_simp_int(fw, " Overflow interrupt: ", node->overflow_interrupt); fwts_log_info_simp_int(fw, " Overflow interrupt flags: ", node->overflow_interrupt_flags); fwts_log_info_simp_int(fw, " Reserved1: ", node->reserved1); fwts_log_info_simp_int(fw, " Overflow interrupt affinity: ", node->overflow_interrupt_affinity); fwts_log_info_simp_int(fw, " Error interrupt: ", node->error_interrupt); fwts_log_info_simp_int(fw, " Error interrupt flags: ", node->error_interrupt_flags); fwts_log_info_simp_int(fw, " Reserved2: ", node->reserved2); fwts_log_info_simp_int(fw, " Error interrupt affinity: ", node->error_interrupt_affinity); fwts_log_info_simp_int(fw, " MAX_NRDY_USEC: ", node->max_nrdy_usec); fwts_log_info_simp_int(fw, " Hardware ID of linked device: ", node->hardware_id_linked_device); fwts_log_info_simp_int(fw, " Instance ID of linked device: ", node->instance_id_linked_device); fwts_log_info_simp_int(fw, " Number of resource nodes: ", node->num_resouce_nodes); if (node->interface_type != 0 && node->interface_type != 0x0a) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "MPAMBadInterfaceType", "MPAM MSC node interface type must have value with 0 or 0x0a, got " "0x%2.2" PRIx8 " instead", node->interface_type); } fwts_acpi_reserved_zero("MPAM", "Reserved", node->reserved, &passed); fwts_acpi_reserved_bits("MPAM", "Overflow interrupt flags", node->overflow_interrupt_flags, 1, 2, &passed); fwts_acpi_reserved_bits("MPAM", "Overflow interrupt flags", node->overflow_interrupt_flags, 5, 31, &passed); fwts_acpi_reserved_zero("MPAM", "Reserved1", node->reserved1, &passed); fwts_acpi_reserved_bits("MPAM", "Error interrupt flags", node->error_interrupt_flags, 1, 2, &passed); fwts_acpi_reserved_bits("MPAM", "Error interrupt flags", node->error_interrupt_flags, 5, 31, &passed); fwts_acpi_reserved_zero("MPAM", "Reserved2", node->reserved2, &passed); uint32_t msc_offset = sizeof(fwts_acpi_mpam_msc_node); for (uint32_t i = 0; i < node->num_resouce_nodes; i++) { fwts_acpi_mpam_resource_node *res_node = (fwts_acpi_mpam_resource_node *)(table->data + offset + msc_offset); fwts_log_info_verbatim(fw, " List of resource nodes: "); fwts_log_info_simp_int(fw, " Identifier: ", res_node->identifier); fwts_log_info_simp_int(fw, " RIS Index: ", res_node->ris_index); fwts_log_info_simp_int(fw, " Reserved1: ", res_node->reserved1); fwts_log_info_simp_int(fw, " Locator type: ", res_node->locator_type); fwts_log_info_verbatim(fw, " Locator:"); fwts_interconnect_locator_descriptor *intc_loc_des = NULL; fwts_interconnect_descriptor_table *intc_des_table = NULL; switch(res_node->locator_type) { case FWTS_MPAM_PROCESSOR_CACHE: fwts_log_info_verbatim(fw, " Processor cache locator:"); fwts_hexdump_data_prefix_all(fw, res_node->locator, " ", sizeof(res_node->locator)); fwts_acpi_reserved_zero_array(fw, "MPAM", "Locator", res_node->locator + 8, 4, &passed); break; case FWTS_MPAM_MEMORY: fwts_log_info_verbatim(fw, " Memory locator:"); fwts_hexdump_data_prefix_all(fw, res_node->locator, " ", sizeof(res_node->locator)); fwts_acpi_reserved_zero_array(fw, "MPAM", "Locator", res_node->locator + 8, 4, &passed); break; case FWTS_MPAM_SMMU: fwts_log_info_verbatim(fw, " SMMU locator:"); fwts_hexdump_data_prefix_all(fw, res_node->locator, " ", sizeof(res_node->locator)); fwts_acpi_reserved_zero_array(fw, "MPAM", "Locator", res_node->locator + 8, 4, &passed); break; case FWTS_MPAM_MEMORY_CACHE: fwts_log_info_verbatim(fw, " Memory-side cache locator:"); fwts_hexdump_data_prefix_all(fw, res_node->locator, " ", sizeof(res_node->locator)); fwts_acpi_reserved_zero_array(fw, "MPAM", "Locator", res_node->locator, 7, &passed); break; case FWTS_MPAM_ACPI_DEVICE: fwts_log_info_verbatim(fw, " ACPI device locator:"); fwts_hexdump_data_prefix_all(fw, res_node->locator, " ", sizeof(res_node->locator)); break; case FWTS_MPAM_INTERCONNECT: intc_loc_des = (fwts_interconnect_locator_descriptor *)res_node->locator; intc_des_table = (table->data + intc_loc_des->intc_des_tbl_offset); fwts_log_info_verbatim(fw, " Interconnect locator:"); fwts_hexdump_data_prefix_all(fw, res_node->locator, " ", sizeof(res_node->locator)); fwts_acpi_reserved_zero_array(fw, "MPAM", "Locator", res_node->locator + 8, 4, &passed); fwts_log_info_verbatim(fw, " Interconnect descriptor table:"); fwts_log_info_verbatim(fw, " Signature:"); fwts_hexdump_data_prefix_all(fw, intc_des_table->signature, " ", sizeof(intc_des_table->signature)); fwts_log_info_simp_int(fw, " Number of descriptors: ", intc_des_table->num_of_descriptors); fwts_acpi_reserved_zero_array(fw, "MPAM", "reserved", (uint8_t *)intc_des_table + sizeof(fwts_interconnect_descriptor_table) + 9, 3, &passed); break; case FWTS_MPAM_UNKNOWN: fwts_log_info_verbatim(fw, " Unknown locator:"); fwts_hexdump_data_prefix_all(fw, res_node->locator, " ", sizeof(res_node->locator)); break; default: passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "MPAMBadLocaterType", "MPAM MPAM MSC locator type must not have the value 0x06..0xfe, got " "0x%2.2" PRIx8 "instead", res_node->locator_type); break; } fwts_log_info_simp_int(fw, " Number of functional dependencies: ", res_node->num_functional_deps); fwts_acpi_reserved_zero("MPAM", "Reserved1", res_node->reserved1, &passed); msc_offset += sizeof(fwts_acpi_mpam_resource_node); for (uint32_t j = 0; j < res_node->num_functional_deps; j++) { fwts_acpi_mpam_func_deps *fun_deps = (fwts_acpi_mpam_func_deps *)(table->data + offset + msc_offset); fwts_log_info_verbatim(fw, " Functional dependency descriptor: "); fwts_log_info_simp_int(fw, " Producer: ", fun_deps->producer); fwts_log_info_simp_int(fw, " Reserved: ", fun_deps->reserved); fwts_acpi_reserved_zero("MPAM", "Reserved1", fun_deps->reserved, &passed); msc_offset += sizeof(fwts_acpi_mpam_func_deps); } } if (node->length > msc_offset) { fwts_log_info_verbatim(fw, " Resource-specific data: "); fwts_hexdump_data_prefix_all(fw, (uint8_t *)(table->data + offset + msc_offset), " ", node->length - msc_offset); } offset += node->length; node = (fwts_acpi_mpam_msc_node *)(table->data + offset); fwts_log_nl(fw); } if (passed) fwts_passed(fw, "No issues found in MPAM table."); return FWTS_OK; } static fwts_framework_minor_test mpam_tests[] = { { mpam_test1, "Validate MPAM table." }, { NULL, NULL } }; static fwts_framework_ops mpam_ops = { .description = "MPAM Memory System Resource Partitioning And Monitoring Table test.", .init = MPAM_init, .minor_tests = mpam_tests }; FWTS_REGISTER("mpam", &mpam_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/mpst/000077500000000000000000000000001465205512700135535ustar00rootroot00000000000000src/acpi/mpst/mpst.c000066400000000000000000000174021465205512700147060ustar00rootroot00000000000000/* * Copyright (C) 2016-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(MPST, &table) static int mpst_test1(fwts_framework *fw) { fwts_acpi_table_mpst *mpst = (fwts_acpi_table_mpst*) table->data; fwts_acpi_table_mpst_power_node_list *node_list; fwts_acpi_table_mpst_power_char_list *char_list; bool passed = true; uint32_t reserved; uint32_t node_offset; uint32_t j; uint16_t i; reserved = (uint32_t) mpst->reserved[0] + ((uint32_t) mpst->reserved[1] << 8) + ((uint32_t) mpst->reserved[2] << 16); fwts_log_info_verbatim(fw, "MPST Table:"); fwts_log_info_simp_int(fw, " Communication Channel ID: ", mpst->channel_id); fwts_log_info_simp_int(fw, " Reserved: ", reserved); fwts_acpi_reserved_zero("MPST", "Reserved", reserved, &passed); node_list = (fwts_acpi_table_mpst_power_node_list *) (table->data + sizeof(fwts_acpi_table_mpst)); fwts_log_info_simp_int(fw, " Memory Power Node Count: ", node_list->count); fwts_log_info_simp_int(fw, " Reserved: ", node_list->reserved); fwts_acpi_reserved_zero("MPST", "Reserved", node_list->reserved, &passed); node_offset = sizeof(fwts_acpi_table_mpst) + (sizeof(fwts_acpi_table_mpst_power_node_list)); if (mpst->header.length < node_offset + sizeof(fwts_acpi_table_mpst_power_node) * node_list->count) { fwts_failed(fw, LOG_LEVEL_HIGH, "MPSTOutOfBound", "MPST's table length is too small to contain all sub-tables"); goto error; } for (i = 0; i < node_list->count; i++) { fwts_acpi_table_mpst_power_node *power_node = (fwts_acpi_table_mpst_power_node *) (table->data + node_offset); uint32_t node_length; fwts_log_info_verbatim(fw, " MPST Power Node:"); fwts_log_info_simp_int(fw, " Flags: ", power_node->flags); fwts_log_info_simp_int(fw, " Reserved: ", power_node->reserved); fwts_log_info_simp_int(fw, " Memory Power Node Id: ", power_node->node_id); fwts_log_info_simp_int(fw, " Power Node Length: ", power_node->length); fwts_log_info_simp_int(fw, " Base Address: ", power_node->range_address); fwts_log_info_simp_int(fw, " Memory Length: ", power_node->range_length); fwts_log_info_simp_int(fw, " Number of Power States: ", power_node->num_states); fwts_log_info_simp_int(fw, " Number of Physical Components: ", power_node->num_components); fwts_acpi_reserved_bits("MPST", "Power Node Flags", power_node->flags, 3, 7, &passed); fwts_acpi_reserved_zero("MPST", "Reserved", power_node->reserved, &passed); node_length = sizeof(fwts_acpi_table_mpst_power_node) + sizeof(fwts_acpi_table_mpst_power_state) * power_node->num_states + sizeof(fwts_acpi_table_mpst_component) * power_node->num_components; if (power_node->length != node_length) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "MPSTBadPowerNodeLength", "MPST Power Node Length should be 0x%8.8" PRIx32 ", got " "0x%8.8" PRIx32 " instead", node_length, power_node->length); } node_offset += sizeof(fwts_acpi_table_mpst_power_node); if (mpst->header.length < node_offset + sizeof(fwts_acpi_table_mpst_power_state) * power_node->num_states) { fwts_failed(fw, LOG_LEVEL_HIGH, "MPSTOutOfBound", "MPST's table length is too small to contain all sub-tables"); goto error; } for (j = 0; j < power_node->num_states; j++) { fwts_acpi_table_mpst_power_state *state = (fwts_acpi_table_mpst_power_state *) (table->data + node_offset); fwts_log_info_simp_int(fw, " Power State Value: ", state->value); fwts_log_info_simp_int(fw, " Power State Information Index: ", state->info_index); node_offset += sizeof(fwts_acpi_table_mpst_power_state); } if (mpst->header.length < node_offset + sizeof(fwts_acpi_table_mpst_component) * power_node->num_components) { fwts_failed(fw, LOG_LEVEL_HIGH, "MPSTOutOfBound", "MPST's table length is too small to contain all sub-tables"); goto error; } for (j = 0; j < power_node->num_components; j++) { fwts_acpi_table_mpst_component *component = (fwts_acpi_table_mpst_component *) (table->data + node_offset); fwts_log_info_simp_int(fw, " Physical Component Id: ", component->id); node_offset += sizeof(fwts_acpi_table_mpst_component); } } char_list = (fwts_acpi_table_mpst_power_char_list *) (table->data + node_offset); fwts_log_info_simp_int(fw, " Memory Characteristics Count: ", char_list->count); fwts_log_info_simp_int(fw, " Reserved: ", char_list->reserved); fwts_acpi_reserved_zero("MPST", "Reserved", char_list->reserved, &passed); node_offset += sizeof(fwts_acpi_table_mpst_power_char_list); if (mpst->header.length < node_offset + sizeof(fwts_acpi_table_mpst_power_char) * char_list->count) { fwts_failed(fw, LOG_LEVEL_HIGH, "MPSTOutOfBound", "MPST's table length is too small to contain all sub-tables"); goto error; } for (i = 0; i < char_list->count; i++) { fwts_acpi_table_mpst_power_char *power_char = (fwts_acpi_table_mpst_power_char *) (table->data + node_offset); fwts_log_info_verbatim(fw, " MPST Power Characteristics:"); fwts_log_info_simp_int(fw, " Power State Structure ID: ", power_char->structure_id); fwts_log_info_simp_int(fw, " Flags: ", power_char->flags); fwts_log_info_simp_int(fw, " Reserved: ", power_char->reserved1); fwts_log_info_simp_int(fw, " Average Power Consumed: ", power_char->average_power); fwts_log_info_simp_int(fw, " Relative Power Saving: ", power_char->power_saving); fwts_log_info_simp_int(fw, " Exit Latency: ", power_char->exit_latency); fwts_log_info_simp_int(fw, " Reserved: ", power_char->reserved2); if ((power_char->structure_id & 0x3F) != 1) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "MPSTBadPowerCharacteristicsID", "MPST Power Characteristics ID must be 1, got " "0x%2.2" PRIx8 " instead", power_char->structure_id & 0x3F); } if (((power_char->structure_id & 0xC0) >> 6) != 1) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "MPSTBadPowerCharacteristicsRevision", "MPST Power Characteristics Revision must be 1, got " "0x%2.2" PRIx8 " instead", (power_char->structure_id & 0xC0) >> 6); } fwts_acpi_reserved_bits("MPST", "Power Characteristics Flags", power_char->flags, 3, 7, &passed); fwts_acpi_reserved_zero("MPST", "Reserved1", power_char->reserved1, &passed); fwts_acpi_reserved_zero("MPST", "Reserved2", power_char->reserved2, &passed); node_offset += sizeof(fwts_acpi_table_mpst_power_char); } fwts_log_nl(fw); if (passed) fwts_passed(fw, "No issues found in MPST table."); error: return FWTS_OK; } static fwts_framework_minor_test mpst_tests[] = { { mpst_test1, "Validate MPST table." }, { NULL, NULL } }; static fwts_framework_ops mpst_ops = { .description = "MPST Memory Power State Table test.", .init = MPST_init, .minor_tests = mpst_tests }; FWTS_REGISTER("mpst", &mpst_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/msct/000077500000000000000000000000001465205512700135365ustar00rootroot00000000000000src/acpi/msct/msct.c000066400000000000000000000075221465205512700146560ustar00rootroot00000000000000/* * Copyright (C) 2016-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(MSCT, &table) /* * MSCT Maximum System Characteristics Table */ static int msct_test1(fwts_framework *fw) { fwts_acpi_table_msct *msct = (fwts_acpi_table_msct*) table->data; fwts_acpi_msct_proximity *proximity; uint32_t num_proximity = 0, offset_proximity = 0; uint32_t i; bool passed = true; fwts_log_info_verbatim(fw, "MSCT Max System Characteristics Table:"); fwts_log_info_simp_int(fw, " Proximity Offset: ", msct->proximity_offset); fwts_log_info_simp_int(fw, " Max Proximity Domains: ", msct->max_proximity_domains); fwts_log_info_simp_int(fw, " Max Clock Domains: ", msct->max_clock_domains); fwts_log_info_simp_int(fw, " Max Physical Address: ", msct->max_address); if (msct->proximity_offset < 0x38) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "MSCTBadProximityOffset", "Proximity Domain Information Structures need to be at " "Offset 0x38 or after, but Proximity Offsetis is 0x%" PRIx32, msct->proximity_offset); offset_proximity = 0x38; passed = false; } else offset_proximity = msct->proximity_offset; if (offset_proximity + sizeof(fwts_acpi_msct_proximity) * msct->max_proximity_domains > msct->header.length) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "MSCTBadTableLength", "MSCT Table is too small to include maximum number of " "Proximity Domains"); passed = false; } num_proximity = (msct->header.length - offset_proximity) / sizeof(fwts_acpi_msct_proximity); if (num_proximity > msct->max_proximity_domains + 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "MSCTBadProimityDomains", "MSCT's max number of proximity domains is 0x%" PRIx32 ", but it has 0x%" PRIx32 " Proximity Domain " "Information Structures", msct->max_proximity_domains, num_proximity); passed = false; } fwts_log_nl(fw); proximity = (fwts_acpi_msct_proximity *)((char *) msct + offset_proximity); for (i = 0; i < num_proximity; i++, proximity++) { fwts_log_info_verbatim(fw, " Proximity Domain %2.2" PRIu8, i); fwts_log_info_verbatim(fw, " Revision: 0x%2.2" PRIx8, proximity->revision); fwts_log_info_verbatim(fw, " Length: 0x%2.2" PRIx8, proximity->length); fwts_log_info_verbatim(fw, " Domain Range (low): 0x%8.8" PRIx32, proximity->range_start); fwts_log_info_verbatim(fw, " Domain Range (high): 0x%8.8" PRIx32, proximity->range_end); fwts_log_info_verbatim(fw, " Max Processor Capacity: 0x%8.8" PRIx32, proximity->processor_capacity); fwts_log_info_verbatim(fw, " Max Memory Capacity: " "0x%16.16" PRIx64, proximity->memory_capacity); fwts_log_nl(fw); } if (passed) fwts_passed(fw, "No issues found in MSCT table."); return FWTS_OK; } static fwts_framework_minor_test msct_tests[] = { { msct_test1, "MSCT Maximum System Characteristics Table test." }, { NULL, NULL } }; static fwts_framework_ops msct_ops = { .description = "MSCT Maximum System Characteristics Table test.", .init = MSCT_init, .minor_tests = msct_tests }; FWTS_REGISTER("msct", &msct_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/msdm/000077500000000000000000000000001465205512700135305ustar00rootroot00000000000000src/acpi/msdm/msdm.c000066400000000000000000000102661465205512700146410ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) && !(FWTS_ARCH_AARCH64) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(MSDM, &table) /* * Microsoft Data Management (MSDM) Table * http://feishare.com/attachments/article/265/microsoft-software-licensing-tables.pdf * and derived from other sources. */ static int msdm_test1(fwts_framework *fw) { fwts_acpi_table_msdm *msdm = (fwts_acpi_table_msdm *)table->data; bool passed = true; /* Size sanity check #1, got enough table to get initial header */ if (!fwts_acpi_table_length(fw, "MSDM", table->length, sizeof(fwts_acpi_table_msdm))) { passed = false; goto done; } fwts_log_info_simp_int(fw, " Reserved: ", msdm->reserved); fwts_log_info_simp_int(fw, " Data Type: ", msdm->data_type); fwts_log_info_simp_int(fw, " Data Reserved: ", msdm->data_reserved); fwts_log_info_simp_int(fw, " Data Length: ", msdm->data_length); fwts_acpi_reserved_zero("MSDM", "Reserved", msdm->reserved, &passed); fwts_acpi_reserved_zero("MSDM", "Data Reserved", msdm->data_reserved, &passed); /* Now check table is big enough for the data payload */ if (table->length < sizeof(fwts_acpi_table_msdm) + msdm->data_length) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "MSDMDataLengthInvalid", "MSDM Data Length field states that the data " " is %" PRIu32 " bytes long, but the table is only " "%zu bytes in total", msdm->data_length, table->length); goto done; } /* * Based on inspection of a few hundred tables */ switch (msdm->data_type) { case 0x0001: /* Check license key size */ if (msdm->data_length != 0x1d) fwts_acpi_fixed_value(fw, LOG_LEVEL_HIGH, "MSDM", "Data Length", msdm->data_length, 29, &passed); else { size_t i; bool invalid = false; /* Note, no checks to see if this is a valid key! */ fwts_log_info_verbatim(fw, " Data: '%*.*s'", msdm->data_length, msdm->data_length, msdm->data); /* Expect XXXXX-XXXXX-XXXXX-XXXXX-XXXXX */ for (i = 0; i < 29; i++) { if ((i % 6) == 5) { if (msdm->data[i] != '-') invalid = true; } else { if (!isdigit(msdm->data[i]) && !isupper(msdm->data[i])) invalid = true; } } if (invalid) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "MSDMDataLengthInvalid", "MSDM Data field did not contain digits, uppercase letters and " "- characters in the form XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"); } } break; default: passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "MSDMDataTypeInvalid", "MSDM Data Type field should be 0x00000001, got 0x%8.8" PRIx32 " instead", msdm->data_type); break; } done: /* * Until this format is described somewhere, the checks * will be totally minimal. */ fwts_log_info(fw, "MSDM has had minimal check due to proprietary nature of the table"); if (passed) fwts_passed(fw, "No issues found in MSDM table."); return FWTS_OK; } static fwts_framework_minor_test msdm_tests[] = { { msdm_test1, "MSDM Microsoft Data Management Table test." }, { NULL, NULL } }; static fwts_framework_ops msdm_ops = { .description = "MSDM Microsoft Data Management Table test.", .init = MSDM_init, .minor_tests = msdm_tests }; FWTS_REGISTER("msdm", &msdm_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/nfit/000077500000000000000000000000001465205512700135305ustar00rootroot00000000000000src/acpi/nfit/nfit.c000066400000000000000000000514651465205512700146470ustar00rootroot00000000000000/* * Copyright (C) 2016-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include #define EFI_MEMORY_UC 0x00000001 #define EFI_MEMORY_WC 0x00000002 #define EFI_MEMORY_WT 0x00000004 #define EFI_MEMORY_WB 0x00000008 #define EFI_MEMORY_UCE 0x00000010 #define EFI_MEMORY_WP 0x00001000 #define EFI_MEMORY_RP 0x00002000 #define EFI_MEMORY_XP 0x00004000 #define EFI_MEMORY_NV 0x00008000 #define EFI_MEMORY_MORE_RELIABLE 0x00010000 #define EFI_MEMORY_RO 0x00020000 #define EFI_MEMORY_SP 0x00040000 #define EFI_MEMORY_ALL (EFI_MEMORY_UC | EFI_MEMORY_WC | EFI_MEMORY_WT | EFI_MEMORY_WB | \ EFI_MEMORY_UCE | EFI_MEMORY_WP | EFI_MEMORY_RP | EFI_MEMORY_XP | \ EFI_MEMORY_NV | EFI_MEMORY_MORE_RELIABLE | EFI_MEMORY_RO | EFI_MEMORY_SP) static const uint8_t guid_virtual_device[4][16] = { // Virtual Disk Region - Volatile { 0x5a, 0x53, 0xab, 0x77, 0xfc, 0x45, 0x4b, 0x62, 0x55, 0x60, 0xf7, 0xb2, 0x81, 0xd1, 0xf9, 0x6e }, // Virtual CD Region - Volatile { 0x30, 0xbd, 0x5a, 0x3d, 0x75, 0x41, 0xce, 0x87, 0x6d, 0x64, 0xd2, 0xad, 0xe5, 0x23, 0xc4, 0xbb }, // Virtual Disk Region - Persistent { 0xc9, 0x02, 0xea, 0x5c, 0x07, 0x4d, 0xd3, 0x69, 0x26, 0x9f, 0x44, 0x96, 0xfb, 0xe0, 0x96, 0xf9 }, // Virtual CD Region - Persistent { 0x88, 0x81, 0x01, 0x08, 0xcd, 0x42, 0x48, 0xbb, 0x10, 0x0f, 0x53, 0x87, 0xd5, 0x3d, 0xed, 0x3d }, }; static fwts_acpi_table_info *nfit_table; acpi_table_init(NFIT, &nfit_table) static bool check_length(fwts_framework *fw, const int actual, int min, const char *name) { if (actual < min) { fwts_failed(fw, LOG_LEVEL_HIGH, "NFITSubtableLength", "NFIT Subtable %s length %d bytes is too short, expected >= %d bytes", name, actual, min); return false; } return true; } static bool scan_nfit_smbios(fwts_framework *fw, int len, uint8_t *table) { int entry = 0; while (len > 4) { int strbytes = 0; fwts_dmi_header *hdr = (fwts_dmi_header *) table; fwts_log_info_verbatim(fw, " NFIT SMBIOS Entry %d:", entry++); fwts_log_info_simp_int(fw, " Type: ", hdr->type); fwts_log_info_simp_int(fw, " Length: ", hdr->length); fwts_log_info_simp_int(fw, " Handle: ", hdr->handle); if (hdr->length < 4) { fwts_failed(fw, LOG_LEVEL_HIGH, "NFIT_SMBIOS_EntryLength", "NFIT SMBIOS Entry length %d bytes is too short (less than 4 bytes)", hdr->length); return false; } len -= hdr->length; table += hdr->length; /* Look for structure terminator, ends in two zero bytes */ while (len > 2 && (table[0] != 0 || table[1] != 0)) { strbytes++; table++; len--; } fwts_log_info_verbatim(fw, " Strings: %d bytes", strbytes); /* Skip over terminating two zero bytes, see section 6.1 of spec */ table += 2; len -= 2; } if (len) { fwts_failed(fw, LOG_LEVEL_HIGH, "NFIT_SMBIOS_ListLength", "NFIT SMBIOS structure does not end with a complete entry"); return false; } return true; } /* * NFIT NVDIMM Firmware Interface Table */ static int nfit_test1(fwts_framework *fw) { fwts_acpi_table_nfit *nfit = (fwts_acpi_table_nfit*)nfit_table->data; fwts_acpi_table_nfit_struct_header *entry; uint32_t offset; bool passed = true; fwts_log_info_verbatim(fw, "NFIT NVDIMM Firmware Interface Table:"); fwts_log_info_simp_int(fw, " Reserved: ", nfit->reserved); fwts_log_nl(fw); fwts_acpi_reserved_zero("NFIT", "Reserved", nfit->reserved, &passed); offset = sizeof(fwts_acpi_table_nfit); entry = (fwts_acpi_table_nfit_struct_header *)(nfit_table->data + offset); while (offset < nfit_table->length) { uint64_t reserved_passed = 0; fwts_log_info_verbatim(fw, " NFIT Subtable:"); fwts_log_info_simp_int(fw, " Type: ", entry->type); fwts_log_info_simp_int(fw, " Length: ", entry->length); if (fwts_acpi_structure_length_zero(fw, "NFIT", entry->length, offset)) { passed = false; break; } if (entry->type == FWTS_NFIT_TYPE_SYSTEM_ADDRESS) { fwts_acpi_table_nfit_system_memory *nfit_struct = (fwts_acpi_table_nfit_system_memory *) entry; char guid_str[37]; bool guid_skip = false; size_t i; bool ret = check_length(fw, entry->length, FWTS_NFIT_MINLEN_SYSTEM_ADDRESS, FWTS_NFIT_NAME_SYSTEM_ADDRESS); if (!ret) { passed = false; break; } fwts_guid_buf_to_str(nfit_struct->range_guid, guid_str, sizeof(guid_str)); fwts_log_info_simp_int(fw, " SPA Range Structure Index: ", nfit_struct->range_index); fwts_log_info_simp_int(fw, " Flags: ", nfit_struct->flags); fwts_log_info_simp_int(fw, " Reserved: ", nfit_struct->reserved); fwts_log_info_simp_int(fw, " Proximity Domain: ", nfit_struct->proximity_domain); fwts_log_info_verbatim(fw, " Address Range Type GUID: %s", guid_str); fwts_log_info_simp_int(fw, " System Physical Address Range Base: ", nfit_struct->address); fwts_log_info_simp_int(fw, " System Physical Address Range Length: ", nfit_struct->length); fwts_log_info_simp_int(fw, " Address Range Memory Mapping Attribute: ", nfit_struct->memory_mapping); if (fwts_get_acpi_version(fw) >= FWTS_ACPI_VERSION_64) fwts_log_info_simp_int(fw, " SpaLocationCookie: ", nfit_struct->spa_location_cookie); /* SPA Range Structure Index can be 0 for Virtual CD Region and Virtual Disk Region (both volatile and persistent) */ for (i = 0; i < 4; i++) { if (fwts_guid_match(nfit_struct->range_guid, guid_virtual_device[i], 16)) { guid_skip = true; break; } } if (guid_skip == false && nfit_struct->range_index == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "NFITBadRangeIndexZero", "NFIT SPA Range Structure Index must not be zero"); } if (guid_skip) { if (nfit_struct->range_index != 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "NFITBadRangeIndexNonZero", "NFIT SPA Range Structure Index must " "be zero when region is Virtual CD or " "Virtual Disk, got 0x%4.4" PRIx32 " instead", nfit_struct->range_index); } if (nfit_struct->flags != 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "NFITBadFlagsNonZero", "NFIT Flags must be zero when " "region is Virtual CD or Virtual Disk, got " "0x%4.4" PRIx32 " instead", nfit_struct->flags); } if (nfit_struct->proximity_domain != 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "NFITBadProximityDomainNonZero", "NFIT Proximity Domain must be zero when " "region is Virtual CD or Virtual Disk, got " "0x%8.8" PRIx32 " instead", nfit_struct->proximity_domain); } if (nfit_struct->memory_mapping != 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "NFITBadMemoryAttributeNonZero", "NFIT Address Range Memory Mapping Attribute " "must be zero when region is Virtual CD or " "Virtual Disk, got 0x%16.16" PRIx64 " instead", nfit_struct->memory_mapping); } } fwts_acpi_reserved_bits("NFIT", "Flags", nfit_struct->flags, 3, 15, &passed); if (nfit_struct->reserved != 0) reserved_passed = nfit_struct->reserved; /* TODO check Proximity Domain with SRAT table */ if (nfit_struct->memory_mapping & ~EFI_MEMORY_ALL) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "NFITBadMemoryMappingAttribute", "NFIT Memory Mapping Attribute must meet UEFI Spec, got " "0x%16.16" PRIx64 " instead", nfit_struct->memory_mapping); } } else if (entry->type == FWTS_NFIT_TYPE_MEMORY_MAP) { fwts_acpi_table_nfit_memory_map *nfit_struct = (fwts_acpi_table_nfit_memory_map *) entry; bool ret = check_length(fw, entry->length, FWTS_NFIT_MINLEN_MEMORY_MAP, FWTS_NFIT_NAME_MEMORY_MAP); if (!ret) { passed = false; break; } fwts_log_info_simp_int(fw, " NFIT Device Handle: ", nfit_struct->device_handle); fwts_log_info_simp_int(fw, " NVDIMM Physical ID: ", nfit_struct->physical_id); fwts_log_info_simp_int(fw, " NVDIMM Region ID: ", nfit_struct->region_id); fwts_log_info_simp_int(fw, " SPA Range Structure Index: ", nfit_struct->range_index); fwts_log_info_simp_int(fw, " NVDIMM Control Region Structure Index: ", nfit_struct->region_index); fwts_log_info_simp_int(fw, " NVDIMM Region Size: ", nfit_struct->region_size); fwts_log_info_simp_int(fw, " Region Offset: ", nfit_struct->region_offset); fwts_log_info_simp_int(fw, " NVDIMM Physical Address Region Base: ", nfit_struct->address); fwts_log_info_simp_int(fw, " Interleave Structure Index: ", nfit_struct->interleave_index); fwts_log_info_simp_int(fw, " Interleave Ways: ", nfit_struct->interleave_ways); fwts_log_info_simp_int(fw, " NVDIMM State Flags: ", nfit_struct->flags); fwts_log_info_simp_int(fw, " Reserved: ", nfit_struct->reserved); fwts_acpi_reserved_bits("NFIT", "NVDIMM State Flags", nfit_struct->flags, 7, 15, &passed); if (nfit_struct->reserved != 0) reserved_passed = nfit_struct->reserved; } else if (entry->type == FWTS_NFIT_TYPE_INTERLEAVE) { fwts_acpi_table_nfit_interleave *nfit_struct = (fwts_acpi_table_nfit_interleave *) entry; uint32_t i; bool ret = check_length(fw, entry->length, FWTS_NFIT_MINLEN_INTERLEAVE, FWTS_NFIT_NAME_INTERLEAVE); if (!ret) { passed = false; break; } fwts_log_info_simp_int(fw, " Interleave Structure Index: ", nfit_struct->interleave_index); fwts_log_info_simp_int(fw, " Reserved: ", nfit_struct->reserved); fwts_log_info_simp_int(fw, " Number of Lines Described: ", nfit_struct->line_count); fwts_log_info_simp_int(fw, " Line Size: ", nfit_struct->line_size); ret = check_length(fw, entry->length, FWTS_NFIT_MINLEN_INTERLEAVE + nfit_struct->line_count * sizeof nfit_struct->line_offset[0], FWTS_NFIT_NAME_INTERLEAVE); if (!ret) { passed = false; break; } for (i = 0; i < nfit_struct->line_count; i++) fwts_log_info_verbatim(fw, " Line Offset: 0x%8.8" PRIx32 ", SPA 0x%16.16" PRIx64, nfit_struct->line_offset[i], (uint64_t) nfit_struct->line_offset[i] * nfit_struct->line_size); if (nfit_struct->reserved != 0) reserved_passed = nfit_struct->reserved; if (nfit_struct->line_count == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "NFITBadLineCount", "NFIT Number of Lines must not be zero"); } } else if (entry->type == FWTS_NFIT_TYPE_SMBIOS) { fwts_acpi_table_nfit_smbios *nfit_struct = (fwts_acpi_table_nfit_smbios *) entry; bool ret = check_length(fw, entry->length, FWTS_NFIT_MINLEN_SMBIOS, FWTS_NFIT_NAME_SMBIOS); if (!ret) { passed = false; break; } fwts_log_info_simp_int(fw, " Reserved: ", nfit_struct->reserved); if (nfit_struct->reserved != 0) reserved_passed = nfit_struct->reserved; if (entry->length < 8) break; ret = scan_nfit_smbios(fw, entry->length - 8, nfit_struct->smbios); if (!ret) passed = false; } else if (entry->type == FWTS_NFIT_TYPE_CONTROL_REGION) { fwts_acpi_table_nfit_control_range *nfit_struct = (fwts_acpi_table_nfit_control_range *) entry; bool ret = check_length(fw, entry->length, FWTS_NFIT_MINLEN_CONTROL_REGION, FWTS_NFIT_NAME_CONTROL_REGION); if (!ret) { passed = false; break; } fwts_log_info_simp_int(fw, " Vendor ID: ", nfit_struct->vendor_id); fwts_log_info_simp_int(fw, " Device ID: ", nfit_struct->device_id); fwts_log_info_simp_int(fw, " Revision ID: ", nfit_struct->revision_id); fwts_log_info_simp_int(fw, " Subsystem Vendor ID: ", nfit_struct->subsystem_vendor_id); fwts_log_info_simp_int(fw, " Subsystem Device ID: ", nfit_struct->subsystem_device_id); fwts_log_info_simp_int(fw, " Subsystem Revision ID: ", nfit_struct->subsystem_revision_id); fwts_log_info_simp_int(fw, " Valid Fields: ", nfit_struct->valid_fields); fwts_log_info_simp_int(fw, " Manufacturing Location: ", nfit_struct->manufacturing_location); fwts_log_info_simp_int(fw, " Manufacturing Date: ", nfit_struct->manufacturing_date); fwts_log_info_simp_int(fw, " Reserved: ", nfit_struct->reserved); fwts_log_info_simp_int(fw, " Serial Number: ", nfit_struct->serial_number); fwts_log_info_simp_int(fw, " Region Format Interface Code: ", nfit_struct->interface_code); fwts_log_info_simp_int(fw, " Number of Block Control Windows: ", nfit_struct->windows_num); if (nfit_struct->revision_id & 0xFF00) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "NFITBadRevisionId", "NFIT Revision ID's BYTE 1 must be zero, got " "0x%4.4" PRIx16 " instead", nfit_struct->revision_id); } if (nfit_struct->subsystem_revision_id & 0xFF00) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "NFITBadRevisionId", "NFIT Subsystem Revision ID's BYTE 1 must be zero, got " "0x%4.4" PRIx16 " instead", nfit_struct->subsystem_revision_id); } if (nfit_struct->reserved != 0) reserved_passed = nfit_struct->reserved; fwts_acpi_reserved_bits("NFIT", "Valid", nfit_struct->valid_fields, 1, 7, &passed); if (entry->length >= sizeof(*nfit_struct)) { uint64_t reserved1; reserved1 = (uint64_t) nfit_struct->reserved1[0] + ((uint64_t) nfit_struct->reserved1[1] << 8) + ((uint64_t) nfit_struct->reserved1[2] << 16) + ((uint64_t) nfit_struct->reserved1[3] << 24) + ((uint64_t) nfit_struct->reserved1[4] << 32) + ((uint64_t) nfit_struct->reserved1[5] << 40); if (reserved1 != 0) reserved_passed = reserved1; fwts_log_info_simp_int(fw, " Size of Block Control Window: ", nfit_struct->window_size); fwts_log_info_simp_int(fw, " Command Register Offset: ", nfit_struct->command_offset); fwts_log_info_simp_int(fw, " Size of Command Register: ", nfit_struct->command_size); fwts_log_info_simp_int(fw, " Status RegisterOffset: ", nfit_struct->status_offset); fwts_log_info_simp_int(fw, " Size of Status Register: ", nfit_struct->status_size); fwts_log_info_simp_int(fw, " NVDIMM Control Region Flag: ", nfit_struct->flags); fwts_log_info_simp_int(fw, " Reserved: ", reserved1); fwts_acpi_reserved_bits("NFIT", "NVDIMM Control Region Flags", nfit_struct->flags, 1, 15, &passed); fwts_log_info_simp_int(fw, " NVDIMM Control Region Structure Index: ", nfit_struct->region_index); } } else if (entry->type == FWTS_NFIT_TYPE_DATA_REGION) { fwts_acpi_table_nfit_data_range *nfit_struct = (fwts_acpi_table_nfit_data_range *) entry; bool ret = check_length(fw, entry->length, FWTS_NFIT_MINLEN_DATA_REGION, FWTS_NFIT_NAME_DATA_REGION); if (!ret) { passed = false; break; } fwts_log_info_simp_int(fw, " NVDIMM Control Region Structure Index: ", nfit_struct->region_index); fwts_log_info_simp_int(fw, " Number of Block Data Windows: ", nfit_struct->window_num); fwts_log_info_simp_int(fw, " Block Data Window Start Offset: ", nfit_struct->window_offset); fwts_log_info_simp_int(fw, " Size of Block Data Window: ", nfit_struct->window_size); fwts_log_info_simp_int(fw, " NBlock Accessible Memory Capacity: ", nfit_struct->capacity); fwts_log_info_simp_int(fw, " Beginning address of First Block: ", nfit_struct->start_address); if (nfit_struct->region_index == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "NFITBadRegionIndex", "NFIT NVDIMM Control Region Structure Index must not be zero"); } } else if (entry->type == FWTS_NFIT_TYPE_FLUSH_ADDRESS) { fwts_acpi_table_nfit_flush_addr *nfit_struct = (fwts_acpi_table_nfit_flush_addr *) entry; uint64_t reserved; uint16_t i; bool ret = check_length(fw, entry->length, FWTS_NFIT_MINLEN_FLUSH_ADDRESS, FWTS_NFIT_NAME_FLUSH_ADDRESS); if (!ret) { passed = false; break; } reserved = (uint64_t) nfit_struct->reserved[0] + ((uint64_t) nfit_struct->reserved[1] << 8) + ((uint64_t) nfit_struct->reserved[2] << 16) + ((uint64_t) nfit_struct->reserved[3] << 24) + ((uint64_t) nfit_struct->reserved[4] << 32) + ((uint64_t) nfit_struct->reserved[5] << 40); fwts_log_info_simp_int(fw, " NFIT Device Handle: ", nfit_struct->device_handle); fwts_log_info_simp_int(fw, " Number of Flush Hint Addresses: ", nfit_struct->hint_count); fwts_log_info_simp_int(fw, " Reserved: ", reserved); ret = check_length(fw, entry->length, FWTS_NFIT_MINLEN_FLUSH_ADDRESS + nfit_struct->hint_count * sizeof nfit_struct->hint_address[0], FWTS_NFIT_NAME_FLUSH_ADDRESS); if (!ret) { passed = false; break; } for (i = 0; i < nfit_struct->hint_count; i++) fwts_log_info_simp_int(fw, " Flush Hint Address: ", nfit_struct->hint_address[i]); if (reserved != 0) reserved_passed = reserved; } else if (entry->type == FWTS_NFIT_TYPE_PLATFORM_CAPABILITY) { fwts_acpi_table_nfit_platform_cap *nfit_struct = (fwts_acpi_table_nfit_platform_cap *) entry; uint32_t reserved1; bool ret = check_length(fw, entry->length, FWTS_NFIT_MINLEN_PLATFORM_CAPABILITY, FWTS_NFIT_NAME_PLATFORM_CAPABILITY); if (!ret) { passed = false; break; } reserved1 = (uint32_t) nfit_struct->reserved1[0] + ((uint32_t) nfit_struct->reserved1[1] << 8) + ((uint32_t) nfit_struct->reserved1[2] << 16); fwts_log_info_simp_int(fw, " Highest Valid Capability: ", nfit_struct->highest_valid_cap); fwts_log_info_simp_int(fw, " Reserved1: ", reserved1); fwts_log_info_simp_int(fw, " Capabilities: ", nfit_struct->cap); fwts_log_info_simp_int(fw, " Reserved2: ", nfit_struct->reserved2); fwts_acpi_reserved_zero("NFIT", "Reserved1", reserved1, &passed); fwts_acpi_reserved_bits("NFIT", "Capabilities", nfit_struct->cap, 3, 31, &passed); if ((nfit_struct->cap & 0x1) && !(nfit_struct->cap & 0x2)) { passed = false; fwts_failed(fw, LOG_LEVEL_CRITICAL, "NFITBadCapabilities", "NFIT Capabilities[1] must be set and if Capabilities[0] is set, got " "0x%8.8" PRIx32 " instead", nfit_struct->cap); } if (nfit_struct->reserved2 != 0) reserved_passed = nfit_struct->reserved2; } else { fwts_acpi_reserved_type(fw, "NFIT", entry->type, 0, FWTS_NFIT_TYPE_RESERVED, &passed); break; } fwts_acpi_reserved_zero("NFIT", "Reserved", reserved_passed, &passed); fwts_log_nl(fw); offset += entry->length; if (fwts_acpi_structure_range(fw, "NFIT", nfit_table->length, offset)) { passed = false; break; } entry = (fwts_acpi_table_nfit_struct_header *)(nfit_table->data + offset); } if (passed) fwts_passed(fw, "No issues found in NFIT table."); return FWTS_OK; } static fwts_framework_minor_test nfit_tests[] = { { nfit_test1, "NFIT NVDIMM Firmware Interface Table test." }, { NULL, NULL } }; static fwts_framework_ops nfit_ops = { .description = "NFIT NVDIMM Firmware Interface Table test.", .init = NFIT_init, .minor_tests = nfit_tests }; FWTS_REGISTER("nfit", &nfit_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/nhltdump/000077500000000000000000000000001465205512700144235ustar00rootroot00000000000000src/acpi/nhltdump/nhltdump.c000066400000000000000000000177251465205512700164360ustar00rootroot00000000000000/* * Copyright (C) 2022-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(NHLT, &table) static void nhltdump_data_hexdump(fwts_framework *fw, uint8_t *data, size_t size) { size_t i; for (i = 0; i < size; i += 16) { char buffer[128]; size_t left = size - i; fwts_dump_raw_data(buffer, sizeof(buffer), data + i, i, left > 16 ? 16 : left); fwts_log_info_verbatim(fw, " %s", buffer + 2); } } static char *nhltdump_linktype_to_string(const uint8_t linktype) { char *str; switch (linktype) { case 0: str = "HD-Audio"; break; case 1: str = "DSP "; break; case 2: str = "PDM"; break; case 3: str = "SSP"; break; case 4: str = "Slimbus"; break; case 5: str = "SoundWire"; break; default: str = "reserved"; break; } return str; } static char *nhltdump_devtype_to_string(const uint8_t linktype, const uint8_t devtype) { char *str; if (linktype == 2) { switch (devtype) { case 0: str = "PDM on cAVS1.8 (CNL+) platforms only"; break; case 1: str = "PDM on cAVS1.5 (KBL) based platforms"; break; default: str = "reserved"; break; } } else if (linktype == 3) { switch (devtype) { case 0: str = "BT Sideband"; break; case 1: str = "FM"; break; case 2: str = "Modem"; break; case 4: str = "SSP Analog Codec"; break; default: str = "reserved"; break; } } else str = "TBD"; return str; } static char *nhltdump_direction_to_string(const uint8_t direction) { char *str; switch (direction) { case 0: str = "Render"; break; case 1: str = "Capture"; break; case 2: str = "Render with loopback / feedback"; break; case 3: str = "Feedback for render (smartamp)"; break; default: str = ""; break; } return str; } /* * NHLT Table * see https://01.org/sites/default/files/595976_intel_sst_nhlt.pdf */ static int nhltdump_test1(fwts_framework *fw) { fwts_acpi_table_nhlt *nhlt = (fwts_acpi_table_nhlt *)table->data; uint32_t i, j; fwts_acpi_table_nhlt_ep_descriptor *ep_descriptor = (fwts_acpi_table_nhlt_ep_descriptor *) ((uint8_t *)table->data + sizeof(fwts_acpi_table_nhlt)); fwts_acpi_table_nhlt_specific_config *spec_config = NULL; fwts_acpi_table_nhlt_formats_configuration *formats_conf = NULL; fwts_acpi_table_nhlt_format_configuration *format_conf = NULL; char guid_str[37]; uint32_t table_length = table->length; uint32_t offset = 0; char *str_info; fwts_log_info_simp_int(fw, "TableLength: ", table_length); offset += sizeof(fwts_acpi_table_nhlt); if (offset > table_length) { fwts_log_info_verbatim(fw, "Table too short, skip dumping remaining data."); return FWTS_OK; } fwts_log_info_verbatim(fw, "NHLT Table:"); fwts_log_info_verbatim(fw, " EndpointDescriptorCount: %" PRIu8, nhlt->ep_descriptor_count); for (i = 0; i < nhlt->ep_descriptor_count; i++) { offset += ep_descriptor->ep_descriptor_len; if (offset > table_length) { fwts_log_info_verbatim(fw, "Table too short, skip dumping remaining data."); return FWTS_OK; } fwts_log_info_verbatim(fw, " EndpointDescriptor %" PRIu8, (i + 1)); fwts_log_info_simp_int(fw, " EndpointDescriptorLength: ", ep_descriptor->ep_descriptor_len); str_info = nhltdump_linktype_to_string(ep_descriptor->link_type); fwts_log_info_verbatim(fw, " LinkType: %" PRIu8 " (%s)", ep_descriptor->link_type, str_info); fwts_log_info_simp_int(fw, " Instance ID: ", ep_descriptor->instance_id); fwts_log_info_simp_int(fw, " Vendor ID: ", ep_descriptor->vendor_id); fwts_log_info_simp_int(fw, " Device ID: ", ep_descriptor->device_id); fwts_log_info_simp_int(fw, " Revision ID: ", ep_descriptor->revision_id); fwts_log_info_simp_int(fw, " Subsystem ID: ", ep_descriptor->subsystem_id); str_info = nhltdump_devtype_to_string(ep_descriptor->link_type, ep_descriptor->device_type); fwts_log_info_verbatim(fw, " Device Type: %" PRIu8 " (%s)", ep_descriptor->device_type, str_info); str_info = nhltdump_direction_to_string(ep_descriptor->direction); fwts_log_info_verbatim(fw, " Direction: %" PRIu8 " (%s)", ep_descriptor->direction, str_info); fwts_log_info_simp_int(fw, " Virtual Bus ID: ", ep_descriptor->virtual_bus_id); spec_config = (fwts_acpi_table_nhlt_specific_config *)((uint8_t *)ep_descriptor + sizeof(fwts_acpi_table_nhlt_ep_descriptor)); fwts_log_info_verbatim(fw, " EndpointConfig"); fwts_log_info_simp_int(fw, " CapabilitiesSize: ", spec_config->capabilities_size); fwts_log_info_verbatim(fw, " Capabilities:"); nhltdump_data_hexdump(fw, spec_config->capabilities, spec_config->capabilities_size); fwts_log_info_verbatim(fw, " FormatsConfig"); formats_conf = (fwts_acpi_table_nhlt_formats_configuration *)((uint8_t *)spec_config + sizeof(spec_config->capabilities_size) + spec_config->capabilities_size); fwts_log_info_verbatim(fw, " FormatsCount %" PRIu8, formats_conf->formatscount); format_conf = formats_conf->formatsconfiguration; for (j = 0; j < formats_conf->formatscount; j++) { fwts_log_info_verbatim(fw, " FormatConfig %" PRIu8, (j + 1)); fwts_log_info_simp_int(fw, " wFormatTag: ", format_conf->format.wformattag); fwts_log_info_simp_int(fw, " nChannels: ", format_conf->format.nchannels); fwts_log_info_simp_int(fw, " nSamplesPerSec: ", format_conf->format.nsamplespersec); fwts_log_info_simp_int(fw, " nAvgBytesPerSec: ", format_conf->format.navgbytespersec); fwts_log_info_simp_int(fw, " nBlockAlign: ", format_conf->format.nblockalign); fwts_log_info_simp_int(fw, " wBitsPerSample: ", format_conf->format.wbitspersample); fwts_log_info_simp_int(fw, " cbSize: ", format_conf->format.cbsize); fwts_log_info_simp_int(fw, " wValidBitsPerSample: ", format_conf->format.wvalidbitspersample); fwts_log_info_simp_int(fw, " dwChannelMask: ", format_conf->format.dwchannelmask); fwts_guid_buf_to_str(format_conf->format.subformat, guid_str, sizeof(guid_str)); fwts_log_info_verbatim(fw, " SubFormat: %s", guid_str); fwts_log_info_verbatim(fw, " SpecificConfig"); fwts_log_info_simp_int(fw, " CapabilitiesSize: ", format_conf->formatconfiguration.capabilities_size); fwts_log_info_verbatim(fw, " Capabilities:"); nhltdump_data_hexdump(fw, format_conf->formatconfiguration.capabilities, format_conf->formatconfiguration.capabilities_size); format_conf = (fwts_acpi_table_nhlt_format_configuration *) ((uint8_t *)format_conf->formatconfiguration.capabilities + format_conf->formatconfiguration.capabilities_size); } ep_descriptor = (fwts_acpi_table_nhlt_ep_descriptor *)((uint8_t *)ep_descriptor + ep_descriptor->ep_descriptor_len); } /* TODO: dumping the OEDConfig, currently the specification not clear defined the remaining data */ return FWTS_OK; } static fwts_framework_minor_test nhltdump_tests[] = { { nhltdump_test1, "Dump non-HD Audio endpoints configuration performed via ACPI(NHLT)." }, { NULL, NULL } }; static fwts_framework_ops nhltdump_ops = { .description = "Dump configurations performed via NHLT.", .init = NHLT_init, .minor_tests = nhltdump_tests }; FWTS_REGISTER("nhltdump", &nhltdump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS) #endif src/acpi/osilinux/000077500000000000000000000000001465205512700144425ustar00rootroot00000000000000src/acpi/osilinux/osilinux.c000066400000000000000000000063631465205512700164700ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #include static int osilinux_test1(fwts_framework *fw) { fwts_acpi_table_info *info; fwts_list_link *item; fwts_list_link *dumpitem = NULL; fwts_list* disassembly = NULL; int depth = 0; int dumpdepth = 0; bool found = false; if (fwts_iasl_init(fw) != FWTS_OK) { fwts_aborted(fw, "Failure to initialise iasl, aborting."); fwts_iasl_deinit(); return FWTS_ERROR; } if (fwts_acpi_find_table(fw, "DSDT", 0, &info) != FWTS_OK) { fwts_log_error(fw, "Cannot located DSDT."); return FWTS_ERROR; } if (info) { if (fwts_iasl_disassemble(fw, info, true, &disassembly) != FWTS_OK) { fwts_aborted(fw, "Cannot disassemble DSDT with iasl."); fwts_iasl_deinit(); return FWTS_ERROR; } } fwts_iasl_deinit(); if (disassembly == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "NoDSDT", "Could not read ACPI DSDT table."); return FWTS_ERROR; } fwts_log_info(fw, "This is not strictly a failure mode, it just alerts " "one that this has been defined in the DSDT and probably " "should be avoided since the Linux ACPI driver matches " "onto the Windows _OSI strings"); fwts_list_foreach(item, disassembly) { char *line = fwts_text_list_text(item); char *str; if (strstr(line, "{")) { depth++; if (dumpdepth == 0) dumpitem = item; } if (strstr(line, "}")) { depth--; if (dumpdepth != 0 && dumpdepth != depth) { found = true; while (dumpitem != NULL && dumpitem != item->next) { fwts_log_warning_verbatim(fw, "%s", fwts_text_list_text(dumpitem)); dumpitem = dumpitem->next; } dumpdepth = 0; fwts_warning(fw, "DSDT implements a deprecated _OSI(\"Linux\") test."); } } if ((str = strstr(line, "_OSI")) != NULL) { if (strstr(str + 4, "Linux") || strstr(str + 4, "linux")) dumpdepth = depth; } } fwts_text_list_free(disassembly); if (!found) fwts_passed(fw, "DSDT does not implement a deprecated _OSI(\"Linux\") test."); return FWTS_OK; } static fwts_framework_minor_test osilinux_tests[] = { { osilinux_test1, "Disassemble DSDT to check for _OSI(\"Linux\")." }, { NULL, NULL } }; static fwts_framework_ops osilinux_ops = { .description = "Disassemble DSDT to check for _OSI(\"Linux\").", .minor_tests = osilinux_tests }; FWTS_REGISTER("osilinux", &osilinux_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH) #endif src/acpi/pcc/000077500000000000000000000000001465205512700133355ustar00rootroot00000000000000src/acpi/pcc/pcc.c000066400000000000000000000347311465205512700142560ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include "fwts_acpi_object_eval.h" /* * This test does some sanity checking on the PCC interface, * see http://acpica.org/download/Processor-Clocking-Control-v1p0.pdf */ #define PCC_HDR_SIGNATURE 0x24504343 /* $PCC */ /* * For the moment, we turn this off as I am concerned that reads of this region * may cause issues. */ #define CHECK_PCC_HDR 0 typedef struct { uint8_t descriptor; uint8_t length; uint8_t space_id; uint8_t resource_usage; uint8_t type_specific; uint64_t granularity; uint64_t minimum; uint64_t maximum; uint64_t translation_offset; uint64_t address_length; } __attribute__ ((packed)) fwts_pcc_memory_resource; typedef struct { uint8_t descriptor; uint16_t length; uint8_t space_id; uint8_t bit_width; uint8_t bit_offset; uint8_t access_size; uint64_t address; } __attribute__ ((packed)) fwts_pcc_register_resource; typedef struct { uint32_t signature; uint16_t length; uint8_t major; uint8_t minor; uint32_t features; uint16_t command; uint16_t status; uint32_t latency; uint32_t minimum_time; uint32_t maximum_time; uint32_t nominal; uint32_t throttled_frequency; uint32_t minimum_frequency; } __attribute__ ((packed)) fwts_pcc_header; /* * pcc_init() * initialize ACPI */ static int pcc_init(fwts_framework *fw) { if (fwts_acpi_init(fw) != FWTS_OK) return FWTS_ERROR; return FWTS_OK; } /* * pcc_deinit * de-intialize ACPI */ static int pcc_deinit(fwts_framework *fw) { return fwts_acpi_deinit(fw); } #if CHECK_PCC_HDR static void pcc_check_pcc_header( fwts_framework *fw, uint64_t addr, uint64_t length, bool *failed) { fwts_pcc_header *hdr; hdr = (fwts_pcc_header *)fwts_mmap((off_t)addr, (size_t)length); if (hdr == FWTS_MAP_FAILED) { fwts_log_info(fw, "Failed to memory map PCC header 0x%" PRIx64 "..0x%" PRIx64 ".", addr, addr + length); return; } /* Ensure header can be read */ if (fwts_safe_memread(hdr, length) != FWTS_OK) { fwts_log_info(fw, "Cannot read PCC header 0x%" PRIx64 "..0x%" PRIx64 ".", addr, addr + length); fwts_munmap(hdr, (size_t)length); return; } fwts_log_info_simp_int(fw, "PCC header at ", addr); fwts_log_info_simp_int(fw, " Signature: ", hdr->signature); fwts_log_info_simp_int(fw, " Length: ", hdr->length); fwts_log_info_simp_int(fw, " Major: ", hdr->major); fwts_log_info_simp_int(fw, " Minor: ", hdr->minor); fwts_log_info_simp_int(fw, " Features: ", hdr->features); fwts_log_info_simp_int(fw, " Command: ", hdr->command); fwts_log_info_simp_int(fw, " Status: ", hdr->status); fwts_log_info_simp_int(fw, " Latency: ", hdr->latency); fwts_log_info_simp_int(fw, " Minimum Time: ", hdr->minimum_time); fwts_log_info_simp_int(fw, " Maximum Time: ", hdr->maximum_time); fwts_log_info_simp_int(fw, " Nominal: ", hdr->nominal); fwts_log_info_simp_int(fw, " Throttled Freq.: ", hdr->throttled_frequency); fwts_log_info_simp_int(fw, " Minimum Freq.: ", hdr->minimum_frequency); fwts_munmap(hdr, (size_t)length); fwts_log_nl(fw); if (hdr->signature != PCC_HDR_SIGNATURE) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCHdrSignatureError", "The PCC Header Signature is not a valid PCC signature, was expecting " "0x%" PRIx32 " ($PCC), got instead 0x%" PRIx32, PCC_HDR_SIGNATURE, hdr->signature); *failed = true; } } #endif static void pcc_check_shared_memory_region( fwts_framework *fw, const char *name, ACPI_OBJECT *pcc_obj, bool *failed) { fwts_pcc_memory_resource *pcc_mr; if (pcc_obj->Type != ACPI_TYPE_BUFFER) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCHElementZeroNotBuffer", "PCCH object %s returned a package with element zero " "was not an ACPI_BUFFER. This does not conform to the " "PCC specification.", name); *failed = true; return; } if (pcc_obj->Buffer.Pointer == NULL) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCHElementZeroBufferNull", "PCCH object %s returned a package with element zero " "which was an ACPI_BUFFER, however, the buffer pointer " "was NULL. This does not conform to the PCC " "specification.", name); *failed = true; return; } if (pcc_obj->Buffer.Length < sizeof(fwts_pcc_memory_resource)) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCHMemoryResourceIllegalSize", "PCCH object %s returned a PCC memory resource buffer " "which was the wrong size. Got %" PRIu32 " bytes, " "expected %zu bytes.", name, pcc_obj->Buffer.Length, sizeof(fwts_pcc_memory_resource)); *failed = true; return; } pcc_mr = (fwts_pcc_memory_resource *)pcc_obj->Buffer.Pointer; fwts_log_info_verbatim(fw, "PCC Memory Resource (Shared Memory Region) for %s:", name); fwts_log_info_simp_int(fw, " Descriptor: ", pcc_mr->descriptor); fwts_log_info_simp_int(fw, " Length: ", pcc_mr->length); fwts_log_info_simp_int(fw, " Space ID: ", pcc_mr->space_id); fwts_log_info_simp_int(fw, " Resource Usage: ", pcc_mr->resource_usage); fwts_log_info_simp_int(fw, " Type Specific: ", pcc_mr->type_specific); fwts_log_info_simp_int(fw, " Minimum: ", pcc_mr->minimum); fwts_log_info_simp_int(fw, " Maximum: ", pcc_mr->maximum); fwts_log_info_simp_int(fw, " Translation Offset: ", pcc_mr->translation_offset); fwts_log_info_simp_int(fw, " Address Length: ", pcc_mr->address_length); if (pcc_mr->space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCMemoryResourceSpaceIdWrongType", "PCC Memory Resource Space ID is of the wrong type, got 0x%" PRIx8 ", expected to get type 0x%" PRIx8 " (ACPI_ADR_SPACE_SYSTEM_MEMORY).", pcc_mr->space_id, ACPI_ADR_SPACE_SYSTEM_MEMORY); *failed = true; } if (pcc_mr->length == 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCMemoryResourceAddrLength", "PCC Memory Resource Address Length is zero, this is clearly incorrect."); *failed = true; } if (pcc_mr->minimum & 4095) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCMemoryNotPageAligned", "PCC Memory Resource Minimum Address is not page aligned. It must " "start on a 4K page boundary."); *failed = true; } /* TODO: We should also check if the region is in the e820 region too */ if (pcc_mr->minimum == 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCMemoryResourceMinAddr", "PCC Memory Resource Minimum Address is zero, this is clearly incorrect."); *failed = true; } if (pcc_mr->maximum == 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCMemoryResourceMaxAddr", "PCC Memory Resource Maximum Address is zero, this is clearly incorrect."); *failed = true; } if (pcc_mr->minimum >= pcc_mr->maximum) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCMemoryResourceMinMaxAddrError", "PCC Memory Resource Minimum Address should be less than " "the Maximum Address: Min: 0x%" PRIx64 ", Max: 0x%" PRIx64, pcc_mr->minimum, pcc_mr->maximum); *failed = true; } fwts_log_nl(fw); #if CHECK_PCC_HDR pcc_check_pcc_header(fw, pcc_mr->minimum, pcc_mr->length, failed); #endif } static void pcc_check_doorbell_address( fwts_framework *fw, const char *name, ACPI_OBJECT *pcc_obj, bool *failed) { fwts_pcc_register_resource *pcc_rr; if (pcc_obj->Type != ACPI_TYPE_BUFFER) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCHElementOneNotBuffer", "PCCH object %s returned a package with element zero " "was not an ACPI_BUFFER. This does not conform to the " "PCC specification.", name); *failed = true; return; } if (pcc_obj->Buffer.Pointer == NULL) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCHElementOneBufferNull", "PCCH object %s returned a package with element one " "which was an ACPI_BUFFER, however, the buffer pointer " "was NULL. This does not conform to the PCC " "specification.", name); *failed = true; return; } if (pcc_obj->Buffer.Length < sizeof(fwts_pcc_register_resource)) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCHRegisterResourceIllegalSize", "PCCH object %s returned a PCC register resource buffer " "which was the wrong size. Got %" PRIu32 " bytes, " "expected %zu bytes.", name, pcc_obj->Buffer.Length, sizeof(fwts_pcc_register_resource)); *failed = true; return; } pcc_rr = (fwts_pcc_register_resource *)pcc_obj->Buffer.Pointer; fwts_log_info_verbatim(fw, "PCC Register Resource (Doorbell) for %s:", name); fwts_log_info_simp_int(fw, " Descriptor: ", pcc_rr->descriptor); fwts_log_info_simp_int(fw, " Length: ", pcc_rr->length); fwts_log_info_simp_int(fw, " Space ID: ", pcc_rr->space_id); fwts_log_info_simp_int(fw, " Bit Width: ", pcc_rr->bit_width); fwts_log_info_simp_int(fw, " Bit Offset: ", pcc_rr->bit_offset); fwts_log_info_simp_int(fw, " Access Size: ", pcc_rr->access_size); fwts_log_info_simp_int(fw, " Address: ", pcc_rr->address); if (pcc_rr->space_id != ACPI_ADR_SPACE_SYSTEM_IO) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCRegisterResourceSpaceIdWrongType", "PCC Register Resource Space ID is of the wrong type, got 0x%" PRIx8 ", expected to get type 0x%" PRIx8 " (ACPI_ADR_SPACE_SYSTEM_IO).", pcc_rr->space_id, ACPI_ADR_SPACE_SYSTEM_IO); *failed = true; } if ((pcc_rr->bit_width < 1) || (pcc_rr->bit_width > 32)) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCRegisterResourceBitWidthError", "PCC Register Resource Bit Width is incorrect, got 0x%" PRIx8, pcc_rr->bit_width); *failed = true; } if (pcc_rr->address == 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCRegisterResourceAddressZero", "PCC Register Resource Address is incorrect, got 0x%" PRIx64, pcc_rr->address); *failed = true; } fwts_log_nl(fw); } static void pcc_check_doorbell_preserve_mask( fwts_framework *fw, const char *name, ACPI_OBJECT *pcc_obj, bool *failed) { if (pcc_obj->Type != ACPI_TYPE_INTEGER) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCHElementTwoNotInteger", "PCCH object %s returned a package with element two " "was not an ACPI_INTEGER. This does not conform to the " "PCC specification.", name); *failed = true; return; } fwts_log_info_verbatim(fw, "PCC Doorbell Preserve Mask for %s:", name); fwts_log_info_simp_int(fw, " Preserve Mask: ", pcc_obj->Integer.Value); fwts_log_nl(fw); } static void pcc_check_doorbell_write_mask( fwts_framework *fw, const char *name, ACPI_OBJECT *pcc_obj, bool *failed) { if (pcc_obj->Type != ACPI_TYPE_INTEGER) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCHElementTwoNotInteger", "PCCH object %s returned a package with element three " "was not an ACPI_INTEGER. This does not conform to the " "PCC specification.", name); *failed = true; return; } fwts_log_info_verbatim(fw, "PCC Doorbell Write Mask for %s:", name); fwts_log_info_simp_int(fw, " Write Mask: ", pcc_obj->Integer.Value); fwts_log_nl(fw); if (pcc_obj->Integer.Value == 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCDoorBellWriteMaskZero", "PCC Doorbell Write Mask is incorrect, got 0x%" PRIx64, pcc_obj->Integer.Value); *failed = true; } } static void pcc_check_buffer( fwts_framework *fw, const char *name, ACPI_BUFFER *buf) { ACPI_OBJECT *obj; bool failed = false; if (buf->Pointer == NULL) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCHNullPointer", "PCCH object %s returned a NULL pointer when evaluated.", name); return; } obj = buf->Pointer; if (obj->Type != ACPI_TYPE_PACKAGE) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCHNotPackage", "PCCH object %s did not return an ACPI_PACKAGE when evaluated.", name); return; } if (obj->Package.Count != 4) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCHExpectedTwoElements", "PCCH object %s did not return an ACPI_PACKAGE " "that contained two elements, got %" PRIu32 " instead.", name, obj->Package.Count); return; } pcc_check_shared_memory_region(fw, name, &obj->Package.Elements[0], &failed); pcc_check_doorbell_address(fw, name, &obj->Package.Elements[1], &failed); pcc_check_doorbell_preserve_mask(fw, name, &obj->Package.Elements[2], &failed); pcc_check_doorbell_write_mask(fw, name, &obj->Package.Elements[3], &failed); if (!failed) fwts_passed(fw, "PCC passed; %s returned sane looking data structures.", name); } static int pcc_test1(fwts_framework *fw) { ACPI_BUFFER buf; ACPI_STATUS ret; fwts_list *pccs; static char *name = "PCCH"; size_t name_len = strlen(name); int count = 0; fwts_log_info(fw, "This test checks the sanity of the Processor Clocking Control " "as found on some HP ProLiant machines. Most computers do not " "use this interface to control the CPU clock frequency, so this " "test will be skipped."); fwts_log_nl(fw); if ((pccs = fwts_acpi_object_get_names()) != NULL) { fwts_list_link *item; fwts_list_foreach(item, pccs) { char *pcc_name = fwts_list_data(char*, item); size_t len = strlen(pcc_name); if (strncmp(name, pcc_name + len - name_len, name_len) == 0) { ret = fwts_acpi_object_evaluate(fw, pcc_name, NULL, &buf); if (ACPI_FAILURE(ret) == AE_OK) { pcc_check_buffer(fw, pcc_name, &buf); count++; free(buf.Pointer); } } } } if (count > 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCTooManyPCCHObjects", "The firmware contains too many PCCH objects, expected 1, got %d.", count); } /* Nothing found, this is not an error */ if (count == 0) { fwts_log_info(fw, "This machine does not use Processor Clocking Control (PCC)."); fwts_infoonly(fw); } return FWTS_OK; } /* Just one big test */ static fwts_framework_minor_test pcc_tests[] = { { pcc_test1, "Processor Clocking Control (PCC) test." }, { NULL, NULL } }; static fwts_framework_ops pcc_ops = { .description = "Processor Clocking Control (PCC) test.", .init = pcc_init, .deinit = pcc_deinit, .minor_tests = pcc_tests }; FWTS_REGISTER("pcc", &pcc_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/pcct/000077500000000000000000000000001465205512700135215ustar00rootroot00000000000000src/acpi/pcct/pcct.c000066400000000000000000000365051465205512700146270ustar00rootroot00000000000000/* * Copyright (C) 2016-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(PCCT, &table) static bool subspace_length_equal( fwts_framework *fw, const uint8_t type, const uint8_t type_size, const uint8_t length) { if (type_size != length) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCCTBadSubspaceLength", "PCCT Subspace Type %" PRId8 " must have length 0x%2.2" PRIx8 ", " "got 0x%2.2" PRIx8 " instead", type, type_size, length); return false; } return true; } static void gas_messages( fwts_framework *fw, const uint8_t type, const fwts_acpi_gas *gas, bool *passed) { char label[20]; fwts_log_info_simp_int(fw, " Address Space ID ", gas->address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", gas->register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", gas->register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", gas->access_width); fwts_log_info_simp_int(fw, " Address ", gas->address); snprintf(label, sizeof(label), "Subspace Type % " PRId8, type); fwts_acpi_space_id(fw, "PCCT", label, passed, gas->address_space_id, 3, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_MEMORY, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_IO, FWTS_GAS_ADDR_SPACE_ID_FFH); } static void gas_messages2( fwts_framework *fw, const uint8_t type, const fwts_acpi_gas *gas, bool *passed) { char label[20]; fwts_log_info_simp_int(fw, " Address Space ID ", gas->address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", gas->register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", gas->register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", gas->access_width); fwts_log_info_simp_int(fw, " Address ", gas->address); snprintf(label, sizeof(label), "Subspace Type % " PRId8, type); fwts_acpi_space_id(fw, "PCCT", label, passed, gas->address_space_id, 2, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_MEMORY, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_IO); } static void memory_length( fwts_framework *fw, const uint8_t type, const uint64_t memory_range, const uint64_t min_length, bool *passed) { switch (type) { case 0 ... 2: fwts_log_info_simp_int(fw, " Length: ", memory_range); if (memory_range <= min_length) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "PCCTBadSubtypeMemoryLength", "PCCT Subspace Type %" PRId8 " must have memory length > 0x%16.16" PRIx64 ", got 0x%16.16" PRIx64 " instead", type, min_length, memory_range); } break; case 3 ... 4: fwts_log_info_simp_int(fw, " Length: ", (uint32_t)memory_range); if (memory_range <= min_length) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "PCCTBadSubtypeMemoryLength", "PCCT Subspace Type %" PRId8 " must have memory length > 0x%8.8" PRIx32 ", got 0x%8.8" PRIx32 " instead", type, (uint32_t)min_length, (uint32_t)memory_range); } break; } } static void generic_comm_test( fwts_framework *fw, const fwts_acpi_table_pcct_subspace_type_0 *entry, bool *passed) { uint64_t reserved; reserved = (uint64_t) entry->reserved[0] + ((uint64_t) entry->reserved[1] << 8) + ((uint64_t) entry->reserved[2] << 16) + ((uint64_t) entry->reserved[3] << 24) + ((uint64_t) entry->reserved[4] << 32) + ((uint64_t) entry->reserved[5] << 40); fwts_log_info_simp_int(fw, " Reserved: ", reserved); fwts_log_info_simp_int(fw, " Base Address: ", entry->base_address); memory_length(fw, entry->header.type, entry->length, 8, passed); fwts_log_info_verbatim(fw, " Doorbell Register:"); gas_messages2(fw, entry->header.type, &entry->doorbell_register, passed); fwts_log_info_simp_int(fw, " Doorbell Preserve: ", entry->doorbell_preserve); fwts_log_info_simp_int(fw, " Doorbell Write: ", entry->doorbell_write); fwts_log_info_simp_int(fw, " Nominal Latency: ", entry->nominal_latency); fwts_log_info_simp_int(fw, " Max Periodic Access Rate: ", entry->max_periodic_access_rate); fwts_log_info_simp_int(fw, " Min Request Turnaround Time: ", entry->min_request_turnaround_time); } static void hw_reduced_comm_test_type1( fwts_framework *fw, const fwts_acpi_table_pcct_subspace_type_1 *entry, bool *passed) { fwts_log_info_simp_int(fw, " Platform Interrupt: ", entry->platform_interrupt); fwts_log_info_simp_int(fw, " Platform Interrupt Flags: ", entry->platform_interrupt_flags); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_log_info_simp_int(fw, " Base Address: ", entry->base_address); memory_length(fw, entry->header.type, entry->length, 8, passed); fwts_log_info_verbatim(fw, " Doorbell Register:"); gas_messages(fw, entry->header.type, &entry->doorbell_register, passed); fwts_log_info_simp_int(fw, " Doorbell Preserve: ", entry->doorbell_preserve); fwts_log_info_simp_int(fw, " Doorbell Write: ", entry->doorbell_write); fwts_log_info_simp_int(fw, " Nominal Latency: ", entry->nominal_latency); fwts_log_info_simp_int(fw, " Max Periodic Access Rate: ", entry->max_periodic_access_rate); fwts_log_info_simp_int(fw, " Min Request Turnaround Time: ", entry->min_request_turnaround_time); fwts_acpi_reserved_bits("PCCT", "Platform Interrupt Flags", entry->platform_interrupt_flags, 2, 7, passed); } static void hw_reduced_comm_test_type2( fwts_framework *fw, const fwts_acpi_table_pcct_subspace_type_2 *entry, bool *passed) { fwts_log_info_simp_int(fw, " Platform Interrupt: ", entry->platform_interrupt); fwts_log_info_simp_int(fw, " Platform Interrupt Flags: ", entry->platform_interrupt_flags); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_log_info_simp_int(fw, " Base Address: ", entry->base_address); memory_length(fw, entry->header.type, entry->length, 8, passed); fwts_log_info_verbatim(fw, " Doorbell Register:"); gas_messages(fw, entry->header.type, &entry->doorbell_register, passed); fwts_log_info_simp_int(fw, " Doorbell Preserve: ", entry->doorbell_preserve); fwts_log_info_simp_int(fw, " Doorbell Write: ", entry->doorbell_write); fwts_log_info_simp_int(fw, " Nominal Latency: ", entry->nominal_latency); fwts_log_info_simp_int(fw, " Max Periodic Access Rate: ", entry->max_periodic_access_rate); fwts_log_info_simp_int(fw, " Min Request Turnaround Time: ", entry->min_request_turnaround_time); fwts_log_info_verbatim(fw, " Platform Interrupt Ack Register:"); gas_messages(fw, entry->header.type, &entry->platform_ack_register, passed); fwts_log_info_simp_int(fw, " Platform Ack Preserve: ", entry->platform_ack_preserve); fwts_log_info_simp_int(fw, " Platform Ack Write: ", entry->platform_ack_write); fwts_acpi_reserved_bits("PCCT", "Platform Interrupt Flags", entry->platform_interrupt_flags, 2, 7, passed); } static void extended_pcc_test( fwts_framework *fw, const fwts_acpi_table_pcct_subspace_type_3_4 *entry, bool *passed) { fwts_log_info_simp_int(fw, " Platform Interrupt: ", entry->platform_interrupt); fwts_log_info_simp_int(fw, " Platform Interrupt Flags: ", entry->platform_interrupt_flags); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved1); fwts_log_info_simp_int(fw, " Base Address: ", entry->base_address); memory_length(fw, entry->header.type, entry->length, 16, passed); fwts_log_info_verbatim(fw, " Doorbell Register:"); gas_messages(fw, entry->header.type, &entry->doorbell_register, passed); fwts_log_info_simp_int(fw, " Doorbell Preserve: ", entry->doorbell_preserve); fwts_log_info_simp_int(fw, " Doorbell Write: ", entry->doorbell_write); fwts_log_info_simp_int(fw, " Nominal Latency: ", entry->nominal_latency); fwts_log_info_simp_int(fw, " Max Periodic Access Rate: ", entry->max_periodic_access_rate); fwts_log_info_simp_int(fw, " Min Request Turnaround Time: ", entry->min_request_turnaround_time); fwts_log_info_verbatim(fw, " Platform Int Ack Register:"); gas_messages(fw, entry->header.type, &entry->platform_ack_register, passed); fwts_log_info_verbatim(fw, " Platform Int Ack Preserve: 0x%16.16" PRIx64, entry->platform_ack_preserve); fwts_log_info_verbatim(fw, " Platform Int Ack Write: 0x%16.16" PRIx64, entry->platform_ack_write); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved2); fwts_log_info_verbatim(fw, " Cmd Complete Check Register:"); gas_messages(fw, entry->header.type, &entry->cmd_complete_register, passed); fwts_log_info_simp_int(fw, " Cmd Complete Check Mask: ", entry->cmd_complete_mask); fwts_log_info_verbatim(fw, " Cmd Complete Update Register:"); gas_messages(fw, entry->header.type, &entry->cmd_update_register, passed); fwts_log_info_simp_int(fw, " Cmd Complete Update Mask: ", entry->cmd_update_preserve_mask); fwts_log_info_simp_int(fw, " Cmd Complete Set Mask: ", entry->cmd_update_preserve_mask); fwts_log_info_verbatim(fw, " Error Status Register:"); gas_messages(fw, entry->header.type, &entry->error_status_register, passed); fwts_log_info_simp_int(fw, " Error Status Mask: ", entry->error_status_mask); fwts_acpi_reserved_bits("PCCT", "Platform Interrupt Flags", entry->platform_interrupt_flags, 2, 7, passed); } static void hw_registers_based_comm_test( fwts_framework *fw, const fwts_acpi_table_pcct_subspace_type_5 *entry, bool *passed) { fwts_log_info_simp_int(fw, " Version: ", entry->version); fwts_log_info_simp_int(fw, " Base Address: ", entry->base_address); fwts_log_info_simp_int(fw, " Shared Memory Range Length: ", entry->shared_memory_range_length); fwts_log_info_verbatim(fw, " Doorbell Register:"); gas_messages2(fw, entry->header.type, &entry->doorbell_register, passed); fwts_log_info_simp_int(fw, " Doorbell Preserve: ", entry->doorbell_preserve); fwts_log_info_simp_int(fw, " Doorbell Write: ", entry->doorbell_write); fwts_log_info_verbatim(fw, " Cmd Complete Check Register:"); gas_messages2(fw, entry->header.type, &entry->cmd_complete_register, passed); fwts_log_info_simp_int(fw, " Cmd Complete Check Mask: ", entry->cmd_complete_mask); fwts_log_info_verbatim(fw, " Error Status Register:"); gas_messages2(fw, entry->header.type, &entry->error_status_register, passed); fwts_log_info_simp_int(fw, " Error Status Mask: ", entry->error_status_mask); fwts_log_info_simp_int(fw, " Nominal Latency: ", entry->nominal_latency); fwts_log_info_simp_int(fw, " Min Request Turnaround Time: ", entry->min_request_turnaround_time); } static int pcct_test1(fwts_framework *fw) { fwts_acpi_table_pcct *pcct = (fwts_acpi_table_pcct*) table->data; fwts_acpi_table_pcct_subspace_header *pcct_sub; size_t offset; bool passed = true; fwts_log_info_verbatim(fw, "PCC Table:"); fwts_log_info_simp_int(fw, " Flags: ", pcct->flags); fwts_log_info_simp_int(fw, " Reserved: ", pcct->reserved); fwts_log_nl(fw); fwts_acpi_reserved_bits("PCCT", "Flags", pcct->flags, 1, 31, &passed); fwts_acpi_reserved_zero("PCCT", "Reserved", pcct->reserved, &passed); offset = sizeof(fwts_acpi_table_pcct); pcct_sub = (fwts_acpi_table_pcct_subspace_header *) (table->data + offset); while (offset < table->length) { fwts_log_info_verbatim(fw, " PCC Subspace Structure:"); fwts_log_info_simp_int(fw, " Type: ", pcct_sub->type); fwts_log_info_simp_int(fw, " Length: ", pcct_sub->length); if (pcct_sub->type == 0) { fwts_acpi_table_pcct_subspace_type_0 *subspace = (fwts_acpi_table_pcct_subspace_type_0 *) pcct_sub; if(!subspace_length_equal(fw, 0, sizeof(fwts_acpi_table_pcct_subspace_type_0), pcct_sub->length)) { passed = false; break; } generic_comm_test(fw, subspace, &passed); } else if (pcct_sub->type == 1) { fwts_acpi_table_pcct_subspace_type_1 *subspace = (fwts_acpi_table_pcct_subspace_type_1 *) pcct_sub; if(!subspace_length_equal(fw, 0, sizeof(fwts_acpi_table_pcct_subspace_type_1), pcct_sub->length)) { passed = false; break; } hw_reduced_comm_test_type1(fw, subspace, &passed); } else if (pcct_sub->type == 2) { fwts_acpi_table_pcct_subspace_type_2 *subspace = (fwts_acpi_table_pcct_subspace_type_2 *) pcct_sub; if(!subspace_length_equal(fw, 0, sizeof(fwts_acpi_table_pcct_subspace_type_2), pcct_sub->length)) { passed = false; break; } hw_reduced_comm_test_type2(fw, subspace, &passed); } else if (pcct_sub->type == 3) { fwts_acpi_table_pcct_subspace_type_3_4 *subspace = (fwts_acpi_table_pcct_subspace_type_3_4 *) pcct_sub; if(!subspace_length_equal(fw, 0, sizeof(fwts_acpi_table_pcct_subspace_type_3_4), pcct_sub->length)) { passed = false; break; } extended_pcc_test(fw, subspace, &passed); } else if (pcct_sub->type == 4) { fwts_acpi_table_pcct_subspace_type_3_4 *subspace = (fwts_acpi_table_pcct_subspace_type_3_4 *) pcct_sub; if(!subspace_length_equal(fw, 0, sizeof(fwts_acpi_table_pcct_subspace_type_3_4), pcct_sub->length)) { passed = false; break; } if (!(pcct->flags & 0x01)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "PCCTBadFlags", "PCCT Platform Interrupt in flags must be set when subspace " "type 4 is present, got 0x%8.8" PRIx32 " instead", pcct->flags); } extended_pcc_test(fw, subspace, &passed); } else if (pcct_sub->type == 5) { fwts_acpi_table_pcct_subspace_type_5 *subspace = (fwts_acpi_table_pcct_subspace_type_5 *) pcct_sub; if(!subspace_length_equal(fw, 0, sizeof(fwts_acpi_table_pcct_subspace_type_5), pcct_sub->length)) { passed = false; break; } hw_registers_based_comm_test(fw, subspace, &passed); } else { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "PCCTBadSubType", "PCCT Subspace Structure supports type 0..4, got " "0x%2.2" PRIx8 " instead", pcct_sub->type); break; } fwts_log_nl(fw); offset += pcct_sub->length; pcct_sub = (fwts_acpi_table_pcct_subspace_header *) (table->data + offset); } if (passed) fwts_passed(fw, "No issues found in PCC table."); return FWTS_OK; } static fwts_framework_minor_test pcct_tests[] = { { pcct_test1, "Validate PCC table." }, { NULL, NULL } }; static fwts_framework_ops pcct_ops = { .description = "PCCT Platform Communications Channel test.", .init = PCCT_init, .minor_tests = pcct_tests }; FWTS_REGISTER("pcct", &pcct_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/pdtt/000077500000000000000000000000001465205512700135435ustar00rootroot00000000000000src/acpi/pdtt/pdtt.c000066400000000000000000000057401465205512700146700ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(PDTT, &table) static int pdtt_test1(fwts_framework *fw) { fwts_acpi_table_pdtt *pdtt = (fwts_acpi_table_pdtt*) table->data; fwts_acpi_table_pdtt_channel *entry; uint32_t offset, count, i; uint32_t reserved; bool passed = true; reserved = (uint32_t) pdtt->reserved[0] + ((uint32_t) pdtt->reserved[1] << 8) + ((uint32_t) pdtt->reserved[2] << 16); fwts_log_info_verbatim(fw, "PDTT Platform Debug Trigger Table:"); fwts_log_info_simp_int(fw, " Trigger Count: ", pdtt->trigger_count); fwts_log_info_verbatim(fw, " Reserved[3]: 0x%6.6" PRIx32, reserved); fwts_log_info_simp_int(fw, " Trigger ID Array Offset: ", pdtt->array_offset); fwts_acpi_reserved_zero("PDTT", "Reserved", reserved, &passed); offset = pdtt->array_offset; entry = (fwts_acpi_table_pdtt_channel *) (table->data + offset); count = (pdtt->header.length - pdtt->array_offset) / sizeof(fwts_acpi_table_pdtt_channel); if (count != pdtt->trigger_count) { passed = false; fwts_failed(fw, LOG_LEVEL_CRITICAL, "PDTTBadIDCount", "PDTT should have %" PRId8 " ids, got %" PRId8, pdtt->trigger_count, count); return FWTS_OK; } fwts_log_info_verbatim(fw, " Platform Communication Channel IDs"); for (i = 0; i < pdtt->trigger_count; i++) { fwts_log_info_simp_int(fw, " Sub channel ID: ", entry->sub_channel_id); fwts_log_info_simp_int(fw, " Flags: ", entry->flags); fwts_acpi_reserved_bits("PDTT", "Flags", entry->flags, 3, 7, &passed); if ((offset += sizeof(fwts_acpi_table_pdtt_channel)) > table->length) { passed = false; fwts_failed(fw, LOG_LEVEL_CRITICAL, "PDTTBadTableLength", "PDTT has more channel IDs than its size can handle"); break; } entry = (fwts_acpi_table_pdtt_channel *) (table->data + offset); } fwts_log_nl(fw); if (passed) fwts_passed(fw, "No issues found in PDTT table."); return FWTS_OK; } static fwts_framework_minor_test pdtt_tests[] = { { pdtt_test1, "Validate PDTT table." }, { NULL, NULL } }; static fwts_framework_ops pdtt_ops = { .description = "PDTT Platform Debug Trigger Table test.", .init = PDTT_init, .minor_tests = pdtt_tests }; FWTS_REGISTER("pdtt", &pdtt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/phat/000077500000000000000000000000001465205512700135245ustar00rootroot00000000000000src/acpi/phat/phat.c000066400000000000000000000141551465205512700146320ustar00rootroot00000000000000/* * Copyright (C) 2021-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include #include "fwts_uefi.h" static const char reset_reason_guid[] = "7A014CE2-F263-4B77-B88A-E6336B782C14"; static fwts_acpi_table_info *table; acpi_table_init(PHAT, &table) static void print_record_header( fwts_framework *fw, const fwts_acpi_table_phat_header *header) { fwts_log_info_simp_int(fw, " Type: ", header->type); fwts_log_info_simp_int(fw, " Record Length: ", header->length); fwts_log_info_simp_int(fw, " Revision: ", header->revision); } static void phat_version_test( fwts_framework *fw, fwts_acpi_table_phat_version *entry, uint32_t offset, bool *passed) { uint32_t reserved, i; offset += sizeof(fwts_acpi_table_phat_version); reserved = entry->reserved[0] + (entry->reserved[1] << 8) + (entry->reserved[2] << 16); fwts_log_info_verbatim(fw, " Firmware Version Data Record (Type 0):"); print_record_header(fw, &entry->header); fwts_log_info_simp_int(fw, " Reserved: ", reserved); fwts_log_info_simp_int(fw, " Record Count: ", entry->element_count); for (i = 0 ; i < entry->element_count; i++) { char guid[37]; /* stop if element is outside the table */ offset += sizeof(fwts_acpi_table_phat_version_elem); if (fwts_acpi_structure_range(fw, "PHAT", table->length, offset)) { *passed = false; break; } fwts_acpi_table_phat_version_elem *element = (fwts_acpi_table_phat_version_elem *) ((char *)entry + sizeof(fwts_acpi_table_phat_version)); fwts_guid_buf_to_str(element->component_id, guid, sizeof(guid)); fwts_log_info_verbatim(fw, " Component ID: %s", guid); fwts_log_info_simp_int(fw, " Version: ", element->version); fwts_log_info_simp_int(fw, " Producer ID: ", element->producer_id); } fwts_acpi_reserved_zero("PHAT", "Reserved", reserved, passed); } static void phat_health_test( fwts_framework *fw, fwts_acpi_table_phat_health *entry, uint32_t offset, bool *passed) { uint16_t *device_path; char guid[37]; char buffer[2048]; uint8_t supported_src, source; fwts_guid_buf_to_str(entry->data_signature, guid, sizeof(guid)); device_path = (uint16_t *)((char *)entry + sizeof(fwts_acpi_table_phat_health)); fwts_log_info_verbatim(fw, " Firmware Health Data Record (Type 1):"); print_record_header(fw, &entry->header); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_log_info_simp_int(fw, " AmHealthy: ", entry->healthy); fwts_log_info_verbatim(fw, " Device Signature: %s", guid); fwts_log_info_simp_int(fw, " Device-specific Data Offset: ", entry->data_offset); fwts_uefi_str16_to_str(buffer, sizeof(buffer), device_path); fwts_log_info_verbatim(fw, " Device Path: %s", buffer); offset = offset + sizeof(fwts_acpi_table_phat_health) + (fwts_uefi_str16len(device_path) + 1) * 2; fwts_acpi_reserved_zero("PHAT", "Reserved", entry->reserved, passed); if (entry->data_offset != 0) { if (fwts_acpi_structure_range(fw, "PHAT", table->length, offset)) *passed = false; else if (entry->data_offset > entry->header.length) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "PHATOutOfRangeOffset", "PHAT Type 1's Data Offset is out of range"); *passed = false; } else { fwts_log_info_verbatim(fw, " Device-specific Data:"); fwts_hexdump_data_prefix_all(fw, (uint8_t *)entry + entry->data_offset, " ", entry->header.length - entry->data_offset); /* Check Reset Reason Health Record Supported Sources and source*/ if (strcmp(reset_reason_guid, guid) == 0) { supported_src = *((uint8_t *)entry + entry->data_offset); source = *((uint8_t *)entry + entry->data_offset + 1); fwts_acpi_reserved_bits("PHAT", "Supported Sources", supported_src, 5, 7, passed); fwts_acpi_reserved_bits("PHAT", "Source", source, 5, 7, passed); } } } } static int phat_test1(fwts_framework *fw) { fwts_acpi_table_phat_header *entry; bool passed = true; uint32_t offset; fwts_log_info_verbatim(fw, "PHAT Platform Health Assessment Table:"); entry = (fwts_acpi_table_phat_header *) (table->data + sizeof(fwts_acpi_table_phat)); offset = sizeof(fwts_acpi_table_phat); while (offset < table->length) { if (fwts_acpi_structure_length_zero(fw, "PHAT", entry->length, offset)) { passed = false; break; } if (entry->type == FWTS_PHAT_VERSION) { phat_version_test(fw, (fwts_acpi_table_phat_version *) entry, offset, &passed); } else if (entry->type == FWTS_PHAT_HEALTH) { phat_health_test(fw, (fwts_acpi_table_phat_health *) entry, offset, &passed); } else { fwts_acpi_reserved_type(fw, "PHAT", entry->type, 0, FWTS_PHAT_RESERVED, &passed); break; } /* stop if sub structure is outside the table */ offset += entry->length; if (fwts_acpi_structure_range(fw, "PHAT", table->length, offset)) { passed = false; break; } entry = (fwts_acpi_table_phat_header *) (table->data + offset); fwts_log_nl(fw); } if (passed) fwts_passed(fw, "No issues found in PHAT table."); return FWTS_OK; } static fwts_framework_minor_test phat_tests[] = { { phat_test1, "Validate PHAT table." }, { NULL, NULL } }; static fwts_framework_ops phat_ops = { .description = "PHAT Platform Health Assessment Table test.", .init = PHAT_init, .minor_tests = phat_tests }; FWTS_REGISTER("phat", &phat_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/plddump/000077500000000000000000000000001465205512700142355ustar00rootroot00000000000000src/acpi/plddump/plddump.c000066400000000000000000000163021465205512700160500ustar00rootroot00000000000000/* * Copyright (C) 2014-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include "fwts_acpi_object_eval.h" /* * plddump_init() * initialize ACPI */ static int plddump_init(fwts_framework *fw) { if (fwts_acpi_init(fw) != FWTS_OK) { fwts_log_error(fw, "Cannot initialise ACPI."); return FWTS_ERROR; } return FWTS_OK; } /* * plddump_deinit * de-intialize ACPI */ static int plddump_deinit(fwts_framework *fw) { return fwts_acpi_deinit(fw); } static inline uint64_t get_bit( const uint8_t *data, const uint32_t offset) { return (data[offset / 8] >> (offset % 8)) & 1; } static uint64_t get_bits( const uint8_t *data, const uint32_t offset, const uint32_t nbits) { uint64_t val = 0; uint32_t i; for (i = 0; i < nbits; i++) val |= (get_bit(data, offset + i) << i); return val; } static const char *yesno[] = { "No", "Yes" }; static const char *panel_surface[] = { "Top", "Bottom", "Left", "Right", "Front", "Back", "Unknown", "Out of specification" }; static const char *vertical_position[] = { "Upper", "Center", "Lower", "Unknown" }; static const char *horizontal_position[] = { "Left", "Center", "Right", "Unknown" }; static const char *shape[] = { "Round", "Oval", "Square", "Vertical Rectangle", "Horizontal Rectangle", "Vertical Trapezoid", "Horizontal Trapezoid", "Unknown", "Chamfered", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved" }; static void plddump_buffer( fwts_framework *fw, const char *name, const void *data, const uint32_t length) { fwts_log_nl(fw); fwts_log_info_verbatim(fw, "Name: %s", name); fwts_log_info_verbatim(fw, " Revision: %" PRIu64, get_bits(data, 0, 7)); fwts_log_info_verbatim(fw, " Ignore Color: %" PRIu64 " (%s)", get_bits(data, 7, 1), yesno[get_bits(data, 7, 1)]); if (!get_bits(data, 7, 1)) { fwts_log_info_verbatim(fw, " Red: 0x%2.2" PRIx64, get_bits(data, 8, 8)); fwts_log_info_verbatim(fw, " Green: 0x%2.2" PRIx64, get_bits(data, 16, 8)); fwts_log_info_verbatim(fw, " Blue: 0x%2.2" PRIx64, get_bits(data, 24, 8)); } fwts_log_info_verbatim(fw, " Width: %" PRIu64 " mm", get_bits(data, 32, 16)); fwts_log_info_verbatim(fw, " Height: %" PRIu64 " mm", get_bits(data, 48, 16)); fwts_log_info_verbatim(fw, " User Visible: %" PRIu64 " (%s)", get_bits(data, 64, 1), yesno[get_bits(data, 64, 1)]); fwts_log_info_verbatim(fw, " Dock: %" PRIu64 " (%s)", get_bits(data, 65, 1), yesno[get_bits(data, 65, 1)]); fwts_log_info_verbatim(fw, " Lid: %" PRIu64 " (%s)", get_bits(data, 66, 1), yesno[get_bits(data, 66, 1)]); fwts_log_info_verbatim(fw, " Panel Surface: %" PRIu64 " (%s)", get_bits(data, 67, 3), panel_surface[get_bits(data, 67, 3)]); if (get_bits(data, 67, 3) < 6) { fwts_log_info_verbatim(fw, " Vertical Position: %" PRIu64 " (%s)", get_bits(data, 70, 2), vertical_position[get_bits(data, 70, 2)]); fwts_log_info_verbatim(fw, " Horizontal Position: %" PRIu64 " (%s)", get_bits(data, 72, 2), horizontal_position[get_bits(data, 72, 2)]); } fwts_log_info_verbatim(fw, " Shape: %" PRIu64 " (%s)", get_bits(data, 74, 4), shape[get_bits(data, 74, 4)]); fwts_log_info_verbatim(fw, " Group Orientation: %" PRIu64, get_bits(data, 78, 1)); fwts_log_info_verbatim(fw, " Group Token: %" PRIu64, get_bits(data, 79, 8)); fwts_log_info_verbatim(fw, " Group Position: %" PRIu64, get_bits(data, 87, 8)); fwts_log_info_verbatim(fw, " Bay: %" PRIu64 " (%s)", get_bits(data, 95, 1), yesno[get_bits(data, 95, 1)]); fwts_log_info_verbatim(fw, " Ejectable: %" PRIu64 " (%s)", get_bits(data, 96, 1), yesno[get_bits(data, 96, 1)]); fwts_log_info_verbatim(fw, " OSPM Ejection Rqd: %" PRIu64 " (%s)", get_bits(data, 97, 1), yesno[get_bits(data, 97, 1)]); fwts_log_info_verbatim(fw, " Cabinet Number: %" PRIu64, get_bits(data, 98, 8)); fwts_log_info_verbatim(fw, " Card Cage Number: %" PRIu64, get_bits(data, 106, 8)); fwts_log_info_verbatim(fw, " Reference: %" PRIu64 " (%s)", get_bits(data, 114, 1), yesno[get_bits(data, 114, 1)]); fwts_log_info_verbatim(fw, " Rotation: %" PRIu64 " (%" PRIu64 " degrees)", get_bits(data, 115, 3), get_bits(data, 115, 3) * 45); fwts_log_info_verbatim(fw, " Order: %" PRIu64, get_bits(data, 119, 5)); if (length >= 20) { fwts_log_info_verbatim(fw, " Vertical Offset: %" PRIu64 " mm", get_bits(data, 128, 16)); fwts_log_info_verbatim(fw, " Horizontal Offset: %" PRIu64 " mm", get_bits(data, 144, 16)); } } static int plddump_test1(fwts_framework *fw) { fwts_list_link *item; fwts_list *objects; const size_t name_len = 4; bool found = false; if ((objects = fwts_acpi_object_get_names()) == NULL) { fwts_log_info(fw, "Cannot find any ACPI objects"); return FWTS_ERROR; } fwts_list_foreach(item, objects) { char *name = fwts_list_data(char *, item); const size_t len = strlen(name); if (!strncmp("_PLD", name + len - name_len, name_len)) { ACPI_OBJECT_LIST arg_list; ACPI_BUFFER buf; ACPI_OBJECT *obj; int ret; arg_list.Count = 0; arg_list.Pointer = NULL; ret = fwts_acpi_object_evaluate(fw, name, &arg_list, &buf); if ((ACPI_FAILURE(ret) != AE_OK) || (buf.Pointer == NULL)) continue; /* Do we have a valid buffer in the package to dump? */ obj = buf.Pointer; if ((obj->Type == ACPI_TYPE_PACKAGE) && (obj->Package.Count) && (obj->Package.Elements[0].Type == ACPI_TYPE_BUFFER) && (obj->Package.Elements[0].Buffer.Pointer != NULL) && (obj->Package.Elements[0].Buffer.Length >= 16)) { plddump_buffer(fw, name, obj->Package.Elements[0].Buffer.Pointer, obj->Package.Elements[0].Buffer.Length); found = true; } free(buf.Pointer); } } if (!found) fwts_log_info_verbatim(fw, "No _PLD objects found."); return FWTS_OK; } static fwts_framework_minor_test plddump_tests[] = { { plddump_test1, "Dump ACPI _PLD (Physical Device Location)." }, { NULL, NULL } }; static fwts_framework_ops plddump_ops = { .description = "Dump ACPI _PLD (Physical Device Location).", .init = plddump_init, .deinit = plddump_deinit, .minor_tests = plddump_tests }; FWTS_REGISTER("plddump", &plddump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS) #endif src/acpi/pmtt/000077500000000000000000000000001465205512700135545ustar00rootroot00000000000000src/acpi/pmtt/pmtt.c000066400000000000000000000154661465205512700147200ustar00rootroot00000000000000/* * Copyright (C) 2016-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static void pmtt_memory_device(fwts_framework *fw, fwts_acpi_table_pmtt_header *entry, uint32_t offset, bool *passed); static fwts_acpi_table_info *table; acpi_table_init(PMTT, &table) static void pmtt_subtable_header_test( fwts_framework *fw, fwts_acpi_table_pmtt_header *entry, bool *passed) { fwts_log_info_verbatim(fw, " PMTT Subtable:"); fwts_log_info_simp_int(fw, " Type: ", entry->type); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved1); fwts_log_info_simp_int(fw, " Length: ", entry->length); fwts_log_info_simp_int(fw, " Flags: ", entry->flags); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved2); fwts_acpi_reserved_zero("PMTT", "Reserved1", entry->reserved1, passed); fwts_acpi_reserved_bits("PMTT", "Flags", entry->flags, 4, 15, passed); if ((entry->flags & 0x0C) == 0x0C) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "PMTTBadFlags", "PMTT Flags's Bits[3..2] must not be 11b"); } fwts_acpi_reserved_zero("PMTT", "Reserved2", entry->reserved2, passed); } static void pmtt_physical_component_test( fwts_framework *fw, fwts_acpi_table_pmtt_physical_component *entry, bool *passed) { pmtt_subtable_header_test(fw, &entry->header, passed); fwts_log_info_simp_int(fw, " SMBIOS Handle: ", entry->bios_handle); if ((entry->bios_handle & 0xFFFF0000) != 0 && entry->bios_handle != 0xFFFFFFFF) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "PMTTBADSMBIOSHandle", "PMTT upper 2 bytes must be zero, got " "0x%8.8" PRIx32 " instead", entry->bios_handle); } } static void pmtt_controller_test( fwts_framework *fw, fwts_acpi_table_pmtt_controller *entry, uint32_t entry_offset, bool *passed) { fwts_acpi_table_pmtt_header *header; uint32_t offset = 0; pmtt_subtable_header_test(fw, &entry->header, passed); fwts_log_info_simp_int(fw, " Memory Controller ID ", entry->memory_controller_id); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_acpi_reserved_zero("PMTT", "Reserved", entry->reserved, passed); offset = sizeof(fwts_acpi_table_pmtt_controller); header = (fwts_acpi_table_pmtt_header *) (((char *) entry) + offset); while (offset < entry->header.length) { /* stop if sub-structure is outside the table */ if (fwts_acpi_structure_range(fw, "PMTT", table->length, entry_offset + offset)) { *passed = false; break; } if (fwts_acpi_structure_length_zero(fw, "PMTT", header->length, offset)) { *passed = false; break; } pmtt_memory_device(fw, header, entry_offset + offset, passed); offset += header->length; header = (fwts_acpi_table_pmtt_header *)(((char *) entry) + offset); } } static void pmtt_socket_test( fwts_framework *fw, fwts_acpi_table_pmtt_socket *entry, uint32_t entry_offset, bool *passed) { fwts_acpi_table_pmtt_header *header; uint32_t offset; pmtt_subtable_header_test(fw, &entry->header, passed); fwts_log_info_simp_int(fw, " Socket Identifier: ", entry->socket_id); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_acpi_reserved_zero("PMTT", "Reserved", entry->reserved, passed); offset = sizeof(fwts_acpi_table_pmtt_socket); header = (fwts_acpi_table_pmtt_header *) (((char *) entry) + offset); while (offset < entry->header.length) { /* stop if sub-structure is outside the table */ if (fwts_acpi_structure_range(fw, "PMTT", table->length, entry_offset + offset)) { *passed = false; break; } if (fwts_acpi_structure_length_zero(fw, "PMTT", header->length, offset)) { *passed = false; break; } pmtt_memory_device(fw, header, entry_offset + offset, passed); offset += header->length; header = (fwts_acpi_table_pmtt_header *)(((char *) entry) + offset); } } static void pmtt_memory_device( fwts_framework *fw, fwts_acpi_table_pmtt_header *entry, uint32_t offset, bool *passed) { switch(entry->type) { case FWTS_PMTT_TYPE_SOCKET: pmtt_socket_test(fw, (fwts_acpi_table_pmtt_socket *) entry, offset, passed); break; case FWTS_PMTT_TYPE_CONTROLLER: pmtt_controller_test(fw, (fwts_acpi_table_pmtt_controller *) entry, offset, passed); break; case FWTS_PMTT_TYPE_DIMM: pmtt_physical_component_test(fw, (fwts_acpi_table_pmtt_physical_component *) entry, passed); break; case FWTS_PMTT_TYPE_VENDOR_SPECIFIC: /* no tests for vendor-specific type */ break; default: *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "PMTTBadSubtableType", "PMTT must have subtable with Type 1..2 or 0xFF, got " "0x%4.4" PRIx16 " instead", entry->type); break; } } static int pmtt_test1(fwts_framework *fw) { fwts_acpi_table_pmtt *pmtt = (fwts_acpi_table_pmtt*) table->data; fwts_acpi_table_pmtt_header *entry; uint32_t offset; bool passed = true; if (pmtt->header.revision < 2) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "PMTTDeprecatedRevision", "PMTT Revision 1 has been deprecated in ACPI 6.4"); return FWTS_OK; } fwts_log_info_verbatim(fw, "PMTT Table:"); fwts_log_info_simp_int(fw, " Number of Memory Devices: ", pmtt->num_devices); entry = (fwts_acpi_table_pmtt_header *) (table->data + sizeof(fwts_acpi_table_pmtt)); offset = sizeof(fwts_acpi_table_pmtt); while (offset < table->length) { if (fwts_acpi_structure_length_zero(fw, "PMTT", entry->length, offset)) { passed = false; break; } pmtt_memory_device(fw, entry, offset, &passed); offset += entry->length; if (fwts_acpi_structure_range(fw, "PMTT", table->length, offset)) { passed = false; break; } entry = (fwts_acpi_table_pmtt_header *) (table->data + offset); fwts_log_nl(fw); } if (passed) fwts_passed(fw, "No issues found in PMTT table."); return FWTS_OK; } static fwts_framework_minor_test pmtt_tests[] = { { pmtt_test1, "Validate PMTT table." }, { NULL, NULL } }; static fwts_framework_ops pmtt_ops = { .description = "PMTT Memory Topology Table test.", .init = PMTT_init, .minor_tests = pmtt_tests }; FWTS_REGISTER("pmtt", &pmtt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/powerbutton/000077500000000000000000000000001465205512700151605ustar00rootroot00000000000000src/acpi/powerbutton/powerbutton.c000066400000000000000000000044161465205512700177210ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #include #include static int power_button_test1(fwts_framework *fw) { int fd; size_t len; char *buffer; int matching; int i; fwts_printf(fw, "==== Please press the laptop power button. ====\n"); if ((fd = fwts_acpi_event_open()) < 0) { fwts_log_error(fw, "Cannot connect to acpid."); return FWTS_ERROR; } matching = 0; for (i = 0; i <= 20; i++) { if ((buffer = fwts_acpi_event_read(fd, &len, 1)) != NULL) { if (strstr(buffer, "button/power")) { matching++; break; } free(buffer); } fwts_printf(fw, "Waiting %2.2d/20\r", 20-i); } if (matching == 0) fwts_failed(fw, LOG_LEVEL_HIGH, "NoPowerButtonEvents", "Did not detect any ACPI power buttons events while waiting for power button to be pressed."); else { char button[4096]; memset(button, 0, sizeof(button)); sscanf(buffer, "%*s %4095s", button); fwts_passed(fw, "Detected %s power button event.", button); } fwts_acpi_event_close(fd); return FWTS_OK; } static fwts_framework_minor_test power_button_tests[] = { { power_button_test1, "Test press of power button and ACPI event." }, { NULL, NULL } }; static fwts_framework_ops power_button_ops = { .description = "Interactive power_button button test.", .minor_tests = power_button_tests }; FWTS_REGISTER("power_button", &power_button_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_INTERACTIVE) #endif src/acpi/pptt/000077500000000000000000000000001465205512700135575ustar00rootroot00000000000000src/acpi/pptt/pptt.c000066400000000000000000000162531465205512700147210ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(PPTT, &table) static void pptt_processor_test( fwts_framework *fw, const fwts_acpi_table_pptt_processor *entry, const uint8_t rev, bool *passed) { fwts_log_info_verbatim(fw, " Processor hierarchy node structure (Type 0):"); fwts_log_info_simp_int(fw, " Type: ", entry->header.type); fwts_log_info_simp_int(fw, " Length: ", entry->header.length); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_log_info_simp_int(fw, " Flags: ", entry->flags); fwts_log_info_simp_int(fw, " Parent: ", entry->parent); fwts_log_info_simp_int(fw, " ACPI Processor ID: ", entry->acpi_processor_id); fwts_log_info_simp_int(fw, " Number of Private Resources: ", entry->number_priv_resources); if ((entry->header.length - sizeof(fwts_acpi_table_pptt_processor)) / 4 == entry->number_priv_resources) { uint32_t i; for (i = 0; i < entry->number_priv_resources; i++) fwts_log_info_verbatim(fw, " Private Resources[%d]: 0x%8.8" PRIx32, i, entry->private_resource[i]); } else { *passed = false; fwts_failed(fw, LOG_LEVEL_CRITICAL, "PPTTBadProcessorLength", "PPTT Processor length does not match " "0x%8.8" PRIx32 " private resources", entry->number_priv_resources); } fwts_acpi_reserved_zero("PPTT", "Reserved", entry->reserved, passed); if (rev == 1) fwts_acpi_reserved_bits("PPTT", "Flags", entry->flags, 2, 31, passed); else fwts_acpi_reserved_bits("PPTT", "Flags", entry->flags, 5, 31, passed); } static void pptt_cache_test( fwts_framework *fw, const fwts_acpi_table_pptt_cache *entry, const uint8_t rev, bool *passed) { fwts_log_info_verbatim(fw, " Cache Type Structure (Type 1):"); fwts_log_info_simp_int(fw, " Type: ", entry->header.type); fwts_log_info_simp_int(fw, " Length: ", entry->header.length); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_log_info_simp_int(fw, " Flags: ", entry->flags); fwts_log_info_simp_int(fw, " Next Level of Cache: ", entry->next_level_cache); fwts_log_info_simp_int(fw, " Size: ", entry->size); fwts_log_info_simp_int(fw, " Number of sets: ", entry->number_sets); fwts_log_info_simp_int(fw, " Associativity: ", entry->associativity); fwts_log_info_simp_int(fw, " Attributes: ", entry->attributes); fwts_log_info_simp_int(fw, " Line size: ", entry->line_size); if (rev >= 3) fwts_log_info_simp_int(fw, " Cache ID: ", entry->cache_id); fwts_acpi_reserved_zero("PPTT", "Reserved", entry->reserved, passed); if (rev == 1 || rev == 2) fwts_acpi_reserved_bits("PPTT", "Flags", entry->flags, 7, 31, passed); else fwts_acpi_reserved_bits("PPTT", "Flags", entry->flags, 8, 31, passed); fwts_acpi_reserved_bits("PPTT", "Attributes", entry->attributes, 5, 7, passed); } static void pptt_id_test( fwts_framework *fw, const fwts_acpi_table_pptt_id *entry, bool *passed) { char vendor_id[5]; memcpy(vendor_id, &entry->vendor_id, sizeof(uint32_t)); vendor_id[4] = 0; fwts_log_info_verbatim(fw, " ID structure (Type 2):"); fwts_log_info_simp_int(fw, " Type: ", entry->header.type); fwts_log_info_simp_int(fw, " Length: ", entry->header.length); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_log_info_verbatim(fw, " VENDOR_ID: %4.4s", vendor_id); fwts_log_info_simp_int(fw, " LEVEL_1_ID: ", entry->level1_id); fwts_log_info_simp_int(fw, " LEVEL_2_ID: ", entry->level2_id); fwts_log_info_simp_int(fw, " MAJOR_REV: ", entry->major_rev); fwts_log_info_simp_int(fw, " MINOR_REV: ", entry->minor_rev); fwts_log_info_simp_int(fw, " SPIN_REV: ", entry->spin_rev); fwts_acpi_reserved_zero("PPTT", "Reserved", entry->reserved, passed); } static int pptt_test1(fwts_framework *fw) { fwts_acpi_table_pptt_header *entry; fwts_acpi_table_pptt *pptt; bool passed = true; uint32_t offset; fwts_log_info_verbatim(fw, "PPTT Processor Properties Topology Table:"); pptt = (fwts_acpi_table_pptt *) table->data; entry = (fwts_acpi_table_pptt_header *) (table->data + sizeof(fwts_acpi_table_pptt)); offset = sizeof(fwts_acpi_table_pptt); while (offset < table->length) { uint32_t type_length; if (fwts_acpi_structure_length_zero(fw, "PPTT", entry->length, offset)) { passed = false; break; } if (entry->type == FWTS_PPTT_PROCESSOR) { pptt_processor_test(fw, (fwts_acpi_table_pptt_processor *) entry, pptt->header.revision, &passed); type_length = sizeof(fwts_acpi_table_pptt_processor) + ((fwts_acpi_table_pptt_processor *) entry)->number_priv_resources * 4; } else if (entry->type == FWTS_PPTT_CACHE) { pptt_cache_test(fw, (fwts_acpi_table_pptt_cache *) entry, pptt->header.revision, &passed); type_length = sizeof(fwts_acpi_table_pptt_cache); if (pptt->header.revision < 3) type_length -= sizeof(((fwts_acpi_table_pptt_cache *) entry)->cache_id); } else if (entry->type == FWTS_PPTT_ID) { fwts_log_warning(fw, "PPTT type 2 is deprecated since ACPI 6.3 Errata A."); pptt_id_test(fw, (fwts_acpi_table_pptt_id *) entry, &passed); type_length = sizeof(fwts_acpi_table_pptt_id); } else { fwts_acpi_reserved_type(fw, "PPTT", entry->type, 0, FWTS_PPTT_RESERVED, &passed); break; } if (!fwts_acpi_structure_length(fw, "PPTT", entry->type, entry->length, type_length)) { passed = false; break; } offset += entry->length; if (fwts_acpi_structure_range(fw, "PPTT", table->length, offset)) { passed = false; break; } entry = (fwts_acpi_table_pptt_header *) (table->data + offset); fwts_log_nl(fw); } if (passed) fwts_passed(fw, "No issues found in PPTT table."); return FWTS_OK; } static fwts_framework_minor_test pptt_tests[] = { { pptt_test1, "Validate PPTT table." }, { NULL, NULL } }; static fwts_framework_ops pptt_ops = { .description = "PPTT Processor Properties Topology Table test.", .init = PPTT_init, .minor_tests = pptt_tests }; FWTS_REGISTER("pptt", &pptt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI | FWTS_FLAG_SBBR) #endif src/acpi/ras2/000077500000000000000000000000001465205512700134375ustar00rootroot00000000000000src/acpi/ras2/ras2.c000066400000000000000000000061321465205512700144540ustar00rootroot00000000000000/* * Copyright (C) 2023-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(RAS2, &table) static int ras2_test1(fwts_framework *fw) { fwts_acpi_table_ras2 *ras2 = (fwts_acpi_table_ras2 *)table->data; bool passed = true; uint32_t offset; if (!fwts_acpi_table_length(fw, "RAS2", table->length, sizeof(fwts_acpi_table_ivrs))) return FWTS_OK; fwts_log_info_verbatim(fw, "RAS2 (ACPI RAS2 Feature) Table:"); offset = sizeof(fwts_acpi_table_ras2); fwts_log_info_simp_int(fw, " Reserved: ", ras2->reserved); fwts_log_info_simp_int(fw, " Number of PCC descriptors: ", ras2->num_pcc_descriptors); fwts_acpi_reserved_zero("RAS2", "Reserved", ras2->reserved, &passed); for (uint32_t i = 0; i < ras2->num_pcc_descriptors; i++) { if ((offset + sizeof(fwts_acpi_ras2_pcc_desc)) > table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "RAS2TooShort", "RAS2 table too short, PCC descriptor list exceeds the table."); passed = false; return FWTS_OK; } fwts_acpi_ras2_pcc_desc *pcc_desc = (fwts_acpi_ras2_pcc_desc *)(table->data + offset); fwts_log_info_verbatim(fw, " PCC Descriptor List:"); fwts_log_info_simp_int(fw, " PCC Identifier: ", pcc_desc->pcc_id); fwts_log_info_simp_int(fw, " Reserved: ", pcc_desc->reserved); fwts_log_info_simp_int(fw, " Feature Type: ", pcc_desc->feature_type); fwts_log_info_simp_int(fw, " Instance: ", pcc_desc->instance); fwts_acpi_reserved_zero("RAS2", "Reserved", pcc_desc->reserved, &passed); if (pcc_desc->reserved >= 0x01 && pcc_desc->feature_type <= 0x7F) { fwts_failed(fw, LOG_LEVEL_HIGH, "RAS2ReservedType", "RAS2 RAS feature types 0x01-0x7f is reserved, got 0x%" PRIx8, pcc_desc->feature_type); passed = false; } offset += sizeof(fwts_acpi_ras2_pcc_desc); } if (passed) fwts_passed(fw, "No issues found in RAS2 table."); return FWTS_OK; } static fwts_framework_minor_test ras2_tests[] = { { ras2_test1, "Validate RAS2 table." }, { NULL, NULL } }; static fwts_framework_ops ras2_ops = { .description = "ACPI RAS2 Feature Table test", .init = RAS2_init, .minor_tests = ras2_tests }; FWTS_REGISTER("ras2", &ras2_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/rasf/000077500000000000000000000000001465205512700135235ustar00rootroot00000000000000src/acpi/rasf/rasf.c000066400000000000000000000040211465205512700146170ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(RASF, &table) static int rasf_test1(fwts_framework *fw) { fwts_acpi_table_rasf *rasf = (fwts_acpi_table_rasf *) table->data; bool passed = true; fwts_log_info_verbatim(fw, "RASF (RAS Feature) Table:"); if (rasf->header.length == sizeof(fwts_acpi_table_rasf)) { uint8_t i; for (i = 0; i < 12; i++) fwts_log_info_verbatim(fw, " Channel Identifier [%2.2" PRId8 "]: 0x%2.2" PRIx8, i, rasf->platform_cc_id[i]); } else { passed = false; fwts_failed(fw, LOG_LEVEL_CRITICAL, "RASFBadLength", "RASF structure must have length 0x%8.8" PRIx32 ", got " "0x%8.8" PRIx32, (uint32_t)sizeof(fwts_acpi_table_rasf), rasf->header.length); } if (passed) fwts_passed(fw, "No issues found in RASF table."); return FWTS_OK; } static fwts_framework_minor_test rasf_tests[] = { { rasf_test1, "Validate RASF table." }, { NULL, NULL } }; static fwts_framework_ops rasf_ops = { .description = "RASF RAS Feature Table test", .init = RASF_init, .minor_tests = rasf_tests }; FWTS_REGISTER("rasf", &rasf_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/rgrt/000077500000000000000000000000001465205512700135465ustar00rootroot00000000000000src/acpi/rgrt/rgrt.c000066400000000000000000000052061465205512700146730ustar00rootroot00000000000000/* * Copyright (C) 2022-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(RGRT, &table) static void rgrt_data_hexdump(fwts_framework *fw, uint8_t *data, size_t size) { size_t i; for (i = 0; i < size; i += 16) { char buffer[128]; size_t left = size - i; fwts_dump_raw_data(buffer, sizeof(buffer), data + i, i, left > 16 ? 16 : left); fwts_log_info_verbatim(fw, " %s", buffer + 2); } } static int rgrt_test1(fwts_framework *fw) { bool passed = true; fwts_acpi_table_rgrt *rgrt = (fwts_acpi_table_rgrt *)table->data; if (!fwts_acpi_table_length(fw, "RGRT", table->length, sizeof(fwts_acpi_table_rgrt))) { passed = false; goto done; } fwts_log_info_verbatim(fw, "RGRT Regulatory Graphics Resource Table:"); fwts_log_info_simp_int(fw, " Version: ", rgrt->version); fwts_log_info_simp_int(fw, " Image Type: ", rgrt->image_type); fwts_log_info_simp_int(fw, " Reserved: ", rgrt->reserved); fwts_log_info_verbatim(fw, " Image:"); rgrt_data_hexdump(fw, rgrt->image, table->length - sizeof(fwts_acpi_table_rgrt)); fwts_acpi_fixed_value(fw, LOG_LEVEL_MEDIUM, "RGRT", "Version", rgrt->version, 1, &passed); fwts_acpi_fixed_value(fw, LOG_LEVEL_MEDIUM, "RGRT", "Image Type", rgrt->image_type, 1, &passed); fwts_acpi_reserved_zero("RGRT", "Reserved", rgrt->reserved, &passed); fwts_log_nl(fw); if (passed) fwts_passed(fw, "No issues found in RGRT table."); done: return FWTS_OK; } static fwts_framework_minor_test rgrt_tests[] = { { rgrt_test1, "Validate RGRT table." }, { NULL, NULL } }; static fwts_framework_ops rgrt_ops = { .description = "RGRT Regulatory Graphics Resource Table test", .init = RGRT_init, .minor_tests = rgrt_tests }; FWTS_REGISTER("rgrt", &rgrt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/rsdp/000077500000000000000000000000001465205512700135405ustar00rootroot00000000000000src/acpi/rsdp/rsdp.c000066400000000000000000000143331465205512700146600ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; static int rsdp_init(fwts_framework *fw) { if (fwts_acpi_find_table(fw, "RSDP", 0, &table) != FWTS_OK) { fwts_log_error(fw, "Cannot read ACPI tables."); return FWTS_ERROR; } if (!table) { /* * Really old x86 machines may not have an RSDP, but * ia64 and arm64 are both required to be UEFI, so * therefore must have an RSDP. */ if (fw->target_arch == FWTS_ARCH_X86) return FWTS_SKIP; else { fwts_log_error(fw, "ACPI RSDP is required for the " "%s target architecture.", fwts_arch_get_name(fw->target_arch)); return FWTS_ERROR; } } /* We know there is an RSDP now, so do a quick sanity check */ if (table->length == 0) { fwts_log_error(fw, "ACPI RSDP table has zero length"); return FWTS_ERROR; } return FWTS_OK; } /* * RSDP Root System Description Pointer */ static int rsdp_test1(fwts_framework *fw) { fwts_acpi_table_rsdp *rsdp = (fwts_acpi_table_rsdp *)table->data; bool passed = true; size_t i; int value; uint8_t *ptr; uint8_t checksum; /* verify first checksum */ checksum = fwts_checksum(table->data, 20); if (checksum == 0) fwts_passed(fw, "RSDP first checksum is correct"); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "RSDPBadFirstChecksum", "RSDP first checksum is incorrect: 0x%x", checksum); /* ensure oem_id only contains printable characters */ for (i = 0; i < 6; i++) { if (!isprint(rsdp->oem_id[i])) { passed = false; break; } } if (passed) fwts_passed(fw, "RSDP: oem_id contains only printable " "characters."); else { fwts_failed(fw, LOG_LEVEL_LOW, "RSDPBadOEMId", "RSDP: oem_id contains non-printable " "characters."); fwts_advice(fw, "The RSDP OEM Id is non-conforming, but this " "will not affect the system behaviour. However " "this should be fixed if possible to make the " "firmware ACPI complaint."); } /* check if revision number is valid. note: revision field for * ACPI 1.0 RSDP is 0, not 1, as per ACPI specification version * 6.2, p.122. */ if (rsdp->revision == 0 || rsdp->revision == 2) fwts_passed(fw, "RSDP: revision is %" PRIu8 ".", rsdp->revision); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "RSDPBadRevisionId", "RSDP: revision is %" PRIu8 ", expected " "value to be 0 or 2.", rsdp->revision); /* check if RSDP follows ACPI 1.0 - if so, make sure rsdt_address * is not null. */ if (rsdp->revision == 0) { if (rsdp->rsdt_address != 0) fwts_passed(fw, "RSDP: RSDP follows ACPI 1.0 " "and RsdtAddress is set."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "RSDPNullRSDTPointer", "RSDP: RSDP follows ACPI 1.0, but " "RsdtAddress isn't set."); /* all proceeding tests involve fields which are only * defined in ACPI specifications 2.0 and greater, skip * if ACPI version is 1.0 */ return FWTS_OK; } /* whether RSDT or XSDT depends arch */ if (rsdp->rsdt_address == 0 && rsdp->xsdt_address == 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "RSDPNoAddressesFound", "RSDP: either the RsdtAddress must be non-zero " "or the XsdtAddress must be non-zero. Both " "fields are zero."); else fwts_passed(fw, "RSDP: at least one of RsdtAddress or XsdtAddress " "is non-zero."); if (rsdp->rsdt_address && rsdp->xsdt_address) { fwts_log_warning(fw, "NOTE: The RSDT and XSDT are both " "defined. An operating system supporting ACPI " "1.0 should use the RSDT, otherwise it will " "use the XSDT. RSDT = 0x%" PRIu32 ", " "XSDT = 0x%" PRIu64, rsdp->rsdt_address, rsdp->xsdt_address); } passed = false; switch (fw->target_arch) { case FWTS_ARCH_X86: if (rsdp->rsdt_address != 0 || rsdp->xsdt_address != 0) passed = true; break; case FWTS_ARCH_ARM64: if (rsdp->xsdt_address != 0) passed = true; break; default: passed = true; fwts_log_advice(fw, "No clear rule for RSDT/XSDT address usage " "is provided for the %s architecture.", fwts_arch_get_name(fw->target_arch)); } if (passed) fwts_passed(fw, "RSDP: the correct RSDT/XSDT address is being " "used."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "RSDPBadAddresses", "RSDP: the wrong RSDT/XSDT address is being " "used for the %s architecture.", fwts_arch_get_name(fw->target_arch)); /* check the length field */ if (rsdp->length == 36) fwts_passed(fw, "RSDP: the table is the correct length."); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "RSDPBadLength", "RSDP: length is %d bytes but should be 36.", rsdp->length); /* verify the extended checksum */ checksum = fwts_checksum(table->data, 36); if (checksum == 0) fwts_passed(fw, "RSDP second checksum is correct"); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "RSDPBadSecondChecksum", "RSDP second checksum incorrect: 0x%x", checksum); /* the reserved field should be zero */ value = 0; for (ptr = (uint8_t *)rsdp->reserved, i = 0; i < 3; i++) value += *ptr++; passed = true; fwts_acpi_reserved_zero("RSDP", "Reserved", value, &passed); if (passed) fwts_passed(fw, "RSDP: the reserved field is zero."); return FWTS_OK; } static fwts_framework_minor_test rsdp_tests[] = { { rsdp_test1, "RSDP Root System Description Pointer test." }, { NULL, NULL } }; static fwts_framework_ops rsdp_ops = { .description = "RSDP Root System Description Pointer test.", .init = rsdp_init, .minor_tests = rsdp_tests }; FWTS_REGISTER("rsdp", &rsdp_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI | FWTS_FLAG_COMPLIANCE_ACPI) #endif src/acpi/rsdt/000077500000000000000000000000001465205512700135445ustar00rootroot00000000000000src/acpi/rsdt/rsdt.c000066400000000000000000000042571465205512700146740ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) && !(FWTS_ARCH_AARCH64) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(RSDT, &table) /* * RSDT Extended System Description Table */ static int rsdt_test1(fwts_framework *fw) { fwts_acpi_table_rsdt *rsdt = (fwts_acpi_table_rsdt*)table->data; size_t i, n; bool passed = true; n = (table->length - sizeof(fwts_acpi_table_header)) / sizeof(uint32_t); for (i = 0; i < n; i++) { if (rsdt->entries[i] == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "RSDTEntryNull", "RSDT Entry %zd is null, should not be non-zero.", i); fwts_advice(fw, "A RSDT pointer is null and therefore erroneously " "points to an invalid 32 bit ACPI table header. " "At worse this will cause the kernel to oops, at " "best the kernel may ignore this. However, it " "should be fixed where possible."); } } if (passed) fwts_passed(fw, "No issues found in RSDT table."); return FWTS_OK; } static fwts_framework_minor_test rsdt_tests[] = { { rsdt_test1, "RSDT Root System Description Table test." }, { NULL, NULL } }; static fwts_framework_ops rsdt_ops = { .description = "RSDT Root System Description Table test.", .init = RSDT_init, .minor_tests = rsdt_tests }; FWTS_REGISTER("rsdt", &rsdt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/s3/000077500000000000000000000000001465205512700131155ustar00rootroot00000000000000src/acpi/s3/s3.c000066400000000000000000001010151465205512700136040ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include "fwts.h" #include "fwts_pm_method.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #define PM_SUSPEND_PMUTILS "pm-suspend" #define PM_SUSPEND_HYBRID_PMUTILS "pm-suspend-hybrid" #define PM_SUSPEND_PATH "/sys/power/mem_sleep" #define PM_SUSPEND_LAST_HW_SLEEP "/sys/power/suspend_stats/last_hw_sleep" #define PM_SUSPEND_TOTAL_HW_SLEEP "/sys/power/suspend_stats/total_hw_sleep" #define WAKEUP_SOURCE_PATH "/sys/kernel/debug/wakeup_sources" #define INTEL_PM_S2IDLE_SLP_S0 "/sys/kernel/debug/pmc_core/slp_s0_residency_usec" #define INTEL_PM_S0IX_WARN "/sys/module/intel_pmc_core/parameters/warn_on_s0ix_failures" static char sleep_type[7]; static char sleep_type_orig[7]; static bool s0ix2_warn_enable_orig = false; static int s3_multiple = 1; /* number of s3 multiple tests to run */ static int s3_min_delay = 0; /* min time between resume and next suspend */ static int s3_max_delay = 30; /* max time between resume and next suspend */ static float s3_delay_delta = 0.5; /* amount to add to delay between each S3 tests */ static int s3_sleep_delay = 30; /* time between start of suspend and wakeup */ static bool s3_device_check = false; /* check for device config changes */ static char *s3_quirks = NULL; /* Quirks to be passed to pm-suspend */ static int s3_device_check_delay = 15; /* Time to sleep after waking up and then running device check */ static bool s3_min_max_delay = false; static float s3_suspend_time = 15.0; /* Maximum allowed suspend time */ static float s3_resume_time = 15.0; /* Maximum allowed resume time */ static bool s3_hybrid = false; static char *s3_hook = NULL; /* Hook to run after each S3 */ static char *s3_sleep_type = NULL; /* The sleep type(s3 or s2idle) */ static bool s3_wakeup_src = false; /* dump wakeup source for debug */ typedef struct { char name[32]; unsigned long active_count; unsigned long event_count; unsigned long wakeup_count; unsigned long expire_count; long int active_since; long int total_time; long int max_time; long int last_change; long int prevent_suspend_time; } wakeup_source; static int read_wakeup_source(fwts_list *source) { FILE *fp; char name[32]; unsigned long active_count; unsigned long event_count; unsigned long wakeup_count; unsigned long expire_count; long int active_since; long int total_time; long int max_time; long int last_change; long int prevent_suspend_time; int c; fwts_list_init(source); if ((fp = fopen(WAKEUP_SOURCE_PATH, "r")) == NULL) return FWTS_ERROR; /* skip first line */ while (c = fgetc(fp), c != '\n' && c != EOF); while (fscanf(fp, "%s\t%lu\t\t%lu\t\t%lu\t\t%lu\t\t%ld\t\t%ld\t\t%ld\t\t%ld\t\t%ld\n", name, &active_count, &event_count, &wakeup_count, &expire_count, &active_since, &total_time, &max_time, &last_change, &prevent_suspend_time) == 10) { wakeup_source *wakeup_source_data; wakeup_source_data = calloc(1, sizeof(wakeup_source)); if (wakeup_source_data == NULL) { fwts_list_free_items(source, free); (void)fclose(fp); return FWTS_ERROR; } memcpy(wakeup_source_data->name , name, sizeof(name)); wakeup_source_data->active_count = active_count; wakeup_source_data->event_count = event_count; wakeup_source_data->wakeup_count = wakeup_count; wakeup_source_data->expire_count = expire_count; wakeup_source_data->active_since = active_since; wakeup_source_data->total_time = total_time; wakeup_source_data->max_time = max_time; wakeup_source_data->last_change = last_change; wakeup_source_data->prevent_suspend_time = prevent_suspend_time; fwts_list_append(source, wakeup_source_data); } (void)fclose(fp); return FWTS_OK; } static void dump_wakeup_source(fwts_framework *fw, fwts_list *source) { if (fwts_list_len(source) > 0) { fwts_list_link *item; fwts_list_foreach(item, source) { wakeup_source *wakeup_source_data = fwts_list_data(wakeup_source *, item); fwts_log_info_verbatim(fw, "%s\t%lu\t%lu\t%lu\t%lu\t%ld\t%ld\t%ld\t%ld\t%ld\n", wakeup_source_data->name, wakeup_source_data->active_count, wakeup_source_data->event_count, wakeup_source_data->wakeup_count, wakeup_source_data->expire_count, wakeup_source_data->active_since, wakeup_source_data->total_time, wakeup_source_data->max_time, wakeup_source_data->last_change, wakeup_source_data->prevent_suspend_time); } } else fwts_log_info(fw, "No wakeup source found."); } static void wakeup_source_cmp(fwts_framework *fw, fwts_list *suspend_source, fwts_list *resume_source) { fwts_list_link *item1; fwts_list_link *item2; if (fwts_list_len(suspend_source) != fwts_list_len(resume_source)) { fwts_log_info_verbatim(fw, "wakeup source list length differ, cannot get wakeup sources.\n"); return; } item1 = fwts_list_head(suspend_source); item2 = fwts_list_head(resume_source); while ((item1 != NULL) && (item2 != NULL)) { wakeup_source *data1 = fwts_list_data(wakeup_source *, item1); wakeup_source *data2 = fwts_list_data(wakeup_source *, item2); if (data1->event_count < data2->event_count) { fwts_log_info_verbatim(fw, "wakeup source name: \"%s\" wakeup event was signaled.\n", data1->name); if (s3_wakeup_src) { fwts_log_info_verbatim(fw, "%s %lu %lu %lu %lu %ld %ld %ld %ld %ld\n", data1->name, data1->active_count, data1->event_count, data1->wakeup_count, data1->expire_count, data1->active_since, data1->total_time, data1->max_time, data1->last_change, data1->prevent_suspend_time); fwts_log_info_verbatim(fw, "%s %lu %lu %lu %lu %ld %ld %ld %ld %ld\n", data2->name, data2->active_count, data2->event_count, data2->wakeup_count, data2->expire_count, data2->active_since, data2->total_time, data2->max_time, data2->last_change, data2->prevent_suspend_time); } } item1 = fwts_list_next(item1); item2 = fwts_list_next(item2); } } static int s3_init(fwts_framework *fw) { char *str; /* * Pre-init - make sure wakealarm works so that we can * wake up after suspend */ if (fwts_wakealarm_test_firing(fw, 1) != FWTS_OK) { fwts_log_error(fw, "Cannot automatically wake machine up - aborting Sleep test."); fwts_failed(fw, LOG_LEVEL_MEDIUM, "BadWakeAlarmSleep", "Check if wakealarm works reliably for Sleep tests."); return FWTS_ERROR; } str = fwts_get(PM_SUSPEND_PATH); if (str && strstr(str, "[s2idle]")) { strncpy(sleep_type_orig, "s2idle", strlen("s2idle") + 1); } else { strncpy(sleep_type_orig, "deep", strlen("deep") + 1); } if (str) free(str); if (s3_sleep_type) { fwts_log_info(fw, "Override system suspend default by '%s'\n", s3_sleep_type); if (fwts_set(PM_SUSPEND_PATH, s3_sleep_type) != FWTS_OK) fwts_log_error(fw, "Cannot set the sleep type to %s, test with default type.", s3_sleep_type); } str = fwts_get(PM_SUSPEND_PATH); if (str && strstr(str, "[s2idle]")) { strncpy(sleep_type, "s2idle", strlen("s2idle") + 1); } else { strncpy(sleep_type, "S3", strlen("S3") + 1); } if (str) free(str); str = fwts_get(INTEL_PM_S0IX_WARN); if (str && strstr(str, "N")) (void)fwts_set(INTEL_PM_S0IX_WARN, "Y"); else if (str && strstr(str, "Y")) s0ix2_warn_enable_orig = true; if (str) free(str); return FWTS_OK; } static int s3_deinit(fwts_framework *fw) { char *str; FWTS_UNUSED(fw); (void)fwts_set(PM_SUSPEND_PATH, sleep_type_orig); str = fwts_get(INTEL_PM_S0IX_WARN); if (str && strstr(str, "N") && s0ix2_warn_enable_orig) (void)fwts_set(INTEL_PM_S0IX_WARN, "Y"); else if (str && strstr(str, "Y") && !s0ix2_warn_enable_orig) (void)fwts_set(INTEL_PM_S0IX_WARN, "N"); if (str) free(str); return FWTS_OK; } /* * s3_hook_exec() * run a given hook script */ static int s3_hook_exec(fwts_framework *fw, char *hook) { pid_t pid; int status, ret; pid = fork(); if (pid < 0) { fwts_log_error(fw, "Failed to fork (to run hook script), " "errno=%d (%s)\n", errno, strerror(errno)); return FWTS_ERROR; } else if (pid == 0) { /* Child */ (void)execl(hook, "", NULL); /* We only get here if execl failed */ fwts_log_error(fw, "Failed to execl '%s', " "errno=%d (%s)\n", hook, errno, strerror(errno)); return FWTS_ERROR; } /* Parent */ ret = waitpid(pid, &status, 0); if (ret < 0) { fwts_log_error(fw, "Failed waitpid on hook script, " "errno=%d (%s)\n", errno, strerror(errno)); /* Nuke child to be double sure it's gone */ (void)kill(pid, SIGKILL); } else if (WIFEXITED(status)) { fwts_log_info(fw, "Hook script '%s' returned %d\n", hook, WEXITSTATUS(status)); return WEXITSTATUS(status) ? FWTS_ERROR : FWTS_OK; } else { fwts_log_error(fw, "Hook script exited abnormally\n"); } return FWTS_ERROR; } /* Detect the best available power method */ static void detect_pm_method(fwts_pm_method_vars *fwts_settings) { #if FWTS_ENABLE_LOGIND if (s3_hybrid ? fwts_logind_can_hybrid_suspend(fwts_settings) : fwts_logind_can_suspend(fwts_settings)) fwts_settings->fw->pm_method = FWTS_PM_LOGIND; else #endif if (s3_hybrid ? fwts_sysfs_can_hybrid_suspend(fwts_settings) : fwts_sysfs_can_suspend(fwts_settings)) fwts_settings->fw->pm_method = FWTS_PM_SYSFS; else fwts_settings->fw->pm_method = FWTS_PM_PMUTILS; } #if FWTS_ENABLE_LOGIND static int wrap_logind_do_suspend(fwts_pm_method_vars *fwts_settings, const int percent, int *duration, const char *str) { FWTS_UNUSED(str); char *action = s3_hybrid ? PM_SUSPEND_HYBRID_LOGIND : PM_SUSPEND_LOGIND; fwts_progress_message(fwts_settings->fw, percent, "(Suspending)"); /* This blocks by entering a glib mainloop */ *duration = fwts_logind_wait_for_resume_from_action(fwts_settings, action, s3_min_delay); fwts_log_info(fwts_settings->fw, "%s duration = %d.", sleep_type, *duration); fwts_progress_message(fwts_settings->fw, percent, "(Resumed)"); return *duration > 0 ? 0 : 1; } #endif static int wrap_sysfs_do_suspend(fwts_pm_method_vars *fwts_settings, const int percent, int *duration, const char *str) { int status; FWTS_UNUSED(str); (void)fwts_klog_write(fwts_settings->fw, FWTS_SUSPEND "\n"); fwts_progress_message(fwts_settings->fw, percent, "(Suspending)"); (void)fwts_klog_write(fwts_settings->fw, FWTS_SUSPEND "\n"); (void)fwts_klog_write(fwts_settings->fw, "Starting fwts suspend\n"); time(&(fwts_settings->t_start)); status = fwts_sysfs_do_suspend(fwts_settings, s3_hybrid); (void)fwts_klog_write(fwts_settings->fw, FWTS_RESUME "\n"); (void)fwts_klog_write(fwts_settings->fw, "Finished fwts resume\n"); time(&(fwts_settings->t_end)); fwts_progress_message(fwts_settings->fw, percent, "(Resumed)"); *duration = (int)(fwts_settings->t_end - fwts_settings->t_start); return status; } static int wrap_pmutils_do_suspend(fwts_pm_method_vars *fwts_settings, const int percent, int *duration, const char *command) { int status = 0; (void)fwts_klog_write(fwts_settings->fw, FWTS_SUSPEND "\n"); fwts_progress_message(fwts_settings->fw, percent, "(Suspending)"); (void)fwts_klog_write(fwts_settings->fw, FWTS_SUSPEND "\n"); (void)fwts_klog_write(fwts_settings->fw, "Starting fwts suspend\n"); (void)fwts_klog_write(fwts_settings->fw, FWTS_SUSPEND "\n"); time(&(fwts_settings->t_start)); (void)fwts_exec(command, &status); (void)fwts_klog_write(fwts_settings->fw, FWTS_RESUME "\n"); (void)fwts_klog_write(fwts_settings->fw, "Finished fwts resume\n"); time(&(fwts_settings->t_end)); fwts_progress_message(fwts_settings->fw, percent, "(Resumed)"); *duration = (int)(fwts_settings->t_end - fwts_settings->t_start); return status; } static uint64_t get_uint64_sysfs(const char *path) { uint64_t val; char *str; str = fwts_get(path); if (!str) return 0; val = atoll(str); free(str); return val; } /* * get_last_s2idle_residency() * * Returns: * - Hardware sleep residency from the last sleep cycle * - 0 if it is not available * */ static uint64_t get_last_s2idle_residency(void) { if (access(PM_SUSPEND_LAST_HW_SLEEP, F_OK) != 0) return 0; return get_uint64_sysfs(PM_SUSPEND_LAST_HW_SLEEP); } /* * get_total_s2idle_residency() * @fname: Optional parameter to set the filename used to check residency * * Returns: * - Total hardware sleep residency since the system was booted * - 0 if it is not available * */ static uint64_t get_total_s2idle_residency(const char **fname) { const char *check; uint64_t val; if (access(PM_SUSPEND_TOTAL_HW_SLEEP, F_OK) == 0) check = PM_SUSPEND_TOTAL_HW_SLEEP; else check = INTEL_PM_S2IDLE_SLP_S0; val = get_uint64_sysfs(check); if (fname) *fname = check; return val; } static int s3_do_suspend_resume(fwts_framework *fw, int *hw_errors, int *pm_errors, int *hook_errors, int *s2idle_errors, uint64_t *total_s2idle_residency, int delay, int percent) { fwts_hwinfo hwinfo1, hwinfo2; int status; int duration = 0; int differences; int rc = FWTS_OK; char *command = NULL; char *quirks = NULL; fwts_pm_method_vars *fwts_settings; fwts_list suspend_wakeup_soure; fwts_list resume_wakeup_soure; bool wk_src_found = false; int (*do_suspend)(fwts_pm_method_vars *, const int, int*, const char*); fwts_settings = calloc(1, sizeof(fwts_pm_method_vars)); if (fwts_settings == NULL) return FWTS_OUT_OF_MEMORY; fwts_settings->fw = fw; if (fw->pm_method == FWTS_PM_UNDEFINED) { /* Autodetection */ fwts_log_info(fw, "Detecting the power method."); detect_pm_method(fwts_settings); } switch (fw->pm_method) { #if FWTS_ENABLE_LOGIND case FWTS_PM_LOGIND: fwts_log_info(fw, "Using logind as the default power method."); if (fwts_logind_init_proxy(fwts_settings) != 0) { fwts_log_error(fw, "Failure to connect to Logind."); rc = FWTS_ERROR; goto tidy; } do_suspend = &wrap_logind_do_suspend; break; #endif case FWTS_PM_PMUTILS: fwts_log_info(fw, "Using pm-utils as the default power method."); do_suspend = &wrap_pmutils_do_suspend; break; case FWTS_PM_SYSFS: fwts_log_info(fw, "Using sysfs as the default power method."); do_suspend = &wrap_sysfs_do_suspend; break; default: /* This should never happen */ fwts_log_info(fw, "Using sysfs as the default power method."); do_suspend = &wrap_sysfs_do_suspend; break; } if (s3_device_check) fwts_hwinfo_get(fw, &hwinfo1); /* Format up pm-suspend command with optional quirking arguments */ if (fw->pm_method == FWTS_PM_PMUTILS) { if (s3_hybrid) { if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND_HYBRID_PMUTILS)) == NULL) { rc = FWTS_OUT_OF_MEMORY; goto tidy; } } else { if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND_PMUTILS)) == NULL) { rc = FWTS_OUT_OF_MEMORY; goto tidy; } } /* For now we only support quirks with pm-utils */ if (s3_quirks) { if ((command = fwts_realloc_strcat(command, " ")) == NULL) { rc = FWTS_OUT_OF_MEMORY; goto tidy; } if ((quirks = fwts_args_comma_list(s3_quirks)) == NULL) { rc = FWTS_OUT_OF_MEMORY; goto tidy; } if ((command = fwts_realloc_strcat(command, quirks)) == NULL) { rc = FWTS_OUT_OF_MEMORY; goto tidy; } } } fwts_wakealarm_trigger(fw, delay); if (read_wakeup_source(&suspend_wakeup_soure) != FWTS_ERROR) { wk_src_found = true; } /* Do S3 / S2idle here */ status = do_suspend(fwts_settings, percent, &duration, command); if (wk_src_found) { if (read_wakeup_source(&resume_wakeup_soure) != FWTS_ERROR) { (void)wakeup_source_cmp(fw, &suspend_wakeup_soure, &resume_wakeup_soure); if (s3_wakeup_src) { (void)dump_wakeup_source(fw, &suspend_wakeup_soure); fwts_log_info(fw, "versus after:"); (void)dump_wakeup_source(fw, &resume_wakeup_soure); } } } fwts_log_info(fw, "pm-action returned %d after %d seconds.", status, duration); if (s3_device_check) { int i; for (i = 0; i < s3_device_check_delay; i++) { char buffer[80]; snprintf(buffer, sizeof(buffer), "(Waiting %d/%d seconds)", i+1,s3_device_check_delay); fwts_progress_message(fw, percent, buffer); sleep(1); } fwts_progress_message(fw, percent, "(Checking devices)"); fwts_hwinfo_get(fw, &hwinfo2); fwts_hwinfo_compare(fw, &hwinfo1, &hwinfo2, &differences); fwts_hwinfo_free(&hwinfo1); fwts_hwinfo_free(&hwinfo2); if (differences > 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "DevConfigDiffAfterSleep", "Found %d differences in device configuration during %s cycle.", differences, sleep_type); (*hw_errors)++; } } if (s3_hook && (s3_hook_exec(fw, s3_hook) != FWTS_OK)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "HookScriptFailed", "Error executing hook script '%s', %s cycles " "will be aborted.", s3_hook, sleep_type); (*hook_errors)++; } if (!strncmp(sleep_type, "s2idle", strlen("s2idle"))) { const char *fname; uint64_t residency = get_total_s2idle_residency(&fname); if (residency <= *total_s2idle_residency) { (*s2idle_errors)++; fwts_failed(fw, LOG_LEVEL_CRITICAL, "S2idleNotDeepest", "Expected %s to increase from %" PRIu64 ", got %" PRIu64 ".", fname, *total_s2idle_residency, residency); } *total_s2idle_residency = residency; residency = get_last_s2idle_residency(); if (duration > 10 && residency) { float pct = (float)residency / ((float)duration * 1000000) * 100.0; if (pct < 70) { (*s2idle_errors)++; fwts_failed(fw, LOG_LEVEL_HIGH, "S2idleNotDeepest", "Expected %s to be at least 70%% of the last sleep cycle, got %.2f%%.", PM_SUSPEND_LAST_HW_SLEEP, pct); } else fwts_log_info(fw, "Spent %.2f%% of %ds in hardware sleep state", pct, duration); } } if (duration < delay) { (*pm_errors)++; fwts_failed(fw, LOG_LEVEL_MEDIUM, "ShortSuspend", "Unexpected: %s slept for %d seconds, less than the expected %d seconds.", sleep_type, duration, delay); } fwts_progress_message(fw, percent, "(Checking for errors)"); if (duration > (delay*2)) { int s3_C1E_enabled; (*pm_errors)++; fwts_failed(fw, LOG_LEVEL_HIGH, "LongSuspend", "Unexpected: %s much longer than expected (%d seconds).", sleep_type, duration); s3_C1E_enabled = fwts_cpu_has_c1e(); if (s3_C1E_enabled == -1) fwts_log_error(fw, "Cannot read C1E bit\n"); else if (s3_C1E_enabled == 1) fwts_advice(fw, "Detected AMD with C1E enabled. The AMD C1E idle wait can sometimes " "produce long delays on resume. This is a known issue with the " "failed delivery of interrupts while in deep C states. " "If you have a BIOS option to disable C1E please disable this and retry. " "Alternatively, re-test with the kernel parameter \"idle=mwait\". "); } /* Add in error check for pm-suspend status */ if ((status > 0) && (status < 128)) { (*pm_errors)++; fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedPreSleep", "pm-action failed before trying to put the system " "in the requested power saving state."); } else if (status == 128) { (*pm_errors)++; fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionPowerStateSleep", "pm-action tried to put the machine in the requested " "power state but failed."); } else if (status > 128) { (*pm_errors)++; fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedSleep", "pm-action encountered an error and also failed to " "enter the requested power saving state."); } fwts_list_free_items(&suspend_wakeup_soure, free); fwts_list_free_items(&resume_wakeup_soure, free); tidy: free(command); free(quirks); free_pm_method_vars(fwts_settings); return rc; } static int s3_scan_times( fwts_framework *fw, fwts_list *klog, int *suspend_too_long, int *resume_too_long) { fwts_list_link *item; double s3_suspend_start = -1.0, s3_suspend_finish = -1.0; double s3_resume_start = -1.0, s3_resume_finish = -1.0; double previous_ts = -1.0, ts = 0.0; fwts_list_foreach(item, klog) { char *txt = (char *)item->data; char *bracket = strchr(txt, '['); size_t len = strlen(txt); if (len < 15 || bracket == NULL) continue; previous_ts = ts; /* Get log time stamp */ sscanf(bracket + 1, "%lf", &ts); if (strstr(txt, FWTS_SUSPEND) || strstr(txt, "Starting fwts suspend")) { s3_suspend_start = ts; continue; } /* Update log time if this is available */ if (strstr(txt, "PM: suspend entry")) { s3_suspend_start = ts; continue; } if (strstr(txt, FWTS_RESUME)) { s3_resume_finish = ts; continue; } /* This may be the last message we see from the kernel */ if (strstr(txt, "PM: Saving platform NVS memory")) { s3_suspend_finish = ts; continue; } /* And this may appear even later */ if (strstr(txt, "smpboot: CPU") && strstr(txt, "is now offline")) { s3_suspend_finish = ts; continue; } if (strstr(txt, "ACPI: Low-level resume complete")) { s3_resume_start = ts; if (s3_suspend_finish < 0.0) s3_suspend_finish = previous_ts; continue; } if (s3_resume_start < 0.0 && strstr(txt, "ACPI: Waking up from system sleep state S3")) { s3_resume_start = ts; if (s3_suspend_finish < 0.0) s3_suspend_finish = previous_ts; continue; } /* get log time for s2idle */ if (strstr(txt, "PM: suspend-to-idle")) { s3_suspend_finish = ts; continue; } if (strstr(txt, "Timekeeping suspended") || strstr(txt, "resume from suspend-to-idle")) { s3_resume_start = ts; if (s3_suspend_finish < 0.0) s3_suspend_finish = previous_ts; continue; } if (strstr(txt, "Restarting tasks ... done")) { s3_resume_finish = ts; break; } } fwts_log_info(fw, "Suspend/Resume Timings:"); if (s3_suspend_start > 0.0 && s3_suspend_finish > 0.0) { fwts_log_info_verbatim(fw, " Suspend: %.3f seconds.", s3_suspend_finish - s3_suspend_start); if (s3_suspend_finish - s3_suspend_start > s3_suspend_time) (*suspend_too_long)++; } else fwts_log_info_verbatim(fw, " Could not determine time to suspend."); if (s3_resume_start > 0.0 && s3_resume_finish > 0.0) { fwts_log_info_verbatim(fw, " Resume: %.3f seconds.", s3_resume_finish - s3_resume_start); if (s3_resume_finish - s3_resume_start > s3_resume_time) (*resume_too_long)++; } else fwts_log_info_verbatim(fw, " Could not determine time to resume."); return FWTS_OK; } static int s3_check_log( fwts_framework *fw, fwts_list *klog, int *errors, int *oopses, int *warn_ons, int *suspend_too_long, int *resume_too_long) { int error = 0; int oops; int warn_on; if (fwts_klog_pm_check(fw, NULL, klog, &error)) fwts_log_error(fw, "Error parsing kernel log."); *errors += error; if (fwts_klog_firmware_check(fw, NULL, klog, &error)) fwts_log_error(fw, "Error parsing kernel log."); *errors += error; if (fwts_oops_check(fw, klog, &oops, &warn_on)) fwts_log_error(fw, "Error parsing kernel log."); *oopses += oops; *warn_ons += warn_on; s3_scan_times(fw, klog, suspend_too_long, resume_too_long); return FWTS_OK; } static int s3_test_multiple(fwts_framework *fw) { int i; int klog_errors = 0; int hw_errors = 0; int pm_errors = 0; int hook_errors = 0; int klog_oopses = 0; int klog_warn_ons = 0; int s2idle_errors = 0; int suspend_too_long = 0; int resume_too_long = 0; int awake_delay = s3_min_delay * 1000; int delta = (int)(s3_delay_delta * 1000.0); uint64_t total_s2idle_residency = get_total_s2idle_residency(NULL); int pm_debug; #if FWTS_ENABLE_LOGIND #if !GLIB_CHECK_VERSION(2,35,0) /* This is for backward compatibility with old glib versions */ g_type_init(); #endif #endif (void)fwts_pm_debug_get(&pm_debug); (void)fwts_pm_debug_set(1); if (s3_multiple == 1) fwts_log_info(fw, "Defaulted to 1 test, use --s3-multiple=N to run more %s cycles\n", sleep_type); for (i = 0; i < s3_multiple; i++) { struct timeval tv; int ret, percent = (i * 100) / s3_multiple; fwts_list *klog_pre, *klog_post, *klog_diff; fwts_log_info(fw, "%s cycle %d of %d\n", sleep_type, i+1, s3_multiple); if ((klog_pre = fwts_klog_read()) == NULL) fwts_log_error(fw, "Cannot read kernel log."); ret = s3_do_suspend_resume(fw, &hw_errors, &pm_errors, &hook_errors, &s2idle_errors, &total_s2idle_residency, s3_sleep_delay, percent); if (ret == FWTS_OUT_OF_MEMORY) { fwts_log_error(fw, "%s cycle %d failed - out of memory error.", sleep_type, i+1); fwts_klog_free(klog_pre); break; } if (hook_errors > 0) { fwts_klog_free(klog_pre); break; } if ((klog_post = fwts_klog_read()) == NULL) fwts_log_error(fw, "Cannot re-read kernel log."); fwts_progress_message(fw, percent, "(Checking logs for errors)"); klog_diff = fwts_klog_find_changes(klog_pre, klog_post); if (klog_diff) s3_check_log(fw, klog_diff, &klog_errors, &klog_oopses, &klog_warn_ons, &suspend_too_long, &resume_too_long); fwts_klog_free(klog_pre); fwts_klog_free(klog_post); fwts_list_free(klog_diff, NULL); if (!s3_device_check) { char buffer[80]; int j; tv.tv_sec = 0; tv.tv_usec = (awake_delay % 1000)*1000; select(0, NULL, NULL, NULL, &tv); for (j = 0; j < awake_delay / 1000; j++) { snprintf(buffer, sizeof(buffer), "(Waiting %d/%d seconds)", j + 1, awake_delay / 1000); fwts_progress_message(fw, percent, buffer); sleep(1); } awake_delay += delta; if (awake_delay > (s3_max_delay * 1000)) awake_delay = s3_min_delay * 1000; } } /* Restore pm debug value */ if (pm_debug != -1) (void)fwts_pm_debug_set(pm_debug); fwts_log_info(fw, "Completed %s cycle(s)\n", sleep_type); if (klog_errors > 0) fwts_log_info(fw, "Found %d errors in kernel log.", klog_errors); else fwts_passed(fw, "No kernel log errors detected."); if (pm_errors > 0) fwts_log_info(fw, "Found %d PM related suspend issues.", pm_errors); else fwts_passed(fw, "No PM related suspend issues detected."); if (hw_errors > 0) fwts_log_info(fw, "Found %d device errors.", hw_errors); else fwts_passed(fw, "No device errors detected."); if (klog_oopses > 0) fwts_log_info(fw, "Found %d kernel oopses.", klog_oopses); else fwts_passed(fw, "No kernel oopses detected."); if (klog_warn_ons > 0) fwts_log_info(fw, "Found %d kernel WARN_ON warnings.", klog_warn_ons); else fwts_passed(fw, "No kernel WARN_ON warnings detected."); if (s2idle_errors > 0) fwts_log_info(fw, "Found %d s2idle errors.", s2idle_errors); else fwts_passed(fw, "No s2idle errors detected."); if ((klog_errors + pm_errors + hw_errors + klog_oopses) > 0) { fwts_log_info(fw, "Found %d errors and %d oopses doing %d suspend/resume cycle(s).", klog_errors + pm_errors + hw_errors, klog_oopses, s3_multiple); } else fwts_passed(fw, "Found no errors doing %d suspend/resume cycle(s).", s3_multiple); if (suspend_too_long > 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "SuspendTooLong", "%d suspend%s took longer than %.2f seconds.", suspend_too_long, resume_too_long == 1 ? "" : "s", s3_suspend_time); else fwts_passed(fw, "All suspends took less than %.2f seconds.", s3_suspend_time); if (resume_too_long > 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "ResumeTooLong", "%d resume%s took longer than %.2f seconds.", resume_too_long, resume_too_long == 1 ? "" : "s", s3_resume_time); else fwts_passed(fw, "All resumes took less than %.2f seconds.", s3_resume_time); return FWTS_OK; } static int s3_options_check(fwts_framework *fw) { FWTS_UNUSED(fw); if ((s3_multiple < 0) || (s3_multiple > 100000)) { fprintf(stderr, "--s3-multiple is %d, it should be 1..100000\n", s3_multiple); return FWTS_ERROR; } if ((s3_min_delay < 0) || (s3_min_delay > 3600)) { fprintf(stderr, "--s3-min-delay is %d, it cannot be less than zero or more than 1 hour!\n", s3_min_delay); return FWTS_ERROR; } if (s3_max_delay < s3_min_delay || s3_max_delay > 3600) { fprintf(stderr, "--s3-max-delay is %d, it cannot be less than --s3-min-delay or more than 1 hour!\n", s3_max_delay); return FWTS_ERROR; } if (s3_delay_delta <= 0.001) { fprintf(stderr, "--s3-delay-delta is %f, it cannot be less than 0.001\n", s3_delay_delta); return FWTS_ERROR; } if ((s3_sleep_delay < 5) || (s3_sleep_delay > 3600)) { fprintf(stderr, "--s3-sleep-delay is %d, it cannot be less than 5 seconds or more than 1 hour!\n", s3_sleep_delay); return FWTS_ERROR; } if ((s3_device_check_delay < 1) || (s3_device_check_delay > 3600)) { fprintf(stderr, "--s3-device-check-delay is %d, it cannot be less than 1 second or more than 1 hour!\n", s3_device_check_delay); return FWTS_ERROR; } if (s3_min_max_delay & s3_device_check) { fprintf(stderr, "Cannot use --s3-min-delay, --s3-max-delay, --s3-delay-delta as well as --s3-device-check, --s3-device-check-delay.\n"); return FWTS_ERROR; } if (s3_suspend_time < 0.0) { fprintf(stderr, "--s3-suspend-time too small.\n"); return FWTS_ERROR; } if (s3_resume_time < 0.0) { fprintf(stderr, "--s3-resume-time too small.\n"); return FWTS_ERROR; } if (s3_hook) { struct stat statbuf; int ret; ret = lstat(s3_hook, &statbuf); if (ret < 0) { fprintf(stderr, "--s3-resume-hook file '%s' cannot " "be checked, errno=%d (%s)\n", s3_hook, errno, strerror(errno)); return FWTS_ERROR; } if ((statbuf.st_mode & S_IXUSR) == 0) { fprintf(stderr, "--s3-resume-hook file '%s' is not " "executable\n", s3_hook); return FWTS_ERROR; } } return FWTS_OK; } static int s3_options_handler(fwts_framework *fw, int argc, char * const argv[], int option_char, int long_index) { FWTS_UNUSED(fw); FWTS_UNUSED(argc); FWTS_UNUSED(argv); switch (option_char) { case 0: switch (long_index) { case 0: s3_multiple = atoi(optarg); break; case 1: s3_min_delay = atoi(optarg); s3_min_max_delay = true; break; case 2: s3_max_delay = atoi(optarg); s3_min_max_delay = true; break; case 3: s3_delay_delta = atof(optarg); s3_min_max_delay = true; break; case 4: s3_sleep_delay = atoi(optarg); break; case 5: s3_device_check = true; break; case 6: s3_quirks = optarg; break; case 7: s3_device_check_delay = atoi(optarg); s3_device_check = true; break; case 8: s3_suspend_time = atof(optarg); break; case 9: s3_resume_time = atof(optarg); break; case 10: s3_hybrid = true; break; case 11: s3_hook = optarg; break; case 12: s3_sleep_type = optarg; break; case 13: s3_wakeup_src = true; break; } } return FWTS_OK; } static fwts_option s3_options[] = { { "s3-multiple", "", 1, "Run S3 tests multiple times, e.g. --s3-multiple=10." }, { "s3-min-delay", "", 1, "Minimum time between S3 iterations, e.g. --s3-min-delay=10" }, { "s3-max-delay", "", 1, "Maximum time between S3 iterations, e.g. --s3-max-delay=20" }, { "s3-delay-delta", "", 1, "Time to be added to delay between S3 iterations. Used in conjunction with --s3-min-delay and --s3-max-delay, e.g. --s3-delay-delta=2.5" }, { "s3-sleep-delay", "", 1, "Sleep N seconds between start of suspend and wakeup, e.g. --s3-sleep-delay=60" }, { "s3-device-check", "", 0, "Check differences between device configurations over a S3 cycle. Note we add a default of 15 seconds to allow wifi to re-associate. Cannot be used with --s3-min-delay, --s3-max-delay and --s3-delay-delta." }, { "s3-quirks", "", 1, "Comma separated list of quirk arguments to pass to pm-suspend." }, { "s3-device-check-delay", "", 1, "Sleep N seconds before we run a device check after waking up from suspend. Default is 15 seconds, e.g. --s3-device-check-delay=20" }, { "s3-suspend-time", "", 1, "Maximum expected suspend time in seconds, e.g. --s3-suspend-time=3.5" }, { "s3-resume-time", "", 1, "Maximum expected resume time in seconds, e.g. --s3-resume-time=5.1" }, { "s3-hybrid", "", 0, "Run S3 with hybrid sleep, i.e. saving system states as S4 does." }, { "s3-resume-hook hook","", 1, "Run a hook script after each S3 resume, 0 exit indicates success." }, { "s3-sleep-type", "", 1, "Set the sleep type for testing S3 or s2idle." }, { "s3-dump-wakeup-src", "", 0, "dump the all device wakeup sources suspend/resume.(For debug)"}, { NULL, NULL, 0, NULL } }; static fwts_framework_minor_test s3_tests[] = { { s3_test_multiple, "Sleep suspend/resume test." }, { NULL, NULL } }; static fwts_framework_ops s3_ops = { .description = "Sleep suspend/resume test.", .init = s3_init, .deinit = s3_deinit, .minor_tests = s3_tests, .options = s3_options, .options_handler = s3_options_handler, .options_check = s3_options_check, }; FWTS_REGISTER("s3", &s3_ops, FWTS_TEST_LATE, FWTS_FLAG_POWER_STATES | FWTS_FLAG_ROOT_PRIV) #endif src/acpi/s3power/000077500000000000000000000000001465205512700141725ustar00rootroot00000000000000src/acpi/s3power/s3power.c000066400000000000000000000304271465205512700157460ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include "fwts.h" #include "fwts_pm_method.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #include #define PM_SUSPEND "pm-suspend" static int s3power_sleep_delay = 600; /* time between start of suspend and wakeup */ static uint32_t battery_capacity_mAh; static uint32_t battery_capacity_mWh; static int s3power_adapter_offline(fwts_framework *fw, bool *offline) { int matching = 0; int not_matching = 0; if (fwts_ac_adapter_get_state(FWTS_AC_ADAPTER_ONLINE, &matching, ¬_matching) != FWTS_OK) { fwts_log_error(fw, "Cannot detect if running on AC or battery."); return FWTS_ERROR; } /* Any online, then we're not totally offlined */ *offline = matching > 0 ? false : true; return FWTS_OK; } static int s3power_wait_for_adapter_offline(fwts_framework *fw, bool *offline) { int fd; size_t len; int i; if (s3power_adapter_offline(fw, offline) == FWTS_ERROR) return FWTS_ERROR; if (*offline) return FWTS_OK; /* Already offline, so no need to wait */ if ((fd = fwts_acpi_event_open()) < 0) { fwts_log_error(fw, "Cannot connect to acpid."); return FWTS_ERROR; } fwts_printf(fw, "==== Please unplug the laptop power. ====\n"); for (i = 0; (i <= 20) && !*offline; i++) { char *buffer; if ((buffer = fwts_acpi_event_read(fd, &len, 1)) != NULL) { if (strstr(buffer, "ac_adapter") != NULL) s3power_adapter_offline(fw, offline); free(buffer); } fwts_printf(fw, "Waiting %2.2d/20\r", 20-i); } fwts_acpi_event_close(fd); return FWTS_OK; } static int s3power_get_design_capacity(fwts_framework *fw, uint32_t *capacity_mAh, uint32_t *capacity_mWh) { return fwts_battery_get_capacity(fw, FWTS_BATTERY_DESIGN_CAPACITY, FWTS_BATTERY_ALL, capacity_mAh, capacity_mWh); } static int s3power_get_remaining_capacity(fwts_framework *fw, uint32_t *capacity_mAh, uint32_t *capacity_mWh) { return fwts_battery_get_capacity(fw, FWTS_BATTERY_REMAINING_CAPACITY, FWTS_BATTERY_ALL, capacity_mAh, capacity_mWh); } static int s3power_init(fwts_framework *fw) { if (fwts_wakealarm_test_firing(fw, 1) != FWTS_OK) { fwts_log_error(fw, "Cannot automatically wake machine up - aborting S3power test."); fwts_failed(fw, LOG_LEVEL_MEDIUM, "BadWakeAlarmS3Power", "Wakealarm does not work reliably for s3power test."); return FWTS_ABORTED; } if (s3power_get_design_capacity(fw, &battery_capacity_mAh, &battery_capacity_mWh) != FWTS_OK) { fwts_log_error(fw, "Cannot determine battery capacity, aborting test."); return FWTS_ABORTED; } return FWTS_OK; } /* Detect the best available power method */ static void detect_pm_method(fwts_pm_method_vars *fwts_settings) { #if FWTS_ENABLE_LOGIND if (fwts_logind_can_suspend(fwts_settings)) fwts_settings->fw->pm_method = FWTS_PM_LOGIND; else #endif if (fwts_sysfs_can_suspend(fwts_settings)) fwts_settings->fw->pm_method = FWTS_PM_SYSFS; else fwts_settings->fw->pm_method = FWTS_PM_PMUTILS; } #if FWTS_ENABLE_LOGIND static int wrap_logind_do_suspend(fwts_pm_method_vars *fwts_settings, const int percent, int *duration, const char *str) { FWTS_UNUSED(str); fwts_progress_message(fwts_settings->fw, percent, "(Suspending)"); /* This blocks by entering a glib mainloop */ *duration = fwts_logind_wait_for_resume_from_action(fwts_settings, PM_SUSPEND_LOGIND, 0); fwts_log_info(fwts_settings->fw, "S3 duration = %d.", *duration); fwts_progress_message(fwts_settings->fw, percent, "(Resumed)"); return *duration > 0 ? 0 : 1; } #endif static int wrap_sysfs_do_suspend(fwts_pm_method_vars *fwts_settings, const int percent, int *duration, const char *str) { int status; FWTS_UNUSED(str); fwts_progress_message(fwts_settings->fw, percent, "(Suspending)"); time(&(fwts_settings->t_start)); (void)fwts_klog_write(fwts_settings->fw, "Starting fwts suspend\n"); (void)fwts_klog_write(fwts_settings->fw, FWTS_SUSPEND "\n"); status = fwts_sysfs_do_suspend(fwts_settings, false); (void)fwts_klog_write(fwts_settings->fw, FWTS_RESUME "\n"); (void)fwts_klog_write(fwts_settings->fw, "Finished fwts resume\n"); time(&(fwts_settings->t_end)); fwts_progress_message(fwts_settings->fw, percent, "(Resumed)"); *duration = (int)(fwts_settings->t_end - fwts_settings->t_start); return status; } static int wrap_pmutils_do_suspend(fwts_pm_method_vars *fwts_settings, const int percent, int *duration, const char *command) { int status = FWTS_OK; fwts_progress_message(fwts_settings->fw, percent, "(Suspending)"); time(&(fwts_settings->t_start)); (void)fwts_klog_write(fwts_settings->fw, "Starting fwts suspend\n"); (void)fwts_klog_write(fwts_settings->fw, FWTS_SUSPEND "\n"); (void)fwts_exec(command, &status); (void)fwts_klog_write(fwts_settings->fw, FWTS_RESUME "\n"); (void)fwts_klog_write(fwts_settings->fw, "Finished fwts resume\n"); time(&(fwts_settings->t_end)); fwts_progress_message(fwts_settings->fw, percent, "(Resumed)"); *duration = (int)(fwts_settings->t_end - fwts_settings->t_start); return status; } static void s3power_difference(fwts_framework *fw, uint32_t before, uint32_t after, uint32_t battery_capacity, char *units) { int32_t diff = before - after; if (before != 0) { float hourly_loss; fwts_log_info(fw, "Change in capacity: %" PRId32 " %s\n", diff, units); hourly_loss = ((float)diff * 3600.0) / (float)s3power_sleep_delay; if (diff < 0) { fwts_log_error(fw, "Negative loss of power, are you sure the machine was not charging?"); } fwts_log_info(fw, "Loss of %7.4f %s per hour.", hourly_loss, units); if ((diff > 0) && (battery_capacity > 0)) { float duration = (float)battery_capacity / hourly_loss; fwts_log_info(fw, "The %" PRIu32 " %s battery will provide %5.2f hours of suspend time.", battery_capacity, units, duration); if (duration < 24.0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "ShortSuspendLife24hrs", "Machine cannot remain suspended for 1 day."); } else if (duration < 36.0) { fwts_failed(fw, LOG_LEVEL_HIGH, "ShortSuspendLife36hrs", "Machine cannot remain suspended for 1.5 days."); } else if (duration < 48.0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ShortSuspendLife48hrs", "Machine cannot remain suspended for 2 days."); } else if (duration < 60.0) { fwts_failed(fw, LOG_LEVEL_LOW, "ShortSuspendLife60hrs", "Machine cannot remain suspended for 2.5 days."); } else { fwts_passed(fw, "Machine can remain suspended for %5.2f hours.", duration); } fwts_log_info(fw, "Note: Accuracy of results are increased with longer sleep delay durations."); } } } static int s3power_test(fwts_framework *fw) { int status; int duration; int rc = FWTS_OK; int pm_debug; bool offline; uint32_t capacity_before_mAh; uint32_t capacity_after_mAh; uint32_t capacity_before_mWh; uint32_t capacity_after_mWh; fwts_pm_method_vars *fwts_settings; int (*do_suspend)(fwts_pm_method_vars *, const int, int*, const char*); #if FWTS_ENABLE_LOGIND #if !GLIB_CHECK_VERSION(2,35,0) /* This is for backward compatibility with old glib versions */ g_type_init(); #endif #endif fwts_settings = calloc(1, sizeof(fwts_pm_method_vars)); if (fwts_settings == NULL) return FWTS_OUT_OF_MEMORY; fwts_settings->fw = fw; if (fw->pm_method == FWTS_PM_UNDEFINED) { /* Autodetection */ fwts_log_info(fw, "Detecting the power method."); detect_pm_method(fwts_settings); } switch (fw->pm_method) { #if FWTS_ENABLE_LOGIND case FWTS_PM_LOGIND: fwts_log_info(fw, "Using logind as the default power method."); if (fwts_logind_init_proxy(fwts_settings) != 0) { fwts_log_error(fw, "Failure to connect to Logind."); rc = FWTS_ERROR; goto tidy; } do_suspend = &wrap_logind_do_suspend; break; #endif case FWTS_PM_PMUTILS: fwts_log_info(fw, "Using pm-utils as the default power method."); do_suspend = &wrap_pmutils_do_suspend; break; case FWTS_PM_SYSFS: fwts_log_info(fw, "Using sysfs as the default power method."); do_suspend = &wrap_sysfs_do_suspend; break; default: /* This should never happen */ fwts_log_info(fw, "Using sysfs as the default power method."); do_suspend = &wrap_sysfs_do_suspend; break; } if (s3power_wait_for_adapter_offline(fw, &offline) == FWTS_ERROR) { fwts_log_error(fw, "Cannot check if machine is running on battery, aborting test."); rc = FWTS_ABORTED; goto tidy; } if (!offline) { fwts_log_error(fw, "Machine needs to be running on battery to run test, aborting test."); rc = FWTS_ABORTED; goto tidy; } s3power_get_remaining_capacity(fw, &capacity_before_mAh, &capacity_before_mWh); fwts_wakealarm_trigger(fw, s3power_sleep_delay); (void)fwts_pm_debug_get(&pm_debug); (void)fwts_pm_debug_set(1); /* Do S3 here */ status = do_suspend(fwts_settings, 100, &duration, PM_SUSPEND); /* Restore pm debug value */ if (pm_debug != -1) (void)fwts_pm_debug_set(pm_debug); s3power_get_remaining_capacity(fw, &capacity_after_mAh, &capacity_after_mWh); s3power_difference(fw, capacity_before_mAh, capacity_after_mAh, battery_capacity_mAh, "mAh"); s3power_difference(fw, capacity_before_mWh, capacity_after_mWh, battery_capacity_mWh, "mWh"); fwts_log_info(fw, "pm-suspend returned %d after %d seconds.", status, duration); if (duration < s3power_sleep_delay) fwts_failed(fw, LOG_LEVEL_MEDIUM, "ShortSuspend", "Unexpected: S3 slept for %d seconds, less than the expected %d seconds.", duration, s3power_sleep_delay); if (duration > (s3power_sleep_delay*2)) fwts_failed(fw, LOG_LEVEL_HIGH, "LongSuspend", "Unexpected: S3 much longer than expected (%d seconds).", duration); /* Add in error check for pm-suspend status */ if ((status > 0) && (status < 128)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "PMActionFailedPreS3", "pm-action failed before trying to put the system " "in the requested power saving state."); } else if (status == 128) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "PMActionPowerStateS3", "pm-action tried to put the machine in the requested " "power state but failed."); } else if (status > 128) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "PMActionFailedS3", "pm-action encountered an error and also failed to " "enter the requested power saving state."); } tidy: free_pm_method_vars(fwts_settings); return rc; } static int s3power_options_check(fwts_framework *fw) { FWTS_UNUSED(fw); if ((s3power_sleep_delay < 600) || (s3power_sleep_delay > 24*60*60)) { fprintf(stderr, "--s3power-sleep-delay is %d, it cannot be less than 600 seconds or more than 24 hours!\n", s3power_sleep_delay); return FWTS_ERROR; } return FWTS_OK; } static int s3power_options_handler(fwts_framework *fw, int argc, char * const argv[], int option_char, int long_index) { FWTS_UNUSED(fw); FWTS_UNUSED(argc); FWTS_UNUSED(argv); switch (option_char) { case 0: switch (long_index) { case 0: s3power_sleep_delay = atoi(optarg); break; } } return FWTS_OK; } static fwts_option s3power_options[] = { { "s3power-sleep-delay","", 1, "Sleep N seconds between start of suspend and wakeup, e.g. --s3power-sleep-delay=600" }, { NULL, NULL, 0, NULL } }; static fwts_framework_minor_test s3power_tests[] = { { s3power_test, "S3 power loss during suspend test." }, { NULL, NULL } }; static fwts_framework_ops s3power_ops = { .description = "S3 power loss during suspend test (takes minimum of 10 minutes to run).", .init = s3power_init, .minor_tests = s3power_tests, .options = s3power_options, .options_handler = s3power_options_handler, .options_check = s3power_options_check, }; FWTS_REGISTER("s3power", &s3power_ops, FWTS_TEST_LATE, FWTS_FLAG_POWER_STATES | FWTS_FLAG_ROOT_PRIV) #endif src/acpi/s3pt/000077500000000000000000000000001465205512700134615ustar00rootroot00000000000000src/acpi/s3pt/s3pt.c000066400000000000000000000100021465205512700145070ustar00rootroot00000000000000/* * Copyright (C) 2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(S3PT, &table) static int s3pt_test1(fwts_framework *fw) { fwts_acpi_s3pt_record_hdr *hdr; fwts_acpi_s3pt_resume *resume_record; fwts_acpi_s3pt_suspend *suspend_record; bool passed = true; uint32_t offset; uint16_t resume_type_count = 0; uint16_t suspend_type_count = 0; offset = sizeof(fwts_acpi_table_s3pt_header); fwts_log_info_verbatim(fw, "S3 Performance Table:"); while (offset < table->length) { hdr = (fwts_acpi_s3pt_record_hdr *)(table->data + offset); if ((offset + hdr->record_len) > table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "S3PTOutOfRangeOffset", "S3PT resume performance record offset is out of range."); passed = false; break; } switch(hdr->rt_perf_record_type) { case 0: /* Resume Performance Record Type */ resume_record = (fwts_acpi_s3pt_resume *)(table->data + offset); fwts_log_info_verbatim(fw, " Basic S3 Resume Performance Record:"); fwts_log_info_simp_int(fw, " Record Type: ", resume_record->header.rt_perf_record_type); fwts_log_info_simp_int(fw, " Record Length: ", resume_record->header.record_len); fwts_log_info_simp_int(fw, " Revision: ", resume_record->header.revision); fwts_log_info_simp_int(fw, " Resume Count: ", resume_record->resume_count); fwts_log_info_simp_int(fw, " FullResume: ", resume_record->full_resume); fwts_log_info_simp_int(fw, " AverageResume: ", resume_record->average_resume); resume_type_count++; break; case 1: /* Suspend Performance Record */ suspend_record = (fwts_acpi_s3pt_suspend *)(table->data + offset); fwts_log_info_verbatim(fw, " Basic S3 Suspend Performance Record:"); fwts_log_info_simp_int(fw, " Record Type: ", suspend_record->header.rt_perf_record_type); fwts_log_info_simp_int(fw, " Record Length: ", suspend_record->header.record_len); fwts_log_info_simp_int(fw, " Revision: ", suspend_record->header.revision); fwts_log_info_simp_int(fw, " SuspendStart: ", suspend_record->suspend_start); fwts_log_info_simp_int(fw, " SuspendEnd: ", suspend_record->suspend_end); suspend_type_count++; break; default: passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "S3PTPerformanceRecordTypeInvalid", "S3PT Performance Record Type is %" PRIu16 " which is invalid value.", hdr->rt_perf_record_type); break; } offset += hdr->record_len; fwts_log_nl(fw); } if (resume_type_count != 1) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "S3PTBadRecordTypeCount", "One of the basic S3 resume performance " "record type and only will be produced, but got %" PRIu16, resume_type_count); } if (suspend_type_count > 1) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "S3PTBadRecordTypeCount", "Zero to one of the basic S3 suspend performance " "record type will be produced, but got %" PRIu16, suspend_type_count); } if (passed) fwts_passed(fw, "No issues found in S3PT table."); return FWTS_OK; } static fwts_framework_minor_test s3pt_tests[] = { { s3pt_test1, "Validate S3PT table." }, { NULL, NULL } }; static fwts_framework_ops s3pt_ops = { .description = "S3 Performance Table test.", .init = S3PT_init, .minor_tests = s3pt_tests }; FWTS_REGISTER("s3pt", &s3pt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/s4/000077500000000000000000000000001465205512700131165ustar00rootroot00000000000000src/acpi/s4/s4.c000066400000000000000000000450231465205512700136140ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include "fwts_pm_method.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #define PM_HIBERNATE "pm-hibernate" #define FWTS_TRACING_BUFFER_SIZE "/sys/kernel/debug/tracing/buffer_size_kb" static int s4_multiple = 1; /* number of S4 multiple tests to run */ static int s4_min_delay = 0; /* min time between resume and next hibernate */ static int s4_max_delay = 30; /* max time between resume and next hibernate */ static float s4_delay_delta = 0.5; /* amount to add to delay between each S4 tests */ static int s4_sleep_delay = 90; /* delay between initiating S4 and wakeup */ static bool s4_device_check = false; /* check for device config changes */ static char *s4_quirks = NULL; /* Quirks to be passed to pm-hibernate */ static int s4_device_check_delay = 15; /* Time to sleep after waking up and then running device check */ static bool s4_min_max_delay = false; static int s4_init(fwts_framework *fw) { fwts_list* swap_devs; swap_devs = fwts_file_open_and_read("/proc/swaps"); if ((fwts_text_list_strstr(swap_devs, "/dev/") == NULL) && (fwts_text_list_strstr(swap_devs, "file") == NULL)) { fwts_list_free(swap_devs, free); fwts_failed(fw, LOG_LEVEL_MEDIUM, "NoSwap", "Cannot run hibernate test - machine appears to have NO swap."); return FWTS_ERROR; } fwts_list_free(swap_devs, free); if (fwts_wakealarm_test_firing(fw, 1)) { fwts_log_error(fw, "Cannot automatically wake machine up - aborting S4 test."); fwts_failed(fw, LOG_LEVEL_MEDIUM, "BadWakeAlarmS4", "Check if wakealarm works reliably for S4 tests."); return FWTS_ERROR; } return FWTS_OK; } static void s4_check_log(fwts_framework *fw, fwts_list *klog, int *errors, int *oopses, int *warn_ons) { int error = 0; int oops; int warn_on; /* Check for kernel errors reported in the log */ if (fwts_klog_pm_check(fw, NULL, klog, &error)) fwts_log_error(fw, "Error parsing kernel log."); *errors += error; if (fwts_klog_firmware_check(fw, NULL, klog, &error)) fwts_log_error(fw, "Error parsing kernel log."); *errors += error; if (fwts_oops_check(fw, klog, &oops, &warn_on)) fwts_log_error(fw, "Error parsing kernel log."); *oopses += oops; *warn_ons += warn_on; } /* Detect the best power method available */ static void detect_pm_method(fwts_pm_method_vars *fwts_settings) { #if FWTS_ENABLE_LOGIND if (fwts_logind_can_hibernate(fwts_settings)) fwts_settings->fw->pm_method = FWTS_PM_LOGIND; else #endif if (fwts_sysfs_can_hibernate(fwts_settings)) fwts_settings->fw->pm_method = FWTS_PM_SYSFS; else fwts_settings->fw->pm_method = FWTS_PM_PMUTILS; } #if FWTS_ENABLE_LOGIND static int wrap_logind_do_s4(fwts_pm_method_vars *fwts_settings, const int percent, int *duration, const char *str) { FWTS_UNUSED(str); char *action = PM_HIBERNATE_LOGIND; fwts_progress_message(fwts_settings->fw, percent, "(Hibernating)"); /* This blocks by entering a glib mainloop */ *duration = fwts_logind_wait_for_resume_from_action(fwts_settings, action, s4_min_delay); fwts_log_info(fwts_settings->fw, "S4 duration = %d.", *duration); fwts_progress_message(fwts_settings->fw, percent, "(Resumed)"); return *duration > 0 ? 0 : 1; } #endif static int wrap_sysfs_do_s4(fwts_pm_method_vars *fwts_settings, const int percent, int *duration, const char *str) { int status; FWTS_UNUSED(str); fwts_progress_message(fwts_settings->fw, percent, "(Hibernating)"); time(&(fwts_settings->t_start)); (void)fwts_klog_write(fwts_settings->fw, "Starting fwts hibernate\n"); (void)fwts_klog_write(fwts_settings->fw, FWTS_HIBERNATE "\n"); status = fwts_sysfs_do_hibernate(fwts_settings); (void)fwts_klog_write(fwts_settings->fw, FWTS_RESUME "\n"); (void)fwts_klog_write(fwts_settings->fw, "Finished fwts resume\n"); time(&(fwts_settings->t_end)); fwts_progress_message(fwts_settings->fw, percent, "(Resumed)"); *duration = (int)(fwts_settings->t_end - fwts_settings->t_start); return status; } static int wrap_pmutils_do_s4(fwts_pm_method_vars *fwts_settings, const int percent, int *duration, const char *command) { int status = 0; fwts_progress_message(fwts_settings->fw, percent, "(Hibernating)"); time(&(fwts_settings->t_start)); (void)fwts_klog_write(fwts_settings->fw, "Starting fwts hibernate\n"); (void)fwts_klog_write(fwts_settings->fw, FWTS_HIBERNATE "\n"); (void)fwts_exec(command, &status); (void)fwts_klog_write(fwts_settings->fw, FWTS_RESUME "\n"); (void)fwts_klog_write(fwts_settings->fw, "Finished fwts resume\n"); time(&(fwts_settings->t_end)); fwts_progress_message(fwts_settings->fw, percent, "(Resumed)"); *duration = (int)(fwts_settings->t_end - fwts_settings->t_start); return status; } static int s4_hibernate(fwts_framework *fw, int *klog_errors, int *hw_errors, int *pm_errors, int *klog_oopses, int *klog_warn_ons, int *failed_alloc_image, int percent) { fwts_list *klog_pre, *klog_post, *klog_diff; fwts_hwinfo hwinfo1, hwinfo2; int status; int duration; int differences; int rc = FWTS_OK; char *command = NULL; char *quirks = NULL; fwts_pm_method_vars *fwts_settings; int (*do_s4)(fwts_pm_method_vars *, const int, int*, const char*); fwts_settings = calloc(1, sizeof(fwts_pm_method_vars)); if (fwts_settings == NULL) return FWTS_OUT_OF_MEMORY; fwts_settings->fw = fw; if (fw->pm_method == FWTS_PM_UNDEFINED) { /* Autodetection */ fwts_log_info(fw, "Detecting the power method."); detect_pm_method(fwts_settings); } switch (fw->pm_method) { #if FWTS_ENABLE_LOGIND case FWTS_PM_LOGIND: fwts_log_info(fw, "Using logind as the default power method."); if (fwts_logind_init_proxy(fwts_settings) != 0) { fwts_log_error(fw, "Failure to connect to Logind."); rc = FWTS_ERROR; goto tidy; } do_s4 = &wrap_logind_do_s4; break; #endif case FWTS_PM_PMUTILS: fwts_log_info(fw, "Using pm-utils as the default power method."); do_s4 = &wrap_pmutils_do_s4; break; case FWTS_PM_SYSFS: fwts_log_info(fw, "Using sysfs as the default power method."); do_s4 = &wrap_sysfs_do_s4; break; default: /* This should never happen */ fwts_log_info(fw, "Using sysfs as the default power method."); do_s4 = &wrap_sysfs_do_s4; break; } if (s4_device_check) fwts_hwinfo_get(fw, &hwinfo1); if (fw->pm_method == FWTS_PM_PMUTILS) { /* Format up pm-hibernate command with optional quirking arguments */ if ((command = fwts_realloc_strcat(NULL, PM_HIBERNATE)) == NULL) { rc = FWTS_OUT_OF_MEMORY; goto tidy; } /* For now we only support quirks with pm-utils */ if (s4_quirks) { if ((command = fwts_realloc_strcat(command, " ")) == NULL) { rc = FWTS_OUT_OF_MEMORY; goto tidy; } if ((quirks = fwts_args_comma_list(s4_quirks)) == NULL) { rc = FWTS_OUT_OF_MEMORY; goto tidy; } if ((command = fwts_realloc_strcat(command, quirks)) == NULL) { rc = FWTS_OUT_OF_MEMORY; goto tidy; } } } fwts_wakealarm_trigger(fw, s4_sleep_delay); /* Do s4 here */ if ((klog_pre = fwts_klog_read()) == NULL) fwts_log_error(fw, "S4: hibernate: Cannot read kernel log."); status = do_s4(fwts_settings, percent, &duration, command); if ((klog_post = fwts_klog_read()) == NULL) fwts_log_error(fw, "S4: hibernate: Cannot re-read kernel log."); if (s4_device_check) { int i; for (i = 0; i < s4_device_check_delay; i++) { char buffer[80]; snprintf(buffer, sizeof(buffer), "(Waiting %d/%d seconds)", i+1, s4_device_check_delay); fwts_progress_message(fw, percent, buffer); sleep(1); } fwts_progress_message(fw, percent, "(Checking devices)"); fwts_hwinfo_get(fw, &hwinfo2); fwts_hwinfo_compare(fw, &hwinfo1, &hwinfo2, &differences); fwts_hwinfo_free(&hwinfo1); fwts_hwinfo_free(&hwinfo2); if (differences > 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "DevConfigDiffAfterS4", "Found %d differences in device configuration during S4 cycle.", differences); (*hw_errors)++; } } fwts_progress_message(fw, percent, "(Checking for errors)"); klog_diff = fwts_klog_find_changes(klog_pre, klog_post); s4_check_log(fw, klog_diff, klog_errors, klog_oopses, klog_warn_ons); fwts_progress_message(fw, percent, "(Checking for PM errors)"); /* Add in error check for pm-hibernate status */ if ((status > 0) && (status < 128)) { fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedPreS4", "pm-action failed before trying to put the system " "in the requested power saving state."); (*pm_errors)++; } else if (status == 128) { fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionPowerStateS4", "pm-action tried to put the machine in the requested " "power state but failed."); (*pm_errors)++; } else if (status > 128) { fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedS4", "pm-action encountered an error and also failed to " "enter the requested power saving state."); (*pm_errors)++; } if (fwts_klog_regex_find(fw, klog_diff, "Freezing user space processes.*done") < 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "UserSpaceTaskFreeze", "Failed to freeze user space processes."); (*pm_errors)++; } if (fwts_klog_regex_find(fw, klog_diff, "Freezing remaining freezable tasks.*done") < 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "KernelTaskFreeze", "Failed to freeze remaining non-user space processes."); (*pm_errors)++; } if ((fwts_klog_regex_find(fw, klog_diff, "PM: freeze of devices complete") < 1) && (fwts_klog_regex_find(fw, klog_diff, "PM: late freeze of devices complete") < 1)) { fwts_failed(fw, LOG_LEVEL_HIGH, "DeviceFreeze", "Failed to freeze devices."); (*pm_errors)++; } if (fwts_klog_regex_find(fw, klog_diff, "PM: Allocated.*kbytes") < 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "HibernateImageAlloc", "Failed to allocate memory for hibernate image."); *failed_alloc_image = 1; (*pm_errors)++; } if (fwts_klog_regex_find(fw, klog_diff, "PM: Image restored successfully") < 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "HibernateImageRestore", "Failed to restore hibernate image."); (*pm_errors)++; } fwts_klog_free(klog_pre); fwts_klog_free(klog_post); fwts_list_free(klog_diff, NULL); tidy: free(command); free(quirks); free_pm_method_vars(fwts_settings); return rc; } static int s4_test_multiple(fwts_framework *fw) { int i; int klog_errors = 0; int hw_errors = 0; int pm_errors = 0; int klog_oopses = 0; int klog_warn_ons = 0; int awake_delay = s4_min_delay * 1000; int delta = (int)(s4_delay_delta * 1000.0); int tracing_buffer_size = -1; int ret = FWTS_OK; int pm_debug; bool retried = false; #if FWTS_ENABLE_LOGIND #if !GLIB_CHECK_VERSION(2,35,0) /* This is for backward compatibility with old glib versions */ g_type_init(); #endif #endif (void)fwts_pm_debug_get(&pm_debug); (void)fwts_pm_debug_set(1); if (s4_multiple == 1) fwts_log_info(fw, "Defaulted to run 1 test, run --s4-multiple=N to run more S4 cycles\n"); for (i = 0; i < s4_multiple; i++) { struct timeval tv; int failed_alloc_image = 0; int percent = (i * 100) / s4_multiple; fwts_log_info(fw, "S4 cycle %d of %d\n",i+1,s4_multiple); if (s4_hibernate(fw, &klog_errors, &hw_errors, &pm_errors, &klog_oopses, &klog_warn_ons, &failed_alloc_image, percent) != FWTS_OK) { fwts_log_error(fw, "Aborting S4 multiple tests."); return FWTS_ERROR; } /* Sometimes we just fail at the first S4 cycle, so shrink tracing buffer size and retry */ if (failed_alloc_image) { if (fwts_get_int(FWTS_TRACING_BUFFER_SIZE, &tracing_buffer_size) != FWTS_OK) { fwts_log_error(fw, "Could not get size from %s.", FWTS_TRACING_BUFFER_SIZE); } else { if ((!retried) && (tracing_buffer_size > 4096)) { retried = true; fwts_failed(fw, LOG_LEVEL_HIGH, "TracingBufferTooBig", "/sys/kernel/debug/tracing/buffer_size_kb is set to %d Kbytes which " "may cause hibernate to fail. Programs such as ureadahead may have " "set this enable fast boot and not freed up the tracing buffer.", tracing_buffer_size); fwts_log_info(fw, "Setting tracing buffer size to 1K for subsequent tests."); (void)fwts_set("1", FWTS_TRACING_BUFFER_SIZE); failed_alloc_image = 0; if (s4_hibernate(fw, &klog_errors, &hw_errors, &pm_errors, &klog_oopses, &klog_warn_ons, &failed_alloc_image, percent) != FWTS_OK) { fwts_log_error(fw, "Aborting S4 multiple tests."); ret = FWTS_ABORTED; break; }; if (failed_alloc_image) { ret = FWTS_ABORTED; break; } } } } if (!s4_device_check) { char buffer[80]; int j; tv.tv_sec = 0; tv.tv_usec = (awake_delay % 1000)*1000; select(0, NULL, NULL, NULL, &tv); for (j = 0; j < awake_delay / 1000; j++) { snprintf(buffer, sizeof(buffer), "(Waiting %d/%d seconds)", j + 1, awake_delay / 1000); fwts_progress_message(fw, percent, buffer); sleep(1); } awake_delay += delta; if (awake_delay > (s4_max_delay * 1000)) awake_delay = s4_min_delay * 1000; } } /* Restore pm debug value */ if (pm_debug != -1) (void)fwts_pm_debug_set(pm_debug); if (tracing_buffer_size > 0) { char tmp[32]; /* Restore tracking buffer size */ snprintf(tmp, sizeof(tmp), "%d", tracing_buffer_size); (void)fwts_set(tmp, FWTS_TRACING_BUFFER_SIZE); } if (klog_errors > 0) fwts_log_info(fw, "Found %d errors in kernel log.", klog_errors); else fwts_passed(fw, "No kernel log errors detected."); if (pm_errors > 0) fwts_log_info(fw, "Found %d PM related hibernate issues.", pm_errors); else fwts_passed(fw, "No PM related hibernate issues detected."); if (hw_errors > 0) fwts_log_info(fw, "Found %d device errors.", hw_errors); else fwts_passed(fw, "No device errors detected."); if (klog_oopses > 0) fwts_log_info(fw, "Found %d kernel oopses.", klog_oopses); else fwts_passed(fw, "No kernel oopses detected."); if (klog_warn_ons > 0) fwts_log_info(fw, "Found %d kernel WARN_ON warnings.", klog_warn_ons); else fwts_passed(fw, "No kernel WARN_ON warnings detected."); /* Really passed or failed? */ if ((klog_errors + pm_errors + hw_errors + klog_oopses) > 0) { fwts_log_info(fw, "Found %d errors and %d oopses doing %d hibernate/resume cycle(s).", klog_errors + pm_errors + hw_errors, klog_oopses, s4_multiple); } else fwts_passed(fw, "Found no errors and no oopses doing %d hibernate/resume cycle(s).", s4_multiple); return ret; } static int s4_options_check(fwts_framework *fw) { FWTS_UNUSED(fw); if ((s4_multiple < 0) || (s4_multiple > 100000)) { fprintf(stderr, "--s4-multiple is %d, it should be 1..100000\n", s4_multiple); return FWTS_ERROR; } if ((s4_min_delay < 0) || (s4_min_delay > 3600)) { fprintf(stderr, "--s4-min-delay is %d, it cannot be less than zero or more than 1 hour!\n", s4_min_delay); return FWTS_ERROR; } if (s4_max_delay < s4_min_delay || s4_max_delay > 3600) { fprintf(stderr, "--s4-max-delay is %d, it cannot be less than --s4-min-delay or more than 1 hour!\n", s4_max_delay); return FWTS_ERROR; } if (s4_delay_delta <= 0.001) { fprintf(stderr, "--s4-delay-delta is %f, it cannot be less than 0.001\n", s4_delay_delta); return FWTS_ERROR; } if ((s4_sleep_delay < 10) || (s4_sleep_delay > 3600)) { fprintf(stderr, "--s4-sleep-delay is %d, it cannot be less than 10 seconds or more than 1 hour!\n", s4_sleep_delay); return FWTS_ERROR; } if ((s4_device_check_delay < 1) || (s4_device_check_delay > 3600)) { fprintf(stderr, "--s4-device-check-delay is %d, it cannot be less than 1 second or more than 1 hour!\n", s4_device_check_delay); return FWTS_ERROR; } if (s4_min_max_delay & s4_device_check) { fprintf(stderr, "Cannot use --s4-min-delay, --s4-max-delay, --s4-delay-delta as well as --s4-device-check, --s4-device-check-delay.\n"); return FWTS_ERROR; } return FWTS_OK; } static int s4_options_handler(fwts_framework *fw, int argc, char * const argv[], int option_char, int long_index) { FWTS_UNUSED(fw); FWTS_UNUSED(argc); FWTS_UNUSED(argv); switch (option_char) { case 0: switch (long_index) { case 0: s4_multiple = atoi(optarg); break; case 1: s4_min_delay = atoi(optarg); s4_min_max_delay = true; break; case 2: s4_max_delay = atoi(optarg); s4_min_max_delay = true; break; case 3: s4_delay_delta = atof(optarg); s4_min_max_delay = true; break; case 4: s4_sleep_delay = atoi(optarg); break; case 5: s4_device_check = true; break; case 6: s4_quirks = optarg; break; case 7: s4_device_check_delay = atoi(optarg); s4_device_check = true; } } return FWTS_OK; } static fwts_option s4_options[] = { { "s4-multiple", "", 1, "Run S4 tests multiple times, e.g. --s4-multiple=10." }, { "s4-min-delay", "", 1, "Minimum time between S4 iterations." }, { "s4-max-delay", "", 1, "Maximum time between S4 iterations." }, { "s4-delay-delta", "", 1, "Time to be added to delay between S4 iterations. Used in conjunction with --s4-min-delay and --s4-max-delay." }, { "s4-sleep-delay", "", 1, "Sleep N seconds between start of hibernate and wakeup." }, { "s4-device-check", "", 0, "Check differences between device configurations over a S4 cycle. Note we add a default of 15 seconds to allow wifi to re-associate. Cannot be used with --s4-min-delay, --s4-max-delay and --s4-delay-delta." }, { "s4-quirks", "", 1, "Comma separated list of quirk arguments to pass to pm-hibernate." }, { "s4-device-check-delay", "", 1, "Sleep N seconds before we run a device check after waking up from hibernate. Default is 15 seconds." }, { NULL, NULL, 0, NULL } }; static fwts_framework_minor_test s4_tests[] = { { s4_test_multiple, "S4 hibernate/resume test." }, { NULL, NULL } }; static fwts_framework_ops s4_ops = { .description = "S4 hibernate/resume test.", .init = s4_init, .minor_tests = s4_tests, .options = s4_options, .options_handler = s4_options_handler, .options_check = s4_options_check }; FWTS_REGISTER("s4", &s4_ops, FWTS_TEST_LAST, FWTS_FLAG_POWER_STATES | FWTS_FLAG_ROOT_PRIV) #endif src/acpi/sbst/000077500000000000000000000000001465205512700135435ustar00rootroot00000000000000src/acpi/sbst/sbst.c000066400000000000000000000046321465205512700146670ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(SBST,&table) /* * SBST Extended System Description Table */ static int sbst_test1(fwts_framework *fw) { fwts_acpi_table_sbst *sbst = (fwts_acpi_table_sbst*)table->data; bool passed = true; if (sbst->critical_energy_level > sbst->low_energy_level) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "SBSTEnergyLevel1", "SBST Critical Energy Level (%" PRIu32 ") " "is greater than the Low Energy Level (%" PRIu32 ").", sbst->critical_energy_level, sbst->low_energy_level); } if (sbst->low_energy_level > sbst->warning_energy_level) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "SBSTEnergeyLevel2", "SBST Low Energy Energy Level (%" PRIu32 ") " "is greater than the Warning Energy Level (%" PRIu32 ").", sbst->low_energy_level, sbst->warning_energy_level); } if (sbst->warning_energy_level == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "SBSTEnergyLevelZero", "SBST Warning Energy Level is zero, " "which is probably too low."); } if (passed) fwts_passed(fw, "No issues found in SBST table."); return FWTS_OK; } static fwts_framework_minor_test sbst_tests[] = { { sbst_test1, "SBST Smart Battery Specification Table test." }, { NULL, NULL } }; static fwts_framework_ops sbst_ops = { .description = "SBST Smart Battery Specification Table test.", .init = SBST_init, .minor_tests = sbst_tests }; FWTS_REGISTER("sbst", &sbst_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/sdei/000077500000000000000000000000001465205512700135145ustar00rootroot00000000000000src/acpi/sdei/sdei.c000066400000000000000000000040441465205512700146060ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(SDEI, &table) static int sdei_test1(fwts_framework *fw) { fwts_acpi_table_sdei *sdei = (fwts_acpi_table_sdei *) table->data; bool passed = true; fwts_log_info_verbatim(fw, "SDEI (Software Delegated Exception Interface) Table:"); /* Current spec says: * "The table consists only of a basic header with revision 1." * "Later revisions of the SDEI table may define additional fields." * * More validation will be implemented for revision 2 and later. */ switch (sdei->header.revision) { case 1: /* nothing to validate */ break; default: fwts_log_info(fw, "Unsupported SDEI Revision %" PRIu8, sdei->header.revision); break; } if (passed) fwts_passed(fw, "No issues found in SDEI table."); return FWTS_OK; } static fwts_framework_minor_test sdei_tests[] = { { sdei_test1, "Validate SDEI table." }, { NULL, NULL } }; static fwts_framework_ops sdei_ops = { .description = "SDEI Software Delegated Exception Interface Table test", .init = SDEI_init, .minor_tests = sdei_tests }; FWTS_REGISTER("sdei", &sdei_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/sdev/000077500000000000000000000000001465205512700135315ustar00rootroot00000000000000src/acpi/sdev/sdev.c000066400000000000000000000127701465205512700146450ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(SDEV, &table) static void sdev_acpi_namespace_device_test( fwts_framework *fw, const fwts_acpi_table_sdev_acpi *entry, bool *passed) { fwts_log_info_verbatim(fw, " ACPI Integrated Device (Type 0):"); fwts_log_info_simp_int(fw, " Type: ", entry->header.type); fwts_log_info_simp_int(fw, " Flags: ", entry->header.flags); if (entry->header.flags & 1) fwts_log_info_verbatim(fw, " Allow handoff to unsecure OS"); if (entry->header.flags & (1 << 1)) fwts_log_info_verbatim(fw, " Secure access components present"); fwts_log_info_simp_int(fw, " Length: ", entry->header.length); fwts_log_info_simp_int(fw, " Device Id Offset: ", entry->device_id_offset); fwts_log_info_simp_int(fw, " Device Id Length: ", entry->device_id_length); fwts_log_info_simp_int(fw, " Vendor Specific Data Offset: ", entry->vendor_offset); fwts_log_info_simp_int(fw, " Vendor Specific Data Length: ", entry->vendor_length); if (entry->header.flags & (1 << 1)) { fwts_log_info_simp_int(fw, " Secure Access Components Offset: ", entry->secure_access_offset); fwts_log_info_simp_int(fw, " Secure Access Components Length: ", entry->secure_access_length); } fwts_acpi_reserved_bits("SDEV", "Flags", entry->header.flags, 2, 15, passed); } static void sdev_pcie_endpoint_device_test( fwts_framework *fw, const fwts_acpi_table_sdev_pcie *entry, bool *passed) { fwts_log_info_verbatim(fw, " PCIe Endpoint Device (Type 1):"); fwts_log_info_simp_int(fw, " Type: ", entry->header.type); fwts_log_info_simp_int(fw, " Flags: ", entry->header.flags); fwts_log_info_simp_int(fw, " Length: ", entry->header.length); fwts_log_info_simp_int(fw, " PCI Segment Number: ", entry->segment); fwts_log_info_simp_int(fw, " Start Bus Number: ", entry->start_bus); fwts_log_info_simp_int(fw, " PCI Path Offset: ", entry->path_offset); fwts_log_info_simp_int(fw, " PCI Path Length: ", entry->path_length); fwts_log_info_simp_int(fw, " Vendor Specific Data Offset: ", entry->vendor_offset); fwts_log_info_simp_int(fw, " Vendor Specific Data Length: ", entry->vendor_length); fwts_acpi_reserved_bits("SDEV", "Flags", entry->header.flags, 1, 15, passed); } static int sdev_test1(fwts_framework *fw) { fwts_acpi_table_sdev_header *entry; bool passed = true; uint32_t offset; fwts_log_info_verbatim(fw, "SDEV Secure Devices Table:"); entry = (fwts_acpi_table_sdev_header *) (table->data + sizeof(fwts_acpi_table_sdev)); offset = sizeof(fwts_acpi_table_sdev); while (offset < table->length) { uint32_t type_length; if (fwts_acpi_structure_length_zero(fw, "SDEV", entry->length, offset)) { passed = false; break; } if (entry->type == FWTS_SDEV_TYPE_ACPI_NAMESPACE) { fwts_acpi_table_sdev_acpi *acpi = (fwts_acpi_table_sdev_acpi *) entry; sdev_acpi_namespace_device_test(fw, acpi, &passed); type_length = sizeof(fwts_acpi_table_sdev_acpi) + acpi->device_id_length + acpi->vendor_length; if (acpi->header.flags & (1 << 1)) type_length += acpi->secure_access_length; else { type_length -= (sizeof(acpi->secure_access_offset) + sizeof(acpi->secure_access_length)); } } else if (entry->type == FWTS_SDEV_TYPE_PCIE_ENDPOINT) { fwts_acpi_table_sdev_pcie *pcie = (fwts_acpi_table_sdev_pcie *) entry; sdev_pcie_endpoint_device_test(fw, pcie, &passed); type_length = sizeof(fwts_acpi_table_sdev_pcie) + pcie->path_length + pcie->vendor_length; } else { fwts_acpi_reserved_type(fw, "SDEV", entry->type, 0, FWTS_SDEV_TYPE_RESERVED, &passed); break; } if (!fwts_acpi_structure_length(fw, "SDEV", entry->type, entry->length, type_length)) { passed = false; break; } offset += entry->length; if (fwts_acpi_structure_range(fw, "SDEV", table->length, offset)) { passed = false; break; } entry = (fwts_acpi_table_sdev_header *) (table->data + offset); fwts_log_nl(fw); } fwts_log_nl(fw); if (passed) fwts_passed(fw, "No issues found in SDEV table."); return FWTS_OK; } static fwts_framework_minor_test sdev_tests[] = { { sdev_test1, "Validate SDEV table." }, { NULL, NULL } }; static fwts_framework_ops sdev_ops = { .description = "SDEV Secure Devices Table test", .init = SDEV_init, .minor_tests = sdev_tests }; FWTS_REGISTER("sdev", &sdev_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/skvl/000077500000000000000000000000001465205512700135475ustar00rootroot00000000000000src/acpi/skvl/skvl.c000066400000000000000000000047721465205512700147040ustar00rootroot00000000000000/* * Copyright (C) 2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(SKVL, &table) static int skvl_test1(fwts_framework *fw) { fwts_acpi_skvl_key_struct *key_struct; bool passed = true; uint32_t offset; fwts_acpi_table_skvl *skvl = (fwts_acpi_table_skvl *)table->data; fwts_log_info_verbatim(fw, "Storage Volume Key Location Table:"); fwts_log_info_simp_int(fw, " Key Count: ", skvl->key_count); fwts_log_nl(fw); offset = sizeof(fwts_acpi_table_skvl); for (uint32_t i = 0; i < skvl->key_count; i++) { if ((offset + sizeof(fwts_acpi_skvl_key_struct)) > table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "SKVLOutOfRangeOffset", "SKVL key structure offset is out of range."); return FWTS_OK; } key_struct = (fwts_acpi_skvl_key_struct *)(table->data + offset); fwts_log_info_verbatim(fw, " Storage Volume Key Structure: "); fwts_log_info_simp_int(fw, " Key Type: ", key_struct->key_type); fwts_acpi_fixed_value(fw, LOG_LEVEL_HIGH, "SKVL", "Key Type", key_struct->key_type, 0, &passed); fwts_log_info_simp_int(fw, " Key Format: ", key_struct->key_format); fwts_acpi_fixed_value(fw, LOG_LEVEL_HIGH, "SKVL", "Key Format", key_struct->key_format, 0, &passed); fwts_log_info_simp_int(fw, " Key Size: ", key_struct->key_size); fwts_log_info_simp_int(fw, " Key Address: ", key_struct->key_address); offset += sizeof(fwts_acpi_skvl_key_struct); fwts_log_nl(fw); } if (passed) fwts_passed(fw, "No issues found in SKVL table."); return FWTS_OK; } static fwts_framework_minor_test skvl_tests[] = { { skvl_test1, "Validate SKVL table." }, { NULL, NULL } }; static fwts_framework_ops skvl_ops = { .description = "SKVL Storage Volume Key Location Table test.", .init = SKVL_init, .minor_tests = skvl_tests }; FWTS_REGISTER("skvl", &skvl_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/slic/000077500000000000000000000000001465205512700135225ustar00rootroot00000000000000src/acpi/slic/slic.c000066400000000000000000000141611465205512700146230ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) && !(FWTS_ARCH_AARCH64) #include #include #include #include #include #define DUMP_SLIC (0) /* Disable this, just used it for debugging */ static fwts_acpi_table_info *table; acpi_table_init(SLIC, &table) /* * Software Licensing Description Table * OEM Activation 2.0 for Windows Vista Operating Systems */ static int slic_test1(fwts_framework *fw) { bool passed = true; uint8_t *ptr; size_t const slic_min_hdr_size = sizeof(fwts_acpi_table_header) + sizeof(fwts_acpi_table_slic_header); size_t length = slic_min_hdr_size; /* Size sanity check #1, got enough table to get initial header */ if (!fwts_acpi_table_length(fw, "SLIC", table->length, slic_min_hdr_size)) { passed = false; goto done; } ptr = (uint8_t *)table->data + sizeof(fwts_acpi_table_header); fwts_log_info_verbatim(fw, "Software Licensing Description Table"); while (length < table->length) { fwts_acpi_table_slic_header *hdr = (fwts_acpi_table_slic_header *)ptr; if (hdr->length < sizeof(fwts_acpi_table_slic_header)) break; #if DUMP_SLIC fwts_log_info_simp_int(fw, " Type: ", hdr->type); fwts_log_info_simp_int(fw, " Length: ", hdr->length); #endif switch (hdr->type) { case 0x0000: if (hdr->length < sizeof(fwts_acpi_table_slic_key)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SLICShortPublicKeyStructure", "SLIC Public Key Structure is only %" PRIu32 " bytes and " "should be %zu bytes in size", hdr->length, sizeof(fwts_acpi_table_slic_key)); } else { #if DUMP_SLIC fwts_acpi_table_slic_key *key = (fwts_acpi_table_slic_key *)ptr; #endif fwts_log_info(fw, "SLIC Public Key Structure has had minimal check due to proprietary nature of the table"); #if DUMP_SLIC fwts_log_info_verbatim(fw, " SLIC Public Key:\n"); fwts_log_info_simp_int(fw, " Key Type: ", key->key_type); fwts_log_info_simp_int(fw, " Version: ", key->version); fwts_log_info_simp_int(fw, " Reserved: ", key->reserved); fwts_log_info_simp_int(fw, " Algorithm: ", key->algorithm); fwts_log_info_verbatim(fw, " Magic: '%c%c%c%c'", key->magic[0], key->magic[1], key->magic[2], key->magic[3]); fwts_log_info_simp_int(fw, " Bit Length: ", key->bit_length); fwts_log_info_simp_int(fw, " Exponent: ", key->exponent); /* For the moment, don't dump the modulus */ #endif } ptr += hdr->length; length += hdr->length; break; case 0x0001: if (hdr->length < sizeof(fwts_acpi_table_slic_marker)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SLICShortWindowsMarkerStructure", "SLIC Windows Marker Structure is only %" PRIu32 " bytes and " "should be %zu bytes in size", hdr->length, sizeof(fwts_acpi_table_slic_marker)); } else { #if DUMP_SLIC fwts_acpi_table_slic_marker *marker = (fwts_acpi_table_slic_marker *)ptr; #endif fwts_log_info(fw, "SLIC Windows Marker Structure has had minimal check due to proprietary nature of the table"); #if DUMP_SLIC fwts_log_info_verbatim(fw, " SLIC Windows Marker:\n"); fwts_log_info_simp_int(fw, " Version: ", marker->version); fwts_log_info_verbatim(fw, " OEM ID: '%6.6s'", marker->oem_id); fwts_log_info_verbatim(fw, " OEM Table ID: '%8.8s'", marker->oem_table_id); fwts_log_info_verbatim(fw, " Windows Flag: '%8.8s'", marker->windows_flag); fwts_log_info_simp_int(fw, " SLIC Version: ", marker->slic_version); fwts_log_info_verbatim(fw, " Reserved: " "0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8, marker->reserved[0], marker->reserved[1], marker->reserved[2], marker->reserved[3]); fwts_log_info_verbatim(fw, " Reserved: " "0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8, marker->reserved[4], marker->reserved[5], marker->reserved[6], marker->reserved[7]); fwts_log_info_verbatim(fw, " Reserved: " "0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8, marker->reserved[8], marker->reserved[9], marker->reserved[10], marker->reserved[11]); fwts_log_info_verbatim(fw, " Reserved: " "0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8 " 0x%2.2" PRIx8, marker->reserved[12], marker->reserved[13], marker->reserved[14], marker->reserved[15]); /* For the moment, don't dump the signature */ #endif } ptr += hdr->length; length += hdr->length; break; default: passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SLICInvaldType", "SLIC subtable type 0x%8.8" PRIx32 " is invalid, should be " "either 0x0000 (Public Key) or 0x0001 (Windows Marker)", hdr->type); goto done; } } done: if (passed) fwts_passed(fw, "No issues found in SLIC table."); return FWTS_OK; } static fwts_framework_minor_test slic_tests[] = { { slic_test1, "SLIC Software Licensing Description Table test." }, { NULL, NULL } }; static fwts_framework_ops slic_ops = { .description = "SLIC Software Licensing Description Table test.", .init = SLIC_init, .minor_tests = slic_tests }; FWTS_REGISTER("slic", &slic_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/slit/000077500000000000000000000000001465205512700135435ustar00rootroot00000000000000src/acpi/slit/slit.c000066400000000000000000000117711465205512700146710ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #define INDEX(i, j) (((i) * slit->num_of_system_localities) + (j)) static fwts_acpi_table_info *table; acpi_table_init(SLIT, &table) /* * For SLIT System Locality Distance Information refer to * section 5.2.17 of the ACPI specification version 6.0 */ static int slit_test1(fwts_framework *fw) { bool passed = true; uint64_t i, j, size, n, reserved = 0, bad_entry = 0; uint8_t *entry; fwts_acpi_table_slit *slit = (fwts_acpi_table_slit *)table->data; /* Size sanity check #1, got enough table to at least get matrix size */ if (!fwts_acpi_table_length(fw, "SLIT", table->length, sizeof(fwts_acpi_table_slit))) { passed = false; goto done; } n = slit->num_of_system_localities; fwts_log_info_verbatim(fw, "SLIT System Locality Distance Information Table:"); fwts_log_info_simp_int(fw, " Number of Localities: ", n); /* * ACPI table length is 32 bits, so maximum matrix of entries size is * is 2^32 - sizeof(fwts_acpi_table_slit) = 2^32 - 44 = 4294967252 * and table is a N x N matrix, so maximum number of localities is * limited to int(sqrt(4294967252)) = 65535. */ if (n > 0xffff) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SLITTooManySystemLocalities", "SLIT table size is %zu, however, the number of " "System Locality Entries is %" PRIu64 " which " "results in an ACPI table larger than the maximum " "32 bit ACPI table size of 4MB", table->length, n); goto done; } /* * Now that we are confident of no overflow, check that the matrix * + SLIT table header is not bigger than the actual table. */ size = (n * n) + sizeof(fwts_acpi_table_slit); if ((uint64_t)table->length < size) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SLITTooManySystemLocalities", "SLIT table size is %zu, however, the number of " "System Locality Entries is %" PRIu64 " and this " "results in a table of size %" PRIu64 " which " "is larger than the SLIT table size", table->length, size, n); goto done; } entry = (uint8_t *)table->data + sizeof(fwts_acpi_table_slit); /* * Now sanity check the entries.. */ if (entry[INDEX(0,0)] != 10) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SLITBadCornerEntry", "SLIT Entry[0][0] is 0x%" PRIx8 ", expecting value 0x0a.", entry[INDEX(0,0)]); } if (entry[INDEX(n - 1, n - 1)] != 10) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SLITBadCornerEntry", "SLIT Entry[%" PRIu64 "][%" PRIu64 "] is 0x%" PRIx8 ", expecting value 0x0a.", n - 1, n - 1, entry[INDEX(n - 1, n - 1)]); } for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { uint8_t val1 = entry[INDEX(i, j)], val2 = entry[INDEX(j, i)]; /* Check for distances less than 10 (reserved, no meaning) */ if (val1 < 10) { reserved++; /* Report first 16 errors */ if (reserved < 16) { fwts_failed(fw, LOG_LEVEL_HIGH, "SLITEntryReserved", "SLIT Entry[%" PRIu64 "][%" PRIu64 "]" " is 0x%" PRIx8 " which is a reserved value" " and has no defined meaning", i, j, val1); } } if (val1 != val2) { bad_entry++; /* Report first 16 bad entries */ if (bad_entry < 16) { fwts_failed(fw, LOG_LEVEL_HIGH, "SLITEntryReserved", "SLIT Entry[%" PRIu64 "][%" PRIu64 "]" " is 0x%" PRIx8 " and not the same as " "SLIT Entry[%" PRIu64 "][%" PRIu64 "]" " which is 0x%" PRIx8, i, j, val1, j, i, val2); } } } } if (reserved) fwts_log_info(fw, "Total of %" PRIu64 " entries were using reserved values", reserved); if (bad_entry) fwts_log_info(fw, "Total of %" PRIu64 " entries were not matching " "their diagonal parner element", bad_entry); done: if (passed) fwts_passed(fw, "No issues found in SLIT table."); return FWTS_OK; } static fwts_framework_minor_test slit_tests[] = { { slit_test1, "SLIT System Locality Distance Information test." }, { NULL, NULL } }; static fwts_framework_ops slit_ops = { .description = "SLIT System Locality Distance Information test.", .init = SLIT_init, .minor_tests = slit_tests }; FWTS_REGISTER("slit", &slit_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/spcr/000077500000000000000000000000001465205512700135375ustar00rootroot00000000000000src/acpi/spcr/spcr.c000066400000000000000000000203421465205512700146530ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static const fwts_acpi_table_spcr *spcr; static int spcr_init(fwts_framework *fw) { fwts_acpi_table_info *table; if (fwts_acpi_find_table(fw, "SPCR", 0, &table) != FWTS_OK) { fwts_log_error(fw, "Cannot read ACPI tables."); return FWTS_ERROR; } if (table == NULL || (table && table->length == 0)) { fwts_log_error(fw, "ACPI SPCR table does not exist, skipping test"); return FWTS_SKIP; } spcr = (const fwts_acpi_table_spcr*)table->data; return FWTS_OK; } /* * For SPCR and serial port types refer to: * https://msdn.microsoft.com/en-gb/library/windows/hardware/dn639132%28v=vs.85%29.aspx * https://msdn.microsoft.com/en-us/library/windows/hardware/dn639131%28v=vs.85%29.aspx */ static int spcr_sbbr_revision_test(fwts_framework *fw) { if (fw->flags & FWTS_FLAG_SBBR) { const uint8_t SBBR_LATEST_REVISION = 2; if (spcr->header.revision >= SBBR_LATEST_REVISION) fwts_passed(fw, "SPCR revision is up to date."); else fwts_failed(fw, LOG_LEVEL_CRITICAL, "spcr_revision:", "SPCR revision is outdated: %d", spcr->header.revision); } return FWTS_OK; } static int spcr_sbbr_gsiv_test(fwts_framework *fw) { if (fw->flags & FWTS_FLAG_SBBR) { const uint8_t ARMH_GIC_INTR_MASK = 0x08; const uint8_t IO_APIC_INTR_MASK = 0x02; if ((spcr->interrupt_type == ARMH_GIC_INTR_MASK || spcr->interrupt_type == IO_APIC_INTR_MASK) && spcr->gsi != 0x0) fwts_passed(fw, "SPCR appears to be populated with correct GSIV interrupt" "routing information for ARM PL011 UART Device"); else fwts_failed(fw, LOG_LEVEL_CRITICAL, "sbbr_gsiv:", "SPCR GSIV Information is set incorrectly."); } return FWTS_OK; } static int spcr_test1(fwts_framework *fw) { char *str; uint32_t reserved1; bool reserved = false; bool pci = true; bool passed = true; /* * Current revision 4, full list from * https://learn.microsoft.com/en-us/windows-hardware/drivers/serports/serial-port-console-redirection-table */ switch (spcr->interface_type) { case 0x00: str = "16550 compatible"; break; case 0x01: str = "16550 subset compatible with DBGP Revision 1"; break; case 0x02: str = "MAX311xE SPI UART"; break; case 0x03: str = "ARM PL011 UART"; break; case 0x04: str = "MSM8x60 (e.g. 8960)"; break; case 0x05: str = "Nvidia 16550"; break; case 0x06: str = "TI OMAP"; break; case 0x07: str = "Reserved (Do not Use)"; reserved = true; break; case 0x08: str = "APM88xxxx"; break; case 0x09: str = "MSM8974"; break; case 0x0a: str = "SAM5250"; break; case 0x0b: str = "Intel USIF"; break; case 0x0c: str = "i.MX6"; break; case 0x0d: str = "(deprecated) ARM SBSA"; break; case 0x0e: str = "ARM SBSA Generic UART"; break; case 0x0f: str = "ARM DCC"; break; case 0x10: str = "BCM2835"; break; case 0x11: str = "SDM845 with clock rate of 1.8432 MHz"; break; case 0x12: str = "16550-compatible with parameters defined in Generic Address Structure"; break; case 0x13: str = "SDM845 with clock rate of 7.372 MHz"; break; case 0x14: str = "Intel LPSS"; break; case 0x15: str = "RISC-V SBI console (any supported SBI mechanism)"; break; default: str = "Reserved"; reserved = true; break; } fwts_log_info_verbatim(fw, "Serial Interface: %s", str); if (reserved) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SPCRInterfaceReserved", "SPCR Serial interface type 0x%2.2" PRIx8 " is a reserved interface", spcr->interface_type); } reserved1 = spcr->reserved1[0] + (spcr->reserved1[1] << 8) + (spcr->reserved1[2] << 16); fwts_acpi_reserved_zero("SPCR", "Reserved1", reserved1, &passed); if (spcr->interrupt_type & 0xe0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SPCRIllegalReservedInterruptType", "SPCR interrupt type reserved bits are non-zero zero, got 0x%" PRIx8, spcr->interrupt_type); } /* Check PC-AT compatible UART IRQs */ if (spcr->interrupt_type & 1) { switch (spcr->irq) { case 2 ... 7: case 9 ... 12: case 14 ... 15: break; default: passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SPCRIllegalIRQ", "SPCR PC-AT compatible IRQ 0x%" PRIx8 " is invalid", spcr->irq); break; } } reserved = false; switch (spcr->baud_rate) { case 0x00: str = "preconfigured in firmware"; break; case 0x03: str = "9600"; break; case 0x04: str = "19200"; break; case 0x06: str = "57600"; break; case 0x07: str = "115200"; break; default: str = "Reserved"; reserved = true; } fwts_log_info_verbatim(fw, "Baud Rate: %s", str); if (reserved) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SPCRBaudRateReserved", "SPCR Serial baud rate type 0x%2.2" PRIx8 " is a reserved baud rate", spcr->baud_rate); } fwts_acpi_fixed_value(fw, LOG_LEVEL_HIGH, "SPCR", "Parity", spcr->parity, 0, &passed); fwts_acpi_fixed_value(fw, LOG_LEVEL_HIGH, "SPCR", "Stop", spcr->stop_bits, 1, &passed); fwts_acpi_reserved_bits("SPCR", "Flow control", spcr->flow_control, 3, 7, &passed); reserved = false; switch (spcr->terminal_type) { case 0x00: str = "VT100"; break; case 0x01: str = "VT100+"; break; case 0x02: str = "VT-UTF8"; break; case 0x03: str = "ANSI"; break; default: str = "Reserved"; reserved = true; } fwts_log_info_verbatim(fw, "Terminal Type: %s", str); if (reserved) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SPCRTerminalTypeReserved", "SPCR terminal type type 0x%2.2" PRIx8 " is a reserved terminal type", spcr->terminal_type); } fwts_acpi_reserved_zero("SPCR", "Language", spcr->language, &passed); /* According to the spec, these values indicate NOT a PCI device */ if ((spcr->pci_device_id == 0xffff) && (spcr->pci_vendor_id == 0xffff) && (spcr->pci_bus_number == 0) && (spcr->pci_device_number == 0) && (spcr->pci_function_number == 0)) pci = false; /* Now validate all pci specific fields if not-PCI enabled */ if (pci) { if (spcr->pci_device_id == 0xffff) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SPCRPciDeviceID", "SPCR PCI device ID is 0x%4.4" PRIx16 ", expecting non-0xffff for PCI device", spcr->pci_device_id); } if (spcr->pci_vendor_id == 0xffff) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SPCRPciVendorID", "SPCR PCI vendor ID is 0x%4.4" PRIx16 ", expecting non-0xffff for non-PCI device", spcr->pci_vendor_id); } if ((spcr->pci_flags & 1) == 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SPCRPciFlagsBit0", "SPCR PCI flags compatibility bit 0 is %" PRIx32 ", expecting 1 for PCI device", spcr->pci_flags & 1); } } fwts_acpi_reserved_bits("SPCR", "PCI Flags", spcr->pci_flags, 1, 31, &passed); if (spcr->header.revision <= 2) fwts_acpi_reserved_zero("SPCR", "Reserved3", spcr->uart_clock_freq, &passed); if (passed) fwts_passed(fw, "No issues found in SPCR table."); return FWTS_OK; } static fwts_framework_minor_test spcr_tests[] = { { spcr_test1, "SPCR Serial Port Console Redirection Table test." }, { spcr_sbbr_revision_test, "SPCR Revision Test." }, { spcr_sbbr_gsiv_test, "SPCR GSIV Interrupt Test." }, { NULL, NULL } }; static fwts_framework_ops spcr_ops = { .description = "SPCR Serial Port Console Redirection Table test.", .init = spcr_init, .minor_tests = spcr_tests }; FWTS_REGISTER("spcr", &spcr_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI | FWTS_FLAG_SBBR) #endif src/acpi/spmi/000077500000000000000000000000001465205512700135405ustar00rootroot00000000000000src/acpi/spmi/spmi.c000066400000000000000000000155621465205512700146650ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(SPMI, &table) /* * SPMI Service Processor Management Interface Description Table * see http://www.intel.com/content/www/us/en/servers/ipmi/ * ipmi-intelligent-platform-mgt-interface-spec-2nd-gen-v2-0-spec-update.html * pages 600-606 */ static int spmi_test1(fwts_framework *fw) { char *interface_type; bool passed = true; fwts_acpi_table_spmi *spmi = (fwts_acpi_table_spmi *)table->data; if (!fwts_acpi_table_length(fw, "SPMI", table->length, sizeof(fwts_acpi_table_spmi))) { passed = false; goto done; } switch (spmi->interface_type) { case 0x01: interface_type = "Keyboard Controller Type (KCS)"; break; case 0x02: interface_type = "Server Management Interface Chip (SMIC)"; break; case 0x03: interface_type = "Block Transfer (BT)"; break; case 0x04: interface_type = "SMBus System Interface (SSIF)"; break; default: interface_type = "Reserved"; break; } fwts_log_info_verbatim(fw, "SPMI Service Processor Management Interface Description Table:"); fwts_log_info_verbatim(fw, " Interface Type: 0x%2.2" PRIx8 " (%s)", spmi->interface_type, interface_type); fwts_log_info_simp_int(fw, " Reserved: ", spmi->reserved1); fwts_log_info_simp_int(fw, " Specification Revision: ", spmi->specification_revision); fwts_log_info_simp_int(fw, " Interrupt Type: ", spmi->interrupt_type); fwts_log_info_simp_int(fw, " GPE: ", spmi->gpe); fwts_log_info_simp_int(fw, " Reserved: ", spmi->reserved2); fwts_log_info_simp_int(fw, " PCI Device Flag: ", spmi->pci_device_flag); fwts_log_info_simp_int(fw, " Global System Interrupt ", spmi->global_system_interrupt); fwts_log_info_verbatim(fw, " Base Address:"); fwts_log_info_simp_int(fw, " Address Space ID: ", spmi->base_address.address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", spmi->base_address.register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", spmi->base_address.register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", spmi->base_address.access_width); fwts_log_info_simp_int(fw, " Address ", spmi->base_address.address); fwts_log_info_simp_int(fw, " PCI Segment Group: ", spmi->pci_segment_group_number); fwts_log_info_simp_int(fw, " PCI Bus: ", spmi->pci_bus_number); fwts_log_info_simp_int(fw, " PCI Device: ", spmi->pci_device_number); fwts_log_info_simp_int(fw, " PCI Function: ", spmi->pci_function_number); fwts_log_info_simp_int(fw, " Reserved: ", spmi->reserved3); fwts_log_nl(fw); if (spmi->interface_type < 1 || spmi->interface_type > 4) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPMIInterfaceTypeReserved", "SPMI Interface Type is 0x%2.2" PRIx8 " which " "is a reserved type and probably incorrect.", spmi->interface_type); } fwts_acpi_fixed_value(fw, LOG_LEVEL_MEDIUM, "SPMI", "Reserved1", spmi->reserved1, 1, &passed); fwts_acpi_reserved_bits("SPMI", "Interrupt type", spmi->interrupt_type, 2, 7, &passed); /* Check for zero GPE on specific condition of interrupt type */ if (((spmi->interrupt_type & 1) == 0) && (spmi->gpe != 0)) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPMIGPENotZero", "SPMI GPE is 0x%2.2" PRIx8 " and should be 0 if the Interrupt " "Type bit 0 (SCI triggered through GPE) is set to 0", spmi->gpe); } fwts_acpi_reserved_zero("SPMI", "Reserved2", spmi->reserved2, &passed); fwts_acpi_reserved_bits("SPMI", "PCI device flag", spmi->pci_device_flag, 1, 7, &passed); if (((spmi->interrupt_type & 2) == 0) && (spmi->global_system_interrupt != 0)) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPMIGlobalSystemInterruptNonZero", "SPMI Global System Interrupt is 0x%" PRIx32 " and " "should be zero if bit [1] (I/O APIC/SAPIC interrupt) " "of the Interrupt Type is not set", spmi->global_system_interrupt); } /* Base address must be one of 3 types, System Memory, System I/O or SMBUS */ fwts_acpi_space_id(fw, "SPMI", "Base Address", &passed, spmi->base_address.address_space_id, 3, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_MEMORY, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_IO, FWTS_GAS_ADDR_SPACE_ID_SMBUS); /* * For SSIF: The Address_Space_ID is SMBUS and the address field of the GAS * holds the 7-bit slave address of the BMC on the host SMBus * in the least significant byte. Note that the slave address is * stored with the 7-bit slave address in the least significant 7- * bits of the byte, and the most significant bit of the byte set to */ if (spmi->interface_type == 0x04) { fwts_acpi_space_id(fw, "SPMI", "Base Address for SSIF", &passed, spmi->base_address.address_space_id, 1, FWTS_GAS_ADDR_SPACE_ID_SMBUS); if (spmi->base_address.address & ~0x7f) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "SPMIInvalidBaseAddressForSSIF", "SPMI Base Address is 0x%16.16" PRIx64 " but should be 0..127 for a SSIF Interface Type", spmi->base_address.address); } } /* * Specification states that PCI device number bits [7:5] * are reserved if PCI device flag bit [0] is set, however, * it does not state if they should be zero or 1, so for * now don't check these * * Also, PCI function number bits [7] and [5:3] are * reserved, again, not sure if these need to be checked * so ignore these too. */ done: if (passed) fwts_passed(fw, "No issues found in SPMI table."); return FWTS_OK; } static fwts_framework_minor_test spmi_tests[] = { { spmi_test1, "SPMI Service Processor Management Interface Description Table test." }, { NULL, NULL } }; static fwts_framework_ops spmi_ops = { .description = "SPMI Service Processor Management Interface Description Table test.", .init = SPMI_init, .minor_tests = spmi_tests }; FWTS_REGISTER("spmi", &spmi_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/srat/000077500000000000000000000000001465205512700135415ustar00rootroot00000000000000src/acpi/srat/srat.c000066400000000000000000000421601465205512700146610ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(SRAT, &table) static void srat_check_local_apic_sapic_affinity( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { fwts_acpi_table_local_apic_sapic_affinity *affinity = (fwts_acpi_table_local_apic_sapic_affinity *)*data; if ((ssize_t)sizeof(fwts_acpi_table_local_apic_sapic_affinity) > *length) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SRATLocalApicSapicAffinityShort", "SRAT Local APIC/SPAIC Affinity structure too short, got " "%zu bytes, expecting %zu bytes", *length, sizeof(fwts_acpi_table_local_apic_sapic_affinity)); *passed = false; goto done; } if (!fwts_acpi_structure_length(fw, "SRAT", affinity->type, affinity->length, sizeof(fwts_acpi_table_local_apic_sapic_affinity))) { *passed = false; goto done; } fwts_log_info_verbatim(fw, "SRAT Local APIC/SAPIC Affinity Structure:"); fwts_log_info_simp_int(fw, " Type: ", affinity->type); fwts_log_info_simp_int(fw, " Length: ", affinity->length); fwts_log_info_simp_int(fw, " Proximity Domain: [7:0] ", affinity->proximity_domain_0); fwts_log_info_simp_int(fw, " APIC ID: ", affinity->apic_id); fwts_log_info_simp_int(fw, " Flags: ", affinity->flags); fwts_log_info_simp_int(fw, " Local SAPIC EID: ", affinity->local_sapic_eid); fwts_log_info_simp_int(fw, " Proximity Domain: [8:15] ", affinity->proximity_domain_1); fwts_log_info_simp_int(fw, " Proximity Domain: [16:23] ", affinity->proximity_domain_2); fwts_log_info_simp_int(fw, " Proximity Domain: [23:31] ", affinity->proximity_domain_3); fwts_log_info_simp_int(fw, " Clock Domain ", affinity->clock_domain); fwts_log_nl(fw); fwts_acpi_reserved_bits("SRAT", "Local APIC/SPAIC Affinity Flags", affinity->flags, 1, 31, passed); /* * Not clear of bits 0..7 of Proximity Domain are reserved or not * so skip check for these */ /* * Clock domain probably needs deeper sanity checking, for now * skip this. */ done: *length -= sizeof(fwts_acpi_table_local_apic_sapic_affinity); *data += sizeof(fwts_acpi_table_local_apic_sapic_affinity); } static void srat_check_memory_affinity( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { fwts_acpi_table_memory_affinity *affinity = (fwts_acpi_table_memory_affinity *)*data; if ((ssize_t)sizeof(fwts_acpi_table_memory_affinity) > *length) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SRATMemoryAffinityShort", "SRAT Memory Affinity structure too short, got " "%zu bytes, expecting %zu bytes", *length, sizeof(fwts_acpi_table_memory_affinity)); *passed = false; goto done; } if (!fwts_acpi_structure_length(fw, "SRAT", affinity->type, affinity->length, sizeof(fwts_acpi_table_memory_affinity))) { *passed = false; goto done; } fwts_log_info_verbatim(fw, "SRAT Memory Affinity Structure:"); fwts_log_info_simp_int(fw, " Type: ", affinity->type); fwts_log_info_simp_int(fw, " Length: ", affinity->length); fwts_log_info_simp_int(fw, " Proximity Domain: ", affinity->proximity_domain); fwts_log_info_simp_int(fw, " Reserved: ", affinity->reserved1); fwts_log_info_verbatim(fw, " Base Address: 0x%8.8" PRIx32 "%8.8" PRIx32, affinity->base_addr_hi, affinity->base_addr_lo); fwts_log_info_verbatim(fw, " Length: 0x%8.8" PRIx32 "%8.8" PRIx32, affinity->length_hi, affinity->length_lo); fwts_log_info_simp_int(fw, " Reserved: ", affinity->reserved2); fwts_log_info_simp_int(fw, " Flags: ", affinity->flags); fwts_log_info_simp_int(fw, " Reserved: ", affinity->reserved3); fwts_log_nl(fw); fwts_acpi_reserved_bits("SRAT", "Memory Affinity Flags", affinity->flags, 3, 31, passed); done: *length -= sizeof(fwts_acpi_table_memory_affinity); *data += sizeof(fwts_acpi_table_memory_affinity); } static void srat_check_local_x2apic_affinity( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { fwts_acpi_table_local_x2apic_affinity *affinity = (fwts_acpi_table_local_x2apic_affinity *)*data; if ((ssize_t)sizeof(fwts_acpi_table_local_x2apic_affinity) > *length) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SRATLocalx2apicAffinityShort", "SRAT Local x2APIC Affinity structure too short, got " "%zu bytes, expecting %zu bytes", *length, sizeof(fwts_acpi_table_local_x2apic_affinity)); *passed = false; goto done; } if (!fwts_acpi_structure_length(fw, "SRAT", affinity->type, affinity->length, sizeof(fwts_acpi_table_local_x2apic_affinity))) { *passed = false; goto done; } fwts_log_info_verbatim(fw, "SRAT Local x2APIC Affinity Structure:"); fwts_log_info_simp_int(fw, " Type: ", affinity->type); fwts_log_info_simp_int(fw, " Length: ", affinity->length); fwts_log_info_simp_int(fw, " Reserved: ", affinity->reserved1); fwts_log_info_simp_int(fw, " Proximity Domain: ", affinity->proximity_domain); fwts_log_info_simp_int(fw, " X2APIC ID: ", affinity->x2apic_id); fwts_log_info_simp_int(fw, " Flags: ", affinity->flags); fwts_log_info_simp_int(fw, " Clock Domain ", affinity->clock_domain); fwts_log_info_simp_int(fw, " Reserved: ", affinity->reserved2); fwts_log_nl(fw); /* Spec states 1st reserved field MUST be zero */ if (affinity->reserved1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SRATLocalx2apicReserved1", "SRAT Local x2APIC Affinity 1st Reserved field should be zero, got " "0x%" PRIx32, affinity->reserved1); *passed = false; } fwts_acpi_reserved_bits("SRAT", "Local x2APIC Affinity Flags", affinity->flags, 1, 31, passed); /* * Clock domain probably needs deeper sanity checking, for now * skip this. */ done: *length -= sizeof(fwts_acpi_table_local_x2apic_affinity); *data += sizeof(fwts_acpi_table_local_x2apic_affinity); } static void srat_check_gicc_affinity( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { fwts_acpi_table_gicc_affinity *affinity = (fwts_acpi_table_gicc_affinity *)*data; if ((ssize_t)sizeof(fwts_acpi_table_gicc_affinity) > *length) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SRATGICCAffinityShort", "SRAT GICC Affinity structure too short, got " "%zu bytes, expecting %zu bytes", *length, sizeof(fwts_acpi_table_gicc_affinity)); *passed = false; goto done; } if (!fwts_acpi_structure_length(fw, "SRAT", affinity->type, affinity->length, sizeof(fwts_acpi_table_gicc_affinity))) { *passed = false; goto done; } fwts_log_info_verbatim(fw, "SRAT GICC Affinity Structure:"); fwts_log_info_simp_int(fw, " Type: ", affinity->type); fwts_log_info_simp_int(fw, " Length: ", affinity->length); fwts_log_info_simp_int(fw, " Proximity Domain: ", affinity->proximity_domain); fwts_log_info_simp_int(fw, " ACPI Processor UID: ", affinity->acpi_processor_uid); fwts_log_info_simp_int(fw, " Flags: ", affinity->flags); fwts_log_info_simp_int(fw, " Clock Domain ", affinity->clock_domain); fwts_log_nl(fw); fwts_acpi_reserved_bits("SRAT", "GICC Affinity Flags", affinity->flags, 1, 31, passed); /* * Clock domain probably needs deeper sanity checking, for now * skip this. */ done: *length -= sizeof(fwts_acpi_table_gicc_affinity); *data += sizeof(fwts_acpi_table_gicc_affinity); } static void srat_check_its_affinity( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { fwts_acpi_table_its_affinity *affinity = (fwts_acpi_table_its_affinity *)*data; if ((ssize_t)sizeof(fwts_acpi_table_its_affinity) > *length) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SRATITSAffinityShort", "SRAT ITS Affinity structure too short, got " "%zu bytes, expecting %zu bytes", *length, sizeof(fwts_acpi_table_its_affinity)); *passed = false; goto done; } if (!fwts_acpi_structure_length(fw, "SRAT", affinity->type, affinity->length, sizeof(fwts_acpi_table_its_affinity))) { *passed = false; goto done; } fwts_log_info_verbatim(fw, "SRAT ITS Affinity Structure:"); fwts_log_info_simp_int(fw, " Type: ", affinity->type); fwts_log_info_simp_int(fw, " Length: ", affinity->length); fwts_log_info_simp_int(fw, " Proximity Domain: ", affinity->proximity_domain); fwts_log_info_simp_int(fw, " Reserved: ", affinity->reserved); fwts_log_info_simp_int(fw, " ITS ID ", affinity->its_id); fwts_log_nl(fw); fwts_acpi_reserved_zero("SRAT", "ITS Affinity Reserved", affinity->reserved, passed); done: *length -= sizeof(fwts_acpi_table_its_affinity); *data += sizeof(fwts_acpi_table_its_affinity); } static void srat_check_initiator_affinity( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { uint32_t h_reserved = 0; fwts_acpi_table_initiator_affinity *affinity = (fwts_acpi_table_initiator_affinity *)*data; if ((ssize_t)sizeof(fwts_acpi_table_initiator_affinity) > *length) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SRATInitiatorAffinityShort", "SRAT Initiator Affinity structure too short, got " "%zu bytes, expecting %zu bytes", *length, sizeof(fwts_acpi_table_initiator_affinity)); *passed = false; goto done; } if (!fwts_acpi_structure_length(fw, "SRAT", affinity->type, affinity->length, sizeof(fwts_acpi_table_initiator_affinity))) { *passed = false; goto done; } fwts_log_info_verbatim(fw, "SRAT Initiator Affinity Structure:"); fwts_log_info_simp_int(fw, " Type: ", affinity->type); fwts_log_info_simp_int(fw, " Length: ", affinity->length); fwts_log_info_simp_int(fw, " Reserved: ", affinity->reserved1); fwts_log_info_simp_int(fw, " Device Handle Type: ", affinity->device_handle_type); fwts_log_info_simp_int(fw, " Proximity Domain: ", affinity->proximity_domain); fwts_acpi_reserved_zero("SRAT", "Initiator Affinity Reserved", affinity->reserved1, passed); fwts_acpi_reserved_bits("SRAT", "Initiator Affinity Device Handle Type", affinity->device_handle_type, 1, 7, passed); fwts_log_info_verbatim(fw, " Device Handle:"); if (affinity->device_handle_type == 0) { fwts_log_info_simp_int(fw, " ACPI _HID: ", *(uint64_t *)affinity->device_handle); fwts_log_info_simp_int(fw, " ACPI _UID: ", *(uint32_t *)(affinity->device_handle + 8)); h_reserved = *(uint32_t *)(affinity->device_handle + 12); fwts_log_info_simp_int(fw, " Reserved: ", h_reserved); fwts_acpi_reserved_zero("SRAT", "Initiator Affinity Device Handle Reserved", h_reserved, passed); } else if (affinity->device_handle_type == 1) { fwts_log_info_simp_int(fw, " PCI Segment: ", *(uint16_t *)affinity->device_handle); fwts_log_info_simp_int(fw, " PCI BDF Number: ", *(uint16_t *)(affinity->device_handle + 2)); fwts_log_info_verbatim(fw, " Reserved:"); fwts_hexdump_data_prefix_all(fw, affinity->device_handle + 4, " ", 12); fwts_acpi_reserved_zero_array(fw, "SRAT", " Initiator Affinity Device Handle Reserved", affinity->device_handle + 4, 12, passed); } fwts_log_info_simp_int(fw, " Flags: ", affinity->flags); fwts_log_info_simp_int(fw, " Reserved: ", affinity->reserved2); fwts_acpi_reserved_bits("SRAT", "Initiator Affinity Flags", affinity->flags, 2, 31, passed); fwts_acpi_reserved_zero("SRAT", "Initiator Affinity Reserved", affinity->reserved2, passed); done: *length -= sizeof(fwts_acpi_table_initiator_affinity); *data += sizeof(fwts_acpi_table_initiator_affinity); } static void srat_check_port_affinity( fwts_framework *fw, ssize_t *length, uint8_t **data, bool *passed) { uint32_t h_reserved = 0; fwts_acpi_table_port_affinity *affinity = (fwts_acpi_table_port_affinity *)*data; if ((ssize_t)sizeof(fwts_acpi_table_port_affinity) > *length) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SRATPortAffinityShort", "SRAT Port Affinity structure too short, got " "%zu bytes, expecting %zu bytes", *length, sizeof(fwts_acpi_table_port_affinity)); *passed = false; goto done; } if (!fwts_acpi_structure_length(fw, "SRAT", affinity->type, affinity->length, sizeof(fwts_acpi_table_port_affinity))) { *passed = false; goto done; } fwts_log_info_verbatim(fw, "SRAT Port Affinity Structure:"); fwts_log_info_simp_int(fw, " Type: ", affinity->type); fwts_log_info_simp_int(fw, " Length: ", affinity->length); fwts_log_info_simp_int(fw, " Reserved: ", affinity->reserved1); fwts_log_info_simp_int(fw, " Device Handle Type: ", affinity->device_handle_type); fwts_log_info_simp_int(fw, " Proximity Domain: ", affinity->proximity_domain); fwts_acpi_reserved_zero("SRAT", "Port Affinity Reserved", affinity->reserved1, passed); fwts_acpi_reserved_bits("SRAT", "Port Affinity Device Handle Type", affinity->device_handle_type, 1, 7, passed); fwts_log_info_verbatim(fw, " Device Handle:"); if (affinity->device_handle_type == 0) { fwts_log_info_simp_int(fw, " ACPI _HID: ", *(uint64_t *)(affinity->device_handle)); fwts_log_info_simp_int(fw, " ACPI _UID: ", *(uint32_t *)(affinity->device_handle + 8)); h_reserved = *(uint32_t *)(affinity->device_handle + 12); fwts_log_info_simp_int(fw, " Reserved: ", *(uint32_t *)(affinity->device_handle + 12)); fwts_acpi_reserved_zero("SRAT", "Port Affinity Device Handle Reserved", h_reserved, passed); } else if (affinity->device_handle_type == 1) { fwts_log_info_simp_int(fw, " PCI Segment: ", *(uint16_t *)(affinity->device_handle)); fwts_log_info_simp_int(fw, " PCI BDF Number: ", *(uint16_t *)(affinity->device_handle + 2)); fwts_log_info_verbatim(fw, " Reserved:"); fwts_hexdump_data_prefix_all(fw, affinity->device_handle + 4, " ", 12); fwts_acpi_reserved_zero_array(fw, "SRAT", " Port Affinity Device Handle Reserved", affinity->device_handle + 4, 12, passed); } fwts_log_info_simp_int(fw, " Flags: ", affinity->flags); fwts_log_info_simp_int(fw, " Reserved: ", affinity->reserved2); fwts_log_nl(fw); fwts_acpi_reserved_bits("SRAT", "Port Affinity Flags", affinity->flags, 2, 31, passed); fwts_acpi_reserved_zero("SRAT", "Port Affinity Reserved", affinity->reserved2, passed); done: *length -= sizeof(fwts_acpi_table_port_affinity); *data += sizeof(fwts_acpi_table_port_affinity); } /* * See ACPI 6.0, Section 5.2.16 */ static int srat_test1(fwts_framework *fw) { const fwts_acpi_table_srat *srat = (const fwts_acpi_table_srat *)table->data; uint8_t *data = (uint8_t *)table->data; bool passed = true; ssize_t length = (ssize_t)table->length; fwts_acpi_fixed_value(fw, LOG_LEVEL_MEDIUM, "SRAT", "Revision1", srat->reserved1, 1, &passed); data += sizeof(fwts_acpi_table_srat); length -= sizeof(fwts_acpi_table_srat); while (length > 0) { switch (*data) { case 0x00: srat_check_local_apic_sapic_affinity(fw, &length, &data, &passed); break; case 0x01: srat_check_memory_affinity(fw, &length, &data, &passed); break; case 0x02: srat_check_local_x2apic_affinity(fw, &length, &data, &passed); break; case 0x03: srat_check_gicc_affinity(fw, &length, &data, &passed); break; case 0x04: srat_check_its_affinity(fw, &length, &data, &passed); break; case 0x05: srat_check_initiator_affinity(fw, &length, &data, &passed); break; case 0x06: srat_check_port_affinity(fw, &length, &data, &passed); break; default: fwts_failed(fw, LOG_LEVEL_HIGH, "SRATInvalidType", "SRAT Affinity Structure Type 0x%" PRIx8 " is an invalid type, expecting 0x00..0x02", *data); passed = false; length = 0; break; } } if (passed) fwts_passed(fw, "No issues found in SRAT table."); return FWTS_OK; } static fwts_framework_minor_test srat_tests[] = { { srat_test1, "SRAT System Resource Affinity Table test." }, { NULL, NULL } }; static fwts_framework_ops srat_ops = { .description = "SRAT System Resource Affinity Table test.", .init = SRAT_init, .minor_tests = srat_tests }; FWTS_REGISTER("srat", &srat_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/stao/000077500000000000000000000000001465205512700135365ustar00rootroot00000000000000src/acpi/stao/stao.c000066400000000000000000000071051465205512700146530ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include "fwts_acpi_object_eval.h" static fwts_acpi_table_info *table; acpi_table_init(STAO, &table) /* * Extract a STAO ACPI String from the raw buffer */ static bool stao_acpi_string( fwts_framework *fw, const char *str, const char *end, bool *passed, size_t *len) { const char *ptr = str; while (*ptr) { if (ptr > end) { *passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "STAOAcpiStringNotNullTerminated", "STAO ACPI String has reached the end of the " "ACPI table and did not have a 0x00 string " "terminator"); *len = 0; return false; } ptr++; } *len = ptr - str; return true; } /* * STAO Status Override Table * http://wiki.xenproject.org/mediawiki/images/0/02/Status-override-table.pdf */ static int stao_test1(fwts_framework *fw) { const fwts_acpi_table_stao *stao = (const fwts_acpi_table_stao *)table->data; bool passed = true; const char *ptr, *end; int strings = 0; if (stao->header.length > (uint32_t)table->length) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "STAOBadLength", "STAO header reports that the table is %" PRIu32 " bytes long, however this is longer than the ACPI " "table size of %zu bytes.", stao->header.length, table->length); goto done; } /* Now we have got some sane data, dump the STAO */ fwts_log_info_verbatim(fw, "STAO Status Override Table:"); fwts_log_info_simp_int(fw, " UART: ", stao->uart); ptr = (const char *)stao->namelist; end = (const char *)table->data + stao->header.length; while (ptr < end) { size_t len; if (!stao_acpi_string(fw, ptr, end, &passed, &len)) break; fwts_log_info_verbatim(fw, " ACPI String: '%s'", ptr); strings++; /* String length + null byte */ ptr += len + 1; } if (!strings) goto done; ptr = (const char *)stao->namelist; end = (const char *)table->data + table->length; while (ptr < end) { bool found; size_t len; if (!stao_acpi_string(fw, ptr, end, &passed, &len)) break; found = fwts_acpi_obj_find(fw, ptr); if (!found) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "STAOAcpiStringNotFound", "STAO ACPI String '%s' not found in ACPI object name space.", ptr); } ptr += len + 1; } done: if (passed) fwts_passed(fw, "No issues found in STAO table."); return FWTS_OK; } static fwts_framework_minor_test stao_tests[] = { { stao_test1, "STAO Status Override Table test." }, { NULL, NULL } }; static fwts_framework_ops stao_ops = { .description = "STAO Status Override Table test.", .init = STAO_init, .minor_tests = stao_tests }; FWTS_REGISTER("stao", &stao_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/svkl/000077500000000000000000000000001465205512700135475ustar00rootroot00000000000000src/acpi/svkl/svkl.c000066400000000000000000000071631465205512700147010ustar00rootroot00000000000000/* * Copyright (C) 2022-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(SVKL, &table) static int svkl_test1(fwts_framework *fw) { fwts_acpi_table_svkl *svkl = (fwts_acpi_table_svkl *) table->data; fwts_acpi_table_svkl_key_structure *key_structure; uint32_t offset, count, i; bool passed = true; if (table->length < (size_t)svkl->header.length) { fwts_failed(fw, LOG_LEVEL_HIGH, "SVKLTooShort", "SVKL table incorrectly sized, SVKL " "header reports it is %" PRIu32 " bytes, " "instead got %zu bytes", svkl->header.length, table->length); return FWTS_OK; } if (table->length < sizeof(fwts_acpi_table_svkl)) { fwts_failed(fw, LOG_LEVEL_HIGH, "SVKLTooShort", "SVKL table too short, expecting %zu bytes, " "instead got %zu bytes", sizeof(fwts_acpi_table_svkl), table->length); return FWTS_OK; } fwts_log_info_verbatim(fw, "SVKL Storage Volume Key Data Table:"); fwts_log_info_simp_int(fw, " Key Count: ", svkl->key_count); offset = sizeof(fwts_acpi_table_svkl); key_structure = (fwts_acpi_table_svkl_key_structure *) (table->data + offset); count = (svkl->header.length - offset) / sizeof(fwts_acpi_table_svkl_key_structure); if (count != svkl->key_count) { passed = false; fwts_failed(fw, LOG_LEVEL_CRITICAL, "SVKLBadStructureCount", "SVKL should have %" PRId32 " key structures, got %" PRId32, svkl->key_count, count); return FWTS_OK; } for (i = 0; i < svkl->key_count; i++) { fwts_log_info_verbatim(fw, " Storage Volume Key Structure %" PRIu8, (i + 1)); fwts_log_info_simp_int(fw, " Key Type: ", key_structure->key_type); if (key_structure->key_type != 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SVKLBadKeyType", "SVKL key type not zero, 1~0xFFFF reserved."); } fwts_log_info_simp_int(fw, " Key Format: ", key_structure->key_format); if (key_structure->key_format != 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SVKLBadKeyFormat", "SVKL key format not zero, 1~0xFFFF reserved."); } fwts_log_info_simp_int(fw, " Key Size: ", key_structure->key_size); fwts_log_info_simp_int(fw, " Key Address: ", key_structure->key_addr); if ((offset += sizeof(fwts_acpi_table_svkl_key_structure)) > table->length) { passed = false; fwts_failed(fw, LOG_LEVEL_CRITICAL, "SVKLBadTableLength", "SVKL has more key structures than its size can handle"); break; } key_structure = (fwts_acpi_table_svkl_key_structure *) (table->data + offset); } fwts_log_nl(fw); if (passed) fwts_passed(fw, "No issues found in SVKL table."); return FWTS_OK; } static fwts_framework_minor_test svkl_tests[] = { { svkl_test1, "Validate SVKL table." }, { NULL, NULL } }; static fwts_framework_ops svkl_ops = { .description = "SVKL Storage Volume Key Data table test.", .init = SVKL_init, .minor_tests = svkl_tests }; FWTS_REGISTER("svkl", &svkl_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/syntaxcheck/000077500000000000000000000000001465205512700151145ustar00rootroot00000000000000src/acpi/syntaxcheck/syntaxcheck.c000066400000000000000000000464211465205512700176130ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include #define MAX_TABLES (128) #define ASL_EXCEPTIONS #include "aslmessages.h" typedef struct { const uint16_t error_number; const char *id_str; char *advice; } syntaxcheck_error_map_item; static int syntaxcheck_load_advice(fwts_framework *fw); static void syntaxcheck_free_advice(void); /* * syntaxcheck advice data file, data stored in json format */ #define SYNTAXCHECK_JSON_FILE "syntaxcheck.json" #define ASL_ID(error) { error, #error, NULL } /* * From aslmessages.h, current ASL errors * create a mapping from value to stringified name */ static syntaxcheck_error_map_item syntaxcheck_error_map[] = { ASL_ID(ASL_MSG_ALIGNMENT), ASL_ID(ASL_MSG_ALPHANUMERIC_STRING), ASL_ID(ASL_MSG_AML_NOT_IMPLEMENTED), ASL_ID(ASL_MSG_ARG_COUNT_HI), ASL_ID(ASL_MSG_ARG_COUNT_LO), ASL_ID(ASL_MSG_ARG_INIT), ASL_ID(ASL_MSG_BACKWARDS_OFFSET), ASL_ID(ASL_MSG_BUFFER_LENGTH), ASL_ID(ASL_MSG_CLOSE), ASL_ID(ASL_MSG_COMPILER_INTERNAL), ASL_ID(ASL_MSG_COMPILER_RESERVED), ASL_ID(ASL_MSG_CONNECTION_MISSING), ASL_ID(ASL_MSG_CONNECTION_INVALID), ASL_ID(ASL_MSG_CONSTANT_EVALUATION), ASL_ID(ASL_MSG_CONSTANT_FOLDED), ASL_ID(ASL_MSG_CORE_EXCEPTION), ASL_ID(ASL_MSG_DEBUG_FILE_OPEN), ASL_ID(ASL_MSG_DEBUG_FILENAME), ASL_ID(ASL_MSG_DEPENDENT_NESTING), ASL_ID(ASL_MSG_DMA_CHANNEL), ASL_ID(ASL_MSG_DMA_LIST), ASL_ID(ASL_MSG_DUPLICATE_CASE), ASL_ID(ASL_MSG_DUPLICATE_ITEM), ASL_ID(ASL_MSG_EARLY_EOF), ASL_ID(ASL_MSG_ENCODING_LENGTH), ASL_ID(ASL_MSG_EX_INTERRUPT_LIST), ASL_ID(ASL_MSG_EX_INTERRUPT_LIST_MIN), ASL_ID(ASL_MSG_EX_INTERRUPT_NUMBER), ASL_ID(ASL_MSG_FIELD_ACCESS_WIDTH), ASL_ID(ASL_MSG_FIELD_UNIT_ACCESS_WIDTH), ASL_ID(ASL_MSG_FIELD_UNIT_OFFSET), ASL_ID(ASL_MSG_GPE_NAME_CONFLICT), ASL_ID(ASL_MSG_HID_LENGTH), ASL_ID(ASL_MSG_HID_PREFIX), ASL_ID(ASL_MSG_HID_SUFFIX), ASL_ID(ASL_MSG_INCLUDE_FILE_OPEN), ASL_ID(ASL_MSG_INPUT_FILE_OPEN), ASL_ID(ASL_MSG_INTEGER_LENGTH), ASL_ID(ASL_MSG_INTEGER_OPTIMIZATION), ASL_ID(ASL_MSG_INTERRUPT_LIST), ASL_ID(ASL_MSG_INTERRUPT_NUMBER), ASL_ID(ASL_MSG_INVALID_ACCESS_SIZE), ASL_ID(ASL_MSG_INVALID_ADDR_FLAGS), ASL_ID(ASL_MSG_INVALID_CONSTANT_OP), ASL_ID(ASL_MSG_INVALID_EISAID), ASL_ID(ASL_MSG_INVALID_ESCAPE), ASL_ID(ASL_MSG_INVALID_GRAN_FIXED), ASL_ID(ASL_MSG_INVALID_GRANULARITY), ASL_ID(ASL_MSG_INVALID_LENGTH), ASL_ID(ASL_MSG_INVALID_LENGTH_FIXED), ASL_ID(ASL_MSG_INVALID_MIN_MAX), ASL_ID(ASL_MSG_INVALID_OPERAND), ASL_ID(ASL_MSG_INVALID_PERFORMANCE), ASL_ID(ASL_MSG_INVALID_PRIORITY), ASL_ID(ASL_MSG_INVALID_STRING), ASL_ID(ASL_MSG_INVALID_TARGET), ASL_ID(ASL_MSG_INVALID_TIME), ASL_ID(ASL_MSG_INVALID_TYPE), ASL_ID(ASL_MSG_INVALID_UUID), ASL_ID(ASL_MSG_ISA_ADDRESS), ASL_ID(ASL_MSG_LEADING_ASTERISK), ASL_ID(ASL_MSG_LIST_LENGTH_LONG), ASL_ID(ASL_MSG_LIST_LENGTH_SHORT), ASL_ID(ASL_MSG_LISTING_FILE_OPEN), ASL_ID(ASL_MSG_LISTING_FILENAME), ASL_ID(ASL_MSG_LOCAL_INIT), ASL_ID(ASL_MSG_LOCAL_OUTSIDE_METHOD), ASL_ID(ASL_MSG_LONG_LINE), ASL_ID(ASL_MSG_MEMORY_ALLOCATION), ASL_ID(ASL_MSG_MISSING_ENDDEPENDENT), ASL_ID(ASL_MSG_MISSING_STARTDEPENDENT), ASL_ID(ASL_MSG_MULTIPLE_DEFAULT), ASL_ID(ASL_MSG_MULTIPLE_TYPES), ASL_ID(ASL_MSG_NAME_EXISTS), ASL_ID(ASL_MSG_NAME_OPTIMIZATION), ASL_ID(ASL_MSG_NAMED_OBJECT_IN_WHILE), ASL_ID(ASL_MSG_NESTED_COMMENT), ASL_ID(ASL_MSG_NO_CASES), ASL_ID(ASL_MSG_NO_REGION), ASL_ID(ASL_MSG_NO_RETVAL), ASL_ID(ASL_MSG_NO_WHILE), ASL_ID(ASL_MSG_NON_ASCII), ASL_ID(ASL_MSG_BUFFER_FIELD_LENGTH), ASL_ID(ASL_MSG_NOT_EXIST), ASL_ID(ASL_MSG_NOT_FOUND), ASL_ID(ASL_MSG_NOT_METHOD), ASL_ID(ASL_MSG_NOT_PARAMETER), ASL_ID(ASL_MSG_NOT_REACHABLE), ASL_ID(ASL_MSG_NOT_REFERENCED), ASL_ID(ASL_MSG_NULL_DESCRIPTOR), ASL_ID(ASL_MSG_NULL_STRING), ASL_ID(ASL_MSG_OPEN), ASL_ID(ASL_MSG_OUTPUT_FILE_OPEN), ASL_ID(ASL_MSG_OUTPUT_FILENAME), ASL_ID(ASL_MSG_PACKAGE_LENGTH), ASL_ID(ASL_MSG_PREPROCESSOR_FILENAME), ASL_ID(ASL_MSG_READ), ASL_ID(ASL_MSG_RECURSION), ASL_ID(ASL_MSG_REGION_BUFFER_ACCESS), ASL_ID(ASL_MSG_REGION_BYTE_ACCESS), ASL_ID(ASL_MSG_RESERVED_ARG_COUNT_HI), ASL_ID(ASL_MSG_RESERVED_ARG_COUNT_LO), ASL_ID(ASL_MSG_RESERVED_METHOD), ASL_ID(ASL_MSG_RESERVED_NO_RETURN_VAL), ASL_ID(ASL_MSG_RESERVED_OPERAND_TYPE), ASL_ID(ASL_MSG_RESERVED_PACKAGE_LENGTH), ASL_ID(ASL_MSG_RESERVED_RETURN_VALUE), ASL_ID(ASL_MSG_RESERVED_USE), ASL_ID(ASL_MSG_RESERVED_WORD), ASL_ID(ASL_MSG_RESOURCE_FIELD), ASL_ID(ASL_MSG_RESOURCE_INDEX), ASL_ID(ASL_MSG_RESOURCE_LIST), ASL_ID(ASL_MSG_RESOURCE_SOURCE), ASL_ID(ASL_MSG_RESULT_NOT_USED), ASL_ID(ASL_MSG_RETURN_TYPES), ASL_ID(ASL_MSG_SCOPE_FWD_REF), ASL_ID(ASL_MSG_SCOPE_TYPE), ASL_ID(ASL_MSG_SEEK), ASL_ID(ASL_MSG_SERIALIZED), ASL_ID(ASL_MSG_SERIALIZED_REQUIRED), ASL_ID(ASL_MSG_SINGLE_NAME_OPTIMIZATION), ASL_ID(ASL_MSG_SOME_NO_RETVAL), ASL_ID(ASL_MSG_STRING_LENGTH), ASL_ID(ASL_MSG_SWITCH_TYPE), ASL_ID(ASL_MSG_SYNC_LEVEL), ASL_ID(ASL_MSG_SYNTAX), ASL_ID(ASL_MSG_TABLE_SIGNATURE), ASL_ID(ASL_MSG_TAG_LARGER), ASL_ID(ASL_MSG_TAG_SMALLER), ASL_ID(ASL_MSG_TIMEOUT), ASL_ID(ASL_MSG_TOO_MANY_TEMPS), ASL_ID(ASL_MSG_TRUNCATION), ASL_ID(ASL_MSG_UNKNOWN_RESERVED_NAME), ASL_ID(ASL_MSG_UNREACHABLE_CODE), ASL_ID(ASL_MSG_UNSUPPORTED), ASL_ID(ASL_MSG_UPPER_CASE), ASL_ID(ASL_MSG_VENDOR_LIST), ASL_ID(ASL_MSG_WRITE), ASL_ID(ASL_MSG_RANGE), ASL_ID(ASL_MSG_BUFFER_ALLOCATION), ASL_ID(ASL_MSG_MISSING_DEPENDENCY), ASL_ID(ASL_MSG_ILLEGAL_FORWARD_REF), ASL_ID(ASL_MSG_ILLEGAL_METHOD_REF), ASL_ID(ASL_MSG_LOCAL_NOT_USED), ASL_ID(ASL_MSG_ARG_AS_LOCAL_NOT_USED), ASL_ID(ASL_MSG_ARG_NOT_USED), ASL_ID(ASL_MSG_CONSTANT_REQUIRED), ASL_ID(ASL_MSG_CROSS_TABLE_SCOPE), ASL_ID(ASL_MSG_EXCEPTION_NOT_RECEIVED), ASL_ID(ASL_MSG_NULL_RESOURCE_TEMPLATE), ASL_ID(ASL_MSG_FOUND_HERE), ASL_ID(ASL_MSG_ILLEGAL_RECURSION), ASL_ID(ASL_MSG_DUPLICATE_INPUT_FILE), ASL_ID(ASL_MSG_WARNING_AS_ERROR), ASL_ID(ASL_MSG_OEM_TABLE_ID), ASL_ID(ASL_MSG_OEM_ID), ASL_ID(ASL_MSG_UNLOAD), ASL_ID(ASL_MSG_OFFSET), ASL_ID(ASL_MSG_LONG_SLEEP), ASL_ID(ASL_MSG_PREFIX_NOT_EXIST), ASL_ID(ASL_MSG_NAMEPATH_NOT_EXIST), ASL_ID(ASL_MSG_REGION_LENGTH), ASL_ID(ASL_MSG_TEMPORARY_OBJECT), ASL_ID(ASL_MSG_UNDEFINED_EXTERNAL), ASL_ID(ASL_MSG_BUFFER_FIELD_OVERFLOW), ASL_ID(ASL_MSG_BUFFER_ELEMENT), ASL_ID(ASL_MSG_DIVIDE_BY_ZERO), ASL_ID(ASL_MSG_FLAG_VALUE), ASL_ID(ASL_MSG_INTEGER_SIZE), ASL_ID(ASL_MSG_INVALID_EXPRESSION), ASL_ID(ASL_MSG_INVALID_FIELD_NAME), ASL_ID(ASL_MSG_INVALID_HEX_INTEGER), ASL_ID(ASL_MSG_OEM_TABLE), ASL_ID(ASL_MSG_RESERVED_VALUE), ASL_ID(ASL_MSG_UNKNOWN_LABEL), ASL_ID(ASL_MSG_UNKNOWN_SUBTABLE), ASL_ID(ASL_MSG_UNKNOWN_TABLE), ASL_ID(ASL_MSG_ZERO_VALUE), ASL_ID(ASL_MSG_DIRECTIVE_SYNTAX), ASL_ID(ASL_MSG_ENDIF_MISMATCH), ASL_ID(ASL_MSG_ERROR_DIRECTIVE), ASL_ID(ASL_MSG_EXISTING_NAME), ASL_ID(ASL_MSG_INVALID_INVOCATION), ASL_ID(ASL_MSG_MACRO_SYNTAX), ASL_ID(ASL_MSG_TOO_MANY_ARGUMENTS), ASL_ID(ASL_MSG_UNKNOWN_DIRECTIVE), ASL_ID(ASL_MSG_UNKNOWN_PRAGMA), ASL_ID(ASL_MSG_WARNING_DIRECTIVE), ASL_ID(ASL_MSG_INCLUDE_FILE), { 0, NULL, NULL } }; static int syntaxcheck_init(fwts_framework *fw) { (void)syntaxcheck_load_advice(fw); if (fwts_iasl_init(fw) != FWTS_OK) { fwts_aborted(fw, "Failure to initialise iasl, aborting."); return FWTS_ERROR; } return FWTS_OK; } static int syntaxcheck_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_iasl_deinit(); syntaxcheck_free_advice(); return FWTS_OK; } static inline uint16_t syntaxcheck_error_code_to_error_level(const uint32_t error_code) { uint16_t error_level = (error_code / 1000) - 1; return error_level; } static inline uint16_t syntaxcheck_error_code_to_error_number(const uint32_t error_code) { uint16_t error_number = (error_code % 1000); return error_number; } static const char *syntaxcheck_error_code_to_id(const uint32_t error_code) { int i; uint16_t error_number = syntaxcheck_error_code_to_error_number(error_code); static const char *unknown = "Unknown"; for (i = 0; syntaxcheck_error_map[i].id_str != NULL; i++) { if (syntaxcheck_error_map[i].error_number == error_number) return syntaxcheck_error_map[i].id_str; } return unknown; } static const char *syntaxcheck_error_level(uint32_t error_code) { uint16_t error_level = syntaxcheck_error_code_to_error_level(error_code); static char buf[64]; char *ptr; /* Out of range for some reason? */ if (error_level >= ASL_NUM_REPORT_LEVELS) return "Unknown"; /* AslErrorLevel strings are end-space padded, so strip off end spaces if any */ strncpy(buf, fwts_iasl_exception_level((uint8_t)error_level), sizeof(buf)); buf[sizeof(buf) -1] = '\0'; ptr = strchr(buf, ' '); if (ptr) *ptr = '\0'; return buf; } /* * syntaxcheck_dump_code() * output a block of source around where the error is reported */ static void syntaxcheck_dump_code(fwts_framework *fw, int error_code, int carat_offset, char *error_message, fwts_list* iasl_disassembly, int error_line, int howmany) { int i = 0; fwts_list_link *item; fwts_log_info_verbatim(fw, "Line | AML source\n"); fwts_log_underline(fw->results, '-'); fwts_list_foreach(item, iasl_disassembly) { i++; if (i >= error_line + (howmany / 2)) break; if (i > error_line - (howmany / 2)) { fwts_log_info_verbatim(fw, "%5.5d| %s\n", i, fwts_text_list_text(item)); if (i == error_line) { fwts_log_info_verbatim(fw, " | %*.*s", carat_offset, carat_offset, "^"); fwts_log_info_verbatim(fw, " | %s %d: %s\n", syntaxcheck_error_level(error_code), error_code, error_message); } } } fwts_log_underline(fw->results, '='); } /* * syntaxcheck_load_advice() * load error, advice string tuple from json formatted data file * this populates the syntaxcheck_error_map advice field. */ static int syntaxcheck_load_advice(fwts_framework *fw) { int ret = FWTS_ERROR; int n; int i; json_object *syntaxcheck_table; json_object *syntaxcheck_objs; char json_data_path[PATH_MAX]; snprintf(json_data_path, sizeof(json_data_path), "%s/%s", fw->json_data_path, SYNTAXCHECK_JSON_FILE); syntaxcheck_objs = json_object_from_file(json_data_path); if (FWTS_JSON_ERROR(syntaxcheck_objs)) { fwts_log_error(fw, "Cannot load objects table from %s.", json_data_path); return FWTS_ERROR; } #if JSON_HAS_GET_EX if (!json_object_object_get_ex(syntaxcheck_objs, "erroradvice", &syntaxcheck_table)) { fwts_log_error(fw, "Cannot fetch syntaxcheck table from %s.", json_data_path); goto fail_put; } #else syntaxcheck_table = json_object_object_get(syntaxcheck_objs, "erroradvice"); if (FWTS_JSON_ERROR(syntaxcheck_table)) { fwts_log_error(fw, "Cannot fetch syntaxcheck table from %s.", json_data_path); goto fail_put; } #endif n = json_object_array_length(syntaxcheck_table); /* Now fetch json objects */ for (i = 0; i < n; i++) { const char *advice, *id_str; json_object *obj; #if JSON_HAS_GET_EX json_object *obj_str; #endif int j; obj = json_object_array_get_idx(syntaxcheck_table, i); if (FWTS_JSON_ERROR(obj)) { fwts_log_error(fw, "Cannot fetch %d item from syntaxcheck table.", i); break; } #if JSON_HAS_GET_EX if (!json_object_object_get_ex(obj, "advice", &obj_str)) { fwts_log_error(fw, "Cannot fetch advice object from item %d.", i); break; } advice = json_object_get_string(obj_str); #else advice = json_object_get_string(json_object_object_get(obj, "advice")); #endif if (FWTS_JSON_ERROR(advice)) { fwts_log_error(fw, "Cannot fetch advice string from item %d.", i); break; } #if JSON_HAS_GET_EX if (!json_object_object_get_ex(obj, "id", &obj_str)) { fwts_log_error(fw, "Cannot fetch ID object from item %d.", i); break; } id_str = json_object_get_string(obj_str); #else id_str = json_object_get_string(json_object_object_get(obj, "id")); #endif if (FWTS_JSON_ERROR(id_str)) { fwts_log_error(fw, "Cannot fetch ID string from item %d.", i); break; } for (j = 0; syntaxcheck_error_map[j].id_str != NULL; j++) { if (strcmp(id_str, syntaxcheck_error_map[j].id_str) == 0) { /* Matching id, so update the advice field */ syntaxcheck_error_map[j].advice = strdup(advice); break; } } } ret = FWTS_OK; fail_put: json_object_put(syntaxcheck_objs); return ret; } /* * syntaxcheck_free_advice() * free up the adviceinfo data */ static void syntaxcheck_free_advice(void) { int i; for (i = 0; syntaxcheck_error_map[i].id_str != NULL; i++) if (syntaxcheck_error_map[i].advice) free(syntaxcheck_error_map[i].advice); } /* * syntaxcheck_give_advice() * look up advice on a given error number and give advice if any exists */ static void syntaxcheck_give_advice(fwts_framework *fw, uint32_t error_code) { int i; /* iasl encodes error_codes as follows: */ uint16_t error_number = syntaxcheck_error_code_to_error_number(error_code); for (i = 0; syntaxcheck_error_map[i].id_str != NULL; i++) { if ((syntaxcheck_error_map[i].error_number == error_number) && (syntaxcheck_error_map[i].advice != NULL)) { fwts_advice(fw, "(for %s #%d, %s): %s", syntaxcheck_error_level(error_code), error_code, syntaxcheck_error_map[i].id_str, syntaxcheck_error_map[i].advice); break; } } } /* * syntaxcheck_single_table() * disassemble and reassemble a table, check for errors. which indicates the Nth * table */ static int syntaxcheck_single_table( fwts_framework *fw, const fwts_acpi_table_info *info, const int n) { fwts_list_link *item; int errors = 0; int warnings = 0; int remarks = 0; fwts_list *iasl_stdout = NULL, *iasl_stderr = NULL, *iasl_disassembly = NULL; if (fwts_iasl_reassemble(fw, info, &iasl_disassembly, &iasl_stdout, &iasl_stderr) != FWTS_OK) { fwts_text_list_free(iasl_disassembly); fwts_text_list_free(iasl_stderr); fwts_text_list_free(iasl_stdout); fwts_aborted(fw, "Cannot re-assasemble with iasl."); return FWTS_ERROR; } fwts_log_nl(fw); fwts_log_info(fw, "Checking ACPI table %s (#%d)", info->name, n); fwts_log_nl(fw); if (iasl_stderr) { /* Scan error text from assembly */ fwts_list_foreach(item, iasl_stderr) { int num; char ch; char *line = fwts_text_list_text(item); if ((sscanf(line, "%*s %d%c", &num, &ch) == 2) && ch == ':') { if (item->next != NULL) { char *error_text = fwts_text_list_text(item->next); int iasl_error = (strstr(error_text, "Error") != NULL); int iasl_warning = (strstr(error_text, "Warning") != NULL); int iasl_remark = (strstr(error_text, "Remark") != NULL); int error_code; sscanf(error_text, "%*s %d", &error_code); /* Valid error or warning, go and report */ if (iasl_error || iasl_warning || iasl_remark) { char label[64]; char *colon = strstr(line, ":"); char *carat = strstr(error_text, "^"); char *ptr; int colon_offset = (colon == NULL) ? 0 : colon + 1 - line; int carat_offset = (carat == NULL) ? 0 : carat - error_text; uint16_t error_level = syntaxcheck_error_code_to_error_level((uint32_t)error_code); bool skip = false; /* trim */ fwts_chop_newline(error_text); /* Strip out the ^ from the error message */ for (ptr = error_text; *ptr; ptr++) if (*ptr == '^') *ptr = ' '; /* Look for error message after: "Error: 4042 - " prefix */ ptr = strstr(error_text, "-"); if (ptr) ptr += 2; else ptr = error_text; /* Urgh, none found, default */ /* Skip over leading white space */ while (*ptr == ' ') ptr++; snprintf(label, sizeof(label), "AMLAsm%s", syntaxcheck_error_code_to_id(error_code)); switch (error_level) { case ASL_WARNING: case ASL_WARNING2: case ASL_WARNING3: fwts_failed(fw, LOG_LEVEL_MEDIUM, label, "Assembler warning in line %d", num); break; case ASL_ERROR: fwts_failed(fw, LOG_LEVEL_HIGH, label, "Assembler error in line %d", num); break; case ASL_REMARK: if (syntaxcheck_error_code_to_error_number(error_code) == ASL_MSG_COMPILER_RESERVED) fwts_log_info(fw, "Assembler remark in line %d", num); else fwts_failed(fw, LOG_LEVEL_LOW, label, "Assembler remark in line %d", num); break; case ASL_OPTIMIZATION: skip = true; break; default: fwts_log_info(fw, "Assembler message in line %d", num); break; } if (!skip) { syntaxcheck_dump_code(fw, error_code, carat_offset - colon_offset, ptr, iasl_disassembly, num, 8); syntaxcheck_give_advice(fw, error_code); } } errors += iasl_error; warnings += iasl_warning; remarks += iasl_remark; item = item->next; } else { fwts_log_info(fw, "%s", line); fwts_log_error(fw, "Could not find parser error message " "(this can happen if iasl segfaults!)"); } } } } /* * Did iasl emit any errors that we need to check? */ if (iasl_stderr) { fwts_list_foreach(item, iasl_stderr) { char *line = fwts_text_list_text(item); if (strstr(line, "Compiler aborting due to parser-detected syntax error")) { fwts_failed(fw, LOG_LEVEL_HIGH, "SyntaxCheckIASLCompilerAborted", "Compilation aborted early due to a parser detected syntax error."); fwts_advice(fw, "Some subsequent errors may not be detected because the " "compiler had to terminate prematurely. If the compiler did not " "abort early then potentially correct code may parse incorrectly " "producing some or many false positive errors."); } } } fwts_text_list_free(iasl_disassembly); fwts_text_list_free(iasl_stdout); fwts_text_list_free(iasl_stderr); if (errors + warnings + remarks > 0) fwts_log_info(fw, "Table %s (%d) reassembly: Found %d errors, %d warnings, %d remarks.", info->name, n, errors, warnings, remarks); else fwts_passed(fw, "%s (%d) reassembly, Found 0 errors, 0 warnings, 0 remarks.", info->name, n); fwts_log_nl(fw); return FWTS_OK; } static int syntaxcheck_tables(fwts_framework *fw) { int i, n; for (i = 0, n = 0; i < ACPI_MAX_TABLES; i++) { fwts_acpi_table_info *info; if (fwts_acpi_get_table(fw, i, &info) != FWTS_OK) break; if (info && info->has_aml) syntaxcheck_single_table(fw, info, n++); } return FWTS_OK; } static fwts_framework_minor_test syntaxcheck_tests[] = { { syntaxcheck_tables, "Disassemble and reassemble DSDT and SSDTs." }, { NULL, NULL } }; static fwts_framework_ops syntaxcheck_ops = { .description = "Re-assemble DSDT and SSDTs to find syntax errors and warnings.", .init = syntaxcheck_init, .deinit = syntaxcheck_deinit, .minor_tests = syntaxcheck_tests }; FWTS_REGISTER("syntaxcheck", &syntaxcheck_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH_EXPERIMENTAL) #endif src/acpi/tcpa/000077500000000000000000000000001465205512700135175ustar00rootroot00000000000000src/acpi/tcpa/tcpa.c000066400000000000000000000147431465205512700146230ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(TCPA, &table) static int tcpa_client_test(fwts_framework *fw, fwts_acpi_table_tcpa *tcpa) { bool passed = true; fwts_acpi_fixed_value(fw, LOG_LEVEL_HIGH, "TCPA", "Length", tcpa->header.length, 50, &passed); fwts_acpi_revision_check("TCPA", tcpa->header.revision, 2, &passed); fwts_log_info_verbatim(fw, "TCPA Table:"); fwts_log_info_simp_int(fw, " Platform Class: ", tcpa->platform_class); fwts_log_info_simp_int(fw, " Log Area Minimum Length: ", tcpa->client.log_zone_length); fwts_log_info_simp_int(fw, " Log Area Start Address: ", tcpa->client.log_zone_addr); return passed; } static int tcpa_server_test(fwts_framework *fw, fwts_acpi_table_tcpa *tcpa) { bool passed = true; uint32_t reserved2; fwts_acpi_fixed_value(fw, LOG_LEVEL_HIGH, "TCPA", "Length", tcpa->header.length, 100, &passed); fwts_acpi_revision_check("TCPA", tcpa->header.revision, 2, &passed); reserved2 = tcpa->server.reserved2[0] + (tcpa->server.reserved2[1] << 4) + (tcpa->server.reserved2[2] << 8); fwts_log_info_verbatim(fw, "TCPA Table:"); fwts_log_info_simp_int(fw, " Platform Class: ", tcpa->platform_class); fwts_log_info_simp_int(fw, " Reserved: ", tcpa->server.reserved); fwts_log_info_simp_int(fw, " Log Area Minimum Length: ", tcpa->server.log_zone_length); fwts_log_info_simp_int(fw, " Log Area Start Address: ", tcpa->server.log_zone_addr); fwts_log_info_simp_int(fw, " Specification Revision: ", tcpa->server.spec_revision); fwts_log_info_simp_int(fw, " Device Flags: ", tcpa->server.device_flag); fwts_log_info_simp_int(fw, " Interrupt Flags: ", tcpa->server.interrupt_flag); fwts_log_info_simp_int(fw, " GPE: ", tcpa->server.gpe); fwts_log_info_simp_int(fw, " Reserved: ", reserved2); fwts_log_info_simp_int(fw, " Global System Interrupt: ", tcpa->server.global_sys_interrupt); fwts_log_info_verbatim(fw, " Base Address:"); fwts_log_info_simp_int(fw, " Address Space ID: ", tcpa->server.base_addr.address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", tcpa->server.base_addr.register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", tcpa->server.base_addr.register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", tcpa->server.base_addr.access_width); fwts_log_info_simp_int(fw, " Address ", tcpa->server.base_addr.address); fwts_log_info_simp_int(fw, " Reserved: ", tcpa->server.reserved3); fwts_log_info_verbatim(fw, " Configuration Address:"); fwts_log_info_simp_int(fw, " Address Space ID: ", tcpa->server.config_addr.address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", tcpa->server.config_addr.register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", tcpa->server.config_addr.register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", tcpa->server.config_addr.access_width); fwts_log_info_simp_int(fw, " Address ", tcpa->server.config_addr.address); fwts_log_info_simp_int(fw, " PCI Segment Group: ", tcpa->server.pci_seg_number); fwts_log_info_simp_int(fw, " PCI Bus: ", tcpa->server.pci_bus_number); fwts_log_info_simp_int(fw, " PCI Device: ", tcpa->server.pci_dev_number); fwts_log_info_simp_int(fw, " PCI Function: ", tcpa->server.pci_func_number); fwts_acpi_reserved_zero("TCPA", "Reserved", tcpa->server.reserved, &passed); fwts_acpi_reserved_zero("TCPA", "Reserved2", reserved2, &passed); fwts_acpi_reserved_zero("TCPA", "Reserved3", tcpa->server.reserved3, &passed); if (tcpa->server.device_flag & 1) { if (!(tcpa->server.interrupt_flag & 2)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "TCPABadInterruptPolarity", "TCPA interrupt Polarity should be one, got zero"); } if (tcpa->server.interrupt_flag & 1) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "TCPABadInterruptMode", "TCPA interrupt mode should be zero, got one"); } } fwts_acpi_space_id(fw, "TCPA", "Base Address", &passed, tcpa->server.base_addr.address_space_id, 2, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_MEMORY, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_IO); fwts_acpi_space_id(fw, "TCPA", "Configuration Address", &passed, tcpa->server.config_addr.address_space_id, 2, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_MEMORY, FWTS_GAS_ADDR_SPACE_ID_SYSTEM_IO); return passed; } /* * TCPA table * available @ http://www.trustedcomputinggroup.org/files/static_page_files/648D7D46-1A4B-B294-D088037B8F73DAAF/TCG_ACPIGeneralSpecification_1-10_0-37-Published.pdf */ static int tcpa_test1(fwts_framework *fw) { fwts_acpi_table_tcpa *tcpa = (fwts_acpi_table_tcpa*)table->data; bool passed; switch (tcpa->platform_class) { case 0: passed = tcpa_client_test(fw, tcpa); break; case 1: passed = tcpa_server_test(fw, tcpa); break; default: passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "TCPABadPlatformClass", "TCPA's platform class must be zero or one, got 0x%" PRIx16, tcpa->platform_class); break; } if (passed) fwts_passed(fw, "No issues found in TCPA table."); return FWTS_OK; } static fwts_framework_minor_test tcpa_tests[] = { { tcpa_test1, "Validate TCPA table." }, { NULL, NULL } }; static fwts_framework_ops tcpa_ops = { .description = "TCPA Trusted Computing Platform Alliance Capabilities Table test.", .init = TCPA_init, .minor_tests = tcpa_tests }; FWTS_REGISTER("tcpa", &tcpa_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/tpm2/000077500000000000000000000000001465205512700134525ustar00rootroot00000000000000src/acpi/tpm2/tpm2.c000066400000000000000000000062511465205512700145040ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(TPM2, &table) /* * TPM2 table * available @ https://trustedcomputinggroup.org/tcg-acpi-specification/ */ static int tpm2_test1(fwts_framework *fw) { fwts_acpi_table_tpm2 *tpm2 = (fwts_acpi_table_tpm2*) table->data; bool passed = true; fwts_log_info_verbatim(fw, "TPM2 Table:"); fwts_log_info_simp_int(fw, " Platform Class: ", tpm2->platform_class); fwts_log_info_simp_int(fw, " Reserved: ", tpm2->reserved); fwts_log_info_simp_int(fw, " Address of Control Area: ", tpm2->address_of_control_area); fwts_log_info_simp_int(fw, " Start Method: ", tpm2->start_method); if (tpm2->platform_class != 0 && tpm2->platform_class != 1) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "TPM2BadPlatformClass", "TPM2's platform class must be zero (client) or one (server), got 0x%" PRIx16, tpm2->platform_class); } fwts_acpi_reserved_zero("TPM2", "Reserved", tpm2->reserved, &passed); if (tpm2->start_method < 1 || tpm2->start_method >= 14) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "TPM2BadStartMethod", "TPM2's Start Method must be between 0x1 and 0xd, got 0x%" PRIx16, tpm2->start_method); } /* When TPM2 includes fields "LAML" & "LASA", table size will be fixed to 76. */ if (table->length != 76) { if (tpm2->start_method == 2 && table->length != sizeof(fwts_acpi_table_tpm2) + 4) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "TPM2BadPlatformParameters", "Table length must be 0x%" PRIx32 " if Start Method equals 2, " "got 0x%" PRIx32, (uint32_t) sizeof(fwts_acpi_table_tpm2) + 4, (uint32_t) table->length); } if (tpm2->start_method == 11 && table->length < sizeof(fwts_acpi_table_tpm2) + 12) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "TPM2BadPlatformParameters", "Table length must be at least 0x%" PRIx32 " if Start Method equals 11, " "got 0x%" PRIx32, (uint32_t) sizeof(fwts_acpi_table_tpm2) + 12, (uint32_t) table->length); } } if (passed) fwts_passed(fw, "No issues found in TPM2 table."); return FWTS_OK; } static fwts_framework_minor_test tpm2_tests[] = { { tpm2_test1, "Validate TPM2 table." }, { NULL, NULL } }; static fwts_framework_ops tpm2_ops = { .description = "TPM2 Trusted Platform Module 2 test.", .init = TPM2_init, .minor_tests = tpm2_tests }; FWTS_REGISTER("tpm2", &tpm2_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/uefi/000077500000000000000000000000001465205512700135205ustar00rootroot00000000000000src/acpi/uefi/uefi.c000066400000000000000000000071771465205512700146300ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(UEFI, &table) /* * UEFI ACPI DATA Table * See UEFI specification Appendix O. */ static int uefi_test1(fwts_framework *fw) { fwts_acpi_table_uefi *uefi = (fwts_acpi_table_uefi *)table->data; bool passed = true; uint32_t i; char guid[37]; /* * GUID for SMM Communication ACPI Table * {0xc68ed8e2, 0x9dc6, 0x4cbd, 0x9d, 0x94, 0xdb, 0x65, 0xac, 0xc5, 0xc3, 0x32} */ static const uint8_t guid_smm[16] = { 0xe2, 0xd8, 0x8e, 0xc6, 0xc6, 0x9d, 0xbd, 0x4c, 0x9d, 0x94, 0xdb, 0x65, 0xac, 0xc5, 0xc3, 0x32 }; /* Enough length for the uefi table? */ if (!fwts_acpi_table_length(fw, "UEFI", table->length, sizeof(fwts_acpi_table_uefi))) { passed = false; goto done; } fwts_guid_buf_to_str(uefi->uuid, guid, sizeof(guid)); fwts_log_info_verbatim(fw, "UEFI ACPI Data Table:"); fwts_log_info_verbatim(fw, " Identifier: %s", guid); fwts_log_info_simp_int(fw, " DataOffset: ", uefi->dataoffset); /* Sanity check the dataoffset */ if (uefi->dataoffset > table->length) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIDataOffset", "Invalid UEFI DataOffset, exceed the whole table length " "%zu bytes, instead got %" PRIu16 " offset bytes" , table->length, uefi->dataoffset); } /* check the GUID for SMM Communication ACPI table */ if (memcmp(uefi->uuid, guid_smm, 16) == 0) { fwts_acpi_table_uefi_smmcomm *uefi_smmcomm = (fwts_acpi_table_uefi_smmcomm *)table->data; /* check the dataoffset for SMM Comm table */ if (uefi_smmcomm->boot.dataoffset != 54) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIDataOffset", "Invalid UEFI DataOffset for SMM Communication table, " "DataOffset should be 54, instead got %" PRIu16 " offset bytes" , uefi_smmcomm->boot.dataoffset); } fwts_log_info_simp_int(fw, " SW SMI Number: ", uefi_smmcomm->sw_smi_number); fwts_log_info_simp_int(fw, " Buffer Ptr Address: ", uefi_smmcomm->buf_ptr_addr); } else { /* dump the remaining data */ fwts_log_info_verbatim(fw, " Data:"); for (i = 0; i < (table->length - uefi->dataoffset) ; i += 16) { int left = table->length - uefi->dataoffset -i; char buffer[128]; fwts_dump_raw_data(buffer,sizeof(buffer), uefi->data + i, i, left > 16 ? 16 : left); fwts_log_info_verbatim(fw, "%s", buffer); } } done: if (passed) fwts_passed(fw, "No issues found in UEFI table."); return FWTS_OK; } static fwts_framework_minor_test uefi_tests[] = { { uefi_test1, "UEFI Data Table test." }, { NULL, NULL } }; static fwts_framework_ops uefi_ops = { .description = "UEFI Data Table test.", .init = UEFI_init, .minor_tests = uefi_tests }; FWTS_REGISTER("uefi", &uefi_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/uniqueid/000077500000000000000000000000001465205512700144135ustar00rootroot00000000000000src/acpi/uniqueid/uniqueid.c000066400000000000000000000131201465205512700163770ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include #include "fwts_acpi_object_eval.h" typedef struct { char *hid_name; ACPI_OBJECT *hid_obj; /* this can be _HID or _CID */ ACPI_OBJECT *uid_obj; } acpi_ids; static fwts_list *hid_list; static int uniqueid_init(fwts_framework *fw) { if (fwts_acpi_init(fw) != FWTS_OK) { fwts_log_error(fw, "Cannot initialise ACPI."); return FWTS_ERROR; } if ((hid_list = fwts_list_new()) == NULL) return FWTS_ERROR; return FWTS_OK; } static int uniqueid_deinit(fwts_framework *fw) { fwts_keymap_free(hid_list); return fwts_acpi_deinit(fw); } static int uniqueid_evaluate_method(fwts_framework *fw, char *name, ACPI_OBJECT *args, int num_args, fwts_method_return check_func, void *private) { fwts_list *methods; const size_t name_len = strlen(name); if ((methods = fwts_acpi_object_get_names()) != NULL) { fwts_list_link *item; fwts_list_foreach(item, methods) { char *method_name = fwts_list_data(char*, item); ACPI_HANDLE method_handle; ACPI_OBJECT_TYPE type; ACPI_STATUS status; size_t len = strlen(method_name); if (strncmp(name, method_name + len - name_len, name_len) == 0) { ACPI_OBJECT_LIST arg_list; status = AcpiGetHandle (NULL, method_name, &method_handle); if (ACPI_FAILURE(status)) { fwts_warning(fw, "Failed to get handle for object %s.", name); continue; } status = AcpiGetType(method_handle, &type); if (ACPI_FAILURE(status)) { fwts_warning(fw, "Failed to get object type for %s.",name); continue; } if (type == ACPI_TYPE_LOCAL_SCOPE) continue; arg_list.Count = num_args; arg_list.Pointer = args; method_evaluate_found_method(fw, method_name, check_func, private, &arg_list); } } } return FWTS_OK; } static bool is_uniqueid_equal(acpi_ids *obj1, acpi_ids *obj2) { bool hid_match = false; if (obj1 == NULL || obj2 == NULL) return false; /* _HID and _CID are in the same device */ if (!strncmp(obj1->hid_name, obj2->hid_name, strlen(obj1->hid_name) - 4)) return false; if ((obj1->hid_obj->Type != obj2->hid_obj->Type) || (obj1->uid_obj->Type != obj2->uid_obj->Type)) return false; switch (obj1->hid_obj->Type) { case ACPI_TYPE_STRING: if (strcmp(obj1->hid_obj->String.Pointer, obj2->hid_obj->String.Pointer)) return false; hid_match = true; break; case ACPI_TYPE_INTEGER: if (obj1->hid_obj->Integer.Value != obj2->hid_obj->Integer.Value) return false; hid_match = true; break; } switch (obj1->uid_obj->Type) { case ACPI_TYPE_STRING: if (strcmp(obj1->uid_obj->String.Pointer, obj2->uid_obj->String.Pointer) && hid_match) return false; break; case ACPI_TYPE_INTEGER: if (obj1->uid_obj->Integer.Value != obj2->uid_obj->Integer.Value && hid_match) return false; break; } return true; } static void unique_HID_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { const size_t name_len = strlen(name) + 1; char uid_name[name_len]; ACPI_OBJECT *hid_obj, *uid_obj; ACPI_BUFFER hid_buf, uid_buf; fwts_list_link *item; bool passed = true; ACPI_STATUS status; acpi_ids *obj1; FWTS_UNUSED(buf); FWTS_UNUSED(obj); FWTS_UNUSED(private); strlcpy(uid_name, name, name_len); uid_name[name_len - 4] = 'U'; status = fwts_acpi_object_evaluate(fw, name, NULL, &hid_buf); if (ACPI_FAILURE(status)) return; hid_obj = hid_buf.Pointer; status = fwts_acpi_object_evaluate(fw, uid_name, NULL, &uid_buf); if (ACPI_FAILURE(status)) return; uid_obj = uid_buf.Pointer; obj1 = (acpi_ids *)calloc(1, sizeof(acpi_ids)); if (!obj1) return; obj1->hid_name = name; obj1->hid_obj = hid_obj; obj1->uid_obj = uid_obj; fwts_list_foreach(item, hid_list) { acpi_ids *obj2 = fwts_list_data(acpi_ids*, item); if (is_uniqueid_equal(obj1, obj2)) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "HardwareIDNotUnique", "%s/_UID conflict with %s/_UID", name, obj2->hid_name); break; } } if (passed) { fwts_list_append(hid_list, obj1); fwts_passed(fw, "%s/_UID is unique.", name); } else { free(obj1); } } static int uniqueid_test1(fwts_framework *fw) { return uniqueid_evaluate_method(fw, "_HID", NULL, 0, unique_HID_return, NULL); } static int uniqueid_test2(fwts_framework *fw) { return uniqueid_evaluate_method(fw, "_CID", NULL, 0, unique_HID_return, NULL); } static fwts_framework_minor_test uniqueid_tests[] = { { uniqueid_test1, "ACPI _HID unique ID test." }, { uniqueid_test2, "ACPI _CID unique ID test." }, { NULL, NULL } }; static fwts_framework_ops uniqueid_ops = { .description = "ACPI Unique IDs test.", .init = uniqueid_init, .deinit = uniqueid_deinit, .minor_tests = uniqueid_tests }; FWTS_REGISTER("uniqueid", &uniqueid_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH) #endif src/acpi/viot/000077500000000000000000000000001465205512700135515ustar00rootroot00000000000000src/acpi/viot/viot.c000066400000000000000000000155421465205512700147050ustar00rootroot00000000000000/* * Copyright (C) 2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(VIOT, &table) static int viot_test1(fwts_framework *fw) { fwts_acpi_viot_node_hdr *node_hdr; bool passed = true; uint32_t offset; fwts_acpi_table_viot *viot = (fwts_acpi_table_viot *)table->data; fwts_log_info_verbatim(fw, "VIOT Virtual I/O Translation Table:"); fwts_log_info_simp_int(fw, " Node Count: ", viot->node_count); fwts_log_info_simp_int(fw, " Node Offset: ", viot->node_offset); if (viot->node_offset == 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "VIOTinvalidOffset", "VIOT Offset for the first node should not be 0."); return FWTS_OK; } fwts_log_info_simp_int(fw, " Reserved: ", viot->reserved); fwts_acpi_reserved_zero("VIOT", "Reserved", viot->reserved, &passed); offset = viot->node_offset; if (offset >= table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "VIOTOutOfRangeOffset", "VIOT Node Data Offset is out of range."); return FWTS_OK; } node_hdr = (fwts_acpi_viot_node_hdr *)(table->data + offset); for (uint32_t i = 0; i < viot->node_count; i++) { if (fwts_acpi_structure_length_zero(fw, "VIOT", node_hdr->length, offset)) { passed = false; break; } if ((offset + node_hdr->length) > table->length) { fwts_failed(fw, LOG_LEVEL_HIGH, "VIOTOutOfRangeOffset", "VIOT Node Data Offset is out of range."); return FWTS_OK; } fwts_acpi_viot_pci_rng_node *pci_rng = NULL; fwts_acpi_viot_mmio_ep_node *mmio_ep = NULL; fwts_acpi_viot_pci_iommu_node *pci_iommu = NULL; fwts_acpi_viot_mmio_iommu_node *mmio_iommu = NULL; switch(node_hdr->type) { case 1: pci_rng = (fwts_acpi_viot_pci_rng_node *)(table->data + offset); fwts_log_info_verbatim(fw, " PCI Range Node Structure:"); fwts_log_info_simp_int(fw, " Type: ", pci_rng->hdr.type); fwts_log_info_simp_int(fw, " Reserved: ", pci_rng->hdr.reserved); fwts_acpi_reserved_zero("VIOT", "Reserved", pci_rng->hdr.reserved, &passed); fwts_log_info_simp_int(fw, " length: ", pci_rng->hdr.length); fwts_log_info_simp_int(fw, " Endpoint Start: ", pci_rng->endpoint_start); fwts_log_info_simp_int(fw, " PCI Segment Start: ", pci_rng->pci_seg_start); fwts_log_info_simp_int(fw, " PCI Segment End: ", pci_rng->pci_seg_end); fwts_log_info_simp_int(fw, " PCI BDF Start: ", pci_rng->pci_bdf_start); fwts_log_info_simp_int(fw, " PCI BDF End: ", pci_rng->pci_bdf_end); fwts_log_info_simp_int(fw, " PCI Segment End: ", pci_rng->output_node); fwts_hexdump_data_prefix_all(fw, pci_rng->reserved, " ", sizeof(pci_rng->reserved)); fwts_acpi_reserved_zero_array(fw, "VIOT", "Reserved", pci_rng->reserved, 6, &passed); offset += sizeof(fwts_acpi_viot_pci_rng_node); break; case 2: mmio_ep = (fwts_acpi_viot_mmio_ep_node *)(table->data + offset); fwts_log_info_verbatim(fw, " Single MMIO Endpoint Node Structure:"); fwts_log_info_simp_int(fw, " Type: ", mmio_ep->hdr.type); fwts_log_info_simp_int(fw, " Reserved: ", mmio_ep->hdr.reserved); fwts_acpi_reserved_zero("VIOT", "Reserved", mmio_ep->hdr.reserved, &passed); fwts_log_info_simp_int(fw, " length: ", mmio_ep->hdr.length); fwts_log_info_simp_int(fw, " Endpoint ID: ", mmio_ep->endpoint_id); fwts_log_info_simp_int(fw, " Base Address: ", mmio_ep->base_addr); fwts_log_info_simp_int(fw, " Output Node: ", mmio_ep->output_node); fwts_hexdump_data_prefix_all(fw, mmio_ep->reserved, " ", sizeof(mmio_ep->reserved)); fwts_acpi_reserved_zero_array(fw, "VIOT", "Reserved", mmio_ep->reserved, 6, &passed); offset += sizeof(fwts_acpi_viot_mmio_ep_node); break; case 3: pci_iommu = (fwts_acpi_viot_pci_iommu_node *)(table->data + offset); fwts_log_info_verbatim(fw, " Virtio-iommu based on virtio-pci Node Structure:"); fwts_log_info_simp_int(fw, " Type: ", pci_iommu->hdr.type); fwts_log_info_simp_int(fw, " Reserved: ", pci_iommu->hdr.reserved); fwts_acpi_reserved_zero("VIOT", "Reserved", pci_iommu->hdr.reserved, &passed); fwts_log_info_simp_int(fw, " length: ", pci_iommu->hdr.length); fwts_log_info_simp_int(fw, " PCI Segment: ", pci_iommu->pci_seg); fwts_log_info_simp_int(fw, " PCI BDF Number: ", pci_iommu->pci_bdf_num); fwts_log_info_simp_int(fw, " Reserved: ", pci_iommu->reserved); fwts_acpi_reserved_zero("VIOT", "Reserved", pci_iommu->reserved, &passed); offset += sizeof(fwts_acpi_viot_pci_iommu_node); break; case 4: mmio_iommu = (fwts_acpi_viot_mmio_iommu_node *)(table->data + offset); fwts_log_info_verbatim(fw, " Virtio-iommu based on virtio-pci Node Structure:"); fwts_log_info_simp_int(fw, " Type: ", mmio_iommu->hdr.type); fwts_log_info_simp_int(fw, " Reserved: ", mmio_iommu->hdr.reserved); fwts_acpi_reserved_zero("VIOT", "Reserved", mmio_iommu->hdr.reserved, &passed); fwts_log_info_simp_int(fw, " length: ", mmio_iommu->hdr.length); fwts_log_info_simp_int(fw, " Reserved: ", mmio_iommu->reserved); fwts_acpi_reserved_zero("VIOT", "Reserved", mmio_iommu->reserved, &passed); fwts_log_info_simp_int(fw, " Base Address: ", mmio_iommu->base_addr); offset += sizeof(fwts_acpi_viot_mmio_iommu_node); break; case 0: default: passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "VIOTBadNodeType", "VIOT node structure types must not have the value 0, 0x05..0xff, got " "0x%2.2" PRIx8 " instead", node_hdr->type); offset += node_hdr->length; break; } node_hdr = (fwts_acpi_viot_node_hdr *)(table->data + offset); fwts_log_nl(fw); } if (passed) fwts_passed(fw, "No issues found in VIOT table."); return FWTS_OK; } static fwts_framework_minor_test viot_tests[] = { { viot_test1, "Validate VIOT table." }, { NULL, NULL } }; static fwts_framework_ops viot_ops = { .description = "VIOT Virtual I/O Translation Table test.", .init = VIOT_init, .minor_tests = viot_tests }; FWTS_REGISTER("viot", &viot_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/waet/000077500000000000000000000000001465205512700135305ustar00rootroot00000000000000src/acpi/waet/waet.c000066400000000000000000000045201465205512700146350ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) && !(FWTS_ARCH_AARCH64) #include #include #include #include #include #include #include "fwts_acpi_object_eval.h" static fwts_acpi_table_info *table; acpi_table_init(WAET, &table) /* * WAET Windows ACPI Emulated Devices Table * see http://msdn.microsoft.com/en-us/windows/hardware/gg487524.aspx */ static int waet_test1(fwts_framework *fw) { bool passed = true; fwts_acpi_table_waet *waet = (fwts_acpi_table_waet *)table->data; /* Enough length for the initial waet header? */ if (!fwts_acpi_table_length(fw, "WAET", table->length, sizeof(fwts_acpi_table_waet))) { passed = false; goto done; } fwts_log_info_verbatim(fw, "WAET Table:"); fwts_log_info_simp_int(fw, " Emulated Device Flags: ", waet->flags); fwts_log_info_verbatim(fw, " Bit [0] RTC Good: %1" PRIu32, waet->flags & 1); fwts_log_info_verbatim(fw, " Bit [1] PM Timer Good: %1" PRIu32, (waet->flags >> 1) & 1); fwts_log_nl(fw); fwts_acpi_reserved_bits("WAET", "Emulated Device Flags", waet->flags, 2, 31, &passed); done: if (passed) fwts_passed(fw, "No issues found in WAET table."); return FWTS_OK; } static fwts_framework_minor_test waet_tests[] = { { waet_test1, "Windows ACPI Emulated Devices Table test." }, { NULL, NULL } }; static fwts_framework_ops waet_ops = { .description = "WAET Windows ACPI Emulated Devices Table test.", .init = WAET_init, .minor_tests = waet_tests }; FWTS_REGISTER("waet", &waet_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/wakealarm/000077500000000000000000000000001465205512700145345ustar00rootroot00000000000000src/acpi/wakealarm/wakealarm.c000066400000000000000000000124071465205512700166500ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include #include #include #include static struct rtc_time rtc_tm; static int wakealarm_test1(fwts_framework *fw) { if (fwts_wakealarm_get(fw, &rtc_tm) == FWTS_OK) { fwts_passed(fw, "RTC with a RTC alarm ioctl() interface found."); } else { #ifdef FWTS_ARCH_INTEL /* For x86 devices, this is considered a failure */ fwts_failed(fw, LOG_LEVEL_MEDIUM, "NoWakeAlarmTest1", "Could not find an RTC with an alarm ioctl() interface."); fwts_advice(fw, "x86 devices generally should have an RTC wake alarm that " "is normally controlled by the RTC alarm ioctl() interface. This interface " "does not exist, so the wake alarm tests will be aborted."); return FWTS_ABORTED; #else fwts_log_info(fw, "non-x86 devices sometimes do not have an RTC wake alarm that " "is normally controlled by the RTC alarm ioctl() interface. This " "interface does not exist, so the wake alarm tests will be skipped."); return FWTS_SKIP; #endif } return FWTS_OK; } static int wakealarm_test2(fwts_framework *fw) { fwts_log_info(fw, "Trigger wakealarm for 1 seconds in the future."); if (fwts_wakealarm_trigger(fw, 1)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotTriggeredTest2", "RTC wakealarm did not trigger."); return FWTS_OK; } (void)fwts_wakealarm_cancel(fw); fwts_passed(fw, "RTC wakealarm was triggered successfully."); return FWTS_OK; } static int wakealarm_test3(fwts_framework *fw) { int ret; ret = fwts_wakealarm_test_firing(fw, 2); if (ret < 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotTriggeredTest3", "Failed to trigger and fire wakealarm."); return FWTS_ERROR; /* Really went wrong */ } if (ret == 0) fwts_passed(fw, "RTC wakealarm triggered and fired successfully."); else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotFiredTest3", "RTC wakealarm was triggered but did not fire."); } return FWTS_OK; } static int wakealarm_test4(fwts_framework *fw) { uint32_t i; int failed = 0; for (i = 1; i < 5; i++) { fwts_log_info(fw, "Trigger wakealarm for %" PRIu32 " seconds in the future.", i); int ret = fwts_wakealarm_test_firing(fw, i); if (ret < 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotTriggeredTest4", "Failed to trigger and fire wakealarm."); return FWTS_ERROR; /* Really went wrong */ } if (ret != 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotFiredTest4", "RTC wakealarm was triggered but did not fire."); failed++; } fwts_progress(fw, 25 * i); } if (failed == 0) fwts_passed(fw, "RTC wakealarm triggered and fired successfully."); return FWTS_OK; } static int wakealarm_test5(fwts_framework *fw) { struct rtc_time rtc_now; if (fwts_wakealarm_set(fw, &rtc_tm) == FWTS_OK) { fwts_passed(fw, "RTC wakealarm set."); } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotResetTest5", "RTC wakealarm failed to be reset back to original state."); return FWTS_ERROR; } if (fwts_wakealarm_get(fw, &rtc_now) == FWTS_OK) { if (rtc_now.tm_year == rtc_tm.tm_year && rtc_now.tm_mon == rtc_tm.tm_mon && rtc_now.tm_mday == rtc_tm.tm_mday && rtc_now.tm_hour == rtc_tm.tm_hour && rtc_now.tm_min == rtc_tm.tm_min && rtc_now.tm_sec == rtc_tm.tm_sec) { fwts_passed(fw, "RTC wakealarm reset correctly back to " "%d/%d/%d %2.2d:%2.2d:%2.2d.", rtc_tm.tm_mday, rtc_tm.tm_mon + 1, rtc_tm.tm_year + 1900, rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec); } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotResetTest5", "RTC wakealarm failed to be reset back to original time."); return FWTS_ERROR; } } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotReadTest5", "RTC wakealarm failed to be read to verify original time."); return FWTS_ERROR; } return FWTS_OK; } static fwts_framework_minor_test wakealarm_tests[] = { { wakealarm_test1, "Test existence of RTC with alarm interface." }, { wakealarm_test2, "Trigger wakealarm for 1 seconds in the future." }, { wakealarm_test3, "Test if wakealarm is fired." }, { wakealarm_test4, "Multiple wakealarm firing tests." }, { wakealarm_test5, "Reset wakealarm time." }, { NULL, NULL } }; static fwts_framework_ops wakealarm_ops = { .description = "ACPI Wakealarm tests.", .minor_tests = wakealarm_tests }; FWTS_REGISTER("wakealarm", &wakealarm_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/acpi/wdat/000077500000000000000000000000001465205512700135275ustar00rootroot00000000000000src/acpi/wdat/wdat.c000066400000000000000000000170331465205512700146360ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) && !(FWTS_ARCH_AARCH64) #include #include #include #include #include #include "fwts_acpi_object_eval.h" static fwts_acpi_table_info *table; acpi_table_init(WDAT, &table) /* * ACPI WDAT (Watchdog Action Table) * https://msdn.microsoft.com/en-us/windows/hardware/gg463320.aspx */ static int wdat_test1(fwts_framework *fw) { const fwts_acpi_table_wdat *wdat = (const fwts_acpi_table_wdat *)table->data; uint32_t reserved1, reserved2; bool passed = true; bool entries_passed = true; size_t total_length; uint32_t i; if (wdat->header.length > (uint32_t)table->length) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "WDATBadLength", "WDAT header reports that the table is %" PRIu32 " bytes long, however this is longer than the ACPI " "table size of %zu bytes.", wdat->header.length, table->length); goto done; } reserved1 = (uint32_t) wdat->reserved1[0] + ((uint32_t) wdat->reserved1[1] << 8) + ((uint32_t) wdat->reserved1[2] << 16); reserved2 = (uint32_t) wdat->reserved2[0] + ((uint32_t) wdat->reserved2[1] << 8) + ((uint32_t) wdat->reserved2[2] << 16); /* Now we have got some sane data, dump the WDAT */ fwts_log_info_verbatim(fw, "WDAT Microsoft Watchdog Action Table:"); fwts_log_info_simp_int(fw, " Watchdog Header Length: ", wdat->watchdog_header_length); fwts_log_info_simp_int(fw, " PCI Segment: ", wdat->pci_segment); fwts_log_info_simp_int(fw, " PCI Bus Number: ", wdat->pci_bus_number); fwts_log_info_simp_int(fw, " PCI Device Number: ", wdat->pci_device_number); fwts_log_info_simp_int(fw, " PCI Function Number: ", wdat->pci_function_number); fwts_log_info_simp_int(fw, " Reserved: ", reserved1); fwts_acpi_reserved_zero("WDAT", "Reserved1", reserved1, &passed); fwts_log_info_simp_int(fw, " Timer Period: ", wdat->timer_period); fwts_log_info_simp_int(fw, " Maximum Count: ", wdat->maximum_count); fwts_log_info_simp_int(fw, " Minimum Count: ", wdat->minimum_count); fwts_log_info_simp_int(fw, " Watchdog Flags: ", wdat->watchdog_flags); fwts_log_info_simp_int(fw, " Reserved: ", reserved2); fwts_acpi_reserved_zero("WDAT", "Reserved2", reserved2, &passed); fwts_log_info_simp_int(fw, " Watchdog Entries ", wdat->number_of_entries); if (wdat->minimum_count > wdat->maximum_count) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "WDATMinGreaterThanMax", "WDAT Minimum Count is 0x%" PRIx32 " and is greater " "than the Maximum Count of 0x%" PRIx32, wdat->minimum_count, wdat->maximum_count); } /* * Check if bits 6..1 are set, just bits 0 and 7 are used * so check if the undefined bits are set. The specification * does not state what these bits should be set as, but * this does sanity check that somebody has not set these * bits accidentally. This is a LOW issue. */ fwts_acpi_reserved_bits("WDAT", "Watchdog Flags", wdat->watchdog_flags, 1, 6, &passed); total_length = sizeof(fwts_acpi_table_wdat) + (wdat->number_of_entries * sizeof(fwts_acpi_table_wdat_instr_entries)); if (total_length > wdat->header.length) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "WDATBadLength", "WDAT header reports that the table has %" PRIu32 " watchdog instruction entries making the table " "%zu bytes long, however, the WDAT table is only %" PRIu32 " bytes in size.", wdat->number_of_entries, total_length, wdat->header.length); goto done; } for (i = 0; i < wdat->number_of_entries; i++) { const fwts_acpi_table_wdat_instr_entries *entry = &wdat->entries[i]; fwts_log_info_verbatim(fw, "Watchdog Instruction Entry %" PRIu32, i + 1); fwts_log_info_simp_int(fw, " Watchdog Action: ", entry->watchdog_action); fwts_log_info_simp_int(fw, " Instruction Flags: ", entry->instruction_flags); fwts_log_info_simp_int(fw, " Reserved: ", entry->reserved); fwts_acpi_reserved_zero("WDAT", "Watchdog Entry Reserved", entry->reserved, &passed); fwts_log_info_simp_int(fw, " Address Space ID: ", entry->register_region.address_space_id); fwts_log_info_simp_int(fw, " Register Bit Width ", entry->register_region.register_bit_width); fwts_log_info_simp_int(fw, " Register Bit Offset ", entry->register_region.register_bit_offset); fwts_log_info_simp_int(fw, " Access Size ", entry->register_region.access_width); fwts_log_info_simp_int(fw, " Address ", entry->register_region.address); fwts_log_info_simp_int(fw, " Value: ", entry->value); fwts_log_info_simp_int(fw, " Mask: ", entry->mask); switch (entry->watchdog_action) { case 0x01: /* RESET */ case 0x04: /* QUERY_CURRENT_COUNTDOWN_PERIOD */ case 0x05: /* QUERY_COUNTDOWN_PERIOD */ case 0x06: /* SET_COUNTDOWN_PERIOD */ case 0x08: /* QUERY_RUNNING_STATE */ case 0x09: /* SET_RUNNING_STATE */ case 0x0a: /* QUERY_STOPPED_STATE */ case 0x0b: /* SET_STOPPED_STATE */ case 0x10: /* QUERY_REBOOT */ case 0x11: /* SET_REBOOT */ case 0x12: /* QUERY_SHUTDOWN */ case 0x13: /* SET_SHUTDOWN */ case 0x20: /* QUERY_WATCHDOG_STATUS */ case 0x21: /* SET_WATCHDOG_STATUS */ break; default: entries_passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "WDATWatchdogActionInvalid", "WDAT Watchdog Instruction Entry %" PRIu32 " Watchdog Action field is 0x%" PRIx8 " and should be one of 0x00, 0x04, 0x05, 0x06, " "0x08, 0x09, 0x0a, 0x0b, 0x10, 0x11, 0x12, 0x13, " "0x20 or 0x21", i + 1, entry->watchdog_action); break; } /* * Instruction flags can be 0x00, 0x01, 0x02, 0x03 with * bit 7 clear or set, so bits 7, 1, 0 are valid, (which * is 0x80 | 0x02 | 0x01) */ if (entry->instruction_flags & ~0x83) { entries_passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "WDATInstructionFlagsInvalid", "WDAT Watchdog Instruction Entry %" PRIu32 " Instruction Flags field is 0x%" PRIx8 " and should be one of 0x00, 0x01, 0x02, 0x03 or " " 0x80, 0x81, 0x82, 0x83", i + 1, entry->instruction_flags); } } if (entries_passed) fwts_passed(fw, "All %" PRIu32 " WDAT Watchdog Instruction Entries look sane.", wdat->number_of_entries); done: passed &= entries_passed; if (passed) fwts_passed(fw, "No issues found in WDAT table."); return FWTS_OK; } static fwts_framework_minor_test wdat_tests[] = { { wdat_test1, "WDAT Microsoft Hardware Watchdog Action Table test." }, { NULL, NULL } }; static fwts_framework_ops wdat_ops = { .description = "WDAT Microsoft Hardware Watchdog Action Table test.", .init = WDAT_init, .minor_tests = wdat_tests }; FWTS_REGISTER("wdat", &wdat_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/wmi/000077500000000000000000000000001465205512700133645ustar00rootroot00000000000000src/acpi/wmi/wmi.c000066400000000000000000000401311465205512700143230ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #include #include #include #include "fwts_acpi_object_eval.h" typedef enum { FWTS_WMI_EXPENSIVE = 0x00000001, FWTS_WMI_METHOD = 0x00000002, FWTS_WMI_STRING = 0x00000004, FWTS_WMI_EVENT = 0x00000008 } fwts_wmi_flags; typedef struct { const fwts_wmi_flags flags; const char *name; } fwts_wmi_flags_name; typedef struct { const char *guid; /* GUID string */ const char *driver; /* Kernel Driver name */ const char *vendor; /* Machine Vendor */ } fwts_wmi_known_guid; /* * Packed WMI WDG data */ typedef struct { uint8_t guid[16]; /* GUID */ union { uint8_t obj_id[2]; /* Object Identifier */ struct { uint8_t notify_id; /* Notify Identifier */ uint8_t reserved; /* Reserved */ } notify; } id; uint8_t instance; /* Instance */ uint8_t flags; /* fwts_wmi_flags */ } __attribute__ ((packed)) fwts_wdg_info; /* * Bunch of known WMI GUIDs in the kernel */ static fwts_wmi_known_guid fwts_wmi_known_guids[] = { { "67C3371D-95A3-4C37-BB61-DD47B491DAAB", "acer-wmi", "Acer" }, { "431F16ED-0C2B-444C-B267-27DEB140CF9C", "acer-wmi", "Acer" }, { "6AF4F258-B401-42FD-BE91-3D4AC2D7C0D3", "acer-wmi", "Acer" }, { "95764E09-FB56-4e83-B31A-37761F60994A", "acer-wmi", "Acer" }, { "61EF69EA-865C-4BC3-A502-A0DEBA0CB531", "acer-wmi", "Acer" }, { "676AA15E-6A47-4D9F-A2CC-1E6D18D14026", "acer-wmi", "Acer" }, { "A90597CE-A997-11DA-B012-B622A1EF5492", "alienware-wmi", "Alienware" }, { "A80593CE-A997-11DA-B012-B622A1EF5492", "alienware-wmi", "Alienware" }, { "A70591CE-A997-11DA-B012-B622A1EF5492", "alienware-wmi", "Alienware" }, { "0B3CBB35-E3C2-45ED-91C2-4C5A6D195D1C", "asus-nb-wmi","Asus" }, { "97845ED0-4E6D-11DE-8A39-0800200C9A66", "asus-wmi", "Asus" }, { "9DBB5994-A997-11DA-B012-B622A1EF5492", "dell-wmi-base", "Dell" }, { "8D9DDCBC-A997-11DA-B012-B622A1EF5492", "dell-wmi-descriptor", "Dell" }, { "284A0E6B-380E-472A-921F-E52786257FB4", "dell-wmi-aio","Dell" }, { "02314822-307C-4F66-BF0E-48AEAEB26CC8", "dell-wmi-aio","Dell" }, { "F6E4FE6E-909D-47cb-8BAB-C9F6F2F8D396", "dell-wmi-led","Dell" }, { "6932965F-1671-4CEB-B988-D3AB0A901919", "dell-wmi-privacy", "Dell" }, { "F1DDEE52-063C-4784-A11E-8A06684B9BF5", "dell-wmi-sysman", "Dell" }, { "F1DDEE52-063C-4784-A11E-8A06684B9BFA", "dell-wmi-sysman", "Dell" }, { "F1DDEE52-063C-4784-A11E-8A06684B9BF9", "dell-wmi-sysman", "Dell" }, { "0894B8D6-44A6-4719-97D7-6AD24108BFD4", "dell-wmi-sysman", "Dell" }, { "F1DDEE52-063C-4784-A11E-8A06684B9BF4", "dell-wmi-sysman", "Dell" }, { "70FE8229-D03B-4214-A1C6-1F884B1A892A", "dell-wmi-sysman", "Dell" }, { "8A42EA14-4F2A-FD45-6422-0087F7A7E608", "dell-wmi-ddv", "Dell" }, { "F1DDEE52-063C-4784-A11E-8A06684B9B01", "dell-smm-hwmon", "Dell" }, { "ABBC0F72-8EA1-11D1-00A0-C90629100000", "eeepc-wmi", "Asus" }, { "97845ED0-4E6D-11DE-8A39-0800200C9A66", "eeepc-wmi", "Asus" }, { "DEADBEEF-2001-0000-00A0-C90629100000", "gigabyte-wmi", "Gigabyte" }, { "95F24279-4D7B-4334-9387-ACCDC67EF61C", "hp-wmi", "HP" }, { "5FB7F034-2C63-45e9-BE91-3D44E2C707E4", "hp-wmi", "HP" }, { "ABBC0F5B-8EA1-11D1-A000-C90629100000", "huawei-wmi", "Huawei" }, { "ABBC0F5C-8EA1-11D1-A000-C90629100000", "huawei-wmi", "Huawei" }, { "39142400-C6A3-40fa-BADB-8A2652834100", "huawei-wmi", "Huawei" }, { "59142400-C6A3-40fa-BADB-8A2652834100", "huawei-wmi", "Huawei" }, { "26CAB2E5-5CF1-46AE-AAC3-4A12B6BA50E6", "ideapad-laptop", "Ideapad" }, { "56322276-8493-4CE8-A783-98C991274F5E", "ideapad-laptop", "Ideapad" }, { "44FADEB1-B204-40F2-8581-394BBDC1B651", "intel-wmi-sbl-fw-update", "Intel" }, { "86CCFD48-205E-4A77-9C48-2021CBEDE341", "intel-wmi-thunderbolt", "Intel" }, { "E4FB94F9-7F2B-4173-AD1A-CD1D95086248", "lg-laptop", "LG" }, { "023B133E-49D1-4E10-B313-698220140DC2", "lg-laptop", "LG" }, { "37BE1AC0-C3F2-4B1F-BFBE-8FDEAF2814D6", "lg-laptop", "LG" }, { "911BAD44-7DF8-4FBB-9319-BABA1C4B293B", "lg-laptop", "LG" }, { "551A1F84-FBDD-4125-91DB-3EA8F44F1D45", "msi-wmi", "MSI" }, { "B6F3EEF2-3D2F-49DC-9DE3-85BCE18C62F2", "msi-wmi", "MSI" }, { "5B3CC38A-40D9-7245-8AE6-1145B751BE3F", "msi-wmi", "MSI" }, { "F6CB5C3C-9CAE-4EBD-B577-931EA32A2CC0", "mxm-wmi", "MXM" }, { "ABBC0F6F-8EA1-11D1-00A0-C90629100000", "peaq-wmi", "PEAQ" }, { "51F5230E-9677-46CD-A1CF-C0B23EE34DB7", "think-lmi", "Lenovo" }, { "98479A64-33F5-4E33-A707-8E251EBBC3A1", "think-lmi", "Lenovo" }, { "6A4B54EF-A5ED-4D33-9455-B0D9B48DF4B3", "think-lmi", "Lenovo" }, { "8ADB159E-1E32-455C-BC93-308A7ED98246", "think-lmi", "Lenovo" }, { "2651D9FD-911C-4B69-B94E-D0DED5963BD7", "think-lmi", "Lenovo" }, { "7364651A-132F-4FE7-ADAA-40C6C7EE2E3B", "think-lmi", "Lenovo" }, { "F7CC25EC-D20B-404C-8903-0ED4359C18AE", "surface3-wmi", "Surface3" }, { "C364AC71-36DB-495A-8494-B439D472A505", "tc110-wmi", "HP Compaq" }, { "59142400-C6A3-40FA-BADB-8A2652834100", "toshiba_acpi", "Toshiba" }, { "05901221-D566-11D1-B2F0-00A0C9062910", "wmi-bmof", "Generic" }, { NULL, NULL, NULL } }; /* * WMI flag to text mappings */ static const fwts_wmi_flags_name wmi_flags_name[] = { { FWTS_WMI_EXPENSIVE, "Expensive" }, { FWTS_WMI_METHOD, "Method" }, { FWTS_WMI_STRING, "String" }, { FWTS_WMI_EVENT, "Event" }, { 0, NULL } }; static bool wmi_advice_given; /* * wmi_init() * initialize ACPI */ static int wmi_init(fwts_framework *fw) { if (fwts_acpi_init(fw) != FWTS_OK) { fwts_log_error(fw, "Cannot initialise ACPI."); return FWTS_ERROR; } return FWTS_OK; } /* * wmi_deinit() * de-intialize ACPI */ static int wmi_deinit(fwts_framework *fw) { return fwts_acpi_deinit(fw); } /* * fwts_wmi_known_guid() * find any known GUID driver info */ static fwts_wmi_known_guid *wmi_find_guid(char *guid) { fwts_wmi_known_guid *info; for (info = fwts_wmi_known_guids; info->guid != NULL; info++) if (strcmp(info->guid, guid) == 0) return info; return NULL; } /* * wmi_strncat() * build up a description of flag settings */ static char *wmi_strncat(char *dst, const char *str, const size_t dst_len) { if (*dst) strncat(dst, " | ", dst_len); return strncat(dst, str, dst_len); } /* * wmi_wdg_flags_to_text() * turn WDG flags into a description string */ static char *wmi_wdg_flags_to_text(const fwts_wmi_flags flags) { static char buffer[1024]; int i; *buffer = 0; for (i = 0; wmi_flags_name[i].flags; i++) if (flags & wmi_flags_name[i].flags) wmi_strncat(buffer, wmi_flags_name[i].name, sizeof(buffer) - 1); if (!*buffer) strncpy(buffer, "None", sizeof(buffer) - 1); return buffer; } /* * wmi_acpi_get_parent_name() * get parent name of acpi object, the result needs to be freed */ static char *wmi_acpi_get_parent_name(const char *object_name) { size_t parent_name_length; char *parent_name; char *separator; separator = strrchr(object_name, '.'); if (!separator) return NULL; parent_name_length = separator - object_name; parent_name = malloc(parent_name_length + 1); if (!parent_name) return NULL; memcpy(parent_name, object_name, parent_name_length); parent_name[parent_name_length] = '\0'; return parent_name; } /* * wmi_acpi_method_count_on_object() * count occurance of methods on acpi object */ static int wmi_acpi_method_count_on_object(const char *object_name, const char *method_name) { const size_t object_name_length = strlen(object_name); const size_t method_name_length = strlen(method_name); fwts_list_link *item; fwts_list *objects; int count = 0; objects = fwts_acpi_object_get_names(); if (!objects) return 0; fwts_list_foreach(item, objects) { char *name = fwts_list_data(char *, item); const size_t name_length = strlen(name); if (name_length != (object_name_length + method_name_length + 1)) continue; if (strncmp(object_name, name, object_name_length)) continue; if (!strncmp(method_name, name + name_length - method_name_length, method_name_length)) count++; } return count; } /* * wmi_block_query_exist_count() * check if the mandatory block query method exists for the WDG object */ static void wmi_block_query_exist_count( fwts_framework *fw, const fwts_wdg_info *info, const char *object_name, const char *guid_str) { char wm_name[5]; int count; snprintf(wm_name, sizeof(wm_name), "WQ%c%c", info->id.obj_id[0], info->id.obj_id[1]); count = wmi_acpi_method_count_on_object(object_name, wm_name); switch (count) { case 0: fwts_failed(fw, LOG_LEVEL_LOW, "WMIMissingQueryMethod", "GUID %s should have an associated query method %s defined, " "however this does not seem to exist.", guid_str, wm_name); break; case 1: fwts_passed(fw, "%s has associated query method %s.%s", guid_str, object_name, wm_name); break; default: fwts_failed(fw, LOG_LEVEL_LOW, "WMIMultipleQueryMethod", "GUID %s has multiple associated query methods %s defined, " "this is a firmware bug that leads to ambiguous behaviour.", guid_str, wm_name); break; } } /* * wmi_method_exist_count() * check if an associated method exists for the WDG object */ static void wmi_method_exist_count( fwts_framework *fw, const fwts_wdg_info *info, const char *object_name, const char *guid_str) { char wm_name[5]; int count; snprintf(wm_name, sizeof(wm_name), "WM%c%c", info->id.obj_id[0], info->id.obj_id[1]); count = wmi_acpi_method_count_on_object(object_name, wm_name); if (count == 0) { fwts_failed(fw, LOG_LEVEL_LOW, "WMIMissingMethod", "GUID %s should have an associated method WM%c%c defined, " "however this does not seem to exist.", guid_str, info->id.obj_id[0], info->id.obj_id[1]); } else if (count > 1) { fwts_failed(fw, LOG_LEVEL_LOW, "WMIMultipleMethod", "GUID %s has multiple associated methods WM%c%c defined, " "this is a firmware bug that leads to ambiguous behaviour.", guid_str, info->id.obj_id[0], info->id.obj_id[1]); } else fwts_passed(fw, "%s has associated method %s.%s", guid_str, object_name, wm_name); } /* * wmi_no_known_driver() * grumble that the kernel does not have a known handler for this GUID */ static void wmi_no_known_driver( fwts_framework *fw, const char *guid_str) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "WMIUnknownGUID", "GUID %s is unknown to the kernel, a driver may need to " "be implemented for this GUID.", guid_str); if (!wmi_advice_given) { wmi_advice_given = true; fwts_log_advice(fw, "A WMI driver probably needs to be written for this " "WMI event. It can checked for using: wmi_has_guid(\"%s\"). " "One can install a notify handler using " "wmi_install_notify_handler(\"%s\", handler, NULL). " "http://lwn.net/Articles/391230 describes how to write an " "appropriate driver.", guid_str, guid_str); } } /* * wmi_dump_object() * dump out a WDG object */ static void wmi_dump_object(fwts_framework *fw, const fwts_wdg_info *info) { fwts_log_info_verbatim(fw, " Flags : 0x%2.2" PRIx8 " (%s)", info->flags, wmi_wdg_flags_to_text(info->flags)); fwts_log_info_verbatim(fw, " Object ID : %c%c", info->id.obj_id[0], info->id.obj_id[1]); fwts_log_info_verbatim(fw, " Instance : 0x%2.2" PRIx8, info->instance); } /* * wmi_known_driver() * report info about the supported kernel driver */ static void wmi_known_driver( fwts_framework *fw, const fwts_wmi_known_guid *known) { /* If we recognise the GUID then we may as well report this info */ if (known) { fwts_log_info_verbatim(fw, " Driver : %s (%s)", known->driver, known->vendor); } } /* * wmi_parse_wdg_data() * parse over raw _WDG data and dump + sanity check the objects */ static void wmi_parse_wdg_data( fwts_framework *fw, const char *name, const size_t size, const uint8_t *wdg_data) { size_t i; const fwts_wdg_info *info = (const fwts_wdg_info *)wdg_data; bool all_events_known = true; bool events = false; char *acpi_object_name; acpi_object_name = wmi_acpi_get_parent_name(name); if (!acpi_object_name) { fwts_log_info(fw, "Unable to the get parent name of %s", name); return; } for (i = 0; i < (size / sizeof(fwts_wdg_info)); i++, info++) { const uint8_t *guid = info->guid; char guid_str[37]; const fwts_wmi_known_guid *known; fwts_guid_buf_to_str(guid, guid_str, sizeof(guid_str)); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "%s (%zd of %zd)", name, i + 1, size / sizeof(fwts_wdg_info)); fwts_log_info_verbatim(fw, " GUID: %s", guid_str); known = wmi_find_guid(guid_str); if (info->flags & FWTS_WMI_METHOD) { fwts_log_info_verbatim(fw, " WMI Method:"); wmi_dump_object(fw, info); wmi_known_driver(fw, known); wmi_method_exist_count(fw, info, acpi_object_name, guid_str); } else if (info->flags & FWTS_WMI_EVENT) { events = true; fwts_log_info_verbatim(fw, " WMI Event:"); fwts_log_info_verbatim(fw, " Flags : 0x%2.2" PRIx8 " (%s)", info->flags, wmi_wdg_flags_to_text(info->flags)); fwts_log_info_verbatim(fw, " Notification ID: 0x%2.2" PRIx8, info->id.notify.notify_id); fwts_log_info_verbatim(fw, " Reserved : 0x%2.2" PRIx8, info->id.notify.reserved); fwts_log_info_verbatim(fw, " Instance : 0x%2.2" PRIx8, info->instance); wmi_known_driver(fw, known); /* To handle events we really need a custom kernel driver */ if (!known) { wmi_no_known_driver(fw, guid_str); all_events_known = false; } } else { fwts_log_info_verbatim(fw, " WMI Block:"); wmi_dump_object(fw, info); wmi_known_driver(fw, known); wmi_block_query_exist_count(fw, info, acpi_object_name, guid_str); } if (info->instance == 0) fwts_failed(fw, LOG_LEVEL_LOW, "WMIZeroInstance", "GUID %s has zero instances", guid_str); else fwts_passed(fw, "%s has more than zero instances", guid_str); } if (events && all_events_known) fwts_passed(fw, "All events associated with %s are handled by a kernel driver.", name); free(acpi_object_name); } static int wmi_test1(fwts_framework *fw) { fwts_list_link *item; fwts_list *objects; const size_t name_len = 4; bool wdg_found = false; if ((objects = fwts_acpi_object_get_names()) == NULL) { fwts_log_info(fw, "Cannot find any ACPI objects"); return FWTS_ERROR; } wmi_advice_given = false; fwts_list_foreach(item, objects) { char *name = fwts_list_data(char*, item); const size_t len = strlen(name); if (strncmp("_WDG", name + len - name_len, name_len) == 0) { ACPI_OBJECT_LIST arg_list; ACPI_BUFFER buf; ACPI_OBJECT *obj; int ret; arg_list.Count = 0; arg_list.Pointer = NULL; ret = fwts_acpi_object_evaluate(fw, name, &arg_list, &buf); if ((ACPI_FAILURE(ret) != AE_OK) || (buf.Pointer == NULL)) continue; /* Do we have a valid buffer to dump? */ obj = buf.Pointer; if ((obj->Type == ACPI_TYPE_BUFFER) && (obj->Buffer.Pointer != NULL) && (obj->Buffer.Length > 0)) { wmi_parse_wdg_data(fw, name, obj->Buffer.Length, (uint8_t*)obj->Buffer.Pointer); wdg_found = true; } free(buf.Pointer); } } if (!wdg_found) { fwts_log_info(fw, "No ACPI _WDG WMI data found."); return FWTS_SKIP; } return FWTS_OK; } static fwts_framework_minor_test wmi_tests[] = { { wmi_test1, "Windows Management Instrumentation test." }, { NULL, NULL } }; static fwts_framework_ops wmi_ops = { .description = "Extract and analyse Windows Management " "Instrumentation (WMI).", .init = wmi_init, .deinit = wmi_deinit, .minor_tests = wmi_tests }; FWTS_REGISTER("wmi", &wmi_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/wpbt/000077500000000000000000000000001465205512700135445ustar00rootroot00000000000000src/acpi/wpbt/wpbt.c000066400000000000000000000052411465205512700146660ustar00rootroot00000000000000/* * Copyright (C) 2016-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) && !(FWTS_ARCH_AARCH64) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(WPBT, &table) /* * WPBT Windows Platform Binary Table */ static int wpbt_test1(fwts_framework *fw) { fwts_acpi_table_wpbt *wpbt = (fwts_acpi_table_wpbt*) table->data; bool passed = true; fwts_log_info_verbatim(fw, "WPBT Windows Platform Binary Table:"); fwts_log_info_simp_int(fw, " Handoff Memory Size: ", wpbt->handoff_size); fwts_log_info_simp_int(fw, " Handoff Memory Location: ", wpbt->handoff_address); fwts_log_info_simp_int(fw, " Content Layout: ", wpbt->layout); fwts_log_info_simp_int(fw, " Content Type: ", wpbt->type); fwts_acpi_fixed_value(fw, LOG_LEVEL_HIGH, "WPBT", "Layout", wpbt->layout, 1, &passed); if (wpbt->type != 1) fwts_acpi_fixed_value(fw, LOG_LEVEL_HIGH, "WPBT", "Type", wpbt->type, 1, &passed); else { fwts_acpi_table_wpbt_type1 *type = (fwts_acpi_table_wpbt_type1 *) (table->data + sizeof(fwts_acpi_table_wpbt)); fwts_log_info_simp_int(fw, " Arguments Length: ", type->arguments_length); if (type->arguments_length % 2) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "WPBTBadArgumentLength", "WPBT arguments length must be multiple of 2, got " "0x%4.4" PRIx16 " instead", type->arguments_length); } } fwts_log_nl(fw); if (passed) fwts_passed(fw, "No issues found in WPBT table."); return FWTS_OK; } static fwts_framework_minor_test wpbt_tests[] = { { wpbt_test1, "WPBT Windows Platform Binary Table test." }, { NULL, NULL } }; static fwts_framework_ops wpbt_ops = { .description = "WPBT Windows Platform Binary Table test.", .init = WPBT_init, .minor_tests = wpbt_tests }; FWTS_REGISTER("wpbt", &wpbt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/wsmt/000077500000000000000000000000001465205512700135625ustar00rootroot00000000000000src/acpi/wsmt/wsmt.c000066400000000000000000000041741465205512700147260ustar00rootroot00000000000000/* * Copyright (C) 2017-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(WSMT, &table) /* * WSMT Windows Platform Binary Table */ static int wsmt_test1(fwts_framework *fw) { fwts_acpi_table_wsmt *wsmt = (fwts_acpi_table_wsmt*) table->data; bool passed = true; fwts_log_info_verbatim(fw, "WSMT Windows SMM Security Mitigations Table:"); fwts_log_info_simp_int(fw, " Protection Flags: ", wsmt->protection_flags); fwts_acpi_reserved_bits("WSMT", "Protection Flags", wsmt->protection_flags, 3, 31, &passed); if ((wsmt->protection_flags & 0x2) && !(wsmt->protection_flags & 0x1)) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "WSMTBadFlagsValue", "WSMT Protection Flags bit[1] must be " "set when bit[2] is set"); } fwts_log_nl(fw); if (passed) fwts_passed(fw, "No issues found in WSMT table."); return FWTS_OK; } static fwts_framework_minor_test wsmt_tests[] = { { wsmt_test1, "WSMT Windows SMM Security Mitigations Table test." }, { NULL, NULL } }; static fwts_framework_ops wsmt_ops = { .description = "WSMT Windows SMM Security Mitigations Table test.", .init = WSMT_init, .minor_tests = wsmt_tests }; FWTS_REGISTER("wsmt", &wsmt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/xenv/000077500000000000000000000000001465205512700135505ustar00rootroot00000000000000src/acpi/xenv/xenv.c000066400000000000000000000046611465205512700147030ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include static fwts_acpi_table_info *table; acpi_table_init(XENV, &table) /* * Sanity check XENV table, see: * http://wiki.xenproject.org/mediawiki/images/c/c4/Xen-environment-table.pdf */ static int xenv_test1(fwts_framework *fw) { fwts_acpi_table_xenv *xenv = (fwts_acpi_table_xenv*)table->data; bool passed = true; if (table->length < sizeof(fwts_acpi_table_xenv)) { fwts_failed(fw, LOG_LEVEL_HIGH, "XENVAcpiTableTooSmall", "XENV ACPI table is %zd bytes long which is smaller " "than the expected size of %zd bytes.", table->length, sizeof(fwts_acpi_table_xenv)); return FWTS_ERROR; } fwts_acpi_revision_check("XENV", xenv->header.revision, 1, &passed); fwts_log_info_verbatim(fw, "XENV Table:"); fwts_log_info_simp_int(fw, " GNT Start Address: ", xenv->gnt_start); fwts_log_info_simp_int(fw, " GNT Size: ", xenv->gnt_size); fwts_log_info_simp_int(fw, " Evtchn Intr: ", xenv->evtchn_intr); fwts_log_info_simp_int(fw, " Evtchn Intr Flags: ", xenv->evtchn_intr_flags); fwts_acpi_reserved_bits("XENV", "Evtchn Intr Flags", xenv->evtchn_intr_flags, 2, 7, &passed); if (passed) fwts_passed(fw, "No issues found in XENV table."); return FWTS_OK; } static fwts_framework_minor_test xenv_tests[] = { { xenv_test1, "Validate XENV table." }, { NULL, NULL } }; static fwts_framework_ops xenv_check_ops = { .description = "XENV Xen Environment Table tests.", .init = XENV_init, .minor_tests = xenv_tests }; FWTS_REGISTER("xenv", &xenv_check_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI) #endif src/acpi/xsdt/000077500000000000000000000000001465205512700135525ustar00rootroot00000000000000src/acpi/xsdt/xsdt.c000066400000000000000000000051221465205512700147000ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include static fwts_acpi_table_info *table; acpi_table_init(XSDT, &table) /* * XSDT Extended System Description Table */ static int xsdt_test1(fwts_framework *fw) { fwts_acpi_table_xsdt *xsdt = (fwts_acpi_table_xsdt*)table->data; size_t i, n; bool passed = true; n = (table->length - sizeof(fwts_acpi_table_header)) / sizeof(uint64_t); for (i = 0; i < n; i++) { if (xsdt->entries[i] == 0) { passed = false; if (fw->flags & FWTS_FLAG_SBBR) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "XSDTEntryNull", "XSDT Entry %zd is null, should not be non-zero.", i); } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "XSDTEntryNull", "XSDT Entry %zd is null, should not be non-zero.", i); } fwts_advice(fw, "A XSDT pointer is null and therefore erroneously " "points to an invalid 64 bit ACPI table header. " "At worse this will cause the kernel to oops, at " "best the kernel may ignore this. However, it " "should be fixed where possible."); } } if (passed) { if (fw->flags & FWTS_FLAG_SBBR) { fwts_passed(fw, "XSDT is present, pointed at by XsdrAddress=0x%" PRIx64 " and contain valid pointers to %d other ACPI tables mandated by SBBR", xsdt->entries[0], (int)n); } else fwts_passed(fw, "No issues found in XSDT table."); } return FWTS_OK; } static fwts_framework_minor_test xsdt_tests[] = { { xsdt_test1, "XSDT Extended System Description Table test." }, { NULL, NULL } }; static fwts_framework_ops xsdt_ops = { .description = "XSDT Extended System Description Table test.", .init = XSDT_init, .minor_tests = xsdt_tests }; FWTS_REGISTER("xsdt", &xsdt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ACPI | FWTS_FLAG_SBBR) #endif src/acpica/000077500000000000000000000000001465205512700130745ustar00rootroot00000000000000src/acpica/source/000077500000000000000000000000001465205512700143745ustar00rootroot00000000000000src/acpica/source/common/000077500000000000000000000000001465205512700156645ustar00rootroot00000000000000src/acpica/source/common/acfileio.c000066400000000000000000000604671465205512700176200ustar00rootroot00000000000000/****************************************************************************** * * Module Name: acfileio - Get ACPI tables from file * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "actables.h" #include "acutils.h" #include "acapps.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("acfileio") /* Local prototypes */ static ACPI_STATUS AcGetOneTableFromFile ( char *Filename, FILE *File, UINT8 GetOnlyAmlTables, ACPI_TABLE_HEADER **Table); static ACPI_STATUS AcCheckTextModeCorruption ( ACPI_TABLE_HEADER *Table); /******************************************************************************* * * FUNCTION: AcDeleteTableList * * PARAMETERS: ListHead - List to delete * * RETURN: Status * * DESCRIPTION: Delete a list of tables. This is useful for removing memory * allocated by AcGetAllTablesFromFile * ******************************************************************************/ void AcDeleteTableList ( ACPI_NEW_TABLE_DESC *ListHead) { ACPI_NEW_TABLE_DESC *Current = ListHead; ACPI_NEW_TABLE_DESC *Previous = Current; while (Current) { Current = Current->Next; AcpiOsFree (Previous); Previous = Current; } } /******************************************************************************* * * FUNCTION: AcGetAllTablesFromFile * * PARAMETERS: Filename - Table filename * GetOnlyAmlTables - TRUE if the tables must be AML tables * ReturnListHead - Where table list is returned * * RETURN: Status * * DESCRIPTION: Get all ACPI tables from within a single file. * ******************************************************************************/ ACPI_STATUS AcGetAllTablesFromFile ( char *Filename, UINT8 GetOnlyAmlTables, ACPI_NEW_TABLE_DESC **ReturnListHead) { ACPI_NEW_TABLE_DESC *ListHead = NULL; ACPI_NEW_TABLE_DESC *ListTail = NULL; ACPI_NEW_TABLE_DESC *TableDesc; FILE *File; ACPI_TABLE_HEADER *Table = NULL; UINT32 FileSize; ACPI_STATUS Status = AE_OK; File = fopen (Filename, "rb"); if (!File) { fprintf (stderr, "Could not open input file: %s\n", Filename); if (errno == ENOENT) { return (AE_NOT_EXIST); } return (AE_ERROR); } /* Get the file size */ FileSize = CmGetFileSize (File); if (FileSize == ACPI_UINT32_MAX) { Status = AE_ERROR; goto Exit; } fprintf (stderr, "Input file %s, Length 0x%X (%u) bytes\n", Filename, FileSize, FileSize); /* We must have at least one ACPI table header */ if (FileSize < sizeof (ACPI_TABLE_HEADER)) { Status = AE_BAD_HEADER; goto Exit; } /* Check for an non-binary file */ if (!AcIsFileBinary (File)) { fprintf (stderr, " %s: File does not appear to contain a valid AML table\n", Filename); Status = AE_TYPE; goto Exit; } /* Read all tables within the file */ while (ACPI_SUCCESS (Status)) { /* Get one entire ACPI table */ Status = AcGetOneTableFromFile ( Filename, File, GetOnlyAmlTables, &Table); if (Status == AE_CTRL_TERMINATE) { Status = AE_OK; break; } else if (Status == AE_TYPE) { Status = AE_OK; goto Exit; } else if (ACPI_FAILURE (Status)) { goto Exit; } /* Print table header for iASL/disassembler only */ #ifdef ACPI_ASL_COMPILER AcpiTbPrintTableHeader (0, Table); #endif /* Allocate and link a table descriptor */ TableDesc = AcpiOsAllocate (sizeof (ACPI_NEW_TABLE_DESC)); if (!TableDesc) { AcpiOsFree (Table); Status = AE_NO_MEMORY; goto Exit; } TableDesc->Table = Table; TableDesc->Next = NULL; /* Link at the end of the local table list */ if (!ListHead) { ListHead = TableDesc; ListTail = TableDesc; } else { ListTail->Next = TableDesc; ListTail = TableDesc; } } /* Add the local table list to the end of the global list */ if (*ReturnListHead) { ListTail = *ReturnListHead; while (ListTail->Next) { ListTail = ListTail->Next; } ListTail->Next = ListHead; } else { *ReturnListHead = ListHead; } Exit: fclose(File); return (Status); } /******************************************************************************* * * FUNCTION: AcGetOneTableFromFile * * PARAMETERS: Filename - File where table is located * File - Open FILE pointer to Filename * GetOnlyAmlTables - TRUE if the tables must be AML tables. * ReturnTable - Where a pointer to the table is returned * * RETURN: Status * * DESCRIPTION: Read the next ACPI table from a file. Implements support * for multiple tables within a single file. File must already * be open. * * Note: Loading an RSDP is not supported. * ******************************************************************************/ static ACPI_STATUS AcGetOneTableFromFile ( char *Filename, FILE *File, UINT8 GetOnlyAmlTables, ACPI_TABLE_HEADER **ReturnTable) { ACPI_STATUS Status = AE_OK; ACPI_TABLE_HEADER TableHeader; ACPI_TABLE_HEADER *Table; INT32 Count; UINT32 TableLength; UINT32 HeaderLength; long TableOffset = 0; *ReturnTable = NULL; /* Get the table header to examine signature and length */ /* * Special handling for the CDAT table (both the Length field * and the Checksum field are not in the standard positions). * (The table header is non-standard). */ if (AcpiGbl_CDAT) { HeaderLength = sizeof (ACPI_TABLE_CDAT); } else { HeaderLength = sizeof (ACPI_TABLE_HEADER); } Status = AcValidateTableHeader (File, TableOffset); if (ACPI_FAILURE (Status)) { return (Status); } TableOffset = ftell (File); Count = fread (&TableHeader, 1, HeaderLength, File); if (Count != (INT32) HeaderLength) { return (AE_CTRL_TERMINATE); } if (GetOnlyAmlTables) { /* Validate the table signature/header (limited ASCII chars) */ /* * Table must be an AML table (DSDT/SSDT). * Used for iASL -e option only. */ if (!AcpiUtIsAmlTable (&TableHeader)) { fprintf (stderr, " %s: Table [%4.4s] is not an AML table - ignoring\n", Filename, TableHeader.Signature); return (AE_TYPE); } } /* * Special handling for the CDAT table (both the Length field * and the Checksum field are not in the standard positions). */ if (AcpiGbl_CDAT) { TableLength = ACPI_CAST_PTR (ACPI_TABLE_CDAT, &TableHeader)->Length; } else { TableLength = TableHeader.Length; } /* Allocate a buffer for the entire table */ Table = AcpiOsAllocate ((ACPI_SIZE) TableLength); if (!Table) { return (AE_NO_MEMORY); } /* Read the entire ACPI table, including header */ fseek (File, TableOffset, SEEK_SET); Count = fread (Table, 1, TableLength, File); /* * Checks for data table headers happen later in the execution. Only verify * for Aml tables at this point in the code. */ if (GetOnlyAmlTables && Count != (INT32) TableLength) { Status = AE_ERROR; goto ErrorExit; } /* * Validate the checksum (just issue a warning if incorrect). * Note: CDAT is special cased here because the table does * not have the checksum field in the standard position. */ if (AcpiGbl_CDAT) { Status = AcpiUtVerifyCdatChecksum ((ACPI_TABLE_CDAT *) Table, TableLength); } else { Status = AcpiUtVerifyChecksum (Table, TableLength); } if (ACPI_FAILURE (Status)) { Status = AcCheckTextModeCorruption (Table); if (ACPI_FAILURE (Status)) { goto ErrorExit; } } *ReturnTable = Table; return (AE_OK); ErrorExit: AcpiOsFree (Table); return (Status); } /******************************************************************************* * * FUNCTION: AcIsFileBinary * * PARAMETERS: File - Open input file * * RETURN: TRUE if file appears to be binary * * DESCRIPTION: Scan a file for any non-ASCII bytes. * * Note: Maintains current file position. * ******************************************************************************/ BOOLEAN AcIsFileBinary ( FILE *File) { UINT8 Byte; BOOLEAN IsBinary = FALSE; long FileOffset; /* Scan entire file for any non-ASCII bytes */ FileOffset = ftell (File); while (fread (&Byte, 1, 1, File) == 1) { if (!isprint (Byte) && !isspace (Byte)) { IsBinary = TRUE; goto Exit; } } Exit: fseek (File, FileOffset, SEEK_SET); return (IsBinary); } /******************************************************************************* * * FUNCTION: AcValidateTableHeader * * PARAMETERS: File - Open input file * * RETURN: Status * * DESCRIPTION: Determine if a file seems to contain one or more binary ACPI * tables, via the * following checks on what would be the table header: * 1) File must be at least as long as an ACPI_TABLE_HEADER * 2) There must be enough room in the file to hold entire table * 3) Signature, OemId, OemTableId, AslCompilerId must be ASCII * * Note: There can be multiple definition blocks per file, so we cannot * expect/compare the file size to be equal to the table length. 12/2015. * * Note: Maintains current file position. * ******************************************************************************/ ACPI_STATUS AcValidateTableHeader ( FILE *File, long TableOffset) { ACPI_TABLE_HEADER TableHeader; ACPI_TABLE_CDAT *CdatTableHeader = ACPI_CAST_PTR (ACPI_TABLE_CDAT, &TableHeader); UINT32 HeaderLength; ACPI_SIZE Actual; long OriginalOffset; UINT32 FileSize; UINT32 i; ACPI_FUNCTION_TRACE (AcValidateTableHeader); /* Determine the type of table header */ if (AcpiGbl_CDAT) { HeaderLength = sizeof (ACPI_TABLE_CDAT); } else { HeaderLength = sizeof (ACPI_TABLE_HEADER); } /* Read a potential table header */ OriginalOffset = ftell (File); if (fseek (File, TableOffset, SEEK_SET)) { fprintf (stderr, "SEEK error\n"); } Actual = fread (&TableHeader, 1, HeaderLength, File); if (fseek (File, OriginalOffset, SEEK_SET)) { fprintf (stderr, "SEEK error\n"); } if (Actual < HeaderLength) { fprintf (stderr, "Could not read entire table header: Actual %u, Requested %u\n", (UINT32) Actual, HeaderLength); return (AE_ERROR); } /* Validate the signature (limited ASCII chars) */ if (!AcpiGbl_CDAT && !AcpiUtValidNameseg (TableHeader.Signature)) { /* * The "-ds cdat" option was not used, and the signature is not valid. * * For CDAT we are assuming that there should be at least one non-ASCII * byte in the (normally) 4-character Signature field (at least the * high-order byte should be zero). Otherwise, this is OK. */ fprintf (stderr, "\nTable appears to be a CDAT table, which has no signature.\n" "If this is in fact a CDAT table, use the -ds option on the\n" "command line to specify the table type (signature):\n" "\"iasl -d -ds CDAT \" or \"iasl -ds CDAT -T CDAT\"\n\n"); return (AE_BAD_SIGNATURE); } /* Validate table length against bytes remaining in the file */ FileSize = CmGetFileSize (File); if (!AcpiGbl_CDAT) { /* Standard ACPI table header */ if (TableHeader.Length > (UINT32) (FileSize - TableOffset)) { fprintf (stderr, "Table [%4.4s] is too long for file - " "needs: 0x%.2X, remaining in file: 0x%.2X\n", TableHeader.Signature, TableHeader.Length, (UINT32) (FileSize - TableOffset)); return (AE_BAD_HEADER); } } else if (CdatTableHeader->Length > (UINT32) (FileSize - TableOffset)) { /* Special header for CDAT table */ fprintf (stderr, "Table [CDAT] is too long for file - " "needs: 0x%.2X, remaining in file: 0x%.2X\n", CdatTableHeader->Length, (UINT32) (FileSize - TableOffset)); return (AE_BAD_HEADER); } /* For CDAT table, there are no ASCII fields in the header, we are done */ if (AcpiGbl_CDAT) { return (AE_OK); } /* * These standard fields must be ASCII: OemId, OemTableId, AslCompilerId. * We allow a NULL terminator in OemId and OemTableId. */ for (i = 0; i < ACPI_NAMESEG_SIZE; i++) { if (!ACPI_IS_ASCII ((UINT8) TableHeader.AslCompilerId[i])) { goto BadCharacters; } } for (i = 0; (i < ACPI_OEM_ID_SIZE) && (TableHeader.OemId[i]); i++) { if (!ACPI_IS_ASCII ((UINT8) TableHeader.OemId[i])) { goto BadCharacters; } } for (i = 0; (i < ACPI_OEM_TABLE_ID_SIZE) && (TableHeader.OemTableId[i]); i++) { if (!ACPI_IS_ASCII ((UINT8) TableHeader.OemTableId[i])) { goto BadCharacters; } } return (AE_OK); BadCharacters: ACPI_WARNING ((AE_INFO, "Table header for [%4.4s] has invalid ASCII character(s)", TableHeader.Signature)); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcCheckTextModeCorruption * * PARAMETERS: Table - Table buffer starting with table header * * RETURN: Status * * DESCRIPTION: Check table for text mode file corruption where all linefeed * characters (LF) have been replaced by carriage return linefeed * pairs (CR/LF). * ******************************************************************************/ static ACPI_STATUS AcCheckTextModeCorruption ( ACPI_TABLE_HEADER *Table) { UINT32 i; UINT32 Pairs = 0; UINT8 *Buffer = ACPI_CAST_PTR (UINT8, Table); /* Scan entire table to determine if each LF has been prefixed with a CR */ for (i = 1; i < Table->Length; i++) { if (Buffer[i] == 0x0A) { if (Buffer[i - 1] != 0x0D) { /* The LF does not have a preceding CR, table not corrupted */ return (AE_OK); } else { /* Found a CR/LF pair */ Pairs++; } i++; } } if (!Pairs) { return (AE_OK); } /* * Entire table scanned, each CR is part of a CR/LF pair -- * meaning that the table was treated as a text file somewhere. * * NOTE: We can't "fix" the table, because any existing CR/LF pairs in the * original table are left untouched by the text conversion process -- * meaning that we cannot simply replace CR/LF pairs with LFs. */ AcpiOsPrintf ("Table has been corrupted by text mode conversion\n"); AcpiOsPrintf ("All LFs (%u) were changed to CR/LF pairs\n", Pairs); AcpiOsPrintf ("Table cannot be repaired!\n"); return (AE_BAD_VALUE); } src/acpica/source/common/acgetline.c000066400000000000000000000470731465205512700177760ustar00rootroot00000000000000/****************************************************************************** * * Module Name: acgetline - local line editing * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "amlcode.h" #include "acparser.h" #include "acdebug.h" /* * This is an os-independent implementation of line-editing services needed * by the AcpiExec utility. It uses getchar() and putchar() and the existing * history support provided by the AML debugger. It assumes that the terminal * is in the correct line-editing mode such as raw and noecho. The OSL * interface AcpiOsInitialize should do this. AcpiOsTerminate should put the * terminal back into the original mode. */ #define _COMPONENT ACPI_OS_SERVICES ACPI_MODULE_NAME ("acgetline") /* Local prototypes */ static void AcpiAcClearLine ( UINT32 EndOfLine, UINT32 CursorPosition); /* Various ASCII constants */ #define _ASCII_NUL 0 #define _ASCII_BACKSPACE 0x08 #define _ASCII_TAB 0x09 #define _ASCII_ESCAPE 0x1B #define _ASCII_SPACE 0x20 #define _ASCII_LEFT_BRACKET 0x5B #define _ASCII_DEL 0x7F #define _ASCII_UP_ARROW 'A' #define _ASCII_DOWN_ARROW 'B' #define _ASCII_RIGHT_ARROW 'C' #define _ASCII_LEFT_ARROW 'D' #define _ASCII_NEWLINE '\n' /* Erase a single character on the input command line */ #define ACPI_CLEAR_CHAR() \ putchar (_ASCII_BACKSPACE); \ putchar (_ASCII_SPACE); \ putchar (_ASCII_BACKSPACE); /* Backup cursor by Count positions */ #define ACPI_BACKUP_CURSOR(i, Count) \ for (i = 0; i < (Count); i++) \ {putchar (_ASCII_BACKSPACE);} /****************************************************************************** * * FUNCTION: AcpiAcClearLine * * PARAMETERS: EndOfLine - Current end-of-line index * CursorPosition - Current cursor position within line * * RETURN: None * * DESCRIPTION: Clear the entire command line the hard way, but probably the * most portable. * *****************************************************************************/ static void AcpiAcClearLine ( UINT32 EndOfLine, UINT32 CursorPosition) { UINT32 i; if (CursorPosition < EndOfLine) { /* Clear line from current position to end of line */ for (i = 0; i < (EndOfLine - CursorPosition); i++) { putchar (' '); } } /* Clear the entire line */ for (; EndOfLine > 0; EndOfLine--) { ACPI_CLEAR_CHAR (); } } /****************************************************************************** * * FUNCTION: AcpiOsGetLine * * PARAMETERS: Buffer - Where to return the command line * BufferLength - Maximum length of Buffer * BytesRead - Where the actual byte count is returned * * RETURN: Status and actual bytes read * * DESCRIPTION: Get the next input line from the terminal. NOTE: terminal * is expected to be in a mode that supports line-editing (raw, * noecho). This function is intended to be very portable. Also, * it uses the history support implemented in the AML debugger. * *****************************************************************************/ ACPI_STATUS AcpiOsGetLine ( char *Buffer, UINT32 BufferLength, UINT32 *BytesRead) { char *NextCommand; UINT32 MaxCommandIndex = AcpiGbl_NextCmdNum - 1; UINT32 CurrentCommandIndex = MaxCommandIndex; UINT32 PreviousCommandIndex = MaxCommandIndex; int InputChar; UINT32 CursorPosition = 0; UINT32 EndOfLine = 0; UINT32 i; /* Always clear the line buffer before we read a new line */ memset (Buffer, 0, BufferLength); /* * This loop gets one character at a time (except for esc sequences) * until a newline or error is detected. * * Note: Don't attempt to write terminal control ESC sequences, even * though it makes certain things more difficult. */ while (1) { if (EndOfLine >= (BufferLength - 1)) { return (AE_BUFFER_OVERFLOW); } InputChar = getchar (); switch (InputChar) { default: /* This is the normal character case */ /* Echo the character (at EOL) and copy it to the line buffer */ if (EndOfLine == CursorPosition) { putchar (InputChar); Buffer[EndOfLine] = (char) InputChar; EndOfLine++; CursorPosition++; Buffer[EndOfLine] = 0; continue; } /* Insert character into the middle of the buffer */ memmove (&Buffer[CursorPosition + 1], &Buffer[CursorPosition], (EndOfLine - CursorPosition + 1)); Buffer [CursorPosition] = (char) InputChar; Buffer [EndOfLine + 1] = 0; /* Display the new part of line starting at the new character */ fprintf (stdout, "%s", &Buffer[CursorPosition]); /* Restore cursor */ ACPI_BACKUP_CURSOR (i, EndOfLine - CursorPosition); CursorPosition++; EndOfLine++; continue; case _ASCII_DEL: /* Backspace key */ if (!EndOfLine) /* Any characters on the command line? */ { continue; } if (EndOfLine == CursorPosition) /* Erase the final character */ { ACPI_CLEAR_CHAR (); EndOfLine--; CursorPosition--; continue; } if (!CursorPosition) /* Do not backup beyond start of line */ { continue; } /* Remove the character from the line */ memmove (&Buffer[CursorPosition - 1], &Buffer[CursorPosition], (EndOfLine - CursorPosition + 1)); /* Display the new part of line starting at the new character */ putchar (_ASCII_BACKSPACE); fprintf (stdout, "%s ", &Buffer[CursorPosition - 1]); /* Restore cursor */ ACPI_BACKUP_CURSOR (i, EndOfLine - CursorPosition + 1); EndOfLine--; if (CursorPosition > 0) { CursorPosition--; } continue; case _ASCII_NEWLINE: /* Normal exit case at end of command line */ case _ASCII_NUL: /* Return the number of bytes in the command line string */ if (BytesRead) { *BytesRead = EndOfLine; } /* Echo, terminate string buffer, and exit */ putchar (InputChar); Buffer[EndOfLine] = 0; return (AE_OK); case _ASCII_TAB: /* Ignore */ continue; case EOF: return (AE_ERROR); case _ASCII_ESCAPE: /* Check for escape sequences of the form "ESC[x" */ InputChar = getchar (); if (InputChar != _ASCII_LEFT_BRACKET) { continue; /* Ignore this ESC, does not have the '[' */ } /* Get the code following the ESC [ */ InputChar = getchar (); /* Backup one character */ switch (InputChar) { case _ASCII_LEFT_ARROW: if (CursorPosition > 0) { putchar (_ASCII_BACKSPACE); CursorPosition--; } continue; case _ASCII_RIGHT_ARROW: /* * Move one character forward. Do this without sending * ESC sequence to the terminal for max portability. */ if (CursorPosition < EndOfLine) { /* Backup to start of line and print the entire line */ ACPI_BACKUP_CURSOR (i, CursorPosition); fprintf (stdout, "%s", Buffer); /* Backup to where the cursor should be */ CursorPosition++; ACPI_BACKUP_CURSOR (i, EndOfLine - CursorPosition); } continue; case _ASCII_UP_ARROW: /* If no commands available or at start of history list, ignore */ if (!CurrentCommandIndex) { continue; } /* Manage our up/down progress */ if (CurrentCommandIndex > PreviousCommandIndex) { CurrentCommandIndex = PreviousCommandIndex; } /* Get the historical command from the debugger */ NextCommand = AcpiDbGetHistoryByIndex (CurrentCommandIndex); if (!NextCommand) { return (AE_ERROR); } /* Make this the active command and echo it */ AcpiAcClearLine (EndOfLine, CursorPosition); strcpy (Buffer, NextCommand); fprintf (stdout, "%s", Buffer); EndOfLine = CursorPosition = strlen (Buffer); PreviousCommandIndex = CurrentCommandIndex; CurrentCommandIndex--; continue; case _ASCII_DOWN_ARROW: if (!MaxCommandIndex) /* Any commands available? */ { continue; } /* Manage our up/down progress */ if (CurrentCommandIndex < PreviousCommandIndex) { CurrentCommandIndex = PreviousCommandIndex; } /* If we are the end of the history list, output a clear new line */ if ((CurrentCommandIndex + 1) > MaxCommandIndex) { AcpiAcClearLine (EndOfLine, CursorPosition); EndOfLine = CursorPosition = 0; PreviousCommandIndex = CurrentCommandIndex; continue; } PreviousCommandIndex = CurrentCommandIndex; CurrentCommandIndex++; /* Get the historical command from the debugger */ NextCommand = AcpiDbGetHistoryByIndex (CurrentCommandIndex); if (!NextCommand) { return (AE_ERROR); } /* Make this the active command and echo it */ AcpiAcClearLine (EndOfLine, CursorPosition); strcpy (Buffer, NextCommand); fprintf (stdout, "%s", Buffer); EndOfLine = CursorPosition = strlen (Buffer); continue; case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: /* * Ignore the various keys like insert/delete/home/end, etc. * But we must eat the final character of the ESC sequence. */ (void) getchar (); continue; default: /* Ignore random escape sequences that we don't care about */ continue; } continue; } } } src/acpica/source/common/adfile.c000066400000000000000000000415421465205512700172620ustar00rootroot00000000000000/****************************************************************************** * * Module Name: adfile - Application-level disassembler file support routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "acpi.h" #include "accommon.h" #include "acapps.h" #include #define _COMPONENT ACPI_TOOLS ACPI_MODULE_NAME ("adfile") /* Local prototypes */ static INT32 AdWriteBuffer ( char *Filename, char *Buffer, UINT32 Length); static char FilenameBuf[20]; /****************************************************************************** * * FUNCTION: AfGenerateFilename * * PARAMETERS: Prefix - prefix string * TableId - The table ID * * RETURN: Pointer to the completed string * * DESCRIPTION: Build an output filename from an ACPI table ID string * ******************************************************************************/ char * AdGenerateFilename ( char *Prefix, char *TableId) { UINT32 i; UINT32 j; for (i = 0; Prefix[i]; i++) { FilenameBuf[i] = Prefix[i]; } FilenameBuf[i] = '_'; i++; for (j = 0; j < 8 && (TableId[j] != ' ') && (TableId[j] != 0); i++, j++) { FilenameBuf[i] = TableId[j]; } FilenameBuf[i] = 0; strcat (FilenameBuf, FILE_SUFFIX_BINARY_TABLE); return (FilenameBuf); } /****************************************************************************** * * FUNCTION: AfWriteBuffer * * PARAMETERS: Filename - name of file * Buffer - data to write * Length - length of data * * RETURN: Actual number of bytes written * * DESCRIPTION: Open a file and write out a single buffer * ******************************************************************************/ static INT32 AdWriteBuffer ( char *Filename, char *Buffer, UINT32 Length) { FILE *File; ACPI_SIZE Actual; File = fopen (Filename, "wb"); if (!File) { printf ("Could not open file %s\n", Filename); return (-1); } Actual = fwrite (Buffer, 1, (size_t) Length, File); if (Actual != Length) { printf ("Could not write to file %s\n", Filename); } fclose (File); return ((INT32) Actual); } /****************************************************************************** * * FUNCTION: AfWriteTable * * PARAMETERS: Table - pointer to the ACPI table * Length - length of the table * TableName - the table signature * OemTableID - from the table header * * RETURN: None * * DESCRIPTION: Dump the loaded tables to a file (or files) * ******************************************************************************/ void AdWriteTable ( ACPI_TABLE_HEADER *Table, UINT32 Length, char *TableName, char *OemTableId) { char *Filename; Filename = AdGenerateFilename (TableName, OemTableId); AdWriteBuffer (Filename, (char *) Table, Length); AcpiOsPrintf ("Table [%s] written to \"%s\"\n", TableName, Filename); } /******************************************************************************* * * FUNCTION: FlGenerateFilename * * PARAMETERS: InputFilename - Original ASL source filename * Suffix - New extension. * * RETURN: New filename containing the original base + the new suffix * * DESCRIPTION: Generate a new filename from the ASL source filename and a new * extension. Used to create the *.LST, *.TXT, etc. files. * ******************************************************************************/ char * FlGenerateFilename ( char *InputFilename, char *Suffix) { char *Position; char *NewFilename; char *DirectoryPosition; /* * Copy the original filename to a new buffer. Leave room for the worst * case where we append the suffix, an added dot and the null terminator. */ NewFilename = UtLocalCacheCalloc ((ACPI_SIZE) strlen (InputFilename) + strlen (Suffix) + 2); strcpy (NewFilename, InputFilename); /* Try to find the last dot in the filename */ DirectoryPosition = strrchr (NewFilename, '/'); Position = strrchr (NewFilename, '.'); if (Position && (Position > DirectoryPosition)) { /* Tack on the new suffix */ Position++; *Position = 0; strcat (Position, Suffix); } else { /* No dot, add one and then the suffix */ strcat (NewFilename, "."); strcat (NewFilename, Suffix); } return (NewFilename); } /******************************************************************************* * * FUNCTION: FlStrdup * * DESCRIPTION: Local strdup function * ******************************************************************************/ static char * FlStrdup ( char *String) { char *NewString; NewString = UtLocalCacheCalloc ((ACPI_SIZE) strlen (String) + 1); strcpy (NewString, String); return (NewString); } /******************************************************************************* * * FUNCTION: FlSplitInputPathname * * PARAMETERS: InputFilename - The user-specified ASL source file to be * compiled * OutDirectoryPath - Where the directory path prefix is * returned * OutFilename - Where the filename part is returned * * RETURN: Status * * DESCRIPTION: Split the input path into a directory and filename part * 1) Directory part used to open include files * 2) Filename part used to generate output filenames * ******************************************************************************/ ACPI_STATUS FlSplitInputPathname ( char *InputPath, char **OutDirectoryPath, char **OutFilename) { char *Substring; char *DirectoryPath; char *Filename; if (OutDirectoryPath) { *OutDirectoryPath = NULL; } if (!InputPath) { return (AE_OK); } /* Get the path to the input filename's directory */ DirectoryPath = FlStrdup (InputPath); if (!DirectoryPath) { return (AE_NO_MEMORY); } /* Convert backslashes to slashes in the entire path */ UtConvertBackslashes (DirectoryPath); /* Backup to last slash or colon */ Substring = strrchr (DirectoryPath, '/'); if (!Substring) { Substring = strrchr (DirectoryPath, ':'); } /* Extract the simple filename */ if (!Substring) { Filename = FlStrdup (DirectoryPath); DirectoryPath[0] = 0; } else { Filename = FlStrdup (Substring + 1); *(Substring+1) = 0; } if (!Filename) { return (AE_NO_MEMORY); } if (OutDirectoryPath) { *OutDirectoryPath = DirectoryPath; } if (OutFilename) { *OutFilename = Filename; return (AE_OK); } return (AE_OK); } /******************************************************************************* * * FUNCTION: FlGetFileBasename * * PARAMETERS: FilePathname - File path to be split * * RETURN: The extracted base name of the file, in upper case * * DESCRIPTION: Extract the file base name (the file name with no extension) * from the input pathname. * * Note: Any backslashes in the pathname should be previously * converted to forward slashes before calling this function. * ******************************************************************************/ char * FlGetFileBasename ( char *FilePathname) { char *FileBasename; char *Substring; /* Backup to last slash or colon */ Substring = strrchr (FilePathname, '/'); if (!Substring) { Substring = strrchr (FilePathname, ':'); } /* Extract the full filename (base + extension) */ if (Substring) { FileBasename = FlStrdup (Substring + 1); } else { FileBasename = FlStrdup (FilePathname); } /* Remove the filename extension if present */ Substring = strchr (FileBasename, '.'); if (Substring) { *Substring = 0; } AcpiUtStrupr (FileBasename); return (FileBasename); } src/acpica/source/common/adisasm.c000066400000000000000000000630241465205512700174560ustar00rootroot00000000000000/****************************************************************************** * * Module Name: adisasm - Application-level disassembler routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "amlcode.h" #include "acdisasm.h" #include "acdispat.h" #include "acnamesp.h" #include "acparser.h" #include "acapps.h" #include "acconvert.h" #define _COMPONENT ACPI_TOOLS ACPI_MODULE_NAME ("adisasm") /* Local prototypes */ static ACPI_STATUS AdDoExternalFileList ( char *Filename); static ACPI_STATUS AdDisassembleOneTable ( ACPI_TABLE_HEADER *Table, FILE *File, char *Filename, char *DisasmFilename); static ACPI_STATUS AdReparseOneTable ( ACPI_TABLE_HEADER *Table, FILE *File, ACPI_OWNER_ID OwnerId); ACPI_TABLE_DESC LocalTables[1]; ACPI_PARSE_OBJECT *AcpiGbl_ParseOpRoot; /* Stubs for everything except ASL compiler */ #ifndef ACPI_ASL_COMPILER BOOLEAN AcpiDsIsResultUsed ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState) { return (TRUE); } ACPI_STATUS AcpiDsMethodError ( ACPI_STATUS Status, ACPI_WALK_STATE *WalkState) { return (Status); } #endif /******************************************************************************* * * FUNCTION: AdInitialize * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: ACPICA and local initialization * ******************************************************************************/ ACPI_STATUS AdInitialize ( void) { ACPI_STATUS Status; /* ACPICA subsystem initialization */ Status = AcpiOsInitialize (); if (ACPI_FAILURE (Status)) { fprintf (stderr, "Could not initialize ACPICA subsystem: %s\n", AcpiFormatException (Status)); return (Status); } Status = AcpiUtInitGlobals (); if (ACPI_FAILURE (Status)) { fprintf (stderr, "Could not initialize ACPICA globals: %s\n", AcpiFormatException (Status)); return (Status); } Status = AcpiUtMutexInitialize (); if (ACPI_FAILURE (Status)) { fprintf (stderr, "Could not initialize ACPICA mutex objects: %s\n", AcpiFormatException (Status)); return (Status); } Status = AcpiNsRootInitialize (); if (ACPI_FAILURE (Status)) { fprintf (stderr, "Could not initialize ACPICA namespace: %s\n", AcpiFormatException (Status)); return (Status); } /* Setup the Table Manager (cheat - there is no RSDT) */ AcpiGbl_RootTableList.MaxTableCount = 1; AcpiGbl_RootTableList.CurrentTableCount = 0; AcpiGbl_RootTableList.Tables = LocalTables; return (AE_OK); } /****************************************************************************** * * FUNCTION: AdAmlDisassemble * * PARAMETERS: Filename - AML input filename * OutToFile - TRUE if output should go to a file * Prefix - Path prefix for output * OutFilename - where the filename is returned * * RETURN: Status * * DESCRIPTION: Disassembler entry point. Disassemble an entire ACPI table. * *****************************************************************************/ ACPI_STATUS AdAmlDisassemble ( BOOLEAN OutToFile, char *Filename, char *Prefix, char **OutFilename) { ACPI_STATUS Status; char *DisasmFilename = NULL; FILE *File = NULL; ACPI_TABLE_HEADER *Table = NULL; ACPI_NEW_TABLE_DESC *ListHead = NULL; /* * Input: AML code from either a file or via GetTables (memory or * registry) */ if (Filename) { /* Get the list of all AML tables in the file */ Status = AcGetAllTablesFromFile (Filename, ACPI_GET_ALL_TABLES, &ListHead); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not get ACPI tables from %s, %s\n", Filename, AcpiFormatException (Status)); return (Status); } /* Process any user-specified files for external objects */ Status = AdDoExternalFileList (Filename); if (ACPI_FAILURE (Status)) { return (Status); } } else { Status = AdGetLocalTables (); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not get ACPI tables, %s\n", AcpiFormatException (Status)); return (Status); } if (!AcpiGbl_DmOpt_Disasm) { return (AE_OK); } /* Obtained the local tables, just disassemble the DSDT */ Status = AcpiGetTable (ACPI_SIG_DSDT, 0, &Table); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not get DSDT, %s\n", AcpiFormatException (Status)); return (Status); } AcpiOsPrintf ("\nDisassembly of DSDT\n"); Prefix = AdGenerateFilename ("dsdt", Table->OemTableId); } /* * Output: ASL code. Redirect to a file if requested */ if (OutToFile) { /* Create/Open a disassembly output file */ DisasmFilename = FlGenerateFilename (Prefix, FILE_SUFFIX_DISASSEMBLY); if (!DisasmFilename) { fprintf (stderr, "Could not generate output filename\n"); Status = AE_ERROR; goto Cleanup; } File = fopen (DisasmFilename, "w+"); if (!File) { fprintf (stderr, "Could not open output file %s\n", DisasmFilename); Status = AE_ERROR; goto Cleanup; } } *OutFilename = DisasmFilename; /* Disassemble all AML tables within the file */ while (ListHead) { Status = AdDisassembleOneTable (ListHead->Table, File, Filename, DisasmFilename); if (ACPI_FAILURE (Status)) { break; } ListHead = ListHead->Next; } Cleanup: if (Table && !AcpiGbl_ForceAmlDisassembly && !AcpiUtIsAmlTable (Table)) { ACPI_FREE (Table); } AcDeleteTableList (ListHead); if (File) { fclose (File); AcpiOsRedirectOutput (stdout); } AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot); AcpiGbl_ParseOpRoot = NULL; return (Status); } /****************************************************************************** * * FUNCTION: AdDisassembleOneTable * * PARAMETERS: Table - Raw AML table * File - Pointer for the input file * Filename - AML input filename * DisasmFilename - Output filename * * RETURN: Status * * DESCRIPTION: Disassemble a single ACPI table. AML or data table. * *****************************************************************************/ static ACPI_STATUS AdDisassembleOneTable ( ACPI_TABLE_HEADER *Table, FILE *File, char *Filename, char *DisasmFilename) { ACPI_STATUS Status; ACPI_OWNER_ID OwnerId; #ifdef ACPI_ASL_COMPILER /* * For ASL-/ASL+ converter: replace the temporary "XXXX" * table signature with the original. This "XXXX" makes * it harder for the AML interpreter to run the badaml * (.xxx) file produced from the converter in case if * it fails to get deleted. */ if (AcpiGbl_CaptureComments) { strncpy (Table->Signature, AcpiGbl_TableSig, ACPI_NAMESEG_SIZE); } #endif /* ForceAmlDisassembly means to assume the table contains valid AML */ if (!AcpiGbl_ForceAmlDisassembly && !AcpiUtIsAmlTable (Table)) { if (File) { AcpiOsRedirectOutput (File); } AdDisassemblerHeader (Filename, ACPI_IS_DATA_TABLE); /* This is a "Data Table" (non-AML table) */ AcpiOsPrintf (" * ACPI Data Table [%4.4s]\n *\n", AcpiGbl_CDAT ? (char *) AcpiGbl_CDAT : Table->Signature); AcpiOsPrintf (" * Format: [HexOffset DecimalOffset ByteLength] " "FieldName : FieldValue (in hex)\n */\n\n"); AcpiDmDumpDataTable (Table); fprintf (stderr, "Acpi Data Table [%4.4s] decoded\n", AcpiGbl_CDAT ? (char *) AcpiGbl_CDAT : Table->Signature); if (File) { fprintf (stderr, "Formatted output: %s - %u bytes\n", DisasmFilename, CmGetFileSize (File)); } return (AE_OK); } /* Initialize the converter output file */ ASL_CV_INIT_FILETREE(Table, File); /* * This is an AML table (DSDT or SSDT). * Always parse the tables, only option is what to display */ Status = AdParseTable (Table, &OwnerId, TRUE, FALSE); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not parse ACPI tables, %s\n", AcpiFormatException (Status)); return (Status); } /* Redirect output for code generation and debugging output */ if (File) { AcpiOsRedirectOutput (File); } /* Debug output, namespace and parse tree */ if (AslCompilerdebug && File) { AcpiOsPrintf ("/**** Before second load\n"); NsSetupNamespaceListing (File); NsDisplayNamespace (); AcpiOsPrintf ("*****/\n"); } /* Load namespace from names created within control methods */ AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot, AcpiGbl_RootNode, OwnerId); /* * Cross reference the namespace here, in order to * generate External() statements */ AcpiDmCrossReferenceNamespace (AcpiGbl_ParseOpRoot, AcpiGbl_RootNode, OwnerId); if (AslCompilerdebug) { AcpiDmDumpTree (AcpiGbl_ParseOpRoot); } /* Find possible calls to external control methods */ AcpiDmFindOrphanMethods (AcpiGbl_ParseOpRoot); /* * If we found any external control methods, we must reparse * the entire tree with the new information (namely, the * number of arguments per method) */ if (AcpiDmGetUnresolvedExternalMethodCount ()) { Status = AdReparseOneTable (Table, File, OwnerId); if (ACPI_FAILURE (Status)) { return (Status); } } /* * Now that the namespace is finalized, we can perform namespace * transforms. * * 1) Convert fixed-offset references to resource descriptors * to symbolic references (Note: modifies namespace) */ AcpiDmConvertParseObjects (AcpiGbl_ParseOpRoot, AcpiGbl_RootNode); /* Optional displays */ if (AcpiGbl_DmOpt_Disasm) { /* This is the real disassembly */ AdDisplayTables (Filename, Table); /* Dump hex table if requested (-vt) */ AcpiDmDumpDataTable (Table); fprintf (stderr, "Disassembly completed\n"); if (File) { fprintf (stderr, "ASL Output: %s - %u bytes\n", DisasmFilename, CmGetFileSize (File)); } if (AslGbl_MapfileFlag) { fprintf (stderr, "%14s %s - %u bytes\n", AslGbl_FileDescs[ASL_FILE_MAP_OUTPUT].ShortDescription, AslGbl_Files[ASL_FILE_MAP_OUTPUT].Filename, FlGetFileSize (ASL_FILE_MAP_OUTPUT)); } } return (AE_OK); } /****************************************************************************** * * FUNCTION: AdReparseOneTable * * PARAMETERS: Table - Raw AML table * File - Pointer for the input file * OwnerId - ID for this table * * RETURN: Status * * DESCRIPTION: Reparse a table that has already been loaded. Used to * integrate information about external control methods. * These methods may have been previously parsed incorrectly. * *****************************************************************************/ static ACPI_STATUS AdReparseOneTable ( ACPI_TABLE_HEADER *Table, FILE *File, ACPI_OWNER_ID OwnerId) { ACPI_STATUS Status; ACPI_COMMENT_ADDR_NODE *AddrListHead; fprintf (stderr, "\nFound %u external control methods, " "reparsing with new information\n", AcpiDmGetUnresolvedExternalMethodCount ()); /* Reparse, rebuild namespace */ AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot); AcpiGbl_ParseOpRoot = NULL; AcpiNsDeleteNamespaceSubtree (AcpiGbl_RootNode); AcpiGbl_RootNode = NULL; AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME; AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED; AcpiGbl_RootNodeStruct.Type = ACPI_TYPE_DEVICE; AcpiGbl_RootNodeStruct.Parent = NULL; AcpiGbl_RootNodeStruct.Child = NULL; AcpiGbl_RootNodeStruct.Peer = NULL; AcpiGbl_RootNodeStruct.Object = NULL; AcpiGbl_RootNodeStruct.Flags = 0; Status = AcpiNsRootInitialize (); if (ACPI_FAILURE (Status)) { return (Status); } /* New namespace, add the external definitions first */ AcpiDmAddExternalListToNamespace (); /* For -ca option: clear the list of comment addresses. */ while (AcpiGbl_CommentAddrListHead) { AddrListHead= AcpiGbl_CommentAddrListHead; AcpiGbl_CommentAddrListHead = AcpiGbl_CommentAddrListHead->Next; AcpiOsFree(AddrListHead); } /* Parse the table again. No need to reload it, however */ Status = AdParseTable (Table, NULL, FALSE, FALSE); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not parse ACPI tables, %s\n", AcpiFormatException (Status)); return (Status); } /* Cross reference the namespace again */ AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot, AcpiGbl_RootNode, OwnerId); AcpiDmCrossReferenceNamespace (AcpiGbl_ParseOpRoot, AcpiGbl_RootNode, OwnerId); /* Debug output - namespace and parse tree */ if (AslCompilerdebug) { AcpiOsPrintf ("/**** After second load and resource conversion\n"); if (File) { NsSetupNamespaceListing (File); NsDisplayNamespace (); } AcpiOsPrintf ("*****/\n"); AcpiDmDumpTree (AcpiGbl_ParseOpRoot); } return (AE_OK); } /****************************************************************************** * * FUNCTION: AdDoExternalFileList * * PARAMETERS: Filename - Input file for the table * * RETURN: Status * * DESCRIPTION: Process all tables found in the -e external files list * *****************************************************************************/ static ACPI_STATUS AdDoExternalFileList ( char *Filename) { ACPI_EXTERNAL_FILE *ExternalFileList; char *ExternalFilename; ACPI_NEW_TABLE_DESC *ExternalListHead = NULL; ACPI_STATUS Status; ACPI_STATUS GlobalStatus = AE_OK; ACPI_OWNER_ID OwnerId; /* * External filenames are specified on the command line like this: * Example: iasl -e file1,file2,file3 -d xxx.aml */ ExternalFileList = AcpiGbl_ExternalFileList; /* Process each external file */ while (ExternalFileList) { ExternalFilename = ExternalFileList->Path; if (!strcmp (ExternalFilename, Filename)) { /* Next external file */ ExternalFileList = ExternalFileList->Next; continue; } AcpiOsPrintf ("External object resolution file %16s\n", ExternalFilename); Status = AcGetAllTablesFromFile ( ExternalFilename, ACPI_GET_ONLY_AML_TABLES, &ExternalListHead); if (ACPI_FAILURE (Status)) { if (Status == AE_TYPE) { ExternalFileList = ExternalFileList->Next; GlobalStatus = AE_TYPE; continue; } AcDeleteTableList (ExternalListHead); return (Status); } /* Load external tables for symbol resolution */ while (ExternalListHead) { Status = AdParseTable ( ExternalListHead->Table, &OwnerId, TRUE, TRUE); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not parse external ACPI tables, %s\n", AcpiFormatException (Status)); AcDeleteTableList (ExternalListHead); return (Status); } /* * Load namespace from names created within control methods * Set owner id of nodes in external table */ AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot, AcpiGbl_RootNode, OwnerId); AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot); AcpiGbl_ParseOpRoot = NULL; ExternalListHead = ExternalListHead->Next; } /* Next external file */ ExternalFileList = ExternalFileList->Next; } AcDeleteTableList (ExternalListHead); if (ACPI_FAILURE (GlobalStatus)) { return (GlobalStatus); } /* Clear external list generated by Scope in external tables */ if (AcpiGbl_ExternalFileList) { AcpiDmClearExternalList (); } /* Load any externals defined in the optional external ref file */ AcpiDmGetExternalsFromFile (); return (AE_OK); } src/acpica/source/common/adwalk.c000066400000000000000000001126601465205512700173010ustar00rootroot00000000000000/****************************************************************************** * * Module Name: adwalk - Application-level disassembler parse tree walk routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acdisasm.h" #include "acdispat.h" #include "acnamesp.h" #include "acapps.h" #define _COMPONENT ACPI_TOOLS ACPI_MODULE_NAME ("adwalk") /* * aslmap - opcode mappings and reserved method names */ ACPI_OBJECT_TYPE AslMapNamedOpcodeToDataType ( UINT16 Opcode); /* Local prototypes */ static ACPI_STATUS AcpiDmFindOrphanDescending ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS AcpiDmDumpDescending ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS AcpiDmXrefDescendingOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS AcpiDmCommonAscendingOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS AcpiDmLoadDescendingOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static UINT32 AcpiDmInspectPossibleArgs ( UINT32 CurrentOpArgCount, UINT32 TargetCount, ACPI_PARSE_OBJECT *Op); static ACPI_STATUS AcpiDmCommonDescendingOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS AcpiDmProcessResourceDescriptors ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); /******************************************************************************* * * FUNCTION: AcpiDmDumpTree * * PARAMETERS: Origin - Starting object * * RETURN: None * * DESCRIPTION: Parse tree walk to format and output the nodes * ******************************************************************************/ void AcpiDmDumpTree ( ACPI_PARSE_OBJECT *Origin) { ACPI_OP_WALK_INFO Info; if (!Origin) { return; } AcpiOsPrintf ("/*\nAML Parse Tree\n\n"); Info.Flags = 0; Info.Count = 0; Info.Level = 0; Info.WalkState = NULL; AcpiDmWalkParseTree (Origin, AcpiDmDumpDescending, NULL, &Info); AcpiOsPrintf ("*/\n\n"); } /******************************************************************************* * * FUNCTION: AcpiDmFindOrphanMethods * * PARAMETERS: Origin - Starting object * * RETURN: None * * DESCRIPTION: Parse tree walk to find "orphaned" method invocations -- methods * that are not resolved in the namespace * ******************************************************************************/ void AcpiDmFindOrphanMethods ( ACPI_PARSE_OBJECT *Origin) { ACPI_OP_WALK_INFO Info; if (!Origin) { return; } Info.Flags = 0; Info.Level = 0; Info.WalkState = NULL; AcpiDmWalkParseTree (Origin, AcpiDmFindOrphanDescending, NULL, &Info); } /******************************************************************************* * * FUNCTION: AcpiDmFinishNamespaceLoad * * PARAMETERS: ParseTreeRoot - Root of the parse tree * NamespaceRoot - Root of the internal namespace * OwnerId - OwnerId of the table to be disassembled * * RETURN: None * * DESCRIPTION: Load all namespace items that are created within control * methods. Used before namespace cross reference * ******************************************************************************/ void AcpiDmFinishNamespaceLoad ( ACPI_PARSE_OBJECT *ParseTreeRoot, ACPI_NAMESPACE_NODE *NamespaceRoot, ACPI_OWNER_ID OwnerId) { ACPI_STATUS Status; ACPI_OP_WALK_INFO Info; ACPI_WALK_STATE *WalkState; if (!ParseTreeRoot) { return; } /* Create and initialize a new walk state */ WalkState = AcpiDsCreateWalkState (OwnerId, ParseTreeRoot, NULL, NULL); if (!WalkState) { return; } Status = AcpiDsScopeStackPush (NamespaceRoot, NamespaceRoot->Type, WalkState); if (ACPI_FAILURE (Status)) { return; } Info.Flags = 0; Info.Level = 0; Info.WalkState = WalkState; AcpiDmWalkParseTree (ParseTreeRoot, AcpiDmLoadDescendingOp, AcpiDmCommonAscendingOp, &Info); ACPI_FREE (WalkState); } /******************************************************************************* * * FUNCTION: AcpiDmCrossReferenceNamespace * * PARAMETERS: ParseTreeRoot - Root of the parse tree * NamespaceRoot - Root of the internal namespace * OwnerId - OwnerId of the table to be disassembled * * RETURN: None * * DESCRIPTION: Cross reference the namespace to create externals * ******************************************************************************/ void AcpiDmCrossReferenceNamespace ( ACPI_PARSE_OBJECT *ParseTreeRoot, ACPI_NAMESPACE_NODE *NamespaceRoot, ACPI_OWNER_ID OwnerId) { ACPI_STATUS Status; ACPI_OP_WALK_INFO Info; ACPI_WALK_STATE *WalkState; if (!ParseTreeRoot) { return; } /* Create and initialize a new walk state */ WalkState = AcpiDsCreateWalkState (OwnerId, ParseTreeRoot, NULL, NULL); if (!WalkState) { return; } Status = AcpiDsScopeStackPush (NamespaceRoot, NamespaceRoot->Type, WalkState); if (ACPI_FAILURE (Status)) { return; } Info.Flags = 0; Info.Level = 0; Info.WalkState = WalkState; AcpiDmWalkParseTree (ParseTreeRoot, AcpiDmXrefDescendingOp, AcpiDmCommonAscendingOp, &Info); ACPI_FREE (WalkState); } /******************************************************************************* * * FUNCTION: AcpiDmConvertParseObjects * * PARAMETERS: ParseTreeRoot - Root of the parse tree * NamespaceRoot - Root of the internal namespace * * RETURN: None * * DESCRIPTION: Begin parse tree walk to perform conversions needed for * disassembly. These include resource descriptors and switch/case * operations. * ******************************************************************************/ void AcpiDmConvertParseObjects ( ACPI_PARSE_OBJECT *ParseTreeRoot, ACPI_NAMESPACE_NODE *NamespaceRoot) { ACPI_STATUS Status; ACPI_OP_WALK_INFO Info; ACPI_WALK_STATE *WalkState; if (!ParseTreeRoot) { return; } /* Create and initialize a new walk state */ WalkState = AcpiDsCreateWalkState (0, ParseTreeRoot, NULL, NULL); if (!WalkState) { return; } Status = AcpiDsScopeStackPush (NamespaceRoot, NamespaceRoot->Type, WalkState); if (ACPI_FAILURE (Status)) { ACPI_FREE (WalkState); return; } Info.Flags = 0; Info.Level = 0; Info.WalkState = WalkState; AcpiDmWalkParseTree (ParseTreeRoot, AcpiDmCommonDescendingOp, AcpiDmCommonAscendingOp, &Info); ACPI_FREE (WalkState); if (AcpiGbl_TempListHead) { AcpiDmClearTempList(); } return; } /******************************************************************************* * * FUNCTION: AcpiDmDumpDescending * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Format and print contents of one parse Op. * ******************************************************************************/ static ACPI_STATUS AcpiDmDumpDescending ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_OP_WALK_INFO *Info = Context; char *Path; ACPI_STATUS Status; if (!Op) { return (AE_OK); } /* Most of the information (count, level, name) here */ Info->Count++; AcpiOsPrintf ("% 5d [%2.2d] ", Info->Count, Level); AcpiDmIndent (Level); AcpiOsPrintf ("%-28s", AcpiPsGetOpcodeName (Op->Common.AmlOpcode)); /* Extra info is helpful */ switch (Op->Common.AmlOpcode) { case AML_BYTE_OP: AcpiOsPrintf ("%2.2X", (UINT32) Op->Common.Value.Integer); break; case AML_WORD_OP: AcpiOsPrintf ("%4.4X", (UINT32) Op->Common.Value.Integer); break; case AML_DWORD_OP: AcpiOsPrintf ("%8.8X", (UINT32) Op->Common.Value.Integer); break; case AML_QWORD_OP: AcpiOsPrintf ("%8.8X%8.8X", ACPI_FORMAT_UINT64 (Op->Common.Value.Integer)); break; case AML_INT_NAMEPATH_OP: if (Op->Common.Value.String) { Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, Op->Common.Value.String, NULL, &Path); if (ACPI_SUCCESS (Status)) { AcpiOsPrintf ("%s %p", Path, Op->Common.Node); ACPI_FREE (Path); } else { AcpiOsPrintf ("Could not externalize pathname for node [%4.4s]", Op->Common.Node->Name.Ascii); } } else { AcpiOsPrintf ("[NULL]"); } break; case AML_NAME_OP: case AML_METHOD_OP: case AML_DEVICE_OP: AcpiOsPrintf ("%4.4s", ACPI_CAST_PTR (char, &Op->Named.Name)); break; case AML_INT_NAMEDFIELD_OP: AcpiOsPrintf ("%4.4s Length: (bits) %8.8X%8.8X (bytes) %8.8X%8.8X", ACPI_CAST_PTR (char, &Op->Named.Name), ACPI_FORMAT_UINT64 (Op->Common.Value.Integer), ACPI_FORMAT_UINT64 (Op->Common.Value.Integer / 8)); break; default: break; } AcpiOsPrintf ("\n"); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDmFindOrphanDescending * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Check namepath Ops for orphaned method invocations * * Note: Parts of this are experimental, under possible further development. * ******************************************************************************/ static ACPI_STATUS AcpiDmFindOrphanDescending ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { const ACPI_OPCODE_INFO *OpInfo; ACPI_PARSE_OBJECT *ChildOp; ACPI_PARSE_OBJECT *NextOp; ACPI_PARSE_OBJECT *ParentOp; UINT32 ArgCount; if (!Op) { return (AE_OK); } #ifdef ACPI_UNDER_DEVELOPMENT OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); #endif switch (Op->Common.AmlOpcode) { #ifdef ACPI_UNDER_DEVELOPMENT case AML_ADD_OP: ChildOp = Op->Common.Value.Arg; if ((ChildOp->Common.AmlOpcode == AML_INT_NAMEPATH_OP) && !ChildOp->Common.Node) { AcpiNsExternalizeName (ACPI_UINT32_MAX, ChildOp->Common.Value.String, NULL, &Path); AcpiOsPrintf ("/* %-16s A-NAMEPATH: %s */\n", Op->Common.AmlOpName, Path); ACPI_FREE (Path); NextOp = Op->Common.Next; if (!NextOp) { /* This NamePath has no args, assume it is an integer */ AcpiDmAddOpToExternalList (ChildOp, ChildOp->Common.Value.String, ACPI_TYPE_INTEGER, 0, 0); return (AE_OK); } ArgCount = AcpiDmInspectPossibleArgs (3, 1, NextOp); AcpiOsPrintf ("/* A-CHILDREN: %u Actual %u */\n", ArgCount, AcpiDmCountChildren (Op)); if (ArgCount < 1) { /* One Arg means this is just a Store(Name,Target) */ AcpiDmAddOpToExternalList (ChildOp, ChildOp->Common.Value.String, ACPI_TYPE_INTEGER, 0, 0); return (AE_OK); } AcpiDmAddOpToExternalList (ChildOp, ChildOp->Common.Value.String, ACPI_TYPE_METHOD, ArgCount, 0); } break; #endif case AML_STORE_OP: ChildOp = Op->Common.Value.Arg; if ((ChildOp->Common.AmlOpcode == AML_INT_NAMEPATH_OP) && !ChildOp->Common.Node) { NextOp = Op->Common.Next; if (!NextOp) { /* This NamePath has no args, assume it is an integer */ AcpiDmAddOpToExternalList (ChildOp, ChildOp->Common.Value.String, ACPI_TYPE_INTEGER, 0, 0); return (AE_OK); } ArgCount = AcpiDmInspectPossibleArgs (2, 1, NextOp); if (ArgCount <= 1) { /* One Arg means this is just a Store(Name,Target) */ AcpiDmAddOpToExternalList (ChildOp, ChildOp->Common.Value.String, ACPI_TYPE_INTEGER, ArgCount, 0); return (AE_OK); } AcpiDmAddOpToExternalList (ChildOp, ChildOp->Common.Value.String, ACPI_TYPE_METHOD, ArgCount, 0); } break; case AML_INT_NAMEPATH_OP: /* Must examine parent to see if this namepath is an argument */ ParentOp = Op->Common.Parent; OpInfo = AcpiPsGetOpcodeInfo (ParentOp->Common.AmlOpcode); if ((OpInfo->Class != AML_CLASS_EXECUTE) && (OpInfo->Class != AML_CLASS_CREATE) && (OpInfo->ObjectType != ACPI_TYPE_LOCAL_ALIAS) && (ParentOp->Common.AmlOpcode != AML_INT_METHODCALL_OP) && !Op->Common.Node) { ArgCount = AcpiDmInspectPossibleArgs (0, 0, Op); /* * Check if namepath is a predicate for if/while or lone parameter to * a return. */ if (ArgCount == 0) { if (((ParentOp->Common.AmlOpcode == AML_IF_OP) || (ParentOp->Common.AmlOpcode == AML_WHILE_OP) || (ParentOp->Common.AmlOpcode == AML_RETURN_OP)) && /* And namepath is the first argument */ (ParentOp->Common.Value.Arg == Op)) { AcpiDmAddOpToExternalList (Op, Op->Common.Value.String, ACPI_TYPE_INTEGER, 0, 0); break; } } /* * This is a standalone namestring (not a parameter to another * operator) - it *must* be a method invocation, nothing else is * grammatically possible. */ AcpiDmAddOpToExternalList (Op, Op->Common.Value.String, ACPI_TYPE_METHOD, ArgCount, 0); } break; default: break; } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDmLoadDescendingOp * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Descending handler for namespace control method object load * ******************************************************************************/ static ACPI_STATUS AcpiDmLoadDescendingOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_OP_WALK_INFO *Info = Context; const ACPI_OPCODE_INFO *OpInfo; ACPI_WALK_STATE *WalkState; ACPI_OBJECT_TYPE ObjectType; ACPI_STATUS Status; char *Path = NULL; ACPI_PARSE_OBJECT *NextOp; ACPI_NAMESPACE_NODE *Node; char FieldPath[5]; BOOLEAN PreDefined = FALSE; UINT8 PreDefineIndex = 0; WalkState = Info->WalkState; OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode); /* Only interested in operators that create new names */ if (!(OpInfo->Flags & AML_NAMED) && !(OpInfo->Flags & AML_CREATE)) { goto Exit; } /* Get the NamePath from the appropriate place */ if (OpInfo->Flags & AML_NAMED) { /* For all named operators, get the new name */ Path = Op->Named.Path; if (!Path && Op->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP) { *ACPI_CAST_PTR (UINT32, &FieldPath[0]) = Op->Named.Name; FieldPath[4] = 0; Path = FieldPath; } } else if (OpInfo->Flags & AML_CREATE) { /* New name is the last child */ NextOp = Op->Common.Value.Arg; while (NextOp->Common.Next) { NextOp = NextOp->Common.Next; } Path = NextOp->Common.Value.String; } if (!Path) { goto Exit; } /* Insert the name into the namespace */ Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType, ACPI_IMODE_LOAD_PASS2, ACPI_NS_DONT_OPEN_SCOPE, WalkState, &Node); Op->Common.Node = Node; if (ACPI_SUCCESS (Status)) { /* Check if it's a predefined node */ while (AcpiGbl_PreDefinedNames[PreDefineIndex].Name) { if (ACPI_COMPARE_NAMESEG (Node->Name.Ascii, AcpiGbl_PreDefinedNames[PreDefineIndex].Name)) { PreDefined = TRUE; break; } PreDefineIndex++; } /* * Set node owner id if it satisfies all the following conditions: * 1) Not a predefined node, _SB_ etc * 2) Not the root node * 3) Not a node created by Scope */ if (!PreDefined && (Node != AcpiGbl_RootNode) && (Op->Common.AmlOpcode != AML_SCOPE_OP)) { Node->OwnerId = WalkState->OwnerId; } } Exit: if (AcpiNsOpensScope (ObjectType)) { if (Op->Common.Node) { Status = AcpiDsScopeStackPush (Op->Common.Node, ObjectType, WalkState); if (ACPI_FAILURE (Status)) { return (Status); } } } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDmXrefDescendingOp * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Descending handler for namespace cross reference * ******************************************************************************/ static ACPI_STATUS AcpiDmXrefDescendingOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_OP_WALK_INFO *Info = Context; const ACPI_OPCODE_INFO *OpInfo; ACPI_WALK_STATE *WalkState; ACPI_OBJECT_TYPE ObjectType; ACPI_OBJECT_TYPE ObjectType2; ACPI_STATUS Status; char *Path = NULL; ACPI_PARSE_OBJECT *NextOp; ACPI_NAMESPACE_NODE *Node; ACPI_OPERAND_OBJECT *Object; UINT32 ParamCount = 0; char *Pathname; UINT16 Flags = 0; WalkState = Info->WalkState; OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode); if ((!(OpInfo->Flags & AML_NAMED)) && (!(OpInfo->Flags & AML_CREATE)) && (Op->Common.AmlOpcode != AML_INT_NAMEPATH_OP) && (Op->Common.AmlOpcode != AML_NOTIFY_OP)) { goto Exit; } /* Get the NamePath from the appropriate place */ if (OpInfo->Flags & AML_NAMED) { /* * Only these two operators (Alias, Scope) refer to an existing * name, it is the first argument */ if (Op->Common.AmlOpcode == AML_ALIAS_OP) { ObjectType = ACPI_TYPE_ANY; NextOp = Op->Common.Value.Arg; NextOp = NextOp->Common.Value.Arg; if (NextOp->Common.AmlOpcode == AML_INT_NAMEPATH_OP) { Path = NextOp->Common.Value.String; } } else if (Op->Common.AmlOpcode == AML_SCOPE_OP || Op->Common.AmlOpcode == AML_EXTERNAL_OP) { Path = Op->Named.Path; } } else if (OpInfo->Flags & AML_CREATE) { /* Referenced Buffer Name is the first child */ ObjectType = ACPI_TYPE_BUFFER; /* Change from TYPE_BUFFER_FIELD */ NextOp = Op->Common.Value.Arg; if (NextOp->Common.AmlOpcode == AML_INT_NAMEPATH_OP) { Path = NextOp->Common.Value.String; } } else if (Op->Common.AmlOpcode == AML_NOTIFY_OP) { Path = Op->Common.Value.Arg->Asl.Value.String; } else { Path = Op->Common.Value.String; } if (!Path) { goto Exit; } /* * Lookup the name in the namespace. Name must exist at this point, or it * is an invalid reference. * * The namespace is also used as a lookup table for references to resource * descriptors and the fields within them. */ Node = NULL; Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, WalkState, &Node); if (ACPI_SUCCESS (Status) && (Node->Flags & ANOBJ_IS_EXTERNAL)) { /* Node was created by an External() statement */ Status = AE_NOT_FOUND; } if (ACPI_FAILURE (Status)) { if (Status == AE_NOT_FOUND) { /* * Add this symbol as an external declaration, except if the * parent is a CondRefOf operator. For this operator, we do not * need an external, nor do we want one, since this can cause * disassembly problems if the symbol is actually a control * method. */ if (!(Op->Asl.Parent && (Op->Asl.Parent->Asl.AmlOpcode == AML_CONDITIONAL_REF_OF_OP))) { if (Node) { AcpiDmAddNodeToExternalList (Node, (UINT8) ObjectType, 7, Flags); } else { AcpiDmAddOpToExternalList (Op, Path, (UINT8) ObjectType, 7, Flags); } } } } /* * Found the node, but check if it came from an external table. * Add it to external list. Note: Node->OwnerId == 0 indicates * one of the built-in ACPI Names (_OS_ etc.) which can safely * be ignored. */ else if (Node->OwnerId && (WalkState->OwnerId != Node->OwnerId)) { ObjectType2 = ObjectType; Object = AcpiNsGetAttachedObject (Node); if (Object) { ObjectType2 = Object->Common.Type; if (ObjectType2 == ACPI_TYPE_METHOD) { ParamCount = Object->Method.ParamCount; } } Pathname = AcpiNsGetExternalPathname (Node); if (!Pathname) { return (AE_NO_MEMORY); } AcpiDmAddNodeToExternalList (Node, (UINT8) ObjectType2, ParamCount, ACPI_EXT_RESOLVED_REFERENCE); ACPI_FREE (Pathname); Op->Common.Node = Node; } else { Op->Common.Node = Node; } Exit: /* Open new scope if necessary */ if (AcpiNsOpensScope (ObjectType)) { if (Op->Common.Node) { Status = AcpiDsScopeStackPush (Op->Common.Node, ObjectType, WalkState); if (ACPI_FAILURE (Status)) { return (Status); } } } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDmCommonDescendingOp * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: ACPI_STATUS * * DESCRIPTION: Perform parse tree preprocessing before main disassembly walk. * ******************************************************************************/ static ACPI_STATUS AcpiDmCommonDescendingOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_STATUS Status; /* Resource descriptor conversion */ Status = AcpiDmProcessResourceDescriptors (Op, Level, Context); if (ACPI_FAILURE (Status)) { return (Status); } /* Switch/Case conversion */ Status = AcpiDmProcessSwitch (Op); return (Status); } /******************************************************************************* * * FUNCTION: AcpiDmProcessResourceDescriptors * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: ACPI_STATUS * * DESCRIPTION: Convert fixed-offset references to resource descriptors to * symbolic references. Should only be called after namespace has * been cross referenced. * ******************************************************************************/ static ACPI_STATUS AcpiDmProcessResourceDescriptors ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_OP_WALK_INFO *Info = Context; const ACPI_OPCODE_INFO *OpInfo; ACPI_WALK_STATE *WalkState; ACPI_OBJECT_TYPE ObjectType; ACPI_STATUS Status; WalkState = Info->WalkState; OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); /* Open new scope if necessary */ ObjectType = OpInfo->ObjectType; if (AcpiNsOpensScope (ObjectType)) { if (Op->Common.Node) { Status = AcpiDsScopeStackPush (Op->Common.Node, ObjectType, WalkState); if (ACPI_FAILURE (Status)) { return (Status); } } } /* * Check if this operator contains a reference to a resource descriptor. * If so, convert the reference into a symbolic reference. */ AcpiDmCheckResourceReference (Op, WalkState); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDmCommonAscendingOp * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: None * * DESCRIPTION: Ascending handler for combined parse/namespace walks. Closes * scope if necessary. * ******************************************************************************/ static ACPI_STATUS AcpiDmCommonAscendingOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_OP_WALK_INFO *Info = Context; ACPI_OBJECT_TYPE ObjectType; /* Close scope if necessary */ ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode); if (AcpiNsOpensScope (ObjectType)) { (void) AcpiDsScopeStackPop (Info->WalkState); } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDmInspectPossibleArgs * * PARAMETERS: CurrentOpArgCount - Which arg of the current op was the * possible method invocation found * TargetCount - Number of targets (0,1,2) for this op * Op - Parse op * * RETURN: Status * * DESCRIPTION: Examine following args and next ops for possible arguments * for an unrecognized method invocation. * ******************************************************************************/ static UINT32 AcpiDmInspectPossibleArgs ( UINT32 CurrentOpArgCount, UINT32 TargetCount, ACPI_PARSE_OBJECT *Op) { const ACPI_OPCODE_INFO *OpInfo; UINT32 i; UINT32 ArgumentCount = 0; ACPI_PARSE_OBJECT *NextOp; ACPI_PARSE_OBJECT *ExecuteOp; if (!Op) { return (0); } /* Lookahead for the maximum number of possible arguments */ NextOp = Op->Common.Next; for (i = 0; (i < ACPI_METHOD_NUM_ARGS) && NextOp; i++) { OpInfo = AcpiPsGetOpcodeInfo (NextOp->Common.AmlOpcode); /* Any one of these operators is "very probably" not a method arg */ if ((NextOp->Common.AmlOpcode == AML_STORE_OP) || (NextOp->Common.AmlOpcode == AML_NOTIFY_OP) || (OpInfo->Class == AML_CLASS_CONTROL) || (OpInfo->Class == AML_CLASS_CREATE) || (OpInfo->Class == AML_CLASS_NAMED_OBJECT)) { break; } if (OpInfo->Class == AML_CLASS_EXECUTE) { /* Probable that this is method arg if there is no target */ ExecuteOp = NextOp->Common.Value.Arg; while (ExecuteOp) { if ((ExecuteOp->Common.AmlOpcode == AML_INT_NAMEPATH_OP) && (ExecuteOp->Common.Value.Arg == NULL)) { /* No target, could be a method arg */ break; } if (NextOp->Common.AmlOpcode == AML_REF_OF_OP) { break; } ExecuteOp = ExecuteOp->Common.Next; } if (!ExecuteOp) { /* Has a target, not method arg */ return (ArgumentCount); } } ArgumentCount++; NextOp = NextOp->Common.Next; } return (ArgumentCount); } src/acpica/source/common/ahids.c000066400000000000000000000420031465205512700171170ustar00rootroot00000000000000/****************************************************************************** * * Module Name: ahids - Table of ACPI/PNP _HID/_CID values * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("ahids") /* * ACPI/PNP Device IDs with description strings */ const AH_DEVICE_ID AslDeviceIds[] = { {"10EC5640", "Realtek I2S Audio Codec"}, {"80860F09", "Intel PWM Controller"}, {"80860F0A", "Intel Atom UART Controller"}, {"80860F0E", "Intel SPI Controller"}, {"80860F14", "Intel Baytrail SDIO/MMC Host Controller"}, {"80860F28", "Intel SST Audio DSP"}, {"80860F41", "Intel Baytrail I2C Host Controller"}, {"ACPI0001", "SMBus 1.0 Host Controller"}, {"ACPI0002", "Smart Battery Subsystem"}, {"ACPI0003", "Power Source Device"}, {"ACPI0004", "Module Device"}, {"ACPI0005", "SMBus 2.0 Host Controller"}, {"ACPI0006", "GPE Block Device"}, {"ACPI0007", "Processor Device"}, {"ACPI0008", "Ambient Light Sensor Device"}, {"ACPI0009", "I/O xAPIC Device"}, {"ACPI000A", "I/O APIC Device"}, {"ACPI000B", "I/O SAPIC Device"}, {"ACPI000C", "Processor Aggregator Device"}, {"ACPI000D", "Power Meter Device"}, {"ACPI000E", "Time and Alarm Device"}, {"ACPI000F", "User Presence Detection Device"}, {"ACPI0010", "Processor Container Device"}, {"ACPI0011", "Generic Buttons Device"}, {"ACPI0012", "NVDIMM Root Device"}, {"ACPI0013", "Generic Event Device"}, {"ACPI0014", "Wireless Power Calibration Device"}, {"ACPI0015", "USB4 host interface device"}, {"ACPI0016", "Compute Express Link Host Bridge"}, {"ADMA0F28", "Intel Audio DMA"}, {"AMCR0F28", "Intel Audio Machine Driver"}, {"ATK4001", "Asus Radio Control Button"}, {"ATML1000", "Atmel Touchscreen Controller"}, {"AUTH2750", "AuthenTec AES2750"}, {"BCM2E39", "Broadcom BT Serial Bus Driver over UART Bus Enumerator"}, {"BCM4752E", "Broadcom GPS Controller"}, {"BMG0160", "Bosch Gyro Sensor"}, {"CPLM3218", "Capella Micro CM3218x Ambient Light Sensor"}, {"DELLABCE", "Dell Airplane Mode Switch Driver"}, {"DLAC3002", "Qualcomm Atheros Bluetooth UART Transport"}, {"FTTH5506", "FocalTech 5506 Touch Controller"}, {"HAD0F28", "Intel HDMI Audio Driver"}, {"INBC0000", "GPIO Expander"}, {"INT0002", "Virtual GPIO Controller"}, {"INT0800", "Intel 82802 Firmware Hub Device"}, {"INT3394", "ACPI System Fan"}, {"INT3396", "Standard Power Management Controller"}, {"INT33A0", "Intel Smart Connect Technology Device"}, {"INT33A1", "Intel Power Engine"}, {"INT33BB", "Intel Baytrail SD Host Controller"}, {"INT33BD", "Intel Baytrail Mailbox Device"}, {"INT33BE", "Camera Sensor OV5693"}, {"INT33C0", "Intel Serial I/O SPI Host Controller"}, {"INT33C1", "Intel Serial I/O SPI Host Controller"}, {"INT33C2", "Intel Serial I/O I2C Host Controller"}, {"INT33C3", "Intel Serial I/O I2C Host Controller"}, {"INT33C4", "Intel Serial I/O UART Host Controller"}, {"INT33C5", "Intel Serial I/O UART Host Controller"}, {"INT33C6", "Intel SD Host Controller"}, {"INT33C7", "Intel Serial I/O GPIO Host Controller"}, {"INT33C8", "Intel Smart Sound Technology Host Controller"}, {"INT33C9", "Wolfson Microelectronics Audio WM5102"}, {"INT33CA", "Intel SPB Peripheral"}, {"INT33CB", "Intel Smart Sound Technology Audio Codec"}, {"INT33D1", "Intel GPIO Buttons"}, {"INT33D2", "Intel GPIO Buttons"}, {"INT33D3", "Intel GPIO Buttons"}, {"INT33D4", "Intel GPIO Buttons"}, {"INT33D6", "Intel Virtual Buttons Device"}, {"INT33F0", "Camera Sensor MT9M114"}, {"INT33F4", "XPOWER PMIC Controller"}, {"INT33F5", "TI PMIC Controller"}, {"INT33FB", "MIPI-CSI Camera Sensor OV2722"}, {"INT33FC", "Intel Baytrail GPIO Controller"}, {"INT33FD", "Intel Baytrail Power Management IC"}, {"INT33FE", "XPOWER Battery Device"}, {"INT3400", "Intel Dynamic Power Performance Management"}, {"INT3401", "Intel Extended Thermal Model CPU"}, {"INT3403", "DPTF Temperature Sensor"}, {"INT3406", "Intel Dynamic Platform & Thermal Framework Display Participant"}, {"INT3407", "DPTF Platform Power Meter"}, {"INT340E", "Motherboard Resources"}, {"INT3420", "Intel Bluetooth RF Kill"}, {"INT3F0D", "ACPI Motherboard Resources"}, {"INTCF1A", "Sony IMX175 Camera Sensor"}, {"INTCFD9", "Intel Baytrail SOC GPIO Controller"}, {"INTL9C60", "Intel Baytrail SOC DMA Controller"}, {"INVN6500", "InvenSense MPU-6500 Six Axis Gyroscope and Accelerometer"}, {"LNXCPU", "Linux Logical CPU"}, {"LNXPOWER", "ACPI Power Resource (power gating)"}, {"LNXPWRBN", "System Power Button"}, {"LNXSYBUS", "System Bus"}, {"LNXSYSTM", "ACPI Root Node"}, {"LNXTHERM", "ACPI Thermal Zone"}, {"LNXVIDEO", "ACPI Video Controller"}, {"MAX17047", "Fuel Gauge Controller"}, {"MSFT0101", "TPM 2.0 Security Device"}, {"NXP5442", "NXP 5442 Near Field Communications Controller"}, {"NXP5472", "NXP NFC"}, {"PNP0000", "8259-compatible Programmable Interrupt Controller"}, {"PNP0001", "EISA Interrupt Controller"}, {"PNP0002", "MCA Interrupt Controller"}, {"PNP0003", "IO-APIC Interrupt Controller"}, {"PNP0100", "PC-class System Timer"}, {"PNP0103", "HPET System Timer"}, {"PNP0200", "PC-class DMA Controller"}, {"PNP0300", "IBM PC/XT Keyboard Controller (83 key)"}, {"PNP0301", "IBM PC/XT Keyboard Controller (86 key)"}, {"PNP0302", "IBM PC/XT Keyboard Controller (84 key)"}, {"PNP0303", "IBM Enhanced Keyboard (101/102-key, PS/2 Mouse)"}, {"PNP0400", "Standard LPT Parallel Port"}, {"PNP0401", "ECP Parallel Port"}, {"PNP0500", "Standard PC COM Serial Port"}, {"PNP0501", "16550A-compatible COM Serial Port"}, {"PNP0510", "Generic IRDA-compatible Device"}, {"PNP0800", "Microsoft Sound System Compatible Device"}, {"PNP0A03", "PCI Bus"}, {"PNP0A05", "Generic Container Device"}, {"PNP0A06", "Generic Container Device"}, {"PNP0A08", "PCI Express Bus"}, {"PNP0B00", "AT Real-Time Clock"}, {"PNP0B01", "Intel PIIX4-compatible RTC/CMOS Device"}, {"PNP0B02", "Dallas Semiconductor-compatible RTC/CMOS Device"}, {"PNP0C01", "System Board"}, {"PNP0C02", "PNP Motherboard Resources"}, {"PNP0C04", "x87-compatible Floating Point Processing Unit"}, {"PNP0C08", "ACPI Core Hardware"}, {"PNP0C09", "Embedded Controller Device"}, {"PNP0C0A", "Control Method Battery"}, {"PNP0C0B", "Fan (Thermal Solution)"}, {"PNP0C0C", "Power Button Device"}, {"PNP0C0D", "Lid Device"}, {"PNP0C0E", "Sleep Button Device"}, {"PNP0C0F", "PCI Interrupt Link Device"}, {"PNP0C10", "System Indicator Device"}, {"PNP0C11", "Thermal Zone"}, {"PNP0C12", "Device Bay Controller"}, {"PNP0C14", "Windows Management Instrumentation Device"}, {"PNP0C15", "Docking Station"}, {"PNP0C33", "Error Device"}, {"PNP0C40", "Standard Button Controller"}, {"PNP0C50", "HID Protocol Device (I2C bus)"}, {"PNP0C60", "Display Sensor Device"}, {"PNP0C70", "Dock Sensor Device"}, {"PNP0C80", "Memory Device"}, {"PNP0D10", "XHCI USB Controller with debug"}, {"PNP0D15", "XHCI USB Controller without debug"}, {"PNP0D20", "EHCI USB Controller without debug"}, {"PNP0D25", "EHCI USB Controller with debug"}, {"PNP0D40", "SDA Standard Compliant SD Host Controller"}, {"PNP0D80", "Windows-compatible System Power Management Controller"}, {"PNP0F03", "Microsoft PS/2-style Mouse"}, {"PNP0F13", "PS/2 Mouse"}, {"RTL8723", "Realtek Wireless Controller"}, {"SMB0349", "Charger"}, {"SMO91D0", "Sensor Hub"}, {"SMSC3750", "SMSC 3750 USB MUX"}, {"SSPX0000", "Intel SSP Device"}, {"TBQ24296", "Charger"}, {NULL, NULL} }; /******************************************************************************* * * FUNCTION: AcpiAhMatchHardwareId * * PARAMETERS: HardwareId - String representation of an _HID or _CID * * RETURN: ID info struct. NULL if HardwareId is not found * * DESCRIPTION: Lookup an _HID/_CID in the device ID table * ******************************************************************************/ const AH_DEVICE_ID * AcpiAhMatchHardwareId ( char *HardwareId) { const AH_DEVICE_ID *Info; for (Info = AslDeviceIds; Info->Name; Info++) { if (!strcmp (HardwareId, Info->Name)) { return (Info); } } return (NULL); } src/acpica/source/common/ahpredef.c000066400000000000000000001155771465205512700176260ustar00rootroot00000000000000/****************************************************************************** * * Module Name: ahpredef - Table of all known ACPI predefined names * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("ahpredef") /* * 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, x=0-9", "Returns the active cooling policy threshold values"), AH_PREDEF ("_ADR", "Address", "Returns address of a device on parent bus, and resource field"), 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, x=0-9", "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 ("_BPC", "Battery Power Characteristics", "Returns static values used to configure power threshold support in the platform firmware"), AH_PREDEF ("_BPS", "Battery Power State", "Returns the power delivery capabilities of the battery at the present time"), AH_PREDEF ("_BPT", "Battery Power Threshold", "Set a relative battery peak power capability change threshold"), 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 ("_BTH", "Battery Throttle Limit", "Thermal limit for charging and discharging"), 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 ("_CBR", "CXL Host Bridge Register Info", "Get the memory location of CXL Host Bridge Registers"), AH_PREDEF ("_CCA", "Cache Coherency Attribute", "Returns a device's support level for cache coherency"), 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 ("_CR3", "Warm/Standby Temperature", "Temperature for a fast low power state"), 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 device current resources for DMA transactions, and resource field"), 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 ("_DSC", "Deepest State for Configuration", "Returns the deepest D-state of the device to the OSPM"), 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 ("_DSD", "Device-Specific Data", "Returns a list of device property information"), 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, xx=0x00-0xFF", "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, x=0-9", "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 ("_FIT", "Firmware Interface Table", "Returns a list of NFIT structures"), 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 ("_FUN", "Function Number", "Resource descriptor field"), 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 ("_HMA", "Heterogeneous Memory Attributes", "Returns a list of HMAT structures."), 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, xx=0x00-0xFF", "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 ("_LPD", "Low Power Dependencies", "Returns a list of dependencies for low power idle entry"), AH_PREDEF ("_LPI", "Low Power Idle States", "Returns a list of supported low power idle states"), AH_PREDEF ("_LSI", "Label Storage Information", "Returns information about the Label Storage Area associated with the NVDIMM object."), AH_PREDEF ("_LSR", "Label Storage Read", "Returns label data from the Label Storage Area of the NVDIMM object."), AH_PREDEF ("_LSW", "Label Storage Write", "Writes label data in to the Label Storage Area of the NVDIMM object."), 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 ("_MTL", "Minimum Throttle Limit", "Returns the minimum throttle limit for a thermal zone"), AH_PREDEF ("_MTP", "Memory Type", "Resource Descriptor field"), AH_PREDEF ("_NBS", "NVDIMM Boot Status", "Returns information about NVDIMM device’s status at boot time"), AH_PREDEF ("_NCH", "NVDIMM Current Health Information", "Returns current health information of the NVDIMM device"), AH_PREDEF ("_NIC", "NVDIMM Health Error Injection Capabilities", "Returns health error injection capabilities that are supported by the platform"), AH_PREDEF ("_NIG", "NVDIMM Inject Health Error Status","Returns currently active health errors and their error attributes that are injected by _NIH"), AH_PREDEF ("_NIH", "NVDIMM Inject/Clear Health Errors", "Returns the status of injecting or clearing Health Errors"), 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 Location of Device", "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 Capabilities", "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 ("_PRR", "Power Resource for Reset", "Execute a reset on a device"), 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, xx=0x00-0xFF", "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 ("_RDI", "Resource Dependencies for Idle", "Returns a list of dependencies for idle states"), AH_PREDEF ("_REG", "Region Availability", "Inform AML code of an operation region availability change"), AH_PREDEF ("_REV", "Supported Integer Width", "Returns the supported integer width (<= 1: 32 bits only, >=2: both 32 and 64 bits"), 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 ("_RST", "Device Reset", "Executes a reset on a device"), 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 ("_SBA", "SM Bus Alert information", "Returns info on an SMBus alert"), AH_PREDEF ("_SBI", "SM Bus General information", "Returns info on an SMBus segment"), AH_PREDEF ("_SBR", "SM Bus Data read", "Reads Byte, Word, or Block data from an SMBus segment"), AH_PREDEF ("_SBT", "SM Bus Data transfer", "Performs data transfer to/from an SMBus segment. Implements ProcessCall protocol"), AH_PREDEF ("_SBW", "SM Bus Data write", "Writes Byte, Word, or Block data to an SMBus segment"), 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", "Shareable", "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, x=0-9, A-Z", "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 ("_TFP", "Thermal Fast Sampling Period", "Returns the sampling period for passive cooling"), 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 ("_TSN", "Thermal Sensor Device", "Returns a reference to a thermal sensor"), 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 ("_VAL", "Pin Configuration Value", "Resource Descriptor field"), AH_PREDEF ("_VEN", "Vendor Data", "Resource Descriptor field"), AH_PREDEF ("_VPO", "Video Post Options", "Returns the implemented video post options"), AH_PREDEF ("_Wxx", "Wake Event, xx=0x00-0xFF", "Method executed as a result of a wake event"), AH_PREDEF ("_WAK", "Wake", "Inform AML that the system has just awakened"), AH_PREDEF ("_WPC", "Wireless Power Calibration", "Calibrate power and notify wireless device"), AH_PREDEF ("_WPP", "Wireless Power Polling", "Get recommended polling interval"), AH_PREDEF (NULL, NULL, NULL) }; /******************************************************************************* * * FUNCTION: AcpiAhMatchPredefinedName * * PARAMETERS: Nameseg - Predefined name string * * RETURN: ID info struct. NULL if Nameseg not found * * DESCRIPTION: Lookup a predefined name. * ******************************************************************************/ const AH_PREDEFINED_NAME * AcpiAhMatchPredefinedName ( char *Nameseg) { const AH_PREDEFINED_NAME *Info; /* Nameseg must start with an underscore */ if (*Nameseg != '_') { return (NULL); } /* Search for a match in the predefined name table */ for (Info = AslPredefinedInfo; Info->Name; Info++) { if (ACPI_COMPARE_NAMESEG (Nameseg, Info->Name)) { return (Info); } } return (NULL); } src/acpica/source/common/ahtable.c000066400000000000000000000327461465205512700174440ustar00rootroot00000000000000/****************************************************************************** * * Module Name: ahtable - Table of known ACPI tables with descriptions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" /* Local prototypes */ const AH_TABLE * AcpiAhGetTableInfo ( char *Signature); extern const AH_TABLE AcpiGbl_SupportedTables[]; /******************************************************************************* * * FUNCTION: AcpiAhGetTableInfo * * PARAMETERS: Signature - ACPI signature (4 chars) to match * * RETURN: Pointer to a valid AH_TABLE. Null if no match found. * * DESCRIPTION: Find a match in the "help" table of supported ACPI tables * ******************************************************************************/ const AH_TABLE * AcpiAhGetTableInfo ( char *Signature) { const AH_TABLE *Info; for (Info = AcpiGbl_SupportedTables; Info->Signature; Info++) { if (ACPI_COMPARE_NAMESEG (Signature, Info->Signature)) { return (Info); } } return (NULL); } /* * Note: Any tables added here should be duplicated within AcpiDmTableData * in the file common/dmtable.c */ const AH_TABLE AcpiGbl_SupportedTables[] = { {ACPI_SIG_AEST, "Arm Error Source Table"}, {ACPI_SIG_AGDI, "Arm Generic Diagnostic Dump and Reset Device Interface Table"}, {ACPI_SIG_ASF, "Alert Standard Format Table"}, {ACPI_SIG_ASPT, "AMD Secure Processor Table"}, {ACPI_SIG_BDAT, "BIOS Data ACPI Table"}, {ACPI_SIG_BERT, "Boot Error Record Table"}, {ACPI_SIG_BGRT, "Boot Graphics Resource Table"}, {ACPI_SIG_BOOT, "Simple Boot Flag Table"}, {ACPI_SIG_CCEL, "CC-Event Log Table"}, {ACPI_SIG_CDAT, "Coherent Device Attribute Table"}, {ACPI_SIG_CEDT, "CXL Early Discovery Table"}, {ACPI_SIG_CPEP, "Corrected Platform Error Polling Table"}, {ACPI_SIG_CSRT, "Core System Resource Table"}, {ACPI_SIG_DBG2, "Debug Port Table type 2"}, {ACPI_SIG_DBGP, "Debug Port Table"}, {ACPI_SIG_DMAR, "DMA Remapping Table"}, {ACPI_SIG_DRTM, "Dynamic Root of Trust for Measurement Table"}, {ACPI_SIG_DSDT, "Differentiated System Description Table (AML table)"}, {ACPI_SIG_ECDT, "Embedded Controller Boot Resources Table"}, {ACPI_SIG_EINJ, "Error Injection Table"}, {ACPI_SIG_ERST, "Error Record Serialization Table"}, {ACPI_SIG_FACS, "Firmware ACPI Control Structure"}, {ACPI_SIG_FADT, "Fixed ACPI Description Table (FADT)"}, {ACPI_SIG_FPDT, "Firmware Performance Data Table"}, {ACPI_SIG_GTDT, "Generic Timer Description Table"}, {ACPI_SIG_HEST, "Hardware Error Source Table"}, {ACPI_SIG_HMAT, "Heterogeneous Memory Attributes Table"}, {ACPI_SIG_HPET, "High Precision Event Timer Table"}, {ACPI_SIG_IORT, "IO Remapping Table"}, {ACPI_SIG_IVRS, "I/O Virtualization Reporting Structure"}, {ACPI_SIG_LPIT, "Low Power Idle Table"}, {ACPI_SIG_MADT, "Multiple APIC Description Table (MADT)"}, {ACPI_SIG_MCFG, "Memory Mapped Configuration Table"}, {ACPI_SIG_MCHI, "Management Controller Host Interface Table"}, {ACPI_SIG_MPAM, "Memory System Resource Partitioning and Monitoring Table"}, {ACPI_SIG_MPST, "Memory Power State Table"}, {ACPI_SIG_MSCT, "Maximum System Characteristics Table"}, {ACPI_SIG_MSDM, "Microsoft Data Management Table"}, {ACPI_SIG_NFIT, "NVDIMM Firmware Interface Table"}, {ACPI_SIG_NHLT, "Non HD Audio Link Table"}, {ACPI_SIG_PCCT, "Platform Communications Channel Table"}, {ACPI_SIG_PDTT, "Platform Debug Trigger Table"}, {ACPI_SIG_PHAT, "Platform Health Assessment Table"}, {ACPI_SIG_PMTT, "Platform Memory Topology Table"}, {ACPI_SIG_PPTT, "Processor Properties Topology Table"}, {ACPI_SIG_PRMT, "Platform Runtime Mechanism Table"}, {ACPI_SIG_RASF, "RAS Features Table"}, {ACPI_SIG_RAS2, "RAS2 Features Table"}, {ACPI_SIG_RHCT, "RISC-V Hart Capabilities Table"}, {ACPI_SIG_RGRT, "Regulatory Graphics Resource Table"}, {ACPI_RSDP_NAME,"Root System Description Pointer"}, {ACPI_SIG_RSDT, "Root System Description Table"}, {ACPI_SIG_S3PT, "S3 Performance Table"}, {ACPI_SIG_SBST, "Smart Battery Specification Table"}, {ACPI_SIG_SDEI, "Software Delegated Exception Interface Table"}, {ACPI_SIG_SDEV, "Secure Devices Table"}, {ACPI_SIG_SLIC, "Software Licensing Description Table"}, {ACPI_SIG_SLIT, "System Locality Information Table"}, {ACPI_SIG_SPCR, "Serial Port Console Redirection Table"}, {ACPI_SIG_SPMI, "Server Platform Management Interface Table"}, {ACPI_SIG_SRAT, "System Resource Affinity Table"}, {ACPI_SIG_SSDT, "Secondary System Description Table (AML table)"}, {ACPI_SIG_STAO, "Status Override Table"}, {ACPI_SIG_SVKL, "Storage Volume Key Location Table"}, {ACPI_SIG_TCPA, "Trusted Computing Platform Alliance Table"}, {ACPI_SIG_TDEL, "TD-Event Log Table"}, {ACPI_SIG_TPM2, "Trusted Platform Module hardware interface Table"}, {ACPI_SIG_UEFI, "UEFI Boot Optimization Table"}, {ACPI_SIG_VIOT, "Virtual I/O Translation Table"}, {ACPI_SIG_WAET, "Windows ACPI Emulated Devices Table"}, {ACPI_SIG_WDAT, "Watchdog Action Table"}, {ACPI_SIG_WDDT, "Watchdog Description Table"}, {ACPI_SIG_WDRT, "Watchdog Resource Table"}, {ACPI_SIG_WPBT, "Windows Platform Binary Table"}, {ACPI_SIG_WSMT, "Windows SMM Security Mitigations Table"}, {ACPI_SIG_XENV, "Xen Environment Table"}, {ACPI_SIG_XSDT, "Extended System Description Table"}, {NULL, NULL} }; src/acpica/source/common/ahuuids.c000066400000000000000000000300071465205512700174720ustar00rootroot00000000000000/****************************************************************************** * * Module Name: ahuuids - Table of known ACPI-related UUIDs * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acuuid.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("ahuuids") /* * Table of "known" (ACPI-related) UUIDs */ const AH_UUID Gbl_AcpiUuids[] = { {"[Controllers]", NULL}, {"GPIO Controller", UUID_GPIO_CONTROLLER}, {"USB Controller", UUID_USB_CONTROLLER}, {"SATA Controller", UUID_SATA_CONTROLLER}, {"[Devices]", NULL}, {"PCI Host Bridge Device", UUID_PCI_HOST_BRIDGE}, {"HID I2C Device", UUID_I2C_DEVICE}, {"Power Button Device", UUID_POWER_BUTTON}, {"Memory Device", UUID_MEMORY_DEVICE}, {"Generic Buttons Device", UUID_GENERIC_BUTTONS_DEVICE}, {"NVDIMM Root Device", UUID_NVDIMM_ROOT_DEVICE}, {"Control Method Battery", UUID_CONTROL_METHOD_BATTERY}, {"[Interfaces]", NULL}, {"Device Labeling Interface", UUID_DEVICE_LABELING}, {"Physical Presence Interface", UUID_PHYSICAL_PRESENCE}, {"[Non-volatile DIMM and NFIT table]", NULL}, {"NVDIMM Device", UUID_NFIT_DIMM}, {"Volatile Memory Region", UUID_VOLATILE_MEMORY}, {"Persistent Memory Region", UUID_PERSISTENT_MEMORY}, {"NVDIMM Control Region", UUID_CONTROL_REGION}, {"NVDIMM Data Region", UUID_DATA_REGION}, {"Volatile Virtual Disk", UUID_VOLATILE_VIRTUAL_DISK}, {"Volatile Virtual CD", UUID_VOLATILE_VIRTUAL_CD}, {"Persistent Virtual Disk", UUID_PERSISTENT_VIRTUAL_DISK}, {"Persistent Virtual CD", UUID_PERSISTENT_VIRTUAL_CD}, {"Microsoft NVDIMM Command set",UUID_NFIT_DIMM_N_MSFT}, {"HP NDIMM HPE1", UUID_NFIT_DIMM_N_HPE1}, {"HP NDIMM HPE2", UUID_NFIT_DIMM_N_HPE2}, {"Virtual NVDIMM", UUID_NFIT_DIMM_N_HYPERV}, {"[Processor Properties]", NULL}, {"Cache Properties", UUID_CACHE_PROPERTIES}, {"Physical Package Property", UUID_PHYSICAL_PROPERTY}, {"[Miscellaneous]", NULL}, {"Platform-wide Capabilities", UUID_PLATFORM_CAPABILITIES}, {"Dynamic Enumeration", UUID_DYNAMIC_ENUMERATION}, {"Battery Thermal Limit", UUID_BATTERY_THERMAL_LIMIT}, {"Thermal Extensions", UUID_THERMAL_EXTENSIONS}, {"Device Properties for _DSD", UUID_DEVICE_PROPERTIES}, {"Device Graphs for _DSD", UUID_DEVICE_GRAPHS}, {"Hierarchical Data Extension", UUID_HIERARCHICAL_DATA_EXTENSION}, {"ARM Coresight Graph", UUID_CORESIGHT_GRAPH}, {"USB4 Capabilities", UUID_USB4_CAPABILITIES}, {"First Function ID for _DSM", UUID_1ST_FUNCTION_ID}, {"Second Function ID for _DSM", UUID_2ND_FUNCTION_ID}, {NULL, NULL} }; /******************************************************************************* * * FUNCTION: AcpiAhMatchUuid * * PARAMETERS: Data - Data buffer containing a UUID * * RETURN: ASCII description string for the UUID if it is found. * * DESCRIPTION: Returns a description string for "known" UUIDs, which are * are UUIDs that are related to ACPI in some way. * ******************************************************************************/ const char * AcpiAhMatchUuid ( UINT8 *Data) { const AH_UUID *Info; UINT8 UuidBuffer[UUID_BUFFER_LENGTH]; /* Walk the table of known ACPI-related UUIDs */ for (Info = Gbl_AcpiUuids; Info->Description; Info++) { /* Null string means description is a UUID class */ if (!Info->String) { continue; } AcpiUtConvertStringToUuid (Info->String, UuidBuffer); if (!memcmp (Data, UuidBuffer, UUID_BUFFER_LENGTH)) { return (Info->Description); } } return (NULL); } src/acpica/source/common/cmfsize.c000066400000000000000000000232421465205512700174730ustar00rootroot00000000000000/****************************************************************************** * * Module Name: cmfsize - Common get file size function * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acapps.h" #define _COMPONENT ACPI_TOOLS ACPI_MODULE_NAME ("cmfsize") /******************************************************************************* * * FUNCTION: CmGetFileSize * * PARAMETERS: File - Open file descriptor * * RETURN: File Size. On error, -1 (ACPI_UINT32_MAX) * * DESCRIPTION: Get the size of a file. Uses seek-to-EOF. File must be open. * Does not disturb the current file pointer. * ******************************************************************************/ UINT32 CmGetFileSize ( ACPI_FILE File) { long FileSize; long CurrentOffset; ACPI_STATUS Status; /* Save the current file pointer, seek to EOF to obtain file size */ CurrentOffset = ftell (File); if (CurrentOffset < 0) { goto OffsetError; } Status = fseek (File, 0, SEEK_END); if (ACPI_FAILURE (Status)) { goto SeekError; } FileSize = ftell (File); if (FileSize < 0) { goto OffsetError; } /* Restore original file pointer */ Status = fseek (File, CurrentOffset, SEEK_SET); if (ACPI_FAILURE (Status)) { goto SeekError; } return ((UINT32) FileSize); OffsetError: fprintf (stderr, "Could not get file offset\n"); return (ACPI_UINT32_MAX); SeekError: fprintf (stderr, "Could not set file offset\n"); return (ACPI_UINT32_MAX); } src/acpica/source/common/dmextern.c000066400000000000000000001527541465205512700176740ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dmextern - Support for External() ASL statements * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "amlcode.h" #include "acnamesp.h" #include "acdisasm.h" #include "aslcompiler.h" #include #include /* * This module is used for application-level code (iASL disassembler) only. * * It contains the code to create and emit any necessary External() ASL * statements for the module being disassembled. */ #define _COMPONENT ACPI_CA_DISASSEMBLER ACPI_MODULE_NAME ("dmextern") /* * This table maps ACPI_OBJECT_TYPEs to the corresponding ASL * ObjectTypeKeyword. Used to generate typed external declarations */ static const char *AcpiGbl_DmTypeNames[] = { /* 00 */ ", UnknownObj", /* Type ANY */ /* 01 */ ", IntObj", /* 02 */ ", StrObj", /* 03 */ ", BuffObj", /* 04 */ ", PkgObj", /* 05 */ ", FieldUnitObj", /* 06 */ ", DeviceObj", /* 07 */ ", EventObj", /* 08 */ ", MethodObj", /* 09 */ ", MutexObj", /* 10 */ ", OpRegionObj", /* 11 */ ", PowerResObj", /* 12 */ ", ProcessorObj", /* 13 */ ", ThermalZoneObj", /* 14 */ ", BuffFieldObj", /* 15 */ ", DDBHandleObj", /* 16 */ "", /* Debug object */ /* 17 */ ", FieldUnitObj", /* 18 */ ", FieldUnitObj", /* 19 */ ", FieldUnitObj" }; #define METHOD_SEPARATORS " \t,()\n" static const char *ExternalConflictMessage = " // Conflicts with a later declaration"; /* Local prototypes */ static const char * AcpiDmGetObjectTypeName ( ACPI_OBJECT_TYPE Type); static char * AcpiDmNormalizeParentPrefix ( ACPI_PARSE_OBJECT *Op, char *Path); static ACPI_STATUS AcpiDmGetExternalAndInternalPath ( ACPI_NAMESPACE_NODE *Node, char **ExternalPath, char **InternalPath); static ACPI_STATUS AcpiDmRemoveRootPrefix ( char **Path); static void AcpiDmAddPathToExternalList ( char *Path, UINT8 Type, UINT32 Value, UINT16 Flags); static ACPI_STATUS AcpiDmCreateNewExternal ( char *ExternalPath, char *InternalPath, UINT8 Type, UINT32 Value, UINT16 Flags); static void AcpiDmCheckForExternalConflict ( char *Path); static ACPI_STATUS AcpiDmResolveExternal ( char *Path, UINT8 Type, ACPI_NAMESPACE_NODE **Node); static void AcpiDmConflictingDeclaration ( char *Path); /******************************************************************************* * * FUNCTION: AcpiDmGetObjectTypeName * * PARAMETERS: Type - An ACPI_OBJECT_TYPE * * RETURN: Pointer to a string * * DESCRIPTION: Map an object type to the ASL object type string. * ******************************************************************************/ static const char * AcpiDmGetObjectTypeName ( ACPI_OBJECT_TYPE Type) { if (Type == ACPI_TYPE_LOCAL_SCOPE) { Type = ACPI_TYPE_DEVICE; } else if (Type > ACPI_TYPE_LOCAL_INDEX_FIELD) { return (""); } return (AcpiGbl_DmTypeNames[Type]); } /******************************************************************************* * * FUNCTION: AcpiDmNormalizeParentPrefix * * PARAMETERS: Op - Parse op * Path - Path with parent prefix * * RETURN: The full pathname to the object (from the namespace root) * * DESCRIPTION: Returns the full pathname of a path with parent prefix * The caller must free the fullpath returned. * ******************************************************************************/ static char * AcpiDmNormalizeParentPrefix ( ACPI_PARSE_OBJECT *Op, char *Path) { ACPI_NAMESPACE_NODE *Node; char *Fullpath; char *ParentPath; ACPI_SIZE Length; UINT32 Index = 0; if (!Op) { return (NULL); } /* Search upwards in the parse tree until we reach the next namespace node */ Op = Op->Common.Parent; while (Op) { if (Op->Common.Node) { break; } Op = Op->Common.Parent; } if (!Op) { return (NULL); } /* * Find the actual parent node for the reference: * Remove all carat prefixes from the input path. * There may be multiple parent prefixes (For example, ^^^M000) */ Node = Op->Common.Node; while (Node && (*Path == (UINT8) AML_PARENT_PREFIX)) { Node = Node->Parent; Path++; } if (!Node) { return (NULL); } /* Get the full pathname for the parent node */ ParentPath = AcpiNsGetExternalPathname (Node); if (!ParentPath) { return (NULL); } Length = (strlen (ParentPath) + strlen (Path) + 1); if (ParentPath[1]) { /* * If ParentPath is not just a simple '\', increment the length * for the required dot separator (ParentPath.Path) */ Length++; /* For External() statements, we do not want a leading '\' */ if (*ParentPath == AML_ROOT_PREFIX) { Index = 1; } } Fullpath = ACPI_ALLOCATE_ZEROED (Length); if (!Fullpath) { goto Cleanup; } /* * Concatenate parent fullpath and path. For example, * parent fullpath "\_SB_", Path "^INIT", Fullpath "\_SB_.INIT" * * Copy the parent path */ strcpy (Fullpath, &ParentPath[Index]); /* * Add dot separator * (don't need dot if parent fullpath is a single backslash) */ if (ParentPath[1]) { strcat (Fullpath, "."); } /* Copy child path (carat parent prefix(es) were skipped above) */ strcat (Fullpath, Path); Cleanup: ACPI_FREE (ParentPath); return (Fullpath); } /******************************************************************************* * * FUNCTION: AcpiDmAddToExternalFileList * * PARAMETERS: PathList - Single path or list separated by comma * * RETURN: None * * DESCRIPTION: Add external files to global list * ******************************************************************************/ ACPI_STATUS AcpiDmAddToExternalFileList ( char *Pathname) { ACPI_EXTERNAL_FILE *ExternalFile; char *LocalPathname; if (!Pathname) { return (AE_OK); } LocalPathname = ACPI_ALLOCATE (strlen (Pathname) + 1); if (!LocalPathname) { return (AE_NO_MEMORY); } ExternalFile = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EXTERNAL_FILE)); if (!ExternalFile) { ACPI_FREE (LocalPathname); return (AE_NO_MEMORY); } /* Take a copy of the file pathname */ strcpy (LocalPathname, Pathname); ExternalFile->Path = LocalPathname; if (AcpiGbl_ExternalFileList) { ExternalFile->Next = AcpiGbl_ExternalFileList; } AcpiGbl_ExternalFileList = ExternalFile; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDmClearExternalFileList * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Clear the external file list * ******************************************************************************/ void AcpiDmClearExternalFileList ( void) { ACPI_EXTERNAL_FILE *NextExternal; while (AcpiGbl_ExternalFileList) { NextExternal = AcpiGbl_ExternalFileList->Next; ACPI_FREE (AcpiGbl_ExternalFileList->Path); ACPI_FREE (AcpiGbl_ExternalFileList); AcpiGbl_ExternalFileList = NextExternal; } } /******************************************************************************* * * FUNCTION: AcpiDmGetExternalsFromFile * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Process the optional external reference file. * * Each line in the file should be of the form: * External (, MethodObj, ) * * Example: * External (_SB_.PCI0.XHC_.PS0X, MethodObj, 4) * ******************************************************************************/ void AcpiDmGetExternalsFromFile ( void) { FILE *ExternalRefFile; char *Token; char *MethodName; UINT32 ArgCount; UINT32 ImportCount = 0; if (!AslGbl_ExternalRefFilename) { return; } /* Open the file */ ExternalRefFile = fopen (AslGbl_ExternalRefFilename, "r"); if (!ExternalRefFile) { fprintf (stderr, "Could not open external reference file \"%s\"\n", AslGbl_ExternalRefFilename); AslAbort (); return; } /* Each line defines a method */ while (fgets (AslGbl_StringBuffer, ASL_STRING_BUFFER_SIZE, ExternalRefFile)) { Token = strtok (AslGbl_StringBuffer, METHOD_SEPARATORS); /* "External" */ if (!Token) { continue; } if (strcmp (Token, "External")) { continue; } MethodName = strtok (NULL, METHOD_SEPARATORS); /* Method namepath */ if (!MethodName) { continue; } Token = strtok (NULL, METHOD_SEPARATORS); /* "MethodObj" */ if (!Token) { continue; } if (strcmp (Token, "MethodObj")) { continue; } Token = strtok (NULL, METHOD_SEPARATORS); /* Arg count */ if (!Token) { continue; } /* Convert arg count string to an integer */ errno = 0; ArgCount = strtoul (Token, NULL, 0); if (errno) { fprintf (stderr, "Invalid argument count (%s)\n", Token); continue; } if (ArgCount > 7) { fprintf (stderr, "Invalid argument count (%u)\n", ArgCount); continue; } /* Add this external to the global list */ AcpiOsPrintf ("%s: Importing method external (%u arguments) %s\n", AslGbl_ExternalRefFilename, ArgCount, MethodName); AcpiDmAddPathToExternalList (MethodName, ACPI_TYPE_METHOD, ArgCount, (ACPI_EXT_RESOLVED_REFERENCE | ACPI_EXT_ORIGIN_FROM_FILE)); ImportCount++; } if (!ImportCount) { fprintf (stderr, "Did not find any external methods in reference file \"%s\"\n", AslGbl_ExternalRefFilename); } else { /* Add the external(s) to the namespace */ AcpiDmAddExternalListToNamespace (); AcpiOsPrintf ("%s: Imported %u external method definitions\n", AslGbl_ExternalRefFilename, ImportCount); } fclose (ExternalRefFile); } /******************************************************************************* * * FUNCTION: AcpiDmAddOpToExternalList * * PARAMETERS: Op - Current parser Op * Path - Internal (AML) path to the object * Type - ACPI object type to be added * Value - Arg count if adding a Method object * Flags - To be passed to the external object * * RETURN: None * * DESCRIPTION: Insert a new name into the global list of Externals which * will in turn be later emitted as an External() declaration * in the disassembled output. * * This function handles the most common case where the referenced * name is simply not found in the constructed namespace. * ******************************************************************************/ void AcpiDmAddOpToExternalList ( ACPI_PARSE_OBJECT *Op, char *Path, UINT8 Type, UINT32 Value, UINT16 Flags) { char *ExternalPath; char *InternalPath = Path; char *Temp; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (DmAddOpToExternalList); if (!Path) { return_VOID; } /* Remove a root backslash if present */ if ((*Path == AML_ROOT_PREFIX) && (Path[1])) { Path++; } /* Externalize the pathname */ Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, Path, NULL, &ExternalPath); if (ACPI_FAILURE (Status)) { return_VOID; } /* * Get the full pathname from the root if "Path" has one or more * parent prefixes (^). Note: path will not contain a leading '\'. */ if (*Path == (UINT8) AML_PARENT_PREFIX) { Temp = AcpiDmNormalizeParentPrefix (Op, ExternalPath); /* Set new external path */ ACPI_FREE (ExternalPath); ExternalPath = Temp; if (!Temp) { return_VOID; } /* Create the new internal pathname */ Flags |= ACPI_EXT_INTERNAL_PATH_ALLOCATED; Status = AcpiNsInternalizeName (ExternalPath, &InternalPath); if (ACPI_FAILURE (Status)) { ACPI_FREE (ExternalPath); return_VOID; } } /* Create the new External() declaration node */ Status = AcpiDmCreateNewExternal (ExternalPath, InternalPath, Type, Value, Flags); if (ACPI_FAILURE (Status)) { ACPI_FREE (ExternalPath); if (Flags & ACPI_EXT_INTERNAL_PATH_ALLOCATED) { ACPI_FREE (InternalPath); } } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiDmGetExternalAndInternalPath * * PARAMETERS: Node - Namespace node for object to be added * ExternalPath - Will contain the external path of the node * InternalPath - Will contain the internal path of the node * * RETURN: None * * DESCRIPTION: Get the External and Internal path from the given node. * ******************************************************************************/ static ACPI_STATUS AcpiDmGetExternalAndInternalPath ( ACPI_NAMESPACE_NODE *Node, char **ExternalPath, char **InternalPath) { ACPI_STATUS Status; if (!Node) { return (AE_BAD_PARAMETER); } /* Get the full external and internal pathnames to the node */ *ExternalPath = AcpiNsGetExternalPathname (Node); if (!*ExternalPath) { return (AE_BAD_PATHNAME); } Status = AcpiNsInternalizeName (*ExternalPath, InternalPath); if (ACPI_FAILURE (Status)) { ACPI_FREE (*ExternalPath); return (Status); } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDmRemoveRootPrefix * * PARAMETERS: Path - Remove Root prefix from this Path * * RETURN: None * * DESCRIPTION: Remove the root prefix character '\' from Path. * ******************************************************************************/ static ACPI_STATUS AcpiDmRemoveRootPrefix ( char **Path) { char *InputPath = *Path; if ((*InputPath == AML_ROOT_PREFIX) && (InputPath[1])) { if (!memmove(InputPath, InputPath+1, strlen(InputPath))) { return (AE_ERROR); } *Path = InputPath; } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDmAddNodeToExternalList * * PARAMETERS: Node - Namespace node for object to be added * Type - ACPI object type to be added * Value - Arg count if adding a Method object * Flags - To be passed to the external object * * RETURN: None * * DESCRIPTION: Insert a new name into the global list of Externals which * will in turn be later emitted as an External() declaration * in the disassembled output. * * This function handles the case where the referenced name has * been found in the namespace, but the name originated in a * table other than the one that is being disassembled (such * as a table that is added via the iASL -e option). * ******************************************************************************/ void AcpiDmAddNodeToExternalList ( ACPI_NAMESPACE_NODE *Node, UINT8 Type, UINT32 Value, UINT16 Flags) { char *ExternalPath; char *InternalPath; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (DmAddNodeToExternalList); /* Get the full external and internal pathnames to the node */ Status = AcpiDmGetExternalAndInternalPath (Node, &ExternalPath, &InternalPath); if (ACPI_FAILURE (Status)) { return_VOID; } /* Remove the root backslash */ Status = AcpiDmRemoveRootPrefix (&ExternalPath); if (ACPI_FAILURE (Status)) { ACPI_FREE (ExternalPath); ACPI_FREE (InternalPath); return_VOID; } /* Create the new External() declaration node */ Status = AcpiDmCreateNewExternal (ExternalPath, InternalPath, Type, Value, (Flags | ACPI_EXT_INTERNAL_PATH_ALLOCATED)); if (ACPI_FAILURE (Status)) { ACPI_FREE (ExternalPath); ACPI_FREE (InternalPath); } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiDmAddPathToExternalList * * PARAMETERS: Path - External name of the object to be added * Type - ACPI object type to be added * Value - Arg count if adding a Method object * Flags - To be passed to the external object * * RETURN: None * * DESCRIPTION: Insert a new name into the global list of Externals which * will in turn be later emitted as an External() declaration * in the disassembled output. * * This function currently is used to add externals via a * reference file (via the -fe iASL option). * ******************************************************************************/ static void AcpiDmAddPathToExternalList ( char *Path, UINT8 Type, UINT32 Value, UINT16 Flags) { char *InternalPath; char *ExternalPath; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (DmAddPathToExternalList); if (!Path) { return_VOID; } /* Remove a root backslash if present */ if ((*Path == AML_ROOT_PREFIX) && (Path[1])) { Path++; } /* Create the internal and external pathnames */ Status = AcpiNsInternalizeName (Path, &InternalPath); if (ACPI_FAILURE (Status)) { return_VOID; } Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, InternalPath, NULL, &ExternalPath); if (ACPI_FAILURE (Status)) { ACPI_FREE (InternalPath); return_VOID; } /* Create the new External() declaration node */ Status = AcpiDmCreateNewExternal (ExternalPath, InternalPath, Type, Value, (Flags | ACPI_EXT_INTERNAL_PATH_ALLOCATED)); if (ACPI_FAILURE (Status)) { ACPI_FREE (ExternalPath); ACPI_FREE (InternalPath); } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiDmCreateNewExternal * * PARAMETERS: ExternalPath - External path to the object * InternalPath - Internal (AML) path to the object * Type - ACPI object type to be added * Value - Arg count if adding a Method object * Flags - To be passed to the external object * * RETURN: Status * * DESCRIPTION: Common low-level function to insert a new name into the global * list of Externals which will in turn be later emitted as * External() declarations in the disassembled output. * * Note: The external name should not include a root prefix * (backslash). We do not want External() statements to contain * a leading '\', as this prevents duplicate external statements * of the form: * * External (\ABCD) * External (ABCD) * * This would cause a compile time error when the disassembled * output file is recompiled. * * There are two cases that are handled here. For both, we emit * an External() statement: * 1) The name was simply not found in the namespace. * 2) The name was found, but it originated in a table other than * the table that is being disassembled. * ******************************************************************************/ static ACPI_STATUS AcpiDmCreateNewExternal ( char *ExternalPath, char *InternalPath, UINT8 Type, UINT32 Value, UINT16 Flags) { ACPI_EXTERNAL_LIST *NewExternal; ACPI_EXTERNAL_LIST *NextExternal; ACPI_EXTERNAL_LIST *PrevExternal = NULL; ACPI_FUNCTION_TRACE (DmCreateNewExternal); /* Check all existing externals to ensure no duplicates */ NextExternal = AcpiGbl_ExternalList; while (NextExternal) { /* Check for duplicates */ if (!strcmp (ExternalPath, NextExternal->Path)) { /* * If this external came from an External() opcode, we are * finished with this one. (No need to check any further). */ if (NextExternal->Flags & ACPI_EXT_ORIGIN_FROM_OPCODE) { return_ACPI_STATUS (AE_ALREADY_EXISTS); } /* Allow upgrade of type from ANY */ else if ((NextExternal->Type == ACPI_TYPE_ANY) && (Type != ACPI_TYPE_ANY)) { NextExternal->Type = Type; } /* Update the argument count as necessary */ if (Value < NextExternal->Value) { NextExternal->Value = Value; } /* Update flags. */ NextExternal->Flags |= Flags; NextExternal->Flags &= ~ACPI_EXT_INTERNAL_PATH_ALLOCATED; return_ACPI_STATUS (AE_ALREADY_EXISTS); } NextExternal = NextExternal->Next; } /* Allocate and init a new External() descriptor */ NewExternal = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EXTERNAL_LIST)); if (!NewExternal) { return_ACPI_STATUS (AE_NO_MEMORY); } ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Adding external reference node (%s) type [%s]\n", ExternalPath, AcpiUtGetTypeName (Type))); NewExternal->Flags = Flags; NewExternal->Value = Value; NewExternal->Path = ExternalPath; NewExternal->Type = Type; NewExternal->Length = (UINT16) strlen (ExternalPath); NewExternal->InternalPath = InternalPath; /* Link the new descriptor into the global list, alphabetically ordered */ NextExternal = AcpiGbl_ExternalList; while (NextExternal) { if (AcpiUtStricmp (NewExternal->Path, NextExternal->Path) < 0) { if (PrevExternal) { PrevExternal->Next = NewExternal; } else { AcpiGbl_ExternalList = NewExternal; } NewExternal->Next = NextExternal; return_ACPI_STATUS (AE_OK); } PrevExternal = NextExternal; NextExternal = NextExternal->Next; } if (PrevExternal) { PrevExternal->Next = NewExternal; } else { AcpiGbl_ExternalList = NewExternal; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDmResolveExternal * * PARAMETERS: Path - Path of the external * Type - Type of the external * Node - Input node for AcpiNsLookup * * RETURN: Status * * DESCRIPTION: Resolve the external within the namespace by AcpiNsLookup. * If the returned node is an external and has the same type * we assume that it was either an existing external or a * ******************************************************************************/ static ACPI_STATUS AcpiDmResolveExternal ( char *Path, UINT8 Type, ACPI_NAMESPACE_NODE **Node) { ACPI_STATUS Status; Status = AcpiNsLookup (NULL, Path, Type, ACPI_IMODE_LOAD_PASS1, ACPI_NS_ERROR_IF_FOUND | ACPI_NS_EXTERNAL | ACPI_NS_DONT_OPEN_SCOPE, NULL, Node); if (!Node) { ACPI_EXCEPTION ((AE_INFO, Status, "while adding external to namespace [%s]", Path)); } /* Note the asl code "external(a) external(a)" is acceptable ASL */ else if ((*Node)->Type == Type && (*Node)->Flags & ANOBJ_IS_EXTERNAL) { return (AE_OK); } else { ACPI_EXCEPTION ((AE_INFO, AE_ERROR, "[%s] has conflicting declarations", Path)); } return (AE_ERROR); } /******************************************************************************* * * FUNCTION: AcpiDmCreateSubobjectForExternal * * PARAMETERS: Type - Type of the external * Node - Namespace node from AcpiNsLookup * ParamCount - Value to be used for Method * * RETURN: None * * DESCRIPTION: Add one external to the namespace. Allows external to be * "resolved". * ******************************************************************************/ void AcpiDmCreateSubobjectForExternal ( UINT8 Type, ACPI_NAMESPACE_NODE **Node, UINT32 ParamCount) { ACPI_OPERAND_OBJECT *ObjDesc; switch (Type) { case ACPI_TYPE_METHOD: /* For methods, we need to save the argument count */ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD); ObjDesc->Method.ParamCount = (UINT8) ParamCount; (*Node)->Object = ObjDesc; break; case ACPI_TYPE_REGION: /* Regions require a region sub-object */ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_REGION); ObjDesc->Region.Node = *Node; (*Node)->Object = ObjDesc; break; default: break; } } /******************************************************************************* * * FUNCTION: AcpiDmAddOneExternalToNamespace * * PARAMETERS: Path - External parse object * Type - Type of parse object * ParamCount - External method parameter count * * RETURN: None * * DESCRIPTION: Add one external to the namespace by resolvign the external * (by performing a namespace lookup) and annotating the resulting * namespace node with the appropriate information if the type * is ACPI_TYPE_REGION or ACPI_TYPE_METHOD. * ******************************************************************************/ void AcpiDmAddOneExternalToNamespace ( char *Path, UINT8 Type, UINT32 ParamCount) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; Status = AcpiDmResolveExternal (Path, Type, &Node); if (ACPI_FAILURE (Status)) { return; } AcpiDmCreateSubobjectForExternal (Type, &Node, ParamCount); } /******************************************************************************* * * FUNCTION: AcpiDmAddExternalListToNamespace * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Add all externals within AcpiGbl_ExternalList to the namespace. * Allows externals to be "resolved". * ******************************************************************************/ void AcpiDmAddExternalListToNamespace ( void) { ACPI_EXTERNAL_LIST *External = AcpiGbl_ExternalList; while (External) { AcpiDmAddOneExternalToNamespace (External->InternalPath, External->Type, External->Value); External = External->Next; } } /******************************************************************************* * * FUNCTION: AcpiDmGetUnresolvedExternalMethodCount * * PARAMETERS: None * * RETURN: The number of unresolved control method externals in the * external list * * DESCRIPTION: Return the number of unresolved external methods that have been * generated. If any unresolved control method externals have been * found, we must re-parse the entire definition block with the new * information (number of arguments for the methods.) * This is limitation of AML, we don't know the number of arguments * from the control method invocation itself. * * Note: resolved external control methods are external control * methods encoded with the AML_EXTERNAL_OP bytecode within the * AML being disassembled. * ******************************************************************************/ UINT32 AcpiDmGetUnresolvedExternalMethodCount ( void) { ACPI_EXTERNAL_LIST *External = AcpiGbl_ExternalList; UINT32 Count = 0; while (External) { if (External->Type == ACPI_TYPE_METHOD && !(External->Flags & ACPI_EXT_ORIGIN_FROM_OPCODE)) { Count++; } External = External->Next; } return (Count); } /******************************************************************************* * * FUNCTION: AcpiDmClearExternalList * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Free the entire External info list * ******************************************************************************/ void AcpiDmClearExternalList ( void) { ACPI_EXTERNAL_LIST *NextExternal; while (AcpiGbl_ExternalList) { NextExternal = AcpiGbl_ExternalList->Next; ACPI_FREE (AcpiGbl_ExternalList->Path); ACPI_FREE (AcpiGbl_ExternalList); AcpiGbl_ExternalList = NextExternal; } } /******************************************************************************* * * FUNCTION: AcpiDmEmitExternals * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Emit an External() ASL statement for each of the externals in * the global external info list. * ******************************************************************************/ void AcpiDmEmitExternals ( void) { ACPI_EXTERNAL_LIST *NextExternal; if (!AcpiGbl_ExternalList) { return; } /* * Determine the number of control methods in the external list, and * also how many of those externals were resolved via the namespace. */ NextExternal = AcpiGbl_ExternalList; while (NextExternal) { if (NextExternal->Type == ACPI_TYPE_METHOD) { AcpiGbl_NumExternalMethods++; if (NextExternal->Flags & ACPI_EXT_RESOLVED_REFERENCE) { AcpiGbl_ResolvedExternalMethods++; } } NextExternal = NextExternal->Next; } /* Check if any control methods were unresolved */ AcpiDmUnresolvedWarning (1); if (AslGbl_ExternalRefFilename) { AcpiOsPrintf ( " /*\n * External declarations were imported from\n" " * a reference file -- %s\n */\n\n", AslGbl_ExternalRefFilename); } /* * Walk and emit the list of externals found during the AML parsing */ while (AcpiGbl_ExternalList) { if (!(AcpiGbl_ExternalList->Flags & ACPI_EXT_EXTERNAL_EMITTED)) { AcpiOsPrintf (" External (%s%s)", AcpiGbl_ExternalList->Path, AcpiDmGetObjectTypeName (AcpiGbl_ExternalList->Type)); /* Check for "unresolved" method reference */ if ((AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD) && (!(AcpiGbl_ExternalList->Flags & ACPI_EXT_RESOLVED_REFERENCE))) { AcpiOsPrintf (" // Warning: Unknown method, " "guessing %u arguments", AcpiGbl_ExternalList->Value); } /* Check for external from a external references file */ else if (AcpiGbl_ExternalList->Flags & ACPI_EXT_ORIGIN_FROM_FILE) { if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD) { AcpiOsPrintf (" // %u Arguments", AcpiGbl_ExternalList->Value); } AcpiOsPrintf (" // From external reference file"); } /* This is the normal external case */ else { /* For methods, add a comment with the number of arguments */ if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD) { AcpiOsPrintf (" // %u Arguments", AcpiGbl_ExternalList->Value); } } if (AcpiGbl_ExternalList->Flags &= ACPI_EXT_CONFLICTING_DECLARATION) { AcpiOsPrintf ("%s", ExternalConflictMessage); AcpiDmConflictingDeclaration (AcpiGbl_ExternalList->Path); } AcpiOsPrintf ("\n"); } /* Free this external info block and move on to next external */ NextExternal = AcpiGbl_ExternalList->Next; if (AcpiGbl_ExternalList->Flags & ACPI_EXT_INTERNAL_PATH_ALLOCATED) { ACPI_FREE (AcpiGbl_ExternalList->InternalPath); } ACPI_FREE (AcpiGbl_ExternalList->Path); ACPI_FREE (AcpiGbl_ExternalList); AcpiGbl_ExternalList = NextExternal; } AcpiOsPrintf ("\n"); } /******************************************************************************* * * FUNCTION: AcpiDmMarkExternalConflict * * PARAMETERS: Path - Namepath to search * * RETURN: ExternalList * * DESCRIPTION: Search the AcpiGbl_ExternalList for a matching path * ******************************************************************************/ void AcpiDmMarkExternalConflict ( ACPI_NAMESPACE_NODE *Node) { ACPI_EXTERNAL_LIST *ExternalList = AcpiGbl_ExternalList; char *ExternalPath; char *InternalPath; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (DmMarkExternalConflict); if (Node->Flags & ANOBJ_IS_EXTERNAL) { return_VOID; } /* Get the full external and internal pathnames to the node */ Status = AcpiDmGetExternalAndInternalPath (Node, &ExternalPath, &InternalPath); if (ACPI_FAILURE (Status)) { return_VOID; } /* Remove the root backslash */ Status = AcpiDmRemoveRootPrefix (&InternalPath); if (ACPI_FAILURE (Status)) { ACPI_FREE (InternalPath); ACPI_FREE (ExternalPath); return_VOID; } while (ExternalList) { if (!strcmp (ExternalList->InternalPath, InternalPath)) { ExternalList->Flags |= ACPI_EXT_CONFLICTING_DECLARATION; } ExternalList = ExternalList->Next; } ACPI_FREE (InternalPath); ACPI_FREE (ExternalPath); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiDmConflictingDeclaration * * PARAMETERS: Path - Path with conflicting declaration * * RETURN: None * * DESCRIPTION: Emit a warning when printing conflicting ASL external * declarations. * ******************************************************************************/ static void AcpiDmConflictingDeclaration ( char *Path) { fprintf (stderr, " Warning - Emitting ASL code \"External (%s)\"\n" " This is a conflicting declaration with some " "other declaration within the ASL code.\n" " This external declaration may need to be " "deleted in order to recompile the dsl file.\n\n", Path); } /******************************************************************************* * * FUNCTION: AcpiDmEmitExternal * * PARAMETERS: Op External Parse Object * * RETURN: None * * DESCRIPTION: Emit an External() ASL statement for the current External * parse object. Note: External Ops are named types so the * namepath is contained within NameOp->Name.Path. * ******************************************************************************/ void AcpiDmEmitExternal ( ACPI_PARSE_OBJECT *NameOp, ACPI_PARSE_OBJECT *TypeOp) { AcpiOsPrintf ("External ("); AcpiDmNamestring (NameOp->Named.Path); AcpiOsPrintf ("%s)", AcpiDmGetObjectTypeName ((ACPI_OBJECT_TYPE) TypeOp->Common.Value.Integer)); AcpiDmCheckForExternalConflict (NameOp->Named.Path); AcpiOsPrintf ("\n"); } /******************************************************************************* * * FUNCTION: AcpiDmCheckForExternalConflict * * PARAMETERS: Path - Path to check * * RETURN: None * * DESCRIPTION: Search the External List to see if the input Path has a * conflicting declaration. * ******************************************************************************/ static void AcpiDmCheckForExternalConflict ( char *Path) { ACPI_EXTERNAL_LIST *ExternalList = AcpiGbl_ExternalList; char *ListItemPath; char *InputPath; if (!Path) { return; } /* Move past the root prefix '\' */ InputPath = Path; if ((*InputPath == AML_ROOT_PREFIX) && InputPath[1]) { InputPath++; } while (ExternalList) { ListItemPath = ExternalList->Path; if (ListItemPath) { /* Move past the root prefix '\' */ if ((*ListItemPath == AML_ROOT_PREFIX) && ListItemPath[1]) { ListItemPath++; } if (!strcmp (ListItemPath, InputPath) && (ExternalList->Flags & ACPI_EXT_CONFLICTING_DECLARATION)) { AcpiOsPrintf ("%s", ExternalConflictMessage); AcpiDmConflictingDeclaration (Path); return; } } ExternalList = ExternalList->Next; } } /******************************************************************************* * * FUNCTION: AcpiDmUnresolvedWarning * * PARAMETERS: Type - Where to output the warning. * 0 means write to stderr * 1 means write to AcpiOsPrintf * * RETURN: None * * DESCRIPTION: Issue warning message if there are unresolved external control * methods within the disassembly. * ******************************************************************************/ /* Summary of the external control method problem: When the -e option is used with disassembly, the various SSDTs are simply loaded into a global namespace for the disassembler to use in order to resolve control method references (invocations). The disassembler tracks any such references, and will emit an External() statement for these types of methods, with the proper number of arguments . Without the SSDTs, the AML does not contain enough information to properly disassemble the control method invocation -- because the disassembler does not know how many arguments to parse. An example: Assume we have two control methods. ABCD has one argument, and EFGH has zero arguments. Further, we have two additional control methods that invoke ABCD and EFGH, named T1 and T2: Method (ABCD, 1) { } Method (EFGH, 0) { } Method (T1) { ABCD (Add (2, 7, Local0)) } Method (T2) { EFGH () Add (2, 7, Local0) } Here is the AML code that is generated for T1 and T2: 185: Method (T1) 0000034C: 14 10 54 31 5F 5F 00 ... "..T1__." 186: { 187: ABCD (Add (2, 7, Local0)) 00000353: 41 42 43 44 ............ "ABCD" 00000357: 72 0A 02 0A 07 60 ...... "r....`" 188: } 190: Method (T2) 0000035D: 14 10 54 32 5F 5F 00 ... "..T2__." 191: { 192: EFGH () 00000364: 45 46 47 48 ............ "EFGH" 193: Add (2, 7, Local0) 00000368: 72 0A 02 0A 07 60 ...... "r....`" 194: } Note that the AML code for T1 and T2 is essentially identical. When disassembling this code, the methods ABCD and EFGH must be known to the disassembler, otherwise it does not know how to handle the method invocations. In other words, if ABCD and EFGH are actually external control methods appearing in an SSDT, the disassembler does not know what to do unless the owning SSDT has been loaded via the -e option. */ static char ExternalWarningPart1[600]; static char ExternalWarningPart2[400]; static char ExternalWarningPart3[400]; static char ExternalWarningPart4[200]; void AcpiDmUnresolvedWarning ( UINT8 Type) { char *Format; char Pad[] = " *"; char NoPad[] = ""; if (!AcpiGbl_NumExternalMethods) { return; } if (AcpiGbl_NumExternalMethods == AcpiGbl_ResolvedExternalMethods) { return; } Format = Type ? Pad : NoPad; sprintf (ExternalWarningPart1, "%s iASL Warning: There %s %u external control method%s found during\n" "%s disassembly, but only %u %s resolved (%u unresolved). Additional\n" "%s ACPI tables may be required to properly disassemble the code. This\n" "%s resulting disassembler output file may not compile because the\n" "%s disassembler did not know how many arguments to assign to the\n" "%s unresolved methods. Note: SSDTs can be dynamically loaded at\n" "%s runtime and may or may not be available via the host OS.\n", Format, (AcpiGbl_NumExternalMethods != 1 ? "were" : "was"), AcpiGbl_NumExternalMethods, (AcpiGbl_NumExternalMethods != 1 ? "s" : ""), Format, AcpiGbl_ResolvedExternalMethods, (AcpiGbl_ResolvedExternalMethods != 1 ? "were" : "was"), (AcpiGbl_NumExternalMethods - AcpiGbl_ResolvedExternalMethods), Format, Format, Format, Format, Format); sprintf (ExternalWarningPart2, "%s To specify the tables needed to resolve external control method\n" "%s references, the -e option can be used to specify the filenames.\n" "%s Example iASL invocations:\n" "%s iasl -e ssdt1.aml ssdt2.aml ssdt3.aml -d dsdt.aml\n" "%s iasl -e dsdt.aml ssdt2.aml -d ssdt1.aml\n" "%s iasl -e ssdt*.aml -d dsdt.aml\n", Format, Format, Format, Format, Format, Format); sprintf (ExternalWarningPart3, "%s In addition, the -fe option can be used to specify a file containing\n" "%s control method external declarations with the associated method\n" "%s argument counts. Each line of the file must be of the form:\n" "%s External (, MethodObj, )\n" "%s Invocation:\n" "%s iasl -fe refs.txt -d dsdt.aml\n", Format, Format, Format, Format, Format, Format); sprintf (ExternalWarningPart4, "%s The following methods were unresolved and many not compile properly\n" "%s because the disassembler had to guess at the number of arguments\n" "%s required for each:\n", Format, Format, Format); if (Type) { if (!AcpiGbl_ExternalFileList) { /* The -e option was not specified */ AcpiOsPrintf (" /*\n%s *\n%s *\n%s *\n%s */\n", ExternalWarningPart1, ExternalWarningPart2, ExternalWarningPart3, ExternalWarningPart4); } else { /* The -e option was specified, but there are still some unresolved externals */ AcpiOsPrintf (" /*\n%s *\n%s *\n%s */\n", ExternalWarningPart1, ExternalWarningPart3, ExternalWarningPart4); } } else { if (!AcpiGbl_ExternalFileList) { /* The -e option was not specified */ fprintf (stderr, "\n%s\n%s\n%s\n", ExternalWarningPart1, ExternalWarningPart2, ExternalWarningPart3); } else { /* The -e option was specified, but there are still some unresolved externals */ fprintf (stderr, "\n%s\n%s\n", ExternalWarningPart1, ExternalWarningPart3); } } } src/acpica/source/common/dmrestag.c000066400000000000000000001214661465205512700176500ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dmrestag - Add tags to resource descriptors (Application-level) * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "acdisasm.h" #include "acnamesp.h" #include "amlcode.h" /* This module used for application-level code only */ #define _COMPONENT ACPI_CA_DISASSEMBLER ACPI_MODULE_NAME ("dmrestag") /* Local prototypes */ static void AcpiDmUpdateResourceName ( ACPI_NAMESPACE_NODE *ResourceNode); static char * AcpiDmSearchTagList ( UINT32 BitIndex, const ACPI_RESOURCE_TAG *TagList); static char * AcpiDmGetResourceTag ( UINT32 BitIndex, AML_RESOURCE *Resource, UINT8 ResourceIndex); static char * AcpiGetTagPathname ( ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE *BufferNode, ACPI_NAMESPACE_NODE *ResourceNode, UINT32 BitIndex); static ACPI_NAMESPACE_NODE * AcpiDmGetResourceNode ( ACPI_NAMESPACE_NODE *BufferNode, UINT32 BitIndex); static ACPI_STATUS AcpiDmAddResourceToNamespace ( UINT8 *Aml, UINT32 Length, UINT32 Offset, UINT8 ResourceIndex, void **Context); static void AcpiDmAddResourcesToNamespace ( ACPI_NAMESPACE_NODE *BufferNode, ACPI_PARSE_OBJECT *Op); /****************************************************************************** * * Resource Tag tables * * These are the predefined tags that refer to elements of a resource * descriptor. Each name and offset is defined in the ACPI specification. * * Each table entry contains the bit offset of the field and the associated * name. * ******************************************************************************/ static const ACPI_RESOURCE_TAG AcpiDmIrqTags[] = { {( 1 * 8), ACPI_RESTAG_INTERRUPT}, {( 3 * 8) + 0, ACPI_RESTAG_INTERRUPTTYPE}, {( 3 * 8) + 3, ACPI_RESTAG_INTERRUPTLEVEL}, {( 3 * 8) + 4, ACPI_RESTAG_INTERRUPTSHARE}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmDmaTags[] = { {( 1 * 8), ACPI_RESTAG_DMA}, {( 2 * 8) + 0, ACPI_RESTAG_XFERTYPE}, {( 2 * 8) + 2, ACPI_RESTAG_BUSMASTER}, {( 2 * 8) + 5, ACPI_RESTAG_DMATYPE}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmIoTags[] = { {( 1 * 8) + 0, ACPI_RESTAG_DECODE}, {( 2 * 8), ACPI_RESTAG_MINADDR}, {( 4 * 8), ACPI_RESTAG_MAXADDR}, {( 6 * 8), ACPI_RESTAG_ALIGNMENT}, {( 7 * 8), ACPI_RESTAG_LENGTH}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmFixedIoTags[] = { {( 1 * 8), ACPI_RESTAG_BASEADDRESS}, {( 3 * 8), ACPI_RESTAG_LENGTH}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmFixedDmaTags[] = { {( 1 * 8), ACPI_RESTAG_DMA}, {( 3 * 8), ACPI_RESTAG_DMATYPE}, {( 5 * 8), ACPI_RESTAG_XFERTYPE}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmMemory24Tags[] = { {( 3 * 8) + 0, ACPI_RESTAG_READWRITETYPE}, {( 4 * 8), ACPI_RESTAG_MINADDR}, {( 6 * 8), ACPI_RESTAG_MAXADDR}, {( 8 * 8), ACPI_RESTAG_ALIGNMENT}, {(10 * 8), ACPI_RESTAG_LENGTH}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmRegisterTags[] = { {( 3 * 8), ACPI_RESTAG_ADDRESSSPACE}, {( 4 * 8), ACPI_RESTAG_REGISTERBITWIDTH}, {( 5 * 8), ACPI_RESTAG_REGISTERBITOFFSET}, {( 6 * 8), ACPI_RESTAG_ACCESSSIZE}, {( 7 * 8), ACPI_RESTAG_ADDRESS}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmMemory32Tags[] = { {( 3 * 8) + 0, ACPI_RESTAG_READWRITETYPE}, {( 4 * 8), ACPI_RESTAG_MINADDR}, {( 8 * 8), ACPI_RESTAG_MAXADDR}, {(12 * 8), ACPI_RESTAG_ALIGNMENT}, {(16 * 8), ACPI_RESTAG_LENGTH}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmFixedMemory32Tags[] = { {( 3 * 8) + 0, ACPI_RESTAG_READWRITETYPE}, {( 4 * 8), ACPI_RESTAG_BASEADDRESS}, {( 8 * 8), ACPI_RESTAG_LENGTH}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmInterruptTags[] = { {( 3 * 8) + 1, ACPI_RESTAG_INTERRUPTTYPE}, {( 3 * 8) + 2, ACPI_RESTAG_INTERRUPTLEVEL}, {( 3 * 8) + 3, ACPI_RESTAG_INTERRUPTSHARE}, {( 5 * 8), ACPI_RESTAG_INTERRUPT}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmAddress16Tags[] = { {( 4 * 8) + 1, ACPI_RESTAG_DECODE}, {( 4 * 8) + 2, ACPI_RESTAG_MINTYPE}, {( 4 * 8) + 3, ACPI_RESTAG_MAXTYPE}, {( 6 * 8), ACPI_RESTAG_GRANULARITY}, {( 8 * 8), ACPI_RESTAG_MINADDR}, {(10 * 8), ACPI_RESTAG_MAXADDR}, {(12 * 8), ACPI_RESTAG_TRANSLATION}, {(14 * 8), ACPI_RESTAG_LENGTH}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmAddress32Tags[] = { {( 4 * 8) + 1, ACPI_RESTAG_DECODE}, {( 4 * 8) + 2, ACPI_RESTAG_MINTYPE}, {( 4 * 8) + 3, ACPI_RESTAG_MAXTYPE}, {( 6 * 8), ACPI_RESTAG_GRANULARITY}, {(10 * 8), ACPI_RESTAG_MINADDR}, {(14 * 8), ACPI_RESTAG_MAXADDR}, {(18 * 8), ACPI_RESTAG_TRANSLATION}, {(22 * 8), ACPI_RESTAG_LENGTH}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmAddress64Tags[] = { {( 4 * 8) + 1, ACPI_RESTAG_DECODE}, {( 4 * 8) + 2, ACPI_RESTAG_MINTYPE}, {( 4 * 8) + 3, ACPI_RESTAG_MAXTYPE}, {( 6 * 8), ACPI_RESTAG_GRANULARITY}, {(14 * 8), ACPI_RESTAG_MINADDR}, {(22 * 8), ACPI_RESTAG_MAXADDR}, {(30 * 8), ACPI_RESTAG_TRANSLATION}, {(38 * 8), ACPI_RESTAG_LENGTH}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmExtendedAddressTags[] = { {( 4 * 8) + 1, ACPI_RESTAG_DECODE}, {( 4 * 8) + 2, ACPI_RESTAG_MINTYPE}, {( 4 * 8) + 3, ACPI_RESTAG_MAXTYPE}, {( 8 * 8), ACPI_RESTAG_GRANULARITY}, {(16 * 8), ACPI_RESTAG_MINADDR}, {(24 * 8), ACPI_RESTAG_MAXADDR}, {(32 * 8), ACPI_RESTAG_TRANSLATION}, {(40 * 8), ACPI_RESTAG_LENGTH}, {(48 * 8), ACPI_RESTAG_TYPESPECIFICATTRIBUTES}, {0, NULL} }; /* Subtype tables for GPIO descriptors */ static const ACPI_RESOURCE_TAG AcpiDmGpioIntTags[] = { {( 7 * 8) + 0, ACPI_RESTAG_MODE}, {( 7 * 8) + 1, ACPI_RESTAG_POLARITY}, {( 7 * 8) + 3, ACPI_RESTAG_INTERRUPTSHARE}, {( 9 * 8), ACPI_RESTAG_PINCONFIG}, {(10 * 8), ACPI_RESTAG_DRIVESTRENGTH}, {(12 * 8), ACPI_RESTAG_DEBOUNCETIME}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmGpioIoTags[] = { {( 7 * 8) + 0, ACPI_RESTAG_IORESTRICTION}, {( 7 * 8) + 3, ACPI_RESTAG_INTERRUPTSHARE}, {( 9 * 8), ACPI_RESTAG_PINCONFIG}, {(10 * 8), ACPI_RESTAG_DRIVESTRENGTH}, {(12 * 8), ACPI_RESTAG_DEBOUNCETIME}, {0, NULL} }; /* Subtype tables for SerialBus descriptors */ static const ACPI_RESOURCE_TAG AcpiDmCsi2SerialBusTags[] = /* ACPI 6.4 */ { {( 6 * 8) + 0, ACPI_RESTAG_SLAVEMODE}, {( 7 * 8) + 0, ACPI_RESTAG_PHYTYPE}, {( 7 * 8) + 2, ACPI_RESTAG_LOCALPORT}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmI2cSerialBusTags[] = { {( 6 * 8) + 0, ACPI_RESTAG_SLAVEMODE}, {( 6 * 8) + 2, ACPI_RESTAG_INTERRUPTSHARE}, /* V2 - ACPI 6.0 */ {( 7 * 8) + 0, ACPI_RESTAG_MODE}, {(12 * 8), ACPI_RESTAG_SPEED}, {(16 * 8), ACPI_RESTAG_ADDRESS}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmSpiSerialBusTags[] = { {( 6 * 8) + 0, ACPI_RESTAG_SLAVEMODE}, {( 6 * 8) + 2, ACPI_RESTAG_INTERRUPTSHARE}, /* V2 - ACPI 6.0 */ {( 7 * 8) + 0, ACPI_RESTAG_MODE}, {( 7 * 8) + 1, ACPI_RESTAG_DEVICEPOLARITY}, {(12 * 8), ACPI_RESTAG_SPEED}, {(16 * 8), ACPI_RESTAG_LENGTH}, {(17 * 8), ACPI_RESTAG_PHASE}, {(18 * 8), ACPI_RESTAG_POLARITY}, {(19 * 8), ACPI_RESTAG_ADDRESS}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmUartSerialBusTags[] = { {( 6 * 8) + 0, ACPI_RESTAG_SLAVEMODE}, /* Note: not part of original macro */ {( 6 * 8) + 2, ACPI_RESTAG_INTERRUPTSHARE}, /* V2 - ACPI 6.0 */ {( 7 * 8) + 0, ACPI_RESTAG_FLOWCONTROL}, {( 7 * 8) + 2, ACPI_RESTAG_STOPBITS}, {( 7 * 8) + 4, ACPI_RESTAG_LENGTH}, {( 7 * 8) + 7, ACPI_RESTAG_ENDIANNESS}, {(12 * 8), ACPI_RESTAG_SPEED}, {(16 * 8), ACPI_RESTAG_LENGTH_RX}, {(18 * 8), ACPI_RESTAG_LENGTH_TX}, {(20 * 8), ACPI_RESTAG_PARITY}, {(21 * 8), ACPI_RESTAG_LINE}, {0, NULL} }; /* Subtype tables for PinFunction descriptor */ static const ACPI_RESOURCE_TAG AcpiDmPinFunctionTags[] = { {( 4 * 8), ACPI_RESTAG_INTERRUPTSHARE}, {( 6 * 8), ACPI_RESTAG_PINCONFIG}, {( 7 * 8), ACPI_RESTAG_FUNCTION}, {0, NULL} }; /* Subtype tables for PinConfig descriptor */ static const ACPI_RESOURCE_TAG AcpiDmPinConfigTags[] = { {( 4 * 8), ACPI_RESTAG_INTERRUPTSHARE}, {( 6 * 8), ACPI_RESTAG_PINCONFIG_TYPE}, {( 7 * 8), ACPI_RESTAG_PINCONFIG_VALUE}, {0, NULL} }; /* Subtype tables for PinGroupFunction descriptor */ static const ACPI_RESOURCE_TAG AcpiDmPinGroupFunctionTags[] = { {( 6 * 8), ACPI_RESTAG_FUNCTION}, {0, NULL} }; /* Subtype tables for Address descriptor type-specific flags */ static const ACPI_RESOURCE_TAG AcpiDmMemoryFlagTags[] = { {( 5 * 8) + 0, ACPI_RESTAG_READWRITETYPE}, {( 5 * 8) + 1, ACPI_RESTAG_MEMTYPE}, {( 5 * 8) + 3, ACPI_RESTAG_MEMATTRIBUTES}, {( 5 * 8) + 5, ACPI_RESTAG_TYPE}, {0, NULL} }; static const ACPI_RESOURCE_TAG AcpiDmIoFlagTags[] = { {( 5 * 8) + 0, ACPI_RESTAG_RANGETYPE}, {( 5 * 8) + 4, ACPI_RESTAG_TYPE}, {( 5 * 8) + 5, ACPI_RESTAG_TRANSTYPE}, {0, NULL} }; /* Subtype tables for ClockInput descriptor */ static const ACPI_RESOURCE_TAG AcpiDmClockInputTags[] = { {( 6 * 8), ACPI_RESTAG_FQD}, {( 8 * 8), ACPI_RESTAG_FQN}, {0, NULL} }; /* * Dispatch table used to obtain the correct tag table for a descriptor. * * A NULL in this table means one of three things: * 1) The descriptor ID is reserved and invalid * 2) The descriptor has no tags associated with it * 3) The descriptor has subtypes and a separate table will be used. */ static const ACPI_RESOURCE_TAG *AcpiGbl_ResourceTags[] = { /* Small descriptors */ NULL, /* 0x00, Reserved */ NULL, /* 0x01, Reserved */ NULL, /* 0x02, Reserved */ NULL, /* 0x03, Reserved */ AcpiDmIrqTags, /* 0x04, ACPI_RESOURCE_NAME_IRQ_FORMAT */ AcpiDmDmaTags, /* 0x05, ACPI_RESOURCE_NAME_DMA_FORMAT */ NULL, /* 0x06, ACPI_RESOURCE_NAME_START_DEPENDENT */ NULL, /* 0x07, ACPI_RESOURCE_NAME_END_DEPENDENT */ AcpiDmIoTags, /* 0x08, ACPI_RESOURCE_NAME_IO_PORT */ AcpiDmFixedIoTags, /* 0x09, ACPI_RESOURCE_NAME_FIXED_IO_PORT */ AcpiDmFixedDmaTags, /* 0x0A, ACPI_RESOURCE_NAME_FIXED_DMA */ NULL, /* 0x0B, Reserved */ NULL, /* 0x0C, Reserved */ NULL, /* 0x0D, Reserved */ NULL, /* 0x0E, ACPI_RESOURCE_NAME_SMALL_VENDOR */ NULL, /* 0x0F, ACPI_RESOURCE_NAME_END_TAG (not used) */ /* Large descriptors */ NULL, /* 0x00, Reserved */ AcpiDmMemory24Tags, /* 0x01, ACPI_RESOURCE_NAME_MEMORY_24 */ AcpiDmRegisterTags, /* 0x02, ACPI_RESOURCE_NAME_GENERIC_REGISTER */ NULL, /* 0x03, Reserved */ NULL, /* 0x04, ACPI_RESOURCE_NAME_LARGE_VENDOR */ AcpiDmMemory32Tags, /* 0x05, ACPI_RESOURCE_NAME_MEMORY_32 */ AcpiDmFixedMemory32Tags, /* 0x06, ACPI_RESOURCE_NAME_FIXED_MEMORY_32 */ AcpiDmAddress32Tags, /* 0x07, ACPI_RESOURCE_NAME_DWORD_ADDRESS_SPACE */ AcpiDmAddress16Tags, /* 0x08, ACPI_RESOURCE_NAME_WORD_ADDRESS_SPACE */ AcpiDmInterruptTags, /* 0x09, ACPI_RESOURCE_NAME_EXTENDED_XRUPT */ AcpiDmAddress64Tags, /* 0x0A, ACPI_RESOURCE_NAME_QWORD_ADDRESS_SPACE */ AcpiDmExtendedAddressTags, /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS_SPACE */ NULL, /* 0x0C, ACPI_RESOURCE_NAME_GPIO - Use Subtype table below */ AcpiDmPinFunctionTags, /* 0x0D, ACPI_RESOURCE_NAME_PIN_FUNCTION */ NULL, /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use Subtype table below */ AcpiDmPinConfigTags, /* 0x0F, ACPI_RESOURCE_NAME_PIN_CONFIG */ NULL, /* 0x10, ACPI_RESOURCE_NAME_PIN_GROUP */ AcpiDmPinGroupFunctionTags, /* 0x11, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION */ AcpiDmPinConfigTags, /* 0x12, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG - Same as PinConfig */ AcpiDmClockInputTags, /* 0x13, ACPI_RESOURCE_NAME_CLOCK_INPUT */ }; /* GPIO Subtypes */ static const ACPI_RESOURCE_TAG *AcpiGbl_GpioResourceTags[] = { AcpiDmGpioIntTags, /* 0x00 Interrupt Connection */ AcpiDmGpioIoTags /* 0x01 I/O Connection */ }; /* Serial Bus Subtypes */ static const ACPI_RESOURCE_TAG *AcpiGbl_SerialResourceTags[] = { NULL, /* 0x00 Reserved */ AcpiDmI2cSerialBusTags, /* 0x01 I2C SerialBus */ AcpiDmSpiSerialBusTags, /* 0x02 SPI SerialBus */ AcpiDmUartSerialBusTags, /* 0x03 UART SerialBus */ AcpiDmCsi2SerialBusTags /* 0x04 CSI2 SerialBus */ }; /* * Globals used to generate unique resource descriptor names. We use names that * start with underscore and a prefix letter that is not used by other ACPI * reserved names. To this, we append hex 0x00 through 0xFF. These 5 prefixes * allow for 5*256 = 1280 unique names, probably sufficient for any single ASL * file. If this becomes too small, we can use alpha+numerals for a total * of 5*36*36 = 6480. */ #define ACPI_NUM_RES_PREFIX 5 static UINT32 AcpiGbl_NextResourceId = 0; static UINT8 AcpiGbl_NextPrefix = 0; static char AcpiGbl_Prefix[ACPI_NUM_RES_PREFIX] = {'Y','Z','J','K','X'}; /******************************************************************************* * * FUNCTION: AcpiDmCheckResourceReference * * PARAMETERS: Op - Parse Op for the AML opcode * WalkState - Current walk state (with valid scope) * * RETURN: None * * DESCRIPTION: Convert a reference to a resource descriptor to a symbolic * reference if possible * * NOTE: Bit index is used to transparently handle both resource bit * fields and byte fields. * ******************************************************************************/ void AcpiDmCheckResourceReference ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_PARSE_OBJECT *BufferNameOp; ACPI_PARSE_OBJECT *IndexOp; ACPI_NAMESPACE_NODE *BufferNode; ACPI_NAMESPACE_NODE *ResourceNode; const ACPI_OPCODE_INFO *OpInfo; UINT32 BitIndex; /* We are only interested in the CreateXxxxField opcodes */ OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); if (OpInfo->Type != AML_TYPE_CREATE_FIELD) { return; } /* Get the buffer term operand */ BufferNameOp = AcpiPsGetDepthNext (NULL, Op); /* Must be a named buffer, not an arg or local or method call */ if (BufferNameOp->Common.AmlOpcode != AML_INT_NAMEPATH_OP) { return; } /* Get the Index term, must be an integer constant to convert */ IndexOp = BufferNameOp->Common.Next; /* Major cheat: The Node field is also used for the Tag ptr. Clear it now */ IndexOp->Common.Node = NULL; OpInfo = AcpiPsGetOpcodeInfo (IndexOp->Common.AmlOpcode); if (OpInfo->ObjectType != ACPI_TYPE_INTEGER) { return; } /* Get the bit offset of the descriptor within the buffer */ if ((Op->Common.AmlOpcode == AML_CREATE_BIT_FIELD_OP) || (Op->Common.AmlOpcode == AML_CREATE_FIELD_OP)) { /* Index operand is a bit offset */ BitIndex = (UINT32) IndexOp->Common.Value.Integer; } else { /* Index operand is a byte offset, convert to bits */ BitIndex = (UINT32) ACPI_MUL_8 (IndexOp->Common.Value.Integer); } /* Lookup the buffer in the namespace */ Status = AcpiNsLookup (WalkState->ScopeInfo, BufferNameOp->Common.Value.String, ACPI_TYPE_BUFFER, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &BufferNode); if (ACPI_FAILURE (Status)) { return; } /* Validate object type, we must have a buffer */ if (BufferNode->Type != ACPI_TYPE_BUFFER) { return; } /* Find the resource descriptor node corresponding to the index */ ResourceNode = AcpiDmGetResourceNode (BufferNode, BitIndex); if (!ResourceNode) { return; } /* Translate the Index to a resource tag pathname */ AcpiGetTagPathname (IndexOp, BufferNode, ResourceNode, BitIndex); } /******************************************************************************* * * FUNCTION: AcpiDmGetResourceNode * * PARAMETERS: BufferNode - Node for the parent buffer * BitIndex - Index into the resource descriptor * * RETURN: Namespace node for the resource descriptor. NULL if not found * * DESCRIPTION: Find a resource descriptor that corresponds to the bit index * ******************************************************************************/ static ACPI_NAMESPACE_NODE * AcpiDmGetResourceNode ( ACPI_NAMESPACE_NODE *BufferNode, UINT32 BitIndex) { ACPI_NAMESPACE_NODE *Node; UINT32 ByteIndex = ACPI_DIV_8 (BitIndex); /* * Child list contains an entry for each resource descriptor. Find * the descriptor that corresponds to the Index. * * If there are no children, this is not a resource template */ Node = BufferNode->Child; while (Node) { /* * Check if the Index falls within this resource. * * Value contains the resource offset, Object contains the resource * length (both in bytes) */ if ((ByteIndex >= Node->Value) && (ByteIndex < (Node->Value + Node->Length))) { return (Node); } Node = Node->Peer; } return (NULL); } /******************************************************************************* * * FUNCTION: AcpiGetTagPathname * * PARAMETERS: BufferNode - Node for the parent buffer * ResourceNode - Node for a resource descriptor * BitIndex - Index into the resource descriptor * * RETURN: Full pathname for a resource tag. NULL if no match. * Path is returned in AML (packed) format. * * DESCRIPTION: Convert a BitIndex into a symbolic resource tag (full pathname) * ******************************************************************************/ static char * AcpiGetTagPathname ( ACPI_PARSE_OBJECT *IndexOp, ACPI_NAMESPACE_NODE *BufferNode, ACPI_NAMESPACE_NODE *ResourceNode, UINT32 BitIndex) { ACPI_STATUS Status; UINT32 ResourceBitIndex; UINT8 ResourceTableIndex; ACPI_SIZE RequiredSize; char *Pathname; char *PathnameEnd; AML_RESOURCE *Aml; ACPI_PARSE_OBJECT *Op; char *InternalPath; char *Tag; /* Get the Op that contains the actual buffer data */ Op = BufferNode->Op->Common.Value.Arg; Op = Op->Common.Next; if (!Op) { return (NULL); } /* Get the individual resource descriptor and validate it */ Aml = ACPI_CAST_PTR ( AML_RESOURCE, &Op->Named.Data[ResourceNode->Value]); Status = AcpiUtValidateResource (NULL, Aml, &ResourceTableIndex); if (ACPI_FAILURE (Status)) { return (NULL); } /* Get offset into this descriptor (from offset into entire buffer) */ ResourceBitIndex = BitIndex - ACPI_MUL_8 (ResourceNode->Value); /* Get the tag associated with this resource descriptor and offset */ Tag = AcpiDmGetResourceTag (ResourceBitIndex, Aml, ResourceTableIndex); if (!Tag) { return (NULL); } /* * Now that we know that we have a reference that can be converted to a * symbol, change the name of the resource to a unique name. */ AcpiDmUpdateResourceName (ResourceNode); /* Get the full pathname to the parent buffer */ RequiredSize = AcpiNsBuildNormalizedPath (BufferNode, NULL, 0, FALSE); if (!RequiredSize) { return (NULL); } Pathname = ACPI_ALLOCATE_ZEROED (RequiredSize + ACPI_PATH_SEGMENT_LENGTH); if (!Pathname) { return (NULL); } (void) AcpiNsBuildNormalizedPath (BufferNode, Pathname, RequiredSize, FALSE); /* * Create the full path to the resource and tag by: * 1) Remove the buffer nameseg from the end of the pathname * 2) Append the resource descriptor nameseg * 3) Append a dot * 4) Append the field tag nameseg * * Always using the full path is a bit brute force, the path can be * often be optimized with carats (if the original buffer namepath is a * single nameseg). This doesn't really matter, because these paths do not * end up in the final compiled AML, it's just an appearance issue for the * disassembled code. */ PathnameEnd = Pathname + (RequiredSize - ACPI_NAMESEG_SIZE - 1); ACPI_COPY_NAMESEG (PathnameEnd, ResourceNode->Name.Ascii); PathnameEnd += ACPI_NAMESEG_SIZE; *PathnameEnd = '.'; PathnameEnd++; ACPI_COPY_NAMESEG (PathnameEnd, Tag); /* Internalize the namepath to AML format */ Status = AcpiNsInternalizeName (Pathname, &InternalPath); ACPI_FREE (Pathname); if (ACPI_FAILURE (Status)) { return (NULL); } /* 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. * Note, Tag is a const that is part of a lookup table. */ IndexOp->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Tag); return (InternalPath); } /******************************************************************************* * * FUNCTION: AcpiDmUpdateResourceName * * PARAMETERS: ResourceNode - Node for a resource descriptor * * RETURN: Stores new name in the ResourceNode * * DESCRIPTION: Create a new, unique name for a resource descriptor. Used by * both the disassembly of the descriptor itself and any symbolic * references to the descriptor. Ignored if a unique name has * already been assigned to the resource. * * NOTE: Single threaded, suitable for applications only! * ******************************************************************************/ static void AcpiDmUpdateResourceName ( ACPI_NAMESPACE_NODE *ResourceNode) { char Name[ACPI_NAMESEG_SIZE]; /* Ignore if a unique name has already been assigned */ if (ResourceNode->Name.Integer != ACPI_DEFAULT_RESNAME) { return; } /* Generate a new ACPI name for the descriptor */ Name[0] = '_'; Name[1] = AcpiGbl_Prefix[AcpiGbl_NextPrefix]; Name[2] = AcpiUtHexToAsciiChar ((UINT64) AcpiGbl_NextResourceId, 4); Name[3] = AcpiUtHexToAsciiChar ((UINT64) AcpiGbl_NextResourceId, 0); /* Update globals for next name */ AcpiGbl_NextResourceId++; if (AcpiGbl_NextResourceId >= 256) { AcpiGbl_NextResourceId = 0; AcpiGbl_NextPrefix++; if (AcpiGbl_NextPrefix > ACPI_NUM_RES_PREFIX) { AcpiGbl_NextPrefix = 0; } } /* Change the resource descriptor name */ ResourceNode->Name.Integer = *ACPI_CAST_PTR (UINT32, &Name[0]); } /******************************************************************************* * * FUNCTION: AcpiDmGetResourceTag * * PARAMETERS: BitIndex - Index into the resource descriptor * Resource - Pointer to the raw resource data * ResourceIndex - Index corresponding to the resource type * * RETURN: Pointer to the resource tag (ACPI_NAME). NULL if no match. * * DESCRIPTION: Convert a BitIndex into a symbolic resource tag. * * Note: ResourceIndex should be previously validated and guaranteed to ve * valid. * ******************************************************************************/ static char * AcpiDmGetResourceTag ( UINT32 BitIndex, AML_RESOURCE *Resource, UINT8 ResourceIndex) { const ACPI_RESOURCE_TAG *TagList; char *Tag = NULL; /* Get the tag list for this resource descriptor type */ TagList = AcpiGbl_ResourceTags[ResourceIndex]; /* * Handle descriptors that have multiple subtypes */ switch (Resource->DescriptorType) { case ACPI_RESOURCE_NAME_ADDRESS16: case ACPI_RESOURCE_NAME_ADDRESS32: case ACPI_RESOURCE_NAME_ADDRESS64: case ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64: /* * Subtype differentiation is the flags. * Kindof brute force, but just blindly search for an index match */ if (Resource->Address.ResourceType == ACPI_ADDRESS_TYPE_MEMORY_RANGE) { Tag = AcpiDmSearchTagList (BitIndex, AcpiDmMemoryFlagTags); } else if (Resource->Address.ResourceType == ACPI_ADDRESS_TYPE_IO_RANGE) { Tag = AcpiDmSearchTagList (BitIndex, AcpiDmIoFlagTags); } /* If we found a match, all done. Else, drop to normal search below */ if (Tag) { return (Tag); } break; case ACPI_RESOURCE_NAME_GPIO: /* GPIO connection has 2 subtypes: Interrupt and I/O */ if (Resource->Gpio.ConnectionType > AML_RESOURCE_MAX_GPIOTYPE) { return (NULL); } TagList = AcpiGbl_GpioResourceTags[Resource->Gpio.ConnectionType]; break; case ACPI_RESOURCE_NAME_SERIAL_BUS: /* SerialBus has 4 subtypes: I2C, SPI, UART, and CSI2 */ if ((Resource->CommonSerialBus.Type == 0) || (Resource->CommonSerialBus.Type > AML_RESOURCE_MAX_SERIALBUSTYPE)) { return (NULL); } TagList = AcpiGbl_SerialResourceTags[Resource->CommonSerialBus.Type]; break; default: break; } /* Search for a match against the BitIndex */ if (TagList) { Tag = AcpiDmSearchTagList (BitIndex, TagList); } return (Tag); } /******************************************************************************* * * FUNCTION: AcpiDmSearchTagList * * PARAMETERS: BitIndex - Index into the resource descriptor * TagList - List to search * * RETURN: Pointer to a tag (ACPI_NAME). NULL if no match found. * * DESCRIPTION: Search a tag list for a match to the input BitIndex. Matches * a fixed offset to a symbolic resource tag name. * ******************************************************************************/ static char * AcpiDmSearchTagList ( UINT32 BitIndex, const ACPI_RESOURCE_TAG *TagList) { /* * Walk the null-terminated tag list to find a matching bit offset. * We are looking for an exact match. */ for ( ; TagList->Tag; TagList++) { if (BitIndex == TagList->BitIndex) { return (TagList->Tag); } } /* A matching offset was not found */ return (NULL); } /******************************************************************************* * * FUNCTION: AcpiDmFindResources * * PARAMETERS: Root - Root of the parse tree * * RETURN: None * * DESCRIPTION: Add all ResourceTemplate declarations to the namespace. Each * resource descriptor in each template is given a node -- used * for later conversion of resource references to symbolic refs. * ******************************************************************************/ void AcpiDmFindResources ( ACPI_PARSE_OBJECT *Root) { ACPI_PARSE_OBJECT *Op = Root; ACPI_PARSE_OBJECT *Parent; /* Walk the entire parse tree */ while (Op) { /* We are interested in Buffer() declarations */ if (Op->Common.AmlOpcode == AML_BUFFER_OP) { /* And only declarations of the form Name (XXXX, Buffer()... ) */ Parent = Op->Common.Parent; if (Parent->Common.AmlOpcode == AML_NAME_OP) { /* * If the buffer is a resource template, add the individual * resource descriptors to the namespace, as children of the * buffer node. */ if (ACPI_SUCCESS (AcpiDmIsResourceTemplate (NULL, Op))) { Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE; AcpiDmAddResourcesToNamespace (Parent->Common.Node, Op); } } } Op = AcpiPsGetDepthNext (Root, Op); } } /******************************************************************************* * * FUNCTION: AcpiDmAddResourcesToNamespace * * PARAMETERS: BufferNode - Node for the parent buffer * Op - Parse op for the buffer * * RETURN: None * * DESCRIPTION: Add an entire resource template to the namespace. Each * resource descriptor is added as a namespace node. * ******************************************************************************/ static void AcpiDmAddResourcesToNamespace ( ACPI_NAMESPACE_NODE *BufferNode, ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *NextOp; /* Get to the ByteData list */ NextOp = Op->Common.Value.Arg; NextOp = NextOp->Common.Next; if (!NextOp) { return; } /* Set Node and Op to point to each other */ BufferNode->Op = Op; Op->Common.Node = BufferNode; /* * Insert each resource into the namespace * NextOp contains the Aml pointer and the Aml length */ AcpiUtWalkAmlResources (NULL, (UINT8 *) NextOp->Named.Data, (ACPI_SIZE) NextOp->Common.Value.Integer, AcpiDmAddResourceToNamespace, (void **) BufferNode); } /******************************************************************************* * * FUNCTION: AcpiDmAddResourceToNamespace * * PARAMETERS: ACPI_WALK_AML_CALLBACK * BufferNode - Node for the parent buffer * * RETURN: Status * * DESCRIPTION: Add one resource descriptor to the namespace as a child of the * parent buffer. The same name is used for each descriptor. This * is changed later to a unique name if the resource is actually * referenced by an AML operator. * ******************************************************************************/ static ACPI_STATUS AcpiDmAddResourceToNamespace ( UINT8 *Aml, UINT32 Length, UINT32 Offset, UINT8 ResourceIndex, void **Context) { ACPI_STATUS Status; ACPI_GENERIC_STATE ScopeInfo; ACPI_NAMESPACE_NODE *Node; /* TBD: Don't need to add descriptors that have no tags defined? */ /* Add the resource to the namespace, as child of the buffer */ ScopeInfo.Scope.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Context); Status = AcpiNsLookup (&ScopeInfo, "_TMP", ACPI_TYPE_LOCAL_RESOURCE, ACPI_IMODE_LOAD_PASS2, ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE | ACPI_NS_PREFIX_IS_SCOPE, NULL, &Node); if (ACPI_FAILURE (Status)) { return (AE_OK); } /* Set the name to the default, changed later if resource is referenced */ Node->Name.Integer = ACPI_DEFAULT_RESNAME; /* Save the offset of the descriptor (within the original buffer) */ Node->Value = Offset; Node->Length = Length; return (AE_OK); } src/acpica/source/common/dmswitch.c000066400000000000000000000536071465205512700176650ustar00rootroot00000000000000/****************************************************************************** * * Module Name: adwalk - Disassembler routines for switch statements * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acdisasm.h" #include "acdispat.h" #include "acnamesp.h" #include "acapps.h" #define _COMPONENT ACPI_CA_DISASSEMBLER ACPI_MODULE_NAME ("dmswitch") static BOOLEAN AcpiDmIsSwitchBlock ( ACPI_PARSE_OBJECT *Op, char **Temp); static BOOLEAN AcpiDmIsCaseBlock ( ACPI_PARSE_OBJECT *Op); /******************************************************************************* * * FUNCTION: AcpiDmProcessSwitch * * PARAMETERS: Op - Object to be examined * * RETURN: ACPI_STATUS * * DESCRIPTION: Walk function to create a list of all temporary (_T_) objects. * If a While loop is found that can be converted to a Switch, do * the conversion, remove the temporary name from the list, and * mark the parse op with an IGNORE flag. * ******************************************************************************/ ACPI_STATUS AcpiDmProcessSwitch ( ACPI_PARSE_OBJECT *Op) { char *Temp = NULL; ACPI_PARSE_OBJECT_LIST *NewTemp; ACPI_PARSE_OBJECT_LIST *Current; ACPI_PARSE_OBJECT_LIST *Previous; BOOLEAN FoundTemp = FALSE; switch (Op->Common.AmlOpcode) { case AML_NAME_OP: Temp = (char *) (&Op->Named.Name); if (!strncmp(Temp, "_T_", 3)) { /* Allocate and init a new Temp List node */ NewTemp = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PARSE_OBJECT_LIST)); if (!NewTemp) { return (AE_NO_MEMORY); } if (AcpiGbl_TempListHead) { Current = AcpiGbl_TempListHead; AcpiGbl_TempListHead = NewTemp; AcpiGbl_TempListHead->Op = Op; AcpiGbl_TempListHead->Next = Current; } else { AcpiGbl_TempListHead = NewTemp; AcpiGbl_TempListHead->Op = Op; AcpiGbl_TempListHead->Next = NULL; } } break; case AML_WHILE_OP: if (!AcpiDmIsSwitchBlock (Op, &Temp)) { break; } /* Found a Switch */ Op->Common.DisasmOpcode = ACPI_DASM_SWITCH; Previous = Current = AcpiGbl_TempListHead; while (Current) { /* Note, if we get here Temp is not NULL */ if (!strncmp(Temp, (char *) (&Current->Op->Named.Name), 4)) { /* Match found. Ignore disassembly */ Current->Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; /* Remove from list */ if (Current == AcpiGbl_TempListHead) { AcpiGbl_TempListHead = Current->Next; } else { Previous->Next = Current->Next; } Current->Op = NULL; Current->Next = NULL; ACPI_FREE (Current); FoundTemp = TRUE; break; } Previous = Current; Current = Current->Next; } if (!FoundTemp) { fprintf (stderr, "Warning: Declaration for temp name %.4s not found\n", Temp); } break; default: break; } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDmClearTempList * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Removes any remaining temporary objects from global list and * frees * ******************************************************************************/ void AcpiDmClearTempList ( void) { ACPI_PARSE_OBJECT_LIST *Current; while (AcpiGbl_TempListHead) { Current = AcpiGbl_TempListHead; AcpiGbl_TempListHead = AcpiGbl_TempListHead->Next; Current->Op = NULL; Current->Next = NULL; ACPI_FREE (Current); } } /******************************************************************************* * * FUNCTION: AcpiDmIsSwitchBlock * * PARAMETERS: Op - While Object * Temp - Where the compiler temp name is returned * (_T_x) * * RETURN: TRUE if While block can be converted to a Switch/Case block * * DESCRIPTION: Determines if While block is a Switch/Case statement. Modifies * parse tree to allow for Switch/Case disassembly during walk. * * EXAMPLE: Example of parse tree to be converted * * While * One * Store * ByteConst * -NamePath- * If * LEqual * -NamePath- * Zero * Return * One * Else * Return * WordConst * Break * ******************************************************************************/ BOOLEAN AcpiDmIsSwitchBlock ( ACPI_PARSE_OBJECT *Op, char **Temp) { ACPI_PARSE_OBJECT *OneOp; ACPI_PARSE_OBJECT *StoreOp; ACPI_PARSE_OBJECT *NamePathOp; ACPI_PARSE_OBJECT *PredicateOp; ACPI_PARSE_OBJECT *CurrentOp; ACPI_PARSE_OBJECT *TempOp; /* Check for One Op Predicate */ OneOp = AcpiPsGetArg (Op, 0); if (!OneOp || (OneOp->Common.AmlOpcode != AML_ONE_OP)) { return (FALSE); } /* Check for Store Op */ StoreOp = OneOp->Common.Next; if (!StoreOp || (StoreOp->Common.AmlOpcode != AML_STORE_OP)) { return (FALSE); } /* Check for Name Op with _T_ string */ NamePathOp = AcpiPsGetArg (StoreOp, 1); if (!NamePathOp || (NamePathOp->Common.AmlOpcode != AML_INT_NAMEPATH_OP)) { return (FALSE); } if (strncmp ((char *) (NamePathOp->Common.Value.Name), "_T_", 3)) { return (FALSE); } *Temp = (char *) (NamePathOp->Common.Value.Name); /* This is a Switch/Case control block */ /* Ignore the One Op Predicate */ OneOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; /* Ignore the Store Op, but not the children */ StoreOp->Common.DisasmOpcode = ACPI_DASM_IGNORE_SINGLE; /* * First arg of Store Op is the Switch condition. * Mark it as a Switch predicate and as a parameter list for paren * closing and correct indentation. */ PredicateOp = AcpiPsGetArg (StoreOp, 0); PredicateOp->Common.DisasmOpcode = ACPI_DASM_SWITCH_PREDICATE; PredicateOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST; /* Ignore the Name Op */ NamePathOp->Common.DisasmFlags = ACPI_PARSEOP_IGNORE; /* Remaining opcodes are the Case statements (If/ElseIf's) */ CurrentOp = StoreOp->Common.Next; while (AcpiDmIsCaseBlock (CurrentOp)) { /* Block is a Case structure */ if (CurrentOp->Common.AmlOpcode == AML_ELSE_OP) { /* ElseIf */ CurrentOp->Common.DisasmOpcode = ACPI_DASM_CASE; CurrentOp = AcpiPsGetArg (CurrentOp, 0); } /* If */ CurrentOp->Common.DisasmOpcode = ACPI_DASM_CASE; /* * Mark the parse tree for Case disassembly. There are two * types of Case statements. The first type of statement begins with * an LEqual. The second starts with an LNot and uses a Match statement * on a Package of constants. */ TempOp = AcpiPsGetArg (CurrentOp, 0); switch (TempOp->Common.AmlOpcode) { case (AML_LOGICAL_EQUAL_OP): /* Ignore just the LEqual Op */ TempOp->Common.DisasmOpcode = ACPI_DASM_IGNORE_SINGLE; /* Ignore the NamePath Op */ TempOp = AcpiPsGetArg (TempOp, 0); TempOp->Common.DisasmFlags = ACPI_PARSEOP_IGNORE; /* * Second arg of LEqual will be the Case predicate. * Mark it as a predicate and also as a parameter list for paren * closing and correct indentation. */ PredicateOp = TempOp->Common.Next; PredicateOp->Common.DisasmOpcode = ACPI_DASM_SWITCH_PREDICATE; PredicateOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST; break; case (AML_LOGICAL_NOT_OP): /* * The Package will be the predicate of the Case statement. * It's under: * LNOT * LEQUAL * MATCH * PACKAGE */ /* Get the LEqual Op from LNot */ TempOp = AcpiPsGetArg (TempOp, 0); /* Get the Match Op from LEqual */ TempOp = AcpiPsGetArg (TempOp, 0); /* Get the Package Op from Match */ PredicateOp = AcpiPsGetArg (TempOp, 0); /* Mark as parameter list for paren closing */ PredicateOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST; /* * The Package list would be too deeply indented if we * chose to simply ignore the all the parent opcodes, so * we rearrange the parse tree instead. */ /* * Save the second arg of the If/Else Op which is the * block code of code for this Case statement. */ TempOp = AcpiPsGetArg (CurrentOp, 1); /* * Move the Package Op to the child (predicate) of the * Case statement. */ CurrentOp->Common.Value.Arg = PredicateOp; PredicateOp->Common.Parent = CurrentOp; /* Add the block code */ PredicateOp->Common.Next = TempOp; break; default: /* Should never get here */ break; } /* Advance to next Case block */ CurrentOp = CurrentOp->Common.Next; } /* If CurrentOp is now an Else, then this is a Default block */ if (CurrentOp && CurrentOp->Common.AmlOpcode == AML_ELSE_OP) { CurrentOp->Common.DisasmOpcode = ACPI_DASM_DEFAULT; } /* * From the first If advance to the Break op. It's possible to * have an Else (Default) op here when there is only one Case * statement, so check for it. */ CurrentOp = StoreOp->Common.Next->Common.Next; if (!CurrentOp) { return (FALSE); } if (CurrentOp->Common.AmlOpcode == AML_ELSE_OP) { CurrentOp = CurrentOp->Common.Next; if (!CurrentOp) { return (FALSE); } } /* Ignore the Break Op */ CurrentOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; return (TRUE); } /******************************************************************************* * * FUNCTION: AcpiDmIsCaseBlock * * PARAMETERS: Op - Object to test * * RETURN: TRUE if Object is beginning of a Case block. * * DESCRIPTION: Determines if an Object is the beginning of a Case block for a * Switch/Case statement. Parse tree must be one of the following * forms: * * Else (Optional) * If * LEqual * -NamePath- _T_x * * Else (Optional) * If * LNot * LEqual * Match * Package * ByteConst * -NamePath- _T_x * ******************************************************************************/ static BOOLEAN AcpiDmIsCaseBlock ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *CurrentOp; if (!Op) { return (FALSE); } /* Look for an If or ElseIf */ CurrentOp = Op; if (CurrentOp->Common.AmlOpcode == AML_ELSE_OP) { CurrentOp = AcpiPsGetArg (CurrentOp, 0); if (!CurrentOp) { return (FALSE); } } if (!CurrentOp || CurrentOp->Common.AmlOpcode != AML_IF_OP) { return (FALSE); } /* Child must be LEqual or LNot */ CurrentOp = AcpiPsGetArg (CurrentOp, 0); if (!CurrentOp) { return (FALSE); } switch (CurrentOp->Common.AmlOpcode) { case (AML_LOGICAL_EQUAL_OP): /* Next child must be NamePath with string _T_ */ CurrentOp = AcpiPsGetArg (CurrentOp, 0); if (!CurrentOp || !CurrentOp->Common.Value.Name || strncmp(CurrentOp->Common.Value.Name, "_T_", 3)) { return (FALSE); } break; case (AML_LOGICAL_NOT_OP): /* Child of LNot must be LEqual op */ CurrentOp = AcpiPsGetArg (CurrentOp, 0); if (!CurrentOp || (CurrentOp->Common.AmlOpcode != AML_LOGICAL_EQUAL_OP)) { return (FALSE); } /* Child of LNot must be Match op */ CurrentOp = AcpiPsGetArg (CurrentOp, 0); if (!CurrentOp || (CurrentOp->Common.AmlOpcode != AML_MATCH_OP)) { return (FALSE); } /* First child of Match must be Package op */ CurrentOp = AcpiPsGetArg (CurrentOp, 0); if (!CurrentOp || (CurrentOp->Common.AmlOpcode != AML_PACKAGE_OP)) { return (FALSE); } /* Third child of Match must be NamePath with string _T_ */ CurrentOp = AcpiPsGetArg (CurrentOp->Common.Parent, 2); if (!CurrentOp || !CurrentOp->Common.Value.Name || strncmp(CurrentOp->Common.Value.Name, "_T_", 3)) { return (FALSE); } break; default: return (FALSE); } return (TRUE); } src/acpica/source/common/dmtable.c000066400000000000000000002107271465205512700174510ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dmtable - Support for ACPI tables that contain no AML code * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdisasm.h" #include "actables.h" #include "aslcompiler.h" /* This module used for application-level code only */ #define _COMPONENT ACPI_CA_DISASSEMBLER ACPI_MODULE_NAME ("dmtable") const AH_TABLE * AcpiAhGetTableInfo ( char *Signature); /* Common format strings for commented values */ #define UINT8_FORMAT "%2.2X [%s]\n" #define UINT8_FORMAT_NO_NEWLINE "%2.2X [%s]" #define UINT16_FORMAT "%4.4X [%s]\n" #define UINT32_FORMAT "%8.8X [%s]\n" #define STRING_FORMAT "[%s]\n" /* These tables map a subtable type to a description string */ static const char *AcpiDmAestResourceNames[] = { "Cache Resource", "TLB Resource", "Generic Resource", "Unknown Resource Type" /* Reserved */ }; static const char *AcpiDmAestSubnames[] = { "Processor Error Node", "Memory Error Node", "SMMU Error Node", "Vendor-defined Error Node", "GIC Error Node", "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmAestCacheNames[] = { "Data Cache", "Instruction Cache", "Unified Cache", "Unknown Cache Type" /* Reserved */ }; static const char *AcpiDmAestGicNames[] = { "GIC CPU", "GIC Distributor", "GIC Redistributor", "GIC ITS", "Unknown GIC Interface Type" /* Reserved */ }; static const char *AcpiDmAestXfaceNames[] = { "System Register Interface", "Memory Mapped Interface", "Unknown Interface Type" /* Reserved */ }; static const char *AcpiDmAestXruptNames[] = { "Fault Handling Interrupt", "Error Recovery Interrupt", "Unknown Interrupt Type" /* Reserved */ }; static const char *AcpiDmAsfSubnames[] = { "ASF Information", "ASF Alerts", "ASF Remote Control", "ASF RMCP Boot Options", "ASF Address", "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmAsptSubnames[] = { "ASPT Global Registers", "ASPT SEV Mailbox Registers", "ASPT ACPI Mailbox Registers", "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmCdatSubnames[] = { "Device Scoped Memory Affinity Structure (DSMAS)", "Device scoped Latency and Bandwidth Information Structure (DSLBIS)", "Device Scoped Memory Side Cache Information Structure (DSMSCIS)", "Device Scoped Initiator Structure (DSIS)", "Device Scoped EFI Memory Type Structure (DSEMTS)", "Switch Scoped Latency and Bandwidth Information Structure (SSLBIS)", "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmCedtSubnames[] = { "CXL Host Bridge Structure", "CXL Fixed Memory Window Structure", "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmDmarSubnames[] = { "Hardware Unit Definition", "Reserved Memory Region", "Root Port ATS Capability", "Remapping Hardware Static Affinity", "ACPI Namespace Device Declaration", "SoC Integrated Address Translation Cache", "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmDmarScope[] = { "Reserved value", "PCI Endpoint Device", "PCI Bridge Device", "IOAPIC Device", "Message-capable HPET Device", "Namespace Device", "Unknown Scope Type" /* Reserved */ }; static const char *AcpiDmEinjActions[] = { "Begin Operation", "Get Trigger Table", "Set Error Type", "Get Error Type", "End Operation", "Execute Operation", "Check Busy Status", "Get Command Status", "Set Error Type With Address", "Get Execute Timings", "Unknown Action" }; static const char *AcpiDmEinjInstructions[] = { "Read Register", "Read Register Value", "Write Register", "Write Register Value", "Noop", "Flush Cacheline", "Unknown Instruction" }; static const char *AcpiDmErstActions[] = { "Begin Write Operation", "Begin Read Operation", "Begin Clear Operation", "End Operation", "Set Record Offset", "Execute Operation", "Check Busy Status", "Get Command Status", "Get Record Identifier", "Set Record Identifier", "Get Record Count", "Begin Dummy Write", "Unused/Unknown Action", "Get Error Address Range", "Get Error Address Length", "Get Error Attributes", "Execute Timings", "Unknown Action" }; static const char *AcpiDmErstInstructions[] = { "Read Register", "Read Register Value", "Write Register", "Write Register Value", "Noop", "Load Var1", "Load Var2", "Store Var1", "Add", "Subtract", "Add Value", "Subtract Value", "Stall", "Stall While True", "Skip Next If True", "GoTo", "Set Source Address", "Set Destination Address", "Move Data", "Unknown Instruction" }; static const char *AcpiDmGtdtSubnames[] = { "Generic Timer Block", "Generic Watchdog Timer", "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmHestSubnames[] = { "IA-32 Machine Check Exception", "IA-32 Corrected Machine Check", "IA-32 Non-Maskable Interrupt", "Unknown Subtable Type", /* 3 - Reserved */ "Unknown Subtable Type", /* 4 - Reserved */ "Unknown Subtable Type", /* 5 - Reserved */ "PCI Express Root Port AER", "PCI Express AER (AER Endpoint)", "PCI Express/PCI-X Bridge AER", "Generic Hardware Error Source", "Generic Hardware Error Source V2", "IA-32 Deferred Machine Check", "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmHestNotifySubnames[] = { "Polled", "External Interrupt", "Local Interrupt", "SCI", "NMI", "CMCI", /* ACPI 5.0 */ "MCE", /* ACPI 5.0 */ "GPIO", /* ACPI 6.0 */ "SEA", /* ACPI 6.1 */ "SEI", /* ACPI 6.1 */ "GSIV", /* ACPI 6.1 */ "Software Delegated Exception", /* ACPI 6.2 */ "Unknown Notify Type" /* Reserved */ }; static const char *AcpiDmHmatSubnames[] = { "Memory Proximity Domain Attributes", "System Locality Latency and Bandwidth Information", "Memory Side Cache Information", "Unknown Structure Type" /* Reserved */ }; static const char *AcpiDmMadtSubnames[] = { "Processor Local APIC", /* ACPI_MADT_TYPE_LOCAL_APIC */ "I/O APIC", /* ACPI_MADT_TYPE_IO_APIC */ "Interrupt Source Override", /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */ "NMI Source", /* ACPI_MADT_TYPE_NMI_SOURCE */ "Local APIC NMI", /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */ "Local APIC Address Override", /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */ "I/O SAPIC", /* ACPI_MADT_TYPE_IO_SAPIC */ "Local SAPIC", /* ACPI_MADT_TYPE_LOCAL_SAPIC */ "Platform Interrupt Sources", /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */ "Processor Local x2APIC", /* ACPI_MADT_TYPE_LOCAL_X2APIC */ "Local x2APIC NMI", /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */ "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */ "Generic Interrupt Distributor", /* ACPI_MADT_GENERIC_DISTRIBUTOR */ "Generic MSI Frame", /* ACPI_MADT_GENERIC_MSI_FRAME */ "Generic Interrupt Redistributor", /* ACPI_MADT_GENERIC_REDISTRIBUTOR */ "Generic Interrupt Translator", /* ACPI_MADT_GENERIC_TRANSLATOR */ "Mutiprocessor Wakeup", /* ACPI_MADT_TYPE_MULTIPROC_WAKEUP */ "CPU Core Interrupt Controller", /* ACPI_MADT_TYPE_CORE_PIC */ "Legacy I/O Interrupt Controller", /* ACPI_MADT_TYPE_LIO_PIC */ "HT Interrupt Controller", /* ACPI_MADT_TYPE_HT_PIC */ "Extend I/O Interrupt Controller", /* ACPI_MADT_TYPE_EIO_PIC */ "MSI Interrupt Controller", /* ACPI_MADT_TYPE_MSI_PIC */ "Bridge I/O Interrupt Controller", /* ACPI_MADT_TYPE_BIO_PIC */ "LPC Interrupt Controller", /* ACPI_MADT_TYPE_LPC_PIC */ "RISC-V Interrupt Controller", /* ACPI_MADT_TYPE_RINTC */ "RISC-V Incoming MSI Controller", /* ACPI_MADT_TYPE_IMSIC */ "RISC-V APLIC Controller", /* ACPI_MADT_TYPE_APLIC */ "RISC-V PLIC Controller", /* ACPI_MADT_TYPE_PLIC */ "Unknown Subtable Type", /* Reserved */ "Types 80-FF are used for OEM data" /* Reserved for OEM data */ }; static const char *AcpiDmMpamSubnames[] = { "Processor cache", /* ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE */ "Memory", /* ACPI_MPAM_LOCATION_TYPE_MEMORY */ "SMMU", /* ACPI_MPAM_LOCATION_TYPE_SMMU */ "Memory-side cache", /* ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE */ "ACPI device", /* ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE */ "Interconnect", /* ACPI_MPAM_LOCATION_TYPE_INTERCONNECT */ "Unknown" /* ACPI_MPAM_LOCATION_TYPE_UNKNOWN */ }; static const char *AcpiDmNfitSubnames[] = { "System Physical Address Range", /* ACPI_NFIT_TYPE_SYSTEM_ADDRESS */ "Memory Range Map", /* ACPI_NFIT_TYPE_MEMORY_MAP */ "Interleave Info", /* ACPI_NFIT_TYPE_INTERLEAVE */ "SMBIOS Information", /* ACPI_NFIT_TYPE_SMBIOS */ "NVDIMM Control Region", /* ACPI_NFIT_TYPE_CONTROL_REGION */ "NVDIMM Block Data Window Region", /* ACPI_NFIT_TYPE_DATA_REGION */ "Flush Hint Address", /* ACPI_NFIT_TYPE_FLUSH_ADDRESS */ "Platform Capabilities", /* ACPI_NFIT_TYPE_CAPABILITIES */ "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmPcctSubnames[] = { "Generic Communications Subspace", /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */ "HW-Reduced Comm Subspace", /* ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE */ "HW-Reduced Comm Subspace Type2", /* ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 */ "Extended PCC Master Subspace", /* ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE */ "Extended PCC Slave Subspace", /* ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE */ "HW Registers based Comm Subspace", /* ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE */ "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmPhatSubnames[] = { "Firmware Version Data", /* ACPI_PHAT_TYPE_FW_VERSION_DATA */ "Firmware Health Data", /* ACPI_PHAT_TYPE_FW_HEALTH_DATA */ "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmPmttSubnames[] = { "Socket", /* ACPI_PMTT_TYPE_SOCKET */ "Memory Controller", /* ACPI_PMTT_TYPE_CONTROLLER */ "Physical Component (DIMM)", /* ACPI_PMTT_TYPE_DIMM */ "Unknown Subtable Type", /* Reserved */ "Vendor Specific" /* ACPI_PMTT_TYPE_VENDOR */ }; static const char *AcpiDmPpttSubnames[] = { "Processor Hierarchy Node", /* ACPI_PPTT_TYPE_PROCESSOR */ "Cache Type", /* ACPI_PPTT_TYPE_CACHE */ "ID", /* ACPI_PPTT_TYPE_ID */ "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmRgrtSubnames[] = { "Unknown/Reserved Image Type", /* ACPI_RGRT_TYPE_RESERVED0 */ "Type PNG" /* ACPI_RGRT_IMAGE_TYPE_PNG */ }; static const char *AcpiDmSdevSubnames[] = { "Namespace Device", /* ACPI_SDEV_TYPE_NAMESPACE_DEVICE */ "PCIe Endpoint Device", /* ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE */ "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmSratSubnames[] = { "Processor Local APIC/SAPIC Affinity", "Memory Affinity", "Processor Local x2APIC Affinity", "GICC Affinity", "GIC ITS Affinity", /* Acpi 6.2 */ "Generic Initiator Affinity", /* Acpi 6.3 */ "Generic Port Affinity", /* Acpi 6.4 */ "RINTC Affinity", /* Acpi 6.6 */ "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmTpm2Subnames[] = { "Illegal Start Method value", "Reserved", "ACPI Start Method", "Reserved", "Reserved", "Reserved", "Memory Mapped I/O", "Command Response Buffer", "Command Response Buffer with ACPI Start Method", "Reserved", "Reserved", "Command Response Buffer with ARM SMC", "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmIvrsSubnames[] = { "Hardware Definition Block (IVHD)", "Hardware Definition Block - Mixed Format (IVHD)", "Memory Definition Block (IVMD)", "Unknown/Reserved Subtable Type" /* Reserved */ }; static const char *AcpiDmIvrsDevEntryNames[] = { "Unknown/Reserved Device Entry Type", /* 0- Reserved */ "Device Entry: Select All Devices", /* 1 */ "Device Entry: Select One Device", /* 2 */ "Device Entry: Start of Range", /* 3 */ "Device Entry: End of Range", /* 4 */ "Device Entry: Alias Select", /* 66 */ "Device Entry: Alias Start of Range", /* 67 */ "Unknown/Reserved Device Entry Type", /* 68- Reserved */ "Unknown/Reserved Device Entry Type", /* 69- Reserved */ "Device Entry: Extended Select", /* 70 */ "Device Entry: Extended Start of Range", /* 71 */ "Device Entry: Special Device", /* 72 */ "Device Entry: ACPI HID Named Device", /* 240 */ "Unknown/Reserved Device Entry Type" /* Reserved */ }; static const char *AcpiDmLpitSubnames[] = { "Native C-state Idle Structure", "Unknown Subtable Type" /* Reserved */ }; static const char *AcpiDmViotSubnames[] = { "Unknown Subtable Type", /* 0 -Reserved */ "PCI Range", "MMIO Endpoint", "VirtIO-PCI IOMMU", "VirtIO-MMIO IOMMU", "Unknown Subtable Type" /* Reserved */ }; #define ACPI_FADT_PM_RESERVED 9 static const char *AcpiDmFadtProfiles[] = { "Unspecified", "Desktop", "Mobile", "Workstation", "Enterprise Server", "SOHO Server", "Appliance PC", "Performance Server", "Tablet", "Unknown Profile Type" }; #define ACPI_GAS_WIDTH_RESERVED 5 static const char *AcpiDmGasAccessWidth[] = { "Undefined/Legacy", "Byte Access:8", "Word Access:16", "DWord Access:32", "QWord Access:64", "Unknown Width Encoding" }; static const char *AcpiDmRhctSubnames[] = { "RISC-V ISA string structure", /* ACPI_RHCT_ISA_STRING */ "RISC-V CMO node structure", /* ACPI_RHCT_CMO_NODE */ "RISC-V MMU node structure", /* ACPI_RHCT_MMU_NODE */ "RISC-V Hart Info structure", /* ACPI_RHCT_HART_INFO */ }; /******************************************************************************* * * ACPI Table Data, indexed by signature. * * Each entry contains: Signature, Table Info, Handler, DtHandler, * Template, Description * * Simple tables have only a TableInfo structure, complex tables have a * handler. This table must be NULL terminated. RSDP and FACS are * special-cased elsewhere. * * Note: Any tables added here should be duplicated within * AcpiGbl_SupportedTables in the file common/ahtable.c * ******************************************************************************/ const ACPI_DMTABLE_DATA AcpiDmTableData[] = { {ACPI_SIG_AEST, NULL, AcpiDmDumpAest, DtCompileAest, TemplateAest}, {ACPI_SIG_AGDI, AcpiDmTableInfoAgdi, NULL, NULL, TemplateAgdi}, {ACPI_SIG_APMT, NULL, AcpiDmDumpApmt, DtCompileApmt, TemplateApmt}, {ACPI_SIG_ASF, NULL, AcpiDmDumpAsf, DtCompileAsf, TemplateAsf}, {ACPI_SIG_ASPT, NULL, AcpiDmDumpAspt, DtCompileAspt, TemplateAspt}, {ACPI_SIG_BDAT, AcpiDmTableInfoBdat, NULL, NULL, TemplateBdat}, {ACPI_SIG_BERT, AcpiDmTableInfoBert, NULL, NULL, TemplateBert}, {ACPI_SIG_BGRT, AcpiDmTableInfoBgrt, NULL, NULL, TemplateBgrt}, {ACPI_SIG_BOOT, AcpiDmTableInfoBoot, NULL, NULL, TemplateBoot}, {ACPI_SIG_CCEL, AcpiDmTableInfoCcel, NULL, NULL, TemplateCcel}, {ACPI_SIG_CDAT, NULL, AcpiDmDumpCdat, NULL, TemplateCdat}, {ACPI_SIG_CEDT, NULL, AcpiDmDumpCedt, DtCompileCedt, TemplateCedt}, {ACPI_SIG_CPEP, NULL, AcpiDmDumpCpep, DtCompileCpep, TemplateCpep}, {ACPI_SIG_CSRT, NULL, AcpiDmDumpCsrt, DtCompileCsrt, TemplateCsrt}, {ACPI_SIG_DBG2, AcpiDmTableInfoDbg2, AcpiDmDumpDbg2, DtCompileDbg2, TemplateDbg2}, {ACPI_SIG_DBGP, AcpiDmTableInfoDbgp, NULL, NULL, TemplateDbgp}, {ACPI_SIG_DMAR, NULL, AcpiDmDumpDmar, DtCompileDmar, TemplateDmar}, {ACPI_SIG_DRTM, NULL, AcpiDmDumpDrtm, DtCompileDrtm, TemplateDrtm}, {ACPI_SIG_ECDT, AcpiDmTableInfoEcdt, NULL, NULL, TemplateEcdt}, {ACPI_SIG_EINJ, NULL, AcpiDmDumpEinj, DtCompileEinj, TemplateEinj}, {ACPI_SIG_ERST, NULL, AcpiDmDumpErst, DtCompileErst, TemplateErst}, {ACPI_SIG_FADT, NULL, AcpiDmDumpFadt, DtCompileFadt, TemplateFadt}, {ACPI_SIG_FPDT, NULL, AcpiDmDumpFpdt, DtCompileFpdt, TemplateFpdt}, {ACPI_SIG_GTDT, NULL, AcpiDmDumpGtdt, DtCompileGtdt, TemplateGtdt}, {ACPI_SIG_HEST, NULL, AcpiDmDumpHest, DtCompileHest, TemplateHest}, {ACPI_SIG_HMAT, NULL, AcpiDmDumpHmat, DtCompileHmat, TemplateHmat}, {ACPI_SIG_HPET, AcpiDmTableInfoHpet, NULL, NULL, TemplateHpet}, {ACPI_SIG_IORT, NULL, AcpiDmDumpIort, DtCompileIort, TemplateIort}, {ACPI_SIG_IVRS, NULL, AcpiDmDumpIvrs, DtCompileIvrs, TemplateIvrs}, {ACPI_SIG_LPIT, NULL, AcpiDmDumpLpit, DtCompileLpit, TemplateLpit}, {ACPI_SIG_MADT, NULL, AcpiDmDumpMadt, DtCompileMadt, TemplateMadt}, {ACPI_SIG_MCFG, NULL, AcpiDmDumpMcfg, DtCompileMcfg, TemplateMcfg}, {ACPI_SIG_MCHI, AcpiDmTableInfoMchi, NULL, NULL, TemplateMchi}, {ACPI_SIG_MPAM, NULL, AcpiDmDumpMpam, DtCompileMpam, TemplateMpam}, {ACPI_SIG_MPST, AcpiDmTableInfoMpst, AcpiDmDumpMpst, DtCompileMpst, TemplateMpst}, {ACPI_SIG_MSCT, NULL, AcpiDmDumpMsct, DtCompileMsct, TemplateMsct}, {ACPI_SIG_MSDM, NULL, AcpiDmDumpSlic, DtCompileSlic, TemplateMsdm}, {ACPI_SIG_NFIT, AcpiDmTableInfoNfit, AcpiDmDumpNfit, DtCompileNfit, TemplateNfit}, {ACPI_SIG_NHLT, NULL, NULL, NULL, NULL}, {ACPI_SIG_PCCT, AcpiDmTableInfoPcct, AcpiDmDumpPcct, DtCompilePcct, TemplatePcct}, {ACPI_SIG_PDTT, AcpiDmTableInfoPdtt, AcpiDmDumpPdtt, DtCompilePdtt, TemplatePdtt}, {ACPI_SIG_PHAT, NULL, AcpiDmDumpPhat, DtCompilePhat, TemplatePhat}, {ACPI_SIG_PMTT, NULL, AcpiDmDumpPmtt, DtCompilePmtt, TemplatePmtt}, {ACPI_SIG_PPTT, NULL, AcpiDmDumpPptt, DtCompilePptt, TemplatePptt}, {ACPI_SIG_PRMT, NULL, AcpiDmDumpPrmt, DtCompilePrmt, TemplatePrmt}, {ACPI_SIG_RASF, AcpiDmTableInfoRasf, NULL, NULL, TemplateRasf}, {ACPI_SIG_RAS2, AcpiDmTableInfoRas2, AcpiDmDumpRas2, DtCompileRas2, TemplateRas2}, {ACPI_SIG_RGRT, NULL, AcpiDmDumpRgrt, DtCompileRgrt, TemplateRgrt}, {ACPI_SIG_RHCT, NULL, AcpiDmDumpRhct, DtCompileRhct, TemplateRhct}, {ACPI_SIG_RSDT, NULL, AcpiDmDumpRsdt, DtCompileRsdt, TemplateRsdt}, {ACPI_SIG_S3PT, NULL, NULL, NULL, TemplateS3pt}, {ACPI_SIG_SBST, AcpiDmTableInfoSbst, NULL, NULL, TemplateSbst}, {ACPI_SIG_SDEI, AcpiDmTableInfoSdei, NULL, NULL, TemplateSdei}, {ACPI_SIG_SDEV, AcpiDmTableInfoSdev, AcpiDmDumpSdev, DtCompileSdev, TemplateSdev}, {ACPI_SIG_SLIC, NULL, AcpiDmDumpSlic, DtCompileSlic, TemplateSlic}, {ACPI_SIG_SLIT, NULL, AcpiDmDumpSlit, DtCompileSlit, TemplateSlit}, {ACPI_SIG_SPCR, AcpiDmTableInfoSpcr, NULL, NULL, TemplateSpcr}, {ACPI_SIG_SPMI, AcpiDmTableInfoSpmi, NULL, NULL, TemplateSpmi}, {ACPI_SIG_SRAT, NULL, AcpiDmDumpSrat, DtCompileSrat, TemplateSrat}, {ACPI_SIG_STAO, NULL, AcpiDmDumpStao, DtCompileStao, TemplateStao}, {ACPI_SIG_SVKL, AcpiDmTableInfoSvkl, AcpiDmDumpSvkl, DtCompileSvkl, TemplateSvkl}, {ACPI_SIG_TCPA, NULL, AcpiDmDumpTcpa, DtCompileTcpa, TemplateTcpa}, {ACPI_SIG_TDEL, AcpiDmTableInfoTdel, NULL, NULL, TemplateTdel}, {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2, AcpiDmDumpTpm2, DtCompileTpm2, TemplateTpm2}, {ACPI_SIG_UEFI, AcpiDmTableInfoUefi, NULL, DtCompileUefi, TemplateUefi}, {ACPI_SIG_VIOT, AcpiDmTableInfoViot, AcpiDmDumpViot, DtCompileViot, TemplateViot}, {ACPI_SIG_WAET, AcpiDmTableInfoWaet, NULL, NULL, TemplateWaet}, {ACPI_SIG_WDAT, NULL, AcpiDmDumpWdat, DtCompileWdat, TemplateWdat}, {ACPI_SIG_WDDT, AcpiDmTableInfoWddt, NULL, NULL, TemplateWddt}, {ACPI_SIG_WDRT, AcpiDmTableInfoWdrt, NULL, NULL, TemplateWdrt}, {ACPI_SIG_WPBT, NULL, AcpiDmDumpWpbt, DtCompileWpbt, TemplateWpbt}, {ACPI_SIG_WSMT, AcpiDmTableInfoWsmt, NULL, NULL, TemplateWsmt}, {ACPI_SIG_XENV, AcpiDmTableInfoXenv, NULL, NULL, TemplateXenv}, {ACPI_SIG_XSDT, NULL, AcpiDmDumpXsdt, DtCompileXsdt, TemplateXsdt}, {NULL, NULL, NULL, NULL, NULL} }; /******************************************************************************* * * FUNCTION: AcpiDmGetTableData * * PARAMETERS: Signature - ACPI signature (4 chars) to match * * RETURN: Pointer to a valid ACPI_DMTABLE_DATA. Null if no match found. * * DESCRIPTION: Find a match in the global table of supported ACPI tables * ******************************************************************************/ const ACPI_DMTABLE_DATA * AcpiDmGetTableData ( char *Signature) { const ACPI_DMTABLE_DATA *Info; for (Info = AcpiDmTableData; Info->Signature; Info++) { if (ACPI_COMPARE_NAMESEG (Signature, Info->Signature)) { return (Info); } } return (NULL); } /******************************************************************************* * * FUNCTION: AcpiDmDumpDataTable * * PARAMETERS: Table - An ACPI table * * RETURN: None. * * DESCRIPTION: Format the contents of an ACPI data table (any table other * than an SSDT or DSDT that does not contain executable AML code) * ******************************************************************************/ void AcpiDmDumpDataTable ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; const ACPI_DMTABLE_DATA *TableData; UINT32 Length; /* Ignore tables that contain AML */ if (AcpiUtIsAmlTable (Table)) { if (AslGbl_VerboseTemplates) { /* Dump the raw table data */ Length = Table->Length; AcpiOsPrintf ("\n/*\n%s: Length %d (0x%X)\n\n", ACPI_RAW_TABLE_DATA_HEADER, Length, Length); AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, Table), Length, DB_BYTE_DISPLAY, 0); AcpiOsPrintf (" */\n"); } return; } /* * Handle tables that don't use the common ACPI table header structure. * Currently, these are the FACS, RSDP, S3PT and CDAT. */ if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_FACS)) { Length = Table->Length; Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFacs); if (ACPI_FAILURE (Status)) { return; } } else if (ACPI_VALIDATE_RSDP_SIG (ACPI_CAST_PTR (ACPI_TABLE_RSDP, Table)->Signature)) { Length = AcpiDmDumpRsdp (Table); } else if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_S3PT)) { Length = AcpiDmDumpS3pt (Table); } else if (!AcpiUtValidNameseg (Table->Signature)) { /* * For CDAT we are assuming that there should be at least one non-ASCII * byte in the (normally) 4-character Signature field (at least the * high-order byte should be zero). */ if (AcpiGbl_CDAT) { /* * Invalid signature and <-ds CDAT> was specified on the command line. * Therefore, we have a CDAT table. */ AcpiDmDumpCdat (Table); } else { fprintf (stderr, "Table has an invalid signature\n"); } return; } else { /* * All other tables must use the common ACPI table header, dump it now */ Length = Table->Length; Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHeader); if (ACPI_FAILURE (Status)) { return; } AcpiOsPrintf ("\n"); /* Match signature and dispatch appropriately */ TableData = AcpiDmGetTableData (Table->Signature); if (!TableData) { if (!strncmp (Table->Signature, "OEM", 3)) { AcpiOsPrintf ("\n**** OEM-defined ACPI table [%4.4s], unknown contents\n\n", Table->Signature); } else { AcpiOsPrintf ("\n**** Unknown ACPI table signature [%4.4s]\n\n", Table->Signature); fprintf (stderr, "Unknown ACPI table signature [%4.4s], ", Table->Signature); if (!AcpiGbl_ForceAmlDisassembly) { fprintf (stderr, "decoding ACPI table header only\n"); } else { fprintf (stderr, "assuming table contains valid AML code\n"); } } } else if (TableData->TableHandler) { /* Complex table, has a handler */ TableData->TableHandler (Table); } else if (TableData->TableInfo) { /* Simple table, just walk the info table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, TableData->TableInfo); if (ACPI_FAILURE (Status)) { return; } } } if (!AslGbl_DoTemplates || AslGbl_VerboseTemplates) { /* Dump the raw table data */ AcpiOsPrintf ("\n%s: Length %d (0x%X)\n\n", ACPI_RAW_TABLE_DATA_HEADER, Length, Length); AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, Table), Length, DB_BYTE_DISPLAY, 0); } } /******************************************************************************* * * FUNCTION: AcpiDmLineHeader * * PARAMETERS: Offset - Current byte offset, from table start * ByteLength - Length of the field in bytes, 0 for flags * Name - Name of this field * * RETURN: None * * DESCRIPTION: Utility routines for formatting output lines. Displays the * current table offset in hex and decimal, the field length, * and the field name. * ******************************************************************************/ void AcpiDmLineHeader ( UINT32 Offset, UINT32 ByteLength, char *Name) { /* Allow a null name for fields that span multiple lines (large buffers) */ if (!Name) { Name = ""; } if (AslGbl_DoTemplates && !AslGbl_VerboseTemplates) /* Terse template */ { if (ByteLength) { AcpiOsPrintf ("[%.4d] %34s : ", ByteLength, Name); } else { if (*Name) { AcpiOsPrintf ("%41s : ", Name); } else { AcpiOsPrintf ("%41s ", Name); } } } else /* Normal disassembler or verbose template */ { if (ByteLength) { AcpiOsPrintf ("[%3.3Xh %4.4u %3.3Xh] %27s : ", Offset, Offset, ByteLength, Name); } else { if (*Name) { AcpiOsPrintf ("%44s : ", Name); } else { AcpiOsPrintf ("%44s ", Name); } } } } void AcpiDmLineHeader2 ( UINT32 Offset, UINT32 ByteLength, char *Name, UINT32 Value) { if (AslGbl_DoTemplates && !AslGbl_VerboseTemplates) /* Terse template */ { if (ByteLength) { AcpiOsPrintf ("[%.4d] %30s %3d : ", ByteLength, Name, Value); } else { AcpiOsPrintf ("%36s % 3d : ", Name, Value); } } else /* Normal disassembler or verbose template */ { if (ByteLength) { AcpiOsPrintf ("[%3.3Xh %4.4u %3.3Xh] %24s %3d : ", Offset, Offset, ByteLength, Name, Value); } else { AcpiOsPrintf ("[%3.3Xh %4.4u ] %24s %3d : ", Offset, Offset, Name, Value); } } } /******************************************************************************* * * FUNCTION: AcpiDmDumpTable * * PARAMETERS: TableLength - Length of the entire ACPI table * TableOffset - Starting offset within the table for this * sub-descriptor (0 if main table) * Table - The ACPI table * SubtableLength - Length of this sub-descriptor * Info - Info table for this ACPI table * * RETURN: Status * * DESCRIPTION: Display ACPI table contents by walking the Info table. * * Note: This function must remain in sync with DtGetFieldLength. * ******************************************************************************/ ACPI_STATUS AcpiDmDumpTable ( UINT32 TableLength, UINT32 TableOffset, void *Table, UINT32 SubtableLength, ACPI_DMTABLE_INFO *Info) { UINT8 *Target; UINT32 CurrentOffset; UINT32 ByteLength; UINT8 Temp8; UINT16 Temp16; UINT32 Temp32; UINT64 Value; const AH_TABLE *TableData; const char *Name; BOOLEAN LastOutputBlankLine = FALSE; ACPI_STATUS Status; char RepairedName[8]; if (!Info) { AcpiOsPrintf ("Display not implemented\n"); return (AE_NOT_IMPLEMENTED); } /* Walk entire Info table; Null name terminates */ for (; Info->Name; Info++) { /* * Target points to the field within the ACPI Table. CurrentOffset is * the offset of the field from the start of the main table. */ Target = ACPI_ADD_PTR (UINT8, Table, Info->Offset); CurrentOffset = TableOffset + Info->Offset; /* Check for beyond subtable end or (worse) beyond EOT */ if (SubtableLength && (Info->Offset > SubtableLength)) { AcpiOsPrintf ( "/**** ACPI subtable terminates early (Len %u) - " "may be older version (dump table) */\n", SubtableLength); /* Move on to next subtable */ return (AE_OK); } if (CurrentOffset >= TableLength) { AcpiOsPrintf ( "/**** ACPI table terminates " "in the middle of a data structure! (dump table) \n" "CurrentOffset: %X, TableLength: %X ***/", CurrentOffset, TableLength); return (AE_BAD_DATA); } /* Generate the byte length for this field */ switch (Info->Opcode) { case ACPI_DMT_UINT8: case ACPI_DMT_CHKSUM: case ACPI_DMT_SPACEID: case ACPI_DMT_ACCWIDTH: case ACPI_DMT_CEDT: case ACPI_DMT_IVRS: case ACPI_DMT_IVRS_DE: case ACPI_DMT_GTDT: case ACPI_DMT_MADT: case ACPI_DMT_MPAM_LOCATOR: case ACPI_DMT_PCCT: case ACPI_DMT_PMTT: case ACPI_DMT_PPTT: case ACPI_DMT_RGRT: case ACPI_DMT_SDEV: case ACPI_DMT_SRAT: case ACPI_DMT_AEST: case ACPI_DMT_AEST_RES: case ACPI_DMT_AEST_XFACE: case ACPI_DMT_AEST_XRUPT: case ACPI_DMT_ASF: case ACPI_DMT_CDAT: case ACPI_DMT_HESTNTYP: case ACPI_DMT_FADTPM: case ACPI_DMT_EINJACT: case ACPI_DMT_EINJINST: case ACPI_DMT_ERSTACT: case ACPI_DMT_ERSTINST: case ACPI_DMT_DMAR_SCOPE: case ACPI_DMT_VIOT: ByteLength = 1; break; case ACPI_DMT_ASPT: case ACPI_DMT_UINT16: case ACPI_DMT_DMAR: case ACPI_DMT_HEST: case ACPI_DMT_HMAT: case ACPI_DMT_NFIT: case ACPI_DMT_PHAT: case ACPI_DMT_RHCT: ByteLength = 2; break; case ACPI_DMT_UINT24: ByteLength = 3; break; case ACPI_DMT_UINT32: case ACPI_DMT_AEST_CACHE: case ACPI_DMT_AEST_GIC: case ACPI_DMT_NAME4: case ACPI_DMT_SIG: case ACPI_DMT_LPIT: case ACPI_DMT_TPM2: ByteLength = 4; break; case ACPI_DMT_UINT40: ByteLength = 5; break; case ACPI_DMT_UINT48: case ACPI_DMT_NAME6: ByteLength = 6; break; case ACPI_DMT_UINT56: case ACPI_DMT_BUF7: ByteLength = 7; break; case ACPI_DMT_UINT64: case ACPI_DMT_NAME8: ByteLength = 8; break; case ACPI_DMT_BUF10: ByteLength = 10; break; case ACPI_DMT_BUF12: ByteLength = 12; break; case ACPI_DMT_BUF16: case ACPI_DMT_UUID: ByteLength = 16; break; case ACPI_DMT_BUF18: ByteLength = 18; break; case ACPI_DMT_BUF128: ByteLength = 128; break; case ACPI_DMT_WPBT_UNICODE: ByteLength = SubtableLength; CurrentOffset = sizeof (ACPI_TABLE_WPBT); break; case ACPI_DMT_UNICODE: case ACPI_DMT_BUFFER: case ACPI_DMT_RAW_BUFFER: ByteLength = SubtableLength; break; case ACPI_DMT_PMTT_VENDOR: /* * Calculate the length of the vendor data for the PMTT table: * Length = (Current Subtable ptr + Subtable length) - * Start of the vendor data (Target) */ ByteLength = ((ACPI_CAST_PTR (char, Table) + (ACPI_CAST_PTR (ACPI_PMTT_HEADER, Table)->Length)) - ACPI_CAST_PTR (char, Target)); break; case ACPI_DMT_STRING: ByteLength = strlen (ACPI_CAST_PTR (char, Target)) + 1; break; case ACPI_DMT_IVRS_UNTERMINATED_STRING: ByteLength = ((ACPI_CAST_PTR (ACPI_IVRS_DEVICE_HID, Target) -1)->UidLength); break; case ACPI_DMT_GAS: if (!LastOutputBlankLine) { AcpiOsPrintf ("\n"); LastOutputBlankLine = TRUE; } ByteLength = sizeof (ACPI_GENERIC_ADDRESS); break; case ACPI_DMT_HESTNTFY: if (!LastOutputBlankLine) { AcpiOsPrintf ("\n"); LastOutputBlankLine = TRUE; } ByteLength = sizeof (ACPI_HEST_NOTIFY); break; case ACPI_DMT_IORTMEM: if (!LastOutputBlankLine) { LastOutputBlankLine = FALSE; } ByteLength = sizeof (ACPI_IORT_MEMORY_ACCESS); break; default: ByteLength = 0; break; } /* Check if we are beyond a subtable, or (worse) beyond EOT */ if (CurrentOffset + ByteLength > TableLength) { if (SubtableLength) { AcpiOsPrintf ( "/**** ACPI subtable terminates early - " "may be older version (dump table) */\n"); /* Move on to next subtable */ return (AE_OK); } AcpiOsPrintf ( "/**** ACPI table terminates " "in the middle of a data structure! */\n"); return (AE_BAD_DATA); } if (Info->Opcode == ACPI_DMT_EXTRA_TEXT) { AcpiOsPrintf ("%s", Info->Name); continue; } /* Start a new line and decode the opcode */ AcpiDmLineHeader (CurrentOffset, ByteLength, Info->Name); switch (Info->Opcode) { /* Single-bit Flag fields. Note: Opcode is the bit position */ case ACPI_DMT_FLAG0: case ACPI_DMT_FLAG1: case ACPI_DMT_FLAG2: case ACPI_DMT_FLAG3: case ACPI_DMT_FLAG4: case ACPI_DMT_FLAG5: case ACPI_DMT_FLAG6: case ACPI_DMT_FLAG7: AcpiOsPrintf ("%1.1X\n", (*Target >> Info->Opcode) & 0x01); break; /* 2-bit Flag fields */ case ACPI_DMT_FLAGS0: AcpiOsPrintf ("%1.1X\n", *Target & 0x03); break; case ACPI_DMT_FLAGS1: AcpiOsPrintf ("%1.1X\n", (*Target >> 1) & 0x03); break; case ACPI_DMT_FLAGS2: AcpiOsPrintf ("%1.1X\n", (*Target >> 2) & 0x03); break; case ACPI_DMT_FLAGS8_2: AcpiOsPrintf ("%2.2X\n", (*Target >> 2) & 0xFF); break; case ACPI_DMT_FLAGS4: AcpiOsPrintf ("%1.1X\n", (*Target >> 4) & 0x03); break; case ACPI_DMT_FLAGS4_0: AcpiOsPrintf ("%1.1X\n", (*(UINT32 *)Target) & 0x0F); break; case ACPI_DMT_FLAGS4_4: AcpiOsPrintf ("%1.1X\n", (*(UINT32 *)Target >> 4) & 0x0F); break; case ACPI_DMT_FLAGS4_8: AcpiOsPrintf ("%1.1X\n", (*(UINT32 *)Target >> 8) & 0x0F); break; case ACPI_DMT_FLAGS4_12: AcpiOsPrintf ("%1.1X\n", (*(UINT32 *)Target >> 12) & 0x0F); break; case ACPI_DMT_FLAGS16_16: AcpiOsPrintf ("%4.4X\n", (*(UINT32 *)Target >> 16) & 0xFFFF); break; /* Integer Data Types */ case ACPI_DMT_UINT8: case ACPI_DMT_UINT16: case ACPI_DMT_UINT24: case ACPI_DMT_UINT32: case ACPI_DMT_UINT40: case ACPI_DMT_UINT48: case ACPI_DMT_UINT56: case ACPI_DMT_UINT64: /* * Dump bytes - high byte first, low byte last. * Note: All ACPI tables are little-endian. */ Value = 0; for (Temp8 = (UINT8) ByteLength; Temp8 > 0; Temp8--) { AcpiOsPrintf ("%2.2X", Target[Temp8 - 1]); Value |= Target[Temp8 - 1]; Value <<= 8; } if (!Value && (Info->Flags & DT_DESCRIBES_OPTIONAL)) { AcpiOsPrintf (" [Optional field not present]"); } AcpiOsPrintf ("\n"); break; case ACPI_DMT_BUF7: case ACPI_DMT_BUF10: case ACPI_DMT_BUF12: case ACPI_DMT_BUF16: case ACPI_DMT_BUF18: case ACPI_DMT_BUF128: /* * Buffer: Size depends on the opcode and was set above. * Each hex byte is separated with a space. * Multiple lines are separated by line continuation char. */ for (Temp16 = 0; Temp16 < ByteLength; Temp16++) { AcpiOsPrintf ("%2.2X", Target[Temp16]); if ((UINT32) (Temp16 + 1) < ByteLength) { if ((Temp16 > 0) && (!((Temp16+1) % 16))) { AcpiOsPrintf (" \\\n"); /* Line continuation */ AcpiDmLineHeader (0, 0, NULL); } else { AcpiOsPrintf (" "); } } } AcpiOsPrintf ("\n"); break; case ACPI_DMT_UUID: /* Convert 16-byte UUID buffer to 36-byte formatted UUID string */ (void) AcpiUtConvertUuidToString ((char *) Target, AslGbl_MsgBuffer); AcpiOsPrintf ("%s\n", AslGbl_MsgBuffer); break; case ACPI_DMT_STRING: AcpiOsPrintf ("\"%s\"\n", ACPI_CAST_PTR (char, Target)); break; case ACPI_DMT_IVRS_UNTERMINATED_STRING: AcpiOsPrintf ("\"%.*s\"\n", ByteLength, ACPI_CAST_PTR (char, Target)); break; /* Fixed length ASCII name fields */ case ACPI_DMT_SIG: AcpiUtCheckAndRepairAscii (Target, RepairedName, 4); AcpiOsPrintf ("\"%.4s\" ", RepairedName); TableData = AcpiAhGetTableInfo (ACPI_CAST_PTR (char, Target)); if (TableData) { AcpiOsPrintf (STRING_FORMAT, TableData->Description); } else { AcpiOsPrintf ("\n"); } break; case ACPI_DMT_NAME4: AcpiUtCheckAndRepairAscii (Target, RepairedName, 4); AcpiOsPrintf ("\"%.4s\"\n", RepairedName); break; case ACPI_DMT_NAME6: AcpiUtCheckAndRepairAscii (Target, RepairedName, 6); AcpiOsPrintf ("\"%.6s\"\n", RepairedName); break; case ACPI_DMT_NAME8: AcpiUtCheckAndRepairAscii (Target, RepairedName, 8); AcpiOsPrintf ("\"%.8s\"\n", RepairedName); break; /* Special Data Types */ case ACPI_DMT_CHKSUM: /* Checksum, display and validate */ AcpiOsPrintf ("%2.2X", *Target); Temp8 = AcpiUtGenerateChecksum (Table, ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length, ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum); if (Temp8 != ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum) { AcpiOsPrintf ( " /* Incorrect checksum, should be %2.2X */", Temp8); } AcpiOsPrintf ("\n"); break; case ACPI_DMT_SPACEID: /* Address Space ID */ AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiUtGetRegionName (*Target)); break; case ACPI_DMT_ACCWIDTH: /* Encoded Access Width */ Temp8 = *Target; if (Temp8 > ACPI_GAS_WIDTH_RESERVED) { Temp8 = ACPI_GAS_WIDTH_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmGasAccessWidth[Temp8]); break; case ACPI_DMT_GAS: /* Generic Address Structure */ AcpiOsPrintf (STRING_FORMAT, "Generic Address Structure"); Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target, sizeof (ACPI_GENERIC_ADDRESS), AcpiDmTableInfoGas); if (ACPI_FAILURE (Status)) { return (Status); } AcpiOsPrintf ("\n"); LastOutputBlankLine = TRUE; break; case ACPI_DMT_AEST: /* AEST subtable types */ Temp8 = *Target; if (Temp8 > ACPI_AEST_NODE_TYPE_RESERVED) { Temp8 = ACPI_AEST_NODE_TYPE_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmAestSubnames[Temp8]); break; case ACPI_DMT_AEST_CACHE: /* AEST cache resource subtable */ Temp32 = *Target; if (Temp32 > ACPI_AEST_CACHE_RESERVED) { Temp32 = ACPI_AEST_CACHE_RESERVED; } AcpiOsPrintf (UINT32_FORMAT, *Target, AcpiDmAestCacheNames[Temp32]); break; case ACPI_DMT_AEST_GIC: /* AEST GIC error subtable */ Temp32 = *Target; if (Temp32 > ACPI_AEST_GIC_RESERVED) { Temp32 = ACPI_AEST_GIC_RESERVED; } AcpiOsPrintf (UINT32_FORMAT, *Target, AcpiDmAestGicNames[Temp32]); break; case ACPI_DMT_AEST_RES: /* AEST resource type subtable */ Temp8 = *Target; if (Temp8 > ACPI_AEST_RESOURCE_RESERVED) { Temp8 = ACPI_AEST_RESOURCE_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmAestResourceNames[Temp8]); break; case ACPI_DMT_AEST_XFACE: /* AEST interface structure types */ Temp8 = *Target; if (Temp8 > ACPI_AEST_XFACE_RESERVED) { Temp8 = ACPI_AEST_XFACE_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmAestXfaceNames[Temp8]); break; case ACPI_DMT_AEST_XRUPT: /* AEST interrupt structure types */ Temp8 = *Target; if (Temp8 > ACPI_AEST_XRUPT_RESERVED) { Temp8 = ACPI_AEST_XRUPT_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmAestXruptNames[Temp8]); break; case ACPI_DMT_ASPT: /* ASPT subtable types */ Temp16 = ACPI_GET16(Target); if (Temp16 > ACPI_ASPT_TYPE_UNKNOWN) { Temp16 = ACPI_ASPT_TYPE_UNKNOWN; } AcpiOsPrintf(UINT16_FORMAT, Temp16, AcpiDmAsptSubnames[Temp16]); break; case ACPI_DMT_ASF: /* ASF subtable types */ Temp16 = (UINT16) ((*Target) & 0x7F); /* Top bit can be zero or one */ if (Temp16 > ACPI_ASF_TYPE_RESERVED) { Temp16 = ACPI_ASF_TYPE_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmAsfSubnames[Temp16]); break; case ACPI_DMT_CDAT: /* CDAT subtable types */ Temp8 = *Target; if (Temp8 > ACPI_CDAT_TYPE_RESERVED) { Temp8 = ACPI_CDAT_TYPE_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmCdatSubnames[Temp8]); break; case ACPI_DMT_CEDT: /* CEDT subtable types */ Temp8 = *Target; if (Temp8 > ACPI_CEDT_TYPE_RESERVED) { Temp8 = ACPI_CEDT_TYPE_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmCedtSubnames[Temp8]); break; case ACPI_DMT_DMAR: /* DMAR subtable types */ Temp16 = ACPI_GET16 (Target); if (Temp16 > ACPI_DMAR_TYPE_RESERVED) { Temp16 = ACPI_DMAR_TYPE_RESERVED; } AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target), AcpiDmDmarSubnames[Temp16]); break; case ACPI_DMT_DMAR_SCOPE: /* DMAR device scope types */ Temp8 = *Target; if (Temp8 > ACPI_DMAR_SCOPE_TYPE_RESERVED) { Temp8 = ACPI_DMAR_SCOPE_TYPE_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmDmarScope[Temp8]); break; case ACPI_DMT_EINJACT: /* EINJ Action types */ Temp8 = *Target; if (Temp8 > ACPI_EINJ_ACTION_RESERVED) { Temp8 = ACPI_EINJ_ACTION_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmEinjActions[Temp8]); break; case ACPI_DMT_EINJINST: /* EINJ Instruction types */ Temp8 = *Target; if (Temp8 > ACPI_EINJ_INSTRUCTION_RESERVED) { Temp8 = ACPI_EINJ_INSTRUCTION_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmEinjInstructions[Temp8]); break; case ACPI_DMT_ERSTACT: /* ERST Action types */ Temp8 = *Target; if (Temp8 > ACPI_ERST_ACTION_RESERVED) { Temp8 = ACPI_ERST_ACTION_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmErstActions[Temp8]); break; case ACPI_DMT_ERSTINST: /* ERST Instruction types */ Temp8 = *Target; if (Temp8 > ACPI_ERST_INSTRUCTION_RESERVED) { Temp8 = ACPI_ERST_INSTRUCTION_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmErstInstructions[Temp8]); break; case ACPI_DMT_GTDT: /* GTDT subtable types */ Temp8 = *Target; if (Temp8 > ACPI_GTDT_TYPE_RESERVED) { Temp8 = ACPI_GTDT_TYPE_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmGtdtSubnames[Temp8]); break; case ACPI_DMT_HEST: /* HEST subtable types */ Temp16 = ACPI_GET16 (Target); if (Temp16 > ACPI_HEST_TYPE_RESERVED) { Temp16 = ACPI_HEST_TYPE_RESERVED; } AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target), AcpiDmHestSubnames[Temp16]); break; case ACPI_DMT_HESTNTFY: AcpiOsPrintf (STRING_FORMAT, "Hardware Error Notification Structure"); Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target, sizeof (ACPI_HEST_NOTIFY), AcpiDmTableInfoHestNotify); if (ACPI_FAILURE (Status)) { return (Status); } AcpiOsPrintf ("\n"); LastOutputBlankLine = TRUE; break; case ACPI_DMT_HESTNTYP: /* HEST Notify types */ Temp8 = *Target; if (Temp8 > ACPI_HEST_NOTIFY_RESERVED) { Temp8 = ACPI_HEST_NOTIFY_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmHestNotifySubnames[Temp8]); break; case ACPI_DMT_HMAT: /* HMAT subtable types */ Temp16 = *Target; if (Temp16 > ACPI_HMAT_TYPE_RESERVED) { Temp16 = ACPI_HMAT_TYPE_RESERVED; } AcpiOsPrintf (UINT16_FORMAT, *Target, AcpiDmHmatSubnames[Temp16]); break; case ACPI_DMT_IORTMEM: AcpiOsPrintf (STRING_FORMAT, "IORT Memory Access Properties"); Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target, sizeof (ACPI_IORT_MEMORY_ACCESS), AcpiDmTableInfoIortAcc); if (ACPI_FAILURE (Status)) { return (Status); } LastOutputBlankLine = TRUE; break; case ACPI_DMT_MADT: /* MADT subtable types */ Temp8 = *Target; if ((Temp8 >= ACPI_MADT_TYPE_RESERVED) && (Temp8 < ACPI_MADT_TYPE_OEM_RESERVED)) { Temp8 = ACPI_MADT_TYPE_RESERVED; } else if (Temp8 >= ACPI_MADT_TYPE_OEM_RESERVED) { Temp8 = ACPI_MADT_TYPE_RESERVED + 1; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmMadtSubnames[Temp8]); break; case ACPI_DMT_MPAM_LOCATOR: /* MPAM subtable locator types */ Temp8 = *Target; if (Temp8 > ACPI_MPAM_LOCATION_TYPE_INTERCONNECT) { Temp8 = ACPI_MPAM_LOCATION_TYPE_INTERCONNECT + 1; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmMpamSubnames[Temp8]); break; case ACPI_DMT_NFIT: /* NFIT subtable types */ Temp16 = ACPI_GET16 (Target); if (Temp16 > ACPI_NFIT_TYPE_RESERVED) { Temp16 = ACPI_NFIT_TYPE_RESERVED; } AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target), AcpiDmNfitSubnames[Temp16]); break; case ACPI_DMT_PCCT: /* PCCT subtable types */ Temp8 = *Target; if (Temp8 > ACPI_PCCT_TYPE_RESERVED) { Temp8 = ACPI_PCCT_TYPE_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmPcctSubnames[Temp8]); break; case ACPI_DMT_PHAT: /* PHAT subtable types */ Temp16 = ACPI_GET16 (Target); if (Temp16 > ACPI_PHAT_TYPE_RESERVED) { Temp16 = ACPI_PHAT_TYPE_RESERVED; } AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target), AcpiDmPhatSubnames[Temp16]); break; case ACPI_DMT_PMTT: /* PMTT subtable types */ Temp8 = *Target; if (Temp8 == ACPI_PMTT_TYPE_VENDOR) { Temp8 = ACPI_PMTT_TYPE_RESERVED + 1; } else if (Temp8 > ACPI_PMTT_TYPE_RESERVED) { Temp8 = ACPI_PMTT_TYPE_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmPmttSubnames[Temp8]); break; case ACPI_DMT_PPTT: /* PPTT subtable types */ Temp8 = *Target; if (Temp8 > ACPI_PPTT_TYPE_RESERVED) { Temp8 = ACPI_PPTT_TYPE_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmPpttSubnames[Temp8]); break; case ACPI_DMT_UNICODE: case ACPI_DMT_WPBT_UNICODE: if (ByteLength == 0) { AcpiOsPrintf ("/* Zero-length Data */\n"); break; } AcpiDmDumpUnicode (Table, 0, ByteLength); break; case ACPI_DMT_RAW_BUFFER: case ACPI_DMT_BUFFER: case ACPI_DMT_PMTT_VENDOR: if (ByteLength == 0) { AcpiOsPrintf ("/* Zero-length Data */\n"); break; } AcpiDmDumpBuffer (Target, 0, ByteLength, CurrentOffset, NULL); break; case ACPI_DMT_RGRT: /* RGRT subtable types */ Temp8 = *Target; if (Temp8 >= ACPI_RGRT_TYPE_RESERVED) { Temp8 = ACPI_RGRT_TYPE_RESERVED0; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmRgrtSubnames[Temp8]); break; case ACPI_DMT_RHCT: /* RHCT subtable types */ Temp16 = ACPI_GET16 (Target); if (Temp16 == ACPI_RHCT_NODE_TYPE_HART_INFO) { Temp16 = ACPI_RHCT_NODE_TYPE_RESERVED; } AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target), AcpiDmRhctSubnames[Temp16]); break; case ACPI_DMT_SDEV: /* SDEV subtable types */ Temp8 = *Target; if (Temp8 > ACPI_SDEV_TYPE_RESERVED) { Temp8 = ACPI_SDEV_TYPE_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmSdevSubnames[Temp8]); break; case ACPI_DMT_SRAT: /* SRAT subtable types */ Temp8 = *Target; if (Temp8 > ACPI_SRAT_TYPE_RESERVED) { Temp8 = ACPI_SRAT_TYPE_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmSratSubnames[Temp8]); break; case ACPI_DMT_TPM2: /* TPM2 Start Method types */ Temp8 = *Target; if (Temp8 > ACPI_TPM2_RESERVED) { Temp8 = ACPI_TPM2_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmTpm2Subnames[Temp8]); break; case ACPI_DMT_FADTPM: /* FADT Preferred PM Profile names */ Temp8 = *Target; if (Temp8 > ACPI_FADT_PM_RESERVED) { Temp8 = ACPI_FADT_PM_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmFadtProfiles[Temp8]); break; case ACPI_DMT_IVRS: /* IVRS subtable types */ Temp8 = *Target; switch (Temp8) { case ACPI_IVRS_TYPE_HARDWARE1: case ACPI_IVRS_TYPE_HARDWARE2: Name = AcpiDmIvrsSubnames[0]; break; case ACPI_IVRS_TYPE_HARDWARE3: Name = AcpiDmIvrsSubnames[1]; break; case ACPI_IVRS_TYPE_MEMORY1: case ACPI_IVRS_TYPE_MEMORY2: case ACPI_IVRS_TYPE_MEMORY3: Name = AcpiDmIvrsSubnames[2]; break; default: Name = AcpiDmIvrsSubnames[3]; break; } AcpiOsPrintf (UINT8_FORMAT, *Target, Name); break; case ACPI_DMT_IVRS_DE: /* IVRS device entry types */ Temp8 = *Target; switch (Temp8) { case ACPI_IVRS_TYPE_ALL: case ACPI_IVRS_TYPE_SELECT: case ACPI_IVRS_TYPE_START: case ACPI_IVRS_TYPE_END: Name = AcpiDmIvrsDevEntryNames[Temp8]; break; case ACPI_IVRS_TYPE_ALIAS_SELECT: case ACPI_IVRS_TYPE_ALIAS_START: case ACPI_IVRS_TYPE_EXT_SELECT: case ACPI_IVRS_TYPE_EXT_START: case ACPI_IVRS_TYPE_SPECIAL: Name = AcpiDmIvrsDevEntryNames[Temp8 - 61]; break; case ACPI_IVRS_TYPE_HID: Name = AcpiDmIvrsDevEntryNames[Temp8 - 228]; break; default: Name = AcpiDmIvrsDevEntryNames[0]; /* Unknown/Reserved */ break; } AcpiOsPrintf (UINT8_FORMAT, *Target, Name); break; case ACPI_DMT_LPIT: /* LPIT subtable types */ Temp32 = ACPI_GET32 (Target); if (Temp32 > ACPI_LPIT_TYPE_RESERVED) { Temp32 = ACPI_LPIT_TYPE_RESERVED; } AcpiOsPrintf (UINT32_FORMAT, ACPI_GET32 (Target), AcpiDmLpitSubnames[Temp32]); break; case ACPI_DMT_VIOT: /* VIOT subtable types */ Temp8 = *Target; if (Temp8 > ACPI_VIOT_RESERVED) { Temp8 = ACPI_VIOT_RESERVED; } AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmViotSubnames[Temp8]); break; case ACPI_DMT_EXIT: return (AE_OK); default: ACPI_ERROR ((AE_INFO, "**** Invalid table opcode [0x%X] ****\n", Info->Opcode)); return (AE_SUPPORT); } } if (TableOffset && !SubtableLength) { /* * If this table is not the main table, the subtable must have a * valid length */ AcpiOsPrintf ("Invalid zero length subtable\n"); return (AE_BAD_DATA); } return (AE_OK); } src/acpica/source/common/dmtables.c000066400000000000000000000502701465205512700176270ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dmtables - disassembler ACPI table support * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "acdispat.h" #include "acnamesp.h" #include "actables.h" #include "acparser.h" #include "acapps.h" #include "acmacros.h" #include "acconvert.h" #define _COMPONENT ACPI_TOOLS ACPI_MODULE_NAME ("dmtables") /* Local prototypes */ static void AdCreateTableHeader ( char *Filename, ACPI_TABLE_HEADER *Table); static ACPI_STATUS AdStoreTable ( ACPI_TABLE_HEADER *Table, UINT32 *TableIndex); extern ACPI_TABLE_DESC LocalTables[1]; extern ACPI_PARSE_OBJECT *AcpiGbl_ParseOpRoot; /****************************************************************************** * * FUNCTION: AdDisassemblerHeader * * PARAMETERS: Filename - Input file for the table * TableType - Either AML or DataTable * * RETURN: None * * DESCRIPTION: Create the disassembler header, including ACPICA signon with * optional current time and date. * *****************************************************************************/ void AdDisassemblerHeader ( char *Filename, UINT8 TableType) { time_t Timer; /* Header and input table info */ AcpiOsPrintf ("/*\n"); AcpiOsPrintf (ACPI_COMMON_HEADER (AML_DISASSEMBLER_NAME, " * ")); if (TableType == ACPI_IS_AML_TABLE) { if (AcpiGbl_CstyleDisassembly) { AcpiOsPrintf ( " * Disassembling to symbolic ASL+ operators\n" " *\n"); } else { AcpiOsPrintf ( " * Disassembling to non-symbolic legacy ASL operators\n" " *\n"); } } if (AslGbl_Deterministic) { AcpiOsPrintf (" * Disassembly of %s\n", Filename); } else { time (&Timer); AcpiOsPrintf (" * Disassembly of %s, %s", Filename, ctime (&Timer)); } AcpiOsPrintf (" *\n"); } /****************************************************************************** * * FUNCTION: AdCreateTableHeader * * PARAMETERS: Filename - Input file for the table * Table - Pointer to the raw table * * RETURN: None * * DESCRIPTION: Create the ASL table header, including ACPICA signon with * current time and date. * *****************************************************************************/ static void AdCreateTableHeader ( char *Filename, ACPI_TABLE_HEADER *Table) { UINT8 Checksum; /* Reset globals for External statements */ AcpiGbl_NumExternalMethods = 0; AcpiGbl_ResolvedExternalMethods = 0; /* * Print file header and dump original table header */ AdDisassemblerHeader (Filename, ACPI_IS_AML_TABLE); AcpiOsPrintf (" * Original Table Header:\n"); AcpiOsPrintf (" * Signature \"%4.4s\"\n", Table->Signature); AcpiOsPrintf (" * Length 0x%8.8X (%u)\n", Table->Length, Table->Length); /* Print and validate the revision */ AcpiOsPrintf (" * Revision 0x%2.2X", Table->Revision); switch (Table->Revision) { case 0: AcpiOsPrintf (" **** Invalid Revision"); break; case 1: /* Revision of DSDT controls the ACPI integer width */ if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_DSDT)) { AcpiOsPrintf (" **** 32-bit table (V1), no 64-bit math support"); } break; default: break; } /* Print and validate the table checksum */ AcpiOsPrintf ("\n * Checksum 0x%2.2X", Table->Checksum); Checksum = AcpiUtChecksum (ACPI_CAST_PTR (UINT8, Table), Table->Length); if (Checksum) { AcpiOsPrintf (" **** Incorrect checksum, should be 0x%2.2X", (UINT8) (Table->Checksum - Checksum)); } AcpiOsPrintf ("\n"); AcpiOsPrintf (" * OEM ID \"%.6s\"\n", Table->OemId); AcpiOsPrintf (" * OEM Table ID \"%.8s\"\n", Table->OemTableId); AcpiOsPrintf (" * OEM Revision 0x%8.8X (%u)\n", Table->OemRevision, Table->OemRevision); AcpiOsPrintf (" * Compiler ID \"%.4s\"\n", Table->AslCompilerId); AcpiOsPrintf (" * Compiler Version 0x%8.8X (%u)\n", Table->AslCompilerRevision, Table->AslCompilerRevision); AcpiOsPrintf (" */\n"); /* * Print comments that come before this definition block. */ if (AcpiGbl_CaptureComments) { ASL_CV_PRINT_ONE_COMMENT(AcpiGbl_ParseOpRoot,AML_COMMENT_STANDARD, NULL, 0); } /* * Open the ASL definition block. * * Note: the AMLFilename string is left zero-length in order to just let * the compiler create it when the disassembled file is compiled. This * makes it easier to rename the disassembled ASL file if needed. */ AcpiOsPrintf ( "DefinitionBlock (\"\", \"%4.4s\", %u, \"%.6s\", \"%.8s\", 0x%8.8X)\n", Table->Signature, Table->Revision, Table->OemId, Table->OemTableId, Table->OemRevision); } /****************************************************************************** * * FUNCTION: AdDisplayTables * * PARAMETERS: Filename - Input file for the table * Table - Pointer to the raw table * * RETURN: Status * * DESCRIPTION: Display (disassemble) loaded tables and dump raw tables * *****************************************************************************/ ACPI_STATUS AdDisplayTables ( char *Filename, ACPI_TABLE_HEADER *Table) { if (!AcpiGbl_ParseOpRoot) { return (AE_NOT_EXIST); } if (!AcpiGbl_DmOpt_Listing) { AdCreateTableHeader (Filename, Table); } AcpiDmDisassemble (NULL, AcpiGbl_ParseOpRoot, ACPI_UINT32_MAX); MpEmitMappingInfo (); if (AcpiGbl_DmOpt_Listing) { AcpiOsPrintf ("\n\nTable Header:\n"); AcpiUtDebugDumpBuffer ((UINT8 *) Table, sizeof (ACPI_TABLE_HEADER), DB_BYTE_DISPLAY, ACPI_UINT32_MAX); AcpiOsPrintf ("Table Body (Length 0x%X)\n", Table->Length); AcpiUtDebugDumpBuffer (((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER)), Table->Length, DB_BYTE_DISPLAY, ACPI_UINT32_MAX); } return (AE_OK); } /******************************************************************************* * * FUNCTION: AdStoreTable * * PARAMETERS: Table - Table header * TableIndex - Where the table index is returned * * RETURN: Status and table index. * * DESCRIPTION: Add an ACPI table to the global table list * ******************************************************************************/ static ACPI_STATUS AdStoreTable ( ACPI_TABLE_HEADER *Table, UINT32 *TableIndex) { ACPI_STATUS Status; ACPI_TABLE_DESC *TableDesc; Status = AcpiTbGetNextTableDescriptor (TableIndex, &TableDesc); if (ACPI_FAILURE (Status)) { return (Status); } /* Initialize added table */ AcpiTbInitTableDescriptor (TableDesc, ACPI_PTR_TO_PHYSADDR (Table), ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL, Table); Status = AcpiTbValidateTable (TableDesc); return (Status); } /****************************************************************************** * * FUNCTION: AdGetLocalTables * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Get the ACPI tables from either memory or a file * *****************************************************************************/ ACPI_STATUS AdGetLocalTables ( void) { ACPI_STATUS Status; ACPI_TABLE_HEADER TableHeader; ACPI_TABLE_HEADER *NewTable; UINT32 TableIndex; /* Get the DSDT via table override */ ACPI_MOVE_32_TO_32 (TableHeader.Signature, ACPI_SIG_DSDT); Status = AcpiOsTableOverride (&TableHeader, &NewTable); if (ACPI_FAILURE (Status) || !NewTable) { fprintf (stderr, "Could not obtain DSDT\n"); return (AE_NO_ACPI_TABLES); } AdWriteTable (NewTable, NewTable->Length, ACPI_SIG_DSDT, NewTable->OemTableId); /* Store DSDT in the Table Manager */ Status = AdStoreTable (NewTable, &TableIndex); if (ACPI_FAILURE (Status)) { fprintf (stderr, "Could not store DSDT\n"); return (AE_NO_ACPI_TABLES); } return (AE_OK); } /****************************************************************************** * * FUNCTION: AdParseTable * * PARAMETERS: Table - Pointer to the raw table * OwnerId - Returned OwnerId of the table * LoadTable - If add table to the global table list * External - If this is an external table * * RETURN: Status * * DESCRIPTION: Parse an ACPI AML table * *****************************************************************************/ ACPI_STATUS AdParseTable ( ACPI_TABLE_HEADER *Table, ACPI_OWNER_ID *OwnerId, BOOLEAN LoadTable, BOOLEAN External) { ACPI_STATUS Status = AE_OK; ACPI_WALK_STATE *WalkState; UINT8 *AmlStart; UINT32 AmlLength; UINT32 TableIndex; if (!Table) { return (AE_NOT_EXIST); } /* Pass 1: Parse everything except control method bodies */ fprintf (stderr, "Pass 1 parse of [%4.4s]\n", (char *) Table->Signature); AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER); AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER)); AcpiUtSetIntegerWidth (Table->Revision); /* Create the root object */ AcpiGbl_ParseOpRoot = AcpiPsCreateScopeOp (AmlStart); if (!AcpiGbl_ParseOpRoot) { return (AE_NO_MEMORY); } #ifdef ACPI_ASL_COMPILER if (AcpiGbl_CaptureComments) { AcpiGbl_ParseOpRoot->Common.CvFilename = AcpiGbl_FileTreeRoot->Filename; } else { AcpiGbl_ParseOpRoot->Common.CvFilename = NULL; } #endif /* Create and initialize a new walk state */ WalkState = AcpiDsCreateWalkState (0, AcpiGbl_ParseOpRoot, NULL, NULL); if (!WalkState) { return (AE_NO_MEMORY); } Status = AcpiDsInitAmlWalk (WalkState, AcpiGbl_ParseOpRoot, NULL, AmlStart, AmlLength, NULL, ACPI_IMODE_LOAD_PASS1); if (ACPI_FAILURE (Status)) { return (Status); } WalkState->ParseFlags &= ~ACPI_PARSE_DELETE_TREE; Status = AcpiPsParseAml (WalkState); if (ACPI_FAILURE (Status)) { return (Status); } /* If LoadTable is FALSE, we are parsing the last loaded table */ TableIndex = AcpiGbl_RootTableList.CurrentTableCount - 1; /* Pass 2 */ if (LoadTable) { Status = AdStoreTable (Table, &TableIndex); if (ACPI_FAILURE (Status)) { return (Status); } Status = AcpiTbAllocateOwnerId (TableIndex); if (ACPI_FAILURE (Status)) { return (Status); } if (OwnerId) { Status = AcpiTbGetOwnerId (TableIndex, OwnerId); if (ACPI_FAILURE (Status)) { return (Status); } } } fprintf (stderr, "Pass 2 parse of [%4.4s]\n", (char *) Table->Signature); Status = AcpiNsOneCompleteParse (ACPI_IMODE_LOAD_PASS2, TableIndex, NULL); if (ACPI_FAILURE (Status)) { return (Status); } /* No need to parse control methods of external table */ if (External) { return (AE_OK); } /* * Pass 3: Parse control methods and link their parse trees * into the main parse tree */ fprintf (stderr, "Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)\n"); (void) AcpiDmParseDeferredOps (AcpiGbl_ParseOpRoot); fprintf (stderr, "\n"); /* Process Resource Templates */ AcpiDmFindResources (AcpiGbl_ParseOpRoot); fprintf (stderr, "Parsing completed\n"); return (AE_OK); } src/acpica/source/common/dmtbdump.c000066400000000000000000000514421465205512700176520ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dmtbdump - Dump ACPI data tables that contain no AML code * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdisasm.h" #include "actables.h" /* This module used for application-level code only */ #define _COMPONENT ACPI_CA_DISASSEMBLER ACPI_MODULE_NAME ("dmtbdump") /* Local prototypes */ static void AcpiDmValidateFadtLength ( UINT32 Revision, UINT32 Length); /******************************************************************************* * * FUNCTION: AcpiDmDumpBuffer * * PARAMETERS: Table - ACPI Table or subtable * BufferOffset - Offset of buffer from Table above * Length - Length of the buffer * AbsoluteOffset - Offset of buffer in the main ACPI table * Header - Name of the buffer field (printed on the * first line only.) * * RETURN: None * * DESCRIPTION: Format the contents of an arbitrary length data buffer (in the * disassembler output format.) * ******************************************************************************/ void AcpiDmDumpBuffer ( void *Table, UINT32 BufferOffset, UINT32 Length, UINT32 AbsoluteOffset, char *Header) { UINT8 *Buffer; UINT8 BufChar; UINT32 i; UINT32 j; if (!Length) { return; } Buffer = ACPI_CAST_PTR (UINT8, Table) + BufferOffset; i = 0; while (i < Length) { if ((Length > 16) && (i != 0)) { if ((Length - i) < 16) AcpiOsPrintf ("\n/* %3.3Xh %4.4u %3u */ ", AbsoluteOffset, AbsoluteOffset, Length - i); else AcpiOsPrintf ("\n/* %3.3Xh %4.4u 16 */ ", AbsoluteOffset, AbsoluteOffset); } AbsoluteOffset += 16; /* Emit the raw data bytes*/ for (j = 0; j < 16; j++) { if (i + j >= Length) { /* Dump fill spaces */ AcpiOsPrintf ("%*s", (48 - (3 * (Length -i))), " "); break; } AcpiOsPrintf ("%.02X ", Buffer[(ACPI_SIZE) i + j]); } /* Emit the ASCII equivalent to the raw data bytes */ for (j = 0; j < 16; j++) { if (i + j >= Length) { AcpiOsPrintf (" */\\\n"); return; } /* * Add comment characters so rest of line is ignored when * compiled */ if (j == 0) { AcpiOsPrintf ("/* "); } BufChar = Buffer[(ACPI_SIZE) i + j]; if (isprint (BufChar)) { AcpiOsPrintf ("%c", BufChar); } else { AcpiOsPrintf ("."); } } /* Done with that line. */ /* Close the comment and insert a backslash - line continuation character */ AcpiOsPrintf (" */\\"); i += 16; /* Point to next line */ } AcpiOsPrintf ("\n"); } /******************************************************************************* * * FUNCTION: AcpiDmDumpUnicode * * PARAMETERS: Table - ACPI Table or subtable * BufferOffset - Offset of buffer from Table above * ByteLength - Length of the buffer * * RETURN: None * * DESCRIPTION: Validate and dump the contents of a buffer that contains * unicode data. The output is a standard ASCII string. If it * appears that the data is not unicode, the buffer is dumped * as hex characters. * ******************************************************************************/ void AcpiDmDumpUnicode ( void *Table, UINT32 BufferOffset, UINT32 ByteLength) { UINT8 *Buffer; UINT32 Length; UINT32 i; Buffer = ((UINT8 *) Table) + BufferOffset; Length = ByteLength - 2; /* Last two bytes are the null terminator */ /* Ensure all low bytes are entirely printable ASCII */ for (i = 0; i < Length; i += 2) { if (!isprint (Buffer[i])) { goto DumpRawBuffer; } } /* Ensure all high bytes are zero */ for (i = 1; i < Length; i += 2) { if (Buffer[i]) { goto DumpRawBuffer; } } /* Dump the buffer as a normal string */ AcpiOsPrintf ("\""); for (i = 0; i < Length; i += 2) { AcpiOsPrintf ("%c", Buffer[i]); } AcpiOsPrintf ("\"\n"); return; DumpRawBuffer: AcpiDmDumpBuffer (Table, BufferOffset, ByteLength, BufferOffset, NULL); AcpiOsPrintf ("\n"); } /******************************************************************************* * * FUNCTION: AcpiDmDumpRsdp * * PARAMETERS: Table - A RSDP * * RETURN: Length of the table (there is not always a length field, * use revision or length if available (ACPI 2.0+)) * * DESCRIPTION: Format the contents of a RSDP * ******************************************************************************/ UINT32 AcpiDmDumpRsdp ( ACPI_TABLE_HEADER *Table) { ACPI_TABLE_RSDP *Rsdp = ACPI_CAST_PTR (ACPI_TABLE_RSDP, Table); UINT32 Length = sizeof (ACPI_RSDP_COMMON); UINT8 Checksum; ACPI_STATUS Status; /* Dump the common ACPI 1.0 portion */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp1); if (ACPI_FAILURE (Status)) { return (Length); } /* Validate the first checksum */ Checksum = AcpiUtGenerateChecksum (Rsdp, sizeof (ACPI_RSDP_COMMON), Rsdp->Checksum); if (Checksum != Rsdp->Checksum) { AcpiOsPrintf ("/* Incorrect Checksum above, should be 0x%2.2X */\n", Checksum); } /* The RSDP for ACPI 2.0+ contains more data and has a Length field */ if (Rsdp->Revision > 0) { Length = Rsdp->Length; Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp2); if (ACPI_FAILURE (Status)) { return (Length); } /* Validate the extended checksum over entire RSDP */ Checksum = AcpiUtGenerateChecksum (Rsdp, sizeof (ACPI_TABLE_RSDP), Rsdp->ExtendedChecksum); if (Checksum != Rsdp->ExtendedChecksum) { AcpiOsPrintf ( "/* Incorrect Extended Checksum above, should be 0x%2.2X */\n", Checksum); } } return (Length); } /******************************************************************************* * * FUNCTION: AcpiDmDumpRsdt * * PARAMETERS: Table - A RSDT * * RETURN: None * * DESCRIPTION: Format the contents of a RSDT * ******************************************************************************/ void AcpiDmDumpRsdt ( ACPI_TABLE_HEADER *Table) { UINT32 *Array; UINT32 Entries; UINT32 Offset; UINT32 i; /* Point to start of table pointer array */ Array = ACPI_CAST_PTR (ACPI_TABLE_RSDT, Table)->TableOffsetEntry; Offset = sizeof (ACPI_TABLE_HEADER); /* RSDT uses 32-bit pointers */ Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32); for (i = 0; i < Entries; i++) { AcpiDmLineHeader2 (Offset, sizeof (UINT32), "ACPI Table Address", i); AcpiOsPrintf ("%8.8X\n", Array[i]); Offset += sizeof (UINT32); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpXsdt * * PARAMETERS: Table - A XSDT * * RETURN: None * * DESCRIPTION: Format the contents of a XSDT * ******************************************************************************/ void AcpiDmDumpXsdt ( ACPI_TABLE_HEADER *Table) { UINT64 *Array; UINT32 Entries; UINT32 Offset; UINT32 i; /* Point to start of table pointer array */ Array = ACPI_CAST_PTR (ACPI_TABLE_XSDT, Table)->TableOffsetEntry; Offset = sizeof (ACPI_TABLE_HEADER); /* XSDT uses 64-bit pointers */ Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64); for (i = 0; i < Entries; i++) { AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i); AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Array[i])); Offset += sizeof (UINT64); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpFadt * * PARAMETERS: Table - A FADT * * RETURN: None * * DESCRIPTION: Format the contents of a FADT * * NOTE: We cannot depend on the FADT version to indicate the actual * contents of the FADT because of BIOS bugs. The table length * is the only reliable indicator. * ******************************************************************************/ void AcpiDmDumpFadt ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; /* Always dump the minimum FADT revision 1 fields (ACPI 1.0) */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt1); if (ACPI_FAILURE (Status)) { return; } /* Check for FADT revision 2 fields (ACPI 1.0B MS extensions) */ if ((Table->Length > ACPI_FADT_V1_SIZE) && (Table->Length <= ACPI_FADT_V2_SIZE)) { Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt2); if (ACPI_FAILURE (Status)) { return; } } /* Check for FADT revision 3/4 fields and up (ACPI 2.0+ extended data) */ else if (Table->Length > ACPI_FADT_V2_SIZE) { Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt3); if (ACPI_FAILURE (Status)) { return; } /* Check for FADT revision 5 fields and up (ACPI 5.0+) */ if (Table->Length > ACPI_FADT_V3_SIZE) { Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt5); if (ACPI_FAILURE (Status)) { return; } } /* Check for FADT revision 6 fields and up (ACPI 6.0+) */ if (Table->Length > ACPI_FADT_V3_SIZE) { Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt6); if (ACPI_FAILURE (Status)) { return; } } } /* Validate various fields in the FADT, including length */ AcpiTbCreateLocalFadt (Table, Table->Length); /* Validate FADT length against the revision */ AcpiDmValidateFadtLength (Table->Revision, Table->Length); } /******************************************************************************* * * FUNCTION: AcpiDmValidateFadtLength * * PARAMETERS: Revision - FADT revision (Header->Revision) * Length - FADT length (Header->Length * * RETURN: None * * DESCRIPTION: Check the FADT revision against the expected table length for * that revision. Issue a warning if the length is not what was * expected. This seems to be such a common BIOS bug that the * FADT revision has been rendered virtually meaningless. * ******************************************************************************/ static void AcpiDmValidateFadtLength ( UINT32 Revision, UINT32 Length) { UINT32 ExpectedLength; switch (Revision) { case 0: AcpiOsPrintf ("// ACPI Warning: Invalid FADT revision: 0\n"); return; case 1: ExpectedLength = ACPI_FADT_V1_SIZE; break; case 2: ExpectedLength = ACPI_FADT_V2_SIZE; break; case 3: case 4: ExpectedLength = ACPI_FADT_V3_SIZE; break; case 5: ExpectedLength = ACPI_FADT_V5_SIZE; break; default: return; } if (Length == ExpectedLength) { return; } AcpiOsPrintf ( "\n// ACPI Warning: FADT revision %X does not match length: " "found %X expected %X\n", Revision, Length, ExpectedLength); } src/acpica/source/common/dmtbdump1.c000066400000000000000000002050001465205512700177220ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dmtbdump1 - Dump ACPI data tables that contain no AML code * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdisasm.h" #include "actables.h" #include "aslcompiler.h" /* This module used for application-level code only */ #define _COMPONENT ACPI_CA_DISASSEMBLER ACPI_MODULE_NAME ("dmtbdump1") /******************************************************************************* * * FUNCTION: AcpiDmDumpAest * * PARAMETERS: Table - A AEST table * * RETURN: None * * DESCRIPTION: Format the contents of a AEST table * * NOTE: Assumes the following table structure: * For all AEST Error Nodes: * 1) An AEST Error Node, followed immediately by: * 2) Any node-specific data * 3) An Interface Structure (one) * 4) A list (array) of Interrupt Structures * * AEST - ARM Error Source table. Conforms to: * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020 * ******************************************************************************/ void AcpiDmDumpAest ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; UINT32 Offset = sizeof (ACPI_TABLE_HEADER); ACPI_AEST_HEADER *Subtable; ACPI_AEST_HEADER *NodeHeader; ACPI_AEST_PROCESSOR *ProcessorSubtable; ACPI_DMTABLE_INFO *InfoTable; ACPI_SIZE Length; UINT8 Type; /* Very small, generic main table. AEST consists of mostly subtables */ while (Offset < Table->Length) { NodeHeader = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); /* Dump the common error node (subtable) header */ Status = AcpiDmDumpTable (Table->Length, Offset, NodeHeader, NodeHeader->Length, AcpiDmTableInfoAestHdr); if (ACPI_FAILURE (Status)) { return; } Type = NodeHeader->Type; /* Setup the node-specific subtable based on the header Type field */ switch (Type) { case ACPI_AEST_PROCESSOR_ERROR_NODE: InfoTable = AcpiDmTableInfoAestProcError; Length = sizeof (ACPI_AEST_PROCESSOR); break; case ACPI_AEST_MEMORY_ERROR_NODE: InfoTable = AcpiDmTableInfoAestMemError; Length = sizeof (ACPI_AEST_MEMORY); break; case ACPI_AEST_SMMU_ERROR_NODE: InfoTable = AcpiDmTableInfoAestSmmuError; Length = sizeof (ACPI_AEST_SMMU); break; case ACPI_AEST_VENDOR_ERROR_NODE: InfoTable = AcpiDmTableInfoAestVendorError; Length = sizeof (ACPI_AEST_VENDOR); break; case ACPI_AEST_GIC_ERROR_NODE: InfoTable = AcpiDmTableInfoAestGicError; Length = sizeof (ACPI_AEST_GIC); break; /* Error case below */ default: AcpiOsPrintf ("\n**** Unknown AEST Error Subtable type 0x%X\n", Type); return; } /* Point past the common header (to the node-specific data) */ Offset += sizeof (ACPI_AEST_HEADER); Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); AcpiOsPrintf ("\n"); /* Dump the node-specific subtable */ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } AcpiOsPrintf ("\n"); if (Type == ACPI_AEST_PROCESSOR_ERROR_NODE) { /* * Special handling for PROCESSOR_ERROR_NODE subtables * (to handle the Resource Substructure via the ResourceType * field). */ /* Point past the node-specific data */ Offset += Length; ProcessorSubtable = ACPI_CAST_PTR (ACPI_AEST_PROCESSOR, Subtable); switch (ProcessorSubtable->ResourceType) { /* Setup the Resource Substructure subtable */ case ACPI_AEST_CACHE_RESOURCE: InfoTable = AcpiDmTableInfoAestCacheRsrc; Length = sizeof (ACPI_AEST_PROCESSOR_CACHE); break; case ACPI_AEST_TLB_RESOURCE: InfoTable = AcpiDmTableInfoAestTlbRsrc; Length = sizeof (ACPI_AEST_PROCESSOR_TLB); break; case ACPI_AEST_GENERIC_RESOURCE: InfoTable = AcpiDmTableInfoAestGenRsrc; Length = sizeof (ACPI_AEST_PROCESSOR_GENERIC); break; /* Error case below */ default: AcpiOsPrintf ("\n**** Unknown AEST Processor Resource type 0x%X\n", ProcessorSubtable->ResourceType); return; } ProcessorSubtable = ACPI_ADD_PTR (ACPI_AEST_PROCESSOR, Table, Offset); /* Dump the resource substructure subtable */ Status = AcpiDmDumpTable (Table->Length, Offset, ProcessorSubtable, Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } AcpiOsPrintf ("\n"); } /* Point past the resource substructure or the node-specific data */ Offset += Length; /* Dump the interface structure, required to be present */ Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); if (Subtable->Type >= ACPI_AEST_XFACE_RESERVED) { AcpiOsPrintf ("\n**** Unknown AEST Node Interface type 0x%X\n", Subtable->Type); return; } Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, sizeof (ACPI_AEST_NODE_INTERFACE), AcpiDmTableInfoAestXface); if (ACPI_FAILURE (Status)) { return; } /* Point past the interface structure */ AcpiOsPrintf ("\n"); Offset += sizeof (ACPI_AEST_NODE_INTERFACE); /* Dump the entire interrupt structure array, if present */ if (NodeHeader->NodeInterruptOffset) { Length = NodeHeader->NodeInterruptCount; Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); while (Length) { /* Dump the interrupt structure */ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, sizeof (ACPI_AEST_NODE_INTERRUPT), AcpiDmTableInfoAestXrupt); if (ACPI_FAILURE (Status)) { return; } /* Point to the next interrupt structure */ Offset += sizeof (ACPI_AEST_NODE_INTERRUPT); Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); Length--; AcpiOsPrintf ("\n"); } } } } /******************************************************************************* * * FUNCTION: AcpiDmDumpApmt * * PARAMETERS: Table - A APMT table * * RETURN: None * * DESCRIPTION: Format the contents of a APMT. This table type consists * of an open-ended number of subtables. * * * APMT - ARM Performance Monitoring Unit table. Conforms to: * ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document * ARM DEN0117 v1.0 November 25, 2021 * ******************************************************************************/ void AcpiDmDumpApmt ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_APMT_NODE *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_APMT); UINT32 NodeNum = 0; /* There is no main table (other than the standard ACPI header) */ /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_APMT_NODE, Table, Offset); while (Offset < Table->Length) { AcpiOsPrintf ("\n"); if (Subtable->Type >= ACPI_APMT_NODE_TYPE_COUNT) { AcpiOsPrintf ("\n**** Unknown APMT subtable type 0x%X\n", Subtable->Type); return; } AcpiOsPrintf ("/* APMT Node-%u */\n", NodeNum++); Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoApmtNode); if (ACPI_FAILURE (Status)) { return; } /* Point to next subtable */ Offset += Subtable->Length; Subtable = ACPI_ADD_PTR (ACPI_APMT_NODE, Subtable, Subtable->Length); AcpiOsPrintf ("\n"); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpAsf * * PARAMETERS: Table - A ASF table * * RETURN: None * * DESCRIPTION: Format the contents of a ASF table * ******************************************************************************/ void AcpiDmDumpAsf ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; UINT32 Offset = sizeof (ACPI_TABLE_HEADER); ACPI_ASF_INFO *Subtable; ACPI_DMTABLE_INFO *InfoTable; ACPI_DMTABLE_INFO *DataInfoTable = NULL; UINT8 *DataTable = NULL; UINT32 DataCount = 0; UINT32 DataLength = 0; UINT32 DataOffset = 0; UINT32 i; UINT8 Type; /* No main table, only subtables */ Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset); while (Offset < Table->Length) { /* Common subtable header */ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Subtable->Header.Length, AcpiDmTableInfoAsfHdr); if (ACPI_FAILURE (Status)) { return; } /* The actual type is the lower 7 bits of Type */ Type = (UINT8) (Subtable->Header.Type & 0x7F); switch (Type) { case ACPI_ASF_TYPE_INFO: InfoTable = AcpiDmTableInfoAsf0; break; case ACPI_ASF_TYPE_ALERT: InfoTable = AcpiDmTableInfoAsf1; DataInfoTable = AcpiDmTableInfoAsf1a; DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ALERT)); DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->Alerts; DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->DataLength; DataOffset = Offset + sizeof (ACPI_ASF_ALERT); break; case ACPI_ASF_TYPE_CONTROL: InfoTable = AcpiDmTableInfoAsf2; DataInfoTable = AcpiDmTableInfoAsf2a; DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_REMOTE)); DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->Controls; DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->DataLength; DataOffset = Offset + sizeof (ACPI_ASF_REMOTE); break; case ACPI_ASF_TYPE_BOOT: InfoTable = AcpiDmTableInfoAsf3; break; case ACPI_ASF_TYPE_ADDRESS: InfoTable = AcpiDmTableInfoAsf4; DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ADDRESS)); DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, Subtable)->Devices; DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS); break; default: AcpiOsPrintf ("\n**** Unknown ASF subtable type 0x%X\n", Subtable->Header.Type); return; } Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Subtable->Header.Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } /* Dump variable-length extra data */ switch (Type) { case ACPI_ASF_TYPE_ALERT: case ACPI_ASF_TYPE_CONTROL: for (i = 0; i < DataCount; i++) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, DataOffset, DataTable, DataLength, DataInfoTable); if (ACPI_FAILURE (Status)) { return; } DataTable = ACPI_ADD_PTR (UINT8, DataTable, DataLength); DataOffset += DataLength; } break; case ACPI_ASF_TYPE_ADDRESS: for (i = 0; i < DataLength; i++) { if (!(i % 16)) { AcpiDmLineHeader (DataOffset, 1, "Addresses"); } AcpiOsPrintf ("%2.2X ", *DataTable); DataTable++; DataOffset++; if (DataOffset > Table->Length) { AcpiOsPrintf ( "**** ACPI table terminates in the middle of a " "data structure! (ASF! table)\n"); return; } } AcpiOsPrintf ("\n"); break; default: break; } AcpiOsPrintf ("\n"); /* Point to next subtable */ if (!Subtable->Header.Length) { AcpiOsPrintf ("Invalid zero subtable header length\n"); return; } Offset += Subtable->Header.Length; Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Subtable, Subtable->Header.Length); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpAspt * * PARAMETERS: Table - A ASPT table * * RETURN: None * * DESCRIPTION: Format the contents of a ASPT table * ******************************************************************************/ void AcpiDmDumpAspt ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; UINT32 Offset = sizeof (ACPI_TABLE_ASPT); UINT32 Length = Table->Length; ACPI_ASPT_HEADER *Subtable; ACPI_DMTABLE_INFO *InfoTable; UINT16 Type; /* Main table */ Status = AcpiDmDumpTable(Length, 0, Table, 0, AcpiDmTableInfoAspt); /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_ASPT_HEADER, Table, Offset); while (Offset < Table->Length) { AcpiOsPrintf ("\n"); /* Common subtable header */ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoAsptHdr); if (ACPI_FAILURE (Status)) { return; } Type = Subtable->Type; switch (Type) { case ACPI_ASPT_TYPE_GLOBAL_REGS: InfoTable = AcpiDmTableInfoAspt0; break; case ACPI_ASPT_TYPE_SEV_MBOX_REGS: InfoTable = AcpiDmTableInfoAspt1; break; case ACPI_ASPT_TYPE_ACPI_MBOX_REGS: InfoTable = AcpiDmTableInfoAspt2; break; default: AcpiOsPrintf ("\n**** Unknown ASPT subtable type 0x%X\n", Subtable->Type); return; } Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Subtable->Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } AcpiOsPrintf ("\n"); /* Point to next subtable */ if (!Subtable->Length) { AcpiOsPrintf ("Invalid zero subtable header length\n"); return; } Offset += Subtable->Length; Subtable = ACPI_ADD_PTR (ACPI_ASPT_HEADER, Subtable, Subtable->Length); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpCdat * * PARAMETERS: InTable - A CDAT table * * RETURN: None * * DESCRIPTION: Format the contents of a CDAT. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpCdat ( ACPI_TABLE_HEADER *InTable) { ACPI_TABLE_CDAT *Table = ACPI_CAST_PTR (ACPI_TABLE_CDAT, InTable); ACPI_STATUS Status; ACPI_CDAT_HEADER *Subtable; ACPI_TABLE_CDAT *CdatTable = ACPI_CAST_PTR (ACPI_TABLE_CDAT, Table); ACPI_DMTABLE_INFO *InfoTable; UINT32 Length = CdatTable->Length; UINT32 Offset = sizeof (ACPI_TABLE_CDAT); UINT32 SubtableLength; UINT32 SubtableType; INT32 EntriesLength; /* Main table */ Status = AcpiDmDumpTable (Offset, 0, CdatTable, 0, AcpiDmTableInfoCdatTableHdr); if (ACPI_FAILURE (Status)) { return; } Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, sizeof (ACPI_TABLE_CDAT)); while (Offset < Table->Length) { /* Dump the common subtable header */ DbgPrint (ASL_DEBUG_OUTPUT, "0) HeaderOffset: %X\n", Offset); AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, sizeof (ACPI_CDAT_HEADER), AcpiDmTableInfoCdatHeader); if (ACPI_FAILURE (Status)) { return; } /* Point past the common subtable header, decode the subtable type */ Offset += sizeof (ACPI_CDAT_HEADER); SubtableType = Subtable->Type; switch (Subtable->Type) { case ACPI_CDAT_TYPE_DSMAS: Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset); SubtableLength = sizeof (ACPI_CDAT_DSMAS); InfoTable = AcpiDmTableInfoCdat0; break; case ACPI_CDAT_TYPE_DSLBIS: Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset); SubtableLength = sizeof (ACPI_CDAT_DSLBIS); DbgPrint (ASL_DEBUG_OUTPUT, "1) Offset: %X\n", Offset); InfoTable = AcpiDmTableInfoCdat1; break; case ACPI_CDAT_TYPE_DSMSCIS: Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset); SubtableLength = sizeof (ACPI_CDAT_DSMSCIS); InfoTable = AcpiDmTableInfoCdat2; break; case ACPI_CDAT_TYPE_DSIS: DbgPrint (ASL_DEBUG_OUTPUT, "2) Offset: %X ", Offset); SubtableLength = sizeof (ACPI_CDAT_DSIS); DbgPrint (ASL_DEBUG_OUTPUT, "1) input pointer: %p\n", Table); Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset); DbgPrint (ASL_DEBUG_OUTPUT, "1) output pointers: %p, %p, Offset: %X\n", Table, Subtable, Offset); DbgPrint (ASL_DEBUG_OUTPUT, "3) Offset: %X\n", Offset); InfoTable = AcpiDmTableInfoCdat3; break; case ACPI_CDAT_TYPE_DSEMTS: Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset); SubtableLength = sizeof (ACPI_CDAT_DSEMTS); InfoTable = AcpiDmTableInfoCdat4; break; case ACPI_CDAT_TYPE_SSLBIS: SubtableLength = Subtable->Length; InfoTable = AcpiDmTableInfoCdat5; Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset); break; default: fprintf (stderr, "ERROR: Unknown SubtableType: %X\n", Subtable->Type); return; } DbgPrint (ASL_DEBUG_OUTPUT, "SubtableType: %X, Length: %X Actual " "Length: %X Offset: %X tableptr: %p\n", SubtableType, Subtable->Length, SubtableLength, Offset, Table); /* * Do the subtable-specific fields */ Status = AcpiDmDumpTable (Length, Offset, Subtable, Offset, InfoTable); if (ACPI_FAILURE (Status)) { return; } DbgPrint (ASL_DEBUG_OUTPUT, "Subtable Type: %X, Offset: %X, SubtableLength: %X\n", SubtableType, Offset, SubtableLength); /* Additional sub-subtables, dependent on the main subtable type */ switch (SubtableType) { case ACPI_CDAT_TYPE_SSLBIS: Offset += sizeof (ACPI_CDAT_SSLBIS); Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset); DbgPrint (ASL_DEBUG_OUTPUT, "Case SSLBIS, Offset: %X, SubtableLength: %X " "Subtable->Length %X\n", Offset, SubtableLength, Subtable->Length); /* Generate the total length of all the SSLBE entries */ EntriesLength = SubtableLength - sizeof (ACPI_CDAT_HEADER) - sizeof (ACPI_CDAT_SSLBIS); DbgPrint (ASL_DEBUG_OUTPUT, "EntriesLength: %X, Offset: %X, Table->Length: %X\n", EntriesLength, Offset, Table->Length); /* Do each of the SSLBE Entries */ while ((EntriesLength > 0) && (Offset < Table->Length)) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, Offset, AcpiDmTableInfoCdatEntries); if (ACPI_FAILURE (Status)) { return; } EntriesLength -= sizeof (ACPI_CDAT_SSLBE); Offset += sizeof (ACPI_CDAT_SSLBE); Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset); } SubtableLength = 0; break; default: break; } DbgPrint (ASL_DEBUG_OUTPUT, "Offset: %X, Subtable Length: %X\n", Offset, SubtableLength); /* Point to next subtable */ Offset += SubtableLength; Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset); } return; } /******************************************************************************* * * FUNCTION: AcpiDmDumpCedt * * PARAMETERS: Table - A CEDT table * * RETURN: None * * DESCRIPTION: Format the contents of a CEDT. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpCedt ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_CEDT_HEADER *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_CEDT); /* There is no main table (other than the standard ACPI header) */ Subtable = ACPI_ADD_PTR (ACPI_CEDT_HEADER, Table, Offset); while (Offset < Table->Length) { /* Common subtable header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoCedtHdr); if (ACPI_FAILURE (Status)) { return; } switch (Subtable->Type) { case ACPI_CEDT_TYPE_CHBS: Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoCedt0); if (ACPI_FAILURE (Status)) { return; } break; case ACPI_CEDT_TYPE_CFMWS: { ACPI_CEDT_CFMWS *ptr = (ACPI_CEDT_CFMWS *) Subtable; unsigned int i, max = 0x01 << (ptr->InterleaveWays); /* print out table with first "Interleave target" */ Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoCedt1); if (ACPI_FAILURE (Status)) { return; } /* Now, print out any interleave targets beyond the first. */ for (i = 1; i < max; i++) { unsigned int loc_offset = Offset + (i * 4) + ACPI_OFFSET (ACPI_CEDT_CFMWS, InterleaveTargets); unsigned int *trg = &(ptr->InterleaveTargets[i]); Status = AcpiDmDumpTable (Length, loc_offset, trg, Subtable->Length, AcpiDmTableInfoCedt1_te); if (ACPI_FAILURE (Status)) { return; } } break; } default: AcpiOsPrintf ("\n**** Unknown CEDT subtable type 0x%X\n\n", Subtable->Type); /* Attempt to continue */ if (!Subtable->Length) { AcpiOsPrintf ("Invalid zero length subtable\n"); return; } } /* Point to next subtable */ Offset += Subtable->Length; Subtable = ACPI_ADD_PTR (ACPI_CEDT_HEADER, Subtable, Subtable->Length); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpCpep * * PARAMETERS: Table - A CPEP table * * RETURN: None * * DESCRIPTION: Format the contents of a CPEP. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpCpep ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_CPEP_POLLING *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_CPEP); /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset); while (Offset < Table->Length) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Header.Length, AcpiDmTableInfoCpep0); if (ACPI_FAILURE (Status)) { return; } /* Point to next subtable */ Offset += Subtable->Header.Length; Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Subtable, Subtable->Header.Length); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpCsrt * * PARAMETERS: Table - A CSRT table * * RETURN: None * * DESCRIPTION: Format the contents of a CSRT. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpCsrt ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_CSRT_GROUP *Subtable; ACPI_CSRT_SHARED_INFO *SharedInfoTable; ACPI_CSRT_DESCRIPTOR *SubSubtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_CSRT); UINT32 SubOffset; UINT32 SubSubOffset; UINT32 InfoLength; /* The main table only contains the ACPI header, thus already handled */ /* Subtables (Resource Groups) */ Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset); while (Offset < Table->Length) { /* Resource group subtable */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoCsrt0); if (ACPI_FAILURE (Status)) { return; } /* Shared info subtable (One per resource group) */ SubOffset = sizeof (ACPI_CSRT_GROUP); SharedInfoTable = ACPI_ADD_PTR (ACPI_CSRT_SHARED_INFO, Table, Offset + SubOffset); AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable, sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1); if (ACPI_FAILURE (Status)) { return; } SubOffset += Subtable->SharedInfoLength; /* Sub-Subtables (Resource Descriptors) */ SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table, Offset + SubOffset); while ((SubOffset < Subtable->Length) && ((Offset + SubOffset) < Table->Length)) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable, SubSubtable->Length, AcpiDmTableInfoCsrt2); if (ACPI_FAILURE (Status)) { return; } SubSubOffset = sizeof (ACPI_CSRT_DESCRIPTOR); /* Resource-specific info buffer */ InfoLength = SubSubtable->Length - SubSubOffset; if (InfoLength) { Status = AcpiDmDumpTable (Length, Offset + SubOffset + SubSubOffset, Table, InfoLength, AcpiDmTableInfoCsrt2a); if (ACPI_FAILURE (Status)) { return; } } /* Point to next sub-subtable */ SubOffset += SubSubtable->Length; SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubtable, SubSubtable->Length); } /* Point to next subtable */ Offset += Subtable->Length; Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable, Subtable->Length); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpDbg2 * * PARAMETERS: Table - A DBG2 table * * RETURN: None * * DESCRIPTION: Format the contents of a DBG2. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpDbg2 ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_DBG2_DEVICE *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_DBG2); UINT32 i; UINT32 ArrayOffset; UINT32 AbsoluteOffset; UINT8 *Array; /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset); while (Offset < Table->Length) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoDbg2Device); if (ACPI_FAILURE (Status)) { return; } /* Dump the BaseAddress array */ for (i = 0; i < Subtable->RegisterCount; i++) { ArrayOffset = Subtable->BaseAddressOffset + (sizeof (ACPI_GENERIC_ADDRESS) * i); AbsoluteOffset = Offset + ArrayOffset; Array = (UINT8 *) Subtable + ArrayOffset; Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, Subtable->Length, AcpiDmTableInfoDbg2Addr); if (ACPI_FAILURE (Status)) { return; } } /* Dump the AddressSize array */ for (i = 0; i < Subtable->RegisterCount; i++) { ArrayOffset = Subtable->AddressSizeOffset + (sizeof (UINT32) * i); AbsoluteOffset = Offset + ArrayOffset; Array = (UINT8 *) Subtable + ArrayOffset; Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, Subtable->Length, AcpiDmTableInfoDbg2Size); if (ACPI_FAILURE (Status)) { return; } } /* Dump the Namestring (required) */ AcpiOsPrintf ("\n"); ArrayOffset = Subtable->NamepathOffset; AbsoluteOffset = Offset + ArrayOffset; Array = (UINT8 *) Subtable + ArrayOffset; Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, Subtable->Length, AcpiDmTableInfoDbg2Name); if (ACPI_FAILURE (Status)) { return; } /* Dump the OemData (optional) */ if (Subtable->OemDataOffset) { Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset, Table, Subtable->OemDataLength, AcpiDmTableInfoDbg2OemData); if (ACPI_FAILURE (Status)) { return; } } /* Point to next subtable */ Offset += Subtable->Length; Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable, Subtable->Length); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpDmar * * PARAMETERS: Table - A DMAR table * * RETURN: None * * DESCRIPTION: Format the contents of a DMAR. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpDmar ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_DMAR_HEADER *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_DMAR); ACPI_DMTABLE_INFO *InfoTable; ACPI_DMAR_DEVICE_SCOPE *ScopeTable; UINT32 ScopeOffset; UINT8 *PciPath; UINT32 PathOffset; /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset); while (Offset < Table->Length) { /* Common subtable header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoDmarHdr); if (ACPI_FAILURE (Status)) { return; } AcpiOsPrintf ("\n"); switch (Subtable->Type) { case ACPI_DMAR_TYPE_HARDWARE_UNIT: InfoTable = AcpiDmTableInfoDmar0; ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT); break; case ACPI_DMAR_TYPE_RESERVED_MEMORY: InfoTable = AcpiDmTableInfoDmar1; ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY); break; case ACPI_DMAR_TYPE_ROOT_ATS: InfoTable = AcpiDmTableInfoDmar2; ScopeOffset = sizeof (ACPI_DMAR_ATSR); break; case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: InfoTable = AcpiDmTableInfoDmar3; ScopeOffset = sizeof (ACPI_DMAR_RHSA); break; case ACPI_DMAR_TYPE_NAMESPACE: InfoTable = AcpiDmTableInfoDmar4; ScopeOffset = sizeof (ACPI_DMAR_ANDD); break; case ACPI_DMAR_TYPE_SATC: InfoTable = AcpiDmTableInfoDmar5; ScopeOffset = sizeof (ACPI_DMAR_SATC); break; default: AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", Subtable->Type); return; } Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } /* * Dump the optional device scope entries */ if ((Subtable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || (Subtable->Type == ACPI_DMAR_TYPE_NAMESPACE)) { /* These types do not support device scopes */ goto NextSubtable; } ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset); while (ScopeOffset < Subtable->Length) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable, ScopeTable->Length, AcpiDmTableInfoDmarScope); if (ACPI_FAILURE (Status)) { return; } AcpiOsPrintf ("\n"); /* Dump the PCI Path entries for this device scope */ PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */ PciPath = ACPI_ADD_PTR (UINT8, ScopeTable, sizeof (ACPI_DMAR_DEVICE_SCOPE)); while (PathOffset < ScopeTable->Length) { AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2, "PCI Path"); AcpiOsPrintf ("%2.2X,%2.2X\n", PciPath[0], PciPath[1]); /* Point to next PCI Path entry */ PathOffset += 2; PciPath += 2; AcpiOsPrintf ("\n"); } /* Point to next device scope entry */ ScopeOffset += ScopeTable->Length; ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, ScopeTable, ScopeTable->Length); } NextSubtable: /* Point to next subtable */ Offset += Subtable->Length; Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable, Subtable->Length); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpDrtm * * PARAMETERS: Table - A DRTM table * * RETURN: None * * DESCRIPTION: Format the contents of a DRTM. * ******************************************************************************/ void AcpiDmDumpDrtm ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; UINT32 Offset; ACPI_DRTM_VTABLE_LIST *DrtmVtl; ACPI_DRTM_RESOURCE_LIST *DrtmRl; ACPI_DRTM_DPS_ID *DrtmDps; UINT32 Count; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoDrtm); if (ACPI_FAILURE (Status)) { return; } Offset = sizeof (ACPI_TABLE_DRTM); /* Sub-tables */ /* Dump ValidatedTable length */ DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset); AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables), AcpiDmTableInfoDrtm0); if (ACPI_FAILURE (Status)) { return; } Offset += ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables); /* Dump Validated table addresses */ Count = 0; while ((Offset < Table->Length) && (DrtmVtl->ValidatedTableCount > Count)) { Status = AcpiDmDumpTable (Table->Length, Offset, ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64), AcpiDmTableInfoDrtm0a); if (ACPI_FAILURE (Status)) { return; } Offset += sizeof (UINT64); Count++; } /* Dump ResourceList length */ DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset); AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources), AcpiDmTableInfoDrtm1); if (ACPI_FAILURE (Status)) { return; } Offset += ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources); /* Dump the Resource List */ Count = 0; while ((Offset < Table->Length) && (DrtmRl->ResourceCount > Count)) { Status = AcpiDmDumpTable (Table->Length, Offset, ACPI_ADD_PTR (void, Table, Offset), sizeof (ACPI_DRTM_RESOURCE), AcpiDmTableInfoDrtm1a); if (ACPI_FAILURE (Status)) { return; } Offset += sizeof (ACPI_DRTM_RESOURCE); Count++; } /* Dump DPS */ DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset); AcpiOsPrintf ("\n"); (void) AcpiDmDumpTable (Table->Length, Offset, DrtmDps, sizeof (ACPI_DRTM_DPS_ID), AcpiDmTableInfoDrtm2); } /******************************************************************************* * * FUNCTION: AcpiDmDumpEinj * * PARAMETERS: Table - A EINJ table * * RETURN: None * * DESCRIPTION: Format the contents of a EINJ. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpEinj ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_WHEA_HEADER *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_EINJ); /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); while (Offset < Table->Length) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0); if (ACPI_FAILURE (Status)) { return; } /* Point to next subtable (each subtable is of fixed length) */ Offset += sizeof (ACPI_WHEA_HEADER); Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable, sizeof (ACPI_WHEA_HEADER)); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpErst * * PARAMETERS: Table - A ERST table * * RETURN: None * * DESCRIPTION: Format the contents of a ERST. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpErst ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_WHEA_HEADER *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_ERST); /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); while (Offset < Table->Length) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0); if (ACPI_FAILURE (Status)) { return; } /* Point to next subtable (each subtable is of fixed length) */ Offset += sizeof (ACPI_WHEA_HEADER); Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable, sizeof (ACPI_WHEA_HEADER)); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpFpdt * * PARAMETERS: Table - A FPDT table * * RETURN: None * * DESCRIPTION: Format the contents of a FPDT. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpFpdt ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_FPDT_HEADER *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_FPDT); ACPI_DMTABLE_INFO *InfoTable; /* There is no main table (other than the standard ACPI header) */ /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset); while (Offset < Table->Length) { /* Common subtable header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoFpdtHdr); if (ACPI_FAILURE (Status)) { return; } switch (Subtable->Type) { case ACPI_FPDT_TYPE_BOOT: InfoTable = AcpiDmTableInfoFpdt0; break; case ACPI_FPDT_TYPE_S3PERF: InfoTable = AcpiDmTableInfoFpdt1; break; default: AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n", Subtable->Type); /* Attempt to continue */ if (!Subtable->Length) { AcpiOsPrintf ("Invalid zero length subtable\n"); return; } goto NextSubtable; } Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } NextSubtable: /* Point to next subtable */ Offset += Subtable->Length; Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, Subtable->Length); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpGtdt * * PARAMETERS: Table - A GTDT table * * RETURN: None * * DESCRIPTION: Format the contents of a GTDT. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpGtdt ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_GTDT_HEADER *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_GTDT); ACPI_DMTABLE_INFO *InfoTable; UINT32 SubtableLength; UINT32 GtCount; ACPI_GTDT_TIMER_ENTRY *GtxTable; /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt); if (ACPI_FAILURE (Status)) { return; } /* Rev 3 fields */ Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset); if (Table->Revision > 2) { SubtableLength = sizeof (ACPI_GTDT_EL2); Status = AcpiDmDumpTable (Length, Offset, Subtable, SubtableLength, AcpiDmTableInfoGtdtEl2); if (ACPI_FAILURE (Status)) { return; } Offset += SubtableLength; } Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset); /* Subtables */ while (Offset < Table->Length) { /* Common subtable header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoGtdtHdr); if (ACPI_FAILURE (Status)) { return; } GtCount = 0; switch (Subtable->Type) { case ACPI_GTDT_TYPE_TIMER_BLOCK: SubtableLength = sizeof (ACPI_GTDT_TIMER_BLOCK); GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, Subtable))->TimerCount; InfoTable = AcpiDmTableInfoGtdt0; break; case ACPI_GTDT_TYPE_WATCHDOG: SubtableLength = sizeof (ACPI_GTDT_WATCHDOG); InfoTable = AcpiDmTableInfoGtdt1; break; default: /* Cannot continue on unknown type - no length */ AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", Subtable->Type); return; } Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } /* Point to end of current subtable (each subtable above is of fixed length) */ Offset += SubtableLength; /* If there are any Gt Timer Blocks from above, dump them now */ if (GtCount) { GtxTable = ACPI_ADD_PTR ( ACPI_GTDT_TIMER_ENTRY, Subtable, SubtableLength); SubtableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY); while (GtCount) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, GtxTable, sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a); if (ACPI_FAILURE (Status)) { return; } Offset += sizeof (ACPI_GTDT_TIMER_ENTRY); GtxTable++; GtCount--; } } /* Point to next subtable */ Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Subtable, SubtableLength); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpHest * * PARAMETERS: Table - A HEST table * * RETURN: None * * DESCRIPTION: Format the contents of a HEST. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpHest ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_HEST_HEADER *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_HEST); ACPI_DMTABLE_INFO *InfoTable; UINT32 SubtableLength; UINT32 BankCount; ACPI_HEST_IA_ERROR_BANK *BankTable; /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset); while (Offset < Table->Length) { BankCount = 0; switch (Subtable->Type) { case ACPI_HEST_TYPE_IA32_CHECK: InfoTable = AcpiDmTableInfoHest0; SubtableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK); BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK, Subtable))->NumHardwareBanks; break; case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK: InfoTable = AcpiDmTableInfoHest1; SubtableLength = sizeof (ACPI_HEST_IA_CORRECTED); BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED, Subtable))->NumHardwareBanks; break; case ACPI_HEST_TYPE_IA32_NMI: InfoTable = AcpiDmTableInfoHest2; SubtableLength = sizeof (ACPI_HEST_IA_NMI); break; case ACPI_HEST_TYPE_AER_ROOT_PORT: InfoTable = AcpiDmTableInfoHest6; SubtableLength = sizeof (ACPI_HEST_AER_ROOT); break; case ACPI_HEST_TYPE_AER_ENDPOINT: InfoTable = AcpiDmTableInfoHest7; SubtableLength = sizeof (ACPI_HEST_AER); break; case ACPI_HEST_TYPE_AER_BRIDGE: InfoTable = AcpiDmTableInfoHest8; SubtableLength = sizeof (ACPI_HEST_AER_BRIDGE); break; case ACPI_HEST_TYPE_GENERIC_ERROR: InfoTable = AcpiDmTableInfoHest9; SubtableLength = sizeof (ACPI_HEST_GENERIC); break; case ACPI_HEST_TYPE_GENERIC_ERROR_V2: InfoTable = AcpiDmTableInfoHest10; SubtableLength = sizeof (ACPI_HEST_GENERIC_V2); break; case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK: InfoTable = AcpiDmTableInfoHest11; SubtableLength = sizeof (ACPI_HEST_IA_DEFERRED_CHECK); BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_DEFERRED_CHECK, Subtable))->NumHardwareBanks; break; default: /* Cannot continue on unknown type - no length */ AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n", Subtable->Type); return; } AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, SubtableLength, InfoTable); if (ACPI_FAILURE (Status)) { return; } /* Point to end of current subtable (each subtable above is of fixed length) */ Offset += SubtableLength; /* If there are any (fixed-length) Error Banks from above, dump them now */ if (BankCount) { BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, Subtable, SubtableLength); SubtableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK); while (BankCount) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, BankTable, sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank); if (ACPI_FAILURE (Status)) { return; } Offset += sizeof (ACPI_HEST_IA_ERROR_BANK); BankTable++; BankCount--; } } /* Point to next subtable */ Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Subtable, SubtableLength); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpHmat * * PARAMETERS: Table - A HMAT table * * RETURN: None * * DESCRIPTION: Format the contents of a HMAT. * ******************************************************************************/ void AcpiDmDumpHmat ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_HMAT_STRUCTURE *HmatStruct; ACPI_HMAT_LOCALITY *HmatLocality; ACPI_HMAT_CACHE *HmatCache; UINT32 Offset; UINT32 SubtableOffset; UINT32 Length; ACPI_DMTABLE_INFO *InfoTable; UINT32 i, j; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoHmat); if (ACPI_FAILURE (Status)) { return; } Offset = sizeof (ACPI_TABLE_HMAT); while (Offset < Table->Length) { AcpiOsPrintf ("\n"); /* Dump HMAT structure header */ HmatStruct = ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, Table, Offset); if (HmatStruct->Length < sizeof (ACPI_HMAT_STRUCTURE)) { AcpiOsPrintf ("Invalid HMAT structure length\n"); return; } Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct, HmatStruct->Length, AcpiDmTableInfoHmatHdr); if (ACPI_FAILURE (Status)) { return; } switch (HmatStruct->Type) { case ACPI_HMAT_TYPE_ADDRESS_RANGE: InfoTable = AcpiDmTableInfoHmat0; Length = sizeof (ACPI_HMAT_PROXIMITY_DOMAIN); break; case ACPI_HMAT_TYPE_LOCALITY: InfoTable = AcpiDmTableInfoHmat1; Length = sizeof (ACPI_HMAT_LOCALITY); break; case ACPI_HMAT_TYPE_CACHE: InfoTable = AcpiDmTableInfoHmat2; Length = sizeof (ACPI_HMAT_CACHE); break; default: AcpiOsPrintf ("\n**** Unknown HMAT structure type 0x%X\n", HmatStruct->Type); /* Attempt to continue */ goto NextSubtable; } /* Dump HMAT structure body */ if (HmatStruct->Length < Length) { AcpiOsPrintf ("Invalid HMAT structure length\n"); return; } Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct, HmatStruct->Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } /* Dump HMAT structure additional */ switch (HmatStruct->Type) { case ACPI_HMAT_TYPE_LOCALITY: HmatLocality = ACPI_CAST_PTR (ACPI_HMAT_LOCALITY, HmatStruct); SubtableOffset = sizeof (ACPI_HMAT_LOCALITY); /* Dump initiator proximity domains */ if ((UINT32)(HmatStruct->Length - SubtableOffset) < (UINT32)(HmatLocality->NumberOfInitiatorPDs * 4)) { AcpiOsPrintf ("Invalid initiator proximity domain number\n"); return; } for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++) { Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), 4, AcpiDmTableInfoHmat1a); if (ACPI_FAILURE (Status)) { return; } SubtableOffset += 4; } /* Dump target proximity domains */ if ((UINT32)(HmatStruct->Length - SubtableOffset) < (UINT32)(HmatLocality->NumberOfTargetPDs * 4)) { AcpiOsPrintf ("Invalid target proximity domain number\n"); return; } for (i = 0; i < HmatLocality->NumberOfTargetPDs; i++) { Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), 4, AcpiDmTableInfoHmat1b); if (ACPI_FAILURE (Status)) { return; } SubtableOffset += 4; } /* Dump latency/bandwidth entris */ if ((UINT32)(HmatStruct->Length - SubtableOffset) < (UINT32)(HmatLocality->NumberOfInitiatorPDs * HmatLocality->NumberOfTargetPDs * 2)) { AcpiOsPrintf ("Invalid latency/bandwidth entry number\n"); return; } for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++) { for (j = 0; j < HmatLocality->NumberOfTargetPDs; j++) { Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), 2, AcpiDmTableInfoHmat1c); if (ACPI_FAILURE(Status)) { return; } SubtableOffset += 2; } } break; case ACPI_HMAT_TYPE_CACHE: HmatCache = ACPI_CAST_PTR (ACPI_HMAT_CACHE, HmatStruct); SubtableOffset = sizeof (ACPI_HMAT_CACHE); /* Dump SMBIOS handles */ if ((UINT32)(HmatStruct->Length - SubtableOffset) < (UINT32)(HmatCache->NumberOfSMBIOSHandles * 2)) { AcpiOsPrintf ("Invalid SMBIOS handle number\n"); return; } for (i = 0; i < HmatCache->NumberOfSMBIOSHandles; i++) { Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), 2, AcpiDmTableInfoHmat2a); if (ACPI_FAILURE (Status)) { return; } SubtableOffset += 2; } break; default: break; } NextSubtable: /* Point to next HMAT structure subtable */ Offset += (HmatStruct->Length); } } src/acpica/source/common/dmtbdump2.c000066400000000000000000002574431465205512700177450ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dmtbdump2 - Dump ACPI data tables that contain no AML code * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include #include "acpi.h" #include "accommon.h" #include "acdisasm.h" #include "actables.h" #include "aslcompiler.h" /* This module used for application-level code only */ #define _COMPONENT ACPI_CA_DISASSEMBLER ACPI_MODULE_NAME ("dmtbdump2") /******************************************************************************* * * FUNCTION: AcpiDmDumpIort * * PARAMETERS: Table - A IORT table * * RETURN: None * * DESCRIPTION: Format the contents of a IORT * ******************************************************************************/ void AcpiDmDumpIort ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_TABLE_IORT *Iort; ACPI_IORT_NODE *IortNode; ACPI_IORT_ITS_GROUP *IortItsGroup = NULL; ACPI_IORT_SMMU *IortSmmu = NULL; ACPI_IORT_RMR *IortRmr = NULL; UINT32 Offset; UINT32 NodeOffset; UINT32 Length; ACPI_DMTABLE_INFO *InfoTable; char *String; UINT32 i; UINT32 MappingByteLength; UINT8 Revision; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIort); if (ACPI_FAILURE (Status)) { return; } Revision = Table->Revision; /* IORT Revisions E, E.a and E.c have known issues and are not supported */ if (Revision == 1 || Revision == 2 || Revision == 4) { AcpiOsPrintf ("\n**** Unsupported IORT revision 0x%X\n", Revision); return; } Iort = ACPI_CAST_PTR (ACPI_TABLE_IORT, Table); Offset = sizeof (ACPI_TABLE_IORT); /* Dump the OptionalPadding (optional) */ if (Iort->NodeOffset > Offset) { Status = AcpiDmDumpTable (Table->Length, Offset, Table, Iort->NodeOffset - Offset, AcpiDmTableInfoIortPad); if (ACPI_FAILURE (Status)) { return; } } Offset = Iort->NodeOffset; while (Offset < Table->Length) { /* Common subtable header */ IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, Table, Offset); AcpiOsPrintf ("\n"); Length = ACPI_OFFSET (ACPI_IORT_NODE, NodeData); if (Revision == 0) { Status = AcpiDmDumpTable (Table->Length, Offset, IortNode, Length, AcpiDmTableInfoIortHdr); } else if (Revision >= 3) { Status = AcpiDmDumpTable (Table->Length, Offset, IortNode, Length, AcpiDmTableInfoIortHdr3); } if (ACPI_FAILURE (Status)) { return; } NodeOffset = Length; switch (IortNode->Type) { case ACPI_IORT_NODE_ITS_GROUP: InfoTable = AcpiDmTableInfoIort0; Length = ACPI_OFFSET (ACPI_IORT_ITS_GROUP, Identifiers); IortItsGroup = ACPI_ADD_PTR (ACPI_IORT_ITS_GROUP, IortNode, NodeOffset); break; case ACPI_IORT_NODE_NAMED_COMPONENT: InfoTable = AcpiDmTableInfoIort1; Length = ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT, DeviceName); String = ACPI_ADD_PTR (char, IortNode, NodeOffset + Length); Length += strlen (String) + 1; break; case ACPI_IORT_NODE_PCI_ROOT_COMPLEX: InfoTable = AcpiDmTableInfoIort2; Length = IortNode->Length - NodeOffset; break; case ACPI_IORT_NODE_SMMU: InfoTable = AcpiDmTableInfoIort3; Length = ACPI_OFFSET (ACPI_IORT_SMMU, Interrupts); IortSmmu = ACPI_ADD_PTR (ACPI_IORT_SMMU, IortNode, NodeOffset); break; case ACPI_IORT_NODE_SMMU_V3: InfoTable = AcpiDmTableInfoIort4; Length = IortNode->Length - NodeOffset; break; case ACPI_IORT_NODE_PMCG: InfoTable = AcpiDmTableInfoIort5; Length = IortNode->Length - NodeOffset; break; case ACPI_IORT_NODE_RMR: InfoTable = AcpiDmTableInfoIort6; Length = IortNode->Length - NodeOffset; IortRmr = ACPI_ADD_PTR (ACPI_IORT_RMR, IortNode, NodeOffset); break; default: AcpiOsPrintf ("\n**** Unknown IORT node type 0x%X\n", IortNode->Type); /* Attempt to continue */ if (!IortNode->Length) { AcpiOsPrintf ("Invalid zero length IORT node\n"); return; } goto NextSubtable; } /* Dump the node subtable header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } NodeOffset += Length; /* Dump the node specific data */ switch (IortNode->Type) { case ACPI_IORT_NODE_ITS_GROUP: /* Validate IortItsGroup to avoid compiler warnings */ if (IortItsGroup) { for (i = 0; i < IortItsGroup->ItsCount; i++) { Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), 4, AcpiDmTableInfoIort0a); if (ACPI_FAILURE (Status)) { return; } NodeOffset += 4; } } break; case ACPI_IORT_NODE_NAMED_COMPONENT: /* Dump the Padding (optional) */ if (IortNode->Length > NodeOffset) { MappingByteLength = IortNode->MappingCount * sizeof (ACPI_IORT_ID_MAPPING); Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, Table, IortNode->Length - NodeOffset - MappingByteLength, AcpiDmTableInfoIort1a); if (ACPI_FAILURE (Status)) { return; } } break; case ACPI_IORT_NODE_SMMU: AcpiOsPrintf ("\n"); /* Validate IortSmmu to avoid compiler warnings */ if (IortSmmu) { Length = 2 * sizeof (UINT64); NodeOffset = IortSmmu->GlobalInterruptOffset; Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), Length, AcpiDmTableInfoIort3a); if (ACPI_FAILURE (Status)) { return; } NodeOffset = IortSmmu->ContextInterruptOffset; for (i = 0; i < IortSmmu->ContextInterruptCount; i++) { Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), 8, AcpiDmTableInfoIort3b); if (ACPI_FAILURE (Status)) { return; } NodeOffset += 8; } NodeOffset = IortSmmu->PmuInterruptOffset; for (i = 0; i < IortSmmu->PmuInterruptCount; i++) { Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), 8, AcpiDmTableInfoIort3c); if (ACPI_FAILURE (Status)) { return; } NodeOffset += 8; } } break; case ACPI_IORT_NODE_RMR: /* Validate IortRmr to avoid compiler warnings */ if (IortRmr) { NodeOffset = IortRmr->RmrOffset; Length = sizeof (ACPI_IORT_RMR_DESC); for (i = 0; i < IortRmr->RmrCount; i++) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), Length, AcpiDmTableInfoIort6a); if (ACPI_FAILURE (Status)) { return; } NodeOffset += Length; } } break; default: break; } /* Dump the ID mappings */ NodeOffset = IortNode->MappingOffset; for (i = 0; i < IortNode->MappingCount; i++) { AcpiOsPrintf ("\n"); Length = sizeof (ACPI_IORT_ID_MAPPING); Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), Length, AcpiDmTableInfoIortMap); if (ACPI_FAILURE (Status)) { return; } NodeOffset += Length; } NextSubtable: /* Point to next node subtable */ Offset += IortNode->Length; } } /******************************************************************************* * * FUNCTION: AcpiDmDumpIvrs * * PARAMETERS: Table - A IVRS table * * RETURN: None * * DESCRIPTION: Format the contents of a IVRS. Notes: * The IVRS is essentially a flat table, with the following * structure: *
*
* * * ... * * * * ... * ******************************************************************************/ void AcpiDmDumpIvrs ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; UINT32 Offset = sizeof (ACPI_TABLE_IVRS); UINT32 EntryOffset; UINT32 EntryLength; UINT32 EntryType; ACPI_IVRS_DEVICE_HID *HidSubtable; ACPI_IVRS_DE_HEADER *DeviceEntry; ACPI_IVRS_HEADER *Subtable; ACPI_DMTABLE_INFO *InfoTable; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset); while (Offset < Table->Length) { switch (Subtable->Type) { /* Type 10h, IVHD (I/O Virtualization Hardware Definition) */ case ACPI_IVRS_TYPE_HARDWARE1: AcpiOsPrintf ("\n"); InfoTable = AcpiDmTableInfoIvrsHware1; break; /* Types 11h, 40h, IVHD (I/O Virtualization Hardware Definition) */ case ACPI_IVRS_TYPE_HARDWARE2: case ACPI_IVRS_TYPE_HARDWARE3: AcpiOsPrintf ("\n"); InfoTable = AcpiDmTableInfoIvrsHware23; break; /* Types 20h-22h, IVMD (I/O Virtualization Memory Definition Block) */ case ACPI_IVRS_TYPE_MEMORY1: case ACPI_IVRS_TYPE_MEMORY2: case ACPI_IVRS_TYPE_MEMORY3: AcpiOsPrintf ("\n"); InfoTable = AcpiDmTableInfoIvrsMemory; break; default: AcpiOsPrintf ("\n**** Unknown IVRS subtable type 0x%X\n", Subtable->Type); /* Attempt to continue */ if (!Subtable->Length) { AcpiOsPrintf ("Invalid zero length subtable\n"); return; } goto NextSubtable; } /* Dump the subtable */ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Subtable->Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } /* The hardware subtables (IVHD) can contain multiple device entries */ if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1 || Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2 || Subtable->Type == ACPI_IVRS_TYPE_HARDWARE3) { if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1) { EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE1); DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable, sizeof (ACPI_IVRS_HARDWARE1)); } else { /* ACPI_IVRS_TYPE_HARDWARE2, HARDWARE3 subtable types */ EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE2); DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable, sizeof (ACPI_IVRS_HARDWARE2)); } /* Process all of the Device Entries */ while (EntryOffset < (Offset + Subtable->Length)) { AcpiOsPrintf ("\n"); /* * Upper 2 bits of Type encode the length of the device entry * * 00 = 4 byte * 01 = 8 byte * 1x = variable length */ EntryType = DeviceEntry->Type; EntryLength = EntryType >> 6 == 1 ? 8 : 4; switch (EntryType) { /* 4-byte device entries */ case ACPI_IVRS_TYPE_PAD4: case ACPI_IVRS_TYPE_ALL: case ACPI_IVRS_TYPE_SELECT: case ACPI_IVRS_TYPE_START: case ACPI_IVRS_TYPE_END: InfoTable = AcpiDmTableInfoIvrs4; break; /* 8-byte entries, type A */ case ACPI_IVRS_TYPE_ALIAS_SELECT: case ACPI_IVRS_TYPE_ALIAS_START: InfoTable = AcpiDmTableInfoIvrs8a; break; /* 8-byte entries, type B */ case ACPI_IVRS_TYPE_PAD8: case ACPI_IVRS_TYPE_EXT_SELECT: case ACPI_IVRS_TYPE_EXT_START: InfoTable = AcpiDmTableInfoIvrs8b; break; /* 8-byte entries, type C */ case ACPI_IVRS_TYPE_SPECIAL: InfoTable = AcpiDmTableInfoIvrs8c; break; /* Variable-length entries */ case ACPI_IVRS_TYPE_HID: EntryLength = 4; InfoTable = AcpiDmTableInfoIvrsHid; break; default: InfoTable = AcpiDmTableInfoIvrs4; AcpiOsPrintf ( "\n**** Unknown IVRS device entry type/length: " "0x%.2X/0x%X at offset 0x%.4X: (header below)\n", EntryType, EntryLength, EntryOffset); break; } /* Dump the Device Entry */ Status = AcpiDmDumpTable (Table->Length, EntryOffset, DeviceEntry, EntryLength, InfoTable); if (ACPI_FAILURE (Status)) { return; } HidSubtable = ACPI_CAST_PTR (ACPI_IVRS_DEVICE_HID, DeviceEntry); EntryOffset += EntryLength; DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, HidSubtable, EntryLength); if (EntryType == ACPI_IVRS_TYPE_HID) { /* * Determine if the HID is an integer or a string. * An integer is defined to be 32 bits, with the upper 32 bits * set to zero. (from the ACPI Spec): "The HID can be a 32-bit * integer or a character string. If an integer, the lower * 4 bytes of the field contain the integer and the upper * 4 bytes are padded with 0". */ if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiHid)) { Status = AcpiDmDumpTable (Table->Length, EntryOffset, &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidInteger); } else { Status = AcpiDmDumpTable (Table->Length, EntryOffset, &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidString); } if (ACPI_FAILURE (Status)) { return; } EntryOffset += 8; /* * Determine if the CID is an integer or a string. The format * of the CID is the same as the HID above. From ACPI Spec: * "If present, CID must be a single Compatible Device ID * following the same format as the HID field." */ if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiCid)) { Status = AcpiDmDumpTable (Table->Length, EntryOffset, &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidInteger); } else { Status = AcpiDmDumpTable (Table->Length, EntryOffset, &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidString); } if (ACPI_FAILURE (Status)) { return; } EntryOffset += 8; EntryLength = HidSubtable->UidLength; if (EntryLength > ACPI_IVRS_UID_NOT_PRESENT) { /* Dump the UID based upon the UidType field (String or Integer) */ if (HidSubtable->UidType == ACPI_IVRS_UID_IS_STRING) { Status = AcpiDmDumpTable (Table->Length, EntryOffset, &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidString); if (ACPI_FAILURE (Status)) { return; } } else /* ACPI_IVRS_UID_IS_INTEGER */ { Status = AcpiDmDumpTable (Table->Length, EntryOffset, &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidInteger); if (ACPI_FAILURE (Status)) { return; } } } EntryOffset += EntryLength+2; DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Table, EntryOffset); } } } NextSubtable: /* Point to next subtable */ Offset += Subtable->Length; Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpLpit * * PARAMETERS: Table - A LPIT table * * RETURN: None * * DESCRIPTION: Format the contents of a LPIT. This table type consists * of an open-ended number of subtables. Note: There are no * entries in the main table. An LPIT consists of the table * header and then subtables only. * ******************************************************************************/ void AcpiDmDumpLpit ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_LPIT_HEADER *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_LPIT); ACPI_DMTABLE_INFO *InfoTable; UINT32 SubtableLength; /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset); while (Offset < Table->Length) { /* Common subtable header */ Status = AcpiDmDumpTable (Length, Offset, Subtable, sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr); if (ACPI_FAILURE (Status)) { return; } switch (Subtable->Type) { case ACPI_LPIT_TYPE_NATIVE_CSTATE: InfoTable = AcpiDmTableInfoLpit0; SubtableLength = sizeof (ACPI_LPIT_NATIVE); break; default: /* Cannot continue on unknown type - no length */ AcpiOsPrintf ("\n**** Unknown LPIT subtable type 0x%X\n", Subtable->Type); return; } Status = AcpiDmDumpTable (Length, Offset, Subtable, SubtableLength, InfoTable); if (ACPI_FAILURE (Status)) { return; } AcpiOsPrintf ("\n"); /* Point to next subtable */ Offset += SubtableLength; Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Subtable, SubtableLength); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpMadt * * PARAMETERS: Table - A MADT table * * RETURN: None * * DESCRIPTION: Format the contents of a MADT. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpMadt ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_SUBTABLE_HEADER *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_MADT); ACPI_DMTABLE_INFO *InfoTable; UINT8 Revision; /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt); if (ACPI_FAILURE (Status)) { return; } Revision = Table->Revision; /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); DbgPrint (ASL_PARSE_OUTPUT, "//0B) Offset %X, from table start: 0x%8.8X%8.8X\n", Offset, ACPI_FORMAT_UINT64 (ACPI_CAST_PTR (char, Subtable) - ACPI_CAST_PTR (char, Table))); while (Offset < Table->Length) { /* Common subtable header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoMadtHdr); if (ACPI_FAILURE (Status)) { return; } DbgPrint (ASL_PARSE_OUTPUT, "subtableType: %X\n", Subtable->Type); switch (Subtable->Type) { case ACPI_MADT_TYPE_LOCAL_APIC: InfoTable = AcpiDmTableInfoMadt0; break; case ACPI_MADT_TYPE_IO_APIC: InfoTable = AcpiDmTableInfoMadt1; break; case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE: InfoTable = AcpiDmTableInfoMadt2; break; case ACPI_MADT_TYPE_NMI_SOURCE: InfoTable = AcpiDmTableInfoMadt3; break; case ACPI_MADT_TYPE_LOCAL_APIC_NMI: InfoTable = AcpiDmTableInfoMadt4; break; case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE: InfoTable = AcpiDmTableInfoMadt5; break; case ACPI_MADT_TYPE_IO_SAPIC: InfoTable = AcpiDmTableInfoMadt6; break; case ACPI_MADT_TYPE_LOCAL_SAPIC: InfoTable = AcpiDmTableInfoMadt7; break; case ACPI_MADT_TYPE_INTERRUPT_SOURCE: InfoTable = AcpiDmTableInfoMadt8; break; case ACPI_MADT_TYPE_LOCAL_X2APIC: InfoTable = AcpiDmTableInfoMadt9; break; case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI: InfoTable = AcpiDmTableInfoMadt10; break; case ACPI_MADT_TYPE_GENERIC_INTERRUPT: if (Revision > 6) InfoTable = AcpiDmTableInfoMadt11b; else if (Revision == 6) InfoTable = AcpiDmTableInfoMadt11a; else InfoTable = AcpiDmTableInfoMadt11; break; case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR: InfoTable = AcpiDmTableInfoMadt12; break; case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: InfoTable = AcpiDmTableInfoMadt13; break; case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: InfoTable = Revision > 6 ? AcpiDmTableInfoMadt14a : AcpiDmTableInfoMadt14; break; case ACPI_MADT_TYPE_GENERIC_TRANSLATOR: InfoTable = Revision > 6 ? AcpiDmTableInfoMadt15a : AcpiDmTableInfoMadt15; break; case ACPI_MADT_TYPE_MULTIPROC_WAKEUP: InfoTable = AcpiDmTableInfoMadt16; break; case ACPI_MADT_TYPE_CORE_PIC: InfoTable = AcpiDmTableInfoMadt17; break; case ACPI_MADT_TYPE_LIO_PIC: InfoTable = AcpiDmTableInfoMadt18; break; case ACPI_MADT_TYPE_HT_PIC: InfoTable = AcpiDmTableInfoMadt19; break; case ACPI_MADT_TYPE_EIO_PIC: InfoTable = AcpiDmTableInfoMadt20; break; case ACPI_MADT_TYPE_MSI_PIC: InfoTable = AcpiDmTableInfoMadt21; break; case ACPI_MADT_TYPE_BIO_PIC: InfoTable = AcpiDmTableInfoMadt22; break; case ACPI_MADT_TYPE_LPC_PIC: InfoTable = AcpiDmTableInfoMadt23; break; case ACPI_MADT_TYPE_RINTC: InfoTable = AcpiDmTableInfoMadt24; break; case ACPI_MADT_TYPE_IMSIC: InfoTable = AcpiDmTableInfoMadt25; break; case ACPI_MADT_TYPE_APLIC: InfoTable = AcpiDmTableInfoMadt26; break; case ACPI_MADT_TYPE_PLIC: InfoTable = AcpiDmTableInfoMadt27; break; default: if ((Subtable->Type >= ACPI_MADT_TYPE_RESERVED) && (Subtable->Type < ACPI_MADT_TYPE_OEM_RESERVED)) { AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", Subtable->Type); goto NextSubtable; } else if (Subtable->Type >= ACPI_MADT_TYPE_OEM_RESERVED) { DbgPrint (ASL_PARSE_OUTPUT, "//[Found an OEM structure, type = %0x]\n", Subtable->Type); Offset += sizeof (ACPI_SUBTABLE_HEADER); DbgPrint (ASL_PARSE_OUTPUT, "//[0) Subtable->Length = %X, Subtable = %p, Offset = %X]\n", Subtable->Length, Subtable, Offset); DbgPrint (ASL_PARSE_OUTPUT, "//[0A) Offset from table start: 0x%8.8X%8.8X]\n", ACPI_FORMAT_UINT64 (ACPI_CAST_PTR (char, Subtable) - ACPI_CAST_PTR (char, Table))); } /* Attempt to continue */ if (!Subtable->Length) { AcpiOsPrintf ("Invalid zero length subtable\n"); return; } /* Dump the OEM data */ Status = AcpiDmDumpTable (Length, Offset, ACPI_CAST_PTR (UINT8, Table) + Offset, Subtable->Length - sizeof (ACPI_SUBTABLE_HEADER), AcpiDmTableInfoMadt128); if (ACPI_FAILURE (Status)) { return; } DbgPrint (ASL_PARSE_OUTPUT, "//[1) Subtable->Length = %X, Offset = %X]\n", Subtable->Length, Offset); Offset -= sizeof (ACPI_SUBTABLE_HEADER); goto NextSubtable; } DbgPrint (ASL_PARSE_OUTPUT, "//[2) Subtable->Length = %X, Offset = %X]\n", Subtable->Length, Offset); Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } NextSubtable: /* Point to next subtable */ DbgPrint (ASL_PARSE_OUTPUT, "//[3) Subtable->Length = %X, Offset = %X]\n", Subtable->Length, Offset); DbgPrint (ASL_PARSE_OUTPUT, "//[4) Offset from table start: 0x%8.8X%8.8X (%p) %p]\n", ACPI_FORMAT_UINT64 (ACPI_CAST_PTR (UINT8, Subtable) - ACPI_CAST_PTR (UINT8, Table)), Subtable, Table); if (Offset > Table->Length) { return; } Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, Subtable->Length); Offset = ACPI_CAST_PTR (char, Subtable) - ACPI_CAST_PTR (char, Table); if (Offset >= Table->Length) { return; } DbgPrint (ASL_PARSE_OUTPUT, "//[5) Next Subtable %p, length %X]\n", Subtable, Subtable->Length); DbgPrint (ASL_PARSE_OUTPUT, "//[5B) Offset from table start: 0x%8.8X%8.8X (%p)]\n", ACPI_FORMAT_UINT64 (ACPI_CAST_PTR (char, Subtable) - ACPI_CAST_PTR (char, Table)), Subtable); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpMcfg * * PARAMETERS: Table - A MCFG Table * * RETURN: None * * DESCRIPTION: Format the contents of a MCFG table * ******************************************************************************/ void AcpiDmDumpMcfg ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; UINT32 Offset = sizeof (ACPI_TABLE_MCFG); ACPI_MCFG_ALLOCATION *Subtable; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset); while (Offset < Table->Length) { if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length) { AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n", (UINT32) sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length)); return; } AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0); if (ACPI_FAILURE (Status)) { return; } /* Point to next subtable (each subtable is of fixed length) */ Offset += sizeof (ACPI_MCFG_ALLOCATION); Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Subtable, sizeof (ACPI_MCFG_ALLOCATION)); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpMpam * * PARAMETERS: Table - A MPAM table * * RETURN: None * * DESCRIPTION: Format the contents of a MPAM table * ******************************************************************************/ void AcpiDmDumpMpam ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_MPAM_MSC_NODE *MpamMscNode; ACPI_MPAM_RESOURCE_NODE *MpamResourceNode; ACPI_DMTABLE_INFO *InfoTable; UINT32 Offset = sizeof(ACPI_TABLE_HEADER); UINT32 MpamResourceNodeLength = 0; while (Offset < Table->Length) { MpamMscNode = ACPI_ADD_PTR (ACPI_MPAM_MSC_NODE, Table, Offset); /* Subtable: MSC */ Status = AcpiDmDumpTable (MpamMscNode->Length, 0, MpamMscNode, 0, AcpiDmTableInfoMpam0); if (ACPI_FAILURE (Status)) { return; } /* Offset the start of the array of resources */ Offset += sizeof(ACPI_MPAM_MSC_NODE); /* Subtable: MSC RIS(es) */ for (UINT32 ResourceIdx = 0; ResourceIdx < MpamMscNode->NumResouceNodes; ResourceIdx++) { MpamResourceNode = ACPI_ADD_PTR (ACPI_MPAM_RESOURCE_NODE, Table, Offset); MpamResourceNodeLength = sizeof(ACPI_MPAM_RESOURCE_NODE) + MpamResourceNode->NumFunctionalDeps * sizeof(ACPI_MPAM_FUNC_DEPS); Offset += MpamResourceNodeLength; /* Subtable: MSC RIS */ Status = AcpiDmDumpTable (MpamResourceNodeLength, 0, MpamResourceNode, 0, AcpiDmTableInfoMpam1); if (ACPI_FAILURE (Status)) { return; } switch (MpamResourceNode->LocatorType) { case ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE: InfoTable = AcpiDmTableInfoMpam1A; break; case ACPI_MPAM_LOCATION_TYPE_MEMORY: InfoTable = AcpiDmTableInfoMpam1B; break; case ACPI_MPAM_LOCATION_TYPE_SMMU: InfoTable = AcpiDmTableInfoMpam1C; break; case ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE: InfoTable = AcpiDmTableInfoMpam1D; break; case ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE: InfoTable = AcpiDmTableInfoMpam1E; break; case ACPI_MPAM_LOCATION_TYPE_INTERCONNECT: InfoTable = AcpiDmTableInfoMpam1F; break; case ACPI_MPAM_LOCATION_TYPE_UNKNOWN: InfoTable = AcpiDmTableInfoMpam1G; default: AcpiOsPrintf ("\n**** Unknown MPAM locator type 0x%X\n", MpamResourceNode->LocatorType); return; } /* Subtable: MSC Resource Locator(s) */ Status = AcpiDmDumpTable (sizeof(ACPI_MPAM_RESOURCE_LOCATOR), 0, &MpamResourceNode->Locator, 0, InfoTable); if (ACPI_FAILURE (Status)) { return; } /* Get the number of functional dependencies of an RIS */ Status = AcpiDmDumpTable (sizeof(UINT32), 0, &MpamResourceNode->NumFunctionalDeps, 0, AcpiDmTableInfoMpam1Deps); if (ACPI_FAILURE (Status)) { return; } /* Subtable: MSC functional dependencies */ for (UINT32 funcDep = 0; funcDep < MpamResourceNode->NumFunctionalDeps; funcDep++) { Status = AcpiDmDumpTable (sizeof(ACPI_MPAM_FUNC_DEPS), 0, &MpamResourceNode->NumFunctionalDeps, 0, AcpiDmTableInfoMpam2); if (ACPI_FAILURE (Status)) { return; } } AcpiOsPrintf ("\n\n"); } } return; } /******************************************************************************* * * FUNCTION: AcpiDmDumpMpst * * PARAMETERS: Table - A MPST Table * * RETURN: None * * DESCRIPTION: Format the contents of a MPST table * ******************************************************************************/ void AcpiDmDumpMpst ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; UINT32 Offset = sizeof (ACPI_TABLE_MPST); ACPI_MPST_POWER_NODE *Subtable0; ACPI_MPST_POWER_STATE *Subtable0A; ACPI_MPST_COMPONENT *Subtable0B; ACPI_MPST_DATA_HDR *Subtable1; ACPI_MPST_POWER_DATA *Subtable2; UINT16 SubtableCount; UINT32 PowerStateCount; UINT32 ComponentCount; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst); if (ACPI_FAILURE (Status)) { return; } /* Subtable: Memory Power Node(s) */ SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount; Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset); while ((Offset < Table->Length) && SubtableCount) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0, sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0); if (ACPI_FAILURE (Status)) { return; } /* Extract the sub-subtable counts */ PowerStateCount = Subtable0->NumPowerStates; ComponentCount = Subtable0->NumPhysicalComponents; Offset += sizeof (ACPI_MPST_POWER_NODE); /* Sub-subtables - Memory Power State Structure(s) */ Subtable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, Subtable0, sizeof (ACPI_MPST_POWER_NODE)); while (PowerStateCount) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0A, sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A); if (ACPI_FAILURE (Status)) { return; } Subtable0A++; PowerStateCount--; Offset += sizeof (ACPI_MPST_POWER_STATE); } /* Sub-subtables - Physical Component ID Structure(s) */ Subtable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, Subtable0A); if (ComponentCount) { AcpiOsPrintf ("\n"); } while (ComponentCount) { Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0B, sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B); if (ACPI_FAILURE (Status)) { return; } Subtable0B++; ComponentCount--; Offset += sizeof (ACPI_MPST_COMPONENT); } /* Point to next Memory Power Node subtable */ SubtableCount--; Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Subtable0, sizeof (ACPI_MPST_POWER_NODE) + (sizeof (ACPI_MPST_POWER_STATE) * Subtable0->NumPowerStates) + (sizeof (ACPI_MPST_COMPONENT) * Subtable0->NumPhysicalComponents)); } /* Subtable: Count of Memory Power State Characteristic structures */ AcpiOsPrintf ("\n"); Subtable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable0); Status = AcpiDmDumpTable (Table->Length, Offset, Subtable1, sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1); if (ACPI_FAILURE (Status)) { return; } SubtableCount = Subtable1->CharacteristicsCount; Offset += sizeof (ACPI_MPST_DATA_HDR); /* Subtable: Memory Power State Characteristics structure(s) */ Subtable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, Subtable1, sizeof (ACPI_MPST_DATA_HDR)); while ((Offset < Table->Length) && SubtableCount) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, Subtable2, sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2); if (ACPI_FAILURE (Status)) { return; } Subtable2++; SubtableCount--; Offset += sizeof (ACPI_MPST_POWER_DATA); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpMsct * * PARAMETERS: Table - A MSCT table * * RETURN: None * * DESCRIPTION: Format the contents of a MSCT * ******************************************************************************/ void AcpiDmDumpMsct ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; UINT32 Offset = sizeof (ACPI_TABLE_MSCT); ACPI_MSCT_PROXIMITY *Subtable; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset); while (Offset < Table->Length) { /* Common subtable header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0); if (ACPI_FAILURE (Status)) { return; } /* Point to next subtable */ Offset += sizeof (ACPI_MSCT_PROXIMITY); Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Subtable, sizeof (ACPI_MSCT_PROXIMITY)); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpNfit * * PARAMETERS: Table - A NFIT table * * RETURN: None * * DESCRIPTION: Format the contents of an NFIT. * ******************************************************************************/ void AcpiDmDumpNfit ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; UINT32 Offset = sizeof (ACPI_TABLE_NFIT); UINT32 FieldOffset = 0; UINT32 Length; ACPI_NFIT_HEADER *Subtable; ACPI_DMTABLE_INFO *InfoTable; ACPI_NFIT_INTERLEAVE *Interleave = NULL; ACPI_NFIT_SMBIOS *SmbiosInfo = NULL; ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL; UINT32 i; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoNfit); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset); while (Offset < Table->Length) { /* NFIT subtable header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoNfitHdr); if (ACPI_FAILURE (Status)) { return; } switch (Subtable->Type) { case ACPI_NFIT_TYPE_SYSTEM_ADDRESS: InfoTable = AcpiDmTableInfoNfit0; break; case ACPI_NFIT_TYPE_MEMORY_MAP: InfoTable = AcpiDmTableInfoNfit1; break; case ACPI_NFIT_TYPE_INTERLEAVE: /* Has a variable number of 32-bit values at the end */ InfoTable = AcpiDmTableInfoNfit2; FieldOffset = sizeof (ACPI_NFIT_INTERLEAVE); break; case ACPI_NFIT_TYPE_SMBIOS: SmbiosInfo = ACPI_CAST_PTR (ACPI_NFIT_SMBIOS, Subtable); InfoTable = AcpiDmTableInfoNfit3; break; case ACPI_NFIT_TYPE_CONTROL_REGION: InfoTable = AcpiDmTableInfoNfit4; break; case ACPI_NFIT_TYPE_DATA_REGION: InfoTable = AcpiDmTableInfoNfit5; break; case ACPI_NFIT_TYPE_FLUSH_ADDRESS: /* Has a variable number of 64-bit addresses at the end */ InfoTable = AcpiDmTableInfoNfit6; FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS); break; case ACPI_NFIT_TYPE_CAPABILITIES: /* ACPI 6.0A */ InfoTable = AcpiDmTableInfoNfit7; break; default: AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n", Subtable->Type); /* Attempt to continue */ if (!Subtable->Length) { AcpiOsPrintf ("Invalid zero length subtable\n"); return; } goto NextSubtable; } AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Subtable->Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } /* Per-subtable variable-length fields */ switch (Subtable->Type) { case ACPI_NFIT_TYPE_INTERLEAVE: Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable); for (i = 0; i < Interleave->LineCount; i++) { Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, &Interleave->LineOffset[i], sizeof (UINT32), AcpiDmTableInfoNfit2a); if (ACPI_FAILURE (Status)) { return; } FieldOffset += sizeof (UINT32); } break; case ACPI_NFIT_TYPE_SMBIOS: Length = Subtable->Length - sizeof (ACPI_NFIT_SMBIOS); if (Length) { Status = AcpiDmDumpTable (Table->Length, sizeof (ACPI_NFIT_SMBIOS), SmbiosInfo, Length, AcpiDmTableInfoNfit3a); if (ACPI_FAILURE (Status)) { return; } } break; case ACPI_NFIT_TYPE_FLUSH_ADDRESS: Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable); for (i = 0; i < Hint->HintCount; i++) { Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, &Hint->HintAddress[i], sizeof (UINT64), AcpiDmTableInfoNfit6a); if (ACPI_FAILURE (Status)) { return; } FieldOffset += sizeof (UINT64); } break; default: break; } NextSubtable: /* Point to next subtable */ Offset += Subtable->Length; Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, Subtable->Length); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpPcct * * PARAMETERS: Table - A PCCT table * * RETURN: None * * DESCRIPTION: Format the contents of a PCCT. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpPcct ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_PCCT_SUBSPACE *Subtable; ACPI_DMTABLE_INFO *InfoTable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_PCCT); /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset); while (Offset < Table->Length) { /* Common subtable header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Header.Length, AcpiDmTableInfoPcctHdr); if (ACPI_FAILURE (Status)) { return; } switch (Subtable->Header.Type) { case ACPI_PCCT_TYPE_GENERIC_SUBSPACE: InfoTable = AcpiDmTableInfoPcct0; break; case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: InfoTable = AcpiDmTableInfoPcct1; break; case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2: InfoTable = AcpiDmTableInfoPcct2; break; case ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE: InfoTable = AcpiDmTableInfoPcct3; break; case ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE: InfoTable = AcpiDmTableInfoPcct4; break; case ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE: InfoTable = AcpiDmTableInfoPcct5; break; default: AcpiOsPrintf ( "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n", Subtable->Header.Type); return; } AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Header.Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } /* Point to next subtable */ Offset += Subtable->Header.Length; Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Subtable, Subtable->Header.Length); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpPdtt * * PARAMETERS: Table - A PDTT table * * RETURN: None * * DESCRIPTION: Format the contents of a Pdtt. This is a variable-length * table that contains an open-ended number of IDs * at the end of the table. * ******************************************************************************/ void AcpiDmDumpPdtt ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_PDTT_CHANNEL *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_PDTT); /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPdtt); if (ACPI_FAILURE (Status)) { return; } /* Subtables. Currently there is only one type, but can be multiples */ Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Table, Offset); while (Offset < Table->Length) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, sizeof (ACPI_PDTT_CHANNEL), AcpiDmTableInfoPdtt0); if (ACPI_FAILURE (Status)) { return; } /* Point to next subtable */ Offset += sizeof (ACPI_PDTT_CHANNEL); Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Subtable, sizeof (ACPI_PDTT_CHANNEL)); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpPhat * * PARAMETERS: Table - A PHAT table * * RETURN: None * * DESCRIPTION: Format the contents of a PHAT. * ******************************************************************************/ void AcpiDmDumpPhat ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_DMTABLE_INFO *InfoTable; ACPI_PHAT_HEADER *Subtable; ACPI_PHAT_VERSION_DATA *VersionData; UINT32 RecordCount; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_PHAT); UINT32 OriginalOffset; UINT32 SubtableLength; UINT32 PathLength; UINT32 VendorLength; UINT16 RecordType; const wchar_t *WideString; Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table, sizeof (ACPI_TABLE_PHAT)); while (Offset < Table->Length) { /* Common subtable header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, sizeof (ACPI_PHAT_HEADER), AcpiDmTableInfoPhatHdr); if (ACPI_FAILURE (Status)) { return; } DbgPrint (ASL_DEBUG_OUTPUT, "\n/* %u, Subtable->Type %X */\n", __LINE__, Subtable->Type); switch (Subtable->Type) { case ACPI_PHAT_TYPE_FW_VERSION_DATA: InfoTable = AcpiDmTableInfoPhat0; SubtableLength = Offset += sizeof (ACPI_PHAT_VERSION_DATA); break; case ACPI_PHAT_TYPE_FW_HEALTH_DATA: InfoTable = AcpiDmTableInfoPhat1; SubtableLength = Offset += sizeof (ACPI_PHAT_TYPE_FW_HEALTH_DATA); break; default: DbgPrint (ASL_DEBUG_OUTPUT, "\n**** Unknown PHAT subtable type 0x%X\n\n", Subtable->Type); return; } Status = AcpiDmDumpTable (Length, SubtableLength, Subtable, SubtableLength, InfoTable); if (ACPI_FAILURE (Status)) { return; } OriginalOffset = Offset; switch (Subtable->Type) { case ACPI_PHAT_TYPE_FW_VERSION_DATA: VersionData = ACPI_CAST_PTR (ACPI_PHAT_VERSION_DATA, Subtable); RecordCount = VersionData->ElementCount; RecordType = *ACPI_CAST_PTR (UINT8, Subtable); /* * Skip past a zero-valued block (not part of the ACPI PHAT specification). * First, check for a zero length record and a zero element count */ if (!VersionData->Header.Length && !VersionData->ElementCount) { while (RecordType == 0) { Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table, Offset); RecordType = *ACPI_CAST_PTR (UINT8, Subtable); RecordCount = VersionData->ElementCount; Offset += 1; } Offset -= 1; AcpiOsPrintf ("\n/* Warning: Block of zeros found above starting at Offset %X Length %X */\n" "/* (not compliant to PHAT specification -- ignoring block) */\n", OriginalOffset - 12, Offset - OriginalOffset + 12); } DbgPrint (ASL_DEBUG_OUTPUT, "/* %u, RecordCount: %X, Offset %X, SubtableLength %X */\n", __LINE__, RecordCount, Offset, SubtableLength); /* Emit each of the version elements */ while (RecordCount && VersionData->Header.Length) { AcpiOsPrintf ("\n/* Version Element #%Xh Offset %Xh */\n\n", VersionData->ElementCount - RecordCount + 1, Offset); Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table, Offset); Status = AcpiDmDumpTable (Length, Offset, Subtable, sizeof (ACPI_PHAT_VERSION_ELEMENT), AcpiDmTableInfoPhat0a); if (ACPI_FAILURE (Status)) { return; } Offset += sizeof (ACPI_PHAT_VERSION_ELEMENT); RecordCount--; } break; case ACPI_PHAT_TYPE_FW_HEALTH_DATA: /* * Get the length of the Device Path (UEFI wide string). * Include the wide null terminator (+2), */ WideString = ACPI_ADD_PTR (wchar_t, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA)); PathLength = (wcslen (WideString) * 2) + 2; DbgPrint (ASL_DEBUG_OUTPUT, "/* %u, PathLength %X, Offset %X, Table->Length %X */\n", __LINE__, PathLength, Offset, Length); Status = AcpiDmDumpTable (Length, Offset, ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA)), PathLength, AcpiDmTableInfoPhat1a); Offset += PathLength; if (ACPI_FAILURE (Status)) { return; } /* Get Device-Specific Data - length of which is the remaining subtable length. */ VendorLength = Subtable->Length - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength; DbgPrint (ASL_DEBUG_OUTPUT, "%u, Subtable->Length %X, VendorLength %X, Offset %X PathLength: %X\n", __LINE__, Subtable->Length, VendorLength, Offset, PathLength); if (VendorLength) { /* Point past the Device Path, Compile the Device-Specific Data */ Status = AcpiDmDumpTable (Length, Offset, ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA) + PathLength), VendorLength, AcpiDmTableInfoPhat1b); if (ACPI_FAILURE (Status)) { return; } Offset += VendorLength; } break; default: AcpiOsPrintf ("\n**** Unknown PHAT subtable type 0x%X\n\n", Subtable->Type); return; } /* Next subtable */ DbgPrint (ASL_DEBUG_OUTPUT, "/* %u, Bottom of main loop: Offset %X, " "Subtable->Length %X, Table->Length %X */\n", __LINE__, Offset, Subtable->Length, Table->Length); Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table, Offset); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpPmtt * * PARAMETERS: Table - A PMTT table * * RETURN: None * * DESCRIPTION: Format the contents of a PMTT. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpPmtt ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_PMTT_HEADER *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_PMTT); /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset); while (Offset < Table->Length) { /* Each of the types below contain the common subtable header */ AcpiOsPrintf ("\n"); switch (Subtable->Type) { case ACPI_PMTT_TYPE_SOCKET: Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoPmtt0); if (ACPI_FAILURE (Status)) { return; } break; case ACPI_PMTT_TYPE_CONTROLLER: Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoPmtt1); if (ACPI_FAILURE (Status)) { return; } break; case ACPI_PMTT_TYPE_DIMM: Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoPmtt2); if (ACPI_FAILURE (Status)) { return; } break; case ACPI_PMTT_TYPE_VENDOR: Status = AcpiDmDumpTable (Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoPmttVendor); if (ACPI_FAILURE (Status)) { return; } break; default: AcpiOsPrintf ( "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", Subtable->Type); return; } /* Point to next subtable */ Offset += Subtable->Length; Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable, Subtable->Length); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpPptt * * PARAMETERS: Table - A PMTT table * * RETURN: None * * DESCRIPTION: Format the contents of a PPTT. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpPptt ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_SUBTABLE_HEADER *Subtable; ACPI_PPTT_PROCESSOR *PpttProcessor; UINT8 Length; UINT8 SubtableOffset; UINT32 Offset = sizeof (ACPI_TABLE_FPDT); ACPI_DMTABLE_INFO *InfoTable; UINT32 i; /* There is no main table (other than the standard ACPI header) */ /* Subtables */ Offset = sizeof (ACPI_TABLE_HEADER); while (Offset < Table->Length) { AcpiOsPrintf ("\n"); /* Common subtable header */ Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); if (Subtable->Length < sizeof (ACPI_SUBTABLE_HEADER)) { AcpiOsPrintf ("Invalid subtable length\n"); return; } Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoPpttHdr); if (ACPI_FAILURE (Status)) { return; } switch (Subtable->Type) { case ACPI_PPTT_TYPE_PROCESSOR: InfoTable = AcpiDmTableInfoPptt0; Length = sizeof (ACPI_PPTT_PROCESSOR); break; case ACPI_PPTT_TYPE_CACHE: InfoTable = AcpiDmTableInfoPptt1; Length = sizeof (ACPI_PPTT_CACHE); break; case ACPI_PPTT_TYPE_ID: InfoTable = AcpiDmTableInfoPptt2; Length = sizeof (ACPI_PPTT_ID); break; default: AcpiOsPrintf ("\n**** Unknown PPTT subtable type 0x%X\n\n", Subtable->Type); /* Attempt to continue */ goto NextSubtable; } if (Subtable->Length < Length) { AcpiOsPrintf ("Invalid subtable length\n"); return; } Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Subtable->Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } SubtableOffset = Length; switch (Subtable->Type) { case ACPI_PPTT_TYPE_PROCESSOR: PpttProcessor = ACPI_CAST_PTR (ACPI_PPTT_PROCESSOR, Subtable); /* Dump SMBIOS handles */ if ((UINT8)(Subtable->Length - SubtableOffset) < (UINT8)(PpttProcessor->NumberOfPrivResources * 4)) { AcpiOsPrintf ("Invalid private resource number\n"); return; } for (i = 0; i < PpttProcessor->NumberOfPrivResources; i++) { Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset), 4, AcpiDmTableInfoPptt0a); if (ACPI_FAILURE (Status)) { return; } SubtableOffset += 4; } break; case ACPI_PPTT_TYPE_CACHE: if (Table->Revision < 3) { break; } Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset), sizeof (ACPI_PPTT_CACHE_V1), AcpiDmTableInfoPptt1a); if (ACPI_FAILURE (Status)) { return; } break; default: break; } NextSubtable: /* Point to next subtable */ Offset += Subtable->Length; } } /******************************************************************************* * * FUNCTION: AcpiDmDumpPrmt * * PARAMETERS: Table - A PRMT table * * RETURN: None * * DESCRIPTION: Format the contents of a PRMT. This table type consists * of an open-ended number of subtables. * ******************************************************************************/ void AcpiDmDumpPrmt ( ACPI_TABLE_HEADER *Table) { UINT32 CurrentOffset = sizeof (ACPI_TABLE_HEADER); ACPI_TABLE_PRMT_HEADER *PrmtHeader; ACPI_PRMT_MODULE_INFO *PrmtModuleInfo; ACPI_PRMT_HANDLER_INFO *PrmtHandlerInfo; ACPI_STATUS Status; UINT32 i, j; /* Main table header */ PrmtHeader = ACPI_ADD_PTR (ACPI_TABLE_PRMT_HEADER, Table, CurrentOffset); Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtHeader, sizeof (ACPI_TABLE_PRMT_HEADER), AcpiDmTableInfoPrmtHdr); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Invalid PRMT header\n"); return; } CurrentOffset += sizeof (ACPI_TABLE_PRMT_HEADER); /* PRM Module Information Structure array */ for (i = 0; i < PrmtHeader->ModuleInfoCount; ++i) { PrmtModuleInfo = ACPI_ADD_PTR (ACPI_PRMT_MODULE_INFO, Table, CurrentOffset); Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtModuleInfo, sizeof (ACPI_PRMT_MODULE_INFO), AcpiDmTableInfoPrmtModule); CurrentOffset += sizeof (ACPI_PRMT_MODULE_INFO); /* PRM handler information structure array */ for (j = 0; j < PrmtModuleInfo->HandlerInfoCount; ++j) { PrmtHandlerInfo = ACPI_ADD_PTR (ACPI_PRMT_HANDLER_INFO, Table, CurrentOffset); Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtHandlerInfo, sizeof (ACPI_PRMT_HANDLER_INFO), AcpiDmTableInfoPrmtHandler); CurrentOffset += sizeof (ACPI_PRMT_HANDLER_INFO); } } } /******************************************************************************* * * FUNCTION: AcpiDmDumpRas2 * * PARAMETERS: Table - A RAS2 table * * RETURN: None * * DESCRIPTION: Format the contents of a Ras2. This is a variable-length * table that contains an open-ended number of the RAS2 PCC * descriptors at the end of the table. * ******************************************************************************/ void AcpiDmDumpRas2 ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_RAS2_PCC_DESC *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_RAS2); /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRas2); if (ACPI_FAILURE (Status)) { return; } /* Subtables - RAS2 PCC descriptor list */ Subtable = ACPI_ADD_PTR (ACPI_RAS2_PCC_DESC, Table, Offset); while (Offset < Table->Length) { AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, Subtable, sizeof (ACPI_RAS2_PCC_DESC), AcpiDmTableInfoRas2PccDesc); if (ACPI_FAILURE (Status)) { return; } /* Point to next subtable */ Offset += sizeof (ACPI_RAS2_PCC_DESC); Subtable = ACPI_ADD_PTR (ACPI_RAS2_PCC_DESC, Subtable, sizeof (ACPI_RAS2_PCC_DESC)); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpRgrt * * PARAMETERS: Table - A RGRT table * * RETURN: None * * DESCRIPTION: Format the contents of a RGRT * ******************************************************************************/ void AcpiDmDumpRgrt ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_TABLE_RGRT *Subtable = ACPI_CAST_PTR (ACPI_TABLE_RGRT, Table); UINT32 Offset = sizeof (ACPI_TABLE_RGRT); /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoRgrt); if (ACPI_FAILURE (Status)) { return; } /* Dump the binary image as a subtable */ Status = AcpiDmDumpTable (Table->Length, Offset, &Subtable->Image, Table->Length - Offset, AcpiDmTableInfoRgrt0); if (ACPI_FAILURE (Status)) { return; } } /******************************************************************************* * * FUNCTION: AcpiDmDumpRhct * * PARAMETERS: Table - A RHCT table * * RETURN: None * * DESCRIPTION: Format the contents of a RHCT. * ******************************************************************************/ void AcpiDmDumpRhct ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_RHCT_NODE_HEADER *Subtable; ACPI_RHCT_HART_INFO *RhctHartInfo; ACPI_RHCT_ISA_STRING *RhctIsaString; ACPI_RHCT_CMO_NODE *RhctCmoNode; ACPI_RHCT_MMU_NODE *RhctMmuNode; UINT32 Length = Table->Length; UINT8 SubtableOffset, IsaPadOffset; UINT32 Offset = sizeof (ACPI_TABLE_RHCT); UINT32 i; /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRhct); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ while (Offset < Table->Length) { AcpiOsPrintf ("\n"); /* Common subtable header */ Subtable = ACPI_ADD_PTR (ACPI_RHCT_NODE_HEADER, Table, Offset); if (Subtable->Length < sizeof (ACPI_RHCT_NODE_HEADER)) { AcpiOsPrintf ("Invalid subtable length\n"); return; } Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoRhctNodeHdr); if (ACPI_FAILURE (Status)) { return; } Length = sizeof (ACPI_RHCT_NODE_HEADER); if (Subtable->Length < Length) { AcpiOsPrintf ("Invalid subtable length\n"); return; } SubtableOffset = (UINT8) Length; switch (Subtable->Type) { case ACPI_RHCT_NODE_TYPE_HART_INFO: Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, ACPI_ADD_PTR (ACPI_RHCT_HART_INFO, Subtable, SubtableOffset), sizeof (ACPI_RHCT_HART_INFO), AcpiDmTableInfoRhctHartInfo1); RhctHartInfo = ACPI_ADD_PTR (ACPI_RHCT_HART_INFO, Subtable, SubtableOffset); if ((UINT16)(Subtable->Length - SubtableOffset) < (UINT16)(RhctHartInfo->NumOffsets * 4)) { AcpiOsPrintf ("Invalid number of offsets\n"); return; } SubtableOffset += sizeof (ACPI_RHCT_HART_INFO); for (i = 0; i < RhctHartInfo->NumOffsets; i++) { Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, ACPI_ADD_PTR (UINT32, Subtable, SubtableOffset), 4, AcpiDmTableInfoRhctHartInfo2); if (ACPI_FAILURE (Status)) { return; } SubtableOffset += 4; } break; case ACPI_RHCT_NODE_TYPE_ISA_STRING: RhctIsaString = ACPI_ADD_PTR (ACPI_RHCT_ISA_STRING, Subtable, SubtableOffset); IsaPadOffset = (UINT8) (SubtableOffset + 2 + RhctIsaString->IsaLength); Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, RhctIsaString, RhctIsaString->IsaLength, AcpiDmTableInfoRhctIsa1); if (Subtable->Length > IsaPadOffset) { Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, ACPI_ADD_PTR (UINT8, Subtable, IsaPadOffset), (Subtable->Length - IsaPadOffset), AcpiDmTableInfoRhctIsaPad); } break; case ACPI_RHCT_NODE_TYPE_CMO: RhctCmoNode = ACPI_ADD_PTR (ACPI_RHCT_CMO_NODE, Subtable, SubtableOffset); Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, RhctCmoNode, 4, AcpiDmTableInfoRhctCmo1); break; case ACPI_RHCT_NODE_TYPE_MMU: RhctMmuNode = ACPI_ADD_PTR (ACPI_RHCT_MMU_NODE, Subtable, SubtableOffset); Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, RhctMmuNode, 2, AcpiDmTableInfoRhctMmu1); break; default: break; } /* Point to next subtable */ Offset += Subtable->Length; } } /******************************************************************************* * * FUNCTION: AcpiDmDumpS3pt * * PARAMETERS: Table - A S3PT table * * RETURN: Length of the table * * DESCRIPTION: Format the contents of a S3PT * ******************************************************************************/ UINT32 AcpiDmDumpS3pt ( ACPI_TABLE_HEADER *Tables) { ACPI_STATUS Status; UINT32 Offset = sizeof (ACPI_TABLE_S3PT); ACPI_FPDT_HEADER *Subtable; ACPI_DMTABLE_INFO *InfoTable; ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables); /* Main table */ Status = AcpiDmDumpTable (Offset, 0, S3ptTable, 0, AcpiDmTableInfoS3pt); if (ACPI_FAILURE (Status)) { return 0; } Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset); while (Offset < S3ptTable->Length) { /* Common subtable header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoS3ptHdr); if (ACPI_FAILURE (Status)) { return 0; } switch (Subtable->Type) { case ACPI_S3PT_TYPE_RESUME: InfoTable = AcpiDmTableInfoS3pt0; break; case ACPI_S3PT_TYPE_SUSPEND: InfoTable = AcpiDmTableInfoS3pt1; break; default: AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n", Subtable->Type); /* Attempt to continue */ if (!Subtable->Length) { AcpiOsPrintf ("Invalid zero length subtable\n"); return 0; } goto NextSubtable; } AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable, Subtable->Length, InfoTable); if (ACPI_FAILURE (Status)) { return 0; } NextSubtable: /* Point to next subtable */ Offset += Subtable->Length; Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, Subtable->Length); } return (S3ptTable->Length); } /******************************************************************************* * * FUNCTION: AcpiDmDumpSdev * * PARAMETERS: Table - A SDEV table * * RETURN: None * * DESCRIPTION: Format the contents of a SDEV. This is a variable-length * table that contains variable strings and vendor data. * ******************************************************************************/ void AcpiDmDumpSdev ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_SDEV_HEADER *Subtable; ACPI_SDEV_PCIE *Pcie; ACPI_SDEV_NAMESPACE *Namesp; ACPI_DMTABLE_INFO *InfoTable; ACPI_DMTABLE_INFO *SecureComponentInfoTable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_SDEV); UINT16 PathOffset; UINT16 PathLength; UINT16 VendorDataOffset; UINT16 VendorDataLength; ACPI_SDEV_SECURE_COMPONENT *SecureComponent = NULL; UINT32 CurrentOffset = 0; /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Table, Offset); while (Offset < Table->Length) { /* Common subtable header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoSdevHdr); if (ACPI_FAILURE (Status)) { return; } switch (Subtable->Type) { case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: InfoTable = AcpiDmTableInfoSdev0; break; case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: InfoTable = AcpiDmTableInfoSdev1; break; default: goto NextSubtable; } AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, 0, Subtable, Subtable->Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } switch (Subtable->Type) { case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: CurrentOffset = sizeof (ACPI_SDEV_NAMESPACE); if (Subtable->Flags & ACPI_SDEV_SECURE_COMPONENTS_PRESENT) { SecureComponent = ACPI_CAST_PTR (ACPI_SDEV_SECURE_COMPONENT, ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_SDEV_NAMESPACE))); Status = AcpiDmDumpTable (Table->Length, CurrentOffset, ACPI_ADD_PTR(UINT8, Subtable, sizeof (ACPI_SDEV_NAMESPACE)), sizeof (ACPI_SDEV_SECURE_COMPONENT), AcpiDmTableInfoSdev0b); if (ACPI_FAILURE (Status)) { return; } CurrentOffset += sizeof (ACPI_SDEV_SECURE_COMPONENT); Status = AcpiDmDumpTable (Table->Length, CurrentOffset, ACPI_ADD_PTR(UINT8, Subtable, SecureComponent->SecureComponentOffset), sizeof (ACPI_SDEV_HEADER), AcpiDmTableInfoSdevSecCompHdr); if (ACPI_FAILURE (Status)) { return; } CurrentOffset += sizeof (ACPI_SDEV_HEADER); switch (Subtable->Type) { case ACPI_SDEV_TYPE_ID_COMPONENT: SecureComponentInfoTable = AcpiDmTableInfoSdevSecCompId; break; case ACPI_SDEV_TYPE_MEM_COMPONENT: SecureComponentInfoTable = AcpiDmTableInfoSdevSecCompMem; break; default: goto NextSubtable; } Status = AcpiDmDumpTable (Table->Length, CurrentOffset, ACPI_ADD_PTR(UINT8, Subtable, SecureComponent->SecureComponentOffset), SecureComponent->SecureComponentLength, SecureComponentInfoTable); CurrentOffset += SecureComponent->SecureComponentLength; } /* Dump the PCIe device ID(s) */ Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable); PathOffset = Namesp->DeviceIdOffset; PathLength = Namesp->DeviceIdLength; if (PathLength) { Status = AcpiDmDumpTable (Table->Length, CurrentOffset, ACPI_ADD_PTR (UINT8, Namesp, PathOffset), PathLength, AcpiDmTableInfoSdev0a); if (ACPI_FAILURE (Status)) { return; } CurrentOffset += PathLength; } /* Dump the vendor-specific data */ VendorDataLength = Namesp->VendorDataLength; VendorDataOffset = Namesp->DeviceIdOffset + Namesp->DeviceIdLength; if (VendorDataLength) { Status = AcpiDmDumpTable (Table->Length, 0, ACPI_ADD_PTR (UINT8, Namesp, VendorDataOffset), VendorDataLength, AcpiDmTableInfoSdev1b); if (ACPI_FAILURE (Status)) { return; } } break; case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: /* PCI path substructures */ Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable); PathOffset = Pcie->PathOffset; PathLength = Pcie->PathLength; while (PathLength) { Status = AcpiDmDumpTable (Table->Length, PathOffset + Offset, ACPI_ADD_PTR (UINT8, Pcie, PathOffset), sizeof (ACPI_SDEV_PCIE_PATH), AcpiDmTableInfoSdev1a); if (ACPI_FAILURE (Status)) { return; } PathOffset += sizeof (ACPI_SDEV_PCIE_PATH); PathLength -= sizeof (ACPI_SDEV_PCIE_PATH); } /* VendorData */ VendorDataLength = Pcie->VendorDataLength; VendorDataOffset = Pcie->PathOffset + Pcie->PathLength; if (VendorDataLength) { Status = AcpiDmDumpTable (Table->Length, 0, ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset), VendorDataLength, AcpiDmTableInfoSdev1b); if (ACPI_FAILURE (Status)) { return; } } break; default: goto NextSubtable; } NextSubtable: /* Point to next subtable */ Offset += Subtable->Length; Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Subtable, Subtable->Length); } } src/acpica/source/common/dmtbdump3.c000066400000000000000000000635651465205512700177460ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dmtbdump3 - Dump ACPI data tables that contain no AML code * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdisasm.h" #include "actables.h" /* This module used for application-level code only */ #define _COMPONENT ACPI_CA_DISASSEMBLER ACPI_MODULE_NAME ("dmtbdump3") /******************************************************************************* * * FUNCTION: AcpiDmDumpSlic * * PARAMETERS: Table - A SLIC table * * RETURN: None * * DESCRIPTION: Format the contents of a SLIC * ******************************************************************************/ void AcpiDmDumpSlic ( ACPI_TABLE_HEADER *Table) { (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table, Table->Length - sizeof (*Table), AcpiDmTableInfoSlic); } /******************************************************************************* * * FUNCTION: AcpiDmDumpSlit * * PARAMETERS: Table - An SLIT * * RETURN: None * * DESCRIPTION: Format the contents of a SLIT * ******************************************************************************/ void AcpiDmDumpSlit ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; UINT32 Offset; UINT8 *Row; UINT32 Localities; UINT32 i; UINT32 j; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit); if (ACPI_FAILURE (Status)) { return; } /* Display the Locality NxN Matrix */ Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount; Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]); Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry; for (i = 0; i < Localities; i++) { /* Display one row of the matrix */ AcpiDmLineHeader2 (Offset, Localities, "Locality", i); for (j = 0; j < Localities; j++) { /* Check for beyond EOT */ if (Offset >= Table->Length) { AcpiOsPrintf ( "\n**** Not enough room in table for all localities\n"); return; } AcpiOsPrintf ("%2.2X", Row[j]); Offset++; /* Display up to 16 bytes per output row */ if ((j+1) < Localities) { AcpiOsPrintf (" "); if (j && (((j+1) % 16) == 0)) { AcpiOsPrintf ("\\\n"); /* With line continuation char */ AcpiDmLineHeader (Offset, 0, NULL); } } } /* Point to next row */ AcpiOsPrintf ("\n"); Row += Localities; } } /******************************************************************************* * * FUNCTION: AcpiDmDumpSrat * * PARAMETERS: Table - A SRAT table * * RETURN: None * * DESCRIPTION: Format the contents of a SRAT * ******************************************************************************/ void AcpiDmDumpSrat ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; UINT32 Offset = sizeof (ACPI_TABLE_SRAT); ACPI_SUBTABLE_HEADER *Subtable; ACPI_DMTABLE_INFO *InfoTable; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); while (Offset < Table->Length) { /* Common subtable header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Subtable->Length, AcpiDmTableInfoSratHdr); if (ACPI_FAILURE (Status)) { return; } switch (Subtable->Type) { case ACPI_SRAT_TYPE_CPU_AFFINITY: InfoTable = AcpiDmTableInfoSrat0; break; case ACPI_SRAT_TYPE_MEMORY_AFFINITY: InfoTable = AcpiDmTableInfoSrat1; break; case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY: InfoTable = AcpiDmTableInfoSrat2; break; case ACPI_SRAT_TYPE_GICC_AFFINITY: InfoTable = AcpiDmTableInfoSrat3; break; case ACPI_SRAT_TYPE_GIC_ITS_AFFINITY: InfoTable = AcpiDmTableInfoSrat4; break; case ACPI_SRAT_TYPE_GENERIC_AFFINITY: InfoTable = AcpiDmTableInfoSrat5; break; case ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY: InfoTable = AcpiDmTableInfoSrat6; break; case ACPI_SRAT_TYPE_RINTC_AFFINITY: InfoTable = AcpiDmTableInfoSrat7; break; default: AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n", Subtable->Type); /* Attempt to continue */ if (!Subtable->Length) { AcpiOsPrintf ("Invalid zero length subtable\n"); return; } goto NextSubtable; } AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Subtable->Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } NextSubtable: /* Point to next subtable */ Offset += Subtable->Length; Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, Subtable->Length); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpStao * * PARAMETERS: Table - A STAO table * * RETURN: None * * DESCRIPTION: Format the contents of a STAO. This is a variable-length * table that contains an open-ended number of ASCII strings * at the end of the table. * ******************************************************************************/ void AcpiDmDumpStao ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; char *Namepath; UINT32 Length = Table->Length; UINT32 StringLength; UINT32 Offset = sizeof (ACPI_TABLE_STAO); /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoStao); if (ACPI_FAILURE (Status)) { return; } /* The rest of the table consists of Namepath strings */ while (Offset < Table->Length) { Namepath = ACPI_ADD_PTR (char, Table, Offset); StringLength = strlen (Namepath) + 1; AcpiDmLineHeader (Offset, StringLength, "Namepath"); AcpiOsPrintf ("\"%s\"\n", Namepath); /* Point to next namepath */ Offset += StringLength; } } /******************************************************************************* * * FUNCTION: AcpiDmDumpSvkl * * PARAMETERS: Table - A SVKL table * * RETURN: None * * DESCRIPTION: Format the contents of a SVKL. This is a variable-length * table that contains an open-ended number of key subtables at * the end of the header. * * NOTES: SVKL is essentially a flat table, with a small main table and * a variable number of a single type of subtable. * ******************************************************************************/ void AcpiDmDumpSvkl ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_SVKL); ACPI_SVKL_KEY *Subtable; /* Main table */ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSvkl); if (ACPI_FAILURE (Status)) { return; } /* The rest of the table consists of subtables (single type) */ Subtable = ACPI_ADD_PTR (ACPI_SVKL_KEY, Table, Offset); while (Offset < Table->Length) { /* Dump the subtable */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, sizeof (ACPI_SVKL_KEY), AcpiDmTableInfoSvkl0); if (ACPI_FAILURE (Status)) { return; } /* Point to next subtable */ Offset += sizeof (ACPI_SVKL_KEY); Subtable = ACPI_ADD_PTR (ACPI_SVKL_KEY, Subtable, sizeof (ACPI_SVKL_KEY)); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpTcpa * * PARAMETERS: Table - A TCPA table * * RETURN: None * * DESCRIPTION: Format the contents of a TCPA. * * NOTE: There are two versions of the table with the same signature: * the client version and the server version. The common * PlatformClass field is used to differentiate the two types of * tables. * ******************************************************************************/ void AcpiDmDumpTcpa ( ACPI_TABLE_HEADER *Table) { UINT32 Offset = sizeof (ACPI_TABLE_TCPA_HDR); ACPI_TABLE_TCPA_HDR *CommonHeader = ACPI_CAST_PTR ( ACPI_TABLE_TCPA_HDR, Table); ACPI_TABLE_TCPA_HDR *Subtable = ACPI_ADD_PTR ( ACPI_TABLE_TCPA_HDR, Table, Offset); ACPI_STATUS Status; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTcpaHdr); if (ACPI_FAILURE (Status)) { return; } /* * Examine the PlatformClass field to determine the table type. * Either a client or server table. Only one. */ switch (CommonHeader->PlatformClass) { case ACPI_TCPA_CLIENT_TABLE: Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Table->Length - Offset, AcpiDmTableInfoTcpaClient); break; case ACPI_TCPA_SERVER_TABLE: Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Table->Length - Offset, AcpiDmTableInfoTcpaServer); break; default: AcpiOsPrintf ("\n**** Unknown TCPA Platform Class 0x%X\n", CommonHeader->PlatformClass); Status = AE_ERROR; break; } if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("\n**** Cannot disassemble TCPA table\n"); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpTpm2 * * PARAMETERS: Table - A TPM2 table * * RETURN: None * * DESCRIPTION: Format the contents of a TPM2. * ******************************************************************************/ static void AcpiDmDumpTpm2Rev3 ( ACPI_TABLE_HEADER *Table) { UINT32 Offset = sizeof (ACPI_TABLE_TPM23); ACPI_TABLE_TPM23 *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM23, Table); ACPI_TPM23_TRAILER *Subtable = ACPI_ADD_PTR (ACPI_TPM23_TRAILER, Table, Offset); ACPI_STATUS Status; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm23); if (ACPI_FAILURE (Status)) { return; } /* Optional subtable if start method is ACPI start method */ switch (CommonHeader->StartMethod) { case ACPI_TPM23_ACPI_START_METHOD: (void) AcpiDmDumpTable (Table->Length, Offset, Subtable, Table->Length - Offset, AcpiDmTableInfoTpm23a); break; default: break; } } /******************************************************************************* * * FUNCTION: AcpiDmDumpTpm2 * * PARAMETERS: Table - A TPM2 table * * RETURN: None * * DESCRIPTION: Format the contents of a TPM2. * ******************************************************************************/ void AcpiDmDumpTpm2 ( ACPI_TABLE_HEADER *Table) { UINT32 Offset = sizeof (ACPI_TABLE_TPM2); ACPI_TABLE_TPM2 *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM2, Table); ACPI_TPM2_TRAILER *Subtable = ACPI_ADD_PTR (ACPI_TPM2_TRAILER, Table, Offset); ACPI_TPM2_ARM_SMC *ArmSubtable; ACPI_STATUS Status; if (Table->Revision == 3) { AcpiDmDumpTpm2Rev3(Table); return; } /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2); if (ACPI_FAILURE (Status)) { return; } AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Table->Length - Offset, AcpiDmTableInfoTpm2a); if (ACPI_FAILURE (Status)) { return; } switch (CommonHeader->StartMethod) { case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC: ArmSubtable = ACPI_ADD_PTR (ACPI_TPM2_ARM_SMC, Subtable, sizeof (ACPI_TPM2_TRAILER)); Offset += sizeof (ACPI_TPM2_TRAILER); AcpiOsPrintf ("\n"); (void) AcpiDmDumpTable (Table->Length, Offset, ArmSubtable, Table->Length - Offset, AcpiDmTableInfoTpm211); break; default: break; } } /******************************************************************************* * * FUNCTION: AcpiDmDumpViot * * PARAMETERS: Table - A VIOT table * * RETURN: None * * DESCRIPTION: Format the contents of a VIOT * ******************************************************************************/ void AcpiDmDumpViot ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_TABLE_VIOT *Viot; ACPI_VIOT_HEADER *ViotHeader; UINT16 Length; UINT32 Offset; ACPI_DMTABLE_INFO *InfoTable; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoViot); if (ACPI_FAILURE (Status)) { return; } Viot = ACPI_CAST_PTR (ACPI_TABLE_VIOT, Table); Offset = Viot->NodeOffset; while (Offset < Table->Length) { /* Common subtable header */ ViotHeader = ACPI_ADD_PTR (ACPI_VIOT_HEADER, Table, Offset); AcpiOsPrintf ("\n"); Length = sizeof (ACPI_VIOT_HEADER); Status = AcpiDmDumpTable (Table->Length, Offset, ViotHeader, Length, AcpiDmTableInfoViotHeader); if (ACPI_FAILURE (Status)) { return; } Length = ViotHeader->Length; switch (ViotHeader->Type) { case ACPI_VIOT_NODE_PCI_RANGE: InfoTable = AcpiDmTableInfoViot1; break; case ACPI_VIOT_NODE_MMIO: InfoTable = AcpiDmTableInfoViot2; break; case ACPI_VIOT_NODE_VIRTIO_IOMMU_PCI: InfoTable = AcpiDmTableInfoViot3; break; case ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO: InfoTable = AcpiDmTableInfoViot4; break; default: AcpiOsPrintf ("\n*** Unknown VIOT node type 0x%X\n", ViotHeader->Type); /* Attempt to continue */ if (!Length) { AcpiOsPrintf ("Invalid zero length VIOT node\n"); return; } goto NextSubtable; } AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, ViotHeader, Length, InfoTable); if (ACPI_FAILURE (Status)) { return; } NextSubtable: Offset += Length; } } /******************************************************************************* * * FUNCTION: AcpiDmDumpWdat * * PARAMETERS: Table - A WDAT table * * RETURN: None * * DESCRIPTION: Format the contents of a WDAT * ******************************************************************************/ void AcpiDmDumpWdat ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; UINT32 Offset = sizeof (ACPI_TABLE_WDAT); ACPI_WDAT_ENTRY *Subtable; /* Main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat); if (ACPI_FAILURE (Status)) { return; } /* Subtables */ Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset); while (Offset < Table->Length) { /* Common subtable header */ AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0); if (ACPI_FAILURE (Status)) { return; } /* Point to next subtable */ Offset += sizeof (ACPI_WDAT_ENTRY); Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Subtable, sizeof (ACPI_WDAT_ENTRY)); } } /******************************************************************************* * * FUNCTION: AcpiDmDumpWpbt * * PARAMETERS: Table - A WPBT table * * RETURN: None * * DESCRIPTION: Format the contents of a WPBT. This table type consists * of an open-ended arguments buffer at the end of the table. * ******************************************************************************/ void AcpiDmDumpWpbt ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; ACPI_TABLE_WPBT *Subtable; UINT16 ArgumentsLength; /* Dump the main table */ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWpbt); if (ACPI_FAILURE (Status)) { return; } /* Extract the arguments buffer length from the main table */ Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table); ArgumentsLength = Subtable->ArgumentsLength; /* Dump the arguments buffer if present */ if (ArgumentsLength) { (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength, AcpiDmTableInfoWpbt0); } } src/acpica/source/common/dmtbinfo.c000066400000000000000000000567011465205512700176430ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dmtbinfo - Table info for non-AML tables * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdisasm.h" #include "actbinfo.h" /* This module used for application-level code only */ #define _COMPONENT ACPI_CA_DISASSEMBLER ACPI_MODULE_NAME ("dmtbinfo") /* * How to add a new table: * * - Add the C table definition to the actbl1.h or actbl2.h header. * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. * - Define the table in this file (for the disassembler). If any * new data types are required (ACPI_DMT_*), see below. * - Add an external declaration for the new table definition (AcpiDmTableInfo*) * in acdisam.h * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) * If a simple table (with no subtables), no disassembly code is needed. * Otherwise, create the AcpiDmDump* function for to disassemble the table * and add it to the dmtbdump.c file. * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c * - Create a template for the new table * - Add data table compiler support * * How to add a new data type (ACPI_DMT_*): * * - Add new type at the end of the ACPI_DMT list in acdisasm.h * - Add length and implementation cases in dmtable.c (disassembler) * - Add type and length cases in dtutils.c (DT compiler) */ /* * ACPI Table Information, used to dump formatted ACPI tables * * Each entry is of the form: */ /******************************************************************************* * * Common ACPI table header * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoHeader[] = { {ACPI_DMT_SIG, ACPI_HDR_OFFSET (Signature[0]), "Signature", 0}, {ACPI_DMT_UINT32, ACPI_HDR_OFFSET (Length), "Table Length", DT_LENGTH}, {ACPI_DMT_UINT8, ACPI_HDR_OFFSET (Revision), "Revision", 0}, {ACPI_DMT_CHKSUM, ACPI_HDR_OFFSET (Checksum), "Checksum", 0}, {ACPI_DMT_NAME6, ACPI_HDR_OFFSET (OemId[0]), "Oem ID", 0}, {ACPI_DMT_NAME8, ACPI_HDR_OFFSET (OemTableId[0]), "Oem Table ID", 0}, {ACPI_DMT_UINT32, ACPI_HDR_OFFSET (OemRevision), "Oem Revision", 0}, {ACPI_DMT_NAME4, ACPI_HDR_OFFSET (AslCompilerId[0]), "Asl Compiler ID", 0}, {ACPI_DMT_UINT32, ACPI_HDR_OFFSET (AslCompilerRevision), "Asl Compiler Revision", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * GAS - Generic Address Structure * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoGas[] = { {ACPI_DMT_SPACEID, ACPI_GAS_OFFSET (SpaceId), "Space ID", 0}, {ACPI_DMT_UINT8, ACPI_GAS_OFFSET (BitWidth), "Bit Width", 0}, {ACPI_DMT_UINT8, ACPI_GAS_OFFSET (BitOffset), "Bit Offset", 0}, {ACPI_DMT_ACCWIDTH, ACPI_GAS_OFFSET (AccessWidth), "Encoded Access Width", 0}, {ACPI_DMT_UINT64, ACPI_GAS_OFFSET (Address), "Address", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * RSDP - Root System Description Pointer (Signature is "RSD PTR ") * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp1[] = { {ACPI_DMT_NAME8, ACPI_RSDP_OFFSET (Signature[0]), "Signature", 0}, {ACPI_DMT_UINT8, ACPI_RSDP_OFFSET (Checksum), "Checksum", 0}, {ACPI_DMT_NAME6, ACPI_RSDP_OFFSET (OemId[0]), "Oem ID", 0}, {ACPI_DMT_UINT8, ACPI_RSDP_OFFSET (Revision), "Revision", 0}, {ACPI_DMT_UINT32, ACPI_RSDP_OFFSET (RsdtPhysicalAddress), "RSDT Address", 0}, ACPI_DMT_TERMINATOR }; /* ACPI 2.0+ Extensions */ ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp2[] = { {ACPI_DMT_UINT32, ACPI_RSDP_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT64, ACPI_RSDP_OFFSET (XsdtPhysicalAddress), "XSDT Address", 0}, {ACPI_DMT_UINT8, ACPI_RSDP_OFFSET (ExtendedChecksum), "Extended Checksum", 0}, {ACPI_DMT_UINT24, ACPI_RSDP_OFFSET (Reserved[0]), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * FACS - Firmware ACPI Control Structure * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoFacs[] = { {ACPI_DMT_NAME4, ACPI_FACS_OFFSET (Signature[0]), "Signature", 0}, {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (HardwareSignature), "Hardware Signature", 0}, {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (FirmwareWakingVector), "32 Firmware Waking Vector", 0}, {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (GlobalLock), "Global Lock", 0}, {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_FACS_FLAG_OFFSET (Flags,0), "S4BIOS Support Present", 0}, {ACPI_DMT_FLAG1, ACPI_FACS_FLAG_OFFSET (Flags,0), "64-bit Wake Supported (V2)", 0}, {ACPI_DMT_UINT64, ACPI_FACS_OFFSET (XFirmwareWakingVector), "64 Firmware Waking Vector", 0}, {ACPI_DMT_UINT8, ACPI_FACS_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT24, ACPI_FACS_OFFSET (Reserved[0]), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_FACS_OFFSET (OspmFlags), "OspmFlags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_FACS_FLAG_OFFSET (OspmFlags,0), "64-bit Wake Env Required (V2)", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * FADT - Fixed ACPI Description Table (Signature is FACP) * ******************************************************************************/ /* ACPI 1.0 FADT (Version 1) */ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt1[] = { {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Facs), "FACS Address", 0}, {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Dsdt), "DSDT Address", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Model), "Model", 0}, {ACPI_DMT_FADTPM, ACPI_FADT_OFFSET (PreferredProfile), "PM Profile", 0}, {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (SciInterrupt), "SCI Interrupt", 0}, {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (SmiCommand), "SMI Command Port", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (AcpiEnable), "ACPI Enable Value", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (AcpiDisable), "ACPI Disable Value", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (S4BiosRequest), "S4BIOS Command", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (PstateControl), "P-State Control", 0}, {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm1aEventBlock), "PM1A Event Block Address", 0}, {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm1bEventBlock), "PM1B Event Block Address", 0}, {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm1aControlBlock), "PM1A Control Block Address", 0}, {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm1bControlBlock), "PM1B Control Block Address", 0}, {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Pm2ControlBlock), "PM2 Control Block Address", 0}, {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (PmTimerBlock), "PM Timer Block Address", 0}, {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Gpe0Block), "GPE0 Block Address", 0}, {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Gpe1Block), "GPE1 Block Address", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Pm1EventLength), "PM1 Event Block Length", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Pm1ControlLength), "PM1 Control Block Length", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Pm2ControlLength), "PM2 Control Block Length", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (PmTimerLength), "PM Timer Block Length", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Gpe0BlockLength), "GPE0 Block Length", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Gpe1BlockLength), "GPE1 Block Length", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Gpe1Base), "GPE1 Base Offset", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (CstControl), "_CST Support", 0}, {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (C2Latency), "C2 Latency", 0}, {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (C3Latency), "C3 Latency", 0}, {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (FlushSize), "CPU Cache Size", 0}, {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (FlushStride), "Cache Flush Stride", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (DutyOffset), "Duty Cycle Offset", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (DutyWidth), "Duty Cycle Width", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (DayAlarm), "RTC Day Alarm Index", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MonthAlarm), "RTC Month Alarm Index", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Century), "RTC Century Index", 0}, {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (BootFlags), "Boot Flags (decoded below)", DT_FLAG}, /* Boot Architecture Flags byte 0 */ {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "Legacy Devices Supported (V2)", 0}, {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "8042 Present on ports 60/64 (V2)", 0}, {ACPI_DMT_FLAG2, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "VGA Not Present (V4)", 0}, {ACPI_DMT_FLAG3, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "MSI Not Supported (V4)", 0}, {ACPI_DMT_FLAG4, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "PCIe ASPM Not Supported (V4)", 0}, {ACPI_DMT_FLAG5, ACPI_FADT_FLAG_OFFSET (BootFlags,0), "CMOS RTC Not Present (V5)", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, /* Flags byte 0 */ {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET (Flags,0), "WBINVD instruction is operational (V1)", 0}, {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET (Flags,0), "WBINVD flushes all caches (V1)", 0}, {ACPI_DMT_FLAG2, ACPI_FADT_FLAG_OFFSET (Flags,0), "All CPUs support C1 (V1)", 0}, {ACPI_DMT_FLAG3, ACPI_FADT_FLAG_OFFSET (Flags,0), "C2 works on MP system (V1)", 0}, {ACPI_DMT_FLAG4, ACPI_FADT_FLAG_OFFSET (Flags,0), "Control Method Power Button (V1)", 0}, {ACPI_DMT_FLAG5, ACPI_FADT_FLAG_OFFSET (Flags,0), "Control Method Sleep Button (V1)", 0}, {ACPI_DMT_FLAG6, ACPI_FADT_FLAG_OFFSET (Flags,0), "RTC wake not in fixed reg space (V1)", 0}, {ACPI_DMT_FLAG7, ACPI_FADT_FLAG_OFFSET (Flags,0), "RTC can wake system from S4 (V1)", 0}, /* Flags byte 1 */ {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET (Flags,1), "32-bit PM Timer (V1)", 0}, {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET (Flags,1), "Docking Supported (V1)", 0}, {ACPI_DMT_FLAG2, ACPI_FADT_FLAG_OFFSET (Flags,1), "Reset Register Supported (V2)", 0}, {ACPI_DMT_FLAG3, ACPI_FADT_FLAG_OFFSET (Flags,1), "Sealed Case (V3)", 0}, {ACPI_DMT_FLAG4, ACPI_FADT_FLAG_OFFSET (Flags,1), "Headless - No Video (V3)", 0}, {ACPI_DMT_FLAG5, ACPI_FADT_FLAG_OFFSET (Flags,1), "Use native instr after SLP_TYPx (V3)", 0}, {ACPI_DMT_FLAG6, ACPI_FADT_FLAG_OFFSET (Flags,1), "PCIEXP_WAK Bits Supported (V4)", 0}, {ACPI_DMT_FLAG7, ACPI_FADT_FLAG_OFFSET (Flags,1), "Use Platform Timer (V4)", 0}, /* Flags byte 2 */ {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET (Flags,2), "RTC_STS valid on S4 wake (V4)", 0}, {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET (Flags,2), "Remote Power-on capable (V4)", 0}, {ACPI_DMT_FLAG2, ACPI_FADT_FLAG_OFFSET (Flags,2), "Use APIC Cluster Model (V4)", 0}, {ACPI_DMT_FLAG3, ACPI_FADT_FLAG_OFFSET (Flags,2), "Use APIC Physical Destination Mode (V4)", 0}, {ACPI_DMT_FLAG4, ACPI_FADT_FLAG_OFFSET (Flags,2), "Hardware Reduced (V5)", 0}, {ACPI_DMT_FLAG5, ACPI_FADT_FLAG_OFFSET (Flags,2), "Low Power S0 Idle (V5)", 0}, ACPI_DMT_TERMINATOR }; /* ACPI 1.0 MS Extensions (FADT version 2) */ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt2[] = { {ACPI_DMT_GAS, ACPI_FADT_OFFSET (ResetRegister), "Reset Register", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (ResetValue), "Value to cause reset", 0}, {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (ArmBootFlags), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MinorRevision), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* ACPI 2.0+ Extensions (FADT version 3, 4, and 5) */ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt3[] = { {ACPI_DMT_GAS, ACPI_FADT_OFFSET (ResetRegister), "Reset Register", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (ResetValue), "Value to cause reset", 0}, {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (ArmBootFlags), "ARM Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0), "PSCI Compliant", 0}, {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0), "Must use HVC for PSCI", 0}, ACPI_DMT_NEW_LINE, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MinorRevision), "FADT Minor Revision", 0}, {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (XFacs), "FACS Address", 0}, {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (XDsdt), "DSDT Address", 0}, {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1aEventBlock), "PM1A Event Block", 0}, {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1bEventBlock), "PM1B Event Block", 0}, {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1aControlBlock), "PM1A Control Block", 0}, {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1bControlBlock), "PM1B Control Block", 0}, {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm2ControlBlock), "PM2 Control Block", 0}, {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPmTimerBlock), "PM Timer Block", 0}, {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XGpe0Block), "GPE0 Block", 0}, {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XGpe1Block), "GPE1 Block", 0}, ACPI_DMT_TERMINATOR }; /* Extensions for FADT version 5 */ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt5[] = { {ACPI_DMT_GAS, ACPI_FADT_OFFSET (SleepControl), "Sleep Control Register", 0}, {ACPI_DMT_GAS, ACPI_FADT_OFFSET (SleepStatus), "Sleep Status Register", 0}, ACPI_DMT_TERMINATOR }; /* Extensions for FADT version 6 */ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt6[] = { {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (HypervisorId), "Hypervisor ID", 0}, ACPI_DMT_TERMINATOR }; src/acpica/source/common/dmtbinfo1.c000066400000000000000000002217371465205512700177270ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dmtbinfo1 - Table info for non-AML tables * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdisasm.h" #include "actbinfo.h" /* This module used for application-level code only */ #define _COMPONENT ACPI_CA_DISASSEMBLER ACPI_MODULE_NAME ("dmtbinfo1") /* * How to add a new table: * * - Add the C table definition to the actbl1.h or actbl2.h header. * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. * - Define the table in this file (for the disassembler). If any * new data types are required (ACPI_DMT_*), see below. * - Add an external declaration for the new table definition (AcpiDmTableInfo*) * in acdisam.h * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) * If a simple table (with no subtables), no disassembly code is needed. * Otherwise, create the AcpiDmDump* function for to disassemble the table * and add it to the dmtbdump.c file. * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c * - Create a template for the new table * - Add data table compiler support * * How to add a new data type (ACPI_DMT_*): * * - Add new type at the end of the ACPI_DMT list in acdisasm.h * - Add length and implementation cases in dmtable.c (disassembler) * - Add type and length cases in dtutils.c (DT compiler) */ /* * ACPI Table Information, used to dump formatted ACPI tables * * Each entry is of the form: */ /******************************************************************************* * * AEST - ARM Error Source table. Conforms to: * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020 * ******************************************************************************/ /* Common Subtable header (one per Subtable) */ ACPI_DMTABLE_INFO AcpiDmTableInfoAestHdr[] = { {ACPI_DMT_AEST, ACPI_AESTH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT16, ACPI_AESTH_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT8, ACPI_AESTH_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeSpecificOffset), "Node Specific Offset", 0}, {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeInterfaceOffset), "Node Interface Offset", 0}, {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeInterruptOffset), "Node Interrupt Array Offset", 0}, {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeInterruptCount), "Node Interrupt Array Count", 0}, {ACPI_DMT_UINT64, ACPI_AESTH_OFFSET (TimestampRate), "Timestamp Rate", 0}, {ACPI_DMT_UINT64, ACPI_AESTH_OFFSET (Reserved1), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_AESTH_OFFSET (ErrorInjectionRate), "Error Injection Rate", 0}, ACPI_DMT_TERMINATOR }; /* * AEST subtables (nodes) */ /* 0: Processor Error */ ACPI_DMTABLE_INFO AcpiDmTableInfoAestProcError[] = { {ACPI_DMT_UINT32, ACPI_AEST0_OFFSET (ProcessorId), "Processor ID", 0}, {ACPI_DMT_AEST_RES, ACPI_AEST0_OFFSET (ResourceType), "Resource Type", 0}, {ACPI_DMT_UINT8, ACPI_AEST0_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_AEST0_OFFSET (Flags), "Flags (decoded Below)", 0}, {ACPI_DMT_FLAG0, ACPI_AEST0_FLAG_OFFSET (Flags, 0), "Global", 0}, {ACPI_DMT_FLAG1, ACPI_AEST0_FLAG_OFFSET (Flags, 0), "Shared", 0}, {ACPI_DMT_UINT8, ACPI_AEST0_OFFSET (Revision), "Revision", 0}, {ACPI_DMT_UINT64, ACPI_AEST0_OFFSET (ProcessorAffinity), "Processor Affinity Structure", 0}, ACPI_DMT_TERMINATOR }; /* 0RT: Processor Cache Resource */ ACPI_DMTABLE_INFO AcpiDmTableInfoAestCacheRsrc[] = { {ACPI_DMT_UINT32, ACPI_AEST0A_OFFSET (CacheReference), "Cache Reference", 0}, {ACPI_DMT_UINT32, ACPI_AEST0A_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 1RT: ProcessorTLB Resource */ ACPI_DMTABLE_INFO AcpiDmTableInfoAestTlbRsrc[] = { {ACPI_DMT_UINT32, ACPI_AEST0B_OFFSET (TlbLevel), "TLB Level", 0}, {ACPI_DMT_UINT32, ACPI_AEST0B_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 2RT: Processor Generic Resource */ ACPI_DMTABLE_INFO AcpiDmTableInfoAestGenRsrc[] = { {ACPI_DMT_RAW_BUFFER, 0, "Resource", 0}, ACPI_DMT_TERMINATOR }; /* 1: Memory Error */ ACPI_DMTABLE_INFO AcpiDmTableInfoAestMemError[] = { {ACPI_DMT_UINT32, ACPI_AEST1_OFFSET (SratProximityDomain), "Srat Proximity Domain", 0}, ACPI_DMT_TERMINATOR }; /* 2: Smmu Error */ ACPI_DMTABLE_INFO AcpiDmTableInfoAestSmmuError[] = { {ACPI_DMT_UINT32, ACPI_AEST2_OFFSET (IortNodeReference), "Iort Node Reference", 0}, {ACPI_DMT_UINT32, ACPI_AEST2_OFFSET (SubcomponentReference), "Subcomponent Reference", 0}, ACPI_DMT_TERMINATOR }; /* 3: Vendor Defined */ ACPI_DMTABLE_INFO AcpiDmTableInfoAestVendorError[] = { {ACPI_DMT_UINT32, ACPI_AEST3_OFFSET (AcpiHid), "ACPI HID", 0}, {ACPI_DMT_UINT32, ACPI_AEST3_OFFSET (AcpiUid), "ACPI UID", 0}, {ACPI_DMT_BUF16, ACPI_AEST3_OFFSET (VendorSpecificData), "Vendor Specific Data", 0}, ACPI_DMT_TERMINATOR }; /* 4: Gic Error */ ACPI_DMTABLE_INFO AcpiDmTableInfoAestGicError[] = { {ACPI_DMT_AEST_GIC, ACPI_AEST4_OFFSET (InterfaceType), "GIC Interface Type", 0}, {ACPI_DMT_UINT32, ACPI_AEST4_OFFSET (InstanceId), "Instance ID", 0}, ACPI_DMT_TERMINATOR }; /* AestXface: Node Interface Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoAestXface[] = { {ACPI_DMT_AEST_XFACE, ACPI_AEST0D_OFFSET (Type), "Interface Type", 0}, {ACPI_DMT_UINT24, ACPI_AEST0D_OFFSET (Reserved[0]), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_AEST0D_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_AEST0D_FLAG_OFFSET (Flags, 0), "Shared Interface", 0}, {ACPI_DMT_FLAG1, ACPI_AEST0D_FLAG_OFFSET (Flags, 0), "Clear MISCx Registers", 0}, {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (Address), "Address", 0}, {ACPI_DMT_UINT32, ACPI_AEST0D_OFFSET (ErrorRecordIndex), "Error Record Index", 0}, {ACPI_DMT_UINT32, ACPI_AEST0D_OFFSET (ErrorRecordCount), "Error Record Count", 0}, {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (ErrorRecordImplemented),"Error Record Implemented", 0}, {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (ErrorStatusReporting), "Error Status Reporting", 0}, {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (AddressingMode), "Addressing Mode", 0}, ACPI_DMT_TERMINATOR }; /* AestXrupt: Node Interrupt Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoAestXrupt[] = { {ACPI_DMT_AEST_XRUPT, ACPI_AEST0E_OFFSET (Type), "Interrupt Type", 0}, {ACPI_DMT_UINT16, ACPI_AEST0E_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_AEST0E_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_AEST0E_FLAG_OFFSET (Flags, 0), "Level Triggered", 0}, {ACPI_DMT_UINT32, ACPI_AEST0E_OFFSET (Gsiv), "Gsiv", 0}, {ACPI_DMT_UINT8, ACPI_AEST0E_OFFSET (IortId), "IortId", 0}, {ACPI_DMT_UINT24, ACPI_AEST0E_OFFSET (Reserved1[0]), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * ASF - Alert Standard Format table (Signature "ASF!") * ******************************************************************************/ /* Common Subtable header (one per Subtable) */ ACPI_DMTABLE_INFO AcpiDmTableInfoAsfHdr[] = { {ACPI_DMT_ASF, ACPI_ASF0_OFFSET (Header.Type), "Subtable Type", 0}, {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Header.Reserved), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (Header.Length), "Length", DT_LENGTH}, ACPI_DMT_TERMINATOR }; /* 0: ASF Information */ ACPI_DMTABLE_INFO AcpiDmTableInfoAsf0[] = { {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinResetValue), "Minimum Reset Value", 0}, {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinPollInterval), "Minimum Polling Interval", 0}, {ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (SystemId), "System ID", 0}, {ACPI_DMT_UINT32, ACPI_ASF0_OFFSET (MfgId), "Manufacturer ID", 0}, {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Flags), "Flags", 0}, {ACPI_DMT_UINT24, ACPI_ASF0_OFFSET (Reserved2[0]), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 1: ASF Alerts */ ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1[] = { {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (AssertMask), "AssertMask", 0}, {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (DeassertMask), "DeassertMask", 0}, {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (Alerts), "Alert Count", 0}, {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (DataLength), "Alert Data Length", 0}, ACPI_DMT_TERMINATOR }; /* 1a: ASF Alert data */ ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1a[] = { {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Address), "Address", 0}, {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Command), "Command", 0}, {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Mask), "Mask", 0}, {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Value), "Value", 0}, {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SensorType), "SensorType", 0}, {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Type), "Type", 0}, {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Offset), "Offset", 0}, {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SourceType), "SourceType", 0}, {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Severity), "Severity", 0}, {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SensorNumber), "SensorNumber", 0}, {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Entity), "Entity", 0}, {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Instance), "Instance", 0}, ACPI_DMT_TERMINATOR }; /* 2: ASF Remote Control */ ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2[] = { {ACPI_DMT_UINT8, ACPI_ASF2_OFFSET (Controls), "Control Count", 0}, {ACPI_DMT_UINT8, ACPI_ASF2_OFFSET (DataLength), "Control Data Length", 0}, {ACPI_DMT_UINT16, ACPI_ASF2_OFFSET (Reserved2), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 2a: ASF Control data */ ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2a[] = { {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Function), "Function", 0}, {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Address), "Address", 0}, {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Command), "Command", 0}, {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Value), "Value", 0}, ACPI_DMT_TERMINATOR }; /* 3: ASF RMCP Boot Options */ ACPI_DMTABLE_INFO AcpiDmTableInfoAsf3[] = { {ACPI_DMT_BUF7, ACPI_ASF3_OFFSET (Capabilities[0]), "Capabilities", 0}, {ACPI_DMT_UINT8, ACPI_ASF3_OFFSET (CompletionCode), "Completion Code", 0}, {ACPI_DMT_UINT32, ACPI_ASF3_OFFSET (EnterpriseId), "Enterprise ID", 0}, {ACPI_DMT_UINT8, ACPI_ASF3_OFFSET (Command), "Command", 0}, {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (Parameter), "Parameter", 0}, {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (BootOptions), "Boot Options", 0}, {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (OemParameters), "Oem Parameters", 0}, ACPI_DMT_TERMINATOR }; /* 4: ASF Address */ ACPI_DMTABLE_INFO AcpiDmTableInfoAsf4[] = { {ACPI_DMT_UINT8, ACPI_ASF4_OFFSET (EpromAddress), "Eprom Address", 0}, {ACPI_DMT_UINT8, ACPI_ASF4_OFFSET (Devices), "Device Count", DT_COUNT}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * ASPT - AMD Secure Processor table (Signature "ASPT") * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoAspt[] = { {ACPI_DMT_UINT32, ACPI_ASPT_OFFSET(NumEntries), "Number of Subtables", 0}, ACPI_DMT_TERMINATOR }; /* Common Subtable header (one per Subtable) */ ACPI_DMTABLE_INFO AcpiDmTableInfoAsptHdr[] = { {ACPI_DMT_ASPT, ACPI_ASPTH_OFFSET(Type), "Type", 0}, {ACPI_DMT_UINT16, ACPI_ASPTH_OFFSET(Length), "Length", 0}, ACPI_DMT_TERMINATOR }; /* 0: ASPT Global Registers */ ACPI_DMTABLE_INFO AcpiDmTableInfoAspt0[] = { {ACPI_DMT_UINT32, ACPI_ASPT0_OFFSET(Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_ASPT0_OFFSET(FeatureRegAddr), "Feature Register Address", 0}, {ACPI_DMT_UINT64, ACPI_ASPT0_OFFSET(IrqEnRegAddr), "Interrupt Enable Register Address", 0}, {ACPI_DMT_UINT64, ACPI_ASPT0_OFFSET(IrqStRegAddr), "Interrupt Status Register Address", 0}, ACPI_DMT_TERMINATOR }; /* 1: ASPT SEV Mailbox Registers */ ACPI_DMTABLE_INFO AcpiDmTableInfoAspt1[] = { {ACPI_DMT_UINT8, ACPI_ASPT1_OFFSET(MboxIrqId), "Mailbox Interrupt ID", 0}, {ACPI_DMT_UINT24, ACPI_ASPT1_OFFSET(Reserved[0]), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_ASPT1_OFFSET(CmdRespRegAddr), "CmdResp Register Address", 0}, {ACPI_DMT_UINT64, ACPI_ASPT1_OFFSET(CmdBufLoRegAddr), "CmdBufAddr_Lo Register Address", 0}, {ACPI_DMT_UINT64, ACPI_ASPT1_OFFSET(CmdBufHiRegAddr), "CmdBufAddr_Hi Register Address", 0}, ACPI_DMT_TERMINATOR }; /* 2: ASPT ACPI Maiblox Registers */ ACPI_DMTABLE_INFO AcpiDmTableInfoAspt2[] = { {ACPI_DMT_UINT32, ACPI_ASPT2_OFFSET(Reserved1), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_ASPT2_OFFSET(CmdRespRegAddr), "CmdResp Register Address", 0}, {ACPI_DMT_UINT64, ACPI_ASPT2_OFFSET(Reserved2[0]), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_ASPT2_OFFSET(Reserved2[1]), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * BDAT - BIOS Data ACPI Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoBdat[] = { {ACPI_DMT_GAS, ACPI_BDAT_OFFSET (Gas), "BDAT Generic Address", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * BERT - Boot Error Record table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoBert[] = { {ACPI_DMT_UINT32, ACPI_BERT_OFFSET (RegionLength), "Boot Error Region Length", 0}, {ACPI_DMT_UINT64, ACPI_BERT_OFFSET (Address), "Boot Error Region Address", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * BGRT - Boot Graphics Resource Table (ACPI 5.0) * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoBgrt[] = { {ACPI_DMT_UINT16, ACPI_BGRT_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (Status), "Status (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Displayed", 0}, {ACPI_DMT_FLAGS1, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Orientation Offset", 0}, {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (ImageType), "Image Type", 0}, {ACPI_DMT_UINT64, ACPI_BGRT_OFFSET (ImageAddress), "Image Address", 0}, {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetX), "Image OffsetX", 0}, {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetY), "Image OffsetY", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * BOOT - Simple Boot Flag Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoBoot[] = { {ACPI_DMT_UINT8, ACPI_BOOT_OFFSET (CmosIndex), "Boot Register Index", 0}, {ACPI_DMT_UINT24, ACPI_BOOT_OFFSET (Reserved[0]), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * CDAT - Coherent Device Attribute Table * ******************************************************************************/ /* Table header (not ACPI-compliant) */ ACPI_DMTABLE_INFO AcpiDmTableInfoCdatTableHdr[] = { {ACPI_DMT_UINT32, ACPI_CDAT_OFFSET (Length), "CDAT Table Length", DT_LENGTH}, {ACPI_DMT_UINT8, ACPI_CDAT_OFFSET (Revision), "Revision", 0}, {ACPI_DMT_UINT8, ACPI_CDAT_OFFSET (Checksum), "Checksum", 0}, {ACPI_DMT_UINT48, ACPI_CDAT_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_CDAT_OFFSET (Sequence), "Sequence", 0}, ACPI_DMT_TERMINATOR }; /* Common subtable header */ ACPI_DMTABLE_INFO AcpiDmTableInfoCdatHeader[] = { {ACPI_DMT_CDAT, ACPI_CDATH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT8, ACPI_CDATH_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_CDATH_OFFSET (Length), "Length", DT_LENGTH}, ACPI_DMT_TERMINATOR }; /* Subtable 0: Device Scoped Memory Affinity Structure (DSMAS) */ ACPI_DMTABLE_INFO AcpiDmTableInfoCdat0[] = { {ACPI_DMT_UINT8, ACPI_CDAT0_OFFSET (DsmadHandle), "DSMAD Handle", 0}, {ACPI_DMT_UINT8, ACPI_CDAT0_OFFSET (Flags), "Flags", 0}, {ACPI_DMT_UINT16, ACPI_CDAT0_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_CDAT0_OFFSET (DpaBaseAddress), "DPA Base Address", 0}, {ACPI_DMT_UINT64, ACPI_CDAT0_OFFSET (DpaLength), "DPA Length", 0}, ACPI_DMT_TERMINATOR }; /* Subtable 1: Device scoped Latency and Bandwidth Information Structure (DSLBIS) */ ACPI_DMTABLE_INFO AcpiDmTableInfoCdat1[] = { {ACPI_DMT_UINT8, ACPI_CDAT1_OFFSET (Handle), "Handle", 0}, {ACPI_DMT_UINT8, ACPI_CDAT1_OFFSET (Flags), "Flags", 0}, {ACPI_DMT_UINT8, ACPI_CDAT1_OFFSET (DataType), "Data Type", 0}, {ACPI_DMT_UINT8, ACPI_CDAT1_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_CDAT1_OFFSET (EntryBaseUnit), "Entry Base Unit", 0}, {ACPI_DMT_UINT16, ACPI_CDAT1_OFFSET (Entry[0]), "Entry0", 0}, {ACPI_DMT_UINT16, ACPI_CDAT1_OFFSET (Entry[1]), "Entry1", 0}, {ACPI_DMT_UINT16, ACPI_CDAT1_OFFSET (Entry[2]), "Entry2", 0}, {ACPI_DMT_UINT16, ACPI_CDAT1_OFFSET (Reserved2), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* Subtable 2: Device Scoped Memory Side Cache Information Structure (DSMSCIS) */ ACPI_DMTABLE_INFO AcpiDmTableInfoCdat2[] = { {ACPI_DMT_UINT8, ACPI_CDAT2_OFFSET (DsmasHandle), "DSMAS Handle", 0}, {ACPI_DMT_UINT24, ACPI_CDAT2_OFFSET (Reserved[3]), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_CDAT2_OFFSET (SideCacheSize), "Side Cache Size", 0}, {ACPI_DMT_UINT32, ACPI_CDAT2_OFFSET (CacheAttributes), "Cache Attributes", 0}, ACPI_DMT_TERMINATOR }; /* Subtable 3: Device Scoped Initiator Structure (DSIS) */ ACPI_DMTABLE_INFO AcpiDmTableInfoCdat3[] = { {ACPI_DMT_UINT8, ACPI_CDAT3_OFFSET (Flags), "Flags", 0}, {ACPI_DMT_UINT8, ACPI_CDAT3_OFFSET (Handle), "Handle", 0}, {ACPI_DMT_UINT16, ACPI_CDAT3_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* Subtable 4: Device Scoped EFI Memory Type Structure (DSEMTS) */ ACPI_DMTABLE_INFO AcpiDmTableInfoCdat4[] = { {ACPI_DMT_UINT8, ACPI_CDAT4_OFFSET (DsmasHandle), "DSMAS Handle", 0}, {ACPI_DMT_UINT8, ACPI_CDAT4_OFFSET (MemoryType), "Memory Type", 0}, {ACPI_DMT_UINT16, ACPI_CDAT4_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_CDAT4_OFFSET (DpaOffset), "DPA Offset", 0}, {ACPI_DMT_UINT64, ACPI_CDAT4_OFFSET (RangeLength), "DPA Range Length", 0}, ACPI_DMT_TERMINATOR }; /* Subtable 5: Switch Scoped Latency and Bandwidth Information Structure (SSLBIS) */ ACPI_DMTABLE_INFO AcpiDmTableInfoCdat5[] = { {ACPI_DMT_UINT8, ACPI_CDAT5_OFFSET (DataType), "Data Type", 0}, {ACPI_DMT_UINT24, ACPI_CDAT5_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_CDAT5_OFFSET (EntryBaseUnit), "Entry Base Unit", 0}, ACPI_DMT_TERMINATOR }; /* Switch Scoped Latency and Bandwidth Entry (SSLBE) (For subtable 5 above) */ ACPI_DMTABLE_INFO AcpiDmTableInfoCdatEntries[] = { {ACPI_DMT_UINT16, ACPI_CDATE_OFFSET (PortxId), "Port X Id", 0}, {ACPI_DMT_UINT16, ACPI_CDATE_OFFSET (PortyId), "Port Y Id", 0}, {ACPI_DMT_UINT16, ACPI_CDATE_OFFSET (LatencyOrBandwidth), "Latency or Bandwidth", 0}, {ACPI_DMT_UINT16, ACPI_CDATE_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * CEDT - CXL Early Discovery Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoCedtHdr[] = { {ACPI_DMT_CEDT, ACPI_CEDT_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT8, ACPI_CEDT_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_CEDT_OFFSET (Length), "Length", DT_LENGTH}, ACPI_DMT_TERMINATOR }; /* 0: CXL Host Bridge Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoCedt0[] = { {ACPI_DMT_UINT32, ACPI_CEDT0_OFFSET (Uid), "Associated host bridge", 0}, {ACPI_DMT_UINT32, ACPI_CEDT0_OFFSET (CxlVersion), "Specification version", 0}, {ACPI_DMT_UINT32, ACPI_CEDT0_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_CEDT0_OFFSET (Base), "Register base", 0}, {ACPI_DMT_UINT64, ACPI_CEDT0_OFFSET (Length), "Register length", 0}, ACPI_DMT_TERMINATOR }; /* 1: CXL Fixed Memory Window Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoCedt1[] = { {ACPI_DMT_UINT32, ACPI_CEDT1_OFFSET (Reserved1), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_CEDT1_OFFSET (BaseHpa), "Window base address", 0}, {ACPI_DMT_UINT64, ACPI_CEDT1_OFFSET (WindowSize), "Window size", 0}, {ACPI_DMT_UINT8, ACPI_CEDT1_OFFSET (InterleaveWays), "Interleave Members (2^n)", 0}, {ACPI_DMT_UINT8, ACPI_CEDT1_OFFSET (InterleaveArithmetic), "Interleave Arithmetic", 0}, {ACPI_DMT_UINT16, ACPI_CEDT1_OFFSET (Reserved2), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_CEDT1_OFFSET (Granularity), "Granularity", 0}, {ACPI_DMT_UINT16, ACPI_CEDT1_OFFSET (Restrictions), "Restrictions", 0}, {ACPI_DMT_UINT16, ACPI_CEDT1_OFFSET (QtgId), "QtgId", 0}, {ACPI_DMT_UINT32, ACPI_CEDT1_OFFSET (InterleaveTargets), "First Target", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoCedt1_te[] = { {ACPI_DMT_UINT32, ACPI_CEDT1_TE_OFFSET (InterleaveTarget), "Next Target", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * CPEP - Corrected Platform Error Polling table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoCpep[] = { {ACPI_DMT_UINT64, ACPI_CPEP_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoCpep0[] = { {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Type), "Subtable Type", 0}, {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Id), "Processor ID", 0}, {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Eid), "Processor EID", 0}, {ACPI_DMT_UINT32, ACPI_CPEP0_OFFSET (Interval), "Polling Interval", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * CSRT - Core System Resource Table * ******************************************************************************/ /* Main table consists only of the standard ACPI table header */ /* Resource Group subtable */ ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt0[] = { {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (VendorId), "Vendor ID", 0}, {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SubvendorId), "Subvendor ID", 0}, {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (DeviceId), "Device ID", 0}, {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (SubdeviceId), "Subdevice ID", 0}, {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Revision), "Revision", 0}, {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SharedInfoLength), "Shared Info Length", 0}, ACPI_DMT_TERMINATOR }; /* Shared Info subtable */ ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt1[] = { {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (MajorVersion), "Major Version", 0}, {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (MinorVersion), "Minor Version", 0}, {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MmioBaseLow), "MMIO Base Address Low", 0}, {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MmioBaseHigh), "MMIO Base Address High", 0}, {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (GsiInterrupt), "GSI Interrupt", 0}, {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (InterruptPolarity), "Interrupt Polarity", 0}, {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (InterruptMode), "Interrupt Mode", 0}, {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (NumChannels), "Num Channels", 0}, {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (DmaAddressWidth), "DMA Address Width", 0}, {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (BaseRequestLine), "Base Request Line", 0}, {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (NumHandshakeSignals), "Num Handshake Signals", 0}, {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MaxBlockSize), "Max Block Size", 0}, ACPI_DMT_TERMINATOR }; /* Resource Descriptor subtable */ ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2[] = { {ACPI_DMT_UINT32, ACPI_CSRT2_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT16, ACPI_CSRT2_OFFSET (Type), "Type", 0}, {ACPI_DMT_UINT16, ACPI_CSRT2_OFFSET (Subtype), "Subtype", 0}, {ACPI_DMT_UINT32, ACPI_CSRT2_OFFSET (Uid), "UID", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2a[] = { {ACPI_DMT_RAW_BUFFER, 0, "ResourceInfo", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * DBG2 - Debug Port Table 2 * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2[] = { {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoOffset), "Info Offset", 0}, {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoCount), "Info Count", 0}, ACPI_DMT_TERMINATOR }; /* Debug Device Information Subtable */ ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Device[] = { {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (Revision), "Revision", 0}, {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (RegisterCount), "Register Count", 0}, {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathLength), "Namepath Length", 0}, {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathOffset), "Namepath Offset", 0}, {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataLength), "OEM Data Length", DT_DESCRIBES_OPTIONAL}, {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataOffset), "OEM Data Offset", DT_DESCRIBES_OPTIONAL}, {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortType), "Port Type", 0}, {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortSubtype), "Port Subtype", 0}, {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (BaseAddressOffset), "Base Address Offset", 0}, {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (AddressSizeOffset), "Address Size Offset", 0}, ACPI_DMT_TERMINATOR }; /* Variable-length data for the subtable */ ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Addr[] = { {ACPI_DMT_GAS, 0, "Base Address Register", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Size[] = { {ACPI_DMT_UINT32, 0, "Address Size", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Name[] = { {ACPI_DMT_STRING, 0, "Namepath", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2OemData[] = { {ACPI_DMT_RAW_BUFFER, 0, "OEM Data", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * DBGP - Debug Port * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoDbgp[] = { {ACPI_DMT_UINT8, ACPI_DBGP_OFFSET (Type), "Interface Type", 0}, {ACPI_DMT_UINT24, ACPI_DBGP_OFFSET (Reserved[0]), "Reserved", 0}, {ACPI_DMT_GAS, ACPI_DBGP_OFFSET (DebugPort), "Debug Port Register", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * DMAR - DMA Remapping table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoDmar[] = { {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Width), "Host Address Width", 0}, {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Flags), "Flags", 0}, {ACPI_DMT_BUF10, ACPI_DMAR_OFFSET (Reserved[0]), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* Common Subtable header (one per Subtable) */ ACPI_DMTABLE_INFO AcpiDmTableInfoDmarHdr[] = { {ACPI_DMT_DMAR, ACPI_DMAR0_OFFSET (Header.Type), "Subtable Type", 0}, {ACPI_DMT_UINT16, ACPI_DMAR0_OFFSET (Header.Length), "Length", DT_LENGTH}, ACPI_DMT_TERMINATOR }; /* Common device scope entry */ ACPI_DMTABLE_INFO AcpiDmTableInfoDmarScope[] = { {ACPI_DMT_DMAR_SCOPE, ACPI_DMARS_OFFSET (EntryType), "Device Scope Type", 0}, {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Length), "Entry Length", DT_LENGTH}, {ACPI_DMT_UINT16, ACPI_DMARS_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (EnumerationId), "Enumeration ID", 0}, {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Bus), "PCI Bus Number", 0}, ACPI_DMT_TERMINATOR }; /* DMAR Subtables */ /* 0: Hardware Unit Definition */ ACPI_DMTABLE_INFO AcpiDmTableInfoDmar0[] = { {ACPI_DMT_UINT8, ACPI_DMAR0_OFFSET (Flags), "Flags", 0}, {ACPI_DMT_UINT8, ACPI_DMAR0_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_DMAR0_OFFSET (Segment), "PCI Segment Number", 0}, {ACPI_DMT_UINT64, ACPI_DMAR0_OFFSET (Address), "Register Base Address", 0}, ACPI_DMT_TERMINATOR }; /* 1: Reserved Memory Definition */ ACPI_DMTABLE_INFO AcpiDmTableInfoDmar1[] = { {ACPI_DMT_UINT16, ACPI_DMAR1_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_DMAR1_OFFSET (Segment), "PCI Segment Number", 0}, {ACPI_DMT_UINT64, ACPI_DMAR1_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT64, ACPI_DMAR1_OFFSET (EndAddress), "End Address (limit)", 0}, ACPI_DMT_TERMINATOR }; /* 2: Root Port ATS Capability Definition */ ACPI_DMTABLE_INFO AcpiDmTableInfoDmar2[] = { {ACPI_DMT_UINT8, ACPI_DMAR2_OFFSET (Flags), "Flags", 0}, {ACPI_DMT_UINT8, ACPI_DMAR2_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_DMAR2_OFFSET (Segment), "PCI Segment Number", 0}, ACPI_DMT_TERMINATOR }; /* 3: Remapping Hardware Static Affinity Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[] = { {ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_DMAR3_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (ProximityDomain), "Proximity Domain", 0}, ACPI_DMT_TERMINATOR }; /* 4: ACPI Namespace Device Declaration Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[] = { {ACPI_DMT_UINT24, ACPI_DMAR4_OFFSET (Reserved[0]), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_DMAR4_OFFSET (DeviceNumber), "Device Number", 0}, {ACPI_DMT_STRING, ACPI_DMAR4_OFFSET (DeviceName[0]), "Device Name", 0}, ACPI_DMT_TERMINATOR }; /* 5: Hardware Unit Definition */ ACPI_DMTABLE_INFO AcpiDmTableInfoDmar5[] = { {ACPI_DMT_UINT8, ACPI_DMAR5_OFFSET (Flags), "Flags", 0}, {ACPI_DMT_UINT8, ACPI_DMAR5_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_DMAR5_OFFSET (Segment), "PCI Segment Number", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * DRTM - Dynamic Root of Trust for Measurement table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm[] = { {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryBaseAddress), "Entry Base Address", 0}, {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryLength), "Entry Length", 0}, {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (EntryAddress32), "Entry 32", 0}, {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryAddress64), "Entry 64", 0}, {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (ExitAddress), "Exit Address", 0}, {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (LogAreaAddress), "Log Area Start", 0}, {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (LogAreaLength), "Log Area Length", 0}, {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (ArchDependentAddress), "Arch Dependent Address", 0}, {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Namespace in TCB", 0}, {ACPI_DMT_FLAG1, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Gap Code on S3 Resume", 0}, {ACPI_DMT_FLAG2, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Gap Code on DLME_Exit", 0}, {ACPI_DMT_FLAG3, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "PCR_Authorities Changed", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0[] = { {ACPI_DMT_UINT32, ACPI_DRTM0_OFFSET (ValidatedTableCount), "Validated Table Count", DT_COUNT}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0a[] = { {ACPI_DMT_UINT64, 0, "Table Address", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1[] = { {ACPI_DMT_UINT32, ACPI_DRTM1_OFFSET (ResourceCount), "Resource Count", DT_COUNT}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1a[] = { {ACPI_DMT_UINT56, ACPI_DRTM1a_OFFSET (Size[0]), "Size", DT_OPTIONAL}, {ACPI_DMT_UINT8, ACPI_DRTM1a_OFFSET (Type), "Type", 0}, {ACPI_DMT_FLAG0, ACPI_DRTM1a_FLAG_OFFSET (Type, 0), "Resource Type", 0}, {ACPI_DMT_FLAG7, ACPI_DRTM1a_FLAG_OFFSET (Type, 0), "Protections", 0}, {ACPI_DMT_UINT64, ACPI_DRTM1a_OFFSET (Address), "Address", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm2[] = { {ACPI_DMT_UINT32, ACPI_DRTM2_OFFSET (DpsIdLength), "DLME Platform Id Length", DT_COUNT}, {ACPI_DMT_BUF16, ACPI_DRTM2_OFFSET (DpsId), "DLME Platform Id", DT_COUNT}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * ECDT - Embedded Controller Boot Resources Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoEcdt[] = { {ACPI_DMT_GAS, ACPI_ECDT_OFFSET (Control), "Command/Status Register", 0}, {ACPI_DMT_GAS, ACPI_ECDT_OFFSET (Data), "Data Register", 0}, {ACPI_DMT_UINT32, ACPI_ECDT_OFFSET (Uid), "UID", 0}, {ACPI_DMT_UINT8, ACPI_ECDT_OFFSET (Gpe), "GPE Number", 0}, {ACPI_DMT_STRING, ACPI_ECDT_OFFSET (Id[0]), "Namepath", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * EINJ - Error Injection table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoEinj[] = { {ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (HeaderLength), "Injection Header Length", 0}, {ACPI_DMT_UINT8, ACPI_EINJ_OFFSET (Flags), "Flags", 0}, {ACPI_DMT_UINT24, ACPI_EINJ_OFFSET (Reserved[0]), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (Entries), "Injection Entry Count", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoEinj0[] = { {ACPI_DMT_EINJACT, ACPI_EINJ0_OFFSET (Action), "Action", 0}, {ACPI_DMT_EINJINST, ACPI_EINJ0_OFFSET (Instruction), "Instruction", 0}, {ACPI_DMT_UINT8, ACPI_EINJ0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_EINJ0_FLAG_OFFSET (Flags,0), "Preserve Register Bits", 0}, {ACPI_DMT_UINT8, ACPI_EINJ0_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_GAS, ACPI_EINJ0_OFFSET (RegisterRegion), "Register Region", 0}, {ACPI_DMT_UINT64, ACPI_EINJ0_OFFSET (Value), "Value", 0}, {ACPI_DMT_UINT64, ACPI_EINJ0_OFFSET (Mask), "Mask", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * ERST - Error Record Serialization table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoErst[] = { {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (HeaderLength), "Serialization Header Length", 0}, {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (Entries), "Instruction Entry Count", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoErst0[] = { {ACPI_DMT_ERSTACT, ACPI_ERST0_OFFSET (Action), "Action", 0}, {ACPI_DMT_ERSTINST, ACPI_ERST0_OFFSET (Instruction), "Instruction", 0}, {ACPI_DMT_UINT8, ACPI_ERST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_ERST0_FLAG_OFFSET (Flags,0), "Preserve Register Bits", 0}, {ACPI_DMT_UINT8, ACPI_ERST0_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_GAS, ACPI_ERST0_OFFSET (RegisterRegion), "Register Region", 0}, {ACPI_DMT_UINT64, ACPI_ERST0_OFFSET (Value), "Value", 0}, {ACPI_DMT_UINT64, ACPI_ERST0_OFFSET (Mask), "Mask", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * FPDT - Firmware Performance Data Table (ACPI 5.0) * ******************************************************************************/ /* Main table consists of only the standard ACPI header - subtables follow */ /* FPDT subtable header */ ACPI_DMTABLE_INFO AcpiDmTableInfoFpdtHdr[] = { {ACPI_DMT_UINT16, ACPI_FPDTH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT8, ACPI_FPDTH_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT8, ACPI_FPDTH_OFFSET (Revision), "Revision", 0}, ACPI_DMT_TERMINATOR }; /* 0: Firmware Basic Boot Performance Record */ ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt0[] = { {ACPI_DMT_UINT32, ACPI_FPDT0_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "FPDT Boot Record Address", 0}, ACPI_DMT_TERMINATOR }; /* 1: S3 Performance Table Pointer Record */ ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[] = { {ACPI_DMT_UINT32, ACPI_FPDT1_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "S3PT Record Address", 0}, ACPI_DMT_TERMINATOR }; #if 0 /* Boot Performance Record, not supported at this time. */ {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ResetEnd), "Reset End", 0}, {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (LoadStart), "Load Image Start", 0}, {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (StartupStart), "Start Image Start", 0}, {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesEntry), "Exit Services Entry", 0}, {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesExit), "Exit Services Exit", 0}, #endif /******************************************************************************* * * GTDT - Generic Timer Description Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt[] = { {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterBlockAddresss), "Counter Block Address", 0}, {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_NEW_LINE, {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Interrupt), "Secure EL1 Interrupt", 0}, {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Flags), "EL1 Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Trigger Mode", 0}, {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Polarity", 0}, {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Always On", 0}, ACPI_DMT_NEW_LINE, {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Interrupt), "Non-Secure EL1 Interrupt", 0}, {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Flags), "NEL1 Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Trigger Mode", 0}, {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Polarity", 0}, {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Always On", 0}, ACPI_DMT_NEW_LINE, {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerFlags), "VT Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Trigger Mode", 0}, {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Polarity", 0}, {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Always On", 0}, ACPI_DMT_NEW_LINE, {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Interrupt), "Non-Secure EL2 Interrupt", 0}, {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Flags), "NEL2 Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Trigger Mode", 0}, {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Polarity", 0}, {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Always On", 0}, {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterReadBlockAddress), "Counter Read Block Address", 0}, ACPI_DMT_NEW_LINE, {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerCount), "Platform Timer Count", 0}, {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerOffset), "Platform Timer Offset", 0}, ACPI_DMT_TERMINATOR }; /* GDTD EL2 timer info. This table is appended to AcpiDmTableInfoGtdt for rev 3 and later */ ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtEl2[] = { {ACPI_DMT_UINT32, ACPI_GTDT_EL2_OFFSET (VirtualEL2TimerGsiv), "Virtual EL2 Timer GSIV", 0}, {ACPI_DMT_UINT32, ACPI_GTDT_EL2_OFFSET (VirtualEL2TimerFlags), "Virtual EL2 Timer Flags", 0}, ACPI_DMT_TERMINATOR }; /* GTDT Subtable header (one per Subtable) */ ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtHdr[] = { {ACPI_DMT_GTDT, ACPI_GTDTH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT16, ACPI_GTDTH_OFFSET (Length), "Length", DT_LENGTH}, ACPI_DMT_TERMINATOR }; /* GTDT Subtables */ ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0[] = { {ACPI_DMT_UINT8, ACPI_GTDT0_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_GTDT0_OFFSET (BlockAddress), "Block Address", 0}, {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerCount), "Timer Count", 0}, {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerOffset), "Timer Offset", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0a[] = { {ACPI_DMT_UINT8 , ACPI_GTDT0a_OFFSET (FrameNumber), "Frame Number", 0}, {ACPI_DMT_UINT24, ACPI_GTDT0a_OFFSET (Reserved[0]), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (El0BaseAddress), "EL0 Base Address", 0}, {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerFlags), "Timer Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerFlags), "Virtual Timer Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Trigger Mode", 0}, {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Polarity", 0}, {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (CommonFlags), "Common Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Secure", 0}, {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Always On", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt1[] = { {ACPI_DMT_UINT8, ACPI_GTDT1_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (RefreshFrameAddress), "Refresh Frame Address", 0}, {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (ControlFrameAddress), "Control Frame Address", 0}, {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerFlags), "Timer Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, {ACPI_DMT_FLAG1, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, {ACPI_DMT_FLAG2, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Security", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * HEST - Hardware Error Source table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoHest[] = { {ACPI_DMT_UINT32, ACPI_HEST_OFFSET (ErrorSourceCount), "Error Source Count", 0}, ACPI_DMT_TERMINATOR }; /* Common HEST structures for subtables */ #define ACPI_DM_HEST_HEADER \ {ACPI_DMT_HEST, ACPI_HEST0_OFFSET (Header.Type), "Subtable Type", 0}, \ {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Header.SourceId), "Source Id", 0} #define ACPI_DM_HEST_AER \ {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved1), "Reserved", 0}, \ {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Flags), "Flags (decoded below)", DT_FLAG}, \ {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Firmware First", 0}, \ {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Global", 0}, \ {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Enabled), "Enabled", 0}, \ {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.RecordsToPreallocate), "Records To Preallocate", 0}, \ {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.MaxSectionsPerRecord), "Max Sections Per Record", 0}, \ {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.Bus), "Bus", 0}, \ {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Device), "Device", 0}, \ {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Function), "Function", 0}, \ {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.DeviceControl), "DeviceControl", 0}, \ {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved2), "Reserved", 0}, \ {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableMask), "Uncorrectable Mask", 0}, \ {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableSeverity), "Uncorrectable Severity", 0}, \ {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.CorrectableMask), "Correctable Mask", 0}, \ {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.AdvancedCapabilities), "Advanced Capabilities", 0} /* HEST Subtables */ /* 0: IA32 Machine Check Exception */ ACPI_DMTABLE_INFO AcpiDmTableInfoHest0[] = { ACPI_DM_HEST_HEADER, {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Reserved1), "Reserved1", 0}, {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_HEST0_FLAG_OFFSET (Flags,0), "Firmware First", 0}, {ACPI_DMT_FLAG2, ACPI_HEST0_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Enabled), "Enabled", 0}, {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, {ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalCapabilityData), "Global Capability Data", 0}, {ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalControlData), "Global Control Data", 0}, {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, {ACPI_DMT_UINT56, ACPI_HEST0_OFFSET (Reserved3[0]), "Reserved2", 0}, ACPI_DMT_TERMINATOR }; /* 1: IA32 Corrected Machine Check */ ACPI_DMTABLE_INFO AcpiDmTableInfoHest1[] = { ACPI_DM_HEST_HEADER, {ACPI_DMT_UINT16, ACPI_HEST1_OFFSET (Reserved1), "Reserved1", 0}, {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_HEST1_FLAG_OFFSET (Flags,0), "Firmware First", 0}, {ACPI_DMT_FLAG2, ACPI_HEST1_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Enabled), "Enabled", 0}, {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, {ACPI_DMT_HESTNTFY, ACPI_HEST1_OFFSET (Notify), "Notify", 0}, {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, {ACPI_DMT_UINT24, ACPI_HEST1_OFFSET (Reserved2[0]), "Reserved2", 0}, ACPI_DMT_TERMINATOR }; /* 2: IA32 Non-Maskable Interrupt */ ACPI_DMTABLE_INFO AcpiDmTableInfoHest2[] = { ACPI_DM_HEST_HEADER, {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, ACPI_DMT_TERMINATOR }; /* 6: PCI Express Root Port AER */ ACPI_DMTABLE_INFO AcpiDmTableInfoHest6[] = { ACPI_DM_HEST_HEADER, ACPI_DM_HEST_AER, {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (RootErrorCommand), "Root Error Command", 0}, ACPI_DMT_TERMINATOR }; /* 7: PCI Express AER (AER Endpoint) */ ACPI_DMTABLE_INFO AcpiDmTableInfoHest7[] = { ACPI_DM_HEST_HEADER, ACPI_DM_HEST_AER, ACPI_DMT_TERMINATOR }; /* 8: PCI Express/PCI-X Bridge AER */ ACPI_DMTABLE_INFO AcpiDmTableInfoHest8[] = { ACPI_DM_HEST_HEADER, ACPI_DM_HEST_AER, {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableMask2), "2nd Uncorrectable Mask", 0}, {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableSeverity2), "2nd Uncorrectable Severity", 0}, {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (AdvancedCapabilities2), "2nd Advanced Capabilities", 0}, ACPI_DMT_TERMINATOR }; /* 9: Generic Hardware Error Source */ ACPI_DMTABLE_INFO AcpiDmTableInfoHest9[] = { ACPI_DM_HEST_HEADER, {ACPI_DMT_UINT16, ACPI_HEST9_OFFSET (RelatedSourceId), "Related Source Id", 0}, {ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Enabled), "Enabled", 0}, {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, {ACPI_DMT_GAS, ACPI_HEST9_OFFSET (ErrorStatusAddress), "Error Status Address", 0}, {ACPI_DMT_HESTNTFY, ACPI_HEST9_OFFSET (Notify), "Notify", 0}, {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (ErrorBlockLength), "Error Status Block Length", 0}, ACPI_DMT_TERMINATOR }; /* 10: Generic Hardware Error Source - Version 2 */ ACPI_DMTABLE_INFO AcpiDmTableInfoHest10[] = { ACPI_DM_HEST_HEADER, {ACPI_DMT_UINT16, ACPI_HEST10_OFFSET (RelatedSourceId), "Related Source Id", 0}, {ACPI_DMT_UINT8, ACPI_HEST10_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_HEST10_OFFSET (Enabled), "Enabled", 0}, {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, {ACPI_DMT_GAS, ACPI_HEST10_OFFSET (ErrorStatusAddress), "Error Status Address", 0}, {ACPI_DMT_HESTNTFY, ACPI_HEST10_OFFSET (Notify), "Notify", 0}, {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (ErrorBlockLength), "Error Status Block Length", 0}, {ACPI_DMT_GAS, ACPI_HEST10_OFFSET (ReadAckRegister), "Read Ack Register", 0}, {ACPI_DMT_UINT64, ACPI_HEST10_OFFSET (ReadAckPreserve), "Read Ack Preserve", 0}, {ACPI_DMT_UINT64, ACPI_HEST10_OFFSET (ReadAckWrite), "Read Ack Write", 0}, ACPI_DMT_TERMINATOR }; /* 11: IA32 Deferred Machine Check */ ACPI_DMTABLE_INFO AcpiDmTableInfoHest11[] = { ACPI_DM_HEST_HEADER, {ACPI_DMT_UINT16, ACPI_HEST11_OFFSET (Reserved1), "Reserved1", 0}, {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_HEST11_FLAG_OFFSET (Flags,0), "Firmware First", 0}, {ACPI_DMT_FLAG2, ACPI_HEST11_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Enabled), "Enabled", 0}, {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, {ACPI_DMT_HESTNTFY, ACPI_HEST11_OFFSET (Notify), "Notify", 0}, {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, {ACPI_DMT_UINT24, ACPI_HEST11_OFFSET (Reserved2[0]), "Reserved2", 0}, ACPI_DMT_TERMINATOR }; /* Notification Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoHestNotify[] = { {ACPI_DMT_HESTNTYP, ACPI_HESTN_OFFSET (Type), "Notify Type", 0}, {ACPI_DMT_UINT8, ACPI_HESTN_OFFSET (Length), "Notify Length", DT_LENGTH}, {ACPI_DMT_UINT16, ACPI_HESTN_OFFSET (ConfigWriteEnable), "Configuration Write Enable", 0}, {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollInterval), "PollInterval", 0}, {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (Vector), "Vector", 0}, {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollingThresholdValue), "Polling Threshold Value", 0}, {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollingThresholdWindow), "Polling Threshold Window", 0}, {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (ErrorThresholdValue), "Error Threshold Value", 0}, {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (ErrorThresholdWindow), "Error Threshold Window", 0}, ACPI_DMT_TERMINATOR }; /* * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and * ACPI_HEST_IA_CORRECTED structures. */ ACPI_DMTABLE_INFO AcpiDmTableInfoHestBank[] = { {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (BankNumber), "Bank Number", 0}, {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (ClearStatusOnInit), "Clear Status On Init", 0}, {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (StatusFormat), "Status Format", 0}, {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (ControlRegister), "Control Register", 0}, {ACPI_DMT_UINT64, ACPI_HESTB_OFFSET (ControlData), "Control Data", 0}, {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (StatusRegister), "Status Register", 0}, {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (AddressRegister), "Address Register", 0}, {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (MiscRegister), "Misc Register", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * HMAT - Heterogeneous Memory Attributes Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoHmat[] = { {ACPI_DMT_UINT32, ACPI_HMAT_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* Common HMAT structure header (one per Subtable) */ ACPI_DMTABLE_INFO AcpiDmTableInfoHmatHdr[] = { {ACPI_DMT_HMAT, ACPI_HMATH_OFFSET (Type), "Structure Type", 0}, {ACPI_DMT_UINT16, ACPI_HMATH_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_HMATH_OFFSET (Length), "Length", 0}, ACPI_DMT_TERMINATOR }; /* HMAT subtables */ /* 0x00: Memory proximity domain attributes */ ACPI_DMTABLE_INFO AcpiDmTableInfoHmat0[] = { {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Processor Proximity Domain Valid", 0}, {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Reserved1), "Reserved1", 0}, {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (InitiatorPD), "Attached Initiator Proximity Domain", 0}, {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (Reserved2), "Reserved2", 0}, {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (Reserved3), "Reserved3", 0}, {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (Reserved4), "Reserved4", 0}, ACPI_DMT_TERMINATOR }; /* 0x01: System Locality Latency and Bandwidth Information */ ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1[] = { {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_FLAGS4_0, ACPI_HMAT1_FLAG_OFFSET (Flags,0), "Memory Hierarchy", 0}, /* First 4 bits */ {ACPI_DMT_FLAG4, ACPI_HMAT1_FLAG_OFFSET (Flags,0), "Use Minimum Transfer Size", 0}, {ACPI_DMT_FLAG5, ACPI_HMAT1_FLAG_OFFSET (Flags,0), "Non-sequential Transfers", 0}, {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (DataType), "Data Type", 0}, {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (MinTransferSize), "Minimum Transfer Size", 0}, {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (Reserved1), "Reserved1", 0}, {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfInitiatorPDs), "Initiator Proximity Domains #", 0}, {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfTargetPDs), "Target Proximity Domains #", 0}, {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (Reserved2), "Reserved2", 0}, {ACPI_DMT_UINT64, ACPI_HMAT1_OFFSET (EntryBaseUnit), "Entry Base Unit", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1a[] = { {ACPI_DMT_UINT32, 0, "Initiator Proximity Domain List", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1b[] = { {ACPI_DMT_UINT32, 0, "Target Proximity Domain List", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1c[] = { {ACPI_DMT_UINT16, 0, "Entry", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /* 0x02: Memory Side Cache Information */ ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2[] = { {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (Reserved1), "Reserved1", 0}, {ACPI_DMT_UINT64, ACPI_HMAT2_OFFSET (CacheSize), "Memory Side Cache Size", 0}, {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (CacheAttributes), "Cache Attributes (decoded below)", 0}, {ACPI_DMT_FLAGS4_0, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Total Cache Levels", 0}, {ACPI_DMT_FLAGS4_4, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Level", 0}, {ACPI_DMT_FLAGS4_8, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Associativity", 0}, {ACPI_DMT_FLAGS4_12, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Write Policy", 0}, {ACPI_DMT_FLAGS16_16, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Line Size", 0}, {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (Reserved2), "Reserved2", 0}, {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (NumberOfSMBIOSHandles), "SMBIOS Handle #", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2a[] = { {ACPI_DMT_UINT16, 0, "SMBIOS Handle", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * HPET - High Precision Event Timer table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoHpet[] = { {ACPI_DMT_UINT32, ACPI_HPET_OFFSET (Id), "Hardware Block ID", 0}, {ACPI_DMT_GAS, ACPI_HPET_OFFSET (Address), "Timer Block Register", 0}, {ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Sequence), "Sequence Number", 0}, {ACPI_DMT_UINT16, ACPI_HPET_OFFSET (MinimumTick), "Minimum Clock Ticks", 0}, {ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_HPET_FLAG_OFFSET (Flags,0), "4K Page Protect", 0}, {ACPI_DMT_FLAG1, ACPI_HPET_FLAG_OFFSET (Flags,0), "64K Page Protect", 0}, ACPI_DMT_TERMINATOR }; /*! [End] no source code translation !*/ src/acpica/source/common/dmtbinfo2.c000066400000000000000000003432621465205512700177260ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dmtbinfo2 - Table info for non-AML tables * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdisasm.h" #include "actbinfo.h" /* This module used for application-level code only */ #define _COMPONENT ACPI_CA_DISASSEMBLER ACPI_MODULE_NAME ("dmtbinfo2") /* * How to add a new table: * * - Add the C table definition to the actbl1.h or actbl2.h header. * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. * - Define the table in this file (for the disassembler). If any * new data types are required (ACPI_DMT_*), see below. * - Add an external declaration for the new table definition (AcpiDmTableInfo*) * in acdisam.h * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) * If a simple table (with no subtables), no disassembly code is needed. * Otherwise, create the AcpiDmDump* function for to disassemble the table * and add it to the dmtbdump.c file. * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c * - Create a template for the new table * - Add data table compiler support * * How to add a new data type (ACPI_DMT_*): * * - Add new type at the end of the ACPI_DMT list in acdisasm.h * - Add length and implementation cases in dmtable.c (disassembler) * - Add type and length cases in dtutils.c (DT compiler) */ /* * Remaining tables are not consumed directly by the ACPICA subsystem */ /******************************************************************************* * * AGDI - Arm Generic Diagnostic Dump and Reset Device Interface * * Conforms to "ACPI for Arm Components 1.1, Platform Design Document" * ARM DEN0093 v1.1 * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoAgdi[] = { {ACPI_DMT_UINT8, ACPI_AGDI_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_AGDI_FLAG_OFFSET (Flags, 0), "Signalling mode", 0}, {ACPI_DMT_UINT24, ACPI_AGDI_OFFSET (Reserved[0]), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_AGDI_OFFSET (SdeiEvent), "SdeiEvent", 0}, {ACPI_DMT_UINT32, ACPI_AGDI_OFFSET (Gsiv), "Gsiv", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * APMT - ARM Performance Monitoring Unit Table * * Conforms to: * ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document * ARM DEN0117 v1.0 November 25, 2021 * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoApmtNode[] = { {ACPI_DMT_UINT16, ACPI_APMTN_OFFSET (Length), "Length of APMT Node", 0}, {ACPI_DMT_UINT8, ACPI_APMTN_OFFSET (Flags), "Node Flags", 0}, {ACPI_DMT_FLAG0, ACPI_APMTN_FLAG_OFFSET (Flags, 0), "Dual Page Extension", 0}, {ACPI_DMT_FLAG1, ACPI_APMTN_FLAG_OFFSET (Flags, 0), "Processor Affinity Type", 0}, {ACPI_DMT_FLAG2, ACPI_APMTN_FLAG_OFFSET (Flags, 0), "64-bit Atomic Support", 0}, {ACPI_DMT_UINT8, ACPI_APMTN_OFFSET (Type), "Node Type", 0}, {ACPI_DMT_UINT32, ACPI_APMTN_OFFSET (Id), "Unique Node Identifier", 0}, {ACPI_DMT_UINT64, ACPI_APMTN_OFFSET (InstPrimary), "Primary Node Instance", 0}, {ACPI_DMT_UINT32, ACPI_APMTN_OFFSET (InstSecondary), "Secondary Node Instance", 0}, {ACPI_DMT_UINT64, ACPI_APMTN_OFFSET (BaseAddress0), "Page 0 Base Address", 0}, {ACPI_DMT_UINT64, ACPI_APMTN_OFFSET (BaseAddress1), "Page 1 Base Address", 0}, {ACPI_DMT_UINT32, ACPI_APMTN_OFFSET (OvflwIrq), "Overflow Interrupt ID", 0}, {ACPI_DMT_UINT32, ACPI_APMTN_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_APMTN_OFFSET (OvflwIrqFlags), "Overflow Interrupt Flags", 0}, {ACPI_DMT_FLAG0, ACPI_APMTN_FLAG_OFFSET (OvflwIrqFlags, 0), "Interrupt Mode", 0}, {ACPI_DMT_FLAG1, ACPI_APMTN_FLAG_OFFSET (OvflwIrqFlags, 0), "Interrupt Type", 0}, {ACPI_DMT_UINT32, ACPI_APMTN_OFFSET (ProcAffinity), "Processor Affinity", 0}, {ACPI_DMT_UINT32, ACPI_APMTN_OFFSET (ImplId), "Implementation ID", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * IORT - IO Remapping Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoIort[] = { {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (NodeCount), "Node Count", 0}, {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (NodeOffset), "Node Offset", 0}, {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* Optional padding field */ ACPI_DMTABLE_INFO AcpiDmTableInfoIortPad[] = { {ACPI_DMT_RAW_BUFFER, 0, "Optional Padding", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /* Common Subtable header (one per Subtable) */ ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr[] = { {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Type), "Type", 0}, {ACPI_DMT_UINT16, ACPI_IORTH_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Revision), "Revision", 0}, {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (Identifier), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingCount), "Mapping Count", 0}, {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingOffset), "Mapping Offset", 0}, ACPI_DMT_TERMINATOR }; /* Common Subtable header (one per Subtable)- Revision 3 */ ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr3[] = { {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Type), "Type", 0}, {ACPI_DMT_UINT16, ACPI_IORTH_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Revision), "Revision", 0}, {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (Identifier), "Identifier", 0}, {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingCount), "Mapping Count", 0}, {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingOffset), "Mapping Offset", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoIortMap[] = { {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (InputBase), "Input base", DT_OPTIONAL}, {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (IdCount), "ID Count", 0}, {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (OutputBase), "Output Base", 0}, {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (OutputReference), "Output Reference", 0}, {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_IORTM_FLAG_OFFSET (Flags, 0), "Single Mapping", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoIortAcc[] = { {ACPI_DMT_UINT32, ACPI_IORTA_OFFSET (CacheCoherency), "Cache Coherency", 0}, {ACPI_DMT_UINT8, ACPI_IORTA_OFFSET (Hints), "Hints (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Transient", 0}, {ACPI_DMT_FLAG1, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Write Allocate", 0}, {ACPI_DMT_FLAG2, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Read Allocate", 0}, {ACPI_DMT_FLAG3, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Override", 0}, {ACPI_DMT_UINT16, ACPI_IORTA_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_IORTA_OFFSET (MemoryFlags), "Memory Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0), "Coherency", 0}, {ACPI_DMT_FLAG1, ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0), "Device Attribute", 0}, ACPI_DMT_TERMINATOR }; /* IORT subtables */ /* 0x00: ITS Group */ ACPI_DMTABLE_INFO AcpiDmTableInfoIort0[] = { {ACPI_DMT_UINT32, ACPI_IORT0_OFFSET (ItsCount), "ItsCount", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoIort0a[] = { {ACPI_DMT_UINT32, 0, "Identifiers", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /* 0x01: Named Component */ ACPI_DMTABLE_INFO AcpiDmTableInfoIort1[] = { {ACPI_DMT_UINT32, ACPI_IORT1_OFFSET (NodeFlags), "Node Flags", 0}, {ACPI_DMT_IORTMEM, ACPI_IORT1_OFFSET (MemoryProperties), "Memory Properties", 0}, {ACPI_DMT_UINT8, ACPI_IORT1_OFFSET (MemoryAddressLimit), "Memory Size Limit", 0}, {ACPI_DMT_STRING, ACPI_IORT1_OFFSET (DeviceName[0]), "Device Name", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoIort1a[] = { {ACPI_DMT_RAW_BUFFER, 0, "Padding", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /* 0x02: PCI Root Complex */ ACPI_DMTABLE_INFO AcpiDmTableInfoIort2[] = { {ACPI_DMT_IORTMEM, ACPI_IORT2_OFFSET (MemoryProperties), "Memory Properties", 0}, {ACPI_DMT_UINT32, ACPI_IORT2_OFFSET (AtsAttribute), "ATS Attribute", 0}, {ACPI_DMT_UINT32, ACPI_IORT2_OFFSET (PciSegmentNumber), "PCI Segment Number", 0}, {ACPI_DMT_UINT8, ACPI_IORT2_OFFSET (MemoryAddressLimit), "Memory Size Limit", 0}, {ACPI_DMT_UINT16, ACPI_IORT2_OFFSET (PasidCapabilities), "PASID Capabilities", 0}, {ACPI_DMT_UINT8, ACPI_IORT2_OFFSET (Reserved[0]), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 0x03: SMMUv1/2 */ ACPI_DMTABLE_INFO AcpiDmTableInfoIort3[] = { {ACPI_DMT_UINT64, ACPI_IORT3_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT64, ACPI_IORT3_OFFSET (Span), "Span", 0}, {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (Model), "Model", 0}, {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_IORT3_FLAG_OFFSET (Flags, 0), "DVM Supported", 0}, {ACPI_DMT_FLAG1, ACPI_IORT3_FLAG_OFFSET (Flags, 0), "Coherent Walk", 0}, {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (GlobalInterruptOffset), "Global Interrupt Offset", 0}, {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (ContextInterruptCount), "Context Interrupt Count", 0}, {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (ContextInterruptOffset), "Context Interrupt Offset", 0}, {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (PmuInterruptCount), "PMU Interrupt Count", 0}, {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (PmuInterruptOffset), "PMU Interrupt Offset", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoIort3a[] = { {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrpt), "NSgIrpt", 0}, {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrptFlags), "NSgIrpt Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgIrptFlags, 0), "Edge Triggered", 0}, {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrpt), "NSgCfgIrpt", 0}, {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrptFlags), "NSgCfgIrpt Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgCfgIrptFlags, 0), "Edge Triggered", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoIort3b[] = { {ACPI_DMT_UINT64, 0, "Context Interrupt", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoIort3c[] = { {ACPI_DMT_UINT64, 0, "PMU Interrupt", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /* 0x04: SMMUv3 */ ACPI_DMTABLE_INFO AcpiDmTableInfoIort4[] = { {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "COHACC Override", 0}, {ACPI_DMT_FLAG1, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "HTTU Override", 0}, {ACPI_DMT_FLAG3, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "Proximity Domain Valid", 0}, {ACPI_DMT_FLAG4, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "DeviceID Valid", 0}, {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (VatosAddress), "VATOS Address", 0}, {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Model), "Model", 0}, {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (EventGsiv), "Event GSIV", 0}, {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (PriGsiv), "PRI GSIV", 0}, {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (GerrGsiv), "GERR GSIV", 0}, {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (SyncGsiv), "Sync GSIV", 0}, {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Pxm), "Proximity Domain", 0}, {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (IdMappingIndex), "Device ID Mapping Index", 0}, ACPI_DMT_TERMINATOR }; /* 0x05: PMCG */ ACPI_DMTABLE_INFO AcpiDmTableInfoIort5[] = { {ACPI_DMT_UINT64, ACPI_IORT5_OFFSET (Page0BaseAddress), "Page 0 Base Address", 0}, {ACPI_DMT_UINT32, ACPI_IORT5_OFFSET (OverflowGsiv), "Overflow Interrupt GSIV", 0}, {ACPI_DMT_UINT32, ACPI_IORT5_OFFSET (NodeReference), "Node Reference", 0}, {ACPI_DMT_UINT64, ACPI_IORT5_OFFSET (Page1BaseAddress), "Page 1 Base Address", 0}, ACPI_DMT_TERMINATOR }; /* 0x06: RMR */ ACPI_DMTABLE_INFO AcpiDmTableInfoIort6[] = { {ACPI_DMT_UINT32, ACPI_IORT6_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_IORT6_FLAG_OFFSET (Flags, 0), "Remapping Permitted", 0}, {ACPI_DMT_FLAG1, ACPI_IORT6_FLAG_OFFSET (Flags, 0), "Access Privileged", 0}, {ACPI_DMT_FLAGS8_2, ACPI_IORT6_FLAG_OFFSET (Flags, 0), "Access Attributes", 0}, {ACPI_DMT_UINT32, ACPI_IORT6_OFFSET (RmrCount), "Number of RMR Descriptors", 0}, {ACPI_DMT_UINT32, ACPI_IORT6_OFFSET (RmrOffset), "RMR Descriptor Offset", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoIort6a[] = { {ACPI_DMT_UINT64, ACPI_IORT6A_OFFSET (BaseAddress), "Base Address of RMR", DT_OPTIONAL}, {ACPI_DMT_UINT64, ACPI_IORT6A_OFFSET (Length), "Length of RMR", 0}, {ACPI_DMT_UINT32, ACPI_IORT6A_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * IVRS - I/O Virtualization Reporting Structure * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs[] = { {ACPI_DMT_UINT32, ACPI_IVRS_OFFSET (Info), "Virtualization Info", 0}, {ACPI_DMT_UINT64, ACPI_IVRS_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* IVRS subtables */ /* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */ ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHware1[] = { {ACPI_DMT_IVRS, ACPI_IVRSH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT8, ACPI_IVRSH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_IVRS_FLAG_OFFSET (Flags,0), "HtTunEn", 0}, {ACPI_DMT_FLAG1, ACPI_IVRS_FLAG_OFFSET (Flags,0), "PassPW", 0}, {ACPI_DMT_FLAG2, ACPI_IVRS_FLAG_OFFSET (Flags,0), "ResPassPW", 0}, {ACPI_DMT_FLAG3, ACPI_IVRS_FLAG_OFFSET (Flags,0), "Isoc Control", 0}, {ACPI_DMT_FLAG4, ACPI_IVRS_FLAG_OFFSET (Flags,0), "Iotlb Support", 0}, {ACPI_DMT_FLAG5, ACPI_IVRS_FLAG_OFFSET (Flags,0), "Coherent", 0}, {ACPI_DMT_FLAG6, ACPI_IVRS_FLAG_OFFSET (Flags,0), "Prefetch Support", 0}, {ACPI_DMT_FLAG7, ACPI_IVRS_FLAG_OFFSET (Flags,0), "PPR Support", 0}, {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (DeviceId), "DeviceId", 0}, {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (CapabilityOffset), "Capability Offset", 0}, {ACPI_DMT_UINT64, ACPI_IVRS0_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (PciSegmentGroup), "PCI Segment Group", 0}, {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (Info), "Virtualization Info", 0}, {ACPI_DMT_UINT32, ACPI_IVRS0_OFFSET (FeatureReporting), "Feature Reporting", 0}, ACPI_DMT_TERMINATOR }; /* 0x11, 0x40: I/O Virtualization Hardware Definition (IVHD) Block */ ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHware23[] = { {ACPI_DMT_IVRS, ACPI_IVRSH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT8, ACPI_IVRSH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_IVRS_FLAG_OFFSET (Flags,0), "HtTunEn", 0}, {ACPI_DMT_FLAG1, ACPI_IVRS_FLAG_OFFSET (Flags,0), "PassPW", 0}, {ACPI_DMT_FLAG2, ACPI_IVRS_FLAG_OFFSET (Flags,0), "ResPassPW", 0}, {ACPI_DMT_FLAG3, ACPI_IVRS_FLAG_OFFSET (Flags,0), "Isoc Control", 0}, {ACPI_DMT_FLAG4, ACPI_IVRS_FLAG_OFFSET (Flags,0), "Iotlb Support", 0}, {ACPI_DMT_FLAG5, ACPI_IVRS_FLAG_OFFSET (Flags,0), "Coherent", 0}, {ACPI_DMT_FLAG6, ACPI_IVRS_FLAG_OFFSET (Flags,0), "Prefetch Support", 0}, {ACPI_DMT_FLAG7, ACPI_IVRS_FLAG_OFFSET (Flags,0), "PPR Support", 0}, {ACPI_DMT_UINT16, ACPI_IVRS01_OFFSET (Header.Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT16, ACPI_IVRS01_OFFSET (Header.DeviceId), "DeviceId", 0}, {ACPI_DMT_UINT16, ACPI_IVRS01_OFFSET (CapabilityOffset), "Capability Offset", 0}, {ACPI_DMT_UINT64, ACPI_IVRS01_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT16, ACPI_IVRS01_OFFSET (PciSegmentGroup), "PCI Segment Group", 0}, {ACPI_DMT_UINT16, ACPI_IVRS01_OFFSET (Info), "Virtualization Info", 0}, {ACPI_DMT_UINT32, ACPI_IVRS01_OFFSET (Attributes), "Attributes", 0}, {ACPI_DMT_UINT64, ACPI_IVRS01_OFFSET (EfrRegisterImage), "EFR Image", 0}, {ACPI_DMT_UINT64, ACPI_IVRS01_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition (IVMD) Device Entry Block */ ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsMemory[] = { {ACPI_DMT_IVRS, ACPI_IVRSH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT8, ACPI_IVRSH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_IVRS_FLAG_OFFSET (Flags,0), "Unity", 0}, {ACPI_DMT_FLAG1, ACPI_IVRS_FLAG_OFFSET (Flags,0), "Readable", 0}, {ACPI_DMT_FLAG2, ACPI_IVRS_FLAG_OFFSET (Flags,0), "Writeable", 0}, {ACPI_DMT_FLAG3, ACPI_IVRS_FLAG_OFFSET (Flags,0), "Exclusion Range", 0}, {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (DeviceId), "DeviceId", 0}, {ACPI_DMT_UINT16, ACPI_IVRS1_OFFSET (AuxData), "Auxiliary Data", 0}, {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (StartAddress), "Start Address", 0}, {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (MemoryLength), "Memory Length", 0}, ACPI_DMT_TERMINATOR }; /* Device entry header for IVHD block */ #define ACPI_DMT_IVRS_DE_HEADER \ {ACPI_DMT_IVRS_DE, ACPI_IVRSD_OFFSET (Type), "Subtable Type", 0}, \ {ACPI_DMT_UINT16, ACPI_IVRSD_OFFSET (Id), "Device ID", 0}, \ {ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (DataSetting), "Data Setting (decoded below)", 0}, \ {ACPI_DMT_FLAG0, ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0), "INITPass", 0}, \ {ACPI_DMT_FLAG1, ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0), "EIntPass", 0}, \ {ACPI_DMT_FLAG2, ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0), "NMIPass", 0}, \ {ACPI_DMT_FLAG3, ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0), "Reserved", 0}, \ {ACPI_DMT_FLAGS4, ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0), "System MGMT", 0}, \ {ACPI_DMT_FLAG6, ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0), "LINT0 Pass", 0}, \ {ACPI_DMT_FLAG7, ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0), "LINT1 Pass", 0} /* 4-byte device entry (Types 1,2,3,4) */ ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs4[] = { ACPI_DMT_IVRS_DE_HEADER, ACPI_DMT_TERMINATOR }; /* 8-byte device entry (Type Alias Select, Alias Start of Range) */ ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8a[] = { ACPI_DMT_IVRS_DE_HEADER, {ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved1), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_IVRS8A_OFFSET (UsedId), "Source Used Device ID", 0}, {ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved2), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 8-byte device entry (Type Extended Select, Extended Start of Range) */ ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8b[] = { ACPI_DMT_IVRS_DE_HEADER, {ACPI_DMT_UINT32, ACPI_IVRS8B_OFFSET (ExtendedData), "Extended Data", 0}, ACPI_DMT_TERMINATOR }; /* 8-byte device entry (Type Special Device) */ ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8c[] = { ACPI_DMT_IVRS_DE_HEADER, {ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Handle), "Handle", 0}, {ACPI_DMT_UINT16, ACPI_IVRS8C_OFFSET (UsedId), "Source Used Device ID", 0}, {ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Variety), "Variety", 0}, ACPI_DMT_TERMINATOR }; /* Variable-length Device Entry Type 0xF0 */ ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHid[] = { ACPI_DMT_IVRS_DE_HEADER, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsUidString[] = { {ACPI_DMT_UINT8, 0, "UID Format", DT_DESCRIBES_OPTIONAL}, {ACPI_DMT_UINT8, 1, "UID Length", DT_DESCRIBES_OPTIONAL}, {ACPI_DMT_IVRS_UNTERMINATED_STRING, 2, "UID", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsUidInteger[] = { {ACPI_DMT_UINT8, 0, "UID Format", DT_DESCRIBES_OPTIONAL}, {ACPI_DMT_UINT8, 1, "UID Length", DT_DESCRIBES_OPTIONAL}, {ACPI_DMT_UINT64, 2, "UID", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHidString[] = { {ACPI_DMT_NAME8, 0, "ACPI HID", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHidInteger[] = { {ACPI_DMT_UINT64, 0, "ACPI HID", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsCidString[] = { {ACPI_DMT_NAME8, 0, "ACPI CID", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsCidInteger[] = { {ACPI_DMT_UINT64, 0, "ACPI CID", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * LPIT - Low Power Idle Table * ******************************************************************************/ /* Main table consists only of the standard ACPI table header */ /* Common Subtable header (one per Subtable) */ ACPI_DMTABLE_INFO AcpiDmTableInfoLpitHdr[] = { {ACPI_DMT_LPIT, ACPI_LPITH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT32, ACPI_LPITH_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT16, ACPI_LPITH_OFFSET (UniqueId), "Unique ID", 0}, {ACPI_DMT_UINT16, ACPI_LPITH_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_LPITH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_LPITH_FLAG_OFFSET (Flags, 0), "State Disabled", 0}, {ACPI_DMT_FLAG1, ACPI_LPITH_FLAG_OFFSET (Flags, 0), "No Counter", 0}, ACPI_DMT_TERMINATOR }; /* LPIT Subtables */ /* 0: Native C-state */ ACPI_DMTABLE_INFO AcpiDmTableInfoLpit0[] = { {ACPI_DMT_GAS, ACPI_LPIT0_OFFSET (EntryTrigger), "Entry Trigger", 0}, {ACPI_DMT_UINT32, ACPI_LPIT0_OFFSET (Residency), "Residency", 0}, {ACPI_DMT_UINT32, ACPI_LPIT0_OFFSET (Latency), "Latency", 0}, {ACPI_DMT_GAS, ACPI_LPIT0_OFFSET (ResidencyCounter), "Residency Counter", 0}, {ACPI_DMT_UINT64, ACPI_LPIT0_OFFSET (CounterFrequency), "Counter Frequency", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * MADT - Multiple APIC Description Table and subtables * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt[] = { {ACPI_DMT_UINT32, ACPI_MADT_OFFSET (Address), "Local Apic Address", 0}, {ACPI_DMT_UINT32, ACPI_MADT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_MADT_FLAG_OFFSET (Flags,0), "PC-AT Compatibility", 0}, ACPI_DMT_TERMINATOR }; /* Common Subtable header (one per Subtable) */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadtHdr[] = { {ACPI_DMT_MADT, ACPI_MADTH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT8, ACPI_MADTH_OFFSET (Length), "Length", DT_LENGTH}, ACPI_DMT_TERMINATOR }; /* MADT Subtables */ /* 0: processor APIC */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt0[] = { {ACPI_DMT_UINT8, ACPI_MADT0_OFFSET (ProcessorId), "Processor ID", 0}, {ACPI_DMT_UINT8, ACPI_MADT0_OFFSET (Id), "Local Apic ID", 0}, {ACPI_DMT_UINT32, ACPI_MADT0_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_MADT0_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, {ACPI_DMT_FLAG1, ACPI_MADT0_FLAG_OFFSET (LapicFlags,0), "Runtime Online Capable", 0}, ACPI_DMT_TERMINATOR }; /* 1: IO APIC */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt1[] = { {ACPI_DMT_UINT8, ACPI_MADT1_OFFSET (Id), "I/O Apic ID", 0}, {ACPI_DMT_UINT8, ACPI_MADT1_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MADT1_OFFSET (Address), "Address", 0}, {ACPI_DMT_UINT32, ACPI_MADT1_OFFSET (GlobalIrqBase), "Interrupt", 0}, ACPI_DMT_TERMINATOR }; /* 2: Interrupt Override */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt2[] = { {ACPI_DMT_UINT8, ACPI_MADT2_OFFSET (Bus), "Bus", 0}, {ACPI_DMT_UINT8, ACPI_MADT2_OFFSET (SourceIrq), "Source", 0}, {ACPI_DMT_UINT32, ACPI_MADT2_OFFSET (GlobalIrq), "Interrupt", 0}, {ACPI_DMT_UINT16, ACPI_MADT2_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAGS0, ACPI_MADT2_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, {ACPI_DMT_FLAGS2, ACPI_MADT2_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, ACPI_DMT_TERMINATOR }; /* 3: NMI Sources */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt3[] = { {ACPI_DMT_UINT16, ACPI_MADT3_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAGS0, ACPI_MADT3_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, {ACPI_DMT_FLAGS2, ACPI_MADT3_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, {ACPI_DMT_UINT32, ACPI_MADT3_OFFSET (GlobalIrq), "Interrupt", 0}, ACPI_DMT_TERMINATOR }; /* 4: Local APIC NMI */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt4[] = { {ACPI_DMT_UINT8, ACPI_MADT4_OFFSET (ProcessorId), "Processor ID", 0}, {ACPI_DMT_UINT16, ACPI_MADT4_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAGS0, ACPI_MADT4_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, {ACPI_DMT_FLAGS2, ACPI_MADT4_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, {ACPI_DMT_UINT8, ACPI_MADT4_OFFSET (Lint), "Interrupt Input LINT", 0}, ACPI_DMT_TERMINATOR }; /* 5: Address Override */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt5[] = { {ACPI_DMT_UINT16, ACPI_MADT5_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_MADT5_OFFSET (Address), "APIC Address", 0}, ACPI_DMT_TERMINATOR }; /* 6: I/O Sapic */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt6[] = { {ACPI_DMT_UINT8, ACPI_MADT6_OFFSET (Id), "I/O Sapic ID", 0}, {ACPI_DMT_UINT8, ACPI_MADT6_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MADT6_OFFSET (GlobalIrqBase), "Interrupt Base", 0}, {ACPI_DMT_UINT64, ACPI_MADT6_OFFSET (Address), "Address", 0}, ACPI_DMT_TERMINATOR }; /* 7: Local Sapic */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt7[] = { {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (ProcessorId), "Processor ID", 0}, {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (Id), "Local Sapic ID", 0}, {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (Eid), "Local Sapic EID", 0}, {ACPI_DMT_UINT24, ACPI_MADT7_OFFSET (Reserved[0]), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MADT7_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_MADT7_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, {ACPI_DMT_UINT32, ACPI_MADT7_OFFSET (Uid), "Processor UID", 0}, {ACPI_DMT_STRING, ACPI_MADT7_OFFSET (UidString[0]), "Processor UID String", 0}, ACPI_DMT_TERMINATOR }; /* 8: Platform Interrupt Source */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt8[] = { {ACPI_DMT_UINT16, ACPI_MADT8_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAGS0, ACPI_MADT8_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, {ACPI_DMT_FLAGS2, ACPI_MADT8_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Type), "InterruptType", 0}, {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Id), "Processor ID", 0}, {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Eid), "Processor EID", 0}, {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (IoSapicVector), "I/O Sapic Vector", 0}, {ACPI_DMT_UINT32, ACPI_MADT8_OFFSET (GlobalIrq), "Interrupt", 0}, {ACPI_DMT_UINT32, ACPI_MADT8_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_MADT8_OFFSET (Flags), "CPEI Override", 0}, ACPI_DMT_TERMINATOR }; /* 9: Processor Local X2_APIC (ACPI 4.0) */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt9[] = { {ACPI_DMT_UINT16, ACPI_MADT9_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (LocalApicId), "Processor x2Apic ID", 0}, {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_MADT9_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (Uid), "Processor UID", 0}, ACPI_DMT_TERMINATOR }; /* 10: Local X2_APIC NMI (ACPI 4.0) */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[] = { {ACPI_DMT_UINT16, ACPI_MADT10_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAGS0, ACPI_MADT10_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, {ACPI_DMT_FLAGS2, ACPI_MADT10_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, {ACPI_DMT_UINT32, ACPI_MADT10_OFFSET (Uid), "Processor UID", 0}, {ACPI_DMT_UINT8, ACPI_MADT10_OFFSET (Lint), "Interrupt Input LINT", 0}, {ACPI_DMT_UINT24, ACPI_MADT10_OFFSET (Reserved[0]), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 11: Generic Interrupt Controller (ACPI 5.0) */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11[] = { {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (CpuInterfaceNumber), "CPU Interface Number", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Uid), "Processor UID", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Processor Enabled", 0}, {ACPI_DMT_FLAG1, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Performance Interrupt Trigger Mode", 0}, {ACPI_DMT_FLAG2, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Virtual GIC Interrupt Trigger Mode", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (ParkingVersion), "Parking Protocol Version", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (PerformanceInterrupt), "Performance Interrupt", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ParkedAddress), "Parked Address", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicvBaseAddress), "Virtual GIC Base Address", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GichBaseAddress), "Hypervisor GIC Base Address", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (VgicInterrupt), "Virtual GIC Interrupt", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicrBaseAddress), "Redistributor Base Address", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ArmMpidr), "ARM MPIDR", 0}, {ACPI_DMT_UINT8, ACPI_MADT11_OFFSET (EfficiencyClass), "Efficiency Class", 0}, {ACPI_DMT_UINT8, ACPI_MADT11_OFFSET (Reserved2[0]), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (SpeInterrupt), "SPE Overflow Interrupt", 0}, {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (TrbeInterrupt), "TRBE Interrupt", 0}, ACPI_DMT_TERMINATOR }; /* 11: Generic Interrupt Controller (ACPI 5.0) - MADT revision 6 */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11a[] = { {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (CpuInterfaceNumber), "CPU Interface Number", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Uid), "Processor UID", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Processor Enabled", 0}, {ACPI_DMT_FLAG1, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Performance Interrupt Trigger Mode", 0}, {ACPI_DMT_FLAG2, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Virtual GIC Interrupt Trigger Mode", 0}, {ACPI_DMT_FLAG3, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Online Capable", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (ParkingVersion), "Parking Protocol Version", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (PerformanceInterrupt), "Performance Interrupt", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ParkedAddress), "Parked Address", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicvBaseAddress), "Virtual GIC Base Address", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GichBaseAddress), "Hypervisor GIC Base Address", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (VgicInterrupt), "Virtual GIC Interrupt", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicrBaseAddress), "Redistributor Base Address", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ArmMpidr), "ARM MPIDR", 0}, {ACPI_DMT_UINT8, ACPI_MADT11_OFFSET (EfficiencyClass), "Efficiency Class", 0}, {ACPI_DMT_UINT8, ACPI_MADT11_OFFSET (Reserved2[0]), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (SpeInterrupt), "SPE Overflow Interrupt", 0}, {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (TrbeInterrupt), "TRBE Interrupt", 0}, ACPI_DMT_TERMINATOR }; /* 11: Generic Interrupt Controller (ACPI 5.0) - MADT revision 7 */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11b[] = { {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (CpuInterfaceNumber), "CPU Interface Number", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Uid), "Processor UID", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Processor Enabled", 0}, {ACPI_DMT_FLAG1, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Performance Interrupt Trigger Mode", 0}, {ACPI_DMT_FLAG2, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Virtual GIC Interrupt Trigger Mode", 0}, {ACPI_DMT_FLAG3, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Online Capable", 0}, {ACPI_DMT_FLAG4, ACPI_MADT11_FLAG_OFFSET (Flags,0), "GICR non-coherent", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (ParkingVersion), "Parking Protocol Version", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (PerformanceInterrupt), "Performance Interrupt", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ParkedAddress), "Parked Address", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicvBaseAddress), "Virtual GIC Base Address", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GichBaseAddress), "Hypervisor GIC Base Address", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (VgicInterrupt), "Virtual GIC Interrupt", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicrBaseAddress), "Redistributor Base Address", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ArmMpidr), "ARM MPIDR", 0}, {ACPI_DMT_UINT8, ACPI_MADT11_OFFSET (EfficiencyClass), "Efficiency Class", 0}, {ACPI_DMT_UINT8, ACPI_MADT11_OFFSET (Reserved2[0]), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (SpeInterrupt), "SPE Overflow Interrupt", 0}, {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (TrbeInterrupt), "TRBE Interrupt", 0}, ACPI_DMT_TERMINATOR }; /* 12: Generic Interrupt Distributor (ACPI 5.0) */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt12[] = { {ACPI_DMT_UINT16, ACPI_MADT12_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MADT12_OFFSET (GicId), "Local GIC Hardware ID", 0}, {ACPI_DMT_UINT64, ACPI_MADT12_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT32, ACPI_MADT12_OFFSET (GlobalIrqBase), "Interrupt Base", 0}, {ACPI_DMT_UINT8, ACPI_MADT12_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT24, ACPI_MADT12_OFFSET (Reserved2[0]), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 13: Generic MSI Frame (ACPI 5.1) */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt13[] = { {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (MsiFrameId), "MSI Frame ID", 0}, {ACPI_DMT_UINT64, ACPI_MADT13_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_MADT13_FLAG_OFFSET (Flags,0), "Select SPI", 0}, {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiCount), "SPI Count", 0}, {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiBase), "SPI Base", 0}, ACPI_DMT_TERMINATOR }; /* 14: Generic Redistributor (ACPI 5.1) */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[] = { {ACPI_DMT_UINT16, ACPI_MADT14_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_MADT14_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT32, ACPI_MADT14_OFFSET (Length), "Length", 0}, ACPI_DMT_TERMINATOR }; /* 14: Generic Redistributor (ACPI 5.1) */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14a[] = { {ACPI_DMT_UINT8, ACPI_MADT14_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_MADT14_FLAG_OFFSET (Flags,0), "GICR non-coherent", 0}, {ACPI_DMT_UINT8, ACPI_MADT14_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_MADT14_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT32, ACPI_MADT14_OFFSET (Length), "Length", 0}, ACPI_DMT_TERMINATOR }; /* 15: Generic Translator (ACPI 6.0) */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt15[] = { {ACPI_DMT_UINT16, ACPI_MADT15_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (TranslationId), "Translation ID", 0}, {ACPI_DMT_UINT64, ACPI_MADT15_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (Reserved2), "Reserved", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoMadt15a[] = { {ACPI_DMT_UINT8, ACPI_MADT15_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_MADT15_FLAG_OFFSET (Flags,0), "GIC ITS non-coherent", 0}, {ACPI_DMT_UINT8, ACPI_MADT15_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (TranslationId), "Translation ID", 0}, {ACPI_DMT_UINT64, ACPI_MADT15_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (Reserved2), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 16: Multiprocessor wakeup structure (ACPI 6.4) */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt16[] = { {ACPI_DMT_UINT16, ACPI_MADT16_OFFSET (MailboxVersion), "Mailbox Version", 0}, {ACPI_DMT_UINT32, ACPI_MADT16_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_MADT16_OFFSET (BaseAddress), "Mailbox Address", 0}, ACPI_DMT_TERMINATOR }; /* 17: core interrupt controller */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt17[] = { {ACPI_DMT_UINT8, ACPI_MADT17_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT32, ACPI_MADT17_OFFSET (ProcessorId), "ProcessorId", 0}, {ACPI_DMT_UINT32, ACPI_MADT17_OFFSET (CoreId), "CoreId", 0}, {ACPI_DMT_UINT32, ACPI_MADT17_OFFSET (Flags), "Flags", 0}, ACPI_DMT_TERMINATOR }; /* 18: Legacy I/O interrupt controller */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt18[] = { {ACPI_DMT_UINT8, ACPI_MADT18_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT64, ACPI_MADT18_OFFSET (Address), "Address", 0}, {ACPI_DMT_UINT16, ACPI_MADT18_OFFSET (Size), "Size", 0}, {ACPI_DMT_UINT16, ACPI_MADT18_OFFSET (Cascade), "Cascade", 0}, {ACPI_DMT_UINT64, ACPI_MADT18_OFFSET (CascadeMap), "CascadeMap", 0}, ACPI_DMT_TERMINATOR }; /* 19: HT interrupt controller */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt19[] = { {ACPI_DMT_UINT8, ACPI_MADT19_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT64, ACPI_MADT19_OFFSET (Address), "Address", 0}, {ACPI_DMT_UINT16, ACPI_MADT19_OFFSET (Size), "Size", 0}, {ACPI_DMT_UINT64, ACPI_MADT19_OFFSET (Cascade), "Cascade", 0}, ACPI_DMT_TERMINATOR }; /* 20: Extend I/O interrupt controller */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt20[] = { {ACPI_DMT_UINT8, ACPI_MADT20_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT8, ACPI_MADT20_OFFSET (Cascade), "Cascade", 0}, {ACPI_DMT_UINT8, ACPI_MADT20_OFFSET (Node), "Node", 0}, {ACPI_DMT_UINT64, ACPI_MADT20_OFFSET (NodeMap), "NodeMap", 0}, ACPI_DMT_TERMINATOR }; /* 21: MSI controller */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt21[] = { {ACPI_DMT_UINT8, ACPI_MADT21_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT64, ACPI_MADT21_OFFSET (MsgAddress), "MsgAddress", 0}, {ACPI_DMT_UINT32, ACPI_MADT21_OFFSET (Start), "Start", 0}, {ACPI_DMT_UINT32, ACPI_MADT21_OFFSET (Count), "Count", 0}, ACPI_DMT_TERMINATOR }; /* 22: BIO interrupt controller */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt22[] = { {ACPI_DMT_UINT8, ACPI_MADT22_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT64, ACPI_MADT22_OFFSET (Address), "Address", 0}, {ACPI_DMT_UINT16, ACPI_MADT22_OFFSET (Size), "Size", 0}, {ACPI_DMT_UINT16, ACPI_MADT22_OFFSET (Id), "Id", 0}, {ACPI_DMT_UINT16, ACPI_MADT22_OFFSET (GsiBase), "GsiBase", 0}, ACPI_DMT_TERMINATOR }; /* 23: LPC interrupt controller */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt23[] = { {ACPI_DMT_UINT8, ACPI_MADT23_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT64, ACPI_MADT23_OFFSET (Address), "Address", 0}, {ACPI_DMT_UINT16, ACPI_MADT23_OFFSET (Size), "Size", 0}, {ACPI_DMT_UINT8, ACPI_MADT23_OFFSET (Cascade), "Cascade", 0}, ACPI_DMT_TERMINATOR }; /* 24: RINTC interrupt controller */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt24[] = { {ACPI_DMT_UINT8, ACPI_MADT24_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT8, ACPI_MADT24_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MADT24_OFFSET (Flags), "Flags", 0}, {ACPI_DMT_UINT64, ACPI_MADT24_OFFSET (HartId), "HartId", 0}, {ACPI_DMT_UINT32, ACPI_MADT24_OFFSET (Uid), "Uid", 0}, {ACPI_DMT_UINT32, ACPI_MADT24_OFFSET (ExtIntcId), "ExtIntcId", 0}, {ACPI_DMT_UINT64, ACPI_MADT24_OFFSET (ImsicAddr), "ImsicAddr", 0}, {ACPI_DMT_UINT32, ACPI_MADT24_OFFSET (ImsicSize), "ImsicSize", 0}, ACPI_DMT_TERMINATOR }; /* 25: RISC-V IMSIC interrupt controller */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt25[] = { {ACPI_DMT_UINT8, ACPI_MADT25_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT8, ACPI_MADT25_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MADT25_OFFSET (Flags), "Flags", 0}, {ACPI_DMT_UINT16, ACPI_MADT25_OFFSET (NumIds), "NumIds", 0}, {ACPI_DMT_UINT16, ACPI_MADT25_OFFSET (NumGuestIds), "NumGuestIds", 0}, {ACPI_DMT_UINT8, ACPI_MADT25_OFFSET (GuestIndexBits), "GuestIndexBits", 0}, {ACPI_DMT_UINT8, ACPI_MADT25_OFFSET (HartIndexBits), "HartIndexBits", 0}, {ACPI_DMT_UINT8, ACPI_MADT25_OFFSET (GroupIndexBits), "GroupIndexBits", 0}, {ACPI_DMT_UINT8, ACPI_MADT25_OFFSET (GroupIndexShift), "GroupIndexShift", 0}, ACPI_DMT_TERMINATOR }; /* 26: RISC-V APLIC interrupt controller */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt26[] = { {ACPI_DMT_UINT8, ACPI_MADT26_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT8, ACPI_MADT26_OFFSET (Id), "Id", 0}, {ACPI_DMT_UINT32, ACPI_MADT26_OFFSET (Flags), "Flags", 0}, {ACPI_DMT_UINT64, ACPI_MADT26_OFFSET (HwId), "HwId", 0}, {ACPI_DMT_UINT16, ACPI_MADT26_OFFSET (NumIdcs), "NumIdcs", 0}, {ACPI_DMT_UINT16, ACPI_MADT26_OFFSET (NumSources), "NumSources", 0}, {ACPI_DMT_UINT32, ACPI_MADT26_OFFSET (GsiBase), "GsiBase", 0}, {ACPI_DMT_UINT64, ACPI_MADT26_OFFSET (BaseAddr), "BaseAddr", 0}, {ACPI_DMT_UINT32, ACPI_MADT26_OFFSET (Size), "Size", 0}, ACPI_DMT_TERMINATOR }; /* 27: RISC-V PLIC interrupt controller */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt27[] = { {ACPI_DMT_UINT8, ACPI_MADT27_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT8, ACPI_MADT27_OFFSET (Id), "Id", 0}, {ACPI_DMT_UINT64, ACPI_MADT27_OFFSET (HwId), "HwId", 0}, {ACPI_DMT_UINT16, ACPI_MADT27_OFFSET (NumIrqs), "NumIrqs", 0}, {ACPI_DMT_UINT16, ACPI_MADT27_OFFSET (MaxPrio), "MaxPrio", 0}, {ACPI_DMT_UINT32, ACPI_MADT27_OFFSET (Flags), "Flags", 0}, {ACPI_DMT_UINT32, ACPI_MADT27_OFFSET (Size), "Size", 0}, {ACPI_DMT_UINT64, ACPI_MADT27_OFFSET (BaseAddr), "BaseAddr", 0}, {ACPI_DMT_UINT32, ACPI_MADT27_OFFSET (GsiBase), "GsiBase", 0}, ACPI_DMT_TERMINATOR }; /* 128: OEM data structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt128[] = { {ACPI_DMT_RAW_BUFFER, 0, "OEM Data", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * MCFG - PCI Memory Mapped Configuration table and Subtable * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg[] = { {ACPI_DMT_UINT64, ACPI_MCFG_OFFSET (Reserved[0]), "Reserved", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg0[] = { {ACPI_DMT_UINT64, ACPI_MCFG0_OFFSET (Address), "Base Address", 0}, {ACPI_DMT_UINT16, ACPI_MCFG0_OFFSET (PciSegment), "Segment Group Number", 0}, {ACPI_DMT_UINT8, ACPI_MCFG0_OFFSET (StartBusNumber), "Start Bus Number", 0}, {ACPI_DMT_UINT8, ACPI_MCFG0_OFFSET (EndBusNumber), "End Bus Number", 0}, {ACPI_DMT_UINT32, ACPI_MCFG0_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * MCHI - Management Controller Host Interface table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoMchi[] = { {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (InterfaceType), "Interface Type", 0}, {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (Protocol), "Protocol", 0}, {ACPI_DMT_UINT64, ACPI_MCHI_OFFSET (ProtocolData), "Protocol Data", 0}, {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (InterruptType), "Interrupt Type", 0}, {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (Gpe), "Gpe", 0}, {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciDeviceFlag), "Pci Device Flag", 0}, {ACPI_DMT_UINT32, ACPI_MCHI_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, {ACPI_DMT_GAS, ACPI_MCHI_OFFSET (ControlRegister), "Control Register", 0}, {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciSegment), "Pci Segment", 0}, {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciBus), "Pci Bus", 0}, {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciDevice), "Pci Device", 0}, {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciFunction), "Pci Function", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * MPAM - Memory System Resource Partitioning and Monitoring Tables * Arm's DEN0065 MPAM ACPI 2.0. December 2022. ******************************************************************************/ /* MPAM subtables */ /* 0: MPAM Resource Node Structure - A root MSC table. * Arm's DEN0065 MPAM ACPI 2.0. Table 4: MPAM MSC node body. */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpam0[] = { {ACPI_DMT_UINT16, ACPI_MPAM0_OFFSET (Length), "Length", 0}, {ACPI_DMT_UINT8, ACPI_MPAM0_OFFSET (InterfaceType), "Interface type", 0}, {ACPI_DMT_UINT8, ACPI_MPAM0_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MPAM0_OFFSET (Identifier), "Identifier", 0}, {ACPI_DMT_UINT64, ACPI_MPAM0_OFFSET (BaseAddress), "Base address", 0}, {ACPI_DMT_UINT32, ACPI_MPAM0_OFFSET (MMIOSize), "MMIO size", 0}, {ACPI_DMT_UINT32, ACPI_MPAM0_OFFSET (OverflowInterrupt), "Overflow interrupt", 0}, {ACPI_DMT_UINT32, ACPI_MPAM0_OFFSET (OverflowInterruptFlags), "Overflow interrupt flags", 0}, {ACPI_DMT_UINT32, ACPI_MPAM0_OFFSET (Reserved1), "Reserved1", 0}, {ACPI_DMT_UINT32, ACPI_MPAM0_OFFSET (OverflowInterruptAffinity), "Overflow interrupt affinity", 0}, {ACPI_DMT_UINT32, ACPI_MPAM0_OFFSET (ErrorInterrupt), "Error interrupt", 0}, {ACPI_DMT_UINT32, ACPI_MPAM0_OFFSET (ErrorInterruptFlags), "Error interrupt flags", 0}, {ACPI_DMT_UINT32, ACPI_MPAM0_OFFSET (Reserved2), "Reserved2", 0}, {ACPI_DMT_UINT32, ACPI_MPAM0_OFFSET (ErrorInterruptAffinity), "Error interrupt affinity", 0}, {ACPI_DMT_UINT32, ACPI_MPAM0_OFFSET (MaxNrdyUsec), "MAX_NRDY_USEC", 0}, {ACPI_DMT_NAME8, ACPI_MPAM0_OFFSET (HardwareIdLinkedDevice), "Hardware ID of linked device", 0}, {ACPI_DMT_UINT32, ACPI_MPAM0_OFFSET (InstanceIdLinkedDevice), "Instance ID of linked device", 0}, {ACPI_DMT_UINT32, ACPI_MPAM0_OFFSET (NumResouceNodes), "Number of resource nodes", 0}, ACPI_DMT_TERMINATOR }; /* 1: MPAM Resource (RIS) Node Structure - A subtable of MSC Nodes. * Arm's DEN0065 MPAM ACPI 2.0. Table 9: Resource node. */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1[] = { {ACPI_DMT_UINT32, ACPI_MPAM1_OFFSET (Identifier), "Identifier", 0}, {ACPI_DMT_UINT8, ACPI_MPAM1_OFFSET (RISIndex), "RIS Index", 0}, {ACPI_DMT_UINT16, ACPI_MPAM1_OFFSET (Reserved1), "Reserved1", 0}, {ACPI_DMT_MPAM_LOCATOR, ACPI_MPAM1_OFFSET (LocatorType), "Locator type", 0}, ACPI_DMT_TERMINATOR }; /* An RIS field part of the RIS subtable */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1Deps[] = { {ACPI_DMT_UINT32, 0, "Number of functional dependencies", 0}, ACPI_DMT_TERMINATOR }; /* 1A: MPAM Processor cache locator descriptor. A subtable of RIS. * Arm's DEN0065 MPAM ACPI 2.0. Table 13. */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1A[] = { {ACPI_DMT_UINT64, ACPI_MPAM1A_OFFSET (CacheReference), "Cache reference", 0}, {ACPI_DMT_UINT32, ACPI_MPAM1A_OFFSET (Reserved), "Reserved", 0}, }; /* 1B: MPAM Memory locator descriptor. A subtable of RIS. * Arm's DEN0065 MPAM ACPI 2.0. Table 14. */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1B[] = { {ACPI_DMT_UINT64, ACPI_MPAM1B_OFFSET (ProximityDomain), "Proximity domain", 0}, {ACPI_DMT_UINT32, ACPI_MPAM1B_OFFSET (Reserved), "Reserved", 0}, }; /* 1C: MPAM SMMU locator descriptor. A subtable of RIS. * Arm's DEN0065 MPAM ACPI 2.0. Table 15. */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1C[] = { {ACPI_DMT_UINT64, ACPI_MPAM1C_OFFSET (SmmuInterface), "SMMU Interface", 0}, {ACPI_DMT_UINT32, ACPI_MPAM1C_OFFSET (Reserved), "Reserved", 0}, }; /* 1D: MPAM Memory-side cache locator descriptor. A subtable of RIS. * Arm's DEN0065 MPAM ACPI 2.0. Table 16. */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1D[] = { {ACPI_DMT_UINT56, ACPI_MPAM1D_OFFSET (Level), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_MPAM1D_OFFSET (Level), "Level", 0}, {ACPI_DMT_UINT32, ACPI_MPAM1D_OFFSET (Reference), "Reference", 0}, }; /* 1E: MPAM ACPI device locator descriptor. A subtable of RIS. * Arm's DEN0065 MPAM ACPI 2.0. Table 17. */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1E[] = { {ACPI_DMT_UINT64, ACPI_MPAM1E_OFFSET (AcpiHwId), "ACPI Hardware ID", 0}, {ACPI_DMT_UINT32, ACPI_MPAM1E_OFFSET (AcpiUniqueId), "ACPI Unique ID", 0}, }; /* 1F: MPAM Interconnect locator descriptor. A subtable of RIS. * Arm's DEN0065 MPAM ACPI 2.0. Table 18. */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1F[] = { {ACPI_DMT_UINT64, ACPI_MPAM1F_OFFSET (InterConnectDescTblOff), "Interconnect descriptor table offset", 0}, {ACPI_DMT_UINT32, ACPI_MPAM1F_OFFSET (Reserved), "Reserved", 0}, }; /* 1G: MPAM Locator structure. * Arm's DEN0065 MPAM ACPI 2.0. Table 12. */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1G[] = { {ACPI_DMT_UINT64, ACPI_MPAM1G_OFFSET (Descriptor1), "Descriptor1", 0}, {ACPI_DMT_UINT32, ACPI_MPAM1G_OFFSET (Descriptor2), "Descriptor2", 0}, }; /* 2: MPAM Functional dependency descriptor. * Arm's DEN0065 MPAM ACPI 2.0. Table 10. */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpam2[] = { {ACPI_DMT_UINT32, ACPI_MPAM2_OFFSET (Producer), "Producer", 0}, {ACPI_DMT_UINT32, ACPI_MPAM2_OFFSET (Reserved), "Reserved", 0}, }; /******************************************************************************* * * MPST - Memory Power State Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoMpst[] = { {ACPI_DMT_UINT8, ACPI_MPST_OFFSET (ChannelId), "Channel ID", 0}, {ACPI_DMT_UINT24, ACPI_MPST_OFFSET (Reserved1[0]), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_MPST_OFFSET (PowerNodeCount), "Power Node Count", 0}, {ACPI_DMT_UINT16, ACPI_MPST_OFFSET (Reserved2), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* MPST subtables */ /* 0: Memory Power Node Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0[] = { {ACPI_DMT_UINT8, ACPI_MPST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Node Enabled", 0}, {ACPI_DMT_FLAG1, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Power Managed", 0}, {ACPI_DMT_FLAG2, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Hot Plug Capable", 0}, {ACPI_DMT_UINT8, ACPI_MPST0_OFFSET (Reserved1), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_MPST0_OFFSET (NodeId), "Node ID", 0}, {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (Length), "Length", 0}, {ACPI_DMT_UINT64, ACPI_MPST0_OFFSET (RangeAddress), "Range Address", 0}, {ACPI_DMT_UINT64, ACPI_MPST0_OFFSET (RangeLength), "Range Length", 0}, {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (NumPowerStates), "Num Power States", 0}, {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (NumPhysicalComponents), "Num Physical Components", 0}, ACPI_DMT_TERMINATOR }; /* 0A: Sub-subtable - Memory Power State Structure (follows Memory Power Node above) */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0A[] = { {ACPI_DMT_UINT8, ACPI_MPST0A_OFFSET (PowerState), "Power State", 0}, {ACPI_DMT_UINT8, ACPI_MPST0A_OFFSET (InfoIndex), "InfoIndex", 0}, ACPI_DMT_TERMINATOR }; /* 0B: Sub-subtable - Physical Component ID Structure (follows Memory Power State(s) above) */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0B[] = { {ACPI_DMT_UINT16, ACPI_MPST0B_OFFSET (ComponentId), "Component Id", 0}, ACPI_DMT_TERMINATOR }; /* 01: Power Characteristics Count (follows all Power Node(s) above) */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpst1[] = { {ACPI_DMT_UINT16, ACPI_MPST1_OFFSET (CharacteristicsCount), "Characteristics Count", 0}, {ACPI_DMT_UINT16, ACPI_MPST1_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 02: Memory Power State Characteristics Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoMpst2[] = { {ACPI_DMT_UINT8, ACPI_MPST2_OFFSET (StructureId), "Structure ID", 0}, {ACPI_DMT_UINT8, ACPI_MPST2_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Memory Preserved", 0}, {ACPI_DMT_FLAG1, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Auto Entry", 0}, {ACPI_DMT_FLAG2, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Auto Exit", 0}, {ACPI_DMT_UINT16, ACPI_MPST2_OFFSET (Reserved1), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_MPST2_OFFSET (AveragePower), "Average Power", 0}, {ACPI_DMT_UINT32, ACPI_MPST2_OFFSET (PowerSaving), "Power Saving", 0}, {ACPI_DMT_UINT64, ACPI_MPST2_OFFSET (ExitLatency), "Exit Latency", 0}, {ACPI_DMT_UINT64, ACPI_MPST2_OFFSET (Reserved2), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * MSCT - Maximum System Characteristics Table (ACPI 4.0) * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoMsct[] = { {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (ProximityOffset), "Proximity Offset", 0}, {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxProximityDomains), "Max Proximity Domains", 0}, {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxClockDomains), "Max Clock Domains", 0}, {ACPI_DMT_UINT64, ACPI_MSCT_OFFSET (MaxAddress), "Max Physical Address", 0}, ACPI_DMT_TERMINATOR }; /* Subtable - Maximum Proximity Domain Information. Version 1 */ ACPI_DMTABLE_INFO AcpiDmTableInfoMsct0[] = { {ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Revision), "Revision", 0}, {ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeStart), "Domain Range Start", 0}, {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeEnd), "Domain Range End", 0}, {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (ProcessorCapacity), "Processor Capacity", 0}, {ACPI_DMT_UINT64, ACPI_MSCT0_OFFSET (MemoryCapacity), "Memory Capacity", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * NFIT - NVDIMM Firmware Interface Table and Subtables - (ACPI 6.0) * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoNfit[] = { {ACPI_DMT_UINT32, ACPI_NFIT_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* Common Subtable header */ ACPI_DMTABLE_INFO AcpiDmTableInfoNfitHdr[] = { {ACPI_DMT_NFIT, ACPI_NFITH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT16, ACPI_NFITH_OFFSET (Length), "Length", DT_LENGTH}, ACPI_DMT_TERMINATOR }; /* 0: System Physical Address Range Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoNfit0[] = { {ACPI_DMT_UINT16, ACPI_NFIT0_OFFSET (RangeIndex), "Range Index", 0}, {ACPI_DMT_UINT16, ACPI_NFIT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Add/Online Operation Only", 0}, {ACPI_DMT_FLAG1, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Proximity Domain Valid", 0}, {ACPI_DMT_FLAG2, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Location Cookie Valid", 0}, {ACPI_DMT_UINT32, ACPI_NFIT0_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_NFIT0_OFFSET (ProximityDomain), "Proximity Domain", 0}, {ACPI_DMT_UUID, ACPI_NFIT0_OFFSET (RangeGuid[0]), "Region Type GUID", 0}, {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (Address), "Address Range Base", 0}, {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (Length), "Address Range Length", 0}, {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (MemoryMapping), "Memory Map Attribute", 0}, {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (LocationCookie), "Location Cookie", 0}, /* ACPI 6.4 */ ACPI_DMT_TERMINATOR }; /* 1: Memory Device to System Address Range Map Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoNfit1[] = { {ACPI_DMT_UINT32, ACPI_NFIT1_OFFSET (DeviceHandle), "Device Handle", 0}, {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (PhysicalId), "Physical Id", 0}, {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RegionId), "Region Id", 0}, {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RangeIndex), "Range Index", 0}, {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RegionIndex), "Control Region Index", 0}, {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (RegionSize), "Region Size", 0}, {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (RegionOffset), "Region Offset", 0}, {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (Address), "Address Region Base", 0}, {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (InterleaveIndex), "Interleave Index", 0}, {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (InterleaveWays), "Interleave Ways", 0}, {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (Flags), "Flags", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Save to device failed", 0}, {ACPI_DMT_FLAG1, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Restore from device failed", 0}, {ACPI_DMT_FLAG2, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Platform flush failed", 0}, {ACPI_DMT_FLAG3, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Device not armed", 0}, {ACPI_DMT_FLAG4, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Health events observed", 0}, {ACPI_DMT_FLAG5, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Health events enabled", 0}, {ACPI_DMT_FLAG6, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Mapping failed", 0}, {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 2: Interleave Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2[] = { {ACPI_DMT_UINT16, ACPI_NFIT2_OFFSET (InterleaveIndex), "Interleave Index", 0}, {ACPI_DMT_UINT16, ACPI_NFIT2_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_NFIT2_OFFSET (LineCount), "Line Count", 0}, {ACPI_DMT_UINT32, ACPI_NFIT2_OFFSET (LineSize), "Line Size", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2a[] = { {ACPI_DMT_UINT32, 0, "Line Offset", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /* 3: SMBIOS Management Information Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3[] = { {ACPI_DMT_UINT32, ACPI_NFIT3_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3a[] = { {ACPI_DMT_RAW_BUFFER, 0, "SMBIOS Table Entries", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /* 4: NVDIMM Control Region Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoNfit4[] = { {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (RegionIndex), "Region Index", 0}, {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (VendorId), "Vendor Id", 0}, {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (DeviceId), "Device Id", 0}, {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (RevisionId), "Revision Id", 0}, {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemVendorId), "Subsystem Vendor Id", 0}, {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemDeviceId), "Subsystem Device Id", 0}, {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemRevisionId), "Subsystem Revision Id", 0}, {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ValidFields), "Valid Fields", 0}, {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ManufacturingLocation), "Manufacturing Location", 0}, {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (ManufacturingDate), "Manufacturing Date", 0}, {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Reserved[0]), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_NFIT4_OFFSET (SerialNumber), "Serial Number", 0}, {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Code), "Code", 0}, {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Windows), "Window Count", 0}, {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (WindowSize), "Window Size", 0}, {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (CommandOffset), "Command Offset", 0}, {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (CommandSize), "Command Size", 0}, {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (StatusOffset), "Status Offset", 0}, {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (StatusSize), "Status Size", 0}, {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Flags), "Flags", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_NFIT4_FLAG_OFFSET (Flags,0), "Windows buffered", 0}, {ACPI_DMT_UINT48, ACPI_NFIT4_OFFSET (Reserved1[0]), "Reserved1", 0}, ACPI_DMT_TERMINATOR }; /* 5: NVDIMM Block Data Window Region Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoNfit5[] = { {ACPI_DMT_UINT16, ACPI_NFIT5_OFFSET (RegionIndex), "Region Index", 0}, {ACPI_DMT_UINT16, ACPI_NFIT5_OFFSET (Windows), "Window Count", 0}, {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Offset), "Offset", 0}, {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Size), "Size", 0}, {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Capacity), "Capacity", 0}, {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (StartAddress), "Start Address", 0}, ACPI_DMT_TERMINATOR }; /* 6: Flush Hint Address Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6[] = { {ACPI_DMT_UINT32, ACPI_NFIT6_OFFSET (DeviceHandle), "Device Handle", 0}, {ACPI_DMT_UINT16, ACPI_NFIT6_OFFSET (HintCount), "Hint Count", 0}, {ACPI_DMT_UINT48, ACPI_NFIT6_OFFSET (Reserved[0]), "Reserved", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6a[] = { {ACPI_DMT_UINT64, 0, "Hint Address", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoNfit7[] = { {ACPI_DMT_UINT8, ACPI_NFIT7_OFFSET (HighestCapability), "Highest Capability", 0}, {ACPI_DMT_UINT24, ACPI_NFIT7_OFFSET (Reserved[0]), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_NFIT7_OFFSET (Capabilities), "Capabilities (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Cache Flush to NVDIMM", 0}, {ACPI_DMT_FLAG1, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Flush to NVDIMM", 0}, {ACPI_DMT_FLAG2, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Mirroring", 0}, {ACPI_DMT_UINT32, ACPI_NFIT7_OFFSET (Reserved2), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * PCCT - Platform Communications Channel Table (ACPI 5.0) * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct[] = { {ACPI_DMT_UINT32, ACPI_PCCT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_PCCT_FLAG_OFFSET (Flags,0), "Platform", 0}, {ACPI_DMT_UINT64, ACPI_PCCT_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* PCCT subtables */ ACPI_DMTABLE_INFO AcpiDmTableInfoPcctHdr[] = { {ACPI_DMT_PCCT, ACPI_PCCT0_OFFSET (Header.Type), "Subtable Type", 0}, {ACPI_DMT_UINT8, ACPI_PCCT0_OFFSET (Header.Length), "Length", DT_LENGTH}, ACPI_DMT_TERMINATOR }; /* 0: Generic Communications Subspace */ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[] = { {ACPI_DMT_UINT48, ACPI_PCCT0_OFFSET (Reserved[0]), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (Length), "Address Length", 0}, {ACPI_DMT_GAS, ACPI_PCCT0_OFFSET (DoorbellRegister), "Doorbell Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (PreserveMask), "Preserve Mask", 0}, {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (WriteMask), "Write Mask", 0}, {ACPI_DMT_UINT32, ACPI_PCCT0_OFFSET (Latency), "Command Latency", 0}, {ACPI_DMT_UINT32, ACPI_PCCT0_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, {ACPI_DMT_UINT16, ACPI_PCCT0_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, ACPI_DMT_TERMINATOR }; /* 1: HW-reduced Communications Subspace (ACPI 5.1) */ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[] = { {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Polarity", 0}, {ACPI_DMT_FLAG1, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Mode", 0}, {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (Length), "Address Length", 0}, {ACPI_DMT_GAS, ACPI_PCCT1_OFFSET (DoorbellRegister), "Doorbell Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (PreserveMask), "Preserve Mask", 0}, {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (WriteMask), "Write Mask", 0}, {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (Latency), "Command Latency", 0}, {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, {ACPI_DMT_UINT16, ACPI_PCCT1_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, ACPI_DMT_TERMINATOR }; /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[] = { {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Polarity", 0}, {ACPI_DMT_FLAG1, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Mode", 0}, {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (Length), "Address Length", 0}, {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (DoorbellRegister), "Doorbell Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (PreserveMask), "Preserve Mask", 0}, {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (WriteMask), "Write Mask", 0}, {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (Latency), "Command Latency", 0}, {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, {ACPI_DMT_UINT16, ACPI_PCCT2_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckWriteMask), "ACK Write Mask", 0}, ACPI_DMT_TERMINATOR }; /* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct3[] = { {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Polarity", 0}, {ACPI_DMT_FLAG1, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Mode", 0}, {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Reserved1), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Length), "Address Length", 0}, {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (DoorbellRegister), "Doorbell Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (PreserveMask), "Preserve Mask", 0}, {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (WriteMask), "Write Mask", 0}, {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Latency), "Command Latency", 0}, {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckSetMask), "ACK Set Mask", 0}, {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (Reserved2), "Reserved", 0}, {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdUpdateRegister), "Command Update Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0}, {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0}, {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, ACPI_DMT_TERMINATOR }; /* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[] = { {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Polarity", 0}, {ACPI_DMT_FLAG1, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Mode", 0}, {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Reserved1), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Length), "Address Length", 0}, {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (DoorbellRegister), "Doorbell Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (PreserveMask), "Preserve Mask", 0}, {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (WriteMask), "Write Mask", 0}, {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Latency), "Command Latency", 0}, {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckSetMask), "ACK Set Mask", 0}, {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (Reserved2), "Reserved", 0}, {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdUpdateRegister), "Command Update Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0}, {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0}, {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, ACPI_DMT_TERMINATOR }; /* 5: HW Registers based Communications Subspace */ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct5[] = { {ACPI_DMT_UINT16, ACPI_PCCT5_OFFSET (Version), "Version", 0}, {ACPI_DMT_UINT64, ACPI_PCCT5_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT64, ACPI_PCCT5_OFFSET (Length), "Length", 0}, {ACPI_DMT_GAS, ACPI_PCCT5_OFFSET (DoorbellRegister), "Doorbell Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT5_OFFSET (DoorbellPreserve), "Preserve Mask", 0}, {ACPI_DMT_UINT64, ACPI_PCCT5_OFFSET (DoorbellWrite), "Write Mask", 0}, {ACPI_DMT_GAS, ACPI_PCCT5_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT5_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, {ACPI_DMT_GAS, ACPI_PCCT5_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, {ACPI_DMT_UINT64, ACPI_PCCT5_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, {ACPI_DMT_UINT32, ACPI_PCCT5_OFFSET (NominalLatency), "Nominal Latency", 0}, {ACPI_DMT_UINT32, ACPI_PCCT5_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * PDTT - Platform Debug Trigger Table (ACPI 6.2) * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt[] = { {ACPI_DMT_UINT8, ACPI_PDTT_OFFSET (TriggerCount), "Trigger Count", 0}, {ACPI_DMT_UINT24, ACPI_PDTT_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_PDTT_OFFSET (ArrayOffset), "Array Offset", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt0[] = { {ACPI_DMT_UINT8, ACPI_PDTT0_OFFSET (SubchannelId), "Subchannel Id", 0}, {ACPI_DMT_UINT8, ACPI_PDTT0_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_PDTT0_FLAG_OFFSET (Flags,0), "Runtime Trigger", 0}, {ACPI_DMT_FLAG1, ACPI_PDTT0_FLAG_OFFSET (Flags,0), "Wait for Completion", 0}, {ACPI_DMT_FLAG2, ACPI_PDTT0_FLAG_OFFSET (Flags,0), "Trigger Order", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * PHAT - Platform Health Assessment Table (ACPI 6.4) * ******************************************************************************/ /* Common subtable header */ ACPI_DMTABLE_INFO AcpiDmTableInfoPhatHdr[] = { {ACPI_DMT_PHAT, ACPI_PHATH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT16, ACPI_PHATH_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT8, ACPI_PHATH_OFFSET (Revision), "Revision", 0}, ACPI_DMT_TERMINATOR }; /* 0: Firmware version table */ ACPI_DMTABLE_INFO AcpiDmTableInfoPhat0[] = { {ACPI_DMT_UINT24, ACPI_PHAT0_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_PHAT0_OFFSET (ElementCount), "Element Count", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoPhat0a[] = { {ACPI_DMT_UUID, ACPI_PHAT0A_OFFSET (Guid), "GUID", 0}, {ACPI_DMT_UINT64, ACPI_PHAT0A_OFFSET (VersionValue), "Version Value", 0}, {ACPI_DMT_UINT32, ACPI_PHAT0A_OFFSET (ProducerId), "Producer ID", 0}, ACPI_DMT_TERMINATOR }; /* 1: Firmware Health Data Record */ ACPI_DMTABLE_INFO AcpiDmTableInfoPhat1[] = { {ACPI_DMT_UINT16, ACPI_PHAT1_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_PHAT1_OFFSET (Health), "Health", 0}, {ACPI_DMT_UUID, ACPI_PHAT1_OFFSET (DeviceGuid), "Device GUID", 0}, {ACPI_DMT_UINT32, ACPI_PHAT1_OFFSET (DeviceSpecificOffset), "Device-Specific Offset", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoPhat1a[] = { {ACPI_DMT_UNICODE, 0, "Device Path", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoPhat1b[] = { {ACPI_DMT_RAW_BUFFER, 0, "Device-Specific Data", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * PMTT - Platform Memory Topology Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt[] = { {ACPI_DMT_UINT32, ACPI_PMTT_OFFSET (MemoryDeviceCount), "Memory Device Count", 0}, ACPI_DMT_TERMINATOR }; /* Common Subtable header (one per Subtable) */ #define ACPI_DM_PMTT_HEADER \ {ACPI_DMT_PMTT, ACPI_PMTTH_OFFSET (Type), "Subtable Type", 0}, \ {ACPI_DMT_UINT8, ACPI_PMTTH_OFFSET (Reserved1), "Reserved", 0}, \ {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Length), "Length", DT_LENGTH}, \ {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, \ {ACPI_DMT_FLAG0, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Top-level Device", 0}, \ {ACPI_DMT_FLAG1, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Physical Element", 0}, \ {ACPI_DMT_FLAGS2, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Memory Type", 0}, \ {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Reserved2), "Reserved", 0}, \ {ACPI_DMT_UINT32, ACPI_PMTTH_OFFSET (MemoryDeviceCount), "Memory Device Count", 0} /* PMTT Subtables */ /* 0: Socket */ ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt0[] = { ACPI_DM_PMTT_HEADER, {ACPI_DMT_UINT16, ACPI_PMTT0_OFFSET (SocketId), "Socket ID", 0}, {ACPI_DMT_UINT16, ACPI_PMTT0_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 1: Memory Controller */ ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1[] = { ACPI_DM_PMTT_HEADER, {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (ControllerId), "Controller ID", 0}, {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 2: Physical Component */ ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt2[] = { ACPI_DM_PMTT_HEADER, {ACPI_DMT_UINT32, ACPI_PMTT2_OFFSET (BiosHandle), "Bios Handle", 0}, ACPI_DMT_TERMINATOR }; /* 0xFF: Vendor Specific */ ACPI_DMTABLE_INFO AcpiDmTableInfoPmttVendor[] = { ACPI_DM_PMTT_HEADER, {ACPI_DMT_UUID, ACPI_PMTT_VENDOR_OFFSET (TypeUuid), "Type Uuid", 0}, {ACPI_DMT_PMTT_VENDOR, ACPI_PMTT_VENDOR_OFFSET (Specific), "Vendor Data", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * PPTT - Processor Properties Topology Table (ACPI 6.2) * ******************************************************************************/ /* Main table consists of only the standard ACPI header - subtables follow */ /* Common Subtable header (one per Subtable) */ ACPI_DMTABLE_INFO AcpiDmTableInfoPpttHdr[] = { {ACPI_DMT_PPTT, ACPI_PPTTH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT8, ACPI_PPTTH_OFFSET (Length), "Length", 0}, ACPI_DMT_TERMINATOR }; /* 0: Processor hierarchy node */ ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[] = { {ACPI_DMT_UINT16, ACPI_PPTT0_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "Physical package", 0}, {ACPI_DMT_FLAG1, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "ACPI Processor ID valid", 0}, {ACPI_DMT_FLAG2, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "Processor is a thread", 0}, {ACPI_DMT_FLAG3, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "Node is a leaf", 0}, {ACPI_DMT_FLAG4, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "Identical Implementation", 0}, {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Parent), "Parent", 0}, {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (AcpiProcessorId), "ACPI Processor ID", 0}, {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (NumberOfPrivResources), "Private Resource Number", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[] = { {ACPI_DMT_UINT32, 0, "Private Resource", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /* 1: Cache type */ ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1[] = { {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Size valid", 0}, {ACPI_DMT_FLAG1, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Number of Sets valid", 0}, {ACPI_DMT_FLAG2, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Associativity valid", 0}, {ACPI_DMT_FLAG3, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Allocation Type valid", 0}, {ACPI_DMT_FLAG4, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Cache Type valid", 0}, {ACPI_DMT_FLAG5, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Write Policy valid", 0}, {ACPI_DMT_FLAG6, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Line Size valid", 0}, {ACPI_DMT_FLAG7, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Cache ID valid", 0}, {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NextLevelOfCache), "Next Level of Cache", 0}, {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Size), "Size", 0}, {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NumberOfSets), "Number of Sets", 0}, {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Associativity), "Associativity", 0}, {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Attributes), "Attributes", 0}, {ACPI_DMT_FLAGS0, ACPI_PPTT1_OFFSET (Attributes), "Allocation Type", 0}, {ACPI_DMT_FLAGS2, ACPI_PPTT1_OFFSET (Attributes), "Cache Type", 0}, {ACPI_DMT_FLAG4, ACPI_PPTT1_OFFSET (Attributes), "Write Policy", 0}, {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (LineSize), "Line Size", 0}, ACPI_DMT_TERMINATOR }; /* 1: cache type v1 */ ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1a[] = { {ACPI_DMT_UINT32, ACPI_PPTT1A_OFFSET (CacheId), "Cache ID", 0}, ACPI_DMT_TERMINATOR }; /* 2: ID */ ACPI_DMTABLE_INFO AcpiDmTableInfoPptt2[] = { {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_PPTT2_OFFSET (VendorId), "Vendor ID", 0}, {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level1Id), "Level1 ID", 0}, {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level2Id), "Level2 ID", 0}, {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MajorRev), "Major revision", 0}, {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MinorRev), "Minor revision", 0}, {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (SpinRev), "Spin revision", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * PRMT - Platform Runtime Mechanism Table * Version 1 * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoPrmtHdr[] = { {ACPI_DMT_UUID, ACPI_PRMTH_OFFSET (PlatformGuid[0]), "Platform GUID", 0}, {ACPI_DMT_UINT32, ACPI_PRMTH_OFFSET (ModuleInfoOffset), "Module info offset", 0}, {ACPI_DMT_UINT32, ACPI_PRMTH_OFFSET (ModuleInfoCount), "Module info count", 0}, ACPI_DMT_NEW_LINE, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoPrmtModule[] = { {ACPI_DMT_UINT16, ACPI_PRMT0_OFFSET (Revision), "Revision", 0}, {ACPI_DMT_UINT16, ACPI_PRMT0_OFFSET (Length), "Length", 0}, {ACPI_DMT_UUID, ACPI_PRMT0_OFFSET (ModuleGuid[0]), "Module GUID", 0}, {ACPI_DMT_UINT16, ACPI_PRMT0_OFFSET (MajorRev), "Major Revision", 0}, {ACPI_DMT_UINT16, ACPI_PRMT0_OFFSET (MinorRev), "Minor Revision", 0}, {ACPI_DMT_UINT16, ACPI_PRMT0_OFFSET (HandlerInfoCount), "Handler Info Count", 0}, {ACPI_DMT_UINT32, ACPI_PRMT0_OFFSET (HandlerInfoOffset), "Handler Info Offset", 0}, {ACPI_DMT_UINT64, ACPI_PRMT0_OFFSET (MmioListPointer), "Mmio List pointer", 0}, ACPI_DMT_NEW_LINE, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoPrmtHandler[] = { {ACPI_DMT_UINT16, ACPI_PRMT1_OFFSET (Revision), "Revision", 0}, {ACPI_DMT_UINT16, ACPI_PRMT1_OFFSET (Length), "Length", 0}, {ACPI_DMT_UUID, ACPI_PRMT1_OFFSET (HandlerGuid[0]), "Handler GUID", 0}, {ACPI_DMT_UINT64, ACPI_PRMT1_OFFSET (HandlerAddress), "Handler address", 0}, {ACPI_DMT_UINT64, ACPI_PRMT1_OFFSET (StaticDataBufferAddress),"Static Data Address", 0}, {ACPI_DMT_UINT64, ACPI_PRMT1_OFFSET (AcpiParamBufferAddress), "ACPI Parameter Address", 0}, ACPI_DMT_NEW_LINE, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * RASF - RAS Feature table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoRasf[] = { {ACPI_DMT_BUF12, ACPI_RASF_OFFSET (ChannelId[0]), "Channel ID", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * RAS2 - RAS2 Feature table (ACPI 6.5) * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoRas2[] = { {ACPI_DMT_UINT16, ACPI_RAS2_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_RAS2_OFFSET (NumPccDescs), "Number of PCC Descriptors", 0}, ACPI_DMT_TERMINATOR }; /* RAS2 PCC Descriptor */ ACPI_DMTABLE_INFO AcpiDmTableInfoRas2PccDesc[] = { {ACPI_DMT_UINT8, ACPI_RAS2_PCC_DESC_OFFSET (ChannelId), "Channel ID", 0}, {ACPI_DMT_UINT16, ACPI_RAS2_PCC_DESC_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_RAS2_PCC_DESC_OFFSET (FeatureType), "Feature Type", 0}, {ACPI_DMT_UINT32, ACPI_RAS2_PCC_DESC_OFFSET (Instance), "Instance", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * RGRT - Regulatory Graphics Resource Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoRgrt[] = { {ACPI_DMT_UINT16, ACPI_RGRT_OFFSET (Version), "Version", 0}, {ACPI_DMT_RGRT, ACPI_RGRT_OFFSET (ImageType), "Image Type", 0}, {ACPI_DMT_UINT8, ACPI_RGRT_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* * We treat the binary image field as its own subtable (to make * ACPI_DMT_RAW_BUFFER work properly). */ ACPI_DMTABLE_INFO AcpiDmTableInfoRgrt0[] = { {ACPI_DMT_RAW_BUFFER, 0, "Image", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * RHCT - RISC-V Hart Capabilities Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoRhct[] = { {ACPI_DMT_UINT32, ACPI_RHCT_OFFSET (Flags), "Flags", 0}, {ACPI_DMT_UINT64, ACPI_RHCT_OFFSET (TimeBaseFreq), "Timer Base Frequency", 0}, {ACPI_DMT_UINT32, ACPI_RHCT_OFFSET (NodeCount), "Number of nodes", 0}, {ACPI_DMT_UINT32, ACPI_RHCT_OFFSET (NodeOffset), "Offset to the node array", 0}, ACPI_DMT_TERMINATOR }; /* Common Subtable header (one per Subtable) */ ACPI_DMTABLE_INFO AcpiDmTableInfoRhctNodeHdr[] = { {ACPI_DMT_RHCT, ACPI_RHCTH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT16, ACPI_RHCTH_OFFSET (Length), "Length", 0}, {ACPI_DMT_UINT16, ACPI_RHCTH_OFFSET (Revision), "Revision", 0}, ACPI_DMT_TERMINATOR }; /* 0: ISA string type */ ACPI_DMTABLE_INFO AcpiDmTableInfoRhctIsa1[] = { {ACPI_DMT_UINT16, ACPI_RHCT0_OFFSET (IsaLength), "ISA string length", 0}, {ACPI_DMT_STRING, ACPI_RHCT0_OFFSET (Isa[0]), "ISA string", 0}, ACPI_DMT_TERMINATOR }; /* Optional padding field */ ACPI_DMTABLE_INFO AcpiDmTableInfoRhctIsaPad[] = { {ACPI_DMT_RAW_BUFFER, 0, "Optional Padding", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /* 1: CMO node type */ ACPI_DMTABLE_INFO AcpiDmTableInfoRhctCmo1[] = { {ACPI_DMT_UINT8, ACPI_RHCT1_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_RHCT1_OFFSET (CbomSize), "CBOM Block Size", 0}, {ACPI_DMT_UINT8, ACPI_RHCT1_OFFSET (CbopSize), "CBOP Block Size", 0}, {ACPI_DMT_UINT8, ACPI_RHCT1_OFFSET (CbozSize), "CBOZ Block Size", 0}, ACPI_DMT_TERMINATOR }; /* 2: MMU node type */ ACPI_DMTABLE_INFO AcpiDmTableInfoRhctMmu1[] = { {ACPI_DMT_UINT8, ACPI_RHCT2_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_RHCT2_OFFSET (MmuType), "MMU Type", 0}, ACPI_DMT_TERMINATOR }; /* 0xFFFF: Hart Info type */ ACPI_DMTABLE_INFO AcpiDmTableInfoRhctHartInfo1[] = { {ACPI_DMT_UINT16, ACPI_RHCTFFFF_OFFSET (NumOffsets), "Number of offsets", 0}, {ACPI_DMT_UINT32, ACPI_RHCTFFFF_OFFSET (Uid), "Processor UID", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoRhctHartInfo2[] = { {ACPI_DMT_UINT32, 0, "Nodes", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * S3PT - S3 Performance Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt[] = { {ACPI_DMT_SIG, ACPI_S3PT_OFFSET (Signature[0]), "Signature", 0}, {ACPI_DMT_UINT32, ACPI_S3PT_OFFSET (Length), "Length", DT_LENGTH}, ACPI_DMT_TERMINATOR }; /* S3PT subtable header */ ACPI_DMTABLE_INFO AcpiDmTableInfoS3ptHdr[] = { {ACPI_DMT_UINT16, ACPI_S3PTH_OFFSET (Type), "Type", 0}, {ACPI_DMT_UINT8, ACPI_S3PTH_OFFSET (Length), "Length", DT_LENGTH}, {ACPI_DMT_UINT8, ACPI_S3PTH_OFFSET (Revision), "Revision", 0}, ACPI_DMT_TERMINATOR }; /* 0: Basic S3 Resume Performance Record */ ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt0[] = { {ACPI_DMT_UINT32, ACPI_S3PT0_OFFSET (ResumeCount), "Resume Count", 0}, {ACPI_DMT_UINT64, ACPI_S3PT0_OFFSET (FullResume), "Full Resume", 0}, {ACPI_DMT_UINT64, ACPI_S3PT0_OFFSET (AverageResume), "Average Resume", 0}, ACPI_DMT_TERMINATOR }; /* 1: Basic S3 Suspend Performance Record */ ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt1[] = { {ACPI_DMT_UINT64, ACPI_S3PT1_OFFSET (SuspendStart), "Suspend Start", 0}, {ACPI_DMT_UINT64, ACPI_S3PT1_OFFSET (SuspendEnd), "Suspend End", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * SBST - Smart Battery Specification Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoSbst[] = { {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (WarningLevel), "Warning Level", 0}, {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (LowLevel), "Low Level", 0}, {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (CriticalLevel), "Critical Level", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * SDEI - Software Delegated Exception Interface Descriptor Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoSdei[] = { ACPI_DMT_TERMINATOR }; /******************************************************************************* * * SDEV - Secure Devices Table (ACPI 6.2) * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoSdev[] = { ACPI_DMT_TERMINATOR }; /* Common Subtable header (one per Subtable) */ ACPI_DMTABLE_INFO AcpiDmTableInfoSdevHdr[] = { {ACPI_DMT_SDEV, ACPI_SDEVH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT8, ACPI_SDEVH_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_FLAG0, ACPI_SDEVH_FLAG_OFFSET (Flags,0), "Allow handoff to unsecure OS", 0}, {ACPI_DMT_FLAG1, ACPI_SDEVH_FLAG_OFFSET (Flags,0), "Secure access components present", 0}, {ACPI_DMT_UINT16, ACPI_SDEVH_OFFSET (Length), "Length", DT_LENGTH}, ACPI_DMT_TERMINATOR }; /* SDEV Subtables */ /* 0: Namespace Device Based Secure Device Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0[] = { {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (DeviceIdOffset), "Device ID Offset", 0}, {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (DeviceIdLength), "Device ID Length", 0}, {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (VendorDataOffset), "Vendor Data Offset", 0}, {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (VendorDataLength), "Vendor Data Length", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0a[] = { {ACPI_DMT_STRING, 0, "Namepath", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0b[] = { {ACPI_DMT_UINT16, ACPI_SDEV0B_OFFSET (SecureComponentOffset), "Secure Access Components Offset", 0}, {ACPI_DMT_UINT16, ACPI_SDEV0B_OFFSET (SecureComponentLength), "Secure Access Components Length", 0}, ACPI_DMT_TERMINATOR }; /* Secure access components */ /* Common secure access components header secure access component */ ACPI_DMTABLE_INFO AcpiDmTableInfoSdevSecCompHdr[] = { {ACPI_DMT_UINT8, ACPI_SDEVCH_OFFSET (Type), "Secure Component Type", 0}, {ACPI_DMT_UINT8, ACPI_SDEVCH_OFFSET (Flags), "Flags (decoded below)", 0}, {ACPI_DMT_UINT16, ACPI_SDEVCH_OFFSET (Length), "Length", 0}, ACPI_DMT_TERMINATOR }; /* 0: Identification Based Secure Access Component */ ACPI_DMTABLE_INFO AcpiDmTableInfoSdevSecCompId[] = { {ACPI_DMT_UINT16, ACPI_SDEVC0_OFFSET (HardwareIdOffset), "Hardware ID Offset", 0}, {ACPI_DMT_UINT16, ACPI_SDEVC0_OFFSET (HardwareIdLength), "Hardware ID Length", 0}, {ACPI_DMT_UINT16, ACPI_SDEVC0_OFFSET (SubsystemIdOffset), "Subsystem ID Offset", 0}, {ACPI_DMT_UINT16, ACPI_SDEVC0_OFFSET (SubsystemIdLength), "Subsystem ID Length", 0}, {ACPI_DMT_UINT16, ACPI_SDEVC0_OFFSET (HardwareRevision), "Hardware Revision", 0}, {ACPI_DMT_UINT8, ACPI_SDEVC0_OFFSET (HardwareRevPresent), "Hardware Rev Present", 0}, {ACPI_DMT_UINT8, ACPI_SDEVC0_OFFSET (ClassCodePresent), "Class Code Present", 0}, {ACPI_DMT_UINT8, ACPI_SDEVC0_OFFSET (PciBaseClass), "PCI Base Class", 0}, {ACPI_DMT_UINT8, ACPI_SDEVC0_OFFSET (PciSubClass), "PCI SubClass", 0}, {ACPI_DMT_UINT8, ACPI_SDEVC0_OFFSET (PciProgrammingXface), "PCI Programming Xface", 0}, ACPI_DMT_TERMINATOR }; /* 1: Memory Based Secure Access Component */ ACPI_DMTABLE_INFO AcpiDmTableInfoSdevSecCompMem[] = { {ACPI_DMT_UINT32, ACPI_SDEVC1_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_SDEVC1_OFFSET (MemoryBaseAddress), "Memory Base Address", 0}, {ACPI_DMT_UINT64, ACPI_SDEVC1_OFFSET (MemoryLength), "Memory Length", 0}, ACPI_DMT_TERMINATOR }; /* 1: PCIe Endpoint Device Based Device Structure */ ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1[] = { {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (Segment), "Segment", 0}, {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (StartBus), "Start Bus", 0}, {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (PathOffset), "Path Offset", 0}, {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (PathLength), "Path Length", 0}, {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (VendorDataOffset), "Vendor Data Offset", 0}, {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (VendorDataLength), "Vendor Data Length", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1a[] = { {ACPI_DMT_UINT8, ACPI_SDEV1A_OFFSET (Device), "Device", 0}, {ACPI_DMT_UINT8, ACPI_SDEV1A_OFFSET (Function), "Function", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1b[] = { {ACPI_DMT_RAW_BUFFER, 0, "Vendor Data", 0}, /*, DT_OPTIONAL}, */ ACPI_DMT_TERMINATOR }; /*! [End] no source code translation !*/ src/acpica/source/common/dmtbinfo3.c000066400000000000000000001216221465205512700177210ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dmtbinfo3 - Table info for non-AML tables * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdisasm.h" #include "actbinfo.h" /* This module used for application-level code only */ #define _COMPONENT ACPI_CA_DISASSEMBLER ACPI_MODULE_NAME ("dmtbinfo3") /* * How to add a new table: * * - Add the C table definition to the actbl1.h or actbl2.h header. * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. * - Define the table in this file (for the disassembler). If any * new data types are required (ACPI_DMT_*), see below. * - Add an external declaration for the new table definition (AcpiDmTableInfo*) * in acdisam.h * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) * If a simple table (with no subtables), no disassembly code is needed. * Otherwise, create the AcpiDmDump* function for to disassemble the table * and add it to the dmtbdump.c file. * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c * - Create a template for the new table * - Add data table compiler support * * How to add a new data type (ACPI_DMT_*): * * - Add new type at the end of the ACPI_DMT list in acdisasm.h * - Add length and implementation cases in dmtable.c (disassembler) * - Add type and length cases in dtutils.c (DT compiler) */ /* * ACPI Table Information, used to dump formatted ACPI tables * * Each entry is of the form: */ /******************************************************************************* * * CCEL - CC-Event Log Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoCcel[] = { {ACPI_DMT_UINT8, ACPI_CCEL_OFFSET (CCType), "CC Type", 0}, {ACPI_DMT_UINT8, ACPI_CCEL_OFFSET (CCSubType), "CC Sub Type", 0}, {ACPI_DMT_UINT32, ACPI_CCEL_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_CCEL_OFFSET (LogAreaMinimumLength), "Log Area Minimum Length", 0}, {ACPI_DMT_UINT64, ACPI_CCEL_OFFSET (LogAreaStartAddress), "Log Area Start Address", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * SLIC - Software Licensing Description Table. This table contains the standard * ACPI header followed by proprietary data structures * ******************************************************************************/ /* Single subtable, a proprietary format, so treat it as a buffer */ ACPI_DMTABLE_INFO AcpiDmTableInfoSlic[] = { {ACPI_DMT_RAW_BUFFER, 0, "Software Licensing Structure", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * SLIT - System Locality Information Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoSlit[] = { {ACPI_DMT_UINT64, ACPI_SLIT_OFFSET (LocalityCount), "Localities", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * SPCR - Serial Port Console Redirection table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoSpcr[] = { {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (InterfaceType), "Interface Type", 0}, {ACPI_DMT_UINT24, ACPI_SPCR_OFFSET (Reserved[0]), "Reserved", 0}, {ACPI_DMT_GAS, ACPI_SPCR_OFFSET (SerialPort), "Serial Port Register", 0}, {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (InterruptType), "Interrupt Type", 0}, {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PcInterrupt), "PCAT-compatible IRQ", 0}, {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (Interrupt), "Interrupt", 0}, {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (BaudRate), "Baud Rate", 0}, {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (Parity), "Parity", 0}, {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (StopBits), "Stop Bits", 0}, {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (FlowControl), "Flow Control", 0}, {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (TerminalType), "Terminal Type", 0}, {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (Reserved2), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_SPCR_OFFSET (PciDeviceId), "PCI Device ID", 0}, {ACPI_DMT_UINT16, ACPI_SPCR_OFFSET (PciVendorId), "PCI Vendor ID", 0}, {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciBus), "PCI Bus", 0}, {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciDevice), "PCI Device", 0}, {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciFunction), "PCI Function", 0}, {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (PciFlags), "PCI Flags", 0}, {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciSegment), "PCI Segment", 0}, {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (Reserved2), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * SPMI - Server Platform Management Interface table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoSpmi[] = { {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterfaceType), "Interface Type", 0}, {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved), "Reserved", DT_NON_ZERO}, /* Value must be 1 */ {ACPI_DMT_UINT16, ACPI_SPMI_OFFSET (SpecRevision), "IPMI Spec Version", 0}, {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterruptType), "Interrupt Type", 0}, {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (GpeNumber), "GPE Number", 0}, {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved1), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDeviceFlag), "PCI Device Flag", 0}, {ACPI_DMT_UINT32, ACPI_SPMI_OFFSET (Interrupt), "Interrupt", 0}, {ACPI_DMT_GAS, ACPI_SPMI_OFFSET (IpmiRegister), "IPMI Register", 0}, {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciSegment), "PCI Segment", 0}, {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciBus), "PCI Bus", 0}, {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDevice), "PCI Device", 0}, {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciFunction), "PCI Function", 0}, {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved2), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * SRAT - System Resource Affinity Table and Subtables * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat[] = { {ACPI_DMT_UINT32, ACPI_SRAT_OFFSET (TableRevision), "Table Revision", 0}, {ACPI_DMT_UINT64, ACPI_SRAT_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* Common Subtable header (one per Subtable) */ ACPI_DMTABLE_INFO AcpiDmTableInfoSratHdr[] = { {ACPI_DMT_SRAT, ACPI_SRATH_OFFSET (Type), "Subtable Type", 0}, {ACPI_DMT_UINT8, ACPI_SRATH_OFFSET (Length), "Length", DT_LENGTH}, ACPI_DMT_TERMINATOR }; /* SRAT Subtables */ /* 0: Processor Local APIC/SAPIC Affinity */ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat0[] = { {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (ProximityDomainLo), "Proximity Domain Low(8)", 0}, {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (ApicId), "Apic ID", 0}, {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_SRAT0_FLAG_OFFSET (Flags,0), "Enabled", 0}, {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (LocalSapicEid), "Local Sapic EID", 0}, {ACPI_DMT_UINT24, ACPI_SRAT0_OFFSET (ProximityDomainHi[0]), "Proximity Domain High(24)", 0}, {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (ClockDomain), "Clock Domain", 0}, ACPI_DMT_TERMINATOR }; /* 1: Memory Affinity */ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat1[] = { {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (ProximityDomain), "Proximity Domain", 0}, {ACPI_DMT_UINT16, ACPI_SRAT1_OFFSET (Reserved), "Reserved1", 0}, {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (Length), "Address Length", 0}, {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (Reserved1), "Reserved2", 0}, {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Enabled", 0}, {ACPI_DMT_FLAG1, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Hot Pluggable", 0}, {ACPI_DMT_FLAG2, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Non-Volatile", 0}, {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (Reserved2), "Reserved3", 0}, ACPI_DMT_TERMINATOR }; /* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[] = { {ACPI_DMT_UINT16, ACPI_SRAT2_OFFSET (Reserved), "Reserved1", 0}, {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ProximityDomain), "Proximity Domain", 0}, {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ApicId), "Apic ID", 0}, {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_SRAT2_FLAG_OFFSET (Flags,0), "Enabled", 0}, {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ClockDomain), "Clock Domain", 0}, {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (Reserved2), "Reserved2", 0}, ACPI_DMT_TERMINATOR }; /* 3: GICC Affinity (ACPI 5.1) */ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[] = { {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ProximityDomain), "Proximity Domain", 0}, {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (AcpiProcessorUid), "Acpi Processor UID", 0}, {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_SRAT3_FLAG_OFFSET (Flags,0), "Enabled", 0}, {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ClockDomain), "Clock Domain", 0}, ACPI_DMT_TERMINATOR }; /* 4: GCC ITS Affinity (ACPI 6.2) */ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[] = { {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ProximityDomain), "Proximity Domain", 0}, {ACPI_DMT_UINT16, ACPI_SRAT4_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ItsId), "ITS ID", 0}, ACPI_DMT_TERMINATOR }; /* Common SRAT structure for Generic Affinity Subtables */ #define ACPI_DM_SRAT_GENERIC_AFFINITY \ {ACPI_DMT_UINT8, ACPI_SRAT5_OFFSET (Reserved), "Reserved1", 0}, \ {ACPI_DMT_UINT8, ACPI_SRAT5_OFFSET (DeviceHandleType), "Device Handle Type", 0}, \ {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (ProximityDomain), "Proximity Domain", 0}, \ {ACPI_DMT_BUF16, ACPI_SRAT5_OFFSET (DeviceHandle), "Device Handle", 0}, \ {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, \ {ACPI_DMT_FLAG0, ACPI_SRAT5_FLAG_OFFSET (Flags,0), "Enabled", 0}, \ {ACPI_DMT_FLAG1, ACPI_SRAT5_FLAG_OFFSET (Flags,0), "Architectural Transactions", 0}, \ {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (Reserved1), "Reserved2", 0} /* 5: Generic Initiator Affinity Structure (ACPI 6.3) */ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat5[] = { ACPI_DM_SRAT_GENERIC_AFFINITY, ACPI_DMT_TERMINATOR }; /* 6: Generic Port Affinity Structure (ACPI 6.4) */ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat6[] = { ACPI_DM_SRAT_GENERIC_AFFINITY, ACPI_DMT_TERMINATOR }; /* 7: RINTC Affinity Structure (ACPI 6.6) */ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat7[] = { {ACPI_DMT_UINT16, ACPI_SRAT7_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_SRAT7_OFFSET (ProximityDomain), "Proximity Domain", 0}, {ACPI_DMT_UINT32, ACPI_SRAT7_OFFSET (AcpiProcessorUid), "Acpi Processor UID", 0}, {ACPI_DMT_UINT32, ACPI_SRAT7_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_SRAT7_FLAG_OFFSET (Flags,0), "Enabled", 0}, {ACPI_DMT_UINT32, ACPI_SRAT7_OFFSET (ClockDomain), "Clock Domain", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * STAO - Status Override Table (_STA override) - ACPI 6.0 * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoStao[] = { {ACPI_DMT_UINT8, ACPI_STAO_OFFSET (IgnoreUart), "Ignore UART", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[] = { {ACPI_DMT_STRING, 0, "Namepath", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * SVKL - Storage Volume Key Location table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoSvkl[] = { {ACPI_DMT_UINT32, ACPI_SVKL_OFFSET (Count), "Key Count", 0}, ACPI_DMT_TERMINATOR }; /* SVKL subtables */ ACPI_DMTABLE_INFO AcpiDmTableInfoSvkl0[] = { {ACPI_DMT_UINT16, ACPI_SVKL0_OFFSET (Type), "Key Type", 0}, {ACPI_DMT_UINT16, ACPI_SVKL0_OFFSET (Format), "Key Format", 0}, {ACPI_DMT_UINT32, ACPI_SVKL0_OFFSET (Size), "Key Size", 0}, {ACPI_DMT_UINT64, ACPI_SVKL0_OFFSET (Address), "Key Address", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * TCPA - Trusted Computing Platform Alliance table (Client) * * NOTE: There are two versions of the table with the same signature -- * the client version and the server version. The common PlatformClass * field is used to differentiate the two types of tables. * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[] = { {ACPI_DMT_UINT16, ACPI_TCPA_OFFSET (PlatformClass), "Platform Class", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaClient[] = { {ACPI_DMT_UINT32, ACPI_TCPA_CLIENT_OFFSET (MinimumLogLength), "Min Event Log Length", 0}, {ACPI_DMT_UINT64, ACPI_TCPA_CLIENT_OFFSET (LogAddress), "Event Log Address", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[] = { {ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (MinimumLogLength), "Min Event Log Length", 0}, {ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (LogAddress), "Event Log Address", 0}, {ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (SpecRevision), "Specification Revision", 0}, {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Device Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Pci Device", 0}, {ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Bus is Pnp", 0}, {ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Address Valid", 0}, {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Interrupt Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Mode", 0}, {ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Polarity", 0}, {ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "GPE SCI Triggered", 0}, {ACPI_DMT_FLAG3, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Global System Interrupt", 0}, {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (GpeNumber), "Gpe Number", 0}, {ACPI_DMT_UINT24, ACPI_TCPA_SERVER_OFFSET (Reserved2[0]), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, {ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (Address), "Address", 0}, {ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (Reserved3), "Reserved", 0}, {ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (ConfigAddress), "Configuration Address", 0}, {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Group), "Pci Group", 0}, {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Bus), "Pci Bus", 0}, {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Device), "Pci Device", 0}, {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Function), "Pci Function", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * TDEL - TD-Event Log Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoTdel[] = { {ACPI_DMT_UINT32, ACPI_TDEL_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_TDEL_OFFSET (LogAreaMinimumLength), "Log Area Minimum Length", 0}, {ACPI_DMT_UINT64, ACPI_TDEL_OFFSET (LogAreaStartAddress), "Log Area Start Address", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table * ******************************************************************************/ /* TPM2 revision 3 */ ACPI_DMTABLE_INFO AcpiDmTableInfoTpm23[] = { {ACPI_DMT_UINT32, ACPI_TPM23_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_TPM23_OFFSET (ControlAddress), "Control Address", 0}, {ACPI_DMT_UINT32, ACPI_TPM23_OFFSET (StartMethod), "Start Method", 0}, ACPI_DMT_TERMINATOR }; /* Trailer in the case that StartMethod == 2 */ ACPI_DMTABLE_INFO AcpiDmTableInfoTpm23a[] = { {ACPI_DMT_UINT32, ACPI_TPM23A_OFFSET (Reserved), "Reserved", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /* TPM2 revision 4 */ ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[] = { {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (PlatformClass), "Platform Class", 0}, {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_TPM2_OFFSET (ControlAddress), "Control Address", 0}, {ACPI_DMT_TPM2, ACPI_TPM2_OFFSET (StartMethod), "Start Method", 0}, ACPI_DMT_TERMINATOR }; /* Optional trailer. LogLength and LogAddress are additionally optional */ ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2a[] = { {ACPI_DMT_BUF12, ACPI_TPM2A_OFFSET (MethodParameters), "Method Parameters", DT_OPTIONAL}, {ACPI_DMT_UINT32, ACPI_TPM2A_OFFSET (MinimumLogLength), "Minimum Log Length", DT_OPTIONAL}, {ACPI_DMT_UINT64, ACPI_TPM2A_OFFSET (LogAddress), "Log Address", DT_OPTIONAL}, ACPI_DMT_TERMINATOR }; /* 11: Start Method for ARM SMC */ ACPI_DMTABLE_INFO AcpiDmTableInfoTpm211[] = { {ACPI_DMT_UINT32, ACPI_TPM211_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, {ACPI_DMT_UINT8, ACPI_TPM211_OFFSET (InterruptFlags), "Interrupt Flags", 0}, {ACPI_DMT_UINT8, ACPI_TPM211_OFFSET (OperationFlags), "Operation Flags", 0}, {ACPI_DMT_UINT16, ACPI_TPM211_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_TPM211_OFFSET (FunctionId), "Function ID", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * UEFI - UEFI Boot optimization Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[] = { {ACPI_DMT_UUID, ACPI_UEFI_OFFSET (Identifier[0]), "UUID Identifier", 0}, {ACPI_DMT_UINT16, ACPI_UEFI_OFFSET (DataOffset), "Data Offset", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * VIOT - Virtual I/O Translation Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoViot[] = { {ACPI_DMT_UINT16, ACPI_VIOT_OFFSET (NodeCount), "Node count", 0}, {ACPI_DMT_UINT16, ACPI_VIOT_OFFSET (NodeOffset), "Node offset", 0}, {ACPI_DMT_UINT64, ACPI_VIOT_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* Common VIOT subtable header */ ACPI_DMTABLE_INFO AcpiDmTableInfoViotHeader[] = { {ACPI_DMT_VIOT, ACPI_VIOTH_OFFSET (Type), "Type", 0}, {ACPI_DMT_UINT8, ACPI_VIOTH_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT16, ACPI_VIOTH_OFFSET (Length), "Length", DT_LENGTH}, ACPI_DMT_TERMINATOR }; /* VIOT Subtables */ /* 0x01: PCI Range Node */ ACPI_DMTABLE_INFO AcpiDmTableInfoViot1[] = { {ACPI_DMT_UINT32, ACPI_VIOT1_OFFSET (EndpointStart), "Endpoint start", 0}, {ACPI_DMT_UINT16, ACPI_VIOT1_OFFSET (SegmentStart), "PCI Segment start", 0}, {ACPI_DMT_UINT16, ACPI_VIOT1_OFFSET (SegmentEnd), "PCI Segment end", 0}, {ACPI_DMT_UINT16, ACPI_VIOT1_OFFSET (BdfStart), "PCI BDF start", 0}, {ACPI_DMT_UINT16, ACPI_VIOT1_OFFSET (BdfEnd), "PCI BDF end", 0}, {ACPI_DMT_UINT16, ACPI_VIOT1_OFFSET (OutputNode), "Output node", 0}, {ACPI_DMT_UINT48, ACPI_VIOT1_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 0x02: MMIO Endpoint Node */ ACPI_DMTABLE_INFO AcpiDmTableInfoViot2[] = { {ACPI_DMT_UINT32, ACPI_VIOT2_OFFSET (Endpoint), "Endpoint", 0}, {ACPI_DMT_UINT64, ACPI_VIOT2_OFFSET (BaseAddress), "Base address", 0}, {ACPI_DMT_UINT16, ACPI_VIOT2_OFFSET (OutputNode), "Output node", 0}, {ACPI_DMT_UINT48, ACPI_VIOT2_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 0x03: PCI Virtio-IOMMU Node */ ACPI_DMTABLE_INFO AcpiDmTableInfoViot3[] = { {ACPI_DMT_UINT16, ACPI_VIOT3_OFFSET (Segment), "PCI Segment", 0}, {ACPI_DMT_UINT16, ACPI_VIOT3_OFFSET (Bdf), "PCI BDF number", 0}, {ACPI_DMT_UINT64, ACPI_VIOT3_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; /* 0x04: MMIO Virtio-IOMMU Node */ ACPI_DMTABLE_INFO AcpiDmTableInfoViot4[] = { {ACPI_DMT_UINT32, ACPI_VIOT4_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT64, ACPI_VIOT4_OFFSET (BaseAddress), "Base address", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * WAET - Windows ACPI Emulated devices Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoWaet[] = { {ACPI_DMT_UINT32, ACPI_WAET_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_WAET_OFFSET (Flags), "RTC needs no INT ack", 0}, {ACPI_DMT_FLAG1, ACPI_WAET_OFFSET (Flags), "PM timer, one read only", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * WDAT - Watchdog Action Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoWdat[] = { {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (HeaderLength), "Header Length", DT_LENGTH}, {ACPI_DMT_UINT16, ACPI_WDAT_OFFSET (PciSegment), "PCI Segment", 0}, {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciBus), "PCI Bus", 0}, {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciDevice), "PCI Device", 0}, {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciFunction), "PCI Function", 0}, {ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved[0]), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (TimerPeriod), "Timer Period", 0}, {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MaxCount), "Max Count", 0}, {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MinCount), "Min Count", 0}, {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_WDAT_OFFSET (Flags), "Enabled", 0}, {ACPI_DMT_FLAG7, ACPI_WDAT_OFFSET (Flags), "Stopped When Asleep", 0}, {ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved2[0]), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (Entries), "Watchdog Entry Count", 0}, ACPI_DMT_TERMINATOR }; /* WDAT Subtables - Watchdog Instruction Entries */ ACPI_DMTABLE_INFO AcpiDmTableInfoWdat0[] = { {ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Action), "Watchdog Action", 0}, {ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Instruction), "Instruction", 0}, {ACPI_DMT_UINT16, ACPI_WDAT0_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_GAS, ACPI_WDAT0_OFFSET (RegisterRegion), "Register Region", 0}, {ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Value), "Value", 0}, {ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Mask), "Register Mask", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * WDDT - Watchdog Description Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoWddt[] = { {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (SpecVersion), "Specification Version", 0}, {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (TableVersion), "Table Version", 0}, {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (PciVendorId), "PCI Vendor ID", 0}, {ACPI_DMT_GAS, ACPI_WDDT_OFFSET (Address), "Timer Register", 0}, {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (MaxCount), "Max Count", 0}, {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (MinCount), "Min Count", 0}, {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Period), "Period", 0}, {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Status), "Status (decoded below)", 0}, /* Status Flags byte 0 */ {ACPI_DMT_FLAG0, ACPI_WDDT_FLAG_OFFSET (Status,0), "Available", 0}, {ACPI_DMT_FLAG1, ACPI_WDDT_FLAG_OFFSET (Status,0), "Active", 0}, {ACPI_DMT_FLAG2, ACPI_WDDT_FLAG_OFFSET (Status,0), "OS Owns", 0}, /* Status Flags byte 1 */ {ACPI_DMT_FLAG3, ACPI_WDDT_FLAG_OFFSET (Status,1), "User Reset", 0}, {ACPI_DMT_FLAG4, ACPI_WDDT_FLAG_OFFSET (Status,1), "Timeout Reset", 0}, {ACPI_DMT_FLAG5, ACPI_WDDT_FLAG_OFFSET (Status,1), "Power Fail Reset", 0}, {ACPI_DMT_FLAG6, ACPI_WDDT_FLAG_OFFSET (Status,1), "Unknown Reset", 0}, {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Capability), "Capability (decoded below)", 0}, /* Capability Flags byte 0 */ {ACPI_DMT_FLAG0, ACPI_WDDT_FLAG_OFFSET (Capability,0), "Auto Reset", 0}, {ACPI_DMT_FLAG1, ACPI_WDDT_FLAG_OFFSET (Capability,0), "Timeout Alert", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * WDRT - Watchdog Resource Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoWdrt[] = { {ACPI_DMT_GAS, ACPI_WDRT_OFFSET (ControlRegister), "Control Register", 0}, {ACPI_DMT_GAS, ACPI_WDRT_OFFSET (CountRegister), "Count Register", 0}, {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciDeviceId), "PCI Device ID", 0}, {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciVendorId), "PCI Vendor ID", 0}, {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciBus), "PCI Bus", 0}, {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciDevice), "PCI Device", 0}, {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciFunction), "PCI Function", 0}, {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciSegment), "PCI Segment", 0}, {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (MaxCount), "Max Count", 0}, {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (Units), "Counter Units", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * WPBT - Windows Platform Environment Table (ACPI 6.0) * Version 1 * * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011 * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt[] = { {ACPI_DMT_UINT32, ACPI_WPBT_OFFSET (HandoffSize), "Handoff Size", 0}, {ACPI_DMT_UINT64, ACPI_WPBT_OFFSET (HandoffAddress), "Handoff Address", 0}, {ACPI_DMT_UINT8, ACPI_WPBT_OFFSET (Layout), "Layout", 0}, {ACPI_DMT_UINT8, ACPI_WPBT_OFFSET (Type), "Type", 0}, {ACPI_DMT_UINT16, ACPI_WPBT_OFFSET (ArgumentsLength), "Arguments Length", 0}, ACPI_DMT_TERMINATOR }; ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] = { {ACPI_DMT_WPBT_UNICODE, ACPI_WPBT2_OFFSET (UnicodeString), "Command-line Arguments", DT_DESCRIBES_OPTIONAL}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * WSMT - Windows SMM Security Mitigations Table * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoWsmt[] = { {ACPI_DMT_UINT32, ACPI_WSMT_OFFSET (ProtectionFlags), "Protection Flags", 0}, {ACPI_DMT_FLAG0, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "FIXED_COMM_BUFFERS", 0}, {ACPI_DMT_FLAG1, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "COMM_BUFFER_NESTED_PTR_PROTECTION", 0}, {ACPI_DMT_FLAG2, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "SYSTEM_RESOURCE_PROTECTION", 0}, ACPI_DMT_TERMINATOR }; /******************************************************************************* * * XENV - Xen Environment table (ACPI 6.0) * ******************************************************************************/ ACPI_DMTABLE_INFO AcpiDmTableInfoXenv[] = { {ACPI_DMT_UINT64, ACPI_XENV_OFFSET (GrantTableAddress), "Grant Table Address", 0}, {ACPI_DMT_UINT64, ACPI_XENV_OFFSET (GrantTableSize), "Grant Table Size", 0}, {ACPI_DMT_UINT32, ACPI_XENV_OFFSET (EventInterrupt), "Event Interrupt", 0}, {ACPI_DMT_UINT8, ACPI_XENV_OFFSET (EventFlags), "Event Flags", 0}, ACPI_DMT_TERMINATOR }; /*! [Begin] no source code translation */ /* * Generic types (used in UEFI and custom tables) * * Examples: * * Buffer : cc 04 ff bb * UINT8 : 11 * UINT16 : 1122 * UINT24 : 112233 * UINT32 : 11223344 * UINT56 : 11223344556677 * UINT64 : 1122334455667788 * * String : "This is string" * Unicode : "This string encoded to Unicode" * * GUID : 11223344-5566-7788-99aa-bbccddeeff00 * DevicePath : "\PciRoot(0)\Pci(0x1f,1)\Usb(0,0)" */ #define ACPI_DM_GENERIC_ENTRY(FieldType, FieldName) \ {{FieldType, 0, FieldName, 0}, ACPI_DMT_TERMINATOR} ACPI_DMTABLE_INFO AcpiDmTableInfoGeneric[][2] = { ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT8, "UINT8"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT16, "UINT16"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT24, "UINT24"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT32, "UINT32"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT40, "UINT40"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT48, "UINT48"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT56, "UINT56"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT64, "UINT64"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "String"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UNICODE, "Unicode"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_BUFFER, "Buffer"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_BUF16, "BUF16"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UUID, "GUID"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "DevicePath"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_LABEL, "Label"), {ACPI_DMT_TERMINATOR} }; /*! [End] no source code translation !*/ src/acpica/source/common/getopt.c000066400000000000000000000334651465205512700173450ustar00rootroot00000000000000/****************************************************************************** * * Module Name: getopt * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ /* * ACPICA getopt() implementation * * Option strings: * "f" - Option has no arguments * "f:" - Option requires an argument * "f+" - Option has an optional argument * "f^" - Option has optional single-char sub-options * "f|" - Option has required single-char sub-options */ #include "acpi.h" #include "accommon.h" #include "acapps.h" #define ACPI_OPTION_ERROR(msg, badchar) \ if (AcpiGbl_Opterr) {fprintf (stderr, "%s%c\n", msg, badchar);} int AcpiGbl_Opterr = 1; int AcpiGbl_Optind = 1; int AcpiGbl_SubOptChar = 0; char *AcpiGbl_Optarg; static int CurrentCharPtr = 1; /******************************************************************************* * * FUNCTION: AcpiGetoptArgument * * PARAMETERS: argc, argv - from main * * RETURN: 0 if an argument was found, -1 otherwise. Sets AcpiGbl_Optarg * to point to the next argument. * * DESCRIPTION: Get the next argument. Used to obtain arguments for the * two-character options after the original call to AcpiGetopt. * Note: Either the argument starts at the next character after * the option, or it is pointed to by the next argv entry. * (After call to AcpiGetopt, we need to backup to the previous * argv entry). * ******************************************************************************/ int AcpiGetoptArgument ( int argc, char **argv) { AcpiGbl_Optind--; CurrentCharPtr++; if (argv[AcpiGbl_Optind][(int) (CurrentCharPtr+1)] != '\0') { AcpiGbl_Optarg = &argv[AcpiGbl_Optind++][(int) (CurrentCharPtr+1)]; } else if (++AcpiGbl_Optind >= argc) { ACPI_OPTION_ERROR ("\nOption requires an argument", 0); CurrentCharPtr = 1; return (-1); } else { AcpiGbl_Optarg = argv[AcpiGbl_Optind++]; } CurrentCharPtr = 1; return (0); } /******************************************************************************* * * FUNCTION: AcpiGetopt * * PARAMETERS: argc, argv - from main * opts - options info list * * RETURN: Option character or ACPI_OPT_END * * DESCRIPTION: Get the next option * ******************************************************************************/ int AcpiGetopt( int argc, char **argv, char *opts) { int CurrentChar; char *OptsPtr; if (CurrentCharPtr == 1) { if (AcpiGbl_Optind >= argc || argv[AcpiGbl_Optind][0] != '-' || argv[AcpiGbl_Optind][1] == '\0') { return (ACPI_OPT_END); } else if (strcmp (argv[AcpiGbl_Optind], "--") == 0) { AcpiGbl_Optind++; return (ACPI_OPT_END); } } /* Get the option */ CurrentChar = argv[AcpiGbl_Optind][CurrentCharPtr]; /* Make sure that the option is legal */ if (CurrentChar == ':' || (OptsPtr = strchr (opts, CurrentChar)) == NULL) { ACPI_OPTION_ERROR ("Illegal option: -", CurrentChar); if (argv[AcpiGbl_Optind][++CurrentCharPtr] == '\0') { AcpiGbl_Optind++; CurrentCharPtr = 1; } return ('?'); } /* Option requires an argument? */ if (*++OptsPtr == ':') { if (argv[AcpiGbl_Optind][(int) (CurrentCharPtr+1)] != '\0') { AcpiGbl_Optarg = &argv[AcpiGbl_Optind++][(int) (CurrentCharPtr+1)]; } else if (++AcpiGbl_Optind >= argc) { ACPI_OPTION_ERROR ( "Option requires an argument: -", CurrentChar); CurrentCharPtr = 1; return ('?'); } else { AcpiGbl_Optarg = argv[AcpiGbl_Optind++]; } CurrentCharPtr = 1; } /* Option has an optional argument? */ else if (*OptsPtr == '+') { if (argv[AcpiGbl_Optind][(int) (CurrentCharPtr+1)] != '\0') { AcpiGbl_Optarg = &argv[AcpiGbl_Optind++][(int) (CurrentCharPtr+1)]; } else if (++AcpiGbl_Optind >= argc) { AcpiGbl_Optarg = NULL; } else { AcpiGbl_Optarg = argv[AcpiGbl_Optind++]; } CurrentCharPtr = 1; } /* Option has optional single-char arguments? */ else if (*OptsPtr == '^') { if (argv[AcpiGbl_Optind][(int) (CurrentCharPtr+1)] != '\0') { AcpiGbl_Optarg = &argv[AcpiGbl_Optind][(int) (CurrentCharPtr+1)]; } else { AcpiGbl_Optarg = "^"; } AcpiGbl_SubOptChar = AcpiGbl_Optarg[0]; AcpiGbl_Optind++; CurrentCharPtr = 1; } /* Option has a required single-char argument? */ else if (*OptsPtr == '|') { if (argv[AcpiGbl_Optind][(int) (CurrentCharPtr+1)] != '\0') { AcpiGbl_Optarg = &argv[AcpiGbl_Optind][(int) (CurrentCharPtr+1)]; } else { ACPI_OPTION_ERROR ( "Option requires a single-character suboption: -", CurrentChar); CurrentCharPtr = 1; return ('?'); } AcpiGbl_SubOptChar = AcpiGbl_Optarg[0]; AcpiGbl_Optind++; CurrentCharPtr = 1; } /* Option with no arguments */ else { if (argv[AcpiGbl_Optind][++CurrentCharPtr] == '\0') { CurrentCharPtr = 1; AcpiGbl_Optind++; } AcpiGbl_Optarg = NULL; } return (CurrentChar); } src/acpica/source/compiler/000077500000000000000000000000001465205512700162065ustar00rootroot00000000000000src/acpica/source/compiler/aslallocate.c000066400000000000000000000306471465205512700206500ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslallocate -- Local memory allocation * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" /* * Local heap allocation wrappers. See aslcache.c for allocation from local * cache allocations */ /******************************************************************************* * * FUNCTION: UtLocalCalloc * * PARAMETERS: Size - Bytes to be allocated * * RETURN: Pointer to the allocated memory. If this function returns * (the compiler is not aborted), the pointer is guaranteed to * be valid. * * DESCRIPTION: Allocate zero-initialized memory. The point of this function * is to abort the compile on an allocation failure, on the * assumption that nothing more can be accomplished. * * NOTE: For allocation from the local caches, see aslcache.c * ******************************************************************************/ void * UtLocalCalloc ( UINT32 Size) { void *Allocated; Allocated = ACPI_ALLOCATE_ZEROED (Size); if (!Allocated) { AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_InputByteCount, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, NULL); CmCleanupAndExit (); exit (1); } AslGbl_TotalAllocations++; AslGbl_TotalAllocated += Size; return (Allocated); } /****************************************************************************** * * FUNCTION: UtExpandLineBuffers * * PARAMETERS: None. Updates global line buffer pointers. * * RETURN: None. Reallocates the global line buffers * * DESCRIPTION: Called if the current line buffer becomes filled. Reallocates * all global line buffers and updates AslGbl_LineBufferSize. NOTE: * Also used for the initial allocation of the buffers, when * all of the buffer pointers are NULL. Initial allocations are * of size ASL_DEFAULT_LINE_BUFFER_SIZE * *****************************************************************************/ void UtExpandLineBuffers ( void) { UINT32 NewSize; /* Attempt to double the size of all line buffers */ NewSize = AslGbl_LineBufferSize * 2; if (AslGbl_CurrentLineBuffer) { DbgPrint (ASL_DEBUG_OUTPUT, "Increasing line buffer size from %u to %u\n", AslGbl_LineBufferSize, NewSize); } UtReallocLineBuffers (&AslGbl_CurrentLineBuffer, AslGbl_LineBufferSize, NewSize); UtReallocLineBuffers (&AslGbl_MainTokenBuffer, AslGbl_LineBufferSize, NewSize); UtReallocLineBuffers (&AslGbl_MacroTokenBuffer, AslGbl_LineBufferSize, NewSize); UtReallocLineBuffers (&AslGbl_ExpressionTokenBuffer, AslGbl_LineBufferSize, NewSize); AslGbl_LineBufPtr = AslGbl_CurrentLineBuffer; AslGbl_LineBufferSize = NewSize; } /****************************************************************************** * * FUNCTION: UtReallocLineBuffers * * PARAMETERS: Buffer - Buffer to realloc * OldSize - Old size of Buffer * NewSize - New size of Buffer * * RETURN: none * * DESCRIPTION: Reallocate and initialize Buffer * *****************************************************************************/ void UtReallocLineBuffers ( char **Buffer, UINT32 OldSize, UINT32 NewSize) { *Buffer = realloc (*Buffer, NewSize); if (*Buffer) { memset (*Buffer + OldSize, 0, NewSize - OldSize); return; } printf ("Could not increase line buffer size from %u to %u\n", OldSize, NewSize); AslError (ASL_ERROR, ASL_MSG_BUFFER_ALLOCATION, NULL, NULL); AslAbort (); } /****************************************************************************** * * FUNCTION: UtFreeLineBuffers * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Free all line buffers * *****************************************************************************/ void UtFreeLineBuffers ( void) { free (AslGbl_CurrentLineBuffer); free (AslGbl_MainTokenBuffer); free (AslGbl_MacroTokenBuffer); free (AslGbl_MacroTokenReplaceBuffer); free (AslGbl_ExpressionTokenBuffer); } src/acpica/source/compiler/aslanalyze.c000066400000000000000000000622601465205512700205230ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslanalyze.c - Support functions for parse tree walks * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acnamesp.h" #include #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslanalyze") /* Local Prototypes */ static ACPI_STATUS ApDeviceSubtreeWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); /******************************************************************************* * * FUNCTION: AnIsInternalMethod * * PARAMETERS: Op - Current op * * RETURN: Boolean * * DESCRIPTION: Check for an internal control method. * ******************************************************************************/ BOOLEAN AnIsInternalMethod ( ACPI_PARSE_OBJECT *Op) { if ((!strcmp (Op->Asl.ExternalName, "\\_OSI")) || (!strcmp (Op->Asl.ExternalName, "_OSI"))) { return (TRUE); } return (FALSE); } /******************************************************************************* * * FUNCTION: AnGetInternalMethodReturnType * * PARAMETERS: Op - Current op * * RETURN: Btype * * DESCRIPTION: Get the return type of an internal method * ******************************************************************************/ UINT32 AnGetInternalMethodReturnType ( ACPI_PARSE_OBJECT *Op) { if ((!strcmp (Op->Asl.ExternalName, "\\_OSI")) || (!strcmp (Op->Asl.ExternalName, "_OSI"))) { return (ACPI_BTYPE_STRING); } return (0); } /******************************************************************************* * * FUNCTION: AnCheckId * * PARAMETERS: Op - Current parse op * Type - HID or CID * * RETURN: None * * DESCRIPTION: Perform various checks on _HID and _CID strings. Only limited * checks can be performed on _CID strings. * ******************************************************************************/ void AnCheckId ( ACPI_PARSE_OBJECT *Op, ACPI_NAME Type) { UINT32 i; ACPI_SIZE Length; /* Only care about string versions of _HID/_CID (integers are legal) */ if (Op->Asl.ParseOpcode != PARSEOP_STRING_LITERAL) { return; } /* For both _HID and _CID, the string must be non-null */ Length = strlen (Op->Asl.Value.String); if (!Length) { AslError (ASL_ERROR, ASL_MSG_NULL_STRING, Op, NULL); return; } /* * One of the things we want to catch here is the use of a leading * asterisk in the string -- an odd construct that certain platform * manufacturers are fond of. Technically, a leading asterisk is OK * for _CID, but a valid use of this has not been seen. */ if (*Op->Asl.Value.String == '*') { AslError (ASL_ERROR, ASL_MSG_LEADING_ASTERISK, Op, Op->Asl.Value.String); return; } /* _CID strings are bus-specific, no more checks can be performed */ if (Type == ASL_TYPE_CID) { return; } /* For _HID, all characters must be alphanumeric */ for (i = 0; Op->Asl.Value.String[i]; i++) { if (!isalnum ((int) Op->Asl.Value.String[i])) { AslError (ASL_ERROR, ASL_MSG_ALPHANUMERIC_STRING, Op, Op->Asl.Value.String); return; } } /* * _HID String must be one of these forms: * * "AAA####" A is an uppercase letter and # is a hex digit * "ACPI####" # is a hex digit * "NNNN####" N is an uppercase letter or decimal digit (0-9) * # is a hex digit (ACPI 5.0) */ if ((Length < 7) || (Length > 8)) { AslError (ASL_ERROR, ASL_MSG_HID_LENGTH, Op, Op->Asl.Value.String); return; } /* _HID Length is valid (7 or 8), now check prefix (first 3 or 4 chars) */ if (Length == 7) { /* AAA####: Ensure the alphabetic prefix is all uppercase */ for (i = 0; i < 3; i++) { if (!isupper ((int) Op->Asl.Value.String[i])) { AslError (ASL_ERROR, ASL_MSG_UPPER_CASE, Op, &Op->Asl.Value.String[i]); return; } } } else /* Length == 8 */ { /* * ACPI#### or NNNN####: * Ensure the prefix contains only uppercase alpha or decimal digits */ for (i = 0; i < 4; i++) { if (!isupper ((int) Op->Asl.Value.String[i]) && !isdigit ((int) Op->Asl.Value.String[i])) { AslError (ASL_ERROR, ASL_MSG_HID_PREFIX, Op, &Op->Asl.Value.String[i]); return; } } } /* Remaining characters (suffix) must be hex digits */ for (; i < Length; i++) { if (!isxdigit ((int) Op->Asl.Value.String[i])) { AslError (ASL_ERROR, ASL_MSG_HID_SUFFIX, Op, &Op->Asl.Value.String[i]); break; } } } /******************************************************************************* * * FUNCTION: AnLastStatementIsReturn * * PARAMETERS: Op - A method parse node * * RETURN: TRUE if last statement is an ASL RETURN. False otherwise * * DESCRIPTION: Walk down the list of top level statements within a method * to find the last one. Check if that last statement is in * fact a RETURN statement. * ******************************************************************************/ BOOLEAN AnLastStatementIsReturn ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next; /* Check if last statement is a return */ Next = ASL_GET_CHILD_NODE (Op); while (Next) { if ((!Next->Asl.Next) && (Next->Asl.ParseOpcode == PARSEOP_RETURN)) { return (TRUE); } Next = ASL_GET_PEER_NODE (Next); } return (FALSE); } /******************************************************************************* * * FUNCTION: AnCheckMethodReturnValue * * PARAMETERS: Op - Parent * OpInfo - Parent info * ArgOp - Method invocation op * RequiredBtypes - What caller requires * ThisNodeBtype - What this node returns (if anything) * * RETURN: None * * DESCRIPTION: Check a method invocation for 1) A return value and if it does * in fact return a value, 2) check the type of the return value. * ******************************************************************************/ void AnCheckMethodReturnValue ( ACPI_PARSE_OBJECT *Op, const ACPI_OPCODE_INFO *OpInfo, ACPI_PARSE_OBJECT *ArgOp, UINT32 RequiredBtypes, UINT32 ThisNodeBtype) { ACPI_PARSE_OBJECT *OwningOp; ACPI_NAMESPACE_NODE *Node; char *ExternalPath; Node = ArgOp->Asl.Node; if (!Node) { /* No error message, this can happen and is OK */ return; } /* Examine the parent op of this method */ OwningOp = Node->Op; ExternalPath = AcpiNsGetNormalizedPathname (Node, TRUE); if (OwningOp->Asl.CompileFlags & OP_METHOD_NO_RETVAL) { /* Method NEVER returns a value */ AslError (ASL_ERROR, ASL_MSG_NO_RETVAL, Op, ExternalPath); } else if (OwningOp->Asl.CompileFlags & OP_METHOD_SOME_NO_RETVAL) { /* Method SOMETIMES returns a value, SOMETIMES not */ AslError (ASL_WARNING, ASL_MSG_SOME_NO_RETVAL, Op, ExternalPath); } else if (!(ThisNodeBtype & RequiredBtypes)) { /* Method returns a value, but the type is wrong */ AnFormatBtype (AslGbl_StringBuffer, ThisNodeBtype); AnFormatBtype (AslGbl_StringBuffer2, RequiredBtypes); /* * The case where the method does not return any value at all * was already handled in the namespace cross reference * -- Only issue an error if the method in fact returns a value, * but it is of the wrong type */ if (ThisNodeBtype != 0) { sprintf (AslGbl_MsgBuffer, "Method returns [%s], %s operator requires [%s]", AslGbl_StringBuffer, OpInfo->Name, AslGbl_StringBuffer2); AslError (ASL_WARNING, ASL_MSG_INVALID_TYPE, ArgOp, AslGbl_MsgBuffer); } } if (ExternalPath) { ACPI_FREE (ExternalPath); } } /******************************************************************************* * * FUNCTION: AnIsResultUsed * * PARAMETERS: Op - Parent op for the operator * * RETURN: TRUE if result from this operation is actually consumed * * DESCRIPTION: Determine if the function result value from an operator is * used. * ******************************************************************************/ BOOLEAN AnIsResultUsed ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Parent; switch (Op->Asl.ParseOpcode) { case PARSEOP_INCREMENT: case PARSEOP_DECREMENT: /* These are standalone operators, no return value */ return (TRUE); default: break; } /* Examine parent to determine if the return value is used */ Parent = Op->Asl.Parent; switch (Parent->Asl.ParseOpcode) { /* If/While - check if the operator is the predicate */ case PARSEOP_IF: case PARSEOP_WHILE: /* First child is the predicate */ if (Parent->Asl.Child == Op) { return (TRUE); } return (FALSE); /* Not used if one of these is the parent */ case PARSEOP_METHOD: case PARSEOP_DEFINITION_BLOCK: case PARSEOP_ELSE: return (FALSE); default: /* Any other type of parent means that the result is used */ return (TRUE); } } /******************************************************************************* * * FUNCTION: ApCheckForGpeNameConflict * * PARAMETERS: Op - Current parse op * * RETURN: None * * DESCRIPTION: Check for a conflict between GPE names within this scope. * Conflict means two GPE names with the same GPE number, but * different types -- such as _L1C and _E1C. * ******************************************************************************/ void ApCheckForGpeNameConflict ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *NextOp; UINT32 GpeNumber; char Name[ACPI_NAMESEG_SIZE + 1]; char Target[ACPI_NAMESEG_SIZE]; /* Need a null-terminated string version of NameSeg */ ACPI_MOVE_32_TO_32 (Name, Op->Asl.NameSeg); Name[ACPI_NAMESEG_SIZE] = 0; /* * For a GPE method: * 1st char must be underscore * 2nd char must be L or E * 3rd/4th chars must be a hex number */ if ((Name[0] != '_') || ((Name[1] != 'L') && (Name[1] != 'E'))) { return; } /* Verify 3rd/4th chars are a valid hex value */ GpeNumber = strtoul (&Name[2], NULL, 16); if (GpeNumber == ACPI_UINT32_MAX) { return; } /* * We are now sure we have an _Lxx or _Exx. * Create the target name that would cause collision (Flip E/L) */ ACPI_MOVE_32_TO_32 (Target, Name); /* Inject opposite letter ("L" versus "E") */ if (Name[1] == 'L') { Target[1] = 'E'; } else /* Name[1] == 'E' */ { Target[1] = 'L'; } /* Search all peers (objects within this scope) for target match */ NextOp = Op->Asl.Next; while (NextOp) { /* * We mostly care about methods, but check Name() constructs also, * even though they will get another error for not being a method. * All GPE names must be defined as control methods. */ if ((NextOp->Asl.ParseOpcode == PARSEOP_METHOD) || (NextOp->Asl.ParseOpcode == PARSEOP_NAME)) { if (ACPI_COMPARE_NAMESEG (Target, NextOp->Asl.NameSeg)) { /* Found both _Exy and _Lxy in the same scope, error */ AslError (ASL_ERROR, ASL_MSG_GPE_NAME_CONFLICT, NextOp, Name); return; } } NextOp = NextOp->Asl.Next; } /* OK, no conflict found */ return; } /******************************************************************************* * * FUNCTION: ApCheckRegMethod * * PARAMETERS: Op - Current parse op * * RETURN: None * * DESCRIPTION: Ensure that a _REG method has a corresponding Operation * Region declaration within the same scope. Note: _REG is defined * to have two arguments and must therefore be defined as a * control method. * ******************************************************************************/ void ApCheckRegMethod ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next; ACPI_PARSE_OBJECT *Parent; /* We are only interested in _REG methods */ if (!ACPI_COMPARE_NAMESEG (METHOD_NAME__REG, &Op->Asl.NameSeg)) { return; } /* Get the start of the current scope */ Parent = Op->Asl.Parent; Next = Parent->Asl.Child; /* Search entire scope for an operation region declaration */ while (Next) { if (Next->Asl.ParseOpcode == PARSEOP_OPERATIONREGION) { return; /* Found region, OK */ } Next = Next->Asl.Next; } /* No region found, issue warning */ AslError (ASL_WARNING, ASL_MSG_NO_REGION, Op, NULL); } /******************************************************************************* * * FUNCTION: ApFindNameInDeviceTree * * PARAMETERS: Name - Name to search for * Op - Current parse op * * RETURN: TRUE if name found in the same scope as Op. * * DESCRIPTION: Determine if a name appears in the same scope as Op, as either * a Method() or a Name(). "Same scope" can mean under an If or * Else statement. * * NOTE: Detects _HID/_ADR in this type of construct (legal in ACPI 6.1+) * * Scope (\_SB.PCI0) * { * Device (I2C0) * { * If (SMD0 != 4) { * Name (_HID, "INT3442") * } Else { * Name (_ADR, 0x400) * } * } * } ******************************************************************************/ BOOLEAN ApFindNameInDeviceTree ( char *Name, ACPI_PARSE_OBJECT *Op) { ACPI_STATUS Status; Status = TrWalkParseTree (Op, ASL_WALK_VISIT_DOWNWARD, ApDeviceSubtreeWalk, NULL, Name); if (Status == AE_CTRL_TRUE) { return (TRUE); /* Found a match */ } return (FALSE); } /* Callback function for interface above */ static ACPI_STATUS ApDeviceSubtreeWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { char *Name = ACPI_CAST_PTR (char, Context); switch (Op->Asl.ParseOpcode) { case PARSEOP_DEVICE: /* Level 0 is the starting device, ignore it */ if (Level > 0) { /* Ignore sub-devices */ return (AE_CTRL_DEPTH); } break; case PARSEOP_NAME: case PARSEOP_METHOD: /* These are what we are looking for */ if (ACPI_COMPARE_NAMESEG (Name, Op->Asl.NameSeg)) { return (AE_CTRL_TRUE); } return (AE_CTRL_DEPTH); case PARSEOP_SCOPE: case PARSEOP_FIELD: case PARSEOP_OPERATIONREGION: /* * We want to ignore these, because either they can be large * subtrees or open a scope to somewhere else. */ return (AE_CTRL_DEPTH); default: break; } return (AE_OK); } /******************************************************************************* * * FUNCTION: ApFindNameInScope * * PARAMETERS: Name - Name to search for * Op - Current parse op * * RETURN: TRUE if name found in the same scope as Op. * * DESCRIPTION: Determine if a name appears in the same scope as Op, as either * a Method() or a Name(). * ******************************************************************************/ BOOLEAN ApFindNameInScope ( char *Name, ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next; ACPI_PARSE_OBJECT *Parent; /* Get the start of the current scope */ Parent = Op->Asl.Parent; Next = Parent->Asl.Child; /* Search entire scope for a match to the name */ while (Next) { if ((Next->Asl.ParseOpcode == PARSEOP_METHOD) || (Next->Asl.ParseOpcode == PARSEOP_NAME)) { if (ACPI_COMPARE_NAMESEG (Name, Next->Asl.NameSeg)) { return (TRUE); } } Next = Next->Asl.Next; } return (FALSE); } src/acpica/source/compiler/aslascii.c000066400000000000000000000341571465205512700201540ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslascii - ASCII detection and support routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include #include #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslascii") /* Local prototypes */ static void FlConsumeAnsiComment ( FILE *Handle, ASL_FILE_STATUS *Status); static void FlConsumeNewComment ( FILE *Handle, ASL_FILE_STATUS *Status); /******************************************************************************* * * FUNCTION: FlIsFileAsciiSource * * PARAMETERS: Filename - Full input filename * DisplayErrors - TRUE if error messages desired * * RETURN: Status * * DESCRIPTION: Verify that the input file is entirely ASCII. Ignores characters * within comments. Note: does not handle nested comments and does * not handle comment delimiters within string literals. However, * on the rare chance this happens and an invalid character is * missed, the parser will catch the error by failing in some * spectacular manner. * ******************************************************************************/ ACPI_STATUS FlIsFileAsciiSource ( char *Filename, BOOLEAN DisplayErrors) { UINT8 Byte; UINT32 BadBytes = 0; BOOLEAN OpeningComment = FALSE; ASL_FILE_STATUS Status; FILE *Handle; /* Open file in text mode so file offset is always accurate */ Handle = fopen (Filename, "rb"); if (!Handle) { perror ("Could not open input file"); return (AE_ERROR); } Status.Line = 1; Status.Offset = 0; /* Read the entire file */ while (fread (&Byte, 1, 1, Handle) == 1) { /* Ignore comment fields (allow non-ASCII within) */ if (OpeningComment) { /* Check for second comment open delimiter */ if (Byte == '*') { FlConsumeAnsiComment (Handle, &Status); } if (Byte == '/') { FlConsumeNewComment (Handle, &Status); } /* Reset */ OpeningComment = FALSE; } else if (Byte == '/') { OpeningComment = TRUE; } /* Check for an ASCII character */ if (!ACPI_IS_ASCII (Byte)) { if ((BadBytes < 10) && (DisplayErrors)) { AcpiOsPrintf ( "Found non-ASCII character in source text: " "0x%2.2X in line %u, file offset 0x%2.2X\n", Byte, Status.Line, Status.Offset); } BadBytes++; } /* Ensure character is either printable or a "space" char */ else if (!isprint (Byte) && !isspace (Byte)) { if ((BadBytes < 10) && (DisplayErrors)) { AcpiOsPrintf ( "Found invalid character in source text: " "0x%2.2X in line %u, file offset 0x%2.2X\n", Byte, Status.Line, Status.Offset); } BadBytes++; } /* Update line counter as necessary */ if (Byte == 0x0A) { Status.Line++; } Status.Offset++; } fclose (Handle); /* Were there any non-ASCII characters in the file? */ if (BadBytes) { fprintf (stderr, "File appears to be binary: found %u non-ASCII characters, disassembling\n", BadBytes); if (DisplayErrors) { AcpiOsPrintf ( "Total %u invalid characters found in input source text, " "could be a binary file\n", BadBytes); AslError (ASL_ERROR, ASL_MSG_NON_ASCII, NULL, Filename); } return (AE_BAD_CHARACTER); } /* File is OK (100% ASCII) */ return (AE_OK); } /******************************************************************************* * * FUNCTION: FlConsumeAnsiComment * * PARAMETERS: Handle - Open input file * Status - File current status struct * * RETURN: Number of lines consumed * * DESCRIPTION: Step over a normal slash-star type comment * ******************************************************************************/ static void FlConsumeAnsiComment ( FILE *Handle, ASL_FILE_STATUS *Status) { UINT8 Byte; BOOLEAN ClosingComment = FALSE; while (fread (&Byte, 1, 1, Handle) == 1) { /* Scan until comment close is found */ if (ClosingComment) { if (Byte == '/') { Status->Offset++; return; } if (Byte != '*') { /* Reset */ ClosingComment = FALSE; } } else if (Byte == '*') { ClosingComment = TRUE; } /* Maintain line count */ if (Byte == 0x0A) { Status->Line++; } Status->Offset++; } } /******************************************************************************* * * FUNCTION: FlConsumeNewComment * * PARAMETERS: Handle - Open input file * Status - File current status struct * * RETURN: Number of lines consumed * * DESCRIPTION: Step over a slash-slash type of comment * ******************************************************************************/ static void FlConsumeNewComment ( FILE *Handle, ASL_FILE_STATUS *Status) { UINT8 Byte; while (fread (&Byte, 1, 1, Handle) == 1) { Status->Offset++; /* Comment ends at newline */ if (Byte == 0x0A) { Status->Line++; return; } } } src/acpica/source/compiler/aslbtypes.c000066400000000000000000000524201465205512700203630ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslbtypes - Support for bitfield types * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "amlcode.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslbtypes") /* Local prototypes */ static UINT32 AnMapEtypeToBtype ( UINT32 Etype); /******************************************************************************* * * FUNCTION: AnMapArgTypeToBtype * * PARAMETERS: ArgType - The ARGI required type(s) for this * argument, from the opcode info table * * RETURN: The corresponding Bit-encoded types * * DESCRIPTION: Convert an encoded ARGI required argument type code into a * bitfield type code. Implements the implicit source conversion * rules. * ******************************************************************************/ UINT32 AnMapArgTypeToBtype ( UINT32 ArgType) { switch (ArgType) { /* Simple types */ case ARGI_ANYTYPE: return (ACPI_BTYPE_OBJECTS_AND_REFS); case ARGI_PACKAGE: return (ACPI_BTYPE_PACKAGE); case ARGI_EVENT: return (ACPI_BTYPE_EVENT); case ARGI_MUTEX: return (ACPI_BTYPE_MUTEX); case ARGI_DDBHANDLE: /* * DDBHandleObject := SuperName * ACPI_BTYPE_REFERENCE_OBJECT: * Index reference as parameter of Load/Unload */ return (ACPI_BTYPE_DDB_HANDLE | ACPI_BTYPE_REFERENCE_OBJECT); /* Interchangeable types */ /* * Source conversion rules: * Integer, String, and Buffer are all interchangeable */ case ARGI_INTEGER: case ARGI_STRING: case ARGI_BUFFER: case ARGI_BUFFER_OR_STRING: case ARGI_COMPUTEDATA: return (ACPI_BTYPE_COMPUTE_DATA); /* References */ case ARGI_INTEGER_REF: return (ACPI_BTYPE_INTEGER); case ARGI_OBJECT_REF: return (ACPI_BTYPE_ALL_OBJECTS); case ARGI_DEVICE_REF: return (ACPI_BTYPE_DEVICE_OBJECTS); case ARGI_REFERENCE: return (ACPI_BTYPE_NAMED_REFERENCE); /* Name or Namestring */ case ARGI_TARGETREF: /* * Target operand for most math and logic operators. * Package objects not allowed as target. */ return (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_DEBUG_OBJECT | ACPI_BTYPE_REFERENCE_OBJECT); case ARGI_STORE_TARGET: /* Special target for Store(), includes packages */ return (ACPI_BTYPE_DATA | ACPI_BTYPE_DEBUG_OBJECT | ACPI_BTYPE_REFERENCE_OBJECT); case ARGI_FIXED_TARGET: case ARGI_SIMPLE_TARGET: return (ACPI_BTYPE_OBJECTS_AND_REFS); /* Complex types */ case ARGI_DATAOBJECT: /* * Buffer, string, package or reference to a Op - * Used only by SizeOf operator */ return (ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER | ACPI_BTYPE_PACKAGE | ACPI_BTYPE_REFERENCE_OBJECT); case ARGI_COMPLEXOBJ: /* Buffer, String, or package */ return (ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER | ACPI_BTYPE_PACKAGE); case ARGI_REF_OR_STRING: /* Used by DeRefOf operator only */ return (ACPI_BTYPE_STRING | ACPI_BTYPE_REFERENCE_OBJECT); case ARGI_REGION_OR_BUFFER: /* Used by Load() only. Allow buffers in addition to regions/fields */ return (ACPI_BTYPE_REGION | ACPI_BTYPE_BUFFER | ACPI_BTYPE_FIELD_UNIT); case ARGI_DATAREFOBJ: /* Used by Store() only, as the source operand */ return (ACPI_BTYPE_DATA_REFERENCE | ACPI_BTYPE_REFERENCE_OBJECT); default: break; } return (ACPI_BTYPE_OBJECTS_AND_REFS); } /******************************************************************************* * * FUNCTION: AnMapEtypeToBtype * * PARAMETERS: Etype - Encoded ACPI Type * * RETURN: Btype corresponding to the Etype * * DESCRIPTION: Convert an encoded ACPI type to a bitfield type applying the * operand conversion rules. In other words, returns the type(s) * this Etype is implicitly converted to during interpretation. * ******************************************************************************/ static UINT32 AnMapEtypeToBtype ( UINT32 Etype) { if (Etype == ACPI_TYPE_ANY) { return (ACPI_BTYPE_OBJECTS_AND_REFS); } /* Try the standard ACPI data types */ if (Etype <= ACPI_TYPE_EXTERNAL_MAX) { /* * This switch statement implements the allowed operand conversion * rules as per the "ASL Data Types" section of the ACPI * specification. */ switch (Etype) { case ACPI_TYPE_INTEGER: return (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_DDB_HANDLE); case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: return (ACPI_BTYPE_COMPUTE_DATA); case ACPI_TYPE_PACKAGE: return (ACPI_BTYPE_PACKAGE); case ACPI_TYPE_FIELD_UNIT: return (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_FIELD_UNIT); case ACPI_TYPE_BUFFER_FIELD: return (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_BUFFER_FIELD); case ACPI_TYPE_DDB_HANDLE: return (ACPI_BTYPE_INTEGER | ACPI_BTYPE_DDB_HANDLE); case ACPI_TYPE_DEBUG_OBJECT: /* Cannot be used as a source operand */ return (0); default: return (1 << (Etype - 1)); } } /* Try the internal data types */ switch (Etype) { case ACPI_TYPE_LOCAL_REGION_FIELD: case ACPI_TYPE_LOCAL_BANK_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD: /* Named fields can be either Integer/Buffer/String */ return (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_FIELD_UNIT); case ACPI_TYPE_LOCAL_ALIAS: return (ACPI_BTYPE_INTEGER); case ACPI_TYPE_LOCAL_RESOURCE: case ACPI_TYPE_LOCAL_RESOURCE_FIELD: return (ACPI_BTYPE_REFERENCE_OBJECT); default: printf ("Unhandled encoded type: %X\n", Etype); return (0); } } /******************************************************************************* * * FUNCTION: AnFormatBtype * * PARAMETERS: Btype - Bitfield of ACPI types * Buffer - Where to put the ascii string * * RETURN: None. * * DESCRIPTION: Convert a Btype to a string of ACPI types * ******************************************************************************/ void AnFormatBtype ( char *Buffer, UINT32 Btype) { UINT32 Type; BOOLEAN First = TRUE; *Buffer = 0; if (Btype == 0) { strcat (Buffer, "NoReturnValue"); return; } for (Type = 1; Type <= ACPI_TYPE_EXTERNAL_MAX; Type++) { if (Btype & 0x00000001) { if (!First) { strcat (Buffer, "|"); } First = FALSE; strcat (Buffer, AcpiUtGetTypeName (Type)); } Btype >>= 1; } if (Btype & 0x00000001) { if (!First) { strcat (Buffer, "|"); } First = FALSE; strcat (Buffer, "Reference"); } Btype >>= 1; if (Btype & 0x00000001) { if (!First) { strcat (Buffer, "|"); } strcat (Buffer, "Resource"); } } /******************************************************************************* * * FUNCTION: AnGetBtype * * PARAMETERS: Op - Parse node whose type will be returned. * * RETURN: The Btype associated with the Op. * * DESCRIPTION: Get the (bitfield) ACPI type associated with the parse node. * Handles the case where the node is a name or method call and * the actual type must be obtained from the namespace node. * ******************************************************************************/ UINT32 AnGetBtype ( ACPI_PARSE_OBJECT *Op) { ACPI_NAMESPACE_NODE *Node; ACPI_PARSE_OBJECT *ReferencedNode; UINT32 ThisNodeBtype = 0; ACPI_FUNCTION_NAME (AnGetBtype); if (!Op) { AcpiOsPrintf ("Null Op in %s\n", ACPI_GET_FUNCTION_NAME); return (ACPI_UINT32_MAX); } if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) || (Op->Asl.ParseOpcode == PARSEOP_METHODCALL)) { Node = Op->Asl.Node; if (!Node) { /* These are not expected to have a node at this time */ if ((Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CREATEWORDFIELD) || (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CREATEDWORDFIELD) || (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CREATEQWORDFIELD) || (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CREATEBYTEFIELD) || (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CREATEBITFIELD) || (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CREATEFIELD) || (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CONDREFOF)) { return (ACPI_UINT32_MAX - 1); } DbgPrint (ASL_DEBUG_OUTPUT, "No attached Nsnode: [%s] at line %u name [%s], " "ignoring typecheck. Parent [%s]\n", Op->Asl.ParseOpName, Op->Asl.LineNumber, Op->Asl.ExternalName, Op->Asl.Parent->Asl.ParseOpName); return (ACPI_UINT32_MAX - 1); } ThisNodeBtype = AnMapEtypeToBtype (Node->Type); if (!ThisNodeBtype) { AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Op, "could not map type"); } if (Op->Asl.ParseOpcode == PARSEOP_METHODCALL) { ReferencedNode = Node->Op; if (!ReferencedNode) { /* Check for an internal method */ if (AnIsInternalMethod (Op)) { return (AnGetInternalMethodReturnType (Op)); } AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Op, "null Op pointer"); return (ACPI_UINT32_MAX); } if (ReferencedNode->Asl.CompileFlags & OP_METHOD_TYPED) { ThisNodeBtype = ReferencedNode->Asl.AcpiBtype; } else { return (ACPI_UINT32_MAX -1); } } } else { ThisNodeBtype = Op->Asl.AcpiBtype; } return (ThisNodeBtype); } /******************************************************************************* * * FUNCTION: AnMapObjTypeToBtype * * PARAMETERS: Op - A parse node * * RETURN: A Btype * * DESCRIPTION: Map object to the associated "Btype" * ******************************************************************************/ UINT32 AnMapObjTypeToBtype ( ACPI_PARSE_OBJECT *Op) { switch (Op->Asl.ParseOpcode) { case PARSEOP_OBJECTTYPE_BFF: /* "BuffFieldObj" */ return (ACPI_BTYPE_BUFFER_FIELD); case PARSEOP_OBJECTTYPE_BUF: /* "BuffObj" */ return (ACPI_BTYPE_BUFFER); case PARSEOP_OBJECTTYPE_DDB: /* "DDBHandleObj" */ return (ACPI_BTYPE_DDB_HANDLE); case PARSEOP_OBJECTTYPE_DEV: /* "DeviceObj" */ return (ACPI_BTYPE_DEVICE); case PARSEOP_OBJECTTYPE_EVT: /* "EventObj" */ return (ACPI_BTYPE_EVENT); case PARSEOP_OBJECTTYPE_FLD: /* "FieldUnitObj" */ return (ACPI_BTYPE_FIELD_UNIT); case PARSEOP_OBJECTTYPE_INT: /* "IntObj" */ return (ACPI_BTYPE_INTEGER); case PARSEOP_OBJECTTYPE_MTH: /* "MethodObj" */ return (ACPI_BTYPE_METHOD); case PARSEOP_OBJECTTYPE_MTX: /* "MutexObj" */ return (ACPI_BTYPE_MUTEX); case PARSEOP_OBJECTTYPE_OPR: /* "OpRegionObj" */ return (ACPI_BTYPE_REGION); case PARSEOP_OBJECTTYPE_PKG: /* "PkgObj" */ return (ACPI_BTYPE_PACKAGE); case PARSEOP_OBJECTTYPE_POW: /* "PowerResObj" */ return (ACPI_BTYPE_POWER); case PARSEOP_OBJECTTYPE_STR: /* "StrObj" */ return (ACPI_BTYPE_STRING); case PARSEOP_OBJECTTYPE_THZ: /* "ThermalZoneObj" */ return (ACPI_BTYPE_THERMAL); case PARSEOP_OBJECTTYPE_UNK: /* "UnknownObj" */ return (ACPI_BTYPE_OBJECTS_AND_REFS); default: return (0); } } #ifdef ACPI_OBSOLETE_FUNCTIONS /******************************************************************************* * * FUNCTION: AnMapBtypeToEtype * * PARAMETERS: Btype - Bitfield of ACPI types * * RETURN: The Etype corresponding the Btype * * DESCRIPTION: Convert a bitfield type to an encoded type * ******************************************************************************/ UINT32 AnMapBtypeToEtype ( UINT32 Btype) { UINT32 i; UINT32 Etype; if (Btype == 0) { return (0); } Etype = 1; for (i = 1; i < Btype; i *= 2) { Etype++; } return (Etype); } #endif src/acpica/source/compiler/aslcache.c000066400000000000000000000422531465205512700201230ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslcache -- Local cache support for iASL * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" /* * Local caches. The caches are fully deleted after the compilation/disassembly * of each individual input file. Thus, individual allocations from the cache * memory do not need to be freed or even released back into the cache. * * See aslallocate.c for standard heap allocations. */ /******************************************************************************* * * FUNCTION: UtLocalCacheCalloc * * PARAMETERS: Length - Size of buffer requested * * RETURN: Pointer to the buffer. Aborts compiler on allocation failure * * 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.) * ******************************************************************************/ char * UtLocalCacheCalloc ( UINT32 Length) { char *Buffer; ASL_CACHE_INFO *Cache; UINT32 CacheSize = ASL_STRING_CACHE_SIZE; #ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED /* Used for objects other than strings, so keep allocations aligned */ Length = ACPI_ROUND_UP_TO_NATIVE_WORD (Length); #endif if (Length > CacheSize) { CacheSize = Length; if (AslGbl_StringCacheList) { Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); /* Link new cache buffer just following head of list */ Cache->Next = AslGbl_StringCacheList->Next; AslGbl_StringCacheList->Next = Cache; /* Leave cache management pointers alone as they pertain to head */ AslGbl_StringCount++; AslGbl_StringSize += Length; return (Cache->Buffer); } } if ((AslGbl_StringCacheNext + Length) >= AslGbl_StringCacheLast) { /* Allocate a new buffer */ Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); /* Link new cache buffer to head of list */ Cache->Next = AslGbl_StringCacheList; AslGbl_StringCacheList = Cache; /* Setup cache management pointers */ AslGbl_StringCacheNext = Cache->Buffer; AslGbl_StringCacheLast = AslGbl_StringCacheNext + CacheSize; } AslGbl_StringCount++; AslGbl_StringSize += Length; Buffer = AslGbl_StringCacheNext; AslGbl_StringCacheNext += Length; return (Buffer); } /******************************************************************************* * * FUNCTION: UtParseOpCacheCalloc * * PARAMETERS: None * * RETURN: New parse op. Aborts on allocation failure * * DESCRIPTION: Allocate a new parse op for the parse tree. Bypass the local * dynamic memory manager for performance reasons (This has a * major impact on the speed of the compiler.) * ******************************************************************************/ ACPI_PARSE_OBJECT * UtParseOpCacheCalloc ( void) { ASL_CACHE_INFO *Cache; if (AslGbl_ParseOpCacheNext >= AslGbl_ParseOpCacheLast) { /* Allocate a new buffer */ Cache = UtLocalCalloc (sizeof (Cache->Next) + (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE)); /* Link new cache buffer to head of list */ Cache->Next = AslGbl_ParseOpCacheList; AslGbl_ParseOpCacheList = Cache; /* Setup cache management pointers */ AslGbl_ParseOpCacheNext = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Cache->Buffer); AslGbl_ParseOpCacheLast = AslGbl_ParseOpCacheNext + ASL_PARSEOP_CACHE_SIZE; } AslGbl_ParseOpCount++; return (AslGbl_ParseOpCacheNext++); } /******************************************************************************* * * FUNCTION: UtSubtableCacheCalloc - Data Table compiler * * PARAMETERS: None * * RETURN: Pointer to the buffer. Aborts on allocation failure * * DESCRIPTION: Allocate a subtable object buffer. Bypass the local * dynamic memory manager for performance reasons (This has a * major impact on the speed of the compiler.) * ******************************************************************************/ DT_SUBTABLE * UtSubtableCacheCalloc ( void) { ASL_CACHE_INFO *Cache; if (AslGbl_SubtableCacheNext >= AslGbl_SubtableCacheLast) { /* Allocate a new buffer */ Cache = UtLocalCalloc (sizeof (Cache->Next) + (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE)); /* Link new cache buffer to head of list */ Cache->Next = AslGbl_SubtableCacheList; AslGbl_SubtableCacheList = Cache; /* Setup cache management pointers */ AslGbl_SubtableCacheNext = ACPI_CAST_PTR (DT_SUBTABLE, Cache->Buffer); AslGbl_SubtableCacheLast = AslGbl_SubtableCacheNext + ASL_SUBTABLE_CACHE_SIZE; } AslGbl_SubtableCount++; return (AslGbl_SubtableCacheNext++); } /******************************************************************************* * * FUNCTION: UtFieldCacheCalloc - Data Table compiler * * PARAMETERS: None * * RETURN: Pointer to the buffer. Aborts on allocation failure * * DESCRIPTION: Allocate a field object buffer. Bypass the local * dynamic memory manager for performance reasons (This has a * major impact on the speed of the compiler.) * ******************************************************************************/ DT_FIELD * UtFieldCacheCalloc ( void) { ASL_CACHE_INFO *Cache; if (AslGbl_FieldCacheNext >= AslGbl_FieldCacheLast) { /* Allocate a new buffer */ Cache = UtLocalCalloc (sizeof (Cache->Next) + (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE)); /* Link new cache buffer to head of list */ Cache->Next = AslGbl_FieldCacheList; AslGbl_FieldCacheList = Cache; /* Setup cache management pointers */ AslGbl_FieldCacheNext = ACPI_CAST_PTR (DT_FIELD, Cache->Buffer); AslGbl_FieldCacheLast =AslGbl_FieldCacheNext + ASL_FIELD_CACHE_SIZE; } AslGbl_FieldCount++; return (AslGbl_FieldCacheNext++); } /******************************************************************************* * * FUNCTION: UtDeleteLocalCaches * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Delete all local cache buffer blocks * ******************************************************************************/ void UtDeleteLocalCaches ( void) { UINT32 BufferCount; ASL_CACHE_INFO *Next; /* * Generic cache, arbitrary size allocations */ BufferCount = 0; while (AslGbl_StringCacheList) { Next = AslGbl_StringCacheList->Next; ACPI_FREE (AslGbl_StringCacheList); AslGbl_StringCacheList = Next; BufferCount++; } DbgPrint (ASL_DEBUG_OUTPUT, "%u Strings (%u bytes), Buffer size: %u bytes, %u Buffers\n", AslGbl_StringCount, AslGbl_StringSize, ASL_STRING_CACHE_SIZE, BufferCount); /* Reset cache globals */ AslGbl_StringSize = 0; AslGbl_StringCount = 0; AslGbl_StringCacheNext = NULL; AslGbl_StringCacheLast = NULL; /* * Parse Op cache */ BufferCount = 0; while (AslGbl_ParseOpCacheList) { Next = AslGbl_ParseOpCacheList->Next; ACPI_FREE (AslGbl_ParseOpCacheList); AslGbl_ParseOpCacheList = Next; BufferCount++; } DbgPrint (ASL_DEBUG_OUTPUT, "%u ParseOps, Buffer size: %u ops (%u bytes), %u Buffers\n", AslGbl_ParseOpCount, ASL_PARSEOP_CACHE_SIZE, ((UINT32) sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE), BufferCount); /* Reset cache globals */ AslGbl_ParseOpCount = 0; AslGbl_ParseOpCacheNext = NULL; AslGbl_ParseOpCacheLast = NULL; AslGbl_ParseTreeRoot = NULL; /* * Table Compiler - Field cache */ BufferCount = 0; while (AslGbl_FieldCacheList) { Next = AslGbl_FieldCacheList->Next; ACPI_FREE (AslGbl_FieldCacheList); AslGbl_FieldCacheList = Next; BufferCount++; } DbgPrint (ASL_DEBUG_OUTPUT, "%u Fields, Buffer size: %u fields (%u bytes), %u Buffers\n", AslGbl_FieldCount, ASL_FIELD_CACHE_SIZE, ((UINT32) sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE), BufferCount); /* Reset cache globals */ AslGbl_FieldCount = 0; AslGbl_FieldCacheNext = NULL; AslGbl_FieldCacheLast = NULL; /* * Table Compiler - Subtable cache */ BufferCount = 0; while (AslGbl_SubtableCacheList) { Next = AslGbl_SubtableCacheList->Next; ACPI_FREE (AslGbl_SubtableCacheList); AslGbl_SubtableCacheList = Next; BufferCount++; } DbgPrint (ASL_DEBUG_OUTPUT, "%u Subtables, Buffer size: %u subtables (%u bytes), %u Buffers\n", AslGbl_SubtableCount, ASL_SUBTABLE_CACHE_SIZE, ((UINT32) sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE), BufferCount); /* Reset cache globals */ AslGbl_SubtableCount = 0; AslGbl_SubtableCacheNext = NULL; AslGbl_SubtableCacheLast = NULL; } src/acpica/source/compiler/aslcodegen.c000066400000000000000000000656351465205512700204750ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslcodegen - AML code generation * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "amlcode.h" #include "acconvert.h" #include "actbinfo.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslcodegen") /* Local prototypes */ static ACPI_STATUS CgAmlWriteWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static void CgWriteAmlOpcode ( ACPI_PARSE_OBJECT *Op); static void CgWriteTableHeader ( ACPI_PARSE_OBJECT *Op); static void CgWriteNode ( ACPI_PARSE_OBJECT *Op); static void CgUpdateHeader ( ACPI_PARSE_OBJECT *Op); static void CgUpdateCdatHeader ( ACPI_PARSE_OBJECT *Op); /******************************************************************************* * * FUNCTION: CgGenerateAmlOutput * * PARAMETERS: None. * * RETURN: None * * DESCRIPTION: Generate AML code. Currently generates the listing file * simultaneously. * ******************************************************************************/ void CgGenerateAmlOutput ( void) { /* Generate the AML output file */ TrWalkParseTree (AslGbl_CurrentDB, ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_DB_SEPARATELY, CgAmlWriteWalk, NULL, NULL); DbgPrint (ASL_TREE_OUTPUT, ASL_PARSE_TREE_HEADER2); if (AcpiGbl_CDAT) { CgUpdateCdatHeader (AslGbl_CurrentDB); } else { CgUpdateHeader (AslGbl_CurrentDB); } } /******************************************************************************* * * FUNCTION: CgAmlWriteWalk * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Parse tree walk to generate the AML code. * ******************************************************************************/ static ACPI_STATUS CgAmlWriteWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { /* Generate the AML for this node */ CgWriteNode (Op); if (!AslGbl_DebugFlag) { return (AE_OK); } /* Print header at level 0. Alignment assumes 32-bit pointers */ if (!Level) { DbgPrint (ASL_TREE_OUTPUT, "\nFinal parse tree used for AML output:\n"); DbgPrint (ASL_TREE_OUTPUT, ASL_PARSE_TREE_HEADER2); } /* Dump ParseOp name and possible value */ switch (Op->Asl.ParseOpcode) { case PARSEOP_NAMESEG: case PARSEOP_NAMESTRING: case PARSEOP_METHODCALL: case PARSEOP_STRING_LITERAL: UtDumpStringOp (Op, Level); break; default: UtDumpBasicOp (Op, Level); break; } DbgPrint (ASL_TREE_OUTPUT, ASL_PARSE_TREE_DEBUG2, /* 1 */ (UINT32) Op->Asl.Value.Integer, /* 2 */ Op->Asl.ParseOpcode, /* 3 */ Op->Asl.AmlOpcode, /* 4 */ Op->Asl.AmlOpcodeLength, /* 5 */ Op->Asl.AmlPkgLenBytes, /* 6 */ Op->Asl.AmlLength, /* 7 */ Op->Asl.AmlSubtreeLength, /* 8 */ Op->Asl.Parent ? Op->Asl.Parent->Asl.AmlSubtreeLength : 0, /* 9 */ Op, /* 10 */ Op->Asl.Parent, /* 11 */ Op->Asl.Child, /* 12 */ Op->Asl.Next, /* 13 */ Op->Asl.CompileFlags, /* 14 */ Op->Asl.AcpiBtype, /* 15 */ Op->Asl.FinalAmlLength, /* 16 */ Op->Asl.Column, /* 17 */ Op->Asl.LineNumber, /* 18 */ Op->Asl.EndLine, /* 19 */ Op->Asl.LogicalLineNumber, /* 20 */ Op->Asl.EndLogicalLine); TrPrintOpFlags (Op->Asl.CompileFlags, ASL_TREE_OUTPUT); DbgPrint (ASL_TREE_OUTPUT, "\n"); return (AE_OK); } /******************************************************************************* * * FUNCTION: CgLocalWriteAmlData * * PARAMETERS: Op - Current parse op * Buffer - Buffer to write * Length - Size of data in buffer * * RETURN: None * * DESCRIPTION: Write a buffer of AML data to the AML output file. * ******************************************************************************/ void CgLocalWriteAmlData ( ACPI_PARSE_OBJECT *Op, void *Buffer, UINT32 Length) { /* Write the raw data to the AML file */ FlWriteFile (ASL_FILE_AML_OUTPUT, Buffer, Length); /* Update the final AML length for this node (used for listings) */ if (Op) { Op->Asl.FinalAmlLength += Length; } } /******************************************************************************* * * FUNCTION: CgWriteAmlOpcode * * PARAMETERS: Op - Parse node with an AML opcode * * RETURN: None. * * DESCRIPTION: Write the AML opcode corresponding to a parse node. * ******************************************************************************/ static void CgWriteAmlOpcode ( ACPI_PARSE_OBJECT *Op) { UINT8 PkgLenFirstByte; UINT32 i; union { UINT16 Opcode; UINT8 OpcodeBytes[2]; } Aml; union { UINT32 Len; UINT8 LenBytes[4]; } PkgLen; /* We expect some DEFAULT_ARGs, just ignore them */ if (Op->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { return; } /* * Before printing the bytecode, generate comment byte codes * associated with this node. */ if (AcpiGbl_CaptureComments) { CgWriteAmlComment(Op); } switch (Op->Asl.AmlOpcode) { case AML_UNASSIGNED_OPCODE: /* These opcodes should not get here */ printf ("Found a node with an unassigned AML opcode\n"); FlPrintFile (ASL_FILE_STDERR, "Found a node with an unassigned AML opcode\n"); return; case AML_INT_RESERVEDFIELD_OP: /* Special opcodes for within a field definition */ Aml.Opcode = AML_FIELD_OFFSET_OP; break; case AML_INT_ACCESSFIELD_OP: Aml.Opcode = AML_FIELD_ACCESS_OP; break; case AML_INT_CONNECTION_OP: Aml.Opcode = AML_FIELD_CONNECTION_OP; break; default: Aml.Opcode = Op->Asl.AmlOpcode; break; } switch (Aml.Opcode) { case AML_PACKAGE_LENGTH: /* Value is the length to be encoded (Used in field definitions) */ PkgLen.Len = (UINT32) Op->Asl.Value.Integer; break; default: /* Check for two-byte opcode */ if (Aml.Opcode > 0x00FF) { /* Write the high byte first */ CgLocalWriteAmlData (Op, &Aml.OpcodeBytes[1], 1); } CgLocalWriteAmlData (Op, &Aml.OpcodeBytes[0], 1); /* Subtreelength doesn't include length of package length bytes */ PkgLen.Len = Op->Asl.AmlSubtreeLength + Op->Asl.AmlPkgLenBytes; break; } /* Does this opcode have an associated "PackageLength" field? */ if (Op->Asl.CompileFlags & OP_AML_PACKAGE) { if (Op->Asl.AmlPkgLenBytes == 1) { /* Simplest case -- no bytes to follow, just write the count */ CgLocalWriteAmlData (Op, &PkgLen.LenBytes[0], 1); } else if (Op->Asl.AmlPkgLenBytes != 0) { /* * Encode the "bytes to follow" in the first byte, top two bits. * The low-order nybble of the length is in the bottom 4 bits */ PkgLenFirstByte = (UINT8) (((UINT32) (Op->Asl.AmlPkgLenBytes - 1) << 6) | (PkgLen.LenBytes[0] & 0x0F)); CgLocalWriteAmlData (Op, &PkgLenFirstByte, 1); /* * Shift the length over by the 4 bits we just stuffed * in the first byte */ PkgLen.Len >>= 4; /* * Now we can write the remaining bytes - * either 1, 2, or 3 bytes */ for (i = 0; i < (UINT32) (Op->Asl.AmlPkgLenBytes - 1); i++) { CgLocalWriteAmlData (Op, &PkgLen.LenBytes[i], 1); } } } switch (Aml.Opcode) { case AML_BYTE_OP: CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 1); break; case AML_WORD_OP: CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 2); break; case AML_DWORD_OP: CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 4); break; case AML_QWORD_OP: CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 8); break; case AML_STRING_OP: CgLocalWriteAmlData (Op, Op->Asl.Value.String, Op->Asl.AmlLength); break; default: /* All data opcodes must appear above */ break; } } /******************************************************************************* * * FUNCTION: CgWriteTableHeader * * PARAMETERS: Op - The DEFINITIONBLOCK node * * RETURN: None * * DESCRIPTION: Write a table header corresponding to the DEFINITIONBLOCK * * NOTE: Input strings should be validated before this function is invoked. * ******************************************************************************/ static void CgWriteTableHeader ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Child; UINT32 CommentLength; ACPI_COMMENT_NODE *Current; memset (&AslGbl_TableHeader, 0, sizeof (ACPI_TABLE_HEADER)); /* AML filename */ Child = Op->Asl.Child; /* Signature */ Child = Child->Asl.Next; /* * For ASL-/ASL+ converter: replace the table signature with * "XXXX" and save the original table signature. This results in an AML * file with the signature "XXXX". The converter should remove this AML * file. In the event where this AML file does not get deleted, the * "XXXX" table signature prevents this AML file from running on the AML * interpreter. */ if (AcpiGbl_CaptureComments) { ACPI_COPY_NAMESEG (AcpiGbl_TableSig, Child->Asl.Value.String); Child->Asl.Value.String = ACPI_SIG_XXXX; } ACPI_COPY_NAMESEG (AslGbl_TableHeader.Signature, Child->Asl.Value.String); /* Revision */ Child = Child->Asl.Next; AslGbl_TableHeader.Revision = (UINT8) Child->Asl.Value.Integer; /* Command-line Revision override */ if (AslGbl_RevisionOverride) { AslGbl_TableHeader.Revision = AslGbl_RevisionOverride; } /* OEMID */ Child = Child->Asl.Next; memcpy (AslGbl_TableHeader.OemId, Child->Asl.Value.String, strlen (Child->Asl.Value.String)); /* OEM TableID */ Child = Child->Asl.Next; memcpy (AslGbl_TableHeader.OemTableId, Child->Asl.Value.String, strlen (Child->Asl.Value.String)); /* OEM Revision */ Child = Child->Asl.Next; AslGbl_TableHeader.OemRevision = (UINT32) Child->Asl.Value.Integer; /* Compiler ID */ ACPI_COPY_NAMESEG (AslGbl_TableHeader.AslCompilerId, ASL_CREATOR_ID); /* Compiler version */ AslGbl_TableHeader.AslCompilerRevision = ACPI_CA_VERSION; /* Table length. Checksum zero for now, will rewrite later */ AslGbl_TableHeader.Length = sizeof (ACPI_TABLE_HEADER) + Op->Asl.AmlSubtreeLength; /* Calculate the comment lengths for this definition block parseOp */ if (AcpiGbl_CaptureComments) { CvDbgPrint ("Calculating comment lengths for %s in write header\n", Op->Asl.ParseOpName); /* * Take the filename without extensions, add 3 for the new extension * and another 3 for the a908 bytecode and null terminator. */ AslGbl_TableHeader.Length += strrchr (AslGbl_ParseTreeRoot->Asl.Filename, '.') - AslGbl_ParseTreeRoot->Asl.Filename + 1 + 3 + 3; Op->Asl.AmlSubtreeLength += strlen (AslGbl_ParseTreeRoot->Asl.Filename) + 3; CvDbgPrint (" Length: %u\n", (UINT32) strlen (AslGbl_ParseTreeRoot->Asl.Filename) + 3); if (Op->Asl.CommentList) { Current = Op->Asl.CommentList; while (Current) { CommentLength = strlen (Current->Comment)+3; CvDbgPrint ("Length of standard comment): %d\n", CommentLength); CvDbgPrint (" Comment string: %s\n\n", Current->Comment); AslGbl_TableHeader.Length += CommentLength; Op->Asl.AmlSubtreeLength += CommentLength; Current = Current->Next; CvDbgPrint (" Length: %u\n", CommentLength); } } if (Op->Asl.CloseBraceComment) { CommentLength = strlen (Op->Asl.CloseBraceComment)+3; CvDbgPrint ("Length of inline comment +3: %d\n", CommentLength); CvDbgPrint (" Comment string: %s\n\n", Op->Asl.CloseBraceComment); AslGbl_TableHeader.Length += CommentLength; Op->Asl.AmlSubtreeLength += CommentLength; CvDbgPrint (" Length: %u\n", CommentLength); } } AslGbl_TableHeader.Checksum = 0; Op->Asl.FinalAmlOffset = ftell (AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle); /* Write entire header and clear the table header global */ CgLocalWriteAmlData (Op, &AslGbl_TableHeader, sizeof (ACPI_TABLE_HEADER)); memset (&AslGbl_TableHeader, 0, sizeof (ACPI_TABLE_HEADER)); } /******************************************************************************* * * FUNCTION: CgUpdateCdatHeader * * PARAMETERS: Op - Op for the Definition Block * * RETURN: None. * * DESCRIPTION: Complete the ACPI table by calculating the checksum and * re-writing the header for the input definition block * ******************************************************************************/ static void CgUpdateCdatHeader ( ACPI_PARSE_OBJECT *Op) { signed char Sum; UINT32 i; UINT32 Length; UINT8 FileByte; UINT8 Checksum; /* Calculate the checksum over the entire definition block */ Sum = 0; Length = sizeof (ACPI_TABLE_CDAT) + Op->Asl.AmlSubtreeLength; FlSeekFile (ASL_FILE_AML_OUTPUT, Op->Asl.FinalAmlOffset); for (i = 0; i < Length; i++) { if (FlReadFile (ASL_FILE_AML_OUTPUT, &FileByte, 1) != AE_OK) { AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, NULL, "Table length is greater than size of the input file"); return; } Sum = (signed char) (Sum + FileByte); } Checksum = (UINT8) (0 - Sum); DbgPrint (ASL_DEBUG_OUTPUT, "Computed checksum = %X\n", Checksum); /* Re-write the checksum byte */ FlSeekFile (ASL_FILE_AML_OUTPUT, Op->Asl.FinalAmlOffset + ACPI_CDAT_OFFSET (Checksum)); FlWriteFile (ASL_FILE_AML_OUTPUT, &Checksum, 1); /* * Seek to the end of the file. This is done to support multiple file * compilation. Doing this simplifies other parts of the codebase because * it eliminates the need to seek for a different starting place. */ FlSeekFile (ASL_FILE_AML_OUTPUT, Op->Asl.FinalAmlOffset + Length); } /******************************************************************************* * * FUNCTION: CgUpdateHeader * * PARAMETERS: Op - Op for the Definition Block * * RETURN: None. * * DESCRIPTION: Complete the ACPI table by calculating the checksum and * re-writing the header for the input definition block * ******************************************************************************/ static void CgUpdateHeader ( ACPI_PARSE_OBJECT *Op) { signed char Sum; UINT32 i; UINT32 Length; UINT8 FileByte; UINT8 Checksum; /* Calculate the checksum over the entire definition block */ Sum = 0; Length = sizeof (ACPI_TABLE_HEADER) + Op->Asl.AmlSubtreeLength; FlSeekFile (ASL_FILE_AML_OUTPUT, Op->Asl.FinalAmlOffset); for (i = 0; i < Length; i++) { if (FlReadFile (ASL_FILE_AML_OUTPUT, &FileByte, 1) != AE_OK) { AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, NULL, "Table length is greater than size of the input file"); return; } Sum = (signed char) (Sum + FileByte); } Checksum = (UINT8) (0 - Sum); /* Re-write the checksum byte */ FlSeekFile (ASL_FILE_AML_OUTPUT, Op->Asl.FinalAmlOffset + ACPI_OFFSET (ACPI_TABLE_HEADER, Checksum)); FlWriteFile (ASL_FILE_AML_OUTPUT, &Checksum, 1); /* * Seek to the end of the file. This is done to support multiple file * compilation. Doing this simplifies other parts of the codebase because * it eliminates the need to seek for a different starting place. */ FlSeekFile (ASL_FILE_AML_OUTPUT, Op->Asl.FinalAmlOffset + Length); } /******************************************************************************* * * FUNCTION: CgWriteNode * * PARAMETERS: Op - Parse node to write. * * RETURN: None. * * DESCRIPTION: Write the AML that corresponds to a parse node. * ******************************************************************************/ static void CgWriteNode ( ACPI_PARSE_OBJECT *Op) { ASL_RESOURCE_NODE *Rnode; /* Write all comments here. */ if (AcpiGbl_CaptureComments) { CgWriteAmlComment(Op); } /* Always check for DEFAULT_ARG and other "Noop" nodes */ /* TBD: this may not be the best place for this check */ if ((Op->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) || (Op->Asl.ParseOpcode == PARSEOP_INCLUDE) || (Op->Asl.ParseOpcode == PARSEOP_INCLUDE_END)) { return; } Op->Asl.FinalAmlLength = 0; switch (Op->Asl.AmlOpcode) { case AML_RAW_DATA_BYTE: case AML_RAW_DATA_WORD: case AML_RAW_DATA_DWORD: case AML_RAW_DATA_QWORD: CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, Op->Asl.AmlLength); return; case AML_RAW_DATA_BUFFER: CgLocalWriteAmlData (Op, Op->Asl.Value.Buffer, Op->Asl.AmlLength); return; case AML_RAW_DATA_CHAIN: Rnode = ACPI_CAST_PTR (ASL_RESOURCE_NODE, Op->Asl.Value.Buffer); while (Rnode) { CgLocalWriteAmlData (Op, Rnode->Buffer, Rnode->BufferLength); Rnode = Rnode->Next; } return; default: /* Internal data opcodes must all appear above */ break; } switch (Op->Asl.ParseOpcode) { case PARSEOP_DEFAULT_ARG: break; case PARSEOP_DEFINITION_BLOCK: CgWriteTableHeader (Op); if (AcpiGbl_CaptureComments) { CgWriteAmlDefBlockComment (Op); } break; case PARSEOP_NAMESEG: case PARSEOP_NAMESTRING: case PARSEOP_METHODCALL: CgLocalWriteAmlData (Op, Op->Asl.Value.String, Op->Asl.AmlLength); break; default: CgWriteAmlOpcode (Op); break; } } src/acpica/source/compiler/aslcompile.c000066400000000000000000000776361465205512700205250ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslcompile - top level compile module * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "acnamesp.h" #include #include #include #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslcompile") /* * Main parser entry * External is here in case the parser emits the same external in the * generated header. (Newer versions of Bison) */ int AslCompilerparse( void); /* Local prototypes */ static void CmFlushSourceCode ( void); static void CmDumpAllEvents ( void); static void CmFinishFiles( BOOLEAN DeleteAmlFile); /******************************************************************************* * * FUNCTION: CmDoCompile * * PARAMETERS: None * * RETURN: Status (0 = OK) * * DESCRIPTION: This procedure performs the entire compile * ******************************************************************************/ ACPI_STATUS CmDoCompile ( void) { UINT8 FullCompile; UINT8 Event; ASL_GLOBAL_FILE_NODE *FileNode; FullCompile = UtBeginEvent ("*** Total Compile time ***"); Event = UtBeginEvent ("Open input and output files"); UtEndEvent (Event); Event = UtBeginEvent ("Preprocess input file"); if (AslGbl_PreprocessFlag) { /* Enter compiler name as a #define */ PrAddDefine (ASL_DEFINE, "", FALSE); /* Preprocessor */ PrDoPreprocess (); AslGbl_CurrentLineNumber = 1; AslGbl_LogicalLineNumber = 1; AslGbl_CurrentLineOffset = 0; if (AslGbl_PreprocessOnly) { UtEndEvent (Event); return (AE_OK); } } UtEndEvent (Event); /* Build the parse tree */ Event = UtBeginEvent ("Parse source code and build parse tree"); AslCompilerparse(); UtEndEvent (Event); /* Check for parser-detected syntax errors */ if (AslGbl_SyntaxError) { AslError (ASL_ERROR, ASL_MSG_SYNTAX, NULL, "Compiler aborting due to parser-detected syntax error(s)\n"); /* Flag this error in the FileNode for compilation summary */ FileNode = FlGetCurrentFileNode (); FileNode->ParserErrorDetected = TRUE; AslGbl_ParserErrorDetected = TRUE; LsDumpParseTree (); AePrintErrorLog(ASL_FILE_STDERR); goto ErrorExit; } /* Did the parse tree get successfully constructed? */ if (!AslGbl_ParseTreeRoot) { /* * If there are no errors, then we have some sort of * internal problem. */ AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, NULL, "- Could not resolve parse tree root node"); goto ErrorExit; } AePrintErrorLog(ASL_FILE_STDERR); /* Flush out any remaining source after parse tree is complete */ Event = UtBeginEvent ("Flush source input"); CmFlushSourceCode (); /* Prune the parse tree if requested (debug purposes only) */ if (AslGbl_PruneParseTree) { AslPruneParseTree (AslGbl_PruneDepth, AslGbl_PruneType); } /* Optional parse tree dump, compiler debug output only */ LsDumpParseTree (); AslGbl_ParserErrorDetected = FALSE; AslGbl_SyntaxError = FALSE; UtEndEvent (Event); UtEndEvent (FullCompile); AslGbl_ParserErrorDetected = FALSE; AslGbl_SyntaxError = FALSE; ErrorExit: UtEndEvent (FullCompile); return (AE_ERROR); } /******************************************************************************* * * FUNCTION: CmDoAslMiddleAndBackEnd * * PARAMETERS: None * * RETURN: Status of middle-end and back-end * * DESCRIPTION: Perform compiler middle-end (type checking and semantic * analysis) and back-end (code generation) * ******************************************************************************/ int CmDoAslMiddleAndBackEnd ( void) { UINT8 Event; ACPI_STATUS Status; OpcGetIntegerWidth (AslGbl_ParseTreeRoot->Asl.Child); /* Pre-process parse tree for any operator transforms */ Event = UtBeginEvent ("Parse tree transforms"); DbgPrint (ASL_DEBUG_OUTPUT, "\nParse tree transforms\n\n"); TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_TWICE, TrAmlTransformWalkBegin, TrAmlTransformWalkEnd, NULL); UtEndEvent (Event); /* Generate AML opcodes corresponding to the parse tokens */ Event = UtBeginEvent ("Generate AML opcodes"); DbgPrint (ASL_DEBUG_OUTPUT, "Generating AML opcodes\n\n"); TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_UPWARD, NULL, OpcAmlOpcodeWalk, NULL); UtEndEvent (Event); /* Interpret and generate all compile-time constants */ Event = UtBeginEvent ("Constant folding via AML interpreter"); DbgPrint (ASL_DEBUG_OUTPUT, "Interpreting compile-time constant expressions\n\n"); if (AslGbl_FoldConstants) { TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_UPWARD, NULL, OpcAmlConstantWalk, NULL); } else { DbgPrint (ASL_PARSE_OUTPUT, " Optional folding disabled\n"); } UtEndEvent (Event); /* Update AML opcodes if necessary, after constant folding */ Event = UtBeginEvent ("Updating AML opcodes after constant folding"); DbgPrint (ASL_DEBUG_OUTPUT, "Updating AML opcodes after constant folding\n\n"); TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_UPWARD, NULL, OpcAmlOpcodeUpdateWalk, NULL); UtEndEvent (Event); /* Calculate all AML package lengths */ Event = UtBeginEvent ("Generate AML package lengths"); DbgPrint (ASL_DEBUG_OUTPUT, "Generating Package lengths\n\n"); TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_UPWARD, NULL, LnPackageLengthWalk, NULL); UtEndEvent (Event); if (AslGbl_ParseOnlyFlag) { AePrintErrorLog (ASL_FILE_STDERR); UtDisplaySummary (ASL_FILE_STDERR); if (AslGbl_DebugFlag) { /* Print error summary to the stdout also */ AePrintErrorLog (ASL_FILE_STDOUT); UtDisplaySummary (ASL_FILE_STDOUT); } return (0); } /* * Create an internal namespace and use it as a symbol table */ /* Namespace loading */ Event = UtBeginEvent ("Create ACPI Namespace"); DbgPrint (ASL_DEBUG_OUTPUT, "Creating ACPI Namespace\n\n"); Status = LdLoadNamespace (AslGbl_ParseTreeRoot); UtEndEvent (Event); if (ACPI_FAILURE (Status)) { return (-1); } /* Namespace cross-reference */ AslGbl_NamespaceEvent = UtBeginEvent ( "Cross reference parse tree and Namespace"); DbgPrint (ASL_DEBUG_OUTPUT, "Cross referencing namespace\n\n"); Status = XfCrossReferenceNamespace (); if (ACPI_FAILURE (Status)) { return (-1); } /* Namespace - Check for non-referenced objects */ LkFindUnreferencedObjects (); UtEndEvent (AslGbl_NamespaceEvent); /* Resolve External Declarations */ Event = UtBeginEvent ("Resolve all Externals"); DbgPrint (ASL_DEBUG_OUTPUT, "\nResolve Externals\n\n"); if (AslGbl_DoExternalsInPlace) { TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD, ExAmlExternalWalkBegin, NULL, NULL); } else { TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_TWICE, ExAmlExternalWalkBegin, ExAmlExternalWalkEnd, NULL); } UtEndEvent (Event); /* * Semantic analysis. This can happen only after the * namespace has been loaded and cross-referenced. * * part one - check control methods */ Event = UtBeginEvent ("Analyze control method return types"); AslGbl_AnalysisWalkInfo.MethodStack = NULL; DbgPrint (ASL_DEBUG_OUTPUT, "Semantic analysis - Method analysis\n\n"); if (AslGbl_CrossReferenceOutput) { OtPrintHeaders ("Part 1: Object Reference Map " "(Object references from within each control method)"); } TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_TWICE, MtMethodAnalysisWalkBegin, MtMethodAnalysisWalkEnd, &AslGbl_AnalysisWalkInfo); UtEndEvent (Event); /* Generate the object cross-reference file if requested */ Event = UtBeginEvent ("Generate cross-reference file"); OtCreateXrefFile (); UtEndEvent (Event); /* Semantic error checking part two - typing of method returns */ Event = UtBeginEvent ("Determine object types returned by methods"); DbgPrint (ASL_DEBUG_OUTPUT, "Semantic analysis - Method typing\n\n"); TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_UPWARD, NULL, AnMethodTypingWalkEnd, NULL); UtEndEvent (Event); /* Semantic error checking part three - operand type checking */ Event = UtBeginEvent ("Analyze AML operand types"); DbgPrint (ASL_DEBUG_OUTPUT, "Semantic analysis - Operand type checking\n\n"); if (AslGbl_DoTypechecking) { TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_UPWARD, NULL, AnOperandTypecheckWalkEnd, &AslGbl_AnalysisWalkInfo); } UtEndEvent (Event); /* Semantic error checking part four - other miscellaneous checks */ Event = UtBeginEvent ("Miscellaneous analysis"); DbgPrint (ASL_DEBUG_OUTPUT, "Semantic analysis - miscellaneous\n\n"); TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD, AnOtherSemanticAnalysisWalkBegin, NULL, &AslGbl_AnalysisWalkInfo); UtEndEvent (Event); /* * ASL-/ASL+ converter: Gbl_ParseTreeRoot->CommentList contains the * very last comment of a given ASL file because it's the last constructed * node during compilation. We take the very last comment and save it in a * global for it to be used by the disassembler. */ if (AcpiGbl_CaptureComments) { AcpiGbl_LastListHead = AslGbl_ParseTreeRoot->Asl.CommentList; AslGbl_ParseTreeRoot->Asl.CommentList = NULL; } /* Calculate all AML package lengths */ Event = UtBeginEvent ("Finish AML package length generation"); DbgPrint (ASL_DEBUG_OUTPUT, "Generating Package lengths\n\n"); TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_UPWARD, NULL, LnInitLengthsWalk, NULL); TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_UPWARD, NULL, LnPackageLengthWalk, NULL); UtEndEvent (Event); /* Code generation - emit the AML */ Event = UtBeginEvent ("Generate AML code and write output files"); DbgPrint (ASL_DEBUG_OUTPUT, "Writing AML byte code\n\n"); AslGbl_CurrentDB = AslGbl_ParseTreeRoot->Asl.Child; while (AslGbl_CurrentDB) { switch (FlSwitchFileSet(AslGbl_CurrentDB->Asl.Filename)) { case SWITCH_TO_DIFFERENT_FILE: /* * Reset these parameters when definition blocks belong in * different files. If they belong in the same file, there is * no need to reset these parameters */ FlSeekFile (ASL_FILE_SOURCE_OUTPUT, 0); AslGbl_SourceLine = 0; AslGbl_NextError = AslGbl_ErrorLog; /* fall-through */ case SWITCH_TO_SAME_FILE: CgGenerateAmlOutput (); CmDoOutputFiles (); AslGbl_CurrentDB = AslGbl_CurrentDB->Asl.Next; break; default: /* FILE_NOT_FOUND */ /* The requested file could not be found. Get out of here */ AslGbl_CurrentDB = NULL; break; } } UtEndEvent (Event); Event = UtBeginEvent ("Write optional output files"); UtEndEvent (Event); return (0); } /******************************************************************************* * * FUNCTION: AslCompilerSignon * * PARAMETERS: FileId - ID of the output file * * RETURN: None * * DESCRIPTION: Display compiler signon * ******************************************************************************/ void AslCompilerSignon ( UINT32 FileId) { char *Prefix = ""; char *UtilityName; /* Set line prefix depending on the destination file type */ switch (FileId) { case ASL_FILE_ASM_SOURCE_OUTPUT: case ASL_FILE_ASM_INCLUDE_OUTPUT: Prefix = "; "; break; case ASL_FILE_HEX_OUTPUT: if (AslGbl_HexOutputFlag == HEX_OUTPUT_ASM) { Prefix = "; "; } else if ((AslGbl_HexOutputFlag == HEX_OUTPUT_C) || (AslGbl_HexOutputFlag == HEX_OUTPUT_ASL)) { FlPrintFile (ASL_FILE_HEX_OUTPUT, "/*\n"); Prefix = " * "; } break; case ASL_FILE_C_SOURCE_OUTPUT: case ASL_FILE_C_OFFSET_OUTPUT: case ASL_FILE_C_INCLUDE_OUTPUT: Prefix = " * "; break; default: /* No other output types supported */ break; } /* Running compiler or disassembler? */ if (AcpiGbl_DisasmFlag) { UtilityName = AML_DISASSEMBLER_NAME; } else { UtilityName = ASL_COMPILER_NAME; } /* Compiler signon with copyright */ FlPrintFile (FileId, "%s\n", Prefix); FlPrintFile (FileId, ACPI_COMMON_HEADER (UtilityName, Prefix)); } /******************************************************************************* * * FUNCTION: AslCompilerFileHeader * * PARAMETERS: FileId - ID of the output file * * RETURN: None * * DESCRIPTION: Header used at the beginning of output files * ******************************************************************************/ void AslCompilerFileHeader ( UINT32 FileId) { char *NewTime; time_t Aclock; char *Prefix = ""; /* Set line prefix depending on the destination file type */ switch (FileId) { case ASL_FILE_ASM_SOURCE_OUTPUT: case ASL_FILE_ASM_INCLUDE_OUTPUT: Prefix = "; "; break; case ASL_FILE_HEX_OUTPUT: if (AslGbl_HexOutputFlag == HEX_OUTPUT_ASM) { Prefix = "; "; } else if ((AslGbl_HexOutputFlag == HEX_OUTPUT_C) || (AslGbl_HexOutputFlag == HEX_OUTPUT_ASL)) { Prefix = " * "; } break; case ASL_FILE_C_SOURCE_OUTPUT: case ASL_FILE_C_OFFSET_OUTPUT: case ASL_FILE_C_INCLUDE_OUTPUT: Prefix = " * "; break; default: /* No other output types supported */ break; } /* Compilation header (with timestamp) */ FlPrintFile (FileId, "%sCompilation of \"%s\"", Prefix, AslGbl_Files[ASL_FILE_INPUT].Filename); if (!AslGbl_Deterministic) { Aclock = time (NULL); NewTime = ctime (&Aclock); if (NewTime) { FlPrintFile (FileId, " - %s%s\n", NewTime, Prefix); } } else { FlPrintFile (FileId, "\n"); } switch (FileId) { case ASL_FILE_C_SOURCE_OUTPUT: case ASL_FILE_C_OFFSET_OUTPUT: case ASL_FILE_C_INCLUDE_OUTPUT: FlPrintFile (FileId, " */\n"); break; default: /* Nothing to do for other output types */ break; } } /******************************************************************************* * * FUNCTION: CmFlushSourceCode * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Read in any remaining source code after the parse tree * has been constructed. * ******************************************************************************/ static void CmFlushSourceCode ( void) { char Buffer; while (FlReadFile (ASL_FILE_INPUT, &Buffer, 1) != AE_ERROR) { AslInsertLineBuffer ((int) Buffer); } AslResetCurrentLineBuffer (); } /******************************************************************************* * * FUNCTION: CmDoOutputFiles * * PARAMETERS: None * * RETURN: None. * * DESCRIPTION: Create all "listing" type files * ******************************************************************************/ void CmDoOutputFiles ( void) { /* Create listings and hex files */ LsDoListings (); HxDoHexOutput (); /* Dump the namespace to the .nsp file if requested */ (void) NsDisplayNamespace (); /* Dump the device mapping file */ MpEmitMappingInfo (); } /******************************************************************************* * * FUNCTION: CmDumpAllEvents * * PARAMETERS: None * * RETURN: None. * * DESCRIPTION: Dump all compiler events * ******************************************************************************/ static void CmDumpAllEvents ( void) { ASL_EVENT_INFO *Event; UINT32 Delta; UINT32 MicroSeconds; UINT32 MilliSeconds; UINT32 i; Event = AslGbl_Events; DbgPrint (ASL_DEBUG_OUTPUT, "\n\nElapsed time for major events\n\n"); if (AslGbl_CompileTimesFlag) { printf ("\nElapsed time for major events\n\n"); } for (i = 0; i < AslGbl_NextEvent; i++) { if (Event->Valid) { /* Delta will be in 100-nanosecond units */ Delta = (UINT32) (Event->EndTime - Event->StartTime); MicroSeconds = Delta / ACPI_100NSEC_PER_USEC; MilliSeconds = Delta / ACPI_100NSEC_PER_MSEC; /* Round milliseconds up */ if ((MicroSeconds - (MilliSeconds * ACPI_USEC_PER_MSEC)) >= 500) { MilliSeconds++; } DbgPrint (ASL_DEBUG_OUTPUT, "%8u usec %8u msec - %s\n", MicroSeconds, MilliSeconds, Event->EventName); if (AslGbl_CompileTimesFlag) { printf ("%8u usec %8u msec - %s\n", MicroSeconds, MilliSeconds, Event->EventName); } } Event++; } } /******************************************************************************* * * FUNCTION: CmCleanupAndExit * * PARAMETERS: None * * RETURN: None. * * DESCRIPTION: Close all open files and exit the compiler * ******************************************************************************/ int CmCleanupAndExit ( void) { int Status = 0; BOOLEAN DeleteAmlFile = FALSE; ASL_GLOBAL_FILE_NODE *CurrentFileNode = AslGbl_FilesList; /* Check if any errors occurred during compile */ (void) AslCheckForErrorExit (); AePrintErrorLog (ASL_FILE_STDERR); if (AslGbl_DebugFlag) { /* Print error summary to stdout also */ AePrintErrorLog (ASL_FILE_STDOUT); } /* Emit compile times if enabled */ CmDumpAllEvents (); if (AslGbl_CompileTimesFlag) { printf ("\nMiscellaneous compile statistics\n\n"); printf ("%11u : %s\n", AslGbl_TotalParseNodes, "Parse nodes"); printf ("%11u : %s\n", AslGbl_NsLookupCount, "Namespace searches"); printf ("%11u : %s\n", AslGbl_TotalNamedObjects, "Named objects"); printf ("%11u : %s\n", AslGbl_TotalMethods, "Control methods"); printf ("%11u : %s\n", AslGbl_TotalAllocations, "Memory Allocations"); printf ("%11u : %s\n", AslGbl_TotalAllocated, "Total allocated memory"); printf ("%11u : %s\n", AslGbl_TotalFolds, "Constant subtrees folded"); printf ("\n"); } if (AslGbl_NsLookupCount) { DbgPrint (ASL_DEBUG_OUTPUT, "\n\nMiscellaneous compile statistics\n\n"); DbgPrint (ASL_DEBUG_OUTPUT, "%32s : %u\n", "Total Namespace searches", AslGbl_NsLookupCount); DbgPrint (ASL_DEBUG_OUTPUT, "%32s : %u usec\n", "Time per search", ((UINT32) (AslGbl_Events[AslGbl_NamespaceEvent].EndTime - AslGbl_Events[AslGbl_NamespaceEvent].StartTime) / 10) / AslGbl_NsLookupCount); } if (AslGbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT) { printf ("\nMaximum error count (%d) exceeded (aslcompile.c)\n", ASL_MAX_ERROR_COUNT); } UtDisplaySummary (ASL_FILE_STDOUT); /* * Delete the AML file if there are errors and the force AML output option * (-f) has not been used. * * Return -1 as a status of the compiler if no AML files are generated. If * the AML file is generated in the presence of errors, return 0. In the * latter case, the errors were ignored by the user so the compilation is * considered successful. */ if (AslGbl_ParserErrorDetected || AslGbl_PreprocessOnly || ((AslGbl_ExceptionCount[ASL_ERROR] > 0) && (!AslGbl_IgnoreErrors) && AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle)) { DeleteAmlFile = TRUE; Status = -1; } /* Close all open files */ while (CurrentFileNode) { /* * Set the program return status based on file errors. If there are any * errors and during compilation, the command is not considered * successful. */ if (Status != -1 && !AslGbl_IgnoreErrors && CurrentFileNode->ParserErrorDetected) { Status = -1; } switch (FlSwitchFileSet (CurrentFileNode->Files[ASL_FILE_INPUT].Filename)) { case SWITCH_TO_SAME_FILE: case SWITCH_TO_DIFFERENT_FILE: CmFinishFiles (DeleteAmlFile); CurrentFileNode = CurrentFileNode->Next; break; case FILE_NOT_FOUND: default: CurrentFileNode = NULL; break; } } /* Final cleanup after compiling one file */ if (!AslGbl_DoAslConversion) { UtDeleteLocalCaches (); } return (Status); } /******************************************************************************* * * FUNCTION: CmFinishFiles * * PARAMETERS: DeleteAmlFile * * RETURN: None. * * DESCRIPTION: Close all open files, delete AML files depending on the * function parameter is true. * ******************************************************************************/ static void CmFinishFiles( BOOLEAN DeleteAmlFile) { UINT32 i; /* * Take care with the preprocessor file (.pre), it might be the same * as the "input" file, depending on where the compiler has terminated * or aborted. Prevent attempt to close the same file twice in * loop below. */ if (AslGbl_Files[ASL_FILE_PREPROCESSOR].Handle == AslGbl_Files[ASL_FILE_INPUT].Handle) { AslGbl_Files[ASL_FILE_PREPROCESSOR].Handle = NULL; } /* Close the standard I/O files */ for (i = ASL_FILE_INPUT; i < ASL_MAX_FILE_TYPE; i++) { /* * Some files such as debug output files could be pointing to * stderr or stdout. Leave these alone. */ if (AslGbl_Files[i].Handle != stderr && AslGbl_Files[i].Handle != stdout) { FlCloseFile (i); } } /* Delete AML file if there are errors */ if (DeleteAmlFile) { FlDeleteFile (ASL_FILE_AML_OUTPUT); } /* Delete the preprocessor temp file unless full debug was specified */ if (AslGbl_PreprocessFlag && !AslGbl_KeepPreprocessorTempFile) { FlDeleteFile (ASL_FILE_PREPROCESSOR); } /* * Delete intermediate ("combined") source file (if -ls flag not set) * This file is created during normal ASL/AML compiles. It is not * created by the data table compiler. * * If the -ls flag is set, then the .SRC file should not be deleted. * In this case, Gbl_SourceOutputFlag is set to TRUE. * * Note: Handles are cleared by FlCloseFile above, so we look at the * filename instead, to determine if the .SRC file was actually * created. */ if (!AslGbl_SourceOutputFlag) { FlDeleteFile (ASL_FILE_SOURCE_OUTPUT); } } src/acpica/source/compiler/aslcompiler.h000066400000000000000000001073541465205512700207030ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslcompiler.h - common include file for iASL * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ASLCOMPILER_H #define __ASLCOMPILER_H #include "acpi.h" #include "accommon.h" #include "amlresrc.h" #include "acdebug.h" /* Microsoft-specific */ #if (defined WIN32 || defined WIN64) /* warn : used #pragma pack */ #pragma warning(disable:4103) /* warn : named type definition in parentheses */ #pragma warning(disable:4115) #endif #include #include #include #include #include /* Compiler headers */ #include "asldefine.h" #include "asltypes.h" #include "aslmessages.h" #include "aslglobal.h" #include "preprocess.h" #include "dtcompiler.h" /******************************************************************************* * * Compiler prototypes * ******************************************************************************/ /* * Main ASL parser - generated from flex/bison, lex/yacc, etc. */ ACPI_PARSE_OBJECT * AslDoError ( void); int AslCompilerlex( void); void AslResetCurrentLineBuffer ( void); void AslInsertLineBuffer ( int SourceChar); int AslPopInputFileStack ( void); void AslPushInputFileStack ( FILE *InputFile, char *Filename); void AslParserCleanup ( void); /* * aslstartup - entered from main() */ void AslInitializeGlobals ( void); typedef ACPI_STATUS (*ASL_PATHNAME_CALLBACK) ( char *); ACPI_STATUS AslDoOneFile ( char *Filename); ACPI_STATUS AslCheckForErrorExit ( void); /* * aslcompile - compile mainline */ void AslCompilerSignon ( UINT32 FileId); void AslCompilerFileHeader ( UINT32 FileId); ACPI_STATUS CmDoCompile ( void); int CmDoAslMiddleAndBackEnd ( void); void CmDoOutputFiles ( void); int CmCleanupAndExit ( void); ACPI_STATUS AslDoDisassembly ( void); /* * aslallocate - memory allocation */ void * UtLocalCalloc ( UINT32 Size); void UtExpandLineBuffers ( void); void UtReallocLineBuffers ( char **Buffer, UINT32 OldSize, UINT32 NewSize); void UtFreeLineBuffers ( void); /* * aslcache - local cache support */ char * UtLocalCacheCalloc ( UINT32 Length); ACPI_PARSE_OBJECT * UtParseOpCacheCalloc ( void); DT_SUBTABLE * UtSubtableCacheCalloc ( void); DT_FIELD * UtFieldCacheCalloc ( void); void UtDeleteLocalCaches ( void); /* * aslascii - ascii support */ ACPI_STATUS FlIsFileAsciiSource ( char *Filename, BOOLEAN DisplayErrors); /* * aslwalks - semantic analysis and parse tree walks */ ACPI_STATUS AnOtherSemanticAnalysisWalkBegin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); ACPI_STATUS AnOtherSemanticAnalysisWalkEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); ACPI_STATUS AnOperandTypecheckWalkEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); ACPI_STATUS AnMethodTypingWalkEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); /* * aslmethod - Control method analysis walk */ ACPI_STATUS MtMethodAnalysisWalkBegin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); ACPI_STATUS MtMethodAnalysisWalkEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); UINT32 MtProcessTypeOp ( ACPI_PARSE_OBJECT *TypeOp); UINT8 MtProcessParameterTypeList ( ACPI_PARSE_OBJECT *ParamTypeOp, UINT32 *TypeList); /* * aslbtypes - bitfield data types */ UINT32 AnMapObjTypeToBtype ( ACPI_PARSE_OBJECT *Op); UINT32 AnMapArgTypeToBtype ( UINT32 ArgType); UINT32 AnGetBtype ( ACPI_PARSE_OBJECT *Op); void AnFormatBtype ( char *Buffer, UINT32 Btype); /* * aslanalyze - Support functions for parse tree walks */ void AnCheckId ( ACPI_PARSE_OBJECT *Op, ACPI_NAME Type); /* Values for Type argument above */ #define ASL_TYPE_HID 0 #define ASL_TYPE_CID 1 BOOLEAN AnIsInternalMethod ( ACPI_PARSE_OBJECT *Op); UINT32 AnGetInternalMethodReturnType ( ACPI_PARSE_OBJECT *Op); BOOLEAN AnLastStatementIsReturn ( ACPI_PARSE_OBJECT *Op); void AnCheckMethodReturnValue ( ACPI_PARSE_OBJECT *Op, const ACPI_OPCODE_INFO *OpInfo, ACPI_PARSE_OBJECT *ArgOp, UINT32 RequiredBtypes, UINT32 ThisNodeBtype); BOOLEAN AnIsResultUsed ( ACPI_PARSE_OBJECT *Op); void ApCheckForGpeNameConflict ( ACPI_PARSE_OBJECT *Op); void ApCheckRegMethod ( ACPI_PARSE_OBJECT *Op); BOOLEAN ApFindNameInScope ( char *Name, ACPI_PARSE_OBJECT *Op); BOOLEAN ApFindNameInDeviceTree ( char *Name, ACPI_PARSE_OBJECT *Op); /* * aslerror - error handling/reporting */ void AslAbort ( void); void AslDualParseOpError ( UINT8 Level, UINT16 MainMessageId, ACPI_PARSE_OBJECT *MainOp, char *MainMessage, UINT16 SecondMessageId, ACPI_PARSE_OBJECT *SecondOp, char *SecondaryMessage); void AslError ( UINT8 Level, UINT16 MessageId, ACPI_PARSE_OBJECT *Op, char *ExtraMessage); void AslCheckExpectedExceptions ( void); ACPI_STATUS AslLogExpectedException ( char *MessageIdString); ACPI_STATUS AslElevateException ( char *MessageIdString); ACPI_STATUS AslDisableException ( char *MessageIdString); BOOLEAN AslIsExceptionIgnored ( char *Filename, UINT32 LineNumber, UINT8 Level, UINT16 MessageId); void AslLogExpectedExceptionByLine ( char *MessageIdString); void AslCoreSubsystemError ( ACPI_PARSE_OBJECT *Op, ACPI_STATUS Status, char *ExtraMessage, BOOLEAN Abort); int AslCompilererror( const char *s); void AslCommonError ( UINT8 Level, UINT16 MessageId, UINT32 CurrentLineNumber, UINT32 LogicalLineNumber, UINT32 LogicalByteOffset, UINT32 Column, char *Filename, char *ExtraMessage); void AslCommonError2 ( UINT8 Level, UINT16 MessageId, UINT32 LineNumber, UINT32 Column, char *SourceLine, char *Filename, char *ExtraMessage); void AePrintException ( UINT32 FileId, ASL_ERROR_MSG *Enode, char *Header); void AePrintErrorLog ( UINT32 FileId); void AeClearErrorLog ( void); /* * asllisting - generate all "listing" type files */ void LsDoListings ( void); void LsWriteNodeToAsmListing ( ACPI_PARSE_OBJECT *Op); void LsWriteNode ( ACPI_PARSE_OBJECT *Op, UINT32 FileId); void LsDumpParseTree ( void); /* * asllistsup - Listing file support utilities */ void LsDumpAscii ( UINT32 FileId, UINT32 Count, UINT8 *Buffer); void LsDumpAsciiInComment ( UINT32 FileId, UINT32 Count, UINT8 *Buffer); void LsCheckException ( UINT32 LineNumber, UINT32 FileId); void LsFlushListingBuffer ( UINT32 FileId); void LsWriteListingHexBytes ( UINT8 *Buffer, UINT32 Length, UINT32 FileId); void LsWriteSourceLines ( UINT32 ToLineNumber, UINT32 ToLogicalLineNumber, UINT32 FileId); UINT32 LsWriteOneSourceLine ( UINT32 FileId); void LsPushNode ( char *Filename); ASL_LISTING_NODE * LsPopNode ( void); /* * aslhex - generate all "hex" output files (C, ASM, ASL) */ void HxDoHexOutput ( void); /* * aslfold - constant folding */ ACPI_STATUS OpcAmlConstantWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); /* * aslmessages - exception strings */ const char * AeDecodeMessageId ( UINT16 MessageId); const char * AeDecodeExceptionLevel ( UINT8 Level); UINT16 AeBuildFullExceptionCode ( UINT8 Level, UINT16 MessageId); /* * asloffset - generate C offset file for BIOS support */ ACPI_STATUS LsAmlOffsetWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); void LsDoOffsetTableHeader ( UINT32 FileId); void LsDoOffsetTableFooter ( UINT32 FileId); /* * aslopcodes - generate AML opcodes */ ACPI_STATUS OpcAmlOpcodeWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); ACPI_STATUS OpcAmlOpcodeUpdateWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); void OpcGenerateAmlOpcode ( ACPI_PARSE_OBJECT *Op); UINT32 OpcSetOptimalIntegerSize ( ACPI_PARSE_OBJECT *Op); void OpcGetIntegerWidth ( ACPI_PARSE_OBJECT *Op); /* * asloperands - generate AML operands for the AML opcodes */ ACPI_PARSE_OBJECT * UtGetArg ( ACPI_PARSE_OBJECT *Op, UINT32 Argn); void OpnGenerateAmlOperands ( ACPI_PARSE_OBJECT *Op); void OpnDoPackage ( ACPI_PARSE_OBJECT *Op); /* * aslopt - optimization */ void OptOptimizeNamePath ( ACPI_PARSE_OBJECT *Op, UINT32 Flags, ACPI_WALK_STATE *WalkState, char *AmlNameString, ACPI_NAMESPACE_NODE *TargetNode); /* * aslpld - ToPLD macro support */ void OpcDoPld ( ACPI_PARSE_OBJECT *Op); /* * aslprintf - Printf/Fprintf macros */ void OpcDoPrintf ( ACPI_PARSE_OBJECT *Op); void OpcDoFprintf ( ACPI_PARSE_OBJECT *Op); /* * aslprune - parse tree pruner */ void AslPruneParseTree ( UINT32 PruneDepth, UINT32 Type); /* * aslcodegen - code generation */ void CgGenerateAmlOutput ( void); void CgLocalWriteAmlData ( ACPI_PARSE_OBJECT *Op, void *Buffer, UINT32 Length); /* * aslfile */ void FlOpenFile ( UINT32 FileId, char *Filename, char *Mode); /* * asllength - calculate/adjust AML package lengths */ ACPI_STATUS LnPackageLengthWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); ACPI_STATUS LnInitLengthsWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); void CgGenerateAmlLengths ( ACPI_PARSE_OBJECT *Op); /* * aslmap - opcode mappings and reserved method names */ ACPI_OBJECT_TYPE AslMapNamedOpcodeToDataType ( UINT16 Opcode); /* * aslpredef - ACPI predefined names support */ BOOLEAN ApCheckForPredefinedMethod ( ACPI_PARSE_OBJECT *Op, ASL_METHOD_INFO *MethodInfo); void ApCheckPredefinedReturnValue ( ACPI_PARSE_OBJECT *Op, ASL_METHOD_INFO *MethodInfo); UINT32 ApCheckForPredefinedName ( ACPI_PARSE_OBJECT *Op, char *Name); void ApCheckForPredefinedObject ( ACPI_PARSE_OBJECT *Op, char *Name); ACPI_STATUS ApCheckObjectType ( const char *PredefinedName, ACPI_PARSE_OBJECT *Op, UINT32 ExpectedBtypes, UINT32 PackageIndex); void ApDisplayReservedNames ( void); /* * aslprepkg - ACPI predefined names support for packages */ void ApCheckPackage ( ACPI_PARSE_OBJECT *ParentOp, const ACPI_PREDEFINED_INFO *Predefined); /* * asltransform - parse tree transformations */ ACPI_STATUS TrAmlTransformWalkBegin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); ACPI_STATUS TrAmlTransformWalkEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); /* * aslexternal - External opcode support */ ACPI_STATUS ExAmlExternalWalkBegin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); ACPI_STATUS ExAmlExternalWalkEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); void ExDoExternal ( ACPI_PARSE_OBJECT *Op); /* Values for "Visitation" parameter above */ #define ASL_WALK_VISIT_DOWNWARD 0x01 #define ASL_WALK_VISIT_UPWARD 0x02 #define ASL_WALK_VISIT_DB_SEPARATELY 0x04 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD) /* * aslparseop.c - Parse op create/allocate/cache */ ACPI_PARSE_OBJECT * TrCreateOp ( UINT32 ParseOpcode, UINT32 NumChildren, ...); ACPI_PARSE_OBJECT * TrCreateLeafOp ( UINT32 ParseOpcode); ACPI_PARSE_OBJECT * TrCreateNullTargetOp ( void); ACPI_PARSE_OBJECT * TrCreateAssignmentOp ( ACPI_PARSE_OBJECT *Target, ACPI_PARSE_OBJECT *Source); ACPI_PARSE_OBJECT * TrCreateTargetOp ( ACPI_PARSE_OBJECT *OriginalOp, ACPI_PARSE_OBJECT *ParentOp); ACPI_PARSE_OBJECT * TrCreateValuedLeafOp ( UINT32 ParseOpcode, UINT64 Value); ACPI_PARSE_OBJECT * TrCreateConstantLeafOp ( UINT32 ParseOpcode); ACPI_PARSE_OBJECT * TrAllocateOp ( UINT32 ParseOpcode); void TrPrintOpFlags ( UINT32 Flags, UINT32 OutputLevel); /* * asltree.c - Parse tree management */ void TrSetOpParent ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *ParentOp); ACPI_PARSE_OBJECT * TrSetOpIntegerValue ( UINT32 ParseOpcode, ACPI_PARSE_OBJECT *Op); void TrSetOpEndLineNumber ( ACPI_PARSE_OBJECT *Op); void TrSetOpCurrentFilename ( ACPI_PARSE_OBJECT *Op); void TrSetOpIntegerWidth ( ACPI_PARSE_OBJECT *TableSignature, ACPI_PARSE_OBJECT *Revision); ACPI_PARSE_OBJECT * TrLinkOpChildren ( ACPI_PARSE_OBJECT *Op, UINT32 NumChildren, ...); ACPI_PARSE_OBJECT * TrLinkPeerOp ( ACPI_PARSE_OBJECT *Op1, ACPI_PARSE_OBJECT *Op2); ACPI_PARSE_OBJECT * TrLinkChildOp ( ACPI_PARSE_OBJECT *Op1, ACPI_PARSE_OBJECT *Op2); ACPI_PARSE_OBJECT * TrSetOpFlags ( ACPI_PARSE_OBJECT *Op, UINT32 Flags); ACPI_PARSE_OBJECT * TrSetOpAmlLength ( ACPI_PARSE_OBJECT *Op, UINT32 Length); ACPI_PARSE_OBJECT * TrLinkPeerOps ( UINT32 NumPeers, ...); ACPI_STATUS TrWalkParseTree ( ACPI_PARSE_OBJECT *Op, UINT32 Visitation, ASL_WALK_CALLBACK DescendingCallback, ASL_WALK_CALLBACK AscendingCallback, void *Context); /* * aslfiles - File I/O support */ void FlAddIncludeDirectory ( char *Dir); char * FlMergePathnames ( char *PrefixDir, char *FilePathname); void FlOpenIncludeFile ( ACPI_PARSE_OBJECT *Op); void FlFileError ( UINT32 FileId, UINT8 ErrorId); UINT32 FlGetFileSize ( UINT32 FileId); ACPI_STATUS FlReadFile ( UINT32 FileId, void *Buffer, UINT32 Length); void FlWriteFile ( UINT32 FileId, void *Buffer, UINT32 Length); void FlSeekFile ( UINT32 FileId, long Offset); void FlSeekFileSet ( UINT32 FileId, long Offset); void FlCloseFile ( UINT32 FileId); ACPI_PRINTF_LIKE (2) void FlPrintFile ( UINT32 FileId, char *Format, ...); void FlDeleteFile ( UINT32 FileId); void FlSetLineNumber ( UINT32 LineNumber); void FlSetFilename ( char *Filename); ACPI_STATUS FlOpenInputFile ( char *InputFilename); ACPI_STATUS FlOpenAmlOutputFile ( char *InputFilename); ACPI_STATUS FlOpenMiscOutputFiles ( char *InputFilename); ACPI_STATUS FlInitOneFile ( char *InputFilename); ASL_FILE_SWITCH_STATUS FlSwitchFileSet ( char *InputFilename); FILE * FlGetFileHandle ( UINT32 OutFileId, UINT32 InFileId, char *Filename); ASL_GLOBAL_FILE_NODE * FlGetFileNode ( UINT32 FileId, char *Filename); ASL_GLOBAL_FILE_NODE * FlGetCurrentFileNode ( void); /* * aslhwmap - hardware map summary */ void MpEmitMappingInfo ( void); /* * asload - load namespace in prep for cross reference */ ACPI_STATUS LdLoadNamespace ( ACPI_PARSE_OBJECT *RootOp); /* * asllookup - namespace lookup functions */ void LkFindUnreferencedObjects ( void); /* * aslhelp - help screens */ void Usage ( void); void AslFilenameHelp ( void); void AslDisassemblyHelp ( void); /* * aslnamesp - namespace output file generation */ ACPI_STATUS NsDisplayNamespace ( void); void NsSetupNamespaceListing ( void *Handle); /* * asloptions - command line processing */ int AslCommandLine ( int argc, char **argv); /* * aslxref - namespace cross reference */ ACPI_STATUS XfCrossReferenceNamespace ( void); /* * aslxrefout */ void OtPrintHeaders ( char *Message); void OtCreateXrefFile ( void); void OtXrefWalkPart1 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, ASL_METHOD_INFO *MethodInfo); /* * aslutils - common compiler utilities */ ACPI_PRINTF_LIKE(2) void DbgPrint ( UINT32 Type, char *Format, ...); /* Type values for above */ #define ASL_DEBUG_OUTPUT 0 #define ASL_PARSE_OUTPUT 1 #define ASL_TREE_OUTPUT 2 BOOLEAN UtIsIdInteger ( UINT8 *Target); UINT8 UtIsBigEndianMachine ( void); BOOLEAN UtQueryForOverwrite ( char *Pathname); void UtDumpStringOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level); void UtDumpIntegerOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level, UINT32 IntegerLength); void UtDumpBasicOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level); ACPI_NAMESPACE_NODE * UtGetParentMethodNode ( ACPI_NAMESPACE_NODE *Node); ACPI_PARSE_OBJECT * UtGetParentMethodOp ( ACPI_PARSE_OBJECT *Op); BOOLEAN UtNodeIsDescendantOf ( ACPI_NAMESPACE_NODE *Node1, ACPI_NAMESPACE_NODE *Node2); void UtDisplaySupportedTables ( void); void UtDisplayConstantOpcodes ( void); UINT8 UtBeginEvent ( char *Name); void UtEndEvent ( UINT8 Event); void UtDisplaySummary ( UINT32 FileId); void UtDisplayOneSummary ( UINT32 FileId, BOOLEAN DisplayErrorSummary); void UtConvertByteToHex ( UINT8 RawByte, UINT8 *Buffer); void UtConvertByteToAsmHex ( UINT8 RawByte, UINT8 *Buffer); char * UtGetOpName ( UINT32 ParseOpcode); void UtSetParseOpName ( ACPI_PARSE_OBJECT *Op); ACPI_STATUS UtInternalizeName ( char *ExternalName, char **ConvertedName); BOOLEAN UtNameContainsAllPrefix ( ACPI_PARSE_OBJECT *Op); void UtAttachNamepathToOwner ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *NameNode); ACPI_PARSE_OBJECT * UtCheckIntegerRange ( ACPI_PARSE_OBJECT *Op, UINT32 LowValue, UINT32 HighValue); UINT64 UtDoConstant ( char *String); char * AcpiUtStrdup ( char *String); char * AcpiUtStrcat ( char *String1, char *String2); /* * asluuid - UUID support */ ACPI_STATUS AuValidateUuid ( char *InString); ACPI_STATUS AuConvertUuidToString ( char *UuIdBuffer, char *OutString); /* * aslresource - Resource template generation utilities */ void RsSmallAddressCheck ( UINT8 Type, UINT32 Minimum, UINT32 Maximum, UINT32 Length, UINT32 Alignment, ACPI_PARSE_OBJECT *MinOp, ACPI_PARSE_OBJECT *MaxOp, ACPI_PARSE_OBJECT *LengthOp, ACPI_PARSE_OBJECT *AlignOp, ACPI_PARSE_OBJECT *Op); void RsLargeAddressCheck ( UINT64 Minimum, UINT64 Maximum, UINT64 Length, UINT64 Granularity, UINT8 Flags, ACPI_PARSE_OBJECT *MinOp, ACPI_PARSE_OBJECT *MaxOp, ACPI_PARSE_OBJECT *LengthOp, ACPI_PARSE_OBJECT *GranOp, ACPI_PARSE_OBJECT *Op); UINT16 RsGetStringDataLength ( ACPI_PARSE_OBJECT *InitializerOp); ASL_RESOURCE_NODE * RsAllocateResourceNode ( UINT32 Size); void RsCreateResourceField ( ACPI_PARSE_OBJECT *Op, char *Name, UINT32 ByteOffset, UINT32 BitOffset, UINT32 BitLength); void RsSetFlagBits ( UINT8 *Flags, ACPI_PARSE_OBJECT *Op, UINT8 Position, UINT8 DefaultBit); void RsSetFlagBits16 ( UINT16 *Flags, ACPI_PARSE_OBJECT *Op, UINT8 Position, UINT8 DefaultBit); ACPI_PARSE_OBJECT * RsCompleteNodeAndGetNext ( ACPI_PARSE_OBJECT *Op); void RsCheckListForDuplicates ( ACPI_PARSE_OBJECT *Op); ASL_RESOURCE_NODE * RsDoOneResourceDescriptor ( ASL_RESOURCE_INFO *Info, UINT8 *State); /* Values for State above */ #define ACPI_RSTATE_NORMAL 0 #define ACPI_RSTATE_START_DEPENDENT 1 #define ACPI_RSTATE_DEPENDENT_LIST 2 UINT32 RsLinkDescriptorChain ( ASL_RESOURCE_NODE **PreviousRnode, ASL_RESOURCE_NODE *Rnode); void RsDoResourceTemplate ( ACPI_PARSE_OBJECT *Op); /* * aslrestype1 - Miscellaneous Small descriptors */ ASL_RESOURCE_NODE * RsDoEndTagDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoEndDependentDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoMemory24Descriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoMemory32Descriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoMemory32FixedDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoStartDependentDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoStartDependentNoPriDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoVendorSmallDescriptor ( ASL_RESOURCE_INFO *Info); /* * aslrestype1i - I/O-related Small descriptors */ ASL_RESOURCE_NODE * RsDoDmaDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoFixedDmaDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoFixedIoDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoIoDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoIrqDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoIrqNoFlagsDescriptor ( ASL_RESOURCE_INFO *Info); /* * aslrestype2 - Large resource descriptors */ ASL_RESOURCE_NODE * RsDoInterruptDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoVendorLargeDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoGeneralRegisterDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoGpioIntDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoGpioIoDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoI2cSerialBusDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoSpiSerialBusDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoUartSerialBusDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoCsi2SerialBusDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoPinFunctionDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoPinConfigDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoPinGroupDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoPinGroupFunctionDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoPinGroupConfigDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoClockInputDescriptor ( ASL_RESOURCE_INFO *Info); /* * aslrestype2d - DWord address descriptors */ ASL_RESOURCE_NODE * RsDoDwordIoDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoDwordMemoryDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoDwordSpaceDescriptor ( ASL_RESOURCE_INFO *Info); /* * aslrestype2e - Extended address descriptors */ ASL_RESOURCE_NODE * RsDoExtendedIoDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoExtendedMemoryDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoExtendedSpaceDescriptor ( ASL_RESOURCE_INFO *Info); /* * aslrestype2q - QWord address descriptors */ ASL_RESOURCE_NODE * RsDoQwordIoDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoQwordMemoryDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoQwordSpaceDescriptor ( ASL_RESOURCE_INFO *Info); /* * aslrestype2w - Word address descriptors */ ASL_RESOURCE_NODE * RsDoWordIoDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoWordSpaceDescriptor ( ASL_RESOURCE_INFO *Info); ASL_RESOURCE_NODE * RsDoWordBusNumberDescriptor ( ASL_RESOURCE_INFO *Info); /* * Entry to data table compiler subsystem */ ACPI_STATUS DtDoCompile( void); ACPI_STATUS DtCreateTemplates ( char **argv); /* * ASL/ASL+ converter debug */ ACPI_PRINTF_LIKE (1) void CvDbgPrint ( char *Fmt, ...); #endif /* __ASLCOMPILER_H */ src/acpica/source/compiler/aslcompiler.l000066400000000000000000001357041465205512700207070ustar00rootroot00000000000000%{ /****************************************************************************** * * Module Name: aslcompiler.l - Flex/lex input file * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acconvert.h" #include #include /* * Generation: Use the following command line: * * flex.exe -PAslCompiler -i -o$(InputPath).c $(InputPath) * * -i: Scanner must be case-insensitive */ #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslscanner") /* Local prototypes */ static void AslDoLineDirective (void); static BOOLEAN AslDoComment (void); static BOOLEAN AslDoCommentType2 (void); static char AslDoStringLiteral (void); static void count (int type); /*! [Begin] no source code translation */ %} /* Definitions */ LeadNameChar [A-Za-z_] DigitChar [0-9] ErrorCode [(][ ]*[1-9][0-9][0-9][0-9][ ]*[)] OctalChar [0-7] HexDigitChar [A-Fa-f0-9] RootChar [\\] Nothing [] NameChar [A-Za-z_0-9] NameSeg1 {LeadNameChar}{NameChar} NameSeg2 {LeadNameChar}{NameChar}{NameChar} NameSeg3 {LeadNameChar}{NameChar}{NameChar}{NameChar} NameSeg {LeadNameChar}|{NameSeg1}|{NameSeg2}|{NameSeg3} NameString {RootChar}|{RootChar}{NamePath}|[\^]+{NamePath}|{NonEmptyNamePath} NamePath {NonEmptyNamePath}? NonEmptyNamePath {NameSeg}{NamePathTail}* NamePathTail [.]{NameSeg} %% /* Rules */ [ ] { count (0); } [\n] { count (0); } /* Handle files with both LF and CR/LF */ [\r] { count (0); } /* termination on both Unix and Windows */ [ \t] { count (0); } "/*" { if (!AslDoComment ()) {yyterminate ();} } "//" { if (!AslDoCommentType2 ()) {yyterminate ();} } "\"" { if (AslDoStringLiteral ()) {return (PARSEOP_STRING_LITERAL);} else {yyterminate ();} } ";" { count (0); return(';'); } /* ASL Extension: Standard C operators */ "~" { count (3); return (PARSEOP_EXP_NOT); } "!" { count (3); return (PARSEOP_EXP_LOGICAL_NOT); } "*" { count (3); return (PARSEOP_EXP_MULTIPLY); } "/" { count (3); return (PARSEOP_EXP_DIVIDE); } "%" { count (3); return (PARSEOP_EXP_MODULO); } "+" { count (3); return (PARSEOP_EXP_ADD); } "-" { count (3); return (PARSEOP_EXP_SUBTRACT); } ">>" { count (3); return (PARSEOP_EXP_SHIFT_RIGHT); } "<<" { count (3); return (PARSEOP_EXP_SHIFT_LEFT); } "<" { count (3); return (PARSEOP_EXP_LESS); } ">" { count (3); return (PARSEOP_EXP_GREATER); } "&" { count (3); return (PARSEOP_EXP_AND); } "<=" { count (3); return (PARSEOP_EXP_LESS_EQUAL); } ">=" { count (3); return (PARSEOP_EXP_GREATER_EQUAL); } "==" { count (3); return (PARSEOP_EXP_EQUAL); } "!=" { count (3); return (PARSEOP_EXP_NOT_EQUAL); } "|" { count (3); return (PARSEOP_EXP_OR); } "&&" { count (3); return (PARSEOP_EXP_LOGICAL_AND); } "||" { count (3); return (PARSEOP_EXP_LOGICAL_OR); } "++" { count (3); return (PARSEOP_EXP_INCREMENT); } "--" { count (3); return (PARSEOP_EXP_DECREMENT); } "^ " { count (3); return (PARSEOP_EXP_XOR); } /* ASL Extension: Standard C assignment operators */ "=" { count (3); return (PARSEOP_EXP_EQUALS); } "+=" { count (3); return (PARSEOP_EXP_ADD_EQ); } "-=" { count (3); return (PARSEOP_EXP_SUB_EQ); } "*=" { count (3); return (PARSEOP_EXP_MUL_EQ); } "/=" { count (3); return (PARSEOP_EXP_DIV_EQ); } "%=" { count (3); return (PARSEOP_EXP_MOD_EQ); } "<<=" { count (3); return (PARSEOP_EXP_SHL_EQ); } ">>=" { count (3); return (PARSEOP_EXP_SHR_EQ); } "&=" { count (3); return (PARSEOP_EXP_AND_EQ); } "^=" { count (3); return (PARSEOP_EXP_XOR_EQ); } "|=" { count (3); return (PARSEOP_EXP_OR_EQ); } "[" { count (3); return (PARSEOP_EXP_INDEX_LEFT); } "]" { count (0); return (PARSEOP_EXP_INDEX_RIGHT); } "(" { count (0); return (PARSEOP_OPEN_PAREN); } ")" { count (0); return (PARSEOP_CLOSE_PAREN); } "{" { count (0); return ('{'); } "}" { count (0); return ('}'); } "," { count (0); return (','); } /* * Begin standard ASL grammar */ [0-9][a-zA-Z0-9]* { count (1); AslCompilerlval.i = UtDoConstant ((char *) AslCompilertext); return (PARSEOP_INTEGER); } "Include" { count (1); return (PARSEOP_INCLUDE); } "External" { count (1); return (PARSEOP_EXTERNAL); } /* * The #line directive is emitted by the preprocessor and handled * here in the main iASL lexer - simply set the line number and * optionally the current filename. */ "#line" { AslDoLineDirective ();} /**************************************************************************** * * Main ASL operators * ****************************************************************************/ "AccessAs" { count (1); return (PARSEOP_ACCESSAS); } "Acquire" { count (3); return (PARSEOP_ACQUIRE); } "Add" { count (3); return (PARSEOP_ADD); } "Alias" { count (2); return (PARSEOP_ALIAS); } "And" { count (3); return (PARSEOP_AND); } "BankField" { count (2); return (PARSEOP_BANKFIELD); } "Break" { count (3); return (PARSEOP_BREAK); } "BreakPoint" { count (3); return (PARSEOP_BREAKPOINT); } "Buffer" { count (1); return (PARSEOP_BUFFER); } "Case" { count (3); return (PARSEOP_CASE); } "Concatenate" { count (3); return (PARSEOP_CONCATENATE); } "ConcatenateResTemplate" { count (3); return (PARSEOP_CONCATENATERESTEMPLATE); } "CondRefOf" { count (3); return (PARSEOP_CONDREFOF); } "Connection" { count (2); return (PARSEOP_CONNECTION); } "Continue" { count (3); return (PARSEOP_CONTINUE); } "CopyObject" { count (3); return (PARSEOP_COPYOBJECT); } "CreateBitField" { count (2); return (PARSEOP_CREATEBITFIELD); } "CreateByteField" { count (2); return (PARSEOP_CREATEBYTEFIELD); } "CreateDWordField" { count (2); return (PARSEOP_CREATEDWORDFIELD); } "CreateField" { count (2); return (PARSEOP_CREATEFIELD); } "CreateQWordField" { count (2); return (PARSEOP_CREATEQWORDFIELD); } "CreateWordField" { count (2); return (PARSEOP_CREATEWORDFIELD); } "DataTableRegion" { count (2); return (PARSEOP_DATATABLEREGION); } "Debug" { count (1); return (PARSEOP_DEBUG); } "Decrement" { count (3); return (PARSEOP_DECREMENT); } "Default" { count (3); return (PARSEOP_DEFAULT); } "DefinitionBlock" { count (1); return (PARSEOP_DEFINITION_BLOCK); } "DeRefOf" { count (3); return (PARSEOP_DEREFOF); } "Device" { count (2); return (PARSEOP_DEVICE); } "Divide" { count (3); return (PARSEOP_DIVIDE); } "Eisaid" { count (1); return (PARSEOP_EISAID); } "Else" { count (3); return (PARSEOP_ELSE); } "ElseIf" { count (3); return (PARSEOP_ELSEIF); } "Event" { count (2); return (PARSEOP_EVENT); } "Fatal" { count (3); return (PARSEOP_FATAL); } "Field" { count (2); return (PARSEOP_FIELD); } "FindSetLeftBit" { count (3); return (PARSEOP_FINDSETLEFTBIT); } "FindSetRightBit" { count (3); return (PARSEOP_FINDSETRIGHTBIT); } "FromBcd" { count (3); return (PARSEOP_FROMBCD); } "Function" { count (2); return (PARSEOP_FUNCTION); } "If" { count (3); return (PARSEOP_IF); } "Increment" { count (3); return (PARSEOP_INCREMENT); } "Index" { count (3); return (PARSEOP_INDEX); } "IndexField" { count (2); return (PARSEOP_INDEXFIELD); } "LAnd" { count (3); return (PARSEOP_LAND); } "LEqual" { count (3); return (PARSEOP_LEQUAL); } "LGreater" { count (3); return (PARSEOP_LGREATER); } "LGreaterEqual" { count (3); return (PARSEOP_LGREATEREQUAL); } "LLess" { count (3); return (PARSEOP_LLESS); } "LLessEqual" { count (3); return (PARSEOP_LLESSEQUAL); } "LNot" { count (3); return (PARSEOP_LNOT); } "LNotEqual" { count (3); return (PARSEOP_LNOTEQUAL); } "Load" { count (3); return (PARSEOP_LOAD); } "LoadTable" { count (3); return (PARSEOP_LOADTABLE); } "LOr" { count (3); return (PARSEOP_LOR); } "Match" { count (3); return (PARSEOP_MATCH); } "Method" { count (2); return (PARSEOP_METHOD); } "Mid" { count (3); return (PARSEOP_MID); } "Mod" { count (3); return (PARSEOP_MOD); } "Multiply" { count (3); return (PARSEOP_MULTIPLY); } "Mutex" { count (2); return (PARSEOP_MUTEX); } "Name" { count (2); return (PARSEOP_NAME); } "NAnd" { count (3); return (PARSEOP_NAND); } "Noop" { if (!AcpiGbl_IgnoreNoopOperator) {count (3); return (PARSEOP_NOOP);} } "NOr" { count (3); return (PARSEOP_NOR); } "Not" { count (3); return (PARSEOP_NOT); } "Notify" { count (3); return (PARSEOP_NOTIFY); } "ObjectType" { count (3); return (PARSEOP_OBJECTTYPE); } "Offset" { count (1); return (PARSEOP_OFFSET); } "One" { count (1); return (PARSEOP_ONE); } "Ones" { count (1); return (PARSEOP_ONES); } "OperationRegion" { count (2); return (PARSEOP_OPERATIONREGION); } "Or" { count (3); return (PARSEOP_OR); } "Package" { count (1); return (PARSEOP_PACKAGE); } "PowerResource" { count (2); return (PARSEOP_POWERRESOURCE); } "Processor" { count (2); return (PARSEOP_PROCESSOR); } "RefOf" { count (3); return (PARSEOP_REFOF); } "Release" { count (3); return (PARSEOP_RELEASE); } "Reset" { count (3); return (PARSEOP_RESET); } "Return" { count (3); return (PARSEOP_RETURN); } "Revision" { count (1); return (PARSEOP_REVISION); } "Scope" { count (2); return (PARSEOP_SCOPE); } "ShiftLeft" { count (3); return (PARSEOP_SHIFTLEFT); } "ShiftRight" { count (3); return (PARSEOP_SHIFTRIGHT); } "Signal" { count (3); return (PARSEOP_SIGNAL); } "SizeOf" { count (3); return (PARSEOP_SIZEOF); } "Sleep" { count (3); return (PARSEOP_SLEEP); } "Stall" { count (3); return (PARSEOP_STALL); } "Store" { count (3); return (PARSEOP_STORE); } "Subtract" { count (3); return (PARSEOP_SUBTRACT); } "Switch" { count (3); return (PARSEOP_SWITCH); } "ThermalZone" { count (2); return (PARSEOP_THERMALZONE); } "Timer" { count (3); return (PARSEOP_TIMER); } "ToBcd" { count (3); return (PARSEOP_TOBCD); } "ToBuffer" { count (3); return (PARSEOP_TOBUFFER); } "ToDecimalString" { count (3); return (PARSEOP_TODECIMALSTRING); } "ToHexString" { count (3); return (PARSEOP_TOHEXSTRING); } "ToInteger" { count (3); return (PARSEOP_TOINTEGER); } "ToString" { count (3); return (PARSEOP_TOSTRING); } "ToUuid" { count (1); return (PARSEOP_TOUUID); } "Unicode" { count (1); return (PARSEOP_UNICODE); } "Unload" { count (3); return (PARSEOP_UNLOAD); } "Wait" { count (3); return (PARSEOP_WAIT); } "While" { count (3); return (PARSEOP_WHILE); } "XOr" { count (3); return (PARSEOP_XOR); } "Zero" { count (1); return (PARSEOP_ZERO); } /* Control method arguments and locals */ "Arg0" { count (1); return (PARSEOP_ARG0); } "Arg1" { count (1); return (PARSEOP_ARG1); } "Arg2" { count (1); return (PARSEOP_ARG2); } "Arg3" { count (1); return (PARSEOP_ARG3); } "Arg4" { count (1); return (PARSEOP_ARG4); } "Arg5" { count (1); return (PARSEOP_ARG5); } "Arg6" { count (1); return (PARSEOP_ARG6); } "Local0" { count (1); return (PARSEOP_LOCAL0); } "Local1" { count (1); return (PARSEOP_LOCAL1); } "Local2" { count (1); return (PARSEOP_LOCAL2); } "Local3" { count (1); return (PARSEOP_LOCAL3); } "Local4" { count (1); return (PARSEOP_LOCAL4); } "Local5" { count (1); return (PARSEOP_LOCAL5); } "Local6" { count (1); return (PARSEOP_LOCAL6); } "Local7" { count (1); return (PARSEOP_LOCAL7); } /**************************************************************************** * * Resource Descriptor macros * ****************************************************************************/ "ResourceTemplate" { count (1); return (PARSEOP_RESOURCETEMPLATE); } "RawDataBuffer" { count (1); return (PARSEOP_DATABUFFER); } "Csi2Bus" { count (1); return (PARSEOP_CSI2_SERIALBUS); } "DMA" { count (1); return (PARSEOP_DMA); } "DWordIO" { count (1); return (PARSEOP_DWORDIO); } "DWordMemory" { count (1); return (PARSEOP_DWORDMEMORY); } "DWordSpace" { count (1); return (PARSEOP_DWORDSPACE); } "EndDependentFn" { count (1); return (PARSEOP_ENDDEPENDENTFN); } "ExtendedIO" { count (1); return (PARSEOP_EXTENDEDIO); } "ExtendedMemory" { count (1); return (PARSEOP_EXTENDEDMEMORY); } "ExtendedSpace" { count (1); return (PARSEOP_EXTENDEDSPACE); } "FixedDma" { count (1); return (PARSEOP_FIXEDDMA); } "FixedIO" { count (1); return (PARSEOP_FIXEDIO); } "GpioInt" { count (1); return (PARSEOP_GPIO_INT); } "GpioIo" { count (1); return (PARSEOP_GPIO_IO); } "I2cSerialBus" { count (1); return (PARSEOP_I2C_SERIALBUS); } "I2cSerialBusV2" { count (1); return (PARSEOP_I2C_SERIALBUS_V2); } "Interrupt" { count (1); return (PARSEOP_INTERRUPT); } "IO" { count (1); return (PARSEOP_IO); } "IRQ" { count (1); return (PARSEOP_IRQ); } "IRQNoFlags" { count (1); return (PARSEOP_IRQNOFLAGS); } "Memory24" { count (1); return (PARSEOP_MEMORY24); } "Memory32" { count (1); return (PARSEOP_MEMORY32); } "Memory32Fixed" { count (1); return (PARSEOP_MEMORY32FIXED); } "PinConfig" { count (1); return (PARSEOP_PINCONFIG); } "PinFunction" { count (1); return (PARSEOP_PINFUNCTION); } "PinGroup" { count (1); return (PARSEOP_PINGROUP); } "PinGroupConfig" { count (1); return (PARSEOP_PINGROUPCONFIG); } "PinGroupFunction" { count (1); return (PARSEOP_PINGROUPFUNCTION); } "ClockInput" { count (1); return (PARSEOP_CLOCKINPUT); } "QWordIO" { count (1); return (PARSEOP_QWORDIO); } "QWordMemory" { count (1); return (PARSEOP_QWORDMEMORY); } "QWordSpace" { count (1); return (PARSEOP_QWORDSPACE); } "Register" { count (1); return (PARSEOP_REGISTER); } "SpiSerialBus" { count (1); return (PARSEOP_SPI_SERIALBUS); } "SpiSerialBusV2" { count (1); return (PARSEOP_SPI_SERIALBUS_V2); } "StartDependentFn" { count (1); return (PARSEOP_STARTDEPENDENTFN); } "StartDependentFnNoPri" { count (1); return (PARSEOP_STARTDEPENDENTFN_NOPRI); } "UartSerialBus" { count (1); return (PARSEOP_UART_SERIALBUS); } "UartSerialBusV2" { count (1); return (PARSEOP_UART_SERIALBUS_V2); } "VendorLong" { count (1); return (PARSEOP_VENDORLONG); } "VendorShort" { count (1); return (PARSEOP_VENDORSHORT); } "WordBusNumber" { count (1); return (PARSEOP_WORDBUSNUMBER); } "WordIO" { count (1); return (PARSEOP_WORDIO); } "WordSpace" { count (1); return (PARSEOP_WORDSPACE); } /**************************************************************************** * * Keywords used as arguments to ASL operators and macros * ****************************************************************************/ /* AccessAttribKeyword: Serial Bus Attributes (ACPI 5.0) */ "AttribQuick" { count (0); return (PARSEOP_ACCESSATTRIB_QUICK); } "AttribSendReceive" { count (0); return (PARSEOP_ACCESSATTRIB_SND_RCV); } "AttribByte" { count (0); return (PARSEOP_ACCESSATTRIB_BYTE); } "AttribWord" { count (0); return (PARSEOP_ACCESSATTRIB_WORD); } "AttribBlock" { count (0); return (PARSEOP_ACCESSATTRIB_BLOCK); } "AttribProcessCall" { count (0); return (PARSEOP_ACCESSATTRIB_WORD_CALL); } "AttribBlockProcessCall" { count (0); return (PARSEOP_ACCESSATTRIB_BLOCK_CALL); } /* AccessAttribKeyword: Legacy synonyms for above (pre-ACPI 5.0) */ "SMBQuick" { count (0); return (PARSEOP_ACCESSATTRIB_QUICK); } "SMBSendReceive" { count (0); return (PARSEOP_ACCESSATTRIB_SND_RCV); } "SMBByte" { count (0); return (PARSEOP_ACCESSATTRIB_BYTE); } "SMBWord" { count (0); return (PARSEOP_ACCESSATTRIB_WORD); } "SMBBlock" { count (0); return (PARSEOP_ACCESSATTRIB_BLOCK); } "SMBProcessCall" { count (0); return (PARSEOP_ACCESSATTRIB_WORD_CALL); } "SMBBlockProcessCall" { count (0); return (PARSEOP_ACCESSATTRIB_BLOCK_CALL); } /* AccessTypeKeyword: Field Access Types */ "AnyAcc" { count (0); return (PARSEOP_ACCESSTYPE_ANY); } "ByteAcc" { count (0); return (PARSEOP_ACCESSTYPE_BYTE); } "WordAcc" { count (0); return (PARSEOP_ACCESSTYPE_WORD); } "DWordAcc" { count (0); return (PARSEOP_ACCESSTYPE_DWORD); } "QWordAcc" { count (0); return (PARSEOP_ACCESSTYPE_QWORD); } "BufferAcc" { count (0); return (PARSEOP_ACCESSTYPE_BUF); } /* AddressingModeKeyword: Mode - Resource Descriptors (ACPI 5.0) */ "AddressingMode7Bit" { count (0); return (PARSEOP_ADDRESSINGMODE_7BIT); } "AddressingMode10Bit" { count (0); return (PARSEOP_ADDRESSINGMODE_10BIT); } /* AddressKeyword: ACPI memory range types */ "AddressRangeMemory" { count (0); return (PARSEOP_ADDRESSTYPE_MEMORY); } "AddressRangeReserved" { count (0); return (PARSEOP_ADDRESSTYPE_RESERVED); } "AddressRangeNVS" { count (0); return (PARSEOP_ADDRESSTYPE_NVS); } "AddressRangeACPI" { count (0); return (PARSEOP_ADDRESSTYPE_ACPI); } /* BusMasterKeyword: DMA Bus Mastering */ "BusMaster" { count (0); return (PARSEOP_BUSMASTERTYPE_MASTER); } "NotBusMaster" { count (0); return (PARSEOP_BUSMASTERTYPE_NOTMASTER); } /* ByteLengthKeyword: Bits per Byte - Resource Descriptors (ACPI 5.0) */ "DataBitsFive" { count (0); return (PARSEOP_BITSPERBYTE_FIVE); } "DataBitsSix" { count (0); return (PARSEOP_BITSPERBYTE_SIX); } "DataBitsSeven" { count (0); return (PARSEOP_BITSPERBYTE_SEVEN); } "DataBitsEight" { count (0); return (PARSEOP_BITSPERBYTE_EIGHT); } "DataBitsNine" { count (0); return (PARSEOP_BITSPERBYTE_NINE); } /* ClockPhaseKeyword: Resource Descriptors (ACPI 5.0) */ "ClockPhaseFirst" { count (0); return (PARSEOP_CLOCKPHASE_FIRST); } "ClockPhaseSecond" { count (0); return (PARSEOP_CLOCKPHASE_SECOND); } /* ClockPolarityKeyword: Resource Descriptors (ACPI 5.0) */ "ClockPolarityLow" { count (0); return (PARSEOP_CLOCKPOLARITY_LOW); } "ClockPolarityHigh" { count (0); return (PARSEOP_CLOCKPOLARITY_HIGH); } /* DecodeKeyword: Type of Memory Decoding - Resource Descriptors */ "PosDecode" { count (0); return (PARSEOP_DECODETYPE_POS); } "SubDecode" { count (0); return (PARSEOP_DECODETYPE_SUB); } /* DmaTypeKeyword: DMA Types - DMA Resource Descriptor */ "Compatibility" { count (0); return (PARSEOP_DMATYPE_COMPATIBILITY); } "TypeA" { count (0); return (PARSEOP_DMATYPE_A); } "TypeB" { count (0); return (PARSEOP_DMATYPE_B); } "TypeF" { count (0); return (PARSEOP_DMATYPE_F); } /* EndianKeyword: Endian type - Resource Descriptor (ACPI 5.0) */ "LittleEndian" { count (0); return (PARSEOP_ENDIAN_LITTLE); } "BigEndian" { count (0); return (PARSEOP_ENDIAN_BIG); } /* ExtendedAttribKeyword: Bus attributes, AccessAs operator (ACPI 5.0) */ "AttribBytes" { count (0); return (PARSEOP_ACCESSATTRIB_BYTES); } "AttribRawBytes" { count (0); return (PARSEOP_ACCESSATTRIB_RAW_BYTES); } "AttribRawProcessBytes" { count (0); return (PARSEOP_ACCESSATTRIB_RAW_PROCESS); } /* FlowControlKeyword: Resource Descriptors (ACPI 5.0) */ "FlowControlHardware" { count (0); return (PARSEOP_FLOWCONTROL_HW); } "FlowControlNone" { count (0); return (PARSEOP_FLOWCONTROL_NONE); } "FlowControlXon" { count (0); return (PARSEOP_FLOWCONTROL_SW); } /* InterruptLevelKeyword: Interrupt Active Types */ "ActiveBoth" { count (0); return (PARSEOP_INTLEVEL_ACTIVEBOTH); } "ActiveHigh" { count (0); return (PARSEOP_INTLEVEL_ACTIVEHIGH); } "ActiveLow" { count (0); return (PARSEOP_INTLEVEL_ACTIVELOW); } /* InterruptTypeKeyword: Interrupt Types */ "Edge" { count (0); return (PARSEOP_INTTYPE_EDGE); } "Level" { count (0); return (PARSEOP_INTTYPE_LEVEL); } /* IoDecodeKeyword: Type of Memory Decoding - Resource Descriptors */ "Decode10" { count (0); return (PARSEOP_IODECODETYPE_10); } "Decode16" { count (0); return (PARSEOP_IODECODETYPE_16); } /* IoRestrictionKeyword: I/O Restriction - GPIO Resource Descriptors (ACPI 5.0) */ "IoRestrictionNone" { count (0); return (PARSEOP_IORESTRICT_NONE); } "IoRestrictionInputOnly" { count (0); return (PARSEOP_IORESTRICT_IN); } "IoRestrictionOutputOnly" { count (0); return (PARSEOP_IORESTRICT_OUT); } "IoRestrictionNoneAndPreserve" { count (0); return (PARSEOP_IORESTRICT_PRESERVE); } /* LockRuleKeyword: Global Lock use for Field Operator */ "Lock" { count (0); return (PARSEOP_LOCKRULE_LOCK); } "NoLock" { count (0); return (PARSEOP_LOCKRULE_NOLOCK); } /* MatchOpKeyword: Types for Match Operator */ "MTR" { count (0); return (PARSEOP_MATCHTYPE_MTR); } "MEQ" { count (0); return (PARSEOP_MATCHTYPE_MEQ); } "MLE" { count (0); return (PARSEOP_MATCHTYPE_MLE); } "MLT" { count (0); return (PARSEOP_MATCHTYPE_MLT); } "MGE" { count (0); return (PARSEOP_MATCHTYPE_MGE); } "MGT" { count (0); return (PARSEOP_MATCHTYPE_MGT); } /* MaxKeyword: Max Range Type - Resource Descriptors */ "MaxFixed" { count (0); return (PARSEOP_MAXTYPE_FIXED); } "MaxNotFixed" { count (0); return (PARSEOP_MAXTYPE_NOTFIXED); } /* MemTypeKeyword: Memory Types - Resource Descriptors */ "Cacheable" { count (0); return (PARSEOP_MEMTYPE_CACHEABLE); } "WriteCombining" { count (0); return (PARSEOP_MEMTYPE_WRITECOMBINING); } "Prefetchable" { count (0); return (PARSEOP_MEMTYPE_PREFETCHABLE); } "NonCacheable" { count (0); return (PARSEOP_MEMTYPE_NONCACHEABLE); } /* MinKeyword: Min Range Type - Resource Descriptors */ "MinFixed" { count (0); return (PARSEOP_MINTYPE_FIXED); } "MinNotFixed" { count (0); return (PARSEOP_MINTYPE_NOTFIXED); } /* ObjectTypeKeyword: ACPI Object Types */ "UnknownObj" { count (0); return (PARSEOP_OBJECTTYPE_UNK); } "IntObj" { count (0); return (PARSEOP_OBJECTTYPE_INT); } "StrObj" { count (0); return (PARSEOP_OBJECTTYPE_STR); } "BuffObj" { count (0); return (PARSEOP_OBJECTTYPE_BUF); } "PkgObj" { count (0); return (PARSEOP_OBJECTTYPE_PKG); } "FieldUnitObj" { count (0); return (PARSEOP_OBJECTTYPE_FLD); } "DeviceObj" { count (0); return (PARSEOP_OBJECTTYPE_DEV); } "EventObj" { count (0); return (PARSEOP_OBJECTTYPE_EVT); } "MethodObj" { count (0); return (PARSEOP_OBJECTTYPE_MTH); } "MutexObj" { count (0); return (PARSEOP_OBJECTTYPE_MTX); } "OpRegionObj" { count (0); return (PARSEOP_OBJECTTYPE_OPR); } "PowerResObj" { count (0); return (PARSEOP_OBJECTTYPE_POW); } "ProcessorObj" { count (0); return (PARSEOP_OBJECTTYPE_PRO); } "ThermalZoneObj" { count (0); return (PARSEOP_OBJECTTYPE_THZ); } "BuffFieldObj" { count (0); return (PARSEOP_OBJECTTYPE_BFF); } "DDBHandleObj" { count (0); return (PARSEOP_OBJECTTYPE_DDB); } /* ParityKeyword: Resource Descriptors (ACPI 5.0) */ "ParityTypeSpace" { count (0); return (PARSEOP_PARITYTYPE_SPACE); } "ParityTypeMark" { count (0); return (PARSEOP_PARITYTYPE_MARK); } "ParityTypeOdd" { count (0); return (PARSEOP_PARITYTYPE_ODD); } "ParityTypeEven" { count (0); return (PARSEOP_PARITYTYPE_EVEN); } "ParityTypeNone" { count (0); return (PARSEOP_PARITYTYPE_NONE); } /* PinConfigKeyword: Pin Configuration - GPIO Resource Descriptors (ACPI 5.0) */ "PullDefault" { count (0); return (PARSEOP_PIN_PULLDEFAULT); } "PullUp" { count (0); return (PARSEOP_PIN_PULLUP); } "PullDown" { count (0); return (PARSEOP_PIN_PULLDOWN); } "PullNone" { count (0); return (PARSEOP_PIN_NOPULL); } /* ClockScaleKeyword: Resource Descriptors (ACPI 6.5) */ "Hz" { count (0); return (PARSEOP_CLOCK_HZ); } "KHz" { count (0); return (PARSEOP_CLOCK_KHZ); } "MHz" { count (0); return (PARSEOP_CLOCK_MHZ); } /* ClockModeKeyword: Resource Descriptors (ACPI 6.5) */ "Fixed" { count (0); return (PARSEOP_CLOCK_FIXED); } "Variable" { count (0); return (PARSEOP_CLOCK_VARIABLE); } /* PolarityKeyword: Resource Descriptors (ACPI 5.0) */ "PolarityLow" { count (0); return (PARSEOP_DEVICEPOLARITY_LOW); } "PolarityHigh" { count (0); return (PARSEOP_DEVICEPOLARITY_HIGH); } /* RangeTypeKeyword: I/O Range Types - Resource Descriptors */ "ISAOnlyRanges" { count (0); return (PARSEOP_RANGETYPE_ISAONLY); } "NonISAOnlyRanges" { count (0); return (PARSEOP_RANGETYPE_NONISAONLY); } "EntireRange" { count (0); return (PARSEOP_RANGETYPE_ENTIRE); } /* ReadWriteKeyword: Memory Access Types - Resource Descriptors */ "ReadWrite" { count (0); return (PARSEOP_READWRITETYPE_BOTH); } "ReadOnly" { count (0); return (PARSEOP_READWRITETYPE_READONLY); } /* RegionSpaceKeyword: Operation Region Address Space Types */ "SystemIO" { count (0); return (PARSEOP_REGIONSPACE_IO); } "SystemMemory" { count (0); return (PARSEOP_REGIONSPACE_MEM); } "PCI_Config" { count (0); return (PARSEOP_REGIONSPACE_PCI); } "EmbeddedControl" { count (0); return (PARSEOP_REGIONSPACE_EC); } "SMBus" { count (0); return (PARSEOP_REGIONSPACE_SMBUS); } "SystemCMOS" { count (0); return (PARSEOP_REGIONSPACE_CMOS); } "PciBarTarget" { count (0); return (PARSEOP_REGIONSPACE_PCIBAR); } "IPMI" { count (0); return (PARSEOP_REGIONSPACE_IPMI); } "GeneralPurposeIo" { count (0); return (PARSEOP_REGIONSPACE_GPIO); } /* ACPI 5.0 */ "GenericSerialBus" { count (0); return (PARSEOP_REGIONSPACE_GSBUS); } /* ACPI 5.0 */ "PCC" { count (0); return (PARSEOP_REGIONSPACE_PCC); } /* ACPI 5.0 */ "PlatformRtMechanism" { count (0); return (PARSEOP_REGIONSPACE_PRM); } "FFixedHW" { count (0); return (PARSEOP_REGIONSPACE_FFIXEDHW); } /* ResourceTypeKeyword: Resource Usage - Resource Descriptors */ "ResourceConsumer" { count (0); return (PARSEOP_RESOURCETYPE_CONSUMER); } "ResourceProducer" { count (0); return (PARSEOP_RESOURCETYPE_PRODUCER); } /* SerializeRuleKeyword: Control Method Serialization */ "Serialized" { count (0); return (PARSEOP_SERIALIZERULE_SERIAL); } "NotSerialized" { count (0); return (PARSEOP_SERIALIZERULE_NOTSERIAL); } /* ShareTypeKeyword: Interrupt Sharing - Resource Descriptors */ "Shared" { count (0); return (PARSEOP_SHARETYPE_SHARED); } "Exclusive" { count (0); return (PARSEOP_SHARETYPE_EXCLUSIVE); } "SharedAndWake" { count (0); return (PARSEOP_SHARETYPE_SHAREDWAKE); } /* ACPI 5.0 */ "ExclusiveAndWake" { count (0); return (PARSEOP_SHARETYPE_EXCLUSIVEWAKE); } /* ACPI 5.0 */ /* SlaveModeKeyword: Resource Descriptors (ACPI 5.0) */ "ControllerInitiated" { count (0); return (PARSEOP_SLAVEMODE_CONTROLLERINIT); } "DeviceInitiated" { count (0); return (PARSEOP_SLAVEMODE_DEVICEINIT); } /* StopBitsKeyword: Resource Descriptors (ACPI 5.0) */ "StopBitsOne" { count (0); return (PARSEOP_STOPBITS_ONE); } "StopBitsOnePlusHalf" { count (0); return (PARSEOP_STOPBITS_ONEPLUSHALF); } "StopBitsTwo" { count (0); return (PARSEOP_STOPBITS_TWO); } "StopBitsZero" { count (0); return (PARSEOP_STOPBITS_ZERO); } /* TransferWidthKeyword: DMA Widths - Fixed DMA Resource Descriptor (ACPI 5.0) */ "Width8bit" { count (0); return (PARSEOP_XFERSIZE_8); } "Width16bit" { count (0); return (PARSEOP_XFERSIZE_16); } "Width32bit" { count (0); return (PARSEOP_XFERSIZE_32); } "Width64bit" { count (0); return (PARSEOP_XFERSIZE_64); } "Width128bit" { count (0); return (PARSEOP_XFERSIZE_128); } "Width256bit" { count (0); return (PARSEOP_XFERSIZE_256); } /* TranslationKeyword: Translation Density Types - Resource Descriptors */ "SparseTranslation" { count (0); return (PARSEOP_TRANSLATIONTYPE_SPARSE); } "DenseTranslation" { count (0); return (PARSEOP_TRANSLATIONTYPE_DENSE); } /* TypeKeyword: Translation Types - Resource Descriptors */ "TypeTranslation" { count (0); return (PARSEOP_TYPE_TRANSLATION); } "TypeStatic" { count (0); return (PARSEOP_TYPE_STATIC); } /* UpdateRuleKeyword: Field Update Rules */ "Preserve" { count (0); return (PARSEOP_UPDATERULE_PRESERVE); } "WriteAsOnes" { count (0); return (PARSEOP_UPDATERULE_ONES); } "WriteAsZeros" { count (0); return (PARSEOP_UPDATERULE_ZEROS); } /* WireModeKeyword: SPI Wire Mode - Resource Descriptors (ACPI 5.0) */ "FourWireMode" { count (0); return (PARSEOP_WIREMODE_FOUR); } "ThreeWireMode" { count (0); return (PARSEOP_WIREMODE_THREE); } /* XferTypeKeyword: DMA Transfer Types */ "Transfer8" { count (0); return (PARSEOP_XFERTYPE_8); } "Transfer8_16" { count (0); return (PARSEOP_XFERTYPE_8_16); } "Transfer16" { count (0); return (PARSEOP_XFERTYPE_16); } /* ToPld macro */ "ToPLD" { count (0); return (PARSEOP_TOPLD); } "PLD_Revision" { count (0); return (PARSEOP_PLD_REVISION); } "PLD_IgnoreColor" { count (0); return (PARSEOP_PLD_IGNORECOLOR); } "PLD_Red" { count (0); return (PARSEOP_PLD_RED); } "PLD_Green" { count (0); return (PARSEOP_PLD_GREEN); } "PLD_Blue" { count (0); return (PARSEOP_PLD_BLUE); } "PLD_Width" { count (0); return (PARSEOP_PLD_WIDTH); } "PLD_Height" { count (0); return (PARSEOP_PLD_HEIGHT); } "PLD_UserVisible" { count (0); return (PARSEOP_PLD_USERVISIBLE); } "PLD_Dock" { count (0); return (PARSEOP_PLD_DOCK); } "PLD_Lid" { count (0); return (PARSEOP_PLD_LID); } "PLD_Panel" { count (0); return (PARSEOP_PLD_PANEL); } "PLD_VerticalPosition" { count (0); return (PARSEOP_PLD_VERTICALPOSITION); } "PLD_HorizontalPosition" { count (0); return (PARSEOP_PLD_HORIZONTALPOSITION); } "PLD_Shape" { count (0); return (PARSEOP_PLD_SHAPE); } "PLD_GroupOrientation" { count (0); return (PARSEOP_PLD_GROUPORIENTATION); } "PLD_GroupToken" { count (0); return (PARSEOP_PLD_GROUPTOKEN); } "PLD_GroupPosition" { count (0); return (PARSEOP_PLD_GROUPPOSITION); } "PLD_Bay" { count (0); return (PARSEOP_PLD_BAY); } "PLD_Ejectable" { count (0); return (PARSEOP_PLD_EJECTABLE); } "PLD_EjectRequired" { count (0); return (PARSEOP_PLD_EJECTREQUIRED); } "PLD_CabinetNumber" { count (0); return (PARSEOP_PLD_CABINETNUMBER); } "PLD_CardCageNumber" { count (0); return (PARSEOP_PLD_CARDCAGENUMBER); } "PLD_Reference" { count (0); return (PARSEOP_PLD_REFERENCE); } "PLD_Rotation" { count (0); return (PARSEOP_PLD_ROTATION); } "PLD_Order" { count (0); return (PARSEOP_PLD_ORDER); } "PLD_Reserved" { count (0); return (PARSEOP_PLD_RESERVED); } "PLD_VerticalOffset" { count (0); return (PARSEOP_PLD_VERTICALOFFSET); } "PLD_HorizontalOffset" { count (0); return (PARSEOP_PLD_HORIZONTALOFFSET); } /* printf debug macros */ "printf" { count (0); return (PARSEOP_PRINTF); } "fprintf" { count (0); return (PARSEOP_FPRINTF); } /* Other macros */ "For" { count (0); return (PARSEOP_FOR); } /* Predefined compiler names */ "__DATE__" { count (0); return (PARSEOP___DATE__); } "__FILE__" { count (0); return (PARSEOP___FILE__); } "__LINE__" { count (0); return (PARSEOP___LINE__); } "__PATH__" { count (0); return (PARSEOP___PATH__); } "__METHOD__" { count (0); return (PARSEOP___METHOD__); } "__EXPECT__"{ErrorCode} { char *s; unsigned int index = 0; count (0); while (!isdigit ((int) AslCompilertext[index])) { index++; } /* * The error code is contained inside the * {ErrorCode} pattern. Extract it and log it * as the expected error code. */ s = UtLocalCacheCalloc (ASL_ERROR_CODE_LENGTH + 1); memcpy (s, AslCompilertext + index, ASL_ERROR_CODE_LENGTH); AslLogExpectedExceptionByLine (s); } {NameSeg} { char *s; count (0); s=UtLocalCacheCalloc (ACPI_NAMESEG_SIZE + 1); if (strcmp (AslCompilertext, "\\")) { /* * According to the ACPI specification, * NameSegments must have length of 4. If * the NameSegment has length less than 4, * they are padded with underscores to meet * the required length. */ strcpy (s, "____"); } memcpy (s, AslCompilertext, strlen (AslCompilertext)); AslCompilerlval.s = s; DbgPrint (ASL_PARSE_OUTPUT, "NameSeg: %s\n", s); return (PARSEOP_NAMESEG); } {NameString} { char *s; count (0); s=UtLocalCacheCalloc (strlen (AslCompilertext)+1); strcpy (s, AslCompilertext); AslCompilerlval.s = s; DbgPrint (ASL_PARSE_OUTPUT, "NameString: %s\n", s); return (PARSEOP_NAMESTRING); } . { count (1); if (isprint ((int) *AslCompilertext)) { sprintf (AslGbl_MsgBuffer, "Invalid character (%c), expecting ASL keyword or name", *AslCompilertext); } else { sprintf (AslGbl_MsgBuffer, "Invalid character (0x%2.2X), expecting ASL keyword or name", *AslCompilertext); } AslCompilererror (AslGbl_MsgBuffer);} <> { if (AslPopInputFileStack ()) {yyterminate();} else {return (PARSEOP_INCLUDE_END);} }; %% /*! [End] no source code translation !*/ /* * Bring in the scanner support routines */ #include "aslsupport.l" src/acpica/source/compiler/aslcstyle.y000066400000000000000000000427341465205512700204150ustar00rootroot00000000000000NoEcho(' /****************************************************************************** * * Module Name: aslcstyle.y - Production rules for symbolic operators * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ ') /******************************************************************************* * * Production rules for the symbolic (c-style) operators * ******************************************************************************/ /* * ASL Extensions: C-style math/logical operators and expressions. * The implementation transforms these operators into the standard * AML opcodes and syntax. * * Supported operators and precedence rules (high-to-low) * * NOTE: The operator precedence and associativity rules are * implemented by the tokens in asltokens.y * * (left-to-right): * 1) ( ) expr++ expr-- * * (right-to-left): * 2) ! ~ * * (left-to-right): * 3) * / % * 4) + - * 5) >> << * 6) < > <= >= * 7) == != * 8) & * 9) ^ * 10) | * 11) && * 12) || * * (right-to-left): * 13) = += -= *= /= %= <<= >>= &= ^= |= */ /******************************************************************************* * * Basic operations for math and logical expressions. * ******************************************************************************/ Expression /* Unary operators */ : PARSEOP_EXP_LOGICAL_NOT {$$ = TrCreateLeafOp (PARSEOP_LNOT);} TermArg {$$ = TrLinkOpChildren ($2,1,$3);} | PARSEOP_EXP_NOT {$$ = TrCreateLeafOp (PARSEOP_NOT);} TermArg {$$ = TrLinkOpChildren ($2,2,$3,TrCreateNullTargetOp ());} | SuperName PARSEOP_EXP_INCREMENT {$$ = TrCreateLeafOp (PARSEOP_INCREMENT);} {$$ = TrLinkOpChildren ($3,1,$1);} | SuperName PARSEOP_EXP_DECREMENT {$$ = TrCreateLeafOp (PARSEOP_DECREMENT);} {$$ = TrLinkOpChildren ($3,1,$1);} /* Binary operators: math and logical */ | TermArg PARSEOP_EXP_ADD {$$ = TrCreateLeafOp (PARSEOP_ADD);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4,TrCreateNullTargetOp ());} | TermArg PARSEOP_EXP_DIVIDE {$$ = TrCreateLeafOp (PARSEOP_DIVIDE);} TermArg {$$ = TrLinkOpChildren ($3,4,$1,$4,TrCreateNullTargetOp (), TrCreateNullTargetOp ());} | TermArg PARSEOP_EXP_MODULO {$$ = TrCreateLeafOp (PARSEOP_MOD);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4,TrCreateNullTargetOp ());} | TermArg PARSEOP_EXP_MULTIPLY {$$ = TrCreateLeafOp (PARSEOP_MULTIPLY);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4,TrCreateNullTargetOp ());} | TermArg PARSEOP_EXP_SHIFT_LEFT {$$ = TrCreateLeafOp (PARSEOP_SHIFTLEFT);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4,TrCreateNullTargetOp ());} | TermArg PARSEOP_EXP_SHIFT_RIGHT {$$ = TrCreateLeafOp (PARSEOP_SHIFTRIGHT);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4,TrCreateNullTargetOp ());} | TermArg PARSEOP_EXP_SUBTRACT {$$ = TrCreateLeafOp (PARSEOP_SUBTRACT);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4,TrCreateNullTargetOp ());} | TermArg PARSEOP_EXP_AND {$$ = TrCreateLeafOp (PARSEOP_AND);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4,TrCreateNullTargetOp ());} | TermArg PARSEOP_EXP_OR {$$ = TrCreateLeafOp (PARSEOP_OR);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4,TrCreateNullTargetOp ());} | TermArg PARSEOP_EXP_XOR {$$ = TrCreateLeafOp (PARSEOP_XOR);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4,TrCreateNullTargetOp ());} | TermArg PARSEOP_EXP_GREATER {$$ = TrCreateLeafOp (PARSEOP_LGREATER);} TermArg {$$ = TrLinkOpChildren ($3,2,$1,$4);} | TermArg PARSEOP_EXP_GREATER_EQUAL {$$ = TrCreateLeafOp (PARSEOP_LGREATEREQUAL);} TermArg {$$ = TrLinkOpChildren ($3,2,$1,$4);} | TermArg PARSEOP_EXP_LESS {$$ = TrCreateLeafOp (PARSEOP_LLESS);} TermArg {$$ = TrLinkOpChildren ($3,2,$1,$4);} | TermArg PARSEOP_EXP_LESS_EQUAL {$$ = TrCreateLeafOp (PARSEOP_LLESSEQUAL);} TermArg {$$ = TrLinkOpChildren ($3,2,$1,$4);} | TermArg PARSEOP_EXP_EQUAL {$$ = TrCreateLeafOp (PARSEOP_LEQUAL);} TermArg {$$ = TrLinkOpChildren ($3,2,$1,$4);} | TermArg PARSEOP_EXP_NOT_EQUAL {$$ = TrCreateLeafOp (PARSEOP_LNOTEQUAL);} TermArg {$$ = TrLinkOpChildren ($3,2,$1,$4);} | TermArg PARSEOP_EXP_LOGICAL_AND {$$ = TrCreateLeafOp (PARSEOP_LAND);} TermArg {$$ = TrLinkOpChildren ($3,2,$1,$4);} | TermArg PARSEOP_EXP_LOGICAL_OR {$$ = TrCreateLeafOp (PARSEOP_LOR);} TermArg {$$ = TrLinkOpChildren ($3,2,$1,$4);} /* Parentheses */ | PARSEOP_OPEN_PAREN Expression PARSEOP_CLOSE_PAREN {$$ = $2;} /* Index term -- "= BUF1[5]" on right-hand side of an equals (source) */ | IndexExpTerm ; /* * Index term -- "BUF1[5] = " or " = BUF1[5] on either the left side * of an equals (target) or the right side (source) * Currently used in these terms: * Expression * ObjectTypeSource * DerefOfSource * Type6Opcode */ IndexExpTerm : SuperName PARSEOP_EXP_INDEX_LEFT TermArg PARSEOP_EXP_INDEX_RIGHT {$$ = TrCreateLeafOp (PARSEOP_INDEX); TrLinkOpChildren ($$,3,$1,$3,TrCreateNullTargetOp ());} ; /******************************************************************************* * * All assignment-type operations -- math and logical. Includes simple * assignment and compound assignments. * ******************************************************************************/ EqualsTerm /* Allow parens anywhere */ : PARSEOP_OPEN_PAREN EqualsTerm PARSEOP_CLOSE_PAREN {$$ = $2;} /* Simple Store() operation */ | SuperName PARSEOP_EXP_EQUALS TermArg {$$ = TrCreateAssignmentOp ($1, $3);} /* Chained equals: (a=RefOf)=b, a=b=c=d etc. */ | PARSEOP_OPEN_PAREN EqualsTerm PARSEOP_CLOSE_PAREN PARSEOP_EXP_EQUALS TermArg {$$ = TrCreateAssignmentOp ($2, $5);} /* Compound assignments -- Add (operand, operand, target) */ | TermArg PARSEOP_EXP_ADD_EQ {$$ = TrCreateLeafOp (PARSEOP_ADD);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4, TrSetOpFlags (TrCreateTargetOp ($1, NULL), OP_IS_TARGET));} | TermArg PARSEOP_EXP_DIV_EQ {$$ = TrCreateLeafOp (PARSEOP_DIVIDE);} TermArg {$$ = TrLinkOpChildren ($3,4,$1,$4,TrCreateNullTargetOp (), TrSetOpFlags (TrCreateTargetOp ($1, NULL), OP_IS_TARGET));} | TermArg PARSEOP_EXP_MOD_EQ {$$ = TrCreateLeafOp (PARSEOP_MOD);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4, TrSetOpFlags (TrCreateTargetOp ($1, NULL), OP_IS_TARGET));} | TermArg PARSEOP_EXP_MUL_EQ {$$ = TrCreateLeafOp (PARSEOP_MULTIPLY);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4, TrSetOpFlags (TrCreateTargetOp ($1, NULL), OP_IS_TARGET));} | TermArg PARSEOP_EXP_SHL_EQ {$$ = TrCreateLeafOp (PARSEOP_SHIFTLEFT);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4, TrSetOpFlags (TrCreateTargetOp ($1, NULL), OP_IS_TARGET));} | TermArg PARSEOP_EXP_SHR_EQ {$$ = TrCreateLeafOp (PARSEOP_SHIFTRIGHT);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4, TrSetOpFlags (TrCreateTargetOp ($1, NULL), OP_IS_TARGET));} | TermArg PARSEOP_EXP_SUB_EQ {$$ = TrCreateLeafOp (PARSEOP_SUBTRACT);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4, TrSetOpFlags (TrCreateTargetOp ($1, NULL), OP_IS_TARGET));} | TermArg PARSEOP_EXP_AND_EQ {$$ = TrCreateLeafOp (PARSEOP_AND);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4, TrSetOpFlags (TrCreateTargetOp ($1, NULL), OP_IS_TARGET));} | TermArg PARSEOP_EXP_OR_EQ {$$ = TrCreateLeafOp (PARSEOP_OR);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4, TrSetOpFlags (TrCreateTargetOp ($1, NULL), OP_IS_TARGET));} | TermArg PARSEOP_EXP_XOR_EQ {$$ = TrCreateLeafOp (PARSEOP_XOR);} TermArg {$$ = TrLinkOpChildren ($3,3,$1,$4, TrSetOpFlags (TrCreateTargetOp ($1, NULL), OP_IS_TARGET));} ; src/acpica/source/compiler/asldebug.c000066400000000000000000000412661465205512700201510ustar00rootroot00000000000000/****************************************************************************** * * Module Name: asldebug -- Debug output support * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("asldebug") /* Local prototypes */ static void UtDumpParseOpName ( ACPI_PARSE_OBJECT *Op, UINT32 Level, UINT32 DataLength); static char * UtCreateEscapeSequences ( char *InString); /******************************************************************************* * * FUNCTION: CvDbgPrint * * PARAMETERS: Type - Type of output * Fmt - Printf format string * ... - variable printf list * * RETURN: None * * DESCRIPTION: Print statement for debug messages within the converter. * ******************************************************************************/ void CvDbgPrint ( char *Fmt, ...) { va_list Args; if (!AcpiGbl_CaptureComments || !AcpiGbl_DebugAslConversion) { return; } va_start (Args, Fmt); (void) vfprintf (AcpiGbl_ConvDebugFile, Fmt, Args); va_end (Args); return; } /******************************************************************************* * * FUNCTION: UtDumpIntegerOp * * PARAMETERS: Op - Current parse op * Level - Current output indentation level * IntegerLength - Output length of the integer (2/4/8/16) * * RETURN: None * * DESCRIPTION: Emit formatted debug output for "integer" ops. * Note: IntegerLength must be one of 2,4,8,16. * ******************************************************************************/ void UtDumpIntegerOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level, UINT32 IntegerLength) { /* Emit the ParseOp name, leaving room for the integer */ UtDumpParseOpName (Op, Level, IntegerLength); /* Emit the integer based upon length */ switch (IntegerLength) { case 2: /* Byte */ case 4: /* Word */ case 8: /* Dword */ DbgPrint (ASL_TREE_OUTPUT, "%*.*X", IntegerLength, IntegerLength, (UINT32) Op->Asl.Value.Integer); break; case 16: /* Qword and Integer */ DbgPrint (ASL_TREE_OUTPUT, "%8.8X%8.8X", ACPI_FORMAT_UINT64 (Op->Asl.Value.Integer)); break; default: break; } } /******************************************************************************* * * FUNCTION: UtDumpStringOp * * PARAMETERS: Op - Current parse op * Level - Current output indentation level * * RETURN: None * * DESCRIPTION: Emit formatted debug output for String/Pathname ops. * ******************************************************************************/ void UtDumpStringOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level) { char *String; String = Op->Asl.Value.String; if (Op->Asl.ParseOpcode != PARSEOP_STRING_LITERAL) { /* * For the "path" ops NAMEPATH, NAMESEG, METHODCALL -- if the * ExternalName is valid, it takes precedence. In these cases the * Value.String is the raw "internal" name from the AML code, which * we don't want to use, because it contains non-ascii characters. */ if (Op->Asl.ExternalName) { String = Op->Asl.ExternalName; } } if (!String) { DbgPrint (ASL_TREE_OUTPUT, " ERROR: Could not find a valid String/Path pointer\n"); return; } String = UtCreateEscapeSequences (String); /* Emit the ParseOp name, leaving room for the string */ UtDumpParseOpName (Op, Level, strlen (String)); DbgPrint (ASL_TREE_OUTPUT, "%s", String); } /******************************************************************************* * * FUNCTION: UtCreateEscapeSequences * * PARAMETERS: InString - ASCII string to be expanded * * RETURN: Expanded string * * DESCRIPTION: Expand all non-printable ASCII bytes (0-0x1F) to escape * sequences. For example, hex 14 becomes \x14 * * NOTE: Since this function is used for debug output only, it does * not attempt to translate into the "known" escape sequences * such as \a, \f, \t, etc. * ******************************************************************************/ static char * UtCreateEscapeSequences ( char *InString) { char *String = InString; char *OutString; char *OutStringPtr; UINT32 InStringLength = 0; UINT32 EscapeCount = 0; /* * Determine up front how many escapes are within the string. * Obtain the input string length while doing so. */ while (*String) { if ((*String <= 0x1F) || (*String >= 0x7F)) { EscapeCount++; } InStringLength++; String++; } if (!EscapeCount) { return (InString); /* No escapes, nothing to do */ } /* New string buffer, 3 extra chars per escape (4 total) */ OutString = UtLocalCacheCalloc (InStringLength + (EscapeCount * 3)); OutStringPtr = OutString; /* Convert non-ascii or non-printable chars to escape sequences */ while (*InString) { if ((*InString <= 0x1F) || (*InString >= 0x7F)) { /* Insert a \x hex escape sequence */ OutStringPtr[0] = '\\'; OutStringPtr[1] = 'x'; OutStringPtr[2] = AcpiUtHexToAsciiChar (*InString, 4); OutStringPtr[3] = AcpiUtHexToAsciiChar (*InString, 0); OutStringPtr += 4; } else /* Normal ASCII character */ { *OutStringPtr = *InString; OutStringPtr++; } InString++; } return (OutString); } /******************************************************************************* * * FUNCTION: UtDumpBasicOp * * PARAMETERS: Op - Current parse op * Level - Current output indentation level * * RETURN: None * * DESCRIPTION: Generic formatted debug output for "basic" ops that have no * associated strings or integer values. * ******************************************************************************/ void UtDumpBasicOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level) { /* Just print out the ParseOp name, there is no extra data */ UtDumpParseOpName (Op, Level, 0); } /******************************************************************************* * * FUNCTION: UtDumpParseOpName * * PARAMETERS: Op - Current parse op * Level - Current output indentation level * DataLength - Length of data to appear after the name * * RETURN: None * * DESCRIPTION: Indent and emit the ascii ParseOp name for the op * ******************************************************************************/ static void UtDumpParseOpName ( ACPI_PARSE_OBJECT *Op, UINT32 Level, UINT32 DataLength) { char *ParseOpName; UINT32 IndentLength; UINT32 NameLength; UINT32 LineLength; UINT32 PaddingLength; /* Emit the LineNumber/IndentLevel prefix on each output line */ DbgPrint (ASL_TREE_OUTPUT, "%5.5d [%2d]", Op->Asl.LogicalLineNumber, Level); ParseOpName = UtGetOpName (Op->Asl.ParseOpcode); /* Calculate various lengths for output alignment */ IndentLength = Level * DEBUG_SPACES_PER_INDENT; NameLength = strlen (ParseOpName); LineLength = IndentLength + 1 + NameLength + 1 + DataLength; PaddingLength = (DEBUG_MAX_LINE_LENGTH + 1) - LineLength; /* Parse tree indentation is based upon the nesting/indent level */ if (Level) { DbgPrint (ASL_TREE_OUTPUT, "%*s", IndentLength, " "); } /* Emit the actual name here */ DbgPrint (ASL_TREE_OUTPUT, " %s", ParseOpName); /* Emit extra padding blanks for alignment of later data items */ if (LineLength > DEBUG_MAX_LINE_LENGTH) { /* Split a long line immediately after the ParseOpName string */ DbgPrint (ASL_TREE_OUTPUT, "\n%*s", (DEBUG_FULL_LINE_LENGTH - DataLength), " "); } else { DbgPrint (ASL_TREE_OUTPUT, "%*s", PaddingLength, " "); } } src/acpica/source/compiler/asldefine.h000066400000000000000000000325561465205512700203240ustar00rootroot00000000000000/****************************************************************************** * * Module Name: asldefine.h - Common defines for the iASL compiler * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ASLDEFINE_H #define __ASLDEFINE_H /* * Compiler versions and names */ #define ASL_COMPILER_NAME "ASL+ Optimizing Compiler/Disassembler" #define AML_DISASSEMBLER_NAME "AML/ASL+ Disassembler" #define ASL_INVOCATION_NAME "iasl" #define ASL_CREATOR_ID "INTL" #define ASL_DEFINE "__IASL__" #define ASL_PREFIX "iASL: " #define ASL_COMPLIANCE "Supports ACPI Specification Revision 6.3" /* Configuration constants */ #define ASL_MAX_ERROR_COUNT 200 #define ASL_PARSEOP_CACHE_SIZE (1024 * 16) #define ASL_STRING_CACHE_SIZE (1024 * 64) #define ASL_FIRST_PARSE_OPCODE PARSEOP_ACCESSAS #define ASL_PARSE_OPCODE_BASE PARSEOP_ACCESSAS /* First Lex type */ /* * Per-parser-generator configuration. These values are used to cheat and * directly access the bison/yacc token name table (yyname or yytname). * Note: These values are the index in yyname for the first lex token * (PARSEOP_ACCCESSAS). */ #if defined (YYBISON) #define ASL_YYTNAME_START 3 /* Bison */ #elif defined (YYBYACC) #define ASL_YYTNAME_START 257 /* Berkeley yacc */ #endif /* * Macros */ #define ASL_RESDESC_OFFSET(m) ACPI_OFFSET (AML_RESOURCE, m) #define ASL_PTR_DIFF(a,b) ((UINT8 *)(b) - (UINT8 *)(a)) #define ASL_PTR_ADD(a,b) ((UINT8 *)(a) = ((UINT8 *)(a) + (b))) #define ASL_GET_CHILD_NODE(a) (a)->Asl.Child #define ASL_GET_PEER_NODE(a) (a)->Asl.Next #define OP_TABLE_ENTRY(a,b,c,d) {b,d,a,c} /* Internal AML opcodes */ #define AML_RAW_DATA_BYTE (UINT16) 0xAA01 /* write one raw byte */ #define AML_RAW_DATA_WORD (UINT16) 0xAA02 /* write 2 raw bytes */ #define AML_RAW_DATA_DWORD (UINT16) 0xAA04 /* write 4 raw bytes */ #define AML_RAW_DATA_QWORD (UINT16) 0xAA08 /* write 8 raw bytes */ #define AML_RAW_DATA_BUFFER (UINT16) 0xAA0B /* raw buffer with length */ #define AML_RAW_DATA_CHAIN (UINT16) 0xAA0C /* chain of raw buffers */ #define AML_PACKAGE_LENGTH (UINT16) 0xAA10 #define AML_UNASSIGNED_OPCODE (UINT16) 0xEEEE #define AML_DEFAULT_ARG_OP (UINT16) 0xDDDD /* Types for input files */ #define ASL_INPUT_TYPE_BINARY 0 #define ASL_INPUT_TYPE_BINARY_ACPI_TABLE 1 #define ASL_INPUT_TYPE_ASCII_ASL 2 #define ASL_INPUT_TYPE_ASCII_DATA 3 /* Misc */ #define ASL_EXTERNAL_METHOD_UNKNOWN_PARAMS 255 #define ASL_ABORT TRUE #define ASL_NO_ABORT FALSE #define ASL_EOF ACPI_UINT32_MAX #define ASL_IGNORE_LINE (ACPI_UINT32_MAX -1) #define ASL_ERROR_CODE_LENGTH 4 /* Listings */ #define ASL_LISTING_LINE_PREFIX ": " /* Support for reserved method names */ #define ACPI_VALID_RESERVED_NAME_MAX 0x80000000 #define ACPI_NOT_RESERVED_NAME ACPI_UINT32_MAX #define ACPI_PREDEFINED_NAME (ACPI_UINT32_MAX - 1) #define ACPI_EVENT_RESERVED_NAME (ACPI_UINT32_MAX - 2) #define ACPI_COMPILER_RESERVED_NAME (ACPI_UINT32_MAX - 3) /* Helper macros for resource tag creation */ #define RsCreateMultiBitField \ RsCreateResourceField #define RsCreateBitField(Op, Name, ByteOffset, BitOffset) \ RsCreateResourceField (Op, Name, ByteOffset, BitOffset, 1) #define RsCreateByteField(Op, Name, ByteOffset) \ RsCreateResourceField (Op, Name, ByteOffset, 0, 8); #define RsCreateWordField(Op, Name, ByteOffset) \ RsCreateResourceField (Op, Name, ByteOffset, 0, 16); #define RsCreateDwordField(Op, Name, ByteOffset) \ RsCreateResourceField (Op, Name, ByteOffset, 0, 32); #define RsCreateQwordField(Op, Name, ByteOffset) \ RsCreateResourceField (Op, Name, ByteOffset, 0, 64); /* * Macros for debug output */ #define DEBUG_MAX_LINE_LENGTH 61 #define DEBUG_SPACES_PER_INDENT 3 #define DEBUG_FULL_LINE_LENGTH 71 #define ASL_PARSE_TREE_FULL_LINE "\n%71.71s" /* Header/Trailer for original parse tree directly from the parser */ #define ASL_PARSE_TREE_HEADER1 \ "%*s Value P_Op Flags Line# End# LogL# EndL#\n", 65, " " #define ASL_PARSE_TREE_DEBUG1 \ " %4.4X %8.8X %5d %5d %5d %5d" /* Header/Trailer for processed parse tree used for AML generation */ #define ASL_PARSE_TREE_HEADER2 \ "%*s NameString Value P_Op A_Op OpLen PByts Len SubLen PSubLen OpPtr"\ " Parent Child Next Flags AcTyp Final Col"\ " Line# End# LogL# EndL#\n", 60, " " #define ASL_PARSE_TREE_DEBUG2 \ " %08X %04X %04X %01X %04X %04X %05X %05X "\ "%8p %8p %8p %8p %08X %08X %04X %02d %5d %5d %5d %5d" /* * Macros for ASL/ASL+ converter */ #define COMMENT_CAPTURE_ON AslGbl_CommentState.CaptureComments = TRUE; #define COMMENT_CAPTURE_OFF AslGbl_CommentState.CaptureComments = FALSE; /* * Special name segments - these must only be declared at the root scope */ #define NAMESEG__PTS "_PTS" #define NAMESEG__WAK "_WAK" #define NAMESEG__S0 "_S0_" #define NAMESEG__S1 "_S1_" #define NAMESEG__S2 "_S2_" #define NAMESEG__S3 "_S3_" #define NAMESEG__S4 "_S4_" #define NAMESEG__S5 "_S5_" #define NAMESEG__TTS "_TTS" #define MAX_SPECIAL_NAMES 9 #endif /* ASLDEFINE.H */ src/acpica/source/compiler/aslerror.c000066400000000000000000001440521465205512700202110ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslerror - Error handling and statistics * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslerror") /* Local prototypes */ static void AeAddToErrorLog ( ASL_ERROR_MSG *Enode); static BOOLEAN AslIsExceptionExpected ( char *Filename, UINT32 LineNumber, UINT8 Level, UINT16 MessageId); static BOOLEAN AslIsExceptionDisabled ( UINT8 Level, UINT16 MessageId); static void AslInitEnode ( ASL_ERROR_MSG **Enode, UINT8 Level, UINT16 MessageId, UINT32 LineNumber, UINT32 LogicalLineNumber, UINT32 LogicalByteOffset, UINT32 Column, char *Filename, char *Message, char *SourceLine, ASL_ERROR_MSG *SubError); static void AslLogNewError ( UINT8 Level, UINT16 MessageId, UINT32 LineNumber, UINT32 LogicalLineNumber, UINT32 LogicalByteOffset, UINT32 Column, char *Filename, char *Message, char *SourceLine, ASL_ERROR_MSG *SubError); static void AePrintSubError ( FILE *OutputFile, ASL_ERROR_MSG *Enode); static UINT8 GetModifiedLevel ( UINT8 Level, UINT16 MessageId); /******************************************************************************* * * FUNCTION: AslAbort * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Dump the error log and abort the compiler. Used for serious * I/O errors. * ******************************************************************************/ void AslAbort ( void) { AePrintErrorLog (ASL_FILE_STDERR); if (AslGbl_DebugFlag) { /* Print error summary to stdout also */ AePrintErrorLog (ASL_FILE_STDOUT); } exit (1); } /******************************************************************************* * * FUNCTION: AeClearErrorLog * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Empty the error list * ******************************************************************************/ void AeClearErrorLog ( void) { ASL_ERROR_MSG *Enode = AslGbl_ErrorLog; ASL_ERROR_MSG *Next; /* Walk the error node list */ while (Enode) { Next = Enode->Next; ACPI_FREE (Enode); Enode = Next; } AslGbl_ErrorLog = NULL; } /******************************************************************************* * * FUNCTION: AeAddToErrorLog * * PARAMETERS: Enode - An error node to add to the log * * RETURN: None * * DESCRIPTION: Add a new error node to the error log. The error log is * ordered by the "logical" line number (cumulative line number * including all include files.) * ******************************************************************************/ static void AeAddToErrorLog ( ASL_ERROR_MSG *Enode) { ASL_ERROR_MSG *Next; ASL_ERROR_MSG *Prev; /* If Gbl_ErrorLog is null, this is the first error node */ if (!AslGbl_ErrorLog) { AslGbl_ErrorLog = Enode; return; } /* * Walk error list until we find a line number greater than ours. * List is sorted according to line number. */ Prev = NULL; Next = AslGbl_ErrorLog; while ((Next) && (Next->LogicalLineNumber <= Enode->LogicalLineNumber)) { Prev = Next; Next = Next->Next; } /* Found our place in the list */ Enode->Next = Next; if (Prev) { Prev->Next = Enode; } else { AslGbl_ErrorLog = Enode; } } /******************************************************************************* * * FUNCTION: AeDecodeErrorMessageId * * PARAMETERS: OutputFile - Output file * Enode - Error node to print * PrematureEOF - True = PrematureEOF has been reached * Total - Total length of line * * RETURN: None * * DESCRIPTION: Print the source line of an error. * ******************************************************************************/ static void AeDecodeErrorMessageId ( FILE *OutputFile, ASL_ERROR_MSG *Enode, BOOLEAN PrematureEOF, UINT32 Total) { UINT32 MsgLength; const char *MainMessage; char *ExtraMessage; UINT32 SourceColumn; UINT32 ErrorColumn; fprintf (OutputFile, "%s %4.4d -", AeDecodeExceptionLevel (Enode->Level), AeBuildFullExceptionCode (Enode->Level, Enode->MessageId)); MainMessage = AeDecodeMessageId (Enode->MessageId); ExtraMessage = Enode->Message; /* If a NULL line number, just print the decoded message */ if (!Enode->LineNumber) { fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage); return; } MsgLength = strlen (MainMessage); if (MsgLength == 0) { /* Use the secondary/extra message as main message */ MainMessage = Enode->Message; if (!MainMessage) { MainMessage = ""; } MsgLength = strlen (MainMessage); ExtraMessage = NULL; } if (AslGbl_VerboseErrors && !PrematureEOF) { if (Total >= 256) { fprintf (OutputFile, " %s", MainMessage); } else { SourceColumn = Enode->Column + Enode->FilenameLength + 6 + 2; ErrorColumn = ASL_ERROR_LEVEL_LENGTH + 5 + 2 + 1; if ((MsgLength + ErrorColumn) < (SourceColumn - 1)) { fprintf (OutputFile, "%*s%s", (int) ((SourceColumn - 1) - ErrorColumn), MainMessage, " ^ "); } else { fprintf (OutputFile, "%*s %s", (int) ((SourceColumn - ErrorColumn) + 1), "^", MainMessage); } } } else { fprintf (OutputFile, " %s", MainMessage); } /* Print the extra info message if present */ if (ExtraMessage) { fprintf (OutputFile, " (%s)", ExtraMessage); } if (PrematureEOF) { fprintf (OutputFile, " and premature End-Of-File"); } fprintf (OutputFile, "\n"); if (AslGbl_VerboseErrors && !Enode->SubError) { fprintf (OutputFile, "\n"); } } /******************************************************************************* * * FUNCTION: AePrintErrorSourceLine * * PARAMETERS: OutputFile - Output file * Enode - Error node to print * PrematureEOF - True = PrematureEOF has been reached * Total - Number of characters printed so far * * * RETURN: Status * * DESCRIPTION: Print the source line of an error. * ******************************************************************************/ static ACPI_STATUS AePrintErrorSourceLine ( FILE *OutputFile, ASL_ERROR_MSG *Enode, BOOLEAN *PrematureEOF, UINT32 *Total) { UINT8 SourceByte; int Actual; size_t RActual; FILE *SourceFile = NULL; long FileSize; if (!Enode->SourceLine) { /* * Use the merged header/source file if present, otherwise * use input file */ SourceFile = FlGetFileHandle (ASL_FILE_SOURCE_OUTPUT, ASL_FILE_SOURCE_OUTPUT, Enode->SourceFilename); if (!SourceFile) { SourceFile = FlGetFileHandle (ASL_FILE_INPUT, ASL_FILE_INPUT, Enode->Filename); } if (SourceFile) { /* Determine if the error occurred at source file EOF */ fseek (SourceFile, 0, SEEK_END); FileSize = ftell (SourceFile); if ((long) Enode->LogicalByteOffset >= FileSize) { *PrematureEOF = TRUE; } } else { fprintf (OutputFile, "[*** iASL: Source File Does not exist ***]\n"); return AE_IO_ERROR; } } /* Print filename and line number if present and valid */ if (AslGbl_VerboseErrors) { fprintf (OutputFile, "%-8s", Enode->Filename); if (Enode->SourceLine && Enode->LineNumber) { fprintf (OutputFile, " %6u: %s", Enode->LineNumber, Enode->SourceLine); } else if (Enode->LineNumber) { fprintf (OutputFile, " %6u: ", Enode->LineNumber); /* * If not at EOF, get the corresponding source code line * and display it. Don't attempt this if we have a * premature EOF condition. */ if (*PrematureEOF) { fprintf (OutputFile, "\n"); return AE_OK; } /* * Seek to the offset in the combined source file, * read the source line, and write it to the output. */ Actual = fseek (SourceFile, (long) Enode->LogicalByteOffset, (int) SEEK_SET); if (Actual) { fprintf (OutputFile, "[*** iASL: Seek error on source code temp file %s ***]", AslGbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); fprintf (OutputFile, "\n"); return AE_OK; } RActual = fread (&SourceByte, 1, 1, SourceFile); if (RActual != 1) { fprintf (OutputFile, "[*** iASL: Read error on source code temp file %s ***]", AslGbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); return AE_IO_ERROR; } /* Read/write the source line, up to the maximum line length */ while (RActual && SourceByte && (SourceByte != '\n')) { if (*Total < 256) { /* After the max line length, we will just read the line, no write */ if (fwrite (&SourceByte, 1, 1, OutputFile) != 1) { printf ("[*** iASL: Write error on output file ***]\n"); return AE_IO_ERROR; } } else if (*Total == 256) { fprintf (OutputFile, "\n[*** iASL: Very long input line, message below refers to column %u ***]", Enode->Column); } RActual = fread (&SourceByte, 1, 1, SourceFile); if (RActual != 1) { fprintf (OutputFile, "[*** iASL: Read error on source code temp file %s ***]", AslGbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename); return AE_IO_ERROR; } *Total += 1; } fprintf (OutputFile, "\n"); } } else { /* * Less verbose version of the error message, enabled via the * -vi switch. The format is compatible with MS Visual Studio. */ fprintf (OutputFile, "%s", Enode->Filename); if (Enode->LineNumber) { fprintf (OutputFile, "(%u) : ", Enode->LineNumber); } } return AE_OK; } /******************************************************************************* * * FUNCTION: AePrintException * * PARAMETERS: FileId - ID of output file * Enode - Error node to print * Header - Additional text before each message * * RETURN: None * * DESCRIPTION: Print the contents of an error node. * * NOTE: We don't use the FlxxxFile I/O functions here because on error * they abort the compiler and call this function! Since we * are reporting errors here, we ignore most output errors and * just try to get out as much as we can. * ******************************************************************************/ void AePrintException ( UINT32 FileId, ASL_ERROR_MSG *Enode, char *Header) { FILE *OutputFile; BOOLEAN PrematureEOF = FALSE; UINT32 Total = 0; ACPI_STATUS Status; ASL_ERROR_MSG *Child = Enode->SubError; if (AslGbl_NoErrors) { return; } /* * Only listing files have a header, and remarks/optimizations * are always output */ if (!Header) { /* Ignore remarks if requested */ switch (Enode->Level) { case ASL_WARNING: case ASL_WARNING2: case ASL_WARNING3: if (!AslGbl_DisplayWarnings) { return; } break; case ASL_REMARK: if (!AslGbl_DisplayRemarks) { return; } break; case ASL_OPTIMIZATION: if (!AslGbl_DisplayOptimizations) { return; } break; default: break; } } /* Get the various required file handles */ OutputFile = AslGbl_Files[FileId].Handle; if (Header) { fprintf (OutputFile, "%s", Header); } if (!Enode->Filename) { AeDecodeErrorMessageId (OutputFile, Enode, PrematureEOF, Total); return; } Status = AePrintErrorSourceLine (OutputFile, Enode, &PrematureEOF, &Total); if (ACPI_FAILURE (Status)) { return; } /* If a NULL message ID, just print the raw message */ if (Enode->MessageId == 0) { fprintf (OutputFile, "%s\n", Enode->Message); return; } AeDecodeErrorMessageId (OutputFile, Enode, PrematureEOF, Total); while (Child) { fprintf (OutputFile, "\n"); AePrintSubError (OutputFile, Child); Child = Child->SubError; } } /******************************************************************************* * * FUNCTION: AePrintSubError * * PARAMETERS: OutputFile - Output file * Enode - Error node to print * * RETURN: None * * DESCRIPTION: Print the contents of an error node. This function is tailored * to print error nodes that are SubErrors within ASL_ERROR_MSG * ******************************************************************************/ static void AePrintSubError ( FILE *OutputFile, ASL_ERROR_MSG *Enode) { UINT32 Total = 0; BOOLEAN PrematureEOF = FALSE; const char *MainMessage; MainMessage = AeDecodeMessageId (Enode->MessageId); fprintf (OutputFile, " %s", MainMessage); if (Enode->Message) { fprintf (OutputFile, "(%s)", Enode->Message); } fprintf (OutputFile, "\n "); (void) AePrintErrorSourceLine (OutputFile, Enode, &PrematureEOF, &Total); fprintf (OutputFile, "\n"); } /******************************************************************************* * * FUNCTION: AePrintErrorLog * * PARAMETERS: FileId - Where to output the error log * * RETURN: None * * DESCRIPTION: Print the entire contents of the error log * ******************************************************************************/ void AePrintErrorLog ( UINT32 FileId) { ASL_ERROR_MSG *Enode = AslGbl_ErrorLog; /* Walk the error node list */ while (Enode) { AePrintException (FileId, Enode, NULL); Enode = Enode->Next; } } /******************************************************************************* * * FUNCTION: AslInitEnode * * PARAMETERS: InputEnode - Input Error node to initialize * Level - Seriousness (Warning/error, etc.) * MessageId - Index into global message buffer * CurrentLineNumber - Actual file line number * LogicalLineNumber - Cumulative line number * LogicalByteOffset - Byte offset in source file * Column - Column in current line * Filename - Source filename * ExtraMessage - Additional error message * SourceLine - Line of error source code * SubError - SubError of this InputEnode * * RETURN: None * * DESCRIPTION: Initialize an Error node * ******************************************************************************/ static void AslInitEnode ( ASL_ERROR_MSG **InputEnode, UINT8 Level, UINT16 MessageId, UINT32 LineNumber, UINT32 LogicalLineNumber, UINT32 LogicalByteOffset, UINT32 Column, char *Filename, char *ExtraMessage, char *SourceLine, ASL_ERROR_MSG *SubError) { ASL_ERROR_MSG *Enode; ASL_GLOBAL_FILE_NODE *FileNode; *InputEnode = UtLocalCalloc (sizeof (ASL_ERROR_MSG)); Enode = *InputEnode; Enode->Level = Level; Enode->MessageId = MessageId; Enode->LineNumber = LineNumber; Enode->LogicalLineNumber = LogicalLineNumber; Enode->LogicalByteOffset = LogicalByteOffset; Enode->Column = Column; Enode->SubError = SubError; Enode->Message = NULL; Enode->SourceLine = NULL; Enode->Filename = NULL; if (ExtraMessage) { /* Allocate a buffer for the message and a new error node */ Enode->Message = UtLocalCacheCalloc (strlen (ExtraMessage) + 1); /* Keep a copy of the extra message */ strcpy (Enode->Message, ExtraMessage); } if (SourceLine) { Enode->SourceLine = UtLocalCalloc (strlen (SourceLine) + 1); strcpy (Enode->SourceLine, SourceLine); } if (Filename) { Enode->Filename = Filename; Enode->FilenameLength = strlen (Filename); if (Enode->FilenameLength < 6) { Enode->FilenameLength = 6; } /* * Attempt to get the file node of the filename listed in the parse * node. If the name doesn't exist in the global file node, it is * because the file is included by #include or ASL include. In this * case, get the current file node. The source output of the current * file will contain the contents of the file listed in the parse node. */ FileNode = FlGetFileNode (ASL_FILE_INPUT, Filename); if (!FileNode) { FileNode = FlGetCurrentFileNode (); } Enode->SourceFilename = FileNode->Files[ASL_FILE_SOURCE_OUTPUT].Filename; } } /******************************************************************************* * * FUNCTION: AslCommonError2 * * PARAMETERS: Level - Seriousness (Warning/error, etc.) * MessageId - Index into global message buffer * LineNumber - Actual file line number * Column - Column in current line * SourceLine - Actual source code line * Filename - Source filename * ExtraMessage - Additional error message * * RETURN: None * * DESCRIPTION: Create a new error node and add it to the error log * ******************************************************************************/ void AslCommonError2 ( UINT8 Level, UINT16 MessageId, UINT32 LineNumber, UINT32 Column, char *SourceLine, char *Filename, char *ExtraMessage) { AslLogNewError (Level, MessageId, LineNumber, LineNumber, 0, Column, Filename, ExtraMessage, SourceLine, NULL); } /******************************************************************************* * * FUNCTION: AslCommonError * * PARAMETERS: Level - Seriousness (Warning/error, etc.) * MessageId - Index into global message buffer * CurrentLineNumber - Actual file line number * LogicalLineNumber - Cumulative line number * LogicalByteOffset - Byte offset in source file * Column - Column in current line * Filename - Source filename * ExtraMessage - Additional error message * * RETURN: None * * DESCRIPTION: Create a new error node and add it to the error log * ******************************************************************************/ void AslCommonError ( UINT8 Level, UINT16 MessageId, UINT32 CurrentLineNumber, UINT32 LogicalLineNumber, UINT32 LogicalByteOffset, UINT32 Column, char *Filename, char *ExtraMessage) { /* Check if user wants to ignore this exception */ if (AslIsExceptionIgnored (Filename, LogicalLineNumber, Level, MessageId)) { return; } AslLogNewError (Level, MessageId, CurrentLineNumber, LogicalLineNumber, LogicalByteOffset, Column, Filename, ExtraMessage, NULL, NULL); } /******************************************************************************* * * FUNCTION: AslLogNewError * * PARAMETERS: Level - Seriousness (Warning/error, etc.) * MessageId - Index into global message buffer * CurrentLineNumber - Actual file line number * LogicalLineNumber - Cumulative line number * LogicalByteOffset - Byte offset in source file * Column - Column in current line * Filename - Source filename * Message - Additional error message * SourceLine - Actual line of source code * SubError - Sub-error associated with this error * * RETURN: None * * DESCRIPTION: Create a new error node and add it to the error log * ******************************************************************************/ static void AslLogNewError ( UINT8 Level, UINT16 MessageId, UINT32 LineNumber, UINT32 LogicalLineNumber, UINT32 LogicalByteOffset, UINT32 Column, char *Filename, char *Message, char *SourceLine, ASL_ERROR_MSG *SubError) { ASL_ERROR_MSG *Enode = NULL; UINT8 ModifiedLevel = GetModifiedLevel (Level, MessageId); AslInitEnode (&Enode, ModifiedLevel, MessageId, LineNumber, LogicalLineNumber, LogicalByteOffset, Column, Filename, Message, SourceLine, SubError); /* Add the new node to the error node list */ AeAddToErrorLog (Enode); if (AslGbl_DebugFlag) { /* stderr is a file, send error to it immediately */ AePrintException (ASL_FILE_STDERR, Enode, NULL); } AslGbl_ExceptionCount[ModifiedLevel]++; if (!AslGbl_IgnoreErrors && AslGbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT) { printf ("\nMaximum error count (%u) exceeded (aslerror.c)\n", ASL_MAX_ERROR_COUNT); AslGbl_SourceLine = 0; AslGbl_NextError = AslGbl_ErrorLog; CmCleanupAndExit (); exit(1); } return; } /******************************************************************************* * * FUNCTION: GetModifiedLevel * * PARAMETERS: Level - Seriousness (Warning/error, etc.) * MessageId - Index into global message buffer * * RETURN: UINT8 - Modified level * * DESCRIPTION: Get the modified level of exception codes that are reported as * errors from the -ww option. * ******************************************************************************/ static UINT8 GetModifiedLevel ( UINT8 Level, UINT16 MessageId) { UINT32 i; UINT16 ExceptionCode; ExceptionCode = AeBuildFullExceptionCode (Level, MessageId); for (i = 0; i < AslGbl_ElevatedMessagesIndex; i++) { if (ExceptionCode == AslGbl_ElevatedMessages[i]) { return (ASL_ERROR); } } return (Level); } /******************************************************************************* * * FUNCTION: AslIsExceptionIgnored * * PARAMETERS: Level - Seriousness (Warning/error, etc.) * MessageId - Index into global message buffer * * RETURN: BOOLEAN * * DESCRIPTION: Check if a particular exception is ignored. In this case it * means that the exception is (expected or disabled. * ******************************************************************************/ BOOLEAN AslIsExceptionIgnored ( char *Filename, UINT32 LineNumber, UINT8 Level, UINT16 MessageId) { BOOLEAN ExceptionIgnored; /* Note: this allows exception to be disabled and expected */ ExceptionIgnored = AslIsExceptionDisabled (Level, MessageId); ExceptionIgnored |= AslIsExceptionExpected (Filename, LineNumber, Level, MessageId); return (AslGbl_AllExceptionsDisabled || ExceptionIgnored); } /******************************************************************************* * * FUNCTION: AslCheckExpectedException * * PARAMETERS: none * * RETURN: none * * DESCRIPTION: Check the global expected messages table and raise an error * for each message that has not been received. * ******************************************************************************/ void AslCheckExpectedExceptions ( void) { UINT32 i; ASL_EXPECTED_MSG_NODE *Current = AslGbl_ExpectedErrorCodeList; ASL_LOCATION_NODE *LocationNode; for (i = 0; i < AslGbl_ExpectedMessagesIndex; ++i) { if (!AslGbl_ExpectedMessages[i].MessageReceived) { AslError (ASL_ERROR, ASL_MSG_EXCEPTION_NOT_RECEIVED, NULL, AslGbl_ExpectedMessages[i].MessageIdStr); } } while (Current) { LocationNode = Current->LocationList; while (LocationNode) { if (!LocationNode->MessageReceived) { AslCommonError (ASL_ERROR, ASL_MSG_EXCEPTION_NOT_RECEIVED, LocationNode->LineNumber, LocationNode->LineNumber, LocationNode->LogicalByteOffset, LocationNode->Column, LocationNode->Filename, Current->MessageIdStr); } LocationNode = LocationNode->Next; } Current = Current->Next; } } /******************************************************************************* * * FUNCTION: AslLogExpectedException * * PARAMETERS: MessageIdString - ID of excepted exception during compile * * RETURN: Status * * DESCRIPTION: Enter a message ID into the global expected messages table * If these messages are not raised during the compilation, throw * an error. * ******************************************************************************/ ACPI_STATUS AslLogExpectedException ( char *MessageIdString) { UINT32 MessageId; /* Convert argument to an integer and validate it */ MessageId = (UINT32) strtoul (MessageIdString, NULL, 0); if (MessageId > 6999) { printf ("\"%s\" is not a valid warning/remark/error ID\n", MessageIdString); return (AE_BAD_PARAMETER); } /* Insert value into the global expected message array */ if (AslGbl_ExpectedMessagesIndex >= ASL_MAX_EXPECTED_MESSAGES) { printf ("Too many messages have been registered as expected (max %d)\n", ASL_MAX_DISABLED_MESSAGES); return (AE_LIMIT); } AslGbl_ExpectedMessages[AslGbl_ExpectedMessagesIndex].MessageId = MessageId; AslGbl_ExpectedMessages[AslGbl_ExpectedMessagesIndex].MessageIdStr = MessageIdString; AslGbl_ExpectedMessages[AslGbl_ExpectedMessagesIndex].MessageReceived = FALSE; AslGbl_ExpectedMessagesIndex++; return (AE_OK); } /******************************************************************************* * * FUNCTION: AslLogExpectedExceptionByLine * * PARAMETERS: MessageIdString - ID of excepted exception during compile * * RETURN: Status * * DESCRIPTION: Enter a message ID into the global expected messages table * based on file and line number. If these messages are not raised * during the compilation, throw an error. * ******************************************************************************/ void AslLogExpectedExceptionByLine ( char *MessageIdString) { ASL_LOCATION_NODE *NewErrorLocationNode; ASL_EXPECTED_MSG_NODE *Current = AslGbl_ExpectedErrorCodeList; UINT32 MessageId; NewErrorLocationNode = UtLocalCalloc (sizeof (ASL_LOCATION_NODE)); NewErrorLocationNode->LineNumber = AslGbl_CurrentLineNumber; NewErrorLocationNode->Filename = AslGbl_Files[ASL_FILE_INPUT].Filename; NewErrorLocationNode->LogicalByteOffset = AslGbl_CurrentLineOffset; NewErrorLocationNode->Column = AslGbl_CurrentColumn; MessageId = (UINT32) strtoul (MessageIdString, NULL, 0); /* search the existing list for a matching message ID */ while (Current && Current->MessageId != MessageId ) { Current = Current->Next; } if (!Current) { /* ID was not found, create a new node for this message ID */ Current = UtLocalCalloc (sizeof (ASL_EXPECTED_MSG_NODE)); Current->Next = AslGbl_ExpectedErrorCodeList; Current->MessageIdStr = MessageIdString; Current->MessageId = MessageId; AslGbl_ExpectedErrorCodeList = Current; } NewErrorLocationNode->Next = Current->LocationList; Current->LocationList = NewErrorLocationNode; } /******************************************************************************* * * FUNCTION: AslDisableException * * PARAMETERS: MessageIdString - ID to be disabled * * RETURN: Status * * DESCRIPTION: Enter a message ID into the global disabled messages table * ******************************************************************************/ ACPI_STATUS AslDisableException ( char *MessageIdString) { UINT32 MessageId; /* Convert argument to an integer and validate it */ MessageId = (UINT32) strtoul (MessageIdString, NULL, 0); if ((MessageId < 2000) || (MessageId > 6999)) { printf ("\"%s\" is not a valid warning/remark/error ID\n", MessageIdString); return (AE_BAD_PARAMETER); } /* Insert value into the global disabled message array */ if (AslGbl_DisabledMessagesIndex >= ASL_MAX_DISABLED_MESSAGES) { printf ("Too many messages have been disabled (max %d)\n", ASL_MAX_DISABLED_MESSAGES); return (AE_LIMIT); } AslGbl_DisabledMessages[AslGbl_DisabledMessagesIndex] = MessageId; AslGbl_DisabledMessagesIndex++; return (AE_OK); } /******************************************************************************* * * FUNCTION: AslElevateException * * PARAMETERS: MessageIdString - ID of excepted exception during compile * * RETURN: Status * * DESCRIPTION: Enter a message ID into the global elevated exceptions table. * These messages will be considered as compilation errors. * ******************************************************************************/ ACPI_STATUS AslElevateException ( char *MessageIdString) { UINT32 MessageId; /* Convert argument to an integer and validate it */ MessageId = (UINT32) strtoul (MessageIdString, NULL, 0); if (MessageId > 6999) { printf ("\"%s\" is not a valid warning/remark/error ID\n", MessageIdString); return (AE_BAD_PARAMETER); } /* Insert value into the global expected message array */ if (AslGbl_ElevatedMessagesIndex >= ASL_MAX_ELEVATED_MESSAGES) { printf ("Too many messages have been registered as elevated (max %d)\n", ASL_MAX_DISABLED_MESSAGES); return (AE_LIMIT); } AslGbl_ElevatedMessages[AslGbl_ElevatedMessagesIndex] = MessageId; AslGbl_ElevatedMessagesIndex++; return (AE_OK); } /******************************************************************************* * * FUNCTION: AslIsExceptionDisabled * * PARAMETERS: Level - Seriousness (Warning/error, etc.) * MessageId - Index into global message buffer * * RETURN: TRUE if exception/message should be ignored * * DESCRIPTION: Check if the user has specified options such that this * exception should be ignored * ******************************************************************************/ static BOOLEAN AslIsExceptionExpected ( char *Filename, UINT32 LineNumber, UINT8 Level, UINT16 MessageId) { ASL_EXPECTED_MSG_NODE *Current = AslGbl_ExpectedErrorCodeList; ASL_LOCATION_NODE *CurrentErrorLocation; UINT32 EncodedMessageId; UINT32 i; /* Mark this exception as received */ EncodedMessageId = AeBuildFullExceptionCode (Level, MessageId); for (i = 0; i < AslGbl_ExpectedMessagesIndex; i++) { /* Simple implementation via fixed array */ if (EncodedMessageId == AslGbl_ExpectedMessages[i].MessageId) { return (AslGbl_ExpectedMessages[i].MessageReceived = TRUE); } } while (Current && Current->MessageId != EncodedMessageId) { Current = Current->Next; } if (!Current) { return (FALSE); } CurrentErrorLocation = Current->LocationList; while (CurrentErrorLocation) { if (!strcmp (CurrentErrorLocation->Filename, Filename) && CurrentErrorLocation->LineNumber == LineNumber) { return (CurrentErrorLocation->MessageReceived = TRUE); } CurrentErrorLocation = CurrentErrorLocation->Next; } return (FALSE); } /******************************************************************************* * * FUNCTION: AslIsExceptionDisabled * * PARAMETERS: Level - Seriousness (Warning/error, etc.) * MessageId - Index into global message buffer * * RETURN: TRUE if exception/message should be ignored * * DESCRIPTION: Check if the user has specified options such that this * exception should be ignored * ******************************************************************************/ static BOOLEAN AslIsExceptionDisabled ( UINT8 Level, UINT16 MessageId) { UINT32 EncodedMessageId; UINT32 i; switch (Level) { case ASL_WARNING2: case ASL_WARNING3: /* Check for global disable via -w1/-w2/-w3 options */ if (Level > AslGbl_WarningLevel) { return (TRUE); } ACPI_FALLTHROUGH; case ASL_WARNING: case ASL_REMARK: case ASL_ERROR: /* * Ignore this error/warning/remark if it has been disabled by * the user (-vw option) */ EncodedMessageId = AeBuildFullExceptionCode (Level, MessageId); for (i = 0; i < AslGbl_DisabledMessagesIndex; i++) { /* Simple implementation via fixed array */ if (EncodedMessageId == AslGbl_DisabledMessages[i]) { return (TRUE); } } break; default: break; } return (FALSE); } /******************************************************************************* * * FUNCTION: AslDualParseOpError * * PARAMETERS: Level - Seriousness (Warning/error, etc.) * MainMsgId - Index into global message buffer * MainOp - Parse node where error happened * MainMsg - Message pertaining to the MainOp * SubMsgId - Index into global message buffer * SubOp - Additional parse node for better message * SubMsg - Message pertaining to SubOp * * * RETURN: None * * DESCRIPTION: Main error reporting routine for the ASL compiler for error * messages that point to multiple parse objects. * ******************************************************************************/ void AslDualParseOpError ( UINT8 Level, UINT16 MainMsgId, ACPI_PARSE_OBJECT *MainOp, char *MainMsg, UINT16 SubMsgId, ACPI_PARSE_OBJECT *SubOp, char *SubMsg) { ASL_ERROR_MSG *SubEnode = NULL; /* Check if user wants to ignore this exception */ if (!MainOp || AslIsExceptionIgnored (MainOp->Asl.Filename, MainOp->Asl.LogicalLineNumber, Level, MainMsgId)) { return; } if (SubOp) { AslInitEnode (&SubEnode, Level, SubMsgId, SubOp->Asl.LineNumber, SubOp->Asl.LogicalLineNumber, SubOp->Asl.LogicalByteOffset, SubOp->Asl.Column, SubOp->Asl.Filename, SubMsg, NULL, NULL); } AslLogNewError (Level, MainMsgId, MainOp->Asl.LineNumber, MainOp->Asl.LogicalLineNumber, MainOp->Asl.LogicalByteOffset, MainOp->Asl.Column, MainOp->Asl.Filename, MainMsg, NULL, SubEnode); } /******************************************************************************* * * FUNCTION: AslError * * PARAMETERS: Level - Seriousness (Warning/error, etc.) * MessageId - Index into global message buffer * Op - Parse node where error happened * ExtraMessage - Additional error message * * RETURN: None * * DESCRIPTION: Main error reporting routine for the ASL compiler (all code * except the parser.) * ******************************************************************************/ void AslError ( UINT8 Level, UINT16 MessageId, ACPI_PARSE_OBJECT *Op, char *ExtraMessage) { if (Op) { AslCommonError (Level, MessageId, Op->Asl.LineNumber, Op->Asl.LogicalLineNumber, Op->Asl.LogicalByteOffset, Op->Asl.Column, Op->Asl.Filename, ExtraMessage); } else { AslCommonError (Level, MessageId, 0, 0, 0, 0, NULL, ExtraMessage); } } /******************************************************************************* * * FUNCTION: AslCoreSubsystemError * * PARAMETERS: Op - Parse node where error happened * Status - The ACPICA Exception * ExtraMessage - Additional error message * Abort - TRUE -> Abort compilation * * RETURN: None * * DESCRIPTION: Error reporting routine for exceptions returned by the ACPICA * core subsystem. * ******************************************************************************/ void AslCoreSubsystemError ( ACPI_PARSE_OBJECT *Op, ACPI_STATUS Status, char *ExtraMessage, BOOLEAN Abort) { sprintf (AslGbl_MsgBuffer, "%s %s", AcpiFormatException (Status), ExtraMessage); if (Op) { AslCommonError (ASL_ERROR, ASL_MSG_CORE_EXCEPTION, Op->Asl.LineNumber, Op->Asl.LogicalLineNumber, Op->Asl.LogicalByteOffset, Op->Asl.Column, Op->Asl.Filename, AslGbl_MsgBuffer); } else { AslCommonError (ASL_ERROR, ASL_MSG_CORE_EXCEPTION, 0, 0, 0, 0, NULL, AslGbl_MsgBuffer); } if (Abort) { AslAbort (); } } /******************************************************************************* * * FUNCTION: AslCompilererror * * PARAMETERS: CompilerMessage - Error message from the parser * * RETURN: Status (0 for now) * * DESCRIPTION: Report an error situation discovered in a production * NOTE: don't change the name of this function, it is called * from the auto-generated parser. * ******************************************************************************/ int AslCompilererror ( const char *CompilerMessage) { AslGbl_SyntaxError++; AslCommonError (ASL_ERROR, ASL_MSG_SYNTAX, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, ACPI_CAST_PTR (char, CompilerMessage)); return (0); } src/acpica/source/compiler/aslexternal.c000066400000000000000000000537331465205512700207070ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslexternal - ASL External opcode compiler support * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acparser.h" #include "amlcode.h" #include "acnamesp.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslexternal") /* Local prototypes */ static void ExInsertArgCount ( ACPI_PARSE_OBJECT *Op); static void ExMoveExternals ( ACPI_PARSE_OBJECT *DefinitionBlockOp); /******************************************************************************* * * FUNCTION: ExDoExternal * * PARAMETERS: Op - Current Parse node * * RETURN: None * * DESCRIPTION: Add an External() definition to the global list. This list * is used to generate External opcodes. * ******************************************************************************/ void ExDoExternal ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *ListOp; ACPI_PARSE_OBJECT *Prev; ACPI_PARSE_OBJECT *Next; ACPI_PARSE_OBJECT *ArgCountOp; ACPI_PARSE_OBJECT *TypeOp; ACPI_PARSE_OBJECT *ExternTypeOp = Op->Asl.Child->Asl.Next; UINT32 ExternType; UINT8 ParamCount = ASL_EXTERNAL_METHOD_UNKNOWN_PARAMS; UINT32 ParamTypes[ACPI_METHOD_NUM_ARGS]; ExternType = AnMapObjTypeToBtype (ExternTypeOp); if (ExternType != ACPI_BTYPE_METHOD) { /* * If this is not a method, it has zero parameters this local variable * is used only for methods */ ParamCount = 0; } /* * The parser allows optional parameter return types regardless of the * type. Check object type keyword emit error if optional parameter/return * types exist. * * Check the parameter return type */ TypeOp = ExternTypeOp->Asl.Next; if (TypeOp->Asl.Child) { /* Ignore the return type for now. */ (void) MtProcessTypeOp (TypeOp->Asl.Child); if (ExternType != ACPI_BTYPE_METHOD) { sprintf (AslGbl_MsgBuffer, "Found type [%s]", AcpiUtGetTypeName(ExternType)); AslError (ASL_ERROR, ASL_MSG_EXTERN_INVALID_RET_TYPE, TypeOp, AslGbl_MsgBuffer); } } /* Check the parameter types */ TypeOp = TypeOp->Asl.Next; if (TypeOp->Asl.Child) { ParamCount = MtProcessParameterTypeList (TypeOp->Asl.Child, ParamTypes); if (ExternType != ACPI_BTYPE_METHOD) { sprintf (AslGbl_MsgBuffer, "Found type [%s]", AcpiUtGetTypeName(ExternType)); AslError (ASL_ERROR, ASL_MSG_EXTERN_INVALID_PARAM_TYPE, TypeOp, AslGbl_MsgBuffer); } } ArgCountOp = Op->Asl.Child->Asl.Next->Asl.Next; ArgCountOp->Asl.AmlOpcode = AML_RAW_DATA_BYTE; ArgCountOp->Asl.ParseOpcode = PARSEOP_BYTECONST; ArgCountOp->Asl.Value.Integer = ParamCount; UtSetParseOpName (ArgCountOp); /* Create new list node of arbitrary type */ ListOp = TrAllocateOp (PARSEOP_DEFAULT_ARG); /* Store External node as child */ ListOp->Asl.Child = Op; ListOp->Asl.Next = NULL; if (AslGbl_ExternalsListHead) { /* Link new External to end of list */ Prev = AslGbl_ExternalsListHead; Next = Prev; while (Next) { Prev = Next; Next = Next->Asl.Next; } Prev->Asl.Next = ListOp; } else { AslGbl_ExternalsListHead = ListOp; } } /******************************************************************************* * * FUNCTION: ExInsertArgCount * * PARAMETERS: Op - Op for a method invocation * * RETURN: None * * DESCRIPTION: Obtain the number of arguments for a control method -- from * the actual invocation. * ******************************************************************************/ static void ExInsertArgCount ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next; ACPI_PARSE_OBJECT *NameOp; ACPI_PARSE_OBJECT *Child; ACPI_PARSE_OBJECT *ArgCountOp; char * ExternalName; char * CallName; UINT16 ArgCount = 0; ACPI_STATUS Status; CallName = AcpiNsGetNormalizedPathname (Op->Asl.Node, TRUE); Next = AslGbl_ExternalsListHead; while (Next) { ArgCount = 0; /* Skip if External node already handled */ if (Next->Asl.Child->Asl.CompileFlags & OP_VISITED) { Next = Next->Asl.Next; continue; } NameOp = Next->Asl.Child->Asl.Child; ExternalName = AcpiNsGetNormalizedPathname (NameOp->Asl.Node, TRUE); if (strcmp (CallName, ExternalName)) { ACPI_FREE (ExternalName); Next = Next->Asl.Next; continue; } Next->Asl.Child->Asl.CompileFlags |= OP_VISITED; /* * Since we will reposition Externals to the Root, set Namepath * to the fully qualified name and recalculate the aml length */ Status = UtInternalizeName (ExternalName, &NameOp->Asl.Value.String); ACPI_FREE (ExternalName); if (ACPI_FAILURE (Status)) { AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, NULL, "- Could not Internalize External"); break; } NameOp->Asl.AmlLength = strlen (NameOp->Asl.Value.String); /* Get argument count */ Child = Op->Asl.Child; while (Child) { ArgCount++; Child = Child->Asl.Next; } /* Setup ArgCount operand */ ArgCountOp = Next->Asl.Child->Asl.Child->Asl.Next->Asl.Next; ArgCountOp->Asl.Value.Integer = ArgCount; break; } ACPI_FREE (CallName); } /******************************************************************************* * * FUNCTION: ExAmlExternalWalkBegin * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: None * * DESCRIPTION: Parse tree walk to create external opcode list for methods. * ******************************************************************************/ ACPI_STATUS ExAmlExternalWalkBegin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { /* External list head saved in the definition block op */ if (Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK) { AslGbl_ExternalsListHead = Op->Asl.Value.Arg; } if (!AslGbl_ExternalsListHead) { return (AE_OK); } if (Op->Asl.ParseOpcode != PARSEOP_METHODCALL) { return (AE_OK); } /* * The NameOp child under an ExternalOp gets turned into PARSE_METHODCALL * by XfNamespaceLocateBegin(). Ignore these. */ if (Op->Asl.Parent && Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_EXTERNAL) { return (AE_OK); } ExInsertArgCount (Op); return (AE_OK); } /******************************************************************************* * * FUNCTION: ExAmlExternalWalkEnd * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: None * * DESCRIPTION: Parse tree walk to create external opcode list for methods. * Here, we just want to catch the case where a definition block * has been completed. Then we move all of the externals into * a single block in the parse tree and thus the AML code. * ******************************************************************************/ ACPI_STATUS ExAmlExternalWalkEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { if (Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK) { /* * Process any existing external list. (Support for * multiple definition blocks in a single file/compile) */ ExMoveExternals (Op); AslGbl_ExternalsListHead = NULL; } return (AE_OK); } /******************************************************************************* * * FUNCTION: ExMoveExternals * * PARAMETERS: DefinitionBlockOp - Op for current definition block * * RETURN: None * * DESCRIPTION: Move all externals present in the source file into a single * block of AML code, surrounded by an "If (0)" to prevent * AML interpreters from attempting to execute the External * opcodes. * ******************************************************************************/ static void ExMoveExternals ( ACPI_PARSE_OBJECT *DefinitionBlockOp) { ACPI_PARSE_OBJECT *ParentOp; ACPI_PARSE_OBJECT *ExternalOp; ACPI_PARSE_OBJECT *PredicateOp; ACPI_PARSE_OBJECT *NextOp; ACPI_PARSE_OBJECT *Prev; ACPI_PARSE_OBJECT *Next; char *ExternalName; ACPI_OBJECT_TYPE ObjType; ACPI_STATUS Status; UINT32 i; if (!AslGbl_ExternalsListHead) { return; } /* Remove the External nodes from the tree */ NextOp = AslGbl_ExternalsListHead; while (NextOp) { /* * The External is stored in child pointer of each node in the * list */ ExternalOp = NextOp->Asl.Child; /* Get/set the fully qualified name */ ExternalName = AcpiNsGetNormalizedPathname (ExternalOp->Asl.Node, TRUE); ExternalOp->Asl.ExternalName = ExternalName; ExternalOp->Asl.Namepath = ExternalName; /* Set line numbers (for listings, etc.) */ ExternalOp->Asl.LineNumber = 0; ExternalOp->Asl.LogicalLineNumber = 0; Next = ExternalOp->Asl.Child; Next->Asl.LineNumber = 0; Next->Asl.LogicalLineNumber = 0; if (Next->Asl.ParseOpcode == PARSEOP_NAMESEG) { Next->Asl.ParseOpcode = PARSEOP_NAMESTRING; } Next->Asl.ExternalName = ExternalName; Status = UtInternalizeName (ExternalName, &Next->Asl.Value.String); if (ACPI_FAILURE (Status)) { AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Next, "Could not internalize namestring"); return; } Next->Asl.AmlLength = strlen (Next->Asl.Value.String); Next = Next->Asl.Next; Next->Asl.LineNumber = 0; Next->Asl.LogicalLineNumber = 0; Next = Next->Asl.Next; Next->Asl.LineNumber = 0; Next->Asl.LogicalLineNumber = 0; Next = Next->Asl.Next; Next->Asl.LineNumber = 0; Next->Asl.LogicalLineNumber = 0; ParentOp = ExternalOp->Asl.Parent; Prev = Next = ParentOp->Asl.Child; /* Now find the External node's position in parse tree */ while (Next != ExternalOp) { Prev = Next; Next = Next->Asl.Next; } /* Remove the External from the parse tree */ if (Prev == ExternalOp) { /* External was the first child node */ ParentOp->Asl.Child = ExternalOp->Asl.Next; } Prev->Asl.Next = ExternalOp->Asl.Next; ExternalOp->Asl.Next = NULL; ExternalOp->Asl.Parent = AslGbl_ExternalsListHead; /* Point the External to the next in the list */ if (NextOp->Asl.Next) { ExternalOp->Asl.Next = NextOp->Asl.Next->Asl.Child; } NextOp = NextOp->Asl.Next; } /* * Loop again to remove MethodObj Externals for which * a MethodCall was not found (dead external reference) */ Prev = AslGbl_ExternalsListHead->Asl.Child; Next = Prev; while (Next) { ObjType = (ACPI_OBJECT_TYPE) Next->Asl.Child->Asl.Next->Asl.Value.Integer; if (ObjType == ACPI_TYPE_METHOD && !(Next->Asl.CompileFlags & OP_VISITED)) { if (Next == Prev) { AslGbl_ExternalsListHead->Asl.Child = Next->Asl.Next; Next->Asl.Next = NULL; Prev = AslGbl_ExternalsListHead->Asl.Child; Next = Prev; continue; } else { Prev->Asl.Next = Next->Asl.Next; Next->Asl.Next = NULL; Next = Prev->Asl.Next; continue; } } Prev = Next; Next = Next->Asl.Next; } /* If list is now empty, don't bother to make If (0) block */ if (!AslGbl_ExternalsListHead->Asl.Child) { return; } /* Convert Gbl_ExternalsListHead parent to If(). */ AslGbl_ExternalsListHead->Asl.ParseOpcode = PARSEOP_IF; AslGbl_ExternalsListHead->Asl.AmlOpcode = AML_IF_OP; AslGbl_ExternalsListHead->Asl.CompileFlags = OP_AML_PACKAGE; UtSetParseOpName (AslGbl_ExternalsListHead); /* Create a Zero op for the If predicate */ PredicateOp = TrAllocateOp (PARSEOP_ZERO); PredicateOp->Asl.AmlOpcode = AML_ZERO_OP; PredicateOp->Asl.Parent = AslGbl_ExternalsListHead; PredicateOp->Asl.Child = NULL; PredicateOp->Asl.Next = AslGbl_ExternalsListHead->Asl.Child; AslGbl_ExternalsListHead->Asl.Child = PredicateOp; /* Set line numbers (for listings, etc.) */ AslGbl_ExternalsListHead->Asl.LineNumber = 0; AslGbl_ExternalsListHead->Asl.LogicalLineNumber = 0; PredicateOp->Asl.LineNumber = 0; PredicateOp->Asl.LogicalLineNumber = 0; /* Insert block back in the list */ Prev = DefinitionBlockOp->Asl.Child; Next = Prev; /* Find last default arg */ for (i = 0; i < 6; i++) { Prev = Next; Next = Prev->Asl.Next; } if (Next) { /* Definition Block is not empty */ AslGbl_ExternalsListHead->Asl.Next = Next; } else { /* Definition Block is empty. */ AslGbl_ExternalsListHead->Asl.Next = NULL; } Prev->Asl.Next = AslGbl_ExternalsListHead; AslGbl_ExternalsListHead->Asl.Parent = Prev->Asl.Parent; } src/acpica/source/compiler/aslfileio.c000066400000000000000000000411061465205512700203230ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslfileio - File I/O support * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "acapps.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslfileio") /******************************************************************************* * * FUNCTION: FlFileError * * PARAMETERS: FileId - Index into file info array * ErrorId - Index into error message array * * RETURN: None * * DESCRIPTION: Decode errno to an error message and add the entire error * to the error log. * ******************************************************************************/ void FlFileError ( UINT32 FileId, UINT8 ErrorId) { sprintf (AslGbl_MsgBuffer, "\"%s\" (%s) - %s", AslGbl_Files[FileId].Filename, AslGbl_FileDescs[FileId].Description, strerror (errno)); AslCommonError (ASL_ERROR, ErrorId, 0, 0, 0, 0, NULL, AslGbl_MsgBuffer); } /******************************************************************************* * * FUNCTION: FlOpenFile * * PARAMETERS: FileId - Index into file info array * Filename - file pathname to open * Mode - Open mode for fopen * * RETURN: None * * DESCRIPTION: Open a file. * NOTE: Aborts compiler on any error. * ******************************************************************************/ void FlOpenFile ( UINT32 FileId, char *Filename, char *Mode) { FILE *File; AslGbl_Files[FileId].Filename = Filename; AslGbl_Files[FileId].Handle = NULL; File = fopen (Filename, Mode); if (!File) { FlFileError (FileId, ASL_MSG_OPEN); AslAbort (); } AslGbl_Files[FileId].Handle = File; } /******************************************************************************* * * FUNCTION: FlGetFileSize * * PARAMETERS: FileId - Index into file info array * * RETURN: File Size * * DESCRIPTION: Get current file size. Uses common seek-to-EOF function. * File must be open. Aborts compiler on error. * ******************************************************************************/ UINT32 FlGetFileSize ( UINT32 FileId) { UINT32 FileSize; FileSize = CmGetFileSize (AslGbl_Files[FileId].Handle); if (FileSize == ACPI_UINT32_MAX) { AslAbort(); } return (FileSize); } /******************************************************************************* * * FUNCTION: FlReadFile * * PARAMETERS: FileId - Index into file info array * Buffer - Where to place the data * Length - Amount to read * * RETURN: Status. AE_ERROR indicates EOF. * * DESCRIPTION: Read data from an open file. * NOTE: Aborts compiler on any error. * ******************************************************************************/ ACPI_STATUS FlReadFile ( UINT32 FileId, void *Buffer, UINT32 Length) { UINT32 Actual; /* Read and check for error */ Actual = fread (Buffer, 1, Length, AslGbl_Files[FileId].Handle); if (Actual < Length) { if (feof (AslGbl_Files[FileId].Handle)) { /* End-of-file, just return error */ return (AE_ERROR); } FlFileError (FileId, ASL_MSG_READ); AslAbort (); } return (AE_OK); } /******************************************************************************* * * FUNCTION: FlWriteFile * * PARAMETERS: FileId - Index into file info array * Buffer - Data to write * Length - Amount of data to write * * RETURN: None * * DESCRIPTION: Write data to an open file. * NOTE: Aborts compiler on any error. * ******************************************************************************/ void FlWriteFile ( UINT32 FileId, void *Buffer, UINT32 Length) { UINT32 Actual; /* Write and check for error */ Actual = fwrite ((char *) Buffer, 1, Length, AslGbl_Files[FileId].Handle); if (Actual != Length) { FlFileError (FileId, ASL_MSG_WRITE); AslAbort (); } if ((FileId == ASL_FILE_PREPROCESSOR) && AslGbl_PreprocessorOutputFlag) { /* Duplicate the output to the user preprocessor (.i) file */ Actual = fwrite ((char *) Buffer, 1, Length, AslGbl_Files[ASL_FILE_PREPROCESSOR_USER].Handle); if (Actual != Length) { FlFileError (FileId, ASL_MSG_WRITE); AslAbort (); } } } /******************************************************************************* * * FUNCTION: FlPrintFile * * PARAMETERS: FileId - Index into file info array * Format - Printf format string * ... - Printf arguments * * RETURN: None * * DESCRIPTION: Formatted write to an open file. * NOTE: Aborts compiler on any error. * ******************************************************************************/ void FlPrintFile ( UINT32 FileId, char *Format, ...) { INT32 Actual; va_list Args; va_start (Args, Format); Actual = vfprintf (AslGbl_Files[FileId].Handle, Format, Args); va_end (Args); if (Actual == -1) { FlFileError (FileId, ASL_MSG_WRITE); AslAbort (); } if ((FileId == ASL_FILE_PREPROCESSOR) && AslGbl_PreprocessorOutputFlag) { /* * Duplicate the output to the user preprocessor (.i) file, * except: no #line directives. */ if (!strncmp (Format, "#line", 5)) { return; } va_start (Args, Format); Actual = vfprintf (AslGbl_Files[ASL_FILE_PREPROCESSOR_USER].Handle, Format, Args); va_end (Args); if (Actual == -1) { FlFileError (FileId, ASL_MSG_WRITE); AslAbort (); } } } /******************************************************************************* * * FUNCTION: FlSeekFile * * PARAMETERS: FileId - Index into file info array * Offset - Absolute byte offset in file * * RETURN: None * * DESCRIPTION: Seek to absolute offset. * NOTE: Aborts compiler on any error. * ******************************************************************************/ void FlSeekFile ( UINT32 FileId, long Offset) { int Error; Error = fseek (AslGbl_Files[FileId].Handle, Offset, SEEK_SET); if (Error) { FlFileError (FileId, ASL_MSG_SEEK); AslAbort (); } } /******************************************************************************* * * FUNCTION: FlCloseFile * * PARAMETERS: FileId - Index into file info array * * RETURN: None * * DESCRIPTION: Close an open file. Aborts compiler on error * ******************************************************************************/ void FlCloseFile ( UINT32 FileId) { int Error; if (!AslGbl_Files[FileId].Handle) { return; } Error = fclose (AslGbl_Files[FileId].Handle); if (Error) { FlFileError (FileId, ASL_MSG_CLOSE); AslAbort (); } /* Do not clear/free the filename string */ AslGbl_Files[FileId].Handle = NULL; return; } /******************************************************************************* * * FUNCTION: FlDeleteFile * * PARAMETERS: FileId - Index into file info array * * RETURN: None * * DESCRIPTION: Delete a file. * ******************************************************************************/ void FlDeleteFile ( UINT32 FileId) { ASL_FILE_INFO *Info = &AslGbl_Files[FileId]; if (!Info->Filename) { return; } if (remove (Info->Filename)) { printf ("%s (%s file) ", Info->Filename, AslGbl_FileDescs[FileId].Description); perror ("Could not delete"); } Info->Filename = NULL; return; } src/acpica/source/compiler/aslfiles.c000066400000000000000000001165671465205512700201740ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslfiles - File support functions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "acapps.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslfiles") /* Local prototypes */ static FILE * FlOpenIncludeWithPrefix ( char *PrefixDir, ACPI_PARSE_OBJECT *Op, char *Filename); static BOOLEAN FlInputFileExists ( char *InputFilename); #ifdef ACPI_OBSOLETE_FUNCTIONS ACPI_STATUS FlParseInputPathname ( char *InputFilename); #endif /******************************************************************************* * * FUNCTION: FlInitOneFile * * PARAMETERS: InputFilename - The user-specified ASL source file to be * compiled * * RETURN: Status * * DESCRIPTION: Initialize global file structure for one input file. This file * structure contains references to input, output, debugging, and * other miscellaneous files that are associated for a single * input ASL file. * ******************************************************************************/ ACPI_STATUS FlInitOneFile ( char *InputFilename) { UINT32 i; ASL_GLOBAL_FILE_NODE *NewFileNode; if (FlInputFileExists (InputFilename)) { AslError (ASL_ERROR, ASL_MSG_DUPLICATE_INPUT_FILE, NULL, InputFilename); return (AE_ALREADY_EXISTS); } NewFileNode = ACPI_CAST_PTR (ASL_GLOBAL_FILE_NODE, UtLocalCacheCalloc (sizeof (ASL_GLOBAL_FILE_NODE))); NewFileNode->ParserErrorDetected = FALSE; NewFileNode->Next = AslGbl_FilesList; AslGbl_FilesList = NewFileNode; AslGbl_Files = NewFileNode->Files; for (i = 0; i < ASL_NUM_FILES; i++) { AslGbl_Files[i].Handle = NULL; AslGbl_Files[i].Filename = NULL; } AslGbl_Files[ASL_FILE_STDOUT].Handle = stdout; AslGbl_Files[ASL_FILE_STDOUT].Filename = "STDOUT"; if (AslGbl_VerboseErrors) { AslGbl_Files[ASL_FILE_STDERR].Handle = stderr; } else { AslGbl_Files[ASL_FILE_STDERR].Handle = stdout; } AslGbl_Files[ASL_FILE_STDERR].Filename = "STDERR"; return (AE_OK); } /******************************************************************************* * * FUNCTION: FlInputFileExists * * PARAMETERS: Filename - File name to be searched * * RETURN: Status * * DESCRIPTION: Returns true if the file name already exists. * ******************************************************************************/ static BOOLEAN FlInputFileExists ( char *Filename) { ASL_GLOBAL_FILE_NODE *Current = AslGbl_FilesList; while (Current) { if (!strcmp (Filename, Current->Files[ASL_FILE_INPUT].Filename)) { return (TRUE); } Current = Current->Next; } return (FALSE); } /******************************************************************************* * * FUNCTION: FlSwitchFileSet * * PARAMETERS: Op - Parse node for the LINE asl statement * * RETURN: None. * * DESCRIPTION: Set the current line number * ******************************************************************************/ ASL_FILE_SWITCH_STATUS FlSwitchFileSet ( char *InputFilename) { ASL_GLOBAL_FILE_NODE *Current = AslGbl_FilesList; char *PrevFilename = Current->Files[ASL_FILE_INPUT].Filename; while (Current) { if (!strcmp(Current->Files[ASL_FILE_INPUT].Filename, InputFilename)) { AslGbl_Files = Current->Files; AslGbl_TableSignature = Current->TableSignature; AslGbl_TableId = Current->TableId; if (!strcmp (InputFilename, PrevFilename)) { return (SWITCH_TO_SAME_FILE); } else { return (SWITCH_TO_DIFFERENT_FILE); } } Current = Current->Next; } return (FILE_NOT_FOUND); } /******************************************************************************* * * FUNCTION: FlGetFileHandle * * PARAMETERS: OutFileId - denotes file type of output handle * InFileId - denotes file type of the input Filename * Filename * * RETURN: File handle * * DESCRIPTION: Get the file handle for a particular filename/FileId. This * function also allows the caller to specify the file Id of the * desired type. * ******************************************************************************/ FILE * FlGetFileHandle ( UINT32 OutFileId, UINT32 InFileId, char *Filename) { ASL_GLOBAL_FILE_NODE *Current = AslGbl_FilesList; if (!Filename) { return (NULL); } while (Current) { if (!((Current->FileType == ASL_INPUT_TYPE_ASCII_DATA) && (InFileId == ASL_FILE_SOURCE_OUTPUT)) && !strcmp (Current->Files[InFileId].Filename, Filename)) { return (Current->Files[OutFileId].Handle); } Current = Current->Next; } return (NULL); } /******************************************************************************* * * FUNCTION: FlGetFileNode * * PARAMETERS: FileId - File type (ID) of the input Filename * Filename - File to search for * * RETURN: A global file node * * DESCRIPTION: Get the file node for a particular filename/FileId. * ******************************************************************************/ ASL_GLOBAL_FILE_NODE * FlGetFileNode ( UINT32 FileId, char *Filename) { ASL_GLOBAL_FILE_NODE *Current = AslGbl_FilesList; if (!Filename) { return (NULL); } while (Current) { if (!strcmp (Current->Files[FileId].Filename, Filename)) { return (Current); } Current = Current->Next; } return (NULL); } /******************************************************************************* * * FUNCTION: FlGetCurrentFileNode * * PARAMETERS: None * * RETURN: Global file node * * DESCRIPTION: Get the current input file node * ******************************************************************************/ ASL_GLOBAL_FILE_NODE * FlGetCurrentFileNode ( void) { ASL_GLOBAL_FILE_NODE *FileNode = FlGetFileNode (ASL_FILE_INPUT,AslGbl_Files[ASL_FILE_INPUT].Filename); if (!FileNode) { /* * If the current file node does not exist after initializing the file * node structures, something went wrong and this is an unrecoverable * condition. */ FlFileError (ASL_FILE_INPUT, ASL_MSG_COMPILER_INTERNAL); AslAbort (); } return (FileNode); } /******************************************************************************* * * FUNCTION: FlSetLineNumber * * PARAMETERS: Op - Parse node for the LINE asl statement * * RETURN: None. * * DESCRIPTION: Set the current line number * ******************************************************************************/ void FlSetLineNumber ( UINT32 LineNumber) { DbgPrint (ASL_PARSE_OUTPUT, "\n#line: New line number %u (old %u)\n", LineNumber, AslGbl_LogicalLineNumber); AslGbl_CurrentLineNumber = LineNumber; } /******************************************************************************* * * FUNCTION: FlSetFilename * * PARAMETERS: Op - Parse node for the LINE asl statement * * RETURN: None. * * DESCRIPTION: Set the current filename * ******************************************************************************/ void FlSetFilename ( char *Filename) { DbgPrint (ASL_PARSE_OUTPUT, "\n#line: New filename %s (old %s)\n", Filename, AslGbl_Files[ASL_FILE_INPUT].Filename); /* No need to free any existing filename */ AslGbl_Files[ASL_FILE_INPUT].Filename = Filename; } /******************************************************************************* * * FUNCTION: FlAddIncludeDirectory * * PARAMETERS: Dir - Directory pathname string * * RETURN: None * * DESCRIPTION: Add a directory the list of include prefix directories. * ******************************************************************************/ void FlAddIncludeDirectory ( char *Dir) { ASL_INCLUDE_DIR *NewDir; ASL_INCLUDE_DIR *NextDir; ASL_INCLUDE_DIR *PrevDir = NULL; UINT32 NeedsSeparator = 0; size_t DirLength; DirLength = strlen (Dir); if (!DirLength) { return; } /* Make sure that the pathname ends with a path separator */ if ((Dir[DirLength-1] != '/') && (Dir[DirLength-1] != '\\')) { NeedsSeparator = 1; } NewDir = ACPI_CAST_PTR (ASL_INCLUDE_DIR, UtLocalCacheCalloc (sizeof (ASL_INCLUDE_DIR))); NewDir->Dir = UtLocalCacheCalloc (DirLength + 1 + NeedsSeparator); strcpy (NewDir->Dir, Dir); if (NeedsSeparator) { strcat (NewDir->Dir, "/"); } /* * Preserve command line ordering of -I options by adding new elements * at the end of the list */ NextDir = AslGbl_IncludeDirList; while (NextDir) { PrevDir = NextDir; NextDir = NextDir->Next; } if (PrevDir) { PrevDir->Next = NewDir; } else { AslGbl_IncludeDirList = NewDir; } } /******************************************************************************* * * FUNCTION: FlMergePathnames * * PARAMETERS: PrefixDir - Prefix directory pathname. Can be NULL or * a zero length string. * FilePathname - The include filename from the source ASL. * * RETURN: Merged pathname string * * DESCRIPTION: Merge two pathnames that (probably) have common elements, to * arrive at a minimal length string. Merge can occur if the * FilePathname is relative to the PrefixDir. * ******************************************************************************/ char * FlMergePathnames ( char *PrefixDir, char *FilePathname) { char *CommonPath; char *Pathname; char *LastElement; DbgPrint (ASL_PARSE_OUTPUT, "Include: Prefix path - \"%s\"\n" "Include: FilePathname - \"%s\"\n", PrefixDir, FilePathname); /* * If there is no prefix directory or if the file pathname is absolute, * just return the original file pathname */ if (!PrefixDir || (!*PrefixDir) || (*FilePathname == '/') || (FilePathname[1] == ':')) { Pathname = UtLocalCacheCalloc (strlen (FilePathname) + 1); strcpy (Pathname, FilePathname); goto ConvertBackslashes; } /* Need a local copy of the prefix directory path */ CommonPath = UtLocalCacheCalloc (strlen (PrefixDir) + 1); strcpy (CommonPath, PrefixDir); /* * Walk forward through the file path, and simultaneously backward * through the prefix directory path until there are no more * relative references at the start of the file path. */ while (*FilePathname && (!strncmp (FilePathname, "../", 3))) { /* Remove last element of the prefix directory path */ LastElement = strrchr (CommonPath, '/'); if (!LastElement) { goto ConcatenatePaths; } *LastElement = 0; /* Terminate CommonPath string */ FilePathname += 3; /* Point to next path element */ } /* * Remove the last element of the prefix directory path (it is the same as * the first element of the file pathname), and build the final merged * pathname. */ LastElement = strrchr (CommonPath, '/'); if (LastElement) { *LastElement = 0; } /* Build the final merged pathname */ ConcatenatePaths: Pathname = UtLocalCacheCalloc ( strlen (CommonPath) + strlen (FilePathname) + 2); if (LastElement && *CommonPath) { strcpy (Pathname, CommonPath); strcat (Pathname, "/"); } strcat (Pathname, FilePathname); /* Convert all backslashes to normal slashes */ ConvertBackslashes: UtConvertBackslashes (Pathname); DbgPrint (ASL_PARSE_OUTPUT, "Include: Merged Pathname - \"%s\"\n", Pathname); return (Pathname); } /******************************************************************************* * * FUNCTION: FlOpenIncludeWithPrefix * * PARAMETERS: PrefixDir - Prefix directory pathname. Can be a zero * length string. * Filename - The include filename from the source ASL. * * RETURN: Valid file descriptor if successful. Null otherwise. * * DESCRIPTION: Open an include file and push it on the input file stack. * ******************************************************************************/ static FILE * FlOpenIncludeWithPrefix ( char *PrefixDir, ACPI_PARSE_OBJECT *Op, char *Filename) { FILE *IncludeFile; char *Pathname; UINT32 OriginalLineNumber; /* Build the full pathname to the file */ Pathname = FlMergePathnames (PrefixDir, Filename); DbgPrint (ASL_PARSE_OUTPUT, "Include: Opening file - \"%s\"\n\n", Pathname); /* Attempt to open the file, push if successful */ IncludeFile = fopen (Pathname, "r"); if (!IncludeFile) { return (NULL); } /* * Check the entire include file for any # preprocessor directives. * This is because there may be some confusion between the #include * preprocessor directive and the ASL Include statement. A file included * by the ASL include cannot contain preprocessor directives because * the preprocessor has already run by the time the ASL include is * recognized (by the compiler, not the preprocessor.) * * Note: DtGetNextLine strips/ignores comments. * Save current line number since DtGetNextLine modifies it. */ AslGbl_CurrentLineNumber--; OriginalLineNumber = AslGbl_CurrentLineNumber; while (DtGetNextLine (IncludeFile, DT_ALLOW_MULTILINE_QUOTES) != ASL_EOF) { if (AslGbl_CurrentLineBuffer[0] == '#') { AslError (ASL_ERROR, ASL_MSG_INCLUDE_FILE, Op, "use #include instead"); } } AslGbl_CurrentLineNumber = OriginalLineNumber; /* Must seek back to the start of the file */ fseek (IncludeFile, 0, SEEK_SET); /* Push the include file on the open input file stack */ AslPushInputFileStack (IncludeFile, Pathname); return (IncludeFile); } /******************************************************************************* * * FUNCTION: FlOpenIncludeFile * * PARAMETERS: Op - Parse node for the INCLUDE ASL statement * * RETURN: None. * * DESCRIPTION: Open an include file and push it on the input file stack. * ******************************************************************************/ void FlOpenIncludeFile ( ACPI_PARSE_OBJECT *Op) { FILE *IncludeFile; ASL_INCLUDE_DIR *NextDir; /* Op must be valid */ if (!Op) { AslCommonError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_InputByteCount, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, " - Null parse node"); return; } /* * Flush out the "include ()" statement on this line, start * the actual include file on the next line */ AslResetCurrentLineBuffer (); FlPrintFile (ASL_FILE_SOURCE_OUTPUT, "\n"); AslGbl_CurrentLineOffset++; /* Attempt to open the include file */ /* If the file specifies an absolute path, just open it */ if ((Op->Asl.Value.String[0] == '/') || (Op->Asl.Value.String[0] == '\\') || (Op->Asl.Value.String[1] == ':')) { IncludeFile = FlOpenIncludeWithPrefix ("", Op, Op->Asl.Value.String); if (!IncludeFile) { goto ErrorExit; } return; } /* * The include filename is not an absolute path. * * First, search for the file within the "local" directory -- meaning * the same directory that contains the source file. * * Construct the file pathname from the global directory name. */ IncludeFile = FlOpenIncludeWithPrefix ( AslGbl_DirectoryPath, Op, Op->Asl.Value.String); if (IncludeFile) { return; } /* * Second, search for the file within the (possibly multiple) directories * specified by the -I option on the command line. */ NextDir = AslGbl_IncludeDirList; while (NextDir) { IncludeFile = FlOpenIncludeWithPrefix ( NextDir->Dir, Op, Op->Asl.Value.String); if (IncludeFile) { return; } NextDir = NextDir->Next; } /* We could not open the include file after trying very hard */ ErrorExit: sprintf (AslGbl_MsgBuffer, "%s, %s", Op->Asl.Value.String, strerror (errno)); AslError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN, Op, AslGbl_MsgBuffer); } /******************************************************************************* * * FUNCTION: FlOpenInputFile * * PARAMETERS: InputFilename - The user-specified ASL source file to be * compiled * * RETURN: Status * * DESCRIPTION: Open the specified input file, and save the directory path to * the file so that include files can be opened in the same * directory. NOTE: File is opened in text mode. * ******************************************************************************/ ACPI_STATUS FlOpenInputFile ( char *InputFilename) { /* Open the input ASL file, text mode */ FlOpenFile (ASL_FILE_INPUT, InputFilename, "rt"); AslCompilerin = AslGbl_Files[ASL_FILE_INPUT].Handle; return (AE_OK); } /******************************************************************************* * * FUNCTION: FlOpenAmlOutputFile * * PARAMETERS: FilenamePrefix - The user-specified ASL source file * * RETURN: Status * * DESCRIPTION: Create the output filename (*.AML) and open the file. The file * is created in the same directory as the parent input file. * ******************************************************************************/ ACPI_STATUS FlOpenAmlOutputFile ( char *FilenamePrefix) { char *Filename; /* Output filename usually comes from the ASL itself */ Filename = AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename; if (!Filename) { /* Create the output AML filename */ if (!AcpiGbl_CaptureComments) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_AML_CODE); } else { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_CONVERT_AML); } if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_OUTPUT_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename = Filename; } /* Open the output AML file in binary mode */ FlOpenFile (ASL_FILE_AML_OUTPUT, Filename, "w+b"); return (AE_OK); } /******************************************************************************* * * FUNCTION: FlOpenMiscOutputFiles * * PARAMETERS: FilenamePrefix - The user-specified ASL source file * * RETURN: Status * * DESCRIPTION: Create and open the various output files needed, depending on * the command line options * ******************************************************************************/ ACPI_STATUS FlOpenMiscOutputFiles ( char *FilenamePrefix) { char *Filename; /* Create/Open a map file if requested */ if (AslGbl_MapfileFlag) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_MAP); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } /* Open the hex file, text mode (closed at compiler exit) */ FlOpenFile (ASL_FILE_MAP_OUTPUT, Filename, "w+t"); AslCompilerSignon (ASL_FILE_MAP_OUTPUT); AslCompilerFileHeader (ASL_FILE_MAP_OUTPUT); } /* All done for disassembler */ if (AslGbl_FileType == ASL_INPUT_TYPE_BINARY_ACPI_TABLE) { return (AE_OK); } /* Create/Open a hex output file if asked */ if (AslGbl_HexOutputFlag) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_HEX_DUMP); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } /* Open the hex file, text mode */ FlOpenFile (ASL_FILE_HEX_OUTPUT, Filename, "w+t"); AslCompilerSignon (ASL_FILE_HEX_OUTPUT); AslCompilerFileHeader (ASL_FILE_HEX_OUTPUT); } /* Create/Open a debug output file if asked */ if (AslGbl_DebugFlag) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_DEBUG); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_DEBUG_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } /* Open the debug file as STDERR, text mode */ AslGbl_Files[ASL_FILE_DEBUG_OUTPUT].Filename = Filename; AslGbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle = freopen (Filename, "w+t", stderr); if (!AslGbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle) { /* * A problem with freopen is that on error, we no longer * have stderr and cannot emit normal error messages. * Emit error to stdout, close files, and exit. */ fprintf (stdout, "\nCould not open debug output file: %s\n\n", Filename); CmCleanupAndExit (); exit (1); } AslCompilerSignon (ASL_FILE_DEBUG_OUTPUT); AslCompilerFileHeader (ASL_FILE_DEBUG_OUTPUT); } /* Create/Open a cross-reference output file if asked */ if (AslGbl_CrossReferenceOutput) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_XREF); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_DEBUG_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } FlOpenFile (ASL_FILE_XREF_OUTPUT, Filename, "w+t"); AslCompilerSignon (ASL_FILE_XREF_OUTPUT); AslCompilerFileHeader (ASL_FILE_XREF_OUTPUT); } /* Create/Open a listing output file if asked */ if (AslGbl_ListingFlag) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_LISTING); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } /* Open the listing file, text mode */ FlOpenFile (ASL_FILE_LISTING_OUTPUT, Filename, "w+t"); AslCompilerSignon (ASL_FILE_LISTING_OUTPUT); AslCompilerFileHeader (ASL_FILE_LISTING_OUTPUT); } /* Create the preprocessor output temp file if preprocessor enabled */ if (AslGbl_PreprocessFlag) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_PREPROCESSOR); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_PREPROCESSOR_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } FlOpenFile (ASL_FILE_PREPROCESSOR, Filename, "w+t"); } /* * Create the "user" preprocessor output file if -li flag set. * Note, this file contains no embedded #line directives. */ if (AslGbl_PreprocessorOutputFlag) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_PREPROC_USER); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_PREPROCESSOR_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } FlOpenFile (ASL_FILE_PREPROCESSOR_USER, Filename, "w+t"); } /* All done for data table compiler */ if (AslGbl_FileType == ASL_INPUT_TYPE_ASCII_DATA) { return (AE_OK); } /* Create/Open a combined source output file */ Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_SOURCE); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } /* * Open the source output file, binary mode (so that LF does not get * expanded to CR/LF on some systems, messing up our seek * calculations.) */ FlOpenFile (ASL_FILE_SOURCE_OUTPUT, Filename, "w+b"); /* // TBD: TEMP // AslCompilerin = AslGbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle; */ /* Create/Open a assembly code source output file if asked */ if (AslGbl_AsmOutputFlag) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_ASM_SOURCE); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } /* Open the assembly code source file, text mode */ FlOpenFile (ASL_FILE_ASM_SOURCE_OUTPUT, Filename, "w+t"); AslCompilerSignon (ASL_FILE_ASM_SOURCE_OUTPUT); AslCompilerFileHeader (ASL_FILE_ASM_SOURCE_OUTPUT); } /* Create/Open a C code source output file if asked */ if (AslGbl_C_OutputFlag) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_SOURCE); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } /* Open the C code source file, text mode */ FlOpenFile (ASL_FILE_C_SOURCE_OUTPUT, Filename, "w+t"); FlPrintFile (ASL_FILE_C_SOURCE_OUTPUT, "/*\n"); AslCompilerSignon (ASL_FILE_C_SOURCE_OUTPUT); AslCompilerFileHeader (ASL_FILE_C_SOURCE_OUTPUT); } /* Create/Open a C code source output file for the offset table if asked */ if (AslGbl_C_OffsetTableFlag) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_OFFSET); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } /* Open the C code source file, text mode */ FlOpenFile (ASL_FILE_C_OFFSET_OUTPUT, Filename, "w+t"); FlPrintFile (ASL_FILE_C_OFFSET_OUTPUT, "/*\n"); AslCompilerSignon (ASL_FILE_C_OFFSET_OUTPUT); AslCompilerFileHeader (ASL_FILE_C_OFFSET_OUTPUT); } /* Create/Open a assembly include output file if asked */ if (AslGbl_AsmIncludeOutputFlag) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_ASM_INCLUDE); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } /* Open the assembly include file, text mode */ FlOpenFile (ASL_FILE_ASM_INCLUDE_OUTPUT, Filename, "w+t"); AslCompilerSignon (ASL_FILE_ASM_INCLUDE_OUTPUT); AslCompilerFileHeader (ASL_FILE_ASM_INCLUDE_OUTPUT); } /* Create/Open a C include output file if asked */ if (AslGbl_C_IncludeOutputFlag) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_INCLUDE); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } /* Open the C include file, text mode */ FlOpenFile (ASL_FILE_C_INCLUDE_OUTPUT, Filename, "w+t"); FlPrintFile (ASL_FILE_C_INCLUDE_OUTPUT, "/*\n"); AslCompilerSignon (ASL_FILE_C_INCLUDE_OUTPUT); AslCompilerFileHeader (ASL_FILE_C_INCLUDE_OUTPUT); } /* Create a namespace output file if asked */ if (AslGbl_NsOutputFlag) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_NAMESPACE); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } /* Open the namespace file, text mode */ FlOpenFile (ASL_FILE_NAMESPACE_OUTPUT, Filename, "w+t"); AslCompilerSignon (ASL_FILE_NAMESPACE_OUTPUT); AslCompilerFileHeader (ASL_FILE_NAMESPACE_OUTPUT); } /* Create a debug file for the converter */ if (AcpiGbl_DebugAslConversion) { Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_CONVERT_DEBUG); if (!Filename) { AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL); return (AE_ERROR); } /* Open the converter debug file, text mode */ FlOpenFile (ASL_FILE_CONV_DEBUG_OUTPUT, Filename, "w+t"); AslCompilerSignon (ASL_FILE_CONV_DEBUG_OUTPUT); AslCompilerFileHeader (ASL_FILE_CONV_DEBUG_OUTPUT); AcpiGbl_ConvDebugFile = AslGbl_Files[ASL_FILE_CONV_DEBUG_OUTPUT].Handle; } return (AE_OK); } #ifdef ACPI_OBSOLETE_FUNCTIONS /******************************************************************************* * * FUNCTION: FlParseInputPathname * * PARAMETERS: InputFilename - The user-specified ASL source file to be * compiled * * RETURN: Status * * DESCRIPTION: Split the input path into a directory and filename part * 1) Directory part used to open include files * 2) Filename part used to generate output filenames * ******************************************************************************/ ACPI_STATUS FlParseInputPathname ( char *InputFilename) { char *Substring; if (!InputFilename) { return (AE_OK); } /* Get the path to the input filename's directory */ AslGbl_DirectoryPath = strdup (InputFilename); if (!AslGbl_DirectoryPath) { return (AE_NO_MEMORY); } Substring = strrchr (AslGbl_DirectoryPath, '\\'); if (!Substring) { Substring = strrchr (AslGbl_DirectoryPath, '/'); if (!Substring) { Substring = strrchr (AslGbl_DirectoryPath, ':'); } } if (!Substring) { AslGbl_DirectoryPath[0] = 0; if (AslGbl_UseDefaultAmlFilename) { AslGbl_OutputFilenamePrefix = strdup (InputFilename); } } else { if (AslGbl_UseDefaultAmlFilename) { AslGbl_OutputFilenamePrefix = strdup (Substring + 1); } *(Substring+1) = 0; } UtConvertBackslashes (AslGbl_OutputFilenamePrefix); return (AE_OK); } #endif src/acpica/source/compiler/aslfold.c000066400000000000000000000776431465205512700200170ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslfold - Constant folding * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "amlcode.h" #include "acdispat.h" #include "acparser.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslfold") /* Local prototypes */ static ACPI_STATUS OpcAmlEvaluationWalk1 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS OpcAmlEvaluationWalk2 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS OpcAmlCheckForConstant ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static void OpcUpdateIntegerNode ( ACPI_PARSE_OBJECT *Op, UINT64 Value); static ACPI_STATUS TrTransformToStoreOp ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState); static ACPI_STATUS TrSimpleConstantReduction ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState); static void TrInstallReducedConstant ( ACPI_PARSE_OBJECT *Op, ACPI_OPERAND_OBJECT *ObjDesc); /******************************************************************************* * * FUNCTION: OpcAmlConstantWalk * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Reduce an Op and its subtree to a constant if possible. * Called during ascent of the parse tree. * ******************************************************************************/ ACPI_STATUS OpcAmlConstantWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_WALK_STATE *WalkState; ACPI_STATUS Status = AE_OK; if (Op->Asl.CompileFlags == 0) { return (AE_OK); } /* * Only interested in subtrees that could possibly contain * expressions that can be evaluated at this time */ if ((!(Op->Asl.CompileFlags & OP_COMPILE_TIME_CONST)) || (Op->Asl.CompileFlags & OP_IS_TARGET)) { return (AE_OK); } /* Create a new walk state */ WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL); if (!WalkState) { return (AE_NO_MEMORY); } WalkState->NextOp = NULL; WalkState->Params = NULL; /* * Examine the entire subtree -- all nodes must be constants * or type 3/4/5 opcodes */ Status = TrWalkParseTree (Op, ASL_WALK_VISIT_DOWNWARD, OpcAmlCheckForConstant, NULL, WalkState); /* * Did we find an entire subtree that contains all constants * and type 3/4/5 opcodes? */ switch (Status) { case AE_OK: /* Simple case, like Add(3,4) -> 7 */ Status = TrSimpleConstantReduction (Op, WalkState); break; case AE_CTRL_RETURN_VALUE: /* More complex case, like Add(3,4,Local0) -> Store(7,Local0) */ Status = TrTransformToStoreOp (Op, WalkState); break; case AE_TYPE: AcpiDsDeleteWalkState (WalkState); return (AE_OK); default: AcpiDsDeleteWalkState (WalkState); break; } if (ACPI_FAILURE (Status)) { DbgPrint (ASL_PARSE_OUTPUT, "Cannot resolve, %s\n", AcpiFormatException (Status)); /* We could not resolve the subtree for some reason */ AslError (ASL_ERROR, ASL_MSG_CONSTANT_EVALUATION, Op, (char *) AcpiFormatException (Status)); /* Set the subtree value to ZERO anyway. Eliminates further errors */ OpcUpdateIntegerNode (Op, 0); } return (AE_OK); } /******************************************************************************* * * FUNCTION: OpcAmlCheckForConstant * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Check one Op for a reducible type 3/4/5 AML opcode. * This is performed via an upward walk of the parse subtree. * ******************************************************************************/ static ACPI_STATUS OpcAmlCheckForConstant ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_WALK_STATE *WalkState = Context; ACPI_STATUS Status = AE_OK; ACPI_PARSE_OBJECT *NextOp; const ACPI_OPCODE_INFO *OpInfo; WalkState->Op = Op; WalkState->Opcode = Op->Common.AmlOpcode; WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); DbgPrint (ASL_PARSE_OUTPUT, "[%.4d] Opcode: %12.12s ", Op->Asl.LogicalLineNumber, Op->Asl.ParseOpName); /* * These opcodes do not appear in the OpcodeInfo table, but * they represent constants, so abort the constant walk now. */ if ((WalkState->Opcode == AML_RAW_DATA_BYTE) || (WalkState->Opcode == AML_RAW_DATA_WORD) || (WalkState->Opcode == AML_RAW_DATA_DWORD) || (WalkState->Opcode == AML_RAW_DATA_QWORD)) { DbgPrint (ASL_PARSE_OUTPUT, "RAW DATA"); Status = AE_TYPE; goto CleanupAndExit; } /* * Search upwards for a possible Name() operator. This is done * because a type 3/4/5 opcode within a Name() expression * MUST be reduced to a simple constant. */ NextOp = Op->Asl.Parent; while (NextOp) { /* Finished if we find a Name() opcode */ if (NextOp->Asl.AmlOpcode == AML_NAME_OP) { break; } /* * Any "deferred" opcodes contain one or more TermArg parameters, * and thus are not required to be folded to constants at compile * time. This affects things like Buffer() and Package() objects. * We just ignore them here. However, any sub-expressions can and * will still be typechecked. Note: These are called the * "deferred" opcodes in the AML interpreter. */ OpInfo = AcpiPsGetOpcodeInfo (NextOp->Common.AmlOpcode); if (OpInfo->Flags & AML_DEFER) { NextOp = NULL; break; } NextOp = NextOp->Asl.Parent; } /* Type 3/4/5 opcodes have the AML_CONSTANT flag set */ if (!(WalkState->OpInfo->Flags & AML_CONSTANT)) { /* * From the ACPI specification: * * "The Type 3/4/5 opcodes return a value and can be used in an * expression that evaluates to a constant. These opcodes may be * evaluated at ASL compile-time. To ensure that these opcodes * will evaluate to a constant, the following rules apply: The * term cannot have a destination (target) operand, and must have * either a Type3Opcode, Type4Opcode, Type5Opcode, ConstExprTerm, * Integer, BufferTerm, Package, or String for all arguments." */ /* * The value (second) operand for the Name() operator MUST * reduce to a single constant, as per the ACPI specification * (the operand is a DataObject). This also implies that there * can be no target operand. Name() is the only ASL operator * with a "DataObject" as an operand and is thus special- * cased here. */ if (NextOp) /* Inspect a Name() operator */ { /* Error if there is a target operand */ if (Op->Asl.CompileFlags & OP_IS_TARGET) { AslError (ASL_ERROR, ASL_MSG_INVALID_TARGET, Op, NULL); Status = AE_TYPE; } /* Error if expression cannot be reduced (folded) */ if (!(NextOp->Asl.CompileFlags & OP_COULD_NOT_REDUCE)) { /* Ensure only one error message per statement */ NextOp->Asl.CompileFlags |= OP_COULD_NOT_REDUCE; DbgPrint (ASL_PARSE_OUTPUT, "**** Could not reduce operands for NAME opcode ****\n"); AslError (ASL_ERROR, ASL_MSG_CONSTANT_REQUIRED, Op, "Constant is required for Name operator"); Status = AE_TYPE; } } if (ACPI_FAILURE (Status)) { goto CleanupAndExit; } /* This is not a 3/4/5 opcode, but maybe can convert to STORE */ if (Op->Asl.CompileFlags & OP_IS_TARGET) { DbgPrint (ASL_PARSE_OUTPUT, "**** Valid Target, transform to Store or CopyObject ****\n"); return (AE_CTRL_RETURN_VALUE); } /* Expression cannot be reduced */ DbgPrint (ASL_PARSE_OUTPUT, "**** Not a Type 3/4/5 opcode or cannot reduce/fold (%s) ****\n", Op->Asl.ParseOpName); Status = AE_TYPE; goto CleanupAndExit; } /* * TBD: Ignore buffer constants for now. The problem is that these * constants have been transformed into RAW_DATA at this point, from * the parse tree transform process which currently happens before * the constant folding process. We may need to defer this transform * for buffer until after the constant folding. */ if (WalkState->Opcode == AML_BUFFER_OP) { DbgPrint (ASL_PARSE_OUTPUT, "\nBuffer constant reduction is currently not supported\n"); if (NextOp) /* Found a Name() operator, error */ { AslError (ASL_ERROR, ASL_MSG_UNSUPPORTED, Op, "Buffer expression cannot be reduced"); } Status = AE_TYPE; goto CleanupAndExit; } /* Debug output */ DbgPrint (ASL_PARSE_OUTPUT, "TYPE_345"); if (Op->Asl.CompileFlags & OP_IS_TARGET) { if (Op->Asl.ParseOpcode == PARSEOP_ZERO) { DbgPrint (ASL_PARSE_OUTPUT, "%-16s", " NULL TARGET"); } else { DbgPrint (ASL_PARSE_OUTPUT, "%-16s", " VALID TARGET"); } } if (Op->Asl.CompileFlags & OP_IS_TERM_ARG) { DbgPrint (ASL_PARSE_OUTPUT, "%-16s", " TERMARG"); } CleanupAndExit: /* Dump the node compile flags also */ TrPrintOpFlags (Op->Asl.CompileFlags, ASL_PARSE_OUTPUT); DbgPrint (ASL_PARSE_OUTPUT, "\n"); return (Status); } /******************************************************************************* * * FUNCTION: TrSimpleConstantReduction * * PARAMETERS: Op - Parent operator to be transformed * WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Reduce an entire AML operation to a single constant. The * operation must not have a target operand. * * Add (32,64) --> 96 * ******************************************************************************/ static ACPI_STATUS TrSimpleConstantReduction ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState) { ACPI_PARSE_OBJECT *RootOp; ACPI_PARSE_OBJECT *OriginalParentOp; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; DbgPrint (ASL_PARSE_OUTPUT, "Simple subtree constant reduction, operator to constant\n"); /* Allocate a new temporary root for this subtree */ RootOp = TrAllocateOp (PARSEOP_INTEGER); if (!RootOp) { return (AE_NO_MEMORY); } RootOp->Common.AmlOpcode = AML_INT_EVAL_SUBTREE_OP; OriginalParentOp = Op->Common.Parent; Op->Common.Parent = RootOp; /* Hand off the subtree to the AML interpreter */ WalkState->CallerReturnDesc = &ObjDesc; Status = TrWalkParseTree (Op, ASL_WALK_VISIT_TWICE, OpcAmlEvaluationWalk1, OpcAmlEvaluationWalk2, WalkState); /* Restore original parse tree */ Op->Common.Parent = OriginalParentOp; if (ACPI_FAILURE (Status)) { DbgPrint (ASL_PARSE_OUTPUT, "Constant Subtree evaluation(1), %s\n", AcpiFormatException (Status)); return (Status); } /* Get the final result */ Status = AcpiDsResultPop (&ObjDesc, WalkState); if (ACPI_FAILURE (Status)) { DbgPrint (ASL_PARSE_OUTPUT, "Constant Subtree evaluation(2), %s\n", AcpiFormatException (Status)); return (Status); } /* Disconnect any existing children, install new constant */ Op->Asl.Child = NULL; TrInstallReducedConstant (Op, ObjDesc); UtSetParseOpName (Op); return (AE_OK); } /******************************************************************************* * * FUNCTION: TrTransformToStoreOp * * PARAMETERS: Op - Parent operator to be transformed * WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Transforms a single AML operation with a constant and target * to a simple store operation: * * Add (32,64,DATA) --> Store (96,DATA) * ******************************************************************************/ static ACPI_STATUS TrTransformToStoreOp ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState) { ACPI_PARSE_OBJECT *OriginalTarget; ACPI_PARSE_OBJECT *NewTarget; ACPI_PARSE_OBJECT *Child1; ACPI_PARSE_OBJECT *Child2; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_PARSE_OBJECT *NewParent; ACPI_PARSE_OBJECT *OriginalParent; ACPI_STATUS Status; UINT16 NewParseOpcode; UINT16 NewAmlOpcode; /* Extract the operands */ Child1 = Op->Asl.Child; Child2 = Child1->Asl.Next; /* * Special case for DIVIDE -- it has two targets. The first * is for the remainder and if present, we will not attempt * to reduce the expression. */ if (Op->Asl.ParseOpcode == PARSEOP_DIVIDE) { Child2 = Child2->Asl.Next; if (Child2->Asl.ParseOpcode != PARSEOP_ZERO) { DbgPrint (ASL_PARSE_OUTPUT, "Cannot reduce DIVIDE - has two targets\n\n"); return (AE_OK); } } switch (Op->Asl.ParseOpcode) { /* * Folding of the explicit conversion opcodes must use CopyObject * instead of Store. This can change the object type of the target * operand, as per the ACPI specification: * * "If the ASL operator is one of the explicit conversion operators * (ToString, ToInteger, etc., and the CopyObject operator), no * [implicit] conversion is performed. (In other words, the result * object is stored directly to the target and completely overwrites * any existing object already stored at the target)" */ case PARSEOP_TOINTEGER: case PARSEOP_TOSTRING: case PARSEOP_TOBUFFER: case PARSEOP_TODECIMALSTRING: case PARSEOP_TOHEXSTRING: case PARSEOP_TOBCD: case PARSEOP_FROMBCD: NewParseOpcode = PARSEOP_COPYOBJECT; NewAmlOpcode = AML_COPY_OBJECT_OP; DbgPrint (ASL_PARSE_OUTPUT, "Reduction/Transform to CopyObjectOp: CopyObject(%s, %s)\n", Child1->Asl.ParseOpName, Child2->Asl.ParseOpName); break; default: NewParseOpcode = PARSEOP_STORE; NewAmlOpcode = AML_STORE_OP; DbgPrint (ASL_PARSE_OUTPUT, "Reduction/Transform to StoreOp: Store(%s, %s)\n", Child1->Asl.ParseOpName, Child2->Asl.ParseOpName); break; } /* * Create a NULL (zero) target so that we can use the * interpreter to evaluate the expression. */ NewTarget = TrCreateNullTargetOp (); NewTarget->Common.AmlOpcode = AML_INT_NAMEPATH_OP; /* Handle one-operand cases (NOT, TOBCD, etc.) */ if (!Child2->Asl.Next) { Child2 = Child1; } /* Link in new NULL target as the last operand */ OriginalTarget = Child2->Asl.Next; Child2->Asl.Next = NewTarget; NewTarget->Asl.Parent = OriginalTarget->Asl.Parent; NewParent = TrAllocateOp (PARSEOP_INTEGER); NewParent->Common.AmlOpcode = AML_INT_EVAL_SUBTREE_OP; OriginalParent = Op->Common.Parent; Op->Common.Parent = NewParent; /* Hand off the subtree to the AML interpreter */ WalkState->CallerReturnDesc = &ObjDesc; Status = TrWalkParseTree (Op, ASL_WALK_VISIT_TWICE, OpcAmlEvaluationWalk1, OpcAmlEvaluationWalk2, WalkState); if (ACPI_FAILURE (Status)) { DbgPrint (ASL_PARSE_OUTPUT, "Constant Subtree evaluation(3), %s\n", AcpiFormatException (Status)); goto EvalError; } /* Get the final result */ Status = AcpiDsResultPop (&ObjDesc, WalkState); if (ACPI_FAILURE (Status)) { DbgPrint (ASL_PARSE_OUTPUT, "Constant Subtree evaluation(4), %s\n", AcpiFormatException (Status)); goto EvalError; } /* Truncate any subtree expressions, they have been evaluated */ Child1->Asl.Child = NULL; /* Folded constant is in ObjDesc, store into Child1 */ TrInstallReducedConstant (Child1, ObjDesc); /* Convert operator to STORE or COPYOBJECT */ Op->Asl.ParseOpcode = NewParseOpcode; Op->Asl.AmlOpcode = NewAmlOpcode; UtSetParseOpName (Op); Op->Common.Parent = OriginalParent; /* First child is the folded constant */ /* Second child will be the target */ Child1->Asl.Next = OriginalTarget; return (AE_OK); EvalError: /* Restore original links */ Op->Common.Parent = OriginalParent; Child2->Asl.Next = OriginalTarget; return (Status); } /******************************************************************************* * * FUNCTION: TrInstallReducedConstant * * PARAMETERS: Op - Parent operator to be transformed * ObjDesc - Reduced constant to be installed * * RETURN: None * * DESCRIPTION: Transform the original operator to a simple constant. * Handles Integers, Strings, and Buffers. * ******************************************************************************/ static void TrInstallReducedConstant ( ACPI_PARSE_OBJECT *Op, ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_PARSE_OBJECT *LengthOp; ACPI_PARSE_OBJECT *DataOp; AslGbl_TotalFolds++; AslError (ASL_OPTIMIZATION, ASL_MSG_CONSTANT_FOLDED, Op, Op->Asl.ParseOpName); /* * Because we know we executed type 3/4/5 opcodes above, we know that * the result must be either an Integer, String, or Buffer. */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_INTEGER: OpcUpdateIntegerNode (Op, ObjDesc->Integer.Value); DbgPrint (ASL_PARSE_OUTPUT, "Constant expression reduced to (%s) %8.8X%8.8X\n\n", Op->Asl.ParseOpName, ACPI_FORMAT_UINT64 (Op->Common.Value.Integer)); break; case ACPI_TYPE_STRING: Op->Asl.ParseOpcode = PARSEOP_STRING_LITERAL; Op->Common.AmlOpcode = AML_STRING_OP; Op->Asl.AmlLength = strlen (ObjDesc->String.Pointer) + 1; Op->Common.Value.String = ObjDesc->String.Pointer; DbgPrint (ASL_PARSE_OUTPUT, "Constant expression reduced to (STRING) %s\n\n", Op->Common.Value.String); break; case ACPI_TYPE_BUFFER: /* * Create a new parse subtree of the form: * * BUFFER (Buffer AML opcode) * INTEGER (Buffer length in bytes) * RAW_DATA (Buffer byte data) */ Op->Asl.ParseOpcode = PARSEOP_BUFFER; Op->Common.AmlOpcode = AML_BUFFER_OP; Op->Asl.CompileFlags = OP_AML_PACKAGE; UtSetParseOpName (Op); /* Child node is the buffer length */ LengthOp = TrAllocateOp (PARSEOP_INTEGER); LengthOp->Asl.AmlOpcode = AML_DWORD_OP; LengthOp->Asl.Value.Integer = ObjDesc->Buffer.Length; LengthOp->Asl.Parent = Op; (void) OpcSetOptimalIntegerSize (LengthOp); Op->Asl.Child = LengthOp; /* Next child is the raw buffer data */ DataOp = TrAllocateOp (PARSEOP_RAW_DATA); DataOp->Asl.AmlOpcode = AML_RAW_DATA_BUFFER; DataOp->Asl.AmlLength = ObjDesc->Buffer.Length; DataOp->Asl.Value.String = (char *) ObjDesc->Buffer.Pointer; DataOp->Asl.Parent = Op; LengthOp->Asl.Next = DataOp; DbgPrint (ASL_PARSE_OUTPUT, "Constant expression reduced to (BUFFER) length %X\n\n", ObjDesc->Buffer.Length); break; default: break; } } /******************************************************************************* * * FUNCTION: OpcUpdateIntegerNode * * PARAMETERS: Op - Current parse object * Value - Value for the integer op * * RETURN: None * * DESCRIPTION: Update node to the correct Integer type and value * ******************************************************************************/ static void OpcUpdateIntegerNode ( ACPI_PARSE_OBJECT *Op, UINT64 Value) { Op->Common.Value.Integer = Value; /* * The AmlLength is used by the parser to indicate a constant, * (if non-zero). Length is either (1/2/4/8) */ switch (Op->Asl.AmlLength) { case 1: TrSetOpIntegerValue (PARSEOP_BYTECONST, Op); Op->Asl.AmlOpcode = AML_RAW_DATA_BYTE; break; case 2: TrSetOpIntegerValue (PARSEOP_WORDCONST, Op); Op->Asl.AmlOpcode = AML_RAW_DATA_WORD; break; case 4: TrSetOpIntegerValue (PARSEOP_DWORDCONST, Op); Op->Asl.AmlOpcode = AML_RAW_DATA_DWORD; break; case 8: TrSetOpIntegerValue (PARSEOP_QWORDCONST, Op); Op->Asl.AmlOpcode = AML_RAW_DATA_QWORD; break; case 0: default: OpcSetOptimalIntegerSize (Op); TrSetOpIntegerValue (PARSEOP_INTEGER, Op); break; } Op->Asl.AmlLength = 0; } /******************************************************************************* * * FUNCTION: OpcAmlEvaluationWalk1 * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Descending callback for AML execution of constant subtrees * ******************************************************************************/ static ACPI_STATUS OpcAmlEvaluationWalk1 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_WALK_STATE *WalkState = Context; ACPI_STATUS Status; ACPI_PARSE_OBJECT *OutOp; WalkState->Op = Op; WalkState->Opcode = Op->Common.AmlOpcode; WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); /* Copy child pointer to Arg for compatibility with Interpreter */ if (Op->Asl.Child) { Op->Common.Value.Arg = Op->Asl.Child; } /* Call AML dispatcher */ Status = AcpiDsExecBeginOp (WalkState, &OutOp); if (ACPI_FAILURE (Status)) { DbgPrint (ASL_PARSE_OUTPUT, "%s Constant interpretation failed (1) - %s\n", Op->Asl.ParseOpName, AcpiFormatException (Status)); } return (Status); } /******************************************************************************* * * FUNCTION: OpcAmlEvaluationWalk2 * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Ascending callback for AML execution of constant subtrees * ******************************************************************************/ static ACPI_STATUS OpcAmlEvaluationWalk2 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_WALK_STATE *WalkState = Context; ACPI_STATUS Status; WalkState->Op = Op; WalkState->Opcode = Op->Common.AmlOpcode; WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); /* Copy child pointer to Arg for compatibility with Interpreter */ if (Op->Asl.Child) { Op->Common.Value.Arg = Op->Asl.Child; } /* Call AML dispatcher */ Status = AcpiDsExecEndOp (WalkState); if (ACPI_FAILURE (Status)) { DbgPrint (ASL_PARSE_OUTPUT, "%s: Constant interpretation failed (2) - %s\n", Op->Asl.ParseOpName, AcpiFormatException (Status)); } return (Status); } src/acpica/source/compiler/aslglobal.h000066400000000000000000000560101465205512700203210ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslglobal.h - Global variable definitions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ASLGLOBAL_H #define __ASLGLOBAL_H /* * Global variables. Defined in aslmain.c only, externed in all other files */ #undef ASL_EXTERN #ifdef _DECLARE_GLOBALS #define ASL_EXTERN #define ASL_INIT_GLOBAL(a,b) (a)=(b) #else #define ASL_EXTERN extern #define ASL_INIT_GLOBAL(a,b) (a) #endif #ifdef _DECLARE_GLOBALS UINT32 AslGbl_ExceptionCount[ASL_NUM_REPORT_LEVELS] = {0,0,0,0,0,0}; /* Table below must match ASL_FILE_TYPES in asltypes.h */ ASL_FILE_DESC AslGbl_FileDescs [ASL_NUM_FILES] = { {"stdout: ", "Standard Output"}, {"stderr: ", "Standard Error"}, {"Table Input: ", "Source Input"}, {"Binary Output:", "AML Output"}, {"Source Output:", "Source Output"}, {"Preprocessor: ", "Preprocessor Output"}, {"Preprocessor: ", "Preprocessor Temp File"}, {"Listing File: ", "Listing Output"}, {"Hex Dump: ", "Hex Table Output"}, {"Namespace: ", "Namespace Output"}, {"Debug File: ", "Debug Output"}, {"ASM Source: ", "Assembly Code Output"}, {"C Source: ", "C Code Output"}, {"ASM Include: ", "Assembly Header Output"}, {"C Include: ", "C Header Output"}, {"Offset Table: ", "C Offset Table Output"}, {"Device Map: ", "Device Map Output"}, {"Cross Ref: ", "Cross-reference Output"}, {"Converter dbg:", "Converter debug Output"} }; /* Table below must match the defines with the same names in actypes.h */ const char *AslGbl_OpFlagNames[ACPI_NUM_OP_FLAGS] = { "OP_VISITED", "OP_AML_PACKAGE", "OP_IS_TARGET", "OP_IS_RESOURCE_DESC", "OP_IS_RESOURCE_FIELD", "OP_HAS_NO_EXIT", "OP_IF_HAS_NO_EXIT", "OP_NAME_INTERNALIZED", "OP_METHOD_NO_RETVAL", "OP_METHOD_SOME_NO_RETVAL", "OP_RESULT_NOT_USED", "OP_METHOD_TYPED", "OP_COULD_NOT_REDUCE", "OP_COMPILE_TIME_CONST", "OP_IS_TERM_ARG", "OP_WAS_ONES_OP", "OP_IS_NAME_DECLARATION", "OP_COMPILER_EMITTED", "OP_IS_DUPLICATE", "OP_IS_RESOURCE_DATA", "OP_IS_NULL_RETURN", "OP_NOT_FOUND_DURING_LOAD" }; const char *AslGbl_SpecialNamedObjects [MAX_SPECIAL_NAMES] = { NAMESEG__PTS, NAMESEG__WAK, NAMESEG__S0, NAMESEG__S1, NAMESEG__S2, NAMESEG__S3, NAMESEG__S4, NAMESEG__S5, NAMESEG__TTS }; #else extern ASL_FILE_DESC AslGbl_FileDescs [ASL_NUM_FILES]; extern UINT32 AslGbl_ExceptionCount[ASL_NUM_REPORT_LEVELS]; extern const char *AslGbl_OpFlagNames[ACPI_NUM_OP_FLAGS]; extern const char *AslGbl_SpecialNamedObjects[MAX_SPECIAL_NAMES]; #endif /* * Parser and other externals */ extern int yydebug; extern FILE *AslCompilerin; extern int DtParserdebug; extern int PrParserdebug; extern const ASL_MAPPING_ENTRY AslKeywordMapping[]; extern char *AslCompilertext; extern char *DtCompilerParsertext; /* * Older versions of Bison won't emit this external in the generated header. * Newer versions do emit the external, so we don't need to do it. */ #ifndef ASLCOMPILER_ASLCOMPILERPARSE_H extern int AslCompilerdebug; #endif #define ASL_DEFAULT_LINE_BUFFER_SIZE (1024 * 32) /* 32K */ #define ASL_MSG_BUFFER_SIZE (1024 * 128) /* 128k */ #define ASL_STRING_BUFFER_SIZE (1024 * 32) /* 32k */ #define ASL_MAX_DISABLED_MESSAGES 32 #define ASL_MAX_EXPECTED_MESSAGES 32 #define ASL_MAX_ELEVATED_MESSAGES 32 #define HEX_TABLE_LINE_SIZE 8 #define HEX_LISTING_LINE_SIZE 8 /* Source code buffers and pointers for error reporting */ ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_CurrentLineBuffer, NULL); ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_LineBufPtr, NULL); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_LineBufferSize, ASL_DEFAULT_LINE_BUFFER_SIZE); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_CurrentColumn, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_CurrentLineNumber, 1); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_LogicalLineNumber, 1); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_CurrentLineOffset, 0); ASL_EXTERN UINT8 ASL_INIT_GLOBAL (AslGbl_SyntaxError, 0); /* Exception reporting */ ASL_EXTERN ASL_ERROR_MSG ASL_INIT_GLOBAL (*AslGbl_ErrorLog,NULL); ASL_EXTERN ASL_ERROR_MSG ASL_INIT_GLOBAL (*AslGbl_NextError,NULL); /* Option flags */ ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DoCompile, TRUE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DoSignon, TRUE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_PreprocessOnly, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_PreprocessFlag, TRUE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DisassembleAll, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_UseDefaultAmlFilename, TRUE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_MapfileFlag, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_NsOutputFlag, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_PreprocessorOutputFlag, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_KeepPreprocessorTempFile, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DebugFlag, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_CrossReferenceOutput, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_AsmOutputFlag, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_C_OutputFlag, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_C_OffsetTableFlag, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_AsmIncludeOutputFlag, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_C_IncludeOutputFlag, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_ListingFlag, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_IgnoreErrors, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_SourceOutputFlag, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_ParseOnlyFlag, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_ParserErrorDetected, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_CompileTimesFlag, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_FoldConstants, TRUE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_VerboseErrors, TRUE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_NoErrors, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_WarningsAsErrors, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_NoResourceChecking, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_IntegerOptimizationFlag, TRUE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_ReferenceOptimizationFlag, TRUE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DisplayRemarks, TRUE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DisplayWarnings, TRUE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DisplayOptimizations, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_Deterministic, TRUE); ASL_EXTERN UINT8 ASL_INIT_GLOBAL (AslGbl_WarningLevel, ASL_WARNING); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_UseOriginalCompilerId, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_VerboseTemplates, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DoTemplates, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_CompileGeneric, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_AllExceptionsDisabled, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_PruneParseTree, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DoTypechecking, TRUE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_EnableReferenceTypechecking, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DoExternalsInPlace, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DoAslConversion, FALSE); ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_OptimizeTrivialParseNodes, TRUE); #define HEX_OUTPUT_NONE 0 #define HEX_OUTPUT_C 1 #define HEX_OUTPUT_ASM 2 #define HEX_OUTPUT_ASL 3 ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_HexOutputFlag, HEX_OUTPUT_NONE); /* Files */ ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_HasIncludeFiles, FALSE); ASL_EXTERN char *AslGbl_DirectoryPath; ASL_EXTERN char *AslGbl_CurrentInputFilename; ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_IncludeFilename, NULL); ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_OutputFilenamePrefix, NULL); ASL_EXTERN ASL_INCLUDE_DIR ASL_INIT_GLOBAL (*AslGbl_IncludeDirList, NULL); ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_ExternalRefFilename, NULL); ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_PreviousIncludeFilename, NULL); /* Statistics */ ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_InputByteCount, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_InputFieldCount, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_NsLookupCount, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_TotalKeywords, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_TotalNamedObjects, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_TotalExecutableOpcodes, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_TotalParseNodes, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_TotalMethods, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_TotalAllocations, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_TotalAllocated, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_TotalFolds, 0); /* Local caches */ ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_ParseOpCount, 0); ASL_EXTERN ASL_CACHE_INFO ASL_INIT_GLOBAL (*AslGbl_ParseOpCacheList, NULL); ASL_EXTERN ACPI_PARSE_OBJECT ASL_INIT_GLOBAL (*AslGbl_ParseOpCacheNext, NULL); ASL_EXTERN ACPI_PARSE_OBJECT ASL_INIT_GLOBAL (*AslGbl_ParseOpCacheLast, NULL); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_StringCount, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_StringSize, 0); ASL_EXTERN ASL_CACHE_INFO ASL_INIT_GLOBAL (*AslGbl_StringCacheList, NULL); ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_StringCacheNext, NULL); ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_StringCacheLast, NULL); /* Map file */ ASL_EXTERN ACPI_GPIO_INFO ASL_INIT_GLOBAL (*AslGbl_GpioList, NULL); ASL_EXTERN ACPI_SERIAL_INFO ASL_INIT_GLOBAL (*AslGbl_SerialList, NULL); /* Misc */ ASL_EXTERN UINT8 ASL_INIT_GLOBAL (AslGbl_RevisionOverride, 0); ASL_EXTERN UINT8 ASL_INIT_GLOBAL (AslGbl_TempCount, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_TableLength, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_SourceLine, 0); ASL_EXTERN UINT8 ASL_INIT_GLOBAL (AslGbl_FileType, 0); ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_Signature, NULL); ASL_EXTERN ACPI_PARSE_OBJECT ASL_INIT_GLOBAL (*AslGbl_ParseTreeRoot, NULL); ASL_EXTERN ACPI_PARSE_OBJECT ASL_INIT_GLOBAL (*AslGbl_CurrentDB, NULL); ASL_EXTERN ACPI_PARSE_OBJECT ASL_INIT_GLOBAL (*AslGbl_ExternalsListHead, NULL); ASL_EXTERN ASL_LISTING_NODE ASL_INIT_GLOBAL (*AslGbl_ListingNode, NULL); ASL_EXTERN ACPI_PARSE_OBJECT *AslGbl_FirstLevelInsertionNode; ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_CurrentHexColumn, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_CurrentAmlOffset, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_CurrentLine, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_DisabledMessagesIndex, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_ExpectedMessagesIndex, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_ElevatedMessagesIndex, 0); ASL_EXTERN UINT8 ASL_INIT_GLOBAL (AslGbl_HexBytesWereWritten, FALSE); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_NumNamespaceObjects, 0); ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_ReservedMethods, 0); ASL_EXTERN UINT8 ASL_INIT_GLOBAL (AslGbl_PruneDepth, 0); ASL_EXTERN UINT16 ASL_INIT_GLOBAL (AslGbl_PruneType, 0); ASL_EXTERN ASL_FILE_NODE ASL_INIT_GLOBAL (*AslGbl_IncludeFileStack, NULL); ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_TableSignature, "NO_SIG"); ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_TableId, "NO_ID"); ASL_EXTERN ASL_FILE_INFO ASL_INIT_GLOBAL (*AslGbl_Files, NULL); ASL_EXTERN ASL_GLOBAL_FILE_NODE ASL_INIT_GLOBAL (*AslGbl_FilesList, NULL); ASL_EXTERN ASL_EXPECTED_MSG_NODE ASL_INIT_GLOBAL (*AslGbl_ExpectedErrorCodeList, NULL); /* Specific to the -q option */ ASL_EXTERN ASL_COMMENT_STATE AslGbl_CommentState; /* * Determines if an inline comment should be saved in the InlineComment or NodeEndComment * field of ACPI_PARSE_OBJECT. */ ASL_EXTERN ACPI_COMMENT_NODE ASL_INIT_GLOBAL (*AslGbl_CommentListHead, NULL); ASL_EXTERN ACPI_COMMENT_NODE ASL_INIT_GLOBAL (*AslGbl_CommentListTail, NULL); ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_InlineCommentBuffer, NULL); /* Static structures */ ASL_EXTERN ASL_ANALYSIS_WALK_INFO AslGbl_AnalysisWalkInfo; ASL_EXTERN ACPI_TABLE_HEADER AslGbl_TableHeader; /* Event timing */ #define ASL_NUM_EVENTS 24 ASL_EXTERN ASL_EVENT_INFO AslGbl_Events[ASL_NUM_EVENTS]; ASL_EXTERN UINT8 AslGbl_NextEvent; ASL_EXTERN UINT8 AslGbl_NamespaceEvent; /* Scratch buffers */ ASL_EXTERN UINT8 AslGbl_AmlBuffer[HEX_LISTING_LINE_SIZE]; ASL_EXTERN char AslGbl_MsgBuffer[ASL_MSG_BUFFER_SIZE]; ASL_EXTERN char AslGbl_StringBuffer[ASL_STRING_BUFFER_SIZE]; ASL_EXTERN char AslGbl_StringBuffer2[ASL_STRING_BUFFER_SIZE]; ASL_EXTERN UINT32 AslGbl_DisabledMessages[ASL_MAX_DISABLED_MESSAGES]; ASL_EXTERN ASL_EXPECTED_MESSAGE AslGbl_ExpectedMessages[ASL_MAX_EXPECTED_MESSAGES]; ASL_EXTERN UINT32 AslGbl_ElevatedMessages[ASL_MAX_ELEVATED_MESSAGES]; #endif /* __ASLGLOBAL_H */ src/acpica/source/compiler/aslhelp.c000066400000000000000000000424211465205512700200050ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslhelp - iASL help screens * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "acapps.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslhelp") /******************************************************************************* * * FUNCTION: Usage * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display option help message. * Optional items in square brackets. * ******************************************************************************/ void Usage ( void) { printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); printf ("%s\n\n", ASL_COMPLIANCE); ACPI_USAGE_HEADER ("iasl [Options] [Files]"); printf ("\nGeneral:\n"); ACPI_OPTION ("-@ ", "Specify command file"); ACPI_OPTION ("-I ", "Specify additional include directory"); ACPI_OPTION ("-p ", "Specify path/filename prefix for all output files"); ACPI_OPTION ("-v", "Display compiler version"); ACPI_OPTION ("-vd", "Display compiler build date and time"); ACPI_OPTION ("-vo", "Enable optimization comments"); ACPI_OPTION ("-vs", "Disable signon"); ACPI_OPTION ("-ld", "Disable deterministic output"); printf ("\nHelp:\n"); ACPI_OPTION ("-h", "This message"); ACPI_OPTION ("-hc", "Display operators allowed in constant expressions"); ACPI_OPTION ("-hd", "Info for obtaining and disassembling binary ACPI tables"); 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 ("\nPreprocessor:\n"); ACPI_OPTION ("-D ", "Define symbol for preprocessor use"); ACPI_OPTION ("-li", "Create preprocessed output file (*.i)"); ACPI_OPTION ("-P", "Preprocess only and create preprocessor output file (*.i)"); ACPI_OPTION ("-Pn", "Disable preprocessor"); printf ("\nErrors, Warnings, and Remarks:\n"); ACPI_OPTION ("-va", "Disable all errors/warnings/remarks"); ACPI_OPTION ("-ve", "Report only errors (ignore warnings and remarks)"); ACPI_OPTION ("-vi", "Less verbose errors and warnings for use with IDEs"); ACPI_OPTION ("-vr", "Disable remarks"); ACPI_OPTION ("-vw ", "Ignore specific error, warning or remark"); ACPI_OPTION ("-vx ", "Expect a specific warning, remark, or error"); ACPI_OPTION ("-w <1|2|3>", "Set warning reporting level"); ACPI_OPTION ("-we", "Report warnings as errors"); ACPI_OPTION ("-ww ", "Report specific warning or remark as error"); printf ("\nAML Bytecode Generation (*.aml):\n"); ACPI_OPTION ("-oa", "Disable all optimizations (compatibility mode)"); ACPI_OPTION ("-of", "Disable constant folding"); ACPI_OPTION ("-oi", "Disable integer optimization to Zero/One/Ones"); ACPI_OPTION ("-on", "Disable named reference string optimization"); ACPI_OPTION ("-ot", "Disable typechecking"); ACPI_OPTION ("-cr", "Disable Resource Descriptor error checking"); ACPI_OPTION ("-in", "Ignore NoOp operators"); ACPI_OPTION ("-r ", "Override table header Revision (1-255)"); printf ("\nListings:\n"); ACPI_OPTION ("-l", "Create mixed listing file (ASL source and AML) (*.lst)"); ACPI_OPTION ("-lm", "Create hardware summary map file (*.map)"); ACPI_OPTION ("-ln", "Create namespace file (*.nsp)"); ACPI_OPTION ("-ls", "Create combined source file (expanded includes) (*.src)"); ACPI_OPTION ("-lx", "Create cross-reference file (*.xrf)"); printf ("\nFirmware Support - C Text Output:\n"); ACPI_OPTION ("-tc", "Create hex AML table in C (*.hex)"); ACPI_OPTION ("-sc", "Create named hex AML arrays in C (*.c)"); ACPI_OPTION ("-ic", "Create include file in C for -sc symbols (*.h)"); ACPI_OPTION ("-so", "Create namespace AML offset table in C (*.offset.h)"); printf ("\nFirmware Support - Assembler Text Output:\n"); ACPI_OPTION ("-ta", "Create hex AML table in assembler (*.hex)"); ACPI_OPTION ("-sa", "Create named hex AML arrays in assembler (*.asm)"); ACPI_OPTION ("-ia", "Create include file in assembler for -sa symbols (*.inc)"); printf ("\nFirmware Support - ASL Text Output:\n"); ACPI_OPTION ("-ts", "Create hex AML table in ASL (Buffer object) (*.hex)"); printf ("\nLegacy-ASL to ASL+ Converter:\n"); ACPI_OPTION ("-ca ", "Convert legacy-ASL source file to new ASL+ file"); ACPI_OPTION ("", " (Original comments are passed through to ASL+ file)"); printf ("\nData Table Compiler:\n"); ACPI_OPTION ("-tp", "Compile tables with flex/bison prototype"); ACPI_OPTION ("-G", "Compile custom table that contains generic operators"); ACPI_OPTION ("-T |ALL", "Create ACPI table template/example files"); ACPI_OPTION ("-T ", "Emit DSDT and SSDTs to same file"); ACPI_OPTION ("-vt", "Create verbose template files (full disassembly)"); printf ("\nAML Disassembler:\n"); ACPI_OPTION ("-d ", "Disassemble or decode binary ACPI tables to file (*.dsl)"); ACPI_OPTION ("", " (Optional, file type is automatically detected)"); ACPI_OPTION ("-da ", "Disassemble multiple tables from single namespace"); ACPI_OPTION ("-db", "Do not translate Buffers to Resource Templates"); ACPI_OPTION ("-dc ", "Disassemble AML and immediately compile it"); ACPI_OPTION ("", " (Obtain DSDT from current system if no input file)"); ACPI_OPTION ("-df", "Force disassembler to assume table contains valid AML"); ACPI_OPTION ("-dl", "Emit legacy ASL code only (no C-style operators)"); ACPI_OPTION ("-ds ", "Specify a table signature(4) (CDAT table only)"); ACPI_OPTION ("-e ", "Include ACPI table(s) for external symbol resolution"); ACPI_OPTION ("-fe ", "Specify external symbol declaration file"); ACPI_OPTION ("-in", "Ignore NoOp opcodes"); ACPI_OPTION ("-l", "Disassemble to mixed ASL and AML code"); ACPI_OPTION ("-vt", "Dump binary table data in hex format within output file"); printf ("\nDebug Options:\n"); ACPI_OPTION ("-bc", "Create converter debug file (*.cdb)"); ACPI_OPTION ("-bf", "Create debug file (full output) (*.txt)"); ACPI_OPTION ("-bs", "Create debug file (parse tree only) (*.txt)"); ACPI_OPTION ("-bp ", "Prune ASL parse tree"); ACPI_OPTION ("-bt ", "Object type to be pruned from the parse tree"); ACPI_OPTION ("-f", "Ignore errors, force creation of AML output file(s)"); ACPI_OPTION ("-m ", "Set internal line buffer size (in Kbytes)"); ACPI_OPTION ("-n", "Parse only, no output generation"); ACPI_OPTION ("-oc", "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: FilenameHelp * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display help message for output filename generation * ******************************************************************************/ void AslFilenameHelp ( void) { printf ("\nAML output filename generation:\n"); printf (" Output filenames are generated by appending an extension to a common\n"); printf (" filename prefix. The filename prefix is obtained via one of the\n"); printf (" following methods (in priority order):\n"); printf (" 1) The -p option specifies the prefix\n"); printf (" 2) The prefix of the AMLFileName in the ASL Definition Block\n"); printf (" 3) The prefix of the input filename\n"); printf ("\n"); } /******************************************************************************* * * FUNCTION: AslDisassemblyHelp * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display help message for obtaining and disassembling AML/ASL * files. * ******************************************************************************/ void AslDisassemblyHelp ( void) { printf ("\nObtaining binary ACPI tables and disassembling to ASL source code.\n\n"); printf ("Use the following ACPICA toolchain:\n"); printf (" AcpiDump: Dump all ACPI tables to a hex ascii file\n"); printf (" AcpiXtract: Extract one or more binary ACPI tables from AcpiDump output\n"); printf (" iASL -d : Disassemble a binary ACPI table to ASL source code\n"); printf ("\n"); } src/acpica/source/compiler/aslhelpers.y000066400000000000000000000430301465205512700205420ustar00rootroot00000000000000NoEcho(' /****************************************************************************** * * Module Name: aslhelpers.y - helper and option terms * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ ') /******************************************************************************* * * ASL Helper Terms * ******************************************************************************/ OptionalBusMasterKeyword : ',' {$$ = TrCreateLeafOp ( PARSEOP_BUSMASTERTYPE_MASTER);} | ',' PARSEOP_BUSMASTERTYPE_MASTER {$$ = TrCreateLeafOp ( PARSEOP_BUSMASTERTYPE_MASTER);} | ',' PARSEOP_BUSMASTERTYPE_NOTMASTER {$$ = TrCreateLeafOp ( PARSEOP_BUSMASTERTYPE_NOTMASTER);} ; OptionalAccessAttribTerm : {$$ = NULL;} | ',' {$$ = NULL;} | ',' ByteConstExpr {$$ = $2;} | ',' AccessAttribKeyword {$$ = $2;} ; OptionalAccessSize : {$$ = TrCreateValuedLeafOp ( PARSEOP_BYTECONST, 0);} | ',' {$$ = TrCreateValuedLeafOp ( PARSEOP_BYTECONST, 0);} | ',' ByteConstExpr {$$ = $2;} ; OptionalAccessTypeKeyword /* Default: AnyAcc */ : {$$ = TrCreateLeafOp ( PARSEOP_ACCESSTYPE_ANY);} | ',' {$$ = TrCreateLeafOp ( PARSEOP_ACCESSTYPE_ANY);} | ',' AccessTypeKeyword {$$ = $2;} ; OptionalAddressingMode : ',' {$$ = NULL;} | ',' AddressingModeKeyword {$$ = $2;} ; OptionalAddressRange : {$$ = NULL;} | ',' {$$ = NULL;} | ',' AddressKeyword {$$ = $2;} ; OptionalBitsPerByte : ',' {$$ = NULL;} | ',' BitsPerByteKeyword {$$ = $2;} ; OptionalBuffer_Last : {$$ = NULL;} | ',' {$$ = NULL;} | ',' RawDataBufferTerm {$$ = $2;} ; OptionalByteConstExpr : {$$ = NULL;} | ',' {$$ = NULL;} | ',' ByteConstExpr {$$ = $2;} ; OptionalDecodeType : ',' {$$ = NULL;} | ',' DecodeKeyword {$$ = $2;} ; OptionalDevicePolarity : ',' {$$ = NULL;} | ',' DevicePolarityKeyword {$$ = $2;} ; OptionalDWordConstExpr : {$$ = NULL;} | ',' {$$ = NULL;} | ',' DWordConstExpr {$$ = $2;} ; OptionalEndian : ',' {$$ = NULL;} | ',' EndianKeyword {$$ = $2;} ; OptionalFlowControl : ',' {$$ = NULL;} | ',' FlowControlKeyword {$$ = $2;} ; OptionalIoRestriction : ',' {$$ = NULL;} | ',' IoRestrictionKeyword {$$ = $2;} ; OptionalListString : {$$ = TrCreateValuedLeafOp ( PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));} /* Placeholder is a NULL string */ | ',' {$$ = TrCreateValuedLeafOp ( PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));} /* Placeholder is a NULL string */ | ',' TermArg {$$ = $2;} ; OptionalLockRuleKeyword /* Default: NoLock */ : {$$ = TrCreateLeafOp ( PARSEOP_LOCKRULE_NOLOCK);} | ',' {$$ = TrCreateLeafOp ( PARSEOP_LOCKRULE_NOLOCK);} | ',' LockRuleKeyword {$$ = $2;} ; OptionalMaxType : ',' {$$ = NULL;} | ',' MaxKeyword {$$ = $2;} ; OptionalMemType : ',' {$$ = NULL;} | ',' MemTypeKeyword {$$ = $2;} ; OptionalMinType : ',' {$$ = NULL;} | ',' MinKeyword {$$ = $2;} ; OptionalNameString : {$$ = NULL;} | ',' {$$ = NULL;} | ',' NameString {$$ = $2;} ; OptionalNameString_Last : {$$ = NULL;} | ',' {$$ = NULL;} | ',' NameString {$$ = $2;} ; OptionalNameString_First : {$$ = TrCreateLeafOp ( PARSEOP_ZERO);} | NameString {$$ = $1;} ; OptionalObjectTypeKeyword : {$$ = TrCreateLeafOp ( PARSEOP_OBJECTTYPE_UNK);} | ',' ObjectTypeKeyword {$$ = $2;} ; OptionalParityType : ',' {$$ = NULL;} | ',' ParityTypeKeyword {$$ = $2;} ; OptionalQWordConstExpr : {$$ = NULL;} | ',' {$$ = NULL;} | ',' QWordConstExpr {$$ = $2;} ; OptionalRangeType : ',' {$$ = NULL;} | ',' RangeTypeKeyword {$$ = $2;} ; OptionalReadWriteKeyword : {$$ = TrCreateLeafOp ( PARSEOP_READWRITETYPE_BOTH);} | PARSEOP_READWRITETYPE_BOTH {$$ = TrCreateLeafOp ( PARSEOP_READWRITETYPE_BOTH);} | PARSEOP_READWRITETYPE_READONLY {$$ = TrCreateLeafOp ( PARSEOP_READWRITETYPE_READONLY);} ; OptionalResourceType_First : {$$ = TrCreateLeafOp ( PARSEOP_RESOURCETYPE_CONSUMER);} | ResourceTypeKeyword {$$ = $1;} ; OptionalResourceType : {$$ = TrCreateLeafOp ( PARSEOP_RESOURCETYPE_CONSUMER);} | ',' {$$ = TrCreateLeafOp ( PARSEOP_RESOURCETYPE_CONSUMER);} | ',' ResourceTypeKeyword {$$ = $2;} ; /* Same as above except default is producer */ OptionalProducerResourceType : {$$ = TrCreateLeafOp ( PARSEOP_RESOURCETYPE_PRODUCER);} | ',' {$$ = TrCreateLeafOp ( PARSEOP_RESOURCETYPE_PRODUCER);} | ',' ResourceTypeKeyword {$$ = $2;} ; OptionalSlaveMode : ',' {$$ = NULL;} | ',' SlaveModeKeyword {$$ = $2;} ; OptionalSlaveMode_First : {$$ = NULL;} | SlaveModeKeyword {$$ = $1;} ; OptionalShareType : {$$ = NULL;} | ',' {$$ = NULL;} | ',' ShareTypeKeyword {$$ = $2;} ; OptionalShareType_First : {$$ = NULL;} | ShareTypeKeyword {$$ = $1;} ; OptionalStopBits : ',' {$$ = NULL;} | ',' StopBitsKeyword {$$ = $2;} ; OptionalStringData : {$$ = NULL;} | ',' {$$ = NULL;} | ',' StringData {$$ = $2;} ; OptionalSyncLevel /* Default: 0 */ : {$$ = TrCreateValuedLeafOp ( PARSEOP_BYTECONST, 0);} | ',' {$$ = TrCreateValuedLeafOp ( PARSEOP_BYTECONST, 0);} | ',' ByteConstExpr {$$ = $2;} ; OptionalTranslationType_Last : {$$ = NULL;} | ',' {$$ = NULL;} | ',' TranslationKeyword {$$ = $2;} ; OptionalType : {$$ = NULL;} | ',' {$$ = NULL;} | ',' TypeKeyword {$$ = $2;} ; OptionalType_Last : {$$ = NULL;} | ',' {$$ = NULL;} | ',' TypeKeyword {$$ = $2;} ; OptionalUpdateRuleKeyword /* Default: Preserve */ : {$$ = TrCreateLeafOp ( PARSEOP_UPDATERULE_PRESERVE);} | ',' {$$ = TrCreateLeafOp ( PARSEOP_UPDATERULE_PRESERVE);} | ',' UpdateRuleKeyword {$$ = $2;} ; OptionalWireMode : ',' {$$ = NULL;} | ',' WireModeKeyword {$$ = $2;} ; OptionalWordConstExpr : ',' {$$ = NULL;} | ',' WordConstExpr {$$ = $2;} ; OptionalXferSize : {$$ = TrCreateValuedLeafOp ( PARSEOP_XFERSIZE_32, 2);} | ',' {$$ = TrCreateValuedLeafOp ( PARSEOP_XFERSIZE_32, 2);} | ',' XferSizeKeyword {$$ = $2;} ; src/acpica/source/compiler/aslhex.c000066400000000000000000000441031465205512700176400ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslhex - ASCII hex output file generation (C, ASM, and ASL) * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "acapps.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("ashex") /* * This module emits ASCII hex output files in either C, ASM, or ASL format */ /* Local prototypes */ static void HxDoHexOutputC ( void); static void HxDoHexOutputAsl ( void); static void HxDoHexOutputAsm ( void); static UINT32 HxReadAmlOutputFile ( UINT8 *Buffer); /******************************************************************************* * * FUNCTION: HxDoHexOutput * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Create the hex output file. Note: data is obtained by reading * the entire AML output file that was previously generated. * ******************************************************************************/ void HxDoHexOutput ( void) { switch (AslGbl_HexOutputFlag) { case HEX_OUTPUT_C: HxDoHexOutputC (); break; case HEX_OUTPUT_ASM: HxDoHexOutputAsm (); break; case HEX_OUTPUT_ASL: HxDoHexOutputAsl (); break; default: /* No other output types supported */ break; } } /******************************************************************************* * * FUNCTION: HxReadAmlOutputFile * * PARAMETERS: Buffer - Where to return data * * RETURN: None * * DESCRIPTION: Read a line of the AML output prior to formatting the data * ******************************************************************************/ static UINT32 HxReadAmlOutputFile ( UINT8 *Buffer) { UINT32 Actual; Actual = fread (Buffer, 1, HEX_TABLE_LINE_SIZE, AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle); if (ferror (AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle)) { FlFileError (ASL_FILE_AML_OUTPUT, ASL_MSG_READ); AslAbort (); } return (Actual); } /******************************************************************************* * * FUNCTION: HxDoHexOutputC * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Create the hex output file. This is the same data as the AML * output file, but formatted into hex/ascii bytes suitable for * inclusion into a C source file. * * Note: the base name of the hex output file is prepended to * all symbols as they are output to the file. * ******************************************************************************/ static void HxDoHexOutputC ( void) { UINT8 FileData[HEX_TABLE_LINE_SIZE]; UINT32 LineLength; UINT32 Offset = 0; UINT32 AmlFileSize; UINT32 i; char *FileBasename; /* Obtain the file basename (filename with no extension) */ FileBasename = FlGetFileBasename (AslGbl_Files [ASL_FILE_HEX_OUTPUT].Filename); /* Get AML size, seek back to start */ AmlFileSize = FlGetFileSize (ASL_FILE_AML_OUTPUT); FlSeekFile (ASL_FILE_AML_OUTPUT, 0); /* Finish the file header and emit the non-data symbols */ FlPrintFile (ASL_FILE_HEX_OUTPUT, " * C source code output\n"); FlPrintFile (ASL_FILE_HEX_OUTPUT, " * AML code block contains 0x%X bytes\n *\n */\n", AmlFileSize); FlPrintFile (ASL_FILE_HEX_OUTPUT, "#ifndef __%s_HEX__\n", FileBasename); FlPrintFile (ASL_FILE_HEX_OUTPUT, "#define __%s_HEX__\n\n", FileBasename); AcpiUtStrlwr (FileBasename); FlPrintFile (ASL_FILE_HEX_OUTPUT, "unsigned char %s_aml_code[] =\n{\n", FileBasename); while (Offset < AmlFileSize) { /* Read enough bytes needed for one output line */ LineLength = HxReadAmlOutputFile (FileData); if (!LineLength) { break; } FlPrintFile (ASL_FILE_HEX_OUTPUT, " "); for (i = 0; i < LineLength; i++) { /* * Output each hex byte in the form: "0xnn," * Add a comma until the very last byte of the AML file * (Some C compilers complain about a trailing comma) */ FlPrintFile (ASL_FILE_HEX_OUTPUT, "0x%2.2X", FileData[i]); if ((Offset + i + 1) < AmlFileSize) { FlPrintFile (ASL_FILE_HEX_OUTPUT, ","); } else { FlPrintFile (ASL_FILE_HEX_OUTPUT, " "); } } /* Add fill spaces if needed for last line */ if (LineLength < HEX_TABLE_LINE_SIZE) { FlPrintFile (ASL_FILE_HEX_OUTPUT, "%*s", 5 * (HEX_TABLE_LINE_SIZE - LineLength), " "); } /* Emit the offset and ascii dump for the entire line */ FlPrintFile (ASL_FILE_HEX_OUTPUT, " /* %8.8X", Offset); LsDumpAsciiInComment (ASL_FILE_HEX_OUTPUT, LineLength, FileData); FlPrintFile (ASL_FILE_HEX_OUTPUT, "%*s*/\n", HEX_TABLE_LINE_SIZE - LineLength + 1, " "); Offset += LineLength; } FlPrintFile (ASL_FILE_HEX_OUTPUT, "};\n\n"); FlPrintFile (ASL_FILE_HEX_OUTPUT, "#endif\n"); } /******************************************************************************* * * FUNCTION: HxDoHexOutputAsl * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Create the hex output file. This is the same data as the AML * output file, but formatted into hex/ascii bytes suitable for * inclusion into a C source file. * ******************************************************************************/ static void HxDoHexOutputAsl ( void) { UINT8 FileData[HEX_TABLE_LINE_SIZE]; UINT32 LineLength; UINT32 Offset = 0; UINT32 AmlFileSize; UINT32 i; /* Get AML size, seek back to start */ AmlFileSize = FlGetFileSize (ASL_FILE_AML_OUTPUT); FlSeekFile (ASL_FILE_AML_OUTPUT, 0); FlPrintFile (ASL_FILE_HEX_OUTPUT, " * ASL source code output\n"); FlPrintFile (ASL_FILE_HEX_OUTPUT, " * AML code block contains 0x%X bytes\n *\n */\n", AmlFileSize); FlPrintFile (ASL_FILE_HEX_OUTPUT, " Name (BUF1, Buffer()\n {\n"); while (Offset < AmlFileSize) { /* Read enough bytes needed for one output line */ LineLength = HxReadAmlOutputFile (FileData); if (!LineLength) { break; } FlPrintFile (ASL_FILE_HEX_OUTPUT, " "); for (i = 0; i < LineLength; i++) { /* * Print each hex byte. * Add a comma until the very last byte of the AML file * (Some C compilers complain about a trailing comma) */ FlPrintFile (ASL_FILE_HEX_OUTPUT, "0x%2.2X", FileData[i]); if ((Offset + i + 1) < AmlFileSize) { FlPrintFile (ASL_FILE_HEX_OUTPUT, ","); } else { FlPrintFile (ASL_FILE_HEX_OUTPUT, " "); } } /* Add fill spaces if needed for last line */ if (LineLength < HEX_TABLE_LINE_SIZE) { FlPrintFile (ASL_FILE_HEX_OUTPUT, "%*s", 5 * (HEX_TABLE_LINE_SIZE - LineLength), " "); } /* Emit the offset and ascii dump for the entire line */ FlPrintFile (ASL_FILE_HEX_OUTPUT, " /* %8.8X", Offset); LsDumpAsciiInComment (ASL_FILE_HEX_OUTPUT, LineLength, FileData); FlPrintFile (ASL_FILE_HEX_OUTPUT, "%*s*/\n", HEX_TABLE_LINE_SIZE - LineLength + 1, " "); Offset += LineLength; } FlPrintFile (ASL_FILE_HEX_OUTPUT, " })\n"); } /******************************************************************************* * * FUNCTION: HxDoHexOutputAsm * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Create the hex output file. This is the same data as the AML * output file, but formatted into hex/ascii bytes suitable for * inclusion into a ASM source file. * ******************************************************************************/ static void HxDoHexOutputAsm ( void) { UINT8 FileData[HEX_TABLE_LINE_SIZE]; UINT32 LineLength; UINT32 Offset = 0; UINT32 AmlFileSize; UINT32 i; /* Get AML size, seek back to start */ AmlFileSize = FlGetFileSize (ASL_FILE_AML_OUTPUT); FlSeekFile (ASL_FILE_AML_OUTPUT, 0); FlPrintFile (ASL_FILE_HEX_OUTPUT, "; Assembly code source output\n"); FlPrintFile (ASL_FILE_HEX_OUTPUT, "; AML code block contains 0x%X bytes\n;\n", AmlFileSize); while (Offset < AmlFileSize) { /* Read enough bytes needed for one output line */ LineLength = HxReadAmlOutputFile (FileData); if (!LineLength) { break; } FlPrintFile (ASL_FILE_HEX_OUTPUT, " db "); for (i = 0; i < LineLength; i++) { /* * Print each hex byte. * Add a comma until the last byte of the line */ FlPrintFile (ASL_FILE_HEX_OUTPUT, "0%2.2Xh", FileData[i]); if ((i + 1) < LineLength) { FlPrintFile (ASL_FILE_HEX_OUTPUT, ","); } } FlPrintFile (ASL_FILE_HEX_OUTPUT, " "); /* Add fill spaces if needed for last line */ if (LineLength < HEX_TABLE_LINE_SIZE) { FlPrintFile (ASL_FILE_HEX_OUTPUT, "%*s", 5 * (HEX_TABLE_LINE_SIZE - LineLength), " "); } /* Emit the offset and ascii dump for the entire line */ FlPrintFile (ASL_FILE_HEX_OUTPUT, " ; %8.8X", Offset); LsDumpAsciiInComment (ASL_FILE_HEX_OUTPUT, LineLength, FileData); FlPrintFile (ASL_FILE_HEX_OUTPUT, "\n"); Offset += LineLength; } FlPrintFile (ASL_FILE_HEX_OUTPUT, "\n"); } src/acpica/source/compiler/aslkeywords.y000066400000000000000000000643351465205512700207620ustar00rootroot00000000000000NoEcho(' /****************************************************************************** * * Module Name: aslkeywords.y - Rules for resource descriptor keywords * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ ') /******************************************************************************* * * ASL Parameter Keyword Terms * ******************************************************************************/ AccessAttribKeyword : PARSEOP_ACCESSATTRIB_BLOCK {$$ = TrCreateLeafOp (PARSEOP_ACCESSATTRIB_BLOCK);} | PARSEOP_ACCESSATTRIB_BLOCK_CALL {$$ = TrCreateLeafOp (PARSEOP_ACCESSATTRIB_BLOCK_CALL);} | PARSEOP_ACCESSATTRIB_BYTE {$$ = TrCreateLeafOp (PARSEOP_ACCESSATTRIB_BYTE);} | PARSEOP_ACCESSATTRIB_QUICK {$$ = TrCreateLeafOp (PARSEOP_ACCESSATTRIB_QUICK );} | PARSEOP_ACCESSATTRIB_SND_RCV {$$ = TrCreateLeafOp (PARSEOP_ACCESSATTRIB_SND_RCV);} | PARSEOP_ACCESSATTRIB_WORD {$$ = TrCreateLeafOp (PARSEOP_ACCESSATTRIB_WORD);} | PARSEOP_ACCESSATTRIB_WORD_CALL {$$ = TrCreateLeafOp (PARSEOP_ACCESSATTRIB_WORD_CALL);} | PARSEOP_ACCESSATTRIB_BYTES PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_ACCESSATTRIB_BYTES);} ByteConst PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_ACCESSATTRIB_RAW_BYTES PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_ACCESSATTRIB_RAW_BYTES);} ByteConst PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_ACCESSATTRIB_RAW_PROCESS PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_ACCESSATTRIB_RAW_PROCESS);} ByteConst PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} ; AccessTypeKeyword : PARSEOP_ACCESSTYPE_ANY {$$ = TrCreateLeafOp (PARSEOP_ACCESSTYPE_ANY);} | PARSEOP_ACCESSTYPE_BYTE {$$ = TrCreateLeafOp (PARSEOP_ACCESSTYPE_BYTE);} | PARSEOP_ACCESSTYPE_WORD {$$ = TrCreateLeafOp (PARSEOP_ACCESSTYPE_WORD);} | PARSEOP_ACCESSTYPE_DWORD {$$ = TrCreateLeafOp (PARSEOP_ACCESSTYPE_DWORD);} | PARSEOP_ACCESSTYPE_QWORD {$$ = TrCreateLeafOp (PARSEOP_ACCESSTYPE_QWORD);} | PARSEOP_ACCESSTYPE_BUF {$$ = TrCreateLeafOp (PARSEOP_ACCESSTYPE_BUF);} ; AddressingModeKeyword : PARSEOP_ADDRESSINGMODE_7BIT {$$ = TrCreateLeafOp (PARSEOP_ADDRESSINGMODE_7BIT);} | PARSEOP_ADDRESSINGMODE_10BIT {$$ = TrCreateLeafOp (PARSEOP_ADDRESSINGMODE_10BIT);} ; AddressKeyword : PARSEOP_ADDRESSTYPE_MEMORY {$$ = TrCreateLeafOp (PARSEOP_ADDRESSTYPE_MEMORY);} | PARSEOP_ADDRESSTYPE_RESERVED {$$ = TrCreateLeafOp (PARSEOP_ADDRESSTYPE_RESERVED);} | PARSEOP_ADDRESSTYPE_NVS {$$ = TrCreateLeafOp (PARSEOP_ADDRESSTYPE_NVS);} | PARSEOP_ADDRESSTYPE_ACPI {$$ = TrCreateLeafOp (PARSEOP_ADDRESSTYPE_ACPI);} ; AddressSpaceKeyword : ByteConst {$$ = UtCheckIntegerRange ($1, ACPI_NUM_PREDEFINED_REGIONS, 0xFF);} | RegionSpaceKeyword {} ; BitsPerByteKeyword : PARSEOP_BITSPERBYTE_FIVE {$$ = TrCreateLeafOp (PARSEOP_BITSPERBYTE_FIVE);} | PARSEOP_BITSPERBYTE_SIX {$$ = TrCreateLeafOp (PARSEOP_BITSPERBYTE_SIX);} | PARSEOP_BITSPERBYTE_SEVEN {$$ = TrCreateLeafOp (PARSEOP_BITSPERBYTE_SEVEN);} | PARSEOP_BITSPERBYTE_EIGHT {$$ = TrCreateLeafOp (PARSEOP_BITSPERBYTE_EIGHT);} | PARSEOP_BITSPERBYTE_NINE {$$ = TrCreateLeafOp (PARSEOP_BITSPERBYTE_NINE);} ; ClockPhaseKeyword : PARSEOP_CLOCKPHASE_FIRST {$$ = TrCreateLeafOp (PARSEOP_CLOCKPHASE_FIRST);} | PARSEOP_CLOCKPHASE_SECOND {$$ = TrCreateLeafOp (PARSEOP_CLOCKPHASE_SECOND);} ; ClockPolarityKeyword : PARSEOP_CLOCKPOLARITY_LOW {$$ = TrCreateLeafOp (PARSEOP_CLOCKPOLARITY_LOW);} | PARSEOP_CLOCKPOLARITY_HIGH {$$ = TrCreateLeafOp (PARSEOP_CLOCKPOLARITY_HIGH);} ; DecodeKeyword : PARSEOP_DECODETYPE_POS {$$ = TrCreateLeafOp (PARSEOP_DECODETYPE_POS);} | PARSEOP_DECODETYPE_SUB {$$ = TrCreateLeafOp (PARSEOP_DECODETYPE_SUB);} ; DevicePolarityKeyword : PARSEOP_DEVICEPOLARITY_LOW {$$ = TrCreateLeafOp (PARSEOP_DEVICEPOLARITY_LOW);} | PARSEOP_DEVICEPOLARITY_HIGH {$$ = TrCreateLeafOp (PARSEOP_DEVICEPOLARITY_HIGH);} ; DMATypeKeyword : PARSEOP_DMATYPE_A {$$ = TrCreateLeafOp (PARSEOP_DMATYPE_A);} | PARSEOP_DMATYPE_COMPATIBILITY {$$ = TrCreateLeafOp (PARSEOP_DMATYPE_COMPATIBILITY);} | PARSEOP_DMATYPE_B {$$ = TrCreateLeafOp (PARSEOP_DMATYPE_B);} | PARSEOP_DMATYPE_F {$$ = TrCreateLeafOp (PARSEOP_DMATYPE_F);} ; EndianKeyword : PARSEOP_ENDIAN_LITTLE {$$ = TrCreateLeafOp (PARSEOP_ENDIAN_LITTLE);} | PARSEOP_ENDIAN_BIG {$$ = TrCreateLeafOp (PARSEOP_ENDIAN_BIG);} ; FlowControlKeyword : PARSEOP_FLOWCONTROL_HW {$$ = TrCreateLeafOp (PARSEOP_FLOWCONTROL_HW);} | PARSEOP_FLOWCONTROL_NONE {$$ = TrCreateLeafOp (PARSEOP_FLOWCONTROL_NONE);} | PARSEOP_FLOWCONTROL_SW {$$ = TrCreateLeafOp (PARSEOP_FLOWCONTROL_SW);} ; InterruptLevel : PARSEOP_INTLEVEL_ACTIVEBOTH {$$ = TrCreateLeafOp (PARSEOP_INTLEVEL_ACTIVEBOTH);} | PARSEOP_INTLEVEL_ACTIVEHIGH {$$ = TrCreateLeafOp (PARSEOP_INTLEVEL_ACTIVEHIGH);} | PARSEOP_INTLEVEL_ACTIVELOW {$$ = TrCreateLeafOp (PARSEOP_INTLEVEL_ACTIVELOW);} ; InterruptTypeKeyword : PARSEOP_INTTYPE_EDGE {$$ = TrCreateLeafOp (PARSEOP_INTTYPE_EDGE);} | PARSEOP_INTTYPE_LEVEL {$$ = TrCreateLeafOp (PARSEOP_INTTYPE_LEVEL);} ; IODecodeKeyword : PARSEOP_IODECODETYPE_16 {$$ = TrCreateLeafOp (PARSEOP_IODECODETYPE_16);} | PARSEOP_IODECODETYPE_10 {$$ = TrCreateLeafOp (PARSEOP_IODECODETYPE_10);} ; IoRestrictionKeyword : PARSEOP_IORESTRICT_IN {$$ = TrCreateLeafOp (PARSEOP_IORESTRICT_IN);} | PARSEOP_IORESTRICT_OUT {$$ = TrCreateLeafOp (PARSEOP_IORESTRICT_OUT);} | PARSEOP_IORESTRICT_NONE {$$ = TrCreateLeafOp (PARSEOP_IORESTRICT_NONE);} | PARSEOP_IORESTRICT_PRESERVE {$$ = TrCreateLeafOp (PARSEOP_IORESTRICT_PRESERVE);} ; LockRuleKeyword : PARSEOP_LOCKRULE_LOCK {$$ = TrCreateLeafOp (PARSEOP_LOCKRULE_LOCK);} | PARSEOP_LOCKRULE_NOLOCK {$$ = TrCreateLeafOp (PARSEOP_LOCKRULE_NOLOCK);} ; MatchOpKeyword : PARSEOP_MATCHTYPE_MTR {$$ = TrCreateLeafOp (PARSEOP_MATCHTYPE_MTR);} | PARSEOP_MATCHTYPE_MEQ {$$ = TrCreateLeafOp (PARSEOP_MATCHTYPE_MEQ);} | PARSEOP_MATCHTYPE_MLE {$$ = TrCreateLeafOp (PARSEOP_MATCHTYPE_MLE);} | PARSEOP_MATCHTYPE_MLT {$$ = TrCreateLeafOp (PARSEOP_MATCHTYPE_MLT);} | PARSEOP_MATCHTYPE_MGE {$$ = TrCreateLeafOp (PARSEOP_MATCHTYPE_MGE);} | PARSEOP_MATCHTYPE_MGT {$$ = TrCreateLeafOp (PARSEOP_MATCHTYPE_MGT);} ; MaxKeyword : PARSEOP_MAXTYPE_FIXED {$$ = TrCreateLeafOp (PARSEOP_MAXTYPE_FIXED);} | PARSEOP_MAXTYPE_NOTFIXED {$$ = TrCreateLeafOp (PARSEOP_MAXTYPE_NOTFIXED);} ; MemTypeKeyword : PARSEOP_MEMTYPE_CACHEABLE {$$ = TrCreateLeafOp (PARSEOP_MEMTYPE_CACHEABLE);} | PARSEOP_MEMTYPE_WRITECOMBINING {$$ = TrCreateLeafOp (PARSEOP_MEMTYPE_WRITECOMBINING);} | PARSEOP_MEMTYPE_PREFETCHABLE {$$ = TrCreateLeafOp (PARSEOP_MEMTYPE_PREFETCHABLE);} | PARSEOP_MEMTYPE_NONCACHEABLE {$$ = TrCreateLeafOp (PARSEOP_MEMTYPE_NONCACHEABLE);} ; MinKeyword : PARSEOP_MINTYPE_FIXED {$$ = TrCreateLeafOp (PARSEOP_MINTYPE_FIXED);} | PARSEOP_MINTYPE_NOTFIXED {$$ = TrCreateLeafOp (PARSEOP_MINTYPE_NOTFIXED);} ; ObjectTypeKeyword : PARSEOP_OBJECTTYPE_UNK {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_UNK);} | PARSEOP_OBJECTTYPE_INT {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_INT);} | PARSEOP_OBJECTTYPE_STR {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_STR);} | PARSEOP_OBJECTTYPE_BUF {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_BUF);} | PARSEOP_OBJECTTYPE_PKG {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_PKG);} | PARSEOP_OBJECTTYPE_FLD {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_FLD);} | PARSEOP_OBJECTTYPE_DEV {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_DEV);} | PARSEOP_OBJECTTYPE_EVT {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_EVT);} | PARSEOP_OBJECTTYPE_MTH {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_MTH);} | PARSEOP_OBJECTTYPE_MTX {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_MTX);} | PARSEOP_OBJECTTYPE_OPR {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_OPR);} | PARSEOP_OBJECTTYPE_POW {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_POW);} | PARSEOP_OBJECTTYPE_PRO {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_PRO);} | PARSEOP_OBJECTTYPE_THZ {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_THZ);} | PARSEOP_OBJECTTYPE_BFF {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_BFF);} | PARSEOP_OBJECTTYPE_DDB {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE_DDB);} ; ParityTypeKeyword : PARSEOP_PARITYTYPE_SPACE {$$ = TrCreateLeafOp (PARSEOP_PARITYTYPE_SPACE);} | PARSEOP_PARITYTYPE_MARK {$$ = TrCreateLeafOp (PARSEOP_PARITYTYPE_MARK);} | PARSEOP_PARITYTYPE_ODD {$$ = TrCreateLeafOp (PARSEOP_PARITYTYPE_ODD);} | PARSEOP_PARITYTYPE_EVEN {$$ = TrCreateLeafOp (PARSEOP_PARITYTYPE_EVEN);} | PARSEOP_PARITYTYPE_NONE {$$ = TrCreateLeafOp (PARSEOP_PARITYTYPE_NONE);} ; PinConfigByte : PinConfigKeyword {$$ = $1;} | ByteConstExpr {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);} ; PinConfigKeyword : PARSEOP_PIN_NOPULL {$$ = TrCreateLeafOp (PARSEOP_PIN_NOPULL);} | PARSEOP_PIN_PULLDOWN {$$ = TrCreateLeafOp (PARSEOP_PIN_PULLDOWN);} | PARSEOP_PIN_PULLUP {$$ = TrCreateLeafOp (PARSEOP_PIN_PULLUP);} | PARSEOP_PIN_PULLDEFAULT {$$ = TrCreateLeafOp (PARSEOP_PIN_PULLDEFAULT);} ; PldKeyword : PARSEOP_PLD_REVISION {$$ = TrCreateLeafOp (PARSEOP_PLD_REVISION);} | PARSEOP_PLD_IGNORECOLOR {$$ = TrCreateLeafOp (PARSEOP_PLD_IGNORECOLOR);} | PARSEOP_PLD_RED {$$ = TrCreateLeafOp (PARSEOP_PLD_RED);} | PARSEOP_PLD_GREEN {$$ = TrCreateLeafOp (PARSEOP_PLD_GREEN);} | PARSEOP_PLD_BLUE {$$ = TrCreateLeafOp (PARSEOP_PLD_BLUE);} | PARSEOP_PLD_WIDTH {$$ = TrCreateLeafOp (PARSEOP_PLD_WIDTH);} | PARSEOP_PLD_HEIGHT {$$ = TrCreateLeafOp (PARSEOP_PLD_HEIGHT);} | PARSEOP_PLD_USERVISIBLE {$$ = TrCreateLeafOp (PARSEOP_PLD_USERVISIBLE);} | PARSEOP_PLD_DOCK {$$ = TrCreateLeafOp (PARSEOP_PLD_DOCK);} | PARSEOP_PLD_LID {$$ = TrCreateLeafOp (PARSEOP_PLD_LID);} | PARSEOP_PLD_PANEL {$$ = TrCreateLeafOp (PARSEOP_PLD_PANEL);} | PARSEOP_PLD_VERTICALPOSITION {$$ = TrCreateLeafOp (PARSEOP_PLD_VERTICALPOSITION);} | PARSEOP_PLD_HORIZONTALPOSITION {$$ = TrCreateLeafOp (PARSEOP_PLD_HORIZONTALPOSITION);} | PARSEOP_PLD_SHAPE {$$ = TrCreateLeafOp (PARSEOP_PLD_SHAPE);} | PARSEOP_PLD_GROUPORIENTATION {$$ = TrCreateLeafOp (PARSEOP_PLD_GROUPORIENTATION);} | PARSEOP_PLD_GROUPTOKEN {$$ = TrCreateLeafOp (PARSEOP_PLD_GROUPTOKEN);} | PARSEOP_PLD_GROUPPOSITION {$$ = TrCreateLeafOp (PARSEOP_PLD_GROUPPOSITION);} | PARSEOP_PLD_BAY {$$ = TrCreateLeafOp (PARSEOP_PLD_BAY);} | PARSEOP_PLD_EJECTABLE {$$ = TrCreateLeafOp (PARSEOP_PLD_EJECTABLE);} | PARSEOP_PLD_EJECTREQUIRED {$$ = TrCreateLeafOp (PARSEOP_PLD_EJECTREQUIRED);} | PARSEOP_PLD_CABINETNUMBER {$$ = TrCreateLeafOp (PARSEOP_PLD_CABINETNUMBER);} | PARSEOP_PLD_CARDCAGENUMBER {$$ = TrCreateLeafOp (PARSEOP_PLD_CARDCAGENUMBER);} | PARSEOP_PLD_REFERENCE {$$ = TrCreateLeafOp (PARSEOP_PLD_REFERENCE);} | PARSEOP_PLD_ROTATION {$$ = TrCreateLeafOp (PARSEOP_PLD_ROTATION);} | PARSEOP_PLD_ORDER {$$ = TrCreateLeafOp (PARSEOP_PLD_ORDER);} | PARSEOP_PLD_RESERVED {$$ = TrCreateLeafOp (PARSEOP_PLD_RESERVED);} | PARSEOP_PLD_VERTICALOFFSET {$$ = TrCreateLeafOp (PARSEOP_PLD_VERTICALOFFSET);} | PARSEOP_PLD_HORIZONTALOFFSET {$$ = TrCreateLeafOp (PARSEOP_PLD_HORIZONTALOFFSET);} ; RangeTypeKeyword : PARSEOP_RANGETYPE_ISAONLY {$$ = TrCreateLeafOp (PARSEOP_RANGETYPE_ISAONLY);} | PARSEOP_RANGETYPE_NONISAONLY {$$ = TrCreateLeafOp (PARSEOP_RANGETYPE_NONISAONLY);} | PARSEOP_RANGETYPE_ENTIRE {$$ = TrCreateLeafOp (PARSEOP_RANGETYPE_ENTIRE);} ; RegionSpaceKeyword : PARSEOP_REGIONSPACE_IO {$$ = TrCreateLeafOp (PARSEOP_REGIONSPACE_IO);} | PARSEOP_REGIONSPACE_MEM {$$ = TrCreateLeafOp (PARSEOP_REGIONSPACE_MEM);} | PARSEOP_REGIONSPACE_PCI {$$ = TrCreateLeafOp (PARSEOP_REGIONSPACE_PCI);} | PARSEOP_REGIONSPACE_EC {$$ = TrCreateLeafOp (PARSEOP_REGIONSPACE_EC);} | PARSEOP_REGIONSPACE_SMBUS {$$ = TrCreateLeafOp (PARSEOP_REGIONSPACE_SMBUS);} | PARSEOP_REGIONSPACE_CMOS {$$ = TrCreateLeafOp (PARSEOP_REGIONSPACE_CMOS);} | PARSEOP_REGIONSPACE_PCIBAR {$$ = TrCreateLeafOp (PARSEOP_REGIONSPACE_PCIBAR);} | PARSEOP_REGIONSPACE_IPMI {$$ = TrCreateLeafOp (PARSEOP_REGIONSPACE_IPMI);} | PARSEOP_REGIONSPACE_GPIO {$$ = TrCreateLeafOp (PARSEOP_REGIONSPACE_GPIO);} | PARSEOP_REGIONSPACE_GSBUS {$$ = TrCreateLeafOp (PARSEOP_REGIONSPACE_GSBUS);} | PARSEOP_REGIONSPACE_PCC {$$ = TrCreateLeafOp (PARSEOP_REGIONSPACE_PCC);} | PARSEOP_REGIONSPACE_PRM {$$ = TrCreateLeafOp (PARSEOP_REGIONSPACE_PRM);} | PARSEOP_REGIONSPACE_FFIXEDHW {$$ = TrCreateLeafOp (PARSEOP_REGIONSPACE_FFIXEDHW);} ; ResourceTypeKeyword : PARSEOP_RESOURCETYPE_CONSUMER {$$ = TrCreateLeafOp (PARSEOP_RESOURCETYPE_CONSUMER);} | PARSEOP_RESOURCETYPE_PRODUCER {$$ = TrCreateLeafOp (PARSEOP_RESOURCETYPE_PRODUCER);} ; SerializeRuleKeyword : PARSEOP_SERIALIZERULE_SERIAL {$$ = TrCreateLeafOp (PARSEOP_SERIALIZERULE_SERIAL);} | PARSEOP_SERIALIZERULE_NOTSERIAL {$$ = TrCreateLeafOp (PARSEOP_SERIALIZERULE_NOTSERIAL);} ; ShareTypeKeyword : PARSEOP_SHARETYPE_SHARED {$$ = TrCreateLeafOp (PARSEOP_SHARETYPE_SHARED);} | PARSEOP_SHARETYPE_EXCLUSIVE {$$ = TrCreateLeafOp (PARSEOP_SHARETYPE_EXCLUSIVE);} | PARSEOP_SHARETYPE_SHAREDWAKE {$$ = TrCreateLeafOp (PARSEOP_SHARETYPE_SHAREDWAKE);} | PARSEOP_SHARETYPE_EXCLUSIVEWAKE {$$ = TrCreateLeafOp (PARSEOP_SHARETYPE_EXCLUSIVEWAKE);} ; SlaveModeKeyword : PARSEOP_SLAVEMODE_CONTROLLERINIT {$$ = TrCreateLeafOp (PARSEOP_SLAVEMODE_CONTROLLERINIT);} | PARSEOP_SLAVEMODE_DEVICEINIT {$$ = TrCreateLeafOp (PARSEOP_SLAVEMODE_DEVICEINIT);} ; StopBitsKeyword : PARSEOP_STOPBITS_TWO {$$ = TrCreateLeafOp (PARSEOP_STOPBITS_TWO);} | PARSEOP_STOPBITS_ONEPLUSHALF {$$ = TrCreateLeafOp (PARSEOP_STOPBITS_ONEPLUSHALF);} | PARSEOP_STOPBITS_ONE {$$ = TrCreateLeafOp (PARSEOP_STOPBITS_ONE);} | PARSEOP_STOPBITS_ZERO {$$ = TrCreateLeafOp (PARSEOP_STOPBITS_ZERO);} ; TranslationKeyword : PARSEOP_TRANSLATIONTYPE_SPARSE {$$ = TrCreateLeafOp (PARSEOP_TRANSLATIONTYPE_SPARSE);} | PARSEOP_TRANSLATIONTYPE_DENSE {$$ = TrCreateLeafOp (PARSEOP_TRANSLATIONTYPE_DENSE);} ; TypeKeyword : PARSEOP_TYPE_TRANSLATION {$$ = TrCreateLeafOp (PARSEOP_TYPE_TRANSLATION);} | PARSEOP_TYPE_STATIC {$$ = TrCreateLeafOp (PARSEOP_TYPE_STATIC);} ; UpdateRuleKeyword : PARSEOP_UPDATERULE_PRESERVE {$$ = TrCreateLeafOp (PARSEOP_UPDATERULE_PRESERVE);} | PARSEOP_UPDATERULE_ONES {$$ = TrCreateLeafOp (PARSEOP_UPDATERULE_ONES);} | PARSEOP_UPDATERULE_ZEROS {$$ = TrCreateLeafOp (PARSEOP_UPDATERULE_ZEROS);} ; WireModeKeyword : PARSEOP_WIREMODE_FOUR {$$ = TrCreateLeafOp (PARSEOP_WIREMODE_FOUR);} | PARSEOP_WIREMODE_THREE {$$ = TrCreateLeafOp (PARSEOP_WIREMODE_THREE);} ; XferSizeKeyword : PARSEOP_XFERSIZE_8 {$$ = TrCreateValuedLeafOp (PARSEOP_XFERSIZE_8, 0);} | PARSEOP_XFERSIZE_16 {$$ = TrCreateValuedLeafOp (PARSEOP_XFERSIZE_16, 1);} | PARSEOP_XFERSIZE_32 {$$ = TrCreateValuedLeafOp (PARSEOP_XFERSIZE_32, 2);} | PARSEOP_XFERSIZE_64 {$$ = TrCreateValuedLeafOp (PARSEOP_XFERSIZE_64, 3);} | PARSEOP_XFERSIZE_128 {$$ = TrCreateValuedLeafOp (PARSEOP_XFERSIZE_128, 4);} | PARSEOP_XFERSIZE_256 {$$ = TrCreateValuedLeafOp (PARSEOP_XFERSIZE_256, 5);} ; XferTypeKeyword : PARSEOP_XFERTYPE_8 {$$ = TrCreateLeafOp (PARSEOP_XFERTYPE_8);} | PARSEOP_XFERTYPE_8_16 {$$ = TrCreateLeafOp (PARSEOP_XFERTYPE_8_16);} | PARSEOP_XFERTYPE_16 {$$ = TrCreateLeafOp (PARSEOP_XFERTYPE_16);} ; ClockScaleKeyword : PARSEOP_CLOCK_HZ {$$ = TrCreateLeafOp (PARSEOP_CLOCK_HZ);} | PARSEOP_CLOCK_KHZ {$$ = TrCreateLeafOp (PARSEOP_CLOCK_KHZ);} | PARSEOP_CLOCK_MHZ {$$ = TrCreateLeafOp (PARSEOP_CLOCK_MHZ);} ; ClockModeKeyword : PARSEOP_CLOCK_FIXED {$$ = TrCreateLeafOp (PARSEOP_CLOCK_FIXED);} | PARSEOP_CLOCK_VARIABLE {$$ = TrCreateLeafOp (PARSEOP_CLOCK_VARIABLE);} ; src/acpica/source/compiler/asllength.c000066400000000000000000000437251465205512700203460ustar00rootroot00000000000000/****************************************************************************** * * Module Name: asllength - Tree walk to determine package and opcode lengths * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "amlcode.h" #include "acconvert.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("asllength") /* Local prototypes */ static UINT8 CgGetPackageLenByteCount ( ACPI_PARSE_OBJECT *Op, UINT32 PackageLength); static void CgGenerateAmlOpcodeLength ( ACPI_PARSE_OBJECT *Op); #ifdef ACPI_OBSOLETE_FUNCTIONS void LnAdjustLengthToRoot ( ACPI_PARSE_OBJECT *Op, UINT32 LengthDelta); #endif /******************************************************************************* * * FUNCTION: LnInitLengthsWalk * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Walk callback to initialize (and re-initialize) the node * subtree length(s) to zero. The Subtree lengths are bubbled * up to the root node in order to get a total AML length. * ******************************************************************************/ ACPI_STATUS LnInitLengthsWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { Op->Asl.AmlSubtreeLength = 0; return (AE_OK); } /******************************************************************************* * * FUNCTION: LnPackageLengthWalk * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Walk callback to calculate the total AML length. * 1) Calculate the AML lengths (opcode, package length, etc.) for * THIS node. * 2) Bubbble up all of these lengths to the parent node by summing * them all into the parent subtree length. * * Note: The SubtreeLength represents the total AML length of all child nodes * in all subtrees under a given node. Therefore, once this walk is * complete, the Root Node subtree length is the AML length of the entire * tree (and thus, the entire ACPI table) * ******************************************************************************/ ACPI_STATUS LnPackageLengthWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { /* Generate the AML lengths for this node */ CgGenerateAmlLengths (Op); /* Bubble up all lengths (this node and all below it) to the parent */ if ((Op->Asl.Parent) && (Op->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)) { Op->Asl.Parent->Asl.AmlSubtreeLength += ( Op->Asl.AmlLength + Op->Asl.AmlOpcodeLength + Op->Asl.AmlPkgLenBytes + Op->Asl.AmlSubtreeLength + CvCalculateCommentLengths (Op) ); } return (AE_OK); } /******************************************************************************* * * FUNCTION: CgGetPackageLenByteCount * * PARAMETERS: Op - Parse node * PackageLength - Length to be encoded * * RETURN: Required length of the package length encoding * * DESCRIPTION: Calculate the number of bytes required to encode the given * package length. * ******************************************************************************/ static UINT8 CgGetPackageLenByteCount ( ACPI_PARSE_OBJECT *Op, UINT32 PackageLength) { /* * Determine the number of bytes required to encode the package length * Note: the package length includes the number of bytes used to encode * the package length, so we must account for this also. */ if (PackageLength <= (0x0000003F - 1)) { return (1); } else if (PackageLength <= (0x00000FFF - 2)) { return (2); } else if (PackageLength <= (0x000FFFFF - 3)) { return (3); } else if (PackageLength <= (0x0FFFFFFF - 4)) { return (4); } else { /* Fatal error - the package length is too large to encode */ AslError (ASL_ERROR, ASL_MSG_ENCODING_LENGTH, Op, NULL); } return (0); } /******************************************************************************* * * FUNCTION: CgGenerateAmlOpcodeLength * * PARAMETERS: Op - Parse node whose AML opcode lengths will be * calculated * * RETURN: None. * * DESCRIPTION: Calculate the AmlOpcodeLength, AmlPkgLenBytes, and AmlLength * fields for this node. * ******************************************************************************/ static void CgGenerateAmlOpcodeLength ( ACPI_PARSE_OBJECT *Op) { /* Check for two-byte opcode */ if (Op->Asl.AmlOpcode > 0x00FF) { Op->Asl.AmlOpcodeLength = 2; } else { Op->Asl.AmlOpcodeLength = 1; } /* Does this opcode have an associated "PackageLength" field? */ Op->Asl.AmlPkgLenBytes = 0; if (Op->Asl.CompileFlags & OP_AML_PACKAGE) { Op->Asl.AmlPkgLenBytes = CgGetPackageLenByteCount ( Op, Op->Asl.AmlSubtreeLength); } /* Data opcode lengths are easy */ switch (Op->Asl.AmlOpcode) { case AML_BYTE_OP: Op->Asl.AmlLength = 1; break; case AML_WORD_OP: Op->Asl.AmlLength = 2; break; case AML_DWORD_OP: Op->Asl.AmlLength = 4; break; case AML_QWORD_OP: Op->Asl.AmlLength = 8; break; default: /* All data opcodes must be above */ break; } } /******************************************************************************* * * FUNCTION: CgGenerateAmlLengths * * PARAMETERS: Op - Parse node * * RETURN: None. * * DESCRIPTION: Generate internal length fields based on the AML opcode or * parse opcode. * ******************************************************************************/ void CgGenerateAmlLengths ( ACPI_PARSE_OBJECT *Op) { char *Buffer; ACPI_STATUS Status; switch (Op->Asl.AmlOpcode) { case AML_RAW_DATA_BYTE: Op->Asl.AmlOpcodeLength = 0; Op->Asl.AmlLength = 1; return; case AML_RAW_DATA_WORD: Op->Asl.AmlOpcodeLength = 0; Op->Asl.AmlLength = 2; return; case AML_RAW_DATA_DWORD: Op->Asl.AmlOpcodeLength = 0; Op->Asl.AmlLength = 4; return; case AML_RAW_DATA_QWORD: Op->Asl.AmlOpcodeLength = 0; Op->Asl.AmlLength = 8; return; case AML_RAW_DATA_BUFFER: /* Aml length is/was set by creator */ Op->Asl.AmlOpcodeLength = 0; return; case AML_RAW_DATA_CHAIN: /* Aml length is/was set by creator */ Op->Asl.AmlOpcodeLength = 0; return; default: break; } switch (Op->Asl.ParseOpcode) { case PARSEOP_DEFINITION_BLOCK: AslGbl_TableLength = sizeof (ACPI_TABLE_HEADER) + Op->Asl.AmlSubtreeLength; break; case PARSEOP_NAMESEG: Op->Asl.AmlOpcodeLength = 0; Op->Asl.AmlLength = 4; Op->Asl.ExternalName = Op->Asl.Value.String; break; case PARSEOP_NAMESTRING: case PARSEOP_METHODCALL: if (Op->Asl.CompileFlags & OP_NAME_INTERNALIZED) { break; } Op->Asl.AmlOpcodeLength = 0; Status = UtInternalizeName (Op->Asl.Value.String, &Buffer); if (ACPI_FAILURE (Status)) { DbgPrint (ASL_DEBUG_OUTPUT, "Failure from internalize name %X\n", Status); break; } Op->Asl.ExternalName = Op->Asl.Value.String; Op->Asl.Value.String = Buffer; Op->Asl.CompileFlags |= OP_NAME_INTERNALIZED; Op->Asl.AmlLength = strlen (Buffer); /* * Check for single backslash reference to root or reference to a name * consisting of only prefix (^) characters. Make it a null terminated * string in the AML. */ if (Op->Asl.AmlLength == 1 || UtNameContainsAllPrefix(Op)) { Op->Asl.AmlLength++; } break; case PARSEOP_STRING_LITERAL: Op->Asl.AmlOpcodeLength = 1; /* Get null terminator */ Op->Asl.AmlLength = strlen (Op->Asl.Value.String) + 1; break; case PARSEOP_PACKAGE_LENGTH: Op->Asl.AmlOpcodeLength = 0; Op->Asl.AmlPkgLenBytes = CgGetPackageLenByteCount (Op, (UINT32) Op->Asl.Value.Integer); break; case PARSEOP_RAW_DATA: Op->Asl.AmlOpcodeLength = 0; break; case PARSEOP_DEFAULT_ARG: case PARSEOP_INCLUDE: case PARSEOP_INCLUDE_END: /* Ignore the "default arg" nodes, they are extraneous at this point */ break; case PARSEOP_EXTERNAL: CgGenerateAmlOpcodeLength (Op); break; default: CgGenerateAmlOpcodeLength (Op); break; } } #ifdef ACPI_OBSOLETE_FUNCTIONS /******************************************************************************* * * FUNCTION: LnAdjustLengthToRoot * * PARAMETERS: Op - Node whose Length was changed * * RETURN: None. * * DESCRIPTION: Change the Subtree length of the given node, and bubble the * change all the way up to the root node. This allows for * last second changes to a package length (for example, if the * package length encoding gets shorter or longer.) * ******************************************************************************/ void LnAdjustLengthToRoot ( ACPI_PARSE_OBJECT *SubtreeOp, UINT32 LengthDelta) { ACPI_PARSE_OBJECT *Op; /* Adjust all subtree lengths up to the root */ Op = SubtreeOp->Asl.Parent; while (Op) { Op->Asl.AmlSubtreeLength -= LengthDelta; Op = Op->Asl.Parent; } /* Adjust the global table length */ AslGbl_TableLength -= LengthDelta; } #endif src/acpica/source/compiler/asllisting.c000066400000000000000000000625661465205512700205420ustar00rootroot00000000000000/****************************************************************************** * * Module Name: asllisting - Listing file generation * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "amlcode.h" #include "acparser.h" #include "acnamesp.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("asllisting") /* Local prototypes */ static void LsGenerateListing ( UINT32 FileId); static ACPI_STATUS LsAmlListingWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS LsTreeWriteWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static void LsWriteNodeToListing ( ACPI_PARSE_OBJECT *Op, UINT32 FileId); static void LsFinishSourceListing ( UINT32 FileId); /******************************************************************************* * * FUNCTION: LsDoListings * * PARAMETERS: None. Examines the various output file global flags. * * RETURN: None * * DESCRIPTION: Generate all requested listing files. * ******************************************************************************/ void LsDoListings ( void) { if (AslGbl_C_OutputFlag) { LsGenerateListing (ASL_FILE_C_SOURCE_OUTPUT); } if (AslGbl_ListingFlag) { LsGenerateListing (ASL_FILE_LISTING_OUTPUT); } if (AslGbl_AsmOutputFlag) { LsGenerateListing (ASL_FILE_ASM_SOURCE_OUTPUT); } if (AslGbl_C_IncludeOutputFlag) { LsGenerateListing (ASL_FILE_C_INCLUDE_OUTPUT); } if (AslGbl_AsmIncludeOutputFlag) { LsGenerateListing (ASL_FILE_ASM_INCLUDE_OUTPUT); } if (AslGbl_C_OffsetTableFlag) { LsGenerateListing (ASL_FILE_C_OFFSET_OUTPUT); } } /******************************************************************************* * * FUNCTION: LsGenerateListing * * PARAMETERS: FileId - ID of listing file * * RETURN: None * * DESCRIPTION: Generate a listing file. This can be one of the several types * of "listings" supported. * ******************************************************************************/ static void LsGenerateListing ( UINT32 FileId) { UINT32 WalkMode = ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_DB_SEPARATELY; /* Start at the beginning of both the source and AML files */ FlSeekFile (ASL_FILE_SOURCE_OUTPUT, 0); FlSeekFile (ASL_FILE_AML_OUTPUT, 0); AslGbl_SourceLine = 0; AslGbl_CurrentHexColumn = 0; LsPushNode (AslGbl_Files[ASL_FILE_INPUT].Filename); if (FileId == ASL_FILE_C_OFFSET_OUTPUT) { AslGbl_CurrentAmlOffset = 0; /* Offset table file has a special header and footer */ LsDoOffsetTableHeader (FileId); TrWalkParseTree (AslGbl_CurrentDB, WalkMode, LsAmlOffsetWalk, NULL, (void *) ACPI_TO_POINTER (FileId)); LsDoOffsetTableFooter (FileId); return; } /* Process all parse nodes */ TrWalkParseTree (AslGbl_CurrentDB, WalkMode, LsAmlListingWalk, NULL, (void *) ACPI_TO_POINTER (FileId)); /* Final processing */ LsFinishSourceListing (FileId); } /******************************************************************************* * * FUNCTION: LsAmlListingWalk * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Process one node during a listing file generation. * ******************************************************************************/ static ACPI_STATUS LsAmlListingWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { UINT8 FileByte; UINT32 i; UINT32 FileId = (UINT32) ACPI_TO_INTEGER (Context); LsWriteNodeToListing (Op, FileId); if (Op->Asl.CompileFlags & OP_IS_RESOURCE_DATA) { /* Buffer is a resource template, don't dump the data all at once */ return (AE_OK); } if ((FileId == ASL_FILE_ASM_INCLUDE_OUTPUT) || (FileId == ASL_FILE_C_INCLUDE_OUTPUT)) { return (AE_OK); } /* Write the hex bytes to the listing file(s) (if requested) */ for (i = 0; i < Op->Asl.FinalAmlLength; i++) { if (ACPI_FAILURE (FlReadFile (ASL_FILE_AML_OUTPUT, &FileByte, 1))) { FlFileError (ASL_FILE_AML_OUTPUT, ASL_MSG_READ); AslAbort (); } LsWriteListingHexBytes (&FileByte, 1, FileId); } return (AE_OK); } /******************************************************************************* * * FUNCTION: LsDumpParseTree, LsTreeWriteWalk * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Dump entire parse tree, for compiler debug only * ******************************************************************************/ void LsDumpParseTree ( void) { if (!AslGbl_DebugFlag) { return; } DbgPrint (ASL_TREE_OUTPUT, "\nOriginal parse tree from parser:\n\n"); DbgPrint (ASL_TREE_OUTPUT, ASL_PARSE_TREE_HEADER1); TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD, LsTreeWriteWalk, NULL, NULL); DbgPrint (ASL_TREE_OUTPUT, ASL_PARSE_TREE_HEADER1); } static ACPI_STATUS LsTreeWriteWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { /* Dump ParseOp name and possible value */ switch (Op->Asl.ParseOpcode) { case PARSEOP_NAMESEG: case PARSEOP_NAMESTRING: case PARSEOP_METHODCALL: case PARSEOP_STRING_LITERAL: UtDumpStringOp (Op, Level); break; case PARSEOP_BYTECONST: UtDumpIntegerOp (Op, Level, 2); break; case PARSEOP_WORDCONST: case PARSEOP_PACKAGE_LENGTH: UtDumpIntegerOp (Op, Level, 4); break; case PARSEOP_DWORDCONST: case PARSEOP_EISAID: UtDumpIntegerOp (Op, Level, 8); break; case PARSEOP_QWORDCONST: case PARSEOP_INTEGER: case PARSEOP_ONE: case PARSEOP_ZERO: case PARSEOP_ONES: UtDumpIntegerOp (Op, Level, 16); break; case PARSEOP_INCLUDE: DbgPrint (ASL_TREE_OUTPUT, "Open: %s\n", Op->Asl.Value.String); return (AE_OK); case PARSEOP_INCLUDE_END: DbgPrint (ASL_TREE_OUTPUT, "Close: %s\n", Op->Asl.Filename); return (AE_OK); default: UtDumpBasicOp (Op, Level); break; } /* Dump the remaining data */ DbgPrint (ASL_TREE_OUTPUT, ASL_PARSE_TREE_DEBUG1, Op->Asl.ParseOpcode, Op->Asl.CompileFlags, Op->Asl.LineNumber, Op->Asl.EndLine, Op->Asl.LogicalLineNumber, Op->Asl.EndLogicalLine); TrPrintOpFlags (Op->Asl.CompileFlags, ASL_TREE_OUTPUT); DbgPrint (ASL_TREE_OUTPUT, "\n"); return (AE_OK); } /******************************************************************************* * * FUNCTION: LsWriteNodeToListing * * PARAMETERS: Op - Parse node to write to the listing file. * FileId - ID of current listing file * * RETURN: None. * * DESCRIPTION: Write "a node" to the listing file. This means to * 1) Write out all of the source text associated with the node * 2) Write out all of the AML bytes associated with the node * 3) Write any compiler exceptions associated with the node * ******************************************************************************/ static void LsWriteNodeToListing ( ACPI_PARSE_OBJECT *Op, UINT32 FileId) { const ACPI_OPCODE_INFO *OpInfo; UINT32 OpClass; char *Pathname; UINT32 Length; UINT32 i; OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); OpClass = OpInfo->Class; /* TBD: clean this up with a single flag that says: * I start a named output block */ if (FileId == ASL_FILE_C_SOURCE_OUTPUT) { switch (Op->Asl.ParseOpcode) { case PARSEOP_DEFINITION_BLOCK: case PARSEOP_METHODCALL: case PARSEOP_INCLUDE: case PARSEOP_INCLUDE_END: case PARSEOP_DEFAULT_ARG: break; default: switch (OpClass) { case AML_CLASS_NAMED_OBJECT: switch (Op->Asl.AmlOpcode) { case AML_SCOPE_OP: case AML_ALIAS_OP: break; default: if (Op->Asl.ExternalName) { LsFlushListingBuffer (FileId); FlPrintFile (FileId, " };\n"); } break; } break; default: /* Don't care about other objects */ break; } break; } } /* These cases do not have a corresponding AML opcode */ switch (Op->Asl.ParseOpcode) { case PARSEOP_DEFINITION_BLOCK: /* Always start a definition block at AML offset zero */ AslGbl_CurrentAmlOffset = 0; LsWriteSourceLines (Op->Asl.EndLine, Op->Asl.EndLogicalLine, FileId); /* Use the table Signature and TableId to build a unique name */ switch (FileId) { case ASL_FILE_ASM_SOURCE_OUTPUT: FlPrintFile (FileId, "%s_%s_Header \\\n", AslGbl_TableSignature, AslGbl_TableId); break; case ASL_FILE_C_SOURCE_OUTPUT: FlPrintFile (FileId, " unsigned char %s_%s_Header [] =\n {\n", AslGbl_TableSignature, AslGbl_TableId); break; case ASL_FILE_ASM_INCLUDE_OUTPUT: FlPrintFile (FileId, "extrn %s_%s_Header : byte\n", AslGbl_TableSignature, AslGbl_TableId); break; case ASL_FILE_C_INCLUDE_OUTPUT: FlPrintFile (FileId, "extern unsigned char %s_%s_Header [];\n", AslGbl_TableSignature, AslGbl_TableId); break; default: break; } return; case PARSEOP_METHODCALL: LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber, FileId); return; case PARSEOP_INCLUDE: /* Flush everything up to and including the include source line */ LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber, FileId); /* Create a new listing node and push it */ LsPushNode (Op->Asl.Value.String); return; case PARSEOP_INCLUDE_END: /* Flush out the rest of the include file */ LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber, FileId); /* Pop off this listing node and go back to the parent file */ (void) LsPopNode (); return; case PARSEOP_DEFAULT_ARG: if (Op->Asl.CompileFlags & OP_IS_RESOURCE_DESC) { LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.EndLogicalLine, FileId); } return; default: /* All other opcodes have an AML opcode */ break; } /* * Otherwise, we look at the AML opcode because we can * switch on the opcode type, getting an entire class * at once */ switch (OpClass) { case AML_CLASS_ARGUMENT: /* argument type only */ case AML_CLASS_INTERNAL: break; case AML_CLASS_NAMED_OBJECT: switch (Op->Asl.AmlOpcode) { case AML_FIELD_OP: case AML_INDEX_FIELD_OP: case AML_BANK_FIELD_OP: /* * For fields, we want to dump all the AML after the * entire definition */ LsWriteSourceLines (Op->Asl.EndLine, Op->Asl.EndLogicalLine, FileId); break; case AML_NAME_OP: if (Op->Asl.CompileFlags & OP_IS_RESOURCE_DESC) { LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber, FileId); } else { /* * For fields, we want to dump all the AML after the * entire definition */ LsWriteSourceLines (Op->Asl.EndLine, Op->Asl.EndLogicalLine, FileId); } break; default: LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber, FileId); break; } switch (Op->Asl.AmlOpcode) { case AML_SCOPE_OP: case AML_ALIAS_OP: /* These opcodes do not declare a new object, ignore them */ break; default: /* All other named object opcodes come here */ switch (FileId) { case ASL_FILE_ASM_SOURCE_OUTPUT: case ASL_FILE_C_SOURCE_OUTPUT: case ASL_FILE_ASM_INCLUDE_OUTPUT: case ASL_FILE_C_INCLUDE_OUTPUT: /* * For named objects, we will create a valid symbol so that the * AML code can be referenced from C or ASM */ if (Op->Asl.ExternalName) { /* Get the full pathname associated with this node */ Pathname = AcpiNsGetExternalPathname (Op->Asl.Node); Length = strlen (Pathname); if (Length >= 4) { /* Convert all dots in the path to underscores */ for (i = 0; i < Length; i++) { if (Pathname[i] == '.') { Pathname[i] = '_'; } } /* Create the appropriate symbol in the output file */ switch (FileId) { case ASL_FILE_ASM_SOURCE_OUTPUT: FlPrintFile (FileId, "%s_%s_%s \\\n", AslGbl_TableSignature, AslGbl_TableId, &Pathname[1]); break; case ASL_FILE_C_SOURCE_OUTPUT: FlPrintFile (FileId, " unsigned char %s_%s_%s [] =\n {\n", AslGbl_TableSignature, AslGbl_TableId, &Pathname[1]); break; case ASL_FILE_ASM_INCLUDE_OUTPUT: FlPrintFile (FileId, "extrn %s_%s_%s : byte\n", AslGbl_TableSignature, AslGbl_TableId, &Pathname[1]); break; case ASL_FILE_C_INCLUDE_OUTPUT: FlPrintFile (FileId, "extern unsigned char %s_%s_%s [];\n", AslGbl_TableSignature, AslGbl_TableId, &Pathname[1]); break; default: break; } } ACPI_FREE (Pathname); } break; default: /* Nothing to do for listing file */ break; } } break; case AML_CLASS_EXECUTE: case AML_CLASS_CREATE: default: if ((Op->Asl.ParseOpcode == PARSEOP_BUFFER) && (Op->Asl.CompileFlags & OP_IS_RESOURCE_DESC)) { return; } LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber, FileId); break; case AML_CLASS_UNKNOWN: break; } } /******************************************************************************* * * FUNCTION: LsFinishSourceListing * * PARAMETERS: FileId - ID of current listing file. * * RETURN: None * * DESCRIPTION: Cleanup routine for the listing file. Flush the hex AML * listing buffer, and flush out any remaining lines in the * source input file. * ******************************************************************************/ static void LsFinishSourceListing ( UINT32 FileId) { if ((FileId == ASL_FILE_ASM_INCLUDE_OUTPUT) || (FileId == ASL_FILE_C_INCLUDE_OUTPUT)) { return; } LsFlushListingBuffer (FileId); AslGbl_CurrentAmlOffset = 0; /* Flush any remaining text in the source file */ if (FileId == ASL_FILE_C_SOURCE_OUTPUT) { FlPrintFile (FileId, " /*\n"); } while (LsWriteOneSourceLine (FileId)) { ; } if (FileId == ASL_FILE_C_SOURCE_OUTPUT) { FlPrintFile (FileId, "\n */\n };\n"); } FlPrintFile (FileId, "\n"); if (FileId == ASL_FILE_LISTING_OUTPUT) { /* Print a summary of the compile exceptions */ FlPrintFile (FileId, "\n\nSummary of errors and warnings\n\n"); AePrintErrorLog (FileId); FlPrintFile (FileId, "\n"); UtDisplayOneSummary (FileId, TRUE); FlPrintFile (FileId, "\n"); } } src/acpica/source/compiler/asllistsup.c000066400000000000000000000623671465205512700205730ustar00rootroot00000000000000/****************************************************************************** * * Module Name: asllistsup - Listing file support utilities * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslistsup") /******************************************************************************* * * FUNCTION: LsDumpAscii * * PARAMETERS: FileId - ID of current listing file * Count - Number of bytes to convert * Buffer - Buffer of bytes to convert * * RETURN: None * * DESCRIPTION: Convert hex bytes to ascii * ******************************************************************************/ void LsDumpAscii ( UINT32 FileId, UINT32 Count, UINT8 *Buffer) { UINT8 BufChar; UINT32 i; FlPrintFile (FileId, " \""); for (i = 0; i < Count; i++) { BufChar = Buffer[i]; if (isprint (BufChar)) { FlPrintFile (FileId, "%c", BufChar); } else { /* Not a printable character, just put out a dot */ FlPrintFile (FileId, "."); } } FlPrintFile (FileId, "\""); } /******************************************************************************* * * FUNCTION: LsDumpAsciiInComment * * PARAMETERS: FileId - ID of current listing file * Count - Number of bytes to convert * Buffer - Buffer of bytes to convert * * RETURN: None * * DESCRIPTION: Convert hex bytes to ascii * ******************************************************************************/ void LsDumpAsciiInComment ( UINT32 FileId, UINT32 Count, UINT8 *Buffer) { UINT8 BufChar = 0; UINT8 LastChar; UINT32 i; FlPrintFile (FileId, " \""); for (i = 0; i < Count; i++) { LastChar = BufChar; BufChar = Buffer[i]; if (isprint (BufChar)) { /* Handle embedded C comment sequences */ if (((LastChar == '*') && (BufChar == '/')) || ((LastChar == '/') && (BufChar == '*'))) { /* Insert a space to break the sequence */ FlPrintFile (FileId, " "); } FlPrintFile (FileId, "%c", BufChar); } else { /* Not a printable character, just put out a dot */ FlPrintFile (FileId, "."); } } FlPrintFile (FileId, "\""); } /******************************************************************************* * * FUNCTION: LsCheckException * * PARAMETERS: LineNumber - Current logical (cumulative) line # * FileId - ID of output listing file * * RETURN: None * * DESCRIPTION: Check if there is an exception for this line, and if there is, * put it in the listing immediately. Handles multiple errors * per line. AslGbl_NextError points to the next error in the * sorted (by line #) list of compile errors/warnings. * ******************************************************************************/ void LsCheckException ( UINT32 LineNumber, UINT32 FileId) { if ((!AslGbl_NextError) || (LineNumber < AslGbl_NextError->LogicalLineNumber )) { return; } /* Handle multiple errors per line */ if (FileId == ASL_FILE_LISTING_OUTPUT) { while (AslGbl_NextError && (LineNumber >= AslGbl_NextError->LogicalLineNumber)) { AePrintException (FileId, AslGbl_NextError, "\n[****iasl****]\n"); AslGbl_NextError = AslGbl_NextError->Next; } FlPrintFile (FileId, "\n"); } } /******************************************************************************* * * FUNCTION: LsWriteListingHexBytes * * PARAMETERS: Buffer - AML code buffer * Length - Number of AML bytes to write * FileId - ID of current listing file. * * RETURN: None * * DESCRIPTION: Write the contents of the AML buffer to the listing file via * the listing buffer. The listing buffer is flushed every 16 * AML bytes. * ******************************************************************************/ void LsWriteListingHexBytes ( UINT8 *Buffer, UINT32 Length, UINT32 FileId) { UINT32 i; /* Transfer all requested bytes */ for (i = 0; i < Length; i++) { /* Print line header when buffer is empty */ if (AslGbl_CurrentHexColumn == 0) { if (AslGbl_HasIncludeFiles) { FlPrintFile (FileId, "%*s", 10, " "); } switch (FileId) { case ASL_FILE_LISTING_OUTPUT: FlPrintFile (FileId, "%8.8X%s", AslGbl_CurrentAmlOffset, ASL_LISTING_LINE_PREFIX); break; case ASL_FILE_ASM_SOURCE_OUTPUT: FlPrintFile (FileId, " db "); break; case ASL_FILE_C_SOURCE_OUTPUT: FlPrintFile (FileId, " "); break; default: /* No other types supported */ return; } } /* Transfer AML byte and update counts */ AslGbl_AmlBuffer[AslGbl_CurrentHexColumn] = Buffer[i]; AslGbl_CurrentHexColumn++; AslGbl_CurrentAmlOffset++; /* Flush buffer when it is full */ if (AslGbl_CurrentHexColumn >= HEX_LISTING_LINE_SIZE) { LsFlushListingBuffer (FileId); } } } /******************************************************************************* * * FUNCTION: LsWriteSourceLines * * PARAMETERS: ToLineNumber - * ToLogicalLineNumber - Write up to this source line number * FileId - ID of current listing file * * RETURN: None * * DESCRIPTION: Read then write source lines to the listing file until we have * reached the specified logical (cumulative) line number. This * automatically echos out comment blocks and other non-AML * generating text until we get to the actual AML-generating line * of ASL code specified by the logical line number. * ******************************************************************************/ void LsWriteSourceLines ( UINT32 ToLineNumber, UINT32 ToLogicalLineNumber, UINT32 FileId) { /* Nothing to do for these file types */ if ((FileId == ASL_FILE_ASM_INCLUDE_OUTPUT) || (FileId == ASL_FILE_C_INCLUDE_OUTPUT)) { return; } AslGbl_CurrentLine = ToLogicalLineNumber; /* Flush any hex bytes remaining from the last opcode */ LsFlushListingBuffer (FileId); /* Read lines and write them as long as we are not caught up */ if (AslGbl_SourceLine < AslGbl_CurrentLine) { /* * If we just completed writing some AML hex bytes, output a linefeed * to add some whitespace for readability. */ if (AslGbl_HexBytesWereWritten) { FlPrintFile (FileId, "\n"); AslGbl_HexBytesWereWritten = FALSE; } if (FileId == ASL_FILE_C_SOURCE_OUTPUT) { FlPrintFile (FileId, " /*\n"); } /* Write one line at a time until we have reached the target line # */ while ((AslGbl_SourceLine < AslGbl_CurrentLine) && LsWriteOneSourceLine (FileId)) { ; } if (FileId == ASL_FILE_C_SOURCE_OUTPUT) { FlPrintFile (FileId, " */"); } FlPrintFile (FileId, "\n"); } } /******************************************************************************* * * FUNCTION: LsWriteOneSourceLine * * PARAMETERS: FileId - ID of current listing file * * RETURN: FALSE on EOF (input source file), TRUE otherwise * * DESCRIPTION: Read one line from the input source file and echo it to the * listing file, prefixed with the line number, and if the source * file contains include files, prefixed with the current filename * ******************************************************************************/ UINT32 LsWriteOneSourceLine ( UINT32 FileId) { UINT8 FileByte; UINT32 Column = 0; UINT32 Index = 16; BOOLEAN StartOfLine = FALSE; BOOLEAN ProcessLongLine = FALSE; AslGbl_SourceLine++; AslGbl_ListingNode->LineNumber++; /* Ignore lines that are completely blank (but count the line above) */ if (FlReadFile (ASL_FILE_SOURCE_OUTPUT, &FileByte, 1) != AE_OK) { return (0); } if (FileByte == '\n') { return (1); } /* * This is a non-empty line, we will print the entire line with * the line number and possibly other prefixes and transforms. */ /* Line prefixes for special files, C and ASM output */ if (FileId == ASL_FILE_C_SOURCE_OUTPUT) { FlPrintFile (FileId, " *"); } if (FileId == ASL_FILE_ASM_SOURCE_OUTPUT) { FlPrintFile (FileId, "; "); } if (AslGbl_HasIncludeFiles) { /* * This file contains "include" statements, print the current * filename and line number within the current file */ FlPrintFile (FileId, "%12s %5d%s", AslGbl_ListingNode->Filename, AslGbl_ListingNode->LineNumber, ASL_LISTING_LINE_PREFIX); } else { /* No include files, just print the line number */ FlPrintFile (FileId, "%8u%s", AslGbl_SourceLine, ASL_LISTING_LINE_PREFIX); } /* Read the rest of this line (up to a newline or EOF) */ do { if (FileId == ASL_FILE_C_SOURCE_OUTPUT) { if (FileByte == '/') { FileByte = '*'; } } /* Split long input lines for readability in the listing */ Column++; if (Column >= 128) { if (!ProcessLongLine) { if ((FileByte != '}') && (FileByte != '{')) { goto WriteByte; } ProcessLongLine = TRUE; } if (FileByte == '{') { FlPrintFile (FileId, "\n%*s{\n", Index, " "); StartOfLine = TRUE; Index += 4; continue; } else if (FileByte == '}') { if (!StartOfLine) { FlPrintFile (FileId, "\n"); } StartOfLine = TRUE; Index -= 4; FlPrintFile (FileId, "%*s}\n", Index, " "); continue; } /* Ignore spaces/tabs at the start of line */ else if ((FileByte == ' ') && StartOfLine) { continue; } else if (StartOfLine) { StartOfLine = FALSE; FlPrintFile (FileId, "%*s", Index, " "); } WriteByte: FlWriteFile (FileId, &FileByte, 1); if (FileByte == '\n') { /* * This line has been completed. * Check if an error occurred on this source line during the compile. * If so, we print the error message after the source line. */ LsCheckException (AslGbl_SourceLine, FileId); return (1); } } else { FlWriteFile (FileId, &FileByte, 1); if (FileByte == '\n') { /* * This line has been completed. * Check if an error occurred on this source line during the compile. * If so, we print the error message after the source line. */ LsCheckException (AslGbl_SourceLine, FileId); return (1); } } } while (FlReadFile (ASL_FILE_SOURCE_OUTPUT, &FileByte, 1) == AE_OK); /* EOF on the input file was reached */ return (0); } /******************************************************************************* * * FUNCTION: LsFlushListingBuffer * * PARAMETERS: FileId - ID of the listing file * * RETURN: None * * DESCRIPTION: Flush out the current contents of the 16-byte hex AML code * buffer. Usually called at the termination of a single line * of source code or when the buffer is full. * ******************************************************************************/ void LsFlushListingBuffer ( UINT32 FileId) { UINT32 i; if (AslGbl_CurrentHexColumn == 0) { return; } /* Write the hex bytes */ switch (FileId) { case ASL_FILE_LISTING_OUTPUT: for (i = 0; i < AslGbl_CurrentHexColumn; i++) { FlPrintFile (FileId, "%2.2X ", AslGbl_AmlBuffer[i]); } for (i = 0; i < ((HEX_LISTING_LINE_SIZE - AslGbl_CurrentHexColumn) * 3); i++) { FlWriteFile (FileId, ".", 1); } /* Write the ASCII character associated with each of the bytes */ LsDumpAscii (FileId, AslGbl_CurrentHexColumn, AslGbl_AmlBuffer); break; case ASL_FILE_ASM_SOURCE_OUTPUT: for (i = 0; i < AslGbl_CurrentHexColumn; i++) { if (i > 0) { FlPrintFile (FileId, ","); } FlPrintFile (FileId, "0%2.2Xh", AslGbl_AmlBuffer[i]); } for (i = 0; i < ((HEX_LISTING_LINE_SIZE - AslGbl_CurrentHexColumn) * 5); i++) { FlWriteFile (FileId, " ", 1); } FlPrintFile (FileId, " ;%8.8X", AslGbl_CurrentAmlOffset - HEX_LISTING_LINE_SIZE); /* Write the ASCII character associated with each of the bytes */ LsDumpAscii (FileId, AslGbl_CurrentHexColumn, AslGbl_AmlBuffer); break; case ASL_FILE_C_SOURCE_OUTPUT: for (i = 0; i < AslGbl_CurrentHexColumn; i++) { FlPrintFile (FileId, "0x%2.2X,", AslGbl_AmlBuffer[i]); } /* Pad hex output with spaces if line is shorter than max line size */ for (i = 0; i < ((HEX_LISTING_LINE_SIZE - AslGbl_CurrentHexColumn) * 5); i++) { FlWriteFile (FileId, " ", 1); } /* AML offset for the start of the line */ FlPrintFile (FileId, " /* %8.8X", AslGbl_CurrentAmlOffset - AslGbl_CurrentHexColumn); /* Write the ASCII character associated with each of the bytes */ LsDumpAsciiInComment (FileId, AslGbl_CurrentHexColumn, AslGbl_AmlBuffer); FlPrintFile (FileId, " */"); break; default: /* No other types supported */ return; } FlPrintFile (FileId, "\n"); AslGbl_CurrentHexColumn = 0; AslGbl_HexBytesWereWritten = TRUE; } /******************************************************************************* * * FUNCTION: LsPushNode * * PARAMETERS: Filename - Pointer to the include filename * * RETURN: None * * DESCRIPTION: Push a listing node on the listing/include file stack. This * stack enables tracking of include files (infinitely nested) * and resumption of the listing of the parent file when the * include file is finished. * ******************************************************************************/ void LsPushNode ( char *Filename) { ASL_LISTING_NODE *Lnode; /* Create a new node */ Lnode = UtLocalCalloc (sizeof (ASL_LISTING_NODE)); /* Initialize */ Lnode->Filename = Filename; Lnode->LineNumber = 0; /* Link (push) */ Lnode->Next = AslGbl_ListingNode; AslGbl_ListingNode = Lnode; } /******************************************************************************* * * FUNCTION: LsPopNode * * PARAMETERS: None * * RETURN: List head after current head is popped off * * DESCRIPTION: Pop the current head of the list, free it, and return the * next node on the stack (the new current node). * ******************************************************************************/ ASL_LISTING_NODE * LsPopNode ( void) { ASL_LISTING_NODE *Lnode; /* Just grab the node at the head of the list */ Lnode = AslGbl_ListingNode; if ((!Lnode) || (!Lnode->Next)) { AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, NULL, "Could not pop empty listing stack"); return (AslGbl_ListingNode); } AslGbl_ListingNode = Lnode->Next; ACPI_FREE (Lnode); /* New "Current" node is the new head */ return (AslGbl_ListingNode); } src/acpica/source/compiler/aslload.c000066400000000000000000001400161465205512700177730ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslload - compiler namespace load callbacks * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "amlcode.h" #include "acdispat.h" #include "acnamesp.h" #include "acparser.h" #include "aslcompiler.y.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslload") /* Local prototypes */ static ACPI_STATUS LdLoadFieldElements ( UINT32 AmlType, ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState); static ACPI_STATUS LdLoadResourceElements ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState); static ACPI_STATUS LdNamespace1Begin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS LdNamespace2Begin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS LdCommonNamespaceEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static void LdCheckSpecialNames ( ACPI_NAMESPACE_NODE *Node, ACPI_PARSE_OBJECT *Op); static ACPI_STATUS LdAnalyzeExternals ( ACPI_NAMESPACE_NODE *Node, ACPI_PARSE_OBJECT *Op, ACPI_OBJECT_TYPE ExternalOpType, ACPI_WALK_STATE *WalkState); /******************************************************************************* * * FUNCTION: LdLoadNamespace * * PARAMETERS: RootOp - Root of the parse tree * * RETURN: Status * * DESCRIPTION: Perform a walk of the parse tree that in turn loads all of the * named ASL/AML objects into the namespace. The namespace is * constructed in order to resolve named references and references * to named fields within resource templates/descriptors. * ******************************************************************************/ ACPI_STATUS LdLoadNamespace ( ACPI_PARSE_OBJECT *RootOp) { ACPI_WALK_STATE *WalkState; /* Create a new walk state */ WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL); if (!WalkState) { return (AE_NO_MEMORY); } /* Walk the entire parse tree, first pass */ TrWalkParseTree (RootOp, ASL_WALK_VISIT_TWICE, LdNamespace1Begin, LdCommonNamespaceEnd, WalkState); /* Second pass to handle forward references */ TrWalkParseTree (RootOp, ASL_WALK_VISIT_TWICE, LdNamespace2Begin, LdCommonNamespaceEnd, WalkState); /* Dump the namespace if debug is enabled */ if (AcpiDbgLevel & ACPI_LV_TABLES) { AcpiNsDumpTables (ACPI_NS_ALL, ACPI_UINT32_MAX); } ACPI_FREE (WalkState); return (AE_OK); } /******************************************************************************* * * FUNCTION: LdLoadFieldElements * * PARAMETERS: AmlType - Type to search * Op - Parent node (Field) * WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Enter the named elements of the field (children of the parent) * into the namespace. * ******************************************************************************/ static ACPI_STATUS LdLoadFieldElements ( UINT32 AmlType, ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState) { ACPI_PARSE_OBJECT *Child = NULL; ACPI_PARSE_OBJECT *SourceRegion; ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; char *ExternalPath; SourceRegion = UtGetArg (Op, 0); if (SourceRegion) { Status = AcpiNsLookup (WalkState->ScopeInfo, SourceRegion->Asl.Value.String, AmlType, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node); if (Status == AE_NOT_FOUND) { /* * If the named object is not found, it means that it is either a * forward reference or the named object does not exist. */ SourceRegion->Asl.CompileFlags |= OP_NOT_FOUND_DURING_LOAD; } } /* Get the first named field element */ switch (Op->Asl.AmlOpcode) { case AML_BANK_FIELD_OP: Child = UtGetArg (Op, 6); break; case AML_INDEX_FIELD_OP: Child = UtGetArg (Op, 5); break; case AML_FIELD_OP: Child = UtGetArg (Op, 4); break; default: /* No other opcodes should arrive here */ return (AE_BAD_PARAMETER); } /* Enter all elements into the namespace */ while (Child) { switch (Child->Asl.AmlOpcode) { case AML_INT_RESERVEDFIELD_OP: case AML_INT_ACCESSFIELD_OP: case AML_INT_CONNECTION_OP: break; default: Status = AcpiNsLookup (WalkState->ScopeInfo, Child->Asl.Value.String, ACPI_TYPE_LOCAL_REGION_FIELD, ACPI_IMODE_LOAD_PASS1, ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE | ACPI_NS_ERROR_IF_FOUND, NULL, &Node); if (ACPI_FAILURE (Status)) { if (Status != AE_ALREADY_EXISTS) { AslError (ASL_ERROR, ASL_MSG_CORE_EXCEPTION, Child, Child->Asl.Value.String); return (Status); } else if (Status == AE_ALREADY_EXISTS && (Node->Flags & ANOBJ_IS_EXTERNAL)) { Node->Type = (UINT8) ACPI_TYPE_LOCAL_REGION_FIELD; Node->Flags &= ~ANOBJ_IS_EXTERNAL; } else { /* * The name already exists in this scope * But continue processing the elements */ ExternalPath = AcpiNsGetNormalizedPathname (Node, TRUE); AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child, ExternalPath, ASL_MSG_FOUND_HERE, Node->Op, ExternalPath); if (ExternalPath) { ACPI_FREE (ExternalPath); } } } else { Child->Asl.Node = Node; Node->Op = Child; } break; } Child = Child->Asl.Next; } return (AE_OK); } /******************************************************************************* * * FUNCTION: LdLoadResourceElements * * PARAMETERS: Op - Parent node (Resource Descriptor) * WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Enter the named elements of the resource descriptor (children * of the parent) into the namespace. * * NOTE: In the real AML namespace, these named elements never exist. But * we simply use the namespace here as a symbol table so we can look * them up as they are referenced. * ******************************************************************************/ static ACPI_STATUS LdLoadResourceElements ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState) { ACPI_PARSE_OBJECT *InitializerOp = NULL; ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; char *ExternalPath; /* * Enter the resource name into the namespace. Name must not already exist. * This opens a scope, so later field names are guaranteed to be new/unique. */ Status = AcpiNsLookup (WalkState->ScopeInfo, Op->Asl.Namepath, ACPI_TYPE_LOCAL_RESOURCE, ACPI_IMODE_LOAD_PASS1, ACPI_NS_NO_UPSEARCH | ACPI_NS_ERROR_IF_FOUND, WalkState, &Node); if (ACPI_FAILURE (Status)) { if (Status == AE_ALREADY_EXISTS) { /* Actual node causing the error was saved in ParentMethod */ ExternalPath = AcpiNsGetNormalizedPathname (Node, TRUE); AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, (ACPI_PARSE_OBJECT *) Op->Asl.ParentMethod, ExternalPath, ASL_MSG_FOUND_HERE, Node->Op, ExternalPath); if (ExternalPath) { ACPI_FREE (ExternalPath); } return (AE_OK); } return (Status); } Node->Value = (UINT32) Op->Asl.Value.Integer; Node->Op = Op; Op->Asl.Node = Node; /* * Now enter the predefined fields, for easy lookup when referenced * by the source ASL */ InitializerOp = ASL_GET_CHILD_NODE (Op); while (InitializerOp) { if (InitializerOp->Asl.ExternalName) { Status = AcpiNsLookup (WalkState->ScopeInfo, InitializerOp->Asl.ExternalName, ACPI_TYPE_LOCAL_RESOURCE_FIELD, ACPI_IMODE_LOAD_PASS1, ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node); if (ACPI_FAILURE (Status)) { return (Status); } /* * Store the field offset and length in the namespace node * so it can be used when the field is referenced */ Node->Value = InitializerOp->Asl.Value.Tag.BitOffset; Node->Length = InitializerOp->Asl.Value.Tag.BitLength; InitializerOp->Asl.Node = Node; Node->Op = InitializerOp; } InitializerOp = ASL_GET_PEER_NODE (InitializerOp); } return (AE_OK); } /******************************************************************************* * * FUNCTION: LdNamespace1Begin * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Descending callback used during the parse tree walk. If this * is a named AML opcode, enter into the namespace * ******************************************************************************/ static ACPI_STATUS LdNamespace1Begin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_WALK_STATE *WalkState = (ACPI_WALK_STATE *) Context; ACPI_NAMESPACE_NODE *Node; ACPI_PARSE_OBJECT *MethodOp; ACPI_STATUS Status; ACPI_OBJECT_TYPE ObjectType; char *Path; UINT32 Flags = ACPI_NS_NO_UPSEARCH; ACPI_PARSE_OBJECT *Arg; UINT32 i; BOOLEAN ForceNewScope = FALSE; const ACPI_OPCODE_INFO *OpInfo; ACPI_PARSE_OBJECT *ParentOp; char *ExternalPath; ACPI_FUNCTION_NAME (LdNamespace1Begin); ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op %p [%s]\n", Op, Op->Asl.ParseOpName)); /* * We are only interested in opcodes that have an associated name * (or multiple names) */ switch (Op->Asl.AmlOpcode) { case AML_INDEX_FIELD_OP: Status = LdLoadFieldElements (ACPI_TYPE_LOCAL_REGION_FIELD, Op, WalkState); return (Status); case AML_BANK_FIELD_OP: case AML_FIELD_OP: Status = LdLoadFieldElements (ACPI_TYPE_REGION, Op, WalkState); return (Status); case AML_INT_CONNECTION_OP: if (Op->Asl.Child->Asl.AmlOpcode != AML_INT_NAMEPATH_OP) { break; } Arg = Op->Asl.Child; Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Asl.ExternalName, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &Node); if (ACPI_FAILURE (Status)) { break; } break; default: /* All other opcodes go below */ break; } /* Check if this object has already been installed in the namespace */ if (Op->Asl.Node) { return (AE_OK); } /* Check for a possible illegal forward reference */ if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) || (Op->Asl.ParseOpcode == PARSEOP_METHODCALL)) { /* * Op->Asl.Namepath will be NULL for these opcodes. * These opcodes are guaranteed to have a parent. * Examine the parent opcode. */ ParentOp = Op->Asl.Parent; OpInfo = AcpiPsGetOpcodeInfo (ParentOp->Asl.AmlOpcode); /* * Exclude all operators that actually declare a new name: * Name (ABCD, 1) -> Ignore (AML_CLASS_NAMED_OBJECT) * We only want references to named objects: * Store (2, WXYZ) -> Attempt to resolve the name */ if ((Op->Asl.ParseOpcode != PARSEOP_METHODCALL) && (OpInfo->Class == AML_CLASS_NAMED_OBJECT)) { return (AE_OK); } /* * Check if the referenced object exists at this point during * the load: * 1) If it exists, then this cannot be a forward reference. * 2) If it does not exist, it could be a forward reference or * it truly does not exist (and no external declaration). */ Status = AcpiNsLookup (WalkState->ScopeInfo, Op->Asl.Value.Name, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, WalkState, &Node); if (Status == AE_NOT_FOUND) { /* * This is either a forward reference or the object truly * does not exist. The two cases can only be differentiated * during the cross-reference stage later. Mark the Op/Name * as not-found for now to indicate the need for further * processing. * * Special case: Allow forward references from elements of * Package objects. This provides compatibility with other * ACPI implementations. To correctly implement this, the * ACPICA table load defers package resolution until the entire * namespace has been loaded. */ if ((ParentOp->Asl.ParseOpcode != PARSEOP_PACKAGE) && (ParentOp->Asl.ParseOpcode != PARSEOP_VAR_PACKAGE)) { Op->Asl.CompileFlags |= OP_NOT_FOUND_DURING_LOAD; } return (AE_OK); } return (Status); } Path = Op->Asl.Namepath; if (!Path) { return (AE_OK); } /* Map the raw opcode into an internal object type */ switch (Op->Asl.ParseOpcode) { case PARSEOP_NAME: Arg = Op->Asl.Child; /* Get the NameSeg/NameString node */ Arg = Arg->Asl.Next; /* First peer is the object to be associated with the name */ /* * If this name refers to a ResourceTemplate, we will need to open * a new scope so that the resource subfield names can be entered into * the namespace underneath this name */ if (Op->Asl.CompileFlags & OP_IS_RESOURCE_DESC) { ForceNewScope = TRUE; } /* Get the data type associated with the named object, not the name itself */ /* Log2 loop to convert from Btype (binary) to Etype (encoded) */ ObjectType = 1; for (i = 1; i < Arg->Asl.AcpiBtype; i *= 2) { ObjectType++; } break; case PARSEOP_EXTERNAL: /* * "External" simply enters a name and type into the namespace. * We must be careful to not open a new scope, however, no matter * what type the external name refers to (e.g., a method) * * first child is name, next child is ObjectType */ ObjectType = (UINT8) Op->Asl.Child->Asl.Next->Asl.Value.Integer; /* * We will mark every new node along the path as "External". This * allows some or all of the nodes to be created later in the ASL * code. Handles cases like this: * * External (\_SB_.PCI0.ABCD, IntObj) * Scope (_SB_) * { * Device (PCI0) * { * } * } * Method (X) * { * Store (\_SB_.PCI0.ABCD, Local0) * } */ Flags |= ACPI_NS_EXTERNAL | ACPI_NS_DONT_OPEN_SCOPE; break; case PARSEOP_DEFAULT_ARG: if (Op->Asl.CompileFlags == OP_IS_RESOURCE_DESC) { Status = LdLoadResourceElements (Op, WalkState); return_ACPI_STATUS (Status); } ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode); break; case PARSEOP_SCOPE: /* * The name referenced by Scope(Name) must already exist at this point. * In other words, forward references for Scope() are not supported. * The only real reason for this is that the MS interpreter cannot * handle this case. Perhaps someday this case can go away. */ Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &Node); if (ACPI_FAILURE (Status)) { if (Status == AE_NOT_FOUND) { /* The name was not found, go ahead and create it */ Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_LOCAL_SCOPE, ACPI_IMODE_LOAD_PASS1, Flags, WalkState, &Node); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* However, this is an error -- operand to Scope must exist */ if (strlen (Op->Asl.ExternalName) == ACPI_NAMESEG_SIZE) { AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op, Op->Asl.ExternalName); } else { AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op, Op->Asl.ExternalName); } goto FinishNode; } AslCoreSubsystemError (Op, Status, "Failure from namespace lookup", FALSE); return_ACPI_STATUS (Status); } else /* Status AE_OK */ { /* * Do not allow references to external scopes from the DSDT. * This is because the DSDT is always loaded first, and the * external reference cannot be resolved -- causing a runtime * error because Scope() must be resolved immediately. * 10/2015. */ if ((Node->Flags & ANOBJ_IS_EXTERNAL) && (ACPI_COMPARE_NAMESEG (AslGbl_TableSignature, "DSDT"))) { /* However, allowed if the reference is within a method */ MethodOp = Op->Asl.Parent; while (MethodOp && (MethodOp->Asl.ParseOpcode != PARSEOP_METHOD)) { MethodOp = MethodOp->Asl.Parent; } if (!MethodOp) { /* Not in a control method, error */ AslError (ASL_ERROR, ASL_MSG_CROSS_TABLE_SCOPE, Op, NULL); } } } /* We found a node with this name, now check the type */ switch (Node->Type) { case ACPI_TYPE_LOCAL_SCOPE: case ACPI_TYPE_DEVICE: case ACPI_TYPE_POWER: case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_THERMAL: /* These are acceptable types - they all open a new scope */ break; case ACPI_TYPE_INTEGER: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: /* * These types we will allow, but we will change the type. * This enables some existing code of the form: * * Name (DEB, 0) * Scope (DEB) { ... } * * Which is used to workaround the fact that the MS interpreter * does not allow Scope() forward references. */ sprintf (AslGbl_MsgBuffer, "%s [%s], changing type to [Scope]", Op->Asl.ExternalName, AcpiUtGetTypeName (Node->Type)); AslError (ASL_REMARK, ASL_MSG_SCOPE_TYPE, Op, AslGbl_MsgBuffer); /* Switch the type to scope, open the new scope */ Node->Type = ACPI_TYPE_LOCAL_SCOPE; Status = AcpiDsScopeStackPush (Node, ACPI_TYPE_LOCAL_SCOPE, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } break; default: /* All other types are an error */ sprintf (AslGbl_MsgBuffer, "%s [%s]", Op->Asl.ExternalName, AcpiUtGetTypeName (Node->Type)); AslError (ASL_ERROR, ASL_MSG_SCOPE_TYPE, Op, AslGbl_MsgBuffer); /* * However, switch the type to be an actual scope so * that compilation can continue without generating a whole * cascade of additional errors. Open the new scope. */ Node->Type = ACPI_TYPE_LOCAL_SCOPE; Status = AcpiDsScopeStackPush (Node, ACPI_TYPE_LOCAL_SCOPE, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } break; } Status = AE_OK; goto FinishNode; default: ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode); break; } ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Loading name: %s, (%s)\n", Op->Asl.ExternalName, AcpiUtGetTypeName (ObjectType))); /* The name must not already exist */ Flags |= ACPI_NS_ERROR_IF_FOUND; /* * For opcodes that enter new names into the namespace, * all prefix NameSegs must exist. */ WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); if (((WalkState->OpInfo->Flags & AML_NAMED) || (WalkState->OpInfo->Flags & AML_CREATE)) && (Op->Asl.AmlOpcode != AML_EXTERNAL_OP)) { Flags |= ACPI_NS_PREFIX_MUST_EXIST; } /* * Enter the named type into the internal namespace. We enter the name * as we go downward in the parse tree. Any necessary subobjects that * involve arguments to the opcode must be created as we go back up the * parse tree later. */ Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType, ACPI_IMODE_LOAD_PASS1, Flags, WalkState, &Node); if (ACPI_FAILURE (Status)) { if (Status == AE_ALREADY_EXISTS) { /* The name already exists in this scope */ if (Node->Type == ACPI_TYPE_LOCAL_SCOPE) { /* Allow multiple references to the same scope */ Node->Type = (UINT8) ObjectType; Status = AE_OK; } else if ((Node->Flags & ANOBJ_IS_EXTERNAL) || (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL)) { Status = LdAnalyzeExternals (Node, Op, ObjectType, WalkState); if (ACPI_FAILURE (Status)) { if (Status == AE_ERROR) { /* * The use of AE_ERROR here indicates that there was a * compiler error emitted in LdAnalyzeExternals which * means that the caller should proceed to the next Op * for analysis of subsequent parse objects. */ Status = AE_OK; } return_ACPI_STATUS (Status); } if (!(Node->Flags & ANOBJ_IS_EXTERNAL) && (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL)) { /* * If we get to here, it means that an actual definition of * the object declared external exists. Meaning that Op * loading this this Op should have no change to the ACPI * namespace. By going to FinishNode, we skip the * assignment of Node->Op = Op. */ goto FinishNode; } } else { /* Valid error, object already exists */ ExternalPath = AcpiNsGetNormalizedPathname (Node, TRUE); AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, ExternalPath, ASL_MSG_FOUND_HERE, Node->Op, ExternalPath); if (ExternalPath) { ACPI_FREE (ExternalPath); } return_ACPI_STATUS (AE_OK); } } else if (AE_NOT_FOUND) { /* * One or more prefix NameSegs of the NamePath do not exist * (all of them must exist). Attempt to continue compilation * by setting the current scope to the root. */ Node = AcpiGbl_RootNode; Status = AE_OK; } else { /* Flag all other errors as coming from the ACPICA core */ AslCoreSubsystemError (Op, Status, "Failure from namespace lookup", FALSE); return_ACPI_STATUS (Status); } } /* Check special names like _WAK and _PTS */ LdCheckSpecialNames (Node, Op); if (ForceNewScope) { Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } /* Point the Node back to the original Parse node */ Node->Op = Op; FinishNode: /* Point the parse node to the new namespace node */ Op->Asl.Node = Node; if (Op->Asl.ParseOpcode == PARSEOP_METHOD) { /* * Get the method argument count from "Extra" and save * it in the namespace node */ Node->Value = (UINT32) Op->Asl.Extra; } else if (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL && Node->Type == ACPI_TYPE_METHOD && (Node->Flags & ANOBJ_IS_EXTERNAL)) { Node->Value = (UINT32) Op->Asl.Child->Asl.Next->Asl.Next->Asl.Value.Integer; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: LdMatchExternType * * PARAMETERS: Type1 * Type2 * * RETURN: BOOLEAN * * DESCRIPTION: Match Type1 and Type2 with the assumption that one might be * using external types and another might be using local types. * This should be used to compare the types found in external * declarations with types found in other external declarations or * named object declaration. This should not be used to match two * object type declarations. * ******************************************************************************/ static BOOLEAN LdMatchExternType ( ACPI_OBJECT_TYPE Type1, ACPI_OBJECT_TYPE Type2) { BOOLEAN Type1IsLocal = Type1 > ACPI_TYPE_EXTERNAL_MAX; BOOLEAN Type2IsLocal = Type2 > ACPI_TYPE_EXTERNAL_MAX; ACPI_OBJECT_TYPE ExternalType; ACPI_OBJECT_TYPE LocalType; /* * The inputs could represent types that are local to ACPICA or types that * are known externally. Some local types, such as the OperationRegion * field units, are defined with more granularity than ACPICA local types. * * Therefore, map the local types to the external types before matching. */ if (Type1IsLocal && !Type2IsLocal) { LocalType = Type1; ExternalType = Type2; } else if (!Type1IsLocal && Type2IsLocal) { LocalType = Type2; ExternalType = Type1; } else { return (Type1 == Type2); } switch (LocalType) { case ACPI_TYPE_LOCAL_REGION_FIELD: case ACPI_TYPE_LOCAL_BANK_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD: LocalType = ACPI_TYPE_FIELD_UNIT; break; default: break; } return (LocalType == ExternalType); } /******************************************************************************* * * FUNCTION: LdAnalyzeExternals * * PARAMETERS: Node - Node that represents the named object * Op - Named object declaring this named object * ExternalOpType - Type of ExternalOp * WalkState - Current WalkState * * RETURN: Status * * DESCRIPTION: Node and Op represents an identically named object declaration * that is either declared by the ASL external keyword or declared * by operators that declare named objects (i.e. Name, Device, * OperationRegion, and etc.). This function ensures that the * declarations do not contradict each other. * ******************************************************************************/ static ACPI_STATUS LdAnalyzeExternals ( ACPI_NAMESPACE_NODE *Node, ACPI_PARSE_OBJECT *Op, ACPI_OBJECT_TYPE ExternalOpType, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_OBJECT_TYPE ActualExternalOpType; ACPI_OBJECT_TYPE ActualOpType; ACPI_PARSE_OBJECT *ExternalOp; ACPI_PARSE_OBJECT *ActualOp; /* * The declaration represented by Node and Op must have the same type. * The type of the external Op is represented by ExternalOpType. However, * the type of the pre-existing declaration depends on whether if Op * is an external declaration or an actual declaration. */ if (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) { ActualExternalOpType = ExternalOpType; ActualOpType = Node->Type; } else { ActualExternalOpType = Node->Type; ActualOpType = ExternalOpType; } if ((ActualOpType != ACPI_TYPE_ANY) && (ActualExternalOpType != ACPI_TYPE_ANY) && !LdMatchExternType (ActualExternalOpType, ActualOpType)) { if (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL && Node->Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) { AslDualParseOpError (ASL_WARNING, ASL_MSG_DUPLICATE_EXTERN_MISMATCH, Op, NULL, ASL_MSG_DUPLICATE_EXTERN_FOUND_HERE, Node->Op, NULL); } else { if (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL && Node->Op->Asl.ParseOpcode != PARSEOP_EXTERNAL) { ExternalOp = Op; ActualOp = Node->Op; } else { ExternalOp = Node->Op; ActualOp = Op; } AslDualParseOpError (ASL_WARNING, ASL_MSG_DECLARATION_TYPE_MISMATCH, ExternalOp, NULL, ASL_MSG_TYPE_MISMATCH_FOUND_HERE, ActualOp, NULL); } } /* Set the object type of the external */ if ((Node->Flags & ANOBJ_IS_EXTERNAL) && (Op->Asl.ParseOpcode != PARSEOP_EXTERNAL)) { /* * Allow one create on an object or segment that was * previously declared External */ Node->Flags &= ~ANOBJ_IS_EXTERNAL; Node->Type = (UINT8) ActualOpType; /* Just retyped a node, probably will need to open a scope */ if (AcpiNsOpensScope (ActualOpType)) { Status = AcpiDsScopeStackPush (Node, ActualOpType, WalkState); if (ACPI_FAILURE (Status)) { return (Status); } } Status = AE_OK; } else if (!(Node->Flags & ANOBJ_IS_EXTERNAL) && (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL)) { /* * Allow externals in same scope as the definition of the * actual object. Similar to C. Allows multiple definition * blocks that refer to each other in the same file. */ Status = AE_OK; } else if ((Node->Flags & ANOBJ_IS_EXTERNAL) && (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) && (ActualOpType == ACPI_TYPE_ANY)) { /* Allow update of externals of unknown type. */ Node->Type = (UINT8) ActualExternalOpType; Status = AE_OK; } return (Status); } /******************************************************************************* * * FUNCTION: LdCheckSpecialNames * * PARAMETERS: Node - Node that represents the named object * Op - Named object declaring this named object * * RETURN: None * * DESCRIPTION: Check if certain named objects are declared in the incorrect * scope. Special named objects are listed in * AslGbl_SpecialNamedObjects and can only be declared at the root * scope. _UID inside of a processor declaration must not be a * string. * ******************************************************************************/ static void LdCheckSpecialNames ( ACPI_NAMESPACE_NODE *Node, ACPI_PARSE_OBJECT *Op) { UINT32 i; for (i = 0; i < MAX_SPECIAL_NAMES; i++) { if (ACPI_COMPARE_NAMESEG(Node->Name.Ascii, AslGbl_SpecialNamedObjects[i]) && Node->Parent != AcpiGbl_RootNode) { AslError (ASL_ERROR, ASL_MSG_INVALID_SPECIAL_NAME, Op, Op->Asl.ExternalName); return; } } if (ACPI_COMPARE_NAMESEG (Node->Name.Ascii, "_UID") && Node->Parent->Type == ACPI_TYPE_PROCESSOR && Node->Type == ACPI_TYPE_STRING) { AslError (ASL_ERROR, ASL_MSG_INVALID_PROCESSOR_UID , Op, "found a string"); } } /******************************************************************************* * * FUNCTION: LdNamespace2Begin * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Descending callback used during the pass 2 parse tree walk. * Second pass resolves some forward references. * * Notes: * Currently only needs to handle the Alias operator. * Could be used to allow forward references from the Scope() operator, but * the MS interpreter does not allow this, so this compiler does not either. * ******************************************************************************/ static ACPI_STATUS LdNamespace2Begin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_WALK_STATE *WalkState = (ACPI_WALK_STATE *) Context; ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_OBJECT_TYPE ObjectType; BOOLEAN ForceNewScope = FALSE; ACPI_PARSE_OBJECT *Arg; char *Path; ACPI_NAMESPACE_NODE *TargetNode; ACPI_FUNCTION_NAME (LdNamespace2Begin); ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op %p [%s]\n", Op, Op->Asl.ParseOpName)); /* Ignore Ops with no namespace node */ Node = Op->Asl.Node; if (!Node) { return (AE_OK); } /* Get the type to determine if we should push the scope */ if ((Op->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) && (Op->Asl.CompileFlags == OP_IS_RESOURCE_DESC)) { ObjectType = ACPI_TYPE_LOCAL_RESOURCE; } else { ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode); } /* Push scope for Resource Templates */ if (Op->Asl.ParseOpcode == PARSEOP_NAME) { if (Op->Asl.CompileFlags & OP_IS_RESOURCE_DESC) { ForceNewScope = TRUE; } } /* Push the scope stack */ if (ForceNewScope || AcpiNsOpensScope (ObjectType)) { Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } if (Op->Asl.ParseOpcode == PARSEOP_ALIAS) { /* * Complete the alias node by getting and saving the target node. * First child is the alias target */ Arg = Op->Asl.Child; /* Get the target pathname */ Path = Arg->Asl.Namepath; if (!Path) { Status = UtInternalizeName (Arg->Asl.ExternalName, &Path); if (ACPI_FAILURE (Status)) { return (Status); } } /* Get the NS node associated with the target. It must exist. */ Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, WalkState, &TargetNode); if (ACPI_FAILURE (Status)) { if (Status == AE_NOT_FOUND) { /* Standalone NameSeg vs. NamePath */ if (strlen (Arg->Asl.ExternalName) == ACPI_NAMESEG_SIZE) { AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op, Arg->Asl.ExternalName); } else { AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op, Arg->Asl.ExternalName); } #if 0 /* * NOTE: Removed 10/2018 to enhance compiler error reporting. No * regressions seen. */ /* * The name was not found, go ahead and create it. * This prevents more errors later. */ Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY, ACPI_IMODE_LOAD_PASS1, ACPI_NS_NO_UPSEARCH, WalkState, &Node); #endif return (Status); /* Removed: return (AE_OK)*/ } AslCoreSubsystemError (Op, Status, "Failure from namespace lookup", FALSE); return (AE_OK); } /* Save the target node within the alias node as well as type information */ Node->Object = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, TargetNode); Node->Type = TargetNode->Type; if (Node->Type == ACPI_TYPE_METHOD) { /* Save the parameter count for methods */ Node->Value = TargetNode->Value; } } return (AE_OK); } /******************************************************************************* * * FUNCTION: LdCommonNamespaceEnd * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Ascending callback used during the loading of the namespace, * We only need to worry about managing the scope stack here. * ******************************************************************************/ static ACPI_STATUS LdCommonNamespaceEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_WALK_STATE *WalkState = (ACPI_WALK_STATE *) Context; ACPI_OBJECT_TYPE ObjectType; BOOLEAN ForceNewScope = FALSE; ACPI_FUNCTION_NAME (LdCommonNamespaceEnd); /* We are only interested in opcodes that have an associated name */ if (!Op->Asl.Namepath) { return (AE_OK); } /* Get the type to determine if we should pop the scope */ if ((Op->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) && (Op->Asl.CompileFlags == OP_IS_RESOURCE_DESC)) { /* TBD: Merge into AcpiDsMapNamedOpcodeToDataType */ ObjectType = ACPI_TYPE_LOCAL_RESOURCE; } else { ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode); } /* Pop scope that was pushed for Resource Templates */ if (Op->Asl.ParseOpcode == PARSEOP_NAME) { if (Op->Asl.CompileFlags & OP_IS_RESOURCE_DESC) { ForceNewScope = TRUE; } } /* Pop the scope stack */ if (ForceNewScope || AcpiNsOpensScope (ObjectType)) { ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s): Popping scope for Op [%s] %p\n", AcpiUtGetTypeName (ObjectType), Op->Asl.ParseOpName, Op)); (void) AcpiDsScopeStackPop (WalkState); } return (AE_OK); } src/acpica/source/compiler/asllookup.c000066400000000000000000000374271465205512700204000ustar00rootroot00000000000000/****************************************************************************** * * Module Name: asllookup- Namespace lookup functions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acparser.h" #include "amlcode.h" #include "acnamesp.h" #include "acdispat.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("asllookup") /* Local prototypes */ static ACPI_STATUS LkIsObjectUsed ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); static ACPI_PARSE_OBJECT * LkGetNameOp ( ACPI_PARSE_OBJECT *Op); /******************************************************************************* * * FUNCTION: LkFindUnreferencedObjects * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Namespace walk to find objects that are not referenced in any * way. Must be called after the namespace has been cross * referenced. * ******************************************************************************/ void LkFindUnreferencedObjects ( void) { /* Walk entire namespace from the supplied root */ (void) AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, FALSE, LkIsObjectUsed, NULL, NULL, NULL); } /******************************************************************************* * * FUNCTION: LkIsObjectUsed * * PARAMETERS: ACPI_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Check for an unreferenced namespace object and emit a warning. * We have to be careful, because some types and names are * typically or always unreferenced, we don't want to issue * excessive warnings. Note: Names that are declared within a * control method are temporary, so we always issue a remark * if they are not referenced. * ******************************************************************************/ static ACPI_STATUS LkIsObjectUsed ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle); ACPI_NAMESPACE_NODE *Next; ASL_METHOD_LOCAL *MethodLocals; ASL_METHOD_LOCAL *MethodArgs; UINT32 i; if (Node->Type == ACPI_TYPE_METHOD) { if (!Node->Op || !Node->MethodLocals) { return (AE_OK); } MethodLocals = (ASL_METHOD_LOCAL *) Node->MethodLocals; MethodArgs = (ASL_METHOD_LOCAL *) Node->MethodArgs; /* * Analysis of LocalX variables */ for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++) { /* Warn for Locals that are set but never referenced */ if ((MethodLocals[i].Flags & ASL_LOCAL_INITIALIZED) && (!(MethodLocals[i].Flags & ASL_LOCAL_REFERENCED))) { sprintf (AslGbl_MsgBuffer, "Local%u", i); AslError (ASL_WARNING, ASL_MSG_LOCAL_NOT_USED, MethodLocals[i].Op, AslGbl_MsgBuffer); } } /* * Analysis of ArgX variables (standard method arguments, * and remaining unused ArgX can also be used as locals) */ for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++) { if (MethodArgs[i].Flags & ASL_ARG_IS_LOCAL) { /* Warn if ArgX is being used as a local, but not referenced */ if ((MethodArgs[i].Flags & ASL_ARG_INITIALIZED) && (!(MethodArgs[i].Flags & ASL_ARG_REFERENCED))) { sprintf (AslGbl_MsgBuffer, "Arg%u", i); AslError (ASL_WARNING, ASL_MSG_ARG_AS_LOCAL_NOT_USED, MethodArgs[i].Op, AslGbl_MsgBuffer); } } else { /* * Remark if a normal method ArgX is not referenced. * We ignore the predefined methods since often, not * all arguments are needed or used. */ if ((Node->Name.Ascii[0] != '_') && (!(MethodArgs[i].Flags & ASL_ARG_REFERENCED))) { sprintf (AslGbl_MsgBuffer, "Arg%u", i); AslError (ASL_REMARK, ASL_MSG_ARG_NOT_USED, MethodArgs[i].Op, AslGbl_MsgBuffer); } } } } /* Referenced flag is set during the namespace xref */ if (Node->Flags & ANOBJ_IS_REFERENCED) { return (AE_OK); } if (!Node->Op) { return (AE_OK); } /* These types are typically never directly referenced, ignore them */ switch (Node->Type) { case ACPI_TYPE_DEVICE: case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_POWER: case ACPI_TYPE_THERMAL: case ACPI_TYPE_LOCAL_RESOURCE: case ACPI_TYPE_LOCAL_RESOURCE_FIELD: /* Names assigned to descriptor elements */ return (AE_OK); default: break; } /* Determine if the name is within a control method */ Next = Node->Parent; while (Next) { if (Next->Type == ACPI_TYPE_METHOD) { /* * Name is within a method, therefore it is temporary. * Issue a remark even if it is a reserved name (starts * with an underscore). */ sprintf (AslGbl_MsgBuffer, "Name [%4.4s] is within a method [%4.4s]", Node->Name.Ascii, Next->Name.Ascii); AslError (ASL_REMARK, ASL_MSG_NOT_REFERENCED, LkGetNameOp (Node->Op), AslGbl_MsgBuffer); return (AE_OK); } Next = Next->Parent; } /* The name is not within a control method */ /* * Ignore names that start with an underscore. These are the reserved * ACPI names and are typically not referenced since they are meant * to be called by the host OS. */ if (Node->Name.Ascii[0] == '_') { return (AE_OK); } /* * What remains is an unresolved user name that is not within a method. * However, the object could be referenced via another table, so issue * the warning at level 2. */ AslError (ASL_WARNING2, ASL_MSG_NOT_REFERENCED, LkGetNameOp (Node->Op), NULL); return (AE_OK); } /******************************************************************************* * * FUNCTION: LkGetNameOp * * PARAMETERS: Op - Current Op * * RETURN: NameOp associated with the input op * * DESCRIPTION: Find the name declaration op associated with the operator * ******************************************************************************/ static ACPI_PARSE_OBJECT * LkGetNameOp ( ACPI_PARSE_OBJECT *Op) { const ACPI_OPCODE_INFO *OpInfo; ACPI_PARSE_OBJECT *NameOp = Op; OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); /* Get the NamePath from the appropriate place */ if (OpInfo->Flags & AML_NAMED) { /* For nearly all NAMED operators, the name reference is the first child */ NameOp = Op->Asl.Child; if (Op->Asl.AmlOpcode == AML_ALIAS_OP) { /* * ALIAS is the only oddball opcode, the name declaration * (alias name) is the second operand */ NameOp = Op->Asl.Child->Asl.Next; } } else if (OpInfo->Flags & AML_CREATE) { /* Name must appear as the last parameter */ NameOp = Op->Asl.Child; while (!(NameOp->Asl.CompileFlags & OP_IS_NAME_DECLARATION)) { NameOp = NameOp->Asl.Next; } } return (NameOp); } src/acpica/source/compiler/aslmain.c000066400000000000000000000360731465205512700200070ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslmain - compiler main and utilities * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define _DECLARE_GLOBALS #include "aslcompiler.h" #include "acapps.h" #include "acdisasm.h" #include #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslmain") /* * Main routine for the iASL compiler. * * Portability note: The compiler depends upon the host for command-line * wildcard support - it is not implemented locally. For example: * * Linux/Unix systems: Shell expands wildcards automatically. * * Windows: The setargv.obj module must be linked in to automatically * expand wildcards. */ /* Local prototypes */ static void ACPI_SYSTEM_XFACE AslSignalHandler ( int Sig); static void AslInitialize ( void); /******************************************************************************* * * FUNCTION: main * * PARAMETERS: Standard argc/argv * * RETURN: Program termination code * * DESCRIPTION: C main routine for the iASL Compiler/Disassembler. Process * command line options and begin the compile/disassembly for each file on * the command line (wildcards supported). * ******************************************************************************/ int ACPI_SYSTEM_XFACE main ( int argc, char **argv) { ACPI_STATUS Status; int Index1; int Index2; int ReturnStatus = 0; signal (SIGINT, AslSignalHandler); /* * Big-endian machines are not currently supported. ACPI tables must * be little-endian, and support for big-endian machines needs to * be implemented. */ if (UtIsBigEndianMachine ()) { fprintf (stderr, "iASL is not currently supported on big-endian machines.\n"); return (-1); } AcpiOsInitialize (); ACPI_DEBUG_INITIALIZE (); /* For debug version only */ /* Initialize preprocessor and compiler before command line processing */ AcpiGbl_ExternalFileList = NULL; AcpiDbgLevel = 0; PrInitializePreprocessor (); AslInitialize (); Index1 = Index2 = AslCommandLine (argc, argv); /* Allocate the line buffer(s), must be after command line */ AslGbl_LineBufferSize /= 2; UtExpandLineBuffers (); /* Perform global actions first/only */ if (AslGbl_DisassembleAll) { while (argv[Index1]) { Status = AcpiDmAddToExternalFileList (argv[Index1]); if (ACPI_FAILURE (Status)) { return (-1); } Index1++; } } /* ACPICA subsystem initialization */ Status = AdInitialize (); if (ACPI_FAILURE (Status)) { return (Status); } /* Process each pathname/filename in the list, with possible wildcards */ while (argv[Index2]) { /* * If -p not specified, we will use the input filename as the * output filename prefix */ if (AslGbl_UseDefaultAmlFilename) { AslGbl_OutputFilenamePrefix = argv[Index2]; UtConvertBackslashes (AslGbl_OutputFilenamePrefix); } Status = AslDoOneFile (argv[Index2]); if (ACPI_FAILURE (Status)) { ReturnStatus = -1; } Index2++; } /* * At this point, compilation of a data table or disassembly is complete. * However, if there is a parse tree, perform compiler analysis and * generate AML. */ if (AslGbl_PreprocessOnly || AcpiGbl_DisasmFlag || !AslGbl_ParseTreeRoot) { goto CleanupAndExit; } CmDoAslMiddleAndBackEnd (); /* * At this point, all semantic analysis has been completed. Check * expected error messages before cleanup or conversion. */ AslCheckExpectedExceptions (); /* ASL-to-ASL+ conversion - Perform immediate disassembly */ if (AslGbl_DoAslConversion) { /* re-initialize ACPICA subsystem for disassembler */ Status = AdInitialize (); if (ACPI_FAILURE (Status)) { return (Status); } /* * New input file is the output AML file from above. * New output is from the input ASL file from above. */ AslGbl_OutputFilenamePrefix = AslGbl_Files[ASL_FILE_INPUT].Filename; AslGbl_Files[ASL_FILE_INPUT].Filename = AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename; CvDbgPrint ("Output filename: %s\n", AslGbl_OutputFilenamePrefix); fprintf (stderr, "\n"); AcpiGbl_DisasmFlag = TRUE; AslDoDisassembly (); AcpiGbl_DisasmFlag = FALSE; /* delete the AML file. This AML file should never be utilized by AML interpreters. */ FlDeleteFile (ASL_FILE_AML_OUTPUT); } CleanupAndExit: UtFreeLineBuffers (); AslParserCleanup (); AcpiDmClearExternalFileList(); (void) AcpiTerminate (); /* CmCleanupAndExit is intended for the compiler only */ if (!AcpiGbl_DisasmFlag) { ReturnStatus = CmCleanupAndExit (); } return (ReturnStatus); } /****************************************************************************** * * FUNCTION: AslSignalHandler * * PARAMETERS: Sig - Signal that invoked this handler * * RETURN: None * * DESCRIPTION: Signal interrupt handler. Delete any intermediate files and * any output files that may be left in an indeterminate state. * Currently handles SIGINT (control-c). * *****************************************************************************/ static void ACPI_SYSTEM_XFACE AslSignalHandler ( int Sig) { UINT32 i; signal (Sig, SIG_IGN); fflush (stdout); fflush (stderr); switch (Sig) { case SIGINT: printf ("\n" ASL_PREFIX "\n"); break; default: printf (ASL_PREFIX "Unknown interrupt signal (%d)\n", Sig); break; } /* * Close all open files * Note: the .pre file is the same as the input source file */ if (AslGbl_Files) { AslGbl_Files[ASL_FILE_PREPROCESSOR].Handle = NULL; for (i = ASL_FILE_INPUT; i < ASL_MAX_FILE_TYPE; i++) { FlCloseFile (i); } /* Delete any output files */ for (i = ASL_FILE_AML_OUTPUT; i < ASL_MAX_FILE_TYPE; i++) { FlDeleteFile (i); } } printf (ASL_PREFIX "Terminating\n"); _exit (0); } /******************************************************************************* * * FUNCTION: AslInitialize * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Initialize compiler globals * ******************************************************************************/ static void AslInitialize ( void) { AcpiGbl_DmOpt_Verbose = FALSE; /* Default integer width is 32 bits */ AcpiGbl_IntegerBitWidth = 32; AcpiGbl_IntegerNybbleWidth = 8; AcpiGbl_IntegerByteWidth = 4; } src/acpica/source/compiler/aslmap.c000066400000000000000000001677651465205512700176550ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslmap - parser to AML opcode mapping table * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "amlcode.h" #include "acparser.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslmap") /******************************************************************************* * * FUNCTION: AslMapNamedOpcodeToDataType * * PARAMETERS: Opcode - The Named AML opcode to map * * RETURN: The ACPI type associated with the named opcode * * DESCRIPTION: Convert a raw Named AML opcode to the associated data type. * Named opcodes are a subset of the AML opcodes. * ******************************************************************************/ ACPI_OBJECT_TYPE AslMapNamedOpcodeToDataType ( UINT16 Opcode) { const ACPI_OPCODE_INFO *OpInfo; /* * There are some differences from the opcode table types, we * catch them here. */ OpInfo = AcpiPsGetOpcodeInfo (Opcode); if (Opcode == AML_INT_NAMEPATH_OP) { return (ACPI_TYPE_ANY); } if (Opcode == AML_INT_METHODCALL_OP) { return (ACPI_TYPE_ANY); } if (OpInfo->Flags & AML_NSOBJECT) { return (OpInfo->ObjectType); } return (ACPI_TYPE_ANY); } /******************************************************************************* * * DATA STRUCTURE: AslKeywordMapping * * DESCRIPTION: Maps the ParseOpcode to the actual AML opcode. The parse * opcodes are generated from Bison, and this table must * track any additions to them. * * Each entry in the table contains the following items: * * AML opcode - Opcode that is written to the AML file * Value - Value of the object to be written (if applicable) * Flags - 1) Whether this opcode opens an AML "package". * ******************************************************************************/ /* * TBD: * AccessAttrib * AccessType * AMlop for DMA? * ObjectType keywords * Register */ const ASL_MAPPING_ENTRY AslKeywordMapping [] = { /*! [Begin] no source code translation (keep the table structure) */ /* AML Opcode Value Flags Btype */ /* ACCESSAS */ OP_TABLE_ENTRY (AML_INT_ACCESSFIELD_OP, 0, 0, 0), /* ACCESSATTRIB_BLOCK */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ATTRIB_BLOCK, 0, 0), /* ACCESSATTRIB_BLOCK_PROCESS_CALL */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ATTRIB_BLOCK_PROCESS_CALL, 0, 0), /* ACCESSATTRIB_BYTE */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ATTRIB_BYTE, 0, 0), /* ACCESSATTRIB_BYTES */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ATTRIB_BYTES, 0, 0), /* ACCESSATTRIB_QUICK */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ATTRIB_QUICK, 0, 0), /* ACCESSATTRIB_RAW_BYTES */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ATTRIB_RAW_BYTES, 0, 0), /* ACCESSATTRIB_RAW_PROCESS_BYTES */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ATTRIB_RAW_PROCESS_BYTES, 0, 0), /* ACCESSATTRIB_SEND_RECEIVE */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ATTRIB_SEND_RECEIVE, 0, 0), /* ACCESSATTRIB_WORD */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ATTRIB_WORD, 0, 0), /* ACCESSATTRIB_PROCESS_CALL */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ATTRIB_PROCESS_CALL, 0, 0), /* ACCESSTYPE_ANY */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ACCESS_ANY, 0, 0), /* ACCESSTYPE_BUF */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ACCESS_BUFFER, 0, 0), /* ACCESSTYPE_BYTE */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ACCESS_BYTE, 0, 0), /* ACCESSTYPE_DWORD */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ACCESS_DWORD, 0, 0), /* ACCESSTYPE_QWORD */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ACCESS_QWORD, 0, 0), /* ACCESSTYPE_WORD */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_ACCESS_WORD, 0, 0), /* ACQUIRE */ OP_TABLE_ENTRY (AML_ACQUIRE_OP, 0, 0, ACPI_BTYPE_INTEGER), /* ADD */ OP_TABLE_ENTRY (AML_ADD_OP, 0, 0, ACPI_BTYPE_INTEGER), /* ADDRESSINGMODE_7BIT */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* ADDRESSINGMODE_10BIT */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* ADDRESSTYPE_ACPI */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0), /* ADDRESSTYPE_MEMORY */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* ADDRESSTYPE_NVS */ OP_TABLE_ENTRY (AML_BYTE_OP, 3, 0, 0), /* ADDRESSTYPE_RESERVED */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* ALIAS */ OP_TABLE_ENTRY (AML_ALIAS_OP, 0, 0, 0), /* AND */ OP_TABLE_ENTRY (AML_BIT_AND_OP, 0, 0, ACPI_BTYPE_INTEGER), /* ARG0 */ OP_TABLE_ENTRY (AML_ARG0, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* ARG1 */ OP_TABLE_ENTRY (AML_ARG1, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* ARG2 */ OP_TABLE_ENTRY (AML_ARG2, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* ARG3 */ OP_TABLE_ENTRY (AML_ARG3, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* ARG4 */ OP_TABLE_ENTRY (AML_ARG4, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* ARG5 */ OP_TABLE_ENTRY (AML_ARG5, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* ARG6 */ OP_TABLE_ENTRY (AML_ARG6, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* BANKFIELD */ OP_TABLE_ENTRY (AML_BANK_FIELD_OP, 0, OP_AML_PACKAGE, 0), /* BITSPERBYTE_EIGHT */ OP_TABLE_ENTRY (AML_BYTE_OP, 3, 0, 0), /* BITSPERBYTE_FIVE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* BITSPERBYTE_NINE */ OP_TABLE_ENTRY (AML_BYTE_OP, 4, 0, 0), /* BITSPERBYTE_SEVEN */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0), /* BITSPERBYTE_SIX */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* BREAK */ OP_TABLE_ENTRY (AML_BREAK_OP, 0, 0, 0), /* BREAKPOINT */ OP_TABLE_ENTRY (AML_BREAKPOINT_OP, 0, 0, 0), /* BUFFER */ OP_TABLE_ENTRY (AML_BUFFER_OP, 0, OP_AML_PACKAGE, ACPI_BTYPE_BUFFER), /* BUSMASTERTYPE_MASTER */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* BUSMASTERTYPE_NOTMASTER */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* BYTECONST */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, 0, 0, ACPI_BTYPE_INTEGER), /* CASE */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* CLOCKPHASE_FIRST */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* CLOCKPHASE_SECOND */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* CLOCKPOLARITY_HIGH */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* CLOCKPOLARITY_LOW */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* CONCATENATE */ OP_TABLE_ENTRY (AML_CONCATENATE_OP, 0, 0, ACPI_BTYPE_COMPUTE_DATA), /* CONCATENATERESTEMPLATE */ OP_TABLE_ENTRY (AML_CONCATENATE_TEMPLATE_OP,0, 0, ACPI_BTYPE_BUFFER), /* CONDREFOF */ OP_TABLE_ENTRY (AML_CONDITIONAL_REF_OF_OP, 0, 0, ACPI_BTYPE_INTEGER), /* CONNECTION */ OP_TABLE_ENTRY (AML_INT_CONNECTION_OP, 0, 0, 0), /* CONTINUE */ OP_TABLE_ENTRY (AML_CONTINUE_OP, 0, 0, 0), /* COPYOBJECT */ OP_TABLE_ENTRY (AML_COPY_OBJECT_OP, 0, 0, ACPI_BTYPE_DATA_REFERENCE), /* CREATEBITFIELD */ OP_TABLE_ENTRY (AML_CREATE_BIT_FIELD_OP, 0, 0, 0), /* CREATEBYTEFIELD */ OP_TABLE_ENTRY (AML_CREATE_BYTE_FIELD_OP, 0, 0, 0), /* CREATEDWORDFIELD */ OP_TABLE_ENTRY (AML_CREATE_DWORD_FIELD_OP, 0, 0, 0), /* CREATEFIELD */ OP_TABLE_ENTRY (AML_CREATE_FIELD_OP, 0, 0, 0), /* CREATEQWORDFIELD */ OP_TABLE_ENTRY (AML_CREATE_QWORD_FIELD_OP, 0, 0, 0), /* CREATEWORDFIELD */ OP_TABLE_ENTRY (AML_CREATE_WORD_FIELD_OP, 0, 0, 0), /* DATABUFFER */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* DATATABLEREGION */ OP_TABLE_ENTRY (AML_DATA_REGION_OP, 0, 0, 0), /* DEBUG */ OP_TABLE_ENTRY (AML_DEBUG_OP, 0, 0, ACPI_BTYPE_DEBUG_OBJECT), /* DECODETYPE_POS */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* DECODETYPE_SUB */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* DECREMENT */ OP_TABLE_ENTRY (AML_DECREMENT_OP, 0, 0, ACPI_BTYPE_INTEGER), /* DEFAULT */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* DEFAULT_ARG */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* DEFINITIONBLOCK */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* DEREFOF */ OP_TABLE_ENTRY (AML_DEREF_OF_OP, 0, 0, ACPI_BTYPE_DATA_REFERENCE | ACPI_BTYPE_STRING), /* DEVICE */ OP_TABLE_ENTRY (AML_DEVICE_OP, 0, OP_AML_PACKAGE, 0), /* DEVICEPOLARITY_HIGH */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* DEVICEPOLARITY_LOW */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* DIVIDE */ OP_TABLE_ENTRY (AML_DIVIDE_OP, 0, 0, ACPI_BTYPE_INTEGER), /* DMA */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* DMATYPE_A */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* DMATYPE_COMPATIBILITY */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* DMATYPE_B */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0), /* DMATYPE_F */ OP_TABLE_ENTRY (AML_BYTE_OP, 3, 0, 0), /* DWORDCONST */ OP_TABLE_ENTRY (AML_RAW_DATA_DWORD, 0, 0, ACPI_BTYPE_INTEGER), /* DWORDIO */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* DWORDMEMORY */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* DWORDSPACE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* EISAID */ OP_TABLE_ENTRY (AML_DWORD_OP, 0, 0, ACPI_BTYPE_INTEGER), /* ELSE */ OP_TABLE_ENTRY (AML_ELSE_OP, 0, OP_AML_PACKAGE, 0), /* ELSEIF */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, OP_AML_PACKAGE, 0), /* ENDDEPENDENTFN */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* ENDIAN_BIG */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* ENDIAN_LITTLE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* ENDTAG */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* ERRORNODE */ OP_TABLE_ENTRY (AML_NOOP_OP, 0, 0, 0), /* EVENT */ OP_TABLE_ENTRY (AML_EVENT_OP, 0, 0, 0), /* EXTENDEDIO */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* EXTENDEDMEMORY */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* EXTENDEDSPACE */ OP_TABLE_ENTRY (AML_RAW_DATA_QWORD, 0, 0, ACPI_BTYPE_INTEGER), /* EXTERNAL */ OP_TABLE_ENTRY (AML_EXTERNAL_OP, 0, 0, 0), /* FATAL */ OP_TABLE_ENTRY (AML_FATAL_OP, 0, 0, 0), /* FIELD */ OP_TABLE_ENTRY (AML_FIELD_OP, 0, OP_AML_PACKAGE, 0), /* FINDSETLEFTBIT */ OP_TABLE_ENTRY (AML_FIND_SET_LEFT_BIT_OP, 0, 0, ACPI_BTYPE_INTEGER), /* FINDSETRIGHTBIT */ OP_TABLE_ENTRY (AML_FIND_SET_RIGHT_BIT_OP, 0, 0, ACPI_BTYPE_INTEGER), /* FIXEDDMA */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* FIXEDIO */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* FLOWCONTROL_HW */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* FLOWCONTROL_NONE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* FLOWCONTROL_SW */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0), /* FROMBCD */ OP_TABLE_ENTRY (AML_FROM_BCD_OP, 0, 0, ACPI_BTYPE_INTEGER), /* FUNCTION */ OP_TABLE_ENTRY (AML_METHOD_OP, 0, OP_AML_PACKAGE, 0), /* GPIOINT */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* GPIOIO */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* CSI2SERIALBUS */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* I2CSERIALBUS */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* I2CSERIALBUSV2 */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* IF */ OP_TABLE_ENTRY (AML_IF_OP, 0, OP_AML_PACKAGE, 0), /* INCLUDE */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* INCLUDE_END */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* INCREMENT */ OP_TABLE_ENTRY (AML_INCREMENT_OP, 0, 0, ACPI_BTYPE_INTEGER), /* INDEX */ OP_TABLE_ENTRY (AML_INDEX_OP, 0, 0, ACPI_BTYPE_REFERENCE_OBJECT), /* INDEXFIELD */ OP_TABLE_ENTRY (AML_INDEX_FIELD_OP, 0, OP_AML_PACKAGE, 0), /* INTEGER */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, ACPI_BTYPE_INTEGER), /* INTERRUPT */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* INTLEVEL_ACTIVEBOTH */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0), /* INTLEVEL_ACTIVEHIGH */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* INTLEVEL_ACTIVELOW */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* INTTYPE_EDGE */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* INTTYPE_LEVEL */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* IO */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* IODECODETYPE_10 */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* IODECODETYPE_16 */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* IORESTRICT_IN */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* IORESTRICT_NONE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* IORESTRICT_OUT */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0), /* IORESTRICT_PRESERVE */ OP_TABLE_ENTRY (AML_BYTE_OP, 3, 0, 0), /* IRQ */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* IRQNOFLAGS */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* LAND */ OP_TABLE_ENTRY (AML_LOGICAL_AND_OP, 0, 0, ACPI_BTYPE_INTEGER), /* LEQUAL */ OP_TABLE_ENTRY (AML_LOGICAL_EQUAL_OP, 0, 0, ACPI_BTYPE_INTEGER), /* LGREATER */ OP_TABLE_ENTRY (AML_LOGICAL_GREATER_OP, 0, 0, ACPI_BTYPE_INTEGER), /* LGREATEREQUAL */ OP_TABLE_ENTRY (AML_LOGICAL_GREATER_EQUAL_OP,0, 0, ACPI_BTYPE_INTEGER), /* LLESS */ OP_TABLE_ENTRY (AML_LOGICAL_LESS_OP, 0, 0, ACPI_BTYPE_INTEGER), /* LLESSEQUAL */ OP_TABLE_ENTRY (AML_LOGICAL_LESS_EQUAL_OP, 0, 0, ACPI_BTYPE_INTEGER), /* LNOT */ OP_TABLE_ENTRY (AML_LOGICAL_NOT_OP, 0, 0, ACPI_BTYPE_INTEGER), /* LNOTEQUAL */ OP_TABLE_ENTRY (AML_LOGICAL_NOT_EQUAL_OP, 0, 0, ACPI_BTYPE_INTEGER), /* LOAD */ OP_TABLE_ENTRY (AML_LOAD_OP, 0, 0, ACPI_BTYPE_INTEGER), /* LOADTABLE */ OP_TABLE_ENTRY (AML_LOAD_TABLE_OP, 0, 0, ACPI_BTYPE_INTEGER), /* LOCAL0 */ OP_TABLE_ENTRY (AML_LOCAL0, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* LOCAL1 */ OP_TABLE_ENTRY (AML_LOCAL1, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* LOCAL2 */ OP_TABLE_ENTRY (AML_LOCAL2, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* LOCAL3 */ OP_TABLE_ENTRY (AML_LOCAL3, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* LOCAL4 */ OP_TABLE_ENTRY (AML_LOCAL4, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* LOCAL5 */ OP_TABLE_ENTRY (AML_LOCAL5, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* LOCAL6 */ OP_TABLE_ENTRY (AML_LOCAL6, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* LOCAL7 */ OP_TABLE_ENTRY (AML_LOCAL7, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* LOCKRULE_LOCK */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_LOCK_ALWAYS, 0, 0), /* LOCKRULE_NOLOCK */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_LOCK_NEVER, 0, 0), /* LOR */ OP_TABLE_ENTRY (AML_LOGICAL_OR_OP, 0, 0, ACPI_BTYPE_INTEGER), /* MATCH */ OP_TABLE_ENTRY (AML_MATCH_OP, 0, 0, ACPI_BTYPE_INTEGER), /* MATCHTYPE_MEQ */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, MATCH_MEQ, 0, ACPI_BTYPE_INTEGER), /* MATCHTYPE_MGE */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, MATCH_MGE, 0, ACPI_BTYPE_INTEGER), /* MATCHTYPE_MGT */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, MATCH_MGT, 0, ACPI_BTYPE_INTEGER), /* MATCHTYPE_MLE */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, MATCH_MLE, 0, ACPI_BTYPE_INTEGER), /* MATCHTYPE_MLT */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, MATCH_MLT, 0, ACPI_BTYPE_INTEGER), /* MATCHTYPE_MTR */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, MATCH_MTR, 0, ACPI_BTYPE_INTEGER), /* MAXTYPE_FIXED */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* MAXTYPE_NOTFIXED */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* MEMORY24 */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* MEMORY32 */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* MEMORY32FIXED */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* MEMTYPE_CACHEABLE */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* MEMTYPE_NONCACHEABLE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* MEMTYPE_PREFETCHABLE */ OP_TABLE_ENTRY (AML_BYTE_OP, 3, 0, 0), /* MEMTYPE_WRITECOMBINING */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0), /* METHOD */ OP_TABLE_ENTRY (AML_METHOD_OP, 0, OP_AML_PACKAGE, 0), /* METHODCALL */ OP_TABLE_ENTRY (AML_INT_METHODCALL_OP, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS), /* MID */ OP_TABLE_ENTRY (AML_MID_OP, 0, 0, ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER), /* MINTYPE_FIXED */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* MINTYPE_NOTFIXED */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* MOD */ OP_TABLE_ENTRY (AML_MOD_OP, 0, 0, ACPI_BTYPE_INTEGER), /* MULTIPLY */ OP_TABLE_ENTRY (AML_MULTIPLY_OP, 0, 0, ACPI_BTYPE_INTEGER), /* MUTEX */ OP_TABLE_ENTRY (AML_MUTEX_OP, 0, 0, 0), /* NAME */ OP_TABLE_ENTRY (AML_NAME_OP, 0, 0, 0), /* NAMESEG */ OP_TABLE_ENTRY (AML_INT_NAMEPATH_OP, 0, 0, 0), /* NAMESTRING */ OP_TABLE_ENTRY (AML_INT_NAMEPATH_OP, 0, 0, 0), /* NAND */ OP_TABLE_ENTRY (AML_BIT_NAND_OP, 0, 0, ACPI_BTYPE_INTEGER), /* NOOP */ OP_TABLE_ENTRY (AML_NOOP_OP, 0, 0, 0), /* NOR */ OP_TABLE_ENTRY (AML_BIT_NOR_OP, 0, 0, ACPI_BTYPE_INTEGER), /* NOT */ OP_TABLE_ENTRY (AML_BIT_NOT_OP, 0, 0, ACPI_BTYPE_INTEGER), /* NOTIFY */ OP_TABLE_ENTRY (AML_NOTIFY_OP, 0, 0, 0), /* OBJECTTYPE */ OP_TABLE_ENTRY (AML_OBJECT_TYPE_OP, 0, 0, ACPI_BTYPE_INTEGER), /* OBJECTTYPE_BFF */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_BUFFER_FIELD, 0, 0), /* OBJECTTYPE_BUF */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_BUFFER, 0, 0), /* OBJECTTYPE_DDB */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_DDB_HANDLE, 0, 0), /* OBJECTTYPE_DEV */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_DEVICE, 0, 0), /* OBJECTTYPE_EVT */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_EVENT, 0, 0), /* OBJECTTYPE_FLD */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_FIELD_UNIT, 0, 0), /* OBJECTTYPE_INT */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_INTEGER, 0, 0), /* OBJECTTYPE_MTH */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_METHOD, 0, 0), /* OBJECTTYPE_MTX */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_MUTEX, 0, 0), /* OBJECTTYPE_OPR */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_REGION, 0, 0), /* OBJECTTYPE_PKG */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_PACKAGE, 0, 0), /* OBJECTTYPE_POW */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_POWER, 0, 0), /* OBJECTTYPE_PRO */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_PROCESSOR, 0, 0), /* OBJECTTYPE_STR */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_STRING, 0, 0), /* OBJECTTYPE_THZ */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_THERMAL, 0, 0), /* OBJECTTYPE_UNK */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_TYPE_ANY, 0, 0), /* OFFSET */ OP_TABLE_ENTRY (AML_INT_RESERVEDFIELD_OP, 0, 0, 0), /* ONE */ OP_TABLE_ENTRY (AML_ONE_OP, 0, 0, ACPI_BTYPE_INTEGER), /* ONES */ OP_TABLE_ENTRY (AML_ONES_OP, 0, 0, ACPI_BTYPE_INTEGER), /* OPERATIONREGION */ OP_TABLE_ENTRY (AML_REGION_OP, 0, 0, 0), /* OR */ OP_TABLE_ENTRY (AML_BIT_OR_OP, 0, 0, ACPI_BTYPE_INTEGER), /* PACKAGE */ OP_TABLE_ENTRY (AML_PACKAGE_OP, 0, OP_AML_PACKAGE, ACPI_BTYPE_PACKAGE), /* PACKAGEP_LENGTH */ OP_TABLE_ENTRY (AML_PACKAGE_LENGTH, 0, OP_AML_PACKAGE, 0), /* PARITYTYPE_EVEN */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* PARITYTYPE_MARK */ OP_TABLE_ENTRY (AML_BYTE_OP, 3, 0, 0), /* PARITYTYPE_NONE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* PARITYTYPE_ODD */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0), /* PARITYTYPE_SPACE */ OP_TABLE_ENTRY (AML_BYTE_OP, 4, 0, 0), /* PINCONFIG */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* PINFUNCTION */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* PINGROUP */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* PINGROUPCONFIG */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* PINGROUPFUNCTION */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* PIN_NOPULL */ OP_TABLE_ENTRY (AML_BYTE_OP, 3, 0, 0), /* PIN_PULLDEFAULT */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* PIN_PULLDOWN */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0), /* PIN_PULLUP */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* CLOCKINPUT */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* CLOCK_HZ */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* CLOCK_KHZ */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* CLOCK_MHZ */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0), /* CLOCK_FIXED */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* CLOCK_VARIABLE */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* POWERRESOURCE */ OP_TABLE_ENTRY (AML_POWER_RESOURCE_OP, 0, OP_AML_PACKAGE, 0), /* PROCESSOR */ OP_TABLE_ENTRY (AML_PROCESSOR_OP, 0, OP_AML_PACKAGE, 0), /* QWORDCONST */ OP_TABLE_ENTRY (AML_RAW_DATA_QWORD, 0, 0, ACPI_BTYPE_INTEGER), /* QWORDIO */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* QWORDMEMORY */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* QWORDSPACE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* RANGE_TYPE_ENTIRE */ OP_TABLE_ENTRY (AML_BYTE_OP, 3, 0, 0), /* RANGE_TYPE_ISAONLY */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0), /* RANGE_TYPE_NONISAONLY */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* RAW_DATA */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* READWRITETYPE_BOTH */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* READWRITETYPE_READONLY */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* REFOF */ OP_TABLE_ENTRY (AML_REF_OF_OP, 0, 0, ACPI_BTYPE_REFERENCE_OBJECT), /* REGIONSPACE_CMOS */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_CMOS, 0, 0), /* REGIONSPACE_EC */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_EC, 0, 0), /* REGIONSPACE_FFIXEDHW */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_FIXED_HARDWARE, 0, 0), /* REGIONSPACE_GPIO */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_GPIO, 0, 0), /* REGIONSPACE_GSBUS */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_GSBUS, 0, 0), /* REGIONSPACE_IO */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_SYSTEM_IO, 0, 0), /* REGIONSPACE_IPMI */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_IPMI, 0, 0), /* REGIONSPACE_MEM */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_SYSTEM_MEMORY, 0, 0), /* REGIONSPACE_PCC */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_PLATFORM_COMM, 0, 0), /* REGIONSPACE_PCI */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_PCI_CONFIG, 0, 0), /* REGIONSPACE_PCIBAR */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_PCI_BAR_TARGET, 0, 0), /* REGIONSPACE_PRM */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_PLATFORM_RT, 0, 0), /* REGIONSPACE_SMBUS */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_SMBUS, 0, 0), /* REGISTER */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* RELEASE */ OP_TABLE_ENTRY (AML_RELEASE_OP, 0, 0, 0), /* RESERVED_BYTES */ OP_TABLE_ENTRY (AML_INT_RESERVEDFIELD_OP, 0, 0, 0), /* RESET */ OP_TABLE_ENTRY (AML_RESET_OP, 0, 0, 0), /* RESOURCETEMPLATE */ OP_TABLE_ENTRY (AML_BUFFER_OP, 0, 0, ACPI_BTYPE_BUFFER), /* RESOURCETYPE_CONSUMER */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* RESOURCETYPE_PRODUCER */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* RETURN */ OP_TABLE_ENTRY (AML_RETURN_OP, 0, 0, 0), /* REVISION */ OP_TABLE_ENTRY (AML_REVISION_OP, 0, 0, ACPI_BTYPE_INTEGER), /* SCOPE */ OP_TABLE_ENTRY (AML_SCOPE_OP, 0, OP_AML_PACKAGE, 0), /* SERIALIZERULE_NOTSERIAL */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* SERIALIZERULE_SERIAL */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* SHARETYPE_EXCLUSIVE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* SHARETYPE_EXCLUSIVEWAKE */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0), /* SHARETYPE_SHARED */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* SHARETYPE_SHAREDWAKE */ OP_TABLE_ENTRY (AML_BYTE_OP, 3, 0, 0), /* SHIFTLEFT */ OP_TABLE_ENTRY (AML_SHIFT_LEFT_OP, 0, 0, ACPI_BTYPE_INTEGER), /* SHIFTRIGHT */ OP_TABLE_ENTRY (AML_SHIFT_RIGHT_OP, 0, 0, ACPI_BTYPE_INTEGER), /* SIGNAL */ OP_TABLE_ENTRY (AML_SIGNAL_OP, 0, 0, 0), /* SIZEOF */ OP_TABLE_ENTRY (AML_SIZE_OF_OP, 0, 0, ACPI_BTYPE_INTEGER), /* SLAVEMODE_CONTROLLERINIT */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* SLAVEMODE_DEVICEINIT */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* SLEEP */ OP_TABLE_ENTRY (AML_SLEEP_OP, 0, 0, 0), /* SPISERIALBUS */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* SPISERIALBUSV2 */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* STALL */ OP_TABLE_ENTRY (AML_STALL_OP, 0, 0, 0), /* STARTDEPENDENTFN */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* STARTDEPENDENTFN_NOPRI */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* STOPBITS_ONE */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* STOPBITS_ONEPLUSHALF */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0), /* STOPBITS_TWO */ OP_TABLE_ENTRY (AML_BYTE_OP, 3, 0, 0), /* STOPBITS_ZERO */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* STORE */ OP_TABLE_ENTRY (AML_STORE_OP, 0, 0, ACPI_BTYPE_DATA_REFERENCE), /* STRING_LITERAL */ OP_TABLE_ENTRY (AML_STRING_OP, 0, 0, ACPI_BTYPE_STRING), /* SUBTRACT */ OP_TABLE_ENTRY (AML_SUBTRACT_OP, 0, 0, ACPI_BTYPE_INTEGER), /* SWITCH */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* THERMALZONE */ OP_TABLE_ENTRY (AML_THERMAL_ZONE_OP, 0, OP_AML_PACKAGE, 0), /* TIMER */ OP_TABLE_ENTRY (AML_TIMER_OP, 0, 0, ACPI_BTYPE_INTEGER), /* TOBCD */ OP_TABLE_ENTRY (AML_TO_BCD_OP, 0, 0, ACPI_BTYPE_INTEGER), /* TOBUFFER */ OP_TABLE_ENTRY (AML_TO_BUFFER_OP, 0, 0, ACPI_BTYPE_BUFFER), /* TODECIMALSTRING */ OP_TABLE_ENTRY (AML_TO_DECIMAL_STRING_OP, 0, 0, ACPI_BTYPE_STRING), /* TOHEXSTRING */ OP_TABLE_ENTRY (AML_TO_HEX_STRING_OP, 0, 0, ACPI_BTYPE_STRING), /* TOINTEGER */ OP_TABLE_ENTRY (AML_TO_INTEGER_OP, 0, 0, ACPI_BTYPE_INTEGER), /* TOSTRING */ OP_TABLE_ENTRY (AML_TO_STRING_OP, 0, 0, ACPI_BTYPE_STRING), /* TOUUID */ OP_TABLE_ENTRY (AML_DWORD_OP, 0, OP_AML_PACKAGE, ACPI_BTYPE_INTEGER), /* TRANSLATIONTYPE_DENSE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* TRANSLATIONTYPE_SPARSE */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* TYPE_STATIC */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* TYPE_TRANSLATION */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* UART_SERIALBUS */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* UART_SERIALBUSV2 */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0), /* UNICODE */ OP_TABLE_ENTRY (AML_BUFFER_OP, 0, OP_AML_PACKAGE, ACPI_BTYPE_BUFFER), /* UNLOAD */ OP_TABLE_ENTRY (AML_UNLOAD_OP, 0, 0, 0), /* UPDATERULE_ONES */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_UPDATE_WRITE_AS_ONES, 0, 0), /* UPDATERULE_PRESERVE */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_UPDATE_PRESERVE, 0, 0), /* UPDATERULE_ZEROS */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_UPDATE_WRITE_AS_ZEROS,0, 0), /* VARIABLE_PACKAGE */ OP_TABLE_ENTRY (AML_VARIABLE_PACKAGE_OP, 0, OP_AML_PACKAGE, ACPI_BTYPE_PACKAGE), /* VENDORLONG */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* VENDORSHORT */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* WAIT */ OP_TABLE_ENTRY (AML_WAIT_OP, 0, 0, ACPI_BTYPE_INTEGER), /* WHILE */ OP_TABLE_ENTRY (AML_WHILE_OP, 0, OP_AML_PACKAGE, 0), /* WIREMODE_FOUR */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* WIREMODE_THREE */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* WORDBUSNUMBER */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* WORDCONST */ OP_TABLE_ENTRY (AML_RAW_DATA_WORD, 0, 0, ACPI_BTYPE_INTEGER), /* WORDIO */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* WORDSPACE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* XFERSIZE_8 */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* XFERSIZE_16 */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* XFERSIZE_32 */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* XFERSIZE_64 */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* XFERSIZE_128 */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* XFERSIZE_256 */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* XFERTYPE_8 */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* XFERTYPE_8_16 */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0), /* XFERTYPE_16 */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0), /* XOR */ OP_TABLE_ENTRY (AML_BIT_XOR_OP, 0, 0, ACPI_BTYPE_INTEGER), /* ZERO */ OP_TABLE_ENTRY (AML_ZERO_OP, 0, 0, ACPI_BTYPE_INTEGER), /* TOPLD */ OP_TABLE_ENTRY (AML_DWORD_OP, 0, OP_AML_PACKAGE, ACPI_BTYPE_INTEGER), /* XFERSIZE_128 */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* REVISION */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* IGNORECOLOR */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* RED */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* GREEN */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* BLUE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* WIDTH */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* HEIGHT */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* USERVISIBLE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* DOCK */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* LID */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* PANEL */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* VERTICALPOSITION */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* HORIZONTALPOSITION */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* SHAPE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* GROUPORIENTATION */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* GROUPTOKEN */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* GROUPPOSITION */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* BAY */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* EJECTABLE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* EJECTREQUIRED */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* CABINETNUMBER */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* CARDCAGENUMBER */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* REFERENCE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* ROTATION */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* ORDER */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* RESERVED */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* VERTICALOFFSET */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* HORIZONTALOFFSET */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0), /* PRINTF */ OP_TABLE_ENTRY (AML_STORE_OP, 0, 0, ACPI_BTYPE_DATA_REFERENCE), /* FPRINTF */ OP_TABLE_ENTRY (AML_STORE_OP, 0, 0, ACPI_BTYPE_DATA_REFERENCE), /* ASLCODE */ OP_TABLE_ENTRY (0, 0, 0, 0) /*! [End] no source code translation !*/ }; src/acpica/source/compiler/aslmapenter.c000066400000000000000000000376231465205512700207000ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslmapenter - Build resource descriptor/device maps * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acapps.h" #include "aslcompiler.h" /* This module used for application-level code only */ #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslmapenter") /* Local prototypes */ static ACPI_GPIO_INFO * MpCreateGpioInfo ( UINT16 PinNumber, char *DeviceName); static ACPI_SERIAL_INFO * MpCreateSerialInfo ( char *DeviceName, UINT16 Address); /******************************************************************************* * * FUNCTION: MpSaveGpioInfo * * PARAMETERS: Resource - GPIO resource descriptor * PinCount - From GPIO descriptor * PinList - From GPIO descriptor * DeviceName - The "ResourceSource" name * * RETURN: None * * DESCRIPTION: External Interface. * Save GPIO resource descriptor information. * Creates new GPIO info blocks, one for each pin defined by the * GPIO descriptor. * ******************************************************************************/ void MpSaveGpioInfo ( ACPI_PARSE_OBJECT *Op, AML_RESOURCE *Resource, UINT32 PinCount, UINT16 *PinList, char *DeviceName) { ACPI_GPIO_INFO *Info; UINT32 i; /* Mapfile option enabled? */ if (!AslGbl_MapfileFlag) { return; } /* Create an info block for each pin defined in the descriptor */ for (i = 0; i < PinCount; i++) { Info = MpCreateGpioInfo (PinList[i], DeviceName); Info->Op = Op; Info->DeviceName = DeviceName; Info->PinCount = PinCount; Info->PinIndex = i; Info->PinNumber = PinList[i]; Info->Type = Resource->Gpio.ConnectionType; Info->Direction = (UINT8) (Resource->Gpio.IntFlags & 0x0003); /* _IOR, for IO descriptor */ Info->Polarity = (UINT8) ((Resource->Gpio.IntFlags >> 1) & 0x0003); /* _POL, for INT descriptor */ } } /******************************************************************************* * * FUNCTION: MpSaveSerialInfo * * PARAMETERS: Resource - A Serial resource descriptor * DeviceName - The "ResourceSource" name. * * RETURN: None * * DESCRIPTION: External Interface. * Save serial resource descriptor information. * Creates a new serial info block. * ******************************************************************************/ void MpSaveSerialInfo ( ACPI_PARSE_OBJECT *Op, AML_RESOURCE *Resource, char *DeviceName) { ACPI_SERIAL_INFO *Info; UINT16 Address; UINT32 Speed; /* Mapfile option enabled? */ if (!AslGbl_MapfileFlag) { return; } if (Resource->DescriptorType != ACPI_RESOURCE_NAME_SERIAL_BUS) { return; } /* Extract address and speed from the resource descriptor */ switch (Resource->CommonSerialBus.Type) { case AML_RESOURCE_I2C_SERIALBUSTYPE: Address = Resource->I2cSerialBus.SlaveAddress; Speed = Resource->I2cSerialBus.ConnectionSpeed; break; case AML_RESOURCE_SPI_SERIALBUSTYPE: Address = Resource->SpiSerialBus.DeviceSelection; Speed = Resource->SpiSerialBus.ConnectionSpeed; break; case AML_RESOURCE_UART_SERIALBUSTYPE: Address = 0; Speed = Resource->UartSerialBus.DefaultBaudRate; break; default: /* Invalid bus subtype */ return; } Info = MpCreateSerialInfo (DeviceName, Address); Info->Op = Op; Info->DeviceName = DeviceName; Info->Resource = Resource; Info->Address = Address; Info->Speed = Speed; } /******************************************************************************* * * FUNCTION: MpCreateGpioInfo * * PARAMETERS: PinNumber - GPIO pin number * DeviceName - The "ResourceSource" name * * RETURN: New GPIO info block. * * DESCRIPTION: Create a new GPIO info block and place it on the global list. * The list is sorted by GPIO device names first, and pin numbers * secondarily. * ******************************************************************************/ static ACPI_GPIO_INFO * MpCreateGpioInfo ( UINT16 PinNumber, char *DeviceName) { ACPI_GPIO_INFO *Info; ACPI_GPIO_INFO *NextGpio; ACPI_GPIO_INFO *PrevGpio; char *Buffer; /* * Allocate a new info block and insert it into the global GPIO list * sorted by both source device name and then the pin number. There is * one block per pin. */ Buffer = UtLocalCacheCalloc (sizeof (ACPI_GPIO_INFO)); Info = ACPI_CAST_PTR (ACPI_GPIO_INFO, Buffer); NextGpio = AslGbl_GpioList; PrevGpio = NULL; if (!AslGbl_GpioList) { AslGbl_GpioList = Info; Info->Next = NULL; return (Info); } /* Sort on source DeviceName first */ while (NextGpio && (strcmp (DeviceName, NextGpio->DeviceName) > 0)) { PrevGpio = NextGpio; NextGpio = NextGpio->Next; } /* Now sort on the PinNumber */ while (NextGpio && (NextGpio->PinNumber < PinNumber) && !strcmp (DeviceName, NextGpio->DeviceName)) { PrevGpio = NextGpio; NextGpio = NextGpio->Next; } /* Finish the list insertion */ if (PrevGpio) { PrevGpio->Next = Info; } else { AslGbl_GpioList = Info; } Info->Next = NextGpio; return (Info); } /******************************************************************************* * * FUNCTION: MpCreateSerialInfo * * PARAMETERS: DeviceName - The "ResourceSource" name. * Address - Physical address for the device * * RETURN: New Serial info block. * * DESCRIPTION: Create a new Serial info block and place it on the global list. * The list is sorted by Serial device names first, and addresses * secondarily. * ******************************************************************************/ static ACPI_SERIAL_INFO * MpCreateSerialInfo ( char *DeviceName, UINT16 Address) { ACPI_SERIAL_INFO *Info; ACPI_SERIAL_INFO *NextSerial; ACPI_SERIAL_INFO *PrevSerial; char *Buffer; /* * Allocate a new info block and insert it into the global Serial list * sorted by both source device name and then the address. */ Buffer = UtLocalCacheCalloc (sizeof (ACPI_SERIAL_INFO)); Info = ACPI_CAST_PTR (ACPI_SERIAL_INFO, Buffer); NextSerial = AslGbl_SerialList; PrevSerial = NULL; if (!AslGbl_SerialList) { AslGbl_SerialList = Info; Info->Next = NULL; return (Info); } /* Sort on source DeviceName */ while (NextSerial && (strcmp (DeviceName, NextSerial->DeviceName) > 0)) { PrevSerial = NextSerial; NextSerial = NextSerial->Next; } /* Now sort on the Address */ while (NextSerial && (NextSerial->Address < Address) && !strcmp (DeviceName, NextSerial->DeviceName)) { PrevSerial = NextSerial; NextSerial = NextSerial->Next; } /* Finish the list insertion */ if (PrevSerial) { PrevSerial->Next = Info; } else { AslGbl_SerialList = Info; } Info->Next = NextSerial; return (Info); } src/acpica/source/compiler/aslmapoutput.c000066400000000000000000000570741465205512700211250ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslmapoutput - Output/emit the resource descriptor/device maps * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acapps.h" #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acinterp.h" #include "acparser.h" #include "acnamesp.h" #include "amlcode.h" /* This module used for application-level code only */ #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslmapoutput") /* Local prototypes */ static void MpEmitGpioInfo ( void); static void MpEmitSerialInfo ( void); static void MpEmitDeviceTree ( void); static ACPI_STATUS MpEmitOneDevice ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); static void MpXrefDevices ( ACPI_GPIO_INFO *Info); static ACPI_STATUS MpNamespaceXrefBegin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); /* Strings used to decode flag bits */ const char *DirectionDecode[] = { "Both I/O ", "InputOnly ", "OutputOnly ", "Preserve " }; const char *PolarityDecode[] = { "ActiveHigh", "ActiveLow ", "ActiveBoth", "Reserved " }; /******************************************************************************* * * FUNCTION: MpEmitMappingInfo * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: External interface. * Map file has already been opened. Emit all of the collected * hardware mapping information. Includes: GPIO information, * Serial information, and a dump of the entire ACPI device tree. * ******************************************************************************/ void MpEmitMappingInfo ( void) { /* Mapfile option enabled? */ if (!AslGbl_MapfileFlag) { return; } if (!AslGbl_GpioList) { FlPrintFile (ASL_FILE_MAP_OUTPUT, "\nNo GPIO devices found\n"); } if (!AslGbl_SerialList) { FlPrintFile (ASL_FILE_MAP_OUTPUT, "\nNo Serial devices found (I2C/SPI/UART)\n"); } if (!AslGbl_GpioList && !AslGbl_SerialList) { return; } /* Headers */ FlPrintFile (ASL_FILE_MAP_OUTPUT, "\nResource Descriptor Connectivity Map\n"); FlPrintFile (ASL_FILE_MAP_OUTPUT, "------------------------------------\n"); /* Emit GPIO and Serial descriptors, then entire ACPI device tree */ MpEmitGpioInfo (); MpEmitSerialInfo (); MpEmitDeviceTree (); /* Clear the lists - no need to free memory here */ AslGbl_SerialList = NULL; AslGbl_GpioList = NULL; } /******************************************************************************* * * FUNCTION: MpEmitGpioInfo * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Emit the info about all GPIO devices found during the * compile or disassembly. * ******************************************************************************/ static void MpEmitGpioInfo ( void) { ACPI_GPIO_INFO *Info; char *Type; char *PrevDeviceName = NULL; const char *Direction; const char *Polarity; char *ParentPathname; const char *Description; char *HidString; const AH_DEVICE_ID *HidInfo; /* Walk the GPIO descriptor list */ Info = AslGbl_GpioList; while (Info) { HidString = MpGetHidViaNamestring (Info->DeviceName); /* Print header info for the controller itself */ if (!PrevDeviceName || strcmp (PrevDeviceName, Info->DeviceName)) { FlPrintFile (ASL_FILE_MAP_OUTPUT, "\n\nGPIO Controller: %-8s %-28s", HidString, Info->DeviceName); HidInfo = AcpiAhMatchHardwareId (HidString); if (HidInfo) { FlPrintFile (ASL_FILE_MAP_OUTPUT, " // %s", HidInfo->Description); } FlPrintFile (ASL_FILE_MAP_OUTPUT, "\n\nPin Type Direction Polarity" " Dest _HID Destination\n"); } PrevDeviceName = Info->DeviceName; /* Setup various strings based upon the type (GpioInt or GpioIo) */ switch (Info->Type) { case AML_RESOURCE_GPIO_TYPE_INT: Type = "GpioInt"; Direction = "-Interrupt-"; Polarity = PolarityDecode[Info->Polarity]; break; case AML_RESOURCE_GPIO_TYPE_IO: Type = "GpioIo "; Direction = DirectionDecode[Info->Direction]; Polarity = " "; break; default: continue; } /* Emit the GPIO info */ FlPrintFile (ASL_FILE_MAP_OUTPUT, "%4.4X %s %s %s ", Info->PinNumber, Type, Direction, Polarity); ParentPathname = NULL; HidString = MpGetConnectionInfo (Info->Op, Info->PinIndex, &Info->TargetNode, &ParentPathname); if (HidString) { /* * This is a Connection() field * Attempt to find all references to the field. */ FlPrintFile (ASL_FILE_MAP_OUTPUT, "%8s %-28s", HidString, ParentPathname); MpXrefDevices (Info); } else { /* * For Devices, attempt to get the _HID description string. * Failing that (many _HIDs are not recognized), attempt to * get the _DDN description string. */ HidString = MpGetParentDeviceHid (Info->Op, &Info->TargetNode, &ParentPathname); FlPrintFile (ASL_FILE_MAP_OUTPUT, "%8s %-28s", HidString, ParentPathname); /* Get the _HID description or _DDN string */ HidInfo = AcpiAhMatchHardwareId (HidString); if (HidInfo) { FlPrintFile (ASL_FILE_MAP_OUTPUT, " // %s", HidInfo->Description); } else if ((Description = MpGetDdnValue (ParentPathname))) { FlPrintFile (ASL_FILE_MAP_OUTPUT, " // %s (_DDN)", Description); } } FlPrintFile (ASL_FILE_MAP_OUTPUT, "\n"); ACPI_FREE (ParentPathname); Info = Info->Next; } } /******************************************************************************* * * FUNCTION: MpEmitSerialInfo * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Emit the info about all Serial devices found during the * compile or disassembly. * ******************************************************************************/ static void MpEmitSerialInfo ( void) { ACPI_SERIAL_INFO *Info; char *Type; char *ParentPathname; char *PrevDeviceName = NULL; char *HidString; const AH_DEVICE_ID *HidInfo; const char *Description; AML_RESOURCE *Resource; /* Walk the constructed serial descriptor list */ Info = AslGbl_SerialList; while (Info) { Resource = Info->Resource; switch (Resource->CommonSerialBus.Type) { case AML_RESOURCE_I2C_SERIALBUSTYPE: Type = "I2C "; break; case AML_RESOURCE_SPI_SERIALBUSTYPE: Type = "SPI "; break; case AML_RESOURCE_UART_SERIALBUSTYPE: Type = "UART"; break; default: Type = "UNKN"; break; } HidString = MpGetHidViaNamestring (Info->DeviceName); /* Print header info for the controller itself */ if (!PrevDeviceName || strcmp (PrevDeviceName, Info->DeviceName)) { FlPrintFile (ASL_FILE_MAP_OUTPUT, "\n\n%s Controller: ", Type); FlPrintFile (ASL_FILE_MAP_OUTPUT, "%-8s %-28s", HidString, Info->DeviceName); HidInfo = AcpiAhMatchHardwareId (HidString); if (HidInfo) { FlPrintFile (ASL_FILE_MAP_OUTPUT, " // %s", HidInfo->Description); } FlPrintFile (ASL_FILE_MAP_OUTPUT, "\n\n"); FlPrintFile (ASL_FILE_MAP_OUTPUT, "Type Address Speed Dest _HID Destination\n"); } PrevDeviceName = Info->DeviceName; FlPrintFile (ASL_FILE_MAP_OUTPUT, "%s %4.4X %8.8X ", Type, Info->Address, Info->Speed); ParentPathname = NULL; HidString = MpGetConnectionInfo (Info->Op, 0, &Info->TargetNode, &ParentPathname); if (HidString) { /* * This is a Connection() field * Attempt to find all references to the field. */ FlPrintFile (ASL_FILE_MAP_OUTPUT, "%8s %-28s", HidString, ParentPathname); } else { /* Normal resource template */ HidString = MpGetParentDeviceHid (Info->Op, &Info->TargetNode, &ParentPathname); FlPrintFile (ASL_FILE_MAP_OUTPUT, "%8s %-28s", HidString, ParentPathname); /* Get the _HID description or _DDN string */ HidInfo = AcpiAhMatchHardwareId (HidString); if (HidInfo) { FlPrintFile (ASL_FILE_MAP_OUTPUT, " // %s", HidInfo->Description); } else if ((Description = MpGetDdnValue (ParentPathname))) { FlPrintFile (ASL_FILE_MAP_OUTPUT, " // %s (_DDN)", Description); } } FlPrintFile (ASL_FILE_MAP_OUTPUT, "\n"); ACPI_FREE (ParentPathname); Info = Info->Next; } } /******************************************************************************* * * FUNCTION: MpEmitDeviceTree * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Emit information about all devices within the ACPI namespace. * ******************************************************************************/ static void MpEmitDeviceTree ( void) { FlPrintFile (ASL_FILE_MAP_OUTPUT, "\n\nACPI Device Tree\n"); FlPrintFile (ASL_FILE_MAP_OUTPUT, "----------------\n\n"); FlPrintFile (ASL_FILE_MAP_OUTPUT, "Device Pathname " "_HID Description\n\n"); /* Walk the namespace from the root */ (void) AcpiNsWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, FALSE, MpEmitOneDevice, NULL, NULL, NULL); } /******************************************************************************* * * FUNCTION: MpEmitOneDevice * * PARAMETERS: ACPI_NAMESPACE_WALK callback * * RETURN: Status * * DESCRIPTION: Emit information about one ACPI device in the namespace. Used * during dump of all device objects within the namespace. * ******************************************************************************/ static ACPI_STATUS MpEmitOneDevice ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { char *DevicePathname; char *DdnString; char *HidString; const AH_DEVICE_ID *HidInfo; /* Device pathname */ DevicePathname = AcpiNsGetExternalPathname ( ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle)); FlPrintFile (ASL_FILE_MAP_OUTPUT, "%-32s", DevicePathname); /* _HID or _DDN */ HidString = MpGetHidValue ( ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle)); FlPrintFile (ASL_FILE_MAP_OUTPUT, "%8s", HidString); HidInfo = AcpiAhMatchHardwareId (HidString); if (HidInfo) { FlPrintFile (ASL_FILE_MAP_OUTPUT, " // %s", HidInfo->Description); } else if ((DdnString = MpGetDdnValue (DevicePathname))) { FlPrintFile (ASL_FILE_MAP_OUTPUT, " // %s (_DDN)", DdnString); } FlPrintFile (ASL_FILE_MAP_OUTPUT, "\n"); ACPI_FREE (DevicePathname); return (AE_OK); } /******************************************************************************* * * FUNCTION: MpXrefDevices * * PARAMETERS: Info - A GPIO Info block * * RETURN: None * * DESCRIPTION: Cross-reference the parse tree and find all references to the * specified GPIO device. * ******************************************************************************/ static void MpXrefDevices ( ACPI_GPIO_INFO *Info) { /* Walk the entire parse tree */ TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD, MpNamespaceXrefBegin, NULL, Info); if (!Info->References) { FlPrintFile (ASL_FILE_MAP_OUTPUT, " // **** No references in table"); } } /******************************************************************************* * * FUNCTION: MpNamespaceXrefBegin * * PARAMETERS: WALK_PARSE_TREE callback * * RETURN: Status * * DESCRIPTION: Walk parse tree callback used to cross-reference GPIO pins. * ******************************************************************************/ static ACPI_STATUS MpNamespaceXrefBegin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_GPIO_INFO *Info = ACPI_CAST_PTR (ACPI_GPIO_INFO, Context); const ACPI_OPCODE_INFO *OpInfo; char *DevicePathname; ACPI_PARSE_OBJECT *ParentOp; char *HidString; ACPI_FUNCTION_TRACE_PTR (MpNamespaceXrefBegin, Op); /* * If this node is the actual declaration of a name * [such as the XXXX name in "Method (XXXX)"], * we are not interested in it here. We only care about names that * are references to other objects within the namespace and the * parent objects of name declarations */ if (Op->Asl.CompileFlags & OP_IS_NAME_DECLARATION) { return (AE_OK); } /* We are only interested in opcodes that have an associated name */ OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); if ((OpInfo->Flags & AML_NAMED) || (OpInfo->Flags & AML_CREATE)) { return (AE_OK); } if ((Op->Asl.ParseOpcode != PARSEOP_NAMESTRING) && (Op->Asl.ParseOpcode != PARSEOP_NAMESEG) && (Op->Asl.ParseOpcode != PARSEOP_METHODCALL)) { return (AE_OK); } if (!Op->Asl.Node) { return (AE_OK); } ParentOp = Op->Asl.Parent; if (ParentOp->Asl.ParseOpcode == PARSEOP_FIELD) { return (AE_OK); } if (Op->Asl.Node == Info->TargetNode) { while (ParentOp && (!ParentOp->Asl.Node)) { ParentOp = ParentOp->Asl.Parent; } if (ParentOp) { DevicePathname = AcpiNsGetExternalPathname ( ParentOp->Asl.Node); if (!Info->References) { FlPrintFile (ASL_FILE_MAP_OUTPUT, " // References:"); } HidString = MpGetHidViaNamestring (DevicePathname); FlPrintFile (ASL_FILE_MAP_OUTPUT, " %s [%s]", DevicePathname, HidString); Info->References++; ACPI_FREE (DevicePathname); } } return (AE_OK); } src/acpica/source/compiler/aslmaputils.c000066400000000000000000000426071465205512700207210ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslmaputils - Utilities for the resource descriptor/device maps * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acapps.h" #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acinterp.h" #include "acnamesp.h" #include "amlcode.h" /* This module used for application-level code only */ #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslmaputils") /******************************************************************************* * * FUNCTION: MpGetHidFromParseTree * * PARAMETERS: HidNode - Node for a _HID object * * RETURN: An _HID string value. Automatically converts _HID integers * to strings. Never NULL. * * DESCRIPTION: Extract a _HID value from the parse tree, not the namespace. * Used when a fully initialized namespace is not available. * ******************************************************************************/ char * MpGetHidFromParseTree ( ACPI_NAMESPACE_NODE *HidNode) { ACPI_PARSE_OBJECT *Op; ACPI_PARSE_OBJECT *Arg; char *HidString; Op = HidNode->Op; if (!Op) { /* Object is not resolved, probably an External */ return ("Unresolved Symbol - referenced but not defined in this table"); } switch (Op->Asl.ParseOpcode) { case PARSEOP_NAME: Arg = Op->Asl.Child; /* Get the NameSeg/NameString node */ Arg = Arg->Asl.Next; /* First peer is the object to be associated with the name */ switch (Arg->Asl.ParseOpcode) { case PARSEOP_STRING_LITERAL: return (Arg->Asl.Value.String); case PARSEOP_INTEGER: /* Convert EISAID to a string */ HidString = UtLocalCacheCalloc (ACPI_EISAID_STRING_SIZE); AcpiExEisaIdToString (HidString, Arg->Asl.Value.Integer); return (HidString); default: return ("UNKNOWN"); } default: return ("-No HID-"); } } /******************************************************************************* * * FUNCTION: MpGetHidValue * * PARAMETERS: DeviceNode - Node for parent device * * RETURN: An _HID string value. Automatically converts _HID integers * to strings. Never NULL. * * DESCRIPTION: Extract _HID value from within a device scope. Does not * actually execute a method, just gets the string or integer * value for the _HID. * ******************************************************************************/ char * MpGetHidValue ( ACPI_NAMESPACE_NODE *DeviceNode) { ACPI_NAMESPACE_NODE *HidNode; char *HidString; ACPI_STATUS Status; Status = AcpiNsGetNode (DeviceNode, METHOD_NAME__HID, ACPI_NS_NO_UPSEARCH, &HidNode); if (ACPI_FAILURE (Status)) { goto ErrorExit; } /* If only partial namespace, get the _HID from the parse tree */ if (!HidNode->Object) { return (MpGetHidFromParseTree (HidNode)); } /* Handle the different _HID flavors */ switch (HidNode->Type) { case ACPI_TYPE_STRING: return (HidNode->Object->String.Pointer); case ACPI_TYPE_INTEGER: /* Convert EISAID to a string */ HidString = UtLocalCacheCalloc (ACPI_EISAID_STRING_SIZE); AcpiExEisaIdToString (HidString, HidNode->Object->Integer.Value); return (HidString); case ACPI_TYPE_METHOD: return ("-Method-"); default: FlPrintFile (ASL_FILE_MAP_OUTPUT, "BAD HID TYPE: %u", HidNode->Type); break; } ErrorExit: return ("-No HID-"); } /******************************************************************************* * * FUNCTION: MpGetHidViaNamestring * * PARAMETERS: DeviceName - Namepath for parent device * * RETURN: _HID string. Never NULL. * * DESCRIPTION: Get a _HID value via a device pathname (instead of just simply * a device node.) * ******************************************************************************/ char * MpGetHidViaNamestring ( char *DeviceName) { ACPI_NAMESPACE_NODE *DeviceNode; ACPI_STATUS Status; Status = AcpiNsGetNode (NULL, DeviceName, ACPI_NS_NO_UPSEARCH, &DeviceNode); if (ACPI_FAILURE (Status)) { goto ErrorExit; } return (MpGetHidValue (DeviceNode)); ErrorExit: return ("-No HID-"); } /******************************************************************************* * * FUNCTION: MpGetParentDeviceHid * * PARAMETERS: Op - Parse Op to be examined * TargetNode - Where the field node is returned * ParentDeviceName - Where the node path is returned * * RETURN: _HID string. Never NULL. * * DESCRIPTION: Find the parent Device or Scope Op, get the full pathname to * the parent, and get the _HID associated with the parent. * ******************************************************************************/ char * MpGetParentDeviceHid ( ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE **TargetNode, char **ParentDeviceName) { ACPI_NAMESPACE_NODE *DeviceNode; /* Find parent Device() or Scope() Op */ while (Op && (Op->Asl.AmlOpcode != AML_DEVICE_OP) && (Op->Asl.AmlOpcode != AML_SCOPE_OP)) { Op = Op->Asl.Parent; } if (!Op) { FlPrintFile (ASL_FILE_MAP_OUTPUT, " No_Parent_Device "); goto ErrorExit; } /* Get the full pathname to the device and the _HID */ DeviceNode = Op->Asl.Node; if (!DeviceNode) { FlPrintFile (ASL_FILE_MAP_OUTPUT, " No_Device_Node "); goto ErrorExit; } *ParentDeviceName = AcpiNsGetExternalPathname (DeviceNode); return (MpGetHidValue (DeviceNode)); ErrorExit: return ("-No HID-"); } /******************************************************************************* * * FUNCTION: MpGetDdnValue * * PARAMETERS: DeviceName - Namepath for parent device * * RETURN: _DDN description string. NULL on failure. * * DESCRIPTION: Execute the _DDN method for the device. * ******************************************************************************/ char * MpGetDdnValue ( char *DeviceName) { ACPI_NAMESPACE_NODE *DeviceNode; ACPI_NAMESPACE_NODE *DdnNode; ACPI_STATUS Status; Status = AcpiNsGetNode (NULL, DeviceName, ACPI_NS_NO_UPSEARCH, &DeviceNode); if (ACPI_FAILURE (Status)) { goto ErrorExit; } Status = AcpiNsGetNode (DeviceNode, METHOD_NAME__DDN, ACPI_NS_NO_UPSEARCH, &DdnNode); if (ACPI_FAILURE (Status)) { goto ErrorExit; } if ((DdnNode->Type != ACPI_TYPE_STRING) || !DdnNode->Object) { goto ErrorExit; } return (DdnNode->Object->String.Pointer); ErrorExit: return (NULL); } /******************************************************************************* * * FUNCTION: MpGetConnectionInfo * * PARAMETERS: Op - Parse Op to be examined * PinIndex - Index into GPIO PinList * TargetNode - Where the field node is returned * TargetName - Where the node path is returned * * RETURN: A substitute _HID string, indicating that the name is actually * a field. NULL if the Op does not refer to a Connection. * * DESCRIPTION: Get the Field Unit that corresponds to the PinIndex after * a Connection() invocation. * ******************************************************************************/ char * MpGetConnectionInfo ( ACPI_PARSE_OBJECT *Op, UINT32 PinIndex, ACPI_NAMESPACE_NODE **TargetNode, char **TargetName) { ACPI_PARSE_OBJECT *NextOp; UINT32 i; /* * Handle Connection() here. Find the next named FieldUnit. * Note: we look at the ParseOpcode for the compiler, look * at the AmlOpcode for the disassembler. */ if ((Op->Asl.AmlOpcode == AML_INT_CONNECTION_OP) || (Op->Asl.ParseOpcode == PARSEOP_CONNECTION)) { /* Find the correct field unit definition */ NextOp = Op; for (i = 0; i <= PinIndex;) { NextOp = NextOp->Asl.Next; while (NextOp && (NextOp->Asl.ParseOpcode != PARSEOP_NAMESEG) && (NextOp->Asl.AmlOpcode != AML_INT_NAMEDFIELD_OP)) { NextOp = NextOp->Asl.Next; } if (!NextOp) { return ("UNKNOWN"); } /* Add length of this field to the current pin index */ if (NextOp->Asl.ParseOpcode == PARSEOP_NAMESEG) { i += (UINT32) NextOp->Asl.Child->Asl.Value.Integer; } else /* AML_INT_NAMEDFIELD_OP */ { i += (UINT32) NextOp->Asl.Value.Integer; } } /* Return the node and pathname for the field unit */ *TargetNode = NextOp->Asl.Node; *TargetName = AcpiNsGetExternalPathname (*TargetNode); return ("-Field-"); } return (NULL); } src/acpica/source/compiler/aslmessages.c000066400000000000000000001030571465205512700206670ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslmessages.c - Compiler error/warning message strings * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslmessages") /* * Strings for message reporting levels, must match error * type string tables in aslmessages.c */ const char *AslErrorLevel [ASL_NUM_REPORT_LEVELS] = { "Optimize", "Remark ", "Warning ", "Warning ", "Warning ", "Error " }; /* All lowercase versions for IDEs */ const char *AslErrorLevelIde [ASL_NUM_REPORT_LEVELS] = { "optimize", "remark ", "warning ", "warning ", "warning ", "error " }; /* * Actual message strings for each compiler message ID. There are currently * three distinct blocks of error messages (so that they can be expanded * individually): * Main ASL compiler * Data Table compiler * Preprocessor * * NOTE1: These tables must match the enum list of message IDs in the file * aslmessages.h exactly. * * NOTE2: With the introduction of the -vw option to disable specific messages, * new messages should only be added to the end of this list, so that values * for existing messages are not disturbed. As important, obsolete messages * cannot be removed from this list, as it will affect the -vw option. */ /* ASL compiler */ const char *AslCompilerMsgs [] = { /* The zeroth message is reserved */ "", /* ASL_MSG_ALIGNMENT */ "Must be a multiple of alignment/granularity value", /* ASL_MSG_ALPHANUMERIC_STRING */ "String must be entirely alphanumeric", /* ASL_MSG_AML_NOT_IMPLEMENTED */ "Opcode is not implemented in compiler AML code generator", /* ASL_MSG_ARG_COUNT_HI */ "Too many arguments", /* ASL_MSG_ARG_COUNT_LO */ "Too few arguments", /* ASL_MSG_ARG_INIT */ "Method argument is not initialized", /* ASL_MSG_BACKWARDS_OFFSET */ "Invalid backwards offset", /* ASL_MSG_BUFFER_LENGTH */ "Effective AML buffer length is zero", /* ASL_MSG_CLOSE */ "Could not close file", /* ASL_MSG_COMPILER_INTERNAL */ "Internal compiler error", /* ASL_MSG_COMPILER_RESERVED */ "Use of compiler reserved name", /* ASL_MSG_CONNECTION_MISSING */ "A Connection operator is required for this field SpaceId", /* ASL_MSG_CONNECTION_INVALID */ "Invalid OpRegion SpaceId for use of Connection operator", /* ASL_MSG_CONSTANT_EVALUATION */ "Could not evaluate constant expression", /* ASL_MSG_CONSTANT_FOLDED */ "Constant expression evaluated and reduced", /* ASL_MSG_CORE_EXCEPTION */ "From ACPICA Subsystem", /* ASL_MSG_DEBUG_FILE_OPEN */ "Could not open debug file", /* ASL_MSG_DEBUG_FILENAME */ "Could not create debug filename", /* ASL_MSG_DEPENDENT_NESTING */ "Dependent function macros cannot be nested", /* ASL_MSG_DMA_CHANNEL */ "Invalid DMA channel (must be 0-7)", /* ASL_MSG_DMA_LIST */ "Too many DMA channels (8 max)", /* ASL_MSG_DUPLICATE_CASE */ "Case value already specified", /* ASL_MSG_DUPLICATE_ITEM */ "Duplicate value in list", /* ASL_MSG_EARLY_EOF */ "Premature end-of-file reached", /* ASL_MSG_ENCODING_LENGTH */ "Package length too long to encode", /* ASL_MSG_EX_INTERRUPT_LIST */ "Too many interrupts (255 max)", /* ASL_MSG_EX_INTERRUPT_LIST_MIN */ "Too few interrupts (1 minimum required)", /* ASL_MSG_EX_INTERRUPT_NUMBER */ "Invalid interrupt number (must be 32 bits)", /* ASL_MSG_FIELD_ACCESS_WIDTH */ "Access width is greater than region size", /* ASL_MSG_FIELD_UNIT_ACCESS_WIDTH */ "Access width of Field Unit extends beyond region limit", /* ASL_MSG_FIELD_UNIT_OFFSET */ "Field Unit extends beyond region limit", /* ASL_MSG_GPE_NAME_CONFLICT */ "Name conflicts with a previous GPE method", /* ASL_MSG_HID_LENGTH */ "_HID string must be exactly 7 or 8 characters", /* ASL_MSG_HID_PREFIX */ "_HID prefix must be all uppercase or decimal digits", /* ASL_MSG_HID_SUFFIX */ "_HID suffix must be all hex digits", /* ASL_MSG_INCLUDE_FILE_OPEN */ "Could not open include file", /* ASL_MSG_INPUT_FILE_OPEN */ "Could not open input file", /* ASL_MSG_INTEGER_LENGTH */ "Truncating 64-bit constant found in 32-bit table", /* ASL_MSG_INTEGER_OPTIMIZATION */ "Integer optimized to single-byte AML opcode", /* ASL_MSG_INTERRUPT_LIST */ "Too many interrupts (16 max)", /* ASL_MSG_INTERRUPT_NUMBER */ "Invalid interrupt number (must be 0-15)", /* ASL_MSG_INVALID_ACCESS_SIZE */ "Invalid AccessSize (Maximum is 4 - QWord access)", /* ASL_MSG_INVALID_ADDR_FLAGS */ "Invalid combination of Length and Min/Max fixed flags", /* ASL_MSG_INVALID_CONSTANT_OP */ "Invalid operator in constant expression (not type 3/4/5)", /* ASL_MSG_INVALID_EISAID */ "EISAID string must be of the form \"UUUXXXX\" (3 uppercase, 4 hex digits)", /* ASL_MSG_INVALID_ESCAPE */ "Invalid or unknown escape sequence", /* ASL_MSG_INVALID_GRAN_FIXED */ "Granularity must be zero for fixed Min/Max", /* ASL_MSG_INVALID_GRANULARITY */ "Granularity must be zero or a power of two minus one", /* ASL_MSG_INVALID_LENGTH */ "Length is larger than Min/Max window", /* ASL_MSG_INVALID_LENGTH_FIXED */ "Length is not equal to fixed Min/Max window", /* ASL_MSG_INVALID_MIN_MAX */ "Address Min is greater than Address Max", /* ASL_MSG_INVALID_OPERAND */ "Invalid operand", /* ASL_MSG_INVALID_PERFORMANCE */ "Invalid performance/robustness value", /* ASL_MSG_INVALID_PRIORITY */ "Invalid priority value", /* ASL_MSG_INVALID_STRING */ "Invalid Hex/Octal Escape - Non-ASCII or NULL", /* ASL_MSG_INVALID_TARGET */ "Target operand not allowed in constant expression", /* ASL_MSG_INVALID_TIME */ "Time parameter too long (255 max)", /* ASL_MSG_INVALID_TYPE */ "Invalid type", /* ASL_MSG_INVALID_UUID */ "UUID string must be of the form \"aabbccdd-eeff-gghh-iijj-kkllmmnnoopp\"", /* ASL_MSG_ISA_ADDRESS */ "Maximum 10-bit ISA address (0x3FF)", /* ASL_MSG_LEADING_ASTERISK */ "Invalid leading asterisk", /* ASL_MSG_LIST_LENGTH_LONG */ "Initializer list longer than declared package length", /* ASL_MSG_LIST_LENGTH_SHORT */ "Initializer list shorter than declared package length", /* ASL_MSG_LISTING_FILE_OPEN */ "Could not open listing file", /* ASL_MSG_LISTING_FILENAME */ "Could not create listing filename", /* ASL_MSG_LOCAL_INIT */ "Method local variable is not initialized", /* ASL_MSG_LOCAL_OUTSIDE_METHOD */ "Local or Arg used outside a control method", /* ASL_MSG_LONG_LINE */ "Splitting long input line", /* ASL_MSG_MEMORY_ALLOCATION */ "Memory allocation failure", /* ASL_MSG_MISSING_ENDDEPENDENT */ "Missing EndDependentFn() macro in dependent resource list", /* ASL_MSG_MISSING_STARTDEPENDENT */ "Missing StartDependentFn() macro in dependent resource list", /* ASL_MSG_MULTIPLE_DEFAULT */ "More than one Default statement within Switch construct", /* ASL_MSG_MULTIPLE_TYPES */ "Multiple types", /* ASL_MSG_NAME_EXISTS */ "Name already exists in scope", /* ASL_MSG_NAME_OPTIMIZATION */ "NamePath optimized", /* ASL_MSG_NAMED_OBJECT_IN_WHILE */ "Creating a named object in a While loop", /* ASL_MSG_NESTED_COMMENT */ "Nested comment found", /* ASL_MSG_NO_CASES */ "No Case statements under Switch", /* ASL_MSG_NO_REGION */ "_REG has no corresponding Operation Region", /* ASL_MSG_NO_RETVAL */ "Called method returns no value", /* ASL_MSG_NO_WHILE */ "No enclosing While statement", /* ASL_MSG_NON_ASCII */ "Invalid characters found in file", /* ASL_MSG_BUFFER_FIELD_LENGTH */ "Field length must be non-zero", /* ASL_MSG_NOT_EXIST */ "Object does not exist", /* ASL_MSG_NOT_FOUND */ "Object not found or not accessible from current scope", /* ASL_MSG_NOT_METHOD */ "Not a control method, cannot invoke", /* ASL_MSG_NOT_PARAMETER */ "Not a parameter, used as local only", /* ASL_MSG_NOT_REACHABLE */ "Object is not accessible from this scope", /* ASL_MSG_NOT_REFERENCED */ "Object is not referenced", /* ASL_MSG_NULL_DESCRIPTOR */ "Min/Max/Length/Gran are all zero, but no resource tag", /* ASL_MSG_NULL_STRING */ "Invalid zero-length (null) string", /* ASL_MSG_OPEN */ "Could not open file", /* ASL_MSG_OUTPUT_FILE_OPEN */ "Could not open output AML file", /* ASL_MSG_OUTPUT_FILENAME */ "Could not create output filename", /* ASL_MSG_PACKAGE_LENGTH */ "Effective AML package length is zero", /* ASL_MSG_PREPROCESSOR_FILENAME */ "Could not create preprocessor filename", /* ASL_MSG_READ */ "Could not read file", /* ASL_MSG_RECURSION */ "Recursive method call", /* ASL_MSG_REGION_BUFFER_ACCESS */ "Host Operation Region requires BufferAcc access", /* ASL_MSG_REGION_BYTE_ACCESS */ "Host Operation Region requires ByteAcc access", /* ASL_MSG_RESERVED_ARG_COUNT_HI */ "Reserved method has too many arguments", /* ASL_MSG_RESERVED_ARG_COUNT_LO */ "Reserved method has too few arguments", /* ASL_MSG_RESERVED_METHOD */ "Reserved name must be a control method", /* ASL_MSG_RESERVED_NO_RETURN_VAL */ "Reserved method should not return a value", /* ASL_MSG_RESERVED_OPERAND_TYPE */ "Invalid object type for reserved name", /* ASL_MSG_RESERVED_PACKAGE_LENGTH */ "Invalid package length for reserved name", /* ASL_MSG_RESERVED_RETURN_VALUE */ "Reserved method must return a value", /* ASL_MSG_RESERVED_USE */ "Invalid use of reserved name", /* ASL_MSG_RESERVED_WORD */ "Use of reserved name", /* ASL_MSG_RESOURCE_FIELD */ "Resource field name cannot be used as a target", /* ASL_MSG_RESOURCE_INDEX */ "Missing ResourceSourceIndex (required)", /* ASL_MSG_RESOURCE_LIST */ "Too many resource items (internal error)", /* ASL_MSG_RESOURCE_SOURCE */ "Missing ResourceSource string (required)", /* ASL_MSG_RESULT_NOT_USED */ "Result is not used, operator has no effect", /* ASL_MSG_RETURN_TYPES */ "Not all control paths return a value", /* ASL_MSG_SCOPE_FWD_REF */ "Forward references from Scope operator not allowed", /* ASL_MSG_SCOPE_TYPE */ "Existing object has invalid type for Scope operator", /* ASL_MSG_SEEK */ "Could not seek file", /* ASL_MSG_SERIALIZED */ "Control Method marked Serialized", /* ASL_MSG_SERIALIZED_REQUIRED */ "Control Method should be made Serialized due to creation of named objects within", /* ASL_MSG_SINGLE_NAME_OPTIMIZATION */ "NamePath optimized to NameSeg (uses run-time search path)", /* ASL_MSG_SOME_NO_RETVAL */ "Called method may not always return a value", /* ASL_MSG_STRING_LENGTH */ "String literal too long", /* ASL_MSG_SWITCH_TYPE */ "Switch expression is not a static Integer/Buffer/String data type, defaulting to Integer", /* ASL_MSG_SYNC_LEVEL */ "SyncLevel must be in the range 0-15", /* ASL_MSG_SYNTAX */ "", /* ASL_MSG_TABLE_SIGNATURE */ "Invalid Table Signature", /* ASL_MSG_TAG_LARGER */ "ResourceTag larger than Field", /* ASL_MSG_TAG_SMALLER */ "ResourceTag smaller than Field", /* ASL_MSG_TIMEOUT */ "Result is not used, possible operator timeout will be missed", /* ASL_MSG_TOO_MANY_TEMPS */ "Method requires too many temporary variables (_T_x)", /* ASL_MSG_TRUNCATION */ "64-bit return value will be truncated to 32 bits (DSDT or SSDT version < 2)", /* ASL_MSG_UNKNOWN_RESERVED_NAME */ "Unknown reserved name", /* ASL_MSG_UNREACHABLE_CODE */ "Statement is unreachable", /* ASL_MSG_UNSUPPORTED */ "Unsupported feature", /* ASL_MSG_UPPER_CASE */ "Non-hex letters must be upper case", /* ASL_MSG_VENDOR_LIST */ "Too many vendor data bytes (7 max)", /* ASL_MSG_WRITE */ "Could not write file", /* ASL_MSG_RANGE */ "Constant out of range", /* ASL_MSG_BUFFER_ALLOCATION */ "Could not allocate line buffer", /* ASL_MSG_MISSING_DEPENDENCY */ "Missing dependency", /* ASL_MSG_ILLEGAL_FORWARD_REF */ "Illegal forward reference", /* ASL_MSG_ILLEGAL_METHOD_REF */ "Object is declared in a different method", /* ASL_MSG_LOCAL_NOT_USED */ "Method Local is set but never used", /* ASL_MSG_ARG_AS_LOCAL_NOT_USED */ "Method Argument (as a local) is set but never used", /* ASL_MSG_ARG_NOT_USED */ "Method Argument is never used", /* ASL_MSG_CONSTANT_REQUIRED */ "Non-reducible expression", /* ASL_MSG_CROSS_TABLE_SCOPE */ "Illegal open scope on external object from within DSDT", /* ASL_MSG_EXCEPTION_NOT_RECEIVED */ "Expected remark, warning, or error did not occur. Message ID:", /* ASL_MSG_NULL_RESOURCE_TEMPLATE */ "Empty Resource Template (END_TAG only)", /* ASL_MSG_FOUND_HERE */ "Original name creation/declaration below: ", /* ASL_MSG_ILLEGAL_RECURSION */ "Illegal recursive call to method that creates named objects", /* ASL_MSG_DUPLICATE_INPUT_FILE */ "Duplicate input files detected:", /* ASL_MSG_WARNING_AS_ERROR */ "Warnings detected during compilation", /* ASL_MSG_OEM_TABLE_ID */ "Invalid OEM Table ID", /* ASL_MSG_OEM_ID */ "Invalid OEM ID", /* ASL_MSG_UNLOAD */ "Unload is not supported by all operating systems", /* ASL_MSG_OFFSET */ "Unnecessary/redundant use of Offset operator", /* ASL_MSG_LONG_SLEEP */ "Very long Sleep, greater than 1 second", /* ASL_MSG_PREFIX_NOT_EXIST */ "One or more prefix Scopes do not exist", /* ASL_MSG_NAMEPATH_NOT_EXIST */ "One or more objects within the Pathname do not exist", /* ASL_MSG_REGION_LENGTH */ "Operation Region declared with zero length", /* ASL_MSG_TEMPORARY_OBJECT */ "Object is created temporarily in another method and cannot be accessed", /* ASL_MSG_UNDEFINED_EXTERNAL */ "Named object was declared external but the actual definition does not exist", /* ASL_MSG_BUFFER_FIELD_OVERFLOW */ "Buffer field extends beyond end of target buffer", /* ASL_MSG_INVALID_SPECIAL_NAME */ "declaration of this named object outside root scope is illegal", /* ASL_MSG_INVALID_PROCESSOR_UID */ "_UID inside processor declaration must be an integer", /* ASL_MSG_LEGACY_PROCESSOR_OP */ "Legacy Processor() keyword detected. Use Device() keyword instead.", /* ASL_MSG_NAMESTRING_LENGTH */ "NameString contains too many NameSegs (>255)", /* ASL_MSG_CASE_FOUND_HERE */ "Original Case value below:", /* ASL_MSG_EXTERN_INVALID_RET_TYPE */ "Return type is only allowed for Externals declared as MethodObj", /* ASL_MSG_EXTERN_INVALID_PARAM_TYPE */ "Parameter type is only allowed for Externals declared as MethodObj", /* ASL_MSG_NAMED_OBJECT_CREATION */ "Creation of named objects within a method is highly inefficient, use globals or method local variables instead", /* ASL_MSG_ARG_COUNT_MISMATCH */ "Method NumArgs count does not match length of ParameterTypes list", /* ASL_MSG_STATIC_OPREGION_IN_METHOD */ "Static OperationRegion should be declared outside control method", /* ASL_MSG_DECLARATION_TYPE_MISMATCH */ "Type mismatch between external declaration and actual object declaration detected", /* ASL_MSG_TYPE_MISMATCH_FOUND_HERE */ "Actual object declaration:", /* ASL_MSG_DUPLICATE_EXTERN_MISMATCH */ "Type mismatch between multiple external declarations detected", /* ASL_MSG_DUPLICATE_EXTERN_FOUND_HERE */"Duplicate external declaration:", /* ASL_MSG_CONDREF_NEEDS_EXTERNAL_DECL */"CondRefOf parameter requires External() declaration", /* ASL_MSG_EXTERNAL_FOUND_HERE */ "External declaration below ", /* ASL_MSG_LOWER_CASE_NAMESEG */ "At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case", /* ASL_MSG_LOWER_CASE_NAMEPATH */ "At least one lower case letter found in NamePath, ASL is case insensitive - converting to upper case", /* ASL_MSG_UUID_NOT_FOUND */ "Unknown UUID string", /* ASL_MSG_LEGACY_DDB_TYPE */ "DDBHandleObj has been deprecated along with the Unload operator. DDBHandlObj objects are only used in Unload" }; /* Table compiler */ const char *AslTableCompilerMsgs [] = { /* ASL_MSG_BUFFER_ELEMENT */ "Invalid element in buffer initializer list", /* ASL_MSG_DIVIDE_BY_ZERO */ "Expression contains divide-by-zero", /* ASL_MSG_FLAG_VALUE */ "Flag value is too large", /* ASL_MSG_INTEGER_SIZE */ "Integer too large for target", /* ASL_MSG_INVALID_EXPRESSION */ "Invalid expression", /* ASL_MSG_INVALID_FIELD_NAME */ "Invalid Field Name", /* ASL_MSG_INVALID_HEX_INTEGER */ "Invalid hex integer constant", /* ASL_MSG_OEM_TABLE */ "OEM table - unknown contents", /* ASL_MSG_RESERVED_FIELD */ "Reserved field", /* ASL_MSG_UNKNOWN_LABEL */ "Label is undefined", /* ASL_MSG_UNKNOWN_SUBTABLE */ "Unknown subtable type", /* ASL_MSG_UNKNOWN_TABLE */ "Unknown ACPI table signature", /* ASL_MSG_ZERO_VALUE */ "Value must be non-zero", /* ASL_MSG_INVALID_LABEL */ "Invalid field label detected", /* ASL_MSG_BUFFER_LIST */ "Invalid buffer initializer list", /* ASL_MSG_ENTRY_LIST */ "Invalid entry initializer list", /* ASL_MSG_UNKNOWN_FORMAT */ "Unknown format value", /* ASL_MSG_RESERVED_VALUE */ "Value for field is reserved or unknown", /* ASL_MSG_TWO_ZERO_VALUES */ "32-bit DSDT Address and 64-bit X_DSDT Address cannot both be zero", /* ASL_MSG_BAD_PARSE_TREE */ "Parse tree appears to be ill-defined" }; /* Preprocessor */ const char *AslPreprocessorMsgs [] = { /* ASL_MSG_DIRECTIVE_SYNTAX */ "Invalid directive syntax", /* ASL_MSG_ENDIF_MISMATCH */ "Mismatched #endif", /* ASL_MSG_ERROR_DIRECTIVE */ "#error", /* ASL_MSG_EXISTING_NAME */ "Name is already defined", /* ASL_MSG_INVALID_INVOCATION */ "Invalid macro invocation", /* ASL_MSG_MACRO_SYNTAX */ "Invalid macro syntax", /* ASL_MSG_TOO_MANY_ARGUMENTS */ "Too many macro arguments", /* ASL_MSG_UNKNOWN_DIRECTIVE */ "Unknown directive", /* ASL_MSG_UNKNOWN_PRAGMA */ "Unknown pragma", /* ASL_MSG_WARNING_DIRECTIVE */ "#warning", /* ASL_MSG_INCLUDE_FILE */ "Found a # preprocessor directive in ASL Include() file" }; /******************************************************************************* * * FUNCTION: AeDecodeMessageId * * PARAMETERS: MessageId - ASL message ID (exception code) to be * formatted. Possibly fully encoded. * * RETURN: A string containing the exception message text. * * DESCRIPTION: This function validates and translates an ASL message ID into * an ASCII string. * ******************************************************************************/ const char * AeDecodeMessageId ( UINT16 MessageId) { UINT32 Index; const char **MessageTable; /* Main ASL Compiler messages */ if (MessageId <= ASL_MSG_MAIN_COMPILER_END) { MessageTable = AslCompilerMsgs; Index = MessageId; if (Index >= ACPI_ARRAY_LENGTH (AslCompilerMsgs)) { return ("[Unknown iASL Compiler exception ID]"); } } /* Data Table Compiler messages */ else if (MessageId <= ASL_MSG_TABLE_COMPILER_END) { MessageTable = AslTableCompilerMsgs; Index = MessageId - ASL_MSG_TABLE_COMPILER; if (Index >= ACPI_ARRAY_LENGTH (AslTableCompilerMsgs)) { return ("[Unknown iASL Table Compiler exception ID]"); } } /* Preprocessor messages */ else if (MessageId <= ASL_MSG_PREPROCESSOR_END) { MessageTable = AslPreprocessorMsgs; Index = MessageId - ASL_MSG_PREPROCESSOR; if (Index >= ACPI_ARRAY_LENGTH (AslPreprocessorMsgs)) { return ("[Unknown iASL Preprocessor exception ID]"); } } /* Everything else is unknown */ else { return ("[Unknown iASL exception ID]"); } return (MessageTable[Index]); } /******************************************************************************* * * FUNCTION: AeDecodeExceptionLevel * * PARAMETERS: Level - The ASL error level to be decoded * * RETURN: A string containing the error level text * * DESCRIPTION: This function validates and translates an ASL error level into * an ASCII string. * ******************************************************************************/ const char * AeDecodeExceptionLevel ( UINT8 Level) { /* Range check on Level */ if (Level >= ACPI_ARRAY_LENGTH (AslErrorLevel)) { return ("Unknown exception level"); } /* Differentiate the string type to be used (IDE is all lower case) */ if (AslGbl_VerboseErrors) { return (AslErrorLevel[Level]); } return (AslErrorLevelIde[Level]); } /******************************************************************************* * * FUNCTION: AeBuildFullExceptionCode * * PARAMETERS: Level - ASL error level * MessageId - ASL exception code to be formatted * * RETURN: Fully encoded exception code * * DESCRIPTION: Build the full exception code from the error level and the * actual message ID. * ******************************************************************************/ UINT16 AeBuildFullExceptionCode ( UINT8 Level, UINT16 MessageId) { /* * Error level is in the thousands slot (error/warning/remark, etc.) * Error codes are 0 - 999 */ return (((Level + 1) * 1000) + MessageId); } #ifdef ACPI_HELP_APP /******************************************************************************* * * FUNCTION: AhDecodeAslException * * PARAMETERS: HexString - iASL status string from command line, in * hex. If null, display all exceptions. * * RETURN: None * * DESCRIPTION: Decode and display an iASL exception code. Note1: a * NULL string for HexString displays all known iASL exceptions. Note2: * implements the -x option for AcpiHelp. * ******************************************************************************/ #define AH_DISPLAY_ASL_EXCEPTION_TEXT(Status, Exception) \ printf ("%.4X: %s\n", Status, Exception) #define AH_DISPLAY_EXCEPTION(Status, Name) \ printf ("%.4X: %s\n", Status, Name) void AhDecodeAslException ( char *HexString) { UINT32 i; UINT32 MessageId; const char *OneException; UINT32 Index = 1; /* * A null input string means to decode and display all known * exception codes. */ if (!HexString) { printf ("All defined iASL exception codes:\n\n"); printf ("Main iASL exceptions:\n\n"); AH_DISPLAY_EXCEPTION (0, "AE_OK (No error occurred)"); /* Display codes in each block of exception types */ for (i = 1; Index < ACPI_ARRAY_LENGTH (AslCompilerMsgs); i++, Index++) { AH_DISPLAY_ASL_EXCEPTION_TEXT (Index, AslCompilerMsgs[i]); } printf ("\niASL Table Compiler exceptions:\n\n"); Index = ASL_MSG_TABLE_COMPILER; for (i = 0; i < ACPI_ARRAY_LENGTH (AslTableCompilerMsgs); i++, Index++) { AH_DISPLAY_ASL_EXCEPTION_TEXT (Index, AslTableCompilerMsgs[i]); } printf ("\niASL Preprocessor exceptions:\n\n"); Index = ASL_MSG_PREPROCESSOR; for (i = 0; i < ACPI_ARRAY_LENGTH (AslPreprocessorMsgs); i++, Index++) { AH_DISPLAY_ASL_EXCEPTION_TEXT (Index, AslPreprocessorMsgs[i]); } return; } /* HexString is valid - convert it to a MessageId and decode it */ MessageId = strtol (HexString, NULL, 16); OneException = AeDecodeMessageId ((UINT16) MessageId); AH_DISPLAY_ASL_EXCEPTION_TEXT (MessageId, OneException); } #endif src/acpica/source/compiler/aslmessages.h000066400000000000000000000377041465205512700207010ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslmessages.h - Compiler error/warning messages * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ASLMESSAGES_H #define __ASLMESSAGES_H /* These values must match error type string tables in aslmessages.c */ typedef enum { ASL_OPTIMIZATION = 0, ASL_REMARK, ASL_WARNING, ASL_WARNING2, ASL_WARNING3, ASL_ERROR, ASL_NUM_REPORT_LEVELS } ASL_MESSAGE_TYPES; #define ASL_ERROR_LEVEL_LENGTH 8 /* Length of strings for types above */ void AhDecodeAslException ( char *HexString); /* * Exception code blocks, 0 - 999 * Available for new exception blocks: 600 - 999 */ #define ASL_MSG_MAIN_COMPILER 0 /* 0 - 299 */ #define ASL_MSG_MAIN_COMPILER_END 299 #define ASL_MSG_TABLE_COMPILER 300 /* 300 - 499 */ #define ASL_MSG_TABLE_COMPILER_END 499 #define ASL_MSG_PREPROCESSOR 500 /* 500 - 599 */ #define ASL_MSG_PREPROCESSOR_END 599 /* * Values (message IDs) for all compiler messages. There are currently * three distinct blocks of error messages (so that they can be expanded * individually): * Main ASL compiler * Data Table compiler * Preprocessor * * NOTE1: This list must match the tables of message strings in the file * aslmessages.c exactly. * * NOTE2: With the introduction of the -vw option to disable specific * messages, new messages should only be added to the end of these * lists, so that values for existing messages are not disturbed. */ typedef enum { ASL_MSG_RESERVED = ASL_MSG_MAIN_COMPILER, ASL_MSG_ALIGNMENT, ASL_MSG_ALPHANUMERIC_STRING, ASL_MSG_AML_NOT_IMPLEMENTED, ASL_MSG_ARG_COUNT_HI, ASL_MSG_ARG_COUNT_LO, ASL_MSG_ARG_INIT, ASL_MSG_BACKWARDS_OFFSET, ASL_MSG_BUFFER_LENGTH, ASL_MSG_CLOSE, ASL_MSG_COMPILER_INTERNAL, ASL_MSG_COMPILER_RESERVED, ASL_MSG_CONNECTION_MISSING, ASL_MSG_CONNECTION_INVALID, ASL_MSG_CONSTANT_EVALUATION, ASL_MSG_CONSTANT_FOLDED, ASL_MSG_CORE_EXCEPTION, ASL_MSG_DEBUG_FILE_OPEN, ASL_MSG_DEBUG_FILENAME, ASL_MSG_DEPENDENT_NESTING, ASL_MSG_DMA_CHANNEL, ASL_MSG_DMA_LIST, ASL_MSG_DUPLICATE_CASE, ASL_MSG_DUPLICATE_ITEM, ASL_MSG_EARLY_EOF, ASL_MSG_ENCODING_LENGTH, ASL_MSG_EX_INTERRUPT_LIST, ASL_MSG_EX_INTERRUPT_LIST_MIN, ASL_MSG_EX_INTERRUPT_NUMBER, ASL_MSG_FIELD_ACCESS_WIDTH, ASL_MSG_FIELD_UNIT_ACCESS_WIDTH, ASL_MSG_FIELD_UNIT_OFFSET, ASL_MSG_GPE_NAME_CONFLICT, ASL_MSG_HID_LENGTH, ASL_MSG_HID_PREFIX, ASL_MSG_HID_SUFFIX, ASL_MSG_INCLUDE_FILE_OPEN, ASL_MSG_INPUT_FILE_OPEN, ASL_MSG_INTEGER_LENGTH, ASL_MSG_INTEGER_OPTIMIZATION, ASL_MSG_INTERRUPT_LIST, ASL_MSG_INTERRUPT_NUMBER, ASL_MSG_INVALID_ACCESS_SIZE, ASL_MSG_INVALID_ADDR_FLAGS, ASL_MSG_INVALID_CONSTANT_OP, ASL_MSG_INVALID_EISAID, ASL_MSG_INVALID_ESCAPE, ASL_MSG_INVALID_GRAN_FIXED, ASL_MSG_INVALID_GRANULARITY, ASL_MSG_INVALID_LENGTH, ASL_MSG_INVALID_LENGTH_FIXED, ASL_MSG_INVALID_MIN_MAX, ASL_MSG_INVALID_OPERAND, ASL_MSG_INVALID_PERFORMANCE, ASL_MSG_INVALID_PRIORITY, ASL_MSG_INVALID_STRING, ASL_MSG_INVALID_TARGET, ASL_MSG_INVALID_TIME, ASL_MSG_INVALID_TYPE, ASL_MSG_INVALID_UUID, ASL_MSG_ISA_ADDRESS, ASL_MSG_LEADING_ASTERISK, ASL_MSG_LIST_LENGTH_LONG, ASL_MSG_LIST_LENGTH_SHORT, ASL_MSG_LISTING_FILE_OPEN, ASL_MSG_LISTING_FILENAME, ASL_MSG_LOCAL_INIT, ASL_MSG_LOCAL_OUTSIDE_METHOD, ASL_MSG_LONG_LINE, ASL_MSG_MEMORY_ALLOCATION, ASL_MSG_MISSING_ENDDEPENDENT, ASL_MSG_MISSING_STARTDEPENDENT, ASL_MSG_MULTIPLE_DEFAULT, ASL_MSG_MULTIPLE_TYPES, ASL_MSG_NAME_EXISTS, ASL_MSG_NAME_OPTIMIZATION, ASL_MSG_NAMED_OBJECT_IN_WHILE, ASL_MSG_NESTED_COMMENT, ASL_MSG_NO_CASES, ASL_MSG_NO_REGION, ASL_MSG_NO_RETVAL, ASL_MSG_NO_WHILE, ASL_MSG_NON_ASCII, ASL_MSG_BUFFER_FIELD_LENGTH, ASL_MSG_NOT_EXIST, ASL_MSG_NOT_FOUND, ASL_MSG_NOT_METHOD, ASL_MSG_NOT_PARAMETER, ASL_MSG_NOT_REACHABLE, ASL_MSG_NOT_REFERENCED, ASL_MSG_NULL_DESCRIPTOR, ASL_MSG_NULL_STRING, ASL_MSG_OPEN, ASL_MSG_OUTPUT_FILE_OPEN, ASL_MSG_OUTPUT_FILENAME, ASL_MSG_PACKAGE_LENGTH, ASL_MSG_PREPROCESSOR_FILENAME, ASL_MSG_READ, ASL_MSG_RECURSION, ASL_MSG_REGION_BUFFER_ACCESS, ASL_MSG_REGION_BYTE_ACCESS, ASL_MSG_RESERVED_ARG_COUNT_HI, ASL_MSG_RESERVED_ARG_COUNT_LO, ASL_MSG_RESERVED_METHOD, ASL_MSG_RESERVED_NO_RETURN_VAL, ASL_MSG_RESERVED_OPERAND_TYPE, ASL_MSG_RESERVED_PACKAGE_LENGTH, ASL_MSG_RESERVED_RETURN_VALUE, ASL_MSG_RESERVED_USE, ASL_MSG_RESERVED_WORD, ASL_MSG_RESOURCE_FIELD, ASL_MSG_RESOURCE_INDEX, ASL_MSG_RESOURCE_LIST, ASL_MSG_RESOURCE_SOURCE, ASL_MSG_RESULT_NOT_USED, ASL_MSG_RETURN_TYPES, ASL_MSG_SCOPE_FWD_REF, ASL_MSG_SCOPE_TYPE, ASL_MSG_SEEK, ASL_MSG_SERIALIZED, ASL_MSG_SERIALIZED_REQUIRED, ASL_MSG_SINGLE_NAME_OPTIMIZATION, ASL_MSG_SOME_NO_RETVAL, ASL_MSG_STRING_LENGTH, ASL_MSG_SWITCH_TYPE, ASL_MSG_SYNC_LEVEL, ASL_MSG_SYNTAX, ASL_MSG_TABLE_SIGNATURE, ASL_MSG_TAG_LARGER, ASL_MSG_TAG_SMALLER, ASL_MSG_TIMEOUT, ASL_MSG_TOO_MANY_TEMPS, ASL_MSG_TRUNCATION, ASL_MSG_UNKNOWN_RESERVED_NAME, ASL_MSG_UNREACHABLE_CODE, ASL_MSG_UNSUPPORTED, ASL_MSG_UPPER_CASE, ASL_MSG_VENDOR_LIST, ASL_MSG_WRITE, ASL_MSG_RANGE, ASL_MSG_BUFFER_ALLOCATION, ASL_MSG_MISSING_DEPENDENCY, ASL_MSG_ILLEGAL_FORWARD_REF, ASL_MSG_ILLEGAL_METHOD_REF, ASL_MSG_LOCAL_NOT_USED, ASL_MSG_ARG_AS_LOCAL_NOT_USED, ASL_MSG_ARG_NOT_USED, ASL_MSG_CONSTANT_REQUIRED, ASL_MSG_CROSS_TABLE_SCOPE, ASL_MSG_EXCEPTION_NOT_RECEIVED, ASL_MSG_NULL_RESOURCE_TEMPLATE, ASL_MSG_FOUND_HERE, ASL_MSG_ILLEGAL_RECURSION, ASL_MSG_DUPLICATE_INPUT_FILE, ASL_MSG_WARNING_AS_ERROR, ASL_MSG_OEM_TABLE_ID, ASL_MSG_OEM_ID, ASL_MSG_UNLOAD, ASL_MSG_OFFSET, ASL_MSG_LONG_SLEEP, ASL_MSG_PREFIX_NOT_EXIST, ASL_MSG_NAMEPATH_NOT_EXIST, ASL_MSG_REGION_LENGTH, ASL_MSG_TEMPORARY_OBJECT, ASL_MSG_UNDEFINED_EXTERNAL, ASL_MSG_BUFFER_FIELD_OVERFLOW, ASL_MSG_INVALID_SPECIAL_NAME, ASL_MSG_INVALID_PROCESSOR_UID, ASL_MSG_LEGACY_PROCESSOR_OP, ASL_MSG_NAMESTRING_LENGTH, ASL_MSG_CASE_FOUND_HERE, ASL_MSG_EXTERN_INVALID_RET_TYPE, ASL_MSG_EXTERN_INVALID_PARAM_TYPE, ASL_MSG_NAMED_OBJECT_CREATION, ASL_MSG_ARG_COUNT_MISMATCH, ASL_MSG_STATIC_OPREGION_IN_METHOD, ASL_MSG_DECLARATION_TYPE_MISMATCH, ASL_MSG_TYPE_MISMATCH_FOUND_HERE, ASL_MSG_DUPLICATE_EXTERN_MISMATCH, ASL_MSG_DUPLICATE_EXTERN_FOUND_HERE, ASL_MSG_CONDREF_NEEDS_EXTERNAL_DECL, ASL_MSG_EXTERNAL_FOUND_HERE, ASL_MSG_LOWER_CASE_NAMESEG, ASL_MSG_LOWER_CASE_NAMEPATH, ASL_MSG_UUID_NOT_FOUND, ASL_MSG_LEGACY_DDB_TYPE, /* These messages are used by the Data Table compiler only */ ASL_MSG_BUFFER_ELEMENT = ASL_MSG_TABLE_COMPILER, ASL_MSG_DIVIDE_BY_ZERO, ASL_MSG_FLAG_VALUE, ASL_MSG_INTEGER_SIZE, ASL_MSG_INVALID_EXPRESSION, ASL_MSG_INVALID_FIELD_NAME, ASL_MSG_INVALID_HEX_INTEGER, ASL_MSG_OEM_TABLE, ASL_MSG_RESERVED_FIELD, ASL_MSG_UNKNOWN_LABEL, ASL_MSG_UNKNOWN_SUBTABLE, ASL_MSG_UNKNOWN_TABLE, ASL_MSG_ZERO_VALUE, ASL_MSG_INVALID_LABEL, ASL_MSG_BUFFER_LIST, ASL_MSG_ENTRY_LIST, ASL_MSG_UNKNOWN_FORMAT, ASL_MSG_RESERVED_VALUE, ASL_MSG_TWO_ZERO_VALUES, ASL_MSG_BAD_PARSE_TREE, /* These messages are used by the Preprocessor only */ ASL_MSG_DIRECTIVE_SYNTAX = ASL_MSG_PREPROCESSOR, ASL_MSG_ENDIF_MISMATCH, ASL_MSG_ERROR_DIRECTIVE, ASL_MSG_EXISTING_NAME, ASL_MSG_INVALID_INVOCATION, ASL_MSG_MACRO_SYNTAX, ASL_MSG_TOO_MANY_ARGUMENTS, ASL_MSG_UNKNOWN_DIRECTIVE, ASL_MSG_UNKNOWN_PRAGMA, ASL_MSG_WARNING_DIRECTIVE, ASL_MSG_INCLUDE_FILE } ASL_MESSAGE_IDS; #endif /* __ASLMESSAGES_H */ src/acpica/source/compiler/aslmethod.c000066400000000000000000001100331465205512700203300ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslmethod.c - Control method analysis walk * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acnamesp.h" #include "acparser.h" #include "amlcode.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslmethod") /* Local prototypes */ static void MtCheckNamedObjectInMethod ( ACPI_PARSE_OBJECT *Op, ASL_METHOD_INFO *MethodInfo); static void MtCheckStaticOperationRegionInMethod ( ACPI_PARSE_OBJECT *Op); /******************************************************************************* * * FUNCTION: MtMethodAnalysisWalkBegin * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Descending callback for the analysis walk. Check methods for: * 1) Initialized local variables * 2) Valid arguments * 3) Return types * ******************************************************************************/ ACPI_STATUS MtMethodAnalysisWalkBegin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ASL_ANALYSIS_WALK_INFO *WalkInfo = (ASL_ANALYSIS_WALK_INFO *) Context; ASL_METHOD_INFO *MethodInfo = WalkInfo->MethodStack; ACPI_PARSE_OBJECT *Next; UINT32 RegisterNumber; UINT32 i; char LocalName[] = "Local0"; char ArgName[] = "Arg0"; ACPI_PARSE_OBJECT *ArgNode; ACPI_PARSE_OBJECT *NextType; UINT8 ActualArgs = 0; BOOLEAN HidExists; BOOLEAN AdrExists; BOOLEAN PrsExists; BOOLEAN CrsExists; BOOLEAN SrsExists; BOOLEAN DisExists; /* Build cross-reference output file if requested */ if (AslGbl_CrossReferenceOutput) { OtXrefWalkPart1 (Op, Level, MethodInfo); } switch (Op->Asl.ParseOpcode) { case PARSEOP_METHOD: AslGbl_TotalMethods++; /* Create and init method info */ MethodInfo = UtLocalCalloc (sizeof (ASL_METHOD_INFO)); MethodInfo->Next = WalkInfo->MethodStack; MethodInfo->Op = Op; WalkInfo->MethodStack = MethodInfo; /* * Special handling for _PSx methods. Dependency rules (same scope): * * 1) _PS0 - One of these must exist: _PS1, _PS2, _PS3 * 2) _PS1/_PS2/_PS3: A _PS0 must exist */ if (ACPI_COMPARE_NAMESEG (METHOD_NAME__PS0, Op->Asl.NameSeg)) { /* For _PS0, one of _PS1/_PS2/_PS3 must exist */ if ((!ApFindNameInScope (METHOD_NAME__PS1, Op)) && (!ApFindNameInScope (METHOD_NAME__PS2, Op)) && (!ApFindNameInScope (METHOD_NAME__PS3, Op))) { AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, "_PS0 requires one of _PS1/_PS2/_PS3 in same scope"); } } else if ( ACPI_COMPARE_NAMESEG (METHOD_NAME__PS1, Op->Asl.NameSeg) || ACPI_COMPARE_NAMESEG (METHOD_NAME__PS2, Op->Asl.NameSeg) || ACPI_COMPARE_NAMESEG (METHOD_NAME__PS3, Op->Asl.NameSeg)) { /* For _PS1/_PS2/_PS3, a _PS0 must exist */ if (!ApFindNameInScope (METHOD_NAME__PS0, Op)) { sprintf (AslGbl_MsgBuffer, "%4.4s requires _PS0 in same scope", Op->Asl.NameSeg); AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, AslGbl_MsgBuffer); } } /* Get the name node */ Next = Op->Asl.Child; /* Get the NumArguments node */ Next = Next->Asl.Next; MethodInfo->NumArguments = (UINT8) (((UINT8) Next->Asl.Value.Integer) & 0x07); /* Get the SerializeRule and SyncLevel nodes, ignored here */ Next = Next->Asl.Next; MethodInfo->ShouldBeSerialized = (UINT8) Next->Asl.Value.Integer; Next = Next->Asl.Next; ArgNode = Next; /* Get the ReturnType node */ Next = Next->Asl.Next; NextType = Next->Asl.Child; MethodInfo->ValidReturnTypes = MtProcessTypeOp (NextType); Op->Asl.AcpiBtype |= MethodInfo->ValidReturnTypes; /* Get the ParameterType node */ Next = Next->Asl.Next; NextType = Next->Asl.Child; if (!NextType) { /* * The optional parameter types list was omitted at the source * level. Use the Argument count parameter instead. */ ActualArgs = MethodInfo->NumArguments; } else { ActualArgs = MtProcessParameterTypeList (NextType, MethodInfo->ValidArgTypes); MethodInfo->NumArguments = ActualArgs; ArgNode->Asl.Value.Integer |= ActualArgs; } if ((MethodInfo->NumArguments) && (MethodInfo->NumArguments != ActualArgs)) { sprintf (AslGbl_MsgBuffer, "Length = %u", ActualArgs); AslError (ASL_ERROR, ASL_MSG_ARG_COUNT_MISMATCH, Op->Asl.Child->Asl.Next, AslGbl_MsgBuffer); } /* Allow numarguments == 0 for Function() */ if ((!MethodInfo->NumArguments) && (ActualArgs)) { MethodInfo->NumArguments = ActualArgs; ArgNode->Asl.Value.Integer |= ActualArgs; } /* * Actual arguments are initialized at method entry. * All other ArgX "registers" can be used as locals, so we * track their initialization. */ for (i = 0; i < MethodInfo->NumArguments; i++) { MethodInfo->ArgInitialized[i] = TRUE; } break; case PARSEOP_METHODCALL: /* Check for a recursive method call */ if (MethodInfo && (Op->Asl.Node == MethodInfo->Op->Asl.Node)) { if (MethodInfo->CreatesNamedObjects) { /* * This is an error, as it will fail at runtime on all ACPI * implementations. Any named object declarations will be * executed twice, causing failure the second time. Note, * this is independent of whether the method is declared * Serialized, because the same thread is attempting to * reenter the method, and this will always succeed. */ AslDualParseOpError (ASL_ERROR, ASL_MSG_ILLEGAL_RECURSION, Op, Op->Asl.Value.String, ASL_MSG_FOUND_HERE, MethodInfo->Op, MethodInfo->Op->Asl.ExternalName); } else { /* Method does not create objects, issue a remark */ AslError (ASL_REMARK, ASL_MSG_RECURSION, Op, Op->Asl.ExternalName); } } break; case PARSEOP_LOCAL0: case PARSEOP_LOCAL1: case PARSEOP_LOCAL2: case PARSEOP_LOCAL3: case PARSEOP_LOCAL4: case PARSEOP_LOCAL5: case PARSEOP_LOCAL6: case PARSEOP_LOCAL7: if (!MethodInfo) { /* * Local was used outside a control method, or there was an error * in the method declaration. */ AslError (ASL_REMARK, ASL_MSG_LOCAL_OUTSIDE_METHOD, Op, Op->Asl.ExternalName); return (AE_ERROR); } RegisterNumber = (Op->Asl.AmlOpcode & 0x0007); /* * If the local is being used as a target, mark the local * initialized */ if (Op->Asl.CompileFlags & OP_IS_TARGET) { MethodInfo->LocalInitialized[RegisterNumber] = TRUE; } /* * Otherwise, this is a reference, check if the local * has been previously initialized. * * The only operator that accepts an uninitialized value is ObjectType() */ else if ((!MethodInfo->LocalInitialized[RegisterNumber]) && (Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_OBJECTTYPE)) { LocalName[strlen (LocalName) -1] = (char) (RegisterNumber + 0x30); AslError (ASL_ERROR, ASL_MSG_LOCAL_INIT, Op, LocalName); } break; case PARSEOP_ARG0: case PARSEOP_ARG1: case PARSEOP_ARG2: case PARSEOP_ARG3: case PARSEOP_ARG4: case PARSEOP_ARG5: case PARSEOP_ARG6: if (!MethodInfo) { /* * Arg was used outside a control method, or there was an error * in the method declaration. */ AslError (ASL_REMARK, ASL_MSG_LOCAL_OUTSIDE_METHOD, Op, Op->Asl.ExternalName); return (AE_ERROR); } RegisterNumber = (Op->Asl.AmlOpcode & 0x000F) - 8; ArgName[strlen (ArgName) -1] = (char) (RegisterNumber + 0x30); /* * If the Arg is being used as a target, mark the local * initialized */ if (Op->Asl.CompileFlags & OP_IS_TARGET) { MethodInfo->ArgInitialized[RegisterNumber] = TRUE; } /* * Otherwise, this is a reference, check if the Arg * has been previously initialized. * * The only operator that accepts an uninitialized value is ObjectType() */ else if ((!MethodInfo->ArgInitialized[RegisterNumber]) && (Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_OBJECTTYPE)) { AslError (ASL_ERROR, ASL_MSG_ARG_INIT, Op, ArgName); } /* Flag this arg if it is not a "real" argument to the method */ if (RegisterNumber >= MethodInfo->NumArguments) { AslError (ASL_REMARK, ASL_MSG_NOT_PARAMETER, Op, ArgName); } break; case PARSEOP_RETURN: if (!MethodInfo) { /* * Probably was an error in the method declaration, * no additional error here */ ACPI_WARNING ((AE_INFO, "%p, No parent method", Op)); return (AE_ERROR); } /* * A child indicates a possible return value. A simple Return or * Return() is marked with OP_IS_NULL_RETURN by the parser so * that it is not counted as a "real" return-with-value, although * the AML code that is actually emitted is Return(0). The AML * definition of Return has a required parameter, so we are * forced to convert a null return to Return(0). */ if ((Op->Asl.Child) && (Op->Asl.Child->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) && (!(Op->Asl.Child->Asl.CompileFlags & OP_IS_NULL_RETURN))) { MethodInfo->NumReturnWithValue++; } else { MethodInfo->NumReturnNoValue++; } break; case PARSEOP_BREAK: case PARSEOP_CONTINUE: Next = Op->Asl.Parent; while (Next) { if (Next->Asl.ParseOpcode == PARSEOP_WHILE) { break; } Next = Next->Asl.Parent; } if (!Next) { AslError (ASL_ERROR, ASL_MSG_NO_WHILE, Op, NULL); } break; case PARSEOP_STALL: /* We can range check if the argument is an integer */ if ((Op->Asl.Child->Asl.ParseOpcode == PARSEOP_INTEGER) && (Op->Asl.Child->Asl.Value.Integer > ACPI_UINT8_MAX)) { AslError (ASL_ERROR, ASL_MSG_INVALID_TIME, Op, NULL); } break; case PARSEOP_DEVICE: /* Check usage of _HID and _ADR objects */ HidExists = ApFindNameInDeviceTree (METHOD_NAME__HID, Op); AdrExists = ApFindNameInDeviceTree (METHOD_NAME__ADR, Op); if (!HidExists && !AdrExists) { AslError (ASL_ERROR, ASL_MSG_MISSING_DEPENDENCY, Op, "Device object requires a _HID or _ADR"); } else if (HidExists && AdrExists) { /* * According to the ACPI spec, "A device object must contain * either an _HID object or an _ADR object, but should not contain * both". */ AslError (ASL_WARNING, ASL_MSG_MULTIPLE_TYPES, Op, "Device object requires either a _HID or _ADR, but not both"); } /* * Check usage of _CRS, _DIS, _PRS, and _SRS objects (July 2021). * * Under the Device Object: * * 1) If _PRS present, must have _CRS and _SRS * 2) If _SRS present, must have _PRS (_PRS requires _CRS and _SRS) * 3) If _DIS present, must have _SRS (_SRS requires _PRS, _PRS requires _CRS and _SRS) * 4) If _SRS present, probably should have a _DIS (Remark only) */ CrsExists = ApFindNameInDeviceTree (METHOD_NAME__CRS, Op); DisExists = ApFindNameInDeviceTree (METHOD_NAME__DIS, Op); PrsExists = ApFindNameInDeviceTree (METHOD_NAME__PRS, Op); SrsExists = ApFindNameInDeviceTree (METHOD_NAME__SRS, Op); /* 1) If _PRS is present, must have a _CRS and _SRS */ if (PrsExists) { if (!CrsExists) { AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, "Device has a _PRS, missing a _CRS, required"); } if (!SrsExists) { AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, "Device has a _PRS, missing a _SRS, required"); } } /* 2) If _SRS is present, must have _PRS (_PRS requires _CRS and _SRS) */ if ((SrsExists) && (!PrsExists)) { AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, "Device has a _SRS, missing a _PRS, required"); } /* 3) If _DIS is present, must have a _SRS */ if ((DisExists) && (!SrsExists)) { AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, "Device has a _DIS, missing a _SRS, required"); } /* * 4) If _SRS is present, should have a _DIS (_PRS requires _CRS * and _SRS) Remark only. */ if ((SrsExists) && (!DisExists)) { AslError (ASL_REMARK, ASL_MSG_MISSING_DEPENDENCY, Op, "Device has a _SRS, no corresponding _DIS"); } break; case PARSEOP_EVENT: case PARSEOP_MUTEX: case PARSEOP_OPERATIONREGION: case PARSEOP_POWERRESOURCE: case PARSEOP_PROCESSOR: case PARSEOP_THERMALZONE: /* * The first operand is a name to be created in the namespace. * Check against the reserved list. */ i = ApCheckForPredefinedName (Op, Op->Asl.NameSeg); if (i < ACPI_VALID_RESERVED_NAME_MAX) { AslError (ASL_ERROR, ASL_MSG_RESERVED_USE, Op, Op->Asl.ExternalName); } MtCheckStaticOperationRegionInMethod (Op); break; case PARSEOP_NAME: /* Typecheck any predefined names statically defined with Name() */ ApCheckForPredefinedObject (Op, Op->Asl.NameSeg); /* Special typechecking for _HID */ if (ACPI_COMPARE_NAMESEG (METHOD_NAME__HID, Op->Asl.NameSeg)) { Next = Op->Asl.Child->Asl.Next; AnCheckId (Next, ASL_TYPE_HID); } /* Special typechecking for _CID */ else if (ACPI_COMPARE_NAMESEG (METHOD_NAME__CID, Op->Asl.NameSeg)) { Next = Op->Asl.Child->Asl.Next; if ((Next->Asl.ParseOpcode == PARSEOP_PACKAGE) || (Next->Asl.ParseOpcode == PARSEOP_VAR_PACKAGE)) { Next = Next->Asl.Child; while (Next) { AnCheckId (Next, ASL_TYPE_CID); Next = Next->Asl.Next; } } else { AnCheckId (Next, ASL_TYPE_CID); } } break; default: break; } /* Check for named object creation within a non-serialized method */ MtCheckNamedObjectInMethod (Op, MethodInfo); return (AE_OK); } /******************************************************************************* * * FUNCTION: MtProcessTypeOp * * PARAMETERS: Op - Op representing a btype * * RETURN: Btype represented by Op * * DESCRIPTION: Process a parse object that represents single parameter type or * a return type in method, function, and external declarations. * ******************************************************************************/ UINT32 MtProcessTypeOp ( ACPI_PARSE_OBJECT *TypeOp) { UINT32 Btype = ACPI_BTYPE_ANY; while (TypeOp) { Btype |= AnMapObjTypeToBtype (TypeOp); TypeOp->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; TypeOp = TypeOp->Asl.Next; } return (Btype); } /******************************************************************************* * * FUNCTION: MtProcessParameterTypeList * * PARAMETERS: Op - Op representing a btype * * RETURN: Btype represented by Op * * DESCRIPTION: Process a parse object that represents a parameter type list in * method, function, and external declarations. * ******************************************************************************/ UINT8 MtProcessParameterTypeList ( ACPI_PARSE_OBJECT *ParamTypeOp, UINT32 *TypeList) { UINT8 ParameterCount = 0; if (ParamTypeOp && ParamTypeOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { /* Special case for a single parameter without braces */ TypeList[ParameterCount] = MtProcessTypeOp (ParamTypeOp); return (1); } while (ParamTypeOp) { TypeList[ParameterCount] = MtProcessTypeOp (ParamTypeOp->Asl.Child); ParameterCount++; ParamTypeOp = ParamTypeOp->Asl.Next; } return (ParameterCount); } /******************************************************************************* * * FUNCTION: MtCheckNamedObjectInMethod * * PARAMETERS: Op - Current parser op * MethodInfo - Info for method being parsed * * RETURN: None * * DESCRIPTION: Detect if a non-serialized method is creating a named object, * which could possibly cause problems if two threads execute * the method concurrently. Emit a remark in this case. * ******************************************************************************/ static void MtCheckNamedObjectInMethod ( ACPI_PARSE_OBJECT *Op, ASL_METHOD_INFO *MethodInfo) { const ACPI_OPCODE_INFO *OpInfo; char *ExternalPath; /* We don't care about actual method declarations or scopes */ if ((Op->Asl.AmlOpcode == AML_METHOD_OP) || (Op->Asl.AmlOpcode == AML_SCOPE_OP)) { return; } /* Determine if we are creating a named object within a method */ if (!MethodInfo) { return; } OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); if ((OpInfo->Class == AML_CLASS_NAMED_OBJECT) && (Op->Asl.AmlOpcode != AML_FIELD_OP)) { /* * 1) Mark the method as a method that creates named objects. * * 2) Issue a remark indicating the inefficiency of creating named * objects within a method (Except for compiler-emitted temporary * variables). * * 3) If the method is non-serialized, emit a remark that the method * should be serialized. * * Reason: If a thread blocks within the method for any reason, and * another thread enters the method, the method will fail because * an attempt will be made to create the same object twice. * * Note: The Field opcode is disallowed here because Field() does not * create a new named object. */ ExternalPath = AcpiNsGetNormalizedPathname (MethodInfo->Op->Asl.Node, TRUE); /* No error for compiler temp variables (name starts with "_T_") */ if ((Op->Asl.NameSeg[0] != '_') && (Op->Asl.NameSeg[1] != 'T') && (Op->Asl.NameSeg[2] != '_')) { AslError (ASL_REMARK, ASL_MSG_NAMED_OBJECT_CREATION, Op, ExternalPath); } MethodInfo->CreatesNamedObjects = TRUE; if (!MethodInfo->ShouldBeSerialized) { AslError (ASL_REMARK, ASL_MSG_SERIALIZED_REQUIRED, MethodInfo->Op, ExternalPath); /* Emit message only ONCE per method */ MethodInfo->ShouldBeSerialized = TRUE; } if (ExternalPath) { ACPI_FREE (ExternalPath); } } } /******************************************************************************* * * FUNCTION: MtCheckStaticOperationRegionInMethod * * PARAMETERS: Op - Current parser op * * RETURN: None * * DESCRIPTION: Warns if an Operation Region with static address or length * is declared inside a control method * ******************************************************************************/ static void MtCheckStaticOperationRegionInMethod( ACPI_PARSE_OBJECT* Op) { ACPI_PARSE_OBJECT* AddressOp; ACPI_PARSE_OBJECT* LengthOp; if (Op->Asl.ParseOpcode != PARSEOP_OPERATIONREGION) { return; } /* * OperationRegion should have 4 arguments defined. At this point, we * assume that the parse tree is well-formed. */ AddressOp = Op->Asl.Child->Asl.Next->Asl.Next; LengthOp = Op->Asl.Child->Asl.Next->Asl.Next->Asl.Next; if (UtGetParentMethodOp (Op) && AddressOp->Asl.ParseOpcode == PARSEOP_INTEGER && LengthOp->Asl.ParseOpcode == PARSEOP_INTEGER) { /* * At this point, a static operation region declared inside of a * control method has been found. Throw a warning because this is * highly inefficient. */ AslError(ASL_WARNING, ASL_MSG_STATIC_OPREGION_IN_METHOD, Op, NULL); } return; } /******************************************************************************* * * FUNCTION: MtMethodAnalysisWalkEnd * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Ascending callback for analysis walk. Complete method * return analysis. * ******************************************************************************/ ACPI_STATUS MtMethodAnalysisWalkEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ASL_ANALYSIS_WALK_INFO *WalkInfo = (ASL_ANALYSIS_WALK_INFO *) Context; ASL_METHOD_INFO *MethodInfo = WalkInfo->MethodStack; char *ExternalPath; switch (Op->Asl.ParseOpcode) { case PARSEOP_METHOD: case PARSEOP_RETURN: if (!MethodInfo) { printf ("No method info for method! [%s]\n", Op->Asl.Namepath); AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Op, "No method info for this method"); CmCleanupAndExit (); return (AE_AML_INTERNAL); } break; default: break; } switch (Op->Asl.ParseOpcode) { case PARSEOP_METHOD: WalkInfo->MethodStack = MethodInfo->Next; /* * Check if there is no return statement at the end of the * method AND we can actually get there -- i.e., the execution * of the method can possibly terminate without a return statement. */ if ((!AnLastStatementIsReturn (Op)) && (!(Op->Asl.CompileFlags & OP_HAS_NO_EXIT))) { /* * No return statement, and execution can possibly exit * via this path. This is equivalent to Return () */ MethodInfo->NumReturnNoValue++; } /* * Check for case where some return statements have a return value * and some do not. Exit without a return statement is a return with * no value */ if (MethodInfo->NumReturnNoValue && MethodInfo->NumReturnWithValue) { ExternalPath = AcpiNsGetNormalizedPathname (Op->Asl.Node, TRUE); AslError (ASL_WARNING, ASL_MSG_RETURN_TYPES, Op, ExternalPath); if (ExternalPath) { ACPI_FREE (ExternalPath); } } /* * If there are any RETURN() statements with no value, or there is a * control path that allows the method to exit without a return value, * we mark the method as a method that does not return a value. This * knowledge can be used to check method invocations that expect a * returned value. */ if (MethodInfo->NumReturnNoValue) { if (MethodInfo->NumReturnWithValue) { Op->Asl.CompileFlags |= OP_METHOD_SOME_NO_RETVAL; } else { Op->Asl.CompileFlags |= OP_METHOD_NO_RETVAL; } } /* * Check predefined method names for correct return behavior * and correct number of arguments. Also, some special checks * For GPE and _REG methods. */ if (ApCheckForPredefinedMethod (Op, MethodInfo)) { /* Special check for two names like _L01 and _E01 in same scope */ ApCheckForGpeNameConflict (Op); /* * Special check for _REG: Must have an operation region definition * within the same scope! */ ApCheckRegMethod (Op); } ACPI_FREE (MethodInfo); break; case PARSEOP_NAME: /* Special check for two names like _L01 and _E01 in same scope */ ApCheckForGpeNameConflict (Op); break; case PARSEOP_RETURN: /* * If the parent is a predefined method name, attempt to typecheck * the return value. Only static types can be validated. */ ApCheckPredefinedReturnValue (Op, MethodInfo); /* * The parent block does not "exit" and continue execution -- the * method is terminated here with the Return() statement. */ Op->Asl.Parent->Asl.CompileFlags |= OP_HAS_NO_EXIT; /* Used in the "typing" pass later */ Op->Asl.ParentMethod = MethodInfo->Op; /* * If there is a peer node after the return statement, then this * node is unreachable code -- i.e., it won't be executed because of * the preceding Return() statement. */ if (Op->Asl.Next) { AslError (ASL_WARNING, ASL_MSG_UNREACHABLE_CODE, Op->Asl.Next, NULL); } break; case PARSEOP_IF: if ((Op->Asl.CompileFlags & OP_HAS_NO_EXIT) && (Op->Asl.Next) && (Op->Asl.Next->Asl.ParseOpcode == PARSEOP_ELSE)) { /* * This IF has a corresponding ELSE. The IF block has no exit, * (it contains an unconditional Return) * mark the ELSE block to remember this fact. */ Op->Asl.Next->Asl.CompileFlags |= OP_IF_HAS_NO_EXIT; } break; case PARSEOP_ELSE: if ((Op->Asl.CompileFlags & OP_HAS_NO_EXIT) && (Op->Asl.CompileFlags & OP_IF_HAS_NO_EXIT)) { /* * This ELSE block has no exit and the corresponding IF block * has no exit either. Therefore, the parent node has no exit. */ Op->Asl.Parent->Asl.CompileFlags |= OP_HAS_NO_EXIT; } break; default: if ((Op->Asl.CompileFlags & OP_HAS_NO_EXIT) && (Op->Asl.Parent)) { /* If this node has no exit, then the parent has no exit either */ Op->Asl.Parent->Asl.CompileFlags |= OP_HAS_NO_EXIT; } break; } return (AE_OK); } src/acpica/source/compiler/aslnamesp.c000066400000000000000000000457611465205512700203520ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslnamesp - Namespace output file generation * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acnamesp.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslnamesp") /* Local prototypes */ static ACPI_STATUS NsDoOneNamespaceObject ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); static ACPI_STATUS NsDoOnePathname ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); /******************************************************************************* * * FUNCTION: NsSetupNamespaceListing * * PARAMETERS: Handle - local file handle * * RETURN: None * * DESCRIPTION: Set the namespace output file to the input handle * ******************************************************************************/ void NsSetupNamespaceListing ( void *Handle) { AslGbl_NsOutputFlag = TRUE; AslGbl_Files[ASL_FILE_NAMESPACE_OUTPUT].Handle = Handle; } /******************************************************************************* * * FUNCTION: NsDisplayNamespace * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Walk the namespace an display information about each node * in the tree. Information is written to the optional * namespace output file. * ******************************************************************************/ ACPI_STATUS NsDisplayNamespace ( void) { ACPI_STATUS Status; if (!AslGbl_NsOutputFlag) { return (AE_OK); } AslGbl_NumNamespaceObjects = 0; /* File header */ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "Contents of ACPI Namespace\n\n" "Count Depth Name - Type\n\n"); /* Walk entire namespace from the root */ Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, FALSE, NsDoOneNamespaceObject, NULL, NULL, NULL); if (ACPI_FAILURE (Status)) { return (Status); } /* Print the full pathname for each namespace node in the common namespace */ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "\nNamespace pathnames and where declared:\n" "\n\n"); Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, FALSE, NsDoOnePathname, NULL, NULL, NULL); /* * We just dumped the entire common namespace, we don't want to do it * again for other input files. */ AslGbl_NsOutputFlag = FALSE; return (Status); } /******************************************************************************* * * FUNCTION: NsDoOneNamespaceObject * * PARAMETERS: ACPI_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Dump a namespace object to the namespace output file. * Called during the walk of the namespace to dump all objects. * ******************************************************************************/ static ACPI_STATUS NsDoOneNamespaceObject ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_PARSE_OBJECT *Op; AslGbl_NumNamespaceObjects++; FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "%5u [%u] %*s %4.4s - %s", AslGbl_NumNamespaceObjects, Level, (Level * 3), " ", &Node->Name.Ascii[0], AcpiUtGetTypeName (Node->Type)); Op = Node->Op; ObjDesc = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node->Object); if (!Op) { FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "\n"); return (AE_OK); } if ((ObjDesc) && (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND)) { switch (Node->Type) { case ACPI_TYPE_INTEGER: FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Initial Value 0x%8.8X%8.8X]", ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); break; case ACPI_TYPE_STRING: FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Initial Value \"%s\"]", ObjDesc->String.Pointer); break; default: /* Nothing to do for other types */ break; } } else { switch (Node->Type) { case ACPI_TYPE_INTEGER: if (Op->Asl.ParseOpcode == PARSEOP_NAME) { Op = Op->Asl.Child; } if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING)) { Op = Op->Asl.Next; } FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Initial Value 0x%8.8X%8.8X]", ACPI_FORMAT_UINT64 (Op->Asl.Value.Integer)); break; case ACPI_TYPE_STRING: if (Op->Asl.ParseOpcode == PARSEOP_NAME) { Op = Op->Asl.Child; } if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING)) { Op = Op->Asl.Next; } FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Initial Value \"%s\"]", Op->Asl.Value.String); break; case ACPI_TYPE_LOCAL_REGION_FIELD: if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING)) { Op = Op->Asl.Child; } FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Offset 0x%04X Length 0x%04X bits]", Op->Asl.Parent->Asl.ExtraValue, (UINT32) Op->Asl.Value.Integer); break; case ACPI_TYPE_BUFFER_FIELD: switch (Op->Asl.ParseOpcode) { case PARSEOP_CREATEBYTEFIELD: FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [BYTE ( 8 bit)]"); break; case PARSEOP_CREATEDWORDFIELD: FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [DWORD (32 bit)]"); break; case PARSEOP_CREATEQWORDFIELD: FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [QWORD (64 bit)]"); break; case PARSEOP_CREATEWORDFIELD: FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [WORD (16 bit)]"); break; case PARSEOP_CREATEBITFIELD: FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [BIT ( 1 bit)]"); break; case PARSEOP_CREATEFIELD: FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Arbitrary Bit Field]"); break; default: break; } break; case ACPI_TYPE_PACKAGE: if (Op->Asl.ParseOpcode == PARSEOP_NAME) { Op = Op->Asl.Child; } if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING)) { Op = Op->Asl.Next; } Op = Op->Asl.Child; if ((Op->Asl.ParseOpcode == PARSEOP_BYTECONST) || (Op->Asl.ParseOpcode == PARSEOP_RAW_DATA)) { FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Initial Length 0x%.2X elements]", (UINT32) Op->Asl.Value.Integer); } break; case ACPI_TYPE_BUFFER: if (Op->Asl.ParseOpcode == PARSEOP_NAME) { Op = Op->Asl.Child; } if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING)) { Op = Op->Asl.Next; } Op = Op->Asl.Child; if (Op && (Op->Asl.ParseOpcode == PARSEOP_INTEGER)) { FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Initial Length 0x%.2X bytes]", (UINT32) Op->Asl.Value.Integer); } break; case ACPI_TYPE_METHOD: FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Code Length 0x%.4X bytes]", Op->Asl.AmlSubtreeLength); break; case ACPI_TYPE_LOCAL_RESOURCE: FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Desc Offset 0x%.4X Bytes]", Node->Value); break; case ACPI_TYPE_LOCAL_RESOURCE_FIELD: FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Field Offset 0x%.4X Bits 0x%.4X Bytes] ", Node->Value, Node->Value / 8); if (Node->Flags & ANOBJ_IS_REFERENCED) { FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "Referenced"); } else { FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "Name not referenced"); } break; default: /* Nothing to do for other types */ break; } } FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "\n"); return (AE_OK); } /******************************************************************************* * * FUNCTION: NsDoOnePathname * * PARAMETERS: ACPI_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Print the full pathname and additional info for a namespace * node. * ******************************************************************************/ static ACPI_STATUS NsDoOnePathname ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; ACPI_STATUS Status; ACPI_BUFFER TargetPath; /* Ignore predefined namespace nodes and External declarations */ if (!Node->Op || (Node->Flags & ANOBJ_IS_EXTERNAL)) { return (AE_OK); } TargetPath.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiNsHandleToPathname (Node, &TargetPath, FALSE); if (ACPI_FAILURE (Status)) { return (Status); } /* * Print the full pathname (and other information) * for each namespace node in the common namespace */ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "%-41s %-12s %s, %u\n", ACPI_CAST_PTR (char, TargetPath.Pointer), AcpiUtGetTypeName (Node->Type), Node->Op->Asl.Filename, Node->Op->Asl.LogicalLineNumber); ACPI_FREE (TargetPath.Pointer); return (AE_OK); } src/acpica/source/compiler/asloffset.c000066400000000000000000000521461465205512700203500ustar00rootroot00000000000000/****************************************************************************** * * Module Name: asloffset - Generate a C "offset table" for BIOS use. * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "amlcode.h" #include "acnamesp.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("asloffset") /* Local prototypes */ static void LsEmitOffsetTableEntry ( UINT32 FileId, ACPI_NAMESPACE_NODE *Node, UINT32 NamepathOffset, UINT32 Offset, char *OpName, UINT64 Value, UINT8 AmlOpcode, UINT16 ParentOpcode); /******************************************************************************* * * FUNCTION: LsAmlOffsetWalk * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Process one node during a offset table file generation. * * Three types of objects are currently emitted to the offset table: * 1) Tagged (named) resource descriptors * 2) Named integer objects with constant integer values * 3) Named package objects * 4) Operation Regions that have constant Offset (address) parameters * 5) Control methods * * The offset table allows the BIOS to dynamically update the values of these * objects at boot time. * ******************************************************************************/ ACPI_STATUS LsAmlOffsetWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { UINT32 FileId = (UINT32) ACPI_TO_INTEGER (Context); ACPI_NAMESPACE_NODE *Node; UINT32 Length; UINT32 NamepathOffset; UINT32 DataOffset; ACPI_PARSE_OBJECT *NextOp; /* Ignore actual data blocks for resource descriptors */ if (Op->Asl.CompileFlags & OP_IS_RESOURCE_DATA) { return (AE_OK); /* Do NOT update the global AML offset */ } /* We are only interested in named objects (have a namespace node) */ Node = Op->Asl.Node; if (!Node) { AslGbl_CurrentAmlOffset += Op->Asl.FinalAmlLength; return (AE_OK); } /* Named resource descriptor (has a descriptor tag) */ if ((Node->Type == ACPI_TYPE_LOCAL_RESOURCE) && (Op->Asl.CompileFlags & OP_IS_RESOURCE_DESC)) { LsEmitOffsetTableEntry (FileId, Node, 0, AslGbl_CurrentAmlOffset, Op->Asl.ParseOpName, 0, Op->Asl.Extra, AML_BUFFER_OP); AslGbl_CurrentAmlOffset += Op->Asl.FinalAmlLength; return (AE_OK); } switch (Op->Asl.AmlOpcode) { case AML_NAME_OP: /* Named object -- Name (NameString, DataRefObject) */ if (!Op->Asl.Child) { FlPrintFile (FileId, "%s NO CHILD!\n", AslGbl_MsgBuffer); return (AE_OK); } Length = Op->Asl.FinalAmlLength; /* Get to the NameSeg/NamePath Op (and length of the name) */ Op = Op->Asl.Child; /* Get offset of last nameseg and the actual data */ NamepathOffset = AslGbl_CurrentAmlOffset + Length + (Op->Asl.FinalAmlLength - ACPI_NAMESEG_SIZE); DataOffset = AslGbl_CurrentAmlOffset + Length + Op->Asl.FinalAmlLength; /* Get actual value associated with the name */ Op = Op->Asl.Next; switch (Op->Asl.AmlOpcode) { case AML_BYTE_OP: case AML_WORD_OP: case AML_DWORD_OP: case AML_QWORD_OP: /* The +1 is to handle the integer size prefix (opcode) */ LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, (DataOffset + 1), Op->Asl.ParseOpName, Op->Asl.Value.Integer, (UINT8) Op->Asl.AmlOpcode, AML_NAME_OP); break; case AML_ONE_OP: case AML_ONES_OP: case AML_ZERO_OP: /* For these, offset will point to the opcode */ LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, DataOffset, Op->Asl.ParseOpName, Op->Asl.Value.Integer, (UINT8) Op->Asl.AmlOpcode, AML_NAME_OP); break; case AML_PACKAGE_OP: case AML_VARIABLE_PACKAGE_OP: /* Get the package element count */ NextOp = Op->Asl.Child; LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, DataOffset, Op->Asl.ParseOpName, NextOp->Asl.Value.Integer, (UINT8) Op->Asl.AmlOpcode, AML_NAME_OP); break; default: break; } AslGbl_CurrentAmlOffset += Length; return (AE_OK); case AML_REGION_OP: /* OperationRegion (NameString, RegionSpace, RegionOffset, RegionLength) */ Length = Op->Asl.FinalAmlLength; /* Get the name/namepath node */ NextOp = Op->Asl.Child; /* Get offset of last nameseg and the actual data */ NamepathOffset = AslGbl_CurrentAmlOffset + Length + (NextOp->Asl.FinalAmlLength - ACPI_NAMESEG_SIZE); DataOffset = AslGbl_CurrentAmlOffset + Length + (NextOp->Asl.FinalAmlLength + 1); /* Get the SpaceId node, then the Offset (address) node */ NextOp = NextOp->Asl.Next; NextOp = NextOp->Asl.Next; switch (NextOp->Asl.AmlOpcode) { /* * We are only interested in integer constants that can be changed * at boot time. Note, the One/Ones/Zero opcodes are considered * non-changeable, so we ignore them here. */ case AML_BYTE_OP: case AML_WORD_OP: case AML_DWORD_OP: case AML_QWORD_OP: LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, (DataOffset + 1), Op->Asl.ParseOpName, NextOp->Asl.Value.Integer, (UINT8) NextOp->Asl.AmlOpcode, AML_REGION_OP); AslGbl_CurrentAmlOffset += Length; return (AE_OK); default: break; } break; case AML_METHOD_OP: /* Method (Namepath, ...) */ Length = Op->Asl.FinalAmlLength; /* Get the NameSeg/NamePath Op */ NextOp = Op->Asl.Child; /* Get offset of last nameseg and the actual data (flags byte) */ NamepathOffset = AslGbl_CurrentAmlOffset + Length + (NextOp->Asl.FinalAmlLength - ACPI_NAMESEG_SIZE); DataOffset = AslGbl_CurrentAmlOffset + Length + NextOp->Asl.FinalAmlLength; /* Get the flags byte Op */ NextOp = NextOp->Asl.Next; LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, DataOffset, Op->Asl.ParseOpName, NextOp->Asl.Value.Integer, (UINT8) Op->Asl.AmlOpcode, AML_METHOD_OP); break; case AML_PROCESSOR_OP: /* Processor (Namepath, ProcessorId, Address, Length) */ Length = Op->Asl.FinalAmlLength; NextOp = Op->Asl.Child; /* Get Namepath */ /* Get offset of last nameseg and the actual data (PBlock address) */ NamepathOffset = AslGbl_CurrentAmlOffset + Length + (NextOp->Asl.FinalAmlLength - ACPI_NAMESEG_SIZE); DataOffset = AslGbl_CurrentAmlOffset + Length + (NextOp->Asl.FinalAmlLength + 1); NextOp = NextOp->Asl.Next; /* Get ProcessorID (BYTE) */ NextOp = NextOp->Asl.Next; /* Get Address (DWORD) */ LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, DataOffset, Op->Asl.ParseOpName, NextOp->Asl.Value.Integer, (UINT8) AML_DWORD_OP, AML_PROCESSOR_OP); break; case AML_DEVICE_OP: case AML_SCOPE_OP: case AML_THERMAL_ZONE_OP: /* Device/Scope/ThermalZone (Namepath) */ Length = Op->Asl.FinalAmlLength; NextOp = Op->Asl.Child; /* Get Namepath */ /* Get offset of last nameseg */ NamepathOffset = AslGbl_CurrentAmlOffset + Length + (NextOp->Asl.FinalAmlLength - ACPI_NAMESEG_SIZE); LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, 0, Op->Asl.ParseOpName, 0, (UINT8) 0, Op->Asl.AmlOpcode); break; default: break; } AslGbl_CurrentAmlOffset += Op->Asl.FinalAmlLength; return (AE_OK); } /******************************************************************************* * * FUNCTION: LsEmitOffsetTableEntry * * PARAMETERS: FileId - ID of current listing file * Node - Namespace node associated with the name * Offset - Offset of the value within the AML table * OpName - Name of the AML opcode * Value - Current value of the AML field * AmlOpcode - Opcode associated with the field * ObjectType - ACPI object type * * RETURN: None * * DESCRIPTION: Emit a line of the offset table (-so option) * ******************************************************************************/ static void LsEmitOffsetTableEntry ( UINT32 FileId, ACPI_NAMESPACE_NODE *Node, UINT32 NamepathOffset, UINT32 Offset, char *OpName, UINT64 Value, UINT8 AmlOpcode, UINT16 ParentOpcode) { ACPI_BUFFER TargetPath; ACPI_STATUS Status; /* Get the full pathname to the namespace node */ TargetPath.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiNsHandleToPathname (Node, &TargetPath, FALSE); if (ACPI_FAILURE (Status)) { return; } /* [1] - Skip the opening backslash for the path */ strcpy (AslGbl_MsgBuffer, "\""); strcat (AslGbl_MsgBuffer, &((char *) TargetPath.Pointer)[1]); strcat (AslGbl_MsgBuffer, "\","); ACPI_FREE (TargetPath.Pointer); /* * Max offset is 4G, constrained by 32-bit ACPI table length. * Max Length for Integers is 8 bytes. */ FlPrintFile (FileId, " {%-29s 0x%4.4X, 0x%8.8X, 0x%2.2X, 0x%8.8X, 0x%8.8X%8.8X}, /* %s */\n", AslGbl_MsgBuffer, ParentOpcode, NamepathOffset, AmlOpcode, Offset, ACPI_FORMAT_UINT64 (Value), OpName); } /******************************************************************************* * * FUNCTION: LsDoOffsetTableHeader, LsDoOffsetTableFooter * * PARAMETERS: FileId - ID of current listing file * * RETURN: None * * DESCRIPTION: Header and footer for the offset table file. * ******************************************************************************/ void LsDoOffsetTableHeader ( UINT32 FileId) { FlPrintFile (FileId, "#ifndef __AML_OFFSET_TABLE_H\n" "#define __AML_OFFSET_TABLE_H\n\n"); FlPrintFile (FileId, "typedef struct {\n" " char *Pathname; /* Full pathname (from root) to the object */\n" " unsigned short ParentOpcode; /* AML opcode for the parent object */\n" " unsigned long NamesegOffset; /* Offset of last nameseg in the parent namepath */\n" " unsigned char Opcode; /* AML opcode for the data */\n" " unsigned long Offset; /* Offset for the data */\n" " unsigned long long Value; /* Original value of the data (as applicable) */\n" "} AML_OFFSET_TABLE_ENTRY;\n\n"); FlPrintFile (FileId, "#endif /* __AML_OFFSET_TABLE_H */\n\n"); FlPrintFile (FileId, "/*\n" " * Information specific to the supported object types:\n" " *\n" " * Integers:\n" " * Opcode is the integer prefix, indicates length of the data\n" " * (One of: BYTE, WORD, DWORD, QWORD, ZERO, ONE, ONES)\n" " * Offset points to the actual integer data\n" " * Value is the existing value in the AML\n" " *\n" " * Packages:\n" " * Opcode is the package or var_package opcode\n" " * Offset points to the package opcode\n" " * Value is the package element count\n" " *\n" " * Operation Regions:\n" " * Opcode is the address integer prefix, indicates length of the data\n" " * Offset points to the region address\n" " * Value is the existing address value in the AML\n" " *\n" " * Control Methods:\n" " * Offset points to the method flags byte\n" " * Value is the existing flags value in the AML\n" " *\n" " * Processors:\n" " * Offset points to the first byte of the PBlock Address\n" " *\n" " * Resource Descriptors:\n" " * Opcode is the descriptor type\n" " * Offset points to the start of the descriptor\n" " *\n" " * Scopes/Devices/ThermalZones:\n" " * Nameseg offset only\n" " */\n"); FlPrintFile (FileId, "AML_OFFSET_TABLE_ENTRY %s_%s_OffsetTable[] =\n{\n", AslGbl_TableSignature, AslGbl_TableId); } void LsDoOffsetTableFooter ( UINT32 FileId) { FlPrintFile (FileId, " {NULL,0,0,0,0,0} /* Table terminator */\n};\n\n"); AslGbl_CurrentAmlOffset = 0; } src/acpica/source/compiler/aslopcodes.c000066400000000000000000000711251465205512700205140ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslopcode - AML opcode generation * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "amlcode.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslopcodes") /* Local prototypes */ static void OpcDoAccessAs ( ACPI_PARSE_OBJECT *Op); static void OpcDoConnection ( ACPI_PARSE_OBJECT *Op); static void OpcDoUnicode ( ACPI_PARSE_OBJECT *Op); static void OpcDoEisaId ( ACPI_PARSE_OBJECT *Op); static void OpcDoUuId ( ACPI_PARSE_OBJECT *Op); /******************************************************************************* * * FUNCTION: OpcAmlOpcodeUpdateWalk * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Opcode update walk, ascending callback * ******************************************************************************/ ACPI_STATUS OpcAmlOpcodeUpdateWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { /* * Handle the Package() case where the actual opcode cannot be determined * until the PackageLength operand has been folded and minimized. * (PackageOp versus VarPackageOp) * * This is (as of ACPI 3.0) the only case where the AML opcode can change * based upon the value of a parameter. * * The parser always inserts a VarPackage opcode, which can possibly be * optimized to a Package opcode. */ if (Op->Asl.ParseOpcode == PARSEOP_VAR_PACKAGE) { OpnDoPackage (Op); } return (AE_OK); } /******************************************************************************* * * FUNCTION: OpcAmlOpcodeWalk * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Parse tree walk to generate both the AML opcodes and the AML * operands. * ******************************************************************************/ ACPI_STATUS OpcAmlOpcodeWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { AslGbl_TotalParseNodes++; OpcGenerateAmlOpcode (Op); OpnGenerateAmlOperands (Op); return (AE_OK); } /******************************************************************************* * * FUNCTION: OpcGetIntegerWidth * * PARAMETERS: Op - DEFINITION BLOCK op * * RETURN: none * * DESCRIPTION: Extract integer width from the table revision * ******************************************************************************/ void OpcGetIntegerWidth ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Child; if (!Op) { return; } if (AslGbl_RevisionOverride) { AcpiUtSetIntegerWidth (AslGbl_RevisionOverride); } else { Child = Op->Asl.Child; Child = Child->Asl.Next; Child = Child->Asl.Next; /* Use the revision to set the integer width */ AcpiUtSetIntegerWidth ((UINT8) Child->Asl.Value.Integer); } } /******************************************************************************* * * FUNCTION: OpcSetOptimalIntegerSize * * PARAMETERS: Op - A parse tree node * * RETURN: Integer width, in bytes. Also sets the node AML opcode to the * optimal integer AML prefix opcode. * * DESCRIPTION: Determine the optimal AML encoding of an integer. All leading * zeros can be truncated to squeeze the integer into the * minimal number of AML bytes. * ******************************************************************************/ UINT32 OpcSetOptimalIntegerSize ( ACPI_PARSE_OBJECT *Op) { #if 0 /* * TBD: - we don't want to optimize integers in the block header, but the * code below does not work correctly. */ if (Op->Asl.Parent && Op->Asl.Parent->Asl.Parent && (Op->Asl.Parent->Asl.Parent->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK)) { return (0); } #endif /* * Check for the special AML integers first - Zero, One, Ones. * These are single-byte opcodes that are the smallest possible * representation of an integer. * * This optimization is optional. */ if (AslGbl_IntegerOptimizationFlag) { switch (Op->Asl.Value.Integer) { case 0: Op->Asl.AmlOpcode = AML_ZERO_OP; AslError (ASL_OPTIMIZATION, ASL_MSG_INTEGER_OPTIMIZATION, Op, "Zero"); return (1); case 1: Op->Asl.AmlOpcode = AML_ONE_OP; AslError (ASL_OPTIMIZATION, ASL_MSG_INTEGER_OPTIMIZATION, Op, "One"); return (1); case ACPI_UINT32_MAX: /* Check for table integer width (32 or 64) */ if (AcpiGbl_IntegerByteWidth == 4) { Op->Asl.AmlOpcode = AML_ONES_OP; AslError (ASL_OPTIMIZATION, ASL_MSG_INTEGER_OPTIMIZATION, Op, "Ones"); return (1); } break; case ACPI_UINT64_MAX: /* Check for table integer width (32 or 64) */ if (AcpiGbl_IntegerByteWidth == 8) { Op->Asl.AmlOpcode = AML_ONES_OP; AslError (ASL_OPTIMIZATION, ASL_MSG_INTEGER_OPTIMIZATION, Op, "Ones"); return (1); } break; default: break; } } /* Find the best fit using the various AML integer prefixes */ if (Op->Asl.Value.Integer <= ACPI_UINT8_MAX) { Op->Asl.AmlOpcode = AML_BYTE_OP; return (1); } if (Op->Asl.Value.Integer <= ACPI_UINT16_MAX) { Op->Asl.AmlOpcode = AML_WORD_OP; return (2); } if (Op->Asl.Value.Integer <= ACPI_UINT32_MAX) { Op->Asl.AmlOpcode = AML_DWORD_OP; return (4); } else /* 64-bit integer */ { if (AcpiGbl_IntegerByteWidth == 4) { AslError (ASL_WARNING, ASL_MSG_INTEGER_LENGTH, Op, NULL); if (!AslGbl_IgnoreErrors) { /* Truncate the integer to 32-bit */ Op->Asl.Value.Integer &= ACPI_UINT32_MAX; /* Now set the optimal integer size */ return (OpcSetOptimalIntegerSize (Op)); } } Op->Asl.AmlOpcode = AML_QWORD_OP; return (8); } } /******************************************************************************* * * FUNCTION: OpcDoAccessAs * * PARAMETERS: Op - Parse node * * RETURN: None * * DESCRIPTION: Implement the ACCESS_AS ASL keyword. * ******************************************************************************/ static void OpcDoAccessAs ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *TypeOp; ACPI_PARSE_OBJECT *AttribOp; ACPI_PARSE_OBJECT *LengthOp; UINT8 Attribute; Op->Asl.AmlOpcodeLength = 1; TypeOp = Op->Asl.Child; /* First child is the access type */ TypeOp->Asl.AmlOpcode = AML_RAW_DATA_BYTE; TypeOp->Asl.ParseOpcode = PARSEOP_RAW_DATA; /* Second child is the optional access attribute */ AttribOp = TypeOp->Asl.Next; if (AttribOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { AttribOp->Asl.Value.Integer = 0; } AttribOp->Asl.AmlOpcode = AML_RAW_DATA_BYTE; AttribOp->Asl.ParseOpcode = PARSEOP_RAW_DATA; /* Only a few AccessAttributes support AccessLength */ Attribute = (UINT8) AttribOp->Asl.Value.Integer; if ((Attribute != AML_FIELD_ATTRIB_BYTES) && (Attribute != AML_FIELD_ATTRIB_RAW_BYTES) && (Attribute != AML_FIELD_ATTRIB_RAW_PROCESS_BYTES)) { return; } Op->Asl.AmlOpcode = AML_FIELD_EXT_ACCESS_OP; /* * Child of Attributes is the AccessLength (required for Multibyte, * RawBytes, RawProcess.) */ LengthOp = AttribOp->Asl.Child; if (!LengthOp) { return; } /* TBD: probably can remove */ if (LengthOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { LengthOp->Asl.Value.Integer = 16; } LengthOp->Asl.AmlOpcode = AML_RAW_DATA_BYTE; LengthOp->Asl.ParseOpcode = PARSEOP_RAW_DATA; } /******************************************************************************* * * FUNCTION: OpcDoConnection * * PARAMETERS: Op - Parse node * * RETURN: None * * DESCRIPTION: Implement the Connection ASL keyword. * ******************************************************************************/ static void OpcDoConnection ( ACPI_PARSE_OBJECT *Op) { ASL_RESOURCE_NODE *Rnode; ACPI_PARSE_OBJECT *BufferOp; ACPI_PARSE_OBJECT *BufferLengthOp; ACPI_PARSE_OBJECT *BufferDataOp; ASL_RESOURCE_INFO Info; UINT8 State; Op->Asl.AmlOpcodeLength = 1; if (Op->Asl.Child->Asl.AmlOpcode == AML_INT_NAMEPATH_OP) { return; } BufferOp = Op->Asl.Child; BufferLengthOp = BufferOp->Asl.Child; BufferDataOp = BufferLengthOp->Asl.Next; Info.DescriptorTypeOp = BufferDataOp->Asl.Next; Info.CurrentByteOffset = 0; State = ACPI_RSTATE_NORMAL; Rnode = RsDoOneResourceDescriptor (&Info, &State); if (!Rnode) { return; /* error */ } /* * Transform the nodes into the following * * Op -> AML_BUFFER_OP * First Child -> BufferLength * Second Child -> Descriptor Buffer (raw byte data) */ BufferOp->Asl.ParseOpcode = PARSEOP_BUFFER; BufferOp->Asl.AmlOpcode = AML_BUFFER_OP; BufferOp->Asl.CompileFlags = OP_AML_PACKAGE | OP_IS_RESOURCE_DESC; UtSetParseOpName (BufferOp); BufferLengthOp->Asl.ParseOpcode = PARSEOP_INTEGER; BufferLengthOp->Asl.Value.Integer = Rnode->BufferLength; (void) OpcSetOptimalIntegerSize (BufferLengthOp); UtSetParseOpName (BufferLengthOp); BufferDataOp->Asl.ParseOpcode = PARSEOP_RAW_DATA; BufferDataOp->Asl.AmlOpcode = AML_RAW_DATA_CHAIN; BufferDataOp->Asl.AmlOpcodeLength = 0; BufferDataOp->Asl.AmlLength = Rnode->BufferLength; BufferDataOp->Asl.Value.Buffer = (UINT8 *) Rnode; UtSetParseOpName (BufferDataOp); } /******************************************************************************* * * FUNCTION: OpcDoUnicode * * PARAMETERS: Op - Parse node * * RETURN: None * * DESCRIPTION: Implement the UNICODE ASL "macro". Convert the input string * to a unicode buffer. There is no Unicode AML opcode. * * Note: The Unicode string is 16 bits per character, no leading signature, * with a 16-bit terminating NULL. * ******************************************************************************/ static void OpcDoUnicode ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *InitializerOp; UINT32 Length; UINT32 Count; UINT32 i; UINT8 *AsciiString; UINT16 *UnicodeString; ACPI_PARSE_OBJECT *BufferLengthOp; /* Change op into a buffer object */ Op->Asl.CompileFlags &= ~OP_COMPILE_TIME_CONST; Op->Asl.ParseOpcode = PARSEOP_BUFFER; UtSetParseOpName (Op); /* Buffer Length is first, followed by the string */ BufferLengthOp = Op->Asl.Child; InitializerOp = BufferLengthOp->Asl.Next; AsciiString = (UINT8 *) InitializerOp->Asl.Value.String; /* Create a new buffer for the Unicode string */ Count = strlen (InitializerOp->Asl.Value.String) + 1; Length = Count * sizeof (UINT16); UnicodeString = UtLocalCalloc (Length); /* Convert to Unicode string (including null terminator) */ for (i = 0; i < Count; i++) { UnicodeString[i] = (UINT16) AsciiString[i]; } /* * Just set the buffer size node to be the buffer length, regardless * of whether it was previously an integer or a default_arg placeholder */ BufferLengthOp->Asl.ParseOpcode = PARSEOP_INTEGER; BufferLengthOp->Asl.AmlOpcode = AML_DWORD_OP; BufferLengthOp->Asl.Value.Integer = Length; UtSetParseOpName (BufferLengthOp); (void) OpcSetOptimalIntegerSize (BufferLengthOp); /* The Unicode string is a raw data buffer */ InitializerOp->Asl.Value.Buffer = (UINT8 *) UnicodeString; InitializerOp->Asl.AmlOpcode = AML_RAW_DATA_BUFFER; InitializerOp->Asl.AmlLength = Length; InitializerOp->Asl.ParseOpcode = PARSEOP_RAW_DATA; InitializerOp->Asl.Child = NULL; UtSetParseOpName (InitializerOp); } /******************************************************************************* * * FUNCTION: OpcDoEisaId * * PARAMETERS: Op - Parse node * * RETURN: None * * DESCRIPTION: Convert a string EISA ID to numeric representation. See the * Pnp BIOS Specification for details. Here is an excerpt: * * A seven character ASCII representation of the product * identifier compressed into a 32-bit identifier. The seven * character ID consists of a three character manufacturer code, * a three character hexadecimal product identifier, and a one * character hexadecimal revision number. The manufacturer code * is a 3 uppercase character code that is compressed into 3 5-bit * values as follows: * 1) Find hex ASCII value for each letter * 2) Subtract 40h from each ASCII value * 3) Retain 5 least significant bits for each letter by * discarding upper 3 bits because they are always 0. * 4) Compressed code = concatenate 0 and the 3 5-bit values * * The format of the compressed product identifier is as follows: * Byte 0: Bit 7 - Reserved (0) * Bits 6-2: - 1st character of compressed mfg code * Bits 1-0 - Upper 2 bits of 2nd character of mfg code * Byte 1: Bits 7-5 - Lower 3 bits of 2nd character of mfg code * Bits 4-0 - 3rd character of mfg code * Byte 2: Bits 7-4 - 1st hex digit of product number * Bits 3-0 - 2nd hex digit of product number * Byte 3: Bits 7-4 - 3rd hex digit of product number * Bits 3-0 - Hex digit of the revision number * ******************************************************************************/ static void OpcDoEisaId ( ACPI_PARSE_OBJECT *Op) { UINT32 EisaId = 0; UINT32 BigEndianId; char *InString; ACPI_STATUS Status = AE_OK; UINT32 i; InString = (char *) Op->Asl.Value.String; /* * The EISAID string must be exactly 7 characters and of the form * "UUUXXXX" -- 3 uppercase letters and 4 hex digits (e.g., "PNP0001") */ if (strlen (InString) != 7) { Status = AE_BAD_PARAMETER; } else { /* Check all 7 characters for correct format */ for (i = 0; i < 7; i++) { /* First 3 characters must be uppercase letters */ if (i < 3) { if (!isupper ((int) InString[i])) { Status = AE_BAD_PARAMETER; } } /* Last 4 characters must be hex digits */ else if (!isxdigit ((int) InString[i])) { Status = AE_BAD_PARAMETER; } } } if (ACPI_FAILURE (Status)) { AslError (ASL_ERROR, ASL_MSG_INVALID_EISAID, Op, Op->Asl.Value.String); } else { /* Create ID big-endian first (bits are contiguous) */ BigEndianId = (UINT32) ((UINT8) (InString[0] - 0x40)) << 26 | (UINT32) ((UINT8) (InString[1] - 0x40)) << 21 | (UINT32) ((UINT8) (InString[2] - 0x40)) << 16 | (AcpiUtAsciiCharToHex (InString[3])) << 12 | (AcpiUtAsciiCharToHex (InString[4])) << 8 | (AcpiUtAsciiCharToHex (InString[5])) << 4 | AcpiUtAsciiCharToHex (InString[6]); /* Swap to little-endian to get final ID (see function header) */ EisaId = AcpiUtDwordByteSwap (BigEndianId); } /* * Morph the Op into an integer, regardless of whether there * was an error in the EISAID string */ Op->Asl.Value.Integer = EisaId; Op->Asl.CompileFlags &= ~OP_COMPILE_TIME_CONST; Op->Asl.ParseOpcode = PARSEOP_INTEGER; (void) OpcSetOptimalIntegerSize (Op); /* Op is now an integer */ UtSetParseOpName (Op); } /******************************************************************************* * * FUNCTION: OpcDoUuId * * PARAMETERS: Op - Parse node * * RETURN: None * * DESCRIPTION: Convert UUID string to 16-byte buffer * ******************************************************************************/ static void OpcDoUuId ( ACPI_PARSE_OBJECT *Op) { char *InString; UINT8 *Buffer; ACPI_STATUS Status = AE_OK; ACPI_PARSE_OBJECT *NewOp; InString = ACPI_CAST_PTR (char, Op->Asl.Value.String); Buffer = UtLocalCalloc (16); Status = AuValidateUuid (InString); if (ACPI_FAILURE (Status)) { AslError (ASL_ERROR, ASL_MSG_INVALID_UUID, Op, Op->Asl.Value.String); } else { /* Convert UUID string to a buffer, check for a known UUID */ AcpiUtConvertStringToUuid (InString, Buffer); if (!AcpiAhMatchUuid (Buffer)) { AslError (ASL_REMARK, ASL_MSG_UUID_NOT_FOUND, Op, NULL); } } /* Change Op to a Buffer */ Op->Asl.ParseOpcode = PARSEOP_BUFFER; Op->Common.AmlOpcode = AML_BUFFER_OP; /* Disable further optimization */ Op->Asl.CompileFlags &= ~OP_COMPILE_TIME_CONST; UtSetParseOpName (Op); /* Child node is the buffer length */ NewOp = TrAllocateOp (PARSEOP_INTEGER); NewOp->Asl.AmlOpcode = AML_BYTE_OP; NewOp->Asl.Value.Integer = 16; NewOp->Asl.Parent = Op; Op->Asl.Child = NewOp; Op = NewOp; /* Peer to the child is the raw buffer data */ NewOp = TrAllocateOp (PARSEOP_RAW_DATA); NewOp->Asl.AmlOpcode = AML_RAW_DATA_BUFFER; NewOp->Asl.AmlLength = 16; NewOp->Asl.Value.String = ACPI_CAST_PTR (char, Buffer); NewOp->Asl.Parent = Op->Asl.Parent; Op->Asl.Next = NewOp; } /******************************************************************************* * * FUNCTION: OpcGenerateAmlOpcode * * PARAMETERS: Op - Parse node * * RETURN: None * * DESCRIPTION: Generate the AML opcode associated with the node and its * parse (lex/flex) keyword opcode. Essentially implements * a mapping between the parse opcodes and the actual AML opcodes. * ******************************************************************************/ void OpcGenerateAmlOpcode ( ACPI_PARSE_OBJECT *Op) { UINT16 Index; Index = (UINT16) (Op->Asl.ParseOpcode - ASL_PARSE_OPCODE_BASE); Op->Asl.AmlOpcode = AslKeywordMapping[Index].AmlOpcode; Op->Asl.AcpiBtype = AslKeywordMapping[Index].AcpiBtype; Op->Asl.CompileFlags |= AslKeywordMapping[Index].Flags; if (!Op->Asl.Value.Integer) { Op->Asl.Value.Integer = AslKeywordMapping[Index].Value; } /* Special handling for some opcodes */ switch (Op->Asl.ParseOpcode) { case PARSEOP_INTEGER: /* * Set the opcode based on the size of the integer */ (void) OpcSetOptimalIntegerSize (Op); break; case PARSEOP_OFFSET: Op->Asl.AmlOpcodeLength = 1; break; case PARSEOP_ACCESSAS: OpcDoAccessAs (Op); break; case PARSEOP_CONNECTION: OpcDoConnection (Op); break; case PARSEOP_EISAID: OpcDoEisaId (Op); break; case PARSEOP_PRINTF: OpcDoPrintf (Op); break; case PARSEOP_FPRINTF: OpcDoFprintf (Op); break; case PARSEOP_TOPLD: OpcDoPld (Op); break; case PARSEOP_TOUUID: OpcDoUuId (Op); break; case PARSEOP_UNICODE: OpcDoUnicode (Op); break; case PARSEOP_INCLUDE: AslGbl_HasIncludeFiles = TRUE; break; case PARSEOP_TIMER: if (AcpiGbl_IntegerBitWidth == 32) { AslError (ASL_REMARK, ASL_MSG_TRUNCATION, Op, NULL); } break; default: /* Nothing to do for other opcodes */ break; } return; } src/acpica/source/compiler/asloperands.c000066400000000000000000001205721465205512700206740ustar00rootroot00000000000000/****************************************************************************** * * Module Name: asloperands - AML operand processing * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "amlcode.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("asloperands") /* Local prototypes */ static void OpnDoField ( ACPI_PARSE_OBJECT *Op); static void OpnDoBankField ( ACPI_PARSE_OBJECT *Op); static void OpnDoBuffer ( ACPI_PARSE_OBJECT *Op); static void OpnDoDefinitionBlock ( ACPI_PARSE_OBJECT *Op); static void OpnDoFieldCommon ( ACPI_PARSE_OBJECT *FieldOp, ACPI_PARSE_OBJECT *Op); static void OpnDoIndexField ( ACPI_PARSE_OBJECT *Op); static void OpnDoLoadTable ( ACPI_PARSE_OBJECT *Op); static void OpnDoMethod ( ACPI_PARSE_OBJECT *Op); static void OpnDoMutex ( ACPI_PARSE_OBJECT *Op); static void OpnDoRegion ( ACPI_PARSE_OBJECT *Op); static void OpnAttachNameToNode ( ACPI_PARSE_OBJECT *Op); /******************************************************************************* * * FUNCTION: OpnDoMutex * * PARAMETERS: Op - The parent parse node * * RETURN: None * * DESCRIPTION: Construct the operands for the MUTEX ASL keyword. * ******************************************************************************/ static void OpnDoMutex ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next; Next = Op->Asl.Child; Next = Next->Asl.Next; if (Next->Asl.Value.Integer > 15) { AslError (ASL_ERROR, ASL_MSG_SYNC_LEVEL, Next, NULL); } return; } /******************************************************************************* * * FUNCTION: OpnDoMethod * * PARAMETERS: Op - The parent parse node * * RETURN: None * * DESCRIPTION: Construct the operands for the METHOD ASL keyword. * ******************************************************************************/ static void OpnDoMethod ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next; /* Optional arguments for this opcode with defaults */ UINT8 NumArgs = 0; UINT8 Serialized = 0; UINT8 Concurrency = 0; UINT8 MethodFlags; /* Opcode and package length first */ /* Method name */ Next = Op->Asl.Child; /* Num args */ Next = Next->Asl.Next; if (Next->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { NumArgs = (UINT8) Next->Asl.Value.Integer; Next->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; } /* Serialized Flag */ Next = Next->Asl.Next; if (Next->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { Serialized = (UINT8) Next->Asl.Value.Integer; Next->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; } /* Concurrency value (valid values are 0-15) */ Next = Next->Asl.Next; if (Next->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { /* This is a ByteConstExpr, so eval the constant now */ OpcAmlConstantWalk (Next, 0, NULL); if (Next->Asl.Value.Integer > 15) { AslError (ASL_ERROR, ASL_MSG_SYNC_LEVEL, Next, NULL); } Concurrency = (UINT8) Next->Asl.Value.Integer; } /* Put the bits in their proper places */ MethodFlags = (UINT8) ((NumArgs & 0x7) | ((Serialized & 0x1) << 3) | ((Concurrency & 0xF) << 4)); /* Use the last node for the combined flags byte */ Next->Asl.Value.Integer = MethodFlags; Next->Asl.AmlOpcode = AML_RAW_DATA_BYTE; Next->Asl.AmlLength = 1; Next->Asl.ParseOpcode = PARSEOP_RAW_DATA; /* Save the arg count in the first node */ Op->Asl.Extra = NumArgs; } /******************************************************************************* * * FUNCTION: OpnDoFieldCommon * * PARAMETERS: FieldOp - Node for an ASL field * Op - The parent parse node * * RETURN: None * * DESCRIPTION: Construct the AML operands for the various field keywords, * FIELD, BANKFIELD, INDEXFIELD * ******************************************************************************/ static void OpnDoFieldCommon ( ACPI_PARSE_OBJECT *FieldOp, ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next; ACPI_PARSE_OBJECT *PkgLengthNode; UINT32 CurrentBitOffset; UINT32 NewBitOffset; UINT8 AccessType; UINT8 LockRule; UINT8 UpdateRule; UINT8 FieldFlags; UINT32 MinimumLength; /* AccessType -- not optional, so no need to check for DEFAULT_ARG */ AccessType = (UINT8) Op->Asl.Value.Integer; Op->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; /* Set the access type in the parent (field) node for use later */ FieldOp->Asl.Value.Integer = AccessType; /* LockRule -- not optional, so no need to check for DEFAULT_ARG */ Next = Op->Asl.Next; LockRule = (UINT8) Next->Asl.Value.Integer; Next->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; /* UpdateRule -- not optional, so no need to check for DEFAULT_ARG */ Next = Next->Asl.Next; UpdateRule = (UINT8) Next->Asl.Value.Integer; /* * Generate the flags byte. The various fields are already * in the right bit position via translation from the * keywords by the parser. */ FieldFlags = (UINT8) (AccessType | LockRule | UpdateRule); /* Use the previous node to be the FieldFlags node */ /* Set the node to RAW_DATA */ Next->Asl.Value.Integer = FieldFlags; Next->Asl.AmlOpcode = AML_RAW_DATA_BYTE; Next->Asl.AmlLength = 1; Next->Asl.ParseOpcode = PARSEOP_RAW_DATA; /* Process the FieldUnitList */ Next = Next->Asl.Next; CurrentBitOffset = 0; while (Next) { /* Save the offset of this field unit */ Next->Asl.ExtraValue = CurrentBitOffset; switch (Next->Asl.ParseOpcode) { case PARSEOP_ACCESSAS: PkgLengthNode = Next->Asl.Child; AccessType = (UINT8) PkgLengthNode->Asl.Value.Integer; /* Nothing additional to do */ break; case PARSEOP_OFFSET: /* New offset into the field */ PkgLengthNode = Next->Asl.Child; NewBitOffset = ((UINT32) PkgLengthNode->Asl.Value.Integer) * 8; /* * Examine the specified offset in relation to the * current offset counter. */ if (NewBitOffset < CurrentBitOffset) { /* * Not allowed to specify a backwards offset! * Issue error and ignore this node. */ AslError (ASL_ERROR, ASL_MSG_BACKWARDS_OFFSET, PkgLengthNode, NULL); Next->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; PkgLengthNode->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; } #ifdef _OBSOLETE_CODE /* * January 2022: removed this check due to complaints by users * for too many (invalid) remarks. */ else if (NewBitOffset == CurrentBitOffset) { /* * This Offset() operator is redundant and not needed, * because the offset value is the same as the current * offset. */ AslError (ASL_REMARK, ASL_MSG_OFFSET, PkgLengthNode, NULL); if (AslGbl_OptimizeTrivialParseNodes) { /* * Optimize this Offset() operator by removing/ignoring * it. Set the related nodes to default. */ Next->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; PkgLengthNode->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; AslError (ASL_OPTIMIZATION, ASL_MSG_OFFSET, PkgLengthNode, "Optimizer has removed statement"); } else { /* Optimization is disabled, treat as a valid Offset */ PkgLengthNode->Asl.Value.Integer = NewBitOffset - CurrentBitOffset; CurrentBitOffset = NewBitOffset; } } #endif else { /* * Valid new offset - set the value to be inserted into the AML * and update the offset counter. */ PkgLengthNode->Asl.Value.Integer = NewBitOffset - CurrentBitOffset; CurrentBitOffset = NewBitOffset; } break; case PARSEOP_NAMESEG: case PARSEOP_RESERVED_BYTES: /* Named or reserved field entry */ PkgLengthNode = Next->Asl.Child; NewBitOffset = (UINT32) PkgLengthNode->Asl.Value.Integer; CurrentBitOffset += NewBitOffset; if ((NewBitOffset == 0) && (Next->Asl.ParseOpcode == PARSEOP_RESERVED_BYTES) && AslGbl_OptimizeTrivialParseNodes) { /* * Unnamed field with a bit length of zero. We can * safely just ignore this. However, we will not ignore * a named field of zero length, we don't want to just * toss out a name. */ Next->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; PkgLengthNode->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; break; } /* Save the current AccessAs value for error checking later */ switch (AccessType) { case AML_FIELD_ACCESS_ANY: case AML_FIELD_ACCESS_BYTE: case AML_FIELD_ACCESS_BUFFER: default: MinimumLength = 8; break; case AML_FIELD_ACCESS_WORD: MinimumLength = 16; break; case AML_FIELD_ACCESS_DWORD: MinimumLength = 32; break; case AML_FIELD_ACCESS_QWORD: MinimumLength = 64; break; } PkgLengthNode->Asl.ExtraValue = MinimumLength; break; default: /* All supported field opcodes must appear above */ break; } /* Move on to next entry in the field list */ Next = Next->Asl.Next; } } /******************************************************************************* * * FUNCTION: OpnDoField * * PARAMETERS: Op - The parent parse node * * RETURN: None * * DESCRIPTION: Construct the AML operands for the FIELD ASL keyword * ******************************************************************************/ static void OpnDoField ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next; /* Opcode is parent node */ /* First child is field name */ Next = Op->Asl.Child; /* Second child is the AccessType */ OpnDoFieldCommon (Op, Next->Asl.Next); } /******************************************************************************* * * FUNCTION: OpnDoIndexField * * PARAMETERS: Op - The parent parse node * * RETURN: None * * DESCRIPTION: Construct the AML operands for the INDEXFIELD ASL keyword * ******************************************************************************/ static void OpnDoIndexField ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next; /* Opcode is parent node */ /* First child is the index name */ Next = Op->Asl.Child; /* Second child is the data name */ Next = Next->Asl.Next; /* Third child is the AccessType */ OpnDoFieldCommon (Op, Next->Asl.Next); } /******************************************************************************* * * FUNCTION: OpnDoBankField * * PARAMETERS: Op - The parent parse node * * RETURN: None * * DESCRIPTION: Construct the AML operands for the BANKFIELD ASL keyword * ******************************************************************************/ static void OpnDoBankField ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next; /* Opcode is parent node */ /* First child is the region name */ Next = Op->Asl.Child; /* Second child is the bank name */ Next = Next->Asl.Next; /* Third child is the bank value */ Next = Next->Asl.Next; /* Fourth child is the AccessType */ OpnDoFieldCommon (Op, Next->Asl.Next); } /******************************************************************************* * * FUNCTION: OpnDoRegion * * PARAMETERS: Op - The parent parse node * * RETURN: None * * DESCRIPTION: Tries to get the length of the region. Can only do this at * compile time if the length is a constant. * ******************************************************************************/ static void OpnDoRegion ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next; ACPI_ADR_SPACE_TYPE SpaceId; /* Opcode is parent node */ /* First child is the region name */ Next = Op->Asl.Child; /* Second child is the space ID */ Next = Next->Asl.Next; SpaceId = (ACPI_ADR_SPACE_TYPE) Next->Common.Value.Integer; /* Third child is the region offset */ Next = Next->Asl.Next; /* Fourth child is the region length */ Next = Next->Asl.Next; if (Next->Asl.ParseOpcode == PARSEOP_INTEGER) { /* Check for zero length */ Op->Asl.Value.Integer = Next->Asl.Value.Integer; if (!Op->Asl.Value.Integer && (SpaceId < ACPI_NUM_PREDEFINED_REGIONS)) { AslError (ASL_ERROR, ASL_MSG_REGION_LENGTH, Op, NULL); } } else { Op->Asl.Value.Integer = ACPI_UINT64_MAX; } } /******************************************************************************* * * FUNCTION: OpnDoBuffer * * PARAMETERS: Op - The parent parse node * * RETURN: None * * DESCRIPTION: Construct the AML operands for the BUFFER ASL keyword. We * build a single raw byte buffer from the initialization nodes, * each parse node contains a buffer byte. * ******************************************************************************/ static void OpnDoBuffer ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *BufferLengthOp; /* Optional arguments for this opcode with defaults */ UINT32 BufferLength = 0; /* Opcode and package length first */ /* Buffer Length is next, followed by the initializer list */ BufferLengthOp = Op->Asl.Child; InitializerOp = BufferLengthOp->Asl.Next; /* * If the BufferLength is not an INTEGER or was not specified in the ASL * (DEFAULT_ARG), it is a TermArg that is * evaluated at run-time, and we are therefore finished. */ if ((BufferLengthOp->Asl.ParseOpcode != PARSEOP_INTEGER) && (BufferLengthOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)) { return; } /* * We want to count the number of items in the initializer list, because if * it is larger than the buffer length, we will define the buffer size * to be the size of the initializer list (as per the ACPI Specification) */ switch (InitializerOp->Asl.ParseOpcode) { case PARSEOP_INTEGER: case PARSEOP_BYTECONST: case PARSEOP_WORDCONST: case PARSEOP_DWORDCONST: /* The peer list contains the byte list (if any...) */ while (InitializerOp) { /* For buffers, this is a list of raw bytes */ InitializerOp->Asl.AmlOpcode = AML_RAW_DATA_BYTE; InitializerOp->Asl.AmlLength = 1; InitializerOp->Asl.ParseOpcode = PARSEOP_RAW_DATA; BufferLength++; InitializerOp = ASL_GET_PEER_NODE (InitializerOp); } break; case PARSEOP_STRING_LITERAL: /* * Only one initializer, the string. Buffer must be big enough to hold * the string plus the null termination byte */ BufferLength = strlen (InitializerOp->Asl.Value.String) + 1; InitializerOp->Asl.AmlOpcode = AML_RAW_DATA_BUFFER; InitializerOp->Asl.AmlLength = BufferLength; InitializerOp->Asl.ParseOpcode = PARSEOP_RAW_DATA; break; case PARSEOP_RAW_DATA: /* Buffer nodes are already initialized (e.g. Unicode operator) */ return; case PARSEOP_DEFAULT_ARG: break; default: AslError (ASL_ERROR, ASL_MSG_INVALID_OPERAND, InitializerOp, "Unknown buffer initializer opcode"); printf ("Unknown buffer initializer opcode [%s]\n", UtGetOpName (InitializerOp->Asl.ParseOpcode)); return; } /* Check if initializer list is longer than the buffer length */ if (BufferLengthOp->Asl.Value.Integer > BufferLength) { BufferLength = (UINT32) BufferLengthOp->Asl.Value.Integer; } if (!BufferLength) { /* No length AND no items -- issue notice */ AslError (ASL_REMARK, ASL_MSG_BUFFER_LENGTH, BufferLengthOp, NULL); /* But go ahead and put the buffer length of zero into the AML */ } /* * Just set the buffer size node to be the buffer length, regardless * of whether it was previously an integer or a default_arg placeholder */ BufferLengthOp->Asl.ParseOpcode = PARSEOP_INTEGER; BufferLengthOp->Asl.AmlOpcode = AML_DWORD_OP; BufferLengthOp->Asl.Value.Integer = BufferLength; (void) OpcSetOptimalIntegerSize (BufferLengthOp); UtSetParseOpName (BufferLengthOp); /* Remaining nodes are handled via the tree walk */ } /******************************************************************************* * * FUNCTION: OpnDoPackage * * PARAMETERS: Op - The parent parse node * * RETURN: None * * DESCRIPTION: Construct the AML operands for the PACKAGE ASL keyword. NOTE: * can only be called after constants have been folded, to ensure * that the PackageLength operand has been fully reduced. * ******************************************************************************/ void OpnDoPackage ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *PackageLengthOp; UINT32 PackageLength = 0; /* Opcode and package length first, followed by the initializer list */ PackageLengthOp = Op->Asl.Child; InitializerOp = PackageLengthOp->Asl.Next; /* Count the number of items in the initializer list */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { /* The peer list contains the byte list (if any...) */ while (InitializerOp) { PackageLength++; InitializerOp = InitializerOp->Asl.Next; } } /* If package length is a constant, compare to the initializer list */ if ((PackageLengthOp->Asl.ParseOpcode == PARSEOP_INTEGER) || (PackageLengthOp->Asl.ParseOpcode == PARSEOP_QWORDCONST)) { if (PackageLengthOp->Asl.Value.Integer > PackageLength) { /* * Allow package length to be longer than the initializer * list -- but if the length of initializer list is nonzero, * issue a message since this is probably a coding error, * even though technically legal. */ if (PackageLength > 0) { AslError (ASL_REMARK, ASL_MSG_LIST_LENGTH_SHORT, PackageLengthOp, NULL); } PackageLength = (UINT32) PackageLengthOp->Asl.Value.Integer; } else if (PackageLengthOp->Asl.Value.Integer < PackageLength) { /* * The package length is smaller than the length of the * initializer list. This is an error as per the ACPI spec. */ AslError (ASL_ERROR, ASL_MSG_LIST_LENGTH_LONG, PackageLengthOp, NULL); } } if (PackageLengthOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { /* * This is the case if the PackageLength was left empty - Package() * The package length becomes the length of the initializer list */ Op->Asl.Child->Asl.ParseOpcode = PARSEOP_INTEGER; Op->Asl.Child->Asl.Value.Integer = PackageLength; UtSetParseOpName (Op); /* Set the AML opcode */ (void) OpcSetOptimalIntegerSize (Op->Asl.Child); } /* If not a variable-length package, check for a zero package length */ if ((PackageLengthOp->Asl.ParseOpcode == PARSEOP_INTEGER) || (PackageLengthOp->Asl.ParseOpcode == PARSEOP_QWORDCONST) || (PackageLengthOp->Asl.ParseOpcode == PARSEOP_ZERO) || (PackageLengthOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG)) { if (!PackageLength) { /* No length AND no initializer list -- issue a remark */ AslError (ASL_REMARK, ASL_MSG_PACKAGE_LENGTH, PackageLengthOp, NULL); /* But go ahead and put the buffer length of zero into the AML */ } } /* * If the PackageLength is a constant <= 255, we can change the * AML opcode from VarPackage to a simple (ACPI 1.0) Package opcode. */ if (((Op->Asl.Child->Asl.ParseOpcode == PARSEOP_INTEGER) && (Op->Asl.Child->Asl.Value.Integer <= 255)) || (Op->Asl.Child->Asl.ParseOpcode == PARSEOP_ONE) || (Op->Asl.Child->Asl.ParseOpcode == PARSEOP_ONES)|| (Op->Asl.Child->Asl.ParseOpcode == PARSEOP_ZERO)) { Op->Asl.AmlOpcode = AML_PACKAGE_OP; Op->Asl.ParseOpcode = PARSEOP_PACKAGE; /* * Just set the package size node to be the package length, regardless * of whether it was previously an integer or a default_arg placeholder */ PackageLengthOp->Asl.AmlOpcode = AML_RAW_DATA_BYTE; PackageLengthOp->Asl.AmlLength = 1; PackageLengthOp->Asl.ParseOpcode = PARSEOP_RAW_DATA; PackageLengthOp->Asl.Value.Integer = PackageLength; } /* Remaining nodes are handled via the tree walk */ } /******************************************************************************* * * FUNCTION: OpnDoLoadTable * * PARAMETERS: Op - The parent parse node * * RETURN: None * * DESCRIPTION: Construct the AML operands for the LOADTABLE ASL keyword. * ******************************************************************************/ static void OpnDoLoadTable ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next; /* Opcode is parent node */ /* First child is the table signature */ Next = Op->Asl.Child; /* Second child is the OEM ID*/ Next = Next->Asl.Next; /* Third child is the OEM table ID */ Next = Next->Asl.Next; /* Fourth child is the RootPath string */ Next = Next->Asl.Next; if (Next->Asl.ParseOpcode == PARSEOP_ZERO) { Next->Asl.ParseOpcode = PARSEOP_STRING_LITERAL; Next->Asl.Value.String = "\\"; Next->Asl.AmlLength = 2; OpcGenerateAmlOpcode (Next); } #ifdef ASL_FUTURE_IMPLEMENTATION /* TBD: NOT IMPLEMENTED */ /* Fifth child is the [optional] ParameterPathString */ /* Sixth child is the [optional] ParameterData */ Next = Next->Asl.Next; if (Next->Asl.ParseOpcode == DEFAULT_ARG) { Next->Asl.AmlLength = 1; Next->Asl.ParseOpcode = ZERO; OpcGenerateAmlOpcode (Next); } Next = Next->Asl.Next; if (Next->Asl.ParseOpcode == DEFAULT_ARG) { Next->Asl.AmlLength = 1; Next->Asl.ParseOpcode = ZERO; OpcGenerateAmlOpcode (Next); } #endif } /******************************************************************************* * * FUNCTION: OpnDoDefinitionBlock * * PARAMETERS: Op - The parent parse node * * RETURN: None * * DESCRIPTION: Construct the AML operands for the DEFINITIONBLOCK ASL keyword * ******************************************************************************/ static void OpnDoDefinitionBlock ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Child; ACPI_SIZE Length; UINT32 i; char *Filename; ACPI_STATUS Status; /* * These nodes get stuffed into the table header. They are special * cased when the table is written to the output file. * * Mark all of these nodes as non-usable so they won't get output * as AML opcodes! */ /* Get AML filename. Use it if non-null */ Child = Op->Asl.Child; if (Child->Asl.Value.Buffer && *Child->Asl.Value.Buffer && (AslGbl_UseDefaultAmlFilename)) { /* * The walk may traverse multiple definition blocks. Switch files * to ensure that the correct files are manipulated. */ FlSwitchFileSet (Op->Asl.Filename); /* * We will use the AML filename that is embedded in the source file * for the output filename. */ Filename = UtLocalCacheCalloc (strlen (AslGbl_DirectoryPath) + strlen ((char *) Child->Asl.Value.Buffer) + 1); /* Prepend the current directory path */ strcpy (Filename, AslGbl_DirectoryPath); strcat (Filename, (char *) Child->Asl.Value.Buffer); AslGbl_OutputFilenamePrefix = Filename; UtConvertBackslashes (AslGbl_OutputFilenamePrefix); /* * Use the definition block file parameter instead of the input * filename. Since all files were opened previously, remove the * existing file and open a new file with the name of this * definition block parameter. Since AML code generation has yet * to happen, the previous file can be removed without any impacts. */ FlCloseFile (ASL_FILE_AML_OUTPUT); FlDeleteFile (ASL_FILE_AML_OUTPUT); Status = FlOpenAmlOutputFile (AslGbl_OutputFilenamePrefix); if (ACPI_FAILURE (Status)) { AslError (ASL_ERROR, ASL_MSG_OUTPUT_FILE_OPEN, NULL, NULL); return; } } Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; /* Signature */ Child = Child->Asl.Next; Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; if (Child->Asl.Value.String) { AslGbl_FilesList->TableSignature = Child->Asl.Value.String; AslGbl_TableSignature = Child->Asl.Value.String; if (strlen (AslGbl_TableSignature) != ACPI_NAMESEG_SIZE) { AslError (ASL_ERROR, ASL_MSG_TABLE_SIGNATURE, Child, "Length must be exactly 4 characters"); } for (i = 0; i < ACPI_NAMESEG_SIZE; i++) { if (!isalnum ((int) AslGbl_TableSignature[i])) { AslError (ASL_ERROR, ASL_MSG_TABLE_SIGNATURE, Child, "Contains non-alphanumeric characters"); } } } /* Revision */ Child = Child->Asl.Next; Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; /* * We used the revision to set the integer width earlier */ /* OEMID */ Child = Child->Asl.Next; Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; if (Child->Asl.Value.String && strlen (Child->Asl.Value.String) > ACPI_OEM_ID_SIZE) { AslError (ASL_ERROR, ASL_MSG_OEM_ID, Child, "Length cannot exceed 6 characters"); } /* OEM TableID */ Child = Child->Asl.Next; Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; if (Child->Asl.Value.String) { Length = strlen (Child->Asl.Value.String); if (Length > ACPI_OEM_TABLE_ID_SIZE) { AslError (ASL_ERROR, ASL_MSG_OEM_TABLE_ID, Child, "Length cannot exceed 8 characters"); } AslGbl_TableId = UtLocalCacheCalloc (Length + 1); strcpy (AslGbl_TableId, Child->Asl.Value.String); AslGbl_FilesList->TableId = AslGbl_TableId; /* * Convert anything non-alphanumeric to an underscore. This * allows us to use the TableID to generate unique C symbols. */ for (i = 0; i < Length; i++) { if (!isalnum ((int) AslGbl_TableId[i])) { AslGbl_TableId[i] = '_'; } } } /* OEM Revision */ Child = Child->Asl.Next; Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; } /******************************************************************************* * * FUNCTION: UtGetArg * * PARAMETERS: Op - Get an argument for this op * Argn - Nth argument to get * * RETURN: The argument (as an Op object). NULL if argument does not exist * * DESCRIPTION: Get the specified op's argument (peer) * ******************************************************************************/ ACPI_PARSE_OBJECT * UtGetArg ( ACPI_PARSE_OBJECT *Op, UINT32 Argn) { ACPI_PARSE_OBJECT *Arg = NULL; /* Get the requested argument object */ Arg = Op->Asl.Child; while (Arg && Argn) { Argn--; Arg = Arg->Asl.Next; } return (Arg); } /******************************************************************************* * * FUNCTION: OpnAttachNameToNode * * PARAMETERS: Op - The parent parse node * * RETURN: None * * DESCRIPTION: For the named ASL/AML operators, get the actual name from the * argument list and attach it to the parent node so that we * can get to it quickly later. * ******************************************************************************/ static void OpnAttachNameToNode ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Child = NULL; switch (Op->Asl.AmlOpcode) { case AML_DATA_REGION_OP: case AML_DEVICE_OP: case AML_EVENT_OP: case AML_EXTERNAL_OP: case AML_METHOD_OP: case AML_MUTEX_OP: case AML_REGION_OP: case AML_POWER_RESOURCE_OP: case AML_PROCESSOR_OP: case AML_THERMAL_ZONE_OP: case AML_NAME_OP: case AML_SCOPE_OP: Child = UtGetArg (Op, 0); break; case AML_ALIAS_OP: Child = UtGetArg (Op, 1); break; case AML_CREATE_BIT_FIELD_OP: case AML_CREATE_BYTE_FIELD_OP: case AML_CREATE_WORD_FIELD_OP: case AML_CREATE_DWORD_FIELD_OP: case AML_CREATE_QWORD_FIELD_OP: Child = UtGetArg (Op, 2); break; case AML_CREATE_FIELD_OP: Child = UtGetArg (Op, 3); break; case AML_BANK_FIELD_OP: case AML_INDEX_FIELD_OP: case AML_FIELD_OP: return; default: return; } if (Child) { UtAttachNamepathToOwner (Op, Child); } } /******************************************************************************* * * FUNCTION: OpnGenerateAmlOperands * * PARAMETERS: Op - The parent parse node * * RETURN: None * * DESCRIPTION: Prepare nodes to be output as AML data and operands. The more * complex AML opcodes require processing of the child nodes * (arguments/operands). * ******************************************************************************/ void OpnGenerateAmlOperands ( ACPI_PARSE_OBJECT *Op) { if (Op->Asl.AmlOpcode == AML_RAW_DATA_BYTE) { return; } switch (Op->Asl.ParseOpcode) { case PARSEOP_DEFINITION_BLOCK: OpnDoDefinitionBlock (Op); break; case PARSEOP_METHOD: OpnDoMethod (Op); break; case PARSEOP_MUTEX: OpnDoMutex (Op); break; case PARSEOP_FIELD: OpnDoField (Op); break; case PARSEOP_INDEXFIELD: OpnDoIndexField (Op); break; case PARSEOP_BANKFIELD: OpnDoBankField (Op); break; case PARSEOP_BUFFER: OpnDoBuffer (Op); break; case PARSEOP_LOADTABLE: OpnDoLoadTable (Op); break; case PARSEOP_OPERATIONREGION: OpnDoRegion (Op); break; case PARSEOP_RESOURCETEMPLATE: RsDoResourceTemplate (Op); break; case PARSEOP_NAMESEG: case PARSEOP_NAMESTRING: case PARSEOP_METHODCALL: case PARSEOP_STRING_LITERAL: default: break; } /* TBD: move */ OpnAttachNameToNode (Op); } src/acpica/source/compiler/aslopt.c000066400000000000000000001001421465205512700176520ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslopt- Compiler optimizations * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acparser.h" #include "amlcode.h" #include "acnamesp.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslopt") static UINT32 OptTotal = 0; /* Local prototypes */ static ACPI_STATUS OptSearchToRoot ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE *CurrentNode, ACPI_NAMESPACE_NODE *TargetNode, ACPI_BUFFER *TargetPath, char **NewPath); static ACPI_STATUS OptBuildShortestPath ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE *CurrentNode, ACPI_NAMESPACE_NODE *TargetNode, ACPI_BUFFER *CurrentPath, ACPI_BUFFER *TargetPath, ACPI_SIZE AmlNameStringLength, UINT8 IsDeclaration, char **ReturnNewPath); static ACPI_STATUS OptOptimizeNameDeclaration ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE *CurrentNode, ACPI_NAMESPACE_NODE *TargetNode, char *AmlNameString, char **NewPath); /******************************************************************************* * * FUNCTION: OptSearchToRoot * * PARAMETERS: Op - Current parser op * WalkState - Current state * CurrentNode - Where we are in the namespace * TargetNode - Node to which we are referring * TargetPath - External full path to the target node * NewPath - Where the optimized path is returned * * RETURN: Status * * DESCRIPTION: Attempt to optimize a reference to a single 4-character ACPI * name utilizing the search-to-root name resolution algorithm * that is used by AML interpreters. * ******************************************************************************/ static ACPI_STATUS OptSearchToRoot ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE *CurrentNode, ACPI_NAMESPACE_NODE *TargetNode, ACPI_BUFFER *TargetPath, char **NewPath) { ACPI_NAMESPACE_NODE *Node; ACPI_GENERIC_STATE ScopeInfo; ACPI_STATUS Status; char *Path; ACPI_FUNCTION_NAME (OptSearchToRoot); /* * Check if search-to-root can be utilized. Use the last NameSeg of * the NamePath and 1) See if can be found and 2) If found, make * sure that it is the same node that we want. If there is another * name in the search path before the one we want, the nodes will * not match, and we cannot use this optimization. */ Path = &(((char *) TargetPath->Pointer)[ TargetPath->Length - ACPI_NAMESEG_SIZE]); ScopeInfo.Scope.Node = CurrentNode; /* Lookup the NameSeg using SEARCH_PARENT (search-to-root) */ Status = AcpiNsLookup (&ScopeInfo, Path, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, WalkState, &(Node)); if (ACPI_FAILURE (Status)) { return (Status); } /* * We found the name, but we must check to make sure that the node * matches. Otherwise, there is another identical name in the search * path that precludes the use of this optimization. */ if (Node != TargetNode) { /* * This means that another object with the same name was found first, * and we cannot use this optimization. */ return (AE_NOT_FOUND); } /* Found the node, we can use this optimization */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, "NAMESEG: %-24s", Path)); /* We must allocate a new string for the name (TargetPath gets deleted) */ *NewPath = UtLocalCacheCalloc (ACPI_NAMESEG_SIZE + 1); strcpy (*NewPath, Path); if (strncmp (*NewPath, "_T_", 3)) { AslError (ASL_OPTIMIZATION, ASL_MSG_SINGLE_NAME_OPTIMIZATION, Op, *NewPath); } return (AE_OK); } /******************************************************************************* * * FUNCTION: OptBuildShortestPath * * PARAMETERS: Op - Current parser op * WalkState - Current state * CurrentNode - Where we are in the namespace * TargetNode - Node to which we are referring * CurrentPath - External full path to the current node * TargetPath - External full path to the target node * AmlNameStringLength - Length of the original namepath * IsDeclaration - TRUE for declaration, FALSE for reference * ReturnNewPath - Where the optimized path is returned * * RETURN: Status * * DESCRIPTION: Build an optimal NamePath using carats * ******************************************************************************/ static ACPI_STATUS OptBuildShortestPath ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE *CurrentNode, ACPI_NAMESPACE_NODE *TargetNode, ACPI_BUFFER *CurrentPath, ACPI_BUFFER *TargetPath, ACPI_SIZE AmlNameStringLength, UINT8 IsDeclaration, char **ReturnNewPath) { UINT32 NumCommonSegments; UINT32 MaxCommonSegments; UINT32 Index; UINT32 NumCarats; UINT32 i; char *NewPathInternal; char *NewPathExternal; ACPI_NAMESPACE_NODE *Node; ACPI_GENERIC_STATE ScopeInfo; ACPI_STATUS Status; BOOLEAN SubPath = FALSE; ACPI_FUNCTION_NAME (OptBuildShortestPath); ScopeInfo.Scope.Node = CurrentNode; /* * Determine the maximum number of NameSegs that the Target and Current paths * can possibly have in common. (To optimize, we have to have at least 1) * * Note: The external NamePath string lengths are always a multiple of 5 * (ACPI_NAMESEG_SIZE + separator) */ MaxCommonSegments = TargetPath->Length / ACPI_PATH_SEGMENT_LENGTH; if (CurrentPath->Length < TargetPath->Length) { MaxCommonSegments = CurrentPath->Length / ACPI_PATH_SEGMENT_LENGTH; } /* * Determine how many NameSegs the two paths have in common. * (Starting from the root) */ for (NumCommonSegments = 0; NumCommonSegments < MaxCommonSegments; NumCommonSegments++) { /* Compare two single NameSegs */ Index = (NumCommonSegments * ACPI_PATH_SEGMENT_LENGTH) + 1; if (!ACPI_COMPARE_NAMESEG ( &(ACPI_CAST_PTR (char, TargetPath->Pointer)) [Index], &(ACPI_CAST_PTR (char, CurrentPath->Pointer)) [Index])) { /* Mismatch */ break; } } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " COMMON: %u", NumCommonSegments)); /* There must be at least 1 common NameSeg in order to optimize */ if (NumCommonSegments == 0) { return (AE_NOT_FOUND); } if (NumCommonSegments == MaxCommonSegments) { if (CurrentPath->Length == TargetPath->Length) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " SAME PATH")); return (AE_NOT_FOUND); } else { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " SUBPATH")); SubPath = TRUE; } } /* Determine how many prefix Carats are required */ NumCarats = (CurrentPath->Length / ACPI_PATH_SEGMENT_LENGTH) - NumCommonSegments; /* * Construct a new target string */ NewPathExternal = UtLocalCacheCalloc (TargetPath->Length + NumCarats + 1); /* Insert the Carats into the Target string */ for (i = 0; i < NumCarats; i++) { NewPathExternal[i] = AML_PARENT_PREFIX; } /* * Copy only the necessary (optimal) segments from the original * target string */ Index = (NumCommonSegments * ACPI_PATH_SEGMENT_LENGTH) + 1; /* Special handling for exact subpath in a name declaration */ if (IsDeclaration && SubPath && (CurrentPath->Length > TargetPath->Length)) { /* * The current path is longer than the target, and the target is a * subpath of the current path. We must include one more NameSeg of * the target path */ Index -= ACPI_PATH_SEGMENT_LENGTH; /* Special handling for Scope() operator */ if (Op->Asl.AmlOpcode == AML_SCOPE_OP) { NewPathExternal[i] = AML_PARENT_PREFIX; i++; ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, "(EXTRA ^)")); } } /* Make sure we haven't gone off the end of the target path */ if (Index > TargetPath->Length) { Index = TargetPath->Length; } strcpy (&NewPathExternal[i], &(ACPI_CAST_PTR (char, TargetPath->Pointer))[Index]); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " %-24s", NewPathExternal)); /* * Internalize the new target string and check it against the original * string to make sure that this is in fact an optimization. If the * original string is already optimal, there is no point in continuing. */ Status = AcpiNsInternalizeName (NewPathExternal, &NewPathInternal); if (ACPI_FAILURE (Status)) { AslCoreSubsystemError (Op, Status, "Internalizing new NamePath", ASL_NO_ABORT); goto Cleanup; } if (strlen (NewPathInternal) >= AmlNameStringLength) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " NOT SHORTER (New %u old %u)", (UINT32) strlen (NewPathInternal), (UINT32) AmlNameStringLength)); ACPI_FREE (NewPathInternal); Status = AE_NOT_FOUND; goto Cleanup; } /* * Check to make sure that the optimization finds the node we are * looking for. This is simply a sanity check on the new * path that has been created. */ Status = AcpiNsLookup (&ScopeInfo, NewPathInternal, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_DONT_OPEN_SCOPE, WalkState, &(Node)); if (ACPI_SUCCESS (Status)) { /* Found the namepath, but make sure the node is correct */ if (Node == TargetNode) { /* The lookup matched the node, accept this optimization */ AslError (ASL_OPTIMIZATION, ASL_MSG_NAME_OPTIMIZATION, Op, NewPathExternal); *ReturnNewPath = NewPathInternal; } else { /* Node is not correct, do not use this optimization */ Status = AE_NOT_FOUND; ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " ***** WRONG NODE")); AslError (ASL_WARNING, ASL_MSG_COMPILER_INTERNAL, Op, "Not using optimized name - found wrong node"); } } else { /* The lookup failed, we obviously cannot use this optimization */ ACPI_FREE (NewPathInternal); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " ***** NOT FOUND")); AslError (ASL_WARNING, ASL_MSG_COMPILER_INTERNAL, Op, "Not using optimized name - did not find node"); } Cleanup: return (Status); } /******************************************************************************* * * FUNCTION: OptOptimizeNameDeclaration * * PARAMETERS: Op - Current parser op * WalkState - Current state * CurrentNode - Where we are in the namespace * AmlNameString - Unoptimized namepath * NewPath - Where the optimized path is returned * * RETURN: Status. AE_OK If path is optimized * * DESCRIPTION: Perform a simple optimization of removing an extraneous * backslash prefix if we are already at the root scope. * ******************************************************************************/ static ACPI_STATUS OptOptimizeNameDeclaration ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE *CurrentNode, ACPI_NAMESPACE_NODE *TargetNode, char *AmlNameString, char **NewPath) { ACPI_STATUS Status; char *NewPathExternal; ACPI_NAMESPACE_NODE *Node; ACPI_FUNCTION_TRACE (OptOptimizeNameDeclaration); if (((CurrentNode == AcpiGbl_RootNode) || (Op->Common.Parent->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK)) && (ACPI_IS_ROOT_PREFIX (AmlNameString[0]))) { /* * The current scope is the root, and the namepath has a root prefix * that is therefore extraneous. Remove it. */ *NewPath = &AmlNameString[1]; /* Debug output */ Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, *NewPath, NULL, &NewPathExternal); if (ACPI_FAILURE (Status)) { AslCoreSubsystemError (Op, Status, "Externalizing NamePath", ASL_NO_ABORT); return (Status); } /* * Check to make sure that the optimization finds the node we are * looking for. This is simply a sanity check on the new * path that has been created. * * We know that we are at the root, so NULL is used for the scope. */ Status = AcpiNsLookup (NULL, *NewPath, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_DONT_OPEN_SCOPE, WalkState, &(Node)); if (ACPI_SUCCESS (Status)) { /* Found the namepath, but make sure the node is correct */ if (Node == TargetNode) { /* The lookup matched the node, accept this optimization */ AslError (ASL_OPTIMIZATION, ASL_MSG_NAME_OPTIMIZATION, Op, NewPathExternal); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, "AT ROOT: %-24s", NewPathExternal)); } else { /* Node is not correct, do not use this optimization */ Status = AE_NOT_FOUND; ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " ***** WRONG NODE")); AslError (ASL_WARNING, ASL_MSG_COMPILER_INTERNAL, Op, "Not using optimized name - found wrong node"); } } else { /* The lookup failed, we obviously cannot use this optimization */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " ***** NOT FOUND")); AslError (ASL_WARNING, ASL_MSG_COMPILER_INTERNAL, Op, "Not using optimized name - did not find node"); } ACPI_FREE (NewPathExternal); return (Status); } /* Could not optimize */ return (AE_NOT_FOUND); } /******************************************************************************* * * FUNCTION: OptOptimizeNamePath * * PARAMETERS: Op - Current parser op * Flags - Opcode info flags * WalkState - Current state * AmlNameString - Unoptimized namepath * TargetNode - Node to which AmlNameString refers * * RETURN: None. If path is optimized, the Op is updated with new path * * DESCRIPTION: Optimize a Named Declaration or Reference to the minimal length. * Must take into account both the current location in the * namespace and the actual reference path. * ******************************************************************************/ void OptOptimizeNamePath ( ACPI_PARSE_OBJECT *Op, UINT32 Flags, ACPI_WALK_STATE *WalkState, char *AmlNameString, ACPI_NAMESPACE_NODE *TargetNode) { ACPI_STATUS Status; ACPI_BUFFER TargetPath; ACPI_BUFFER CurrentPath; ACPI_SIZE AmlNameStringLength; ACPI_NAMESPACE_NODE *CurrentNode; char *ExternalNameString; char *NewPath = NULL; ACPI_SIZE HowMuchShorter; ACPI_PARSE_OBJECT *NextOp; ACPI_FUNCTION_TRACE (OptOptimizeNamePath); /* This is an optional optimization */ if (!AslGbl_ReferenceOptimizationFlag) { return_VOID; } /* Various required items */ if (!TargetNode || !WalkState || !AmlNameString || !Op->Common.Parent) { return_VOID; } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, "PATH OPTIMIZE: Line %5d ParentOp [%12.12s] ThisOp [%12.12s] ", Op->Asl.LogicalLineNumber, AcpiPsGetOpcodeName (Op->Common.Parent->Common.AmlOpcode), AcpiPsGetOpcodeName (Op->Common.AmlOpcode))); if (!(Flags & (AML_NAMED | AML_CREATE))) { if (Op->Asl.CompileFlags & OP_IS_NAME_DECLARATION) { /* We don't want to fuss with actual name declaration nodes here */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, "******* NAME DECLARATION\n")); return_VOID; } } /* * The original path must be longer than one NameSeg (4 chars) for there * to be any possibility that it can be optimized to a shorter string */ AmlNameStringLength = strlen (AmlNameString); if (AmlNameStringLength <= ACPI_NAMESEG_SIZE) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, "NAMESEG %4.4s\n", AmlNameString)); return_VOID; } /* * We need to obtain the node that represents the current scope -- where * we are right now in the namespace. We will compare this path * against the Namepath, looking for commonality. */ CurrentNode = AcpiGbl_RootNode; if (WalkState->ScopeInfo) { CurrentNode = WalkState->ScopeInfo->Scope.Node; } if (Flags & (AML_NAMED | AML_CREATE)) { /* This is the declaration of a new name */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, "NAME\n")); /* * The node of interest is the parent of this node (the containing * scope). The actual namespace node may be up more than one level * of parse op or it may not exist at all (if we traverse back * up to the root.) */ NextOp = Op->Asl.Parent; while (NextOp && (!NextOp->Asl.Node)) { NextOp = NextOp->Asl.Parent; } if (NextOp && NextOp->Asl.Node) { CurrentNode = NextOp->Asl.Node; } else { CurrentNode = AcpiGbl_RootNode; } } else { /* This is a reference to an existing named object */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, "REFERENCE\n")); } /* * Obtain the full paths to the two nodes that we are interested in * (Target and current namespace location) in external * format -- something we can easily manipulate */ TargetPath.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiNsHandleToPathname (TargetNode, &TargetPath, FALSE); if (ACPI_FAILURE (Status)) { AslCoreSubsystemError (Op, Status, "Getting Target NamePath", ASL_NO_ABORT); return_VOID; } TargetPath.Length--; /* Subtract one for null terminator */ /* CurrentPath is the path to this scope (where we are in the namespace) */ CurrentPath.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiNsHandleToPathname (CurrentNode, &CurrentPath, FALSE); if (ACPI_FAILURE (Status)) { AslCoreSubsystemError (Op, Status, "Getting Current NamePath", ASL_NO_ABORT); return_VOID; } CurrentPath.Length--; /* Subtract one for null terminator */ /* Debug output only */ Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, AmlNameString, NULL, &ExternalNameString); if (ACPI_FAILURE (Status)) { AslCoreSubsystemError (Op, Status, "Externalizing NamePath", ASL_NO_ABORT); return_VOID; } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, "CURRENT SCOPE: (%2u) %-37s FULL PATH TO NAME: (%2u) %-32s ACTUAL AML:%-32s\n", (UINT32) CurrentPath.Length, (char *) CurrentPath.Pointer, (UINT32) TargetPath.Length, (char *) TargetPath.Pointer, ExternalNameString)); ACPI_FREE (ExternalNameString); /* * Attempt an optimization depending on the type of namepath */ if (Flags & (AML_NAMED | AML_CREATE)) { /* * This is a named opcode and the namepath is a name declaration, not * a reference. */ Status = OptOptimizeNameDeclaration (Op, WalkState, CurrentNode, TargetNode, AmlNameString, &NewPath); if (ACPI_FAILURE (Status)) { /* * 2) now attempt to * optimize the namestring with carats (up-arrow) */ Status = OptBuildShortestPath (Op, WalkState, CurrentNode, TargetNode, &CurrentPath, &TargetPath, AmlNameStringLength, 1, &NewPath); } } else { /* * This is a reference to an existing named object * * 1) Check if search-to-root can be utilized using the last * NameSeg of the NamePath */ Status = OptSearchToRoot (Op, WalkState, CurrentNode, TargetNode, &TargetPath, &NewPath); if (ACPI_FAILURE (Status)) { /* * 2) Search-to-root could not be used, now attempt to * optimize the namestring with carats (up-arrow) */ Status = OptBuildShortestPath (Op, WalkState, CurrentNode, TargetNode, &CurrentPath, &TargetPath, AmlNameStringLength, 0, &NewPath); } } /* * Success from above indicates that the NamePath was successfully * optimized. We need to update the parse op with the new name */ if (ACPI_SUCCESS (Status)) { HowMuchShorter = (AmlNameStringLength - strlen (NewPath)); OptTotal += HowMuchShorter; ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " REDUCED BY %2u (TOTAL SAVED %2u)", (UINT32) HowMuchShorter, OptTotal)); if (Flags & AML_NAMED) { if (Op->Asl.AmlOpcode == AML_ALIAS_OP) { /* * ALIAS is the only oddball opcode, the name declaration * (alias name) is the second operand */ Op->Asl.Child->Asl.Next->Asl.Value.String = NewPath; Op->Asl.Child->Asl.Next->Asl.AmlLength = strlen (NewPath); } else { Op->Asl.Child->Asl.Value.String = NewPath; Op->Asl.Child->Asl.AmlLength = strlen (NewPath); } } else if (Flags & AML_CREATE) { /* Name must appear as the last parameter */ NextOp = Op->Asl.Child; while (!(NextOp->Asl.CompileFlags & OP_IS_NAME_DECLARATION)) { NextOp = NextOp->Asl.Next; } /* Update the parse node with the new NamePath */ NextOp->Asl.Value.String = NewPath; NextOp->Asl.AmlLength = strlen (NewPath); } else { /* Update the parse node with the new NamePath */ Op->Asl.Value.String = NewPath; Op->Asl.AmlLength = strlen (NewPath); } } else { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " ALREADY OPTIMAL")); } /* Cleanup path buffers */ ACPI_FREE (TargetPath.Pointer); ACPI_FREE (CurrentPath.Pointer); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, "\n")); return_VOID; } src/acpica/source/compiler/asloptions.c000066400000000000000000000745701465205512700205620ustar00rootroot00000000000000/****************************************************************************** * * Module Name: asloptions - compiler command line processing * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "acapps.h" #include "acdisasm.h" #include "acglobal.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("asloption") /* Local prototypes */ static int AslDoOptions ( int argc, char **argv, BOOLEAN IsResponseFile); static void AslMergeOptionTokens ( char *InBuffer, char *OutBuffer); static int AslDoResponseFile ( char *Filename); #define ASL_TOKEN_SEPARATORS " \t\n" #define ASL_SUPPORTED_OPTIONS "@:a:b|c|d^D:e:f^gh^i|I:l^m:no|p:P^q^r:s|:t|T+G^v^w|x:z" /******************************************************************************* * * FUNCTION: AslCommandLine * * PARAMETERS: argc/argv * * RETURN: Last argv index * * DESCRIPTION: Command line processing * ******************************************************************************/ int AslCommandLine ( int argc, char **argv) { int BadCommandLine = 0; ACPI_STATUS Status; /* Minimum command line contains at least the command and an input file */ if (argc < 2) { Usage (); exit (1); } /* Process all command line options */ BadCommandLine = AslDoOptions (argc, argv, FALSE); if (AslGbl_DoTemplates) { Status = DtCreateTemplates (argv); if (ACPI_FAILURE (Status)) { exit (-1); } exit (0); } /* Next parameter must be the input filename */ if (!argv[AcpiGbl_Optind] && !AcpiGbl_DisasmFlag) { printf ("Missing input filename\n"); BadCommandLine = TRUE; } if (AslGbl_DoSignon) { printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); if (AslGbl_IgnoreErrors) { printf ("Ignoring all errors, forcing AML file generation\n\n"); } } if (BadCommandLine) { printf ("Use -h option for help information\n"); exit (1); } return (AcpiGbl_Optind); } /******************************************************************************* * * FUNCTION: AslDoOptions * * PARAMETERS: argc/argv - Standard argc/argv * IsResponseFile - TRUE if executing a response file. * * RETURN: Status * * DESCRIPTION: Command line option processing * ******************************************************************************/ static int AslDoOptions ( int argc, char **argv, BOOLEAN IsResponseFile) { ACPI_STATUS Status; INT32 j; /* Get the command line options */ while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j) { case '@': /* Begin a response file */ if (IsResponseFile) { printf ("Nested command files are not supported\n"); return (-1); } if (AslDoResponseFile (AcpiGbl_Optarg)) { return (-1); } break; case 'a': /* Debug options */ switch (AcpiGbl_Optarg[0]) { case 'r': AslGbl_EnableReferenceTypechecking = TRUE; break; default: printf ("Unknown option: -a%s\n", AcpiGbl_Optarg); return (-1); } break; case 'b': /* Debug options */ switch (AcpiGbl_Optarg[0]) { case 'c': printf ("Debug ASL to ASL+ conversion\n"); AslGbl_DoAslConversion = TRUE; AslGbl_FoldConstants = FALSE; AslGbl_IntegerOptimizationFlag = FALSE; AslGbl_ReferenceOptimizationFlag = FALSE; AslGbl_OptimizeTrivialParseNodes = FALSE; AcpiGbl_CaptureComments = TRUE; AcpiGbl_DoDisassemblerOptimizations = FALSE; AcpiGbl_DebugAslConversion = TRUE; AcpiGbl_DmEmitExternalOpcodes = TRUE; AslGbl_DoExternalsInPlace = TRUE; return (0); case 'f': AslCompilerdebug = 1; /* same as yydebug */ DtParserdebug = 1; PrParserdebug = 1; AslGbl_DebugFlag = TRUE; AslGbl_KeepPreprocessorTempFile = TRUE; break; case 'p': /* Prune ASL parse tree */ /* Get the required argument */ if (AcpiGetoptArgument (argc, argv)) { return (-1); } AslGbl_PruneParseTree = TRUE; AslGbl_PruneDepth = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); break; case 's': AslGbl_DebugFlag = TRUE; break; case 't': /* Get the required argument */ if (AcpiGetoptArgument (argc, argv)) { return (-1); } AslGbl_PruneType = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); break; default: printf ("Unknown option: -b%s\n", AcpiGbl_Optarg); return (-1); } break; case 'c': switch (AcpiGbl_Optarg[0]) { case 'a': printf ("Convert ASL to ASL+ with comments\n"); AslGbl_DoAslConversion = TRUE; AslGbl_FoldConstants = FALSE; AslGbl_IntegerOptimizationFlag = FALSE; AslGbl_ReferenceOptimizationFlag = FALSE; AslGbl_OptimizeTrivialParseNodes = FALSE; AcpiGbl_CaptureComments = TRUE; AcpiGbl_DoDisassemblerOptimizations = FALSE; AcpiGbl_DmEmitExternalOpcodes = TRUE; AslGbl_DoExternalsInPlace = TRUE; return (0); case 'r': AslGbl_NoResourceChecking = TRUE; break; default: printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); return (-1); } break; case 'd': /* Disassembler */ switch (AcpiGbl_Optarg[0]) { case '^': AslGbl_DoCompile = FALSE; break; case 'a': AslGbl_DoCompile = FALSE; AslGbl_DisassembleAll = TRUE; break; case 'b': /* Do not convert buffers to resource descriptors */ AcpiGbl_NoResourceDisassembly = TRUE; break; case 'c': break; case 'f': AcpiGbl_ForceAmlDisassembly = TRUE; break; case 'l': /* Use legacy ASL code (not ASL+) for disassembly */ AslGbl_DoCompile = FALSE; AcpiGbl_CstyleDisassembly = FALSE; break; case 's': /* Specify table signature (Only supported for CDAT table) */ /* Get the required argument */ if (AcpiGetoptArgument (argc, argv)) { return (-1); } /* Check for exact string "CDAT" (upper or lower case) */ AcpiGbl_CDAT = ACPI_CAST_PTR (char, &AcpiGbl_Optarg); if (AcpiUtStricmp (AcpiGbl_Optarg, ACPI_SIG_CDAT)) { printf ("\nUnknown table signature: %s\n", AcpiGbl_Optarg); return (-1); } AcpiGbl_CDAT = malloc (5); AcpiUtSafeStrncpy ((char *) AcpiGbl_CDAT, ACPI_SIG_CDAT, 5); break; default: printf ("Unknown option: -d%s\n", AcpiGbl_Optarg); return (-1); } AcpiGbl_DisasmFlag = TRUE; break; case 'D': /* Define a symbol */ PrAddDefine (AcpiGbl_Optarg, NULL, TRUE); break; case 'e': /* External files for disassembler */ /* Get entire list of external files */ AcpiGbl_Optind--; argv[AcpiGbl_Optind] = AcpiGbl_Optarg; while (argv[AcpiGbl_Optind] && (argv[AcpiGbl_Optind][0] != '-')) { Status = AcpiDmAddToExternalFileList (argv[AcpiGbl_Optind]); if (ACPI_FAILURE (Status)) { printf ("Could not add %s to external list\n", argv[AcpiGbl_Optind]); return (-1); } AcpiGbl_Optind++; } break; case 'f': switch (AcpiGbl_Optarg[0]) { case '^': /* Ignore errors and force creation of aml file */ AslGbl_IgnoreErrors = TRUE; break; case 'e': /* Disassembler: Get external declaration file */ if (AcpiGetoptArgument (argc, argv)) { return (-1); } AslGbl_ExternalRefFilename = AcpiGbl_Optarg; break; default: printf ("Unknown option: -f%s\n", AcpiGbl_Optarg); return (-1); } break; case 'G': AslGbl_CompileGeneric = TRUE; break; case 'g': /* Get all ACPI tables */ printf ("-g option is deprecated, use acpidump utility instead\n"); exit (1); case 'h': switch (AcpiGbl_Optarg[0]) { case '^': Usage (); exit (0); case 'c': UtDisplayConstantOpcodes (); exit (0); case 'd': AslDisassemblyHelp (); exit (0); case 'f': AslFilenameHelp (); exit (0); case 'r': /* reserved names */ ApDisplayReservedNames (); exit (0); case 't': UtDisplaySupportedTables (); exit (0); default: printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); return (-1); } case 'I': /* Add an include file search directory */ FlAddIncludeDirectory (AcpiGbl_Optarg); break; case 'i': /* Output AML as an include file */ switch (AcpiGbl_Optarg[0]) { case 'a': /* Produce assembly code include file */ AslGbl_AsmIncludeOutputFlag = TRUE; break; case 'c': /* Produce C include file */ AslGbl_C_IncludeOutputFlag = TRUE; break; case 'n': /* Compiler/Disassembler: Ignore the NOOP operator */ AcpiGbl_IgnoreNoopOperator = TRUE; break; default: printf ("Unknown option: -i%s\n", AcpiGbl_Optarg); return (-1); } break; case 'l': /* Listing files */ switch (AcpiGbl_Optarg[0]) { case '^': /* Produce listing file (Mixed source/aml) */ AslGbl_ListingFlag = TRUE; AcpiGbl_DmOpt_Listing = TRUE; break; case 'd': /* Disable deterministic output, enabling timestamp */ AslGbl_Deterministic = FALSE; break; case 'i': /* Produce preprocessor output file */ AslGbl_PreprocessorOutputFlag = TRUE; break; case 'm': /* Produce hardware map summary file */ AslGbl_MapfileFlag = TRUE; break; case 'n': /* Produce namespace file */ AslGbl_NsOutputFlag = TRUE; break; case 's': /* Produce combined source file */ AslGbl_SourceOutputFlag = TRUE; break; case 'x': /* Produce cross-reference file */ AslGbl_CrossReferenceOutput = TRUE; break; default: printf ("Unknown option: -l%s\n", AcpiGbl_Optarg); return (-1); } break; case 'm': /* Set line buffer size */ AslGbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024; if (AslGbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE) { AslGbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE; } printf ("Line Buffer Size: %u\n", AslGbl_LineBufferSize); break; case 'n': /* Parse only */ AslGbl_ParseOnlyFlag = TRUE; break; case 'o': /* Control compiler AML optimizations */ switch (AcpiGbl_Optarg[0]) { case 'a': /* Disable all optimizations */ AslGbl_FoldConstants = FALSE; AslGbl_IntegerOptimizationFlag = FALSE; AslGbl_ReferenceOptimizationFlag = FALSE; AslGbl_OptimizeTrivialParseNodes = FALSE; break; case 'c': /* Display compile time(s) */ AslGbl_CompileTimesFlag = TRUE; break; case 'd': /* Disable disassembler code optimizations */ AcpiGbl_DoDisassemblerOptimizations = FALSE; break; case 'e': /* Disassembler: Emit embedded external operators */ AcpiGbl_DmEmitExternalOpcodes = TRUE; break; case 'E': /* * iASL: keep External opcodes in place. * No affect if Gbl_DoExternals is false. */ AslGbl_DoExternalsInPlace = TRUE; break; case 'f': /* Disable folding on "normal" expressions */ AslGbl_FoldConstants = FALSE; break; case 'i': /* Disable integer optimization to constants */ AslGbl_IntegerOptimizationFlag = FALSE; break; case 'n': /* Disable named reference optimization */ AslGbl_ReferenceOptimizationFlag = FALSE; break; case 't': /* Disable heavy typechecking */ AslGbl_DoTypechecking = FALSE; break; default: printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); return (-1); } break; case 'P': /* Preprocessor options */ switch (AcpiGbl_Optarg[0]) { case '^': /* Proprocess only, emit (.i) file */ AslGbl_PreprocessOnly = TRUE; AslGbl_PreprocessorOutputFlag = TRUE; break; case 'n': /* Disable preprocessor */ AslGbl_PreprocessFlag = FALSE; break; default: printf ("Unknown option: -P%s\n", AcpiGbl_Optarg); return (-1); } break; case 'p': /* Override default AML output filename */ AslGbl_OutputFilenamePrefix = AcpiGbl_Optarg; UtConvertBackslashes (AslGbl_OutputFilenamePrefix); AslGbl_UseDefaultAmlFilename = FALSE; break; case 'q': /* ASL/ASl+ converter: compile only and leave badaml. */ printf ("Convert ASL to ASL+ with comments\n"); AslGbl_FoldConstants = FALSE; AslGbl_IntegerOptimizationFlag = FALSE; AslGbl_ReferenceOptimizationFlag = FALSE; AslGbl_OptimizeTrivialParseNodes = FALSE; AslGbl_DoExternalsInPlace = TRUE; AcpiGbl_CaptureComments = TRUE; return (0); case 'r': /* Override revision found in table header */ AslGbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); break; case 's': /* Create AML in a source code file */ switch (AcpiGbl_Optarg[0]) { case 'a': /* Produce assembly code output file */ AslGbl_AsmOutputFlag = TRUE; break; case 'c': /* Produce C hex output file */ AslGbl_C_OutputFlag = TRUE; break; case 'o': /* Produce AML offset table in C */ AslGbl_C_OffsetTableFlag = TRUE; break; default: printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); return (-1); } break; case 't': /* Produce hex table output file */ switch (AcpiGbl_Optarg[0]) { case 'a': AslGbl_HexOutputFlag = HEX_OUTPUT_ASM; break; case 'c': AslGbl_HexOutputFlag = HEX_OUTPUT_C; break; case 'p': /* data table flex/bison prototype */ AslGbl_DtLexBisonPrototype = TRUE; break; case 's': AslGbl_HexOutputFlag = HEX_OUTPUT_ASL; break; default: printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); return (-1); } break; case 'T': /* Create a ACPI table template file */ AslGbl_DoTemplates = TRUE; break; case 'v': /* Version and verbosity settings */ switch (AcpiGbl_Optarg[0]) { case '^': printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); exit (0); case 'a': /* Disable all error/warning/remark messages */ AslGbl_NoErrors = TRUE; break; case 'd': printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); printf (ACPI_COMMON_BUILD_TIME); exit (0); case 'e': /* Disable all warning/remark messages (errors only) */ AslGbl_DisplayRemarks = FALSE; AslGbl_DisplayWarnings = FALSE; break; case 'i': /* * Support for integrated development environment(s). * * 1) No compiler signon * 2) Send stderr messages to stdout * 3) Less verbose error messages (single line only for each) * 4) Error/warning messages are formatted appropriately to * be recognized by MS Visual Studio */ AslGbl_VerboseErrors = FALSE; AslGbl_DoSignon = FALSE; break; case 'o': AslGbl_DisplayOptimizations = TRUE; break; case 'r': AslGbl_DisplayRemarks = FALSE; break; case 's': AslGbl_DoSignon = FALSE; break; case 't': AslGbl_VerboseTemplates = TRUE; break; case 'w': /* Get the required argument */ if (AcpiGetoptArgument (argc, argv)) { return (-1); } Status = AslDisableException (AcpiGbl_Optarg); if (ACPI_FAILURE (Status)) { return (-1); } break; case 'x': /* Get the required argument */ if (AcpiGetoptArgument (argc, argv)) { return (-1); } Status = AslLogExpectedException (AcpiGbl_Optarg); if (ACPI_FAILURE (Status)) { return (-1); } break; default: printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); return (-1); } break; case 'w': /* Set warning levels */ switch (AcpiGbl_Optarg[0]) { case '1': AslGbl_WarningLevel = ASL_WARNING; break; case '2': AslGbl_WarningLevel = ASL_WARNING2; break; case '3': AslGbl_WarningLevel = ASL_WARNING3; break; case 'e': AslGbl_WarningsAsErrors = TRUE; break; case 'w': /* Get the required argument */ if (AcpiGetoptArgument (argc, argv)) { return (-1); } Status = AslElevateException (AcpiGbl_Optarg); if (ACPI_FAILURE (Status)) { return (-1); } break; default: printf ("Unknown option: -w%s\n", AcpiGbl_Optarg); return (-1); } break; case 'x': /* Set debug print output level */ AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16); break; case 'z': AslGbl_UseOriginalCompilerId = TRUE; break; default: return (-1); } return (0); } /******************************************************************************* * * FUNCTION: AslMergeOptionTokens * * PARAMETERS: InBuffer - Input containing an option string * OutBuffer - Merged output buffer * * RETURN: None * * DESCRIPTION: Remove all whitespace from an option string. * ******************************************************************************/ static void AslMergeOptionTokens ( char *InBuffer, char *OutBuffer) { char *Token; *OutBuffer = 0; Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS); while (Token) { strcat (OutBuffer, Token); Token = strtok (NULL, ASL_TOKEN_SEPARATORS); } } /******************************************************************************* * * FUNCTION: AslDoResponseFile * * PARAMETERS: Filename - Name of the response file * * RETURN: Status * * DESCRIPTION: Open a response file and process all options within. * ******************************************************************************/ static int AslDoResponseFile ( char *Filename) { char *argv = AslGbl_StringBuffer2; FILE *ResponseFile; int OptStatus = 0; int Opterr; int Optind; ResponseFile = fopen (Filename, "r"); if (!ResponseFile) { printf ("Could not open command file %s, %s\n", Filename, strerror (errno)); return (-1); } /* Must save the current GetOpt globals */ Opterr = AcpiGbl_Opterr; Optind = AcpiGbl_Optind; /* * Process all lines in the response file. There must be one complete * option per line */ while (fgets (AslGbl_StringBuffer, ASL_STRING_BUFFER_SIZE, ResponseFile)) { /* Compress all tokens, allowing us to use a single argv entry */ AslMergeOptionTokens (AslGbl_StringBuffer, AslGbl_StringBuffer2); /* Process the option */ AcpiGbl_Opterr = 0; AcpiGbl_Optind = 0; OptStatus = AslDoOptions (1, &argv, TRUE); if (OptStatus) { printf ("Invalid option in command file %s: %s\n", Filename, AslGbl_StringBuffer); break; } } /* Restore the GetOpt globals */ AcpiGbl_Opterr = Opterr; AcpiGbl_Optind = Optind; fclose (ResponseFile); return (OptStatus); } src/acpica/source/compiler/aslparseop.c000066400000000000000000000756061465205512700205410ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslparseop - Parse op create/allocate/cache interfaces * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acapps.h" #include "acconvert.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslparseop") /******************************************************************************* * * FUNCTION: TrCreateOp * * PARAMETERS: ParseOpcode - Opcode to be assigned to the op * NumChildren - Number of children to follow * ... - A list of child ops to link to the new * op. NumChildren long. * * RETURN: Pointer to the new op. Aborts on allocation failure * * DESCRIPTION: Create a new parse op and link together a list of child * ops underneath the new op. * ******************************************************************************/ ACPI_PARSE_OBJECT * TrCreateOp ( UINT32 ParseOpcode, UINT32 NumChildren, ...) { ACPI_PARSE_OBJECT *Op; ACPI_PARSE_OBJECT *Child; ACPI_PARSE_OBJECT *PrevChild; va_list ap; UINT32 i; BOOLEAN FirstChild; va_start (ap, NumChildren); /* Allocate one new op */ Op = TrAllocateOp (ParseOpcode); DbgPrint (ASL_PARSE_OUTPUT, "\nCreateOp Ln/Col %u/%u NewParent %p Child %u Op %s ", Op->Asl.LineNumber, Op->Asl.Column, Op, NumChildren, UtGetOpName(ParseOpcode)); /* Some extra debug output based on the parse opcode */ switch (ParseOpcode) { case PARSEOP_ASL_CODE: AslGbl_ParseTreeRoot = Op; Op->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; DbgPrint (ASL_PARSE_OUTPUT, "ASLCODE (Tree Completed)->"); break; case PARSEOP_DEFINITION_BLOCK: DbgPrint (ASL_PARSE_OUTPUT, "DEFINITION_BLOCK (Tree Completed)->"); break; case PARSEOP_OPERATIONREGION: DbgPrint (ASL_PARSE_OUTPUT, "OPREGION->"); break; case PARSEOP_OR: DbgPrint (ASL_PARSE_OUTPUT, "OR->"); break; default: /* Nothing to do for other opcodes */ break; } /* Link the new op to its children */ PrevChild = NULL; FirstChild = TRUE; for (i = 0; i < NumChildren; i++) { /* Get the next child */ Child = va_arg (ap, ACPI_PARSE_OBJECT *); DbgPrint (ASL_PARSE_OUTPUT, "%p, ", Child); /* * If child is NULL, this means that an optional argument * was omitted. We must create a placeholder with a special * opcode (DEFAULT_ARG) so that the code generator will know * that it must emit the correct default for this argument */ if (!Child) { Child = TrAllocateOp (PARSEOP_DEFAULT_ARG); } /* Link first child to parent */ if (FirstChild) { FirstChild = FALSE; Op->Asl.Child = Child; /* * For the ASL-/ASL+ converter: if the ParseOp is a Connection, * External, Offset or AccessAs, it means that the comments in the * FirstChild belongs to their parent due to the parsing order in * the .y files. To correct this, take the comments in the * FirstChild place it in the parent. This also means that * legitimate comments for the child gets put to the parent. */ if (AcpiGbl_CaptureComments && ((ParseOpcode == PARSEOP_CONNECTION) || (ParseOpcode == PARSEOP_EXTERNAL) || (ParseOpcode == PARSEOP_OFFSET) || (ParseOpcode == PARSEOP_ACCESSAS))) { Op->Asl.CommentList = Child->Asl.CommentList; Op->Asl.EndBlkComment = Child->Asl.EndBlkComment; Op->Asl.InlineComment = Child->Asl.InlineComment; Op->Asl.FileChanged = Child->Asl.FileChanged; Child->Asl.CommentList = NULL; Child->Asl.EndBlkComment = NULL; Child->Asl.InlineComment = NULL; Child->Asl.FileChanged = FALSE; /* * These do not need to be "passed off". They can be copied * because the code for these opcodes should be printed in the * same file. */ Op->Asl.Filename = Child->Asl.Filename; Op->Asl.ParentFilename = Child->Asl.ParentFilename; } } /* Point all children to parent */ Child->Asl.Parent = Op; /* Link children in a peer list */ if (PrevChild) { PrevChild->Asl.Next = Child; }; /* Get the comment from last child in the resource template call */ if (AcpiGbl_CaptureComments && (Op->Asl.ParseOpcode == PARSEOP_RESOURCETEMPLATE)) { CvDbgPrint ("Transferred current comment list to this op.\n"); Op->Asl.CommentList = Child->Asl.CommentList; Child->Asl.CommentList = NULL; Op->Asl.InlineComment = Child->Asl.InlineComment; Child->Asl.InlineComment = NULL; } /* * This child might be a list, point all ops in the list * to the same parent */ while (Child->Asl.Next) { Child = Child->Asl.Next; Child->Asl.Parent = Op; } PrevChild = Child; } va_end(ap); DbgPrint (ASL_PARSE_OUTPUT, "\n"); return (Op); } /******************************************************************************* * * FUNCTION: TrCreateLeafOp * * PARAMETERS: ParseOpcode - New opcode to be assigned to the op * * RETURN: Pointer to the new op. Aborts on allocation failure * * DESCRIPTION: Create a simple leaf op (no children or peers, and no value * assigned to the op) * ******************************************************************************/ ACPI_PARSE_OBJECT * TrCreateLeafOp ( UINT32 ParseOpcode) { ACPI_PARSE_OBJECT *Op; Op = TrAllocateOp (ParseOpcode); DbgPrint (ASL_PARSE_OUTPUT, "\nCreateLeafOp Ln/Col %u/%u NewOp %p Op %s\n\n", Op->Asl.LineNumber, Op->Asl.Column, Op, UtGetOpName (ParseOpcode)); return (Op); } /******************************************************************************* * * FUNCTION: TrCreateValuedLeafOp * * PARAMETERS: ParseOpcode - New opcode to be assigned to the op * Value - Value to be assigned to the op * * RETURN: Pointer to the new op. Aborts on allocation failure * * DESCRIPTION: Create a leaf op (no children or peers) with a value * assigned to it * ******************************************************************************/ ACPI_PARSE_OBJECT * TrCreateValuedLeafOp ( UINT32 ParseOpcode, UINT64 Value) { ACPI_PARSE_OBJECT *Op; UINT32 i; char *StringPtr = NULL; Op = TrAllocateOp (ParseOpcode); Op->Asl.Value.Integer = Value; DbgPrint (ASL_PARSE_OUTPUT, "\nCreateValuedLeafOp Ln/Col %u/%u NewOp %p " "Op %s Value %8.8X%8.8X ", Op->Asl.LineNumber, Op->Asl.Column, Op, UtGetOpName(ParseOpcode), ACPI_FORMAT_UINT64 (Value)); switch (ParseOpcode) { case PARSEOP_STRING_LITERAL: DbgPrint (ASL_PARSE_OUTPUT, "STRING->%s", Op->Asl.Value.String); break; case PARSEOP_NAMESEG: /* Check for mixed case (or all lower case). Issue a remark in this case */ for (i = 0; i < ACPI_NAMESEG_SIZE; i++) { if (islower ((int) Op->Asl.Value.Name[i])) { AcpiUtStrupr (&Op->Asl.Value.Name[i]); AslError (ASL_REMARK, ASL_MSG_LOWER_CASE_NAMESEG, Op, Op->Asl.Value.Name); break; } } DbgPrint (ASL_PARSE_OUTPUT, "NAMESEG->%s", Op->Asl.Value.String); break; case PARSEOP_NAMESTRING: /* Check for mixed case (or all lower case). Issue a remark in this case */ StringPtr = Op->Asl.Value.Name; for (i = 0; *StringPtr; i++) { if (islower ((int) *StringPtr)) { AcpiUtStrupr (&Op->Asl.Value.Name[i]); AslError (ASL_REMARK, ASL_MSG_LOWER_CASE_NAMEPATH, Op, Op->Asl.Value.Name); break; } StringPtr++; } DbgPrint (ASL_PARSE_OUTPUT, "NAMESTRING->%s", Op->Asl.Value.String); break; case PARSEOP_EISAID: DbgPrint (ASL_PARSE_OUTPUT, "EISAID->%s", Op->Asl.Value.String); break; case PARSEOP_METHOD: DbgPrint (ASL_PARSE_OUTPUT, "METHOD"); break; case PARSEOP_INTEGER: DbgPrint (ASL_PARSE_OUTPUT, "INTEGER->%8.8X%8.8X", ACPI_FORMAT_UINT64 (Value)); break; default: break; } DbgPrint (ASL_PARSE_OUTPUT, "\n\n"); return (Op); } /******************************************************************************* * * FUNCTION: TrCreateTargetOp * * PARAMETERS: OriginalOp - Op to be copied * * RETURN: Pointer to the new op. Aborts on allocation failure * * DESCRIPTION: Copy an existing op (and subtree). Used in ASL+ (C-style) * expressions where the target is the same as one of the * operands. A new op and subtree must be created from the * original so that the parse tree can be linked properly. * * NOTE: This code is specific to target operands that are the last * operand in an ASL/AML operator. Meaning that the top-level * parse Op in a possible subtree has a NULL Next pointer. * This simplifies the recursion. * * Subtree example: * DeRefOf (Local1) += 32 * * This gets converted to: * Add (DeRefOf (Local1), 32, DeRefOf (Local1)) * * Each DeRefOf has a single child, Local1. Even more complex * subtrees can be created via the Index and DeRefOf operators. * ******************************************************************************/ ACPI_PARSE_OBJECT * TrCreateTargetOp ( ACPI_PARSE_OBJECT *OriginalOp, ACPI_PARSE_OBJECT *ParentOp) { ACPI_PARSE_OBJECT *Op; if (!OriginalOp) { return (NULL); } Op = UtParseOpCacheCalloc (); /* Copy the pertinent values (omit link pointer fields) */ Op->Asl.Value = OriginalOp->Asl.Value; Op->Asl.Filename = OriginalOp->Asl.Filename; Op->Asl.LineNumber = OriginalOp->Asl.LineNumber; Op->Asl.LogicalLineNumber = OriginalOp->Asl.LogicalLineNumber; Op->Asl.LogicalByteOffset = OriginalOp->Asl.LogicalByteOffset; Op->Asl.Column = OriginalOp->Asl.Column; Op->Asl.Flags = OriginalOp->Asl.Flags; Op->Asl.CompileFlags = OriginalOp->Asl.CompileFlags; Op->Asl.AmlOpcode = OriginalOp->Asl.AmlOpcode; Op->Asl.ParseOpcode = OriginalOp->Asl.ParseOpcode; Op->Asl.Parent = ParentOp; UtSetParseOpName (Op); /* Copy a possible subtree below this op */ if (OriginalOp->Asl.Child) { Op->Asl.Child = TrCreateTargetOp (OriginalOp->Asl.Child, Op); } if (OriginalOp->Asl.Next) /* Null for top-level op */ { Op->Asl.Next = TrCreateTargetOp (OriginalOp->Asl.Next, ParentOp); } return (Op); } /******************************************************************************* * * FUNCTION: TrCreateAssignmentOp * * PARAMETERS: Target - Assignment target * Source - Assignment source * * RETURN: Pointer to the new op. Aborts on allocation failure * * DESCRIPTION: Implements the C-style '=' operator. It changes the parse * tree if possible to utilize the last argument of the math * operators which is a target operand -- thus saving invocation * of and additional Store() operator. An optimization. * ******************************************************************************/ ACPI_PARSE_OBJECT * TrCreateAssignmentOp ( ACPI_PARSE_OBJECT *Target, ACPI_PARSE_OBJECT *Source) { ACPI_PARSE_OBJECT *TargetOp; ACPI_PARSE_OBJECT *SourceOp1; ACPI_PARSE_OBJECT *SourceOp2; ACPI_PARSE_OBJECT *Operator; DbgPrint (ASL_PARSE_OUTPUT, "\nTrCreateAssignmentOp Line [%u to %u] Source %s Target %s\n", Source->Asl.LineNumber, Source->Asl.EndLine, UtGetOpName (Source->Asl.ParseOpcode), UtGetOpName (Target->Asl.ParseOpcode)); TrSetOpFlags (Target, OP_IS_TARGET); switch (Source->Asl.ParseOpcode) { /* * Only these operators can be optimized because they have * a target operand */ case PARSEOP_ADD: case PARSEOP_AND: case PARSEOP_DIVIDE: case PARSEOP_INDEX: case PARSEOP_MOD: case PARSEOP_MULTIPLY: case PARSEOP_NOT: case PARSEOP_OR: case PARSEOP_SHIFTLEFT: case PARSEOP_SHIFTRIGHT: case PARSEOP_SUBTRACT: case PARSEOP_XOR: break; /* Otherwise, just create a normal Store operator */ default: goto CannotOptimize; } /* * Transform the parse tree such that the target is moved to the * last operand of the operator */ SourceOp1 = Source->Asl.Child; SourceOp2 = SourceOp1->Asl.Next; /* NOT only has one operand, but has a target */ if (Source->Asl.ParseOpcode == PARSEOP_NOT) { SourceOp2 = SourceOp1; } /* DIVIDE has an extra target operand (remainder) */ if (Source->Asl.ParseOpcode == PARSEOP_DIVIDE) { SourceOp2 = SourceOp2->Asl.Next; } TargetOp = SourceOp2->Asl.Next; /* * Can't perform this optimization if there already is a target * for the operator (ZERO is a "no target" placeholder). */ if (TargetOp->Asl.ParseOpcode != PARSEOP_ZERO) { goto CannotOptimize; } /* Link in the target as the final operand */ SourceOp2->Asl.Next = Target; Target->Asl.Parent = Source; return (Source); CannotOptimize: Operator = TrAllocateOp (PARSEOP_STORE); TrLinkOpChildren (Operator, 2, Source, Target); /* Set the appropriate line numbers for the new op */ Operator->Asl.LineNumber = Target->Asl.LineNumber; Operator->Asl.LogicalLineNumber = Target->Asl.LogicalLineNumber; Operator->Asl.LogicalByteOffset = Target->Asl.LogicalByteOffset; Operator->Asl.Column = Target->Asl.Column; return (Operator); } /******************************************************************************* * * FUNCTION: TrCreateNullTargetOp * * PARAMETERS: None * * RETURN: Pointer to the new op. Aborts on allocation failure * * DESCRIPTION: Create a "null" target op. This is defined by the ACPI * specification to be a zero AML opcode, and indicates that * no target has been specified for the parent operation * ******************************************************************************/ ACPI_PARSE_OBJECT * TrCreateNullTargetOp ( void) { ACPI_PARSE_OBJECT *Op; Op = TrAllocateOp (PARSEOP_ZERO); Op->Asl.CompileFlags |= (OP_IS_TARGET | OP_COMPILE_TIME_CONST); DbgPrint (ASL_PARSE_OUTPUT, "\nCreateNullTargetOp Ln/Col %u/%u NewOp %p Op %s\n", Op->Asl.LineNumber, Op->Asl.Column, Op, UtGetOpName (Op->Asl.ParseOpcode)); return (Op); } /******************************************************************************* * * FUNCTION: TrCreateConstantLeafOp * * PARAMETERS: ParseOpcode - The constant opcode * * RETURN: Pointer to the new op. Aborts on allocation failure * * DESCRIPTION: Create a leaf op (no children or peers) for one of the * special constants - __LINE__, __FILE__, and __DATE__. * * Note: The fullimplemenation of __METHOD__ cannot happen here because we * don't have a full parse tree at this time and cannot find the parent * control method. __METHOD__ must be implemented later, after the parse * tree has been fully constructed. * ******************************************************************************/ ACPI_PARSE_OBJECT * TrCreateConstantLeafOp ( UINT32 ParseOpcode) { ACPI_PARSE_OBJECT *Op = NULL; time_t CurrentTime; char *StaticTimeString; char *TimeString; char *Filename = NULL; ACPI_STATUS Status; switch (ParseOpcode) { case PARSEOP___LINE__: Op = TrAllocateOp (PARSEOP_INTEGER); Op->Asl.Value.Integer = Op->Asl.LineNumber; break; case PARSEOP___METHOD__: /* Will become a string literal later */ Op = TrAllocateOp (PARSEOP___METHOD__); Op->Asl.Value.String = NULL; break; case PARSEOP___PATH__: Op = TrAllocateOp (PARSEOP_STRING_LITERAL); /* Op.Asl.Filename contains the full pathname to the file */ Op->Asl.Value.String = Op->Asl.Filename; break; case PARSEOP___FILE__: Op = TrAllocateOp (PARSEOP_STRING_LITERAL); /* Get the simple filename from the full path */ Status = FlSplitInputPathname (Op->Asl.Filename, NULL, &Filename); if (ACPI_FAILURE (Status)) { return (NULL); } Op->Asl.Value.String = Filename; break; case PARSEOP___DATE__: Op = TrAllocateOp (PARSEOP_STRING_LITERAL); /* Get a copy of the current time */ Op->Asl.Value.String = ""; CurrentTime = time (NULL); StaticTimeString = ctime (&CurrentTime); if (StaticTimeString) { TimeString = UtLocalCalloc (strlen (StaticTimeString) + 1); strcpy (TimeString, StaticTimeString); TimeString[strlen(TimeString) -1] = 0; /* Remove trailing newline */ Op->Asl.Value.String = TimeString; } break; default: /* This would be an internal error */ return (NULL); } DbgPrint (ASL_PARSE_OUTPUT, "\nCreateConstantLeafOp Ln/Col %u/%u NewOp %p " "Op %s Value %8.8X%8.8X \n", Op->Asl.LineNumber, Op->Asl.Column, Op, UtGetOpName (ParseOpcode), ACPI_FORMAT_UINT64 (Op->Asl.Value.Integer)); return (Op); } /******************************************************************************* * * FUNCTION: TrAllocateOp * * PARAMETERS: ParseOpcode - Opcode to be assigned to the op * * RETURN: New parse op. Aborts on allocation failure * * DESCRIPTION: Allocate and initialize a new parse op for the parse tree * ******************************************************************************/ ACPI_PARSE_OBJECT * TrAllocateOp ( UINT32 ParseOpcode) { ACPI_PARSE_OBJECT *Op; ACPI_PARSE_OBJECT *LatestOp; ACPI_FUNCTION_NAME (TrAllocateOp); Op = UtParseOpCacheCalloc (); Op->Asl.ParseOpcode = (UINT16) ParseOpcode; Op->Asl.Filename = AslGbl_Files[ASL_FILE_INPUT].Filename; Op->Asl.LineNumber = AslGbl_CurrentLineNumber; Op->Asl.LogicalLineNumber = AslGbl_LogicalLineNumber; Op->Asl.LogicalByteOffset = AslGbl_CurrentLineOffset; Op->Asl.Column = AslGbl_CurrentColumn; UtSetParseOpName (Op); /* The following is for capturing comments */ if (AcpiGbl_CaptureComments) { LatestOp = AslGbl_CommentState.LatestParseOp; Op->Asl.InlineComment = NULL; Op->Asl.EndNodeComment = NULL; Op->Asl.CommentList = NULL; Op->Asl.FileChanged = FALSE; /* * Check to see if the file name has changed before resetting the * latest parse op. */ if (LatestOp && (ParseOpcode != PARSEOP_INCLUDE) && (ParseOpcode != PARSEOP_INCLUDE_END) && strcmp (LatestOp->Asl.Filename, Op->Asl.Filename)) { CvDbgPrint ("latest op: %s\n", LatestOp->Asl.ParseOpName); Op->Asl.FileChanged = TRUE; if (AslGbl_IncludeFileStack) { Op->Asl.ParentFilename = AslGbl_IncludeFileStack->Filename; } else { Op->Asl.ParentFilename = NULL; } } AslGbl_CommentState.LatestParseOp = Op; CvDbgPrint ("%s=Set latest parse op to this op.\n", ACPI_GET_FUNCTION_NAME); CvDbgPrint (" Op->Asl.ParseOpName = %s\n", AslGbl_CommentState.LatestParseOp->Asl.ParseOpName); CvDbgPrint (" Op->Asl.ParseOpcode = 0x%x\n", ParseOpcode); if (Op->Asl.FileChanged) { CvDbgPrint(" file has been changed!\n"); } /* * if this parse op's syntax uses () and {} (i.e. Package(1){0x00}) then * set a flag in the comment state. This facilitates paring comments for * these types of opcodes. */ if ((CvParseOpBlockType(Op) == (BLOCK_PAREN | BLOCK_BRACE)) && (ParseOpcode != PARSEOP_DEFINITION_BLOCK)) { CvDbgPrint ("Parsing paren/Brace op now!\n"); AslGbl_CommentState.ParsingParenBraceNode = Op; } if (AslGbl_CommentListHead) { CvDbgPrint ("Transferring...\n"); Op->Asl.CommentList = AslGbl_CommentListHead; AslGbl_CommentListHead = NULL; AslGbl_CommentListTail = NULL; CvDbgPrint (" Transferred current comment list to this op.\n"); CvDbgPrint (" %s\n", Op->Asl.CommentList->Comment); } if (AslGbl_InlineCommentBuffer) { Op->Asl.InlineComment = AslGbl_InlineCommentBuffer; AslGbl_InlineCommentBuffer = NULL; CvDbgPrint ("Transferred current inline comment list to this op.\n"); } } return (Op); } /******************************************************************************* * * FUNCTION: TrPrintOpFlags * * PARAMETERS: Flags - Flags word to be decoded * OutputLevel - Debug output level: ASL_TREE_OUTPUT etc. * * RETURN: None * * DESCRIPTION: Decode a flags word to text. Displays all flags that are set. * ******************************************************************************/ void TrPrintOpFlags ( UINT32 Flags, UINT32 OutputLevel) { UINT32 FlagBit = 1; UINT32 i; for (i = 0; i < ACPI_NUM_OP_FLAGS; i++) { if (Flags & FlagBit) { DbgPrint (OutputLevel, " %s", AslGbl_OpFlagNames[i]); } FlagBit <<= 1; } } src/acpica/source/compiler/aslparser.y000066400000000000000000000244661465205512700204100ustar00rootroot00000000000000%{ /****************************************************************************** * * Module Name: aslparser.y - Master Bison/Yacc input file for iASL * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslparse") /* * Global Notes: * * October 2005: The following list terms have been optimized (from the * original ASL grammar in the ACPI specification) to force the immediate * reduction of each list item so that the parse stack use doesn't increase on * each list element and possibly overflow on very large lists (>4000 items). * This dramatically reduces use of the parse stack overall. * * ArgList, TermList, ByteList, DWordList, PackageList, * ResourceMacroList, and FieldUnitList */ void * AslLocalAllocate ( unsigned int Size); /* Bison/yacc configuration */ #define static #undef malloc #define malloc AslLocalAllocate #undef alloca #define alloca AslLocalAllocate #define yytname AslCompilername #define YYINITDEPTH 600 /* State stack depth */ #define YYDEBUG 1 /* Enable debug output */ #define YYERROR_VERBOSE 1 /* Verbose error messages */ #define YYFLAG -32768 /* Define YYMALLOC/YYFREE to prevent redefinition errors */ #define YYMALLOC AslLocalAllocate #define YYFREE ACPI_FREE %} /* * Declare the type of values in the grammar */ %union { UINT64 i; char *s; ACPI_PARSE_OBJECT *n; } /* * These shift/reduce conflicts are expected. There should be zero * reduce/reduce conflicts. */ %expect 128 /*! [Begin] no source code translation */ /* * The M4 macro processor is used to bring in the parser items, * in order to keep this master file smaller, and to break up * the various parser items. */ m4_define(NoEcho) /* Token types */ m4_include(asltokens.y) /* Production types/names */ m4_include(asltypes.y) %% /* Production rules */ m4_include(aslrules.y) m4_include(aslprimaries.y) m4_include(aslcstyle.y) m4_include(aslkeywords.y) m4_include(aslresources.y) m4_include(aslhelpers.y) %% /*! [End] no source code translation !*/ /* Local support functions in C */ m4_include(aslsupport.y) src/acpica/source/compiler/aslpld.c000066400000000000000000000637321465205512700176440ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslpld - Implementation of ASL ToPLD macro * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "amlcode.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslpld") /* Local prototypes */ static UINT8 * OpcEncodePldBuffer ( ACPI_PLD_INFO *PldInfo); static BOOLEAN OpcFindName ( const char **List, char *Name, UINT32 *Index); /******************************************************************************* * * FUNCTION: OpcDoPld * * PARAMETERS: Op - Current parse node * * RETURN: None * * DESCRIPTION: Convert ToPLD macro to 20-byte buffer * * The ToPLD parse tree looks like this: * * TOPLD * PLD_REVISION * INTEGER * PLD_IGNORECOLOR * INTEGER * ... * etc. * ******************************************************************************/ void OpcDoPld ( ACPI_PARSE_OBJECT *Op) { ACPI_PLD_INFO PldInfo; UINT8 *Buffer; ACPI_PARSE_OBJECT *ThisOp; ACPI_PARSE_OBJECT *NewOp; UINT16 ParseOpcode; UINT32 Value; if (!Op) { AslError (ASL_ERROR, ASL_MSG_NOT_EXIST, Op, NULL); return; } if (Op->Asl.ParseOpcode != PARSEOP_TOPLD) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, Op, NULL); return; } memset (&PldInfo, 0, sizeof (ACPI_PLD_INFO)); /* Traverse the list of PLD Ops (one per PLD field) */ ThisOp = Op->Asl.Child; while (ThisOp) { /* Get child values */ ParseOpcode = ThisOp->Asl.Child->Asl.ParseOpcode; Value = (UINT32) ThisOp->Asl.Child->Asl.Value.Integer; switch (ThisOp->Asl.ParseOpcode) { case PARSEOP_PLD_REVISION: if (ParseOpcode != PARSEOP_INTEGER) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ThisOp, NULL); break; } if (Value > 127) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } PldInfo.Revision = (UINT8) Value; break; case PARSEOP_PLD_IGNORECOLOR: if (ParseOpcode != PARSEOP_INTEGER) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ThisOp, NULL); break; } if (Value > 1) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } PldInfo.IgnoreColor = (UINT8) Value; break; case PARSEOP_PLD_RED: case PARSEOP_PLD_GREEN: case PARSEOP_PLD_BLUE: if (ParseOpcode != PARSEOP_INTEGER) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } if (Value > 255) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } if (ThisOp->Asl.ParseOpcode == PARSEOP_PLD_RED) { PldInfo.Red = (UINT8) Value; } else if (ThisOp->Asl.ParseOpcode == PARSEOP_PLD_GREEN) { PldInfo.Green = (UINT8) Value; } else /* PARSEOP_PLD_BLUE */ { PldInfo.Blue = (UINT8) Value; } break; case PARSEOP_PLD_WIDTH: case PARSEOP_PLD_HEIGHT: if (ParseOpcode != PARSEOP_INTEGER) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ThisOp, NULL); break; } if (Value > 65535) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } if (ThisOp->Asl.ParseOpcode == PARSEOP_PLD_WIDTH) { PldInfo.Width = (UINT16) Value; } else /* PARSEOP_PLD_HEIGHT */ { PldInfo.Height = (UINT16) Value; } break; case PARSEOP_PLD_USERVISIBLE: case PARSEOP_PLD_DOCK: case PARSEOP_PLD_LID: if (ParseOpcode != PARSEOP_INTEGER) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ThisOp, NULL); break; } if (Value > 1) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } if (ThisOp->Asl.ParseOpcode == PARSEOP_PLD_USERVISIBLE) { PldInfo.UserVisible = (UINT8) Value; } else if (ThisOp->Asl.ParseOpcode == PARSEOP_PLD_DOCK) { PldInfo.Dock = (UINT8) Value; } else { PldInfo.Lid = (UINT8) Value; } break; case PARSEOP_PLD_PANEL: if (ParseOpcode == PARSEOP_INTEGER) { if (Value > 6) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } } else /* PARSEOP_STRING */ { if (!OpcFindName (AcpiGbl_PldPanelList, ThisOp->Asl.Child->Asl.Value.String, &Value)) { AslError (ASL_ERROR, ASL_MSG_INVALID_OPERAND, ThisOp, NULL); break; } } PldInfo.Panel = (UINT8) Value; break; case PARSEOP_PLD_VERTICALPOSITION: if (ParseOpcode == PARSEOP_INTEGER) { if (Value > 2) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } } else /* PARSEOP_STRING */ { if (!OpcFindName (AcpiGbl_PldVerticalPositionList, ThisOp->Asl.Child->Asl.Value.String, &Value)) { AslError (ASL_ERROR, ASL_MSG_INVALID_OPERAND, ThisOp, NULL); break; } } PldInfo.VerticalPosition = (UINT8) Value; break; case PARSEOP_PLD_HORIZONTALPOSITION: if (ParseOpcode == PARSEOP_INTEGER) { if (Value > 2) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } } else /* PARSEOP_STRING */ { if (!OpcFindName (AcpiGbl_PldHorizontalPositionList, ThisOp->Asl.Child->Asl.Value.String, &Value)) { AslError (ASL_ERROR, ASL_MSG_INVALID_OPERAND, ThisOp, NULL); break; } } PldInfo.HorizontalPosition = (UINT8) Value; break; case PARSEOP_PLD_SHAPE: if (ParseOpcode == PARSEOP_INTEGER) { if (Value > 8) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } } else /* PARSEOP_STRING */ { if (!OpcFindName (AcpiGbl_PldShapeList, ThisOp->Asl.Child->Asl.Value.String, &Value)) { AslError (ASL_ERROR, ASL_MSG_INVALID_OPERAND, ThisOp, NULL); break; } } PldInfo.Shape = (UINT8) Value; break; case PARSEOP_PLD_GROUPORIENTATION: if (ParseOpcode != PARSEOP_INTEGER) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ThisOp, NULL); break; } if (Value > 1) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } PldInfo.GroupOrientation = (UINT8) Value; break; case PARSEOP_PLD_GROUPTOKEN: case PARSEOP_PLD_GROUPPOSITION: if (ParseOpcode != PARSEOP_INTEGER) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ThisOp, NULL); break; } if (Value > 255) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } if (ThisOp->Asl.ParseOpcode == PARSEOP_PLD_GROUPTOKEN) { PldInfo.GroupToken = (UINT8) Value; } else /* PARSEOP_PLD_GROUPPOSITION */ { PldInfo.GroupPosition = (UINT8) Value; } break; case PARSEOP_PLD_BAY: case PARSEOP_PLD_EJECTABLE: case PARSEOP_PLD_EJECTREQUIRED: if (ParseOpcode != PARSEOP_INTEGER) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ThisOp, NULL); break; } if (Value > 1) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } if (ThisOp->Asl.ParseOpcode == PARSEOP_PLD_BAY) { PldInfo.Bay = (UINT8) Value; } else if (ThisOp->Asl.ParseOpcode == PARSEOP_PLD_EJECTABLE) { PldInfo.Ejectable = (UINT8) Value; } else /* PARSEOP_PLD_EJECTREQUIRED */ { PldInfo.OspmEjectRequired = (UINT8) Value; } break; case PARSEOP_PLD_CABINETNUMBER: case PARSEOP_PLD_CARDCAGENUMBER: if (ParseOpcode != PARSEOP_INTEGER) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ThisOp, NULL); break; } if (Value > 255) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } if (ThisOp->Asl.ParseOpcode == PARSEOP_PLD_CABINETNUMBER) { PldInfo.CabinetNumber = (UINT8) Value; } else /* PARSEOP_PLD_CARDCAGENUMBER */ { PldInfo.CardCageNumber = (UINT8) Value; } break; case PARSEOP_PLD_REFERENCE: if (ParseOpcode != PARSEOP_INTEGER) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ThisOp, NULL); break; } if (Value > 1) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } PldInfo.Reference = (UINT8) Value; break; case PARSEOP_PLD_ROTATION: if (ParseOpcode != PARSEOP_INTEGER) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ThisOp, NULL); break; } if (Value > 7) { switch (Value) { case 45: Value = 1; break; case 90: Value = 2; break; case 135: Value = 3; break; case 180: Value = 4; break; case 225: Value = 5; break; case 270: Value = 6; break; case 315: Value = 7; break; default: AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } } PldInfo.Rotation = (UINT8) Value; break; case PARSEOP_PLD_ORDER: if (ParseOpcode != PARSEOP_INTEGER) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ThisOp, NULL); break; } if (Value > 31) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } PldInfo.Order = (UINT8) Value; break; case PARSEOP_PLD_VERTICALOFFSET: case PARSEOP_PLD_HORIZONTALOFFSET: if (ParseOpcode != PARSEOP_INTEGER) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ThisOp, NULL); break; } if (Value > 65535) { AslError (ASL_ERROR, ASL_MSG_RANGE, ThisOp, NULL); break; } if (ThisOp->Asl.ParseOpcode == PARSEOP_PLD_VERTICALOFFSET) { PldInfo.VerticalOffset = (UINT16) Value; } else /* PARSEOP_PLD_HORIZONTALOFFSET */ { PldInfo.HorizontalOffset = (UINT16) Value; } break; default: AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ThisOp, NULL); break; } ThisOp = ThisOp->Asl.Next; } Buffer = OpcEncodePldBuffer (&PldInfo); /* Change Op to a Buffer */ Op->Asl.ParseOpcode = PARSEOP_BUFFER; Op->Common.AmlOpcode = AML_BUFFER_OP; /* Disable further optimization */ Op->Asl.CompileFlags &= ~OP_COMPILE_TIME_CONST; UtSetParseOpName (Op); /* Child node is the buffer length */ NewOp = TrAllocateOp (PARSEOP_INTEGER); NewOp->Asl.AmlOpcode = AML_BYTE_OP; NewOp->Asl.Value.Integer = 20; NewOp->Asl.Parent = Op; Op->Asl.Child = NewOp; Op = NewOp; /* Peer to the child is the raw buffer data */ NewOp = TrAllocateOp (PARSEOP_RAW_DATA); NewOp->Asl.AmlOpcode = AML_RAW_DATA_BUFFER; NewOp->Asl.AmlLength = 20; NewOp->Asl.Value.String = ACPI_CAST_PTR (char, Buffer); NewOp->Asl.Parent = Op->Asl.Parent; Op->Asl.Next = NewOp; } /******************************************************************************* * * FUNCTION: OpcEncodePldBuffer * * PARAMETERS: PldInfo - _PLD buffer struct (Using local struct) * * RETURN: Encode _PLD buffer suitable for return value from _PLD * * DESCRIPTION: Bit-packs a _PLD buffer struct. * ******************************************************************************/ static UINT8 * OpcEncodePldBuffer ( ACPI_PLD_INFO *PldInfo) { UINT32 *Buffer; UINT32 Dword; Buffer = ACPI_CAST_PTR (UINT32, UtLocalCacheCalloc (ACPI_PLD_BUFFER_SIZE)); /* First 32 bits */ Dword = 0; ACPI_PLD_SET_REVISION (&Dword, PldInfo->Revision); ACPI_PLD_SET_IGNORE_COLOR (&Dword, PldInfo->IgnoreColor); ACPI_PLD_SET_RED (&Dword, PldInfo->Red); ACPI_PLD_SET_GREEN (&Dword, PldInfo->Green); ACPI_PLD_SET_BLUE (&Dword, PldInfo->Blue); ACPI_MOVE_32_TO_32 (&Buffer[0], &Dword); /* Second 32 bits */ Dword = 0; ACPI_PLD_SET_WIDTH (&Dword, PldInfo->Width); ACPI_PLD_SET_HEIGHT (&Dword, PldInfo->Height); ACPI_MOVE_32_TO_32 (&Buffer[1], &Dword); /* Third 32 bits */ Dword = 0; ACPI_PLD_SET_USER_VISIBLE (&Dword, PldInfo->UserVisible); ACPI_PLD_SET_DOCK (&Dword, PldInfo->Dock); ACPI_PLD_SET_LID (&Dword, PldInfo->Lid); ACPI_PLD_SET_PANEL (&Dword, PldInfo->Panel); ACPI_PLD_SET_VERTICAL (&Dword, PldInfo->VerticalPosition); ACPI_PLD_SET_HORIZONTAL (&Dword, PldInfo->HorizontalPosition); ACPI_PLD_SET_SHAPE (&Dword, PldInfo->Shape); ACPI_PLD_SET_ORIENTATION (&Dword, PldInfo->GroupOrientation); ACPI_PLD_SET_TOKEN (&Dword, PldInfo->GroupToken); ACPI_PLD_SET_POSITION (&Dword, PldInfo->GroupPosition); ACPI_PLD_SET_BAY (&Dword, PldInfo->Bay); ACPI_MOVE_32_TO_32 (&Buffer[2], &Dword); /* Fourth 32 bits */ Dword = 0; ACPI_PLD_SET_EJECTABLE (&Dword, PldInfo->Ejectable); ACPI_PLD_SET_OSPM_EJECT (&Dword, PldInfo->OspmEjectRequired); ACPI_PLD_SET_CABINET (&Dword, PldInfo->CabinetNumber); ACPI_PLD_SET_CARD_CAGE (&Dword, PldInfo->CardCageNumber); ACPI_PLD_SET_REFERENCE (&Dword, PldInfo->Reference); ACPI_PLD_SET_ROTATION (&Dword, PldInfo->Rotation); ACPI_PLD_SET_ORDER (&Dword, PldInfo->Order); ACPI_MOVE_32_TO_32 (&Buffer[3], &Dword); /* Revision 2 adds an additional DWORD */ if (PldInfo->Revision >= 2) { /* Fifth 32 bits */ Dword = 0; ACPI_PLD_SET_VERT_OFFSET (&Dword, PldInfo->VerticalOffset); ACPI_PLD_SET_HORIZ_OFFSET (&Dword, PldInfo->HorizontalOffset); ACPI_MOVE_32_TO_32 (&Buffer[4], &Dword); } return (ACPI_CAST_PTR (UINT8, Buffer)); } /******************************************************************************* * * FUNCTION: OpcFindName * * PARAMETERS: List - Array of char strings to be searched * Name - Char string to string for * Index - Index value to set if found * * RETURN: TRUE if any names matched, FALSE otherwise * * DESCRIPTION: Match PLD name to value in lookup table. Sets Value to * equivalent parameter value. * ******************************************************************************/ static BOOLEAN OpcFindName ( const char **List, char *Name, UINT32 *Index) { const char *NameString; UINT32 i; AcpiUtStrupr (Name); for (i = 0, NameString = List[0]; NameString; i++, NameString = List[i]) { if (!(strncmp (NameString, Name, strlen (Name)))) { *Index = i; return (TRUE); } } return (FALSE); } src/acpica/source/compiler/aslpredef.c000066400000000000000000000736341465205512700203340ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslpredef - support for ACPI predefined names * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define ACPI_CREATE_PREDEFINED_TABLE #define ACPI_CREATE_RESOURCE_TABLE #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acpredef.h" #include "acnamesp.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslpredef") /* Local prototypes */ static void ApCheckForUnexpectedReturnValue ( ACPI_PARSE_OBJECT *Op, ASL_METHOD_INFO *MethodInfo); static UINT32 ApCheckForSpecialName ( ACPI_PARSE_OBJECT *Op, char *Name); /******************************************************************************* * * FUNCTION: ApCheckForPredefinedMethod * * PARAMETERS: Op - A parse node of type "METHOD". * MethodInfo - Saved info about this method * * RETURN: None * * DESCRIPTION: If method is a predefined name, check that the number of * arguments and the return type (returns a value or not) * is correct. * ******************************************************************************/ BOOLEAN ApCheckForPredefinedMethod ( ACPI_PARSE_OBJECT *Op, ASL_METHOD_INFO *MethodInfo) { UINT32 Index; UINT32 RequiredArgCount; const ACPI_PREDEFINED_INFO *ThisName; /* Check for a match against the predefined name list */ Index = ApCheckForPredefinedName (Op, Op->Asl.NameSeg); switch (Index) { case ACPI_NOT_RESERVED_NAME: /* No underscore or _Txx or _xxx name not matched */ case ACPI_PREDEFINED_NAME: /* Resource Name or reserved scope name */ case ACPI_COMPILER_RESERVED_NAME: /* A _Txx that was not emitted by compiler */ /* Just return, nothing to do */ return (FALSE); case ACPI_EVENT_RESERVED_NAME: /* _Lxx/_Exx/_Wxx/_Qxx methods */ AslGbl_ReservedMethods++; /* NumArguments must be zero for all _Lxx/_Exx/_Wxx/_Qxx methods */ if (MethodInfo->NumArguments != 0) { sprintf (AslGbl_MsgBuffer, "%s requires %d", Op->Asl.ExternalName, 0); AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_HI, Op, AslGbl_MsgBuffer); } break; default: /* * Matched a predefined method name - validate the ASL-defined * argument count against the ACPI specification. * * Some methods are allowed to have a "minimum" number of args * (_SCP) because their definition in ACPI has changed over time. */ AslGbl_ReservedMethods++; ThisName = &AcpiGbl_PredefinedMethods[Index]; RequiredArgCount = METHOD_GET_ARG_COUNT (ThisName->Info.ArgumentList); if (MethodInfo->NumArguments != RequiredArgCount) { sprintf (AslGbl_MsgBuffer, "%4.4s requires %u", ThisName->Info.Name, RequiredArgCount); if (MethodInfo->NumArguments < RequiredArgCount) { AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_LO, Op, AslGbl_MsgBuffer); } else if ((MethodInfo->NumArguments > RequiredArgCount) && !(ThisName->Info.ArgumentList & ARG_COUNT_IS_MINIMUM)) { AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_HI, Op, AslGbl_MsgBuffer); } } /* * Check if method returns no value, but the predefined name is * required to return a value */ if (MethodInfo->NumReturnNoValue && ThisName->Info.ExpectedBtypes) { AcpiUtGetExpectedReturnTypes (AslGbl_StringBuffer, ThisName->Info.ExpectedBtypes); sprintf (AslGbl_MsgBuffer, "%s required for %4.4s", AslGbl_StringBuffer, ThisName->Info.Name); AslError (ASL_WARNING, ASL_MSG_RESERVED_RETURN_VALUE, Op, AslGbl_MsgBuffer); } break; } return (TRUE); } /******************************************************************************* * * FUNCTION: ApCheckForUnexpectedReturnValue * * PARAMETERS: Op - A parse node of type "RETURN". * MethodInfo - Saved info about this method * * RETURN: None * * DESCRIPTION: Check for an unexpected return value from a predefined method. * Invoked for predefined methods that are defined to not return * any value. If there is a return value, issue a remark, since * the ASL writer may be confused as to the method definition * and/or functionality. * * Note: We ignore all return values of "Zero", since this is what a standalone * Return() statement will always generate -- so we ignore it here -- * i.e., there is no difference between Return() and Return(Zero). * Also, a null Return() will be disassembled to return(Zero) -- so, we * don't want to generate extraneous remarks/warnings for a disassembled * ASL file. * ******************************************************************************/ static void ApCheckForUnexpectedReturnValue ( ACPI_PARSE_OBJECT *Op, ASL_METHOD_INFO *MethodInfo) { ACPI_PARSE_OBJECT *ReturnValueOp; /* Ignore Return() and Return(Zero) (they are the same) */ ReturnValueOp = Op->Asl.Child; if (ReturnValueOp->Asl.ParseOpcode == PARSEOP_ZERO) { return; } /* We have a valid return value, but the reserved name did not expect it */ AslError (ASL_WARNING, ASL_MSG_RESERVED_NO_RETURN_VAL, Op, MethodInfo->Op->Asl.ExternalName); } /******************************************************************************* * * FUNCTION: ApCheckPredefinedReturnValue * * PARAMETERS: Op - A parse node of type "RETURN". * MethodInfo - Saved info about this method * * RETURN: None * * DESCRIPTION: If method is a predefined name, attempt to validate the return * value. Only "static" types can be validated - a simple return * of an integer/string/buffer/package or a named reference to * a static object. Values such as a Localx or Argx or a control * method invocation are not checked. Issue a warning if there is * a valid return value, but the reserved method defines no * return value. * ******************************************************************************/ void ApCheckPredefinedReturnValue ( ACPI_PARSE_OBJECT *Op, ASL_METHOD_INFO *MethodInfo) { UINT32 Index; ACPI_PARSE_OBJECT *ReturnValueOp; const ACPI_PREDEFINED_INFO *ThisName; /* * Check parent method for a match against the predefined name list. * * Note: Disable compiler errors/warnings because any errors will be * caught when analyzing the parent method. Eliminates duplicate errors. */ AslGbl_AllExceptionsDisabled = TRUE; Index = ApCheckForPredefinedName (MethodInfo->Op, MethodInfo->Op->Asl.NameSeg); AslGbl_AllExceptionsDisabled = FALSE; switch (Index) { case ACPI_EVENT_RESERVED_NAME: /* _Lxx/_Exx/_Wxx/_Qxx methods */ /* No return value expected, warn if there is one */ ApCheckForUnexpectedReturnValue (Op, MethodInfo); return; case ACPI_NOT_RESERVED_NAME: /* No underscore or _Txx or _xxx name not matched */ case ACPI_PREDEFINED_NAME: /* Resource Name or reserved scope name */ case ACPI_COMPILER_RESERVED_NAME: /* A _Txx that was not emitted by compiler */ /* Just return, nothing to do */ return; default: /* A standard predefined ACPI name */ ThisName = &AcpiGbl_PredefinedMethods[Index]; if (!ThisName->Info.ExpectedBtypes) { /* No return value expected, warn if there is one */ ApCheckForUnexpectedReturnValue (Op, MethodInfo); return; } /* Get the object returned, it is the next argument */ ReturnValueOp = Op->Asl.Child; switch (ReturnValueOp->Asl.ParseOpcode) { case PARSEOP_ZERO: case PARSEOP_ONE: case PARSEOP_ONES: case PARSEOP_INTEGER: case PARSEOP_STRING_LITERAL: case PARSEOP_BUFFER: case PARSEOP_PACKAGE: /* Static data return object - check against expected type */ ApCheckObjectType (ThisName->Info.Name, ReturnValueOp, ThisName->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT); /* For packages, check the individual package elements */ if (ReturnValueOp->Asl.ParseOpcode == PARSEOP_PACKAGE) { ApCheckPackage (ReturnValueOp, ThisName); } break; default: /* * All other ops are very difficult or impossible to typecheck at * compile time. These include all Localx, Argx, and method * invocations. Also, NAMESEG and NAMESTRING because the type of * any named object can be changed at runtime (for example, * CopyObject will change the type of the target object.) */ break; } } } /******************************************************************************* * * FUNCTION: ApCheckForPredefinedObject * * PARAMETERS: Op - A parse node * Name - The ACPI name to be checked * * RETURN: None * * DESCRIPTION: Check for a predefined name for a static object (created via * the ASL Name operator). If it is a predefined ACPI name, ensure * that the name does not require any arguments (which would * require a control method implementation of the name), and that * the type of the object is one of the expected types for the * predefined name. * ******************************************************************************/ void ApCheckForPredefinedObject ( ACPI_PARSE_OBJECT *Op, char *Name) { UINT32 Index; ACPI_PARSE_OBJECT *ObjectOp; const ACPI_PREDEFINED_INFO *ThisName; /* * Check for a real predefined name -- not a resource descriptor name * or a predefined scope name */ Index = ApCheckForPredefinedName (Op, Name); switch (Index) { case ACPI_NOT_RESERVED_NAME: /* No underscore or _Txx or _xxx name not matched */ case ACPI_PREDEFINED_NAME: /* Resource Name or reserved scope name */ case ACPI_COMPILER_RESERVED_NAME: /* A _Txx that was not emitted by compiler */ /* Nothing to do */ return; case ACPI_EVENT_RESERVED_NAME: /* _Lxx/_Exx/_Wxx/_Qxx methods */ /* * These names must be control methods, by definition in ACPI spec. * Also because they are defined to return no value. None of them * require any arguments. */ AslError (ASL_ERROR, ASL_MSG_RESERVED_METHOD, Op, "with zero arguments"); return; default: break; } /* A standard predefined ACPI name */ /* * If this predefined name requires input arguments, then * it must be implemented as a control method */ ThisName = &AcpiGbl_PredefinedMethods[Index]; if (METHOD_GET_ARG_COUNT (ThisName->Info.ArgumentList) > 0) { AslError (ASL_ERROR, ASL_MSG_RESERVED_METHOD, Op, "with arguments"); return; } /* * If no return value is expected from this predefined name, then * it follows that it must be implemented as a control method * (with zero args, because the args > 0 case was handled above) * Examples are: _DIS, _INI, _IRC, _OFF, _ON, _PSx */ if (!ThisName->Info.ExpectedBtypes) { AslError (ASL_ERROR, ASL_MSG_RESERVED_METHOD, Op, "with zero arguments"); return; } /* Typecheck the actual object, it is the next argument */ ObjectOp = Op->Asl.Child->Asl.Next; ApCheckObjectType (ThisName->Info.Name, Op->Asl.Child->Asl.Next, ThisName->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT); /* For packages, check the individual package elements */ if (ObjectOp->Asl.ParseOpcode == PARSEOP_PACKAGE) { ApCheckPackage (ObjectOp, ThisName); } } /******************************************************************************* * * FUNCTION: ApCheckForPredefinedName * * PARAMETERS: Op - A parse node * Name - NameSeg to check * * RETURN: None * * DESCRIPTION: Check a NameSeg against the reserved list. * ******************************************************************************/ UINT32 ApCheckForPredefinedName ( ACPI_PARSE_OBJECT *Op, char *Name) { UINT32 i; const ACPI_PREDEFINED_INFO *ThisName; if (Name[0] == 0) { AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Op, "Zero length name found"); } /* All reserved names are prefixed with a single underscore */ if (Name[0] != '_') { return (ACPI_NOT_RESERVED_NAME); } /* Check for a standard predefined method name */ ThisName = AcpiGbl_PredefinedMethods; for (i = 0; ThisName->Info.Name[0]; i++) { if (ACPI_COMPARE_NAMESEG (Name, ThisName->Info.Name)) { /* Return index into predefined array */ return (i); } ThisName++; /* Does not account for extra package data, but is OK */ } /* Check for resource names and predefined scope names */ ThisName = AcpiGbl_ResourceNames; while (ThisName->Info.Name[0]) { if (ACPI_COMPARE_NAMESEG (Name, ThisName->Info.Name)) { return (ACPI_PREDEFINED_NAME); } ThisName++; } ThisName = AcpiGbl_ScopeNames; while (ThisName->Info.Name[0]) { if (ACPI_COMPARE_NAMESEG (Name, ThisName->Info.Name)) { return (ACPI_PREDEFINED_NAME); } ThisName++; } /* Check for _Lxx/_Exx/_Wxx/_Qxx/_T_x. Warning if unknown predefined name */ return (ApCheckForSpecialName (Op, Name)); } /******************************************************************************* * * FUNCTION: ApCheckForSpecialName * * PARAMETERS: Op - A parse node * Name - NameSeg to check * * RETURN: None * * DESCRIPTION: Check for the "special" predefined names - * _Lxx, _Exx, _Qxx, _Wxx, and _T_x * ******************************************************************************/ static UINT32 ApCheckForSpecialName ( ACPI_PARSE_OBJECT *Op, char *Name) { /* * Check for the "special" predefined names. We already know that the * first character is an underscore. * GPE: _Lxx * GPE: _Exx * GPE: _Wxx * EC: _Qxx */ if ((Name[1] == 'L') || (Name[1] == 'E') || (Name[1] == 'W') || (Name[1] == 'Q')) { /* The next two characters must be hex digits */ if ((isxdigit ((int) Name[2])) && (isxdigit ((int) Name[3]))) { return (ACPI_EVENT_RESERVED_NAME); } } /* Check for the names reserved for the compiler itself: _T_x */ else if ((Op->Asl.ExternalName[1] == 'T') && (Op->Asl.ExternalName[2] == '_')) { /* Ignore if actually emitted by the compiler */ if (Op->Asl.CompileFlags & OP_COMPILER_EMITTED) { return (ACPI_NOT_RESERVED_NAME); } /* * Was not actually emitted by the compiler. This is a special case, * however. If the ASL code being compiled was the result of a * disassembly, it may possibly contain valid compiler-emitted names * of the form "_T_x". We don't want to issue an error or even a * warning and force the user to manually change the names. So, we * will issue a remark instead. */ AslError (ASL_REMARK, ASL_MSG_COMPILER_RESERVED, Op, Op->Asl.ExternalName); return (ACPI_COMPILER_RESERVED_NAME); } /* * The name didn't match any of the known predefined names. Flag it as a * warning, since the entire namespace starting with an underscore is * reserved by the ACPI spec. */ AslError (ASL_WARNING, ASL_MSG_UNKNOWN_RESERVED_NAME, Op, Op->Asl.ExternalName); return (ACPI_NOT_RESERVED_NAME); } /******************************************************************************* * * FUNCTION: ApCheckObjectType * * PARAMETERS: PredefinedName - Name of the predefined object we are checking * Op - Current parse node * ExpectedBtypes - Bitmap of expected return type(s) * PackageIndex - Index of object within parent package (if * applicable - ACPI_NOT_PACKAGE_ELEMENT * otherwise) * * RETURN: None * * DESCRIPTION: Check if the object type is one of the types that is expected * by the predefined name. Only a limited number of object types * can be returned by the predefined names. * ******************************************************************************/ ACPI_STATUS ApCheckObjectType ( const char *PredefinedName, ACPI_PARSE_OBJECT *Op, UINT32 ExpectedBtypes, UINT32 PackageIndex) { UINT32 ReturnBtype; char *TypeName; if (!Op) { return (AE_TYPE); } /* Map the parse opcode to a bitmapped return type (RTYPE) */ switch (Op->Asl.ParseOpcode) { case PARSEOP_ZERO: case PARSEOP_ONE: case PARSEOP_ONES: case PARSEOP_INTEGER: ReturnBtype = ACPI_RTYPE_INTEGER; TypeName = "Integer"; break; case PARSEOP_STRING_LITERAL: ReturnBtype = ACPI_RTYPE_STRING; TypeName = "String"; break; case PARSEOP_BUFFER: ReturnBtype = ACPI_RTYPE_BUFFER; TypeName = "Buffer"; break; case PARSEOP_PACKAGE: case PARSEOP_VAR_PACKAGE: ReturnBtype = ACPI_RTYPE_PACKAGE; TypeName = "Package"; break; case PARSEOP_NAMESEG: case PARSEOP_NAMESTRING: /* * Ignore any named references within a package object. * * For Package objects, references are allowed instead of any of the * standard data types (Integer/String/Buffer/Package). These * references are resolved at runtime. NAMESEG and NAMESTRING are * impossible to typecheck at compile time because the type of * any named object can be changed at runtime (for example, * CopyObject will change the type of the target object). */ if (PackageIndex != ACPI_NOT_PACKAGE_ELEMENT) { return (AE_OK); } ReturnBtype = ACPI_RTYPE_REFERENCE; TypeName = "Reference"; break; default: /* Not one of the supported object types */ TypeName = UtGetOpName (Op->Asl.ParseOpcode); goto TypeErrorExit; } /* Exit if the object is one of the expected types */ if (ReturnBtype & ExpectedBtypes) { return (AE_OK); } TypeErrorExit: /* Format the expected types and emit an error message */ AcpiUtGetExpectedReturnTypes (AslGbl_StringBuffer, ExpectedBtypes); if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT) { sprintf (AslGbl_MsgBuffer, "%4.4s: found %s, %s required", PredefinedName, TypeName, AslGbl_StringBuffer); } else { sprintf (AslGbl_MsgBuffer, "%4.4s: found %s at index %u, %s required", PredefinedName, TypeName, PackageIndex, AslGbl_StringBuffer); } AslError (ASL_ERROR, ASL_MSG_RESERVED_OPERAND_TYPE, Op, AslGbl_MsgBuffer); return (AE_TYPE); } /******************************************************************************* * * FUNCTION: ApDisplayReservedNames * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Dump information about the ACPI predefined names and predefined * resource descriptor names. * ******************************************************************************/ void ApDisplayReservedNames ( void) { const ACPI_PREDEFINED_INFO *ThisName; UINT32 Count; UINT32 NumTypes; /* * Predefined names/methods */ printf ("\nPredefined Name Information\n\n"); Count = 0; ThisName = AcpiGbl_PredefinedMethods; while (ThisName->Info.Name[0]) { AcpiUtDisplayPredefinedMethod (AslGbl_MsgBuffer, ThisName, FALSE); Count++; ThisName = AcpiUtGetNextPredefinedMethod (ThisName); } printf ("%u Predefined Names are recognized\n", Count); /* * Resource Descriptor names */ printf ("\nPredefined Names for Resource Descriptor Fields\n\n"); Count = 0; ThisName = AcpiGbl_ResourceNames; while (ThisName->Info.Name[0]) { NumTypes = AcpiUtGetResourceBitWidth (AslGbl_MsgBuffer, ThisName->Info.ArgumentList); printf ("%4.4s Field is %s bits wide%s\n", ThisName->Info.Name, AslGbl_MsgBuffer, (NumTypes > 1) ? " (depending on descriptor type)" : ""); Count++; ThisName++; } printf ("%u Resource Descriptor Field Names are recognized\n", Count); /* * Predefined scope names */ printf ("\nPredefined Scope/Device Names (automatically created at root)\n\n"); ThisName = AcpiGbl_ScopeNames; while (ThisName->Info.Name[0]) { printf ("%4.4s Scope/Device\n", ThisName->Info.Name); ThisName++; } } src/acpica/source/compiler/aslprepkg.c000066400000000000000000001017431465205512700203500ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslprepkg - support for ACPI predefined name package objects * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acpredef.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslprepkg") /* Local prototypes */ static ACPI_PARSE_OBJECT * ApCheckPackageElements ( const char *PredefinedName, ACPI_PARSE_OBJECT *Op, UINT8 Type1, UINT32 Count1, UINT8 Type2, UINT32 Count2); static void ApCheckPackageList ( const char *PredefinedName, ACPI_PARSE_OBJECT *ParentOp, const ACPI_PREDEFINED_INFO *Package, UINT32 StartIndex, UINT32 Count); static void ApPackageTooSmall ( const char *PredefinedName, ACPI_PARSE_OBJECT *Op, UINT32 Count, UINT32 ExpectedCount); static void ApZeroLengthPackage ( const char *PredefinedName, ACPI_PARSE_OBJECT *Op); static void ApPackageTooLarge ( const char *PredefinedName, ACPI_PARSE_OBJECT *Op, UINT32 Count, UINT32 ExpectedCount); static void ApCustomPackage ( ACPI_PARSE_OBJECT *ParentOp, const ACPI_PREDEFINED_INFO *Predefined); /******************************************************************************* * * FUNCTION: ApCheckPackage * * PARAMETERS: ParentOp - Parser op for the package * Predefined - Pointer to package-specific info for * the method * * RETURN: None * * DESCRIPTION: Top-level validation for predefined name return package * objects. * ******************************************************************************/ void ApCheckPackage ( ACPI_PARSE_OBJECT *ParentOp, const ACPI_PREDEFINED_INFO *Predefined) { ACPI_PARSE_OBJECT *Op; const ACPI_PREDEFINED_INFO *Package; ACPI_STATUS Status; UINT32 ExpectedCount; UINT32 Count; UINT32 i; /* The package info for this name is in the next table entry */ Package = Predefined + 1; /* First child is the package length */ Op = ParentOp->Asl.Child; Count = (UINT32) Op->Asl.Value.Integer; /* * Many of the variable-length top-level packages are allowed to simply * have zero elements. This allows the BIOS to tell the host that even * though the predefined name/method exists, the feature is not supported. * Other package types require one or more elements. In any case, there * is no need to continue validation. */ if (!Count) { switch (Package->RetInfo.Type) { case ACPI_PTYPE1_FIXED: case ACPI_PTYPE1_OPTION: case ACPI_PTYPE2_PKG_COUNT: case ACPI_PTYPE2_REV_FIXED: ApZeroLengthPackage (Predefined->Info.Name, ParentOp); break; case ACPI_PTYPE1_VAR: case ACPI_PTYPE2: case ACPI_PTYPE2_COUNT: case ACPI_PTYPE2_FIXED: case ACPI_PTYPE2_MIN: case ACPI_PTYPE2_FIX_VAR: case ACPI_PTYPE2_VAR_VAR: default: break; } return; } /* Get the first element of the package */ Op = Op->Asl.Next; /* Decode the package type */ switch (Package->RetInfo.Type) { case ACPI_PTYPE_CUSTOM: ApCustomPackage (ParentOp, Predefined); break; case ACPI_PTYPE1_FIXED: /* * The package count is fixed and there are no subpackages * * If package is too small, exit. * If package is larger than expected, issue warning but continue */ ExpectedCount = Package->RetInfo.Count1 + Package->RetInfo.Count2; if (Count < ExpectedCount) { goto PackageTooSmall; } else if (Count > ExpectedCount) { ApPackageTooLarge (Predefined->Info.Name, ParentOp, Count, ExpectedCount); } /* Validate all elements of the package */ ApCheckPackageElements (Predefined->Info.Name, Op, Package->RetInfo.ObjectType1, Package->RetInfo.Count1, Package->RetInfo.ObjectType2, Package->RetInfo.Count2); break; case ACPI_PTYPE1_VAR: /* * The package count is variable, there are no subpackages, * and all elements must be of the same type */ for (i = 0; i < Count; i++) { if (!Op) { /* * If we get to this point, it means that the package length * is larger than the initializer list. Stop processing the * package and return because we have run out of package * elements to analyze. */ return; } ApCheckObjectType (Predefined->Info.Name, Op, Package->RetInfo.ObjectType1, i); Op = Op->Asl.Next; } break; case ACPI_PTYPE1_OPTION: /* * The package count is variable, there are no subpackages. * There are a fixed number of required elements, and a variable * number of optional elements. * * Check if package is at least as large as the minimum required */ ExpectedCount = Package->RetInfo3.Count; if (Count < ExpectedCount) { goto PackageTooSmall; } /* Variable number of sub-objects */ for (i = 0; i < Count; i++) { if (i < Package->RetInfo3.Count) { /* These are the required package elements (0, 1, or 2) */ ApCheckObjectType (Predefined->Info.Name, Op, Package->RetInfo3.ObjectType[i], i); } else { /* These are the optional package elements */ ApCheckObjectType (Predefined->Info.Name, Op, Package->RetInfo3.TailObjectType, i); } Op = Op->Asl.Next; } break; case ACPI_PTYPE2_REV_FIXED: /* First element is the (Integer) revision */ ApCheckObjectType (Predefined->Info.Name, Op, ACPI_RTYPE_INTEGER, 0); Op = Op->Asl.Next; Count--; /* Examine the subpackages */ ApCheckPackageList (Predefined->Info.Name, Op, Package, 1, Count); break; case ACPI_PTYPE2_PKG_COUNT: /* First element is the (Integer) count of subpackages to follow */ Status = ApCheckObjectType (Predefined->Info.Name, Op, ACPI_RTYPE_INTEGER, 0); /* We must have an integer count from above (otherwise, use Count) */ if (ACPI_SUCCESS (Status)) { /* * Count cannot be larger than the parent package length, but * allow it to be smaller. The >= accounts for the Integer above. */ ExpectedCount = (UINT32) Op->Asl.Value.Integer; if (ExpectedCount >= Count) { goto PackageTooSmall; } Count = ExpectedCount; } Op = Op->Asl.Next; /* Examine the subpackages */ ApCheckPackageList (Predefined->Info.Name, Op, Package, 1, Count); break; case ACPI_PTYPE2_UUID_PAIR: /* The package contains a variable list of UUID Buffer/Package pairs */ /* The length of the package must be even */ if (Count & 1) { sprintf (AslGbl_MsgBuffer, "%4.4s: Package length, %d, must be even.", Predefined->Info.Name, Count); AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH, ParentOp->Asl.Child, AslGbl_MsgBuffer); } /* Validate the alternating types */ for (i = 0; i < Count; ++i) { if (i & 1) { ApCheckObjectType (Predefined->Info.Name, Op, Package->RetInfo.ObjectType2, i); } else { ApCheckObjectType (Predefined->Info.Name, Op, Package->RetInfo.ObjectType1, i); } Op = Op->Asl.Next; } break; case ACPI_PTYPE2_VAR_VAR: /* Check for minimum size (ints at beginning + 1 subpackage) */ ExpectedCount = Package->RetInfo4.Count1 + 1; if (Count < ExpectedCount) { goto PackageTooSmall; } /* Check the non-package elements at beginning of main package */ for (i = 0; i < Package->RetInfo4.Count1; ++i) { ApCheckObjectType (Predefined->Info.Name, Op, Package->RetInfo4.ObjectType1, i); Op = Op->Asl.Next; } /* Examine the variable-length list of subpackages */ ApCheckPackageList (Predefined->Info.Name, Op, Package, Package->RetInfo4.Count1, Count); break; case ACPI_PTYPE2: case ACPI_PTYPE2_FIXED: case ACPI_PTYPE2_MIN: case ACPI_PTYPE2_COUNT: case ACPI_PTYPE2_FIX_VAR: /* * These types all return a single Package that consists of a * variable number of subpackages. */ /* Examine the subpackages */ ApCheckPackageList (Predefined->Info.Name, Op, Package, 0, Count); break; default: return; } return; PackageTooSmall: ApPackageTooSmall (Predefined->Info.Name, ParentOp, Count, ExpectedCount); } /******************************************************************************* * * FUNCTION: ApCustomPackage * * PARAMETERS: ParentOp - Parse op for the package * Predefined - Pointer to package-specific info for * the method * * RETURN: None * * DESCRIPTION: Validate packages that don't fit into the standard model and * require custom code. * * NOTE: Currently used for the _BIX method only. When needed for two or more * methods, probably a detect/dispatch mechanism will be required. * ******************************************************************************/ static void ApCustomPackage ( ACPI_PARSE_OBJECT *ParentOp, const ACPI_PREDEFINED_INFO *Predefined) { ACPI_PARSE_OBJECT *Op; UINT32 Count; UINT32 ExpectedCount; UINT32 Version; /* First child is the package length */ Op = ParentOp->Asl.Child; Count = (UINT32) Op->Asl.Value.Integer; /* Get the version number, must be Integer */ Op = Op->Asl.Next; Version = (UINT32) Op->Asl.Value.Integer; if (Op->Asl.ParseOpcode != PARSEOP_INTEGER) { AslError (ASL_ERROR, ASL_MSG_RESERVED_OPERAND_TYPE, Op, AslGbl_MsgBuffer); return; } /* Validate count (# of elements) */ ExpectedCount = 21; /* Version 1 */ if (Version == 0) { ExpectedCount = 20; /* Version 0 */ } if (Count < ExpectedCount) { ApPackageTooSmall (Predefined->Info.Name, ParentOp, Count, ExpectedCount); return; } else if (Count > ExpectedCount) { ApPackageTooLarge (Predefined->Info.Name, ParentOp, Count, ExpectedCount); } /* Validate all elements of the package */ Op = ApCheckPackageElements (Predefined->Info.Name, Op, ACPI_RTYPE_INTEGER, 16, ACPI_RTYPE_STRING, 4); /* Version 1 has a single trailing integer */ if (Version > 0) { ApCheckPackageElements (Predefined->Info.Name, Op, ACPI_RTYPE_INTEGER, 1, 0, 0); } } /******************************************************************************* * * FUNCTION: ApCheckPackageElements * * PARAMETERS: PredefinedName - Name of the predefined object * Op - Parser op for the package * Type1 - Object type for first group * Count1 - Count for first group * Type2 - Object type for second group * Count2 - Count for second group * * RETURN: Next Op peer in the parse tree, after all specified elements * have been validated. Used for multiple validations (calls * to this function). * * DESCRIPTION: Validate all elements of a package. Works with packages that * are defined to contain up to two groups of different object * types. * ******************************************************************************/ static ACPI_PARSE_OBJECT * ApCheckPackageElements ( const char *PredefinedName, ACPI_PARSE_OBJECT *Op, UINT8 Type1, UINT32 Count1, UINT8 Type2, UINT32 Count2) { UINT32 i; /* * Up to two groups of package elements are supported by the data * structure. All elements in each group must be of the same type. * The second group can have a count of zero. * * Aborts check upon a NULL package element, as this means (at compile * time) that the remainder of the package elements are also NULL * (This is the only way to create NULL package elements.) */ for (i = 0; (i < Count1) && Op; i++) { ApCheckObjectType (PredefinedName, Op, Type1, i); Op = Op->Asl.Next; } for (i = 0; (i < Count2) && Op; i++) { ApCheckObjectType (PredefinedName, Op, Type2, (i + Count1)); Op = Op->Asl.Next; } return (Op); } /******************************************************************************* * * FUNCTION: ApCheckPackageList * * PARAMETERS: PredefinedName - Name of the predefined object * ParentOp - Parser op of the parent package * Package - Package info for this predefined name * StartIndex - Index in parent package where list begins * ParentCount - Element count of parent package * * RETURN: None * * DESCRIPTION: Validate the individual package elements for a predefined name. * Handles the cases where the predefined name is defined as a * Package of Packages (subpackages). These are the types: * * ACPI_PTYPE2 * ACPI_PTYPE2_FIXED * ACPI_PTYPE2_MIN * ACPI_PTYPE2_COUNT * ACPI_PTYPE2_FIX_VAR * ACPI_PTYPE2_VAR_VAR * ******************************************************************************/ static void ApCheckPackageList ( const char *PredefinedName, ACPI_PARSE_OBJECT *ParentOp, const ACPI_PREDEFINED_INFO *Package, UINT32 StartIndex, UINT32 ParentCount) { ACPI_PARSE_OBJECT *SubPackageOp = ParentOp; ACPI_PARSE_OBJECT *Op; ACPI_STATUS Status; UINT32 Count; UINT32 ExpectedCount; UINT32 i; UINT32 j; /* * Validate each subpackage in the parent Package * * Note: We ignore NULL package elements on the assumption that * they will be initialized by the BIOS or other ASL code. */ for (i = 0; (i < ParentCount) && SubPackageOp; i++) { /* Each object in the list must be of type Package */ Status = ApCheckObjectType (PredefinedName, SubPackageOp, ACPI_RTYPE_PACKAGE, i + StartIndex); if (ACPI_FAILURE (Status)) { goto NextSubpackage; } /* Examine the different types of expected subpackages */ Op = SubPackageOp->Asl.Child; /* First child is the package length */ Count = (UINT32) Op->Asl.Value.Integer; Op = Op->Asl.Next; /* * Most subpackage must have at least one element, with * only rare exceptions. (_RDI) */ if (!Count && (Package->RetInfo.Type != ACPI_PTYPE2_VAR_VAR)) { ApZeroLengthPackage (PredefinedName, SubPackageOp); goto NextSubpackage; } /* * Decode the package type. * PTYPE2 indicates that a "package of packages" is expected for * this name. The various flavors of PTYPE2 indicate the number * and format of the subpackages. */ switch (Package->RetInfo.Type) { case ACPI_PTYPE2: case ACPI_PTYPE2_PKG_COUNT: case ACPI_PTYPE2_REV_FIXED: /* Each subpackage has a fixed number of elements */ ExpectedCount = Package->RetInfo.Count1 + Package->RetInfo.Count2; if (Count < ExpectedCount) { ApPackageTooSmall (PredefinedName, SubPackageOp, Count, ExpectedCount); break; } if (Count > ExpectedCount) { ApPackageTooLarge (PredefinedName, SubPackageOp, Count, ExpectedCount); break; } ApCheckPackageElements (PredefinedName, Op, Package->RetInfo.ObjectType1, Package->RetInfo.Count1, Package->RetInfo.ObjectType2, Package->RetInfo.Count2); break; case ACPI_PTYPE2_FIX_VAR: /* * Each subpackage has a fixed number of elements and an * optional element */ ExpectedCount = Package->RetInfo.Count1 + Package->RetInfo.Count2; if (Count < ExpectedCount) { ApPackageTooSmall (PredefinedName, SubPackageOp, Count, ExpectedCount); break; } ApCheckPackageElements (PredefinedName, Op, Package->RetInfo.ObjectType1, Package->RetInfo.Count1, Package->RetInfo.ObjectType2, Count - Package->RetInfo.Count1); break; case ACPI_PTYPE2_VAR_VAR: /* * Must have at least the minimum number elements. * A zero PkgCount means the number of elements is variable. */ ExpectedCount = Package->RetInfo4.PkgCount; if (ExpectedCount && (Count < ExpectedCount)) { ApPackageTooSmall (PredefinedName, SubPackageOp, Count, 1); break; } ApCheckPackageElements (PredefinedName, Op, Package->RetInfo4.SubObjectTypes, Package->RetInfo4.PkgCount, 0, 0); break; case ACPI_PTYPE2_FIXED: /* Each subpackage has a fixed length */ ExpectedCount = Package->RetInfo2.Count; if (Count < ExpectedCount) { ApPackageTooSmall (PredefinedName, SubPackageOp, Count, ExpectedCount); break; } if (Count > ExpectedCount) { ApPackageTooLarge (PredefinedName, SubPackageOp, Count, ExpectedCount); break; } /* Check each object/type combination */ for (j = 0; j < ExpectedCount; j++) { ApCheckObjectType (PredefinedName, Op, Package->RetInfo2.ObjectType[j], j); Op = Op->Asl.Next; } break; case ACPI_PTYPE2_MIN: /* Each subpackage has a variable but minimum length */ ExpectedCount = Package->RetInfo.Count1; if (Count < ExpectedCount) { ApPackageTooSmall (PredefinedName, SubPackageOp, Count, ExpectedCount); break; } /* Check the type of each subpackage element */ ApCheckPackageElements (PredefinedName, Op, Package->RetInfo.ObjectType1, Count, 0, 0); break; case ACPI_PTYPE2_COUNT: /* * First element is the (Integer) count of elements, including * the count field (the ACPI name is NumElements) */ Status = ApCheckObjectType (PredefinedName, Op, ACPI_RTYPE_INTEGER, 0); /* We must have an integer count from above (otherwise, use Count) */ if (ACPI_SUCCESS (Status)) { /* * Make sure package is large enough for the Count and is * is as large as the minimum size */ ExpectedCount = (UINT32) Op->Asl.Value.Integer; if (Count < ExpectedCount) { ApPackageTooSmall (PredefinedName, SubPackageOp, Count, ExpectedCount); break; } else if (Count > ExpectedCount) { ApPackageTooLarge (PredefinedName, SubPackageOp, Count, ExpectedCount); } /* Some names of this type have a minimum length */ if (Count < Package->RetInfo.Count1) { ExpectedCount = Package->RetInfo.Count1; ApPackageTooSmall (PredefinedName, SubPackageOp, Count, ExpectedCount); break; } Count = ExpectedCount; } /* Check the type of each subpackage element */ Op = Op->Asl.Next; ApCheckPackageElements (PredefinedName, Op, Package->RetInfo.ObjectType1, (Count - 1), 0, 0); break; default: break; } NextSubpackage: SubPackageOp = SubPackageOp->Asl.Next; } } /******************************************************************************* * * FUNCTION: ApPackageTooSmall * * PARAMETERS: PredefinedName - Name of the predefined object * Op - Current parser op * Count - Actual package element count * ExpectedCount - Expected package element count * * RETURN: None * * DESCRIPTION: Issue error message for a package that is smaller than * required. * ******************************************************************************/ static void ApPackageTooSmall ( const char *PredefinedName, ACPI_PARSE_OBJECT *Op, UINT32 Count, UINT32 ExpectedCount) { sprintf (AslGbl_MsgBuffer, "%4.4s: length %u, required minimum is %u", PredefinedName, Count, ExpectedCount); AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH, Op, AslGbl_MsgBuffer); } /******************************************************************************* * * FUNCTION: ApZeroLengthPackage * * PARAMETERS: PredefinedName - Name of the predefined object * Op - Current parser op * * RETURN: None * * DESCRIPTION: Issue error message for a zero-length package (a package that * is required to have a non-zero length). Variable length * packages seem to be allowed to have zero length, however. * Even if not allowed, BIOS code does it. * ******************************************************************************/ static void ApZeroLengthPackage ( const char *PredefinedName, ACPI_PARSE_OBJECT *Op) { sprintf (AslGbl_MsgBuffer, "%4.4s: length is zero", PredefinedName); AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH, Op, AslGbl_MsgBuffer); } /******************************************************************************* * * FUNCTION: ApPackageTooLarge * * PARAMETERS: PredefinedName - Name of the predefined object * Op - Current parser op * Count - Actual package element count * ExpectedCount - Expected package element count * * RETURN: None * * DESCRIPTION: Issue a remark for a package that is larger than expected. * ******************************************************************************/ static void ApPackageTooLarge ( const char *PredefinedName, ACPI_PARSE_OBJECT *Op, UINT32 Count, UINT32 ExpectedCount) { sprintf (AslGbl_MsgBuffer, "%4.4s: length is %u, only %u required", PredefinedName, Count, ExpectedCount); AslError (ASL_REMARK, ASL_MSG_RESERVED_PACKAGE_LENGTH, Op, AslGbl_MsgBuffer); } src/acpica/source/compiler/aslprimaries.y000066400000000000000000001503731465205512700211040ustar00rootroot00000000000000NoEcho(' /****************************************************************************** * * Module Name: aslprimaries.y - Rules for primary ASL operators * - Keep this file synched with the * CvParseOpBlockType function in cvcompiler.c * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ ') /******************************************************************************* * * ASL Primary Terms * ******************************************************************************/ AccessAsTerm : PARSEOP_ACCESSAS PARSEOP_OPEN_PAREN AccessTypeKeyword OptionalAccessAttribTerm PARSEOP_CLOSE_PAREN {$$ = TrCreateOp (PARSEOP_ACCESSAS,2,$3,$4);} | PARSEOP_ACCESSAS PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; AcquireTerm : PARSEOP_ACQUIRE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp(PARSEOP_ACQUIRE);} SuperName ',' WordConstExpr PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$6);} | PARSEOP_ACQUIRE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; AddTerm : PARSEOP_ADD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_ADD);} TermArg TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_ADD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; AliasTerm : PARSEOP_ALIAS PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_ALIAS);} NameString NameStringItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4, TrSetOpFlags ($5, OP_IS_NAME_DECLARATION));} | PARSEOP_ALIAS PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; AndTerm : PARSEOP_AND PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_AND);} TermArg TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_AND PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ArgTerm : PARSEOP_ARG0 {$$ = TrCreateLeafOp (PARSEOP_ARG0);} | PARSEOP_ARG1 {$$ = TrCreateLeafOp (PARSEOP_ARG1);} | PARSEOP_ARG2 {$$ = TrCreateLeafOp (PARSEOP_ARG2);} | PARSEOP_ARG3 {$$ = TrCreateLeafOp (PARSEOP_ARG3);} | PARSEOP_ARG4 {$$ = TrCreateLeafOp (PARSEOP_ARG4);} | PARSEOP_ARG5 {$$ = TrCreateLeafOp (PARSEOP_ARG5);} | PARSEOP_ARG6 {$$ = TrCreateLeafOp (PARSEOP_ARG6);} ; BankFieldTerm : PARSEOP_BANKFIELD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_BANKFIELD);} NameString NameStringItem TermArgItem OptionalAccessTypeKeyword OptionalLockRuleKeyword OptionalUpdateRuleKeyword PARSEOP_CLOSE_PAREN '{' FieldUnitList '}' {$$ = TrLinkOpChildren ($3,7, $4,$5,$6,$7,$8,$9,$12);} | PARSEOP_BANKFIELD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN '{' error '}' {$$ = AslDoError(); yyclearin;} ; BreakTerm : PARSEOP_BREAK {$$ = TrCreateOp (PARSEOP_BREAK, 0);} ; BreakPointTerm : PARSEOP_BREAKPOINT {$$ = TrCreateOp (PARSEOP_BREAKPOINT, 0);} ; BufferTerm : PARSEOP_BUFFER {$$ = TrCreateLeafOp (PARSEOP_BUFFER); COMMENT_CAPTURE_OFF; } OptionalDataCount '{' BufferTermData '}' {$$ = TrLinkOpChildren ($2,2,$3,$5); COMMENT_CAPTURE_ON;} ; BufferTermData : ByteList {} | StringData {} ; CaseTerm : PARSEOP_CASE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_CASE);} DataObject PARSEOP_CLOSE_PAREN '{' TermList '}' {$$ = TrLinkOpChildren ($3,2,$4,$7);} | PARSEOP_CASE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ConcatTerm : PARSEOP_CONCATENATE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_CONCATENATE);} TermArg TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_CONCATENATE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ConcatResTerm : PARSEOP_CONCATENATERESTEMPLATE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp ( PARSEOP_CONCATENATERESTEMPLATE);} TermArg TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_CONCATENATERESTEMPLATE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; CondRefOfTerm : PARSEOP_CONDREFOF PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_CONDREFOF);} CondRefOfSource Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_CONDREFOF PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ConnectionTerm : PARSEOP_CONNECTION PARSEOP_OPEN_PAREN NameString PARSEOP_CLOSE_PAREN {$$ = TrCreateOp (PARSEOP_CONNECTION,1,$3);} | PARSEOP_CONNECTION PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_CONNECTION);} ResourceMacroTerm PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3, 1, TrLinkOpChildren ( TrCreateLeafOp (PARSEOP_RESOURCETEMPLATE), 3, TrCreateLeafOp (PARSEOP_DEFAULT_ARG), TrCreateLeafOp (PARSEOP_DEFAULT_ARG), $4));} | PARSEOP_CONNECTION PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ContinueTerm : PARSEOP_CONTINUE {$$ = TrCreateOp (PARSEOP_CONTINUE, 0);} ; CopyObjectTerm : PARSEOP_COPYOBJECT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_COPYOBJECT);} TermArg ',' SimpleName PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4, TrSetOpFlags ($6, OP_IS_TARGET));} | PARSEOP_COPYOBJECT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; CreateBitFieldTerm : PARSEOP_CREATEBITFIELD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_CREATEBITFIELD);} TermArg TermArgItem NameStringItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5, TrSetOpFlags ($6, OP_IS_NAME_DECLARATION));} | PARSEOP_CREATEBITFIELD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; CreateByteFieldTerm : PARSEOP_CREATEBYTEFIELD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_CREATEBYTEFIELD);} TermArg TermArgItem NameStringItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5, TrSetOpFlags ($6, OP_IS_NAME_DECLARATION));} | PARSEOP_CREATEBYTEFIELD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; CreateDWordFieldTerm : PARSEOP_CREATEDWORDFIELD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_CREATEDWORDFIELD);} TermArg TermArgItem NameStringItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5, TrSetOpFlags ($6, OP_IS_NAME_DECLARATION));} | PARSEOP_CREATEDWORDFIELD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; CreateFieldTerm : PARSEOP_CREATEFIELD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_CREATEFIELD);} TermArg TermArgItem TermArgItem NameStringItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,4,$4,$5,$6, TrSetOpFlags ($7, OP_IS_NAME_DECLARATION));} | PARSEOP_CREATEFIELD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; CreateQWordFieldTerm : PARSEOP_CREATEQWORDFIELD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_CREATEQWORDFIELD);} TermArg TermArgItem NameStringItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5, TrSetOpFlags ($6, OP_IS_NAME_DECLARATION));} | PARSEOP_CREATEQWORDFIELD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; CreateWordFieldTerm : PARSEOP_CREATEWORDFIELD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_CREATEWORDFIELD);} TermArg TermArgItem NameStringItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5, TrSetOpFlags ($6, OP_IS_NAME_DECLARATION));} | PARSEOP_CREATEWORDFIELD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; DataRegionTerm : PARSEOP_DATATABLEREGION PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_DATATABLEREGION);} NameString TermArgItem TermArgItem TermArgItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,4, TrSetOpFlags ($4, OP_IS_NAME_DECLARATION),$5,$6,$7);} | PARSEOP_DATATABLEREGION PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; DebugTerm : PARSEOP_DEBUG {$$ = TrCreateLeafOp (PARSEOP_DEBUG);} ; DecTerm : PARSEOP_DECREMENT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_DECREMENT);} SuperName PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_DECREMENT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; DefaultTerm : PARSEOP_DEFAULT '{' {$$ = TrCreateLeafOp (PARSEOP_DEFAULT);} TermList '}' {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_DEFAULT '{' error '}' {$$ = AslDoError(); yyclearin;} ; DerefOfTerm : PARSEOP_DEREFOF PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_DEREFOF);} DerefOfSource PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_DEREFOF PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; DeviceTerm : PARSEOP_DEVICE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_DEVICE);} NameString PARSEOP_CLOSE_PAREN '{' TermList '}' {$$ = TrLinkOpChildren ($3,2, TrSetOpFlags ($4, OP_IS_NAME_DECLARATION),$7);} | PARSEOP_DEVICE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; DivideTerm : PARSEOP_DIVIDE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_DIVIDE);} TermArg TermArgItem Target Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,4,$4,$5,$6,$7);} | PARSEOP_DIVIDE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; EISAIDTerm : PARSEOP_EISAID PARSEOP_OPEN_PAREN StringLiteral PARSEOP_CLOSE_PAREN {$$ = TrSetOpIntegerValue (PARSEOP_EISAID, $3);} | PARSEOP_EISAID PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ElseIfTerm : IfTerm ElseTerm {$$ = TrLinkPeerOp ($1,$2);} ; ElseTerm : {$$ = NULL;} | PARSEOP_ELSE '{' TermList {$$ = TrCreateLeafOp (PARSEOP_ELSE);} '}' {$$ = TrLinkOpChildren ($4,1,$3);} | PARSEOP_ELSE '{' error '}' {$$ = AslDoError(); yyclearin;} | PARSEOP_ELSE error {$$ = AslDoError(); yyclearin;} | PARSEOP_ELSEIF PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_ELSE);} TermArg {$$ = TrCreateLeafOp (PARSEOP_IF);} PARSEOP_CLOSE_PAREN '{' TermList '}' {TrLinkOpChildren ($5,2,$4,$8);} ElseTerm {TrLinkPeerOp ($5,$11);} {$$ = TrLinkOpChildren ($3,1,$5);} | PARSEOP_ELSEIF PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} | PARSEOP_ELSEIF error {$$ = AslDoError(); yyclearin;} ; EventTerm : PARSEOP_EVENT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_EVENT);} NameString PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1, TrSetOpFlags ($4, OP_IS_NAME_DECLARATION));} | PARSEOP_EVENT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ExternalTerm : PARSEOP_EXTERNAL PARSEOP_OPEN_PAREN NameString OptionalObjectTypeKeyword OptionalParameterTypePackage OptionalParameterTypesPackage PARSEOP_CLOSE_PAREN {$$ = TrCreateOp (PARSEOP_EXTERNAL,4,$3,$4,$5,$6);} | PARSEOP_EXTERNAL PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; FatalTerm : PARSEOP_FATAL PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_FATAL);} ByteConstExpr ',' DWordConstExpr TermArgItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$6,$7);} | PARSEOP_FATAL PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; FieldTerm : PARSEOP_FIELD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_FIELD);} NameString OptionalAccessTypeKeyword OptionalLockRuleKeyword OptionalUpdateRuleKeyword PARSEOP_CLOSE_PAREN '{' FieldUnitList '}' {$$ = TrLinkOpChildren ($3,5,$4,$5,$6,$7,$10);} | PARSEOP_FIELD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN '{' error '}' {$$ = AslDoError(); yyclearin;} ; FindSetLeftBitTerm : PARSEOP_FINDSETLEFTBIT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_FINDSETLEFTBIT);} TermArg Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_FINDSETLEFTBIT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; FindSetRightBitTerm : PARSEOP_FINDSETRIGHTBIT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_FINDSETRIGHTBIT);} TermArg Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_FINDSETRIGHTBIT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; /* Convert a For() loop to a While() loop */ ForTerm : PARSEOP_FOR PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_WHILE);} OptionalTermArg ',' {} OptionalPredicate ',' OptionalTermArg {$$ = TrLinkPeerOp ($4,$3); TrSetOpParent ($9,$3);} /* New parent is WHILE */ PARSEOP_CLOSE_PAREN '{' TermList '}' {$$ = TrLinkOpChildren ($3,2,$7,$13);} {$$ = TrLinkPeerOp ($13,$9); $$ = $10;} ; OptionalPredicate : {$$ = TrCreateValuedLeafOp (PARSEOP_INTEGER, 1);} | TermArg {$$ = $1;} ; FprintfTerm : PARSEOP_FPRINTF PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_FPRINTF);} TermArg ',' StringLiteral PrintfArgList PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$6,$7);} | PARSEOP_FPRINTF PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; FromBCDTerm : PARSEOP_FROMBCD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_FROMBCD);} TermArg Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_FROMBCD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; FunctionTerm : PARSEOP_FUNCTION PARSEOP_OPEN_PAREN {COMMENT_CAPTURE_OFF; $$ = TrCreateLeafOp (PARSEOP_METHOD); } NameString OptionalParameterTypePackage OptionalParameterTypesPackage PARSEOP_CLOSE_PAREN '{' {COMMENT_CAPTURE_ON; } TermList '}' {$$ = TrLinkOpChildren ($3,7, TrSetOpFlags ($4, OP_IS_NAME_DECLARATION), TrCreateLeafOp (PARSEOP_DEFAULT_ARG), TrCreateLeafOp (PARSEOP_SERIALIZERULE_NOTSERIAL), TrCreateValuedLeafOp (PARSEOP_BYTECONST, 0),$5,$6,$10);} | PARSEOP_FUNCTION PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; IfTerm : PARSEOP_IF PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_IF);} TermArg PARSEOP_CLOSE_PAREN '{' TermList '}' {$$ = TrLinkOpChildren ($3,2,$4,$7);} | PARSEOP_IF PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; IncludeTerm : PARSEOP_INCLUDE PARSEOP_OPEN_PAREN String PARSEOP_CLOSE_PAREN {$$ = TrSetOpIntegerValue (PARSEOP_INCLUDE, $3); FlOpenIncludeFile ($3);} ; IncludeEndTerm : PARSEOP_INCLUDE_END {$$ = TrCreateLeafOp (PARSEOP_INCLUDE_END); TrSetOpCurrentFilename ($$);} ; IncTerm : PARSEOP_INCREMENT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_INCREMENT);} SuperName PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_INCREMENT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; IndexFieldTerm : PARSEOP_INDEXFIELD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_INDEXFIELD);} NameString NameStringItem OptionalAccessTypeKeyword OptionalLockRuleKeyword OptionalUpdateRuleKeyword PARSEOP_CLOSE_PAREN '{' FieldUnitList '}' {$$ = TrLinkOpChildren ($3,6,$4,$5,$6,$7,$8,$11);} | PARSEOP_INDEXFIELD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN '{' error '}' {$$ = AslDoError(); yyclearin;} ; IndexTerm : PARSEOP_INDEX PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_INDEX);} TermArg TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_INDEX PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; LAndTerm : PARSEOP_LAND PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_LAND);} TermArg TermArgItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_LAND PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; LEqualTerm : PARSEOP_LEQUAL PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_LEQUAL);} TermArg TermArgItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_LEQUAL PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; LGreaterEqualTerm : PARSEOP_LGREATEREQUAL PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_LLESS);} TermArg TermArgItem PARSEOP_CLOSE_PAREN {$$ = TrCreateOp (PARSEOP_LNOT, 1, TrLinkOpChildren ($3,2,$4,$5));} | PARSEOP_LGREATEREQUAL PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; LGreaterTerm : PARSEOP_LGREATER PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_LGREATER);} TermArg TermArgItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_LGREATER PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; LLessEqualTerm : PARSEOP_LLESSEQUAL PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_LGREATER);} TermArg TermArgItem PARSEOP_CLOSE_PAREN {$$ = TrCreateOp (PARSEOP_LNOT, 1, TrLinkOpChildren ($3,2,$4,$5));} | PARSEOP_LLESSEQUAL PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; LLessTerm : PARSEOP_LLESS PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_LLESS);} TermArg TermArgItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_LLESS PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; LNotEqualTerm : PARSEOP_LNOTEQUAL PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_LEQUAL);} TermArg TermArgItem PARSEOP_CLOSE_PAREN {$$ = TrCreateOp (PARSEOP_LNOT, 1, TrLinkOpChildren ($3,2,$4,$5));} | PARSEOP_LNOTEQUAL PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; LNotTerm : PARSEOP_LNOT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_LNOT);} TermArg PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_LNOT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; LoadTableTerm : PARSEOP_LOADTABLE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_LOADTABLE);} TermArg TermArgItem TermArgItem OptionalListString OptionalListString OptionalReference PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,6,$4,$5,$6,$7,$8,$9);} | PARSEOP_LOADTABLE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; LoadTerm : PARSEOP_LOAD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_LOAD);} NameString Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_LOAD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; LocalTerm : PARSEOP_LOCAL0 {$$ = TrCreateLeafOp (PARSEOP_LOCAL0);} | PARSEOP_LOCAL1 {$$ = TrCreateLeafOp (PARSEOP_LOCAL1);} | PARSEOP_LOCAL2 {$$ = TrCreateLeafOp (PARSEOP_LOCAL2);} | PARSEOP_LOCAL3 {$$ = TrCreateLeafOp (PARSEOP_LOCAL3);} | PARSEOP_LOCAL4 {$$ = TrCreateLeafOp (PARSEOP_LOCAL4);} | PARSEOP_LOCAL5 {$$ = TrCreateLeafOp (PARSEOP_LOCAL5);} | PARSEOP_LOCAL6 {$$ = TrCreateLeafOp (PARSEOP_LOCAL6);} | PARSEOP_LOCAL7 {$$ = TrCreateLeafOp (PARSEOP_LOCAL7);} ; LOrTerm : PARSEOP_LOR PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_LOR);} TermArg TermArgItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_LOR PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; MatchTerm : PARSEOP_MATCH PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_MATCH);} TermArg ',' MatchOpKeyword TermArgItem ',' MatchOpKeyword TermArgItem TermArgItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,6,$4,$6,$7,$9,$10,$11);} | PARSEOP_MATCH PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; MethodTerm : PARSEOP_METHOD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_METHOD); COMMENT_CAPTURE_OFF;} NameString OptionalByteConstExpr {UtCheckIntegerRange ($5, 0, 7);} OptionalSerializeRuleKeyword OptionalByteConstExpr OptionalParameterTypePackage OptionalParameterTypesPackage PARSEOP_CLOSE_PAREN '{' {COMMENT_CAPTURE_ON;} TermList '}' {$$ = TrLinkOpChildren ($3,7, TrSetOpFlags ($4, OP_IS_NAME_DECLARATION), $5,$7,$8,$9,$10,$14);} | PARSEOP_METHOD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; MidTerm : PARSEOP_MID PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_MID);} TermArg TermArgItem TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,4,$4,$5,$6,$7);} | PARSEOP_MID PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ModTerm : PARSEOP_MOD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_MOD);} TermArg TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_MOD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; MultiplyTerm : PARSEOP_MULTIPLY PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_MULTIPLY);} TermArg TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_MULTIPLY PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; MutexTerm : PARSEOP_MUTEX PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_MUTEX);} NameString OptionalSyncLevel PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2, TrSetOpFlags ($4, OP_IS_NAME_DECLARATION),$5);} | PARSEOP_MUTEX PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; NameTerm : PARSEOP_NAME PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_NAME);} NameString ',' DataObject PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2, TrSetOpFlags ($4, OP_IS_NAME_DECLARATION),$6);} | PARSEOP_NAME PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; NAndTerm : PARSEOP_NAND PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_NAND);} TermArg TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_NAND PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; NoOpTerm : PARSEOP_NOOP {$$ = TrCreateOp (PARSEOP_NOOP, 0);} ; NOrTerm : PARSEOP_NOR PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_NOR);} TermArg TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_NOR PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; NotifyTerm : PARSEOP_NOTIFY PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_NOTIFY);} SuperName TermArgItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_NOTIFY PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; NotTerm : PARSEOP_NOT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_NOT);} TermArg Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_NOT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ObjectTypeTerm : PARSEOP_OBJECTTYPE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_OBJECTTYPE);} ObjectTypeSource PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_OBJECTTYPE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; OffsetTerm : PARSEOP_OFFSET PARSEOP_OPEN_PAREN AmlPackageLengthTerm PARSEOP_CLOSE_PAREN {$$ = TrCreateOp (PARSEOP_OFFSET,1,$3);} | PARSEOP_OFFSET PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; OpRegionTerm : PARSEOP_OPERATIONREGION PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_OPERATIONREGION);} NameString ',' OpRegionSpaceIdTerm TermArgItem TermArgItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,4, TrSetOpFlags ($4, OP_IS_NAME_DECLARATION), $6,$7,$8);} | PARSEOP_OPERATIONREGION PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; OpRegionSpaceIdTerm : RegionSpaceKeyword {} | ByteConst {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);} ; OrTerm : PARSEOP_OR PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_OR);} TermArg TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_OR PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; PackageTerm : PARSEOP_PACKAGE {$$ = TrCreateLeafOp (PARSEOP_VAR_PACKAGE);} OptionalDataCount '{' PackageList '}' {$$ = TrLinkOpChildren ($2,2,$3,$5);} PowerResTerm : PARSEOP_POWERRESOURCE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_POWERRESOURCE);} NameString ',' ByteConstExpr ',' WordConstExpr PARSEOP_CLOSE_PAREN '{' TermList '}' {$$ = TrLinkOpChildren ($3,4, TrSetOpFlags ($4, OP_IS_NAME_DECLARATION), $6,$8,$11);} | PARSEOP_POWERRESOURCE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; PrintfTerm : PARSEOP_PRINTF PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_PRINTF);} StringLiteral PrintfArgList PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_PRINTF PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; PrintfArgList : {$$ = NULL;} | TermArg {$$ = $1;} | PrintfArgList ',' TermArg {$$ = TrLinkPeerOp ($1, $3);} ; ProcessorTerm : PARSEOP_PROCESSOR PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_PROCESSOR);} NameString ',' ByteConstExpr OptionalDWordConstExpr OptionalByteConstExpr PARSEOP_CLOSE_PAREN '{' TermList '}' {$$ = TrLinkOpChildren ($3,5, TrSetOpFlags ($4, OP_IS_NAME_DECLARATION), $6,$7,$8,$11);} | PARSEOP_PROCESSOR PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; RawDataBufferTerm : PARSEOP_DATABUFFER PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_DATABUFFER);} OptionalWordConst PARSEOP_CLOSE_PAREN '{' ByteList '}' {$$ = TrLinkOpChildren ($3,2,$4,$7);} | PARSEOP_DATABUFFER PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; /* * In RefOf, the node isn't really a target, but we can't keep track of it after * we've taken a pointer to it. (hard to tell if a local becomes initialized this way.) */ RefOfTerm : PARSEOP_REFOF PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_REFOF);} RefOfSource PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1, TrSetOpFlags ($4, OP_IS_TARGET));} | PARSEOP_REFOF PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ReleaseTerm : PARSEOP_RELEASE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_RELEASE);} SuperName PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_RELEASE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ResetTerm : PARSEOP_RESET PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_RESET);} SuperName PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_RESET PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ReturnTerm : PARSEOP_RETURN PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_RETURN);} OptionalReturnArg PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_RETURN {$$ = TrLinkOpChildren ( TrCreateLeafOp (PARSEOP_RETURN),1, TrSetOpFlags (TrCreateLeafOp (PARSEOP_ZERO), OP_IS_NULL_RETURN));} | PARSEOP_RETURN PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ScopeTerm : PARSEOP_SCOPE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_SCOPE);} NameString PARSEOP_CLOSE_PAREN '{' TermList '}' {$$ = TrLinkOpChildren ($3,2, TrSetOpFlags ($4, OP_IS_NAME_DECLARATION),$7);} | PARSEOP_SCOPE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ShiftLeftTerm : PARSEOP_SHIFTLEFT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_SHIFTLEFT);} TermArg TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_SHIFTLEFT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ShiftRightTerm : PARSEOP_SHIFTRIGHT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_SHIFTRIGHT);} TermArg TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_SHIFTRIGHT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; SignalTerm : PARSEOP_SIGNAL PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_SIGNAL);} SuperName PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_SIGNAL PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; SizeOfTerm : PARSEOP_SIZEOF PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_SIZEOF);} SuperName PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_SIZEOF PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; SleepTerm : PARSEOP_SLEEP PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_SLEEP);} TermArg PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_SLEEP PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; StallTerm : PARSEOP_STALL PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_STALL);} TermArg PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_STALL PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; StoreTerm : PARSEOP_STORE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_STORE);} TermArg ',' SuperName PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4, TrSetOpFlags ($6, OP_IS_TARGET));} | PARSEOP_STORE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; SubtractTerm : PARSEOP_SUBTRACT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_SUBTRACT);} TermArg TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_SUBTRACT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; SwitchTerm : PARSEOP_SWITCH PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_SWITCH);} TermArg PARSEOP_CLOSE_PAREN '{' CaseDefaultTermList '}' {$$ = TrLinkOpChildren ($3,2,$4,$7);} | PARSEOP_SWITCH PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ThermalZoneTerm : PARSEOP_THERMALZONE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_THERMALZONE);} NameString PARSEOP_CLOSE_PAREN '{' TermList '}' {$$ = TrLinkOpChildren ($3,2, TrSetOpFlags ($4, OP_IS_NAME_DECLARATION),$7);} | PARSEOP_THERMALZONE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; TimerTerm : PARSEOP_TIMER PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_TIMER);} PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,0);} | PARSEOP_TIMER {$$ = TrLinkOpChildren ( TrCreateLeafOp (PARSEOP_TIMER),0);} | PARSEOP_TIMER PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ToBCDTerm : PARSEOP_TOBCD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_TOBCD);} TermArg Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_TOBCD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ToBufferTerm : PARSEOP_TOBUFFER PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_TOBUFFER);} TermArg Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_TOBUFFER PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ToDecimalStringTerm : PARSEOP_TODECIMALSTRING PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_TODECIMALSTRING);} TermArg Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_TODECIMALSTRING PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ToHexStringTerm : PARSEOP_TOHEXSTRING PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_TOHEXSTRING);} TermArg Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_TOHEXSTRING PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ToIntegerTerm : PARSEOP_TOINTEGER PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_TOINTEGER);} TermArg Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_TOINTEGER PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ToPLDTerm : PARSEOP_TOPLD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_TOPLD);} PldKeywordList PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_TOPLD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; PldKeywordList : {$$ = NULL;} | PldKeyword PARSEOP_EXP_EQUALS Integer {$$ = TrLinkOpChildren ($1,1,$3);} | PldKeyword PARSEOP_EXP_EQUALS String {$$ = TrLinkOpChildren ($1,1,$3);} | PldKeywordList ',' /* Allows a trailing comma at list end */ | PldKeywordList ',' PldKeyword PARSEOP_EXP_EQUALS Integer {$$ = TrLinkPeerOp ($1,TrLinkOpChildren ($3,1,$5));} | PldKeywordList ',' PldKeyword PARSEOP_EXP_EQUALS String {$$ = TrLinkPeerOp ($1,TrLinkOpChildren ($3,1,$5));} ; ToStringTerm : PARSEOP_TOSTRING PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_TOSTRING);} TermArg OptionalCount Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_TOSTRING PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ToUUIDTerm : PARSEOP_TOUUID PARSEOP_OPEN_PAREN StringLiteral PARSEOP_CLOSE_PAREN {$$ = TrSetOpIntegerValue (PARSEOP_TOUUID, $3);} | PARSEOP_TOUUID PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; UnicodeTerm : PARSEOP_UNICODE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_UNICODE);} StringLiteral PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,0,$4);} | PARSEOP_UNICODE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; UnloadTerm : PARSEOP_UNLOAD PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_UNLOAD);} SuperName PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,1,$4);} | PARSEOP_UNLOAD PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; WaitTerm : PARSEOP_WAIT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_WAIT);} SuperName TermArgItem PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,2,$4,$5);} | PARSEOP_WAIT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; XOrTerm : PARSEOP_XOR PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_XOR);} TermArg TermArgItem Target PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$5,$6);} | PARSEOP_XOR PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; WhileTerm : PARSEOP_WHILE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_WHILE);} TermArg PARSEOP_CLOSE_PAREN '{' TermList '}' {$$ = TrLinkOpChildren ($3,2,$4,$7);} | PARSEOP_WHILE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; src/acpica/source/compiler/aslprintf.c000066400000000000000000000420201465205512700203520ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslprintf - ASL Printf/Fprintf macro support * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "amlcode.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslprintf") /* Local prototypes */ static void OpcCreateConcatenateNode ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *Node); static void OpcParsePrintf ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *DestOp); /******************************************************************************* * * FUNCTION: OpcDoPrintf * * PARAMETERS: Op - printf parse node * * RETURN: None * * DESCRIPTION: Convert printf macro to a Store(..., Debug) AML operation. * ******************************************************************************/ void OpcDoPrintf ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *DestOp; /* Store destination is the Debug op */ DestOp = TrAllocateOp (PARSEOP_DEBUG); DestOp->Asl.AmlOpcode = AML_DEBUG_OP; DestOp->Asl.Parent = Op; DestOp->Asl.LogicalLineNumber = Op->Asl.LogicalLineNumber; OpcParsePrintf (Op, DestOp); } /******************************************************************************* * * FUNCTION: OpcDoFprintf * * PARAMETERS: Op - fprintf parse node * * RETURN: None * * DESCRIPTION: Convert fprintf macro to a Store AML operation. * ******************************************************************************/ void OpcDoFprintf ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *DestOp; /* Store destination is the first argument of fprintf */ DestOp = Op->Asl.Child; Op->Asl.Child = DestOp->Asl.Next; DestOp->Asl.Next = NULL; OpcParsePrintf (Op, DestOp); } /******************************************************************************* * * FUNCTION: OpcParsePrintf * * PARAMETERS: Op - Printf parse node * DestOp - Destination of Store operation * * RETURN: None * * DESCRIPTION: Convert printf macro to a Store AML operation. The printf * macro parse tree is laid out as follows: * * Op - printf parse op * Op->Child - Format string * Op->Next - Format string arguments * ******************************************************************************/ static void OpcParsePrintf ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *DestOp) { char *Format; char *StartPosition = NULL; ACPI_PARSE_OBJECT *ArgNode; ACPI_PARSE_OBJECT *NextNode; UINT32 StringLength = 0; char *NewString; BOOLEAN StringToProcess = FALSE; ACPI_PARSE_OBJECT *NewOp; /* Get format string */ Format = ACPI_CAST_PTR (char, Op->Asl.Child->Asl.Value.String); ArgNode = Op->Asl.Child->Asl.Next; /* * Detach argument list so that we can use a NULL check to distinguish * the first concatenation operation we need to make */ Op->Asl.Child = NULL; for (; *Format; ++Format) { if (*Format != '%') { if (!StringToProcess) { /* Mark the beginning of a string */ StartPosition = Format; StringToProcess = TRUE; } ++StringLength; continue; } /* Save string, if any, to new string object and concat it */ if (StringToProcess) { NewString = UtLocalCacheCalloc (StringLength + 1); strncpy (NewString, StartPosition, StringLength); NewOp = TrAllocateOp (PARSEOP_STRING_LITERAL); NewOp->Asl.Value.String = NewString; NewOp->Asl.AmlOpcode = AML_STRING_OP; NewOp->Asl.AcpiBtype = ACPI_BTYPE_STRING; NewOp->Asl.LogicalLineNumber = Op->Asl.LogicalLineNumber; OpcCreateConcatenateNode(Op, NewOp); StringLength = 0; StringToProcess = FALSE; } ++Format; /* * We have a format parameter and will need an argument to go * with it */ if (!ArgNode || ArgNode->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { AslError(ASL_ERROR, ASL_MSG_ARG_COUNT_LO, Op, NULL); return; } /* * We do not support sub-specifiers of printf (flags, width, * precision, length). For specifiers we only support %x/%X for * hex or %s for strings. Also, %o for generic "acpi object". */ switch (*Format) { case 's': if (ArgNode->Asl.ParseOpcode != PARSEOP_STRING_LITERAL) { AslError(ASL_ERROR, ASL_MSG_INVALID_TYPE, ArgNode, "String required"); return; } NextNode = ArgNode->Asl.Next; ArgNode->Asl.Next = NULL; OpcCreateConcatenateNode(Op, ArgNode); ArgNode = NextNode; continue; case 'X': case 'x': case 'o': NextNode = ArgNode->Asl.Next; ArgNode->Asl.Next = NULL; /* * Append an empty string if the first argument is * not a string. This will implicitly convert the 2nd * concat source to a string per the ACPI specification. */ if (!Op->Asl.Child) { NewOp = TrAllocateOp (PARSEOP_STRING_LITERAL); NewOp->Asl.Value.String = ""; NewOp->Asl.AmlOpcode = AML_STRING_OP; NewOp->Asl.AcpiBtype = ACPI_BTYPE_STRING; NewOp->Asl.LogicalLineNumber = Op->Asl.LogicalLineNumber; OpcCreateConcatenateNode(Op, NewOp); } OpcCreateConcatenateNode(Op, ArgNode); ArgNode = NextNode; break; default: AslError(ASL_ERROR, ASL_MSG_INVALID_OPERAND, Op, "Unrecognized format specifier"); continue; } } /* Process any remaining string */ if (StringToProcess) { NewString = UtLocalCacheCalloc (StringLength + 1); strncpy (NewString, StartPosition, StringLength); NewOp = TrAllocateOp (PARSEOP_STRING_LITERAL); NewOp->Asl.Value.String = NewString; NewOp->Asl.AcpiBtype = ACPI_BTYPE_STRING; NewOp->Asl.AmlOpcode = AML_STRING_OP; NewOp->Asl.LogicalLineNumber = Op->Asl.LogicalLineNumber; OpcCreateConcatenateNode(Op, NewOp); } /* * If we get here and there's no child node then Format * was an empty string. Just make a no op. */ if (!Op->Asl.Child) { Op->Asl.ParseOpcode = PARSEOP_NOOP; AslError(ASL_WARNING, ASL_MSG_NULL_STRING, Op, "Converted to NOOP"); return; } /* Check for erroneous extra arguments */ if (ArgNode && ArgNode->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { AslError(ASL_WARNING, ASL_MSG_ARG_COUNT_HI, ArgNode, "Extra arguments ignored"); } /* Change Op to a Store */ Op->Asl.ParseOpcode = PARSEOP_STORE; Op->Common.AmlOpcode = AML_STORE_OP; Op->Asl.CompileFlags = 0; /* Disable further optimization */ Op->Asl.CompileFlags &= ~OP_COMPILE_TIME_CONST; UtSetParseOpName (Op); /* Set Store destination */ Op->Asl.Child->Asl.Next = DestOp; } /******************************************************************************* * * FUNCTION: OpcCreateConcatenateNode * * PARAMETERS: Op - Parse node * Node - Parse node to be concatenated * * RETURN: None * * DESCRIPTION: Make Node the child of Op. If child node already exists, then * concat child with Node and makes concat node the child of Op. * ******************************************************************************/ static void OpcCreateConcatenateNode ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *Node) { ACPI_PARSE_OBJECT *NewConcatOp; if (!Op->Asl.Child) { Op->Asl.Child = Node; Node->Asl.Parent = Op; return; } NewConcatOp = TrAllocateOp (PARSEOP_CONCATENATE); NewConcatOp->Asl.AmlOpcode = AML_CONCATENATE_OP; NewConcatOp->Asl.AcpiBtype = 0x7; NewConcatOp->Asl.LogicalLineNumber = Op->Asl.LogicalLineNumber; /* First arg is child of Op*/ NewConcatOp->Asl.Child = Op->Asl.Child; Op->Asl.Child->Asl.Parent = NewConcatOp; /* Second arg is Node */ NewConcatOp->Asl.Child->Asl.Next = Node; Node->Asl.Parent = NewConcatOp; /* Third arg is Zero (not used) */ NewConcatOp->Asl.Child->Asl.Next->Asl.Next = TrAllocateOp (PARSEOP_ZERO); NewConcatOp->Asl.Child->Asl.Next->Asl.Next->Asl.Parent = NewConcatOp; Op->Asl.Child = NewConcatOp; NewConcatOp->Asl.Parent = Op; } src/acpica/source/compiler/aslprune.c000066400000000000000000000312441465205512700202070ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslprune - Parse tree prune utility * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acapps.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslprune") /* Local prototypes */ static ACPI_STATUS PrTreePruneWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static void PrPrintObjectAtLevel ( UINT32 Level, const char *ObjectName); /* Structure used for the pruning parse tree walk */ typedef struct acpi_prune_info { UINT32 PruneLevel; UINT16 ParseOpcode; UINT16 Count; } ACPI_PRUNE_INFO; /******************************************************************************* * * FUNCTION: AslPruneParseTree * * PARAMETERS: PruneDepth - Number of levels to prune * Type - Prune type (Device, Method, etc.) * * RETURN: None * * DESCRIPTION: Prune off one or more levels of the ASL parse tree * ******************************************************************************/ void AslPruneParseTree ( UINT32 PruneDepth, UINT32 Type) { ACPI_PRUNE_INFO PruneObj; PruneObj.PruneLevel = PruneDepth; PruneObj.Count = 0; switch (Type) { case 0: PruneObj.ParseOpcode = (UINT16) PARSEOP_DEVICE; break; case 1: PruneObj.ParseOpcode = (UINT16) PARSEOP_METHOD; break; case 2: PruneObj.ParseOpcode = (UINT16) PARSEOP_IF; break; default: AcpiOsPrintf ("Unsupported type: %u\n", Type); return; } AcpiOsPrintf ("Pruning parse tree, from depth %u\n", PruneDepth); AcpiOsPrintf ("\nRemoving Objects:\n"); TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD, PrTreePruneWalk, NULL, ACPI_CAST_PTR (void, &PruneObj)); AcpiOsPrintf ("\n%u Total Objects Removed\n", PruneObj.Count); } /******************************************************************************* * * FUNCTION: PrPrintObjectAtLevel * * PARAMETERS: Level - Current nesting level * ObjectName - ACPI name for the object * * RETURN: None * * DESCRIPTION: Print object name with indent * ******************************************************************************/ static void PrPrintObjectAtLevel ( UINT32 Level, const char *ObjectName) { UINT32 i; for (i = 0; i < Level; i++) { AcpiOsPrintf (" "); } AcpiOsPrintf ("[%s] at Level [%u]\n", ObjectName, Level); } /******************************************************************************* * * FUNCTION: PrTreePruneWalk * * PARAMETERS: Parse tree walk callback * * RETURN: Status * * DESCRIPTION: Prune off one or more levels of the ASL parse tree * * Current objects that can be pruned are: Devices, Methods, and If/Else * blocks. * ******************************************************************************/ static ACPI_STATUS PrTreePruneWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_PRUNE_INFO *PruneObj = (ACPI_PRUNE_INFO *) Context; /* We only care about objects below the Prune Level threshold */ if (Level <= PruneObj->PruneLevel) { return (AE_OK); } if ((Op->Asl.ParseOpcode != PruneObj->ParseOpcode) && !(Op->Asl.ParseOpcode == PARSEOP_ELSE && PruneObj->ParseOpcode == PARSEOP_IF)) { return (AE_OK); } switch (Op->Asl.ParseOpcode) { case PARSEOP_METHOD: AcpiOsPrintf ("Method"); PrPrintObjectAtLevel (Level, Op->Asl.Child->Asl.Value.Name); Op->Asl.Child->Asl.Next->Asl.Next->Asl.Next->Asl.Next->Asl.Next->Asl.Next = NULL; PruneObj->Count++; break; case PARSEOP_DEVICE: AcpiOsPrintf ("Device"); PrPrintObjectAtLevel (Level, Op->Asl.Child->Asl.Value.Name); Op->Asl.Child->Asl.Next = NULL; PruneObj->Count++; break; case PARSEOP_IF: case PARSEOP_ELSE: if (Op->Asl.ParseOpcode == PARSEOP_ELSE) { PrPrintObjectAtLevel(Level, "Else"); Op->Asl.Child = NULL; } else { PrPrintObjectAtLevel(Level, "If"); Op->Asl.Child->Asl.Next = NULL; } PruneObj->Count++; break; default: break; } return (AE_OK); } src/acpica/source/compiler/aslresource.c000066400000000000000000001141301465205512700207010ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslresource - Resource template/descriptor utilities * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "amlcode.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslresource") /******************************************************************************* * * FUNCTION: RsSmallAddressCheck * * PARAMETERS: Minimum - Address Min value * Maximum - Address Max value * Length - Address range value * Alignment - Address alignment value * MinOp - Original Op for Address Min * MaxOp - Original Op for Address Max * LengthOp - Original Op for address range * AlignOp - Original Op for address alignment. If * NULL, means "zero value for alignment is * OK, and means 64K alignment" (for * Memory24 descriptor) * Op - Parent Op for entire construct * * RETURN: None. Adds error messages to error log if necessary * * DESCRIPTION: Perform common value checks for "small" address descriptors. * Currently: * Io, Memory24, Memory32 * ******************************************************************************/ void RsSmallAddressCheck ( UINT8 Type, UINT32 Minimum, UINT32 Maximum, UINT32 Length, UINT32 Alignment, ACPI_PARSE_OBJECT *MinOp, ACPI_PARSE_OBJECT *MaxOp, ACPI_PARSE_OBJECT *LengthOp, ACPI_PARSE_OBJECT *AlignOp, ACPI_PARSE_OBJECT *Op) { if (AslGbl_NoResourceChecking) { return; } /* * Check for a so-called "null descriptor". These are descriptors that are * created with most fields set to zero. The intent is that the descriptor * will be updated/completed at runtime via a BufferField. * * If the descriptor does NOT have a resource tag, it cannot be referenced * by a BufferField and we will flag this as an error. Conversely, if * the descriptor has a resource tag, we will assume that a BufferField * will be used to dynamically update it, so no error. * * A possible enhancement to this check would be to verify that in fact * a BufferField is created using the resource tag, and perhaps even * verify that a Store is performed to the BufferField. * * Note: for these descriptors, Alignment is allowed to be zero */ if (!Minimum && !Maximum && !Length) { if (!Op->Asl.ExternalName) { /* No resource tag. Descriptor is fixed and is also illegal */ AslError (ASL_ERROR, ASL_MSG_NULL_DESCRIPTOR, Op, NULL); } return; } /* * Range checks for Memory24 and Memory32. * IO descriptor has different definition of min/max, don't check. */ if (Type != ACPI_RESOURCE_NAME_IO) { /* Basic checks on Min/Max/Length */ if (Minimum > Maximum) { AslError (ASL_ERROR, ASL_MSG_INVALID_MIN_MAX, MinOp, NULL); } else if (Length > (Maximum - Minimum + 1)) { AslError (ASL_ERROR, ASL_MSG_INVALID_LENGTH, LengthOp, NULL); } /* Special case for Memory24, min/max values are compressed */ if (Type == ACPI_RESOURCE_NAME_MEMORY24) { if (!Alignment) /* Alignment==0 means 64K alignment */ { Alignment = ACPI_UINT16_MAX + 1; } Minimum <<= 8; Maximum <<= 8; } } /* Alignment of zero is not in ACPI spec, but is used to mean byte acc */ if (!Alignment) { Alignment = 1; } /* Addresses must be an exact multiple of the alignment value */ if (Minimum % Alignment) { AslError (ASL_ERROR, ASL_MSG_ALIGNMENT, MinOp, NULL); } if (Maximum % Alignment) { AslError (ASL_ERROR, ASL_MSG_ALIGNMENT, MaxOp, NULL); } } /******************************************************************************* * * FUNCTION: RsLargeAddressCheck * * PARAMETERS: Minimum - Address Min value * Maximum - Address Max value * Length - Address range value * Granularity - Address granularity value * Flags - General flags for address descriptors: * _MIF, _MAF, _DEC * MinOp - Original Op for Address Min * MaxOp - Original Op for Address Max * LengthOp - Original Op for address range * GranOp - Original Op for address granularity * Op - Parent Op for entire construct * * RETURN: None. Adds error messages to error log if necessary * * DESCRIPTION: Perform common value checks for "large" address descriptors. * Currently: * WordIo, WordBusNumber, WordSpace * DWordIo, DWordMemory, DWordSpace * QWordIo, QWordMemory, QWordSpace * ExtendedIo, ExtendedMemory, ExtendedSpace * * _MIF flag set means that the minimum address is fixed and is not relocatable * _MAF flag set means that the maximum address is fixed and is not relocatable * Length of zero means that the record size is variable * * This function implements the LEN/MIF/MAF/MIN/MAX/GRA rules within Table 6-40 * of the ACPI 4.0a specification. Added 04/2010. * ******************************************************************************/ void RsLargeAddressCheck ( UINT64 Minimum, UINT64 Maximum, UINT64 Length, UINT64 Granularity, UINT8 Flags, ACPI_PARSE_OBJECT *MinOp, ACPI_PARSE_OBJECT *MaxOp, ACPI_PARSE_OBJECT *LengthOp, ACPI_PARSE_OBJECT *GranOp, ACPI_PARSE_OBJECT *Op) { if (AslGbl_NoResourceChecking) { return; } /* * Check for a so-called "null descriptor". These are descriptors that are * created with most fields set to zero. The intent is that the descriptor * will be updated/completed at runtime via a BufferField. * * If the descriptor does NOT have a resource tag, it cannot be referenced * by a BufferField and we will flag this as an error. Conversely, if * the descriptor has a resource tag, we will assume that a BufferField * will be used to dynamically update it, so no error. * * A possible enhancement to this check would be to verify that in fact * a BufferField is created using the resource tag, and perhaps even * verify that a Store is performed to the BufferField. */ if (!Minimum && !Maximum && !Length && !Granularity) { if (!Op->Asl.ExternalName) { /* No resource tag. Descriptor is fixed and is also illegal */ AslError (ASL_ERROR, ASL_MSG_NULL_DESCRIPTOR, Op, NULL); } return; } /* Basic checks on Min/Max/Length */ if (Minimum > Maximum) { AslError (ASL_ERROR, ASL_MSG_INVALID_MIN_MAX, MinOp, NULL); return; } else if (Length > (Maximum - Minimum + 1)) { AslError (ASL_ERROR, ASL_MSG_INVALID_LENGTH, LengthOp, NULL); return; } /* If specified (non-zero), ensure granularity is a power-of-two minus one */ if (Granularity) { if ((Granularity + 1) & Granularity) { AslError (ASL_ERROR, ASL_MSG_INVALID_GRANULARITY, GranOp, NULL); return; } } /* * Check the various combinations of Length, MinFixed, and MaxFixed */ if (Length) { /* Fixed non-zero length */ switch (Flags & (ACPI_RESOURCE_FLAG_MIF | ACPI_RESOURCE_FLAG_MAF)) { case 0: /* * Fixed length, variable locations (both _MIN and _MAX). * Length must be a multiple of granularity */ if (Granularity & Length) { AslError (ASL_ERROR, ASL_MSG_ALIGNMENT, LengthOp, NULL); } break; case (ACPI_RESOURCE_FLAG_MIF | ACPI_RESOURCE_FLAG_MAF): /* Fixed length, fixed location. Granularity must be zero */ if (Granularity != 0) { AslError (ASL_ERROR, ASL_MSG_INVALID_GRAN_FIXED, GranOp, NULL); } /* Length must be exactly the size of the min/max window */ if (Length != (Maximum - Minimum + 1)) { AslError (ASL_ERROR, ASL_MSG_INVALID_LENGTH_FIXED, LengthOp, NULL); } break; /* All other combinations are invalid */ case ACPI_RESOURCE_FLAG_MIF: case ACPI_RESOURCE_FLAG_MAF: default: AslError (ASL_ERROR, ASL_MSG_INVALID_ADDR_FLAGS, LengthOp, NULL); } } else { /* Variable length (length==0) */ switch (Flags & (ACPI_RESOURCE_FLAG_MIF | ACPI_RESOURCE_FLAG_MAF)) { case 0: /* * Both _MIN and _MAX are variable. * No additional requirements, just exit */ break; case ACPI_RESOURCE_FLAG_MIF: /* _MIN is fixed. _MIN must be multiple of _GRA */ /* * The granularity is defined by the ACPI specification to be a * power-of-two minus one, therefore the granularity is a * bitmask which can be used to easily validate the addresses. */ if (Granularity & Minimum) { AslError (ASL_ERROR, ASL_MSG_ALIGNMENT, MinOp, NULL); } break; case ACPI_RESOURCE_FLAG_MAF: /* _MAX is fixed. (_MAX + 1) must be multiple of _GRA */ if (Granularity & (Maximum + 1)) { AslError (ASL_ERROR, ASL_MSG_ALIGNMENT, MaxOp, "-1"); } break; /* Both MIF/MAF set is invalid if length is zero */ case (ACPI_RESOURCE_FLAG_MIF | ACPI_RESOURCE_FLAG_MAF): default: AslError (ASL_ERROR, ASL_MSG_INVALID_ADDR_FLAGS, LengthOp, NULL); } } } /******************************************************************************* * * FUNCTION: RsGetStringDataLength * * PARAMETERS: InitializerOp - Start of a subtree of init nodes * * RETURN: Valid string length if a string node is found (otherwise 0) * * DESCRIPTION: In a list of peer nodes, find the first one that contains a * string and return the length of the string. * ******************************************************************************/ UINT16 RsGetStringDataLength ( ACPI_PARSE_OBJECT *InitializerOp) { while (InitializerOp) { if (InitializerOp->Asl.ParseOpcode == PARSEOP_STRING_LITERAL) { return ((UINT16) (strlen (InitializerOp->Asl.Value.String) + 1)); } InitializerOp = ASL_GET_PEER_NODE (InitializerOp); } return (0); } /******************************************************************************* * * FUNCTION: RsAllocateResourceNode * * PARAMETERS: Size - Size of node in bytes * * RETURN: The allocated node - aborts on allocation failure * * DESCRIPTION: Allocate a resource description node and the resource * descriptor itself (the nodes are used to link descriptors). * ******************************************************************************/ ASL_RESOURCE_NODE * RsAllocateResourceNode ( UINT32 Size) { ASL_RESOURCE_NODE *Rnode; /* Allocate the node */ Rnode = UtLocalCalloc (sizeof (ASL_RESOURCE_NODE)); /* Allocate the resource descriptor itself */ Rnode->Buffer = UtLocalCalloc (Size); Rnode->BufferLength = Size; return (Rnode); } /******************************************************************************* * * FUNCTION: RsCreateResourceField * * PARAMETERS: Op - Resource field node * Name - Name of the field (Used only to reference * the field in the ASL, not in the AML) * ByteOffset - Offset from the field start * BitOffset - Additional bit offset * BitLength - Number of bits in the field * * RETURN: None, sets fields within the input node * * DESCRIPTION: Utility function to generate a named bit field within a * resource descriptor. Mark a node as 1) a field in a resource * descriptor, and 2) set the value to be a BIT offset * ******************************************************************************/ void RsCreateResourceField ( ACPI_PARSE_OBJECT *Op, char *Name, UINT32 ByteOffset, UINT32 BitOffset, UINT32 BitLength) { Op->Asl.ExternalName = Name; Op->Asl.CompileFlags |= OP_IS_RESOURCE_FIELD; Op->Asl.Value.Tag.BitOffset = (ByteOffset * 8) + BitOffset; Op->Asl.Value.Tag.BitLength = BitLength; } /******************************************************************************* * * FUNCTION: RsSetFlagBits * * PARAMETERS: *Flags - Pointer to the flag byte * Op - Flag initialization node * Position - Bit position within the flag byte * Default - Used if the node is DEFAULT. * * RETURN: Sets bits within the *Flags output byte. * * DESCRIPTION: Set a bit in a cumulative flags word from an initialization * node. Will use a default value if the node is DEFAULT, meaning * that no value was specified in the ASL. Used to merge multiple * keywords into a single flags byte. * ******************************************************************************/ void RsSetFlagBits ( UINT8 *Flags, ACPI_PARSE_OBJECT *Op, UINT8 Position, UINT8 DefaultBit) { if (Op->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { /* Use the default bit */ *Flags |= (DefaultBit << Position); } else { /* Use the bit specified in the initialization node */ *Flags |= (((UINT8) Op->Asl.Value.Integer) << Position); } } void RsSetFlagBits16 ( UINT16 *Flags, ACPI_PARSE_OBJECT *Op, UINT8 Position, UINT8 DefaultBit) { if (Op->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { /* Use the default bit */ *Flags |= (DefaultBit << Position); } else { /* Use the bit specified in the initialization node */ *Flags |= (((UINT16) Op->Asl.Value.Integer) << Position); } } /******************************************************************************* * * FUNCTION: RsCompleteNodeAndGetNext * * PARAMETERS: Op - Resource node to be completed * * RETURN: The next peer to the input node. * * DESCRIPTION: Mark the current node completed and return the next peer. * The node ParseOpcode is set to DEFAULT_ARG, meaning that * this node is to be ignored from now on. * ******************************************************************************/ ACPI_PARSE_OBJECT * RsCompleteNodeAndGetNext ( ACPI_PARSE_OBJECT *Op) { /* Mark this node unused */ Op->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; /* Move on to the next peer node in the initializer list */ return (ASL_GET_PEER_NODE (Op)); } /******************************************************************************* * * FUNCTION: RsCheckListForDuplicates * * PARAMETERS: Op - First op in the initializer list * * RETURN: None * * DESCRIPTION: Check an initializer list for duplicate values. Emits an error * if any duplicates are found. * ******************************************************************************/ void RsCheckListForDuplicates ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *NextValueOp = Op; ACPI_PARSE_OBJECT *NextOp; UINT32 Value; if (!Op) { return; } /* Search list once for each value in the list */ while (NextValueOp) { Value = (UINT32) NextValueOp->Asl.Value.Integer; /* Compare this value to all remaining values in the list */ NextOp = ASL_GET_PEER_NODE (NextValueOp); while (NextOp) { if (NextOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { /* Compare values */ if (Value == (UINT32) NextOp->Asl.Value.Integer) { /* Emit error only once per duplicate node */ if (!(NextOp->Asl.CompileFlags & OP_IS_DUPLICATE)) { NextOp->Asl.CompileFlags |= OP_IS_DUPLICATE; AslError (ASL_ERROR, ASL_MSG_DUPLICATE_ITEM, NextOp, NULL); } } } NextOp = ASL_GET_PEER_NODE (NextOp); } NextValueOp = ASL_GET_PEER_NODE (NextValueOp); } } /******************************************************************************* * * FUNCTION: RsDoOneResourceDescriptor * * PARAMETERS: DescriptorTypeOp - Parent parse node of the descriptor * CurrentByteOffset - Offset in the resource descriptor * buffer. * * RETURN: A valid resource node for the descriptor * * DESCRIPTION: Dispatches the processing of one resource descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoOneResourceDescriptor ( ASL_RESOURCE_INFO *Info, UINT8 *State) { ASL_RESOURCE_NODE *Rnode = NULL; /* Construct the resource */ switch (Info->DescriptorTypeOp->Asl.ParseOpcode) { case PARSEOP_CLOCKINPUT: Rnode = RsDoClockInputDescriptor(Info); break; case PARSEOP_DMA: Rnode = RsDoDmaDescriptor (Info); break; case PARSEOP_FIXEDDMA: Rnode = RsDoFixedDmaDescriptor (Info); break; case PARSEOP_DWORDIO: Rnode = RsDoDwordIoDescriptor (Info); break; case PARSEOP_DWORDMEMORY: Rnode = RsDoDwordMemoryDescriptor (Info); break; case PARSEOP_DWORDSPACE: Rnode = RsDoDwordSpaceDescriptor (Info); break; case PARSEOP_ENDDEPENDENTFN: switch (*State) { case ACPI_RSTATE_NORMAL: AslError (ASL_ERROR, ASL_MSG_MISSING_STARTDEPENDENT, Info->DescriptorTypeOp, NULL); break; case ACPI_RSTATE_START_DEPENDENT: AslError (ASL_ERROR, ASL_MSG_DEPENDENT_NESTING, Info->DescriptorTypeOp, NULL); break; case ACPI_RSTATE_DEPENDENT_LIST: default: break; } *State = ACPI_RSTATE_NORMAL; Rnode = RsDoEndDependentDescriptor (Info); break; case PARSEOP_ENDTAG: Rnode = RsDoEndTagDescriptor (Info); break; case PARSEOP_EXTENDEDIO: Rnode = RsDoExtendedIoDescriptor (Info); break; case PARSEOP_EXTENDEDMEMORY: Rnode = RsDoExtendedMemoryDescriptor (Info); break; case PARSEOP_EXTENDEDSPACE: Rnode = RsDoExtendedSpaceDescriptor (Info); break; case PARSEOP_FIXEDIO: Rnode = RsDoFixedIoDescriptor (Info); break; case PARSEOP_INTERRUPT: Rnode = RsDoInterruptDescriptor (Info); break; case PARSEOP_IO: Rnode = RsDoIoDescriptor (Info); break; case PARSEOP_IRQ: Rnode = RsDoIrqDescriptor (Info); break; case PARSEOP_IRQNOFLAGS: Rnode = RsDoIrqNoFlagsDescriptor (Info); break; case PARSEOP_MEMORY24: Rnode = RsDoMemory24Descriptor (Info); break; case PARSEOP_MEMORY32: Rnode = RsDoMemory32Descriptor (Info); break; case PARSEOP_MEMORY32FIXED: Rnode = RsDoMemory32FixedDescriptor (Info); break; case PARSEOP_QWORDIO: Rnode = RsDoQwordIoDescriptor (Info); break; case PARSEOP_QWORDMEMORY: Rnode = RsDoQwordMemoryDescriptor (Info); break; case PARSEOP_QWORDSPACE: Rnode = RsDoQwordSpaceDescriptor (Info); break; case PARSEOP_REGISTER: Rnode = RsDoGeneralRegisterDescriptor (Info); break; case PARSEOP_STARTDEPENDENTFN: switch (*State) { case ACPI_RSTATE_START_DEPENDENT: AslError (ASL_ERROR, ASL_MSG_DEPENDENT_NESTING, Info->DescriptorTypeOp, NULL); break; case ACPI_RSTATE_NORMAL: case ACPI_RSTATE_DEPENDENT_LIST: default: break; } *State = ACPI_RSTATE_START_DEPENDENT; Rnode = RsDoStartDependentDescriptor (Info); *State = ACPI_RSTATE_DEPENDENT_LIST; break; case PARSEOP_STARTDEPENDENTFN_NOPRI: switch (*State) { case ACPI_RSTATE_START_DEPENDENT: AslError (ASL_ERROR, ASL_MSG_DEPENDENT_NESTING, Info->DescriptorTypeOp, NULL); break; case ACPI_RSTATE_NORMAL: case ACPI_RSTATE_DEPENDENT_LIST: default: break; } *State = ACPI_RSTATE_START_DEPENDENT; Rnode = RsDoStartDependentNoPriDescriptor (Info); *State = ACPI_RSTATE_DEPENDENT_LIST; break; case PARSEOP_VENDORLONG: Rnode = RsDoVendorLargeDescriptor (Info); break; case PARSEOP_VENDORSHORT: Rnode = RsDoVendorSmallDescriptor (Info); break; case PARSEOP_WORDBUSNUMBER: Rnode = RsDoWordBusNumberDescriptor (Info); break; case PARSEOP_WORDIO: Rnode = RsDoWordIoDescriptor (Info); break; case PARSEOP_WORDSPACE: Rnode = RsDoWordSpaceDescriptor (Info); break; case PARSEOP_GPIO_INT: Rnode = RsDoGpioIntDescriptor (Info); break; case PARSEOP_GPIO_IO: Rnode = RsDoGpioIoDescriptor (Info); break; case PARSEOP_I2C_SERIALBUS: case PARSEOP_I2C_SERIALBUS_V2: Rnode = RsDoI2cSerialBusDescriptor (Info); break; case PARSEOP_SPI_SERIALBUS: case PARSEOP_SPI_SERIALBUS_V2: Rnode = RsDoSpiSerialBusDescriptor (Info); break; case PARSEOP_UART_SERIALBUS: case PARSEOP_UART_SERIALBUS_V2: Rnode = RsDoUartSerialBusDescriptor (Info); break; case PARSEOP_CSI2_SERIALBUS: Rnode = RsDoCsi2SerialBusDescriptor (Info); break; case PARSEOP_PINCONFIG: Rnode = RsDoPinConfigDescriptor (Info); break; case PARSEOP_PINFUNCTION: Rnode = RsDoPinFunctionDescriptor (Info); break; case PARSEOP_PINGROUP: Rnode = RsDoPinGroupDescriptor (Info); break; case PARSEOP_PINGROUPFUNCTION: Rnode = RsDoPinGroupFunctionDescriptor (Info); break; case PARSEOP_PINGROUPCONFIG: Rnode = RsDoPinGroupConfigDescriptor (Info); break; case PARSEOP_DEFAULT_ARG: /* Just ignore any of these, they are used as fillers/placeholders */ break; default: printf ("Unknown resource descriptor type [%s]\n", Info->DescriptorTypeOp->Asl.ParseOpName); break; } /* * Mark original node as unused, but head of a resource descriptor. * This allows the resource to be installed in the namespace so that * references to the descriptor can be resolved. */ Info->DescriptorTypeOp->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; Info->DescriptorTypeOp->Asl.CompileFlags = OP_IS_RESOURCE_DESC; Info->DescriptorTypeOp->Asl.Value.Integer = Info->CurrentByteOffset; if (Rnode) { Info->DescriptorTypeOp->Asl.FinalAmlLength = Rnode->BufferLength; Info->DescriptorTypeOp->Asl.Extra = ((AML_RESOURCE *) Rnode->Buffer)->DescriptorType; } return (Rnode); } /******************************************************************************* * * FUNCTION: RsLinkDescriptorChain * * PARAMETERS: PreviousRnode - Pointer to the node that will be previous * to the linked node, At exit, set to the * last node in the new chain. * Rnode - Resource node to link into the list * * RETURN: Cumulative buffer byte offset of the new segment of chain * * DESCRIPTION: Link a descriptor chain at the end of an existing chain. * ******************************************************************************/ UINT32 RsLinkDescriptorChain ( ASL_RESOURCE_NODE **PreviousRnode, ASL_RESOURCE_NODE *Rnode) { ASL_RESOURCE_NODE *LastRnode; UINT32 CurrentByteOffset; /* Anything to do? */ if (!Rnode) { return (0); } /* Point the previous node to the new node */ (*PreviousRnode)->Next = Rnode; CurrentByteOffset = Rnode->BufferLength; /* Walk to the end of the chain headed by Rnode */ LastRnode = Rnode; while (LastRnode->Next) { LastRnode = LastRnode->Next; CurrentByteOffset += LastRnode->BufferLength; } /* Previous node becomes the last node in the chain */ *PreviousRnode = LastRnode; return (CurrentByteOffset); } /******************************************************************************* * * FUNCTION: RsDoResourceTemplate * * PARAMETERS: Op - Parent of a resource template list * * RETURN: None. Sets input node to point to a list of AML code * * DESCRIPTION: Merge a list of resource descriptors into a single AML buffer, * in preparation for output to the AML output file. * ******************************************************************************/ void RsDoResourceTemplate ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *BufferLengthOp; ACPI_PARSE_OBJECT *BufferOp; ACPI_PARSE_OBJECT *DescriptorTypeOp; ACPI_PARSE_OBJECT *LastOp = NULL; UINT32 CurrentByteOffset = 0; ASL_RESOURCE_NODE HeadRnode; ASL_RESOURCE_NODE *PreviousRnode; ASL_RESOURCE_NODE *Rnode; ASL_RESOURCE_INFO Info; UINT8 State; /* Mark parent as containing a resource template */ if (Op->Asl.Parent) { Op->Asl.Parent->Asl.CompileFlags |= OP_IS_RESOURCE_DESC; } /* ResourceTemplate Opcode is first (Op) */ /* Buffer Length node is first child */ BufferLengthOp = ASL_GET_CHILD_NODE (Op); /* Buffer Op is first peer */ BufferOp = ASL_GET_PEER_NODE (BufferLengthOp); /* First Descriptor type is next */ DescriptorTypeOp = ASL_GET_PEER_NODE (BufferOp); /* DEFAULT_ARG indicates null template - ResourceTemplate(){} */ if (DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { AslError (ASL_WARNING, ASL_MSG_NULL_RESOURCE_TEMPLATE, DescriptorTypeOp, DescriptorTypeOp->Asl.Value.String); } /* * Process all resource descriptors in the list * Note: It is assumed that the EndTag node has been automatically * inserted at the end of the template by the parser. */ State = ACPI_RSTATE_NORMAL; PreviousRnode = &HeadRnode; while (DescriptorTypeOp) { /* Save information for optional mapfile */ if (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CONNECTION) { Info.MappingOp = Op->Asl.Parent; } else { Info.MappingOp = DescriptorTypeOp; } Info.DescriptorTypeOp = DescriptorTypeOp; Info.CurrentByteOffset = CurrentByteOffset; DescriptorTypeOp->Asl.CompileFlags |= OP_IS_RESOURCE_DESC; Rnode = RsDoOneResourceDescriptor (&Info, &State); /* * Update current byte offset to indicate the number of bytes from the * start of the buffer. Buffer can include multiple descriptors, we * must keep track of the offset of not only each descriptor, but each * element (field) within each descriptor as well. */ CurrentByteOffset += RsLinkDescriptorChain (&PreviousRnode, Rnode); /* Get the next descriptor in the list */ LastOp = DescriptorTypeOp; DescriptorTypeOp = ASL_GET_PEER_NODE (DescriptorTypeOp); } if (State == ACPI_RSTATE_DEPENDENT_LIST) { if (LastOp) { LastOp = LastOp->Asl.Parent; } AslError (ASL_ERROR, ASL_MSG_MISSING_ENDDEPENDENT, LastOp, NULL); } /* * Transform the nodes into the following * * Op -> AML_BUFFER_OP * First Child -> BufferLength * Second Child -> Descriptor Buffer (raw byte data) */ Op->Asl.ParseOpcode = PARSEOP_BUFFER; Op->Asl.AmlOpcode = AML_BUFFER_OP; Op->Asl.CompileFlags = OP_AML_PACKAGE | OP_IS_RESOURCE_DESC; UtSetParseOpName (Op); BufferLengthOp->Asl.ParseOpcode = PARSEOP_INTEGER; BufferLengthOp->Asl.Value.Integer = CurrentByteOffset; (void) OpcSetOptimalIntegerSize (BufferLengthOp); UtSetParseOpName (BufferLengthOp); BufferOp->Asl.ParseOpcode = PARSEOP_RAW_DATA; BufferOp->Asl.AmlOpcode = AML_RAW_DATA_CHAIN; BufferOp->Asl.AmlOpcodeLength = 0; BufferOp->Asl.AmlLength = CurrentByteOffset; BufferOp->Asl.Value.Buffer = ACPI_CAST_PTR (UINT8, HeadRnode.Next); BufferOp->Asl.CompileFlags |= OP_IS_RESOURCE_DATA; UtSetParseOpName (BufferOp); return; } src/acpica/source/compiler/aslresources.y000066400000000000000000001257241465205512700211250ustar00rootroot00000000000000NoEcho(' /****************************************************************************** * * Module Name: aslresources.y - Bison/Yacc production rules for resources * - Keep this file synched with the * CvParseOpBlockType function in cvcompiler.c * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ ') /******************************************************************************* * * ASL Resource Template Terms * ******************************************************************************/ /* * Note: Create two default nodes to allow conversion to a Buffer AML opcode * Also, insert the EndTag at the end of the template. */ ResourceTemplateTerm : PARSEOP_RESOURCETEMPLATE {COMMENT_CAPTURE_OFF;} OptionalParentheses '{' ResourceMacroList '}' {$$ = TrCreateOp (PARSEOP_RESOURCETEMPLATE,4, TrCreateLeafOp (PARSEOP_DEFAULT_ARG), TrCreateLeafOp (PARSEOP_DEFAULT_ARG), $5, TrCreateLeafOp (PARSEOP_ENDTAG)); COMMENT_CAPTURE_ON;} ; OptionalParentheses : {$$ = NULL;} | PARSEOP_OPEN_PAREN PARSEOP_CLOSE_PAREN {$$ = NULL;} ; ResourceMacroList : {$$ = NULL;} | ResourceMacroList ResourceMacroTerm {$$ = TrLinkPeerOp ($1,$2);} ; ResourceMacroTerm : Csi2SerialBusTerm {} | DMATerm {} | DWordIOTerm {} | DWordMemoryTerm {} | DWordSpaceTerm {} | EndDependentFnTerm {} | ExtendedIOTerm {} | ExtendedMemoryTerm {} | ExtendedSpaceTerm {} | FixedDmaTerm {} | FixedIOTerm {} | GpioIntTerm {} | GpioIoTerm {} | I2cSerialBusTerm {} | I2cSerialBusTermV2 {} | InterruptTerm {} | IOTerm {} | IRQNoFlagsTerm {} | IRQTerm {} | Memory24Term {} | Memory32FixedTerm {} | Memory32Term {} | PinConfigTerm {} | PinFunctionTerm {} | ClockInputTerm {} | PinGroupTerm {} | PinGroupConfigTerm {} | PinGroupFunctionTerm {} | QWordIOTerm {} | QWordMemoryTerm {} | QWordSpaceTerm {} | RegisterTerm {} | SpiSerialBusTerm {} | SpiSerialBusTermV2 {} | StartDependentFnNoPriTerm {} | StartDependentFnTerm {} | UartSerialBusTerm {} | UartSerialBusTermV2 {} | VendorLongTerm {} | VendorShortTerm {} | WordBusNumberTerm {} | WordIOTerm {} | WordSpaceTerm {} ; Csi2SerialBusTerm : PARSEOP_CSI2_SERIALBUS PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_CSI2_SERIALBUS);} OptionalSlaveMode_First {UtCheckIntegerRange ($4, 0x00, 0x01);} /* 04: SlaveMode */ ',' ByteConstExpr {UtCheckIntegerRange ($7, 0x00, 0x03);} /* 07: PhyType */ OptionalByteConstExpr {UtCheckIntegerRange ($9, 0x00, 0xFC);} /* 09: LocalPortInstance */ ',' StringData /* 12: ResourceSource */ ',' ByteConstExpr /* 14: ResourceSourceIndex */ OptionalResourceType /* 15; ResourceType (ResourceUsage) */ OptionalNameString /* 16: DescriptorName */ OptionalBuffer_Last /* 17: VendorData */ PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,8, $4,$7,$9,$12,$14,$15,$16,$17);} | PARSEOP_CSI2_SERIALBUS PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} DMATerm : PARSEOP_DMA PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_DMA);} DMATypeKeyword OptionalBusMasterKeyword ',' XferTypeKeyword OptionalNameString_Last PARSEOP_CLOSE_PAREN '{' ByteList '}' {$$ = TrLinkOpChildren ($3,5,$4,$5,$7,$8,$11);} | PARSEOP_DMA PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; DWordIOTerm : PARSEOP_DWORDIO PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_DWORDIO);} OptionalResourceType_First OptionalMinType OptionalMaxType OptionalDecodeType OptionalRangeType ',' DWordConstExpr ',' DWordConstExpr ',' DWordConstExpr ',' DWordConstExpr ',' DWordConstExpr OptionalByteConstExpr OptionalStringData OptionalNameString OptionalType OptionalTranslationType_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,15, $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);} | PARSEOP_DWORDIO PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; DWordMemoryTerm : PARSEOP_DWORDMEMORY PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_DWORDMEMORY);} OptionalResourceType_First OptionalDecodeType OptionalMinType OptionalMaxType OptionalMemType ',' OptionalReadWriteKeyword ',' DWordConstExpr ',' DWordConstExpr ',' DWordConstExpr ',' DWordConstExpr ',' DWordConstExpr OptionalByteConstExpr OptionalStringData OptionalNameString OptionalAddressRange OptionalType_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,16, $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);} | PARSEOP_DWORDMEMORY PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; DWordSpaceTerm : PARSEOP_DWORDSPACE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_DWORDSPACE);} ByteConstExpr {UtCheckIntegerRange ($4, 0xC0, 0xFF);} OptionalResourceType OptionalDecodeType OptionalMinType OptionalMaxType ',' ByteConstExpr ',' DWordConstExpr ',' DWordConstExpr ',' DWordConstExpr ',' DWordConstExpr ',' DWordConstExpr OptionalByteConstExpr OptionalStringData OptionalNameString_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,14, $4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);} | PARSEOP_DWORDSPACE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; EndDependentFnTerm : PARSEOP_ENDDEPENDENTFN PARSEOP_OPEN_PAREN PARSEOP_CLOSE_PAREN {$$ = TrCreateLeafOp (PARSEOP_ENDDEPENDENTFN);} | PARSEOP_ENDDEPENDENTFN PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ExtendedIOTerm : PARSEOP_EXTENDEDIO PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_EXTENDEDIO);} OptionalResourceType_First OptionalMinType OptionalMaxType OptionalDecodeType OptionalRangeType ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr OptionalQWordConstExpr OptionalNameString OptionalType OptionalTranslationType_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,14, $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22);} | PARSEOP_EXTENDEDIO PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ExtendedMemoryTerm : PARSEOP_EXTENDEDMEMORY PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_EXTENDEDMEMORY);} OptionalResourceType_First OptionalDecodeType OptionalMinType OptionalMaxType OptionalMemType ',' OptionalReadWriteKeyword ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr OptionalQWordConstExpr OptionalNameString OptionalAddressRange OptionalType_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,15, $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24);} | PARSEOP_EXTENDEDMEMORY PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ExtendedSpaceTerm : PARSEOP_EXTENDEDSPACE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_EXTENDEDSPACE);} ByteConstExpr {UtCheckIntegerRange ($4, 0xC0, 0xFF);} OptionalResourceType OptionalDecodeType OptionalMinType OptionalMaxType ',' ByteConstExpr ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr OptionalQWordConstExpr OptionalNameString_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,13, $4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23);} | PARSEOP_EXTENDEDSPACE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; FixedDmaTerm : PARSEOP_FIXEDDMA PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_FIXEDDMA);} WordConstExpr /* 04: DMA RequestLines */ ',' WordConstExpr /* 06: DMA Channels */ OptionalXferSize /* 07: DMA TransferSize */ OptionalNameString /* 08: DescriptorName */ PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,4,$4,$6,$7,$8);} | PARSEOP_FIXEDDMA PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; FixedIOTerm : PARSEOP_FIXEDIO PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_FIXEDIO);} WordConstExpr ',' ByteConstExpr OptionalNameString_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,3,$4,$6,$7);} | PARSEOP_FIXEDIO PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; GpioIntTerm : PARSEOP_GPIO_INT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_GPIO_INT);} InterruptTypeKeyword /* 04: InterruptType */ ',' InterruptLevel /* 06: InterruptLevel */ OptionalShareType /* 07: SharedType */ ',' PinConfigByte /* 09: PinConfig */ OptionalWordConstExpr /* 10: DebounceTimeout */ ',' StringData /* 12: ResourceSource */ OptionalByteConstExpr /* 13: ResourceSourceIndex */ OptionalResourceType /* 14: ResourceType */ OptionalNameString /* 15: DescriptorName */ OptionalBuffer_Last /* 16: VendorData */ PARSEOP_CLOSE_PAREN '{' DWordConstExpr '}' {$$ = TrLinkOpChildren ($3,11, $4,$6,$7,$9,$10,$12,$13,$14,$15,$16,$19);} | PARSEOP_GPIO_INT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; GpioIoTerm : PARSEOP_GPIO_IO PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_GPIO_IO);} OptionalShareType_First /* 04: SharedType */ ',' PinConfigByte /* 06: PinConfig */ OptionalWordConstExpr /* 07: DebounceTimeout */ OptionalWordConstExpr /* 08: DriveStrength */ OptionalIoRestriction /* 09: IoRestriction */ ',' StringData /* 11: ResourceSource */ OptionalByteConstExpr /* 12: ResourceSourceIndex */ OptionalResourceType /* 13: ResourceType */ OptionalNameString /* 14: DescriptorName */ OptionalBuffer_Last /* 15: VendorData */ PARSEOP_CLOSE_PAREN '{' DWordList '}' {$$ = TrLinkOpChildren ($3,11, $4,$6,$7,$8,$9,$11,$12,$13,$14,$15,$18);} | PARSEOP_GPIO_IO PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; I2cSerialBusTerm : PARSEOP_I2C_SERIALBUS PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_I2C_SERIALBUS);} WordConstExpr /* 04: SlaveAddress */ OptionalSlaveMode /* 05: SlaveMode */ ',' DWordConstExpr /* 07: ConnectionSpeed */ OptionalAddressingMode /* 08: AddressingMode */ ',' StringData /* 10: ResourceSource */ OptionalByteConstExpr /* 11: ResourceSourceIndex */ OptionalResourceType /* 12: ResourceType */ OptionalNameString /* 13: DescriptorName */ OptionalBuffer_Last /* 14: VendorData */ PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,10, $4,$5,$7,$8,$10,$11,$12,$13, TrCreateLeafOp (PARSEOP_DEFAULT_ARG),$14);} | PARSEOP_I2C_SERIALBUS PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; I2cSerialBusTermV2 : PARSEOP_I2C_SERIALBUS_V2 PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_I2C_SERIALBUS_V2);} WordConstExpr /* 04: SlaveAddress */ OptionalSlaveMode /* 05: SlaveMode */ ',' DWordConstExpr /* 07: ConnectionSpeed */ OptionalAddressingMode /* 08: AddressingMode */ ',' StringData /* 10: ResourceSource */ OptionalByteConstExpr /* 11: ResourceSourceIndex */ OptionalResourceType /* 12: ResourceType */ OptionalNameString /* 13: DescriptorName */ OptionalShareType /* 14: Share */ OptionalBuffer_Last /* 15: VendorData */ PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,10, $4,$5,$7,$8,$10,$11,$12,$13,$14,$15);} | PARSEOP_I2C_SERIALBUS_V2 PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; InterruptTerm : PARSEOP_INTERRUPT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_INTERRUPT);} OptionalResourceType_First ',' InterruptTypeKeyword ',' InterruptLevel OptionalShareType OptionalByteConstExpr OptionalStringData OptionalNameString_Last PARSEOP_CLOSE_PAREN '{' DWordList '}' {$$ = TrLinkOpChildren ($3,8, $4,$6,$8,$9,$10,$11,$12,$15);} | PARSEOP_INTERRUPT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; IOTerm : PARSEOP_IO PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_IO);} IODecodeKeyword ',' WordConstExpr ',' WordConstExpr ',' ByteConstExpr ',' ByteConstExpr OptionalNameString_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,6,$4,$6,$8,$10,$12,$13);} | PARSEOP_IO PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; IRQNoFlagsTerm : PARSEOP_IRQNOFLAGS PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_IRQNOFLAGS);} OptionalNameString_First PARSEOP_CLOSE_PAREN '{' ByteList '}' {$$ = TrLinkOpChildren ($3,2,$4,$7);} | PARSEOP_IRQNOFLAGS PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; IRQTerm : PARSEOP_IRQ PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_IRQ);} InterruptTypeKeyword ',' InterruptLevel OptionalShareType OptionalNameString_Last PARSEOP_CLOSE_PAREN '{' ByteList '}' {$$ = TrLinkOpChildren ($3,5,$4,$6,$7,$8,$11);} | PARSEOP_IRQ PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; Memory24Term : PARSEOP_MEMORY24 PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_MEMORY24);} OptionalReadWriteKeyword ',' WordConstExpr ',' WordConstExpr ',' WordConstExpr ',' WordConstExpr OptionalNameString_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,6,$4,$6,$8,$10,$12,$13);} | PARSEOP_MEMORY24 PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; Memory32FixedTerm : PARSEOP_MEMORY32FIXED PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_MEMORY32FIXED);} OptionalReadWriteKeyword ',' DWordConstExpr ',' DWordConstExpr OptionalNameString_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,4,$4,$6,$8,$9);} | PARSEOP_MEMORY32FIXED PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; Memory32Term : PARSEOP_MEMORY32 PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_MEMORY32);} OptionalReadWriteKeyword ',' DWordConstExpr ',' DWordConstExpr ',' DWordConstExpr ',' DWordConstExpr OptionalNameString_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,6,$4,$6,$8,$10,$12,$13);} | PARSEOP_MEMORY32 PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; PinConfigTerm : PARSEOP_PINCONFIG PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_PINCONFIG);} OptionalShareType_First /* 04: SharedType */ ',' ByteConstExpr /* 06: PinConfigType */ ',' DWordConstExpr /* 08: PinConfigValue */ ',' StringData /* 10: ResourceSource */ OptionalByteConstExpr /* 11: ResourceSourceIndex */ OptionalResourceType /* 12: ResourceType */ OptionalNameString /* 13: DescriptorName */ OptionalBuffer_Last /* 14: VendorData */ PARSEOP_CLOSE_PAREN '{' DWordList '}' {$$ = TrLinkOpChildren ($3,9, $4,$6,$8,$10,$11,$12,$13,$14,$17);} | PARSEOP_PINCONFIG PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; PinFunctionTerm : PARSEOP_PINFUNCTION PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_PINFUNCTION);} OptionalShareType_First /* 04: SharedType */ ',' PinConfigByte /* 06: PinConfig */ ',' WordConstExpr /* 08: FunctionNumber */ ',' StringData /* 10: ResourceSource */ OptionalByteConstExpr /* 11: ResourceSourceIndex */ OptionalResourceType /* 12: ResourceType */ OptionalNameString /* 13: DescriptorName */ OptionalBuffer_Last /* 14: VendorData */ PARSEOP_CLOSE_PAREN '{' DWordList '}' {$$ = TrLinkOpChildren ($3,9, $4,$6,$8,$10,$11,$12,$13,$14,$17);} | PARSEOP_PINFUNCTION PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; ClockInputTerm : PARSEOP_CLOCKINPUT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_CLOCKINPUT);} DWordConstExpr /* 04: FrequencyNumerator */ ',' WordConstExpr /* 06: FrequencyDivisor */ ',' ClockScaleKeyword /* 08: Scale */ ',' ClockModeKeyword /* 10: Mode*/ OptionalStringData /* 11: ResourceSource */ OptionalByteConstExpr /* 12: ResourceSourceIndex */ PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,6,$4,$6,$8,$10,$11,$12);} | PARSEOP_CLOCKINPUT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; PinGroupTerm : PARSEOP_PINGROUP PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_PINGROUP);} StringData /* 04: ResourceLabel */ OptionalProducerResourceType /* 05: ResourceType */ OptionalNameString /* 06: DescriptorName */ OptionalBuffer_Last /* 07: VendorData */ PARSEOP_CLOSE_PAREN '{' DWordList '}' {$$ = TrLinkOpChildren ($3,5,$4,$5,$6,$7,$10);} | PARSEOP_PINGROUP PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; PinGroupConfigTerm : PARSEOP_PINGROUPCONFIG PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_PINGROUPCONFIG);} OptionalShareType_First /* 04: SharedType */ ',' ByteConstExpr /* 06: PinConfigType */ ',' DWordConstExpr /* 08: PinConfigValue */ ',' StringData /* 10: ResourceSource */ OptionalByteConstExpr /* 11: ResourceSourceIndex */ ',' StringData /* 13: ResourceSourceLabel */ OptionalResourceType /* 14: ResourceType */ OptionalNameString /* 15: DescriptorName */ OptionalBuffer_Last /* 16: VendorData */ PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,9, $4,$6,$8,$10,$11,$13,$14,$15,$16);} | PARSEOP_PINGROUPCONFIG PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; PinGroupFunctionTerm : PARSEOP_PINGROUPFUNCTION PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_PINGROUPFUNCTION);} OptionalShareType_First /* 04: SharedType */ ',' WordConstExpr /* 06: FunctionNumber */ ',' StringData /* 08: ResourceSource */ OptionalByteConstExpr /* 09: ResourceSourceIndex */ ',' StringData /* 11: ResourceSourceLabel */ OptionalResourceType /* 12: ResourceType */ OptionalNameString /* 13: DescriptorName */ OptionalBuffer_Last /* 14: VendorData */ PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,8, $4,$6,$8,$9,$11,$12,$13,$14);} | PARSEOP_PINGROUPFUNCTION PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; QWordIOTerm : PARSEOP_QWORDIO PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_QWORDIO);} OptionalResourceType_First OptionalMinType OptionalMaxType OptionalDecodeType OptionalRangeType ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr OptionalByteConstExpr OptionalStringData OptionalNameString OptionalType OptionalTranslationType_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,15, $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);} | PARSEOP_QWORDIO PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; QWordMemoryTerm : PARSEOP_QWORDMEMORY PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_QWORDMEMORY);} OptionalResourceType_First OptionalDecodeType OptionalMinType OptionalMaxType OptionalMemType ',' OptionalReadWriteKeyword ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr OptionalByteConstExpr OptionalStringData OptionalNameString OptionalAddressRange OptionalType_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,16, $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);} | PARSEOP_QWORDMEMORY PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; QWordSpaceTerm : PARSEOP_QWORDSPACE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_QWORDSPACE);} ByteConstExpr {UtCheckIntegerRange ($4, 0xC0, 0xFF);} OptionalResourceType OptionalDecodeType OptionalMinType OptionalMaxType ',' ByteConstExpr ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr ',' QWordConstExpr OptionalByteConstExpr OptionalStringData OptionalNameString_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,14, $4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);} | PARSEOP_QWORDSPACE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; RegisterTerm : PARSEOP_REGISTER PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_REGISTER);} AddressSpaceKeyword ',' ByteConstExpr ',' ByteConstExpr ',' QWordConstExpr OptionalAccessSize OptionalNameString_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,6,$4,$6,$8,$10,$11,$12);} | PARSEOP_REGISTER PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; SpiSerialBusTerm : PARSEOP_SPI_SERIALBUS PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_SPI_SERIALBUS);} WordConstExpr /* 04: DeviceSelection */ OptionalDevicePolarity /* 05: DevicePolarity */ OptionalWireMode /* 06: WireMode */ ',' ByteConstExpr /* 08: DataBitLength */ OptionalSlaveMode /* 09: SlaveMode */ ',' DWordConstExpr /* 11: ConnectionSpeed */ ',' ClockPolarityKeyword /* 13: ClockPolarity */ ',' ClockPhaseKeyword /* 15: ClockPhase */ ',' StringData /* 17: ResourceSource */ OptionalByteConstExpr /* 18: ResourceSourceIndex */ OptionalResourceType /* 19: ResourceType */ OptionalNameString /* 20: DescriptorName */ OptionalBuffer_Last /* 21: VendorData */ PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,14, $4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20, TrCreateLeafOp (PARSEOP_DEFAULT_ARG),$21);} | PARSEOP_SPI_SERIALBUS PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; SpiSerialBusTermV2 : PARSEOP_SPI_SERIALBUS_V2 PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_SPI_SERIALBUS_V2);} WordConstExpr /* 04: DeviceSelection */ OptionalDevicePolarity /* 05: DevicePolarity */ OptionalWireMode /* 06: WireMode */ ',' ByteConstExpr /* 08: DataBitLength */ OptionalSlaveMode /* 09: SlaveMode */ ',' DWordConstExpr /* 11: ConnectionSpeed */ ',' ClockPolarityKeyword /* 13: ClockPolarity */ ',' ClockPhaseKeyword /* 15: ClockPhase */ ',' StringData /* 17: ResourceSource */ OptionalByteConstExpr /* 18: ResourceSourceIndex */ OptionalResourceType /* 19: ResourceType */ OptionalNameString /* 20: DescriptorName */ OptionalShareType /* 21: Share */ OptionalBuffer_Last /* 22: VendorData */ PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,14, $4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,$21,$22);} | PARSEOP_SPI_SERIALBUS_V2 PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; StartDependentFnNoPriTerm : PARSEOP_STARTDEPENDENTFN_NOPRI PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_STARTDEPENDENTFN_NOPRI);} PARSEOP_CLOSE_PAREN '{' ResourceMacroList '}' {$$ = TrLinkOpChildren ($3,1,$6);} | PARSEOP_STARTDEPENDENTFN_NOPRI PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; StartDependentFnTerm : PARSEOP_STARTDEPENDENTFN PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_STARTDEPENDENTFN);} ByteConstExpr ',' ByteConstExpr PARSEOP_CLOSE_PAREN '{' ResourceMacroList '}' {$$ = TrLinkOpChildren ($3,3,$4,$6,$9);} | PARSEOP_STARTDEPENDENTFN PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; UartSerialBusTerm : PARSEOP_UART_SERIALBUS PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_UART_SERIALBUS);} DWordConstExpr /* 04: ConnectionSpeed */ OptionalBitsPerByte /* 05: BitsPerByte */ OptionalStopBits /* 06: StopBits */ ',' ByteConstExpr /* 08: LinesInUse */ OptionalEndian /* 09: Endianness */ OptionalParityType /* 10: Parity */ OptionalFlowControl /* 11: FlowControl */ ',' WordConstExpr /* 13: Rx BufferSize */ ',' WordConstExpr /* 15: Tx BufferSize */ ',' StringData /* 17: ResourceSource */ OptionalByteConstExpr /* 18: ResourceSourceIndex */ OptionalResourceType /* 19: ResourceType */ OptionalNameString /* 20: DescriptorName */ OptionalBuffer_Last /* 21: VendorData */ PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,15, $4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20, TrCreateLeafOp (PARSEOP_DEFAULT_ARG),$21);} | PARSEOP_UART_SERIALBUS PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; UartSerialBusTermV2 : PARSEOP_UART_SERIALBUS_V2 PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_UART_SERIALBUS_V2);} DWordConstExpr /* 04: ConnectionSpeed */ OptionalBitsPerByte /* 05: BitsPerByte */ OptionalStopBits /* 06: StopBits */ ',' ByteConstExpr /* 08: LinesInUse */ OptionalEndian /* 09: Endianness */ OptionalParityType /* 10: Parity */ OptionalFlowControl /* 11: FlowControl */ ',' WordConstExpr /* 13: Rx BufferSize */ ',' WordConstExpr /* 15: Tx BufferSize */ ',' StringData /* 17: ResourceSource */ OptionalByteConstExpr /* 18: ResourceSourceIndex */ OptionalResourceType /* 19: ResourceType */ OptionalNameString /* 20: DescriptorName */ OptionalShareType /* 21: Share */ OptionalBuffer_Last /* 22: VendorData */ PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,15, $4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,$21,$22);} | PARSEOP_UART_SERIALBUS_V2 PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; VendorLongTerm : PARSEOP_VENDORLONG PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_VENDORLONG);} OptionalNameString_First PARSEOP_CLOSE_PAREN '{' ByteList '}' {$$ = TrLinkOpChildren ($3,2,$4,$7);} | PARSEOP_VENDORLONG PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; VendorShortTerm : PARSEOP_VENDORSHORT PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_VENDORSHORT);} OptionalNameString_First PARSEOP_CLOSE_PAREN '{' ByteList '}' {$$ = TrLinkOpChildren ($3,2,$4,$7);} | PARSEOP_VENDORSHORT PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; WordBusNumberTerm : PARSEOP_WORDBUSNUMBER PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_WORDBUSNUMBER);} OptionalResourceType_First OptionalMinType OptionalMaxType OptionalDecodeType ',' WordConstExpr ',' WordConstExpr ',' WordConstExpr ',' WordConstExpr ',' WordConstExpr OptionalByteConstExpr OptionalStringData OptionalNameString_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,12, $4,$5,$6,$7,$9,$11,$13,$15,$17,$18,$19,$20);} | PARSEOP_WORDBUSNUMBER PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; WordIOTerm : PARSEOP_WORDIO PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_WORDIO);} OptionalResourceType_First OptionalMinType OptionalMaxType OptionalDecodeType OptionalRangeType ',' WordConstExpr ',' WordConstExpr ',' WordConstExpr ',' WordConstExpr ',' WordConstExpr OptionalByteConstExpr OptionalStringData OptionalNameString OptionalType OptionalTranslationType_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,15, $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);} | PARSEOP_WORDIO PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; WordSpaceTerm : PARSEOP_WORDSPACE PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_WORDSPACE);} ByteConstExpr {UtCheckIntegerRange ($4, 0xC0, 0xFF);} OptionalResourceType OptionalDecodeType OptionalMinType OptionalMaxType ',' ByteConstExpr ',' WordConstExpr ',' WordConstExpr ',' WordConstExpr ',' WordConstExpr ',' WordConstExpr OptionalByteConstExpr OptionalStringData OptionalNameString_Last PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($3,14, $4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);} | PARSEOP_WORDSPACE PARSEOP_OPEN_PAREN error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;} ; src/acpica/source/compiler/aslrestype1.c000066400000000000000000000645441465205512700206430ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslrestype1 - Miscellaneous small resource descriptors * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslrestype1") /* * This module contains miscellaneous small resource descriptors: * * EndTag * EndDependentFn * Memory24 * Memory32 * Memory32Fixed * StartDependentFn * StartDependentFnNoPri * VendorShort */ /******************************************************************************* * * FUNCTION: RsDoEndTagDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a short "EndDependentFn" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoEndTagDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ASL_RESOURCE_NODE *Rnode; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_END_TAG)); Descriptor = Rnode->Buffer; Descriptor->EndTag.DescriptorType = ACPI_RESOURCE_NAME_END_TAG | ASL_RDESC_END_TAG_SIZE; Descriptor->EndTag.Checksum = 0; return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoEndDependentDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a short "EndDependentFn" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoEndDependentDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ASL_RESOURCE_NODE *Rnode; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_END_DEPENDENT)); Descriptor = Rnode->Buffer; Descriptor->EndDpf.DescriptorType = ACPI_RESOURCE_NAME_END_DEPENDENT | ASL_RDESC_END_DEPEND_SIZE; return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoMemory24Descriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a short "Memory24" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoMemory24Descriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_MEMORY24)); Descriptor = Rnode->Buffer; Descriptor->Memory24.DescriptorType = ACPI_RESOURCE_NAME_MEMORY24; Descriptor->Memory24.ResourceLength = 9; /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Read/Write type */ RsSetFlagBits (&Descriptor->Memory24.Flags, InitializerOp, 0, 1); RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Flags), 0); break; case 1: /* Min Address */ Descriptor->Memory24.Minimum = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Minimum)); MinOp = InitializerOp; break; case 2: /* Max Address */ Descriptor->Memory24.Maximum = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Maximum)); MaxOp = InitializerOp; break; case 3: /* Alignment */ Descriptor->Memory24.Alignment = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_ALIGNMENT, CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Alignment)); break; case 4: /* Length */ Descriptor->Memory24.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.AddressLength)); LengthOp = InitializerOp; break; case 5: /* Name */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Align values (Alignment==0 means 64K) */ RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY24, Descriptor->Memory24.Minimum, Descriptor->Memory24.Maximum, Descriptor->Memory24.AddressLength, Descriptor->Memory24.Alignment, MinOp, MaxOp, LengthOp, NULL, Info->DescriptorTypeOp); return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoMemory32Descriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a short "Memory32" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoMemory32Descriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ACPI_PARSE_OBJECT *AlignOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_MEMORY32)); Descriptor = Rnode->Buffer; Descriptor->Memory32.DescriptorType = ACPI_RESOURCE_NAME_MEMORY32; Descriptor->Memory32.ResourceLength = 17; /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Read/Write type */ RsSetFlagBits (&Descriptor->Memory32.Flags, InitializerOp, 0, 1); RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Flags), 0); break; case 1: /* Min Address */ Descriptor->Memory32.Minimum = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Minimum)); MinOp = InitializerOp; break; case 2: /* Max Address */ Descriptor->Memory32.Maximum = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Maximum)); MaxOp = InitializerOp; break; case 3: /* Alignment */ Descriptor->Memory32.Alignment = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_ALIGNMENT, CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Alignment)); AlignOp = InitializerOp; break; case 4: /* Length */ Descriptor->Memory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.AddressLength)); LengthOp = InitializerOp; break; case 5: /* Name */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Align values */ RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY32, Descriptor->Memory32.Minimum, Descriptor->Memory32.Maximum, Descriptor->Memory32.AddressLength, Descriptor->Memory32.Alignment, MinOp, MaxOp, LengthOp, AlignOp, Info->DescriptorTypeOp); return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoMemory32FixedDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a short "Memory32Fixed" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoMemory32FixedDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_FIXED_MEMORY32)); Descriptor = Rnode->Buffer; Descriptor->FixedMemory32.DescriptorType = ACPI_RESOURCE_NAME_FIXED_MEMORY32; Descriptor->FixedMemory32.ResourceLength = 9; /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Read/Write type */ RsSetFlagBits (&Descriptor->FixedMemory32.Flags, InitializerOp, 0, 1); RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Flags), 0); break; case 1: /* Address */ Descriptor->FixedMemory32.Address = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_BASEADDRESS, CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Address)); break; case 2: /* Length */ Descriptor->FixedMemory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.AddressLength)); break; case 3: /* Name */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoStartDependentDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a short "StartDependentFn" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoStartDependentDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; ASL_RESOURCE_NODE *PreviousRnode; ASL_RESOURCE_NODE *NextRnode; ASL_RESOURCE_INFO NextInfo; UINT32 CurrentByteOffset; UINT32 i; UINT8 State; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_START_DEPENDENT)); PreviousRnode = Rnode; Descriptor = Rnode->Buffer; /* Increment offset past StartDependent descriptor */ CurrentByteOffset += sizeof (AML_RESOURCE_START_DEPENDENT); /* Descriptor has priority byte */ Descriptor->StartDpf.DescriptorType = ACPI_RESOURCE_NAME_START_DEPENDENT | (ASL_RDESC_ST_DEPEND_SIZE + 0x01); /* Process all child initialization nodes */ State = ACPI_RSTATE_START_DEPENDENT; for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Compatibility Priority */ if ((UINT8) InitializerOp->Asl.Value.Integer > 2) { AslError (ASL_ERROR, ASL_MSG_INVALID_PRIORITY, InitializerOp, NULL); } RsSetFlagBits (&Descriptor->StartDpf.Flags, InitializerOp, 0, 0); break; case 1: /* Performance/Robustness Priority */ if ((UINT8) InitializerOp->Asl.Value.Integer > 2) { AslError (ASL_ERROR, ASL_MSG_INVALID_PERFORMANCE, InitializerOp, NULL); } RsSetFlagBits (&Descriptor->StartDpf.Flags, InitializerOp, 2, 0); break; default: NextInfo.CurrentByteOffset = CurrentByteOffset; NextInfo.DescriptorTypeOp = InitializerOp; NextRnode = RsDoOneResourceDescriptor (&NextInfo, &State); /* * Update current byte offset to indicate the number of bytes from the * start of the buffer. Buffer can include multiple descriptors, we * must keep track of the offset of not only each descriptor, but each * element (field) within each descriptor as well. */ CurrentByteOffset += RsLinkDescriptorChain ( &PreviousRnode, NextRnode); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoStartDependentNoPriDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a short "StartDependentNoPri" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoStartDependentNoPriDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; ASL_RESOURCE_NODE *PreviousRnode; ASL_RESOURCE_NODE *NextRnode; ASL_RESOURCE_INFO NextInfo; UINT32 CurrentByteOffset; UINT8 State; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_START_DEPENDENT_NOPRIO)); Descriptor = Rnode->Buffer; Descriptor->StartDpf.DescriptorType = ACPI_RESOURCE_NAME_START_DEPENDENT | ASL_RDESC_ST_DEPEND_SIZE; PreviousRnode = Rnode; /* Increment offset past StartDependentNoPri descriptor */ CurrentByteOffset += sizeof (AML_RESOURCE_START_DEPENDENT_NOPRIO); /* Process all child initialization nodes */ State = ACPI_RSTATE_START_DEPENDENT; while (InitializerOp) { NextInfo.CurrentByteOffset = CurrentByteOffset; NextInfo.DescriptorTypeOp = InitializerOp; NextRnode = RsDoOneResourceDescriptor (&NextInfo, &State); /* * Update current byte offset to indicate the number of bytes from the * start of the buffer. Buffer can include multiple descriptors, we * must keep track of the offset of not only each descriptor, but each * element (field) within each descriptor as well. */ CurrentByteOffset += RsLinkDescriptorChain (&PreviousRnode, NextRnode); InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoVendorSmallDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a short "VendorShort" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoVendorSmallDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; UINT8 *VendorData; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; /* Allocate worst case - 7 vendor bytes */ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_VENDOR_SMALL) + 7); Descriptor = Rnode->Buffer; Descriptor->VendorSmall.DescriptorType = ACPI_RESOURCE_NAME_VENDOR_SMALL; VendorData = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_SMALL_HEADER); /* Process all child initialization nodes */ InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); for (i = 0; InitializerOp; i++) { if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { break; } /* Maximum 7 vendor data bytes allowed (0-6) */ if (i >= 7) { AslError (ASL_ERROR, ASL_MSG_VENDOR_LIST, InitializerOp, NULL); /* Eat the excess initializers */ while (InitializerOp) { InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } break; } VendorData[i] = (UINT8) InitializerOp->Asl.Value.Integer; InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Adjust the Rnode buffer size, so correct number of bytes are emitted */ Rnode->BufferLength -= (7 - i); /* Set the length in the Type Tag */ Descriptor->VendorSmall.DescriptorType |= (UINT8) i; return (Rnode); } src/acpica/source/compiler/aslrestype1i.c000066400000000000000000000647661465205512700210220ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslrestype1i - Small I/O-related resource descriptors * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslrestype1i") /* * This module contains the I/O-related small resource descriptors: * * DMA * FixedDMA * FixedIO * IO * IRQ * IRQNoFlags */ /******************************************************************************* * * FUNCTION: RsDoDmaDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a short "DMA" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoDmaDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; UINT32 CurrentByteOffset; UINT32 i; UINT8 DmaChannelMask = 0; UINT8 DmaChannels = 0; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_DMA)); Descriptor = Rnode->Buffer; Descriptor->Dma.DescriptorType = ACPI_RESOURCE_NAME_DMA | ASL_RDESC_DMA_SIZE; /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* DMA type */ RsSetFlagBits (&Descriptor->Dma.Flags, InitializerOp, 5, 0); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_DMATYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.Flags), 5, 2); break; case 1: /* Bus Master */ RsSetFlagBits (&Descriptor->Dma.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_BUSMASTER, CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.Flags), 2); break; case 2: /* Xfer Type (transfer width) */ RsSetFlagBits (&Descriptor->Dma.Flags, InitializerOp, 0, 0); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_XFERTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.Flags), 0, 2); break; case 3: /* Name */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: /* All DMA channel bytes are handled here, after flags and name */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { /* Up to 8 channels can be specified in the list */ DmaChannels++; if (DmaChannels > 8) { AslError (ASL_ERROR, ASL_MSG_DMA_LIST, InitializerOp, NULL); return (Rnode); } /* Only DMA channels 0-7 are allowed (mask is 8 bits) */ if (InitializerOp->Asl.Value.Integer > 7) { AslError (ASL_ERROR, ASL_MSG_DMA_CHANNEL, InitializerOp, NULL); } /* Build the mask */ DmaChannelMask |= (1 << ((UINT8) InitializerOp->Asl.Value.Integer)); } if (i == 4) /* case 4: First DMA byte */ { /* Check now for duplicates in list */ RsCheckListForDuplicates (InitializerOp); /* Create a named field at the start of the list */ RsCreateByteField (InitializerOp, ACPI_RESTAG_DMA, CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.DmaChannelMask)); } break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Now we can set the channel mask */ Descriptor->Dma.DmaChannelMask = DmaChannelMask; return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoFixedDmaDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a short "FixedDMA" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoFixedDmaDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_FIXED_DMA)); Descriptor = Rnode->Buffer; Descriptor->FixedDma.DescriptorType = ACPI_RESOURCE_NAME_FIXED_DMA | ASL_RDESC_FIXED_DMA_SIZE; /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* DMA Request Lines [WORD] (_DMA) */ Descriptor->FixedDma.RequestLines = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_DMA, CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.RequestLines)); break; case 1: /* DMA Channel [WORD] (_TYP) */ Descriptor->FixedDma.Channels = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_DMATYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.Channels)); break; case 2: /* Transfer Width [BYTE] (_SIZ) */ Descriptor->FixedDma.Width = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_XFERTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.Width)); break; case 3: /* Descriptor Name (optional) */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: /* Ignore any extra nodes */ break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoFixedIoDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a short "FixedIO" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoFixedIoDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *AddressOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_FIXED_IO)); Descriptor = Rnode->Buffer; Descriptor->Io.DescriptorType = ACPI_RESOURCE_NAME_FIXED_IO | ASL_RDESC_FIXED_IO_SIZE; /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Base Address */ Descriptor->FixedIo.Address = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_BASEADDRESS, CurrentByteOffset + ASL_RESDESC_OFFSET (FixedIo.Address)); AddressOp = InitializerOp; break; case 1: /* Length */ Descriptor->FixedIo.AddressLength = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (FixedIo.AddressLength)); break; case 2: /* Name */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Error checks */ if (Descriptor->FixedIo.Address > 0x03FF) { AslError (ASL_WARNING, ASL_MSG_ISA_ADDRESS, AddressOp, NULL); } return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoIoDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a short "IO" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoIoDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ACPI_PARSE_OBJECT *AlignOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_IO)); Descriptor = Rnode->Buffer; Descriptor->Io.DescriptorType = ACPI_RESOURCE_NAME_IO | ASL_RDESC_IO_SIZE; /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Decode size */ RsSetFlagBits (&Descriptor->Io.Flags, InitializerOp, 0, 1); RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE, CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Flags), 0); break; case 1: /* Min Address */ Descriptor->Io.Minimum = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Minimum)); MinOp = InitializerOp; break; case 2: /* Max Address */ Descriptor->Io.Maximum = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Maximum)); MaxOp = InitializerOp; break; case 3: /* Alignment */ Descriptor->Io.Alignment = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_ALIGNMENT, CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Alignment)); AlignOp = InitializerOp; break; case 4: /* Length */ Descriptor->Io.AddressLength = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (Io.AddressLength)); LengthOp = InitializerOp; break; case 5: /* Name */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Align values */ RsSmallAddressCheck (ACPI_RESOURCE_NAME_IO, Descriptor->Io.Minimum, Descriptor->Io.Maximum, Descriptor->Io.AddressLength, Descriptor->Io.Alignment, MinOp, MaxOp, LengthOp, AlignOp, Info->DescriptorTypeOp); return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoIrqDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a short "IRQ" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoIrqDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; UINT32 Interrupts = 0; UINT16 IrqMask = 0; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_IRQ)); /* Length = 3 (with flag byte) */ Descriptor = Rnode->Buffer; Descriptor->Irq.DescriptorType = ACPI_RESOURCE_NAME_IRQ | (ASL_RDESC_IRQ_SIZE + 0x01); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Interrupt Type (or Mode - edge/level) */ RsSetFlagBits (&Descriptor->Irq.Flags, InitializerOp, 0, 1); RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.Flags), 0); break; case 1: /* Interrupt Level (or Polarity - Active high/low) */ RsSetFlagBits (&Descriptor->Irq.Flags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTLEVEL, CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.Flags), 3); break; case 2: /* Share Type - Default: exclusive (0) */ RsSetFlagBits (&Descriptor->Irq.Flags, InitializerOp, 4, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE, CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.Flags), 4); break; case 3: /* Name */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: /* All IRQ bytes are handled here, after the flags and name */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { /* Up to 16 interrupts can be specified in the list */ Interrupts++; if (Interrupts > 16) { AslError (ASL_ERROR, ASL_MSG_INTERRUPT_LIST, InitializerOp, NULL); return (Rnode); } /* Only interrupts 0-15 are allowed (mask is 16 bits) */ if (InitializerOp->Asl.Value.Integer > 15) { AslError (ASL_ERROR, ASL_MSG_INTERRUPT_NUMBER, InitializerOp, NULL); } else { IrqMask |= (1 << (UINT8) InitializerOp->Asl.Value.Integer); } } /* Case 4: First IRQ value in list */ if (i == 4) { /* Check now for duplicates in list */ RsCheckListForDuplicates (InitializerOp); /* Create a named field at the start of the list */ RsCreateWordField (InitializerOp, ACPI_RESTAG_INTERRUPT, CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.IrqMask)); } break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Now we can set the channel mask */ Descriptor->Irq.IrqMask = IrqMask; return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoIrqNoFlagsDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a short "IRQNoFlags" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoIrqNoFlagsDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; UINT16 IrqMask = 0; UINT32 Interrupts = 0; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_IRQ_NOFLAGS)); Descriptor = Rnode->Buffer; Descriptor->Irq.DescriptorType = ACPI_RESOURCE_NAME_IRQ | ASL_RDESC_IRQ_SIZE; /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Name */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: /* IRQ bytes are handled here, after the flags and name */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { /* Up to 16 interrupts can be specified in the list */ Interrupts++; if (Interrupts > 16) { AslError (ASL_ERROR, ASL_MSG_INTERRUPT_LIST, InitializerOp, NULL); return (Rnode); } /* Only interrupts 0-15 are allowed (mask is 16 bits) */ if (InitializerOp->Asl.Value.Integer > 15) { AslError (ASL_ERROR, ASL_MSG_INTERRUPT_NUMBER, InitializerOp, NULL); } else { IrqMask |= (1 << ((UINT8) InitializerOp->Asl.Value.Integer)); } } /* Case 1: First IRQ value in list */ if (i == 1) { /* Check now for duplicates in list */ RsCheckListForDuplicates (InitializerOp); /* Create a named field at the start of the list */ RsCreateWordField (InitializerOp, ACPI_RESTAG_INTERRUPT, CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.IrqMask)); } break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Now we can set the interrupt mask */ Descriptor->Irq.IrqMask = IrqMask; return (Rnode); } src/acpica/source/compiler/aslrestype2.c000066400000000000000000000517161465205512700206410ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslrestype2 - Miscellaneous Large resource descriptors * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "amlcode.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslrestype2") /* * This module contains miscellaneous large resource descriptors: * * Register * Interrupt * VendorLong */ /******************************************************************************* * * FUNCTION: RsDoGeneralRegisterDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "Register" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoGeneralRegisterDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_GENERIC_REGISTER)); Descriptor = Rnode->Buffer; Descriptor->GenericReg.DescriptorType = ACPI_RESOURCE_NAME_GENERIC_REGISTER; Descriptor->GenericReg.ResourceLength = 12; /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Address space */ Descriptor->GenericReg.AddressSpaceId = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_ADDRESSSPACE, CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.AddressSpaceId)); break; case 1: /* Register Bit Width */ Descriptor->GenericReg.BitWidth = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_REGISTERBITWIDTH, CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.BitWidth)); break; case 2: /* Register Bit Offset */ Descriptor->GenericReg.BitOffset = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_REGISTERBITOFFSET, CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.BitOffset)); break; case 3: /* Register Address */ Descriptor->GenericReg.Address = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_ADDRESS, CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.Address)); break; case 4: /* Access Size (ACPI 3.0) */ Descriptor->GenericReg.AccessSize = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_ACCESSSIZE, CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.AccessSize)); if (Descriptor->GenericReg.AddressSpaceId == ACPI_ADR_SPACE_PLATFORM_COMM) { break; } if (Descriptor->GenericReg.AccessSize > AML_FIELD_ACCESS_QWORD) { AslError (ASL_ERROR, ASL_MSG_INVALID_ACCESS_SIZE, InitializerOp, NULL); } break; case 5: /* ResourceTag (ACPI 3.0b) */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoInterruptDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "Interrupt" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoInterruptDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; AML_RESOURCE *Rover = NULL; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; UINT16 StringLength = 0; UINT32 OptionIndex = 0; UINT32 CurrentByteOffset; UINT32 i; BOOLEAN HasResSourceIndex = FALSE; UINT8 ResSourceIndex = 0; UINT8 *ResSourceString = NULL; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; StringLength = RsGetStringDataLength (InitializerOp); /* Count the interrupt numbers */ for (i = 0; InitializerOp; i++) { InitializerOp = ASL_GET_PEER_NODE (InitializerOp); if (i <= 6) { if (i == 3 && InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { /* * ResourceSourceIndex was specified, always make room for * it, even if the ResourceSource was omitted. */ OptionIndex++; } continue; } OptionIndex += 4; } InitializerOp = Info->DescriptorTypeOp->Asl.Child; Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_EXTENDED_IRQ) + 1 + OptionIndex + StringLength); Descriptor = Rnode->Buffer; Descriptor->ExtendedIrq.DescriptorType = ACPI_RESOURCE_NAME_EXTENDED_IRQ; /* * Initial descriptor length -- may be enlarged if there are * optional fields present */ Descriptor->ExtendedIrq.ResourceLength = 2; /* Flags and table length byte */ Descriptor->ExtendedIrq.InterruptCount = 0; Rover = ACPI_CAST_PTR (AML_RESOURCE, (&(Descriptor->ExtendedIrq.Interrupts[0]))); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Resource Usage (Default: consumer (1) */ RsSetFlagBits (&Descriptor->ExtendedIrq.Flags, InitializerOp, 0, 1); break; case 1: /* Interrupt Type (or Mode - edge/level) */ RsSetFlagBits (&Descriptor->ExtendedIrq.Flags, InitializerOp, 1, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtendedIrq.Flags), 1); break; case 2: /* Interrupt Level (or Polarity - Active high/low) */ RsSetFlagBits (&Descriptor->ExtendedIrq.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTLEVEL, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtendedIrq.Flags), 2); break; case 3: /* Share Type - Default: exclusive (0) */ RsSetFlagBits (&Descriptor->ExtendedIrq.Flags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtendedIrq.Flags), 3); break; case 4: /* ResSourceIndex [Optional Field - BYTE] */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { HasResSourceIndex = TRUE; ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer; } break; case 5: /* ResSource [Optional Field - STRING] */ if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) && (InitializerOp->Asl.Value.String)) { if (StringLength) { ResSourceString = (UINT8 *) InitializerOp->Asl.Value.String; } /* ResourceSourceIndex must also be valid */ if (!HasResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX, InitializerOp, NULL); } } #if 0 /* * Not a valid ResourceSource, ResourceSourceIndex must also * be invalid */ else if (HasResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE, InitializerOp, NULL); } #endif break; case 6: /* ResourceTag */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: /* * Interrupt Numbers come through here, repeatedly */ /* Maximum 255 interrupts allowed for this descriptor */ if (Descriptor->ExtendedIrq.InterruptCount == 255) { AslError (ASL_ERROR, ASL_MSG_EX_INTERRUPT_LIST, InitializerOp, NULL); return (Rnode); } /* Each interrupt number must be a 32-bit value */ if (InitializerOp->Asl.Value.Integer > ACPI_UINT32_MAX) { AslError (ASL_ERROR, ASL_MSG_EX_INTERRUPT_NUMBER, InitializerOp, NULL); } /* Save the integer and move pointer to the next one */ Rover->DwordItem = (UINT32) InitializerOp->Asl.Value.Integer; Rover = ACPI_ADD_PTR (AML_RESOURCE, &(Rover->DwordItem), 4); Descriptor->ExtendedIrq.InterruptCount++; Descriptor->ExtendedIrq.ResourceLength += 4; /* Case 7: First interrupt number in list */ if (i == 7) { if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { /* Must be at least one interrupt */ AslError (ASL_ERROR, ASL_MSG_EX_INTERRUPT_LIST_MIN, InitializerOp, NULL); } /* Check now for duplicates in list */ RsCheckListForDuplicates (InitializerOp); /* Create a named field at the start of the list */ RsCreateDwordField (InitializerOp, ACPI_RESTAG_INTERRUPT, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtendedIrq.Interrupts[0])); } } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Add optional ResSourceIndex if present */ if (HasResSourceIndex) { Rover->ByteItem = ResSourceIndex; Rover = ACPI_ADD_PTR (AML_RESOURCE, &(Rover->ByteItem), 1); Descriptor->ExtendedIrq.ResourceLength += 1; } /* Add optional ResSource string if present */ if (StringLength && ResSourceString) { strcpy ((char *) Rover, (char *) ResSourceString); Descriptor->ExtendedIrq.ResourceLength = (UINT16) (Descriptor->ExtendedIrq.ResourceLength + StringLength); } Rnode->BufferLength = (ASL_RESDESC_OFFSET (ExtendedIrq.Interrupts[0]) - ASL_RESDESC_OFFSET (ExtendedIrq.DescriptorType)) + OptionIndex + StringLength; return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoVendorLargeDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "VendorLong" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoVendorLargeDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; UINT8 *VendorData; UINT32 i; /* Count the number of data bytes */ InitializerOp = Info->DescriptorTypeOp->Asl.Child; InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); for (i = 0; InitializerOp; i++) { if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { break; } InitializerOp = InitializerOp->Asl.Next; } InitializerOp = Info->DescriptorTypeOp->Asl.Child; InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_VENDOR_LARGE) + i); Descriptor = Rnode->Buffer; Descriptor->VendorLarge.DescriptorType = ACPI_RESOURCE_NAME_VENDOR_LARGE; Descriptor->VendorLarge.ResourceLength = (UINT16) i; /* Point to end-of-descriptor for vendor data */ VendorData = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_LARGE_HEADER); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { break; } VendorData[i] = (UINT8) InitializerOp->Asl.Value.Integer; InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } return (Rnode); } src/acpica/source/compiler/aslrestype2d.c000066400000000000000000000766561465205512700210170ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslrestype2d - Large DWord address resource descriptors * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslrestype2d") /* * This module contains the Dword (32-bit) address space descriptors: * * DwordIO * DwordMemory * DwordSpace */ /******************************************************************************* * * FUNCTION: RsDoDwordIoDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "DwordIO" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoDwordIoDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ACPI_PARSE_OBJECT *GranOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT16 StringLength = 0; UINT32 OptionIndex = 0; UINT8 *OptionalFields; UINT32 CurrentByteOffset; UINT32 i; BOOLEAN ResSourceIndex = FALSE; InitializerOp = Info->DescriptorTypeOp->Asl.Child; StringLength = RsGetStringDataLength (InitializerOp); CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode ( sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength); Descriptor = Rnode->Buffer; Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32; Descriptor->Address32.ResourceType = ACPI_ADDRESS_TYPE_IO_RANGE; /* * Initial descriptor length -- may be enlarged if there are * optional fields present */ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32); Descriptor->Address32.ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS32) - sizeof (AML_RESOURCE_LARGE_HEADER)); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Resource Usage */ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 0, 1); break; case 1: /* MinType */ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 2); break; case 2: /* MaxType */ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 3); break; case 3: /* DecodeType */ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 1, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 1); break; case 4: /* Range Type */ RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 0, 3); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_RANGETYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 0, 2); break; case 5: /* Address Granularity */ Descriptor->Address32.Granularity = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity)); GranOp = InitializerOp; break; case 6: /* Address Min */ Descriptor->Address32.Minimum = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum)); MinOp = InitializerOp; break; case 7: /* Address Max */ Descriptor->Address32.Maximum = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum)); MaxOp = InitializerOp; break; case 8: /* Translation Offset */ Descriptor->Address32.TranslationOffset = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset)); break; case 9: /* Address Length */ Descriptor->Address32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength)); LengthOp = InitializerOp; break; case 10: /* ResSourceIndex [Optional Field - BYTE] */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { /* Found a valid ResourceSourceIndex */ OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer; OptionIndex++; Descriptor->Address32.ResourceLength++; ResSourceIndex = TRUE; } break; case 11: /* ResSource [Optional Field - STRING] */ if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) && (InitializerOp->Asl.Value.String)) { if (StringLength) { /* Found a valid ResourceSource */ Descriptor->Address32.ResourceLength = (UINT16) (Descriptor->Address32.ResourceLength + StringLength); strcpy ((char *) &OptionalFields[OptionIndex], InitializerOp->Asl.Value.String); /* ResourceSourceIndex must also be valid */ if (!ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX, InitializerOp, NULL); } } } #if 0 /* * Not a valid ResourceSource, ResourceSourceIndex must also * be invalid */ else if (ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE, InitializerOp, NULL); } #endif break; case 12: /* ResourceTag */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 13: /* Type */ RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 4, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 4); break; case 14: /* Translation Type */ RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 5, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_TRANSTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 5); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( (UINT64) Descriptor->Address32.Minimum, (UINT64) Descriptor->Address32.Maximum, (UINT64) Descriptor->Address32.AddressLength, (UINT64) Descriptor->Address32.Granularity, Descriptor->Address32.Flags, MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) + OptionIndex + StringLength; return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoDwordMemoryDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "DwordMemory" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoDwordMemoryDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ACPI_PARSE_OBJECT *GranOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT8 *OptionalFields; UINT16 StringLength = 0; UINT32 OptionIndex = 0; UINT32 CurrentByteOffset; UINT32 i; BOOLEAN ResSourceIndex = FALSE; InitializerOp = Info->DescriptorTypeOp->Asl.Child; StringLength = RsGetStringDataLength (InitializerOp); CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode ( sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength); Descriptor = Rnode->Buffer; Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32; Descriptor->Address32.ResourceType = ACPI_ADDRESS_TYPE_MEMORY_RANGE; /* * Initial descriptor length -- may be enlarged if there are * optional fields present */ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32); Descriptor->Address32.ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS32) - sizeof (AML_RESOURCE_LARGE_HEADER)); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Resource Usage */ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 0, 1); break; case 1: /* DecodeType */ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 1, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 1); break; case 2: /* MinType */ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 2); break; case 3: /* MaxType */ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 3); break; case 4: /* Memory Type */ RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 1, 0); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 1, 2); break; case 5: /* Read/Write Type */ RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 0, 1); RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 0); break; case 6: /* Address Granularity */ Descriptor->Address32.Granularity = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity)); GranOp = InitializerOp; break; case 7: /* Min Address */ Descriptor->Address32.Minimum = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum)); MinOp = InitializerOp; break; case 8: /* Max Address */ Descriptor->Address32.Maximum = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum)); MaxOp = InitializerOp; break; case 9: /* Translation Offset */ Descriptor->Address32.TranslationOffset = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset)); break; case 10: /* Address Length */ Descriptor->Address32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength)); LengthOp = InitializerOp; break; case 11: /* ResSourceIndex [Optional Field - BYTE] */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer; OptionIndex++; Descriptor->Address32.ResourceLength++; ResSourceIndex = TRUE; } break; case 12: /* ResSource [Optional Field - STRING] */ if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) && (InitializerOp->Asl.Value.String)) { if (StringLength) { Descriptor->Address32.ResourceLength = (UINT16) (Descriptor->Address32.ResourceLength + StringLength); strcpy ((char *) &OptionalFields[OptionIndex], InitializerOp->Asl.Value.String); /* ResourceSourceIndex must also be valid */ if (!ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX, InitializerOp, NULL); } } } #if 0 /* * Not a valid ResourceSource, ResourceSourceIndex must also * be invalid */ else if (ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE, InitializerOp, NULL); } #endif break; case 13: /* ResourceTag */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 14: /* Address Range */ RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 3, 0); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMATTRIBUTES, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 3, 2); break; case 15: /* Type */ RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 5, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 5); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( (UINT64) Descriptor->Address32.Minimum, (UINT64) Descriptor->Address32.Maximum, (UINT64) Descriptor->Address32.AddressLength, (UINT64) Descriptor->Address32.Granularity, Descriptor->Address32.Flags, MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) + OptionIndex + StringLength; return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoDwordSpaceDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "DwordSpace" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoDwordSpaceDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ACPI_PARSE_OBJECT *GranOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT8 *OptionalFields; UINT16 StringLength = 0; UINT32 OptionIndex = 0; UINT32 CurrentByteOffset; UINT32 i; BOOLEAN ResSourceIndex = FALSE; InitializerOp = Info->DescriptorTypeOp->Asl.Child; StringLength = RsGetStringDataLength (InitializerOp); CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode ( sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength); Descriptor = Rnode->Buffer; Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32; /* * Initial descriptor length -- may be enlarged if there are * optional fields present */ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32); Descriptor->Address32.ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS32) - sizeof (AML_RESOURCE_LARGE_HEADER)); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Resource Type */ Descriptor->Address32.ResourceType = (UINT8) InitializerOp->Asl.Value.Integer; break; case 1: /* Resource Usage */ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 0, 1); break; case 2: /* DecodeType */ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 1, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 1); break; case 3: /* MinType */ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 2); break; case 4: /* MaxType */ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 3); break; case 5: /* Type-Specific flags */ Descriptor->Address32.SpecificFlags = (UINT8) InitializerOp->Asl.Value.Integer; break; case 6: /* Address Granularity */ Descriptor->Address32.Granularity = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity)); GranOp = InitializerOp; break; case 7: /* Min Address */ Descriptor->Address32.Minimum = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum)); MinOp = InitializerOp; break; case 8: /* Max Address */ Descriptor->Address32.Maximum = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum)); MaxOp = InitializerOp; break; case 9: /* Translation Offset */ Descriptor->Address32.TranslationOffset = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset)); break; case 10: /* Address Length */ Descriptor->Address32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength)); LengthOp = InitializerOp; break; case 11: /* ResSourceIndex [Optional Field - BYTE] */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer; OptionIndex++; Descriptor->Address32.ResourceLength++; ResSourceIndex = TRUE; } break; case 12: /* ResSource [Optional Field - STRING] */ if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) && (InitializerOp->Asl.Value.String)) { if (StringLength) { Descriptor->Address32.ResourceLength = (UINT16) (Descriptor->Address32.ResourceLength + StringLength); strcpy ((char *) &OptionalFields[OptionIndex], InitializerOp->Asl.Value.String); /* ResourceSourceIndex must also be valid */ if (!ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX, InitializerOp, NULL); } } } #if 0 /* * Not a valid ResourceSource, ResourceSourceIndex must also * be invalid */ else if (ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE, InitializerOp, NULL); } #endif break; case 13: /* ResourceTag */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( (UINT64) Descriptor->Address32.Minimum, (UINT64) Descriptor->Address32.Maximum, (UINT64) Descriptor->Address32.AddressLength, (UINT64) Descriptor->Address32.Granularity, Descriptor->Address32.Flags, MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) + OptionIndex + StringLength; return (Rnode); } src/acpica/source/compiler/aslrestype2e.c000066400000000000000000000654301465205512700210040ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslrestype2e - Large Extended address resource descriptors * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslrestype2e") /* * This module contains the Extended (64-bit) address space descriptors: * * ExtendedIO * ExtendedMemory * ExtendedSpace */ /******************************************************************************* * * FUNCTION: RsDoExtendedIoDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "ExtendedIO" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoExtendedIoDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ACPI_PARSE_OBJECT *GranOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT16 StringLength = 0; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; StringLength = RsGetStringDataLength (InitializerOp); CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode ( sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + 1 + StringLength); Descriptor = Rnode->Buffer; Descriptor->ExtAddress64.DescriptorType = ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64; Descriptor->ExtAddress64.ResourceType = ACPI_ADDRESS_TYPE_IO_RANGE; Descriptor->ExtAddress64.RevisionID = AML_RESOURCE_EXTENDED_ADDRESS_REVISION; Descriptor->ExtAddress64.ResourceLength = (UINT16) (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) - sizeof (AML_RESOURCE_LARGE_HEADER)); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Resource Usage */ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 0, 1); break; case 1: /* MinType */ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 2); break; case 2: /* MaxType */ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 3); break; case 3: /* DecodeType */ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 1, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 1); break; case 4: /* Range Type */ RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 0, 3); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_RANGETYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 0, 2); break; case 5: /* Address Granularity */ Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity)); GranOp = InitializerOp; break; case 6: /* Address Min */ Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum)); MinOp = InitializerOp; break; case 7: /* Address Max */ Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum)); MaxOp = InitializerOp; break; case 8: /* Translation Offset */ Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset)); break; case 9: /* Address Length */ Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength)); LengthOp = InitializerOp; break; case 10: /* Type-Specific Attributes */ Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific)); break; case 11: /* ResourceTag */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 12: /* Type */ RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 4, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 4); break; case 13: /* Translation Type */ RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 5, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_TRANSTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 5); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( Descriptor->ExtAddress64.Minimum, Descriptor->ExtAddress64.Maximum, Descriptor->ExtAddress64.AddressLength, Descriptor->ExtAddress64.Granularity, Descriptor->ExtAddress64.Flags, MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength; return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoExtendedMemoryDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "ExtendedMemory" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoExtendedMemoryDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ACPI_PARSE_OBJECT *GranOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT16 StringLength = 0; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; StringLength = RsGetStringDataLength (InitializerOp); CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode ( sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + 1 + StringLength); Descriptor = Rnode->Buffer; Descriptor->ExtAddress64.DescriptorType = ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64; Descriptor->ExtAddress64.ResourceType = ACPI_ADDRESS_TYPE_MEMORY_RANGE; Descriptor->ExtAddress64.RevisionID = AML_RESOURCE_EXTENDED_ADDRESS_REVISION; Descriptor->ExtAddress64.ResourceLength = (UINT16) (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) - sizeof (AML_RESOURCE_LARGE_HEADER)); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Resource Usage */ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 0, 1); break; case 1: /* DecodeType */ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 1, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 1); break; case 2: /* MinType */ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 2); break; case 3: /* MaxType */ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 3); break; case 4: /* Memory Type */ RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 1, 0); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 1, 2); break; case 5: /* Read/Write Type */ RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 0, 1); RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 0); break; case 6: /* Address Granularity */ Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity)); GranOp = InitializerOp; break; case 7: /* Min Address */ Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum)); MinOp = InitializerOp; break; case 8: /* Max Address */ Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum)); MaxOp = InitializerOp; break; case 9: /* Translation Offset */ Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset)); break; case 10: /* Address Length */ Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength)); LengthOp = InitializerOp; break; case 11: /* Type-Specific Attributes */ Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific)); break; case 12: /* ResourceTag */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 13: /* Address Range */ RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 3, 0); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMATTRIBUTES, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 3, 2); break; case 14: /* Type */ RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 5, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 5); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( Descriptor->ExtAddress64.Minimum, Descriptor->ExtAddress64.Maximum, Descriptor->ExtAddress64.AddressLength, Descriptor->ExtAddress64.Granularity, Descriptor->ExtAddress64.Flags, MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength; return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoExtendedSpaceDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "ExtendedSpace" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoExtendedSpaceDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ACPI_PARSE_OBJECT *GranOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT16 StringLength = 0; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; StringLength = RsGetStringDataLength (InitializerOp); CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode ( sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + 1 + StringLength); Descriptor = Rnode->Buffer; Descriptor->ExtAddress64.DescriptorType = ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64; Descriptor->ExtAddress64.RevisionID = AML_RESOURCE_EXTENDED_ADDRESS_REVISION; Descriptor->ExtAddress64.ResourceLength = (UINT16) (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) - sizeof (AML_RESOURCE_LARGE_HEADER)); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Resource Type */ Descriptor->ExtAddress64.ResourceType = (UINT8) InitializerOp->Asl.Value.Integer; break; case 1: /* Resource Usage */ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 0, 1); break; case 2: /* DecodeType */ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 1, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 1); break; case 3: /* MinType */ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 2); break; case 4: /* MaxType */ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 3); break; case 5: /* Type-Specific flags */ Descriptor->ExtAddress64.SpecificFlags = (UINT8) InitializerOp->Asl.Value.Integer; break; case 6: /* Address Granularity */ Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity)); GranOp = InitializerOp; break; case 7: /* Min Address */ Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum)); MinOp = InitializerOp; break; case 8: /* Max Address */ Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum)); MaxOp = InitializerOp; break; case 9: /* Translation Offset */ Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset)); break; case 10: /* Address Length */ Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength)); LengthOp = InitializerOp; break; case 11: /* Type-Specific Attributes */ Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES, CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific)); break; case 12: /* ResourceTag */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( Descriptor->ExtAddress64.Minimum, Descriptor->ExtAddress64.Maximum, Descriptor->ExtAddress64.AddressLength, Descriptor->ExtAddress64.Granularity, Descriptor->ExtAddress64.Flags, MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength; return (Rnode); } src/acpica/source/compiler/aslrestype2q.c000066400000000000000000000754761465205512700210330ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslrestype2q - Large QWord address resource descriptors * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslrestype2q") /* * This module contains the QWord (64-bit) address space descriptors: * * QWordIO * QWordMemory * QWordSpace */ /******************************************************************************* * * FUNCTION: RsDoQwordIoDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "QwordIO" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoQwordIoDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ACPI_PARSE_OBJECT *GranOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT8 *OptionalFields; UINT16 StringLength = 0; UINT32 OptionIndex = 0; UINT32 CurrentByteOffset; UINT32 i; BOOLEAN ResSourceIndex = FALSE; InitializerOp = Info->DescriptorTypeOp->Asl.Child; StringLength = RsGetStringDataLength (InitializerOp); CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode ( sizeof (AML_RESOURCE_ADDRESS64) + 1 + StringLength); Descriptor = Rnode->Buffer; Descriptor->Address64.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS64; Descriptor->Address64.ResourceType = ACPI_ADDRESS_TYPE_IO_RANGE; /* * Initial descriptor length -- may be enlarged if there are * optional fields present */ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64); Descriptor->Address64.ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS64) - sizeof (AML_RESOURCE_LARGE_HEADER)); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Resource Usage */ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 0, 1); break; case 1: /* MinType */ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 2); break; case 2: /* MaxType */ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 3); break; case 3: /* DecodeType */ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 1, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 1); break; case 4: /* Range Type */ RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 0, 3); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_RANGETYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 0, 2); break; case 5: /* Address Granularity */ Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity)); GranOp = InitializerOp; break; case 6: /* Address Min */ Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum)); MinOp = InitializerOp; break; case 7: /* Address Max */ Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum)); MaxOp = InitializerOp; break; case 8: /* Translation Offset */ Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset)); break; case 9: /* Address Length */ Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength)); LengthOp = InitializerOp; break; case 10: /* ResSourceIndex [Optional Field - BYTE] */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer; OptionIndex++; Descriptor->Address64.ResourceLength++; ResSourceIndex = TRUE; } break; case 11: /* ResSource [Optional Field - STRING] */ if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) && (InitializerOp->Asl.Value.String)) { if (StringLength) { Descriptor->Address64.ResourceLength = (UINT16) (Descriptor->Address64.ResourceLength + StringLength); strcpy ((char *) &OptionalFields[OptionIndex], InitializerOp->Asl.Value.String); /* ResourceSourceIndex must also be valid */ if (!ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX, InitializerOp, NULL); } } } #if 0 /* * Not a valid ResourceSource, ResourceSourceIndex must also * be invalid */ else if (ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE, InitializerOp, NULL); } #endif break; case 12: /* ResourceTag */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 13: /* Type */ RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 4, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 4); break; case 14: /* Translation Type */ RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 5, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_TRANSTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 5); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( Descriptor->Address64.Minimum, Descriptor->Address64.Maximum, Descriptor->Address64.AddressLength, Descriptor->Address64.Granularity, Descriptor->Address64.Flags, MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) + OptionIndex + StringLength; return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoQwordMemoryDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "QwordMemory" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoQwordMemoryDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ACPI_PARSE_OBJECT *GranOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT8 *OptionalFields; UINT16 StringLength = 0; UINT32 OptionIndex = 0; UINT32 CurrentByteOffset; UINT32 i; BOOLEAN ResSourceIndex = FALSE; InitializerOp = Info->DescriptorTypeOp->Asl.Child; StringLength = RsGetStringDataLength (InitializerOp); CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode ( sizeof (AML_RESOURCE_ADDRESS64) + 1 + StringLength); Descriptor = Rnode->Buffer; Descriptor->Address64.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS64; Descriptor->Address64.ResourceType = ACPI_ADDRESS_TYPE_MEMORY_RANGE; /* * Initial descriptor length -- may be enlarged if there are * optional fields present */ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64); Descriptor->Address64.ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS64) - sizeof (AML_RESOURCE_LARGE_HEADER)); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Resource Usage */ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 0, 1); break; case 1: /* DecodeType */ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 1, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 1); break; case 2: /* MinType */ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 2); break; case 3: /* MaxType */ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 3); break; case 4: /* Memory Type */ RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 1, 0); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 1, 2); break; case 5: /* Read/Write Type */ RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 0, 1); RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 0); break; case 6: /* Address Granularity */ Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity)); GranOp = InitializerOp; break; case 7: /* Min Address */ Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum)); MinOp = InitializerOp; break; case 8: /* Max Address */ Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum)); MaxOp = InitializerOp; break; case 9: /* Translation Offset */ Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset)); break; case 10: /* Address Length */ Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength)); LengthOp = InitializerOp; break; case 11: /* ResSourceIndex [Optional Field - BYTE] */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer; OptionIndex++; Descriptor->Address64.ResourceLength++; ResSourceIndex = TRUE; } break; case 12: /* ResSource [Optional Field - STRING] */ if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) && (InitializerOp->Asl.Value.String)) { if (StringLength) { Descriptor->Address64.ResourceLength = (UINT16) (Descriptor->Address64.ResourceLength + StringLength); strcpy ((char *) &OptionalFields[OptionIndex], InitializerOp->Asl.Value.String); /* ResourceSourceIndex must also be valid */ if (!ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX, InitializerOp, NULL); } } } #if 0 /* * Not a valid ResourceSource, ResourceSourceIndex must also * be invalid */ else if (ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE, InitializerOp, NULL); } #endif break; case 13: /* ResourceTag */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 14: /* Address Range */ RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 3, 0); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMATTRIBUTES, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 3, 2); break; case 15: /* Type */ RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 5, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 5); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( Descriptor->Address64.Minimum, Descriptor->Address64.Maximum, Descriptor->Address64.AddressLength, Descriptor->Address64.Granularity, Descriptor->Address64.Flags, MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) + OptionIndex + StringLength; return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoQwordSpaceDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "QwordSpace" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoQwordSpaceDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ACPI_PARSE_OBJECT *GranOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT8 *OptionalFields; UINT16 StringLength = 0; UINT32 OptionIndex = 0; UINT32 CurrentByteOffset; UINT32 i; BOOLEAN ResSourceIndex = FALSE; InitializerOp = Info->DescriptorTypeOp->Asl.Child; StringLength = RsGetStringDataLength (InitializerOp); CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode ( sizeof (AML_RESOURCE_ADDRESS64) + 1 + StringLength); Descriptor = Rnode->Buffer; Descriptor->Address64.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS64; /* * Initial descriptor length -- may be enlarged if there are * optional fields present */ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64); Descriptor->Address64.ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS64) - sizeof (AML_RESOURCE_LARGE_HEADER)); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Resource Type */ Descriptor->Address64.ResourceType = (UINT8) InitializerOp->Asl.Value.Integer; break; case 1: /* Resource Usage */ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 0, 1); break; case 2: /* DecodeType */ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 1, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 1); break; case 3: /* MinType */ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 2); break; case 4: /* MaxType */ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 3); break; case 5: /* Type-Specific flags */ Descriptor->Address64.SpecificFlags = (UINT8) InitializerOp->Asl.Value.Integer; break; case 6: /* Address Granularity */ Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity)); GranOp = InitializerOp; break; case 7: /* Min Address */ Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum)); MinOp = InitializerOp; break; case 8: /* Max Address */ Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum)); MaxOp = InitializerOp; break; case 9: /* Translation Offset */ Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset)); break; case 10: /* Address Length */ Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer; RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength)); LengthOp = InitializerOp; break; case 11: /* ResSourceIndex [Optional Field - BYTE] */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer; OptionIndex++; Descriptor->Address64.ResourceLength++; ResSourceIndex = TRUE; } break; case 12: /* ResSource [Optional Field - STRING] */ if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) && (InitializerOp->Asl.Value.String)) { if (StringLength) { Descriptor->Address64.ResourceLength = (UINT16) (Descriptor->Address64.ResourceLength + StringLength); strcpy ((char *) &OptionalFields[OptionIndex], InitializerOp->Asl.Value.String); /* ResourceSourceIndex must also be valid */ if (!ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX, InitializerOp, NULL); } } } #if 0 /* * Not a valid ResourceSource, ResourceSourceIndex must also * be invalid */ else if (ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE, InitializerOp, NULL); } #endif break; case 13: /* ResourceTag */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( Descriptor->Address64.Minimum, Descriptor->Address64.Maximum, Descriptor->Address64.AddressLength, Descriptor->Address64.Granularity, Descriptor->Address64.Flags, MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) + OptionIndex + StringLength; return (Rnode); } src/acpica/source/compiler/aslrestype2s.c000066400000000000000000002525761465205512700210330ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslrestype2s - Serial Large resource descriptors * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "amlcode.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslrestype2s") static UINT16 RsGetBufferDataLength ( ACPI_PARSE_OBJECT *InitializerOp); static UINT16 RsGetInterruptDataLength ( ACPI_PARSE_OBJECT *InitializerOp, UINT32 StartIndex); static BOOLEAN RsGetVendorData ( ACPI_PARSE_OBJECT *InitializerOp, UINT8 *VendorData, ACPI_SIZE DescriptorOffset); static UINT16 RsGetStringDataLengthAt ( ACPI_PARSE_OBJECT *InitializerOp, UINT32 StartIndex); /* * This module contains descriptors for serial buses and GPIO: * * GpioInt * GpioIo * I2cSerialBus * SpiSerialBus * UartSerialBus * PinFunction * PinConfig * PinGroup * PinGroupFunction * PinGroupConfig */ /******************************************************************************* * * FUNCTION: RsGetBufferDataLength * * PARAMETERS: InitializerOp - Current parse op, start of the resource * descriptor * * RETURN: Length of the data buffer * * DESCRIPTION: Get the length of a RawDataBuffer, used for vendor data. * ******************************************************************************/ static UINT16 RsGetBufferDataLength ( ACPI_PARSE_OBJECT *InitializerOp) { UINT16 ExtraDataSize = 0; ACPI_PARSE_OBJECT *DataList; /* Find the byte-initializer list */ while (InitializerOp) { if (InitializerOp->Asl.ParseOpcode == PARSEOP_DATABUFFER) { /* First child is the optional length (ignore it here) */ DataList = InitializerOp->Asl.Child; DataList = ASL_GET_PEER_NODE (DataList); /* Count the data items (each one is a byte of data) */ while (DataList) { ExtraDataSize++; DataList = ASL_GET_PEER_NODE (DataList); } return (ExtraDataSize); } InitializerOp = ASL_GET_PEER_NODE (InitializerOp); } return (ExtraDataSize); } /******************************************************************************* * * FUNCTION: RsGetInterruptDataLength * * PARAMETERS: InitializerOp - Current parse op, start of the resource * descriptor * StartIndex - Start index of interrupt/pin list * * RETURN: Length of the interrupt data list * * DESCRIPTION: Get the length of a list of interrupt DWORDs for the GPIO * descriptors. * ******************************************************************************/ static UINT16 RsGetInterruptDataLength ( ACPI_PARSE_OBJECT *InitializerOp, UINT32 StartIndex) { UINT16 InterruptLength; UINT32 i; /* Count the interrupt numbers */ InterruptLength = 0; for (i = 0; InitializerOp; i++) { InitializerOp = ASL_GET_PEER_NODE (InitializerOp); /* Interrupt list starts at offset StartIndex (Gpio descriptors) */ if (i >= StartIndex) { InterruptLength += 2; } } return (InterruptLength); } /******************************************************************************* * * FUNCTION: RsGetVendorData * * PARAMETERS: InitializerOp - Current parse op, start of the resource * descriptor. * VendorData - Where the vendor data is returned * DescriptorOffset - Where vendor data begins in descriptor * * RETURN: TRUE if valid vendor data was returned, FALSE otherwise. * * DESCRIPTION: Extract the vendor data and construct a vendor data buffer. * ******************************************************************************/ static BOOLEAN RsGetVendorData ( ACPI_PARSE_OBJECT *InitializerOp, UINT8 *VendorData, ACPI_SIZE DescriptorOffset) { ACPI_PARSE_OBJECT *BufferOp; UINT32 SpecifiedLength = ACPI_UINT32_MAX; UINT16 ActualLength = 0; /* Vendor Data field is always optional */ if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { return (FALSE); } BufferOp = InitializerOp->Asl.Child; if (!BufferOp) { AslError (ASL_ERROR, ASL_MSG_SYNTAX, InitializerOp, ""); return (FALSE); } /* First child is the optional buffer length (WORD) */ if (BufferOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { SpecifiedLength = (UINT16) BufferOp->Asl.Value.Integer; } /* Insert field tag _VEN */ RsCreateByteField (InitializerOp, ACPI_RESTAG_VENDORDATA, (UINT16) DescriptorOffset); /* Walk the list of buffer initializers (each is one byte) */ BufferOp = RsCompleteNodeAndGetNext (BufferOp); if (BufferOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { while (BufferOp) { *VendorData = (UINT8) BufferOp->Asl.Value.Integer; VendorData++; ActualLength++; BufferOp = RsCompleteNodeAndGetNext (BufferOp); } } /* Length validation. Buffer cannot be of zero length */ if ((SpecifiedLength == 0) || ((SpecifiedLength == ACPI_UINT32_MAX) && (ActualLength == 0))) { AslError (ASL_ERROR, ASL_MSG_BUFFER_LENGTH, InitializerOp, NULL); return (FALSE); } if (SpecifiedLength != ACPI_UINT32_MAX) { /* ActualLength > SpecifiedLength -> error */ if (ActualLength > SpecifiedLength) { AslError (ASL_ERROR, ASL_MSG_LIST_LENGTH_LONG, InitializerOp, NULL); return (FALSE); } /* ActualLength < SpecifiedLength -> remark */ else if (ActualLength < SpecifiedLength) { AslError (ASL_REMARK, ASL_MSG_LIST_LENGTH_SHORT, InitializerOp, NULL); return (FALSE); } } return (TRUE); } /******************************************************************************* * * FUNCTION: RsGetStringDataLengthAt * * PARAMETERS: InitializerOp - Start of a subtree of init nodes * StartIndex - Starting index of the string node * * RETURN: Valid string length if a string node is found at given * StartIndex or 0 otherwise. * * DESCRIPTION: In a list of peer nodes, find the first one at given index * that contains a string and return length. * ******************************************************************************/ static UINT16 RsGetStringDataLengthAt ( ACPI_PARSE_OBJECT *InitializerOp, UINT32 StartIndex) { UINT32 i; for (i = 0; InitializerOp; i++) { if (i == StartIndex && InitializerOp->Asl.ParseOpcode == PARSEOP_STRING_LITERAL) { return ((UINT16) (strlen (InitializerOp->Asl.Value.String) + 1)); } InitializerOp = ASL_GET_PEER_NODE (InitializerOp); } return (0); } /******************************************************************************* * * FUNCTION: RsDoGpioIntDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "GpioInt" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoGpioIntDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; char *ResourceSource = NULL; UINT8 *VendorData = NULL; UINT16 *InterruptList = NULL; UINT16 *PinList = NULL; UINT16 ResSourceLength; UINT16 VendorLength; UINT16 InterruptLength; UINT16 DescriptorSize; UINT32 CurrentByteOffset; UINT32 PinCount = 0; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; /* * Calculate lengths for fields that have variable length: * 1) Resource Source string * 2) Vendor Data buffer * 3) PIN (interrupt) list */ ResSourceLength = RsGetStringDataLength (InitializerOp); VendorLength = RsGetBufferDataLength (InitializerOp); InterruptLength = RsGetInterruptDataLength (InitializerOp, 10); DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_GPIO) + ResSourceLength + VendorLength + InterruptLength; /* Allocate the local resource node and initialize */ Rnode = RsAllocateResourceNode (DescriptorSize + sizeof (AML_RESOURCE_LARGE_HEADER)); Descriptor = Rnode->Buffer; Descriptor->Gpio.ResourceLength = DescriptorSize; Descriptor->Gpio.DescriptorType = ACPI_RESOURCE_NAME_GPIO; Descriptor->Gpio.RevisionId = AML_RESOURCE_GPIO_REVISION; Descriptor->Gpio.ConnectionType = AML_RESOURCE_GPIO_TYPE_INT; /* Build pointers to optional areas */ InterruptList = ACPI_ADD_PTR (UINT16, Descriptor, sizeof (AML_RESOURCE_GPIO)); PinList = InterruptList; ResourceSource = ACPI_ADD_PTR (char, InterruptList, InterruptLength); VendorData = ACPI_ADD_PTR (UINT8, ResourceSource, ResSourceLength); /* Setup offsets within the descriptor */ Descriptor->Gpio.PinTableOffset = (UINT16) ACPI_PTR_DIFF (InterruptList, Descriptor); Descriptor->Gpio.ResSourceOffset = (UINT16) ACPI_PTR_DIFF (ResourceSource, Descriptor); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Interrupt Mode - edge/level [Flag] (_MOD) */ RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 0, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE, CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 0); break; case 1: /* Interrupt Polarity - Active high/low [Flags] (_POL) */ RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 1, 0); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_POLARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 1, 2); break; case 2: /* Share Type - Default: exclusive (0) [Flags] (_SHR) */ RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 3, 0); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE, CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 3, 2); break; case 3: /* Pin Config [BYTE] (_PPI) */ Descriptor->Gpio.PinConfig = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_PINCONFIG, CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.PinConfig)); break; case 4: /* Debounce Timeout [WORD] (_DBT) */ Descriptor->Gpio.DebounceTimeout = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_DEBOUNCETIME, CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.DebounceTimeout)); break; case 5: /* ResSource [Optional Field - STRING] */ if (ResSourceLength) { /* Copy string to the descriptor */ strcpy (ResourceSource, InitializerOp->Asl.Value.String); } break; case 6: /* Resource Index */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { Descriptor->Gpio.ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer; } break; case 7: /* Resource Usage (consumer/producer) */ RsSetFlagBits16 (&Descriptor->Gpio.Flags, InitializerOp, 0, 1); break; case 8: /* Resource Tag (Descriptor Name) */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 9: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */ /* * Always set the VendorOffset even if there is no Vendor Data. * This field is required in order to calculate the length * of the ResourceSource at runtime. */ Descriptor->Gpio.VendorOffset = (UINT16) ACPI_PTR_DIFF (VendorData, Descriptor); if (RsGetVendorData (InitializerOp, VendorData, (CurrentByteOffset + Descriptor->Gpio.VendorOffset))) { Descriptor->Gpio.VendorLength = VendorLength; } break; default: /* * PINs come through here, repeatedly. Each PIN must be a WORD. * NOTE: there is no "length" field for this, so from ACPI spec: * The number of pins in the table can be calculated from: * PinCount = (Resource Source Name Offset - Pin Table Offset) / 2 * (implies resource source must immediately follow the pin list.) * Name: _PIN */ *InterruptList = (UINT16) InitializerOp->Asl.Value.Integer; InterruptList++; PinCount++; /* Case 10: First interrupt number in list */ if (i == 10) { if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { /* Must be at least one interrupt */ AslError (ASL_ERROR, ASL_MSG_EX_INTERRUPT_LIST_MIN, InitializerOp, NULL); } /* Check now for duplicates in list */ RsCheckListForDuplicates (InitializerOp); /* Create a named field at the start of the list */ RsCreateWordField (InitializerOp, ACPI_RESTAG_PIN, CurrentByteOffset + Descriptor->Gpio.PinTableOffset); } break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } MpSaveGpioInfo (Info->MappingOp, Descriptor, PinCount, PinList, ResourceSource); return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoGpioIoDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "GpioIo" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoGpioIoDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; char *ResourceSource = NULL; UINT8 *VendorData = NULL; UINT16 *InterruptList = NULL; UINT16 *PinList = NULL; UINT16 ResSourceLength; UINT16 VendorLength; UINT16 InterruptLength; UINT16 DescriptorSize; UINT32 CurrentByteOffset; UINT32 PinCount = 0; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; /* * Calculate lengths for fields that have variable length: * 1) Resource Source string * 2) Vendor Data buffer * 3) PIN (interrupt) list */ ResSourceLength = RsGetStringDataLength (InitializerOp); VendorLength = RsGetBufferDataLength (InitializerOp); InterruptLength = RsGetInterruptDataLength (InitializerOp, 10); DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_GPIO) + ResSourceLength + VendorLength + InterruptLength; /* Allocate the local resource node and initialize */ Rnode = RsAllocateResourceNode (DescriptorSize + sizeof (AML_RESOURCE_LARGE_HEADER)); Descriptor = Rnode->Buffer; Descriptor->Gpio.ResourceLength = DescriptorSize; Descriptor->Gpio.DescriptorType = ACPI_RESOURCE_NAME_GPIO; Descriptor->Gpio.RevisionId = AML_RESOURCE_GPIO_REVISION; Descriptor->Gpio.ConnectionType = AML_RESOURCE_GPIO_TYPE_IO; /* Build pointers to optional areas */ InterruptList = ACPI_ADD_PTR (UINT16, Descriptor, sizeof (AML_RESOURCE_GPIO)); PinList = InterruptList; ResourceSource = ACPI_ADD_PTR (char, InterruptList, InterruptLength); VendorData = ACPI_ADD_PTR (UINT8, ResourceSource, ResSourceLength); /* Setup offsets within the descriptor */ Descriptor->Gpio.PinTableOffset = (UINT16) ACPI_PTR_DIFF (InterruptList, Descriptor); Descriptor->Gpio.ResSourceOffset = (UINT16) ACPI_PTR_DIFF (ResourceSource, Descriptor); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Share Type [Flags] (_SHR) */ RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE, CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 3); break; case 1: /* Pin Config [BYTE] (_PPI) */ Descriptor->Gpio.PinConfig = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_PINCONFIG, CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.PinConfig)); break; case 2: /* Debounce Timeout [WORD] (_DBT) */ Descriptor->Gpio.DebounceTimeout = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_DEBOUNCETIME, CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.DebounceTimeout)); break; case 3: /* Drive Strength [WORD] (_DRS) */ Descriptor->Gpio.DriveStrength = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_DRIVESTRENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.DriveStrength)); break; case 4: /* I/O Restriction [Flag] (_IOR) */ RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 0, 0); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_IORESTRICTION, CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 0, 2); break; case 5: /* ResSource [Optional Field - STRING] */ if (ResSourceLength) { /* Copy string to the descriptor */ strcpy (ResourceSource, InitializerOp->Asl.Value.String); } break; case 6: /* Resource Index */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { Descriptor->Gpio.ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer; } break; case 7: /* Resource Usage (consumer/producer) */ RsSetFlagBits16 (&Descriptor->Gpio.Flags, InitializerOp, 0, 1); break; case 8: /* Resource Tag (Descriptor Name) */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 9: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */ /* * Always set the VendorOffset even if there is no Vendor Data. * This field is required in order to calculate the length * of the ResourceSource at runtime. */ Descriptor->Gpio.VendorOffset = (UINT16) ACPI_PTR_DIFF (VendorData, Descriptor); if (RsGetVendorData (InitializerOp, VendorData, (CurrentByteOffset + Descriptor->Gpio.VendorOffset))) { Descriptor->Gpio.VendorLength = VendorLength; } break; default: /* * PINs come through here, repeatedly. Each PIN must be a WORD. * NOTE: there is no "length" field for this, so from ACPI spec: * The number of pins in the table can be calculated from: * PinCount = (Resource Source Name Offset - Pin Table Offset) / 2 * (implies resource source must immediately follow the pin list.) * Name: _PIN */ *InterruptList = (UINT16) InitializerOp->Asl.Value.Integer; InterruptList++; PinCount++; /* Case 10: First interrupt number in list */ if (i == 10) { if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { /* Must be at least one interrupt */ AslError (ASL_ERROR, ASL_MSG_EX_INTERRUPT_LIST_MIN, InitializerOp, NULL); } /* Check now for duplicates in list */ RsCheckListForDuplicates (InitializerOp); /* Create a named field at the start of the list */ RsCreateWordField (InitializerOp, ACPI_RESTAG_PIN, CurrentByteOffset + Descriptor->Gpio.PinTableOffset); } break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } MpSaveGpioInfo (Info->MappingOp, Descriptor, PinCount, PinList, ResourceSource); return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoI2cSerialBusDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "I2cSerialBus" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoI2cSerialBusDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; char *ResourceSource = NULL; UINT8 *VendorData = NULL; UINT16 ResSourceLength; UINT16 VendorLength; UINT16 DescriptorSize; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; /* * Calculate lengths for fields that have variable length: * 1) Resource Source string * 2) Vendor Data buffer */ ResSourceLength = RsGetStringDataLength (InitializerOp); VendorLength = RsGetBufferDataLength (InitializerOp); DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_I2C_SERIALBUS) + ResSourceLength + VendorLength; /* Allocate the local resource node and initialize */ Rnode = RsAllocateResourceNode (DescriptorSize + sizeof (AML_RESOURCE_LARGE_HEADER)); Descriptor = Rnode->Buffer; Descriptor->I2cSerialBus.ResourceLength = DescriptorSize; Descriptor->I2cSerialBus.DescriptorType = ACPI_RESOURCE_NAME_SERIAL_BUS; Descriptor->I2cSerialBus.RevisionId = AML_RESOURCE_I2C_REVISION; Descriptor->I2cSerialBus.TypeRevisionId = AML_RESOURCE_I2C_TYPE_REVISION; Descriptor->I2cSerialBus.Type = AML_RESOURCE_I2C_SERIALBUSTYPE; Descriptor->I2cSerialBus.TypeDataLength = AML_RESOURCE_I2C_MIN_DATA_LEN + VendorLength; if (Info->DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_I2C_SERIALBUS_V2) { Descriptor->I2cSerialBus.RevisionId = 2; } /* Build pointers to optional areas */ VendorData = ACPI_ADD_PTR (UINT8, Descriptor, sizeof (AML_RESOURCE_I2C_SERIALBUS)); ResourceSource = ACPI_ADD_PTR (char, VendorData, VendorLength); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Slave Address [WORD] (_ADR) */ Descriptor->I2cSerialBus.SlaveAddress = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_ADDRESS, CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.SlaveAddress)); break; case 1: /* Slave Mode [Flag] (_SLV) */ RsSetFlagBits (&Descriptor->I2cSerialBus.Flags, InitializerOp, 0, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_SLAVEMODE, CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.Flags), 0); break; case 2: /* Connection Speed [DWORD] (_SPE) */ Descriptor->I2cSerialBus.ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED, CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.ConnectionSpeed)); break; case 3: /* Addressing Mode [Flag] (_MOD) */ RsSetFlagBits16 (&Descriptor->I2cSerialBus.TypeSpecificFlags, InitializerOp, 0, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE, CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.TypeSpecificFlags), 0); break; case 4: /* ResSource [Optional Field - STRING] */ if (ResSourceLength) { /* Copy string to the descriptor */ strcpy (ResourceSource, InitializerOp->Asl.Value.String); } break; case 5: /* Resource Index */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { Descriptor->I2cSerialBus.ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer; } break; case 6: /* Resource Usage (consumer/producer) */ RsSetFlagBits (&Descriptor->I2cSerialBus.Flags, InitializerOp, 1, 1); break; case 7: /* Resource Tag (Descriptor Name) */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 8: /* * Connection Share - Added for V2 (ACPI 6.0) version of the descriptor * Note: For V1, the share bit will be zero (Op is DEFAULT_ARG from * the ASL parser) */ RsSetFlagBits (&Descriptor->I2cSerialBus.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE, CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.Flags), 2); break; case 9: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */ RsGetVendorData (InitializerOp, VendorData, CurrentByteOffset + sizeof (AML_RESOURCE_I2C_SERIALBUS)); break; default: /* Ignore any extra nodes */ break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } MpSaveSerialInfo (Info->MappingOp, Descriptor, ResourceSource); return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoSpiSerialBusDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "SPI Serial Bus" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoSpiSerialBusDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; char *ResourceSource = NULL; UINT8 *VendorData = NULL; UINT16 ResSourceLength; UINT16 VendorLength; UINT16 DescriptorSize; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; /* * Calculate lengths for fields that have variable length: * 1) Resource Source string * 2) Vendor Data buffer */ ResSourceLength = RsGetStringDataLength (InitializerOp); VendorLength = RsGetBufferDataLength (InitializerOp); DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_SPI_SERIALBUS) + ResSourceLength + VendorLength; /* Allocate the local resource node and initialize */ Rnode = RsAllocateResourceNode (DescriptorSize + sizeof (AML_RESOURCE_LARGE_HEADER)); Descriptor = Rnode->Buffer; Descriptor->SpiSerialBus.ResourceLength = DescriptorSize; Descriptor->SpiSerialBus.DescriptorType = ACPI_RESOURCE_NAME_SERIAL_BUS; Descriptor->SpiSerialBus.RevisionId = AML_RESOURCE_SPI_REVISION; Descriptor->SpiSerialBus.TypeRevisionId = AML_RESOURCE_SPI_TYPE_REVISION; Descriptor->SpiSerialBus.Type = AML_RESOURCE_SPI_SERIALBUSTYPE; Descriptor->SpiSerialBus.TypeDataLength = AML_RESOURCE_SPI_MIN_DATA_LEN + VendorLength; if (Info->DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_SPI_SERIALBUS_V2) { Descriptor->I2cSerialBus.RevisionId = 2; } /* Build pointers to optional areas */ VendorData = ACPI_ADD_PTR (UINT8, Descriptor, sizeof (AML_RESOURCE_SPI_SERIALBUS)); ResourceSource = ACPI_ADD_PTR (char, VendorData, VendorLength); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Device Selection [WORD] (_ADR) */ Descriptor->SpiSerialBus.DeviceSelection = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_ADDRESS, CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.DeviceSelection)); break; case 1: /* Device Polarity [Flag] (_DPL) */ RsSetFlagBits16 (&Descriptor->SpiSerialBus.TypeSpecificFlags, InitializerOp, 1, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_DEVICEPOLARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.TypeSpecificFlags), 1); break; case 2: /* Wire Mode [Flag] (_MOD) */ RsSetFlagBits16 (&Descriptor->SpiSerialBus.TypeSpecificFlags, InitializerOp, 0, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE, CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.TypeSpecificFlags), 0); break; case 3: /* Device Bit Length [BYTE] (_LEN) */ Descriptor->SpiSerialBus.DataBitLength = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.DataBitLength)); break; case 4: /* Slave Mode [Flag] (_SLV) */ RsSetFlagBits (&Descriptor->SpiSerialBus.Flags, InitializerOp, 0, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_SLAVEMODE, CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.Flags), 0); break; case 5: /* Connection Speed [DWORD] (_SPE) */ Descriptor->SpiSerialBus.ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED, CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.ConnectionSpeed)); break; case 6: /* Clock Polarity [BYTE] (_POL) */ Descriptor->SpiSerialBus.ClockPolarity = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_POLARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.ClockPolarity)); break; case 7: /* Clock Phase [BYTE] (_PHA) */ Descriptor->SpiSerialBus.ClockPhase = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_PHASE, CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.ClockPhase)); break; case 8: /* ResSource [Optional Field - STRING] */ if (ResSourceLength) { /* Copy string to the descriptor */ strcpy (ResourceSource, InitializerOp->Asl.Value.String); } break; case 9: /* Resource Index */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { Descriptor->SpiSerialBus.ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer; } break; case 10: /* Resource Usage (consumer/producer) */ RsSetFlagBits (&Descriptor->SpiSerialBus.Flags, InitializerOp, 1, 1); break; case 11: /* Resource Tag (Descriptor Name) */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 12: /* * Connection Share - Added for V2 (ACPI 6.0) version of the descriptor * Note: For V1, the share bit will be zero (Op is DEFAULT_ARG from * the ASL parser) */ RsSetFlagBits (&Descriptor->SpiSerialBus.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE, CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.Flags), 2); break; case 13: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */ RsGetVendorData (InitializerOp, VendorData, CurrentByteOffset + sizeof (AML_RESOURCE_SPI_SERIALBUS)); break; default: /* Ignore any extra nodes */ break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } MpSaveSerialInfo (Info->MappingOp, Descriptor, ResourceSource); return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoUartSerialBusDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "UART Serial Bus" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoUartSerialBusDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; char *ResourceSource = NULL; UINT8 *VendorData = NULL; UINT16 ResSourceLength; UINT16 VendorLength; UINT16 DescriptorSize; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; /* * Calculate lengths for fields that have variable length: * 1) Resource Source string * 2) Vendor Data buffer */ ResSourceLength = RsGetStringDataLength (InitializerOp); VendorLength = RsGetBufferDataLength (InitializerOp); DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_UART_SERIALBUS) + ResSourceLength + VendorLength; /* Allocate the local resource node and initialize */ Rnode = RsAllocateResourceNode (DescriptorSize + sizeof (AML_RESOURCE_LARGE_HEADER)); Descriptor = Rnode->Buffer; Descriptor->UartSerialBus.ResourceLength = DescriptorSize; Descriptor->UartSerialBus.DescriptorType = ACPI_RESOURCE_NAME_SERIAL_BUS; Descriptor->UartSerialBus.RevisionId = AML_RESOURCE_UART_REVISION; Descriptor->UartSerialBus.TypeRevisionId = AML_RESOURCE_UART_TYPE_REVISION; Descriptor->UartSerialBus.Type = AML_RESOURCE_UART_SERIALBUSTYPE; Descriptor->UartSerialBus.TypeDataLength = AML_RESOURCE_UART_MIN_DATA_LEN + VendorLength; if (Info->DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_UART_SERIALBUS_V2) { Descriptor->I2cSerialBus.RevisionId = 2; } /* Build pointers to optional areas */ VendorData = ACPI_ADD_PTR (UINT8, Descriptor, sizeof (AML_RESOURCE_UART_SERIALBUS)); ResourceSource = ACPI_ADD_PTR (char, VendorData, VendorLength); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Connection Speed (Baud Rate) [DWORD] (_SPE) */ Descriptor->UartSerialBus.DefaultBaudRate = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED, CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.DefaultBaudRate)); break; case 1: /* Bits Per Byte [Flags] (_LEN) */ RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 4, 3); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 4, 3); break; case 2: /* Stop Bits [Flags] (_STB) */ RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 2, 1); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_STOPBITS, CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 2, 2); break; case 3: /* Lines In Use [BYTE] (_LIN) */ Descriptor->UartSerialBus.LinesEnabled = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_LINE, CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.LinesEnabled)); break; case 4: /* Endianness [Flag] (_END) */ RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 7, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_ENDIANNESS, CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 7); break; case 5: /* Parity [BYTE] (_PAR) */ Descriptor->UartSerialBus.Parity = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_PARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.Parity)); break; case 6: /* Flow Control [Flags] (_FLC) */ RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 0, 0); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_FLOWCONTROL, CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 0, 2); break; case 7: /* Rx Buffer Size [WORD] (_RXL) */ Descriptor->UartSerialBus.RxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH_RX, CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.RxFifoSize)); break; case 8: /* Tx Buffer Size [WORD] (_TXL) */ Descriptor->UartSerialBus.TxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH_TX, CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TxFifoSize)); break; case 9: /* ResSource [Optional Field - STRING] */ if (ResSourceLength) { /* Copy string to the descriptor */ strcpy (ResourceSource, InitializerOp->Asl.Value.String); } break; case 10: /* Resource Index */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { Descriptor->UartSerialBus.ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer; } break; case 11: /* Resource Usage (consumer/producer) */ RsSetFlagBits (&Descriptor->UartSerialBus.Flags, InitializerOp, 1, 1); /* * Slave Mode [Flag] (_SLV) * * Note: There is no SlaveMode argument to the UartSerialBus macro, but * we add this name anyway to allow the flag to be set by ASL in the * rare case where there is a slave mode associated with the UART. */ RsCreateBitField (InitializerOp, ACPI_RESTAG_SLAVEMODE, CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.Flags), 0); break; case 12: /* Resource Tag (Descriptor Name) */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 13: /* * Connection Share - Added for V2 (ACPI 6.0) version of the descriptor * Note: For V1, the share bit will be zero (Op is DEFAULT_ARG from * the ASL parser) */ RsSetFlagBits (&Descriptor->UartSerialBus.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE, CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.Flags), 2); break; case 14: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */ RsGetVendorData (InitializerOp, VendorData, CurrentByteOffset + sizeof (AML_RESOURCE_UART_SERIALBUS)); break; default: /* Ignore any extra nodes */ break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } MpSaveSerialInfo (Info->MappingOp, Descriptor, ResourceSource); return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoCsi2SerialBusDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "Csi2SerialBus" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoCsi2SerialBusDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; char *ResourceSource = NULL; UINT8 *VendorData = NULL; UINT16 ResSourceLength; UINT16 VendorLength; UINT16 DescriptorSize; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; /* * Calculate lengths for fields that have variable length: * 1) Resource Source string * 2) Vendor Data buffer */ ResSourceLength = RsGetStringDataLength (InitializerOp); VendorLength = RsGetBufferDataLength (InitializerOp); DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_CSI2_SERIALBUS) + ResSourceLength + VendorLength; /* Allocate the local resource node and initialize */ Rnode = RsAllocateResourceNode (DescriptorSize + sizeof (AML_RESOURCE_LARGE_HEADER)); Descriptor = Rnode->Buffer; Descriptor->Csi2SerialBus.ResourceLength = DescriptorSize; Descriptor->Csi2SerialBus.DescriptorType = ACPI_RESOURCE_NAME_SERIAL_BUS; Descriptor->Csi2SerialBus.RevisionId = AML_RESOURCE_CSI2_REVISION; Descriptor->Csi2SerialBus.TypeRevisionId = AML_RESOURCE_CSI2_TYPE_REVISION; Descriptor->Csi2SerialBus.Type = AML_RESOURCE_CSI2_SERIALBUSTYPE; Descriptor->Csi2SerialBus.TypeDataLength = AML_RESOURCE_CSI2_MIN_DATA_LEN + VendorLength; /* Build pointers to optional areas */ VendorData = ACPI_ADD_PTR (UINT8, Descriptor, sizeof (AML_RESOURCE_CSI2_SERIALBUS)); ResourceSource = ACPI_ADD_PTR (char, VendorData, VendorLength); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Slave Mode [Flag] (_SLV) */ RsSetFlagBits (&Descriptor->Csi2SerialBus.Flags, InitializerOp, 0, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_SLAVEMODE, CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.Flags), 0); break; case 1: /* Phy Type [Flag] (_PHY) */ RsSetFlagBits16 ((UINT16 *) &Descriptor->Csi2SerialBus.TypeSpecificFlags, InitializerOp, 0, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_PHYTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Csi2SerialBus.TypeSpecificFlags), 0); break; case 2: /* Local Port Instance [Integer] (_PRT) */ RsSetFlagBits16 ((UINT16 *) &Descriptor->Csi2SerialBus.TypeSpecificFlags, InitializerOp, 0, 0); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_LOCALPORT, CurrentByteOffset + ASL_RESDESC_OFFSET (Csi2SerialBus.TypeSpecificFlags), 2, 6); break; case 3: /* ResSource [Optional Field - STRING] */ if (ResSourceLength) { /* Copy string to the descriptor */ strcpy (ResourceSource, InitializerOp->Asl.Value.String); } break; case 4: /* Resource Index */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { Descriptor->Csi2SerialBus.ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer; } break; case 5: /* Resource Usage (consumer/producer) */ RsSetFlagBits (&Descriptor->Csi2SerialBus.Flags, InitializerOp, 1, 1); break; case 6: /* Resource Tag (Descriptor Name) */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 7: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */ RsGetVendorData (InitializerOp, VendorData, CurrentByteOffset + sizeof (AML_RESOURCE_CSI2_SERIALBUS)); break; default: /* Ignore any extra nodes */ break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } MpSaveSerialInfo (Info->MappingOp, Descriptor, ResourceSource); return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoPinFunctionDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "PinFunction" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoPinFunctionDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; char *ResourceSource = NULL; UINT8 *VendorData = NULL; UINT16 *PinList = NULL; UINT16 ResSourceLength; UINT16 VendorLength; UINT16 PinListLength; UINT16 DescriptorSize; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; /* * Calculate lengths for fields that have variable length: * 1) Resource Source string * 2) Vendor Data buffer * 3) PIN (interrupt) list */ ResSourceLength = RsGetStringDataLength (InitializerOp); VendorLength = RsGetBufferDataLength (InitializerOp); PinListLength = RsGetInterruptDataLength (InitializerOp, 8); DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_FUNCTION) + ResSourceLength + VendorLength + PinListLength; /* Allocate the local resource node and initialize */ Rnode = RsAllocateResourceNode (DescriptorSize + sizeof (AML_RESOURCE_LARGE_HEADER)); Descriptor = Rnode->Buffer; Descriptor->PinFunction.ResourceLength = DescriptorSize; Descriptor->PinFunction.DescriptorType = ACPI_RESOURCE_NAME_PIN_FUNCTION; Descriptor->PinFunction.RevisionId = AML_RESOURCE_PIN_FUNCTION_REVISION; /* Build pointers to optional areas */ PinList = ACPI_ADD_PTR (UINT16, Descriptor, sizeof (AML_RESOURCE_PIN_FUNCTION)); ResourceSource = ACPI_ADD_PTR (char, PinList, PinListLength); VendorData = ACPI_ADD_PTR (UINT8, ResourceSource, ResSourceLength); /* Setup offsets within the descriptor */ Descriptor->PinFunction.PinTableOffset = (UINT16) ACPI_PTR_DIFF (PinList, Descriptor); Descriptor->PinFunction.ResSourceOffset = (UINT16) ACPI_PTR_DIFF (ResourceSource, Descriptor); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Share Type [Flags] (_SHR) */ RsSetFlagBits16 (&Descriptor->PinFunction.Flags, InitializerOp, 0, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE, CurrentByteOffset + ASL_RESDESC_OFFSET (PinFunction.Flags), 0); break; case 1: /* Pin Config [BYTE] (_PPI) */ Descriptor->PinFunction.PinConfig = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_PINCONFIG, CurrentByteOffset + ASL_RESDESC_OFFSET (PinFunction.PinConfig)); break; case 2: /* Function Number [WORD] (_FUN) */ Descriptor->PinFunction.FunctionNumber = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_FUNCTION, CurrentByteOffset + ASL_RESDESC_OFFSET (PinFunction.FunctionNumber)); break; case 3: /* ResSource [Optional Field - STRING] */ if (ResSourceLength) { /* Copy string to the descriptor */ strcpy (ResourceSource, InitializerOp->Asl.Value.String); } break; case 4: /* Resource Index */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { Descriptor->PinFunction.ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer; } break; case 5: /* Resource Usage (consumer/producer) */ /* Assumed to be consumer */ break; case 6: /* Resource Tag (Descriptor Name) */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 7: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */ /* * Always set the VendorOffset even if there is no Vendor Data. * This field is required in order to calculate the length * of the ResourceSource at runtime. */ Descriptor->PinFunction.VendorOffset = (UINT16) ACPI_PTR_DIFF (VendorData, Descriptor); if (RsGetVendorData (InitializerOp, VendorData, (CurrentByteOffset + Descriptor->PinFunction.VendorOffset))) { Descriptor->PinFunction.VendorLength = VendorLength; } break; default: /* * PINs come through here, repeatedly. Each PIN must be a WORD. * Name: _PIN */ *PinList = (UINT16) InitializerOp->Asl.Value.Integer; PinList++; /* Case 8: First pin number in list */ if (i == 8) { if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { /* Must be at least one interrupt */ AslError (ASL_ERROR, ASL_MSG_EX_INTERRUPT_LIST_MIN, InitializerOp, NULL); } /* Check now for duplicates in list */ RsCheckListForDuplicates (InitializerOp); /* Create a named field at the start of the list */ RsCreateWordField (InitializerOp, ACPI_RESTAG_PIN, CurrentByteOffset + Descriptor->PinFunction.PinTableOffset); } break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoClockInputDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "ClockInput" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoClockInputDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; char *ResourceSourceString = NULL; UINT8 *ResourceSourceIndex = NULL; UINT16 ResSourceLength; UINT16 DescriptorSize; UINT32 i; UINT32 CurrentByteOffset; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; /* * Calculate lengths for fields that have variable length: * 1) Resource Source string */ ResSourceLength = RsGetStringDataLength (InitializerOp); DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_CLOCK_INPUT) + ResSourceLength + 1; /* Allocate the local resource node and initialize */ Rnode = RsAllocateResourceNode (DescriptorSize + sizeof (AML_RESOURCE_LARGE_HEADER)); Descriptor = Rnode->Buffer; Descriptor->ClockInput.ResourceLength = DescriptorSize; Descriptor->ClockInput.DescriptorType = ACPI_RESOURCE_NAME_CLOCK_INPUT; Descriptor->ClockInput.RevisionId = AML_RESOURCE_CLOCK_INPUT_REVISION; /* Build pointers to optional areas */ if (ResSourceLength){ ResourceSourceIndex = ACPI_ADD_PTR (UINT8, Descriptor, sizeof (AML_RESOURCE_CLOCK_INPUT)); ResourceSourceString = ACPI_ADD_PTR (char, Descriptor, sizeof (AML_RESOURCE_CLOCK_INPUT) + 1); } /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: Descriptor->ClockInput.FrequencyNumerator = (UINT32)InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_FQN, CurrentByteOffset + ASL_RESDESC_OFFSET (ClockInput.FrequencyNumerator)); break; case 1: Descriptor->ClockInput.FrequencyDivisor = (UINT16)InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_FQD, CurrentByteOffset + ASL_RESDESC_OFFSET (ClockInput.FrequencyDivisor)); break; case 2: RsSetFlagBits16 (&Descriptor->ClockInput.Flags, InitializerOp, 1, 0); break; case 3: RsSetFlagBits16 (&Descriptor->ClockInput.Flags, InitializerOp, 0, 0); break; case 4: /* ResSource String [Optional Field] */ if (ResourceSourceString) { /* Copy string to the descriptor */ strcpy (ResourceSourceString, InitializerOp->Asl.Value.String); } break; case 5: /* ResSource Index [Optional Field] */ if (ResourceSourceIndex) { *ResourceSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer; } break; default: break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoPinConfigDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "PinConfig" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoPinConfigDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; char *ResourceSource = NULL; UINT8 *VendorData = NULL; UINT16 *PinList = NULL; UINT16 ResSourceLength; UINT16 VendorLength; UINT16 PinListLength; UINT16 DescriptorSize; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; /* * Calculate lengths for fields that have variable length: * 1) Resource Source string * 2) Vendor Data buffer * 3) PIN (interrupt) list */ ResSourceLength = RsGetStringDataLength (InitializerOp); VendorLength = RsGetBufferDataLength (InitializerOp); PinListLength = RsGetInterruptDataLength (InitializerOp, 8); DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_CONFIG) + ResSourceLength + VendorLength + PinListLength; /* Allocate the local resource node and initialize */ Rnode = RsAllocateResourceNode (DescriptorSize + sizeof (AML_RESOURCE_LARGE_HEADER)); Descriptor = Rnode->Buffer; Descriptor->PinConfig.ResourceLength = DescriptorSize; Descriptor->PinConfig.DescriptorType = ACPI_RESOURCE_NAME_PIN_CONFIG; Descriptor->PinConfig.RevisionId = AML_RESOURCE_PIN_CONFIG_REVISION; /* Build pointers to optional areas */ PinList = ACPI_ADD_PTR (UINT16, Descriptor, sizeof (AML_RESOURCE_PIN_CONFIG)); ResourceSource = ACPI_ADD_PTR (char, PinList, PinListLength); VendorData = ACPI_ADD_PTR (UINT8, ResourceSource, ResSourceLength); /* Setup offsets within the descriptor */ Descriptor->PinConfig.PinTableOffset = (UINT16) ACPI_PTR_DIFF (PinList, Descriptor); Descriptor->PinConfig.ResSourceOffset = (UINT16) ACPI_PTR_DIFF (ResourceSource, Descriptor); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { BOOLEAN isValid; switch (i) { case 0: /* Share Type [Flags] (_SHR) */ RsSetFlagBits16 (&Descriptor->PinConfig.Flags, InitializerOp, 0, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE, CurrentByteOffset + ASL_RESDESC_OFFSET (PinConfig.Flags), 0); break; case 1: /* Pin Config Type [BYTE] (_TYP) */ isValid = InitializerOp->Asl.Value.Integer <= 0x0d; if (!isValid) { isValid = InitializerOp->Asl.Value.Integer >= 0x80 && InitializerOp->Asl.Value.Integer <= 0xff; } if (!isValid) { AslError (ASL_ERROR, ASL_MSG_RANGE, InitializerOp, NULL); } Descriptor->PinConfig.PinConfigType = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_PINCONFIG_TYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (PinConfig.PinConfigType)); break; case 2: /* Pin Config Value [DWORD] (_VAL) */ Descriptor->PinConfig.PinConfigValue = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_PINCONFIG_VALUE, CurrentByteOffset + ASL_RESDESC_OFFSET (PinConfig.PinConfigValue)); break; case 3: /* ResSource [Optional Field - STRING] */ if (ResSourceLength) { /* Copy string to the descriptor */ strcpy (ResourceSource, InitializerOp->Asl.Value.String); } break; case 4: /* Resource Index */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { Descriptor->PinConfig.ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer; } break; case 5: /* Resource Usage (consumer/producer) */ RsSetFlagBits16 (&Descriptor->PinConfig.Flags, InitializerOp, 1, 1); break; case 6: /* Resource Tag (Descriptor Name) */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 7: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */ /* * Always set the VendorOffset even if there is no Vendor Data. * This field is required in order to calculate the length * of the ResourceSource at runtime. */ Descriptor->PinConfig.VendorOffset = (UINT16) ACPI_PTR_DIFF (VendorData, Descriptor); if (RsGetVendorData (InitializerOp, VendorData, (CurrentByteOffset + Descriptor->PinConfig.VendorOffset))) { Descriptor->PinConfig.VendorLength = VendorLength; } break; default: /* * PINs come through here, repeatedly. Each PIN must be a WORD. * Name: _PIN */ *PinList = (UINT16) InitializerOp->Asl.Value.Integer; PinList++; /* Case 8: First pin number in list */ if (i == 8) { if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { /* Must be at least one interrupt */ AslError (ASL_ERROR, ASL_MSG_EX_INTERRUPT_LIST_MIN, InitializerOp, NULL); } /* Check now for duplicates in list */ RsCheckListForDuplicates (InitializerOp); /* Create a named field at the start of the list */ RsCreateWordField (InitializerOp, ACPI_RESTAG_PIN, CurrentByteOffset + Descriptor->PinConfig.PinTableOffset); } break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoPinGroupDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "PinGroup" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoPinGroupDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; UINT8 *VendorData = NULL; UINT16 *PinList = NULL; char *Label = NULL; UINT16 LabelLength; UINT16 VendorLength; UINT16 PinListLength; UINT16 DescriptorSize; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; /* * Calculate lengths for fields that have variable length: * 1) Label * 2) Vendor Data buffer * 3) PIN (interrupt) list */ LabelLength = RsGetStringDataLength (InitializerOp); VendorLength = RsGetBufferDataLength (InitializerOp); PinListLength = RsGetInterruptDataLength (InitializerOp, 4); DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP) + LabelLength + VendorLength + PinListLength; /* Allocate the local resource node and initialize */ Rnode = RsAllocateResourceNode (DescriptorSize + sizeof (AML_RESOURCE_LARGE_HEADER)); Descriptor = Rnode->Buffer; Descriptor->PinGroup.ResourceLength = DescriptorSize; Descriptor->PinGroup.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP; Descriptor->PinGroup.RevisionId = AML_RESOURCE_PIN_GROUP_REVISION; /* Build pointers to optional areas */ PinList = ACPI_ADD_PTR (UINT16, Descriptor, sizeof (AML_RESOURCE_PIN_GROUP)); Label = ACPI_ADD_PTR (char, PinList, PinListLength); VendorData = ACPI_ADD_PTR (UINT8, Label, LabelLength); /* Setup offsets within the descriptor */ Descriptor->PinGroup.PinTableOffset = (UINT16) ACPI_PTR_DIFF (PinList, Descriptor); Descriptor->PinGroup.LabelOffset = (UINT16) ACPI_PTR_DIFF (Label, Descriptor); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Resource Label */ if (LabelLength < 2) { AslError(ASL_WARNING, ASL_MSG_NULL_STRING, InitializerOp, NULL); } strcpy (Label, InitializerOp->Asl.Value.String); break; case 1: /* Resource Usage (consumer/producer) */ RsSetFlagBits16 (&Descriptor->PinGroup.Flags, InitializerOp, 0, 0); break; case 2: /* Resource Tag (Descriptor Name) */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 3: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */ /* * Always set the VendorOffset even if there is no Vendor Data. * This field is required in order to calculate the length * of the ResourceSource at runtime. */ Descriptor->PinGroup.VendorOffset = (UINT16) ACPI_PTR_DIFF (VendorData, Descriptor); if (RsGetVendorData (InitializerOp, VendorData, (CurrentByteOffset + Descriptor->PinGroup.VendorOffset))) { Descriptor->PinGroup.VendorLength = VendorLength; } break; default: /* * PINs come through here, repeatedly. Each PIN must be a WORD. * Name: _PIN */ *PinList = (UINT16) InitializerOp->Asl.Value.Integer; PinList++; /* Case 3: First pin number in list */ if (i == 4) { if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { /* Must be at least one interrupt */ AslError (ASL_ERROR, ASL_MSG_EX_INTERRUPT_LIST_MIN, InitializerOp, NULL); } /* Check now for duplicates in list */ RsCheckListForDuplicates (InitializerOp); /* Create a named field at the start of the list */ RsCreateWordField (InitializerOp, ACPI_RESTAG_PIN, CurrentByteOffset + Descriptor->PinGroup.PinTableOffset); } break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoPinGroupFunctionDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "PinGroupFunction" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoPinGroupFunctionDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; char *ResourceSource = NULL; char *ResourceSourceLabel = NULL; UINT8 *VendorData = NULL; UINT16 ResSourceLength; UINT16 ResSourceLabelLength; UINT16 VendorLength; UINT16 DescriptorSize; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; /* * Calculate lengths for fields that have variable length: * 1) Resource Source string * 2) Resource Source Label string * 3) Vendor Data buffer */ ResSourceLength = RsGetStringDataLengthAt (InitializerOp, 2); ResSourceLabelLength = RsGetStringDataLengthAt (InitializerOp, 4); VendorLength = RsGetBufferDataLength (InitializerOp); DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP_FUNCTION) + ResSourceLength + ResSourceLabelLength + VendorLength; /* Allocate the local resource node and initialize */ Rnode = RsAllocateResourceNode (DescriptorSize + sizeof (AML_RESOURCE_LARGE_HEADER)); Descriptor = Rnode->Buffer; Descriptor->PinGroupFunction.ResourceLength = DescriptorSize; Descriptor->PinGroupFunction.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION; Descriptor->PinGroupFunction.RevisionId = AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION; /* Build pointers to optional areas */ ResourceSource = ACPI_ADD_PTR (char, Descriptor, sizeof (AML_RESOURCE_PIN_GROUP_FUNCTION)); ResourceSourceLabel = ACPI_ADD_PTR (char, ResourceSource, ResSourceLength); VendorData = ACPI_ADD_PTR (UINT8, ResourceSourceLabel, ResSourceLabelLength); /* Setup offsets within the descriptor */ Descriptor->PinGroupFunction.ResSourceOffset = (UINT16) ACPI_PTR_DIFF (ResourceSource, Descriptor); Descriptor->PinGroupFunction.ResSourceLabelOffset = (UINT16) ACPI_PTR_DIFF (ResourceSourceLabel, Descriptor); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Share Type [Flags] (_SHR) */ RsSetFlagBits16 (&Descriptor->PinGroupFunction.Flags, InitializerOp, 0, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE, CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupFunction.Flags), 0); break; case 1: /* Function Number [WORD] */ Descriptor->PinGroupFunction.FunctionNumber = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_FUNCTION, CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupFunction.FunctionNumber)); break; case 2: /* ResourceSource [STRING] */ strcpy (ResourceSource, InitializerOp->Asl.Value.String); break; case 3: /* Resource Index */ Descriptor->PinGroupFunction.ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer; break; case 4: /* ResourceSourceLabel [STRING] */ if (ResSourceLabelLength < 2) { AslError(ASL_WARNING, ASL_MSG_NULL_STRING, InitializerOp, NULL); } strcpy (ResourceSourceLabel, InitializerOp->Asl.Value.String); break; case 5: /* Resource Usage (consumer/producer) */ RsSetFlagBits16 (&Descriptor->PinGroupFunction.Flags, InitializerOp, 1, 1); break; case 6: /* Resource Tag (Descriptor Name) */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 7: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */ /* * Always set the VendorOffset even if there is no Vendor Data. * This field is required in order to calculate the length * of the ResourceSource at runtime. */ Descriptor->PinGroupFunction.VendorOffset = (UINT16) ACPI_PTR_DIFF (VendorData, Descriptor); if (RsGetVendorData (InitializerOp, VendorData, (CurrentByteOffset + Descriptor->PinGroupFunction.VendorOffset))) { Descriptor->PinGroupFunction.VendorLength = VendorLength; } break; default: break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoPinGroupConfigDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "PinGroupConfig" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoPinGroupConfigDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ASL_RESOURCE_NODE *Rnode; char *ResourceSource = NULL; char *ResourceSourceLabel = NULL; UINT8 *VendorData = NULL; UINT16 ResSourceLength; UINT16 ResSourceLabelLength; UINT16 VendorLength; UINT16 DescriptorSize; UINT32 CurrentByteOffset; UINT32 i; InitializerOp = Info->DescriptorTypeOp->Asl.Child; CurrentByteOffset = Info->CurrentByteOffset; /* * Calculate lengths for fields that have variable length: * 1) Resource Source string * 2) Resource Source Label string * 3) Vendor Data buffer */ ResSourceLength = RsGetStringDataLengthAt (InitializerOp, 3); ResSourceLabelLength = RsGetStringDataLengthAt (InitializerOp, 5); VendorLength = RsGetBufferDataLength (InitializerOp); DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP_CONFIG) + ResSourceLength + ResSourceLabelLength + VendorLength; /* Allocate the local resource node and initialize */ Rnode = RsAllocateResourceNode (DescriptorSize + sizeof (AML_RESOURCE_LARGE_HEADER)); Descriptor = Rnode->Buffer; Descriptor->PinGroupConfig.ResourceLength = DescriptorSize; Descriptor->PinGroupConfig.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG; Descriptor->PinGroupConfig.RevisionId = AML_RESOURCE_PIN_GROUP_CONFIG_REVISION; /* Build pointers to optional areas */ ResourceSource = ACPI_ADD_PTR (char, Descriptor, sizeof (AML_RESOURCE_PIN_GROUP_CONFIG)); ResourceSourceLabel = ACPI_ADD_PTR (char, ResourceSource, ResSourceLength); VendorData = ACPI_ADD_PTR (UINT8, ResourceSourceLabel, ResSourceLabelLength); /* Setup offsets within the descriptor */ Descriptor->PinGroupConfig.ResSourceOffset = (UINT16) ACPI_PTR_DIFF (ResourceSource, Descriptor); Descriptor->PinGroupConfig.ResSourceLabelOffset = (UINT16) ACPI_PTR_DIFF (ResourceSourceLabel, Descriptor); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { BOOLEAN isValid; switch (i) { case 0: /* Share Type [Flags] (_SHR) */ RsSetFlagBits16 (&Descriptor->PinGroupConfig.Flags, InitializerOp, 0, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE, CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupConfig.Flags), 0); break; case 1: /* Pin Config Type [BYTE] (_TYP) */ isValid = InitializerOp->Asl.Value.Integer <= 0x0d; if (!isValid) { isValid = InitializerOp->Asl.Value.Integer >= 0x80 && InitializerOp->Asl.Value.Integer <= 0xff; } if (!isValid) { AslError (ASL_ERROR, ASL_MSG_RANGE, InitializerOp, NULL); } Descriptor->PinGroupConfig.PinConfigType = (UINT8) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_PINCONFIG_TYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupConfig.PinConfigType)); break; case 2: /* Pin Config Value [DWORD] (_VAL) */ Descriptor->PinGroupConfig.PinConfigValue = (UINT32) InitializerOp->Asl.Value.Integer; RsCreateDwordField (InitializerOp, ACPI_RESTAG_PINCONFIG_VALUE, CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupConfig.PinConfigValue)); break; case 3: /* ResourceSource [STRING] */ /* Copy string to the descriptor */ strcpy (ResourceSource, InitializerOp->Asl.Value.String); break; case 4: /* Resource Index */ Descriptor->PinGroupConfig.ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer; break; case 5: /* ResourceSourceLabel [STRING] */ if (ResSourceLabelLength < 2) { AslError(ASL_WARNING, ASL_MSG_NULL_STRING, InitializerOp, NULL); } strcpy (ResourceSourceLabel, InitializerOp->Asl.Value.String); break; case 6: /* Resource Usage (consumer/producer) */ RsSetFlagBits16 (&Descriptor->PinGroupConfig.Flags, InitializerOp, 1, 1); break; case 7: /* Resource Tag (Descriptor Name) */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 8: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */ /* * Always set the VendorOffset even if there is no Vendor Data. * This field is required in order to calculate the length * of the ResourceSource at runtime. */ Descriptor->PinGroupConfig.VendorOffset = (UINT16) ACPI_PTR_DIFF (VendorData, Descriptor); if (RsGetVendorData (InitializerOp, VendorData, (CurrentByteOffset + Descriptor->PinGroupConfig.VendorOffset))) { Descriptor->PinGroupConfig.VendorLength = VendorLength; } break; default: break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } return (Rnode); } src/acpica/source/compiler/aslrestype2w.c000066400000000000000000000740171465205512700210270ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslrestype2w - Large Word address resource descriptors * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslrestype2w") /* * This module contains the Word (16-bit) address space descriptors: * * WordIO * WordMemory * WordSpace */ /******************************************************************************* * * FUNCTION: RsDoWordIoDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "WordIO" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoWordIoDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ACPI_PARSE_OBJECT *GranOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT8 *OptionalFields; UINT16 StringLength = 0; UINT32 OptionIndex = 0; UINT32 CurrentByteOffset; UINT32 i; BOOLEAN ResSourceIndex = FALSE; InitializerOp = Info->DescriptorTypeOp->Asl.Child; StringLength = RsGetStringDataLength (InitializerOp); CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode ( sizeof (AML_RESOURCE_ADDRESS16) + 1 + StringLength); Descriptor = Rnode->Buffer; Descriptor->Address16.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS16; Descriptor->Address16.ResourceType = ACPI_ADDRESS_TYPE_IO_RANGE; /* * Initial descriptor length -- may be enlarged if there are * optional fields present */ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16); Descriptor->Address16.ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS16) - sizeof (AML_RESOURCE_LARGE_HEADER)); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Resource Usage */ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 0, 1); break; case 1: /* MinType */ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 2); break; case 2: /* MaxType */ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 3); break; case 3: /* DecodeType */ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 1, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 1); break; case 4: /* Range Type */ RsSetFlagBits (&Descriptor->Address16.SpecificFlags, InitializerOp, 0, 3); RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_RANGETYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.SpecificFlags), 0, 2); break; case 5: /* Address Granularity */ Descriptor->Address16.Granularity = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity)); GranOp = InitializerOp; break; case 6: /* Address Min */ Descriptor->Address16.Minimum = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum)); MinOp = InitializerOp; break; case 7: /* Address Max */ Descriptor->Address16.Maximum = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum)); MaxOp = InitializerOp; break; case 8: /* Translation Offset */ Descriptor->Address16.TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset)); break; case 9: /* Address Length */ Descriptor->Address16.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength)); LengthOp = InitializerOp; break; case 10: /* ResSourceIndex [Optional Field - BYTE] */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer; OptionIndex++; Descriptor->Address16.ResourceLength++; ResSourceIndex = TRUE; } break; case 11: /* ResSource [Optional Field - STRING] */ if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) && (InitializerOp->Asl.Value.String)) { if (StringLength) { Descriptor->Address16.ResourceLength = (UINT16) (Descriptor->Address16.ResourceLength + StringLength); strcpy ((char *) &OptionalFields[OptionIndex], InitializerOp->Asl.Value.String); /* ResourceSourceIndex must also be valid */ if (!ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX, InitializerOp, NULL); } } } #if 0 /* * Not a valid ResourceSource, ResourceSourceIndex must also * be invalid */ else if (ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE, InitializerOp, NULL); } #endif break; case 12: /* ResourceTag */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; case 13: /* Type */ RsSetFlagBits (&Descriptor->Address16.SpecificFlags, InitializerOp, 4, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.SpecificFlags), 4); break; case 14: /* Translation Type */ RsSetFlagBits (&Descriptor->Address16.SpecificFlags, InitializerOp, 5, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_TRANSTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.SpecificFlags), 5); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( (UINT64) Descriptor->Address16.Minimum, (UINT64) Descriptor->Address16.Maximum, (UINT64) Descriptor->Address16.AddressLength, (UINT64) Descriptor->Address16.Granularity, Descriptor->Address16.Flags, MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) + OptionIndex + StringLength; return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoWordBusNumberDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "WordBusNumber" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoWordBusNumberDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ACPI_PARSE_OBJECT *GranOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT8 *OptionalFields; UINT16 StringLength = 0; UINT32 OptionIndex = 0; UINT32 CurrentByteOffset; UINT32 i; BOOLEAN ResSourceIndex = FALSE; InitializerOp = Info->DescriptorTypeOp->Asl.Child; StringLength = RsGetStringDataLength (InitializerOp); CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode ( sizeof (AML_RESOURCE_ADDRESS16) + 1 + StringLength); Descriptor = Rnode->Buffer; Descriptor->Address16.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS16; Descriptor->Address16.ResourceType = ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE; /* * Initial descriptor length -- may be enlarged if there are * optional fields present */ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16); Descriptor->Address16.ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS16) - sizeof (AML_RESOURCE_LARGE_HEADER)); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Resource Usage */ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 0, 1); break; case 1: /* MinType */ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 2); break; case 2: /* MaxType */ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 3); break; case 3: /* DecodeType */ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 1, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 1); break; case 4: /* Address Granularity */ Descriptor->Address16.Granularity = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity)); GranOp = InitializerOp; break; case 5: /* Min Address */ Descriptor->Address16.Minimum = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum)); MinOp = InitializerOp; break; case 6: /* Max Address */ Descriptor->Address16.Maximum = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum)); MaxOp = InitializerOp; break; case 7: /* Translation Offset */ Descriptor->Address16.TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset)); break; case 8: /* Address Length */ Descriptor->Address16.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength)); LengthOp = InitializerOp; break; case 9: /* ResSourceIndex [Optional Field - BYTE] */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer; OptionIndex++; Descriptor->Address16.ResourceLength++; ResSourceIndex = TRUE; } break; case 10: /* ResSource [Optional Field - STRING] */ if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) && (InitializerOp->Asl.Value.String)) { if (StringLength) { Descriptor->Address16.ResourceLength = (UINT16) (Descriptor->Address16.ResourceLength + StringLength); strcpy ((char *) &OptionalFields[OptionIndex], InitializerOp->Asl.Value.String); /* ResourceSourceIndex must also be valid */ if (!ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX, InitializerOp, NULL); } } } #if 0 /* * Not a valid ResourceSource, ResourceSourceIndex must also * be invalid */ else if (ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE, InitializerOp, NULL); } #endif break; case 11: /* ResourceTag */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( (UINT64) Descriptor->Address16.Minimum, (UINT64) Descriptor->Address16.Maximum, (UINT64) Descriptor->Address16.AddressLength, (UINT64) Descriptor->Address16.Granularity, Descriptor->Address16.Flags, MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) + OptionIndex + StringLength; return (Rnode); } /******************************************************************************* * * FUNCTION: RsDoWordSpaceDescriptor * * PARAMETERS: Info - Parse Op and resource template offset * * RETURN: Completed resource node * * DESCRIPTION: Construct a long "WordSpace" descriptor * ******************************************************************************/ ASL_RESOURCE_NODE * RsDoWordSpaceDescriptor ( ASL_RESOURCE_INFO *Info) { AML_RESOURCE *Descriptor; ACPI_PARSE_OBJECT *InitializerOp; ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; ACPI_PARSE_OBJECT *GranOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT8 *OptionalFields; UINT16 StringLength = 0; UINT32 OptionIndex = 0; UINT32 CurrentByteOffset; UINT32 i; BOOLEAN ResSourceIndex = FALSE; InitializerOp = Info->DescriptorTypeOp->Asl.Child; StringLength = RsGetStringDataLength (InitializerOp); CurrentByteOffset = Info->CurrentByteOffset; Rnode = RsAllocateResourceNode ( sizeof (AML_RESOURCE_ADDRESS16) + 1 + StringLength); Descriptor = Rnode->Buffer; Descriptor->Address16.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS16; /* * Initial descriptor length -- may be enlarged if there are * optional fields present */ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16); Descriptor->Address16.ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS16) - sizeof (AML_RESOURCE_LARGE_HEADER)); /* Process all child initialization nodes */ for (i = 0; InitializerOp; i++) { switch (i) { case 0: /* Resource Type */ Descriptor->Address16.ResourceType = (UINT8) InitializerOp->Asl.Value.Integer; break; case 1: /* Resource Usage */ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 0, 1); break; case 2: /* DecodeType */ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 1, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 1); break; case 3: /* MinType */ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 2, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 2); break; case 4: /* MaxType */ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 3, 0); RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 3); break; case 5: /* Type-Specific flags */ Descriptor->Address16.SpecificFlags = (UINT8) InitializerOp->Asl.Value.Integer; break; case 6: /* Address Granularity */ Descriptor->Address16.Granularity = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity)); GranOp = InitializerOp; break; case 7: /* Min Address */ Descriptor->Address16.Minimum = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum)); MinOp = InitializerOp; break; case 8: /* Max Address */ Descriptor->Address16.Maximum = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum)); MaxOp = InitializerOp; break; case 9: /* Translation Offset */ Descriptor->Address16.TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset)); break; case 10: /* Address Length */ Descriptor->Address16.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH, CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength)); LengthOp = InitializerOp; break; case 11: /* ResSourceIndex [Optional Field - BYTE] */ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) { OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer; OptionIndex++; Descriptor->Address16.ResourceLength++; ResSourceIndex = TRUE; } break; case 12: /* ResSource [Optional Field - STRING] */ if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) && (InitializerOp->Asl.Value.String)) { if (StringLength) { Descriptor->Address16.ResourceLength = (UINT16) (Descriptor->Address16.ResourceLength + StringLength); strcpy ((char *) &OptionalFields[OptionIndex], InitializerOp->Asl.Value.String); /* ResourceSourceIndex must also be valid */ if (!ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX, InitializerOp, NULL); } } } #if 0 /* * Not a valid ResourceSource, ResourceSourceIndex must also * be invalid */ else if (ResSourceIndex) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE, InitializerOp, NULL); } #endif break; case 13: /* ResourceTag */ UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); break; default: AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); break; } InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); } /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( (UINT64) Descriptor->Address16.Minimum, (UINT64) Descriptor->Address16.Maximum, (UINT64) Descriptor->Address16.AddressLength, (UINT64) Descriptor->Address16.Granularity, Descriptor->Address16.Flags, MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) + OptionIndex + StringLength; return (Rnode); } src/acpica/source/compiler/aslrules.y000066400000000000000000001022751465205512700202410ustar00rootroot00000000000000NoEcho(' /****************************************************************************** * * Module Name: aslrules.y - Main Bison/Yacc production rules * - Keep this file synched with the * CvParseOpBlockType function in cvcompiler.c * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ ') /******************************************************************************* * * ASL Root and Secondary Terms * ******************************************************************************/ /* * Root term. Allow multiple #line directives before the definition block * to handle output from preprocessors */ AslCode : DefinitionBlockList {$$ = TrLinkOpChildren ( TrCreateLeafOp (PARSEOP_ASL_CODE),1, $1);} | error {YYABORT; $$ = NULL;} ; /* * Note concerning support for "module-level code". * * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control * methods (the so-called module-level code.) This support was explicitly * removed in ACPI 2.0, but this type of code continues to be created by * BIOS vendors. In order to support the disassembly and recompilation of * such code (and the porting of ASL code to iASL), iASL supports this * code in violation of the current ACPI specification. * * The grammar change to support module-level code is to revert the * {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the * original use of {TermList} instead (see below.) This allows the use * of Type1 and Type2 opcodes at module level. * * 04/2016: The module-level code is now allowed in the following terms: * DeviceTerm, PowerResTerm, ProcessorTerm, ScopeTerm, ThermalZoneTerm. * The ObjectList term is obsolete and has been removed. */ DefinitionBlockTerm : PARSEOP_DEFINITION_BLOCK PARSEOP_OPEN_PAREN {$$ = TrCreateLeafOp (PARSEOP_DEFINITION_BLOCK); COMMENT_CAPTURE_OFF;} String ',' String ',' ByteConst ',' String ',' String ',' DWordConst PARSEOP_CLOSE_PAREN {TrSetOpIntegerWidth ($6,$8); TrSetOpEndLineNumber ($3); COMMENT_CAPTURE_ON;} '{' TermList '}' {$$ = TrLinkOpChildren ($3,7, $4,$6,$8,$10,$12,$14,$18);} ; DefinitionBlockList : DefinitionBlockTerm | DefinitionBlockTerm DefinitionBlockList {$$ = TrLinkPeerOps (2, $1,$2);} ; /******* Basic ASCII identifiers **************************************************/ /* Allow IO, DMA, IRQ Resource macro and FOR macro names to also be used as identifiers */ NameString : NameSeg {} | PARSEOP_NAMESTRING {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) $1);} | PARSEOP_IO {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IO");} | PARSEOP_DMA {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "DMA");} | PARSEOP_IRQ {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IRQ");} | PARSEOP_FOR {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "FOR");} ; /* NameSeg : PARSEOP_NAMESEG {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESEG, (ACPI_NATIVE_INT) TrNormalizeNameSeg ($1));} ; */ NameSeg : PARSEOP_NAMESEG {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESEG, (ACPI_NATIVE_INT) AslCompilerlval.s);} ; /******* Fundamental argument/statement types ***********************************/ Term : Object {} | Type1Opcode {} | Type2Opcode {} | Type2IntegerOpcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);} | Type2StringOpcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);} | Type2BufferOpcode {} | Type2BufferOrStringOpcode {} | error {$$ = AslDoError(); yyclearin;} ; SuperName : SimpleName {} | DebugTerm {} | Type6Opcode {} ; Target : {$$ = TrCreateNullTargetOp ();} /* Placeholder is a ZeroOp object */ | ',' {$$ = TrCreateNullTargetOp ();} /* Placeholder is a ZeroOp object */ | ',' SuperName {$$ = TrSetOpFlags ($2, OP_IS_TARGET);} ; /* RequiredTarget : ',' SuperName {$$ = TrSetOpFlags ($2, OP_IS_TARGET);} ; */ TermArg : SimpleName {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);} | Type2Opcode {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);} | DataObject {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);} | PARSEOP_OPEN_PAREN TermArg PARSEOP_CLOSE_PAREN {$$ = TrSetOpFlags ($2, OP_IS_TERM_ARG);} ; /* NOTE: Removed from TermArg due to reduce/reduce conflicts: | Type2IntegerOpcode {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);} | Type2StringOpcode {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);} | Type2BufferOpcode {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);} | Type2BufferOrStringOpcode {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);} */ MethodInvocationTerm : NameString PARSEOP_OPEN_PAREN {TrSetOpIntegerValue (PARSEOP_METHODCALL, $1); COMMENT_CAPTURE_OFF;} ArgList PARSEOP_CLOSE_PAREN {$$ = TrLinkChildOp ($1,$4); COMMENT_CAPTURE_ON;} ; /* OptionalCount must appear before ByteList or an incorrect reduction will result */ OptionalCount : {$$ = TrCreateLeafOp (PARSEOP_ONES);} /* Placeholder is a OnesOp object */ | ',' {$$ = TrCreateLeafOp (PARSEOP_ONES);} /* Placeholder is a OnesOp object */ | ',' TermArg {$$ = $2;} ; /* * Data count for buffers and packages (byte count for buffers, * element count for packages). */ OptionalDataCount /* Legacy ASL */ : {$$ = NULL;} | PARSEOP_OPEN_PAREN TermArg PARSEOP_CLOSE_PAREN {$$ = $2;} | PARSEOP_OPEN_PAREN PARSEOP_CLOSE_PAREN {$$ = NULL;} /* C-style (ASL+) -- adds equals term */ | PARSEOP_EXP_EQUALS {$$ = NULL;} | PARSEOP_OPEN_PAREN TermArg PARSEOP_CLOSE_PAREN PARSEOP_EXP_EQUALS {$$ = $2;} | PARSEOP_OPEN_PAREN PARSEOP_CLOSE_PAREN String PARSEOP_EXP_EQUALS {$$ = NULL;} ; /******* List Terms **************************************************/ /* ACPI 3.0 -- allow semicolons between terms */ TermList : {$$ = NULL;} | TermList Term {$$ = TrLinkPeerOp ( TrSetOpFlags ($1, OP_RESULT_NOT_USED),$2);} | TermList Term ';' {$$ = TrLinkPeerOp ( TrSetOpFlags ($1, OP_RESULT_NOT_USED),$2);} | TermList ';' Term {$$ = TrLinkPeerOp ( TrSetOpFlags ($1, OP_RESULT_NOT_USED),$3);} | TermList ';' Term ';' {$$ = TrLinkPeerOp ( TrSetOpFlags ($1, OP_RESULT_NOT_USED),$3);} ; ArgList : {$$ = NULL;} | TermArg | ArgList ',' /* Allows a trailing comma at list end */ | ArgList ',' TermArg {$$ = TrLinkPeerOp ($1,$3);} ; ByteList : {$$ = NULL;} | ByteConstExpr | ByteList ',' /* Allows a trailing comma at list end */ | ByteList ',' ByteConstExpr {$$ = TrLinkPeerOp ($1,$3);} ; DWordList : {$$ = NULL;} | DWordConstExpr | DWordList ',' /* Allows a trailing comma at list end */ | DWordList ',' DWordConstExpr {$$ = TrLinkPeerOp ($1,$3);} ; FieldUnitList : {$$ = NULL;} | FieldUnit | FieldUnitList ',' /* Allows a trailing comma at list end */ | FieldUnitList ',' FieldUnit {$$ = TrLinkPeerOp ($1,$3);} ; FieldUnit : FieldUnitEntry {} | OffsetTerm {} | AccessAsTerm {} | ConnectionTerm {} ; FieldUnitEntry : ',' AmlPackageLengthTerm {$$ = TrCreateOp (PARSEOP_RESERVED_BYTES,1,$2);} | NameSeg ',' AmlPackageLengthTerm {$$ = TrLinkChildOp ($1,$3);} ; Object : CompilerDirective {} | NamedObject {} | NameSpaceModifier {} /* | StructureTerm {} */ ; PackageList : {$$ = NULL;} | PackageElement | PackageList ',' /* Allows a trailing comma at list end */ | PackageList ',' PackageElement {$$ = TrLinkPeerOp ($1,$3);} ; PackageElement : DataObject {} | NameString {} ; /* Rules for specifying the type of one method argument or return value */ ParameterTypePackage : {$$ = NULL;} | ObjectTypeKeyword {$$ = $1;} | ParameterTypePackage ',' ObjectTypeKeyword {$$ = TrLinkPeerOps (2,$1,$3);} ; ParameterTypePackageList : {$$ = NULL;} | ObjectTypeKeyword {$$ = TrLinkOpChildren ( TrCreateLeafOp (PARSEOP_DEFAULT_ARG),1,$1);} | '{' ParameterTypePackage '}' {$$ = TrLinkOpChildren ( TrCreateLeafOp (PARSEOP_DEFAULT_ARG),1,$2);} ; OptionalParameterTypePackage : {$$ = NULL;} | ',' ParameterTypePackageList {$$ = $2;} ; /* Rules for specifying the types for method arguments */ ParameterTypesPackage : ParameterTypePackageList {$$ = $1;} | ParameterTypesPackage ',' ParameterTypePackageList {$$ = TrLinkPeerOps (2,$1,$3);} ; ParameterTypesPackageList : {$$ = NULL;} | ObjectTypeKeyword {$$ = TrLinkOpChildren ( TrCreateLeafOp (PARSEOP_DEFAULT_ARG),1,$1);} | '{' ParameterTypesPackage '}' {$$ = TrLinkOpChildren ( TrCreateLeafOp (PARSEOP_DEFAULT_ARG),1,$2);} ; OptionalParameterTypesPackage : {$$ = NULL;} | ',' ParameterTypesPackageList {$$ = $2;} ; /* * Case-Default list; allow only one Default term and unlimited Case terms */ CaseDefaultTermList : {$$ = NULL;} | CaseTerm {} | DefaultTerm {} | CaseDefaultTermList CaseTerm {$$ = TrLinkPeerOp ($1,$2);} | CaseDefaultTermList DefaultTerm {$$ = TrLinkPeerOp ($1,$2);} /* Original - attempts to force zero or one default term within the switch */ /* CaseDefaultTermList : {$$ = NULL;} | CaseTermList DefaultTerm CaseTermList {$$ = TrLinkPeerOp ($1,TrLinkPeerOp ($2, $3));} | CaseTermList CaseTerm {$$ = TrLinkPeerOp ($1,$2);} ; CaseTermList : {$$ = NULL;} | CaseTerm {} | CaseTermList CaseTerm {$$ = TrLinkPeerOp ($1,$2);} ; */ /******************************************************************************* * * ASL Data and Constant Terms * ******************************************************************************/ DataObject : BufferData {} | PackageData {} | IntegerData {} | StringData {} ; BufferData : Type5Opcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);} | Type2BufferOrStringOpcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);} | Type2BufferOpcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);} | BufferTerm {} ; PackageData : PackageTerm {} ; IntegerData : Type2IntegerOpcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);} | Type3Opcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);} | Integer {} | ConstTerm {} ; StringData : Type2StringOpcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);} | String {} ; StringLiteral : String {} ; ByteConst : Integer {$$ = TrSetOpIntegerValue (PARSEOP_BYTECONST, $1);} ; WordConst : Integer {$$ = TrSetOpIntegerValue (PARSEOP_WORDCONST, $1);} ; DWordConst : Integer {$$ = TrSetOpIntegerValue (PARSEOP_DWORDCONST, $1);} ; QWordConst : Integer {$$ = TrSetOpIntegerValue (PARSEOP_QWORDCONST, $1);} ; /* * The OP_COMPILE_TIME_CONST flag in the following constant expressions * enables compile-time constant folding to reduce the Type3Opcodes/Type2IntegerOpcodes * to simple integers. It is an error if these types of expressions cannot be * reduced, since the AML grammar for ****ConstExpr requires a simple constant. * Note: The required byte length of the constant is passed through to the * constant folding code in the node AmlLength field. */ ByteConstExpr : Type3Opcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST); TrSetOpAmlLength ($1, 1);} | Type2IntegerOpcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST); TrSetOpAmlLength ($1, 1);} | ConstExprTerm {$$ = TrSetOpIntegerValue (PARSEOP_BYTECONST, $1);} | ByteConst {} ; WordConstExpr : Type3Opcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST); TrSetOpAmlLength ($1, 2);} | Type2IntegerOpcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST); TrSetOpAmlLength ($1, 2);} | ConstExprTerm {$$ = TrSetOpIntegerValue (PARSEOP_WORDCONST, $1);} | WordConst {} ; DWordConstExpr : Type3Opcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST); TrSetOpAmlLength ($1, 4);} | Type2IntegerOpcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST); TrSetOpAmlLength ($1, 4);} | ConstExprTerm {$$ = TrSetOpIntegerValue (PARSEOP_DWORDCONST, $1);} | DWordConst {} ; QWordConstExpr : Type3Opcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST); TrSetOpAmlLength ($1, 8);} | Type2IntegerOpcode {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST); TrSetOpAmlLength ($1, 8);} | ConstExprTerm {$$ = TrSetOpIntegerValue (PARSEOP_QWORDCONST, $1);} | QWordConst {} ; ConstTerm : ConstExprTerm {} | PARSEOP_REVISION {$$ = TrCreateLeafOp (PARSEOP_REVISION);} ; ConstExprTerm : PARSEOP_ZERO {$$ = TrCreateValuedLeafOp (PARSEOP_ZERO, 0);} | PARSEOP_ONE {$$ = TrCreateValuedLeafOp (PARSEOP_ONE, 1);} | PARSEOP_ONES {$$ = TrCreateValuedLeafOp (PARSEOP_ONES, ACPI_UINT64_MAX);} | PARSEOP___DATE__ {$$ = TrCreateConstantLeafOp (PARSEOP___DATE__);} | PARSEOP___FILE__ {$$ = TrCreateConstantLeafOp (PARSEOP___FILE__);} | PARSEOP___LINE__ {$$ = TrCreateConstantLeafOp (PARSEOP___LINE__);} | PARSEOP___PATH__ {$$ = TrCreateConstantLeafOp (PARSEOP___PATH__);} | PARSEOP___METHOD__ {$$ = TrCreateConstantLeafOp (PARSEOP___METHOD__);} ; Integer : PARSEOP_INTEGER {$$ = TrCreateValuedLeafOp (PARSEOP_INTEGER, AslCompilerlval.i);} ; String : PARSEOP_STRING_LITERAL {$$ = TrCreateValuedLeafOp (PARSEOP_STRING_LITERAL, (ACPI_NATIVE_INT) AslCompilerlval.s);} ; /******************************************************************************* * * ASL Opcode Terms * ******************************************************************************/ CompilerDirective : IncludeTerm {} | IncludeEndTerm {} | ExternalTerm {} ; NamedObject : BankFieldTerm {} | CreateBitFieldTerm {} | CreateByteFieldTerm {} | CreateDWordFieldTerm {} | CreateFieldTerm {} | CreateQWordFieldTerm {} | CreateWordFieldTerm {} | DataRegionTerm {} | DeviceTerm {} | EventTerm {} | FieldTerm {} | FunctionTerm {} | IndexFieldTerm {} | MethodTerm {} | MutexTerm {} | OpRegionTerm {} | PowerResTerm {} | ProcessorTerm {} | ThermalZoneTerm {} ; NameSpaceModifier : AliasTerm {} | NameTerm {} /* | NameTermAslPlus {} */ | ScopeTerm {} ; SimpleName : NameString {} | LocalTerm {} | ArgTerm {} ; /* For ObjectType(), SuperName except for MethodInvocationTerm */ ObjectTypeSource : SimpleName {} | DebugTerm {} | RefOfTerm {} | DerefOfTerm {} | IndexTerm {} | IndexExpTerm {} ; /* For DeRefOf(), SuperName except for DerefOf and Debug */ DerefOfSource : SimpleName {} | RefOfTerm {} | DerefOfTerm {} | IndexTerm {} | IndexExpTerm {} | StoreTerm {} | EqualsTerm {} | MethodInvocationTerm {} ; /* For RefOf(), SuperName except for RefOf and MethodInvocationTerm */ RefOfSource : SimpleName {} | DebugTerm {} | DerefOfTerm {} | IndexTerm {} | IndexExpTerm {} ; /* For CondRefOf(), SuperName except for RefOf and MethodInvocationTerm */ CondRefOfSource : SimpleName {} | DebugTerm {} | DerefOfTerm {} | IndexTerm {} | IndexExpTerm {} ; /* * Opcode types, as defined in the ACPI specification */ Type1Opcode : BreakTerm {} | BreakPointTerm {} | ContinueTerm {} | FatalTerm {} | ForTerm {} | ElseIfTerm {} | NoOpTerm {} | NotifyTerm {} | ReleaseTerm {} | ResetTerm {} | ReturnTerm {} | SignalTerm {} | SleepTerm {} | StallTerm {} | SwitchTerm {} | UnloadTerm {} | WhileTerm {} ; Type2Opcode : AcquireTerm {} | CondRefOfTerm {} | CopyObjectTerm {} | DerefOfTerm {} | LoadTerm {} /* Moved from Type1 -- now returns an integer (ACPI 6.4) */ | ObjectTypeTerm {} | RefOfTerm {} | SizeOfTerm {} | StoreTerm {} | EqualsTerm {} | TimerTerm {} | WaitTerm {} | MethodInvocationTerm {} ; /* * Type 3/4/5 opcodes */ Type2IntegerOpcode /* "Type3" opcodes */ : Expression {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);} | AddTerm {} | AndTerm {} | DecTerm {} | DivideTerm {} | FindSetLeftBitTerm {} | FindSetRightBitTerm {} | FromBCDTerm {} | IncTerm {} | IndexTerm {} /* | StructureIndexTerm {} */ /* | StructurePointerTerm {} */ | LAndTerm {} | LEqualTerm {} | LGreaterTerm {} | LGreaterEqualTerm {} | LLessTerm {} | LLessEqualTerm {} | LNotTerm {} | LNotEqualTerm {} | LoadTableTerm {} | LOrTerm {} | MatchTerm {} | ModTerm {} | MultiplyTerm {} | NAndTerm {} | NOrTerm {} | NotTerm {} | OrTerm {} | ShiftLeftTerm {} | ShiftRightTerm {} | SubtractTerm {} | ToBCDTerm {} | ToIntegerTerm {} | XOrTerm {} ; Type2StringOpcode /* "Type4" Opcodes */ : ToDecimalStringTerm {} | ToHexStringTerm {} | ToStringTerm {} ; Type2BufferOpcode /* "Type5" Opcodes */ : ToBufferTerm {} | ConcatResTerm {} ; Type2BufferOrStringOpcode : ConcatTerm {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);} | PrintfTerm {} | FprintfTerm {} | MidTerm {} ; /* * A type 3 opcode evaluates to an Integer and cannot have a destination operand */ Type3Opcode : EISAIDTerm {} ; /* Obsolete Type4Opcode : ConcatTerm {} | ToDecimalStringTerm {} | ToHexStringTerm {} | MidTerm {} | ToStringTerm {} ; */ /* Type 5 opcodes are a subset of Type2 opcodes, and return a constant */ Type5Opcode : ResourceTemplateTerm {} | UnicodeTerm {} | ToPLDTerm {} | ToUUIDTerm {} ; Type6Opcode : RefOfTerm {} | DerefOfTerm {} | IndexTerm {} | IndexExpTerm {} /* | StructureIndexTerm {} */ /* | StructurePointerTerm {} */ | MethodInvocationTerm {} ; /******************************************************************************* * * ASL Helper Terms * ******************************************************************************/ AmlPackageLengthTerm : Integer {$$ = TrSetOpIntegerValue (PARSEOP_PACKAGE_LENGTH, (ACPI_PARSE_OBJECT *) $1);} ; NameStringItem : ',' NameString {$$ = $2;} | ',' error {$$ = AslDoError (); yyclearin;} ; TermArgItem : ',' TermArg {$$ = $2;} | ',' error {$$ = AslDoError (); yyclearin;} ; OptionalReference : {$$ = TrCreateLeafOp (PARSEOP_ZERO);} /* Placeholder is a ZeroOp object */ | ',' {$$ = TrCreateLeafOp (PARSEOP_ZERO);} /* Placeholder is a ZeroOp object */ | ',' TermArg {$$ = $2;} ; OptionalReturnArg : {$$ = TrSetOpFlags (TrCreateLeafOp (PARSEOP_ZERO), OP_IS_NULL_RETURN);} /* Placeholder is a ZeroOp object */ | TermArg {$$ = $1;} ; OptionalSerializeRuleKeyword : {$$ = NULL;} | ',' {$$ = NULL;} | ',' SerializeRuleKeyword {$$ = $2;} ; OptionalTermArg : {$$ = TrCreateLeafOp (PARSEOP_DEFAULT_ARG);} | TermArg {$$ = $1;} ; OptionalWordConst : {$$ = NULL;} | WordConst {$$ = $1;} ; src/acpica/source/compiler/aslstartup.c000066400000000000000000000512071465205512700205610ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslstartup - Compiler startup routines, called from main * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "actables.h" #include "acdisasm.h" #include "acapps.h" #include "acconvert.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslstartup") /* Local prototypes */ static UINT8 AslDetectSourceFileType ( ASL_FILE_INFO *Info); /* Globals */ static BOOLEAN AslToFile = TRUE; /******************************************************************************* * * FUNCTION: AslInitializeGlobals * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Re-initialize globals needed to restart the compiler. This * allows multiple files to be disassembled and/or compiled. * ******************************************************************************/ void AslInitializeGlobals ( void) { UINT32 i; /* Init compiler globals */ AslGbl_SyntaxError = 0; AslGbl_CurrentColumn = 0; AslGbl_CurrentLineNumber = 1; AslGbl_LogicalLineNumber = 1; AslGbl_CurrentLineOffset = 0; AslGbl_InputFieldCount = 0; AslGbl_InputByteCount = 0; AslGbl_NsLookupCount = 0; AslGbl_LineBufPtr = AslGbl_CurrentLineBuffer; AslGbl_ErrorLog = NULL; AslGbl_NextError = NULL; AslGbl_Signature = NULL; AslGbl_FileType = 0; AslGbl_TotalExecutableOpcodes = 0; AslGbl_TotalNamedObjects = 0; AslGbl_TotalKeywords = 0; AslGbl_TotalParseNodes = 0; AslGbl_TotalMethods = 0; AslGbl_TotalAllocations = 0; AslGbl_TotalAllocated = 0; AslGbl_TotalFolds = 0; AslGbl_NextEvent = 0; for (i = 0; i < ASL_NUM_REPORT_LEVELS; i++) { AslGbl_ExceptionCount[i] = 0; } if (AcpiGbl_CaptureComments) { AslGbl_CommentState.SpacesBefore = 0; AslGbl_CommentState.CommentType = 1; AslGbl_CommentState.LatestParseOp = NULL; AslGbl_CommentState.ParsingParenBraceNode = NULL; AslGbl_CommentState.CaptureComments = TRUE; } } /******************************************************************************* * * FUNCTION: AslDetectSourceFileType * * PARAMETERS: Info - Name/Handle for the file (must be open) * * RETURN: File Type * * DESCRIPTION: Determine the type of the input file. Either binary (contains * non-ASCII characters), ASL file, or an ACPI Data Table file. * ******************************************************************************/ static UINT8 AslDetectSourceFileType ( ASL_FILE_INFO *Info) { char *FileChar; UINT8 Type = ASL_INPUT_TYPE_ASCII_DATA; /* default */ ACPI_STATUS Status; /* Check for 100% ASCII source file (comments are ignored) */ Status = FlIsFileAsciiSource (Info->Filename, FALSE); if (ACPI_SUCCESS (Status)) { /* * File contains ASCII source code. Determine if this is an ASL * file or an ACPI data table file. */ while (fgets (AslGbl_CurrentLineBuffer, AslGbl_LineBufferSize, Info->Handle)) { /* Uppercase the buffer for caseless compare */ FileChar = AslGbl_CurrentLineBuffer; while (*FileChar) { *FileChar = (char) toupper ((int) *FileChar); FileChar++; } /* Presence of "DefinitionBlock" indicates actual ASL code */ if (strstr (AslGbl_CurrentLineBuffer, "DEFINITIONBLOCK")) { /* Appears to be an ASL file */ Type = ASL_INPUT_TYPE_ASCII_ASL; goto Cleanup; } } /* Appears to be an ASCII data table source file */ Type = ASL_INPUT_TYPE_ASCII_DATA; goto Cleanup; } /* * We have some sort of binary table; reopen in binary mode, then * check for valid ACPI table */ fclose (Info->Handle); Info->Handle = fopen (Info->Filename, "rb"); if (!Info->Handle) { fprintf (stderr, "Could not open input file %s\n", Info->Filename); } Status = AcValidateTableHeader (Info->Handle, 0); if (ACPI_SUCCESS (Status)) { fprintf (stderr, "Binary file appears to be a valid ACPI table, disassembling\n"); Type = ASL_INPUT_TYPE_BINARY_ACPI_TABLE; goto Cleanup; } else { fprintf (stderr, "Binary file does not contain a valid standard ACPI table\n"); } Type = ASL_INPUT_TYPE_BINARY; Cleanup: /* Must seek back to the start of the file */ fseek (Info->Handle, 0, SEEK_SET); return (Type); } /******************************************************************************* * * FUNCTION: AslDoDisassembly * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Initiate AML file disassembly. Uses ACPICA subsystem to build * namespace. This function assumes that the ACPI subsystem has * been initialized. The caller of the initialization will also * terminate the ACPI subsystem. * ******************************************************************************/ ACPI_STATUS AslDoDisassembly ( void) { ACPI_STATUS Status; Status = AcpiAllocateRootTable (4); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not initialize ACPI Table Manager, %s\n", AcpiFormatException (Status)); return (Status); } /* This is where the disassembly happens */ AcpiGbl_DmOpt_Disasm = TRUE; Status = AdAmlDisassemble (AslToFile, AslGbl_Files[ASL_FILE_INPUT].Filename, AslGbl_OutputFilenamePrefix, &AslGbl_Files[ASL_FILE_INPUT].Filename); if (ACPI_FAILURE (Status)) { return (Status); } /* Check if any control methods were unresolved */ AcpiDmUnresolvedWarning (0); /* Clear Error log */ AeClearErrorLog (); /* * AslGbl_Files[ASL_FILE_INPUT].Filename was replaced with the * .DSL disassembly file, which can now be compiled if requested */ if (AslGbl_DoCompile) { AcpiOsPrintf ("\nCompiling \"%s\"\n", AslGbl_Files[ASL_FILE_INPUT].Filename); return (AE_CTRL_CONTINUE); } return (AE_OK); } /******************************************************************************* * * FUNCTION: AslDoOneFile * * PARAMETERS: Filename - Name of the file * * RETURN: Status * * DESCRIPTION: Process a single file - either disassemble, compile, or both * ******************************************************************************/ ACPI_STATUS AslDoOneFile ( char *Filename) { ACPI_STATUS Status; UINT8 Event; ASL_GLOBAL_FILE_NODE *FileNode; /* Re-initialize "some" compiler/preprocessor globals */ AslInitializeGlobals (); PrInitializeGlobals (); /* * Extract the directory path. This path is used for possible include * files and the optional AML filename embedded in the input file * DefinitionBlock declaration. */ Status = FlSplitInputPathname (Filename, &AslGbl_DirectoryPath, NULL); if (ACPI_FAILURE (Status)) { return (Status); } /* * There was an input file detected at this point. Each input ASL file is * associated with one global file node consisting of the input file and * all output files associated with it. This is useful when compiling * multiple files in one command. */ Status = FlInitOneFile(Filename); if (ACPI_FAILURE (Status)) { return (AE_ERROR); } /* Take a copy of the input filename, convert any backslashes */ AslGbl_Files[ASL_FILE_INPUT].Filename = UtLocalCacheCalloc (strlen (Filename) + 1); strcpy (AslGbl_Files[ASL_FILE_INPUT].Filename, Filename); UtConvertBackslashes (AslGbl_Files[ASL_FILE_INPUT].Filename); /* * Open the input file. Here, this could be an ASCII source file, * either an ASL file or a Data Table file, or a binary AML file * or binary data table file (For disassembly). */ Status = FlOpenInputFile (AslGbl_Files[ASL_FILE_INPUT].Filename); if (ACPI_FAILURE (Status)) { AePrintErrorLog (ASL_FILE_STDERR); return (AE_ERROR); } FileNode = FlGetCurrentFileNode(); /* Determine input file type */ AslGbl_FileType = AslDetectSourceFileType (&AslGbl_Files[ASL_FILE_INPUT]); FileNode->FileType = AslGbl_FileType; if (AslGbl_FileType == ASL_INPUT_TYPE_BINARY) { return (AE_ERROR); } FileNode->OriginalInputFileSize = FlGetFileSize (ASL_FILE_INPUT); /* * If -p not specified, we will use the input filename as the * output filename prefix */ if (AslGbl_UseDefaultAmlFilename) { AslGbl_OutputFilenamePrefix = AslGbl_Files[ASL_FILE_INPUT].Filename; } /* * Open the output file. Note: by default, the name of this file comes from * the table descriptor within the input file. */ if (AslGbl_FileType == ASL_INPUT_TYPE_ASCII_ASL) { Event = UtBeginEvent ("Open AML output file"); Status = FlOpenAmlOutputFile (AslGbl_OutputFilenamePrefix); UtEndEvent (Event); if (ACPI_FAILURE (Status)) { AePrintErrorLog (ASL_FILE_STDERR); return (AE_ERROR); } } /* Open the optional output files (listings, etc.) */ Status = FlOpenMiscOutputFiles (AslGbl_OutputFilenamePrefix); if (ACPI_FAILURE (Status)) { AePrintErrorLog (ASL_FILE_STDERR); return (AE_ERROR); } /* * Compilation of ASL source versus DataTable source uses different * compiler subsystems */ switch (AslGbl_FileType) { /* * Data Table Compilation */ case ASL_INPUT_TYPE_ASCII_DATA: Status = DtDoCompile (); if (ACPI_FAILURE (Status)) { return (Status); } if (AslGbl_Signature) { AslGbl_Signature = NULL; } /* Check if any errors occurred during compile */ Status = AslCheckForErrorExit (); if (ACPI_FAILURE (Status)) { return (Status); } /* Cleanup (for next source file) and exit */ AeClearErrorLog (); PrTerminatePreprocessor (); return (Status); /* * ASL Compilation */ case ASL_INPUT_TYPE_ASCII_ASL: Status = CmDoCompile (); if (ACPI_FAILURE (Status)) { PrTerminatePreprocessor (); return (Status); } /* * At this point, we know how many lines are in the input file. Save it * to display for post-compilation summary. */ FileNode->TotalLineCount = AslGbl_CurrentLineNumber; return (AE_OK); /* * Binary ACPI table was auto-detected, disassemble it */ case ASL_INPUT_TYPE_BINARY_ACPI_TABLE: /* We have what appears to be an ACPI table, disassemble it */ FlCloseFile (ASL_FILE_INPUT); AslGbl_DoCompile = FALSE; AcpiGbl_DisasmFlag = TRUE; Status = AslDoDisassembly (); return (Status); /* Unknown binary table */ case ASL_INPUT_TYPE_BINARY: AePrintErrorLog (ASL_FILE_STDERR); return (AE_ERROR); default: printf ("Unknown file type %X\n", AslGbl_FileType); return (AE_ERROR); } } /******************************************************************************* * * FUNCTION: AslCheckForErrorExit * * PARAMETERS: None. Examines global exception count array * * RETURN: Status * * DESCRIPTION: Determine if compiler should abort with error status * ******************************************************************************/ ACPI_STATUS AslCheckForErrorExit ( void) { /* * Return non-zero exit code if there have been errors, unless the * global ignore error flag has been set */ if (!AslGbl_IgnoreErrors) { if (AslGbl_ExceptionCount[ASL_ERROR] > 0) { return (AE_ERROR); } /* Optionally treat warnings as errors */ if (AslGbl_WarningsAsErrors) { if ((AslGbl_ExceptionCount[ASL_WARNING] > 0) || (AslGbl_ExceptionCount[ASL_WARNING2] > 0) || (AslGbl_ExceptionCount[ASL_WARNING3] > 0)) { AslError (ASL_ERROR, ASL_MSG_WARNING_AS_ERROR, NULL, "(reporting warnings as errors)"); return (AE_ERROR); } } } return (AE_OK); } src/acpica/source/compiler/aslstubs.c000066400000000000000000000323661465205512700202240ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslstubs - Stubs used to link to Aml interpreter * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "acdispat.h" #include "actables.h" #include "acevents.h" #include "acinterp.h" #include "acnamesp.h" #include "acparser.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslstubs") /* * Stubs to simplify linkage to the ACPICA core subsystem. * Things like Events, Global Lock, etc. are not used * by the compiler, so they are stubbed out here. */ ACPI_STATUS AcpiNsInitializeObjects ( void) { return (AE_OK); } ACPI_STATUS AcpiPsExecuteTable ( ACPI_EVALUATE_INFO *Info) { return (AE_OK); } ACPI_STATUS AcpiHwReadPort ( ACPI_IO_ADDRESS Address, UINT32 *Value, UINT32 Width) { return (AE_OK); } ACPI_STATUS AcpiHwWritePort ( ACPI_IO_ADDRESS Address, UINT32 Value, UINT32 Width) { return (AE_OK); } ACPI_STATUS AcpiDsMethodError ( ACPI_STATUS Status, ACPI_WALK_STATE *WalkState) { return (Status); } ACPI_STATUS AcpiDsMethodDataGetValue ( UINT8 Type, UINT32 Index, ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT **DestDesc) { return (AE_OK); } ACPI_STATUS AcpiDsMethodDataGetNode ( UINT8 Type, UINT32 Index, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE **Node) { return (AE_OK); } ACPI_STATUS AcpiDsStoreObjectToLocal ( UINT8 Type, UINT32 Index, ACPI_OPERAND_OBJECT *SrcDesc, ACPI_WALK_STATE *WalkState) { return (AE_OK); } ACPI_STATUS AcpiEvInstallRegionHandlers ( void) { return (AE_OK); } ACPI_STATUS AcpiEvQueueNotifyRequest ( ACPI_NAMESPACE_NODE *Node, UINT32 NotifyValue) { return (AE_OK); } BOOLEAN AcpiEvIsNotifyObject ( ACPI_NAMESPACE_NODE *Node) { return (FALSE); } #if (!ACPI_REDUCED_HARDWARE) ACPI_STATUS AcpiEvDeleteGpeBlock ( ACPI_GPE_BLOCK_INFO *GpeBlock) { return (AE_OK); } void AcpiEvUpdateGpes ( ACPI_OWNER_ID TableOwnerId) { return; } ACPI_STATUS AcpiEvAcquireGlobalLock ( UINT16 Timeout) { return (AE_OK); } ACPI_STATUS AcpiEvReleaseGlobalLock ( void) { return (AE_OK); } #endif /* !ACPI_REDUCED_HARDWARE */ ACPI_STATUS AcpiEvInitializeRegion ( ACPI_OPERAND_OBJECT *RegionObj) { return (AE_OK); } ACPI_STATUS AcpiExReadDataFromField ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **RetBufferDesc) { return (AE_SUPPORT); } ACPI_STATUS AcpiExWriteDataToField ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ResultDesc) { return (AE_SUPPORT); } ACPI_STATUS AcpiExLoadTableOp ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT **ReturnDesc) { return (AE_SUPPORT); } ACPI_STATUS AcpiExUnloadTable ( ACPI_OPERAND_OBJECT *DdbHandle) { return (AE_SUPPORT); } ACPI_STATUS AcpiExLoadOp ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT *Target, ACPI_WALK_STATE *WalkState) { return (AE_SUPPORT); } void AcpiExDoDebugObject ( ACPI_OPERAND_OBJECT *SourceDesc, UINT32 Level, UINT32 Index) { return; } void AcpiExStartTraceMethod ( ACPI_NAMESPACE_NODE *MethodNode, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState) { return; } void AcpiExStopTraceMethod ( ACPI_NAMESPACE_NODE *MethodNode, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState) { return; } void AcpiExStartTraceOpcode ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState) { return; } void AcpiExStopTraceOpcode ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState) { return; } void AcpiExTracePoint ( ACPI_TRACE_EVENT_TYPE Type, BOOLEAN Begin, UINT8 *Aml, char *Pathname) { return; } ACPI_STATUS AcpiTbFindTable ( char *Signature, char *OemId, char *OemTableId, UINT32 *TableIndex) { return (AE_SUPPORT); } ACPI_STATUS AcpiNsLoadTable ( UINT32 TableIndex, ACPI_NAMESPACE_NODE *Node) { return (AE_NOT_IMPLEMENTED); } ACPI_STATUS AcpiDsRestartControlMethod ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT *ReturnDesc) { return (AE_OK); } void AcpiDsTerminateControlMethod ( ACPI_OPERAND_OBJECT *MethodDesc, ACPI_WALK_STATE *WalkState) { return; } ACPI_STATUS AcpiDsCallControlMethod ( ACPI_THREAD_STATE *Thread, ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { return (AE_OK); } ACPI_STATUS AcpiDsMethodDataInitArgs ( ACPI_OPERAND_OBJECT **Params, UINT32 MaxParamCount, ACPI_WALK_STATE *WalkState) { return (AE_OK); } src/acpica/source/compiler/aslsupport.l000066400000000000000000000743231465205512700206100ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslsupport.l - Flex/lex scanner C support routines. * NOTE: Included into aslcompile.l, not compiled by itself. * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ /* Configuration */ #define ASL_SPACES_PER_TAB 4 #define ASL_NORMAL_CHAR 0 #define ASL_ESCAPE_SEQUENCE 1 #define ASL_OCTAL_CONSTANT 2 #define ASL_HEX_CONSTANT 3 void yyerror (char const *s) { AcpiOsPrintf ("YYERROR: %s\n", s); } /******************************************************************************* * * FUNCTION: AslParserCleanup * * Used to delete the current buffer * ******************************************************************************/ void AslParserCleanup ( void) { yy_delete_buffer (YY_CURRENT_BUFFER); } /******************************************************************************* * * FUNCTION: AslDoLineDirective * * PARAMETERS: None. Uses input() to access current source code line * * RETURN: Updates global line number and filename * * DESCRIPTION: Handle #line directives emitted by the preprocessor. * * The #line directive is emitted by the preprocessor, and is used to * pass through line numbers from the original source code file to the * preprocessor output file (.i). This allows any compiler-generated * error messages to be displayed with the correct line number. * ******************************************************************************/ static void AslDoLineDirective ( void) { int c; char *Token; UINT32 LineNumber; char *Filename; UINT32 i; AslGbl_HasIncludeFiles = TRUE; /* Eat the entire line that contains the #line directive */ AslGbl_LineBufPtr = AslGbl_CurrentLineBuffer; while ((c = input()) != '\n' && c != EOF) { *AslGbl_LineBufPtr = (char) c; AslGbl_LineBufPtr++; } *AslGbl_LineBufPtr = 0; /* First argument is the actual line number */ Token = strtok (AslGbl_CurrentLineBuffer, " "); if (!Token) { goto ResetAndExit; } /* First argument is the line number */ LineNumber = (UINT32) UtDoConstant (Token); /* Emit the appropriate number of newlines */ AslGbl_CurrentColumn = 0; if (LineNumber > AslGbl_CurrentLineNumber) { for (i = 0; i < (LineNumber - AslGbl_CurrentLineNumber); i++) { FlWriteFile (ASL_FILE_SOURCE_OUTPUT, "\n", 1); AslGbl_CurrentColumn++; } } FlSetLineNumber (LineNumber); /* Second argument is the optional filename (in double quotes) */ Token = strtok (NULL, " \""); if (Token) { Filename = UtLocalCacheCalloc (strlen (Token) + 1); strcpy (Filename, Token); FlSetFilename (Filename); } /* Third argument is not supported at this time */ ResetAndExit: /* Reset globals for a new line */ AslGbl_CurrentLineOffset += AslGbl_CurrentColumn; AslGbl_CurrentColumn = 0; AslGbl_LineBufPtr = AslGbl_CurrentLineBuffer; } /******************************************************************************* * * FUNCTION: AslPopInputFileStack * * PARAMETERS: None * * RETURN: 0 if a node was popped, -1 otherwise * * DESCRIPTION: Pop the top of the input file stack and point the parser to * the saved parse buffer contained in the fnode. Also, set the * global line counters to the saved values. This function is * called when an include file reaches EOF. * ******************************************************************************/ int AslPopInputFileStack ( void) { ASL_FILE_NODE *Fnode; AslGbl_PreviousIncludeFilename = AslGbl_Files[ASL_FILE_INPUT].Filename; Fnode = AslGbl_IncludeFileStack; DbgPrint (ASL_PARSE_OUTPUT, "\nPop InputFile Stack, Fnode %p\n", Fnode); DbgPrint (ASL_PARSE_OUTPUT, "Include: Closing \"%s\"\n\n", AslGbl_Files[ASL_FILE_INPUT].Filename); if (!Fnode) { return (-1); } /* Close the current include file */ fclose (yyin); /* Update the top-of-stack */ AslGbl_IncludeFileStack = Fnode->Next; /* Reset global line counter and filename */ AslGbl_Files[ASL_FILE_INPUT].Filename = Fnode->Filename; AslGbl_CurrentLineNumber = Fnode->CurrentLineNumber; /* Point the parser to the popped file */ yy_delete_buffer (YY_CURRENT_BUFFER); yy_switch_to_buffer (Fnode->State); /* All done with this node */ ACPI_FREE (Fnode); return (0); } /******************************************************************************* * * FUNCTION: AslPushInputFileStack * * PARAMETERS: InputFile - Open file pointer * Filename - Name of the file * * RETURN: None * * DESCRIPTION: Push the InputFile onto the file stack, and point the parser * to this file. Called when an include file is successfully * opened. * ******************************************************************************/ void AslPushInputFileStack ( FILE *InputFile, char *Filename) { ASL_FILE_NODE *Fnode; YY_BUFFER_STATE State; /* Save the current state in an Fnode */ Fnode = UtLocalCalloc (sizeof (ASL_FILE_NODE)); Fnode->File = yyin; Fnode->Next = AslGbl_IncludeFileStack; Fnode->State = YY_CURRENT_BUFFER; Fnode->Filename = AslGbl_Files[ASL_FILE_INPUT].Filename; Fnode->CurrentLineNumber = AslGbl_CurrentLineNumber; /* Push it on the stack */ AslGbl_IncludeFileStack = Fnode; /* Point the parser to this file */ State = yy_create_buffer (InputFile, YY_BUF_SIZE); yy_switch_to_buffer (State); DbgPrint (ASL_PARSE_OUTPUT, "\nPush InputFile Stack, returning %p\n\n", InputFile); /* Reset the global line count and filename */ AslGbl_Files[ASL_FILE_INPUT].Filename = UtLocalCacheCalloc (strlen (Filename) + 1); strcpy (AslGbl_Files[ASL_FILE_INPUT].Filename, Filename); AslGbl_CurrentLineNumber = 1; yyin = InputFile; /* converter: reset the comment state to STANDARD_COMMENT */ AslGbl_CommentState.CommentType = STANDARD_COMMENT; } /******************************************************************************* * * FUNCTION: AslResetCurrentLineBuffer * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Reset the Line Buffer to zero, increment global line numbers. * ******************************************************************************/ void AslResetCurrentLineBuffer ( void) { if (AslGbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle) { FlWriteFile (ASL_FILE_SOURCE_OUTPUT, AslGbl_CurrentLineBuffer, AslGbl_LineBufPtr - AslGbl_CurrentLineBuffer); } AslGbl_CurrentLineOffset += AslGbl_CurrentColumn; AslGbl_CurrentColumn = 0; AslGbl_CurrentLineNumber++; AslGbl_LogicalLineNumber++; AslGbl_LineBufPtr = AslGbl_CurrentLineBuffer; } /******************************************************************************* * * FUNCTION: AslInsertLineBuffer * * PARAMETERS: SourceChar - One char from the input ASL source file * * RETURN: None * * DESCRIPTION: Put one character of the source file into the temp line buffer * ******************************************************************************/ void AslInsertLineBuffer ( int SourceChar) { UINT32 i; UINT32 Count = 1; if (SourceChar == EOF) { return; } AslGbl_InputByteCount++; /* Handle tabs. Convert to spaces */ if (SourceChar == '\t') { SourceChar = ' '; Count = ASL_SPACES_PER_TAB - (AslGbl_CurrentColumn & (ASL_SPACES_PER_TAB-1)); } for (i = 0; i < Count; i++) { AslGbl_CurrentColumn++; /* Insert the character into the line buffer */ *AslGbl_LineBufPtr = (UINT8) SourceChar; AslGbl_LineBufPtr++; if (AslGbl_LineBufPtr > (AslGbl_CurrentLineBuffer + (AslGbl_LineBufferSize - 1))) { #if 0 /* * Warning if we have split a long source line. * */ sprintf (MsgBuffer, "Max %u", AslGbl_LineBufferSize); AslCommonError (ASL_WARNING, ASL_MSG_LONG_LINE, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, MsgBuffer); #endif AslResetCurrentLineBuffer (); } else if (SourceChar == '\n') { /* End of line */ AslResetCurrentLineBuffer (); } if (AcpiGbl_CaptureComments) { CvProcessCommentState ((char) SourceChar); } } } /******************************************************************************* * * FUNCTION: count * * PARAMETERS: yytext - Contains the matched keyword. * Type - Keyword/Character type: * 0 = anything except a keyword * 1 = pseudo-keywords * 2 = non-executable ASL keywords * 3 = executable ASL keywords * * RETURN: None * * DESCRIPTION: Count keywords and put them into the line buffer * ******************************************************************************/ static void count ( int Type) { char *p; switch (Type) { case 2: ++AslGbl_TotalKeywords; ++AslGbl_TotalNamedObjects; ++AslGbl_FilesList->TotalKeywords; ++AslGbl_FilesList->TotalNamedObjects; break; case 3: ++AslGbl_TotalKeywords; ++AslGbl_TotalExecutableOpcodes; ++AslGbl_FilesList->TotalKeywords; ++AslGbl_FilesList->TotalExecutableOpcodes; break; default: break; } for (p = yytext; *p != '\0'; p++) { AslInsertLineBuffer (*p); *AslGbl_LineBufPtr = 0; } } /******************************************************************************* * * FUNCTION: AslDoComment * * PARAMETERS: none * * RETURN: none * * DESCRIPTION: Process a standard comment. * ******************************************************************************/ static BOOLEAN AslDoComment ( void) { int c; int c1 = 0; char *StringBuffer = AslGbl_MsgBuffer; char *EndBuffer = AslGbl_MsgBuffer + ASL_MSG_BUFFER_SIZE; ASL_COMMENT_STATE CurrentState = AslGbl_CommentState; /* to reference later on */ AslInsertLineBuffer ('/'); AslInsertLineBuffer ('*'); if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { *StringBuffer = '/'; ++StringBuffer; *StringBuffer = '*'; ++StringBuffer; } loop: /* Eat chars until end-of-comment */ while (((c = input ()) != '*') && (c != EOF)) { AslInsertLineBuffer (c); if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { *StringBuffer = (char) c; ++StringBuffer; } c1 = c; } if (c == EOF) { goto EarlyEOF; } /* * Check for nested comment -- can help catch cases where a previous * comment was accidentally left unterminated */ if ((c1 == '/') && (c == '*')) { AslCommonError (ASL_WARNING, ASL_MSG_NESTED_COMMENT, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_InputByteCount, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, NULL); } /* Comment is closed only if the NEXT character is a slash */ AslInsertLineBuffer (c); if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { *StringBuffer = (char) c; ++StringBuffer; } if (((c1 = input ()) != '/') && (c1 != EOF)) { unput (c1); goto loop; } if (c1 == EOF) { goto EarlyEOF; } if (StringBuffer > EndBuffer) { goto BufferOverflow; } AslInsertLineBuffer (c1); CvProcessComment (CurrentState, StringBuffer, c1); return (TRUE); EarlyEOF: /* * Premature End-Of-File */ AslCommonError (ASL_ERROR, ASL_MSG_EARLY_EOF, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, NULL); return (FALSE); BufferOverflow: /* Comment was too long */ AslCommonError (ASL_ERROR, ASL_MSG_STRING_LENGTH, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, "Max length 4096"); return (FALSE); } /******************************************************************************* * * FUNCTION: AslDoCommentType2 * * PARAMETERS: none * * RETURN: none * * DESCRIPTION: Process a new "//" comment. Inline comments will be converted * to "/ *" standard comments. * ******************************************************************************/ static BOOLEAN AslDoCommentType2 ( void) { int c; char *StringBuffer = AslGbl_MsgBuffer; char *EndBuffer = AslGbl_MsgBuffer + ASL_MSG_BUFFER_SIZE; ASL_COMMENT_STATE CurrentState = AslGbl_CommentState; AslInsertLineBuffer ('/'); if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { AslInsertLineBuffer ('*'); *StringBuffer = '/'; ++StringBuffer; *StringBuffer = '*'; ++StringBuffer; } else { AslInsertLineBuffer ('/'); } while (((c = input ()) != '\n') && (c != EOF)) { AslInsertLineBuffer (c); if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { *StringBuffer = (char) c; ++StringBuffer; } } if (c == EOF) { /* End of file is OK, change to newline. Let parser detect EOF later */ c = '\n'; } if (StringBuffer > EndBuffer) { goto BufferOverflow; } AslInsertLineBuffer (c); CvProcessCommentType2 (CurrentState, StringBuffer); return (TRUE); BufferOverflow: /* Comment was too long */ AslCommonError (ASL_ERROR, ASL_MSG_STRING_LENGTH, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, "Max length 4096"); return (FALSE); } /******************************************************************************* * * FUNCTION: AslDoStringLiteral * * PARAMETERS: none * * RETURN: none * * DESCRIPTION: Process a string literal (surrounded by quotes) * ******************************************************************************/ static char AslDoStringLiteral ( void) { char *StringBuffer = AslGbl_MsgBuffer; char *EndBuffer = AslGbl_MsgBuffer + ASL_MSG_BUFFER_SIZE; char *CleanString; int StringChar; UINT32 State = ASL_NORMAL_CHAR; UINT32 i = 0; UINT8 Digit; char ConvertBuffer[4]; /* * Eat chars until end-of-literal. * NOTE: Put back the original surrounding quotes into the * source line buffer. */ AslInsertLineBuffer ('\"'); while ((StringChar = input()) != EOF) { AslInsertLineBuffer (StringChar); DoCharacter: switch (State) { case ASL_NORMAL_CHAR: switch (StringChar) { case '\\': /* * Special handling for backslash-escape sequence. We will * toss the backslash and translate the escape char(s). */ State = ASL_ESCAPE_SEQUENCE; continue; case '\"': /* String terminator */ goto CompletedString; default: break; } break; case ASL_ESCAPE_SEQUENCE: State = ASL_NORMAL_CHAR; switch (StringChar) { case 'a': StringChar = 0x07; /* BELL */ break; case 'b': StringChar = 0x08; /* BACKSPACE */ break; case 'f': StringChar = 0x0C; /* FORMFEED */ break; case 'n': StringChar = 0x0A; /* LINEFEED */ break; case 'r': StringChar = 0x0D; /* CARRIAGE RETURN*/ break; case 't': StringChar = 0x09; /* HORIZONTAL TAB */ break; case 'v': StringChar = 0x0B; /* VERTICAL TAB */ break; case 'x': State = ASL_HEX_CONSTANT; i = 0; continue; case '\'': /* Single Quote */ case '\"': /* Double Quote */ case '\\': /* Backslash */ break; default: /* Check for an octal digit (0-7) */ if (ACPI_IS_OCTAL_DIGIT (StringChar)) { State = ASL_OCTAL_CONSTANT; ConvertBuffer[0] = (char) StringChar; i = 1; continue; } /* Unknown escape sequence issue warning, but use the character */ AslCommonError (ASL_WARNING, ASL_MSG_INVALID_ESCAPE, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, NULL); break; } break; case ASL_OCTAL_CONSTANT: /* Up to three octal digits allowed */ if (!ACPI_IS_OCTAL_DIGIT (StringChar) || (i > 2)) { /* * Reached end of the constant. Convert the assembled ASCII * string and resume processing of the next character */ ConvertBuffer[i] = 0; Digit = (UINT8) strtoul (ConvertBuffer, NULL, 8); /* Check for NULL or non-ascii character (ignore if so) */ if ((Digit == 0) || (Digit > ACPI_ASCII_MAX)) { AslCommonError (ASL_WARNING, ASL_MSG_INVALID_STRING, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, NULL); } else { *StringBuffer = (char) Digit; StringBuffer++; if (StringBuffer >= EndBuffer) { goto BufferOverflow; } } State = ASL_NORMAL_CHAR; goto DoCharacter; break; } /* Append another digit of the constant */ ConvertBuffer[i] = (char) StringChar; i++; continue; case ASL_HEX_CONSTANT: /* Up to two hex digits allowed */ if (!isxdigit (StringChar) || (i > 1)) { /* * Reached end of the constant. Convert the assembled ASCII * string and resume processing of the next character */ ConvertBuffer[i] = 0; Digit = (UINT8) strtoul (ConvertBuffer, NULL, 16); /* Check for NULL or non-ascii character (ignore if so) */ if ((Digit == 0) || (Digit > ACPI_ASCII_MAX)) { AslCommonError (ASL_WARNING, ASL_MSG_INVALID_STRING, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, NULL); } else { *StringBuffer = (char) Digit; StringBuffer++; if (StringBuffer >= EndBuffer) { goto BufferOverflow; } } State = ASL_NORMAL_CHAR; goto DoCharacter; break; } /* Append another digit of the constant */ ConvertBuffer[i] = (char) StringChar; i++; continue; default: break; } /* Save the finished character */ *StringBuffer = (char) StringChar; StringBuffer++; if (StringBuffer >= EndBuffer) { goto BufferOverflow; } } /* * Premature End-Of-File */ AslCommonError (ASL_ERROR, ASL_MSG_EARLY_EOF, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, NULL); return (FALSE); CompletedString: /* * Null terminate the input string and copy string to a new buffer */ *StringBuffer = 0; CleanString = UtLocalCacheCalloc (strlen (AslGbl_MsgBuffer) + 1); strcpy (CleanString, AslGbl_MsgBuffer); AslCompilerlval.s = CleanString; return (TRUE); BufferOverflow: /* Literal was too long */ AslCommonError (ASL_ERROR, ASL_MSG_STRING_LENGTH, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, "Max length 4096"); return (FALSE); } src/acpica/source/compiler/aslsupport.y000066400000000000000000000235261465205512700206240ustar00rootroot00000000000000NoEcho(' /****************************************************************************** * * Module Name: aslsupport.y - Bison/Yacc C support functions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ ') /****************************************************************************** * * Local support functions * *****************************************************************************/ /*! [Begin] no source code translation */ int AslCompilerwrap(void) { return (1); } /*! [End] no source code translation !*/ void * AslLocalAllocate ( unsigned int Size) { void *Mem; DbgPrint (ASL_PARSE_OUTPUT, "\nAslLocalAllocate: Expanding Stack to %u\n\n", Size); Mem = ACPI_ALLOCATE_ZEROED (Size); if (!Mem) { AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_InputByteCount, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, NULL); exit (1); } return (Mem); } ACPI_PARSE_OBJECT * AslDoError ( void) { return (TrCreateLeafOp (PARSEOP_ERRORNODE)); } /******************************************************************************* * * FUNCTION: UtGetOpName * * PARAMETERS: ParseOpcode - Parser keyword ID * * RETURN: Pointer to the opcode name * * DESCRIPTION: Get the ascii name of the parse opcode * ******************************************************************************/ char * UtGetOpName ( UINT32 ParseOpcode) { #ifdef ASL_YYTNAME_START /* * First entries (ASL_YYTNAME_START) in yytname are special reserved names. * Ignore first 8 characters of the name */ return ((char *) yytname [(ParseOpcode - ASL_FIRST_PARSE_OPCODE) + ASL_YYTNAME_START] + 8); #else return ("[Unknown parser generator]"); #endif } src/acpica/source/compiler/asltokens.y000066400000000000000000000553641465205512700204200ustar00rootroot00000000000000NoEcho(' /****************************************************************************** * * Module Name: asltokens.y - Bison/Yacc token types * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ ') /****************************************************************************** * * Token types: These are returned by the lexer * * NOTE: This list MUST match the AslKeywordMapping table found * in aslmap.c EXACTLY! Double check any changes! * *****************************************************************************/ /* * Most tokens are defined to return , which is a UINT64. * * These tokens return , a pointer to the associated lexed string: * * PARSEOP_NAMESEG * PARSEOP_NAMESTRING * PARSEOP_STRING_LITERAL * PARSEOP_STRUCTURE_NAMESTRING */ %token PARSEOP_ACCESSAS %token PARSEOP_ACCESSATTRIB_BLOCK %token PARSEOP_ACCESSATTRIB_BLOCK_CALL %token PARSEOP_ACCESSATTRIB_BYTE %token PARSEOP_ACCESSATTRIB_BYTES %token PARSEOP_ACCESSATTRIB_QUICK %token PARSEOP_ACCESSATTRIB_RAW_BYTES %token PARSEOP_ACCESSATTRIB_RAW_PROCESS %token PARSEOP_ACCESSATTRIB_SND_RCV %token PARSEOP_ACCESSATTRIB_WORD %token PARSEOP_ACCESSATTRIB_WORD_CALL %token PARSEOP_ACCESSTYPE_ANY %token PARSEOP_ACCESSTYPE_BUF %token PARSEOP_ACCESSTYPE_BYTE %token PARSEOP_ACCESSTYPE_DWORD %token PARSEOP_ACCESSTYPE_QWORD %token PARSEOP_ACCESSTYPE_WORD %token PARSEOP_ACQUIRE %token PARSEOP_ADD %token PARSEOP_ADDRESSINGMODE_7BIT %token PARSEOP_ADDRESSINGMODE_10BIT %token PARSEOP_ADDRESSTYPE_ACPI %token PARSEOP_ADDRESSTYPE_MEMORY %token PARSEOP_ADDRESSTYPE_NVS %token PARSEOP_ADDRESSTYPE_RESERVED %token PARSEOP_ALIAS %token PARSEOP_AND %token PARSEOP_ARG0 %token PARSEOP_ARG1 %token PARSEOP_ARG2 %token PARSEOP_ARG3 %token PARSEOP_ARG4 %token PARSEOP_ARG5 %token PARSEOP_ARG6 %token PARSEOP_BANKFIELD %token PARSEOP_BITSPERBYTE_EIGHT %token PARSEOP_BITSPERBYTE_FIVE %token PARSEOP_BITSPERBYTE_NINE %token PARSEOP_BITSPERBYTE_SEVEN %token PARSEOP_BITSPERBYTE_SIX %token PARSEOP_BREAK %token PARSEOP_BREAKPOINT %token PARSEOP_BUFFER %token PARSEOP_BUSMASTERTYPE_MASTER %token PARSEOP_BUSMASTERTYPE_NOTMASTER %token PARSEOP_BYTECONST %token PARSEOP_CASE %token PARSEOP_CLOCKPHASE_FIRST %token PARSEOP_CLOCKPHASE_SECOND %token PARSEOP_CLOCKPOLARITY_HIGH %token PARSEOP_CLOCKPOLARITY_LOW %token PARSEOP_CONCATENATE %token PARSEOP_CONCATENATERESTEMPLATE %token PARSEOP_CONDREFOF %token PARSEOP_CONNECTION %token PARSEOP_CONTINUE %token PARSEOP_COPYOBJECT %token PARSEOP_CREATEBITFIELD %token PARSEOP_CREATEBYTEFIELD %token PARSEOP_CREATEDWORDFIELD %token PARSEOP_CREATEFIELD %token PARSEOP_CREATEQWORDFIELD %token PARSEOP_CREATEWORDFIELD %token PARSEOP_DATABUFFER %token PARSEOP_DATATABLEREGION %token PARSEOP_DEBUG %token PARSEOP_DECODETYPE_POS %token PARSEOP_DECODETYPE_SUB %token PARSEOP_DECREMENT %token PARSEOP_DEFAULT %token PARSEOP_DEFAULT_ARG %token PARSEOP_DEFINITION_BLOCK %token PARSEOP_DEREFOF %token PARSEOP_DEVICE %token PARSEOP_DEVICEPOLARITY_HIGH %token PARSEOP_DEVICEPOLARITY_LOW %token PARSEOP_DIVIDE %token PARSEOP_DMA %token PARSEOP_DMATYPE_A %token PARSEOP_DMATYPE_COMPATIBILITY %token PARSEOP_DMATYPE_B %token PARSEOP_DMATYPE_F %token PARSEOP_DWORDCONST %token PARSEOP_DWORDIO %token PARSEOP_DWORDMEMORY %token PARSEOP_DWORDSPACE %token PARSEOP_EISAID %token PARSEOP_ELSE %token PARSEOP_ELSEIF %token PARSEOP_ENDDEPENDENTFN %token PARSEOP_ENDIAN_BIG %token PARSEOP_ENDIAN_LITTLE %token PARSEOP_ENDTAG %token PARSEOP_ERRORNODE %token PARSEOP_EVENT %token PARSEOP_EXTENDEDIO %token PARSEOP_EXTENDEDMEMORY %token PARSEOP_EXTENDEDSPACE %token PARSEOP_EXTERNAL %token PARSEOP_FATAL %token PARSEOP_FIELD %token PARSEOP_FINDSETLEFTBIT %token PARSEOP_FINDSETRIGHTBIT %token PARSEOP_FIXEDDMA %token PARSEOP_FIXEDIO %token PARSEOP_FLOWCONTROL_HW %token PARSEOP_FLOWCONTROL_NONE %token PARSEOP_FLOWCONTROL_SW %token PARSEOP_FROMBCD %token PARSEOP_FUNCTION %token PARSEOP_GPIO_INT %token PARSEOP_GPIO_IO %token PARSEOP_CSI2_SERIALBUS %token PARSEOP_I2C_SERIALBUS %token PARSEOP_I2C_SERIALBUS_V2 %token PARSEOP_IF %token PARSEOP_INCLUDE %token PARSEOP_INCLUDE_END %token PARSEOP_INCREMENT %token PARSEOP_INDEX %token PARSEOP_INDEXFIELD %token PARSEOP_INTEGER %token PARSEOP_INTERRUPT %token PARSEOP_INTLEVEL_ACTIVEBOTH %token PARSEOP_INTLEVEL_ACTIVEHIGH %token PARSEOP_INTLEVEL_ACTIVELOW %token PARSEOP_INTTYPE_EDGE %token PARSEOP_INTTYPE_LEVEL %token PARSEOP_IO %token PARSEOP_IODECODETYPE_10 %token PARSEOP_IODECODETYPE_16 %token PARSEOP_IORESTRICT_IN %token PARSEOP_IORESTRICT_NONE %token PARSEOP_IORESTRICT_OUT %token PARSEOP_IORESTRICT_PRESERVE %token PARSEOP_IRQ %token PARSEOP_IRQNOFLAGS %token PARSEOP_LAND %token PARSEOP_LEQUAL %token PARSEOP_LGREATER %token PARSEOP_LGREATEREQUAL %token PARSEOP_LLESS %token PARSEOP_LLESSEQUAL %token PARSEOP_LNOT %token PARSEOP_LNOTEQUAL %token PARSEOP_LOAD %token PARSEOP_LOADTABLE %token PARSEOP_LOCAL0 %token PARSEOP_LOCAL1 %token PARSEOP_LOCAL2 %token PARSEOP_LOCAL3 %token PARSEOP_LOCAL4 %token PARSEOP_LOCAL5 %token PARSEOP_LOCAL6 %token PARSEOP_LOCAL7 %token PARSEOP_LOCKRULE_LOCK %token PARSEOP_LOCKRULE_NOLOCK %token PARSEOP_LOR %token PARSEOP_MATCH %token PARSEOP_MATCHTYPE_MEQ %token PARSEOP_MATCHTYPE_MGE %token PARSEOP_MATCHTYPE_MGT %token PARSEOP_MATCHTYPE_MLE %token PARSEOP_MATCHTYPE_MLT %token PARSEOP_MATCHTYPE_MTR %token PARSEOP_MAXTYPE_FIXED %token PARSEOP_MAXTYPE_NOTFIXED %token PARSEOP_MEMORY24 %token PARSEOP_MEMORY32 %token PARSEOP_MEMORY32FIXED %token PARSEOP_MEMTYPE_CACHEABLE %token PARSEOP_MEMTYPE_NONCACHEABLE %token PARSEOP_MEMTYPE_PREFETCHABLE %token PARSEOP_MEMTYPE_WRITECOMBINING %token PARSEOP_METHOD %token PARSEOP_METHODCALL %token PARSEOP_MID %token PARSEOP_MINTYPE_FIXED %token PARSEOP_MINTYPE_NOTFIXED %token PARSEOP_MOD %token PARSEOP_MULTIPLY %token PARSEOP_MUTEX %token PARSEOP_NAME %token PARSEOP_NAMESEG %token PARSEOP_NAMESTRING %token PARSEOP_NAND %token PARSEOP_NOOP %token PARSEOP_NOR %token PARSEOP_NOT %token PARSEOP_NOTIFY %token PARSEOP_OBJECTTYPE %token PARSEOP_OBJECTTYPE_BFF %token PARSEOP_OBJECTTYPE_BUF %token PARSEOP_OBJECTTYPE_DDB %token PARSEOP_OBJECTTYPE_DEV %token PARSEOP_OBJECTTYPE_EVT %token PARSEOP_OBJECTTYPE_FLD %token PARSEOP_OBJECTTYPE_INT %token PARSEOP_OBJECTTYPE_MTH %token PARSEOP_OBJECTTYPE_MTX %token PARSEOP_OBJECTTYPE_OPR %token PARSEOP_OBJECTTYPE_PKG %token PARSEOP_OBJECTTYPE_POW %token PARSEOP_OBJECTTYPE_PRO %token PARSEOP_OBJECTTYPE_STR %token PARSEOP_OBJECTTYPE_THZ %token PARSEOP_OBJECTTYPE_UNK %token PARSEOP_OFFSET %token PARSEOP_ONE %token PARSEOP_ONES %token PARSEOP_OPERATIONREGION %token PARSEOP_OR %token PARSEOP_PACKAGE %token PARSEOP_PACKAGE_LENGTH %token PARSEOP_PARITYTYPE_EVEN %token PARSEOP_PARITYTYPE_MARK %token PARSEOP_PARITYTYPE_NONE %token PARSEOP_PARITYTYPE_ODD %token PARSEOP_PARITYTYPE_SPACE %token PARSEOP_PINCONFIG %token PARSEOP_PINFUNCTION %token PARSEOP_PINGROUP %token PARSEOP_PINGROUPCONFIG %token PARSEOP_PINGROUPFUNCTION %token PARSEOP_PIN_NOPULL %token PARSEOP_PIN_PULLDEFAULT %token PARSEOP_PIN_PULLDOWN %token PARSEOP_PIN_PULLUP %token PARSEOP_CLOCKINPUT %token PARSEOP_CLOCK_HZ %token PARSEOP_CLOCK_KHZ %token PARSEOP_CLOCK_MHZ %token PARSEOP_CLOCK_FIXED %token PARSEOP_CLOCK_VARIABLE %token PARSEOP_POWERRESOURCE %token PARSEOP_PROCESSOR %token PARSEOP_QWORDCONST %token PARSEOP_QWORDIO %token PARSEOP_QWORDMEMORY %token PARSEOP_QWORDSPACE %token PARSEOP_RANGETYPE_ENTIRE %token PARSEOP_RANGETYPE_ISAONLY %token PARSEOP_RANGETYPE_NONISAONLY %token PARSEOP_RAW_DATA %token PARSEOP_READWRITETYPE_BOTH %token PARSEOP_READWRITETYPE_READONLY %token PARSEOP_REFOF %token PARSEOP_REGIONSPACE_CMOS %token PARSEOP_REGIONSPACE_EC %token PARSEOP_REGIONSPACE_FFIXEDHW %token PARSEOP_REGIONSPACE_GPIO %token PARSEOP_REGIONSPACE_GSBUS %token PARSEOP_REGIONSPACE_IO %token PARSEOP_REGIONSPACE_IPMI %token PARSEOP_REGIONSPACE_MEM %token PARSEOP_REGIONSPACE_PCC %token PARSEOP_REGIONSPACE_PCI %token PARSEOP_REGIONSPACE_PCIBAR %token PARSEOP_REGIONSPACE_PRM %token PARSEOP_REGIONSPACE_SMBUS %token PARSEOP_REGISTER %token PARSEOP_RELEASE %token PARSEOP_RESERVED_BYTES %token PARSEOP_RESET %token PARSEOP_RESOURCETEMPLATE %token PARSEOP_RESOURCETYPE_CONSUMER %token PARSEOP_RESOURCETYPE_PRODUCER %token PARSEOP_RETURN %token PARSEOP_REVISION %token PARSEOP_SCOPE %token PARSEOP_SERIALIZERULE_NOTSERIAL %token PARSEOP_SERIALIZERULE_SERIAL %token PARSEOP_SHARETYPE_EXCLUSIVE %token PARSEOP_SHARETYPE_EXCLUSIVEWAKE %token PARSEOP_SHARETYPE_SHARED %token PARSEOP_SHARETYPE_SHAREDWAKE %token PARSEOP_SHIFTLEFT %token PARSEOP_SHIFTRIGHT %token PARSEOP_SIGNAL %token PARSEOP_SIZEOF %token PARSEOP_SLAVEMODE_CONTROLLERINIT %token PARSEOP_SLAVEMODE_DEVICEINIT %token PARSEOP_SLEEP %token PARSEOP_SPI_SERIALBUS %token PARSEOP_SPI_SERIALBUS_V2 %token PARSEOP_STALL %token PARSEOP_STARTDEPENDENTFN %token PARSEOP_STARTDEPENDENTFN_NOPRI %token PARSEOP_STOPBITS_ONE %token PARSEOP_STOPBITS_ONEPLUSHALF %token PARSEOP_STOPBITS_TWO %token PARSEOP_STOPBITS_ZERO %token PARSEOP_STORE %token PARSEOP_STRING_LITERAL %token PARSEOP_SUBTRACT %token PARSEOP_SWITCH %token PARSEOP_THERMALZONE %token PARSEOP_TIMER %token PARSEOP_TOBCD %token PARSEOP_TOBUFFER %token PARSEOP_TODECIMALSTRING %token PARSEOP_TOHEXSTRING %token PARSEOP_TOINTEGER %token PARSEOP_TOSTRING %token PARSEOP_TOUUID %token PARSEOP_TRANSLATIONTYPE_DENSE %token PARSEOP_TRANSLATIONTYPE_SPARSE %token PARSEOP_TYPE_STATIC %token PARSEOP_TYPE_TRANSLATION %token PARSEOP_UART_SERIALBUS %token PARSEOP_UART_SERIALBUS_V2 %token PARSEOP_UNICODE %token PARSEOP_UNLOAD %token PARSEOP_UPDATERULE_ONES %token PARSEOP_UPDATERULE_PRESERVE %token PARSEOP_UPDATERULE_ZEROS %token PARSEOP_VAR_PACKAGE %token PARSEOP_VENDORLONG %token PARSEOP_VENDORSHORT %token PARSEOP_WAIT %token PARSEOP_WHILE %token PARSEOP_WIREMODE_FOUR %token PARSEOP_WIREMODE_THREE %token PARSEOP_WORDBUSNUMBER %token PARSEOP_WORDCONST %token PARSEOP_WORDIO %token PARSEOP_WORDSPACE %token PARSEOP_XFERSIZE_8 %token PARSEOP_XFERSIZE_16 %token PARSEOP_XFERSIZE_32 %token PARSEOP_XFERSIZE_64 %token PARSEOP_XFERSIZE_128 %token PARSEOP_XFERSIZE_256 %token PARSEOP_XFERTYPE_8 %token PARSEOP_XFERTYPE_8_16 %token PARSEOP_XFERTYPE_16 %token PARSEOP_XOR %token PARSEOP_ZERO /* ToPld macro */ %token PARSEOP_TOPLD %token PARSEOP_PLD_REVISION %token PARSEOP_PLD_IGNORECOLOR %token PARSEOP_PLD_RED %token PARSEOP_PLD_GREEN %token PARSEOP_PLD_BLUE %token PARSEOP_PLD_WIDTH %token PARSEOP_PLD_HEIGHT %token PARSEOP_PLD_USERVISIBLE %token PARSEOP_PLD_DOCK %token PARSEOP_PLD_LID %token PARSEOP_PLD_PANEL %token PARSEOP_PLD_VERTICALPOSITION %token PARSEOP_PLD_HORIZONTALPOSITION %token PARSEOP_PLD_SHAPE %token PARSEOP_PLD_GROUPORIENTATION %token PARSEOP_PLD_GROUPTOKEN %token PARSEOP_PLD_GROUPPOSITION %token PARSEOP_PLD_BAY %token PARSEOP_PLD_EJECTABLE %token PARSEOP_PLD_EJECTREQUIRED %token PARSEOP_PLD_CABINETNUMBER %token PARSEOP_PLD_CARDCAGENUMBER %token PARSEOP_PLD_REFERENCE %token PARSEOP_PLD_ROTATION %token PARSEOP_PLD_ORDER %token PARSEOP_PLD_RESERVED %token PARSEOP_PLD_VERTICALOFFSET %token PARSEOP_PLD_HORIZONTALOFFSET /* * C-style expression parser. These must appear after all of the * standard ASL operators and keywords. * * Note: The order of these tokens implements the precedence rules * (low precedence to high). See aslrules.y for an exhaustive list. */ %right PARSEOP_EXP_EQUALS PARSEOP_EXP_ADD_EQ PARSEOP_EXP_SUB_EQ PARSEOP_EXP_MUL_EQ PARSEOP_EXP_DIV_EQ PARSEOP_EXP_MOD_EQ PARSEOP_EXP_SHL_EQ PARSEOP_EXP_SHR_EQ PARSEOP_EXP_AND_EQ PARSEOP_EXP_XOR_EQ PARSEOP_EXP_OR_EQ %left PARSEOP_EXP_LOGICAL_OR %left PARSEOP_EXP_LOGICAL_AND %left PARSEOP_EXP_OR %left PARSEOP_EXP_XOR %left PARSEOP_EXP_AND %left PARSEOP_EXP_EQUAL PARSEOP_EXP_NOT_EQUAL %left PARSEOP_EXP_GREATER PARSEOP_EXP_LESS PARSEOP_EXP_GREATER_EQUAL PARSEOP_EXP_LESS_EQUAL %left PARSEOP_EXP_SHIFT_RIGHT PARSEOP_EXP_SHIFT_LEFT %left PARSEOP_EXP_ADD PARSEOP_EXP_SUBTRACT %left PARSEOP_EXP_MULTIPLY PARSEOP_EXP_DIVIDE PARSEOP_EXP_MODULO %right PARSEOP_EXP_NOT PARSEOP_EXP_LOGICAL_NOT %left PARSEOP_EXP_INCREMENT PARSEOP_EXP_DECREMENT %left PARSEOP_OPEN_PAREN PARSEOP_CLOSE_PAREN /* Brackets for Index() support */ %left PARSEOP_EXP_INDEX_LEFT %right PARSEOP_EXP_INDEX_RIGHT /* Macros */ %token PARSEOP_PRINTF %token PARSEOP_FPRINTF %token PARSEOP_FOR /* Structures */ %token PARSEOP_STRUCTURE %token PARSEOP_STRUCTURE_NAMESTRING %token PARSEOP_STRUCTURE_TAG %token PARSEOP_STRUCTURE_ELEMENT %token PARSEOP_STRUCTURE_INSTANCE %token PARSEOP_STRUCTURE_REFERENCE %token PARSEOP_STRUCTURE_POINTER /* Top level */ %token PARSEOP_ASL_CODE /******************************************************************************* * * Tokens below are not in the aslmap.c file * ******************************************************************************/ /* Tokens below this are not in the aslmap.c file */ /* Specific parentheses tokens are not used at this time */ /* PARSEOP_EXP_PAREN_OPEN */ /* PARSEOP_EXP_PAREN_CLOSE */ /* ASL+ variable creation */ %token PARSEOP_INTEGER_TYPE %token PARSEOP_STRING_TYPE %token PARSEOP_BUFFER_TYPE %token PARSEOP_PACKAGE_TYPE %token PARSEOP_REFERENCE_TYPE /* * Special functions. These should probably stay at the end of this * table. */ %token PARSEOP___DATE__ %token PARSEOP___FILE__ %token PARSEOP___LINE__ %token PARSEOP___PATH__ %token PARSEOP___METHOD__ src/acpica/source/compiler/asltransform.c000066400000000000000000001221701465205512700210700ustar00rootroot00000000000000/****************************************************************************** * * Module Name: asltransform - Parse tree transforms * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acnamesp.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("asltransform") /* Local prototypes */ static void TrTransformSubtree ( ACPI_PARSE_OBJECT *Op); static char * TrAmlGetNextTempName ( ACPI_PARSE_OBJECT *Op, UINT8 *TempCount); static void TrAmlInitLineNumbers ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *Neighbor); static void TrAmlInitNode ( ACPI_PARSE_OBJECT *Op, UINT16 ParseOpcode); static void TrAmlSetSubtreeParent ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *Parent); static void TrAmlInsertPeer ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *NewPeer); static void TrDoDefinitionBlock ( ACPI_PARSE_OBJECT *Op); static void TrDoSwitch ( ACPI_PARSE_OBJECT *StartNode); static void TrCheckForDuplicateCase ( ACPI_PARSE_OBJECT *CaseOp, ACPI_PARSE_OBJECT *Predicate1); static BOOLEAN TrCheckForBufferMatch ( ACPI_PARSE_OBJECT *Next1, ACPI_PARSE_OBJECT *Next2); static void TrDoMethod ( ACPI_PARSE_OBJECT *Op); /******************************************************************************* * * FUNCTION: TrAmlGetNextTempName * * PARAMETERS: Op - Current parse op * TempCount - Current temporary counter. Was originally * per-module; Currently per method, could be * expanded to per-scope. * * RETURN: A pointer to name (allocated here). * * DESCRIPTION: Generate an ACPI name of the form _T_x. These names are * reserved for use by the ASL compiler. (_T_0 through _T_Z) * ******************************************************************************/ static char * TrAmlGetNextTempName ( ACPI_PARSE_OBJECT *Op, UINT8 *TempCount) { char *TempName; if (*TempCount >= (10 + 26)) /* 0-35 valid: 0-9 and A-Z for TempName[3] */ { /* Too many temps */ AslError (ASL_ERROR, ASL_MSG_TOO_MANY_TEMPS, Op, NULL); return (NULL); } TempName = UtLocalCalloc (5); if (*TempCount < 10) /* 0-9 */ { TempName[3] = (char) (*TempCount + '0'); } else /* 10-35: A-Z */ { TempName[3] = (char) (*TempCount + ('A' - 10)); } (*TempCount)++; /* First three characters are always "_T_" */ TempName[0] = '_'; TempName[1] = 'T'; TempName[2] = '_'; return (TempName); } /******************************************************************************* * * FUNCTION: TrAmlInitLineNumbers * * PARAMETERS: Op - Op to be initialized * Neighbor - Op used for initialization values * * RETURN: None * * DESCRIPTION: Initialized the various line numbers for a parse node. * ******************************************************************************/ static void TrAmlInitLineNumbers ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *Neighbor) { Op->Asl.EndLine = Neighbor->Asl.EndLine; Op->Asl.EndLogicalLine = Neighbor->Asl.EndLogicalLine; Op->Asl.LineNumber = Neighbor->Asl.LineNumber; Op->Asl.LogicalByteOffset = Neighbor->Asl.LogicalByteOffset; Op->Asl.LogicalLineNumber = Neighbor->Asl.LogicalLineNumber; } /******************************************************************************* * * FUNCTION: TrAmlInitNode * * PARAMETERS: Op - Op to be initialized * ParseOpcode - Opcode for this node * * RETURN: None * * DESCRIPTION: Initialize a node with the parse opcode and opcode name. * ******************************************************************************/ static void TrAmlInitNode ( ACPI_PARSE_OBJECT *Op, UINT16 ParseOpcode) { Op->Asl.ParseOpcode = ParseOpcode; UtSetParseOpName (Op); } /******************************************************************************* * * FUNCTION: TrAmlSetSubtreeParent * * PARAMETERS: Op - First node in a list of peer nodes * Parent - Parent of the subtree * * RETURN: None * * DESCRIPTION: Set the parent for all peer nodes in a subtree * ******************************************************************************/ static void TrAmlSetSubtreeParent ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *Parent) { ACPI_PARSE_OBJECT *Next; Next = Op; while (Next) { Next->Asl.Parent = Parent; Next = Next->Asl.Next; } } /******************************************************************************* * * FUNCTION: TrAmlInsertPeer * * PARAMETERS: Op - First node in a list of peer nodes * NewPeer - Peer node to insert * * RETURN: None * * DESCRIPTION: Insert a new peer node into a list of peers. * ******************************************************************************/ static void TrAmlInsertPeer ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *NewPeer) { NewPeer->Asl.Next = Op->Asl.Next; Op->Asl.Next = NewPeer; } /******************************************************************************* * * FUNCTION: TrAmlTransformWalkBegin * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: None * * DESCRIPTION: Parse tree walk to generate both the AML opcodes and the AML * operands. * ******************************************************************************/ ACPI_STATUS TrAmlTransformWalkBegin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { TrTransformSubtree (Op); return (AE_OK); } /******************************************************************************* * * FUNCTION: TrAmlTransformWalkEnd * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: None * * DESCRIPTION: Parse tree walk to generate both the AML opcodes and the AML * operands. * ******************************************************************************/ ACPI_STATUS TrAmlTransformWalkEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { /* Save possible Externals list in the DefintionBlock Op */ if (Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK) { Op->Asl.Value.Arg = AslGbl_ExternalsListHead; AslGbl_ExternalsListHead = NULL; } return (AE_OK); } /******************************************************************************* * * FUNCTION: TrTransformSubtree * * PARAMETERS: Op - The parent parse node * * RETURN: None * * DESCRIPTION: Prepare nodes to be output as AML data and operands. The more * complex AML opcodes require processing of the child nodes * (arguments/operands). * ******************************************************************************/ static void TrTransformSubtree ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *MethodOp; ACPI_NAMESTRING_INFO Info; if (Op->Asl.AmlOpcode == AML_RAW_DATA_BYTE) { return; } switch (Op->Asl.ParseOpcode) { case PARSEOP_DEFINITION_BLOCK: TrDoDefinitionBlock (Op); break; case PARSEOP_SWITCH: TrDoSwitch (Op); break; case PARSEOP_METHOD: TrDoMethod (Op); break; case PARSEOP_EXTERNAL: ExDoExternal (Op); break; case PARSEOP___METHOD__: /* Transform to a string op containing the parent method name */ Op->Asl.ParseOpcode = PARSEOP_STRING_LITERAL; UtSetParseOpName (Op); /* Find the parent control method op */ MethodOp = Op; while (MethodOp) { if (MethodOp->Asl.ParseOpcode == PARSEOP_METHOD) { /* First child contains the method name */ MethodOp = MethodOp->Asl.Child; Op->Asl.Value.String = MethodOp->Asl.Value.String; return; } MethodOp = MethodOp->Asl.Parent; } /* At the root, invocation not within a control method */ Op->Asl.Value.String = "\\"; break; case PARSEOP_NAMESTRING: /* * A NameString can be up to 255 (0xFF) individual NameSegs maximum * (with 254 dot separators) - as per the ACPI specification. Note: * Cannot check for NumSegments == 0 because things like * Scope(\) are legal and OK. */ Info.ExternalName = Op->Asl.Value.String; AcpiNsGetInternalNameLength (&Info); if (Info.NumSegments > 255) { AslError (ASL_ERROR, ASL_MSG_NAMESTRING_LENGTH, Op, NULL); } break; case PARSEOP_UNLOAD: AslError (ASL_WARNING, ASL_MSG_UNLOAD, Op, NULL); break; case PARSEOP_SLEEP: /* Remark for very long sleep values */ if (Op->Asl.Child->Asl.Value.Integer > 1000) { AslError (ASL_REMARK, ASL_MSG_LONG_SLEEP, Op, NULL); } break; case PARSEOP_PROCESSOR: AslError (ASL_WARNING, ASL_MSG_LEGACY_PROCESSOR_OP, Op, Op->Asl.ExternalName); break; case PARSEOP_OBJECTTYPE_DDB: AslError (ASL_WARNING, ASL_MSG_LEGACY_DDB_TYPE, Op, Op->Asl.ExternalName); break; default: /* Nothing to do here for other opcodes */ break; } } /******************************************************************************* * * FUNCTION: TrDoDefinitionBlock * * PARAMETERS: Op - Parse node * * RETURN: None * * DESCRIPTION: Find the end of the definition block and set a global to this * node. It is used by the compiler to insert compiler-generated * names at the root level of the namespace. * ******************************************************************************/ static void TrDoDefinitionBlock ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next; UINT32 i; /* Reset external list when starting a definition block */ AslGbl_ExternalsListHead = NULL; Next = Op->Asl.Child; for (i = 0; i < 5; i++) { Next = Next->Asl.Next; if (i == 0) { /* * This is the table signature. Only the DSDT can be assumed * to be at the root of the namespace; Therefore, namepath * optimization can only be performed on the DSDT. */ if (!ACPI_COMPARE_NAMESEG (Next->Asl.Value.String, ACPI_SIG_DSDT)) { AslGbl_ReferenceOptimizationFlag = FALSE; } } } AslGbl_FirstLevelInsertionNode = Next; } /******************************************************************************* * * FUNCTION: TrDoSwitch * * PARAMETERS: StartNode - Parse node for SWITCH * * RETURN: None * * DESCRIPTION: Translate ASL SWITCH statement to if/else pairs. There is * no actual AML opcode for SWITCH -- it must be simulated. * ******************************************************************************/ static void TrDoSwitch ( ACPI_PARSE_OBJECT *StartNode) { ACPI_PARSE_OBJECT *Next; ACPI_PARSE_OBJECT *CaseOp = NULL; ACPI_PARSE_OBJECT *CaseBlock = NULL; ACPI_PARSE_OBJECT *DefaultOp = NULL; ACPI_PARSE_OBJECT *CurrentParentNode; ACPI_PARSE_OBJECT *Conditional = NULL; ACPI_PARSE_OBJECT *Predicate; ACPI_PARSE_OBJECT *Peer; ACPI_PARSE_OBJECT *NewOp; ACPI_PARSE_OBJECT *NewOp2; ACPI_PARSE_OBJECT *MethodOp; ACPI_PARSE_OBJECT *StoreOp; ACPI_PARSE_OBJECT *BreakOp; ACPI_PARSE_OBJECT *BufferOp; char *PredicateValueName; UINT16 Index; UINT32 Btype; /* Start node is the Switch() node */ CurrentParentNode = StartNode; /* Create a new temp name of the form _T_x */ PredicateValueName = TrAmlGetNextTempName (StartNode, &AslGbl_TempCount); if (!PredicateValueName) { return; } /* First child is the Switch() predicate */ Next = StartNode->Asl.Child; /* * Examine the return type of the Switch Value - * must be Integer/Buffer/String */ Index = (UINT16) (Next->Asl.ParseOpcode - ASL_PARSE_OPCODE_BASE); Btype = AslKeywordMapping[Index].AcpiBtype; if ((Btype != ACPI_BTYPE_INTEGER) && (Btype != ACPI_BTYPE_STRING) && (Btype != ACPI_BTYPE_BUFFER)) { AslError (ASL_WARNING, ASL_MSG_SWITCH_TYPE, Next, NULL); Btype = ACPI_BTYPE_INTEGER; } /* CASE statements start at next child */ Peer = Next->Asl.Next; while (Peer) { Next = Peer; Peer = Next->Asl.Next; if (Next->Asl.ParseOpcode == PARSEOP_CASE) { TrCheckForDuplicateCase (Next, Next->Asl.Child); if (CaseOp) { /* Add an ELSE to complete the previous CASE */ NewOp = TrCreateLeafOp (PARSEOP_ELSE); NewOp->Asl.Parent = Conditional->Asl.Parent; TrAmlInitLineNumbers (NewOp, NewOp->Asl.Parent); /* Link ELSE node as a peer to the previous IF */ TrAmlInsertPeer (Conditional, NewOp); CurrentParentNode = NewOp; } CaseOp = Next; Conditional = CaseOp; CaseBlock = CaseOp->Asl.Child->Asl.Next; Conditional->Asl.Child->Asl.Next = NULL; Predicate = CaseOp->Asl.Child; if ((Predicate->Asl.ParseOpcode == PARSEOP_PACKAGE) || (Predicate->Asl.ParseOpcode == PARSEOP_VAR_PACKAGE)) { /* * Convert the package declaration to this form: * * If (LNotEqual (Match (Package(){}, * MEQ, _T_x, MTR, Zero, Zero), Ones)) */ NewOp2 = TrCreateLeafOp (PARSEOP_MATCHTYPE_MEQ); Predicate->Asl.Next = NewOp2; TrAmlInitLineNumbers (NewOp2, Conditional); NewOp = NewOp2; NewOp2 = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (UINT64) ACPI_TO_INTEGER (PredicateValueName)); NewOp->Asl.Next = NewOp2; TrAmlInitLineNumbers (NewOp2, Predicate); NewOp = NewOp2; NewOp2 = TrCreateLeafOp (PARSEOP_MATCHTYPE_MTR); NewOp->Asl.Next = NewOp2; TrAmlInitLineNumbers (NewOp2, Predicate); NewOp = NewOp2; NewOp2 = TrCreateLeafOp (PARSEOP_ZERO); NewOp->Asl.Next = NewOp2; TrAmlInitLineNumbers (NewOp2, Predicate); NewOp = NewOp2; NewOp2 = TrCreateLeafOp (PARSEOP_ZERO); NewOp->Asl.Next = NewOp2; TrAmlInitLineNumbers (NewOp2, Predicate); NewOp2 = TrCreateLeafOp (PARSEOP_MATCH); NewOp2->Asl.Child = Predicate; /* PARSEOP_PACKAGE */ TrAmlInitLineNumbers (NewOp2, Conditional); TrAmlSetSubtreeParent (Predicate, NewOp2); NewOp = NewOp2; NewOp2 = TrCreateLeafOp (PARSEOP_ONES); NewOp->Asl.Next = NewOp2; TrAmlInitLineNumbers (NewOp2, Conditional); NewOp2 = TrCreateLeafOp (PARSEOP_LEQUAL); NewOp2->Asl.Child = NewOp; NewOp->Asl.Parent = NewOp2; TrAmlInitLineNumbers (NewOp2, Conditional); TrAmlSetSubtreeParent (NewOp, NewOp2); NewOp = NewOp2; NewOp2 = TrCreateLeafOp (PARSEOP_LNOT); NewOp2->Asl.Child = NewOp; NewOp2->Asl.Parent = Conditional; NewOp->Asl.Parent = NewOp2; TrAmlInitLineNumbers (NewOp2, Conditional); Conditional->Asl.Child = NewOp2; NewOp2->Asl.Next = CaseBlock; } else { /* * Integer and Buffer case. * * Change CaseOp() to: If (LEqual (SwitchValue, CaseValue)) {...} * Note: SwitchValue is first to allow the CaseValue to be implicitly * converted to the type of SwitchValue if necessary. * * CaseOp->Child is the case value * CaseOp->Child->Peer is the beginning of the case block */ NewOp = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (UINT64) ACPI_TO_INTEGER (PredicateValueName)); NewOp->Asl.Next = Predicate; TrAmlInitLineNumbers (NewOp, Predicate); NewOp2 = TrCreateLeafOp (PARSEOP_LEQUAL); NewOp2->Asl.Parent = Conditional; NewOp2->Asl.Child = NewOp; TrAmlInitLineNumbers (NewOp2, Conditional); TrAmlSetSubtreeParent (NewOp, NewOp2); Predicate = NewOp2; Predicate->Asl.Next = CaseBlock; TrAmlSetSubtreeParent (Predicate, Conditional); Conditional->Asl.Child = Predicate; } /* Reinitialize the CASE node to an IF node */ TrAmlInitNode (Conditional, PARSEOP_IF); /* * The first CASE(IF) is not nested under an ELSE. * All other CASEs are children of a parent ELSE. */ if (CurrentParentNode == StartNode) { Conditional->Asl.Next = NULL; } else { /* * The IF is a child of previous IF/ELSE. It * is therefore without peer. */ CurrentParentNode->Asl.Child = Conditional; Conditional->Asl.Parent = CurrentParentNode; Conditional->Asl.Next = NULL; } } else if (Next->Asl.ParseOpcode == PARSEOP_DEFAULT) { if (DefaultOp) { /* * More than one Default * (Parser does not catch this, must check here) */ AslError (ASL_ERROR, ASL_MSG_MULTIPLE_DEFAULT, Next, NULL); } else { /* Save the DEFAULT node for later, after CASEs */ DefaultOp = Next; } } else { /* Unknown peer opcode */ AcpiOsPrintf ("Unknown parse opcode for switch statement: %s (%u)\n", Next->Asl.ParseOpName, Next->Asl.ParseOpcode); } } /* Add the default case at the end of the if/else construct */ if (DefaultOp) { /* If no CASE statements, this is an error - see below */ if (CaseOp) { /* Convert the DEFAULT node to an ELSE */ TrAmlInitNode (DefaultOp, PARSEOP_ELSE); DefaultOp->Asl.Parent = Conditional->Asl.Parent; /* Link ELSE node as a peer to the previous IF */ TrAmlInsertPeer (Conditional, DefaultOp); } } if (!CaseOp) { AslError (ASL_ERROR, ASL_MSG_NO_CASES, StartNode, NULL); } /* * Create a Name(_T_x, ...) statement. This statement must appear at the * method level, in case a loop surrounds the switch statement and could * cause the name to be created twice (error). */ /* Create the Name node */ Predicate = StartNode->Asl.Child; NewOp = TrCreateLeafOp (PARSEOP_NAME); TrAmlInitLineNumbers (NewOp, StartNode); /* Find the parent method */ Next = StartNode; while ((Next->Asl.ParseOpcode != PARSEOP_METHOD) && (Next->Asl.ParseOpcode != PARSEOP_DEFINITION_BLOCK)) { Next = Next->Asl.Parent; } MethodOp = Next; NewOp->Asl.CompileFlags |= OP_COMPILER_EMITTED; NewOp->Asl.Parent = Next; /* Insert name after the method name and arguments */ Next = Next->Asl.Child; /* Name */ Next = Next->Asl.Next; /* NumArgs */ Next = Next->Asl.Next; /* SerializeRule */ /* * If method is not Serialized, we must make is so, because of the way * that Switch() must be implemented -- we cannot allow multiple threads * to execute this method concurrently since we need to create local * temporary name(s). */ if (Next->Asl.ParseOpcode != PARSEOP_SERIALIZERULE_SERIAL) { AslError (ASL_REMARK, ASL_MSG_SERIALIZED, MethodOp, "Due to use of Switch operator"); Next->Asl.ParseOpcode = PARSEOP_SERIALIZERULE_SERIAL; } Next = Next->Asl.Next; /* SyncLevel */ Next = Next->Asl.Next; /* ReturnType */ Next = Next->Asl.Next; /* ParameterTypes */ TrAmlInsertPeer (Next, NewOp); TrAmlInitLineNumbers (NewOp, Next); /* Create the NameSeg child for the Name node */ NewOp2 = TrCreateValuedLeafOp (PARSEOP_NAMESEG, (UINT64) ACPI_TO_INTEGER (PredicateValueName)); TrAmlInitLineNumbers (NewOp2, NewOp); NewOp2->Asl.CompileFlags |= OP_IS_NAME_DECLARATION; NewOp->Asl.Child = NewOp2; /* Create the initial value for the Name. Btype was already validated above */ switch (Btype) { case ACPI_BTYPE_INTEGER: NewOp2->Asl.Next = TrCreateValuedLeafOp (PARSEOP_ZERO, (UINT64) 0); TrAmlInitLineNumbers (NewOp2->Asl.Next, NewOp); break; case ACPI_BTYPE_STRING: NewOp2->Asl.Next = TrCreateValuedLeafOp (PARSEOP_STRING_LITERAL, (UINT64) ACPI_TO_INTEGER ("")); TrAmlInitLineNumbers (NewOp2->Asl.Next, NewOp); break; case ACPI_BTYPE_BUFFER: (void) TrLinkPeerOp (NewOp2, TrCreateValuedLeafOp (PARSEOP_BUFFER, (UINT64) 0)); Next = NewOp2->Asl.Next; TrAmlInitLineNumbers (Next, NewOp2); (void) TrLinkOpChildren (Next, 1, TrCreateValuedLeafOp (PARSEOP_ZERO, (UINT64) 1)); TrAmlInitLineNumbers (Next->Asl.Child, Next); BufferOp = TrCreateValuedLeafOp (PARSEOP_DEFAULT_ARG, (UINT64) 0); TrAmlInitLineNumbers (BufferOp, Next->Asl.Child); (void) TrLinkPeerOp (Next->Asl.Child, BufferOp); TrAmlSetSubtreeParent (Next->Asl.Child, Next); break; default: break; } TrAmlSetSubtreeParent (NewOp2, NewOp); /* * Transform the Switch() into a While(One)-Break node. * And create a Store() node which will be used to save the * Switch() value. The store is of the form: Store (Value, _T_x) * where _T_x is the temp variable. */ TrAmlInitNode (StartNode, PARSEOP_WHILE); NewOp = TrCreateLeafOp (PARSEOP_ONE); TrAmlInitLineNumbers (NewOp, StartNode); NewOp->Asl.Next = Predicate->Asl.Next; NewOp->Asl.Parent = StartNode; StartNode->Asl.Child = NewOp; /* Create a Store() node */ StoreOp = TrCreateLeafOp (PARSEOP_STORE); TrAmlInitLineNumbers (StoreOp, NewOp); StoreOp->Asl.Parent = StartNode; TrAmlInsertPeer (NewOp, StoreOp); /* Complete the Store subtree */ StoreOp->Asl.Child = Predicate; Predicate->Asl.Parent = StoreOp; NewOp = TrCreateValuedLeafOp (PARSEOP_NAMESEG, (UINT64) ACPI_TO_INTEGER (PredicateValueName)); TrAmlInitLineNumbers (NewOp, StoreOp); NewOp->Asl.Parent = StoreOp; Predicate->Asl.Next = NewOp; /* Create a Break() node and insert it into the end of While() */ Conditional = StartNode->Asl.Child; while (Conditional->Asl.Next) { Conditional = Conditional->Asl.Next; } BreakOp = TrCreateLeafOp (PARSEOP_BREAK); TrAmlInitLineNumbers (BreakOp, NewOp); BreakOp->Asl.Parent = StartNode; TrAmlInsertPeer (Conditional, BreakOp); } /******************************************************************************* * * FUNCTION: TrCheckForDuplicateCase * * PARAMETERS: CaseOp - Parse node for first Case statement in list * Predicate1 - Case value for the input CaseOp * * RETURN: None * * DESCRIPTION: Check for duplicate case values. Currently, only handles * Integers, Strings and Buffers. No support for Package objects. * ******************************************************************************/ static void TrCheckForDuplicateCase ( ACPI_PARSE_OBJECT *CaseOp, ACPI_PARSE_OBJECT *Predicate1) { ACPI_PARSE_OBJECT *Next; ACPI_PARSE_OBJECT *Predicate2; /* Walk the list of CASE opcodes */ Next = CaseOp->Asl.Next; while (Next) { if (Next->Asl.ParseOpcode == PARSEOP_CASE) { /* Emit error only once */ if (Next->Asl.CompileFlags & OP_IS_DUPLICATE) { goto NextCase; } /* Check for a duplicate plain integer */ Predicate2 = Next->Asl.Child; if ((Predicate1->Asl.ParseOpcode == PARSEOP_INTEGER) && (Predicate2->Asl.ParseOpcode == PARSEOP_INTEGER)) { if (Predicate1->Asl.Value.Integer == Predicate2->Asl.Value.Integer) { goto FoundDuplicate; } } /* Check for pairs of the constants ZERO, ONE, ONES */ else if (((Predicate1->Asl.ParseOpcode == PARSEOP_ZERO) && (Predicate2->Asl.ParseOpcode == PARSEOP_ZERO)) || ((Predicate1->Asl.ParseOpcode == PARSEOP_ONE) && (Predicate2->Asl.ParseOpcode == PARSEOP_ONE)) || ((Predicate1->Asl.ParseOpcode == PARSEOP_ONES) && (Predicate2->Asl.ParseOpcode == PARSEOP_ONES))) { goto FoundDuplicate; } /* Check for a duplicate string constant (literal) */ else if ((Predicate1->Asl.ParseOpcode == PARSEOP_STRING_LITERAL) && (Predicate2->Asl.ParseOpcode == PARSEOP_STRING_LITERAL)) { if (!strcmp (Predicate1->Asl.Value.String, Predicate2->Asl.Value.String)) { goto FoundDuplicate; } } /* Check for a duplicate buffer constant */ else if ((Predicate1->Asl.ParseOpcode == PARSEOP_BUFFER) && (Predicate2->Asl.ParseOpcode == PARSEOP_BUFFER)) { if (TrCheckForBufferMatch (Predicate1->Asl.Child, Predicate2->Asl.Child)) { goto FoundDuplicate; } } } goto NextCase; FoundDuplicate: /* Emit error message only once */ Next->Asl.CompileFlags |= OP_IS_DUPLICATE; AslDualParseOpError (ASL_ERROR, ASL_MSG_DUPLICATE_CASE, Next, Next->Asl.Value.String, ASL_MSG_CASE_FOUND_HERE, CaseOp, CaseOp->Asl.ExternalName); NextCase: Next = Next->Asl.Next; } } /******************************************************************************* * * FUNCTION: TrBufferIsAllZero * * PARAMETERS: Op - Parse node for first opcode in buffer initializer * list * * RETURN: TRUE if buffer contains all zeros or a DEFAULT_ARG * * DESCRIPTION: Check for duplicate Buffer case values. * ******************************************************************************/ static BOOLEAN TrBufferIsAllZero ( ACPI_PARSE_OBJECT *Op) { while (Op) { if (Op->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { return (TRUE); } else if (Op->Asl.Value.Integer != 0) { return (FALSE); } Op = Op->Asl.Next; } return (TRUE); } /******************************************************************************* * * FUNCTION: TrCheckForBufferMatch * * PARAMETERS: Next1 - Parse node for first opcode in first buffer list * (The DEFAULT_ARG or INTEGER node) * Next2 - Parse node for first opcode in second buffer list * (The DEFAULT_ARG or INTEGER node) * * RETURN: TRUE if buffers match, FALSE otherwise * * DESCRIPTION: Check for duplicate Buffer case values. * ******************************************************************************/ static BOOLEAN TrCheckForBufferMatch ( ACPI_PARSE_OBJECT *NextOp1, ACPI_PARSE_OBJECT *NextOp2) { /* * The buffer length can be a DEFAULT_ARG or INTEGER. If any of the nodes * are DEFAULT_ARG, it means that the length has yet to be computed. * However, the initializer list can be compared to determine if these two * buffers match. */ if ((NextOp1->Asl.ParseOpcode == PARSEOP_INTEGER && NextOp2->Asl.ParseOpcode == PARSEOP_INTEGER) && NextOp1->Asl.Value.Integer != NextOp2->Asl.Value.Integer) { return (FALSE); } /* * Buffers that have explicit lengths but no initializer lists are * filled with zeros at runtime. This is equivalent to buffers that have the * same length that are filled with zeros. * * In other words, the following buffers are equivalent: * * Buffer(0x4) {} * Buffer() {0x0, 0x0, 0x0, 0x0} * * This statement checks for matches where one buffer does not have an * initializer list and another buffer contains all zeros. */ if (NextOp1->Asl.ParseOpcode != NextOp2->Asl.ParseOpcode && TrBufferIsAllZero (NextOp1->Asl.Next) && TrBufferIsAllZero (NextOp2->Asl.Next)) { return (TRUE); } /* Start at the BYTECONST initializer node list */ NextOp1 = NextOp1->Asl.Next; NextOp2 = NextOp2->Asl.Next; /* * Walk both lists until either a mismatch is found, or one or more * end-of-lists are found */ while (NextOp1 && NextOp2) { if ((NextOp1->Asl.ParseOpcode == PARSEOP_STRING_LITERAL) && (NextOp2->Asl.ParseOpcode == PARSEOP_STRING_LITERAL)) { if (!strcmp (NextOp1->Asl.Value.String, NextOp2->Asl.Value.String)) { return (TRUE); } else { return (FALSE); } } if ((UINT8) NextOp1->Asl.Value.Integer != (UINT8) NextOp2->Asl.Value.Integer) { return (FALSE); } NextOp1 = NextOp1->Asl.Next; NextOp2 = NextOp2->Asl.Next; } /* Not a match if one of the lists is not at end-of-list */ if (NextOp1 || NextOp2) { return (FALSE); } /* Otherwise, the buffers match */ return (TRUE); } /******************************************************************************* * * FUNCTION: TrDoMethod * * PARAMETERS: Op - Parse node for SWITCH * * RETURN: None * * DESCRIPTION: Determine that parameter count of an ASL method node by * translating the parameter count parse node from * PARSEOP_DEFAULT_ARG to PARSEOP_BYTECONST. * ******************************************************************************/ static void TrDoMethod ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *ArgCountOp; UINT8 ArgCount; ACPI_PARSE_OBJECT *ParameterOp; /* * TBD: Zero the tempname (_T_x) count. Probably shouldn't be a global, * however */ AslGbl_TempCount = 0; ArgCountOp = Op->Asl.Child->Asl.Next; if (ArgCountOp->Asl.ParseOpcode == PARSEOP_BYTECONST) { /* * Parameter count for this method has already been recorded in the * method declaration. */ return; } /* * Parameter count has been omitted in the method declaration. * Count the amount of arguments here. */ ParameterOp = ArgCountOp->Asl.Next->Asl.Next->Asl.Next->Asl.Next; if (ParameterOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) { ArgCount = 0; ParameterOp = ParameterOp->Asl.Child; while (ParameterOp) { ParameterOp = ParameterOp->Asl.Next; ArgCount++; } ArgCountOp->Asl.Value.Integer = ArgCount; ArgCountOp->Asl.ParseOpcode = PARSEOP_BYTECONST; } else { /* * Method parameters can be counted by analyzing the Parameter type * list. If the Parameter list contains more than 1 parameter, it * is nested under PARSEOP_DEFAULT_ARG. When there is only 1 * parameter, the parse tree contains a single node representing * that type. */ ArgCountOp->Asl.Value.Integer = 1; ArgCountOp->Asl.ParseOpcode = PARSEOP_BYTECONST; } } src/acpica/source/compiler/asltree.c000066400000000000000000000751111465205512700200160ustar00rootroot00000000000000/****************************************************************************** * * Module Name: asltree - Parse tree management * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acapps.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("asltree") /******************************************************************************* * * FUNCTION: TrSetOpIntegerValue * * PARAMETERS: ParseOpcode - New opcode to be assigned to the op * Op - An existing parse op * * RETURN: The updated op * * DESCRIPTION: Used to set the integer value of a op, * usually to a specific size (8, 16, 32, or 64 bits) * ******************************************************************************/ ACPI_PARSE_OBJECT * TrSetOpIntegerValue ( UINT32 ParseOpcode, ACPI_PARSE_OBJECT *Op) { if (!Op) { return (NULL); } DbgPrint (ASL_PARSE_OUTPUT, "\nUpdateOp: Old - %s, New - %s\n", UtGetOpName (Op->Asl.ParseOpcode), UtGetOpName (ParseOpcode)); /* Assign new opcode and name */ if (Op->Asl.ParseOpcode == PARSEOP_ONES) { switch (ParseOpcode) { case PARSEOP_BYTECONST: Op->Asl.Value.Integer = ACPI_UINT8_MAX; break; case PARSEOP_WORDCONST: Op->Asl.Value.Integer = ACPI_UINT16_MAX; break; case PARSEOP_DWORDCONST: Op->Asl.Value.Integer = ACPI_UINT32_MAX; break; /* Don't need to do the QWORD case */ default: /* Don't care about others */ break; } } Op->Asl.ParseOpcode = (UINT16) ParseOpcode; UtSetParseOpName (Op); /* * For the BYTE, WORD, and DWORD constants, make sure that the integer * that was passed in will actually fit into the data type */ switch (ParseOpcode) { case PARSEOP_BYTECONST: UtCheckIntegerRange (Op, 0x00, ACPI_UINT8_MAX); Op->Asl.Value.Integer &= ACPI_UINT8_MAX; break; case PARSEOP_WORDCONST: UtCheckIntegerRange (Op, 0x00, ACPI_UINT16_MAX); Op->Asl.Value.Integer &= ACPI_UINT16_MAX; break; case PARSEOP_DWORDCONST: UtCheckIntegerRange (Op, 0x00, ACPI_UINT32_MAX); Op->Asl.Value.Integer &= ACPI_UINT32_MAX; break; default: /* Don't care about others, don't need to check QWORD */ break; } /* Converter: if this is a method invocation, turn off capture comments */ if (AcpiGbl_CaptureComments && (ParseOpcode == PARSEOP_METHODCALL)) { AslGbl_CommentState.CaptureComments = FALSE; } return (Op); } /******************************************************************************* * * FUNCTION: TrSetOpFlags * * PARAMETERS: Op - An existing parse op * Flags - New flags word * * RETURN: The updated parser op * * DESCRIPTION: Set bits in the op flags word. Will not clear bits, only set * ******************************************************************************/ ACPI_PARSE_OBJECT * TrSetOpFlags ( ACPI_PARSE_OBJECT *Op, UINT32 Flags) { if (!Op) { return (NULL); } DbgPrint (ASL_PARSE_OUTPUT, "\nSetOpFlags: %s Op %p, %8.8X", Op->Asl.ParseOpName, Op, Flags); TrPrintOpFlags (Flags, ASL_PARSE_OUTPUT); DbgPrint (ASL_PARSE_OUTPUT, "\n\n"); Op->Asl.CompileFlags |= Flags; return (Op); } /******************************************************************************* * * FUNCTION: TrSetOpAmlLength * * PARAMETERS: Op - An existing parse op * Length - AML Length * * RETURN: The updated parser op * * DESCRIPTION: Set the AML Length in a op. Used by the parser to indicate * the presence of a op that must be reduced to a fixed length * constant. * ******************************************************************************/ ACPI_PARSE_OBJECT * TrSetOpAmlLength ( ACPI_PARSE_OBJECT *Op, UINT32 Length) { DbgPrint (ASL_PARSE_OUTPUT, "\nSetOpAmlLength: Op %p, %8.8X\n", Op, Length); if (!Op) { return (NULL); } Op->Asl.AmlLength = Length; return (Op); } /******************************************************************************* * * FUNCTION: TrSetOpParent * * PARAMETERS: Op - To be set to new parent * ParentOp - The parent * * RETURN: None, sets Op parent directly * * DESCRIPTION: Change the parent of a parse op. * ******************************************************************************/ void TrSetOpParent ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *ParentOp) { Op->Asl.Parent = ParentOp; } /******************************************************************************* * * FUNCTION: TrSetOpCurrentFilename * * PARAMETERS: Op - An existing parse op * * RETURN: None * * DESCRIPTION: Save the include file filename. Used for debug output only. * ******************************************************************************/ void TrSetOpCurrentFilename ( ACPI_PARSE_OBJECT *Op) { Op->Asl.Filename = AslGbl_PreviousIncludeFilename; } /******************************************************************************* * * FUNCTION: TrSetOpIntegerWidth * * PARAMETERS: Op - An existing parse op * * RETURN: None * * DESCRIPTION: * ******************************************************************************/ void TrSetOpIntegerWidth ( ACPI_PARSE_OBJECT *TableSignatureOp, ACPI_PARSE_OBJECT *RevisionOp) { /* TBD: Check table sig? (DSDT vs. SSDT) */ /* Handle command-line version override */ if (AslGbl_RevisionOverride) { AcpiUtSetIntegerWidth (AslGbl_RevisionOverride); } else { AcpiUtSetIntegerWidth ((UINT8) RevisionOp->Asl.Value.Integer); } } /******************************************************************************* * * FUNCTION: TrSetOpEndLineNumber * * PARAMETERS: Op - An existing parse op * * RETURN: None. * * DESCRIPTION: Set the ending line numbers (file line and logical line) of a * parse op to the current line numbers. * ******************************************************************************/ void TrSetOpEndLineNumber ( ACPI_PARSE_OBJECT *Op) { /* If the end line # is already set, just return */ if (Op->Asl.EndLine) { return; } Op->Asl.EndLine = AslGbl_CurrentLineNumber; Op->Asl.EndLogicalLine = AslGbl_LogicalLineNumber; } /******************************************************************************* * * FUNCTION: TrLinkOpChildren * * PARAMETERS: Op - An existing parse op * NumChildren - Number of children to follow * ... - A list of child ops to link to the new * op. NumChildren long. * * RETURN: The updated (linked) op * * DESCRIPTION: Link a group of ops to an existing parse op * ******************************************************************************/ ACPI_PARSE_OBJECT * TrLinkOpChildren ( ACPI_PARSE_OBJECT *Op, UINT32 NumChildren, ...) { ACPI_PARSE_OBJECT *Child; ACPI_PARSE_OBJECT *PrevChild; ACPI_PARSE_OBJECT *LastSibling; va_list ap; UINT32 i; BOOLEAN FirstChild; ACPI_FUNCTION_NAME (TrLinkOpChildren); va_start (ap, NumChildren); TrSetOpEndLineNumber (Op); DbgPrint (ASL_PARSE_OUTPUT, "\nLinkChildren Line [%u to %u] NewParent %p Child %u Op %s ", Op->Asl.LineNumber, Op->Asl.EndLine, Op, NumChildren, UtGetOpName(Op->Asl.ParseOpcode)); switch (Op->Asl.ParseOpcode) { case PARSEOP_ASL_CODE: if (!AslGbl_ParseTreeRoot) { DbgPrint (ASL_PARSE_OUTPUT, "Creating first Definition Block\n"); AslGbl_ParseTreeRoot = Op; Op->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; } else { DbgPrint (ASL_PARSE_OUTPUT, "Creating subsequent Definition Block\n"); Op = AslGbl_ParseTreeRoot; } DbgPrint (ASL_PARSE_OUTPUT, "ASLCODE (Tree Completed)->"); break; case PARSEOP_DEFINITION_BLOCK: DbgPrint (ASL_PARSE_OUTPUT, "DEFINITION_BLOCK (Tree Completed)->"); break; case PARSEOP_OPERATIONREGION: DbgPrint (ASL_PARSE_OUTPUT, "OPREGION->"); break; case PARSEOP_OR: DbgPrint (ASL_PARSE_OUTPUT, "OR->"); break; default: /* Nothing to do for other opcodes */ break; } /* The following is for capturing comments */ if (AcpiGbl_CaptureComments) { /* * If there are "regular comments" detected at this point, * then is an endBlk comment. Categorize it as so and distribute * all regular comments to this parse op. */ if (AslGbl_CommentListHead) { Op->Asl.EndBlkComment = AslGbl_CommentListHead; CvDbgPrint ("EndBlk Comment for %s: %s", Op->Asl.ParseOpName, AslGbl_CommentListHead->Comment); AslGbl_CommentListHead = NULL; AslGbl_CommentListTail = NULL; } } /* Link the new op to it's children */ PrevChild = NULL; FirstChild = TRUE; for (i = 0; i < NumChildren; i++) { Child = va_arg (ap, ACPI_PARSE_OBJECT *); if ((Child == PrevChild) && (Child != NULL)) { AslError (ASL_WARNING, ASL_MSG_COMPILER_INTERNAL, Child, "Child op list invalid"); va_end(ap); return (Op); } DbgPrint (ASL_PARSE_OUTPUT, "%p, ", Child); /* * If child is NULL, this means that an optional argument * was omitted. We must create a placeholder with a special * opcode (DEFAULT_ARG) so that the code generator will know * that it must emit the correct default for this argument */ if (!Child) { Child = TrAllocateOp (PARSEOP_DEFAULT_ARG); } /* Link first child to parent */ if (FirstChild) { FirstChild = FALSE; /* * In the case that multiple definition blocks are being compiled, * append the definition block to the end of the child list as the * last sibling. This is done to facilitate namespace cross- * reference between multiple definition blocks. */ if (Op->Asl.Child && (Op->Asl.Child->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK)) { LastSibling = Op->Asl.Child; while (LastSibling->Asl.Next) { LastSibling = LastSibling->Asl.Next; } LastSibling->Asl.Next = Child; } else { Op->Asl.Child = Child; } } /* Point all children to parent */ Child->Asl.Parent = Op; /* Link children in a peer list */ if (PrevChild) { PrevChild->Asl.Next = Child; } /* * This child might be a list, point all ops in the list * to the same parent */ while (Child->Asl.Next) { Child = Child->Asl.Next; Child->Asl.Parent = Op; } PrevChild = Child; } va_end(ap); DbgPrint (ASL_PARSE_OUTPUT, "\n\n"); if (AcpiGbl_CaptureComments) { AslGbl_CommentState.LatestParseOp = Op; CvDbgPrint ("%s=====Set latest parse op to this op.\n", ACPI_GET_FUNCTION_NAME); } return (Op); } /******************************************************************************* * * FUNCTION: TrLinkPeerOp * * PARAMETERS: Op1 - First peer * Op2 - Second peer * * RETURN: Op1 or the non-null op. * * DESCRIPTION: Link two ops as peers. Handles cases where one peer is null. * ******************************************************************************/ ACPI_PARSE_OBJECT * TrLinkPeerOp ( ACPI_PARSE_OBJECT *Op1, ACPI_PARSE_OBJECT *Op2) { ACPI_PARSE_OBJECT *Next; DbgPrint (ASL_PARSE_OUTPUT, "\nLinkPeerOp: 1=%p (%s), 2=%p (%s)\n", Op1, Op1 ? UtGetOpName(Op1->Asl.ParseOpcode) : NULL, Op2, Op2 ? UtGetOpName(Op2->Asl.ParseOpcode) : NULL); if ((!Op1) && (!Op2)) { DbgPrint (ASL_PARSE_OUTPUT, "\nTwo Null ops!\n"); return (Op1); } /* If one of the ops is null, just return the non-null op */ if (!Op2) { return (Op1); } if (!Op1) { return (Op2); } if (Op1 == Op2) { DbgPrint (ASL_DEBUG_OUTPUT, "\n************* Internal error, linking op to itself %p\n", Op1); AslError (ASL_WARNING, ASL_MSG_COMPILER_INTERNAL, Op1, "Linking op to itself"); return (Op1); } Op1->Asl.Parent = Op2->Asl.Parent; /* * Op 1 may already have a peer list (such as an IF/ELSE pair), * so we must walk to the end of the list and attach the new * peer at the end */ Next = Op1; while (Next->Asl.Next) { Next = Next->Asl.Next; } Next->Asl.Next = Op2; return (Op1); } /******************************************************************************* * * FUNCTION: TrLinkPeerOps * * PARAMETERS: NumPeers - The number of ops in the list to follow * ... - A list of ops to link together as peers * * RETURN: The first op in the list (head of the peer list) * * DESCRIPTION: Link together an arbitrary number of peer ops. * ******************************************************************************/ ACPI_PARSE_OBJECT * TrLinkPeerOps ( UINT32 NumPeers, ...) { ACPI_PARSE_OBJECT *This; ACPI_PARSE_OBJECT *Next; va_list ap; UINT32 i; ACPI_PARSE_OBJECT *Start; DbgPrint (ASL_PARSE_OUTPUT, "\nLinkPeerOps: (%u) ", NumPeers); va_start (ap, NumPeers); This = va_arg (ap, ACPI_PARSE_OBJECT *); Start = This; /* * Link all peers */ for (i = 0; i < (NumPeers -1); i++) { DbgPrint (ASL_PARSE_OUTPUT, "%u=%p ", (i+1), This); while (This->Asl.Next) { This = This->Asl.Next; } /* Get another peer op */ Next = va_arg (ap, ACPI_PARSE_OBJECT *); if (!Next) { Next = TrAllocateOp (PARSEOP_DEFAULT_ARG); } /* link new op to the current op */ This->Asl.Next = Next; This = Next; } va_end (ap); DbgPrint (ASL_PARSE_OUTPUT,"\n"); return (Start); } /******************************************************************************* * * FUNCTION: TrLinkChildOp * * PARAMETERS: Op1 - Parent op * Op2 - Op to become a child * * RETURN: The parent op * * DESCRIPTION: Link two ops together as a parent and child * ******************************************************************************/ ACPI_PARSE_OBJECT * TrLinkChildOp ( ACPI_PARSE_OBJECT *Op1, ACPI_PARSE_OBJECT *Op2) { ACPI_PARSE_OBJECT *Next; DbgPrint (ASL_PARSE_OUTPUT, "\nLinkChildOp: Parent=%p (%s), Child=%p (%s)\n", Op1, Op1 ? UtGetOpName(Op1->Asl.ParseOpcode): NULL, Op2, Op2 ? UtGetOpName(Op2->Asl.ParseOpcode): NULL); /* * Converter: if TrLinkChildOp is called to link a method call, * turn on capture comments as it signifies that we are done parsing * a method call. */ if (AcpiGbl_CaptureComments && Op1) { if (Op1->Asl.ParseOpcode == PARSEOP_METHODCALL) { AslGbl_CommentState.CaptureComments = TRUE; } AslGbl_CommentState.LatestParseOp = Op1; } if (!Op1 || !Op2) { return (Op1); } Op1->Asl.Child = Op2; /* Set the child and all peers of the child to point to the parent */ Next = Op2; while (Next) { Next->Asl.Parent = Op1; Next = Next->Asl.Next; } return (Op1); } /******************************************************************************* * * FUNCTION: TrWalkParseTree * * PARAMETERS: Op - Walk starting point * Visitation - Type of walk * DescendingCallback - Called during tree descent * AscendingCallback - Called during tree ascent * Context - To be passed to the callbacks * * RETURN: Status from callback(s) * * DESCRIPTION: Walk the entire parse tree. * ******************************************************************************/ ACPI_STATUS TrWalkParseTree ( ACPI_PARSE_OBJECT *Op, UINT32 Visitation, ASL_WALK_CALLBACK DescendingCallback, ASL_WALK_CALLBACK AscendingCallback, void *Context) { UINT32 Level; BOOLEAN OpPreviouslyVisited; ACPI_PARSE_OBJECT *StartOp = Op; ACPI_STATUS Status; ACPI_PARSE_OBJECT *Restore = NULL; BOOLEAN WalkOneDefinitionBlock = Visitation & ASL_WALK_VISIT_DB_SEPARATELY; if (!AslGbl_ParseTreeRoot) { return (AE_OK); } Level = 0; OpPreviouslyVisited = FALSE; if (Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK && WalkOneDefinitionBlock) { Restore = Op->Asl.Next; Op->Asl.Next = NULL; } switch (Visitation & ~ASL_WALK_VISIT_DB_SEPARATELY) { case ASL_WALK_VISIT_DOWNWARD: while (Op) { if (!OpPreviouslyVisited) { /* Let the callback process the op. */ Status = DescendingCallback (Op, Level, Context); if (ACPI_SUCCESS (Status)) { /* Visit children first, once */ if (Op->Asl.Child) { Level++; Op = Op->Asl.Child; continue; } } else if (Status != AE_CTRL_DEPTH) { /* Exit immediately on any error */ goto ErrorExit; } } /* Terminate walk at start op */ if (Op == StartOp) { break; } /* No more children, visit peers */ if (Op->Asl.Next) { Op = Op->Asl.Next; OpPreviouslyVisited = FALSE; } else { /* No children or peers, re-visit parent */ if (Level != 0 ) { Level--; } Op = Op->Asl.Parent; OpPreviouslyVisited = TRUE; } } break; case ASL_WALK_VISIT_UPWARD: while (Op) { /* Visit leaf op (no children) or parent op on return trip */ if ((!Op->Asl.Child) || (OpPreviouslyVisited)) { /* Let the callback process the op. */ Status = AscendingCallback (Op, Level, Context); if (ACPI_FAILURE (Status)) { goto ErrorExit; } } else { /* Visit children first, once */ Level++; Op = Op->Asl.Child; continue; } /* Terminate walk at start op */ if (Op == StartOp) { break; } /* No more children, visit peers */ if (Op->Asl.Next) { Op = Op->Asl.Next; OpPreviouslyVisited = FALSE; } else { /* No children or peers, re-visit parent */ if (Level != 0 ) { Level--; } Op = Op->Asl.Parent; OpPreviouslyVisited = TRUE; } } break; case ASL_WALK_VISIT_TWICE: while (Op) { if (OpPreviouslyVisited) { Status = AscendingCallback (Op, Level, Context); if (ACPI_FAILURE (Status)) { goto ErrorExit; } } else { /* Let the callback process the op. */ Status = DescendingCallback (Op, Level, Context); if (ACPI_SUCCESS (Status)) { /* Visit children first, once */ if (Op->Asl.Child) { Level++; Op = Op->Asl.Child; continue; } } else if (Status != AE_CTRL_DEPTH) { /* Exit immediately on any error */ goto ErrorExit; } } /* Terminate walk at start op */ if (Op == StartOp) { break; } /* No more children, visit peers */ if (Op->Asl.Next) { Op = Op->Asl.Next; OpPreviouslyVisited = FALSE; } else { /* No children or peers, re-visit parent */ if (Level != 0 ) { Level--; } Op = Op->Asl.Parent; OpPreviouslyVisited = TRUE; } } break; default: /* No other types supported */ break; } /* If we get here, the walk completed with no errors */ if (Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK && WalkOneDefinitionBlock) { Op->Asl.Next = Restore; } return (AE_OK); ErrorExit: if (Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK && WalkOneDefinitionBlock) { Op->Asl.Next = Restore; } return (Status); } src/acpica/source/compiler/asltypes.h000066400000000000000000000463351465205512700202360ustar00rootroot00000000000000/****************************************************************************** * * Module Name: asltypes.h - compiler data types and struct definitions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ASLTYPES_H #define __ASLTYPES_H /******************************************************************************* * * Structure definitions * ******************************************************************************/ /* Op flags for the ACPI_PARSE_OBJECT */ #define OP_VISITED 0x00000001 #define OP_AML_PACKAGE 0x00000002 #define OP_IS_TARGET 0x00000004 #define OP_IS_RESOURCE_DESC 0x00000008 #define OP_IS_RESOURCE_FIELD 0x00000010 #define OP_HAS_NO_EXIT 0x00000020 #define OP_IF_HAS_NO_EXIT 0x00000040 #define OP_NAME_INTERNALIZED 0x00000080 #define OP_METHOD_NO_RETVAL 0x00000100 #define OP_METHOD_SOME_NO_RETVAL 0x00000200 #define OP_RESULT_NOT_USED 0x00000400 #define OP_METHOD_TYPED 0x00000800 #define OP_COULD_NOT_REDUCE 0x00001000 #define OP_COMPILE_TIME_CONST 0x00002000 #define OP_IS_TERM_ARG 0x00004000 #define OP_WAS_ONES_OP 0x00008000 #define OP_IS_NAME_DECLARATION 0x00010000 #define OP_COMPILER_EMITTED 0x00020000 #define OP_IS_DUPLICATE 0x00040000 #define OP_IS_RESOURCE_DATA 0x00080000 #define OP_IS_NULL_RETURN 0x00100000 #define OP_NOT_FOUND_DURING_LOAD 0x00200000 #define ACPI_NUM_OP_FLAGS 0x22 /* Keeps information about individual control methods */ typedef struct asl_method_info { ACPI_PARSE_OBJECT *Op; ACPI_PARSE_OBJECT *CurrentOp; struct asl_method_info *Next; UINT32 ValidArgTypes[ACPI_METHOD_NUM_ARGS]; UINT32 ValidReturnTypes; UINT32 NumReturnNoValue; UINT32 NumReturnWithValue; UINT8 NumArguments; UINT8 LocalInitialized[ACPI_METHOD_NUM_LOCALS]; UINT8 ArgInitialized[ACPI_METHOD_NUM_ARGS]; UINT8 HasBeenTyped; UINT8 ShouldBeSerialized; UINT8 CreatesNamedObjects; } ASL_METHOD_INFO; /* Parse tree walk info for control method analysis */ typedef struct asl_analysis_walk_info { ASL_METHOD_INFO *MethodStack; } ASL_ANALYSIS_WALK_INFO; /* An entry in the ParseOpcode to AmlOpcode mapping table */ typedef struct asl_mapping_entry { UINT32 Value; UINT32 AcpiBtype; /* Object type or return type */ UINT16 AmlOpcode; UINT8 Flags; } ASL_MAPPING_ENTRY; /* Parse tree walk info structure */ typedef struct asl_walk_info { ACPI_PARSE_OBJECT **NodePtr; UINT32 *LevelPtr; } ASL_WALK_INFO; /* File info */ typedef struct asl_file_info { FILE *Handle; char *Filename; } ASL_FILE_INFO; typedef struct asl_file_status { UINT32 Line; UINT32 Offset; } ASL_FILE_STATUS; typedef UINT32 ASL_FILE_SWITCH_STATUS; /* File switch status */ #define SWITCH_TO_DIFFERENT_FILE 0 #define SWITCH_TO_SAME_FILE 1 #define FILE_NOT_FOUND 2 /* * File types. Note: Any changes to this table must also be reflected * in the Gbl_Files array. * * Corresponding filename suffixes are in comments * * NOTE: Don't move the first 4 file types * * .xxx file extension: this is used as a temporary .aml file for * the ASL/ASL+ converter and is deleted after conversion. This file * should never be used in the interpreter. */ typedef enum { ASL_FILE_STDOUT = 0, ASL_FILE_STDERR, ASL_FILE_INPUT, /* .asl */ ASL_FILE_AML_OUTPUT, /* .aml */ ASL_FILE_SOURCE_OUTPUT, /* .src */ ASL_FILE_PREPROCESSOR, /* .pre */ ASL_FILE_PREPROCESSOR_USER, /* .i */ ASL_FILE_LISTING_OUTPUT, /* .lst */ ASL_FILE_HEX_OUTPUT, /* .hex */ ASL_FILE_NAMESPACE_OUTPUT, /* .nsp */ ASL_FILE_DEBUG_OUTPUT, /* .txt */ ASL_FILE_ASM_SOURCE_OUTPUT, /* .asm */ ASL_FILE_C_SOURCE_OUTPUT, /* .c */ ASL_FILE_ASM_INCLUDE_OUTPUT,/* .inc */ ASL_FILE_C_INCLUDE_OUTPUT, /* .h */ ASL_FILE_C_OFFSET_OUTPUT, /* .offset.h */ ASL_FILE_MAP_OUTPUT, /* .map */ ASL_FILE_XREF_OUTPUT, /* .xrf */ ASL_FILE_CONV_DEBUG_OUTPUT, /* .cdb */ ASL_FILE_CONV_OUTPUT /* .xxx */ } ASL_FILE_TYPES; #define ASL_MAX_FILE_TYPE 18 #define ASL_NUM_FILES (ASL_MAX_FILE_TYPE + 1) typedef struct asl_file_desc { const char *ShortDescription; const char *Description; } ASL_FILE_DESC; /* Name suffixes used to create filenames for output files */ #define FILE_SUFFIX_ASL_CODE "asl" #define FILE_SUFFIX_AML_CODE "aml" #define FILE_SUFFIX_SOURCE "src" #define FILE_SUFFIX_PREPROCESSOR "pre" #define FILE_SUFFIX_PREPROC_USER "i" #define FILE_SUFFIX_LISTING "lst" #define FILE_SUFFIX_HEX_DUMP "hex" #define FILE_SUFFIX_NAMESPACE "nsp" #define FILE_SUFFIX_DEBUG "txt" #define FILE_SUFFIX_ASM_SOURCE "asm" #define FILE_SUFFIX_C_SOURCE "c" #define FILE_SUFFIX_ASM_INCLUDE "inc" #define FILE_SUFFIX_C_INCLUDE "h" #define FILE_SUFFIX_C_OFFSET "offset.h" #define FILE_SUFFIX_MAP "map" #define FILE_SUFFIX_XREF "xrf" #define FILE_SUFFIX_CONVERT_AML "xxx" #define FILE_SUFFIX_CONVERT_DEBUG "cdb" /* Cache block structure for ParseOps and Strings */ typedef struct asl_cache_info { void *Next; char Buffer[]; } ASL_CACHE_INFO; typedef struct asl_include_dir { char *Dir; struct asl_include_dir *Next; } ASL_INCLUDE_DIR; /* * An entry in the exception list, one for each error/warning * Note: SubError nodes would be treated with the same messageId and Level * as the parent error node. * * The source filename represents the name of the .src of where the error * occurred. This is useful for errors that occur inside of include files. * Since include files aren't recorded as a part of the global files list, * this provides a way to get the included file. */ typedef struct asl_error_msg { UINT32 LineNumber; UINT32 LogicalLineNumber; UINT32 LogicalByteOffset; UINT32 Column; char *Message; struct asl_error_msg *Next; struct asl_error_msg *SubError; char *Filename; char *SourceLine; char *SourceFilename; UINT32 FilenameLength; UINT16 MessageId; UINT8 Level; } ASL_ERROR_MSG; /* An entry in the expected messages array */ typedef struct asl_expected_message { UINT32 MessageId; char *MessageIdStr; BOOLEAN MessageReceived; } ASL_EXPECTED_MESSAGE; /* * An entry in the line-based expected messages list * * TBD: might be possible to merge this with ASL_EXPECTED_MESSAGE */ typedef struct asl_expected_msg_node { struct asl_expected_msg_node *Next; UINT32 MessageId; char *MessageIdStr; struct asl_location_node *LocationList; } ASL_EXPECTED_MSG_NODE; typedef struct asl_location_node { struct asl_location_node *Next; char *Filename; UINT32 LineNumber; UINT32 Column; UINT32 LogicalByteOffset; BOOLEAN MessageReceived; } ASL_LOCATION_NODE; /* An entry in the listing file stack (for include files) */ typedef struct asl_listing_node { char *Filename; UINT32 LineNumber; struct asl_listing_node *Next; } ASL_LISTING_NODE; /* Callback interface for a parse tree walk */ /* * TBD - another copy of this is in adisasm.h, fix */ #ifndef ASL_WALK_CALLBACK_DEFINED typedef ACPI_STATUS (*ASL_WALK_CALLBACK) ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); #define ASL_WALK_CALLBACK_DEFINED #endif typedef struct asl_event_info { UINT64 StartTime; UINT64 EndTime; char *EventName; BOOLEAN Valid; } ASL_EVENT_INFO; /* Hardware mapping file structures */ typedef struct acpi_gpio_info { struct acpi_gpio_info *Next; ACPI_PARSE_OBJECT *Op; char *DeviceName; ACPI_NAMESPACE_NODE *TargetNode; UINT32 References; UINT32 PinCount; UINT32 PinIndex; UINT16 PinNumber; UINT8 Type; UINT8 Direction; UINT8 Polarity; } ACPI_GPIO_INFO; typedef struct acpi_serial_info { struct acpi_serial_info *Next; ACPI_PARSE_OBJECT *Op; char *DeviceName; ACPI_NAMESPACE_NODE *TargetNode; AML_RESOURCE *Resource; UINT32 Speed; UINT16 Address; } ACPI_SERIAL_INFO; typedef struct asl_method_local { ACPI_PARSE_OBJECT *Op; UINT8 Flags; } ASL_METHOD_LOCAL; /* Values for Flags field above */ #define ASL_LOCAL_INITIALIZED (1) #define ASL_LOCAL_REFERENCED (1<<1) #define ASL_ARG_IS_LOCAL (1<<2) #define ASL_ARG_INITIALIZED (1<<3) #define ASL_ARG_REFERENCED (1<<4) /* Info used to track method counts for cross reference output file */ typedef struct asl_xref_info { UINT32 ThisMethodInvocations; UINT32 TotalPredefinedMethods; UINT32 TotalUserMethods; UINT32 TotalUnreferenceUserMethods; UINT32 ThisObjectReferences; UINT32 TotalObjects; UINT32 TotalUnreferencedObjects; ACPI_PARSE_OBJECT *MethodOp; ACPI_PARSE_OBJECT *CurrentMethodOp; } ASL_XREF_INFO; typedef struct asl_file_node { FILE *File; UINT32 CurrentLineNumber; void *State; char *Filename; struct asl_file_node *Next; } ASL_FILE_NODE; typedef struct asl_files_node { struct asl_file_info Files[ASL_NUM_FILES]; struct asl_files_node *Next; char *TableSignature; char *TableId; UINT32 TotalLineCount; UINT32 OriginalInputFileSize; UINT32 TotalKeywords; UINT32 TotalFields; UINT32 OutputByteLength; UINT32 TotalNamedObjects; UINT32 TotalExecutableOpcodes; BOOLEAN ParserErrorDetected; UINT8 FileType; } ASL_GLOBAL_FILE_NODE; #endif /* __ASLTYPES_H */ src/acpica/source/compiler/asltypes.y000066400000000000000000000432121465205512700202460ustar00rootroot00000000000000NoEcho(' /****************************************************************************** * * Module Name: asltypes.y - Bison/Yacc production types/names * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ ') /****************************************************************************** * * Production names * *****************************************************************************/ %type ArgList %type AslCode %type BufferData %type BufferTermData %type CompilerDirective %type DataObject %type DefinitionBlockTerm %type DefinitionBlockList %type IntegerData %type NamedObject %type NameSpaceModifier %type Object %type PackageData %type ParameterTypePackage %type ParameterTypePackageList %type ParameterTypesPackage %type ParameterTypesPackageList /* %type RequiredTarget */ %type SimpleName %type StringData %type StringLiteral %type Target %type Term %type TermArg %type TermList %type MethodInvocationTerm /* Type4Opcode is obsolete */ %type Type1Opcode %type Type2BufferOpcode %type Type2BufferOrStringOpcode %type Type2IntegerOpcode %type Type2Opcode %type Type2StringOpcode %type Type3Opcode %type Type5Opcode %type Type6Opcode %type AccessAsTerm %type ExternalTerm %type FieldUnit %type FieldUnitEntry %type FieldUnitList %type IncludeTerm %type OffsetTerm %type OptionalAccessAttribTerm /* Named Objects */ %type BankFieldTerm %type CreateBitFieldTerm %type CreateByteFieldTerm %type CreateDWordFieldTerm %type CreateFieldTerm %type CreateQWordFieldTerm %type CreateWordFieldTerm %type DataRegionTerm %type DeviceTerm %type EventTerm %type FieldTerm %type FunctionTerm %type IndexFieldTerm %type MethodTerm %type MutexTerm %type OpRegionTerm %type OpRegionSpaceIdTerm %type PowerResTerm %type ProcessorTerm %type ThermalZoneTerm /* Namespace modifiers */ %type AliasTerm %type NameTerm %type ScopeTerm /* Type 1 opcodes */ %type BreakPointTerm %type BreakTerm %type CaseDefaultTermList %type CaseTerm %type ContinueTerm %type DefaultTerm %type ElseTerm %type FatalTerm %type ElseIfTerm %type IfTerm %type LoadTerm %type NoOpTerm %type NotifyTerm %type ReleaseTerm %type ResetTerm %type ReturnTerm %type SignalTerm %type SleepTerm %type StallTerm %type SwitchTerm %type UnloadTerm %type WhileTerm /* %type CaseTermList */ /* Type 2 opcodes */ %type AcquireTerm %type AddTerm %type AndTerm %type ConcatResTerm %type ConcatTerm %type CondRefOfTerm %type CopyObjectTerm %type DecTerm %type DerefOfTerm %type DivideTerm %type FindSetLeftBitTerm %type FindSetRightBitTerm %type FromBCDTerm %type IncTerm %type IndexTerm %type LAndTerm %type LEqualTerm %type LGreaterEqualTerm %type LGreaterTerm %type LLessEqualTerm %type LLessTerm %type LNotEqualTerm %type LNotTerm %type LoadTableTerm %type LOrTerm %type MatchTerm %type MidTerm %type ModTerm %type MultiplyTerm %type NAndTerm %type NOrTerm %type NotTerm %type ObjectTypeTerm %type OrTerm %type RawDataBufferTerm %type RefOfTerm %type ShiftLeftTerm %type ShiftRightTerm %type SizeOfTerm %type StoreTerm %type SubtractTerm %type TimerTerm %type ToBCDTerm %type ToBufferTerm %type ToDecimalStringTerm %type ToHexStringTerm %type ToIntegerTerm %type ToStringTerm %type WaitTerm %type XOrTerm /* Keywords */ %type AccessAttribKeyword %type AccessTypeKeyword %type AddressingModeKeyword %type AddressKeyword %type AddressSpaceKeyword %type BitsPerByteKeyword %type ClockPhaseKeyword %type ClockPolarityKeyword %type DecodeKeyword %type DevicePolarityKeyword %type DMATypeKeyword %type EndianKeyword %type FlowControlKeyword %type InterruptLevel %type InterruptTypeKeyword %type IODecodeKeyword %type IoRestrictionKeyword %type LockRuleKeyword %type MatchOpKeyword %type MaxKeyword %type MemTypeKeyword %type MinKeyword %type ObjectTypeKeyword %type OptionalBusMasterKeyword %type OptionalReadWriteKeyword %type ParityTypeKeyword %type PinConfigByte %type PinConfigKeyword %type RangeTypeKeyword %type RegionSpaceKeyword %type ResourceTypeKeyword %type SerializeRuleKeyword %type ShareTypeKeyword %type SlaveModeKeyword %type StopBitsKeyword %type TranslationKeyword %type TypeKeyword %type UpdateRuleKeyword %type WireModeKeyword %type XferSizeKeyword %type XferTypeKeyword %type ClockScaleKeyword %type ClockModeKeyword /* Types */ %type SuperName %type ObjectTypeSource %type DerefOfSource %type RefOfSource %type CondRefOfSource %type ArgTerm %type LocalTerm %type DebugTerm %type Integer %type ByteConst %type WordConst %type DWordConst %type QWordConst %type String %type ConstTerm %type ConstExprTerm %type ByteConstExpr %type WordConstExpr %type DWordConstExpr %type QWordConstExpr %type DWordList %type BufferTerm %type ByteList %type PackageElement %type PackageList %type PackageTerm /* Macros */ %type EISAIDTerm %type ResourceMacroList %type ResourceMacroTerm %type ResourceTemplateTerm %type PldKeyword %type PldKeywordList %type ToPLDTerm %type ToUUIDTerm %type UnicodeTerm %type PrintfArgList %type PrintfTerm %type FprintfTerm %type ForTerm /* Resource Descriptors */ %type ClockInputTerm %type ConnectionTerm %type Csi2SerialBusTerm %type DMATerm %type DWordIOTerm %type DWordMemoryTerm %type DWordSpaceTerm %type EndDependentFnTerm %type ExtendedIOTerm %type ExtendedMemoryTerm %type ExtendedSpaceTerm %type FixedDmaTerm %type FixedIOTerm %type GpioIntTerm %type GpioIoTerm %type I2cSerialBusTerm %type I2cSerialBusTermV2 %type InterruptTerm %type IOTerm %type IRQNoFlagsTerm %type IRQTerm %type Memory24Term %type Memory32FixedTerm %type Memory32Term %type NameSeg %type NameString %type PinConfigTerm %type PinFunctionTerm %type PinGroupTerm %type PinGroupConfigTerm %type PinGroupFunctionTerm %type QWordIOTerm %type QWordMemoryTerm %type QWordSpaceTerm %type RegisterTerm %type SpiSerialBusTerm %type SpiSerialBusTermV2 %type StartDependentFnNoPriTerm %type StartDependentFnTerm %type UartSerialBusTerm %type UartSerialBusTermV2 %type VendorLongTerm %type VendorShortTerm %type WordBusNumberTerm %type WordIOTerm %type WordSpaceTerm /* Local types that help construct the AML, not in ACPI spec */ %type AmlPackageLengthTerm %type IncludeEndTerm %type NameStringItem %type TermArgItem %type OptionalAccessSize %type OptionalAccessTypeKeyword %type OptionalAddressingMode %type OptionalAddressRange %type OptionalBitsPerByte %type OptionalBuffer_Last %type OptionalByteConstExpr %type OptionalCount %type OptionalDataCount %type OptionalDecodeType %type OptionalDevicePolarity %type OptionalDWordConstExpr %type OptionalEndian %type OptionalFlowControl %type OptionalIoRestriction %type OptionalListString %type OptionalLockRuleKeyword %type OptionalMaxType %type OptionalMemType %type OptionalMinType %type OptionalNameString %type OptionalNameString_First %type OptionalNameString_Last %type OptionalObjectTypeKeyword %type OptionalParameterTypePackage %type OptionalParameterTypesPackage %type OptionalParentheses %type OptionalParityType %type OptionalPredicate %type OptionalQWordConstExpr %type OptionalRangeType %type OptionalReference %type OptionalResourceType %type OptionalResourceType_First %type OptionalProducerResourceType %type OptionalReturnArg %type OptionalSerializeRuleKeyword %type OptionalShareType %type OptionalShareType_First %type OptionalSlaveMode %type OptionalSlaveMode_First %type OptionalStopBits %type OptionalStringData %type OptionalSyncLevel %type OptionalTermArg %type OptionalTranslationType_Last %type OptionalType %type OptionalType_Last %type OptionalUpdateRuleKeyword %type OptionalWireMode %type OptionalWordConst %type OptionalWordConstExpr %type OptionalXferSize /* * ASL+ (C-style) parser */ /* Expressions and symbolic operators */ %type Expression %type EqualsTerm %type IndexExpTerm /* ASL+ Named object declaration support */ /* %type NameTermAslPlus %type BufferBegin %type BufferEnd %type PackageBegin %type PackageEnd %type OptionalLength */ /* ASL+ Structure declarations */ /* %type StructureTerm %type StructureTermBegin %type StructureType %type StructureTag %type StructureElementList %type StructureElement %type StructureElementType %type OptionalStructureElementType %type StructureId */ /* Structure instantiantion */ /* %type StructureInstanceTerm %type StructureTagReference %type StructureInstanceEnd */ /* Pseudo-instantiantion for method Args/Locals */ /* %type MethodStructureTerm %type LocalStructureName */ /* Direct structure references via the Index operator */ /* %type StructureReference %type StructureIndexTerm %type StructurePointerTerm %type StructurePointerReference %type OptionalDefinePointer */ src/acpica/source/compiler/aslutils.c000066400000000000000000001027641465205512700202240ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslutils -- compiler utilities * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acdisasm.h" #include "acnamesp.h" #include "amlcode.h" #include "acapps.h" #include #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslutils") /* Local prototypes */ static void UtPadNameWithUnderscores ( char *NameSeg, char *PaddedNameSeg); static void UtAttachNameseg ( ACPI_PARSE_OBJECT *Op, char *Name); static void UtDisplayErrorSummary ( UINT32 FileId); /******************************************************************************* * * FUNCTION: UtIsBigEndianMachine * * PARAMETERS: None * * RETURN: TRUE if machine is big endian * FALSE if machine is little endian * * DESCRIPTION: Detect whether machine is little endian or big endian. * ******************************************************************************/ UINT8 UtIsBigEndianMachine ( void) { union { UINT32 Integer; UINT8 Bytes[4]; } Overlay = {0xFF000000}; return (Overlay.Bytes[0]); /* Returns 0xFF (TRUE) for big endian */ } /******************************************************************************* * * FUNCTION: UtIsIdInteger * * PARAMETERS: Pointer to an ACPI ID (HID, CID) string * * RETURN: TRUE if string is an integer * FALSE if string is not an integer * * DESCRIPTION: Determine whether the input ACPI ID string can be converted to * an integer value. * ******************************************************************************/ BOOLEAN UtIsIdInteger ( UINT8 *Target) { UINT32 i; /* The first three characters of the string must be alphabetic */ for (i = 0; i < 3; i++) { if (!isalpha ((int) Target[i])) { break; } } if (i < 3) { return (TRUE); } return (FALSE); } /****************************************************************************** * * FUNCTION: UtQueryForOverwrite * * PARAMETERS: Pathname - Output filename * * RETURN: TRUE if file does not exist or overwrite is authorized * * DESCRIPTION: Query for file overwrite if it already exists. * ******************************************************************************/ BOOLEAN UtQueryForOverwrite ( char *Pathname) { struct stat StatInfo; int InChar; if (!stat (Pathname, &StatInfo)) { fprintf (stderr, "Target file \"%s\" already exists, overwrite? [y|n] ", Pathname); InChar = fgetc (stdin); if (InChar == '\n') { InChar = fgetc (stdin); } if ((InChar != 'y') && (InChar != 'Y')) { return (FALSE); } } return (TRUE); } /******************************************************************************* * * FUNCTION: UtNodeIsDescendantOf * * PARAMETERS: Node1 - Child node * Node2 - Possible parent node * * RETURN: Boolean * * DESCRIPTION: Returns TRUE if Node1 is a descendant of Node2. Otherwise, * return FALSE. Note, we assume a NULL Node2 element to be the * topmost (root) scope. All nodes are descendants of the root. * Note: Nodes at the same level (siblings) are not considered * descendants. * ******************************************************************************/ BOOLEAN UtNodeIsDescendantOf ( ACPI_NAMESPACE_NODE *Node1, ACPI_NAMESPACE_NODE *Node2) { if (Node1 == Node2) { return (FALSE); } if (!Node2) { return (TRUE); /* All nodes descend from the root */ } /* Walk upward until the root is reached or parent is found */ while (Node1) { if (Node1 == Node2) { return (TRUE); } Node1 = Node1->Parent; } return (FALSE); } /******************************************************************************* * * FUNCTION: UtGetParentMethodNode * * PARAMETERS: Node - Namespace node for any object * * RETURN: Namespace node for the parent method * NULL - object is not within a method * * DESCRIPTION: Find the parent (owning) method node for a namespace object * ******************************************************************************/ ACPI_NAMESPACE_NODE * UtGetParentMethodNode ( ACPI_NAMESPACE_NODE *Node) { ACPI_NAMESPACE_NODE *ParentNode; if (!Node) { return (NULL); } /* Walk upward until a method is found, or the root is reached */ ParentNode = Node->Parent; while (ParentNode) { if (ParentNode->Type == ACPI_TYPE_METHOD) { return (ParentNode); } ParentNode = ParentNode->Parent; } return (NULL); /* Object is not within a control method */ } /******************************************************************************* * * FUNCTION: UtGetParentMethodOp * * PARAMETERS: Op - Parse Op to be checked * * RETURN: Control method Op if found. NULL otherwise * * DESCRIPTION: Find the control method parent of a parse op. Returns NULL if * the input Op is not within a control method. * ******************************************************************************/ ACPI_PARSE_OBJECT * UtGetParentMethodOp ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *NextOp; NextOp = Op->Asl.Parent; while (NextOp) { if (NextOp->Asl.AmlOpcode == AML_METHOD_OP) { return (NextOp); } NextOp = NextOp->Asl.Parent; } return (NULL); /* No parent method found */ } /******************************************************************************* * * FUNCTION: UtDisplaySupportedTables * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Print all supported ACPI table names. * ******************************************************************************/ void UtDisplaySupportedTables ( void) { const AH_TABLE *TableData; UINT32 i; printf ("\nACPI tables supported by iASL version %8.8X:\n" " (Compiler, Disassembler, Template Generator)\n", ACPI_CA_VERSION); /* All ACPI tables with the common table header */ printf ("\nKnown/Supported ACPI tables:\n"); for (TableData = AcpiGbl_SupportedTables, i = 1; TableData->Signature; TableData++, i++) { printf ("%8u) %s %s\n", i, TableData->Signature, TableData->Description); } printf ("\nTotal %u ACPI tables\n\n", i-1); } /******************************************************************************* * * FUNCTION: UtDisplayConstantOpcodes * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Print AML opcodes that can be used in constant expressions. * ******************************************************************************/ void UtDisplayConstantOpcodes ( void) { UINT32 i; printf ("Constant expression opcode information\n\n"); for (i = 0; i < sizeof (AcpiGbl_AmlOpInfo) / sizeof (ACPI_OPCODE_INFO); i++) { if (AcpiGbl_AmlOpInfo[i].Flags & AML_CONSTANT) { printf ("%s\n", AcpiGbl_AmlOpInfo[i].Name); } } } /******************************************************************************* * * FUNCTION: UtBeginEvent * * PARAMETERS: Name - Ascii name of this event * * RETURN: Event number (integer index) * * DESCRIPTION: Saves the current time with this event * ******************************************************************************/ UINT8 UtBeginEvent ( char *Name) { if (AslGbl_NextEvent >= ASL_NUM_EVENTS) { AcpiOsPrintf ("Ran out of compiler event structs!\n"); return (AslGbl_NextEvent); } /* Init event with current (start) time */ AslGbl_Events[AslGbl_NextEvent].StartTime = AcpiOsGetTimer (); AslGbl_Events[AslGbl_NextEvent].EventName = Name; AslGbl_Events[AslGbl_NextEvent].Valid = TRUE; return (AslGbl_NextEvent++); } /******************************************************************************* * * FUNCTION: UtEndEvent * * PARAMETERS: Event - Event number (integer index) * * RETURN: None * * DESCRIPTION: Saves the current time (end time) with this event * ******************************************************************************/ void UtEndEvent ( UINT8 Event) { if (Event >= ASL_NUM_EVENTS) { return; } /* Insert end time for event */ AslGbl_Events[Event].EndTime = AcpiOsGetTimer (); } /******************************************************************************* * * FUNCTION: DbgPrint * * PARAMETERS: Type - Type of output * Fmt - Printf format string * ... - variable printf list * * RETURN: None * * DESCRIPTION: Conditional print statement. Prints to stderr only if the * debug flag is set. * ******************************************************************************/ void DbgPrint ( UINT32 Type, char *Fmt, ...) { va_list Args; if (!AslGbl_DebugFlag) { return; } if ((Type == ASL_PARSE_OUTPUT) && (!(AslCompilerdebug))) { return; } va_start (Args, Fmt); (void) vfprintf (stderr, Fmt, Args); va_end (Args); return; } /******************************************************************************* * * FUNCTION: UtSetParseOpName * * PARAMETERS: Op - Parse op to be named. * * RETURN: None * * DESCRIPTION: Insert the ascii name of the parse opcode * ******************************************************************************/ void UtSetParseOpName ( ACPI_PARSE_OBJECT *Op) { AcpiUtSafeStrncpy (Op->Asl.ParseOpName, UtGetOpName (Op->Asl.ParseOpcode), ACPI_MAX_PARSEOP_NAME); } /******************************************************************************* * * FUNCTION: UtDisplayOneSummary * * PARAMETERS: FileID - ID of output file * * RETURN: None * * DESCRIPTION: Display compilation statistics for one input file * ******************************************************************************/ void UtDisplayOneSummary ( UINT32 FileId, BOOLEAN DisplayErrorSummary) { UINT32 i; ASL_GLOBAL_FILE_NODE *FileNode; BOOLEAN DisplayAMLSummary; DisplayAMLSummary = !AslGbl_PreprocessOnly && !AslGbl_ParserErrorDetected && ((AslGbl_ExceptionCount[ASL_ERROR] == 0) || AslGbl_IgnoreErrors) && AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle; if (FileId != ASL_FILE_STDOUT) { /* Compiler name and version number */ FlPrintFile (FileId, "%s version %X [%s]\n\n", ASL_COMPILER_NAME, (UINT32) ACPI_CA_VERSION, __DATE__); } /* Summary of main input and output files */ FileNode = FlGetCurrentFileNode (); if (FileNode->ParserErrorDetected) { FlPrintFile (FileId, "%-14s %s - Compilation aborted due to parser-detected syntax error(s)\n", "Input file:", AslGbl_Files[ASL_FILE_INPUT].Filename); } else if (FileNode->FileType == ASL_INPUT_TYPE_ASCII_DATA) { FlPrintFile (FileId, "%-14s %s - %7u bytes %6u fields %8u source lines\n", "Table Input:", AslGbl_Files[ASL_FILE_INPUT].Filename, FileNode->OriginalInputFileSize, FileNode->TotalFields, FileNode->TotalLineCount); FlPrintFile (FileId, "%-14s %s - %7u bytes\n", "Binary Output:", AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, FileNode->OutputByteLength); } else if (FileNode->FileType == ASL_INPUT_TYPE_ASCII_ASL) { FlPrintFile (FileId, "%-14s %s - %7u bytes %6u keywords %6u source lines\n", "ASL Input:", AslGbl_Files[ASL_FILE_INPUT].Filename, FileNode->OriginalInputFileSize, FileNode->TotalKeywords, FileNode->TotalLineCount); /* AML summary */ if (DisplayAMLSummary) { FlPrintFile (FileId, "%-14s %s - %7u bytes %6u opcodes %6u named objects\n", "AML Output:", AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, FlGetFileSize (ASL_FILE_AML_OUTPUT), FileNode->TotalExecutableOpcodes, FileNode->TotalNamedObjects); } } /* Display summary of any optional files */ for (i = ASL_FILE_SOURCE_OUTPUT; i <= ASL_MAX_FILE_TYPE; i++) { if (!AslGbl_Files[i].Filename || !AslGbl_Files[i].Handle) { continue; } /* .SRC is a temp file unless specifically requested */ if ((i == ASL_FILE_SOURCE_OUTPUT) && (!AslGbl_SourceOutputFlag)) { continue; } /* .PRE is the preprocessor intermediate file */ if ((i == ASL_FILE_PREPROCESSOR) && (!AslGbl_KeepPreprocessorTempFile)) { continue; } FlPrintFile (FileId, "%-14s %s - %7u bytes\n", AslGbl_FileDescs[i].ShortDescription, AslGbl_Files[i].Filename, FlGetFileSize (i)); } /* * Optionally emit an error summary for a file. This is used to enhance the * appearance of listing files. */ if (DisplayErrorSummary) { UtDisplayErrorSummary (FileId); } } /******************************************************************************* * * FUNCTION: UtDisplayErrorSummary * * PARAMETERS: FileID - ID of output file * * RETURN: None * * DESCRIPTION: Display compilation statistics for all input files * ******************************************************************************/ static void UtDisplayErrorSummary ( UINT32 FileId) { BOOLEAN ErrorDetected; ErrorDetected = AslGbl_ParserErrorDetected || ((AslGbl_ExceptionCount[ASL_ERROR] > 0) && !AslGbl_IgnoreErrors); if (ErrorDetected) { FlPrintFile (FileId, "\nCompilation failed. "); } else { FlPrintFile (FileId, "\nCompilation successful. "); } FlPrintFile (FileId, "%u Errors, %u Warnings, %u Remarks", AslGbl_ExceptionCount[ASL_ERROR], AslGbl_ExceptionCount[ASL_WARNING] + AslGbl_ExceptionCount[ASL_WARNING2] + AslGbl_ExceptionCount[ASL_WARNING3], AslGbl_ExceptionCount[ASL_REMARK]); if (AslGbl_FileType != ASL_INPUT_TYPE_ASCII_DATA) { if (AslGbl_ParserErrorDetected) { FlPrintFile (FileId, "\nNo AML files were generated due to syntax error(s)\n"); return; } else if (ErrorDetected) { FlPrintFile (FileId, "\nNo AML files were generated due to compiler error(s)\n"); return; } FlPrintFile (FileId, ", %u Optimizations", AslGbl_ExceptionCount[ASL_OPTIMIZATION]); if (AslGbl_TotalFolds) { FlPrintFile (FileId, ", %u Constants Folded", AslGbl_TotalFolds); } } FlPrintFile (FileId, "\n"); } /******************************************************************************* * * FUNCTION: UtDisplaySummary * * PARAMETERS: FileID - ID of output file * * RETURN: None * * DESCRIPTION: Display compilation statistics for all input files * ******************************************************************************/ void UtDisplaySummary ( UINT32 FileId) { ASL_GLOBAL_FILE_NODE *Current = AslGbl_FilesList; while (Current) { switch (FlSwitchFileSet(Current->Files[ASL_FILE_INPUT].Filename)) { case SWITCH_TO_SAME_FILE: case SWITCH_TO_DIFFERENT_FILE: UtDisplayOneSummary (FileId, FALSE); Current = Current->Next; break; case FILE_NOT_FOUND: default: Current = NULL; break; } } UtDisplayErrorSummary (FileId); } /******************************************************************************* * * FUNCTION: UtCheckIntegerRange * * PARAMETERS: Op - Integer parse node * LowValue - Smallest allowed value * HighValue - Largest allowed value * * RETURN: Op if OK, otherwise NULL * * DESCRIPTION: Check integer for an allowable range * ******************************************************************************/ ACPI_PARSE_OBJECT * UtCheckIntegerRange ( ACPI_PARSE_OBJECT *Op, UINT32 LowValue, UINT32 HighValue) { if (!Op) { return (NULL); } if ((Op->Asl.Value.Integer < LowValue) || (Op->Asl.Value.Integer > HighValue)) { sprintf (AslGbl_MsgBuffer, "0x%X, allowable: 0x%X-0x%X", (UINT32) Op->Asl.Value.Integer, LowValue, HighValue); AslError (ASL_ERROR, ASL_MSG_RANGE, Op, AslGbl_MsgBuffer); return (NULL); } return (Op); } /******************************************************************************* * * FUNCTION: UtInternalizeName * * PARAMETERS: ExternalName - Name to convert * ConvertedName - Where the converted name is returned * * RETURN: Status * * DESCRIPTION: Convert an external (ASL) name to an internal (AML) name * ******************************************************************************/ ACPI_STATUS UtInternalizeName ( char *ExternalName, char **ConvertedName) { ACPI_NAMESTRING_INFO Info; ACPI_STATUS Status; if (!ExternalName) { return (AE_OK); } /* Get the length of the new internal name */ Info.ExternalName = ExternalName; AcpiNsGetInternalNameLength (&Info); /* We need a segment to store the internal name */ Info.InternalName = UtLocalCacheCalloc (Info.Length); /* Build the name */ Status = AcpiNsBuildInternalName (&Info); if (ACPI_FAILURE (Status)) { return (Status); } *ConvertedName = Info.InternalName; return (AE_OK); } /******************************************************************************* * * FUNCTION: UtPadNameWithUnderscores * * PARAMETERS: NameSeg - Input nameseg * PaddedNameSeg - Output padded nameseg * * RETURN: Padded nameseg. * * DESCRIPTION: Pads a NameSeg with underscores if necessary to form a full * ACPI_NAME. * ******************************************************************************/ static void UtPadNameWithUnderscores ( char *NameSeg, char *PaddedNameSeg) { UINT32 i; for (i = 0; (i < ACPI_NAMESEG_SIZE); i++) { if (*NameSeg) { *PaddedNameSeg = *NameSeg; NameSeg++; } else { *PaddedNameSeg = '_'; } PaddedNameSeg++; } } /******************************************************************************* * * FUNCTION: UtAttachNameseg * * PARAMETERS: Op - Parent parse node * Name - Full ExternalName * * RETURN: None; Sets the NameSeg field in parent node * * DESCRIPTION: Extract the last nameseg of the ExternalName and store it * in the NameSeg field of the Op. * ******************************************************************************/ static void UtAttachNameseg ( ACPI_PARSE_OBJECT *Op, char *Name) { char *NameSeg; char PaddedNameSeg[4]; if (!Name) { return; } /* Look for the last dot in the namepath */ NameSeg = strrchr (Name, '.'); if (NameSeg) { /* Found last dot, we have also found the final nameseg */ NameSeg++; UtPadNameWithUnderscores (NameSeg, PaddedNameSeg); } else { /* No dots in the namepath, there is only a single nameseg. */ /* Handle prefixes */ while (ACPI_IS_ROOT_PREFIX (*Name) || ACPI_IS_PARENT_PREFIX (*Name)) { Name++; } /* Remaining string should be one single nameseg */ UtPadNameWithUnderscores (Name, PaddedNameSeg); } ACPI_COPY_NAMESEG (Op->Asl.NameSeg, PaddedNameSeg); } /******************************************************************************* * * FUNCTION: UtAttachNamepathToOwner * * 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 * (external) name, and the internalized name that is used within * the ACPI namespace manager. * ******************************************************************************/ void UtAttachNamepathToOwner ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *NameOp) { ACPI_STATUS Status; /* Full external path */ Op->Asl.ExternalName = NameOp->Asl.Value.String; /* Save the NameOp for possible error reporting later */ Op->Asl.ParentMethod = (void *) NameOp; /* Last nameseg of the path */ UtAttachNameseg (Op, Op->Asl.ExternalName); /* Create internalized path */ Status = UtInternalizeName (NameOp->Asl.Value.String, &Op->Asl.Namepath); if (ACPI_FAILURE (Status)) { /* TBD: abort on no memory */ } } /******************************************************************************* * * FUNCTION: UtNameContainsAllPrefix * * PARAMETERS: Op - Op containing NameString * * RETURN: NameString consists of all ^ characters * * DESCRIPTION: Determine if this Op contains a name segment that consists of * all '^' characters. * ******************************************************************************/ BOOLEAN UtNameContainsAllPrefix ( ACPI_PARSE_OBJECT *Op) { UINT32 Length = Op->Asl.AmlLength; UINT32 i; for (i = 0; i < Length; i++) { if (Op->Asl.Value.String[i] != '^') { return (FALSE); } } return (TRUE); } /******************************************************************************* * * FUNCTION: UtDoConstant * * PARAMETERS: String - Hex/Decimal/Octal * * RETURN: Converted Integer * * DESCRIPTION: Convert a string to an integer, with overflow/error checking. * ******************************************************************************/ UINT64 UtDoConstant ( char *String) { ACPI_STATUS Status; UINT64 ConvertedInteger; char ErrBuf[128]; const ACPI_EXCEPTION_INFO *ExceptionInfo; Status = AcpiUtStrtoul64 (String, &ConvertedInteger); if (ACPI_FAILURE (Status)) { ExceptionInfo = AcpiUtValidateException ((ACPI_STATUS) Status); sprintf (ErrBuf, " %s while converting to 64-bit integer", ExceptionInfo->Description); AslCommonError (ASL_ERROR, ASL_MSG_SYNTAX, AslGbl_CurrentLineNumber, AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset, AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, ErrBuf); } return (ConvertedInteger); } /****************************************************************************** * * FUNCTION: AcpiUtStrdup * * PARAMETERS: String1 - string to duplicate * * RETURN: int that signifies string relationship. Zero means strings * are equal. * * DESCRIPTION: Duplicate the string using UtCacheAlloc to avoid manual memory * reclamation. * ******************************************************************************/ char * AcpiUtStrdup ( char *String) { char *NewString = (char *) UtLocalCalloc (strlen (String) + 1); strcpy (NewString, String); return (NewString); } /****************************************************************************** * * FUNCTION: AcpiUtStrcat * * PARAMETERS: String1 * String2 * * RETURN: New string with String1 concatenated with String2 * * DESCRIPTION: Concatenate string1 and string2 * ******************************************************************************/ char * AcpiUtStrcat ( char *String1, char *String2) { UINT32 String1Length = strlen (String1); char *NewString = (char *) UtLocalCalloc (strlen (String1) + strlen (String2) + 1); strcpy (NewString, String1); strcpy (NewString + String1Length, String2); return (NewString); } src/acpica/source/compiler/asluuid.c000066400000000000000000000231121465205512700200170ustar00rootroot00000000000000/****************************************************************************** * * Module Name: asluuid-- compiler UUID support * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("asluuid") extern UINT8 AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH]; /******************************************************************************* * * FUNCTION: AuValiduateUuid * * PARAMETERS: InString - 36-byte formatted UUID string * * RETURN: Status * * DESCRIPTION: Check all 36 characters for correct format * ******************************************************************************/ ACPI_STATUS AuValidateUuid ( char *InString) { UINT32 i; if (!InString || (strlen (InString) != UUID_STRING_LENGTH)) { return (AE_BAD_PARAMETER); } /* Check all 36 characters for correct format */ for (i = 0; i < UUID_STRING_LENGTH; i++) { /* Must have 4 hyphens (dashes) in these positions: */ if ((i == UUID_HYPHEN1_OFFSET) || (i == UUID_HYPHEN2_OFFSET) || (i == UUID_HYPHEN3_OFFSET) || (i == UUID_HYPHEN4_OFFSET)) { if (InString[i] != '-') { return (AE_BAD_PARAMETER); } } else { /* All other positions must contain hex digits */ if (!isxdigit ((int) InString[i])) { return (AE_BAD_PARAMETER); } } } return (AE_OK); } src/acpica/source/compiler/aslwalks.c000066400000000000000000001152541465205512700202030ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslwalks.c - Miscellaneous analytical parse tree walks * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acparser.h" #include "amlcode.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslwalks") /* Local prototypes */ static void AnAnalyzeStoreOperator ( ACPI_PARSE_OBJECT *Op); static BOOLEAN AnIsValidBufferConstant ( ACPI_PARSE_OBJECT *Op); static void AnValidateCreateBufferField ( ACPI_PARSE_OBJECT *CreateBufferFieldOp); /******************************************************************************* * * FUNCTION: AnMethodTypingWalkEnd * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Ascending callback for typing walk. Complete the method * return analysis. Check methods for: * 1) Initialized local variables * 2) Valid arguments * 3) Return types * ******************************************************************************/ ACPI_STATUS AnMethodTypingWalkEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { UINT32 ThisOpBtype; switch (Op->Asl.ParseOpcode) { case PARSEOP_METHOD: Op->Asl.CompileFlags |= OP_METHOD_TYPED; break; case PARSEOP_RETURN: if ((Op->Asl.Child) && (Op->Asl.Child->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)) { ThisOpBtype = AnGetBtype (Op->Asl.Child); if ((Op->Asl.Child->Asl.ParseOpcode == PARSEOP_METHODCALL) && (ThisOpBtype == (ACPI_UINT32_MAX -1))) { /* * The called method is untyped at this time (typically a * forward reference). * * Check for a recursive method call first. Note: the * Child->Node will be null if the method has not been * resolved. */ if (Op->Asl.Child->Asl.Node && (Op->Asl.ParentMethod != Op->Asl.Child->Asl.Node->Op)) { /* We must type the method here */ TrWalkParseTree (Op->Asl.Child->Asl.Node->Op, ASL_WALK_VISIT_UPWARD, NULL, AnMethodTypingWalkEnd, NULL); ThisOpBtype = AnGetBtype (Op->Asl.Child); } } /* Returns a value, save the value type */ if (Op->Asl.ParentMethod) { Op->Asl.ParentMethod->Asl.AcpiBtype |= ThisOpBtype; } } break; default: break; } return (AE_OK); } /******************************************************************************* * * FUNCTION: AnOperandTypecheckWalkEnd * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Ascending callback for analysis walk. Complete method * return analysis. * ******************************************************************************/ ACPI_STATUS AnOperandTypecheckWalkEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { const ACPI_OPCODE_INFO *OpInfo; UINT32 RuntimeArgTypes; UINT32 RuntimeArgTypes2; UINT32 RequiredBtypes; UINT32 ThisNodeBtype; UINT32 CommonBtypes; UINT32 OpcodeClass; ACPI_PARSE_OBJECT *ArgOp; UINT32 ArgType; switch (Op->Asl.AmlOpcode) { case AML_RAW_DATA_BYTE: case AML_RAW_DATA_WORD: case AML_RAW_DATA_DWORD: case AML_RAW_DATA_QWORD: case AML_RAW_DATA_BUFFER: case AML_RAW_DATA_CHAIN: case AML_PACKAGE_LENGTH: case AML_UNASSIGNED_OPCODE: case AML_DEFAULT_ARG_OP: /* Ignore the internal (compiler-only) AML opcodes */ return (AE_OK); default: break; } OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); if (!OpInfo) { return (AE_OK); } ArgOp = Op->Asl.Child; OpcodeClass = OpInfo->Class; RuntimeArgTypes = OpInfo->RuntimeArgs; #ifdef ASL_ERROR_NAMED_OBJECT_IN_WHILE /* * Update 11/2008: In practice, we can't perform this check. A simple * analysis is not sufficient. Also, it can cause errors when compiling * disassembled code because of the way Switch operators are implemented * (a While(One) loop with a named temp variable created within.) */ /* * If we are creating a named object, check if we are within a while loop * by checking if the parent is a WHILE op. This is a simple analysis, but * probably sufficient for many cases. * * Allow Scope(), Buffer(), and Package(). */ if (((OpcodeClass == AML_CLASS_NAMED_OBJECT) && (Op->Asl.AmlOpcode != AML_SCOPE_OP)) || ((OpcodeClass == AML_CLASS_CREATE) && (OpInfo->Flags & AML_NSNODE))) { if (Op->Asl.Parent->Asl.AmlOpcode == AML_WHILE_OP) { AslError (ASL_ERROR, ASL_MSG_NAMED_OBJECT_IN_WHILE, Op, NULL); } } #endif /* * Special case for control opcodes IF/RETURN/WHILE since they * have no runtime arg list (at this time) */ switch (Op->Asl.AmlOpcode) { case AML_IF_OP: case AML_WHILE_OP: case AML_RETURN_OP: if (ArgOp->Asl.ParseOpcode == PARSEOP_METHODCALL) { /* Check for an internal method */ if (AnIsInternalMethod (ArgOp)) { return (AE_OK); } /* The lone arg is a method call, check it */ RequiredBtypes = AnMapArgTypeToBtype (ARGI_INTEGER); if (Op->Asl.AmlOpcode == AML_RETURN_OP) { RequiredBtypes = 0xFFFFFFFF; } ThisNodeBtype = AnGetBtype (ArgOp); if (ThisNodeBtype == ACPI_UINT32_MAX) { return (AE_OK); } AnCheckMethodReturnValue (Op, OpInfo, ArgOp, RequiredBtypes, ThisNodeBtype); } return (AE_OK); case AML_EXTERNAL_OP: /* * Not really a "runtime" opcode since it used by disassembler only. * The parser will find any issues with the operands. */ return (AE_OK); default: break; } /* Ignore the non-executable opcodes */ if (RuntimeArgTypes == ARGI_INVALID_OPCODE) { return (AE_OK); } /* * Special handling for certain opcodes. */ switch (Op->Asl.AmlOpcode) { /* BankField has one TermArg */ case AML_BANK_FIELD_OP: OpcodeClass = AML_CLASS_EXECUTE; ArgOp = ArgOp->Asl.Next; ArgOp = ArgOp->Asl.Next; break; /* Operation Region has 2 TermArgs */ case AML_REGION_OP: OpcodeClass = AML_CLASS_EXECUTE; ArgOp = ArgOp->Asl.Next; ArgOp = ArgOp->Asl.Next; break; /* DataTableRegion has 3 TermArgs */ case AML_DATA_REGION_OP: OpcodeClass = AML_CLASS_EXECUTE; ArgOp = ArgOp->Asl.Next; break; /* Buffers/Packages have a length that is a TermArg */ case AML_BUFFER_OP: case AML_PACKAGE_OP: case AML_VARIABLE_PACKAGE_OP: /* If length is a constant, we are done */ if ((ArgOp->Asl.ParseOpcode == PARSEOP_INTEGER) || (ArgOp->Asl.ParseOpcode == PARSEOP_RAW_DATA)) { return (AE_OK); } break; /* Store can write any object to the Debug object */ case AML_STORE_OP: /* * If this is a Store() to the Debug object, we don't need * to perform any further validation -- because a Store of * any object to Debug is permitted and supported. */ if (ArgOp->Asl.Next->Asl.AmlOpcode == AML_DEBUG_OP) { return (AE_OK); } break; default: break; } switch (OpcodeClass) { case AML_CLASS_EXECUTE: case AML_CLASS_CREATE: case AML_CLASS_CONTROL: case AML_CLASS_RETURN_VALUE: /* Reverse the runtime argument list */ RuntimeArgTypes2 = 0; while ((ArgType = GET_CURRENT_ARG_TYPE (RuntimeArgTypes))) { RuntimeArgTypes2 <<= ARG_TYPE_WIDTH; RuntimeArgTypes2 |= ArgType; INCREMENT_ARG_LIST (RuntimeArgTypes); } /* Typecheck each argument */ while ((ArgType = GET_CURRENT_ARG_TYPE (RuntimeArgTypes2))) { /* Get the required type(s) for the argument */ RequiredBtypes = AnMapArgTypeToBtype (ArgType); if (!ArgOp) { AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Op, "Null ArgOp in argument loop"); AslAbort (); } /* Get the actual type of the argument */ ThisNodeBtype = AnGetBtype (ArgOp); if (ThisNodeBtype == ACPI_UINT32_MAX) { goto NextArgument; } /* Examine the arg based on the required type of the arg */ switch (ArgType) { case ARGI_TARGETREF: if (ArgOp->Asl.ParseOpcode == PARSEOP_ZERO) { /* ZERO is the placeholder for "don't store result" */ ThisNodeBtype = RequiredBtypes; break; } ACPI_FALLTHROUGH; case ARGI_STORE_TARGET: if (ArgOp->Asl.ParseOpcode == PARSEOP_INTEGER) { /* * This is the case where an original reference to a resource * descriptor field has been replaced by an (Integer) offset. * These named fields are supported at compile-time only; * the names are not passed to the interpreter (via the AML). */ if ((ArgOp->Asl.Node->Type == ACPI_TYPE_LOCAL_RESOURCE_FIELD) || (ArgOp->Asl.Node->Type == ACPI_TYPE_LOCAL_RESOURCE)) { AslError (ASL_ERROR, ASL_MSG_RESOURCE_FIELD, ArgOp, NULL); } else { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ArgOp, NULL); } } break; #ifdef __FUTURE_IMPLEMENTATION /* * Possible future typechecking support */ case ARGI_REFERENCE: /* References */ case ARGI_INTEGER_REF: case ARGI_OBJECT_REF: case ARGI_DEVICE_REF: switch (ArgOp->Asl.ParseOpcode) { case PARSEOP_LOCAL0: case PARSEOP_LOCAL1: case PARSEOP_LOCAL2: case PARSEOP_LOCAL3: case PARSEOP_LOCAL4: case PARSEOP_LOCAL5: case PARSEOP_LOCAL6: case PARSEOP_LOCAL7: /* TBD: implement analysis of current value (type) of the local */ /* For now, just treat any local as a typematch */ /*ThisNodeBtype = RequiredBtypes;*/ break; case PARSEOP_ARG0: case PARSEOP_ARG1: case PARSEOP_ARG2: case PARSEOP_ARG3: case PARSEOP_ARG4: case PARSEOP_ARG5: case PARSEOP_ARG6: /* Hard to analyze argument types, so we won't */ /* for now. Just treat any arg as a typematch */ /* ThisNodeBtype = RequiredBtypes; */ break; case PARSEOP_DEBUG: case PARSEOP_REFOF: case PARSEOP_INDEX: default: break; } break; #endif case ARGI_INTEGER: default: break; } /* Check for a type mismatch (required versus actual) */ CommonBtypes = ThisNodeBtype & RequiredBtypes; if (ArgOp->Asl.ParseOpcode == PARSEOP_METHODCALL) { if (AnIsInternalMethod (ArgOp)) { return (AE_OK); } /* Check a method call for a valid return value */ AnCheckMethodReturnValue (Op, OpInfo, ArgOp, RequiredBtypes, ThisNodeBtype); } /* * Now check if the actual type(s) match at least one * bit to the required type */ else if (!CommonBtypes) { /* No match -- this is a type mismatch error */ AnFormatBtype (AslGbl_StringBuffer, ThisNodeBtype); AnFormatBtype (AslGbl_StringBuffer2, RequiredBtypes); sprintf (AslGbl_MsgBuffer, "[%s] found, %s operator requires [%s]", AslGbl_StringBuffer, OpInfo->Name, AslGbl_StringBuffer2); AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ArgOp, AslGbl_MsgBuffer); } NextArgument: ArgOp = ArgOp->Asl.Next; INCREMENT_ARG_LIST (RuntimeArgTypes2); } break; default: break; } return (AE_OK); } /******************************************************************************* * * FUNCTION: AnOtherSemanticAnalysisWalkBegin * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Descending callback for the analysis walk. Checks for * miscellaneous issues in the code. * ******************************************************************************/ ACPI_STATUS AnOtherSemanticAnalysisWalkBegin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_PARSE_OBJECT *ArgOp; ACPI_PARSE_OBJECT *PrevArgOp = NULL; const ACPI_OPCODE_INFO *OpInfo; ACPI_NAMESPACE_NODE *Node; OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); if (OpInfo->Flags & AML_CREATE) { /* This group contains all of the Create Buffer Field operators */ AnValidateCreateBufferField (Op); return (AE_OK); } /* * Determine if an execution class operator actually does something by * checking if it has a target and/or the function return value is used. * (Target is optional, so a standalone statement can actually do nothing.) */ if ((OpInfo->Class == AML_CLASS_EXECUTE) && (OpInfo->Flags & AML_HAS_RETVAL) && (!AnIsResultUsed (Op))) { if (OpInfo->Flags & AML_HAS_TARGET) { /* * Find the target node, it is always the last child. If the target * is not specified in the ASL, a default node of type Zero was * created by the parser. */ ArgOp = Op->Asl.Child; while (ArgOp->Asl.Next) { PrevArgOp = ArgOp; ArgOp = ArgOp->Asl.Next; } /* Divide() is the only weird case, it has two targets */ if (Op->Asl.AmlOpcode == AML_DIVIDE_OP) { if ((ArgOp->Asl.ParseOpcode == PARSEOP_ZERO) && (PrevArgOp) && (PrevArgOp->Asl.ParseOpcode == PARSEOP_ZERO)) { AslError (ASL_ERROR, ASL_MSG_RESULT_NOT_USED, Op, Op->Asl.ExternalName); } } else if (ArgOp->Asl.ParseOpcode == PARSEOP_ZERO) { AslError (ASL_ERROR, ASL_MSG_RESULT_NOT_USED, Op, Op->Asl.ExternalName); } } else { /* * Has no target and the result is not used. Only a couple opcodes * can have this combination. */ switch (Op->Asl.ParseOpcode) { case PARSEOP_ACQUIRE: case PARSEOP_WAIT: case PARSEOP_LOADTABLE: break; default: AslError (ASL_ERROR, ASL_MSG_RESULT_NOT_USED, Op, Op->Asl.ExternalName); break; } } } /* * Semantic checks for individual ASL operators */ switch (Op->Asl.ParseOpcode) { case PARSEOP_STORE: if (AslGbl_DoTypechecking) { AnAnalyzeStoreOperator (Op); } break; case PARSEOP_ACQUIRE: case PARSEOP_WAIT: /* * Emit a warning if the timeout parameter for these operators is not * ACPI_WAIT_FOREVER, and the result value from the operator is not * checked, meaning that a timeout could happen, but the code * would not know about it. */ /* First child is the namepath, 2nd child is timeout */ ArgOp = Op->Asl.Child; ArgOp = ArgOp->Asl.Next; /* * Check for the WAIT_FOREVER case - defined by the ACPI spec to be * 0xFFFF or greater */ if (((ArgOp->Asl.ParseOpcode == PARSEOP_WORDCONST) || (ArgOp->Asl.ParseOpcode == PARSEOP_INTEGER)) && (ArgOp->Asl.Value.Integer >= (UINT64) ACPI_WAIT_FOREVER)) { break; } /* * The operation could timeout. If the return value is not used * (indicates timeout occurred), issue a warning */ if (!AnIsResultUsed (Op)) { AslError (ASL_WARNING, ASL_MSG_TIMEOUT, ArgOp, Op->Asl.ExternalName); } break; case PARSEOP_CONNECTION: /* * Ensure that the referenced operation region has the correct SPACE_ID. * From the grammar/parser, we know the parent is a FIELD definition. */ ArgOp = Op->Asl.Parent; /* Field definition */ ArgOp = ArgOp->Asl.Child; /* First child is the OpRegion Name */ Node = ArgOp->Asl.Node; /* OpRegion namespace node */ if (!Node) { break; } ArgOp = Node->Op; /* OpRegion definition */ ArgOp = ArgOp->Asl.Child; /* First child is the OpRegion Name */ ArgOp = ArgOp->Asl.Next; /* Next peer is the SPACE_ID (what we want) */ /* * The Connection() operator is only valid for the following operation * region SpaceIds: GeneralPurposeIo and GenericSerialBus. */ if ((ArgOp->Asl.Value.Integer != ACPI_ADR_SPACE_GPIO) && (ArgOp->Asl.Value.Integer != ACPI_ADR_SPACE_GSBUS)) { AslError (ASL_ERROR, ASL_MSG_CONNECTION_INVALID, Op, NULL); } break; case PARSEOP_FIELD: /* * Ensure that fields for GeneralPurposeIo and GenericSerialBus * contain at least one Connection() operator */ ArgOp = Op->Asl.Child; /* 1st child is the OpRegion Name */ Node = ArgOp->Asl.Node; /* OpRegion namespace node */ if (!Node) { break; } ArgOp = Node->Op; /* OpRegion definition */ ArgOp = ArgOp->Asl.Child; /* First child is the OpRegion Name */ ArgOp = ArgOp->Asl.Next; /* Next peer is the SPACE_ID (what we want) */ /* We are only interested in GeneralPurposeIo and GenericSerialBus */ if ((ArgOp->Asl.Value.Integer != ACPI_ADR_SPACE_GPIO) && (ArgOp->Asl.Value.Integer != ACPI_ADR_SPACE_GSBUS)) { break; } ArgOp = Op->Asl.Child; /* 1st child is the OpRegion Name */ ArgOp = ArgOp->Asl.Next; /* AccessType */ ArgOp = ArgOp->Asl.Next; /* LockRule */ ArgOp = ArgOp->Asl.Next; /* UpdateRule */ ArgOp = ArgOp->Asl.Next; /* Start of FieldUnitList */ /* Walk the FieldUnitList */ while (ArgOp) { if (ArgOp->Asl.ParseOpcode == PARSEOP_CONNECTION) { break; } else if (ArgOp->Asl.ParseOpcode == PARSEOP_NAMESEG) { AslError (ASL_ERROR, ASL_MSG_CONNECTION_MISSING, ArgOp, NULL); break; } ArgOp = ArgOp->Asl.Next; } break; default: break; } return (AE_OK); } /******************************************************************************* * * FUNCTION: AnValidateCreateBufferField * * PARAMETERS: Op - A create buffer field operator * * RETURN: None * * DESCRIPTION: Check if a buffer index argument to a create buffer field * operation is beyond the end of the target buffer. * * Validates these AML operators: * * AML_CREATE_FIELD_OP * AML_CREATE_BIT_FIELD_OP * AML_CREATE_BYTE_FIELD_OP * AML_CREATE_WORD_FIELD_OP * AML_CREATE_DWORD_FIELD_OP * AML_CREATE_QWORD_FIELD_OP * * There are two conditions that must be satisfied in order to enable * validation at compile time: * * 1) The length of the target buffer must be an integer constant * 2) The index specified in the create* must be an integer constant * 3) For CreateField, the bit length argument must be non-zero. * ******************************************************************************/ static void AnValidateCreateBufferField ( ACPI_PARSE_OBJECT *CreateBufferFieldOp) { ACPI_PARSE_OBJECT *TargetBufferOp; ACPI_PARSE_OBJECT *ArgOp; UINT32 TargetBufferLength; UINT32 LastFieldByteIndex; /* * 1) Get the length of the target buffer */ ArgOp = CreateBufferFieldOp->Asl.Child; /* Reference to target buffer */ /* * If no attached Node, the target buffer may be something like an * ArgX or LocalX and cannot be evaluated at compile time. */ if (!ArgOp->Asl.Node) { return; } TargetBufferOp = ArgOp->Asl.Node->Op; TargetBufferOp = TargetBufferOp->Asl.Child; /* Target buffer */ TargetBufferOp = TargetBufferOp->Asl.Next; /* "Buffer" keyword */ if (!TargetBufferOp) { /* Not a statement of the form NAME(XXXX, Buffer.... */ return; } /* Get the buffer length argument. It must be an integer constant */ ArgOp = TargetBufferOp->Asl.Child; if (!AnIsValidBufferConstant (ArgOp)) { return; } TargetBufferLength = (UINT32) ArgOp->Asl.Value.Integer; /* * 2) Get the value of the buffer index argument. It must be * an integer constant. */ ArgOp = CreateBufferFieldOp->Asl.Child; /* Reference to target buffer */ ArgOp = ArgOp->Asl.Next; /* Buffer Index argument*/ if (!AnIsValidBufferConstant (ArgOp)) { return; } LastFieldByteIndex = (UINT32) ArgOp->Asl.Value.Integer; /* Index can be in either bytes or bits */ /* * 3) Get the length of the new buffer field, in bytes. Also, * create the final target buffer index for the last byte of the field */ switch (CreateBufferFieldOp->Asl.ParseOpcode) { case PARSEOP_CREATEBITFIELD: /* A one bit field */ LastFieldByteIndex = ACPI_ROUND_BITS_DOWN_TO_BYTES (LastFieldByteIndex); break; case PARSEOP_CREATEBYTEFIELD: break; case PARSEOP_CREATEWORDFIELD: LastFieldByteIndex += (sizeof (UINT16) - 1); break; case PARSEOP_CREATEDWORDFIELD: LastFieldByteIndex += (sizeof (UINT32) - 1); break; case PARSEOP_CREATEQWORDFIELD: LastFieldByteIndex += (sizeof (UINT64) - 1); break; case PARSEOP_CREATEFIELD: /* Multi-bit field */ ArgOp = ArgOp->Asl.Next; /* Length argument, in bits */ if (!AnIsValidBufferConstant (ArgOp)) { return; } /* The buffer field length is not allowed to be zero */ if (ArgOp->Asl.Value.Integer == 0) { AslError (ASL_WARNING, ASL_MSG_BUFFER_FIELD_LENGTH, ArgOp, NULL); return; } LastFieldByteIndex += ((UINT32) ArgOp->Asl.Value.Integer - 1); /* Create final bit index */ /* Convert bit index to a byte index */ LastFieldByteIndex = ACPI_ROUND_BITS_DOWN_TO_BYTES (LastFieldByteIndex); break; default: return; } /* * 4) Check for an access (index) beyond the end of the target buffer, * or a zero length target buffer. */ if (!TargetBufferLength || (LastFieldByteIndex >= TargetBufferLength)) { AslError (ASL_WARNING, ASL_MSG_BUFFER_FIELD_OVERFLOW, ArgOp, NULL); } } /******************************************************************************* * * FUNCTION: AnIsValidBufferConstant * * PARAMETERS: Op - A buffer-related operand * * RETURN: TRUE if operand is valid constant, FALSE otherwise * * DESCRIPTION: Check if the input Op is valid constant that can be used * in compile-time analysis. * ******************************************************************************/ static BOOLEAN AnIsValidBufferConstant ( ACPI_PARSE_OBJECT *Op) { if (!Op) { return (FALSE); } if ((Op->Asl.ParseOpcode == PARSEOP_INTEGER) || (Op->Asl.ParseOpcode == PARSEOP_ZERO) || (Op->Asl.ParseOpcode == PARSEOP_ONE)) { return (TRUE); } return (FALSE); } /******************************************************************************* * * FUNCTION: AnAnalyzeStoreOperator * * PARAMETERS: Op - Store() operator * * RETURN: None * * DESCRIPTION: Analyze a store operator. Mostly for stores to/from package * objects where there are more restrictions than other data * types. * ******************************************************************************/ static void AnAnalyzeStoreOperator ( ACPI_PARSE_OBJECT *Op) { ACPI_NAMESPACE_NODE *SourceNode; ACPI_NAMESPACE_NODE *TargetNode; ACPI_PARSE_OBJECT *SourceOperandOp; ACPI_PARSE_OBJECT *TargetOperandOp; UINT32 SourceOperandBtype; UINT32 TargetOperandBtype; /* Extract the two operands for STORE */ SourceOperandOp = Op->Asl.Child; TargetOperandOp = SourceOperandOp->Asl.Next; /* * Ignore these Source operand opcodes, they cannot be typechecked, * the actual result is unknown here. */ switch (SourceOperandOp->Asl.ParseOpcode) { /* For these, type of the returned value is unknown at compile time */ case PARSEOP_DEREFOF: case PARSEOP_METHODCALL: case PARSEOP_STORE: case PARSEOP_COPYOBJECT: return; case PARSEOP_INDEX: case PARSEOP_REFOF: if (!AslGbl_EnableReferenceTypechecking) { return; } /* * These opcodes always return an object reference, and thus * the result can only be stored to a Local, Arg, or Debug. */ if (TargetOperandOp->Asl.AmlOpcode == AML_DEBUG_OP) { return; } if ((TargetOperandOp->Asl.AmlOpcode < AML_LOCAL0) || (TargetOperandOp->Asl.AmlOpcode > AML_ARG6)) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, TargetOperandOp, "Source [Reference], Target must be [Local/Arg/Debug]"); } return; default: break; } /* * Ignore these Target operand opcodes, they cannot be typechecked */ switch (TargetOperandOp->Asl.ParseOpcode) { case PARSEOP_DEBUG: case PARSEOP_DEREFOF: case PARSEOP_REFOF: case PARSEOP_INDEX: case PARSEOP_STORE: return; default: break; } /* * Ignore typecheck for External() operands of type "UnknownObj", * we don't know the actual type (source or target). */ SourceNode = SourceOperandOp->Asl.Node; if (SourceNode && (SourceNode->Flags & ANOBJ_IS_EXTERNAL) && (SourceNode->Type == ACPI_TYPE_ANY)) { return; } TargetNode = TargetOperandOp->Asl.Node; if (TargetNode && (TargetNode->Flags & ANOBJ_IS_EXTERNAL) && (TargetNode->Type == ACPI_TYPE_ANY)) { return; } /* * A NULL node with a namepath AML opcode indicates non-existent * name. Just return, the error message is generated elsewhere. */ if ((!SourceNode && (SourceOperandOp->Asl.AmlOpcode == AML_INT_NAMEPATH_OP)) || (!TargetNode && (TargetOperandOp->Asl.AmlOpcode == AML_INT_NAMEPATH_OP))) { return; } /* * Simple check for source same as target via NS node. * -- Could be expanded to locals and args. */ if (SourceNode && TargetNode) { if (SourceNode == TargetNode) { AslError (ASL_WARNING, ASL_MSG_DUPLICATE_ITEM, TargetOperandOp, "Source is the same as Target"); return; } } /* Ignore typecheck if either source or target is a local or arg */ if ((SourceOperandOp->Asl.AmlOpcode >= AML_LOCAL0) && (SourceOperandOp->Asl.AmlOpcode <= AML_ARG6)) { return; /* Cannot type a local/arg at compile time */ } if ((TargetOperandOp->Asl.AmlOpcode >= AML_LOCAL0) && (TargetOperandOp->Asl.AmlOpcode <= AML_ARG6)) { return; /* Cannot type a local/arg at compile time */ } /* * Package objects are a special case because they cannot by implicitly * converted to/from anything. Check for these two illegal cases: * * Store (non-package, package) * Store (package, non-package) */ SourceOperandBtype = AnGetBtype (SourceOperandOp); TargetOperandBtype = AnGetBtype (TargetOperandOp); /* Check source first for (package, non-package) case */ if (SourceOperandBtype & ACPI_BTYPE_PACKAGE) { /* If Source is PACKAGE-->Target must be PACKAGE */ if (!(TargetOperandBtype & ACPI_BTYPE_PACKAGE)) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, TargetOperandOp, "Source is [Package], Target must be a package also"); } } /* Else check target for (non-package, package) case */ else if (TargetOperandBtype & ACPI_BTYPE_PACKAGE) { /* If Target is PACKAGE, Source must be PACKAGE */ if (!(SourceOperandBtype & ACPI_BTYPE_PACKAGE)) { AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, SourceOperandOp, "Target is [Package], Source must be a package also"); } } } src/acpica/source/compiler/aslxref.c000066400000000000000000001444641465205512700200330ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslxref - Namespace cross-reference * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acparser.h" #include "amlcode.h" #include "acnamesp.h" #include "acdispat.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslxref") /* Local prototypes */ static ACPI_STATUS XfNamespaceLocateBegin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS XfNamespaceLocateEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static BOOLEAN XfValidateCrossReference ( ACPI_PARSE_OBJECT *Op, const ACPI_OPCODE_INFO *OpInfo, ACPI_NAMESPACE_NODE *Node); static BOOLEAN XfObjectExists ( char *Name); static ACPI_STATUS XfCompareOneNamespaceObject ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); static void XfCheckFieldRange ( ACPI_PARSE_OBJECT *Op, UINT32 RegionBitLength, UINT32 FieldBitOffset, UINT32 FieldBitLength, UINT32 AccessBitWidth); static BOOLEAN XfFindCondRefOfName ( ACPI_NAMESPACE_NODE *Node, ACPI_PARSE_OBJECT *Op); static BOOLEAN XfRefIsGuardedByIfCondRefOf ( ACPI_NAMESPACE_NODE *Node, ACPI_PARSE_OBJECT *Op); /******************************************************************************* * * FUNCTION: XfCrossReferenceNamespace * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Perform a cross reference check of the parse tree against the * namespace. Every named referenced within the parse tree * should be get resolved with a namespace lookup. If not, the * original reference in the ASL code is invalid -- i.e., refers * to a non-existent object. * * NOTE: The ASL "External" operator causes the name to be inserted into the * namespace so that references to the external name will be resolved * correctly here. * ******************************************************************************/ ACPI_STATUS XfCrossReferenceNamespace ( void) { ACPI_WALK_STATE *WalkState; /* * Create a new walk state for use when looking up names * within the namespace (Passed as context to the callbacks) */ WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL); if (!WalkState) { return (AE_NO_MEMORY); } /* Walk the entire parse tree */ TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_TWICE, XfNamespaceLocateBegin, XfNamespaceLocateEnd, WalkState); ACPI_FREE (WalkState); return (AE_OK); } /******************************************************************************* * * FUNCTION: XfObjectExists * * PARAMETERS: Name - 4 char ACPI name * * RETURN: TRUE if name exists in namespace * * DESCRIPTION: Walk the namespace to find an object * ******************************************************************************/ static BOOLEAN XfObjectExists ( char *Name) { ACPI_STATUS Status; /* Walk entire namespace from the supplied root */ Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, FALSE, XfCompareOneNamespaceObject, NULL, Name, NULL); if (Status == AE_CTRL_TRUE) { /* At least one instance of the name was found */ return (TRUE); } return (FALSE); } /******************************************************************************* * * FUNCTION: XfCompareOneNamespaceObject * * PARAMETERS: ACPI_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Compare name of one object. * ******************************************************************************/ static ACPI_STATUS XfCompareOneNamespaceObject ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; /* Simply check the name */ if (*((UINT32 *) (Context)) == Node->Name.Integer) { /* Abort walk if we found one instance */ return (AE_CTRL_TRUE); } return (AE_OK); } /******************************************************************************* * * FUNCTION: XfCheckFieldRange * * PARAMETERS: RegionBitLength - Length of entire parent region * FieldBitOffset - Start of the field unit (within region) * FieldBitLength - Entire length of field unit * AccessBitWidth - Access width of the field unit * * RETURN: None * * DESCRIPTION: Check one field unit to make sure it fits in the parent * op region. * * Note: AccessBitWidth must be either 8,16,32, or 64 * ******************************************************************************/ static void XfCheckFieldRange ( ACPI_PARSE_OBJECT *Op, UINT32 RegionBitLength, UINT32 FieldBitOffset, UINT32 FieldBitLength, UINT32 AccessBitWidth) { UINT32 FieldEndBitOffset; /* * Check each field unit against the region size. The entire * field unit (start offset plus length) must fit within the * region. */ FieldEndBitOffset = FieldBitOffset + FieldBitLength; if (FieldEndBitOffset > RegionBitLength) { /* Field definition itself is beyond the end-of-region */ AslError (ASL_ERROR, ASL_MSG_FIELD_UNIT_OFFSET, Op, NULL); return; } /* * Now check that the field plus AccessWidth doesn't go beyond * the end-of-region. Assumes AccessBitWidth is a power of 2 */ FieldEndBitOffset = ACPI_ROUND_UP (FieldEndBitOffset, AccessBitWidth); if (FieldEndBitOffset > RegionBitLength) { /* Field definition combined with the access is beyond EOR */ AslError (ASL_ERROR, ASL_MSG_FIELD_UNIT_ACCESS_WIDTH, Op, NULL); } } /******************************************************************************* * * FUNCTION: XfNamespaceLocateBegin * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Descending callback used during cross-reference. For named * object references, attempt to locate the name in the * namespace. * * NOTE: ASL references to named fields within resource descriptors are * resolved to integer values here. Therefore, this step is an * important part of the code generation. We don't know that the * name refers to a resource descriptor until now. * ******************************************************************************/ static ACPI_STATUS XfNamespaceLocateBegin ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_WALK_STATE *WalkState = (ACPI_WALK_STATE *) Context; ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_OBJECT_TYPE ObjectType; char *Path; UINT8 PassedArgs; ACPI_PARSE_OBJECT *NextOp; ACPI_PARSE_OBJECT *OwningOp; ACPI_PARSE_OBJECT *SpaceIdOp; UINT32 MinimumLength; UINT32 Offset; UINT32 FieldBitLength; UINT32 TagBitLength; UINT8 Message = 0; const ACPI_OPCODE_INFO *OpInfo; UINT32 Flags; ASL_METHOD_LOCAL *MethodLocals = NULL; ASL_METHOD_LOCAL *MethodArgs = NULL; int RegisterNumber; UINT32 i; ACPI_NAMESPACE_NODE *DeclarationParentMethod; ACPI_PARSE_OBJECT *ReferenceParentMethod; char *ExternalPath; ACPI_FUNCTION_TRACE_PTR (XfNamespaceLocateBegin, Op); if ((Op->Asl.AmlOpcode == AML_METHOD_OP) && Op->Asl.Node) { Node = Op->Asl.Node; /* Support for method LocalX/ArgX analysis */ if (!Node->MethodLocals) { /* Create local/arg info blocks */ MethodLocals = UtLocalCalloc ( sizeof (ASL_METHOD_LOCAL) * ACPI_METHOD_NUM_LOCALS); Node->MethodLocals = MethodLocals; MethodArgs = UtLocalCalloc ( sizeof (ASL_METHOD_LOCAL) * ACPI_METHOD_NUM_ARGS); Node->MethodArgs = MethodArgs; /* * Get the method argument count * First, get the name node */ NextOp = Op->Asl.Child; /* Get the NumArguments node */ NextOp = NextOp->Asl.Next; Node->ArgCount = (UINT8) (((UINT8) NextOp->Asl.Value.Integer) & 0x07); /* We will track all possible ArgXs */ for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++) { if (i < Node->ArgCount) { /* Real Args are always "initialized" */ MethodArgs[i].Flags = ASL_ARG_INITIALIZED; } else { /* Other ArgXs can be used as locals */ MethodArgs[i].Flags = ASL_ARG_IS_LOCAL; } MethodArgs[i].Op = Op; } } } /* * If this node is the actual declaration of a name * [such as the XXXX name in "Method (XXXX)"], * we are not interested in it here. We only care about names that are * references to other objects within the namespace and the parent objects * of name declarations */ if (Op->Asl.CompileFlags & OP_IS_NAME_DECLARATION) { return_ACPI_STATUS (AE_OK); } OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); /* Check method LocalX variables */ if (OpInfo->Type == AML_TYPE_LOCAL_VARIABLE) { /* Find parent method Op */ NextOp = UtGetParentMethodOp (Op); if (!NextOp) { return_ACPI_STATUS (AE_OK); } /* Get method node */ Node = NextOp->Asl.Node; RegisterNumber = Op->Asl.AmlOpcode & 0x0007; /* 0x60 through 0x67 */ MethodLocals = Node->MethodLocals; if (Op->Asl.CompileFlags & OP_IS_TARGET) { /* Local is being initialized */ MethodLocals[RegisterNumber].Flags |= ASL_LOCAL_INITIALIZED; MethodLocals[RegisterNumber].Op = Op; return_ACPI_STATUS (AE_OK); } /* Mark this Local as referenced */ MethodLocals[RegisterNumber].Flags |= ASL_LOCAL_REFERENCED; MethodLocals[RegisterNumber].Op = Op; return_ACPI_STATUS (AE_OK); } /* Check method ArgX variables */ if (OpInfo->Type == AML_TYPE_METHOD_ARGUMENT) { /* Find parent method Op */ NextOp = UtGetParentMethodOp (Op); if (!NextOp) { return_ACPI_STATUS (AE_OK); } /* Get method node */ Node = NextOp->Asl.Node; /* Get Arg # */ RegisterNumber = Op->Asl.AmlOpcode - AML_ARG0; /* 0x68 through 0x6F */ MethodArgs = Node->MethodArgs; /* Mark this Arg as referenced */ MethodArgs[RegisterNumber].Flags |= ASL_ARG_REFERENCED; MethodArgs[RegisterNumber].Op = Op; if (Op->Asl.CompileFlags & OP_IS_TARGET) { /* Arg is being initialized */ MethodArgs[RegisterNumber].Flags |= ASL_ARG_INITIALIZED; } return_ACPI_STATUS (AE_OK); } /* * After method ArgX and LocalX, we are only interested in opcodes * that have an associated name */ if ((!(OpInfo->Flags & AML_NAMED)) && (!(OpInfo->Flags & AML_CREATE)) && (Op->Asl.ParseOpcode != PARSEOP_NAMESTRING) && (Op->Asl.ParseOpcode != PARSEOP_NAMESEG) && (Op->Asl.ParseOpcode != PARSEOP_METHODCALL) && (Op->Asl.ParseOpcode != PARSEOP_EXTERNAL)) { return_ACPI_STATUS (AE_OK); } /* * We must enable the "search-to-root" for single NameSegs, but * we have to be very careful about opening up scopes */ Flags = ACPI_NS_SEARCH_PARENT; if ((Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) || (Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || (Op->Asl.ParseOpcode == PARSEOP_METHODCALL) || (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) || (Op->Asl.ParseOpcode == PARSEOP_CONDREFOF)) { /* * These are name references, do not push the scope stack * for them. */ Flags |= ACPI_NS_DONT_OPEN_SCOPE; } /* Get the NamePath from the appropriate place */ if (OpInfo->Flags & AML_NAMED) { /* For nearly all NAMED operators, the name reference is the first child */ Path = Op->Asl.Child->Asl.Value.String; if (Op->Asl.AmlOpcode == AML_ALIAS_OP) { /* * ALIAS is the only oddball opcode, the name declaration * (alias name) is the second operand */ Path = Op->Asl.Child->Asl.Next->Asl.Value.String; } } else if (OpInfo->Flags & AML_CREATE) { /* Name must appear as the last parameter */ NextOp = Op->Asl.Child; while (!(NextOp->Asl.CompileFlags & OP_IS_NAME_DECLARATION)) { NextOp = NextOp->Asl.Next; } Path = NextOp->Asl.Value.String; } else { Path = Op->Asl.Value.String; } ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode); ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Type=%s\n", AcpiUtGetTypeName (ObjectType))); /* * Lookup the name in the namespace. Name must exist at this point, or it * is an invalid reference. * * The namespace is also used as a lookup table for references to resource * descriptors and the fields within them. */ AslGbl_NsLookupCount++; Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType, ACPI_IMODE_EXECUTE, Flags, WalkState, &Node); if (ACPI_FAILURE (Status)) { if (Status == AE_NOT_FOUND) { /* * We didn't find the name reference by path -- we can qualify this * a little better before we print an error message */ if ((Op->Asl.Parent) && (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CONDREFOF)) { /* * One special case: CondRefOf operator - if the name doesn't * exist at this point, it means that there's no actual or * external declaration. If the name is not found, just ignore * it, the point of the operator is to determine if the name * exists at runtime. We wanted to see if this named object * exists to facilitate analysis to allow protected usage of * undeclared externals. */ return_ACPI_STATUS (AE_OK); } else if (strlen (Path) == ACPI_NAMESEG_SIZE) { /* A simple, one-segment ACPI name */ if (XfObjectExists (Path)) { /* * There exists such a name, but we couldn't get to it * from this scope */ AslError (ASL_ERROR, ASL_MSG_NOT_REACHABLE, Op, Op->Asl.ExternalName); } else { /* The name doesn't exist, period */ AslError (ASL_ERROR, ASL_MSG_NOT_EXIST, Op, Op->Asl.ExternalName); } } else { /* The NamePath contains multiple NameSegs */ if ((OpInfo->Flags & AML_CREATE) || (OpInfo->ObjectType == ACPI_TYPE_LOCAL_ALIAS)) { /* * The new name is the last parameter. For the * CreateXXXXField and Alias operators */ NextOp = Op->Asl.Child; while (!(NextOp->Asl.CompileFlags & OP_IS_NAME_DECLARATION)) { NextOp = NextOp->Asl.Next; } AslError (ASL_ERROR, ASL_MSG_PREFIX_NOT_EXIST, NextOp, NextOp->Asl.ExternalName); } else if (OpInfo->Flags & AML_NAMED) { /* The new name is the first parameter */ AslError (ASL_ERROR, ASL_MSG_PREFIX_NOT_EXIST, Op, Op->Asl.ExternalName); } else if (Path[0] == AML_ROOT_PREFIX) { /* Full namepath from root, the object does not exist */ AslError (ASL_ERROR, ASL_MSG_NOT_EXIST, Op, Op->Asl.ExternalName); } else { /* * Generic "not found" error. Cannot determine whether it * doesn't exist or just can't be reached. However, we * can differentiate between a NameSeg vs. NamePath. */ if (strlen (Op->Asl.ExternalName) == ACPI_NAMESEG_SIZE) { AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op, Op->Asl.ExternalName); } else { AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op, Op->Asl.ExternalName); } } } Status = AE_OK; } return_ACPI_STATUS (Status); } /* Check for an attempt to access an object in another method */ if (!XfValidateCrossReference (Op, OpInfo, Node)) { AslError (ASL_ERROR, ASL_MSG_TEMPORARY_OBJECT, Op, Op->Asl.ExternalName); return_ACPI_STATUS (Status); } /* Object was found above, check for an illegal forward reference */ if (Op->Asl.CompileFlags & OP_NOT_FOUND_DURING_LOAD) { /* * During the load phase, this Op was flagged as a possible * illegal forward reference. In other words, Op is a name path or * name segment that refers to a named object declared after the * reference. In this scinario, Node refers to the actual declaration * and Op is a parse node that references the named object. * * Note: * * Object references inside of control methods are allowed to * refer to objects declared outside of control methods. * * If the declaration and reference are both contained inside of the * same method or outside of any method, this is a forward reference * and should be reported as a compiler error. */ DeclarationParentMethod = UtGetParentMethodNode (Node); ReferenceParentMethod = UtGetParentMethodOp (Op); /* case 1: declaration and reference are both outside of method */ if (!ReferenceParentMethod && !DeclarationParentMethod) { AslError (ASL_ERROR, ASL_MSG_ILLEGAL_FORWARD_REF, Op, Op->Asl.ExternalName); } /* case 2: declaration and reference are both inside of the same method */ else if (ReferenceParentMethod && DeclarationParentMethod && ReferenceParentMethod == DeclarationParentMethod->Op) { AslError (ASL_ERROR, ASL_MSG_ILLEGAL_FORWARD_REF, Op, Op->Asl.ExternalName); } } /* Check for a reference vs. name declaration */ if (!(OpInfo->Flags & AML_NAMED) && !(OpInfo->Flags & AML_CREATE)) { /* This node has been referenced, mark it for reference check */ Node->Flags |= ANOBJ_IS_REFERENCED; } /* * Attempt to optimize the NamePath * * One special case: CondRefOf operator - not all AML interpreter * implementations expect optimized namepaths as a parameter to this * operator. They require relative name paths with prefix operators or * namepaths starting with the root scope. * * Other AML interpreter implementations do not perform the namespace * search that starts at the current scope and recursively searching the * parent scope until the root scope. The lack of search is only known to * occur for the namestring parameter for the CondRefOf operator. */ if ((Op->Asl.Parent) && (Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_CONDREFOF)) { OptOptimizeNamePath (Op, OpInfo->Flags, WalkState, Path, Node); } /* * 1) Dereference an alias (A name reference that is an alias) * Aliases are not nested, the alias always points to the final object */ if ((Op->Asl.ParseOpcode != PARSEOP_ALIAS) && (Node->Type == ACPI_TYPE_LOCAL_ALIAS)) { /* This node points back to the original PARSEOP_ALIAS */ NextOp = Node->Op; /* The first child is the alias target op */ NextOp = NextOp->Asl.Child; /* That in turn points back to original target alias node */ if (NextOp->Asl.Node) { Node = NextOp->Asl.Node; } /* Else - forward reference to alias, will be resolved later */ } /* 2) Check for a reference to a resource descriptor */ if ((Node->Type == ACPI_TYPE_LOCAL_RESOURCE_FIELD) || (Node->Type == ACPI_TYPE_LOCAL_RESOURCE)) { /* * This was a reference to a field within a resource descriptor. * Extract the associated field offset (either a bit or byte * offset depending on the field type) and change the named * reference into an integer for AML code generation */ Offset = Node->Value; TagBitLength = Node->Length; /* * If a field is being created, generate the length (in bits) of * the field. Note: Opcodes other than CreateXxxField and Index * can come through here. For other opcodes, we just need to * convert the resource tag reference to an integer offset. */ switch (Op->Asl.Parent->Asl.AmlOpcode) { case AML_CREATE_FIELD_OP: /* Variable "Length" field, in bits */ /* * We know the length operand is an integer constant because * we know that it contains a reference to a resource * descriptor tag. */ FieldBitLength = (UINT32) Op->Asl.Next->Asl.Value.Integer; break; case AML_CREATE_BIT_FIELD_OP: FieldBitLength = 1; break; case AML_CREATE_BYTE_FIELD_OP: case AML_INDEX_OP: FieldBitLength = 8; break; case AML_CREATE_WORD_FIELD_OP: FieldBitLength = 16; break; case AML_CREATE_DWORD_FIELD_OP: FieldBitLength = 32; break; case AML_CREATE_QWORD_FIELD_OP: FieldBitLength = 64; break; default: FieldBitLength = 0; break; } /* Check the field length against the length of the resource tag */ if (FieldBitLength) { if (TagBitLength < FieldBitLength) { Message = ASL_MSG_TAG_SMALLER; } else if (TagBitLength > FieldBitLength) { Message = ASL_MSG_TAG_LARGER; } if (Message) { sprintf (AslGbl_MsgBuffer, "Size mismatch, Tag: %u bit%s, Field: %u bit%s", TagBitLength, (TagBitLength > 1) ? "s" : "", FieldBitLength, (FieldBitLength > 1) ? "s" : ""); AslError (ASL_WARNING, Message, Op, AslGbl_MsgBuffer); } } /* Convert the BitOffset to a ByteOffset for certain opcodes */ switch (Op->Asl.Parent->Asl.AmlOpcode) { case AML_CREATE_BYTE_FIELD_OP: case AML_CREATE_WORD_FIELD_OP: case AML_CREATE_DWORD_FIELD_OP: case AML_CREATE_QWORD_FIELD_OP: case AML_INDEX_OP: Offset = ACPI_DIV_8 (Offset); break; default: break; } /* Now convert this node to an integer whose value is the field offset */ Op->Asl.AmlLength = 0; Op->Asl.ParseOpcode = PARSEOP_INTEGER; Op->Asl.Value.Integer = (UINT64) Offset; Op->Asl.CompileFlags |= OP_IS_RESOURCE_FIELD; OpcGenerateAmlOpcode (Op); } /* 3) Check for a method invocation */ else if ((((Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) || (Op->Asl.ParseOpcode == PARSEOP_NAMESEG)) && (Node->Type == ACPI_TYPE_METHOD) && (Op->Asl.Parent) && (Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_METHOD)) || (Op->Asl.ParseOpcode == PARSEOP_METHODCALL)) { /* * A reference to a method within one of these opcodes is not an * invocation of the method, it is simply a reference to the method. * * September 2016: Removed DeRefOf from this list * July 2020: Added Alias to this list */ if ((Op->Asl.Parent) && ((Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_REFOF) || (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_PACKAGE) || (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_VAR_PACKAGE)|| (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_OBJECTTYPE) || (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_ALIAS))) { return_ACPI_STATUS (AE_OK); } /* * There are two types of method invocation: * 1) Invocation with arguments -- the parser recognizes this * as a METHODCALL. * 2) Invocation with no arguments --the parser cannot determine that * this is a method invocation, therefore we have to figure it out * here. */ if (Node->Type != ACPI_TYPE_METHOD) { sprintf (AslGbl_MsgBuffer, "%s is a %s", Op->Asl.ExternalName, AcpiUtGetTypeName (Node->Type)); AslError (ASL_ERROR, ASL_MSG_NOT_METHOD, Op, AslGbl_MsgBuffer); return_ACPI_STATUS (AE_OK); } /* Save the method node in the caller's op */ Op->Asl.Node = Node; if (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CONDREFOF) { return_ACPI_STATUS (AE_OK); } /* * This is a method invocation, with or without arguments. * Count the number of arguments, each appears as a child * under the parent node */ Op->Asl.ParseOpcode = PARSEOP_METHODCALL; UtSetParseOpName (Op); PassedArgs = 0; NextOp = Op->Asl.Child; while (NextOp) { PassedArgs++; NextOp = NextOp->Asl.Next; } if (Node->Value != ASL_EXTERNAL_METHOD_UNKNOWN_PARAMS && Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_EXTERNAL) { /* * Check the parsed arguments with the number expected by the * method declaration itself */ if (PassedArgs != Node->Value) { if (Node->Flags & ANOBJ_IS_EXTERNAL) { sprintf (AslGbl_MsgBuffer, "according to previous use, %s requires %u", Op->Asl.ExternalName, Node->Value); } else { sprintf (AslGbl_MsgBuffer, "%s requires %u", Op->Asl.ExternalName, Node->Value); } if (PassedArgs < Node->Value) { AslError (ASL_ERROR, ASL_MSG_ARG_COUNT_LO, Op, AslGbl_MsgBuffer); } else { AslError (ASL_ERROR, ASL_MSG_ARG_COUNT_HI, Op, AslGbl_MsgBuffer); } } } /* * At this point, a method call to an external method has been * detected. As of 11/19/2019, iASL does not support parameter counts * for methods declared as external. Therefore, save the parameter * count of the first method call and use this count check other * method calls to ensure that the methods are being called with the * same amount of parameters. */ else if (Node->Type == ACPI_TYPE_METHOD && (Node->Flags & ANOBJ_IS_EXTERNAL) && Node->Value == ASL_EXTERNAL_METHOD_UNKNOWN_PARAMS && Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_EXTERNAL) { Node->Value = PassedArgs; } } /* 4) Check for an ASL Field definition */ else if ((Op->Asl.Parent) && ((Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_FIELD) || (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_BANKFIELD))) { /* * Offset checking for fields. If the parent operation region has a * constant length (known at compile time), we can check fields * defined in that region against the region length. This will catch * fields and field units that cannot possibly fit within the region. * * Note: Index fields do not directly reference an operation region, * thus they are not included in this check. */ if (Op == Op->Asl.Parent->Asl.Child) { /* * This is the first child of the field node, which is * the name of the region. Get the parse node for the * region -- which contains the length of the region. */ OwningOp = Node->Op; Op->Asl.Parent->Asl.ExtraValue = ACPI_MUL_8 ((UINT32) OwningOp->Asl.Value.Integer); /* Examine the field access width */ switch ((UINT8) Op->Asl.Parent->Asl.Value.Integer) { case AML_FIELD_ACCESS_ANY: case AML_FIELD_ACCESS_BYTE: case AML_FIELD_ACCESS_BUFFER: default: MinimumLength = 1; break; case AML_FIELD_ACCESS_WORD: MinimumLength = 2; break; case AML_FIELD_ACCESS_DWORD: MinimumLength = 4; break; case AML_FIELD_ACCESS_QWORD: MinimumLength = 8; break; } /* * Is the region at least as big as the access width? * Note: DataTableRegions have 0 length */ if (((UINT32) OwningOp->Asl.Value.Integer) && ((UINT32) OwningOp->Asl.Value.Integer < MinimumLength)) { AslError (ASL_ERROR, ASL_MSG_FIELD_ACCESS_WIDTH, Op, NULL); } /* * Check EC/CMOS/SMBUS fields to make sure that the correct * access type is used (BYTE for EC/CMOS, BUFFER for SMBUS) */ SpaceIdOp = OwningOp->Asl.Child->Asl.Next; switch ((UINT32) SpaceIdOp->Asl.Value.Integer) { case ACPI_ADR_SPACE_EC: case ACPI_ADR_SPACE_CMOS: case ACPI_ADR_SPACE_GPIO: if ((UINT8) Op->Asl.Parent->Asl.Value.Integer != AML_FIELD_ACCESS_BYTE) { AslError (ASL_ERROR, ASL_MSG_REGION_BYTE_ACCESS, Op, NULL); } break; case ACPI_ADR_SPACE_SMBUS: case ACPI_ADR_SPACE_IPMI: case ACPI_ADR_SPACE_GSBUS: if ((UINT8) Op->Asl.Parent->Asl.Value.Integer != AML_FIELD_ACCESS_BUFFER) { AslError (ASL_ERROR, ASL_MSG_REGION_BUFFER_ACCESS, Op, NULL); } break; default: /* Nothing to do for other address spaces */ break; } } else { /* * This is one element of the field list. Check to make sure * that it does not go beyond the end of the parent operation region. * * In the code below: * Op->Asl.Parent->Asl.ExtraValue - Region Length (bits) * Op->Asl.ExtraValue - Field start offset (bits) * Op->Asl.Child->Asl.Value.Integer32 - Field length (bits) * Op->Asl.Child->Asl.ExtraValue - Field access width (bits) */ if (Op->Asl.Parent->Asl.ExtraValue && Op->Asl.Child) { XfCheckFieldRange (Op, Op->Asl.Parent->Asl.ExtraValue, Op->Asl.ExtraValue, (UINT32) Op->Asl.Child->Asl.Value.Integer, Op->Asl.Child->Asl.ExtraValue); } } } /* * 5) Check for external resolution * * By this point, everything should be loaded in the namespace. If a * namespace lookup results in a namespace node that is an external, it * means that this named object was not defined in the input ASL. This * causes issues because there are plenty of incidents where developers * use the external keyword to suppress compiler errors about undefined * objects. Note: this only applies when compiling multiple definition * blocks. * * Do not check for external resolution in the following cases: * * case 1) External (ABCD) * * This declares ABCD as an external so there is no requirement for * ABCD to be loaded in the namespace when analyzing the actual * External() statement. * * case 2) CondRefOf (ABCD) * * This operator will query the ACPI namespace on the existence of * ABCD. If ABCD does not exist, this operator will return a 0 * without incurring AML runtime errors. Therefore, ABCD is allowed * to not exist when analyzing the CondRefOf operator. * * case 3) External (ABCD) * if (CondRefOf (ABCD)) * { * Store (0, ABCD) * } * * In this case, ABCD is accessed only if it exists due to the if * statement so there is no need to flag the ABCD nested in the * store operator. */ if (AslGbl_ParseTreeRoot->Asl.Child && AslGbl_ParseTreeRoot->Asl.Child->Asl.Next && (Node->Flags & ANOBJ_IS_EXTERNAL) && Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_EXTERNAL && Op->Asl.ParseOpcode != PARSEOP_EXTERNAL && Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_CONDREFOF && !XfRefIsGuardedByIfCondRefOf (Node, Op)) { ExternalPath = AcpiNsGetNormalizedPathname (Node, TRUE); sprintf (AslGbl_MsgBuffer, "full path of external object: %s", ExternalPath); AslDualParseOpError (ASL_ERROR, ASL_MSG_UNDEFINED_EXTERNAL, Op, NULL, ASL_MSG_EXTERNAL_FOUND_HERE, Node->Op, AslGbl_MsgBuffer); if (ExternalPath) { ACPI_FREE (ExternalPath); } } /* 5) Check for a connection object */ #if 0 else if (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CONNECTION) { return_ACPI_STATUS (Status); } #endif Op->Asl.Node = Node; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: XfRefIsGuardedByIfCondRefOf * * PARAMETERS: Node - Named object reference node * Op - Named object reference parse node * * RETURN: BOOLEAN * * DESCRIPTION: returns true if Op checked inside if (CondRefOf (...)) * refers to Node. * ******************************************************************************/ static BOOLEAN XfRefIsGuardedByIfCondRefOf ( ACPI_NAMESPACE_NODE *Node, ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Parent = Op->Asl.Parent; while (Parent) { if (Parent->Asl.ParseOpcode == PARSEOP_IF && XfFindCondRefOfName (Node, Parent->Asl.Child)) { return (TRUE); } Parent = Parent->Asl.Parent; } return (FALSE); } /******************************************************************************* * * FUNCTION: XfRefIsGuardedByIfCondRefOf * * PARAMETERS: Node - Named object reference node * Op - Named object reference parse node * * RETURN: BOOLEAN * * DESCRIPTION: returns true if Op checked inside if (CondRefOf (...)) * refers to Node. * ******************************************************************************/ static BOOLEAN XfFindCondRefOfName ( ACPI_NAMESPACE_NODE *Node, ACPI_PARSE_OBJECT *Op) { BOOLEAN CondRefOfFound = FALSE; if (!Op) { return (FALSE); } switch (Op->Asl.ParseOpcode) { case PARSEOP_CONDREFOF: return (Op->Asl.Child->Common.Node == Node); break; case PARSEOP_LAND: CondRefOfFound = XfFindCondRefOfName (Node, Op->Asl.Child); if (CondRefOfFound) { return (TRUE); } return (XfFindCondRefOfName (Node, Op->Asl.Child->Asl.Next)); break; default: return (FALSE); break; } } /******************************************************************************* * * FUNCTION: XfNamespaceLocateEnd * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Ascending callback used during cross reference. We only * need to worry about scope management here. * ******************************************************************************/ static ACPI_STATUS XfNamespaceLocateEnd ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_WALK_STATE *WalkState = (ACPI_WALK_STATE *) Context; const ACPI_OPCODE_INFO *OpInfo; ACPI_FUNCTION_TRACE (XfNamespaceLocateEnd); /* We are only interested in opcodes that have an associated name */ OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); if (!(OpInfo->Flags & AML_NAMED)) { return_ACPI_STATUS (AE_OK); } /* Not interested in name references, we did not open a scope for them */ if ((Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) || (Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || (Op->Asl.ParseOpcode == PARSEOP_METHODCALL) || (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL)) { return_ACPI_STATUS (AE_OK); } /* Pop the scope stack if necessary */ if (AcpiNsOpensScope (AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode))) { ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "%s: Popping scope for Op %p\n", AcpiUtGetTypeName (OpInfo->ObjectType), Op)); (void) AcpiDsScopeStackPop (WalkState); } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: XfValidateCrossReference * * PARAMETERS: Op - Parse Op that references the object * OpInfo - Parse Op info struct * Node - Node for the referenced object * * RETURN: TRUE if the reference is legal, FALSE otherwise * * DESCRIPTION: Determine if a reference to another object is allowed. * * EXAMPLE: * Method (A) {Name (INT1, 1)} Declaration of object INT1 * Method (B) (Store (2, \A.INT1)} Illegal reference to object INT1 * (INT1 is temporary, valid only during * execution of A) * * NOTES: * A null pointer returned by either UtGetParentMethodOp or * UtGetParentMethodNode indicates that the parameter object is not * within a control method. * * Five cases are handled: Case(Op, Node) * 1) Case(0,0): Op is not within a method, Node is not --> OK * 2) Case(0,1): Op is not within a method, but Node is --> Illegal * 3) Case(1,0): Op is within a method, Node is not --> OK * 4) Case(1,1): Both are within the same method --> OK * 5) Case(1,1): Both are in methods, but not same method --> Illegal * ******************************************************************************/ static BOOLEAN XfValidateCrossReference ( ACPI_PARSE_OBJECT *Op, const ACPI_OPCODE_INFO *OpInfo, ACPI_NAMESPACE_NODE *Node) { ACPI_PARSE_OBJECT *ReferencingMethodOp; ACPI_NAMESPACE_NODE *ReferencedMethodNode; /* Ignore actual named (and related) object declarations */ if (OpInfo->Flags & (AML_NAMED | AML_CREATE | AML_DEFER | AML_HAS_ARGS)) { return (TRUE); } /* * 1) Search upwards in parse tree for owner of the referencing object * 2) Search upwards in namespace to find the owner of the referenced object */ ReferencingMethodOp = UtGetParentMethodOp (Op); ReferencedMethodNode = UtGetParentMethodNode (Node); if (!ReferencingMethodOp && !ReferencedMethodNode) { /* * 1) Case (0,0): Both Op and Node are not within methods * --> OK */ return (TRUE); } if (!ReferencingMethodOp && ReferencedMethodNode) { /* * 2) Case (0,1): Op is not in a method, but Node is within a * method --> illegal */ return (FALSE); } else if (ReferencingMethodOp && !ReferencedMethodNode) { /* * 3) Case (1,0): Op is within a method, but Node is not * --> OK */ return (TRUE); } else if (ReferencingMethodOp->Asl.Node == ReferencedMethodNode) { /* * 4) Case (1,1): Both Op and Node are within the same method * --> OK */ return (TRUE); } else { /* * 5) Case (1,1), Op and Node are in different methods * --> Illegal */ return (FALSE); } } src/acpica/source/compiler/aslxrefout.c000066400000000000000000000716121465205512700205550ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aslxrefout.c - support for optional cross-reference file * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "acnamesp.h" #include "acparser.h" #include "amlcode.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslxrefout") /* Local prototypes */ static ACPI_STATUS OtXrefWalkPart2 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS OtXrefWalkPart3 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS OtXrefAnalysisWalkPart1 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS OtXrefAnalysisWalkPart2 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS OtXrefAnalysisWalkPart3 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); /******************************************************************************* * * FUNCTION: OtPrintHeaders * * PARAMETERS: Message - Main header message * * RETURN: None * * DESCRIPTION: Emits the main header message along with field descriptions * ******************************************************************************/ void OtPrintHeaders ( char *Message) { UINT32 Length; Length = strlen (Message); FlPrintFile (ASL_FILE_XREF_OUTPUT, "\n\n%s\n", Message); while (Length) { FlPrintFile (ASL_FILE_XREF_OUTPUT, "-"); Length--; } FlPrintFile (ASL_FILE_XREF_OUTPUT, "\n\nLineno %-40s Description\n", "Full Pathname"); } /******************************************************************************* * * FUNCTION: OtCreateXrefFile * * PARAMETERS: None * * RETURN: None * * DESCRIPTION Main entry point for parts 2 and 3 of the cross-reference * file. * ******************************************************************************/ void OtCreateXrefFile ( void) { ASL_XREF_INFO XrefInfo; /* Build cross-reference output file if requested */ if (!AslGbl_CrossReferenceOutput) { return; } memset (&XrefInfo, 0, sizeof (ASL_XREF_INFO)); /* Cross-reference output file, part 2 (Method invocations) */ OtPrintHeaders ("Part 2: Method Reference Map " "(Invocations of each user-defined control method)"); TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD, OtXrefWalkPart2, NULL, &XrefInfo); /* Cross-reference output file, part 3 (All other object refs) */ OtPrintHeaders ("Part 3: Full Object Reference Map " "(Methods that reference each object in namespace"); TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD, OtXrefWalkPart3, NULL, &XrefInfo); /* Cross-reference summary */ FlPrintFile (ASL_FILE_XREF_OUTPUT, "\n\nObject Summary\n"); FlPrintFile (ASL_FILE_XREF_OUTPUT, "\nTotal methods: %u\n", XrefInfo.TotalPredefinedMethods + XrefInfo.TotalUserMethods); FlPrintFile (ASL_FILE_XREF_OUTPUT, "Total predefined methods: %u\n", XrefInfo.TotalPredefinedMethods); FlPrintFile (ASL_FILE_XREF_OUTPUT, "\nTotal user methods: %u\n", XrefInfo.TotalUserMethods); FlPrintFile (ASL_FILE_XREF_OUTPUT, "Total unreferenced user methods %u\n", XrefInfo.TotalUnreferenceUserMethods); FlPrintFile (ASL_FILE_XREF_OUTPUT, "\nTotal defined objects: %u\n", XrefInfo.TotalObjects); FlPrintFile (ASL_FILE_XREF_OUTPUT, "Total unreferenced objects: %u\n", XrefInfo.TotalUnreferencedObjects); } /* * Part 1 of the cross reference file. This part emits the namespace objects * that are referenced by each control method in the namespace. * * Part 2 and 3 are below part 1. */ /******************************************************************************* * * FUNCTION: OtXrefWalkPart1 * * PARAMETERS: Op - Current parse Op * Level - Current tree nesting level * MethodInfo - Info block for the current method * * * RETURN: None * * DESCRIPTION: Entry point for the creation of the method call reference map. * For each control method in the namespace, all other methods * that invoke the method are listed. Predefined names/methods * that start with an underscore are ignored, because these are * essentially external/public interfaces. * DESCRIPTION: Entry point for the creation of the object reference map. * For each control method in the namespace, all objects that * are referenced by the method are listed. * * Called during a normal namespace walk, once per namespace * object. (MtMethodAnalysisWalkBegin) * ******************************************************************************/ void OtXrefWalkPart1 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, ASL_METHOD_INFO *MethodInfo) { ACPI_NAMESPACE_NODE *Node; ACPI_PARSE_OBJECT *NextOp; ACPI_PARSE_OBJECT *FieldOp; char *ParentPath; UINT32 Length; ACPI_STATUS Status; switch (Op->Asl.ParseOpcode) { case PARSEOP_NAMESEG: case PARSEOP_NAMESTRING: case PARSEOP_METHODCALL: if (!MethodInfo || (MethodInfo->Op->Asl.Child == Op) || !Op->Asl.Node) { break; } MethodInfo->CurrentOp = Op; Node = Op->Asl.Node; /* Find all objects referenced by this method */ Status = TrWalkParseTree (MethodInfo->Op, ASL_WALK_VISIT_DOWNWARD, OtXrefAnalysisWalkPart1, NULL, MethodInfo); if (Status == AE_CTRL_TERMINATE) { ParentPath = AcpiNsGetNormalizedPathname (Node, TRUE); FlPrintFile (ASL_FILE_XREF_OUTPUT, " %-40s %s", ParentPath, AcpiUtGetTypeName (Node->Type)); ACPI_FREE (ParentPath); switch (Node->Type) { /* Handle externals */ case ACPI_TYPE_ANY: case ACPI_TYPE_FIELD_UNIT: FlPrintFile (ASL_FILE_XREF_OUTPUT, " "); break; case ACPI_TYPE_INTEGER: FlPrintFile (ASL_FILE_XREF_OUTPUT, " %8.8X%8.8X", ACPI_FORMAT_UINT64 (Op->Asl.Value.Integer)); break; case ACPI_TYPE_METHOD: FlPrintFile (ASL_FILE_XREF_OUTPUT, " Invocation (%u args)", Node->ArgCount); break; case ACPI_TYPE_BUFFER_FIELD: NextOp = Node->Op; /* Create Buffer Field Op */ switch (NextOp->Asl.ParseOpcode) { case PARSEOP_CREATEBITFIELD: Length = 1; break; case PARSEOP_CREATEBYTEFIELD: Length = 8; break; case PARSEOP_CREATEWORDFIELD: Length = 16; break; case PARSEOP_CREATEDWORDFIELD: Length = 32; break; case PARSEOP_CREATEQWORDFIELD: Length = 64; break; default: Length = 0; break; } NextOp = NextOp->Asl.Child; /* Buffer name */ if (!NextOp->Asl.ExternalName) { FlPrintFile (ASL_FILE_XREF_OUTPUT, " in Arg/Local"); } else { ParentPath = AcpiNsGetNormalizedPathname ( NextOp->Asl.Node, TRUE); FlPrintFile (ASL_FILE_XREF_OUTPUT, " (%.2u bit) in Buffer %s", Length, ParentPath); ACPI_FREE (ParentPath); } break; case ACPI_TYPE_LOCAL_REGION_FIELD: NextOp = Node->Op; FieldOp = NextOp->Asl.Parent; NextOp = FieldOp->Asl.Child; ParentPath = AcpiNsGetNormalizedPathname ( NextOp->Asl.Node, TRUE); FlPrintFile (ASL_FILE_XREF_OUTPUT, " (%.2u bit) in Region %s", (UINT32) Node->Op->Asl.Child->Asl.Value.Integer, ParentPath); ACPI_FREE (ParentPath); if (FieldOp->Asl.ParseOpcode == PARSEOP_FIELD) { Node = NextOp->Asl.Node; /* Region node */ NextOp = Node->Op; /* PARSEOP_REGION */ NextOp = NextOp->Asl.Child; /* Region name */ NextOp = NextOp->Asl.Next; /* Get region space/addr/len? */ FlPrintFile (ASL_FILE_XREF_OUTPUT, " (%s)", AcpiUtGetRegionName ((UINT8) NextOp->Asl.Value.Integer)); } break; default: break; } FlPrintFile (ASL_FILE_XREF_OUTPUT, "\n"); } break; case PARSEOP_METHOD: ParentPath = AcpiNsGetNormalizedPathname (Op->Asl.Node, TRUE); FlPrintFile (ASL_FILE_XREF_OUTPUT, "\n[%5u] %-40s %s Declaration (%u args)\n", Op->Asl.LogicalLineNumber, ParentPath, AcpiUtGetTypeName (Op->Asl.Node->Type), Op->Asl.Node->ArgCount); ACPI_FREE (ParentPath); break; default: break; } } /******************************************************************************* * * FUNCTION: OtXrefAnalysisWalkPart1 * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Secondary walk for cross-reference part 1. * ******************************************************************************/ static ACPI_STATUS OtXrefAnalysisWalkPart1 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ASL_METHOD_INFO *MethodInfo = (ASL_METHOD_INFO *) Context; ACPI_PARSE_OBJECT *Next; /* Only interested in name string Ops -- ignore all others */ if ((Op->Asl.ParseOpcode != PARSEOP_NAMESEG) && (Op->Asl.ParseOpcode != PARSEOP_NAMESTRING) && (Op->Asl.ParseOpcode != PARSEOP_METHODCALL)) { return (AE_OK); } /* No node means a locally declared object -- ignore */ if (!Op->Asl.Node) { return (AE_OK); } /* When we encounter the source Op, we are done */ Next = MethodInfo->CurrentOp; if (Next == Op) { return (AE_CTRL_TERMINATE); } /* If we have a name match, this Op is a duplicate */ if ((Next->Asl.ParseOpcode == PARSEOP_NAMESEG) || (Next->Asl.ParseOpcode == PARSEOP_NAMESTRING) || (Next->Asl.ParseOpcode == PARSEOP_METHODCALL)) { if (!strcmp (Op->Asl.ExternalName, Next->Asl.ExternalName)) { return (AE_ALREADY_EXISTS); } } return (AE_OK); } /* * Part 2 of the cross reference file. This part emits the names of each * non-predefined method in the namespace (user methods), along with the * names of each control method that references that method. */ /******************************************************************************* * * FUNCTION: OtXrefWalkPart2 * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: For each control method in the namespace, we will re-walk the * namespace to find each and every invocation of that control * method. Brute force, but does not matter, even for large * namespaces. Ignore predefined names (start with underscore). * ******************************************************************************/ static ACPI_STATUS OtXrefWalkPart2 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ASL_XREF_INFO *XrefInfo = (ASL_XREF_INFO *) Context; ACPI_NAMESPACE_NODE *Node; char *ParentPath; /* Looking for Method Declaration Ops only */ if (!Op->Asl.Node || (Op->Asl.ParseOpcode != PARSEOP_METHOD)) { return (AE_OK); } /* Ignore predefined names */ if (Op->Asl.Node->Name.Ascii[0] == '_') { XrefInfo->TotalPredefinedMethods++; return (AE_OK); } Node = Op->Asl.Node; ParentPath = AcpiNsGetNormalizedPathname (Node, TRUE); FlPrintFile (ASL_FILE_XREF_OUTPUT, "\n[%5u] %-40s %s Declaration (%u args)\n", Op->Asl.LogicalLineNumber, ParentPath, AcpiUtGetTypeName (Node->Type), Node->ArgCount); XrefInfo->TotalUserMethods++; XrefInfo->ThisMethodInvocations = 0; XrefInfo->MethodOp = Op; (void) TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD, OtXrefAnalysisWalkPart2, NULL, XrefInfo); if (!XrefInfo->ThisMethodInvocations) { FlPrintFile (ASL_FILE_XREF_OUTPUT, " Zero invocations of this method in this module\n"); XrefInfo->TotalUnreferenceUserMethods++; } else { FlPrintFile (ASL_FILE_XREF_OUTPUT, " %u invocations of method %s in this module\n", XrefInfo->ThisMethodInvocations, ParentPath); } ACPI_FREE (ParentPath); return (AE_OK); } /******************************************************************************* * * FUNCTION: OtXrefAnalysisWalkPart2 * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: For every Op that is a method invocation, emit a reference * line if the Op is invoking the target method. * ******************************************************************************/ static ACPI_STATUS OtXrefAnalysisWalkPart2 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ASL_XREF_INFO *XrefInfo = (ASL_XREF_INFO *) Context; ACPI_PARSE_OBJECT *CallerOp; char *CallerFullPathname; /* Looking for MethodCall Ops only */ if (!Op->Asl.Node || (Op->Asl.ParseOpcode != PARSEOP_METHODCALL)) { return (AE_OK); } /* If not a match to the target method, we are done */ if (Op->Asl.Node != XrefInfo->MethodOp->Asl.Node) { return (AE_CTRL_DEPTH); } /* Find parent method to get method caller namepath */ CallerOp = Op->Asl.Parent; while (CallerOp && (CallerOp->Asl.ParseOpcode != PARSEOP_METHOD)) { CallerOp = CallerOp->Asl.Parent; } /* There is no parent method for External() statements */ if (!CallerOp) { return (AE_OK); } CallerFullPathname = AcpiNsGetNormalizedPathname ( CallerOp->Asl.Node, TRUE); FlPrintFile (ASL_FILE_XREF_OUTPUT, "[%5u] %-40s Invocation path: %s\n", Op->Asl.LogicalLineNumber, CallerFullPathname, Op->Asl.ExternalName); ACPI_FREE (CallerFullPathname); XrefInfo->ThisMethodInvocations++; return (AE_OK); } /* * Part 3 of the cross reference file. This part emits the names of each * non-predefined method in the namespace (user methods), along with the * names of each control method that references that method. */ /******************************************************************************* * * FUNCTION: OtXrefWalkPart3 * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Cross-reference part 3. references to objects other than * control methods. * ******************************************************************************/ static ACPI_STATUS OtXrefWalkPart3 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ASL_XREF_INFO *XrefInfo = (ASL_XREF_INFO *) Context; ACPI_NAMESPACE_NODE *Node; char *ParentPath; const ACPI_OPCODE_INFO *OpInfo; /* Ignore method declarations */ if (!Op->Asl.Node || (Op->Asl.ParseOpcode == PARSEOP_METHOD)) { return (AE_OK); } OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); if (!(OpInfo->Class & AML_CLASS_NAMED_OBJECT)) { return (AE_OK); } /* Only care about named object creation opcodes */ if ((Op->Asl.ParseOpcode != PARSEOP_NAME) && (Op->Asl.ParseOpcode != PARSEOP_DEVICE) && (Op->Asl.ParseOpcode != PARSEOP_MUTEX) && (Op->Asl.ParseOpcode != PARSEOP_OPERATIONREGION) && (Op->Asl.ParseOpcode != PARSEOP_FIELD) && (Op->Asl.ParseOpcode != PARSEOP_EVENT)) { return (AE_OK); } /* Ignore predefined names */ if (Op->Asl.Node->Name.Ascii[0] == '_') { return (AE_OK); } Node = Op->Asl.Node; ParentPath = AcpiNsGetNormalizedPathname (Node, TRUE); FlPrintFile (ASL_FILE_XREF_OUTPUT, "\n[%5u] %-40s %s Declaration\n", Op->Asl.LogicalLineNumber, ParentPath, AcpiUtGetTypeName (Node->Type)); ACPI_FREE (ParentPath); XrefInfo->MethodOp = Op; XrefInfo->ThisObjectReferences = 0; XrefInfo->TotalObjects = 0; (void) TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD, OtXrefAnalysisWalkPart3, NULL, XrefInfo); if (!XrefInfo->ThisObjectReferences) { FlPrintFile (ASL_FILE_XREF_OUTPUT, " Zero references to this object in this module\n"); XrefInfo->TotalUnreferencedObjects++; } else { FlPrintFile (ASL_FILE_XREF_OUTPUT, " %u references to this object in this module [%s]\n", XrefInfo->ThisObjectReferences, ParentPath); } return (AE_OK); } /******************************************************************************* * * FUNCTION: OtXrefAnalysisWalkPart3 * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Secondary walk for cross-reference part 3. * ******************************************************************************/ static ACPI_STATUS OtXrefAnalysisWalkPart3 ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ASL_XREF_INFO *XrefInfo = (ASL_XREF_INFO *) Context; char *CallerFullPathname = NULL; ACPI_PARSE_OBJECT *CallerOp; const char *Operator; if (!Op->Asl.Node) { return (AE_OK); } XrefInfo->TotalObjects++; /* Ignore Op that actually defined the object */ if (Op == XrefInfo->MethodOp) { return (AE_OK); } /* Only interested in Ops that reference the target node */ if (Op->Asl.Node != XrefInfo->MethodOp->Asl.Node) { return (AE_OK); } /* Find parent "open scope" object to get method caller namepath */ CallerOp = Op->Asl.Parent; while (CallerOp && (CallerOp->Asl.ParseOpcode != PARSEOP_NAME) && (CallerOp->Asl.ParseOpcode != PARSEOP_METHOD) && (CallerOp->Asl.ParseOpcode != PARSEOP_DEVICE) && (CallerOp->Asl.ParseOpcode != PARSEOP_POWERRESOURCE) && (CallerOp->Asl.ParseOpcode != PARSEOP_PROCESSOR) && (CallerOp->Asl.ParseOpcode != PARSEOP_THERMALZONE)) { CallerOp = CallerOp->Asl.Parent; } if (CallerOp == XrefInfo->CurrentMethodOp) { return (AE_OK); } /* Null CallerOp means the caller is at the namespace root */ if (CallerOp) { CallerFullPathname = AcpiNsGetNormalizedPathname ( CallerOp->Asl.Node, TRUE); } /* There are some special cases for the oddball operators */ if (Op->Asl.ParseOpcode == PARSEOP_SCOPE) { Operator = "Scope"; } else if (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_ALIAS) { Operator = "Alias"; } else if (!CallerOp) { Operator = "ModLevel"; } else { Operator = AcpiUtGetTypeName (CallerOp->Asl.Node->Type); } FlPrintFile (ASL_FILE_XREF_OUTPUT, "[%5u] %-40s %-8s via path: %s, Operator: %s\n", Op->Asl.LogicalLineNumber, CallerFullPathname ? CallerFullPathname : "", Operator, Op->Asl.ExternalName, Op->Asl.Parent->Asl.ParseOpName); if (!CallerOp) { CallerOp = ACPI_TO_POINTER (0xFFFFFFFF); } if (CallerFullPathname) { ACPI_FREE (CallerFullPathname); } XrefInfo->CurrentMethodOp = CallerOp; XrefInfo->ThisObjectReferences++; return (AE_OK); } src/acpica/source/compiler/cvcompiler.c000066400000000000000000001006621465205512700205220ustar00rootroot00000000000000/****************************************************************************** * * Module Name: cvcompiler - ASL-/ASL+ converter functions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "aslcompiler.y.h" #include "amlcode.h" #include "acapps.h" #include "acconvert.h" /******************************************************************************* * * FUNCTION: CvProcessComment * * PARAMETERS: CurrentState Current comment parse state * StringBuffer Buffer containing the comment being processed * c1 Current input * * RETURN: None * * DESCRIPTION: Process a single line comment of a c Style comment. This * function captures a line of a c style comment in a char* and * places the comment in the appropriate global buffer. * ******************************************************************************/ void CvProcessComment ( ASL_COMMENT_STATE CurrentState, char *StringBuffer, int c1) { UINT64 i; char *LineToken; char *FinalLineToken; BOOLEAN CharStart; char *CommentString; char *FinalCommentString; if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { *StringBuffer = (char) c1; ++StringBuffer; *StringBuffer = 0; CvDbgPrint ("Multi-line comment\n"); CommentString = UtLocalCacheCalloc (strlen (AslGbl_MsgBuffer) + 1); strcpy (CommentString, AslGbl_MsgBuffer); CvDbgPrint ("CommentString: %s\n", CommentString); /* * Determine whether if this comment spans multiple lines. If so, * break apart the comment by storing each line in a different node * within the comment list. This allows the disassembler to * properly indent a multi-line comment. */ LineToken = strtok (CommentString, "\n"); if (LineToken) { FinalLineToken = UtLocalCacheCalloc (strlen (LineToken) + 1); strcpy (FinalLineToken, LineToken); /* Get rid of any carriage returns */ if (FinalLineToken[strlen (FinalLineToken) - 1] == 0x0D) { FinalLineToken[strlen(FinalLineToken)-1] = 0; } CvAddToCommentList (FinalLineToken); LineToken = strtok (NULL, "\n"); while (LineToken != NULL) { /* * It is assumed that each line has some sort of indentation. * This means that we need to find the first character that * is not a white space within each line. */ CharStart = FALSE; for (i = 0; (i < (strlen (LineToken) + 1)) && !CharStart; i++) { if (LineToken[i] != ' ' && LineToken[i] != '\t') { CharStart = TRUE; LineToken += i-1; LineToken [0] = ' '; /* Pad for Formatting */ } } FinalLineToken = UtLocalCacheCalloc (strlen (LineToken) + 1); strcat (FinalLineToken, LineToken); /* Get rid of any carriage returns */ if (FinalLineToken[strlen (FinalLineToken) - 1] == 0x0D) { FinalLineToken[strlen(FinalLineToken) - 1] = 0; } CvAddToCommentList (FinalLineToken); LineToken = strtok (NULL,"\n"); } } /* * If this only spans a single line, check to see whether if this * comment appears on the same line as a line of code. If does, * retain it's position for stylistic reasons. If it doesn't, * add it to the comment list so that it can be associated with * the next node that's created. */ else { /* * If this is not a regular comment, pad with extra spaces that * appeared in the original source input to retain the original * spacing. */ FinalCommentString = UtLocalCacheCalloc (strlen (CommentString) + CurrentState.SpacesBefore + 1); for (i = 0; (CurrentState.CommentType != ASL_COMMENT_STANDARD) && (i < CurrentState.SpacesBefore); i++) { FinalCommentString[i] = ' '; } strcat (FinalCommentString, CommentString); CvPlaceComment (CurrentState.CommentType, FinalCommentString); } } } /******************************************************************************* * * FUNCTION: CvProcessCommentType2 * * PARAMETERS: CurrentState Current comment parse state * StringBuffer Buffer containing the comment being processed * * RETURN: none * * DESCRIPTION: Process a single line comment. This function captures a comment * in a char* and places the comment in the appropriate global * buffer through CvPlaceComment * ******************************************************************************/ void CvProcessCommentType2 ( ASL_COMMENT_STATE CurrentState, char *StringBuffer) { UINT32 i; char *CommentString; char *FinalCommentString; if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { *StringBuffer = 0; /* null terminate */ CvDbgPrint ("Single-line comment\n"); CommentString = UtLocalCacheCalloc (strlen (AslGbl_MsgBuffer) + 1); strcpy (CommentString, AslGbl_MsgBuffer); /* If this comment lies on the same line as the latest parse op, * assign it to that op's CommentAfter field. Saving in this field * will allow us to support comments that come after code on the * same line as the code itself. For example, * Name(A,"") //comment * * will be retained rather than transformed into * * Name(A,"") * //comment * * For this case, we only need to add one comment since * * Name(A,"") //comment1 //comment2 ... more comments here. * * would be lexically analyzed as a single comment. * * Create a new string with the appropriate spaces. Since we need * to account for the proper spacing, the actual comment, * extra 2 spaces so that this comment can be converted to the "/ *" * style and the null terminator, the string would look something * like: * * [ (spaces) (comment) ( * /) ('\0') ] * */ FinalCommentString = UtLocalCacheCalloc (CurrentState.SpacesBefore + strlen (CommentString) + 3 + 1); for (i = 0; (CurrentState.CommentType != 1) && (i < CurrentState.SpacesBefore); i++) { FinalCommentString[i] = ' '; } strcat (FinalCommentString, CommentString); /* convert to a "/ *" style comment */ strcat (FinalCommentString, " */"); FinalCommentString [CurrentState.SpacesBefore + strlen (CommentString) + 3] = 0; /* get rid of the carriage return */ if (FinalCommentString[strlen (FinalCommentString) - 1] == 0x0D) { FinalCommentString[strlen(FinalCommentString) - 1] = 0; } CvPlaceComment (CurrentState.CommentType, FinalCommentString); } } /******************************************************************************* * * FUNCTION: CgCalculateCommentLengths * * PARAMETERS: Op - Calculate all comments of this Op * * RETURN: TotalCommentLength - Length of all comments within this op. * * DESCRIPTION: Calculate the length that the each comment takes up within Op. * Comments look like the following: [0xA9 OptionBtye comment 0x00] * therefore, we add 1 + 1 + strlen (comment) + 1 to get the actual * length of this comment. * ******************************************************************************/ UINT32 CvCalculateCommentLengths( ACPI_PARSE_OBJECT *Op) { UINT32 CommentLength = 0; UINT32 TotalCommentLength = 0; ACPI_COMMENT_NODE *Current = NULL; if (!AcpiGbl_CaptureComments) { return (0); } CvDbgPrint ("==Calculating comment lengths for %s\n", Op->Asl.ParseOpName); if (Op->Asl.FileChanged) { TotalCommentLength += strlen (Op->Asl.Filename) + 3; if (Op->Asl.ParentFilename && AcpiUtStricmp (Op->Asl.Filename, Op->Asl.ParentFilename)) { TotalCommentLength += strlen (Op->Asl.ParentFilename) + 3; } } if (Op->Asl.CommentList) { Current = Op->Asl.CommentList; while (Current) { CommentLength = strlen (Current->Comment)+3; CvDbgPrint ("Length of standard comment: %d\n", CommentLength); CvDbgPrint (" Comment string: %s\n\n", Current->Comment); TotalCommentLength += CommentLength; Current = Current->Next; } } if (Op->Asl.EndBlkComment) { Current = Op->Asl.EndBlkComment; while (Current) { CommentLength = strlen (Current->Comment)+3; CvDbgPrint ("Length of endblkcomment: %d\n", CommentLength); CvDbgPrint (" Comment string: %s\n\n", Current->Comment); TotalCommentLength += CommentLength; Current = Current->Next; } } if (Op->Asl.InlineComment) { CommentLength = strlen (Op->Asl.InlineComment)+3; CvDbgPrint ("Length of inline comment: %d\n", CommentLength); CvDbgPrint (" Comment string: %s\n\n", Op->Asl.InlineComment); TotalCommentLength += CommentLength; } if (Op->Asl.EndNodeComment) { CommentLength = strlen(Op->Asl.EndNodeComment)+3; CvDbgPrint ("Length of end node comment +3: %d\n", CommentLength); CvDbgPrint (" Comment string: %s\n\n", Op->Asl.EndNodeComment); TotalCommentLength += CommentLength; } if (Op->Asl.CloseBraceComment) { CommentLength = strlen (Op->Asl.CloseBraceComment)+3; CvDbgPrint ("Length of close brace comment: %d\n", CommentLength); CvDbgPrint (" Comment string: %s\n\n", Op->Asl.CloseBraceComment); TotalCommentLength += CommentLength; } CvDbgPrint("\n\n"); return (TotalCommentLength); } /******************************************************************************* * * FUNCTION: CgWriteAmlDefBlockComment * * PARAMETERS: Op - Current parse op * * RETURN: None * * DESCRIPTION: Write all comments for a particular definition block. * For definition blocks, the comments need to come after the * definition block header. The regular comments above the * definition block would be categorized as * STD_DEFBLK_COMMENT and comments after the closing brace * is categorized as END_DEFBLK_COMMENT. * ******************************************************************************/ void CgWriteAmlDefBlockComment( ACPI_PARSE_OBJECT *Op) { UINT8 CommentOption; ACPI_COMMENT_NODE *Current; char *NewFilename; char *Position; char *DirectoryPosition; if (!AcpiGbl_CaptureComments || (Op->Asl.ParseOpcode != PARSEOP_DEFINITION_BLOCK)) { return; } CvDbgPrint ("Printing comments for a definition block..\n"); /* First, print the file name comment after changing .asl to .dsl */ NewFilename = UtLocalCacheCalloc (strlen (Op->Asl.Filename)); strcpy (NewFilename, Op->Asl.Filename); DirectoryPosition = strrchr (NewFilename, '/'); Position = strrchr (NewFilename, '.'); if (Position && (Position > DirectoryPosition)) { /* Tack on the new suffix */ Position++; *Position = 0; strcat (Position, FILE_SUFFIX_DISASSEMBLY); } else { /* No dot, add one and then the suffix */ strcat (NewFilename, "."); strcat (NewFilename, FILE_SUFFIX_DISASSEMBLY); } CommentOption = FILENAME_COMMENT; CgWriteOneAmlComment(Op, NewFilename, CommentOption); Current = Op->Asl.CommentList; CommentOption = STD_DEFBLK_COMMENT; while (Current) { CgWriteOneAmlComment(Op, Current->Comment, CommentOption); CvDbgPrint ("Printing comment: %s\n", Current->Comment); Current = Current->Next; } Op->Asl.CommentList = NULL; /* Print any Inline comments associated with this node */ if (Op->Asl.CloseBraceComment) { CommentOption = END_DEFBLK_COMMENT; CgWriteOneAmlComment(Op, Op->Asl.CloseBraceComment, CommentOption); Op->Asl.CloseBraceComment = NULL; } } /******************************************************************************* * * FUNCTION: CgWriteOneAmlComment * * PARAMETERS: Op - Current parse op * CommentToPrint - Comment that's printed * InputOption - Denotes the comment option. * * RETURN: None * * DESCRIPTION: write a single comment. * ******************************************************************************/ void CgWriteOneAmlComment( ACPI_PARSE_OBJECT *Op, char* CommentToPrint, UINT8 InputOption) { UINT8 CommentOption = InputOption; UINT8 CommentOpcode = (UINT8) AML_COMMENT_OP; if (!CommentToPrint) { return; } CgLocalWriteAmlData (Op, &CommentOpcode, 1); CgLocalWriteAmlData (Op, &CommentOption, 1); /* The strlen (..) + 1 is to include the null terminator */ CgLocalWriteAmlData (Op, CommentToPrint, strlen (CommentToPrint) + 1); } /******************************************************************************* * * FUNCTION: CgWriteAmlComment * * PARAMETERS: Op - Current parse op * * RETURN: None * * DESCRIPTION: Write all comments pertaining to the current parse op * ******************************************************************************/ void CgWriteAmlComment( ACPI_PARSE_OBJECT *Op) { ACPI_COMMENT_NODE *Current; UINT8 CommentOption; char *NewFilename; char *ParentFilename; if ((Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK) || !AcpiGbl_CaptureComments) { return; } /* Print out the filename comment if needed */ if (Op->Asl.FileChanged) { /* First, print the file name comment after changing .asl to .dsl */ NewFilename = FlGenerateFilename (Op->Asl.Filename, FILE_SUFFIX_DISASSEMBLY); if (NewFilename) { CvDbgPrint ("Writing file comment, \"%s\" for %s\n", NewFilename, Op->Asl.ParseOpName); } CgWriteOneAmlComment(Op, NewFilename, FILENAME_COMMENT); if (Op->Asl.ParentFilename && AcpiUtStricmp (Op->Asl.ParentFilename, Op->Asl.Filename)) { ParentFilename = FlGenerateFilename (Op->Asl.ParentFilename, FILE_SUFFIX_DISASSEMBLY); CgWriteOneAmlComment(Op, ParentFilename, PARENTFILENAME_COMMENT); } /* Prevent multiple writes of the same comment */ Op->Asl.FileChanged = FALSE; } /* * Regular comments are stored in a list of comments within an Op. * If there is a such list in this node, print out the comment * as byte code. */ Current = Op->Asl.CommentList; if (Op->Asl.ParseOpcode == PARSEOP_INCLUDE) { CommentOption = INCLUDE_COMMENT; } else { CommentOption = STANDARD_COMMENT; } while (Current) { CgWriteOneAmlComment(Op, Current->Comment, CommentOption); Current = Current->Next; } Op->Asl.CommentList = NULL; Current = Op->Asl.EndBlkComment; CommentOption = ENDBLK_COMMENT; while (Current) { CgWriteOneAmlComment(Op, Current->Comment, CommentOption); Current = Current->Next; } Op->Asl.EndBlkComment = NULL; /* Print any Inline comments associated with this node */ if (Op->Asl.InlineComment) { CommentOption = INLINE_COMMENT; CgWriteOneAmlComment(Op, Op->Asl.InlineComment, CommentOption); Op->Asl.InlineComment = NULL; } if (Op->Asl.EndNodeComment) { CommentOption = ENDNODE_COMMENT; CgWriteOneAmlComment(Op, Op->Asl.EndNodeComment, CommentOption); Op->Asl.EndNodeComment = NULL; } if (Op->Asl.CloseBraceComment) { CommentOption = CLOSE_BRACE_COMMENT; CgWriteOneAmlComment(Op, Op->Asl.CloseBraceComment, CommentOption); Op->Asl.CloseBraceComment = NULL; } } /******************************************************************************* * * FUNCTION: CvCommentNodeCalloc * * PARAMETERS: None * * RETURN: Pointer to the comment node. Aborts on allocation failure * * DESCRIPTION: Allocate a string node buffer. * ******************************************************************************/ ACPI_COMMENT_NODE * CvCommentNodeCalloc ( void) { ACPI_COMMENT_NODE *NewCommentNode; NewCommentNode = UtLocalCalloc (sizeof (ACPI_COMMENT_NODE)); NewCommentNode->Next = NULL; return (NewCommentNode); } /******************************************************************************* * * FUNCTION: CvParseOpBlockType * * PARAMETERS: Op - Object to be examined * * RETURN: BlockType - not a block, parens, braces, or even both. * * DESCRIPTION: Type of block for this ASL parseop (parens or braces) * keep this in sync with aslprimaries.y, aslresources.y and * aslrules.y * ******************************************************************************/ UINT32 CvParseOpBlockType ( ACPI_PARSE_OBJECT *Op) { if (!Op) { return (BLOCK_NONE); } switch (Op->Asl.ParseOpcode) { /* From aslprimaries.y */ case PARSEOP_VAR_PACKAGE: case PARSEOP_BANKFIELD: case PARSEOP_BUFFER: case PARSEOP_CASE: case PARSEOP_DEVICE: case PARSEOP_FIELD: case PARSEOP_FOR: case PARSEOP_FUNCTION: case PARSEOP_IF: case PARSEOP_ELSEIF: case PARSEOP_INDEXFIELD: case PARSEOP_METHOD: case PARSEOP_POWERRESOURCE: case PARSEOP_PROCESSOR: case PARSEOP_DATABUFFER: case PARSEOP_SCOPE: case PARSEOP_SWITCH: case PARSEOP_THERMALZONE: case PARSEOP_WHILE: /* From aslresources.y */ case PARSEOP_RESOURCETEMPLATE: /* optional parens */ case PARSEOP_VENDORLONG: case PARSEOP_VENDORSHORT: case PARSEOP_INTERRUPT: case PARSEOP_IRQNOFLAGS: case PARSEOP_IRQ: case PARSEOP_GPIO_INT: case PARSEOP_GPIO_IO: case PARSEOP_DMA: /* From aslrules.y */ case PARSEOP_DEFINITION_BLOCK: return (BLOCK_PAREN | BLOCK_BRACE); default: return (BLOCK_NONE); } } /******************************************************************************* * * FUNCTION: CvProcessCommentState * * PARAMETERS: Input - Input character * * RETURN: None * * DESCRIPTION: Take the given input. If this character is * defined as a comment table entry, then update the state * accordingly. * ******************************************************************************/ void CvProcessCommentState ( char Input) { if (Input != ' ') { AslGbl_CommentState.SpacesBefore = 0; } switch (Input) { case '\n': AslGbl_CommentState.CommentType = ASL_COMMENT_STANDARD; break; case ' ': /* Keep the CommentType the same */ AslGbl_CommentState.SpacesBefore++; break; case '(': AslGbl_CommentState.CommentType = ASL_COMMENT_OPEN_PAREN; break; case ')': AslGbl_CommentState.CommentType = ASL_COMMENT_CLOSE_PAREN; break; case '{': AslGbl_CommentState.CommentType = ASL_COMMENT_STANDARD; AslGbl_CommentState.ParsingParenBraceNode = NULL; CvDbgPrint ("End Parsing paren/Brace node!\n"); break; case '}': AslGbl_CommentState.CommentType = ASL_COMMENT_CLOSE_BRACE; break; case ',': AslGbl_CommentState.CommentType = ASLCOMMENT_INLINE; break; default: AslGbl_CommentState.CommentType = ASLCOMMENT_INLINE; break; } } /******************************************************************************* * * FUNCTION: CvAddToCommentList * * PARAMETERS: ToAdd - Contains the comment to be inserted * * RETURN: None * * DESCRIPTION: Add the given char* to a list of comments in the global list * of comments. * ******************************************************************************/ void CvAddToCommentList ( char *ToAdd) { if (AslGbl_CommentListHead) { AslGbl_CommentListTail->Next = CvCommentNodeCalloc (); AslGbl_CommentListTail = AslGbl_CommentListTail->Next; } else { AslGbl_CommentListHead = CvCommentNodeCalloc (); AslGbl_CommentListTail = AslGbl_CommentListHead; } AslGbl_CommentListTail->Comment = ToAdd; } /******************************************************************************* * * FUNCTION: CvAppendInlineComment * * PARAMETERS: InlineComment - Append to the end of this string. * toAdd - Contains the comment to be inserted * * RETURN: Str - toAdd appended to InlineComment * * DESCRIPTION: Concatenate ToAdd to InlineComment * ******************************************************************************/ char * CvAppendInlineComment ( char *InlineComment, char *ToAdd) { char* Str; UINT32 Size = 0; if (!InlineComment) { return (ToAdd); } if (!ToAdd) { return (InlineComment); } Size = strlen (ToAdd); Size += strlen (InlineComment); Str = UtLocalCacheCalloc (Size + 1); strcpy (Str, InlineComment); strcat (Str, ToAdd); Str[Size +1] = 0; return (Str); } /******************************************************************************* * * FUNCTION: CvPlaceComment * * PARAMETERS: UINT8 - Type * char * - CommentString * * RETURN: None * * DESCRIPTION: Given type and CommentString, this function places the * CommentString in the appropriate global comment list or char* * ******************************************************************************/ void CvPlaceComment( UINT8 Type, char *CommentString) { ACPI_PARSE_OBJECT *LatestParseNode; ACPI_PARSE_OBJECT *ParenBraceNode; LatestParseNode = AslGbl_CommentState.LatestParseOp; ParenBraceNode = AslGbl_CommentState.ParsingParenBraceNode; CvDbgPrint ("Placing comment %s for type %d\n", CommentString, Type); switch (Type) { case ASL_COMMENT_STANDARD: CvAddToCommentList (CommentString); break; case ASLCOMMENT_INLINE: LatestParseNode->Asl.InlineComment = CvAppendInlineComment (LatestParseNode->Asl.InlineComment, CommentString); break; case ASL_COMMENT_OPEN_PAREN: AslGbl_InlineCommentBuffer = CvAppendInlineComment(AslGbl_InlineCommentBuffer, CommentString); break; case ASL_COMMENT_CLOSE_PAREN: if (ParenBraceNode) { ParenBraceNode->Asl.EndNodeComment = CvAppendInlineComment (ParenBraceNode->Asl.EndNodeComment, CommentString); } else { LatestParseNode->Asl.EndNodeComment = CvAppendInlineComment (LatestParseNode->Asl.EndNodeComment, CommentString); } break; case ASL_COMMENT_CLOSE_BRACE: LatestParseNode->Asl.CloseBraceComment = CommentString; break; default: break; } } src/acpica/source/compiler/cvdisasm.c000066400000000000000000000440201465205512700201630ustar00rootroot00000000000000/****************************************************************************** * * Module Name: cvcompiler - ASL-/ASL+ converter functions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "acparser.h" #include "amlcode.h" #include "acdebug.h" #include "acconvert.h" /* Local prototypes */ static void CvPrintInclude( ACPI_FILE_NODE *FNode, UINT32 Level); static BOOLEAN CvListIsSingleton ( ACPI_COMMENT_NODE *CommentList); /******************************************************************************* * * FUNCTION: CvPrintOneCommentList * * PARAMETERS: CommentList * Level * * RETURN: None * * DESCRIPTION: Prints all comments within the given list. * This is referred as ASL_CV_PRINT_ONE_COMMENT_LIST. * ******************************************************************************/ void CvPrintOneCommentList ( ACPI_COMMENT_NODE *CommentList, UINT32 Level) { ACPI_COMMENT_NODE *Current = CommentList; ACPI_COMMENT_NODE *Previous; while (Current) { Previous = Current; if (Current->Comment) { AcpiDmIndent(Level); AcpiOsPrintf("%s\n", Current->Comment); Current->Comment = NULL; } Current = Current->Next; AcpiOsReleaseObject(AcpiGbl_RegCommentCache, Previous); } } /******************************************************************************* * * FUNCTION: CvListIsSingleton * * PARAMETERS: CommentList - check to see if this is a single item list. * * RETURN: BOOLEAN * * DESCRIPTION: Returns TRUE if CommentList only contains 1 node. * ******************************************************************************/ static BOOLEAN CvListIsSingleton ( ACPI_COMMENT_NODE *CommentList) { if (!CommentList) { return (FALSE); } else if (CommentList->Next) { return (FALSE); } return (TRUE); } /******************************************************************************* * * FUNCTION: CvPrintOneCommentType * * PARAMETERS: Op * CommentType * EndStr - String to print after printing the comment * Level - indentation level for comment lists. * * RETURN: None * * DESCRIPTION: Prints all comments of CommentType within the given Op and * clears the printed comment from the Op. * This is referred as ASL_CV_PRINT_ONE_COMMENT. * ******************************************************************************/ void CvPrintOneCommentType ( ACPI_PARSE_OBJECT *Op, UINT8 CommentType, char* EndStr, UINT32 Level) { BOOLEAN CommentExists = FALSE; char **CommentToPrint = NULL; switch (CommentType) { case AML_COMMENT_STANDARD: if (CvListIsSingleton (Op->Common.CommentList)) { CvPrintOneCommentList (Op->Common.CommentList, Level); AcpiOsPrintf ("\n"); } else { CvPrintOneCommentList (Op->Common.CommentList, Level); } Op->Common.CommentList = NULL; return; case AML_COMMENT_ENDBLK: if (Op->Common.EndBlkComment) { CvPrintOneCommentList (Op->Common.EndBlkComment, Level); Op->Common.EndBlkComment = NULL; AcpiDmIndent(Level); } return; case AMLCOMMENT_INLINE: CommentToPrint = &Op->Common.InlineComment; break; case AML_COMMENT_END_NODE: CommentToPrint = &Op->Common.EndNodeComment; break; case AML_NAMECOMMENT: CommentToPrint = &Op->Common.NameComment; break; case AML_COMMENT_CLOSE_BRACE: CommentToPrint = &Op->Common.CloseBraceComment; break; default: return; } if (*CommentToPrint) { CommentExists = TRUE; AcpiOsPrintf ("%s", *CommentToPrint); *CommentToPrint = NULL; } if (CommentExists && EndStr) { AcpiOsPrintf ("%s", EndStr); } } /******************************************************************************* * * FUNCTION: CvCloseBraceWriteComment * * PARAMETERS: Op * Level * * RETURN: None * * DESCRIPTION: Print a close brace } and any open brace comments associated * with this parse object. * This is referred as ASL_CV_CLOSE_BRACE. * ******************************************************************************/ void CvCloseBraceWriteComment( ACPI_PARSE_OBJECT *Op, UINT32 Level) { if (!AcpiGbl_CaptureComments) { AcpiOsPrintf ("}"); return; } CvPrintOneCommentType (Op, AML_COMMENT_ENDBLK, NULL, Level); AcpiOsPrintf ("}"); CvPrintOneCommentType (Op, AML_COMMENT_CLOSE_BRACE, NULL, Level); } /******************************************************************************* * * FUNCTION: CvCloseParenWriteComment * * PARAMETERS: Op * Level * * RETURN: None * * DESCRIPTION: Print a closing paren ) and any end node comments associated * with this parse object. * This is referred as ASL_CV_CLOSE_PAREN. * ******************************************************************************/ void CvCloseParenWriteComment( ACPI_PARSE_OBJECT *Op, UINT32 Level) { if (!AcpiGbl_CaptureComments) { AcpiOsPrintf (")"); return; } /* * If this op has a BLOCK_BRACE, then output the comment when the * disassembler calls CvCloseBraceWriteComment */ if (AcpiDmBlockType (Op) == BLOCK_PAREN) { CvPrintOneCommentType (Op, AML_COMMENT_ENDBLK, NULL, Level); } AcpiOsPrintf (")"); if (Op->Common.EndNodeComment) { CvPrintOneCommentType (Op, AML_COMMENT_END_NODE, NULL, Level); } else if ((Op->Common.Parent->Common.AmlOpcode == AML_IF_OP) && Op->Common.Parent->Common.EndNodeComment) { CvPrintOneCommentType (Op->Common.Parent, AML_COMMENT_END_NODE, NULL, Level); } } /******************************************************************************* * * FUNCTION: CvFileHasSwitched * * PARAMETERS: Op * * RETURN: BOOLEAN * * DESCRIPTION: Determine whether if a file has switched. * TRUE - file has switched. * FALSE - file has not switched. * This is referred as ASL_CV_FILE_HAS_SWITCHED. * ******************************************************************************/ BOOLEAN CvFileHasSwitched( ACPI_PARSE_OBJECT *Op) { if (Op->Common.CvFilename && AcpiGbl_CurrentFilename && AcpiUtStricmp(Op->Common.CvFilename, AcpiGbl_CurrentFilename)) { return (TRUE); } return (FALSE); } /******************************************************************************* * * FUNCTION: CvPrintInclude * * PARAMETERS: FNode - Write an Include statement for the file that is pointed * by FNode->File. * Level - indentation level * * RETURN: None * * DESCRIPTION: Write the ASL Include statement for FNode->File in the file * indicated by FNode->Parent->File. Note this function emits * actual ASL code rather than comments. This switches the output * file to FNode->Parent->File. * ******************************************************************************/ static void CvPrintInclude( ACPI_FILE_NODE *FNode, UINT32 Level) { if (!FNode || FNode->IncludeWritten) { return; } CvDbgPrint ("Writing include for %s within %s\n", FNode->Filename, FNode->Parent->Filename); AcpiOsRedirectOutput (FNode->Parent->File); CvPrintOneCommentList (FNode->IncludeComment, Level); AcpiDmIndent (Level); AcpiOsPrintf ("Include (\"%s\")\n", FNode->Filename); CvDbgPrint ("emitted the following: Include (\"%s\")\n", FNode->Filename); FNode->IncludeWritten = TRUE; } /******************************************************************************* * * FUNCTION: CvSwitchFiles * * PARAMETERS: Level - indentation level * Op * * RETURN: None * * DESCRIPTION: Switch the outputfile and write ASL Include statement. Note, * this function emits actual ASL code rather than comments. * This is referred as ASL_CV_SWITCH_FILES. * ******************************************************************************/ void CvSwitchFiles( UINT32 Level, ACPI_PARSE_OBJECT *Op) { char *Filename = Op->Common.CvFilename; ACPI_FILE_NODE *FNode; ACPI_FILE_NODE *Current; CvDbgPrint ("Switching from %s to %s\n", AcpiGbl_CurrentFilename, Filename); FNode = CvFilenameExists (Filename, AcpiGbl_FileTreeRoot); if (!FNode) { /* * At this point, each Filename should exist in AcpiGbl_FileTreeRoot * if it does not exist, then abort. */ FlDeleteFile (ASL_FILE_AML_OUTPUT); sprintf (AslGbl_MsgBuffer, "\"Cannot find %s\" - %s", Filename, strerror (errno)); AslCommonError (ASL_ERROR, ASL_MSG_OPEN, 0, 0, 0, 0, NULL, AslGbl_MsgBuffer); AslAbort (); } Current = FNode; /* * If the previous file is a descendent of the current file, * make sure that Include statements from the current file * to the previous have been emitted. */ while (Current && Current->Parent && AcpiUtStricmp (Current->Filename, AcpiGbl_CurrentFilename)) { CvPrintInclude (Current, Level); Current = Current->Parent; } if (FNode) { /* Redirect output to Op->Common.CvFilename */ AcpiOsRedirectOutput (FNode->File); AcpiGbl_CurrentFilename = FNode->Filename; } } src/acpica/source/compiler/cvparser.c000066400000000000000000001035411465205512700202030ustar00rootroot00000000000000/****************************************************************************** * * Module Name: cvparser - Converter functions that are called from the AML * parser. * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "acparser.h" #include "acdispat.h" #include "amlcode.h" #include "acinterp.h" #include "acdisasm.h" #include "acconvert.h" /* local prototypes */ static BOOLEAN CvCommentExists ( UINT8 *Address); static BOOLEAN CvIsFilename ( char *Filename); static ACPI_FILE_NODE* CvFileAddressLookup( char *Address, ACPI_FILE_NODE *Head); static void CvAddToFileTree ( char *Filename, char *PreviousFilename); static void CvSetFileParent ( char *ChildFile, char *ParentFile); /******************************************************************************* * * FUNCTION: CvIsFilename * * PARAMETERS: filename - input filename * * RETURN: BOOLEAN - TRUE if all characters are between 0x20 and 0x7f * * DESCRIPTION: Take a given char * and see if it contains all printable * characters. If all characters have hexvalues 20-7f and ends with * .dsl, we will assume that it is a proper filename. * ******************************************************************************/ static BOOLEAN CvIsFilename ( char *Filename) { UINT64 Length = strlen(Filename); char *FileExt = Filename + Length - 4; UINT64 i; if ((Length > 4) && AcpiUtStricmp (FileExt, ".dsl")) { return (FALSE); } for(i = 0; iLength - sizeof (ACPI_TABLE_HEADER); AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER)); CvDbgPrint ("AmlLength: %x\n", AmlLength); CvDbgPrint ("AmlStart: %p\n", AmlStart); CvDbgPrint ("AmlEnd: %p\n", AmlStart+AmlLength); AcpiGbl_FileTreeRoot = AcpiOsAcquireObject (AcpiGbl_FileCache); AcpiGbl_FileTreeRoot->FileStart = (char *)(AmlStart); AcpiGbl_FileTreeRoot->FileEnd = (char *)(AmlStart + Table->Length); AcpiGbl_FileTreeRoot->Next = NULL; AcpiGbl_FileTreeRoot->Parent = NULL; AcpiGbl_FileTreeRoot->Filename = (char *)(AmlStart+2); /* Set the root file to the current open file */ AcpiGbl_FileTreeRoot->File = RootFile; /* * Set this to true because we don't need to output * an include statement for the topmost file */ AcpiGbl_FileTreeRoot->IncludeWritten = TRUE; Filename = NULL; AcpiGbl_CurrentFilename = (char *)(AmlStart+2); AcpiGbl_RootFilename = (char *)(AmlStart+2); TreeAml = AmlStart; FileEnd = AmlStart + AmlLength; while (TreeAml <= FileEnd) { /* * Make sure that this filename contains all printable characters * and a .dsl extension at the end. If not, then it must be some * raw data that doesn't outline a filename. */ if ((*TreeAml == AML_COMMENT_OP) && (*(TreeAml +1) == FILENAME_COMMENT) && (CvIsFilename ((char *)(TreeAml +2)))) { CvDbgPrint ("A9 and a 08 file\n"); PreviousFilename = Filename; Filename = (char *) (TreeAml +2); CvAddToFileTree (Filename, PreviousFilename); ChildFilename = Filename; CvDbgPrint ("%s\n", Filename); } else if ((*TreeAml == AML_COMMENT_OP) && (*(TreeAml +1) == PARENTFILENAME_COMMENT) && (CvIsFilename ((char *)(TreeAml +2)))) { CvDbgPrint ("A9 and a 09 file\n"); ParentFilename = (char *)(TreeAml +2); CvSetFileParent (ChildFilename, ParentFilename); CvDbgPrint ("%s\n", ParentFilename); } ++TreeAml; } } /******************************************************************************* * * FUNCTION: CvClearOpComments * * PARAMETERS: Op -- clear all comments within this Op * * RETURN: None * * DESCRIPTION: Clear all converter-related fields of the given Op. * This is referred as ASL_CV_CLEAR_OP_COMMENTS. * ******************************************************************************/ void CvClearOpComments ( ACPI_PARSE_OBJECT *Op) { Op->Common.InlineComment = NULL; Op->Common.EndNodeComment = NULL; Op->Common.NameComment = NULL; Op->Common.CommentList = NULL; Op->Common.EndBlkComment = NULL; Op->Common.CloseBraceComment = NULL; Op->Common.CvFilename = NULL; Op->Common.CvParentFilename = NULL; } /******************************************************************************* * * FUNCTION: CvCommentExists * * PARAMETERS: Address - check if this address appears in the list * * RETURN: BOOLEAN - TRUE if the address exists. * * DESCRIPTION: Look at the pointer address and check if this appears in the * list of all addresses. If it exists in the list, return TRUE * if it exists. Otherwise add to the list and return FALSE. * ******************************************************************************/ static BOOLEAN CvCommentExists ( UINT8 *Address) { ACPI_COMMENT_ADDR_NODE *Current = AcpiGbl_CommentAddrListHead; UINT8 Option; if (!Address) { return (FALSE); } Option = *(Address + 1); /* * FILENAME_COMMENT and PARENTFILENAME_COMMENT are not treated as * comments. They serve as markers for where the file starts and ends. */ if ((Option == FILENAME_COMMENT) || (Option == PARENTFILENAME_COMMENT)) { return (FALSE); } if (!Current) { AcpiGbl_CommentAddrListHead = AcpiOsAcquireObject (AcpiGbl_RegCommentCache); AcpiGbl_CommentAddrListHead->Addr = Address; AcpiGbl_CommentAddrListHead->Next = NULL; return (FALSE); } else { while (Current) { if (Current->Addr != Address) { Current = Current->Next; } else { return (TRUE); } } /* * If the execution gets to this point, it means that this * address does not exists in the list. Add this address to the * beginning of the list. */ Current = AcpiGbl_CommentAddrListHead; AcpiGbl_CommentAddrListHead = AcpiOsAcquireObject (AcpiGbl_RegCommentCache); AcpiGbl_CommentAddrListHead->Addr = Address; AcpiGbl_CommentAddrListHead->Next = Current; return (FALSE); } } /******************************************************************************* * * FUNCTION: CvFilenameExists * * PARAMETERS: Filename - filename to search * * RETURN: ACPI_FILE_NODE - a pointer to a file node * * DESCRIPTION: Look for the given filename in the file dependency tree. * Returns the file node if it exists, returns NULL if it does not. * ******************************************************************************/ ACPI_FILE_NODE* CvFilenameExists( char *Filename, ACPI_FILE_NODE *Head) { ACPI_FILE_NODE *Current = Head; if (!Filename) { return (NULL); } while (Current) { if (!AcpiUtStricmp (Current->Filename, Filename)) { return (Current); } Current = Current->Next; } return (NULL); } /******************************************************************************* * * FUNCTION: CvFileAddressLookup * * PARAMETERS: Address - address to look up * Head - file dependency tree * * RETURN: ACPI_FILE_NODE - pointer to a file node containing the address * * DESCRIPTION: Look for the given address in the file dependency tree. * Returns the first file node where the given address is within * the file node's starting and ending address. * ******************************************************************************/ static ACPI_FILE_NODE * CvFileAddressLookup( char *Address, ACPI_FILE_NODE *Head) { ACPI_FILE_NODE *Current = Head; while (Current) { if ((Address >= Current->FileStart) && (Address < Current->FileEnd || !Current->FileEnd)) { return (Current); } Current = Current->Next; } return (NULL); } /******************************************************************************* * * FUNCTION: CvLabelFileNode * * PARAMETERS: Op * * RETURN: None * * DESCRIPTION: Takes a given parse op, looks up its Op->Common.Aml field * within the file tree and fills in appropriate file information * from a matching node within the tree. * This is referred as ASL_CV_LABEL_FILENODE. * ******************************************************************************/ void CvLabelFileNode( ACPI_PARSE_OBJECT *Op) { ACPI_FILE_NODE *Node; if (!Op) { return; } Node = CvFileAddressLookup ((char *) Op->Common.Aml, AcpiGbl_FileTreeRoot); if (!Node) { return; } Op->Common.CvFilename = Node->Filename; if (Node->Parent) { Op->Common.CvParentFilename = Node->Parent->Filename; } else { Op->Common.CvParentFilename = Node->Filename; } } /******************************************************************************* * * FUNCTION: CvAddToFileTree * * PARAMETERS: Filename - Address containing the name of the current * filename * PreviousFilename - Address containing the name of the previous * filename * * RETURN: None * * DESCRIPTION: Add this filename to the AcpiGbl_FileTree if it does not exist. * ******************************************************************************/ static void CvAddToFileTree ( char *Filename, char *PreviousFilename) { ACPI_FILE_NODE *Node; if (!AcpiUtStricmp(Filename, AcpiGbl_RootFilename) && PreviousFilename) { Node = CvFilenameExists (PreviousFilename, AcpiGbl_FileTreeRoot); if (Node) { /* * Set the end point of the PreviousFilename to the address * of Filename. */ Node->FileEnd = Filename; } } else if (!AcpiUtStricmp(Filename, AcpiGbl_RootFilename) && !PreviousFilename) { return; } Node = CvFilenameExists (Filename, AcpiGbl_FileTreeRoot); if (Node && PreviousFilename) { /* * Update the end of the previous file and all of their parents' * ending addresses. This is done to ensure that parent file * ranges extend to the end of their childrens' files. */ Node = CvFilenameExists (PreviousFilename, AcpiGbl_FileTreeRoot); if (Node && (Node->FileEnd < Filename)) { Node->FileEnd = Filename; Node = Node->Parent; while (Node) { if (Node->FileEnd < Filename) { Node->FileEnd = Filename; } Node = Node->Parent; } } } else { Node = AcpiGbl_FileTreeRoot; AcpiGbl_FileTreeRoot = AcpiOsAcquireObject (AcpiGbl_FileCache); AcpiGbl_FileTreeRoot->Next = Node; AcpiGbl_FileTreeRoot->Parent = NULL; AcpiGbl_FileTreeRoot->Filename = Filename; AcpiGbl_FileTreeRoot->FileStart = Filename; AcpiGbl_FileTreeRoot->IncludeWritten = FALSE; AcpiGbl_FileTreeRoot->File = fopen(Filename, "w+"); /* * If we can't open the file, we need to abort here before we * accidentally write to a NULL file. */ if (!AcpiGbl_FileTreeRoot->File) { /* delete the .xxx file */ FlDeleteFile (ASL_FILE_AML_OUTPUT); sprintf (AslGbl_MsgBuffer, "\"%s\" - %s", Filename, strerror (errno)); AslCommonError (ASL_ERROR, ASL_MSG_OPEN, 0, 0, 0, 0, NULL, AslGbl_MsgBuffer); AslAbort (); } } } /******************************************************************************* * * FUNCTION: CvSetFileParent * * PARAMETERS: ChildFile - contains the filename of the child file * ParentFile - contains the filename of the parent file. * * RETURN: None * * DESCRIPTION: Point the parent pointer of the Child to the node that * corresponds with the parent file node. * ******************************************************************************/ static void CvSetFileParent ( char *ChildFile, char *ParentFile) { ACPI_FILE_NODE *Child; ACPI_FILE_NODE *Parent; Child = CvFilenameExists (ChildFile, AcpiGbl_FileTreeRoot); Parent = CvFilenameExists (ParentFile, AcpiGbl_FileTreeRoot); if (Child && Parent) { Child->Parent = Parent; while (Child->Parent) { if (Child->Parent->FileEnd < Child->FileStart) { Child->Parent->FileEnd = Child->FileStart; } Child = Child->Parent; } } } /******************************************************************************* * * FUNCTION: CvCaptureCommentsOnly * * PARAMETERS: ParserState - A parser state object * * RETURN: None * * DESCRIPTION: Look at the aml that the parser state is pointing to, * capture any AML_COMMENT_OP and it's arguments and increment the * aml pointer past the comment. Comments are transferred to parse * nodes through CvTransferComments() as well as * AcpiPsBuildNamedOp(). * This is referred as ASL_CV_CAPTURE_COMMENTS_ONLY. * ******************************************************************************/ void CvCaptureCommentsOnly ( ACPI_PARSE_STATE *ParserState) { UINT8 *Aml = ParserState->Aml; UINT16 Opcode = (UINT16) ACPI_GET8 (Aml); UINT32 Length = 0; UINT8 CommentOption; BOOLEAN StdDefBlockFlag = FALSE; ACPI_COMMENT_NODE *CommentNode; ACPI_FILE_NODE *FileNode; if (!AcpiGbl_CaptureComments || Opcode != AML_COMMENT_OP) { return; } while (Opcode == AML_COMMENT_OP) { CvDbgPrint ("comment aml address: %p\n", Aml); if (CvCommentExists(ParserState->Aml)) { CvDbgPrint ("Avoiding capturing an existing comment.\n"); } else { CommentOption = *(Aml +1); /* * Increment past the comment option and point the * appropriate char pointers */ Aml += 2; /* Found a comment. Now, set pointers to these comments. */ switch (CommentOption) { case STD_DEFBLK_COMMENT: StdDefBlockFlag = TRUE; /* * Add to a linked list of nodes. This list will be * taken by the parse node created next. */ CommentNode = AcpiOsAcquireObject ( AcpiGbl_RegCommentCache); CommentNode->Comment = ACPI_CAST_PTR (char, Aml); CommentNode->Next = NULL; if (!AcpiGbl_DefBlkCommentListHead) { AcpiGbl_DefBlkCommentListHead = CommentNode; AcpiGbl_DefBlkCommentListTail = CommentNode; } else { AcpiGbl_DefBlkCommentListTail->Next = CommentNode; AcpiGbl_DefBlkCommentListTail = AcpiGbl_DefBlkCommentListTail->Next; } break; case STANDARD_COMMENT: CvDbgPrint ("found regular comment.\n"); /* * Add to a linked list of nodes. This list will be * taken by the parse node created next. */ CommentNode = AcpiOsAcquireObject ( AcpiGbl_RegCommentCache); CommentNode->Comment = ACPI_CAST_PTR (char, Aml); CommentNode->Next = NULL; if (!AcpiGbl_RegCommentListHead) { AcpiGbl_RegCommentListHead = CommentNode; AcpiGbl_RegCommentListTail = CommentNode; } else { AcpiGbl_RegCommentListTail->Next = CommentNode; AcpiGbl_RegCommentListTail = AcpiGbl_RegCommentListTail->Next; } break; case ENDBLK_COMMENT: CvDbgPrint ("found endblk comment.\n"); /* Add to a linked list of nodes. This will be * taken by the next created parse node. */ CommentNode = AcpiOsAcquireObject ( AcpiGbl_RegCommentCache); CommentNode->Comment = ACPI_CAST_PTR (char, Aml); CommentNode->Next = NULL; if (!AcpiGbl_EndBlkCommentListHead) { AcpiGbl_EndBlkCommentListHead = CommentNode; AcpiGbl_EndBlkCommentListTail = CommentNode; } else { AcpiGbl_EndBlkCommentListTail->Next = CommentNode; AcpiGbl_EndBlkCommentListTail = AcpiGbl_EndBlkCommentListTail->Next; } break; case INLINE_COMMENT: CvDbgPrint ("found inline comment.\n"); AcpiGbl_CurrentInlineComment = ACPI_CAST_PTR (char, Aml); break; case ENDNODE_COMMENT: CvDbgPrint ("found EndNode comment.\n"); AcpiGbl_CurrentEndNodeComment = ACPI_CAST_PTR (char, Aml); break; case CLOSE_BRACE_COMMENT: CvDbgPrint ("found close brace comment.\n"); AcpiGbl_CurrentCloseBraceComment = ACPI_CAST_PTR (char, Aml); break; case END_DEFBLK_COMMENT: CvDbgPrint ("Found comment that belongs after" " the } for a definition block.\n"); AcpiGbl_CurrentScope->Common.CloseBraceComment = ACPI_CAST_PTR (char, Aml); break; case FILENAME_COMMENT: CvDbgPrint ("Found a filename: %s\n", ACPI_CAST_PTR (char, Aml)); FileNode = CvFilenameExists ( ACPI_CAST_PTR (char, Aml), AcpiGbl_FileTreeRoot); /* * If there is an INCLUDE_COMMENT followed by a * FILENAME_COMMENT, then the INCLUDE_COMMENT is a comment * that is emitted before the #include for the file. * We will save the IncludeComment within the FileNode * associated with this FILENAME_COMMENT. */ if (FileNode && AcpiGbl_IncCommentListHead) { FileNode->IncludeComment = AcpiGbl_IncCommentListHead; AcpiGbl_IncCommentListHead = NULL; AcpiGbl_IncCommentListTail = NULL; } break; case PARENTFILENAME_COMMENT: CvDbgPrint (" Found a parent filename.\n"); break; case INCLUDE_COMMENT: /* * Add to a linked list. This list will be taken by the * parse node created next. See the FILENAME_COMMENT case * for more details */ CommentNode = AcpiOsAcquireObject ( AcpiGbl_RegCommentCache); CommentNode->Comment = ACPI_CAST_PTR (char, Aml); CommentNode->Next = NULL; if (!AcpiGbl_IncCommentListHead) { AcpiGbl_IncCommentListHead = CommentNode; AcpiGbl_IncCommentListTail = CommentNode; } else { AcpiGbl_IncCommentListTail->Next = CommentNode; AcpiGbl_IncCommentListTail = AcpiGbl_IncCommentListTail->Next; } CvDbgPrint ("Found a include comment: %s\n", CommentNode->Comment); break; default: /* Not a valid comment option. Revert the AML */ goto DefBlock; } /* End switch statement */ } /* End else */ /* Determine the length and move forward that amount */ Length = 0; while (ParserState->Aml[Length]) { Length++; } ParserState->Aml += Length + 1; /* Peek at the next Opcode. */ Aml = ParserState->Aml; Opcode = (UINT16) ACPI_GET8 (Aml); } DefBlock: if (StdDefBlockFlag) { /* * Give all of its comments to the current scope, which is known as * the definition block, since STD_DEFBLK_COMMENT only appears after * definition block headers. */ AcpiGbl_CurrentScope->Common.CommentList = AcpiGbl_DefBlkCommentListHead; AcpiGbl_DefBlkCommentListHead = NULL; AcpiGbl_DefBlkCommentListTail = NULL; } } /******************************************************************************* * * FUNCTION: CvCaptureComments * * PARAMETERS: ParserState - A parser state object * * RETURN: None * * DESCRIPTION: Wrapper function for CvCaptureCommentsOnly * This is referred as ASL_CV_CAPTURE_COMMENTS. * ******************************************************************************/ void CvCaptureComments ( ACPI_WALK_STATE *WalkState) { UINT8 *Aml; UINT16 Opcode; const ACPI_OPCODE_INFO *OpInfo; if (!AcpiGbl_CaptureComments) { return; } /* * Before parsing, check to see that comments that come directly * after deferred opcodes aren't being processed. */ Aml = WalkState->ParserState.Aml; Opcode = (UINT16) ACPI_GET8 (Aml); OpInfo = AcpiPsGetOpcodeInfo (Opcode); if (!(OpInfo->Flags & AML_DEFER) || ((OpInfo->Flags & AML_DEFER) && (WalkState->PassNumber != ACPI_IMODE_LOAD_PASS1))) { CvCaptureCommentsOnly (&WalkState->ParserState); WalkState->Aml = WalkState->ParserState.Aml; } } /******************************************************************************* * * FUNCTION: CvTransferComments * * PARAMETERS: Op - Transfer comments to this Op * * RETURN: None * * DESCRIPTION: Transfer all of the comments stored in global containers to the * given Op. This will be invoked shortly after the parser creates * a ParseOp. * This is referred as ASL_CV_TRANSFER_COMMENTS. * ******************************************************************************/ void CvTransferComments ( ACPI_PARSE_OBJECT *Op) { Op->Common.InlineComment = AcpiGbl_CurrentInlineComment; AcpiGbl_CurrentInlineComment = NULL; Op->Common.EndNodeComment = AcpiGbl_CurrentEndNodeComment; AcpiGbl_CurrentEndNodeComment = NULL; Op->Common.CloseBraceComment = AcpiGbl_CurrentCloseBraceComment; AcpiGbl_CurrentCloseBraceComment = NULL; Op->Common.CommentList = AcpiGbl_RegCommentListHead; AcpiGbl_RegCommentListHead = NULL; AcpiGbl_RegCommentListTail = NULL; Op->Common.EndBlkComment = AcpiGbl_EndBlkCommentListHead; AcpiGbl_EndBlkCommentListHead = NULL; AcpiGbl_EndBlkCommentListTail = NULL; } src/acpica/source/compiler/dtcompile.c000066400000000000000000000671041465205512700203420ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dtcompile.c - Front-end for data table compiler * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define _DECLARE_DT_GLOBALS #include "aslcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtcompile") static char VersionString[9]; /* Local prototypes */ void DtInitialize ( void); static ACPI_STATUS DtCompileDataTable ( DT_FIELD **Field); static void DtInsertCompilerIds ( DT_FIELD *FieldList); /****************************************************************************** * * FUNCTION: DtDoCompile * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Main entry point for the data table compiler. * * Note: Assumes AslGbl_Files[ASL_FILE_INPUT] is initialized and the file is * open at seek offset zero. * *****************************************************************************/ ACPI_STATUS DtDoCompile ( void) { ACPI_STATUS Status; UINT8 Event; DT_FIELD *FieldList; ASL_GLOBAL_FILE_NODE *FileNode; /* Initialize globals */ DtInitialize (); /* Preprocessor */ if (AslGbl_PreprocessFlag) { /* Preprocessor */ Event = UtBeginEvent ("Preprocess input file"); PrDoPreprocess (); UtEndEvent (Event); if (AslGbl_PreprocessOnly) { return (AE_OK); } } /* Compile the parse tree */ if (AslGbl_DtLexBisonPrototype) { Event = UtBeginEvent ("Parse data table in prototype mode"); DtCompilerInitLexer (AslGbl_Files[ASL_FILE_INPUT].Handle); DtCompilerParserparse (); FieldList = AslGbl_FieldList; DtCompilerTerminateLexer (); UtEndEvent (Event); } else { /* * Scan the input file (file is already open) and * build the parse tree */ Event = UtBeginEvent ("Scan and parse input file"); FieldList = DtScanFile (AslGbl_Files[ASL_FILE_INPUT].Handle); UtEndEvent (Event); } /* Did the parse tree get successfully constructed? */ if (!FieldList) { /* TBD: temporary error message. Msgs should come from function above */ DtError (ASL_ERROR, ASL_MSG_SYNTAX, NULL, "Input file does not appear to be an ASL or data table source file"); return (AE_ERROR); } Event = UtBeginEvent ("Compile parse tree"); Status = DtCompileDataTable (&FieldList); UtEndEvent (Event); FileNode = FlGetCurrentFileNode (); FileNode->TotalLineCount = AslGbl_CurrentLineNumber; FileNode->OriginalInputFileSize = AslGbl_InputByteCount; DbgPrint (ASL_PARSE_OUTPUT, "Line count: %u input file size: %u\n", FileNode->TotalLineCount, FileNode->OriginalInputFileSize); if (ACPI_FAILURE (Status)) { FileNode->ParserErrorDetected = TRUE; /* TBD: temporary error message. Msgs should come from function above */ DtError (ASL_ERROR, ASL_MSG_SYNTAX, NULL, "Could not compile input file"); return (Status); } /* Create/open the binary output file */ AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename = NULL; Status = FlOpenAmlOutputFile (AslGbl_OutputFilenamePrefix); if (ACPI_FAILURE (Status)) { return (Status); } /* Write the binary, then the optional hex file */ DtOutputBinary (AslGbl_RootTable); HxDoHexOutput (); DtWriteTableToListing (); /* Save the compile time statistics to the current file node */ FileNode->TotalFields = AslGbl_InputFieldCount; FileNode->OutputByteLength = AslGbl_TableLength; return (Status); } /****************************************************************************** * * FUNCTION: DtInitialize * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Initialize data table compiler globals. Enables multiple * compiles per invocation. * *****************************************************************************/ void DtInitialize ( void) { AcpiUtSetIntegerWidth (2); /* Set width to 64 bits */ AslGbl_FieldList = NULL; AslGbl_RootTable = NULL; AslGbl_SubtableStack = NULL; sprintf (VersionString, "%X", (UINT32) ACPI_CA_VERSION); return; } /****************************************************************************** * * FUNCTION: DtInsertCompilerIds * * PARAMETERS: FieldList - Current field list pointer * * RETURN: None * * DESCRIPTION: Insert the IDs (Name, Version) of the current compiler into * the original ACPI table header. * *****************************************************************************/ static void DtInsertCompilerIds ( DT_FIELD *FieldList) { DT_FIELD *Next; UINT32 i; /* * Don't insert current compiler ID if requested. Used for compiler * debug/validation only. */ if (AslGbl_UseOriginalCompilerId) { return; } /* Walk to the Compiler fields at the end of the header */ Next = FieldList; for (i = 0; i < 7; i++) { Next = Next->Next; } Next->Value = ASL_CREATOR_ID; Next->Flags = DT_FIELD_NOT_ALLOCATED; Next = Next->Next; Next->Value = VersionString; Next->Flags = DT_FIELD_NOT_ALLOCATED; } /****************************************************************************** * * FUNCTION: DtCompileDataTable * * PARAMETERS: FieldList - Current field list pointer * * RETURN: Status * * DESCRIPTION: Entry point to compile one data table * *****************************************************************************/ static ACPI_STATUS DtCompileDataTable ( DT_FIELD **FieldList) { const ACPI_DMTABLE_DATA *TableData; DT_SUBTABLE *Subtable; char *Signature; ACPI_TABLE_HEADER *AcpiTableHeader; ACPI_STATUS Status; DT_FIELD *RootField = *FieldList; /* Verify that we at least have a table signature and save it */ Signature = DtGetFieldValue (*FieldList); if (!Signature) { sprintf (AslGbl_MsgBuffer, "Expected \"%s\"", "Signature"); DtNameError (ASL_ERROR, ASL_MSG_INVALID_FIELD_NAME, *FieldList, AslGbl_MsgBuffer); return (AE_ERROR); } AslGbl_Signature = UtLocalCacheCalloc (strlen (Signature) + 1); strcpy (AslGbl_Signature, Signature); /* * Handle tables that don't use the common ACPI table header structure. * Currently, these are the FACS and RSDP. Also check for an OEMx table, * these tables have user-defined contents. */ if (ACPI_COMPARE_NAMESEG (Signature, ACPI_SIG_FACS)) { Status = DtCompileFacs (FieldList); if (ACPI_FAILURE (Status)) { return (Status); } DtSetTableLength (); return (Status); } else if (ACPI_VALIDATE_RSDP_SIG (Signature)) { Status = DtCompileRsdp (FieldList); return (Status); } else if (ACPI_COMPARE_NAMESEG (Signature, ACPI_SIG_S3PT)) { Status = DtCompileS3pt (FieldList); if (ACPI_FAILURE (Status)) { return (Status); } DtSetTableLength (); return (Status); } /* * If the first field is named "CDAT Table Length" (not "Signature"), * assume that we have a CDAT table (whose table header does not have * a signature). Instead, the TableLength field is where the * signature would (normally) be. */ else if (!strcmp ((*FieldList)->Name, "CDAT Table Length")) { /* No longer true: (However, use this technique in the disassembler) * We are assuming that there * should be at least one non-ASCII byte in the 4-character * Signature field, (At least the high-order byte should be zero). */ Status = DtCompileTable (FieldList, AcpiDmTableInfoCdatTableHdr, &AslGbl_RootTable); if (ACPI_FAILURE (Status)) { return (Status); } /* Compile the CDAT */ DtPushSubtable (AslGbl_RootTable); Status = DtCompileCdat ((void **) FieldList); if (ACPI_FAILURE (Status)) { return (Status); } /* * Set the overall table length and the table checksum. * The entire compiled table (including the CDAT table header with * the table length and checksum) is in AslGbl_RootTable->Buffer. */ DtSetTableLength (); DtSetTableChecksum (&ACPI_CAST_PTR (ACPI_TABLE_CDAT, AslGbl_RootTable->Buffer)->Checksum); DtDumpFieldList (RootField); DtDumpSubtableList (); return (AE_OK); } /* * All other tables must use the common ACPI table header. Insert the * current iASL IDs (name, version), and compile the header now. */ DtInsertCompilerIds (*FieldList); Status = DtCompileTable (FieldList, AcpiDmTableInfoHeader, &AslGbl_RootTable); if (ACPI_FAILURE (Status)) { return (Status); } DtPushSubtable (AslGbl_RootTable); /* Validate the signature via the ACPI table list */ TableData = AcpiDmGetTableData (Signature); if (!TableData || AslGbl_CompileGeneric) { /* Unknown table signature and/or force generic compile */ DtCompileGeneric ((void **) FieldList, NULL, NULL); goto FinishHeader; } /* Dispatch to per-table compile */ if (TableData->CmTableHandler) { /* Complex table, has a handler */ Status = TableData->CmTableHandler ((void **) FieldList); if (ACPI_FAILURE (Status)) { return (Status); } } else if (TableData->TableInfo) { /* Simple table, just walk the info table, unless its empty */ if (FieldList && *FieldList) { Subtable = NULL; Status = DtCompileTable (FieldList, TableData->TableInfo, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (AslGbl_RootTable, Subtable); DtPopSubtable (); } } else { DtFatal (ASL_MSG_COMPILER_INTERNAL, *FieldList, "Missing table dispatch info"); return (AE_ERROR); } FinishHeader: /* Set the final table length and then the checksum */ DtSetTableLength (); AcpiTableHeader = ACPI_CAST_PTR ( ACPI_TABLE_HEADER, AslGbl_RootTable->Buffer); DtSetTableChecksum (&AcpiTableHeader->Checksum); DtDumpFieldList (RootField); DtDumpSubtableList (); return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileTable * * PARAMETERS: Field - Current field list pointer * Info - Info table for this ACPI table * RetSubtable - Compile result of table * * RETURN: Status * * DESCRIPTION: Compile a subtable * *****************************************************************************/ ACPI_STATUS DtCompileTable ( DT_FIELD **Field, ACPI_DMTABLE_INFO *Info, DT_SUBTABLE **RetSubtable) { DT_FIELD *LocalField; UINT32 Length; DT_SUBTABLE *Subtable; DT_SUBTABLE *InlineSubtable = NULL; UINT32 FieldLength = 0; UINT8 FieldType; UINT8 *Buffer; UINT8 *FlagBuffer = NULL; char *String; UINT32 CurrentFlagByteOffset = 0; ACPI_STATUS Status = AE_OK; if (!Field || !Info) { return (AE_BAD_PARAMETER); } if (!*Field) { /* * The field list is empty, this means that we are out of fields to * parse. In other words, we are at the end of the table. */ return (AE_END_OF_TABLE); } /* Ignore optional subtable if name does not match */ if ((Info->Flags & DT_OPTIONAL) && strcmp ((*Field)->Name, Info->Name)) { *RetSubtable = NULL; return (AE_OK); } Length = DtGetSubtableLength (*Field, Info); if (Length == ASL_EOF) { return (AE_ERROR); } Subtable = UtSubtableCacheCalloc (); if (Length > 0) { String = UtLocalCacheCalloc (Length); Subtable->Buffer = ACPI_CAST_PTR (UINT8, String); } Subtable->Length = Length; Subtable->TotalLength = Length; Buffer = Subtable->Buffer; LocalField = *Field; Subtable->Name = LocalField->Name; /* * Main loop walks the info table for this ACPI table or subtable */ for (; Info->Name; Info++) { if (Info->Opcode == ACPI_DMT_EXTRA_TEXT) { continue; } if (!LocalField) { sprintf (AslGbl_MsgBuffer, "Found NULL field - Field name \"%s\" needed", Info->Name); DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, AslGbl_MsgBuffer); Status = AE_BAD_DATA; goto Error; } /* Maintain table offsets */ LocalField->TableOffset = AslGbl_CurrentTableOffset; FieldLength = DtGetFieldLength (LocalField, Info); AslGbl_CurrentTableOffset += FieldLength; FieldType = DtGetFieldType (Info); AslGbl_InputFieldCount++; if (FieldType != DT_FIELD_TYPE_INLINE_SUBTABLE && strcmp (Info->Name, LocalField->Name)) { sprintf (AslGbl_MsgBuffer, "found \"%s\" expected \"%s\"", LocalField->Name, Info->Name); DtError (ASL_ERROR, ASL_MSG_INVALID_LABEL, LocalField, AslGbl_MsgBuffer); } switch (FieldType) { case DT_FIELD_TYPE_FLAGS_INTEGER: /* * Start of the definition of a flags field. * This master flags integer starts at value zero, in preparation * to compile and insert the flag fields from the individual bits */ LocalField = LocalField->Next; *Field = LocalField; FlagBuffer = Buffer; CurrentFlagByteOffset = Info->Offset; break; case DT_FIELD_TYPE_FLAG: /* Individual Flag field, can be multiple bits */ if (FlagBuffer) { /* * We must increment the FlagBuffer when we have crossed * into the next flags byte within the flags field * of type DT_FIELD_TYPE_FLAGS_INTEGER. */ FlagBuffer += (Info->Offset - CurrentFlagByteOffset); CurrentFlagByteOffset = Info->Offset; DtCompileFlag (FlagBuffer, LocalField, Info); } else { /* TBD - this is an internal error */ } LocalField = LocalField->Next; *Field = LocalField; break; case DT_FIELD_TYPE_INLINE_SUBTABLE: /* * Recursion (one level max): compile GAS (Generic Address) * or Notify in-line subtable */ *Field = LocalField; switch (Info->Opcode) { case ACPI_DMT_GAS: Status = DtCompileTable (Field, AcpiDmTableInfoGas, &InlineSubtable); break; case ACPI_DMT_HESTNTFY: Status = DtCompileTable (Field, AcpiDmTableInfoHestNotify, &InlineSubtable); break; case ACPI_DMT_IORTMEM: Status = DtCompileTable (Field, AcpiDmTableInfoIortAcc, &InlineSubtable); break; default: sprintf (AslGbl_MsgBuffer, "Invalid DMT opcode: 0x%.2X", Info->Opcode); DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, AslGbl_MsgBuffer); Status = AE_BAD_DATA; break; } if (ACPI_FAILURE (Status)) { goto Error; } DtSetSubtableLength (InlineSubtable); memcpy (Buffer, InlineSubtable->Buffer, FieldLength); LocalField = *Field; break; case DT_FIELD_TYPE_LABEL: DtWriteFieldToListing (Buffer, LocalField, 0); LocalField = LocalField->Next; break; default: /* Normal case for most field types (Integer, String, etc.) */ DtCompileOneField (Buffer, LocalField, FieldLength, FieldType, Info->Flags); DtWriteFieldToListing (Buffer, LocalField, FieldLength); LocalField = LocalField->Next; if (Info->Flags & DT_LENGTH) { /* Field is an Integer that will contain a subtable length */ Subtable->LengthField = Buffer; Subtable->SizeOfLengthField = FieldLength; } break; } Buffer += FieldLength; } *Field = LocalField; *RetSubtable = Subtable; return (AE_OK); Error: ACPI_FREE (Subtable->Buffer); ACPI_FREE (Subtable); return (Status); } /****************************************************************************** * * FUNCTION: DtCompileTwoSubtables * * PARAMETERS: List - Current field list pointer * TableInfo1 - Info table 1 * TableInfo1 - Info table 2 * * RETURN: Status * * DESCRIPTION: Compile tables with a header and one or more same subtables. * Include CPEP, EINJ, ERST, MCFG, MSCT, WDAT * *****************************************************************************/ ACPI_STATUS DtCompileTwoSubtables ( void **List, ACPI_DMTABLE_INFO *TableInfo1, ACPI_DMTABLE_INFO *TableInfo2) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; Status = DtCompileTable (PFieldList, TableInfo1, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); while (*PFieldList) { Status = DtCompileTable (PFieldList, TableInfo2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompilePadding * * PARAMETERS: Length - Padding field size * RetSubtable - Compile result of table * * RETURN: Status * * DESCRIPTION: Compile a subtable for padding purpose * *****************************************************************************/ ACPI_STATUS DtCompilePadding ( UINT32 Length, DT_SUBTABLE **RetSubtable) { DT_SUBTABLE *Subtable; /* UINT8 *Buffer; */ char *String; Subtable = UtSubtableCacheCalloc (); if (Length > 0) { String = UtLocalCacheCalloc (Length); Subtable->Buffer = ACPI_CAST_PTR (UINT8, String); } Subtable->Length = Length; Subtable->TotalLength = Length; /* Buffer = Subtable->Buffer; */ *RetSubtable = Subtable; return (AE_OK); } src/acpica/source/compiler/dtcompiler.h000066400000000000000000000606671465205512700205400ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dtcompiler.h - header for data table compiler * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define __DTCOMPILER_H__ #ifndef _DTCOMPILER #define _DTCOMPILER #include "acdisasm.h" #define ASL_FIELD_CACHE_SIZE 512 #define ASL_SUBTABLE_CACHE_SIZE 128 #undef DT_EXTERN #ifdef _DECLARE_DT_GLOBALS #define DT_EXTERN #define DT_INIT_GLOBAL(a,b) (a)=(b) #else #define DT_EXTERN extern #define DT_INIT_GLOBAL(a,b) (a) #endif /* Types for individual fields (one per input line) */ #define DT_FIELD_TYPE_STRING 0 #define DT_FIELD_TYPE_INTEGER 1 #define DT_FIELD_TYPE_BUFFER 2 #define DT_FIELD_TYPE_PCI_PATH 3 #define DT_FIELD_TYPE_FLAG 4 #define DT_FIELD_TYPE_FLAGS_INTEGER 5 #define DT_FIELD_TYPE_INLINE_SUBTABLE 6 #define DT_FIELD_TYPE_UUID 7 #define DT_FIELD_TYPE_UNICODE 8 #define DT_FIELD_TYPE_DEVICE_PATH 9 #define DT_FIELD_TYPE_LABEL 10 /* * Structure used for each individual field within an ACPI table */ typedef struct dt_field { char *Name; /* Field name (from name : value) */ char *Value; /* Field value (from name : value) */ UINT32 StringLength; /* Length of Value */ struct dt_field *Next; /* Next field */ struct dt_field *NextLabel; /* If field is a label, next label */ UINT32 Line; /* Line number for this field */ UINT32 ByteOffset; /* Offset in source file for field */ UINT32 NameColumn; /* Start column for field name */ UINT32 Column; /* Start column for field value */ UINT32 TableOffset; /* Binary offset within ACPI table */ UINT8 Flags; } DT_FIELD; /* Flags for above */ #define DT_FIELD_NOT_ALLOCATED 1 /* * Structure used for each individual key or value */ typedef struct dt_table_unit { char *Value; /* Field value (from name : value) */ UINT32 Line; /* Line number for this field */ UINT32 Column; /* Start column for field value */ } DT_TABLE_UNIT; /* * Structure used for individual subtables within an ACPI table */ typedef struct dt_subtable { struct dt_subtable *Parent; struct dt_subtable *Child; struct dt_subtable *Peer; struct dt_subtable *StackTop; UINT8 *Buffer; UINT8 *LengthField; char *Name; UINT32 Length; UINT32 TotalLength; UINT32 SizeOfLengthField; UINT16 Depth; UINT8 Flags; } DT_SUBTABLE; /* * Globals */ /* List of all field names and values from the input source */ DT_EXTERN DT_FIELD DT_INIT_GLOBAL (*AslGbl_FieldList, NULL); /* List of all compiled tables and subtables */ DT_EXTERN DT_SUBTABLE DT_INIT_GLOBAL (*AslGbl_RootTable, NULL); /* Stack for subtables */ DT_EXTERN DT_SUBTABLE DT_INIT_GLOBAL (*AslGbl_SubtableStack, NULL); /* List for defined labels */ DT_EXTERN DT_FIELD DT_INIT_GLOBAL (*AslGbl_LabelList, NULL); /* Current offset within the binary output table */ DT_EXTERN UINT32 DT_INIT_GLOBAL (AslGbl_CurrentTableOffset, 0); /* Data table compiler Flex/Bison prototype */ DT_EXTERN BOOLEAN DT_INIT_GLOBAL (AslGbl_DtLexBisonPrototype, FALSE); /* Local caches */ DT_EXTERN UINT32 DT_INIT_GLOBAL (AslGbl_SubtableCount, 0); DT_EXTERN ASL_CACHE_INFO DT_INIT_GLOBAL (*AslGbl_SubtableCacheList, NULL); DT_EXTERN DT_SUBTABLE DT_INIT_GLOBAL (*AslGbl_SubtableCacheNext, NULL); DT_EXTERN DT_SUBTABLE DT_INIT_GLOBAL (*AslGbl_SubtableCacheLast, NULL); DT_EXTERN UINT32 DT_INIT_GLOBAL (AslGbl_FieldCount, 0); DT_EXTERN ASL_CACHE_INFO DT_INIT_GLOBAL (*AslGbl_FieldCacheList, NULL); DT_EXTERN DT_FIELD DT_INIT_GLOBAL (*AslGbl_FieldCacheNext, NULL); DT_EXTERN DT_FIELD DT_INIT_GLOBAL (*AslGbl_FieldCacheLast, NULL); /* dtcompiler - main module */ ACPI_STATUS DtCompileTable ( DT_FIELD **Field, ACPI_DMTABLE_INFO *Info, DT_SUBTABLE **RetSubtable); ACPI_STATUS DtCompileTwoSubtables ( void **List, ACPI_DMTABLE_INFO *TableInfo1, ACPI_DMTABLE_INFO *TableInfo2); ACPI_STATUS DtCompilePadding ( UINT32 Length, DT_SUBTABLE **RetSubtable); /* dtio - binary and text input/output */ UINT32 DtGetNextLine ( FILE *Handle, UINT32 Flags); /* Flags for DtGetNextLine */ #define DT_ALLOW_MULTILINE_QUOTES 0x01 DT_FIELD * DtScanFile ( FILE *Handle); void DtOutputBinary ( DT_SUBTABLE *RootTable); void DtDumpSubtableList ( void); void DtDumpFieldList ( DT_FIELD *Field); void DtWriteFieldToListing ( UINT8 *Buffer, DT_FIELD *Field, UINT32 Length); void DtWriteTableToListing ( void); /* dtsubtable - compile subtables */ void DtCreateSubtable ( UINT8 *Buffer, UINT32 Length, DT_SUBTABLE **RetSubtable); UINT32 DtGetSubtableLength ( DT_FIELD *Field, ACPI_DMTABLE_INFO *Info); void DtSetSubtableLength ( DT_SUBTABLE *Subtable); void DtPushSubtable ( DT_SUBTABLE *Subtable); void DtPopSubtable ( void); DT_SUBTABLE * DtPeekSubtable ( void); void DtInsertSubtable ( DT_SUBTABLE *ParentTable, DT_SUBTABLE *Subtable); DT_SUBTABLE * DtGetNextSubtable ( DT_SUBTABLE *ParentTable, DT_SUBTABLE *ChildTable); DT_SUBTABLE * DtGetParentSubtable ( DT_SUBTABLE *Subtable); /* dtexpress - Integer expressions and labels */ ACPI_STATUS DtResolveIntegerExpression ( DT_FIELD *Field, UINT64 *ReturnValue); UINT64 DtDoOperator ( UINT64 LeftValue, UINT32 Operator, UINT64 RightValue); UINT64 DtResolveLabel ( char *LabelString); void DtDetectAllLabels ( DT_FIELD *FieldList); /* dtfield - Compile individual fields within a table */ void DtCompileOneField ( UINT8 *Buffer, DT_FIELD *Field, UINT32 ByteLength, UINT8 Type, UINT8 Flags); void DtCompileInteger ( UINT8 *Buffer, DT_FIELD *Field, UINT32 ByteLength, UINT8 Flags); UINT32 DtCompileBuffer ( UINT8 *Buffer, char *Value, DT_FIELD *Field, UINT32 ByteLength); void DtCompileFlag ( UINT8 *Buffer, DT_FIELD *Field, ACPI_DMTABLE_INFO *Info); /* dtfield - DT_FIELD operations */ void DtLinkField ( DT_FIELD *Field); void DtCreateField ( DT_TABLE_UNIT *FieldKey, DT_TABLE_UNIT *FieldValue, UINT32 Offset); DT_TABLE_UNIT * DtCreateTableUnit ( char *Data, UINT32 Line, UINT32 Column); /* dtparser - lex/yacc files */ int DtCompilerParserparse ( void); UINT64 DtEvaluateExpression ( char *ExprString); void DtCompilerInitLexer ( FILE *inFile); void DtCompilerTerminateLexer ( void); int DtInitLexer ( char *String); void DtTerminateLexer ( void); char * DtGetOpName ( UINT32 ParseOpcode); /* dtutils - Miscellaneous utilities */ typedef void (*DT_WALK_CALLBACK) ( DT_SUBTABLE *Subtable, void *Context, void *ReturnValue); void DtWalkTableTree ( DT_SUBTABLE *StartTable, DT_WALK_CALLBACK UserFunction, void *Context, void *ReturnValue); void DtError ( UINT8 Level, UINT16 MessageId, DT_FIELD *FieldObject, char *ExtraMessage); void DtNameError ( UINT8 Level, UINT16 MessageId, DT_FIELD *FieldObject, char *ExtraMessage); void DtFatal ( UINT16 MessageId, DT_FIELD *FieldObject, char *ExtraMessage); UINT64 DtDoConstant ( char *String); char* DtGetFieldValue ( DT_FIELD *Field); UINT8 DtGetFieldType ( ACPI_DMTABLE_INFO *Info); UINT32 DtGetBufferLength ( char *Buffer); UINT32 DtGetFieldLength ( DT_FIELD *Field, ACPI_DMTABLE_INFO *Info); void DtSetTableChecksum ( UINT8 *ChecksumPointer); void DtSetTableLength( void); /* dttable - individual table compilation */ ACPI_STATUS DtCompileFacs ( DT_FIELD **PFieldList); ACPI_STATUS DtCompileRsdp ( DT_FIELD **PFieldList); ACPI_STATUS DtCompileAest ( void **PFieldList); ACPI_STATUS DtCompileApmt ( void **PFieldList); ACPI_STATUS DtCompileAsf ( void **PFieldList); ACPI_STATUS DtCompileAspt ( void **PFieldList); ACPI_STATUS DtCompileCdat ( void **PFieldList); ACPI_STATUS DtCompileCedt ( void **PFieldList); ACPI_STATUS DtCompileCpep ( void **PFieldList); ACPI_STATUS DtCompileCsrt ( void **PFieldList); ACPI_STATUS DtCompileDbg2 ( void **PFieldList); ACPI_STATUS DtCompileDmar ( void **PFieldList); ACPI_STATUS DtCompileDrtm ( void **PFieldList); ACPI_STATUS DtCompileEinj ( void **PFieldList); ACPI_STATUS DtCompileErst ( void **PFieldList); ACPI_STATUS DtCompileFadt ( void **PFieldList); ACPI_STATUS DtCompileFpdt ( void **PFieldList); ACPI_STATUS DtCompileGtdt ( void **PFieldList); ACPI_STATUS DtCompileHest ( void **PFieldList); ACPI_STATUS DtCompileHmat ( void **PFieldList); ACPI_STATUS DtCompileIort ( void **PFieldList); ACPI_STATUS DtCompileIvrs ( void **PFieldList); ACPI_STATUS DtCompileLpit ( void **PFieldList); ACPI_STATUS DtCompileMadt ( void **PFieldList); ACPI_STATUS DtCompileMcfg ( void **PFieldList); ACPI_STATUS DtCompileMpam ( void **PFieldList); ACPI_STATUS DtCompileMpst ( void **PFieldList); ACPI_STATUS DtCompileMsct ( void **PFieldList); ACPI_STATUS DtCompileNfit ( void **PFieldList); ACPI_STATUS DtCompilePcct ( void **PFieldList); ACPI_STATUS DtCompilePdtt ( void **PFieldList); ACPI_STATUS DtCompilePhat ( void **PFieldList); ACPI_STATUS DtCompilePmtt ( void **PFieldList); ACPI_STATUS DtCompilePptt ( void **PFieldList); ACPI_STATUS DtCompilePrmt ( void **PFieldList); ACPI_STATUS DtCompileRas2 ( void **PFieldList); ACPI_STATUS DtCompileRgrt ( void **PFieldList); ACPI_STATUS DtCompileRhct ( void **PFieldList); ACPI_STATUS DtCompileRsdt ( void **PFieldList); ACPI_STATUS DtCompileS3pt ( DT_FIELD **PFieldList); ACPI_STATUS DtCompileSdev ( void **PFieldList); ACPI_STATUS DtCompileSlic ( void **PFieldList); ACPI_STATUS DtCompileSlit ( void **PFieldList); ACPI_STATUS DtCompileSrat ( void **PFieldList); ACPI_STATUS DtCompileStao ( void **PFieldList); ACPI_STATUS DtCompileSvkl ( void **PFieldList); ACPI_STATUS DtCompileTcpa ( void **PFieldList); ACPI_STATUS DtCompileTpm2 ( void **PFieldList); ACPI_STATUS DtCompileUefi ( void **PFieldList); ACPI_STATUS DtCompileViot ( void **PFieldList); ACPI_STATUS DtCompileWdat ( void **PFieldList); ACPI_STATUS DtCompileWpbt ( void **PFieldList); ACPI_STATUS DtCompileXsdt ( void **PFieldList); ACPI_STATUS DtCompileGeneric ( void **PFieldList, char *TermFieldName, UINT32 *PFieldLength); ACPI_DMTABLE_INFO * DtGetGenericTableInfo ( char *Name); /* ACPI Table templates */ extern const unsigned char TemplateAest[]; extern const unsigned char TemplateAgdi[]; extern const unsigned char TemplateApmt[]; extern const unsigned char TemplateAsf[]; extern const unsigned char TemplateAspt[]; extern const unsigned char TemplateBoot[]; extern const unsigned char TemplateBdat[]; extern const unsigned char TemplateBert[]; extern const unsigned char TemplateBgrt[]; extern const unsigned char TemplateCcel[]; extern const unsigned char TemplateCdat[]; extern const unsigned char TemplateCedt[]; extern const unsigned char TemplateCpep[]; extern const unsigned char TemplateCsrt[]; extern const unsigned char TemplateDbg2[]; extern const unsigned char TemplateDbgp[]; extern const unsigned char TemplateDmar[]; extern const unsigned char TemplateDrtm[]; extern const unsigned char TemplateEcdt[]; extern const unsigned char TemplateEinj[]; extern const unsigned char TemplateErst[]; extern const unsigned char TemplateFadt[]; extern const unsigned char TemplateFpdt[]; extern const unsigned char TemplateGtdt[]; extern const unsigned char TemplateHest[]; extern const unsigned char TemplateHmat[]; extern const unsigned char TemplateHpet[]; extern const unsigned char TemplateIort[]; extern const unsigned char TemplateIvrs[]; extern const unsigned char TemplateLpit[]; extern const unsigned char TemplateMadt[]; extern const unsigned char TemplateMcfg[]; extern const unsigned char TemplateMchi[]; extern const unsigned char TemplateMpam[]; extern const unsigned char TemplateMpst[]; extern const unsigned char TemplateMsct[]; extern const unsigned char TemplateMsdm[]; extern const unsigned char TemplateNfit[]; extern const unsigned char TemplatePcct[]; extern const unsigned char TemplatePdtt[]; extern const unsigned char TemplatePhat[]; extern const unsigned char TemplatePmtt[]; extern const unsigned char TemplatePptt[]; extern const unsigned char TemplatePrmt[]; extern const unsigned char TemplateRasf[]; extern const unsigned char TemplateRas2[]; extern const unsigned char TemplateRgrt[]; extern const unsigned char TemplateRhct[]; extern const unsigned char TemplateRsdt[]; extern const unsigned char TemplateS3pt[]; extern const unsigned char TemplateSbst[]; extern const unsigned char TemplateSdei[]; extern const unsigned char TemplateSdev[]; extern const unsigned char TemplateSlic[]; extern const unsigned char TemplateSlit[]; extern const unsigned char TemplateSpcr[]; extern const unsigned char TemplateSpmi[]; extern const unsigned char TemplateSrat[]; extern const unsigned char TemplateStao[]; extern const unsigned char TemplateSvkl[]; extern const unsigned char TemplateTcpa[]; extern const unsigned char TemplateTdel[]; extern const unsigned char TemplateTpm2[]; extern const unsigned char TemplateUefi[]; extern const unsigned char TemplateViot[]; extern const unsigned char TemplateWaet[]; extern const unsigned char TemplateWdat[]; extern const unsigned char TemplateWddt[]; extern const unsigned char TemplateWdrt[]; extern const unsigned char TemplateWpbt[]; extern const unsigned char TemplateWsmt[]; extern const unsigned char TemplateXenv[]; extern const unsigned char TemplateXsdt[]; #endif src/acpica/source/compiler/dtcompilerparser.l000066400000000000000000000300471465205512700217460ustar00rootroot00000000000000%{ /****************************************************************************** * * Module Name: dtcompilerparser.l - Flex input file for table compiler lexer * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "dtcompilerparser.y.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("dtcompilerscanner") /* handle locations */ int DtCompilerParsercolumn = 1; int DtLabelByteOffset = 0; int DtCompilerParserByteOffset = 0; UINT32 DtTokenFirstLine = 0; UINT32 DtTokenFirstColumn = 0; #define YY_USER_ACTION \ DtTokenFirstLine = DtCompilerParserlineno; \ DtTokenFirstColumn = DtCompilerParsercolumn; \ DtCompilerParsercolumn += DtCompilerParserleng; \ DtCompilerParserByteOffset += DtCompilerParserleng; \ DbgPrint (ASL_PARSE_OUTPUT,\ "user action occurred. DtCompilerParserlloc.first_line: %u\n",\ DtTokenFirstLine); %} %option nounput noinput yylineno /* Indicates a state used for parsing multiline C comments */ %x ML_COMMENT %x DATA_STATE WhiteSpace [ \t\v\r]+ NewLines [\n]+ /* Avoid ", \n, and [] as a part of label name. These are not valid characters of a label name */ LabelName [^ ":\n\[\]]([^":\n\[\]]*[^" :\n\[\]])? /* Avoid ", \n, \\, and [] as a part of data. These are not valid characters of data */ Data [^ \\":\n\[\]]([^":\n\[\]\\]*[^" :\n\[\]\\])? Text [^ ":\n][^":\n]* Comment \[[^\n\[\]]*\] CommentField {LabelName}{WhiteSpace}*:{WhiteSpace}{Comment}?$ %% {WhiteSpace}"\\\n" { DbgPrint(ASL_PARSE_OUTPUT,"Continuation matched\n"); return (DT_PARSEOP_LINE_CONTINUATION); } ":" { DbgPrint(ASL_PARSE_OUTPUT, ": Matched\n"); BEGIN (DATA_STATE); return (':'); } {WhiteSpace} { DbgPrint(ASL_PARSE_OUTPUT,"Whitespace matched\n"); } {Comment} { DbgPrint(ASL_PARSE_OUTPUT,"Comment matched\n"); } "/*" { BEGIN (ML_COMMENT); } "*/" { BEGIN (INITIAL); } "*/\n" { BEGIN (INITIAL); } ([^*]|\n)+|. /* Ignore */ "//".* /* Ignore */ {Data} { char *s; int size = strlen (DtCompilerParsertext); s=UtLocalCacheCalloc (size + 1); AcpiUtSafeStrncpy (s, DtCompilerParsertext, size + 1); DtCompilerParserlval.s = s; DbgPrint (ASL_PARSE_OUTPUT, "Data: %s\n", s); return (DT_PARSEOP_DATA); } {CommentField} /* ignore */ {LabelName} { char *s; int size = strlen (DtCompilerParsertext); s=UtLocalCacheCalloc (size + 1); AcpiUtSafeStrncpy (s, DtCompilerParsertext, size + 1); DtCompilerParserlval.u = (DT_TABLE_UNIT *) UtLocalCacheCalloc (sizeof (DT_TABLE_UNIT)); DtCompilerParserlval.u->Value = s; DtCompilerParserlval.u->Line = DtCompilerParserlineno; DtCompilerParserlval.u->Column = DtCompilerParsercolumn; DtLabelByteOffset = DtCompilerParserByteOffset; DbgPrint (ASL_PARSE_OUTPUT, "Label: %s\n", s); return (DT_PARSEOP_LABEL); } \"{Text}?\" { // remove outer quotes from the string, they are unnecessary char *s; int size = strlen (DtCompilerParsertext); s=UtLocalCacheCalloc (size - 1); AcpiUtSafeStrncpy (s, DtCompilerParsertext + 1, size - 1); DtCompilerParserlval.s = s; DbgPrint (ASL_PARSE_OUTPUT, "String Data: %s\n", s); BEGIN (INITIAL); return (DT_PARSEOP_STRING_DATA); } {NewLines} { DbgPrint(ASL_PARSE_OUTPUT, "Newline matched (data state). Current line number: %u\n",DtCompilerParserlineno); BEGIN (INITIAL); DtCompilerParsercolumn = 1; } %% /* * Local support functions */ void DtCompilerInitLexer ( FILE *inFile) { yyin = inFile; } void DtCompilerTerminateLexer ( void) { /* * Flex/Bison increments the lineno for the EOF so decrement by 1 to get * the correct number of lines. */ AslGbl_CurrentLineNumber = DtCompilerParserlineno - 1; AslGbl_InputByteCount = DtCompilerParserByteOffset; } src/acpica/source/compiler/dtcompilerparser.y000066400000000000000000000271771465205512700217750ustar00rootroot00000000000000%{ /****************************************************************************** * * Module Name: dtcompilerparser.y - Bison input file for table compiler parser * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtcompilerparser") void * AslLocalAllocate (unsigned int Size); /* Bison/yacc configuration */ #undef alloca #define alloca AslLocalAllocate int DtCompilerParserlex (void); int DtCompilerParserparse (void); void DtCompilerParsererror (char const *msg); extern char *DtCompilerParsertext; extern DT_FIELD *AslGbl_CurrentField; extern int DtLabelByteOffset; extern UINT64 DtCompilerParserlineno; /* Current line number */ extern UINT32 DtTokenFirstLine; extern UINT32 DtTokenFirstColumn; /* Bison/yacc configuration */ #define yytname DtCompilerParsername #define YYDEBUG 1 /* Enable debug output */ #define YYERROR_VERBOSE 1 /* Verbose error messages */ #define YYFLAG -32768 /* Define YYMALLOC/YYFREE to prevent redefinition errors */ #define YYMALLOC malloc #define YYFREE free %} %union { char *s; DT_FIELD *f; DT_TABLE_UNIT *u; } %type Table %token DT_PARSEOP_DATA %token DT_PARSEOP_LABEL %token DT_PARSEOP_STRING_DATA %token DT_PARSEOP_LINE_CONTINUATION %type Data %type Datum %type MultiLineData %type MultiLineDataList %% Table : FieldList { } ; FieldList : Field FieldList | Field ; Field : DT_PARSEOP_LABEL ':' Data { DtCreateField ($1, $3, DtLabelByteOffset); } ; Data : MultiLineDataList { $$ = $1; } | Datum { $$ = $1; } | Datum MultiLineDataList { $$ = $1; } /* combine the string with strcat */ ; MultiLineDataList : MultiLineDataList MultiLineData { $$ = DtCreateTableUnit (AcpiUtStrcat(AcpiUtStrcat($1->Value, " "), $2->Value), $1->Line, $1->Column); } /* combine the strings with strcat */ | MultiLineData { $$ = $1; } ; MultiLineData : DT_PARSEOP_LINE_CONTINUATION Datum { DbgPrint (ASL_PARSE_OUTPUT, "line continuation detected\n"); $$ = $2; } ; Datum : DT_PARSEOP_DATA { DbgPrint (ASL_PARSE_OUTPUT, "parser data: [%s]\n", DtCompilerParserlval.s); $$ = DtCreateTableUnit (AcpiUtStrdup(DtCompilerParserlval.s), DtTokenFirstLine, DtTokenFirstColumn); } | DT_PARSEOP_STRING_DATA { DbgPrint (ASL_PARSE_OUTPUT, "parser string data: [%s]\n", DtCompilerParserlval.s); $$ = DtCreateTableUnit (AcpiUtStrdup(DtCompilerParserlval.s), DtTokenFirstLine, DtTokenFirstColumn); } ; %% /* * Local support functions, including parser entry point */ /****************************************************************************** * * FUNCTION: DtCompilerParsererror * * PARAMETERS: Message - Parser-generated error message * * RETURN: None * * DESCRIPTION: Handler for parser errors * *****************************************************************************/ void DtCompilerParsererror ( char const *Message) { DtError (ASL_ERROR, ASL_MSG_SYNTAX, AslGbl_CurrentField, (char *) Message); } int DtCompilerParserwrap(void) { return (1); } src/acpica/source/compiler/dtexpress.c000066400000000000000000000414611465205512700204010ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dtexpress.c - Support for integer expressions and labels * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "dtparser.y.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtexpress") /* Local prototypes */ static void DtInsertLabelField ( DT_FIELD *Field); static DT_FIELD * DtLookupLabel ( char *Name); /* Global used for errors during parse and related functions */ DT_FIELD *AslGbl_CurrentField; /****************************************************************************** * * FUNCTION: DtResolveIntegerExpression * * PARAMETERS: Field - Field object with Integer expression * ReturnValue - Where the integer is returned * * RETURN: Status, and the resolved 64-bit integer value * * DESCRIPTION: Resolve an integer expression to a single value. Supports * both integer constants and labels. * *****************************************************************************/ ACPI_STATUS DtResolveIntegerExpression ( DT_FIELD *Field, UINT64 *ReturnValue) { UINT64 Result; DbgPrint (ASL_DEBUG_OUTPUT, "Full Integer expression: %s\n", Field->Value); AslGbl_CurrentField = Field; Result = DtEvaluateExpression (Field->Value); *ReturnValue = Result; return (AE_OK); } /****************************************************************************** * * FUNCTION: DtDoOperator * * PARAMETERS: LeftValue - First 64-bit operand * Operator - Parse token for the operator (OP_EXP_*) * RightValue - Second 64-bit operand * * RETURN: 64-bit result of the requested operation * * DESCRIPTION: Perform the various 64-bit integer math functions * *****************************************************************************/ UINT64 DtDoOperator ( UINT64 LeftValue, UINT32 Operator, UINT64 RightValue) { UINT64 Result; /* Perform the requested operation */ switch (Operator) { case OP_EXP_ONES_COMPLIMENT: Result = ~RightValue; break; case OP_EXP_LOGICAL_NOT: Result = !RightValue; break; case OP_EXP_MULTIPLY: Result = LeftValue * RightValue; break; case OP_EXP_DIVIDE: if (!RightValue) { DtError (ASL_ERROR, ASL_MSG_DIVIDE_BY_ZERO, AslGbl_CurrentField, NULL); return (0); } Result = LeftValue / RightValue; break; case OP_EXP_MODULO: if (!RightValue) { DtError (ASL_ERROR, ASL_MSG_DIVIDE_BY_ZERO, AslGbl_CurrentField, NULL); return (0); } Result = LeftValue % RightValue; break; case OP_EXP_ADD: Result = LeftValue + RightValue; break; case OP_EXP_SUBTRACT: Result = LeftValue - RightValue; break; case OP_EXP_SHIFT_RIGHT: Result = LeftValue >> RightValue; break; case OP_EXP_SHIFT_LEFT: Result = LeftValue << RightValue; break; case OP_EXP_LESS: Result = LeftValue < RightValue; break; case OP_EXP_GREATER: Result = LeftValue > RightValue; break; case OP_EXP_LESS_EQUAL: Result = LeftValue <= RightValue; break; case OP_EXP_GREATER_EQUAL: Result = LeftValue >= RightValue; break; case OP_EXP_EQUAL: Result = LeftValue == RightValue; break; case OP_EXP_NOT_EQUAL: Result = LeftValue != RightValue; break; case OP_EXP_AND: Result = LeftValue & RightValue; break; case OP_EXP_XOR: Result = LeftValue ^ RightValue; break; case OP_EXP_OR: Result = LeftValue | RightValue; break; case OP_EXP_LOGICAL_AND: Result = LeftValue && RightValue; break; case OP_EXP_LOGICAL_OR: Result = LeftValue || RightValue; break; default: /* Unknown operator */ DtFatal (ASL_MSG_INVALID_EXPRESSION, AslGbl_CurrentField, NULL); return (0); } DbgPrint (ASL_DEBUG_OUTPUT, "IntegerEval: (%8.8X%8.8X %s %8.8X%8.8X) = %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (LeftValue), DtGetOpName (Operator), ACPI_FORMAT_UINT64 (RightValue), ACPI_FORMAT_UINT64 (Result)); return (Result); } /****************************************************************************** * * FUNCTION: DtResolveLabel * * PARAMETERS: LabelString - Contains the label * * RETURN: Table offset associated with the label * * DESCRIPTION: Lookup a label and return its value. * *****************************************************************************/ UINT64 DtResolveLabel ( char *LabelString) { DT_FIELD *LabelField; DbgPrint (ASL_DEBUG_OUTPUT, "Resolve Label: %s\n", LabelString); /* Resolve a label reference to an integer (table offset) */ if (*LabelString != '$') { return (0); } LabelField = DtLookupLabel (LabelString); if (!LabelField) { DtError (ASL_ERROR, ASL_MSG_UNKNOWN_LABEL, AslGbl_CurrentField, LabelString); return (0); } /* All we need from the label is the offset in the table */ DbgPrint (ASL_DEBUG_OUTPUT, "Resolved Label: 0x%8.8X\n", LabelField->TableOffset); return (LabelField->TableOffset); } /****************************************************************************** * * FUNCTION: DtDetectAllLabels * * PARAMETERS: FieldList - Field object at start of generic list * * RETURN: None * * DESCRIPTION: Detect all labels in a list of "generic" opcodes (such as * a UEFI table.) and insert them into the global label list. * *****************************************************************************/ void DtDetectAllLabels ( DT_FIELD *FieldList) { ACPI_DMTABLE_INFO *Info; DT_FIELD *GenericField; UINT32 TableOffset; TableOffset = AslGbl_CurrentTableOffset; GenericField = FieldList; /* * Process all "Label:" fields within the parse tree. We need * to know the offsets for all labels before we can compile * the parse tree in order to handle forward references. Traverse * tree and get/set all field lengths of all operators in order to * determine the label offsets. */ while (GenericField) { Info = DtGetGenericTableInfo (GenericField->Name); if (Info) { /* Maintain table offsets */ GenericField->TableOffset = TableOffset; TableOffset += DtGetFieldLength (GenericField, Info); /* Insert all labels in the global label list */ if (Info->Opcode == ACPI_DMT_LABEL) { DtInsertLabelField (GenericField); } } GenericField = GenericField->Next; } } /****************************************************************************** * * FUNCTION: DtInsertLabelField * * PARAMETERS: Field - Field object with Label to be inserted * * RETURN: None * * DESCRIPTION: Insert a label field into the global label list * *****************************************************************************/ static void DtInsertLabelField ( DT_FIELD *Field) { ACPI_FUNCTION_NAME (DtInsertLabelField); DbgPrint (ASL_DEBUG_OUTPUT, "%s: Found Label : %s at output table offset %X\n", ACPI_GET_FUNCTION_NAME, Field->Value, Field->TableOffset); Field->NextLabel = AslGbl_LabelList; AslGbl_LabelList = Field; } /****************************************************************************** * * FUNCTION: DtLookupLabel * * PARAMETERS: Name - Label to be resolved * * RETURN: Field object associated with the label * * DESCRIPTION: Lookup a label in the global label list. Used during the * resolution of integer expressions. * *****************************************************************************/ static DT_FIELD * DtLookupLabel ( char *Name) { DT_FIELD *LabelField; /* Skip a leading $ */ if (*Name == '$') { Name++; } /* Search global list */ LabelField = AslGbl_LabelList; while (LabelField) { if (!strcmp (Name, LabelField->Value)) { return (LabelField); } LabelField = LabelField->NextLabel; } return (NULL); } src/acpica/source/compiler/dtfield.c000066400000000000000000000614701465205512700177750ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dtfield.c - Code generation for individual source fields * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtfield") /* Local prototypes */ static void DtCompileString ( UINT8 *Buffer, DT_FIELD *Field, UINT32 ByteLength); static void DtCompileUnicode ( UINT8 *Buffer, DT_FIELD *Field, UINT32 ByteLength); static ACPI_STATUS DtCompileUuid ( UINT8 *Buffer, DT_FIELD *Field, UINT32 ByteLength); static char * DtNormalizeBuffer ( char *Buffer, UINT32 *Count); /****************************************************************************** * * FUNCTION: DtCompileOneField * * PARAMETERS: Buffer - Output buffer * Field - Field to be compiled * ByteLength - Byte length of the field * Type - Field type * * RETURN: None * * DESCRIPTION: Compile a field value to binary * *****************************************************************************/ void DtCompileOneField ( UINT8 *Buffer, DT_FIELD *Field, UINT32 ByteLength, UINT8 Type, UINT8 Flags) { ACPI_STATUS Status; switch (Type) { case DT_FIELD_TYPE_INTEGER: DtCompileInteger (Buffer, Field, ByteLength, Flags); break; case DT_FIELD_TYPE_STRING: DtCompileString (Buffer, Field, ByteLength); break; case DT_FIELD_TYPE_UUID: Status = DtCompileUuid (Buffer, Field, ByteLength); if (ACPI_SUCCESS (Status)) { break; } ACPI_FALLTHROUGH; case DT_FIELD_TYPE_BUFFER: DtCompileBuffer (Buffer, Field->Value, Field, ByteLength); break; case DT_FIELD_TYPE_UNICODE: DtCompileUnicode (Buffer, Field, ByteLength); break; case DT_FIELD_TYPE_DEVICE_PATH: break; default: DtFatal (ASL_MSG_COMPILER_INTERNAL, Field, "Invalid field type"); break; } } /****************************************************************************** * * FUNCTION: DtCompileString * * PARAMETERS: Buffer - Output buffer * Field - String to be copied to buffer * ByteLength - Maximum length of string * * RETURN: None * * DESCRIPTION: Copy string to the buffer * *****************************************************************************/ static void DtCompileString ( UINT8 *Buffer, DT_FIELD *Field, UINT32 ByteLength) { UINT32 Length; Length = strlen (Field->Value); /* Check if the string is too long for the field */ if (Length > ByteLength) { sprintf (AslGbl_MsgBuffer, "Maximum %u characters, found %u characters [%s]", ByteLength, Length, Field->Value); DtError (ASL_ERROR, ASL_MSG_STRING_LENGTH, Field, AslGbl_MsgBuffer); Length = ByteLength; } memcpy (Buffer, Field->Value, Length); } /****************************************************************************** * * FUNCTION: DtCompileUnicode * * PARAMETERS: Buffer - Output buffer * Field - String to be copied to buffer * ByteLength - Maximum length of string * * RETURN: None * * DESCRIPTION: Convert ASCII string to Unicode string * * Note: The Unicode string is 16 bits per character, no leading signature, * with a 16-bit terminating NULL. * *****************************************************************************/ static void DtCompileUnicode ( UINT8 *Buffer, DT_FIELD *Field, UINT32 ByteLength) { UINT32 Count; UINT32 i; char *AsciiString; UINT16 *UnicodeString; AsciiString = Field->Value; UnicodeString = (UINT16 *) Buffer; Count = strlen (AsciiString) + 1; /* Convert to Unicode string (including null terminator) */ for (i = 0; i < Count; i++) { UnicodeString[i] = (UINT16) AsciiString[i]; } } /******************************************************************************* * * FUNCTION: DtCompileUuid * * PARAMETERS: Buffer - Output buffer * Field - String to be copied to buffer * ByteLength - Maximum length of string * * RETURN: None * * DESCRIPTION: Convert UUID string to 16-byte buffer * ******************************************************************************/ static ACPI_STATUS DtCompileUuid ( UINT8 *Buffer, DT_FIELD *Field, UINT32 ByteLength) { char *InString; ACPI_STATUS Status; InString = Field->Value; Status = AuValidateUuid (InString); if (ACPI_FAILURE (Status)) { sprintf (AslGbl_MsgBuffer, "%s", Field->Value); DtNameError (ASL_ERROR, ASL_MSG_INVALID_UUID, Field, AslGbl_MsgBuffer); } else { AcpiUtConvertStringToUuid (InString, Buffer); } return (Status); } /****************************************************************************** * * FUNCTION: DtCompileInteger * * PARAMETERS: Buffer - Output buffer * Field - Field obj with Integer to be compiled * ByteLength - Byte length of the integer * Flags - Additional compile info * * RETURN: None * * DESCRIPTION: Compile an integer. Supports integer expressions with C-style * operators. * *****************************************************************************/ void DtCompileInteger ( UINT8 *Buffer, DT_FIELD *Field, UINT32 ByteLength, UINT8 Flags) { UINT64 Value; UINT64 MaxValue; ACPI_STATUS Status; /* Output buffer byte length must be in range 1-8 */ if ((ByteLength > 8) || (ByteLength == 0)) { DtFatal (ASL_MSG_COMPILER_INTERNAL, Field, "Invalid internal Byte length"); return; } /* Resolve integer expression to a single integer value */ Status = DtResolveIntegerExpression (Field, &Value); if (ACPI_FAILURE (Status)) { return; } /* * Ensure that reserved fields are set properly. Note: uses * the DT_NON_ZERO flag to indicate that the reserved value * must be exactly one. Otherwise, the value must be zero. * This is sufficient for now. */ /* TBD: Should use a flag rather than compare "Reserved" */ if (!strcmp (Field->Name, "Reserved")) { if (Flags & DT_NON_ZERO) { if (Value != 1) { DtError (ASL_ERROR, ASL_MSG_RESERVED_FIELD, Field, "Must be one, setting to one"); Value = 1; } } else if (Value != 0) { DtError (ASL_ERROR, ASL_MSG_RESERVED_FIELD, Field, "Must be zero, setting to zero"); Value = 0; } } /* Check if the value must be non-zero */ else if ((Flags & DT_NON_ZERO) && (Value == 0)) { DtError (ASL_ERROR, ASL_MSG_ZERO_VALUE, Field, NULL); } /* * Generate the maximum value for the data type (ByteLength) * Note: construct chosen for maximum portability */ MaxValue = ((UINT64) (-1)) >> (64 - (ByteLength * 8)); /* Validate that the input value is within range of the target */ if (Value > MaxValue) { sprintf (AslGbl_MsgBuffer, "%8.8X%8.8X - max %u bytes", ACPI_FORMAT_UINT64 (Value), ByteLength); DtError (ASL_ERROR, ASL_MSG_INTEGER_SIZE, Field, AslGbl_MsgBuffer); } memcpy (Buffer, &Value, ByteLength); return; } /****************************************************************************** * * FUNCTION: DtNormalizeBuffer * * PARAMETERS: Buffer - Input buffer * Count - Output the count of hex numbers in * the Buffer * * RETURN: The normalized buffer, must be freed by caller * * DESCRIPTION: [1A,2B,3C,4D] or 1A, 2B, 3C, 4D will be normalized * to 1A 2B 3C 4D * *****************************************************************************/ static char * DtNormalizeBuffer ( char *Buffer, UINT32 *Count) { char *NewBuffer; char *TmpBuffer; UINT32 BufferCount = 0; BOOLEAN Separator = TRUE; char c; NewBuffer = UtLocalCalloc (strlen (Buffer) + 1); TmpBuffer = NewBuffer; while ((c = *Buffer++)) { switch (c) { /* Valid separators */ case '[': case ']': case ' ': case ',': Separator = TRUE; break; default: if (Separator) { /* Insert blank as the standard separator */ if (NewBuffer[0]) { *TmpBuffer++ = ' '; BufferCount++; } Separator = FALSE; } *TmpBuffer++ = c; break; } } *Count = BufferCount + 1; return (NewBuffer); } /****************************************************************************** * * FUNCTION: DtCompileBuffer * * PARAMETERS: Buffer - Output buffer * StringValue - Integer list to be compiled * Field - Current field object * ByteLength - Byte length of the integer list * * RETURN: Count of remaining data in the input list * * DESCRIPTION: Compile and pack an integer list, for example * "AA 1F 20 3B" ==> Buffer[] = {0xAA,0x1F,0x20,0x3B} * *****************************************************************************/ UINT32 DtCompileBuffer ( UINT8 *Buffer, char *StringValue, DT_FIELD *Field, UINT32 ByteLength) { char *Substring; ACPI_STATUS Status; UINT32 Count; UINT32 i; /* Allow several different types of value separators */ StringValue = DtNormalizeBuffer (StringValue, &Count); Substring = StringValue; if (Count != ByteLength) { sprintf(AslGbl_MsgBuffer, "Found %u values, must match expected count: %u", Count, ByteLength); DtError (ASL_ERROR, ASL_MSG_BUFFER_LIST, Field, AslGbl_MsgBuffer); goto Exit; } /* Each element of StringValue is now three chars (2 hex + 1 space) */ for (i = 0; i < Count; i++, Substring += 3) { /* Check for byte value too long */ if (*(&Substring[2]) && (*(&Substring[2]) != ' ')) { DtError (ASL_ERROR, ASL_MSG_BUFFER_ELEMENT, Field, Substring); goto Exit; } /* Convert two ASCII characters to one hex byte */ Status = AcpiUtAsciiToHexByte (Substring, &Buffer[i]); if (ACPI_FAILURE (Status)) { DtError (ASL_ERROR, ASL_MSG_BUFFER_ELEMENT, Field, Substring); goto Exit; } } Exit: ACPI_FREE (StringValue); return (ByteLength - Count); } /****************************************************************************** * * FUNCTION: DtCompileFlag * * PARAMETERS: Buffer - Output buffer * Field - Field to be compiled * Info - Flag info * * RETURN: None * * DESCRIPTION: Compile a flag field. Handles flags up to 64 bits. * *****************************************************************************/ void DtCompileFlag ( UINT8 *Buffer, DT_FIELD *Field, ACPI_DMTABLE_INFO *Info) { UINT64 Value = 0; UINT32 BitLength = 1; UINT8 BitPosition = 0; Value = AcpiUtImplicitStrtoul64 (Field->Value); switch (Info->Opcode) { case ACPI_DMT_FLAG0: case ACPI_DMT_FLAG1: case ACPI_DMT_FLAG2: case ACPI_DMT_FLAG3: case ACPI_DMT_FLAG4: case ACPI_DMT_FLAG5: case ACPI_DMT_FLAG6: case ACPI_DMT_FLAG7: BitPosition = Info->Opcode; BitLength = 1; break; case ACPI_DMT_FLAGS0: BitPosition = 0; BitLength = 2; break; case ACPI_DMT_FLAGS1: BitPosition = 1; BitLength = 2; break; case ACPI_DMT_FLAGS2: BitPosition = 2; BitLength = 2; break; case ACPI_DMT_FLAGS8_2: BitPosition = 2; BitLength = 8; break; case ACPI_DMT_FLAGS4: BitPosition = 4; BitLength = 2; break; case ACPI_DMT_FLAGS4_0: BitPosition = 0; BitLength = 4; break; case ACPI_DMT_FLAGS4_4: BitPosition = 4; BitLength = 4; break; case ACPI_DMT_FLAGS4_8: BitPosition = 8; BitLength = 4; break; case ACPI_DMT_FLAGS4_12: BitPosition = 12; BitLength = 4; break; case ACPI_DMT_FLAGS16_16: BitPosition = 16; BitLength = 16; break; default: DtFatal (ASL_MSG_COMPILER_INTERNAL, Field, "Invalid flag opcode"); break; } /* Check range of the input flag value */ if (Value >= ((UINT64) 1 << BitLength)) { sprintf (AslGbl_MsgBuffer, "Maximum %u bit", BitLength); DtError (ASL_ERROR, ASL_MSG_FLAG_VALUE, Field, AslGbl_MsgBuffer); Value = 0; } *Buffer |= (UINT8) (Value << BitPosition); } /****************************************************************************** * * FUNCTION: DtCreateField * * PARAMETERS: Name * Value * Line * Offset * Column * NameColumn * * RETURN: None * * DESCRIPTION: Create a field * *****************************************************************************/ void DtCreateField ( DT_TABLE_UNIT *FieldKey, DT_TABLE_UNIT *FieldValue, UINT32 Offset) { DT_FIELD *Field = UtFieldCacheCalloc (); Field->StringLength = 0; if (FieldKey->Value) { Field->Name = strcpy (UtLocalCacheCalloc (strlen (FieldKey->Value) + 1), FieldKey->Value); } if (FieldValue->Value) { Field->StringLength = strlen (FieldValue->Value); Field->Value = strcpy (UtLocalCacheCalloc (Field->StringLength + 1), FieldValue->Value); } Field->Line = FieldValue->Line; Field->ByteOffset = Offset; Field->NameColumn = FieldKey->Column; Field->Column = FieldValue->Column; DtLinkField (Field); DtDumpFieldList (AslGbl_FieldList); } /****************************************************************************** * * FUNCTION: DtCreateTableUnit * * PARAMETERS: Data * Line * Column * * RETURN: a table unit * * DESCRIPTION: Create a table unit * *****************************************************************************/ DT_TABLE_UNIT * DtCreateTableUnit ( char *Data, UINT32 Line, UINT32 Column) { DT_TABLE_UNIT *Unit = (DT_TABLE_UNIT *) UtFieldCacheCalloc (); Unit->Value = Data; Unit->Line = Line; Unit->Column = Column; return (Unit); } /****************************************************************************** * * FUNCTION: DtLinkField * * PARAMETERS: Field - New field object to link * * RETURN: None * * DESCRIPTION: Link one field name and value to the list * *****************************************************************************/ void DtLinkField ( DT_FIELD *Field) { DT_FIELD *Prev; DT_FIELD *Next; Prev = Next = AslGbl_FieldList; while (Next) { Prev = Next; Next = Next->Next; } if (Prev) { Prev->Next = Field; } else { AslGbl_FieldList = Field; } } src/acpica/source/compiler/dtio.c000066400000000000000000001046651465205512700173250ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dtio.c - File I/O support for data table compiler * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "acapps.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtio") /* Local prototypes */ static char * DtTrim ( char *String); static ACPI_STATUS DtParseLine ( char *LineBuffer, UINT32 Line, UINT32 Offset); static void DtWriteBinary ( DT_SUBTABLE *Subtable, void *Context, void *ReturnValue); static void DtDumpBuffer ( UINT32 FileId, UINT8 *Buffer, UINT32 Offset, UINT32 Length); static void DtDumpSubtableInfo ( DT_SUBTABLE *Subtable, void *Context, void *ReturnValue); static void DtDumpSubtableTree ( DT_SUBTABLE *Subtable, void *Context, void *ReturnValue); /* States for DtGetNextLine */ #define DT_NORMAL_TEXT 0 #define DT_START_QUOTED_STRING 1 #define DT_START_COMMENT 2 #define DT_SLASH_ASTERISK_COMMENT 3 #define DT_SLASH_SLASH_COMMENT 4 #define DT_END_COMMENT 5 #define DT_MERGE_LINES 6 #define DT_ESCAPE_SEQUENCE 7 static UINT32 AslGbl_NextLineOffset; /****************************************************************************** * * FUNCTION: DtTrim * * PARAMETERS: String - Current source code line to trim * * RETURN: Trimmed line. Must be freed by caller. * * DESCRIPTION: Trim left and right spaces * *****************************************************************************/ static char * DtTrim ( char *String) { char *Start; char *End; char *ReturnString; ACPI_SIZE Length; /* Skip lines that start with a space */ if (*String == 0 || !strcmp (String, " ")) { ReturnString = UtLocalCacheCalloc (1); return (ReturnString); } /* Setup pointers to start and end of input string */ Start = String; End = String + strlen (String) - 1; /* Find first non-whitespace character */ while ((Start <= End) && ((*Start == ' ') || (*Start == '\t'))) { Start++; } /* Find last non-space character */ while (End >= Start) { if (*End == '\n') { End--; continue; } if (*End != ' ') { break; } End--; } /* Remove any quotes around the string */ if (*Start == '\"') { Start++; } if (*End == '\"') { End--; } /* Create the trimmed return string */ Length = ACPI_PTR_DIFF (End, Start) + 1; ReturnString = UtLocalCacheCalloc (Length + 1); if (strlen (Start)) { strncpy (ReturnString, Start, Length); } ReturnString[Length] = 0; return (ReturnString); } /****************************************************************************** * * FUNCTION: DtParseLine * * PARAMETERS: LineBuffer - Current source code line * Line - Current line number in the source * Offset - Current byte offset of the line * * RETURN: Status * * DESCRIPTION: Parse one source line * *****************************************************************************/ static ACPI_STATUS DtParseLine ( char *LineBuffer, UINT32 Line, UINT32 Offset) { char *Start; char *End; char *TmpName; char *TmpValue; char *Name; char *Value; char *Colon; UINT32 Length; DT_FIELD *Field; UINT32 Column; UINT32 NameColumn; BOOLEAN IsNullString = FALSE; if (!LineBuffer) { return (AE_OK); } /* All lines after "Raw Table Data" are ignored */ if (strstr (LineBuffer, ACPI_RAW_TABLE_DATA_HEADER)) { return (AE_NOT_FOUND); } Colon = strchr (LineBuffer, ':'); if (!Colon) { return (AE_OK); } Start = LineBuffer; End = Colon; while (Start < Colon) { if (*Start == '[') { /* Found left bracket, go to the right bracket */ while (Start < Colon && *Start != ']') { Start++; } } else if (*Start != ' ') { break; } Start++; } /* * There are two column values. One for the field name, * and one for the field value. */ Column = ACPI_PTR_DIFF (Colon, LineBuffer) + 3; NameColumn = ACPI_PTR_DIFF (Start, LineBuffer) + 1; Length = ACPI_PTR_DIFF (End, Start); TmpName = UtLocalCalloc (Length + 1); strncpy (TmpName, Start, Length); Name = DtTrim (TmpName); ACPI_FREE (TmpName); Start = End = (Colon + 1); while (*End) { /* Found left quotation, go to the right quotation and break */ if (*End == '"') { End++; /* Check for an explicit null string */ if (*End == '"') { IsNullString = TRUE; } while (*End && (*End != '"')) { End++; } End++; break; } /* * Special "comment" fields at line end, ignore them. * Note: normal slash-slash and slash-asterisk comments are * stripped already by the DtGetNextLine parser. * * TBD: Perhaps DtGetNextLine should parse the following type * of comments also. */ if (*End == '[') { End--; break; } End++; } Length = ACPI_PTR_DIFF (End, Start); TmpValue = UtLocalCalloc (Length + 1); strncpy (TmpValue, Start, Length); Value = DtTrim (TmpValue); ACPI_FREE (TmpValue); /* Create a new field object only if we have a valid value field */ if ((Value && *Value) || IsNullString) { Field = UtFieldCacheCalloc (); Field->Name = Name; Field->Value = Value; Field->Line = Line; Field->ByteOffset = Offset; Field->NameColumn = NameColumn; Field->Column = Column; Field->StringLength = Length; DtLinkField (Field); } /* Else -- Ignore this field, it has no valid data */ return (AE_OK); } /****************************************************************************** * * FUNCTION: DtGetNextLine * * PARAMETERS: Handle - Open file handle for the source file * * RETURN: Filled line buffer and offset of start-of-line (ASL_EOF on EOF) * * DESCRIPTION: Get the next valid source line. Removes all comments. * Ignores empty lines. * * Handles both slash-asterisk and slash-slash comments. * Also, quoted strings, but no escapes within. * * Line is returned in AslGbl_CurrentLineBuffer. * Line number in original file is returned in AslGbl_CurrentLineNumber. * *****************************************************************************/ UINT32 DtGetNextLine ( FILE *Handle, UINT32 Flags) { BOOLEAN LineNotAllBlanks = FALSE; UINT32 State = DT_NORMAL_TEXT; UINT32 CurrentLineOffset; UINT32 i; int c; int c1; memset (AslGbl_CurrentLineBuffer, 0, AslGbl_LineBufferSize); for (i = 0; ;) { /* * If line is too long, expand the line buffers. Also increases * AslGbl_LineBufferSize. */ if (i >= AslGbl_LineBufferSize) { UtExpandLineBuffers (); } c = getc (Handle); if (c == EOF) { switch (State) { case DT_START_QUOTED_STRING: case DT_SLASH_ASTERISK_COMMENT: AcpiOsPrintf ("**** EOF within comment/string %u\n", State); break; default: break; } /* Standalone EOF is OK */ if (i == 0) { return (ASL_EOF); } /* * Received an EOF in the middle of a line. Terminate the * line with a newline. The next call to this function will * return a standalone EOF. Thus, the upper parsing software * never has to deal with an EOF within a valid line (or * the last line does not get tossed on the floor.) */ c = '\n'; State = DT_NORMAL_TEXT; } else if (c == '\r') { c1 = getc (Handle); if (c1 == '\n') { /* * Skip the carriage return as if it didn't exist. This is * onlt meant for input files in DOS format in unix. fopen in * unix may not support "text mode" and leaves CRLF intact. */ c = '\n'; } else { /* This was not a CRLF. Only a CR */ ungetc(c1, Handle); DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, "Carriage return without linefeed detected"); return (ASL_EOF); } } switch (State) { case DT_NORMAL_TEXT: /* Normal text, insert char into line buffer */ AslGbl_CurrentLineBuffer[i] = (char) c; switch (c) { case '/': State = DT_START_COMMENT; break; case '"': State = DT_START_QUOTED_STRING; LineNotAllBlanks = TRUE; i++; break; case '\\': /* * The continuation char MUST be last char on this line. * Otherwise, it will be assumed to be a valid ASL char. */ State = DT_MERGE_LINES; break; case '\n': CurrentLineOffset = AslGbl_NextLineOffset; AslGbl_NextLineOffset = (UINT32) ftell (Handle); AslGbl_CurrentLineNumber++; /* * Exit if line is complete. Ignore empty lines (only \n) * or lines that contain nothing but blanks. */ if ((i != 0) && LineNotAllBlanks) { if ((i + 1) >= AslGbl_LineBufferSize) { UtExpandLineBuffers (); } AslGbl_CurrentLineBuffer[i+1] = 0; /* Terminate string */ return (CurrentLineOffset); } /* Toss this line and start a new one */ i = 0; LineNotAllBlanks = FALSE; break; default: if (c != ' ') { LineNotAllBlanks = TRUE; } i++; break; } break; case DT_START_QUOTED_STRING: /* Insert raw chars until end of quoted string */ AslGbl_CurrentLineBuffer[i] = (char) c; i++; switch (c) { case '"': State = DT_NORMAL_TEXT; break; case '\\': State = DT_ESCAPE_SEQUENCE; break; case '\n': if (!(Flags & DT_ALLOW_MULTILINE_QUOTES)) { AcpiOsPrintf ( "ERROR at line %u: Unterminated quoted string\n", AslGbl_CurrentLineNumber++); State = DT_NORMAL_TEXT; } break; default: /* Get next character */ break; } break; case DT_ESCAPE_SEQUENCE: /* Just copy the escaped character. TBD: sufficient for table compiler? */ AslGbl_CurrentLineBuffer[i] = (char) c; i++; State = DT_START_QUOTED_STRING; break; case DT_START_COMMENT: /* Open comment if this character is an asterisk or slash */ switch (c) { case '*': State = DT_SLASH_ASTERISK_COMMENT; break; case '/': State = DT_SLASH_SLASH_COMMENT; break; default: /* Not a comment */ i++; /* Save the preceding slash */ if (i >= AslGbl_LineBufferSize) { UtExpandLineBuffers (); } AslGbl_CurrentLineBuffer[i] = (char) c; i++; State = DT_NORMAL_TEXT; break; } break; case DT_SLASH_ASTERISK_COMMENT: /* Ignore chars until an asterisk-slash is found */ switch (c) { case '\n': AslGbl_NextLineOffset = (UINT32) ftell (Handle); AslGbl_CurrentLineNumber++; break; case '*': State = DT_END_COMMENT; break; default: break; } break; case DT_SLASH_SLASH_COMMENT: /* Ignore chars until end-of-line */ if (c == '\n') { /* We will exit via the NORMAL_TEXT path */ ungetc (c, Handle); State = DT_NORMAL_TEXT; } break; case DT_END_COMMENT: /* End comment if this char is a slash */ switch (c) { case '/': State = DT_NORMAL_TEXT; break; case '\n': AslGbl_NextLineOffset = (UINT32) ftell (Handle); AslGbl_CurrentLineNumber++; break; case '*': /* Consume all adjacent asterisks */ break; default: State = DT_SLASH_ASTERISK_COMMENT; break; } break; case DT_MERGE_LINES: if (c != '\n') { /* * This is not a continuation backslash, it is a normal * normal ASL backslash - for example: Scope(\_SB_) */ i++; /* Keep the backslash that is already in the buffer */ ungetc (c, Handle); State = DT_NORMAL_TEXT; } else { /* * This is a continuation line -- a backlash followed * immediately by a newline. Insert a space between the * lines (overwrite the backslash) */ AslGbl_CurrentLineBuffer[i] = ' '; i++; /* Ignore newline, this will merge the lines */ AslGbl_NextLineOffset = (UINT32) ftell (Handle); AslGbl_CurrentLineNumber++; State = DT_NORMAL_TEXT; } break; default: DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, "Unknown input state"); return (ASL_EOF); } } } /****************************************************************************** * * FUNCTION: DtScanFile * * PARAMETERS: Handle - Open file handle for the source file * * RETURN: Pointer to start of the constructed parse tree. * * DESCRIPTION: Scan source file, link all field names and values * to the global parse tree: AslGbl_FieldList * *****************************************************************************/ DT_FIELD * DtScanFile ( FILE *Handle) { ACPI_STATUS Status; UINT32 Offset; ACPI_FUNCTION_NAME (DtScanFile); /* Get the file size */ AslGbl_InputByteCount = CmGetFileSize (Handle); if (AslGbl_InputByteCount == ACPI_UINT32_MAX) { AslAbort (); } AslGbl_CurrentLineNumber = 0; AslGbl_CurrentLineOffset = 0; AslGbl_NextLineOffset = 0; /* Scan line-by-line */ while ((Offset = DtGetNextLine (Handle, 0)) != ASL_EOF) { ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Line %2.2u/%4.4X - %s", AslGbl_CurrentLineNumber, Offset, AslGbl_CurrentLineBuffer)); Status = DtParseLine (AslGbl_CurrentLineBuffer, AslGbl_CurrentLineNumber, Offset); if (Status == AE_NOT_FOUND) { break; } } /* Dump the parse tree if debug enabled */ DtDumpFieldList (AslGbl_FieldList); return (AslGbl_FieldList); } /* * Output functions */ /****************************************************************************** * * FUNCTION: DtWriteBinary * * PARAMETERS: DT_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Write one subtable of a binary ACPI table * *****************************************************************************/ static void DtWriteBinary ( DT_SUBTABLE *Subtable, void *Context, void *ReturnValue) { FlWriteFile (ASL_FILE_AML_OUTPUT, Subtable->Buffer, Subtable->Length); } /****************************************************************************** * * FUNCTION: DtOutputBinary * * PARAMETERS: * * RETURN: Status * * DESCRIPTION: Write entire binary ACPI table (result of compilation) * *****************************************************************************/ void DtOutputBinary ( DT_SUBTABLE *RootTable) { if (!RootTable) { return; } /* Walk the entire parse tree, emitting the binary data */ DtWalkTableTree (RootTable, DtWriteBinary, NULL, NULL); AslGbl_TableLength = CmGetFileSize (AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle); if (AslGbl_TableLength == ACPI_UINT32_MAX) { AslAbort (); } } /* * Listing support */ /****************************************************************************** * * FUNCTION: DtDumpBuffer * * PARAMETERS: FileID - Where to write buffer data * Buffer - Buffer to dump * Offset - Offset in current table * Length - Buffer Length * * RETURN: None * * DESCRIPTION: Another copy of DumpBuffer routine (unfortunately). * * TBD: merge dump buffer routines * *****************************************************************************/ static void DtDumpBuffer ( UINT32 FileId, UINT8 *Buffer, UINT32 Offset, UINT32 Length) { UINT32 i; UINT32 j; UINT8 BufChar; FlPrintFile (FileId, "Output: [%3.3Xh %4.4d %3.3Xh] ", Offset, Offset, Length); i = 0; while (i < Length) { if (i >= 16) { FlPrintFile (FileId, "%24s", ""); } /* Print 16 hex chars */ for (j = 0; j < 16;) { if (i + j >= Length) { /* Dump fill spaces */ FlPrintFile (FileId, " "); j++; continue; } FlPrintFile (FileId, "%02X ", Buffer[i+j]); j++; } FlPrintFile (FileId, " "); for (j = 0; j < 16; j++) { if (i + j >= Length) { FlPrintFile (FileId, "\n\n"); return; } BufChar = Buffer[(ACPI_SIZE) i + j]; if (isprint (BufChar)) { FlPrintFile (FileId, "%c", BufChar); } else { FlPrintFile (FileId, "."); } } /* Done with that line. */ FlPrintFile (FileId, "\n"); i += 16; } FlPrintFile (FileId, "\n\n"); } /****************************************************************************** * * FUNCTION: DtDumpFieldList * * PARAMETERS: Field - Root field * * RETURN: None * * DESCRIPTION: Dump the entire field list * *****************************************************************************/ void DtDumpFieldList ( DT_FIELD *Field) { if (!AslGbl_DebugFlag || !Field) { return; } DbgPrint (ASL_DEBUG_OUTPUT, "\nField List:\n" "LineNo ByteOff NameCol Column TableOff " "Flags %32s : %s\n\n", "Name", "Value"); while (Field) { DbgPrint (ASL_DEBUG_OUTPUT, "%.08X %.08X %.08X %.08X %.08X %2.2X %32s : %s\n", Field->Line, Field->ByteOffset, Field->NameColumn, Field->Column, Field->TableOffset, Field->Flags, Field->Name, Field->Value); Field = Field->Next; } DbgPrint (ASL_DEBUG_OUTPUT, "\n\n"); } /****************************************************************************** * * FUNCTION: DtDumpSubtableInfo, DtDumpSubtableTree * * PARAMETERS: DT_WALK_CALLBACK * * RETURN: None * * DESCRIPTION: Info - dump a subtable tree entry with extra information. * Tree - dump a subtable tree formatted by depth indentation. * *****************************************************************************/ static void DtDumpSubtableInfo ( DT_SUBTABLE *Subtable, void *Context, void *ReturnValue) { DbgPrint (ASL_DEBUG_OUTPUT, "[%.04X] %24s %.08X %.08X %.08X %.08X %p %p %p %p\n", Subtable->Depth, Subtable->Name, Subtable->Length, Subtable->TotalLength, Subtable->SizeOfLengthField, Subtable->Flags, Subtable, Subtable->Parent, Subtable->Child, Subtable->Peer); } static void DtDumpSubtableTree ( DT_SUBTABLE *Subtable, void *Context, void *ReturnValue) { DbgPrint (ASL_DEBUG_OUTPUT, "[%.04X] %24s %*s%p (%.02X) - (%.02X) %.02X\n", Subtable->Depth, Subtable->Name, (4 * Subtable->Depth), " ", Subtable, Subtable->Length, Subtable->TotalLength, *Subtable->Buffer); } /****************************************************************************** * * FUNCTION: DtDumpSubtableList * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Dump the raw list of subtables with information, and also * dump the subtable list in formatted tree format. Assists with * the development of new table code. * *****************************************************************************/ void DtDumpSubtableList ( void) { if (!AslGbl_DebugFlag || !AslGbl_RootTable) { return; } DbgPrint (ASL_DEBUG_OUTPUT, "Subtable Info:\n" "Depth Name Length TotalLen LenSize Flags " "This Parent Child Peer\n\n"); DtWalkTableTree (AslGbl_RootTable, DtDumpSubtableInfo, NULL, NULL); DbgPrint (ASL_DEBUG_OUTPUT, "\nSubtable Tree: (Depth, Name, Subtable, Length, TotalLength, Integer Value)\n\n"); DtWalkTableTree (AslGbl_RootTable, DtDumpSubtableTree, NULL, NULL); DbgPrint (ASL_DEBUG_OUTPUT, "\n"); } /****************************************************************************** * * FUNCTION: DtWriteFieldToListing * * PARAMETERS: Buffer - Contains the compiled data * Field - Field node for the input line * Length - Length of the output data * * RETURN: None * * DESCRIPTION: Write one field to the listing file (if listing is enabled). * *****************************************************************************/ void DtWriteFieldToListing ( UINT8 *Buffer, DT_FIELD *Field, UINT32 Length) { UINT8 FileByte; if (!AslGbl_ListingFlag || !Field) { return; } /* Dump the original source line */ FlPrintFile (ASL_FILE_LISTING_OUTPUT, "Input: "); FlSeekFile (ASL_FILE_INPUT, Field->ByteOffset); while (FlReadFile (ASL_FILE_INPUT, &FileByte, 1) == AE_OK) { FlWriteFile (ASL_FILE_LISTING_OUTPUT, &FileByte, 1); if (FileByte == '\n') { break; } } /* Dump the line as parsed and represented internally */ FlPrintFile (ASL_FILE_LISTING_OUTPUT, "Parsed: %*s : %.64s", Field->Column-4, Field->Name, Field->Value); if (strlen (Field->Value) > 64) { FlPrintFile (ASL_FILE_LISTING_OUTPUT, "...Additional data, length 0x%X\n", (UINT32) strlen (Field->Value)); } FlPrintFile (ASL_FILE_LISTING_OUTPUT, "\n"); /* Dump the hex data that will be output for this field */ DtDumpBuffer (ASL_FILE_LISTING_OUTPUT, Buffer, Field->TableOffset, Length); } /****************************************************************************** * * FUNCTION: DtWriteTableToListing * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Write the entire compiled table to the listing file * in hex format * *****************************************************************************/ void DtWriteTableToListing ( void) { UINT8 *Buffer; if (!AslGbl_ListingFlag) { return; } /* Read the entire table from the output file */ Buffer = UtLocalCalloc (AslGbl_TableLength); FlSeekFile (ASL_FILE_AML_OUTPUT, 0); FlReadFile (ASL_FILE_AML_OUTPUT, Buffer, AslGbl_TableLength); /* Dump the raw table data */ AcpiOsRedirectOutput (AslGbl_Files[ASL_FILE_LISTING_OUTPUT].Handle); AcpiOsPrintf ("\n%s: Length %d (0x%X)\n\n", ACPI_RAW_TABLE_DATA_HEADER, AslGbl_TableLength, AslGbl_TableLength); AcpiUtDumpBuffer (Buffer, AslGbl_TableLength, DB_BYTE_DISPLAY, 0); AcpiOsRedirectOutput (stdout); ACPI_FREE (Buffer); } src/acpica/source/compiler/dtparser.l000066400000000000000000000247601465205512700202200ustar00rootroot00000000000000%{ /****************************************************************************** * * Module Name: dtparser.l - Flex input file for table compiler lexer * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "dtparser.y.h" #define YY_NO_INPUT /* No file input, we use strings only */ #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("dtscanner") %} %option noyywrap %option nounput Number [0-9a-fA-F]+ HexNumber 0[xX][0-9a-fA-F]+ DecimalNumber 0[dD][0-9]+ LabelRef $[a-zA-Z][0-9a-zA-Z]* WhiteSpace [ \t\v\r]+ NewLine [\n] %% \( return (OP_EXP_PAREN_OPEN); \) return (OP_EXP_PAREN_CLOSE); \~ return (OP_EXP_ONES_COMPLIMENT); \! return (OP_EXP_LOGICAL_NOT); \* return (OP_EXP_MULTIPLY); \/ return (OP_EXP_DIVIDE); \% return (OP_EXP_MODULO); \+ return (OP_EXP_ADD); \- return (OP_EXP_SUBTRACT); ">>" return (OP_EXP_SHIFT_RIGHT); "<<" return (OP_EXP_SHIFT_LEFT); \< return (OP_EXP_LESS); \> return (OP_EXP_GREATER); "<=" return (OP_EXP_LESS_EQUAL); ">=" return (OP_EXP_GREATER_EQUAL); "==" return (OP_EXP_EQUAL); "!=" return (OP_EXP_NOT_EQUAL); \& return (OP_EXP_AND); \^ return (OP_EXP_XOR); \| return (OP_EXP_OR); "&&" return (OP_EXP_LOGICAL_AND); "||" return (OP_EXP_LOGICAL_OR); <> return (OP_EXP_EOF); /* null end-of-string */ {LabelRef} return (OP_EXP_LABEL); {Number} return (OP_EXP_NUMBER); {HexNumber} return (OP_EXP_HEX_NUMBER); {NewLine} return (OP_EXP_NEW_LINE); {WhiteSpace} /* Ignore */ . return (OP_EXP_EOF); %% /* * Local support functions */ static YY_BUFFER_STATE LexBuffer; /****************************************************************************** * * FUNCTION: DtInitLexer, DtTerminateLexer * * PARAMETERS: String - Input string to be parsed * * RETURN: None * * DESCRIPTION: Initialization and termination routines for lexer. Lexer needs * a buffer to handle strings instead of a file. * *****************************************************************************/ int DtInitLexer ( char *String) { LexBuffer = yy_scan_string (String); return (LexBuffer == NULL); } void DtTerminateLexer ( void) { yy_delete_buffer (LexBuffer); } src/acpica/source/compiler/dtparser.y000066400000000000000000000404751465205512700202360ustar00rootroot00000000000000%{ /****************************************************************************** * * Module Name: dtparser.y - Bison input file for table compiler parser * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtparser") void * AslLocalAllocate (unsigned int Size); /* Bison/yacc configuration */ #undef alloca #define alloca AslLocalAllocate int DtParserlex (void); int DtParserparse (void); void DtParsererror (char const *msg); extern char *DtParsertext; extern DT_FIELD *AslGbl_CurrentField; UINT64 DtParserResult; /* Expression return value */ /* Bison/yacc configuration */ #define yytname DtParsername #define YYDEBUG 1 /* Enable debug output */ #define YYERROR_VERBOSE 1 /* Verbose error messages */ #define YYFLAG -32768 /* Define YYMALLOC/YYFREE to prevent redefinition errors */ #define YYMALLOC malloc #define YYFREE free %} %union { UINT64 value; UINT32 op; } /*! [Begin] no source code translation */ %type Expression %token OP_EXP_EOF %token OP_EXP_NEW_LINE %token OP_EXP_NUMBER %token OP_EXP_HEX_NUMBER %token OP_EXP_DECIMAL_NUMBER %token OP_EXP_LABEL %token OP_EXP_PAREN_OPEN %token OP_EXP_PAREN_CLOSE %left OP_EXP_LOGICAL_OR %left OP_EXP_LOGICAL_AND %left OP_EXP_OR %left OP_EXP_XOR %left OP_EXP_AND %left OP_EXP_EQUAL OP_EXP_NOT_EQUAL %left OP_EXP_GREATER OP_EXP_LESS OP_EXP_GREATER_EQUAL OP_EXP_LESS_EQUAL %left OP_EXP_SHIFT_RIGHT OP_EXP_SHIFT_LEFT %left OP_EXP_ADD OP_EXP_SUBTRACT %left OP_EXP_MULTIPLY OP_EXP_DIVIDE OP_EXP_MODULO %right OP_EXP_ONES_COMPLIMENT OP_EXP_LOGICAL_NOT %% /* * Operator precedence rules (from K&R) * * 1) ( ) * 2) ! ~ (unary operators that are supported here) * 3) * / % * 4) + - * 5) >> << * 6) < > <= >= * 7) == != * 8) & * 9) ^ * 10) | * 11) && * 12) || */ Value : Expression OP_EXP_NEW_LINE { DtParserResult=$1; return 0; } /* End of line (newline) */ | Expression OP_EXP_EOF { DtParserResult=$1; return 0; } /* End of string (0) */ ; Expression /* Unary operators */ : OP_EXP_LOGICAL_NOT Expression { $$ = DtDoOperator ($2, OP_EXP_LOGICAL_NOT, $2);} | OP_EXP_ONES_COMPLIMENT Expression { $$ = DtDoOperator ($2, OP_EXP_ONES_COMPLIMENT, $2);} /* Binary operators */ | Expression OP_EXP_MULTIPLY Expression { $$ = DtDoOperator ($1, OP_EXP_MULTIPLY, $3);} | Expression OP_EXP_DIVIDE Expression { $$ = DtDoOperator ($1, OP_EXP_DIVIDE, $3);} | Expression OP_EXP_MODULO Expression { $$ = DtDoOperator ($1, OP_EXP_MODULO, $3);} | Expression OP_EXP_ADD Expression { $$ = DtDoOperator ($1, OP_EXP_ADD, $3);} | Expression OP_EXP_SUBTRACT Expression { $$ = DtDoOperator ($1, OP_EXP_SUBTRACT, $3);} | Expression OP_EXP_SHIFT_RIGHT Expression { $$ = DtDoOperator ($1, OP_EXP_SHIFT_RIGHT, $3);} | Expression OP_EXP_SHIFT_LEFT Expression { $$ = DtDoOperator ($1, OP_EXP_SHIFT_LEFT, $3);} | Expression OP_EXP_GREATER Expression { $$ = DtDoOperator ($1, OP_EXP_GREATER, $3);} | Expression OP_EXP_LESS Expression { $$ = DtDoOperator ($1, OP_EXP_LESS, $3);} | Expression OP_EXP_GREATER_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_GREATER_EQUAL, $3);} | Expression OP_EXP_LESS_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_LESS_EQUAL, $3);} | Expression OP_EXP_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_EQUAL, $3);} | Expression OP_EXP_NOT_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_NOT_EQUAL, $3);} | Expression OP_EXP_AND Expression { $$ = DtDoOperator ($1, OP_EXP_AND, $3);} | Expression OP_EXP_XOR Expression { $$ = DtDoOperator ($1, OP_EXP_XOR, $3);} | Expression OP_EXP_OR Expression { $$ = DtDoOperator ($1, OP_EXP_OR, $3);} | Expression OP_EXP_LOGICAL_AND Expression { $$ = DtDoOperator ($1, OP_EXP_LOGICAL_AND, $3);} | Expression OP_EXP_LOGICAL_OR Expression { $$ = DtDoOperator ($1, OP_EXP_LOGICAL_OR, $3);} /* Parentheses: '(' Expression ')' */ | OP_EXP_PAREN_OPEN Expression OP_EXP_PAREN_CLOSE { $$ = $2;} /* Label references (prefixed with $) */ | OP_EXP_LABEL { $$ = DtResolveLabel (DtParsertext);} /* * All constants for the data table compiler are in hex, whether a (optional) 0x * prefix is present or not. For example, these two input strings are equivalent: * 1234 * 0x1234 */ /* Non-prefixed hex number */ | OP_EXP_NUMBER { $$ = DtDoConstant (DtParsertext);} /* Standard hex number (0x1234) */ | OP_EXP_HEX_NUMBER { $$ = DtDoConstant (DtParsertext);} /* Possible TBD: Decimal number with prefix (0d1234) - Not supported this time */ | OP_EXP_DECIMAL_NUMBER { $$ = DtDoConstant (DtParsertext);} ; %% /*! [End] no source code translation !*/ /* * Local support functions, including parser entry point */ #define PR_FIRST_PARSE_OPCODE OP_EXP_EOF #define PR_YYTNAME_START 3 /****************************************************************************** * * FUNCTION: DtParsererror * * PARAMETERS: Message - Parser-generated error message * * RETURN: None * * DESCRIPTION: Handler for parser errors * *****************************************************************************/ void DtParsererror ( char const *Message) { DtError (ASL_ERROR, ASL_MSG_SYNTAX, AslGbl_CurrentField, (char *) Message); } /****************************************************************************** * * FUNCTION: DtGetOpName * * PARAMETERS: ParseOpcode - Parser token (OP_EXP_*) * * RETURN: Pointer to the opcode name * * DESCRIPTION: Get the ascii name of the parse opcode for debug output * *****************************************************************************/ char * DtGetOpName ( UINT32 ParseOpcode) { #ifdef ASL_YYTNAME_START /* * First entries (PR_YYTNAME_START) in yytname are special reserved names. * Ignore first 6 characters of name (OP_EXP_) */ return ((char *) yytname [(ParseOpcode - PR_FIRST_PARSE_OPCODE) + PR_YYTNAME_START] + 6); #else return ("[Unknown parser generator]"); #endif } /****************************************************************************** * * FUNCTION: DtEvaluateExpression * * PARAMETERS: ExprString - Expression to be evaluated. Must be * terminated by either a newline or a NUL * string terminator * * RETURN: 64-bit value for the expression * * DESCRIPTION: Main entry point for the DT expression parser * *****************************************************************************/ UINT64 DtEvaluateExpression ( char *ExprString) { DbgPrint (ASL_DEBUG_OUTPUT, "**** Input expression: %s (Base 16)\n", ExprString); /* Point lexer to the input string */ if (DtInitLexer (ExprString)) { DtError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, AslGbl_CurrentField, "Could not initialize lexer"); return (0); } /* Parse/Evaluate the input string (value returned in DtParserResult) */ DtParserparse (); DtTerminateLexer (); DbgPrint (ASL_DEBUG_OUTPUT, "**** Parser returned value: %u (%8.8X%8.8X)\n", (UINT32) DtParserResult, ACPI_FORMAT_UINT64 (DtParserResult)); return (DtParserResult); } src/acpica/source/compiler/dtsubtable.c000066400000000000000000000372041465205512700205110ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dtsubtable.c - handling of subtables within ACPI tables * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtsubtable") /****************************************************************************** * * FUNCTION: DtCreateSubtable * * PARAMETERS: Buffer - Input buffer * Length - Buffer length * RetSubtable - Returned newly created subtable * * RETURN: None * * DESCRIPTION: Create a subtable that is not listed with ACPI_DMTABLE_INFO * For example, FACS has 24 bytes reserved at the end * and it's not listed at AcpiDmTableInfoFacs * *****************************************************************************/ void DtCreateSubtable ( UINT8 *Buffer, UINT32 Length, DT_SUBTABLE **RetSubtable) { DT_SUBTABLE *Subtable; char *String; Subtable = UtSubtableCacheCalloc (); /* Create a new buffer for the subtable data */ String = UtLocalCacheCalloc (Length); Subtable->Buffer = ACPI_CAST_PTR (UINT8, String); memcpy (Subtable->Buffer, Buffer, Length); Subtable->Length = Length; Subtable->TotalLength = Length; *RetSubtable = Subtable; } /****************************************************************************** * * FUNCTION: DtInsertSubtable * * PARAMETERS: ParentTable - The Parent of the new subtable * Subtable - The new subtable to insert * * RETURN: None * * DESCRIPTION: Insert the new subtable to the parent table * *****************************************************************************/ void DtInsertSubtable ( DT_SUBTABLE *ParentTable, DT_SUBTABLE *Subtable) { DT_SUBTABLE *ChildTable; Subtable->Peer = NULL; Subtable->Parent = ParentTable; Subtable->Depth = ParentTable->Depth + 1; /* Link the new entry into the child list */ if (!ParentTable->Child) { ParentTable->Child = Subtable; } else { /* Walk to the end of the child list */ ChildTable = ParentTable->Child; while (ChildTable->Peer) { ChildTable = ChildTable->Peer; } /* Add new subtable at the end of the child list */ ChildTable->Peer = Subtable; } } /****************************************************************************** * * FUNCTION: DtPushSubtable * * PARAMETERS: Subtable - Subtable to push * * RETURN: None * * DESCRIPTION: Push a subtable onto a subtable stack * *****************************************************************************/ void DtPushSubtable ( DT_SUBTABLE *Subtable) { Subtable->StackTop = AslGbl_SubtableStack; AslGbl_SubtableStack = Subtable; } /****************************************************************************** * * FUNCTION: DtPopSubtable * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Pop a subtable from a subtable stack. Uses global SubtableStack * *****************************************************************************/ void DtPopSubtable ( void) { DT_SUBTABLE *Subtable; Subtable = AslGbl_SubtableStack; if (Subtable) { AslGbl_SubtableStack = Subtable->StackTop; } } /****************************************************************************** * * FUNCTION: DtPeekSubtable * * PARAMETERS: None * * RETURN: The subtable on top of stack * * DESCRIPTION: Get the subtable on top of stack * *****************************************************************************/ DT_SUBTABLE * DtPeekSubtable ( void) { return (AslGbl_SubtableStack); } /****************************************************************************** * * FUNCTION: DtGetNextSubtable * * PARAMETERS: ParentTable - Parent table whose children we are * getting * ChildTable - Previous child that was found. * The NEXT child will be returned * * RETURN: Pointer to the NEXT child or NULL if none is found. * * DESCRIPTION: Return the next peer subtable within the tree. * *****************************************************************************/ DT_SUBTABLE * DtGetNextSubtable ( DT_SUBTABLE *ParentTable, DT_SUBTABLE *ChildTable) { ACPI_FUNCTION_ENTRY (); if (!ChildTable) { /* It's really the parent's _scope_ that we want */ return (ParentTable->Child); } /* Otherwise just return the next peer (NULL if at end-of-list) */ return (ChildTable->Peer); } /****************************************************************************** * * FUNCTION: DtGetParentSubtable * * PARAMETERS: Subtable - Current subtable * * RETURN: Parent of the given subtable * * DESCRIPTION: Get the parent of the given subtable in the tree * *****************************************************************************/ DT_SUBTABLE * DtGetParentSubtable ( DT_SUBTABLE *Subtable) { if (!Subtable) { return (NULL); } return (Subtable->Parent); } /****************************************************************************** * * FUNCTION: DtGetSubtableLength * * PARAMETERS: Field - Current field list pointer * Info - Data table info * * RETURN: Subtable length * * DESCRIPTION: Get length of bytes needed to compile the subtable * *****************************************************************************/ UINT32 DtGetSubtableLength ( DT_FIELD *Field, ACPI_DMTABLE_INFO *Info) { UINT32 ByteLength = 0; UINT8 Step; UINT8 i; /* Walk entire Info table; Null name terminates */ for (; Info->Name; Info++) { if (Info->Opcode == ACPI_DMT_EXTRA_TEXT) { continue; } if (!Field) { goto Error; } ByteLength += DtGetFieldLength (Field, Info); switch (Info->Opcode) { case ACPI_DMT_GAS: Step = 5; break; case ACPI_DMT_HESTNTFY: Step = 9; break; case ACPI_DMT_IORTMEM: Step = 10; break; default: Step = 1; break; } for (i = 0; i < Step; i++) { if (!Field) { goto Error; } Field = Field->Next; } } return (ByteLength); Error: if (!Field) { sprintf (AslGbl_MsgBuffer, "Found NULL field - Field name \"%s\" needed", Info->Name); DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, AslGbl_MsgBuffer); } return (ASL_EOF); } /****************************************************************************** * * FUNCTION: DtSetSubtableLength * * PARAMETERS: Subtable - Subtable * * RETURN: None * * DESCRIPTION: Set length of the subtable into its length field * *****************************************************************************/ void DtSetSubtableLength ( DT_SUBTABLE *Subtable) { if (!Subtable->LengthField) { return; } memcpy (Subtable->LengthField, &Subtable->TotalLength, Subtable->SizeOfLengthField); } src/acpica/source/compiler/dttable.c000066400000000000000000000350211465205512700177720ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dttable.c - handling for specific ACPI tables * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ /* Compile routines for the basic ACPI tables */ #include "aslcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dttable") /****************************************************************************** * * FUNCTION: DtCompileRsdp * * PARAMETERS: PFieldList - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile RSDP. * *****************************************************************************/ ACPI_STATUS DtCompileRsdp ( DT_FIELD **PFieldList) { DT_SUBTABLE *Subtable; ACPI_TABLE_RSDP *Rsdp; ACPI_RSDP_EXTENSION *RsdpExtension; ACPI_STATUS Status; /* Compile the "common" RSDP (ACPI 1.0) */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoRsdp1, &AslGbl_RootTable); if (ACPI_FAILURE (Status)) { return (Status); } Rsdp = ACPI_CAST_PTR (ACPI_TABLE_RSDP, AslGbl_RootTable->Buffer); DtSetTableChecksum (&Rsdp->Checksum); if (Rsdp->Revision > 0) { /* Compile the "extended" part of the RSDP as a subtable */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoRsdp2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (AslGbl_RootTable, Subtable); /* Set length and extended checksum for entire RSDP */ RsdpExtension = ACPI_CAST_PTR (ACPI_RSDP_EXTENSION, Subtable->Buffer); RsdpExtension->Length = AslGbl_RootTable->Length + Subtable->Length; DtSetTableChecksum (&RsdpExtension->ExtendedChecksum); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileFadt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile FADT (signature FACP). * *****************************************************************************/ #define ACPI_XDSDT_LOCATION_IN_LIST 11 ACPI_STATUS DtCompileFadt ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *DsdtFieldList; ACPI_TABLE_FADT *Table; UINT8 Revision; UINT32 DsdtAddress; UINT64 X_DsdtAddress; UINT32 i; /* Get the table revision and 32-bit DSDT Address definition */ DsdtFieldList = (*PFieldList)->Next; Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt1, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); Table = ACPI_CAST_PTR (ACPI_TABLE_FADT, ParentTable->Buffer); Revision = Table->Header.Revision; DsdtAddress = Table->Dsdt; /* FADT version 1 has only 32-bit addresses - error if DSDT address is NULL */ if ((Revision == 1) && (!DsdtAddress)) { DtError (ASL_ERROR, ASL_MSG_ZERO_VALUE, DsdtFieldList, NULL); } if (Revision == 2) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); } else if (Revision > 2) { /* * Rev 3 and greater have 64-bit addresses (as well as 32-bit). * Get the 64-bit DSDT (X_DSDT) Address definition. Note: This * appears at field list offset 11 within AcpiDmTableInfoFadt3. */ DsdtFieldList = *PFieldList; for (i = 0; i < ACPI_XDSDT_LOCATION_IN_LIST; i++) { DsdtFieldList = DsdtFieldList->Next; if (!DsdtFieldList) { return (ASL_MSG_BAD_PARSE_TREE); } } Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt3, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); Table = ACPI_CAST_PTR (ACPI_TABLE_FADT, ParentTable->Buffer); X_DsdtAddress = Table->XDsdt; /* * Error if both the 32-bit DSDT address and the * 64-bit X_DSDT address are zero. */ if ((!X_DsdtAddress) && (!DsdtAddress)) { DtError (ASL_ERROR, ASL_MSG_TWO_ZERO_VALUES, DsdtFieldList, NULL); } /* Fields specific to FADT Revision 5 (appended to previous) */ if (Revision >= 5) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt5, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); } /* Fields specific to FADT Revision 6 (appended to previous) */ if (Revision >= 6) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt6, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); } } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileFacs * * PARAMETERS: PFieldList - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile FACS. * *****************************************************************************/ ACPI_STATUS DtCompileFacs ( DT_FIELD **PFieldList) { DT_SUBTABLE *Subtable; UINT8 *ReservedBuffer; ACPI_STATUS Status; UINT32 ReservedSize; Status = DtCompileTable (PFieldList, AcpiDmTableInfoFacs, &AslGbl_RootTable); if (ACPI_FAILURE (Status)) { return (Status); } /* Large FACS reserved area at the end of the table */ ReservedSize = (UINT32) sizeof (((ACPI_TABLE_FACS *) NULL)->Reserved1); ReservedBuffer = UtLocalCalloc (ReservedSize); DtCreateSubtable (ReservedBuffer, ReservedSize, &Subtable); ACPI_FREE (ReservedBuffer); DtInsertSubtable (AslGbl_RootTable, Subtable); return (AE_OK); } src/acpica/source/compiler/dttable1.c000066400000000000000000002452641465205512700200670ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dttable1.c - handling for specific ACPI tables * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ /* Compile all complex data tables, signatures starting with A-I */ #include "aslcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dttable1") static ACPI_DMTABLE_INFO TableInfoAsfAddress[] = { {ACPI_DMT_BUFFER, 0, "Addresses", 0}, {ACPI_DMT_EXIT, 0, NULL, 0} }; static ACPI_DMTABLE_INFO TableInfoDmarPciPath[] = { {ACPI_DMT_PCI_PATH, 0, "PCI Path", 0}, {ACPI_DMT_EXIT, 0, NULL, 0} }; /****************************************************************************** * * FUNCTION: DtCompileAest * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile AEST. * * NOTE: Assumes the following table structure: * For all AEST Error Nodes: * 1) An AEST Error Node, followed immediately by: * 2) Any node-specific data * 3) An Interface Structure (one) * 4) A list (array) of Interrupt Structures, the count as specified * in the NodeInterruptCount field of the Error Node header. * * AEST - ARM Error Source table. Conforms to: * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020 * *****************************************************************************/ ACPI_STATUS DtCompileAest ( void **List) { ACPI_AEST_HEADER *ErrorNodeHeader; ACPI_AEST_PROCESSOR *AestProcessor; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; ACPI_DMTABLE_INFO *InfoTable; ACPI_STATUS Status; UINT32 i; UINT32 Offset; DT_FIELD **PFieldList = (DT_FIELD **) List; while (*PFieldList) { /* Compile the common error node header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* Everything past the error node header will be a subtable */ DtPushSubtable (Subtable); /* * Compile the node-specific structure (Based on the error * node header Type field) */ ErrorNodeHeader = ACPI_CAST_PTR (ACPI_AEST_HEADER, Subtable->Buffer); /* Point past the common error node header */ Offset = sizeof (ACPI_AEST_HEADER); ErrorNodeHeader->NodeSpecificOffset = Offset; /* Decode the error node type */ switch (ErrorNodeHeader->Type) { case ACPI_AEST_PROCESSOR_ERROR_NODE: InfoTable = AcpiDmTableInfoAestProcError; break; case ACPI_AEST_MEMORY_ERROR_NODE: InfoTable = AcpiDmTableInfoAestMemError; break; case ACPI_AEST_SMMU_ERROR_NODE: InfoTable = AcpiDmTableInfoAestSmmuError; break; case ACPI_AEST_VENDOR_ERROR_NODE: InfoTable = AcpiDmTableInfoAestVendorError; break; case ACPI_AEST_GIC_ERROR_NODE: InfoTable = AcpiDmTableInfoAestGicError; break; /* Error case below */ default: AcpiOsPrintf ("Unknown AEST Subtable Type: %X\n", ErrorNodeHeader->Type); return (AE_ERROR); } Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } /* Point past the node-specific structure */ Offset += Subtable->Length; ErrorNodeHeader->NodeInterfaceOffset = Offset; ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* Compile any additional node-specific substructures */ if (ErrorNodeHeader->Type == ACPI_AEST_PROCESSOR_ERROR_NODE) { /* * Special handling for PROCESSOR_ERROR_NODE subtables * (to handle the Resource Substructure via the ResourceType * field). */ AestProcessor = ACPI_CAST_PTR (ACPI_AEST_PROCESSOR, Subtable->Buffer); switch (AestProcessor->ResourceType) { case ACPI_AEST_CACHE_RESOURCE: InfoTable = AcpiDmTableInfoAestCacheRsrc; break; case ACPI_AEST_TLB_RESOURCE: InfoTable = AcpiDmTableInfoAestTlbRsrc; break; case ACPI_AEST_GENERIC_RESOURCE: InfoTable = AcpiDmTableInfoAestGenRsrc; AcpiOsPrintf ("Generic Resource Type (%X) is not supported at this time\n", AestProcessor->ResourceType); return (AE_ERROR); /* Error case below */ default: AcpiOsPrintf ("Unknown AEST Processor Resource Type: %X\n", AestProcessor->ResourceType); return (AE_ERROR); } Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } /* Point past the resource substructure subtable */ Offset += Subtable->Length; ErrorNodeHeader->NodeInterfaceOffset = Offset; ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); } /* Compile the (required) node interface structure */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXface, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ErrorNodeHeader->NodeInterruptOffset = 0; ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* Compile each of the node interrupt structures */ if (ErrorNodeHeader->NodeInterruptCount) { /* Point to the first interrupt structure */ Offset += Subtable->Length; ErrorNodeHeader->NodeInterruptOffset = Offset; } /* Compile each of the interrupt structures */ for (i = 0; i < ErrorNodeHeader->NodeInterruptCount; i++) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXrupt, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); } /* Prepare for the next AEST Error node */ DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileApmt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile APMT. * *****************************************************************************/ ACPI_STATUS DtCompileApmt ( void **List) { ACPI_STATUS Status; ACPI_TABLE_HEADER *Header; ACPI_APMT_NODE *ApmtNode; ACPI_APMT_NODE *PeerApmtNode; DT_SUBTABLE *Subtable; DT_SUBTABLE *PeerSubtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD**)List; DT_FIELD *SubtableStart; UINT32 CurLength; char MsgBuffer[64] = ""; ParentTable = DtPeekSubtable(); Header = ACPI_CAST_PTR(ACPI_TABLE_HEADER, ParentTable->Buffer); CurLength = sizeof(ACPI_TABLE_HEADER); /* Walk the parse tree */ while (*PFieldList) { /* APMT Node Subtable */ SubtableStart = *PFieldList; Status = DtCompileTable(PFieldList, AcpiDmTableInfoApmtNode, &Subtable); if (ACPI_FAILURE(Status)) { return (Status); } ApmtNode = ACPI_CAST_PTR(ACPI_APMT_NODE, Subtable->Buffer); if (ApmtNode->Length != sizeof(ACPI_APMT_NODE)) { DtFatal(ASL_MSG_INVALID_LENGTH, SubtableStart, "APMT"); return (AE_ERROR); } if (ApmtNode->Type >= ACPI_APMT_NODE_TYPE_COUNT) { snprintf(MsgBuffer, 64, "Node Type : 0x%X", ApmtNode->Type); DtFatal(ASL_MSG_INVALID_TYPE, SubtableStart, MsgBuffer); return (AE_ERROR); } PeerSubtable = DtGetNextSubtable(ParentTable, NULL); /* Validate the node id needs to be unique. */ while(PeerSubtable) { PeerApmtNode = ACPI_CAST_PTR(ACPI_APMT_NODE, PeerSubtable->Buffer); if (PeerApmtNode->Id == ApmtNode->Id) { snprintf(MsgBuffer, 64, "Node Id : 0x%X existed", ApmtNode->Id); DtFatal(ASL_MSG_DUPLICATE_ITEM, SubtableStart, MsgBuffer); return (AE_ERROR); } PeerSubtable = DtGetNextSubtable(ParentTable, PeerSubtable); } CurLength += ApmtNode->Length; DtInsertSubtable(ParentTable, Subtable); } if (Header->Length != CurLength) { snprintf(MsgBuffer, 64, " - APMT Length : %u (expected: %u)", Header->Length, CurLength); DtFatal(ASL_MSG_INVALID_LENGTH, NULL, MsgBuffer); return (AE_ERROR); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileAsf * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile ASF!. * *****************************************************************************/ ACPI_STATUS DtCompileAsf ( void **List) { ACPI_ASF_INFO *AsfTable; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; ACPI_DMTABLE_INFO *InfoTable; ACPI_DMTABLE_INFO *DataInfoTable = NULL; UINT32 DataCount = 0; ACPI_STATUS Status; UINT32 i; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; while (*PFieldList) { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoAsfHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); AsfTable = ACPI_CAST_PTR (ACPI_ASF_INFO, Subtable->Buffer); switch (AsfTable->Header.Type & 0x7F) /* Mask off top bit */ { case ACPI_ASF_TYPE_INFO: InfoTable = AcpiDmTableInfoAsf0; break; case ACPI_ASF_TYPE_ALERT: InfoTable = AcpiDmTableInfoAsf1; break; case ACPI_ASF_TYPE_CONTROL: InfoTable = AcpiDmTableInfoAsf2; break; case ACPI_ASF_TYPE_BOOT: InfoTable = AcpiDmTableInfoAsf3; break; case ACPI_ASF_TYPE_ADDRESS: InfoTable = AcpiDmTableInfoAsf4; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "ASF!"); return (AE_ERROR); } Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); switch (AsfTable->Header.Type & 0x7F) /* Mask off top bit */ { case ACPI_ASF_TYPE_INFO: DataInfoTable = NULL; break; case ACPI_ASF_TYPE_ALERT: DataInfoTable = AcpiDmTableInfoAsf1a; DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, ACPI_SUB_PTR (UINT8, Subtable->Buffer, sizeof (ACPI_ASF_HEADER)))->Alerts; break; case ACPI_ASF_TYPE_CONTROL: DataInfoTable = AcpiDmTableInfoAsf2a; DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, ACPI_SUB_PTR (UINT8, Subtable->Buffer, sizeof (ACPI_ASF_HEADER)))->Controls; break; case ACPI_ASF_TYPE_BOOT: DataInfoTable = NULL; break; case ACPI_ASF_TYPE_ADDRESS: DataInfoTable = TableInfoAsfAddress; DataCount = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, ACPI_SUB_PTR (UINT8, Subtable->Buffer, sizeof (ACPI_ASF_HEADER)))->Devices; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "ASF!"); return (AE_ERROR); } if (DataInfoTable) { switch (AsfTable->Header.Type & 0x7F) { case ACPI_ASF_TYPE_ADDRESS: while (DataCount > 0) { Status = DtCompileTable (PFieldList, DataInfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); DataCount = DataCount - Subtable->Length; } break; default: for (i = 0; i < DataCount; i++) { Status = DtCompileTable (PFieldList, DataInfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); } break; } } DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileAspt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile ASPT. * *****************************************************************************/ ACPI_STATUS DtCompileAspt ( void **List) { ACPI_ASPT_HEADER *AsptTable; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; ACPI_DMTABLE_INFO *InfoTable; ACPI_STATUS Status; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; Status = DtCompileTable (PFieldList, AcpiDmTableInfoAspt, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); while (*PFieldList) { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoAsptHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); AsptTable = ACPI_CAST_PTR (ACPI_ASPT_HEADER, Subtable->Buffer); switch (AsptTable->Type) /* Mask off top bit */ { case ACPI_ASPT_TYPE_GLOBAL_REGS: InfoTable = AcpiDmTableInfoAspt0; break; case ACPI_ASPT_TYPE_SEV_MBOX_REGS: InfoTable = AcpiDmTableInfoAspt1; break; case ACPI_ASPT_TYPE_ACPI_MBOX_REGS: InfoTable = AcpiDmTableInfoAspt2; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "ASPT"); return (AE_ERROR); } Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileCdat * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile CDAT. * *****************************************************************************/ ACPI_STATUS DtCompileCdat ( void **List) { ACPI_STATUS Status = AE_OK; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; ACPI_CDAT_HEADER *CdatHeader; ACPI_DMTABLE_INFO *InfoTable = NULL; DT_FIELD *SubtableStart; /* Walk the parse tree. * * Note: Main table consists of only the CDAT table header * (This is not the standard ACPI table header, however)-- * Followed by some number of subtables. */ while (*PFieldList) { SubtableStart = *PFieldList; /* Compile the expected CDAT Subtable header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoCdatHeader, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); CdatHeader = ACPI_CAST_PTR (ACPI_CDAT_HEADER, Subtable->Buffer); /* Decode the subtable by type */ switch (CdatHeader->Type) { case ACPI_CDAT_TYPE_DSMAS: InfoTable = AcpiDmTableInfoCdat0; break; case ACPI_CDAT_TYPE_DSLBIS: InfoTable = AcpiDmTableInfoCdat1; break; case ACPI_CDAT_TYPE_DSMSCIS: InfoTable = AcpiDmTableInfoCdat2; break; case ACPI_CDAT_TYPE_DSIS: InfoTable = AcpiDmTableInfoCdat3; break; case ACPI_CDAT_TYPE_DSEMTS: InfoTable = AcpiDmTableInfoCdat4; break; case ACPI_CDAT_TYPE_SSLBIS: InfoTable = AcpiDmTableInfoCdat5; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "CDAT"); } /* Compile the CDAT subtable */ Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); switch (CdatHeader->Type) { /* Multiple entries supported for this type */ case ACPI_CDAT_TYPE_SSLBIS: /* * Check for multiple SSLBEs */ while (*PFieldList && !AcpiUtStricmp ((*PFieldList)->Name, "Port X ID")) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoCdatEntries, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); } break; default: break; } /* Pop off the CDAT Subtable header subtree */ DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileCedt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile CEDT. * *****************************************************************************/ ACPI_STATUS DtCompileCedt ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; ACPI_CEDT_HEADER *CedtHeader; DT_FIELD *SubtableStart; /* Walk the parse tree */ while (*PFieldList) { /* if CFMWS and has more than one target, then set to zero later */ int InsertFlag = 1; SubtableStart = *PFieldList; /* CEDT Header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedtHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); CedtHeader = ACPI_CAST_PTR (ACPI_CEDT_HEADER, Subtable->Buffer); switch (CedtHeader->Type) { case ACPI_CEDT_TYPE_CHBS: Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt0, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } break; case ACPI_CEDT_TYPE_CFMWS: { unsigned char *dump; unsigned int idx, offset, max = 0; /* Compile table with first "Interleave target" */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt1, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } /* Look in buffer for the number of targets */ offset = (unsigned int) ACPI_OFFSET (ACPI_CEDT_CFMWS, InterleaveWays); dump = (unsigned char *) Subtable->Buffer - 4; /* place at beginning of cedt1 */ max = 0x01 << dump[offset]; /* 2^max, so 0=1, 1=2, 2=4, 3=8. 8 is MAX */ if (max > 8) max=1; /* Error in encoding Interleaving Ways. */ if (max == 1) /* if only one target, then break here. */ break; /* break if only one target. */ /* We need to add more interleave targets, so write the current Subtable. */ ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* Insert AcpiDmTableInfoCedt1 table so we can put in */ DtPushSubtable (Subtable); /* the targets > the first. */ /* Now, find out all interleave targets beyond the first. */ for (idx = 1; idx < max; idx++) { ParentTable = DtPeekSubtable (); if (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt1_te, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (Subtable) { DtInsertSubtable (ParentTable, Subtable); /* got a target, so insert table. */ InsertFlag = 0; } } } DtPopSubtable (); ParentTable = DtPeekSubtable (); break; } default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "CEDT"); return (AE_ERROR); } ParentTable = DtPeekSubtable (); if (InsertFlag == 1) { DtInsertSubtable (ParentTable, Subtable); } DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileCpep * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile CPEP. * *****************************************************************************/ ACPI_STATUS DtCompileCpep ( void **List) { ACPI_STATUS Status; Status = DtCompileTwoSubtables (List, AcpiDmTableInfoCpep, AcpiDmTableInfoCpep0); return (Status); } /****************************************************************************** * * FUNCTION: DtCompileCsrt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile CSRT. * *****************************************************************************/ ACPI_STATUS DtCompileCsrt ( void **List) { ACPI_STATUS Status = AE_OK; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; UINT32 DescriptorCount; UINT32 GroupLength; /* Subtables (Resource Groups) */ ParentTable = DtPeekSubtable (); while (*PFieldList) { /* Resource group subtable */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt0, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } /* Compute the number of resource descriptors */ GroupLength = (ACPI_CAST_PTR (ACPI_CSRT_GROUP, Subtable->Buffer))->Length - (ACPI_CAST_PTR (ACPI_CSRT_GROUP, Subtable->Buffer))->SharedInfoLength - sizeof (ACPI_CSRT_GROUP); DescriptorCount = (GroupLength / sizeof (ACPI_CSRT_DESCRIPTOR)); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); ParentTable = DtPeekSubtable (); /* Shared info subtable (One per resource group) */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt1, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); /* Sub-Subtables (Resource Descriptors) */ while (*PFieldList && DescriptorCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); ParentTable = DtPeekSubtable (); if (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (Subtable) { DtInsertSubtable (ParentTable, Subtable); } } DtPopSubtable (); ParentTable = DtPeekSubtable (); DescriptorCount--; } DtPopSubtable (); ParentTable = DtPeekSubtable (); } return (Status); } /****************************************************************************** * * FUNCTION: DtCompileDbg2 * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile DBG2. * *****************************************************************************/ ACPI_STATUS DtCompileDbg2 ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; UINT32 SubtableCount; ACPI_DBG2_HEADER *Dbg2Header; ACPI_DBG2_DEVICE *DeviceInfo; UINT16 CurrentOffset; UINT32 i; /* Main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* Main table fields */ Dbg2Header = ACPI_CAST_PTR (ACPI_DBG2_HEADER, Subtable->Buffer); Dbg2Header->InfoOffset = sizeof (ACPI_TABLE_HEADER) + ACPI_PTR_DIFF ( ACPI_ADD_PTR (UINT8, Dbg2Header, sizeof (ACPI_DBG2_HEADER)), Dbg2Header); SubtableCount = Dbg2Header->InfoCount; DtPushSubtable (Subtable); /* Process all Device Information subtables (Count = InfoCount) */ while (*PFieldList && SubtableCount) { /* Subtable: Debug Device Information */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Device, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DeviceInfo = ACPI_CAST_PTR (ACPI_DBG2_DEVICE, Subtable->Buffer); CurrentOffset = (UINT16) sizeof (ACPI_DBG2_DEVICE); ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); ParentTable = DtPeekSubtable (); /* BaseAddressRegister GAS array (Required, size is RegisterCount) */ DeviceInfo->BaseAddressOffset = CurrentOffset; for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Addr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } CurrentOffset += (UINT16) sizeof (ACPI_GENERIC_ADDRESS); DtInsertSubtable (ParentTable, Subtable); } /* AddressSize array (Required, size = RegisterCount) */ DeviceInfo->AddressSizeOffset = CurrentOffset; for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Size, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } CurrentOffset += (UINT16) sizeof (UINT32); DtInsertSubtable (ParentTable, Subtable); } /* NamespaceString device identifier (Required, size = NamePathLength) */ DeviceInfo->NamepathOffset = CurrentOffset; Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Name, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } /* Update the device info header */ DeviceInfo->NamepathLength = (UINT16) Subtable->Length; CurrentOffset += (UINT16) DeviceInfo->NamepathLength; DtInsertSubtable (ParentTable, Subtable); /* OemData - Variable-length data (Optional, size = OemDataLength) */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2OemData, &Subtable); if (Status == AE_END_OF_TABLE) { /* optional field was not found and we're at the end of the file */ goto subtableDone; } else if (ACPI_FAILURE (Status)) { return (Status); } /* Update the device info header (zeros if no OEM data present) */ DeviceInfo->OemDataOffset = 0; DeviceInfo->OemDataLength = 0; /* Optional subtable (OemData) */ if (Subtable && Subtable->Length) { DeviceInfo->OemDataOffset = CurrentOffset; DeviceInfo->OemDataLength = (UINT16) Subtable->Length; DtInsertSubtable (ParentTable, Subtable); } subtableDone: SubtableCount--; DtPopSubtable (); /* Get next Device Information subtable */ } DtPopSubtable (); return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileDmar * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile DMAR. * *****************************************************************************/ ACPI_STATUS DtCompileDmar ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; ACPI_DMTABLE_INFO *InfoTable; ACPI_DMAR_HEADER *DmarHeader; ACPI_DMAR_DEVICE_SCOPE *DmarDeviceScope; UINT32 DeviceScopeLength; UINT32 PciPathLength; Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); while (*PFieldList) { /* DMAR Header */ SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); DmarHeader = ACPI_CAST_PTR (ACPI_DMAR_HEADER, Subtable->Buffer); switch (DmarHeader->Type) { case ACPI_DMAR_TYPE_HARDWARE_UNIT: InfoTable = AcpiDmTableInfoDmar0; break; case ACPI_DMAR_TYPE_RESERVED_MEMORY: InfoTable = AcpiDmTableInfoDmar1; break; case ACPI_DMAR_TYPE_ROOT_ATS: InfoTable = AcpiDmTableInfoDmar2; break; case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: InfoTable = AcpiDmTableInfoDmar3; break; case ACPI_DMAR_TYPE_NAMESPACE: InfoTable = AcpiDmTableInfoDmar4; break; case ACPI_DMAR_TYPE_SATC: InfoTable = AcpiDmTableInfoDmar5; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "DMAR"); return (AE_ERROR); } /* DMAR Subtable */ Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* * Optional Device Scope subtables */ if ((DmarHeader->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || (DmarHeader->Type == ACPI_DMAR_TYPE_NAMESPACE)) { /* These types do not support device scopes */ DtPopSubtable (); continue; } DtPushSubtable (Subtable); DeviceScopeLength = DmarHeader->Length - Subtable->Length - ParentTable->Length; while (DeviceScopeLength) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarScope, &Subtable); if (Status == AE_NOT_FOUND) { break; } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); DmarDeviceScope = ACPI_CAST_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable->Buffer); /* Optional PCI Paths */ PciPathLength = DmarDeviceScope->Length - Subtable->Length; while (PciPathLength) { Status = DtCompileTable (PFieldList, TableInfoDmarPciPath, &Subtable); if (Status == AE_NOT_FOUND) { DtPopSubtable (); break; } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); PciPathLength -= Subtable->Length; } DtPopSubtable (); DeviceScopeLength -= DmarDeviceScope->Length; } DtPopSubtable (); DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileDrtm * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile DRTM. * *****************************************************************************/ ACPI_STATUS DtCompileDrtm ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; UINT32 Count; /* ACPI_TABLE_DRTM *Drtm; */ ACPI_DRTM_VTABLE_LIST *DrtmVtl; ACPI_DRTM_RESOURCE_LIST *DrtmRl; /* ACPI_DRTM_DPS_ID *DrtmDps; */ ParentTable = DtPeekSubtable (); /* Compile DRTM header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); /* * Using ACPI_SUB_PTR, We needn't define a separate structure. Care * should be taken to avoid accessing ACPI_TABLE_HADER fields. */ #if 0 Drtm = ACPI_SUB_PTR (ACPI_TABLE_DRTM, Subtable->Buffer, sizeof (ACPI_TABLE_HEADER)); #endif /* Compile VTL */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm0, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); DrtmVtl = ACPI_CAST_PTR (ACPI_DRTM_VTABLE_LIST, Subtable->Buffer); DtPushSubtable (Subtable); ParentTable = DtPeekSubtable (); Count = 0; while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm0a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { break; } DtInsertSubtable (ParentTable, Subtable); Count++; } DrtmVtl->ValidatedTableCount = Count; DtPopSubtable (); ParentTable = DtPeekSubtable (); /* Compile RL */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm1, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); DrtmRl = ACPI_CAST_PTR (ACPI_DRTM_RESOURCE_LIST, Subtable->Buffer); DtPushSubtable (Subtable); ParentTable = DtPeekSubtable (); Count = 0; while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm1a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { break; } DtInsertSubtable (ParentTable, Subtable); Count++; } DrtmRl->ResourceCount = Count; DtPopSubtable (); ParentTable = DtPeekSubtable (); /* Compile DPS */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); /* DrtmDps = ACPI_CAST_PTR (ACPI_DRTM_DPS_ID, Subtable->Buffer);*/ return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileEinj * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile EINJ. * *****************************************************************************/ ACPI_STATUS DtCompileEinj ( void **List) { ACPI_STATUS Status; Status = DtCompileTwoSubtables (List, AcpiDmTableInfoEinj, AcpiDmTableInfoEinj0); return (Status); } /****************************************************************************** * * FUNCTION: DtCompileErst * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile ERST. * *****************************************************************************/ ACPI_STATUS DtCompileErst ( void **List) { ACPI_STATUS Status; Status = DtCompileTwoSubtables (List, AcpiDmTableInfoErst, AcpiDmTableInfoEinj0); return (Status); } /****************************************************************************** * * FUNCTION: DtCompileGtdt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile GTDT. * *****************************************************************************/ ACPI_STATUS DtCompileGtdt ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; ACPI_SUBTABLE_HEADER *GtdtHeader; ACPI_DMTABLE_INFO *InfoTable; UINT32 GtCount; ACPI_TABLE_HEADER *Header; ParentTable = DtPeekSubtable (); Header = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer); /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } /* GTDT revision 3 later contains 2 extra fields before subtables */ if (Header->Revision > 2) { ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdtEl2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); while (*PFieldList) { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdtHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); GtdtHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer); switch (GtdtHeader->Type) { case ACPI_GTDT_TYPE_TIMER_BLOCK: InfoTable = AcpiDmTableInfoGtdt0; break; case ACPI_GTDT_TYPE_WATCHDOG: InfoTable = AcpiDmTableInfoGtdt1; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "GTDT"); return (AE_ERROR); } Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* * Additional GT block subtable data */ switch (GtdtHeader->Type) { case ACPI_GTDT_TYPE_TIMER_BLOCK: DtPushSubtable (Subtable); ParentTable = DtPeekSubtable (); GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, Subtable->Buffer - sizeof(ACPI_GTDT_HEADER)))->TimerCount; while (GtCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt0a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); GtCount--; } DtPopSubtable (); break; default: break; } DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileFpdt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile FPDT. * *****************************************************************************/ ACPI_STATUS DtCompileFpdt ( void **List) { ACPI_STATUS Status; ACPI_FPDT_HEADER *FpdtHeader; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; ACPI_DMTABLE_INFO *InfoTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; while (*PFieldList) { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoFpdtHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); FpdtHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer); switch (FpdtHeader->Type) { case ACPI_FPDT_TYPE_BOOT: InfoTable = AcpiDmTableInfoFpdt0; break; case ACPI_FPDT_TYPE_S3PERF: InfoTable = AcpiDmTableInfoFpdt1; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "FPDT"); return (AE_ERROR); break; } Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileHest * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile HEST. * *****************************************************************************/ ACPI_STATUS DtCompileHest ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; ACPI_DMTABLE_INFO *InfoTable; UINT16 Type; UINT32 BankCount; Status = DtCompileTable (PFieldList, AcpiDmTableInfoHest, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); while (*PFieldList) { /* Get subtable type */ SubtableStart = *PFieldList; DtCompileInteger ((UINT8 *) &Type, *PFieldList, 2, 0); switch (Type) { case ACPI_HEST_TYPE_IA32_CHECK: InfoTable = AcpiDmTableInfoHest0; break; case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK: InfoTable = AcpiDmTableInfoHest1; break; case ACPI_HEST_TYPE_IA32_NMI: InfoTable = AcpiDmTableInfoHest2; break; case ACPI_HEST_TYPE_AER_ROOT_PORT: InfoTable = AcpiDmTableInfoHest6; break; case ACPI_HEST_TYPE_AER_ENDPOINT: InfoTable = AcpiDmTableInfoHest7; break; case ACPI_HEST_TYPE_AER_BRIDGE: InfoTable = AcpiDmTableInfoHest8; break; case ACPI_HEST_TYPE_GENERIC_ERROR: InfoTable = AcpiDmTableInfoHest9; break; case ACPI_HEST_TYPE_GENERIC_ERROR_V2: InfoTable = AcpiDmTableInfoHest10; break; case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK: InfoTable = AcpiDmTableInfoHest11; break; default: /* Cannot continue on unknown type */ DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "HEST"); return (AE_ERROR); } Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); /* * Additional subtable data - IA32 Error Bank(s) */ BankCount = 0; switch (Type) { case ACPI_HEST_TYPE_IA32_CHECK: BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK, Subtable->Buffer))->NumHardwareBanks; break; case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK: BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED, Subtable->Buffer))->NumHardwareBanks; break; case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK: BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_DEFERRED_CHECK, Subtable->Buffer))->NumHardwareBanks; break; default: break; } while (BankCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoHestBank, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); BankCount--; } } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileHmat * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile HMAT. * *****************************************************************************/ ACPI_STATUS DtCompileHmat ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; DT_FIELD *EntryStart; ACPI_HMAT_STRUCTURE *HmatStruct; ACPI_HMAT_LOCALITY *HmatLocality; ACPI_HMAT_CACHE *HmatCache; ACPI_DMTABLE_INFO *InfoTable; UINT32 IntPDNumber; UINT32 TgtPDNumber; UINT64 EntryNumber; UINT16 SMBIOSHandleNumber; ParentTable = DtPeekSubtable (); Status = DtCompileTable (PFieldList, AcpiDmTableInfoHmat, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); while (*PFieldList) { /* Compile HMAT structure header */ SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoHmatHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); HmatStruct = ACPI_CAST_PTR (ACPI_HMAT_STRUCTURE, Subtable->Buffer); HmatStruct->Length = Subtable->Length; /* Compile HMAT structure body */ switch (HmatStruct->Type) { case ACPI_HMAT_TYPE_ADDRESS_RANGE: InfoTable = AcpiDmTableInfoHmat0; break; case ACPI_HMAT_TYPE_LOCALITY: InfoTable = AcpiDmTableInfoHmat1; break; case ACPI_HMAT_TYPE_CACHE: InfoTable = AcpiDmTableInfoHmat2; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "HMAT"); return (AE_ERROR); } Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); HmatStruct->Length += Subtable->Length; /* Compile HMAT structure additional */ switch (HmatStruct->Type) { case ACPI_HMAT_TYPE_LOCALITY: HmatLocality = ACPI_SUB_PTR (ACPI_HMAT_LOCALITY, Subtable->Buffer, sizeof (ACPI_HMAT_STRUCTURE)); /* Compile initiator proximity domain list */ IntPDNumber = 0; while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoHmat1a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { break; } DtInsertSubtable (ParentTable, Subtable); HmatStruct->Length += Subtable->Length; IntPDNumber++; } HmatLocality->NumberOfInitiatorPDs = IntPDNumber; /* Compile target proximity domain list */ TgtPDNumber = 0; while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoHmat1b, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { break; } DtInsertSubtable (ParentTable, Subtable); HmatStruct->Length += Subtable->Length; TgtPDNumber++; } HmatLocality->NumberOfTargetPDs = TgtPDNumber; /* Save start of the entries for reporting errors */ EntryStart = *PFieldList; /* Compile latency/bandwidth entries */ EntryNumber = 0; while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoHmat1c, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { break; } DtInsertSubtable (ParentTable, Subtable); HmatStruct->Length += Subtable->Length; EntryNumber++; } /* Validate number of entries */ if (EntryNumber != ((UINT64)IntPDNumber * (UINT64)TgtPDNumber)) { DtFatal (ASL_MSG_INVALID_EXPRESSION, EntryStart, "HMAT"); return (AE_ERROR); } break; case ACPI_HMAT_TYPE_CACHE: /* Compile SMBIOS handles */ HmatCache = ACPI_SUB_PTR (ACPI_HMAT_CACHE, Subtable->Buffer, sizeof (ACPI_HMAT_STRUCTURE)); SMBIOSHandleNumber = 0; while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoHmat2a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { break; } DtInsertSubtable (ParentTable, Subtable); HmatStruct->Length += Subtable->Length; SMBIOSHandleNumber++; } HmatCache->NumberOfSMBIOSHandles = SMBIOSHandleNumber; break; default: break; } } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileIort * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile IORT. * *****************************************************************************/ ACPI_STATUS DtCompileIort ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; ACPI_TABLE_HEADER *Table; ACPI_TABLE_IORT *Iort; ACPI_IORT_NODE *IortNode; ACPI_IORT_ITS_GROUP *IortItsGroup; ACPI_IORT_SMMU *IortSmmu; ACPI_IORT_RMR *IortRmr; UINT32 NodeNumber; UINT32 NodeLength; UINT32 IdMappingNumber; UINT32 ItsNumber; UINT32 ContextIrptNumber; UINT32 PmuIrptNumber; UINT32 PaddingLength; UINT8 Revision; UINT32 RmrCount; ParentTable = DtPeekSubtable (); Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); Table = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer); Revision = Table->Revision; /* IORT Revisions E, E.a & E.c have known issues and are not supported */ if (Revision == 1 || Revision == 2 || Revision == 4) { DtError (ASL_ERROR, ASL_MSG_UNSUPPORTED, NULL, "IORT table revision"); return (AE_ERROR); } /* * Using ACPI_SUB_PTR, We needn't define a separate structure. Care * should be taken to avoid accessing ACPI_TABLE_HEADER fields. */ Iort = ACPI_SUB_PTR (ACPI_TABLE_IORT, Subtable->Buffer, sizeof (ACPI_TABLE_HEADER)); /* * OptionalPadding - Variable-length data * (Optional, size = OffsetToNodes - sizeof (ACPI_TABLE_IORT)) * Optionally allows the generic data types to be used for filling * this field. */ Iort->NodeOffset = sizeof (ACPI_TABLE_IORT); Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortPad, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (Subtable) { DtInsertSubtable (ParentTable, Subtable); Iort->NodeOffset += Subtable->Length; } else { Status = DtCompileGeneric (ACPI_CAST_PTR (void *, PFieldList), AcpiDmTableInfoIortHdr[0].Name, &PaddingLength); if (ACPI_FAILURE (Status)) { return (Status); } Iort->NodeOffset += PaddingLength; } NodeNumber = 0; while (*PFieldList) { SubtableStart = *PFieldList; if (Revision == 0) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortHdr, &Subtable); } else if (Revision >= 3) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortHdr3, &Subtable); } if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); IortNode = ACPI_CAST_PTR (ACPI_IORT_NODE, Subtable->Buffer); NodeLength = ACPI_OFFSET (ACPI_IORT_NODE, NodeData); DtPushSubtable (Subtable); ParentTable = DtPeekSubtable (); switch (IortNode->Type) { case ACPI_IORT_NODE_ITS_GROUP: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort0, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); IortItsGroup = ACPI_CAST_PTR (ACPI_IORT_ITS_GROUP, Subtable->Buffer); NodeLength += Subtable->Length; ItsNumber = 0; while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort0a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { break; } DtInsertSubtable (ParentTable, Subtable); NodeLength += Subtable->Length; ItsNumber++; } IortItsGroup->ItsCount = ItsNumber; break; case ACPI_IORT_NODE_NAMED_COMPONENT: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort1, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); NodeLength += Subtable->Length; /* * Padding - Variable-length data * Optionally allows the offset of the ID mappings to be used * for filling this field. */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort1a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (Subtable) { DtInsertSubtable (ParentTable, Subtable); NodeLength += Subtable->Length; } else { if (NodeLength > IortNode->MappingOffset) { return (AE_BAD_DATA); } if (NodeLength < IortNode->MappingOffset) { Status = DtCompilePadding ( IortNode->MappingOffset - NodeLength, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); NodeLength = IortNode->MappingOffset; } } break; case ACPI_IORT_NODE_PCI_ROOT_COMPLEX: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); NodeLength += Subtable->Length; break; case ACPI_IORT_NODE_SMMU: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); IortSmmu = ACPI_CAST_PTR (ACPI_IORT_SMMU, Subtable->Buffer); NodeLength += Subtable->Length; /* Compile global interrupt array */ IortSmmu->GlobalInterruptOffset = NodeLength; Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); NodeLength += Subtable->Length; /* Compile context interrupt array */ ContextIrptNumber = 0; IortSmmu->ContextInterruptOffset = NodeLength; while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3b, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { break; } DtInsertSubtable (ParentTable, Subtable); NodeLength += Subtable->Length; ContextIrptNumber++; } IortSmmu->ContextInterruptCount = ContextIrptNumber; /* Compile PMU interrupt array */ PmuIrptNumber = 0; IortSmmu->PmuInterruptOffset = NodeLength; while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3c, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { break; } DtInsertSubtable (ParentTable, Subtable); NodeLength += Subtable->Length; PmuIrptNumber++; } IortSmmu->PmuInterruptCount = PmuIrptNumber; break; case ACPI_IORT_NODE_SMMU_V3: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort4, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); NodeLength += Subtable->Length; break; case ACPI_IORT_NODE_PMCG: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort5, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); NodeLength += Subtable->Length; break; case ACPI_IORT_NODE_RMR: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort6, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); IortRmr = ACPI_CAST_PTR (ACPI_IORT_RMR, Subtable->Buffer); NodeLength += Subtable->Length; /* Compile RMR Descriptors */ RmrCount = 0; IortRmr->RmrOffset = NodeLength; while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort6a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { break; } DtInsertSubtable (ParentTable, Subtable); NodeLength += sizeof (ACPI_IORT_RMR_DESC); RmrCount++; } IortRmr->RmrCount = RmrCount; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "IORT"); return (AE_ERROR); } /* Compile Array of ID mappings */ IortNode->MappingOffset = NodeLength; IdMappingNumber = 0; while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortMap, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { break; } DtInsertSubtable (ParentTable, Subtable); NodeLength += sizeof (ACPI_IORT_ID_MAPPING); IdMappingNumber++; } IortNode->MappingCount = IdMappingNumber; if (!IdMappingNumber) { IortNode->MappingOffset = 0; } /* * Node length can be determined by DT_LENGTH option * IortNode->Length = NodeLength; */ DtPopSubtable (); ParentTable = DtPeekSubtable (); NodeNumber++; } Iort->NodeCount = NodeNumber; return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileIvrs * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile IVRS. Notes: * The IVRS is essentially a flat table, with the following * structure: *
*
* * * ... * * * * ... * *****************************************************************************/ ACPI_STATUS DtCompileIvrs ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_SUBTABLE *MainSubtable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; ACPI_DMTABLE_INFO *InfoTable = NULL; UINT8 SubtableType; UINT8 Temp64[16]; UINT8 Temp8; /* Main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrs, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); /* Save a pointer to the main subtable */ MainSubtable = Subtable; while (*PFieldList) { SubtableStart = *PFieldList; /* Compile the SubtableType integer */ DtCompileInteger (&SubtableType, *PFieldList, 1, 0); switch (SubtableType) { /* Type 10h, IVHD (I/O Virtualization Hardware Definition) */ case ACPI_IVRS_TYPE_HARDWARE1: InfoTable = AcpiDmTableInfoIvrsHware1; break; /* Types 11h, 40h, IVHD (I/O Virtualization Hardware Definition) */ case ACPI_IVRS_TYPE_HARDWARE2: case ACPI_IVRS_TYPE_HARDWARE3: InfoTable = AcpiDmTableInfoIvrsHware23; break; /* Types 20h, 21h, 22h, IVMD (I/O Virtualization Memory Definition Block) */ case ACPI_IVRS_TYPE_MEMORY1: case ACPI_IVRS_TYPE_MEMORY2: case ACPI_IVRS_TYPE_MEMORY3: InfoTable = AcpiDmTableInfoIvrsMemory; break; /* 4-byte device entries */ case ACPI_IVRS_TYPE_PAD4: case ACPI_IVRS_TYPE_ALL: case ACPI_IVRS_TYPE_SELECT: case ACPI_IVRS_TYPE_START: case ACPI_IVRS_TYPE_END: InfoTable = AcpiDmTableInfoIvrs4; break; /* 8-byte device entries, type A */ case ACPI_IVRS_TYPE_ALIAS_SELECT: case ACPI_IVRS_TYPE_ALIAS_START: InfoTable = AcpiDmTableInfoIvrs8a; break; /* 8-byte device entries, type B */ case ACPI_IVRS_TYPE_EXT_SELECT: case ACPI_IVRS_TYPE_EXT_START: InfoTable = AcpiDmTableInfoIvrs8b; break; /* 8-byte device entries, type C */ case ACPI_IVRS_TYPE_SPECIAL: InfoTable = AcpiDmTableInfoIvrs8c; break; /* Variable device entries, type F0h */ case ACPI_IVRS_TYPE_HID: InfoTable = AcpiDmTableInfoIvrsHid; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "IVRS Device Entry"); return (AE_ERROR); } /* Compile the InfoTable from above */ Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); if (SubtableType != ACPI_IVRS_TYPE_HARDWARE1 && SubtableType != ACPI_IVRS_TYPE_HARDWARE2 && SubtableType != ACPI_IVRS_TYPE_HARDWARE3 && SubtableType != ACPI_IVRS_TYPE_HID && SubtableType != ACPI_IVRS_TYPE_MEMORY1 && SubtableType != ACPI_IVRS_TYPE_MEMORY2 && SubtableType != ACPI_IVRS_TYPE_MEMORY3) { if (ParentTable) DtInsertSubtable (ParentTable, Subtable); } switch (SubtableType) { case ACPI_IVRS_TYPE_HARDWARE1: case ACPI_IVRS_TYPE_HARDWARE2: case ACPI_IVRS_TYPE_HARDWARE3: case ACPI_IVRS_TYPE_MEMORY1: case ACPI_IVRS_TYPE_MEMORY2: case ACPI_IVRS_TYPE_MEMORY3: /* Insert these IVHDs/IVMDs at the root subtable */ DtInsertSubtable (MainSubtable, Subtable); DtPushSubtable (Subtable); break; case ACPI_IVRS_TYPE_HID: /* Special handling for the HID named device entry (0xF0) */ if (ParentTable) { DtInsertSubtable (ParentTable, Subtable); } /* * Process the HID value. First, get the HID value as a string. */ DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 16, DT_FIELD_TYPE_STRING, 0); /* * Determine if the HID is an integer or a string. * An integer is defined to be 32 bits, with the upper 32 bits * set to zero. (from the ACPI Spec): "The HID can be a 32-bit * integer or a character string. If an integer, the lower * 4 bytes of the field contain the integer and the upper * 4 bytes are padded with 0". */ if (UtIsIdInteger ((UINT8 *) &Temp64)) { /* Compile the HID value as an integer */ DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 8, DT_FIELD_TYPE_INTEGER, 0); Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsHidInteger, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } } else { /* Compile the HID value as a string */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsHidString, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } } DtInsertSubtable (ParentTable, Subtable); /* * Process the CID value. First, get the CID value as a string. */ DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 16, DT_FIELD_TYPE_STRING, 0); if (UtIsIdInteger ((UINT8 *) &Temp64)) { /* Compile the CID value as an integer */ DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 8, DT_FIELD_TYPE_INTEGER, 0); Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsCidInteger, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } } else { /* Compile the CID value as a string */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsCidString, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } } DtInsertSubtable (ParentTable, Subtable); /* * Process the UID value. First, get and decode the "UID Format" field (Integer). */ if (!*PFieldList) { return (AE_OK); } DtCompileOneField (&Temp8, *PFieldList, 1, DT_FIELD_TYPE_INTEGER, 0); switch (Temp8) { case ACPI_IVRS_UID_NOT_PRESENT: break; case ACPI_IVRS_UID_IS_INTEGER: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsUidInteger, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); break; case ACPI_IVRS_UID_IS_STRING: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsUidString, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); break; default: DtFatal (ASL_MSG_UNKNOWN_FORMAT, SubtableStart, "IVRS Device Entry"); return (AE_ERROR); } default: /* All other subtable types come through here */ break; } } return (AE_OK); } src/acpica/source/compiler/dttable2.c000066400000000000000000002741111465205512700200610ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dttable2.c - handling for specific ACPI tables * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ /* Compile all complex data tables, signatures starting with L-Z */ #include "aslcompiler.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dttable2") /****************************************************************************** * * FUNCTION: DtCompileLpit * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile LPIT. * *****************************************************************************/ ACPI_STATUS DtCompileLpit ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; ACPI_DMTABLE_INFO *InfoTable; ACPI_LPIT_HEADER *LpitHeader; /* Note: Main table consists only of the standard ACPI table header */ while (*PFieldList) { SubtableStart = *PFieldList; /* LPIT Subtable header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoLpitHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); LpitHeader = ACPI_CAST_PTR (ACPI_LPIT_HEADER, Subtable->Buffer); switch (LpitHeader->Type) { case ACPI_LPIT_TYPE_NATIVE_CSTATE: InfoTable = AcpiDmTableInfoLpit0; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "LPIT"); return (AE_ERROR); } /* LPIT Subtable */ Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileMadt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile MADT. * *****************************************************************************/ ACPI_STATUS DtCompileMadt ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; ACPI_TABLE_HEADER *Table; ACPI_SUBTABLE_HEADER *MadtHeader; ACPI_DMTABLE_INFO *InfoTable; UINT8 Revision; Status = DtCompileTable (PFieldList, AcpiDmTableInfoMadt, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); Table = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer); Revision = Table->Revision; while (*PFieldList) { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoMadtHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); MadtHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer); switch (MadtHeader->Type) { case ACPI_MADT_TYPE_LOCAL_APIC: InfoTable = AcpiDmTableInfoMadt0; break; case ACPI_MADT_TYPE_IO_APIC: InfoTable = AcpiDmTableInfoMadt1; break; case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE: InfoTable = AcpiDmTableInfoMadt2; break; case ACPI_MADT_TYPE_NMI_SOURCE: InfoTable = AcpiDmTableInfoMadt3; break; case ACPI_MADT_TYPE_LOCAL_APIC_NMI: InfoTable = AcpiDmTableInfoMadt4; break; case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE: InfoTable = AcpiDmTableInfoMadt5; break; case ACPI_MADT_TYPE_IO_SAPIC: InfoTable = AcpiDmTableInfoMadt6; break; case ACPI_MADT_TYPE_LOCAL_SAPIC: InfoTable = AcpiDmTableInfoMadt7; break; case ACPI_MADT_TYPE_INTERRUPT_SOURCE: InfoTable = AcpiDmTableInfoMadt8; break; case ACPI_MADT_TYPE_LOCAL_X2APIC: InfoTable = AcpiDmTableInfoMadt9; break; case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI: InfoTable = AcpiDmTableInfoMadt10; break; case ACPI_MADT_TYPE_GENERIC_INTERRUPT: if (Revision > 6) InfoTable = AcpiDmTableInfoMadt11b; else if (Revision == 6) InfoTable = AcpiDmTableInfoMadt11a; else InfoTable = AcpiDmTableInfoMadt11; break; case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR: InfoTable = AcpiDmTableInfoMadt12; break; case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: InfoTable = AcpiDmTableInfoMadt13; break; case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: InfoTable = Revision > 6 ? AcpiDmTableInfoMadt14a : AcpiDmTableInfoMadt14; break; case ACPI_MADT_TYPE_GENERIC_TRANSLATOR: InfoTable = Revision > 6 ? AcpiDmTableInfoMadt15a : AcpiDmTableInfoMadt15; break; case ACPI_MADT_TYPE_MULTIPROC_WAKEUP: InfoTable = AcpiDmTableInfoMadt16; break; case ACPI_MADT_TYPE_CORE_PIC: InfoTable = AcpiDmTableInfoMadt17; break; case ACPI_MADT_TYPE_LIO_PIC: InfoTable = AcpiDmTableInfoMadt18; break; case ACPI_MADT_TYPE_HT_PIC: InfoTable = AcpiDmTableInfoMadt19; break; case ACPI_MADT_TYPE_EIO_PIC: InfoTable = AcpiDmTableInfoMadt20; break; case ACPI_MADT_TYPE_MSI_PIC: InfoTable = AcpiDmTableInfoMadt21; break; case ACPI_MADT_TYPE_BIO_PIC: InfoTable = AcpiDmTableInfoMadt22; break; case ACPI_MADT_TYPE_LPC_PIC: InfoTable = AcpiDmTableInfoMadt23; break; case ACPI_MADT_TYPE_RINTC: InfoTable = AcpiDmTableInfoMadt24; break; case ACPI_MADT_TYPE_IMSIC: InfoTable = AcpiDmTableInfoMadt25; break; case ACPI_MADT_TYPE_APLIC: InfoTable = AcpiDmTableInfoMadt26; break; case ACPI_MADT_TYPE_PLIC: InfoTable = AcpiDmTableInfoMadt27; break; default: if (MadtHeader->Type >= ACPI_MADT_TYPE_OEM_RESERVED) { InfoTable = AcpiDmTableInfoMadt128; } else { DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "MADT"); return (AE_ERROR); } break; } Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileMcfg * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile MCFG. * *****************************************************************************/ ACPI_STATUS DtCompileMcfg ( void **List) { ACPI_STATUS Status; Status = DtCompileTwoSubtables (List, AcpiDmTableInfoMcfg, AcpiDmTableInfoMcfg0); return (Status); } /****************************************************************************** * * FUNCTION: DtCompileMpam * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile MPAM. * *****************************************************************************/ ACPI_STATUS DtCompileMpam ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *ParentTable; DT_SUBTABLE *Subtable; DT_FIELD *SubtableStart; DT_FIELD **PFieldList = (DT_FIELD **) List; ACPI_MPAM_MSC_NODE *MpamMscNode; ACPI_MPAM_RESOURCE_NODE *MpamResourceNode; UINT32 FuncDepsCount; UINT32 RisLength; ACPI_DMTABLE_INFO *InfoTable; ParentTable = DtPeekSubtable (); while (*PFieldList) { SubtableStart = *PFieldList; /* Main MSC Node table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpam0, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } MpamMscNode = ACPI_CAST_PTR (ACPI_MPAM_MSC_NODE, Subtable->Buffer); ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); ParentTable = DtPeekSubtable (); /* * RIS(es) per MSC node have variable lengths depending on how many RISes there and * any how many functional dependencies per RIS. Calculate it in order * to properly set the overall MSC length. */ RisLength = 0; /* Iterate over RIS subtables per MSC node */ for (UINT32 ris = 0; ris < MpamMscNode->NumResouceNodes; ris++) { /* Compile RIS subtable */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpam1, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } MpamResourceNode = ACPI_CAST_PTR (ACPI_MPAM_RESOURCE_NODE, Subtable->Buffer); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); ParentTable = DtPeekSubtable (); switch (MpamResourceNode->LocatorType) { case ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE: InfoTable = AcpiDmTableInfoMpam1A; break; case ACPI_MPAM_LOCATION_TYPE_MEMORY: InfoTable = AcpiDmTableInfoMpam1B; break; case ACPI_MPAM_LOCATION_TYPE_SMMU: InfoTable = AcpiDmTableInfoMpam1C; break; case ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE: InfoTable = AcpiDmTableInfoMpam1D; break; case ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE: InfoTable = AcpiDmTableInfoMpam1E; break; case ACPI_MPAM_LOCATION_TYPE_INTERCONNECT: InfoTable = AcpiDmTableInfoMpam1F; break; case ACPI_MPAM_LOCATION_TYPE_UNKNOWN: InfoTable = AcpiDmTableInfoMpam1G; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "Resource Locator Type"); return (AE_ERROR); } /* Compile Resource Locator Table */ Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); /* Compile the number of functional dependencies per RIS */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpam1Deps, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); FuncDepsCount = *ACPI_CAST_PTR (UINT32, Subtable->Buffer); RisLength += sizeof(ACPI_MPAM_RESOURCE_NODE) + FuncDepsCount * sizeof(ACPI_MPAM_FUNC_DEPS); /* Iterate over functional dependencies per RIS */ for (UINT32 funcDep = 0; funcDep < FuncDepsCount; funcDep++) { /* Compiler functional dependencies table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpam2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); } DtPopSubtable (); } /* Check if the length of the MSC is correct and override with the correct length */ if (MpamMscNode->Length != sizeof(ACPI_MPAM_MSC_NODE) + RisLength) { MpamMscNode->Length = (UINT16) (sizeof(ACPI_MPAM_MSC_NODE) + RisLength); DbgPrint (ASL_DEBUG_OUTPUT, "Overriding MSC->Length: %X\n", MpamMscNode->Length); } DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileMpst * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile MPST. * *****************************************************************************/ ACPI_STATUS DtCompileMpst ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; ACPI_MPST_CHANNEL *MpstChannelInfo; ACPI_MPST_POWER_NODE *MpstPowerNode; ACPI_MPST_DATA_HDR *MpstDataHeader; UINT16 SubtableCount; UINT32 PowerStateCount; UINT32 ComponentCount; /* Main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); MpstChannelInfo = ACPI_CAST_PTR (ACPI_MPST_CHANNEL, Subtable->Buffer); SubtableCount = MpstChannelInfo->PowerNodeCount; while (*PFieldList && SubtableCount) { /* Subtable: Memory Power Node(s) */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); MpstPowerNode = ACPI_CAST_PTR (ACPI_MPST_POWER_NODE, Subtable->Buffer); PowerStateCount = MpstPowerNode->NumPowerStates; ComponentCount = MpstPowerNode->NumPhysicalComponents; ParentTable = DtPeekSubtable (); /* Sub-subtables - Memory Power State Structure(s) */ while (*PFieldList && PowerStateCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0A, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); PowerStateCount--; } /* Sub-subtables - Physical Component ID Structure(s) */ while (*PFieldList && ComponentCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0B, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); ComponentCount--; } SubtableCount--; DtPopSubtable (); } /* Subtable: Count of Memory Power State Characteristic structures */ DtPopSubtable (); Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst1, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); MpstDataHeader = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable->Buffer); SubtableCount = MpstDataHeader->CharacteristicsCount; ParentTable = DtPeekSubtable (); /* Subtable: Memory Power State Characteristics structure(s) */ while (*PFieldList && SubtableCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); SubtableCount--; } DtPopSubtable (); return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileMsct * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile MSCT. * *****************************************************************************/ ACPI_STATUS DtCompileMsct ( void **List) { ACPI_STATUS Status; Status = DtCompileTwoSubtables (List, AcpiDmTableInfoMsct, AcpiDmTableInfoMsct0); return (Status); } /****************************************************************************** * * FUNCTION: DtCompileNfit * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile NFIT. * *****************************************************************************/ ACPI_STATUS DtCompileNfit ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; ACPI_NFIT_HEADER *NfitHeader; ACPI_DMTABLE_INFO *InfoTable; UINT32 Count; ACPI_NFIT_INTERLEAVE *Interleave = NULL; ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL; /* Main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); /* Subtables */ while (*PFieldList) { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfitHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); NfitHeader = ACPI_CAST_PTR (ACPI_NFIT_HEADER, Subtable->Buffer); switch (NfitHeader->Type) { case ACPI_NFIT_TYPE_SYSTEM_ADDRESS: InfoTable = AcpiDmTableInfoNfit0; break; case ACPI_NFIT_TYPE_MEMORY_MAP: InfoTable = AcpiDmTableInfoNfit1; break; case ACPI_NFIT_TYPE_INTERLEAVE: Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable->Buffer); InfoTable = AcpiDmTableInfoNfit2; break; case ACPI_NFIT_TYPE_SMBIOS: InfoTable = AcpiDmTableInfoNfit3; break; case ACPI_NFIT_TYPE_CONTROL_REGION: InfoTable = AcpiDmTableInfoNfit4; break; case ACPI_NFIT_TYPE_DATA_REGION: InfoTable = AcpiDmTableInfoNfit5; break; case ACPI_NFIT_TYPE_FLUSH_ADDRESS: Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable->Buffer); InfoTable = AcpiDmTableInfoNfit6; break; case ACPI_NFIT_TYPE_CAPABILITIES: InfoTable = AcpiDmTableInfoNfit7; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "NFIT"); return (AE_ERROR); } Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPopSubtable (); switch (NfitHeader->Type) { case ACPI_NFIT_TYPE_INTERLEAVE: Count = 0; DtPushSubtable (Subtable); while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit2a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { DtPopSubtable (); break; } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); Count++; } Interleave->LineCount = Count; break; case ACPI_NFIT_TYPE_SMBIOS: if (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit3a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (Subtable) { DtInsertSubtable (ParentTable, Subtable); } } break; case ACPI_NFIT_TYPE_FLUSH_ADDRESS: Count = 0; DtPushSubtable (Subtable); while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit6a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { DtPopSubtable (); break; } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); Count++; } Hint->HintCount = (UINT16) Count; break; default: break; } } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompilePcct * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile PCCT. * *****************************************************************************/ ACPI_STATUS DtCompilePcct ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; ACPI_SUBTABLE_HEADER *PcctHeader; ACPI_DMTABLE_INFO *InfoTable; /* Main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPcct, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* Subtables */ while (*PFieldList) { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoPcctHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); PcctHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer); switch (PcctHeader->Type) { case ACPI_PCCT_TYPE_GENERIC_SUBSPACE: InfoTable = AcpiDmTableInfoPcct0; break; case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: InfoTable = AcpiDmTableInfoPcct1; break; case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2: InfoTable = AcpiDmTableInfoPcct2; break; case ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE: InfoTable = AcpiDmTableInfoPcct3; break; case ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE: InfoTable = AcpiDmTableInfoPcct4; break; case ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE: InfoTable = AcpiDmTableInfoPcct5; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PCCT"); return (AE_ERROR); } Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompilePdtt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile PDTT. * *****************************************************************************/ ACPI_STATUS DtCompilePdtt ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; ACPI_TABLE_PDTT *PdttHeader; UINT32 Count = 0; /* Main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); PdttHeader = ACPI_CAST_PTR (ACPI_TABLE_PDTT, ParentTable->Buffer); PdttHeader->ArrayOffset = sizeof (ACPI_TABLE_PDTT); /* There is only one type of subtable at this time, no need to decode */ while (*PFieldList) { /* List of subchannel IDs, each 2 bytes */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt0, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); Count++; } PdttHeader->TriggerCount = (UINT8) Count; return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompilePhat * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile Phat. * *****************************************************************************/ ACPI_STATUS DtCompilePhat ( void **List) { ACPI_STATUS Status = AE_OK; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; ACPI_PHAT_HEADER *PhatHeader; ACPI_DMTABLE_INFO *Info; ACPI_PHAT_VERSION_DATA *VersionData; UINT32 DeviceDataLength; UINT32 RecordCount; DT_FIELD *DataOffsetField; DT_FIELD *DevicePathField; UINT32 TableOffset = 0; UINT32 DataOffsetValue; UINT32 i; /* The table consists of subtables */ while (*PFieldList) { /* Compile the common subtable header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPhatHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } TableOffset += Subtable->Length; DbgPrint (ASL_DEBUG_OUTPUT, "0 Subtable->Length: %X\n", Subtable->Length); ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); PhatHeader = ACPI_CAST_PTR (ACPI_PHAT_HEADER, Subtable->Buffer); switch (PhatHeader->Type) { case ACPI_PHAT_TYPE_FW_VERSION_DATA: /* Compile the middle portion of the Firmware Version Data */ Info = AcpiDmTableInfoPhat0; PhatHeader->Length = sizeof (ACPI_PHAT_VERSION_DATA); DataOffsetField = NULL; break; case ACPI_PHAT_TYPE_FW_HEALTH_DATA: DbgPrint (ASL_DEBUG_OUTPUT, "1 Offset: %X, Name: \"%s\" Length: %X\n", (*PFieldList)->TableOffset, (*PFieldList)->Name, Subtable->Length); DataOffsetField = *PFieldList; /* Walk the field list to get to the "Device-specific data Offset" field */ TableOffset = sizeof (ACPI_PHAT_HEALTH_DATA); for (i = 0; i < 3; i++) { DataOffsetField = DataOffsetField->Next; DbgPrint (ASL_DEBUG_OUTPUT, "2 Offset: %X, Name: \"%s\" Length: %X Value: %s:\n", TableOffset, DataOffsetField->Name, DataOffsetField->StringLength, DataOffsetField->Value); } /* Convert DataOffsetField->Value (a char * string) to an integer value */ sscanf (DataOffsetField->Value, "%X", &DataOffsetValue); /* * Get the next field (Device Path): * DataOffsetField points to "Device-Specific Offset", next field is * "Device Path". */ DevicePathField = DataOffsetField->Next; /* Compute the size of the input ASCII string as a unicode string (*2 + 2) */ DevicePathField->StringLength = (strlen ((const char *) DevicePathField->Value) * 2) + 2; TableOffset += DevicePathField->StringLength; DbgPrint (ASL_DEBUG_OUTPUT, "3 Offset: %X, Length: %X devicepathLength: %X\n", TableOffset, Subtable->Length, DevicePathField->StringLength); /* Set the DataOffsetField to the current TableOffset */ /* Must set the DataOffsetField here (not later) */ if (DataOffsetValue != 0) { snprintf (DataOffsetField->Value, Subtable->Length, "%X", TableOffset); } DbgPrint (ASL_DEBUG_OUTPUT, "4 Offset: %X, Length: %X\n", TableOffset, Subtable->Length); DbgPrint (ASL_DEBUG_OUTPUT, "5 TableOffset: %X, DataOffsetField->StringLength: " "%X DevicePathField Length: %X DevicePathField->Value: %s, DataOffsetField->Value: %s DataOffsetField->ByteOffset %X\n", TableOffset, DataOffsetField->StringLength, DevicePathField->StringLength, DevicePathField->Value, DataOffsetField->Value, DataOffsetField->ByteOffset); /* Compile the middle portion of the Health Data Record */ Info = AcpiDmTableInfoPhat1; PhatHeader->Length = sizeof (ACPI_PHAT_HEALTH_DATA); break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, *PFieldList, "PHAT"); return (AE_ERROR); } /* Compile either the Version Data or the Health Data */ Status = DtCompileTable (PFieldList, Info, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DbgPrint (ASL_DEBUG_OUTPUT, "6 Offset: %X, Name: \"%s\" SubtableLength: %X\n", TableOffset /* - StartTableOffset*/, (*PFieldList)->Name, Subtable->Length); ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); switch (PhatHeader->Type) { case ACPI_PHAT_TYPE_FW_VERSION_DATA: VersionData = ACPI_CAST_PTR (ACPI_PHAT_VERSION_DATA, (Subtable->Buffer - sizeof (ACPI_PHAT_HEADER))); RecordCount = VersionData->ElementCount; /* Compile all of the Version Elements */ while (RecordCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoPhat0a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); TableOffset += Subtable->Length; RecordCount--; PhatHeader->Length += sizeof (ACPI_PHAT_VERSION_ELEMENT); } DtPopSubtable (); break; case ACPI_PHAT_TYPE_FW_HEALTH_DATA: /* Compile the Device Path */ DeviceDataLength = Subtable->Length; TableOffset += Subtable->Length; DbgPrint (ASL_DEBUG_OUTPUT, "7 Device Path Length: %X FieldName: \"%s\" FieldLength: " "%s FieldValue: %s SubtableLength: %X TableOffset: %X\n", DeviceDataLength, (*PFieldList)->Name, DataOffsetField->Value, (*PFieldList)->Value, Subtable->Length, TableOffset); Status = DtCompileTable (PFieldList, AcpiDmTableInfoPhat1a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* *PFieldList will be null if previous field was at the end-of-ParseTree (EOF) */ if (!*PFieldList) { DbgPrint (ASL_DEBUG_OUTPUT, "8 Exit on end-of-ParseTree\n"); return (AE_OK); } DbgPrint (ASL_DEBUG_OUTPUT, "9 Device Data Length: %X FieldName: \"%s" " TableOffset: %X FieldLength: %X Field Value: %s SubtableLength: %X\n", DeviceDataLength, (*PFieldList)->Name, TableOffset, (*PFieldList)->StringLength, (*PFieldList)->Value, Subtable->Length); PhatHeader->Length += (UINT16) Subtable->Length; /* Convert DataOffsetField->Value (a hex char * string) to an integer value */ sscanf (DataOffsetField->Value, "%X", &DataOffsetValue); DbgPrint (ASL_DEBUG_OUTPUT, "10 Device-Specific Offset: %X Table Offset: %X\n", DataOffsetValue, TableOffset); if (DataOffsetValue != 0) { /* Compile Device-Specific Data - only if the Data Offset is non-zero */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPhat1b, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DbgPrint (ASL_DEBUG_OUTPUT, "11 Subtable: %p Table Offset: %X\n", Subtable, TableOffset); if (Subtable) { DbgPrint (ASL_DEBUG_OUTPUT, "12 Device Specific Offset: " "%X FieldName \"%s\" SubtableLength %X\n", DeviceDataLength, DataOffsetField->Name, Subtable->Length); DeviceDataLength += Subtable->Length; ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); PhatHeader->Length += (UINT16) Subtable->Length; } } DtPopSubtable (); DbgPrint (ASL_DEBUG_OUTPUT, "13 FieldName: \"%s\" FieldLength: %X Field Value: %s\n", DataOffsetField->Name, DataOffsetField->StringLength, DataOffsetField->Value); break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, *PFieldList, "PHAT"); return (AE_ERROR); } } return (Status); } /****************************************************************************** * * FUNCTION: DtCompilePmtt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile PMTT. * *****************************************************************************/ ACPI_STATUS DtCompilePmtt ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; UINT16 Type; /* Main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); /* Subtables */ while (*PFieldList) { SubtableStart = *PFieldList; DtCompileInteger ((UINT8 *) &Type, *PFieldList, 2, 0); switch (Type) { case ACPI_PMTT_TYPE_SOCKET: /* Subtable: Socket Structure */ DbgPrint (ASL_DEBUG_OUTPUT, "Compile PMTT_TYPE_SOCKET (0)\n"); Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt0, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } break; case ACPI_PMTT_TYPE_CONTROLLER: /* Subtable: Memory Controller Structure */ DbgPrint (ASL_DEBUG_OUTPUT, "Compile PMTT_TYPE_CONTROLLER (1)\n"); Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt1, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } break; case ACPI_PMTT_TYPE_DIMM: /* Subtable: Physical Component (DIMM) Structure */ DbgPrint (ASL_DEBUG_OUTPUT, "Compile PMTT_TYPE_DIMM (2)\n"); Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } break; case ACPI_PMTT_TYPE_VENDOR: /* Subtable: Vendor-specific Structure */ DbgPrint (ASL_DEBUG_OUTPUT, "Compile PMTT_TYPE_VENDOR(FF)\n"); Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmttVendor, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PMTT"); return (AE_ERROR); } DtInsertSubtable (ParentTable, Subtable); } return (Status); } /****************************************************************************** * * FUNCTION: DtCompilePptt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile PPTT. * *****************************************************************************/ ACPI_STATUS DtCompilePptt ( void **List) { ACPI_STATUS Status; ACPI_SUBTABLE_HEADER *PpttHeader; ACPI_PPTT_PROCESSOR *PpttProcessor = NULL; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; ACPI_DMTABLE_INFO *InfoTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; ACPI_TABLE_HEADER *PpttAcpiHeader; ParentTable = DtPeekSubtable (); while (*PFieldList) { SubtableStart = *PFieldList; /* Compile PPTT subtable header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPpttHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); PpttHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer); PpttHeader->Length = (UINT8)(Subtable->Length); switch (PpttHeader->Type) { case ACPI_PPTT_TYPE_PROCESSOR: InfoTable = AcpiDmTableInfoPptt0; break; case ACPI_PPTT_TYPE_CACHE: InfoTable = AcpiDmTableInfoPptt1; break; case ACPI_PPTT_TYPE_ID: InfoTable = AcpiDmTableInfoPptt2; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PPTT"); return (AE_ERROR); } /* Compile PPTT subtable body */ Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); PpttHeader->Length += (UINT8)(Subtable->Length); /* Compile PPTT subtable additional */ switch (PpttHeader->Type) { case ACPI_PPTT_TYPE_PROCESSOR: PpttProcessor = ACPI_SUB_PTR (ACPI_PPTT_PROCESSOR, Subtable->Buffer, sizeof (ACPI_SUBTABLE_HEADER)); if (PpttProcessor) { /* Compile initiator proximity domain list */ PpttProcessor->NumberOfPrivResources = 0; while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoPptt0a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { break; } DtInsertSubtable (ParentTable, Subtable); PpttHeader->Length += (UINT8)(Subtable->Length); PpttProcessor->NumberOfPrivResources++; } } break; case ACPI_PPTT_TYPE_CACHE: PpttAcpiHeader = ACPI_CAST_PTR (ACPI_TABLE_HEADER, AslGbl_RootTable->Buffer); if (PpttAcpiHeader->Revision < 3) { break; } Status = DtCompileTable (PFieldList, AcpiDmTableInfoPptt1a, &Subtable); DtInsertSubtable (ParentTable, Subtable); PpttHeader->Length += (UINT8)(Subtable->Length); break; default: break; } } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompilePrmt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile PRMT. * *****************************************************************************/ ACPI_STATUS DtCompilePrmt ( void **List) { ACPI_STATUS Status; ACPI_TABLE_PRMT_HEADER *PrmtHeader; ACPI_PRMT_MODULE_INFO *PrmtModuleInfo; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; UINT32 i, j; ParentTable = DtPeekSubtable (); /* Compile PRMT subtable header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPrmtHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); PrmtHeader = ACPI_CAST_PTR (ACPI_TABLE_PRMT_HEADER, Subtable->Buffer); for (i = 0; i < PrmtHeader->ModuleInfoCount; i++) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoPrmtModule, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); PrmtModuleInfo = ACPI_CAST_PTR (ACPI_PRMT_MODULE_INFO, Subtable->Buffer); for (j = 0; j < PrmtModuleInfo->HandlerInfoCount; j++) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoPrmtHandler, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); } } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileRas2 * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile RAS2. * *****************************************************************************/ ACPI_STATUS DtCompileRas2 ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; ACPI_TABLE_RAS2 *Ras2Header; UINT32 Count = 0; /* Main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoRas2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); Ras2Header = ACPI_CAST_PTR (ACPI_TABLE_RAS2, ParentTable->Buffer); /* There is only one type of subtable at this time, no need to decode */ while (*PFieldList) { /* List of RAS2 PCC descriptors, each 8 bytes */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoRas2PccDesc, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); Count++; } Ras2Header->NumPccDescs = (UINT8) Count; return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileRgrt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile RGRT. * *****************************************************************************/ ACPI_STATUS DtCompileRgrt ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoRgrt, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* Compile the "Subtable" -- actually just the binary (PNG) image */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoRgrt0, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileRhct * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile RHCT. * *****************************************************************************/ ACPI_STATUS DtCompileRhct ( void **List) { ACPI_STATUS Status; ACPI_RHCT_NODE_HEADER *RhctHeader; ACPI_RHCT_HART_INFO *RhctHartInfo = NULL; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; ACPI_DMTABLE_INFO *InfoTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoRhct, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); while (*PFieldList) { SubtableStart = *PFieldList; /* Compile RHCT subtable header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoRhctNodeHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); RhctHeader = ACPI_CAST_PTR (ACPI_RHCT_NODE_HEADER, Subtable->Buffer); RhctHeader->Length = (UINT16)(Subtable->Length); switch (RhctHeader->Type) { case ACPI_RHCT_NODE_TYPE_ISA_STRING: InfoTable = AcpiDmTableInfoRhctIsa1; break; case ACPI_RHCT_NODE_TYPE_HART_INFO: InfoTable = AcpiDmTableInfoRhctHartInfo1; break; case ACPI_RHCT_NODE_TYPE_CMO: InfoTable = AcpiDmTableInfoRhctCmo1; break; case ACPI_RHCT_NODE_TYPE_MMU: InfoTable = AcpiDmTableInfoRhctMmu1; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "RHCT"); return (AE_ERROR); } /* Compile RHCT subtable body */ Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); RhctHeader->Length += (UINT16)(Subtable->Length); /* Compile RHCT subtable additionals */ switch (RhctHeader->Type) { case ACPI_RHCT_NODE_TYPE_HART_INFO: RhctHartInfo = ACPI_SUB_PTR (ACPI_RHCT_HART_INFO, Subtable->Buffer, sizeof (ACPI_RHCT_NODE_HEADER)); if (RhctHartInfo) { RhctHartInfo->NumOffsets = 0; while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoRhctHartInfo2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { break; } DtInsertSubtable (ParentTable, Subtable); RhctHeader->Length += (UINT16)(Subtable->Length); RhctHartInfo->NumOffsets++; } } break; default: break; } } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileRsdt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile RSDT. * *****************************************************************************/ ACPI_STATUS DtCompileRsdt ( void **List) { DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD *FieldList = *(DT_FIELD **) List; UINT32 Address; ParentTable = DtPeekSubtable (); while (FieldList) { DtCompileInteger ((UINT8 *) &Address, FieldList, 4, DT_NON_ZERO); DtCreateSubtable ((UINT8 *) &Address, 4, &Subtable); DtInsertSubtable (ParentTable, Subtable); FieldList = FieldList->Next; } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileS3pt * * PARAMETERS: PFieldList - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile S3PT (Pointed to by FPDT) * *****************************************************************************/ ACPI_STATUS DtCompileS3pt ( DT_FIELD **PFieldList) { ACPI_STATUS Status; ACPI_FPDT_HEADER *S3ptHeader; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; ACPI_DMTABLE_INFO *InfoTable; DT_FIELD *SubtableStart; Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3pt, &AslGbl_RootTable); if (ACPI_FAILURE (Status)) { return (Status); } DtPushSubtable (AslGbl_RootTable); while (*PFieldList) { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3ptHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); S3ptHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer); switch (S3ptHeader->Type) { case ACPI_S3PT_TYPE_RESUME: InfoTable = AcpiDmTableInfoS3pt0; break; case ACPI_S3PT_TYPE_SUSPEND: InfoTable = AcpiDmTableInfoS3pt1; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "S3PT"); return (AE_ERROR); } Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileSdev * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile SDEV. * *****************************************************************************/ ACPI_STATUS DtCompileSdev ( void **List) { ACPI_STATUS Status; ACPI_SDEV_HEADER *SdevHeader; ACPI_SDEV_HEADER *SecureComponentHeader; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; ACPI_DMTABLE_INFO *InfoTable; ACPI_DMTABLE_INFO *SecureComponentInfoTable = NULL; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; ACPI_SDEV_PCIE *Pcie = NULL; ACPI_SDEV_NAMESPACE *Namesp = NULL; UINT32 EntryCount; ACPI_SDEV_SECURE_COMPONENT *SecureComponent = NULL; UINT16 ComponentLength = 0; /* Subtables */ while (*PFieldList) { /* Compile common SDEV subtable header */ SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdevHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); SdevHeader = ACPI_CAST_PTR (ACPI_SDEV_HEADER, Subtable->Buffer); SdevHeader->Length = (UINT8)(sizeof (ACPI_SDEV_HEADER)); switch (SdevHeader->Type) { case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: InfoTable = AcpiDmTableInfoSdev0; Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable->Buffer); SecureComponent = ACPI_CAST_PTR (ACPI_SDEV_SECURE_COMPONENT, ACPI_ADD_PTR (UINT8, Subtable->Buffer, sizeof(ACPI_SDEV_NAMESPACE))); break; case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: InfoTable = AcpiDmTableInfoSdev1; Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable->Buffer); break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SDEV"); return (AE_ERROR); } /* Compile SDEV subtable body */ Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* Optional data fields are appended to the main subtable body */ switch (SdevHeader->Type) { case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: /* * Device Id Offset will be be calculated differently depending on * the presence of secure access components. */ Namesp->DeviceIdOffset = 0; ComponentLength = 0; /* If the secure access component exists, get the structures */ if (SdevHeader->Flags & ACPI_SDEV_SECURE_COMPONENTS_PRESENT) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev0b, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); Namesp->DeviceIdOffset += sizeof (ACPI_SDEV_SECURE_COMPONENT); /* Compile a secure access component header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdevSecCompHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* Compile the secure access component */ SecureComponentHeader = ACPI_CAST_PTR (ACPI_SDEV_HEADER, Subtable->Buffer); switch (SecureComponentHeader->Type) { case ACPI_SDEV_TYPE_ID_COMPONENT: SecureComponentInfoTable = AcpiDmTableInfoSdevSecCompId; Namesp->DeviceIdOffset += sizeof (ACPI_SDEV_ID_COMPONENT); ComponentLength = sizeof (ACPI_SDEV_ID_COMPONENT); break; case ACPI_SDEV_TYPE_MEM_COMPONENT: SecureComponentInfoTable = AcpiDmTableInfoSdevSecCompMem; Namesp->DeviceIdOffset += sizeof (ACPI_SDEV_MEM_COMPONENT); ComponentLength = sizeof (ACPI_SDEV_MEM_COMPONENT); break; default: /* Any other secure component types are undefined */ return (AE_ERROR); } Status = DtCompileTable (PFieldList, SecureComponentInfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); SecureComponent->SecureComponentOffset = sizeof (ACPI_SDEV_NAMESPACE) + sizeof (ACPI_SDEV_SECURE_COMPONENT); SecureComponent->SecureComponentLength = ComponentLength; /* * Add the secure component to the subtable to be added for the * the namespace subtable's length */ ComponentLength += sizeof (ACPI_SDEV_SECURE_COMPONENT); } /* Append DeviceId namespace string */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev0a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { break; } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); Namesp->DeviceIdOffset += sizeof (ACPI_SDEV_NAMESPACE); Namesp->DeviceIdLength = (UINT16) Subtable->Length; /* Append Vendor data */ Namesp->VendorDataLength = 0; Namesp->VendorDataOffset = 0; if (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (Subtable) { ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); Namesp->VendorDataOffset = Namesp->DeviceIdOffset + Namesp->DeviceIdLength; Namesp->VendorDataLength = (UINT16) Subtable->Length; /* Final size of entire namespace structure */ SdevHeader->Length = (UINT16)(sizeof(ACPI_SDEV_NAMESPACE) + Subtable->Length + Namesp->DeviceIdLength) + ComponentLength; } } break; case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: /* Append the PCIe path info first */ EntryCount = 0; while (*PFieldList && !strcmp ((*PFieldList)->Name, "Device")) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (!Subtable) { DtPopSubtable (); break; } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); EntryCount++; } /* Path offset will point immediately after the main subtable */ Pcie->PathOffset = sizeof (ACPI_SDEV_PCIE); Pcie->PathLength = (UINT16) (EntryCount * sizeof (ACPI_SDEV_PCIE_PATH)); /* Append the Vendor Data last */ Pcie->VendorDataLength = 0; Pcie->VendorDataOffset = 0; if (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } if (Subtable) { ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); Pcie->VendorDataOffset = Pcie->PathOffset + Pcie->PathLength; Pcie->VendorDataLength = (UINT16) Subtable->Length; } } SdevHeader->Length = sizeof (ACPI_SDEV_PCIE) + Pcie->PathLength + Pcie->VendorDataLength; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SDEV"); return (AE_ERROR); } DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileSlic * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile SLIC. * *****************************************************************************/ ACPI_STATUS DtCompileSlic ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoSlic, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileSlit * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile SLIT. * *****************************************************************************/ ACPI_STATUS DtCompileSlit ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *FieldList; DT_FIELD *EndOfFieldList = NULL; UINT32 Localities; UINT32 LocalityListLength; UINT8 *LocalityBuffer; Status = DtCompileTable (PFieldList, AcpiDmTableInfoSlit, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); Localities = *ACPI_CAST_PTR (UINT32, Subtable->Buffer); LocalityBuffer = UtLocalCalloc (Localities); LocalityListLength = 0; /* Compile each locality buffer */ FieldList = *PFieldList; while (FieldList) { DtCompileBuffer (LocalityBuffer, FieldList->Value, FieldList, Localities); LocalityListLength++; DtCreateSubtable (LocalityBuffer, Localities, &Subtable); DtInsertSubtable (ParentTable, Subtable); EndOfFieldList = FieldList; FieldList = FieldList->Next; } if (LocalityListLength != Localities) { sprintf(AslGbl_MsgBuffer, "Found %u entries, must match LocalityCount: %u", LocalityListLength, Localities); DtError (ASL_ERROR, ASL_MSG_ENTRY_LIST, EndOfFieldList, AslGbl_MsgBuffer); ACPI_FREE (LocalityBuffer); return (AE_LIMIT); } ACPI_FREE (LocalityBuffer); return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileSrat * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile SRAT. * *****************************************************************************/ ACPI_STATUS DtCompileSrat ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; ACPI_SUBTABLE_HEADER *SratHeader; ACPI_DMTABLE_INFO *InfoTable; Status = DtCompileTable (PFieldList, AcpiDmTableInfoSrat, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); while (*PFieldList) { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoSratHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); SratHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer); switch (SratHeader->Type) { case ACPI_SRAT_TYPE_CPU_AFFINITY: InfoTable = AcpiDmTableInfoSrat0; break; case ACPI_SRAT_TYPE_MEMORY_AFFINITY: InfoTable = AcpiDmTableInfoSrat1; break; case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY: InfoTable = AcpiDmTableInfoSrat2; break; case ACPI_SRAT_TYPE_GICC_AFFINITY: InfoTable = AcpiDmTableInfoSrat3; break; case ACPI_SRAT_TYPE_GIC_ITS_AFFINITY: InfoTable = AcpiDmTableInfoSrat4; break; case ACPI_SRAT_TYPE_GENERIC_AFFINITY: InfoTable = AcpiDmTableInfoSrat5; break; case ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY: InfoTable = AcpiDmTableInfoSrat6; break; case ACPI_SRAT_TYPE_RINTC_AFFINITY: InfoTable = AcpiDmTableInfoSrat7; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SRAT"); return (AE_ERROR); } Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPopSubtable (); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileStao * * PARAMETERS: PFieldList - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile STAO. * *****************************************************************************/ ACPI_STATUS DtCompileStao ( void **List) { DT_FIELD **PFieldList = (DT_FIELD **) List; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; ACPI_STATUS Status; /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoStao, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* Compile each ASCII namestring as a subtable */ while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoStaoStr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileSvkl * * PARAMETERS: PFieldList - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile SVKL. * * NOTES: SVKL is essentially a flat table, with a small main table and * a variable number of a single type of subtable. * *****************************************************************************/ ACPI_STATUS DtCompileSvkl ( void **List) { DT_FIELD **PFieldList = (DT_FIELD **) List; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; ACPI_STATUS Status; /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoSvkl, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* Compile each subtable */ while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoSvkl0, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileTcpa * * PARAMETERS: PFieldList - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile TCPA. * *****************************************************************************/ ACPI_STATUS DtCompileTcpa ( void **List) { DT_FIELD **PFieldList = (DT_FIELD **) List; DT_SUBTABLE *Subtable; ACPI_TABLE_TCPA_HDR *TcpaHeader; DT_SUBTABLE *ParentTable; ACPI_STATUS Status; /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaHdr, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* * Examine the PlatformClass field to determine the table type. * Either a client or server table. Only one. */ TcpaHeader = ACPI_CAST_PTR (ACPI_TABLE_TCPA_HDR, ParentTable->Buffer); switch (TcpaHeader->PlatformClass) { case ACPI_TCPA_CLIENT_TABLE: Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaClient, &Subtable); break; case ACPI_TCPA_SERVER_TABLE: Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaServer, &Subtable); break; default: AcpiOsPrintf ("\n**** Unknown TCPA Platform Class 0x%X\n", TcpaHeader->PlatformClass); Status = AE_ERROR; break; } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); return (Status); } /****************************************************************************** * * FUNCTION: DtCompileTpm2Rev3 * * PARAMETERS: PFieldList - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile TPM2 revision 3 * *****************************************************************************/ static ACPI_STATUS DtCompileTpm2Rev3 ( void **List) { DT_FIELD **PFieldList = (DT_FIELD **) List; DT_SUBTABLE *Subtable; ACPI_TABLE_TPM23 *Tpm23Header; DT_SUBTABLE *ParentTable; ACPI_STATUS Status = AE_OK; Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm23, &Subtable); ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); Tpm23Header = ACPI_CAST_PTR (ACPI_TABLE_TPM23, ParentTable->Buffer); /* Subtable type depends on the StartMethod */ switch (Tpm23Header->StartMethod) { case ACPI_TPM23_ACPI_START_METHOD: /* Subtable specific to to ARM_SMC */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm23a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); break; default: break; } return (Status); } /****************************************************************************** * * FUNCTION: DtCompileTpm2 * * PARAMETERS: PFieldList - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile TPM2. * *****************************************************************************/ ACPI_STATUS DtCompileTpm2 ( void **List) { DT_FIELD **PFieldList = (DT_FIELD **) List; DT_SUBTABLE *Subtable; ACPI_TABLE_TPM2 *Tpm2Header; DT_SUBTABLE *ParentTable; ACPI_STATUS Status = AE_OK; ACPI_TABLE_HEADER *Header; ParentTable = DtPeekSubtable (); Header = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer); if (Header->Revision == 3) { return (DtCompileTpm2Rev3 (List)); } /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); Tpm2Header = ACPI_CAST_PTR (ACPI_TABLE_TPM2, ParentTable->Buffer); /* Method parameters */ /* Optional: Log area minimum length */ /* Optional: Log area start address */ /* TBD: Optional fields above not fully implemented (not optional at this time) */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* Subtable type depends on the StartMethod */ switch (Tpm2Header->StartMethod) { case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC: /* Subtable specific to to ARM_SMC */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm211, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); break; case ACPI_TPM2_START_METHOD: case ACPI_TPM2_MEMORY_MAPPED: case ACPI_TPM2_COMMAND_BUFFER: case ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD: break; case ACPI_TPM2_RESERVED1: case ACPI_TPM2_RESERVED3: case ACPI_TPM2_RESERVED4: case ACPI_TPM2_RESERVED5: case ACPI_TPM2_RESERVED9: case ACPI_TPM2_RESERVED10: AcpiOsPrintf ("\n**** Reserved TPM2 Start Method type 0x%X\n", Tpm2Header->StartMethod); Status = AE_ERROR; break; case ACPI_TPM2_NOT_ALLOWED: default: AcpiOsPrintf ("\n**** Unknown TPM2 Start Method type 0x%X\n", Tpm2Header->StartMethod); Status = AE_ERROR; break; } return (Status); } /****************************************************************************** * * FUNCTION: DtGetGenericTableInfo * * PARAMETERS: Name - Generic type name * * RETURN: Info entry * * DESCRIPTION: Obtain table info for a generic name entry * *****************************************************************************/ ACPI_DMTABLE_INFO * DtGetGenericTableInfo ( char *Name) { ACPI_DMTABLE_INFO *Info; UINT32 i; if (!Name) { return (NULL); } /* Search info table for name match */ for (i = 0; ; i++) { Info = AcpiDmTableInfoGeneric[i]; if (Info->Opcode == ACPI_DMT_EXIT) { Info = NULL; break; } /* Use caseless compare for generic keywords */ if (!AcpiUtStricmp (Name, Info->Name)) { break; } } return (Info); } /****************************************************************************** * * FUNCTION: DtCompileUefi * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile UEFI. * *****************************************************************************/ ACPI_STATUS DtCompileUefi ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; UINT16 *DataOffset; /* Compile the predefined portion of the UEFI table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoUefi, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DataOffset = (UINT16 *) (Subtable->Buffer + 16); *DataOffset = sizeof (ACPI_TABLE_UEFI); ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); /* * Compile the "generic" portion of the UEFI table. This * part of the table is not predefined and any of the generic * operators may be used. */ DtCompileGeneric ((void **) PFieldList, NULL, NULL); return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileViot * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile VIOT. * *****************************************************************************/ ACPI_STATUS DtCompileViot ( void **List) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; DT_FIELD *SubtableStart; ACPI_TABLE_VIOT *Viot; ACPI_VIOT_HEADER *ViotHeader; ACPI_DMTABLE_INFO *InfoTable; UINT16 NodeCount; ParentTable = DtPeekSubtable (); Status = DtCompileTable (PFieldList, AcpiDmTableInfoViot, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } DtInsertSubtable (ParentTable, Subtable); /* * Using ACPI_SUB_PTR, We needn't define a separate structure. Care * should be taken to avoid accessing ACPI_TABLE_HEADER fields. */ Viot = ACPI_SUB_PTR (ACPI_TABLE_VIOT, Subtable->Buffer, sizeof (ACPI_TABLE_HEADER)); Viot->NodeOffset = sizeof (ACPI_TABLE_VIOT); NodeCount = 0; while (*PFieldList) { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoViotHeader, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPushSubtable (Subtable); ViotHeader = ACPI_CAST_PTR (ACPI_VIOT_HEADER, Subtable->Buffer); switch (ViotHeader->Type) { case ACPI_VIOT_NODE_PCI_RANGE: InfoTable = AcpiDmTableInfoViot1; break; case ACPI_VIOT_NODE_MMIO: InfoTable = AcpiDmTableInfoViot2; break; case ACPI_VIOT_NODE_VIRTIO_IOMMU_PCI: InfoTable = AcpiDmTableInfoViot3; break; case ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO: InfoTable = AcpiDmTableInfoViot4; break; default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "VIOT"); return (AE_ERROR); } Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); DtPopSubtable (); NodeCount++; } Viot->NodeCount = NodeCount; return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileWdat * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile WDAT. * *****************************************************************************/ ACPI_STATUS DtCompileWdat ( void **List) { ACPI_STATUS Status; Status = DtCompileTwoSubtables (List, AcpiDmTableInfoWdat, AcpiDmTableInfoWdat0); return (Status); } /****************************************************************************** * * FUNCTION: DtCompileWpbt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile WPBT. * *****************************************************************************/ ACPI_STATUS DtCompileWpbt ( void **List) { DT_FIELD **PFieldList = (DT_FIELD **) List; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; ACPI_TABLE_WPBT *Table; ACPI_STATUS Status; /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer); /* * Exit now if there are no arguments specified. This is indicated by: * The "Command-line Arguments" field has not been specified (if specified, * it will be the last field in the field list -- after the main table). * Set the Argument Length in the main table to zero. */ if (!*PFieldList) { Table->ArgumentsLength = 0; return (AE_OK); } /* Compile the argument list subtable */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); } /* Extract the length of the Arguments buffer, insert into main table */ Table->ArgumentsLength = (UINT16) Subtable->TotalLength; DtInsertSubtable (ParentTable, Subtable); return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileXsdt * * PARAMETERS: List - Current field list pointer * * RETURN: Status * * DESCRIPTION: Compile XSDT. * *****************************************************************************/ ACPI_STATUS DtCompileXsdt ( void **List) { DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD *FieldList = *(DT_FIELD **) List; UINT64 Address; ParentTable = DtPeekSubtable (); while (FieldList) { DtCompileInteger ((UINT8 *) &Address, FieldList, 8, DT_NON_ZERO); DtCreateSubtable ((UINT8 *) &Address, 8, &Subtable); DtInsertSubtable (ParentTable, Subtable); FieldList = FieldList->Next; } return (AE_OK); } /****************************************************************************** * * FUNCTION: DtCompileGeneric * * PARAMETERS: List - Current field list pointer * Name - Field name to end generic compiling * Length - Compiled table length to return * * RETURN: Status * * DESCRIPTION: Compile generic unknown table. * *****************************************************************************/ ACPI_STATUS DtCompileGeneric ( void **List, char *Name, UINT32 *Length) { ACPI_STATUS Status; DT_SUBTABLE *Subtable; DT_SUBTABLE *ParentTable; DT_FIELD **PFieldList = (DT_FIELD **) List; ACPI_DMTABLE_INFO *Info; ParentTable = DtPeekSubtable (); /* * Compile the "generic" portion of the table. This * part of the table is not predefined and any of the generic * operators may be used. */ /* Find any and all labels in the entire generic portion */ DtDetectAllLabels (*PFieldList); /* Now we can actually compile the parse tree */ if (Length && *Length) { *Length = 0; } while (*PFieldList) { if (Name && !strcmp ((*PFieldList)->Name, Name)) { break; } Info = DtGetGenericTableInfo ((*PFieldList)->Name); if (!Info) { sprintf (AslGbl_MsgBuffer, "Generic data type \"%s\" not found", (*PFieldList)->Name); DtNameError (ASL_ERROR, ASL_MSG_INVALID_FIELD_NAME, (*PFieldList), AslGbl_MsgBuffer); *PFieldList = (*PFieldList)->Next; continue; } Status = DtCompileTable (PFieldList, Info, &Subtable); if (ACPI_SUCCESS (Status)) { DtInsertSubtable (ParentTable, Subtable); if (Length) { *Length += Subtable->Length; } } else { *PFieldList = (*PFieldList)->Next; if (Status == AE_NOT_FOUND) { sprintf (AslGbl_MsgBuffer, "Generic data type \"%s\" not found", (*PFieldList)->Name); DtNameError (ASL_ERROR, ASL_MSG_INVALID_FIELD_NAME, (*PFieldList), AslGbl_MsgBuffer); } } } return (AE_OK); } src/acpica/source/compiler/dttemplate.c000066400000000000000000000541431465205512700205240ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dttemplate - ACPI table template generation * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "acapps.h" #include "dttemplate.h" /* Contains the hex ACPI table templates */ #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dttemplate") /* Local prototypes */ static BOOLEAN AcpiUtIsSpecialTable ( char *Signature); static ACPI_STATUS DtCreateOneTemplateFile ( char *Signature, UINT32 TableCount); static ACPI_STATUS DtCreateOneTemplate ( char *Signature, UINT32 TableCount, const ACPI_DMTABLE_DATA *TableData); static ACPI_STATUS DtCreateAllTemplates ( void); static int DtEmitDefinitionBlock ( FILE *File, char *Filename, char *Signature, UINT32 Instance); /******************************************************************************* * * FUNCTION: AcpiUtIsSpecialTable * * PARAMETERS: Signature - ACPI table signature * * RETURN: TRUE if signature is a special ACPI table * * DESCRIPTION: Check for valid ACPI tables that are not in the main ACPI * table data structure (AcpiDmTableData). * ******************************************************************************/ static BOOLEAN AcpiUtIsSpecialTable ( char *Signature) { if (ACPI_COMPARE_NAMESEG (Signature, ACPI_SIG_DSDT) || ACPI_COMPARE_NAMESEG (Signature, ACPI_SIG_OSDT) || ACPI_COMPARE_NAMESEG (Signature, ACPI_SIG_SSDT) || ACPI_COMPARE_NAMESEG (Signature, ACPI_SIG_FACS) || ACPI_COMPARE_NAMESEG (Signature, ACPI_RSDP_NAME)) { return (TRUE); } return (FALSE); } /******************************************************************************* * * FUNCTION: DtCreateTemplates * * PARAMETERS: argv - Standard command line arguments * * RETURN: Status * * DESCRIPTION: Create one or more template files. * ******************************************************************************/ ACPI_STATUS DtCreateTemplates ( char **argv) { char *Signature; char *End; unsigned long TableCount; ACPI_STATUS Status = AE_OK; AslInitializeGlobals (); Status = AdInitialize (); if (ACPI_FAILURE (Status)) { return (Status); } /* * Special cases for DSDT, ALL, and '*' */ /* Default (no signature option) is DSDT */ if (AcpiGbl_Optind < 3) { fprintf (stderr, "Creating default template: [DSDT]\n"); Status = DtCreateOneTemplateFile (ACPI_SIG_DSDT, 0); goto Exit; } AcpiGbl_Optind--; Signature = argv[AcpiGbl_Optind]; AcpiUtStrupr (Signature); /* * Multiple SSDT support (-T ) */ TableCount = strtoul (Signature, &End, 0); if (Signature != End) { /* The count is used for table ID and method name - max is 254(+1) */ if (TableCount > 254) { fprintf (stderr, "%u SSDTs requested, maximum is 254\n", (unsigned int) TableCount); Status = AE_LIMIT; goto Exit; } Status = DtCreateOneTemplateFile (ACPI_SIG_DSDT, TableCount); goto Exit; } if (!strcmp (Signature, "ALL")) { /* Create all available/known templates */ Status = DtCreateAllTemplates (); goto Exit; } /* * Normal case: Create template for each signature */ while (argv[AcpiGbl_Optind]) { Signature = argv[AcpiGbl_Optind]; AcpiUtStrupr (Signature); Status = DtCreateOneTemplateFile (Signature, 0); if (ACPI_FAILURE (Status)) { goto Exit; } AcpiGbl_Optind++; } Exit: /* Shutdown ACPICA subsystem */ (void) AcpiTerminate (); UtDeleteLocalCaches (); return (Status); } /******************************************************************************* * * FUNCTION: DtCreateOneTemplateFile * * PARAMETERS: Signature - ACPI table signature * * RETURN: Status * * DESCRIPTION: Create one template file of the requested signature. * ******************************************************************************/ static ACPI_STATUS DtCreateOneTemplateFile ( char *Signature, UINT32 TableCount) { const ACPI_DMTABLE_DATA *TableData; ACPI_STATUS Status; /* * Validate signature and get the template data: * 1) Signature must be 4 characters * 2) Signature must be a recognized ACPI table * 3) There must be a template associated with the signature */ if (strlen (Signature) != ACPI_NAMESEG_SIZE) { fprintf (stderr, "%s: Invalid ACPI table signature " "(length must be 4 characters)\n", Signature); return (AE_ERROR); } /* * Some slack for the two strange tables whose name is different than * their signatures: MADT->APIC and FADT->FACP. */ if (!strcmp (Signature, "MADT")) { Signature = "APIC"; } else if (!strcmp (Signature, "FADT")) { Signature = "FACP"; } /* TableData will point to the template */ TableData = AcpiDmGetTableData (Signature); if (TableData) { if (!TableData->Template) { fprintf (stderr, "%4.4s: No template available\n", Signature); return (AE_ERROR); } } else if (!AcpiUtIsSpecialTable (Signature)) { fprintf (stderr, "%4.4s: Unrecognized ACPI table signature\n", Signature); return (AE_ERROR); } Status = DtCreateOneTemplate (Signature, TableCount, TableData); return (Status); } /******************************************************************************* * * FUNCTION: DtCreateAllTemplates * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Create all currently defined template files * ******************************************************************************/ static ACPI_STATUS DtCreateAllTemplates ( void) { const ACPI_DMTABLE_DATA *TableData; ACPI_STATUS Status; fprintf (stderr, "Creating all supported Template files\n"); /* Walk entire ACPI table data structure */ for (TableData = AcpiDmTableData; TableData->Signature; TableData++) { /* If table has a template, create the template file */ if (TableData->Template) { Status = DtCreateOneTemplate (TableData->Signature, 0, TableData); if (ACPI_FAILURE (Status)) { return (Status); } } } /* * Create the special ACPI tables: * 1) DSDT/SSDT are AML tables, not data tables * 2) FACS and RSDP have non-standard headers */ Status = DtCreateOneTemplate (ACPI_SIG_DSDT, 0, NULL); if (ACPI_FAILURE (Status)) { return (Status); } Status = DtCreateOneTemplate (ACPI_SIG_SSDT, 0, NULL); if (ACPI_FAILURE (Status)) { return (Status); } Status = DtCreateOneTemplate (ACPI_SIG_OSDT, 0, NULL); if (ACPI_FAILURE (Status)) { return (Status); } Status = DtCreateOneTemplate (ACPI_SIG_FACS, 0, NULL); if (ACPI_FAILURE (Status)) { return (Status); } Status = DtCreateOneTemplate (ACPI_RSDP_NAME, 0, NULL); if (ACPI_FAILURE (Status)) { return (Status); } return (AE_OK); } /******************************************************************************* * * FUNCTION: DtCreateOneTemplate * * PARAMETERS: Signature - ACPI signature, NULL terminated. * TableCount - Used for SSDTs in same file as DSDT * TableData - Entry in ACPI table data structure. * NULL if a special ACPI table. * * RETURN: Status * * DESCRIPTION: Create one template source file for the requested ACPI table. * ******************************************************************************/ static ACPI_STATUS DtCreateOneTemplate ( char *Signature, UINT32 TableCount, const ACPI_DMTABLE_DATA *TableData) { char *DisasmFilename; FILE *File; ACPI_STATUS Status = AE_OK; int Actual; UINT32 i; /* New file will have a .asl suffix */ DisasmFilename = FlGenerateFilename ( Signature, FILE_SUFFIX_ASL_CODE); if (!DisasmFilename) { fprintf (stderr, "Could not generate output filename\n"); return (AE_ERROR); } AcpiUtStrlwr (DisasmFilename); if (!UtQueryForOverwrite (DisasmFilename)) { return (AE_OK); } File = fopen (DisasmFilename, "w+"); if (!File) { fprintf (stderr, "Could not open output file %s\n", DisasmFilename); return (AE_ERROR); } /* Emit the common file header */ AcpiOsRedirectOutput (File); AcpiOsPrintf ("/*\n"); AcpiOsPrintf (ACPI_COMMON_HEADER ("iASL Compiler/Disassembler", " * ")); if (TableCount == 0) { AcpiOsPrintf (" * Template for [%4.4s] ACPI Table", Signature); } else { AcpiOsPrintf (" * Template for [%4.4s] and %u [SSDT] ACPI Tables", Signature, TableCount); } /* Dump the actual ACPI table */ if (TableData) { /* Normal case, tables that appear in AcpiDmTableData */ AcpiOsPrintf (" (static data table)\n"); if (AslGbl_VerboseTemplates) { AcpiOsPrintf (" * Format: [HexOffset DecimalOffset ByteLength]" " FieldName : HexFieldValue\n */\n\n"); } else { AcpiOsPrintf (" * Format: [ByteLength]" " FieldName : HexFieldValue\n */\n"); } AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, TableData->Template)); } else { /* Special ACPI tables - DSDT, SSDT, OSDT, FACS, RSDP */ AcpiOsPrintf (" (AML byte code table)\n"); AcpiOsPrintf (" */\n"); if (ACPI_COMPARE_NAMESEG (Signature, ACPI_SIG_DSDT)) { Actual = DtEmitDefinitionBlock ( File, DisasmFilename, ACPI_SIG_DSDT, 1); if (Actual < 0) { Status = AE_ERROR; goto Cleanup; } /* Emit any requested SSDTs into the same file */ for (i = 1; i <= TableCount; i++) { Actual = DtEmitDefinitionBlock ( File, DisasmFilename, ACPI_SIG_SSDT, i + 1); if (Actual < 0) { Status = AE_ERROR; goto Cleanup; } } } else if (ACPI_COMPARE_NAMESEG (Signature, ACPI_SIG_SSDT)) { Actual = DtEmitDefinitionBlock ( File, DisasmFilename, ACPI_SIG_SSDT, 1); if (Actual < 0) { Status = AE_ERROR; goto Cleanup; } } else if (ACPI_COMPARE_NAMESEG (Signature, ACPI_SIG_OSDT)) { Actual = DtEmitDefinitionBlock ( File, DisasmFilename, ACPI_SIG_OSDT, 1); if (Actual < 0) { Status = AE_ERROR; goto Cleanup; } } else if (ACPI_COMPARE_NAMESEG (Signature, ACPI_SIG_FACS)) { AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, TemplateFacs)); } else if (ACPI_COMPARE_NAMESEG (Signature, ACPI_RSDP_NAME)) { AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, TemplateRsdp)); } else { fprintf (stderr, "%4.4s, Unrecognized ACPI table signature\n", Signature); Status = AE_ERROR; goto Cleanup; } } if (TableCount == 0) { fprintf (stderr, "Created ACPI table template for [%4.4s], " "written to \"%s\"\n", Signature, DisasmFilename); } else { fprintf (stderr, "Created ACPI table templates for [%4.4s] " "and %u [SSDT] in same file, written to \"%s\"\n", Signature, TableCount, DisasmFilename); } Cleanup: fclose (File); AcpiOsRedirectOutput (stdout); return (Status); } /******************************************************************************* * * FUNCTION: DtEmitDefinitionBlock * * PARAMETERS: File - An open file for the block * Filename - Filename for same, for error msg(s) * Signature - ACPI signature for the block * Instance - Used for multiple SSDTs in the same file * * RETURN: Status from fprintf * * DESCRIPTION: Emit the raw ASL for a complete Definition Block (DSDT or SSDT) * * Note: The AMLFileName parameter for DefinitionBlock is left as a NULL * string. This allows the compiler to create the output AML filename from * the input filename. * ******************************************************************************/ static int DtEmitDefinitionBlock ( FILE *File, char *Filename, char *Signature, UINT32 Instance) { int Status; Status = fprintf (File, "DefinitionBlock (\"\", \"%4.4s\", 2, \"Intel\", \"_%4.4s_%.2X\", 0x00000001)\n" "{\n" " Method (%2.2s%.2X)\n" " {\n" " }\n" "}\n\n", Signature, Signature, Instance, Signature, Instance); if (Status < 0) { fprintf (stderr, "Could not write %4.4s to output file %s\n", Signature, Filename); } return (Status); } src/acpica/source/compiler/dttemplate.h000066400000000000000000004213051465205512700205270ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dttemplate.h - ACPI table template definitions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __DTTEMPLATE_H #define __DTTEMPLATE_H /* Templates for ACPI data tables */ const unsigned char TemplateAest[] = { 0x41,0x45,0x53,0x54,0xCC,0x02,0x00,0x00, /* 00000000 "AEST...." */ 0x01,0x2A,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".*INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x04,0x06,0x21,0x20,0x00,0x80,0x00,0x00, /* 00000020 "..! ...." */ 0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00, /* 00000028 ",...D..." */ 0x74,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "t......." */ 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000038 "....gE#." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ 0xCD,0xFE,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000058 "....gE#." */ 0x33,0x33,0x22,0x22,0x00,0x00,0x00,0x00, /* 00000060 "33""...." */ 0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000068 "........" */ 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000070 "....gE#." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000078 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000090 "........" */ 0x01,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x78, /* 00000098 ".......x" */ 0x56,0x00,0x00,0x00,0x00,0x74,0x00,0x00, /* 000000A0 "V....t.." */ 0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00, /* 000000A8 ",...D..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */ 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 000000B8 "....gE#." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C8 "........" */ 0x11,0x11,0x00,0x00,0x01,0x00,0x01,0x00, /* 000000D0 "........" */ 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 000000D8 "....gE#." */ 0x67,0x67,0x67,0x67,0x00,0x00,0x00,0x00, /* 000000E0 "gggg...." */ 0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 000000E8 "........" */ 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 000000F0 "....gE#." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000F8 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000110 "........" */ 0x01,0x60,0x00,0x00,0x2C,0x00,0x00,0x00, /* 00000118 ".`..,..." */ 0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "0......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000128 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000130 "........" */ 0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000138 "........" */ 0x67,0x45,0x23,0x01,0xAA,0xAA,0x00,0x00, /* 00000140 "gE#....." */ 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000148 "........" */ 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000150 "....gE#." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000158 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000160 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000168 "........" */ 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000170 "........" */ 0x02,0x64,0x00,0x00,0x2C,0x00,0x00,0x00, /* 00000178 ".d..,..." */ 0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000180 "4......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000188 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000190 "........" */ 0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000198 "........" */ 0x67,0x45,0x23,0x01,0x55,0x55,0x55,0x55, /* 000001A0 "gE#.UUUU" */ 0x66,0x66,0x66,0x66,0x01,0x00,0x00,0x00, /* 000001A8 "ffff...." */ 0x03,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 000001B0 "........" */ 0x67,0x45,0x23,0x01,0x00,0x00,0x00,0x00, /* 000001B8 "gE#....." */ 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000001C0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001C8 "........" */ 0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x01, /* 000001D0 "........" */ 0x00,0x00,0x00,0x00,0x03,0x74,0x00,0x00, /* 000001D8 ".....t.." */ 0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00, /* 000001E0 ",...D..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001E8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F8 "........" */ 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000200 "....gE#." */ 0x33,0x33,0x33,0x33,0x44,0x44,0x44,0x44, /* 00000208 "3333DDDD" */ 0x12,0x23,0x34,0x45,0x56,0x67,0x78,0x89, /* 00000210 ".#4EVgx." */ 0x9A,0xAB,0xBC,0xCD,0xDE,0xEF,0xFF,0x55, /* 00000218 ".......U" */ 0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000220 "........" */ 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000228 "....gE#." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000230 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000238 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000240 "........" */ 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000248 "........" */ 0x04,0x7C,0x00,0x00,0x2C,0x00,0x00,0x00, /* 00000250 ".|..,..." */ 0x34,0x00,0x00,0x00,0x64,0x00,0x00,0x00, /* 00000258 "4...d..." */ 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000260 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000268 "........" */ 0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000270 "........" */ 0x67,0x45,0x23,0x01,0x03,0x00,0x00,0x00, /* 00000278 "gE#....." */ 0x88,0x88,0x77,0x77,0x00,0x00,0x00,0x00, /* 00000280 "..ww...." */ 0x03,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000288 "........" */ 0x67,0x45,0x23,0x01,0x00,0x00,0x00,0x00, /* 00000290 "gE#....." */ 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000298 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000002A0 "........" */ 0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x01, /* 000002A8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000002B0 "........" */ 0xBB,0xBB,0xAA,0xAA,0xCC,0x00,0x00,0x00, /* 000002B8 "........" */ 0x01,0x00,0x00,0x01,0xEF,0xCD,0xAB,0x78, /* 000002C0 ".......x" */ 0x56,0x00,0x00,0x00 /* 000002C8 "V..." */ }; const unsigned char TemplateAgdi[] = { 0x41,0x47,0x44,0x49,0x30,0x00,0x00,0x00, /* 00000000 "AGDI0..." */ 0x01,0xE4,0x41,0x4D,0x50,0x45,0x52,0x45, /* 00000008 "..AMPERE" */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x05,0x01,0x21,0x20,0x00,0x00,0x00,0x00, /* 00000020 "..! ...." */ 0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00 /* 00000028 "...@...." */ }; const unsigned char TemplateApmt[] = { 0x41,0x50,0x4D,0x54,0x94,0x00,0x00,0x00, /* 00000000 "APMT...." */ 0x00,0x79,0x4E,0x56,0x49,0x44,0x49,0x41, /* 00000008 ".yNVIDIA" */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x17,0x12,0x21,0x20,0x38,0x00,0x04,0x03, /* 00000020 "..! 8..." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 ". ......" */ 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 ". ......" */ 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0x6B,0x03,0x00,0x00,0x38,0x00,0x06,0x03, /* 00000058 "k...8..." */ 0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000060 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ 0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000070 ".0......" */ 0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 ".0......" */ 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000088 "........" */ 0x6B,0x03,0x00,0x00 /* 00000090 "k..." */ }; const unsigned char TemplateAsf[] = { 0x41,0x53,0x46,0x21,0x72,0x00,0x00,0x00, /* 00000000 "ASF!r..." */ 0x10,0x0B,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x00,0x00,0x10,0x00, /* 00000020 "(.. ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x14,0x00, /* 00000030 "........" */ 0x00,0x00,0x01,0x0C,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x02,0x00,0x0C,0x00,0x01,0x04,0x00,0x00, /* 00000048 "........" */ 0x00,0x00,0x00,0x00,0x03,0x00,0x17,0x00, /* 00000050 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0x00,0x00,0x00,0x84,0x00,0x07,0x00,0x00, /* 00000068 "........" */ 0x01,0x00 /* 00000070 ".." */ }; const unsigned char TemplateAspt[] = { 0x41,0x53,0x50,0x54,0x88,0x00,0x00,0x00, /* 00000000 "ASPT...." */ 0x01,0x2D,0x56,0x52,0x54,0x55,0x41,0x4C, /* 00000008 "..VRTUAL" */ 0x4D,0x49,0x43,0x52,0x4F,0x53,0x46,0x54, /* 00000010 "MICROSFT" */ 0x01,0x00,0x00,0x00,0x4D,0x53,0x46,0x54, /* 00000018 "....INTL" */ 0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 00000020 " ." ...." */ 0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00, /* 00000028 ".. ....." */ 0x00,0x00,0xB0,0xFE,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x04,0x00,0xB0,0xFE,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x08,0x00,0xB0,0xFE,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x01,0x00,0x20,0x00,0x01,0x00,0x00,0x00, /* 00000048 ".. ....." */ 0x10,0x00,0xB0,0xFE,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0x14,0x00,0xB0,0xFE,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x18,0x00,0xB0,0xFE,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0x02,0x00,0x20,0x00,0x00,0x00,0x00,0x00, /* 00000068 ".. ....." */ 0x20,0x00,0xB0,0xFE,0x00,0x00,0x00,0x00, /* 00000070 " ......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ }; const unsigned char TemplateBdat[] = { 0x42,0x44,0x41,0x54,0x30,0x00,0x00,0x00, /* 00000000 "BDAT0..." */ 0x01,0xED,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x31,0x03,0x21,0x20,0x01,0x08,0x00,0x01, /* 00000020 "1.! ...." */ 0xF0,0xDE,0xBC,0x9A,0x78,0x56,0x34,0x12 /* 00000028 "....xV4." */ }; const unsigned char TemplateBgrt[] = { 0x42,0x47,0x52,0x54,0x38,0x00,0x00,0x00, /* 00000000 "BGRT8..." */ 0x01,0x0D,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x23,0x06,0x11,0x20,0x01,0x00,0x00,0x00, /* 00000020 "#.. ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000030 "........" */ }; const unsigned char TemplateBert[] = { 0x42,0x45,0x52,0x54,0x30,0x00,0x00,0x00, /* 00000000 "BERT0..." */ 0x01,0x15,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00, /* 00000020 "(.. ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000028 "........" */ }; const unsigned char TemplateBoot[] = { 0x42,0x4F,0x4F,0x54,0x28,0x00,0x00,0x00, /* 00000000 "BOOT(..." */ 0x01,0x0D,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x00,0x00,0x04,0x06,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00 /* 00000020 "(.. ...." */ }; const unsigned char TemplateCcel[] = { 0x43,0x43,0x45,0x4C,0x38,0x00,0x00,0x00, /* 00000000 "CCEL8..." */ 0x04,0x1C,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x30,0x09,0x21,0x20,0x00,0x00,0x00,0x00, /* 00000020 "0.! ...." */ 0xEF,0xCD,0xAB,0x78,0x56,0x34,0x12,0x00, /* 00000028 "...xV4.." */ 0x78,0x56,0x34,0x12,0xEF,0xCD,0xAB,0x00 /* 00000030 "xV4....." */ }; const unsigned char TemplateCedt[] = { 0x43,0x45,0x44,0x54,0x9c,0x01,0x00,0x00, /* 00000000 "CEDT...." */ 0x01,0x87,0x49,0x4e,0x54,0x45,0x4c,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4d,0x50,0x4c,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x00,0x00,0x00,0x00,0x49,0x4e,0x54,0x4c, /* 00000018 "....INTL" */ 0x17,0x12,0x21,0x20,0x00,0x00,0x20,0x00, /* 00000020 "..! .. ." */ 0x00,0x5e,0xba,0x00,0x00,0x00,0x00,0x00, /* 00000028 ".^......" */ 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, /* 00000038 "..... .." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00, /* 00000040 "...... ." */ 0x01,0x5e,0xba,0x00,0x00,0x00,0x00,0x00, /* 00000048 ".^......" */ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, /* 00000050 "..... .." */ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, /* 00000058 "..... .." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00, /* 00000060 "...... ." */ 0x02,0x5e,0xba,0x00,0x00,0x00,0x00,0x00, /* 00000068 ".^......" */ 0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00, /* 00000070 ".....0.." */ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, /* 00000078 "..... .." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00, /* 00000080 "...... ." */ 0x03,0x5e,0xba,0x00,0x00,0x00,0x00,0x00, /* 00000088 ".^......" */ 0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00, /* 00000090 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, /* 00000098 "..... .." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x28,0x00, /* 000000a0 "......(." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000a8 "........" */ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000b0 "........" */ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000b8 "........" */ 0x03,0x00,0x00,0x00,0x06,0x00,0x01,0x00, /* 000000c0 "........" */ 0x00,0x5e,0xba,0x00,0x01,0x00,0x28,0x00, /* 000000c8 ".^....(." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000d0 "........" */ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000d8 "........" */ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000e0 "........" */ 0x03,0x00,0x00,0x00,0x06,0x00,0x01,0x00, /* 000000e8 "........" */ 0x01,0x5e,0xba,0x00,0x01,0x00,0x28,0x00, /* 000000f0 ".^....(." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000f8 "........" */ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 "........" */ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ 0x03,0x00,0x00,0x00,0x06,0x00,0x01,0x00, /* 00000110 "........" */ 0x02,0x5e,0xba,0x00,0x01,0x00,0x28,0x00, /* 00000118 ".^....(." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "........" */ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000128 "........" */ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000130 "........" */ 0x03,0x00,0x00,0x00,0x06,0x00,0x01,0x00, /* 00000138 "........" */ 0x03,0x5e,0xba,0x00,0x01,0x00,0x2c,0x00, /* 00000140 ".^....,." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000148 "........" */ 0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000150 "........" */ 0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000158 "........" */ 0x03,0x00,0x00,0x00,0x06,0x00,0x01,0x00, /* 00000160 "........" */ 0x00,0x5e,0xba,0x00,0x01,0x5e,0xba,0x00, /* 00000160 ".^...^.." */ 0x01,0x00,0x2c,0x00,0x00,0x00,0x00,0x00, /* 00000170 "..,....." */ 0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00, /* 00000178 "........" */ 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 00000180 "........" */ 0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 00000188 "........" */ 0x0a,0x00,0x01,0x00,0x02,0x5e,0xba,0x00, /* 00000190 ".....^.." */ 0x03,0x5e,0xba,0x00 /* 00000198 ".^.." */ }; const unsigned char TemplateCdat[] = { 0xE4,0x00,0x00,0x00,0x01,0x0C,0x00,0x00, /* 00000000 "........" */ 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00, /* 00000008 "........" */ 0x03,0x00,0x08,0x00,0x04,0x56,0x00,0x00, /* 00000010 ".....V.." */ 0x00,0x00,0x18,0x00,0xEF,0x01,0x00,0x00, /* 00000018 "........" */ 0x89,0x67,0x45,0x23,0x01,0x00,0x00,0x00, /* 00000020 ".gE#...." */ 0xAB,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x03,0x00,0x08,0x00,0x04,0x56,0x00,0x00, /* 00000030 ".....V.." */ 0x01,0x00,0x18,0x00,0x44,0x04,0x64,0x00, /* 00000038 "....D.d." */ 0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,0x00, /* 00000040 "...gE#.." */ 0x33,0x22,0x44,0x33,0x55,0x44,0x00,0x00, /* 00000048 "3"D3UD.." */ 0x02,0x00,0x14,0x00,0x99,0x00,0x00,0x00, /* 00000050 "........" */ 0x00,0x00,0x00,0x00,0x78,0x56,0x34,0x12, /* 00000058 "....xV4." */ 0x55,0x55,0x44,0x44,0x04,0x00,0x18,0x00, /* 00000060 "UUDD...." */ 0x88,0x32,0x00,0x00,0x77,0x77,0x77,0x77, /* 00000068 ".2..wwww" */ 0x11,0x11,0x11,0x11,0x88,0x88,0x88,0x88, /* 00000070 "........" */ 0x22,0x22,0x22,0x22,0x05,0x00,0x20,0x00, /* 00000078 """"".. ." */ 0x04,0x00,0x00,0x00,0x44,0x44,0x44,0x44, /* 00000080 "....DDDD" */ 0x33,0x33,0x33,0x33,0x44,0x44,0x55,0x55, /* 00000088 "3333DDUU" */ 0x66,0x66,0x00,0x00,0x77,0x77,0x88,0x88, /* 00000090 "ff..ww.." */ 0x99,0x99,0x00,0x00,0x05,0x00,0x18,0x00, /* 00000098 "........" */ 0x04,0x00,0x00,0x00,0x22,0x22,0x22,0x22, /* 000000A0 "....""""" */ 0x11,0x11,0x11,0x11,0x34,0x12,0x56,0x78, /* 000000A8 "....4.Vx" */ 0x11,0x11,0x00,0x00,0x05,0x00,0x30,0x00, /* 000000B0 "......0." */ 0x08,0x00,0x00,0x00,0x66,0x66,0x66,0x66, /* 000000B8 "....ffff" */ 0x55,0x55,0x55,0x55,0x44,0x44,0x55,0x55, /* 000000C0 "UUUUDDUU" */ 0x66,0x66,0x00,0x00,0x77,0x77,0x88,0x88, /* 000000C8 "ff..ww.." */ 0x99,0x99,0x00,0x00,0xAA,0xAA,0xBB,0xBB, /* 000000D0 "........" */ 0xCC,0xCC,0x00,0x00,0x55,0x55,0x44,0x44, /* 000000D8 "....UUDD" */ 0x33,0x33,0x00,0x00 /* 000000E0 "33.." */ }; const unsigned char TemplateCpep[] = { 0x43,0x50,0x45,0x50,0x34,0x00,0x00,0x00, /* 00000000 "CPEP4..." */ 0x01,0x0F,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00, /* 00000020 "(.. ...." */ 0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00 /* 00000030 "...." */ }; const unsigned char TemplateCsrt[] = { 0x43,0x53,0x52,0x54,0x4C,0x01,0x00,0x00, /* 00000000 "CSRTL..." */ 0x01,0x0D,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x14,0x11,0x12,0x20,0x88,0x00,0x00,0x00, /* 00000020 "... ...." */ 0x49,0x4E,0x54,0x4C,0x00,0x00,0x00,0x00, /* 00000028 "INTL...." */ 0x60,0x9C,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000030 "`......." */ 0x1C,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0xA0,0xB3,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x2A,0x00,0x00,0x00,0x02,0x00,0x06,0x20, /* 00000048 "*...... " */ 0x00,0x00,0x10,0x00,0xFF,0x0F,0x00,0x00, /* 00000050 "........" */ 0x0C,0x00,0x00,0x00,0x03,0x00,0x01,0x00, /* 00000058 "........" */ 0x53,0x50,0x49,0x20,0x0C,0x00,0x00,0x00, /* 00000060 "SPI ...." */ 0x03,0x00,0x00,0x00,0x43,0x48,0x41,0x30, /* 00000068 "....CHA0" */ 0x0C,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 00000070 "........" */ 0x43,0x48,0x41,0x31,0x0C,0x00,0x00,0x00, /* 00000078 "CHA1...." */ 0x03,0x00,0x00,0x00,0x43,0x48,0x41,0x32, /* 00000080 "....CHA2" */ 0x0C,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 00000088 "........" */ 0x43,0x48,0x41,0x33,0x0C,0x00,0x00,0x00, /* 00000090 "CHA3...." */ 0x03,0x00,0x00,0x00,0x43,0x48,0x41,0x34, /* 00000098 "....CHA4" */ 0x0C,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 000000A0 "........" */ 0x43,0x48,0x41,0x35,0xA0,0x00,0x00,0x00, /* 000000A8 "CHA5...." */ 0x49,0x4E,0x54,0x4C,0x00,0x00,0x00,0x00, /* 000000B0 "INTL...." */ 0x60,0x9C,0x00,0x00,0x03,0x00,0x00,0x00, /* 000000B8 "`......." */ 0x1C,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000C0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C8 "........" */ 0x2B,0x00,0x00,0x00,0x02,0x00,0x08,0x20, /* 000000D0 "+...... " */ 0x10,0x00,0x10,0x00,0xFF,0x0F,0x00,0x00, /* 000000D8 "........" */ 0x0C,0x00,0x00,0x00,0x03,0x00,0x01,0x00, /* 000000E0 "........" */ 0x49,0x32,0x43,0x20,0x0C,0x00,0x00,0x00, /* 000000E8 "I2C ...." */ 0x03,0x00,0x00,0x00,0x43,0x48,0x41,0x30, /* 000000F0 "....CHA0" */ 0x0C,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 000000F8 "........" */ 0x43,0x48,0x41,0x31,0x0C,0x00,0x00,0x00, /* 00000100 "CHA1...." */ 0x03,0x00,0x00,0x00,0x43,0x48,0x41,0x32, /* 00000108 "....CHA2" */ 0x0C,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 00000110 "........" */ 0x43,0x48,0x41,0x33,0x0C,0x00,0x00,0x00, /* 00000118 "CHA3...." */ 0x03,0x00,0x00,0x00,0x43,0x48,0x41,0x34, /* 00000120 "....CHA4" */ 0x0C,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 00000128 "........" */ 0x43,0x48,0x41,0x35,0x0C,0x00,0x00,0x00, /* 00000130 "CHA5...." */ 0x03,0x00,0x00,0x00,0x43,0x48,0x41,0x36, /* 00000138 "....CHA6" */ 0x0C,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 00000140 "........" */ 0x43,0x48,0x41,0x37 /* 00000148 "CHA7" */ }; const unsigned char TemplateDbg2[] = { 0x44,0x42,0x47,0x32,0xB2,0x00,0x00,0x00, /* 00000000 "DBG2...." */ 0x01,0xBA,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x15,0x11,0x13,0x20,0x2C,0x00,0x00,0x00, /* 00000020 "... ,..." */ 0x02,0x00,0x00,0x00,0xEE,0x3F,0x00,0x02, /* 00000028 ".....?.." */ 0x09,0x00,0x36,0x00,0x00,0x00,0x00,0x00, /* 00000030 "..6....." */ 0x00,0x80,0x00,0x00,0x00,0x00,0x16,0x00, /* 00000038 "........" */ 0x2E,0x00,0x01,0x32,0x00,0x03,0x88,0x77, /* 00000040 "...2...w" */ 0x66,0x55,0x44,0x33,0x22,0x11,0x01,0x64, /* 00000048 "fUD3"..d" */ 0x00,0x04,0x11,0x00,0xFF,0xEE,0xDD,0xCC, /* 00000050 "........" */ 0xBB,0xAA,0x10,0x32,0x54,0x76,0x98,0xBA, /* 00000058 "...2Tv.." */ 0xDC,0xFE,0x4D,0x79,0x44,0x65,0x76,0x69, /* 00000060 "..MyDevi" */ 0x63,0x65,0x00,0xEE,0x47,0x00,0x01,0x11, /* 00000068 "ce..G..." */ 0x00,0x26,0x00,0x10,0x00,0x37,0x00,0x00, /* 00000070 ".&...7.." */ 0x80,0x00,0x00,0x00,0x00,0x16,0x00,0x22, /* 00000078 "......."" */ 0x00,0x01,0x64,0x00,0x04,0x11,0x00,0xFF, /* 00000080 "..d....." */ 0xEE,0xDD,0xCC,0xBB,0xAA,0x98,0xBA,0xDC, /* 00000088 "........" */ 0xFE,0x5C,0x5C,0x5F,0x53,0x42,0x5F,0x2E, /* 00000090 ".\\_SB_." */ 0x50,0x43,0x49,0x30,0x2E,0x44,0x42,0x47, /* 00000098 "PCI0.DBG" */ 0x50,0x00,0x41,0x42,0x43,0x44,0x45,0x46, /* 000000A0 "P.ABCDEF" */ 0x47,0x48,0x49,0x50,0x51,0x52,0x53,0x54, /* 000000A8 "GHIPQRST" */ 0x55,0x56 /* 000000B0 "UV" */ }; const unsigned char TemplateDbgp[] = { 0x44,0x42,0x47,0x50,0x34,0x00,0x00,0x00, /* 00000000 "DBGP4..." */ 0x01,0x1A,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00, /* 00000020 "(.. ...." */ 0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00 /* 00000030 "...." */ }; const unsigned char TemplateDmar[] = { 0x44,0x4D,0x41,0x52,0x9C,0x00,0x00,0x00, /* 00000000 "DMAR...." */ 0x01,0xB8,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x17,0x12,0x21,0x20,0x2F,0x01,0x00,0x00, /* 00000020 "..! /..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x18,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x03,0x08,0x00,0x00,0x08,0x00,0x00,0x01, /* 00000040 "........" */ 0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x00, /* 00000048 ".. ....." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x02, /* 00000060 "........" */ 0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ 0x02,0x08,0x00,0x00,0x00,0x00,0x00,0x03, /* 00000070 "........" */ 0x03,0x00,0x14,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0x00,0x00,0x00,0x00,0x05,0x00,0x10,0x00, /* 00000088 "........" */ 0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x00, /* 00000090 "........" */ 0x00,0x00,0x00,0x02 /* 00000098 "...." */ }; const unsigned char TemplateDrtm[] = { 0x44,0x52,0x54,0x4D,0x94,0x00,0x00,0x00, /* 00000000 "DRTM...." */ 0x01,0xB9,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x10,0x04,0x15,0x20,0x00,0x00,0x00,0x00, /* 00000020 "... ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000068 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000070 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ 0x00,0x00,0x00,0x00 /* 00000090 "...." */ }; const unsigned char TemplateEcdt[] = { 0x45,0x43,0x44,0x54,0x42,0x00,0x00,0x00, /* 00000000 "ECDTB..." */ 0x01,0x2D,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".-INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x01,0x08,0x00,0x00, /* 00000020 "(.. ...." */ 0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "f......." */ 0x01,0x08,0x00,0x00,0x62,0x00,0x00,0x00, /* 00000030 "....b..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x09,0x00 /* 00000040 ".." */ }; const unsigned char TemplateEinj[] = { 0x45,0x49,0x4E,0x4A,0x30,0x01,0x00,0x00, /* 00000000 "EINJ0..." */ 0x01,0x09,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x30,0x00,0x00,0x00, /* 00000020 "(.. 0..." */ 0x00,0x00,0x00,0x00,0x0A,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04, /* 00000030 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000048 "........" */ 0x01,0x00,0x00,0x00,0x00,0x40,0x00,0x04, /* 00000050 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000068 "........" */ 0x02,0x02,0x01,0x00,0x00,0x40,0x00,0x04, /* 00000070 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000088 "........" */ 0x03,0x00,0x00,0x00,0x00,0x40,0x00,0x04, /* 00000090 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 000000A8 "........" */ 0x04,0x03,0x01,0x00,0x00,0x40,0x00,0x04, /* 000000B0 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 000000C8 "........" */ 0x05,0x03,0x01,0x00,0x01,0x10,0x00,0x02, /* 000000D0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E0 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 000000E8 "........" */ 0x06,0x01,0x00,0x00,0x00,0x40,0x00,0x04, /* 000000F0 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000108 "........" */ 0x07,0x00,0x01,0x00,0x00,0x40,0x00,0x04, /* 00000110 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000118 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF /* 00000128 "........" */ }; const unsigned char TemplateErst[] = { 0x45,0x52,0x53,0x54,0x30,0x02,0x00,0x00, /* 00000000 "ERST0..." */ 0x01,0xAB,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x30,0x00,0x00,0x00, /* 00000020 "(.. 0..." */ 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x03,0x00,0x00,0x00,0x40,0x00,0x04, /* 00000030 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000048 "........" */ 0x01,0x03,0x00,0x00,0x00,0x40,0x00,0x04, /* 00000050 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000068 "........" */ 0x02,0x03,0x00,0x00,0x00,0x40,0x00,0x04, /* 00000070 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000088 "........" */ 0x03,0x04,0x01,0x00,0x00,0x40,0x00,0x04, /* 00000090 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 000000A8 "........" */ 0x04,0x02,0x00,0x00,0x00,0x40,0x00,0x04, /* 000000B0 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 000000C8 "........" */ 0x05,0x03,0x00,0x00,0x01,0x08,0x00,0x01, /* 000000D0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E0 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 000000E8 "........" */ 0x06,0x01,0x00,0x00,0x00,0x40,0x00,0x04, /* 000000F0 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000108 "........" */ 0x07,0x00,0x00,0x00,0x00,0x40,0x00,0x04, /* 00000110 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000118 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000128 "........" */ 0x08,0x00,0x00,0x00,0x00,0x40,0x00,0x04, /* 00000130 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000138 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000140 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000148 "........" */ 0x09,0x02,0x00,0x00,0x00,0x40,0x00,0x04, /* 00000150 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000158 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000160 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000168 "........" */ 0x0A,0x00,0x00,0x00,0x00,0x40,0x00,0x04, /* 00000170 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000178 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000180 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000188 "........" */ 0x0B,0x03,0x00,0x00,0x00,0x40,0x00,0x04, /* 00000190 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000198 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001A0 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 000001A8 "........" */ 0x0C,0x00,0x00,0x00,0x00,0x40,0x00,0x04, /* 000001B0 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001B8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001C0 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 000001C8 "........" */ 0x0D,0x00,0x00,0x00,0x00,0x40,0x00,0x04, /* 000001D0 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001D8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001E0 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 000001E8 "........" */ 0x0E,0x00,0x00,0x00,0x00,0x40,0x00,0x04, /* 000001F0 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000200 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000208 "........" */ 0x0F,0x00,0x00,0x00,0x00,0x40,0x00,0x04, /* 00000210 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000218 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000220 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF /* 00000228 "........" */ }; const unsigned char TemplateFacs[] = { 0x46,0x41,0x43,0x53,0x40,0x00,0x00,0x00, /* 00000000 "FACS@..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000008 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000010 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000018 "........" */ 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000020 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000038 "........" */ }; /* Version 5 FADT */ const unsigned char TemplateFadt[] = { 0x46,0x41,0x43,0x50,0x14,0x01,0x00,0x00, /* 00000000 "FACP...." */ 0x06,0x8A,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x10,0x04,0x15,0x20,0x01,0x00,0x00,0x00, /* 00000020 "... ...." */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000048 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0x04,0x02,0x01,0x04,0x08,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ 0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x01, /* 00000070 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00, /* 00000080 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000088 "........" */ 0x00,0x00,0x00,0x00,0x01,0x20,0x00,0x02, /* 00000090 "..... .." */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */ 0x00,0x00,0x00,0x00,0x01,0x10,0x00,0x02, /* 000000A8 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */ 0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x00, /* 000000C0 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C8 "........" */ 0x01,0x20,0x00,0x03,0x01,0x00,0x00,0x00, /* 000000D0 ". ......" */ 0x00,0x00,0x00,0x00,0x01,0x40,0x00,0x01, /* 000000D8 ".....@.." */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E0 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E8 "........" */ 0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x01, /* 000000F0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F8 "........" */ 0x01,0x08,0x00,0x01,0x00,0x00,0x00,0x00, /* 00000100 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ 0x00,0x00,0x00,0x00 /* 00000110 "...." */ }; const unsigned char TemplateFpdt[] = { 0x46,0x50,0x44,0x54,0x64,0x00,0x00,0x00, /* 00000000 "FPDTd..." */ 0x01,0xBD,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x04,0x08,0x11,0x20,0x00,0x00,0x30,0x01, /* 00000020 "... ..0." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x01, /* 00000050 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00 /* 00000060 "...." */ }; const unsigned char TemplateGtdt[] = { 0x47,0x54,0x44,0x54,0xE8,0x00,0x00,0x00, /* 00000000 "GTDT...." */ 0x03,0x5D,0x4C,0x49,0x4E,0x41,0x52,0x4F, /* 00000008 ".]LINARO" */ 0x52,0x54,0x53,0x4D,0x56,0x45,0x56,0x38, /* 00000010 "RTSMVEV8" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x08,0x01,0x19,0x20,0x00,0x00,0x00,0x00, /* 00000020 "... ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x1D,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */ 0x1E,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000038 "........" */ 0x1B,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000040 "........" */ 0x1A,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000048 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0x02,0x00,0x00,0x00,0x60,0x00,0x00,0x00, /* 00000058 "....`..." */ 0x43,0x00,0x00,0x00,0x21,0x00,0x00,0x00, /* 00000060 "C...!..." */ 0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 ".d......" */ 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000070 "........" */ 0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000090 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000098 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000A0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000B8 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000C0 "........" */ 0x00,0x00,0x00,0x00,0x01,0x1C,0x00,0x00, /* 000000C8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D8 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00 /* 000000E0 "........" */ }; const unsigned char TemplateHest[] = { 0x48,0x45,0x53,0x54,0x7C,0x02,0x00,0x00, /* 00000000 "HEST|..." */ 0x01,0x97,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x03,0x03,0x17,0x20,0x04,0x00,0x00,0x00, /* 00000020 "... ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, /* 00000028 "........" */ 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000068 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000070 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x01, /* 00000088 "........" */ 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000090 "........" */ 0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A8 "........" */ 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 000000B0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C8 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000D0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E8 "........" */ 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x01, /* 000000F0 "........" */ 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000F8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000110 "........" */ 0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00, /* 00000118 "........" */ 0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00, /* 00000120 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000128 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000130 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000138 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000140 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000148 "........" */ 0x00,0x00,0x00,0x00,0x09,0x00,0x02,0x00, /* 00000150 "........" */ 0xFF,0xFF,0x00,0x01,0x01,0x00,0x00,0x00, /* 00000158 "........" */ 0x01,0x00,0x00,0x00,0x00,0x10,0x00,0x00, /* 00000160 "........" */ 0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00, /* 00000168 ".@......" */ 0x00,0x00,0x00,0x00,0x03,0x1C,0x00,0x00, /* 00000170 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000178 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000180 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000188 "........" */ 0x00,0x10,0x00,0x00,0x09,0x00,0x03,0x00, /* 00000190 "........" */ 0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00, /* 00000198 "........" */ 0x01,0x00,0x00,0x00,0x00,0x10,0x00,0x00, /* 000001A0 "........" */ 0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00, /* 000001A8 ".@......" */ 0x00,0x00,0x00,0x00,0x04,0x1C,0x00,0x00, /* 000001B0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001B8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001C0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001C8 "........" */ 0x00,0x10,0x00,0x00,0x0A,0x00,0x03,0x00, /* 000001D0 "........" */ 0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00, /* 000001D8 "........" */ 0x01,0x00,0x00,0x00,0x00,0x10,0x00,0x00, /* 000001E0 "........" */ 0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00, /* 000001E8 ".@......" */ 0x00,0x00,0x00,0x00,0x04,0x1C,0x00,0x00, /* 000001F0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000200 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000208 "........" */ 0x00,0x10,0x00,0x00,0x00,0x40,0x00,0x04, /* 00000210 ".....@.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000218 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000220 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000228 "........" */ 0x0B,0x00,0x01,0x00,0x00,0x00,0x00,0x01, /* 00000230 "........" */ 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000238 "........" */ 0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000240 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000248 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000250 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000258 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000260 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000268 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000270 "........" */ 0x00,0x00,0x00,0x00 /* 00000278 "...." */ }; const unsigned char TemplateHmat[] = { 0x48,0x4D,0x41,0x54,0x9C,0x00,0x00,0x00, /* 00000000 "HMAT...." */ 0x02,0x4D,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".MINTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x08,0x01,0x19,0x20,0x00,0x00,0x00,0x00, /* 00000020 "... ...." */ 0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00, /* 00000028 "....(..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ 0x01,0x00,0x00,0x00,0x2A,0x00,0x00,0x00, /* 00000050 "....*..." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000058 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000070 "........" */ 0x00,0x00,0x02,0x00,0x00,0x00,0x22,0x00, /* 00000078 "......"." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 "........" */ 0x01,0x00,0x00,0x00 /* 00000098 "...." */ }; const unsigned char TemplateHpet[] = { 0x48,0x50,0x45,0x54,0x38,0x00,0x00,0x00, /* 00000000 "HPET8..." */ 0x01,0x09,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00, /* 00000020 "(.. ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000030 "........" */ }; const unsigned char TemplateIort[] = { 0x49,0x4F,0x52,0x54,0x3C,0x02,0x00,0x00, /* 00000000 "IORT<..." */ 0x05,0xCB,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x17,0x12,0x21,0x20,0x07,0x00,0x00,0x00, /* 00000020 "..! ...." */ 0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "4......." */ 0x49,0x4F,0x52,0x54,0x00,0x18,0x00,0x01, /* 00000030 "IORT...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000040 "........" */ 0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x04, /* 00000048 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000050 "........" */ 0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "l......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0x00,0x5C,0x5F,0x53,0x42,0x2E,0x50,0x43, /* 00000068 ".\_SB.PC" */ 0x49,0x30,0x2E,0x44,0x45,0x56,0x30,0x00, /* 00000070 "I0.DEV0." */ 0x49,0x4F,0x52,0x54,0x3C,0x02,0x00,0x00, /* 00000078 "IORT<..." */ 0x03,0xF1,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000080 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000088 "Template" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000090 "....INTL" */ 0x05,0x01,0x21,0x20,0x07,0x00,0x00,0x00, /* 00000098 "..! ...." */ 0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "4......." */ 0x49,0x4F,0x52,0x54,0x00,0x18,0x00,0x01, /* 000000A8 "IORT...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ 0x00,0x00,0x00,0x00,0x02,0x38,0x00,0x04, /* 000000C8 ".....8.." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000D0 "........" */ 0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D8 "$......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F8 "........" */ 0x00,0x00,0x00,0x00,0x03,0x60,0x00,0x03, /* 00000100 ".....`.." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000108 "........" */ 0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000110 "L......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000118 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "........" */ 0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00, /* 00000128 "....<..." */ 0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00, /* 00000130 "....L..." */ 0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00, /* 00000138 "....L..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000140 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000148 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000150 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000158 "........" */ 0x00,0x00,0x00,0x00,0x04,0x58,0x00,0x04, /* 00000160 ".....X.." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000168 "........" */ 0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000170 "D......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000178 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000180 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000188 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000190 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000198 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001A0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001A8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001B0 "........" */ 0x00,0x00,0x00,0x00,0x05,0x3C,0x00,0x02, /* 000001B8 ".....<.." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000001C0 "........" */ 0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001C8 "(......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001D0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001D8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001E0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001E8 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000001F0 "........" */ 0x06,0x44,0x00,0x03,0x00,0x00,0x00,0x00, /* 000001F8 ".D......" */ 0x01,0x00,0x00,0x00,0x30,0x00,0x00,0x00, /* 00000200 "....0..." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000208 "........" */ 0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000210 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000218 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000220 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000228 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000230 "........" */ 0x00,0x00,0x00,0x00 /* 00000238 "...." */ }; const unsigned char TemplateIvrs[] = { 0x49,0x56,0x52,0x53,0x10,0x02,0x00,0x00, /* 00000000 "IVRS...." */ 0x02,0x6C,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".lINTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x31,0x03,0x21,0x20,0x41,0x30,0x20,0x00, /* 00000020 "1.! A0 ." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x10,0xB0,0x64,0x00,0x02,0x00,0x40,0x00, /* 00000030 "..d...@." */ 0x00,0x00,0xF0,0xFD,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x6F,0x8F,0x04,0x80, /* 00000040 "....o..." */ 0x03,0x08,0x00,0x00,0x01,0x08,0x00,0x00, /* 00000048 "........" */ 0x02,0x08,0x00,0x00,0x04,0xFE,0xFF,0x00, /* 00000050 "........" */ 0x42,0x00,0xFF,0x00,0x00,0xA5,0x00,0x00, /* 00000058 "B......." */ 0x43,0x00,0xFF,0x00,0x00,0xA5,0x00,0x00, /* 00000060 "C......." */ 0x46,0x00,0xFF,0x00,0x44,0x33,0x22,0x11, /* 00000068 "F...D3"." */ 0x47,0x00,0xFF,0x00,0x44,0x33,0x22,0x11, /* 00000070 "G...D3"." */ 0x04,0xFF,0xFF,0x00,0x48,0x00,0x00,0x00, /* 00000078 "....H..." */ 0x00,0xA0,0x00,0x02,0x48,0x00,0x00,0xD7, /* 00000080 "....H..." */ 0x21,0xA0,0x00,0x01,0x48,0x00,0x00,0x00, /* 00000088 "!...H..." */ 0x22,0x01,0x00,0x01,0x11,0xB0,0x48,0x00, /* 00000090 "".....H." */ 0x02,0x00,0x40,0x00,0x00,0x00,0xF0,0xFD, /* 00000098 "..@....." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */ 0x00,0x02,0x04,0x00,0xDE,0x4A,0x25,0x22, /* 000000A8 ".....J%"" */ 0xEF,0x73,0x6D,0x20,0x00,0x00,0x00,0x00, /* 000000B0 ".sm ...." */ 0x00,0x00,0x00,0x00,0x03,0x08,0x00,0x00, /* 000000B8 "........" */ 0x04,0xFE,0xFF,0x00,0x43,0x00,0xFF,0x00, /* 000000C0 "....C..." */ 0x00,0xA5,0x00,0x00,0x04,0xFF,0xFF,0x00, /* 000000C8 "........" */ 0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00, /* 000000D0 "....H..." */ 0x00,0xA0,0x00,0x02,0x40,0xB0,0xD4,0x00, /* 000000D8 "....@..." */ 0x02,0x00,0x40,0x00,0x00,0x00,0xF0,0xFD, /* 000000E0 "..@....." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E8 "........" */ 0x00,0x02,0x04,0x00,0xDE,0x4A,0x25,0x22, /* 000000F0 ".....J%"" */ 0xEF,0x73,0x6D,0x20,0x00,0x00,0x00,0x00, /* 000000F8 ".sm ...." */ 0x00,0x00,0x00,0x00,0x03,0x08,0x00,0x00, /* 00000100 "........" */ 0x04,0xFE,0xFF,0x00,0x43,0x00,0xFF,0x00, /* 00000108 "....C..." */ 0x00,0xA5,0x00,0x00,0x04,0xFF,0xFF,0x00, /* 00000110 "........" */ 0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00, /* 00000118 "....H..." */ 0x00,0xA0,0x00,0x02,0x48,0x00,0x00,0xD7, /* 00000120 "....H..." */ 0x21,0xA0,0x00,0x01,0x48,0x00,0x00,0x00, /* 00000128 "!...H..." */ 0x22,0x01,0x00,0x01,0xF0,0xA5,0x00,0x40, /* 00000130 ""......@" */ 0x49,0x4E,0x54,0x43,0x30,0x30,0x32,0x30, /* 00000138 "INTC0020" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000140 "........" */ 0x02,0x09,0x5C,0x5F,0x53,0x42,0x2E,0x44, /* 00000148 "..\_SB.D" */ 0x45,0x56,0x30,0xF0,0xA5,0x00,0x40,0x49, /* 00000150 "EV0...@I" */ 0x4E,0x54,0x43,0x30,0x30,0x32,0x30,0x00, /* 00000158 "NTC0020." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, /* 00000160 "........" */ 0x09,0x5C,0x5F,0x53,0x42,0x2E,0x44,0x45, /* 00000168 ".\_SB.DE" */ 0x56,0x31,0xF0,0xA5,0x00,0x40,0x49,0x4E, /* 00000170 "V1...@IN" */ 0x54,0x43,0x30,0x30,0x32,0x30,0x00,0x00, /* 00000178 "TC0020.." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x09, /* 00000180 "........" */ 0x5C,0x5F,0x53,0x42,0x2E,0x44,0x45,0x56, /* 00000188 "\_SB.DEV" */ 0x32,0xF0,0xA5,0x00,0x40,0x49,0x4E,0x54, /* 00000190 "2...@INT" */ 0x43,0x30,0x30,0x32,0x30,0x00,0x00,0x00, /* 00000198 "C0020..." */ 0x00,0x00,0x00,0x00,0x00,0x02,0x09,0x5C, /* 000001A0 ".......\" */ 0x5F,0x53,0x42,0x2E,0x44,0x45,0x56,0x33, /* 000001A8 "_SB.DEV3" */ 0x20,0x0D,0x20,0x00,0x22,0x11,0x00,0x00, /* 000001B0 " . ."..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001B8 "........" */ 0xCD,0xAB,0x78,0x56,0x34,0x12,0x00,0x00, /* 000001C0 "..xV4..." */ 0xDC,0xFE,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001C8 "........" */ 0x21,0x0D,0x20,0x00,0x22,0x11,0x00,0x00, /* 000001D0 "!. ."..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001D8 "........" */ 0xCD,0xAB,0x78,0x56,0x34,0x12,0x00,0x00, /* 000001E0 "..xV4..." */ 0xDC,0xFE,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001E8 "........" */ 0x22,0x0D,0x20,0x00,0x22,0x11,0x00,0x00, /* 000001F0 "". ."..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F8 "........" */ 0xCD,0xAB,0x78,0x56,0x34,0x12,0x00,0x00, /* 00000200 "..xV4..." */ 0xDC,0xFE,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000208 "........" */ }; const unsigned char TemplateLpit[] = { 0x4C,0x50,0x49,0x54,0x94,0x00,0x00,0x00, /* 00000000 "LPIT...." */ 0x00,0xD8,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x10,0x04,0x15,0x20,0x00,0x00,0x00,0x00, /* 00000020 "... ...." */ 0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "8......." */ 0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x01, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x7F,0x40,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 ".@......" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "8......." */ 0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x01, /* 00000068 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000070 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x7F,0x40,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 ".@......" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ 0x00,0x00,0x00,0x00 /* 00000090 "...." */ }; /* MADT with ACPI 6.0 subtables */ const unsigned char TemplateMadt[] = { 0x41,0x50,0x49,0x43,0x62,0x02,0x00,0x00, /* 00000000 "APICb..." */ 0x07,0x44,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".DINTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x06,0x23,0x20,0x00,0x00,0x00,0x00, /* 00000020 "(.# ...." */ 0x01,0x00,0x00,0x00,0x00,0x08,0x00,0x00, /* 00000028 "........" */ 0x01,0x00,0x00,0x00,0x01,0x0C,0x01,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x02,0x0A,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x00,0x00,0x03,0x08,0x0D,0x00,0x01,0x00, /* 00000048 "........" */ 0x00,0x00,0x04,0x06,0x00,0x05,0x00,0x01, /* 00000050 "........" */ 0x05,0x0C,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00,0x06,0x10,0x00,0x00, /* 00000060 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ 0x00,0x00,0x00,0x00,0x07,0x16,0x00,0x00, /* 00000070 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x5C,0x43,0x50,0x55, /* 00000080 "....\CPU" */ 0x30,0x00,0x08,0x10,0x05,0x00,0x00,0x00, /* 00000088 "0......." */ 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, /* 00000090 "........" */ 0x00,0x00,0x09,0x10,0x00,0x00,0x00,0x00, /* 00000098 "........" */ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */ 0x00,0x00,0x0A,0x0C,0x05,0x00,0x00,0x00, /* 000000A8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x0B,0x52, /* 000000B0 ".......R" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18, /* 00000100 "........" */ 0x0C,0x18,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000110 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000118 "........" */ 0x0D,0x18,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000128 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000130 "........" */ 0x0E,0x10,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000138 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000140 "........" */ 0x0F,0x14,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000148 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000150 "........" */ 0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00, /* 00000158 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000160 "........" */ 0x00,0x00,0x00,0x00,0x11,0x0F,0x01,0x01, /* 00000168 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, /* 00000170 "........" */ 0x00,0x00,0x00,0x12,0x17,0x01,0x00,0x14, /* 00000178 "........" */ 0xE0,0x1F,0x00,0x00,0x00,0x00,0x80,0x00, /* 00000180 "........" */ 0x02,0x03,0xFF,0xFF,0xFF,0x00,0x00,0x00, /* 00000188 "........" */ 0x00,0xFF,0x13,0x15,0x01,0x80,0x00,0x00, /* 00000190 "........" */ 0xFB,0xFD,0x0E,0x00,0x00,0x40,0x00,0x00, /* 00000198 ".....@.." */ 0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x14, /* 000001A0 "........" */ 0x0D,0x01,0x03,0x00,0x00,0x00,0x00,0x00, /* 000001A8 "........" */ 0x00,0x00,0x00,0x00,0x15,0x13,0x01,0x00, /* 000001B0 "........" */ 0x00,0xF0,0x2F,0x00,0x00,0x00,0x00,0x40, /* 000001B8 "../....@" */ 0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x16, /* 000001C0 "........" */ 0x11,0x01,0x00,0x00,0x00,0x10,0x00,0x00, /* 000001C8 "........" */ 0x00,0x00,0x00,0x10,0x00,0x00,0x40,0x00, /* 000001D0 "......@." */ 0x17,0x0E,0x01,0x00,0x20,0x00,0x10,0x00, /* 000001D8 ".... ..." */ 0x00,0x00,0x00,0x00,0x10,0x13,0x18,0x24, /* 000001E0 ".......$" */ 0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000001E8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F8 "........" */ 0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x10, /* 00000200 ".(......" */ 0x00,0x00,0x19,0x10,0x01,0x00,0x00,0x00, /* 00000208 "........" */ 0x00,0x00,0xFF,0x00,0xFF,0x00,0x00,0x00, /* 00000210 "........" */ 0x00,0x18,0x1A,0x24,0x01,0x00,0x00,0x00, /* 00000218 "...$...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000220 "........" */ 0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00, /* 00000228 "....`..." */ 0x00,0x00,0x00,0x00,0x00,0x0D,0x00,0x00, /* 00000230 "........" */ 0x00,0x00,0x00,0x80,0x00,0x00,0x1B,0x24, /* 00000238 ".......$" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000240 "........" */ 0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00, /* 00000248 "..`....." */ 0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00, /* 00000250 "....`..." */ 0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000258 "........" */ 0x00,0x00 /* 00000260 ".." */ }; const unsigned char TemplateMcfg[] = { 0x4D,0x43,0x46,0x47,0x3C,0x00,0x00,0x00, /* 00000000 "MCFG<..." */ 0x01,0x19,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00, /* 00000020 "(.. ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00 /* 00000038 "...." */ }; const unsigned char TemplateMchi[] = { 0x4D,0x43,0x48,0x49,0x45,0x00,0x00,0x00, /* 00000000 "MCHIE..." */ 0x01,0xE4,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x15,0x07,0x00,0x02,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x01,0x00,0x00,0x00, /* 00000020 "(.. ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x00,0x02,0x08,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x00 /* 00000040 "....." */ }; const unsigned char TemplateMsdm[] = { 0x4D,0x53,0x44,0x4D,0x64,0x00,0x00,0x00, /* 00000000 "MSDMd..." */ 0x01,0x34,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 ".4Intel." */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x03,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x04,0x02,0x15,0x20,0x00,0x00,0x00,0x00, /* 00000020 "... ...." */ 0x0A,0x10,0x16,0x17,0x18,0x19,0x1A,0x1B, /* 00000028 "........" */ 0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x23, /* 00000030 ".... !"#" */ 0x24,0x25,0x26,0x27,0x10,0x0A,0x15,0x16, /* 00000038 "$%&'...." */ 0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E, /* 00000040 "........" */ 0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26, /* 00000048 ". !"#$%&" */ 0x16,0x15,0x0A,0x10,0x16,0x17,0x18,0x19, /* 00000050 "........" */ 0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21, /* 00000058 "...... !" */ 0x22,0x23,0x24,0x25 /* 00000060 ""#$%" */ }; const unsigned char TemplateMpam[] = { 0x4D,0x50,0x41,0x4D,0xFC,0x00,0x00,0x00, /* 00000000 "MPAM...." */ 0x02,0x34,0x48,0x49,0x53,0x49,0x20,0x20, /* 00000008 ".4HISI " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x02,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x20,0x10,0x22,0x20,0x60,0x00,0x00,0x00, /* 00000020 " ." `..." */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "2......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0x01,0x00,0x00,0x00,0x11,0x00,0x00,0x00, /* 00000068 "........" */ 0x00,0x00,0x00,0x01,0x20,0x00,0x00,0x00, /* 00000070 ".... ..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00, /* 00000080 "....x..." */ 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xD0, /* 00000088 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, /* 00000090 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */ 0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "2......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ 0x02,0x00,0x00,0x00,0x12,0x00,0x00,0x00, /* 000000C8 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000D0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D8 "........" */ 0x00,0x00,0x00,0x00,0x13,0x00,0x00,0x00, /* 000000E0 "........" */ 0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 000000E8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F0 "........" */ 0x00,0x00,0x00,0x00 /* 000000F8 "...." */ }; const unsigned char TemplateMpst[] = { 0x4D,0x50,0x53,0x54,0xB6,0x00,0x00,0x00, /* 00000000 "MPST...." */ 0x01,0x77,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".wINTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x13,0x09,0x12,0x20,0x00,0x00,0x00,0x00, /* 00000020 "... ...." */ 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000040 "........" */ 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ 0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00, /* 00000050 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, /* 00000068 "........" */ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 00000070 "........" */ 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 "........" */ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00 /* 000000B0 "......" */ }; const unsigned char TemplateMsct[] = { 0x4D,0x53,0x43,0x54,0x90,0x00,0x00,0x00, /* 00000000 "MSCT...." */ 0x01,0xB7,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x38,0x00,0x00,0x00, /* 00000020 "(.. 8..." */ 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00, /* 00000030 "........" */ 0x01,0x16,0x00,0x00,0x00,0x00,0x03,0x00, /* 00000038 "........" */ 0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x00,0x00,0x40,0x00,0x00,0x00,0x01,0x16, /* 00000048 "..@....." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00,0x01,0x16,0x00,0x00, /* 00000060 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000070 "........" */ 0x00,0x00,0x01,0x16,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000088 "........" */ }; const unsigned char TemplateNfit[] = { 0x4E,0x46,0x49,0x54,0x88,0x01,0x00,0x00, /* 00000000 "NFIT...." */ 0x01,0x81,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x13,0x11,0x20,0x20,0x00,0x00,0x00,0x00, /* 00000020 ".. ...." */ 0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x00, /* 00000028 "..@....." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x30,0x05,0xAF,0x91,0x86,0x5D,0x0E,0x47, /* 00000038 "0....].G" */ 0xA6,0xB0,0x0A,0x2D,0xB9,0x40,0x82,0x49, /* 00000040 "...-.@.I" */ 0x00,0x00,0x00,0x7C,0x03,0x00,0x00,0x00, /* 00000048 "...|...." */ 0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0xEF,0xCD,0xAB,0x78,0x56,0x34,0x12, /* 00000060 "....xV4." */ 0x01,0x00,0x30,0x00,0x01,0x00,0x00,0x00, /* 00000068 "..0....." */ 0x04,0x00,0x00,0x00,0x01,0x00,0x01,0x00, /* 00000070 "........" */ 0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00, /* 00000088 "........" */ 0x01,0x00,0x03,0x00,0x2A,0x00,0x00,0x00, /* 00000090 "....*..." */ 0x02,0x00,0x20,0x00,0x01,0x00,0x00,0x00, /* 00000098 ".. ....." */ 0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 000000A0 "........" */ 0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 000000A8 "........" */ 0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00, /* 000000B0 "........" */ 0x03,0x00,0x28,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "..(....." */ 0xB4,0x13,0x5D,0x40,0x91,0x0B,0x29,0x93, /* 000000C0 "..]@..)." */ 0x67,0xE8,0x23,0x4C,0x00,0x00,0x00,0x88, /* 000000C8 "g.#L...." */ 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77, /* 000000D0 ".."3DUfw" */ 0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF, /* 000000D8 "........" */ 0x04,0x00,0x50,0x00,0x01,0x00,0x86,0x80, /* 000000E0 "..P....." */ 0x17,0x20,0x01,0x00,0x86,0x80,0x17,0x20, /* 000000E8 ". ..... " */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F0 "........" */ 0x89,0x00,0x54,0x76,0x01,0x03,0x00,0x01, /* 000000F8 "..Tv...." */ 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 ". ......" */ 0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000110 "........" */ 0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00, /* 00000118 "........" */ 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000128 "........" */ 0x05,0x00,0x28,0x00,0x01,0x00,0x00,0x01, /* 00000130 "..(....." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000138 "........" */ 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000140 ". ......" */ 0x00,0x00,0x00,0xE0,0x0F,0x00,0x00,0x00, /* 00000148 "........" */ 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00, /* 00000150 "........" */ 0x06,0x00,0x20,0x00,0x01,0x00,0x00,0x00, /* 00000158 ".. ....." */ 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000160 "........" */ 0x00,0x00,0x00,0x18,0x04,0x00,0x00,0x00, /* 00000168 "........" */ 0x00,0x00,0x00,0x18,0x06,0x00,0x00,0x00, /* 00000170 "........" */ 0x07,0x00,0x10,0x00,0x00,0x00,0x00,0x00, /* 00000178 "........" */ 0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000180 "........" */ }; const unsigned char TemplatePcct[] = { 0x50,0x43,0x43,0x54,0xAE,0x02,0x00,0x00, /* 00000000 "PCCT...." */ 0x01,0xE6,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x25,0x09,0x20,0x20,0x01,0x00,0x00,0x00, /* 00000020 "%. ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 ".>......" */ 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, /* 00000038 "........" */ 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, /* 00000040 """""""""" */ 0x01,0x32,0x00,0x03,0x33,0x33,0x33,0x33, /* 00000048 ".2..3333" */ 0x33,0x33,0x33,0x33,0x44,0x44,0x44,0x44, /* 00000050 "3333DDDD" */ 0x44,0x44,0x44,0x44,0x55,0x55,0x55,0x55, /* 00000058 "DDDDUUUU" */ 0x55,0x55,0x55,0x55,0x66,0x66,0x66,0x66, /* 00000060 "UUUUffff" */ 0x77,0x77,0x77,0x77,0x88,0x88,0x01,0x3E, /* 00000068 "wwww...>" */ 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000070 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32, /* 00000080 ".......2" */ 0x00,0x03,0x44,0x44,0x44,0x44,0x44,0x44, /* 00000088 "..DDDDDD" */ 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, /* 00000090 "DDDDDDDD" */ 0x44,0x44,0x55,0x55,0x55,0x55,0x55,0x55, /* 00000098 "DDUUUUUU" */ 0x55,0x55,0x66,0x66,0x66,0x66,0x77,0x77, /* 000000A0 "UUffffww" */ 0x77,0x77,0x88,0x88,0x02,0x5A,0x01,0x00, /* 000000A8 "ww...Z.." */ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */ 0x00,0x00,0x00,0x00,0x01,0x32,0x00,0x03, /* 000000C0 ".....2.." */ 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, /* 000000C8 "DDDDDDDD" */ 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, /* 000000D0 "DDDDDDDD" */ 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, /* 000000D8 "UUUUUUUU" */ 0x66,0x66,0x66,0x66,0x77,0x77,0x77,0x77, /* 000000E0 "ffffwwww" */ 0x88,0x88,0x01,0x32,0x00,0x03,0x33,0x33, /* 000000E8 "...2..33" */ 0x33,0x33,0x33,0x33,0x33,0x33,0x44,0x44, /* 000000F0 "333333DD" */ 0x44,0x44,0x44,0x44,0x44,0x44,0x55,0x55, /* 000000F8 "DDDDDDUU" */ 0x55,0x55,0x55,0x55,0x55,0x55,0x03,0xA4, /* 00000100 "UUUUUU.." */ 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000108 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000110 "........" */ 0x00,0x00,0x01,0x32,0x00,0x03,0x33,0x33, /* 00000118 "...2..33" */ 0x33,0x33,0x33,0x33,0x33,0x33,0x44,0x44, /* 00000120 "333333DD" */ 0x44,0x44,0x44,0x44,0x44,0x44,0x55,0x55, /* 00000128 "DDDDDDUU" */ 0x55,0x55,0x55,0x55,0x55,0x55,0x66,0x66, /* 00000130 "UUUUUUff" */ 0x66,0x66,0x77,0x77,0x77,0x77,0x88,0x88, /* 00000138 "ffwwww.." */ 0x88,0x88,0x01,0x32,0x00,0x03,0x33,0x33, /* 00000140 "...2..33" */ 0x33,0x33,0x33,0x33,0x33,0x33,0x99,0x99, /* 00000148 "333333.." */ 0x99,0x99,0x99,0x99,0x99,0x99,0x00,0x00, /* 00000150 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000158 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32, /* 00000160 ".......2" */ 0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33, /* 00000168 "..333333" */ 0x33,0x33,0x22,0x22,0x22,0x22,0x22,0x22, /* 00000170 "33""""""" */ 0x22,0x22,0x01,0x32,0x00,0x03,0x33,0x33, /* 00000178 """.2..33" */ 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, /* 00000180 "33333333" */ 0x33,0x33,0x33,0x33,0x33,0x33,0x44,0x44, /* 00000188 "333333DD" */ 0x44,0x44,0x44,0x44,0x44,0x44,0x01,0x32, /* 00000190 "DDDDDD.2" */ 0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33, /* 00000198 "..333333" */ 0x33,0x33,0x55,0x55,0x55,0x55,0x55,0x55, /* 000001A0 "33UUUUUU" */ 0x55,0x55,0x04,0xA4,0x01,0x00,0x00,0x00, /* 000001A8 "UU......" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001B0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32, /* 000001B8 ".......2" */ 0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33, /* 000001C0 "..333333" */ 0x33,0x33,0x44,0x44,0x44,0x44,0x44,0x44, /* 000001C8 "33DDDDDD" */ 0x44,0x44,0x55,0x55,0x55,0x55,0x55,0x55, /* 000001D0 "DDUUUUUU" */ 0x55,0x55,0x66,0x66,0x66,0x66,0x77,0x77, /* 000001D8 "UUffffww" */ 0x77,0x77,0x88,0x88,0x88,0x88,0x01,0x32, /* 000001E0 "ww.....2" */ 0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33, /* 000001E8 "..333333" */ 0x33,0x33,0x99,0x99,0x99,0x99,0x99,0x99, /* 000001F0 "33......" */ 0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000200 "........" */ 0x00,0x00,0x01,0x32,0x00,0x03,0x33,0x33, /* 00000208 "...2..33" */ 0x33,0x33,0x33,0x33,0x33,0x33,0x22,0x22, /* 00000210 "333333""" */ 0x22,0x22,0x22,0x22,0x22,0x22,0x01,0x32, /* 00000218 """"""".2" */ 0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33, /* 00000220 "..333333" */ 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, /* 00000228 "33333333" */ 0x33,0x33,0x44,0x44,0x44,0x44,0x44,0x44, /* 00000230 "33DDDDDD" */ 0x44,0x44,0x01,0x32,0x00,0x03,0x33,0x33, /* 00000238 "DD.2..33" */ 0x33,0x33,0x33,0x33,0x33,0x33,0x55,0x55, /* 00000240 "333333UU" */ 0x55,0x55,0x55,0x55,0x55,0x55,0x05,0x60, /* 00000248 "UUUUUU.`" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000250 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000258 "........" */ 0x00,0x00,0x01,0x32,0x00,0x03,0x33,0x33, /* 00000260 "...2..33" */ 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, /* 00000268 "33333333" */ 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, /* 00000270 "33333333" */ 0x33,0x33,0x33,0x33,0x33,0x33,0x01,0x32, /* 00000278 "333333.2" */ 0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33, /* 00000280 "..333333" */ 0x33,0x33,0x44,0x44,0x44,0x44,0x44,0x44, /* 00000288 "33DDDDDD" */ 0x44,0x44,0x01,0x32,0x00,0x03,0x33,0x33, /* 00000290 "DD.2..33" */ 0x33,0x33,0x33,0x33,0x33,0x33,0x55,0x55, /* 00000298 "333333UU" */ 0x55,0x55,0x55,0x55,0x55,0x55,0x03,0x00, /* 000002A0 "UUUUUU.." */ 0x00,0x00,0x05,0x00,0x00,0x00 /* 000002A8 "......" */ }; const unsigned char TemplatePdtt[] = { 0x50,0x44,0x54,0x54,0x34,0x00,0x00,0x00, /* 00000000 "PDTT4..." */ 0x01,0xCB,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x31,0x08,0x17,0x20,0x04,0x00,0x00,0x00, /* 00000020 "1.. ...." */ 0x2C,0x00,0x00,0x00,0xAA,0x03,0xBB,0x02, /* 00000028 ",......." */ 0xCC,0x01,0xDD,0x00 /* 00000030 "...." */ }; const unsigned char TemplatePhat [] = { 0x50,0x48,0x41,0x54,0xA2,0x00,0x00,0x00, /* 00000000 "PHAT...." */ 0x01,0xCA,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x31,0x03,0x22,0x20,0x00,0x00,0x28,0x00, /* 00000020 "1." ..(." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000028 "........" */ 0x30,0x05,0xAF,0x91,0x86,0x5D,0x0E,0x47, /* 00000030 "0....].G" */ 0xA6,0xB0,0x0A,0x2D,0xB9,0x40,0x82,0x49, /* 00000038 "...-.@.I" */ 0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01, /* 00000040 "........" */ 0x0C,0x0B,0x0A,0x09,0x01,0x00,0x2E,0x00, /* 00000048 "........" */ 0x00,0x00,0x00,0x00,0x30,0x05,0xAF,0x91, /* 00000050 "....0..." */ 0x86,0x5D,0x0E,0x47,0xA6,0xB0,0x0A,0x2D, /* 00000058 ".].G...-" */ 0xB9,0x40,0x82,0x49,0x2A,0x00,0x00,0x00, /* 00000060 ".@.I*..." */ 0x41,0x00,0x42,0x00,0x43,0x00,0x44,0x00, /* 00000068 "A.B.C.D." */ 0x45,0x00,0x46,0x00,0x00,0x00,0x01,0x02, /* 00000070 "E.F....." */ 0x03,0x04,0x00,0x00,0x28,0x00,0x00,0x00, /* 00000078 "....(..." */ 0x00,0x00,0x01,0x00,0x00,0x00,0x30,0x05, /* 00000080 "......0." */ 0xAF,0x91,0x86,0x5D,0x0E,0x47,0xA6,0xB0, /* 00000088 "...].G.." */ 0x0A,0x2D,0xB9,0x40,0x82,0x49,0x08,0x07, /* 00000090 ".-.@.I.." */ 0x06,0x05,0x04,0x03,0x02,0x01,0x0C,0x0B, /* 00000098 "........" */ 0x0A,0x09 /* 000000A0 ".." */ }; const unsigned char TemplatePmtt[] = { 0x50,0x4D,0x54,0x54,0xBB,0x00,0x00,0x00, /* 00000000 "PMTT...." */ 0x02,0x2E,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x05,0x01,0x21,0x20,0x08,0x00,0x00,0x00, /* 00000020 "..! ...." */ 0x00,0x00,0x10,0x00,0x0D,0x00,0x00,0x00, /* 00000028 "........" */ 0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */ 0x01,0x00,0x10,0x00,0x04,0x00,0x00,0x00, /* 00000038 "........" */ 0x02,0x00,0x00,0x00,0x44,0x44,0x00,0x00, /* 00000040 "....DD.." */ 0x02,0x00,0x10,0x00,0x04,0x00,0x00,0x00, /* 00000048 "........" */ 0x01,0x00,0x00,0x00,0x78,0x56,0x34,0x12, /* 00000050 "....xV4." */ 0xFF,0x00,0x23,0x00,0x0D,0x00,0x00,0x00, /* 00000058 "..#....." */ 0x03,0x00,0x00,0x00,0x03,0x02,0x01,0x00, /* 00000060 "........" */ 0x08,0x04,0x07,0x06,0x08,0x09,0x0A,0x0B, /* 00000068 "........" */ 0x0C,0x0D,0x0E,0x0F,0x55,0x66,0x77,0x88, /* 00000070 "....Ufw." */ 0x11,0xAA,0xBB,0x00,0x00,0x10,0x00,0x0D, /* 00000078 "........" */ 0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01, /* 00000080 "........" */ 0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x00, /* 00000088 "........" */ 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00, /* 00000090 "........" */ 0x00,0x00,0x00,0x02,0x00,0x10,0x00,0x04, /* 00000098 "........" */ 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x78, /* 000000A0 ".......x" */ 0x56,0x34,0x12,0x02,0x00,0x10,0x00,0x04, /* 000000A8 "V4......" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78, /* 000000B0 ".......x" */ 0x56,0x34,0x12 /* 000000B8 "V4." */ }; const unsigned char TemplatePptt[] = { 0x50,0x50,0x54,0x54,0x72,0x00,0x00,0x00, /* 00000000 "PPTTr..." */ 0x01,0x86,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x03,0x03,0x17,0x20,0x00,0x18,0x00,0x00, /* 00000020 "... ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x01,0x18,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ 0x00,0x00,0x00,0x00,0x02,0x1E,0x00,0x00, /* 00000050 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ 0x00,0x00 /* 00000070 ".." */ }; const unsigned char TemplatePrmt[] = { 0x50,0x52,0x4D,0x54,0xB8,0x02,0x00,0x00, /* 00000000 "PRMT...." */ 0x00,0x13,0x4F,0x45,0x4D,0x43,0x41,0x20, /* 00000008 "..OEMCA " */ 0x4F,0x45,0x4D,0x43,0x41,0x20,0x20,0x20, /* 00000010 "OEMCA " */ 0x02,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x17,0x07,0x20,0x20,0xA5,0x61,0x6B,0xB6, /* 00000020 ".. .ak." */ 0x01,0xA1,0x46,0xED,0xA6,0xA3,0xCA,0xC1, /* 00000028 "..F....." */ 0xC4,0xD1,0x30,0x1E,0x3C,0x00,0x00,0x00, /* 00000030 "..0.<..." */ 0x04,0x00,0x00,0x00,0x00,0x00,0xAA,0x00, /* 00000038 "........" */ 0xC2,0xB3,0x52,0x16,0xA1,0xA7,0xAC,0x46, /* 00000040 "..R....F" */ 0xAF,0x93,0xDD,0x6D,0xEE,0x44,0x66,0x69, /* 00000048 "...m.Dfi" */ 0x01,0x00,0x00,0x00,0x03,0x00,0x26,0x00, /* 00000050 "......&." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00,0x2C,0x00,0x5F,0xAD, /* 00000060 "....,._." */ 0xF2,0xD5,0x47,0xA3,0x3E,0x4D,0x87,0xBC, /* 00000068 "..G.>M.." */ 0xC2,0xCE,0x63,0x02,0x9C,0xC8,0x90,0xC2, /* 00000070 "..c....." */ 0x5E,0x8A,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "^......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ 0x2C,0x00,0xC3,0xAD,0xE7,0xA9,0xD0,0x8C, /* 00000090 ",......." */ 0x9A,0x42,0x89,0x15,0x10,0x94,0x6E,0xBD, /* 00000098 ".B....n." */ 0xE3,0x18,0xC0,0xC2,0x5E,0x8A,0x00,0x00, /* 000000A0 "....^..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */ 0x00,0x00,0x00,0x00,0x2C,0x00,0x14,0xC2, /* 000000B8 "....,..." */ 0x88,0xB6,0x81,0x40,0xEB,0x4E,0x8D,0x26, /* 000000C0 "...@.N.&" */ 0x1E,0xB5,0xA3,0xBC,0xF1,0x1A,0xF0,0xC2, /* 000000C8 "........" */ 0x5E,0x8A,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D0 "^......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E0 "........" */ 0x52,0x00,0xA6,0x58,0x2A,0xDC,0x27,0x59, /* 000000E8 "R..X*.'Y" */ 0x76,0x47,0xB9,0x95,0xD1,0x18,0xA2,0x73, /* 000000F0 "vG.....s" */ 0x35,0xA2,0x01,0x00,0x00,0x00,0x01,0x00, /* 000000F8 "5......." */ 0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 "&......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x00, /* 00000108 "......,." */ 0x13,0x2D,0x4F,0x2E,0x40,0x62,0xD0,0x4E, /* 00000110 ".-O.@b.N" */ 0xA4,0x01,0xC7,0x23,0xFB,0xDC,0x34,0xE8, /* 00000118 "...#..4." */ 0x90,0x32,0x5E,0x8A,0x00,0x00,0x00,0x00, /* 00000120 ".2^....." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000128 "........" */ 0xF8,0x7F,0x71,0x8A,0x00,0x00,0x00,0x00, /* 00000130 "..q....." */ 0x00,0x00,0x2E,0x01,0xD7,0x3E,0xF9,0x0E, /* 00000138 ".....>.." */ 0xAE,0x14,0x5B,0x42,0x92,0x8F,0xB8,0x5A, /* 00000140 "..[B...Z" */ 0x62,0x13,0xB5,0x7E,0x01,0x00,0x00,0x00, /* 00000148 "b..~...." */ 0x06,0x00,0x26,0x00,0x00,0x00,0xE0,0x3F, /* 00000150 "..&....?" */ 0x71,0x8A,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000158 "q......." */ 0x2C,0x00,0x3C,0xCD,0x20,0x21,0x8B,0x84, /* 00000160 ",.<. !.." */ 0x8F,0x4D,0xAB,0xBB,0x4B,0x74,0xCE,0x64, /* 00000168 ".M..Kt.d" */ 0xAC,0x89,0x4C,0xA6,0x5D,0x8A,0x00,0x00, /* 00000170 "..L.]..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000178 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000180 "........" */ 0x00,0x00,0x00,0x00,0x2C,0x00,0xA7,0x35, /* 00000188 "....,..5" */ 0x09,0xEA,0x6B,0x50,0x59,0x41,0xBB,0xBB, /* 00000190 "..kPYA.." */ 0x48,0xDE,0xEE,0xCB,0x6F,0x58,0x34,0xA7, /* 00000198 "H...oX4." */ 0x5D,0x8A,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001A0 "]......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001A8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001B0 "........" */ 0x2C,0x00,0xA9,0xBD,0xD1,0x1B,0x9A,0x90, /* 000001B8 ",......." */ 0x14,0x46,0x96,0x99,0x25,0xEC,0x0C,0x27, /* 000001C0 ".F..%..'" */ 0x83,0xF7,0x94,0xA7,0x5D,0x8A,0x00,0x00, /* 000001C8 "....]..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001D0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001D8 "........" */ 0x00,0x00,0x00,0x00,0x2C,0x00,0xE7,0xB4, /* 000001E0 "....,..." */ 0x28,0x5D,0x67,0x38,0xEE,0x4A,0xAA,0x09, /* 000001E8 "(]g8.J.." */ 0x51,0xFC,0x28,0x2C,0x3B,0x22,0x9C,0xA6, /* 000001F0 "Q.(,;".." */ 0x5D,0x8A,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F8 "]......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000200 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000208 "........" */ 0x2C,0x00,0x02,0xB7,0x64,0x4B,0x2B,0x4D, /* 00000210 ",...dK+M" */ 0xFE,0x4D,0xAC,0x5A,0x0B,0x41,0x10,0xA2, /* 00000218 ".M.Z.A.." */ 0xCA,0x47,0x48,0xA7,0x5D,0x8A,0x00,0x00, /* 00000220 ".GH.]..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000228 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000230 "........" */ 0x00,0x00,0x00,0x00,0x2C,0x00,0xDE,0xFD, /* 00000238 "....,..." */ 0x0E,0x8A,0xD0,0x78,0xF0,0x45,0xAE,0xA0, /* 00000240 "...x.E.." */ 0xC2,0x82,0x45,0xC7,0xE1,0xDB,0x98,0xA7, /* 00000248 "..E....." */ 0x5D,0x8A,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000250 "]......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000258 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000260 "........" */ 0x52,0x00,0x2B,0xF4,0x6C,0x5A,0xB4,0x8B, /* 00000268 "R.+.lZ.." */ 0x2C,0x47,0xA2,0x33,0x5C,0x4D,0xC4,0x03, /* 00000270 ",G.3\M.." */ 0x3D,0xC7,0x01,0x00,0x00,0x00,0x01,0x00, /* 00000278 "=......." */ 0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000280 "&......." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x00, /* 00000288 "......,." */ 0x81,0x60,0x46,0xE1,0x62,0x75,0x0F,0x43, /* 00000290 ".`F.bu.C" */ 0x89,0x6B,0xB0,0xE5,0x23,0xDC,0x33,0x5A, /* 00000298 ".k..#.3Z" */ 0x90,0x12,0x5D,0x8A,0x00,0x00,0x00,0x00, /* 000002A0 "..]....." */ 0xE0,0x5F,0x71,0x8A,0x00,0x00,0x00,0x00, /* 000002A8 "._q....." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 000002B0 "........" */ }; const unsigned char TemplateRasf[] = { 0x52,0x41,0x53,0x46,0x30,0x00,0x00,0x00, /* 00000000 "RASF0..." */ 0x01,0x31,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".1INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x27,0x05,0x16,0x20,0x00,0x00,0x00,0x00, /* 00000020 "'.. ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000028 "........" */ }; const unsigned char TemplateRas2[] = { 0x52,0x41,0x53,0x32,0x38,0x00,0x00,0x00, /* 00000000 "RAS28..." */ 0x01,0x28,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".(INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x06,0x23,0x20,0x00,0x00,0x02,0x00, /* 00000020 "(.# ...." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000028 "........" */ 0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00 /* 00000030 "........" */ }; const unsigned char TemplateRgrt[] = { 0x52,0x47,0x52,0x54,0x50,0x00,0x00,0x00, /* 00000000 "RGRTP..." */ 0x01,0x33,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".3INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x31,0x03,0x21,0x20,0x01,0x00,0x01,0x00, /* 00000020 "1.! ...." */ 0xAA,0x01,0x02,0x03,0x04,0x05,0x06,0x07, /* 00000028 "........" */ 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, /* 00000030 "........" */ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, /* 00000038 "........" */ 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, /* 00000040 "........" */ 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 /* 00000048 " !"#$%&'" */ }; const unsigned char TemplateRhct[] = { 0x52,0x48,0x43,0x54,0x96,0x00,0x00,0x00, /* 00000000 "RHCT|..." */ 0x01,0x24,0x4F,0x45,0x4D,0x43,0x41,0x00, /* 00000008 "..OEMCA." */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x09,0x22,0x20,0x00,0x00,0x00,0x00, /* 00000020 "... ...." */ 0x80,0x96,0x98,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x02,0x00,0x00,0x00,0x38,0x00,0x00,0x00, /* 00000030 "....8..." */ 0x00,0x00,0x34,0x00,0x01,0x00,0x2B,0x00, /* 00000038 "..4...*." */ 0x72,0x76,0x36,0x34,0x69,0x6D,0x61,0x66, /* 00000040 "rv64imaf" */ 0x64,0x63,0x68,0x5F,0x7A,0x69,0x63,0x73, /* 00000048 "dch_zics" */ 0x72,0x5F,0x7A,0x69,0x66,0x65,0x6E,0x63, /* 00000050 "r_zifenc" */ 0x65,0x69,0x5F,0x7A,0x62,0x61,0x5F,0x7A, /* 00000058 "ei_zba_z" */ 0x62,0x62,0x5F,0x7A,0x62,0x63,0x5F,0x7A, /* 00000060 "bb_zbc_z" */ 0x62,0x73,0x00,0x00,0xFF,0xFF,0x18,0x00, /* 00000068 "bs......" */ 0x01,0x00,0x03,0x00,0x00,0x00,0x00,0x00, /* 00000070 "........" */ 0x38,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, /* 00000078 "........" */ 0x8E,0x00,0x00,0x00,0x01,0x00,0x0A,0x00, /* 00000080 "........" */ 0x01,0x00,0x00,0x06,0x06,0x06,0x02,0x00, /* 00000088 "........" */ 0x08,0x00,0x01,0x00,0x00,0x02 /* 00000090 "........" */ }; const unsigned char TemplateRsdp[] = { 0x52,0x53,0x44,0x20,0x50,0x54,0x52,0x20, /* 00000000 "RSD PTR " */ 0x43,0x49,0x4E,0x54,0x45,0x4C,0x20,0x02, /* 00000008 "CINTEL ." */ 0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00, /* 00000010 "....$..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000018 "........" */ 0xDC,0x00,0x00,0x00 /* 00000020 "...." */ }; const unsigned char TemplateRsdt[] = { 0x52,0x53,0x44,0x54,0x44,0x00,0x00,0x00, /* 00000000 "RSDTD..." */ 0x01,0xB1,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x10,0x00,0x00,0x00, /* 00000020 "(.. ...." */ 0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00, /* 00000028 " ...0..." */ 0x40,0x00,0x00,0x00,0x50,0x00,0x00,0x00, /* 00000030 "@...P..." */ 0x60,0x00,0x00,0x00,0x70,0x00,0x00,0x00, /* 00000038 "`...p..." */ 0x80,0x00,0x00,0x00 /* 00000040 "...." */ }; const unsigned char TemplateS3pt[] = { 0x53,0x33,0x50,0x54,0x34,0x00,0x00,0x00, /* 00000000 "S3PT4..." */ 0x00,0x00,0x18,0x01,0x00,0x00,0x00,0x00, /* 00000008 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000010 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000018 "........" */ 0x01,0x00,0x14,0x01,0x00,0x00,0x00,0x00, /* 00000020 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00 /* 00000030 "...." */ }; const unsigned char TemplateSbst[] = { 0x53,0x42,0x53,0x54,0x30,0x00,0x00,0x00, /* 00000000 "SBST0..." */ 0x01,0x06,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00, /* 00000020 "(.. ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000028 "........" */ }; const unsigned char TemplateSdei[] = { 0x53,0x44,0x45,0x49,0x3e,0x00,0x00,0x00, /* 00000000 "SDEI>..." */ 0x01,0x59,0x41,0x52,0x4d,0x20,0x20,0x20, /* 00000008 ".mARM " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x30,0x09,0x16,0x20 /* 00000028 "0.. " */ }; const unsigned char TemplateSdev[] = { 0x53,0x44,0x45,0x56,0x89,0x00,0x00,0x00, /* 00000000 "SDEV...." */ 0x01,0x6E,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".nINTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x05,0x01,0x21,0x20,0x00,0x03,0x41,0x00, /* 00000020 "..! ..A." */ 0x23,0x00,0x16,0x00,0x39,0x00,0x08,0x00, /* 00000028 "#...9..." */ 0x10,0x00,0x13,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x01,0x00,0x03,0x02,0x05,0x04,0x07,0x06, /* 00000038 "........" */ 0x09,0x08,0x0A,0x0B,0x0C,0x0D,0x0E,0x5C, /* 00000040 ".......\" */ 0x5C,0x5F,0x53,0x42,0x5F,0x2E,0x50,0x43, /* 00000048 "\_SB_.PC" */ 0x49,0x30,0x2E,0x55,0x53,0x42,0x31,0x2E, /* 00000050 "I0.USB1." */ 0x53,0x55,0x42,0x31,0x00,0x00,0x11,0x22, /* 00000058 "SUB1..."" */ 0x33,0x44,0x55,0x66,0x77,0x01,0x01,0x24, /* 00000060 "3DUfw..$" */ 0x00,0x10,0x00,0x20,0x00,0x10,0x00,0x04, /* 00000068 "... ...." */ 0x00,0x14,0x00,0x10,0x00,0x11,0x22,0x33, /* 00000070 "......"3" */ 0x44,0xEE,0xDD,0xCC,0xBB,0xAA,0x55,0x66, /* 00000078 "D.....Uf" */ 0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE, /* 00000080 "w......." */ 0xFF /* 00000088 "." */ }; const unsigned char TemplateSlic[] = { 0x53,0x4C,0x49,0x43,0x76,0x01,0x00,0x00, /* 00000000 "SLICv..." */ 0x01,0x07,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x11,0x02,0x11,0x20,0x00,0x00,0x00,0x00, /* 00000020 "... ...." */ 0x9C,0x00,0x00,0x00,0x06,0x02,0x00,0x00, /* 00000028 "........" */ 0x00,0x24,0x00,0x00,0x52,0x53,0x41,0x31, /* 00000030 ".$..RSA1" */ 0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000070 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */ 0x01,0x00,0x00,0x00,0xB6,0x00,0x00,0x00, /* 000000C0 "........" */ 0x00,0x00,0x02,0x00,0x49,0x4E,0x54,0x45, /* 000000C8 "....INTE" */ 0x4C,0x20,0x54,0x45,0x4D,0x50,0x4C,0x41, /* 000000D0 "L TEMPLA" */ 0x54,0x45,0x57,0x49,0x4E,0x44,0x4F,0x57, /* 000000D8 "TEWINDOW" */ 0x53,0x20,0x01,0x00,0x02,0x00,0x00,0x00, /* 000000E0 "S ......" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000110 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000118 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000128 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000130 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000138 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000140 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000148 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000150 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000158 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000160 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000168 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00 /* 00000170 "......" */ }; const unsigned char TemplateSlit[] = { 0x53,0x4C,0x49,0x54,0xBC,0x01,0x00,0x00, /* 00000000 "SLIT...." */ 0x01,0x00,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x16,0x03,0x11,0x20,0x14,0x00,0x00,0x00, /* 00000020 "... ...." */ 0x00,0x00,0x00,0x00,0x0A,0x10,0x16,0x17, /* 00000028 "........" */ 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, /* 00000030 "........" */ 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27, /* 00000038 " !"#$%&'" */ 0x10,0x0A,0x15,0x16,0x17,0x18,0x19,0x1A, /* 00000040 "........" */ 0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22, /* 00000048 "..... !"" */ 0x23,0x24,0x25,0x26,0x16,0x15,0x0A,0x10, /* 00000050 "#$%&...." */ 0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D, /* 00000058 "........" */ 0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25, /* 00000060 ".. !"#$%" */ 0x17,0x16,0x10,0x0A,0x15,0x16,0x17,0x18, /* 00000068 "........" */ 0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20, /* 00000070 "....... " */ 0x21,0x22,0x23,0x24,0x18,0x17,0x16,0x15, /* 00000078 "!"#$...." */ 0x0A,0x10,0x16,0x17,0x18,0x19,0x1A,0x1B, /* 00000080 "........" */ 0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x23, /* 00000088 ".... !"#" */ 0x19,0x18,0x17,0x16,0x10,0x0A,0x15,0x16, /* 00000090 "........" */ 0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E, /* 00000098 "........" */ 0x1F,0x20,0x21,0x22,0x1A,0x19,0x18,0x17, /* 000000A0 ". !"...." */ 0x16,0x15,0x0A,0x10,0x16,0x17,0x18,0x19, /* 000000A8 "........" */ 0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21, /* 000000B0 "...... !" */ 0x1B,0x1A,0x19,0x18,0x17,0x16,0x10,0x0A, /* 000000B8 "........" */ 0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C, /* 000000C0 "........" */ 0x1D,0x1E,0x1F,0x20,0x1C,0x1B,0x1A,0x19, /* 000000C8 "... ...." */ 0x18,0x17,0x16,0x15,0x0A,0x10,0x16,0x17, /* 000000D0 "........" */ 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, /* 000000D8 "........" */ 0x1D,0x1C,0x1B,0x1A,0x19,0x18,0x17,0x16, /* 000000E0 "........" */ 0x10,0x0A,0x15,0x16,0x17,0x18,0x19,0x1A, /* 000000E8 "........" */ 0x1B,0x1C,0x1D,0x1E,0x1E,0x1D,0x1C,0x1B, /* 000000F0 "........" */ 0x1A,0x19,0x18,0x17,0x16,0x15,0x0A,0x10, /* 000000F8 "........" */ 0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D, /* 00000100 "........" */ 0x1F,0x1E,0x1D,0x1C,0x1B,0x1A,0x19,0x18, /* 00000108 "........" */ 0x17,0x16,0x10,0x0A,0x15,0x16,0x17,0x18, /* 00000110 "........" */ 0x19,0x1A,0x1B,0x1C,0x20,0x1F,0x1E,0x1D, /* 00000118 ".... ..." */ 0x1C,0x1B,0x1A,0x19,0x18,0x17,0x16,0x15, /* 00000120 "........" */ 0x0A,0x10,0x16,0x17,0x18,0x19,0x1A,0x1B, /* 00000128 "........" */ 0x21,0x20,0x1F,0x1E,0x1D,0x1C,0x1B,0x1A, /* 00000130 "! ......" */ 0x19,0x18,0x17,0x16,0x10,0x0A,0x15,0x16, /* 00000138 "........" */ 0x17,0x18,0x19,0x1A,0x22,0x21,0x20,0x1F, /* 00000140 "...."! ." */ 0x1E,0x1D,0x1C,0x1B,0x1A,0x19,0x18,0x17, /* 00000148 "........" */ 0x16,0x15,0x0A,0x10,0x16,0x17,0x18,0x19, /* 00000150 "........" */ 0x23,0x22,0x21,0x20,0x1F,0x1E,0x1D,0x1C, /* 00000158 "#"! ...." */ 0x1B,0x1A,0x19,0x18,0x17,0x16,0x10,0x0A, /* 00000160 "........" */ 0x15,0x16,0x17,0x18,0x24,0x23,0x22,0x21, /* 00000168 "....$#"!" */ 0x20,0x1F,0x1E,0x1D,0x1C,0x1B,0x1A,0x19, /* 00000170 " ......." */ 0x18,0x17,0x16,0x15,0x0A,0x10,0x16,0x17, /* 00000178 "........" */ 0x25,0x24,0x23,0x22,0x21,0x20,0x1F,0x1E, /* 00000180 "%$#"! .." */ 0x1D,0x1C,0x1B,0x1A,0x19,0x18,0x17,0x16, /* 00000188 "........" */ 0x10,0x0A,0x15,0x16,0x26,0x25,0x24,0x23, /* 00000190 "....&%$#" */ 0x22,0x21,0x20,0x1F,0x1E,0x1D,0x1C,0x1B, /* 00000198 ""! ....." */ 0x1A,0x19,0x18,0x17,0x16,0x15,0x0A,0x10, /* 000001A0 "........" */ 0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20, /* 000001A8 "'&%$#"! " */ 0x1F,0x1E,0x1D,0x1C,0x1B,0x1A,0x19,0x18, /* 000001B0 "........" */ 0x17,0x16,0x10,0x0A /* 000001B8 "...." */ }; const unsigned char TemplateSpcr[] = { 0x53,0x50,0x43,0x52,0x50,0x00,0x00,0x00, /* 00000000 "SPCRP..." */ 0x01,0xE3,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00, /* 00000020 "(.. ...." */ 0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000048 "........" */ }; const unsigned char TemplateSpmi[] = { 0x53,0x50,0x4D,0x49,0x41,0x00,0x00,0x00, /* 00000000 "SPMIA..." */ 0x04,0x00,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x14,0x01,0x14,0x20,0x00,0x01,0x00,0x00, /* 00000020 "... ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x08,0x00,0x01,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x00 /* 00000040 "." */ }; const unsigned char TemplateSrat[] = { 0x53,0x52,0x41,0x54,0xD2,0x00,0x00,0x00, /* 00000000 "SRAT...." */ 0x03,0xB6,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x29,0x06,0x18,0x20,0x01,0x00,0x00,0x00, /* 00000020 ").. ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x10,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x01,0x28,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 ".(......" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ 0x00,0xFC,0x09,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0x02,0x18,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000070 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x03,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ 0x00,0x00,0x04,0x0C,0x00,0x00,0x00,0x00, /* 00000090 "........" */ 0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x20, /* 00000098 "....... " */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x14, /* 000000B8 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000C8 "........" */ 0x00,0x00 /* 000000D0 ".." */ }; const unsigned char TemplateStao[] = { 0x53,0x54,0x41,0x4F,0x7E,0x00,0x00,0x00, /* 00000000 "STAO~..." */ 0x01,0x7F,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x10,0x04,0x15,0x20,0x01,0x5C,0x5F,0x53, /* 00000020 "... .\_S" */ 0x42,0x30,0x2E,0x42,0x55,0x53,0x30,0x2E, /* 00000028 "B0.BUS0." */ 0x44,0x45,0x56,0x31,0x00,0x5C,0x5F,0x53, /* 00000030 "DEV1.\_S" */ 0x42,0x30,0x2E,0x42,0x55,0x53,0x30,0x2E, /* 00000038 "B0.BUS0." */ 0x44,0x45,0x56,0x32,0x00,0x5C,0x5F,0x53, /* 00000040 "DEV2.\_S" */ 0x42,0x30,0x2E,0x42,0x55,0x53,0x31,0x2E, /* 00000048 "B0.BUS1." */ 0x44,0x45,0x56,0x31,0x2E,0x44,0x45,0x56, /* 00000050 "DEV1.DEV" */ 0x32,0x00,0x5C,0x5F,0x53,0x42,0x30,0x2E, /* 00000058 "2.\_SB0." */ 0x42,0x55,0x53,0x31,0x2E,0x44,0x45,0x56, /* 00000060 "BUS1.DEV" */ 0x32,0x2E,0x44,0x45,0x56,0x32,0x00,0x5C, /* 00000068 "2.DEV2.\" */ 0x55,0x53,0x42,0x31,0x2E,0x48,0x55,0x42, /* 00000070 "USB1.HUB" */ 0x31,0x2E,0x50,0x54,0x31,0x00 /* 00000078 "1.PT1." */ }; const unsigned char TemplateSvkl[] = { 0x53,0x56,0x4B,0x4C,0x48,0x00,0x00,0x00, /* 00000000 "SVKLH..." */ 0x04,0xDB,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x31,0x03,0x21,0x20,0x02,0x00,0x00,0x00, /* 00000020 "1.! ...." */ 0x00,0x00,0x00,0x00,0x21,0x43,0xAA,0xAA, /* 00000028 "....!C.." */ 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000030 "....gE#." */ 0x00,0x00,0x00,0x00,0x21,0x43,0xBB,0xBB, /* 00000038 "....!C.." */ 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01 /* 00000040 "....gE#." */ }; const unsigned char TemplateTcpa[] = { 0x54,0x43,0x50,0x41,0x64,0x00,0x00,0x00, /* 00000000 "TCPAd..." */ 0x02,0xFF,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x80,0x31,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 ".1..INTL" */ 0x19,0x06,0x15,0x20,0x01,0x00,0x00,0x00, /* 00000020 "... ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x11,0x00,0xFF,0xEE,0xDD,0xCC,0xBB,0xAA, /* 00000030 "........" */ 0x02,0x01,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0x01,0x20,0x00,0x03, /* 00000040 "..... .." */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ 0x00,0x00,0x00,0x00,0x01,0x20,0x00,0x03, /* 00000050 "..... .." */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x01,0x01,0x01,0x01 /* 00000060 "...." */ }; const unsigned char TemplateTdel[] = { 0x54,0x44,0x45,0x4C,0x38,0x00,0x00,0x00, /* 00000000 "TDEL8..." */ 0x04,0x1C,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x30,0x09,0x21,0x20,0x00,0x00,0x00,0x00, /* 00000020 "0.! ...." */ 0xEF,0xCD,0xAB,0x78,0x56,0x34,0x12,0x00, /* 00000028 "...xV4.." */ 0x78,0x56,0x34,0x12,0xEF,0xCD,0xAB,0x00 /* 00000030 "xV4....." */ }; const unsigned char TemplateTpm2[] = { 0x54,0x50,0x4D,0x32,0x4C,0x00,0x00,0x00, /* 00000000 "TPM2L..." */ 0x04,0xCB,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x13,0x12,0x18,0x20,0x01,0x00,0x00,0x00, /* 00000020 "... ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x08,0x00,0x00,0x00,0x01,0x02,0x03,0x04, /* 00000030 "........" */ 0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C, /* 00000038 "........" */ 0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ 0x00,0x00,0x00,0x00 /* 00000048 "...." */ }; const unsigned char TemplateUefi[] = { 0x55,0x45,0x46,0x49,0x36,0x00,0x00,0x00, /* 00000000 "UEFI6..." */ 0x01,0x9B,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x00,0x01,0x02,0x03, /* 00000020 "(.. ...." */ 0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B, /* 00000028 "........" */ 0x0C,0x0D,0x0E,0x0F,0x00,0x00 /* 00000030 "......" */ }; const unsigned char TemplateViot[] = { 0x56,0x49,0x4F,0x54,0x80,0x00,0x00,0x00, /* 00000000 "VIOT...." */ 0x00,0x52,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".RINTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x05,0x01,0x21,0x20,0x04,0x00,0x30,0x00, /* 00000020 "..! ..0." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x01,0x00,0x18,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, /* 00000038 "........" */ 0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "`......." */ 0x02,0x00,0x18,0x00,0x00,0x00,0x01,0x00, /* 00000048 "........" */ 0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00, /* 00000050 "........" */ 0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "p......." */ 0x03,0x00,0x10,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ 0x04,0x00,0x10,0x00,0x00,0x00,0x00,0x00, /* 00000070 "........" */ 0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x00 /* 00000078 "........" */ }; const unsigned char TemplateWaet[] = { 0x57,0x41,0x45,0x54,0x28,0x00,0x00,0x00, /* 00000000 "WAET(..." */ 0x01,0x19,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00 /* 00000020 "(.. ...." */ }; const unsigned char TemplateWdat[] = { 0x57,0x44,0x41,0x54,0x5C,0x00,0x00,0x00, /* 00000000 "WDAT\..." */ 0x01,0xE3,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x20,0x00,0x00,0x00, /* 00000020 "(.. ..." */ 0xFF,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00, /* 00000028 "........" */ 0x58,0x02,0x00,0x00,0xFF,0x03,0x00,0x00, /* 00000030 "X......." */ 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ 0x0E,0x00,0x00,0x00,0x01,0x02,0x00,0x00, /* 00000040 "........" */ 0x01,0x10,0x00,0x02,0x60,0x04,0x00,0x00, /* 00000048 "....`..." */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000050 "........" */ 0x01,0x00,0x00,0x00 /* 00000058 "...." */ }; const unsigned char TemplateWddt[] = { 0x57,0x44,0x44,0x54,0x40,0x00,0x00,0x00, /* 00000000 "WDDT@..." */ 0x01,0x00,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00, /* 00000020 "(.. ...." */ 0x00,0x00,0x01,0xFF,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000038 "........" */ }; const unsigned char TemplateWdrt[] = { 0x57,0x44,0x52,0x54,0x47,0x00,0x00,0x00, /* 00000000 "WDRTG..." */ 0x01,0xB0,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x00,0x20,0x00,0x00, /* 00000020 "(.. . .." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 ". ......" */ 0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, /* 00000038 "........" */ 0x00,0x00,0x00,0x00,0xFF,0xFF,0x00 /* 00000040 "......." */ }; const unsigned char TemplateWpbt[] = { 0x57,0x50,0x42,0x54,0x98,0x00,0x00,0x00, /* 00000000 "WPBT...." */ 0x01,0x83,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x10,0x04,0x15,0x20,0x78,0x56,0x34,0x12, /* 00000020 "... xV4." */ 0x00,0x00,0x00,0xBB,0x00,0x00,0x00,0xAA, /* 00000028 "........" */ 0x33,0x88,0x64,0x00,0x34,0x00,0x20,0x00, /* 00000030 "3.d.4. ." */ 0x73,0x00,0x63,0x00,0x6F,0x00,0x72,0x00, /* 00000038 "s.c.o.r." */ 0x65,0x00,0x20,0x00,0x61,0x00,0x6E,0x00, /* 00000040 "e. .a.n." */ 0x64,0x00,0x20,0x00,0x37,0x00,0x20,0x00, /* 00000048 "d. .7. ." */ 0x79,0x00,0x65,0x00,0x61,0x00,0x72,0x00, /* 00000050 "y.e.a.r." */ 0x73,0x00,0x20,0x00,0x61,0x00,0x67,0x00, /* 00000058 "s. .a.g." */ 0x6F,0x00,0x20,0x00,0x6F,0x00,0x75,0x00, /* 00000060 "o. .o.u." */ 0x72,0x00,0x20,0x00,0x66,0x00,0x61,0x00, /* 00000068 "r. .f.a." */ 0x74,0x00,0x68,0x00,0x65,0x00,0x72,0x00, /* 00000070 "t.h.e.r." */ 0x73,0x00,0x20,0x00,0x62,0x00,0x72,0x00, /* 00000078 "s. .b.r." */ 0x6F,0x00,0x75,0x00,0x67,0x00,0x68,0x00, /* 00000080 "o.u.g.h." */ 0x74,0x00,0x20,0x00,0x66,0x00,0x6F,0x00, /* 00000088 "t. .f.o." */ 0x72,0x00,0x74,0x00,0x68,0x00,0x00,0x00 /* 00000090 "r.t.h..." */ }; const unsigned char TemplateWsmt[] = { 0x57,0x53,0x4D,0x54,0x28,0x00,0x00,0x00, /* 00000000 "WSMT(..." */ 0x00,0x08,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x19,0x01,0x17,0x20,0x05,0x00,0x00,0x00 /* 00000020 "... ...." */ }; const unsigned char TemplateXenv[] = { 0x58,0x45,0x4E,0x56,0x39,0x00,0x00,0x00, /* 00000000 "XENV9..." */ 0x01,0x3A,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".:INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x10,0x04,0x15,0x20,0x00,0x00,0x00,0x10, /* 00000020 "... ...." */ 0x00,0x00,0x00,0x0A,0x00,0x20,0x00,0x00, /* 00000028 "..... .." */ 0x00,0x00,0x00,0x0B,0x25,0x00,0xBB,0xAA, /* 00000030 "....%..." */ 0x03 /* 00000038 "." */ }; const unsigned char TemplateXsdt[] = { 0x58,0x53,0x44,0x54,0x64,0x00,0x00,0x00, /* 00000000 "XSDTd..." */ 0x01,0x8B,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x28,0x05,0x10,0x20,0x10,0x00,0x00,0x00, /* 00000020 "(.. ...." */ 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00, /* 00000028 ".... ..." */ 0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00, /* 00000030 "....0..." */ 0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00, /* 00000038 "....@..." */ 0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00, /* 00000040 "....P..." */ 0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00, /* 00000048 "....`..." */ 0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00, /* 00000050 "....p..." */ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00 /* 00000060 "...." */ }; #endif src/acpica/source/compiler/dtutils.c000066400000000000000000000651611465205512700200530ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dtutils.c - Utility routines for the data table compiler * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "actables.h" #define _COMPONENT DT_COMPILER ACPI_MODULE_NAME ("dtutils") /* Local prototypes */ static void DtSum ( DT_SUBTABLE *Subtable, void *Context, void *ReturnValue); /****************************************************************************** * * FUNCTION: DtError * * PARAMETERS: Level - Seriousness (Warning/error, etc.) * MessageId - Index into global message buffer * Op - Parse node where error happened * ExtraMessage - additional error message * * RETURN: None * * DESCRIPTION: Common error interface for data table compiler * *****************************************************************************/ void DtError ( UINT8 Level, UINT16 MessageId, DT_FIELD *FieldObject, char *ExtraMessage) { UINT32 Line = 0; /* Field object could be NULL */ if (FieldObject) { Line = FieldObject->Line; } /* Check if user wants to ignore this exception */ if (AslIsExceptionIgnored (AslGbl_Files[ASL_FILE_INPUT].Filename, Line, Level, MessageId)) { return; } if (FieldObject) { AslCommonError (Level, MessageId, FieldObject->Line, FieldObject->Line, FieldObject->ByteOffset, FieldObject->Column, AslGbl_Files[ASL_FILE_INPUT].Filename, ExtraMessage); } else { AslCommonError (Level, MessageId, 0, 0, 0, 0, 0, ExtraMessage); } } /****************************************************************************** * * FUNCTION: DtNameError * * PARAMETERS: Level - Seriousness (Warning/error, etc.) * MessageId - Index into global message buffer * Op - Parse node where error happened * ExtraMessage - additional error message * * RETURN: None * * DESCRIPTION: Error interface for named objects * *****************************************************************************/ void DtNameError ( UINT8 Level, UINT16 MessageId, DT_FIELD *FieldObject, char *ExtraMessage) { switch (Level) { case ASL_WARNING2: case ASL_WARNING3: if (AslGbl_WarningLevel < Level) { return; } break; default: break; } if (FieldObject) { AslCommonError (Level, MessageId, FieldObject->Line, FieldObject->Line, FieldObject->ByteOffset, FieldObject->NameColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, ExtraMessage); } else { AslCommonError (Level, MessageId, 0, 0, 0, 0, 0, ExtraMessage); } } /******************************************************************************* * * FUNCTION: DtFatal * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Dump the error log and abort the compiler. Used for serious * compile or I/O errors * ******************************************************************************/ void DtFatal ( UINT16 MessageId, DT_FIELD *FieldObject, char *ExtraMessage) { DtError (ASL_ERROR, MessageId, FieldObject, ExtraMessage); /* * TBD: remove this entire function, DtFatal * * We cannot abort the compiler on error, because we may be compiling a * list of files. We must move on to the next file. */ #ifdef __OBSOLETE CmCleanupAndExit (); exit (1); #endif } /******************************************************************************* * * FUNCTION: DtDoConstant * * PARAMETERS: String - Only hex constants are supported, * regardless of whether the 0x prefix * is used * * RETURN: Converted Integer * * DESCRIPTION: Convert a string to an integer, with overflow/error checking. * ******************************************************************************/ UINT64 DtDoConstant ( char *String) { UINT64 ConvertedInteger; /* * TBD: The ImplicitStrtoul64 function does not report overflow * conditions. The input string is simply truncated. If it is * desired to report overflow to the table compiler, this should * somehow be added here. Note: integers that are prefixed with 0x * or not are both hex integers. */ ConvertedInteger = AcpiUtImplicitStrtoul64 (String); return (ConvertedInteger); } /****************************************************************************** * * FUNCTION: DtGetFieldValue * * PARAMETERS: Field - Current field list pointer * * RETURN: Field value * * DESCRIPTION: Get field value * *****************************************************************************/ char * DtGetFieldValue ( DT_FIELD *Field) { if (!Field) { return (NULL); } return (Field->Value); } /****************************************************************************** * * FUNCTION: DtGetFieldType * * PARAMETERS: Info - Data table info * * RETURN: Field type * * DESCRIPTION: Get field type * *****************************************************************************/ UINT8 DtGetFieldType ( ACPI_DMTABLE_INFO *Info) { UINT8 Type; /* DT_FLAG means that this is the start of a block of flag bits */ /* TBD - we can make these a separate opcode later */ if (Info->Flags & DT_FLAG) { return (DT_FIELD_TYPE_FLAGS_INTEGER); } /* Type is based upon the opcode for this field in the info table */ switch (Info->Opcode) { case ACPI_DMT_FLAG0: case ACPI_DMT_FLAG1: case ACPI_DMT_FLAG2: case ACPI_DMT_FLAG3: case ACPI_DMT_FLAG4: case ACPI_DMT_FLAG5: case ACPI_DMT_FLAG6: case ACPI_DMT_FLAG7: case ACPI_DMT_FLAGS0: case ACPI_DMT_FLAGS1: case ACPI_DMT_FLAGS2: case ACPI_DMT_FLAGS8_2: case ACPI_DMT_FLAGS4: case ACPI_DMT_FLAGS4_0: case ACPI_DMT_FLAGS4_4: case ACPI_DMT_FLAGS4_8: case ACPI_DMT_FLAGS4_12: case ACPI_DMT_FLAGS16_16: Type = DT_FIELD_TYPE_FLAG; break; case ACPI_DMT_NAME4: case ACPI_DMT_SIG: case ACPI_DMT_NAME6: case ACPI_DMT_NAME8: case ACPI_DMT_STRING: case ACPI_DMT_IVRS_UNTERMINATED_STRING: Type = DT_FIELD_TYPE_STRING; break; case ACPI_DMT_BUFFER: case ACPI_DMT_RAW_BUFFER: case ACPI_DMT_BUF7: case ACPI_DMT_BUF10: case ACPI_DMT_BUF12: case ACPI_DMT_BUF16: case ACPI_DMT_BUF18: case ACPI_DMT_BUF128: case ACPI_DMT_PCI_PATH: case ACPI_DMT_PMTT_VENDOR: Type = DT_FIELD_TYPE_BUFFER; break; case ACPI_DMT_GAS: case ACPI_DMT_HESTNTFY: case ACPI_DMT_IORTMEM: Type = DT_FIELD_TYPE_INLINE_SUBTABLE; break; case ACPI_DMT_UNICODE: case ACPI_DMT_WPBT_UNICODE: Type = DT_FIELD_TYPE_UNICODE; break; case ACPI_DMT_UUID: Type = DT_FIELD_TYPE_UUID; break; case ACPI_DMT_DEVICE_PATH: Type = DT_FIELD_TYPE_DEVICE_PATH; break; case ACPI_DMT_LABEL: Type = DT_FIELD_TYPE_LABEL; break; default: Type = DT_FIELD_TYPE_INTEGER; break; } return (Type); } /****************************************************************************** * * FUNCTION: DtGetBufferLength * * PARAMETERS: Buffer - List of integers, * for example "10 3A 4F 2E" * * RETURN: Count of integer * * DESCRIPTION: Get length of bytes needed to store the integers * *****************************************************************************/ UINT32 DtGetBufferLength ( char *Buffer) { UINT32 ByteLength = 0; while (*Buffer) { if (*Buffer == ' ') { ByteLength++; while (*Buffer == ' ') { Buffer++; } } Buffer++; } return (++ByteLength); } /****************************************************************************** * * FUNCTION: DtGetFieldLength * * PARAMETERS: Field - Current field * Info - Data table info * * RETURN: Field length * * DESCRIPTION: Get length of bytes needed to compile the field * * Note: This function must remain in sync with AcpiDmDumpTable. * *****************************************************************************/ UINT32 DtGetFieldLength ( DT_FIELD *Field, ACPI_DMTABLE_INFO *Info) { UINT32 ByteLength = 0; char *Value; /* Length is based upon the opcode for this field in the info table */ switch (Info->Opcode) { case ACPI_DMT_FLAG0: case ACPI_DMT_FLAG1: case ACPI_DMT_FLAG2: case ACPI_DMT_FLAG3: case ACPI_DMT_FLAG4: case ACPI_DMT_FLAG5: case ACPI_DMT_FLAG6: case ACPI_DMT_FLAG7: case ACPI_DMT_FLAGS0: case ACPI_DMT_FLAGS1: case ACPI_DMT_FLAGS2: case ACPI_DMT_FLAGS8_2: case ACPI_DMT_FLAGS4: case ACPI_DMT_FLAGS4_0: case ACPI_DMT_FLAGS4_4: case ACPI_DMT_FLAGS4_8: case ACPI_DMT_FLAGS4_12: case ACPI_DMT_FLAGS16_16: case ACPI_DMT_LABEL: case ACPI_DMT_EXTRA_TEXT: ByteLength = 0; break; case ACPI_DMT_UINT8: case ACPI_DMT_CHKSUM: case ACPI_DMT_SPACEID: case ACPI_DMT_ACCWIDTH: case ACPI_DMT_CEDT: case ACPI_DMT_IVRS: case ACPI_DMT_IVRS_DE: case ACPI_DMT_GTDT: case ACPI_DMT_MADT: case ACPI_DMT_MPAM_LOCATOR: case ACPI_DMT_PCCT: case ACPI_DMT_PMTT: case ACPI_DMT_PPTT: case ACPI_DMT_RGRT: case ACPI_DMT_SDEV: case ACPI_DMT_SRAT: case ACPI_DMT_AEST: case ACPI_DMT_AEST_RES: case ACPI_DMT_AEST_XFACE: case ACPI_DMT_AEST_XRUPT: case ACPI_DMT_ASF: case ACPI_DMT_CDAT: case ACPI_DMT_HESTNTYP: case ACPI_DMT_FADTPM: case ACPI_DMT_EINJACT: case ACPI_DMT_EINJINST: case ACPI_DMT_ERSTACT: case ACPI_DMT_ERSTINST: case ACPI_DMT_DMAR_SCOPE: case ACPI_DMT_VIOT: ByteLength = 1; break; case ACPI_DMT_ASPT: case ACPI_DMT_UINT16: case ACPI_DMT_DMAR: case ACPI_DMT_HEST: case ACPI_DMT_HMAT: case ACPI_DMT_NFIT: case ACPI_DMT_PCI_PATH: case ACPI_DMT_PHAT: ByteLength = 2; break; case ACPI_DMT_UINT24: ByteLength = 3; break; case ACPI_DMT_UINT32: case ACPI_DMT_AEST_CACHE: case ACPI_DMT_AEST_GIC: case ACPI_DMT_NAME4: case ACPI_DMT_SIG: case ACPI_DMT_LPIT: case ACPI_DMT_TPM2: ByteLength = 4; break; case ACPI_DMT_UINT40: ByteLength = 5; break; case ACPI_DMT_UINT48: case ACPI_DMT_NAME6: ByteLength = 6; break; case ACPI_DMT_UINT56: case ACPI_DMT_BUF7: ByteLength = 7; break; case ACPI_DMT_UINT64: case ACPI_DMT_NAME8: ByteLength = 8; break; case ACPI_DMT_STRING: Value = DtGetFieldValue (Field); if (Value) { ByteLength = strlen (Value) + 1; } else { /* At this point, this is a fatal error */ sprintf (AslGbl_MsgBuffer, "Expected \"%s\"", Info->Name); DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, AslGbl_MsgBuffer); return (0); } break; case ACPI_DMT_IVRS_UNTERMINATED_STRING: Value = DtGetFieldValue (Field); if (Value) { ByteLength = strlen (Value); } else { /* At this point, this is a fatal error */ sprintf (AslGbl_MsgBuffer, "Expected \"%s\"", Info->Name); DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, AslGbl_MsgBuffer); return (0); } break; case ACPI_DMT_GAS: ByteLength = sizeof (ACPI_GENERIC_ADDRESS); break; case ACPI_DMT_HESTNTFY: ByteLength = sizeof (ACPI_HEST_NOTIFY); break; case ACPI_DMT_IORTMEM: ByteLength = sizeof (ACPI_IORT_MEMORY_ACCESS); break; case ACPI_DMT_BUFFER: case ACPI_DMT_RAW_BUFFER: case ACPI_DMT_PMTT_VENDOR: Value = DtGetFieldValue (Field); if (Value) { ByteLength = DtGetBufferLength (Value); } else { /* At this point, this is a fatal error */ sprintf (AslGbl_MsgBuffer, "Expected \"%s\"", Info->Name); DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, AslGbl_MsgBuffer); return (0); } break; case ACPI_DMT_BUF10: ByteLength = 10; break; case ACPI_DMT_BUF12: ByteLength = 12; break; case ACPI_DMT_BUF16: case ACPI_DMT_UUID: ByteLength = 16; break; case ACPI_DMT_BUF18: ByteLength = 18; break; case ACPI_DMT_BUF128: ByteLength = 128; break; case ACPI_DMT_UNICODE: case ACPI_DMT_WPBT_UNICODE: Value = DtGetFieldValue (Field); /* TBD: error if Value is NULL? (as below?) */ ByteLength = (strlen (Value) + 1) * sizeof (UINT16); break; default: DtFatal (ASL_MSG_COMPILER_INTERNAL, Field, "Invalid table opcode"); return (0); } return (ByteLength); } /****************************************************************************** * * FUNCTION: DtSum * * PARAMETERS: DT_WALK_CALLBACK: * Subtable - Subtable * Context - Unused * ReturnValue - Store the checksum of subtable * * RETURN: Status * * DESCRIPTION: Get the checksum of subtable * *****************************************************************************/ static void DtSum ( DT_SUBTABLE *Subtable, void *Context, void *ReturnValue) { UINT8 Checksum; UINT8 *Sum = ReturnValue; Checksum = AcpiUtChecksum (Subtable->Buffer, Subtable->Length); *Sum = (UINT8) (*Sum + Checksum); } /****************************************************************************** * * FUNCTION: DtSetTableChecksum * * PARAMETERS: ChecksumPointer - Where to return the checksum * * RETURN: None * * DESCRIPTION: Set checksum of the whole data table into the checksum field * *****************************************************************************/ void DtSetTableChecksum ( UINT8 *ChecksumPointer) { UINT8 Checksum = 0; UINT8 OldSum; DtWalkTableTree (AslGbl_RootTable, DtSum, NULL, &Checksum); OldSum = *ChecksumPointer; Checksum = (UINT8) (Checksum - OldSum); /* Compute the final checksum */ Checksum = (UINT8) (0 - Checksum); *ChecksumPointer = Checksum; } /****************************************************************************** * * FUNCTION: DtSetTableLength * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Walk the subtables and set all the length fields * *****************************************************************************/ void DtSetTableLength ( void) { DT_SUBTABLE *ParentTable; DT_SUBTABLE *ChildTable; ParentTable = AslGbl_RootTable; ChildTable = NULL; if (!ParentTable) { return; } DtSetSubtableLength (ParentTable); while (1) { ChildTable = DtGetNextSubtable (ParentTable, ChildTable); if (ChildTable) { if (ChildTable->LengthField) { DtSetSubtableLength (ChildTable); } if (ChildTable->Child) { ParentTable = ChildTable; ChildTable = NULL; } else { ParentTable->TotalLength += ChildTable->TotalLength; if (ParentTable->LengthField) { DtSetSubtableLength (ParentTable); } } } else { ChildTable = ParentTable; if (ChildTable == AslGbl_RootTable) { break; } ParentTable = DtGetParentSubtable (ParentTable); ParentTable->TotalLength += ChildTable->TotalLength; if (ParentTable->LengthField) { DtSetSubtableLength (ParentTable); } } } } /****************************************************************************** * * FUNCTION: DtWalkTableTree * * PARAMETERS: StartTable - Subtable in the tree where walking begins * UserFunction - Called during the walk * Context - Passed to user function * ReturnValue - The return value of UserFunction * * RETURN: None * * DESCRIPTION: Performs a depth-first walk of the subtable tree * *****************************************************************************/ void DtWalkTableTree ( DT_SUBTABLE *StartTable, DT_WALK_CALLBACK UserFunction, void *Context, void *ReturnValue) { DT_SUBTABLE *ParentTable; DT_SUBTABLE *ChildTable; ParentTable = StartTable; ChildTable = NULL; if (!ParentTable) { return; } UserFunction (ParentTable, Context, ReturnValue); while (1) { ChildTable = DtGetNextSubtable (ParentTable, ChildTable); if (ChildTable) { UserFunction (ChildTable, Context, ReturnValue); if (ChildTable->Child) { ParentTable = ChildTable; ChildTable = NULL; } } else { ChildTable = ParentTable; if (ChildTable == AslGbl_RootTable) { break; } ParentTable = DtGetParentSubtable (ParentTable); if (ChildTable->Peer == StartTable) { break; } } } } src/acpica/source/compiler/preprocess.h000066400000000000000000000344001465205512700205450ustar00rootroot00000000000000/****************************************************************************** * * Module Name: preprocess.h - header for iASL Preprocessor * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define __PREPROCESS_H__ #ifndef _PREPROCESS #define _PREPROCESS #undef PR_EXTERN #ifdef _DECLARE_PR_GLOBALS #define PR_EXTERN #define PR_INIT_GLOBAL(a,b) (a)=(b) #else #define PR_EXTERN extern #define PR_INIT_GLOBAL(a,b) (a) #endif /* * Configuration */ #define PR_MAX_MACRO_ARGS 32 /* Max number of macro args */ #define PR_MAX_ARG_INSTANCES 24 /* Max instances of any one arg */ #define PR_LINES_PER_BLOCK 4096 /* Max input source lines per block */ /* * Local defines and macros */ #define PR_TOKEN_SEPARATORS " ,(){}\t\n" #define PR_MACRO_SEPARATORS " ,(){}~!*/%+-<>=&^|\"\t\n" #define PR_MACRO_ARGUMENTS " ,\t\n" #define PR_EXPR_SEPARATORS " ,(){}~!*/%+-<>=&^|\"\t\n" #define PR_PREFIX_ID "Pr(%.4u) - " /* Used for debug output */ #define THIS_TOKEN_OFFSET(t) ((AslGbl_MainTokenBuffer - t) + 1) /* * Preprocessor structures */ typedef struct pr_macro_arg { char *Name; UINT32 Offset[PR_MAX_ARG_INSTANCES]; UINT16 UseCount; } PR_MACRO_ARG; typedef struct pr_define_info { struct pr_define_info *Previous; struct pr_define_info *Next; char *Identifier; char *Replacement; char *Body; /* Macro body */ PR_MACRO_ARG *Args; /* Macro arg list */ UINT16 ArgCount; /* Macro arg count */ BOOLEAN Persist; /* Keep for entire compiler run */ } PR_DEFINE_INFO; typedef struct pr_directive_info { char *Name; /* Directive name */ UINT8 ArgCount; /* Required # of args */ } PR_DIRECTIVE_INFO; typedef struct pr_operator_info { char *Op; } PR_OPERATOR_INFO; typedef struct pr_file_node { struct pr_file_node *Next; FILE *File; char *Filename; UINT32 CurrentLineNumber; } PR_FILE_NODE; #define MAX_ARGUMENT_LENGTH 24 typedef struct directive_info { struct directive_info *Next; char Argument[MAX_ARGUMENT_LENGTH]; int Directive; BOOLEAN IgnoringThisCodeBlock; } DIRECTIVE_INFO; /* * Globals */ PR_EXTERN char PR_INIT_GLOBAL (*AslGbl_MainTokenBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */ PR_EXTERN char PR_INIT_GLOBAL (*AslGbl_MacroTokenBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */ PR_EXTERN char PR_INIT_GLOBAL (*AslGbl_MacroTokenReplaceBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */ PR_EXTERN char PR_INIT_GLOBAL (*AslGbl_ExpressionTokenBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */ PR_EXTERN UINT32 AslGbl_PreprocessorLineNumber; PR_EXTERN int AslGbl_IfDepth; PR_EXTERN PR_FILE_NODE *AslGbl_InputFileList; PR_EXTERN BOOLEAN PR_INIT_GLOBAL (AslGbl_PreprocessorError, FALSE); PR_EXTERN BOOLEAN PR_INIT_GLOBAL (AslGbl_IgnoringThisCodeBlock, FALSE); PR_EXTERN PR_DEFINE_INFO PR_INIT_GLOBAL (*AslGbl_DefineList, NULL); PR_EXTERN DIRECTIVE_INFO PR_INIT_GLOBAL (*AslGbl_DirectiveStack, NULL); #if 0 /* TBD for macros */ PR_EXTERN char PR_INIT_GLOBAL (*XXXEvalBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */ #endif /* * prscan - Preprocessor entry */ void PrInitializePreprocessor ( void); void PrInitializeGlobals ( void); void PrTerminatePreprocessor ( void); void PrDoPreprocess ( void); UINT64 PrIsDefined ( char *Identifier); UINT64 PrResolveDefine ( char *Identifier); int PrInitLexer ( char *String); void PrTerminateLexer ( void); /* * prmacros - Support for #defines and macros */ void PrDumpPredefinedNames ( void); PR_DEFINE_INFO * PrAddDefine ( char *Token, char *Token2, BOOLEAN Persist); void PrRemoveDefine ( char *DefineName); PR_DEFINE_INFO * PrMatchDefine ( char *MatchString); void PrAddMacro ( char *Name, char **Next); void PrDoMacroInvocation ( char *TokenBuffer, char *MacroStart, PR_DEFINE_INFO *DefineInfo, char **Next); /* * prexpress - #if expression support */ ACPI_STATUS PrResolveIntegerExpression ( char *Line, UINT64 *ReturnValue); char * PrPrioritizeExpression ( char *OriginalLine); /* * prparser - lex/yacc expression parser */ UINT64 PrEvaluateExpression ( char *ExprString); /* * prutils - Preprocessor utilities */ char * PrGetNextToken ( char *Buffer, char *MatchString, char **Next); void PrError ( UINT8 Level, UINT16 MessageId, UINT32 Column); void PrReplaceResizeSubstring( PR_MACRO_ARG *Args, UINT32 Diff1, UINT32 Diff2, UINT32 i, char *Token); char * PrReplaceData ( char *Buffer, UINT32 LengthToRemove, char *BufferToAdd, UINT32 LengthToAdd); FILE * PrOpenIncludeFile ( char *Filename, char *OpenMode, char **FullPathname); FILE * PrOpenIncludeWithPrefix ( char *PrefixDir, char *Filename, char *OpenMode, char **FullPathname); void PrPushInputFileStack ( FILE *InputFile, char *Filename); BOOLEAN PrPopInputFileStack ( void); #endif src/acpica/source/compiler/prexpress.c000066400000000000000000000363341465205512700204160ustar00rootroot00000000000000/****************************************************************************** * * Module Name: prexpress - Preprocessor #if expression support * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #define _COMPONENT ASL_PREPROCESSOR ACPI_MODULE_NAME ("prexpress") /* Local prototypes */ static char * PrExpandMacros ( char *Line); #ifdef _UNDER_DEVELOPMENT /****************************************************************************** * * FUNCTION: PrUnTokenize * * PARAMETERS: Buffer - Token Buffer * Next - "Next" buffer from GetNextToken * * RETURN: None * * DESCRIPTION: Un-tokenized the current token buffer. The implementation is * to simply set the null inserted by GetNextToken to a blank. * If Next is NULL, there were no tokens found in the Buffer, * so there is nothing to do. * *****************************************************************************/ static void PrUnTokenize ( char *Buffer, char *Next) { UINT32 Length = strlen (Buffer); if (!Next) { return; } if (Buffer[Length] != '\n') { Buffer[strlen(Buffer)] = ' '; } } #endif /****************************************************************************** * * FUNCTION: PrExpandMacros * * PARAMETERS: Line - Pointer into the current line * * RETURN: Updated pointer into the current line * * DESCRIPTION: Expand any macros found in the current line buffer. * *****************************************************************************/ static char * PrExpandMacros ( char *Line) { char *Token; char *ReplaceString; PR_DEFINE_INFO *DefineInfo; ACPI_SIZE TokenOffset; char *Next; int OffsetAdjust; strcpy (AslGbl_ExpressionTokenBuffer, AslGbl_CurrentLineBuffer); Token = PrGetNextToken (AslGbl_ExpressionTokenBuffer, PR_EXPR_SEPARATORS, &Next); OffsetAdjust = 0; while (Token) { DefineInfo = PrMatchDefine (Token); if (DefineInfo) { if (DefineInfo->Body) { /* This is a macro. TBD: Is this allowed? */ DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "Matched Macro: %s->%s\n", AslGbl_CurrentLineNumber, DefineInfo->Identifier, DefineInfo->Replacement); PrDoMacroInvocation (AslGbl_ExpressionTokenBuffer, Token, DefineInfo, &Next); } else { ReplaceString = DefineInfo->Replacement; /* Replace the name in the original line buffer */ TokenOffset = Token - AslGbl_ExpressionTokenBuffer + OffsetAdjust; PrReplaceData ( &AslGbl_CurrentLineBuffer[TokenOffset], strlen (Token), ReplaceString, strlen (ReplaceString)); /* Adjust for length difference between old and new name length */ OffsetAdjust += strlen (ReplaceString) - strlen (Token); DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "Matched #define within expression: %s->%s\n", AslGbl_CurrentLineNumber, Token, *ReplaceString ? ReplaceString : "(NULL STRING)"); } } Token = PrGetNextToken (NULL, PR_EXPR_SEPARATORS, &Next); } return (Line); } /****************************************************************************** * * FUNCTION: PrIsDefined * * PARAMETERS: Identifier - Name to be resolved * * RETURN: 64-bit boolean integer value * * DESCRIPTION: Returns TRUE if the name is defined, FALSE otherwise (0). * *****************************************************************************/ UINT64 PrIsDefined ( char *Identifier) { UINT64 Value; PR_DEFINE_INFO *DefineInfo; DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "**** Is defined?: %s\n", AslGbl_CurrentLineNumber, Identifier); Value = 0; /* Default is "Not defined" -- FALSE */ DefineInfo = PrMatchDefine (Identifier); if (DefineInfo) { Value = ACPI_UINT64_MAX; /* TRUE */ } DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "[#if defined %s] resolved to: %8.8X%8.8X\n", AslGbl_CurrentLineNumber, Identifier, ACPI_FORMAT_UINT64 (Value)); return (Value); } /****************************************************************************** * * FUNCTION: PrResolveDefine * * PARAMETERS: Identifier - Name to be resolved * * RETURN: A 64-bit boolean integer value * * DESCRIPTION: Returns TRUE if the name is defined, FALSE otherwise (0). * *****************************************************************************/ UINT64 PrResolveDefine ( char *Identifier) { UINT64 Value; PR_DEFINE_INFO *DefineInfo; DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "**** Resolve #define: %s\n", AslGbl_CurrentLineNumber, Identifier); Value = 0; /* Default is "Not defined" -- FALSE */ DefineInfo = PrMatchDefine (Identifier); if (DefineInfo) { Value = ACPI_UINT64_MAX; /* TRUE */ } DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "[#if defined %s] resolved to: %8.8X%8.8X\n", AslGbl_CurrentLineNumber, Identifier, ACPI_FORMAT_UINT64 (Value)); return (Value); } /****************************************************************************** * * FUNCTION: PrResolveIntegerExpression * * PARAMETERS: Line - Pointer to integer expression * ReturnValue - Where the resolved 64-bit integer is * returned. * * RETURN: Status * * DESCRIPTION: Resolve an integer expression to a single value. Supports * both integer constants and labels. * *****************************************************************************/ ACPI_STATUS PrResolveIntegerExpression ( char *Line, UINT64 *ReturnValue) { UINT64 Result; char *ExpandedLine; DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "**** Resolve #if: %s\n", AslGbl_CurrentLineNumber, Line); /* Expand all macros within the expression first */ ExpandedLine = PrExpandMacros (Line); /* Now we can evaluate the expression */ Result = PrEvaluateExpression (ExpandedLine); DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "**** Expression Resolved to: %8.8X%8.8X\n", AslGbl_CurrentLineNumber, ACPI_FORMAT_UINT64 (Result)); *ReturnValue = Result; return (AE_OK); #if 0 InvalidExpression: ACPI_FREE (EvalBuffer); PrError (ASL_ERROR, ASL_MSG_INVALID_EXPRESSION, 0); return (AE_ERROR); NormalExit: DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "**** Expression Resolved to: %8.8X%8.8X\n", AslGbl_CurrentLineNumber, ACPI_FORMAT_UINT64 (Value1)); *ReturnValue = Value1; return (AE_OK); #endif } src/acpica/source/compiler/prmacros.c000066400000000000000000000553001465205512700202030ustar00rootroot00000000000000/****************************************************************************** * * Module Name: prmacros - Preprocessor #define macro support * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #define _COMPONENT ASL_PREPROCESSOR ACPI_MODULE_NAME ("prmacros") /******************************************************************************* * * FUNCTION: PrDumpPredefinedNames * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Dump the list of #defines. Used as the preprocessor starts, to * display the names that were defined on the command line. * Debug information only. * ******************************************************************************/ void PrDumpPredefinedNames ( void) { PR_DEFINE_INFO *DefineInfo; DefineInfo = AslGbl_DefineList; while (DefineInfo) { DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "Predefined #define: %s->%s\n", 0, DefineInfo->Identifier, DefineInfo->Replacement); DefineInfo = DefineInfo->Next; } } /******************************************************************************* * * FUNCTION: PrAddDefine * * PARAMETERS: Identifier - Name to be replaced * Replacement - Replacement for Identifier * Persist - Keep define across multiple compiles? * * RETURN: A new define_info struct. NULL on error. * * DESCRIPTION: Add a new #define to the global list * ******************************************************************************/ PR_DEFINE_INFO * PrAddDefine ( char *Identifier, char *Replacement, BOOLEAN Persist) { char *IdentifierString; char *ReplacementString; PR_DEFINE_INFO *DefineInfo; if (!Replacement) { Replacement = ""; } /* Check for already-defined first */ DefineInfo = PrMatchDefine (Identifier); if (DefineInfo) { DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "#define: name already exists: %s\n", AslGbl_CurrentLineNumber, Identifier); /* * Name already exists. This is only an error if the target name * is different. */ if (strcmp (Replacement, DefineInfo->Replacement)) { PrError (ASL_ERROR, ASL_MSG_EXISTING_NAME, THIS_TOKEN_OFFSET (Identifier)); return (NULL); } return (DefineInfo); } /* Copy input strings */ IdentifierString = UtLocalCalloc (strlen (Identifier) + 1); strcpy (IdentifierString, Identifier); ReplacementString = UtLocalCalloc (strlen (Replacement) + 1); strcpy (ReplacementString, Replacement); /* Init and link new define info struct */ DefineInfo = UtLocalCalloc (sizeof (PR_DEFINE_INFO)); DefineInfo->Replacement = ReplacementString; DefineInfo->Identifier = IdentifierString; DefineInfo->Persist = Persist; if (AslGbl_DefineList) { AslGbl_DefineList->Previous = DefineInfo; } DefineInfo->Next = AslGbl_DefineList; AslGbl_DefineList = DefineInfo; return (DefineInfo); } /******************************************************************************* * * FUNCTION: PrRemoveDefine * * PARAMETERS: DefineName - Name of define to be removed * * RETURN: None * * DESCRIPTION: Implements #undef. Remove a #define if found in the global * list. No error if the target of the #undef does not exist, * as per the C #undef definition. * ******************************************************************************/ void PrRemoveDefine ( char *DefineName) { PR_DEFINE_INFO *DefineInfo; /* Match name and delete the node */ DefineInfo = AslGbl_DefineList; while (DefineInfo) { if (!strcmp (DefineName, DefineInfo->Identifier)) { /* Remove from linked list */ if (DefineInfo->Previous) { (DefineInfo->Previous)->Next = DefineInfo->Next; } else { AslGbl_DefineList = DefineInfo->Next; } if (DefineInfo->Next) { (DefineInfo->Next)->Previous = DefineInfo->Previous; } free (DefineInfo); return; } DefineInfo = DefineInfo->Next; } /* * Name was not found. By definition of #undef, this is not * an error, however. */ DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "#undef: could not find %s\n", AslGbl_CurrentLineNumber, DefineName); } /******************************************************************************* * * FUNCTION: PrMatchDefine * * PARAMETERS: MatchString - Name associated with the #define * * RETURN: Matched string if found. NULL otherwise. * * DESCRIPTION: Find a name in global #define list * ******************************************************************************/ PR_DEFINE_INFO * PrMatchDefine ( char *MatchString) { PR_DEFINE_INFO *DefineInfo; DefineInfo = AslGbl_DefineList; while (DefineInfo) { if (!strcmp (MatchString, DefineInfo->Identifier)) { return (DefineInfo); } DefineInfo = DefineInfo->Next; } return (NULL); } /******************************************************************************* * * FUNCTION: PrAddMacro * * PARAMETERS: Name - Start of the macro definition * Next - "Next" buffer from GetNextToken * * RETURN: None * * DESCRIPTION: Add a new macro to the list of #defines. Handles argument * processing. * ******************************************************************************/ void PrAddMacro ( char *Name, char **Next) { char *Token = NULL; ACPI_SIZE TokenOffset; ACPI_SIZE MacroBodyOffset; PR_DEFINE_INFO *DefineInfo; PR_MACRO_ARG *Args; char *Body; char *BodyInSource; UINT32 i; UINT16 UseCount = 0; UINT16 ArgCount = 0; UINT32 Depth = 1; /*UINT32 Depth = 1;*/ UINT32 EndOfArgList; char BufferChar; /* Find the end of the arguments list */ TokenOffset = Name - AslGbl_MainTokenBuffer + strlen (Name) + 1; while (1) { BufferChar = AslGbl_CurrentLineBuffer[TokenOffset]; if (BufferChar == '(') { Depth++; } else if (BufferChar == ')') { Depth--; } else if (BufferChar == 0) { PrError (ASL_ERROR, ASL_MSG_MACRO_SYNTAX, TokenOffset); return; } if (Depth == 0) { /* Found arg list end */ EndOfArgList = TokenOffset; break; } TokenOffset++; } /* At this point, we know that we have a reasonable argument list */ Args = UtLocalCalloc (sizeof (PR_MACRO_ARG) * PR_MAX_MACRO_ARGS); /* Get the macro argument names */ for (i = 0; i < PR_MAX_MACRO_ARGS; i++) { Token = PrGetNextToken (NULL, PR_MACRO_SEPARATORS, Next); if (!Token) { /* This is the case for a NULL macro body */ BodyInSource = ""; goto AddMacroToList; } /* Don't go beyond the argument list */ TokenOffset = Token - AslGbl_MainTokenBuffer + strlen (Token); if (TokenOffset > EndOfArgList) { break; } DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "Macro param: %s \n", AslGbl_CurrentLineNumber, Token); Args[i].Name = UtLocalCalloc (strlen (Token) + 1); strcpy (Args[i].Name, Token); Args[i].UseCount = 0; ArgCount++; if (ArgCount >= PR_MAX_MACRO_ARGS) { PrError (ASL_ERROR, ASL_MSG_TOO_MANY_ARGUMENTS, TokenOffset); goto ErrorExit; } } /* Get the macro body. Token now points to start of body */ MacroBodyOffset = Token - AslGbl_MainTokenBuffer; /* Match each method arg in the macro body for later use */ while (Token) { /* Search the macro arg list for matching arg */ for (i = 0; ((i < PR_MAX_MACRO_ARGS) && Args[i].Name); i++) { /* * Save argument offset within macro body. This is the mechanism * used to expand the macro upon invocation. * * Handles multiple instances of the same argument */ if (!strcmp (Token, Args[i].Name)) { UseCount = Args[i].UseCount; Args[i].Offset[UseCount] = (Token - AslGbl_MainTokenBuffer) - MacroBodyOffset; DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "Macro Arg #%u: %s UseCount %u Offset %u \n", AslGbl_CurrentLineNumber, i, Token, UseCount+1, Args[i].Offset[UseCount]); Args[i].UseCount++; if (Args[i].UseCount >= PR_MAX_ARG_INSTANCES) { PrError (ASL_ERROR, ASL_MSG_TOO_MANY_ARGUMENTS, THIS_TOKEN_OFFSET (Token)); goto ErrorExit; } break; } } Token = PrGetNextToken (NULL, PR_MACRO_SEPARATORS, Next); } BodyInSource = &AslGbl_CurrentLineBuffer[MacroBodyOffset]; AddMacroToList: /* Check if name is already defined first */ DefineInfo = PrMatchDefine (Name); if (DefineInfo) { DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "#define: macro name already exists: %s\n", AslGbl_CurrentLineNumber, Name); /* Error only if not exactly the same macro */ if (strcmp (DefineInfo->Body, BodyInSource) || (DefineInfo->ArgCount != ArgCount)) { PrError (ASL_ERROR, ASL_MSG_EXISTING_NAME, THIS_TOKEN_OFFSET (Name)); } goto ErrorExit; } DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "Macro body: %s \n", AslGbl_CurrentLineNumber, BodyInSource); /* Add macro to the #define list */ DefineInfo = PrAddDefine (Name, BodyInSource, FALSE); if (DefineInfo) { Body = UtLocalCalloc (strlen (BodyInSource) + 1); strcpy (Body, BodyInSource); DefineInfo->Body = Body; DefineInfo->Args = Args; DefineInfo->ArgCount = ArgCount; } return; ErrorExit: ACPI_FREE (Args); return; } /******************************************************************************* * * FUNCTION: PrDoMacroInvocation * * PARAMETERS: TokenBuffer - Current line buffer * MacroStart - Start of the macro invocation within * the token buffer * DefineInfo - Info for this macro * Next - "Next" buffer from GetNextToken * * RETURN: None * * DESCRIPTION: Expand a macro invocation * ******************************************************************************/ void PrDoMacroInvocation ( char *TokenBuffer, char *MacroStart, PR_DEFINE_INFO *DefineInfo, char **Next) { PR_MACRO_ARG *Args; char *Token = NULL; UINT32 TokenOffset; UINT32 Length; UINT32 i; UINT32 Diff1; UINT32 Diff2; /* Take a copy of the macro body for expansion */ strcpy (AslGbl_MacroTokenBuffer, DefineInfo->Body); /* Replace each argument within the prototype body */ Args = DefineInfo->Args; if (!Args->Name) { /* This macro has no arguments */ Token = PrGetNextToken (NULL, PR_MACRO_ARGUMENTS, Next); if (!Token) { goto BadInvocation; } TokenOffset = (MacroStart - TokenBuffer); Length = Token - MacroStart + strlen (Token) + 1; PrReplaceData ( &AslGbl_CurrentLineBuffer[TokenOffset], Length, AslGbl_MacroTokenBuffer, strlen (AslGbl_MacroTokenBuffer)); return; } while (Args->Name) { /* Get the next argument from macro invocation */ Token = PrGetNextToken (NULL, PR_MACRO_SEPARATORS, Next); if (!Token) { goto BadInvocation; } /* * Avoid optimizing using just 1 signed int due to specific * non-portable implementations of signed ints */ Diff1 = strlen (Args->Name) > strlen (Token) ? strlen (Args->Name) - strlen (Token) : 0; Diff2 = strlen (Args->Name) < strlen (Token) ? strlen (Token) - strlen (Args->Name) : 0; /* Replace all instances of this argument */ for (i = 0; i < Args->UseCount; i++) { /* * To test the output of the preprocessed macro function that * is passed to the compiler */ /* * fprintf (stderr, "Current token = %s \t Current arg_name = %s \ * \t strlen (Token) = %u \t strlen (Args->Name) = %u \t Offset = %u \ * \t UseCount = %u \t", Token, Args->Name, strlen (Token), \ * strlen (Args->Name), Args->Offset[i], Args->UseCount); */ AslGbl_MacroTokenReplaceBuffer = (char *) calloc ((strlen (AslGbl_MacroTokenBuffer)), sizeof (char)); PrReplaceResizeSubstring (Args, Diff1, Diff2, i, Token); DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "ExpandArg: %s \n", AslGbl_CurrentLineNumber, AslGbl_MacroTokenBuffer); } Args++; } if (!Token) { return; } /* Replace the entire macro invocation with the expanded macro */ TokenOffset = (MacroStart - TokenBuffer); Length = Token - MacroStart + strlen (Token) + 1; PrReplaceData ( &AslGbl_CurrentLineBuffer[TokenOffset], Length, AslGbl_MacroTokenBuffer, strlen (AslGbl_MacroTokenBuffer)); return; BadInvocation: PrError (ASL_ERROR, ASL_MSG_INVALID_INVOCATION, THIS_TOKEN_OFFSET (MacroStart)); DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "Bad macro invocation: %s \n", AslGbl_CurrentLineNumber, AslGbl_MacroTokenBuffer); return; } src/acpica/source/compiler/prparser.l000066400000000000000000000304401465205512700202220ustar00rootroot00000000000000%{ /****************************************************************************** * * Module Name: prparser.l - Flex input file for preprocessor lexer * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #include "prparser.y.h" /* Buffer to pass strings to the parser */ #define STRING_SETUP strcpy (AslGbl_StringBuffer, PrParsertext);\ PrParserlval.str = AslGbl_StringBuffer #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("prscanner") /* Local prototypes */ static char PrDoCommentType1 ( void); static char PrDoCommentType2 ( void); %} %option noyywrap Number [0-9a-fA-F]+ HexNumber 0[xX][0-9a-fA-F]+ WhiteSpace [ \t\v\r]+ NewLine [\n] Identifier [a-zA-Z][0-9a-zA-Z]* %% "/*" { if (!PrDoCommentType1 ()) {yyterminate ();} } "//" { if (!PrDoCommentType2 ()) {yyterminate ();} } \( return (EXPOP_PAREN_OPEN); \) return (EXPOP_PAREN_CLOSE); \~ return (EXPOP_ONES_COMPLIMENT); \! return (EXPOP_LOGICAL_NOT); \* return (EXPOP_MULTIPLY); \/ return (EXPOP_DIVIDE); \% return (EXPOP_MODULO); \+ return (EXPOP_ADD); \- return (EXPOP_SUBTRACT); ">>" return (EXPOP_SHIFT_RIGHT); "<<" return (EXPOP_SHIFT_LEFT); \< return (EXPOP_LESS); \> return (EXPOP_GREATER); "<=" return (EXPOP_LESS_EQUAL); ">=" return (EXPOP_GREATER_EQUAL); "==" return (EXPOP_EQUAL); "!=" return (EXPOP_NOT_EQUAL); \& return (EXPOP_AND); \^ return (EXPOP_XOR); \| return (EXPOP_OR); "&&" return (EXPOP_LOGICAL_AND); "||" return (EXPOP_LOGICAL_OR); "defined" return (EXPOP_DEFINE); {Identifier} {STRING_SETUP; return (EXPOP_IDENTIFIER);} <> return (EXPOP_EOF); /* null end-of-string */ {Number} return (EXPOP_NUMBER); {HexNumber} return (EXPOP_HEX_NUMBER); {NewLine} return (EXPOP_NEW_LINE); {WhiteSpace} /* Ignore */ . return (EXPOP_EOF); %% /* * Local support functions */ static YY_BUFFER_STATE LexBuffer; /****************************************************************************** * * FUNCTION: PrInitLexer * * PARAMETERS: String - Input string to be parsed * * RETURN: TRUE if parser returns NULL. FALSE otherwise. * * DESCRIPTION: Initialization routine for lexer. The lexer needs * a buffer to handle strings instead of a file. * *****************************************************************************/ int PrInitLexer ( char *String) { LexBuffer = yy_scan_string (String); return (LexBuffer == NULL); } /****************************************************************************** * * FUNCTION: PrTerminateLexer * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Termination routine for thelexer. * *****************************************************************************/ void PrTerminateLexer ( void) { yy_delete_buffer (LexBuffer); } /******************************************************************************** * * FUNCTION: PrDoCommentType1 * * PARAMETERS: none * * RETURN: none * * DESCRIPTION: Process a new legacy comment. Just toss it. * ******************************************************************************/ static char PrDoCommentType1 ( void) { int c; Loop: while (((c = input ()) != '*') && (c != EOF)) { } if (c == EOF) { return (FALSE); } if (((c = input ()) != '/') && (c != EOF)) { unput (c); goto Loop; } if (c == EOF) { return (FALSE); } return (TRUE); } /******************************************************************************** * * FUNCTION: PrDoCommentType2 * * PARAMETERS: none * * RETURN: none * * DESCRIPTION: Process a new "//" comment. Just toss it. * ******************************************************************************/ static char PrDoCommentType2 ( void) { int c; while (((c = input ()) != '\n') && (c != EOF)) { } if (c == EOF) { return (FALSE); } return (TRUE); } src/acpica/source/compiler/prparser.y000066400000000000000000000404551465205512700202460ustar00rootroot00000000000000%{ /****************************************************************************** * * Module Name: prparser.y - Bison input file for preprocessor parser * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #define _COMPONENT ASL_PREPROCESSOR ACPI_MODULE_NAME ("prparser") void * AslLocalAllocate (unsigned int Size); /* Bison/yacc configuration */ #undef alloca #define alloca AslLocalAllocate int PrParserlex (void); int PrParserparse (void); void PrParsererror (char const *msg); extern char *PrParsertext; UINT64 PrParserResult; /* Expression return value */ /* Bison/yacc configuration */ #define yytname PrParsername #define YYDEBUG 1 /* Enable debug output */ #define YYERROR_VERBOSE 1 /* Verbose error messages */ #define YYFLAG -32768 /* Define YYMALLOC/YYFREE to prevent redefinition errors */ #define YYMALLOC malloc #define YYFREE free %} %union { UINT64 value; UINT32 op; char *str; } /*! [Begin] no source code translation */ %type Expression %token EXPOP_EOF %token EXPOP_NEW_LINE %token EXPOP_NUMBER %token EXPOP_HEX_NUMBER %token EXPOP_RESERVED1 %token EXPOP_RESERVED2 %token EXPOP_PAREN_OPEN %token EXPOP_PAREN_CLOSE %left EXPOP_LOGICAL_OR %left EXPOP_LOGICAL_AND %left EXPOP_OR %left EXPOP_XOR %left EXPOP_AND %left EXPOP_EQUAL EXPOP_NOT_EQUAL %left EXPOP_GREATER EXPOP_LESS EXPOP_GREATER_EQUAL EXPOP_LESS_EQUAL %left EXPOP_SHIFT_RIGHT EXPOP_SHIFT_LEFT %left EXPOP_ADD EXPOP_SUBTRACT %left EXPOP_MULTIPLY EXPOP_DIVIDE EXPOP_MODULO %right EXPOP_ONES_COMPLIMENT EXPOP_LOGICAL_NOT /* Tokens above must be kept in synch with dtparser.y */ %token EXPOP_DEFINE %token EXPOP_IDENTIFIER %% /* * Operator precedence rules (from K&R) * * 1) ( ) * 2) ! ~ (unary operators that are supported here) * 3) * / % * 4) + - * 5) >> << * 6) < > <= >= * 7) == != * 8) & * 9) ^ * 10) | * 11) && * 12) || */ /*! [End] no source code translation !*/ Value : Expression EXPOP_NEW_LINE { PrParserResult=$1; return 0; } /* End of line (newline) */ | Expression EXPOP_EOF { PrParserResult=$1; return 0; } /* End of string (0) */ ; Expression /* Unary operators */ : EXPOP_LOGICAL_NOT Expression { $$ = DtDoOperator ($2, EXPOP_LOGICAL_NOT, $2);} | EXPOP_ONES_COMPLIMENT Expression { $$ = DtDoOperator ($2, EXPOP_ONES_COMPLIMENT, $2);} /* Binary operators */ | Expression EXPOP_MULTIPLY Expression { $$ = DtDoOperator ($1, EXPOP_MULTIPLY, $3);} | Expression EXPOP_DIVIDE Expression { $$ = DtDoOperator ($1, EXPOP_DIVIDE, $3);} | Expression EXPOP_MODULO Expression { $$ = DtDoOperator ($1, EXPOP_MODULO, $3);} | Expression EXPOP_ADD Expression { $$ = DtDoOperator ($1, EXPOP_ADD, $3);} | Expression EXPOP_SUBTRACT Expression { $$ = DtDoOperator ($1, EXPOP_SUBTRACT, $3);} | Expression EXPOP_SHIFT_RIGHT Expression { $$ = DtDoOperator ($1, EXPOP_SHIFT_RIGHT, $3);} | Expression EXPOP_SHIFT_LEFT Expression { $$ = DtDoOperator ($1, EXPOP_SHIFT_LEFT, $3);} | Expression EXPOP_GREATER Expression { $$ = DtDoOperator ($1, EXPOP_GREATER, $3);} | Expression EXPOP_LESS Expression { $$ = DtDoOperator ($1, EXPOP_LESS, $3);} | Expression EXPOP_GREATER_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_GREATER_EQUAL, $3);} | Expression EXPOP_LESS_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_LESS_EQUAL, $3);} | Expression EXPOP_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_EQUAL, $3);} | Expression EXPOP_NOT_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_NOT_EQUAL, $3);} | Expression EXPOP_AND Expression { $$ = DtDoOperator ($1, EXPOP_AND, $3);} | Expression EXPOP_XOR Expression { $$ = DtDoOperator ($1, EXPOP_XOR, $3);} | Expression EXPOP_OR Expression { $$ = DtDoOperator ($1, EXPOP_OR, $3);} | Expression EXPOP_LOGICAL_AND Expression { $$ = DtDoOperator ($1, EXPOP_LOGICAL_AND, $3);} | Expression EXPOP_LOGICAL_OR Expression { $$ = DtDoOperator ($1, EXPOP_LOGICAL_OR, $3);} /* Parentheses: '(' Expression ')' */ | EXPOP_PAREN_OPEN Expression EXPOP_PAREN_CLOSE { $$ = $2;} /* #if defined (ID) or #if defined ID */ | EXPOP_DEFINE EXPOP_PAREN_OPEN EXPOP_IDENTIFIER EXPOP_PAREN_CLOSE { $$ = PrIsDefined (PrParserlval.str);} | EXPOP_DEFINE EXPOP_IDENTIFIER { $$ = PrIsDefined (PrParserlval.str);} | EXPOP_IDENTIFIER { $$ = PrResolveDefine (PrParserlval.str);} /* Default base for a non-prefixed integer is 10 */ | EXPOP_NUMBER { AcpiUtStrtoul64 (PrParsertext, &$$);} /* Standard hex number (0x1234) */ | EXPOP_HEX_NUMBER { AcpiUtStrtoul64 (PrParsertext, &$$);} ; %% /* * Local support functions, including parser entry point */ #define PR_FIRST_PARSE_OPCODE EXPOP_EOF #define PR_YYTNAME_START 3 /****************************************************************************** * * FUNCTION: PrParsererror * * PARAMETERS: Message - Parser-generated error message * * RETURN: None * * DESCRIPTION: Handler for parser errors * *****************************************************************************/ void PrParsererror ( char const *Message) { sprintf (AslGbl_StringBuffer, "Preprocessor Parser : %s (near line %u)", Message, AslGbl_CurrentLineNumber); DtError (ASL_ERROR, ASL_MSG_SYNTAX, NULL, (char *) AslGbl_StringBuffer); } /****************************************************************************** * * FUNCTION: PrGetOpName * * PARAMETERS: ParseOpcode - Parser token (EXPOP_*) * * RETURN: Pointer to the opcode name * * DESCRIPTION: Get the ascii name of the parse opcode for debug output * *****************************************************************************/ char * PrGetOpName ( UINT32 ParseOpcode) { #ifdef ASL_YYTNAME_START /* * First entries (PR_YYTNAME_START) in yytname are special reserved names. * Ignore first 6 characters of name (EXPOP_) */ return ((char *) yytname [(ParseOpcode - PR_FIRST_PARSE_OPCODE) + PR_YYTNAME_START] + 6); #else return ("[Unknown parser generator]"); #endif } /****************************************************************************** * * FUNCTION: PrEvaluateExpression * * PARAMETERS: ExprString - Expression to be evaluated. Must be * terminated by either a newline or a NUL * string terminator * * RETURN: 64-bit value for the expression * * DESCRIPTION: Main entry point for the DT expression parser * *****************************************************************************/ UINT64 PrEvaluateExpression ( char *ExprString) { DbgPrint (ASL_DEBUG_OUTPUT, "**** Input expression: %s\n", ExprString); /* Point lexer to the input string */ if (PrInitLexer (ExprString)) { DtError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, NULL, "Could not initialize lexer"); return (0); } /* Parse/Evaluate the input string (value returned in PrParserResult) */ PrParserparse (); PrTerminateLexer (); DbgPrint (ASL_DEBUG_OUTPUT, "**** Parser returned value: %u (%8.8X%8.8X)\n", (UINT32) PrParserResult, ACPI_FORMAT_UINT64 (PrParserResult)); return (PrParserResult); } src/acpica/source/compiler/prscan.c000066400000000000000000001173541465205512700176530ustar00rootroot00000000000000/****************************************************************************** * * Module Name: prscan - Preprocessor start-up and file scan module * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define _DECLARE_PR_GLOBALS #include "aslcompiler.h" /* * TBDs: * * No nested macros, maybe never * Implement ASL "Include" as well as "#include" here? */ #define _COMPONENT ASL_PREPROCESSOR ACPI_MODULE_NAME ("prscan") /* Local prototypes */ static void PrPreprocessInputFile ( void); static void PrDoDirective ( char *DirectiveToken, char **Next); static void PrGetNextLineInit ( void); static UINT32 PrGetNextLine ( FILE *Handle); static int PrMatchDirective ( char *Directive); static void PrPushDirective ( int Directive, char *Argument); static ACPI_STATUS PrPopDirective ( void); static void PrDbgPrint ( char *Action, char *DirectiveName); static void PrDoIncludeBuffer ( char *Pathname, char *BufferName); static void PrDoIncludeFile ( char *Pathname); /* * Supported preprocessor directives * Each entry is of the form "Name, ArgumentCount" */ static const PR_DIRECTIVE_INFO AslGbl_DirectiveInfo[] = { {"define", 1}, {"elif", 0}, /* Converted to #else..#if internally */ {"else", 0}, {"endif", 0}, {"error", 1}, {"if", 1}, {"ifdef", 1}, {"ifndef", 1}, {"include", 0}, /* Argument is not standard format, so just use 0 here */ {"includebuffer", 0}, /* Argument is not standard format, so just use 0 here */ {"line", 1}, {"pragma", 1}, {"undef", 1}, {"warning", 1}, {NULL, 0} }; /* This table must match ordering of above table exactly */ enum Gbl_DirectiveIndexes { PR_DIRECTIVE_DEFINE = 0, PR_DIRECTIVE_ELIF, PR_DIRECTIVE_ELSE, PR_DIRECTIVE_ENDIF, PR_DIRECTIVE_ERROR, PR_DIRECTIVE_IF, PR_DIRECTIVE_IFDEF, PR_DIRECTIVE_IFNDEF, PR_DIRECTIVE_INCLUDE, PR_DIRECTIVE_INCLUDEBUFFER, PR_DIRECTIVE_LINE, PR_DIRECTIVE_PRAGMA, PR_DIRECTIVE_UNDEF, PR_DIRECTIVE_WARNING }; #define ASL_DIRECTIVE_NOT_FOUND -1 /******************************************************************************* * * FUNCTION: PrInitializePreprocessor * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Startup initialization for the Preprocessor. * ******************************************************************************/ void PrInitializePreprocessor ( void) { /* Init globals and the list of #defines */ PrInitializeGlobals (); AslGbl_DefineList = NULL; } /******************************************************************************* * * FUNCTION: PrInitializeGlobals * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Initialize globals for the Preprocessor. Used for startuup * initialization and re-initialization between compiles during * a multiple source file compile. * ******************************************************************************/ void PrInitializeGlobals ( void) { /* Init globals */ AslGbl_InputFileList = NULL; AslGbl_CurrentLineNumber = 1; AslGbl_PreprocessorLineNumber = 1; AslGbl_PreprocessorError = FALSE; /* These are used to track #if/#else blocks (possibly nested) */ AslGbl_IfDepth = 0; AslGbl_IgnoringThisCodeBlock = FALSE; AslGbl_DirectiveStack = NULL; } /******************************************************************************* * * FUNCTION: PrTerminatePreprocessor * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Termination of the preprocessor. Delete lists. Keep any * defines that were specified on the command line, in order to * support multiple compiles with a single compiler invocation. * ******************************************************************************/ void PrTerminatePreprocessor ( void) { PR_DEFINE_INFO *DefineInfo; /* * The persistent defines (created on the command line) are always at the * end of the list. We save them. */ while ((AslGbl_DefineList) && (!AslGbl_DefineList->Persist)) { DefineInfo = AslGbl_DefineList; AslGbl_DefineList = DefineInfo->Next; ACPI_FREE (DefineInfo->Replacement); ACPI_FREE (DefineInfo->Identifier); ACPI_FREE (DefineInfo); } } /******************************************************************************* * * FUNCTION: PrDoPreprocess * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Main entry point for the iASL Preprocessor. Input file must * be already open. Handles multiple input files via the * #include directive. * ******************************************************************************/ void PrDoPreprocess ( void) { BOOLEAN MoreInputFiles; DbgPrint (ASL_DEBUG_OUTPUT, "Starting preprocessing phase\n\n"); FlSeekFile (ASL_FILE_INPUT, 0); PrDumpPredefinedNames (); /* Main preprocessor loop, handles include files */ do { PrPreprocessInputFile (); MoreInputFiles = PrPopInputFileStack (); } while (MoreInputFiles); /* Point compiler input to the new preprocessor output file (.pre) */ FlCloseFile (ASL_FILE_INPUT); AslGbl_Files[ASL_FILE_INPUT].Handle = AslGbl_Files[ASL_FILE_PREPROCESSOR].Handle; AslCompilerin = AslGbl_Files[ASL_FILE_INPUT].Handle; /* Reset globals to allow compiler to run */ FlSeekFile (ASL_FILE_INPUT, 0); if (!AslGbl_PreprocessOnly) { AslGbl_CurrentLineNumber = 0; } DbgPrint (ASL_DEBUG_OUTPUT, "Preprocessing phase complete \n\n"); } /******************************************************************************* * * FUNCTION: PrPreprocessInputFile * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Preprocess one entire file, line-by-line. * * Input: Raw user ASL from ASL_FILE_INPUT * Output: Preprocessed file written to ASL_FILE_PREPROCESSOR and * (optionally) ASL_FILE_PREPROCESSOR_USER * ******************************************************************************/ static void PrPreprocessInputFile ( void) { UINT32 Status; char *Token; char *ReplaceString; PR_DEFINE_INFO *DefineInfo; ACPI_SIZE TokenOffset; char *Next; int OffsetAdjust; PrGetNextLineInit (); /* Scan source line-by-line and process directives. Then write the .i file */ while ((Status = PrGetNextLine (AslGbl_Files[ASL_FILE_INPUT].Handle)) != ASL_EOF) { AslGbl_CurrentLineNumber++; AslGbl_LogicalLineNumber++; if (Status == ASL_IGNORE_LINE) { goto WriteEntireLine; } /* Need a copy of the input line for strok() */ strcpy (AslGbl_MainTokenBuffer, AslGbl_CurrentLineBuffer); Token = PrGetNextToken (AslGbl_MainTokenBuffer, PR_TOKEN_SEPARATORS, &Next); OffsetAdjust = 0; /* All preprocessor directives must begin with '#' */ if (Token && (*Token == '#')) { if (strlen (Token) == 1) { Token = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, &Next); } else { Token++; /* Skip leading # */ } /* Execute the directive, do not write line to output file */ PrDoDirective (Token, &Next); continue; } /* * If we are currently within the part of an IF/ELSE block that is * FALSE, ignore the line and do not write it to the output file. * This continues until an #else or #endif is encountered. */ if (AslGbl_IgnoringThisCodeBlock) { continue; } /* Match and replace all #defined names within this source line */ while (Token) { DefineInfo = PrMatchDefine (Token); if (DefineInfo) { if (DefineInfo->Body) { /* This is a macro */ DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "Matched Macro: %s->%s\n", AslGbl_CurrentLineNumber, DefineInfo->Identifier, DefineInfo->Replacement); PrDoMacroInvocation (AslGbl_MainTokenBuffer, Token, DefineInfo, &Next); } else { ReplaceString = DefineInfo->Replacement; /* Replace the name in the original line buffer */ TokenOffset = Token - AslGbl_MainTokenBuffer + OffsetAdjust; PrReplaceData ( &AslGbl_CurrentLineBuffer[TokenOffset], strlen (Token), ReplaceString, strlen (ReplaceString)); /* Adjust for length difference between old and new name length */ OffsetAdjust += strlen (ReplaceString) - strlen (Token); DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "Matched #define: %s->%s\n", AslGbl_CurrentLineNumber, Token, *ReplaceString ? ReplaceString : "(NULL STRING)"); } } Token = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, &Next); } AslGbl_PreprocessorLineNumber++; WriteEntireLine: /* * Now we can write the possibly modified source line to the * preprocessor file(s). */ FlWriteFile (ASL_FILE_PREPROCESSOR, AslGbl_CurrentLineBuffer, strlen (AslGbl_CurrentLineBuffer)); } } /******************************************************************************* * * FUNCTION: PrDoDirective * * PARAMETERS: Directive - Pointer to directive name token * Next - "Next" buffer from GetNextToken * * RETURN: None. * * DESCRIPTION: Main processing for all preprocessor directives * ******************************************************************************/ static void PrDoDirective ( char *DirectiveToken, char **Next) { char *Token = AslGbl_MainTokenBuffer; char *Token2 = NULL; char *End; UINT64 Value; ACPI_SIZE TokenOffset; int Directive; ACPI_STATUS Status; if (!DirectiveToken) { goto SyntaxError; } Directive = PrMatchDirective (DirectiveToken); if (Directive == ASL_DIRECTIVE_NOT_FOUND) { PrError (ASL_ERROR, ASL_MSG_UNKNOWN_DIRECTIVE, THIS_TOKEN_OFFSET (DirectiveToken)); DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID "#%s: Unknown directive\n", AslGbl_CurrentLineNumber, DirectiveToken); return; } /* * Emit a line directive into the preprocessor file (.pre) after * every matched directive. This is passed through to the compiler * so that error/warning messages are kept in sync with the * original source file. */ FlPrintFile (ASL_FILE_PREPROCESSOR, "#line %u \"%s\" // #%s\n", AslGbl_CurrentLineNumber, AslGbl_Files[ASL_FILE_INPUT].Filename, AslGbl_DirectiveInfo[Directive].Name); /* * If we are currently ignoring this block and we encounter a #else or * #elif, we must ignore their blocks also if the parent block is also * being ignored. */ if (AslGbl_IgnoringThisCodeBlock) { switch (Directive) { case PR_DIRECTIVE_ELSE: case PR_DIRECTIVE_ELIF: if (AslGbl_DirectiveStack && AslGbl_DirectiveStack->IgnoringThisCodeBlock) { PrDbgPrint ("Ignoring", AslGbl_DirectiveInfo[Directive].Name); return; } break; default: break; } } /* * Need to always check for #else, #elif, #endif regardless of * whether we are ignoring the current code block, since these * are conditional code block terminators. */ switch (Directive) { case PR_DIRECTIVE_ELSE: AslGbl_IgnoringThisCodeBlock = !(AslGbl_IgnoringThisCodeBlock); PrDbgPrint ("Executing", "else block"); return; case PR_DIRECTIVE_ELIF: AslGbl_IgnoringThisCodeBlock = !(AslGbl_IgnoringThisCodeBlock); Directive = PR_DIRECTIVE_IF; if (AslGbl_IgnoringThisCodeBlock == TRUE) { /* Not executing the ELSE part -- all done here */ PrDbgPrint ("Ignoring", "elif block"); return; } /* * After this, we will execute the IF part further below. * First, however, pop off the original #if directive. */ if (ACPI_FAILURE (PrPopDirective ())) { PrError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, THIS_TOKEN_OFFSET (DirectiveToken)); } PrDbgPrint ("Executing", "elif block"); break; case PR_DIRECTIVE_ENDIF: PrDbgPrint ("Executing", "endif"); /* Pop the owning #if/#ifdef/#ifndef */ if (ACPI_FAILURE (PrPopDirective ())) { PrError (ASL_ERROR, ASL_MSG_ENDIF_MISMATCH, THIS_TOKEN_OFFSET (DirectiveToken)); } return; default: break; } /* Most directives have at least one argument */ if (AslGbl_DirectiveInfo[Directive].ArgCount >= 1) { Token = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, Next); if (!Token) { goto SyntaxError; } } if (AslGbl_DirectiveInfo[Directive].ArgCount >= 2) { Token2 = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, Next); if (!Token2) { goto SyntaxError; } } /* * At this point, if we are ignoring the current code block, * do not process any more directives (i.e., ignore them also.) * For "if" style directives, open/push a new block anyway. We * must do this to keep track of #endif directives */ if (AslGbl_IgnoringThisCodeBlock) { switch (Directive) { case PR_DIRECTIVE_IF: case PR_DIRECTIVE_IFDEF: case PR_DIRECTIVE_IFNDEF: PrPushDirective (Directive, Token); PrDbgPrint ("Ignoring", AslGbl_DirectiveInfo[Directive].Name); break; default: break; } return; } /* * Execute the directive */ PrDbgPrint ("Begin execution", AslGbl_DirectiveInfo[Directive].Name); switch (Directive) { case PR_DIRECTIVE_IF: TokenOffset = Token - AslGbl_MainTokenBuffer; /* Need to expand #define macros in the expression string first */ Status = PrResolveIntegerExpression ( &AslGbl_CurrentLineBuffer[TokenOffset-1], &Value); if (ACPI_FAILURE (Status)) { return; } PrPushDirective (Directive, Token); if (!Value) { AslGbl_IgnoringThisCodeBlock = TRUE; } DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID "Resolved #if: %8.8X%8.8X %s\n", AslGbl_CurrentLineNumber, ACPI_FORMAT_UINT64 (Value), AslGbl_IgnoringThisCodeBlock ? "" : ""); break; case PR_DIRECTIVE_IFDEF: PrPushDirective (Directive, Token); if (!PrMatchDefine (Token)) { AslGbl_IgnoringThisCodeBlock = TRUE; } PrDbgPrint ("Evaluated", "ifdef"); break; case PR_DIRECTIVE_IFNDEF: PrPushDirective (Directive, Token); if (PrMatchDefine (Token)) { AslGbl_IgnoringThisCodeBlock = TRUE; } PrDbgPrint ("Evaluated", "ifndef"); break; case PR_DIRECTIVE_DEFINE: /* * By definition, if first char after the name is a paren, * this is a function macro. */ TokenOffset = Token - AslGbl_MainTokenBuffer + strlen (Token); if (*(&AslGbl_CurrentLineBuffer[TokenOffset]) == '(') { #ifdef MACROS_SUPPORTED AcpiOsPrintf( "%s ERROR - line %u: #define macros are not supported yet\n", AslGbl_CurrentLineBuffer, AslGbl_LogicalLineNumber); exit(1); #else PrAddMacro (Token, Next); #endif } else { /* Use the remainder of the line for the #define */ Token2 = *Next; if (Token2) { while ((*Token2 == ' ') || (*Token2 == '\t')) { Token2++; } End = Token2; while (*End != '\n') { End++; } *End = 0; } else { Token2 = ""; } #if 0 Token2 = PrGetNextToken (NULL, "\n", /*PR_TOKEN_SEPARATORS,*/ Next); if (!Token2) { Token2 = ""; } #endif DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID "New #define: %s->%s\n", AslGbl_LogicalLineNumber, Token, Token2); PrAddDefine (Token, Token2, FALSE); } break; case PR_DIRECTIVE_ERROR: /* Note: No macro expansion */ PrError (ASL_ERROR, ASL_MSG_ERROR_DIRECTIVE, THIS_TOKEN_OFFSET (Token)); AslGbl_SourceLine = 0; AslGbl_NextError = AslGbl_ErrorLog; CmCleanupAndExit (); exit(1); case PR_DIRECTIVE_INCLUDE: Token = PrGetNextToken (NULL, " \"<>", Next); if (!Token) { goto SyntaxError; } DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID "Start #include file \"%s\"\n", AslGbl_CurrentLineNumber, Token); PrDoIncludeFile (Token); break; case PR_DIRECTIVE_INCLUDEBUFFER: Token = PrGetNextToken (NULL, " \"<>", Next); if (!Token) { goto SyntaxError; } Token2 = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, Next); if (!Token2) { goto SyntaxError; } DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID "Start #includebuffer input from file \"%s\", buffer name %s\n", AslGbl_CurrentLineNumber, Token, Token2); PrDoIncludeBuffer (Token, Token2); break; case PR_DIRECTIVE_LINE: TokenOffset = Token - AslGbl_MainTokenBuffer; Status = PrResolveIntegerExpression ( &AslGbl_CurrentLineBuffer[TokenOffset-1], &Value); if (ACPI_FAILURE (Status)) { return; } DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID "User #line invocation %s\n", AslGbl_CurrentLineNumber, Token); AslGbl_CurrentLineNumber = (UINT32) Value; /* Emit #line into the preprocessor file */ FlPrintFile (ASL_FILE_PREPROCESSOR, "#line %u \"%s\"\n", AslGbl_CurrentLineNumber, AslGbl_Files[ASL_FILE_INPUT].Filename); break; case PR_DIRECTIVE_PRAGMA: if (!strcmp (Token, "disable")) { Token = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, Next); if (!Token) { goto SyntaxError; } TokenOffset = Token - AslGbl_MainTokenBuffer; AslDisableException (&AslGbl_CurrentLineBuffer[TokenOffset]); } else if (!strcmp (Token, "message")) { Token = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, Next); if (!Token) { goto SyntaxError; } TokenOffset = Token - AslGbl_MainTokenBuffer; AcpiOsPrintf ("%s\n", &AslGbl_CurrentLineBuffer[TokenOffset]); } else { PrError (ASL_ERROR, ASL_MSG_UNKNOWN_PRAGMA, THIS_TOKEN_OFFSET (Token)); return; } break; case PR_DIRECTIVE_UNDEF: DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID "#undef: %s\n", AslGbl_CurrentLineNumber, Token); PrRemoveDefine (Token); break; case PR_DIRECTIVE_WARNING: PrError (ASL_WARNING, ASL_MSG_WARNING_DIRECTIVE, THIS_TOKEN_OFFSET (Token)); AslGbl_SourceLine = 0; AslGbl_NextError = AslGbl_ErrorLog; break; default: /* Should never get here */ DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID "Unrecognized directive: %u\n", AslGbl_CurrentLineNumber, Directive); break; } return; SyntaxError: PrError (ASL_ERROR, ASL_MSG_DIRECTIVE_SYNTAX, THIS_TOKEN_OFFSET (DirectiveToken)); return; } /******************************************************************************* * * FUNCTION: PrGetNextLine, PrGetNextLineInit * * PARAMETERS: Handle - Open file handle for the source file * * RETURN: Status of the GetLine operation: * AE_OK - Normal line, OK status * ASL_IGNORE_LINE - Line is blank or part of a multi-line * comment * ASL_EOF - End-of-file reached * * DESCRIPTION: Get the next text line from the input file. Does not strip * comments. * ******************************************************************************/ #define PR_NORMAL_TEXT 0 #define PR_MULTI_LINE_COMMENT 1 #define PR_SINGLE_LINE_COMMENT 2 #define PR_QUOTED_STRING 3 static UINT8 AcpiGbl_LineScanState = PR_NORMAL_TEXT; static void PrGetNextLineInit ( void) { AcpiGbl_LineScanState = 0; } static UINT32 PrGetNextLine ( FILE *Handle) { UINT32 i; int c = 0; int PreviousChar; /* Always clear the global line buffer */ memset (AslGbl_CurrentLineBuffer, 0, AslGbl_LineBufferSize); for (i = 0; ;) { /* * If line is too long, expand the line buffers. Also increases * AslGbl_LineBufferSize. */ if (i >= AslGbl_LineBufferSize) { UtExpandLineBuffers (); } PreviousChar = c; c = getc (Handle); if (c == EOF) { /* * On EOF: If there is anything in the line buffer, terminate * it with a newline, and catch the EOF on the next call * to this function. */ if (i > 0) { AslGbl_CurrentLineBuffer[i] = '\n'; return (AE_OK); } return (ASL_EOF); } /* Update state machine as necessary */ switch (AcpiGbl_LineScanState) { case PR_NORMAL_TEXT: /* Check for multi-line comment start */ if ((PreviousChar == '/') && (c == '*')) { AcpiGbl_LineScanState = PR_MULTI_LINE_COMMENT; } /* Check for single-line comment start */ else if ((PreviousChar == '/') && (c == '/')) { AcpiGbl_LineScanState = PR_SINGLE_LINE_COMMENT; } /* Check for quoted string start */ else if (PreviousChar == '"') { AcpiGbl_LineScanState = PR_QUOTED_STRING; } break; case PR_QUOTED_STRING: if (PreviousChar == '"') { AcpiGbl_LineScanState = PR_NORMAL_TEXT; } break; case PR_MULTI_LINE_COMMENT: /* Check for multi-line comment end */ if ((PreviousChar == '*') && (c == '/')) { AcpiGbl_LineScanState = PR_NORMAL_TEXT; } break; case PR_SINGLE_LINE_COMMENT: /* Just ignore text until EOL */ default: break; } /* Always copy the character into line buffer */ AslGbl_CurrentLineBuffer[i] = (char) c; i++; /* Always exit on end-of-line */ if (c == '\n') { /* Handle multi-line comments */ if (AcpiGbl_LineScanState == PR_MULTI_LINE_COMMENT) { return (ASL_IGNORE_LINE); } /* End of single-line comment */ if (AcpiGbl_LineScanState == PR_SINGLE_LINE_COMMENT) { AcpiGbl_LineScanState = PR_NORMAL_TEXT; return (AE_OK); } /* Blank line */ if (i == 1) { return (ASL_IGNORE_LINE); } return (AE_OK); } } } /******************************************************************************* * * FUNCTION: PrMatchDirective * * PARAMETERS: Directive - Pointer to directive name token * * RETURN: Index into command array, -1 if not found * * DESCRIPTION: Lookup the incoming directive in the known directives table. * ******************************************************************************/ static int PrMatchDirective ( char *Directive) { int i; if (!Directive || Directive[0] == 0) { return (ASL_DIRECTIVE_NOT_FOUND); } for (i = 0; AslGbl_DirectiveInfo[i].Name; i++) { if (!strcmp (AslGbl_DirectiveInfo[i].Name, Directive)) { return (i); } } return (ASL_DIRECTIVE_NOT_FOUND); /* Command not recognized */ } /******************************************************************************* * * FUNCTION: PrPushDirective * * PARAMETERS: Directive - Encoded directive ID * Argument - String containing argument to the * directive * * RETURN: None * * DESCRIPTION: Push an item onto the directive stack. Used for processing * nested #if/#else type conditional compilation directives. * Specifically: Used on detection of #if/#ifdef/#ifndef to open * a block. * ******************************************************************************/ static void PrPushDirective ( int Directive, char *Argument) { DIRECTIVE_INFO *Info; /* Allocate and populate a stack info item */ Info = ACPI_CAST_PTR (DIRECTIVE_INFO, UtLocalCacheCalloc (sizeof (DIRECTIVE_INFO))); Info->Next = AslGbl_DirectiveStack; Info->Directive = Directive; Info->IgnoringThisCodeBlock = AslGbl_IgnoringThisCodeBlock; AcpiUtSafeStrncpy (Info->Argument, Argument, MAX_ARGUMENT_LENGTH); DbgPrint (ASL_DEBUG_OUTPUT, "Pr(%.4u) - [%u %s] %*s Pushed [#%s %s]: IgnoreFlag = %s\n", AslGbl_CurrentLineNumber, AslGbl_IfDepth, AslGbl_IgnoringThisCodeBlock ? "I" : "E", AslGbl_IfDepth * 4, " ", AslGbl_DirectiveInfo[Directive].Name, Argument, AslGbl_IgnoringThisCodeBlock ? "TRUE" : "FALSE"); /* Push new item */ AslGbl_DirectiveStack = Info; AslGbl_IfDepth++; } /******************************************************************************* * * FUNCTION: PrPopDirective * * PARAMETERS: None * * RETURN: Status. Error if the stack is empty. * * DESCRIPTION: Pop an item off the directive stack. Used for processing * nested #if/#else type conditional compilation directives. * Specifically: Used on detection of #elif and #endif to remove * the original #if/#ifdef/#ifndef from the stack and close * the block. * ******************************************************************************/ static ACPI_STATUS PrPopDirective ( void) { DIRECTIVE_INFO *Info; /* Check for empty stack */ Info = AslGbl_DirectiveStack; if (!Info) { return (AE_ERROR); } /* Pop one item, keep globals up-to-date */ AslGbl_IfDepth--; AslGbl_IgnoringThisCodeBlock = Info->IgnoringThisCodeBlock; AslGbl_DirectiveStack = Info->Next; DbgPrint (ASL_DEBUG_OUTPUT, "Pr(%.4u) - [%u %s] %*s Popped [#%s %s]: IgnoreFlag now = %s\n", AslGbl_CurrentLineNumber, AslGbl_IfDepth, AslGbl_IgnoringThisCodeBlock ? "I" : "E", AslGbl_IfDepth * 4, " ", AslGbl_DirectiveInfo[Info->Directive].Name, Info->Argument, AslGbl_IgnoringThisCodeBlock ? "TRUE" : "FALSE"); return (AE_OK); } /******************************************************************************* * * FUNCTION: PrDbgPrint * * PARAMETERS: Action - Action being performed * DirectiveName - Directive being processed * * RETURN: None * * DESCRIPTION: Special debug print for directive processing. * ******************************************************************************/ static void PrDbgPrint ( char *Action, char *DirectiveName) { DbgPrint (ASL_DEBUG_OUTPUT, "Pr(%.4u) - [%u %s] " "%*s %s #%s, IfDepth %u\n", AslGbl_CurrentLineNumber, AslGbl_IfDepth, AslGbl_IgnoringThisCodeBlock ? "I" : "E", AslGbl_IfDepth * 4, " ", Action, DirectiveName, AslGbl_IfDepth); } /******************************************************************************* * * FUNCTION: PrDoIncludeFile * * PARAMETERS: Pathname - Name of the input file * * RETURN: None. * * DESCRIPTION: Open an include file, from #include. * ******************************************************************************/ static void PrDoIncludeFile ( char *Pathname) { char *FullPathname; (void) PrOpenIncludeFile (Pathname, "r", &FullPathname); } /******************************************************************************* * * FUNCTION: PrDoIncludeBuffer * * PARAMETERS: Pathname - Name of the input binary file * BufferName - ACPI namepath of the buffer * * RETURN: None. * * DESCRIPTION: Create an ACPI buffer object from a binary file. The contents * of the file are emitted into the buffer object as ascii * hex data. From #includebuffer. * ******************************************************************************/ static void PrDoIncludeBuffer ( char *Pathname, char *BufferName) { char *FullPathname; FILE *BinaryBufferFile; UINT32 i = 0; UINT8 c; BinaryBufferFile = PrOpenIncludeFile (Pathname, "rb", &FullPathname); if (!BinaryBufferFile) { return; } /* Emit "Name (XXXX, Buffer() {" header */ FlPrintFile (ASL_FILE_PREPROCESSOR, "Name (%s, Buffer()\n{", BufferName); /* Dump the entire file in ascii hex format */ while (fread (&c, 1, 1, BinaryBufferFile)) { if (!(i % 8)) { FlPrintFile (ASL_FILE_PREPROCESSOR, "\n "); } FlPrintFile (ASL_FILE_PREPROCESSOR, " 0x%2.2X,", c); i++; } DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID "#includebuffer: read %u bytes from %s\n", AslGbl_CurrentLineNumber, i, FullPathname); /* Close the Name() operator */ FlPrintFile (ASL_FILE_PREPROCESSOR, "\n})\n"); fclose (BinaryBufferFile); } src/acpica/source/compiler/prutils.c000066400000000000000000000654771465205512700200770ustar00rootroot00000000000000/****************************************************************************** * * Module Name: prutils - Preprocessor utilities * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aslcompiler.h" #define _COMPONENT ASL_PREPROCESSOR ACPI_MODULE_NAME ("prutils") /****************************************************************************** * * FUNCTION: PrGetNextToken * * PARAMETERS: Buffer - Current line buffer * MatchString - String with valid token delimiters * Next - Set to next possible token in buffer * * RETURN: Next token (null-terminated). Modifies the input line. * Remainder of line is stored in *Next. * * DESCRIPTION: Local implementation of strtok() with local storage for the * next pointer. Not only thread-safe, but allows multiple * parsing of substrings such as expressions. * *****************************************************************************/ char * PrGetNextToken ( char *Buffer, char *MatchString, char **Next) { char *TokenStart; if (!Buffer) { /* Use Next if it is valid */ Buffer = *Next; if (!(*Next)) { return (NULL); } } /* Skip any leading delimiters */ while (*Buffer) { if (strchr (MatchString, *Buffer)) { Buffer++; } else { break; } } /* Anything left on the line? */ if (!(*Buffer)) { *Next = NULL; return (NULL); } TokenStart = Buffer; /* Find the end of this token */ while (*Buffer) { if (strchr (MatchString, *Buffer)) { *Buffer = 0; *Next = Buffer+1; if (!**Next) { *Next = NULL; } return (TokenStart); } Buffer++; } *Next = NULL; return (TokenStart); } /******************************************************************************* * * FUNCTION: PrError * * PARAMETERS: Level - Seriousness (Warning/error, etc.) * MessageId - Index into global message buffer * Column - Column in current line * * RETURN: None * * DESCRIPTION: Preprocessor error reporting. Front end to AslCommonError2 * ******************************************************************************/ void PrError ( UINT8 Level, UINT16 MessageId, UINT32 Column) { #if 0 AcpiOsPrintf ("%s (%u) : %s", AslGbl_Files[ASL_FILE_INPUT].Filename, AslGbl_CurrentLineNumber, AslGbl_CurrentLineBuffer); #endif if (Column > 120) { Column = 0; } /* TBD: Need Logical line number? */ AslCommonError2 (Level, MessageId, AslGbl_CurrentLineNumber, Column, AslGbl_CurrentLineBuffer, AslGbl_Files[ASL_FILE_INPUT].Filename, "Preprocessor"); AslGbl_PreprocessorError = TRUE; } /******************************************************************************* * * FUNCTION: PrReplaceResizeSubstring * * PARAMETERS: Args - Struct containing name, offset & usecount * Diff1 - Difference in lengths when new < old * Diff2 - Difference in lengths when new > old * i - The curr. no. of iteration of replacement * Token - Substring that replaces Args->Name * * RETURN: None * * DESCRIPTION: Advanced substring replacement in a string using resized buffer. * ******************************************************************************/ void PrReplaceResizeSubstring( PR_MACRO_ARG *Args, UINT32 Diff1, UINT32 Diff2, UINT32 i, char *Token) { UINT32 b, PrevOffset; char *temp; char macro_sep[64]; AslGbl_MacroTokenReplaceBuffer = (char *) realloc (AslGbl_MacroTokenReplaceBuffer, (2 * (strlen (AslGbl_MacroTokenBuffer)))); strcpy (macro_sep, "~,() {}!*/%+-<>=&^|\"\t\n"); /* * When the replacement argument (during invocation) length * < replaced parameter (in the macro function definition * and its expansion) length */ if (Diff1 != 0) { /* * We save the offset value to reset it after replacing each * instance of each arg and setting the offset value to * the start of the arg to be replaced since it changes * with each iteration when arg length != token length */ PrevOffset = Args->Offset[i]; temp = strstr (AslGbl_MacroTokenBuffer, Args->Name); if (temp == NULL) { return; } ResetHere1: temp = strstr (temp, Args->Name); if (temp == NULL) { return; } Args->Offset[i] = strlen (AslGbl_MacroTokenBuffer) - strlen (temp); if (Args->Offset[i] == 0) { goto JumpHere1; } if ((strchr (macro_sep, AslGbl_MacroTokenBuffer[(Args->Offset[i] - 1)])) && (strchr (macro_sep, AslGbl_MacroTokenBuffer[(Args->Offset[i] + strlen (Args->Name))]))) { Args->Offset[i] += 0; } else { temp += strlen (Args->Name); goto ResetHere1; } /* * For now, we simply set the extra char positions (generated * due to longer name replaced by shorter name) to whitespace * chars so it will be ignored during compilation */ JumpHere1: b = strlen (Token) + Args->Offset[i]; memset (&AslGbl_MacroTokenBuffer[b], ' ', Diff1); # if 0 /* Work in progress as of 03/08/2023 - experimental 'if' block * to test code for removing extra whitespaces from the macro * replacement when replacement arg < replaced param */ char Buff[8192]; /* char* Replace; */ /* Replace = Buff; */ for (j = 0; j < strlen (AslGbl_MacroTokenBuffer); j++) { Buff[j] = AslGbl_MacroTokenBuffer[j]; } Buff[strlen (AslGbl_MacroTokenBuffer)] = '\0'; /* fprintf(stderr, "Buff: %s\n", Buff); */ UINT32 len = strlen (Buff); for (j = 0; j < len; j++) { if (Buff[0] == ' ') { for (j = 0; j < (len - 1); j++) { Buff[j] = Buff[j + 1]; } Buff[j] = '\0'; len--; j = -1; continue; } if (Buff[j] == ' ' && Buff[j + 1] == ' ') { for (k = 0; k < (len - 1); k++) { Buff[j] = Buff[j + 1]; } Buff[j] = '\0'; len--; j--; } } /* fprintf(stderr, "Buff: %s\n", Buff); */ for (k = 0; k < strlen (Buff); k++) { AslGbl_MacroTokenBuffer[k] = Buff[k]; } #endif PrReplaceData ( &AslGbl_MacroTokenBuffer[Args->Offset[i]], strlen (Token), Token, strlen (Token)); temp = NULL; Args->Offset[i] = PrevOffset; } /* * When the replacement argument (during invocation) length * > replaced parameter (in the macro function definition * and its expansion) length */ else if (Diff2 != 0) { /* Doing the same thing with offset value as for prev case */ PrevOffset = Args->Offset[i]; temp = strstr (AslGbl_MacroTokenBuffer, Args->Name); if (temp == NULL) { return; } ResetHere2: temp = strstr (temp, Args->Name); if (temp == NULL) { return; } Args->Offset[i] = strlen (AslGbl_MacroTokenBuffer) - strlen (temp); if (Args->Offset[i] == 0) { goto JumpHere2; } if ((strchr (macro_sep, AslGbl_MacroTokenBuffer[(Args->Offset[i] - 1)])) && (strchr (macro_sep, AslGbl_MacroTokenBuffer[(Args->Offset[i] + strlen (Args->Name))]))) { Args->Offset[i] += 0; } else { temp+= strlen (Args->Name); goto ResetHere2; } /* * We will need to allocate some extra space in our buffer to * accommodate the increase in the replacement string length * over the shorter outgoing arg string and do the replacement * at the correct offset value which is resetted every iteration */ JumpHere2: strncpy (AslGbl_MacroTokenReplaceBuffer, AslGbl_MacroTokenBuffer, Args->Offset[i]); strcat (AslGbl_MacroTokenReplaceBuffer, Token); strcat (AslGbl_MacroTokenReplaceBuffer, (AslGbl_MacroTokenBuffer + (Args->Offset[i] + strlen (Args->Name)))); strcpy (AslGbl_MacroTokenBuffer, AslGbl_MacroTokenReplaceBuffer); temp = NULL; Args->Offset[i] = PrevOffset; } /* * When the replacement argument (during invocation) length = * replaced parameter (in the macro function definition and * its expansion) length */ else { /* * We still need to reset the offset for each iteration even when * arg and param lengths are same since any macro func invocation * could use various cases for each separate arg-param pair */ PrevOffset = Args->Offset[i]; temp = strstr (AslGbl_MacroTokenBuffer, Args->Name); if (temp == NULL) { return; } ResetHere3: temp = strstr (temp, Args->Name); if (temp == NULL) { return; } Args->Offset[i] = strlen (AslGbl_MacroTokenBuffer) - strlen (temp); if (Args->Offset[i] == 0) { goto JumpHere3; } if ((strchr (macro_sep, AslGbl_MacroTokenBuffer[(Args->Offset[i] - 1)])) && (strchr (macro_sep, AslGbl_MacroTokenBuffer[(Args->Offset[i] + strlen (Args->Name))]))) { Args->Offset[i] += 0; } else { temp += strlen (Args->Name); goto ResetHere3; } JumpHere3: PrReplaceData ( &AslGbl_MacroTokenBuffer[Args->Offset[i]], strlen (Args->Name), Token, strlen (Token)); temp = NULL; Args->Offset[i] = PrevOffset; } } /******************************************************************************* * * FUNCTION: PrReplaceData * * PARAMETERS: Buffer - Original(target) buffer pointer * LengthToRemove - Length to be removed from target buffer * BufferToAdd - Data to be inserted into target buffer * LengthToAdd - Length of BufferToAdd * * RETURN: Pointer to where the buffer is replaced with data * * DESCRIPTION: Generic buffer data replacement. * ******************************************************************************/ char * PrReplaceData ( char *Buffer, UINT32 LengthToRemove, char *BufferToAdd, UINT32 LengthToAdd) { UINT32 BufferLength; /* Buffer is a string, so the length must include the terminating zero */ BufferLength = strlen (Buffer) + 1; if (LengthToRemove != LengthToAdd) { /* * Move some of the existing data * 1) If adding more bytes than removing, make room for the new data * 2) if removing more bytes than adding, delete the extra space */ if (LengthToRemove > 0) { memmove ((Buffer + LengthToAdd), (Buffer + LengthToRemove), (BufferLength - LengthToRemove)); } } /* Now we can move in the new data */ if (LengthToAdd > 0) { memmove (Buffer, BufferToAdd, LengthToAdd); } return (Buffer + LengthToAdd); } /******************************************************************************* * * FUNCTION: PrOpenIncludeFile * * PARAMETERS: Filename - Filename or pathname for include file * * RETURN: None. * * DESCRIPTION: Open an include file and push it on the input file stack. * ******************************************************************************/ FILE * PrOpenIncludeFile ( char *Filename, char *OpenMode, char **FullPathname) { FILE *IncludeFile; ASL_INCLUDE_DIR *NextDir; /* Start the actual include file on the next line */ AslGbl_CurrentLineOffset++; /* Attempt to open the include file */ /* If the file specifies an absolute path, just open it */ if ((Filename[0] == '/') || (Filename[0] == '\\') || (Filename[1] == ':')) { IncludeFile = PrOpenIncludeWithPrefix ( "", Filename, OpenMode, FullPathname); if (!IncludeFile) { goto ErrorExit; } return (IncludeFile); } /* * The include filename is not an absolute path. * * First, search for the file within the "local" directory -- meaning * the same directory that contains the source file. * * Construct the file pathname from the global directory name. */ IncludeFile = PrOpenIncludeWithPrefix ( AslGbl_DirectoryPath, Filename, OpenMode, FullPathname); if (IncludeFile) { return (IncludeFile); } /* * Second, search for the file within the (possibly multiple) * directories specified by the -I option on the command line. */ NextDir = AslGbl_IncludeDirList; while (NextDir) { IncludeFile = PrOpenIncludeWithPrefix ( NextDir->Dir, Filename, OpenMode, FullPathname); if (IncludeFile) { return (IncludeFile); } NextDir = NextDir->Next; } /* We could not open the include file after trying very hard */ ErrorExit: sprintf (AslGbl_MainTokenBuffer, "%s, %s", Filename, strerror (errno)); PrError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN, 0); return (NULL); } /******************************************************************************* * * FUNCTION: FlOpenIncludeWithPrefix * * PARAMETERS: PrefixDir - Prefix directory pathname. Can be a zero * length string. * Filename - The include filename from the source ASL. * * RETURN: Valid file descriptor if successful. Null otherwise. * * DESCRIPTION: Open an include file and push it on the input file stack. * ******************************************************************************/ FILE * PrOpenIncludeWithPrefix ( char *PrefixDir, char *Filename, char *OpenMode, char **FullPathname) { FILE *IncludeFile; char *Pathname; /* Build the full pathname to the file */ Pathname = FlMergePathnames (PrefixDir, Filename); DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID "Include: Opening file - \"%s\"\n", AslGbl_CurrentLineNumber, Pathname); /* Attempt to open the file, push if successful */ IncludeFile = fopen (Pathname, OpenMode); if (!IncludeFile) { return (NULL); } /* Push the include file on the open input file stack */ PrPushInputFileStack (IncludeFile, Pathname); *FullPathname = Pathname; return (IncludeFile); } /******************************************************************************* * * FUNCTION: AslPushInputFileStack * * PARAMETERS: InputFile - Open file pointer * Filename - Name of the file * * RETURN: None * * DESCRIPTION: Push the InputFile onto the file stack, and point the parser * to this file. Called when an include file is successfully * opened. * ******************************************************************************/ void PrPushInputFileStack ( FILE *InputFile, char *Filename) { PR_FILE_NODE *Fnode; AslGbl_HasIncludeFiles = TRUE; /* Save the current state in an Fnode */ Fnode = UtLocalCalloc (sizeof (PR_FILE_NODE)); Fnode->File = AslGbl_Files[ASL_FILE_INPUT].Handle; Fnode->Next = AslGbl_InputFileList; Fnode->Filename = AslGbl_Files[ASL_FILE_INPUT].Filename; Fnode->CurrentLineNumber = AslGbl_CurrentLineNumber; /* Push it on the stack */ AslGbl_InputFileList = Fnode; DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID "Push InputFile Stack: handle %p\n\n", AslGbl_CurrentLineNumber, InputFile); /* Reset the global line count and filename */ AslGbl_Files[ASL_FILE_INPUT].Filename = UtLocalCacheCalloc (strlen (Filename) + 1); strcpy (AslGbl_Files[ASL_FILE_INPUT].Filename, Filename); AslGbl_Files[ASL_FILE_INPUT].Handle = InputFile; AslGbl_CurrentLineNumber = 1; /* Emit a new #line directive for the include file */ FlPrintFile (ASL_FILE_PREPROCESSOR, "#line %u \"%s\"\n", 1, Filename); } /******************************************************************************* * * FUNCTION: AslPopInputFileStack * * PARAMETERS: None * * RETURN: 0 if a node was popped, -1 otherwise * * DESCRIPTION: Pop the top of the input file stack and point the parser to * the saved parse buffer contained in the fnode. Also, set the * global line counters to the saved values. This function is * called when an include file reaches EOF. * ******************************************************************************/ BOOLEAN PrPopInputFileStack ( void) { PR_FILE_NODE *Fnode; Fnode = AslGbl_InputFileList; DbgPrint (ASL_PARSE_OUTPUT, "\n" PR_PREFIX_ID "Pop InputFile Stack, Fnode %p\n\n", AslGbl_CurrentLineNumber, Fnode); if (!Fnode) { return (FALSE); } /* Close the current include file */ fclose (AslGbl_Files[ASL_FILE_INPUT].Handle); /* Update the top-of-stack */ AslGbl_InputFileList = Fnode->Next; /* Reset global line counter and filename */ AslGbl_Files[ASL_FILE_INPUT].Filename = Fnode->Filename; AslGbl_Files[ASL_FILE_INPUT].Handle = Fnode->File; AslGbl_CurrentLineNumber = Fnode->CurrentLineNumber; /* Emit a new #line directive after the include file */ FlPrintFile (ASL_FILE_PREPROCESSOR, "#line %u \"%s\"\n", AslGbl_CurrentLineNumber, Fnode->Filename); /* All done with this node */ ACPI_FREE (Fnode); return (TRUE); } src/acpica/source/components/000077500000000000000000000000001465205512700165615ustar00rootroot00000000000000src/acpica/source/components/debugger/000077500000000000000000000000001465205512700203455ustar00rootroot00000000000000src/acpica/source/components/debugger/dbcmds.c000066400000000000000000001263121465205512700217520ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dbcmds - Miscellaneous debug commands and output routines * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acevents.h" #include "acdebug.h" #include "acnamesp.h" #include "acresrc.h" #include "actables.h" #include "limits.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbcmds") /* Local prototypes */ static void AcpiDmCompareAmlResources ( UINT8 *Aml1Buffer, ACPI_RSDESC_SIZE Aml1BufferLength, UINT8 *Aml2Buffer, ACPI_RSDESC_SIZE Aml2BufferLength); static ACPI_STATUS AcpiDmTestResourceConversion ( ACPI_NAMESPACE_NODE *Node, char *Name); static ACPI_STATUS AcpiDbResourceCallback ( ACPI_RESOURCE *Resource, void *Context); static ACPI_STATUS AcpiDbDeviceResources ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); static void AcpiDbDoOneSleepState ( UINT8 SleepState); static char *AcpiDbTraceMethodName = NULL; /******************************************************************************* * * FUNCTION: AcpiDbConvertToNode * * PARAMETERS: InString - String to convert * * RETURN: Pointer to a NS node * * DESCRIPTION: Convert a string to a valid NS pointer. Handles numeric or * alphanumeric strings. * ******************************************************************************/ ACPI_NAMESPACE_NODE * AcpiDbConvertToNode ( char *InString) { ACPI_NAMESPACE_NODE *Node; ACPI_SIZE Address; if ((*InString >= 0x30) && (*InString <= 0x39)) { /* Numeric argument, convert */ Address = strtoul (InString, NULL, 16); Node = ACPI_TO_POINTER (Address); if (!AcpiOsReadable (Node, sizeof (ACPI_NAMESPACE_NODE))) { AcpiOsPrintf ("Address %p is invalid", Node); return (NULL); } /* Make sure pointer is valid NS node */ if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) { AcpiOsPrintf ("Address %p is not a valid namespace node [%s]\n", Node, AcpiUtGetDescriptorName (Node)); return (NULL); } } else { /* * Alpha argument: The parameter is a name string that must be * resolved to a Namespace object. */ Node = AcpiDbLocalNsLookup (InString); if (!Node) { AcpiOsPrintf ( "Could not find [%s] in namespace, defaulting to root node\n", InString); Node = AcpiGbl_RootNode; } } return (Node); } /******************************************************************************* * * FUNCTION: AcpiDbSleep * * PARAMETERS: ObjectArg - Desired sleep state (0-5). NULL means * invoke all possible sleep states. * * RETURN: Status * * DESCRIPTION: Simulate sleep/wake sequences * ******************************************************************************/ ACPI_STATUS AcpiDbSleep ( char *ObjectArg) { UINT8 SleepState; UINT32 i; ACPI_FUNCTION_TRACE (AcpiDbSleep); /* Null input (no arguments) means to invoke all sleep states */ if (!ObjectArg) { AcpiOsPrintf ("Invoking all possible sleep states, 0-%d\n", ACPI_S_STATES_MAX); for (i = 0; i <= ACPI_S_STATES_MAX; i++) { AcpiDbDoOneSleepState ((UINT8) i); } return_ACPI_STATUS (AE_OK); } /* Convert argument to binary and invoke the sleep state */ SleepState = (UINT8) strtoul (ObjectArg, NULL, 0); AcpiDbDoOneSleepState (SleepState); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbDoOneSleepState * * PARAMETERS: SleepState - Desired sleep state (0-5) * * RETURN: None * * DESCRIPTION: Simulate a sleep/wake sequence * ******************************************************************************/ static void AcpiDbDoOneSleepState ( UINT8 SleepState) { ACPI_STATUS Status; UINT8 SleepTypeA; UINT8 SleepTypeB; /* Validate parameter */ if (SleepState > ACPI_S_STATES_MAX) { AcpiOsPrintf ("Sleep state %d out of range (%d max)\n", SleepState, ACPI_S_STATES_MAX); return; } AcpiOsPrintf ("\n---- Invoking sleep state S%d (%s):\n", SleepState, AcpiGbl_SleepStateNames[SleepState]); /* Get the values for the sleep type registers (for display only) */ Status = AcpiGetSleepTypeData (SleepState, &SleepTypeA, &SleepTypeB); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not evaluate [%s] method, %s\n", AcpiGbl_SleepStateNames[SleepState], AcpiFormatException (Status)); return; } AcpiOsPrintf ( "Register values for sleep state S%d: Sleep-A: %.2X, Sleep-B: %.2X\n", SleepState, SleepTypeA, SleepTypeB); /* Invoke the various sleep/wake interfaces */ AcpiOsPrintf ("**** Sleep: Prepare to sleep (S%d) ****\n", SleepState); Status = AcpiEnterSleepStatePrep (SleepState); if (ACPI_FAILURE (Status)) { goto ErrorExit; } AcpiOsPrintf ("**** Sleep: Going to sleep (S%d) ****\n", SleepState); Status = AcpiEnterSleepState (SleepState); if (ACPI_FAILURE (Status)) { goto ErrorExit; } AcpiOsPrintf ("**** Wake: Prepare to return from sleep (S%d) ****\n", SleepState); Status = AcpiLeaveSleepStatePrep (SleepState); if (ACPI_FAILURE (Status)) { goto ErrorExit; } AcpiOsPrintf ("**** Wake: Return from sleep (S%d) ****\n", SleepState); Status = AcpiLeaveSleepState (SleepState); if (ACPI_FAILURE (Status)) { goto ErrorExit; } return; ErrorExit: ACPI_EXCEPTION ((AE_INFO, Status, "During invocation of sleep state S%d", SleepState)); } /******************************************************************************* * * FUNCTION: AcpiDbDisplayLocks * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display information about internal mutexes. * ******************************************************************************/ void AcpiDbDisplayLocks ( void) { UINT32 i; for (i = 0; i < ACPI_MAX_MUTEX; i++) { AcpiOsPrintf ("%26s : %s\n", AcpiUtGetMutexName (i), AcpiGbl_MutexInfo[i].ThreadId == ACPI_MUTEX_NOT_ACQUIRED ? "Locked" : "Unlocked"); } } /******************************************************************************* * * FUNCTION: AcpiDbDisplayTableInfo * * PARAMETERS: TableArg - Name of table to be displayed * * RETURN: None * * DESCRIPTION: Display information about loaded tables. Current * implementation displays all loaded tables. * ******************************************************************************/ void AcpiDbDisplayTableInfo ( char *TableArg) { UINT32 i; ACPI_TABLE_DESC *TableDesc; ACPI_STATUS Status; /* Header */ AcpiOsPrintf ("Idx ID Status Type " "TableHeader (Sig, Address, Length, Misc)\n"); /* Walk the entire root table list */ for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++) { TableDesc = &AcpiGbl_RootTableList.Tables[i]; /* Index and Table ID */ AcpiOsPrintf ("%3u %.2u ", i, TableDesc->OwnerId); /* Decode the table flags */ if (!(TableDesc->Flags & ACPI_TABLE_IS_LOADED)) { AcpiOsPrintf ("NotLoaded "); } else { AcpiOsPrintf (" Loaded "); } switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK) { case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL: AcpiOsPrintf ("External/virtual "); break; case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL: AcpiOsPrintf ("Internal/physical "); break; case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL: AcpiOsPrintf ("Internal/virtual "); break; default: AcpiOsPrintf ("INVALID TYPE "); break; } /* Make sure that the table is mapped */ Status = AcpiTbValidateTable (TableDesc); if (ACPI_FAILURE (Status)) { return; } /* Dump the table header */ if (TableDesc->Pointer) { AcpiTbPrintTableHeader (TableDesc->Address, TableDesc->Pointer); } else { /* If the pointer is null, the table has been unloaded */ ACPI_INFO (("%4.4s - Table has been unloaded", TableDesc->Signature.Ascii)); } } } /******************************************************************************* * * FUNCTION: AcpiDbUnloadAcpiTable * * PARAMETERS: ObjectName - Namespace pathname for an object that * is owned by the table to be unloaded * * RETURN: None * * DESCRIPTION: Unload an ACPI table, via any namespace node that is owned * by the table. * ******************************************************************************/ void AcpiDbUnloadAcpiTable ( char *ObjectName) { ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; /* Translate name to an Named object */ Node = AcpiDbConvertToNode (ObjectName); if (!Node) { return; } Status = AcpiUnloadParentTable (ACPI_CAST_PTR (ACPI_HANDLE, Node)); if (ACPI_SUCCESS (Status)) { AcpiOsPrintf ("Parent of [%s] (%p) unloaded and uninstalled\n", ObjectName, Node); } else { AcpiOsPrintf ("%s, while unloading parent table of [%s]\n", AcpiFormatException (Status), ObjectName); } } /******************************************************************************* * * FUNCTION: AcpiDbSendNotify * * PARAMETERS: Name - Name of ACPI object where to send notify * Value - Value of the notify to send. * * RETURN: None * * DESCRIPTION: Send an ACPI notification. The value specified is sent to the * named object as an ACPI notify. * ******************************************************************************/ void AcpiDbSendNotify ( char *Name, UINT32 Value) { ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; /* Translate name to an Named object */ Node = AcpiDbConvertToNode (Name); if (!Node) { return; } /* Dispatch the notify if legal */ if (AcpiEvIsNotifyObject (Node)) { Status = AcpiEvQueueNotifyRequest (Node, Value); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not queue notify\n"); } } else { AcpiOsPrintf ( "Named object [%4.4s] Type %s, " "must be Device/Thermal/Processor type\n", AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type)); } } /******************************************************************************* * * FUNCTION: AcpiDbDisplayInterfaces * * PARAMETERS: ActionArg - Null, "install", or "remove" * InterfaceNameArg - Name for install/remove options * * RETURN: None * * DESCRIPTION: Display or modify the global _OSI interface list * ******************************************************************************/ void AcpiDbDisplayInterfaces ( char *ActionArg, char *InterfaceNameArg) { ACPI_INTERFACE_INFO *NextInterface; char *SubString; ACPI_STATUS Status; /* If no arguments, just display current interface list */ if (!ActionArg) { (void) AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER); NextInterface = AcpiGbl_SupportedInterfaces; while (NextInterface) { if (!(NextInterface->Flags & ACPI_OSI_INVALID)) { AcpiOsPrintf ("%s\n", NextInterface->Name); } NextInterface = NextInterface->Next; } AcpiOsReleaseMutex (AcpiGbl_OsiMutex); return; } /* If ActionArg exists, so must InterfaceNameArg */ if (!InterfaceNameArg) { AcpiOsPrintf ("Missing Interface Name argument\n"); return; } /* Uppercase the action for match below */ AcpiUtStrupr (ActionArg); /* Install - install an interface */ SubString = strstr ("INSTALL", ActionArg); if (SubString) { Status = AcpiInstallInterface (InterfaceNameArg); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("%s, while installing \"%s\"\n", AcpiFormatException (Status), InterfaceNameArg); } return; } /* Remove - remove an interface */ SubString = strstr ("REMOVE", ActionArg); if (SubString) { Status = AcpiRemoveInterface (InterfaceNameArg); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("%s, while removing \"%s\"\n", AcpiFormatException (Status), InterfaceNameArg); } return; } /* Invalid ActionArg */ AcpiOsPrintf ("Invalid action argument: %s\n", ActionArg); return; } /******************************************************************************* * * FUNCTION: AcpiDbDisplayTemplate * * PARAMETERS: BufferArg - Buffer name or address * * RETURN: None * * DESCRIPTION: Dump a buffer that contains a resource template * ******************************************************************************/ void AcpiDbDisplayTemplate ( char *BufferArg) { ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_BUFFER ReturnBuffer; /* Translate BufferArg to an Named object */ Node = AcpiDbConvertToNode (BufferArg); if (!Node || (Node == AcpiGbl_RootNode)) { AcpiOsPrintf ("Invalid argument: %s\n", BufferArg); return; } /* We must have a buffer object */ if (Node->Type != ACPI_TYPE_BUFFER) { AcpiOsPrintf ("Not a Buffer object, cannot be a template: %s\n", BufferArg); return; } ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE; ReturnBuffer.Pointer = AcpiGbl_DbBuffer; /* Attempt to convert the raw buffer to a resource list */ Status = AcpiRsCreateResourceList (Node->Object, &ReturnBuffer); AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT); AcpiDbgLevel |= ACPI_LV_RESOURCES; if (ACPI_FAILURE (Status)) { AcpiOsPrintf ( "Could not convert Buffer to a resource list: %s, %s\n", BufferArg, AcpiFormatException (Status)); goto DumpBuffer; } /* Now we can dump the resource list */ AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE, ReturnBuffer.Pointer)); DumpBuffer: AcpiOsPrintf ("\nRaw data buffer:\n"); AcpiUtDebugDumpBuffer ((UINT8 *) Node->Object->Buffer.Pointer, Node->Object->Buffer.Length, DB_BYTE_DISPLAY, ACPI_UINT32_MAX); AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); return; } /******************************************************************************* * * FUNCTION: AcpiDmCompareAmlResources * * PARAMETERS: Aml1Buffer - Contains first resource list * Aml1BufferLength - Length of first resource list * Aml2Buffer - Contains second resource list * Aml2BufferLength - Length of second resource list * * RETURN: None * * DESCRIPTION: Compare two AML resource lists, descriptor by descriptor (in * order to isolate a miscompare to an individual resource) * ******************************************************************************/ static void AcpiDmCompareAmlResources ( UINT8 *Aml1Buffer, ACPI_RSDESC_SIZE Aml1BufferLength, UINT8 *Aml2Buffer, ACPI_RSDESC_SIZE Aml2BufferLength) { UINT8 *Aml1; UINT8 *Aml2; UINT8 *Aml1End; UINT8 *Aml2End; ACPI_RSDESC_SIZE Aml1Length; ACPI_RSDESC_SIZE Aml2Length; ACPI_RSDESC_SIZE Offset = 0; UINT8 ResourceType; UINT32 Count = 0; UINT32 i; /* Compare overall buffer sizes (may be different due to size rounding) */ if (Aml1BufferLength != Aml2BufferLength) { AcpiOsPrintf ( "**** Buffer length mismatch in converted " "AML: Original %X, New %X ****\n", Aml1BufferLength, Aml2BufferLength); } Aml1 = Aml1Buffer; Aml2 = Aml2Buffer; Aml1End = Aml1Buffer + Aml1BufferLength; Aml2End = Aml2Buffer + Aml2BufferLength; /* Walk the descriptor lists, comparing each descriptor */ while ((Aml1 < Aml1End) && (Aml2 < Aml2End)) { /* Get the lengths of each descriptor */ Aml1Length = AcpiUtGetDescriptorLength (Aml1); Aml2Length = AcpiUtGetDescriptorLength (Aml2); ResourceType = AcpiUtGetResourceType (Aml1); /* Check for descriptor length match */ if (Aml1Length != Aml2Length) { AcpiOsPrintf ( "**** Length mismatch in descriptor [%.2X] type %2.2X, " "Offset %8.8X Len1 %X, Len2 %X ****\n", Count, ResourceType, Offset, Aml1Length, Aml2Length); } /* Check for descriptor byte match */ else if (memcmp (Aml1, Aml2, Aml1Length)) { AcpiOsPrintf ( "**** Data mismatch in descriptor [%.2X] type %2.2X, " "Offset %8.8X ****\n", Count, ResourceType, Offset); for (i = 0; i < Aml1Length; i++) { if (Aml1[i] != Aml2[i]) { AcpiOsPrintf ( "Mismatch at byte offset %.2X: is %2.2X, " "should be %2.2X\n", i, Aml2[i], Aml1[i]); } } } /* Exit on EndTag descriptor */ if (ResourceType == ACPI_RESOURCE_NAME_END_TAG) { return; } /* Point to next descriptor in each buffer */ Count++; Offset += Aml1Length; Aml1 += Aml1Length; Aml2 += Aml2Length; } } /******************************************************************************* * * FUNCTION: AcpiDmTestResourceConversion * * PARAMETERS: Node - Parent device node * Name - resource method name (_CRS) * * RETURN: Status * * DESCRIPTION: Compare the original AML with a conversion of the AML to * internal resource list, then back to AML. * ******************************************************************************/ static ACPI_STATUS AcpiDmTestResourceConversion ( ACPI_NAMESPACE_NODE *Node, char *Name) { ACPI_STATUS Status; ACPI_BUFFER ReturnBuffer; ACPI_BUFFER ResourceBuffer; ACPI_BUFFER NewAml; ACPI_OBJECT *OriginalAml; AcpiOsPrintf ("Resource Conversion Comparison:\n"); NewAml.Length = ACPI_ALLOCATE_LOCAL_BUFFER; ReturnBuffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; ResourceBuffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; /* Get the original _CRS AML resource template */ Status = AcpiEvaluateObject (Node, Name, NULL, &ReturnBuffer); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not obtain %s: %s\n", Name, AcpiFormatException (Status)); return (Status); } /* Get the AML resource template, converted to internal resource structs */ Status = AcpiGetCurrentResources (Node, &ResourceBuffer); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n", AcpiFormatException (Status)); goto Exit1; } /* Convert internal resource list to external AML resource template */ Status = AcpiRsCreateAmlResources (&ResourceBuffer, &NewAml); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("AcpiRsCreateAmlResources failed: %s\n", AcpiFormatException (Status)); goto Exit2; } /* Compare original AML to the newly created AML resource list */ OriginalAml = ReturnBuffer.Pointer; AcpiDmCompareAmlResources (OriginalAml->Buffer.Pointer, (ACPI_RSDESC_SIZE) OriginalAml->Buffer.Length, NewAml.Pointer, (ACPI_RSDESC_SIZE) NewAml.Length); /* Cleanup and exit */ ACPI_FREE (NewAml.Pointer); Exit2: ACPI_FREE (ResourceBuffer.Pointer); Exit1: ACPI_FREE (ReturnBuffer.Pointer); return (Status); } /******************************************************************************* * * FUNCTION: AcpiDbResourceCallback * * PARAMETERS: ACPI_WALK_RESOURCE_CALLBACK * * RETURN: Status * * DESCRIPTION: Simple callback to exercise AcpiWalkResources and * AcpiWalkResourceBuffer. * ******************************************************************************/ static ACPI_STATUS AcpiDbResourceCallback ( ACPI_RESOURCE *Resource, void *Context) { return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbDeviceResources * * PARAMETERS: ACPI_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Display the _PRT/_CRS/_PRS resources for a device object. * ******************************************************************************/ static ACPI_STATUS AcpiDbDeviceResources ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *Node; ACPI_NAMESPACE_NODE *PrtNode = NULL; ACPI_NAMESPACE_NODE *CrsNode = NULL; ACPI_NAMESPACE_NODE *PrsNode = NULL; ACPI_NAMESPACE_NODE *AeiNode = NULL; char *ParentPath; ACPI_BUFFER ReturnBuffer; ACPI_STATUS Status; Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle); ParentPath = AcpiNsGetNormalizedPathname (Node, TRUE); if (!ParentPath) { return (AE_NO_MEMORY); } /* Get handles to the resource methods for this device */ (void) AcpiGetHandle (Node, METHOD_NAME__PRT, ACPI_CAST_PTR (ACPI_HANDLE, &PrtNode)); (void) AcpiGetHandle (Node, METHOD_NAME__CRS, ACPI_CAST_PTR (ACPI_HANDLE, &CrsNode)); (void) AcpiGetHandle (Node, METHOD_NAME__PRS, ACPI_CAST_PTR (ACPI_HANDLE, &PrsNode)); (void) AcpiGetHandle (Node, METHOD_NAME__AEI, ACPI_CAST_PTR (ACPI_HANDLE, &AeiNode)); if (!PrtNode && !CrsNode && !PrsNode && !AeiNode) { goto Cleanup; /* Nothing to do */ } AcpiOsPrintf ("\nDevice: %s\n", ParentPath); /* Prepare for a return object of arbitrary size */ ReturnBuffer.Pointer = AcpiGbl_DbBuffer; ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE; /* _PRT */ if (PrtNode) { AcpiOsPrintf ("Evaluating _PRT\n"); Status = AcpiEvaluateObject (PrtNode, NULL, NULL, &ReturnBuffer); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not evaluate _PRT: %s\n", AcpiFormatException (Status)); goto GetCrs; } ReturnBuffer.Pointer = AcpiGbl_DbBuffer; ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE; Status = AcpiGetIrqRoutingTable (Node, &ReturnBuffer); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("GetIrqRoutingTable failed: %s\n", AcpiFormatException (Status)); goto GetCrs; } AcpiRsDumpIrqList (ACPI_CAST_PTR (UINT8, AcpiGbl_DbBuffer)); } /* _CRS */ GetCrs: if (CrsNode) { AcpiOsPrintf ("Evaluating _CRS\n"); ReturnBuffer.Pointer = AcpiGbl_DbBuffer; ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE; Status = AcpiEvaluateObject (CrsNode, NULL, NULL, &ReturnBuffer); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not evaluate _CRS: %s\n", AcpiFormatException (Status)); goto GetPrs; } /* This code exercises the AcpiWalkResources interface */ Status = AcpiWalkResources (Node, METHOD_NAME__CRS, AcpiDbResourceCallback, NULL); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("AcpiWalkResources failed: %s\n", AcpiFormatException (Status)); goto GetPrs; } /* Get the _CRS resource list (test ALLOCATE buffer) */ ReturnBuffer.Pointer = NULL; ReturnBuffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiGetCurrentResources (Node, &ReturnBuffer); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n", AcpiFormatException (Status)); goto GetPrs; } /* This code exercises the AcpiWalkResourceBuffer interface */ Status = AcpiWalkResourceBuffer (&ReturnBuffer, AcpiDbResourceCallback, NULL); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("AcpiWalkResourceBuffer failed: %s\n", AcpiFormatException (Status)); goto EndCrs; } /* Dump the _CRS resource list */ AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE, ReturnBuffer.Pointer)); /* * Perform comparison of original AML to newly created AML. This * tests both the AML->Resource conversion and the Resource->AML * conversion. */ (void) AcpiDmTestResourceConversion (Node, METHOD_NAME__CRS); /* Execute _SRS with the resource list */ AcpiOsPrintf ("Evaluating _SRS\n"); Status = AcpiSetCurrentResources (Node, &ReturnBuffer); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("AcpiSetCurrentResources failed: %s\n", AcpiFormatException (Status)); goto EndCrs; } EndCrs: ACPI_FREE (ReturnBuffer.Pointer); } /* _PRS */ GetPrs: if (PrsNode) { AcpiOsPrintf ("Evaluating _PRS\n"); ReturnBuffer.Pointer = AcpiGbl_DbBuffer; ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE; Status = AcpiEvaluateObject (PrsNode, NULL, NULL, &ReturnBuffer); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not evaluate _PRS: %s\n", AcpiFormatException (Status)); goto GetAei; } ReturnBuffer.Pointer = AcpiGbl_DbBuffer; ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE; Status = AcpiGetPossibleResources (Node, &ReturnBuffer); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("AcpiGetPossibleResources failed: %s\n", AcpiFormatException (Status)); goto GetAei; } AcpiRsDumpResourceList (ACPI_CAST_PTR ( ACPI_RESOURCE, AcpiGbl_DbBuffer)); } /* _AEI */ GetAei: if (AeiNode) { AcpiOsPrintf ("Evaluating _AEI\n"); ReturnBuffer.Pointer = AcpiGbl_DbBuffer; ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE; Status = AcpiEvaluateObject (AeiNode, NULL, NULL, &ReturnBuffer); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not evaluate _AEI: %s\n", AcpiFormatException (Status)); goto Cleanup; } ReturnBuffer.Pointer = AcpiGbl_DbBuffer; ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE; Status = AcpiGetEventResources (Node, &ReturnBuffer); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("AcpiGetEventResources failed: %s\n", AcpiFormatException (Status)); goto Cleanup; } AcpiRsDumpResourceList (ACPI_CAST_PTR ( ACPI_RESOURCE, AcpiGbl_DbBuffer)); } Cleanup: ACPI_FREE (ParentPath); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbDisplayResources * * PARAMETERS: ObjectArg - String object name or object pointer. * NULL or "*" means "display resources for * all devices" * * RETURN: None * * DESCRIPTION: Display the resource objects associated with a device. * ******************************************************************************/ void AcpiDbDisplayResources ( char *ObjectArg) { ACPI_NAMESPACE_NODE *Node; AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT); AcpiDbgLevel |= ACPI_LV_RESOURCES; /* Asterisk means "display resources for all devices" */ if (!ObjectArg || (!strcmp (ObjectArg, "*"))) { (void) AcpiWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbDeviceResources, NULL, NULL, NULL); } else { /* Convert string to object pointer */ Node = AcpiDbConvertToNode (ObjectArg); if (Node) { if (Node->Type != ACPI_TYPE_DEVICE) { AcpiOsPrintf ( "%4.4s: Name is not a device object (%s)\n", Node->Name.Ascii, AcpiUtGetTypeName (Node->Type)); } else { (void) AcpiDbDeviceResources (Node, 0, NULL, NULL); } } } AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); } /******************************************************************************* * * FUNCTION: AcpiDbGenerateGed * * PARAMETERS: GedArg - Raw GED number, ascii string * * RETURN: None * * DESCRIPTION: Simulate firing of a GED * ******************************************************************************/ void AcpiDbGenerateInterrupt ( char *GsivArg) { UINT32 GsivNumber; ACPI_GED_HANDLER_INFO *GedInfo = AcpiGbl_GedHandlerList; if (!GedInfo) { AcpiOsPrintf ("No GED handling present\n"); } GsivNumber = strtoul (GsivArg, NULL, 0); while (GedInfo) { if (GedInfo->IntId == GsivNumber) { ACPI_OBJECT_LIST ArgList; ACPI_OBJECT Arg0; ACPI_HANDLE EvtHandle = GedInfo->EvtMethod; ACPI_STATUS Status; AcpiOsPrintf ("Evaluate GED _EVT (GSIV=%d)\n", GsivNumber); if (!EvtHandle) { AcpiOsPrintf ("Undefined _EVT method\n"); return; } Arg0.Integer.Type = ACPI_TYPE_INTEGER; Arg0.Integer.Value = GsivNumber; ArgList.Count = 1; ArgList.Pointer = &Arg0; Status = AcpiEvaluateObject (EvtHandle, NULL, &ArgList, NULL); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not evaluate _EVT\n"); return; } } GedInfo = GedInfo->Next; } } #if (!ACPI_REDUCED_HARDWARE) /******************************************************************************* * * FUNCTION: AcpiDbGenerateGpe * * PARAMETERS: GpeArg - Raw GPE number, ascii string * BlockArg - GPE block number, ascii string * 0 or 1 for FADT GPE blocks * * RETURN: None * * DESCRIPTION: Simulate firing of a GPE * ******************************************************************************/ void AcpiDbGenerateGpe ( char *GpeArg, char *BlockArg) { UINT32 BlockNumber = 0; UINT32 GpeNumber; ACPI_GPE_EVENT_INFO *GpeEventInfo; GpeNumber = strtoul (GpeArg, NULL, 0); /* * If no block arg, or block arg == 0 or 1, use the FADT-defined * GPE blocks. */ if (BlockArg) { BlockNumber = strtoul (BlockArg, NULL, 0); if (BlockNumber == 1) { BlockNumber = 0; } } GpeEventInfo = AcpiEvGetGpeEventInfo ( ACPI_TO_POINTER (BlockNumber), GpeNumber); if (!GpeEventInfo) { AcpiOsPrintf ("Invalid GPE\n"); return; } (void) AcpiEvGpeDispatch (NULL, GpeEventInfo, GpeNumber); } /******************************************************************************* * * FUNCTION: AcpiDbGenerateSci * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Simulate an SCI -- just call the SCI dispatch. * ******************************************************************************/ void AcpiDbGenerateSci ( void) { AcpiEvSciDispatch (); } #endif /* !ACPI_REDUCED_HARDWARE */ /******************************************************************************* * * FUNCTION: AcpiDbTrace * * PARAMETERS: EnableArg - ENABLE/AML to enable tracer * DISABLE to disable tracer * MethodArg - Method to trace * OnceArg - Whether trace once * * RETURN: None * * DESCRIPTION: Control method tracing facility * ******************************************************************************/ void AcpiDbTrace ( char *EnableArg, char *MethodArg, char *OnceArg) { UINT32 DebugLevel = 0; UINT32 DebugLayer = 0; UINT32 Flags = 0; AcpiUtStrupr (EnableArg); AcpiUtStrupr (OnceArg); if (MethodArg) { if (AcpiDbTraceMethodName) { ACPI_FREE (AcpiDbTraceMethodName); AcpiDbTraceMethodName = NULL; } AcpiDbTraceMethodName = ACPI_ALLOCATE (strlen (MethodArg) + 1); if (!AcpiDbTraceMethodName) { AcpiOsPrintf ("Failed to allocate method name (%s)\n", MethodArg); return; } strcpy (AcpiDbTraceMethodName, MethodArg); } if (!strcmp (EnableArg, "ENABLE") || !strcmp (EnableArg, "METHOD") || !strcmp (EnableArg, "OPCODE")) { if (!strcmp (EnableArg, "ENABLE")) { /* Inherit current console settings */ DebugLevel = AcpiGbl_DbConsoleDebugLevel; DebugLayer = AcpiDbgLayer; } else { /* Restrict console output to trace points only */ DebugLevel = ACPI_LV_TRACE_POINT; DebugLayer = ACPI_EXECUTER; } Flags = ACPI_TRACE_ENABLED; if (!strcmp (EnableArg, "OPCODE")) { Flags |= ACPI_TRACE_OPCODE; } if (OnceArg && !strcmp (OnceArg, "ONCE")) { Flags |= ACPI_TRACE_ONESHOT; } } (void) AcpiDebugTrace (AcpiDbTraceMethodName, DebugLevel, DebugLayer, Flags); } src/acpica/source/components/debugger/dbconvert.c000066400000000000000000000536121465205512700225060ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dbconvert - debugger miscellaneous conversion routines * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdebug.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbconvert") #define DB_DEFAULT_PKG_ELEMENTS 33 /******************************************************************************* * * FUNCTION: AcpiDbHexCharToValue * * PARAMETERS: HexChar - Ascii Hex digit, 0-9|a-f|A-F * ReturnValue - Where the converted value is returned * * RETURN: Status * * DESCRIPTION: Convert a single hex character to a 4-bit number (0-16). * ******************************************************************************/ ACPI_STATUS AcpiDbHexCharToValue ( int HexChar, UINT8 *ReturnValue) { UINT8 Value; /* Digit must be ascii [0-9a-fA-F] */ if (!isxdigit (HexChar)) { return (AE_BAD_HEX_CONSTANT); } if (HexChar <= 0x39) { Value = (UINT8) (HexChar - 0x30); } else { Value = (UINT8) (toupper (HexChar) - 0x37); } *ReturnValue = Value; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbHexByteToBinary * * PARAMETERS: HexByte - Double hex digit (0x00 - 0xFF) in format: * HiByte then LoByte. * ReturnValue - Where the converted value is returned * * RETURN: Status * * DESCRIPTION: Convert two hex characters to an 8 bit number (0 - 255). * ******************************************************************************/ static ACPI_STATUS AcpiDbHexByteToBinary ( char *HexByte, UINT8 *ReturnValue) { UINT8 Local0; UINT8 Local1; ACPI_STATUS Status; /* High byte */ Status = AcpiDbHexCharToValue (HexByte[0], &Local0); if (ACPI_FAILURE (Status)) { return (Status); } /* Low byte */ Status = AcpiDbHexCharToValue (HexByte[1], &Local1); if (ACPI_FAILURE (Status)) { return (Status); } *ReturnValue = (UINT8) ((Local0 << 4) | Local1); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbConvertToBuffer * * PARAMETERS: String - Input string to be converted * Object - Where the buffer object is returned * * RETURN: Status * * DESCRIPTION: Convert a string to a buffer object. String is treated a list * of buffer elements, each separated by a space or comma. * ******************************************************************************/ static ACPI_STATUS AcpiDbConvertToBuffer ( char *String, ACPI_OBJECT *Object) { UINT32 i; UINT32 j; UINT32 Length; UINT8 *Buffer; ACPI_STATUS Status; /* Skip all preceding white space*/ AcpiUtRemoveWhitespace (&String); /* Generate the final buffer length */ for (i = 0, Length = 0; String[i];) { i+=2; Length++; while (String[i] && ((String[i] == ',') || (String[i] == ' '))) { i++; } } Buffer = ACPI_ALLOCATE (Length); if (!Buffer) { return (AE_NO_MEMORY); } /* Convert the command line bytes to the buffer */ for (i = 0, j = 0; String[i];) { Status = AcpiDbHexByteToBinary (&String[i], &Buffer[j]); if (ACPI_FAILURE (Status)) { ACPI_FREE (Buffer); return (Status); } j++; i += 2; while (String[i] && ((String[i] == ',') || (String[i] == ' '))) { i++; } } Object->Type = ACPI_TYPE_BUFFER; Object->Buffer.Pointer = Buffer; Object->Buffer.Length = Length; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbConvertToPackage * * PARAMETERS: String - Input string to be converted * Object - Where the package object is returned * * RETURN: Status * * DESCRIPTION: Convert a string to a package object. Handles nested packages * via recursion with AcpiDbConvertToObject. * ******************************************************************************/ ACPI_STATUS AcpiDbConvertToPackage ( char *String, ACPI_OBJECT *Object) { char *This; char *Next; UINT32 i; ACPI_OBJECT_TYPE Type; ACPI_OBJECT *Elements; ACPI_STATUS Status; Elements = ACPI_ALLOCATE_ZEROED ( DB_DEFAULT_PKG_ELEMENTS * sizeof (ACPI_OBJECT)); This = String; for (i = 0; i < (DB_DEFAULT_PKG_ELEMENTS - 1); i++) { This = AcpiDbGetNextToken (This, &Next, &Type); if (!This) { break; } /* Recursive call to convert each package element */ Status = AcpiDbConvertToObject (Type, This, &Elements[i]); if (ACPI_FAILURE (Status)) { AcpiDbDeleteObjects (i + 1, Elements); ACPI_FREE (Elements); return (Status); } This = Next; } Object->Type = ACPI_TYPE_PACKAGE; Object->Package.Count = i; Object->Package.Elements = Elements; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbConvertToObject * * PARAMETERS: Type - Object type as determined by parser * String - Input string to be converted * Object - Where the new object is returned * * RETURN: Status * * DESCRIPTION: Convert a typed and tokenized string to an ACPI_OBJECT. Typing: * 1) String objects were surrounded by quotes. * 2) Buffer objects were surrounded by parentheses. * 3) Package objects were surrounded by brackets "[]". * 4) All standalone tokens are treated as integers. * ******************************************************************************/ ACPI_STATUS AcpiDbConvertToObject ( ACPI_OBJECT_TYPE Type, char *String, ACPI_OBJECT *Object) { ACPI_STATUS Status = AE_OK; switch (Type) { case ACPI_TYPE_STRING: Object->Type = ACPI_TYPE_STRING; Object->String.Pointer = String; Object->String.Length = (UINT32) strlen (String); break; case ACPI_TYPE_BUFFER: Status = AcpiDbConvertToBuffer (String, Object); break; case ACPI_TYPE_PACKAGE: Status = AcpiDbConvertToPackage (String, Object); break; default: Object->Type = ACPI_TYPE_INTEGER; Status = AcpiUtStrtoul64 (String, &Object->Integer.Value); break; } return (Status); } /******************************************************************************* * * FUNCTION: AcpiDbEncodePldBuffer * * PARAMETERS: PldInfo - _PLD buffer struct (Using local struct) * * RETURN: Encode _PLD buffer suitable for return value from _PLD * * DESCRIPTION: Bit-packs a _PLD buffer struct. Used to test the _PLD macros * ******************************************************************************/ UINT8 * AcpiDbEncodePldBuffer ( ACPI_PLD_INFO *PldInfo) { UINT32 *Buffer; UINT32 Dword; Buffer = ACPI_ALLOCATE_ZEROED (ACPI_PLD_BUFFER_SIZE); if (!Buffer) { return (NULL); } /* First 32 bits */ Dword = 0; ACPI_PLD_SET_REVISION (&Dword, PldInfo->Revision); ACPI_PLD_SET_IGNORE_COLOR (&Dword, PldInfo->IgnoreColor); ACPI_PLD_SET_RED (&Dword, PldInfo->Red); ACPI_PLD_SET_GREEN (&Dword, PldInfo->Green); ACPI_PLD_SET_BLUE (&Dword, PldInfo->Blue); ACPI_MOVE_32_TO_32 (&Buffer[0], &Dword); /* Second 32 bits */ Dword = 0; ACPI_PLD_SET_WIDTH (&Dword, PldInfo->Width); ACPI_PLD_SET_HEIGHT (&Dword, PldInfo->Height); ACPI_MOVE_32_TO_32 (&Buffer[1], &Dword); /* Third 32 bits */ Dword = 0; ACPI_PLD_SET_USER_VISIBLE (&Dword, PldInfo->UserVisible); ACPI_PLD_SET_DOCK (&Dword, PldInfo->Dock); ACPI_PLD_SET_LID (&Dword, PldInfo->Lid); ACPI_PLD_SET_PANEL (&Dword, PldInfo->Panel); ACPI_PLD_SET_VERTICAL (&Dword, PldInfo->VerticalPosition); ACPI_PLD_SET_HORIZONTAL (&Dword, PldInfo->HorizontalPosition); ACPI_PLD_SET_SHAPE (&Dword, PldInfo->Shape); ACPI_PLD_SET_ORIENTATION (&Dword, PldInfo->GroupOrientation); ACPI_PLD_SET_TOKEN (&Dword, PldInfo->GroupToken); ACPI_PLD_SET_POSITION (&Dword, PldInfo->GroupPosition); ACPI_PLD_SET_BAY (&Dword, PldInfo->Bay); ACPI_MOVE_32_TO_32 (&Buffer[2], &Dword); /* Fourth 32 bits */ Dword = 0; ACPI_PLD_SET_EJECTABLE (&Dword, PldInfo->Ejectable); ACPI_PLD_SET_OSPM_EJECT (&Dword, PldInfo->OspmEjectRequired); ACPI_PLD_SET_CABINET (&Dword, PldInfo->CabinetNumber); ACPI_PLD_SET_CARD_CAGE (&Dword, PldInfo->CardCageNumber); ACPI_PLD_SET_REFERENCE (&Dword, PldInfo->Reference); ACPI_PLD_SET_ROTATION (&Dword, PldInfo->Rotation); ACPI_PLD_SET_ORDER (&Dword, PldInfo->Order); ACPI_MOVE_32_TO_32 (&Buffer[3], &Dword); if (PldInfo->Revision >= 2) { /* Fifth 32 bits */ Dword = 0; ACPI_PLD_SET_VERT_OFFSET (&Dword, PldInfo->VerticalOffset); ACPI_PLD_SET_HORIZ_OFFSET (&Dword, PldInfo->HorizontalOffset); ACPI_MOVE_32_TO_32 (&Buffer[4], &Dword); } return (ACPI_CAST_PTR (UINT8, Buffer)); } /******************************************************************************* * * FUNCTION: AcpiDbDumpPldBuffer * * PARAMETERS: ObjDesc - Object returned from _PLD method * * RETURN: None. * * DESCRIPTION: Dumps formatted contents of a _PLD return buffer. * ******************************************************************************/ #define ACPI_PLD_OUTPUT "%20s : %-6X\n" void AcpiDbDumpPldBuffer ( ACPI_OBJECT *ObjDesc) { ACPI_OBJECT *BufferDesc; ACPI_PLD_INFO *PldInfo; UINT8 *NewBuffer; ACPI_STATUS Status; /* Object must be of type Package with at least one Buffer element */ if (ObjDesc->Type != ACPI_TYPE_PACKAGE) { return; } BufferDesc = &ObjDesc->Package.Elements[0]; if (BufferDesc->Type != ACPI_TYPE_BUFFER) { return; } /* Convert _PLD buffer to local _PLD struct */ Status = AcpiDecodePldBuffer (BufferDesc->Buffer.Pointer, BufferDesc->Buffer.Length, &PldInfo); if (ACPI_FAILURE (Status)) { return; } /* Encode local _PLD struct back to a _PLD buffer */ NewBuffer = AcpiDbEncodePldBuffer (PldInfo); if (!NewBuffer) { goto Exit; } /* The two bit-packed buffers should match */ if (memcmp (NewBuffer, BufferDesc->Buffer.Pointer, BufferDesc->Buffer.Length)) { AcpiOsPrintf ("Converted _PLD buffer does not compare. New:\n"); AcpiUtDumpBuffer (NewBuffer, BufferDesc->Buffer.Length, DB_BYTE_DISPLAY, 0); } /* First 32-bit dword */ AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Revision", PldInfo->Revision); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_IgnoreColor", PldInfo->IgnoreColor); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Red", PldInfo->Red); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Green", PldInfo->Green); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Blue", PldInfo->Blue); /* Second 32-bit dword */ AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Width", PldInfo->Width); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Height", PldInfo->Height); /* Third 32-bit dword */ AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_UserVisible", PldInfo->UserVisible); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Dock", PldInfo->Dock); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Lid", PldInfo->Lid); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Panel", PldInfo->Panel); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_VerticalPosition", PldInfo->VerticalPosition); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_HorizontalPosition", PldInfo->HorizontalPosition); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Shape", PldInfo->Shape); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_GroupOrientation", PldInfo->GroupOrientation); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_GroupToken", PldInfo->GroupToken); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_GroupPosition", PldInfo->GroupPosition); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Bay", PldInfo->Bay); /* Fourth 32-bit dword */ AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Ejectable", PldInfo->Ejectable); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_EjectRequired", PldInfo->OspmEjectRequired); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_CabinetNumber", PldInfo->CabinetNumber); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_CardCageNumber", PldInfo->CardCageNumber); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Reference", PldInfo->Reference); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Rotation", PldInfo->Rotation); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Order", PldInfo->Order); /* Fifth 32-bit dword */ if (BufferDesc->Buffer.Length > 16) { AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_VerticalOffset", PldInfo->VerticalOffset); AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_HorizontalOffset", PldInfo->HorizontalOffset); } ACPI_FREE (NewBuffer); Exit: ACPI_FREE (PldInfo); } src/acpica/source/components/debugger/dbdisply.c000066400000000000000000001165521465205512700223350ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dbdisply - debug display commands * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "amlcode.h" #include "acdispat.h" #include "acnamesp.h" #include "acparser.h" #include "acinterp.h" #include "acevents.h" #include "acdebug.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbdisply") /* Local prototypes */ static void AcpiDbDumpParserDescriptor ( ACPI_PARSE_OBJECT *Op); static void * AcpiDbGetPointer ( void *Target); static ACPI_STATUS AcpiDbDisplayNonRootHandlers ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); /* * System handler information. * Used for Handlers command, in AcpiDbDisplayHandlers. */ #define ACPI_PREDEFINED_PREFIX "%25s (%.2X) : " #define ACPI_HANDLER_NAME_STRING "%30s : " #define ACPI_HANDLER_PRESENT_STRING "%-9s (%p)\n" #define ACPI_HANDLER_PRESENT_STRING2 "%-9s (%p)" #define ACPI_HANDLER_NOT_PRESENT_STRING "%-9s\n" /* All predefined Address Space IDs */ static ACPI_ADR_SPACE_TYPE AcpiGbl_SpaceIdList[] = { ACPI_ADR_SPACE_SYSTEM_MEMORY, ACPI_ADR_SPACE_SYSTEM_IO, ACPI_ADR_SPACE_PCI_CONFIG, ACPI_ADR_SPACE_EC, ACPI_ADR_SPACE_SMBUS, ACPI_ADR_SPACE_CMOS, ACPI_ADR_SPACE_PCI_BAR_TARGET, ACPI_ADR_SPACE_IPMI, ACPI_ADR_SPACE_GPIO, ACPI_ADR_SPACE_GSBUS, ACPI_ADR_SPACE_PLATFORM_COMM, ACPI_ADR_SPACE_PLATFORM_RT, ACPI_ADR_SPACE_DATA_TABLE, ACPI_ADR_SPACE_FIXED_HARDWARE }; /* Global handler information */ typedef struct acpi_handler_info { void *Handler; char *Name; } ACPI_HANDLER_INFO; static ACPI_HANDLER_INFO AcpiGbl_HandlerList[] = { {&AcpiGbl_GlobalNotify[0].Handler, "System Notifications"}, {&AcpiGbl_GlobalNotify[1].Handler, "Device Notifications"}, {&AcpiGbl_TableHandler, "ACPI Table Events"}, {&AcpiGbl_ExceptionHandler, "Control Method Exceptions"}, {&AcpiGbl_InterfaceHandler, "OSI Invocations"} }; /******************************************************************************* * * FUNCTION: AcpiDbGetPointer * * PARAMETERS: Target - Pointer to string to be converted * * RETURN: Converted pointer * * DESCRIPTION: Convert an ascii pointer value to a real value * ******************************************************************************/ static void * AcpiDbGetPointer ( void *Target) { void *ObjPtr; ACPI_SIZE Address; Address = strtoul (Target, NULL, 16); ObjPtr = ACPI_TO_POINTER (Address); return (ObjPtr); } /******************************************************************************* * * FUNCTION: AcpiDbDumpParserDescriptor * * PARAMETERS: Op - A parser Op descriptor * * RETURN: None * * DESCRIPTION: Display a formatted parser object * ******************************************************************************/ static void AcpiDbDumpParserDescriptor ( ACPI_PARSE_OBJECT *Op) { const ACPI_OPCODE_INFO *Info; Info = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); AcpiOsPrintf ("Parser Op Descriptor:\n"); AcpiOsPrintf ("%20.20s : %4.4X\n", "Opcode", Op->Common.AmlOpcode); ACPI_DEBUG_ONLY_MEMBERS (AcpiOsPrintf ("%20.20s : %s\n", "Opcode Name", Info->Name)); AcpiOsPrintf ("%20.20s : %p\n", "Value/ArgList", Op->Common.Value.Arg); AcpiOsPrintf ("%20.20s : %p\n", "Parent", Op->Common.Parent); AcpiOsPrintf ("%20.20s : %p\n", "NextOp", Op->Common.Next); } /******************************************************************************* * * FUNCTION: AcpiDbDecodeAndDisplayObject * * PARAMETERS: Target - String with object to be displayed. Names * and hex pointers are supported. * OutputType - Byte, Word, Dword, or Qword (B|W|D|Q) * * RETURN: None * * DESCRIPTION: Display a formatted ACPI object * ******************************************************************************/ void AcpiDbDecodeAndDisplayObject ( char *Target, char *OutputType) { void *ObjPtr; ACPI_NAMESPACE_NODE *Node; ACPI_OPERAND_OBJECT *ObjDesc; UINT32 Display = DB_BYTE_DISPLAY; char Buffer[80]; ACPI_BUFFER RetBuf; ACPI_STATUS Status; UINT32 Size; if (!Target) { return; } /* Decode the output type */ if (OutputType) { AcpiUtStrupr (OutputType); if (OutputType[0] == 'W') { Display = DB_WORD_DISPLAY; } else if (OutputType[0] == 'D') { Display = DB_DWORD_DISPLAY; } else if (OutputType[0] == 'Q') { Display = DB_QWORD_DISPLAY; } } RetBuf.Length = sizeof (Buffer); RetBuf.Pointer = Buffer; /* Differentiate between a number and a name */ if ((Target[0] >= 0x30) && (Target[0] <= 0x39)) { ObjPtr = AcpiDbGetPointer (Target); if (!AcpiOsReadable (ObjPtr, 16)) { AcpiOsPrintf ( "Address %p is invalid in this address space\n", ObjPtr); return; } /* Decode the object type */ switch (ACPI_GET_DESCRIPTOR_TYPE (ObjPtr)) { case ACPI_DESC_TYPE_NAMED: /* This is a namespace Node */ if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_NAMESPACE_NODE))) { AcpiOsPrintf ( "Cannot read entire Named object at address %p\n", ObjPtr); return; } Node = ObjPtr; goto DumpNode; case ACPI_DESC_TYPE_OPERAND: /* This is a ACPI OPERAND OBJECT */ if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_OPERAND_OBJECT))) { AcpiOsPrintf ( "Cannot read entire ACPI object at address %p\n", ObjPtr); return; } AcpiUtDebugDumpBuffer (ObjPtr, sizeof (ACPI_OPERAND_OBJECT), Display, ACPI_UINT32_MAX); AcpiExDumpObjectDescriptor (ObjPtr, 1); break; case ACPI_DESC_TYPE_PARSER: /* This is a Parser Op object */ if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_PARSE_OBJECT))) { AcpiOsPrintf ( "Cannot read entire Parser object at address %p\n", ObjPtr); return; } AcpiUtDebugDumpBuffer (ObjPtr, sizeof (ACPI_PARSE_OBJECT), Display, ACPI_UINT32_MAX); AcpiDbDumpParserDescriptor ((ACPI_PARSE_OBJECT *) ObjPtr); break; default: /* Is not a recognizable object */ AcpiOsPrintf ( "Not a known ACPI internal object, descriptor type %2.2X\n", ACPI_GET_DESCRIPTOR_TYPE (ObjPtr)); Size = 16; if (AcpiOsReadable (ObjPtr, 64)) { Size = 64; } /* Just dump some memory */ AcpiUtDebugDumpBuffer (ObjPtr, Size, Display, ACPI_UINT32_MAX); break; } return; } /* The parameter is a name string that must be resolved to a Named obj */ Node = AcpiDbLocalNsLookup (Target); if (!Node) { return; } DumpNode: /* Now dump the NS node */ Status = AcpiGetName (Node, ACPI_FULL_PATHNAME_NO_TRAILING, &RetBuf); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not convert name to pathname\n"); } else { AcpiOsPrintf ("Object %p: Namespace Node - Pathname: %s\n", Node, (char *) RetBuf.Pointer); } if (!AcpiOsReadable (Node, sizeof (ACPI_NAMESPACE_NODE))) { AcpiOsPrintf ("Invalid Named object at address %p\n", Node); return; } AcpiUtDebugDumpBuffer ((void *) Node, sizeof (ACPI_NAMESPACE_NODE), Display, ACPI_UINT32_MAX); AcpiExDumpNamespaceNode (Node, 1); ObjDesc = AcpiNsGetAttachedObject (Node); if (ObjDesc) { AcpiOsPrintf ("\nAttached Object %p:", ObjDesc); if (!AcpiOsReadable (ObjDesc, sizeof (ACPI_OPERAND_OBJECT))) { AcpiOsPrintf ("Invalid internal ACPI Object at address %p\n", ObjDesc); return; } if (ACPI_GET_DESCRIPTOR_TYPE ( ((ACPI_NAMESPACE_NODE *) ObjDesc)) == ACPI_DESC_TYPE_NAMED) { AcpiOsPrintf (" Namespace Node - "); Status = AcpiGetName ((ACPI_NAMESPACE_NODE *) ObjDesc, ACPI_FULL_PATHNAME_NO_TRAILING, &RetBuf); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not convert name to pathname\n"); } else { AcpiOsPrintf ("Pathname: %s", (char *) RetBuf.Pointer); } AcpiOsPrintf ("\n"); AcpiUtDebugDumpBuffer ((void *) ObjDesc, sizeof (ACPI_NAMESPACE_NODE), Display, ACPI_UINT32_MAX); } else { AcpiOsPrintf ("\n"); AcpiUtDebugDumpBuffer ((void *) ObjDesc, sizeof (ACPI_OPERAND_OBJECT), Display, ACPI_UINT32_MAX); } AcpiExDumpObjectDescriptor (ObjDesc, 1); } } /******************************************************************************* * * FUNCTION: AcpiDbDisplayMethodInfo * * PARAMETERS: StartOp - Root of the control method parse tree * * RETURN: None * * DESCRIPTION: Display information about the current method * ******************************************************************************/ void AcpiDbDisplayMethodInfo ( ACPI_PARSE_OBJECT *StartOp) { ACPI_WALK_STATE *WalkState; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_NAMESPACE_NODE *Node; ACPI_PARSE_OBJECT *RootOp; ACPI_PARSE_OBJECT *Op; const ACPI_OPCODE_INFO *OpInfo; UINT32 NumOps = 0; UINT32 NumOperands = 0; UINT32 NumOperators = 0; UINT32 NumRemainingOps = 0; UINT32 NumRemainingOperands = 0; UINT32 NumRemainingOperators = 0; BOOLEAN CountRemaining = FALSE; WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); if (!WalkState) { AcpiOsPrintf ("There is no method currently executing\n"); return; } ObjDesc = WalkState->MethodDesc; Node = WalkState->MethodNode; AcpiOsPrintf ("Currently executing control method is [%4.4s]\n", AcpiUtGetNodeName (Node)); AcpiOsPrintf ("%X Arguments, SyncLevel = %X\n", (UINT32) ObjDesc->Method.ParamCount, (UINT32) ObjDesc->Method.SyncLevel); RootOp = StartOp; while (RootOp->Common.Parent) { RootOp = RootOp->Common.Parent; } Op = RootOp; while (Op) { if (Op == StartOp) { CountRemaining = TRUE; } NumOps++; if (CountRemaining) { NumRemainingOps++; } /* Decode the opcode */ OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); switch (OpInfo->Class) { case AML_CLASS_ARGUMENT: if (CountRemaining) { NumRemainingOperands++; } NumOperands++; break; case AML_CLASS_UNKNOWN: /* Bad opcode or ASCII character */ continue; default: if (CountRemaining) { NumRemainingOperators++; } NumOperators++; break; } Op = AcpiPsGetDepthNext (StartOp, Op); } AcpiOsPrintf ( "Method contains: %X AML Opcodes - %X Operators, %X Operands\n", NumOps, NumOperators, NumOperands); AcpiOsPrintf ( "Remaining to execute: %X AML Opcodes - %X Operators, %X Operands\n", NumRemainingOps, NumRemainingOperators, NumRemainingOperands); } /******************************************************************************* * * FUNCTION: AcpiDbDisplayLocals * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display all locals for the currently running control method * ******************************************************************************/ void AcpiDbDisplayLocals ( void) { ACPI_WALK_STATE *WalkState; WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); if (!WalkState) { AcpiOsPrintf ("There is no method currently executing\n"); return; } AcpiDbDecodeLocals (WalkState); } /******************************************************************************* * * FUNCTION: AcpiDbDisplayArguments * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display all arguments for the currently running control method * ******************************************************************************/ void AcpiDbDisplayArguments ( void) { ACPI_WALK_STATE *WalkState; WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); if (!WalkState) { AcpiOsPrintf ("There is no method currently executing\n"); return; } AcpiDbDecodeArguments (WalkState); } /******************************************************************************* * * FUNCTION: AcpiDbDisplayResults * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display current contents of a method result stack * ******************************************************************************/ void AcpiDbDisplayResults ( void) { UINT32 i; ACPI_WALK_STATE *WalkState; ACPI_OPERAND_OBJECT *ObjDesc; UINT32 ResultCount = 0; ACPI_NAMESPACE_NODE *Node; ACPI_GENERIC_STATE *Frame; UINT32 Index; /* Index onto current frame */ WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); if (!WalkState) { AcpiOsPrintf ("There is no method currently executing\n"); return; } Node = WalkState->MethodNode; if (WalkState->Results) { ResultCount = WalkState->ResultCount; } AcpiOsPrintf ("Method [%4.4s] has %X stacked result objects\n", AcpiUtGetNodeName (Node), ResultCount); /* From the top element of result stack */ Frame = WalkState->Results; Index = (ResultCount - 1) % ACPI_RESULTS_FRAME_OBJ_NUM; for (i = 0; i < ResultCount; i++) { ObjDesc = Frame->Results.ObjDesc[Index]; AcpiOsPrintf ("Result%u: ", i); AcpiDbDisplayInternalObject (ObjDesc, WalkState); if (Index == 0) { Frame = Frame->Results.Next; Index = ACPI_RESULTS_FRAME_OBJ_NUM; } Index--; } } /******************************************************************************* * * FUNCTION: AcpiDbDisplayCallingTree * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display current calling tree of nested control methods * ******************************************************************************/ void AcpiDbDisplayCallingTree ( void) { ACPI_WALK_STATE *WalkState; ACPI_NAMESPACE_NODE *Node; WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); if (!WalkState) { AcpiOsPrintf ("There is no method currently executing\n"); return; } AcpiOsPrintf ("Current Control Method Call Tree\n"); while (WalkState) { Node = WalkState->MethodNode; AcpiOsPrintf (" [%4.4s]\n", AcpiUtGetNodeName (Node)); WalkState = WalkState->Next; } } /******************************************************************************* * * FUNCTION: AcpiDbDisplayObjectType * * PARAMETERS: ObjectArg - User entered NS node handle * * RETURN: None * * DESCRIPTION: Display type of an arbitrary NS node * ******************************************************************************/ void AcpiDbDisplayObjectType ( char *ObjectArg) { ACPI_SIZE Arg; ACPI_HANDLE Handle; ACPI_DEVICE_INFO *Info; ACPI_STATUS Status; UINT32 i; Arg = strtoul (ObjectArg, NULL, 16); Handle = ACPI_TO_POINTER (Arg); Status = AcpiGetObjectInfo (Handle, &Info); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not get object info, %s\n", AcpiFormatException (Status)); return; } AcpiOsPrintf ("ADR: %8.8X%8.8X, Flags: %X\n", ACPI_FORMAT_UINT64 (Info->Address), Info->Flags); AcpiOsPrintf ("S1D-%2.2X S2D-%2.2X S3D-%2.2X S4D-%2.2X\n", Info->HighestDstates[0], Info->HighestDstates[1], Info->HighestDstates[2], Info->HighestDstates[3]); AcpiOsPrintf ("S0W-%2.2X S1W-%2.2X S2W-%2.2X S3W-%2.2X S4W-%2.2X\n", Info->LowestDstates[0], Info->LowestDstates[1], Info->LowestDstates[2], Info->LowestDstates[3], Info->LowestDstates[4]); if (Info->Valid & ACPI_VALID_HID) { AcpiOsPrintf ("HID: %s\n", Info->HardwareId.String); } if (Info->Valid & ACPI_VALID_UID) { AcpiOsPrintf ("UID: %s\n", Info->UniqueId.String); } if (Info->Valid & ACPI_VALID_CID) { for (i = 0; i < Info->CompatibleIdList.Count; i++) { AcpiOsPrintf ("CID %u: %s\n", i, Info->CompatibleIdList.Ids[i].String); } } ACPI_FREE (Info); } /******************************************************************************* * * FUNCTION: AcpiDbDisplayResultObject * * PARAMETERS: ObjDesc - Object to be displayed * WalkState - Current walk state * * RETURN: None * * DESCRIPTION: Display the result of an AML opcode * * Note: Currently only displays the result object if we are single stepping. * However, this output may be useful in other contexts and could be enabled * to do so if needed. * ******************************************************************************/ void AcpiDbDisplayResultObject ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState) { #ifndef ACPI_APPLICATION if (AcpiGbl_DbThreadId != AcpiOsGetThreadId()) { return; } #endif /* Only display if single stepping */ if (!AcpiGbl_CmSingleStep) { return; } AcpiOsPrintf ("ResultObj: "); AcpiDbDisplayInternalObject (ObjDesc, WalkState); AcpiOsPrintf ("\n"); } /******************************************************************************* * * FUNCTION: AcpiDbDisplayArgumentObject * * PARAMETERS: ObjDesc - Object to be displayed * WalkState - Current walk state * * RETURN: None * * DESCRIPTION: Display the result of an AML opcode * ******************************************************************************/ void AcpiDbDisplayArgumentObject ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState) { #ifndef ACPI_APPLICATION if (AcpiGbl_DbThreadId != AcpiOsGetThreadId()) { return; } #endif if (!AcpiGbl_CmSingleStep) { return; } AcpiOsPrintf ("ArgObj: "); AcpiDbDisplayInternalObject (ObjDesc, WalkState); } #if (!ACPI_REDUCED_HARDWARE) /******************************************************************************* * * FUNCTION: AcpiDbDisplayGpes * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display the current GPE structures * ******************************************************************************/ void AcpiDbDisplayGpes ( void) { ACPI_GPE_BLOCK_INFO *GpeBlock; ACPI_GPE_XRUPT_INFO *GpeXruptInfo; 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; RetBuf.Length = sizeof (Buffer); RetBuf.Pointer = Buffer; Block = 0; /* Walk the GPE lists */ GpeXruptInfo = AcpiGbl_GpeXruptListHead; while (GpeXruptInfo) { GpeBlock = GpeXruptInfo->GpeBlockListHead; while (GpeBlock) { Status = AcpiGetName (GpeBlock->Node, ACPI_FULL_PATHNAME_NO_TRAILING, &RetBuf); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not convert name to pathname\n"); } if (GpeBlock->Node == AcpiGbl_FadtGpeDevice) { GpeType = "FADT-defined GPE block"; } else { GpeType = "GPE Block Device"; } AcpiOsPrintf ( "\nBlock %u - Info %p DeviceNode %p [%s] - %s\n", Block, GpeBlock, GpeBlock->Node, Buffer, GpeType); AcpiOsPrintf ( " Registers: %u (%u GPEs)\n", GpeBlock->RegisterCount, GpeBlock->GpeCount); AcpiOsPrintf ( " GPE range: 0x%X to 0x%X on interrupt %u\n", GpeBlock->BlockBaseNumber, GpeBlock->BlockBaseNumber + (GpeBlock->GpeCount - 1), GpeXruptInfo->InterruptNumber); AcpiOsPrintf ( " RegisterInfo: %p Status %8.8X%8.8X Enable %8.8X%8.8X\n", GpeBlock->RegisterInfo, ACPI_FORMAT_UINT64 ( GpeBlock->RegisterInfo->StatusAddress.Address), ACPI_FORMAT_UINT64 ( GpeBlock->RegisterInfo->EnableAddress.Address)); AcpiOsPrintf (" EventInfo: %p\n", GpeBlock->EventInfo); /* Examine each GPE Register within the block */ for (i = 0; i < GpeBlock->RegisterCount; i++) { GpeRegisterInfo = &GpeBlock->RegisterInfo[i]; AcpiOsPrintf ( " Reg %u: (GPE %.2X-%.2X) " "RunEnable %2.2X WakeEnable %2.2X" " Status %8.8X%8.8X Enable %8.8X%8.8X\n", i, GpeRegisterInfo->BaseGpeNumber, GpeRegisterInfo->BaseGpeNumber + (ACPI_GPE_REGISTER_WIDTH - 1), GpeRegisterInfo->EnableForRun, GpeRegisterInfo->EnableForWake, ACPI_FORMAT_UINT64 ( GpeRegisterInfo->StatusAddress.Address), ACPI_FORMAT_UINT64 ( GpeRegisterInfo->EnableAddress.Address)); /* Now look at the individual GPEs in this byte register */ for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) { GpeIndex = (i * ACPI_GPE_REGISTER_WIDTH) + j; GpeEventInfo = &GpeBlock->EventInfo[GpeIndex]; if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == ACPI_GPE_DISPATCH_NONE) { /* This GPE is not used (no method or handler), ignore it */ continue; } AcpiOsPrintf ( " GPE %.2X: %p RunRefs %2.2X Flags %2.2X (", GpeBlock->BlockBaseNumber + GpeIndex, GpeEventInfo, GpeEventInfo->RuntimeCount, GpeEventInfo->Flags); /* Decode the flags byte */ if (GpeEventInfo->Flags & ACPI_GPE_LEVEL_TRIGGERED) { AcpiOsPrintf ("Level, "); } else { AcpiOsPrintf ("Edge, "); } if (GpeEventInfo->Flags & ACPI_GPE_CAN_WAKE) { AcpiOsPrintf ("CanWake, "); } else { AcpiOsPrintf ("RunOnly, "); } switch (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags)) { case ACPI_GPE_DISPATCH_NONE: AcpiOsPrintf ("NotUsed"); break; case ACPI_GPE_DISPATCH_METHOD: AcpiOsPrintf ("Method"); break; case ACPI_GPE_DISPATCH_HANDLER: AcpiOsPrintf ("Handler"); break; case ACPI_GPE_DISPATCH_NOTIFY: Count = 0; Notify = GpeEventInfo->Dispatch.NotifyList; while (Notify) { Count++; Notify = Notify->Next; } AcpiOsPrintf ("Implicit Notify on %u devices", Count); break; case ACPI_GPE_DISPATCH_RAW_HANDLER: AcpiOsPrintf ("RawHandler"); break; default: AcpiOsPrintf ("UNKNOWN: %X", ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags)); break; } AcpiOsPrintf (")\n"); } } Block++; GpeBlock = GpeBlock->Next; } GpeXruptInfo = GpeXruptInfo->Next; } } #endif /* !ACPI_REDUCED_HARDWARE */ /******************************************************************************* * * FUNCTION: AcpiDbDisplayHandlers * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display the currently installed global handlers * ******************************************************************************/ void AcpiDbDisplayHandlers ( void) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *HandlerObj; ACPI_ADR_SPACE_TYPE SpaceId; UINT32 i; /* Operation region handlers */ AcpiOsPrintf ("\nOperation Region Handlers at the namespace root:\n"); ObjDesc = AcpiNsGetAttachedObject (AcpiGbl_RootNode); if (ObjDesc) { for (i = 0; i < ACPI_ARRAY_LENGTH (AcpiGbl_SpaceIdList); i++) { SpaceId = AcpiGbl_SpaceIdList[i]; AcpiOsPrintf (ACPI_PREDEFINED_PREFIX, AcpiUtGetRegionName ((UINT8) SpaceId), SpaceId); HandlerObj = AcpiEvFindRegionHandler ( SpaceId, ObjDesc->CommonNotify.Handler); if (HandlerObj) { AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING, (HandlerObj->AddressSpace.HandlerFlags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ? "Default" : "User", HandlerObj->AddressSpace.Handler); goto FoundHandler; } /* There is no handler for this SpaceId */ AcpiOsPrintf ("None\n"); FoundHandler:; } /* Find all handlers for user-defined SpaceIDs */ HandlerObj = ObjDesc->CommonNotify.Handler; while (HandlerObj) { if (HandlerObj->AddressSpace.SpaceId >= ACPI_USER_REGION_BEGIN) { AcpiOsPrintf (ACPI_PREDEFINED_PREFIX, "User-defined ID", HandlerObj->AddressSpace.SpaceId); AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING, (HandlerObj->AddressSpace.HandlerFlags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ? "Default" : "User", HandlerObj->AddressSpace.Handler); } HandlerObj = HandlerObj->AddressSpace.Next; } } #if (!ACPI_REDUCED_HARDWARE) /* Fixed event handlers */ AcpiOsPrintf ("\nFixed Event Handlers:\n"); for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) { AcpiOsPrintf (ACPI_PREDEFINED_PREFIX, AcpiUtGetEventName (i), i); if (AcpiGbl_FixedEventHandlers[i].Handler) { AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING, "User", AcpiGbl_FixedEventHandlers[i].Handler); } else { AcpiOsPrintf (ACPI_HANDLER_NOT_PRESENT_STRING, "None"); } } #endif /* !ACPI_REDUCED_HARDWARE */ /* Miscellaneous global handlers */ AcpiOsPrintf ("\nMiscellaneous Global Handlers:\n"); for (i = 0; i < ACPI_ARRAY_LENGTH (AcpiGbl_HandlerList); i++) { AcpiOsPrintf (ACPI_HANDLER_NAME_STRING, AcpiGbl_HandlerList[i].Name); if (AcpiGbl_HandlerList[i].Handler) { AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING, "User", AcpiGbl_HandlerList[i].Handler); } else { AcpiOsPrintf (ACPI_HANDLER_NOT_PRESENT_STRING, "None"); } } /* Other handlers that are installed throughout the namespace */ AcpiOsPrintf ("\nOperation Region Handlers for specific devices:\n"); (void) AcpiWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbDisplayNonRootHandlers, NULL, NULL, NULL); } /******************************************************************************* * * FUNCTION: AcpiDbDisplayNonRootHandlers * * PARAMETERS: ACPI_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Display information about all handlers installed for a * device object. * ******************************************************************************/ static ACPI_STATUS AcpiDbDisplayNonRootHandlers ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle); ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *HandlerObj; char *Pathname; ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { return (AE_OK); } Pathname = AcpiNsGetNormalizedPathname (Node, TRUE); if (!Pathname) { return (AE_OK); } /* Display all handlers associated with this device */ HandlerObj = ObjDesc->CommonNotify.Handler; while (HandlerObj) { AcpiOsPrintf (ACPI_PREDEFINED_PREFIX, AcpiUtGetRegionName ((UINT8) HandlerObj->AddressSpace.SpaceId), HandlerObj->AddressSpace.SpaceId); AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING2, (HandlerObj->AddressSpace.HandlerFlags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ? "Default" : "User", HandlerObj->AddressSpace.Handler); AcpiOsPrintf (" Device Name: %s (%p)\n", Pathname, Node); HandlerObj = HandlerObj->AddressSpace.Next; } ACPI_FREE (Pathname); return (AE_OK); } src/acpica/source/components/debugger/dbexec.c000066400000000000000000001043161465205512700217500ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dbexec - debugger control method execution * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdebug.h" #include "acnamesp.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbexec") static ACPI_DB_METHOD_INFO AcpiGbl_DbMethodInfo; /* Local prototypes */ static ACPI_STATUS AcpiDbExecuteMethod ( ACPI_DB_METHOD_INFO *Info, ACPI_BUFFER *ReturnObj); static ACPI_STATUS AcpiDbExecuteSetup ( ACPI_DB_METHOD_INFO *Info); static UINT32 AcpiDbGetOutstandingAllocations ( void); static void ACPI_SYSTEM_XFACE AcpiDbMethodThread ( void *Context); static ACPI_STATUS AcpiDbExecutionWalk ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); static void ACPI_SYSTEM_XFACE AcpiDbSingleExecutionThread ( void *Context); /******************************************************************************* * * FUNCTION: AcpiDbDeleteObjects * * PARAMETERS: Count - Count of objects in the list * Objects - Array of ACPI_OBJECTs to be deleted * * RETURN: None * * DESCRIPTION: Delete a list of ACPI_OBJECTS. Handles packages and nested * packages via recursion. * ******************************************************************************/ void AcpiDbDeleteObjects ( UINT32 Count, ACPI_OBJECT *Objects) { UINT32 i; for (i = 0; i < Count; i++) { switch (Objects[i].Type) { case ACPI_TYPE_BUFFER: ACPI_FREE (Objects[i].Buffer.Pointer); break; case ACPI_TYPE_PACKAGE: /* Recursive call to delete package elements */ AcpiDbDeleteObjects (Objects[i].Package.Count, Objects[i].Package.Elements); /* Free the elements array */ ACPI_FREE (Objects[i].Package.Elements); break; default: break; } } } /******************************************************************************* * * FUNCTION: AcpiDbExecuteMethod * * PARAMETERS: Info - Valid info segment * ReturnObj - Where to put return object * * RETURN: Status * * DESCRIPTION: Execute a control method. Used to evaluate objects via the * "EXECUTE" or "EVALUATE" commands. * ******************************************************************************/ static ACPI_STATUS AcpiDbExecuteMethod ( ACPI_DB_METHOD_INFO *Info, ACPI_BUFFER *ReturnObj) { ACPI_STATUS Status; ACPI_OBJECT_LIST ParamObjects; ACPI_OBJECT Params[ACPI_DEBUGGER_MAX_ARGS + 1]; UINT32 i; ACPI_FUNCTION_TRACE (DbExecuteMethod); if (AcpiGbl_DbOutputToFile && !AcpiDbgLevel) { AcpiOsPrintf ("Warning: debug output is not enabled!\n"); } ParamObjects.Count = 0; ParamObjects.Pointer = NULL; /* Pass through any command-line arguments */ if (Info->Args && Info->Args[0]) { /* Get arguments passed on the command line */ for (i = 0; (Info->Args[i] && *(Info->Args[i])); i++) { /* Convert input string (token) to an actual ACPI_OBJECT */ Status = AcpiDbConvertToObject (Info->Types[i], Info->Args[i], &Params[i]); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "While parsing method arguments")); goto Cleanup; } } ParamObjects.Count = i; ParamObjects.Pointer = Params; } /* Prepare for a return object of arbitrary size */ ReturnObj->Pointer = AcpiGbl_DbBuffer; ReturnObj->Length = ACPI_DEBUG_BUFFER_SIZE; /* Do the actual method execution */ AcpiGbl_MethodExecuting = TRUE; Status = AcpiEvaluateObject (NULL, Info->Pathname, &ParamObjects, ReturnObj); AcpiGbl_CmSingleStep = FALSE; AcpiGbl_MethodExecuting = FALSE; if (ACPI_FAILURE (Status)) { if ((Status == AE_ABORT_METHOD) || AcpiGbl_AbortMethod) { /* Clear the abort and fall back to the debugger prompt */ ACPI_EXCEPTION ((AE_INFO, Status, "Aborting top-level method")); AcpiGbl_AbortMethod = FALSE; Status = AE_OK; goto Cleanup; } ACPI_EXCEPTION ((AE_INFO, Status, "while executing %s from AML Debugger", Info->Pathname)); if (Status == AE_BUFFER_OVERFLOW) { ACPI_ERROR ((AE_INFO, "Possible buffer overflow within AML Debugger " "buffer (size 0x%X needed 0x%X)", ACPI_DEBUG_BUFFER_SIZE, (UINT32) ReturnObj->Length)); } } Cleanup: AcpiDbDeleteObjects (ParamObjects.Count, Params); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDbExecuteSetup * * PARAMETERS: Info - Valid method info * * RETURN: None * * DESCRIPTION: Setup info segment prior to method execution * ******************************************************************************/ static ACPI_STATUS AcpiDbExecuteSetup ( ACPI_DB_METHOD_INFO *Info) { ACPI_STATUS Status; ACPI_FUNCTION_NAME (DbExecuteSetup); /* Concatenate the current scope to the supplied name */ Info->Pathname[0] = 0; if ((Info->Name[0] != '\\') && (Info->Name[0] != '/')) { if (AcpiUtSafeStrcat (Info->Pathname, sizeof (Info->Pathname), AcpiGbl_DbScopeBuf)) { Status = AE_BUFFER_OVERFLOW; goto ErrorExit; } } if (AcpiUtSafeStrcat (Info->Pathname, sizeof (Info->Pathname), Info->Name)) { Status = AE_BUFFER_OVERFLOW; goto ErrorExit; } AcpiDbPrepNamestring (Info->Pathname); AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); AcpiOsPrintf ("Evaluating %s\n", Info->Pathname); if (Info->Flags & EX_SINGLE_STEP) { AcpiGbl_CmSingleStep = TRUE; AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); } else { /* No single step, allow redirection to a file */ AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT); } return (AE_OK); ErrorExit: ACPI_EXCEPTION ((AE_INFO, Status, "During setup for method execution")); return (Status); } #ifdef ACPI_DBG_TRACK_ALLOCATIONS UINT32 AcpiDbGetCacheInfo ( ACPI_MEMORY_LIST *Cache) { return (Cache->TotalAllocated - Cache->TotalFreed - Cache->CurrentDepth); } #endif /******************************************************************************* * * FUNCTION: AcpiDbGetOutstandingAllocations * * PARAMETERS: None * * RETURN: Current global allocation count minus cache entries * * DESCRIPTION: Determine the current number of "outstanding" allocations -- * those allocations that have not been freed and also are not * in one of the various object caches. * ******************************************************************************/ static UINT32 AcpiDbGetOutstandingAllocations ( void) { UINT32 Outstanding = 0; #ifdef ACPI_DBG_TRACK_ALLOCATIONS Outstanding += AcpiDbGetCacheInfo (AcpiGbl_StateCache); Outstanding += AcpiDbGetCacheInfo (AcpiGbl_PsNodeCache); Outstanding += AcpiDbGetCacheInfo (AcpiGbl_PsNodeExtCache); Outstanding += AcpiDbGetCacheInfo (AcpiGbl_OperandCache); #endif return (Outstanding); } /******************************************************************************* * * FUNCTION: AcpiDbExecutionWalk * * PARAMETERS: WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Execute a control method. Name is relative to the current * scope. * ******************************************************************************/ static ACPI_STATUS AcpiDbExecutionWalk ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; ACPI_BUFFER ReturnObj; ACPI_STATUS Status; ObjDesc = AcpiNsGetAttachedObject (Node); if (ObjDesc->Method.ParamCount) { return (AE_OK); } ReturnObj.Pointer = NULL; ReturnObj.Length = ACPI_ALLOCATE_BUFFER; AcpiNsPrintNodePathname (Node, "Evaluating"); /* Do the actual method execution */ AcpiOsPrintf ("\n"); AcpiGbl_MethodExecuting = TRUE; Status = AcpiEvaluateObject (Node, NULL, NULL, &ReturnObj); AcpiGbl_MethodExecuting = FALSE; AcpiOsPrintf ("Evaluation of [%4.4s] returned %s\n", AcpiUtGetNodeName (Node), AcpiFormatException (Status)); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbExecute * * PARAMETERS: Name - Name of method to execute * Args - Parameters to the method * Types - * Flags - single step/no single step * * RETURN: None * * DESCRIPTION: Execute a control method. Name is relative to the current * scope. Function used for the "EXECUTE", "EVALUATE", and * "ALL" commands * ******************************************************************************/ void AcpiDbExecute ( char *Name, char **Args, ACPI_OBJECT_TYPE *Types, UINT32 Flags) { ACPI_STATUS Status; ACPI_BUFFER ReturnObj; char *NameString; #ifdef ACPI_DEBUG_OUTPUT UINT32 PreviousAllocations; UINT32 Allocations; #endif /* * Allow one execution to be performed by debugger or single step * execution will be dead locked by the interpreter mutexes. */ if (AcpiGbl_MethodExecuting) { AcpiOsPrintf ("Only one debugger execution is allowed.\n"); return; } #ifdef ACPI_DEBUG_OUTPUT /* Memory allocation tracking */ PreviousAllocations = AcpiDbGetOutstandingAllocations (); #endif if (*Name == '*') { (void) AcpiWalkNamespace (ACPI_TYPE_METHOD, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbExecutionWalk, NULL, NULL, NULL); return; } if ((Flags & EX_ALL) && (strlen (Name) > 4)) { AcpiOsPrintf ("Input name (%s) must be a 4-char NameSeg\n", Name); return; } NameString = ACPI_ALLOCATE (strlen (Name) + 1); if (!NameString) { return; } memset (&AcpiGbl_DbMethodInfo, 0, sizeof (ACPI_DB_METHOD_INFO)); strcpy (NameString, Name); AcpiUtStrupr (NameString); /* Subcommand to Execute all predefined names in the namespace */ if (!strncmp (NameString, "PREDEF", 6)) { AcpiDbEvaluatePredefinedNames (); ACPI_FREE (NameString); return; } /* Command (ALL ) to execute all methods of a particular name */ else if (Flags & EX_ALL) { AcpiGbl_DbMethodInfo.Name = NameString; ReturnObj.Pointer = NULL; ReturnObj.Length = ACPI_ALLOCATE_BUFFER; AcpiDbEvaluateAll (NameString); ACPI_FREE (NameString); return; } else { AcpiGbl_DbMethodInfo.Name = NameString; AcpiGbl_DbMethodInfo.Args = Args; AcpiGbl_DbMethodInfo.Types = Types; AcpiGbl_DbMethodInfo.Flags = Flags; ReturnObj.Pointer = NULL; ReturnObj.Length = ACPI_ALLOCATE_BUFFER; } Status = AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo); if (ACPI_FAILURE (Status)) { ACPI_FREE (NameString); return; } /* Get the NS node, determines existence also */ Status = AcpiGetHandle (NULL, AcpiGbl_DbMethodInfo.Pathname, &AcpiGbl_DbMethodInfo.Method); if (ACPI_SUCCESS (Status)) { Status = AcpiDbExecuteMethod (&AcpiGbl_DbMethodInfo, &ReturnObj); } ACPI_FREE (NameString); /* * Allow any handlers in separate threads to complete. * (Such as Notify handlers invoked from AML executed above). */ AcpiOsSleep ((UINT64) 10); #ifdef ACPI_DEBUG_OUTPUT /* Memory allocation tracking */ Allocations = AcpiDbGetOutstandingAllocations () - PreviousAllocations; AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); if (Allocations > 0) { AcpiOsPrintf ( "0x%X Outstanding allocations after evaluation of %s\n", Allocations, AcpiGbl_DbMethodInfo.Pathname); } #endif if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Evaluation of %s failed with status %s\n", AcpiGbl_DbMethodInfo.Pathname, AcpiFormatException (Status)); } else { /* Display a return object, if any */ if (ReturnObj.Length) { AcpiOsPrintf ( "Evaluation of %s returned object %p, " "external buffer length %X\n", AcpiGbl_DbMethodInfo.Pathname, ReturnObj.Pointer, (UINT32) ReturnObj.Length); AcpiDbDumpExternalObject (ReturnObj.Pointer, 1); AcpiOsPrintf ("\n"); /* Dump a _PLD buffer if present */ if (ACPI_COMPARE_NAMESEG ((ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, AcpiGbl_DbMethodInfo.Method)->Name.Ascii), METHOD_NAME__PLD)) { AcpiDbDumpPldBuffer (ReturnObj.Pointer); } } else { AcpiOsPrintf ("No object was returned from evaluation of %s\n", AcpiGbl_DbMethodInfo.Pathname); } } AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); } /******************************************************************************* * * FUNCTION: AcpiDbMethodThread * * PARAMETERS: Context - Execution info segment * * RETURN: None * * DESCRIPTION: Debugger execute thread. Waits for a command line, then * simply dispatches it. * ******************************************************************************/ static void ACPI_SYSTEM_XFACE AcpiDbMethodThread ( void *Context) { ACPI_STATUS Status; ACPI_DB_METHOD_INFO *Info = Context; ACPI_DB_METHOD_INFO LocalInfo; UINT32 i; UINT8 Allow; ACPI_BUFFER ReturnObj; /* * AcpiGbl_DbMethodInfo.Arguments will be passed as method arguments. * Prevent AcpiGbl_DbMethodInfo from being modified by multiple threads * concurrently. * * Note: The arguments we are passing are used by the ASL test suite * (aslts). Do not change them without updating the tests. */ (void) AcpiOsWaitSemaphore (Info->InfoGate, 1, ACPI_WAIT_FOREVER); if (Info->InitArgs) { AcpiDbUint32ToHexString (Info->NumCreated, Info->IndexOfThreadStr); AcpiDbUint32ToHexString ((UINT32) AcpiOsGetThreadId (), Info->IdOfThreadStr); } if (Info->Threads && (Info->NumCreated < Info->NumThreads)) { Info->Threads[Info->NumCreated++] = AcpiOsGetThreadId(); } LocalInfo = *Info; LocalInfo.Args = LocalInfo.Arguments; LocalInfo.Arguments[0] = LocalInfo.NumThreadsStr; LocalInfo.Arguments[1] = LocalInfo.IdOfThreadStr; LocalInfo.Arguments[2] = LocalInfo.IndexOfThreadStr; LocalInfo.Arguments[3] = NULL; LocalInfo.Types = LocalInfo.ArgTypes; (void) AcpiOsSignalSemaphore (Info->InfoGate, 1); for (i = 0; i < Info->NumLoops; i++) { Status = AcpiDbExecuteMethod (&LocalInfo, &ReturnObj); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("%s During evaluation of %s at iteration %X\n", AcpiFormatException (Status), Info->Pathname, i); if (Status == AE_ABORT_METHOD) { break; } } #if 0 if ((i % 100) == 0) { AcpiOsPrintf ("%u loops, Thread 0x%x\n", i, AcpiOsGetThreadId ()); } if (ReturnObj.Length) { AcpiOsPrintf ("Evaluation of %s returned object %p Buflen %X\n", Info->Pathname, ReturnObj.Pointer, (UINT32) ReturnObj.Length); AcpiDbDumpExternalObject (ReturnObj.Pointer, 1); } #endif } /* Signal our completion */ Allow = 0; (void) AcpiOsWaitSemaphore (Info->ThreadCompleteGate, 1, ACPI_WAIT_FOREVER); Info->NumCompleted++; if (Info->NumCompleted == Info->NumThreads) { /* Do signal for main thread once only */ Allow = 1; } (void) AcpiOsSignalSemaphore (Info->ThreadCompleteGate, 1); if (Allow) { Status = AcpiOsSignalSemaphore (Info->MainThreadGate, 1); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ( "Could not signal debugger thread sync semaphore, %s\n", AcpiFormatException (Status)); } } } /******************************************************************************* * * FUNCTION: AcpiDbSingleExecutionThread * * PARAMETERS: Context - Method info struct * * RETURN: None * * DESCRIPTION: Create one thread and execute a method * ******************************************************************************/ static void ACPI_SYSTEM_XFACE AcpiDbSingleExecutionThread ( void *Context) { ACPI_DB_METHOD_INFO *Info = Context; ACPI_STATUS Status; ACPI_BUFFER ReturnObj; AcpiOsPrintf ("\n"); Status = AcpiDbExecuteMethod (Info, &ReturnObj); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("%s During evaluation of %s\n", AcpiFormatException (Status), Info->Pathname); return; } /* Display a return object, if any */ if (ReturnObj.Length) { AcpiOsPrintf ("Evaluation of %s returned object %p, " "external buffer length %X\n", AcpiGbl_DbMethodInfo.Pathname, ReturnObj.Pointer, (UINT32) ReturnObj.Length); AcpiDbDumpExternalObject (ReturnObj.Pointer, 1); } AcpiOsPrintf ("\nBackground thread completed\n%c ", ACPI_DEBUGGER_COMMAND_PROMPT); } /******************************************************************************* * * FUNCTION: AcpiDbCreateExecutionThread * * PARAMETERS: MethodNameArg - Control method to execute * Arguments - Array of arguments to the method * Types - Corresponding array of object types * * RETURN: None * * DESCRIPTION: Create a single thread to evaluate a namespace object. Handles * arguments passed on command line for control methods. * ******************************************************************************/ void AcpiDbCreateExecutionThread ( char *MethodNameArg, char **Arguments, ACPI_OBJECT_TYPE *Types) { ACPI_STATUS Status; UINT32 i; memset (&AcpiGbl_DbMethodInfo, 0, sizeof (ACPI_DB_METHOD_INFO)); AcpiGbl_DbMethodInfo.Name = MethodNameArg; AcpiGbl_DbMethodInfo.InitArgs = 1; AcpiGbl_DbMethodInfo.Args = AcpiGbl_DbMethodInfo.Arguments; AcpiGbl_DbMethodInfo.Types = AcpiGbl_DbMethodInfo.ArgTypes; /* Setup method arguments, up to 7 (0-6) */ for (i = 0; (i < ACPI_METHOD_NUM_ARGS) && *Arguments; i++) { AcpiGbl_DbMethodInfo.Arguments[i] = *Arguments; Arguments++; AcpiGbl_DbMethodInfo.ArgTypes[i] = *Types; Types++; } Status = AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo); if (ACPI_FAILURE (Status)) { return; } /* Get the NS node, determines existence also */ Status = AcpiGetHandle (NULL, AcpiGbl_DbMethodInfo.Pathname, &AcpiGbl_DbMethodInfo.Method); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("%s Could not get handle for %s\n", AcpiFormatException (Status), AcpiGbl_DbMethodInfo.Pathname); return; } Status = AcpiOsExecute (OSL_DEBUGGER_EXEC_THREAD, AcpiDbSingleExecutionThread, &AcpiGbl_DbMethodInfo); if (ACPI_FAILURE (Status)) { return; } AcpiOsPrintf ("\nBackground thread started\n"); } /******************************************************************************* * * FUNCTION: AcpiDbCreateExecutionThreads * * PARAMETERS: NumThreadsArg - Number of threads to create * NumLoopsArg - Loop count for the thread(s) * MethodNameArg - Control method to execute * * RETURN: None * * DESCRIPTION: Create threads to execute method(s) * ******************************************************************************/ void AcpiDbCreateExecutionThreads ( char *NumThreadsArg, char *NumLoopsArg, char *MethodNameArg) { ACPI_STATUS Status; UINT32 NumThreads; UINT32 NumLoops; UINT32 i; UINT32 Size; ACPI_MUTEX MainThreadGate; ACPI_MUTEX ThreadCompleteGate; ACPI_MUTEX InfoGate; /* Get the arguments */ NumThreads = strtoul (NumThreadsArg, NULL, 0); NumLoops = strtoul (NumLoopsArg, NULL, 0); if (!NumThreads || !NumLoops) { AcpiOsPrintf ("Bad argument: Threads %X, Loops %X\n", NumThreads, NumLoops); return; } /* * Create the semaphore for synchronization of * the created threads with the main thread. */ Status = AcpiOsCreateSemaphore (1, 0, &MainThreadGate); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not create semaphore for " "synchronization with the main thread, %s\n", AcpiFormatException (Status)); return; } /* * Create the semaphore for synchronization * between the created threads. */ Status = AcpiOsCreateSemaphore (1, 1, &ThreadCompleteGate); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not create semaphore for " "synchronization between the created threads, %s\n", AcpiFormatException (Status)); (void) AcpiOsDeleteSemaphore (MainThreadGate); return; } Status = AcpiOsCreateSemaphore (1, 1, &InfoGate); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not create semaphore for " "synchronization of AcpiGbl_DbMethodInfo, %s\n", AcpiFormatException (Status)); (void) AcpiOsDeleteSemaphore (ThreadCompleteGate); (void) AcpiOsDeleteSemaphore (MainThreadGate); return; } memset (&AcpiGbl_DbMethodInfo, 0, sizeof (ACPI_DB_METHOD_INFO)); /* Array to store IDs of threads */ AcpiGbl_DbMethodInfo.NumThreads = NumThreads; Size = sizeof (ACPI_THREAD_ID) * AcpiGbl_DbMethodInfo.NumThreads; AcpiGbl_DbMethodInfo.Threads = AcpiOsAllocate (Size); if (AcpiGbl_DbMethodInfo.Threads == NULL) { AcpiOsPrintf ("No memory for thread IDs array\n"); (void) AcpiOsDeleteSemaphore (MainThreadGate); (void) AcpiOsDeleteSemaphore (ThreadCompleteGate); (void) AcpiOsDeleteSemaphore (InfoGate); return; } memset (AcpiGbl_DbMethodInfo.Threads, 0, Size); /* Setup the context to be passed to each thread */ AcpiGbl_DbMethodInfo.Name = MethodNameArg; AcpiGbl_DbMethodInfo.Flags = 0; AcpiGbl_DbMethodInfo.NumLoops = NumLoops; AcpiGbl_DbMethodInfo.MainThreadGate = MainThreadGate; AcpiGbl_DbMethodInfo.ThreadCompleteGate = ThreadCompleteGate; AcpiGbl_DbMethodInfo.InfoGate = InfoGate; /* Init arguments to be passed to method */ AcpiGbl_DbMethodInfo.InitArgs = 1; AcpiGbl_DbMethodInfo.Args = AcpiGbl_DbMethodInfo.Arguments; AcpiGbl_DbMethodInfo.Arguments[0] = AcpiGbl_DbMethodInfo.NumThreadsStr; AcpiGbl_DbMethodInfo.Arguments[1] = AcpiGbl_DbMethodInfo.IdOfThreadStr; AcpiGbl_DbMethodInfo.Arguments[2] = AcpiGbl_DbMethodInfo.IndexOfThreadStr; AcpiGbl_DbMethodInfo.Arguments[3] = NULL; AcpiGbl_DbMethodInfo.Types = AcpiGbl_DbMethodInfo.ArgTypes; AcpiGbl_DbMethodInfo.ArgTypes[0] = ACPI_TYPE_INTEGER; AcpiGbl_DbMethodInfo.ArgTypes[1] = ACPI_TYPE_INTEGER; AcpiGbl_DbMethodInfo.ArgTypes[2] = ACPI_TYPE_INTEGER; AcpiDbUint32ToHexString (NumThreads, AcpiGbl_DbMethodInfo.NumThreadsStr); Status = AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo); if (ACPI_FAILURE (Status)) { goto CleanupAndExit; } /* Get the NS node, determines existence also */ Status = AcpiGetHandle (NULL, AcpiGbl_DbMethodInfo.Pathname, &AcpiGbl_DbMethodInfo.Method); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("%s Could not get handle for %s\n", AcpiFormatException (Status), AcpiGbl_DbMethodInfo.Pathname); goto CleanupAndExit; } /* Create the threads */ AcpiOsPrintf ("Creating %X threads to execute %X times each\n", NumThreads, NumLoops); for (i = 0; i < (NumThreads); i++) { Status = AcpiOsExecute (OSL_DEBUGGER_EXEC_THREAD, AcpiDbMethodThread, &AcpiGbl_DbMethodInfo); if (ACPI_FAILURE (Status)) { break; } } /* Wait for all threads to complete */ (void) AcpiOsWaitSemaphore (MainThreadGate, 1, ACPI_WAIT_FOREVER); AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); AcpiOsPrintf ("All threads (%X) have completed\n", NumThreads); AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); CleanupAndExit: /* Cleanup and exit */ (void) AcpiOsDeleteSemaphore (MainThreadGate); (void) AcpiOsDeleteSemaphore (ThreadCompleteGate); (void) AcpiOsDeleteSemaphore (InfoGate); AcpiOsFree (AcpiGbl_DbMethodInfo.Threads); AcpiGbl_DbMethodInfo.Threads = NULL; } src/acpica/source/components/debugger/dbfileio.c000066400000000000000000000263101465205512700222700ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dbfileio - Debugger file I/O commands. These can't usually * be used when running the debugger in Ring 0 (Kernel mode) * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdebug.h" #include "actables.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbfileio") #ifdef ACPI_APPLICATION #include "acapps.h" #ifdef ACPI_DEBUGGER /******************************************************************************* * * FUNCTION: AcpiDbCloseDebugFile * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: If open, close the current debug output file * ******************************************************************************/ void AcpiDbCloseDebugFile ( void) { if (AcpiGbl_DebugFile) { fclose (AcpiGbl_DebugFile); AcpiGbl_DebugFile = NULL; AcpiGbl_DbOutputToFile = FALSE; AcpiOsPrintf ("Debug output file %s closed\n", AcpiGbl_DbDebugFilename); } } /******************************************************************************* * * FUNCTION: AcpiDbOpenDebugFile * * PARAMETERS: Name - Filename to open * * RETURN: None * * DESCRIPTION: Open a file where debug output will be directed. * ******************************************************************************/ void AcpiDbOpenDebugFile ( char *Name) { AcpiDbCloseDebugFile (); AcpiGbl_DebugFile = fopen (Name, "w+"); if (!AcpiGbl_DebugFile) { AcpiOsPrintf ("Could not open debug file %s\n", Name); return; } AcpiOsPrintf ("Debug output file %s opened\n", Name); AcpiUtSafeStrncpy (AcpiGbl_DbDebugFilename, Name, sizeof (AcpiGbl_DbDebugFilename)); AcpiGbl_DbOutputToFile = TRUE; } #endif /******************************************************************************* * * FUNCTION: AcpiDbLoadTables * * PARAMETERS: ListHead - List of ACPI tables to load * * RETURN: Status * * DESCRIPTION: Load ACPI tables from a previously constructed table list. * ******************************************************************************/ ACPI_STATUS AcpiDbLoadTables ( ACPI_NEW_TABLE_DESC *ListHead) { ACPI_STATUS Status; ACPI_NEW_TABLE_DESC *TableListHead; ACPI_TABLE_HEADER *Table; /* Load all ACPI tables in the list */ TableListHead = ListHead; while (TableListHead) { Table = TableListHead->Table; Status = AcpiLoadTable (Table, NULL); if (ACPI_FAILURE (Status)) { if (Status == AE_ALREADY_EXISTS) { AcpiOsPrintf ("Table %4.4s is already installed\n", Table->Signature); } else { AcpiOsPrintf ("Could not install table, %s\n", AcpiFormatException (Status)); } return (Status); } AcpiOsPrintf ("Acpi table [%4.4s] successfully installed and loaded\n", Table->Signature); TableListHead = TableListHead->Next; } return (AE_OK); } #endif src/acpica/source/components/debugger/dbhistry.c000066400000000000000000000327401465205512700223470ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dbhistry - debugger HISTORY command * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdebug.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbhistry") #define HI_NO_HISTORY 0 #define HI_RECORD_HISTORY 1 #define HISTORY_SIZE 40 typedef struct HistoryInfo { char *Command; UINT32 CmdNum; } HISTORY_INFO; static HISTORY_INFO AcpiGbl_HistoryBuffer[HISTORY_SIZE]; static UINT16 AcpiGbl_LoHistory = 0; static UINT16 AcpiGbl_NumHistory = 0; static UINT16 AcpiGbl_NextHistoryIndex = 0; /******************************************************************************* * * FUNCTION: AcpiDbAddToHistory * * PARAMETERS: CommandLine - Command to add * * RETURN: None * * DESCRIPTION: Add a command line to the history buffer. * ******************************************************************************/ void AcpiDbAddToHistory ( char *CommandLine) { UINT16 CmdLen; UINT16 BufferLen; /* Put command into the next available slot */ CmdLen = (UINT16) strlen (CommandLine); if (!CmdLen) { return; } if (AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command != NULL) { BufferLen = (UINT16) strlen ( AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command); if (CmdLen > BufferLen) { AcpiOsFree (AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex]. Command); AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command = AcpiOsAllocate (CmdLen + 1); } } else { AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command = AcpiOsAllocate (CmdLen + 1); } strcpy (AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command, CommandLine); AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].CmdNum = AcpiGbl_NextCmdNum; /* Adjust indexes */ if ((AcpiGbl_NumHistory == HISTORY_SIZE) && (AcpiGbl_NextHistoryIndex == AcpiGbl_LoHistory)) { AcpiGbl_LoHistory++; if (AcpiGbl_LoHistory >= HISTORY_SIZE) { AcpiGbl_LoHistory = 0; } } AcpiGbl_NextHistoryIndex++; if (AcpiGbl_NextHistoryIndex >= HISTORY_SIZE) { AcpiGbl_NextHistoryIndex = 0; } AcpiGbl_NextCmdNum++; if (AcpiGbl_NumHistory < HISTORY_SIZE) { AcpiGbl_NumHistory++; } } /******************************************************************************* * * FUNCTION: AcpiDbDisplayHistory * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display the contents of the history buffer * ******************************************************************************/ void AcpiDbDisplayHistory ( void) { UINT32 i; UINT16 HistoryIndex; HistoryIndex = AcpiGbl_LoHistory; /* Dump entire history buffer */ for (i = 0; i < AcpiGbl_NumHistory; i++) { if (AcpiGbl_HistoryBuffer[HistoryIndex].Command) { AcpiOsPrintf ("%3u %s\n", AcpiGbl_HistoryBuffer[HistoryIndex].CmdNum, AcpiGbl_HistoryBuffer[HistoryIndex].Command); } HistoryIndex++; if (HistoryIndex >= HISTORY_SIZE) { HistoryIndex = 0; } } } /******************************************************************************* * * FUNCTION: AcpiDbGetFromHistory * * PARAMETERS: CommandNumArg - String containing the number of the * command to be retrieved * * RETURN: Pointer to the retrieved command. Null on error. * * DESCRIPTION: Get a command from the history buffer * ******************************************************************************/ char * AcpiDbGetFromHistory ( char *CommandNumArg) { UINT32 CmdNum; if (CommandNumArg == NULL) { CmdNum = AcpiGbl_NextCmdNum - 1; } else { CmdNum = strtoul (CommandNumArg, NULL, 0); } return (AcpiDbGetHistoryByIndex (CmdNum)); } /******************************************************************************* * * FUNCTION: AcpiDbGetHistoryByIndex * * PARAMETERS: CmdNum - Index of the desired history entry. * Values are 0...(AcpiGbl_NextCmdNum - 1) * * RETURN: Pointer to the retrieved command. Null on error. * * DESCRIPTION: Get a command from the history buffer * ******************************************************************************/ char * AcpiDbGetHistoryByIndex ( UINT32 CmdNum) { UINT32 i; UINT16 HistoryIndex; /* Search history buffer */ HistoryIndex = AcpiGbl_LoHistory; for (i = 0; i < AcpiGbl_NumHistory; i++) { if (AcpiGbl_HistoryBuffer[HistoryIndex].CmdNum == CmdNum) { /* Found the command, return it */ return (AcpiGbl_HistoryBuffer[HistoryIndex].Command); } /* History buffer is circular */ HistoryIndex++; if (HistoryIndex >= HISTORY_SIZE) { HistoryIndex = 0; } } AcpiOsPrintf ("Invalid history number: %u\n", HistoryIndex); return (NULL); } src/acpica/source/components/debugger/dbinput.c000066400000000000000000001240551465205512700221650ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dbinput - user front-end to the AML debugger * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdebug.h" #ifdef ACPI_APPLICATION #include "acapps.h" #endif #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbinput") /* Local prototypes */ static UINT32 AcpiDbGetLine ( char *InputBuffer); static UINT32 AcpiDbMatchCommand ( char *UserCommand); static void AcpiDbDisplayCommandInfo ( const char *Command, BOOLEAN DisplayAll); static void AcpiDbDisplayHelp ( char *Command); static BOOLEAN AcpiDbMatchCommandHelp ( const char *Command, const ACPI_DB_COMMAND_HELP *Help); /* * Top-level debugger commands. * * This list of commands must match the string table below it */ enum AcpiExDebuggerCommands { CMD_NOT_FOUND = 0, CMD_NULL, CMD_ALL, CMD_ALLOCATIONS, CMD_ARGS, CMD_ARGUMENTS, CMD_BREAKPOINT, CMD_BUSINFO, CMD_CALL, CMD_DEBUG, CMD_DISASSEMBLE, CMD_DISASM, CMD_DUMP, CMD_EVALUATE, CMD_EXECUTE, CMD_EXIT, CMD_FIELDS, CMD_FIND, CMD_GO, CMD_HANDLERS, CMD_HELP, CMD_HELP2, CMD_HISTORY, CMD_HISTORY_EXE, CMD_HISTORY_LAST, CMD_INFORMATION, CMD_INTEGRITY, CMD_INTO, CMD_LEVEL, CMD_LIST, CMD_LOCALS, CMD_LOCKS, CMD_METHODS, CMD_NAMESPACE, CMD_NOTIFY, CMD_OBJECTS, CMD_OSI, CMD_OWNER, CMD_PATHS, CMD_PREDEFINED, CMD_PREFIX, CMD_QUIT, CMD_REFERENCES, CMD_RESOURCES, CMD_RESULTS, CMD_SET, CMD_STATS, CMD_STOP, CMD_TABLES, CMD_TEMPLATE, CMD_TRACE, CMD_TREE, CMD_TYPE, #ifdef ACPI_APPLICATION CMD_ENABLEACPI, CMD_EVENT, CMD_GPE, CMD_GPES, CMD_SCI, CMD_SLEEP, CMD_CLOSE, CMD_LOAD, CMD_OPEN, CMD_UNLOAD, CMD_TERMINATE, CMD_BACKGROUND, CMD_THREADS, CMD_TEST, CMD_INTERRUPT, #endif }; #define CMD_FIRST_VALID 2 /* Second parameter is the required argument count */ static const ACPI_DB_COMMAND_INFO AcpiGbl_DbCommands[] = { {"", 0}, {"", 0}, {"ALL", 1}, {"ALLOCATIONS", 0}, {"ARGS", 0}, {"ARGUMENTS", 0}, {"BREAKPOINT", 1}, {"BUSINFO", 0}, {"CALL", 0}, {"DEBUG", 1}, {"DISASSEMBLE", 1}, {"DISASM", 1}, {"DUMP", 1}, {"EVALUATE", 1}, {"EXECUTE", 1}, {"EXIT", 0}, {"FIELDS", 1}, {"FIND", 1}, {"GO", 0}, {"HANDLERS", 0}, {"HELP", 0}, {"?", 0}, {"HISTORY", 0}, {"!", 1}, {"!!", 0}, {"INFORMATION", 0}, {"INTEGRITY", 0}, {"INTO", 0}, {"LEVEL", 0}, {"LIST", 0}, {"LOCALS", 0}, {"LOCKS", 0}, {"METHODS", 0}, {"NAMESPACE", 0}, {"NOTIFY", 2}, {"OBJECTS", 0}, {"OSI", 0}, {"OWNER", 1}, {"PATHS", 0}, {"PREDEFINED", 0}, {"PREFIX", 0}, {"QUIT", 0}, {"REFERENCES", 1}, {"RESOURCES", 0}, {"RESULTS", 0}, {"SET", 3}, {"STATS", 1}, {"STOP", 0}, {"TABLES", 0}, {"TEMPLATE", 1}, {"TRACE", 1}, {"TREE", 0}, {"TYPE", 1}, #ifdef ACPI_APPLICATION {"ENABLEACPI", 0}, {"EVENT", 1}, {"GPE", 1}, {"GPES", 0}, {"SCI", 0}, {"SLEEP", 0}, {"CLOSE", 0}, {"LOAD", 1}, {"OPEN", 1}, {"UNLOAD", 1}, {"TERMINATE", 0}, {"BACKGROUND", 1}, {"THREADS", 3}, {"TEST", 1}, {"INTERRUPT", 1}, #endif {NULL, 0} }; /* * Help for all debugger commands. First argument is the number of lines * of help to output for the command. * * Note: Some commands are not supported by the kernel-level version of * the debugger. */ static const ACPI_DB_COMMAND_HELP AcpiGbl_DbCommandHelp[] = { {0, "\nNamespace Access:", "\n"}, {1, " Businfo", "Display system bus info\n"}, {1, " Disassemble ", "Disassemble a control method\n"}, {1, " Find (? is wildcard)", "Find ACPI name(s) with wildcards\n"}, {1, " Integrity", "Validate namespace integrity\n"}, {1, " Methods", "Display list of loaded control methods\n"}, {1, " Fields ", "Display list of loaded field units by space ID\n"}, {1, " Namespace [Object] [Depth]", "Display loaded namespace tree/subtree\n"}, {1, " Notify ", "Send a notification on Object\n"}, {1, " Objects [ObjectType]", "Display summary of all objects or just given type\n"}, {1, " Owner [Depth]", "Display loaded namespace by object owner\n"}, {1, " Paths", "Display full pathnames of namespace objects\n"}, {1, " Predefined", "Check all predefined names\n"}, {1, " Prefix []", "Set or Get current execution prefix\n"}, {1, " References ", "Find all references to object at addr\n"}, {1, " Resources [DeviceName]", "Display Device resources (no arg = all devices)\n"}, {1, " Set N ", "Set value for named integer\n"}, {1, " Template ", "Format/dump a Buffer/ResourceTemplate\n"}, {1, " Type ", "Display object type\n"}, {0, "\nControl Method Execution:", "\n"}, {1, " All ", "Evaluate all objects named NameSeg\n"}, {1, " Evaluate [Arguments]", "Evaluate object or control method\n"}, {1, " Execute [Arguments]", "Synonym for Evaluate\n"}, #ifdef ACPI_APPLICATION {1, " Background [Arguments]", "Evaluate object/method in a separate thread\n"}, {1, " Thread ", "Spawn threads to execute method(s)\n"}, #endif {1, " Debug [Arguments]", "Single-Step a control method\n"}, {7, " [Arguments] formats:", "Control method argument formats\n"}, {1, " Hex Integer", "Integer\n"}, {1, " \"Ascii String\"", "String\n"}, {1, " (Hex Byte List)", "Buffer\n"}, {1, " (01 42 7A BF)", "Buffer example (4 bytes)\n"}, {1, " [Package Element List]", "Package\n"}, {1, " [0x01 0x1234 \"string\"]", "Package example (3 elements)\n"}, {0, "\nMiscellaneous:", "\n"}, {1, " Allocations", "Display list of current memory allocations\n"}, {2, " Dump
|", "\n"}, {0, " [Byte|Word|Dword|Qword]", "Display ACPI objects or memory\n"}, {1, " Handlers", "Info about global handlers\n"}, {1, " Help [Command]", "This help screen or individual command\n"}, {1, " History", "Display command history buffer\n"}, {1, " Level ] [console]", "Get/Set debug level for file or console\n"}, {1, " Locks", "Current status of internal mutexes\n"}, {1, " Osi [Install|Remove ]", "Display or modify global _OSI list\n"}, {1, " Quit or Exit", "Exit this command\n"}, {8, " Stats ", "Display namespace and memory statistics\n"}, {1, " Allocations", "Display list of current memory allocations\n"}, {1, " Memory", "Dump internal memory lists\n"}, {1, " Misc", "Namespace search and mutex stats\n"}, {1, " Objects", "Summary of namespace objects\n"}, {1, " Sizes", "Sizes for each of the internal objects\n"}, {1, " Stack", "Display CPU stack usage\n"}, {1, " Tables", "Info about current ACPI table(s)\n"}, {1, " Tables", "Display info about loaded ACPI tables\n"}, #ifdef ACPI_APPLICATION {1, " Terminate", "Delete namespace and all internal objects\n"}, #endif {1, " ! ", "Execute command from history buffer\n"}, {1, " !!", "Execute last command again\n"}, {0, "\nMethod and Namespace Debugging:", "\n"}, {5, " Trace [] [Once]", "Trace control method execution\n"}, {1, " Enable", "Enable all messages\n"}, {1, " Disable", "Disable tracing\n"}, {1, " Method", "Enable method execution messages\n"}, {1, " Opcode", "Enable opcode execution messages\n"}, {3, " Test ", "Invoke a debug test\n"}, {1, " Objects", "Read/write/compare all namespace data objects\n"}, {1, " Predefined", "Validate all ACPI predefined names (_STA, etc.)\n"}, {1, " Execute predefined", "Execute all predefined (public) methods\n"}, {0, "\nControl Method Single-Step Execution:","\n"}, {1, " Arguments (or Args)", "Display method arguments\n"}, {1, " Breakpoint ", "Set an AML execution breakpoint\n"}, {1, " Call", "Run to next control method invocation\n"}, {1, " Go", "Allow method to run to completion\n"}, {1, " Information", "Display info about the current method\n"}, {1, " Into", "Step into (not over) a method call\n"}, {1, " List [# of Aml Opcodes]", "Display method ASL statements\n"}, {1, " Locals", "Display method local variables\n"}, {1, " Results", "Display method result stack\n"}, {1, " Set <#> ", "Set method data (Arguments/Locals)\n"}, {1, " Stop", "Terminate control method\n"}, {1, " Tree", "Display control method calling tree\n"}, {1, " ", "Single step next AML opcode (over calls)\n"}, #ifdef ACPI_APPLICATION {0, "\nFile Operations:", "\n"}, {1, " Close", "Close debug output file\n"}, {1, " Load ", "Load ACPI table from a file\n"}, {1, " Open ", "Open a file for debug output\n"}, {1, " Unload ", "Unload an ACPI table via namespace object\n"}, {0, "\nHardware Simulation:", "\n"}, {1, " EnableAcpi", "Enable ACPI (hardware) mode\n"}, {1, " Event ", "Generate AcpiEvent (Fixed/GPE)\n"}, {1, " Gpe [GpeBlockDevice]", "Simulate a GPE\n"}, {1, " Gpes", "Display info on all GPE devices\n"}, {1, " Sci", "Generate an SCI\n"}, {1, " Sleep [SleepState]", "Simulate sleep/wake sequence(s) (0-5)\n"}, {1, " Interrupt ", "Simulate an interrupt\n"}, #endif {0, NULL, NULL} }; /******************************************************************************* * * FUNCTION: AcpiDbMatchCommandHelp * * PARAMETERS: Command - Command string to match * Help - Help table entry to attempt match * * RETURN: TRUE if command matched, FALSE otherwise * * DESCRIPTION: Attempt to match a command in the help table in order to * print help information for a single command. * ******************************************************************************/ static BOOLEAN AcpiDbMatchCommandHelp ( const char *Command, const ACPI_DB_COMMAND_HELP *Help) { char *Invocation = Help->Invocation; UINT32 LineCount; /* Valid commands in the help table begin with a couple of spaces */ if (*Invocation != ' ') { return (FALSE); } while (*Invocation == ' ') { Invocation++; } /* Match command name (full command or substring) */ while ((*Command) && (*Invocation) && (*Invocation != ' ')) { if (tolower ((int) *Command) != tolower ((int) *Invocation)) { return (FALSE); } Invocation++; Command++; } /* Print the appropriate number of help lines */ LineCount = Help->LineCount; while (LineCount) { AcpiOsPrintf ("%-38s : %s", Help->Invocation, Help->Description); Help++; LineCount--; } return (TRUE); } /******************************************************************************* * * FUNCTION: AcpiDbDisplayCommandInfo * * PARAMETERS: Command - Command string to match * DisplayAll - Display all matching commands, or just * the first one (substring match) * * RETURN: None * * DESCRIPTION: Display help information for a Debugger command. * ******************************************************************************/ static void AcpiDbDisplayCommandInfo ( const char *Command, BOOLEAN DisplayAll) { const ACPI_DB_COMMAND_HELP *Next; BOOLEAN Matched; Next = AcpiGbl_DbCommandHelp; while (Next->Invocation) { Matched = AcpiDbMatchCommandHelp (Command, Next); if (!DisplayAll && Matched) { return; } Next++; } } /******************************************************************************* * * FUNCTION: AcpiDbDisplayHelp * * PARAMETERS: Command - Optional command string to display help. * if not specified, all debugger command * help strings are displayed * * RETURN: None * * DESCRIPTION: Display help for a single debugger command, or all of them. * ******************************************************************************/ static void AcpiDbDisplayHelp ( char *Command) { const ACPI_DB_COMMAND_HELP *Next = AcpiGbl_DbCommandHelp; if (!Command) { /* No argument to help, display help for all commands */ AcpiOsPrintf ("\nSummary of AML Debugger Commands\n\n"); while (Next->Invocation) { AcpiOsPrintf ("%-38s%s", Next->Invocation, Next->Description); Next++; } AcpiOsPrintf ("\n"); } else { /* Display help for all commands that match the substring */ AcpiDbDisplayCommandInfo (Command, TRUE); } } /******************************************************************************* * * FUNCTION: AcpiDbGetNextToken * * PARAMETERS: String - Command buffer * Next - Return value, end of next token * * RETURN: Pointer to the start of the next token. * * DESCRIPTION: Command line parsing. Get the next token on the command line * ******************************************************************************/ char * AcpiDbGetNextToken ( char *String, char **Next, ACPI_OBJECT_TYPE *ReturnType) { char *Start; UINT32 Depth; ACPI_OBJECT_TYPE Type = ACPI_TYPE_INTEGER; /* At end of buffer? */ if (!String || !(*String)) { return (NULL); } /* Remove any spaces at the beginning, ignore blank lines */ while (*String && isspace ((int) *String)) { String++; } if (!(*String)) { return (NULL); } switch (*String) { case '"': /* This is a quoted string, scan until closing quote */ String++; Start = String; Type = ACPI_TYPE_STRING; /* Find end of string */ while (*String && (*String != '"')) { String++; } break; case '(': /* This is the start of a buffer, scan until closing paren */ String++; Start = String; Type = ACPI_TYPE_BUFFER; /* Find end of buffer */ while (*String && (*String != ')')) { String++; } break; case '{': /* This is the start of a field unit, scan until closing brace */ String++; Start = String; Type = ACPI_TYPE_FIELD_UNIT; /* Find end of buffer */ while (*String && (*String != '}')) { String++; } break; case '[': /* This is the start of a package, scan until closing bracket */ String++; Depth = 1; Start = String; Type = ACPI_TYPE_PACKAGE; /* Find end of package (closing bracket) */ while (*String) { /* Handle String package elements */ if (*String == '"') { /* Find end of string */ String++; while (*String && (*String != '"')) { String++; } if (!(*String)) { break; } } else if (*String == '[') { Depth++; /* A nested package declaration */ } else if (*String == ']') { Depth--; if (Depth == 0) /* Found final package closing bracket */ { break; } } String++; } break; default: Start = String; /* Find end of token */ while (*String && !isspace ((int) *String)) { String++; } break; } if (!(*String)) { *Next = NULL; } else { *String = 0; *Next = String + 1; } *ReturnType = Type; return (Start); } /******************************************************************************* * * FUNCTION: AcpiDbGetLine * * PARAMETERS: InputBuffer - Command line buffer * * RETURN: Count of arguments to the command * * DESCRIPTION: Get the next command line from the user. Gets entire line * up to the next newline * ******************************************************************************/ static UINT32 AcpiDbGetLine ( char *InputBuffer) { UINT32 i; UINT32 Count; char *Next; char *This; if (AcpiUtSafeStrcpy (AcpiGbl_DbParsedBuf, sizeof (AcpiGbl_DbParsedBuf), InputBuffer)) { AcpiOsPrintf ( "Buffer overflow while parsing input line (max %u characters)\n", (UINT32) sizeof (AcpiGbl_DbParsedBuf)); return (0); } This = AcpiGbl_DbParsedBuf; for (i = 0; i < ACPI_DEBUGGER_MAX_ARGS; i++) { AcpiGbl_DbArgs[i] = AcpiDbGetNextToken (This, &Next, &AcpiGbl_DbArgTypes[i]); if (!AcpiGbl_DbArgs[i]) { break; } This = Next; } /* Uppercase the actual command */ AcpiUtStrupr (AcpiGbl_DbArgs[0]); Count = i; if (Count) { Count--; /* Number of args only */ } return (Count); } /******************************************************************************* * * FUNCTION: AcpiDbMatchCommand * * PARAMETERS: UserCommand - User command line * * RETURN: Index into command array, -1 if not found * * DESCRIPTION: Search command array for a command match * ******************************************************************************/ static UINT32 AcpiDbMatchCommand ( char *UserCommand) { UINT32 i; if (!UserCommand || UserCommand[0] == 0) { return (CMD_NULL); } for (i = CMD_FIRST_VALID; AcpiGbl_DbCommands[i].Name; i++) { if (strstr ( ACPI_CAST_PTR (char, AcpiGbl_DbCommands[i].Name), UserCommand) == AcpiGbl_DbCommands[i].Name) { return (i); } } /* Command not recognized */ return (CMD_NOT_FOUND); } /******************************************************************************* * * FUNCTION: AcpiDbCommandDispatch * * PARAMETERS: InputBuffer - Command line buffer * WalkState - Current walk * Op - Current (executing) parse op * * RETURN: Status * * DESCRIPTION: Command dispatcher. * ******************************************************************************/ ACPI_STATUS AcpiDbCommandDispatch ( char *InputBuffer, ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { UINT32 Temp; UINT64 Temp64; UINT32 CommandIndex; UINT32 ParamCount; char *CommandLine; ACPI_STATUS Status = AE_CTRL_TRUE; /* If AcpiTerminate has been called, terminate this thread */ if (AcpiGbl_DbTerminateLoop) { return (AE_CTRL_TERMINATE); } /* Find command and add to the history buffer */ ParamCount = AcpiDbGetLine (InputBuffer); CommandIndex = AcpiDbMatchCommand (AcpiGbl_DbArgs[0]); /* * We don't want to add the !! command to the history buffer. It * would cause an infinite loop because it would always be the * previous command. */ if (CommandIndex != CMD_HISTORY_LAST) { AcpiDbAddToHistory (InputBuffer); } /* Verify that we have the minimum number of params */ if (ParamCount < AcpiGbl_DbCommands[CommandIndex].MinArgs) { AcpiOsPrintf ("%u parameters entered, [%s] requires %u parameters\n", ParamCount, AcpiGbl_DbCommands[CommandIndex].Name, AcpiGbl_DbCommands[CommandIndex].MinArgs); AcpiDbDisplayCommandInfo ( AcpiGbl_DbCommands[CommandIndex].Name, FALSE); return (AE_CTRL_TRUE); } /* Decode and dispatch the command */ switch (CommandIndex) { case CMD_NULL: if (Op) { return (AE_OK); } break; case CMD_ALL: AcpiOsPrintf ("Executing all objects with NameSeg: %s\n", AcpiGbl_DbArgs[1]); AcpiDbExecute (AcpiGbl_DbArgs[1], &AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2], EX_NO_SINGLE_STEP | EX_ALL); break; case CMD_ALLOCATIONS: #ifdef ACPI_DBG_TRACK_ALLOCATIONS AcpiUtDumpAllocations ((UINT32) -1, NULL); #endif break; case CMD_ARGS: case CMD_ARGUMENTS: AcpiDbDisplayArguments (); break; case CMD_BREAKPOINT: AcpiDbSetMethodBreakpoint (AcpiGbl_DbArgs[1], WalkState, Op); break; case CMD_BUSINFO: AcpiDbGetBusInfo (); break; case CMD_CALL: AcpiDbSetMethodCallBreakpoint (Op); Status = AE_OK; break; case CMD_DEBUG: AcpiDbExecute (AcpiGbl_DbArgs[1], &AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2], EX_SINGLE_STEP); break; case CMD_DISASSEMBLE: case CMD_DISASM: #ifdef ACPI_DISASSEMBLER (void) AcpiDbDisassembleMethod (AcpiGbl_DbArgs[1]); #else AcpiOsPrintf ("The AML Disassembler is not configured/present\n"); #endif break; case CMD_DUMP: AcpiDbDecodeAndDisplayObject (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]); break; case CMD_EVALUATE: case CMD_EXECUTE: AcpiDbExecute (AcpiGbl_DbArgs[1], &AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2], EX_NO_SINGLE_STEP); break; case CMD_FIND: Status = AcpiDbFindNameInNamespace (AcpiGbl_DbArgs[1]); break; case CMD_FIELDS: Status = AcpiUtStrtoul64 (AcpiGbl_DbArgs[1], &Temp64); if (ACPI_FAILURE (Status) || Temp64 >= ACPI_NUM_PREDEFINED_REGIONS) { AcpiOsPrintf ( "Invalid address space ID: must be between 0 and %u inclusive\n", ACPI_NUM_PREDEFINED_REGIONS - 1); return (AE_OK); } Status = AcpiDbDisplayFields ((UINT32) Temp64); break; case CMD_GO: AcpiGbl_CmSingleStep = FALSE; return (AE_OK); case CMD_HANDLERS: AcpiDbDisplayHandlers (); break; case CMD_HELP: case CMD_HELP2: AcpiDbDisplayHelp (AcpiGbl_DbArgs[1]); break; case CMD_HISTORY: AcpiDbDisplayHistory (); break; case CMD_HISTORY_EXE: /* ! command */ CommandLine = AcpiDbGetFromHistory (AcpiGbl_DbArgs[1]); if (!CommandLine) { return (AE_CTRL_TRUE); } Status = AcpiDbCommandDispatch (CommandLine, WalkState, Op); return (Status); case CMD_HISTORY_LAST: /* !! command */ CommandLine = AcpiDbGetFromHistory (NULL); if (!CommandLine) { return (AE_CTRL_TRUE); } Status = AcpiDbCommandDispatch (CommandLine, WalkState, Op); return (Status); case CMD_INFORMATION: AcpiDbDisplayMethodInfo (Op); break; case CMD_INTEGRITY: AcpiDbCheckIntegrity (); break; case CMD_INTO: if (Op) { AcpiGbl_CmSingleStep = TRUE; return (AE_OK); } break; case CMD_LEVEL: if (ParamCount == 0) { AcpiOsPrintf ( "Current debug level for file output is: %8.8X\n", AcpiGbl_DbDebugLevel); AcpiOsPrintf ( "Current debug level for console output is: %8.8X\n", AcpiGbl_DbConsoleDebugLevel); } else if (ParamCount == 2) { Temp = AcpiGbl_DbConsoleDebugLevel; AcpiGbl_DbConsoleDebugLevel = strtoul (AcpiGbl_DbArgs[1], NULL, 16); AcpiOsPrintf ( "Debug Level for console output was %8.8X, now %8.8X\n", Temp, AcpiGbl_DbConsoleDebugLevel); } else { Temp = AcpiGbl_DbDebugLevel; AcpiGbl_DbDebugLevel = strtoul (AcpiGbl_DbArgs[1], NULL, 16); AcpiOsPrintf ( "Debug Level for file output was %8.8X, now %8.8X\n", Temp, AcpiGbl_DbDebugLevel); } break; case CMD_LIST: #ifdef ACPI_DISASSEMBLER AcpiDbDisassembleAml (AcpiGbl_DbArgs[1], Op); #else AcpiOsPrintf ("The AML Disassembler is not configured/present\n"); #endif break; case CMD_LOCKS: AcpiDbDisplayLocks (); break; case CMD_LOCALS: AcpiDbDisplayLocals (); break; case CMD_METHODS: Status = AcpiDbDisplayObjects ("METHOD", AcpiGbl_DbArgs[1]); break; case CMD_NAMESPACE: AcpiDbDumpNamespace (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]); break; case CMD_NOTIFY: Temp = strtoul (AcpiGbl_DbArgs[2], NULL, 0); AcpiDbSendNotify (AcpiGbl_DbArgs[1], Temp); break; case CMD_OBJECTS: AcpiUtStrupr (AcpiGbl_DbArgs[1]); Status = AcpiDbDisplayObjects (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]); break; case CMD_OSI: AcpiDbDisplayInterfaces (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]); break; case CMD_OWNER: AcpiDbDumpNamespaceByOwner (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]); break; case CMD_PATHS: AcpiDbDumpNamespacePaths (); break; case CMD_PREFIX: AcpiDbSetScope (AcpiGbl_DbArgs[1]); break; case CMD_REFERENCES: AcpiDbFindReferences (AcpiGbl_DbArgs[1]); break; case CMD_RESOURCES: AcpiDbDisplayResources (AcpiGbl_DbArgs[1]); break; case CMD_RESULTS: AcpiDbDisplayResults (); break; case CMD_SET: AcpiDbSetMethodData (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2], AcpiGbl_DbArgs[3]); break; case CMD_STATS: Status = AcpiDbDisplayStatistics (AcpiGbl_DbArgs[1]); break; case CMD_STOP: return (AE_NOT_IMPLEMENTED); case CMD_TABLES: AcpiDbDisplayTableInfo (AcpiGbl_DbArgs[1]); break; case CMD_TEMPLATE: AcpiDbDisplayTemplate (AcpiGbl_DbArgs[1]); break; case CMD_TRACE: AcpiDbTrace (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2], AcpiGbl_DbArgs[3]); break; case CMD_TREE: AcpiDbDisplayCallingTree (); break; case CMD_TYPE: AcpiDbDisplayObjectType (AcpiGbl_DbArgs[1]); break; #ifdef ACPI_APPLICATION /* Hardware simulation commands. */ case CMD_ENABLEACPI: #if (!ACPI_REDUCED_HARDWARE) Status = AcpiEnable(); if (ACPI_FAILURE(Status)) { AcpiOsPrintf("AcpiEnable failed (Status=%X)\n", Status); return (Status); } #endif /* !ACPI_REDUCED_HARDWARE */ break; case CMD_EVENT: AcpiOsPrintf ("Event command not implemented\n"); break; case CMD_INTERRUPT: AcpiDbGenerateInterrupt (AcpiGbl_DbArgs[1]); break; case CMD_GPE: AcpiDbGenerateGpe (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]); break; case CMD_GPES: AcpiDbDisplayGpes (); break; case CMD_SCI: AcpiDbGenerateSci (); break; case CMD_SLEEP: Status = AcpiDbSleep (AcpiGbl_DbArgs[1]); break; /* File I/O commands. */ case CMD_CLOSE: AcpiDbCloseDebugFile (); break; case CMD_LOAD: { ACPI_NEW_TABLE_DESC *ListHead = NULL; Status = AcGetAllTablesFromFile (AcpiGbl_DbArgs[1], ACPI_GET_ALL_TABLES, &ListHead); if (ACPI_SUCCESS (Status)) { AcpiDbLoadTables (ListHead); } } break; case CMD_OPEN: AcpiDbOpenDebugFile (AcpiGbl_DbArgs[1]); break; /* User space commands. */ case CMD_TERMINATE: AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT); AcpiUtSubsystemShutdown (); /* * TBD: [Restructure] Need some way to re-initialize without * re-creating the semaphores! */ AcpiGbl_DbTerminateLoop = TRUE; /* AcpiInitialize (NULL); */ break; case CMD_BACKGROUND: AcpiDbCreateExecutionThread (AcpiGbl_DbArgs[1], &AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2]); break; case CMD_THREADS: AcpiDbCreateExecutionThreads (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2], AcpiGbl_DbArgs[3]); break; /* Debug test commands. */ case CMD_PREDEFINED: AcpiDbCheckPredefinedNames (); break; case CMD_TEST: AcpiDbExecuteTest (AcpiGbl_DbArgs[1]); break; case CMD_UNLOAD: AcpiDbUnloadAcpiTable (AcpiGbl_DbArgs[1]); break; #endif case CMD_EXIT: case CMD_QUIT: if (Op) { AcpiOsPrintf ("Method execution terminated\n"); return (AE_CTRL_TERMINATE); } if (!AcpiGbl_DbOutputToFile) { AcpiDbgLevel = ACPI_DEBUG_DEFAULT; } #ifdef ACPI_APPLICATION AcpiDbCloseDebugFile (); #endif AcpiGbl_DbTerminateLoop = TRUE; return (AE_CTRL_TERMINATE); case CMD_NOT_FOUND: default: AcpiOsPrintf ("%s: unknown command\n", AcpiGbl_DbArgs[0]); return (AE_CTRL_TRUE); } if (ACPI_SUCCESS (Status)) { Status = AE_CTRL_TRUE; } return (Status); } /******************************************************************************* * * FUNCTION: AcpiDbExecuteThread * * PARAMETERS: Context - Not used * * RETURN: None * * DESCRIPTION: Debugger execute thread. Waits for a command line, then * simply dispatches it. * ******************************************************************************/ void ACPI_SYSTEM_XFACE AcpiDbExecuteThread ( void *Context) { (void) AcpiDbUserCommands (); AcpiGbl_DbThreadsTerminated = TRUE; } /******************************************************************************* * * FUNCTION: AcpiDbUserCommands * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Command line execution for the AML debugger. Commands are * matched and dispatched here. * ******************************************************************************/ ACPI_STATUS AcpiDbUserCommands ( void) { ACPI_STATUS Status = AE_OK; AcpiOsPrintf ("\n"); /* TBD: [Restructure] Need a separate command line buffer for step mode */ while (!AcpiGbl_DbTerminateLoop) { /* Wait the readiness of the command */ Status = AcpiOsWaitCommandReady (); if (ACPI_FAILURE (Status)) { break; } /* Just call to the command line interpreter */ AcpiGbl_MethodExecuting = FALSE; AcpiGbl_StepToNextCall = FALSE; (void) AcpiDbCommandDispatch (AcpiGbl_DbLineBuf, NULL, NULL); /* Notify the completion of the command */ Status = AcpiOsNotifyCommandComplete (); if (ACPI_FAILURE (Status)) { break; } } if (ACPI_FAILURE (Status) && Status != AE_CTRL_TERMINATE) { ACPI_EXCEPTION ((AE_INFO, Status, "While parsing command line")); } return (Status); } src/acpica/source/components/debugger/dbmethod.c000066400000000000000000000600271465205512700223040ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dbmethod - Debug commands for control methods * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdispat.h" #include "acnamesp.h" #include "acdebug.h" #include "acparser.h" #include "acpredef.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbmethod") /* Local prototypes */ static ACPI_STATUS AcpiDbWalkForExecute ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); static ACPI_STATUS AcpiDbEvaluateObject ( ACPI_NAMESPACE_NODE *Node); /******************************************************************************* * * FUNCTION: AcpiDbSetMethodBreakpoint * * PARAMETERS: Location - AML offset of breakpoint * WalkState - Current walk info * Op - Current Op (from parse walk) * * RETURN: None * * DESCRIPTION: Set a breakpoint in a control method at the specified * AML offset * ******************************************************************************/ void AcpiDbSetMethodBreakpoint ( char *Location, ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { UINT32 Address; UINT32 AmlOffset; if (!Op) { AcpiOsPrintf ("There is no method currently executing\n"); return; } /* Get and verify the breakpoint address */ Address = strtoul (Location, NULL, 16); AmlOffset = (UINT32) ACPI_PTR_DIFF (Op->Common.Aml, WalkState->ParserState.AmlStart); if (Address <= AmlOffset) { AcpiOsPrintf ("Breakpoint %X is beyond current address %X\n", Address, AmlOffset); } /* Save breakpoint in current walk */ WalkState->UserBreakpoint = Address; AcpiOsPrintf ("Breakpoint set at AML offset %X\n", Address); } /******************************************************************************* * * FUNCTION: AcpiDbSetMethodCallBreakpoint * * PARAMETERS: Op - Current Op (from parse walk) * * RETURN: None * * DESCRIPTION: Set a breakpoint in a control method at the specified * AML offset * ******************************************************************************/ void AcpiDbSetMethodCallBreakpoint ( ACPI_PARSE_OBJECT *Op) { if (!Op) { AcpiOsPrintf ("There is no method currently executing\n"); return; } AcpiGbl_StepToNextCall = TRUE; } /******************************************************************************* * * FUNCTION: AcpiDbSetMethodData * * PARAMETERS: TypeArg - L for local, A for argument * IndexArg - which one * ValueArg - Value to set. * * RETURN: None * * DESCRIPTION: Set a local or argument for the running control method. * NOTE: only object supported is Number. * ******************************************************************************/ void AcpiDbSetMethodData ( char *TypeArg, char *IndexArg, char *ValueArg) { char Type; UINT32 Index; UINT32 Value; ACPI_WALK_STATE *WalkState; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; /* Validate TypeArg */ AcpiUtStrupr (TypeArg); Type = TypeArg[0]; if ((Type != 'L') && (Type != 'A') && (Type != 'N')) { AcpiOsPrintf ("Invalid SET operand: %s\n", TypeArg); return; } Value = strtoul (ValueArg, NULL, 16); if (Type == 'N') { Node = AcpiDbConvertToNode (IndexArg); if (!Node) { return; } if (Node->Type != ACPI_TYPE_INTEGER) { AcpiOsPrintf ("Can only set Integer nodes\n"); return; } ObjDesc = Node->Object; ObjDesc->Integer.Value = Value; return; } /* Get the index and value */ Index = strtoul (IndexArg, NULL, 16); WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); if (!WalkState) { AcpiOsPrintf ("There is no method currently executing\n"); return; } /* Create and initialize the new object */ ObjDesc = AcpiUtCreateIntegerObject ((UINT64) Value); if (!ObjDesc) { AcpiOsPrintf ("Could not create an internal object\n"); return; } /* Store the new object into the target */ switch (Type) { case 'A': /* Set a method argument */ if (Index > ACPI_METHOD_MAX_ARG) { AcpiOsPrintf ("Arg%u - Invalid argument name\n", Index); goto Cleanup; } Status = AcpiDsStoreObjectToLocal (ACPI_REFCLASS_ARG, Index, ObjDesc, WalkState); if (ACPI_FAILURE (Status)) { goto Cleanup; } ObjDesc = WalkState->Arguments[Index].Object; AcpiOsPrintf ("Arg%u: ", Index); AcpiDbDisplayInternalObject (ObjDesc, WalkState); break; case 'L': /* Set a method local */ if (Index > ACPI_METHOD_MAX_LOCAL) { AcpiOsPrintf ("Local%u - Invalid local variable name\n", Index); goto Cleanup; } Status = AcpiDsStoreObjectToLocal (ACPI_REFCLASS_LOCAL, Index, ObjDesc, WalkState); if (ACPI_FAILURE (Status)) { goto Cleanup; } ObjDesc = WalkState->LocalVariables[Index].Object; AcpiOsPrintf ("Local%u: ", Index); AcpiDbDisplayInternalObject (ObjDesc, WalkState); break; default: break; } Cleanup: AcpiUtRemoveReference (ObjDesc); } #ifdef ACPI_DISASSEMBLER /******************************************************************************* * * FUNCTION: AcpiDbDisassembleAml * * PARAMETERS: Statements - Number of statements to disassemble * Op - Current Op (from parse walk) * * RETURN: None * * DESCRIPTION: Display disassembled AML (ASL) starting from Op for the number * of statements specified. * ******************************************************************************/ void AcpiDbDisassembleAml ( char *Statements, ACPI_PARSE_OBJECT *Op) { UINT32 NumStatements = 8; if (!Op) { AcpiOsPrintf ("There is no method currently executing\n"); return; } if (Statements) { NumStatements = strtoul (Statements, NULL, 0); } AcpiDmDisassemble (NULL, Op, NumStatements); } /******************************************************************************* * * FUNCTION: AcpiDbDisassembleMethod * * PARAMETERS: Name - Name of control method * * RETURN: None * * DESCRIPTION: Display disassembled AML (ASL) starting from Op for the number * of statements specified. * ******************************************************************************/ ACPI_STATUS AcpiDbDisassembleMethod ( char *Name) { ACPI_STATUS Status; ACPI_PARSE_OBJECT *Op; ACPI_WALK_STATE *WalkState; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_NAMESPACE_NODE *Method; Method = AcpiDbConvertToNode (Name); if (!Method) { return (AE_BAD_PARAMETER); } if (Method->Type != ACPI_TYPE_METHOD) { ACPI_ERROR ((AE_INFO, "%s (%s): Object must be a control method", Name, AcpiUtGetTypeName (Method->Type))); return (AE_BAD_PARAMETER); } ObjDesc = Method->Object; Op = AcpiPsCreateScopeOp (ObjDesc->Method.AmlStart); if (!Op) { return (AE_NO_MEMORY); } /* Create and initialize a new walk state */ WalkState = AcpiDsCreateWalkState (0, Op, NULL, NULL); if (!WalkState) { return (AE_NO_MEMORY); } Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, ObjDesc->Method.AmlStart, ObjDesc->Method.AmlLength, NULL, ACPI_IMODE_LOAD_PASS1); if (ACPI_FAILURE (Status)) { return (Status); } Status = AcpiUtAllocateOwnerId (&ObjDesc->Method.OwnerId); if (ACPI_FAILURE(Status)) { return (Status); } WalkState->OwnerId = ObjDesc->Method.OwnerId; /* Push start scope on scope stack and make it current */ Status = AcpiDsScopeStackPush (Method, Method->Type, WalkState); if (ACPI_FAILURE (Status)) { return (Status); } /* Parse the entire method AML including deferred operators */ WalkState->ParseFlags &= ~ACPI_PARSE_DELETE_TREE; WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE; Status = AcpiPsParseAml (WalkState); if (ACPI_FAILURE(Status)) { return (Status); } (void) AcpiDmParseDeferredOps (Op); /* Now we can disassemble the method */ AcpiGbl_DmOpt_Verbose = FALSE; AcpiDmDisassemble (NULL, Op, 0); AcpiGbl_DmOpt_Verbose = TRUE; AcpiPsDeleteParseTree (Op); /* Method cleanup */ AcpiNsDeleteNamespaceSubtree (Method); AcpiNsDeleteNamespaceByOwner (ObjDesc->Method.OwnerId); AcpiUtReleaseOwnerId (&ObjDesc->Method.OwnerId); return (AE_OK); } #endif /******************************************************************************* * * FUNCTION: AcpiDbEvaluateObject * * PARAMETERS: Node - Namespace node for the object * * RETURN: Status * * DESCRIPTION: Main execution function for the Evaluate/Execute/All debugger * commands. * ******************************************************************************/ static ACPI_STATUS AcpiDbEvaluateObject ( ACPI_NAMESPACE_NODE *Node) { char *Pathname; UINT32 i; ACPI_DEVICE_INFO *ObjInfo; ACPI_OBJECT_LIST ParamObjects; ACPI_OBJECT Params[ACPI_METHOD_NUM_ARGS]; ACPI_BUFFER ReturnObj; ACPI_STATUS Status; Pathname = AcpiNsGetExternalPathname (Node); if (!Pathname) { return (AE_OK); } /* Get the object info for number of method parameters */ Status = AcpiGetObjectInfo (Node, &ObjInfo); if (ACPI_FAILURE (Status)) { ACPI_FREE (Pathname); return (Status); } ParamObjects.Pointer = NULL; ParamObjects.Count = 0; if (ObjInfo->Type == ACPI_TYPE_METHOD) { /* Setup default parameters */ for (i = 0; i < ObjInfo->ParamCount; i++) { Params[i].Type = ACPI_TYPE_INTEGER; Params[i].Integer.Value = 1; } ParamObjects.Pointer = Params; ParamObjects.Count = ObjInfo->ParamCount; } ACPI_FREE (ObjInfo); ReturnObj.Pointer = NULL; ReturnObj.Length = ACPI_ALLOCATE_BUFFER; /* Do the actual method execution */ AcpiGbl_MethodExecuting = TRUE; Status = AcpiEvaluateObject (Node, NULL, &ParamObjects, &ReturnObj); AcpiGbl_MethodExecuting = FALSE; AcpiOsPrintf ("%-32s returned %s\n", Pathname, AcpiFormatException (Status)); if (ReturnObj.Length) { AcpiOsPrintf ("Evaluation of %s returned object %p, " "external buffer length %X\n", Pathname, ReturnObj.Pointer, (UINT32) ReturnObj.Length); AcpiDbDumpExternalObject (ReturnObj.Pointer, 1); AcpiOsPrintf ("\n"); } ACPI_FREE (Pathname); /* Ignore status from method execution */ return (AE_OK); /* Update count, check if we have executed enough methods */ } /******************************************************************************* * * FUNCTION: AcpiDbWalkForExecute * * PARAMETERS: Callback from WalkNamespace * * RETURN: Status * * DESCRIPTION: Batch execution function. Evaluates all "predefined" objects -- * the nameseg begins with an underscore. * ******************************************************************************/ static ACPI_STATUS AcpiDbWalkForExecute ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; ACPI_DB_EXECUTE_WALK *Info = (ACPI_DB_EXECUTE_WALK *) Context; ACPI_STATUS Status; const ACPI_PREDEFINED_INFO *Predefined; Predefined = AcpiUtMatchPredefinedMethod (Node->Name.Ascii); if (!Predefined) { return (AE_OK); } if (Node->Type == ACPI_TYPE_LOCAL_SCOPE) { return (AE_OK); } AcpiDbEvaluateObject (Node); /* Ignore status from object evaluation */ Status = AE_OK; /* Update count, check if we have executed enough methods */ Info->Count++; if (Info->Count >= Info->MaxCount) { Status = AE_CTRL_TERMINATE; } return (Status); } /******************************************************************************* * * FUNCTION: AcpiDbWalkForExecuteAll * * PARAMETERS: Callback from WalkNamespace * * RETURN: Status * * DESCRIPTION: Batch execution function. Evaluates all objects whose path ends * with the nameseg "Info->NameSeg". Used for the "ALL" command. * ******************************************************************************/ static ACPI_STATUS AcpiDbWalkForExecuteAll ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; ACPI_DB_EXECUTE_WALK *Info = (ACPI_DB_EXECUTE_WALK *) Context; ACPI_STATUS Status; if (!ACPI_COMPARE_NAMESEG (Node->Name.Ascii, Info->NameSeg)) { return (AE_OK); } if (Node->Type == ACPI_TYPE_LOCAL_SCOPE) { return (AE_OK); } /* Now evaluate the input object (node) */ AcpiDbEvaluateObject (Node); /* Ignore status from method execution */ Status = AE_OK; /* Update count of executed methods/objects */ Info->Count++; return (Status); } /******************************************************************************* * * FUNCTION: AcpiDbEvaluatePredefinedNames * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Namespace batch execution. Execute predefined names in the * namespace, up to the max count, if specified. * ******************************************************************************/ void AcpiDbEvaluatePredefinedNames ( void) { ACPI_DB_EXECUTE_WALK Info; Info.Count = 0; Info.MaxCount = ACPI_UINT32_MAX; /* Search all nodes in namespace */ (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbWalkForExecute, NULL, (void *) &Info, NULL); AcpiOsPrintf ("Evaluated %u predefined names in the namespace\n", Info.Count); } /******************************************************************************* * * FUNCTION: AcpiDbEvaluateAll * * PARAMETERS: NoneAcpiGbl_DbMethodInfo * * RETURN: None * * DESCRIPTION: Namespace batch execution. Implements the "ALL" command. * Execute all namepaths whose final nameseg matches the * input nameseg. * ******************************************************************************/ void AcpiDbEvaluateAll ( char *NameSeg) { ACPI_DB_EXECUTE_WALK Info; Info.Count = 0; Info.MaxCount = ACPI_UINT32_MAX; ACPI_COPY_NAMESEG (Info.NameSeg, NameSeg); Info.NameSeg[ACPI_NAMESEG_SIZE] = 0; /* Search all nodes in namespace */ (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbWalkForExecuteAll, NULL, (void *) &Info, NULL); AcpiOsPrintf ("Evaluated %u names in the namespace\n", Info.Count); } src/acpica/source/components/debugger/dbnames.c000066400000000000000000001141071465205512700221260ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dbnames - Debugger commands for the acpi namespace * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acdebug.h" #include "acpredef.h" #include "acinterp.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbnames") /* Local prototypes */ static ACPI_STATUS AcpiDbWalkAndMatchName ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); static ACPI_STATUS AcpiDbWalkForPredefinedNames ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); static ACPI_STATUS AcpiDbWalkForSpecificObjects ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); static ACPI_STATUS AcpiDbWalkForObjectCounts ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); static ACPI_STATUS AcpiDbIntegrityWalk ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); static ACPI_STATUS AcpiDbWalkForReferences ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); static ACPI_STATUS AcpiDbBusWalk ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); /* * Arguments for the Objects command * These object types map directly to the ACPI_TYPES */ static ACPI_DB_ARGUMENT_INFO AcpiDbObjectTypes [] = { {"ANY"}, {"INTEGERS"}, {"STRINGS"}, {"BUFFERS"}, {"PACKAGES"}, {"FIELDS"}, {"DEVICES"}, {"EVENTS"}, {"METHODS"}, {"MUTEXES"}, {"REGIONS"}, {"POWERRESOURCES"}, {"PROCESSORS"}, {"THERMALZONES"}, {"BUFFERFIELDS"}, {"DDBHANDLES"}, {"DEBUG"}, {"REGIONFIELDS"}, {"BANKFIELDS"}, {"INDEXFIELDS"}, {"REFERENCES"}, {"ALIASES"}, {"METHODALIASES"}, {"NOTIFY"}, {"ADDRESSHANDLER"}, {"RESOURCE"}, {"RESOURCEFIELD"}, {"SCOPES"}, {NULL} /* Must be null terminated */ }; /******************************************************************************* * * FUNCTION: AcpiDbSetScope * * PARAMETERS: Name - New scope path * * RETURN: Status * * DESCRIPTION: Set the "current scope" as maintained by this utility. * The scope is used as a prefix to ACPI paths. * ******************************************************************************/ void AcpiDbSetScope ( char *Name) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; if (!Name || Name[0] == 0) { AcpiOsPrintf ("Current scope: %s\n", AcpiGbl_DbScopeBuf); return; } AcpiDbPrepNamestring (Name); if (ACPI_IS_ROOT_PREFIX (Name[0])) { /* Validate new scope from the root */ Status = AcpiNsGetNode (AcpiGbl_RootNode, Name, ACPI_NS_NO_UPSEARCH, &Node); if (ACPI_FAILURE (Status)) { goto ErrorExit; } AcpiGbl_DbScopeBuf[0] = 0; } else { /* Validate new scope relative to old scope */ Status = AcpiNsGetNode (AcpiGbl_DbScopeNode, Name, ACPI_NS_NO_UPSEARCH, &Node); if (ACPI_FAILURE (Status)) { goto ErrorExit; } } /* Build the final pathname */ if (AcpiUtSafeStrcat (AcpiGbl_DbScopeBuf, sizeof (AcpiGbl_DbScopeBuf), Name)) { Status = AE_BUFFER_OVERFLOW; goto ErrorExit; } if (AcpiUtSafeStrcat (AcpiGbl_DbScopeBuf, sizeof (AcpiGbl_DbScopeBuf), "\\")) { Status = AE_BUFFER_OVERFLOW; goto ErrorExit; } AcpiGbl_DbScopeNode = Node; AcpiOsPrintf ("New scope: %s\n", AcpiGbl_DbScopeBuf); return; ErrorExit: AcpiOsPrintf ("Could not attach scope: %s, %s\n", Name, AcpiFormatException (Status)); } /******************************************************************************* * * FUNCTION: AcpiDbDumpNamespace * * PARAMETERS: StartArg - Node to begin namespace dump * DepthArg - Maximum tree depth to be dumped * * RETURN: None * * DESCRIPTION: Dump entire namespace or a subtree. Each node is displayed * with type and other information. * ******************************************************************************/ void AcpiDbDumpNamespace ( char *StartArg, char *DepthArg) { ACPI_HANDLE SubtreeEntry = AcpiGbl_RootNode; UINT32 MaxDepth = ACPI_UINT32_MAX; /* No argument given, just start at the root and dump entire namespace */ if (StartArg) { SubtreeEntry = AcpiDbConvertToNode (StartArg); if (!SubtreeEntry) { return; } /* Now we can check for the depth argument */ if (DepthArg) { MaxDepth = strtoul (DepthArg, NULL, 0); } } AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); if (((ACPI_NAMESPACE_NODE *) SubtreeEntry)->Parent) { AcpiOsPrintf ("ACPI Namespace (from %4.4s (%p) subtree):\n", ((ACPI_NAMESPACE_NODE *) SubtreeEntry)->Name.Ascii, SubtreeEntry); } else { AcpiOsPrintf ("ACPI Namespace (from %s):\n", ACPI_NAMESPACE_ROOT); } /* Display the subtree */ AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT); AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_SUMMARY, MaxDepth, ACPI_OWNER_ID_MAX, SubtreeEntry); AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); } /******************************************************************************* * * FUNCTION: AcpiDbDumpNamespacePaths * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Dump entire namespace with full object pathnames and object * type information. Alternative to "namespace" command. * ******************************************************************************/ void AcpiDbDumpNamespacePaths ( void) { AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); AcpiOsPrintf ("ACPI Namespace (from root):\n"); /* Display the entire namespace */ AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT); AcpiNsDumpObjectPaths (ACPI_TYPE_ANY, ACPI_DISPLAY_SUMMARY, ACPI_UINT32_MAX, ACPI_OWNER_ID_MAX, AcpiGbl_RootNode); AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); } /******************************************************************************* * * FUNCTION: AcpiDbDumpNamespaceByOwner * * PARAMETERS: OwnerArg - Owner ID whose nodes will be displayed * DepthArg - Maximum tree depth to be dumped * * RETURN: None * * DESCRIPTION: Dump elements of the namespace that are owned by the OwnerId. * ******************************************************************************/ void AcpiDbDumpNamespaceByOwner ( char *OwnerArg, char *DepthArg) { ACPI_HANDLE SubtreeEntry = AcpiGbl_RootNode; UINT32 MaxDepth = ACPI_UINT32_MAX; ACPI_OWNER_ID OwnerId; OwnerId = (ACPI_OWNER_ID) strtoul (OwnerArg, NULL, 0); /* Now we can check for the depth argument */ if (DepthArg) { MaxDepth = strtoul (DepthArg, NULL, 0); } AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); AcpiOsPrintf ("ACPI Namespace by owner %X:\n", OwnerId); /* Display the subtree */ AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT); AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_SUMMARY, MaxDepth, OwnerId, SubtreeEntry); AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); } /******************************************************************************* * * FUNCTION: AcpiDbWalkAndMatchName * * PARAMETERS: Callback from WalkNamespace * * RETURN: Status * * DESCRIPTION: Find a particular name/names within the namespace. Wildcards * are supported -- '?' matches any character. * ******************************************************************************/ static ACPI_STATUS AcpiDbWalkAndMatchName ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_STATUS Status; char *RequestedName = (char *) Context; UINT32 i; ACPI_BUFFER Buffer; ACPI_WALK_INFO Info; /* Check for a name match */ for (i = 0; i < 4; i++) { /* Wildcard support */ if ((RequestedName[i] != '?') && (RequestedName[i] != ((ACPI_NAMESPACE_NODE *) ObjHandle)->Name.Ascii[i])) { /* No match, just exit */ return (AE_OK); } } /* Get the full pathname to this object */ Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiNsHandleToPathname (ObjHandle, &Buffer, TRUE); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle); } else { Info.Count = 0; Info.OwnerId = ACPI_OWNER_ID_MAX; Info.DebugLevel = ACPI_UINT32_MAX; Info.DisplayType = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT; AcpiOsPrintf ("%32s", (char *) Buffer.Pointer); (void) AcpiNsDumpOneObject (ObjHandle, NestingLevel, &Info, NULL); ACPI_FREE (Buffer.Pointer); } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbFindNameInNamespace * * PARAMETERS: NameArg - The 4-character ACPI name to find. * wildcards are supported. * * RETURN: None * * DESCRIPTION: Search the namespace for a given name (with wildcards) * ******************************************************************************/ ACPI_STATUS AcpiDbFindNameInNamespace ( char *NameArg) { char AcpiName[5] = "____"; char *AcpiNamePtr = AcpiName; if (strlen (NameArg) > ACPI_NAMESEG_SIZE) { AcpiOsPrintf ("Name must be no longer than 4 characters\n"); return (AE_OK); } /* Pad out name with underscores as necessary to create a 4-char name */ AcpiUtStrupr (NameArg); while (*NameArg) { *AcpiNamePtr = *NameArg; AcpiNamePtr++; NameArg++; } /* Walk the namespace from the root */ (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbWalkAndMatchName, NULL, AcpiName, NULL); AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbWalkForPredefinedNames * * PARAMETERS: Callback from WalkNamespace * * RETURN: Status * * DESCRIPTION: Detect and display predefined ACPI names (names that start with * an underscore) * ******************************************************************************/ static ACPI_STATUS AcpiDbWalkForPredefinedNames ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; UINT32 *Count = (UINT32 *) Context; const ACPI_PREDEFINED_INFO *Predefined; const ACPI_PREDEFINED_INFO *Package = NULL; char *Pathname; char StringBuffer[48]; Predefined = AcpiUtMatchPredefinedMethod (Node->Name.Ascii); if (!Predefined) { return (AE_OK); } Pathname = AcpiNsGetNormalizedPathname (Node, TRUE); if (!Pathname) { return (AE_OK); } /* If method returns a package, the info is in the next table entry */ if (Predefined->Info.ExpectedBtypes & ACPI_RTYPE_PACKAGE) { Package = Predefined + 1; } AcpiUtGetExpectedReturnTypes (StringBuffer, Predefined->Info.ExpectedBtypes); AcpiOsPrintf ("%-32s Arguments %X, Return Types: %s", Pathname, METHOD_GET_ARG_COUNT (Predefined->Info.ArgumentList), StringBuffer); if (Package) { AcpiOsPrintf (" (PkgType %2.2X, ObjType %2.2X, Count %2.2X)", Package->RetInfo.Type, Package->RetInfo.ObjectType1, Package->RetInfo.Count1); } AcpiOsPrintf("\n"); /* Check that the declared argument count matches the ACPI spec */ AcpiNsCheckAcpiCompliance (Pathname, Node, Predefined); ACPI_FREE (Pathname); (*Count)++; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbCheckPredefinedNames * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Validate all predefined names in the namespace * ******************************************************************************/ void AcpiDbCheckPredefinedNames ( void) { UINT32 Count = 0; /* Search all nodes in namespace */ (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbWalkForPredefinedNames, NULL, (void *) &Count, NULL); AcpiOsPrintf ("Found %u predefined names in the namespace\n", Count); } /******************************************************************************* * * FUNCTION: AcpiDbWalkForObjectCounts * * PARAMETERS: Callback from WalkNamespace * * RETURN: Status * * DESCRIPTION: Display short info about objects in the namespace * ******************************************************************************/ static ACPI_STATUS AcpiDbWalkForObjectCounts ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_OBJECT_INFO *Info = (ACPI_OBJECT_INFO *) Context; ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; if (Node->Type > ACPI_TYPE_NS_NODE_MAX) { AcpiOsPrintf ("[%4.4s]: Unknown object type %X\n", Node->Name.Ascii, Node->Type); } else { Info->Types[Node->Type]++; } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbWalkForFields * * PARAMETERS: Callback from WalkNamespace * * RETURN: Status * * DESCRIPTION: Display short info about objects in the namespace * ******************************************************************************/ static ACPI_STATUS AcpiDbWalkForFields ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_OBJECT *RetValue; ACPI_REGION_WALK_INFO *Info = (ACPI_REGION_WALK_INFO *) Context; ACPI_BUFFER Buffer; ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node = AcpiNsValidateHandle (ObjHandle); if (!Node) { return (AE_OK); } if (Node->Object->Field.RegionObj->Region.SpaceId != Info->AddressSpaceId) { return (AE_OK); } Info->Count++; /* Get and display the full pathname to this object */ Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiNsHandleToPathname (ObjHandle, &Buffer, TRUE); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle); return (AE_OK); } AcpiOsPrintf ("%s ", (char *) Buffer.Pointer); ACPI_FREE (Buffer.Pointer); Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiEvaluateObject (ObjHandle, NULL, NULL, &Buffer); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could Not evaluate object %p\n", ObjHandle); return (AE_OK); } /* * Since this is a field unit, surround the output in braces */ AcpiOsPrintf ("{"); RetValue = (ACPI_OBJECT *) Buffer.Pointer; switch (RetValue->Type) { case ACPI_TYPE_INTEGER: AcpiOsPrintf ("%8.8X%8.8X", ACPI_FORMAT_UINT64 (RetValue->Integer.Value)); break; case ACPI_TYPE_BUFFER: AcpiUtDumpBuffer (RetValue->Buffer.Pointer, RetValue->Buffer.Length, DB_DISPLAY_DATA_ONLY | DB_BYTE_DISPLAY, 0); break; default: break; } AcpiOsPrintf ("}\n"); ACPI_FREE (Buffer.Pointer); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbWalkForSpecificObjects * * PARAMETERS: Callback from WalkNamespace * * RETURN: Status * * DESCRIPTION: Display short info about objects in the namespace * ******************************************************************************/ static ACPI_STATUS AcpiDbWalkForSpecificObjects ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_WALK_INFO *Info = (ACPI_WALK_INFO *) Context; ACPI_BUFFER Buffer; ACPI_STATUS Status; Info->Count++; /* Get and display the full pathname to this object */ Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiNsHandleToPathname (ObjHandle, &Buffer, TRUE); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle); return (AE_OK); } AcpiOsPrintf ("%32s", (char *) Buffer.Pointer); ACPI_FREE (Buffer.Pointer); /* Dump short info about the object */ (void) AcpiNsDumpOneObject (ObjHandle, NestingLevel, Info, NULL); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbDisplayObjects * * PARAMETERS: ObjTypeArg - Type of object to display * DisplayCountArg - Max depth to display * * RETURN: None * * DESCRIPTION: Display objects in the namespace of the requested type * ******************************************************************************/ ACPI_STATUS AcpiDbDisplayObjects ( char *ObjTypeArg, char *DisplayCountArg) { ACPI_WALK_INFO Info; ACPI_OBJECT_TYPE Type; ACPI_OBJECT_INFO *ObjectInfo; UINT32 i; UINT32 TotalObjects = 0; /* No argument means display summary/count of all object types */ if (!ObjTypeArg) { ObjectInfo = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_OBJECT_INFO)); if (!ObjectInfo) return (AE_NO_MEMORY); /* Walk the namespace from the root */ (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbWalkForObjectCounts, NULL, (void *) ObjectInfo, NULL); AcpiOsPrintf ("\nSummary of namespace objects:\n\n"); for (i = 0; i < ACPI_TOTAL_TYPES; i++) { AcpiOsPrintf ("%8u %s\n", ObjectInfo->Types[i], AcpiUtGetTypeName (i)); TotalObjects += ObjectInfo->Types[i]; } AcpiOsPrintf ("\n%8u Total namespace objects\n\n", TotalObjects); ACPI_FREE (ObjectInfo); return (AE_OK); } /* Get the object type */ Type = AcpiDbMatchArgument (ObjTypeArg, AcpiDbObjectTypes); if (Type == ACPI_TYPE_NOT_FOUND) { AcpiOsPrintf ("Invalid or unsupported argument\n"); return (AE_OK); } AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); AcpiOsPrintf ( "Objects of type [%s] defined in the current ACPI Namespace:\n", AcpiUtGetTypeName (Type)); AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT); Info.Count = 0; Info.OwnerId = ACPI_OWNER_ID_MAX; Info.DebugLevel = ACPI_UINT32_MAX; Info.DisplayType = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT; /* Walk the namespace from the root */ (void) AcpiWalkNamespace (Type, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbWalkForSpecificObjects, NULL, (void *) &Info, NULL); AcpiOsPrintf ( "\nFound %u objects of type [%s] in the current ACPI Namespace\n", Info.Count, AcpiUtGetTypeName (Type)); AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbDisplayFields * * PARAMETERS: ObjTypeArg - Type of object to display * DisplayCountArg - Max depth to display * * RETURN: None * * DESCRIPTION: Display objects in the namespace of the requested type * ******************************************************************************/ ACPI_STATUS AcpiDbDisplayFields ( UINT32 AddressSpaceId) { ACPI_REGION_WALK_INFO Info; Info.Count = 0; Info.OwnerId = ACPI_OWNER_ID_MAX; Info.DebugLevel = ACPI_UINT32_MAX; Info.DisplayType = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT; Info.AddressSpaceId = AddressSpaceId; /* Walk the namespace from the root */ (void) AcpiWalkNamespace (ACPI_TYPE_LOCAL_REGION_FIELD, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbWalkForFields, NULL, (void *) &Info, NULL); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbIntegrityWalk * * PARAMETERS: Callback from WalkNamespace * * RETURN: Status * * DESCRIPTION: Examine one NS node for valid values. * ******************************************************************************/ static ACPI_STATUS AcpiDbIntegrityWalk ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_INTEGRITY_INFO *Info = (ACPI_INTEGRITY_INFO *) Context; ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; ACPI_OPERAND_OBJECT *Object; BOOLEAN Alias = TRUE; Info->Nodes++; /* Verify the NS node, and dereference aliases */ while (Alias) { if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) { AcpiOsPrintf ( "Invalid Descriptor Type for Node %p [%s] - " "is %2.2X should be %2.2X\n", Node, AcpiUtGetDescriptorName (Node), ACPI_GET_DESCRIPTOR_TYPE (Node), ACPI_DESC_TYPE_NAMED); return (AE_OK); } if ((Node->Type == ACPI_TYPE_LOCAL_ALIAS) || (Node->Type == ACPI_TYPE_LOCAL_METHOD_ALIAS)) { Node = (ACPI_NAMESPACE_NODE *) Node->Object; } else { Alias = FALSE; } } if (Node->Type > ACPI_TYPE_LOCAL_MAX) { AcpiOsPrintf ("Invalid Object Type for Node %p, Type = %X\n", Node, Node->Type); return (AE_OK); } if (!AcpiUtValidNameseg (Node->Name.Ascii)) { AcpiOsPrintf ("Invalid AcpiName for Node %p\n", Node); return (AE_OK); } Object = AcpiNsGetAttachedObject (Node); if (Object) { Info->Objects++; if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND) { AcpiOsPrintf ("Invalid Descriptor Type for Object %p [%s]\n", Object, AcpiUtGetDescriptorName (Object)); } } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbCheckIntegrity * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Check entire namespace for data structure integrity * ******************************************************************************/ void AcpiDbCheckIntegrity ( void) { ACPI_INTEGRITY_INFO Info = {0,0}; /* Search all nodes in namespace */ (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbIntegrityWalk, NULL, (void *) &Info, NULL); AcpiOsPrintf ("Verified %u namespace nodes with %u Objects\n", Info.Nodes, Info.Objects); } /******************************************************************************* * * FUNCTION: AcpiDbWalkForReferences * * PARAMETERS: Callback from WalkNamespace * * RETURN: Status * * DESCRIPTION: Check if this namespace object refers to the target object * that is passed in as the context value. * * Note: Currently doesn't check subobjects within the Node's object * ******************************************************************************/ static ACPI_STATUS AcpiDbWalkForReferences ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_OPERAND_OBJECT *ObjDesc = (ACPI_OPERAND_OBJECT *) Context; ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; /* Check for match against the namespace node itself */ if (Node == (void *) ObjDesc) { AcpiOsPrintf ("Object is a Node [%4.4s]\n", AcpiUtGetNodeName (Node)); } /* Check for match against the object attached to the node */ if (AcpiNsGetAttachedObject (Node) == ObjDesc) { AcpiOsPrintf ("Reference at Node->Object %p [%4.4s]\n", Node, AcpiUtGetNodeName (Node)); } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbFindReferences * * PARAMETERS: ObjectArg - String with hex value of the object * * RETURN: None * * DESCRIPTION: Search namespace for all references to the input object * ******************************************************************************/ void AcpiDbFindReferences ( char *ObjectArg) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_SIZE Address; /* Convert string to object pointer */ Address = strtoul (ObjectArg, NULL, 16); ObjDesc = ACPI_TO_POINTER (Address); /* Search all nodes in namespace */ (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbWalkForReferences, NULL, (void *) ObjDesc, NULL); } /******************************************************************************* * * FUNCTION: AcpiDbBusWalk * * PARAMETERS: Callback from WalkNamespace * * RETURN: Status * * DESCRIPTION: Display info about device objects that have a corresponding * _PRT method. * ******************************************************************************/ static ACPI_STATUS AcpiDbBusWalk ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; ACPI_STATUS Status; ACPI_BUFFER Buffer; ACPI_NAMESPACE_NODE *TempNode; ACPI_DEVICE_INFO *Info; UINT32 i; if ((Node->Type != ACPI_TYPE_DEVICE) && (Node->Type != ACPI_TYPE_PROCESSOR)) { return (AE_OK); } /* Exit if there is no _PRT under this device */ Status = AcpiGetHandle (Node, METHOD_NAME__PRT, ACPI_CAST_PTR (ACPI_HANDLE, &TempNode)); if (ACPI_FAILURE (Status)) { return (AE_OK); } /* Get the full path to this device object */ Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiNsHandleToPathname (ObjHandle, &Buffer, TRUE); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle); return (AE_OK); } Status = AcpiGetObjectInfo (ObjHandle, &Info); if (ACPI_FAILURE (Status)) { return (AE_OK); } /* Display the full path */ AcpiOsPrintf ("%-32s Type %X", (char *) Buffer.Pointer, Node->Type); ACPI_FREE (Buffer.Pointer); if (Info->Flags & ACPI_PCI_ROOT_BRIDGE) { AcpiOsPrintf (" - Is PCI Root Bridge"); } AcpiOsPrintf ("\n"); /* _PRT info */ AcpiOsPrintf ("_PRT: %p\n", TempNode); /* Dump _ADR, _HID, _UID, _CID */ if (Info->Valid & ACPI_VALID_ADR) { AcpiOsPrintf ("_ADR: %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Info->Address)); } else { AcpiOsPrintf ("_ADR: \n"); } if (Info->Valid & ACPI_VALID_HID) { AcpiOsPrintf ("_HID: %s\n", Info->HardwareId.String); } else { AcpiOsPrintf ("_HID: \n"); } if (Info->Valid & ACPI_VALID_UID) { AcpiOsPrintf ("_UID: %s\n", Info->UniqueId.String); } else { AcpiOsPrintf ("_UID: \n"); } if (Info->Valid & ACPI_VALID_CID) { for (i = 0; i < Info->CompatibleIdList.Count; i++) { AcpiOsPrintf ("_CID: %s\n", Info->CompatibleIdList.Ids[i].String); } } else { AcpiOsPrintf ("_CID: \n"); } ACPI_FREE (Info); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbGetBusInfo * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display info about system buses. * ******************************************************************************/ void AcpiDbGetBusInfo ( void) { /* Search all nodes in namespace */ (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbBusWalk, NULL, NULL, NULL); } src/acpica/source/components/debugger/dbobject.c000066400000000000000000000525561465205512700223020ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dbobject - ACPI object decode and display * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acdebug.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbobject") /* Local prototypes */ static void AcpiDbDecodeNode ( ACPI_NAMESPACE_NODE *Node); /******************************************************************************* * * FUNCTION: AcpiDbDumpMethodInfo * * PARAMETERS: Status - Method execution status * WalkState - Current state of the parse tree walk * * RETURN: None * * DESCRIPTION: Called when a method has been aborted because of an error. * Dumps the method execution stack, and the method locals/args, * and disassembles the AML opcode that failed. * ******************************************************************************/ void AcpiDbDumpMethodInfo ( ACPI_STATUS Status, ACPI_WALK_STATE *WalkState) { ACPI_THREAD_STATE *Thread; ACPI_NAMESPACE_NODE *Node; Node = WalkState->MethodNode; /* There are no locals or arguments for the module-level code case */ if (Node == AcpiGbl_RootNode) { return; } /* Ignore control codes, they are not errors */ if (ACPI_CNTL_EXCEPTION (Status)) { return; } /* We may be executing a deferred opcode */ if (WalkState->DeferredNode) { AcpiOsPrintf ("Executing subtree for Buffer/Package/Region\n"); return; } /* * If there is no Thread, we are not actually executing a method. * This can happen when the iASL compiler calls the interpreter * to perform constant folding. */ Thread = WalkState->Thread; if (!Thread) { return; } /* Display the method locals and arguments */ AcpiOsPrintf ("\n"); AcpiDbDecodeLocals (WalkState); AcpiOsPrintf ("\n"); AcpiDbDecodeArguments (WalkState); AcpiOsPrintf ("\n"); } /******************************************************************************* * * FUNCTION: AcpiDbDecodeInternalObject * * PARAMETERS: ObjDesc - Object to be displayed * * RETURN: None * * DESCRIPTION: Short display of an internal object. Numbers/Strings/Buffers. * ******************************************************************************/ void AcpiDbDecodeInternalObject ( ACPI_OPERAND_OBJECT *ObjDesc) { UINT32 i; if (!ObjDesc) { AcpiOsPrintf (" Uninitialized"); return; } if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) { AcpiOsPrintf (" %p [%s]", ObjDesc, AcpiUtGetDescriptorName (ObjDesc)); return; } AcpiOsPrintf (" %s", AcpiUtGetObjectTypeName (ObjDesc)); switch (ObjDesc->Common.Type) { case ACPI_TYPE_INTEGER: AcpiOsPrintf (" %8.8X%8.8X", ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); break; case ACPI_TYPE_STRING: AcpiOsPrintf ("(%u) \"%.60s", ObjDesc->String.Length, ObjDesc->String.Pointer); if (ObjDesc->String.Length > 60) { AcpiOsPrintf ("..."); } else { AcpiOsPrintf ("\""); } break; case ACPI_TYPE_BUFFER: AcpiOsPrintf ("(%u)", ObjDesc->Buffer.Length); for (i = 0; (i < 8) && (i < ObjDesc->Buffer.Length); i++) { AcpiOsPrintf (" %2.2X", ObjDesc->Buffer.Pointer[i]); } break; default: AcpiOsPrintf (" %p", ObjDesc); break; } } /******************************************************************************* * * FUNCTION: AcpiDbDecodeNode * * PARAMETERS: Node - Object to be displayed * * RETURN: None * * DESCRIPTION: Short display of a namespace node * ******************************************************************************/ static void AcpiDbDecodeNode ( ACPI_NAMESPACE_NODE *Node) { AcpiOsPrintf (" Name %4.4s", AcpiUtGetNodeName (Node)); if (Node->Flags & ANOBJ_METHOD_ARG) { AcpiOsPrintf (" [Method Arg]"); } if (Node->Flags & ANOBJ_METHOD_LOCAL) { AcpiOsPrintf (" [Method Local]"); } switch (Node->Type) { /* These types have no attached object */ case ACPI_TYPE_DEVICE: AcpiOsPrintf (" Device"); break; case ACPI_TYPE_THERMAL: AcpiOsPrintf (" Thermal Zone"); break; default: AcpiDbDecodeInternalObject (AcpiNsGetAttachedObject (Node)); break; } } /******************************************************************************* * * FUNCTION: AcpiDbDisplayInternalObject * * PARAMETERS: ObjDesc - Object to be displayed * WalkState - Current walk state * * RETURN: None * * DESCRIPTION: Short display of an internal object * ******************************************************************************/ void AcpiDbDisplayInternalObject ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState) { UINT8 Type; AcpiOsPrintf ("%p ", ObjDesc); if (!ObjDesc) { AcpiOsPrintf ("\n"); return; } /* Decode the object type */ switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) { case ACPI_DESC_TYPE_PARSER: AcpiOsPrintf (" "); break; case ACPI_DESC_TYPE_NAMED: AcpiDbDecodeNode ((ACPI_NAMESPACE_NODE *) ObjDesc); break; case ACPI_DESC_TYPE_OPERAND: Type = ObjDesc->Common.Type; if (Type > ACPI_TYPE_LOCAL_MAX) { AcpiOsPrintf (" Type %X [Invalid Type]", (UINT32) Type); return; } /* Decode the ACPI object type */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_LOCAL_REFERENCE: AcpiOsPrintf ("[%s] ", AcpiUtGetReferenceName (ObjDesc)); /* Decode the reference */ switch (ObjDesc->Reference.Class) { case ACPI_REFCLASS_LOCAL: AcpiOsPrintf ("%X ", ObjDesc->Reference.Value); if (WalkState) { ObjDesc = WalkState->LocalVariables [ObjDesc->Reference.Value].Object; AcpiOsPrintf ("%p", ObjDesc); AcpiDbDecodeInternalObject (ObjDesc); } break; case ACPI_REFCLASS_ARG: AcpiOsPrintf ("%X ", ObjDesc->Reference.Value); if (WalkState) { ObjDesc = WalkState->Arguments [ObjDesc->Reference.Value].Object; AcpiOsPrintf ("%p", ObjDesc); AcpiDbDecodeInternalObject (ObjDesc); } break; case ACPI_REFCLASS_INDEX: switch (ObjDesc->Reference.TargetType) { case ACPI_TYPE_BUFFER_FIELD: AcpiOsPrintf ("%p", ObjDesc->Reference.Object); AcpiDbDecodeInternalObject (ObjDesc->Reference.Object); break; case ACPI_TYPE_PACKAGE: AcpiOsPrintf ("%p", ObjDesc->Reference.Where); if (!ObjDesc->Reference.Where) { AcpiOsPrintf (" Uninitialized WHERE pointer"); } else { AcpiDbDecodeInternalObject ( *(ObjDesc->Reference.Where)); } break; default: AcpiOsPrintf ("Unknown index target type"); break; } break; case ACPI_REFCLASS_REFOF: if (!ObjDesc->Reference.Object) { AcpiOsPrintf ( "Uninitialized reference subobject pointer"); break; } /* Reference can be to a Node or an Operand object */ switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc->Reference.Object)) { case ACPI_DESC_TYPE_NAMED: AcpiDbDecodeNode (ObjDesc->Reference.Object); break; case ACPI_DESC_TYPE_OPERAND: AcpiDbDecodeInternalObject (ObjDesc->Reference.Object); break; default: break; } break; case ACPI_REFCLASS_NAME: AcpiDbDecodeNode (ObjDesc->Reference.Node); break; case ACPI_REFCLASS_DEBUG: case ACPI_REFCLASS_TABLE: AcpiOsPrintf ("\n"); break; default: /* Unknown reference class */ AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class); break; } break; default: AcpiOsPrintf (" "); AcpiDbDecodeInternalObject (ObjDesc); break; } break; default: AcpiOsPrintf (" [%s]", AcpiUtGetDescriptorName (ObjDesc)); break; } AcpiOsPrintf ("\n"); } /******************************************************************************* * * FUNCTION: AcpiDbDecodeLocals * * PARAMETERS: WalkState - State for current method * * RETURN: None * * DESCRIPTION: Display all locals for the currently running control method * ******************************************************************************/ void AcpiDbDecodeLocals ( ACPI_WALK_STATE *WalkState) { UINT32 i; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_NAMESPACE_NODE *Node; BOOLEAN DisplayLocals = FALSE; Node = WalkState->MethodNode; /* There are no locals for the module-level code case */ if (Node == AcpiGbl_RootNode) { return; } if (!Node) { AcpiOsPrintf ( "No method node (Executing subtree for buffer or opregion)\n"); return; } if (Node->Type != ACPI_TYPE_METHOD) { AcpiOsPrintf ("Executing subtree for Buffer/Package/Region\n"); return; } /* Are any locals actually set? */ for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++) { ObjDesc = WalkState->LocalVariables[i].Object; if (ObjDesc) { DisplayLocals = TRUE; break; } } /* If any are set, only display the ones that are set */ if (DisplayLocals) { AcpiOsPrintf ("\nInitialized Local Variables for Method [%4.4s]:\n", AcpiUtGetNodeName (Node)); for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++) { ObjDesc = WalkState->LocalVariables[i].Object; if (ObjDesc) { AcpiOsPrintf (" Local%X: ", i); AcpiDbDisplayInternalObject (ObjDesc, WalkState); } } } else { AcpiOsPrintf ( "No Local Variables are initialized for Method [%4.4s]\n", AcpiUtGetNodeName (Node)); } } /******************************************************************************* * * FUNCTION: AcpiDbDecodeArguments * * PARAMETERS: WalkState - State for current method * * RETURN: None * * DESCRIPTION: Display all arguments for the currently running control method * ******************************************************************************/ void AcpiDbDecodeArguments ( ACPI_WALK_STATE *WalkState) { UINT32 i; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_NAMESPACE_NODE *Node; BOOLEAN DisplayArgs = FALSE; Node = WalkState->MethodNode; /* There are no arguments for the module-level code case */ if (Node == AcpiGbl_RootNode) { return; } if (!Node) { AcpiOsPrintf ( "No method node (Executing subtree for buffer or opregion)\n"); return; } if (Node->Type != ACPI_TYPE_METHOD) { AcpiOsPrintf ("Executing subtree for Buffer/Package/Region\n"); return; } /* Are any arguments actually set? */ for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++) { ObjDesc = WalkState->Arguments[i].Object; if (ObjDesc) { DisplayArgs = TRUE; break; } } /* If any are set, only display the ones that are set */ if (DisplayArgs) { AcpiOsPrintf ( "Initialized Arguments for Method [%4.4s]: " "(%X arguments defined for method invocation)\n", AcpiUtGetNodeName (Node), Node->Object->Method.ParamCount); for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++) { ObjDesc = WalkState->Arguments[i].Object; if (ObjDesc) { AcpiOsPrintf (" Arg%u: ", i); AcpiDbDisplayInternalObject (ObjDesc, WalkState); } } } else { AcpiOsPrintf ( "No Arguments are initialized for method [%4.4s]\n", AcpiUtGetNodeName (Node)); } } src/acpica/source/components/debugger/dbstats.c000066400000000000000000000560761465205512700221730ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dbstats - Generation and display of ACPI table statistics * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdebug.h" #include "acnamesp.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbstats") /* Local prototypes */ static void AcpiDbCountNamespaceObjects ( void); static void AcpiDbEnumerateObject ( ACPI_OPERAND_OBJECT *ObjDesc); static ACPI_STATUS AcpiDbClassifyOneObject ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); #if defined ACPI_DBG_TRACK_ALLOCATIONS || defined ACPI_USE_LOCAL_CACHE static void AcpiDbListInfo ( ACPI_MEMORY_LIST *List); #endif /* * Statistics subcommands */ static ACPI_DB_ARGUMENT_INFO AcpiDbStatTypes [] = { {"ALLOCATIONS"}, {"OBJECTS"}, {"MEMORY"}, {"MISC"}, {"TABLES"}, {"SIZES"}, {"STACK"}, {NULL} /* Must be null terminated */ }; #define CMD_STAT_ALLOCATIONS 0 #define CMD_STAT_OBJECTS 1 #define CMD_STAT_MEMORY 2 #define CMD_STAT_MISC 3 #define CMD_STAT_TABLES 4 #define CMD_STAT_SIZES 5 #define CMD_STAT_STACK 6 #if defined ACPI_DBG_TRACK_ALLOCATIONS || defined ACPI_USE_LOCAL_CACHE /******************************************************************************* * * FUNCTION: AcpiDbListInfo * * PARAMETERS: List - Memory list/cache to be displayed * * RETURN: None * * DESCRIPTION: Display information about the input memory list or cache. * ******************************************************************************/ static void AcpiDbListInfo ( ACPI_MEMORY_LIST *List) { #ifdef ACPI_DBG_TRACK_ALLOCATIONS UINT32 Outstanding; #endif AcpiOsPrintf ("\n%s\n", List->ListName); /* MaxDepth > 0 indicates a cache object */ if (List->MaxDepth > 0) { AcpiOsPrintf ( " Cache: [Depth MaxD Avail Size] " "%8.2X %8.2X %8.2X %8.2X\n", List->CurrentDepth, List->MaxDepth, List->MaxDepth - List->CurrentDepth, (List->CurrentDepth * List->ObjectSize)); } #ifdef ACPI_DBG_TRACK_ALLOCATIONS if (List->MaxDepth > 0) { AcpiOsPrintf ( " Cache: [Requests Hits Misses ObjSize] " "%8.2X %8.2X %8.2X %8.2X\n", List->Requests, List->Hits, List->Requests - List->Hits, List->ObjectSize); } Outstanding = AcpiDbGetCacheInfo (List); if (List->ObjectSize) { AcpiOsPrintf ( " Mem: [Alloc Free Max CurSize Outstanding] " "%8.2X %8.2X %8.2X %8.2X %8.2X\n", List->TotalAllocated, List->TotalFreed, List->MaxOccupied, Outstanding * List->ObjectSize, Outstanding); } else { AcpiOsPrintf ( " Mem: [Alloc Free Max CurSize Outstanding Total] " "%8.2X %8.2X %8.2X %8.2X %8.2X %8.2X\n", List->TotalAllocated, List->TotalFreed, List->MaxOccupied, List->CurrentTotalSize, Outstanding, List->TotalSize); } #endif } #endif /******************************************************************************* * * FUNCTION: AcpiDbEnumerateObject * * PARAMETERS: ObjDesc - Object to be counted * * RETURN: None * * DESCRIPTION: Add this object to the global counts, by object type. * Limited recursion handles subobjects and packages, and this * is probably acceptable within the AML debugger only. * ******************************************************************************/ static void AcpiDbEnumerateObject ( ACPI_OPERAND_OBJECT *ObjDesc) { UINT32 i; if (!ObjDesc) { return; } /* Enumerate this object first */ AcpiGbl_NumObjects++; if (ObjDesc->Common.Type > ACPI_TYPE_NS_NODE_MAX) { AcpiGbl_ObjTypeCountMisc++; } else { AcpiGbl_ObjTypeCount [ObjDesc->Common.Type]++; } /* Count the sub-objects */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_PACKAGE: for (i = 0; i < ObjDesc->Package.Count; i++) { AcpiDbEnumerateObject (ObjDesc->Package.Elements[i]); } break; case ACPI_TYPE_DEVICE: AcpiDbEnumerateObject (ObjDesc->Device.NotifyList[0]); AcpiDbEnumerateObject (ObjDesc->Device.NotifyList[1]); AcpiDbEnumerateObject (ObjDesc->Device.Handler); break; case ACPI_TYPE_BUFFER_FIELD: if (AcpiNsGetSecondaryObject (ObjDesc)) { AcpiGbl_ObjTypeCount [ACPI_TYPE_BUFFER_FIELD]++; } break; case ACPI_TYPE_REGION: AcpiGbl_ObjTypeCount [ACPI_TYPE_LOCAL_REGION_FIELD ]++; AcpiDbEnumerateObject (ObjDesc->Region.Handler); break; case ACPI_TYPE_POWER: AcpiDbEnumerateObject (ObjDesc->PowerResource.NotifyList[0]); AcpiDbEnumerateObject (ObjDesc->PowerResource.NotifyList[1]); break; case ACPI_TYPE_PROCESSOR: AcpiDbEnumerateObject (ObjDesc->Processor.NotifyList[0]); AcpiDbEnumerateObject (ObjDesc->Processor.NotifyList[1]); AcpiDbEnumerateObject (ObjDesc->Processor.Handler); break; case ACPI_TYPE_THERMAL: AcpiDbEnumerateObject (ObjDesc->ThermalZone.NotifyList[0]); AcpiDbEnumerateObject (ObjDesc->ThermalZone.NotifyList[1]); AcpiDbEnumerateObject (ObjDesc->ThermalZone.Handler); break; default: break; } } /******************************************************************************* * * FUNCTION: AcpiDbClassifyOneObject * * PARAMETERS: Callback for WalkNamespace * * RETURN: Status * * DESCRIPTION: Enumerate both the object descriptor (including subobjects) and * the parent namespace node. * ******************************************************************************/ static ACPI_STATUS AcpiDbClassifyOneObject ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *Node; ACPI_OPERAND_OBJECT *ObjDesc; UINT32 Type; AcpiGbl_NumNodes++; Node = (ACPI_NAMESPACE_NODE *) ObjHandle; ObjDesc = AcpiNsGetAttachedObject (Node); AcpiDbEnumerateObject (ObjDesc); Type = Node->Type; if (Type > ACPI_TYPE_NS_NODE_MAX) { AcpiGbl_NodeTypeCountMisc++; } else { AcpiGbl_NodeTypeCount [Type]++; } return (AE_OK); #ifdef ACPI_FUTURE_IMPLEMENTATION /* TBD: These need to be counted during the initial parsing phase */ if (AcpiPsIsNamedOp (Op->Opcode)) { NumNodes++; } if (IsMethod) { NumMethodElements++; } NumGrammarElements++; Op = AcpiPsGetDepthNext (Root, Op); SizeOfParseTree = (NumGrammarElements - NumMethodElements) * (UINT32) sizeof (ACPI_PARSE_OBJECT); SizeOfMethodTrees = NumMethodElements * (UINT32) sizeof (ACPI_PARSE_OBJECT); SizeOfNodeEntries = NumNodes * (UINT32) sizeof (ACPI_NAMESPACE_NODE); SizeOfAcpiObjects = NumNodes * (UINT32) sizeof (ACPI_OPERAND_OBJECT); #endif } /******************************************************************************* * * FUNCTION: AcpiDbCountNamespaceObjects * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Count and classify the entire namespace, including all * namespace nodes and attached objects. * ******************************************************************************/ static void AcpiDbCountNamespaceObjects ( void) { UINT32 i; AcpiGbl_NumNodes = 0; AcpiGbl_NumObjects = 0; AcpiGbl_ObjTypeCountMisc = 0; for (i = 0; i < (ACPI_TYPE_NS_NODE_MAX -1); i++) { AcpiGbl_ObjTypeCount [i] = 0; AcpiGbl_NodeTypeCount [i] = 0; } (void) AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, FALSE, AcpiDbClassifyOneObject, NULL, NULL, NULL); } /******************************************************************************* * * FUNCTION: AcpiDbDisplayStatistics * * PARAMETERS: TypeArg - Subcommand * * RETURN: Status * * DESCRIPTION: Display various statistics * ******************************************************************************/ ACPI_STATUS AcpiDbDisplayStatistics ( char *TypeArg) { UINT32 i; UINT32 Temp; AcpiUtStrupr (TypeArg); Temp = AcpiDbMatchArgument (TypeArg, AcpiDbStatTypes); if (Temp == ACPI_TYPE_NOT_FOUND) { AcpiOsPrintf ("Invalid or unsupported argument\n"); return (AE_OK); } switch (Temp) { case CMD_STAT_ALLOCATIONS: #ifdef ACPI_DBG_TRACK_ALLOCATIONS AcpiUtDumpAllocationInfo (); #endif break; case CMD_STAT_TABLES: AcpiOsPrintf ("ACPI Table Information (not implemented):\n\n"); break; case CMD_STAT_OBJECTS: AcpiDbCountNamespaceObjects (); AcpiOsPrintf ("\nObjects defined in the current namespace:\n\n"); AcpiOsPrintf ("%16.16s %10.10s %10.10s\n", "ACPI_TYPE", "NODES", "OBJECTS"); for (i = 0; i < ACPI_TYPE_NS_NODE_MAX; i++) { AcpiOsPrintf ("%16.16s %10u %10u\n", AcpiUtGetTypeName (i), AcpiGbl_NodeTypeCount [i], AcpiGbl_ObjTypeCount [i]); } AcpiOsPrintf ("%16.16s %10u %10u\n", "Misc/Unknown", AcpiGbl_NodeTypeCountMisc, AcpiGbl_ObjTypeCountMisc); AcpiOsPrintf ("%16.16s %10u %10u\n", "TOTALS:", AcpiGbl_NumNodes, AcpiGbl_NumObjects); break; case CMD_STAT_MEMORY: #ifdef ACPI_DBG_TRACK_ALLOCATIONS AcpiOsPrintf ("\n----Object Statistics (all in hex)---------\n"); AcpiDbListInfo (AcpiGbl_GlobalList); AcpiDbListInfo (AcpiGbl_NsNodeList); #endif #ifdef ACPI_USE_LOCAL_CACHE AcpiOsPrintf ("\n----Cache Statistics (all in hex)---------\n"); AcpiDbListInfo (AcpiGbl_OperandCache); AcpiDbListInfo (AcpiGbl_PsNodeCache); AcpiDbListInfo (AcpiGbl_PsNodeExtCache); AcpiDbListInfo (AcpiGbl_StateCache); #endif break; case CMD_STAT_MISC: AcpiOsPrintf ("\nMiscellaneous Statistics:\n\n"); AcpiOsPrintf ("%-28s: %7u\n", "Calls to AcpiPsFind", AcpiGbl_PsFindCount); AcpiOsPrintf ("%-28s: %7u\n", "Calls to AcpiNsLookup", AcpiGbl_NsLookupCount); AcpiOsPrintf ("\nMutex usage:\n\n"); for (i = 0; i < ACPI_NUM_MUTEX; i++) { AcpiOsPrintf ("%-28s: %7u\n", AcpiUtGetMutexName (i), AcpiGbl_MutexInfo[i].UseCount); } break; case CMD_STAT_SIZES: AcpiOsPrintf ("\nInternal object sizes:\n\n"); AcpiOsPrintf ("Common %3d\n", (UINT32) sizeof (ACPI_OBJECT_COMMON)); AcpiOsPrintf ("Number %3d\n", (UINT32) sizeof (ACPI_OBJECT_INTEGER)); AcpiOsPrintf ("String %3d\n", (UINT32) sizeof (ACPI_OBJECT_STRING)); AcpiOsPrintf ("Buffer %3d\n", (UINT32) sizeof (ACPI_OBJECT_BUFFER)); AcpiOsPrintf ("Package %3d\n", (UINT32) sizeof (ACPI_OBJECT_PACKAGE)); AcpiOsPrintf ("BufferField %3d\n", (UINT32) sizeof (ACPI_OBJECT_BUFFER_FIELD)); AcpiOsPrintf ("Device %3d\n", (UINT32) sizeof (ACPI_OBJECT_DEVICE)); AcpiOsPrintf ("Event %3d\n", (UINT32) sizeof (ACPI_OBJECT_EVENT)); AcpiOsPrintf ("Method %3d\n", (UINT32) sizeof (ACPI_OBJECT_METHOD)); AcpiOsPrintf ("Mutex %3d\n", (UINT32) sizeof (ACPI_OBJECT_MUTEX)); AcpiOsPrintf ("Region %3d\n", (UINT32) sizeof (ACPI_OBJECT_REGION)); AcpiOsPrintf ("PowerResource %3d\n", (UINT32) sizeof (ACPI_OBJECT_POWER_RESOURCE)); AcpiOsPrintf ("Processor %3d\n", (UINT32) sizeof (ACPI_OBJECT_PROCESSOR)); AcpiOsPrintf ("ThermalZone %3d\n", (UINT32) sizeof (ACPI_OBJECT_THERMAL_ZONE)); AcpiOsPrintf ("RegionField %3d\n", (UINT32) sizeof (ACPI_OBJECT_REGION_FIELD)); AcpiOsPrintf ("BankField %3d\n", (UINT32) sizeof (ACPI_OBJECT_BANK_FIELD)); AcpiOsPrintf ("IndexField %3d\n", (UINT32) sizeof (ACPI_OBJECT_INDEX_FIELD)); AcpiOsPrintf ("Reference %3d\n", (UINT32) sizeof (ACPI_OBJECT_REFERENCE)); AcpiOsPrintf ("Notify %3d\n", (UINT32) sizeof (ACPI_OBJECT_NOTIFY_HANDLER)); AcpiOsPrintf ("AddressSpace %3d\n", (UINT32) sizeof (ACPI_OBJECT_ADDR_HANDLER)); AcpiOsPrintf ("Extra %3d\n", (UINT32) sizeof (ACPI_OBJECT_EXTRA)); AcpiOsPrintf ("Data %3d\n", (UINT32) sizeof (ACPI_OBJECT_DATA)); AcpiOsPrintf ("\n"); AcpiOsPrintf ("ParseObject %3d\n", (UINT32) sizeof (ACPI_PARSE_OBJ_COMMON)); AcpiOsPrintf ("ParseObjectNamed %3d\n", (UINT32) sizeof (ACPI_PARSE_OBJ_NAMED)); AcpiOsPrintf ("ParseObjectAsl %3d\n", (UINT32) sizeof (ACPI_PARSE_OBJ_ASL)); AcpiOsPrintf ("OperandObject %3d\n", (UINT32) sizeof (ACPI_OPERAND_OBJECT)); AcpiOsPrintf ("NamespaceNode %3d\n", (UINT32) sizeof (ACPI_NAMESPACE_NODE)); AcpiOsPrintf ("AcpiObject %3d\n", (UINT32) sizeof (ACPI_OBJECT)); AcpiOsPrintf ("\n"); AcpiOsPrintf ("Generic State %3d\n", (UINT32) sizeof (ACPI_GENERIC_STATE)); AcpiOsPrintf ("Common State %3d\n", (UINT32) sizeof (ACPI_COMMON_STATE)); AcpiOsPrintf ("Control State %3d\n", (UINT32) sizeof (ACPI_CONTROL_STATE)); AcpiOsPrintf ("Update State %3d\n", (UINT32) sizeof (ACPI_UPDATE_STATE)); AcpiOsPrintf ("Scope State %3d\n", (UINT32) sizeof (ACPI_SCOPE_STATE)); AcpiOsPrintf ("Parse Scope %3d\n", (UINT32) sizeof (ACPI_PSCOPE_STATE)); AcpiOsPrintf ("Package State %3d\n", (UINT32) sizeof (ACPI_PKG_STATE)); AcpiOsPrintf ("Thread State %3d\n", (UINT32) sizeof (ACPI_THREAD_STATE)); AcpiOsPrintf ("Result Values %3d\n", (UINT32) sizeof (ACPI_RESULT_VALUES)); AcpiOsPrintf ("Notify Info %3d\n", (UINT32) sizeof (ACPI_NOTIFY_INFO)); break; case CMD_STAT_STACK: #if defined(ACPI_DEBUG_OUTPUT) Temp = (UINT32) ACPI_PTR_DIFF ( AcpiGbl_EntryStackPointer, AcpiGbl_LowestStackPointer); AcpiOsPrintf ("\nSubsystem Stack Usage:\n\n"); AcpiOsPrintf ("Entry Stack Pointer %p\n", AcpiGbl_EntryStackPointer); AcpiOsPrintf ("Lowest Stack Pointer %p\n", AcpiGbl_LowestStackPointer); AcpiOsPrintf ("Stack Use %X (%u)\n", Temp, Temp); AcpiOsPrintf ("Deepest Procedure Nesting %u\n", AcpiGbl_DeepestNesting); #endif break; default: break; } AcpiOsPrintf ("\n"); return (AE_OK); } src/acpica/source/components/debugger/dbtest.c000066400000000000000000001172131465205512700220030ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dbtest - Various debug-related tests * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdebug.h" #include "acnamesp.h" #include "acpredef.h" #include "acinterp.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbtest") /* Local prototypes */ static void AcpiDbTestAllObjects ( void); static ACPI_STATUS AcpiDbTestOneObject ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); static ACPI_STATUS AcpiDbTestIntegerType ( ACPI_NAMESPACE_NODE *Node, UINT32 BitLength); static ACPI_STATUS AcpiDbTestBufferType ( ACPI_NAMESPACE_NODE *Node, UINT32 BitLength); static ACPI_STATUS AcpiDbTestStringType ( ACPI_NAMESPACE_NODE *Node, UINT32 ByteLength); static ACPI_STATUS AcpiDbTestPackageType ( ACPI_NAMESPACE_NODE *Node); static ACPI_STATUS AcpiDbTestFieldUnitType ( ACPI_OPERAND_OBJECT *ObjDesc); static ACPI_STATUS AcpiDbReadFromObject ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_TYPE ExpectedType, ACPI_OBJECT **Value); static ACPI_STATUS AcpiDbWriteToObject ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT *Value); static void AcpiDbEvaluateAllPredefinedNames ( char *CountArg); static ACPI_STATUS AcpiDbEvaluateOnePredefinedName ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); /* * Test subcommands */ static ACPI_DB_ARGUMENT_INFO AcpiDbTestTypes [] = { {"OBJECTS"}, {"PREDEFINED"}, {NULL} /* Must be null terminated */ }; #define CMD_TEST_OBJECTS 0 #define CMD_TEST_PREDEFINED 1 #define BUFFER_FILL_VALUE 0xFF /* * Support for the special debugger read/write control methods. * These methods are installed into the current namespace and are * used to read and write the various namespace objects. The point * is to force the AML interpreter do all of the work. */ #define ACPI_DB_READ_METHOD "\\_T98" #define ACPI_DB_WRITE_METHOD "\\_T99" static ACPI_HANDLE ReadHandle = NULL; static ACPI_HANDLE WriteHandle = NULL; /* ASL Definitions of the debugger read/write control methods. AML below. */ #if 0 DefinitionBlock ("ssdt.aml", "SSDT", 2, "Intel", "DEBUG", 0x00000001) { Method (_T98, 1, NotSerialized) /* Read */ { Return (DeRefOf (Arg0)) } } DefinitionBlock ("ssdt2.aml", "SSDT", 2, "Intel", "DEBUG", 0x00000001) { Method (_T99, 2, NotSerialized) /* Write */ { Store (Arg1, Arg0) } } #endif static unsigned char ReadMethodCode[] = { 0x53,0x53,0x44,0x54,0x2E,0x00,0x00,0x00, /* 00000000 "SSDT...." */ 0x02,0xC9,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 "..Intel." */ 0x44,0x45,0x42,0x55,0x47,0x00,0x00,0x00, /* 00000010 "DEBUG..." */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x18,0x12,0x13,0x20,0x14,0x09,0x5F,0x54, /* 00000020 "... .._T" */ 0x39,0x38,0x01,0xA4,0x83,0x68 /* 00000028 "98...h" */ }; static unsigned char WriteMethodCode[] = { 0x53,0x53,0x44,0x54,0x2E,0x00,0x00,0x00, /* 00000000 "SSDT...." */ 0x02,0x15,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 "..Intel." */ 0x44,0x45,0x42,0x55,0x47,0x00,0x00,0x00, /* 00000010 "DEBUG..." */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 0x18,0x12,0x13,0x20,0x14,0x09,0x5F,0x54, /* 00000020 "... .._T" */ 0x39,0x39,0x02,0x70,0x69,0x68 /* 00000028 "99.pih" */ }; /******************************************************************************* * * FUNCTION: AcpiDbExecuteTest * * PARAMETERS: TypeArg - Subcommand * * RETURN: None * * DESCRIPTION: Execute various debug tests. * * Note: Code is prepared for future expansion of the TEST command. * ******************************************************************************/ void AcpiDbExecuteTest ( char *TypeArg) { UINT32 Temp; AcpiUtStrupr (TypeArg); Temp = AcpiDbMatchArgument (TypeArg, AcpiDbTestTypes); if (Temp == ACPI_TYPE_NOT_FOUND) { AcpiOsPrintf ("Invalid or unsupported argument\n"); return; } switch (Temp) { case CMD_TEST_OBJECTS: AcpiDbTestAllObjects (); break; case CMD_TEST_PREDEFINED: AcpiDbEvaluateAllPredefinedNames (NULL); break; default: break; } } /******************************************************************************* * * FUNCTION: AcpiDbTestAllObjects * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: This test implements the OBJECTS subcommand. It exercises the * namespace by reading/writing/comparing all data objects such * as integers, strings, buffers, fields, buffer fields, etc. * ******************************************************************************/ static void AcpiDbTestAllObjects ( void) { ACPI_STATUS Status; /* Install the debugger read-object control method if necessary */ if (!ReadHandle) { Status = AcpiInstallMethod (ReadMethodCode); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("%s, Could not install debugger read method\n", AcpiFormatException (Status)); return; } Status = AcpiGetHandle (NULL, ACPI_DB_READ_METHOD, &ReadHandle); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not obtain handle for debug method %s\n", ACPI_DB_READ_METHOD); return; } } /* Install the debugger write-object control method if necessary */ if (!WriteHandle) { Status = AcpiInstallMethod (WriteMethodCode); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("%s, Could not install debugger write method\n", AcpiFormatException (Status)); return; } Status = AcpiGetHandle (NULL, ACPI_DB_WRITE_METHOD, &WriteHandle); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not obtain handle for debug method %s\n", ACPI_DB_WRITE_METHOD); return; } } /* Walk the entire namespace, testing each supported named data object */ (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbTestOneObject, NULL, NULL, NULL); } /******************************************************************************* * * FUNCTION: AcpiDbTestOneObject * * PARAMETERS: ACPI_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Test one namespace object. Supported types are Integer, * String, Buffer, Package, BufferField, and FieldUnit. * All other object types are simply ignored. * ******************************************************************************/ static ACPI_STATUS AcpiDbTestOneObject ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *Node; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OBJECT_TYPE LocalType; UINT32 BitLength = 0; UINT32 ByteLength = 0; ACPI_STATUS Status = AE_OK; Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle); ObjDesc = Node->Object; /* * For the supported types, get the actual bit length or * byte length. Map the type to one of Integer/String/Buffer. */ switch (Node->Type) { case ACPI_TYPE_INTEGER: /* Integer width is either 32 or 64 */ LocalType = ACPI_TYPE_INTEGER; BitLength = AcpiGbl_IntegerBitWidth; break; case ACPI_TYPE_STRING: LocalType = ACPI_TYPE_STRING; ByteLength = ObjDesc->String.Length; break; case ACPI_TYPE_BUFFER: LocalType = ACPI_TYPE_BUFFER; ByteLength = ObjDesc->Buffer.Length; BitLength = ByteLength * 8; break; case ACPI_TYPE_PACKAGE: LocalType = ACPI_TYPE_PACKAGE; break; case ACPI_TYPE_FIELD_UNIT: case ACPI_TYPE_LOCAL_REGION_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD: case ACPI_TYPE_LOCAL_BANK_FIELD: LocalType = ACPI_TYPE_FIELD_UNIT; break; case ACPI_TYPE_BUFFER_FIELD: /* * The returned object will be a Buffer if the field length * is larger than the size of an Integer (32 or 64 bits * depending on the DSDT version). */ LocalType = ACPI_TYPE_INTEGER; if (ObjDesc) { BitLength = ObjDesc->CommonField.BitLength; ByteLength = ACPI_ROUND_BITS_UP_TO_BYTES (BitLength); if (BitLength > AcpiGbl_IntegerBitWidth) { LocalType = ACPI_TYPE_BUFFER; } } break; default: /* Ignore all non-data types - Methods, Devices, Scopes, etc. */ return (AE_OK); } /* Emit the common prefix: Type:Name */ AcpiOsPrintf ("%14s: %4.4s", AcpiUtGetTypeName (Node->Type), Node->Name.Ascii); if (!ObjDesc) { AcpiOsPrintf (" No attached sub-object, ignoring\n"); return (AE_OK); } /* At this point, we have resolved the object to one of the major types */ switch (LocalType) { case ACPI_TYPE_INTEGER: Status = AcpiDbTestIntegerType (Node, BitLength); break; case ACPI_TYPE_STRING: Status = AcpiDbTestStringType (Node, ByteLength); break; case ACPI_TYPE_BUFFER: Status = AcpiDbTestBufferType (Node, BitLength); break; case ACPI_TYPE_PACKAGE: Status = AcpiDbTestPackageType (Node); break; case ACPI_TYPE_FIELD_UNIT: Status = AcpiDbTestFieldUnitType (ObjDesc); break; default: AcpiOsPrintf (" Ignoring, type not implemented (%2.2X)", LocalType); break; } /* Exit on error, but don't abort the namespace walk */ if (ACPI_FAILURE (Status)) { Status = AE_OK; } AcpiOsPrintf ("\n"); return (Status); } /******************************************************************************* * * FUNCTION: AcpiDbTestIntegerType * * PARAMETERS: Node - Parent NS node for the object * BitLength - Actual length of the object. Used for * support of arbitrary length FieldUnit * and BufferField objects. * * RETURN: Status * * DESCRIPTION: Test read/write for an Integer-valued object. Performs a * write/read/compare of an arbitrary new value, then performs * a write/read/compare of the original value. * ******************************************************************************/ static ACPI_STATUS AcpiDbTestIntegerType ( ACPI_NAMESPACE_NODE *Node, UINT32 BitLength) { ACPI_OBJECT *Temp1 = NULL; ACPI_OBJECT *Temp2 = NULL; ACPI_OBJECT *Temp3 = NULL; ACPI_OBJECT WriteValue; UINT64 ValueToWrite; ACPI_STATUS Status; if (BitLength > 64) { AcpiOsPrintf (" Invalid length for an Integer: %u", BitLength); return (AE_OK); } /* Read the original value */ Status = AcpiDbReadFromObject (Node, ACPI_TYPE_INTEGER, &Temp1); if (ACPI_FAILURE (Status)) { return (Status); } AcpiOsPrintf (ACPI_DEBUG_LENGTH_FORMAT " %8.8X%8.8X", BitLength, ACPI_ROUND_BITS_UP_TO_BYTES (BitLength), ACPI_FORMAT_UINT64 (Temp1->Integer.Value)); ValueToWrite = ACPI_UINT64_MAX >> (64 - BitLength); if (Temp1->Integer.Value == ValueToWrite) { ValueToWrite = 0; } /* Write a new value */ WriteValue.Type = ACPI_TYPE_INTEGER; WriteValue.Integer.Value = ValueToWrite; Status = AcpiDbWriteToObject (Node, &WriteValue); if (ACPI_FAILURE (Status)) { goto Exit; } /* Ensure that we can read back the new value */ Status = AcpiDbReadFromObject (Node, ACPI_TYPE_INTEGER, &Temp2); if (ACPI_FAILURE (Status)) { goto Exit; } if (Temp2->Integer.Value != ValueToWrite) { AcpiOsPrintf (" MISMATCH 2: %8.8X%8.8X, expecting %8.8X%8.8X", ACPI_FORMAT_UINT64 (Temp2->Integer.Value), ACPI_FORMAT_UINT64 (ValueToWrite)); } /* Write back the original value */ WriteValue.Integer.Value = Temp1->Integer.Value; Status = AcpiDbWriteToObject (Node, &WriteValue); if (ACPI_FAILURE (Status)) { goto Exit; } /* Ensure that we can read back the original value */ Status = AcpiDbReadFromObject (Node, ACPI_TYPE_INTEGER, &Temp3); if (ACPI_FAILURE (Status)) { goto Exit; } if (Temp3->Integer.Value != Temp1->Integer.Value) { AcpiOsPrintf (" MISMATCH 3: %8.8X%8.8X, expecting %8.8X%8.8X", ACPI_FORMAT_UINT64 (Temp3->Integer.Value), ACPI_FORMAT_UINT64 (Temp1->Integer.Value)); } Exit: if (Temp1) {AcpiOsFree (Temp1);} if (Temp2) {AcpiOsFree (Temp2);} if (Temp3) {AcpiOsFree (Temp3);} return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDbTestBufferType * * PARAMETERS: Node - Parent NS node for the object * BitLength - Actual length of the object. * * RETURN: Status * * DESCRIPTION: Test read/write for an Buffer-valued object. Performs a * write/read/compare of an arbitrary new value, then performs * a write/read/compare of the original value. * ******************************************************************************/ static ACPI_STATUS AcpiDbTestBufferType ( ACPI_NAMESPACE_NODE *Node, UINT32 BitLength) { ACPI_OBJECT *Temp1 = NULL; ACPI_OBJECT *Temp2 = NULL; ACPI_OBJECT *Temp3 = NULL; UINT8 *Buffer; ACPI_OBJECT WriteValue; ACPI_STATUS Status; UINT32 ByteLength; UINT32 i; UINT8 ExtraBits; ByteLength = ACPI_ROUND_BITS_UP_TO_BYTES (BitLength); if (ByteLength == 0) { AcpiOsPrintf (" Ignoring zero length buffer"); return (AE_OK); } /* Allocate a local buffer */ Buffer = ACPI_ALLOCATE_ZEROED (ByteLength); if (!Buffer) { return (AE_NO_MEMORY); } /* Read the original value */ Status = AcpiDbReadFromObject (Node, ACPI_TYPE_BUFFER, &Temp1); if (ACPI_FAILURE (Status)) { goto Exit; } /* Emit a few bytes of the buffer */ AcpiOsPrintf (ACPI_DEBUG_LENGTH_FORMAT, BitLength, Temp1->Buffer.Length); for (i = 0; ((i < 8) && (i < ByteLength)); i++) { AcpiOsPrintf (" %2.2X", Temp1->Buffer.Pointer[i]); } AcpiOsPrintf ("... "); /* * Write a new value. * * Handle possible extra bits at the end of the buffer. Can * happen for FieldUnits larger than an integer, but the bit * count is not an integral number of bytes. Zero out the * unused bits. */ memset (Buffer, BUFFER_FILL_VALUE, ByteLength); ExtraBits = BitLength % 8; if (ExtraBits) { Buffer [ByteLength - 1] = ACPI_MASK_BITS_ABOVE (ExtraBits); } WriteValue.Type = ACPI_TYPE_BUFFER; WriteValue.Buffer.Length = ByteLength; WriteValue.Buffer.Pointer = Buffer; Status = AcpiDbWriteToObject (Node, &WriteValue); if (ACPI_FAILURE (Status)) { goto Exit; } /* Ensure that we can read back the new value */ Status = AcpiDbReadFromObject (Node, ACPI_TYPE_BUFFER, &Temp2); if (ACPI_FAILURE (Status)) { goto Exit; } if (memcmp (Temp2->Buffer.Pointer, Buffer, ByteLength)) { AcpiOsPrintf (" MISMATCH 2: New buffer value"); } /* Write back the original value */ WriteValue.Buffer.Length = ByteLength; WriteValue.Buffer.Pointer = Temp1->Buffer.Pointer; Status = AcpiDbWriteToObject (Node, &WriteValue); if (ACPI_FAILURE (Status)) { goto Exit; } /* Ensure that we can read back the original value */ Status = AcpiDbReadFromObject (Node, ACPI_TYPE_BUFFER, &Temp3); if (ACPI_FAILURE (Status)) { goto Exit; } if (memcmp (Temp1->Buffer.Pointer, Temp3->Buffer.Pointer, ByteLength)) { AcpiOsPrintf (" MISMATCH 3: While restoring original buffer"); } Exit: ACPI_FREE (Buffer); if (Temp1) {AcpiOsFree (Temp1);} if (Temp2) {AcpiOsFree (Temp2);} if (Temp3) {AcpiOsFree (Temp3);} return (Status); } /******************************************************************************* * * FUNCTION: AcpiDbTestStringType * * PARAMETERS: Node - Parent NS node for the object * ByteLength - Actual length of the object. * * RETURN: Status * * DESCRIPTION: Test read/write for an String-valued object. Performs a * write/read/compare of an arbitrary new value, then performs * a write/read/compare of the original value. * ******************************************************************************/ static ACPI_STATUS AcpiDbTestStringType ( ACPI_NAMESPACE_NODE *Node, UINT32 ByteLength) { ACPI_OBJECT *Temp1 = NULL; ACPI_OBJECT *Temp2 = NULL; ACPI_OBJECT *Temp3 = NULL; char *ValueToWrite = "Test String from AML Debugger"; ACPI_OBJECT WriteValue; ACPI_STATUS Status; /* Read the original value */ Status = AcpiDbReadFromObject (Node, ACPI_TYPE_STRING, &Temp1); if (ACPI_FAILURE (Status)) { return (Status); } AcpiOsPrintf (ACPI_DEBUG_LENGTH_FORMAT " \"%s\"", (Temp1->String.Length * 8), Temp1->String.Length, Temp1->String.Pointer); /* Write a new value */ WriteValue.Type = ACPI_TYPE_STRING; WriteValue.String.Length = strlen (ValueToWrite); WriteValue.String.Pointer = ValueToWrite; Status = AcpiDbWriteToObject (Node, &WriteValue); if (ACPI_FAILURE (Status)) { goto Exit; } /* Ensure that we can read back the new value */ Status = AcpiDbReadFromObject (Node, ACPI_TYPE_STRING, &Temp2); if (ACPI_FAILURE (Status)) { goto Exit; } if (strcmp (Temp2->String.Pointer, ValueToWrite)) { AcpiOsPrintf (" MISMATCH 2: %s, expecting %s", Temp2->String.Pointer, ValueToWrite); } /* Write back the original value */ WriteValue.String.Length = strlen (Temp1->String.Pointer); WriteValue.String.Pointer = Temp1->String.Pointer; Status = AcpiDbWriteToObject (Node, &WriteValue); if (ACPI_FAILURE (Status)) { goto Exit; } /* Ensure that we can read back the original value */ Status = AcpiDbReadFromObject (Node, ACPI_TYPE_STRING, &Temp3); if (ACPI_FAILURE (Status)) { goto Exit; } if (strcmp (Temp1->String.Pointer, Temp3->String.Pointer)) { AcpiOsPrintf (" MISMATCH 3: %s, expecting %s", Temp3->String.Pointer, Temp1->String.Pointer); } Exit: if (Temp1) {AcpiOsFree (Temp1);} if (Temp2) {AcpiOsFree (Temp2);} if (Temp3) {AcpiOsFree (Temp3);} return (Status); } /******************************************************************************* * * FUNCTION: AcpiDbTestPackageType * * PARAMETERS: Node - Parent NS node for the object * * RETURN: Status * * DESCRIPTION: Test read for a Package object. * ******************************************************************************/ static ACPI_STATUS AcpiDbTestPackageType ( ACPI_NAMESPACE_NODE *Node) { ACPI_OBJECT *Temp1 = NULL; ACPI_STATUS Status; /* Read the original value */ Status = AcpiDbReadFromObject (Node, ACPI_TYPE_PACKAGE, &Temp1); if (ACPI_FAILURE (Status)) { return (Status); } AcpiOsPrintf (" %.2X Elements", Temp1->Package.Count); AcpiOsFree (Temp1); return (Status); } /******************************************************************************* * * FUNCTION: AcpiDbTestFieldUnitType * * PARAMETERS: ObjDesc - A field unit object * * RETURN: Status * * DESCRIPTION: Test read/write on a named field unit. * ******************************************************************************/ static ACPI_STATUS AcpiDbTestFieldUnitType ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_OPERAND_OBJECT *RegionObj; UINT32 BitLength = 0; UINT32 ByteLength = 0; ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT *RetBufferDesc; /* Supported spaces are memory/io/pci_config */ RegionObj = ObjDesc->Field.RegionObj; switch (RegionObj->Region.SpaceId) { case ACPI_ADR_SPACE_SYSTEM_MEMORY: case ACPI_ADR_SPACE_SYSTEM_IO: case ACPI_ADR_SPACE_PCI_CONFIG: /* Need the interpreter to execute */ AcpiUtAcquireMutex (ACPI_MTX_INTERPRETER); AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); /* Exercise read-then-write */ Status = AcpiExReadDataFromField (NULL, ObjDesc, &RetBufferDesc); if (Status == AE_OK) { AcpiExWriteDataToField (RetBufferDesc, ObjDesc, NULL); AcpiUtRemoveReference (RetBufferDesc); } AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); AcpiUtReleaseMutex (ACPI_MTX_INTERPRETER); BitLength = ObjDesc->CommonField.BitLength; ByteLength = ACPI_ROUND_BITS_UP_TO_BYTES (BitLength); AcpiOsPrintf (ACPI_DEBUG_LENGTH_FORMAT " [%s]", BitLength, ByteLength, AcpiUtGetRegionName (RegionObj->Region.SpaceId)); return (Status); default: AcpiOsPrintf ( " %s address space is not supported in this command [%4.4s]", AcpiUtGetRegionName (RegionObj->Region.SpaceId), RegionObj->Region.Node->Name.Ascii); return (AE_OK); } } /******************************************************************************* * * FUNCTION: AcpiDbReadFromObject * * PARAMETERS: Node - Parent NS node for the object * ExpectedType - Object type expected from the read * Value - Where the value read is returned * * RETURN: Status * * DESCRIPTION: Performs a read from the specified object by invoking the * special debugger control method that reads the object. Thus, * the AML interpreter is doing all of the work, increasing the * validity of the test. * ******************************************************************************/ static ACPI_STATUS AcpiDbReadFromObject ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_TYPE ExpectedType, ACPI_OBJECT **Value) { ACPI_OBJECT *RetValue; ACPI_OBJECT_LIST ParamObjects; ACPI_OBJECT Params[2]; ACPI_BUFFER ReturnObj; ACPI_STATUS Status; Params[0].Type = ACPI_TYPE_LOCAL_REFERENCE; Params[0].Reference.ActualType = Node->Type; Params[0].Reference.Handle = ACPI_CAST_PTR (ACPI_HANDLE, Node); ParamObjects.Count = 1; ParamObjects.Pointer = Params; ReturnObj.Length = ACPI_ALLOCATE_BUFFER; AcpiGbl_MethodExecuting = TRUE; Status = AcpiEvaluateObject (ReadHandle, NULL, &ParamObjects, &ReturnObj); AcpiGbl_MethodExecuting = FALSE; if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not read from object, %s", AcpiFormatException (Status)); return (Status); } RetValue = (ACPI_OBJECT *) ReturnObj.Pointer; switch (RetValue->Type) { case ACPI_TYPE_INTEGER: case ACPI_TYPE_BUFFER: case ACPI_TYPE_STRING: case ACPI_TYPE_PACKAGE: /* * Did we receive the type we wanted? Most important for the * Integer/Buffer case (when a field is larger than an Integer, * it should return a Buffer). */ if (RetValue->Type != ExpectedType) { AcpiOsPrintf (" Type mismatch: Expected %s, Received %s", AcpiUtGetTypeName (ExpectedType), AcpiUtGetTypeName (RetValue->Type)); AcpiOsFree (ReturnObj.Pointer); return (AE_TYPE); } *Value = RetValue; break; default: AcpiOsPrintf (" Unsupported return object type, %s", AcpiUtGetTypeName (RetValue->Type)); AcpiOsFree (ReturnObj.Pointer); return (AE_TYPE); } return (Status); } /******************************************************************************* * * FUNCTION: AcpiDbWriteToObject * * PARAMETERS: Node - Parent NS node for the object * Value - Value to be written * * RETURN: Status * * DESCRIPTION: Performs a write to the specified object by invoking the * special debugger control method that writes the object. Thus, * the AML interpreter is doing all of the work, increasing the * validity of the test. * ******************************************************************************/ static ACPI_STATUS AcpiDbWriteToObject ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT *Value) { ACPI_OBJECT_LIST ParamObjects; ACPI_OBJECT Params[2]; ACPI_STATUS Status; Params[0].Type = ACPI_TYPE_LOCAL_REFERENCE; Params[0].Reference.ActualType = Node->Type; Params[0].Reference.Handle = ACPI_CAST_PTR (ACPI_HANDLE, Node); /* Copy the incoming user parameter */ memcpy (&Params[1], Value, sizeof (ACPI_OBJECT)); ParamObjects.Count = 2; ParamObjects.Pointer = Params; AcpiGbl_MethodExecuting = TRUE; Status = AcpiEvaluateObject (WriteHandle, NULL, &ParamObjects, NULL); AcpiGbl_MethodExecuting = FALSE; if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not write to object, %s", AcpiFormatException (Status)); } return (Status); } /******************************************************************************* * * FUNCTION: AcpiDbEvaluateAllPredefinedNames * * PARAMETERS: CountArg - Max number of methods to execute * * RETURN: None * * DESCRIPTION: Namespace batch execution. Execute predefined names in the * namespace, up to the max count, if specified. * ******************************************************************************/ static void AcpiDbEvaluateAllPredefinedNames ( char *CountArg) { ACPI_DB_EXECUTE_WALK Info; Info.Count = 0; Info.MaxCount = ACPI_UINT32_MAX; if (CountArg) { Info.MaxCount = strtoul (CountArg, NULL, 0); } /* Search all nodes in namespace */ (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbEvaluateOnePredefinedName, NULL, (void *) &Info, NULL); AcpiOsPrintf ( "Evaluated %u predefined names in the namespace\n", Info.Count); } /******************************************************************************* * * FUNCTION: AcpiDbEvaluateOnePredefinedName * * PARAMETERS: Callback from WalkNamespace * * RETURN: Status * * DESCRIPTION: Batch execution module. Currently only executes predefined * ACPI names. * ******************************************************************************/ static ACPI_STATUS AcpiDbEvaluateOnePredefinedName ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; ACPI_DB_EXECUTE_WALK *Info = (ACPI_DB_EXECUTE_WALK *) Context; char *Pathname; const ACPI_PREDEFINED_INFO *Predefined; ACPI_DEVICE_INFO *ObjInfo; ACPI_OBJECT_LIST ParamObjects; ACPI_OBJECT Params[ACPI_METHOD_NUM_ARGS]; ACPI_OBJECT *ThisParam; ACPI_BUFFER ReturnObj; ACPI_STATUS Status; UINT16 ArgTypeList; UINT8 ArgCount; UINT8 ArgType; UINT32 i; /* The name must be a predefined ACPI name */ Predefined = AcpiUtMatchPredefinedMethod (Node->Name.Ascii); if (!Predefined) { return (AE_OK); } if (Node->Type == ACPI_TYPE_LOCAL_SCOPE) { return (AE_OK); } Pathname = AcpiNsGetNormalizedPathname (Node, TRUE); if (!Pathname) { return (AE_OK); } /* Get the object info for number of method parameters */ Status = AcpiGetObjectInfo (ObjHandle, &ObjInfo); if (ACPI_FAILURE (Status)) { ACPI_FREE (Pathname); return (Status); } ParamObjects.Count = 0; ParamObjects.Pointer = NULL; if (ObjInfo->Type == ACPI_TYPE_METHOD) { /* Setup default parameters (with proper types) */ ArgTypeList = Predefined->Info.ArgumentList; ArgCount = METHOD_GET_ARG_COUNT (ArgTypeList); /* * Setup the ACPI-required number of arguments, regardless of what * the actual method defines. If there is a difference, then the * method is wrong and a warning will be issued during execution. */ ThisParam = Params; for (i = 0; i < ArgCount; i++) { ArgType = METHOD_GET_NEXT_TYPE (ArgTypeList); ThisParam->Type = ArgType; switch (ArgType) { case ACPI_TYPE_INTEGER: ThisParam->Integer.Value = 1; break; case ACPI_TYPE_STRING: ThisParam->String.Pointer = "This is the default argument string"; ThisParam->String.Length = strlen (ThisParam->String.Pointer); break; case ACPI_TYPE_BUFFER: ThisParam->Buffer.Pointer = (UINT8 *) Params; /* just a garbage buffer */ ThisParam->Buffer.Length = 48; break; case ACPI_TYPE_PACKAGE: ThisParam->Package.Elements = NULL; ThisParam->Package.Count = 0; break; default: AcpiOsPrintf ("%s: Unsupported argument type: %u\n", Pathname, ArgType); break; } ThisParam++; } ParamObjects.Count = ArgCount; ParamObjects.Pointer = Params; } ACPI_FREE (ObjInfo); ReturnObj.Pointer = NULL; ReturnObj.Length = ACPI_ALLOCATE_BUFFER; /* Do the actual method execution */ AcpiGbl_MethodExecuting = TRUE; Status = AcpiEvaluateObject (Node, NULL, &ParamObjects, &ReturnObj); AcpiOsPrintf ("%-32s returned %s\n", Pathname, AcpiFormatException (Status)); AcpiGbl_MethodExecuting = FALSE; ACPI_FREE (Pathname); /* Ignore status from method execution */ Status = AE_OK; /* Update count, check if we have executed enough methods */ Info->Count++; if (Info->Count >= Info->MaxCount) { Status = AE_CTRL_TERMINATE; } return (Status); } src/acpica/source/components/debugger/dbutils.c000066400000000000000000000462741465205512700221740ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dbutils - AML debugger utilities * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acdebug.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbutils") /* Local prototypes */ #ifdef ACPI_OBSOLETE_FUNCTIONS ACPI_STATUS AcpiDbSecondPassParse ( ACPI_PARSE_OBJECT *Root); void AcpiDbDumpBuffer ( UINT32 Address); #endif /******************************************************************************* * * FUNCTION: AcpiDbMatchArgument * * PARAMETERS: UserArgument - User command line * Arguments - Array of commands to match against * * RETURN: Index into command array or ACPI_TYPE_NOT_FOUND if not found * * DESCRIPTION: Search command array for a command match * ******************************************************************************/ ACPI_OBJECT_TYPE AcpiDbMatchArgument ( char *UserArgument, ACPI_DB_ARGUMENT_INFO *Arguments) { UINT32 i; if (!UserArgument || UserArgument[0] == 0) { return (ACPI_TYPE_NOT_FOUND); } for (i = 0; Arguments[i].Name; i++) { if (strstr ( ACPI_CAST_PTR (char, Arguments[i].Name), ACPI_CAST_PTR (char, UserArgument)) == Arguments[i].Name) { return (i); } } /* Argument not recognized */ return (ACPI_TYPE_NOT_FOUND); } /******************************************************************************* * * FUNCTION: AcpiDbSetOutputDestination * * PARAMETERS: OutputFlags - Current flags word * * RETURN: None * * DESCRIPTION: Set the current destination for debugger output. Also sets * the debug output level accordingly. * ******************************************************************************/ void AcpiDbSetOutputDestination ( UINT32 OutputFlags) { AcpiGbl_DbOutputFlags = (UINT8) OutputFlags; if ((OutputFlags & ACPI_DB_REDIRECTABLE_OUTPUT) && AcpiGbl_DbOutputToFile) { AcpiDbgLevel = AcpiGbl_DbDebugLevel; } else { AcpiDbgLevel = AcpiGbl_DbConsoleDebugLevel; } } /******************************************************************************* * * FUNCTION: AcpiDbDumpExternalObject * * PARAMETERS: ObjDesc - External ACPI object to dump * Level - Nesting level. * * RETURN: None * * DESCRIPTION: Dump the contents of an ACPI external object * ******************************************************************************/ void AcpiDbDumpExternalObject ( ACPI_OBJECT *ObjDesc, UINT32 Level) { UINT32 i; if (!ObjDesc) { AcpiOsPrintf ("[Null Object]\n"); return; } for (i = 0; i < Level; i++) { AcpiOsPrintf (" "); } switch (ObjDesc->Type) { case ACPI_TYPE_ANY: AcpiOsPrintf ("[Null Object] (Type=0)\n"); break; case ACPI_TYPE_INTEGER: AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); break; case ACPI_TYPE_STRING: AcpiOsPrintf ("[String] Length %.2X = ", ObjDesc->String.Length); AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); AcpiOsPrintf ("\n"); break; case ACPI_TYPE_BUFFER: AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length); if (ObjDesc->Buffer.Length) { if (ObjDesc->Buffer.Length > 16) { AcpiOsPrintf ("\n"); } AcpiUtDebugDumpBuffer ( ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer), ObjDesc->Buffer.Length, DB_BYTE_DISPLAY, _COMPONENT); } else { AcpiOsPrintf ("\n"); } break; case ACPI_TYPE_PACKAGE: AcpiOsPrintf ("[Package] Contains %u Elements:\n", ObjDesc->Package.Count); for (i = 0; i < ObjDesc->Package.Count; i++) { AcpiDbDumpExternalObject ( &ObjDesc->Package.Elements[i], Level+1); } break; case ACPI_TYPE_LOCAL_REFERENCE: AcpiOsPrintf ("[Object Reference] = "); AcpiDbDisplayInternalObject (ObjDesc->Reference.Handle, NULL); break; case ACPI_TYPE_PROCESSOR: AcpiOsPrintf ("[Processor]\n"); break; case ACPI_TYPE_POWER: AcpiOsPrintf ("[Power Resource]\n"); break; default: AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Type); break; } } /******************************************************************************* * * FUNCTION: AcpiDbPrepNamestring * * PARAMETERS: Name - String to prepare * * RETURN: None * * DESCRIPTION: Translate all forward slashes and dots to backslashes. * ******************************************************************************/ void AcpiDbPrepNamestring ( char *Name) { if (!Name) { return; } AcpiUtStrupr (Name); /* Convert a leading forward slash to a backslash */ if (*Name == '/') { *Name = '\\'; } /* Ignore a leading backslash, this is the root prefix */ if (ACPI_IS_ROOT_PREFIX (*Name)) { Name++; } /* Convert all slash path separators to dots */ while (*Name) { if ((*Name == '/') || (*Name == '\\')) { *Name = '.'; } Name++; } } /******************************************************************************* * * FUNCTION: AcpiDbLocalNsLookup * * PARAMETERS: Name - Name to lookup * * RETURN: Pointer to a namespace node, null on failure * * DESCRIPTION: Lookup a name in the ACPI namespace * * Note: Currently begins search from the root. Could be enhanced to use * the current prefix (scope) node as the search beginning point. * ******************************************************************************/ ACPI_NAMESPACE_NODE * AcpiDbLocalNsLookup ( char *Name) { char *InternalPath; ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node = NULL; AcpiDbPrepNamestring (Name); /* Build an internal namestring */ Status = AcpiNsInternalizeName (Name, &InternalPath); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Invalid namestring: %s\n", Name); return (NULL); } /* * Lookup the name. * (Uses root node as the search starting point) */ Status = AcpiNsLookup (NULL, InternalPath, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not locate name: %s, %s\n", Name, AcpiFormatException (Status)); } ACPI_FREE (InternalPath); return (Node); } /******************************************************************************* * * FUNCTION: AcpiDbUint32ToHexString * * PARAMETERS: Value - The value to be converted to string * Buffer - Buffer for result (not less than 11 bytes) * * RETURN: None * * DESCRIPTION: Convert the unsigned 32-bit value to the hexadecimal image * * NOTE: It is the caller's responsibility to ensure that the length of buffer * is sufficient. * ******************************************************************************/ void AcpiDbUint32ToHexString ( UINT32 Value, char *Buffer) { int i; if (Value == 0) { strcpy (Buffer, "0"); return; } Buffer[8] = '\0'; for (i = 7; i >= 0; i--) { Buffer[i] = AcpiGbl_UpperHexDigits [Value & 0x0F]; Value = Value >> 4; } } #ifdef ACPI_OBSOLETE_FUNCTIONS /******************************************************************************* * * FUNCTION: AcpiDbSecondPassParse * * PARAMETERS: Root - Root of the parse tree * * RETURN: Status * * DESCRIPTION: Second pass parse of the ACPI tables. We need to wait until * second pass to parse the control methods * ******************************************************************************/ ACPI_STATUS AcpiDbSecondPassParse ( ACPI_PARSE_OBJECT *Root) { ACPI_PARSE_OBJECT *Op = Root; ACPI_PARSE_OBJECT *Method; ACPI_PARSE_OBJECT *SearchOp; ACPI_PARSE_OBJECT *StartOp; ACPI_STATUS Status = AE_OK; UINT32 BaseAmlOffset; ACPI_WALK_STATE *WalkState; ACPI_FUNCTION_ENTRY (); AcpiOsPrintf ("Pass two parse ....\n"); while (Op) { if (Op->Common.AmlOpcode == AML_METHOD_OP) { Method = Op; /* Create a new walk state for the parse */ WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL); if (!WalkState) { return (AE_NO_MEMORY); } /* Init the Walk State */ WalkState->ParserState.Aml = WalkState->ParserState.AmlStart = Method->Named.Data; WalkState->ParserState.AmlEnd = WalkState->ParserState.PkgEnd = Method->Named.Data + Method->Named.Length; WalkState->ParserState.StartScope = Op; WalkState->DescendingCallback = AcpiDsLoad1BeginOp; WalkState->AscendingCallback = AcpiDsLoad1EndOp; /* Perform the AML parse */ Status = AcpiPsParseAml (WalkState); BaseAmlOffset = (Method->Common.Value.Arg)->Common.AmlOffset + 1; StartOp = (Method->Common.Value.Arg)->Common.Next; SearchOp = StartOp; while (SearchOp) { SearchOp->Common.AmlOffset += BaseAmlOffset; SearchOp = AcpiPsGetDepthNext (StartOp, SearchOp); } } if (Op->Common.AmlOpcode == AML_REGION_OP) { /* TBD: [Investigate] this isn't quite the right thing to do! */ /* * * Method = (ACPI_DEFERRED_OP *) Op; * Status = AcpiPsParseAml (Op, Method->Body, Method->BodyLength); */ } if (ACPI_FAILURE (Status)) { break; } Op = AcpiPsGetDepthNext (Root, Op); } return (Status); } /******************************************************************************* * * FUNCTION: AcpiDbDumpBuffer * * PARAMETERS: Address - Pointer to the buffer * * RETURN: None * * DESCRIPTION: Print a portion of a buffer * ******************************************************************************/ void AcpiDbDumpBuffer ( UINT32 Address) { AcpiOsPrintf ("\nLocation %X:\n", Address); AcpiDbgLevel |= ACPI_LV_TABLES; AcpiUtDebugDumpBuffer (ACPI_TO_POINTER (Address), 64, DB_BYTE_DISPLAY, ACPI_UINT32_MAX); } #endif src/acpica/source/components/debugger/dbxface.c000066400000000000000000000552261465205512700221170ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dbxface - AML Debugger external interfaces * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "amlcode.h" #include "acdebug.h" #include "acinterp.h" #include "acparser.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbxface") /* Local prototypes */ static ACPI_STATUS AcpiDbStartCommand ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); #ifdef ACPI_OBSOLETE_FUNCTIONS void AcpiDbMethodEnd ( ACPI_WALK_STATE *WalkState); #endif #ifdef ACPI_DISASSEMBLER static ACPI_PARSE_OBJECT * AcpiDbGetDisplayOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); #endif /******************************************************************************* * * FUNCTION: AcpiDbStartCommand * * PARAMETERS: WalkState - Current walk * Op - Current executing Op, from AML interpreter * * RETURN: Status * * DESCRIPTION: Enter debugger command loop * ******************************************************************************/ static ACPI_STATUS AcpiDbStartCommand ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { ACPI_STATUS Status; /* TBD: [Investigate] are there namespace locking issues here? */ /* AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); */ /* Go into the command loop and await next user command */ AcpiGbl_MethodExecuting = TRUE; Status = AE_CTRL_TRUE; while (Status == AE_CTRL_TRUE) { /* Notify the completion of the command */ Status = AcpiOsNotifyCommandComplete (); if (ACPI_FAILURE (Status)) { goto ErrorExit; } /* Wait the readiness of the command */ Status = AcpiOsWaitCommandReady (); if (ACPI_FAILURE (Status)) { goto ErrorExit; } Status = AcpiDbCommandDispatch (AcpiGbl_DbLineBuf, WalkState, Op); } /* AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); */ ErrorExit: if (ACPI_FAILURE (Status) && Status != AE_CTRL_TERMINATE) { ACPI_EXCEPTION ((AE_INFO, Status, "While parsing/handling command line")); } return (Status); } /******************************************************************************* * * FUNCTION: AcpiDbSignalBreakPoint * * PARAMETERS: WalkState - Current walk * * RETURN: Status * * DESCRIPTION: Called for AML_BREAKPOINT_OP * ******************************************************************************/ void AcpiDbSignalBreakPoint ( ACPI_WALK_STATE *WalkState) { #ifndef ACPI_APPLICATION if (AcpiGbl_DbThreadId != AcpiOsGetThreadId ()) { return; } #endif /* * Set the single-step flag. This will cause the debugger (if present) * to break to the console within the AML debugger at the start of the * next AML instruction. */ AcpiGbl_CmSingleStep = TRUE; AcpiOsPrintf ("**break** Executed AML BreakPoint opcode\n"); } #ifdef ACPI_DISASSEMBLER /******************************************************************************* * * FUNCTION: AcpiDbGetDisplayOp * * PARAMETERS: WalkState - Current walk * Op - Current executing op (from aml interpreter) * * RETURN: Opcode to display * * DESCRIPTION: Find the opcode to display during single stepping * ******************************************************************************/ static ACPI_PARSE_OBJECT * AcpiDbGetDisplayOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *DisplayOp; ACPI_PARSE_OBJECT *ParentOp; DisplayOp = Op; ParentOp = Op->Common.Parent; if (ParentOp) { if ((WalkState->ControlState) && (WalkState->ControlState->Common.State == ACPI_CONTROL_PREDICATE_EXECUTING)) { /* * We are executing the predicate of an IF or WHILE statement * Search upwards for the containing IF or WHILE so that the * entire predicate can be displayed. */ while (ParentOp) { if ((ParentOp->Common.AmlOpcode == AML_IF_OP) || (ParentOp->Common.AmlOpcode == AML_WHILE_OP)) { DisplayOp = ParentOp; break; } ParentOp = ParentOp->Common.Parent; } } else { while (ParentOp) { if ((ParentOp->Common.AmlOpcode == AML_IF_OP) || (ParentOp->Common.AmlOpcode == AML_ELSE_OP) || (ParentOp->Common.AmlOpcode == AML_SCOPE_OP) || (ParentOp->Common.AmlOpcode == AML_METHOD_OP) || (ParentOp->Common.AmlOpcode == AML_WHILE_OP)) { break; } DisplayOp = ParentOp; ParentOp = ParentOp->Common.Parent; } } } return DisplayOp; } #endif /******************************************************************************* * * FUNCTION: AcpiDbSingleStep * * PARAMETERS: WalkState - Current walk * Op - Current executing op (from aml interpreter) * OpcodeClass - Class of the current AML Opcode * * RETURN: Status * * DESCRIPTION: Called just before execution of an AML opcode. * ******************************************************************************/ ACPI_STATUS AcpiDbSingleStep ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, UINT32 OpcodeClass) { ACPI_PARSE_OBJECT *Next; ACPI_STATUS Status = AE_OK; UINT32 OriginalDebugLevel; UINT32 AmlOffset; ACPI_FUNCTION_ENTRY (); #ifndef ACPI_APPLICATION if (AcpiGbl_DbThreadId != AcpiOsGetThreadId ()) { return (AE_OK); } #endif /* Check the abort flag */ if (AcpiGbl_AbortMethod) { AcpiGbl_AbortMethod = FALSE; return (AE_ABORT_METHOD); } AmlOffset = (UINT32) ACPI_PTR_DIFF (Op->Common.Aml, WalkState->ParserState.AmlStart); /* Check for single-step breakpoint */ if (WalkState->MethodBreakpoint && (WalkState->MethodBreakpoint <= AmlOffset)) { /* Check if the breakpoint has been reached or passed */ /* Hit the breakpoint, resume single step, reset breakpoint */ AcpiOsPrintf ("***Break*** at AML offset %X\n", AmlOffset); AcpiGbl_CmSingleStep = TRUE; AcpiGbl_StepToNextCall = FALSE; WalkState->MethodBreakpoint = 0; } /* Check for user breakpoint (Must be on exact Aml offset) */ else if (WalkState->UserBreakpoint && (WalkState->UserBreakpoint == AmlOffset)) { AcpiOsPrintf ("***UserBreakpoint*** at AML offset %X\n", AmlOffset); AcpiGbl_CmSingleStep = TRUE; AcpiGbl_StepToNextCall = FALSE; WalkState->MethodBreakpoint = 0; } /* * Check if this is an opcode that we are interested in -- * namely, opcodes that have arguments */ if (Op->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP) { return (AE_OK); } switch (OpcodeClass) { case AML_CLASS_UNKNOWN: case AML_CLASS_ARGUMENT: /* constants, literals, etc. do nothing */ return (AE_OK); default: /* All other opcodes -- continue */ break; } /* * Under certain debug conditions, display this opcode and its operands */ if ((AcpiGbl_DbOutputToFile) || (AcpiGbl_CmSingleStep) || (AcpiDbgLevel & ACPI_LV_PARSE)) { if ((AcpiGbl_DbOutputToFile) || (AcpiDbgLevel & ACPI_LV_PARSE)) { AcpiOsPrintf ("\nAML Debug: Next AML Opcode to execute:\n"); } /* * Display this op (and only this op - zero out the NEXT field * temporarily, and disable parser trace output for the duration of * the display because we don't want the extraneous debug output) */ OriginalDebugLevel = AcpiDbgLevel; AcpiDbgLevel &= ~(ACPI_LV_PARSE | ACPI_LV_FUNCTIONS); Next = Op->Common.Next; Op->Common.Next = NULL; /* Now we can disassemble and display it */ #ifdef ACPI_DISASSEMBLER AcpiDmDisassemble (WalkState, AcpiDbGetDisplayOp (WalkState, Op), ACPI_UINT32_MAX); #else /* * The AML Disassembler is not configured - at least we can * display the opcode value and name */ AcpiOsPrintf ("AML Opcode: %4.4X %s\n", Op->Common.AmlOpcode, AcpiPsGetOpcodeName (Op->Common.AmlOpcode)); #endif if ((Op->Common.AmlOpcode == AML_IF_OP) || (Op->Common.AmlOpcode == AML_WHILE_OP)) { if (WalkState->ControlState->Common.Value) { AcpiOsPrintf ("Predicate = [True], IF block was executed\n"); } else { AcpiOsPrintf ("Predicate = [False], Skipping IF block\n"); } } else if (Op->Common.AmlOpcode == AML_ELSE_OP) { AcpiOsPrintf ("Predicate = [False], ELSE block was executed\n"); } /* Restore everything */ Op->Common.Next = Next; AcpiOsPrintf ("\n"); if ((AcpiGbl_DbOutputToFile) || (AcpiDbgLevel & ACPI_LV_PARSE)) { AcpiOsPrintf ("\n"); } AcpiDbgLevel = OriginalDebugLevel; } /* If we are not single stepping, just continue executing the method */ if (!AcpiGbl_CmSingleStep) { return (AE_OK); } /* * If we are executing a step-to-call command, * Check if this is a method call. */ if (AcpiGbl_StepToNextCall) { if (Op->Common.AmlOpcode != AML_INT_METHODCALL_OP) { /* Not a method call, just keep executing */ return (AE_OK); } /* Found a method call, stop executing */ AcpiGbl_StepToNextCall = FALSE; } /* * If the next opcode is a method call, we will "step over" it * by default. */ if (Op->Common.AmlOpcode == AML_INT_METHODCALL_OP) { /* Force no more single stepping while executing called method */ AcpiGbl_CmSingleStep = FALSE; /* * Set the breakpoint on/before the call, it will stop execution * as soon as we return */ WalkState->MethodBreakpoint = 1; /* Must be non-zero! */ } AcpiExExitInterpreter (); Status = AcpiDbStartCommand (WalkState, Op); AcpiExEnterInterpreter (); /* User commands complete, continue execution of the interrupted method */ return (Status); } /******************************************************************************* * * FUNCTION: AcpiInitializeDebugger * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Init and start debugger * ******************************************************************************/ ACPI_STATUS AcpiInitializeDebugger ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiInitializeDebugger); /* Init globals */ AcpiGbl_DbBuffer = NULL; AcpiGbl_DbFilename = NULL; AcpiGbl_DbOutputToFile = FALSE; AcpiGbl_DbDebugLevel = ACPI_LV_VERBOSITY2; AcpiGbl_DbConsoleDebugLevel = ACPI_NORMAL_DEFAULT | ACPI_LV_TABLES; AcpiGbl_DbOutputFlags = ACPI_DB_CONSOLE_OUTPUT; AcpiGbl_DbOpt_NoIniMethods = FALSE; AcpiGbl_DbOpt_NoRegionSupport = FALSE; AcpiGbl_DbBuffer = AcpiOsAllocate (ACPI_DEBUG_BUFFER_SIZE); if (!AcpiGbl_DbBuffer) { return_ACPI_STATUS (AE_NO_MEMORY); } memset (AcpiGbl_DbBuffer, 0, ACPI_DEBUG_BUFFER_SIZE); /* Initial scope is the root */ AcpiGbl_DbScopeBuf [0] = AML_ROOT_PREFIX; AcpiGbl_DbScopeBuf [1] = 0; AcpiGbl_DbScopeNode = AcpiGbl_RootNode; /* Initialize user commands loop */ AcpiGbl_DbTerminateLoop = FALSE; /* * If configured for multi-thread support, the debug executor runs in * a separate thread so that the front end can be in another address * space, environment, or even another machine. */ if (AcpiGbl_DebuggerConfiguration & DEBUGGER_MULTI_THREADED) { /* These were created with one unit, grab it */ Status = AcpiOsInitializeDebugger (); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not get debugger mutex\n"); return_ACPI_STATUS (Status); } /* Create the debug execution thread to execute commands */ AcpiGbl_DbThreadsTerminated = FALSE; Status = AcpiOsExecute (OSL_DEBUGGER_MAIN_THREAD, AcpiDbExecuteThread, NULL); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not start debugger thread")); AcpiGbl_DbThreadsTerminated = TRUE; return_ACPI_STATUS (Status); } } else { AcpiGbl_DbThreadId = AcpiOsGetThreadId (); } return_ACPI_STATUS (AE_OK); } ACPI_EXPORT_SYMBOL (AcpiInitializeDebugger) /******************************************************************************* * * FUNCTION: AcpiTerminateDebugger * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Stop debugger * ******************************************************************************/ void AcpiTerminateDebugger ( void) { /* Terminate the AML Debugger */ AcpiGbl_DbTerminateLoop = TRUE; if (AcpiGbl_DebuggerConfiguration & DEBUGGER_MULTI_THREADED) { /* Wait the AML Debugger threads */ while (!AcpiGbl_DbThreadsTerminated) { AcpiOsSleep (100); } AcpiOsTerminateDebugger (); } if (AcpiGbl_DbBuffer) { AcpiOsFree (AcpiGbl_DbBuffer); AcpiGbl_DbBuffer = NULL; } /* Ensure that debug output is now disabled */ AcpiGbl_DbOutputFlags = ACPI_DB_DISABLE_OUTPUT; } ACPI_EXPORT_SYMBOL (AcpiTerminateDebugger) /******************************************************************************* * * FUNCTION: AcpiSetDebuggerThreadId * * PARAMETERS: ThreadId - Debugger thread ID * * RETURN: None * * DESCRIPTION: Set debugger thread ID * ******************************************************************************/ void AcpiSetDebuggerThreadId ( ACPI_THREAD_ID ThreadId) { AcpiGbl_DbThreadId = ThreadId; } ACPI_EXPORT_SYMBOL (AcpiSetDebuggerThreadId) src/acpica/source/components/disassembler/000077500000000000000000000000001465205512700212365ustar00rootroot00000000000000src/acpica/source/components/disassembler/dmbuffer.c000066400000000000000000001054711465205512700232040ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dmbuffer - AML disassembler, buffer and string support * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acutils.h" #include "acdisasm.h" #include "acparser.h" #include "amlcode.h" #include "acinterp.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dmbuffer") /* Local prototypes */ static void AcpiDmUuid ( ACPI_PARSE_OBJECT *Op); static void AcpiDmUnicode ( ACPI_PARSE_OBJECT *Op); static void AcpiDmGetHardwareIdType ( ACPI_PARSE_OBJECT *Op); static void AcpiDmPldBuffer ( UINT32 Level, UINT8 *ByteData, UINT32 ByteCount); static const char * AcpiDmFindNameByIndex ( UINT64 Index, const char **List); #define ACPI_BUFFER_BYTES_PER_LINE 8 /******************************************************************************* * * FUNCTION: AcpiDmDisasmByteList * * PARAMETERS: Level - Current source code indentation level * ByteData - Pointer to the byte list * ByteCount - Length of the byte list * * RETURN: None * * DESCRIPTION: Dump an AML "ByteList" in Hex format. 8 bytes per line, prefixed * with the hex buffer offset. * ******************************************************************************/ void AcpiDmDisasmByteList ( UINT32 Level, UINT8 *ByteData, UINT32 ByteCount) { UINT32 i; UINT32 j; UINT32 CurrentIndex; UINT8 BufChar; if (!ByteCount) { return; } for (i = 0; i < ByteCount; i += ACPI_BUFFER_BYTES_PER_LINE) { /* Line indent and offset prefix for each new line */ AcpiDmIndent (Level); if (ByteCount > ACPI_BUFFER_BYTES_PER_LINE) { AcpiOsPrintf ("/* %04X */ ", i); } /* Dump the actual hex values */ for (j = 0; j < ACPI_BUFFER_BYTES_PER_LINE; j++) { CurrentIndex = i + j; if (CurrentIndex >= ByteCount) { /* Dump fill spaces */ AcpiOsPrintf (" "); continue; } AcpiOsPrintf (" 0x%2.2X", ByteData[CurrentIndex]); /* Add comma if there are more bytes to display */ if (CurrentIndex < (ByteCount - 1)) { AcpiOsPrintf (","); } else { AcpiOsPrintf (" "); } } /* Dump the ASCII equivalents within a comment */ AcpiOsPrintf (" // "); for (j = 0; j < ACPI_BUFFER_BYTES_PER_LINE; j++) { CurrentIndex = i + j; if (CurrentIndex >= ByteCount) { break; } BufChar = ByteData[CurrentIndex]; if (isprint (BufChar)) { AcpiOsPrintf ("%c", BufChar); } else { AcpiOsPrintf ("."); } } /* Finished with this line */ AcpiOsPrintf ("\n"); } } /******************************************************************************* * * FUNCTION: AcpiDmByteList * * PARAMETERS: Info - Parse tree walk info * Op - Byte list op * * RETURN: None * * DESCRIPTION: Dump a buffer byte list, handling the various types of buffers. * Buffer type must be already set in the Op DisasmOpcode. * ******************************************************************************/ void AcpiDmByteList ( ACPI_OP_WALK_INFO *Info, ACPI_PARSE_OBJECT *Op) { UINT8 *ByteData; UINT32 ByteCount; ByteData = Op->Named.Data; ByteCount = (UINT32) Op->Common.Value.Integer; /* * The byte list belongs to a buffer, and can be produced by either * a ResourceTemplate, Unicode, quoted string, or a plain byte list. */ switch (Op->Common.Parent->Common.DisasmOpcode) { case ACPI_DASM_RESOURCE: AcpiDmResourceTemplate ( Info, Op->Common.Parent, ByteData, ByteCount); break; case ACPI_DASM_STRING: AcpiDmIndent (Info->Level); AcpiUtPrintString ((char *) ByteData, ACPI_UINT16_MAX); AcpiOsPrintf ("\n"); break; case ACPI_DASM_UUID: AcpiDmUuid (Op); break; case ACPI_DASM_UNICODE: AcpiDmUnicode (Op); break; case ACPI_DASM_PLD_METHOD: #if 0 AcpiDmDisasmByteList (Info->Level, ByteData, ByteCount); #endif AcpiDmPldBuffer (Info->Level, ByteData, ByteCount); break; case ACPI_DASM_BUFFER: default: /* * Not a resource, string, or unicode string. * Just dump the buffer */ AcpiDmDisasmByteList (Info->Level, ByteData, ByteCount); break; } } /******************************************************************************* * * FUNCTION: AcpiDmIsUuidBuffer * * PARAMETERS: Op - Buffer Object to be examined * * RETURN: TRUE if buffer contains a UUID * * DESCRIPTION: Determine if a buffer Op contains a UUID * * To help determine whether the buffer is a UUID versus a raw data buffer, * there a are a couple bytes we can look at: * * xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx * * The variant covered by the UUID specification is indicated by the two most * significant bits of N being 1 0 (i.e., the hexadecimal N will always be * 8, 9, A, or B). * * The variant covered by the UUID specification has five versions. For this * variant, the four bits of M indicates the UUID version (i.e., the * hexadecimal M will be either 1, 2, 3, 4, or 5). * ******************************************************************************/ BOOLEAN AcpiDmIsUuidBuffer ( ACPI_PARSE_OBJECT *Op) { UINT8 *ByteData; UINT32 ByteCount; ACPI_PARSE_OBJECT *SizeOp; ACPI_PARSE_OBJECT *NextOp; /* Buffer size is the buffer argument */ SizeOp = Op->Common.Value.Arg; if (!SizeOp) { return (FALSE); } /* Next, the initializer byte list to examine */ NextOp = SizeOp->Common.Next; if (!NextOp) { return (FALSE); } /* Extract the byte list info */ ByteData = NextOp->Named.Data; ByteCount = (UINT32) NextOp->Common.Value.Integer; /* Byte count must be exactly 16 */ if (ByteCount != UUID_BUFFER_LENGTH) { return (FALSE); } /* Check for valid "M" and "N" values (see function header above) */ if (((ByteData[7] & 0xF0) == 0x00) || /* M={1,2,3,4,5} */ ((ByteData[7] & 0xF0) > 0x50) || ((ByteData[8] & 0xF0) < 0x80) || /* N={8,9,A,B} */ ((ByteData[8] & 0xF0) > 0xB0)) { return (FALSE); } /* Ignore the Size argument in the disassembly of this buffer op */ SizeOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; return (TRUE); } /******************************************************************************* * * FUNCTION: AcpiDmUuid * * PARAMETERS: Op - Byte List op containing a UUID * * RETURN: None * * DESCRIPTION: Dump a buffer containing a UUID as a standard ASCII string. * * Output Format: * In its canonical form, the UUID is represented by a string containing 32 * lowercase hexadecimal digits, displayed in 5 groups separated by hyphens. * The complete form is 8-4-4-4-12 for a total of 36 characters (32 * alphanumeric characters representing hex digits and 4 hyphens). In bytes, * 4-2-2-2-6. Example: * * ToUUID ("107ededd-d381-4fd7-8da9-08e9a6c79644") * ******************************************************************************/ static void AcpiDmUuid ( ACPI_PARSE_OBJECT *Op) { UINT8 *Data; const char *Description; Data = ACPI_CAST_PTR (UINT8, Op->Named.Data); /* Emit the 36-byte UUID string in the proper format/order */ AcpiOsPrintf ( "\"%2.2x%2.2x%2.2x%2.2x-" "%2.2x%2.2x-" "%2.2x%2.2x-" "%2.2x%2.2x-" "%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\")", Data[3], Data[2], Data[1], Data[0], Data[5], Data[4], Data[7], Data[6], Data[8], Data[9], Data[10], Data[11], Data[12], Data[13], Data[14], Data[15]); /* Dump the UUID description string if available */ Description = AcpiAhMatchUuid (Data); if (Description) { AcpiOsPrintf (" /* %s */", Description); } else { AcpiOsPrintf (" /* Unknown UUID */"); } } /******************************************************************************* * * FUNCTION: AcpiDmIsUnicodeBuffer * * PARAMETERS: Op - Buffer Object to be examined * * RETURN: TRUE if buffer contains a UNICODE string * * DESCRIPTION: Determine if a buffer Op contains a Unicode string * ******************************************************************************/ BOOLEAN AcpiDmIsUnicodeBuffer ( ACPI_PARSE_OBJECT *Op) { UINT8 *ByteData; UINT32 ByteCount; UINT32 WordCount; ACPI_PARSE_OBJECT *SizeOp; ACPI_PARSE_OBJECT *NextOp; UINT32 i; /* Buffer size is the buffer argument */ SizeOp = Op->Common.Value.Arg; if (!SizeOp) { return (FALSE); } /* Next, the initializer byte list to examine */ NextOp = SizeOp->Common.Next; if (!NextOp) { return (FALSE); } /* Extract the byte list info */ ByteData = NextOp->Named.Data; ByteCount = (UINT32) NextOp->Common.Value.Integer; WordCount = ACPI_DIV_2 (ByteCount); /* * Unicode string must have an even number of bytes and last * word must be zero */ if ((!ByteCount) || (ByteCount < 4) || (ByteCount & 1) || ((UINT16 *) (void *) ByteData)[WordCount - 1] != 0) { return (FALSE); } /* * For each word, 1st byte must be printable ascii, and the * 2nd byte must be zero. This does not allow for escape * sequences, but it is the most secure way to detect a * unicode string. */ for (i = 0; i < (ByteCount - 2); i += 2) { if ((ByteData[i] == 0) || !(isprint (ByteData[i])) || (ByteData[(ACPI_SIZE) i + 1] != 0)) { return (FALSE); } } /* Ignore the Size argument in the disassembly of this buffer op */ SizeOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; return (TRUE); } /******************************************************************************* * * FUNCTION: AcpiDmIsStringBuffer * * PARAMETERS: Op - Buffer Object to be examined * * RETURN: TRUE if buffer contains a ASCII string, FALSE otherwise * * DESCRIPTION: Determine if a buffer Op contains a ASCII string * ******************************************************************************/ BOOLEAN AcpiDmIsStringBuffer ( ACPI_PARSE_OBJECT *Op) { UINT8 *ByteData; UINT32 ByteCount; ACPI_PARSE_OBJECT *SizeOp; ACPI_PARSE_OBJECT *NextOp; UINT32 i; /* Buffer size is the buffer argument */ SizeOp = Op->Common.Value.Arg; if (!SizeOp) { return (FALSE); } /* Next, the initializer byte list to examine */ NextOp = SizeOp->Common.Next; if (!NextOp) { return (FALSE); } /* Extract the byte list info */ ByteData = NextOp->Named.Data; ByteCount = (UINT32) NextOp->Common.Value.Integer; /* Last byte must be the null terminator */ if ((!ByteCount) || (ByteCount < 2) || (ByteData[ByteCount-1] != 0)) { return (FALSE); } /* * Check for a possible standalone resource EndTag, ignore it * here. However, this sequence is also the string "Y", but * this seems rare enough to be acceptable. */ if ((ByteCount == 2) && (ByteData[0] == 0x79)) { return (FALSE); } /* Check all bytes for ASCII */ for (i = 0; i < (ByteCount - 1); i++) { /* * TBD: allow some escapes (non-ascii chars). * they will be handled in the string output routine */ /* Not a string if not printable ascii */ if (!isprint (ByteData[i])) { return (FALSE); } } return (TRUE); } /******************************************************************************* * * FUNCTION: AcpiDmIsPldBuffer * * PARAMETERS: Op - Buffer Object to be examined * * RETURN: TRUE if buffer appears to contain data produced via the * ToPLD macro, FALSE otherwise * * DESCRIPTION: Determine if a buffer Op contains a _PLD structure * ******************************************************************************/ BOOLEAN AcpiDmIsPldBuffer ( ACPI_PARSE_OBJECT *Op) { ACPI_NAMESPACE_NODE *Node; ACPI_PARSE_OBJECT *SizeOp; ACPI_PARSE_OBJECT *ByteListOp; ACPI_PARSE_OBJECT *ParentOp; UINT64 BufferSize; UINT64 InitializerSize; if (!Op) { return (FALSE); } /* * Get the BufferSize argument - Buffer(BufferSize) * If the buffer was generated by the ToPld macro, it must * be a BYTE constant. */ SizeOp = Op->Common.Value.Arg; if (!SizeOp || SizeOp->Common.AmlOpcode != AML_BYTE_OP) { return (FALSE); } /* Check the declared BufferSize, two possibilities */ BufferSize = SizeOp->Common.Value.Integer; if ((BufferSize != ACPI_PLD_REV1_BUFFER_SIZE) && (BufferSize != ACPI_PLD_REV2_BUFFER_SIZE)) { return (FALSE); } /* * Check the initializer list length. This is the actual * number of bytes in the buffer as counted by the AML parser. * The declared BufferSize can be larger than the actual length. * However, for the ToPLD macro, the BufferSize will be the same * as the initializer list length. */ ByteListOp = SizeOp->Common.Next; if (!ByteListOp) { return (FALSE); /* Zero-length buffer case */ } InitializerSize = ByteListOp->Common.Value.Integer; if ((InitializerSize != ACPI_PLD_REV1_BUFFER_SIZE) && (InitializerSize != ACPI_PLD_REV2_BUFFER_SIZE)) { return (FALSE); } /* Final size check */ if (BufferSize != InitializerSize) { return (FALSE); } /* Now examine the buffer parent */ ParentOp = Op->Common.Parent; if (!ParentOp) { return (FALSE); } /* Check for form: Name(_PLD, Buffer() {}). Not legal, however */ if (ParentOp->Common.AmlOpcode == AML_NAME_OP) { Node = ParentOp->Common.Node; if (ACPI_COMPARE_NAMESEG (Node->Name.Ascii, METHOD_NAME__PLD)) { /* Ignore the Size argument in the disassembly of this buffer op */ SizeOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; return (TRUE); } return (FALSE); } /* * Check for proper form: Name(_PLD, Package() {ToPLD()}) * * Note: All other forms such as * Return (Package() {ToPLD()}) * Local0 = ToPLD() * etc. are not converted back to the ToPLD macro, because * there is really no deterministic way to disassemble the buffer * back to the ToPLD macro, other than trying to find the "_PLD" * name */ if (ParentOp->Common.AmlOpcode == AML_PACKAGE_OP) { ParentOp = ParentOp->Common.Parent; if (!ParentOp) { return (FALSE); } if (ParentOp->Common.AmlOpcode == AML_NAME_OP) { Node = ParentOp->Common.Node; if (ACPI_COMPARE_NAMESEG (Node->Name.Ascii, METHOD_NAME__PLD)) { /* Ignore the Size argument in the disassembly of this buffer op */ SizeOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; return (TRUE); } } } return (FALSE); } /******************************************************************************* * * FUNCTION: AcpiDmFindNameByIndex * * PARAMETERS: Index - Index of array to check * List - Array to reference * * RETURN: String from List or empty string * * DESCRIPTION: Finds and returns the char string located at the given index * position in List. * ******************************************************************************/ static const char * AcpiDmFindNameByIndex ( UINT64 Index, const char **List) { const char *NameString; UINT32 i; /* Bounds check */ NameString = List[0]; i = 0; while (NameString) { i++; NameString = List[i]; } if (Index >= i) { /* TBD: Add error msg */ return (""); } return (List[Index]); } /******************************************************************************* * * FUNCTION: AcpiDmPldBuffer * * PARAMETERS: Level - Current source code indentation level * ByteData - Pointer to the byte list * ByteCount - Length of the byte list * * RETURN: None * * DESCRIPTION: Dump and format the contents of a _PLD buffer object * ******************************************************************************/ #define ACPI_PLD_OUTPUT08 "%*.s%-22s = 0x%X,\n", ACPI_MUL_4 (Level), " " #define ACPI_PLD_OUTPUT08P "%*.s%-22s = 0x%X)\n", ACPI_MUL_4 (Level), " " #define ACPI_PLD_OUTPUT16 "%*.s%-22s = 0x%X,\n", ACPI_MUL_4 (Level), " " #define ACPI_PLD_OUTPUT16P "%*.s%-22s = 0x%X)\n", ACPI_MUL_4 (Level), " " #define ACPI_PLD_OUTPUT24 "%*.s%-22s = 0x%X,\n", ACPI_MUL_4 (Level), " " #define ACPI_PLD_OUTPUTSTR "%*.s%-22s = \"%s\",\n", ACPI_MUL_4 (Level), " " static void AcpiDmPldBuffer ( UINT32 Level, UINT8 *ByteData, UINT32 ByteCount) { ACPI_PLD_INFO *PldInfo; ACPI_STATUS Status; /* Check for valid byte count */ if (ByteCount < ACPI_PLD_REV1_BUFFER_SIZE) { return; } /* Convert _PLD buffer to local _PLD struct */ Status = AcpiDecodePldBuffer (ByteData, ByteCount, &PldInfo); if (ACPI_FAILURE (Status)) { return; } AcpiOsPrintf ("\n"); /* First 32-bit dword */ AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_Revision", PldInfo->Revision); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_IgnoreColor", PldInfo->IgnoreColor); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_Red", PldInfo->Red); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_Green", PldInfo->Green); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_Blue", PldInfo->Blue); /* Second 32-bit dword */ AcpiOsPrintf (ACPI_PLD_OUTPUT16, "PLD_Width", PldInfo->Width); AcpiOsPrintf (ACPI_PLD_OUTPUT16, "PLD_Height", PldInfo->Height); /* Third 32-bit dword */ AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_UserVisible", PldInfo->UserVisible); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_Dock", PldInfo->Dock); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_Lid", PldInfo->Lid); AcpiOsPrintf (ACPI_PLD_OUTPUTSTR, "PLD_Panel", AcpiDmFindNameByIndex(PldInfo->Panel, AcpiGbl_PldPanelList)); AcpiOsPrintf (ACPI_PLD_OUTPUTSTR, "PLD_VerticalPosition", AcpiDmFindNameByIndex(PldInfo->VerticalPosition, AcpiGbl_PldVerticalPositionList)); AcpiOsPrintf (ACPI_PLD_OUTPUTSTR, "PLD_HorizontalPosition", AcpiDmFindNameByIndex(PldInfo->HorizontalPosition, AcpiGbl_PldHorizontalPositionList)); AcpiOsPrintf (ACPI_PLD_OUTPUTSTR, "PLD_Shape", AcpiDmFindNameByIndex(PldInfo->Shape, AcpiGbl_PldShapeList)); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_GroupOrientation", PldInfo->GroupOrientation); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_GroupToken", PldInfo->GroupToken); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_GroupPosition", PldInfo->GroupPosition); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_Bay", PldInfo->Bay); /* Fourth 32-bit dword */ AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_Ejectable", PldInfo->Ejectable); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_EjectRequired", PldInfo->OspmEjectRequired); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_CabinetNumber", PldInfo->CabinetNumber); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_CardCageNumber", PldInfo->CardCageNumber); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_Reference", PldInfo->Reference); AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_Rotation", PldInfo->Rotation); if (ByteCount >= ACPI_PLD_REV2_BUFFER_SIZE) { AcpiOsPrintf (ACPI_PLD_OUTPUT08, "PLD_Order", PldInfo->Order); /* Fifth 32-bit dword */ AcpiOsPrintf (ACPI_PLD_OUTPUT16, "PLD_VerticalOffset", PldInfo->VerticalOffset); AcpiOsPrintf (ACPI_PLD_OUTPUT16P, "PLD_HorizontalOffset", PldInfo->HorizontalOffset); } else /* Rev 1 buffer */ { AcpiOsPrintf (ACPI_PLD_OUTPUT08P, "PLD_Order", PldInfo->Order); } ACPI_FREE (PldInfo); } /******************************************************************************* * * FUNCTION: AcpiDmUnicode * * PARAMETERS: Op - Byte List op containing Unicode string * * RETURN: None * * DESCRIPTION: Dump Unicode string as a standard ASCII string. (Remove * the extra zero bytes). * ******************************************************************************/ static void AcpiDmUnicode ( ACPI_PARSE_OBJECT *Op) { UINT16 *WordData; UINT32 WordCount; UINT32 i; int OutputValue; /* Extract the buffer info as a WORD buffer */ WordData = ACPI_CAST_PTR (UINT16, Op->Named.Data); WordCount = ACPI_DIV_2 (((UINT32) Op->Common.Value.Integer)); /* Write every other byte as an ASCII character */ AcpiOsPrintf ("\""); for (i = 0; i < (WordCount - 1); i++) { OutputValue = (int) WordData[i]; /* Handle values that must be escaped */ if ((OutputValue == '\"') || (OutputValue == '\\')) { AcpiOsPrintf ("\\%c", OutputValue); } else if (!isprint (OutputValue)) { AcpiOsPrintf ("\\x%2.2X", OutputValue); } else { AcpiOsPrintf ("%c", OutputValue); } } AcpiOsPrintf ("\")"); } /******************************************************************************* * * FUNCTION: AcpiDmGetHardwareIdType * * PARAMETERS: Op - Op to be examined * * RETURN: None * * DESCRIPTION: Determine the type of the argument to a _HID or _CID * 1) Strings are allowed * 2) If Integer, determine if it is a valid EISAID * ******************************************************************************/ static void AcpiDmGetHardwareIdType ( ACPI_PARSE_OBJECT *Op) { UINT32 BigEndianId; UINT32 Prefix[3]; UINT32 i; switch (Op->Common.AmlOpcode) { case AML_STRING_OP: /* Mark this string as an _HID/_CID string */ Op->Common.DisasmOpcode = ACPI_DASM_HID_STRING; break; case AML_WORD_OP: case AML_DWORD_OP: /* Determine if a Word/Dword is a valid encoded EISAID */ /* Swap from little-endian to big-endian to simplify conversion */ BigEndianId = AcpiUtDwordByteSwap ((UINT32) Op->Common.Value.Integer); /* Create the 3 leading ASCII letters */ Prefix[0] = ((BigEndianId >> 26) & 0x1F) + 0x40; Prefix[1] = ((BigEndianId >> 21) & 0x1F) + 0x40; Prefix[2] = ((BigEndianId >> 16) & 0x1F) + 0x40; /* Verify that all 3 are ascii and alpha */ for (i = 0; i < 3; i++) { if (!ACPI_IS_ASCII (Prefix[i]) || !isalpha (Prefix[i])) { return; } } /* Mark this node as convertible to an EISA ID string */ Op->Common.DisasmOpcode = ACPI_DASM_EISAID; break; default: break; } } /******************************************************************************* * * FUNCTION: AcpiDmCheckForHardwareId * * PARAMETERS: Op - Op to be examined * * RETURN: None * * DESCRIPTION: Determine if a Name() Op is a _HID/_CID. * ******************************************************************************/ void AcpiDmCheckForHardwareId ( ACPI_PARSE_OBJECT *Op) { UINT32 Name; ACPI_PARSE_OBJECT *NextOp; /* Get the NameSegment */ Name = AcpiPsGetName (Op); if (!Name) { return; } NextOp = AcpiPsGetDepthNext (NULL, Op); if (!NextOp) { return; } /* Check for _HID - has one argument */ if (ACPI_COMPARE_NAMESEG (&Name, METHOD_NAME__HID)) { AcpiDmGetHardwareIdType (NextOp); return; } /* Exit if not _CID */ if (!ACPI_COMPARE_NAMESEG (&Name, METHOD_NAME__CID)) { return; } /* _CID can contain a single argument or a package */ if (NextOp->Common.AmlOpcode != AML_PACKAGE_OP) { AcpiDmGetHardwareIdType (NextOp); return; } /* _CID with Package: get the package length, check all elements */ NextOp = AcpiPsGetDepthNext (NULL, NextOp); if (!NextOp) { return; } /* Don't need to use the length, just walk the peer list */ NextOp = NextOp->Common.Next; while (NextOp) { AcpiDmGetHardwareIdType (NextOp); NextOp = NextOp->Common.Next; } } /******************************************************************************* * * FUNCTION: AcpiDmDecompressEisaId * * PARAMETERS: EncodedId - Raw encoded EISA ID. * * RETURN: None * * DESCRIPTION: Convert an encoded EISAID back to the original ASCII String * and emit the correct ASL statement. If the ID is known, emit * a description of the ID as a comment. * ******************************************************************************/ void AcpiDmDecompressEisaId ( UINT32 EncodedId) { char IdBuffer[ACPI_EISAID_STRING_SIZE]; const AH_DEVICE_ID *Info; /* Convert EISAID to a string an emit the statement */ AcpiExEisaIdToString (IdBuffer, EncodedId); AcpiOsPrintf ("EisaId (\"%s\")", IdBuffer); /* If we know about the ID, emit the description */ Info = AcpiAhMatchHardwareId (IdBuffer); if (Info) { AcpiOsPrintf (" /* %s */", Info->Description); } } src/acpica/source/components/disassembler/dmcstyle.c000066400000000000000000001034651465205512700232370ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dmcstyle - Support for C-style operator disassembly * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acdebug.h" #include "acconvert.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dmcstyle") /* Local prototypes */ static char * AcpiDmGetCompoundSymbol ( UINT16 AslOpcode); static void AcpiDmPromoteTarget ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *Target); static BOOLEAN AcpiDmIsValidTarget ( ACPI_PARSE_OBJECT *Op); static BOOLEAN AcpiDmIsTargetAnOperand ( ACPI_PARSE_OBJECT *Target, ACPI_PARSE_OBJECT *Operand, BOOLEAN TopLevel); static BOOLEAN AcpiDmIsOptimizationIgnored ( ACPI_PARSE_OBJECT *StoreOp, ACPI_PARSE_OBJECT *StoreArgument); /******************************************************************************* * * FUNCTION: AcpiDmCheckForSymbolicOpcode * * PARAMETERS: Op - Current parse object * Walk - Current parse tree walk info * * RETURN: TRUE if opcode can be converted to symbolic, FALSE otherwise * * DESCRIPTION: This is the main code that implements disassembly of AML code * to C-style operators. Called during descending phase of the * parse tree walk. * ******************************************************************************/ BOOLEAN AcpiDmCheckForSymbolicOpcode ( ACPI_PARSE_OBJECT *Op, ACPI_OP_WALK_INFO *Info) { char *OperatorSymbol = NULL; ACPI_PARSE_OBJECT *Argument1; ACPI_PARSE_OBJECT *Argument2; ACPI_PARSE_OBJECT *Target; ACPI_PARSE_OBJECT *Target2; /* Exit immediately if ASL+ not enabled */ if (!AcpiGbl_CstyleDisassembly) { return (FALSE); } /* Get the first operand */ Argument1 = AcpiPsGetArg (Op, 0); if (!Argument1) { return (FALSE); } /* Get the second operand */ Argument2 = Argument1->Common.Next; /* Setup the operator string for this opcode */ switch (Op->Common.AmlOpcode) { case AML_ADD_OP: OperatorSymbol = " + "; break; case AML_SUBTRACT_OP: OperatorSymbol = " - "; break; case AML_MULTIPLY_OP: OperatorSymbol = " * "; break; case AML_DIVIDE_OP: OperatorSymbol = " / "; break; case AML_MOD_OP: OperatorSymbol = " % "; break; case AML_SHIFT_LEFT_OP: OperatorSymbol = " << "; break; case AML_SHIFT_RIGHT_OP: OperatorSymbol = " >> "; break; case AML_BIT_AND_OP: OperatorSymbol = " & "; break; case AML_BIT_OR_OP: OperatorSymbol = " | "; break; case AML_BIT_XOR_OP: OperatorSymbol = " ^ "; break; /* Logical operators, no target */ case AML_LOGICAL_AND_OP: OperatorSymbol = " && "; break; case AML_LOGICAL_EQUAL_OP: OperatorSymbol = " == "; break; case AML_LOGICAL_GREATER_OP: OperatorSymbol = " > "; break; case AML_LOGICAL_LESS_OP: OperatorSymbol = " < "; break; case AML_LOGICAL_OR_OP: OperatorSymbol = " || "; break; case AML_LOGICAL_NOT_OP: /* * Check for the LNOT sub-opcodes. These correspond to * LNotEqual, LLessEqual, and LGreaterEqual. There are * no actual AML opcodes for these operators. */ switch (Argument1->Common.AmlOpcode) { case AML_LOGICAL_EQUAL_OP: OperatorSymbol = " != "; break; case AML_LOGICAL_GREATER_OP: OperatorSymbol = " <= "; break; case AML_LOGICAL_LESS_OP: OperatorSymbol = " >= "; break; default: /* Unary LNOT case, emit "!" immediately */ AcpiOsPrintf ("!"); return (TRUE); } Argument1->Common.DisasmOpcode = ACPI_DASM_LNOT_SUFFIX; Op->Common.DisasmOpcode = ACPI_DASM_LNOT_PREFIX; /* Save symbol string in the next child (not peer) */ Argument2 = AcpiPsGetArg (Argument1, 0); if (!Argument2) { return (FALSE); } Argument2->Common.OperatorSymbol = OperatorSymbol; return (TRUE); case AML_INDEX_OP: /* * Check for constant source operand. Note: although technically * legal syntax, the iASL compiler does not support this with * the symbolic operators for Index(). It doesn't make sense to * use Index() with a constant anyway. */ if ((Argument1->Common.AmlOpcode == AML_STRING_OP) || (Argument1->Common.AmlOpcode == AML_BUFFER_OP) || (Argument1->Common.AmlOpcode == AML_PACKAGE_OP) || (Argument1->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP)) { Op->Common.DisasmFlags |= ACPI_PARSEOP_CLOSING_PAREN; return (FALSE); } /* Index operator is [] */ Argument1->Common.OperatorSymbol = " ["; Argument2->Common.OperatorSymbol = "]"; break; /* Unary operators */ case AML_DECREMENT_OP: OperatorSymbol = "--"; break; case AML_INCREMENT_OP: OperatorSymbol = "++"; break; case AML_BIT_NOT_OP: case AML_STORE_OP: OperatorSymbol = NULL; break; default: return (FALSE); } if (Argument1->Common.DisasmOpcode == ACPI_DASM_LNOT_SUFFIX) { return (TRUE); } /* * This is the key to how the disassembly of the C-style operators * works. We save the operator symbol in the first child, thus * deferring symbol output until after the first operand has been * emitted. */ if (!Argument1->Common.OperatorSymbol) { Argument1->Common.OperatorSymbol = OperatorSymbol; } /* * Check for a valid target as the 3rd (or sometimes 2nd) operand * * Compound assignment operator support: * Attempt to optimize constructs of the form: * Add (Local1, 0xFF, Local1) * to: * Local1 += 0xFF * * Only the math operators and Store() have a target. * Logicals have no target. */ switch (Op->Common.AmlOpcode) { case AML_ADD_OP: case AML_SUBTRACT_OP: case AML_MULTIPLY_OP: case AML_DIVIDE_OP: case AML_MOD_OP: case AML_SHIFT_LEFT_OP: case AML_SHIFT_RIGHT_OP: case AML_BIT_AND_OP: case AML_BIT_OR_OP: case AML_BIT_XOR_OP: /* Target is 3rd operand */ Target = Argument2->Common.Next; if (Op->Common.AmlOpcode == AML_DIVIDE_OP) { Target2 = Target->Common.Next; /* * Divide has an extra target operand (Remainder). * Default behavior is to simply ignore ASL+ conversion * if the remainder target (modulo) is specified. */ if (!AcpiGbl_DoDisassemblerOptimizations) { if (AcpiDmIsValidTarget (Target)) { Argument1->Common.OperatorSymbol = NULL; Op->Common.DisasmFlags |= ACPI_PARSEOP_LEGACY_ASL_ONLY; return (FALSE); } Target->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; Target = Target2; } else { /* * Divide has an extra target operand (Remainder). * If both targets are specified, it cannot be converted * to a C-style operator. */ if (AcpiDmIsValidTarget (Target) && AcpiDmIsValidTarget (Target2)) { Argument1->Common.OperatorSymbol = NULL; Op->Common.DisasmFlags |= ACPI_PARSEOP_LEGACY_ASL_ONLY; return (FALSE); } if (AcpiDmIsValidTarget (Target)) /* Only first Target is valid (remainder) */ { /* Convert the Divide to Modulo */ Op->Common.AmlOpcode = AML_MOD_OP; Argument1->Common.OperatorSymbol = " % "; Target2->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; } else /* Only second Target (quotient) is valid */ { Target->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; Target = Target2; } } } /* Parser should ensure there is at least a placeholder target */ if (!Target) { return (FALSE); } if (!AcpiDmIsValidTarget (Target)) { /* Not a valid target (placeholder only, from parser) */ break; } /* * Promote the target up to the first child in the parse * tree. This is done because the target will be output * first, in the form: * = Operands... */ AcpiDmPromoteTarget (Op, Target); /* Check operands for conversion to a "Compound Assignment" */ switch (Op->Common.AmlOpcode) { /* Commutative operators */ case AML_ADD_OP: case AML_MULTIPLY_OP: case AML_BIT_AND_OP: case AML_BIT_OR_OP: case AML_BIT_XOR_OP: /* * For the commutative operators, we can convert to a * compound statement only if at least one (either) operand * is the same as the target. * * Add (A, B, A) --> A += B * Add (B, A, A) --> A += B * Add (B, C, A) --> A = (B + C) */ if ((AcpiDmIsTargetAnOperand (Target, Argument1, TRUE)) || (AcpiDmIsTargetAnOperand (Target, Argument2, TRUE))) { Target->Common.OperatorSymbol = AcpiDmGetCompoundSymbol (Op->Common.AmlOpcode); /* Convert operator to compound assignment */ Op->Common.DisasmFlags |= ACPI_PARSEOP_COMPOUND_ASSIGNMENT; Argument1->Common.OperatorSymbol = NULL; return (TRUE); } break; /* Non-commutative operators */ case AML_SUBTRACT_OP: case AML_DIVIDE_OP: case AML_MOD_OP: case AML_SHIFT_LEFT_OP: case AML_SHIFT_RIGHT_OP: /* * For the non-commutative operators, we can convert to a * compound statement only if the target is the same as the * first operand. * * Subtract (A, B, A) --> A -= B * Subtract (B, A, A) --> A = (B - A) */ if ((AcpiDmIsTargetAnOperand (Target, Argument1, TRUE))) { Target->Common.OperatorSymbol = AcpiDmGetCompoundSymbol (Op->Common.AmlOpcode); /* Convert operator to compound assignment */ Op->Common.DisasmFlags |= ACPI_PARSEOP_COMPOUND_ASSIGNMENT; Argument1->Common.OperatorSymbol = NULL; return (TRUE); } break; default: break; } /* * If we are within a C-style expression, emit an extra open * paren. Implemented by examining the parent op. */ switch (Op->Common.Parent->Common.AmlOpcode) { case AML_ADD_OP: case AML_SUBTRACT_OP: case AML_MULTIPLY_OP: case AML_DIVIDE_OP: case AML_MOD_OP: case AML_SHIFT_LEFT_OP: case AML_SHIFT_RIGHT_OP: case AML_BIT_AND_OP: case AML_BIT_OR_OP: case AML_BIT_XOR_OP: case AML_LOGICAL_AND_OP: case AML_LOGICAL_EQUAL_OP: case AML_LOGICAL_GREATER_OP: case AML_LOGICAL_LESS_OP: case AML_LOGICAL_OR_OP: Op->Common.DisasmFlags |= ACPI_PARSEOP_ASSIGNMENT; AcpiOsPrintf ("("); break; default: break; } /* Normal output for ASL/AML operators with a target operand */ Target->Common.OperatorSymbol = " = ("; return (TRUE); /* Binary operators, no parens */ case AML_DECREMENT_OP: case AML_INCREMENT_OP: return (TRUE); case AML_INDEX_OP: /* Target is optional, 3rd operand */ Target = Argument2->Common.Next; if (AcpiDmIsValidTarget (Target)) { AcpiDmPromoteTarget (Op, Target); if (!Target->Common.OperatorSymbol) { Target->Common.OperatorSymbol = " = "; } } return (TRUE); case AML_STORE_OP: /* * For Store, the Target is the 2nd operand. We know the target * is valid, because it is not optional. * * Ignore any optimizations/folding if flag is set. * Used for iASL/disassembler test suite only. */ if (AcpiDmIsOptimizationIgnored (Op, Argument1)) { return (FALSE); } /* * Perform conversion. * In the parse tree, simply swap the target with the * source so that the target is processed first. */ Target = Argument1->Common.Next; if (!Target) { return (FALSE); } AcpiDmPromoteTarget (Op, Target); if (!Target->Common.OperatorSymbol) { Target->Common.OperatorSymbol = " = "; } return (TRUE); case AML_BIT_NOT_OP: /* Target is optional, 2nd operand */ Target = Argument1->Common.Next; if (!Target) { return (FALSE); } if (AcpiDmIsValidTarget (Target)) { /* Valid target, not a placeholder */ AcpiDmPromoteTarget (Op, Target); Target->Common.OperatorSymbol = " = ~"; } else { /* No target. Emit this prefix operator immediately */ AcpiOsPrintf ("~"); } return (TRUE); default: break; } /* All other operators, emit an open paren */ AcpiOsPrintf ("("); return (TRUE); } /******************************************************************************* * * FUNCTION: AcpiDmIsOptimizationIgnored * * PARAMETERS: StoreOp - Store operator parse object * StoreArgument - Target associate with the Op * * RETURN: TRUE if this Store operator should not be converted/removed. * * DESCRIPTION: The following function implements "Do not optimize if a * store is immediately followed by a math/bit operator that * has no target". * * Function is ignored if DoDisassemblerOptimizations is TRUE. * This is the default, ignore this function. * * Disables these types of optimizations, and simply emits * legacy ASL code: * Store (Add (INT1, 4), INT2) --> Add (INT1, 4, INT2) * --> INT2 = INT1 + 4 * * Store (Not (INT1), INT2) --> Not (INT1, INT2) * --> INT2 = ~INT1 * * Used only for the ASL test suite. For the test suite, we * don't want to perform some optimizations to ensure binary * compatibility with the generation of the legacy ASL->AML. * In other words, for all test modules we want exactly: * (ASL+ -> AML) == (ASL- -> AML) * ******************************************************************************/ static BOOLEAN AcpiDmIsOptimizationIgnored ( ACPI_PARSE_OBJECT *StoreOp, ACPI_PARSE_OBJECT *StoreArgument) { ACPI_PARSE_OBJECT *Argument1; ACPI_PARSE_OBJECT *Argument2; ACPI_PARSE_OBJECT *Target; /* No optimizations/folding for the typical case */ if (AcpiGbl_DoDisassemblerOptimizations) { return (FALSE); } /* * Only a small subset of ASL/AML operators can be optimized. * Can only optimize/fold if there is no target (or targets) * specified for the operator. And of course, the operator * is surrounded by a Store() operator. */ switch (StoreArgument->Common.AmlOpcode) { case AML_ADD_OP: case AML_SUBTRACT_OP: case AML_MULTIPLY_OP: case AML_MOD_OP: case AML_SHIFT_LEFT_OP: case AML_SHIFT_RIGHT_OP: case AML_BIT_AND_OP: case AML_BIT_OR_OP: case AML_BIT_XOR_OP: case AML_INDEX_OP: /* These operators have two arguments and one target */ Argument1 = StoreArgument->Common.Value.Arg; Argument2 = Argument1->Common.Next; Target = Argument2->Common.Next; if (!AcpiDmIsValidTarget (Target)) { StoreOp->Common.DisasmFlags |= ACPI_PARSEOP_LEGACY_ASL_ONLY; return (TRUE); } break; case AML_DIVIDE_OP: /* This operator has two arguments and two targets */ Argument1 = StoreArgument->Common.Value.Arg; Argument2 = Argument1->Common.Next; Target = Argument2->Common.Next; if (!AcpiDmIsValidTarget (Target) || !AcpiDmIsValidTarget (Target->Common.Next)) { StoreOp->Common.DisasmFlags |= ACPI_PARSEOP_LEGACY_ASL_ONLY; return (TRUE); } break; case AML_BIT_NOT_OP: /* This operator has one operand and one target */ Argument1 = StoreArgument->Common.Value.Arg; Target = Argument1->Common.Next; if (!AcpiDmIsValidTarget (Target)) { StoreOp->Common.DisasmFlags |= ACPI_PARSEOP_LEGACY_ASL_ONLY; return (TRUE); } break; default: break; } return (FALSE); } /******************************************************************************* * * FUNCTION: AcpiDmCloseOperator * * PARAMETERS: Op - Current parse object * * RETURN: None * * DESCRIPTION: Closes an operator by adding a closing parentheses if and * when necessary. Called during ascending phase of the * parse tree walk. * ******************************************************************************/ void AcpiDmCloseOperator ( ACPI_PARSE_OBJECT *Op) { /* Always emit paren if ASL+ disassembly disabled */ if (!AcpiGbl_CstyleDisassembly) { AcpiOsPrintf (")"); ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0); return; } if (Op->Common.DisasmFlags & ACPI_PARSEOP_LEGACY_ASL_ONLY) { AcpiOsPrintf (")"); ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0); return; } /* Check if we need to add an additional closing paren */ switch (Op->Common.AmlOpcode) { case AML_ADD_OP: case AML_SUBTRACT_OP: case AML_MULTIPLY_OP: case AML_DIVIDE_OP: case AML_MOD_OP: case AML_SHIFT_LEFT_OP: case AML_SHIFT_RIGHT_OP: case AML_BIT_AND_OP: case AML_BIT_OR_OP: case AML_BIT_XOR_OP: case AML_LOGICAL_AND_OP: case AML_LOGICAL_EQUAL_OP: case AML_LOGICAL_GREATER_OP: case AML_LOGICAL_LESS_OP: case AML_LOGICAL_OR_OP: /* Emit paren only if this is not a compound assignment */ if (Op->Common.DisasmFlags & ACPI_PARSEOP_COMPOUND_ASSIGNMENT) { ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0); return; } /* Emit extra close paren for assignment within an expression */ if (Op->Common.DisasmFlags & ACPI_PARSEOP_ASSIGNMENT) { AcpiOsPrintf (")"); } break; case AML_INDEX_OP: /* This is case for unsupported Index() source constants */ if (Op->Common.DisasmFlags & ACPI_PARSEOP_CLOSING_PAREN) { AcpiOsPrintf (")"); } ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0); return; /* No need for parens for these */ case AML_DECREMENT_OP: case AML_INCREMENT_OP: case AML_LOGICAL_NOT_OP: case AML_BIT_NOT_OP: case AML_STORE_OP: ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0); return; default: /* Always emit paren for non-ASL+ operators */ break; } AcpiOsPrintf (")"); ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0); return; } /******************************************************************************* * * FUNCTION: AcpiDmGetCompoundSymbol * * PARAMETERS: AslOpcode * * RETURN: String containing the compound assignment symbol * * DESCRIPTION: Detect opcodes that can be converted to compound assignment, * return the appropriate operator string. * ******************************************************************************/ static char * AcpiDmGetCompoundSymbol ( UINT16 AmlOpcode) { char *Symbol; switch (AmlOpcode) { case AML_ADD_OP: Symbol = " += "; break; case AML_SUBTRACT_OP: Symbol = " -= "; break; case AML_MULTIPLY_OP: Symbol = " *= "; break; case AML_DIVIDE_OP: Symbol = " /= "; break; case AML_MOD_OP: Symbol = " %= "; break; case AML_SHIFT_LEFT_OP: Symbol = " <<= "; break; case AML_SHIFT_RIGHT_OP: Symbol = " >>= "; break; case AML_BIT_AND_OP: Symbol = " &= "; break; case AML_BIT_OR_OP: Symbol = " |= "; break; case AML_BIT_XOR_OP: Symbol = " ^= "; break; default: /* No operator string for all other opcodes */ return (NULL); } return (Symbol); } /******************************************************************************* * * FUNCTION: AcpiDmPromoteTarget * * PARAMETERS: Op - Operator parse object * Target - Target associate with the Op * * RETURN: None * * DESCRIPTION: Transform the parse tree by moving the target up to the first * child of the Op. * ******************************************************************************/ static void AcpiDmPromoteTarget ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *Target) { ACPI_PARSE_OBJECT *Child; /* Link target directly to the Op as first child */ Child = Op->Common.Value.Arg; Op->Common.Value.Arg = Target; Target->Common.Next = Child; /* Find the last peer, it is linked to the target. Unlink it. */ while (Child->Common.Next != Target) { Child = Child->Common.Next; } Child->Common.Next = NULL; } /******************************************************************************* * * FUNCTION: AcpiDmIsValidTarget * * PARAMETERS: Target - Target Op from the parse tree * * RETURN: TRUE if the Target is real. FALSE if it is just a placeholder * Op that was inserted by the parser. * * DESCRIPTION: Determine if a Target Op is a placeholder Op or a real Target. * In other words, determine if the optional target is used or * not. Note: If Target is NULL, something is seriously wrong, * probably with the parse tree. * ******************************************************************************/ static BOOLEAN AcpiDmIsValidTarget ( ACPI_PARSE_OBJECT *Target) { if (!Target) { return (FALSE); } if ((Target->Common.AmlOpcode == AML_INT_NAMEPATH_OP) && (Target->Common.Value.Arg == NULL)) { return (FALSE); } return (TRUE); } /******************************************************************************* * * FUNCTION: AcpiDmIsTargetAnOperand * * PARAMETERS: Target - Target associated with the expression * Operand - An operand associated with expression * * RETURN: TRUE if expression can be converted to a compound assignment. * FALSE otherwise. * * DESCRIPTION: Determine if the Target duplicates the operand, in order to * detect if the expression can be converted to a compound * assignment. (+=, *=, etc.) * ******************************************************************************/ static BOOLEAN AcpiDmIsTargetAnOperand ( ACPI_PARSE_OBJECT *Target, ACPI_PARSE_OBJECT *Operand, BOOLEAN TopLevel) { const ACPI_OPCODE_INFO *OpInfo; BOOLEAN Same; /* * Opcodes must match. Note: ignoring the difference between nameseg * and namepath for now. May be needed later. */ if (Target->Common.AmlOpcode != Operand->Common.AmlOpcode) { return (FALSE); } /* Nodes should match, even if they are NULL */ if (Target->Common.Node != Operand->Common.Node) { return (FALSE); } /* Determine if a child exists */ OpInfo = AcpiPsGetOpcodeInfo (Operand->Common.AmlOpcode); if (OpInfo->Flags & AML_HAS_ARGS) { Same = AcpiDmIsTargetAnOperand (Target->Common.Value.Arg, Operand->Common.Value.Arg, FALSE); if (!Same) { return (FALSE); } } /* Check the next peer, as long as we are not at the top level */ if ((!TopLevel) && Target->Common.Next) { Same = AcpiDmIsTargetAnOperand (Target->Common.Next, Operand->Common.Next, FALSE); if (!Same) { return (FALSE); } } /* Suppress the duplicate operand at the top-level */ if (TopLevel) { Operand->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; } return (TRUE); } src/acpica/source/components/disassembler/dmdeferred.c000066400000000000000000000330301465205512700235020ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dmdeferred - Disassembly of deferred AML opcodes * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdispat.h" #include "amlcode.h" #include "acdisasm.h" #include "acparser.h" #define _COMPONENT ACPI_CA_DISASSEMBLER ACPI_MODULE_NAME ("dmdeferred") /* Local prototypes */ static ACPI_STATUS AcpiDmDeferredParse ( ACPI_PARSE_OBJECT *Op, UINT8 *Aml, UINT32 AmlLength); /****************************************************************************** * * FUNCTION: AcpiDmParseDeferredOps * * PARAMETERS: Root - Root of the parse tree * * RETURN: Status * * DESCRIPTION: Parse the deferred opcodes (Methods, regions, etc.) * *****************************************************************************/ ACPI_STATUS AcpiDmParseDeferredOps ( ACPI_PARSE_OBJECT *Root) { const ACPI_OPCODE_INFO *OpInfo; ACPI_PARSE_OBJECT *Op = Root; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (DmParseDeferredOps); /* Traverse the entire parse tree */ while (Op) { OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); if (!(OpInfo->Flags & AML_DEFER)) { Op = AcpiPsGetDepthNext (Root, Op); continue; } /* Now we know we have a deferred opcode */ switch (Op->Common.AmlOpcode) { case AML_METHOD_OP: case AML_BUFFER_OP: case AML_PACKAGE_OP: case AML_VARIABLE_PACKAGE_OP: Status = AcpiDmDeferredParse ( Op, Op->Named.Data, Op->Named.Length); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } break; /* We don't need to do anything for these deferred opcodes */ case AML_REGION_OP: case AML_DATA_REGION_OP: case AML_CREATE_QWORD_FIELD_OP: case AML_CREATE_DWORD_FIELD_OP: case AML_CREATE_WORD_FIELD_OP: case AML_CREATE_BYTE_FIELD_OP: case AML_CREATE_BIT_FIELD_OP: case AML_CREATE_FIELD_OP: case AML_BANK_FIELD_OP: break; default: ACPI_ERROR ((AE_INFO, "Unhandled deferred AML opcode [0x%.4X]", Op->Common.AmlOpcode)); break; } Op = AcpiPsGetDepthNext (Root, Op); } return_ACPI_STATUS (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiDmDeferredParse * * PARAMETERS: Op - Root Op of the deferred opcode * Aml - Pointer to the raw AML * AmlLength - Length of the AML * * RETURN: Status * * DESCRIPTION: Parse one deferred opcode * (Methods, operation regions, etc.) * *****************************************************************************/ static ACPI_STATUS AcpiDmDeferredParse ( ACPI_PARSE_OBJECT *Op, UINT8 *Aml, UINT32 AmlLength) { ACPI_WALK_STATE *WalkState; ACPI_STATUS Status; ACPI_PARSE_OBJECT *SearchOp; ACPI_PARSE_OBJECT *StartOp; ACPI_PARSE_OBJECT *NewRootOp; ACPI_PARSE_OBJECT *ExtraOp; ACPI_FUNCTION_TRACE (DmDeferredParse); if (!Aml || !AmlLength) { return_ACPI_STATUS (AE_OK); } ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Parsing deferred opcode %s [%4.4s]\n", Op->Common.AmlOpName, (char *) &Op->Named.Name)); /* Need a new walk state to parse the AML */ WalkState = AcpiDsCreateWalkState (0, Op, NULL, NULL); if (!WalkState) { return_ACPI_STATUS (AE_NO_MEMORY); } Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, Aml, AmlLength, NULL, ACPI_IMODE_LOAD_PASS1); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Parse the AML for this deferred opcode */ WalkState->ParseFlags &= ~ACPI_PARSE_DELETE_TREE; WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE; Status = AcpiPsParseAml (WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS(Status); } StartOp = (Op->Common.Value.Arg)->Common.Next; SearchOp = StartOp; while (SearchOp) { SearchOp = AcpiPsGetDepthNext (StartOp, SearchOp); } /* * For Buffer and Package opcodes, link the newly parsed subtree * into the main parse tree */ switch (Op->Common.AmlOpcode) { case AML_BUFFER_OP: case AML_PACKAGE_OP: case AML_VARIABLE_PACKAGE_OP: switch (Op->Common.AmlOpcode) { case AML_PACKAGE_OP: ExtraOp = Op->Common.Value.Arg; NewRootOp = ExtraOp->Common.Next; ACPI_FREE (ExtraOp); break; case AML_VARIABLE_PACKAGE_OP: case AML_BUFFER_OP: default: NewRootOp = Op->Common.Value.Arg; break; } Op->Common.Value.Arg = NewRootOp->Common.Value.Arg; /* Must point all parents to the main tree */ StartOp = Op; SearchOp = StartOp; while (SearchOp) { if (SearchOp->Common.Parent == NewRootOp) { SearchOp->Common.Parent = Op; } SearchOp = AcpiPsGetDepthNext (StartOp, SearchOp); } ACPI_FREE (NewRootOp); break; default: break; } return_ACPI_STATUS (AE_OK); } src/acpica/source/components/disassembler/dmnames.c000066400000000000000000000432131465205512700230310ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dmnames - AML disassembler, names, namestrings, pathnames * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "amlcode.h" #include "acnamesp.h" #include "acdisasm.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dmnames") /* Local prototypes */ #ifdef ACPI_OBSOLETE_FUNCTIONS void AcpiDmDisplayPath ( ACPI_PARSE_OBJECT *Op); #endif /******************************************************************************* * * FUNCTION: AcpiDmDumpName * * PARAMETERS: Name - 4 character ACPI name * * RETURN: Final length of name * * DESCRIPTION: Dump an ACPI name, minus any trailing underscores. * ******************************************************************************/ UINT32 AcpiDmDumpName ( UINT32 Name) { UINT32 i; UINT32 Length; char NewName[4]; /* Copy name locally in case the original name is not writeable */ *ACPI_CAST_PTR (UINT32, &NewName[0]) = Name; /* Ensure that the name is printable, even if we have to fix it */ AcpiUtRepairName (NewName); /* Remove all trailing underscores from the name */ Length = ACPI_NAMESEG_SIZE; for (i = (ACPI_NAMESEG_SIZE - 1); i != 0; i--) { if (NewName[i] == '_') { Length--; } else { break; } } /* Dump the name, up to the start of the trailing underscores */ for (i = 0; i < Length; i++) { AcpiOsPrintf ("%c", NewName[i]); } return (Length); } /******************************************************************************* * * FUNCTION: AcpiPsDisplayObjectPathname * * PARAMETERS: WalkState - Current walk state * Op - Object whose pathname is to be obtained * * RETURN: Status * * DESCRIPTION: Display the pathname associated with a named object. Two * versions. One searches the parse tree (for parser-only * applications suchas AcpiDump), and the other searches the * ACPI namespace (the parse tree is probably deleted) * ******************************************************************************/ ACPI_STATUS AcpiPsDisplayObjectPathname ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_BUFFER Buffer; UINT32 DebugLevel; /* Save current debug level so we don't get extraneous debug output */ DebugLevel = AcpiDbgLevel; AcpiDbgLevel = 0; /* Just get the Node out of the Op object */ Node = Op->Common.Node; if (!Node) { /* Node not defined in this scope, look it up */ Status = AcpiNsLookup (WalkState->ScopeInfo, Op->Common.Value.String, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &(Node)); if (ACPI_FAILURE (Status)) { /* * We can't get the pathname since the object is not in the * namespace. This can happen during single stepping * where a dynamic named object is *about* to be created. */ AcpiOsPrintf (" [Path not found]"); goto Exit; } /* Save it for next time. */ Op->Common.Node = Node; } /* Convert NamedDesc/handle to a full pathname */ Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiNsHandleToPathname (Node, &Buffer, FALSE); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("****Could not get pathname****)"); goto Exit; } AcpiOsPrintf (" (Path %s)", (char *) Buffer.Pointer); ACPI_FREE (Buffer.Pointer); Exit: /* Restore the debug level */ AcpiDbgLevel = DebugLevel; return (Status); } /******************************************************************************* * * FUNCTION: AcpiDmNamestring * * PARAMETERS: Name - ACPI Name string to store * * RETURN: None * * DESCRIPTION: Decode and dump an ACPI namestring. Handles prefix characters * ******************************************************************************/ void AcpiDmNamestring ( char *Name) { UINT32 SegCount; if (!Name) { return; } /* Handle all Scope Prefix operators */ while (ACPI_IS_ROOT_PREFIX (ACPI_GET8 (Name)) || ACPI_IS_PARENT_PREFIX (ACPI_GET8 (Name))) { /* Append prefix character */ AcpiOsPrintf ("%1c", ACPI_GET8 (Name)); Name++; } switch (ACPI_GET8 (Name)) { case 0: SegCount = 0; break; case AML_DUAL_NAME_PREFIX: SegCount = 2; Name++; break; case AML_MULTI_NAME_PREFIX: SegCount = (UINT32) ACPI_GET8 (Name + 1); Name += 2; break; default: SegCount = 1; break; } while (SegCount) { /* Append Name segment */ AcpiDmDumpName (*ACPI_CAST_PTR (UINT32, Name)); SegCount--; if (SegCount) { /* Not last name, append dot separator */ AcpiOsPrintf ("."); } Name += ACPI_NAMESEG_SIZE; } } #ifdef ACPI_OBSOLETE_FUNCTIONS /******************************************************************************* * * FUNCTION: AcpiDmDisplayPath * * PARAMETERS: Op - Named Op whose path is to be constructed * * RETURN: None * * DESCRIPTION: Walk backwards from current scope and display the name * of each previous level of scope up to the root scope * (like "pwd" does with file systems) * ******************************************************************************/ void AcpiDmDisplayPath ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Prev; ACPI_PARSE_OBJECT *Search; UINT32 Name; BOOLEAN DoDot = FALSE; ACPI_PARSE_OBJECT *NamePath; const ACPI_OPCODE_INFO *OpInfo; /* We are only interested in named objects */ OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); if (!(OpInfo->Flags & AML_NSNODE)) { return; } if (OpInfo->Flags & AML_CREATE) { /* Field creation - check for a fully qualified namepath */ if (Op->Common.AmlOpcode == AML_CREATE_FIELD_OP) { NamePath = AcpiPsGetArg (Op, 3); } else { NamePath = AcpiPsGetArg (Op, 2); } if ((NamePath) && (NamePath->Common.Value.String) && (ACPI_IS_ROOT_PREFIX (NamePath->Common.Value.String[0]))) { AcpiDmNamestring (NamePath->Common.Value.String); return; } } Prev = NULL; /* Start with Root Node */ while (Prev != Op) { /* Search upwards in the tree to find scope with "prev" as its parent */ Search = Op; for (; ;) { if (Search->Common.Parent == Prev) { break; } /* Go up one level */ Search = Search->Common.Parent; } if (Prev) { OpInfo = AcpiPsGetOpcodeInfo (Search->Common.AmlOpcode); if (!(OpInfo->Flags & AML_FIELD)) { /* Below root scope, append scope name */ if (DoDot) { /* Append dot */ AcpiOsPrintf ("."); } if (OpInfo->Flags & AML_CREATE) { if (Op->Common.AmlOpcode == AML_CREATE_FIELD_OP) { NamePath = AcpiPsGetArg (Op, 3); } else { NamePath = AcpiPsGetArg (Op, 2); } if ((NamePath) && (NamePath->Common.Value.String)) { AcpiDmDumpName (NamePath->Common.Value.String); } } else { Name = AcpiPsGetName (Search); AcpiDmDumpName ((char *) &Name); } DoDot = TRUE; } } Prev = Search; } } /******************************************************************************* * * FUNCTION: AcpiDmValidateName * * PARAMETERS: Name - 4 character ACPI name * * RETURN: None * * DESCRIPTION: Lookup the name * ******************************************************************************/ void AcpiDmValidateName ( char *Name, ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *TargetOp; if ((!Name) || (!Op->Common.Parent)) { return; } if (!Op->Common.Node) { AcpiOsPrintf ( " /**** Name not found or not accessible from this scope ****/ "); } if ((!Name) || (!Op->Common.Parent)) { return; } TargetOp = AcpiPsFind (Op, Name, 0, 0); if (!TargetOp) { /* * Didn't find the name in the parse tree. This may be * a problem, or it may simply be one of the predefined names * (such as _OS_). Rather than worry about looking up all * the predefined names, just display the name as given */ AcpiOsPrintf ( " /**** Name not found or not accessible from this scope ****/ "); } } #endif src/acpica/source/components/disassembler/dmopcode.c000066400000000000000000001113471465205512700232030ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dmopcode - AML disassembler, specific AML opcodes * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acinterp.h" #include "acnamesp.h" #include "acdebug.h" #include "acconvert.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dmopcode") /* Local prototypes */ static void AcpiDmMatchKeyword ( ACPI_PARSE_OBJECT *Op); static void AcpiDmConvertToElseIf ( ACPI_PARSE_OBJECT *Op); static void AcpiDmPromoteSubtree ( ACPI_PARSE_OBJECT *StartOp); /******************************************************************************* * * FUNCTION: AcpiDmDisplayTargetPathname * * PARAMETERS: Op - Parse object * * RETURN: None * * DESCRIPTION: For AML opcodes that have a target operand, display the full * pathname for the target, in a comment field. Handles Return() * statements also. * ******************************************************************************/ void AcpiDmDisplayTargetPathname ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *NextOp; ACPI_PARSE_OBJECT *PrevOp = NULL; char *Pathname; const ACPI_OPCODE_INFO *OpInfo; if (Op->Common.AmlOpcode == AML_RETURN_OP) { PrevOp = Op->Asl.Value.Arg; } else { OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); if (!(OpInfo->Flags & AML_HAS_TARGET)) { return; } /* Target is the last Op in the arg list */ NextOp = Op->Asl.Value.Arg; while (NextOp) { PrevOp = NextOp; NextOp = PrevOp->Asl.Next; } } if (!PrevOp) { return; } /* We must have a namepath AML opcode */ if (PrevOp->Asl.AmlOpcode != AML_INT_NAMEPATH_OP) { return; } /* A null string is the "no target specified" case */ if (!PrevOp->Asl.Value.String) { return; } /* No node means "unresolved external reference" */ if (!PrevOp->Asl.Node) { AcpiOsPrintf (" /* External reference */"); return; } /* Ignore if path is already from the root */ if (*PrevOp->Asl.Value.String == '\\') { return; } /* Now: we can get the full pathname */ Pathname = AcpiNsGetExternalPathname (PrevOp->Asl.Node); if (!Pathname) { return; } AcpiOsPrintf (" /* %s */", Pathname); ACPI_FREE (Pathname); } /******************************************************************************* * * FUNCTION: AcpiDmNotifyDescription * * PARAMETERS: Op - Name() parse object * * RETURN: None * * DESCRIPTION: Emit a description comment for the value associated with a * Notify() operator. * ******************************************************************************/ void AcpiDmNotifyDescription ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *NextOp; ACPI_NAMESPACE_NODE *Node; UINT8 NotifyValue; UINT8 Type = ACPI_TYPE_ANY; /* The notify value is the second argument */ NextOp = Op->Asl.Value.Arg; NextOp = NextOp->Asl.Next; switch (NextOp->Common.AmlOpcode) { case AML_ZERO_OP: case AML_ONE_OP: NotifyValue = (UINT8) NextOp->Common.AmlOpcode; break; case AML_BYTE_OP: NotifyValue = (UINT8) NextOp->Asl.Value.Integer; break; default: return; } /* * Attempt to get the namespace node so we can determine the object type. * Some notify values are dependent on the object type (Device, Thermal, * or Processor). */ Node = Op->Asl.Node; if (Node) { Type = Node->Type; } AcpiOsPrintf (" // %s", AcpiUtGetNotifyName (NotifyValue, Type)); } /******************************************************************************* * * 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_PREDEFINED_CHECKED) { return; } Op->Common.DisasmFlags |= ACPI_PARSEOP_PREDEFINED_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 = (isdigit ((int) NameString[3])); /* d */ LastCharsAreHex = (isxdigit ((int) NameString[2]) && /* xx */ isxdigit ((int) 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 */ Info = AcpiAhMatchPredefinedName (NameString); if (Info) { AcpiOsPrintf (" // %4.4s: %s", NameString, ACPI_CAST_PTR (char, Info->Description)); } #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_PREDEFINED_CHECKED) { return; } Op->Common.DisasmFlags |= ACPI_PARSEOP_PREDEFINED_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); if (!Tag || (*Tag == 0)) { return; } /* Is the tag a predefined name? */ Info = AcpiAhMatchPredefinedName (Tag); if (!Info) { /* Not a predefined name (does not start with underscore) */ return; } AcpiOsPrintf (" // %4.4s: %s", Tag, ACPI_CAST_PTR (char, Info->Description)); /* String contains the prefix path, free it */ ACPI_FREE (IndexOp->Common.Value.String); IndexOp->Common.Value.String = NULL; #endif return; } /******************************************************************************* * * FUNCTION: AcpiDmMethodFlags * * PARAMETERS: Op - Method Object to be examined * * RETURN: None * * DESCRIPTION: Decode control method flags * ******************************************************************************/ void AcpiDmMethodFlags ( ACPI_PARSE_OBJECT *Op) { UINT32 Flags; UINT32 Args; /* The next Op contains the flags */ Op = AcpiPsGetDepthNext (NULL, Op); Flags = (UINT8) Op->Common.Value.Integer; Args = Flags & 0x07; /* Mark the Op as completed */ Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; /* 1) Method argument count */ AcpiOsPrintf (", %u, ", Args); /* 2) Serialize rule */ if (!(Flags & 0x08)) { AcpiOsPrintf ("Not"); } AcpiOsPrintf ("Serialized"); /* 3) SyncLevel */ if (Flags & 0xF0) { AcpiOsPrintf (", %u", Flags >> 4); } } /******************************************************************************* * * FUNCTION: AcpiDmFieldFlags * * PARAMETERS: Op - Field Object to be examined * * RETURN: None * * DESCRIPTION: Decode Field definition flags * ******************************************************************************/ void AcpiDmFieldFlags ( ACPI_PARSE_OBJECT *Op) { UINT32 Flags; Op = Op->Common.Next; Flags = (UINT8) Op->Common.Value.Integer; /* Mark the Op as completed */ Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; AcpiOsPrintf ("%s, ", AcpiGbl_AccessTypes [Flags & 0x07]); AcpiOsPrintf ("%s, ", AcpiGbl_LockRule [(Flags & 0x10) >> 4]); AcpiOsPrintf ("%s)", AcpiGbl_UpdateRules [(Flags & 0x60) >> 5]); } /******************************************************************************* * * FUNCTION: AcpiDmAddressSpace * * PARAMETERS: SpaceId - ID to be translated * * RETURN: None * * DESCRIPTION: Decode a SpaceId to an AddressSpaceKeyword * ******************************************************************************/ void AcpiDmAddressSpace ( UINT8 SpaceId) { if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS) { if (SpaceId == 0x7F) { AcpiOsPrintf ("FFixedHW, "); } else { AcpiOsPrintf ("0x%.2X, ", SpaceId); } } else { AcpiOsPrintf ("%s, ", AcpiGbl_RegionTypes [SpaceId]); } } /******************************************************************************* * * FUNCTION: AcpiDmRegionFlags * * PARAMETERS: Op - Object to be examined * * RETURN: None * * DESCRIPTION: Decode OperationRegion flags * ******************************************************************************/ void AcpiDmRegionFlags ( ACPI_PARSE_OBJECT *Op) { /* The next Op contains the SpaceId */ Op = AcpiPsGetDepthNext (NULL, Op); /* Mark the Op as completed */ Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; AcpiOsPrintf (", "); AcpiDmAddressSpace ((UINT8) Op->Common.Value.Integer); } /******************************************************************************* * * FUNCTION: AcpiDmMatchOp * * PARAMETERS: Op - Match Object to be examined * * RETURN: None * * DESCRIPTION: Decode Match opcode operands * ******************************************************************************/ void AcpiDmMatchOp ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *NextOp; NextOp = AcpiPsGetDepthNext (NULL, Op); NextOp = NextOp->Common.Next; if (!NextOp) { /* Handle partial tree during single-step */ return; } /* Mark the two nodes that contain the encoding for the match keywords */ NextOp->Common.DisasmOpcode = ACPI_DASM_MATCHOP; NextOp = NextOp->Common.Next; NextOp = NextOp->Common.Next; NextOp->Common.DisasmOpcode = ACPI_DASM_MATCHOP; } /******************************************************************************* * * FUNCTION: AcpiDmMatchKeyword * * PARAMETERS: Op - Match Object to be examined * * RETURN: None * * DESCRIPTION: Decode Match opcode operands * ******************************************************************************/ static void AcpiDmMatchKeyword ( ACPI_PARSE_OBJECT *Op) { if (((UINT32) Op->Common.Value.Integer) > ACPI_MAX_MATCH_OPCODE) { AcpiOsPrintf ("/* Unknown Match Keyword encoding */"); } else { AcpiOsPrintf ("%s", AcpiGbl_MatchOps[(ACPI_SIZE) Op->Common.Value.Integer]); } } /******************************************************************************* * * FUNCTION: AcpiDmDisassembleOneOp * * PARAMETERS: WalkState - Current walk info * Info - Parse tree walk info * Op - Op that is to be printed * * RETURN: None * * DESCRIPTION: Disassemble a single AML opcode * ******************************************************************************/ void AcpiDmDisassembleOneOp ( ACPI_WALK_STATE *WalkState, ACPI_OP_WALK_INFO *Info, ACPI_PARSE_OBJECT *Op) { const ACPI_OPCODE_INFO *OpInfo = NULL; UINT32 Offset; UINT32 Length; ACPI_PARSE_OBJECT *Child; ACPI_STATUS Status; UINT8 *Aml; const AH_DEVICE_ID *IdInfo; if (!Op) { AcpiOsPrintf (""); return; } if (Op->Common.DisasmFlags & ACPI_PARSEOP_ELSEIF) { return; /* ElseIf macro was already emitted */ } switch (Op->Common.DisasmOpcode) { case ACPI_DASM_MATCHOP: AcpiDmMatchKeyword (Op); return; case ACPI_DASM_LNOT_SUFFIX: if (!AcpiGbl_CstyleDisassembly) { switch (Op->Common.AmlOpcode) { case AML_LOGICAL_EQUAL_OP: AcpiOsPrintf ("LNotEqual"); break; case AML_LOGICAL_GREATER_OP: AcpiOsPrintf ("LLessEqual"); break; case AML_LOGICAL_LESS_OP: AcpiOsPrintf ("LGreaterEqual"); break; default: break; } } Op->Common.DisasmOpcode = 0; Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; return; default: break; } OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); /* The op and arguments */ switch (Op->Common.AmlOpcode) { case AML_LOGICAL_NOT_OP: Child = Op->Common.Value.Arg; if ((Child->Common.AmlOpcode == AML_LOGICAL_EQUAL_OP) || (Child->Common.AmlOpcode == AML_LOGICAL_GREATER_OP) || (Child->Common.AmlOpcode == AML_LOGICAL_LESS_OP)) { Child->Common.DisasmOpcode = ACPI_DASM_LNOT_SUFFIX; Op->Common.DisasmOpcode = ACPI_DASM_LNOT_PREFIX; } else { AcpiOsPrintf ("%s", OpInfo->Name); } break; case AML_BYTE_OP: AcpiOsPrintf ("0x%2.2X", (UINT32) Op->Common.Value.Integer); break; case AML_WORD_OP: if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID) { AcpiDmDecompressEisaId ((UINT32) Op->Common.Value.Integer); } else { AcpiOsPrintf ("0x%4.4X", (UINT32) Op->Common.Value.Integer); } break; case AML_DWORD_OP: if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID) { AcpiDmDecompressEisaId ((UINT32) Op->Common.Value.Integer); } else { AcpiOsPrintf ("0x%8.8X", (UINT32) Op->Common.Value.Integer); } break; case AML_QWORD_OP: AcpiOsPrintf ("0x%8.8X%8.8X", ACPI_FORMAT_UINT64 (Op->Common.Value.Integer)); break; case AML_STRING_OP: AcpiUtPrintString (Op->Common.Value.String, ACPI_UINT16_MAX); /* For _HID/_CID strings, attempt to output a descriptive comment */ if (Op->Common.DisasmOpcode == ACPI_DASM_HID_STRING) { /* If we know about the ID, emit the description */ IdInfo = AcpiAhMatchHardwareId (Op->Common.Value.String); if (IdInfo) { AcpiOsPrintf (" /* %s */", IdInfo->Description); } } break; case AML_BUFFER_OP: /* * Determine the type of buffer. We can have one of the following: * * 1) ResourceTemplate containing Resource Descriptors. * 2) Unicode String buffer * 3) ASCII String buffer * 4) Raw data buffer (if none of the above) * * Since there are no special AML opcodes to differentiate these * types of buffers, we have to closely look at the data in the * buffer to determine the type. */ if (!AcpiGbl_NoResourceDisassembly) { Status = AcpiDmIsResourceTemplate (WalkState, Op); if (ACPI_SUCCESS (Status)) { Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE; AcpiOsPrintf ("ResourceTemplate"); break; } else if (Status == AE_AML_NO_RESOURCE_END_TAG) { AcpiOsPrintf ( "/**** Is ResourceTemplate, " "but EndTag not at buffer end ****/ "); } } if (AcpiDmIsUuidBuffer (Op)) { Op->Common.DisasmOpcode = ACPI_DASM_UUID; AcpiOsPrintf ("ToUUID ("); } else if (AcpiDmIsUnicodeBuffer (Op)) { Op->Common.DisasmOpcode = ACPI_DASM_UNICODE; AcpiOsPrintf ("Unicode ("); } else if (AcpiDmIsStringBuffer (Op)) { Op->Common.DisasmOpcode = ACPI_DASM_STRING; AcpiOsPrintf ("Buffer"); } else if (AcpiDmIsPldBuffer (Op)) { Op->Common.DisasmOpcode = ACPI_DASM_PLD_METHOD; AcpiOsPrintf ("ToPLD ("); } else { Op->Common.DisasmOpcode = ACPI_DASM_BUFFER; AcpiOsPrintf ("Buffer"); } break; case AML_INT_NAMEPATH_OP: AcpiDmNamestring (Op->Common.Value.Name); break; case AML_INT_NAMEDFIELD_OP: Length = AcpiDmDumpName (Op->Named.Name); AcpiOsPrintf (","); ASL_CV_PRINT_ONE_COMMENT (Op, AML_NAMECOMMENT, NULL, 0); AcpiOsPrintf ("%*.s %u", (unsigned) (5 - Length), " ", (UINT32) Op->Common.Value.Integer); AcpiDmCommaIfFieldMember (Op); Info->BitOffset += (UINT32) Op->Common.Value.Integer; break; case AML_INT_RESERVEDFIELD_OP: /* Offset() -- Must account for previous offsets */ Offset = (UINT32) Op->Common.Value.Integer; Info->BitOffset += Offset; if (Info->BitOffset % 8 == 0) { AcpiOsPrintf ("Offset (0x%.2X)", ACPI_DIV_8 (Info->BitOffset)); } else { AcpiOsPrintf (" , %u", Offset); } AcpiDmCommaIfFieldMember (Op); break; case AML_INT_ACCESSFIELD_OP: case AML_INT_EXTACCESSFIELD_OP: AcpiOsPrintf ("AccessAs (%s, ", AcpiGbl_AccessTypes [(UINT32) (Op->Common.Value.Integer & 0x7)]); AcpiDmDecodeAttribute ((UINT8) (Op->Common.Value.Integer >> 8)); if (Op->Common.AmlOpcode == AML_INT_EXTACCESSFIELD_OP) { AcpiOsPrintf (" (0x%2.2X)", (unsigned) ((Op->Common.Value.Integer >> 16) & 0xFF)); } AcpiOsPrintf (")"); AcpiDmCommaIfFieldMember (Op); ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0); break; case AML_INT_CONNECTION_OP: /* * Two types of Connection() - one with a buffer object, the * other with a namestring that points to a buffer object. */ AcpiOsPrintf ("Connection ("); Child = Op->Common.Value.Arg; if (Child->Common.AmlOpcode == AML_INT_BYTELIST_OP) { AcpiOsPrintf ("\n"); Aml = Child->Named.Data; Length = (UINT32) Child->Common.Value.Integer; Info->Level += 1; Info->MappingOp = Op; Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE; AcpiDmResourceTemplate (Info, Op->Common.Parent, Aml, Length); Info->Level -= 1; AcpiDmIndent (Info->Level); } else { AcpiDmNamestring (Child->Common.Value.Name); } AcpiOsPrintf (")"); AcpiDmCommaIfFieldMember (Op); ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0); ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0); AcpiOsPrintf ("\n"); Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; /* for now, ignore in AcpiDmAscendingOp */ Child->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; break; case AML_INT_BYTELIST_OP: AcpiDmByteList (Info, Op); break; case AML_INT_METHODCALL_OP: Op = AcpiPsGetDepthNext (NULL, Op); Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; AcpiDmNamestring (Op->Common.Value.Name); break; case AML_WHILE_OP: if (Op->Common.DisasmOpcode == ACPI_DASM_SWITCH) { AcpiOsPrintf ("%s", "Switch"); break; } AcpiOsPrintf ("%s", OpInfo->Name); break; case AML_IF_OP: if (Op->Common.DisasmOpcode == ACPI_DASM_CASE) { AcpiOsPrintf ("%s", "Case"); break; } AcpiOsPrintf ("%s", OpInfo->Name); break; case AML_ELSE_OP: AcpiDmConvertToElseIf (Op); break; case AML_EXTERNAL_OP: if (AcpiGbl_DmEmitExternalOpcodes) { AcpiDmEmitExternal (Op, AcpiPsGetArg(Op, 0)); } break; default: /* Just get the opcode name and print it */ AcpiOsPrintf ("%s", OpInfo->Name); #ifdef ACPI_DEBUGGER if ((Op->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP) && (WalkState) && (WalkState->Results) && (WalkState->ResultCount)) { AcpiDbDecodeInternalObject ( WalkState->Results->Results.ObjDesc [ (WalkState->ResultCount - 1) % ACPI_RESULTS_FRAME_OBJ_NUM]); } #endif break; } } /******************************************************************************* * * FUNCTION: AcpiDmConvertToElseIf * * PARAMETERS: OriginalElseOp - ELSE Object to be examined * * RETURN: None. Emits either an "Else" or an "ElseIf" ASL operator. * * DESCRIPTION: Detect and convert an If..Else..If sequence to If..ElseIf * * EXAMPLE: * * This If..Else..If nested sequence: * * If (Arg0 == 1) * { * Local0 = 4 * } * Else * { * If (Arg0 == 2) * { * Local0 = 5 * } * } * * Is converted to this simpler If..ElseIf sequence: * * If (Arg0 == 1) * { * Local0 = 4 * } * ElseIf (Arg0 == 2) * { * Local0 = 5 * } * * NOTE: There is no actual ElseIf AML opcode. ElseIf is essentially an ASL * macro that emits an Else opcode followed by an If opcode. This function * reverses these AML sequences back to an ElseIf macro where possible. This * can make the disassembled ASL code simpler and more like the original code. * ******************************************************************************/ static void AcpiDmConvertToElseIf ( ACPI_PARSE_OBJECT *OriginalElseOp) { ACPI_PARSE_OBJECT *IfOp; ACPI_PARSE_OBJECT *ElseOp; /* * To be able to perform the conversion, two conditions must be satisfied: * 1) The first child of the Else must be an If statement. * 2) The If block can only be followed by an Else block and these must * be the only blocks under the original Else. */ IfOp = OriginalElseOp->Common.Value.Arg; if (!IfOp || (IfOp->Common.AmlOpcode != AML_IF_OP) || (IfOp->Asl.Next && (IfOp->Asl.Next->Common.AmlOpcode != AML_ELSE_OP))) { /* Not a proper Else..If sequence, cannot convert to ElseIf */ if (OriginalElseOp->Common.DisasmOpcode == ACPI_DASM_DEFAULT) { AcpiOsPrintf ("%s", "Default"); return; } AcpiOsPrintf ("%s", "Else"); return; } /* Cannot have anything following the If...Else block */ ElseOp = IfOp->Common.Next; if (ElseOp && ElseOp->Common.Next) { if (OriginalElseOp->Common.DisasmOpcode == ACPI_DASM_DEFAULT) { AcpiOsPrintf ("%s", "Default"); return; } AcpiOsPrintf ("%s", "Else"); return; } if (OriginalElseOp->Common.DisasmOpcode == ACPI_DASM_DEFAULT) { /* * There is an ElseIf but in this case the Else is actually * a Default block for a Switch/Case statement. No conversion. */ AcpiOsPrintf ("%s", "Default"); return; } if (OriginalElseOp->Common.DisasmOpcode == ACPI_DASM_CASE) { /* * This ElseIf is actually a Case block for a Switch/Case * statement. Print Case but do not return so that we can * promote the subtree and keep the indentation level. */ AcpiOsPrintf ("%s", "Case"); } else { /* Emit ElseIf, mark the IF as now an ELSEIF */ AcpiOsPrintf ("%s", "ElseIf"); } IfOp->Common.DisasmFlags |= ACPI_PARSEOP_ELSEIF; /* The IF parent will now be the same as the original ELSE parent */ IfOp->Common.Parent = OriginalElseOp->Common.Parent; /* * Update the NEXT pointers to restructure the parse tree, essentially * promoting an If..Else block up to the same level as the original * Else. * * Check if the IF has a corresponding ELSE peer */ ElseOp = IfOp->Common.Next; if (ElseOp && (ElseOp->Common.AmlOpcode == AML_ELSE_OP)) { /* If an ELSE matches the IF, promote it also */ ElseOp->Common.Parent = OriginalElseOp->Common.Parent; /* Promote the entire block under the ElseIf (All Next OPs) */ AcpiDmPromoteSubtree (OriginalElseOp); } else { /* Otherwise, set the IF NEXT to the original ELSE NEXT */ IfOp->Common.Next = OriginalElseOp->Common.Next; } /* Detach the child IF block from the original ELSE */ OriginalElseOp->Common.Value.Arg = NULL; /* Ignore the original ELSE from now on */ OriginalElseOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; OriginalElseOp->Common.DisasmOpcode = ACPI_DASM_LNOT_PREFIX; /* Insert IF (now ELSEIF) as next peer of the original ELSE */ OriginalElseOp->Common.Next = IfOp; } /******************************************************************************* * * FUNCTION: AcpiDmPromoteSubtree * * PARAMETERS: StartOpOp - Original parent of the entire subtree * * RETURN: None * * DESCRIPTION: Promote an entire parse subtree up one level. * ******************************************************************************/ static void AcpiDmPromoteSubtree ( ACPI_PARSE_OBJECT *StartOp) { ACPI_PARSE_OBJECT *Op; ACPI_PARSE_OBJECT *ParentOp; /* New parent for subtree elements */ ParentOp = StartOp->Common.Parent; /* First child starts the subtree */ Op = StartOp->Common.Value.Arg; /* Walk the top-level elements of the subtree */ while (Op) { Op->Common.Parent = ParentOp; if (!Op->Common.Next) { /* Last Op in list, update its next field */ Op->Common.Next = StartOp->Common.Next; break; } Op = Op->Common.Next; } } src/acpica/source/components/disassembler/dmresrc.c000066400000000000000000000526241465205512700230520ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dmresrc.c - Resource Descriptor disassembly * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "amlcode.h" #include "acdisasm.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbresrc") /* Dispatch tables for Resource disassembly functions */ static ACPI_RESOURCE_HANDLER AcpiGbl_DmResourceDispatch [] = { /* Small descriptors */ NULL, /* 0x00, Reserved */ NULL, /* 0x01, Reserved */ NULL, /* 0x02, Reserved */ NULL, /* 0x03, Reserved */ AcpiDmIrqDescriptor, /* 0x04, ACPI_RESOURCE_NAME_IRQ_FORMAT */ AcpiDmDmaDescriptor, /* 0x05, ACPI_RESOURCE_NAME_DMA_FORMAT */ AcpiDmStartDependentDescriptor, /* 0x06, ACPI_RESOURCE_NAME_START_DEPENDENT */ AcpiDmEndDependentDescriptor, /* 0x07, ACPI_RESOURCE_NAME_END_DEPENDENT */ AcpiDmIoDescriptor, /* 0x08, ACPI_RESOURCE_NAME_IO_PORT */ AcpiDmFixedIoDescriptor, /* 0x09, ACPI_RESOURCE_NAME_FIXED_IO_PORT */ AcpiDmFixedDmaDescriptor, /* 0x0A, ACPI_RESOURCE_NAME_FIXED_DMA */ NULL, /* 0x0B, Reserved */ NULL, /* 0x0C, Reserved */ NULL, /* 0x0D, Reserved */ AcpiDmVendorSmallDescriptor, /* 0x0E, ACPI_RESOURCE_NAME_SMALL_VENDOR */ NULL, /* 0x0F, ACPI_RESOURCE_NAME_END_TAG (not used) */ /* Large descriptors */ NULL, /* 0x00, Reserved */ AcpiDmMemory24Descriptor, /* 0x01, ACPI_RESOURCE_NAME_MEMORY_24 */ AcpiDmGenericRegisterDescriptor,/* 0x02, ACPI_RESOURCE_NAME_GENERIC_REGISTER */ NULL, /* 0x03, Reserved */ AcpiDmVendorLargeDescriptor, /* 0x04, ACPI_RESOURCE_NAME_LARGE_VENDOR */ AcpiDmMemory32Descriptor, /* 0x05, ACPI_RESOURCE_NAME_MEMORY_32 */ AcpiDmFixedMemory32Descriptor, /* 0x06, ACPI_RESOURCE_NAME_FIXED_MEMORY_32 */ AcpiDmDwordDescriptor, /* 0x07, ACPI_RESOURCE_NAME_DWORD_ADDRESS_SPACE */ AcpiDmWordDescriptor, /* 0x08, ACPI_RESOURCE_NAME_WORD_ADDRESS_SPACE */ AcpiDmInterruptDescriptor, /* 0x09, ACPI_RESOURCE_NAME_EXTENDED_XRUPT */ AcpiDmQwordDescriptor, /* 0x0A, ACPI_RESOURCE_NAME_QWORD_ADDRESS_SPACE */ AcpiDmExtendedDescriptor, /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS_SPACE */ AcpiDmGpioDescriptor, /* 0x0C, ACPI_RESOURCE_NAME_GPIO */ AcpiDmPinFunctionDescriptor, /* 0x0D, ACPI_RESOURCE_NAME_PIN_FUNCTION */ AcpiDmSerialBusDescriptor, /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS */ AcpiDmPinConfigDescriptor, /* 0x0F, ACPI_RESOURCE_NAME_PIN_CONFIG */ AcpiDmPinGroupDescriptor, /* 0x10, ACPI_RESOURCE_NAME_PIN_GROUP */ AcpiDmPinGroupFunctionDescriptor, /* 0x11, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION */ AcpiDmPinGroupConfigDescriptor, /* 0x12, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG */ AcpiDmClockInputDescriptor, /* 0x13, ACPI_RESOURCE_NAME_CLOCK_INPUT */ }; /* Only used for single-threaded applications */ /* TBD: remove when name is passed as parameter to the dump functions */ static UINT32 ResourceName; /******************************************************************************* * * FUNCTION: AcpiDmDescriptorName * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Emit a name for the descriptor if one is present (indicated * by the name being changed from the default name.) A name is only * emitted if a reference to the descriptor has been made somewhere * in the original ASL code. * ******************************************************************************/ void AcpiDmDescriptorName ( void) { if (ResourceName == ACPI_DEFAULT_RESNAME) { return; } AcpiOsPrintf ("%4.4s", (char *) &ResourceName); } /******************************************************************************* * * FUNCTION: AcpiDmDumpInteger* * * PARAMETERS: Value - Value to emit * Name - Associated name (emitted as a comment) * * RETURN: None * * DESCRIPTION: Integer output helper functions * ******************************************************************************/ void AcpiDmDumpInteger8 ( UINT8 Value, const char *Name) { AcpiOsPrintf ("0x%2.2X, // %s\n", Value, Name); } void AcpiDmDumpInteger16 ( UINT16 Value, const char *Name) { AcpiOsPrintf ("0x%4.4X, // %s\n", Value, Name); } void AcpiDmDumpInteger32 ( UINT32 Value, const char *Name) { AcpiOsPrintf ("0x%8.8X, // %s\n", Value, Name); } void AcpiDmDumpInteger64 ( UINT64 Value, const char *Name) { AcpiOsPrintf ("0x%8.8X%8.8X, // %s\n", ACPI_FORMAT_UINT64 (Value), Name); } /******************************************************************************* * * FUNCTION: AcpiDmBitList * * PARAMETERS: Mask - 16-bit value corresponding to 16 interrupt * or DMA values * * RETURN: None * * DESCRIPTION: Dump a bit mask as a list of individual interrupt/DMA levels. * ******************************************************************************/ void AcpiDmBitList ( UINT16 Mask) { UINT32 i; BOOLEAN Previous = FALSE; /* Open the initializer list */ AcpiOsPrintf ("{"); /* Examine each bit */ for (i = 0; i < 16; i++) { /* Only interested in bits that are set to 1 */ if (Mask & 1) { if (Previous) { AcpiOsPrintf (","); } Previous = TRUE; AcpiOsPrintf ("%u", i); } Mask >>= 1; } /* Close list */ AcpiOsPrintf ("}\n"); } /******************************************************************************* * * FUNCTION: AcpiDmResourceTemplate * * PARAMETERS: Info - Current parse tree walk info * ByteData - Pointer to the byte list data * ByteCount - Length of the byte list * * RETURN: None * * DESCRIPTION: Dump the contents of a Resource Template containing a set of * Resource Descriptors. * ******************************************************************************/ void AcpiDmResourceTemplate ( ACPI_OP_WALK_INFO *Info, ACPI_PARSE_OBJECT *Op, UINT8 *ByteData, UINT32 ByteCount) { ACPI_STATUS Status; UINT32 CurrentByteOffset; UINT8 ResourceType; UINT32 ResourceLength; void *Aml; UINT32 Level; BOOLEAN DependentFns = FALSE; UINT8 ResourceIndex; ACPI_NAMESPACE_NODE *Node; if (Op->Asl.AmlOpcode != AML_FIELD_OP) { Info->MappingOp = Op; } Level = Info->Level; ResourceName = ACPI_DEFAULT_RESNAME; Node = Op->Common.Node; if (Node) { Node = Node->Child; } for (CurrentByteOffset = 0; CurrentByteOffset < ByteCount;) { Aml = &ByteData[CurrentByteOffset]; /* Get the descriptor type and length */ ResourceType = AcpiUtGetResourceType (Aml); ResourceLength = AcpiUtGetResourceLength (Aml); /* Validate the Resource Type and Resource Length */ Status = AcpiUtValidateResource (NULL, Aml, &ResourceIndex); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ( "/*** Could not validate Resource, type (%X) %s***/\n", ResourceType, AcpiFormatException (Status)); return; } /* Point to next descriptor */ CurrentByteOffset += AcpiUtGetDescriptorLength (Aml); /* Descriptor pre-processing */ switch (ResourceType) { case ACPI_RESOURCE_NAME_START_DEPENDENT: /* Finish a previous StartDependentFns */ if (DependentFns) { Level--; AcpiDmIndent (Level); AcpiOsPrintf ("}\n"); } break; case ACPI_RESOURCE_NAME_END_DEPENDENT: Level--; DependentFns = FALSE; break; case ACPI_RESOURCE_NAME_END_TAG: /* Normal exit, the resource list is finished */ if (DependentFns) { /* * Close an open StartDependentDescriptor. This indicates a * missing EndDependentDescriptor. */ Level--; /* Go ahead and insert EndDependentFn() */ AcpiDmEndDependentDescriptor (Info, Aml, ResourceLength, Level); AcpiDmIndent (Level); AcpiOsPrintf ( "/*** Disassembler: inserted " "missing EndDependentFn () ***/\n"); } return; default: break; } /* Disassemble the resource structure */ if (Node) { ResourceName = Node->Name.Integer; Node = Node->Peer; } AcpiGbl_DmResourceDispatch [ResourceIndex] ( Info, Aml, ResourceLength, Level); /* Descriptor post-processing */ if (ResourceType == ACPI_RESOURCE_NAME_START_DEPENDENT) { DependentFns = TRUE; Level++; } } } /******************************************************************************* * * FUNCTION: AcpiDmIsResourceTemplate * * PARAMETERS: WalkState - Current walk info * Op - Buffer Op to be examined * * RETURN: Status. AE_OK if valid template * * DESCRIPTION: Walk a byte list to determine if it consists of a valid set * of resource descriptors. Nothing is output. * ******************************************************************************/ ACPI_STATUS AcpiDmIsResourceTemplate ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { ACPI_STATUS Status; ACPI_PARSE_OBJECT *NextOp; UINT8 *Aml; UINT8 *EndAml; UINT32 BufferLength; UINT32 DeclaredBufferLength; /* This op must be a buffer */ if (Op->Common.AmlOpcode != AML_BUFFER_OP) { return (AE_TYPE); } /* * Get the declared length of the buffer. * This is the nn in "Buffer (nn)" */ NextOp = Op->Common.Value.Arg; if (!NextOp) { AcpiOsPrintf ("NULL byte list in buffer\n"); return (AE_TYPE); } DeclaredBufferLength = NextOp->Common.Value.Size; /* Get the length of the raw initialization byte list */ NextOp = NextOp->Common.Next; if (!NextOp) { return (AE_TYPE); } Aml = NextOp->Named.Data; BufferLength = NextOp->Common.Value.Size; /* * Any buffer smaller than one byte cannot possibly be a resource * template. Two bytes could possibly be a "NULL" resource template * with a lone end tag descriptor (as generated via * "ResourceTemplate(){}"), but this would be an extremely unusual * case, as the template would be essentially useless. The disassembler * therefore does not recognize any two-byte buffer as a resource * template. */ if (BufferLength <= 2) { return (AE_TYPE); } /* * Not a template if declared buffer length != actual length of the * initialization byte list. Because the resource macros will create * a buffer of the exact required length (buffer length will be equal * to the actual length). * * NOTE (April 2017): Resource templates with this issue have been * seen in the field. We still don't want to attempt to disassemble * a buffer like this to a resource template because this output * would not match the original input buffer (it would be shorter * than the original when the disassembled code is recompiled). * Basically, a buffer like this appears to be hand crafted in the * first place, so just emitting a buffer object instead of a * resource template more closely resembles the original ASL code. */ if (DeclaredBufferLength != BufferLength) { return (AE_TYPE); } /* Walk the byte list, abort on any invalid descriptor type or length */ Status = AcpiUtWalkAmlResources (WalkState, Aml, BufferLength, NULL, ACPI_CAST_INDIRECT_PTR (void, &EndAml)); if (ACPI_FAILURE (Status)) { return (AE_TYPE); } /* * For the resource template to be valid, one EndTag must appear * at the very end of the ByteList, not before. (For proper disassembly * of a ResourceTemplate, the buffer must not have any extra data after * the EndTag.) */ if ((Aml + BufferLength - sizeof (AML_RESOURCE_END_TAG)) != EndAml) { return (AE_AML_NO_RESOURCE_END_TAG); } /* * All resource descriptors are valid, therefore this list appears * to be a valid resource template */ return (AE_OK); } src/acpica/source/components/disassembler/dmresrcl.c000066400000000000000000001072301465205512700232200ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dmresrcl.c - "Large" Resource Descriptor disassembly * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdisasm.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbresrcl") /* Common names for address and memory descriptors */ static const char *AcpiDmAddressNames[] = { "Granularity", "Range Minimum", "Range Maximum", "Translation Offset", "Length" }; static const char *AcpiDmMemoryNames[] = { "Range Minimum", "Range Maximum", "Alignment", "Length" }; /* Local prototypes */ static void AcpiDmSpaceFlags ( UINT8 Flags); static void AcpiDmIoFlags ( UINT8 Flags); static void AcpiDmIoFlags2 ( UINT8 SpecificFlags); static void AcpiDmMemoryFlags ( UINT8 Flags, UINT8 SpecificFlags); static void AcpiDmMemoryFlags2 ( UINT8 SpecificFlags); static void AcpiDmResourceSource ( AML_RESOURCE *Resource, ACPI_SIZE MinimumLength, UINT32 Length); static void AcpiDmAddressFields ( void *Source, UINT8 Type, UINT32 Level); static void AcpiDmAddressPrefix ( UINT8 Type); static void AcpiDmAddressCommon ( AML_RESOURCE *Resource, UINT8 Type, UINT32 Level); static void AcpiDmAddressFlags ( AML_RESOURCE *Resource); /******************************************************************************* * * FUNCTION: AcpiDmMemoryFields * * PARAMETERS: Source - Pointer to the contiguous data fields * Type - 16 or 32 (bit) * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode fields common to Memory24 and Memory32 descriptors * ******************************************************************************/ static void AcpiDmMemoryFields ( void *Source, UINT8 Type, UINT32 Level) { UINT32 i; for (i = 0; i < 4; i++) { AcpiDmIndent (Level + 1); switch (Type) { case 16: AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i], AcpiDmMemoryNames[i]); break; case 32: AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i], AcpiDmMemoryNames[i]); break; default: return; } } } /******************************************************************************* * * FUNCTION: AcpiDmAddressFields * * PARAMETERS: Source - Pointer to the contiguous data fields * Type - 16, 32, or 64 (bit) * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode fields common to address descriptors * ******************************************************************************/ static void AcpiDmAddressFields ( void *Source, UINT8 Type, UINT32 Level) { UINT32 i; AcpiOsPrintf ("\n"); for (i = 0; i < 5; i++) { AcpiDmIndent (Level + 1); switch (Type) { case 16: AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i], AcpiDmAddressNames[i]); break; case 32: AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i], AcpiDmAddressNames[i]); break; case 64: AcpiDmDumpInteger64 (ACPI_CAST_PTR (UINT64, Source)[i], AcpiDmAddressNames[i]); break; default: return; } } } /******************************************************************************* * * FUNCTION: AcpiDmAddressPrefix * * PARAMETERS: Type - Descriptor type * * RETURN: None * * DESCRIPTION: Emit name prefix representing the address descriptor type * ******************************************************************************/ static void AcpiDmAddressPrefix ( UINT8 Type) { switch (Type) { case ACPI_RESOURCE_TYPE_ADDRESS16: AcpiOsPrintf ("Word"); break; case ACPI_RESOURCE_TYPE_ADDRESS32: AcpiOsPrintf ("DWord"); break; case ACPI_RESOURCE_TYPE_ADDRESS64: AcpiOsPrintf ("QWord"); break; case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64: AcpiOsPrintf ("Extended"); break; default: return; } } /******************************************************************************* * * FUNCTION: AcpiDmAddressCommon * * PARAMETERS: Resource - Raw AML descriptor * Type - Descriptor type * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Emit common name and flag fields common to address descriptors * ******************************************************************************/ static void AcpiDmAddressCommon ( AML_RESOURCE *Resource, UINT8 Type, UINT32 Level) { UINT8 ResourceType; UINT8 SpecificFlags; UINT8 Flags; ResourceType = Resource->Address.ResourceType; SpecificFlags = Resource->Address.SpecificFlags; Flags = Resource->Address.Flags; AcpiDmIndent (Level); /* Validate ResourceType */ if ((ResourceType > 2) && (ResourceType < 0xC0)) { AcpiOsPrintf ( "/**** Invalid Resource Type: 0x%X ****/", ResourceType); return; } /* Prefix is either Word, DWord, QWord, or Extended */ AcpiDmAddressPrefix (Type); /* Resource Types above 0xC0 are vendor-defined */ if (ResourceType > 2) { AcpiOsPrintf ("Space (0x%2.2X, ", ResourceType); AcpiDmSpaceFlags (Flags); AcpiOsPrintf (" 0x%2.2X,", SpecificFlags); return; } /* This is either a Memory, IO, or BusNumber descriptor (0,1,2) */ AcpiOsPrintf ("%s (", AcpiGbl_WordDecode [ACPI_GET_2BIT_FLAG (ResourceType)]); /* Decode the general and type-specific flags */ if (ResourceType == ACPI_MEMORY_RANGE) { AcpiDmMemoryFlags (Flags, SpecificFlags); } else /* IO range or BusNumberRange */ { AcpiDmIoFlags (Flags); if (ResourceType == ACPI_IO_RANGE) { AcpiOsPrintf (" %s,", AcpiGbl_RngDecode [ACPI_GET_2BIT_FLAG (SpecificFlags)]); } } } /******************************************************************************* * * FUNCTION: AcpiDmAddressFlags * * PARAMETERS: Resource - Raw AML descriptor * * RETURN: None * * DESCRIPTION: Emit flags common to address descriptors * ******************************************************************************/ static void AcpiDmAddressFlags ( AML_RESOURCE *Resource) { if (Resource->Address.ResourceType == ACPI_IO_RANGE) { AcpiDmIoFlags2 (Resource->Address.SpecificFlags); } else if (Resource->Address.ResourceType == ACPI_MEMORY_RANGE) { AcpiDmMemoryFlags2 (Resource->Address.SpecificFlags); } } /******************************************************************************* * * FUNCTION: AcpiDmSpaceFlags * * PARAMETERS: Flags - Flag byte to be decoded * * RETURN: None * * DESCRIPTION: Decode the flags specific to Space Address space descriptors * ******************************************************************************/ static void AcpiDmSpaceFlags ( UINT8 Flags) { AcpiOsPrintf ("%s, %s, %s, %s,", AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Flags)], AcpiGbl_DecDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 1)], AcpiGbl_MinDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 2)], AcpiGbl_MaxDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 3)]); } /******************************************************************************* * * FUNCTION: AcpiDmIoFlags * * PARAMETERS: Flags - Flag byte to be decoded * * RETURN: None * * DESCRIPTION: Decode the flags specific to IO Address space descriptors * ******************************************************************************/ static void AcpiDmIoFlags ( UINT8 Flags) { AcpiOsPrintf ("%s, %s, %s, %s,", AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Flags)], AcpiGbl_MinDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 2)], AcpiGbl_MaxDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 3)], AcpiGbl_DecDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 1)]); } /******************************************************************************* * * FUNCTION: AcpiDmIoFlags2 * * PARAMETERS: SpecificFlags - "Specific" flag byte to be decoded * * RETURN: None * * DESCRIPTION: Decode the flags specific to IO Address space descriptors * ******************************************************************************/ static void AcpiDmIoFlags2 ( UINT8 SpecificFlags) { /* _TTP */ AcpiOsPrintf (", %s", AcpiGbl_TtpDecode [ACPI_EXTRACT_1BIT_FLAG (SpecificFlags, 4)]); /* * TRS is only used if TTP is TypeTranslation. However, the disassembler * always emits exactly what is in the AML. */ AcpiOsPrintf (", %s", AcpiGbl_TrsDecode [ACPI_EXTRACT_1BIT_FLAG (SpecificFlags, 5)]); } /******************************************************************************* * * FUNCTION: AcpiDmMemoryFlags * * PARAMETERS: Flags - Flag byte to be decoded * SpecificFlags - "Specific" flag byte to be decoded * * RETURN: None * * DESCRIPTION: Decode flags specific to Memory Address Space descriptors * ******************************************************************************/ static void AcpiDmMemoryFlags ( UINT8 Flags, UINT8 SpecificFlags) { AcpiOsPrintf ("%s, %s, %s, %s, %s, %s,", AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Flags)], AcpiGbl_DecDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 1)], AcpiGbl_MinDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 2)], AcpiGbl_MaxDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 3)], AcpiGbl_MemDecode [ACPI_EXTRACT_2BIT_FLAG (SpecificFlags, 1)], AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (SpecificFlags)]); } /******************************************************************************* * * FUNCTION: AcpiDmMemoryFlags2 * * PARAMETERS: SpecificFlags - "Specific" flag byte to be decoded * * RETURN: None * * DESCRIPTION: Decode flags specific to Memory Address Space descriptors * ******************************************************************************/ static void AcpiDmMemoryFlags2 ( UINT8 SpecificFlags) { AcpiOsPrintf (", %s, %s", AcpiGbl_MtpDecode [ACPI_EXTRACT_2BIT_FLAG (SpecificFlags, 3)], AcpiGbl_TtpDecode [ACPI_EXTRACT_1BIT_FLAG (SpecificFlags, 5)]); } /******************************************************************************* * * FUNCTION: AcpiDmResourceSource * * PARAMETERS: Resource - Raw AML descriptor * MinimumLength - descriptor length without optional fields * ResourceLength * * RETURN: None * * DESCRIPTION: Dump optional ResourceSource fields of an address descriptor * ******************************************************************************/ static void AcpiDmResourceSource ( AML_RESOURCE *Resource, ACPI_SIZE MinimumTotalLength, UINT32 ResourceLength) { UINT8 *AmlResourceSource; UINT32 TotalLength; TotalLength = ResourceLength + sizeof (AML_RESOURCE_LARGE_HEADER); /* Check if the optional ResourceSource fields are present */ if (TotalLength <= MinimumTotalLength) { /* The two optional fields are not used */ AcpiOsPrintf (",, "); return; } /* Get a pointer to the ResourceSource */ AmlResourceSource = ACPI_ADD_PTR (UINT8, Resource, MinimumTotalLength); /* * Always emit the ResourceSourceIndex (Byte) * * NOTE: Some ASL compilers always create a 0 byte (in the AML) for the * Index even if the String does not exist. Although this is in violation * of the ACPI specification, it is very important to emit ASL code that * can be compiled back to the identical AML. There may be fields and/or * indexes into the resource template buffer that are compiled to absolute * offsets, and these will be broken if the AML length is changed. */ AcpiOsPrintf ("0x%2.2X,", (UINT32) AmlResourceSource[0]); /* Make sure that the ResourceSource string exists before dumping it */ if (TotalLength > (MinimumTotalLength + 1)) { AcpiOsPrintf (" "); AcpiUtPrintString ((char *) &AmlResourceSource[1], ACPI_UINT16_MAX); } AcpiOsPrintf (", "); } /******************************************************************************* * * FUNCTION: AcpiDmWordDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a Word Address Space descriptor * ******************************************************************************/ void AcpiDmWordDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { /* Dump resource name and flags */ AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS16, Level); /* Dump the 5 contiguous WORD values */ AcpiDmAddressFields (&Resource->Address16.Granularity, 16, Level); /* The ResourceSource fields are optional */ AcpiDmIndent (Level + 1); AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS16), Length); /* Insert a descriptor name */ AcpiDmDescriptorName (); /* Type-specific flags */ AcpiDmAddressFlags (Resource); AcpiOsPrintf (")\n"); } /******************************************************************************* * * FUNCTION: AcpiDmDwordDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a DWord Address Space descriptor * ******************************************************************************/ void AcpiDmDwordDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { /* Dump resource name and flags */ AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS32, Level); /* Dump the 5 contiguous DWORD values */ AcpiDmAddressFields (&Resource->Address32.Granularity, 32, Level); /* The ResourceSource fields are optional */ AcpiDmIndent (Level + 1); AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS32), Length); /* Insert a descriptor name */ AcpiDmDescriptorName (); /* Type-specific flags */ AcpiDmAddressFlags (Resource); AcpiOsPrintf (")\n"); } /******************************************************************************* * * FUNCTION: AcpiDmQwordDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a QWord Address Space descriptor * ******************************************************************************/ void AcpiDmQwordDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { /* Dump resource name and flags */ AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS64, Level); /* Dump the 5 contiguous QWORD values */ AcpiDmAddressFields (&Resource->Address64.Granularity, 64, Level); /* The ResourceSource fields are optional */ AcpiDmIndent (Level + 1); AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS64), Length); /* Insert a descriptor name */ AcpiDmDescriptorName (); /* Type-specific flags */ AcpiDmAddressFlags (Resource); AcpiOsPrintf (")\n"); } /******************************************************************************* * * FUNCTION: AcpiDmExtendedDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a Extended Address Space descriptor * ******************************************************************************/ void AcpiDmExtendedDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { /* Dump resource name and flags */ AcpiDmAddressCommon ( Resource, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64, Level); /* Dump the 5 contiguous QWORD values */ AcpiDmAddressFields (&Resource->ExtAddress64.Granularity, 64, Level); /* Extra field for this descriptor only */ AcpiDmIndent (Level + 1); AcpiDmDumpInteger64 (Resource->ExtAddress64.TypeSpecific, "Type-Specific Attributes"); /* Insert a descriptor name */ AcpiDmIndent (Level + 1); AcpiDmDescriptorName (); /* Type-specific flags */ AcpiDmAddressFlags (Resource); AcpiOsPrintf (")\n"); } /******************************************************************************* * * FUNCTION: AcpiDmMemory24Descriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a Memory24 descriptor * ******************************************************************************/ void AcpiDmMemory24Descriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { /* Dump name and read/write flag */ AcpiDmIndent (Level); AcpiOsPrintf ("Memory24 (%s,\n", AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (Resource->Memory24.Flags)]); /* Dump the 4 contiguous WORD values */ AcpiDmMemoryFields (&Resource->Memory24.Minimum, 16, Level); /* Insert a descriptor name */ AcpiDmIndent (Level + 1); AcpiDmDescriptorName (); AcpiOsPrintf (")\n"); } /******************************************************************************* * * FUNCTION: AcpiDmMemory32Descriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a Memory32 descriptor * ******************************************************************************/ void AcpiDmMemory32Descriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { /* Dump name and read/write flag */ AcpiDmIndent (Level); AcpiOsPrintf ("Memory32 (%s,\n", AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (Resource->Memory32.Flags)]); /* Dump the 4 contiguous DWORD values */ AcpiDmMemoryFields (&Resource->Memory32.Minimum, 32, Level); /* Insert a descriptor name */ AcpiDmIndent (Level + 1); AcpiDmDescriptorName (); AcpiOsPrintf (")\n"); } /******************************************************************************* * * FUNCTION: AcpiDmFixedMemory32Descriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a Fixed Memory32 descriptor * ******************************************************************************/ void AcpiDmFixedMemory32Descriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { /* Dump name and read/write flag */ AcpiDmIndent (Level); AcpiOsPrintf ("Memory32Fixed (%s,\n", AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (Resource->FixedMemory32.Flags)]); AcpiDmIndent (Level + 1); AcpiDmDumpInteger32 (Resource->FixedMemory32.Address, "Address Base"); AcpiDmIndent (Level + 1); AcpiDmDumpInteger32 (Resource->FixedMemory32.AddressLength, "Address Length"); /* Insert a descriptor name */ AcpiDmIndent (Level + 1); AcpiDmDescriptorName (); AcpiOsPrintf (")\n"); } /******************************************************************************* * * FUNCTION: AcpiDmGenericRegisterDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a Generic Register descriptor * ******************************************************************************/ void AcpiDmGenericRegisterDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { AcpiDmIndent (Level); AcpiOsPrintf ("Register ("); AcpiDmAddressSpace (Resource->GenericReg.AddressSpaceId); AcpiOsPrintf ("\n"); AcpiDmIndent (Level + 1); AcpiDmDumpInteger8 (Resource->GenericReg.BitWidth, "Bit Width"); AcpiDmIndent (Level + 1); AcpiDmDumpInteger8 (Resource->GenericReg.BitOffset, "Bit Offset"); AcpiDmIndent (Level + 1); AcpiDmDumpInteger64 (Resource->GenericReg.Address, "Address"); /* Optional field for ACPI 3.0 */ AcpiDmIndent (Level + 1); if (Resource->GenericReg.AccessSize) { AcpiOsPrintf ("0x%2.2X, // %s\n", Resource->GenericReg.AccessSize, "Access Size"); AcpiDmIndent (Level + 1); } else { AcpiOsPrintf (","); } /* DescriptorName was added for ACPI 3.0+ */ AcpiDmDescriptorName (); AcpiOsPrintf (")\n"); } /******************************************************************************* * * FUNCTION: AcpiDmInterruptDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a extended Interrupt descriptor * ******************************************************************************/ void AcpiDmInterruptDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { UINT32 i; AcpiDmIndent (Level); AcpiOsPrintf ("Interrupt (%s, %s, %s, %s, ", AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->ExtendedIrq.Flags)], AcpiGbl_HeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->ExtendedIrq.Flags, 1)], AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->ExtendedIrq.Flags, 2)], AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->ExtendedIrq.Flags, 3)]); /* * The ResourceSource fields are optional and appear after the interrupt * list. Must compute length based on length of the list. First xrupt * is included in the struct (reason for -1 below) */ AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_EXTENDED_IRQ) + ((UINT32) Resource->ExtendedIrq.InterruptCount - 1) * sizeof (UINT32), Resource->ExtendedIrq.ResourceLength); /* Insert a descriptor name */ AcpiDmDescriptorName (); AcpiOsPrintf (")\n"); /* Dump the interrupt list */ AcpiDmIndent (Level); AcpiOsPrintf ("{\n"); for (i = 0; i < Resource->ExtendedIrq.InterruptCount; i++) { AcpiDmIndent (Level + 1); AcpiOsPrintf ("0x%8.8X,\n", (UINT32) Resource->ExtendedIrq.Interrupts[i]); } AcpiDmIndent (Level); AcpiOsPrintf ("}\n"); } /******************************************************************************* * * FUNCTION: AcpiDmVendorCommon * * PARAMETERS: Name - Descriptor name suffix * ByteData - Pointer to the vendor byte data * Length - Length of the byte data * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a Vendor descriptor, both Large and Small * ******************************************************************************/ void AcpiDmVendorCommon ( const char *Name, UINT8 *ByteData, UINT32 Length, UINT32 Level) { /* Dump macro name */ AcpiDmIndent (Level); AcpiOsPrintf ("Vendor%s (", Name); /* Insert a descriptor name */ AcpiDmDescriptorName (); AcpiOsPrintf (") // Length = 0x%.2X\n", Length); /* Dump the vendor bytes */ AcpiDmIndent (Level); AcpiOsPrintf ("{\n"); AcpiDmDisasmByteList (Level + 1, ByteData, Length); AcpiDmIndent (Level); AcpiOsPrintf ("}\n"); } /******************************************************************************* * * FUNCTION: AcpiDmVendorLargeDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a Vendor Large descriptor * ******************************************************************************/ void AcpiDmVendorLargeDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { AcpiDmVendorCommon ("Long ", ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_LARGE_HEADER)), Length, Level); } src/acpica/source/components/disassembler/dmresrcl2.c000066400000000000000000001310741465205512700233050ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dmresrcl2.c - "Large" Resource Descriptor disassembly (#2) * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdisasm.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbresrcl2") /* Local prototypes */ static void AcpiDmCsi2SerialBusDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); static void AcpiDmI2cSerialBusDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); static void AcpiDmSpiSerialBusDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); static void AcpiDmUartSerialBusDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); static void AcpiDmGpioCommon ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Level); static void AcpiDmDumpRawDataBuffer ( UINT8 *Buffer, UINT32 Length, UINT32 Level); /* Dispatch table for the serial bus descriptors */ static ACPI_RESOURCE_HANDLER SerialBusResourceDispatch [] = { NULL, AcpiDmI2cSerialBusDescriptor, AcpiDmSpiSerialBusDescriptor, AcpiDmUartSerialBusDescriptor, AcpiDmCsi2SerialBusDescriptor }; /******************************************************************************* * * FUNCTION: AcpiDmDumpRawDataBuffer * * PARAMETERS: Buffer - Pointer to the data bytes * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Dump a data buffer as a RawDataBuffer() object. Used for * vendor data bytes. * ******************************************************************************/ static void AcpiDmDumpRawDataBuffer ( UINT8 *Buffer, UINT32 Length, UINT32 Level) { UINT32 Index; UINT32 i; UINT32 j; if (!Length) { return; } AcpiOsPrintf ("RawDataBuffer (0x%.2X) // Vendor Data", Length); AcpiOsPrintf ("\n"); AcpiDmIndent (Level + 1); AcpiOsPrintf ("{\n"); AcpiDmIndent (Level + 2); for (i = 0; i < Length;) { for (j = 0; j < 8; j++) { Index = i + j; if (Index >= Length) { goto Finish; } AcpiOsPrintf ("0x%2.2X", Buffer[Index]); if ((Index + 1) >= Length) { goto Finish; } AcpiOsPrintf (", "); } AcpiOsPrintf ("\n"); AcpiDmIndent (Level + 2); i += 8; } Finish: AcpiOsPrintf ("\n"); AcpiDmIndent (Level + 1); AcpiOsPrintf ("}"); } /******************************************************************************* * * FUNCTION: AcpiDmGpioCommon * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode common parts of a GPIO Interrupt descriptor * ******************************************************************************/ static void AcpiDmGpioCommon ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Level) { UINT16 *PinList; UINT8 *VendorData; char *DeviceName = NULL; UINT32 PinCount; UINT32 i; /* ResourceSource, ResourceSourceIndex, ResourceType */ AcpiDmIndent (Level + 1); if (Resource->Gpio.ResSourceOffset) { DeviceName = ACPI_ADD_PTR (char, Resource, Resource->Gpio.ResSourceOffset), AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); } AcpiOsPrintf (", "); AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex); AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]); /* Insert a descriptor name */ AcpiDmDescriptorName (); AcpiOsPrintf (","); /* Dump the vendor data */ if (Resource->Gpio.VendorOffset) { AcpiOsPrintf ("\n"); AcpiDmIndent (Level + 1); VendorData = ACPI_ADD_PTR (UINT8, Resource, Resource->Gpio.VendorOffset); AcpiDmDumpRawDataBuffer (VendorData, Resource->Gpio.VendorLength, Level); } AcpiOsPrintf (")\n"); /* Dump the interrupt list */ AcpiDmIndent (Level + 1); AcpiOsPrintf ("{ // Pin list\n"); PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset - Resource->Gpio.PinTableOffset)) / sizeof (UINT16); PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource, Resource->Gpio.PinTableOffset); for (i = 0; i < PinCount; i++) { AcpiDmIndent (Level + 2); AcpiOsPrintf ("0x%4.4X%s\n", PinList[i], ((i + 1) < PinCount) ? "," : ""); } AcpiDmIndent (Level + 1); AcpiOsPrintf ("}\n"); MpSaveGpioInfo (Info->MappingOp, Resource, PinCount, PinList, DeviceName); } /******************************************************************************* * * FUNCTION: AcpiDmGpioIntDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a GPIO Interrupt descriptor * ******************************************************************************/ static void AcpiDmGpioIntDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { /* Dump the GpioInt-specific portion of the descriptor */ /* EdgeLevel, ActiveLevel, Shared */ AcpiDmIndent (Level); AcpiOsPrintf ("GpioInt (%s, %s, %s, ", AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)], AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 1)], AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]); /* PinConfig, DebounceTimeout */ if (Resource->Gpio.PinConfig <= 3) { AcpiOsPrintf ("%s, ", AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]); } else { AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig); } AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout); /* Dump the GpioInt/GpioIo common portion of the descriptor */ AcpiDmGpioCommon (Info, Resource, Level); } /******************************************************************************* * * FUNCTION: AcpiDmGpioIoDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a GPIO I/O descriptor * ******************************************************************************/ static void AcpiDmGpioIoDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { /* Dump the GpioIo-specific portion of the descriptor */ /* Shared, PinConfig */ AcpiDmIndent (Level); AcpiOsPrintf ("GpioIo (%s, ", AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]); if (Resource->Gpio.PinConfig <= 3) { AcpiOsPrintf ("%s, ", AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]); } else { AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig); } /* DebounceTimeout, DriveStrength, IoRestriction */ AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout); AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength); AcpiOsPrintf ("%s,\n", AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]); /* Dump the GpioInt/GpioIo common portion of the descriptor */ AcpiDmGpioCommon (Info, Resource, Level); } /******************************************************************************* * * FUNCTION: AcpiDmGpioDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a GpioInt/GpioIo GPIO Interrupt/IO descriptor * ******************************************************************************/ void AcpiDmGpioDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { UINT8 ConnectionType; ConnectionType = Resource->Gpio.ConnectionType; switch (ConnectionType) { case AML_RESOURCE_GPIO_TYPE_INT: AcpiDmGpioIntDescriptor (Info, Resource, Length, Level); break; case AML_RESOURCE_GPIO_TYPE_IO: AcpiDmGpioIoDescriptor (Info, Resource, Length, Level); break; default: AcpiOsPrintf ("Unknown GPIO type\n"); break; } } void AcpiDmClockInputDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { char *DeviceName = NULL; UINT8 *ResourceIndex = NULL; AcpiDmIndent (Level); AcpiOsPrintf ("ClockInput ("); AcpiOsPrintf ("0x%8.8X, ", Resource->ClockInput.FrequencyNumerator); AcpiOsPrintf ("0x%4.4X, ", Resource->ClockInput.FrequencyDivisor); AcpiOsPrintf ("%s, ", AcpiGbl_ClockInputScale [ACPI_EXTRACT_2BIT_FLAG (Resource->ClockInput.Flags, 1)]); AcpiOsPrintf ("%s, ", AcpiGbl_ClockInputMode [ACPI_GET_1BIT_FLAG (Resource->ClockInput.Flags)]); if (Length > sizeof(Resource->ClockInput)) { DeviceName = ACPI_ADD_PTR (char, Resource, sizeof(Resource->ClockInput)+1), AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); AcpiOsPrintf (", "); ResourceIndex = ACPI_ADD_PTR (UINT8, Resource, sizeof(Resource->ClockInput)), AcpiOsPrintf ("0x%2.2X", *ResourceIndex); } AcpiOsPrintf (")\n"); } /******************************************************************************* * * FUNCTION: AcpiDmPinFunctionDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a PinFunction descriptor * ******************************************************************************/ void AcpiDmPinFunctionDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { UINT16 *PinList; UINT8 *VendorData; char *DeviceName = NULL; UINT32 PinCount; UINT32 i; AcpiDmIndent (Level); AcpiOsPrintf ("PinFunction (%s, ", AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinFunction.Flags)]); if (Resource->PinFunction.PinConfig <= 3) { AcpiOsPrintf ("%s, ", AcpiGbl_PpcDecode[Resource->PinFunction.PinConfig]); } else { AcpiOsPrintf ("0x%2.2X, ", Resource->PinFunction.PinConfig); } /* FunctionNumber */ AcpiOsPrintf ("0x%4.4X, ", Resource->PinFunction.FunctionNumber); if (Resource->PinFunction.ResSourceOffset) { DeviceName = ACPI_ADD_PTR (char, Resource, Resource->PinFunction.ResSourceOffset), AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); } AcpiOsPrintf (", "); AcpiOsPrintf ("0x%2.2X,\n", Resource->PinFunction.ResSourceIndex); AcpiDmIndent (Level + 1); /* Always ResourceConsumer */ AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_CONSUMER]); /* Insert a descriptor name */ AcpiDmDescriptorName (); AcpiOsPrintf (","); /* Dump the vendor data */ if (Resource->PinFunction.VendorLength) { AcpiOsPrintf ("\n"); AcpiDmIndent (Level + 1); VendorData = ACPI_ADD_PTR (UINT8, Resource, Resource->PinFunction.VendorOffset); AcpiDmDumpRawDataBuffer (VendorData, Resource->PinFunction.VendorLength, Level); } AcpiOsPrintf (")\n"); AcpiDmIndent (Level + 1); /* Dump the interrupt list */ AcpiOsPrintf ("{ // Pin list\n"); PinCount = ((UINT32) (Resource->PinFunction.ResSourceOffset - Resource->PinFunction.PinTableOffset)) / sizeof (UINT16); PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource, Resource->PinFunction.PinTableOffset); for (i = 0; i < PinCount; i++) { AcpiDmIndent (Level + 2); AcpiOsPrintf ("0x%4.4X%s\n", PinList[i], ((i + 1) < PinCount) ? "," : ""); } AcpiDmIndent (Level + 1); AcpiOsPrintf ("}\n"); } /******************************************************************************* * * FUNCTION: AcpiDmDumpSerialBusVendorData * * PARAMETERS: Resource - Pointer to the resource descriptor * * RETURN: None * * DESCRIPTION: Dump optional serial bus vendor data * ******************************************************************************/ static void AcpiDmDumpSerialBusVendorData ( AML_RESOURCE *Resource, UINT32 Level) { UINT8 *VendorData; UINT32 VendorLength; /* Get the (optional) vendor data and length */ switch (Resource->CommonSerialBus.Type) { case AML_RESOURCE_I2C_SERIALBUSTYPE: VendorLength = Resource->CommonSerialBus.TypeDataLength - AML_RESOURCE_I2C_MIN_DATA_LEN; VendorData = ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_I2C_SERIALBUS)); break; case AML_RESOURCE_SPI_SERIALBUSTYPE: VendorLength = Resource->CommonSerialBus.TypeDataLength - AML_RESOURCE_SPI_MIN_DATA_LEN; VendorData = ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_SPI_SERIALBUS)); break; case AML_RESOURCE_UART_SERIALBUSTYPE: VendorLength = Resource->CommonSerialBus.TypeDataLength - AML_RESOURCE_UART_MIN_DATA_LEN; VendorData = ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_UART_SERIALBUS)); break; case AML_RESOURCE_CSI2_SERIALBUSTYPE: VendorLength = Resource->CommonSerialBus.TypeDataLength - AML_RESOURCE_CSI2_MIN_DATA_LEN; VendorData = ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_CSI2_SERIALBUS)); break; default: return; } /* Dump the vendor bytes as a RawDataBuffer object */ AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level); } /******************************************************************************* * * FUNCTION: AcpiDmCsi2SerialBusDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a CSI2 serial bus descriptor * ******************************************************************************/ static void AcpiDmCsi2SerialBusDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { UINT32 ResourceSourceOffset; char *DeviceName; /* SlaveMode, PhyType, LocalPortInstance */ AcpiDmIndent (Level); AcpiOsPrintf ("Csi2Bus (%s,", AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->Csi2SerialBus.Flags)]); AcpiOsPrintf (" 0x%2.2X, 0x%2.2X,\n", Resource->Csi2SerialBus.TypeSpecificFlags & 0x03, Resource->Csi2SerialBus.TypeSpecificFlags & 0xFC); /* ResourceSource is a required field */ ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + Resource->CommonSerialBus.TypeDataLength; AcpiDmIndent (Level + 1); DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset); AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); /* ResourceSourceIndex, ResourceUsage */ AcpiOsPrintf (",\n"); AcpiDmIndent (Level + 1); AcpiOsPrintf ("0x%2.2X, ", Resource->Csi2SerialBus.ResSourceIndex); AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Csi2SerialBus.Flags, 1)]); /* Insert a descriptor name */ AcpiDmDescriptorName (); /* Dump the vendor data */ AcpiOsPrintf (",\n"); AcpiDmIndent (Level + 1); AcpiDmDumpSerialBusVendorData (Resource, Level); AcpiOsPrintf (")\n"); MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName); } /******************************************************************************* * * FUNCTION: AcpiDmI2cSerialBusDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a I2C serial bus descriptor * ******************************************************************************/ static void AcpiDmI2cSerialBusDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { UINT32 ResourceSourceOffset; char *DeviceName; /* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */ AcpiDmIndent (Level); AcpiOsPrintf ("I2cSerialBusV2 (0x%4.4X, %s, 0x%8.8X,\n", Resource->I2cSerialBus.SlaveAddress, AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)], Resource->I2cSerialBus.ConnectionSpeed); AcpiDmIndent (Level + 1); AcpiOsPrintf ("%s, ", AcpiGbl_AmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.TypeSpecificFlags)]); /* ResourceSource is a required field */ ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + Resource->CommonSerialBus.TypeDataLength; DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset); AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); /* ResourceSourceIndex, ResourceUsage */ AcpiOsPrintf (",\n"); AcpiDmIndent (Level + 1); AcpiOsPrintf ("0x%2.2X, ", Resource->I2cSerialBus.ResSourceIndex); AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 1)]); /* Insert a descriptor name */ AcpiDmDescriptorName (); /* Share */ AcpiOsPrintf (", %s,\n", AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 2)]); /* Dump the vendor data */ AcpiDmIndent (Level + 1); AcpiDmDumpSerialBusVendorData (Resource, Level); AcpiOsPrintf (")\n"); MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName); } /******************************************************************************* * * FUNCTION: AcpiDmSpiSerialBusDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a SPI serial bus descriptor * ******************************************************************************/ static void AcpiDmSpiSerialBusDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { UINT32 ResourceSourceOffset; char *DeviceName; /* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */ AcpiDmIndent (Level); AcpiOsPrintf ("SpiSerialBusV2 (0x%4.4X, %s, %s, 0x%2.2X,\n", Resource->SpiSerialBus.DeviceSelection, AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags, 1)], AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags)], Resource->SpiSerialBus.DataBitLength); /* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */ AcpiDmIndent (Level + 1); AcpiOsPrintf ("%s, 0x%8.8X, %s,\n", AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.Flags)], Resource->SpiSerialBus.ConnectionSpeed, AcpiGbl_CpoDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPolarity)]); AcpiDmIndent (Level + 1); AcpiOsPrintf ("%s, ", AcpiGbl_CphDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPhase)]); /* ResourceSource is a required field */ ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + Resource->CommonSerialBus.TypeDataLength; DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset); AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); /* ResourceSourceIndex, ResourceUsage */ AcpiOsPrintf (",\n"); AcpiDmIndent (Level + 1); AcpiOsPrintf ("0x%2.2X, ", Resource->SpiSerialBus.ResSourceIndex); AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 1)]); /* Insert a descriptor name */ AcpiDmDescriptorName (); /* Share */ AcpiOsPrintf (", %s,\n", AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 2)]); /* Dump the vendor data */ AcpiDmIndent (Level + 1); AcpiDmDumpSerialBusVendorData (Resource, Level); AcpiOsPrintf (")\n"); MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName); } /******************************************************************************* * * FUNCTION: AcpiDmUartSerialBusDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a UART serial bus descriptor * ******************************************************************************/ static void AcpiDmUartSerialBusDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { UINT32 ResourceSourceOffset; char *DeviceName; /* ConnectionSpeed, BitsPerByte, StopBits */ AcpiDmIndent (Level); AcpiOsPrintf ("UartSerialBusV2 (0x%8.8X, %s, %s,\n", Resource->UartSerialBus.DefaultBaudRate, AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 4)], AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 2)]); /* LinesInUse, IsBigEndian, Parity, FlowControl */ AcpiDmIndent (Level + 1); AcpiOsPrintf ("0x%2.2X, %s, %s, %s,\n", Resource->UartSerialBus.LinesEnabled, AcpiGbl_EdDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 7)], AcpiGbl_PtDecode [ACPI_GET_3BIT_FLAG (Resource->UartSerialBus.Parity)], AcpiGbl_FcDecode [ACPI_GET_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags)]); /* ReceiveBufferSize, TransmitBufferSize */ AcpiDmIndent (Level + 1); AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ", Resource->UartSerialBus.RxFifoSize, Resource->UartSerialBus.TxFifoSize); /* ResourceSource is a required field */ ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + Resource->CommonSerialBus.TypeDataLength; DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset); AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); /* ResourceSourceIndex, ResourceUsage */ AcpiOsPrintf (",\n"); AcpiDmIndent (Level + 1); AcpiOsPrintf ("0x%2.2X, ", Resource->UartSerialBus.ResSourceIndex); AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 1)]); /* Insert a descriptor name */ AcpiDmDescriptorName (); /* Share */ AcpiOsPrintf (", %s,\n", AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 2)]); /* Dump the vendor data */ AcpiDmIndent (Level + 1); AcpiDmDumpSerialBusVendorData (Resource, Level); AcpiOsPrintf (")\n"); MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName); } /******************************************************************************* * * FUNCTION: AcpiDmSerialBusDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a I2C/SPI/UART/CSI2 serial bus descriptor * ******************************************************************************/ void AcpiDmSerialBusDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { SerialBusResourceDispatch [Resource->CommonSerialBus.Type] ( Info, Resource, Length, Level); } /******************************************************************************* * * FUNCTION: AcpiDmPinConfig * * PARAMETERS: PinConfigType - Pin configuration type * PinConfigValue - Pin configuration value * * RETURN: None * * DESCRIPTION: Pretty prints PinConfig type and value. * ******************************************************************************/ static void AcpiDmPinConfig( UINT8 PinConfigType, UINT32 PinConfigValue) { if (PinConfigType <= 13) { AcpiOsPrintf ("0x%2.2X /* %s */, ", PinConfigType, AcpiGbl_PtypDecode[PinConfigType]); } else { AcpiOsPrintf ("0x%2.2X, /* Vendor Defined */ ", PinConfigType); } /* PinConfigValue */ AcpiOsPrintf ("0x%4.4X,\n", PinConfigValue); } /******************************************************************************* * * FUNCTION: AcpiDmPinConfigDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a PinConfig descriptor * ******************************************************************************/ void AcpiDmPinConfigDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { UINT16 *PinList; UINT8 *VendorData; char *DeviceName = NULL; UINT32 PinCount; UINT32 i; AcpiDmIndent (Level); AcpiOsPrintf ("PinConfig (%s, ", AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinConfig.Flags)]); AcpiDmPinConfig (Resource->PinConfig.PinConfigType, Resource->PinConfig.PinConfigValue); AcpiDmIndent (Level + 1); if (Resource->PinConfig.ResSourceOffset) { DeviceName = ACPI_ADD_PTR (char, Resource, Resource->PinConfig.ResSourceOffset), AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); } AcpiOsPrintf (", "); AcpiOsPrintf ("0x%2.2X, ", Resource->PinConfig.ResSourceIndex); AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinConfig.Flags, 1)]); /* Insert a descriptor name */ AcpiDmDescriptorName (); AcpiOsPrintf (","); /* Dump the vendor data */ if (Resource->PinConfig.VendorLength) { AcpiOsPrintf ("\n"); AcpiDmIndent (Level + 1); VendorData = ACPI_ADD_PTR (UINT8, Resource, Resource->PinConfig.VendorOffset); AcpiDmDumpRawDataBuffer (VendorData, Resource->PinConfig.VendorLength, Level); } AcpiOsPrintf (")\n"); AcpiDmIndent (Level + 1); /* Dump the interrupt list */ AcpiOsPrintf ("{ // Pin list\n"); PinCount = ((UINT32) (Resource->PinConfig.ResSourceOffset - Resource->PinConfig.PinTableOffset)) / sizeof (UINT16); PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource, Resource->PinConfig.PinTableOffset); for (i = 0; i < PinCount; i++) { AcpiDmIndent (Level + 2); AcpiOsPrintf ("0x%4.4X%s\n", PinList[i], ((i + 1) < PinCount) ? "," : ""); } AcpiDmIndent (Level + 1); AcpiOsPrintf ("}\n"); } /******************************************************************************* * * FUNCTION: AcpiDmPinGroupDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a PinGroup descriptor * ******************************************************************************/ void AcpiDmPinGroupDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { char *Label; UINT16 *PinList; UINT8 *VendorData; UINT32 PinCount; UINT32 i; AcpiDmIndent (Level); /* Always producer */ AcpiOsPrintf ("PinGroup ("); Label = ACPI_ADD_PTR (char, Resource, Resource->PinGroup.LabelOffset), AcpiUtPrintString (Label, ACPI_UINT16_MAX); AcpiOsPrintf (", "); AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroup.Flags)]); /* Insert a descriptor name */ AcpiDmDescriptorName (); AcpiOsPrintf (","); /* Dump the vendor data */ if (Resource->PinGroup.VendorLength) { AcpiOsPrintf ("\n"); AcpiDmIndent (Level + 1); VendorData = ACPI_ADD_PTR (UINT8, Resource, Resource->PinGroup.VendorOffset); AcpiDmDumpRawDataBuffer (VendorData, Resource->PinGroup.VendorLength, Level); } AcpiOsPrintf (")\n"); AcpiDmIndent (Level + 1); /* Dump the interrupt list */ AcpiOsPrintf ("{ // Pin list\n"); PinCount = (Resource->PinGroup.LabelOffset - Resource->PinGroup.PinTableOffset) / sizeof (UINT16); PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource, Resource->PinGroup.PinTableOffset); for (i = 0; i < PinCount; i++) { AcpiDmIndent (Level + 2); AcpiOsPrintf ("0x%4.4X%s\n", PinList[i], ((i + 1) < PinCount) ? "," : ""); } AcpiDmIndent (Level + 1); AcpiOsPrintf ("}\n"); } /******************************************************************************* * * FUNCTION: AcpiDmPinGroupFunctionDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a PinGroupFunction descriptor * ******************************************************************************/ void AcpiDmPinGroupFunctionDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { UINT8 *VendorData; char *DeviceName = NULL; char *Label = NULL; AcpiDmIndent (Level); AcpiOsPrintf ("PinGroupFunction (%s, ", AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroupFunction.Flags)]); /* FunctionNumber */ AcpiOsPrintf ("0x%4.4X, ", Resource->PinGroupFunction.FunctionNumber); DeviceName = ACPI_ADD_PTR (char, Resource, Resource->PinGroupFunction.ResSourceOffset), AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); AcpiOsPrintf (", "); AcpiOsPrintf ("0x%2.2X,\n", Resource->PinGroupFunction.ResSourceIndex); AcpiDmIndent (Level + 1); Label = ACPI_ADD_PTR (char, Resource, Resource->PinGroupFunction.ResSourceLabelOffset); AcpiUtPrintString (Label, ACPI_UINT16_MAX); AcpiOsPrintf (", "); AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinGroupFunction.Flags, 1)]); /* Insert a descriptor name */ AcpiDmDescriptorName (); AcpiOsPrintf (","); /* Dump the vendor data */ if (Resource->PinGroupFunction.VendorLength) { AcpiOsPrintf ("\n"); AcpiDmIndent (Level + 1); VendorData = ACPI_ADD_PTR (UINT8, Resource, Resource->PinGroupFunction.VendorOffset); AcpiDmDumpRawDataBuffer (VendorData, Resource->PinGroupFunction.VendorLength, Level); } AcpiOsPrintf (")\n"); } /******************************************************************************* * * FUNCTION: AcpiDmPinGroupConfigDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a PinGroupConfig descriptor * ******************************************************************************/ void AcpiDmPinGroupConfigDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { UINT8 *VendorData; char *DeviceName = NULL; char *Label = NULL; AcpiDmIndent (Level); AcpiOsPrintf ("PinGroupConfig (%s, ", AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroupConfig.Flags)]); AcpiDmPinConfig(Resource->PinGroupConfig.PinConfigType, Resource->PinGroupConfig.PinConfigValue); AcpiDmIndent (Level + 1); DeviceName = ACPI_ADD_PTR (char, Resource, Resource->PinGroupConfig.ResSourceOffset), AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); AcpiOsPrintf (", "); AcpiOsPrintf ("0x%2.2X, ", Resource->PinGroupConfig.ResSourceIndex); Label = ACPI_ADD_PTR (char, Resource, Resource->PinGroupConfig.ResSourceLabelOffset); AcpiUtPrintString (Label, ACPI_UINT16_MAX); AcpiOsPrintf (", "); AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinGroupConfig.Flags, 1)]); /* Insert a descriptor name */ AcpiDmDescriptorName (); AcpiOsPrintf (","); /* Dump the vendor data */ if (Resource->PinGroupConfig.VendorLength) { AcpiOsPrintf ("\n"); AcpiDmIndent (Level + 1); VendorData = ACPI_ADD_PTR (UINT8, Resource, Resource->PinGroupConfig.VendorOffset); AcpiDmDumpRawDataBuffer (VendorData, Resource->PinGroupConfig.VendorLength, Level); } AcpiOsPrintf (")\n"); } src/acpica/source/components/disassembler/dmresrcs.c000066400000000000000000000425561465205512700232400ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dmresrcs.c - "Small" Resource Descriptor disassembly * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdisasm.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dbresrcs") /******************************************************************************* * * FUNCTION: AcpiDmIrqDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a IRQ descriptor, either Irq() or IrqNoFlags() * ******************************************************************************/ void AcpiDmIrqDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { AcpiDmIndent (Level); AcpiOsPrintf ("%s (", AcpiGbl_IrqDecode [ACPI_GET_1BIT_FLAG (Length)]); /* Decode flags byte if present */ if (Length & 1) { AcpiOsPrintf ("%s, %s, %s, ", AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Irq.Flags)], AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Irq.Flags, 3)], AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Irq.Flags, 4)]); } /* Insert a descriptor name */ AcpiDmDescriptorName (); AcpiOsPrintf (")\n"); AcpiDmIndent (Level + 1); AcpiDmBitList (Resource->Irq.IrqMask); } /******************************************************************************* * * FUNCTION: AcpiDmDmaDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a DMA descriptor * ******************************************************************************/ void AcpiDmDmaDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { AcpiDmIndent (Level); AcpiOsPrintf ("DMA (%s, %s, %s, ", AcpiGbl_TypDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Dma.Flags, 5)], AcpiGbl_BmDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Dma.Flags, 2)], AcpiGbl_SizDecode [ACPI_GET_2BIT_FLAG (Resource->Dma.Flags)]); /* Insert a descriptor name */ AcpiDmDescriptorName (); AcpiOsPrintf (")\n"); AcpiDmIndent (Level + 1); AcpiDmBitList (Resource->Dma.DmaChannelMask); } /******************************************************************************* * * FUNCTION: AcpiDmFixedDmaDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a FixedDMA descriptor * ******************************************************************************/ void AcpiDmFixedDmaDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { AcpiDmIndent (Level); AcpiOsPrintf ("FixedDMA (0x%4.4X, 0x%4.4X, ", Resource->FixedDma.RequestLines, Resource->FixedDma.Channels); if (Resource->FixedDma.Width <= 5) { AcpiOsPrintf ("%s, ", AcpiGbl_DtsDecode [Resource->FixedDma.Width]); } else { AcpiOsPrintf ("%X /* INVALID DMA WIDTH */, ", Resource->FixedDma.Width); } /* Insert a descriptor name */ AcpiDmDescriptorName (); AcpiOsPrintf (")\n"); } /******************************************************************************* * * FUNCTION: AcpiDmIoDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode an IO descriptor * ******************************************************************************/ void AcpiDmIoDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { AcpiDmIndent (Level); AcpiOsPrintf ("IO (%s,\n", AcpiGbl_IoDecode [ACPI_GET_1BIT_FLAG (Resource->Io.Flags)]); AcpiDmIndent (Level + 1); AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum"); AcpiDmIndent (Level + 1); AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum"); AcpiDmIndent (Level + 1); AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment"); AcpiDmIndent (Level + 1); AcpiDmDumpInteger8 (Resource->Io.AddressLength, "Length"); /* Insert a descriptor name */ AcpiDmIndent (Level + 1); AcpiDmDescriptorName (); AcpiOsPrintf (")\n"); } /******************************************************************************* * * FUNCTION: AcpiDmFixedIoDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a Fixed IO descriptor * ******************************************************************************/ void AcpiDmFixedIoDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { AcpiDmIndent (Level); AcpiOsPrintf ("FixedIO (\n"); AcpiDmIndent (Level + 1); AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address"); AcpiDmIndent (Level + 1); AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length"); /* Insert a descriptor name */ AcpiDmIndent (Level + 1); AcpiDmDescriptorName (); AcpiOsPrintf (")\n"); } /******************************************************************************* * * FUNCTION: AcpiDmStartDependentDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a Start Dependent functions descriptor * ******************************************************************************/ void AcpiDmStartDependentDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { AcpiDmIndent (Level); if (Length & 1) { AcpiOsPrintf ("StartDependentFn (0x%2.2X, 0x%2.2X)\n", (UINT32) ACPI_GET_2BIT_FLAG (Resource->StartDpf.Flags), (UINT32) ACPI_EXTRACT_2BIT_FLAG (Resource->StartDpf.Flags, 2)); } else { AcpiOsPrintf ("StartDependentFnNoPri ()\n"); } AcpiDmIndent (Level); AcpiOsPrintf ("{\n"); } /******************************************************************************* * * FUNCTION: AcpiDmEndDependentDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode an End Dependent functions descriptor * ******************************************************************************/ void AcpiDmEndDependentDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { AcpiDmIndent (Level); AcpiOsPrintf ("}\n"); AcpiDmIndent (Level); AcpiOsPrintf ("EndDependentFn ()\n"); } /******************************************************************************* * * FUNCTION: AcpiDmVendorSmallDescriptor * * PARAMETERS: Info - Extra resource info * Resource - Pointer to the resource descriptor * Length - Length of the descriptor in bytes * Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Decode a Vendor Small Descriptor * ******************************************************************************/ void AcpiDmVendorSmallDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level) { AcpiDmVendorCommon ("Short", ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_SMALL_HEADER)), Length, Level); } src/acpica/source/components/disassembler/dmutils.c000066400000000000000000000347021465205512700230710ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dmutils - AML disassembler utilities * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "amlcode.h" #include "acdisasm.h" #include "acconvert.h" #ifdef ACPI_ASL_COMPILER #include #endif #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dmutils") /* Data used in keeping track of fields */ #if 0 const char *AcpiGbl_FENames[] = { "skip", "?access?" }; /* FE = Field Element */ #endif /* Operators for Match() */ const char *AcpiGbl_MatchOps[] = { "MTR", "MEQ", "MLE", "MLT", "MGE", "MGT" }; /* Access type decoding */ const char *AcpiGbl_AccessTypes[] = { "AnyAcc", "ByteAcc", "WordAcc", "DWordAcc", "QWordAcc", "BufferAcc", "InvalidAccType", "InvalidAccType" }; /* Lock rule decoding */ const char *AcpiGbl_LockRule[] = { "NoLock", "Lock" }; /* Update rule decoding */ const char *AcpiGbl_UpdateRules[] = { "Preserve", "WriteAsOnes", "WriteAsZeros", "InvalidUpdateRule" }; /* Strings used to decode resource descriptors */ const char *AcpiGbl_WordDecode[] = { "Memory", "IO", "BusNumber", "UnknownResourceType" }; const char *AcpiGbl_IrqDecode[] = { "IRQNoFlags", "IRQ" }; /******************************************************************************* * * FUNCTION: AcpiDmDecodeAttribute * * PARAMETERS: Attribute - Attribute field of AccessAs keyword * * RETURN: None * * DESCRIPTION: Decode the AccessAs attribute byte. (Mostly SMBus and * GenericSerialBus stuff.) * ******************************************************************************/ void AcpiDmDecodeAttribute ( UINT8 Attribute) { switch (Attribute) { case AML_FIELD_ATTRIB_QUICK: AcpiOsPrintf ("AttribQuick"); break; case AML_FIELD_ATTRIB_SEND_RECEIVE: AcpiOsPrintf ("AttribSendReceive"); break; case AML_FIELD_ATTRIB_BYTE: AcpiOsPrintf ("AttribByte"); break; case AML_FIELD_ATTRIB_WORD: AcpiOsPrintf ("AttribWord"); break; case AML_FIELD_ATTRIB_BLOCK: AcpiOsPrintf ("AttribBlock"); break; case AML_FIELD_ATTRIB_BYTES: AcpiOsPrintf ("AttribBytes"); break; case AML_FIELD_ATTRIB_PROCESS_CALL: AcpiOsPrintf ("AttribProcessCall"); break; case AML_FIELD_ATTRIB_BLOCK_PROCESS_CALL: AcpiOsPrintf ("AttribBlockProcessCall"); break; case AML_FIELD_ATTRIB_RAW_BYTES: AcpiOsPrintf ("AttribRawBytes"); break; case AML_FIELD_ATTRIB_RAW_PROCESS_BYTES: AcpiOsPrintf ("AttribRawProcessBytes"); break; default: /* A ByteConst is allowed by the grammar */ AcpiOsPrintf ("0x%2.2X", Attribute); break; } } /******************************************************************************* * * FUNCTION: AcpiDmIndent * * PARAMETERS: Level - Current source code indentation level * * RETURN: None * * DESCRIPTION: Indent 4 spaces per indentation level. * ******************************************************************************/ void AcpiDmIndent ( UINT32 Level) { if (!Level) { return; } AcpiOsPrintf ("%*.s", (Level * 4), " "); } /******************************************************************************* * * FUNCTION: AcpiDmCommaIfListMember * * PARAMETERS: Op - Current operator/operand * * RETURN: TRUE if a comma was inserted * * DESCRIPTION: Insert a comma if this Op is a member of an argument list. * ******************************************************************************/ BOOLEAN AcpiDmCommaIfListMember ( ACPI_PARSE_OBJECT *Op) { if (!Op->Common.Next) { ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0); return (FALSE); } if (AcpiDmListType (Op->Common.Parent) & BLOCK_COMMA_LIST) { /* Exit if Target has been marked IGNORE */ if (Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_IGNORE) { ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0); return (FALSE); } /* Check for a NULL target operand */ if ((Op->Common.Next->Common.AmlOpcode == AML_INT_NAMEPATH_OP) && (!Op->Common.Next->Common.Value.String)) { /* * To handle the Divide() case where there are two optional * targets, look ahead one more op. If null, this null target * is the one and only target -- no comma needed. Otherwise, * we need a comma to prepare for the next target. */ if (!Op->Common.Next->Common.Next) { ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0); return (FALSE); } } if ((Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST) && (!(Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST))) { ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0); return (FALSE); } /* Emit comma only if this is not a C-style operator */ if (!Op->Common.OperatorSymbol) { AcpiOsPrintf (", "); ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0); } return (TRUE); } else if ((Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST) && (Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST)) { AcpiOsPrintf (", "); ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0); return (TRUE); } return (FALSE); } /******************************************************************************* * * FUNCTION: AcpiDmCommaIfFieldMember * * PARAMETERS: Op - Current operator/operand * * RETURN: None * * DESCRIPTION: Insert a comma if this Op is a member of a Field argument list. * ******************************************************************************/ void AcpiDmCommaIfFieldMember ( ACPI_PARSE_OBJECT *Op) { if (Op->Common.Next) { AcpiOsPrintf (", "); } } src/acpica/source/components/disassembler/dmwalk.c000066400000000000000000001143761465205512700226750ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dmwalk - AML disassembly tree walk * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acdebug.h" #include "acconvert.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("dmwalk") /* Stub for non-compiler code */ #ifndef ACPI_ASL_COMPILER void AcpiDmEmitExternals ( void) { return; } void AcpiDmEmitExternal ( ACPI_PARSE_OBJECT *NameOp, ACPI_PARSE_OBJECT *TypeOp) { return; } #endif /* Local prototypes */ static ACPI_STATUS AcpiDmDescendingOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); static ACPI_STATUS AcpiDmAscendingOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); /******************************************************************************* * * FUNCTION: AcpiDmDisassemble * * PARAMETERS: WalkState - Current state * Origin - Starting object * NumOpcodes - Max number of opcodes to be displayed * * RETURN: None * * DESCRIPTION: Disassemble parser object and its children. This is the * main entry point of the disassembler. * ******************************************************************************/ void AcpiDmDisassemble ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Origin, UINT32 NumOpcodes) { ACPI_PARSE_OBJECT *Op = Origin; ACPI_OP_WALK_INFO Info; if (!Op) { return; } memset (&Info, 0, sizeof (ACPI_OP_WALK_INFO)); Info.WalkState = WalkState; Info.StartAml = Op->Common.Aml - sizeof (ACPI_TABLE_HEADER); Info.AmlOffset = Op->Common.Aml - Info.StartAml; AcpiDmWalkParseTree (Op, AcpiDmDescendingOp, AcpiDmAscendingOp, &Info); return; } /******************************************************************************* * * FUNCTION: AcpiDmWalkParseTree * * PARAMETERS: Op - Root Op object * DescendingCallback - Called during tree descent * AscendingCallback - Called during tree ascent * Context - To be passed to the callbacks * * RETURN: Status from callback(s) * * DESCRIPTION: Walk the entire parse tree. * ******************************************************************************/ void AcpiDmWalkParseTree ( ACPI_PARSE_OBJECT *Op, ASL_WALK_CALLBACK DescendingCallback, ASL_WALK_CALLBACK AscendingCallback, void *Context) { BOOLEAN NodePreviouslyVisited; ACPI_PARSE_OBJECT *StartOp = Op; ACPI_STATUS Status; ACPI_PARSE_OBJECT *Next; ACPI_OP_WALK_INFO *Info = Context; Info->Level = 0; NodePreviouslyVisited = FALSE; while (Op) { if (NodePreviouslyVisited) { if (AscendingCallback) { Status = AscendingCallback (Op, Info->Level, Context); if (ACPI_FAILURE (Status)) { return; } } } else { /* Let the callback process the node */ Status = DescendingCallback (Op, Info->Level, Context); if (ACPI_SUCCESS (Status)) { /* Visit children first, once */ Next = AcpiPsGetArg (Op, 0); if (Next) { Info->Level++; Op = Next; continue; } } else if (Status != AE_CTRL_DEPTH) { /* Exit immediately on any error */ return; } } /* Terminate walk at start op */ if (Op == StartOp) { break; } /* No more children, re-visit this node */ if (!NodePreviouslyVisited) { NodePreviouslyVisited = TRUE; continue; } /* No more children, visit peers */ if (Op->Common.Next) { Op = Op->Common.Next; NodePreviouslyVisited = FALSE; } else { /* No peers, re-visit parent */ if (Info->Level != 0 ) { Info->Level--; } Op = Op->Common.Parent; NodePreviouslyVisited = TRUE; } } /* If we get here, the walk completed with no errors */ return; } /******************************************************************************* * * FUNCTION: AcpiDmBlockType * * PARAMETERS: Op - Object to be examined * * RETURN: BlockType - not a block, parens, braces, or even both. * * DESCRIPTION: Type of block for this op (parens or braces) * ******************************************************************************/ UINT32 AcpiDmBlockType ( ACPI_PARSE_OBJECT *Op) { const ACPI_OPCODE_INFO *OpInfo; if (!Op) { return (BLOCK_NONE); } switch (Op->Common.AmlOpcode) { case AML_ELSE_OP: return (BLOCK_BRACE); case AML_METHOD_OP: case AML_DEVICE_OP: case AML_SCOPE_OP: case AML_PROCESSOR_OP: case AML_POWER_RESOURCE_OP: case AML_THERMAL_ZONE_OP: case AML_IF_OP: case AML_WHILE_OP: case AML_FIELD_OP: case AML_INDEX_FIELD_OP: case AML_BANK_FIELD_OP: return (BLOCK_PAREN | BLOCK_BRACE); case AML_BUFFER_OP: if ((Op->Common.DisasmOpcode == ACPI_DASM_UNICODE) || (Op->Common.DisasmOpcode == ACPI_DASM_UUID) || (Op->Common.DisasmOpcode == ACPI_DASM_PLD_METHOD)) { return (BLOCK_NONE); } ACPI_FALLTHROUGH; case AML_PACKAGE_OP: case AML_VARIABLE_PACKAGE_OP: return (BLOCK_PAREN | BLOCK_BRACE); case AML_EVENT_OP: return (BLOCK_PAREN); case AML_INT_METHODCALL_OP: if (Op->Common.Parent && ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP))) { /* This is a reference to a method, not an invocation */ return (BLOCK_NONE); } ACPI_FALLTHROUGH; default: OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); if (OpInfo->Flags & AML_HAS_ARGS) { return (BLOCK_PAREN); } return (BLOCK_NONE); } } /******************************************************************************* * * FUNCTION: AcpiDmListType * * PARAMETERS: Op - Object to be examined * * RETURN: ListType - has commas or not. * * DESCRIPTION: Type of block for this op (parens or braces) * ******************************************************************************/ UINT32 AcpiDmListType ( ACPI_PARSE_OBJECT *Op) { const ACPI_OPCODE_INFO *OpInfo; if (!Op) { return (BLOCK_NONE); } switch (Op->Common.AmlOpcode) { case AML_ELSE_OP: case AML_METHOD_OP: case AML_DEVICE_OP: case AML_SCOPE_OP: case AML_POWER_RESOURCE_OP: case AML_PROCESSOR_OP: case AML_THERMAL_ZONE_OP: case AML_IF_OP: case AML_WHILE_OP: case AML_FIELD_OP: case AML_INDEX_FIELD_OP: case AML_BANK_FIELD_OP: return (BLOCK_NONE); case AML_BUFFER_OP: case AML_PACKAGE_OP: case AML_VARIABLE_PACKAGE_OP: return (BLOCK_COMMA_LIST); default: OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); if (OpInfo->Flags & AML_HAS_ARGS) { return (BLOCK_COMMA_LIST); } return (BLOCK_NONE); } } /******************************************************************************* * * FUNCTION: AcpiDmDescendingOp * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: First visitation of a parse object during tree descent. * Decode opcode name and begin parameter list(s), if any. * ******************************************************************************/ static ACPI_STATUS AcpiDmDescendingOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_OP_WALK_INFO *Info = Context; const ACPI_OPCODE_INFO *OpInfo; UINT32 Name; ACPI_PARSE_OBJECT *NextOp; ACPI_PARSE_OBJECT *NextOp2; UINT32 AmlOffset; /* Determine which file this parse node is contained in. */ if (AcpiGbl_CaptureComments) { ASL_CV_LABEL_FILENODE (Op); if (Level != 0 && ASL_CV_FILE_HAS_SWITCHED (Op)) { ASL_CV_SWITCH_FILES (Level, Op); } /* If this parse node has regular comments, print them here. */ ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_STANDARD, NULL, Level); } OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); /* Listing support to dump the AML code after the ASL statement */ if (AcpiGbl_DmOpt_Listing) { /* We only care about these classes of objects */ if ((OpInfo->Class == AML_CLASS_NAMED_OBJECT) || (OpInfo->Class == AML_CLASS_CONTROL) || (OpInfo->Class == AML_CLASS_CREATE) || ((OpInfo->Class == AML_CLASS_EXECUTE) && (!Op->Common.Next))) { if (AcpiGbl_DmOpt_Listing && Info->PreviousAml) { /* Dump the AML byte code for the previous Op */ if (Op->Common.Aml > Info->PreviousAml) { AcpiOsPrintf ("\n"); AcpiUtDumpBuffer ( (Info->StartAml + Info->AmlOffset), (Op->Common.Aml - Info->PreviousAml), DB_BYTE_DISPLAY, Info->AmlOffset); AcpiOsPrintf ("\n"); } Info->AmlOffset = (Op->Common.Aml - Info->StartAml); } Info->PreviousAml = Op->Common.Aml; } } if (Op->Common.DisasmFlags & ACPI_PARSEOP_IGNORE) { /* Ignore this op -- it was handled elsewhere */ return (AE_CTRL_DEPTH); } if (Op->Common.DisasmOpcode == ACPI_DASM_IGNORE_SINGLE) { /* Ignore this op, but not it's children */ return (AE_OK); } if (Op->Common.AmlOpcode == AML_IF_OP) { NextOp = AcpiPsGetDepthNext (NULL, Op); if (NextOp) { NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST; /* Don't emit the actual embedded externals unless asked */ if (!AcpiGbl_DmEmitExternalOpcodes) { /* * A Zero predicate indicates the possibility of one or more * External() opcodes within the If() block. */ if (NextOp->Common.AmlOpcode == AML_ZERO_OP) { NextOp2 = NextOp->Common.Next; if (NextOp2 && (NextOp2->Common.AmlOpcode == AML_EXTERNAL_OP)) { /* Ignore the If 0 block and all children */ Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; return (AE_CTRL_DEPTH); } } } } } /* Level 0 is at the Definition Block level */ if (Level == 0) { /* In verbose mode, print the AML offset, opcode and depth count */ if (Info->WalkState) { AmlOffset = (UINT32) ACPI_PTR_DIFF (Op->Common.Aml, Info->WalkState->ParserState.AmlStart); if (AcpiGbl_DmOpt_Verbose) { if (AcpiGbl_CmSingleStep) { AcpiOsPrintf ("%5.5X/%4.4X: ", AmlOffset, (UINT32) Op->Common.AmlOpcode); } else { AcpiOsPrintf ("AML Offset %5.5X, Opcode %4.4X: ", AmlOffset, (UINT32) Op->Common.AmlOpcode); } } } if (Op->Common.AmlOpcode == AML_SCOPE_OP) { /* This is the beginning of the Definition Block */ AcpiOsPrintf ("{\n"); /* Emit all External() declarations here */ if (!AcpiGbl_DmEmitExternalOpcodes) { AcpiDmEmitExternals (); } return (AE_OK); } } else if ((AcpiDmBlockType (Op->Common.Parent) & BLOCK_BRACE) && (!(Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST)) && (!(Op->Common.DisasmFlags & ACPI_PARSEOP_ELSEIF)) && (Op->Common.AmlOpcode != AML_INT_BYTELIST_OP)) { /* * This is a first-level element of a term list, * indent a new line */ switch (Op->Common.AmlOpcode) { case AML_NOOP_OP: /* * Optionally just ignore this opcode. Some tables use * NoOp opcodes for "padding" out packages that the BIOS * changes dynamically. This can leave hundreds or * thousands of NoOp opcodes that if disassembled, * cannot be compiled because they are syntactically * incorrect. */ if (AcpiGbl_IgnoreNoopOperator) { Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; return (AE_OK); } ACPI_FALLTHROUGH; default: AcpiDmIndent (Level); break; } Info->LastLevel = Level; Info->Count = 0; } /* * This is an inexpensive mechanism to try and keep lines from getting * too long. When the limit is hit, start a new line at the previous * indent plus one. A better but more expensive mechanism would be to * keep track of the current column. */ Info->Count++; if (Info->Count /* +Info->LastLevel */ > 12) { Info->Count = 0; AcpiOsPrintf ("\n"); AcpiDmIndent (Info->LastLevel + 1); } /* If ASL+ is enabled, check for a C-style operator */ if (AcpiDmCheckForSymbolicOpcode (Op, Info)) { return (AE_OK); } /* Print the opcode name */ AcpiDmDisassembleOneOp (NULL, Info, Op); if ((Op->Common.DisasmOpcode == ACPI_DASM_LNOT_PREFIX) || (Op->Common.AmlOpcode == AML_INT_CONNECTION_OP)) { return (AE_OK); } if ((Op->Common.AmlOpcode == AML_NAME_OP) || (Op->Common.AmlOpcode == AML_RETURN_OP)) { Info->Level--; } if (Op->Common.AmlOpcode == AML_EXTERNAL_OP) { Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; return (AE_CTRL_DEPTH); } /* Start the opcode argument list if necessary */ if ((OpInfo->Flags & AML_HAS_ARGS) || (Op->Common.AmlOpcode == AML_EVENT_OP)) { /* This opcode has an argument list */ if (AcpiDmBlockType (Op) & BLOCK_PAREN) { AcpiOsPrintf (" ("); if (!(AcpiDmBlockType (Op) & BLOCK_BRACE)) { ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, " ", 0); } } /* If this is a named opcode, print the associated name value */ if (OpInfo->Flags & AML_NAMED) { switch (Op->Common.AmlOpcode) { case AML_ALIAS_OP: NextOp = AcpiPsGetDepthNext (NULL, Op); NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; AcpiDmNamestring (NextOp->Common.Value.Name); AcpiOsPrintf (", "); ACPI_FALLTHROUGH; default: Name = AcpiPsGetName (Op); if (Op->Named.Path) { AcpiDmNamestring (Op->Named.Path); } else { AcpiDmDumpName (Name); } if (Op->Common.AmlOpcode != AML_INT_NAMEDFIELD_OP) { if (AcpiGbl_DmOpt_Verbose) { (void) AcpiPsDisplayObjectPathname (NULL, Op); } } break; } switch (Op->Common.AmlOpcode) { case AML_METHOD_OP: AcpiDmMethodFlags (Op); ASL_CV_CLOSE_PAREN (Op, Level); /* Emit description comment for Method() with a predefined ACPI name */ AcpiDmPredefinedDescription (Op); break; case AML_NAME_OP: /* Check for _HID and related EISAID() */ AcpiDmCheckForHardwareId (Op); AcpiOsPrintf (", "); ASL_CV_PRINT_ONE_COMMENT (Op, AML_NAMECOMMENT, NULL, 0); break; case AML_REGION_OP: AcpiDmRegionFlags (Op); break; case AML_POWER_RESOURCE_OP: /* Mark the next two Ops as part of the parameter list */ AcpiOsPrintf (", "); NextOp = AcpiPsGetDepthNext (NULL, Op); NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST; NextOp = NextOp->Common.Next; NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST; return (AE_OK); case AML_PROCESSOR_OP: /* Mark the next three Ops as part of the parameter list */ AcpiOsPrintf (", "); NextOp = AcpiPsGetDepthNext (NULL, Op); NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST; NextOp = NextOp->Common.Next; NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST; NextOp = NextOp->Common.Next; NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST; return (AE_OK); case AML_MUTEX_OP: case AML_DATA_REGION_OP: AcpiOsPrintf (", "); return (AE_OK); case AML_EVENT_OP: case AML_ALIAS_OP: return (AE_OK); case AML_SCOPE_OP: case AML_DEVICE_OP: case AML_THERMAL_ZONE_OP: ASL_CV_CLOSE_PAREN (Op, Level); break; default: AcpiOsPrintf ("*** Unhandled named opcode %X\n", Op->Common.AmlOpcode); break; } } else switch (Op->Common.AmlOpcode) { case AML_FIELD_OP: case AML_BANK_FIELD_OP: case AML_INDEX_FIELD_OP: Info->BitOffset = 0; /* Name of the parent OperationRegion */ NextOp = AcpiPsGetDepthNext (NULL, Op); AcpiDmNamestring (NextOp->Common.Value.Name); AcpiOsPrintf (", "); NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; switch (Op->Common.AmlOpcode) { case AML_BANK_FIELD_OP: /* Namestring - Bank Name */ NextOp = AcpiPsGetDepthNext (NULL, NextOp); AcpiDmNamestring (NextOp->Common.Value.Name); NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; AcpiOsPrintf (", "); /* * Bank Value. This is a TermArg in the middle of the parameter * list, must handle it here. * * Disassemble the TermArg parse tree. ACPI_PARSEOP_PARAMETER_LIST * eliminates newline in the output. */ NextOp = NextOp->Common.Next; Info->Flags = ACPI_PARSEOP_PARAMETER_LIST; AcpiDmWalkParseTree (NextOp, AcpiDmDescendingOp, AcpiDmAscendingOp, Info); Info->Flags = 0; Info->Level = Level; NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; AcpiOsPrintf (", "); break; case AML_INDEX_FIELD_OP: /* Namestring - Data Name */ NextOp = AcpiPsGetDepthNext (NULL, NextOp); AcpiDmNamestring (NextOp->Common.Value.Name); AcpiOsPrintf (", "); NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; break; default: break; } AcpiDmFieldFlags (NextOp); break; case AML_BUFFER_OP: /* The next op is the size parameter */ NextOp = AcpiPsGetDepthNext (NULL, Op); if (!NextOp) { /* Single-step support */ return (AE_OK); } 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 */ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; ASL_CV_CLOSE_PAREN (Op, Level); if (Op->Asl.Parent->Common.AmlOpcode == AML_NAME_OP) { /* * Emit description comment showing the full ACPI name * of the ResourceTemplate only if it was defined using a * Name statement. */ AcpiDmPredefinedDescription (Op->Asl.Parent); } AcpiDmPredefinedDescription (Op->Asl.Parent); AcpiOsPrintf ("\n"); AcpiDmIndent (Info->Level); AcpiOsPrintf ("{\n"); return (AE_OK); } /* Normal Buffer, mark size as in the parameter list */ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST; return (AE_OK); case AML_IF_OP: case AML_VARIABLE_PACKAGE_OP: case AML_WHILE_OP: /* The next op is the size or predicate parameter */ NextOp = AcpiPsGetDepthNext (NULL, Op); if (NextOp) { NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST; } return (AE_OK); case AML_PACKAGE_OP: /* The next op is the size parameter */ NextOp = AcpiPsGetDepthNext (NULL, Op); if (NextOp) { NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST; } return (AE_OK); case AML_MATCH_OP: AcpiDmMatchOp (Op); break; default: break; } if (AcpiDmBlockType (Op) & BLOCK_BRACE) { AcpiOsPrintf ("\n"); AcpiDmIndent (Level); AcpiOsPrintf ("{\n"); } } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDmAscendingOp * * PARAMETERS: ASL_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Second visitation of a parse object, during ascent of parse * tree. Close out any parameter lists and complete the opcode. * ******************************************************************************/ static ACPI_STATUS AcpiDmAscendingOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context) { ACPI_OP_WALK_INFO *Info = Context; ACPI_PARSE_OBJECT *ParentOp; /* Point the Op's filename pointer to the proper file */ if (AcpiGbl_CaptureComments) { ASL_CV_LABEL_FILENODE (Op); /* Switch the output of these files if necessary */ if (ASL_CV_FILE_HAS_SWITCHED (Op)) { ASL_CV_SWITCH_FILES (Level, Op); } } if (Op->Common.DisasmFlags & ACPI_PARSEOP_IGNORE || Op->Common.DisasmOpcode == ACPI_DASM_IGNORE_SINGLE) { /* Ignore this op -- it was handled elsewhere */ return (AE_OK); } if ((Level == 0) && (Op->Common.AmlOpcode == AML_SCOPE_OP)) { /* Indicates the end of the current descriptor block (table) */ ASL_CV_CLOSE_BRACE (Op, Level); /* Print any comments that are at the end of the file here */ if (AcpiGbl_CaptureComments && AcpiGbl_LastListHead) { AcpiOsPrintf ("\n"); ASL_CV_PRINT_ONE_COMMENT_LIST (AcpiGbl_LastListHead, 0); } AcpiOsPrintf ("\n\n"); return (AE_OK); } switch (AcpiDmBlockType (Op)) { case BLOCK_PAREN: /* Completed an op that has arguments, add closing paren if needed */ AcpiDmCloseOperator (Op); 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); } /* Decode Notify() values */ if (Op->Common.AmlOpcode == AML_NOTIFY_OP) { AcpiDmNotifyDescription (Op); } AcpiDmDisplayTargetPathname (Op); /* Could be a nested operator, check if comma required */ if (!AcpiDmCommaIfListMember (Op)) { if ((AcpiDmBlockType (Op->Common.Parent) & BLOCK_BRACE) && (!(Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST)) && (Op->Common.AmlOpcode != AML_INT_BYTELIST_OP)) { /* * This is a first-level element of a term list * start a new line */ if (!(Info->Flags & ACPI_PARSEOP_PARAMETER_LIST)) { AcpiOsPrintf ("\n"); } } } break; case BLOCK_BRACE: case (BLOCK_BRACE | BLOCK_PAREN): /* Completed an op that has a term list, add closing brace */ if (Op->Common.DisasmFlags & ACPI_PARSEOP_EMPTY_TERMLIST) { ASL_CV_CLOSE_BRACE (Op, Level); } else { AcpiDmIndent (Level); ASL_CV_CLOSE_BRACE (Op, Level); } AcpiDmCommaIfListMember (Op); if (AcpiDmBlockType (Op->Common.Parent) != BLOCK_PAREN) { AcpiOsPrintf ("\n"); if (!(Op->Common.DisasmFlags & ACPI_PARSEOP_EMPTY_TERMLIST)) { if ((Op->Common.AmlOpcode == AML_IF_OP) && (Op->Common.Next) && (Op->Common.Next->Common.AmlOpcode == AML_ELSE_OP)) { break; } if ((AcpiDmBlockType (Op->Common.Parent) & BLOCK_BRACE) && (!Op->Common.Next)) { break; } AcpiOsPrintf ("\n"); } } break; case BLOCK_NONE: default: /* Could be a nested operator, check if comma required */ if (!AcpiDmCommaIfListMember (Op)) { if ((AcpiDmBlockType (Op->Common.Parent) & BLOCK_BRACE) && (!(Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST)) && (Op->Common.AmlOpcode != AML_INT_BYTELIST_OP)) { /* * This is a first-level element of a term list * start a new line */ AcpiOsPrintf ("\n"); } } else if (Op->Common.Parent) { switch (Op->Common.Parent->Common.AmlOpcode) { case AML_PACKAGE_OP: case AML_VARIABLE_PACKAGE_OP: if (!(Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST)) { AcpiOsPrintf ("\n"); } break; default: break; } } break; } if (Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST) { if ((Op->Common.Next) && (Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST)) { return (AE_OK); } /* * The parent Op is guaranteed to be valid because of the flag * ACPI_PARSEOP_PARAMETER_LIST -- which means that this op is part of * a parameter list and thus has a valid parent. */ ParentOp = Op->Common.Parent; /* * Just completed a parameter node for something like "Buffer (param)". * Close the paren and open up the term list block with a brace. * * Switch predicates don't have a Next node but require a closing paren * and opening brace. */ if (Op->Common.Next || Op->Common.DisasmOpcode == ACPI_DASM_SWITCH_PREDICATE) { ASL_CV_CLOSE_PAREN (Op, Level); /* * Emit a description comment for a Name() operator that is a * predefined ACPI name. Must check the grandparent. */ ParentOp = ParentOp->Common.Parent; if (ParentOp && (ParentOp->Asl.AmlOpcode == AML_NAME_OP)) { AcpiDmPredefinedDescription (ParentOp); } /* Correct the indentation level for Switch and Case predicates */ if (Op->Common.DisasmOpcode == ACPI_DASM_SWITCH_PREDICATE) { --Level; } AcpiOsPrintf ("\n"); AcpiDmIndent (Level - 1); AcpiOsPrintf ("{\n"); } else { ParentOp->Common.DisasmFlags |= ACPI_PARSEOP_EMPTY_TERMLIST; ASL_CV_CLOSE_PAREN (Op, Level); AcpiOsPrintf ("{"); } } if ((Op->Common.AmlOpcode == AML_NAME_OP) || (Op->Common.AmlOpcode == AML_RETURN_OP)) { Info->Level++; } /* * For ASL+, check for and emit a C-style symbol. If valid, the * symbol string has been deferred until after the first operand */ if (AcpiGbl_CstyleDisassembly) { if (Op->Asl.OperatorSymbol) { AcpiOsPrintf ("%s", Op->Asl.OperatorSymbol); Op->Asl.OperatorSymbol = NULL; } } return (AE_OK); } src/acpica/source/components/dispatcher/000077500000000000000000000000001465205512700207075ustar00rootroot00000000000000src/acpica/source/components/dispatcher/dsargs.c000066400000000000000000000444511465205512700223460ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dsargs - Support for execution of dynamic arguments for static * objects (regions, fields, buffer fields, etc.) * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acdispat.h" #include "acnamesp.h" #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dsargs") /* Local prototypes */ static ACPI_STATUS AcpiDsExecuteArguments ( ACPI_NAMESPACE_NODE *Node, ACPI_NAMESPACE_NODE *ScopeNode, UINT32 AmlLength, UINT8 *AmlStart); /******************************************************************************* * * FUNCTION: AcpiDsExecuteArguments * * PARAMETERS: Node - Object NS node * ScopeNode - Parent NS node * AmlLength - Length of executable AML * AmlStart - Pointer to the AML * * RETURN: Status. * * DESCRIPTION: Late (deferred) execution of region or field arguments * ******************************************************************************/ static ACPI_STATUS AcpiDsExecuteArguments ( ACPI_NAMESPACE_NODE *Node, ACPI_NAMESPACE_NODE *ScopeNode, UINT32 AmlLength, UINT8 *AmlStart) { ACPI_STATUS Status; ACPI_PARSE_OBJECT *Op; ACPI_WALK_STATE *WalkState; ACPI_FUNCTION_TRACE_PTR (DsExecuteArguments, AmlStart); /* Allocate a new parser op to be the root of the parsed tree */ Op = AcpiPsAllocOp (AML_INT_EVAL_SUBTREE_OP, AmlStart); if (!Op) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Save the Node for use in AcpiPsParseAml */ Op->Common.Node = ScopeNode; /* Create and initialize a new parser state */ WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL); if (!WalkState) { Status = AE_NO_MEMORY; goto Cleanup; } Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, AmlStart, AmlLength, NULL, ACPI_IMODE_LOAD_PASS1); if (ACPI_FAILURE (Status)) { AcpiDsDeleteWalkState (WalkState); goto Cleanup; } /* Mark this parse as a deferred opcode */ WalkState->ParseFlags = ACPI_PARSE_DEFERRED_OP; WalkState->DeferredNode = Node; /* Pass1: Parse the entire declaration */ Status = AcpiPsParseAml (WalkState); if (ACPI_FAILURE (Status)) { goto Cleanup; } /* Get and init the Op created above */ Op->Common.Node = Node; AcpiPsDeleteParseTree (Op); /* Evaluate the deferred arguments */ Op = AcpiPsAllocOp (AML_INT_EVAL_SUBTREE_OP, AmlStart); if (!Op) { return_ACPI_STATUS (AE_NO_MEMORY); } Op->Common.Node = ScopeNode; /* Create and initialize a new parser state */ WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL); if (!WalkState) { Status = AE_NO_MEMORY; goto Cleanup; } /* Execute the opcode and arguments */ Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, AmlStart, AmlLength, NULL, ACPI_IMODE_EXECUTE); if (ACPI_FAILURE (Status)) { AcpiDsDeleteWalkState (WalkState); goto Cleanup; } /* Mark this execution as a deferred opcode */ WalkState->DeferredNode = Node; Status = AcpiPsParseAml (WalkState); Cleanup: AcpiPsDeleteParseTree (Op); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsGetBufferFieldArguments * * PARAMETERS: ObjDesc - A valid BufferField object * * RETURN: Status. * * DESCRIPTION: Get BufferField Buffer and Index. This implements the late * evaluation of these field attributes. * ******************************************************************************/ ACPI_STATUS AcpiDsGetBufferFieldArguments ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_OPERAND_OBJECT *ExtraDesc; ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_FUNCTION_TRACE_PTR (DsGetBufferFieldArguments, ObjDesc); if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) { return_ACPI_STATUS (AE_OK); } /* Get the AML pointer (method object) and BufferField node */ ExtraDesc = AcpiNsGetSecondaryObject (ObjDesc); Node = ObjDesc->BufferField.Node; ACPI_DEBUG_EXEC (AcpiUtDisplayInitPathname ( ACPI_TYPE_BUFFER_FIELD, Node, NULL)); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] BufferField Arg Init\n", AcpiUtGetNodeName (Node))); /* Execute the AML code for the TermArg arguments */ Status = AcpiDsExecuteArguments (Node, Node->Parent, ExtraDesc->Extra.AmlLength, ExtraDesc->Extra.AmlStart); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsGetBankFieldArguments * * PARAMETERS: ObjDesc - A valid BankField object * * RETURN: Status. * * DESCRIPTION: Get BankField BankValue. This implements the late * evaluation of these field attributes. * ******************************************************************************/ ACPI_STATUS AcpiDsGetBankFieldArguments ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_OPERAND_OBJECT *ExtraDesc; ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_FUNCTION_TRACE_PTR (DsGetBankFieldArguments, ObjDesc); if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) { return_ACPI_STATUS (AE_OK); } /* Get the AML pointer (method object) and BankField node */ ExtraDesc = AcpiNsGetSecondaryObject (ObjDesc); Node = ObjDesc->BankField.Node; ACPI_DEBUG_EXEC (AcpiUtDisplayInitPathname ( ACPI_TYPE_LOCAL_BANK_FIELD, Node, NULL)); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] BankField Arg Init\n", AcpiUtGetNodeName (Node))); /* Execute the AML code for the TermArg arguments */ Status = AcpiDsExecuteArguments (Node, Node->Parent, ExtraDesc->Extra.AmlLength, ExtraDesc->Extra.AmlStart); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsGetBufferArguments * * PARAMETERS: ObjDesc - A valid Buffer object * * RETURN: Status. * * DESCRIPTION: Get Buffer length and initializer byte list. This implements * the late evaluation of these attributes. * ******************************************************************************/ ACPI_STATUS AcpiDsGetBufferArguments ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_FUNCTION_TRACE_PTR (DsGetBufferArguments, ObjDesc); if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) { return_ACPI_STATUS (AE_OK); } /* Get the Buffer node */ Node = ObjDesc->Buffer.Node; if (!Node) { ACPI_ERROR ((AE_INFO, "No pointer back to namespace node in buffer object %p", ObjDesc)); return_ACPI_STATUS (AE_AML_INTERNAL); } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Buffer Arg Init\n")); /* Execute the AML code for the TermArg arguments */ Status = AcpiDsExecuteArguments (Node, Node, ObjDesc->Buffer.AmlLength, ObjDesc->Buffer.AmlStart); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsGetPackageArguments * * PARAMETERS: ObjDesc - A valid Package object * * RETURN: Status. * * DESCRIPTION: Get Package length and initializer byte list. This implements * the late evaluation of these attributes. * ******************************************************************************/ ACPI_STATUS AcpiDsGetPackageArguments ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_FUNCTION_TRACE_PTR (DsGetPackageArguments, ObjDesc); if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) { return_ACPI_STATUS (AE_OK); } /* Get the Package node */ Node = ObjDesc->Package.Node; if (!Node) { ACPI_ERROR ((AE_INFO, "No pointer back to namespace node in package %p", ObjDesc)); return_ACPI_STATUS (AE_AML_INTERNAL); } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Package Argument Init, AML Ptr: %p\n", ObjDesc->Package.AmlStart)); /* Execute the AML code for the TermArg arguments */ Status = AcpiDsExecuteArguments (Node, Node, ObjDesc->Package.AmlLength, ObjDesc->Package.AmlStart); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsGetRegionArguments * * PARAMETERS: ObjDesc - A valid region object * * RETURN: Status. * * DESCRIPTION: Get region address and length. This implements the late * evaluation of these region attributes. * ******************************************************************************/ ACPI_STATUS AcpiDsGetRegionArguments ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ExtraDesc; ACPI_FUNCTION_TRACE_PTR (DsGetRegionArguments, ObjDesc); if (ObjDesc->Region.Flags & AOPOBJ_DATA_VALID) { return_ACPI_STATUS (AE_OK); } ExtraDesc = AcpiNsGetSecondaryObject (ObjDesc); if (!ExtraDesc) { return_ACPI_STATUS (AE_NOT_EXIST); } /* Get the Region node */ Node = ObjDesc->Region.Node; ACPI_DEBUG_EXEC (AcpiUtDisplayInitPathname ( ACPI_TYPE_REGION, Node, NULL)); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] OpRegion Arg Init at AML %p\n", AcpiUtGetNodeName (Node), ExtraDesc->Extra.AmlStart)); /* Execute the argument AML */ Status = AcpiDsExecuteArguments (Node, ExtraDesc->Extra.ScopeNode, ExtraDesc->Extra.AmlLength, ExtraDesc->Extra.AmlStart); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiUtAddAddressRange (ObjDesc->Region.SpaceId, ObjDesc->Region.Address, ObjDesc->Region.Length, Node); return_ACPI_STATUS (Status); } src/acpica/source/components/dispatcher/dscontrol.c000066400000000000000000000452461465205512700230750ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dscontrol - Support for execution control opcodes - * if/else/while/return * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "amlcode.h" #include "acdispat.h" #include "acinterp.h" #include "acdebug.h" #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dscontrol") /******************************************************************************* * * FUNCTION: AcpiDsExecBeginControlOp * * PARAMETERS: WalkList - The list that owns the walk stack * Op - The control Op * * RETURN: Status * * DESCRIPTION: Handles all control ops encountered during control method * execution. * ******************************************************************************/ ACPI_STATUS AcpiDsExecBeginControlOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { ACPI_STATUS Status = AE_OK; ACPI_GENERIC_STATE *ControlState; ACPI_FUNCTION_NAME (DsExecBeginControlOp); ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p Opcode=%2.2X State=%p\n", Op, Op->Common.AmlOpcode, WalkState)); switch (Op->Common.AmlOpcode) { case AML_WHILE_OP: /* * If this is an additional iteration of a while loop, continue. * There is no need to allocate a new control state. */ if (WalkState->ControlState) { if (WalkState->ControlState->Control.AmlPredicateStart == (WalkState->ParserState.Aml - 1)) { /* Reset the state to start-of-loop */ WalkState->ControlState->Common.State = ACPI_CONTROL_CONDITIONAL_EXECUTING; break; } } ACPI_FALLTHROUGH; case AML_IF_OP: /* * IF/WHILE: Create a new control state to manage these * constructs. We need to manage these as a stack, in order * to handle nesting. */ ControlState = AcpiUtCreateControlState (); if (!ControlState) { Status = AE_NO_MEMORY; break; } /* * Save a pointer to the predicate for multiple executions * of a loop */ ControlState->Control.AmlPredicateStart = WalkState->ParserState.Aml - 1; ControlState->Control.PackageEnd = WalkState->ParserState.PkgEnd; ControlState->Control.Opcode = Op->Common.AmlOpcode; ControlState->Control.LoopTimeout = AcpiOsGetTimer () + ((UINT64) AcpiGbl_MaxLoopIterations * ACPI_100NSEC_PER_SEC); /* Push the control state on this walk's control stack */ AcpiUtPushGenericState (&WalkState->ControlState, ControlState); break; case AML_ELSE_OP: /* Predicate is in the state object */ /* If predicate is true, the IF was executed, ignore ELSE part */ if (WalkState->LastPredicate) { Status = AE_CTRL_TRUE; } break; case AML_RETURN_OP: break; default: break; } return (Status); } /******************************************************************************* * * FUNCTION: AcpiDsExecEndControlOp * * PARAMETERS: WalkList - The list that owns the walk stack * Op - The control Op * * RETURN: Status * * DESCRIPTION: Handles all control ops encountered during control method * execution. * ******************************************************************************/ ACPI_STATUS AcpiDsExecEndControlOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { ACPI_STATUS Status = AE_OK; ACPI_GENERIC_STATE *ControlState; ACPI_FUNCTION_NAME (DsExecEndControlOp); switch (Op->Common.AmlOpcode) { case AML_IF_OP: ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[IF_OP] Op=%p\n", Op)); /* * Save the result of the predicate in case there is an * ELSE to come */ WalkState->LastPredicate = (BOOLEAN) WalkState->ControlState->Common.Value; /* * Pop the control state that was created at the start * of the IF and free it */ ControlState = AcpiUtPopGenericState (&WalkState->ControlState); AcpiUtDeleteGenericState (ControlState); break; case AML_ELSE_OP: break; case AML_WHILE_OP: ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[WHILE_OP] Op=%p\n", Op)); ControlState = WalkState->ControlState; if (ControlState->Common.Value) { /* Predicate was true, the body of the loop was just executed */ /* * This infinite loop detection mechanism allows the interpreter * to escape possibly infinite loops. This can occur in poorly * written AML when the hardware does not respond within a while * loop and the loop does not implement a timeout. */ if (ACPI_TIME_AFTER (AcpiOsGetTimer (), ControlState->Control.LoopTimeout)) { Status = AE_AML_LOOP_TIMEOUT; break; } /* * Go back and evaluate the predicate and maybe execute the loop * another time */ Status = AE_CTRL_PENDING; WalkState->AmlLastWhile = ControlState->Control.AmlPredicateStart; break; } /* Predicate was false, terminate this while loop */ ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[WHILE_OP] termination! Op=%p\n",Op)); /* Pop this control state and free it */ ControlState = AcpiUtPopGenericState (&WalkState->ControlState); AcpiUtDeleteGenericState (ControlState); break; case AML_RETURN_OP: ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[RETURN_OP] Op=%p Arg=%p\n",Op, Op->Common.Value.Arg)); /* * One optional operand -- the return value * It can be either an immediate operand or a result that * has been bubbled up the tree */ if (Op->Common.Value.Arg) { /* Since we have a real Return(), delete any implicit return */ AcpiDsClearImplicitReturn (WalkState); /* Return statement has an immediate operand */ Status = AcpiDsCreateOperands (WalkState, Op->Common.Value.Arg); if (ACPI_FAILURE (Status)) { return (Status); } /* * If value being returned is a Reference (such as * an arg or local), resolve it now because it may * cease to exist at the end of the method. */ Status = AcpiExResolveToValue ( &WalkState->Operands [0], WalkState); if (ACPI_FAILURE (Status)) { return (Status); } /* * Get the return value and save as the last result * value. This is the only place where WalkState->ReturnDesc * is set to anything other than zero! */ WalkState->ReturnDesc = WalkState->Operands[0]; } else if (WalkState->ResultCount) { /* Since we have a real Return(), delete any implicit return */ AcpiDsClearImplicitReturn (WalkState); /* * The return value has come from a previous calculation. * * If value being returned is a Reference (such as * an arg or local), resolve it now because it may * cease to exist at the end of the method. * * Allow references created by the Index operator to return * unchanged. */ if ((ACPI_GET_DESCRIPTOR_TYPE (WalkState->Results->Results.ObjDesc[0]) == ACPI_DESC_TYPE_OPERAND) && ((WalkState->Results->Results.ObjDesc [0])->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) && ((WalkState->Results->Results.ObjDesc [0])->Reference.Class != ACPI_REFCLASS_INDEX)) { Status = AcpiExResolveToValue ( &WalkState->Results->Results.ObjDesc [0], WalkState); if (ACPI_FAILURE (Status)) { return (Status); } } WalkState->ReturnDesc = WalkState->Results->Results.ObjDesc [0]; } else { /* No return operand */ if (WalkState->NumOperands) { AcpiUtRemoveReference (WalkState->Operands [0]); } WalkState->Operands[0] = NULL; WalkState->NumOperands = 0; WalkState->ReturnDesc = NULL; } ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Completed RETURN_OP State=%p, RetVal=%p\n", WalkState, WalkState->ReturnDesc)); /* End the control method execution right now */ Status = AE_CTRL_TERMINATE; break; case AML_NOOP_OP: /* Just do nothing! */ break; case AML_BREAKPOINT_OP: AcpiDbSignalBreakPoint (WalkState); /* Call to the OSL in case OS wants a piece of the action */ Status = AcpiOsSignal (ACPI_SIGNAL_BREAKPOINT, "Executed AML Breakpoint opcode"); break; case AML_BREAK_OP: case AML_CONTINUE_OP: /* ACPI 2.0 */ /* Pop and delete control states until we find a while */ while (WalkState->ControlState && (WalkState->ControlState->Control.Opcode != AML_WHILE_OP)) { ControlState = AcpiUtPopGenericState (&WalkState->ControlState); AcpiUtDeleteGenericState (ControlState); } /* No while found? */ if (!WalkState->ControlState) { return (AE_AML_NO_WHILE); } /* Was: WalkState->AmlLastWhile = WalkState->ControlState->Control.AmlPredicateStart; */ WalkState->AmlLastWhile = WalkState->ControlState->Control.PackageEnd; /* Return status depending on opcode */ if (Op->Common.AmlOpcode == AML_BREAK_OP) { Status = AE_CTRL_BREAK; } else { Status = AE_CTRL_CONTINUE; } break; default: ACPI_ERROR ((AE_INFO, "Unknown control opcode=0x%X Op=%p", Op->Common.AmlOpcode, Op)); Status = AE_AML_BAD_OPCODE; break; } return (Status); } src/acpica/source/components/dispatcher/dsdebug.c000066400000000000000000000331571465205512700225010ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dsdebug - Parser/Interpreter interface - debugging * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdispat.h" #include "acnamesp.h" #include "acdisasm.h" #include "acinterp.h" #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dsdebug") #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) /* Local prototypes */ static void AcpiDsPrintNodePathname ( ACPI_NAMESPACE_NODE *Node, const char *Message); /******************************************************************************* * * FUNCTION: AcpiDsPrintNodePathname * * PARAMETERS: Node - Object * Message - Prefix message * * DESCRIPTION: Print an object's full namespace pathname * Manages allocation/freeing of a pathname buffer * ******************************************************************************/ static void AcpiDsPrintNodePathname ( ACPI_NAMESPACE_NODE *Node, const char *Message) { ACPI_BUFFER Buffer; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (DsPrintNodePathname); if (!Node) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DISPATCH, "[NULL NAME]")); return_VOID; } /* Convert handle to full pathname and print it (with supplied message) */ Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiNsHandleToPathname (Node, &Buffer, TRUE); if (ACPI_SUCCESS (Status)) { if (Message) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DISPATCH, "%s ", Message)); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DISPATCH, "[%s] (Node %p)", (char *) Buffer.Pointer, Node)); ACPI_FREE (Buffer.Pointer); } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiDsDumpMethodStack * * PARAMETERS: Status - Method execution status * WalkState - Current state of the parse tree walk * Op - Executing parse op * * RETURN: None * * DESCRIPTION: Called when a method has been aborted because of an error. * Dumps the method execution stack. * ******************************************************************************/ void AcpiDsDumpMethodStack ( ACPI_STATUS Status, ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next; ACPI_THREAD_STATE *Thread; ACPI_WALK_STATE *NextWalkState; ACPI_NAMESPACE_NODE *PreviousMethod = NULL; ACPI_OPERAND_OBJECT *MethodDesc; ACPI_FUNCTION_TRACE (DsDumpMethodStack); /* Ignore control codes, they are not errors */ if (ACPI_CNTL_EXCEPTION (Status)) { return_VOID; } /* We may be executing a deferred opcode */ if (WalkState->DeferredNode) { ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Executing subtree for Buffer/Package/Region\n")); return_VOID; } /* * If there is no Thread, we are not actually executing a method. * This can happen when the iASL compiler calls the interpreter * to perform constant folding. */ Thread = WalkState->Thread; if (!Thread) { return_VOID; } /* Display exception and method name */ ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "\n**** Exception %s during execution of method ", AcpiFormatException (Status))); AcpiDsPrintNodePathname (WalkState->MethodNode, NULL); /* Display stack of executing methods */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DISPATCH, "\n\nMethod Execution Stack:\n")); NextWalkState = Thread->WalkStateList; /* Walk list of linked walk states */ while (NextWalkState) { MethodDesc = NextWalkState->MethodDesc; if (MethodDesc) { AcpiExStopTraceMethod ( (ACPI_NAMESPACE_NODE *) MethodDesc->Method.Node, MethodDesc, WalkState); } ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, " Method [%4.4s] executing: ", AcpiUtGetNodeName (NextWalkState->MethodNode))); /* First method is the currently executing method */ if (NextWalkState == WalkState) { if (Op) { /* Display currently executing ASL statement */ Next = Op->Common.Next; Op->Common.Next = NULL; #ifdef ACPI_DISASSEMBLER if (WalkState->MethodNode != AcpiGbl_RootNode) { /* More verbose if not module-level code */ AcpiOsPrintf ("Failed at "); AcpiDmDisassemble (NextWalkState, Op, ACPI_UINT32_MAX); } #endif Op->Common.Next = Next; } } else { /* * This method has called another method * NOTE: the method call parse subtree is already deleted at * this point, so we cannot disassemble the method invocation. */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DISPATCH, "Call to method ")); AcpiDsPrintNodePathname (PreviousMethod, NULL); } PreviousMethod = NextWalkState->MethodNode; NextWalkState = NextWalkState->Next; ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DISPATCH, "\n")); } return_VOID; } #else void AcpiDsDumpMethodStack ( ACPI_STATUS Status, ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { return; } #endif src/acpica/source/components/dispatcher/dsfield.c000066400000000000000000001023171465205512700224710ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dsfield - Dispatcher field routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "amlcode.h" #include "acdispat.h" #include "acinterp.h" #include "acnamesp.h" #include "acparser.h" #ifdef ACPI_EXEC_APP #include "aecommon.h" #endif #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dsfield") /* Local prototypes */ #ifdef ACPI_ASL_COMPILER #include "acdisasm.h" static ACPI_STATUS AcpiDsCreateExternalRegion ( ACPI_STATUS LookupStatus, ACPI_PARSE_OBJECT *Op, char *Path, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE **Node); #endif static ACPI_STATUS AcpiDsGetFieldNames ( ACPI_CREATE_FIELD_INFO *Info, ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Arg); #ifdef ACPI_ASL_COMPILER /******************************************************************************* * * FUNCTION: AcpiDsCreateExternalRegion (iASL Disassembler only) * * PARAMETERS: LookupStatus - Status from NsLookup operation * Op - Op containing the Field definition and args * Path - Pathname of the region * ` WalkState - Current method state * Node - Where the new region node is returned * * RETURN: Status * * DESCRIPTION: Add region to the external list if NOT_FOUND. Create a new * region node/object. * ******************************************************************************/ static ACPI_STATUS AcpiDsCreateExternalRegion ( ACPI_STATUS LookupStatus, ACPI_PARSE_OBJECT *Op, char *Path, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE **Node) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ObjDesc; if (LookupStatus != AE_NOT_FOUND) { return (LookupStatus); } /* * Table disassembly: * OperationRegion not found. Generate an External for it, and * insert the name into the namespace. */ AcpiDmAddOpToExternalList (Op, Path, ACPI_TYPE_REGION, 0, 0); Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_REGION, ACPI_IMODE_LOAD_PASS1, ACPI_NS_SEARCH_PARENT, WalkState, Node); if (ACPI_FAILURE (Status)) { return (Status); } /* Must create and install a region object for the new node */ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_REGION); if (!ObjDesc) { return (AE_NO_MEMORY); } ObjDesc->Region.Node = *Node; Status = AcpiNsAttachObject (*Node, ObjDesc, ACPI_TYPE_REGION); return (Status); } #endif /******************************************************************************* * * FUNCTION: AcpiDsCreateBufferField * * PARAMETERS: Op - Current parse op (CreateXXField) * WalkState - Current state * * RETURN: Status * * DESCRIPTION: Execute the CreateField operators: * CreateBitFieldOp, * CreateByteFieldOp, * CreateWordFieldOp, * CreateDwordFieldOp, * CreateQwordFieldOp, * CreateFieldOp (all of which define a field in a buffer) * ******************************************************************************/ ACPI_STATUS AcpiDsCreateBufferField ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState) { ACPI_PARSE_OBJECT *Arg; ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *SecondDesc = NULL; UINT32 Flags; ACPI_FUNCTION_TRACE (DsCreateBufferField); /* * Get the NameString argument (name of the new BufferField) */ if (Op->Common.AmlOpcode == AML_CREATE_FIELD_OP) { /* For CreateField, name is the 4th argument */ Arg = AcpiPsGetArg (Op, 3); } else { /* For all other CreateXXXField operators, name is the 3rd argument */ Arg = AcpiPsGetArg (Op, 2); } if (!Arg) { return_ACPI_STATUS (AE_AML_NO_OPERAND); } if (WalkState->DeferredNode) { Node = WalkState->DeferredNode; } else { /* Execute flag should always be set when this function is entered */ if (!(WalkState->ParseFlags & ACPI_PARSE_EXECUTE)) { ACPI_ERROR ((AE_INFO, "Parse execute mode is not set")); return_ACPI_STATUS (AE_AML_INTERNAL); } /* Creating new namespace node, should not already exist */ Flags = ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE | ACPI_NS_ERROR_IF_FOUND; /* * Mark node temporary if we are executing a normal control * method. (Don't mark if this is a module-level code method) */ if (WalkState->MethodNode && !(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL)) { Flags |= ACPI_NS_TEMPORARY; } /* Enter the NameString into the namespace */ Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.String, ACPI_TYPE_ANY, ACPI_IMODE_LOAD_PASS1, Flags, WalkState, &Node); if ((WalkState->ParseFlags & ACPI_PARSE_DISASSEMBLE) && Status == AE_ALREADY_EXISTS) { Status = AE_OK; } else if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Arg->Common.Value.String, Status); return_ACPI_STATUS (Status); } } /* * We could put the returned object (Node) on the object stack for later, * but for now, we will put it in the "op" object that the parser uses, * so we can get it again at the end of this scope. */ Op->Common.Node = Node; /* * If there is no object attached to the node, this node was just created * and we need to create the field object. Otherwise, this was a lookup * of an existing node and we don't want to create the field object again. */ ObjDesc = AcpiNsGetAttachedObject (Node); if (ObjDesc) { return_ACPI_STATUS (AE_OK); } /* * The Field definition is not fully parsed at this time. * (We must save the address of the AML for the buffer and index operands) */ /* Create the buffer field object */ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_BUFFER_FIELD); if (!ObjDesc) { Status = AE_NO_MEMORY; goto Cleanup; } /* * Remember location in AML stream of the field unit opcode and operands * -- since the buffer and index operands must be evaluated. */ SecondDesc = ObjDesc->Common.NextObject; SecondDesc->Extra.AmlStart = Op->Named.Data; SecondDesc->Extra.AmlLength = Op->Named.Length; ObjDesc->BufferField.Node = Node; /* Attach constructed field descriptors to parent node */ Status = AcpiNsAttachObject (Node, ObjDesc, ACPI_TYPE_BUFFER_FIELD); if (ACPI_FAILURE (Status)) { goto Cleanup; } Cleanup: /* Remove local reference to the object */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsGetFieldNames * * PARAMETERS: Info - CreateField info structure * WalkState - Current method state * Arg - First parser arg for the field name list * * RETURN: Status * * DESCRIPTION: Process all named fields in a field declaration. Names are * entered into the namespace. * ******************************************************************************/ static ACPI_STATUS AcpiDsGetFieldNames ( ACPI_CREATE_FIELD_INFO *Info, ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Arg) { ACPI_STATUS Status; UINT64 Position; ACPI_PARSE_OBJECT *Child; #ifdef ACPI_EXEC_APP ACPI_OPERAND_OBJECT *ResultDesc; ACPI_OPERAND_OBJECT *ObjDesc; char *NamePath; #endif ACPI_FUNCTION_TRACE_PTR (DsGetFieldNames, Info); /* First field starts at bit zero */ Info->FieldBitPosition = 0; /* Process all elements in the field list (of parse nodes) */ while (Arg) { /* * Four types of field elements are handled: * 1) Name - Enters a new named field into the namespace * 2) Offset - specifies a bit offset * 3) AccessAs - changes the access mode/attributes * 4) Connection - Associate a resource template with the field */ switch (Arg->Common.AmlOpcode) { case AML_INT_RESERVEDFIELD_OP: Position = (UINT64) Info->FieldBitPosition + (UINT64) Arg->Common.Value.Size; if (Position > ACPI_UINT32_MAX) { ACPI_ERROR ((AE_INFO, "Bit offset within field too large (> 0xFFFFFFFF)")); return_ACPI_STATUS (AE_SUPPORT); } Info->FieldBitPosition = (UINT32) Position; break; case AML_INT_ACCESSFIELD_OP: case AML_INT_EXTACCESSFIELD_OP: /* * Get new AccessType, AccessAttribute, and AccessLength fields * -- to be used for all field units that follow, until the * end-of-field or another AccessAs keyword is encountered. * NOTE. These three bytes are encoded in the integer value * of the parseop for convenience. * * In FieldFlags, preserve the flag bits other than the * ACCESS_TYPE bits. */ /* AccessType (ByteAcc, WordAcc, etc.) */ Info->FieldFlags = (UINT8) ((Info->FieldFlags & ~(AML_FIELD_ACCESS_TYPE_MASK)) | ((UINT8) ((UINT32) (Arg->Common.Value.Integer & 0x07)))); /* AccessAttribute (AttribQuick, AttribByte, etc.) */ Info->Attribute = (UINT8) ((Arg->Common.Value.Integer >> 8) & 0xFF); /* AccessLength (for serial/buffer protocols) */ Info->AccessLength = (UINT8) ((Arg->Common.Value.Integer >> 16) & 0xFF); break; case AML_INT_CONNECTION_OP: /* * Clear any previous connection. New connection is used for all * fields that follow, similar to AccessAs */ Info->ResourceBuffer = NULL; Info->ConnectionNode = NULL; Info->PinNumberIndex = 0; /* * A Connection() is either an actual resource descriptor (buffer) * or a named reference to a resource template */ Child = Arg->Common.Value.Arg; if (Child->Common.AmlOpcode == AML_INT_BYTELIST_OP) { Info->ResourceBuffer = Child->Named.Data; Info->ResourceLength = (UINT16) Child->Named.Value.Integer; } else { /* Lookup the Connection() namepath, it should already exist */ Status = AcpiNsLookup (WalkState->ScopeInfo, Child->Common.Value.Name, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_DONT_OPEN_SCOPE, WalkState, &Info->ConnectionNode); if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Child->Common.Value.Name, Status); return_ACPI_STATUS (Status); } } break; case AML_INT_NAMEDFIELD_OP: /* Lookup the name, it should already exist */ Status = AcpiNsLookup (WalkState->ScopeInfo, (char *) &Arg->Named.Name, Info->FieldType, ACPI_IMODE_EXECUTE, ACPI_NS_DONT_OPEN_SCOPE, WalkState, &Info->FieldNode); if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, (char *) &Arg->Named.Name, Status); return_ACPI_STATUS (Status); } else { Arg->Common.Node = Info->FieldNode; Info->FieldBitLength = Arg->Common.Value.Size; /* * If there is no object attached to the node, this node was * just created and we need to create the field object. * Otherwise, this was a lookup of an existing node and we * don't want to create the field object again. */ if (!AcpiNsGetAttachedObject (Info->FieldNode)) { Status = AcpiExPrepFieldValue (Info); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } #ifdef ACPI_EXEC_APP NamePath = AcpiNsGetExternalPathname (Info->FieldNode); if (ACPI_SUCCESS (AeLookupInitFileEntry (NamePath, &ObjDesc))) { AcpiExWriteDataToField (ObjDesc, AcpiNsGetAttachedObject (Info->FieldNode), &ResultDesc); AcpiUtRemoveReference (ObjDesc); } ACPI_FREE (NamePath); #endif } } /* Keep track of bit position for the next field */ Position = (UINT64) Info->FieldBitPosition + (UINT64) Arg->Common.Value.Size; if (Position > ACPI_UINT32_MAX) { ACPI_ERROR ((AE_INFO, "Field [%4.4s] bit offset too large (> 0xFFFFFFFF)", ACPI_CAST_PTR (char, &Info->FieldNode->Name))); return_ACPI_STATUS (AE_SUPPORT); } Info->FieldBitPosition += Info->FieldBitLength; Info->PinNumberIndex++; /* Index relative to previous Connection() */ break; default: ACPI_ERROR ((AE_INFO, "Invalid opcode in field list: 0x%X", Arg->Common.AmlOpcode)); return_ACPI_STATUS (AE_AML_BAD_OPCODE); } Arg = Arg->Common.Next; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsCreateField * * PARAMETERS: Op - Op containing the Field definition and args * RegionNode - Object for the containing Operation Region * ` WalkState - Current method state * * RETURN: Status * * DESCRIPTION: Create a new field in the specified operation region * ******************************************************************************/ ACPI_STATUS AcpiDsCreateField ( ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE *RegionNode, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_PARSE_OBJECT *Arg; ACPI_CREATE_FIELD_INFO Info; ACPI_FUNCTION_TRACE_PTR (DsCreateField, Op); /* First arg is the name of the parent OpRegion (must already exist) */ Arg = Op->Common.Value.Arg; if (!RegionNode) { Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.Name, ACPI_TYPE_REGION, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &RegionNode); #ifdef ACPI_ASL_COMPILER Status = AcpiDsCreateExternalRegion (Status, Arg, Arg->Common.Value.Name, WalkState, &RegionNode); #endif if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Arg->Common.Value.Name, Status); return_ACPI_STATUS (Status); } } memset (&Info, 0, sizeof (ACPI_CREATE_FIELD_INFO)); /* Second arg is the field flags */ Arg = Arg->Common.Next; Info.FieldFlags = (UINT8) Arg->Common.Value.Integer; Info.Attribute = 0; /* Each remaining arg is a Named Field */ Info.FieldType = ACPI_TYPE_LOCAL_REGION_FIELD; Info.RegionNode = RegionNode; Status = AcpiDsGetFieldNames (&Info, WalkState, Arg->Common.Next); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (Info.RegionNode->Object->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_COMM) { RegionNode->Object->Field.InternalPccBuffer = ACPI_ALLOCATE_ZEROED(Info.RegionNode->Object->Region.Length); if (!RegionNode->Object->Field.InternalPccBuffer) { return_ACPI_STATUS (AE_NO_MEMORY); } } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsInitFieldObjects * * PARAMETERS: Op - Op containing the Field definition and args * ` WalkState - Current method state * * RETURN: Status * * DESCRIPTION: For each "Field Unit" name in the argument list that is * part of the field declaration, enter the name into the * namespace. * ******************************************************************************/ ACPI_STATUS AcpiDsInitFieldObjects ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_PARSE_OBJECT *Arg = NULL; ACPI_NAMESPACE_NODE *Node; UINT8 Type = 0; UINT32 Flags; ACPI_FUNCTION_TRACE_PTR (DsInitFieldObjects, Op); /* Execute flag should always be set when this function is entered */ if (!(WalkState->ParseFlags & ACPI_PARSE_EXECUTE)) { if (WalkState->ParseFlags & ACPI_PARSE_DEFERRED_OP) { /* BankField Op is deferred, just return OK */ return_ACPI_STATUS (AE_OK); } ACPI_ERROR ((AE_INFO, "Parse deferred mode is not set")); return_ACPI_STATUS (AE_AML_INTERNAL); } /* * Get the FieldList argument for this opcode. This is the start of the * list of field elements. */ switch (WalkState->Opcode) { case AML_FIELD_OP: Arg = AcpiPsGetArg (Op, 2); Type = ACPI_TYPE_LOCAL_REGION_FIELD; break; case AML_BANK_FIELD_OP: Arg = AcpiPsGetArg (Op, 4); Type = ACPI_TYPE_LOCAL_BANK_FIELD; break; case AML_INDEX_FIELD_OP: Arg = AcpiPsGetArg (Op, 3); Type = ACPI_TYPE_LOCAL_INDEX_FIELD; break; default: return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Creating new namespace node(s), should not already exist */ Flags = ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE | ACPI_NS_ERROR_IF_FOUND; /* * Mark node(s) temporary if we are executing a normal control * method. (Don't mark if this is a module-level code method) */ if (WalkState->MethodNode && !(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL)) { Flags |= ACPI_NS_TEMPORARY; } #ifdef ACPI_EXEC_APP Flags |= ACPI_NS_OVERRIDE_IF_FOUND; #endif /* * Walk the list of entries in the FieldList * Note: FieldList can be of zero length. In this case, Arg will be NULL. */ while (Arg) { /* * Ignore OFFSET/ACCESSAS/CONNECTION terms here; we are only interested * in the field names in order to enter them into the namespace. */ if (Arg->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP) { Status = AcpiNsLookup (WalkState->ScopeInfo, (char *) &Arg->Named.Name, Type, ACPI_IMODE_LOAD_PASS1, Flags, WalkState, &Node); if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, (char *) &Arg->Named.Name, Status); if (Status != AE_ALREADY_EXISTS) { return_ACPI_STATUS (Status); } /* Name already exists, just ignore this error */ } Arg->Common.Node = Node; } /* Get the next field element in the list */ Arg = Arg->Common.Next; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsCreateBankField * * PARAMETERS: Op - Op containing the Field definition and args * RegionNode - Object for the containing Operation Region * WalkState - Current method state * * RETURN: Status * * DESCRIPTION: Create a new bank field in the specified operation region * ******************************************************************************/ ACPI_STATUS AcpiDsCreateBankField ( ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE *RegionNode, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_PARSE_OBJECT *Arg; ACPI_CREATE_FIELD_INFO Info; ACPI_FUNCTION_TRACE_PTR (DsCreateBankField, Op); /* First arg is the name of the parent OpRegion (must already exist) */ Arg = Op->Common.Value.Arg; if (!RegionNode) { Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.Name, ACPI_TYPE_REGION, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &RegionNode); #ifdef ACPI_ASL_COMPILER Status = AcpiDsCreateExternalRegion (Status, Arg, Arg->Common.Value.Name, WalkState, &RegionNode); #endif if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Arg->Common.Value.Name, Status); return_ACPI_STATUS (Status); } } /* Second arg is the Bank Register (Field) (must already exist) */ Arg = Arg->Common.Next; Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.String, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &Info.RegisterNode); if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Arg->Common.Value.String, Status); return_ACPI_STATUS (Status); } /* * Third arg is the BankValue * This arg is a TermArg, not a constant * It will be evaluated later, by AcpiDsEvalBankFieldOperands */ Arg = Arg->Common.Next; /* Fourth arg is the field flags */ Arg = Arg->Common.Next; Info.FieldFlags = (UINT8) Arg->Common.Value.Integer; /* Each remaining arg is a Named Field */ Info.FieldType = ACPI_TYPE_LOCAL_BANK_FIELD; Info.RegionNode = RegionNode; /* * Use Info.DataRegisterNode to store BankField Op * It's safe because DataRegisterNode will never be used when create * bank field \we store AmlStart and AmlLength in the BankField Op for * late evaluation. Used in AcpiExPrepFieldValue(Info) * * TBD: Or, should we add a field in ACPI_CREATE_FIELD_INFO, like * "void *ParentOp"? */ Info.DataRegisterNode = (ACPI_NAMESPACE_NODE*) Op; Status = AcpiDsGetFieldNames (&Info, WalkState, Arg->Common.Next); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsCreateIndexField * * PARAMETERS: Op - Op containing the Field definition and args * RegionNode - Object for the containing Operation Region * ` WalkState - Current method state * * RETURN: Status * * DESCRIPTION: Create a new index field in the specified operation region * ******************************************************************************/ ACPI_STATUS AcpiDsCreateIndexField ( ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE *RegionNode, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_PARSE_OBJECT *Arg; ACPI_CREATE_FIELD_INFO Info; ACPI_FUNCTION_TRACE_PTR (DsCreateIndexField, Op); /* First arg is the name of the Index register (must already exist) */ Arg = Op->Common.Value.Arg; Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.String, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &Info.RegisterNode); if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Arg->Common.Value.String, Status); return_ACPI_STATUS (Status); } /* Second arg is the data register (must already exist) */ Arg = Arg->Common.Next; Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.String, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &Info.DataRegisterNode); if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Arg->Common.Value.String, Status); return_ACPI_STATUS (Status); } /* Next arg is the field flags */ Arg = Arg->Common.Next; Info.FieldFlags = (UINT8) Arg->Common.Value.Integer; /* Each remaining arg is a Named Field */ Info.FieldType = ACPI_TYPE_LOCAL_INDEX_FIELD; Info.RegionNode = RegionNode; Status = AcpiDsGetFieldNames (&Info, WalkState, Arg->Common.Next); return_ACPI_STATUS (Status); } src/acpica/source/components/dispatcher/dsinit.c000066400000000000000000000347621465205512700223610ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dsinit - Object initialization namespace walk * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdispat.h" #include "acnamesp.h" #include "actables.h" #include "acinterp.h" #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dsinit") /* Local prototypes */ static ACPI_STATUS AcpiDsInitOneObject ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); /******************************************************************************* * * FUNCTION: AcpiDsInitOneObject * * PARAMETERS: ObjHandle - Node for the object * Level - Current nesting level * Context - Points to a init info struct * ReturnValue - Not used * * RETURN: Status * * DESCRIPTION: Callback from AcpiWalkNamespace. Invoked for every object * within the namespace. * * Currently, the only objects that require initialization are: * 1) Methods * 2) Operation Regions * ******************************************************************************/ static ACPI_STATUS AcpiDsInitOneObject ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_INIT_WALK_INFO *Info = (ACPI_INIT_WALK_INFO *) Context; ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_FUNCTION_ENTRY (); /* * We are only interested in NS nodes owned by the table that * was just loaded */ if (Node->OwnerId != Info->OwnerId) { return (AE_OK); } Info->ObjectCount++; /* And even then, we are only interested in a few object types */ switch (AcpiNsGetType (ObjHandle)) { case ACPI_TYPE_REGION: Status = AcpiDsInitializeRegion (ObjHandle); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "During Region initialization %p [%4.4s]", ObjHandle, AcpiUtGetNodeName (ObjHandle))); } Info->OpRegionCount++; break; case ACPI_TYPE_METHOD: /* * Auto-serialization support. We will examine each method that is * NotSerialized to determine if it creates any Named objects. If * it does, it will be marked serialized to prevent problems if * the method is entered by two or more threads and an attempt is * made to create the same named object twice -- which results in * an AE_ALREADY_EXISTS exception and method abort. */ Info->MethodCount++; ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { break; } /* Ignore if already serialized */ if (ObjDesc->Method.InfoFlags & ACPI_METHOD_SERIALIZED) { Info->SerialMethodCount++; break; } if (AcpiGbl_AutoSerializeMethods) { /* Parse/scan method and serialize it if necessary */ AcpiDsAutoSerializeMethod (Node, ObjDesc); if (ObjDesc->Method.InfoFlags & ACPI_METHOD_SERIALIZED) { /* Method was just converted to Serialized */ Info->SerialMethodCount++; Info->SerializedMethodCount++; break; } } Info->NonSerialMethodCount++; break; case ACPI_TYPE_DEVICE: Info->DeviceCount++; break; default: break; } /* * We ignore errors from above, and always return OK, since * we don't want to abort the walk on a single error. */ return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsInitializeObjects * * PARAMETERS: TableDesc - Descriptor for parent ACPI table * StartNode - Root of subtree to be initialized. * * RETURN: Status * * DESCRIPTION: Walk the namespace starting at "StartNode" and perform any * necessary initialization on the objects found therein * ******************************************************************************/ ACPI_STATUS AcpiDsInitializeObjects ( UINT32 TableIndex, ACPI_NAMESPACE_NODE *StartNode) { ACPI_STATUS Status; ACPI_INIT_WALK_INFO Info; ACPI_TABLE_HEADER *Table; ACPI_OWNER_ID OwnerId; ACPI_FUNCTION_TRACE (DsInitializeObjects); Status = AcpiTbGetOwnerId (TableIndex, &OwnerId); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "**** Starting initialization of namespace objects ****\n")); /* Set all init info to zero */ memset (&Info, 0, sizeof (ACPI_INIT_WALK_INFO)); Info.OwnerId = OwnerId; Info.TableIndex = TableIndex; /* Walk entire namespace from the supplied root */ /* * We don't use AcpiWalkNamespace since we do not want to acquire * the namespace reader lock. */ Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, StartNode, ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, AcpiDsInitOneObject, NULL, &Info, NULL); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "During WalkNamespace")); } Status = AcpiGetTableByIndex (TableIndex, &Table); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* DSDT is always the first AML table */ if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_DSDT)) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "\nACPI table initialization:\n")); } /* Summary of objects initialized */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "Table [%4.4s: %-8.8s] (id %.2X) - %4u Objects with %3u Devices, " "%3u Regions, %4u Methods (%u/%u/%u Serial/Non/Cvt)\n", Table->Signature, Table->OemTableId, OwnerId, Info.ObjectCount, Info.DeviceCount,Info.OpRegionCount, Info.MethodCount, Info.SerialMethodCount, Info.NonSerialMethodCount, Info.SerializedMethodCount)); ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "%u Methods, %u Regions\n", Info.MethodCount, Info.OpRegionCount)); return_ACPI_STATUS (AE_OK); } src/acpica/source/components/dispatcher/dsmethod.c000066400000000000000000001065241465205512700226720ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dsmethod - Parser/Interpreter interface - control method parsing * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdispat.h" #include "acinterp.h" #include "acnamesp.h" #include "acparser.h" #include "amlcode.h" #include "acdebug.h" #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dsmethod") /* Local prototypes */ static ACPI_STATUS AcpiDsDetectNamedOpcodes ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT **OutOp); static ACPI_STATUS AcpiDsCreateMethodMutex ( ACPI_OPERAND_OBJECT *MethodDesc); /******************************************************************************* * * FUNCTION: AcpiDsAutoSerializeMethod * * PARAMETERS: Node - Namespace Node of the method * ObjDesc - Method object attached to node * * RETURN: Status * * DESCRIPTION: Parse a control method AML to scan for control methods that * need serialization due to the creation of named objects. * * NOTE: It is a bit of overkill to mark all such methods serialized, since * there is only a problem if the method actually blocks during execution. * A blocking operation is, for example, a Sleep() operation, or any access * to an operation region. However, it is probably not possible to easily * detect whether a method will block or not, so we simply mark all suspicious * methods as serialized. * * NOTE2: This code is essentially a generic routine for parsing a single * control method. * ******************************************************************************/ ACPI_STATUS AcpiDsAutoSerializeMethod ( ACPI_NAMESPACE_NODE *Node, ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_STATUS Status; ACPI_PARSE_OBJECT *Op = NULL; ACPI_WALK_STATE *WalkState; ACPI_FUNCTION_TRACE_PTR (DsAutoSerializeMethod, Node); ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Method auto-serialization parse [%4.4s] %p\n", AcpiUtGetNodeName (Node), Node)); /* Create/Init a root op for the method parse tree */ Op = AcpiPsAllocOp (AML_METHOD_OP, ObjDesc->Method.AmlStart); if (!Op) { return_ACPI_STATUS (AE_NO_MEMORY); } AcpiPsSetName (Op, Node->Name.Integer); Op->Common.Node = Node; /* Create and initialize a new walk state */ WalkState = AcpiDsCreateWalkState (Node->OwnerId, NULL, NULL, NULL); if (!WalkState) { AcpiPsFreeOp (Op); return_ACPI_STATUS (AE_NO_MEMORY); } Status = AcpiDsInitAmlWalk (WalkState, Op, Node, ObjDesc->Method.AmlStart, ObjDesc->Method.AmlLength, NULL, 0); if (ACPI_FAILURE (Status)) { AcpiDsDeleteWalkState (WalkState); AcpiPsFreeOp (Op); return_ACPI_STATUS (Status); } WalkState->DescendingCallback = AcpiDsDetectNamedOpcodes; /* Parse the method, scan for creation of named objects */ Status = AcpiPsParseAml (WalkState); AcpiPsDeleteParseTree (Op); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsDetectNamedOpcodes * * PARAMETERS: WalkState - Current state of the parse tree walk * OutOp - Unused, required for parser interface * * RETURN: Status * * DESCRIPTION: Descending callback used during the loading of ACPI tables. * Currently used to detect methods that must be marked serialized * in order to avoid problems with the creation of named objects. * ******************************************************************************/ static ACPI_STATUS AcpiDsDetectNamedOpcodes ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT **OutOp) { ACPI_FUNCTION_NAME (AcpiDsDetectNamedOpcodes); /* We are only interested in opcodes that create a new name */ if (!(WalkState->OpInfo->Flags & (AML_NAMED | AML_CREATE | AML_FIELD))) { return (AE_OK); } /* * At this point, we know we have a Named object opcode. * Mark the method as serialized. Later code will create a mutex for * this method to enforce serialization. * * Note, ACPI_METHOD_IGNORE_SYNC_LEVEL flag means that we will ignore the * Sync Level mechanism for this method, even though it is now serialized. * Otherwise, there can be conflicts with existing ASL code that actually * uses sync levels. */ WalkState->MethodDesc->Method.SyncLevel = 0; WalkState->MethodDesc->Method.InfoFlags |= (ACPI_METHOD_SERIALIZED | ACPI_METHOD_IGNORE_SYNC_LEVEL); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Method serialized [%4.4s] %p - [%s] (%4.4X)\n", WalkState->MethodNode->Name.Ascii, WalkState->MethodNode, WalkState->OpInfo->Name, WalkState->Opcode)); /* Abort the parse, no need to examine this method any further */ return (AE_CTRL_TERMINATE); } /******************************************************************************* * * FUNCTION: AcpiDsMethodError * * PARAMETERS: Status - Execution status * WalkState - Current state * * RETURN: Status * * DESCRIPTION: Called on method error. Invoke the global exception handler if * present, dump the method data if the debugger is configured * * Note: Allows the exception handler to change the status code * ******************************************************************************/ ACPI_STATUS AcpiDsMethodError ( ACPI_STATUS Status, ACPI_WALK_STATE *WalkState) { UINT32 AmlOffset; ACPI_NAME Name = 0; ACPI_FUNCTION_ENTRY (); /* Ignore AE_OK and control exception codes */ if (ACPI_SUCCESS (Status) || (Status & AE_CODE_CONTROL)) { return (Status); } /* Invoke the global exception handler */ if (AcpiGbl_ExceptionHandler) { /* Exit the interpreter, allow handler to execute methods */ AcpiExExitInterpreter (); /* * Handler can map the exception code to anything it wants, including * AE_OK, in which case the executing method will not be aborted. */ AmlOffset = (UINT32) ACPI_PTR_DIFF (WalkState->Aml, WalkState->ParserState.AmlStart); if (WalkState->MethodNode) { Name = WalkState->MethodNode->Name.Integer; } else if (WalkState->DeferredNode) { Name = WalkState->DeferredNode->Name.Integer; } Status = AcpiGbl_ExceptionHandler (Status, Name, WalkState->Opcode, AmlOffset, NULL); AcpiExEnterInterpreter (); } AcpiDsClearImplicitReturn (WalkState); if (ACPI_FAILURE (Status)) { AcpiDsDumpMethodStack (Status, WalkState, WalkState->Op); /* Display method locals/args if debugger is present */ #ifdef ACPI_DEBUGGER AcpiDbDumpMethodInfo (Status, WalkState); #endif } return (Status); } /******************************************************************************* * * FUNCTION: AcpiDsCreateMethodMutex * * PARAMETERS: ObjDesc - The method object * * RETURN: Status * * DESCRIPTION: Create a mutex object for a serialized control method * ******************************************************************************/ static ACPI_STATUS AcpiDsCreateMethodMutex ( ACPI_OPERAND_OBJECT *MethodDesc) { ACPI_OPERAND_OBJECT *MutexDesc; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (DsCreateMethodMutex); /* Create the new mutex object */ MutexDesc = AcpiUtCreateInternalObject (ACPI_TYPE_MUTEX); if (!MutexDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Create the actual OS Mutex */ Status = AcpiOsCreateMutex (&MutexDesc->Mutex.OsMutex); if (ACPI_FAILURE (Status)) { AcpiUtDeleteObjectDesc (MutexDesc); return_ACPI_STATUS (Status); } MutexDesc->Mutex.SyncLevel = MethodDesc->Method.SyncLevel; MethodDesc->Method.Mutex = MutexDesc; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsBeginMethodExecution * * PARAMETERS: MethodNode - Node of the method * ObjDesc - The method object * WalkState - current state, NULL if not yet executing * a method. * * RETURN: Status * * DESCRIPTION: Prepare a method for execution. Parses the method if necessary, * increments the thread count, and waits at the method semaphore * for clearance to execute. * ******************************************************************************/ ACPI_STATUS AcpiDsBeginMethodExecution ( ACPI_NAMESPACE_NODE *MethodNode, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE_PTR (DsBeginMethodExecution, MethodNode); if (!MethodNode) { return_ACPI_STATUS (AE_NULL_ENTRY); } AcpiExStartTraceMethod (MethodNode, ObjDesc, WalkState); /* Prevent wraparound of thread count */ if (ObjDesc->Method.ThreadCount == ACPI_UINT8_MAX) { ACPI_ERROR ((AE_INFO, "Method reached maximum reentrancy limit (255)")); return_ACPI_STATUS (AE_AML_METHOD_LIMIT); } /* * If this method is serialized, we need to acquire the method mutex. */ if (ObjDesc->Method.InfoFlags & ACPI_METHOD_SERIALIZED) { /* * Create a mutex for the method if it is defined to be Serialized * and a mutex has not already been created. We defer the mutex creation * until a method is actually executed, to minimize the object count */ if (!ObjDesc->Method.Mutex) { Status = AcpiDsCreateMethodMutex (ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } /* * The CurrentSyncLevel (per-thread) must be less than or equal to * the sync level of the method. This mechanism provides some * deadlock prevention. * * If the method was auto-serialized, we just ignore the sync level * mechanism, because auto-serialization of methods can interfere * with ASL code that actually uses sync levels. * * Top-level method invocation has no walk state at this point */ if (WalkState && (!(ObjDesc->Method.InfoFlags & ACPI_METHOD_IGNORE_SYNC_LEVEL)) && (WalkState->Thread->CurrentSyncLevel > ObjDesc->Method.Mutex->Mutex.SyncLevel)) { ACPI_ERROR ((AE_INFO, "Cannot acquire Mutex for method [%4.4s]" ", current SyncLevel is too large (%u)", AcpiUtGetNodeName (MethodNode), WalkState->Thread->CurrentSyncLevel)); return_ACPI_STATUS (AE_AML_MUTEX_ORDER); } /* * Obtain the method mutex if necessary. Do not acquire mutex for a * recursive call. */ if (!WalkState || !ObjDesc->Method.Mutex->Mutex.ThreadId || (WalkState->Thread->ThreadId != ObjDesc->Method.Mutex->Mutex.ThreadId)) { /* * Acquire the method mutex. This releases the interpreter if we * block (and reacquires it before it returns) */ Status = AcpiExSystemWaitMutex ( ObjDesc->Method.Mutex->Mutex.OsMutex, ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Update the mutex and walk info and save the original SyncLevel */ if (WalkState) { ObjDesc->Method.Mutex->Mutex.OriginalSyncLevel = WalkState->Thread->CurrentSyncLevel; ObjDesc->Method.Mutex->Mutex.ThreadId = WalkState->Thread->ThreadId; /* * Update the current SyncLevel only if this is not an auto- * serialized method. In the auto case, we have to ignore * the sync level for the method mutex (created for the * auto-serialization) because we have no idea of what the * sync level should be. Therefore, just ignore it. */ if (!(ObjDesc->Method.InfoFlags & ACPI_METHOD_IGNORE_SYNC_LEVEL)) { WalkState->Thread->CurrentSyncLevel = ObjDesc->Method.SyncLevel; } } else { ObjDesc->Method.Mutex->Mutex.OriginalSyncLevel = ObjDesc->Method.Mutex->Mutex.SyncLevel; ObjDesc->Method.Mutex->Mutex.ThreadId = AcpiOsGetThreadId (); } } /* Always increase acquisition depth */ ObjDesc->Method.Mutex->Mutex.AcquisitionDepth++; } /* * Allocate an Owner ID for this method, only if this is the first thread * to begin concurrent execution. We only need one OwnerId, even if the * method is invoked recursively. */ if (!ObjDesc->Method.OwnerId) { Status = AcpiUtAllocateOwnerId (&ObjDesc->Method.OwnerId); if (ACPI_FAILURE (Status)) { goto Cleanup; } } /* * Increment the method parse tree thread count since it has been * reentered one more time (even if it is the same thread) */ ObjDesc->Method.ThreadCount++; AcpiMethodCount++; return_ACPI_STATUS (Status); Cleanup: /* On error, must release the method mutex (if present) */ if (ObjDesc->Method.Mutex) { AcpiOsReleaseMutex (ObjDesc->Method.Mutex->Mutex.OsMutex); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsCallControlMethod * * PARAMETERS: Thread - Info for this thread * ThisWalkState - Current walk state * Op - Current Op to be walked * * RETURN: Status * * DESCRIPTION: Transfer execution to a called control method * ******************************************************************************/ ACPI_STATUS AcpiDsCallControlMethod ( ACPI_THREAD_STATE *Thread, ACPI_WALK_STATE *ThisWalkState, ACPI_PARSE_OBJECT *Op) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *MethodNode; ACPI_WALK_STATE *NextWalkState = NULL; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_EVALUATE_INFO *Info; UINT32 i; ACPI_FUNCTION_TRACE_PTR (DsCallControlMethod, ThisWalkState); ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Calling method %p, currentstate=%p\n", ThisWalkState->PrevOp, ThisWalkState)); /* * Get the namespace entry for the control method we are about to call */ MethodNode = ThisWalkState->MethodCallNode; if (!MethodNode) { return_ACPI_STATUS (AE_NULL_ENTRY); } ObjDesc = AcpiNsGetAttachedObject (MethodNode); if (!ObjDesc) { return_ACPI_STATUS (AE_NULL_OBJECT); } /* Init for new method, possibly wait on method mutex */ Status = AcpiDsBeginMethodExecution ( MethodNode, ObjDesc, ThisWalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Begin method parse/execution. Create a new walk state */ NextWalkState = AcpiDsCreateWalkState ( ObjDesc->Method.OwnerId, NULL, ObjDesc, Thread); if (!NextWalkState) { Status = AE_NO_MEMORY; goto Cleanup; } /* * The resolved arguments were put on the previous walk state's operand * stack. Operands on the previous walk state stack always * start at index 0. Also, null terminate the list of arguments */ ThisWalkState->Operands [ThisWalkState->NumOperands] = NULL; /* * Allocate and initialize the evaluation information block * TBD: this is somewhat inefficient, should change interface to * DsInitAmlWalk. For now, keeps this struct off the CPU stack */ Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); if (!Info) { Status = AE_NO_MEMORY; goto PopWalkState; } Info->Parameters = &ThisWalkState->Operands[0]; Status = AcpiDsInitAmlWalk (NextWalkState, NULL, MethodNode, ObjDesc->Method.AmlStart, ObjDesc->Method.AmlLength, Info, ACPI_IMODE_EXECUTE); ACPI_FREE (Info); if (ACPI_FAILURE (Status)) { goto PopWalkState; } NextWalkState->MethodNestingDepth = ThisWalkState->MethodNestingDepth + 1; /* * Delete the operands on the previous walkstate operand stack * (they were copied to new objects) */ for (i = 0; i < ObjDesc->Method.ParamCount; i++) { AcpiUtRemoveReference (ThisWalkState->Operands [i]); ThisWalkState->Operands [i] = NULL; } /* Clear the operand stack */ ThisWalkState->NumOperands = 0; ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "**** Begin nested execution of [%4.4s] **** WalkState=%p\n", MethodNode->Name.Ascii, NextWalkState)); ThisWalkState->MethodPathname = AcpiNsGetNormalizedPathname (MethodNode, TRUE); ThisWalkState->MethodIsNested = TRUE; /* Optional object evaluation log */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION, "%-26s: %*s%s\n", " Nested method call", NextWalkState->MethodNestingDepth * 3, " ", &ThisWalkState->MethodPathname[1])); /* Invoke an internal method if necessary */ if (ObjDesc->Method.InfoFlags & ACPI_METHOD_INTERNAL_ONLY) { Status = ObjDesc->Method.Dispatch.Implementation (NextWalkState); if (Status == AE_OK) { Status = AE_CTRL_TERMINATE; } } return_ACPI_STATUS (Status); PopWalkState: /* On error, pop the walk state to be deleted from thread */ AcpiDsPopWalkState(Thread); Cleanup: /* On error, we must terminate the method properly */ AcpiDsTerminateControlMethod (ObjDesc, NextWalkState); AcpiDsDeleteWalkState (NextWalkState); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsRestartControlMethod * * PARAMETERS: WalkState - State for preempted method (caller) * ReturnDesc - Return value from the called method * * RETURN: Status * * DESCRIPTION: Restart a method that was preempted by another (nested) method * invocation. Handle the return value (if any) from the callee. * ******************************************************************************/ ACPI_STATUS AcpiDsRestartControlMethod ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT *ReturnDesc) { ACPI_STATUS Status; int SameAsImplicitReturn; ACPI_FUNCTION_TRACE_PTR (DsRestartControlMethod, WalkState); ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "****Restart [%4.4s] Op %p ReturnValueFromCallee %p\n", AcpiUtGetNodeName (WalkState->MethodNode), WalkState->MethodCallOp, ReturnDesc)); ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, " ReturnFromThisMethodUsed?=%X ResStack %p Walk %p\n", WalkState->ReturnUsed, WalkState->Results, WalkState)); /* Did the called method return a value? */ if (ReturnDesc) { /* Is the implicit return object the same as the return desc? */ SameAsImplicitReturn = (WalkState->ImplicitReturnObj == ReturnDesc); /* Are we actually going to use the return value? */ if (WalkState->ReturnUsed) { /* Save the return value from the previous method */ Status = AcpiDsResultPush (ReturnDesc, WalkState); if (ACPI_FAILURE (Status)) { AcpiUtRemoveReference (ReturnDesc); return_ACPI_STATUS (Status); } /* * Save as THIS method's return value in case it is returned * immediately to yet another method */ WalkState->ReturnDesc = ReturnDesc; } /* * The following code is the optional support for the so-called * "implicit return". Some AML code assumes that the last value of the * method is "implicitly" returned to the caller, in the absence of an * explicit return value. * * Just save the last result of the method as the return value. * * NOTE: this is optional because the ASL language does not actually * support this behavior. */ else if (!AcpiDsDoImplicitReturn (ReturnDesc, WalkState, FALSE) || SameAsImplicitReturn) { /* * Delete the return value if it will not be used by the * calling method or remove one reference if the explicit return * is the same as the implicit return value. */ AcpiUtRemoveReference (ReturnDesc); } } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsTerminateControlMethod * * PARAMETERS: MethodDesc - Method object * WalkState - State associated with the method * * RETURN: None * * DESCRIPTION: Terminate a control method. Delete everything that the method * created, delete all locals and arguments, and delete the parse * tree if requested. * * MUTEX: Interpreter is locked * ******************************************************************************/ void AcpiDsTerminateControlMethod ( ACPI_OPERAND_OBJECT *MethodDesc, ACPI_WALK_STATE *WalkState) { ACPI_FUNCTION_TRACE_PTR (DsTerminateControlMethod, WalkState); /* MethodDesc is required, WalkState is optional */ if (!MethodDesc) { return_VOID; } if (WalkState) { /* Delete all arguments and locals */ AcpiDsMethodDataDeleteAll (WalkState); /* * Delete any namespace objects created anywhere within the * namespace by the execution of this method. Unless: * 1) This method is a module-level executable code method, in which * case we want make the objects permanent. * 2) There are other threads executing the method, in which case we * will wait until the last thread has completed. */ if (!(MethodDesc->Method.InfoFlags & ACPI_METHOD_MODULE_LEVEL) && (MethodDesc->Method.ThreadCount == 1)) { /* Delete any direct children of (created by) this method */ (void) AcpiExExitInterpreter (); AcpiNsDeleteNamespaceSubtree (WalkState->MethodNode); (void) AcpiExEnterInterpreter (); /* * Delete any objects that were created by this method * elsewhere in the namespace (if any were created). * Use of the ACPI_METHOD_MODIFIED_NAMESPACE optimizes the * deletion such that we don't have to perform an entire * namespace walk for every control method execution. */ if (MethodDesc->Method.InfoFlags & ACPI_METHOD_MODIFIED_NAMESPACE) { (void) AcpiExExitInterpreter (); AcpiNsDeleteNamespaceByOwner (MethodDesc->Method.OwnerId); (void) AcpiExEnterInterpreter (); MethodDesc->Method.InfoFlags &= ~ACPI_METHOD_MODIFIED_NAMESPACE; } } /* * If method is serialized, release the mutex and restore the * current sync level for this thread */ if (MethodDesc->Method.Mutex) { /* Acquisition Depth handles recursive calls */ MethodDesc->Method.Mutex->Mutex.AcquisitionDepth--; if (!MethodDesc->Method.Mutex->Mutex.AcquisitionDepth) { WalkState->Thread->CurrentSyncLevel = MethodDesc->Method.Mutex->Mutex.OriginalSyncLevel; AcpiOsReleaseMutex ( MethodDesc->Method.Mutex->Mutex.OsMutex); MethodDesc->Method.Mutex->Mutex.ThreadId = 0; } } } /* Decrement the thread count on the method */ if (MethodDesc->Method.ThreadCount) { MethodDesc->Method.ThreadCount--; } else { ACPI_ERROR ((AE_INFO, "Invalid zero thread count in method")); } /* Are there any other threads currently executing this method? */ if (MethodDesc->Method.ThreadCount) { /* * Additional threads. Do not release the OwnerId in this case, * we immediately reuse it for the next thread executing this method */ ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "*** Completed execution of one thread, %u threads remaining\n", MethodDesc->Method.ThreadCount)); } else { /* This is the only executing thread for this method */ /* * Support to dynamically change a method from NotSerialized to * Serialized if it appears that the method is incorrectly written and * does not support multiple thread execution. The best example of this * is if such a method creates namespace objects and blocks. A second * thread will fail with an AE_ALREADY_EXISTS exception. * * This code is here because we must wait until the last thread exits * before marking the method as serialized. */ if (MethodDesc->Method.InfoFlags & ACPI_METHOD_SERIALIZED_PENDING) { if (WalkState) { ACPI_INFO (( "Marking method %4.4s as Serialized " "because of AE_ALREADY_EXISTS error", WalkState->MethodNode->Name.Ascii)); } /* * Method tried to create an object twice and was marked as * "pending serialized". The probable cause is that the method * cannot handle reentrancy. * * The method was created as NotSerialized, but it tried to create * a named object and then blocked, causing the second thread * entrance to begin and then fail. Workaround this problem by * marking the method permanently as Serialized when the last * thread exits here. */ MethodDesc->Method.InfoFlags &= ~ACPI_METHOD_SERIALIZED_PENDING; MethodDesc->Method.InfoFlags |= (ACPI_METHOD_SERIALIZED | ACPI_METHOD_IGNORE_SYNC_LEVEL); MethodDesc->Method.SyncLevel = 0; } /* No more threads, we can free the OwnerId */ if (!(MethodDesc->Method.InfoFlags & ACPI_METHOD_MODULE_LEVEL)) { AcpiUtReleaseOwnerId (&MethodDesc->Method.OwnerId); } } AcpiExStopTraceMethod ((ACPI_NAMESPACE_NODE *) MethodDesc->Method.Node, MethodDesc, WalkState); return_VOID; } src/acpica/source/components/dispatcher/dsmthdat.c000066400000000000000000000721621465205512700226730ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dsmthdat - control method arguments and local variables * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdispat.h" #include "acnamesp.h" #include "acinterp.h" #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dsmthdat") /* Local prototypes */ static void AcpiDsMethodDataDeleteValue ( UINT8 Type, UINT32 Index, ACPI_WALK_STATE *WalkState); static ACPI_STATUS AcpiDsMethodDataSetValue ( UINT8 Type, UINT32 Index, ACPI_OPERAND_OBJECT *Object, ACPI_WALK_STATE *WalkState); #ifdef ACPI_OBSOLETE_FUNCTIONS ACPI_OBJECT_TYPE AcpiDsMethodDataGetType ( UINT16 Opcode, UINT32 Index, ACPI_WALK_STATE *WalkState); #endif /******************************************************************************* * * FUNCTION: AcpiDsMethodDataInit * * PARAMETERS: WalkState - Current walk state object * * RETURN: Status * * DESCRIPTION: Initialize the data structures that hold the method's arguments * and locals. The data struct is an array of namespace nodes for * each - this allows RefOf and DeRefOf to work properly for these * special data types. * * NOTES: WalkState fields are initialized to zero by the * ACPI_ALLOCATE_ZEROED(). * * A pseudo-Namespace Node is assigned to each argument and local * so that RefOf() can return a pointer to the Node. * ******************************************************************************/ void AcpiDsMethodDataInit ( ACPI_WALK_STATE *WalkState) { UINT32 i; ACPI_FUNCTION_TRACE (DsMethodDataInit); /* Init the method arguments */ for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++) { ACPI_MOVE_32_TO_32 (&WalkState->Arguments[i].Name, NAMEOF_ARG_NTE); WalkState->Arguments[i].Name.Integer |= (i << 24); WalkState->Arguments[i].DescriptorType = ACPI_DESC_TYPE_NAMED; WalkState->Arguments[i].Type = ACPI_TYPE_ANY; WalkState->Arguments[i].Flags = ANOBJ_METHOD_ARG; } /* Init the method locals */ for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++) { ACPI_MOVE_32_TO_32 (&WalkState->LocalVariables[i].Name, NAMEOF_LOCAL_NTE); WalkState->LocalVariables[i].Name.Integer |= (i << 24); WalkState->LocalVariables[i].DescriptorType = ACPI_DESC_TYPE_NAMED; WalkState->LocalVariables[i].Type = ACPI_TYPE_ANY; WalkState->LocalVariables[i].Flags = ANOBJ_METHOD_LOCAL; } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiDsMethodDataDeleteAll * * PARAMETERS: WalkState - Current walk state object * * RETURN: None * * DESCRIPTION: Delete method locals and arguments. Arguments are only * deleted if this method was called from another method. * ******************************************************************************/ void AcpiDsMethodDataDeleteAll ( ACPI_WALK_STATE *WalkState) { UINT32 Index; ACPI_FUNCTION_TRACE (DsMethodDataDeleteAll); /* Detach the locals */ for (Index = 0; Index < ACPI_METHOD_NUM_LOCALS; Index++) { if (WalkState->LocalVariables[Index].Object) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Deleting Local%u=%p\n", Index, WalkState->LocalVariables[Index].Object)); /* Detach object (if present) and remove a reference */ AcpiNsDetachObject (&WalkState->LocalVariables[Index]); } } /* Detach the arguments */ for (Index = 0; Index < ACPI_METHOD_NUM_ARGS; Index++) { if (WalkState->Arguments[Index].Object) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Deleting Arg%u=%p\n", Index, WalkState->Arguments[Index].Object)); /* Detach object (if present) and remove a reference */ AcpiNsDetachObject (&WalkState->Arguments[Index]); } } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiDsMethodDataInitArgs * * PARAMETERS: *Params - Pointer to a parameter list for the method * MaxParamCount - The arg count for this method * WalkState - Current walk state object * * RETURN: Status * * DESCRIPTION: Initialize arguments for a method. The parameter list is a list * of ACPI operand objects, either null terminated or whose length * is defined by MaxParamCount. * ******************************************************************************/ ACPI_STATUS AcpiDsMethodDataInitArgs ( ACPI_OPERAND_OBJECT **Params, UINT32 MaxParamCount, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; UINT32 Index = 0; ACPI_FUNCTION_TRACE_PTR (DsMethodDataInitArgs, Params); if (!Params) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "No parameter list passed to method\n")); return_ACPI_STATUS (AE_OK); } /* Copy passed parameters into the new method stack frame */ while ((Index < ACPI_METHOD_NUM_ARGS) && (Index < MaxParamCount) && Params[Index]) { /* * A valid parameter. * Store the argument in the method/walk descriptor. * Do not copy the arg in order to implement call by reference */ Status = AcpiDsMethodDataSetValue ( ACPI_REFCLASS_ARG, Index, Params[Index], WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Index++; } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%u args passed to method\n", Index)); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsMethodDataGetNode * * PARAMETERS: Type - Either ACPI_REFCLASS_LOCAL or * ACPI_REFCLASS_ARG * Index - Which Local or Arg whose type to get * WalkState - Current walk state object * Node - Where the node is returned. * * RETURN: Status and node * * DESCRIPTION: Get the Node associated with a local or arg. * ******************************************************************************/ ACPI_STATUS AcpiDsMethodDataGetNode ( UINT8 Type, UINT32 Index, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE **Node) { ACPI_FUNCTION_TRACE (DsMethodDataGetNode); /* * Method Locals and Arguments are supported */ switch (Type) { case ACPI_REFCLASS_LOCAL: if (Index > ACPI_METHOD_MAX_LOCAL) { ACPI_ERROR ((AE_INFO, "Local index %u is invalid (max %u)", Index, ACPI_METHOD_MAX_LOCAL)); return_ACPI_STATUS (AE_AML_INVALID_INDEX); } /* Return a pointer to the pseudo-node */ *Node = &WalkState->LocalVariables[Index]; break; case ACPI_REFCLASS_ARG: if (Index > ACPI_METHOD_MAX_ARG) { ACPI_ERROR ((AE_INFO, "Arg index %u is invalid (max %u)", Index, ACPI_METHOD_MAX_ARG)); return_ACPI_STATUS (AE_AML_INVALID_INDEX); } /* Return a pointer to the pseudo-node */ *Node = &WalkState->Arguments[Index]; break; default: ACPI_ERROR ((AE_INFO, "Type %u is invalid", Type)); return_ACPI_STATUS (AE_TYPE); } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsMethodDataSetValue * * PARAMETERS: Type - Either ACPI_REFCLASS_LOCAL or * ACPI_REFCLASS_ARG * Index - Which Local or Arg to get * Object - Object to be inserted into the stack entry * WalkState - Current walk state object * * RETURN: Status * * DESCRIPTION: Insert an object onto the method stack at entry Opcode:Index. * Note: There is no "implicit conversion" for locals. * ******************************************************************************/ static ACPI_STATUS AcpiDsMethodDataSetValue ( UINT8 Type, UINT32 Index, ACPI_OPERAND_OBJECT *Object, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_FUNCTION_TRACE (DsMethodDataSetValue); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "NewObj %p Type %2.2X, Refs=%u [%s]\n", Object, Type, Object->Common.ReferenceCount, AcpiUtGetTypeName (Object->Common.Type))); /* Get the namespace node for the arg/local */ Status = AcpiDsMethodDataGetNode (Type, Index, WalkState, &Node); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Increment ref count so object can't be deleted while installed. * NOTE: We do not copy the object in order to preserve the call by * reference semantics of ACPI Control Method invocation. * (See ACPI Specification 2.0C) */ AcpiUtAddReference (Object); /* Install the object */ Node->Object = Object; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsMethodDataGetValue * * PARAMETERS: Type - Either ACPI_REFCLASS_LOCAL or * ACPI_REFCLASS_ARG * Index - Which localVar or argument to get * WalkState - Current walk state object * DestDesc - Where Arg or Local value is returned * * RETURN: Status * * DESCRIPTION: Retrieve value of selected Arg or Local for this method * Used only in AcpiExResolveToValue(). * ******************************************************************************/ ACPI_STATUS AcpiDsMethodDataGetValue ( UINT8 Type, UINT32 Index, ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT **DestDesc) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_OPERAND_OBJECT *Object; ACPI_FUNCTION_TRACE (DsMethodDataGetValue); /* Validate the object descriptor */ if (!DestDesc) { ACPI_ERROR ((AE_INFO, "Null object descriptor pointer")); return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Get the namespace node for the arg/local */ Status = AcpiDsMethodDataGetNode (Type, Index, WalkState, &Node); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Get the object from the node */ Object = Node->Object; /* Examine the returned object, it must be valid. */ if (!Object) { /* * Index points to uninitialized object. * This means that either 1) The expected argument was * not passed to the method, or 2) A local variable * was referenced by the method (via the ASL) * before it was initialized. Either case is an error. */ /* If slack enabled, init the LocalX/ArgX to an Integer of value zero */ if (AcpiGbl_EnableInterpreterSlack) { Object = AcpiUtCreateIntegerObject ((UINT64) 0); if (!Object) { return_ACPI_STATUS (AE_NO_MEMORY); } Node->Object = Object; } /* Otherwise, return the error */ else switch (Type) { case ACPI_REFCLASS_ARG: ACPI_ERROR ((AE_INFO, "Uninitialized Arg[%u] at node %p", Index, Node)); return_ACPI_STATUS (AE_AML_UNINITIALIZED_ARG); case ACPI_REFCLASS_LOCAL: /* * No error message for this case, will be trapped again later to * detect and ignore cases of Store(LocalX,LocalX) */ return_ACPI_STATUS (AE_AML_UNINITIALIZED_LOCAL); default: ACPI_ERROR ((AE_INFO, "Not a Arg/Local opcode: 0x%X", Type)); return_ACPI_STATUS (AE_AML_INTERNAL); } } /* * The Index points to an initialized and valid object. * Return an additional reference to the object */ *DestDesc = Object; AcpiUtAddReference (Object); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsMethodDataDeleteValue * * PARAMETERS: Type - Either ACPI_REFCLASS_LOCAL or * ACPI_REFCLASS_ARG * Index - Which localVar or argument to delete * WalkState - Current walk state object * * RETURN: None * * DESCRIPTION: Delete the entry at Opcode:Index. Inserts * a null into the stack slot after the object is deleted. * ******************************************************************************/ static void AcpiDsMethodDataDeleteValue ( UINT8 Type, UINT32 Index, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_OPERAND_OBJECT *Object; ACPI_FUNCTION_TRACE (DsMethodDataDeleteValue); /* Get the namespace node for the arg/local */ Status = AcpiDsMethodDataGetNode (Type, Index, WalkState, &Node); if (ACPI_FAILURE (Status)) { return_VOID; } /* Get the associated object */ Object = AcpiNsGetAttachedObject (Node); /* * Undefine the Arg or Local by setting its descriptor * pointer to NULL. Locals/Args can contain both * ACPI_OPERAND_OBJECTS and ACPI_NAMESPACE_NODEs */ Node->Object = NULL; if ((Object) && (ACPI_GET_DESCRIPTOR_TYPE (Object) == ACPI_DESC_TYPE_OPERAND)) { /* * There is a valid object. * Decrement the reference count by one to balance the * increment when the object was stored. */ AcpiUtRemoveReference (Object); } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiDsStoreObjectToLocal * * PARAMETERS: Type - Either ACPI_REFCLASS_LOCAL or * ACPI_REFCLASS_ARG * Index - Which Local or Arg to set * ObjDesc - Value to be stored * WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Store a value in an Arg or Local. The ObjDesc is installed * as the new value for the Arg or Local and the reference count * for ObjDesc is incremented. * ******************************************************************************/ ACPI_STATUS AcpiDsStoreObjectToLocal ( UINT8 Type, UINT32 Index, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_OPERAND_OBJECT *CurrentObjDesc; ACPI_OPERAND_OBJECT *NewObjDesc; ACPI_FUNCTION_TRACE (DsStoreObjectToLocal); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Type=%2.2X Index=%u Obj=%p\n", Type, Index, ObjDesc)); /* Parameter validation */ if (!ObjDesc) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Get the namespace node for the arg/local */ Status = AcpiDsMethodDataGetNode (Type, Index, WalkState, &Node); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } CurrentObjDesc = AcpiNsGetAttachedObject (Node); if (CurrentObjDesc == ObjDesc) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p already installed!\n", ObjDesc)); return_ACPI_STATUS (Status); } /* * If the reference count on the object is more than one, we must * take a copy of the object before we store. A reference count * of exactly 1 means that the object was just created during the * evaluation of an expression, and we can safely use it since it * is not used anywhere else. */ NewObjDesc = ObjDesc; if (ObjDesc->Common.ReferenceCount > 1) { Status = AcpiUtCopyIobjectToIobject ( ObjDesc, &NewObjDesc, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } /* * If there is an object already in this slot, we either * have to delete it, or if this is an argument and there * is an object reference stored there, we have to do * an indirect store! */ if (CurrentObjDesc) { /* * Check for an indirect store if an argument * contains an object reference (stored as an Node). * We don't allow this automatic dereferencing for * locals, since a store to a local should overwrite * anything there, including an object reference. * * If both Arg0 and Local0 contain RefOf (Local4): * * Store (1, Arg0) - Causes indirect store to local4 * Store (1, Local0) - Stores 1 in local0, overwriting * the reference to local4 * Store (1, DeRefof (Local0)) - Causes indirect store to local4 * * Weird, but true. */ if (Type == ACPI_REFCLASS_ARG) { /* * If we have a valid reference object that came from RefOf(), * do the indirect store */ if ((ACPI_GET_DESCRIPTOR_TYPE (CurrentObjDesc) == ACPI_DESC_TYPE_OPERAND) && (CurrentObjDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) && (CurrentObjDesc->Reference.Class == ACPI_REFCLASS_REFOF)) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Arg (%p) is an ObjRef(Node), storing in node %p\n", NewObjDesc, CurrentObjDesc)); /* * Store this object to the Node (perform the indirect store) * NOTE: No implicit conversion is performed, as per the ACPI * specification rules on storing to Locals/Args. */ Status = AcpiExStoreObjectToNode (NewObjDesc, CurrentObjDesc->Reference.Object, WalkState, ACPI_NO_IMPLICIT_CONVERSION); /* Remove local reference if we copied the object above */ if (NewObjDesc != ObjDesc) { AcpiUtRemoveReference (NewObjDesc); } return_ACPI_STATUS (Status); } } /* Delete the existing object before storing the new one */ AcpiDsMethodDataDeleteValue (Type, Index, WalkState); } /* * Install the Obj descriptor (*NewObjDesc) into * the descriptor for the Arg or Local. * (increments the object reference count by one) */ Status = AcpiDsMethodDataSetValue (Type, Index, NewObjDesc, WalkState); /* Remove local reference if we copied the object above */ if (NewObjDesc != ObjDesc) { AcpiUtRemoveReference (NewObjDesc); } return_ACPI_STATUS (Status); } #ifdef ACPI_OBSOLETE_FUNCTIONS /******************************************************************************* * * FUNCTION: AcpiDsMethodDataGetType * * PARAMETERS: Opcode - Either AML_FIRST LOCAL_OP or * AML_FIRST_ARG_OP * Index - Which Local or Arg whose type to get * WalkState - Current walk state object * * RETURN: Data type of current value of the selected Arg or Local * * DESCRIPTION: Get the type of the object stored in the Local or Arg * ******************************************************************************/ ACPI_OBJECT_TYPE AcpiDsMethodDataGetType ( UINT16 Opcode, UINT32 Index, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_OPERAND_OBJECT *Object; ACPI_FUNCTION_TRACE (DsMethodDataGetType); /* Get the namespace node for the arg/local */ Status = AcpiDsMethodDataGetNode (Opcode, Index, WalkState, &Node); if (ACPI_FAILURE (Status)) { return_VALUE ((ACPI_TYPE_NOT_FOUND)); } /* Get the object */ Object = AcpiNsGetAttachedObject (Node); if (!Object) { /* Uninitialized local/arg, return TYPE_ANY */ return_VALUE (ACPI_TYPE_ANY); } /* Get the object type */ return_VALUE (Object->Type); } #endif src/acpica/source/components/dispatcher/dsobject.c000066400000000000000000000576211465205512700226630ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dsobject - Dispatcher object management routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acdispat.h" #include "acnamesp.h" #include "acinterp.h" #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dsobject") /******************************************************************************* * * FUNCTION: AcpiDsBuildInternalObject * * PARAMETERS: WalkState - Current walk state * Op - Parser object to be translated * ObjDescPtr - Where the ACPI internal object is returned * * RETURN: Status * * DESCRIPTION: Translate a parser Op object to the equivalent namespace object * Simple objects are any objects other than a package object! * ******************************************************************************/ ACPI_STATUS AcpiDsBuildInternalObject ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, ACPI_OPERAND_OBJECT **ObjDescPtr) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (DsBuildInternalObject); *ObjDescPtr = NULL; if (Op->Common.AmlOpcode == AML_INT_NAMEPATH_OP) { /* * This is a named object reference. If this name was * previously looked up in the namespace, it was stored in * this op. Otherwise, go ahead and look it up now */ if (!Op->Common.Node) { /* Check if we are resolving a named reference within a package */ if ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP)) { /* * We won't resolve package elements here, we will do this * after all ACPI tables are loaded into the namespace. This * behavior supports both forward references to named objects * and external references to objects in other tables. */ goto CreateNewObject; } else { Status = AcpiNsLookup (WalkState->ScopeInfo, Op->Common.Value.String, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, NULL, ACPI_CAST_INDIRECT_PTR ( ACPI_NAMESPACE_NODE, &(Op->Common.Node))); if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Op->Common.Value.String, Status); return_ACPI_STATUS (Status); } } } } CreateNewObject: /* Create and init a new internal ACPI object */ ObjDesc = AcpiUtCreateInternalObject ( (AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode))->ObjectType); if (!ObjDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } Status = AcpiDsInitObjectFromOp ( WalkState, Op, Op->Common.AmlOpcode, &ObjDesc); if (ACPI_FAILURE (Status)) { AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /* * Handling for unresolved package reference elements. * These are elements that are namepaths. */ if ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP)) { ObjDesc->Reference.Resolved = TRUE; if ((Op->Common.AmlOpcode == AML_INT_NAMEPATH_OP) && !ObjDesc->Reference.Node) { /* * Name was unresolved above. * Get the prefix node for later lookup */ ObjDesc->Reference.Node = WalkState->ScopeInfo->Scope.Node; ObjDesc->Reference.Aml = Op->Common.Aml; ObjDesc->Reference.Resolved = FALSE; } } *ObjDescPtr = ObjDesc; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsBuildInternalBufferObj * * PARAMETERS: WalkState - Current walk state * Op - Parser object to be translated * BufferLength - Length of the buffer * ObjDescPtr - Where the ACPI internal object is returned * * RETURN: Status * * DESCRIPTION: Translate a parser Op package object to the equivalent * namespace object * ******************************************************************************/ ACPI_STATUS AcpiDsBuildInternalBufferObj ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, UINT32 BufferLength, ACPI_OPERAND_OBJECT **ObjDescPtr) { ACPI_PARSE_OBJECT *Arg; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_PARSE_OBJECT *ByteList; UINT32 ByteListLength = 0; ACPI_FUNCTION_TRACE (DsBuildInternalBufferObj); /* * If we are evaluating a Named buffer object "Name (xxxx, Buffer)". * The buffer object already exists (from the NS node), otherwise it must * be created. */ ObjDesc = *ObjDescPtr; if (!ObjDesc) { /* Create a new buffer object */ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_BUFFER); *ObjDescPtr = ObjDesc; if (!ObjDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } } /* * Second arg is the buffer data (optional) ByteList can be either * individual bytes or a string initializer. In either case, a * ByteList appears in the AML. */ Arg = Op->Common.Value.Arg; /* skip first arg */ ByteList = Arg->Named.Next; if (ByteList) { if (ByteList->Common.AmlOpcode != AML_INT_BYTELIST_OP) { ACPI_ERROR ((AE_INFO, "Expecting bytelist, found AML opcode 0x%X in op %p", ByteList->Common.AmlOpcode, ByteList)); AcpiUtRemoveReference (ObjDesc); return (AE_TYPE); } ByteListLength = (UINT32) ByteList->Common.Value.Integer; } /* * The buffer length (number of bytes) will be the larger of: * 1) The specified buffer length and * 2) The length of the initializer byte list */ ObjDesc->Buffer.Length = BufferLength; if (ByteListLength > BufferLength) { ObjDesc->Buffer.Length = ByteListLength; } /* Allocate the buffer */ if (ObjDesc->Buffer.Length == 0) { ObjDesc->Buffer.Pointer = NULL; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Buffer defined with zero length in AML, creating\n")); } else { ObjDesc->Buffer.Pointer = ACPI_ALLOCATE_ZEROED (ObjDesc->Buffer.Length); if (!ObjDesc->Buffer.Pointer) { AcpiUtDeleteObjectDesc (ObjDesc); return_ACPI_STATUS (AE_NO_MEMORY); } /* Initialize buffer from the ByteList (if present) */ if (ByteList) { memcpy (ObjDesc->Buffer.Pointer, ByteList->Named.Data, ByteListLength); } } ObjDesc->Buffer.Flags |= AOPOBJ_DATA_VALID; Op->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjDesc); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsCreateNode * * PARAMETERS: WalkState - Current walk state * Node - NS Node to be initialized * Op - Parser object to be translated * * RETURN: Status * * DESCRIPTION: Create the object to be associated with a namespace node * ******************************************************************************/ ACPI_STATUS AcpiDsCreateNode ( ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE *Node, ACPI_PARSE_OBJECT *Op) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_FUNCTION_TRACE_PTR (DsCreateNode, Op); /* * Because of the execution pass through the non-control-method * parts of the table, we can arrive here twice. Only init * the named object node the first time through */ if (AcpiNsGetAttachedObject (Node)) { return_ACPI_STATUS (AE_OK); } if (!Op->Common.Value.Arg) { /* No arguments, there is nothing to do */ return_ACPI_STATUS (AE_OK); } /* Build an internal object for the argument(s) */ Status = AcpiDsBuildInternalObject ( WalkState, Op->Common.Value.Arg, &ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Re-type the object according to its argument */ Node->Type = ObjDesc->Common.Type; /* Attach obj to node */ Status = AcpiNsAttachObject (Node, ObjDesc, Node->Type); /* Remove local reference to the object */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsInitObjectFromOp * * PARAMETERS: WalkState - Current walk state * Op - Parser op used to init the internal object * Opcode - AML opcode associated with the object * RetObjDesc - Namespace object to be initialized * * RETURN: Status * * DESCRIPTION: Initialize a namespace object from a parser Op and its * associated arguments. The namespace object is a more compact * representation of the Op and its arguments. * ******************************************************************************/ ACPI_STATUS AcpiDsInitObjectFromOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, UINT16 Opcode, ACPI_OPERAND_OBJECT **RetObjDesc) { const ACPI_OPCODE_INFO *OpInfo; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (DsInitObjectFromOp); ObjDesc = *RetObjDesc; OpInfo = AcpiPsGetOpcodeInfo (Opcode); if (OpInfo->Class == AML_CLASS_UNKNOWN) { /* Unknown opcode */ return_ACPI_STATUS (AE_TYPE); } /* Perform per-object initialization */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_BUFFER: /* * Defer evaluation of Buffer TermArg operand */ ObjDesc->Buffer.Node = ACPI_CAST_PTR ( ACPI_NAMESPACE_NODE, WalkState->Operands[0]); ObjDesc->Buffer.AmlStart = Op->Named.Data; ObjDesc->Buffer.AmlLength = Op->Named.Length; break; case ACPI_TYPE_PACKAGE: /* * Defer evaluation of Package TermArg operand and all * package elements. (01/2017): We defer the element * resolution to allow forward references from the package * in order to provide compatibility with other ACPI * implementations. */ ObjDesc->Package.Node = ACPI_CAST_PTR ( ACPI_NAMESPACE_NODE, WalkState->Operands[0]); if (!Op->Named.Data) { return_ACPI_STATUS (AE_OK); } ObjDesc->Package.AmlStart = Op->Named.Data; ObjDesc->Package.AmlLength = Op->Named.Length; break; case ACPI_TYPE_INTEGER: switch (OpInfo->Type) { case AML_TYPE_CONSTANT: /* * Resolve AML Constants here - AND ONLY HERE! * All constants are integers. * We mark the integer with a flag that indicates that it started * life as a constant -- so that stores to constants will perform * as expected (noop). ZeroOp is used as a placeholder for optional * target operands. */ ObjDesc->Common.Flags = AOPOBJ_AML_CONSTANT; switch (Opcode) { case AML_ZERO_OP: ObjDesc->Integer.Value = 0; break; case AML_ONE_OP: ObjDesc->Integer.Value = 1; break; case AML_ONES_OP: ObjDesc->Integer.Value = ACPI_UINT64_MAX; /* Truncate value if we are executing from a 32-bit ACPI table */ (void) AcpiExTruncateFor32bitTable (ObjDesc); break; case AML_REVISION_OP: ObjDesc->Integer.Value = ACPI_CA_VERSION; break; default: ACPI_ERROR ((AE_INFO, "Unknown constant opcode 0x%X", Opcode)); Status = AE_AML_OPERAND_TYPE; break; } break; case AML_TYPE_LITERAL: ObjDesc->Integer.Value = Op->Common.Value.Integer; if (AcpiExTruncateFor32bitTable (ObjDesc)) { /* Warn if we found a 64-bit constant in a 32-bit table */ ACPI_WARNING ((AE_INFO, "Truncated 64-bit constant found in 32-bit table: %8.8X%8.8X => %8.8X", ACPI_FORMAT_UINT64 (Op->Common.Value.Integer), (UINT32) ObjDesc->Integer.Value)); } break; default: ACPI_ERROR ((AE_INFO, "Unknown Integer type 0x%X", OpInfo->Type)); Status = AE_AML_OPERAND_TYPE; break; } break; case ACPI_TYPE_STRING: ObjDesc->String.Pointer = Op->Common.Value.String; ObjDesc->String.Length = (UINT32) strlen (Op->Common.Value.String); /* * The string is contained in the ACPI table, don't ever try * to delete it */ ObjDesc->Common.Flags |= AOPOBJ_STATIC_POINTER; break; case ACPI_TYPE_METHOD: break; case ACPI_TYPE_LOCAL_REFERENCE: switch (OpInfo->Type) { case AML_TYPE_LOCAL_VARIABLE: /* Local ID (0-7) is (AML opcode - base AML_FIRST_LOCAL_OP) */ ObjDesc->Reference.Value = ((UINT32) Opcode) - AML_FIRST_LOCAL_OP; ObjDesc->Reference.Class = ACPI_REFCLASS_LOCAL; Status = AcpiDsMethodDataGetNode (ACPI_REFCLASS_LOCAL, ObjDesc->Reference.Value, WalkState, ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE, &ObjDesc->Reference.Object)); break; case AML_TYPE_METHOD_ARGUMENT: /* Arg ID (0-6) is (AML opcode - base AML_FIRST_ARG_OP) */ ObjDesc->Reference.Value = ((UINT32) Opcode) - AML_FIRST_ARG_OP; ObjDesc->Reference.Class = ACPI_REFCLASS_ARG; Status = AcpiDsMethodDataGetNode (ACPI_REFCLASS_ARG, ObjDesc->Reference.Value, WalkState, ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE, &ObjDesc->Reference.Object)); break; default: /* Object name or Debug object */ switch (Op->Common.AmlOpcode) { case AML_INT_NAMEPATH_OP: /* Node was saved in Op */ ObjDesc->Reference.Node = Op->Common.Node; ObjDesc->Reference.Class = ACPI_REFCLASS_NAME; if (Op->Common.Node) { ObjDesc->Reference.Object = Op->Common.Node->Object; } break; case AML_DEBUG_OP: ObjDesc->Reference.Class = ACPI_REFCLASS_DEBUG; break; default: ACPI_ERROR ((AE_INFO, "Unimplemented reference type for AML opcode: 0x%4.4X", Opcode)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } break; } break; default: ACPI_ERROR ((AE_INFO, "Unimplemented data type: 0x%X", ObjDesc->Common.Type)); Status = AE_AML_OPERAND_TYPE; break; } return_ACPI_STATUS (Status); } src/acpica/source/components/dispatcher/dsopcode.c000066400000000000000000000717571465205512700226740ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dsopcode - Dispatcher support for regions and fields * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acdispat.h" #include "acinterp.h" #include "acnamesp.h" #include "acevents.h" #include "actables.h" #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dsopcode") /* Local prototypes */ static ACPI_STATUS AcpiDsInitBufferField ( UINT16 AmlOpcode, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT *BufferDesc, ACPI_OPERAND_OBJECT *OffsetDesc, ACPI_OPERAND_OBJECT *LengthDesc, ACPI_OPERAND_OBJECT *ResultDesc); /******************************************************************************* * * FUNCTION: AcpiDsInitializeRegion * * PARAMETERS: ObjHandle - Region namespace node * * RETURN: Status * * DESCRIPTION: Front end to EvInitializeRegion * ******************************************************************************/ ACPI_STATUS AcpiDsInitializeRegion ( ACPI_HANDLE ObjHandle) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; ObjDesc = AcpiNsGetAttachedObject (ObjHandle); /* Namespace is NOT locked */ Status = AcpiEvInitializeRegion (ObjDesc); return (Status); } /******************************************************************************* * * FUNCTION: AcpiDsInitBufferField * * PARAMETERS: AmlOpcode - CreateXxxField * ObjDesc - BufferField object * BufferDesc - Host Buffer * OffsetDesc - Offset into buffer * LengthDesc - Length of field (CREATE_FIELD_OP only) * ResultDesc - Where to store the result * * RETURN: Status * * DESCRIPTION: Perform actual initialization of a buffer field * ******************************************************************************/ static ACPI_STATUS AcpiDsInitBufferField ( UINT16 AmlOpcode, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT *BufferDesc, ACPI_OPERAND_OBJECT *OffsetDesc, ACPI_OPERAND_OBJECT *LengthDesc, ACPI_OPERAND_OBJECT *ResultDesc) { UINT32 Offset; UINT32 BitOffset; UINT32 BitCount; UINT8 FieldFlags; ACPI_STATUS Status; ACPI_FUNCTION_TRACE_PTR (DsInitBufferField, ObjDesc); /* Host object must be a Buffer */ if (BufferDesc->Common.Type != ACPI_TYPE_BUFFER) { ACPI_ERROR ((AE_INFO, "Target of Create Field is not a Buffer object - %s", AcpiUtGetObjectTypeName (BufferDesc))); Status = AE_AML_OPERAND_TYPE; goto Cleanup; } /* * The last parameter to all of these opcodes (ResultDesc) started * out as a NameString, and should therefore now be a NS node * after resolution in AcpiExResolveOperands(). */ if (ACPI_GET_DESCRIPTOR_TYPE (ResultDesc) != ACPI_DESC_TYPE_NAMED) { ACPI_ERROR ((AE_INFO, "(%s) destination not a NS Node [%s]", AcpiPsGetOpcodeName (AmlOpcode), AcpiUtGetDescriptorName (ResultDesc))); Status = AE_AML_OPERAND_TYPE; goto Cleanup; } Offset = (UINT32) OffsetDesc->Integer.Value; /* * Setup the Bit offsets and counts, according to the opcode */ switch (AmlOpcode) { case AML_CREATE_FIELD_OP: /* Offset is in bits, count is in bits */ FieldFlags = AML_FIELD_ACCESS_BYTE; BitOffset = Offset; BitCount = (UINT32) LengthDesc->Integer.Value; /* Must have a valid (>0) bit count */ if (BitCount == 0) { ACPI_BIOS_ERROR ((AE_INFO, "Attempt to CreateField of length zero")); Status = AE_AML_OPERAND_VALUE; goto Cleanup; } break; case AML_CREATE_BIT_FIELD_OP: /* Offset is in bits, Field is one bit */ BitOffset = Offset; BitCount = 1; FieldFlags = AML_FIELD_ACCESS_BYTE; break; case AML_CREATE_BYTE_FIELD_OP: /* Offset is in bytes, field is one byte */ BitOffset = 8 * Offset; BitCount = 8; FieldFlags = AML_FIELD_ACCESS_BYTE; break; case AML_CREATE_WORD_FIELD_OP: /* Offset is in bytes, field is one word */ BitOffset = 8 * Offset; BitCount = 16; FieldFlags = AML_FIELD_ACCESS_WORD; break; case AML_CREATE_DWORD_FIELD_OP: /* Offset is in bytes, field is one dword */ BitOffset = 8 * Offset; BitCount = 32; FieldFlags = AML_FIELD_ACCESS_DWORD; break; case AML_CREATE_QWORD_FIELD_OP: /* Offset is in bytes, field is one qword */ BitOffset = 8 * Offset; BitCount = 64; FieldFlags = AML_FIELD_ACCESS_QWORD; break; default: ACPI_ERROR ((AE_INFO, "Unknown field creation opcode 0x%02X", AmlOpcode)); Status = AE_AML_BAD_OPCODE; goto Cleanup; } /* Entire field must fit within the current length of the buffer */ if ((BitOffset + BitCount) > (8 * (UINT32) BufferDesc->Buffer.Length)) { Status = AE_AML_BUFFER_LIMIT; ACPI_BIOS_EXCEPTION ((AE_INFO, Status, "Field [%4.4s] at bit offset/length %u/%u " "exceeds size of target Buffer (%u bits)", AcpiUtGetNodeName (ResultDesc), BitOffset, BitCount, 8 * (UINT32) BufferDesc->Buffer.Length)); goto Cleanup; } /* * Initialize areas of the field object that are common to all fields * For FieldFlags, use LOCK_RULE = 0 (NO_LOCK), * UPDATE_RULE = 0 (UPDATE_PRESERVE) */ Status = AcpiExPrepCommonFieldObject ( ObjDesc, FieldFlags, 0, BitOffset, BitCount); if (ACPI_FAILURE (Status)) { goto Cleanup; } ObjDesc->BufferField.BufferObj = BufferDesc; ObjDesc->BufferField.IsCreateField = AmlOpcode == AML_CREATE_FIELD_OP; /* Reference count for BufferDesc inherits ObjDesc count */ BufferDesc->Common.ReferenceCount = (UINT16) (BufferDesc->Common.ReferenceCount + ObjDesc->Common.ReferenceCount); Cleanup: /* Always delete the operands */ AcpiUtRemoveReference (OffsetDesc); AcpiUtRemoveReference (BufferDesc); if (AmlOpcode == AML_CREATE_FIELD_OP) { AcpiUtRemoveReference (LengthDesc); } /* On failure, delete the result descriptor */ if (ACPI_FAILURE (Status)) { AcpiUtRemoveReference (ResultDesc); /* Result descriptor */ } else { /* Now the address and length are valid for this BufferField */ ObjDesc->BufferField.Flags |= AOPOBJ_DATA_VALID; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsEvalBufferFieldOperands * * PARAMETERS: WalkState - Current walk * Op - A valid BufferField Op object * * RETURN: Status * * DESCRIPTION: Get BufferField Buffer and Index * Called from AcpiDsExecEndOp during BufferField parse tree walk * ******************************************************************************/ ACPI_STATUS AcpiDsEvalBufferFieldOperands ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_NAMESPACE_NODE *Node; ACPI_PARSE_OBJECT *NextOp; ACPI_FUNCTION_TRACE_PTR (DsEvalBufferFieldOperands, Op); /* * This is where we evaluate the address and length fields of the * CreateXxxField declaration */ Node = Op->Common.Node; /* NextOp points to the op that holds the Buffer */ NextOp = Op->Common.Value.Arg; /* Evaluate/create the address and length operands */ Status = AcpiDsCreateOperands (WalkState, NextOp); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { return_ACPI_STATUS (AE_NOT_EXIST); } /* Resolve the operands */ Status = AcpiExResolveOperands ( Op->Common.AmlOpcode, ACPI_WALK_OPERANDS, WalkState); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "(%s) bad operand(s), status 0x%X", AcpiPsGetOpcodeName (Op->Common.AmlOpcode), Status)); return_ACPI_STATUS (Status); } /* Initialize the Buffer Field */ if (Op->Common.AmlOpcode == AML_CREATE_FIELD_OP) { /* NOTE: Slightly different operands for this opcode */ Status = AcpiDsInitBufferField (Op->Common.AmlOpcode, ObjDesc, WalkState->Operands[0], WalkState->Operands[1], WalkState->Operands[2], WalkState->Operands[3]); } else { /* All other, CreateXxxField opcodes */ Status = AcpiDsInitBufferField (Op->Common.AmlOpcode, ObjDesc, WalkState->Operands[0], WalkState->Operands[1], NULL, WalkState->Operands[2]); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsEvalRegionOperands * * PARAMETERS: WalkState - Current walk * Op - A valid region Op object * * RETURN: Status * * DESCRIPTION: Get region address and length * Called from AcpiDsExecEndOp during OpRegion parse tree walk * ******************************************************************************/ ACPI_STATUS AcpiDsEvalRegionOperands ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *OperandDesc; ACPI_NAMESPACE_NODE *Node; ACPI_PARSE_OBJECT *NextOp; ACPI_ADR_SPACE_TYPE SpaceId; ACPI_FUNCTION_TRACE_PTR (DsEvalRegionOperands, Op); /* * This is where we evaluate the address and length fields of the * OpRegion declaration */ Node = Op->Common.Node; /* NextOp points to the op that holds the SpaceID */ NextOp = Op->Common.Value.Arg; SpaceId = (ACPI_ADR_SPACE_TYPE) NextOp->Common.Value.Integer; /* NextOp points to address op */ NextOp = NextOp->Common.Next; /* Evaluate/create the address and length operands */ Status = AcpiDsCreateOperands (WalkState, NextOp); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Resolve the length and address operands to numbers */ Status = AcpiExResolveOperands ( Op->Common.AmlOpcode, ACPI_WALK_OPERANDS, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { return_ACPI_STATUS (AE_NOT_EXIST); } /* * Get the length operand and save it * (at Top of stack) */ OperandDesc = WalkState->Operands[WalkState->NumOperands - 1]; ObjDesc->Region.Length = (UINT32) OperandDesc->Integer.Value; AcpiUtRemoveReference (OperandDesc); /* A zero-length operation region is unusable. Just warn */ if (!ObjDesc->Region.Length && (SpaceId < ACPI_NUM_PREDEFINED_REGIONS)) { ACPI_WARNING ((AE_INFO, "Operation Region [%4.4s] has zero length (SpaceId %X)", Node->Name.Ascii, SpaceId)); } /* * Get the address and save it * (at top of stack - 1) */ OperandDesc = WalkState->Operands[WalkState->NumOperands - 2]; ObjDesc->Region.Address = (ACPI_PHYSICAL_ADDRESS) OperandDesc->Integer.Value; AcpiUtRemoveReference (OperandDesc); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n", ObjDesc, ACPI_FORMAT_UINT64 (ObjDesc->Region.Address), ObjDesc->Region.Length)); Status = AcpiUtAddAddressRange (ObjDesc->Region.SpaceId, ObjDesc->Region.Address, ObjDesc->Region.Length, Node); /* Now the address and length are valid for this opregion */ ObjDesc->Region.Flags |= AOPOBJ_DATA_VALID; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsEvalTableRegionOperands * * PARAMETERS: WalkState - Current walk * Op - A valid region Op object * * RETURN: Status * * DESCRIPTION: Get region address and length. * Called from AcpiDsExecEndOp during DataTableRegion parse * tree walk. * ******************************************************************************/ ACPI_STATUS AcpiDsEvalTableRegionOperands ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT **Operand; ACPI_NAMESPACE_NODE *Node; ACPI_PARSE_OBJECT *NextOp; ACPI_TABLE_HEADER *Table; UINT32 TableIndex; ACPI_FUNCTION_TRACE_PTR (DsEvalTableRegionOperands, Op); /* * 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 Signature string op */ NextOp = Op->Common.Value.Arg; /* * Evaluate/create the Signature string, OemId string, * and OemTableId string operands */ Status = AcpiDsCreateOperands (WalkState, NextOp); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Operand = &WalkState->Operands[0]; /* * Resolve the Signature string, OemId string, * and OemTableId string operands */ Status = AcpiExResolveOperands ( Op->Common.AmlOpcode, ACPI_WALK_OPERANDS, WalkState); if (ACPI_FAILURE (Status)) { goto Cleanup; } /* Find the ACPI table */ Status = AcpiTbFindTable ( Operand[0]->String.Pointer, Operand[1]->String.Pointer, Operand[2]->String.Pointer, &TableIndex); if (ACPI_FAILURE (Status)) { if (Status == AE_NOT_FOUND) { ACPI_ERROR ((AE_INFO, "ACPI Table [%4.4s] OEM:(%s, %s) not found in RSDT/XSDT", Operand[0]->String.Pointer, Operand[1]->String.Pointer, Operand[2]->String.Pointer)); } goto Cleanup; } Status = AcpiGetTableByIndex (TableIndex, &Table); if (ACPI_FAILURE (Status)) { goto Cleanup; } ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { Status = AE_NOT_EXIST; goto Cleanup; } ObjDesc->Region.Address = ACPI_PTR_TO_PHYSADDR (Table); ObjDesc->Region.Length = Table->Length; ObjDesc->Region.Pointer = Table; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n", ObjDesc, ACPI_FORMAT_UINT64 (ObjDesc->Region.Address), ObjDesc->Region.Length)); /* Now the address and length are valid for this opregion */ ObjDesc->Region.Flags |= AOPOBJ_DATA_VALID; Cleanup: AcpiUtRemoveReference (Operand[0]); AcpiUtRemoveReference (Operand[1]); AcpiUtRemoveReference (Operand[2]); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsEvalDataObjectOperands * * PARAMETERS: WalkState - Current walk * Op - A valid DataObject Op object * ObjDesc - DataObject * * RETURN: Status * * DESCRIPTION: Get the operands and complete the following data object types: * Buffer, Package. * ******************************************************************************/ ACPI_STATUS AcpiDsEvalDataObjectOperands ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ArgDesc; UINT32 Length; ACPI_FUNCTION_TRACE (DsEvalDataObjectOperands); /* The first operand (for all of these data objects) is the length */ /* * Set proper index into operand stack for AcpiDsObjStackPush * invoked inside AcpiDsCreateOperand. */ WalkState->OperandIndex = WalkState->NumOperands; /* Ignore if child is not valid */ if (!Op->Common.Value.Arg) { ACPI_ERROR ((AE_INFO, "Missing child while evaluating opcode %4.4X, Op %p", Op->Common.AmlOpcode, Op)); return_ACPI_STATUS (AE_OK); } Status = AcpiDsCreateOperand (WalkState, Op->Common.Value.Arg, 1); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiExResolveOperands (WalkState->Opcode, &(WalkState->Operands [WalkState->NumOperands -1]), WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Extract length operand */ ArgDesc = WalkState->Operands [WalkState->NumOperands - 1]; Length = (UINT32) ArgDesc->Integer.Value; /* Cleanup for length operand */ Status = AcpiDsObjStackPop (1, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } AcpiUtRemoveReference (ArgDesc); /* * Create the actual data object */ switch (Op->Common.AmlOpcode) { case AML_BUFFER_OP: Status = AcpiDsBuildInternalBufferObj ( WalkState, Op, Length, &ObjDesc); break; case AML_PACKAGE_OP: case AML_VARIABLE_PACKAGE_OP: Status = AcpiDsBuildInternalPackageObj ( WalkState, Op, Length, &ObjDesc); break; default: return_ACPI_STATUS (AE_AML_BAD_OPCODE); } if (ACPI_SUCCESS (Status)) { /* * Return the object in the WalkState, unless the parent is a package - * in this case, the return object will be stored in the parse tree * for the package. */ if ((!Op->Common.Parent) || ((Op->Common.Parent->Common.AmlOpcode != AML_PACKAGE_OP) && (Op->Common.Parent->Common.AmlOpcode != AML_VARIABLE_PACKAGE_OP) && (Op->Common.Parent->Common.AmlOpcode != AML_NAME_OP))) { WalkState->ResultObj = ObjDesc; } } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsEvalBankFieldOperands * * PARAMETERS: WalkState - Current walk * Op - A valid BankField Op object * * RETURN: Status * * DESCRIPTION: Get BankField BankValue * Called from AcpiDsExecEndOp during BankField parse tree walk * ******************************************************************************/ ACPI_STATUS AcpiDsEvalBankFieldOperands ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *OperandDesc; ACPI_NAMESPACE_NODE *Node; ACPI_PARSE_OBJECT *NextOp; ACPI_PARSE_OBJECT *Arg; ACPI_FUNCTION_TRACE_PTR (DsEvalBankFieldOperands, Op); /* * This is where we evaluate the BankValue field of the * BankField declaration */ /* NextOp points to the op that holds the Region */ NextOp = Op->Common.Value.Arg; /* NextOp points to the op that holds the Bank Register */ NextOp = NextOp->Common.Next; /* NextOp points to the op that holds the Bank Value */ NextOp = NextOp->Common.Next; /* * Set proper index into operand stack for AcpiDsObjStackPush * invoked inside AcpiDsCreateOperand. * * We use WalkState->Operands[0] to store the evaluated BankValue */ WalkState->OperandIndex = 0; Status = AcpiDsCreateOperand (WalkState, NextOp, 0); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiExResolveToValue (&WalkState->Operands[0], WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ACPI_DUMP_OPERANDS (ACPI_WALK_OPERANDS, AcpiPsGetOpcodeName (Op->Common.AmlOpcode), 1); /* * Get the BankValue operand and save it * (at Top of stack) */ OperandDesc = WalkState->Operands[0]; /* Arg points to the start Bank Field */ Arg = AcpiPsGetArg (Op, 4); while (Arg) { /* Ignore OFFSET and ACCESSAS terms here */ if (Arg->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP) { Node = Arg->Common.Node; ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { return_ACPI_STATUS (AE_NOT_EXIST); } ObjDesc->BankField.Value = (UINT32) OperandDesc->Integer.Value; } /* Move to next field in the list */ Arg = Arg->Common.Next; } AcpiUtRemoveReference (OperandDesc); return_ACPI_STATUS (Status); } src/acpica/source/components/dispatcher/dspkginit.c000066400000000000000000000631671465205512700230640ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dspkginit - Completion of deferred package initialization * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "amlcode.h" #include "acdispat.h" #include "acinterp.h" #include "acparser.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("dspkginit") /* Local prototypes */ static void AcpiDsResolvePackageElement ( ACPI_OPERAND_OBJECT **Element); /******************************************************************************* * * FUNCTION: AcpiDsBuildInternalPackageObj * * PARAMETERS: WalkState - Current walk state * Op - Parser object to be translated * ElementCount - Number of elements in the package - this is * the NumElements argument to Package() * ObjDescPtr - Where the ACPI internal object is returned * * RETURN: Status * * DESCRIPTION: Translate a parser Op package object to the equivalent * namespace object * * NOTE: The number of elements in the package will be always be the NumElements * count, regardless of the number of elements in the package list. If * NumElements is smaller, only that many package list elements are used. * if NumElements is larger, the Package object is padded out with * objects of type Uninitialized (as per ACPI spec.) * * Even though the ASL compilers do not allow NumElements to be smaller * than the Package list length (for the fixed length package opcode), some * BIOS code modifies the AML on the fly to adjust the NumElements, and * this code compensates for that. This also provides compatibility with * other AML interpreters. * ******************************************************************************/ ACPI_STATUS AcpiDsBuildInternalPackageObj ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, UINT32 ElementCount, ACPI_OPERAND_OBJECT **ObjDescPtr) { ACPI_PARSE_OBJECT *Arg; ACPI_PARSE_OBJECT *Parent; ACPI_OPERAND_OBJECT *ObjDesc = NULL; ACPI_STATUS Status = AE_OK; BOOLEAN ModuleLevelCode = FALSE; UINT16 ReferenceCount; UINT32 Index; UINT32 i; ACPI_FUNCTION_TRACE (DsBuildInternalPackageObj); /* Check if we are executing module level code */ if (WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) { ModuleLevelCode = TRUE; } /* Find the parent of a possibly nested package */ Parent = Op->Common.Parent; while ((Parent->Common.AmlOpcode == AML_PACKAGE_OP) || (Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP)) { Parent = Parent->Common.Parent; } /* * If we are evaluating a Named package object of the form: * Name (xxxx, Package) * the package object already exists, otherwise it must be created. */ ObjDesc = *ObjDescPtr; if (!ObjDesc) { ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_PACKAGE); *ObjDescPtr = ObjDesc; if (!ObjDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } ObjDesc->Package.Node = Parent->Common.Node; } if (ObjDesc->Package.Flags & AOPOBJ_DATA_VALID) /* Just in case */ { return_ACPI_STATUS (AE_OK); } /* * Allocate the element array (array of pointers to the individual * objects) if necessary. the count is based on the NumElements * parameter. Add an extra pointer slot so that the list is always * null terminated. */ if (!ObjDesc->Package.Elements) { ObjDesc->Package.Elements = ACPI_ALLOCATE_ZEROED ( ((ACPI_SIZE) ElementCount + 1) * sizeof (void *)); if (!ObjDesc->Package.Elements) { AcpiUtDeleteObjectDesc (ObjDesc); return_ACPI_STATUS (AE_NO_MEMORY); } ObjDesc->Package.Count = ElementCount; } /* First arg is element count. Second arg begins the initializer list */ Arg = Op->Common.Value.Arg; Arg = Arg->Common.Next; /* * If we are executing module-level code, we will defer the * full resolution of the package elements in order to support * forward references from the elements. This provides * compatibility with other ACPI implementations. */ if (ModuleLevelCode) { ObjDesc->Package.AmlStart = WalkState->Aml; ObjDesc->Package.AmlLength = 0; ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, "%s: Deferring resolution of Package elements\n", ACPI_GET_FUNCTION_NAME)); } /* * Initialize the elements of the package, up to the NumElements count. * Package is automatically padded with uninitialized (NULL) elements * if NumElements is greater than the package list length. Likewise, * Package is truncated if NumElements is less than the list length. */ for (i = 0; Arg && (i < ElementCount); i++) { if (Arg->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP) { if (!Arg->Common.Node) { /* * This is the case where an expression has returned a value. * The use of expressions (TermArgs) within individual * package elements is not supported by the AML interpreter, * even though the ASL grammar supports it. Example: * * Name (INT1, 0x1234) * * Name (PKG3, Package () { * Add (INT1, 0xAAAA0000) * }) * * 1) No known AML interpreter supports this type of construct * 2) This fixes a fault if the construct is encountered */ ACPI_EXCEPTION ((AE_INFO, AE_SUPPORT, "Expressions within package elements are not supported")); /* Cleanup the return object, it is not needed */ AcpiUtRemoveReference (WalkState->Results->Results.ObjDesc[0]); return_ACPI_STATUS (AE_SUPPORT); } if (Arg->Common.Node->Type == ACPI_TYPE_METHOD) { /* * A method reference "looks" to the parser to be a method * invocation, so we special case it here */ Arg->Common.AmlOpcode = AML_INT_NAMEPATH_OP; Status = AcpiDsBuildInternalObject ( WalkState, Arg, &ObjDesc->Package.Elements[i]); } else { /* This package element is already built, just get it */ ObjDesc->Package.Elements[i] = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Arg->Common.Node); } } else { Status = AcpiDsBuildInternalObject ( WalkState, Arg, &ObjDesc->Package.Elements[i]); if (Status == AE_NOT_FOUND) { ACPI_ERROR ((AE_INFO, "%-48s", "****DS namepath not found")); } if (!ModuleLevelCode) { /* * Initialize this package element. This function handles the * resolution of named references within the package. * Forward references from module-level code are deferred * until all ACPI tables are loaded. */ AcpiDsInitPackageElement (0, ObjDesc->Package.Elements[i], NULL, &ObjDesc->Package.Elements[i]); } } if (*ObjDescPtr) { /* Existing package, get existing reference count */ ReferenceCount = (*ObjDescPtr)->Common.ReferenceCount; if (ReferenceCount > 1) { /* Make new element ref count match original ref count */ /* TBD: Probably need an AcpiUtAddReferences function */ for (Index = 0; Index < ((UINT32) ReferenceCount - 1); Index++) { AcpiUtAddReference ((ObjDesc->Package.Elements[i])); } } } Arg = Arg->Common.Next; } /* Check for match between NumElements and actual length of PackageList */ if (Arg) { /* * NumElements was exhausted, but there are remaining elements in * the PackageList. Truncate the package to NumElements. * * Note: technically, this is an error, from ACPI spec: "It is an * error for NumElements to be less than the number of elements in * the PackageList". However, we just print a message and no * exception is returned. This provides compatibility with other * ACPI implementations. Some firmware implementations will alter * the NumElements on the fly, possibly creating this type of * ill-formed package object. */ while (Arg) { /* * We must delete any package elements that were created earlier * and are not going to be used because of the package truncation. */ if (Arg->Common.Node) { AcpiUtRemoveReference ( ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Arg->Common.Node)); Arg->Common.Node = NULL; } /* Find out how many elements there really are */ i++; Arg = Arg->Common.Next; } ACPI_INFO (( "Actual Package length (%u) is larger than " "NumElements field (%u), truncated", i, ElementCount)); } else if (i < ElementCount) { /* * Arg list (elements) was exhausted, but we did not reach * NumElements count. * * Note: this is not an error, the package is padded out * with NULLs as per the ACPI specification. */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "%s: Package List length (%u) smaller than NumElements " "count (%u), padded with null elements\n", ACPI_GET_FUNCTION_NAME, i, ElementCount)); } /* Module-level packages will be resolved later */ if (!ModuleLevelCode) { ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; } Op->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsInitPackageElement * * PARAMETERS: ACPI_PKG_CALLBACK * * RETURN: Status * * DESCRIPTION: Resolve a named reference element within a package object * ******************************************************************************/ ACPI_STATUS AcpiDsInitPackageElement ( UINT8 ObjectType, ACPI_OPERAND_OBJECT *SourceObject, ACPI_GENERIC_STATE *State, void *Context) { ACPI_OPERAND_OBJECT **ElementPtr; ACPI_FUNCTION_TRACE (DsInitPackageElement); if (!SourceObject) { return_ACPI_STATUS (AE_OK); } /* * The following code is a bit of a hack to workaround a (current) * limitation of the ACPI_PKG_CALLBACK interface. We need a pointer * to the location within the element array because a new object * may be created and stored there. */ if (Context) { /* A direct call was made to this function */ ElementPtr = (ACPI_OPERAND_OBJECT **) Context; } else { /* Call came from AcpiUtWalkPackageTree */ ElementPtr = State->Pkg.ThisTargetObj; } /* We are only interested in reference objects/elements */ if (SourceObject->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) { /* Attempt to resolve the (named) reference to a namespace node */ AcpiDsResolvePackageElement (ElementPtr); } else if (SourceObject->Common.Type == ACPI_TYPE_PACKAGE) { SourceObject->Package.Flags |= AOPOBJ_DATA_VALID; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsResolvePackageElement * * PARAMETERS: ElementPtr - Pointer to a reference object * * RETURN: Possible new element is stored to the indirect ElementPtr * * DESCRIPTION: Resolve a package element that is a reference to a named * object. * ******************************************************************************/ static void AcpiDsResolvePackageElement ( ACPI_OPERAND_OBJECT **ElementPtr) { ACPI_STATUS Status; ACPI_STATUS Status2; ACPI_GENERIC_STATE ScopeInfo; ACPI_OPERAND_OBJECT *Element = *ElementPtr; ACPI_NAMESPACE_NODE *ResolvedNode; ACPI_NAMESPACE_NODE *OriginalNode; char *ExternalPath = ""; ACPI_OBJECT_TYPE Type; ACPI_FUNCTION_TRACE (DsResolvePackageElement); /* Check if reference element is already resolved */ if (Element->Reference.Resolved) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, "%s: Package element is already resolved\n", ACPI_GET_FUNCTION_NAME)); return_VOID; } /* Element must be a reference object of correct type */ ScopeInfo.Scope.Node = Element->Reference.Node; /* Prefix node */ Status = AcpiNsLookup (&ScopeInfo, (char *) Element->Reference.Aml, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, NULL, &ResolvedNode); if (ACPI_FAILURE (Status)) { if ((Status == AE_NOT_FOUND) && AcpiGbl_IgnorePackageResolutionErrors) { /* * Optionally be silent about the NOT_FOUND case for the referenced * name. Although this is potentially a serious problem, * it can generate a lot of noise/errors on platforms whose * firmware carries around a bunch of unused Package objects. * To disable these errors, set this global to TRUE: * AcpiGbl_IgnorePackageResolutionErrors * * If the AML actually tries to use such a package, the unresolved * element(s) will be replaced with NULL elements. */ /* Referenced name not found, set the element to NULL */ AcpiUtRemoveReference (*ElementPtr); *ElementPtr = NULL; return_VOID; } Status2 = AcpiNsExternalizeName (ACPI_UINT32_MAX, (char *) Element->Reference.Aml, NULL, &ExternalPath); ACPI_EXCEPTION ((AE_INFO, Status, "While resolving a named reference package element - %s", ExternalPath)); if (ACPI_SUCCESS (Status2)) { ACPI_FREE (ExternalPath); } /* Could not resolve name, set the element to NULL */ AcpiUtRemoveReference (*ElementPtr); *ElementPtr = NULL; return_VOID; } else if (ResolvedNode->Type == ACPI_TYPE_ANY) { /* Named reference not resolved, return a NULL package element */ ACPI_ERROR ((AE_INFO, "Could not resolve named package element [%4.4s] in [%4.4s]", ResolvedNode->Name.Ascii, ScopeInfo.Scope.Node->Name.Ascii)); *ElementPtr = NULL; return_VOID; } /* * Special handling for Alias objects. We need ResolvedNode to point * to the Alias target. This effectively "resolves" the alias. */ if (ResolvedNode->Type == ACPI_TYPE_LOCAL_ALIAS) { ResolvedNode = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ResolvedNode->Object); } /* Update the reference object */ Element->Reference.Resolved = TRUE; Element->Reference.Node = ResolvedNode; Type = Element->Reference.Node->Type; /* * Attempt to resolve the node to a value before we insert it into * the package. If this is a reference to a common data type, * resolve it immediately. According to the ACPI spec, package * elements can only be "data objects" or method references. * Attempt to resolve to an Integer, Buffer, String or Package. * If cannot, return the named reference (for things like Devices, * Methods, etc.) Buffer Fields and Fields will resolve to simple * objects (int/buf/str/pkg). * * NOTE: References to things like Devices, Methods, Mutexes, etc. * will remain as named references. This behavior is not described * in the ACPI spec, but it appears to be an oversight. */ OriginalNode = ResolvedNode; Status = AcpiExResolveNodeToValue (&ResolvedNode, NULL); if (ACPI_FAILURE (Status)) { return_VOID; } switch (Type) { /* * These object types are a result of named references, so we will * leave them as reference objects. In other words, these types * have no intrinsic "value". */ case ACPI_TYPE_DEVICE: case ACPI_TYPE_THERMAL: case ACPI_TYPE_METHOD: break; case ACPI_TYPE_MUTEX: case ACPI_TYPE_POWER: case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_EVENT: case ACPI_TYPE_REGION: /* AcpiExResolveNodeToValue gave these an extra reference */ AcpiUtRemoveReference (OriginalNode->Object); break; default: /* * For all other types - the node was resolved to an actual * operand object with a value, return the object. Remove * a reference on the existing object. */ AcpiUtRemoveReference (Element); *ElementPtr = (ACPI_OPERAND_OBJECT *) ResolvedNode; break; } return_VOID; } src/acpica/source/components/dispatcher/dsutils.c000066400000000000000000001041121465205512700225410ustar00rootroot00000000000000/******************************************************************************* * * Module Name: dsutils - Dispatcher utilities * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acdispat.h" #include "acinterp.h" #include "acnamesp.h" #include "acdebug.h" #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dsutils") /******************************************************************************* * * FUNCTION: AcpiDsClearImplicitReturn * * PARAMETERS: WalkState - Current State * * RETURN: None. * * DESCRIPTION: Clear and remove a reference on an implicit return value. Used * to delete "stale" return values (if enabled, the return value * from every operator is saved at least momentarily, in case the * parent method exits.) * ******************************************************************************/ void AcpiDsClearImplicitReturn ( ACPI_WALK_STATE *WalkState) { ACPI_FUNCTION_NAME (DsClearImplicitReturn); /* * Slack must be enabled for this feature */ if (!AcpiGbl_EnableInterpreterSlack) { return; } if (WalkState->ImplicitReturnObj) { /* * Delete any "stale" implicit return. However, in * complex statements, the implicit return value can be * bubbled up several levels. */ ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Removing reference on stale implicit return obj %p\n", WalkState->ImplicitReturnObj)); AcpiUtRemoveReference (WalkState->ImplicitReturnObj); WalkState->ImplicitReturnObj = NULL; } } /******************************************************************************* * * FUNCTION: AcpiDsDoImplicitReturn * * PARAMETERS: ReturnDesc - The return value * WalkState - Current State * AddReference - True if a reference should be added to the * return object * * RETURN: TRUE if implicit return enabled, FALSE otherwise * * DESCRIPTION: Implements the optional "implicit return". We save the result * of every ASL operator and control method invocation in case the * parent method exit. Before storing a new return value, we * delete the previous return value. * ******************************************************************************/ BOOLEAN AcpiDsDoImplicitReturn ( ACPI_OPERAND_OBJECT *ReturnDesc, ACPI_WALK_STATE *WalkState, BOOLEAN AddReference) { ACPI_FUNCTION_NAME (DsDoImplicitReturn); /* * Slack must be enabled for this feature, and we must * have a valid return object */ if ((!AcpiGbl_EnableInterpreterSlack) || (!ReturnDesc)) { return (FALSE); } ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Result %p will be implicitly returned; Prev=%p\n", ReturnDesc, WalkState->ImplicitReturnObj)); /* * Delete any "stale" implicit return value first. However, in * complex statements, the implicit return value can be * bubbled up several levels, so we don't clear the value if it * is the same as the ReturnDesc. */ if (WalkState->ImplicitReturnObj) { if (WalkState->ImplicitReturnObj == ReturnDesc) { return (TRUE); } AcpiDsClearImplicitReturn (WalkState); } /* Save the implicit return value, add a reference if requested */ WalkState->ImplicitReturnObj = ReturnDesc; if (AddReference) { AcpiUtAddReference (ReturnDesc); } return (TRUE); } /******************************************************************************* * * FUNCTION: AcpiDsIsResultUsed * * PARAMETERS: Op - Current Op * WalkState - Current State * * RETURN: TRUE if result is used, FALSE otherwise * * DESCRIPTION: Check if a result object will be used by the parent * ******************************************************************************/ BOOLEAN AcpiDsIsResultUsed ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState) { const ACPI_OPCODE_INFO *ParentInfo; ACPI_FUNCTION_TRACE_PTR (DsIsResultUsed, Op); /* Must have both an Op and a Result Object */ if (!Op) { ACPI_ERROR ((AE_INFO, "Null Op")); return_UINT8 (TRUE); } /* * We know that this operator is not a * Return() operator (would not come here.) The following code is the * optional support for a so-called "implicit return". Some AML code * assumes that the last value of the method is "implicitly" returned * to the caller. Just save the last result as the return value. * NOTE: this is optional because the ASL language does not actually * support this behavior. */ (void) AcpiDsDoImplicitReturn (WalkState->ResultObj, WalkState, TRUE); /* * Now determine if the parent will use the result * * If there is no parent, or the parent is a ScopeOp, we are executing * at the method level. An executing method typically has no parent, * since each method is parsed separately. A method invoked externally * via ExecuteControlMethod has a ScopeOp as the parent. */ if ((!Op->Common.Parent) || (Op->Common.Parent->Common.AmlOpcode == AML_SCOPE_OP)) { /* No parent, the return value cannot possibly be used */ ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "At Method level, result of [%s] not used\n", AcpiPsGetOpcodeName (Op->Common.AmlOpcode))); return_UINT8 (FALSE); } /* Get info on the parent. The RootOp is AML_SCOPE */ ParentInfo = AcpiPsGetOpcodeInfo (Op->Common.Parent->Common.AmlOpcode); if (ParentInfo->Class == AML_CLASS_UNKNOWN) { ACPI_ERROR ((AE_INFO, "Unknown parent opcode Op=%p", Op)); return_UINT8 (FALSE); } /* * Decide what to do with the result based on the parent. If * the parent opcode will not use the result, delete the object. * Otherwise leave it as is, it will be deleted when it is used * as an operand later. */ switch (ParentInfo->Class) { case AML_CLASS_CONTROL: switch (Op->Common.Parent->Common.AmlOpcode) { case AML_RETURN_OP: /* Never delete the return value associated with a return opcode */ goto ResultUsed; case AML_IF_OP: case AML_WHILE_OP: /* * If we are executing the predicate AND this is the predicate op, * we will use the return value */ if ((WalkState->ControlState->Common.State == ACPI_CONTROL_PREDICATE_EXECUTING) && (WalkState->ControlState->Control.PredicateOp == Op)) { goto ResultUsed; } break; default: /* Ignore other control opcodes */ break; } /* The general control opcode returns no result */ goto ResultNotUsed; case AML_CLASS_CREATE: /* * These opcodes allow TermArg(s) as operands and therefore * the operands can be method calls. The result is used. */ goto ResultUsed; case AML_CLASS_NAMED_OBJECT: if ((Op->Common.Parent->Common.AmlOpcode == AML_REGION_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_DATA_REGION_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_BUFFER_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_INT_EVAL_SUBTREE_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_BANK_FIELD_OP)) { /* * These opcodes allow TermArg(s) as operands and therefore * the operands can be method calls. The result is used. */ goto ResultUsed; } goto ResultNotUsed; default: /* * In all other cases. the parent will actually use the return * object, so keep it. */ goto ResultUsed; } ResultUsed: ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Result of [%s] used by Parent [%s] Op=%p\n", AcpiPsGetOpcodeName (Op->Common.AmlOpcode), AcpiPsGetOpcodeName (Op->Common.Parent->Common.AmlOpcode), Op)); return_UINT8 (TRUE); ResultNotUsed: ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Result of [%s] not used by Parent [%s] Op=%p\n", AcpiPsGetOpcodeName (Op->Common.AmlOpcode), AcpiPsGetOpcodeName (Op->Common.Parent->Common.AmlOpcode), Op)); return_UINT8 (FALSE); } /******************************************************************************* * * FUNCTION: AcpiDsDeleteResultIfNotUsed * * PARAMETERS: Op - Current parse Op * ResultObj - Result of the operation * WalkState - Current state * * RETURN: Status * * DESCRIPTION: Used after interpretation of an opcode. If there is an internal * result descriptor, check if the parent opcode will actually use * this result. If not, delete the result now so that it will * not become orphaned. * ******************************************************************************/ void AcpiDsDeleteResultIfNotUsed ( ACPI_PARSE_OBJECT *Op, ACPI_OPERAND_OBJECT *ResultObj, ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; ACPI_FUNCTION_TRACE_PTR (DsDeleteResultIfNotUsed, ResultObj); if (!Op) { ACPI_ERROR ((AE_INFO, "Null Op")); return_VOID; } if (!ResultObj) { return_VOID; } if (!AcpiDsIsResultUsed (Op, WalkState)) { /* Must pop the result stack (ObjDesc should be equal to ResultObj) */ Status = AcpiDsResultPop (&ObjDesc, WalkState); if (ACPI_SUCCESS (Status)) { AcpiUtRemoveReference (ResultObj); } } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiDsResolveOperands * * PARAMETERS: WalkState - Current walk state with operands on stack * * RETURN: Status * * DESCRIPTION: Resolve all operands to their values. Used to prepare * arguments to a control method invocation (a call from one * method to another.) * ******************************************************************************/ ACPI_STATUS AcpiDsResolveOperands ( ACPI_WALK_STATE *WalkState) { UINT32 i; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE_PTR (DsResolveOperands, WalkState); /* * Attempt to resolve each of the valid operands * Method arguments are passed by reference, not by value. This means * that the actual objects are passed, not copies of the objects. */ for (i = 0; i < WalkState->NumOperands; i++) { Status = AcpiExResolveToValue (&WalkState->Operands[i], WalkState); if (ACPI_FAILURE (Status)) { break; } } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsClearOperands * * PARAMETERS: WalkState - Current walk state with operands on stack * * RETURN: None * * DESCRIPTION: Clear all operands on the current walk state operand stack. * ******************************************************************************/ void AcpiDsClearOperands ( ACPI_WALK_STATE *WalkState) { UINT32 i; ACPI_FUNCTION_TRACE_PTR (DsClearOperands, WalkState); /* Remove a reference on each operand on the stack */ for (i = 0; i < WalkState->NumOperands; i++) { /* * Remove a reference to all operands, including both * "Arguments" and "Targets". */ AcpiUtRemoveReference (WalkState->Operands[i]); WalkState->Operands[i] = NULL; } WalkState->NumOperands = 0; return_VOID; } /******************************************************************************* * * FUNCTION: AcpiDsCreateOperand * * PARAMETERS: WalkState - Current walk state * Arg - Parse object for the argument * ArgIndex - Which argument (zero based) * * RETURN: Status * * DESCRIPTION: Translate a parse tree object that is an argument to an AML * opcode to the equivalent interpreter object. This may include * looking up a name or entering a new name into the internal * namespace. * ******************************************************************************/ ACPI_STATUS AcpiDsCreateOperand ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Arg, UINT32 ArgIndex) { ACPI_STATUS Status = AE_OK; char *NameString; UINT32 NameLength; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_PARSE_OBJECT *ParentOp; UINT16 Opcode; ACPI_INTERPRETER_MODE InterpreterMode; const ACPI_OPCODE_INFO *OpInfo; ACPI_FUNCTION_TRACE_PTR (DsCreateOperand, Arg); /* A valid name must be looked up in the namespace */ if ((Arg->Common.AmlOpcode == AML_INT_NAMEPATH_OP) && (Arg->Common.Value.String) && !(Arg->Common.Flags & ACPI_PARSEOP_IN_STACK)) { ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Getting a name: Arg=%p\n", Arg)); /* Get the entire name string from the AML stream */ Status = AcpiExGetNameString (ACPI_TYPE_ANY, Arg->Common.Value.Buffer, &NameString, &NameLength); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* All prefixes have been handled, and the name is in NameString */ /* * Special handling for BufferField declarations. This is a deferred * opcode that unfortunately defines the field name as the last * parameter instead of the first. We get here when we are performing * the deferred execution, so the actual name of the field is already * in the namespace. We don't want to attempt to look it up again * because we may be executing in a different scope than where the * actual opcode exists. */ if ((WalkState->DeferredNode) && (WalkState->DeferredNode->Type == ACPI_TYPE_BUFFER_FIELD) && (ArgIndex == (UINT32) ((WalkState->Opcode == AML_CREATE_FIELD_OP) ? 3 : 2))) { ObjDesc = ACPI_CAST_PTR ( ACPI_OPERAND_OBJECT, WalkState->DeferredNode); Status = AE_OK; } else /* All other opcodes */ { /* * Differentiate between a namespace "create" operation * versus a "lookup" operation (IMODE_LOAD_PASS2 vs. * IMODE_EXECUTE) in order to support the creation of * namespace objects during the execution of control methods. */ ParentOp = Arg->Common.Parent; OpInfo = AcpiPsGetOpcodeInfo (ParentOp->Common.AmlOpcode); if ((OpInfo->Flags & AML_NSNODE) && (ParentOp->Common.AmlOpcode != AML_INT_METHODCALL_OP) && (ParentOp->Common.AmlOpcode != AML_REGION_OP) && (ParentOp->Common.AmlOpcode != AML_INT_NAMEPATH_OP)) { /* Enter name into namespace if not found */ InterpreterMode = ACPI_IMODE_LOAD_PASS2; } else { /* Return a failure if name not found */ InterpreterMode = ACPI_IMODE_EXECUTE; } Status = AcpiNsLookup (WalkState->ScopeInfo, NameString, ACPI_TYPE_ANY, InterpreterMode, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, WalkState, ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE, &ObjDesc)); /* * The only case where we pass through (ignore) a NOT_FOUND * error is for the CondRefOf opcode. */ if (Status == AE_NOT_FOUND) { if (ParentOp->Common.AmlOpcode == AML_CONDITIONAL_REF_OF_OP) { /* * For the Conditional Reference op, it's OK if * the name is not found; We just need a way to * indicate this to the interpreter, set the * object to the root */ ObjDesc = ACPI_CAST_PTR ( ACPI_OPERAND_OBJECT, AcpiGbl_RootNode); Status = AE_OK; } else if (ParentOp->Common.AmlOpcode == AML_EXTERNAL_OP) { /* * This opcode should never appear here. It is used only * by AML disassemblers and is surrounded by an If(0) * by the ASL compiler. * * Therefore, if we see it here, it is a serious error. */ Status = AE_AML_BAD_OPCODE; } else { /* * We just plain didn't find it -- which is a * very serious error at this point */ Status = AE_AML_NAME_NOT_FOUND; } } if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, NameString, Status); } } /* Free the namestring created above */ ACPI_FREE (NameString); /* Check status from the lookup */ if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Put the resulting object onto the current object stack */ Status = AcpiDsObjStackPush (ObjDesc, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } AcpiDbDisplayArgumentObject (ObjDesc, WalkState); } else { /* Check for null name case */ if ((Arg->Common.AmlOpcode == AML_INT_NAMEPATH_OP) && !(Arg->Common.Flags & ACPI_PARSEOP_IN_STACK)) { /* * If the name is null, this means that this is an * optional result parameter that was not specified * in the original ASL. Create a Zero Constant for a * placeholder. (Store to a constant is a Noop.) */ Opcode = AML_ZERO_OP; /* Has no arguments! */ ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Null namepath: Arg=%p\n", Arg)); } else { Opcode = Arg->Common.AmlOpcode; } /* Get the object type of the argument */ OpInfo = AcpiPsGetOpcodeInfo (Opcode); if (OpInfo->ObjectType == ACPI_TYPE_INVALID) { return_ACPI_STATUS (AE_NOT_IMPLEMENTED); } if ((OpInfo->Flags & AML_HAS_RETVAL) || (Arg->Common.Flags & ACPI_PARSEOP_IN_STACK)) { /* * Use value that was already previously returned * by the evaluation of this argument */ Status = AcpiDsResultPop (&ObjDesc, WalkState); if (ACPI_FAILURE (Status)) { /* * Only error is underflow, and this indicates * a missing or null operand! */ ACPI_EXCEPTION ((AE_INFO, Status, "Missing or null operand")); return_ACPI_STATUS (Status); } } else { /* Create an ACPI_INTERNAL_OBJECT for the argument */ ObjDesc = AcpiUtCreateInternalObject (OpInfo->ObjectType); if (!ObjDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Initialize the new object */ Status = AcpiDsInitObjectFromOp ( WalkState, Arg, Opcode, &ObjDesc); if (ACPI_FAILURE (Status)) { AcpiUtDeleteObjectDesc (ObjDesc); return_ACPI_STATUS (Status); } } /* Put the operand object on the object stack */ Status = AcpiDsObjStackPush (ObjDesc, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } AcpiDbDisplayArgumentObject (ObjDesc, WalkState); } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsCreateOperands * * PARAMETERS: WalkState - Current state * FirstArg - First argument of a parser argument tree * * RETURN: Status * * DESCRIPTION: Convert an operator's arguments from a parse tree format to * namespace objects and place those argument object on the object * stack in preparation for evaluation by the interpreter. * ******************************************************************************/ ACPI_STATUS AcpiDsCreateOperands ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *FirstArg) { ACPI_STATUS Status = AE_OK; ACPI_PARSE_OBJECT *Arg; ACPI_PARSE_OBJECT *Arguments[ACPI_OBJ_NUM_OPERANDS]; UINT32 ArgCount = 0; UINT32 Index = WalkState->NumOperands; UINT32 i; ACPI_FUNCTION_TRACE_PTR (DsCreateOperands, FirstArg); /* Get all arguments in the list */ Arg = FirstArg; while (Arg) { if (Index >= ACPI_OBJ_NUM_OPERANDS) { return_ACPI_STATUS (AE_BAD_DATA); } Arguments[Index] = Arg; WalkState->Operands [Index] = NULL; /* Move on to next argument, if any */ Arg = Arg->Common.Next; ArgCount++; Index++; } ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "NumOperands %d, ArgCount %d, Index %d\n", WalkState->NumOperands, ArgCount, Index)); /* Create the interpreter arguments, in reverse order */ Index--; for (i = 0; i < ArgCount; i++) { Arg = Arguments[Index]; WalkState->OperandIndex = (UINT8) Index; Status = AcpiDsCreateOperand (WalkState, Arg, Index); if (ACPI_FAILURE (Status)) { goto Cleanup; } ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Created Arg #%u (%p) %u args total\n", Index, Arg, ArgCount)); Index--; } return_ACPI_STATUS (Status); Cleanup: /* * We must undo everything done above; meaning that we must * pop everything off of the operand stack and delete those * objects */ AcpiDsObjStackPopAndDelete (ArgCount, WalkState); ACPI_EXCEPTION ((AE_INFO, Status, "While creating Arg %u", Index)); return_ACPI_STATUS (Status); } /***************************************************************************** * * FUNCTION: AcpiDsEvaluateNamePath * * PARAMETERS: WalkState - Current state of the parse tree walk, * the opcode of current operation should be * AML_INT_NAMEPATH_OP * * RETURN: Status * * DESCRIPTION: Translate the -NamePath- parse tree object to the equivalent * interpreter object, convert it to value, if needed, duplicate * it, if needed, and push it onto the current result stack. * ****************************************************************************/ ACPI_STATUS AcpiDsEvaluateNamePath ( ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_PARSE_OBJECT *Op = WalkState->Op; ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_OPERAND_OBJECT *NewObjDesc; UINT8 Type; ACPI_FUNCTION_TRACE_PTR (DsEvaluateNamePath, WalkState); if (!Op->Common.Parent) { /* This happens after certain exception processing */ goto Exit; } if ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_REF_OF_OP)) { /* TBD: Should we specify this feature as a bit of OpInfo->Flags of these opcodes? */ goto Exit; } Status = AcpiDsCreateOperand (WalkState, Op, 0); if (ACPI_FAILURE (Status)) { goto Exit; } if (Op->Common.Flags & ACPI_PARSEOP_TARGET) { NewObjDesc = *Operand; goto PushResult; } Type = (*Operand)->Common.Type; Status = AcpiExResolveToValue (Operand, WalkState); if (ACPI_FAILURE (Status)) { goto Exit; } if (Type == ACPI_TYPE_INTEGER) { /* It was incremented by AcpiExResolveToValue */ AcpiUtRemoveReference (*Operand); Status = AcpiUtCopyIobjectToIobject ( *Operand, &NewObjDesc, WalkState); if (ACPI_FAILURE (Status)) { goto Exit; } } else { /* * The object either was anew created or is * a Namespace node - don't decrement it. */ NewObjDesc = *Operand; } /* Cleanup for name-path operand */ Status = AcpiDsObjStackPop (1, WalkState); if (ACPI_FAILURE (Status)) { WalkState->ResultObj = NewObjDesc; goto Exit; } PushResult: WalkState->ResultObj = NewObjDesc; Status = AcpiDsResultPush (WalkState->ResultObj, WalkState); if (ACPI_SUCCESS (Status)) { /* Force to take it from stack */ Op->Common.Flags |= ACPI_PARSEOP_IN_STACK; } Exit: return_ACPI_STATUS (Status); } src/acpica/source/components/dispatcher/dswexec.c000066400000000000000000000735651465205512700225350ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dswexec - Dispatcher method execution callbacks; * dispatch to interpreter. * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acdispat.h" #include "acinterp.h" #include "acnamesp.h" #include "acdebug.h" #ifdef ACPI_EXEC_APP #include "aecommon.h" #endif #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dswexec") /* * Dispatch table for opcode classes */ static ACPI_EXECUTE_OP AcpiGbl_OpTypeDispatch [] = { AcpiExOpcode_0A_0T_1R, AcpiExOpcode_1A_0T_0R, AcpiExOpcode_1A_0T_1R, NULL, /* Was: AcpiExOpcode_1A_0T_0R (Was for Load operator) */ AcpiExOpcode_1A_1T_1R, AcpiExOpcode_2A_0T_0R, AcpiExOpcode_2A_0T_1R, AcpiExOpcode_2A_1T_1R, AcpiExOpcode_2A_2T_1R, AcpiExOpcode_3A_0T_0R, AcpiExOpcode_3A_1T_1R, AcpiExOpcode_6A_0T_1R }; /***************************************************************************** * * FUNCTION: AcpiDsGetPredicateValue * * PARAMETERS: WalkState - Current state of the parse tree walk * ResultObj - if non-zero, pop result from result stack * * RETURN: Status * * DESCRIPTION: Get the result of a predicate evaluation * ****************************************************************************/ ACPI_STATUS AcpiDsGetPredicateValue ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT *ResultObj) { ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *LocalObjDesc = NULL; ACPI_FUNCTION_TRACE_PTR (DsGetPredicateValue, WalkState); WalkState->ControlState->Common.State = 0; if (ResultObj) { Status = AcpiDsResultPop (&ObjDesc, WalkState); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not get result from predicate evaluation")); return_ACPI_STATUS (Status); } } else { Status = AcpiDsCreateOperand (WalkState, WalkState->Op, 0); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiExResolveToValue (&WalkState->Operands [0], WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ObjDesc = WalkState->Operands [0]; } if (!ObjDesc) { ACPI_ERROR ((AE_INFO, "No predicate ObjDesc=%p State=%p", ObjDesc, WalkState)); return_ACPI_STATUS (AE_AML_NO_OPERAND); } /* * Result of predicate evaluation must be an Integer * object. Implicitly convert the argument if necessary. */ Status = AcpiExConvertToInteger (ObjDesc, &LocalObjDesc, ACPI_IMPLICIT_CONVERSION); if (ACPI_FAILURE (Status)) { goto Cleanup; } if (LocalObjDesc->Common.Type != ACPI_TYPE_INTEGER) { ACPI_ERROR ((AE_INFO, "Bad predicate (not an integer) ObjDesc=%p State=%p Type=0x%X", ObjDesc, WalkState, ObjDesc->Common.Type)); Status = AE_AML_OPERAND_TYPE; goto Cleanup; } /* Truncate the predicate to 32-bits if necessary */ (void) AcpiExTruncateFor32bitTable (LocalObjDesc); /* * Save the result of the predicate evaluation on * the control stack */ if (LocalObjDesc->Integer.Value) { WalkState->ControlState->Common.Value = TRUE; } else { /* * Predicate is FALSE, we will just toss the * rest of the package */ WalkState->ControlState->Common.Value = FALSE; Status = AE_CTRL_FALSE; } /* Predicate can be used for an implicit return value */ (void) AcpiDsDoImplicitReturn (LocalObjDesc, WalkState, TRUE); Cleanup: ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Completed a predicate eval=%X Op=%p\n", WalkState->ControlState->Common.Value, WalkState->Op)); /* Break to debugger to display result */ AcpiDbDisplayResultObject (LocalObjDesc, WalkState); /* * Delete the predicate result object (we know that * we don't need it anymore) */ if (LocalObjDesc != ObjDesc) { AcpiUtRemoveReference (LocalObjDesc); } AcpiUtRemoveReference (ObjDesc); WalkState->ControlState->Common.State = ACPI_CONTROL_NORMAL; return_ACPI_STATUS (Status); } /***************************************************************************** * * FUNCTION: AcpiDsExecBeginOp * * PARAMETERS: WalkState - Current state of the parse tree walk * OutOp - Where to return op if a new one is created * * RETURN: Status * * DESCRIPTION: Descending callback used during the execution of control * methods. This is where most operators and operands are * dispatched to the interpreter. * ****************************************************************************/ ACPI_STATUS AcpiDsExecBeginOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT **OutOp) { ACPI_PARSE_OBJECT *Op; ACPI_STATUS Status = AE_OK; UINT32 OpcodeClass; ACPI_FUNCTION_TRACE_PTR (DsExecBeginOp, WalkState); Op = WalkState->Op; if (!Op) { Status = AcpiDsLoad2BeginOp (WalkState, OutOp); if (ACPI_FAILURE (Status)) { goto ErrorExit; } Op = *OutOp; WalkState->Op = Op; WalkState->Opcode = Op->Common.AmlOpcode; WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); if (AcpiNsOpensScope (WalkState->OpInfo->ObjectType)) { ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s) Popping scope for Op %p\n", AcpiUtGetTypeName (WalkState->OpInfo->ObjectType), Op)); Status = AcpiDsScopeStackPop (WalkState); if (ACPI_FAILURE (Status)) { goto ErrorExit; } } } if (Op == WalkState->Origin) { if (OutOp) { *OutOp = Op; } return_ACPI_STATUS (AE_OK); } /* * If the previous opcode was a conditional, this opcode * must be the beginning of the associated predicate. * Save this knowledge in the current scope descriptor */ if ((WalkState->ControlState) && (WalkState->ControlState->Common.State == ACPI_CONTROL_CONDITIONAL_EXECUTING)) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Exec predicate Op=%p State=%p\n", Op, WalkState)); WalkState->ControlState->Common.State = ACPI_CONTROL_PREDICATE_EXECUTING; /* Save start of predicate */ WalkState->ControlState->Control.PredicateOp = Op; } OpcodeClass = WalkState->OpInfo->Class; /* We want to send namepaths to the load code */ if (Op->Common.AmlOpcode == AML_INT_NAMEPATH_OP) { OpcodeClass = AML_CLASS_NAMED_OBJECT; } /* * Handle the opcode based upon the opcode type */ switch (OpcodeClass) { case AML_CLASS_CONTROL: Status = AcpiDsExecBeginControlOp (WalkState, Op); break; case AML_CLASS_NAMED_OBJECT: if (WalkState->WalkType & ACPI_WALK_METHOD) { /* * Found a named object declaration during method execution; * we must enter this object into the namespace. The created * object is temporary and will be deleted upon completion of * the execution of this method. * * Note 10/2010: Except for the Scope() op. This opcode does * not actually create a new object, it refers to an existing * object. However, for Scope(), we want to indeed open a * new scope. */ if (Op->Common.AmlOpcode != AML_SCOPE_OP) { Status = AcpiDsLoad2BeginOp (WalkState, NULL); } else { Status = AcpiDsScopeStackPush ( Op->Named.Node, Op->Named.Node->Type, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } } break; case AML_CLASS_EXECUTE: case AML_CLASS_CREATE: break; default: break; } /* Nothing to do here during method execution */ return_ACPI_STATUS (Status); ErrorExit: Status = AcpiDsMethodError (Status, WalkState); return_ACPI_STATUS (Status); } /***************************************************************************** * * FUNCTION: AcpiDsExecEndOp * * PARAMETERS: WalkState - Current state of the parse tree walk * * RETURN: Status * * DESCRIPTION: Ascending callback used during the execution of control * methods. The only thing we really need to do here is to * notice the beginning of IF, ELSE, and WHILE blocks. * ****************************************************************************/ ACPI_STATUS AcpiDsExecEndOp ( ACPI_WALK_STATE *WalkState) { ACPI_PARSE_OBJECT *Op; ACPI_STATUS Status = AE_OK; UINT32 OpType; UINT32 OpClass; ACPI_PARSE_OBJECT *NextOp; ACPI_PARSE_OBJECT *FirstArg; #ifdef ACPI_EXEC_APP char *Namepath; ACPI_OPERAND_OBJECT *ObjDesc; #endif ACPI_FUNCTION_TRACE_PTR (DsExecEndOp, WalkState); Op = WalkState->Op; OpType = WalkState->OpInfo->Type; OpClass = WalkState->OpInfo->Class; if (OpClass == AML_CLASS_UNKNOWN) { ACPI_ERROR ((AE_INFO, "Unknown opcode 0x%X", Op->Common.AmlOpcode)); return_ACPI_STATUS (AE_NOT_IMPLEMENTED); } FirstArg = Op->Common.Value.Arg; /* Init the walk state */ WalkState->NumOperands = 0; WalkState->OperandIndex = 0; WalkState->ReturnDesc = NULL; WalkState->ResultObj = NULL; /* Call debugger for single step support (DEBUG build only) */ Status = AcpiDbSingleStep (WalkState, Op, OpClass); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Decode the Opcode Class */ switch (OpClass) { case AML_CLASS_ARGUMENT: /* Constants, literals, etc. */ if (WalkState->Opcode == AML_INT_NAMEPATH_OP) { Status = AcpiDsEvaluateNamePath (WalkState); if (ACPI_FAILURE (Status)) { goto Cleanup; } } break; case AML_CLASS_EXECUTE: /* Most operators with arguments */ /* Build resolved operand stack */ Status = AcpiDsCreateOperands (WalkState, FirstArg); if (ACPI_FAILURE (Status)) { goto Cleanup; } /* * All opcodes require operand resolution, with the only exceptions * being the ObjectType and SizeOf operators as well as opcodes that * take no arguments. */ if (!(WalkState->OpInfo->Flags & AML_NO_OPERAND_RESOLVE) && (WalkState->OpInfo->Flags & AML_HAS_ARGS)) { /* Resolve all operands */ Status = AcpiExResolveOperands (WalkState->Opcode, &(WalkState->Operands [WalkState->NumOperands -1]), WalkState); } if (ACPI_SUCCESS (Status)) { /* * Dispatch the request to the appropriate interpreter handler * routine. There is one routine per opcode "type" based upon the * number of opcode arguments and return type. */ Status = AcpiGbl_OpTypeDispatch[OpType] (WalkState); } else { /* * Treat constructs of the form "Store(LocalX,LocalX)" as noops when the * Local is uninitialized. */ if ((Status == AE_AML_UNINITIALIZED_LOCAL) && (WalkState->Opcode == AML_STORE_OP) && (WalkState->Operands[0]->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) && (WalkState->Operands[1]->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) && (WalkState->Operands[0]->Reference.Class == WalkState->Operands[1]->Reference.Class) && (WalkState->Operands[0]->Reference.Value == WalkState->Operands[1]->Reference.Value)) { Status = AE_OK; } else { ACPI_EXCEPTION ((AE_INFO, Status, "While resolving operands for [%s]", AcpiPsGetOpcodeName (WalkState->Opcode))); } } /* Always delete the argument objects and clear the operand stack */ AcpiDsClearOperands (WalkState); /* * If a result object was returned from above, push it on the * current result stack */ if (ACPI_SUCCESS (Status) && WalkState->ResultObj) { Status = AcpiDsResultPush (WalkState->ResultObj, WalkState); } break; default: switch (OpType) { case AML_TYPE_CONTROL: /* Type 1 opcode, IF/ELSE/WHILE/NOOP */ /* 1 Operand, 0 ExternalResult, 0 InternalResult */ Status = AcpiDsExecEndControlOp (WalkState, Op); break; case AML_TYPE_METHOD_CALL: /* * If the method is referenced from within a package * declaration, it is not a invocation of the method, just * a reference to it. */ if ((Op->Asl.Parent) && ((Op->Asl.Parent->Asl.AmlOpcode == AML_PACKAGE_OP) || (Op->Asl.Parent->Asl.AmlOpcode == AML_VARIABLE_PACKAGE_OP))) { ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Method Reference in a Package, Op=%p\n", Op)); Op->Common.Node = (ACPI_NAMESPACE_NODE *) Op->Asl.Value.Arg->Asl.Node; AcpiUtAddReference (Op->Asl.Value.Arg->Asl.Node->Object); return_ACPI_STATUS (AE_OK); } ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Method invocation, Op=%p\n", Op)); /* * (AML_METHODCALL) Op->Asl.Value.Arg->Asl.Node contains * the method Node pointer */ /* NextOp points to the op that holds the method name */ NextOp = FirstArg; /* NextOp points to first argument op */ NextOp = NextOp->Common.Next; /* * Get the method's arguments and put them on the operand stack */ Status = AcpiDsCreateOperands (WalkState, NextOp); if (ACPI_FAILURE (Status)) { break; } /* * Since the operands will be passed to another control method, * we must resolve all local references here (Local variables, * arguments to *this* method, etc.) */ Status = AcpiDsResolveOperands (WalkState); if (ACPI_FAILURE (Status)) { /* On error, clear all resolved operands */ AcpiDsClearOperands (WalkState); break; } /* * Tell the walk loop to preempt this running method and * execute the new method */ Status = AE_CTRL_TRANSFER; /* * Return now; we don't want to disturb anything, * especially the operand count! */ return_ACPI_STATUS (Status); case AML_TYPE_CREATE_FIELD: ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Executing CreateField Buffer/Index Op=%p\n", Op)); Status = AcpiDsLoad2EndOp (WalkState); if (ACPI_FAILURE (Status)) { break; } Status = AcpiDsEvalBufferFieldOperands (WalkState, Op); if (ACPI_FAILURE (Status)) { break; } #ifdef ACPI_EXEC_APP /* * AcpiExec support for namespace initialization file (initialize * BufferFields in this code.) */ Namepath = AcpiNsGetExternalPathname (Op->Common.Node); Status = AeLookupInitFileEntry (Namepath, &ObjDesc); if (ACPI_SUCCESS (Status)) { Status = AcpiExWriteDataToField (ObjDesc, Op->Common.Node->Object, NULL); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "While writing to buffer field")); } } ACPI_FREE (Namepath); Status = AE_OK; #endif break; case AML_TYPE_CREATE_OBJECT: ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Executing CreateObject (Buffer/Package) Op=%p Child=%p ParentOpcode=%4.4X\n", Op, Op->Named.Value.Arg, Op->Common.Parent->Common.AmlOpcode)); switch (Op->Common.Parent->Common.AmlOpcode) { case AML_NAME_OP: /* * Put the Node on the object stack (Contains the ACPI Name * of this object) */ WalkState->Operands[0] = (void *) Op->Common.Parent->Common.Node; WalkState->NumOperands = 1; Status = AcpiDsCreateNode (WalkState, Op->Common.Parent->Common.Node, Op->Common.Parent); if (ACPI_FAILURE (Status)) { break; } ACPI_FALLTHROUGH; case AML_INT_EVAL_SUBTREE_OP: Status = AcpiDsEvalDataObjectOperands (WalkState, Op, AcpiNsGetAttachedObject (Op->Common.Parent->Common.Node)); break; default: Status = AcpiDsEvalDataObjectOperands (WalkState, Op, NULL); break; } /* * If a result object was returned from above, push it on the * current result stack */ if (WalkState->ResultObj) { Status = AcpiDsResultPush (WalkState->ResultObj, WalkState); } break; case AML_TYPE_NAMED_FIELD: case AML_TYPE_NAMED_COMPLEX: case AML_TYPE_NAMED_SIMPLE: case AML_TYPE_NAMED_NO_OBJ: Status = AcpiDsLoad2EndOp (WalkState); if (ACPI_FAILURE (Status)) { break; } if (Op->Common.AmlOpcode == AML_REGION_OP) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Executing OpRegion Address/Length Op=%p\n", Op)); Status = AcpiDsEvalRegionOperands (WalkState, Op); if (ACPI_FAILURE (Status)) { break; } } else if (Op->Common.AmlOpcode == AML_DATA_REGION_OP) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Executing DataTableRegion Strings Op=%p\n", Op)); Status = AcpiDsEvalTableRegionOperands (WalkState, Op); if (ACPI_FAILURE (Status)) { break; } } else if (Op->Common.AmlOpcode == AML_BANK_FIELD_OP) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Executing BankField Op=%p\n", Op)); Status = AcpiDsEvalBankFieldOperands (WalkState, Op); if (ACPI_FAILURE (Status)) { break; } } break; case AML_TYPE_UNDEFINED: ACPI_ERROR ((AE_INFO, "Undefined opcode type Op=%p", Op)); return_ACPI_STATUS (AE_NOT_IMPLEMENTED); case AML_TYPE_BOGUS: ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Internal opcode=%X type Op=%p\n", WalkState->Opcode, Op)); break; default: ACPI_ERROR ((AE_INFO, "Unimplemented opcode, class=0x%X " "type=0x%X Opcode=0x%X Op=%p", OpClass, OpType, Op->Common.AmlOpcode, Op)); Status = AE_NOT_IMPLEMENTED; break; } } /* * ACPI 2.0 support for 64-bit integers: Truncate numeric * result value if we are executing from a 32-bit ACPI table */ (void) AcpiExTruncateFor32bitTable (WalkState->ResultObj); /* * Check if we just completed the evaluation of a * conditional predicate */ if ((ACPI_SUCCESS (Status)) && (WalkState->ControlState) && (WalkState->ControlState->Common.State == ACPI_CONTROL_PREDICATE_EXECUTING) && (WalkState->ControlState->Control.PredicateOp == Op)) { Status = AcpiDsGetPredicateValue (WalkState, WalkState->ResultObj); WalkState->ResultObj = NULL; } Cleanup: if (WalkState->ResultObj) { /* Break to debugger to display result */ AcpiDbDisplayResultObject (WalkState->ResultObj,WalkState); /* * Delete the result op if and only if: * Parent will not use the result -- such as any * non-nested type2 op in a method (parent will be method) */ AcpiDsDeleteResultIfNotUsed (Op, WalkState->ResultObj, WalkState); } #ifdef _UNDER_DEVELOPMENT if (WalkState->ParserState.Aml == WalkState->ParserState.AmlEnd) { AcpiDbMethodEnd (WalkState); } #endif /* Invoke exception handler on error */ if (ACPI_FAILURE (Status)) { Status = AcpiDsMethodError (Status, WalkState); } /* Always clear the object stack */ WalkState->NumOperands = 0; return_ACPI_STATUS (Status); } src/acpica/source/components/dispatcher/dswload.c000066400000000000000000000650201465205512700225130ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dswload - Dispatcher first pass namespace load callbacks * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acdispat.h" #include "acinterp.h" #include "acnamesp.h" #ifdef ACPI_ASL_COMPILER #include "acdisasm.h" #endif #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dswload") /******************************************************************************* * * FUNCTION: AcpiDsInitCallbacks * * PARAMETERS: WalkState - Current state of the parse tree walk * PassNumber - 1, 2, or 3 * * RETURN: Status * * DESCRIPTION: Init walk state callbacks * ******************************************************************************/ ACPI_STATUS AcpiDsInitCallbacks ( ACPI_WALK_STATE *WalkState, UINT32 PassNumber) { switch (PassNumber) { case 0: /* Parse only - caller will setup callbacks */ WalkState->ParseFlags = ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE | ACPI_PARSE_DISASSEMBLE; WalkState->DescendingCallback = NULL; WalkState->AscendingCallback = NULL; break; case 1: /* Load pass 1 */ WalkState->ParseFlags = ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE; WalkState->DescendingCallback = AcpiDsLoad1BeginOp; WalkState->AscendingCallback = AcpiDsLoad1EndOp; break; case 2: /* Load pass 2 */ WalkState->ParseFlags = ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE; WalkState->DescendingCallback = AcpiDsLoad2BeginOp; WalkState->AscendingCallback = AcpiDsLoad2EndOp; break; case 3: /* Execution pass */ WalkState->ParseFlags |= ACPI_PARSE_EXECUTE | ACPI_PARSE_DELETE_TREE; WalkState->DescendingCallback = AcpiDsExecBeginOp; WalkState->AscendingCallback = AcpiDsExecEndOp; break; default: return (AE_BAD_PARAMETER); } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsLoad1BeginOp * * PARAMETERS: WalkState - Current state of the parse tree walk * OutOp - Where to return op if a new one is created * * RETURN: Status * * DESCRIPTION: Descending callback used during the loading of ACPI tables. * ******************************************************************************/ ACPI_STATUS AcpiDsLoad1BeginOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT **OutOp) { ACPI_PARSE_OBJECT *Op; ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_OBJECT_TYPE ObjectType; char *Path; UINT32 Flags; ACPI_FUNCTION_TRACE_PTR (DsLoad1BeginOp, WalkState->Op); Op = WalkState->Op; ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", Op, WalkState)); /* We are only interested in opcodes that have an associated name */ if (Op) { if (!(WalkState->OpInfo->Flags & AML_NAMED)) { *OutOp = Op; return_ACPI_STATUS (AE_OK); } /* Check if this object has already been installed in the namespace */ if (Op->Common.Node) { *OutOp = Op; return_ACPI_STATUS (AE_OK); } } Path = AcpiPsGetNextNamestring (&WalkState->ParserState); /* Map the raw opcode into an internal object type */ ObjectType = WalkState->OpInfo->ObjectType; ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "State=%p Op=%p [%s]\n", WalkState, Op, AcpiUtGetTypeName (ObjectType))); switch (WalkState->Opcode) { case AML_SCOPE_OP: /* * The target name of the Scope() operator must exist at this point so * that we can actually open the scope to enter new names underneath it. * Allow search-to-root for single namesegs. */ Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &(Node)); #ifdef ACPI_ASL_COMPILER if (Status == AE_NOT_FOUND) { /* * Table disassembly: * Target of Scope() not found. Generate an External for it, and * insert the name into the namespace. */ AcpiDmAddOpToExternalList (Op, Path, ACPI_TYPE_DEVICE, 0, 0); Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType, ACPI_IMODE_LOAD_PASS1, ACPI_NS_SEARCH_PARENT, WalkState, &Node); } #endif if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Path, Status); return_ACPI_STATUS (Status); } /* * Check to make sure that the target is * one of the opcodes that actually opens a scope */ switch (Node->Type) { case ACPI_TYPE_ANY: case ACPI_TYPE_LOCAL_SCOPE: /* Scope */ case ACPI_TYPE_DEVICE: case ACPI_TYPE_POWER: case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_THERMAL: /* These are acceptable types */ break; case ACPI_TYPE_INTEGER: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: /* * These types we will allow, but we will change the type. * This enables some existing code of the form: * * Name (DEB, 0) * Scope (DEB) { ... } * * Note: silently change the type here. On the second pass, * we will report a warning */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Type override - [%4.4s] had invalid type (%s) " "for Scope operator, changed to type ANY\n", AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type))); Node->Type = ACPI_TYPE_ANY; WalkState->ScopeInfo->Common.Value = ACPI_TYPE_ANY; break; case ACPI_TYPE_METHOD: /* * Allow scope change to root during execution of module-level * code. Root is typed METHOD during this time. */ if ((Node == AcpiGbl_RootNode) && (WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL)) { break; } ACPI_FALLTHROUGH; default: /* All other types are an error */ ACPI_ERROR ((AE_INFO, "Invalid type (%s) for target of " "Scope operator [%4.4s] (Cannot override)", AcpiUtGetTypeName (Node->Type), AcpiUtGetNodeName (Node))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } break; default: /* * For all other named opcodes, we will enter the name into * the namespace. * * Setup the search flags. * Since we are entering a name into the namespace, we do not want to * enable the search-to-root upsearch. * * There are only two conditions where it is acceptable that the name * already exists: * 1) the Scope() operator can reopen a scoping object that was * previously defined (Scope, Method, Device, etc.) * 2) Whenever we are parsing a deferred opcode (OpRegion, Buffer, * BufferField, or Package), the name of the object is already * in the namespace. */ if (WalkState->DeferredNode) { /* This name is already in the namespace, get the node */ Node = WalkState->DeferredNode; Status = AE_OK; break; } /* * If we are executing a method, do not create any namespace objects * during the load phase, only during execution. */ if (WalkState->MethodNode) { Node = NULL; Status = AE_OK; break; } Flags = ACPI_NS_NO_UPSEARCH; if ((WalkState->Opcode != AML_SCOPE_OP) && (!(WalkState->ParseFlags & ACPI_PARSE_DEFERRED_OP))) { if (WalkState->NamespaceOverride) { Flags |= ACPI_NS_OVERRIDE_IF_FOUND; ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[%s] Override allowed\n", AcpiUtGetTypeName (ObjectType))); } else { Flags |= ACPI_NS_ERROR_IF_FOUND; ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[%s] Cannot already exist\n", AcpiUtGetTypeName (ObjectType))); } } else { ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[%s] Both Find or Create allowed\n", AcpiUtGetTypeName (ObjectType))); } /* * Enter the named type into the internal namespace. We enter the name * as we go downward in the parse tree. Any necessary subobjects that * involve arguments to the opcode must be created as we go back up the * parse tree later. */ Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType, ACPI_IMODE_LOAD_PASS1, Flags, WalkState, &Node); if (ACPI_FAILURE (Status)) { if (Status == AE_ALREADY_EXISTS) { /* The name already exists in this scope */ if (Node->Flags & ANOBJ_IS_EXTERNAL) { /* * Allow one create on an object or segment that was * previously declared External */ Node->Flags &= ~ANOBJ_IS_EXTERNAL; Node->Type = (UINT8) ObjectType; /* Just retyped a node, probably will need to open a scope */ if (AcpiNsOpensScope (ObjectType)) { Status = AcpiDsScopeStackPush ( Node, ObjectType, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } Status = AE_OK; } } if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Path, Status); return_ACPI_STATUS (Status); } } break; } /* Common exit */ if (!Op) { /* Create a new op */ Op = AcpiPsAllocOp (WalkState->Opcode, WalkState->Aml); if (!Op) { return_ACPI_STATUS (AE_NO_MEMORY); } } /* Initialize the op */ #ifdef ACPI_CONSTANT_EVAL_ONLY Op->Named.Path = Path; #endif if (Node) { /* * Put the Node in the "op" object that the parser uses, so we * can get it again quickly when this scope is closed */ Op->Common.Node = Node; Op->Named.Name = Node->Name.Integer; } AcpiPsAppendArg (AcpiPsGetParentScope (&WalkState->ParserState), Op); *OutOp = Op; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsLoad1EndOp * * PARAMETERS: WalkState - Current state of the parse tree walk * * RETURN: Status * * DESCRIPTION: Ascending callback used during the loading of the namespace, * both control methods and everything else. * ******************************************************************************/ ACPI_STATUS AcpiDsLoad1EndOp ( ACPI_WALK_STATE *WalkState) { ACPI_PARSE_OBJECT *Op; ACPI_OBJECT_TYPE ObjectType; ACPI_STATUS Status = AE_OK; #ifdef ACPI_ASL_COMPILER UINT8 ParamCount; #endif ACPI_FUNCTION_TRACE (DsLoad1EndOp); Op = WalkState->Op; ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", Op, WalkState)); /* * Disassembler: handle create field operators here. * * CreateBufferField is a deferred op that is typically processed in load * pass 2. However, disassembly of control method contents walk the parse * tree with ACPI_PARSE_LOAD_PASS1 and AML_CREATE operators are processed * in a later walk. This is a problem when there is a control method that * has the same name as the AML_CREATE object. In this case, any use of the * name segment will be detected as a method call rather than a reference * to a buffer field. * * This earlier creation during disassembly solves this issue by inserting * the named object in the ACPI namespace so that references to this name * would be a name string rather than a method call. */ if ((WalkState->ParseFlags & ACPI_PARSE_DISASSEMBLE) && (WalkState->OpInfo->Flags & AML_CREATE)) { Status = AcpiDsCreateBufferField (Op, WalkState); return_ACPI_STATUS (Status); } /* We are only interested in opcodes that have an associated name */ if (!(WalkState->OpInfo->Flags & (AML_NAMED | AML_FIELD))) { return_ACPI_STATUS (AE_OK); } /* Get the object type to determine if we should pop the scope */ ObjectType = WalkState->OpInfo->ObjectType; if (WalkState->OpInfo->Flags & AML_FIELD) { /* * If we are executing a method, do not create any namespace objects * during the load phase, only during execution. */ if (!WalkState->MethodNode) { if (WalkState->Opcode == AML_FIELD_OP || WalkState->Opcode == AML_BANK_FIELD_OP || WalkState->Opcode == AML_INDEX_FIELD_OP) { Status = AcpiDsInitFieldObjects (Op, WalkState); } } return_ACPI_STATUS (Status); } /* * If we are executing a method, do not create any namespace objects * during the load phase, only during execution. */ if (!WalkState->MethodNode) { if (Op->Common.AmlOpcode == AML_REGION_OP) { Status = AcpiExCreateRegion (Op->Named.Data, Op->Named.Length, (ACPI_ADR_SPACE_TYPE) ((Op->Common.Value.Arg)->Common.Value.Integer), WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } else if (Op->Common.AmlOpcode == AML_DATA_REGION_OP) { Status = AcpiExCreateRegion (Op->Named.Data, Op->Named.Length, ACPI_ADR_SPACE_DATA_TABLE, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } } if (Op->Common.AmlOpcode == AML_NAME_OP) { /* For Name opcode, get the object type from the argument */ if (Op->Common.Value.Arg) { ObjectType = (AcpiPsGetOpcodeInfo ( (Op->Common.Value.Arg)->Common.AmlOpcode))->ObjectType; /* Set node type if we have a namespace node */ if (Op->Common.Node) { Op->Common.Node->Type = (UINT8) ObjectType; } } } #ifdef ACPI_ASL_COMPILER /* * For external opcode, get the object type from the argument and * get the parameter count from the argument's next. */ if (AcpiGbl_DisasmFlag && Op->Common.Node && Op->Common.AmlOpcode == AML_EXTERNAL_OP) { /* * Note, if this external is not a method * Op->Common.Value.Arg->Common.Next->Common.Value.Integer == 0 * Therefore, ParamCount will be 0. */ ParamCount = (UINT8) Op->Common.Value.Arg->Common.Next->Common.Value.Integer; ObjectType = (UINT8) Op->Common.Value.Arg->Common.Value.Integer; Op->Common.Node->Flags |= ANOBJ_IS_EXTERNAL; Op->Common.Node->Type = (UINT8) ObjectType; AcpiDmCreateSubobjectForExternal ((UINT8)ObjectType, &Op->Common.Node, ParamCount); /* * Add the external to the external list because we may be * emitting code based off of the items within the external list. */ AcpiDmAddOpToExternalList (Op, Op->Named.Path, (UINT8)ObjectType, ParamCount, ACPI_EXT_ORIGIN_FROM_OPCODE | ACPI_EXT_RESOLVED_REFERENCE); } #endif /* * If we are executing a method, do not create any namespace objects * during the load phase, only during execution. */ if (!WalkState->MethodNode) { if (Op->Common.AmlOpcode == AML_METHOD_OP) { /* * MethodOp PkgLength NameString MethodFlags TermList * * Note: We must create the method node/object pair as soon as we * see the method declaration. This allows later pass1 parsing * of invocations of the method (need to know the number of * arguments.) */ ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "LOADING-Method: State=%p Op=%p NamedObj=%p\n", WalkState, Op, Op->Named.Node)); if (!AcpiNsGetAttachedObject (Op->Named.Node)) { WalkState->Operands[0] = ACPI_CAST_PTR (void, Op->Named.Node); WalkState->NumOperands = 1; Status = AcpiDsCreateOperands ( WalkState, Op->Common.Value.Arg); if (ACPI_SUCCESS (Status)) { Status = AcpiExCreateMethod (Op->Named.Data, Op->Named.Length, WalkState); } WalkState->Operands[0] = NULL; WalkState->NumOperands = 0; if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } } } /* Pop the scope stack (only if loading a table) */ if (!WalkState->MethodNode && Op->Common.AmlOpcode != AML_EXTERNAL_OP && AcpiNsOpensScope (ObjectType)) { ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s): Popping scope for Op %p\n", AcpiUtGetTypeName (ObjectType), Op)); Status = AcpiDsScopeStackPop (WalkState); } return_ACPI_STATUS (Status); } src/acpica/source/components/dispatcher/dswload2.c000066400000000000000000000715241465205512700226030ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dswload2 - Dispatcher second pass namespace load callbacks * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acdispat.h" #include "acinterp.h" #include "acnamesp.h" #include "acevents.h" #ifdef ACPI_EXEC_APP #include "aecommon.h" #endif #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dswload2") /******************************************************************************* * * FUNCTION: AcpiDsLoad2BeginOp * * PARAMETERS: WalkState - Current state of the parse tree walk * OutOp - Where to return op if a new one is created * * RETURN: Status * * DESCRIPTION: Descending callback used during the loading of ACPI tables. * ******************************************************************************/ ACPI_STATUS AcpiDsLoad2BeginOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT **OutOp) { ACPI_PARSE_OBJECT *Op; ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_OBJECT_TYPE ObjectType; char *BufferPtr; UINT32 Flags; ACPI_FUNCTION_TRACE (DsLoad2BeginOp); Op = WalkState->Op; ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", Op, WalkState)); if (Op) { if ((WalkState->ControlState) && (WalkState->ControlState->Common.State == ACPI_CONTROL_CONDITIONAL_EXECUTING)) { /* We are executing a while loop outside of a method */ Status = AcpiDsExecBeginOp (WalkState, OutOp); return_ACPI_STATUS (Status); } /* We only care about Namespace opcodes here */ if ((!(WalkState->OpInfo->Flags & AML_NSOPCODE) && (WalkState->Opcode != AML_INT_NAMEPATH_OP)) || (!(WalkState->OpInfo->Flags & AML_NAMED))) { return_ACPI_STATUS (AE_OK); } /* Get the name we are going to enter or lookup in the namespace */ if (WalkState->Opcode == AML_INT_NAMEPATH_OP) { /* For Namepath op, get the path string */ BufferPtr = Op->Common.Value.String; if (!BufferPtr) { /* No name, just exit */ return_ACPI_STATUS (AE_OK); } } else { /* Get name from the op */ BufferPtr = ACPI_CAST_PTR (char, &Op->Named.Name); } } else { /* Get the namestring from the raw AML */ BufferPtr = AcpiPsGetNextNamestring (&WalkState->ParserState); } /* Map the opcode into an internal object type */ ObjectType = WalkState->OpInfo->ObjectType; ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "State=%p Op=%p Type=%X\n", WalkState, Op, ObjectType)); switch (WalkState->Opcode) { case AML_FIELD_OP: case AML_BANK_FIELD_OP: case AML_INDEX_FIELD_OP: Node = NULL; Status = AE_OK; break; case AML_INT_NAMEPATH_OP: /* * The NamePath is an object reference to an existing object. * Don't enter the name into the namespace, but look it up * for use later. */ Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &(Node)); break; case AML_SCOPE_OP: /* Special case for Scope(\) -> refers to the Root node */ if (Op && (Op->Named.Node == AcpiGbl_RootNode)) { Node = Op->Named.Node; Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } else { /* * The Path is an object reference to an existing object. * Don't enter the name into the namespace, but look it up * for use later. */ Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &(Node)); if (ACPI_FAILURE (Status)) { #ifdef ACPI_ASL_COMPILER if (Status == AE_NOT_FOUND) { Status = AE_OK; } else { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, BufferPtr, Status); } #else ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, BufferPtr, Status); #endif return_ACPI_STATUS (Status); } } /* * We must check to make sure that the target is * one of the opcodes that actually opens a scope */ switch (Node->Type) { case ACPI_TYPE_ANY: case ACPI_TYPE_LOCAL_SCOPE: /* Scope */ case ACPI_TYPE_DEVICE: case ACPI_TYPE_POWER: case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_THERMAL: /* These are acceptable types */ break; case ACPI_TYPE_INTEGER: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: /* * These types we will allow, but we will change the type. * This enables some existing code of the form: * * Name (DEB, 0) * Scope (DEB) { ... } */ ACPI_WARNING ((AE_INFO, "Type override - [%4.4s] had invalid type (%s) " "for Scope operator, changed to type ANY", AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type))); Node->Type = ACPI_TYPE_ANY; WalkState->ScopeInfo->Common.Value = ACPI_TYPE_ANY; break; case ACPI_TYPE_METHOD: /* * Allow scope change to root during execution of module-level * code. Root is typed METHOD during this time. */ if ((Node == AcpiGbl_RootNode) && (WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL)) { break; } ACPI_FALLTHROUGH; default: /* All other types are an error */ ACPI_ERROR ((AE_INFO, "Invalid type (%s) for target of " "Scope operator [%4.4s] (Cannot override)", AcpiUtGetTypeName (Node->Type), AcpiUtGetNodeName (Node))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } break; default: /* All other opcodes */ if (Op && Op->Common.Node) { /* This op/node was previously entered into the namespace */ Node = Op->Common.Node; if (AcpiNsOpensScope (ObjectType)) { Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } return_ACPI_STATUS (AE_OK); } /* * Enter the named type into the internal namespace. We enter the name * as we go downward in the parse tree. Any necessary subobjects that * involve arguments to the opcode must be created as we go back up the * parse tree later. * * Note: Name may already exist if we are executing a deferred opcode. */ if (WalkState->DeferredNode) { /* This name is already in the namespace, get the node */ Node = WalkState->DeferredNode; Status = AE_OK; break; } Flags = ACPI_NS_NO_UPSEARCH; if (WalkState->PassNumber == ACPI_IMODE_EXECUTE) { /* Execution mode, node cannot already exist, node is temporary */ Flags |= ACPI_NS_ERROR_IF_FOUND; if (!(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL)) { Flags |= ACPI_NS_TEMPORARY; } } #ifdef ACPI_ASL_COMPILER /* * Do not open a scope for AML_EXTERNAL_OP * AcpiNsLookup can open a new scope based on the object type * of this op. AML_EXTERNAL_OP is a declaration rather than a * definition. In the case that this external is a method object, * AcpiNsLookup will open a new scope. However, an AML_EXTERNAL_OP * associated with the ACPI_TYPE_METHOD is a declaration, rather than * a definition. Flags is set to avoid opening a scope for any * AML_EXTERNAL_OP. */ if (WalkState->Opcode == AML_EXTERNAL_OP) { Flags |= ACPI_NS_DONT_OPEN_SCOPE; } #endif /* * For name creation opcodes, the full namepath prefix must * exist, except for the final (new) nameseg. */ if (WalkState->OpInfo->Flags & AML_NAMED) { Flags |= ACPI_NS_PREFIX_MUST_EXIST; } /* Add new entry or lookup existing entry */ Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType, ACPI_IMODE_LOAD_PASS2, Flags, WalkState, &Node); if (ACPI_SUCCESS (Status) && (Flags & ACPI_NS_TEMPORARY)) { ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "***New Node [%4.4s] %p is temporary\n", AcpiUtGetNodeName (Node), Node)); } break; } if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, BufferPtr, Status); return_ACPI_STATUS (Status); } if (!Op) { /* Create a new op */ Op = AcpiPsAllocOp (WalkState->Opcode, WalkState->Aml); if (!Op) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Initialize the new op */ if (Node) { Op->Named.Name = Node->Name.Integer; } *OutOp = Op; } /* * Put the Node in the "op" object that the parser uses, so we * can get it again quickly when this scope is closed */ Op->Common.Node = Node; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsLoad2EndOp * * PARAMETERS: WalkState - Current state of the parse tree walk * * RETURN: Status * * DESCRIPTION: Ascending callback used during the loading of the namespace, * both control methods and everything else. * ******************************************************************************/ ACPI_STATUS AcpiDsLoad2EndOp ( ACPI_WALK_STATE *WalkState) { ACPI_PARSE_OBJECT *Op; ACPI_STATUS Status = AE_OK; ACPI_OBJECT_TYPE ObjectType; ACPI_NAMESPACE_NODE *Node; ACPI_PARSE_OBJECT *Arg; ACPI_NAMESPACE_NODE *NewNode; UINT32 i; UINT8 RegionSpace; #ifdef ACPI_EXEC_APP ACPI_OPERAND_OBJECT *ObjDesc; char *Namepath; #endif ACPI_FUNCTION_TRACE (DsLoad2EndOp); Op = WalkState->Op; ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Opcode [%s] Op %p State %p\n", WalkState->OpInfo->Name, Op, WalkState)); /* Check if opcode had an associated namespace object */ if (!(WalkState->OpInfo->Flags & AML_NSOBJECT)) { return_ACPI_STATUS (AE_OK); } if (Op->Common.AmlOpcode == AML_SCOPE_OP) { ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Ending scope Op=%p State=%p\n", Op, WalkState)); } ObjectType = WalkState->OpInfo->ObjectType; /* * Get the Node/name from the earlier lookup * (It was saved in the *op structure) */ Node = Op->Common.Node; /* * Put the Node on the object stack (Contains the ACPI Name of * this object) */ WalkState->Operands[0] = (void *) Node; WalkState->NumOperands = 1; /* Pop the scope stack */ if (AcpiNsOpensScope (ObjectType) && (Op->Common.AmlOpcode != AML_INT_METHODCALL_OP)) { ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s) Popping scope for Op %p\n", AcpiUtGetTypeName (ObjectType), Op)); Status = AcpiDsScopeStackPop (WalkState); if (ACPI_FAILURE (Status)) { goto Cleanup; } } /* * Named operations are as follows: * * AML_ALIAS * AML_BANKFIELD * AML_CREATEBITFIELD * AML_CREATEBYTEFIELD * AML_CREATEDWORDFIELD * AML_CREATEFIELD * AML_CREATEQWORDFIELD * AML_CREATEWORDFIELD * AML_DATA_REGION * AML_DEVICE * AML_EVENT * AML_FIELD * AML_INDEXFIELD * AML_METHOD * AML_METHODCALL * AML_MUTEX * AML_NAME * AML_NAMEDFIELD * AML_OPREGION * AML_POWERRES * AML_PROCESSOR * AML_SCOPE * AML_THERMALZONE */ ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Create-Load [%s] State=%p Op=%p NamedObj=%p\n", AcpiPsGetOpcodeName (Op->Common.AmlOpcode), WalkState, Op, Node)); /* Decode the opcode */ Arg = Op->Common.Value.Arg; switch (WalkState->OpInfo->Type) { case AML_TYPE_CREATE_FIELD: /* * Create the field object, but the field buffer and index must * be evaluated later during the execution phase */ Status = AcpiDsCreateBufferField (Op, WalkState); if ACPI_FAILURE (Status) { ACPI_EXCEPTION ((AE_INFO, Status, "CreateBufferField failure")); goto Cleanup; } break; case AML_TYPE_NAMED_FIELD: /* * If we are executing a method, initialize the field */ if (WalkState->MethodNode) { Status = AcpiDsInitFieldObjects (Op, WalkState); } switch (Op->Common.AmlOpcode) { case AML_INDEX_FIELD_OP: Status = AcpiDsCreateIndexField ( Op, (ACPI_HANDLE) Arg->Common.Node, WalkState); break; case AML_BANK_FIELD_OP: Status = AcpiDsCreateBankField (Op, Arg->Common.Node, WalkState); break; case AML_FIELD_OP: Status = AcpiDsCreateField (Op, Arg->Common.Node, WalkState); break; default: /* All NAMED_FIELD opcodes must be handled above */ break; } break; case AML_TYPE_NAMED_SIMPLE: Status = AcpiDsCreateOperands (WalkState, Arg); if (ACPI_FAILURE (Status)) { goto Cleanup; } switch (Op->Common.AmlOpcode) { case AML_PROCESSOR_OP: Status = AcpiExCreateProcessor (WalkState); break; case AML_POWER_RESOURCE_OP: Status = AcpiExCreatePowerResource (WalkState); break; case AML_MUTEX_OP: Status = AcpiExCreateMutex (WalkState); break; case AML_EVENT_OP: Status = AcpiExCreateEvent (WalkState); break; case AML_ALIAS_OP: Status = AcpiExCreateAlias (WalkState); break; default: /* Unknown opcode */ Status = AE_OK; goto Cleanup; } /* Delete operands */ for (i = 1; i < WalkState->NumOperands; i++) { AcpiUtRemoveReference (WalkState->Operands[i]); WalkState->Operands[i] = NULL; } break; case AML_TYPE_NAMED_COMPLEX: switch (Op->Common.AmlOpcode) { case AML_REGION_OP: case AML_DATA_REGION_OP: if (Op->Common.AmlOpcode == AML_REGION_OP) { RegionSpace = (ACPI_ADR_SPACE_TYPE) ((Op->Common.Value.Arg)->Common.Value.Integer); } else { RegionSpace = ACPI_ADR_SPACE_DATA_TABLE; } /* * The OpRegion is not fully parsed at this time. The only valid * argument is the SpaceId. (We must save the address of the * AML of the address and length operands) * * If we have a valid region, initialize it. The namespace is * unlocked at this point. * * Need to unlock interpreter if it is locked (if we are running * a control method), in order to allow _REG methods to be run * during AcpiEvInitializeRegion. */ if (WalkState->MethodNode) { /* * Executing a method: initialize the region and unlock * the interpreter */ Status = AcpiExCreateRegion (Op->Named.Data, Op->Named.Length, RegionSpace, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } Status = AcpiEvInitializeRegion ( AcpiNsGetAttachedObject (Node)); break; case AML_NAME_OP: Status = AcpiDsCreateNode (WalkState, Node, Op); if (ACPI_FAILURE (Status)) { goto Cleanup; } #ifdef ACPI_EXEC_APP /* * AcpiExec support for namespace initialization file (initialize * Name opcodes in this code.) */ Namepath = AcpiNsGetExternalPathname (Node); Status = AeLookupInitFileEntry (Namepath, &ObjDesc); if (ACPI_SUCCESS (Status)) { /* Detach any existing object, attach new object */ if (Node->Object) { AcpiNsDetachObject (Node); } AcpiNsAttachObject (Node, ObjDesc, ObjDesc->Common.Type); } ACPI_FREE (Namepath); Status = AE_OK; #endif break; case AML_METHOD_OP: /* * MethodOp PkgLength NameString MethodFlags TermList * * Note: We must create the method node/object pair as soon as we * see the method declaration. This allows later pass1 parsing * of invocations of the method (need to know the number of * arguments.) */ ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "LOADING-Method: State=%p Op=%p NamedObj=%p\n", WalkState, Op, Op->Named.Node)); if (!AcpiNsGetAttachedObject (Op->Named.Node)) { WalkState->Operands[0] = ACPI_CAST_PTR (void, Op->Named.Node); WalkState->NumOperands = 1; Status = AcpiDsCreateOperands ( WalkState, Op->Common.Value.Arg); if (ACPI_SUCCESS (Status)) { Status = AcpiExCreateMethod ( Op->Named.Data, Op->Named.Length, WalkState); } WalkState->Operands[0] = NULL; WalkState->NumOperands = 0; if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } break; default: /* All NAMED_COMPLEX opcodes must be handled above */ break; } break; case AML_CLASS_INTERNAL: /* case AML_INT_NAMEPATH_OP: */ break; case AML_CLASS_METHOD_CALL: ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "RESOLVING-MethodCall: State=%p Op=%p NamedObj=%p\n", WalkState, Op, Node)); /* * Lookup the method name and save the Node */ Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.String, ACPI_TYPE_ANY, ACPI_IMODE_LOAD_PASS2, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, WalkState, &(NewNode)); if (ACPI_SUCCESS (Status)) { /* * Make sure that what we found is indeed a method * We didn't search for a method on purpose, to see if the name * would resolve */ if (NewNode->Type != ACPI_TYPE_METHOD) { Status = AE_AML_OPERAND_TYPE; } /* We could put the returned object (Node) on the object stack for * later, but for now, we will put it in the "op" object that the * parser uses, so we can get it again at the end of this scope */ Op->Common.Node = NewNode; } else { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Arg->Common.Value.String, Status); } break; default: break; } Cleanup: /* Remove the Node pushed at the very beginning */ WalkState->Operands[0] = NULL; WalkState->NumOperands = 0; return_ACPI_STATUS (Status); } src/acpica/source/components/dispatcher/dswscope.c000066400000000000000000000315571465205512700227150ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dswscope - Scope stack manipulation * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdispat.h" #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dswscope") /**************************************************************************** * * FUNCTION: AcpiDsScopeStackClear * * PARAMETERS: WalkState - Current state * * RETURN: None * * DESCRIPTION: Pop (and free) everything on the scope stack except the * root scope object (which remains at the stack top.) * ***************************************************************************/ void AcpiDsScopeStackClear ( ACPI_WALK_STATE *WalkState) { ACPI_GENERIC_STATE *ScopeInfo; ACPI_FUNCTION_NAME (DsScopeStackClear); while (WalkState->ScopeInfo) { /* Pop a scope off the stack */ ScopeInfo = WalkState->ScopeInfo; WalkState->ScopeInfo = ScopeInfo->Scope.Next; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Popped object type (%s)\n", AcpiUtGetTypeName (ScopeInfo->Common.Value))); AcpiUtDeleteGenericState (ScopeInfo); } } /**************************************************************************** * * FUNCTION: AcpiDsScopeStackPush * * PARAMETERS: Node - Name to be made current * Type - Type of frame being pushed * WalkState - Current state * * RETURN: Status * * DESCRIPTION: Push the current scope on the scope stack, and make the * passed Node current. * ***************************************************************************/ ACPI_STATUS AcpiDsScopeStackPush ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_TYPE Type, ACPI_WALK_STATE *WalkState) { ACPI_GENERIC_STATE *ScopeInfo; ACPI_GENERIC_STATE *OldScopeInfo; ACPI_FUNCTION_TRACE (DsScopeStackPush); if (!Node) { /* Invalid scope */ ACPI_ERROR ((AE_INFO, "Null scope parameter")); return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Make sure object type is valid */ if (!AcpiUtValidObjectType (Type)) { ACPI_WARNING ((AE_INFO, "Invalid object type: 0x%X", Type)); } /* Allocate a new scope object */ ScopeInfo = AcpiUtCreateGenericState (); if (!ScopeInfo) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Init new scope object */ ScopeInfo->Common.DescriptorType = ACPI_DESC_TYPE_STATE_WSCOPE; ScopeInfo->Scope.Node = Node; ScopeInfo->Common.Value = (UINT16) Type; WalkState->ScopeDepth++; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%.2d] Pushed scope ", (UINT32) WalkState->ScopeDepth)); OldScopeInfo = WalkState->ScopeInfo; if (OldScopeInfo) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "[%4.4s] (%s)", AcpiUtGetNodeName (OldScopeInfo->Scope.Node), AcpiUtGetTypeName (OldScopeInfo->Common.Value))); } else { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, ACPI_NAMESPACE_ROOT)); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, ", New scope -> [%4.4s] (%s)\n", AcpiUtGetNodeName (ScopeInfo->Scope.Node), AcpiUtGetTypeName (ScopeInfo->Common.Value))); /* Push new scope object onto stack */ AcpiUtPushGenericState (&WalkState->ScopeInfo, ScopeInfo); return_ACPI_STATUS (AE_OK); } /**************************************************************************** * * FUNCTION: AcpiDsScopeStackPop * * PARAMETERS: WalkState - Current state * * RETURN: Status * * DESCRIPTION: Pop the scope stack once. * ***************************************************************************/ ACPI_STATUS AcpiDsScopeStackPop ( ACPI_WALK_STATE *WalkState) { ACPI_GENERIC_STATE *ScopeInfo; ACPI_GENERIC_STATE *NewScopeInfo; ACPI_FUNCTION_TRACE (DsScopeStackPop); /* * Pop scope info object off the stack. */ ScopeInfo = AcpiUtPopGenericState (&WalkState->ScopeInfo); if (!ScopeInfo) { return_ACPI_STATUS (AE_STACK_UNDERFLOW); } WalkState->ScopeDepth--; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%.2d] Popped scope [%4.4s] (%s), New scope -> ", (UINT32) WalkState->ScopeDepth, AcpiUtGetNodeName (ScopeInfo->Scope.Node), AcpiUtGetTypeName (ScopeInfo->Common.Value))); NewScopeInfo = WalkState->ScopeInfo; if (NewScopeInfo) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "[%4.4s] (%s)\n", AcpiUtGetNodeName (NewScopeInfo->Scope.Node), AcpiUtGetTypeName (NewScopeInfo->Common.Value))); } else { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "%s\n", ACPI_NAMESPACE_ROOT)); } AcpiUtDeleteGenericState (ScopeInfo); return_ACPI_STATUS (AE_OK); } src/acpica/source/components/dispatcher/dswstate.c000066400000000000000000000707651465205512700227300ustar00rootroot00000000000000/****************************************************************************** * * Module Name: dswstate - Dispatcher parse tree walk management routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "acdispat.h" #include "acnamesp.h" #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dswstate") /* Local prototypes */ static ACPI_STATUS AcpiDsResultStackPush ( ACPI_WALK_STATE *WalkState); static ACPI_STATUS AcpiDsResultStackPop ( ACPI_WALK_STATE *WalkState); /******************************************************************************* * * FUNCTION: AcpiDsResultPop * * PARAMETERS: Object - Where to return the popped object * WalkState - Current Walk state * * RETURN: Status * * DESCRIPTION: Pop an object off the top of this walk's result stack * ******************************************************************************/ ACPI_STATUS AcpiDsResultPop ( ACPI_OPERAND_OBJECT **Object, ACPI_WALK_STATE *WalkState) { UINT32 Index; ACPI_GENERIC_STATE *State; ACPI_STATUS Status; ACPI_FUNCTION_NAME (DsResultPop); State = WalkState->Results; /* Incorrect state of result stack */ if (State && !WalkState->ResultCount) { ACPI_ERROR ((AE_INFO, "No results on result stack")); return (AE_AML_INTERNAL); } if (!State && WalkState->ResultCount) { ACPI_ERROR ((AE_INFO, "No result state for result stack")); return (AE_AML_INTERNAL); } /* Empty result stack */ if (!State) { ACPI_ERROR ((AE_INFO, "Result stack is empty! State=%p", WalkState)); return (AE_AML_NO_RETURN_VALUE); } /* Return object of the top element and clean that top element result stack */ WalkState->ResultCount--; Index = (UINT32) WalkState->ResultCount % ACPI_RESULTS_FRAME_OBJ_NUM; *Object = State->Results.ObjDesc [Index]; if (!*Object) { ACPI_ERROR ((AE_INFO, "No result objects on result stack, State=%p", WalkState)); return (AE_AML_NO_RETURN_VALUE); } State->Results.ObjDesc [Index] = NULL; if (Index == 0) { Status = AcpiDsResultStackPop (WalkState); if (ACPI_FAILURE (Status)) { return (Status); } } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] Index=%X State=%p Num=%X\n", *Object, AcpiUtGetObjectTypeName (*Object), Index, WalkState, WalkState->ResultCount)); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsResultPush * * PARAMETERS: Object - Where to return the popped object * WalkState - Current Walk state * * RETURN: Status * * DESCRIPTION: Push an object onto the current result stack * ******************************************************************************/ ACPI_STATUS AcpiDsResultPush ( ACPI_OPERAND_OBJECT *Object, ACPI_WALK_STATE *WalkState) { ACPI_GENERIC_STATE *State; ACPI_STATUS Status; UINT32 Index; ACPI_FUNCTION_NAME (DsResultPush); if (WalkState->ResultCount > WalkState->ResultSize) { ACPI_ERROR ((AE_INFO, "Result stack is full")); return (AE_AML_INTERNAL); } else if (WalkState->ResultCount == WalkState->ResultSize) { /* Extend the result stack */ Status = AcpiDsResultStackPush (WalkState); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Failed to extend the result stack")); return (Status); } } if (!(WalkState->ResultCount < WalkState->ResultSize)) { ACPI_ERROR ((AE_INFO, "No free elements in result stack")); return (AE_AML_INTERNAL); } State = WalkState->Results; if (!State) { ACPI_ERROR ((AE_INFO, "No result stack frame during push")); return (AE_AML_INTERNAL); } if (!Object) { ACPI_ERROR ((AE_INFO, "Null Object! State=%p Num=%u", WalkState, WalkState->ResultCount)); return (AE_BAD_PARAMETER); } /* Assign the address of object to the top free element of result stack */ Index = (UINT32) WalkState->ResultCount % ACPI_RESULTS_FRAME_OBJ_NUM; State->Results.ObjDesc [Index] = Object; WalkState->ResultCount++; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p Num=%X Cur=%X\n", Object, AcpiUtGetObjectTypeName ((ACPI_OPERAND_OBJECT *) Object), WalkState, WalkState->ResultCount, WalkState->CurrentResult)); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsResultStackPush * * PARAMETERS: WalkState - Current Walk state * * RETURN: Status * * DESCRIPTION: Push an object onto the WalkState result stack * ******************************************************************************/ static ACPI_STATUS AcpiDsResultStackPush ( ACPI_WALK_STATE *WalkState) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_NAME (DsResultStackPush); /* Check for stack overflow */ if (((UINT32) WalkState->ResultSize + ACPI_RESULTS_FRAME_OBJ_NUM) > ACPI_RESULTS_OBJ_NUM_MAX) { ACPI_ERROR ((AE_INFO, "Result stack overflow: State=%p Num=%u", WalkState, WalkState->ResultSize)); return (AE_STACK_OVERFLOW); } State = AcpiUtCreateGenericState (); if (!State) { return (AE_NO_MEMORY); } State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_RESULT; AcpiUtPushGenericState (&WalkState->Results, State); /* Increase the length of the result stack by the length of frame */ WalkState->ResultSize += ACPI_RESULTS_FRAME_OBJ_NUM; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Results=%p State=%p\n", State, WalkState)); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsResultStackPop * * PARAMETERS: WalkState - Current Walk state * * RETURN: Status * * DESCRIPTION: Pop an object off of the WalkState result stack * ******************************************************************************/ static ACPI_STATUS AcpiDsResultStackPop ( ACPI_WALK_STATE *WalkState) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_NAME (DsResultStackPop); /* Check for stack underflow */ if (WalkState->Results == NULL) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Result stack underflow - State=%p\n", WalkState)); return (AE_AML_NO_OPERAND); } if (WalkState->ResultSize < ACPI_RESULTS_FRAME_OBJ_NUM) { ACPI_ERROR ((AE_INFO, "Insufficient result stack size")); return (AE_AML_INTERNAL); } State = AcpiUtPopGenericState (&WalkState->Results); AcpiUtDeleteGenericState (State); /* Decrease the length of result stack by the length of frame */ WalkState->ResultSize -= ACPI_RESULTS_FRAME_OBJ_NUM; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Result=%p RemainingResults=%X State=%p\n", State, WalkState->ResultCount, WalkState)); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsObjStackPush * * PARAMETERS: Object - Object to push * WalkState - Current Walk state * * RETURN: Status * * DESCRIPTION: Push an object onto this walk's object/operand stack * ******************************************************************************/ ACPI_STATUS AcpiDsObjStackPush ( void *Object, ACPI_WALK_STATE *WalkState) { ACPI_FUNCTION_NAME (DsObjStackPush); /* Check for stack overflow */ if (WalkState->NumOperands >= ACPI_OBJ_NUM_OPERANDS) { ACPI_ERROR ((AE_INFO, "Object stack overflow! Obj=%p State=%p #Ops=%u", Object, WalkState, WalkState->NumOperands)); return (AE_STACK_OVERFLOW); } /* Put the object onto the stack */ WalkState->Operands [WalkState->OperandIndex] = Object; WalkState->NumOperands++; /* For the usual order of filling the operand stack */ WalkState->OperandIndex++; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p #Ops=%X\n", Object, AcpiUtGetObjectTypeName ((ACPI_OPERAND_OBJECT *) Object), WalkState, WalkState->NumOperands)); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsObjStackPop * * PARAMETERS: PopCount - Number of objects/entries to pop * WalkState - Current Walk state * * RETURN: Status * * DESCRIPTION: Pop this walk's object stack. Objects on the stack are NOT * deleted by this routine. * ******************************************************************************/ ACPI_STATUS AcpiDsObjStackPop ( UINT32 PopCount, ACPI_WALK_STATE *WalkState) { UINT32 i; ACPI_FUNCTION_NAME (DsObjStackPop); for (i = 0; i < PopCount; i++) { /* Check for stack underflow */ if (WalkState->NumOperands == 0) { ACPI_ERROR ((AE_INFO, "Object stack underflow! Count=%X State=%p #Ops=%u", PopCount, WalkState, WalkState->NumOperands)); return (AE_STACK_UNDERFLOW); } /* Just set the stack entry to null */ WalkState->NumOperands--; WalkState->Operands [WalkState->NumOperands] = NULL; } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Count=%X State=%p #Ops=%u\n", PopCount, WalkState, WalkState->NumOperands)); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiDsObjStackPopAndDelete * * PARAMETERS: PopCount - Number of objects/entries to pop * WalkState - Current Walk state * * RETURN: Status * * DESCRIPTION: Pop this walk's object stack and delete each object that is * popped off. * ******************************************************************************/ void AcpiDsObjStackPopAndDelete ( UINT32 PopCount, ACPI_WALK_STATE *WalkState) { INT32 i; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_FUNCTION_NAME (DsObjStackPopAndDelete); if (PopCount == 0) { return; } for (i = (INT32) PopCount - 1; i >= 0; i--) { if (WalkState->NumOperands == 0) { return; } /* Pop the stack and delete an object if present in this stack entry */ WalkState->NumOperands--; ObjDesc = WalkState->Operands [i]; if (ObjDesc) { AcpiUtRemoveReference (WalkState->Operands [i]); WalkState->Operands [i] = NULL; } } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Count=%X State=%p #Ops=%X\n", PopCount, WalkState, WalkState->NumOperands)); } /******************************************************************************* * * FUNCTION: AcpiDsGetCurrentWalkState * * PARAMETERS: Thread - Get current active state for this Thread * * RETURN: Pointer to the current walk state * * DESCRIPTION: Get the walk state that is at the head of the list (the "current" * walk state.) * ******************************************************************************/ ACPI_WALK_STATE * AcpiDsGetCurrentWalkState ( ACPI_THREAD_STATE *Thread) { ACPI_FUNCTION_NAME (DsGetCurrentWalkState); if (!Thread) { return (NULL); } ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Current WalkState %p\n", Thread->WalkStateList)); return (Thread->WalkStateList); } /******************************************************************************* * * FUNCTION: AcpiDsPushWalkState * * PARAMETERS: WalkState - State to push * Thread - Thread state object * * RETURN: None * * DESCRIPTION: Place the Thread state at the head of the state list * ******************************************************************************/ void AcpiDsPushWalkState ( ACPI_WALK_STATE *WalkState, ACPI_THREAD_STATE *Thread) { ACPI_FUNCTION_TRACE (DsPushWalkState); WalkState->Next = Thread->WalkStateList; Thread->WalkStateList = WalkState; return_VOID; } /******************************************************************************* * * FUNCTION: AcpiDsPopWalkState * * PARAMETERS: Thread - Current thread state * * RETURN: A WalkState object popped from the thread's stack * * DESCRIPTION: Remove and return the walkstate object that is at the head of * the walk stack for the given walk list. NULL indicates that * the list is empty. * ******************************************************************************/ ACPI_WALK_STATE * AcpiDsPopWalkState ( ACPI_THREAD_STATE *Thread) { ACPI_WALK_STATE *WalkState; ACPI_FUNCTION_TRACE (DsPopWalkState); WalkState = Thread->WalkStateList; if (WalkState) { /* Next walk state becomes the current walk state */ Thread->WalkStateList = WalkState->Next; /* * Don't clear the NEXT field, this serves as an indicator * that there is a parent WALK STATE * Do Not: WalkState->Next = NULL; */ } return_PTR (WalkState); } /******************************************************************************* * * FUNCTION: AcpiDsCreateWalkState * * PARAMETERS: OwnerId - ID for object creation * Origin - Starting point for this walk * MethodDesc - Method object * Thread - Current thread state * * RETURN: Pointer to the new walk state. * * DESCRIPTION: Allocate and initialize a new walk state. The current walk * state is set to this new state. * ******************************************************************************/ ACPI_WALK_STATE * AcpiDsCreateWalkState ( ACPI_OWNER_ID OwnerId, ACPI_PARSE_OBJECT *Origin, ACPI_OPERAND_OBJECT *MethodDesc, ACPI_THREAD_STATE *Thread) { ACPI_WALK_STATE *WalkState; ACPI_FUNCTION_TRACE (DsCreateWalkState); WalkState = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_WALK_STATE)); if (!WalkState) { return_PTR (NULL); } WalkState->DescriptorType = ACPI_DESC_TYPE_WALK; WalkState->MethodDesc = MethodDesc; WalkState->OwnerId = OwnerId; WalkState->Origin = Origin; WalkState->Thread = Thread; WalkState->ParserState.StartOp = Origin; /* Init the method args/local */ #ifndef ACPI_CONSTANT_EVAL_ONLY AcpiDsMethodDataInit (WalkState); #endif /* Put the new state at the head of the walk list */ if (Thread) { AcpiDsPushWalkState (WalkState, Thread); } return_PTR (WalkState); } /******************************************************************************* * * FUNCTION: AcpiDsInitAmlWalk * * PARAMETERS: WalkState - New state to be initialized * Op - Current parse op * MethodNode - Control method NS node, if any * AmlStart - Start of AML * AmlLength - Length of AML * Info - Method info block (params, etc.) * PassNumber - 1, 2, or 3 * * RETURN: Status * * DESCRIPTION: Initialize a walk state for a pass 1 or 2 parse tree walk * ******************************************************************************/ ACPI_STATUS AcpiDsInitAmlWalk ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE *MethodNode, UINT8 *AmlStart, UINT32 AmlLength, ACPI_EVALUATE_INFO *Info, UINT8 PassNumber) { ACPI_STATUS Status; ACPI_PARSE_STATE *ParserState = &WalkState->ParserState; ACPI_PARSE_OBJECT *ExtraOp; ACPI_FUNCTION_TRACE (DsInitAmlWalk); WalkState->ParserState.Aml = WalkState->ParserState.AmlStart = WalkState->ParserState.AmlEnd = WalkState->ParserState.PkgEnd = AmlStart; /* Avoid undefined behavior: applying zero offset to null pointer */ if (AmlLength != 0) { WalkState->ParserState.AmlEnd += AmlLength; WalkState->ParserState.PkgEnd += AmlLength; } /* The NextOp of the NextWalk will be the beginning of the method */ WalkState->NextOp = NULL; WalkState->PassNumber = PassNumber; if (Info) { WalkState->Params = Info->Parameters; WalkState->CallerReturnDesc = &Info->ReturnObject; } Status = AcpiPsInitScope (&WalkState->ParserState, Op); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (MethodNode) { WalkState->ParserState.StartNode = MethodNode; WalkState->WalkType = ACPI_WALK_METHOD; WalkState->MethodNode = MethodNode; WalkState->MethodDesc = AcpiNsGetAttachedObject (MethodNode); /* Push start scope on scope stack and make it current */ Status = AcpiDsScopeStackPush ( MethodNode, ACPI_TYPE_METHOD, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Init the method arguments */ Status = AcpiDsMethodDataInitArgs (WalkState->Params, ACPI_METHOD_NUM_ARGS, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } else { /* * Setup the current scope. * Find a Named Op that has a namespace node associated with it. * search upwards from this Op. Current scope is the first * Op with a namespace node. */ ExtraOp = ParserState->StartOp; while (ExtraOp && !ExtraOp->Common.Node) { ExtraOp = ExtraOp->Common.Parent; } if (!ExtraOp) { ParserState->StartNode = NULL; } else { ParserState->StartNode = ExtraOp->Common.Node; } if (ParserState->StartNode) { /* Push start scope on scope stack and make it current */ Status = AcpiDsScopeStackPush (ParserState->StartNode, ParserState->StartNode->Type, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } } Status = AcpiDsInitCallbacks (WalkState, PassNumber); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiDsDeleteWalkState * * PARAMETERS: WalkState - State to delete * * RETURN: Status * * DESCRIPTION: Delete a walk state including all internal data structures * ******************************************************************************/ void AcpiDsDeleteWalkState ( ACPI_WALK_STATE *WalkState) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_TRACE_PTR (DsDeleteWalkState, WalkState); if (!WalkState) { return_VOID; } if (WalkState->DescriptorType != ACPI_DESC_TYPE_WALK) { ACPI_ERROR ((AE_INFO, "%p is not a valid walk state", WalkState)); return_VOID; } /* There should not be any open scopes */ if (WalkState->ParserState.Scope) { ACPI_ERROR ((AE_INFO, "%p walk still has a scope list", WalkState)); AcpiPsCleanupScope (&WalkState->ParserState); } /* Always must free any linked control states */ while (WalkState->ControlState) { State = WalkState->ControlState; WalkState->ControlState = State->Common.Next; AcpiUtDeleteGenericState (State); } /* Always must free any linked parse states */ while (WalkState->ScopeInfo) { State = WalkState->ScopeInfo; WalkState->ScopeInfo = State->Common.Next; AcpiUtDeleteGenericState (State); } /* Always must free any stacked result states */ while (WalkState->Results) { State = WalkState->Results; WalkState->Results = State->Common.Next; AcpiUtDeleteGenericState (State); } ACPI_FREE (WalkState); return_VOID; } src/acpica/source/components/events/000077500000000000000000000000001465205512700200655ustar00rootroot00000000000000src/acpica/source/components/events/evevent.c000066400000000000000000000372201465205512700217110ustar00rootroot00000000000000/****************************************************************************** * * Module Name: evevent - Fixed Event handling and dispatch * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acevents.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evevent") #if (!ACPI_REDUCED_HARDWARE) /* Entire module */ /* Local prototypes */ static ACPI_STATUS AcpiEvFixedEventInitialize ( void); static UINT32 AcpiEvFixedEventDispatch ( UINT32 Event); /******************************************************************************* * * FUNCTION: AcpiEvInitializeEvents * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Initialize global data structures for ACPI events (Fixed, GPE) * ******************************************************************************/ ACPI_STATUS AcpiEvInitializeEvents ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (EvInitializeEvents); /* If Hardware Reduced flag is set, there are no fixed events */ if (AcpiGbl_ReducedHardware) { return_ACPI_STATUS (AE_OK); } /* * Initialize the Fixed and General Purpose Events. This is done prior to * enabling SCIs to prevent interrupts from occurring before the handlers * are installed. */ Status = AcpiEvFixedEventInitialize (); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Unable to initialize fixed events")); return_ACPI_STATUS (Status); } Status = AcpiEvGpeInitialize (); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Unable to initialize general purpose events")); return_ACPI_STATUS (Status); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvInstallXruptHandlers * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Install interrupt handlers for the SCI and Global Lock * ******************************************************************************/ ACPI_STATUS AcpiEvInstallXruptHandlers ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (EvInstallXruptHandlers); /* If Hardware Reduced flag is set, there is no ACPI h/w */ if (AcpiGbl_ReducedHardware) { return_ACPI_STATUS (AE_OK); } /* Install the SCI handler */ Status = AcpiEvInstallSciHandler (); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Unable to install System Control Interrupt handler")); return_ACPI_STATUS (Status); } /* Install the handler for the Global Lock */ Status = AcpiEvInitGlobalLockHandler (); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Unable to initialize Global Lock handler")); return_ACPI_STATUS (Status); } AcpiGbl_EventsInitialized = TRUE; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvFixedEventInitialize * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Install the fixed event handlers and disable all fixed events. * ******************************************************************************/ static ACPI_STATUS AcpiEvFixedEventInitialize ( void) { UINT32 i; ACPI_STATUS Status; /* * Initialize the structure that keeps track of fixed event handlers and * disable all of the fixed events. */ for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) { AcpiGbl_FixedEventHandlers[i].Handler = NULL; AcpiGbl_FixedEventHandlers[i].Context = NULL; /* Disable the fixed event */ if (AcpiGbl_FixedEventInfo[i].EnableRegisterId != 0xFF) { Status = AcpiWriteBitRegister ( AcpiGbl_FixedEventInfo[i].EnableRegisterId, ACPI_DISABLE_EVENT); if (ACPI_FAILURE (Status)) { return (Status); } } } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvFixedEventDetect * * PARAMETERS: None * * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED * * DESCRIPTION: Checks the PM status register for active fixed events * ******************************************************************************/ UINT32 AcpiEvFixedEventDetect ( void) { UINT32 IntStatus = ACPI_INTERRUPT_NOT_HANDLED; UINT32 FixedStatus; UINT32 FixedEnable; UINT32 i; ACPI_STATUS Status; ACPI_FUNCTION_NAME (EvFixedEventDetect); /* * Read the fixed feature status and enable registers, as all the cases * depend on their values. Ignore errors here. */ Status = AcpiHwRegisterRead (ACPI_REGISTER_PM1_STATUS, &FixedStatus); Status |= AcpiHwRegisterRead (ACPI_REGISTER_PM1_ENABLE, &FixedEnable); if (ACPI_FAILURE (Status)) { return (IntStatus); } ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS, "Fixed Event Block: Enable %08X Status %08X\n", FixedEnable, FixedStatus)); /* * Check for all possible Fixed Events and dispatch those that are active */ for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) { /* Both the status and enable bits must be on for this event */ if ((FixedStatus & AcpiGbl_FixedEventInfo[i].StatusBitMask) && (FixedEnable & AcpiGbl_FixedEventInfo[i].EnableBitMask)) { /* * Found an active (signalled) event. Invoke global event * handler if present. */ AcpiFixedEventCount[i]++; if (AcpiGbl_GlobalEventHandler) { AcpiGbl_GlobalEventHandler (ACPI_EVENT_TYPE_FIXED, NULL, i, AcpiGbl_GlobalEventHandlerContext); } IntStatus |= AcpiEvFixedEventDispatch (i); } } return (IntStatus); } /******************************************************************************* * * FUNCTION: AcpiEvFixedEventDispatch * * PARAMETERS: Event - Event type * * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED * * DESCRIPTION: Clears the status bit for the requested event, calls the * handler that previously registered for the event. * NOTE: If there is no handler for the event, the event is * disabled to prevent further interrupts. * ******************************************************************************/ static UINT32 AcpiEvFixedEventDispatch ( UINT32 Event) { ACPI_FUNCTION_ENTRY (); /* Clear the status bit */ (void) AcpiWriteBitRegister ( AcpiGbl_FixedEventInfo[Event].StatusRegisterId, ACPI_CLEAR_STATUS); /* * Make sure that a handler exists. If not, report an error * and disable the event to prevent further interrupts. */ if (!AcpiGbl_FixedEventHandlers[Event].Handler) { (void) AcpiWriteBitRegister ( AcpiGbl_FixedEventInfo[Event].EnableRegisterId, ACPI_DISABLE_EVENT); ACPI_ERROR ((AE_INFO, "No installed handler for fixed event - %s (%u), disabling", AcpiUtGetEventName (Event), Event)); return (ACPI_INTERRUPT_NOT_HANDLED); } /* Invoke the Fixed Event handler */ return ((AcpiGbl_FixedEventHandlers[Event].Handler)( AcpiGbl_FixedEventHandlers[Event].Context)); } #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/events/evglock.c000066400000000000000000000423451465205512700216730ustar00rootroot00000000000000/****************************************************************************** * * Module Name: evglock - Global Lock support * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acevents.h" #include "acinterp.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evglock") #if (!ACPI_REDUCED_HARDWARE) /* Entire module */ /* Local prototypes */ static UINT32 AcpiEvGlobalLockHandler ( void *Context); /******************************************************************************* * * FUNCTION: AcpiEvInitGlobalLockHandler * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Install a handler for the global lock release event * ******************************************************************************/ ACPI_STATUS AcpiEvInitGlobalLockHandler ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (EvInitGlobalLockHandler); /* If Hardware Reduced flag is set, there is no global lock */ if (AcpiGbl_ReducedHardware) { return_ACPI_STATUS (AE_OK); } /* Attempt installation of the global lock handler */ Status = AcpiInstallFixedEventHandler (ACPI_EVENT_GLOBAL, AcpiEvGlobalLockHandler, NULL); /* * If the global lock does not exist on this platform, the attempt to * enable GBL_STATUS will fail (the GBL_ENABLE bit will not stick). * Map to AE_OK, but mark global lock as not present. Any attempt to * actually use the global lock will be flagged with an error. */ AcpiGbl_GlobalLockPresent = FALSE; if (Status == AE_NO_HARDWARE_RESPONSE) { ACPI_ERROR ((AE_INFO, "No response from Global Lock hardware, disabling lock")); return_ACPI_STATUS (AE_OK); } Status = AcpiOsCreateLock (&AcpiGbl_GlobalLockPendingLock); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } AcpiGbl_GlobalLockPending = FALSE; AcpiGbl_GlobalLockPresent = TRUE; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvRemoveGlobalLockHandler * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Remove the handler for the Global Lock * ******************************************************************************/ ACPI_STATUS AcpiEvRemoveGlobalLockHandler ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (EvRemoveGlobalLockHandler); AcpiGbl_GlobalLockPresent = FALSE; Status = AcpiRemoveFixedEventHandler (ACPI_EVENT_GLOBAL, AcpiEvGlobalLockHandler); AcpiOsDeleteLock (AcpiGbl_GlobalLockPendingLock); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvGlobalLockHandler * * PARAMETERS: Context - From thread interface, not used * * RETURN: ACPI_INTERRUPT_HANDLED * * DESCRIPTION: Invoked directly from the SCI handler when a global lock * release interrupt occurs. If there is actually a pending * request for the lock, signal the waiting thread. * ******************************************************************************/ static UINT32 AcpiEvGlobalLockHandler ( void *Context) { ACPI_STATUS Status; ACPI_CPU_FLAGS Flags; Flags = AcpiOsAcquireLock (AcpiGbl_GlobalLockPendingLock); /* * If a request for the global lock is not actually pending, * we are done. This handles "spurious" global lock interrupts * which are possible (and have been seen) with bad BIOSs. */ if (!AcpiGbl_GlobalLockPending) { goto CleanupAndExit; } /* * Send a unit to the global lock semaphore. The actual acquisition * of the global lock will be performed by the waiting thread. */ Status = AcpiOsSignalSemaphore (AcpiGbl_GlobalLockSemaphore, 1); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Could not signal Global Lock semaphore")); } AcpiGbl_GlobalLockPending = FALSE; CleanupAndExit: AcpiOsReleaseLock (AcpiGbl_GlobalLockPendingLock, Flags); return (ACPI_INTERRUPT_HANDLED); } /****************************************************************************** * * FUNCTION: AcpiEvAcquireGlobalLock * * PARAMETERS: Timeout - Max time to wait for the lock, in millisec. * * RETURN: Status * * DESCRIPTION: Attempt to gain ownership of the Global Lock. * * MUTEX: Interpreter must be locked * * Note: The original implementation allowed multiple threads to "acquire" the * Global Lock, and the OS would hold the lock until the last thread had * released it. However, this could potentially starve the BIOS out of the * lock, especially in the case where there is a tight handshake between the * Embedded Controller driver and the BIOS. Therefore, this implementation * allows only one thread to acquire the HW Global Lock at a time, and makes * the global lock appear as a standard mutex on the OS side. * *****************************************************************************/ ACPI_STATUS AcpiEvAcquireGlobalLock ( UINT16 Timeout) { ACPI_CPU_FLAGS Flags; ACPI_STATUS Status; BOOLEAN Acquired = FALSE; ACPI_FUNCTION_TRACE (EvAcquireGlobalLock); /* * Only one thread can acquire the GL at a time, the GlobalLockMutex * enforces this. This interface releases the interpreter if we must wait. */ Status = AcpiExSystemWaitMutex (AcpiGbl_GlobalLockMutex->Mutex.OsMutex, Timeout); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Update the global lock handle and check for wraparound. The handle is * only used for the external global lock interfaces, but it is updated * here to properly handle the case where a single thread may acquire the * lock via both the AML and the AcpiAcquireGlobalLock interfaces. The * handle is therefore updated on the first acquire from a given thread * regardless of where the acquisition request originated. */ AcpiGbl_GlobalLockHandle++; if (AcpiGbl_GlobalLockHandle == 0) { AcpiGbl_GlobalLockHandle = 1; } /* * Make sure that a global lock actually exists. If not, just * treat the lock as a standard mutex. */ if (!AcpiGbl_GlobalLockPresent) { AcpiGbl_GlobalLockAcquired = TRUE; return_ACPI_STATUS (AE_OK); } Flags = AcpiOsAcquireLock (AcpiGbl_GlobalLockPendingLock); do { /* Attempt to acquire the actual hardware lock */ ACPI_ACQUIRE_GLOBAL_LOCK (AcpiGbl_FACS, Acquired); if (Acquired) { AcpiGbl_GlobalLockAcquired = TRUE; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Acquired hardware Global Lock\n")); break; } /* * Did not get the lock. The pending bit was set above, and * we must now wait until we receive the global lock * released interrupt. */ AcpiGbl_GlobalLockPending = TRUE; AcpiOsReleaseLock (AcpiGbl_GlobalLockPendingLock, Flags); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Waiting for hardware Global Lock\n")); /* * Wait for handshake with the global lock interrupt handler. * This interface releases the interpreter if we must wait. */ Status = AcpiExSystemWaitSemaphore ( AcpiGbl_GlobalLockSemaphore, ACPI_WAIT_FOREVER); Flags = AcpiOsAcquireLock (AcpiGbl_GlobalLockPendingLock); } while (ACPI_SUCCESS (Status)); AcpiGbl_GlobalLockPending = FALSE; AcpiOsReleaseLock (AcpiGbl_GlobalLockPendingLock, Flags); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvReleaseGlobalLock * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Releases ownership of the Global Lock. * ******************************************************************************/ ACPI_STATUS AcpiEvReleaseGlobalLock ( void) { BOOLEAN Pending = FALSE; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (EvReleaseGlobalLock); /* Lock must be already acquired */ if (!AcpiGbl_GlobalLockAcquired) { ACPI_WARNING ((AE_INFO, "Cannot release the ACPI Global Lock, it has not been acquired")); return_ACPI_STATUS (AE_NOT_ACQUIRED); } if (AcpiGbl_GlobalLockPresent) { /* Allow any thread to release the lock */ ACPI_RELEASE_GLOBAL_LOCK (AcpiGbl_FACS, Pending); /* * If the pending bit was set, we must write GBL_RLS to the control * register */ if (Pending) { Status = AcpiWriteBitRegister ( ACPI_BITREG_GLOBAL_LOCK_RELEASE, ACPI_ENABLE_EVENT); } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Released hardware Global Lock\n")); } AcpiGbl_GlobalLockAcquired = FALSE; /* Release the local GL mutex */ AcpiOsReleaseMutex (AcpiGbl_GlobalLockMutex->Mutex.OsMutex); return_ACPI_STATUS (Status); } #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/events/evgpe.c000066400000000000000000001034551465205512700213470ustar00rootroot00000000000000/****************************************************************************** * * Module Name: evgpe - General Purpose Event handling and dispatch * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acevents.h" #include "acnamesp.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evgpe") #if (!ACPI_REDUCED_HARDWARE) /* Entire module */ /* Local prototypes */ static void ACPI_SYSTEM_XFACE AcpiEvAsynchExecuteGpeMethod ( void *Context); static void ACPI_SYSTEM_XFACE AcpiEvAsynchEnableGpe ( void *Context); /******************************************************************************* * * FUNCTION: AcpiEvUpdateGpeEnableMask * * PARAMETERS: GpeEventInfo - GPE to update * * RETURN: Status * * DESCRIPTION: Updates GPE register enable mask based upon whether there are * runtime references to this GPE * ******************************************************************************/ ACPI_STATUS AcpiEvUpdateGpeEnableMask ( ACPI_GPE_EVENT_INFO *GpeEventInfo) { ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; UINT32 RegisterBit; ACPI_FUNCTION_TRACE (EvUpdateGpeEnableMask); GpeRegisterInfo = GpeEventInfo->RegisterInfo; if (!GpeRegisterInfo) { return_ACPI_STATUS (AE_NOT_EXIST); } RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo); /* Clear the run bit up front */ ACPI_CLEAR_BIT (GpeRegisterInfo->EnableForRun, RegisterBit); /* Set the mask bit only if there are references to this GPE */ if (GpeEventInfo->RuntimeCount) { ACPI_SET_BIT (GpeRegisterInfo->EnableForRun, (UINT8) RegisterBit); } GpeRegisterInfo->EnableMask = GpeRegisterInfo->EnableForRun; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvEnableGpe * * PARAMETERS: GpeEventInfo - GPE to enable * * RETURN: Status * * DESCRIPTION: Enable a GPE. * ******************************************************************************/ ACPI_STATUS AcpiEvEnableGpe ( ACPI_GPE_EVENT_INFO *GpeEventInfo) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (EvEnableGpe); /* Enable the requested GPE */ Status = AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_ENABLE); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvMaskGpe * * PARAMETERS: GpeEventInfo - GPE to be blocked/unblocked * IsMasked - Whether the GPE is masked or not * * RETURN: Status * * DESCRIPTION: Unconditionally mask/unmask a GPE during runtime. * ******************************************************************************/ ACPI_STATUS AcpiEvMaskGpe ( ACPI_GPE_EVENT_INFO *GpeEventInfo, BOOLEAN IsMasked) { ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; UINT32 RegisterBit; ACPI_FUNCTION_TRACE (EvMaskGpe); GpeRegisterInfo = GpeEventInfo->RegisterInfo; if (!GpeRegisterInfo) { return_ACPI_STATUS (AE_NOT_EXIST); } RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo); /* Perform the action */ if (IsMasked) { if (RegisterBit & GpeRegisterInfo->MaskForRun) { return_ACPI_STATUS (AE_BAD_PARAMETER); } (void) AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_DISABLE); ACPI_SET_BIT (GpeRegisterInfo->MaskForRun, (UINT8) RegisterBit); } else { if (!(RegisterBit & GpeRegisterInfo->MaskForRun)) { return_ACPI_STATUS (AE_BAD_PARAMETER); } ACPI_CLEAR_BIT (GpeRegisterInfo->MaskForRun, (UINT8) RegisterBit); if (GpeEventInfo->RuntimeCount && !GpeEventInfo->DisableForDispatch) { (void) AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_ENABLE); } } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvAddGpeReference * * PARAMETERS: GpeEventInfo - Add a reference to this GPE * ClearOnEnable - Clear GPE status before enabling it * * RETURN: Status * * DESCRIPTION: Add a reference to a GPE. On the first reference, the GPE is * hardware-enabled. * ******************************************************************************/ ACPI_STATUS AcpiEvAddGpeReference ( ACPI_GPE_EVENT_INFO *GpeEventInfo, BOOLEAN ClearOnEnable) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (EvAddGpeReference); if (GpeEventInfo->RuntimeCount == ACPI_UINT8_MAX) { return_ACPI_STATUS (AE_LIMIT); } GpeEventInfo->RuntimeCount++; if (GpeEventInfo->RuntimeCount == 1) { /* Enable on first reference */ if (ClearOnEnable) { (void) AcpiHwClearGpe (GpeEventInfo); } Status = AcpiEvUpdateGpeEnableMask (GpeEventInfo); if (ACPI_SUCCESS (Status)) { Status = AcpiEvEnableGpe (GpeEventInfo); } if (ACPI_FAILURE (Status)) { GpeEventInfo->RuntimeCount--; } } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvRemoveGpeReference * * PARAMETERS: GpeEventInfo - Remove a reference to this GPE * * RETURN: Status * * DESCRIPTION: Remove a reference to a GPE. When the last reference is * removed, the GPE is hardware-disabled. * ******************************************************************************/ ACPI_STATUS AcpiEvRemoveGpeReference ( ACPI_GPE_EVENT_INFO *GpeEventInfo) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (EvRemoveGpeReference); if (!GpeEventInfo->RuntimeCount) { return_ACPI_STATUS (AE_LIMIT); } GpeEventInfo->RuntimeCount--; if (!GpeEventInfo->RuntimeCount) { /* Disable on last reference */ Status = AcpiEvUpdateGpeEnableMask (GpeEventInfo); if (ACPI_SUCCESS (Status)) { Status = AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_DISABLE); } if (ACPI_FAILURE (Status)) { GpeEventInfo->RuntimeCount++; } } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvLowGetGpeInfo * * PARAMETERS: GpeNumber - Raw GPE number * GpeBlock - A GPE info block * * RETURN: A GPE EventInfo struct. NULL if not a valid GPE (The GpeNumber * is not within the specified GPE block) * * DESCRIPTION: Returns the EventInfo struct associated with this GPE. This is * the low-level implementation of EvGetGpeEventInfo. * ******************************************************************************/ ACPI_GPE_EVENT_INFO * AcpiEvLowGetGpeInfo ( UINT32 GpeNumber, ACPI_GPE_BLOCK_INFO *GpeBlock) { UINT32 GpeIndex; /* * Validate that the GpeNumber is within the specified GpeBlock. * (Two steps) */ if (!GpeBlock || (GpeNumber < GpeBlock->BlockBaseNumber)) { return (NULL); } GpeIndex = GpeNumber - GpeBlock->BlockBaseNumber; if (GpeIndex >= GpeBlock->GpeCount) { return (NULL); } return (&GpeBlock->EventInfo[GpeIndex]); } /******************************************************************************* * * FUNCTION: AcpiEvGetGpeEventInfo * * PARAMETERS: GpeDevice - Device node. NULL for GPE0/GPE1 * GpeNumber - Raw GPE number * * RETURN: A GPE EventInfo struct. NULL if not a valid GPE * * DESCRIPTION: Returns the EventInfo struct associated with this GPE. * Validates the GpeBlock and the GpeNumber * * Should be called only when the GPE lists are semaphore locked * and not subject to change. * ******************************************************************************/ ACPI_GPE_EVENT_INFO * AcpiEvGetGpeEventInfo ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_GPE_EVENT_INFO *GpeInfo; UINT32 i; ACPI_FUNCTION_ENTRY (); /* A NULL GpeDevice means use the FADT-defined GPE block(s) */ if (!GpeDevice) { /* Examine GPE Block 0 and 1 (These blocks are permanent) */ for (i = 0; i < ACPI_MAX_GPE_BLOCKS; i++) { GpeInfo = AcpiEvLowGetGpeInfo (GpeNumber, AcpiGbl_GpeFadtBlocks[i]); if (GpeInfo) { return (GpeInfo); } } /* The GpeNumber was not in the range of either FADT GPE block */ return (NULL); } /* A Non-NULL GpeDevice means this is a GPE Block Device */ ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) GpeDevice); if (!ObjDesc || !ObjDesc->Device.GpeBlock) { return (NULL); } return (AcpiEvLowGetGpeInfo (GpeNumber, ObjDesc->Device.GpeBlock)); } /******************************************************************************* * * FUNCTION: AcpiEvGpeDetect * * PARAMETERS: GpeXruptList - Interrupt block for this interrupt. * Can have multiple GPE blocks attached. * * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED * * DESCRIPTION: Detect if any GP events have occurred. This function is * executed at interrupt level. * ******************************************************************************/ UINT32 AcpiEvGpeDetect ( ACPI_GPE_XRUPT_INFO *GpeXruptList) { ACPI_GPE_BLOCK_INFO *GpeBlock; ACPI_NAMESPACE_NODE *GpeDevice; ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; ACPI_GPE_EVENT_INFO *GpeEventInfo; UINT32 GpeNumber; UINT32 IntStatus = ACPI_INTERRUPT_NOT_HANDLED; ACPI_CPU_FLAGS Flags; UINT32 i; UINT32 j; ACPI_FUNCTION_NAME (EvGpeDetect); /* Check for the case where there are no GPEs */ if (!GpeXruptList) { return (IntStatus); } /* * We need to obtain the GPE lock for both the data structs and registers * Note: Not necessary to obtain the hardware lock, since the GPE * registers are owned by the GpeLock. */ Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* Examine all GPE blocks attached to this interrupt level */ GpeBlock = GpeXruptList->GpeBlockListHead; while (GpeBlock) { GpeDevice = GpeBlock->Node; /* * Read all of the 8-bit GPE status and enable registers in this GPE * block, saving all of them. Find all currently active GP events. */ for (i = 0; i < GpeBlock->RegisterCount; i++) { /* Get the next status/enable pair */ GpeRegisterInfo = &GpeBlock->RegisterInfo[i]; /* * Optimization: If there are no GPEs enabled within this * register, we can safely ignore the entire register. */ if (!(GpeRegisterInfo->EnableForRun | GpeRegisterInfo->EnableForWake)) { ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS, "Ignore disabled registers for GPE %02X-%02X: " "RunEnable=%02X, WakeEnable=%02X\n", GpeRegisterInfo->BaseGpeNumber, GpeRegisterInfo->BaseGpeNumber + (ACPI_GPE_REGISTER_WIDTH - 1), GpeRegisterInfo->EnableForRun, GpeRegisterInfo->EnableForWake)); continue; } /* Now look at the individual GPEs in this byte register */ for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) { /* Detect and dispatch one GPE bit */ GpeEventInfo = &GpeBlock->EventInfo[((ACPI_SIZE) i * ACPI_GPE_REGISTER_WIDTH) + j]; GpeNumber = j + GpeRegisterInfo->BaseGpeNumber; AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); IntStatus |= AcpiEvDetectGpe ( GpeDevice, GpeEventInfo, GpeNumber); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); } } GpeBlock = GpeBlock->Next; } AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return (IntStatus); } /******************************************************************************* * * FUNCTION: AcpiEvAsynchExecuteGpeMethod * * PARAMETERS: Context (GpeEventInfo) - Info for this GPE * * RETURN: None * * DESCRIPTION: Perform the actual execution of a GPE control method. This * function is called from an invocation of AcpiOsExecute and * therefore does NOT execute at interrupt level - so that * the control method itself is not executed in the context of * an interrupt handler. * ******************************************************************************/ static void ACPI_SYSTEM_XFACE AcpiEvAsynchExecuteGpeMethod ( void *Context) { ACPI_GPE_EVENT_INFO *GpeEventInfo = Context; ACPI_STATUS Status = AE_OK; ACPI_EVALUATE_INFO *Info; ACPI_GPE_NOTIFY_INFO *Notify; ACPI_FUNCTION_TRACE (EvAsynchExecuteGpeMethod); /* Do the correct dispatch - normal method or implicit notify */ switch (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags)) { case ACPI_GPE_DISPATCH_NOTIFY: /* * Implicit notify. * Dispatch a DEVICE_WAKE notify to the appropriate handler. * NOTE: the request is queued for execution after this method * 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. */ Notify = GpeEventInfo->Dispatch.NotifyList; while (ACPI_SUCCESS (Status) && Notify) { Status = AcpiEvQueueNotifyRequest ( Notify->DeviceNode, ACPI_NOTIFY_DEVICE_WAKE); Notify = Notify->Next; } break; case ACPI_GPE_DISPATCH_METHOD: /* Allocate the evaluation information block */ Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); if (!Info) { Status = AE_NO_MEMORY; } else { /* * Invoke the GPE Method (_Lxx, _Exx) i.e., evaluate the * _Lxx/_Exx control method that corresponds to this GPE */ Info->PrefixNode = GpeEventInfo->Dispatch.MethodNode; Info->Flags = ACPI_IGNORE_RETURN_VALUE; Status = AcpiNsEvaluate (Info); ACPI_FREE (Info); } if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "while evaluating GPE method [%4.4s]", AcpiUtGetNodeName (GpeEventInfo->Dispatch.MethodNode))); } break; default: goto ErrorExit; /* Should never happen */ } /* Defer enabling of GPE until all notify handlers are done */ Status = AcpiOsExecute (OSL_NOTIFY_HANDLER, AcpiEvAsynchEnableGpe, GpeEventInfo); if (ACPI_SUCCESS (Status)) { return_VOID; } ErrorExit: AcpiEvAsynchEnableGpe (GpeEventInfo); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiEvAsynchEnableGpe * * PARAMETERS: Context (GpeEventInfo) - Info for this GPE * Callback from AcpiOsExecute * * RETURN: None * * DESCRIPTION: Asynchronous clear/enable for GPE. This allows the GPE to * complete (i.e., finish execution of Notify) * ******************************************************************************/ static void ACPI_SYSTEM_XFACE AcpiEvAsynchEnableGpe ( void *Context) { ACPI_GPE_EVENT_INFO *GpeEventInfo = Context; ACPI_CPU_FLAGS Flags; Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); (void) AcpiEvFinishGpe (GpeEventInfo); AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return; } /******************************************************************************* * * FUNCTION: AcpiEvFinishGpe * * PARAMETERS: GpeEventInfo - Info for this GPE * * RETURN: Status * * DESCRIPTION: Clear/Enable a GPE. Common code that is used after execution * of a GPE method or a synchronous or asynchronous GPE handler. * ******************************************************************************/ ACPI_STATUS AcpiEvFinishGpe ( ACPI_GPE_EVENT_INFO *GpeEventInfo) { ACPI_STATUS Status; if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_LEVEL_TRIGGERED) { /* * GPE is level-triggered, we clear the GPE status bit after * handling the event. */ Status = AcpiHwClearGpe (GpeEventInfo); if (ACPI_FAILURE (Status)) { return (Status); } } /* * Enable this GPE, conditionally. This means that the GPE will * only be physically enabled if the EnableMask bit is set * in the EventInfo. */ (void) AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_CONDITIONAL_ENABLE); GpeEventInfo->DisableForDispatch = FALSE; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvDetectGpe * * PARAMETERS: GpeDevice - Device node. NULL for GPE0/GPE1 * GpeEventInfo - Info for this GPE * GpeNumber - Number relative to the parent GPE block * * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED * * DESCRIPTION: Detect and dispatch a General Purpose Event to either a function * (e.g. EC) or method (e.g. _Lxx/_Exx) handler. * NOTE: GPE is W1C, so it is possible to handle a single GPE from both * task and irq context in parallel as long as the process to * detect and mask the GPE is atomic. * However the atomicity of ACPI_GPE_DISPATCH_RAW_HANDLER is * dependent on the raw handler itself. * ******************************************************************************/ UINT32 AcpiEvDetectGpe ( ACPI_NAMESPACE_NODE *GpeDevice, ACPI_GPE_EVENT_INFO *GpeEventInfo, UINT32 GpeNumber) { UINT32 IntStatus = ACPI_INTERRUPT_NOT_HANDLED; UINT8 EnabledStatusByte; UINT64 StatusReg; UINT64 EnableReg; UINT32 RegisterBit; ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; ACPI_GPE_HANDLER_INFO *GpeHandlerInfo; ACPI_CPU_FLAGS Flags; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (EvGpeDetect); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); if (!GpeEventInfo) { GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); if (!GpeEventInfo) { goto ErrorExit; } } /* Get the info block for the entire GPE register */ GpeRegisterInfo = GpeEventInfo->RegisterInfo; /* Get the register bitmask for this GPE */ RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo); /* GPE currently enabled (enable bit == 1)? */ Status = AcpiHwRead (&EnableReg, &GpeRegisterInfo->EnableAddress); if (ACPI_FAILURE (Status)) { goto ErrorExit; } /* GPE currently active (status bit == 1)? */ Status = AcpiHwRead (&StatusReg, &GpeRegisterInfo->StatusAddress); if (ACPI_FAILURE (Status)) { goto ErrorExit; } /* Check if there is anything active at all in this GPE */ ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS, "Read registers for GPE %02X: Status=%02X, Enable=%02X, " "RunEnable=%02X, WakeEnable=%02X\n", GpeNumber, (UINT32) (StatusReg & RegisterBit), (UINT32) (EnableReg & RegisterBit), GpeRegisterInfo->EnableForRun, GpeRegisterInfo->EnableForWake)); EnabledStatusByte = (UINT8) (StatusReg & EnableReg); if (!(EnabledStatusByte & RegisterBit)) { goto ErrorExit; } /* Invoke global event handler if present */ AcpiGpeCount++; if (AcpiGbl_GlobalEventHandler) { AcpiGbl_GlobalEventHandler (ACPI_EVENT_TYPE_GPE, GpeDevice, GpeNumber, AcpiGbl_GlobalEventHandlerContext); } /* Found an active GPE */ if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == ACPI_GPE_DISPATCH_RAW_HANDLER) { /* Dispatch the event to a raw handler */ GpeHandlerInfo = GpeEventInfo->Dispatch.Handler; /* * There is no protection around the namespace node * and the GPE handler to ensure a safe destruction * because: * 1. The namespace node is expected to always * exist after loading a table. * 2. The GPE handler is expected to be flushed by * AcpiOsWaitEventsComplete() before the * destruction. */ AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); IntStatus |= GpeHandlerInfo->Address ( GpeDevice, GpeNumber, GpeHandlerInfo->Context); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); } else { /* Dispatch the event to a standard handler or method. */ IntStatus |= AcpiEvGpeDispatch (GpeDevice, GpeEventInfo, GpeNumber); } ErrorExit: AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return (IntStatus); } /******************************************************************************* * * FUNCTION: AcpiEvGpeDispatch * * PARAMETERS: GpeDevice - Device node. NULL for GPE0/GPE1 * GpeEventInfo - Info for this GPE * GpeNumber - Number relative to the parent GPE block * * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED * * DESCRIPTION: Dispatch a General Purpose Event to either a function (e.g. EC) * or method (e.g. _Lxx/_Exx) handler. * ******************************************************************************/ UINT32 AcpiEvGpeDispatch ( ACPI_NAMESPACE_NODE *GpeDevice, ACPI_GPE_EVENT_INFO *GpeEventInfo, UINT32 GpeNumber) { ACPI_STATUS Status; UINT32 ReturnValue; ACPI_FUNCTION_TRACE (EvGpeDispatch); /* * Always disable the GPE so that it does not keep firing before * any asynchronous activity completes (either from the execution * of a GPE method or an asynchronous GPE handler.) * * If there is no handler or method to run, just disable the * GPE and leave it disabled permanently to prevent further such * pointless events from firing. */ Status = AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_DISABLE); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Unable to disable GPE %02X", GpeNumber)); return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED); } /* * If edge-triggered, clear the GPE status bit now. Note that * level-triggered events are cleared after the GPE is serviced. */ if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_EDGE_TRIGGERED) { Status = AcpiHwClearGpe (GpeEventInfo); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Unable to clear GPE %02X", GpeNumber)); (void) AcpiHwLowSetGpe ( GpeEventInfo, ACPI_GPE_CONDITIONAL_ENABLE); return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED); } } GpeEventInfo->DisableForDispatch = TRUE; /* * Dispatch the GPE to either an installed handler or the control * method associated with this GPE (_Lxx or _Exx). If a handler * exists, we invoke it and do not attempt to run the method. * If there is neither a handler nor a method, leave the GPE * disabled. */ switch (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags)) { case ACPI_GPE_DISPATCH_HANDLER: /* Invoke the installed handler (at interrupt level) */ ReturnValue = GpeEventInfo->Dispatch.Handler->Address ( GpeDevice, GpeNumber, GpeEventInfo->Dispatch.Handler->Context); /* If requested, clear (if level-triggered) and re-enable the GPE */ if (ReturnValue & ACPI_REENABLE_GPE) { (void) AcpiEvFinishGpe (GpeEventInfo); } break; case ACPI_GPE_DISPATCH_METHOD: case ACPI_GPE_DISPATCH_NOTIFY: /* * Execute the method associated with the GPE * NOTE: Level-triggered GPEs are cleared after the method completes. */ Status = AcpiOsExecute (OSL_GPE_HANDLER, AcpiEvAsynchExecuteGpeMethod, GpeEventInfo); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Unable to queue handler for GPE %02X - event disabled", GpeNumber)); } break; default: /* * No handler or method to run! * 03/2010: This case should no longer be possible. We will not allow * a GPE to be enabled if it has no handler or method. */ ACPI_ERROR ((AE_INFO, "No handler or method for GPE %02X, disabling event", GpeNumber)); break; } return_UINT32 (ACPI_INTERRUPT_HANDLED); } #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/events/evgpeblk.c000066400000000000000000000551131465205512700220350ustar00rootroot00000000000000/****************************************************************************** * * Module Name: evgpeblk - GPE block creation and initialization. * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acevents.h" #include "acnamesp.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evgpeblk") #if (!ACPI_REDUCED_HARDWARE) /* Entire module */ /* Local prototypes */ static ACPI_STATUS AcpiEvInstallGpeBlock ( ACPI_GPE_BLOCK_INFO *GpeBlock, UINT32 InterruptNumber); static ACPI_STATUS AcpiEvCreateGpeInfoBlocks ( ACPI_GPE_BLOCK_INFO *GpeBlock); /******************************************************************************* * * FUNCTION: AcpiEvInstallGpeBlock * * PARAMETERS: GpeBlock - New GPE block * InterruptNumber - Xrupt to be associated with this * GPE block * * RETURN: Status * * DESCRIPTION: Install new GPE block with mutex support * ******************************************************************************/ static ACPI_STATUS AcpiEvInstallGpeBlock ( ACPI_GPE_BLOCK_INFO *GpeBlock, UINT32 InterruptNumber) { ACPI_GPE_BLOCK_INFO *NextGpeBlock; ACPI_GPE_XRUPT_INFO *GpeXruptBlock; ACPI_STATUS Status; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (EvInstallGpeBlock); Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiEvGetGpeXruptBlock (InterruptNumber, &GpeXruptBlock); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; } /* Install the new block at the end of the list with lock */ Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); if (GpeXruptBlock->GpeBlockListHead) { NextGpeBlock = GpeXruptBlock->GpeBlockListHead; while (NextGpeBlock->Next) { NextGpeBlock = NextGpeBlock->Next; } NextGpeBlock->Next = GpeBlock; GpeBlock->Previous = NextGpeBlock; } else { GpeXruptBlock->GpeBlockListHead = GpeBlock; } GpeBlock->XruptBlock = GpeXruptBlock; AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvDeleteGpeBlock * * PARAMETERS: GpeBlock - Existing GPE block * * RETURN: Status * * DESCRIPTION: Remove a GPE block * ******************************************************************************/ ACPI_STATUS AcpiEvDeleteGpeBlock ( ACPI_GPE_BLOCK_INFO *GpeBlock) { ACPI_STATUS Status; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (EvInstallGpeBlock); Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Disable all GPEs in this block */ Status = AcpiHwDisableGpeBlock (GpeBlock->XruptBlock, GpeBlock, NULL); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (!GpeBlock->Previous && !GpeBlock->Next) { /* This is the last GpeBlock on this interrupt */ Status = AcpiEvDeleteGpeXrupt (GpeBlock->XruptBlock); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; } } else { /* Remove the block on this interrupt with lock */ Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); if (GpeBlock->Previous) { GpeBlock->Previous->Next = GpeBlock->Next; } else { GpeBlock->XruptBlock->GpeBlockListHead = GpeBlock->Next; } if (GpeBlock->Next) { GpeBlock->Next->Previous = GpeBlock->Previous; } AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); } AcpiCurrentGpeCount -= GpeBlock->GpeCount; /* Free the GpeBlock */ ACPI_FREE (GpeBlock->RegisterInfo); ACPI_FREE (GpeBlock->EventInfo); ACPI_FREE (GpeBlock); UnlockAndExit: Status = AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvCreateGpeInfoBlocks * * PARAMETERS: GpeBlock - New GPE block * * RETURN: Status * * DESCRIPTION: Create the RegisterInfo and EventInfo blocks for this GPE block * ******************************************************************************/ static ACPI_STATUS AcpiEvCreateGpeInfoBlocks ( ACPI_GPE_BLOCK_INFO *GpeBlock) { ACPI_GPE_REGISTER_INFO *GpeRegisterInfo = NULL; ACPI_GPE_EVENT_INFO *GpeEventInfo = NULL; ACPI_GPE_EVENT_INFO *ThisEvent; ACPI_GPE_REGISTER_INFO *ThisRegister; UINT32 i; UINT32 j; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (EvCreateGpeInfoBlocks); /* Allocate the GPE register information block */ GpeRegisterInfo = ACPI_ALLOCATE_ZEROED ( (ACPI_SIZE) GpeBlock->RegisterCount * sizeof (ACPI_GPE_REGISTER_INFO)); if (!GpeRegisterInfo) { ACPI_ERROR ((AE_INFO, "Could not allocate the GpeRegisterInfo table")); return_ACPI_STATUS (AE_NO_MEMORY); } /* * Allocate the GPE EventInfo block. There are eight distinct GPEs * per register. Initialization to zeros is sufficient. */ GpeEventInfo = ACPI_ALLOCATE_ZEROED ((ACPI_SIZE) GpeBlock->GpeCount * sizeof (ACPI_GPE_EVENT_INFO)); if (!GpeEventInfo) { ACPI_ERROR ((AE_INFO, "Could not allocate the GpeEventInfo table")); Status = AE_NO_MEMORY; goto ErrorExit; } /* Save the new Info arrays in the GPE block */ GpeBlock->RegisterInfo = GpeRegisterInfo; GpeBlock->EventInfo = GpeEventInfo; /* * Initialize the GPE Register and Event structures. A goal of these * tables is to hide the fact that there are two separate GPE register * sets in a given GPE hardware block, the status registers occupy the * first half, and the enable registers occupy the second half. */ ThisRegister = GpeRegisterInfo; ThisEvent = GpeEventInfo; for (i = 0; i < GpeBlock->RegisterCount; i++) { /* Init the RegisterInfo for this GPE register (8 GPEs) */ ThisRegister->BaseGpeNumber = (UINT16) (GpeBlock->BlockBaseNumber + (i * ACPI_GPE_REGISTER_WIDTH)); ThisRegister->StatusAddress.Address = GpeBlock->Address + i; ThisRegister->EnableAddress.Address = GpeBlock->Address + i + GpeBlock->RegisterCount; ThisRegister->StatusAddress.SpaceId = GpeBlock->SpaceId; ThisRegister->EnableAddress.SpaceId = GpeBlock->SpaceId; ThisRegister->StatusAddress.BitWidth = ACPI_GPE_REGISTER_WIDTH; ThisRegister->EnableAddress.BitWidth = ACPI_GPE_REGISTER_WIDTH; ThisRegister->StatusAddress.BitOffset = 0; ThisRegister->EnableAddress.BitOffset = 0; /* Init the EventInfo for each GPE within this register */ for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) { ThisEvent->GpeNumber = (UINT8) (ThisRegister->BaseGpeNumber + j); ThisEvent->RegisterInfo = ThisRegister; ThisEvent++; } /* Disable all GPEs within this register */ Status = AcpiHwWrite (0x00, &ThisRegister->EnableAddress); if (ACPI_FAILURE (Status)) { goto ErrorExit; } /* Clear any pending GPE events within this register */ Status = AcpiHwWrite (0xFF, &ThisRegister->StatusAddress); if (ACPI_FAILURE (Status)) { goto ErrorExit; } ThisRegister++; } return_ACPI_STATUS (AE_OK); ErrorExit: if (GpeRegisterInfo) { ACPI_FREE (GpeRegisterInfo); } if (GpeEventInfo) { ACPI_FREE (GpeEventInfo); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvCreateGpeBlock * * PARAMETERS: GpeDevice - Handle to the parent GPE block * GpeBlockAddress - Address and SpaceID * RegisterCount - Number of GPE register pairs in the block * GpeBlockBaseNumber - Starting GPE number for the block * InterruptNumber - H/W interrupt for the block * ReturnGpeBlock - Where the new block descriptor is returned * * RETURN: Status * * DESCRIPTION: Create and Install a block of GPE registers. All GPEs within * the block are disabled at exit. * Note: Assumes namespace is locked. * ******************************************************************************/ ACPI_STATUS AcpiEvCreateGpeBlock ( ACPI_NAMESPACE_NODE *GpeDevice, UINT64 Address, UINT8 SpaceId, UINT32 RegisterCount, UINT16 GpeBlockBaseNumber, UINT32 InterruptNumber, ACPI_GPE_BLOCK_INFO **ReturnGpeBlock) { ACPI_STATUS Status; ACPI_GPE_BLOCK_INFO *GpeBlock; ACPI_GPE_WALK_INFO WalkInfo; ACPI_FUNCTION_TRACE (EvCreateGpeBlock); if (!RegisterCount) { return_ACPI_STATUS (AE_OK); } /* Allocate a new GPE block */ GpeBlock = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_GPE_BLOCK_INFO)); if (!GpeBlock) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Initialize the new GPE block */ GpeBlock->Address = Address; GpeBlock->SpaceId = SpaceId; GpeBlock->Node = GpeDevice; GpeBlock->GpeCount = (UINT16) (RegisterCount * ACPI_GPE_REGISTER_WIDTH); GpeBlock->Initialized = FALSE; GpeBlock->RegisterCount = RegisterCount; GpeBlock->BlockBaseNumber = GpeBlockBaseNumber; /* * Create the RegisterInfo and EventInfo sub-structures * Note: disables and clears all GPEs in the block */ Status = AcpiEvCreateGpeInfoBlocks (GpeBlock); if (ACPI_FAILURE (Status)) { ACPI_FREE (GpeBlock); return_ACPI_STATUS (Status); } /* Install the new block in the global lists */ Status = AcpiEvInstallGpeBlock (GpeBlock, InterruptNumber); if (ACPI_FAILURE (Status)) { ACPI_FREE (GpeBlock->RegisterInfo); ACPI_FREE (GpeBlock->EventInfo); ACPI_FREE (GpeBlock); return_ACPI_STATUS (Status); } AcpiGbl_AllGpesInitialized = FALSE; /* Find all GPE methods (_Lxx or_Exx) for this block */ WalkInfo.GpeBlock = GpeBlock; WalkInfo.GpeDevice = GpeDevice; WalkInfo.ExecuteByOwnerId = FALSE; (void) AcpiNsWalkNamespace (ACPI_TYPE_METHOD, GpeDevice, ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, AcpiEvMatchGpeMethod, NULL, &WalkInfo, NULL); /* Return the new block */ if (ReturnGpeBlock) { (*ReturnGpeBlock) = GpeBlock; } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, " Initialized GPE %02X to %02X [%4.4s] %u regs on interrupt 0x%X%s\n", (UINT32) GpeBlock->BlockBaseNumber, (UINT32) (GpeBlock->BlockBaseNumber + (GpeBlock->GpeCount - 1)), GpeDevice->Name.Ascii, GpeBlock->RegisterCount, InterruptNumber, InterruptNumber == AcpiGbl_FADT.SciInterrupt ? " (SCI)" : "")); /* Update global count of currently available GPEs */ AcpiCurrentGpeCount += GpeBlock->GpeCount; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvInitializeGpeBlock * * PARAMETERS: ACPI_GPE_CALLBACK * * RETURN: Status * * DESCRIPTION: Initialize and enable a GPE block. Enable GPEs that have * associated methods. * Note: Assumes namespace is locked. * ******************************************************************************/ ACPI_STATUS AcpiEvInitializeGpeBlock ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context) { ACPI_STATUS Status; ACPI_GPE_EVENT_INFO *GpeEventInfo; UINT32 GpeEnabledCount; UINT32 GpeIndex; UINT32 i; UINT32 j; BOOLEAN *IsPollingNeeded = Context; ACPI_ERROR_ONLY (UINT32 GpeNumber); ACPI_FUNCTION_TRACE (EvInitializeGpeBlock); /* * Ignore a null GPE block (e.g., if no GPE block 1 exists), and * any GPE blocks that have been initialized already. */ if (!GpeBlock || GpeBlock->Initialized) { return_ACPI_STATUS (AE_OK); } /* * Enable all GPEs that have a corresponding method and have the * ACPI_GPE_CAN_WAKE flag unset. Any other GPEs within this block * must be enabled via the acpi_enable_gpe() interface. */ GpeEnabledCount = 0; for (i = 0; i < GpeBlock->RegisterCount; i++) { for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) { /* Get the info block for this particular GPE */ GpeIndex = (i * ACPI_GPE_REGISTER_WIDTH) + j; GpeEventInfo = &GpeBlock->EventInfo[GpeIndex]; ACPI_ERROR_ONLY(GpeNumber = GpeBlock->BlockBaseNumber + GpeIndex); GpeEventInfo->Flags |= ACPI_GPE_INITIALIZED; /* * Ignore GPEs that have no corresponding _Lxx/_Exx method * and GPEs that are used to wake the system */ if ((ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) != ACPI_GPE_DISPATCH_METHOD) || (GpeEventInfo->Flags & ACPI_GPE_CAN_WAKE)) { continue; } Status = AcpiEvAddGpeReference (GpeEventInfo, FALSE); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not enable GPE 0x%02X", GpeNumber)); continue; } GpeEventInfo->Flags |= ACPI_GPE_AUTO_ENABLED; if (IsPollingNeeded && ACPI_GPE_IS_POLLING_NEEDED (GpeEventInfo)) { *IsPollingNeeded = TRUE; } GpeEnabledCount++; } } if (GpeEnabledCount) { ACPI_INFO (( "Enabled %u GPEs in block %02X to %02X", GpeEnabledCount, (UINT32) GpeBlock->BlockBaseNumber, (UINT32) (GpeBlock->BlockBaseNumber + (GpeBlock->GpeCount - 1)))); } GpeBlock->Initialized = TRUE; return_ACPI_STATUS (AE_OK); } #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/events/evgpeinit.c000066400000000000000000000520071465205512700222270ustar00rootroot00000000000000/****************************************************************************** * * Module Name: evgpeinit - System GPE initialization and update * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acevents.h" #include "acnamesp.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evgpeinit") #if (!ACPI_REDUCED_HARDWARE) /* Entire module */ /* * Note: History of _PRW support in ACPICA * * Originally (2000 - 2010), the GPE initialization code performed a walk of * the entire namespace to execute the _PRW methods and detect all GPEs * capable of waking the system. * * As of 10/2010, the _PRW method execution has been removed since it is * actually unnecessary. The host OS must in fact execute all _PRW methods * in order to identify the device/power-resource dependencies. We now put * the onus on the host OS to identify the wake GPEs as part of this process * and to inform ACPICA of these GPEs via the AcpiSetupGpeForWake interface. This * not only reduces the complexity of the ACPICA initialization code, but in * some cases (on systems with very large namespaces) it should reduce the * kernel boot time as well. */ /******************************************************************************* * * FUNCTION: AcpiEvGpeInitialize * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Initialize the GPE data structures and the FADT GPE 0/1 blocks * ******************************************************************************/ ACPI_STATUS AcpiEvGpeInitialize ( void) { UINT32 RegisterCount0 = 0; UINT32 RegisterCount1 = 0; UINT32 GpeNumberMax = 0; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (EvGpeInitialize); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "Initializing General Purpose Events (GPEs):\n")); Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Initialize the GPE Block(s) defined in the FADT * * Why the GPE register block lengths are divided by 2: From the ACPI * Spec, section "General-Purpose Event Registers", we have: * * "Each register block contains two registers of equal length * GPEx_STS and GPEx_EN (where x is 0 or 1). The length of the * GPE0_STS and GPE0_EN registers is equal to half the GPE0_LEN * The length of the GPE1_STS and GPE1_EN registers is equal to * half the GPE1_LEN. If a generic register block is not supported * then its respective block pointer and block length values in the * FADT table contain zeros. The GPE0_LEN and GPE1_LEN do not need * to be the same size." */ /* * Determine the maximum GPE number for this machine. * * Note: both GPE0 and GPE1 are optional, and either can exist without * the other. * * If EITHER the register length OR the block address are zero, then that * particular block is not supported. */ if (AcpiGbl_FADT.Gpe0BlockLength && AcpiGbl_FADT.XGpe0Block.Address) { /* GPE block 0 exists (has both length and address > 0) */ RegisterCount0 = (UINT16) (AcpiGbl_FADT.Gpe0BlockLength / 2); GpeNumberMax = (RegisterCount0 * ACPI_GPE_REGISTER_WIDTH) - 1; /* Install GPE Block 0 */ Status = AcpiEvCreateGpeBlock (AcpiGbl_FadtGpeDevice, AcpiGbl_FADT.XGpe0Block.Address, AcpiGbl_FADT.XGpe0Block.SpaceId, RegisterCount0, 0, AcpiGbl_FADT.SciInterrupt, &AcpiGbl_GpeFadtBlocks[0]); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not create GPE Block 0")); } } if (AcpiGbl_FADT.Gpe1BlockLength && AcpiGbl_FADT.XGpe1Block.Address) { /* GPE block 1 exists (has both length and address > 0) */ RegisterCount1 = (UINT16) (AcpiGbl_FADT.Gpe1BlockLength / 2); /* Check for GPE0/GPE1 overlap (if both banks exist) */ if ((RegisterCount0) && (GpeNumberMax >= AcpiGbl_FADT.Gpe1Base)) { ACPI_ERROR ((AE_INFO, "GPE0 block (GPE 0 to %u) overlaps the GPE1 block " "(GPE %u to %u) - Ignoring GPE1", GpeNumberMax, AcpiGbl_FADT.Gpe1Base, AcpiGbl_FADT.Gpe1Base + ((RegisterCount1 * ACPI_GPE_REGISTER_WIDTH) - 1))); /* Ignore GPE1 block by setting the register count to zero */ RegisterCount1 = 0; } else { /* Install GPE Block 1 */ Status = AcpiEvCreateGpeBlock (AcpiGbl_FadtGpeDevice, AcpiGbl_FADT.XGpe1Block.Address, AcpiGbl_FADT.XGpe1Block.SpaceId, RegisterCount1, AcpiGbl_FADT.Gpe1Base, AcpiGbl_FADT.SciInterrupt, &AcpiGbl_GpeFadtBlocks[1]); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not create GPE Block 1")); } /* * GPE0 and GPE1 do not have to be contiguous in the GPE number * space. However, GPE0 always starts at GPE number zero. */ } } /* Exit if there are no GPE registers */ if ((RegisterCount0 + RegisterCount1) == 0) { /* GPEs are not required by ACPI, this is OK */ ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "There are no GPE blocks defined in the FADT\n")); goto Cleanup; } Cleanup: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvUpdateGpes * * PARAMETERS: TableOwnerId - ID of the newly-loaded ACPI table * * RETURN: None * * DESCRIPTION: Check for new GPE methods (_Lxx/_Exx) made available as a * result of a Load() or LoadTable() operation. If new GPE * methods have been installed, register the new methods. * ******************************************************************************/ void AcpiEvUpdateGpes ( ACPI_OWNER_ID TableOwnerId) { ACPI_GPE_XRUPT_INFO *GpeXruptInfo; ACPI_GPE_BLOCK_INFO *GpeBlock; ACPI_GPE_WALK_INFO WalkInfo; ACPI_STATUS Status = AE_OK; /* * Find any _Lxx/_Exx GPE methods that have just been loaded. * * Any GPEs that correspond to new _Lxx/_Exx methods are immediately * enabled. * * Examine the namespace underneath each GpeDevice within the * GpeBlock lists. */ Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return; } WalkInfo.Count = 0; WalkInfo.OwnerId = TableOwnerId; WalkInfo.ExecuteByOwnerId = TRUE; /* Walk the interrupt level descriptor list */ GpeXruptInfo = AcpiGbl_GpeXruptListHead; while (GpeXruptInfo) { /* Walk all Gpe Blocks attached to this interrupt level */ GpeBlock = GpeXruptInfo->GpeBlockListHead; while (GpeBlock) { WalkInfo.GpeBlock = GpeBlock; WalkInfo.GpeDevice = GpeBlock->Node; Status = AcpiNsWalkNamespace (ACPI_TYPE_METHOD, WalkInfo.GpeDevice, ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, AcpiEvMatchGpeMethod, NULL, &WalkInfo, NULL); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "While decoding _Lxx/_Exx methods")); } GpeBlock = GpeBlock->Next; } GpeXruptInfo = GpeXruptInfo->Next; } if (WalkInfo.Count) { ACPI_INFO (("Enabled %u new GPEs", WalkInfo.Count)); } (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return; } /******************************************************************************* * * FUNCTION: AcpiEvMatchGpeMethod * * PARAMETERS: Callback from WalkNamespace * * RETURN: Status * * DESCRIPTION: Called from AcpiWalkNamespace. Expects each object to be a * control method under the _GPE portion of the namespace. * Extract the name and GPE type from the object, saving this * information for quick lookup during GPE dispatch. Allows a * per-OwnerId evaluation if ExecuteByOwnerId is TRUE in the * WalkInfo parameter block. * * The name of each GPE control method is of the form: * "_Lxx" or "_Exx", where: * L - means that the GPE is level triggered * E - means that the GPE is edge triggered * xx - is the GPE number [in HEX] * * If WalkInfo->ExecuteByOwnerId is TRUE, we only execute examine GPE methods * with that owner. * ******************************************************************************/ ACPI_STATUS AcpiEvMatchGpeMethod ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *MethodNode = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle); ACPI_GPE_WALK_INFO *WalkInfo = ACPI_CAST_PTR (ACPI_GPE_WALK_INFO, Context); ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_STATUS Status; UINT32 GpeNumber; UINT8 TempGpeNumber; char Name[ACPI_NAMESEG_SIZE + 1]; UINT8 Type; ACPI_FUNCTION_TRACE (EvMatchGpeMethod); /* Check if requested OwnerId matches this OwnerId */ if ((WalkInfo->ExecuteByOwnerId) && (MethodNode->OwnerId != WalkInfo->OwnerId)) { return_ACPI_STATUS (AE_OK); } /* * Match and decode the _Lxx and _Exx GPE method names * * 1) Extract the method name and null terminate it */ ACPI_MOVE_32_TO_32 (Name, &MethodNode->Name.Integer); Name[ACPI_NAMESEG_SIZE] = 0; /* 2) Name must begin with an underscore */ if (Name[0] != '_') { return_ACPI_STATUS (AE_OK); /* Ignore this method */ } /* * 3) Edge/Level determination is based on the 2nd character * of the method name */ switch (Name[1]) { case 'L': Type = ACPI_GPE_LEVEL_TRIGGERED; break; case 'E': Type = ACPI_GPE_EDGE_TRIGGERED; break; default: /* Unknown method type, just ignore it */ ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "Ignoring unknown GPE method type: %s " "(name not of form _Lxx or _Exx)", Name)); return_ACPI_STATUS (AE_OK); } /* 4) The last two characters of the name are the hex GPE Number */ Status = AcpiUtAsciiToHexByte (&Name[2], &TempGpeNumber); if (ACPI_FAILURE (Status)) { /* Conversion failed; invalid method, just ignore it */ ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "Could not extract GPE number from name: %s " "(name is not of form _Lxx or _Exx)", Name)); return_ACPI_STATUS (AE_OK); } /* Ensure that we have a valid GPE number for this GPE block */ GpeNumber = (UINT32) TempGpeNumber; GpeEventInfo = AcpiEvLowGetGpeInfo (GpeNumber, WalkInfo->GpeBlock); if (!GpeEventInfo) { /* * This GpeNumber is not valid for this GPE block, just ignore it. * However, it may be valid for a different GPE block, since GPE0 * and GPE1 methods both appear under \_GPE. */ return_ACPI_STATUS (AE_OK); } if ((ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == ACPI_GPE_DISPATCH_HANDLER) || (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == ACPI_GPE_DISPATCH_RAW_HANDLER)) { /* If there is already a handler, ignore this GPE method */ return_ACPI_STATUS (AE_OK); } if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == ACPI_GPE_DISPATCH_METHOD) { /* * If there is already a method, ignore this method. But check * for a type mismatch (if both the _Lxx AND _Exx exist) */ if (Type != (GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK)) { ACPI_ERROR ((AE_INFO, "For GPE 0x%.2X, found both _L%2.2X and _E%2.2X methods", GpeNumber, GpeNumber, GpeNumber)); } return_ACPI_STATUS (AE_OK); } /* Disable the GPE in case it's been enabled already. */ (void) AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_DISABLE); /* * Add the GPE information from above to the GpeEventInfo block for * use during dispatch of this GPE. */ GpeEventInfo->Flags &= ~(ACPI_GPE_DISPATCH_MASK); GpeEventInfo->Flags |= (UINT8) (Type | ACPI_GPE_DISPATCH_METHOD); GpeEventInfo->Dispatch.MethodNode = MethodNode; WalkInfo->Count++; ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "Registered GPE method %s as GPE number 0x%.2X\n", Name, GpeNumber)); return_ACPI_STATUS (AE_OK); } #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/events/evgpeutil.c000066400000000000000000000430001465205512700222320ustar00rootroot00000000000000/****************************************************************************** * * Module Name: evgpeutil - GPE utilities * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acevents.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evgpeutil") #if (!ACPI_REDUCED_HARDWARE) /* Entire module */ /******************************************************************************* * * FUNCTION: AcpiEvWalkGpeList * * PARAMETERS: GpeWalkCallback - Routine called for each GPE block * Context - Value passed to callback * * RETURN: Status * * DESCRIPTION: Walk the GPE lists. * ******************************************************************************/ ACPI_STATUS AcpiEvWalkGpeList ( ACPI_GPE_CALLBACK GpeWalkCallback, void *Context) { ACPI_GPE_BLOCK_INFO *GpeBlock; ACPI_GPE_XRUPT_INFO *GpeXruptInfo; ACPI_STATUS Status = AE_OK; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (EvWalkGpeList); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* Walk the interrupt level descriptor list */ GpeXruptInfo = AcpiGbl_GpeXruptListHead; while (GpeXruptInfo) { /* Walk all Gpe Blocks attached to this interrupt level */ GpeBlock = GpeXruptInfo->GpeBlockListHead; while (GpeBlock) { /* One callback per GPE block */ Status = GpeWalkCallback (GpeXruptInfo, GpeBlock, Context); if (ACPI_FAILURE (Status)) { if (Status == AE_CTRL_END) /* Callback abort */ { Status = AE_OK; } goto UnlockAndExit; } GpeBlock = GpeBlock->Next; } GpeXruptInfo = GpeXruptInfo->Next; } UnlockAndExit: AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvGetGpeDevice * * PARAMETERS: GPE_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Matches the input GPE index (0-CurrentGpeCount) with a GPE * block device. NULL if the GPE is one of the FADT-defined GPEs. * ******************************************************************************/ ACPI_STATUS AcpiEvGetGpeDevice ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context) { ACPI_GPE_DEVICE_INFO *Info = Context; /* Increment Index by the number of GPEs in this block */ Info->NextBlockBaseIndex += GpeBlock->GpeCount; if (Info->Index < Info->NextBlockBaseIndex) { /* * The GPE index is within this block, get the node. Leave the node * NULL for the FADT-defined GPEs */ if ((GpeBlock->Node)->Type == ACPI_TYPE_DEVICE) { Info->GpeDevice = GpeBlock->Node; } Info->Status = AE_OK; return (AE_CTRL_END); } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvGetGpeXruptBlock * * PARAMETERS: InterruptNumber - Interrupt for a GPE block * GpeXruptBlock - Where the block is returned * * RETURN: Status * * DESCRIPTION: Get or Create a GPE interrupt block. There is one interrupt * block per unique interrupt level used for GPEs. Should be * called only when the GPE lists are semaphore locked and not * subject to change. * ******************************************************************************/ ACPI_STATUS AcpiEvGetGpeXruptBlock ( UINT32 InterruptNumber, ACPI_GPE_XRUPT_INFO **GpeXruptBlock) { ACPI_GPE_XRUPT_INFO *NextGpeXrupt; ACPI_GPE_XRUPT_INFO *GpeXrupt; ACPI_STATUS Status; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (EvGetGpeXruptBlock); /* No need for lock since we are not changing any list elements here */ NextGpeXrupt = AcpiGbl_GpeXruptListHead; while (NextGpeXrupt) { if (NextGpeXrupt->InterruptNumber == InterruptNumber) { *GpeXruptBlock = NextGpeXrupt; return_ACPI_STATUS (AE_OK); } NextGpeXrupt = NextGpeXrupt->Next; } /* Not found, must allocate a new xrupt descriptor */ GpeXrupt = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_GPE_XRUPT_INFO)); if (!GpeXrupt) { return_ACPI_STATUS (AE_NO_MEMORY); } GpeXrupt->InterruptNumber = InterruptNumber; /* Install new interrupt descriptor with spin lock */ Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); if (AcpiGbl_GpeXruptListHead) { NextGpeXrupt = AcpiGbl_GpeXruptListHead; while (NextGpeXrupt->Next) { NextGpeXrupt = NextGpeXrupt->Next; } NextGpeXrupt->Next = GpeXrupt; GpeXrupt->Previous = NextGpeXrupt; } else { AcpiGbl_GpeXruptListHead = GpeXrupt; } AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); /* Install new interrupt handler if not SCI_INT */ if (InterruptNumber != AcpiGbl_FADT.SciInterrupt) { Status = AcpiOsInstallInterruptHandler (InterruptNumber, AcpiEvGpeXruptHandler, GpeXrupt); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not install GPE interrupt handler at level 0x%X", InterruptNumber)); return_ACPI_STATUS (Status); } } *GpeXruptBlock = GpeXrupt; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvDeleteGpeXrupt * * PARAMETERS: GpeXrupt - A GPE interrupt info block * * RETURN: Status * * DESCRIPTION: Remove and free a GpeXrupt block. Remove an associated * interrupt handler if not the SCI interrupt. * ******************************************************************************/ ACPI_STATUS AcpiEvDeleteGpeXrupt ( ACPI_GPE_XRUPT_INFO *GpeXrupt) { ACPI_STATUS Status; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (EvDeleteGpeXrupt); /* We never want to remove the SCI interrupt handler */ if (GpeXrupt->InterruptNumber == AcpiGbl_FADT.SciInterrupt) { GpeXrupt->GpeBlockListHead = NULL; return_ACPI_STATUS (AE_OK); } /* Disable this interrupt */ Status = AcpiOsRemoveInterruptHandler ( GpeXrupt->InterruptNumber, AcpiEvGpeXruptHandler); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Unlink the interrupt block with lock */ Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); if (GpeXrupt->Previous) { GpeXrupt->Previous->Next = GpeXrupt->Next; } else { /* No previous, update list head */ AcpiGbl_GpeXruptListHead = GpeXrupt->Next; } if (GpeXrupt->Next) { GpeXrupt->Next->Previous = GpeXrupt->Previous; } AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); /* Free the block */ ACPI_FREE (GpeXrupt); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvDeleteGpeHandlers * * PARAMETERS: GpeXruptInfo - GPE Interrupt info * GpeBlock - Gpe Block info * * RETURN: Status * * DESCRIPTION: Delete all Handler objects found in the GPE data structs. * Used only prior to termination. * ******************************************************************************/ ACPI_STATUS AcpiEvDeleteGpeHandlers ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context) { ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_GPE_NOTIFY_INFO *Notify; ACPI_GPE_NOTIFY_INFO *Next; UINT32 i; UINT32 j; ACPI_FUNCTION_TRACE (EvDeleteGpeHandlers); /* Examine each GPE Register within the block */ for (i = 0; i < GpeBlock->RegisterCount; i++) { /* Now look at the individual GPEs in this byte register */ for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) { GpeEventInfo = &GpeBlock->EventInfo[((ACPI_SIZE) i * ACPI_GPE_REGISTER_WIDTH) + j]; if ((ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == ACPI_GPE_DISPATCH_HANDLER) || (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == ACPI_GPE_DISPATCH_RAW_HANDLER)) { /* Delete an installed handler block */ ACPI_FREE (GpeEventInfo->Dispatch.Handler); GpeEventInfo->Dispatch.Handler = NULL; GpeEventInfo->Flags &= ~ACPI_GPE_DISPATCH_MASK; } else if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == 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; } } } return_ACPI_STATUS (AE_OK); } #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/events/evhandler.c000066400000000000000000000570521465205512700222120ustar00rootroot00000000000000/****************************************************************************** * * Module Name: evhandler - Support for Address Space handlers * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acevents.h" #include "acnamesp.h" #include "acinterp.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evhandler") /* Local prototypes */ static ACPI_STATUS AcpiEvInstallHandler ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); /* These are the address spaces that will get default handlers */ UINT8 AcpiGbl_DefaultAddressSpaces[ACPI_NUM_DEFAULT_SPACES] = { ACPI_ADR_SPACE_SYSTEM_MEMORY, ACPI_ADR_SPACE_SYSTEM_IO, ACPI_ADR_SPACE_PCI_CONFIG, ACPI_ADR_SPACE_DATA_TABLE }; /******************************************************************************* * * FUNCTION: AcpiEvInstallRegionHandlers * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Installs the core subsystem default address space handlers. * ******************************************************************************/ ACPI_STATUS AcpiEvInstallRegionHandlers ( void) { ACPI_STATUS Status; UINT32 i; ACPI_FUNCTION_TRACE (EvInstallRegionHandlers); Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * All address spaces (PCI Config, EC, SMBus) are scope dependent and * registration must occur for a specific device. * * In the case of the system memory and IO address spaces there is * currently no device associated with the address space. For these we * use the root. * * We install the default PCI config space handler at the root so that * this space is immediately available even though the we have not * enumerated all the PCI Root Buses yet. This is to conform to the ACPI * specification which states that the PCI config space must be always * available -- even though we are nowhere near ready to find the PCI root * buses at this point. * * NOTE: We ignore AE_ALREADY_EXISTS because this means that a handler * has already been installed (via AcpiInstallAddressSpaceHandler). * Similar for AE_SAME_HANDLER. */ for (i = 0; i < ACPI_NUM_DEFAULT_SPACES; i++) { Status = AcpiEvInstallSpaceHandler (AcpiGbl_RootNode, AcpiGbl_DefaultAddressSpaces[i], ACPI_DEFAULT_HANDLER, NULL, NULL); switch (Status) { case AE_OK: case AE_SAME_HANDLER: case AE_ALREADY_EXISTS: /* These exceptions are all OK */ Status = AE_OK; break; default: goto UnlockAndExit; } } UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvHasDefaultHandler * * PARAMETERS: Node - Namespace node for the device * SpaceId - The address space ID * * RETURN: TRUE if default handler is installed, FALSE otherwise * * DESCRIPTION: Check if the default handler is installed for the requested * space ID. * ******************************************************************************/ BOOLEAN AcpiEvHasDefaultHandler ( ACPI_NAMESPACE_NODE *Node, ACPI_ADR_SPACE_TYPE SpaceId) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *HandlerObj; /* Must have an existing internal object */ ObjDesc = AcpiNsGetAttachedObject (Node); if (ObjDesc) { HandlerObj = ObjDesc->CommonNotify.Handler; /* Walk the linked list of handlers for this object */ while (HandlerObj) { if (HandlerObj->AddressSpace.SpaceId == SpaceId) { if (HandlerObj->AddressSpace.HandlerFlags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) { return (TRUE); } } HandlerObj = HandlerObj->AddressSpace.Next; } } return (FALSE); } /******************************************************************************* * * FUNCTION: AcpiEvInstallHandler * * PARAMETERS: WalkNamespace callback * * DESCRIPTION: This routine installs an address handler into objects that are * of type Region or Device. * * If the Object is a Device, and the device has a handler of * the same type then the search is terminated in that branch. * * This is because the existing handler is closer in proximity * to any more regions than the one we are trying to install. * ******************************************************************************/ static ACPI_STATUS AcpiEvInstallHandler ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_OPERAND_OBJECT *HandlerObj; ACPI_OPERAND_OBJECT *NextHandlerObj; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_FUNCTION_NAME (EvInstallHandler); HandlerObj = (ACPI_OPERAND_OBJECT *) Context; /* Parameter validation */ if (!HandlerObj) { return (AE_OK); } /* Convert and validate the device handle */ Node = AcpiNsValidateHandle (ObjHandle); if (!Node) { return (AE_BAD_PARAMETER); } /* * We only care about regions and objects that are allowed to have * address space handlers */ if ((Node->Type != ACPI_TYPE_DEVICE) && (Node->Type != ACPI_TYPE_REGION) && (Node != AcpiGbl_RootNode)) { return (AE_OK); } /* Check for an existing internal object */ ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { /* No object, just exit */ return (AE_OK); } /* Devices are handled different than regions */ if (ObjDesc->Common.Type == ACPI_TYPE_DEVICE) { /* Check if this Device already has a handler for this address space */ NextHandlerObj = AcpiEvFindRegionHandler ( HandlerObj->AddressSpace.SpaceId, ObjDesc->CommonNotify.Handler); if (NextHandlerObj) { /* Found a handler, is it for the same address space? */ ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Found handler for region [%s] in device %p(%p) handler %p\n", AcpiUtGetRegionName (HandlerObj->AddressSpace.SpaceId), ObjDesc, NextHandlerObj, HandlerObj)); /* * Since the object we found it on was a device, then it means * that someone has already installed a handler for the branch * of the namespace from this device on. Just bail out telling * the walk routine to not traverse this branch. This preserves * the scoping rule for handlers. */ return (AE_CTRL_DEPTH); } /* * As long as the device didn't have a handler for this space we * don't care about it. We just ignore it and proceed. */ return (AE_OK); } /* Object is a Region */ if (ObjDesc->Region.SpaceId != HandlerObj->AddressSpace.SpaceId) { /* This region is for a different address space, just ignore it */ return (AE_OK); } /* * Now we have a region and it is for the handler's address space type. * * First disconnect region for any previous handler (if any) */ AcpiEvDetachRegion (ObjDesc, FALSE); /* Connect the region to the new handler */ Status = AcpiEvAttachRegion (HandlerObj, ObjDesc, FALSE); return (Status); } /******************************************************************************* * * FUNCTION: AcpiEvFindRegionHandler * * PARAMETERS: SpaceId - The address space ID * HandlerObj - Head of the handler object list * * RETURN: Matching handler object. NULL if space ID not matched * * DESCRIPTION: Search a handler object list for a match on the address * space ID. * ******************************************************************************/ ACPI_OPERAND_OBJECT * AcpiEvFindRegionHandler ( ACPI_ADR_SPACE_TYPE SpaceId, ACPI_OPERAND_OBJECT *HandlerObj) { /* Walk the handler list for this device */ while (HandlerObj) { /* Same SpaceId indicates a handler is installed */ if (HandlerObj->AddressSpace.SpaceId == SpaceId) { return (HandlerObj); } /* Next handler object */ HandlerObj = HandlerObj->AddressSpace.Next; } return (NULL); } /******************************************************************************* * * FUNCTION: AcpiEvInstallSpaceHandler * * PARAMETERS: Node - Namespace node for the device * SpaceId - The address space ID * Handler - Address of the handler * Setup - Address of the setup function * Context - Value passed to the handler on each access * * RETURN: Status * * DESCRIPTION: Install a handler for all OpRegions of a given SpaceId. * Assumes namespace is locked * ******************************************************************************/ ACPI_STATUS AcpiEvInstallSpaceHandler ( ACPI_NAMESPACE_NODE *Node, ACPI_ADR_SPACE_TYPE SpaceId, ACPI_ADR_SPACE_HANDLER Handler, ACPI_ADR_SPACE_SETUP Setup, void *Context) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *HandlerObj; ACPI_STATUS Status = AE_OK; ACPI_OBJECT_TYPE Type; UINT8 Flags = 0; ACPI_FUNCTION_TRACE (EvInstallSpaceHandler); /* * This registration is valid for only the types below and the root. * The root node is where the default handlers get installed. */ if ((Node->Type != ACPI_TYPE_DEVICE) && (Node->Type != ACPI_TYPE_PROCESSOR) && (Node->Type != ACPI_TYPE_THERMAL) && (Node != AcpiGbl_RootNode)) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } if (Handler == ACPI_DEFAULT_HANDLER) { Flags = ACPI_ADDR_HANDLER_DEFAULT_INSTALLED; switch (SpaceId) { case ACPI_ADR_SPACE_SYSTEM_MEMORY: Handler = AcpiExSystemMemorySpaceHandler; Setup = AcpiEvSystemMemoryRegionSetup; break; case ACPI_ADR_SPACE_SYSTEM_IO: Handler = AcpiExSystemIoSpaceHandler; Setup = AcpiEvIoSpaceRegionSetup; break; case ACPI_ADR_SPACE_PCI_CONFIG: Handler = AcpiExPciConfigSpaceHandler; Setup = AcpiEvPciConfigRegionSetup; break; case ACPI_ADR_SPACE_CMOS: Handler = AcpiExCmosSpaceHandler; Setup = AcpiEvCmosRegionSetup; break; case ACPI_ADR_SPACE_PCI_BAR_TARGET: Handler = AcpiExPciBarSpaceHandler; Setup = AcpiEvPciBarRegionSetup; break; case ACPI_ADR_SPACE_DATA_TABLE: Handler = AcpiExDataTableSpaceHandler; Setup = AcpiEvDataTableRegionSetup; break; default: Status = AE_BAD_PARAMETER; goto UnlockAndExit; } } /* If the caller hasn't specified a setup routine, use the default */ if (!Setup) { Setup = AcpiEvDefaultRegionSetup; } /* Check for an existing internal object */ ObjDesc = AcpiNsGetAttachedObject (Node); if (ObjDesc) { /* * The attached device object already exists. Now make sure * the handler is not already installed. */ HandlerObj = AcpiEvFindRegionHandler (SpaceId, ObjDesc->CommonNotify.Handler); if (HandlerObj) { if (HandlerObj->AddressSpace.Handler == Handler) { /* * It is (relatively) OK to attempt to install the SAME * handler twice. This can easily happen with the * PCI_Config space. */ Status = AE_SAME_HANDLER; goto UnlockAndExit; } else { /* A handler is already installed */ Status = AE_ALREADY_EXISTS; } goto UnlockAndExit; } } else { ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Creating object on Device %p while installing handler\n", Node)); /* ObjDesc does not exist, create one */ if (Node->Type == ACPI_TYPE_ANY) { Type = ACPI_TYPE_DEVICE; } else { Type = Node->Type; } ObjDesc = AcpiUtCreateInternalObject (Type); if (!ObjDesc) { Status = AE_NO_MEMORY; goto UnlockAndExit; } /* Init new descriptor */ ObjDesc->Common.Type = (UINT8) Type; /* Attach the new object to the Node */ Status = AcpiNsAttachObject (Node, ObjDesc, Type); /* Remove local reference to the object */ AcpiUtRemoveReference (ObjDesc); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; } } ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Installing address handler for region %s(%X) " "on Device %4.4s %p(%p)\n", AcpiUtGetRegionName (SpaceId), SpaceId, AcpiUtGetNodeName (Node), Node, ObjDesc)); /* * Install the handler * * At this point there is no existing handler. Just allocate the object * for the handler and link it into the list. */ HandlerObj = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_ADDRESS_HANDLER); if (!HandlerObj) { Status = AE_NO_MEMORY; goto UnlockAndExit; } /* Init handler obj */ Status = AcpiOsCreateMutex (&HandlerObj->AddressSpace.ContextMutex); if (ACPI_FAILURE (Status)) { AcpiUtRemoveReference (HandlerObj); goto UnlockAndExit; } HandlerObj->AddressSpace.SpaceId = (UINT8) SpaceId; HandlerObj->AddressSpace.HandlerFlags = Flags; HandlerObj->AddressSpace.RegionList = NULL; HandlerObj->AddressSpace.Node = Node; HandlerObj->AddressSpace.Handler = Handler; HandlerObj->AddressSpace.Context = Context; HandlerObj->AddressSpace.Setup = Setup; /* Install at head of Device.AddressSpace list */ HandlerObj->AddressSpace.Next = ObjDesc->CommonNotify.Handler; /* * The Device object is the first reference on the HandlerObj. * Each region that uses the handler adds a reference. */ ObjDesc->CommonNotify.Handler = HandlerObj; /* * Walk the namespace finding all of the regions this handler will * manage. * * Start at the device and search the branch toward the leaf nodes * until either the leaf is encountered or a device is detected that * has an address handler of the same type. * * In either case, back up and search down the remainder of the branch */ Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, Node, ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK, AcpiEvInstallHandler, NULL, HandlerObj, NULL); UnlockAndExit: return_ACPI_STATUS (Status); } src/acpica/source/components/events/evmisc.c000066400000000000000000000371561465205512700215330ustar00rootroot00000000000000/****************************************************************************** * * Module Name: evmisc - Miscellaneous event manager support functions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acevents.h" #include "acnamesp.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evmisc") /* Local prototypes */ static void ACPI_SYSTEM_XFACE AcpiEvNotifyDispatch ( void *Context); /******************************************************************************* * * FUNCTION: AcpiEvIsNotifyObject * * PARAMETERS: Node - Node to check * * RETURN: TRUE if notifies allowed on this object * * DESCRIPTION: Check type of node for a object that supports notifies. * * TBD: This could be replaced by a flag bit in the node. * ******************************************************************************/ BOOLEAN AcpiEvIsNotifyObject ( ACPI_NAMESPACE_NODE *Node) { switch (Node->Type) { case ACPI_TYPE_DEVICE: case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_THERMAL: /* * These are the ONLY objects that can receive ACPI notifications */ return (TRUE); default: return (FALSE); } } /******************************************************************************* * * FUNCTION: AcpiEvQueueNotifyRequest * * PARAMETERS: Node - NS node for the notified object * NotifyValue - Value from the Notify() request * * RETURN: Status * * DESCRIPTION: Dispatch a device notification event to a previously * installed handler. * ******************************************************************************/ ACPI_STATUS AcpiEvQueueNotifyRequest ( ACPI_NAMESPACE_NODE *Node, UINT32 NotifyValue) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *HandlerListHead = NULL; ACPI_GENERIC_STATE *Info; UINT8 HandlerListId = 0; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_NAME (EvQueueNotifyRequest); /* Are Notifies allowed on this object? */ if (!AcpiEvIsNotifyObject (Node)) { return (AE_TYPE); } /* Get the correct notify list type (System or Device) */ if (NotifyValue <= ACPI_MAX_SYS_NOTIFY) { HandlerListId = ACPI_SYSTEM_HANDLER_LIST; } else { HandlerListId = ACPI_DEVICE_HANDLER_LIST; } /* Get the notify object attached to the namespace Node */ ObjDesc = AcpiNsGetAttachedObject (Node); if (ObjDesc) { /* We have an attached object, Get the correct handler list */ HandlerListHead = ObjDesc->CommonNotify.NotifyList[HandlerListId]; } /* * If there is no notify handler (Global or Local) * for this object, just ignore the notify */ if (!AcpiGbl_GlobalNotify[HandlerListId].Handler && !HandlerListHead) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "No notify handler for Notify, ignoring (%4.4s, %X) node %p\n", AcpiUtGetNodeName (Node), NotifyValue, Node)); return (AE_OK); } /* Setup notify info and schedule the notify dispatcher */ Info = AcpiUtCreateGenericState (); if (!Info) { return (AE_NO_MEMORY); } Info->Common.DescriptorType = ACPI_DESC_TYPE_STATE_NOTIFY; Info->Notify.Node = Node; Info->Notify.Value = (UINT16) NotifyValue; Info->Notify.HandlerListId = HandlerListId; Info->Notify.HandlerListHead = HandlerListHead; Info->Notify.Global = &AcpiGbl_GlobalNotify[HandlerListId]; ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Dispatching Notify on [%4.4s] (%s) Value 0x%2.2X (%s) Node %p\n", AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type), NotifyValue, AcpiUtGetNotifyName (NotifyValue, ACPI_TYPE_ANY), Node)); Status = AcpiOsExecute (OSL_NOTIFY_HANDLER, AcpiEvNotifyDispatch, Info); if (ACPI_FAILURE (Status)) { AcpiUtDeleteGenericState (Info); } return (Status); } /******************************************************************************* * * FUNCTION: AcpiEvNotifyDispatch * * PARAMETERS: Context - To be passed to the notify handler * * RETURN: None. * * DESCRIPTION: Dispatch a device notification event to a previously * installed handler. * ******************************************************************************/ static void ACPI_SYSTEM_XFACE AcpiEvNotifyDispatch ( void *Context) { ACPI_GENERIC_STATE *Info = (ACPI_GENERIC_STATE *) Context; ACPI_OPERAND_OBJECT *HandlerObj; ACPI_FUNCTION_ENTRY (); /* Invoke a global notify handler if installed */ if (Info->Notify.Global->Handler) { Info->Notify.Global->Handler (Info->Notify.Node, Info->Notify.Value, Info->Notify.Global->Context); } /* Now invoke the local notify handler(s) if any are installed */ HandlerObj = Info->Notify.HandlerListHead; while (HandlerObj) { HandlerObj->Notify.Handler (Info->Notify.Node, Info->Notify.Value, HandlerObj->Notify.Context); HandlerObj = HandlerObj->Notify.Next[Info->Notify.HandlerListId]; } /* All done with the info object */ AcpiUtDeleteGenericState (Info); } #if (!ACPI_REDUCED_HARDWARE) /****************************************************************************** * * FUNCTION: AcpiEvTerminate * * PARAMETERS: none * * RETURN: none * * DESCRIPTION: Disable events and free memory allocated for table storage. * ******************************************************************************/ void AcpiEvTerminate ( void) { UINT32 i; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (EvTerminate); if (AcpiGbl_EventsInitialized) { /* * Disable all event-related functionality. In all cases, on error, * print a message but obviously we don't abort. */ /* Disable all fixed events */ for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) { Status = AcpiDisableEvent (i, 0); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Could not disable fixed event %u", (UINT32) i)); } } /* Disable all GPEs in all GPE blocks */ Status = AcpiEvWalkGpeList (AcpiHwDisableGpeBlock, NULL); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not disable GPEs in GPE block")); } Status = AcpiEvRemoveGlobalLockHandler (); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not remove Global Lock handler")); } AcpiGbl_EventsInitialized = FALSE; } /* Remove SCI handlers */ Status = AcpiEvRemoveAllSciHandlers (); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Could not remove SCI handler")); } /* Deallocate all handler objects installed within GPE info structs */ Status = AcpiEvWalkGpeList (AcpiEvDeleteGpeHandlers, NULL); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not delete GPE handlers")); } /* Return to original mode if necessary */ if (AcpiGbl_OriginalMode == ACPI_SYS_MODE_LEGACY) { Status = AcpiDisable (); if (ACPI_FAILURE (Status)) { ACPI_WARNING ((AE_INFO, "AcpiDisable failed")); } } return_VOID; } #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/events/evregion.c000066400000000000000000001070211465205512700220500ustar00rootroot00000000000000/****************************************************************************** * * Module Name: evregion - Operation Region support * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acevents.h" #include "acnamesp.h" #include "acinterp.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evregion") extern UINT8 AcpiGbl_DefaultAddressSpaces[]; /* Local prototypes */ static void AcpiEvExecuteOrphanRegMethod ( ACPI_NAMESPACE_NODE *DeviceNode, ACPI_ADR_SPACE_TYPE SpaceId); static ACPI_STATUS AcpiEvRegRun ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); /******************************************************************************* * * FUNCTION: AcpiEvInitializeOpRegions * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Execute _REG methods for all Operation Regions that have * an installed default region handler. * ******************************************************************************/ ACPI_STATUS AcpiEvInitializeOpRegions ( void) { ACPI_STATUS Status; UINT32 i; ACPI_FUNCTION_TRACE (EvInitializeOpRegions); Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Run the _REG methods for OpRegions in each default address space */ for (i = 0; i < ACPI_NUM_DEFAULT_SPACES; i++) { /* * Make sure the installed handler is the DEFAULT handler. If not the * default, the _REG methods will have already been run (when the * handler was installed) */ if (AcpiEvHasDefaultHandler (AcpiGbl_RootNode, AcpiGbl_DefaultAddressSpaces[i])) { AcpiEvExecuteRegMethods (AcpiGbl_RootNode, AcpiGbl_DefaultAddressSpaces[i], ACPI_REG_CONNECT); } } (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvAddressSpaceDispatch * * PARAMETERS: RegionObj - Internal region object * FieldObj - Corresponding field. Can be NULL. * Function - Read or Write operation * RegionOffset - Where in the region to read or write * BitWidth - Field width in bits (8, 16, 32, or 64) * Value - Pointer to in or out value, must be * a full 64-bit integer * * RETURN: Status * * DESCRIPTION: Dispatch an address space or operation region access to * a previously installed handler. * * NOTE: During early initialization, we always install the default region * handlers for Memory, I/O and PCI_Config. This ensures that these operation * region address spaces are always available as per the ACPI specification. * This is especially needed in order to support the execution of * module-level AML code during loading of the ACPI tables. * ******************************************************************************/ ACPI_STATUS AcpiEvAddressSpaceDispatch ( ACPI_OPERAND_OBJECT *RegionObj, ACPI_OPERAND_OBJECT *FieldObj, UINT32 Function, UINT32 RegionOffset, UINT32 BitWidth, UINT64 *Value) { ACPI_STATUS Status; ACPI_ADR_SPACE_HANDLER Handler; ACPI_ADR_SPACE_SETUP RegionSetup; ACPI_OPERAND_OBJECT *HandlerDesc; ACPI_OPERAND_OBJECT *RegionObj2; void *RegionContext = NULL; ACPI_CONNECTION_INFO *Context; ACPI_MUTEX ContextMutex; BOOLEAN ContextLocked; ACPI_PHYSICAL_ADDRESS Address; ACPI_FUNCTION_TRACE (EvAddressSpaceDispatch); RegionObj2 = AcpiNsGetSecondaryObject (RegionObj); if (!RegionObj2) { return_ACPI_STATUS (AE_NOT_EXIST); } /* Ensure that there is a handler associated with this region */ HandlerDesc = RegionObj->Region.Handler; if (!HandlerDesc) { ACPI_ERROR ((AE_INFO, "No handler for Region [%4.4s] (%p) [%s]", AcpiUtGetNodeName (RegionObj->Region.Node), RegionObj, AcpiUtGetRegionName (RegionObj->Region.SpaceId))); return_ACPI_STATUS (AE_NOT_EXIST); } Context = HandlerDesc->AddressSpace.Context; ContextMutex = HandlerDesc->AddressSpace.ContextMutex; ContextLocked = FALSE; /* * It may be the case that the region has never been initialized. * Some types of regions require special init code */ if (!(RegionObj->Region.Flags & AOPOBJ_SETUP_COMPLETE)) { /* This region has not been initialized yet, do it */ RegionSetup = HandlerDesc->AddressSpace.Setup; if (!RegionSetup) { /* No initialization routine, exit with error */ ACPI_ERROR ((AE_INFO, "No init routine for region(%p) [%s]", RegionObj, AcpiUtGetRegionName (RegionObj->Region.SpaceId))); return_ACPI_STATUS (AE_NOT_EXIST); } if (RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_COMM) { ACPI_PCC_INFO *Ctx = HandlerDesc->AddressSpace.Context; Ctx->InternalBuffer = FieldObj->Field.InternalPccBuffer; Ctx->Length = (UINT16) RegionObj->Region.Length; Ctx->SubspaceId = (UINT8) RegionObj->Region.Address; } if (RegionObj->Region.SpaceId == ACPI_ADR_SPACE_FIXED_HARDWARE) { ACPI_FFH_INFO *Ctx = HandlerDesc->AddressSpace.Context; Ctx->Length = RegionObj->Region.Length; Ctx->Offset = RegionObj->Region.Address; } /* * We must exit the interpreter because the region setup will * potentially execute control methods (for example, the _REG method * for this region) */ AcpiExExitInterpreter (); Status = RegionSetup (RegionObj, ACPI_REGION_ACTIVATE, Context, &RegionContext); /* Re-enter the interpreter */ AcpiExEnterInterpreter (); /* Check for failure of the Region Setup */ if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "During region initialization: [%s]", AcpiUtGetRegionName (RegionObj->Region.SpaceId))); return_ACPI_STATUS (Status); } /* Region initialization may have been completed by RegionSetup */ if (!(RegionObj->Region.Flags & AOPOBJ_SETUP_COMPLETE)) { RegionObj->Region.Flags |= AOPOBJ_SETUP_COMPLETE; /* * Save the returned context for use in all accesses to * the handler for this particular region */ if (!(RegionObj2->Extra.RegionContext)) { RegionObj2->Extra.RegionContext = RegionContext; } } } /* We have everything we need, we can invoke the address space handler */ Handler = HandlerDesc->AddressSpace.Handler; Address = (RegionObj->Region.Address + RegionOffset); ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Handler %p (@%p) Address %8.8X%8.8X [%s]\n", &RegionObj->Region.Handler->AddressSpace, Handler, ACPI_FORMAT_UINT64 (Address), AcpiUtGetRegionName (RegionObj->Region.SpaceId))); if (!(HandlerDesc->AddressSpace.HandlerFlags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)) { /* * For handlers other than the default (supplied) handlers, we must * exit the interpreter because the handler *might* block -- we don't * know what it will do, so we can't hold the lock on the interpreter. */ AcpiExExitInterpreter(); } /* * Special handling for GenericSerialBus and GeneralPurposeIo: * There are three extra parameters that must be passed to the * handler via the context: * 1) Connection buffer, a resource template from Connection() op * 2) Length of the above buffer * 3) Actual access length from the AccessAs() op * * Since we pass these extra parameters via the context, which is * shared between threads, we must lock the context to avoid these * parameters being changed from another thread before the handler * has completed running. * * In addition, for GeneralPurposeIo, the Address and BitWidth fields * are defined as follows: * 1) Address is the pin number index of the field (bit offset from * the previous Connection) * 2) BitWidth is the actual bit length of the field (number of pins) */ if ((RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS || RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GPIO) && Context && FieldObj) { Status = AcpiOsAcquireMutex (ContextMutex, ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { goto ReEnterInterpreter; } ContextLocked = TRUE; /* Get the Connection (ResourceTemplate) buffer */ Context->Connection = FieldObj->Field.ResourceBuffer; Context->Length = FieldObj->Field.ResourceLength; Context->AccessLength = FieldObj->Field.AccessLength; if (RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GPIO) { Address = FieldObj->Field.PinNumberIndex; BitWidth = FieldObj->Field.BitLength; } } /* Call the handler */ Status = Handler (Function, Address, BitWidth, Value, Context, RegionObj2->Extra.RegionContext); if (ContextLocked) { AcpiOsReleaseMutex (ContextMutex); } if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Returned by Handler for [%s]", AcpiUtGetRegionName (RegionObj->Region.SpaceId))); /* * Special case for an EC timeout. These are seen so frequently * that an additional error message is helpful */ if ((RegionObj->Region.SpaceId == ACPI_ADR_SPACE_EC) && (Status == AE_TIME)) { ACPI_ERROR ((AE_INFO, "Timeout from EC hardware or EC device driver")); } } ReEnterInterpreter: if (!(HandlerDesc->AddressSpace.HandlerFlags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)) { /* * We just returned from a non-default handler, we must re-enter the * interpreter */ AcpiExEnterInterpreter (); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvDetachRegion * * PARAMETERS: RegionObj - Region Object * AcpiNsIsLocked - Namespace Region Already Locked? * * RETURN: None * * DESCRIPTION: Break the association between the handler and the region * this is a two way association. * ******************************************************************************/ void AcpiEvDetachRegion ( ACPI_OPERAND_OBJECT *RegionObj, BOOLEAN AcpiNsIsLocked) { ACPI_OPERAND_OBJECT *HandlerObj; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *StartDesc; ACPI_OPERAND_OBJECT **LastObjPtr; ACPI_ADR_SPACE_SETUP RegionSetup; void **RegionContext; ACPI_OPERAND_OBJECT *RegionObj2; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (EvDetachRegion); RegionObj2 = AcpiNsGetSecondaryObject (RegionObj); if (!RegionObj2) { return_VOID; } RegionContext = &RegionObj2->Extra.RegionContext; /* Get the address handler from the region object */ HandlerObj = RegionObj->Region.Handler; if (!HandlerObj) { /* This region has no handler, all done */ return_VOID; } /* Find this region in the handler's list */ ObjDesc = HandlerObj->AddressSpace.RegionList; StartDesc = ObjDesc; LastObjPtr = &HandlerObj->AddressSpace.RegionList; while (ObjDesc) { /* Is this the correct Region? */ if (ObjDesc == RegionObj) { ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Removing Region %p from address handler %p\n", RegionObj, HandlerObj)); /* This is it, remove it from the handler's list */ *LastObjPtr = ObjDesc->Region.Next; ObjDesc->Region.Next = NULL; /* Must clear field */ if (AcpiNsIsLocked) { Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_VOID; } } /* Now stop region accesses by executing the _REG method */ Status = AcpiEvExecuteRegMethod (RegionObj, ACPI_REG_DISCONNECT); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "from region _REG, [%s]", AcpiUtGetRegionName (RegionObj->Region.SpaceId))); } if (AcpiNsIsLocked) { Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_VOID; } } /* * If the region has been activated, call the setup handler with * the deactivate notification */ if (RegionObj->Region.Flags & AOPOBJ_SETUP_COMPLETE) { RegionSetup = HandlerObj->AddressSpace.Setup; Status = RegionSetup (RegionObj, ACPI_REGION_DEACTIVATE, HandlerObj->AddressSpace.Context, RegionContext); /* * RegionContext should have been released by the deactivate * operation. We don't need access to it anymore here. */ if (RegionContext) { *RegionContext = NULL; } /* Init routine may fail, Just ignore errors */ if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "from region handler - deactivate, [%s]", AcpiUtGetRegionName (RegionObj->Region.SpaceId))); } RegionObj->Region.Flags &= ~(AOPOBJ_SETUP_COMPLETE); } /* * Remove handler reference in the region * * NOTE: this doesn't mean that the region goes away, the region * is just inaccessible as indicated to the _REG method * * If the region is on the handler's list, this must be the * region's handler */ RegionObj->Region.Handler = NULL; AcpiUtRemoveReference (HandlerObj); return_VOID; } /* Walk the linked list of handlers */ LastObjPtr = &ObjDesc->Region.Next; ObjDesc = ObjDesc->Region.Next; /* Prevent infinite loop if list is corrupted */ if (ObjDesc == StartDesc) { ACPI_ERROR ((AE_INFO, "Circular handler list in region object %p", RegionObj)); return_VOID; } } /* If we get here, the region was not in the handler's region list */ ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Cannot remove region %p from address handler %p\n", RegionObj, HandlerObj)); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiEvAttachRegion * * PARAMETERS: HandlerObj - Handler Object * RegionObj - Region Object * AcpiNsIsLocked - Namespace Region Already Locked? * * RETURN: None * * DESCRIPTION: Create the association between the handler and the region * this is a two way association. * ******************************************************************************/ ACPI_STATUS AcpiEvAttachRegion ( ACPI_OPERAND_OBJECT *HandlerObj, ACPI_OPERAND_OBJECT *RegionObj, BOOLEAN AcpiNsIsLocked) { ACPI_FUNCTION_TRACE (EvAttachRegion); /* Install the region's handler */ if (RegionObj->Region.Handler) { return_ACPI_STATUS (AE_ALREADY_EXISTS); } ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Adding Region [%4.4s] %p to address handler %p [%s]\n", AcpiUtGetNodeName (RegionObj->Region.Node), RegionObj, HandlerObj, AcpiUtGetRegionName (RegionObj->Region.SpaceId))); /* Link this region to the front of the handler's list */ RegionObj->Region.Next = HandlerObj->AddressSpace.RegionList; HandlerObj->AddressSpace.RegionList = RegionObj; RegionObj->Region.Handler = HandlerObj; AcpiUtAddReference (HandlerObj); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvExecuteRegMethod * * PARAMETERS: RegionObj - Region object * Function - Passed to _REG: On (1) or Off (0) * * RETURN: Status * * DESCRIPTION: Execute _REG method for a region * ******************************************************************************/ ACPI_STATUS AcpiEvExecuteRegMethod ( ACPI_OPERAND_OBJECT *RegionObj, UINT32 Function) { ACPI_EVALUATE_INFO *Info; ACPI_OPERAND_OBJECT *Args[3]; ACPI_OPERAND_OBJECT *RegionObj2; const ACPI_NAME *RegNamePtr = ACPI_CAST_PTR (ACPI_NAME, METHOD_NAME__REG); ACPI_NAMESPACE_NODE *MethodNode; ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (EvExecuteRegMethod); if (!AcpiGbl_NamespaceInitialized || RegionObj->Region.Handler == NULL) { return_ACPI_STATUS (AE_OK); } RegionObj2 = AcpiNsGetSecondaryObject (RegionObj); if (!RegionObj2) { return_ACPI_STATUS (AE_NOT_EXIST); } /* * Find any "_REG" method associated with this region definition. * The method should always be updated as this function may be * invoked after a namespace change. */ Node = RegionObj->Region.Node->Parent; Status = AcpiNsSearchOneScope ( *RegNamePtr, Node, ACPI_TYPE_METHOD, &MethodNode); if (ACPI_SUCCESS (Status)) { /* * The _REG method is optional and there can be only one per * region definition. This will be executed when the handler is * attached or removed. */ RegionObj2->Extra.Method_REG = MethodNode; } if (RegionObj2->Extra.Method_REG == NULL) { return_ACPI_STATUS (AE_OK); } /* _REG(DISCONNECT) should be paired with _REG(CONNECT) */ if ((Function == ACPI_REG_CONNECT && RegionObj->Common.Flags & AOPOBJ_REG_CONNECTED) || (Function == ACPI_REG_DISCONNECT && !(RegionObj->Common.Flags & AOPOBJ_REG_CONNECTED))) { return_ACPI_STATUS (AE_OK); } /* Allocate and initialize the evaluation information block */ Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); if (!Info) { return_ACPI_STATUS (AE_NO_MEMORY); } Info->PrefixNode = RegionObj2->Extra.Method_REG; Info->RelativePathname = NULL; Info->Parameters = Args; Info->Flags = ACPI_IGNORE_RETURN_VALUE; /* * The _REG method has two arguments: * * Arg0 - Integer: * Operation region space ID Same value as RegionObj->Region.SpaceId * * Arg1 - Integer: * connection status 1 for connecting the handler, 0 for disconnecting * the handler (Passed as a parameter) */ Args[0] = AcpiUtCreateIntegerObject ((UINT64) RegionObj->Region.SpaceId); if (!Args[0]) { Status = AE_NO_MEMORY; goto Cleanup1; } Args[1] = AcpiUtCreateIntegerObject ((UINT64) Function); if (!Args[1]) { Status = AE_NO_MEMORY; goto Cleanup2; } Args[2] = NULL; /* Terminate list */ /* Execute the method, no return value */ ACPI_DEBUG_EXEC ( AcpiUtDisplayInitPathname (ACPI_TYPE_METHOD, Info->PrefixNode, NULL)); Status = AcpiNsEvaluate (Info); AcpiUtRemoveReference (Args[1]); if (ACPI_FAILURE (Status)) { goto Cleanup2; } if (Function == ACPI_REG_CONNECT) { RegionObj->Common.Flags |= AOPOBJ_REG_CONNECTED; } else { RegionObj->Common.Flags &= ~AOPOBJ_REG_CONNECTED; } Cleanup2: AcpiUtRemoveReference (Args[0]); Cleanup1: ACPI_FREE (Info); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiEvExecuteRegMethods * * PARAMETERS: Node - Namespace node for the device * SpaceId - The address space ID * Function - Passed to _REG: On (1) or Off (0) * * RETURN: None * * DESCRIPTION: Run all _REG methods for the input Space ID; * Note: assumes namespace is locked, or system init time. * ******************************************************************************/ void AcpiEvExecuteRegMethods ( ACPI_NAMESPACE_NODE *Node, ACPI_ADR_SPACE_TYPE SpaceId, UINT32 Function) { ACPI_REG_WALK_INFO Info; ACPI_FUNCTION_TRACE (EvExecuteRegMethods); /* * These address spaces do not need a call to _REG, since the ACPI * specification defines them as: "must always be accessible". Since * they never change state (never become unavailable), no need to ever * call _REG on them. Also, a DataTable is not a "real" address space, * so do not call _REG. September 2018. */ if ((SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY) || (SpaceId == ACPI_ADR_SPACE_SYSTEM_IO) || (SpaceId == ACPI_ADR_SPACE_DATA_TABLE)) { return_VOID; } Info.SpaceId = SpaceId; Info.Function = Function; Info.RegRunCount = 0; ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES, " Running _REG methods for SpaceId %s\n", AcpiUtGetRegionName (Info.SpaceId))); /* * Run all _REG methods for all Operation Regions for this space ID. This * is a separate walk in order to handle any interdependencies between * regions and _REG methods. (i.e. handlers must be installed for all * regions of this Space ID before we can run any _REG methods) */ (void) AcpiNsWalkNamespace (ACPI_TYPE_ANY, Node, ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK, AcpiEvRegRun, NULL, &Info, NULL); /* * Special case for EC and GPIO: handle "orphan" _REG methods with * no region. */ if (SpaceId == ACPI_ADR_SPACE_EC || SpaceId == ACPI_ADR_SPACE_GPIO) { AcpiEvExecuteOrphanRegMethod (Node, SpaceId); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES, " Executed %u _REG methods for SpaceId %s\n", Info.RegRunCount, AcpiUtGetRegionName (Info.SpaceId))); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiEvRegRun * * PARAMETERS: WalkNamespace callback * * DESCRIPTION: Run _REG method for region objects of the requested spaceID * ******************************************************************************/ static ACPI_STATUS AcpiEvRegRun ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_REG_WALK_INFO *Info; Info = ACPI_CAST_PTR (ACPI_REG_WALK_INFO, Context); /* Convert and validate the device handle */ Node = AcpiNsValidateHandle (ObjHandle); if (!Node) { return (AE_BAD_PARAMETER); } /* * We only care about regions and objects that are allowed to have * address space handlers */ if ((Node->Type != ACPI_TYPE_REGION) && (Node != AcpiGbl_RootNode)) { return (AE_OK); } /* Check for an existing internal object */ ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { /* No object, just exit */ return (AE_OK); } /* Object is a Region */ if (ObjDesc->Region.SpaceId != Info->SpaceId) { /* This region is for a different address space, just ignore it */ return (AE_OK); } Info->RegRunCount++; Status = AcpiEvExecuteRegMethod (ObjDesc, Info->Function); return (Status); } /******************************************************************************* * * FUNCTION: AcpiEvExecuteOrphanRegMethod * * PARAMETERS: DeviceNode - Namespace node for an ACPI device * SpaceId - The address space ID * * RETURN: None * * DESCRIPTION: Execute an "orphan" _REG method that appears under an ACPI * device. This is a _REG method that has no corresponding region * within the device's scope. ACPI tables depending on these * "orphan" _REG methods have been seen for both EC and GPIO * Operation Regions. Presumably the Windows ACPI implementation * always calls the _REG method independent of the presence of * an actual Operation Region with the correct address space ID. * * MUTEX: Assumes the namespace is locked * ******************************************************************************/ static void AcpiEvExecuteOrphanRegMethod ( ACPI_NAMESPACE_NODE *DeviceNode, ACPI_ADR_SPACE_TYPE SpaceId) { ACPI_HANDLE RegMethod; ACPI_NAMESPACE_NODE *NextNode; ACPI_STATUS Status; ACPI_OBJECT_LIST Args; ACPI_OBJECT Objects[2]; ACPI_FUNCTION_TRACE (EvExecuteOrphanRegMethod); if (!DeviceNode) { return_VOID; } /* Namespace is currently locked, must release */ (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); /* Get a handle to a _REG method immediately under the EC device */ Status = AcpiGetHandle (DeviceNode, METHOD_NAME__REG, &RegMethod); if (ACPI_FAILURE (Status)) { goto Exit; /* There is no _REG method present */ } /* * Execute the _REG method only if there is no Operation Region in * this scope with the Embedded Controller space ID. Otherwise, it * will already have been executed. Note, this allows for Regions * with other space IDs to be present; but the code below will then * execute the _REG method with the EmbeddedControl SpaceID argument. */ NextNode = AcpiNsGetNextNode (DeviceNode, NULL); while (NextNode) { if ((NextNode->Type == ACPI_TYPE_REGION) && (NextNode->Object) && (NextNode->Object->Region.SpaceId == SpaceId)) { goto Exit; /* Do not execute the _REG */ } NextNode = AcpiNsGetNextNode (DeviceNode, NextNode); } /* Evaluate the _REG(SpaceId,Connect) method */ Args.Count = 2; Args.Pointer = Objects; Objects[0].Type = ACPI_TYPE_INTEGER; Objects[0].Integer.Value = SpaceId; Objects[1].Type = ACPI_TYPE_INTEGER; Objects[1].Integer.Value = ACPI_REG_CONNECT; (void) AcpiEvaluateObject (RegMethod, NULL, &Args, NULL); Exit: /* We ignore all errors from above, don't care */ (void) AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); return_VOID; } src/acpica/source/components/events/evrgnini.c000066400000000000000000000667041465205512700220670ustar00rootroot00000000000000/****************************************************************************** * * Module Name: evrgnini- ACPI AddressSpace (OpRegion) init * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acevents.h" #include "acnamesp.h" #include "acinterp.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evrgnini") /******************************************************************************* * * FUNCTION: AcpiEvSystemMemoryRegionSetup * * PARAMETERS: Handle - Region we are interested in * Function - Start or stop * HandlerContext - Address space handler context * RegionContext - Region specific context * * RETURN: Status * * DESCRIPTION: Setup a SystemMemory operation region * ******************************************************************************/ ACPI_STATUS AcpiEvSystemMemoryRegionSetup ( ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext) { ACPI_OPERAND_OBJECT *RegionDesc = (ACPI_OPERAND_OBJECT *) Handle; ACPI_MEM_SPACE_CONTEXT *LocalRegionContext; ACPI_MEM_MAPPING *Mm; ACPI_FUNCTION_TRACE (EvSystemMemoryRegionSetup); if (Function == ACPI_REGION_DEACTIVATE) { if (*RegionContext) { LocalRegionContext = (ACPI_MEM_SPACE_CONTEXT *) *RegionContext; /* Delete memory mappings if present */ while (LocalRegionContext->FirstMm) { Mm = LocalRegionContext->FirstMm; LocalRegionContext->FirstMm = Mm->NextMm; AcpiOsUnmapMemory(Mm->LogicalAddress, Mm->Length); ACPI_FREE(Mm); } ACPI_FREE (LocalRegionContext); *RegionContext = NULL; } return_ACPI_STATUS (AE_OK); } /* Create a new context */ LocalRegionContext = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_MEM_SPACE_CONTEXT)); if (!(LocalRegionContext)) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Save the region length and address for use in the handler */ LocalRegionContext->Length = RegionDesc->Region.Length; LocalRegionContext->Address = RegionDesc->Region.Address; *RegionContext = LocalRegionContext; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvIoSpaceRegionSetup * * PARAMETERS: Handle - Region we are interested in * Function - Start or stop * HandlerContext - Address space handler context * RegionContext - Region specific context * * RETURN: Status * * DESCRIPTION: Setup a IO operation region * ******************************************************************************/ ACPI_STATUS AcpiEvIoSpaceRegionSetup ( ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext) { ACPI_FUNCTION_TRACE (EvIoSpaceRegionSetup); if (Function == ACPI_REGION_DEACTIVATE) { *RegionContext = NULL; } else { *RegionContext = HandlerContext; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvPciConfigRegionSetup * * PARAMETERS: Handle - Region we are interested in * Function - Start or stop * HandlerContext - Address space handler context * RegionContext - Region specific context * * RETURN: Status * * DESCRIPTION: Setup a PCI_Config operation region * * MUTEX: Assumes namespace is not locked * ******************************************************************************/ ACPI_STATUS AcpiEvPciConfigRegionSetup ( ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext) { ACPI_STATUS Status = AE_OK; UINT64 PciValue; ACPI_PCI_ID *PciId = *RegionContext; ACPI_OPERAND_OBJECT *HandlerObj; ACPI_NAMESPACE_NODE *ParentNode; ACPI_NAMESPACE_NODE *PciRootNode; ACPI_NAMESPACE_NODE *PciDeviceNode; ACPI_OPERAND_OBJECT *RegionObj = (ACPI_OPERAND_OBJECT *) Handle; ACPI_FUNCTION_TRACE (EvPciConfigRegionSetup); HandlerObj = RegionObj->Region.Handler; if (!HandlerObj) { /* * No installed handler. This shouldn't happen because the dispatch * routine checks before we get here, but we check again just in case. */ ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Attempting to init a region %p, with no handler\n", RegionObj)); return_ACPI_STATUS (AE_NOT_EXIST); } *RegionContext = NULL; if (Function == ACPI_REGION_DEACTIVATE) { if (PciId) { ACPI_FREE (PciId); } return_ACPI_STATUS (Status); } ParentNode = RegionObj->Region.Node->Parent; /* * Get the _SEG and _BBN values from the device upon which the handler * is installed. * * We need to get the _SEG and _BBN objects relative to the PCI BUS device. * This is the device the handler has been registered to handle. */ /* * If the AddressSpace.Node is still pointing to the root, we need * to scan upward for a PCI Root bridge and re-associate the OpRegion * handlers with that device. */ if (HandlerObj->AddressSpace.Node == AcpiGbl_RootNode) { /* Start search from the parent object */ PciRootNode = ParentNode; while (PciRootNode != AcpiGbl_RootNode) { /* Get the _HID/_CID in order to detect a RootBridge */ if (AcpiEvIsPciRootBridge (PciRootNode)) { /* Install a handler for this PCI root bridge */ Status = AcpiInstallAddressSpaceHandler ( (ACPI_HANDLE) PciRootNode, ACPI_ADR_SPACE_PCI_CONFIG, ACPI_DEFAULT_HANDLER, NULL, NULL); if (ACPI_FAILURE (Status)) { if (Status == AE_SAME_HANDLER) { /* * It is OK if the handler is already installed on the * root bridge. Still need to return a context object * for the new PCI_Config operation region, however. */ } else { ACPI_EXCEPTION ((AE_INFO, Status, "Could not install PciConfig handler " "for Root Bridge %4.4s", AcpiUtGetNodeName (PciRootNode))); } } break; } PciRootNode = PciRootNode->Parent; } /* PCI root bridge not found, use namespace root node */ } else { PciRootNode = HandlerObj->AddressSpace.Node; } /* * If this region is now initialized, we are done. * (InstallAddressSpaceHandler could have initialized it) */ if (RegionObj->Region.Flags & AOPOBJ_SETUP_COMPLETE) { return_ACPI_STATUS (AE_OK); } /* Region is still not initialized. Create a new context */ PciId = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PCI_ID)); if (!PciId) { return_ACPI_STATUS (AE_NO_MEMORY); } /* * For PCI_Config space access, we need the segment, bus, device and * function numbers. Acquire them here. * * Find the parent device object. (This allows the operation region to be * within a subscope under the device, such as a control method.) */ PciDeviceNode = RegionObj->Region.Node; while (PciDeviceNode && (PciDeviceNode->Type != ACPI_TYPE_DEVICE)) { PciDeviceNode = PciDeviceNode->Parent; } if (!PciDeviceNode) { ACPI_FREE (PciId); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* * Get the PCI device and function numbers from the _ADR object * contained in the parent's scope. */ Status = AcpiUtEvaluateNumericObject (METHOD_NAME__ADR, PciDeviceNode, &PciValue); /* * The default is zero, and since the allocation above zeroed the data, * just do nothing on failure. */ if (ACPI_SUCCESS (Status)) { PciId->Device = ACPI_HIWORD (ACPI_LODWORD (PciValue)); PciId->Function = ACPI_LOWORD (ACPI_LODWORD (PciValue)); } /* The PCI segment number comes from the _SEG method */ Status = AcpiUtEvaluateNumericObject (METHOD_NAME__SEG, PciRootNode, &PciValue); if (ACPI_SUCCESS (Status)) { PciId->Segment = ACPI_LOWORD (PciValue); } /* The PCI bus number comes from the _BBN method */ Status = AcpiUtEvaluateNumericObject (METHOD_NAME__BBN, PciRootNode, &PciValue); if (ACPI_SUCCESS (Status)) { PciId->Bus = ACPI_LOWORD (PciValue); } /* Complete/update the PCI ID for this device */ Status = AcpiHwDerivePciId (PciId, PciRootNode, RegionObj->Region.Node); if (ACPI_FAILURE (Status)) { ACPI_FREE (PciId); return_ACPI_STATUS (Status); } *RegionContext = PciId; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvIsPciRootBridge * * PARAMETERS: Node - Device node being examined * * RETURN: TRUE if device is a PCI/PCI-Express Root Bridge * * DESCRIPTION: Determine if the input device represents a PCI Root Bridge by * examining the _HID and _CID for the device. * ******************************************************************************/ BOOLEAN AcpiEvIsPciRootBridge ( ACPI_NAMESPACE_NODE *Node) { ACPI_STATUS Status; ACPI_PNP_DEVICE_ID *Hid; ACPI_PNP_DEVICE_ID_LIST *Cid; UINT32 i; BOOLEAN Match; /* Get the _HID and check for a PCI Root Bridge */ Status = AcpiUtExecute_HID (Node, &Hid); if (ACPI_FAILURE (Status)) { return (FALSE); } Match = AcpiUtIsPciRootBridge (Hid->String); ACPI_FREE (Hid); if (Match) { return (TRUE); } /* The _HID did not match. Get the _CID and check for a PCI Root Bridge */ Status = AcpiUtExecute_CID (Node, &Cid); if (ACPI_FAILURE (Status)) { return (FALSE); } /* Check all _CIDs in the returned list */ for (i = 0; i < Cid->Count; i++) { if (AcpiUtIsPciRootBridge (Cid->Ids[i].String)) { ACPI_FREE (Cid); return (TRUE); } } ACPI_FREE (Cid); return (FALSE); } /******************************************************************************* * * FUNCTION: AcpiEvPciBarRegionSetup * * PARAMETERS: Handle - Region we are interested in * Function - Start or stop * HandlerContext - Address space handler context * RegionContext - Region specific context * * RETURN: Status * * DESCRIPTION: Setup a PciBAR operation region * * MUTEX: Assumes namespace is not locked * ******************************************************************************/ ACPI_STATUS AcpiEvPciBarRegionSetup ( ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext) { ACPI_FUNCTION_TRACE (EvPciBarRegionSetup); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvCmosRegionSetup * * PARAMETERS: Handle - Region we are interested in * Function - Start or stop * HandlerContext - Address space handler context * RegionContext - Region specific context * * RETURN: Status * * DESCRIPTION: Setup a CMOS operation region * * MUTEX: Assumes namespace is not locked * ******************************************************************************/ ACPI_STATUS AcpiEvCmosRegionSetup ( ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext) { ACPI_FUNCTION_TRACE (EvCmosRegionSetup); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvDataTableRegionSetup * * PARAMETERS: Handle - Region we are interested in * Function - Start or stop * HandlerContext - Address space handler context * RegionContext - Region specific context * * RETURN: Status * * DESCRIPTION: Setup a DataTableRegion * * MUTEX: Assumes namespace is not locked * ******************************************************************************/ ACPI_STATUS AcpiEvDataTableRegionSetup ( ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext) { ACPI_OPERAND_OBJECT *RegionDesc = (ACPI_OPERAND_OBJECT *) Handle; ACPI_DATA_TABLE_MAPPING *LocalRegionContext; ACPI_FUNCTION_TRACE (EvDataTableRegionSetup); if (Function == ACPI_REGION_DEACTIVATE) { if (*RegionContext) { ACPI_FREE (*RegionContext); *RegionContext = NULL; } return_ACPI_STATUS (AE_OK); } /* Create a new context */ LocalRegionContext = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_DATA_TABLE_MAPPING)); if (!(LocalRegionContext)) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Save the data table pointer for use in the handler */ LocalRegionContext->Pointer = RegionDesc->Region.Pointer; *RegionContext = LocalRegionContext; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvDefaultRegionSetup * * PARAMETERS: Handle - Region we are interested in * Function - Start or stop * HandlerContext - Address space handler context * RegionContext - Region specific context * * RETURN: Status * * DESCRIPTION: Default region initialization * ******************************************************************************/ ACPI_STATUS AcpiEvDefaultRegionSetup ( ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext) { ACPI_FUNCTION_TRACE (EvDefaultRegionSetup); if (Function == ACPI_REGION_DEACTIVATE) { *RegionContext = NULL; } else { *RegionContext = HandlerContext; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiEvInitializeRegion * * PARAMETERS: RegionObj - Region we are initializing * * RETURN: Status * * DESCRIPTION: Initializes the region, finds any _REG methods and saves them * for execution at a later time * * Get the appropriate address space handler for a newly * created region. * * This also performs address space specific initialization. For * example, PCI regions must have an _ADR object that contains * a PCI address in the scope of the definition. This address is * required to perform an access to PCI config space. * * MUTEX: Interpreter should be unlocked, because we may run the _REG * method for this region. * * NOTE: Possible incompliance: * There is a behavior conflict in automatic _REG execution: * 1. When the interpreter is evaluating a method, we can only * automatically run _REG for the following case: * Method(_REG, 2) {} * OperationRegion (OPR1, 0x80, 0x1000010, 0x4) * 2. When the interpreter is loading a table, we can also * automatically run _REG for the following case: * OperationRegion (OPR1, 0x80, 0x1000010, 0x4) * Method(_REG, 2) {} * Though this may not be compliant to the de-facto standard, the * logic is kept in order not to trigger regressions. And keeping * this logic should be taken care by the caller of this function. * ******************************************************************************/ ACPI_STATUS AcpiEvInitializeRegion ( ACPI_OPERAND_OBJECT *RegionObj) { ACPI_OPERAND_OBJECT *HandlerObj; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_ADR_SPACE_TYPE SpaceId; ACPI_NAMESPACE_NODE *Node; ACPI_FUNCTION_TRACE (EvInitializeRegion); if (!RegionObj) { return_ACPI_STATUS (AE_BAD_PARAMETER); } if (RegionObj->Common.Flags & AOPOBJ_OBJECT_INITIALIZED) { return_ACPI_STATUS (AE_OK); } RegionObj->Common.Flags |= AOPOBJ_OBJECT_INITIALIZED; Node = RegionObj->Region.Node->Parent; SpaceId = RegionObj->Region.SpaceId; /* * The following loop depends upon the root Node having no parent * ie: AcpiGbl_RootNode->Parent being set to NULL */ while (Node) { /* Check to see if a handler exists */ HandlerObj = NULL; ObjDesc = AcpiNsGetAttachedObject (Node); if (ObjDesc) { /* Can only be a handler if the object exists */ switch (Node->Type) { case ACPI_TYPE_DEVICE: case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_THERMAL: HandlerObj = ObjDesc->CommonNotify.Handler; break; default: /* Ignore other objects */ break; } HandlerObj = AcpiEvFindRegionHandler (SpaceId, HandlerObj); if (HandlerObj) { /* Found correct handler */ ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Found handler %p for region %p in obj %p\n", HandlerObj, RegionObj, ObjDesc)); (void) AcpiEvAttachRegion (HandlerObj, RegionObj, FALSE); /* * Tell all users that this region is usable by * running the _REG method */ AcpiExExitInterpreter (); (void) AcpiEvExecuteRegMethod (RegionObj, ACPI_REG_CONNECT); AcpiExEnterInterpreter (); return_ACPI_STATUS (AE_OK); } } /* This node does not have the handler we need; Pop up one level */ Node = Node->Parent; } /* * If we get here, there is no handler for this region. This is not * fatal because many regions get created before a handler is installed * for said region. */ ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "No handler for RegionType %s(%X) (RegionObj %p)\n", AcpiUtGetRegionName (SpaceId), SpaceId, RegionObj)); return_ACPI_STATUS (AE_OK); } src/acpica/source/components/events/evsci.c000066400000000000000000000341771465205512700213560ustar00rootroot00000000000000/******************************************************************************* * * Module Name: evsci - System Control Interrupt configuration and * legacy to ACPI mode state transition functions * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acevents.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evsci") #if (!ACPI_REDUCED_HARDWARE) /* Entire module */ /* Local prototypes */ static UINT32 ACPI_SYSTEM_XFACE AcpiEvSciXruptHandler ( void *Context); /******************************************************************************* * * FUNCTION: AcpiEvSciDispatch * * PARAMETERS: None * * RETURN: Status code indicates whether interrupt was handled. * * DESCRIPTION: Dispatch the SCI to all host-installed SCI handlers. * ******************************************************************************/ UINT32 AcpiEvSciDispatch ( void) { ACPI_SCI_HANDLER_INFO *SciHandler; ACPI_CPU_FLAGS Flags; UINT32 IntStatus = ACPI_INTERRUPT_NOT_HANDLED; ACPI_FUNCTION_NAME (EvSciDispatch); /* Are there any host-installed SCI handlers? */ if (!AcpiGbl_SciHandlerList) { return (IntStatus); } Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* Invoke all host-installed SCI handlers */ SciHandler = AcpiGbl_SciHandlerList; while (SciHandler) { /* Invoke the installed handler (at interrupt level) */ IntStatus |= SciHandler->Address ( SciHandler->Context); SciHandler = SciHandler->Next; } AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return (IntStatus); } /******************************************************************************* * * FUNCTION: AcpiEvSciXruptHandler * * PARAMETERS: Context - Calling Context * * RETURN: Status code indicates whether interrupt was handled. * * DESCRIPTION: Interrupt handler that will figure out what function or * control method to call to deal with a SCI. * ******************************************************************************/ static UINT32 ACPI_SYSTEM_XFACE AcpiEvSciXruptHandler ( void *Context) { ACPI_GPE_XRUPT_INFO *GpeXruptList = Context; UINT32 InterruptHandled = ACPI_INTERRUPT_NOT_HANDLED; ACPI_FUNCTION_TRACE (EvSciXruptHandler); /* * We are guaranteed by the ACPICA initialization/shutdown code that * if this interrupt handler is installed, ACPI is enabled. */ /* * Fixed Events: * Check for and dispatch any Fixed Events that have occurred */ InterruptHandled |= AcpiEvFixedEventDetect (); /* * General Purpose Events: * Check for and dispatch any GPEs that have occurred */ InterruptHandled |= AcpiEvGpeDetect (GpeXruptList); /* Invoke all host-installed SCI handlers */ InterruptHandled |= AcpiEvSciDispatch (); AcpiSciCount++; return_UINT32 (InterruptHandled); } /******************************************************************************* * * FUNCTION: AcpiEvGpeXruptHandler * * PARAMETERS: Context - Calling Context * * RETURN: Status code indicates whether interrupt was handled. * * DESCRIPTION: Handler for GPE Block Device interrupts * ******************************************************************************/ UINT32 ACPI_SYSTEM_XFACE AcpiEvGpeXruptHandler ( void *Context) { ACPI_GPE_XRUPT_INFO *GpeXruptList = Context; UINT32 InterruptHandled = ACPI_INTERRUPT_NOT_HANDLED; ACPI_FUNCTION_TRACE (EvGpeXruptHandler); /* * We are guaranteed by the ACPICA initialization/shutdown code that * if this interrupt handler is installed, ACPI is enabled. */ /* GPEs: Check for and dispatch any GPEs that have occurred */ InterruptHandled |= AcpiEvGpeDetect (GpeXruptList); return_UINT32 (InterruptHandled); } /****************************************************************************** * * FUNCTION: AcpiEvInstallSciHandler * * PARAMETERS: none * * RETURN: Status * * DESCRIPTION: Installs SCI handler. * ******************************************************************************/ UINT32 AcpiEvInstallSciHandler ( void) { UINT32 Status = AE_OK; ACPI_FUNCTION_TRACE (EvInstallSciHandler); Status = AcpiOsInstallInterruptHandler ((UINT32) AcpiGbl_FADT.SciInterrupt, AcpiEvSciXruptHandler, AcpiGbl_GpeXruptListHead); return_ACPI_STATUS (Status); } /****************************************************************************** * * FUNCTION: AcpiEvRemoveAllSciHandlers * * PARAMETERS: none * * RETURN: AE_OK if handler uninstalled, AE_ERROR if handler was not * installed to begin with * * DESCRIPTION: Remove the SCI interrupt handler. No further SCIs will be * taken. Remove all host-installed SCI handlers. * * Note: It doesn't seem important to disable all events or set the event * enable registers to their original values. The OS should disable * the SCI interrupt level when the handler is removed, so no more * events will come in. * ******************************************************************************/ ACPI_STATUS AcpiEvRemoveAllSciHandlers ( void) { ACPI_SCI_HANDLER_INFO *SciHandler; ACPI_CPU_FLAGS Flags; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (EvRemoveAllSciHandlers); /* Just let the OS remove the handler and disable the level */ Status = AcpiOsRemoveInterruptHandler ((UINT32) AcpiGbl_FADT.SciInterrupt, AcpiEvSciXruptHandler); if (!AcpiGbl_SciHandlerList) { return (Status); } Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* Free all host-installed SCI handlers */ while (AcpiGbl_SciHandlerList) { SciHandler = AcpiGbl_SciHandlerList; AcpiGbl_SciHandlerList = SciHandler->Next; ACPI_FREE (SciHandler); } AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return_ACPI_STATUS (Status); } #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/events/evxface.c000066400000000000000000001216131465205512700216560ustar00rootroot00000000000000/****************************************************************************** * * Module Name: evxface - External interfaces for ACPI events * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acevents.h" #include "acinterp.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evxface") #if (!ACPI_REDUCED_HARDWARE) /* Local prototypes */ static ACPI_STATUS AcpiEvInstallGpeHandler ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, UINT32 Type, BOOLEAN IsRawHandler, ACPI_GPE_HANDLER Address, void *Context); #endif /******************************************************************************* * * FUNCTION: AcpiInstallNotifyHandler * * PARAMETERS: Device - The device for which notifies will be handled * HandlerType - The type of handler: * ACPI_SYSTEM_NOTIFY: System Handler (00-7F) * ACPI_DEVICE_NOTIFY: Device Handler (80-FF) * ACPI_ALL_NOTIFY: Both System and Device * Handler - Address of the handler * Context - Value passed to the handler on each GPE * * RETURN: Status * * DESCRIPTION: Install a handler for notifications on an ACPI Device, * ThermalZone, or Processor object. * * NOTES: The Root namespace object may have only one handler for each * type of notify (System/Device). Device/Thermal/Processor objects * may have one device notify handler, and multiple system notify * handlers. * ******************************************************************************/ ACPI_STATUS AcpiInstallNotifyHandler ( ACPI_HANDLE Device, UINT32 HandlerType, ACPI_NOTIFY_HANDLER Handler, void *Context) { ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Device); ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *HandlerObj; ACPI_STATUS Status; UINT32 i; ACPI_FUNCTION_TRACE (AcpiInstallNotifyHandler); /* Parameter validation */ if ((!Device) || (!Handler) || (!HandlerType) || (HandlerType > ACPI_MAX_NOTIFY_HANDLER_TYPE)) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Root Object: * Registering a notify handler on the root object indicates that the * caller wishes to receive notifications for all objects. Note that * only one global handler can be registered per notify type. * Ensure that a handler is not already installed. */ if (Device == ACPI_ROOT_OBJECT) { for (i = 0; i < ACPI_NUM_NOTIFY_TYPES; i++) { if (HandlerType & (i+1)) { if (AcpiGbl_GlobalNotify[i].Handler) { Status = AE_ALREADY_EXISTS; goto UnlockAndExit; } AcpiGbl_GlobalNotify[i].Handler = Handler; AcpiGbl_GlobalNotify[i].Context = Context; } } goto UnlockAndExit; /* Global notify handler installed, all done */ } /* * All Other Objects: * Caller will only receive notifications specific to the target * object. Note that only certain object types are allowed to * receive notifications. */ /* Are Notifies allowed on this object? */ if (!AcpiEvIsNotifyObject (Node)) { Status = AE_TYPE; goto UnlockAndExit; } /* Check for an existing internal object, might not exist */ ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { /* Create a new object */ ObjDesc = AcpiUtCreateInternalObject (Node->Type); if (!ObjDesc) { Status = AE_NO_MEMORY; goto UnlockAndExit; } /* Attach new object to the Node, remove local reference */ Status = AcpiNsAttachObject (Device, ObjDesc, Node->Type); AcpiUtRemoveReference (ObjDesc); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; } } /* Ensure that the handler is not already installed in the lists */ for (i = 0; i < ACPI_NUM_NOTIFY_TYPES; i++) { if (HandlerType & (i+1)) { HandlerObj = ObjDesc->CommonNotify.NotifyList[i]; while (HandlerObj) { if (HandlerObj->Notify.Handler == Handler) { Status = AE_ALREADY_EXISTS; goto UnlockAndExit; } HandlerObj = HandlerObj->Notify.Next[i]; } } } /* Create and populate a new notify handler object */ HandlerObj = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_NOTIFY); if (!HandlerObj) { Status = AE_NO_MEMORY; goto UnlockAndExit; } HandlerObj->Notify.Node = Node; HandlerObj->Notify.HandlerType = HandlerType; HandlerObj->Notify.Handler = Handler; HandlerObj->Notify.Context = Context; /* Install the handler at the list head(s) */ for (i = 0; i < ACPI_NUM_NOTIFY_TYPES; i++) { if (HandlerType & (i+1)) { HandlerObj->Notify.Next[i] = ObjDesc->CommonNotify.NotifyList[i]; ObjDesc->CommonNotify.NotifyList[i] = HandlerObj; } } /* Add an extra reference if handler was installed in both lists */ if (HandlerType == ACPI_ALL_NOTIFY) { AcpiUtAddReference (HandlerObj); } UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiInstallNotifyHandler) /******************************************************************************* * * FUNCTION: AcpiRemoveNotifyHandler * * PARAMETERS: Device - The device for which the handler is installed * HandlerType - The type of handler: * ACPI_SYSTEM_NOTIFY: System Handler (00-7F) * ACPI_DEVICE_NOTIFY: Device Handler (80-FF) * ACPI_ALL_NOTIFY: Both System and Device * Handler - Address of the handler * * RETURN: Status * * DESCRIPTION: Remove a handler for notifies on an ACPI device * ******************************************************************************/ ACPI_STATUS AcpiRemoveNotifyHandler ( ACPI_HANDLE Device, UINT32 HandlerType, ACPI_NOTIFY_HANDLER Handler) { ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Device); ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *HandlerObj; ACPI_OPERAND_OBJECT *PreviousHandlerObj; ACPI_STATUS Status = AE_OK; UINT32 i; ACPI_FUNCTION_TRACE (AcpiRemoveNotifyHandler); /* Parameter validation */ if ((!Device) || (!Handler) || (!HandlerType) || (HandlerType > ACPI_MAX_NOTIFY_HANDLER_TYPE)) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Root Object. Global handlers are removed here */ if (Device == ACPI_ROOT_OBJECT) { for (i = 0; i < ACPI_NUM_NOTIFY_TYPES; i++) { if (HandlerType & (i+1)) { Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (!AcpiGbl_GlobalNotify[i].Handler || (AcpiGbl_GlobalNotify[i].Handler != Handler)) { Status = AE_NOT_EXIST; goto UnlockAndExit; } ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Removing global notify handler\n")); AcpiGbl_GlobalNotify[i].Handler = NULL; AcpiGbl_GlobalNotify[i].Context = NULL; (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); /* Make sure all deferred notify tasks are completed */ AcpiOsWaitEventsComplete (); } } return_ACPI_STATUS (AE_OK); } /* All other objects: Are Notifies allowed on this object? */ if (!AcpiEvIsNotifyObject (Node)) { return_ACPI_STATUS (AE_TYPE); } /* Must have an existing internal object */ ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { return_ACPI_STATUS (AE_NOT_EXIST); } /* Internal object exists. Find the handler and remove it */ for (i = 0; i < ACPI_NUM_NOTIFY_TYPES; i++) { if (HandlerType & (i+1)) { Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } HandlerObj = ObjDesc->CommonNotify.NotifyList[i]; PreviousHandlerObj = NULL; /* Attempt to find the handler in the handler list */ while (HandlerObj && (HandlerObj->Notify.Handler != Handler)) { PreviousHandlerObj = HandlerObj; HandlerObj = HandlerObj->Notify.Next[i]; } if (!HandlerObj) { Status = AE_NOT_EXIST; goto UnlockAndExit; } /* Remove the handler object from the list */ if (PreviousHandlerObj) /* Handler is not at the list head */ { PreviousHandlerObj->Notify.Next[i] = HandlerObj->Notify.Next[i]; } else /* Handler is at the list head */ { ObjDesc->CommonNotify.NotifyList[i] = HandlerObj->Notify.Next[i]; } (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); /* Make sure all deferred notify tasks are completed */ AcpiOsWaitEventsComplete (); AcpiUtRemoveReference (HandlerObj); } } return_ACPI_STATUS (Status); UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiRemoveNotifyHandler) /******************************************************************************* * * FUNCTION: AcpiInstallExceptionHandler * * PARAMETERS: Handler - Pointer to the handler function for the * event * * RETURN: Status * * DESCRIPTION: Saves the pointer to the handler function * ******************************************************************************/ ACPI_STATUS AcpiInstallExceptionHandler ( ACPI_EXCEPTION_HANDLER Handler) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiInstallExceptionHandler); Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Don't allow two handlers. */ if (AcpiGbl_ExceptionHandler) { Status = AE_ALREADY_EXISTS; goto Cleanup; } /* Install the handler */ AcpiGbl_ExceptionHandler = Handler; Cleanup: (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiInstallExceptionHandler) #if (!ACPI_REDUCED_HARDWARE) /******************************************************************************* * * FUNCTION: AcpiInstallSciHandler * * PARAMETERS: Address - Address of the handler * Context - Value passed to the handler on each SCI * * RETURN: Status * * DESCRIPTION: Install a handler for a System Control Interrupt. * ******************************************************************************/ ACPI_STATUS AcpiInstallSciHandler ( ACPI_SCI_HANDLER Address, void *Context) { ACPI_SCI_HANDLER_INFO *NewSciHandler; ACPI_SCI_HANDLER_INFO *SciHandler; ACPI_CPU_FLAGS Flags; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiInstallSciHandler); if (!Address) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Allocate and init a handler object */ NewSciHandler = ACPI_ALLOCATE (sizeof (ACPI_SCI_HANDLER_INFO)); if (!NewSciHandler) { return_ACPI_STATUS (AE_NO_MEMORY); } NewSciHandler->Address = Address; NewSciHandler->Context = Context; Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { goto Exit; } /* Lock list during installation */ Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); SciHandler = AcpiGbl_SciHandlerList; /* Ensure handler does not already exist */ while (SciHandler) { if (Address == SciHandler->Address) { Status = AE_ALREADY_EXISTS; goto UnlockAndExit; } SciHandler = SciHandler->Next; } /* Install the new handler into the global list (at head) */ NewSciHandler->Next = AcpiGbl_SciHandlerList; AcpiGbl_SciHandlerList = NewSciHandler; UnlockAndExit: AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); Exit: if (ACPI_FAILURE (Status)) { ACPI_FREE (NewSciHandler); } return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiInstallSciHandler) /******************************************************************************* * * FUNCTION: AcpiRemoveSciHandler * * PARAMETERS: Address - Address of the handler * * RETURN: Status * * DESCRIPTION: Remove a handler for a System Control Interrupt. * ******************************************************************************/ ACPI_STATUS AcpiRemoveSciHandler ( ACPI_SCI_HANDLER Address) { ACPI_SCI_HANDLER_INFO *PrevSciHandler; ACPI_SCI_HANDLER_INFO *NextSciHandler; ACPI_CPU_FLAGS Flags; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiRemoveSciHandler); if (!Address) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Remove the SCI handler with lock */ Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); PrevSciHandler = NULL; NextSciHandler = AcpiGbl_SciHandlerList; while (NextSciHandler) { if (NextSciHandler->Address == Address) { /* Unlink and free the SCI handler info block */ if (PrevSciHandler) { PrevSciHandler->Next = NextSciHandler->Next; } else { AcpiGbl_SciHandlerList = NextSciHandler->Next; } AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); ACPI_FREE (NextSciHandler); goto UnlockAndExit; } PrevSciHandler = NextSciHandler; NextSciHandler = NextSciHandler->Next; } AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); Status = AE_NOT_EXIST; UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiRemoveSciHandler) /******************************************************************************* * * FUNCTION: AcpiInstallGlobalEventHandler * * PARAMETERS: Handler - Pointer to the global event handler function * Context - Value passed to the handler on each event * * RETURN: Status * * DESCRIPTION: Saves the pointer to the handler function. The global handler * is invoked upon each incoming GPE and Fixed Event. It is * invoked at interrupt level at the time of the event dispatch. * Can be used to update event counters, etc. * ******************************************************************************/ ACPI_STATUS AcpiInstallGlobalEventHandler ( ACPI_GBL_EVENT_HANDLER Handler, void *Context) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiInstallGlobalEventHandler); /* Parameter validation */ if (!Handler) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Don't allow two handlers. */ if (AcpiGbl_GlobalEventHandler) { Status = AE_ALREADY_EXISTS; goto Cleanup; } AcpiGbl_GlobalEventHandler = Handler; AcpiGbl_GlobalEventHandlerContext = Context; Cleanup: (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiInstallGlobalEventHandler) /******************************************************************************* * * FUNCTION: AcpiInstallFixedEventHandler * * PARAMETERS: Event - Event type to enable. * Handler - Pointer to the handler function for the * event * Context - Value passed to the handler on each GPE * * RETURN: Status * * DESCRIPTION: Saves the pointer to the handler function and then enables the * event. * ******************************************************************************/ ACPI_STATUS AcpiInstallFixedEventHandler ( UINT32 Event, ACPI_EVENT_HANDLER Handler, void *Context) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiInstallFixedEventHandler); /* Parameter validation */ if (Event > ACPI_EVENT_MAX) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Do not allow multiple handlers */ if (AcpiGbl_FixedEventHandlers[Event].Handler) { Status = AE_ALREADY_EXISTS; goto Cleanup; } /* Install the handler before enabling the event */ AcpiGbl_FixedEventHandlers[Event].Handler = Handler; AcpiGbl_FixedEventHandlers[Event].Context = Context; Status = AcpiEnableEvent (Event, 0); if (ACPI_FAILURE (Status)) { ACPI_WARNING ((AE_INFO, "Could not enable fixed event - %s (%u)", AcpiUtGetEventName (Event), Event)); /* Remove the handler */ AcpiGbl_FixedEventHandlers[Event].Handler = NULL; AcpiGbl_FixedEventHandlers[Event].Context = NULL; } else { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Enabled fixed event %s (%X), Handler=%p\n", AcpiUtGetEventName (Event), Event, Handler)); } Cleanup: (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiInstallFixedEventHandler) /******************************************************************************* * * FUNCTION: AcpiRemoveFixedEventHandler * * PARAMETERS: Event - Event type to disable. * Handler - Address of the handler * * RETURN: Status * * DESCRIPTION: Disables the event and unregisters the event handler. * ******************************************************************************/ ACPI_STATUS AcpiRemoveFixedEventHandler ( UINT32 Event, ACPI_EVENT_HANDLER Handler) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (AcpiRemoveFixedEventHandler); /* Parameter validation */ if (Event > ACPI_EVENT_MAX) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Disable the event before removing the handler */ Status = AcpiDisableEvent (Event, 0); /* Always Remove the handler */ AcpiGbl_FixedEventHandlers[Event].Handler = NULL; AcpiGbl_FixedEventHandlers[Event].Context = NULL; if (ACPI_FAILURE (Status)) { ACPI_WARNING ((AE_INFO, "Could not disable fixed event - %s (%u)", AcpiUtGetEventName (Event), Event)); } else { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Disabled fixed event - %s (%X)\n", AcpiUtGetEventName (Event), Event)); } (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiRemoveFixedEventHandler) /******************************************************************************* * * FUNCTION: AcpiEvInstallGpeHandler * * PARAMETERS: GpeDevice - Namespace node for the GPE (NULL for FADT * defined GPEs) * GpeNumber - The GPE number within the GPE block * Type - Whether this GPE should be treated as an * edge- or level-triggered interrupt. * IsRawHandler - Whether this GPE should be handled using * the special GPE handler mode. * Address - Address of the handler * Context - Value passed to the handler on each GPE * * RETURN: Status * * DESCRIPTION: Internal function to install a handler for a General Purpose * Event. * ******************************************************************************/ static ACPI_STATUS AcpiEvInstallGpeHandler ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, UINT32 Type, BOOLEAN IsRawHandler, ACPI_GPE_HANDLER Address, void *Context) { ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_GPE_HANDLER_INFO *Handler; ACPI_STATUS Status; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (EvInstallGpeHandler); /* Parameter validation */ if ((!Address) || (Type & ~ACPI_GPE_XRUPT_TYPE_MASK)) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Allocate and init handler object (before lock) */ Handler = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_GPE_HANDLER_INFO)); if (!Handler) { Status = AE_NO_MEMORY; goto UnlockAndExit; } Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* Ensure that we have a valid GPE number */ GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); if (!GpeEventInfo) { Status = AE_BAD_PARAMETER; goto FreeAndExit; } /* Make sure that there isn't a handler there already */ if ((ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == ACPI_GPE_DISPATCH_HANDLER) || (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == ACPI_GPE_DISPATCH_RAW_HANDLER)) { Status = AE_ALREADY_EXISTS; goto FreeAndExit; } Handler->Address = Address; Handler->Context = Context; Handler->MethodNode = GpeEventInfo->Dispatch.MethodNode; Handler->OriginalFlags = (UINT8) (GpeEventInfo->Flags & (ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK)); /* * If the GPE is associated with a method, it may have been enabled * automatically during initialization, in which case it has to be * disabled now to avoid spurious execution of the handler. */ if (((ACPI_GPE_DISPATCH_TYPE (Handler->OriginalFlags) == ACPI_GPE_DISPATCH_METHOD) || (ACPI_GPE_DISPATCH_TYPE (Handler->OriginalFlags) == ACPI_GPE_DISPATCH_NOTIFY)) && GpeEventInfo->RuntimeCount) { Handler->OriginallyEnabled = TRUE; (void) AcpiEvRemoveGpeReference (GpeEventInfo); /* Sanity check of original type against new type */ if (Type != (UINT32) (GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK)) { ACPI_WARNING ((AE_INFO, "GPE type mismatch (level/edge)")); } } /* Install the handler */ GpeEventInfo->Dispatch.Handler = Handler; /* Setup up dispatch flags to indicate handler (vs. method/notify) */ GpeEventInfo->Flags &= ~(ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK); GpeEventInfo->Flags |= (UINT8) (Type | (IsRawHandler ? ACPI_GPE_DISPATCH_RAW_HANDLER : ACPI_GPE_DISPATCH_HANDLER)); AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (Status); FreeAndExit: AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); ACPI_FREE (Handler); goto UnlockAndExit; } /******************************************************************************* * * FUNCTION: AcpiInstallGpeHandler * * PARAMETERS: GpeDevice - Namespace node for the GPE (NULL for FADT * defined GPEs) * GpeNumber - The GPE number within the GPE block * Type - Whether this GPE should be treated as an * edge- or level-triggered interrupt. * Address - Address of the handler * Context - Value passed to the handler on each GPE * * RETURN: Status * * DESCRIPTION: Install a handler for a General Purpose Event. * ******************************************************************************/ ACPI_STATUS AcpiInstallGpeHandler ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, UINT32 Type, ACPI_GPE_HANDLER Address, void *Context) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiInstallGpeHandler); Status = AcpiEvInstallGpeHandler (GpeDevice, GpeNumber, Type, FALSE, Address, Context); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiInstallGpeHandler) /******************************************************************************* * * FUNCTION: AcpiInstallGpeRawHandler * * PARAMETERS: GpeDevice - Namespace node for the GPE (NULL for FADT * defined GPEs) * GpeNumber - The GPE number within the GPE block * Type - Whether this GPE should be treated as an * edge- or level-triggered interrupt. * Address - Address of the handler * Context - Value passed to the handler on each GPE * * RETURN: Status * * DESCRIPTION: Install a handler for a General Purpose Event. * ******************************************************************************/ ACPI_STATUS AcpiInstallGpeRawHandler ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, UINT32 Type, ACPI_GPE_HANDLER Address, void *Context) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiInstallGpeRawHandler); Status = AcpiEvInstallGpeHandler (GpeDevice, GpeNumber, Type, TRUE, Address, Context); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiInstallGpeRawHandler) /******************************************************************************* * * FUNCTION: AcpiRemoveGpeHandler * * PARAMETERS: GpeDevice - Namespace node for the GPE (NULL for FADT * defined GPEs) * GpeNumber - The event to remove a handler * Address - Address of the handler * * RETURN: Status * * DESCRIPTION: Remove a handler for a General Purpose AcpiEvent. * ******************************************************************************/ ACPI_STATUS AcpiRemoveGpeHandler ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, ACPI_GPE_HANDLER Address) { ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_GPE_HANDLER_INFO *Handler; ACPI_STATUS Status; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (AcpiRemoveGpeHandler); /* Parameter validation */ if (!Address) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* Ensure that we have a valid GPE number */ GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); if (!GpeEventInfo) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } /* Make sure that a handler is indeed installed */ if ((ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) != ACPI_GPE_DISPATCH_HANDLER) && (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) != ACPI_GPE_DISPATCH_RAW_HANDLER)) { Status = AE_NOT_EXIST; goto UnlockAndExit; } /* Make sure that the installed handler is the same */ if (GpeEventInfo->Dispatch.Handler->Address != Address) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } /* Remove the handler */ Handler = GpeEventInfo->Dispatch.Handler; GpeEventInfo->Dispatch.Handler = NULL; /* Restore Method node (if any), set dispatch flags */ GpeEventInfo->Dispatch.MethodNode = Handler->MethodNode; GpeEventInfo->Flags &= ~(ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK); GpeEventInfo->Flags |= Handler->OriginalFlags; /* * If the GPE was previously associated with a method and it was * enabled, it should be enabled at this point to restore the * post-initialization configuration. */ if (((ACPI_GPE_DISPATCH_TYPE (Handler->OriginalFlags) == ACPI_GPE_DISPATCH_METHOD) || (ACPI_GPE_DISPATCH_TYPE (Handler->OriginalFlags) == ACPI_GPE_DISPATCH_NOTIFY)) && Handler->OriginallyEnabled) { (void) AcpiEvAddGpeReference (GpeEventInfo, FALSE); if (ACPI_GPE_IS_POLLING_NEEDED (GpeEventInfo)) { /* Poll edge triggered GPEs to handle existing events */ AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); (void) AcpiEvDetectGpe ( GpeDevice, GpeEventInfo, GpeNumber); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); } } AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); /* Make sure all deferred GPE tasks are completed */ AcpiOsWaitEventsComplete (); /* Now we can free the handler object */ ACPI_FREE (Handler); return_ACPI_STATUS (Status); UnlockAndExit: AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiRemoveGpeHandler) /******************************************************************************* * * FUNCTION: AcpiAcquireGlobalLock * * PARAMETERS: Timeout - How long the caller is willing to wait * Handle - Where the handle to the lock is returned * (if acquired) * * RETURN: Status * * DESCRIPTION: Acquire the ACPI Global Lock * * Note: Allows callers with the same thread ID to acquire the global lock * multiple times. In other words, externally, the behavior of the global lock * is identical to an AML mutex. On the first acquire, a new handle is * returned. On any subsequent calls to acquire by the same thread, the same * handle is returned. * ******************************************************************************/ ACPI_STATUS AcpiAcquireGlobalLock ( UINT16 Timeout, UINT32 *Handle) { ACPI_STATUS Status; if (!Handle) { return (AE_BAD_PARAMETER); } /* Must lock interpreter to prevent race conditions */ AcpiExEnterInterpreter (); Status = AcpiExAcquireMutexObject (Timeout, AcpiGbl_GlobalLockMutex, AcpiOsGetThreadId ()); if (ACPI_SUCCESS (Status)) { /* Return the global lock handle (updated in AcpiEvAcquireGlobalLock) */ *Handle = AcpiGbl_GlobalLockHandle; } AcpiExExitInterpreter (); return (Status); } ACPI_EXPORT_SYMBOL (AcpiAcquireGlobalLock) /******************************************************************************* * * FUNCTION: AcpiReleaseGlobalLock * * PARAMETERS: Handle - Returned from AcpiAcquireGlobalLock * * RETURN: Status * * DESCRIPTION: Release the ACPI Global Lock. The handle must be valid. * ******************************************************************************/ ACPI_STATUS AcpiReleaseGlobalLock ( UINT32 Handle) { ACPI_STATUS Status; if (!Handle || (Handle != AcpiGbl_GlobalLockHandle)) { return (AE_NOT_ACQUIRED); } Status = AcpiExReleaseMutexObject (AcpiGbl_GlobalLockMutex); return (Status); } ACPI_EXPORT_SYMBOL (AcpiReleaseGlobalLock) #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/events/evxfevnt.c000066400000000000000000000422311465205512700221000ustar00rootroot00000000000000/****************************************************************************** * * Module Name: evxfevnt - External Interfaces, ACPI event disable/enable * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #include "actables.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evxfevnt") #if (!ACPI_REDUCED_HARDWARE) /* Entire module */ /******************************************************************************* * * FUNCTION: AcpiEnable * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Transfers the system into ACPI mode. * ******************************************************************************/ ACPI_STATUS AcpiEnable ( void) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (AcpiEnable); /* ACPI tables must be present */ if (AcpiGbl_FadtIndex == ACPI_INVALID_TABLE_INDEX) { return_ACPI_STATUS (AE_NO_ACPI_TABLES); } /* If the Hardware Reduced flag is set, machine is always in acpi mode */ if (AcpiGbl_ReducedHardware) { return_ACPI_STATUS (AE_OK); } /* Check current mode */ if (AcpiHwGetMode() == ACPI_SYS_MODE_ACPI) { ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "System is already in ACPI mode\n")); } else { /* Transition to ACPI mode */ Status = AcpiHwSetMode (ACPI_SYS_MODE_ACPI); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Could not transition to ACPI mode")); return_ACPI_STATUS (Status); } ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "Transition to ACPI mode successful\n")); } return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiEnable) /******************************************************************************* * * FUNCTION: AcpiDisable * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Transfers the system into LEGACY (non-ACPI) mode. * ******************************************************************************/ ACPI_STATUS AcpiDisable ( void) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (AcpiDisable); /* If the Hardware Reduced flag is set, machine is always in acpi mode */ if (AcpiGbl_ReducedHardware) { return_ACPI_STATUS (AE_OK); } if (AcpiHwGetMode() == ACPI_SYS_MODE_LEGACY) { ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "System is already in legacy (non-ACPI) mode\n")); } else { /* Transition to LEGACY mode */ Status = AcpiHwSetMode (ACPI_SYS_MODE_LEGACY); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Could not exit ACPI mode to legacy mode")); return_ACPI_STATUS (Status); } ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "ACPI mode disabled\n")); } return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiDisable) /******************************************************************************* * * FUNCTION: AcpiEnableEvent * * PARAMETERS: Event - The fixed eventto be enabled * Flags - Reserved * * RETURN: Status * * DESCRIPTION: Enable an ACPI event (fixed) * ******************************************************************************/ ACPI_STATUS AcpiEnableEvent ( UINT32 Event, UINT32 Flags) { ACPI_STATUS Status = AE_OK; UINT32 Value; ACPI_FUNCTION_TRACE (AcpiEnableEvent); /* If Hardware Reduced flag is set, there are no fixed events */ if (AcpiGbl_ReducedHardware) { return_ACPI_STATUS (AE_OK); } /* Decode the Fixed Event */ if (Event > ACPI_EVENT_MAX) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* * Enable the requested fixed event (by writing a one to the enable * register bit) */ Status = AcpiWriteBitRegister ( AcpiGbl_FixedEventInfo[Event].EnableRegisterId, ACPI_ENABLE_EVENT); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Make sure that the hardware responded */ Status = AcpiReadBitRegister ( AcpiGbl_FixedEventInfo[Event].EnableRegisterId, &Value); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (Value != 1) { ACPI_ERROR ((AE_INFO, "Could not enable %s event", AcpiUtGetEventName (Event))); return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE); } return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiEnableEvent) /******************************************************************************* * * FUNCTION: AcpiDisableEvent * * PARAMETERS: Event - The fixed event to be disabled * Flags - Reserved * * RETURN: Status * * DESCRIPTION: Disable an ACPI event (fixed) * ******************************************************************************/ ACPI_STATUS AcpiDisableEvent ( UINT32 Event, UINT32 Flags) { ACPI_STATUS Status = AE_OK; UINT32 Value; ACPI_FUNCTION_TRACE (AcpiDisableEvent); /* If Hardware Reduced flag is set, there are no fixed events */ if (AcpiGbl_ReducedHardware) { return_ACPI_STATUS (AE_OK); } /* Decode the Fixed Event */ if (Event > ACPI_EVENT_MAX) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* * Disable the requested fixed event (by writing a zero to the enable * register bit) */ Status = AcpiWriteBitRegister ( AcpiGbl_FixedEventInfo[Event].EnableRegisterId, ACPI_DISABLE_EVENT); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiReadBitRegister ( AcpiGbl_FixedEventInfo[Event].EnableRegisterId, &Value); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (Value != 0) { ACPI_ERROR ((AE_INFO, "Could not disable %s events", AcpiUtGetEventName (Event))); return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE); } return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiDisableEvent) /******************************************************************************* * * FUNCTION: AcpiClearEvent * * PARAMETERS: Event - The fixed event to be cleared * * RETURN: Status * * DESCRIPTION: Clear an ACPI event (fixed) * ******************************************************************************/ ACPI_STATUS AcpiClearEvent ( UINT32 Event) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (AcpiClearEvent); /* If Hardware Reduced flag is set, there are no fixed events */ if (AcpiGbl_ReducedHardware) { return_ACPI_STATUS (AE_OK); } /* Decode the Fixed Event */ if (Event > ACPI_EVENT_MAX) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* * Clear the requested fixed event (By writing a one to the status * register bit) */ Status = AcpiWriteBitRegister ( AcpiGbl_FixedEventInfo[Event].StatusRegisterId, ACPI_CLEAR_STATUS); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiClearEvent) /******************************************************************************* * * FUNCTION: AcpiGetEventStatus * * PARAMETERS: Event - The fixed event * EventStatus - Where the current status of the event will * be returned * * RETURN: Status * * DESCRIPTION: Obtains and returns the current status of the event * ******************************************************************************/ ACPI_STATUS AcpiGetEventStatus ( UINT32 Event, ACPI_EVENT_STATUS *EventStatus) { ACPI_STATUS Status; ACPI_EVENT_STATUS LocalEventStatus = 0; UINT32 InByte; ACPI_FUNCTION_TRACE (AcpiGetEventStatus); if (!EventStatus) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Decode the Fixed Event */ if (Event > ACPI_EVENT_MAX) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Fixed event currently can be dispatched? */ if (AcpiGbl_FixedEventHandlers[Event].Handler) { LocalEventStatus |= ACPI_EVENT_FLAG_HAS_HANDLER; } /* Fixed event currently enabled? */ Status = AcpiReadBitRegister ( AcpiGbl_FixedEventInfo[Event].EnableRegisterId, &InByte); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (InByte) { LocalEventStatus |= (ACPI_EVENT_FLAG_ENABLED | ACPI_EVENT_FLAG_ENABLE_SET); } /* Fixed event currently active? */ Status = AcpiReadBitRegister ( AcpiGbl_FixedEventInfo[Event].StatusRegisterId, &InByte); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (InByte) { LocalEventStatus |= ACPI_EVENT_FLAG_STATUS_SET; } (*EventStatus) = LocalEventStatus; return_ACPI_STATUS (AE_OK); } ACPI_EXPORT_SYMBOL (AcpiGetEventStatus) #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/events/evxfgpe.c000066400000000000000000001167651465205512700217150ustar00rootroot00000000000000/****************************************************************************** * * Module Name: evxfgpe - External Interfaces for General Purpose Events (GPEs) * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #include "acevents.h" #include "acnamesp.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evxfgpe") #if (!ACPI_REDUCED_HARDWARE) /* Entire module */ /******************************************************************************* * * FUNCTION: AcpiUpdateAllGpes * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Complete GPE initialization and enable all GPEs that have * associated _Lxx or _Exx methods and are not pointed to by any * device _PRW methods (this indicates that these GPEs are * generally intended for system or device wakeup. Such GPEs * have to be enabled directly when the devices whose _PRW * methods point to them are set up for wakeup signaling.) * * NOTE: Should be called after any GPEs are added to the system. Primarily, * after the system _PRW methods have been run, but also after a GPE Block * Device has been added or if any new GPE methods have been added via a * dynamic table load. * ******************************************************************************/ ACPI_STATUS AcpiUpdateAllGpes ( void) { ACPI_STATUS Status; BOOLEAN IsPollingNeeded = FALSE; ACPI_FUNCTION_TRACE (AcpiUpdateAllGpes); Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (AcpiGbl_AllGpesInitialized) { goto UnlockAndExit; } Status = AcpiEvWalkGpeList (AcpiEvInitializeGpeBlock, &IsPollingNeeded); if (ACPI_SUCCESS (Status)) { AcpiGbl_AllGpesInitialized = TRUE; } UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); if (IsPollingNeeded && AcpiGbl_AllGpesInitialized) { /* Poll GPEs to handle already triggered events */ AcpiEvGpeDetect (AcpiGbl_GpeXruptListHead); } return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiUpdateAllGpes) /******************************************************************************* * * FUNCTION: AcpiEnableGpe * * PARAMETERS: GpeDevice - Parent GPE Device. NULL for GPE0/GPE1 * GpeNumber - GPE level within the GPE block * * RETURN: Status * * DESCRIPTION: Add a reference to a GPE. On the first reference, the GPE is * hardware-enabled. * ******************************************************************************/ ACPI_STATUS AcpiEnableGpe ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber) { ACPI_STATUS Status = AE_BAD_PARAMETER; ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (AcpiEnableGpe); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* * Ensure that we have a valid GPE number and that there is some way * of handling the GPE (handler or a GPE method). In other words, we * won't allow a valid GPE to be enabled if there is no way to handle it. */ GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); if (GpeEventInfo) { if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) != ACPI_GPE_DISPATCH_NONE) { Status = AcpiEvAddGpeReference (GpeEventInfo, TRUE); if (ACPI_SUCCESS (Status) && ACPI_GPE_IS_POLLING_NEEDED (GpeEventInfo)) { /* Poll edge-triggered GPEs to handle existing events */ AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); (void) AcpiEvDetectGpe ( GpeDevice, GpeEventInfo, GpeNumber); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); } } else { Status = AE_NO_HANDLER; } } AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiEnableGpe) /******************************************************************************* * * FUNCTION: AcpiDisableGpe * * PARAMETERS: GpeDevice - Parent GPE Device. NULL for GPE0/GPE1 * GpeNumber - GPE level within the GPE block * * RETURN: Status * * DESCRIPTION: Remove a reference to a GPE. When the last reference is * removed, only then is the GPE disabled (for runtime GPEs), or * the GPE mask bit disabled (for wake GPEs) * ******************************************************************************/ ACPI_STATUS AcpiDisableGpe ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber) { ACPI_STATUS Status = AE_BAD_PARAMETER; ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (AcpiDisableGpe); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* Ensure that we have a valid GPE number */ GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); if (GpeEventInfo) { Status = AcpiEvRemoveGpeReference (GpeEventInfo); } AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiDisableGpe) /******************************************************************************* * * FUNCTION: AcpiSetGpe * * PARAMETERS: GpeDevice - Parent GPE Device. NULL for GPE0/GPE1 * GpeNumber - GPE level within the GPE block * Action - ACPI_GPE_ENABLE or ACPI_GPE_DISABLE * * RETURN: Status * * DESCRIPTION: Enable or disable an individual GPE. This function bypasses * the reference count mechanism used in the AcpiEnableGpe(), * AcpiDisableGpe() interfaces. * This API is typically used by the GPE raw handler mode driver * to switch between the polling mode and the interrupt mode after * the driver has enabled the GPE. * The APIs should be invoked in this order: * AcpiEnableGpe() <- Ensure the reference count > 0 * AcpiSetGpe(ACPI_GPE_DISABLE) <- Enter polling mode * AcpiSetGpe(ACPI_GPE_ENABLE) <- Leave polling mode * AcpiDisableGpe() <- Decrease the reference count * * Note: If a GPE is shared by 2 silicon components, then both the drivers * should support GPE polling mode or disabling the GPE for long period * for one driver may break the other. So use it with care since all * firmware _Lxx/_Exx handlers currently rely on the GPE interrupt mode. * ******************************************************************************/ ACPI_STATUS AcpiSetGpe ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, UINT8 Action) { ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_STATUS Status; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (AcpiSetGpe); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* Ensure that we have a valid GPE number */ GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); if (!GpeEventInfo) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } /* Perform the action */ switch (Action) { case ACPI_GPE_ENABLE: Status = AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_ENABLE); GpeEventInfo->DisableForDispatch = FALSE; break; case ACPI_GPE_DISABLE: Status = AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_DISABLE); GpeEventInfo->DisableForDispatch = TRUE; break; default: Status = AE_BAD_PARAMETER; break; } UnlockAndExit: AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiSetGpe) /******************************************************************************* * * FUNCTION: AcpiMaskGpe * * PARAMETERS: GpeDevice - Parent GPE Device. NULL for GPE0/GPE1 * GpeNumber - GPE level within the GPE block * IsMasked - Whether the GPE is masked or not * * RETURN: Status * * DESCRIPTION: Unconditionally mask/unmask the an individual GPE, ex., to * prevent a GPE flooding. * ******************************************************************************/ ACPI_STATUS AcpiMaskGpe ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, BOOLEAN IsMasked) { ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_STATUS Status; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (AcpiMaskGpe); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* Ensure that we have a valid GPE number */ GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); if (!GpeEventInfo) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } Status = AcpiEvMaskGpe (GpeEventInfo, IsMasked); UnlockAndExit: AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiMaskGpe) /******************************************************************************* * * FUNCTION: AcpiMarkGpeForWake * * PARAMETERS: GpeDevice - Parent GPE Device. NULL for GPE0/GPE1 * GpeNumber - GPE level within the GPE block * * RETURN: Status * * DESCRIPTION: Mark a GPE as having the ability to wake the system. Simply * sets the ACPI_GPE_CAN_WAKE flag. * * Some potential callers of AcpiSetupGpeForWake may know in advance that * there won't be any notify handlers installed for device wake notifications * from the given GPE (one example is a button GPE in Linux). For these cases, * AcpiMarkGpeForWake should be used instead of AcpiSetupGpeForWake. * This will set the ACPI_GPE_CAN_WAKE flag for the GPE without trying to * setup implicit wake notification for it (since there's no handler method). * ******************************************************************************/ ACPI_STATUS AcpiMarkGpeForWake ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber) { ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_STATUS Status = AE_BAD_PARAMETER; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (AcpiMarkGpeForWake); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* Ensure that we have a valid GPE number */ GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); if (GpeEventInfo) { /* Mark the GPE as a possible wake event */ GpeEventInfo->Flags |= ACPI_GPE_CAN_WAKE; Status = AE_OK; } AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiMarkGpeForWake) /******************************************************************************* * * FUNCTION: AcpiSetupGpeForWake * * PARAMETERS: WakeDevice - Device associated with the GPE (via _PRW) * GpeDevice - Parent GPE Device. NULL for GPE0/GPE1 * GpeNumber - GPE level within the GPE block * * RETURN: Status * * DESCRIPTION: Mark a GPE as having the ability to wake the system. This * interface is intended to be used as the host executes the * _PRW methods (Power Resources for Wake) in the system tables. * Each _PRW appears under a Device Object (The WakeDevice), and * contains the info for the wake GPE associated with the * WakeDevice. * ******************************************************************************/ ACPI_STATUS AcpiSetupGpeForWake ( ACPI_HANDLE WakeDevice, ACPI_HANDLE GpeDevice, UINT32 GpeNumber) { ACPI_STATUS Status; ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_NAMESPACE_NODE *DeviceNode; ACPI_GPE_NOTIFY_INFO *Notify; ACPI_GPE_NOTIFY_INFO *NewNotify; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (AcpiSetupGpeForWake); /* Parameter Validation */ if (!WakeDevice) { /* * By forcing WakeDevice to be valid, we automatically enable the * implicit notify feature on all hosts. */ return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Handle root object case */ if (WakeDevice == ACPI_ROOT_OBJECT) { DeviceNode = AcpiGbl_RootNode; } else { DeviceNode = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, WakeDevice); } /* Validate WakeDevice is of type Device */ if (DeviceNode->Type != ACPI_TYPE_DEVICE) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* * Allocate a new notify object up front, in case it is needed. * Memory allocation while holding a spinlock is a big no-no * on some hosts. */ NewNotify = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_GPE_NOTIFY_INFO)); if (!NewNotify) { return_ACPI_STATUS (AE_NO_MEMORY); } Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* Ensure that we have a valid GPE number */ GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); if (!GpeEventInfo) { 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 (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == 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); } else if (GpeEventInfo->Flags & ACPI_GPE_AUTO_ENABLED) { /* * A reference to this GPE has been added during the GPE block * initialization, so drop it now to prevent the GPE from being * permanently enabled and clear its ACPI_GPE_AUTO_ENABLED flag. */ (void) AcpiEvRemoveGpeReference (GpeEventInfo); GpeEventInfo->Flags &= ~ACPI_GPE_AUTO_ENABLED; } /* * If we already have an implicit notify on this GPE, add * this device to the notify list. */ if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == 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 */ NewNotify->DeviceNode = DeviceNode; NewNotify->Next = GpeEventInfo->Dispatch.NotifyList; GpeEventInfo->Dispatch.NotifyList = NewNotify; NewNotify = NULL; } /* Mark the GPE as a possible wake event */ GpeEventInfo->Flags |= ACPI_GPE_CAN_WAKE; Status = AE_OK; UnlockAndExit: AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); /* Delete the notify object if it was not used above */ if (NewNotify) { ACPI_FREE (NewNotify); } return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiSetupGpeForWake) /******************************************************************************* * * FUNCTION: AcpiSetGpeWakeMask * * PARAMETERS: GpeDevice - Parent GPE Device. NULL for GPE0/GPE1 * GpeNumber - GPE level within the GPE block * Action - Enable or Disable * * RETURN: Status * * DESCRIPTION: Set or clear the GPE's wakeup enable mask bit. The GPE must * already be marked as a WAKE GPE. * ******************************************************************************/ ACPI_STATUS AcpiSetGpeWakeMask ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, UINT8 Action) { ACPI_STATUS Status = AE_OK; ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; ACPI_CPU_FLAGS Flags; UINT32 RegisterBit; ACPI_FUNCTION_TRACE (AcpiSetGpeWakeMask); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* * Ensure that we have a valid GPE number and that this GPE is in * fact a wake GPE */ GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); if (!GpeEventInfo) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } if (!(GpeEventInfo->Flags & ACPI_GPE_CAN_WAKE)) { Status = AE_TYPE; goto UnlockAndExit; } GpeRegisterInfo = GpeEventInfo->RegisterInfo; if (!GpeRegisterInfo) { Status = AE_NOT_EXIST; goto UnlockAndExit; } RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo); /* Perform the action */ switch (Action) { case ACPI_GPE_ENABLE: ACPI_SET_BIT (GpeRegisterInfo->EnableForWake, (UINT8) RegisterBit); break; case ACPI_GPE_DISABLE: ACPI_CLEAR_BIT (GpeRegisterInfo->EnableForWake, (UINT8) RegisterBit); break; default: ACPI_ERROR ((AE_INFO, "%u, Invalid action", Action)); Status = AE_BAD_PARAMETER; break; } UnlockAndExit: AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiSetGpeWakeMask) /******************************************************************************* * * FUNCTION: AcpiClearGpe * * PARAMETERS: GpeDevice - Parent GPE Device. NULL for GPE0/GPE1 * GpeNumber - GPE level within the GPE block * * RETURN: Status * * DESCRIPTION: Clear an ACPI event (general purpose) * ******************************************************************************/ ACPI_STATUS AcpiClearGpe ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber) { ACPI_STATUS Status = AE_OK; ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (AcpiClearGpe); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* Ensure that we have a valid GPE number */ GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); if (!GpeEventInfo) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } Status = AcpiHwClearGpe (GpeEventInfo); UnlockAndExit: AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiClearGpe) /******************************************************************************* * * FUNCTION: AcpiGetGpeStatus * * PARAMETERS: GpeDevice - Parent GPE Device. NULL for GPE0/GPE1 * GpeNumber - GPE level within the GPE block * EventStatus - Where the current status of the event * will be returned * * RETURN: Status * * DESCRIPTION: Get the current status of a GPE (signalled/not_signalled) * ******************************************************************************/ ACPI_STATUS AcpiGetGpeStatus ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, ACPI_EVENT_STATUS *EventStatus) { ACPI_STATUS Status = AE_OK; ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (AcpiGetGpeStatus); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* Ensure that we have a valid GPE number */ GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); if (!GpeEventInfo) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } /* Obtain status on the requested GPE number */ Status = AcpiHwGetGpeStatus (GpeEventInfo, EventStatus); UnlockAndExit: AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiGetGpeStatus) /******************************************************************************* * * FUNCTION: AcpiDispatchGpe * * PARAMETERS: GpeDevice - Parent GPE Device. NULL for GPE0/GPE1 * GpeNumber - GPE level within the GPE block * * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED * * DESCRIPTION: Detect and dispatch a General Purpose Event to either a function * (e.g. EC) or method (e.g. _Lxx/_Exx) handler. * ******************************************************************************/ UINT32 AcpiDispatchGpe( ACPI_HANDLE GpeDevice, UINT32 GpeNumber) { ACPI_FUNCTION_TRACE(acpi_dispatch_gpe); return (AcpiEvDetectGpe (GpeDevice, NULL, GpeNumber)); } ACPI_EXPORT_SYMBOL (AcpiDispatchGpe) /******************************************************************************* * * FUNCTION: AcpiFinishGpe * * PARAMETERS: GpeDevice - Namespace node for the GPE Block * (NULL for FADT defined GPEs) * GpeNumber - GPE level within the GPE block * * RETURN: Status * * DESCRIPTION: Clear and conditionally re-enable a GPE. This completes the GPE * processing. Intended for use by asynchronous host-installed * GPE handlers. The GPE is only re-enabled if the EnableForRun bit * is set in the GPE info. * ******************************************************************************/ ACPI_STATUS AcpiFinishGpe ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber) { ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_STATUS Status; ACPI_CPU_FLAGS Flags; ACPI_FUNCTION_TRACE (AcpiFinishGpe); Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); /* Ensure that we have a valid GPE number */ GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); if (!GpeEventInfo) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } Status = AcpiEvFinishGpe (GpeEventInfo); UnlockAndExit: AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiFinishGpe) /****************************************************************************** * * FUNCTION: AcpiDisableAllGpes * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Disable and clear all GPEs in all GPE blocks * ******************************************************************************/ ACPI_STATUS AcpiDisableAllGpes ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiDisableAllGpes); Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiHwDisableAllGpes (); (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiDisableAllGpes) /****************************************************************************** * * FUNCTION: AcpiEnableAllRuntimeGpes * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Enable all "runtime" GPEs, in all GPE blocks * ******************************************************************************/ ACPI_STATUS AcpiEnableAllRuntimeGpes ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiEnableAllRuntimeGpes); Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiHwEnableAllRuntimeGpes (); (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiEnableAllRuntimeGpes) /****************************************************************************** * * FUNCTION: AcpiEnableAllWakeupGpes * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Enable all "wakeup" GPEs and disable all of the other GPEs, in * all GPE blocks. * ******************************************************************************/ ACPI_STATUS AcpiEnableAllWakeupGpes ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiEnableAllWakeupGpes); Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiHwEnableAllWakeupGpes (); (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiEnableAllWakeupGpes) /****************************************************************************** * * FUNCTION: AcpiAnyGpeStatusSet * * PARAMETERS: None * * RETURN: Whether or not the status bit is set for any GPE * * DESCRIPTION: Check the status bits of all enabled GPEs and return TRUE if any * of them is set or FALSE otherwise. * ******************************************************************************/ UINT32 AcpiAnyGpeStatusSet ( void) { ACPI_STATUS Status; UINT8 Ret; ACPI_FUNCTION_TRACE (AcpiAnyGpeStatusSet); Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return (FALSE); } Ret = AcpiHwCheckAllGpes (); (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return (Ret); } ACPI_EXPORT_SYMBOL(AcpiAnyGpeStatusSet) /******************************************************************************* * * FUNCTION: AcpiInstallGpeBlock * * PARAMETERS: GpeDevice - Handle to the parent GPE Block Device * GpeBlockAddress - Address and SpaceID * RegisterCount - Number of GPE register pairs in the block * InterruptNumber - H/W interrupt for the block * * RETURN: Status * * DESCRIPTION: Create and Install a block of GPE registers. The GPEs are not * enabled here. * ******************************************************************************/ ACPI_STATUS AcpiInstallGpeBlock ( ACPI_HANDLE GpeDevice, ACPI_GENERIC_ADDRESS *GpeBlockAddress, UINT32 RegisterCount, UINT32 InterruptNumber) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_NAMESPACE_NODE *Node; ACPI_GPE_BLOCK_INFO *GpeBlock; ACPI_FUNCTION_TRACE (AcpiInstallGpeBlock); if ((!GpeDevice) || (!GpeBlockAddress) || (!RegisterCount)) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Node = AcpiNsValidateHandle (GpeDevice); if (!Node) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } /* Validate the parent device */ if (Node->Type != ACPI_TYPE_DEVICE) { Status = AE_TYPE; goto UnlockAndExit; } if (Node->Object) { Status = AE_ALREADY_EXISTS; goto UnlockAndExit; } /* * For user-installed GPE Block Devices, the GpeBlockBaseNumber * is always zero */ Status = AcpiEvCreateGpeBlock (Node, GpeBlockAddress->Address, GpeBlockAddress->SpaceId, RegisterCount, 0, InterruptNumber, &GpeBlock); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; } /* Install block in the DeviceObject attached to the node */ ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { /* * No object, create a new one (Device nodes do not always have * an attached object) */ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_DEVICE); if (!ObjDesc) { Status = AE_NO_MEMORY; goto UnlockAndExit; } Status = AcpiNsAttachObject (Node, ObjDesc, ACPI_TYPE_DEVICE); /* Remove local reference to the object */ AcpiUtRemoveReference (ObjDesc); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; } } /* Now install the GPE block in the DeviceObject */ ObjDesc->Device.GpeBlock = GpeBlock; UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiInstallGpeBlock) /******************************************************************************* * * FUNCTION: AcpiRemoveGpeBlock * * PARAMETERS: GpeDevice - Handle to the parent GPE Block Device * * RETURN: Status * * DESCRIPTION: Remove a previously installed block of GPE registers * ******************************************************************************/ ACPI_STATUS AcpiRemoveGpeBlock ( ACPI_HANDLE GpeDevice) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_FUNCTION_TRACE (AcpiRemoveGpeBlock); if (!GpeDevice) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Node = AcpiNsValidateHandle (GpeDevice); if (!Node) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } /* Validate the parent device */ if (Node->Type != ACPI_TYPE_DEVICE) { Status = AE_TYPE; goto UnlockAndExit; } /* Get the DeviceObject attached to the node */ ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc || !ObjDesc->Device.GpeBlock) { return_ACPI_STATUS (AE_NULL_OBJECT); } /* Delete the GPE block (but not the DeviceObject) */ Status = AcpiEvDeleteGpeBlock (ObjDesc->Device.GpeBlock); if (ACPI_SUCCESS (Status)) { ObjDesc->Device.GpeBlock = NULL; } UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiRemoveGpeBlock) /******************************************************************************* * * FUNCTION: AcpiGetGpeDevice * * PARAMETERS: Index - System GPE index (0-CurrentGpeCount) * GpeDevice - Where the parent GPE Device is returned * * RETURN: Status * * DESCRIPTION: Obtain the GPE device associated with the input index. A NULL * gpe device indicates that the gpe number is contained in one of * the FADT-defined gpe blocks. Otherwise, the GPE block device. * ******************************************************************************/ ACPI_STATUS AcpiGetGpeDevice ( UINT32 Index, ACPI_HANDLE *GpeDevice) { ACPI_GPE_DEVICE_INFO Info; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiGetGpeDevice); if (!GpeDevice) { return_ACPI_STATUS (AE_BAD_PARAMETER); } if (Index >= AcpiCurrentGpeCount) { return_ACPI_STATUS (AE_NOT_EXIST); } /* Setup and walk the GPE list */ Info.Index = Index; Info.Status = AE_NOT_EXIST; Info.GpeDevice = NULL; Info.NextBlockBaseIndex = 0; Status = AcpiEvWalkGpeList (AcpiEvGetGpeDevice, &Info); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } *GpeDevice = ACPI_CAST_PTR (ACPI_HANDLE, Info.GpeDevice); return_ACPI_STATUS (Info.Status); } ACPI_EXPORT_SYMBOL (AcpiGetGpeDevice) #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/events/evxfregn.c000066400000000000000000000420731465205512700220630ustar00rootroot00000000000000/****************************************************************************** * * Module Name: evxfregn - External Interfaces, ACPI Operation Regions and * Address Spaces. * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acevents.h" #define _COMPONENT ACPI_EVENTS ACPI_MODULE_NAME ("evxfregn") /******************************************************************************* * * FUNCTION: AcpiInstallAddressSpaceHandlerInternal * * PARAMETERS: Device - Handle for the device * SpaceId - The address space ID * Handler - Address of the handler * Setup - Address of the setup function * Context - Value passed to the handler on each access * Run_Reg - Run _REG methods for this address space? * * RETURN: Status * * DESCRIPTION: Install a handler for all OpRegions of a given SpaceId. * * NOTE: This function should only be called after AcpiEnableSubsystem has * been called. This is because any _REG methods associated with the Space ID * are executed here, and these methods can only be safely executed after * the default handlers have been installed and the hardware has been * initialized (via AcpiEnableSubsystem.) * To avoid this problem pass FALSE for Run_Reg and later on call * AcpiExecuteRegMethods() to execute _REG. * ******************************************************************************/ static ACPI_STATUS AcpiInstallAddressSpaceHandlerInternal ( ACPI_HANDLE Device, ACPI_ADR_SPACE_TYPE SpaceId, ACPI_ADR_SPACE_HANDLER Handler, ACPI_ADR_SPACE_SETUP Setup, void *Context, BOOLEAN Run_Reg) { ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiInstallAddressSpaceHandler); /* Parameter validation */ if (!Device) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Convert and validate the device handle */ Node = AcpiNsValidateHandle (Device); if (!Node) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } /* Install the handler for all Regions for this Space ID */ Status = AcpiEvInstallSpaceHandler ( Node, SpaceId, Handler, Setup, Context); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; } /* Run all _REG methods for this address space */ if (Run_Reg) { AcpiEvExecuteRegMethods (Node, SpaceId, ACPI_REG_CONNECT); } UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return_ACPI_STATUS (Status); } ACPI_STATUS AcpiInstallAddressSpaceHandler ( ACPI_HANDLE Device, ACPI_ADR_SPACE_TYPE SpaceId, ACPI_ADR_SPACE_HANDLER Handler, ACPI_ADR_SPACE_SETUP Setup, void *Context) { return AcpiInstallAddressSpaceHandlerInternal (Device, SpaceId, Handler, Setup, Context, TRUE); } ACPI_EXPORT_SYMBOL (AcpiInstallAddressSpaceHandler) ACPI_STATUS AcpiInstallAddressSpaceHandlerNo_Reg ( ACPI_HANDLE Device, ACPI_ADR_SPACE_TYPE SpaceId, ACPI_ADR_SPACE_HANDLER Handler, ACPI_ADR_SPACE_SETUP Setup, void *Context) { return AcpiInstallAddressSpaceHandlerInternal (Device, SpaceId, Handler, Setup, Context, FALSE); } ACPI_EXPORT_SYMBOL (AcpiInstallAddressSpaceHandlerNo_Reg) /******************************************************************************* * * FUNCTION: AcpiRemoveAddressSpaceHandler * * PARAMETERS: Device - Handle for the device * SpaceId - The address space ID * Handler - Address of the handler * * RETURN: Status * * DESCRIPTION: Remove a previously installed handler. * ******************************************************************************/ ACPI_STATUS AcpiRemoveAddressSpaceHandler ( ACPI_HANDLE Device, ACPI_ADR_SPACE_TYPE SpaceId, ACPI_ADR_SPACE_HANDLER Handler) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *HandlerObj; ACPI_OPERAND_OBJECT *RegionObj; ACPI_OPERAND_OBJECT **LastObjPtr; ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiRemoveAddressSpaceHandler); /* Parameter validation */ if (!Device) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Convert and validate the device handle */ Node = AcpiNsValidateHandle (Device); if (!Node || ((Node->Type != ACPI_TYPE_DEVICE) && (Node->Type != ACPI_TYPE_PROCESSOR) && (Node->Type != ACPI_TYPE_THERMAL) && (Node != AcpiGbl_RootNode))) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } /* Make sure the internal object exists */ ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { Status = AE_NOT_EXIST; goto UnlockAndExit; } /* Find the address handler the user requested */ HandlerObj = ObjDesc->CommonNotify.Handler; LastObjPtr = &ObjDesc->CommonNotify.Handler; while (HandlerObj) { /* We have a handler, see if user requested this one */ if (HandlerObj->AddressSpace.SpaceId == SpaceId) { /* Handler must be the same as the installed handler */ if (HandlerObj->AddressSpace.Handler != Handler) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } /* Matched SpaceId, first dereference this in the Regions */ ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Removing address handler %p(%p) for region %s " "on Device %p(%p)\n", HandlerObj, Handler, AcpiUtGetRegionName (SpaceId), Node, ObjDesc)); RegionObj = HandlerObj->AddressSpace.RegionList; /* Walk the handler's region list */ while (RegionObj) { /* * First disassociate the handler from the region. * * NOTE: this doesn't mean that the region goes away * The region is just inaccessible as indicated to * the _REG method */ AcpiEvDetachRegion (RegionObj, TRUE); /* * Walk the list: Just grab the head because the * DetachRegion removed the previous head. */ RegionObj = HandlerObj->AddressSpace.RegionList; } /* Remove this Handler object from the list */ *LastObjPtr = HandlerObj->AddressSpace.Next; /* Now we can delete the handler object */ AcpiOsReleaseMutex (HandlerObj->AddressSpace.ContextMutex); AcpiUtRemoveReference (HandlerObj); goto UnlockAndExit; } /* Walk the linked list of handlers */ LastObjPtr = &HandlerObj->AddressSpace.Next; HandlerObj = HandlerObj->AddressSpace.Next; } /* The handler does not exist */ ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Unable to remove address handler %p for %s(%X), DevNode %p, obj %p\n", Handler, AcpiUtGetRegionName (SpaceId), SpaceId, Node, ObjDesc)); Status = AE_NOT_EXIST; UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiRemoveAddressSpaceHandler) /******************************************************************************* * * FUNCTION: AcpiExecuteRegMethods * * PARAMETERS: Device - Handle for the device * SpaceId - The address space ID * * RETURN: Status * * DESCRIPTION: Execute _REG for all OpRegions of a given SpaceId. * ******************************************************************************/ ACPI_STATUS AcpiExecuteRegMethods ( ACPI_HANDLE Device, ACPI_ADR_SPACE_TYPE SpaceId) { ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiExecuteRegMethods); /* Parameter validation */ if (!Device) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Convert and validate the device handle */ Node = AcpiNsValidateHandle (Device); if (Node) { /* Run all _REG methods for this address space */ AcpiEvExecuteRegMethods (Node, SpaceId, ACPI_REG_CONNECT); } else { Status = AE_BAD_PARAMETER; } (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiExecuteRegMethods) src/acpica/source/components/executer/000077500000000000000000000000001465205512700204055ustar00rootroot00000000000000src/acpica/source/components/executer/exconcat.c000066400000000000000000000463611465205512700223670ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exconcat - Concatenate-type AML operators * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "amlresrc.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exconcat") /* Local Prototypes */ static ACPI_STATUS AcpiExConvertToObjectTypeString ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ResultDesc); /******************************************************************************* * * FUNCTION: AcpiExDoConcatenate * * PARAMETERS: Operand0 - First source object * Operand1 - Second source object * ActualReturnDesc - Where to place the return object * WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Concatenate two objects with the ACPI-defined conversion * rules as necessary. * NOTE: * Per the ACPI spec (up to 6.1), Concatenate only supports Integer, * String, and Buffer objects. However, we support all objects here * as an extension. This improves the usefulness of both Concatenate * and the Printf/Fprintf macros. The extension returns a string * describing the object type for the other objects. * 02/2016. * ******************************************************************************/ ACPI_STATUS AcpiExDoConcatenate ( ACPI_OPERAND_OBJECT *Operand0, ACPI_OPERAND_OBJECT *Operand1, ACPI_OPERAND_OBJECT **ActualReturnDesc, ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT *LocalOperand0 = Operand0; ACPI_OPERAND_OBJECT *LocalOperand1 = Operand1; ACPI_OPERAND_OBJECT *TempOperand1 = NULL; ACPI_OPERAND_OBJECT *ReturnDesc; char *Buffer; ACPI_OBJECT_TYPE Operand0Type; ACPI_OBJECT_TYPE Operand1Type; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (ExDoConcatenate); /* Operand 0 preprocessing */ switch (Operand0->Common.Type) { case ACPI_TYPE_INTEGER: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: Operand0Type = Operand0->Common.Type; break; default: /* For all other types, get the "object type" string */ Status = AcpiExConvertToObjectTypeString ( Operand0, &LocalOperand0); if (ACPI_FAILURE (Status)) { goto Cleanup; } Operand0Type = ACPI_TYPE_STRING; break; } /* Operand 1 preprocessing */ switch (Operand1->Common.Type) { case ACPI_TYPE_INTEGER: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: Operand1Type = Operand1->Common.Type; break; default: /* For all other types, get the "object type" string */ Status = AcpiExConvertToObjectTypeString ( Operand1, &LocalOperand1); if (ACPI_FAILURE (Status)) { goto Cleanup; } Operand1Type = ACPI_TYPE_STRING; break; } /* * Convert the second operand if necessary. The first operand (0) * determines the type of the second operand (1) (See the Data Types * section of the ACPI specification). Both object types are * guaranteed to be either Integer/String/Buffer by the operand * resolution mechanism. */ switch (Operand0Type) { case ACPI_TYPE_INTEGER: Status = AcpiExConvertToInteger (LocalOperand1, &TempOperand1, ACPI_IMPLICIT_CONVERSION); break; case ACPI_TYPE_BUFFER: Status = AcpiExConvertToBuffer (LocalOperand1, &TempOperand1); break; case ACPI_TYPE_STRING: switch (Operand1Type) { case ACPI_TYPE_INTEGER: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: /* Other types have already been converted to string */ Status = AcpiExConvertToString ( LocalOperand1, &TempOperand1, ACPI_IMPLICIT_CONVERT_HEX); break; default: Status = AE_OK; break; } break; default: ACPI_ERROR ((AE_INFO, "Invalid object type: 0x%X", Operand0->Common.Type)); Status = AE_AML_INTERNAL; } if (ACPI_FAILURE (Status)) { goto Cleanup; } /* Take care with any newly created operand objects */ if ((LocalOperand1 != Operand1) && (LocalOperand1 != TempOperand1)) { AcpiUtRemoveReference (LocalOperand1); } LocalOperand1 = TempOperand1; /* * Both operands are now known to be the same object type * (Both are Integer, String, or Buffer), and we can now perform * the concatenation. * * There are three cases to handle, as per the ACPI spec: * * 1) Two Integers concatenated to produce a new Buffer * 2) Two Strings concatenated to produce a new String * 3) Two Buffers concatenated to produce a new Buffer */ switch (Operand0Type) { case ACPI_TYPE_INTEGER: /* Result of two Integers is a Buffer */ /* Need enough buffer space for two integers */ ReturnDesc = AcpiUtCreateBufferObject ( (ACPI_SIZE) ACPI_MUL_2 (AcpiGbl_IntegerByteWidth)); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } Buffer = (char *) ReturnDesc->Buffer.Pointer; /* Copy the first integer, LSB first */ memcpy (Buffer, &Operand0->Integer.Value, AcpiGbl_IntegerByteWidth); /* Copy the second integer (LSB first) after the first */ memcpy (Buffer + AcpiGbl_IntegerByteWidth, &LocalOperand1->Integer.Value, AcpiGbl_IntegerByteWidth); break; case ACPI_TYPE_STRING: /* Result of two Strings is a String */ ReturnDesc = AcpiUtCreateStringObject ( ((ACPI_SIZE) LocalOperand0->String.Length + LocalOperand1->String.Length)); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } Buffer = ReturnDesc->String.Pointer; /* Concatenate the strings */ strcpy (Buffer, LocalOperand0->String.Pointer); strcat (Buffer, LocalOperand1->String.Pointer); break; case ACPI_TYPE_BUFFER: /* Result of two Buffers is a Buffer */ ReturnDesc = AcpiUtCreateBufferObject ( ((ACPI_SIZE) Operand0->Buffer.Length + LocalOperand1->Buffer.Length)); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } Buffer = (char *) ReturnDesc->Buffer.Pointer; /* Concatenate the buffers */ memcpy (Buffer, Operand0->Buffer.Pointer, Operand0->Buffer.Length); memcpy (Buffer + Operand0->Buffer.Length, LocalOperand1->Buffer.Pointer, LocalOperand1->Buffer.Length); break; default: /* Invalid object type, should not happen here */ ACPI_ERROR ((AE_INFO, "Invalid object type: 0x%X", Operand0->Common.Type)); Status = AE_AML_INTERNAL; goto Cleanup; } *ActualReturnDesc = ReturnDesc; Cleanup: if (LocalOperand0 != Operand0) { AcpiUtRemoveReference (LocalOperand0); } if (LocalOperand1 != Operand1) { AcpiUtRemoveReference (LocalOperand1); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExConvertToObjectTypeString * * PARAMETERS: ObjDesc - Object to be converted * ReturnDesc - Where to place the return object * * RETURN: Status * * DESCRIPTION: Convert an object of arbitrary type to a string object that * contains the namestring for the object. Used for the * concatenate operator. * ******************************************************************************/ static ACPI_STATUS AcpiExConvertToObjectTypeString ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ResultDesc) { ACPI_OPERAND_OBJECT *ReturnDesc; const char *TypeString; TypeString = AcpiUtGetTypeName (ObjDesc->Common.Type); ReturnDesc = AcpiUtCreateStringObject ( ((ACPI_SIZE) strlen (TypeString) + 9)); /* 9 For "[ Object]" */ if (!ReturnDesc) { return (AE_NO_MEMORY); } strcpy (ReturnDesc->String.Pointer, "["); strcat (ReturnDesc->String.Pointer, TypeString); strcat (ReturnDesc->String.Pointer, " Object]"); *ResultDesc = ReturnDesc; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExConcatTemplate * * PARAMETERS: Operand0 - First source object * Operand1 - Second source object * ActualReturnDesc - Where to place the return object * WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Concatenate two resource templates * ******************************************************************************/ ACPI_STATUS AcpiExConcatTemplate ( ACPI_OPERAND_OBJECT *Operand0, ACPI_OPERAND_OBJECT *Operand1, ACPI_OPERAND_OBJECT **ActualReturnDesc, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ReturnDesc; UINT8 *NewBuf; UINT8 *EndTag; ACPI_SIZE Length0; ACPI_SIZE Length1; ACPI_SIZE NewLength; ACPI_FUNCTION_TRACE (ExConcatTemplate); /* * Find the EndTag descriptor in each resource template. * Note1: returned pointers point TO the EndTag, not past it. * Note2: zero-length buffers are allowed; treated like one EndTag */ /* Get the length of the first resource template */ Status = AcpiUtGetResourceEndTag (Operand0, &EndTag); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Length0 = ACPI_PTR_DIFF (EndTag, Operand0->Buffer.Pointer); /* Get the length of the second resource template */ Status = AcpiUtGetResourceEndTag (Operand1, &EndTag); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Length1 = ACPI_PTR_DIFF (EndTag, Operand1->Buffer.Pointer); /* Combine both lengths, minimum size will be 2 for EndTag */ NewLength = Length0 + Length1 + sizeof (AML_RESOURCE_END_TAG); /* Create a new buffer object for the result (with one EndTag) */ ReturnDesc = AcpiUtCreateBufferObject (NewLength); if (!ReturnDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } /* * Copy the templates to the new buffer, 0 first, then 1 follows. One * EndTag descriptor is copied from Operand1. */ NewBuf = ReturnDesc->Buffer.Pointer; memcpy (NewBuf, Operand0->Buffer.Pointer, Length0); memcpy (NewBuf + Length0, Operand1->Buffer.Pointer, Length1); /* Insert EndTag and set the checksum to zero, means "ignore checksum" */ NewBuf[NewLength - 1] = 0; NewBuf[NewLength - 2] = ACPI_RESOURCE_NAME_END_TAG | 1; /* Return the completed resource template */ *ActualReturnDesc = ReturnDesc; return_ACPI_STATUS (AE_OK); } src/acpica/source/components/executer/exconfig.c000066400000000000000000000614731465205512700223660ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exconfig - Namespace reconfiguration (Load/Unload opcodes) * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "acnamesp.h" #include "actables.h" #include "acdispat.h" #include "acevents.h" #include "amlcode.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exconfig") /* Local prototypes */ static ACPI_STATUS AcpiExAddTable ( UINT32 TableIndex, ACPI_OPERAND_OBJECT **DdbHandle); static ACPI_STATUS AcpiExRegionRead ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 Length, UINT8 *Buffer); /******************************************************************************* * * FUNCTION: AcpiExAddTable * * PARAMETERS: Table - Pointer to raw table * ParentNode - Where to load the table (scope) * DdbHandle - Where to return the table handle. * * RETURN: Status * * DESCRIPTION: Common function to Install and Load an ACPI table with a * returned table handle. * ******************************************************************************/ static ACPI_STATUS AcpiExAddTable ( UINT32 TableIndex, ACPI_OPERAND_OBJECT **DdbHandle) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_FUNCTION_TRACE (ExAddTable); /* Create an object to be the table handle */ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_REFERENCE); if (!ObjDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Init the table handle */ ObjDesc->Common.Flags |= AOPOBJ_DATA_VALID; ObjDesc->Reference.Class = ACPI_REFCLASS_TABLE; ObjDesc->Reference.Value = TableIndex; *DdbHandle = ObjDesc; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExLoadTableOp * * PARAMETERS: WalkState - Current state with operands * ReturnDesc - Where to store the return object * * RETURN: Status * * DESCRIPTION: Load an ACPI table from the RSDT/XSDT * ******************************************************************************/ ACPI_STATUS AcpiExLoadTableOp ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT **ReturnDesc) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_NAMESPACE_NODE *ParentNode; ACPI_NAMESPACE_NODE *StartNode; ACPI_NAMESPACE_NODE *ParameterNode = NULL; ACPI_OPERAND_OBJECT *ReturnObj; ACPI_OPERAND_OBJECT *DdbHandle; UINT32 TableIndex; ACPI_FUNCTION_TRACE (ExLoadTableOp); /* Create the return object */ ReturnObj = AcpiUtCreateIntegerObject ((UINT64) 0); if (!ReturnObj) { return_ACPI_STATUS (AE_NO_MEMORY); } *ReturnDesc = ReturnObj; /* Find the ACPI table in the RSDT/XSDT */ AcpiExExitInterpreter (); Status = AcpiTbFindTable ( Operand[0]->String.Pointer, Operand[1]->String.Pointer, Operand[2]->String.Pointer, &TableIndex); AcpiExEnterInterpreter (); if (ACPI_FAILURE (Status)) { if (Status != AE_NOT_FOUND) { return_ACPI_STATUS (Status); } /* Table not found, return an Integer=0 and AE_OK */ return_ACPI_STATUS (AE_OK); } /* Default nodes */ StartNode = WalkState->ScopeInfo->Scope.Node; ParentNode = AcpiGbl_RootNode; /* RootPath (optional parameter) */ if (Operand[3]->String.Length > 0) { /* * Find the node referenced by the RootPathString. This is the * location within the namespace where the table will be loaded. */ Status = AcpiNsGetNodeUnlocked (StartNode, Operand[3]->String.Pointer, ACPI_NS_SEARCH_PARENT, &ParentNode); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } /* ParameterPath (optional parameter) */ if (Operand[4]->String.Length > 0) { if ((Operand[4]->String.Pointer[0] != AML_ROOT_PREFIX) && (Operand[4]->String.Pointer[0] != AML_PARENT_PREFIX)) { /* * Path is not absolute, so it will be relative to the node * referenced by the RootPathString (or the NS root if omitted) */ StartNode = ParentNode; } /* Find the node referenced by the ParameterPathString */ Status = AcpiNsGetNodeUnlocked (StartNode, Operand[4]->String.Pointer, ACPI_NS_SEARCH_PARENT, &ParameterNode); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } /* Load the table into the namespace */ ACPI_INFO (("Dynamic OEM Table Load:")); AcpiExExitInterpreter (); Status = AcpiTbLoadTable (TableIndex, ParentNode); AcpiExEnterInterpreter (); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiExAddTable (TableIndex, &DdbHandle); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Complete the initialization/resolution of new objects */ AcpiExExitInterpreter(); AcpiNsInitializeObjects(); AcpiExEnterInterpreter(); /* Parameter Data (optional) */ if (ParameterNode) { /* Store the parameter data into the optional parameter object */ Status = AcpiExStore (Operand[5], ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, ParameterNode), WalkState); if (ACPI_FAILURE (Status)) { (void) AcpiExUnloadTable (DdbHandle); AcpiUtRemoveReference (DdbHandle); return_ACPI_STATUS (Status); } } /* Remove the reference to DdbHandle created by AcpiExAddTable above */ AcpiUtRemoveReference (DdbHandle); /* Return -1 (non-zero) indicates success */ ReturnObj->Integer.Value = 0xFFFFFFFFFFFFFFFF; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExRegionRead * * PARAMETERS: ObjDesc - Region descriptor * Length - Number of bytes to read * Buffer - Pointer to where to put the data * * RETURN: Status * * DESCRIPTION: Read data from an operation region. The read starts from the * beginning of the region. * ******************************************************************************/ static ACPI_STATUS AcpiExRegionRead ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 Length, UINT8 *Buffer) { ACPI_STATUS Status; UINT64 Value; UINT32 RegionOffset = 0; UINT32 i; /* Bytewise reads */ for (i = 0; i < Length; i++) { Status = AcpiEvAddressSpaceDispatch (ObjDesc, NULL, ACPI_READ, RegionOffset, 8, &Value); if (ACPI_FAILURE (Status)) { return (Status); } *Buffer = (UINT8) Value; Buffer++; RegionOffset++; } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExLoadOp * * PARAMETERS: ObjDesc - Region or Buffer/Field where the table will be * obtained * Target - Where the status of the load will be stored * WalkState - Current state * * RETURN: Status * * DESCRIPTION: Load an ACPI table from a field or operation region * * NOTE: Region Fields (Field, BankField, IndexFields) are resolved to buffer * objects before this code is reached. * * If source is an operation region, it must refer to SystemMemory, as * per the ACPI specification. * ******************************************************************************/ ACPI_STATUS AcpiExLoadOp ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT *Target, ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT *DdbHandle; ACPI_TABLE_HEADER *TableHeader; ACPI_TABLE_HEADER *Table; UINT32 TableIndex; ACPI_STATUS Status; UINT32 Length; ACPI_FUNCTION_TRACE (ExLoadOp); if (Target->Common.DescriptorType == ACPI_DESC_TYPE_NAMED) { Target = AcpiNsGetAttachedObject (ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Target)); } if (Target->Common.Type != ACPI_TYPE_INTEGER) { ACPI_ERROR ((AE_INFO, "Type not integer: %X", Target->Common.Type)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } Target->Integer.Value = 0; /* Source Object can be either an OpRegion or a Buffer/Field */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_REGION: ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Load table from Region %p\n", ObjDesc)); /* Region must be SystemMemory (from ACPI spec) */ if (ObjDesc->Region.SpaceId != ACPI_ADR_SPACE_SYSTEM_MEMORY) { return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* * If the Region Address and Length have not been previously * evaluated, evaluate them now and save the results. */ if (!(ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)) { Status = AcpiDsGetRegionArguments (ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } /* Get the table header first so we can get the table length */ TableHeader = ACPI_ALLOCATE (sizeof (ACPI_TABLE_HEADER)); if (!TableHeader) { return_ACPI_STATUS (AE_NO_MEMORY); } Status = AcpiExRegionRead (ObjDesc, sizeof (ACPI_TABLE_HEADER), ACPI_CAST_PTR (UINT8, TableHeader)); Length = TableHeader->Length; ACPI_FREE (TableHeader); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Must have at least an ACPI table header */ if (Length < sizeof (ACPI_TABLE_HEADER)) { return_ACPI_STATUS (AE_INVALID_TABLE_LENGTH); } /* * The original implementation simply mapped the table, with no copy. * However, the memory region is not guaranteed to remain stable and * we must copy the table to a local buffer. For example, the memory * region is corrupted after suspend on some machines. Dynamically * loaded tables are usually small, so this overhead is minimal. * * The latest implementation (5/2009) does not use a mapping at all. * We use the low-level operation region interface to read the table * instead of the obvious optimization of using a direct mapping. * This maintains a consistent use of operation regions across the * entire subsystem. This is important if additional processing must * be performed in the (possibly user-installed) operation region * handler. For example, AcpiExec and ASLTS depend on this. */ /* Allocate a buffer for the table */ Table = ACPI_ALLOCATE (Length); if (!Table) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Read the entire table */ Status = AcpiExRegionRead (ObjDesc, Length, ACPI_CAST_PTR (UINT8, Table)); if (ACPI_FAILURE (Status)) { ACPI_FREE (Table); return_ACPI_STATUS (Status); } break; case ACPI_TYPE_BUFFER: /* Buffer or resolved RegionField */ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Load table from Buffer or Field %p\n", ObjDesc)); /* Must have at least an ACPI table header */ if (ObjDesc->Buffer.Length < sizeof (ACPI_TABLE_HEADER)) { return_ACPI_STATUS (AE_INVALID_TABLE_LENGTH); } /* Get the actual table length from the table header */ TableHeader = ACPI_CAST_PTR ( ACPI_TABLE_HEADER, ObjDesc->Buffer.Pointer); Length = TableHeader->Length; /* Table cannot extend beyond the buffer */ if (Length > ObjDesc->Buffer.Length) { return_ACPI_STATUS (AE_AML_BUFFER_LIMIT); } if (Length < sizeof (ACPI_TABLE_HEADER)) { return_ACPI_STATUS (AE_INVALID_TABLE_LENGTH); } /* * Copy the table from the buffer because the buffer could be * modified or even deleted in the future */ Table = ACPI_ALLOCATE (Length); if (!Table) { return_ACPI_STATUS (AE_NO_MEMORY); } memcpy (Table, TableHeader, Length); break; default: return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* Install the new table into the local data structures */ ACPI_INFO (("Dynamic OEM Table Load:")); AcpiExExitInterpreter (); Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table), ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL, Table, TRUE, &TableIndex); AcpiExEnterInterpreter (); if (ACPI_FAILURE (Status)) { /* Delete allocated table buffer */ ACPI_FREE (Table); return_ACPI_STATUS (Status); } /* * Add the table to the namespace. * * Note: Load the table objects relative to the root of the namespace. * This appears to go against the ACPI specification, but we do it for * compatibility with other ACPI implementations. */ Status = AcpiExAddTable (TableIndex, &DdbHandle); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Complete the initialization/resolution of new objects */ AcpiExExitInterpreter (); AcpiNsInitializeObjects (); AcpiExEnterInterpreter (); /* Remove the reference to DdbHandle created by AcpiExAddTable above */ AcpiUtRemoveReference (DdbHandle); /* Return -1 (non-zero) indicates success */ Target->Integer.Value = 0xFFFFFFFFFFFFFFFF; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExUnloadTable * * PARAMETERS: DdbHandle - Handle to a previously loaded table * * RETURN: Status * * DESCRIPTION: Unload an ACPI table * ******************************************************************************/ ACPI_STATUS AcpiExUnloadTable ( ACPI_OPERAND_OBJECT *DdbHandle) { ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT *TableDesc = DdbHandle; UINT32 TableIndex; ACPI_FUNCTION_TRACE (ExUnloadTable); /* * Temporarily emit a warning so that the ASL for the machine can be * hopefully obtained. This is to say that the Unload() operator is * extremely rare if not completely unused. */ ACPI_WARNING ((AE_INFO, "Received request to unload an ACPI table")); /* * May 2018: Unload is no longer supported for the following reasons: * 1) A correct implementation on some hosts may not be possible. * 2) Other ACPI implementations do not correctly/fully support it. * 3) It requires host device driver support which does not exist. * (To properly support namespace unload out from underneath.) * 4) This AML operator has never been seen in the field. */ ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED, "AML Unload operator is not supported")); /* * Validate the handle * Although the handle is partially validated in AcpiExReconfiguration() * when it calls AcpiExResolveOperands(), the handle is more completely * validated here. * * Handle must be a valid operand object of type reference. Also, the * DdbHandle must still be marked valid (table has not been previously * unloaded) */ if ((!DdbHandle) || (ACPI_GET_DESCRIPTOR_TYPE (DdbHandle) != ACPI_DESC_TYPE_OPERAND) || (DdbHandle->Common.Type != ACPI_TYPE_LOCAL_REFERENCE) || (!(DdbHandle->Common.Flags & AOPOBJ_DATA_VALID))) { return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* Get the table index from the DdbHandle */ TableIndex = TableDesc->Reference.Value; /* * Release the interpreter lock so that the table lock won't have * strict order requirement against it. */ AcpiExExitInterpreter (); Status = AcpiTbUnloadTable (TableIndex); AcpiExEnterInterpreter (); /* * Invalidate the handle. We do this because the handle may be stored * in a named object and may not be actually deleted until much later. */ if (ACPI_SUCCESS (Status)) { DdbHandle->Common.Flags &= ~AOPOBJ_DATA_VALID; } return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exconvrt.c000066400000000000000000000671401465205512700224310ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exconvrt - Object conversion routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "amlcode.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exconvrt") /* Local prototypes */ static UINT32 AcpiExConvertToAscii ( UINT64 Integer, UINT16 Base, UINT8 *String, UINT8 MaxLength); /******************************************************************************* * * FUNCTION: AcpiExConvertToInteger * * PARAMETERS: ObjDesc - Object to be converted. Must be an * Integer, Buffer, or String * ResultDesc - Where the new Integer object is returned * ImplicitConversion - Used for string conversion * * RETURN: Status * * DESCRIPTION: Convert an ACPI Object to an integer. * ******************************************************************************/ ACPI_STATUS AcpiExConvertToInteger ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ResultDesc, UINT32 ImplicitConversion) { ACPI_OPERAND_OBJECT *ReturnDesc; UINT8 *Pointer; UINT64 Result; UINT32 i; UINT32 Count; ACPI_FUNCTION_TRACE_PTR (ExConvertToInteger, ObjDesc); switch (ObjDesc->Common.Type) { case ACPI_TYPE_INTEGER: /* No conversion necessary */ *ResultDesc = ObjDesc; return_ACPI_STATUS (AE_OK); case ACPI_TYPE_BUFFER: case ACPI_TYPE_STRING: /* Note: Takes advantage of common buffer/string fields */ Pointer = ObjDesc->Buffer.Pointer; Count = ObjDesc->Buffer.Length; break; default: return_ACPI_STATUS (AE_TYPE); } /* * Convert the buffer/string to an integer. Note that both buffers and * strings are treated as raw data - we don't convert ascii to hex for * strings. * * There are two terminating conditions for the loop: * 1) The size of an integer has been reached, or * 2) The end of the buffer or string has been reached */ Result = 0; /* String conversion is different than Buffer conversion */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_STRING: /* * Convert string to an integer - for most cases, the string must be * hexadecimal as per the ACPI specification. The only exception (as * of ACPI 3.0) is that the ToInteger() operator allows both decimal * and hexadecimal strings (hex prefixed with "0x"). * * Explicit conversion is used only by ToInteger. * All other string-to-integer conversions are implicit conversions. */ if (ImplicitConversion) { Result = AcpiUtImplicitStrtoul64 (ACPI_CAST_PTR (char, Pointer)); } else { Result = AcpiUtExplicitStrtoul64 (ACPI_CAST_PTR (char, Pointer)); } break; case ACPI_TYPE_BUFFER: /* Check for zero-length buffer */ if (!Count) { return_ACPI_STATUS (AE_AML_BUFFER_LIMIT); } /* Transfer no more than an integer's worth of data */ if (Count > AcpiGbl_IntegerByteWidth) { Count = AcpiGbl_IntegerByteWidth; } /* * Convert buffer to an integer - we simply grab enough raw data * from the buffer to fill an integer */ for (i = 0; i < Count; i++) { /* * Get next byte and shift it into the Result. * Little endian is used, meaning that the first byte of the buffer * is the LSB of the integer */ Result |= (((UINT64) Pointer[i]) << (i * 8)); } break; default: /* No other types can get here */ break; } /* Create a new integer */ ReturnDesc = AcpiUtCreateIntegerObject (Result); if (!ReturnDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Converted value: %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Result))); /* Save the Result */ (void) AcpiExTruncateFor32bitTable (ReturnDesc); *ResultDesc = ReturnDesc; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExConvertToBuffer * * PARAMETERS: ObjDesc - Object to be converted. Must be an * Integer, Buffer, or String * ResultDesc - Where the new buffer object is returned * * RETURN: Status * * DESCRIPTION: Convert an ACPI Object to a Buffer * ******************************************************************************/ ACPI_STATUS AcpiExConvertToBuffer ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ResultDesc) { ACPI_OPERAND_OBJECT *ReturnDesc; UINT8 *NewBuf; ACPI_FUNCTION_TRACE_PTR (ExConvertToBuffer, ObjDesc); switch (ObjDesc->Common.Type) { case ACPI_TYPE_BUFFER: /* No conversion necessary */ *ResultDesc = ObjDesc; return_ACPI_STATUS (AE_OK); case ACPI_TYPE_INTEGER: /* * Create a new Buffer object. * Need enough space for one integer */ ReturnDesc = AcpiUtCreateBufferObject (AcpiGbl_IntegerByteWidth); if (!ReturnDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Copy the integer to the buffer, LSB first */ NewBuf = ReturnDesc->Buffer.Pointer; memcpy (NewBuf, &ObjDesc->Integer.Value, AcpiGbl_IntegerByteWidth); break; case ACPI_TYPE_STRING: /* * Create a new Buffer object * Size will be the string length * * NOTE: Add one to the string length to include the null terminator. * The ACPI spec is unclear on this subject, but there is existing * ASL/AML code that depends on the null being transferred to the new * buffer. */ ReturnDesc = AcpiUtCreateBufferObject ((ACPI_SIZE) ObjDesc->String.Length + 1); if (!ReturnDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Copy the string to the buffer */ NewBuf = ReturnDesc->Buffer.Pointer; strncpy ((char *) NewBuf, (char *) ObjDesc->String.Pointer, ObjDesc->String.Length); break; default: return_ACPI_STATUS (AE_TYPE); } /* Mark buffer initialized */ ReturnDesc->Common.Flags |= AOPOBJ_DATA_VALID; *ResultDesc = ReturnDesc; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExConvertToAscii * * PARAMETERS: Integer - Value to be converted * Base - ACPI_STRING_DECIMAL or ACPI_STRING_HEX * String - Where the string is returned * DataWidth - Size of data item to be converted, in bytes * * RETURN: Actual string length * * DESCRIPTION: Convert an ACPI Integer to a hex or decimal string * ******************************************************************************/ static UINT32 AcpiExConvertToAscii ( UINT64 Integer, UINT16 Base, UINT8 *String, UINT8 DataWidth) { UINT64 Digit; UINT32 i; UINT32 j; UINT32 k = 0; UINT32 HexLength; UINT32 DecimalLength; UINT32 Remainder; BOOLEAN SupressZeros; ACPI_FUNCTION_ENTRY (); switch (Base) { case 10: /* Setup max length for the decimal number */ switch (DataWidth) { case 1: DecimalLength = ACPI_MAX8_DECIMAL_DIGITS; break; case 4: DecimalLength = ACPI_MAX32_DECIMAL_DIGITS; break; case 8: default: DecimalLength = ACPI_MAX64_DECIMAL_DIGITS; break; } SupressZeros = TRUE; /* No leading zeros */ Remainder = 0; for (i = DecimalLength; i > 0; i--) { /* Divide by nth factor of 10 */ Digit = Integer; for (j = 0; j < i; j++) { (void) AcpiUtShortDivide (Digit, 10, &Digit, &Remainder); } /* Handle leading zeros */ if (Remainder != 0) { SupressZeros = FALSE; } if (!SupressZeros) { String[k] = (UINT8) (ACPI_ASCII_ZERO + Remainder); k++; } } break; case 16: /* HexLength: 2 ascii hex chars per data byte */ HexLength = (DataWidth * 2); for (i = 0, j = (HexLength-1); i < HexLength; i++, j--) { /* Get one hex digit, most significant digits first */ String[k] = (UINT8) AcpiUtHexToAsciiChar (Integer, ACPI_MUL_4 (j)); k++; } break; default: return (0); } /* * Since leading zeros are suppressed, we must check for the case where * the integer equals 0 * * Finally, null terminate the string and return the length */ if (!k) { String [0] = ACPI_ASCII_ZERO; k = 1; } String [k] = 0; return ((UINT32) k); } /******************************************************************************* * * FUNCTION: AcpiExConvertToString * * PARAMETERS: ObjDesc - Object to be converted. Must be an * Integer, Buffer, or String * ResultDesc - Where the string object is returned * Type - String flags (base and conversion type) * * RETURN: Status * * DESCRIPTION: Convert an ACPI Object to a string. Supports both implicit * and explicit conversions and related rules. * ******************************************************************************/ ACPI_STATUS AcpiExConvertToString ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ResultDesc, UINT32 Type) { ACPI_OPERAND_OBJECT *ReturnDesc; UINT8 *NewBuf; UINT32 i; UINT32 StringLength = 0; UINT16 Base = 16; UINT8 Separator = ','; ACPI_FUNCTION_TRACE_PTR (ExConvertToString, ObjDesc); switch (ObjDesc->Common.Type) { case ACPI_TYPE_STRING: /* No conversion necessary */ *ResultDesc = ObjDesc; return_ACPI_STATUS (AE_OK); case ACPI_TYPE_INTEGER: switch (Type) { case ACPI_EXPLICIT_CONVERT_DECIMAL: /* * From ToDecimalString, integer source. * * Make room for the maximum decimal number size */ StringLength = ACPI_MAX_DECIMAL_DIGITS; Base = 10; break; default: /* Two hex string characters for each integer byte */ StringLength = ACPI_MUL_2 (AcpiGbl_IntegerByteWidth); break; } /* * Create a new String * Need enough space for one ASCII integer (plus null terminator) */ ReturnDesc = AcpiUtCreateStringObject ((ACPI_SIZE) StringLength); if (!ReturnDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } NewBuf = ReturnDesc->Buffer.Pointer; /* Convert integer to string */ StringLength = AcpiExConvertToAscii ( ObjDesc->Integer.Value, Base, NewBuf, AcpiGbl_IntegerByteWidth); /* Null terminate at the correct place */ ReturnDesc->String.Length = StringLength; NewBuf [StringLength] = 0; break; case ACPI_TYPE_BUFFER: /* Setup string length, base, and separator */ switch (Type) { case ACPI_EXPLICIT_CONVERT_DECIMAL: /* Used by ToDecimalString */ /* * Explicit conversion from the ToDecimalString ASL operator. * * From ACPI: "If the input is a buffer, it is converted to a * a string of decimal values separated by commas." */ Base = 10; /* * Calculate the final string length. Individual string values * are variable length (include separator for each) */ for (i = 0; i < ObjDesc->Buffer.Length; i++) { if (ObjDesc->Buffer.Pointer[i] >= 100) { StringLength += 4; } else if (ObjDesc->Buffer.Pointer[i] >= 10) { StringLength += 3; } else { StringLength += 2; } } break; case ACPI_IMPLICIT_CONVERT_HEX: /* * Implicit buffer-to-string conversion * * From the ACPI spec: * "The entire contents of the buffer are converted to a string of * two-character hexadecimal numbers, each separated by a space." * * Each hex number is prefixed with 0x (11/2018) */ Separator = ' '; StringLength = (ObjDesc->Buffer.Length * 5); break; case ACPI_EXPLICIT_CONVERT_HEX: /* * Explicit conversion from the ToHexString ASL operator. * * From ACPI: "If Data is a buffer, it is converted to a string of * hexadecimal values separated by commas." * * Each hex number is prefixed with 0x (11/2018) */ Separator = ','; StringLength = (ObjDesc->Buffer.Length * 5); break; default: return_ACPI_STATUS (AE_BAD_PARAMETER); } /* * Create a new string object and string buffer * (-1 because of extra separator included in StringLength from above) * Allow creation of zero-length strings from zero-length buffers. */ if (StringLength) { StringLength--; } ReturnDesc = AcpiUtCreateStringObject ((ACPI_SIZE) StringLength); if (!ReturnDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } NewBuf = ReturnDesc->Buffer.Pointer; /* * Convert buffer bytes to hex or decimal values * (separated by commas or spaces) */ for (i = 0; i < ObjDesc->Buffer.Length; i++) { if (Base == 16) { /* Emit 0x prefix for explicit/implicit hex conversion */ *NewBuf++ = '0'; *NewBuf++ = 'x'; } NewBuf += AcpiExConvertToAscii ( (UINT64) ObjDesc->Buffer.Pointer[i], Base, NewBuf, 1); /* Each digit is separated by either a comma or space */ *NewBuf++ = Separator; } /* * Null terminate the string * (overwrites final comma/space from above) */ if (ObjDesc->Buffer.Length) { NewBuf--; } *NewBuf = 0; break; default: return_ACPI_STATUS (AE_TYPE); } *ResultDesc = ReturnDesc; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExConvertToTargetType * * PARAMETERS: DestinationType - Current type of the destination * SourceDesc - Source object to be converted. * ResultDesc - Where the converted object is returned * WalkState - Current method state * * RETURN: Status * * DESCRIPTION: Implements "implicit conversion" rules for storing an object. * ******************************************************************************/ ACPI_STATUS AcpiExConvertToTargetType ( ACPI_OBJECT_TYPE DestinationType, ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT **ResultDesc, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (ExConvertToTargetType); /* Default behavior */ *ResultDesc = SourceDesc; /* * If required by the target, * perform implicit conversion on the source before we store it. */ switch (GET_CURRENT_ARG_TYPE (WalkState->OpInfo->RuntimeArgs)) { case ARGI_SIMPLE_TARGET: case ARGI_FIXED_TARGET: case ARGI_INTEGER_REF: /* Handles Increment, Decrement cases */ switch (DestinationType) { case ACPI_TYPE_LOCAL_REGION_FIELD: /* * Named field can always handle conversions */ break; default: /* No conversion allowed for these types */ if (DestinationType != SourceDesc->Common.Type) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Explicit operator, will store (%s) over existing type (%s)\n", AcpiUtGetObjectTypeName (SourceDesc), AcpiUtGetTypeName (DestinationType))); Status = AE_TYPE; } } break; case ARGI_TARGETREF: case ARGI_STORE_TARGET: switch (DestinationType) { case ACPI_TYPE_INTEGER: case ACPI_TYPE_BUFFER_FIELD: case ACPI_TYPE_LOCAL_BANK_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD: /* * These types require an Integer operand. We can convert * a Buffer or a String to an Integer if necessary. */ Status = AcpiExConvertToInteger (SourceDesc, ResultDesc, ACPI_IMPLICIT_CONVERSION); break; case ACPI_TYPE_STRING: /* * The operand must be a String. We can convert an * Integer or Buffer if necessary */ Status = AcpiExConvertToString (SourceDesc, ResultDesc, ACPI_IMPLICIT_CONVERT_HEX); break; case ACPI_TYPE_BUFFER: /* * The operand must be a Buffer. We can convert an * Integer or String if necessary */ Status = AcpiExConvertToBuffer (SourceDesc, ResultDesc); break; default: ACPI_ERROR ((AE_INFO, "Bad destination type during conversion: 0x%X", DestinationType)); Status = AE_AML_INTERNAL; break; } break; case ARGI_REFERENCE: /* * CreateXxxxField cases - we are storing the field object into the name */ break; default: ACPI_ERROR ((AE_INFO, "Unknown Target type ID 0x%X AmlOpcode 0x%X DestType %s", GET_CURRENT_ARG_TYPE (WalkState->OpInfo->RuntimeArgs), WalkState->Opcode, AcpiUtGetTypeName (DestinationType))); Status = AE_AML_INTERNAL; } /* * Source-to-Target conversion semantics: * * If conversion to the target type cannot be performed, then simply * overwrite the target with the new object and type. */ if (Status == AE_TYPE) { Status = AE_OK; } return_ACPI_STATUS (Status); } src/acpica/source/components/executer/excreate.c000066400000000000000000000526071465205512700223630ustar00rootroot00000000000000/****************************************************************************** * * Module Name: excreate - Named object creation * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "amlcode.h" #include "acnamesp.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("excreate") /******************************************************************************* * * FUNCTION: AcpiExCreateAlias * * PARAMETERS: WalkState - Current state, contains operands * * RETURN: Status * * DESCRIPTION: Create a new named alias * ******************************************************************************/ ACPI_STATUS AcpiExCreateAlias ( ACPI_WALK_STATE *WalkState) { ACPI_NAMESPACE_NODE *TargetNode; ACPI_NAMESPACE_NODE *AliasNode; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (ExCreateAlias); /* Get the source/alias operands (both namespace nodes) */ AliasNode = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0]; TargetNode = (ACPI_NAMESPACE_NODE *) WalkState->Operands[1]; if ((TargetNode->Type == ACPI_TYPE_LOCAL_ALIAS) || (TargetNode->Type == ACPI_TYPE_LOCAL_METHOD_ALIAS)) { /* * Dereference an existing alias so that we don't create a chain * of aliases. With this code, we guarantee that an alias is * always exactly one level of indirection away from the * actual aliased name. */ TargetNode = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, TargetNode->Object); } /* Ensure that the target node is valid */ if (!TargetNode) { return_ACPI_STATUS (AE_NULL_OBJECT); } /* Construct the alias object (a namespace node) */ switch (TargetNode->Type) { case ACPI_TYPE_METHOD: /* * Control method aliases need to be differentiated with * a special type */ AliasNode->Type = ACPI_TYPE_LOCAL_METHOD_ALIAS; break; default: /* * All other object types. * * The new alias has the type ALIAS and points to the original * NS node, not the object itself. */ AliasNode->Type = ACPI_TYPE_LOCAL_ALIAS; AliasNode->Object = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, TargetNode); break; } /* Since both operands are Nodes, we don't need to delete them */ AliasNode->Object = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, TargetNode); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExCreateEvent * * PARAMETERS: WalkState - Current state * * RETURN: Status * * DESCRIPTION: Create a new event object * ******************************************************************************/ ACPI_STATUS AcpiExCreateEvent ( ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_FUNCTION_TRACE (ExCreateEvent); ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_EVENT); if (!ObjDesc) { Status = AE_NO_MEMORY; goto Cleanup; } /* * Create the actual OS semaphore, with zero initial units -- meaning * that the event is created in an unsignalled state */ Status = AcpiOsCreateSemaphore (ACPI_NO_UNIT_LIMIT, 0, &ObjDesc->Event.OsSemaphore); if (ACPI_FAILURE (Status)) { goto Cleanup; } /* Attach object to the Node */ Status = AcpiNsAttachObject ( (ACPI_NAMESPACE_NODE *) WalkState->Operands[0], ObjDesc, ACPI_TYPE_EVENT); Cleanup: /* * Remove local reference to the object (on error, will cause deletion * of both object and semaphore if present.) */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExCreateMutex * * PARAMETERS: WalkState - Current state * * RETURN: Status * * DESCRIPTION: Create a new mutex object * * Mutex (Name[0], SyncLevel[1]) * ******************************************************************************/ ACPI_STATUS AcpiExCreateMutex ( ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_FUNCTION_TRACE_PTR (ExCreateMutex, ACPI_WALK_OPERANDS); /* Create the new mutex object */ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_MUTEX); if (!ObjDesc) { Status = AE_NO_MEMORY; goto Cleanup; } /* Create the actual OS Mutex */ Status = AcpiOsCreateMutex (&ObjDesc->Mutex.OsMutex); if (ACPI_FAILURE (Status)) { goto Cleanup; } /* Init object and attach to NS node */ ObjDesc->Mutex.SyncLevel = (UINT8) WalkState->Operands[1]->Integer.Value; ObjDesc->Mutex.Node = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0]; Status = AcpiNsAttachObject ( ObjDesc->Mutex.Node, ObjDesc, ACPI_TYPE_MUTEX); Cleanup: /* * Remove local reference to the object (on error, will cause deletion * of both object and semaphore if present.) */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExCreateRegion * * PARAMETERS: AmlStart - Pointer to the region declaration AML * AmlLength - Max length of the declaration AML * SpaceId - Address space ID for the region * WalkState - Current state * * RETURN: Status * * DESCRIPTION: Create a new operation region object * ******************************************************************************/ ACPI_STATUS AcpiExCreateRegion ( UINT8 *AmlStart, UINT32 AmlLength, UINT8 SpaceId, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_NAMESPACE_NODE *Node; ACPI_OPERAND_OBJECT *RegionObj2; ACPI_FUNCTION_TRACE (ExCreateRegion); /* Get the Namespace Node */ Node = WalkState->Op->Common.Node; /* * If the region object is already attached to this node, * just return */ if (AcpiNsGetAttachedObject (Node)) { return_ACPI_STATUS (AE_OK); } /* * Space ID must be one of the predefined IDs, or in the user-defined * range */ if (!AcpiIsValidSpaceId (SpaceId)) { /* * Print an error message, but continue. We don't want to abort * a table load for this exception. Instead, if the region is * actually used at runtime, abort the executing method. */ ACPI_ERROR ((AE_INFO, "Invalid/unknown Address Space ID: 0x%2.2X", SpaceId)); } ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "Region Type - %s (0x%X)\n", AcpiUtGetRegionName (SpaceId), SpaceId)); /* Create the region descriptor */ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_REGION); if (!ObjDesc) { Status = AE_NO_MEMORY; goto Cleanup; } /* * Remember location in AML stream of address & length * operands since they need to be evaluated at run time. */ RegionObj2 = AcpiNsGetSecondaryObject (ObjDesc); RegionObj2->Extra.AmlStart = AmlStart; RegionObj2->Extra.AmlLength = AmlLength; RegionObj2->Extra.Method_REG = NULL; if (WalkState->ScopeInfo) { RegionObj2->Extra.ScopeNode = WalkState->ScopeInfo->Scope.Node; } else { RegionObj2->Extra.ScopeNode = Node; } /* Init the region from the operands */ ObjDesc->Region.SpaceId = SpaceId; ObjDesc->Region.Address = 0; ObjDesc->Region.Length = 0; ObjDesc->Region.Pointer = NULL; ObjDesc->Region.Node = Node; ObjDesc->Region.Handler = NULL; ObjDesc->Common.Flags &= ~(AOPOBJ_SETUP_COMPLETE | AOPOBJ_REG_CONNECTED | AOPOBJ_OBJECT_INITIALIZED); /* Install the new region object in the parent Node */ Status = AcpiNsAttachObject (Node, ObjDesc, ACPI_TYPE_REGION); Cleanup: /* Remove local reference to the object */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExCreateProcessor * * PARAMETERS: WalkState - Current state * * RETURN: Status * * DESCRIPTION: Create a new processor object and populate the fields * * Processor (Name[0], CpuID[1], PblockAddr[2], PblockLength[3]) * ******************************************************************************/ ACPI_STATUS AcpiExCreateProcessor ( ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; ACPI_FUNCTION_TRACE_PTR (ExCreateProcessor, WalkState); /* Create the processor object */ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_PROCESSOR); if (!ObjDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Initialize the processor object from the operands */ ObjDesc->Processor.ProcId = (UINT8) Operand[1]->Integer.Value; ObjDesc->Processor.Length = (UINT8) Operand[3]->Integer.Value; ObjDesc->Processor.Address = (ACPI_IO_ADDRESS) Operand[2]->Integer.Value; /* Install the processor object in the parent Node */ Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) Operand[0], ObjDesc, ACPI_TYPE_PROCESSOR); /* Remove local reference to the object */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExCreatePowerResource * * PARAMETERS: WalkState - Current state * * RETURN: Status * * DESCRIPTION: Create a new PowerResource object and populate the fields * * PowerResource (Name[0], SystemLevel[1], ResourceOrder[2]) * ******************************************************************************/ ACPI_STATUS AcpiExCreatePowerResource ( ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_FUNCTION_TRACE_PTR (ExCreatePowerResource, WalkState); /* Create the power resource object */ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_POWER); if (!ObjDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Initialize the power object from the operands */ ObjDesc->PowerResource.SystemLevel = (UINT8) Operand[1]->Integer.Value; ObjDesc->PowerResource.ResourceOrder = (UINT16) Operand[2]->Integer.Value; /* Install the power resource object in the parent Node */ Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) Operand[0], ObjDesc, ACPI_TYPE_POWER); /* Remove local reference to the object */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExCreateMethod * * PARAMETERS: AmlStart - First byte of the method's AML * AmlLength - AML byte count for this method * WalkState - Current state * * RETURN: Status * * DESCRIPTION: Create a new method object * ******************************************************************************/ ACPI_STATUS AcpiExCreateMethod ( UINT8 *AmlStart, UINT32 AmlLength, ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; UINT8 MethodFlags; ACPI_FUNCTION_TRACE_PTR (ExCreateMethod, WalkState); /* Create a new method object */ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD); if (!ObjDesc) { Status = AE_NO_MEMORY; goto Exit; } /* Save the method's AML pointer and length */ ObjDesc->Method.AmlStart = AmlStart; ObjDesc->Method.AmlLength = AmlLength; ObjDesc->Method.Node = Operand[0]; /* * Disassemble the method flags. Split off the ArgCount, Serialized * flag, and SyncLevel for efficiency. */ MethodFlags = (UINT8) Operand[1]->Integer.Value; ObjDesc->Method.ParamCount = (UINT8) (MethodFlags & AML_METHOD_ARG_COUNT); /* * Get the SyncLevel. If method is serialized, a mutex will be * created for this method when it is parsed. */ if (MethodFlags & AML_METHOD_SERIALIZED) { ObjDesc->Method.InfoFlags = ACPI_METHOD_SERIALIZED; /* * ACPI 1.0: SyncLevel = 0 * ACPI 2.0: SyncLevel = SyncLevel in method declaration */ ObjDesc->Method.SyncLevel = (UINT8) ((MethodFlags & AML_METHOD_SYNC_LEVEL) >> 4); } /* Attach the new object to the method Node */ Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) Operand[0], ObjDesc, ACPI_TYPE_METHOD); /* Remove local reference to the object */ AcpiUtRemoveReference (ObjDesc); Exit: /* Remove a reference to the operand */ AcpiUtRemoveReference (Operand[1]); return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exdebug.c000066400000000000000000000414231465205512700222000ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exdebug - Support for stores to the AML Debug Object * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exdebug") #ifndef ACPI_NO_ERROR_MESSAGES /******************************************************************************* * * FUNCTION: AcpiExDoDebugObject * * PARAMETERS: SourceDesc - Object to be output to "Debug Object" * Level - Indentation level (used for packages) * Index - Current package element, zero if not pkg * * RETURN: None * * DESCRIPTION: Handles stores to the AML Debug Object. For example: * Store(INT1, Debug) * * This function is not compiled if ACPI_NO_ERROR_MESSAGES is set. * * This function is only enabled if AcpiGbl_EnableAmlDebugObject is set, or * if ACPI_LV_DEBUG_OBJECT is set in the AcpiDbgLevel. Thus, in the normal * operational case, stores to the debug object are ignored but can be easily * enabled if necessary. * ******************************************************************************/ void AcpiExDoDebugObject ( ACPI_OPERAND_OBJECT *SourceDesc, UINT32 Level, UINT32 Index) { UINT32 i; UINT32 Timer; ACPI_OPERAND_OBJECT *ObjectDesc; UINT32 Value; ACPI_FUNCTION_TRACE_PTR (ExDoDebugObject, SourceDesc); /* Output must be enabled via the DebugObject global or the DbgLevel */ if (!AcpiGbl_EnableAmlDebugObject && !(AcpiDbgLevel & ACPI_LV_DEBUG_OBJECT)) { return_VOID; } /* Newline -- don't emit the line header */ if (SourceDesc && (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc) == ACPI_DESC_TYPE_OPERAND) && (SourceDesc->Common.Type == ACPI_TYPE_STRING)) { if ((SourceDesc->String.Length == 1) && (*SourceDesc->String.Pointer == '\n')) { AcpiOsPrintf ("\n"); return_VOID; } } /* * Print line header as long as we are not in the middle of an * object display */ if (!((Level > 0) && Index == 0)) { if (AcpiGbl_DisplayDebugTimer) { /* * We will emit the current timer value (in microseconds) with each * debug output. Only need the lower 26 bits. This allows for 67 * million microseconds or 67 seconds before rollover. * * Convert 100 nanosecond units to microseconds */ Timer = ((UINT32) AcpiOsGetTimer () / 10); Timer &= 0x03FFFFFF; AcpiOsPrintf ("ACPI Debug: T=0x%8.8X %*s", Timer, Level, " "); } else { AcpiOsPrintf ("ACPI Debug: %*s", Level, " "); } } /* Display the index for package output only */ if (Index > 0) { AcpiOsPrintf ("(%.2u) ", Index - 1); } if (!SourceDesc) { AcpiOsPrintf ("[Null Object]\n"); return_VOID; } if (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc) == ACPI_DESC_TYPE_OPERAND) { /* No object type prefix needed for integers and strings */ if ((SourceDesc->Common.Type != ACPI_TYPE_INTEGER) && (SourceDesc->Common.Type != ACPI_TYPE_STRING)) { AcpiOsPrintf ("%s ", AcpiUtGetObjectTypeName (SourceDesc)); } if (!AcpiUtValidInternalObject (SourceDesc)) { AcpiOsPrintf ("%p, Invalid Internal Object!\n", SourceDesc); return_VOID; } } else if (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc) == ACPI_DESC_TYPE_NAMED) { AcpiOsPrintf ("%s (Node %p)\n", AcpiUtGetTypeName (((ACPI_NAMESPACE_NODE *) SourceDesc)->Type), SourceDesc); return_VOID; } else { return_VOID; } /* SourceDesc is of type ACPI_DESC_TYPE_OPERAND */ switch (SourceDesc->Common.Type) { case ACPI_TYPE_INTEGER: /* Output correct integer width */ if (AcpiGbl_IntegerByteWidth == 4) { AcpiOsPrintf ("0x%8.8X\n", (UINT32) SourceDesc->Integer.Value); } else { AcpiOsPrintf ("0x%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (SourceDesc->Integer.Value)); } break; case ACPI_TYPE_BUFFER: AcpiOsPrintf ("[0x%.2X]\n", (UINT32) SourceDesc->Buffer.Length); AcpiUtDumpBuffer (SourceDesc->Buffer.Pointer, (SourceDesc->Buffer.Length < 256) ? SourceDesc->Buffer.Length : 256, DB_BYTE_DISPLAY, 0); break; case ACPI_TYPE_STRING: AcpiOsPrintf ("\"%s\"\n", SourceDesc->String.Pointer); break; case ACPI_TYPE_PACKAGE: AcpiOsPrintf ("(Contains 0x%.2X Elements):\n", SourceDesc->Package.Count); /* Output the entire contents of the package */ for (i = 0; i < SourceDesc->Package.Count; i++) { AcpiExDoDebugObject (SourceDesc->Package.Elements[i], Level + 4, i + 1); } break; case ACPI_TYPE_LOCAL_REFERENCE: AcpiOsPrintf ("[%s] ", AcpiUtGetReferenceName (SourceDesc)); /* Decode the reference */ switch (SourceDesc->Reference.Class) { case ACPI_REFCLASS_INDEX: AcpiOsPrintf ("0x%X\n", SourceDesc->Reference.Value); break; case ACPI_REFCLASS_TABLE: /* Case for DdbHandle */ AcpiOsPrintf ("Table Index 0x%X\n", SourceDesc->Reference.Value); return_VOID; default: break; } AcpiOsPrintf (" "); /* Check for valid node first, then valid object */ if (SourceDesc->Reference.Node) { if (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc->Reference.Node) != ACPI_DESC_TYPE_NAMED) { AcpiOsPrintf (" %p - Not a valid namespace node\n", SourceDesc->Reference.Node); } else { AcpiOsPrintf ("Node %p [%4.4s] ", SourceDesc->Reference.Node, (SourceDesc->Reference.Node)->Name.Ascii); switch ((SourceDesc->Reference.Node)->Type) { /* These types have no attached object */ case ACPI_TYPE_DEVICE: AcpiOsPrintf ("Device\n"); break; case ACPI_TYPE_THERMAL: AcpiOsPrintf ("Thermal Zone\n"); break; default: AcpiExDoDebugObject ((SourceDesc->Reference.Node)->Object, Level + 4, 0); break; } } } else if (SourceDesc->Reference.Object) { if (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc->Reference.Object) == ACPI_DESC_TYPE_NAMED) { /* Reference object is a namespace node */ AcpiExDoDebugObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, SourceDesc->Reference.Object), Level + 4, 0); } else { ObjectDesc = SourceDesc->Reference.Object; Value = SourceDesc->Reference.Value; switch (ObjectDesc->Common.Type) { case ACPI_TYPE_BUFFER: AcpiOsPrintf ("Buffer[%u] = 0x%2.2X\n", Value, *SourceDesc->Reference.IndexPointer); break; case ACPI_TYPE_STRING: AcpiOsPrintf ("String[%u] = \"%c\" (0x%2.2X)\n", Value, *SourceDesc->Reference.IndexPointer, *SourceDesc->Reference.IndexPointer); break; case ACPI_TYPE_PACKAGE: AcpiOsPrintf ("Package[%u] = ", Value); if (!(*SourceDesc->Reference.Where)) { AcpiOsPrintf ("[Uninitialized Package Element]\n"); } else { AcpiExDoDebugObject (*SourceDesc->Reference.Where, Level+4, 0); } break; default: AcpiOsPrintf ("Unknown Reference object type %X\n", ObjectDesc->Common.Type); break; } } } break; default: AcpiOsPrintf ("(Descriptor %p)\n", SourceDesc); break; } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "\n")); return_VOID; } #endif src/acpica/source/components/executer/exdump.c000066400000000000000000001343421465205512700220620ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exdump - Interpreter debug output routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "amlcode.h" #include "acnamesp.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exdump") /* * The following routines are used for debug output only */ #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) /* Local prototypes */ static void AcpiExOutString ( const char *Title, const char *Value); static void AcpiExOutPointer ( const char *Title, const void *Value); static void AcpiExDumpObject ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_EXDUMP_INFO *Info); static void AcpiExDumpReferenceObj ( ACPI_OPERAND_OBJECT *ObjDesc); static void AcpiExDumpPackageObj ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 Level, UINT32 Index); /******************************************************************************* * * Object Descriptor info tables * * Note: The first table entry must be an INIT opcode and must contain * the table length (number of table entries) * ******************************************************************************/ static ACPI_EXDUMP_INFO AcpiExDumpInteger[2] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpInteger), NULL}, {ACPI_EXD_UINT64, ACPI_EXD_OFFSET (Integer.Value), "Value"} }; static ACPI_EXDUMP_INFO AcpiExDumpString[4] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpString), NULL}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (String.Length), "Length"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (String.Pointer), "Pointer"}, {ACPI_EXD_STRING, 0, NULL} }; static ACPI_EXDUMP_INFO AcpiExDumpBuffer[5] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBuffer), NULL}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Buffer.Length), "Length"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Buffer.Pointer), "Pointer"}, {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Buffer.Node), "Parent Node"}, {ACPI_EXD_BUFFER, 0, NULL} }; static ACPI_EXDUMP_INFO AcpiExDumpPackage[6] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpPackage), NULL}, {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Package.Node), "Parent Node"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Package.Flags), "Flags"}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Package.Count), "Element Count"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Package.Elements), "Element List"}, {ACPI_EXD_PACKAGE, 0, NULL} }; static ACPI_EXDUMP_INFO AcpiExDumpDevice[4] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice), NULL}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Device.NotifyList[0]), "System Notify"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Device.NotifyList[1]), "Device Notify"}, {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Device.Handler), "Handler"} }; static ACPI_EXDUMP_INFO AcpiExDumpEvent[2] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpEvent), NULL}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Event.OsSemaphore), "OsSemaphore"} }; static ACPI_EXDUMP_INFO AcpiExDumpMethod[9] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpMethod), NULL}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.InfoFlags), "Info Flags"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ParamCount), "Parameter Count"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.SyncLevel), "Sync Level"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.Mutex), "Mutex"}, {ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Method.OwnerId), "Owner Id"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ThreadCount), "Thread Count"}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Method.AmlLength), "Aml Length"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.AmlStart), "Aml Start"} }; static ACPI_EXDUMP_INFO AcpiExDumpMutex[6] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpMutex), NULL}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Mutex.SyncLevel), "Sync Level"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Mutex.OriginalSyncLevel), "Original Sync Level"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Mutex.OwnerThread), "Owner Thread"}, {ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Mutex.AcquisitionDepth), "Acquire Depth"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Mutex.OsMutex), "OsMutex"} }; static ACPI_EXDUMP_INFO AcpiExDumpRegion[8] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpRegion), NULL}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Region.SpaceId), "Space Id"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Region.Flags), "Flags"}, {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Region.Node), "Parent Node"}, {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET (Region.Address), "Address"}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Region.Length), "Length"}, {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Region.Handler), "Handler"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Region.Next), "Next"} }; static ACPI_EXDUMP_INFO AcpiExDumpPower[6] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpPower), NULL}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (PowerResource.SystemLevel), "System Level"}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (PowerResource.ResourceOrder), "Resource Order"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.NotifyList[0]), "System Notify"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.NotifyList[1]), "Device Notify"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.Handler), "Handler"} }; static ACPI_EXDUMP_INFO AcpiExDumpProcessor[7] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpProcessor), NULL}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Processor.ProcId), "Processor ID"}, {ACPI_EXD_UINT8 , ACPI_EXD_OFFSET (Processor.Length), "Length"}, {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET (Processor.Address), "Address"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.NotifyList[0]), "System Notify"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.NotifyList[1]), "Device Notify"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.Handler), "Handler"} }; static ACPI_EXDUMP_INFO AcpiExDumpThermal[4] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal), NULL}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.NotifyList[0]), "System Notify"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.NotifyList[1]), "Device Notify"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.Handler), "Handler"} }; static ACPI_EXDUMP_INFO AcpiExDumpBufferField[3] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBufferField), NULL}, {ACPI_EXD_FIELD, 0, NULL}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BufferField.BufferObj), "Buffer Object"} }; static ACPI_EXDUMP_INFO AcpiExDumpRegionField[5] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField), NULL}, {ACPI_EXD_FIELD, 0, NULL}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Field.AccessLength), "AccessLength"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Field.RegionObj), "Region Object"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Field.ResourceBuffer), "ResourceBuffer"} }; static ACPI_EXDUMP_INFO AcpiExDumpBankField[5] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField), NULL}, {ACPI_EXD_FIELD, 0, NULL}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (BankField.Value), "Value"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BankField.RegionObj), "Region Object"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BankField.BankObj), "Bank Object"} }; static ACPI_EXDUMP_INFO AcpiExDumpIndexField[5] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField), NULL}, {ACPI_EXD_FIELD, 0, NULL}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (IndexField.Value), "Value"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (IndexField.IndexObj), "Index Object"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (IndexField.DataObj), "Data Object"} }; static ACPI_EXDUMP_INFO AcpiExDumpReference[9] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpReference), NULL}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Reference.Class), "Class"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Reference.TargetType), "Target Type"}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Reference.Value), "Value"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.Object), "Object Desc"}, {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Reference.Node), "Node"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.Where), "Where"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.IndexPointer), "Index Pointer"}, {ACPI_EXD_REFERENCE,0, NULL} }; static ACPI_EXDUMP_INFO AcpiExDumpAddressHandler[6] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpAddressHandler), NULL}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (AddressSpace.SpaceId), "Space Id"}, {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (AddressSpace.Next), "Next"}, {ACPI_EXD_RGN_LIST, ACPI_EXD_OFFSET (AddressSpace.RegionList), "Region List"}, {ACPI_EXD_NODE, ACPI_EXD_OFFSET (AddressSpace.Node), "Node"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (AddressSpace.Context), "Context"} }; static ACPI_EXDUMP_INFO AcpiExDumpNotify[7] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify), NULL}, {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Notify.Node), "Node"}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Notify.HandlerType), "Handler Type"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Handler), "Handler"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Context), "Context"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Next[0]), "Next System Notify"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Next[1]), "Next Device Notify"} }; static ACPI_EXDUMP_INFO AcpiExDumpExtra[6] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpExtra), NULL}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Extra.Method_REG), "_REG Method"}, {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Extra.ScopeNode), "Scope Node"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Extra.RegionContext), "Region Context"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Extra.AmlStart), "Aml Start"}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Extra.AmlLength), "Aml Length"} }; static ACPI_EXDUMP_INFO AcpiExDumpData[3] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpData), NULL}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Data.Handler), "Handler"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Data.Pointer), "Raw Data"} }; /* Miscellaneous tables */ static ACPI_EXDUMP_INFO AcpiExDumpCommon[5] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpCommon), NULL}, {ACPI_EXD_TYPE , 0, NULL}, {ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Common.ReferenceCount), "Reference Count"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Common.Flags), "Flags"}, {ACPI_EXD_LIST, ACPI_EXD_OFFSET (Common.NextObject), "Object List"} }; static ACPI_EXDUMP_INFO AcpiExDumpFieldCommon[7] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpFieldCommon), NULL}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.FieldFlags), "Field Flags"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.AccessByteWidth), "Access Byte Width"}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (CommonField.BitLength), "Bit Length"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (CommonField.BaseByteOffset), "Base Byte Offset"}, {ACPI_EXD_NODE, ACPI_EXD_OFFSET (CommonField.Node), "Parent Node"} }; static ACPI_EXDUMP_INFO AcpiExDumpNode[7] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpNode), NULL}, {ACPI_EXD_UINT16, ACPI_EXD_NSOFFSET (Flags), "Flags"}, {ACPI_EXD_UINT16, ACPI_EXD_NSOFFSET (OwnerId), "Owner Id"}, {ACPI_EXD_LIST, ACPI_EXD_NSOFFSET (Object), "Object List"}, {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Parent), "Parent"}, {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Child), "Child"}, {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Peer), "Peer"} }; /* Dispatch table, indexed by object type */ static ACPI_EXDUMP_INFO *AcpiExDumpInfo[] = { NULL, AcpiExDumpInteger, AcpiExDumpString, AcpiExDumpBuffer, AcpiExDumpPackage, NULL, AcpiExDumpDevice, AcpiExDumpEvent, AcpiExDumpMethod, AcpiExDumpMutex, AcpiExDumpRegion, AcpiExDumpPower, AcpiExDumpProcessor, AcpiExDumpThermal, AcpiExDumpBufferField, NULL, NULL, AcpiExDumpRegionField, AcpiExDumpBankField, AcpiExDumpIndexField, AcpiExDumpReference, NULL, NULL, AcpiExDumpNotify, AcpiExDumpAddressHandler, NULL, NULL, NULL, AcpiExDumpExtra, AcpiExDumpData }; /******************************************************************************* * * FUNCTION: AcpiExDumpObject * * PARAMETERS: ObjDesc - Descriptor to dump * Info - Info table corresponding to this object * type * * RETURN: None * * DESCRIPTION: Walk the info table for this object * ******************************************************************************/ static void AcpiExDumpObject ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_EXDUMP_INFO *Info) { UINT8 *Target; const char *Name; UINT8 Count; ACPI_OPERAND_OBJECT *Start; ACPI_OPERAND_OBJECT *Data = NULL; ACPI_OPERAND_OBJECT *Next; ACPI_NAMESPACE_NODE *Node; if (!Info) { AcpiOsPrintf ( "ExDumpObject: Display not implemented for object type %s\n", AcpiUtGetObjectTypeName (ObjDesc)); return; } /* First table entry must contain the table length (# of table entries) */ Count = Info->Offset; while (Count) { if (!ObjDesc) { return; } Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset); Name = Info->Name; switch (Info->Opcode) { case ACPI_EXD_INIT: break; case ACPI_EXD_TYPE: AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type", ObjDesc->Common.Type, AcpiUtGetObjectTypeName (ObjDesc)); break; case ACPI_EXD_UINT8: AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target); break; case ACPI_EXD_UINT16: AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target)); break; case ACPI_EXD_UINT32: AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target)); break; case ACPI_EXD_UINT64: AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value", ACPI_FORMAT_UINT64 (ACPI_GET64 (Target))); break; case ACPI_EXD_POINTER: case ACPI_EXD_ADDRESS: AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target)); break; case ACPI_EXD_STRING: AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); AcpiOsPrintf ("\n"); break; case ACPI_EXD_BUFFER: ACPI_DUMP_BUFFER ( ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length); break; case ACPI_EXD_PACKAGE: /* Dump the package contents */ AcpiOsPrintf ("\nPackage Contents:\n"); AcpiExDumpPackageObj (ObjDesc, 0, 0); break; case ACPI_EXD_FIELD: AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon); break; case ACPI_EXD_REFERENCE: AcpiExOutString ("Class Name", AcpiUtGetReferenceName (ObjDesc)); AcpiExDumpReferenceObj (ObjDesc); break; case ACPI_EXD_LIST: Start = *ACPI_CAST_PTR (void *, Target); Next = Start; AcpiOsPrintf ("%20s : %p ", Name, Next); if (Next) { AcpiOsPrintf ("%s (Type %2.2X)", AcpiUtGetObjectTypeName (Next), Next->Common.Type); while (Next->Common.NextObject) { if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) && !Data) { Data = Next; } Next = Next->Common.NextObject; AcpiOsPrintf ("->%p(%s %2.2X)", Next, AcpiUtGetObjectTypeName (Next), Next->Common.Type); if ((Next == Start) || (Next == Data)) { AcpiOsPrintf ( "\n**** Error: Object list appears to be circular linked"); break; } } } else { AcpiOsPrintf ("- No attached objects"); } AcpiOsPrintf ("\n"); break; case ACPI_EXD_HDLR_LIST: Start = *ACPI_CAST_PTR (void *, Target); Next = Start; AcpiOsPrintf ("%20s : %p", Name, Next); if (Next) { AcpiOsPrintf ("(%s %2.2X)", AcpiUtGetObjectTypeName (Next), Next->AddressSpace.SpaceId); while (Next->AddressSpace.Next) { if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) && !Data) { Data = Next; } Next = Next->AddressSpace.Next; AcpiOsPrintf ("->%p(%s %2.2X)", Next, AcpiUtGetObjectTypeName (Next), Next->AddressSpace.SpaceId); if ((Next == Start) || (Next == Data)) { AcpiOsPrintf ( "\n**** Error: Handler list appears to be circular linked"); break; } } } AcpiOsPrintf ("\n"); break; case ACPI_EXD_RGN_LIST: Start = *ACPI_CAST_PTR (void *, Target); Next = Start; AcpiOsPrintf ("%20s : %p", Name, Next); if (Next) { AcpiOsPrintf ("(%s %2.2X)", AcpiUtGetObjectTypeName (Next), Next->Common.Type); while (Next->Region.Next) { if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) && !Data) { Data = Next; } Next = Next->Region.Next; AcpiOsPrintf ("->%p(%s %2.2X)", Next, AcpiUtGetObjectTypeName (Next), Next->Common.Type); if ((Next == Start) || (Next == Data)) { AcpiOsPrintf ( "\n**** Error: Region list appears to be circular linked"); break; } } } AcpiOsPrintf ("\n"); break; case ACPI_EXD_NODE: Node = *ACPI_CAST_PTR (ACPI_NAMESPACE_NODE *, Target); AcpiOsPrintf ("%20s : %p", Name, Node); if (Node) { AcpiOsPrintf (" [%4.4s]", Node->Name.Ascii); } AcpiOsPrintf ("\n"); break; default: AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n", Info->Opcode); return; } Info++; Count--; } } /******************************************************************************* * * FUNCTION: AcpiExDumpOperand * * PARAMETERS: *ObjDesc - Pointer to entry to be dumped * Depth - Current nesting depth * * RETURN: None * * DESCRIPTION: Dump an operand object * ******************************************************************************/ void AcpiExDumpOperand ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 Depth) { UINT32 Length; UINT32 Index; ACPI_FUNCTION_NAME (ExDumpOperand); /* Check if debug output enabled */ if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_EXEC, _COMPONENT)) { return; } if (!ObjDesc) { /* This could be a null element of a package */ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n")); return; } if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc)); ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC); return; } if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p is not a node or operand object: [%s]\n", ObjDesc, AcpiUtGetDescriptorName (ObjDesc))); ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT)); return; } /* ObjDesc is a valid object */ if (Depth > 0) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p Refs=%u ", Depth, " ", Depth, ObjDesc, ObjDesc->Common.ReferenceCount)); } else { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Refs=%u ", ObjDesc, ObjDesc->Common.ReferenceCount)); } /* Decode object type */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_LOCAL_REFERENCE: AcpiOsPrintf ("Reference: [%s] ", AcpiUtGetReferenceName (ObjDesc)); switch (ObjDesc->Reference.Class) { case ACPI_REFCLASS_DEBUG: AcpiOsPrintf ("\n"); break; case ACPI_REFCLASS_INDEX: AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object); break; case ACPI_REFCLASS_TABLE: AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value); break; case ACPI_REFCLASS_REFOF: AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object, AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *) ObjDesc->Reference.Object)->Common.Type)); break; case ACPI_REFCLASS_NAME: AcpiUtRepairName (ObjDesc->Reference.Node->Name.Ascii); AcpiOsPrintf ("- [%4.4s] (Node %p)\n", ObjDesc->Reference.Node->Name.Ascii, ObjDesc->Reference.Node); break; case ACPI_REFCLASS_ARG: case ACPI_REFCLASS_LOCAL: AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value); break; default: /* Unknown reference class */ AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class); break; } break; case ACPI_TYPE_BUFFER: AcpiOsPrintf ("Buffer length %.2X @ %p\n", ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer); /* Debug only -- dump the buffer contents */ if (ObjDesc->Buffer.Pointer) { Length = ObjDesc->Buffer.Length; if (Length > 128) { Length = 128; } AcpiOsPrintf ( "Buffer Contents: (displaying length 0x%.2X)\n", Length); ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length); } break; case ACPI_TYPE_INTEGER: AcpiOsPrintf ("Integer %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); break; case ACPI_TYPE_PACKAGE: AcpiOsPrintf ("Package [Len %X] ElementArray %p\n", ObjDesc->Package.Count, ObjDesc->Package.Elements); /* * If elements exist, package element pointer is valid, * and debug_level exceeds 1, dump package's elements. */ if (ObjDesc->Package.Count && ObjDesc->Package.Elements && AcpiDbgLevel > 1) { for (Index = 0; Index < ObjDesc->Package.Count; Index++) { AcpiExDumpOperand ( ObjDesc->Package.Elements[Index], Depth + 1); } } break; case ACPI_TYPE_REGION: AcpiOsPrintf ("Region %s (%X)", AcpiUtGetRegionName (ObjDesc->Region.SpaceId), ObjDesc->Region.SpaceId); /* * If the address and length have not been evaluated, * don't print them. */ if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID)) { AcpiOsPrintf ("\n"); } else { AcpiOsPrintf (" base %8.8X%8.8X Length %X\n", ACPI_FORMAT_UINT64 (ObjDesc->Region.Address), ObjDesc->Region.Length); } break; case ACPI_TYPE_STRING: AcpiOsPrintf ("String length %X @ %p ", ObjDesc->String.Length, ObjDesc->String.Pointer); AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); AcpiOsPrintf ("\n"); break; case ACPI_TYPE_LOCAL_BANK_FIELD: AcpiOsPrintf ("BankField\n"); break; case ACPI_TYPE_LOCAL_REGION_FIELD: AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at " "byte=%X bit=%X of below:\n", ObjDesc->Field.BitLength, ObjDesc->Field.AccessByteWidth, ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK, ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK, ObjDesc->Field.BaseByteOffset, ObjDesc->Field.StartFieldBitOffset); AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth + 1); break; case ACPI_TYPE_LOCAL_INDEX_FIELD: AcpiOsPrintf ("IndexField\n"); break; case ACPI_TYPE_BUFFER_FIELD: AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n", ObjDesc->BufferField.BitLength, ObjDesc->BufferField.BaseByteOffset, ObjDesc->BufferField.StartFieldBitOffset); if (!ObjDesc->BufferField.BufferObj) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n")); } else if ((ObjDesc->BufferField.BufferObj)->Common.Type != ACPI_TYPE_BUFFER) { AcpiOsPrintf ("*not a Buffer*\n"); } else { AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth + 1); } break; case ACPI_TYPE_EVENT: AcpiOsPrintf ("Event\n"); break; case ACPI_TYPE_METHOD: AcpiOsPrintf ("Method(%X) @ %p:%X\n", ObjDesc->Method.ParamCount, ObjDesc->Method.AmlStart, ObjDesc->Method.AmlLength); break; case ACPI_TYPE_MUTEX: AcpiOsPrintf ("Mutex\n"); break; case ACPI_TYPE_DEVICE: AcpiOsPrintf ("Device\n"); break; case ACPI_TYPE_POWER: AcpiOsPrintf ("Power\n"); break; case ACPI_TYPE_PROCESSOR: AcpiOsPrintf ("Processor\n"); break; case ACPI_TYPE_THERMAL: AcpiOsPrintf ("Thermal\n"); break; default: /* Unknown Type */ AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type); break; } return; } /******************************************************************************* * * FUNCTION: AcpiExDumpOperands * * PARAMETERS: Operands - A list of Operand objects * OpcodeName - AML opcode name * NumOperands - Operand count for this opcode * * DESCRIPTION: Dump the operands associated with the opcode * ******************************************************************************/ void AcpiExDumpOperands ( ACPI_OPERAND_OBJECT **Operands, const char *OpcodeName, UINT32 NumOperands) { ACPI_FUNCTION_TRACE (ExDumpOperands); if (!OpcodeName) { OpcodeName = "UNKNOWN"; } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "**** Start operand dump for opcode [%s], %u operands\n", OpcodeName, NumOperands)); if (NumOperands == 0) { NumOperands = 1; } /* Dump the individual operands */ while (NumOperands) { AcpiExDumpOperand (*Operands, 0); Operands++; NumOperands--; } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "**** End operand dump for [%s]\n", OpcodeName)); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiExOut* functions * * PARAMETERS: Title - Descriptive text * Value - Value to be displayed * * DESCRIPTION: Object dump output formatting functions. These functions * reduce the number of format strings required and keeps them * all in one place for easy modification. * ******************************************************************************/ static void AcpiExOutString ( const char *Title, const char *Value) { AcpiOsPrintf ("%20s : %s\n", Title, Value); } static void AcpiExOutPointer ( const char *Title, const void *Value) { AcpiOsPrintf ("%20s : %p\n", Title, Value); } /******************************************************************************* * * FUNCTION: AcpiExDumpNamespaceNode * * PARAMETERS: Node - Descriptor to dump * Flags - Force display if TRUE * * DESCRIPTION: Dumps the members of the given.Node * ******************************************************************************/ void AcpiExDumpNamespaceNode ( ACPI_NAMESPACE_NODE *Node, UINT32 Flags) { ACPI_FUNCTION_ENTRY (); if (!Flags) { /* Check if debug output enabled */ if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT)) { return; } } AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node)); AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type", Node->Type, AcpiUtGetTypeName (Node->Type)); AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node), AcpiExDumpNode); } /******************************************************************************* * * FUNCTION: AcpiExDumpReferenceObj * * PARAMETERS: Object - Descriptor to dump * * DESCRIPTION: Dumps a reference object * ******************************************************************************/ static void AcpiExDumpReferenceObj ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_BUFFER RetBuf; ACPI_STATUS Status; RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER; if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME) { AcpiOsPrintf (" %p ", ObjDesc->Reference.Node); Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node, &RetBuf, TRUE); if (ACPI_FAILURE (Status)) { AcpiOsPrintf (" Could not convert name to pathname: %s\n", AcpiFormatException (Status)); } else { AcpiOsPrintf ("%s: %s\n", AcpiUtGetTypeName (ObjDesc->Reference.Node->Type), (char *) RetBuf.Pointer); ACPI_FREE (RetBuf.Pointer); } } else if (ObjDesc->Reference.Object) { if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND) { AcpiOsPrintf ("%22s %p", "Target :", ObjDesc->Reference.Object); if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE) { AcpiOsPrintf (" Table Index: %X\n", ObjDesc->Reference.Value); } else { AcpiOsPrintf (" [%s]\n", AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *) ObjDesc->Reference.Object)->Common.Type)); } } else { AcpiOsPrintf (" Target: %p\n", ObjDesc->Reference.Object); } } } /******************************************************************************* * * FUNCTION: AcpiExDumpPackageObj * * PARAMETERS: ObjDesc - Descriptor to dump * Level - Indentation Level * Index - Package index for this object * * DESCRIPTION: Dumps the elements of the package * ******************************************************************************/ static void AcpiExDumpPackageObj ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 Level, UINT32 Index) { UINT32 i; /* Indentation and index output */ if (Level > 0) { for (i = 0; i < Level; i++) { AcpiOsPrintf (" "); } AcpiOsPrintf ("[%.2d] ", Index); } AcpiOsPrintf ("%p ", ObjDesc); /* Null package elements are allowed */ if (!ObjDesc) { AcpiOsPrintf ("[Null Object]\n"); return; } /* Packages may only contain a few object types */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_INTEGER: AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); break; case ACPI_TYPE_STRING: AcpiOsPrintf ("[String] Value: "); AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); AcpiOsPrintf ("\n"); break; case ACPI_TYPE_BUFFER: AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length); if (ObjDesc->Buffer.Length) { AcpiUtDebugDumpBuffer ( ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer), ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT); } else { AcpiOsPrintf ("\n"); } break; case ACPI_TYPE_PACKAGE: AcpiOsPrintf ("[Package] Contains %u Elements:\n", ObjDesc->Package.Count); for (i = 0; i < ObjDesc->Package.Count; i++) { AcpiExDumpPackageObj ( ObjDesc->Package.Elements[i], Level + 1, i); } break; case ACPI_TYPE_LOCAL_REFERENCE: AcpiOsPrintf ("[Object Reference] Class [%s]", AcpiUtGetReferenceName (ObjDesc)); AcpiExDumpReferenceObj (ObjDesc); break; default: AcpiOsPrintf ("[%s] Type: %2.2X\n", AcpiUtGetTypeName (ObjDesc->Common.Type), ObjDesc->Common.Type); break; } } /******************************************************************************* * * FUNCTION: AcpiExDumpObjectDescriptor * * PARAMETERS: ObjDesc - Descriptor to dump * Flags - Force display if TRUE * * DESCRIPTION: Dumps the members of the object descriptor given. * ******************************************************************************/ void AcpiExDumpObjectDescriptor ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 Flags) { ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor); if (!ObjDesc) { return_VOID; } if (!Flags) { /* Check if debug output enabled */ if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT)) { return_VOID; } } if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED) { AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags); ObjDesc = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object; if (!ObjDesc) { return_VOID; } AcpiOsPrintf ("\nAttached Object %p", ObjDesc); if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED) { AcpiOsPrintf (" - Namespace Node"); } AcpiOsPrintf (":\n"); goto DumpObject; } if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) { AcpiOsPrintf ( "%p is not an ACPI operand object: [%s]\n", ObjDesc, AcpiUtGetDescriptorName (ObjDesc)); return_VOID; } /* Validate the object type */ if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX) { AcpiOsPrintf ("Not a known object type: %2.2X\n", ObjDesc->Common.Type); return_VOID; } DumpObject: if (!ObjDesc) { return_VOID; } /* Common Fields */ AcpiExDumpObject (ObjDesc, AcpiExDumpCommon); /* Object-specific fields */ AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]); if (ObjDesc->Common.Type == ACPI_TYPE_REGION) { ObjDesc = ObjDesc->Common.NextObject; if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX) { AcpiOsPrintf ( "Secondary object is not a known object type: %2.2X\n", ObjDesc->Common.Type); return_VOID; } AcpiOsPrintf ("\nExtra attached Object (%p):\n", ObjDesc); AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]); } return_VOID; } #endif src/acpica/source/components/executer/exfield.c000066400000000000000000000527121465205512700222000ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exfield - AML execution - FieldUnit read/write * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdispat.h" #include "acinterp.h" #include "amlcode.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exfield") /* * This table maps the various Attrib protocols to the byte transfer * length. Used for the generic serial bus. */ #define ACPI_INVALID_PROTOCOL_ID 0x80 #define ACPI_MAX_PROTOCOL_ID 0x0F static const UINT8 AcpiProtocolLengths[] = { ACPI_INVALID_PROTOCOL_ID, /* 0 - reserved */ ACPI_INVALID_PROTOCOL_ID, /* 1 - reserved */ 0x00, /* 2 - ATTRIB_QUICK */ ACPI_INVALID_PROTOCOL_ID, /* 3 - reserved */ 0x01, /* 4 - ATTRIB_SEND_RECEIVE */ ACPI_INVALID_PROTOCOL_ID, /* 5 - reserved */ 0x01, /* 6 - ATTRIB_BYTE */ ACPI_INVALID_PROTOCOL_ID, /* 7 - reserved */ 0x02, /* 8 - ATTRIB_WORD */ ACPI_INVALID_PROTOCOL_ID, /* 9 - reserved */ 0xFF, /* A - ATTRIB_BLOCK */ 0xFF, /* B - ATTRIB_BYTES */ 0x02, /* C - ATTRIB_PROCESS_CALL */ 0xFF, /* D - ATTRIB_BLOCK_PROCESS_CALL */ 0xFF, /* E - ATTRIB_RAW_BYTES */ 0xFF /* F - ATTRIB_RAW_PROCESS_BYTES */ }; #define PCC_MASTER_SUBSPACE 3 /* * The following macros determine a given offset is a COMD field. * According to the specification, generic subspaces (types 0-2) contains a * 2-byte COMD field at offset 4 and master subspaces (type 3) contains a 4-byte * COMD field starting at offset 12. */ #define GENERIC_SUBSPACE_COMMAND(a) (4 == a || a == 5) #define MASTER_SUBSPACE_COMMAND(a) (12 <= a && a <= 15) /******************************************************************************* * * FUNCTION: AcpiExGetProtocolBufferLength * * PARAMETERS: ProtocolId - The type of the protocol indicated by region * field access attributes * ReturnLength - Where the protocol byte transfer length is * returned * * RETURN: Status and decoded byte transfer length * * DESCRIPTION: This routine returns the length of the GenericSerialBus * protocol bytes * ******************************************************************************/ ACPI_STATUS AcpiExGetProtocolBufferLength ( UINT32 ProtocolId, UINT32 *ReturnLength) { if ((ProtocolId > ACPI_MAX_PROTOCOL_ID) || (AcpiProtocolLengths[ProtocolId] == ACPI_INVALID_PROTOCOL_ID)) { ACPI_ERROR ((AE_INFO, "Invalid Field/AccessAs protocol ID: 0x%4.4X", ProtocolId)); return (AE_AML_PROTOCOL); } *ReturnLength = AcpiProtocolLengths[ProtocolId]; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExReadDataFromField * * PARAMETERS: WalkState - Current execution state * ObjDesc - The named field * RetBufferDesc - Where the return data object is stored * * RETURN: Status * * DESCRIPTION: Read from a named field. Returns either an Integer or a * Buffer, depending on the size of the field and whether if a * field is created by the CreateField() operator. * ******************************************************************************/ ACPI_STATUS AcpiExReadDataFromField ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **RetBufferDesc) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *BufferDesc; void *Buffer; UINT32 BufferLength; ACPI_FUNCTION_TRACE_PTR (ExReadDataFromField, ObjDesc); /* Parameter validation */ if (!ObjDesc) { return_ACPI_STATUS (AE_AML_NO_OPERAND); } if (!RetBufferDesc) { return_ACPI_STATUS (AE_BAD_PARAMETER); } if (ObjDesc->Common.Type == ACPI_TYPE_BUFFER_FIELD) { /* * If the BufferField arguments have not been previously evaluated, * evaluate them now and save the results. */ if (!(ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)) { Status = AcpiDsGetBufferFieldArguments (ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } } else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) && (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS || ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS || ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI || ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_RT || ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_FIXED_HARDWARE)) { /* SMBus, GSBus, IPMI serial */ Status = AcpiExReadSerialBus (ObjDesc, RetBufferDesc); return_ACPI_STATUS (Status); } /* * Allocate a buffer for the contents of the field. * * If the field is larger than the current integer width, create * a BUFFER to hold it. Otherwise, use an INTEGER. This allows * the use of arithmetic operators on the returned value if the * field size is equal or smaller than an Integer. * * However, all buffer fields created by CreateField operator needs to * remain as a buffer to match other AML interpreter implementations. * * Note: Field.length is in bits. */ BufferLength = (ACPI_SIZE) ACPI_ROUND_BITS_UP_TO_BYTES ( ObjDesc->Field.BitLength); if (BufferLength > AcpiGbl_IntegerByteWidth || (ObjDesc->Common.Type == ACPI_TYPE_BUFFER_FIELD && ObjDesc->BufferField.IsCreateField)) { /* Field is too large for an Integer, create a Buffer instead */ BufferDesc = AcpiUtCreateBufferObject (BufferLength); if (!BufferDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } Buffer = BufferDesc->Buffer.Pointer; } else { /* Field will fit within an Integer (normal case) */ BufferDesc = AcpiUtCreateIntegerObject ((UINT64) 0); if (!BufferDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } BufferLength = AcpiGbl_IntegerByteWidth; Buffer = &BufferDesc->Integer.Value; } if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) && (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GPIO)) { /* General Purpose I/O */ Status = AcpiExReadGpio (ObjDesc, Buffer); goto Exit; } else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) && (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_COMM)) { /* * Reading from a PCC field unit does not require the handler because * it only requires reading from the InternalPccBuffer. */ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "PCC FieldRead bits %u\n", ObjDesc->Field.BitLength)); memcpy (Buffer, ObjDesc->Field.RegionObj->Field.InternalPccBuffer + ObjDesc->Field.BaseByteOffset, (ACPI_SIZE) ACPI_ROUND_BITS_UP_TO_BYTES ( ObjDesc->Field.BitLength)); *RetBufferDesc = BufferDesc; return AE_OK; } ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "FieldRead [TO]: Obj %p, Type %X, Buf %p, ByteLen %X\n", ObjDesc, ObjDesc->Common.Type, Buffer, BufferLength)); ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "FieldRead [FROM]: BitLen %X, BitOff %X, ByteOff %X\n", ObjDesc->CommonField.BitLength, ObjDesc->CommonField.StartFieldBitOffset, ObjDesc->CommonField.BaseByteOffset)); /* Lock entire transaction if requested */ AcpiExAcquireGlobalLock (ObjDesc->CommonField.FieldFlags); /* Read from the field */ Status = AcpiExExtractFromField (ObjDesc, Buffer, BufferLength); AcpiExReleaseGlobalLock (ObjDesc->CommonField.FieldFlags); Exit: if (ACPI_FAILURE (Status)) { AcpiUtRemoveReference (BufferDesc); } else { *RetBufferDesc = BufferDesc; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExWriteDataToField * * PARAMETERS: SourceDesc - Contains data to write * ObjDesc - The named field * ResultDesc - Where the return value is returned, if any * * RETURN: Status * * DESCRIPTION: Write to a named field * ******************************************************************************/ ACPI_STATUS AcpiExWriteDataToField ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ResultDesc) { ACPI_STATUS Status; UINT32 BufferLength; UINT32 DataLength; void *Buffer; ACPI_FUNCTION_TRACE_PTR (ExWriteDataToField, ObjDesc); /* Parameter validation */ if (!SourceDesc || !ObjDesc) { return_ACPI_STATUS (AE_AML_NO_OPERAND); } if (ObjDesc->Common.Type == ACPI_TYPE_BUFFER_FIELD) { /* * If the BufferField arguments have not been previously evaluated, * evaluate them now and save the results. */ if (!(ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)) { Status = AcpiDsGetBufferFieldArguments (ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } } else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) && (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GPIO)) { /* General Purpose I/O */ Status = AcpiExWriteGpio (SourceDesc, ObjDesc, ResultDesc); return_ACPI_STATUS (Status); } else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) && (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS || ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS || ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI || ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_RT || ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_FIXED_HARDWARE)) { /* SMBus, GSBus, IPMI serial */ Status = AcpiExWriteSerialBus (SourceDesc, ObjDesc, ResultDesc); return_ACPI_STATUS (Status); } else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) && (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_COMM)) { /* * According to the spec a write to the COMD field will invoke the * region handler. Otherwise, write to the PccInternal buffer. This * implementation will use the offsets specified rather than the name * of the field. This is considered safer because some firmware tools * are known to obfiscate named objects. */ DataLength = (ACPI_SIZE) ACPI_ROUND_BITS_UP_TO_BYTES ( ObjDesc->Field.BitLength); memcpy (ObjDesc->Field.RegionObj->Field.InternalPccBuffer + ObjDesc->Field.BaseByteOffset, SourceDesc->Buffer.Pointer, DataLength); if (MASTER_SUBSPACE_COMMAND (ObjDesc->Field.BaseByteOffset)) { /* Perform the write */ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "PCC COMD field has been written. Invoking PCC handler now.\n")); Status = AcpiExAccessRegion ( ObjDesc, 0, (UINT64 *) ObjDesc->Field.RegionObj->Field.InternalPccBuffer, ACPI_WRITE); return_ACPI_STATUS (Status); } return (AE_OK); } /* Get a pointer to the data to be written */ switch (SourceDesc->Common.Type) { case ACPI_TYPE_INTEGER: Buffer = &SourceDesc->Integer.Value; BufferLength = sizeof (SourceDesc->Integer.Value); break; case ACPI_TYPE_BUFFER: Buffer = SourceDesc->Buffer.Pointer; BufferLength = SourceDesc->Buffer.Length; break; case ACPI_TYPE_STRING: Buffer = SourceDesc->String.Pointer; BufferLength = SourceDesc->String.Length; break; default: return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "FieldWrite [FROM]: Obj %p (%s:%X), Buf %p, ByteLen %X\n", SourceDesc, AcpiUtGetTypeName (SourceDesc->Common.Type), SourceDesc->Common.Type, Buffer, BufferLength)); ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "FieldWrite [TO]: Obj %p (%s:%X), BitLen %X, BitOff %X, ByteOff %X\n", ObjDesc, AcpiUtGetTypeName (ObjDesc->Common.Type), ObjDesc->Common.Type, ObjDesc->CommonField.BitLength, ObjDesc->CommonField.StartFieldBitOffset, ObjDesc->CommonField.BaseByteOffset)); /* Lock entire transaction if requested */ AcpiExAcquireGlobalLock (ObjDesc->CommonField.FieldFlags); /* Write to the field */ Status = AcpiExInsertIntoField (ObjDesc, Buffer, BufferLength); AcpiExReleaseGlobalLock (ObjDesc->CommonField.FieldFlags); return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exfldio.c000066400000000000000000001145471465205512700222170ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exfldio - Aml Field I/O * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "amlcode.h" #include "acevents.h" #include "acdispat.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exfldio") /* Local prototypes */ static ACPI_STATUS AcpiExFieldDatumIo ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 FieldDatumByteOffset, UINT64 *Value, UINT32 ReadWrite); static BOOLEAN AcpiExRegisterOverflow ( ACPI_OPERAND_OBJECT *ObjDesc, UINT64 Value); static ACPI_STATUS AcpiExSetupRegion ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 FieldDatumByteOffset); /******************************************************************************* * * FUNCTION: AcpiExSetupRegion * * PARAMETERS: ObjDesc - Field to be read or written * FieldDatumByteOffset - Byte offset of this datum within the * parent field * * RETURN: Status * * DESCRIPTION: Common processing for AcpiExExtractFromField and * AcpiExInsertIntoField. Initialize the Region if necessary and * validate the request. * ******************************************************************************/ static ACPI_STATUS AcpiExSetupRegion ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 FieldDatumByteOffset) { ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT *RgnDesc; UINT8 SpaceId; ACPI_FUNCTION_TRACE_U32 (ExSetupRegion, FieldDatumByteOffset); RgnDesc = ObjDesc->CommonField.RegionObj; /* We must have a valid region */ if (RgnDesc->Common.Type != ACPI_TYPE_REGION) { ACPI_ERROR ((AE_INFO, "Needed Region, found type 0x%X (%s)", RgnDesc->Common.Type, AcpiUtGetObjectTypeName (RgnDesc))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } SpaceId = RgnDesc->Region.SpaceId; /* Validate the Space ID */ if (!AcpiIsValidSpaceId (SpaceId)) { ACPI_ERROR ((AE_INFO, "Invalid/unknown Address Space ID: 0x%2.2X", SpaceId)); return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID); } /* * If the Region Address and Length have not been previously evaluated, * evaluate them now and save the results. */ if (!(RgnDesc->Common.Flags & AOPOBJ_DATA_VALID)) { Status = AcpiDsGetRegionArguments (RgnDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } /* * Exit now for SMBus, GSBus or IPMI address space, it has a non-linear * address space and the request cannot be directly validated */ if (SpaceId == ACPI_ADR_SPACE_SMBUS || SpaceId == ACPI_ADR_SPACE_GSBUS || SpaceId == ACPI_ADR_SPACE_IPMI) { /* SMBus or IPMI has a non-linear address space */ return_ACPI_STATUS (AE_OK); } #ifdef ACPI_UNDER_DEVELOPMENT /* * If the Field access is AnyAcc, we can now compute the optimal * access (because we know the length of the parent region) */ if (!(ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)) { if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } #endif /* * Validate the request. The entire request from the byte offset for a * length of one field datum (access width) must fit within the region. * (Region length is specified in bytes) */ if (RgnDesc->Region.Length < (ObjDesc->CommonField.BaseByteOffset + FieldDatumByteOffset + ObjDesc->CommonField.AccessByteWidth)) { if (AcpiGbl_EnableInterpreterSlack) { /* * Slack mode only: We will go ahead and allow access to this * field if it is within the region length rounded up to the next * access width boundary. ACPI_SIZE cast for 64-bit compile. */ if (ACPI_ROUND_UP (RgnDesc->Region.Length, ObjDesc->CommonField.AccessByteWidth) >= ((ACPI_SIZE) ObjDesc->CommonField.BaseByteOffset + ObjDesc->CommonField.AccessByteWidth + FieldDatumByteOffset)) { return_ACPI_STATUS (AE_OK); } } if (RgnDesc->Region.Length < ObjDesc->CommonField.AccessByteWidth) { /* * This is the case where the AccessType (AccWord, etc.) is wider * than the region itself. For example, a region of length one * byte, and a field with Dword access specified. */ ACPI_ERROR ((AE_INFO, "Field [%4.4s] access width (%u bytes) " "too large for region [%4.4s] (length %u)", AcpiUtGetNodeName (ObjDesc->CommonField.Node), ObjDesc->CommonField.AccessByteWidth, AcpiUtGetNodeName (RgnDesc->Region.Node), RgnDesc->Region.Length)); } /* * Offset rounded up to next multiple of field width * exceeds region length, indicate an error */ ACPI_ERROR ((AE_INFO, "Field [%4.4s] Base+Offset+Width %u+%u+%u " "is beyond end of region [%4.4s] (length %u)", AcpiUtGetNodeName (ObjDesc->CommonField.Node), ObjDesc->CommonField.BaseByteOffset, FieldDatumByteOffset, ObjDesc->CommonField.AccessByteWidth, AcpiUtGetNodeName (RgnDesc->Region.Node), RgnDesc->Region.Length)); return_ACPI_STATUS (AE_AML_REGION_LIMIT); } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExAccessRegion * * PARAMETERS: ObjDesc - Field to be read * FieldDatumByteOffset - Byte offset of this datum within the * parent field * Value - Where to store value (must at least * 64 bits) * Function - Read or Write flag plus other region- * dependent flags * * RETURN: Status * * DESCRIPTION: Read or Write a single field datum to an Operation Region. * ******************************************************************************/ ACPI_STATUS AcpiExAccessRegion ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 FieldDatumByteOffset, UINT64 *Value, UINT32 Function) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *RgnDesc; UINT32 RegionOffset; ACPI_FUNCTION_TRACE (ExAccessRegion); /* * Ensure that the region operands are fully evaluated and verify * the validity of the request */ Status = AcpiExSetupRegion (ObjDesc, FieldDatumByteOffset); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * The physical address of this field datum is: * * 1) The base of the region, plus * 2) The base offset of the field, plus * 3) The current offset into the field */ RgnDesc = ObjDesc->CommonField.RegionObj; RegionOffset = ObjDesc->CommonField.BaseByteOffset + FieldDatumByteOffset; if ((Function & ACPI_IO_MASK) == ACPI_READ) { ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "[READ]")); } else { ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "[WRITE]")); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_BFIELD, " Region [%s:%X], Width %X, ByteBase %X, Offset %X at %8.8X%8.8X\n", AcpiUtGetRegionName (RgnDesc->Region.SpaceId), RgnDesc->Region.SpaceId, ObjDesc->CommonField.AccessByteWidth, ObjDesc->CommonField.BaseByteOffset, FieldDatumByteOffset, ACPI_FORMAT_UINT64 (RgnDesc->Region.Address + RegionOffset))); /* Invoke the appropriate AddressSpace/OpRegion handler */ Status = AcpiEvAddressSpaceDispatch (RgnDesc, ObjDesc, Function, RegionOffset, ACPI_MUL_8 (ObjDesc->CommonField.AccessByteWidth), Value); if (ACPI_FAILURE (Status)) { if (Status == AE_NOT_IMPLEMENTED) { ACPI_ERROR ((AE_INFO, "Region %s (ID=%u) not implemented", AcpiUtGetRegionName (RgnDesc->Region.SpaceId), RgnDesc->Region.SpaceId)); } else if (Status == AE_NOT_EXIST) { ACPI_ERROR ((AE_INFO, "Region %s (ID=%u) has no handler", AcpiUtGetRegionName (RgnDesc->Region.SpaceId), RgnDesc->Region.SpaceId)); } } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExRegisterOverflow * * PARAMETERS: ObjDesc - Register(Field) to be written * Value - Value to be stored * * RETURN: TRUE if value overflows the field, FALSE otherwise * * DESCRIPTION: Check if a value is out of range of the field being written. * Used to check if the values written to Index and Bank registers * are out of range. Normally, the value is simply truncated * to fit the field, but this case is most likely a serious * coding error in the ASL. * ******************************************************************************/ static BOOLEAN AcpiExRegisterOverflow ( ACPI_OPERAND_OBJECT *ObjDesc, UINT64 Value) { if (ObjDesc->CommonField.BitLength >= ACPI_INTEGER_BIT_SIZE) { /* * The field is large enough to hold the maximum integer, so we can * never overflow it. */ return (FALSE); } if (Value >= ((UINT64) 1 << ObjDesc->CommonField.BitLength)) { /* * The Value is larger than the maximum value that can fit into * the register. */ ACPI_ERROR ((AE_INFO, "Index value 0x%8.8X%8.8X overflows field width 0x%X", ACPI_FORMAT_UINT64 (Value), ObjDesc->CommonField.BitLength)); return (TRUE); } /* The Value will fit into the field with no truncation */ return (FALSE); } /******************************************************************************* * * FUNCTION: AcpiExFieldDatumIo * * PARAMETERS: ObjDesc - Field to be read * FieldDatumByteOffset - Byte offset of this datum within the * parent field * Value - Where to store value (must be 64 bits) * ReadWrite - Read or Write flag * * RETURN: Status * * DESCRIPTION: Read or Write a single datum of a field. The FieldType is * demultiplexed here to handle the different types of fields * (BufferField, RegionField, IndexField, BankField) * ******************************************************************************/ static ACPI_STATUS AcpiExFieldDatumIo ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 FieldDatumByteOffset, UINT64 *Value, UINT32 ReadWrite) { ACPI_STATUS Status; UINT64 LocalValue; ACPI_FUNCTION_TRACE_U32 (ExFieldDatumIo, FieldDatumByteOffset); if (ReadWrite == ACPI_READ) { if (!Value) { LocalValue = 0; /* To support reads without saving return value */ Value = &LocalValue; } /* Clear the entire return buffer first, [Very Important!] */ *Value = 0; } /* * The four types of fields are: * * BufferField - Read/write from/to a Buffer * RegionField - Read/write from/to a Operation Region. * BankField - Write to a Bank Register, then read/write from/to an * OperationRegion * IndexField - Write to an Index Register, then read/write from/to a * Data Register */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_BUFFER_FIELD: /* * If the BufferField arguments have not been previously evaluated, * evaluate them now and save the results. */ if (!(ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)) { Status = AcpiDsGetBufferFieldArguments (ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } if (ReadWrite == ACPI_READ) { /* * Copy the data from the source buffer. * Length is the field width in bytes. */ memcpy (Value, (ObjDesc->BufferField.BufferObj)->Buffer.Pointer + ObjDesc->BufferField.BaseByteOffset + FieldDatumByteOffset, ObjDesc->CommonField.AccessByteWidth); } else { /* * Copy the data to the target buffer. * Length is the field width in bytes. */ memcpy ((ObjDesc->BufferField.BufferObj)->Buffer.Pointer + ObjDesc->BufferField.BaseByteOffset + FieldDatumByteOffset, Value, ObjDesc->CommonField.AccessByteWidth); } Status = AE_OK; break; case ACPI_TYPE_LOCAL_BANK_FIELD: /* * Ensure that the BankValue is not beyond the capacity of * the register */ if (AcpiExRegisterOverflow (ObjDesc->BankField.BankObj, (UINT64) ObjDesc->BankField.Value)) { return_ACPI_STATUS (AE_AML_REGISTER_LIMIT); } /* * For BankFields, we must write the BankValue to the BankRegister * (itself a RegionField) before we can access the data. */ Status = AcpiExInsertIntoField (ObjDesc->BankField.BankObj, &ObjDesc->BankField.Value, sizeof (ObjDesc->BankField.Value)); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Now that the Bank has been selected, fall through to the * RegionField case and write the datum to the Operation Region */ ACPI_FALLTHROUGH; case ACPI_TYPE_LOCAL_REGION_FIELD: /* * For simple RegionFields, we just directly access the owning * Operation Region. */ Status = AcpiExAccessRegion ( ObjDesc, FieldDatumByteOffset, Value, ReadWrite); break; case ACPI_TYPE_LOCAL_INDEX_FIELD: /* * Ensure that the IndexValue is not beyond the capacity of * the register */ if (AcpiExRegisterOverflow (ObjDesc->IndexField.IndexObj, (UINT64) ObjDesc->IndexField.Value)) { return_ACPI_STATUS (AE_AML_REGISTER_LIMIT); } /* Write the index value to the IndexRegister (itself a RegionField) */ FieldDatumByteOffset += ObjDesc->IndexField.Value; ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Write to Index Register: Value %8.8X\n", FieldDatumByteOffset)); Status = AcpiExInsertIntoField (ObjDesc->IndexField.IndexObj, &FieldDatumByteOffset, sizeof (FieldDatumByteOffset)); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (ReadWrite == ACPI_READ) { /* Read the datum from the DataRegister */ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Read from Data Register\n")); Status = AcpiExExtractFromField ( ObjDesc->IndexField.DataObj, Value, sizeof (UINT64)); } else { /* Write the datum to the DataRegister */ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Write to Data Register: Value %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (*Value))); Status = AcpiExInsertIntoField ( ObjDesc->IndexField.DataObj, Value, sizeof (UINT64)); } break; default: ACPI_ERROR ((AE_INFO, "Wrong object type in field I/O %u", ObjDesc->Common.Type)); Status = AE_AML_INTERNAL; break; } if (ACPI_SUCCESS (Status)) { if (ReadWrite == ACPI_READ) { ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Value Read %8.8X%8.8X, Width %u\n", ACPI_FORMAT_UINT64 (*Value), ObjDesc->CommonField.AccessByteWidth)); } else { ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Value Written %8.8X%8.8X, Width %u\n", ACPI_FORMAT_UINT64 (*Value), ObjDesc->CommonField.AccessByteWidth)); } } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExWriteWithUpdateRule * * PARAMETERS: ObjDesc - Field to be written * Mask - bitmask within field datum * FieldValue - Value to write * FieldDatumByteOffset - Offset of datum within field * * RETURN: Status * * DESCRIPTION: Apply the field update rule to a field write * ******************************************************************************/ ACPI_STATUS AcpiExWriteWithUpdateRule ( ACPI_OPERAND_OBJECT *ObjDesc, UINT64 Mask, UINT64 FieldValue, UINT32 FieldDatumByteOffset) { ACPI_STATUS Status = AE_OK; UINT64 MergedValue; UINT64 CurrentValue; ACPI_FUNCTION_TRACE_U32 (ExWriteWithUpdateRule, Mask); /* Start with the new bits */ MergedValue = FieldValue; /* If the mask is all ones, we don't need to worry about the update rule */ if (Mask != ACPI_UINT64_MAX) { /* Decode the update rule */ switch (ObjDesc->CommonField.FieldFlags & AML_FIELD_UPDATE_RULE_MASK) { case AML_FIELD_UPDATE_PRESERVE: /* * Check if update rule needs to be applied (not if mask is all * ones) The left shift drops the bits we want to ignore. */ if ((~Mask << (ACPI_MUL_8 (sizeof (Mask)) - ACPI_MUL_8 (ObjDesc->CommonField.AccessByteWidth))) != 0) { /* * Read the current contents of the byte/word/dword containing * the field, and merge with the new field value. */ Status = AcpiExFieldDatumIo ( ObjDesc, FieldDatumByteOffset, &CurrentValue, ACPI_READ); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } MergedValue |= (CurrentValue & ~Mask); } break; case AML_FIELD_UPDATE_WRITE_AS_ONES: /* Set positions outside the field to all ones */ MergedValue |= ~Mask; break; case AML_FIELD_UPDATE_WRITE_AS_ZEROS: /* Set positions outside the field to all zeros */ MergedValue &= Mask; break; default: ACPI_ERROR ((AE_INFO, "Unknown UpdateRule value: 0x%X", (ObjDesc->CommonField.FieldFlags & AML_FIELD_UPDATE_RULE_MASK))); return_ACPI_STATUS (AE_AML_OPERAND_VALUE); } } ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Mask %8.8X%8.8X, DatumOffset %X, Width %X, " "Value %8.8X%8.8X, MergedValue %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Mask), FieldDatumByteOffset, ObjDesc->CommonField.AccessByteWidth, ACPI_FORMAT_UINT64 (FieldValue), ACPI_FORMAT_UINT64 (MergedValue))); /* Write the merged value */ Status = AcpiExFieldDatumIo ( ObjDesc, FieldDatumByteOffset, &MergedValue, ACPI_WRITE); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExExtractFromField * * PARAMETERS: ObjDesc - Field to be read * Buffer - Where to store the field data * BufferLength - Length of Buffer * * RETURN: Status * * DESCRIPTION: Retrieve the current value of the given field * ******************************************************************************/ ACPI_STATUS AcpiExExtractFromField ( ACPI_OPERAND_OBJECT *ObjDesc, void *Buffer, UINT32 BufferLength) { ACPI_STATUS Status; UINT64 RawDatum; UINT64 MergedDatum; UINT32 FieldOffset = 0; UINT32 BufferOffset = 0; UINT32 BufferTailBits; UINT32 DatumCount; UINT32 FieldDatumCount; UINT32 AccessBitWidth; UINT32 i; ACPI_FUNCTION_TRACE (ExExtractFromField); /* Validate target buffer and clear it */ if (BufferLength < ACPI_ROUND_BITS_UP_TO_BYTES (ObjDesc->CommonField.BitLength)) { ACPI_ERROR ((AE_INFO, "Field size %u (bits) is too large for buffer (%u)", ObjDesc->CommonField.BitLength, BufferLength)); return_ACPI_STATUS (AE_BUFFER_OVERFLOW); } memset (Buffer, 0, BufferLength); AccessBitWidth = ACPI_MUL_8 (ObjDesc->CommonField.AccessByteWidth); /* Handle the simple case here */ if ((ObjDesc->CommonField.StartFieldBitOffset == 0) && (ObjDesc->CommonField.BitLength == AccessBitWidth)) { if (BufferLength >= sizeof (UINT64)) { Status = AcpiExFieldDatumIo (ObjDesc, 0, Buffer, ACPI_READ); } else { /* Use RawDatum (UINT64) to handle buffers < 64 bits */ Status = AcpiExFieldDatumIo (ObjDesc, 0, &RawDatum, ACPI_READ); memcpy (Buffer, &RawDatum, BufferLength); } return_ACPI_STATUS (Status); } /* TBD: Move to common setup code */ /* Field algorithm is limited to sizeof(UINT64), truncate if needed */ if (ObjDesc->CommonField.AccessByteWidth > sizeof (UINT64)) { ObjDesc->CommonField.AccessByteWidth = sizeof (UINT64); AccessBitWidth = sizeof (UINT64) * 8; } /* Compute the number of datums (access width data items) */ DatumCount = ACPI_ROUND_UP_TO ( ObjDesc->CommonField.BitLength, AccessBitWidth); FieldDatumCount = ACPI_ROUND_UP_TO ( ObjDesc->CommonField.BitLength + ObjDesc->CommonField.StartFieldBitOffset, AccessBitWidth); /* Priming read from the field */ Status = AcpiExFieldDatumIo (ObjDesc, FieldOffset, &RawDatum, ACPI_READ); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } MergedDatum = RawDatum >> ObjDesc->CommonField.StartFieldBitOffset; /* Read the rest of the field */ for (i = 1; i < FieldDatumCount; i++) { /* Get next input datum from the field */ FieldOffset += ObjDesc->CommonField.AccessByteWidth; Status = AcpiExFieldDatumIo ( ObjDesc, FieldOffset, &RawDatum, ACPI_READ); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Merge with previous datum if necessary. * * Note: Before the shift, check if the shift value will be larger than * the integer size. If so, there is no need to perform the operation. * This avoids the differences in behavior between different compilers * concerning shift values larger than the target data width. */ if (AccessBitWidth - ObjDesc->CommonField.StartFieldBitOffset < ACPI_INTEGER_BIT_SIZE) { MergedDatum |= RawDatum << (AccessBitWidth - ObjDesc->CommonField.StartFieldBitOffset); } if (i == DatumCount) { break; } /* Write merged datum to target buffer */ memcpy (((char *) Buffer) + BufferOffset, &MergedDatum, ACPI_MIN(ObjDesc->CommonField.AccessByteWidth, BufferLength - BufferOffset)); BufferOffset += ObjDesc->CommonField.AccessByteWidth; MergedDatum = RawDatum >> ObjDesc->CommonField.StartFieldBitOffset; } /* Mask off any extra bits in the last datum */ BufferTailBits = ObjDesc->CommonField.BitLength % AccessBitWidth; if (BufferTailBits) { MergedDatum &= ACPI_MASK_BITS_ABOVE (BufferTailBits); } /* Write the last datum to the buffer */ memcpy (((char *) Buffer) + BufferOffset, &MergedDatum, ACPI_MIN(ObjDesc->CommonField.AccessByteWidth, BufferLength - BufferOffset)); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExInsertIntoField * * PARAMETERS: ObjDesc - Field to be written * Buffer - Data to be written * BufferLength - Length of Buffer * * RETURN: Status * * DESCRIPTION: Store the Buffer contents into the given field * ******************************************************************************/ ACPI_STATUS AcpiExInsertIntoField ( ACPI_OPERAND_OBJECT *ObjDesc, void *Buffer, UINT32 BufferLength) { void *NewBuffer; ACPI_STATUS Status; UINT64 Mask; UINT64 WidthMask; UINT64 MergedDatum; UINT64 RawDatum = 0; UINT32 FieldOffset = 0; UINT32 BufferOffset = 0; UINT32 BufferTailBits; UINT32 DatumCount; UINT32 FieldDatumCount; UINT32 AccessBitWidth; UINT32 RequiredLength; UINT32 i; ACPI_FUNCTION_TRACE (ExInsertIntoField); /* Validate input buffer */ NewBuffer = NULL; RequiredLength = ACPI_ROUND_BITS_UP_TO_BYTES ( ObjDesc->CommonField.BitLength); /* * We must have a buffer that is at least as long as the field * we are writing to. This is because individual fields are * indivisible and partial writes are not supported -- as per * the ACPI specification. */ if (BufferLength < RequiredLength) { /* We need to create a new buffer */ NewBuffer = ACPI_ALLOCATE_ZEROED (RequiredLength); if (!NewBuffer) { return_ACPI_STATUS (AE_NO_MEMORY); } /* * Copy the original data to the new buffer, starting * at Byte zero. All unused (upper) bytes of the * buffer will be 0. */ memcpy ((char *) NewBuffer, (char *) Buffer, BufferLength); Buffer = NewBuffer; BufferLength = RequiredLength; } /* TBD: Move to common setup code */ /* Algo is limited to sizeof(UINT64), so cut the AccessByteWidth */ if (ObjDesc->CommonField.AccessByteWidth > sizeof (UINT64)) { ObjDesc->CommonField.AccessByteWidth = sizeof (UINT64); } AccessBitWidth = ACPI_MUL_8 (ObjDesc->CommonField.AccessByteWidth); /* Create the bitmasks used for bit insertion */ WidthMask = ACPI_MASK_BITS_ABOVE_64 (AccessBitWidth); Mask = WidthMask & ACPI_MASK_BITS_BELOW (ObjDesc->CommonField.StartFieldBitOffset); /* Compute the number of datums (access width data items) */ DatumCount = ACPI_ROUND_UP_TO (ObjDesc->CommonField.BitLength, AccessBitWidth); FieldDatumCount = ACPI_ROUND_UP_TO (ObjDesc->CommonField.BitLength + ObjDesc->CommonField.StartFieldBitOffset, AccessBitWidth); /* Get initial Datum from the input buffer */ memcpy (&RawDatum, Buffer, ACPI_MIN(ObjDesc->CommonField.AccessByteWidth, BufferLength - BufferOffset)); MergedDatum = RawDatum << ObjDesc->CommonField.StartFieldBitOffset; /* Write the entire field */ for (i = 1; i < FieldDatumCount; i++) { /* Write merged datum to the target field */ MergedDatum &= Mask; Status = AcpiExWriteWithUpdateRule ( ObjDesc, Mask, MergedDatum, FieldOffset); if (ACPI_FAILURE (Status)) { goto Exit; } FieldOffset += ObjDesc->CommonField.AccessByteWidth; /* * Start new output datum by merging with previous input datum * if necessary. * * Note: Before the shift, check if the shift value will be larger than * the integer size. If so, there is no need to perform the operation. * This avoids the differences in behavior between different compilers * concerning shift values larger than the target data width. */ if ((AccessBitWidth - ObjDesc->CommonField.StartFieldBitOffset) < ACPI_INTEGER_BIT_SIZE) { MergedDatum = RawDatum >> (AccessBitWidth - ObjDesc->CommonField.StartFieldBitOffset); } else { MergedDatum = 0; } Mask = WidthMask; if (i == DatumCount) { break; } /* Get the next input datum from the buffer */ BufferOffset += ObjDesc->CommonField.AccessByteWidth; memcpy (&RawDatum, ((char *) Buffer) + BufferOffset, ACPI_MIN(ObjDesc->CommonField.AccessByteWidth, BufferLength - BufferOffset)); MergedDatum |= RawDatum << ObjDesc->CommonField.StartFieldBitOffset; } /* Mask off any extra bits in the last datum */ BufferTailBits = (ObjDesc->CommonField.BitLength + ObjDesc->CommonField.StartFieldBitOffset) % AccessBitWidth; if (BufferTailBits) { Mask &= ACPI_MASK_BITS_ABOVE (BufferTailBits); } /* Write the last datum to the field */ MergedDatum &= Mask; Status = AcpiExWriteWithUpdateRule ( ObjDesc, Mask, MergedDatum, FieldOffset); Exit: /* Free temporary buffer if we used one */ if (NewBuffer) { ACPI_FREE (NewBuffer); } return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exmisc.c000066400000000000000000000530001465205512700220370ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exmisc - ACPI AML (p-code) execution - specific opcodes * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "amlcode.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exmisc") /******************************************************************************* * * FUNCTION: AcpiExGetObjectReference * * PARAMETERS: ObjDesc - Create a reference to this object * ReturnDesc - Where to store the reference * WalkState - Current state * * RETURN: Status * * DESCRIPTION: Obtain and return a "reference" to the target object * Common code for the RefOfOp and the CondRefOfOp. * ******************************************************************************/ ACPI_STATUS AcpiExGetObjectReference ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ReturnDesc, ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT *ReferenceObj; ACPI_OPERAND_OBJECT *ReferencedObj; ACPI_FUNCTION_TRACE_PTR (ExGetObjectReference, ObjDesc); *ReturnDesc = NULL; switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) { case ACPI_DESC_TYPE_OPERAND: if (ObjDesc->Common.Type != ACPI_TYPE_LOCAL_REFERENCE) { return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* * Must be a reference to a Local or Arg */ switch (ObjDesc->Reference.Class) { case ACPI_REFCLASS_LOCAL: case ACPI_REFCLASS_ARG: case ACPI_REFCLASS_DEBUG: /* The referenced object is the pseudo-node for the local/arg */ ReferencedObj = ObjDesc->Reference.Object; break; default: ACPI_ERROR ((AE_INFO, "Invalid Reference Class 0x%2.2X", ObjDesc->Reference.Class)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } break; case ACPI_DESC_TYPE_NAMED: /* * A named reference that has already been resolved to a Node */ ReferencedObj = ObjDesc; break; default: ACPI_ERROR ((AE_INFO, "Invalid descriptor type 0x%X", ACPI_GET_DESCRIPTOR_TYPE (ObjDesc))); return_ACPI_STATUS (AE_TYPE); } /* Create a new reference object */ ReferenceObj = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_REFERENCE); if (!ReferenceObj) { return_ACPI_STATUS (AE_NO_MEMORY); } ReferenceObj->Reference.Class = ACPI_REFCLASS_REFOF; ReferenceObj->Reference.Object = ReferencedObj; *ReturnDesc = ReferenceObj; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Object %p Type [%s], returning Reference %p\n", ObjDesc, AcpiUtGetObjectTypeName (ObjDesc), *ReturnDesc)); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExDoMathOp * * PARAMETERS: Opcode - AML opcode * Integer0 - Integer operand #0 * Integer1 - Integer operand #1 * * RETURN: Integer result of the operation * * DESCRIPTION: Execute a math AML opcode. The purpose of having all of the * math functions here is to prevent a lot of pointer dereferencing * to obtain the operands. * ******************************************************************************/ UINT64 AcpiExDoMathOp ( UINT16 Opcode, UINT64 Integer0, UINT64 Integer1) { ACPI_FUNCTION_ENTRY (); switch (Opcode) { case AML_ADD_OP: /* Add (Integer0, Integer1, Result) */ return (Integer0 + Integer1); case AML_BIT_AND_OP: /* And (Integer0, Integer1, Result) */ return (Integer0 & Integer1); case AML_BIT_NAND_OP: /* NAnd (Integer0, Integer1, Result) */ return (~(Integer0 & Integer1)); case AML_BIT_OR_OP: /* Or (Integer0, Integer1, Result) */ return (Integer0 | Integer1); case AML_BIT_NOR_OP: /* NOr (Integer0, Integer1, Result) */ return (~(Integer0 | Integer1)); case AML_BIT_XOR_OP: /* XOr (Integer0, Integer1, Result) */ return (Integer0 ^ Integer1); case AML_MULTIPLY_OP: /* Multiply (Integer0, Integer1, Result) */ return (Integer0 * Integer1); case AML_SHIFT_LEFT_OP: /* ShiftLeft (Operand, ShiftCount, Result)*/ /* * We need to check if the shiftcount is larger than the integer bit * width since the behavior of this is not well-defined in the C language. */ if (Integer1 >= AcpiGbl_IntegerBitWidth) { return (0); } return (Integer0 << Integer1); case AML_SHIFT_RIGHT_OP: /* ShiftRight (Operand, ShiftCount, Result) */ /* * We need to check if the shiftcount is larger than the integer bit * width since the behavior of this is not well-defined in the C language. */ if (Integer1 >= AcpiGbl_IntegerBitWidth) { return (0); } return (Integer0 >> Integer1); case AML_SUBTRACT_OP: /* Subtract (Integer0, Integer1, Result) */ return (Integer0 - Integer1); default: return (0); } } /******************************************************************************* * * FUNCTION: AcpiExDoLogicalNumericOp * * PARAMETERS: Opcode - AML opcode * Integer0 - Integer operand #0 * Integer1 - Integer operand #1 * LogicalResult - TRUE/FALSE result of the operation * * RETURN: Status * * DESCRIPTION: Execute a logical "Numeric" AML opcode. For these Numeric * operators (LAnd and LOr), both operands must be integers. * * Note: cleanest machine code seems to be produced by the code * below, rather than using statements of the form: * Result = (Integer0 && Integer1); * ******************************************************************************/ ACPI_STATUS AcpiExDoLogicalNumericOp ( UINT16 Opcode, UINT64 Integer0, UINT64 Integer1, BOOLEAN *LogicalResult) { ACPI_STATUS Status = AE_OK; BOOLEAN LocalResult = FALSE; ACPI_FUNCTION_TRACE (ExDoLogicalNumericOp); switch (Opcode) { case AML_LOGICAL_AND_OP: /* LAnd (Integer0, Integer1) */ if (Integer0 && Integer1) { LocalResult = TRUE; } break; case AML_LOGICAL_OR_OP: /* LOr (Integer0, Integer1) */ if (Integer0 || Integer1) { LocalResult = TRUE; } break; default: ACPI_ERROR ((AE_INFO, "Invalid numeric logical opcode: %X", Opcode)); Status = AE_AML_INTERNAL; break; } /* Return the logical result and status */ *LogicalResult = LocalResult; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExDoLogicalOp * * PARAMETERS: Opcode - AML opcode * Operand0 - operand #0 * Operand1 - operand #1 * LogicalResult - TRUE/FALSE result of the operation * * RETURN: Status * * DESCRIPTION: Execute a logical AML opcode. The purpose of having all of the * functions here is to prevent a lot of pointer dereferencing * to obtain the operands and to simplify the generation of the * logical value. For the Numeric operators (LAnd and LOr), both * operands must be integers. For the other logical operators, * operands can be any combination of Integer/String/Buffer. The * first operand determines the type to which the second operand * will be converted. * * Note: cleanest machine code seems to be produced by the code * below, rather than using statements of the form: * Result = (Operand0 == Operand1); * ******************************************************************************/ ACPI_STATUS AcpiExDoLogicalOp ( UINT16 Opcode, ACPI_OPERAND_OBJECT *Operand0, ACPI_OPERAND_OBJECT *Operand1, BOOLEAN *LogicalResult) { ACPI_OPERAND_OBJECT *LocalOperand1 = Operand1; UINT64 Integer0; UINT64 Integer1; UINT32 Length0; UINT32 Length1; ACPI_STATUS Status = AE_OK; BOOLEAN LocalResult = FALSE; int Compare; ACPI_FUNCTION_TRACE (ExDoLogicalOp); /* * Convert the second operand if necessary. The first operand * determines the type of the second operand, (See the Data Types * section of the ACPI 3.0+ specification.) Both object types are * guaranteed to be either Integer/String/Buffer by the operand * resolution mechanism. */ switch (Operand0->Common.Type) { case ACPI_TYPE_INTEGER: Status = AcpiExConvertToInteger (Operand1, &LocalOperand1, ACPI_IMPLICIT_CONVERSION); break; case ACPI_TYPE_STRING: Status = AcpiExConvertToString ( Operand1, &LocalOperand1, ACPI_IMPLICIT_CONVERT_HEX); break; case ACPI_TYPE_BUFFER: Status = AcpiExConvertToBuffer (Operand1, &LocalOperand1); break; default: ACPI_ERROR ((AE_INFO, "Invalid object type for logical operator: %X", Operand0->Common.Type)); Status = AE_AML_INTERNAL; break; } if (ACPI_FAILURE (Status)) { goto Cleanup; } /* * Two cases: 1) Both Integers, 2) Both Strings or Buffers */ if (Operand0->Common.Type == ACPI_TYPE_INTEGER) { /* * 1) Both operands are of type integer * Note: LocalOperand1 may have changed above */ Integer0 = Operand0->Integer.Value; Integer1 = LocalOperand1->Integer.Value; switch (Opcode) { case AML_LOGICAL_EQUAL_OP: /* LEqual (Operand0, Operand1) */ if (Integer0 == Integer1) { LocalResult = TRUE; } break; case AML_LOGICAL_GREATER_OP: /* LGreater (Operand0, Operand1) */ if (Integer0 > Integer1) { LocalResult = TRUE; } break; case AML_LOGICAL_LESS_OP: /* LLess (Operand0, Operand1) */ if (Integer0 < Integer1) { LocalResult = TRUE; } break; default: ACPI_ERROR ((AE_INFO, "Invalid comparison opcode: %X", Opcode)); Status = AE_AML_INTERNAL; break; } } else { /* * 2) Both operands are Strings or both are Buffers * Note: Code below takes advantage of common Buffer/String * object fields. LocalOperand1 may have changed above. Use * memcmp to handle nulls in buffers. */ Length0 = Operand0->Buffer.Length; Length1 = LocalOperand1->Buffer.Length; /* Lexicographic compare: compare the data bytes */ Compare = memcmp (Operand0->Buffer.Pointer, LocalOperand1->Buffer.Pointer, (Length0 > Length1) ? Length1 : Length0); switch (Opcode) { case AML_LOGICAL_EQUAL_OP: /* LEqual (Operand0, Operand1) */ /* Length and all bytes must be equal */ if ((Length0 == Length1) && (Compare == 0)) { /* Length and all bytes match ==> TRUE */ LocalResult = TRUE; } break; case AML_LOGICAL_GREATER_OP: /* LGreater (Operand0, Operand1) */ if (Compare > 0) { LocalResult = TRUE; goto Cleanup; /* TRUE */ } if (Compare < 0) { goto Cleanup; /* FALSE */ } /* Bytes match (to shortest length), compare lengths */ if (Length0 > Length1) { LocalResult = TRUE; } break; case AML_LOGICAL_LESS_OP: /* LLess (Operand0, Operand1) */ if (Compare > 0) { goto Cleanup; /* FALSE */ } if (Compare < 0) { LocalResult = TRUE; goto Cleanup; /* TRUE */ } /* Bytes match (to shortest length), compare lengths */ if (Length0 < Length1) { LocalResult = TRUE; } break; default: ACPI_ERROR ((AE_INFO, "Invalid comparison opcode: %X", Opcode)); Status = AE_AML_INTERNAL; break; } } Cleanup: /* New object was created if implicit conversion performed - delete */ if (LocalOperand1 != Operand1) { AcpiUtRemoveReference (LocalOperand1); } /* Return the logical result and status */ *LogicalResult = LocalResult; return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exmutex.c000066400000000000000000000563751465205512700222700ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exmutex - ASL Mutex Acquire/Release functions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "acevents.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exmutex") /* Local prototypes */ static void AcpiExLinkMutex ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_THREAD_STATE *Thread); /******************************************************************************* * * FUNCTION: AcpiExUnlinkMutex * * PARAMETERS: ObjDesc - The mutex to be unlinked * * RETURN: None * * DESCRIPTION: Remove a mutex from the "AcquiredMutex" list * ******************************************************************************/ void AcpiExUnlinkMutex ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_THREAD_STATE *Thread = ObjDesc->Mutex.OwnerThread; if (!Thread) { return; } /* Doubly linked list */ if (ObjDesc->Mutex.Next) { (ObjDesc->Mutex.Next)->Mutex.Prev = ObjDesc->Mutex.Prev; } if (ObjDesc->Mutex.Prev) { (ObjDesc->Mutex.Prev)->Mutex.Next = ObjDesc->Mutex.Next; /* * Migrate the previous sync level associated with this mutex to * the previous mutex on the list so that it may be preserved. * This handles the case where several mutexes have been acquired * at the same level, but are not released in opposite order. */ (ObjDesc->Mutex.Prev)->Mutex.OriginalSyncLevel = ObjDesc->Mutex.OriginalSyncLevel; } else { Thread->AcquiredMutexList = ObjDesc->Mutex.Next; } } /******************************************************************************* * * FUNCTION: AcpiExLinkMutex * * PARAMETERS: ObjDesc - The mutex to be linked * Thread - Current executing thread object * * RETURN: None * * DESCRIPTION: Add a mutex to the "AcquiredMutex" list for this walk * ******************************************************************************/ static void AcpiExLinkMutex ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_THREAD_STATE *Thread) { ACPI_OPERAND_OBJECT *ListHead; ListHead = Thread->AcquiredMutexList; /* This object will be the first object in the list */ ObjDesc->Mutex.Prev = NULL; ObjDesc->Mutex.Next = ListHead; /* Update old first object to point back to this object */ if (ListHead) { ListHead->Mutex.Prev = ObjDesc; } /* Update list head */ Thread->AcquiredMutexList = ObjDesc; } /******************************************************************************* * * FUNCTION: AcpiExAcquireMutexObject * * PARAMETERS: Timeout - Timeout in milliseconds * ObjDesc - Mutex object * ThreadId - Current thread state * * RETURN: Status * * DESCRIPTION: Acquire an AML mutex, low-level interface. Provides a common * path that supports multiple acquires by the same thread. * * MUTEX: Interpreter must be locked * * NOTE: This interface is called from three places: * 1) From AcpiExAcquireMutex, via an AML Acquire() operator * 2) From AcpiExAcquireGlobalLock when an AML Field access requires the * global lock * 3) From the external interface, AcpiAcquireGlobalLock * ******************************************************************************/ ACPI_STATUS AcpiExAcquireMutexObject ( UINT16 Timeout, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_THREAD_ID ThreadId) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE_PTR (ExAcquireMutexObject, ObjDesc); if (!ObjDesc) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Support for multiple acquires by the owning thread */ if (ObjDesc->Mutex.ThreadId == ThreadId) { /* * The mutex is already owned by this thread, just increment the * acquisition depth */ ObjDesc->Mutex.AcquisitionDepth++; return_ACPI_STATUS (AE_OK); } /* Acquire the mutex, wait if necessary. Special case for Global Lock */ if (ObjDesc == AcpiGbl_GlobalLockMutex) { Status = AcpiEvAcquireGlobalLock (Timeout); } else { Status = AcpiExSystemWaitMutex (ObjDesc->Mutex.OsMutex, Timeout); } if (ACPI_FAILURE (Status)) { /* Includes failure from a timeout on TimeDesc */ return_ACPI_STATUS (Status); } /* Acquired the mutex: update mutex object */ ObjDesc->Mutex.ThreadId = ThreadId; ObjDesc->Mutex.AcquisitionDepth = 1; ObjDesc->Mutex.OriginalSyncLevel = 0; ObjDesc->Mutex.OwnerThread = NULL; /* Used only for AML Acquire() */ return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExAcquireMutex * * PARAMETERS: TimeDesc - Timeout integer * ObjDesc - Mutex object * WalkState - Current method execution state * * RETURN: Status * * DESCRIPTION: Acquire an AML mutex * ******************************************************************************/ ACPI_STATUS AcpiExAcquireMutex ( ACPI_OPERAND_OBJECT *TimeDesc, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE_PTR (ExAcquireMutex, ObjDesc); if (!ObjDesc) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Must have a valid thread state struct */ if (!WalkState->Thread) { ACPI_ERROR ((AE_INFO, "Cannot acquire Mutex [%4.4s], null thread info", AcpiUtGetNodeName (ObjDesc->Mutex.Node))); return_ACPI_STATUS (AE_AML_INTERNAL); } /* * Current sync level must be less than or equal to the sync level * of the mutex. This mechanism provides some deadlock prevention. */ if (WalkState->Thread->CurrentSyncLevel > ObjDesc->Mutex.SyncLevel) { ACPI_ERROR ((AE_INFO, "Cannot acquire Mutex [%4.4s], " "current SyncLevel is too large (%u)", AcpiUtGetNodeName (ObjDesc->Mutex.Node), WalkState->Thread->CurrentSyncLevel)); return_ACPI_STATUS (AE_AML_MUTEX_ORDER); } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Acquiring: Mutex SyncLevel %u, Thread SyncLevel %u, " "Depth %u TID %p\n", ObjDesc->Mutex.SyncLevel, WalkState->Thread->CurrentSyncLevel, ObjDesc->Mutex.AcquisitionDepth, WalkState->Thread)); Status = AcpiExAcquireMutexObject ((UINT16) TimeDesc->Integer.Value, ObjDesc, WalkState->Thread->ThreadId); if (ACPI_SUCCESS (Status) && ObjDesc->Mutex.AcquisitionDepth == 1) { /* Save Thread object, original/current sync levels */ ObjDesc->Mutex.OwnerThread = WalkState->Thread; ObjDesc->Mutex.OriginalSyncLevel = WalkState->Thread->CurrentSyncLevel; WalkState->Thread->CurrentSyncLevel = ObjDesc->Mutex.SyncLevel; /* Link the mutex to the current thread for force-unlock at method exit */ AcpiExLinkMutex (ObjDesc, WalkState->Thread); } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Acquired: Mutex SyncLevel %u, Thread SyncLevel %u, Depth %u\n", ObjDesc->Mutex.SyncLevel, WalkState->Thread->CurrentSyncLevel, ObjDesc->Mutex.AcquisitionDepth)); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExReleaseMutexObject * * PARAMETERS: ObjDesc - The object descriptor for this op * * RETURN: Status * * DESCRIPTION: Release a previously acquired Mutex, low level interface. * Provides a common path that supports multiple releases (after * previous multiple acquires) by the same thread. * * MUTEX: Interpreter must be locked * * NOTE: This interface is called from three places: * 1) From AcpiExReleaseMutex, via an AML Acquire() operator * 2) From AcpiExReleaseGlobalLock when an AML Field access requires the * global lock * 3) From the external interface, AcpiReleaseGlobalLock * ******************************************************************************/ ACPI_STATUS AcpiExReleaseMutexObject ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (ExReleaseMutexObject); if (ObjDesc->Mutex.AcquisitionDepth == 0) { return_ACPI_STATUS (AE_NOT_ACQUIRED); } /* Match multiple Acquires with multiple Releases */ ObjDesc->Mutex.AcquisitionDepth--; if (ObjDesc->Mutex.AcquisitionDepth != 0) { /* Just decrement the depth and return */ return_ACPI_STATUS (AE_OK); } if (ObjDesc->Mutex.OwnerThread) { /* Unlink the mutex from the owner's list */ AcpiExUnlinkMutex (ObjDesc); ObjDesc->Mutex.OwnerThread = NULL; } /* Release the mutex, special case for Global Lock */ if (ObjDesc == AcpiGbl_GlobalLockMutex) { Status = AcpiEvReleaseGlobalLock (); } else { AcpiOsReleaseMutex (ObjDesc->Mutex.OsMutex); } /* Clear mutex info */ ObjDesc->Mutex.ThreadId = 0; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExReleaseMutex * * PARAMETERS: ObjDesc - The object descriptor for this op * WalkState - Current method execution state * * RETURN: Status * * DESCRIPTION: Release a previously acquired Mutex. * ******************************************************************************/ ACPI_STATUS AcpiExReleaseMutex ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState) { UINT8 PreviousSyncLevel; ACPI_THREAD_STATE *OwnerThread; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (ExReleaseMutex); if (!ObjDesc) { return_ACPI_STATUS (AE_BAD_PARAMETER); } OwnerThread = ObjDesc->Mutex.OwnerThread; /* The mutex must have been previously acquired in order to release it */ if (!OwnerThread) { ACPI_ERROR ((AE_INFO, "Cannot release Mutex [%4.4s], not acquired", AcpiUtGetNodeName (ObjDesc->Mutex.Node))); return_ACPI_STATUS (AE_AML_MUTEX_NOT_ACQUIRED); } /* Must have a valid thread ID */ if (!WalkState->Thread) { ACPI_ERROR ((AE_INFO, "Cannot release Mutex [%4.4s], null thread info", AcpiUtGetNodeName (ObjDesc->Mutex.Node))); return_ACPI_STATUS (AE_AML_INTERNAL); } /* * The Mutex is owned, but this thread must be the owner. * Special case for Global Lock, any thread can release */ if ((OwnerThread->ThreadId != WalkState->Thread->ThreadId) && (ObjDesc != AcpiGbl_GlobalLockMutex)) { ACPI_ERROR ((AE_INFO, "Thread %u cannot release Mutex [%4.4s] acquired by thread %u", (UINT32) WalkState->Thread->ThreadId, AcpiUtGetNodeName (ObjDesc->Mutex.Node), (UINT32) OwnerThread->ThreadId)); return_ACPI_STATUS (AE_AML_NOT_OWNER); } /* * The sync level of the mutex must be equal to the current sync level. In * other words, the current level means that at least one mutex at that * level is currently being held. Attempting to release a mutex of a * different level can only mean that the mutex ordering rule is being * violated. This behavior is clarified in ACPI 4.0 specification. */ if (ObjDesc->Mutex.SyncLevel != OwnerThread->CurrentSyncLevel) { ACPI_ERROR ((AE_INFO, "Cannot release Mutex [%4.4s], SyncLevel mismatch: " "mutex %u current %u", AcpiUtGetNodeName (ObjDesc->Mutex.Node), ObjDesc->Mutex.SyncLevel, WalkState->Thread->CurrentSyncLevel)); return_ACPI_STATUS (AE_AML_MUTEX_ORDER); } /* * Get the previous SyncLevel from the head of the acquired mutex list. * This handles the case where several mutexes at the same level have been * acquired, but are not released in reverse order. */ PreviousSyncLevel = OwnerThread->AcquiredMutexList->Mutex.OriginalSyncLevel; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Releasing: Object SyncLevel %u, Thread SyncLevel %u, " "Prev SyncLevel %u, Depth %u TID %p\n", ObjDesc->Mutex.SyncLevel, WalkState->Thread->CurrentSyncLevel, PreviousSyncLevel, ObjDesc->Mutex.AcquisitionDepth, WalkState->Thread)); Status = AcpiExReleaseMutexObject (ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (ObjDesc->Mutex.AcquisitionDepth == 0) { /* Restore the previous SyncLevel */ OwnerThread->CurrentSyncLevel = PreviousSyncLevel; } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Released: Object SyncLevel %u, Thread SyncLevel, %u, " "Prev SyncLevel %u, Depth %u\n", ObjDesc->Mutex.SyncLevel, WalkState->Thread->CurrentSyncLevel, PreviousSyncLevel, ObjDesc->Mutex.AcquisitionDepth)); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExReleaseAllMutexes * * PARAMETERS: Thread - Current executing thread object * * RETURN: Status * * DESCRIPTION: Release all mutexes held by this thread * * NOTE: This function is called as the thread is exiting the interpreter. * Mutexes are not released when an individual control method is exited, but * only when the parent thread actually exits the interpreter. This allows one * method to acquire a mutex, and a different method to release it, as long as * this is performed underneath a single parent control method. * ******************************************************************************/ void AcpiExReleaseAllMutexes ( ACPI_THREAD_STATE *Thread) { ACPI_OPERAND_OBJECT *Next = Thread->AcquiredMutexList; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_FUNCTION_TRACE (ExReleaseAllMutexes); /* Traverse the list of owned mutexes, releasing each one */ while (Next) { ObjDesc = Next; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Mutex [%4.4s] force-release, SyncLevel %u Depth %u\n", ObjDesc->Mutex.Node->Name.Ascii, ObjDesc->Mutex.SyncLevel, ObjDesc->Mutex.AcquisitionDepth)); /* Release the mutex, special case for Global Lock */ if (ObjDesc == AcpiGbl_GlobalLockMutex) { /* Ignore errors */ (void) AcpiEvReleaseGlobalLock (); } else { AcpiOsReleaseMutex (ObjDesc->Mutex.OsMutex); } /* Update Thread SyncLevel (Last mutex is the important one) */ Thread->CurrentSyncLevel = ObjDesc->Mutex.OriginalSyncLevel; /* Mark mutex unowned */ Next = ObjDesc->Mutex.Next; ObjDesc->Mutex.Prev = NULL; ObjDesc->Mutex.Next = NULL; ObjDesc->Mutex.AcquisitionDepth = 0; ObjDesc->Mutex.OwnerThread = NULL; ObjDesc->Mutex.ThreadId = 0; } return_VOID; } src/acpica/source/components/executer/exnames.c000066400000000000000000000464421465205512700222230ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exnames - interpreter/scanner name load/execute * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "amlcode.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exnames") /* Local prototypes */ static char * AcpiExAllocateNameString ( UINT32 PrefixCount, UINT32 NumNameSegs); static ACPI_STATUS AcpiExNameSegment ( UINT8 **InAmlAddress, char *NameString); /******************************************************************************* * * FUNCTION: AcpiExAllocateNameString * * PARAMETERS: PrefixCount - Count of parent levels. Special cases: * (-1)==root, 0==none * NumNameSegs - count of 4-character name segments * * RETURN: A pointer to the allocated string segment. This segment must * be deleted by the caller. * * DESCRIPTION: Allocate a buffer for a name string. Ensure allocated name * string is long enough, and set up prefix if any. * ******************************************************************************/ static char * AcpiExAllocateNameString ( UINT32 PrefixCount, UINT32 NumNameSegs) { char *TempPtr; char *NameString; UINT32 SizeNeeded; ACPI_FUNCTION_TRACE (ExAllocateNameString); /* * Allow room for all \ and ^ prefixes, all segments and a MultiNamePrefix. * Also, one byte for the null terminator. * This may actually be somewhat longer than needed. */ if (PrefixCount == ACPI_UINT32_MAX) { /* Special case for root */ SizeNeeded = 1 + (ACPI_NAMESEG_SIZE * NumNameSegs) + 2 + 1; } else { SizeNeeded = PrefixCount + (ACPI_NAMESEG_SIZE * NumNameSegs) + 2 + 1; } /* * Allocate a buffer for the name. * This buffer must be deleted by the caller! */ NameString = ACPI_ALLOCATE (SizeNeeded); if (!NameString) { ACPI_ERROR ((AE_INFO, "Could not allocate size %u", SizeNeeded)); return_PTR (NULL); } TempPtr = NameString; /* Set up Root or Parent prefixes if needed */ if (PrefixCount == ACPI_UINT32_MAX) { *TempPtr++ = AML_ROOT_PREFIX; } else { while (PrefixCount--) { *TempPtr++ = AML_PARENT_PREFIX; } } /* Set up Dual or Multi prefixes if needed */ if (NumNameSegs > 2) { /* Set up multi prefixes */ *TempPtr++ = AML_MULTI_NAME_PREFIX; *TempPtr++ = (char) NumNameSegs; } else if (2 == NumNameSegs) { /* Set up dual prefixes */ *TempPtr++ = AML_DUAL_NAME_PREFIX; } /* * Terminate string following prefixes. AcpiExNameSegment() will * append the segment(s) */ *TempPtr = 0; return_PTR (NameString); } /******************************************************************************* * * FUNCTION: AcpiExNameSegment * * PARAMETERS: InAmlAddress - Pointer to the name in the AML code * NameString - Where to return the name. The name is appended * to any existing string to form a namepath * * RETURN: Status * * DESCRIPTION: Extract an ACPI name (4 bytes) from the AML byte stream * ******************************************************************************/ static ACPI_STATUS AcpiExNameSegment ( UINT8 **InAmlAddress, char *NameString) { char *AmlAddress = (void *) *InAmlAddress; ACPI_STATUS Status = AE_OK; UINT32 Index; char CharBuf[5]; ACPI_FUNCTION_TRACE (ExNameSegment); /* * If first character is a digit, then we know that we aren't looking * at a valid name segment */ CharBuf[0] = *AmlAddress; if ('0' <= CharBuf[0] && CharBuf[0] <= '9') { ACPI_ERROR ((AE_INFO, "Invalid leading digit: %c", CharBuf[0])); return_ACPI_STATUS (AE_CTRL_PENDING); } for (Index = 0; (Index < ACPI_NAMESEG_SIZE) && (AcpiUtValidNameChar (*AmlAddress, 0)); Index++) { CharBuf[Index] = *AmlAddress++; } /* Valid name segment */ if (Index == 4) { /* Found 4 valid characters */ CharBuf[4] = '\0'; if (NameString) { ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Appending NameSeg %s\n", CharBuf)); strcat (NameString, CharBuf); } else { ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "No Name string - %s\n", CharBuf)); } } else if (Index == 0) { /* * First character was not a valid name character, * so we are looking at something other than a name. */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Leading character is not alpha: %02Xh (not a name)\n", CharBuf[0])); Status = AE_CTRL_PENDING; } else { /* * Segment started with one or more valid characters, but fewer than * the required 4 */ Status = AE_AML_BAD_NAME; ACPI_ERROR ((AE_INFO, "Bad character 0x%02x in name, at %p", *AmlAddress, AmlAddress)); } *InAmlAddress = ACPI_CAST_PTR (UINT8, AmlAddress); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExGetNameString * * PARAMETERS: DataType - Object type to be associated with this * name * InAmlAddress - Pointer to the namestring in the AML code * OutNameString - Where the namestring is returned * OutNameLength - Length of the returned string * * RETURN: Status, namestring and length * * DESCRIPTION: Extract a full namepath from the AML byte stream, * including any prefixes. * ******************************************************************************/ ACPI_STATUS AcpiExGetNameString ( ACPI_OBJECT_TYPE DataType, UINT8 *InAmlAddress, char **OutNameString, UINT32 *OutNameLength) { ACPI_STATUS Status = AE_OK; UINT8 *AmlAddress = InAmlAddress; char *NameString = NULL; UINT32 NumSegments; UINT32 PrefixCount = 0; BOOLEAN HasPrefix = FALSE; ACPI_FUNCTION_TRACE_PTR (ExGetNameString, AmlAddress); if (ACPI_TYPE_LOCAL_REGION_FIELD == DataType || ACPI_TYPE_LOCAL_BANK_FIELD == DataType || ACPI_TYPE_LOCAL_INDEX_FIELD == DataType) { /* Disallow prefixes for types associated with FieldUnit names */ NameString = AcpiExAllocateNameString (0, 1); if (!NameString) { Status = AE_NO_MEMORY; } else { Status = AcpiExNameSegment (&AmlAddress, NameString); } } else { /* * DataType is not a field name. * Examine first character of name for root or parent prefix operators */ switch (*AmlAddress) { case AML_ROOT_PREFIX: ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "RootPrefix(\\) at %p\n", AmlAddress)); /* * Remember that we have a RootPrefix -- * see comment in AcpiExAllocateNameString() */ AmlAddress++; PrefixCount = ACPI_UINT32_MAX; HasPrefix = TRUE; break; case AML_PARENT_PREFIX: /* Increment past possibly multiple parent prefixes */ do { ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "ParentPrefix (^) at %p\n", AmlAddress)); AmlAddress++; PrefixCount++; } while (*AmlAddress == AML_PARENT_PREFIX); HasPrefix = TRUE; break; default: /* Not a prefix character */ break; } /* Examine first character of name for name segment prefix operator */ switch (*AmlAddress) { case AML_DUAL_NAME_PREFIX: ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "DualNamePrefix at %p\n", AmlAddress)); AmlAddress++; NameString = AcpiExAllocateNameString (PrefixCount, 2); if (!NameString) { Status = AE_NO_MEMORY; break; } /* Indicate that we processed a prefix */ HasPrefix = TRUE; Status = AcpiExNameSegment (&AmlAddress, NameString); if (ACPI_SUCCESS (Status)) { Status = AcpiExNameSegment (&AmlAddress, NameString); } break; case AML_MULTI_NAME_PREFIX: ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "MultiNamePrefix at %p\n", AmlAddress)); /* Fetch count of segments remaining in name path */ AmlAddress++; NumSegments = *AmlAddress; NameString = AcpiExAllocateNameString ( PrefixCount, NumSegments); if (!NameString) { Status = AE_NO_MEMORY; break; } /* Indicate that we processed a prefix */ AmlAddress++; HasPrefix = TRUE; while (NumSegments && (Status = AcpiExNameSegment (&AmlAddress, NameString)) == AE_OK) { NumSegments--; } break; case 0: /* NullName valid as of 8-12-98 ASL/AML Grammar Update */ if (PrefixCount == ACPI_UINT32_MAX) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "NameSeg is \"\\\" followed by NULL\n")); } /* Consume the NULL byte */ AmlAddress++; NameString = AcpiExAllocateNameString (PrefixCount, 0); if (!NameString) { Status = AE_NO_MEMORY; break; } break; default: /* Name segment string */ NameString = AcpiExAllocateNameString (PrefixCount, 1); if (!NameString) { Status = AE_NO_MEMORY; break; } Status = AcpiExNameSegment (&AmlAddress, NameString); break; } } if (AE_CTRL_PENDING == Status && HasPrefix) { /* Ran out of segments after processing a prefix */ ACPI_ERROR ((AE_INFO, "Malformed Name at %p", NameString)); Status = AE_AML_BAD_NAME; } if (ACPI_FAILURE (Status)) { if (NameString) { ACPI_FREE (NameString); } return_ACPI_STATUS (Status); } *OutNameString = NameString; *OutNameLength = (UINT32) (AmlAddress - InAmlAddress); return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exoparg1.c000066400000000000000000001212661465205512700223070ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exoparg1 - AML execution - opcodes with 1 argument * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "acdispat.h" #include "acinterp.h" #include "amlcode.h" #include "acnamesp.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exoparg1") /*! * Naming convention for AML interpreter execution routines. * * The routines that begin execution of AML opcodes are named with a common * convention based upon the number of arguments, the number of target operands, * and whether or not a value is returned: * * AcpiExOpcode_xA_yT_zR * * Where: * * xA - ARGUMENTS: The number of arguments (input operands) that are * required for this opcode type (0 through 6 args). * yT - TARGETS: The number of targets (output operands) that are required * for this opcode type (0, 1, or 2 targets). * zR - RETURN VALUE: Indicates whether this opcode type returns a value * as the function return (0 or 1). * * The AcpiExOpcode* functions are called via the Dispatcher component with * fully resolved operands. !*/ /******************************************************************************* * * FUNCTION: AcpiExOpcode_0A_0T_1R * * PARAMETERS: WalkState - Current state (contains AML opcode) * * RETURN: Status * * DESCRIPTION: Execute operator with no operands, one return value * ******************************************************************************/ ACPI_STATUS AcpiExOpcode_0A_0T_1R ( ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT *ReturnDesc = NULL; ACPI_FUNCTION_TRACE_STR (ExOpcode_0A_0T_1R, AcpiPsGetOpcodeName (WalkState->Opcode)); /* Examine the AML opcode */ switch (WalkState->Opcode) { case AML_TIMER_OP: /* Timer () */ /* Create a return object of type Integer */ ReturnDesc = AcpiUtCreateIntegerObject (AcpiOsGetTimer ()); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } break; default: /* Unknown opcode */ ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X", WalkState->Opcode)); Status = AE_AML_BAD_OPCODE; break; } Cleanup: /* Delete return object on error */ if ((ACPI_FAILURE (Status)) || WalkState->ResultObj) { AcpiUtRemoveReference (ReturnDesc); WalkState->ResultObj = NULL; } else { /* Save the return value */ WalkState->ResultObj = ReturnDesc; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExOpcode_1A_0T_0R * * PARAMETERS: WalkState - Current state (contains AML opcode) * * RETURN: Status * * DESCRIPTION: Execute Type 1 monadic operator with numeric operand on * object stack * ******************************************************************************/ ACPI_STATUS AcpiExOpcode_1A_0T_0R ( ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE_STR (ExOpcode_1A_0T_0R, AcpiPsGetOpcodeName (WalkState->Opcode)); /* Examine the AML opcode */ switch (WalkState->Opcode) { case AML_RELEASE_OP: /* Release (MutexObject) */ Status = AcpiExReleaseMutex (Operand[0], WalkState); break; case AML_RESET_OP: /* Reset (EventObject) */ Status = AcpiExSystemResetEvent (Operand[0]); break; case AML_SIGNAL_OP: /* Signal (EventObject) */ Status = AcpiExSystemSignalEvent (Operand[0]); break; case AML_SLEEP_OP: /* Sleep (MsecTime) */ Status = AcpiExSystemDoSleep (Operand[0]->Integer.Value); break; case AML_STALL_OP: /* Stall (UsecTime) */ Status = AcpiExSystemDoStall ((UINT32) Operand[0]->Integer.Value); break; case AML_UNLOAD_OP: /* Unload (Handle) */ Status = AcpiExUnloadTable (Operand[0]); break; default: /* Unknown opcode */ ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X", WalkState->Opcode)); Status = AE_AML_BAD_OPCODE; break; } return_ACPI_STATUS (Status); } #ifdef _OBSOLETE_CODE /* Was originally used for Load() operator */ /******************************************************************************* * * FUNCTION: AcpiExOpcode_1A_1T_0R * * PARAMETERS: WalkState - Current state (contains AML opcode) * * RETURN: Status * * DESCRIPTION: Execute opcode with one argument, one target, and no * return value. * ******************************************************************************/ ACPI_STATUS AcpiExOpcode_1A_1T_0R ( ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_FUNCTION_TRACE_STR (ExOpcode_1A_1T_0R, AcpiPsGetOpcodeName (WalkState->Opcode)); /* Examine the AML opcode */ switch (WalkState->Opcode) { #ifdef _OBSOLETE_CODE case AML_LOAD_OP: Status = AcpiExLoadOp (Operand[0], Operand[1], WalkState); break; #endif default: /* Unknown opcode */ ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X", WalkState->Opcode)); Status = AE_AML_BAD_OPCODE; goto Cleanup; } Cleanup: return_ACPI_STATUS (Status); } #endif /******************************************************************************* * * FUNCTION: AcpiExOpcode_1A_1T_1R * * PARAMETERS: WalkState - Current state (contains AML opcode) * * RETURN: Status * * DESCRIPTION: Execute opcode with one argument, one target, and a * return value. * January 2022: Added Load operator, with new ACPI 6.4 * semantics. * ******************************************************************************/ ACPI_STATUS AcpiExOpcode_1A_1T_1R ( ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_OPERAND_OBJECT *ReturnDesc = NULL; ACPI_OPERAND_OBJECT *ReturnDesc2 = NULL; UINT32 Temp32; UINT32 i; UINT64 PowerOfTen; UINT64 Digit; ACPI_FUNCTION_TRACE_STR (ExOpcode_1A_1T_1R, AcpiPsGetOpcodeName (WalkState->Opcode)); /* Examine the AML opcode */ switch (WalkState->Opcode) { case AML_BIT_NOT_OP: case AML_FIND_SET_LEFT_BIT_OP: case AML_FIND_SET_RIGHT_BIT_OP: case AML_FROM_BCD_OP: case AML_LOAD_OP: case AML_TO_BCD_OP: case AML_CONDITIONAL_REF_OF_OP: /* Create a return object of type Integer for these opcodes */ ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } switch (WalkState->Opcode) { case AML_BIT_NOT_OP: /* Not (Operand, Result) */ ReturnDesc->Integer.Value = ~Operand[0]->Integer.Value; break; case AML_FIND_SET_LEFT_BIT_OP: /* FindSetLeftBit (Operand, Result) */ ReturnDesc->Integer.Value = Operand[0]->Integer.Value; /* * Acpi specification describes Integer type as a little * endian unsigned value, so this boundary condition is valid. */ for (Temp32 = 0; ReturnDesc->Integer.Value && Temp32 < ACPI_INTEGER_BIT_SIZE; ++Temp32) { ReturnDesc->Integer.Value >>= 1; } ReturnDesc->Integer.Value = Temp32; break; case AML_FIND_SET_RIGHT_BIT_OP: /* FindSetRightBit (Operand, Result) */ ReturnDesc->Integer.Value = Operand[0]->Integer.Value; /* * The Acpi specification describes Integer type as a little * endian unsigned value, so this boundary condition is valid. */ for (Temp32 = 0; ReturnDesc->Integer.Value && Temp32 < ACPI_INTEGER_BIT_SIZE; ++Temp32) { ReturnDesc->Integer.Value <<= 1; } /* Since the bit position is one-based, subtract from 33 (65) */ ReturnDesc->Integer.Value = Temp32 == 0 ? 0 : (ACPI_INTEGER_BIT_SIZE + 1) - Temp32; break; case AML_FROM_BCD_OP: /* FromBcd (BCDValue, Result) */ /* * The 64-bit ACPI integer can hold 16 4-bit BCD characters * (if table is 32-bit, integer can hold 8 BCD characters) * Convert each 4-bit BCD value */ PowerOfTen = 1; ReturnDesc->Integer.Value = 0; Digit = Operand[0]->Integer.Value; /* Convert each BCD digit (each is one nybble wide) */ for (i = 0; (i < AcpiGbl_IntegerNybbleWidth) && (Digit > 0); i++) { /* Get the least significant 4-bit BCD digit */ Temp32 = ((UINT32) Digit) & 0xF; /* Check the range of the digit */ if (Temp32 > 9) { ACPI_ERROR ((AE_INFO, "BCD digit too large (not decimal): 0x%X", Temp32)); Status = AE_AML_NUMERIC_OVERFLOW; goto Cleanup; } /* Sum the digit into the result with the current power of 10 */ ReturnDesc->Integer.Value += (((UINT64) Temp32) * PowerOfTen); /* Shift to next BCD digit */ Digit >>= 4; /* Next power of 10 */ PowerOfTen *= 10; } break; case AML_LOAD_OP: /* Result1 = Load (Operand[0], Result1) */ ReturnDesc->Integer.Value = 0; Status = AcpiExLoadOp (Operand[0], ReturnDesc, WalkState); if (ACPI_SUCCESS (Status)) { /* Return -1 (non-zero) indicates success */ ReturnDesc->Integer.Value = 0xFFFFFFFFFFFFFFFF; } break; case AML_TO_BCD_OP: /* ToBcd (Operand, Result) */ ReturnDesc->Integer.Value = 0; Digit = Operand[0]->Integer.Value; /* Each BCD digit is one nybble wide */ for (i = 0; (i < AcpiGbl_IntegerNybbleWidth) && (Digit > 0); i++) { (void) AcpiUtShortDivide (Digit, 10, &Digit, &Temp32); /* * Insert the BCD digit that resides in the * remainder from above */ ReturnDesc->Integer.Value |= (((UINT64) Temp32) << ACPI_MUL_4 (i)); } /* Overflow if there is any data left in Digit */ if (Digit > 0) { ACPI_ERROR ((AE_INFO, "Integer too large to convert to BCD: 0x%8.8X%8.8X", ACPI_FORMAT_UINT64 (Operand[0]->Integer.Value))); Status = AE_AML_NUMERIC_OVERFLOW; goto Cleanup; } break; case AML_CONDITIONAL_REF_OF_OP: /* CondRefOf (SourceObject, Result) */ /* * This op is a little strange because the internal return value is * different than the return value stored in the result descriptor * (There are really two return values) */ if ((ACPI_NAMESPACE_NODE *) Operand[0] == AcpiGbl_RootNode) { /* * This means that the object does not exist in the namespace, * return FALSE */ ReturnDesc->Integer.Value = 0; goto Cleanup; } /* Get the object reference, store it, and remove our reference */ Status = AcpiExGetObjectReference (Operand[0], &ReturnDesc2, WalkState); if (ACPI_FAILURE (Status)) { goto Cleanup; } Status = AcpiExStore (ReturnDesc2, Operand[1], WalkState); AcpiUtRemoveReference (ReturnDesc2); /* The object exists in the namespace, return TRUE */ ReturnDesc->Integer.Value = ACPI_UINT64_MAX; goto Cleanup; default: /* No other opcodes get here */ break; } break; case AML_STORE_OP: /* Store (Source, Target) */ /* * A store operand is typically a number, string, buffer or lvalue * Be careful about deleting the source object, * since the object itself may have been stored. */ Status = AcpiExStore (Operand[0], Operand[1], WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* It is possible that the Store already produced a return object */ if (!WalkState->ResultObj) { /* * Normally, we would remove a reference on the Operand[0] * parameter; But since it is being used as the internal return * object (meaning we would normally increment it), the two * cancel out, and we simply don't do anything. */ WalkState->ResultObj = Operand[0]; WalkState->Operands[0] = NULL; /* Prevent deletion */ } return_ACPI_STATUS (Status); /* * ACPI 2.0 Opcodes */ case AML_COPY_OBJECT_OP: /* CopyObject (Source, Target) */ Status = AcpiUtCopyIobjectToIobject ( Operand[0], &ReturnDesc, WalkState); break; case AML_TO_DECIMAL_STRING_OP: /* ToDecimalString (Data, Result) */ Status = AcpiExConvertToString ( Operand[0], &ReturnDesc, ACPI_EXPLICIT_CONVERT_DECIMAL); if (ReturnDesc == Operand[0]) { /* No conversion performed, add ref to handle return value */ AcpiUtAddReference (ReturnDesc); } break; case AML_TO_HEX_STRING_OP: /* ToHexString (Data, Result) */ Status = AcpiExConvertToString ( Operand[0], &ReturnDesc, ACPI_EXPLICIT_CONVERT_HEX); if (ReturnDesc == Operand[0]) { /* No conversion performed, add ref to handle return value */ AcpiUtAddReference (ReturnDesc); } break; case AML_TO_BUFFER_OP: /* ToBuffer (Data, Result) */ Status = AcpiExConvertToBuffer (Operand[0], &ReturnDesc); if (ReturnDesc == Operand[0]) { /* No conversion performed, add ref to handle return value */ AcpiUtAddReference (ReturnDesc); } break; case AML_TO_INTEGER_OP: /* ToInteger (Data, Result) */ /* Perform "explicit" conversion */ Status = AcpiExConvertToInteger (Operand[0], &ReturnDesc, 0); if (ReturnDesc == Operand[0]) { /* No conversion performed, add ref to handle return value */ AcpiUtAddReference (ReturnDesc); } break; case AML_SHIFT_LEFT_BIT_OP: /* ShiftLeftBit (Source, BitNum) */ case AML_SHIFT_RIGHT_BIT_OP: /* ShiftRightBit (Source, BitNum) */ /* These are two obsolete opcodes */ ACPI_ERROR ((AE_INFO, "%s is obsolete and not implemented", AcpiPsGetOpcodeName (WalkState->Opcode))); Status = AE_SUPPORT; goto Cleanup; default: /* Unknown opcode */ ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X", WalkState->Opcode)); Status = AE_AML_BAD_OPCODE; goto Cleanup; } if (ACPI_SUCCESS (Status)) { /* Store the return value computed above into the target object */ Status = AcpiExStore (ReturnDesc, Operand[1], WalkState); } Cleanup: /* Delete return object on error */ if (ACPI_FAILURE (Status)) { AcpiUtRemoveReference (ReturnDesc); } /* Save return object on success */ else if (!WalkState->ResultObj) { WalkState->ResultObj = ReturnDesc; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExOpcode_1A_0T_1R * * PARAMETERS: WalkState - Current state (contains AML opcode) * * RETURN: Status * * DESCRIPTION: Execute opcode with one argument, no target, and a return value * ******************************************************************************/ ACPI_STATUS AcpiExOpcode_1A_0T_1R ( ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_OPERAND_OBJECT *TempDesc; ACPI_OPERAND_OBJECT *ReturnDesc = NULL; ACPI_STATUS Status = AE_OK; UINT32 Type; UINT64 Value; ACPI_FUNCTION_TRACE_STR (ExOpcode_1A_0T_1R, AcpiPsGetOpcodeName (WalkState->Opcode)); /* Examine the AML opcode */ switch (WalkState->Opcode) { case AML_LOGICAL_NOT_OP: /* LNot (Operand) */ ReturnDesc = AcpiUtCreateIntegerObject ((UINT64) 0); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } /* * Set result to ONES (TRUE) if Value == 0. Note: * ReturnDesc->Integer.Value is initially == 0 (FALSE) from above. */ if (!Operand[0]->Integer.Value) { ReturnDesc->Integer.Value = ACPI_UINT64_MAX; } break; case AML_DECREMENT_OP: /* Decrement (Operand) */ case AML_INCREMENT_OP: /* Increment (Operand) */ /* * Create a new integer. Can't just get the base integer and * increment it because it may be an Arg or Field. */ ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } /* * Since we are expecting a Reference operand, it can be either a * NS Node or an internal object. */ TempDesc = Operand[0]; if (ACPI_GET_DESCRIPTOR_TYPE (TempDesc) == ACPI_DESC_TYPE_OPERAND) { /* Internal reference object - prevent deletion */ AcpiUtAddReference (TempDesc); } /* * Convert the Reference operand to an Integer (This removes a * reference on the Operand[0] object) * * NOTE: We use LNOT_OP here in order to force resolution of the * reference operand to an actual integer. */ Status = AcpiExResolveOperands (AML_LOGICAL_NOT_OP, &TempDesc, WalkState); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "While resolving operands for [%s]", AcpiPsGetOpcodeName (WalkState->Opcode))); goto Cleanup; } /* * TempDesc is now guaranteed to be an Integer object -- * Perform the actual increment or decrement */ if (WalkState->Opcode == AML_INCREMENT_OP) { ReturnDesc->Integer.Value = TempDesc->Integer.Value + 1; } else { ReturnDesc->Integer.Value = TempDesc->Integer.Value - 1; } /* Finished with this Integer object */ AcpiUtRemoveReference (TempDesc); /* * Store the result back (indirectly) through the original * Reference object */ Status = AcpiExStore (ReturnDesc, Operand[0], WalkState); break; case AML_OBJECT_TYPE_OP: /* ObjectType (SourceObject) */ /* * Note: The operand is not resolved at this point because we want to * get the associated object, not its value. For example, we don't * want to resolve a FieldUnit to its value, we want the actual * FieldUnit object. */ /* Get the type of the base object */ Status = AcpiExResolveMultiple (WalkState, Operand[0], &Type, NULL); if (ACPI_FAILURE (Status)) { goto Cleanup; } /* Allocate a descriptor to hold the type. */ ReturnDesc = AcpiUtCreateIntegerObject ((UINT64) Type); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } break; case AML_SIZE_OF_OP: /* SizeOf (SourceObject) */ /* * Note: The operand is not resolved at this point because we want to * get the associated object, not its value. */ /* Get the base object */ Status = AcpiExResolveMultiple ( WalkState, Operand[0], &Type, &TempDesc); if (ACPI_FAILURE (Status)) { goto Cleanup; } /* * The type of the base object must be integer, buffer, string, or * package. All others are not supported. * * NOTE: Integer is not specifically supported by the ACPI spec, * but is supported implicitly via implicit operand conversion. * rather than bother with conversion, we just use the byte width * global (4 or 8 bytes). */ switch (Type) { case ACPI_TYPE_INTEGER: Value = AcpiGbl_IntegerByteWidth; break; case ACPI_TYPE_STRING: Value = TempDesc->String.Length; break; case ACPI_TYPE_BUFFER: /* Buffer arguments may not be evaluated at this point */ Status = AcpiDsGetBufferArguments (TempDesc); Value = TempDesc->Buffer.Length; break; case ACPI_TYPE_PACKAGE: /* Package arguments may not be evaluated at this point */ Status = AcpiDsGetPackageArguments (TempDesc); Value = TempDesc->Package.Count; break; default: ACPI_ERROR ((AE_INFO, "Operand must be Buffer/Integer/String/Package" " - found type %s", AcpiUtGetTypeName (Type))); Status = AE_AML_OPERAND_TYPE; goto Cleanup; } if (ACPI_FAILURE (Status)) { goto Cleanup; } /* * Now that we have the size of the object, create a result * object to hold the value */ ReturnDesc = AcpiUtCreateIntegerObject (Value); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } break; case AML_REF_OF_OP: /* RefOf (SourceObject) */ Status = AcpiExGetObjectReference ( Operand[0], &ReturnDesc, WalkState); if (ACPI_FAILURE (Status)) { goto Cleanup; } break; case AML_DEREF_OF_OP: /* DerefOf (ObjReference | String) */ /* Check for a method local or argument, or standalone String */ if (ACPI_GET_DESCRIPTOR_TYPE (Operand[0]) == ACPI_DESC_TYPE_NAMED) { TempDesc = AcpiNsGetAttachedObject ( (ACPI_NAMESPACE_NODE *) Operand[0]); if (TempDesc && ((TempDesc->Common.Type == ACPI_TYPE_STRING) || (TempDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE))) { Operand[0] = TempDesc; AcpiUtAddReference (TempDesc); } else { Status = AE_AML_OPERAND_TYPE; goto Cleanup; } } else { switch ((Operand[0])->Common.Type) { case ACPI_TYPE_LOCAL_REFERENCE: /* * This is a DerefOf (LocalX | ArgX) * * Must resolve/dereference the local/arg reference first */ switch (Operand[0]->Reference.Class) { case ACPI_REFCLASS_LOCAL: case ACPI_REFCLASS_ARG: /* Set Operand[0] to the value of the local/arg */ Status = AcpiDsMethodDataGetValue ( Operand[0]->Reference.Class, Operand[0]->Reference.Value, WalkState, &TempDesc); if (ACPI_FAILURE (Status)) { goto Cleanup; } /* * Delete our reference to the input object and * point to the object just retrieved */ AcpiUtRemoveReference (Operand[0]); Operand[0] = TempDesc; break; case ACPI_REFCLASS_REFOF: /* Get the object to which the reference refers */ TempDesc = Operand[0]->Reference.Object; AcpiUtRemoveReference (Operand[0]); Operand[0] = TempDesc; break; default: /* Must be an Index op - handled below */ break; } break; case ACPI_TYPE_STRING: break; default: Status = AE_AML_OPERAND_TYPE; goto Cleanup; } } if (ACPI_GET_DESCRIPTOR_TYPE (Operand[0]) != ACPI_DESC_TYPE_NAMED) { if ((Operand[0])->Common.Type == ACPI_TYPE_STRING) { /* * This is a DerefOf (String). The string is a reference * to a named ACPI object. * * 1) Find the owning Node * 2) Dereference the node to an actual object. Could be a * Field, so we need to resolve the node to a value. */ Status = AcpiNsGetNodeUnlocked (WalkState->ScopeInfo->Scope.Node, Operand[0]->String.Pointer, ACPI_NS_SEARCH_PARENT, ACPI_CAST_INDIRECT_PTR ( ACPI_NAMESPACE_NODE, &ReturnDesc)); if (ACPI_FAILURE (Status)) { goto Cleanup; } Status = AcpiExResolveNodeToValue ( ACPI_CAST_INDIRECT_PTR ( ACPI_NAMESPACE_NODE, &ReturnDesc), WalkState); goto Cleanup; } } /* Operand[0] may have changed from the code above */ if (ACPI_GET_DESCRIPTOR_TYPE (Operand[0]) == ACPI_DESC_TYPE_NAMED) { /* * This is a DerefOf (ObjectReference) * Get the actual object from the Node (This is the dereference). * This case may only happen when a LocalX or ArgX is * dereferenced above, or for references to device and * thermal objects. */ switch (((ACPI_NAMESPACE_NODE *) Operand[0])->Type) { case ACPI_TYPE_DEVICE: case ACPI_TYPE_THERMAL: /* These types have no node subobject, return the NS node */ ReturnDesc = Operand[0]; break; default: /* For most types, get the object attached to the node */ ReturnDesc = AcpiNsGetAttachedObject ( (ACPI_NAMESPACE_NODE *) Operand[0]); AcpiUtAddReference (ReturnDesc); break; } } else { /* * This must be a reference object produced by either the * Index() or RefOf() operator */ switch (Operand[0]->Reference.Class) { case ACPI_REFCLASS_INDEX: /* * The target type for the Index operator must be * either a Buffer or a Package */ switch (Operand[0]->Reference.TargetType) { case ACPI_TYPE_BUFFER_FIELD: TempDesc = Operand[0]->Reference.Object; /* * Create a new object that contains one element of the * buffer -- the element pointed to by the index. * * NOTE: index into a buffer is NOT a pointer to a * sub-buffer of the main buffer, it is only a pointer to a * single element (byte) of the buffer! * * Since we are returning the value of the buffer at the * indexed location, we don't need to add an additional * reference to the buffer itself. */ ReturnDesc = AcpiUtCreateIntegerObject ((UINT64) TempDesc->Buffer.Pointer[Operand[0]->Reference.Value]); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } break; case ACPI_TYPE_PACKAGE: /* * Return the referenced element of the package. We must * add another reference to the referenced object, however. */ ReturnDesc = *(Operand[0]->Reference.Where); if (!ReturnDesc) { /* * Element is NULL, do not allow the dereference. * This provides compatibility with other ACPI * implementations. */ return_ACPI_STATUS (AE_AML_UNINITIALIZED_ELEMENT); } AcpiUtAddReference (ReturnDesc); break; default: ACPI_ERROR ((AE_INFO, "Unknown Index TargetType 0x%X in reference object %p", Operand[0]->Reference.TargetType, Operand[0])); Status = AE_AML_OPERAND_TYPE; goto Cleanup; } break; case ACPI_REFCLASS_REFOF: ReturnDesc = Operand[0]->Reference.Object; if (ACPI_GET_DESCRIPTOR_TYPE (ReturnDesc) == ACPI_DESC_TYPE_NAMED) { ReturnDesc = AcpiNsGetAttachedObject ( (ACPI_NAMESPACE_NODE *) ReturnDesc); if (!ReturnDesc) { break; } /* * June 2013: * BufferFields/FieldUnits require additional resolution */ switch (ReturnDesc->Common.Type) { case ACPI_TYPE_BUFFER_FIELD: case ACPI_TYPE_LOCAL_REGION_FIELD: case ACPI_TYPE_LOCAL_BANK_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD: Status = AcpiExReadDataFromField ( WalkState, ReturnDesc, &TempDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ReturnDesc = TempDesc; break; default: /* Add another reference to the object */ AcpiUtAddReference (ReturnDesc); break; } } break; default: ACPI_ERROR ((AE_INFO, "Unknown class in reference(%p) - 0x%2.2X", Operand[0], Operand[0]->Reference.Class)); Status = AE_TYPE; goto Cleanup; } } break; default: ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X", WalkState->Opcode)); Status = AE_AML_BAD_OPCODE; goto Cleanup; } Cleanup: /* Delete return object on error */ if (ACPI_FAILURE (Status)) { AcpiUtRemoveReference (ReturnDesc); } /* Save return object on success */ else { WalkState->ResultObj = ReturnDesc; } return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exoparg2.c000066400000000000000000000574701465205512700223150ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exoparg2 - AML execution - opcodes with 2 arguments * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "acinterp.h" #include "acevents.h" #include "amlcode.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exoparg2") /*! * Naming convention for AML interpreter execution routines. * * The routines that begin execution of AML opcodes are named with a common * convention based upon the number of arguments, the number of target operands, * and whether or not a value is returned: * * AcpiExOpcode_xA_yT_zR * * Where: * * xA - ARGUMENTS: The number of arguments (input operands) that are * required for this opcode type (1 through 6 args). * yT - TARGETS: The number of targets (output operands) that are required * for this opcode type (0, 1, or 2 targets). * zR - RETURN VALUE: Indicates whether this opcode type returns a value * as the function return (0 or 1). * * The AcpiExOpcode* functions are called via the Dispatcher component with * fully resolved operands. !*/ /******************************************************************************* * * FUNCTION: AcpiExOpcode_2A_0T_0R * * PARAMETERS: WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Execute opcode with two arguments, no target, and no return * value. * * ALLOCATION: Deletes both operands * ******************************************************************************/ ACPI_STATUS AcpiExOpcode_2A_0T_0R ( ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_NAMESPACE_NODE *Node; UINT32 Value; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE_STR (ExOpcode_2A_0T_0R, AcpiPsGetOpcodeName (WalkState->Opcode)); /* Examine the opcode */ switch (WalkState->Opcode) { case AML_NOTIFY_OP: /* Notify (NotifyObject, NotifyValue) */ /* The first operand is a namespace node */ Node = (ACPI_NAMESPACE_NODE *) Operand[0]; /* Second value is the notify value */ Value = (UINT32) Operand[1]->Integer.Value; /* Are notifies allowed on this object? */ if (!AcpiEvIsNotifyObject (Node)) { ACPI_ERROR ((AE_INFO, "Unexpected notify object type [%s]", AcpiUtGetTypeName (Node->Type))); Status = AE_AML_OPERAND_TYPE; break; } /* * Dispatch the notify to the appropriate handler * NOTE: the request is queued for execution after this method * completes. The notify handlers are NOT invoked synchronously * from this thread -- because handlers may in turn run other * control methods. */ Status = AcpiEvQueueNotifyRequest (Node, Value); break; default: ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X", WalkState->Opcode)); Status = AE_AML_BAD_OPCODE; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExOpcode_2A_2T_1R * * PARAMETERS: WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Execute a dyadic operator (2 operands) with 2 output targets * and one implicit return value. * ******************************************************************************/ ACPI_STATUS AcpiExOpcode_2A_2T_1R ( ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_OPERAND_OBJECT *ReturnDesc1 = NULL; ACPI_OPERAND_OBJECT *ReturnDesc2 = NULL; ACPI_STATUS Status; ACPI_FUNCTION_TRACE_STR (ExOpcode_2A_2T_1R, AcpiPsGetOpcodeName (WalkState->Opcode)); /* Execute the opcode */ switch (WalkState->Opcode) { case AML_DIVIDE_OP: /* Divide (Dividend, Divisor, RemainderResult QuotientResult) */ ReturnDesc1 = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); if (!ReturnDesc1) { Status = AE_NO_MEMORY; goto Cleanup; } ReturnDesc2 = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); if (!ReturnDesc2) { Status = AE_NO_MEMORY; goto Cleanup; } /* Quotient to ReturnDesc1, remainder to ReturnDesc2 */ Status = AcpiUtDivide ( Operand[0]->Integer.Value, Operand[1]->Integer.Value, &ReturnDesc1->Integer.Value, &ReturnDesc2->Integer.Value); if (ACPI_FAILURE (Status)) { goto Cleanup; } break; default: ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X", WalkState->Opcode)); Status = AE_AML_BAD_OPCODE; goto Cleanup; } /* Store the results to the target reference operands */ Status = AcpiExStore (ReturnDesc2, Operand[2], WalkState); if (ACPI_FAILURE (Status)) { goto Cleanup; } Status = AcpiExStore (ReturnDesc1, Operand[3], WalkState); if (ACPI_FAILURE (Status)) { goto Cleanup; } Cleanup: /* * Since the remainder is not returned indirectly, remove a reference to * it. Only the quotient is returned indirectly. */ AcpiUtRemoveReference (ReturnDesc2); if (ACPI_FAILURE (Status)) { /* Delete the return object */ AcpiUtRemoveReference (ReturnDesc1); } /* Save return object (the remainder) on success */ else { WalkState->ResultObj = ReturnDesc1; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExOpcode_2A_1T_1R * * PARAMETERS: WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Execute opcode with two arguments, one target, and a return * value. * ******************************************************************************/ ACPI_STATUS AcpiExOpcode_2A_1T_1R ( ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_OPERAND_OBJECT *ReturnDesc = NULL; UINT64 Index; ACPI_STATUS Status = AE_OK; ACPI_SIZE Length = 0; ACPI_FUNCTION_TRACE_STR (ExOpcode_2A_1T_1R, AcpiPsGetOpcodeName (WalkState->Opcode)); /* Execute the opcode */ if (WalkState->OpInfo->Flags & AML_MATH) { /* All simple math opcodes (add, etc.) */ ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } ReturnDesc->Integer.Value = AcpiExDoMathOp ( WalkState->Opcode, Operand[0]->Integer.Value, Operand[1]->Integer.Value); goto StoreResultToTarget; } switch (WalkState->Opcode) { case AML_MOD_OP: /* Mod (Dividend, Divisor, RemainderResult (ACPI 2.0) */ ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } /* ReturnDesc will contain the remainder */ Status = AcpiUtDivide ( Operand[0]->Integer.Value, Operand[1]->Integer.Value, NULL, &ReturnDesc->Integer.Value); break; case AML_CONCATENATE_OP: /* Concatenate (Data1, Data2, Result) */ Status = AcpiExDoConcatenate ( Operand[0], Operand[1], &ReturnDesc, WalkState); break; case AML_TO_STRING_OP: /* ToString (Buffer, Length, Result) (ACPI 2.0) */ /* * Input object is guaranteed to be a buffer at this point (it may have * been converted.) Copy the raw buffer data to a new object of * type String. */ /* * Get the length of the new string. It is the smallest of: * 1) Length of the input buffer * 2) Max length as specified in the ToString operator * 3) Length of input buffer up to a zero byte (null terminator) * * NOTE: A length of zero is ok, and will create a zero-length, null * terminated string. */ while ((Length < Operand[0]->Buffer.Length) && /* Length of input buffer */ (Length < Operand[1]->Integer.Value) && /* Length operand */ (Operand[0]->Buffer.Pointer[Length])) /* Null terminator */ { Length++; } /* Allocate a new string object */ ReturnDesc = AcpiUtCreateStringObject (Length); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } /* * Copy the raw buffer data with no transform. * (NULL terminated already) */ memcpy (ReturnDesc->String.Pointer, Operand[0]->Buffer.Pointer, Length); break; case AML_CONCATENATE_TEMPLATE_OP: /* ConcatenateResTemplate (Buffer, Buffer, Result) (ACPI 2.0) */ Status = AcpiExConcatTemplate ( Operand[0], Operand[1], &ReturnDesc, WalkState); break; case AML_INDEX_OP: /* Index (Source Index Result) */ /* Create the internal return object */ ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_REFERENCE); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } /* Initialize the Index reference object */ Index = Operand[1]->Integer.Value; ReturnDesc->Reference.Value = (UINT32) Index; ReturnDesc->Reference.Class = ACPI_REFCLASS_INDEX; /* * At this point, the Source operand is a String, Buffer, or Package. * Verify that the index is within range. */ switch ((Operand[0])->Common.Type) { case ACPI_TYPE_STRING: if (Index >= Operand[0]->String.Length) { Length = Operand[0]->String.Length; Status = AE_AML_STRING_LIMIT; } ReturnDesc->Reference.TargetType = ACPI_TYPE_BUFFER_FIELD; ReturnDesc->Reference.IndexPointer = &(Operand[0]->Buffer.Pointer [Index]); break; case ACPI_TYPE_BUFFER: if (Index >= Operand[0]->Buffer.Length) { Length = Operand[0]->Buffer.Length; Status = AE_AML_BUFFER_LIMIT; } ReturnDesc->Reference.TargetType = ACPI_TYPE_BUFFER_FIELD; ReturnDesc->Reference.IndexPointer = &(Operand[0]->Buffer.Pointer [Index]); break; case ACPI_TYPE_PACKAGE: if (Index >= Operand[0]->Package.Count) { Length = Operand[0]->Package.Count; Status = AE_AML_PACKAGE_LIMIT; } ReturnDesc->Reference.TargetType = ACPI_TYPE_PACKAGE; ReturnDesc->Reference.Where = &Operand[0]->Package.Elements [Index]; break; default: ACPI_ERROR ((AE_INFO, "Invalid object type: %X", (Operand[0])->Common.Type)); Status = AE_AML_INTERNAL; goto Cleanup; } /* Failure means that the Index was beyond the end of the object */ if (ACPI_FAILURE (Status)) { ACPI_BIOS_EXCEPTION ((AE_INFO, Status, "Index (0x%X%8.8X) is beyond end of object (length 0x%X)", ACPI_FORMAT_UINT64 (Index), (UINT32) Length)); goto Cleanup; } /* * Save the target object and add a reference to it for the life * of the index */ ReturnDesc->Reference.Object = Operand[0]; AcpiUtAddReference (Operand[0]); /* Store the reference to the Target */ Status = AcpiExStore (ReturnDesc, Operand[2], WalkState); /* Return the reference */ WalkState->ResultObj = ReturnDesc; goto Cleanup; default: ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X", WalkState->Opcode)); Status = AE_AML_BAD_OPCODE; break; } StoreResultToTarget: if (ACPI_SUCCESS (Status)) { /* * Store the result of the operation (which is now in ReturnDesc) into * the Target descriptor. */ Status = AcpiExStore (ReturnDesc, Operand[2], WalkState); if (ACPI_FAILURE (Status)) { goto Cleanup; } if (!WalkState->ResultObj) { WalkState->ResultObj = ReturnDesc; } } Cleanup: /* Delete return object on error */ if (ACPI_FAILURE (Status)) { AcpiUtRemoveReference (ReturnDesc); WalkState->ResultObj = NULL; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExOpcode_2A_0T_1R * * PARAMETERS: WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Execute opcode with 2 arguments, no target, and a return value * ******************************************************************************/ ACPI_STATUS AcpiExOpcode_2A_0T_1R ( ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_OPERAND_OBJECT *ReturnDesc = NULL; ACPI_STATUS Status = AE_OK; BOOLEAN LogicalResult = FALSE; ACPI_FUNCTION_TRACE_STR (ExOpcode_2A_0T_1R, AcpiPsGetOpcodeName (WalkState->Opcode)); /* Create the internal return object */ ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } /* Execute the Opcode */ if (WalkState->OpInfo->Flags & AML_LOGICAL_NUMERIC) { /* LogicalOp (Operand0, Operand1) */ Status = AcpiExDoLogicalNumericOp (WalkState->Opcode, Operand[0]->Integer.Value, Operand[1]->Integer.Value, &LogicalResult); goto StoreLogicalResult; } else if (WalkState->OpInfo->Flags & AML_LOGICAL) { /* LogicalOp (Operand0, Operand1) */ Status = AcpiExDoLogicalOp (WalkState->Opcode, Operand[0], Operand[1], &LogicalResult); goto StoreLogicalResult; } switch (WalkState->Opcode) { case AML_ACQUIRE_OP: /* Acquire (MutexObject, Timeout) */ Status = AcpiExAcquireMutex (Operand[1], Operand[0], WalkState); if (Status == AE_TIME) { LogicalResult = TRUE; /* TRUE = Acquire timed out */ Status = AE_OK; } break; case AML_WAIT_OP: /* Wait (EventObject, Timeout) */ Status = AcpiExSystemWaitEvent (Operand[1], Operand[0]); if (Status == AE_TIME) { LogicalResult = TRUE; /* TRUE, Wait timed out */ Status = AE_OK; } break; default: ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X", WalkState->Opcode)); Status = AE_AML_BAD_OPCODE; goto Cleanup; } StoreLogicalResult: /* * Set return value to according to LogicalResult. logical TRUE (all ones) * Default is FALSE (zero) */ if (LogicalResult) { ReturnDesc->Integer.Value = ACPI_UINT64_MAX; } Cleanup: /* Delete return object on error */ if (ACPI_FAILURE (Status)) { AcpiUtRemoveReference (ReturnDesc); } /* Save return object on success */ else { WalkState->ResultObj = ReturnDesc; } return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exoparg3.c000066400000000000000000000367051465205512700223140ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exoparg3 - AML execution - opcodes with 3 arguments * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "acparser.h" #include "amlcode.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exoparg3") /*! * Naming convention for AML interpreter execution routines. * * The routines that begin execution of AML opcodes are named with a common * convention based upon the number of arguments, the number of target operands, * and whether or not a value is returned: * * AcpiExOpcode_xA_yT_zR * * Where: * * xA - ARGUMENTS: The number of arguments (input operands) that are * required for this opcode type (1 through 6 args). * yT - TARGETS: The number of targets (output operands) that are required * for this opcode type (0, 1, or 2 targets). * zR - RETURN VALUE: Indicates whether this opcode type returns a value * as the function return (0 or 1). * * The AcpiExOpcode* functions are called via the Dispatcher component with * fully resolved operands. !*/ /******************************************************************************* * * FUNCTION: AcpiExOpcode_3A_0T_0R * * PARAMETERS: WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Execute Triadic operator (3 operands) * ******************************************************************************/ ACPI_STATUS AcpiExOpcode_3A_0T_0R ( ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_SIGNAL_FATAL_INFO *Fatal; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE_STR (ExOpcode_3A_0T_0R, AcpiPsGetOpcodeName (WalkState->Opcode)); switch (WalkState->Opcode) { case AML_FATAL_OP: /* Fatal (FatalType FatalCode FatalArg) */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "FatalOp: Type %X Code %X Arg %X " "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n", (UINT32) Operand[0]->Integer.Value, (UINT32) Operand[1]->Integer.Value, (UINT32) Operand[2]->Integer.Value)); Fatal = ACPI_ALLOCATE (sizeof (ACPI_SIGNAL_FATAL_INFO)); if (Fatal) { Fatal->Type = (UINT32) Operand[0]->Integer.Value; Fatal->Code = (UINT32) Operand[1]->Integer.Value; Fatal->Argument = (UINT32) Operand[2]->Integer.Value; } /* Always signal the OS! */ Status = AcpiOsSignal (ACPI_SIGNAL_FATAL, Fatal); /* Might return while OS is shutting down, just continue */ ACPI_FREE (Fatal); goto Cleanup; case AML_EXTERNAL_OP: /* * If the interpreter sees this opcode, just ignore it. The External * op is intended for use by disassemblers in order to properly * disassemble control method invocations. The opcode or group of * opcodes should be surrounded by an "if (0)" clause to ensure that * AML interpreters never see the opcode. Thus, something is * wrong if an external opcode ever gets here. */ ACPI_ERROR ((AE_INFO, "Executed External Op")); Status = AE_OK; goto Cleanup; default: ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X", WalkState->Opcode)); Status = AE_AML_BAD_OPCODE; goto Cleanup; } Cleanup: return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExOpcode_3A_1T_1R * * PARAMETERS: WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Execute Triadic operator (3 operands) * ******************************************************************************/ ACPI_STATUS AcpiExOpcode_3A_1T_1R ( ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_OPERAND_OBJECT *ReturnDesc = NULL; char *Buffer = NULL; ACPI_STATUS Status = AE_OK; UINT64 Index; ACPI_SIZE Length; ACPI_FUNCTION_TRACE_STR (ExOpcode_3A_1T_1R, AcpiPsGetOpcodeName (WalkState->Opcode)); switch (WalkState->Opcode) { case AML_MID_OP: /* Mid (Source[0], Index[1], Length[2], Result[3]) */ /* * Create the return object. The Source operand is guaranteed to be * either a String or a Buffer, so just use its type. */ ReturnDesc = AcpiUtCreateInternalObject ( (Operand[0])->Common.Type); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } /* Get the Integer values from the objects */ Index = Operand[1]->Integer.Value; Length = (ACPI_SIZE) Operand[2]->Integer.Value; /* * If the index is beyond the length of the String/Buffer, or if the * requested length is zero, return a zero-length String/Buffer */ if (Index >= Operand[0]->String.Length) { Length = 0; } /* Truncate request if larger than the actual String/Buffer */ else if ((Index + Length) > Operand[0]->String.Length) { Length = (ACPI_SIZE) Operand[0]->String.Length - (ACPI_SIZE) Index; } /* Strings always have a sub-pointer, not so for buffers */ switch ((Operand[0])->Common.Type) { case ACPI_TYPE_STRING: /* Always allocate a new buffer for the String */ Buffer = ACPI_ALLOCATE_ZEROED ((ACPI_SIZE) Length + 1); if (!Buffer) { Status = AE_NO_MEMORY; goto Cleanup; } break; case ACPI_TYPE_BUFFER: /* If the requested length is zero, don't allocate a buffer */ if (Length > 0) { /* Allocate a new buffer for the Buffer */ Buffer = ACPI_ALLOCATE_ZEROED (Length); if (!Buffer) { Status = AE_NO_MEMORY; goto Cleanup; } } break; default: /* Should not happen */ Status = AE_AML_OPERAND_TYPE; goto Cleanup; } if (Buffer) { /* We have a buffer, copy the portion requested */ memcpy (Buffer, Operand[0]->String.Pointer + Index, Length); } /* Set the length of the new String/Buffer */ ReturnDesc->String.Pointer = Buffer; ReturnDesc->String.Length = (UINT32) Length; /* Mark buffer initialized */ ReturnDesc->Buffer.Flags |= AOPOBJ_DATA_VALID; break; default: ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X", WalkState->Opcode)); Status = AE_AML_BAD_OPCODE; goto Cleanup; } /* Store the result in the target */ Status = AcpiExStore (ReturnDesc, Operand[3], WalkState); Cleanup: /* Delete return object on error */ if (ACPI_FAILURE (Status) || WalkState->ResultObj) { AcpiUtRemoveReference (ReturnDesc); WalkState->ResultObj = NULL; } else { /* Set the return object and exit */ WalkState->ResultObj = ReturnDesc; } return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exoparg6.c000066400000000000000000000416631465205512700223160ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exoparg6 - AML execution - opcodes with 6 arguments * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "acparser.h" #include "amlcode.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exoparg6") /*! * Naming convention for AML interpreter execution routines. * * The routines that begin execution of AML opcodes are named with a common * convention based upon the number of arguments, the number of target operands, * and whether or not a value is returned: * * AcpiExOpcode_xA_yT_zR * * Where: * * xA - ARGUMENTS: The number of arguments (input operands) that are * required for this opcode type (1 through 6 args). * yT - TARGETS: The number of targets (output operands) that are required * for this opcode type (0, 1, or 2 targets). * zR - RETURN VALUE: Indicates whether this opcode type returns a value * as the function return (0 or 1). * * The AcpiExOpcode* functions are called via the Dispatcher component with * fully resolved operands. !*/ /* Local prototypes */ static BOOLEAN AcpiExDoMatch ( UINT32 MatchOp, ACPI_OPERAND_OBJECT *PackageObj, ACPI_OPERAND_OBJECT *MatchObj); /******************************************************************************* * * FUNCTION: AcpiExDoMatch * * PARAMETERS: MatchOp - The AML match operand * PackageObj - Object from the target package * MatchObj - Object to be matched * * RETURN: TRUE if the match is successful, FALSE otherwise * * DESCRIPTION: Implements the low-level match for the ASL Match operator. * Package elements will be implicitly converted to the type of * the match object (Integer/Buffer/String). * ******************************************************************************/ static BOOLEAN AcpiExDoMatch ( UINT32 MatchOp, ACPI_OPERAND_OBJECT *PackageObj, ACPI_OPERAND_OBJECT *MatchObj) { BOOLEAN LogicalResult = TRUE; ACPI_STATUS Status; /* * Note: Since the PackageObj/MatchObj ordering is opposite to that of * the standard logical operators, we have to reverse them when we call * DoLogicalOp in order to make the implicit conversion rules work * correctly. However, this means we have to flip the entire equation * also. A bit ugly perhaps, but overall, better than fussing the * parameters around at runtime, over and over again. * * Below, P[i] refers to the package element, M refers to the Match object. */ switch (MatchOp) { case MATCH_MTR: /* Always true */ break; case MATCH_MEQ: /* * True if equal: (P[i] == M) * Change to: (M == P[i]) */ Status = AcpiExDoLogicalOp ( AML_LOGICAL_EQUAL_OP, MatchObj, PackageObj, &LogicalResult); if (ACPI_FAILURE (Status)) { return (FALSE); } break; case MATCH_MLE: /* * True if less than or equal: (P[i] <= M) (P[i] NotGreater than M) * Change to: (M >= P[i]) (M NotLess than P[i]) */ Status = AcpiExDoLogicalOp ( AML_LOGICAL_LESS_OP, MatchObj, PackageObj, &LogicalResult); if (ACPI_FAILURE (Status)) { return (FALSE); } LogicalResult = (BOOLEAN) !LogicalResult; break; case MATCH_MLT: /* * True if less than: (P[i] < M) * Change to: (M > P[i]) */ Status = AcpiExDoLogicalOp ( AML_LOGICAL_GREATER_OP, MatchObj, PackageObj, &LogicalResult); if (ACPI_FAILURE (Status)) { return (FALSE); } break; case MATCH_MGE: /* * True if greater than or equal: (P[i] >= M) (P[i] NotLess than M) * Change to: (M <= P[i]) (M NotGreater than P[i]) */ Status = AcpiExDoLogicalOp ( AML_LOGICAL_GREATER_OP, MatchObj, PackageObj, &LogicalResult); if (ACPI_FAILURE (Status)) { return (FALSE); } LogicalResult = (BOOLEAN)!LogicalResult; break; case MATCH_MGT: /* * True if greater than: (P[i] > M) * Change to: (M < P[i]) */ Status = AcpiExDoLogicalOp ( AML_LOGICAL_LESS_OP, MatchObj, PackageObj, &LogicalResult); if (ACPI_FAILURE (Status)) { return (FALSE); } break; default: /* Undefined */ return (FALSE); } return (LogicalResult); } /******************************************************************************* * * FUNCTION: AcpiExOpcode_6A_0T_1R * * PARAMETERS: WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Execute opcode with 6 arguments, no target, and a return value * ******************************************************************************/ ACPI_STATUS AcpiExOpcode_6A_0T_1R ( ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_OPERAND_OBJECT *ReturnDesc = NULL; ACPI_STATUS Status = AE_OK; UINT64 Index; ACPI_OPERAND_OBJECT *ThisElement; ACPI_FUNCTION_TRACE_STR (ExOpcode_6A_0T_1R, AcpiPsGetOpcodeName (WalkState->Opcode)); switch (WalkState->Opcode) { case AML_MATCH_OP: /* * Match (SearchPkg[0], MatchOp1[1], MatchObj1[2], * MatchOp2[3], MatchObj2[4], StartIndex[5]) */ /* Validate both Match Term Operators (MTR, MEQ, etc.) */ if ((Operand[1]->Integer.Value > MAX_MATCH_OPERATOR) || (Operand[3]->Integer.Value > MAX_MATCH_OPERATOR)) { ACPI_ERROR ((AE_INFO, "Match operator out of range")); Status = AE_AML_OPERAND_VALUE; goto Cleanup; } /* Get the package StartIndex, validate against the package length */ Index = Operand[5]->Integer.Value; if (Index >= Operand[0]->Package.Count) { ACPI_ERROR ((AE_INFO, "Index (0x%8.8X%8.8X) beyond package end (0x%X)", ACPI_FORMAT_UINT64 (Index), Operand[0]->Package.Count)); Status = AE_AML_PACKAGE_LIMIT; goto Cleanup; } /* Create an integer for the return value */ /* Default return value is ACPI_UINT64_MAX if no match found */ ReturnDesc = AcpiUtCreateIntegerObject (ACPI_UINT64_MAX); if (!ReturnDesc) { Status = AE_NO_MEMORY; goto Cleanup; } /* * Examine each element until a match is found. Both match conditions * must be satisfied for a match to occur. Within the loop, * "continue" signifies that the current element does not match * and the next should be examined. * * Upon finding a match, the loop will terminate via "break" at * the bottom. If it terminates "normally", MatchValue will be * ACPI_UINT64_MAX (Ones) (its initial value) indicating that no * match was found. */ for ( ; Index < Operand[0]->Package.Count; Index++) { /* Get the current package element */ ThisElement = Operand[0]->Package.Elements[Index]; /* Treat any uninitialized (NULL) elements as non-matching */ if (!ThisElement) { continue; } /* * Both match conditions must be satisfied. Execution of a continue * (proceed to next iteration of enclosing for loop) signifies a * non-match. */ if (!AcpiExDoMatch ((UINT32) Operand[1]->Integer.Value, ThisElement, Operand[2])) { continue; } if (!AcpiExDoMatch ((UINT32) Operand[3]->Integer.Value, ThisElement, Operand[4])) { continue; } /* Match found: Index is the return value */ ReturnDesc->Integer.Value = Index; break; } break; case AML_LOAD_TABLE_OP: Status = AcpiExLoadTableOp (WalkState, &ReturnDesc); break; default: ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X", WalkState->Opcode)); Status = AE_AML_BAD_OPCODE; goto Cleanup; } Cleanup: /* Delete return object on error */ if (ACPI_FAILURE (Status)) { AcpiUtRemoveReference (ReturnDesc); } /* Save return object on success */ else { WalkState->ResultObj = ReturnDesc; } return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exprep.c000066400000000000000000000674561465205512700220760ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exprep - ACPI AML field prep utilities * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "amlcode.h" #include "acnamesp.h" #include "acdispat.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exprep") /* Local prototypes */ static UINT32 AcpiExDecodeFieldAccess ( ACPI_OPERAND_OBJECT *ObjDesc, UINT8 FieldFlags, UINT32 *ReturnByteAlignment); #ifdef ACPI_UNDER_DEVELOPMENT static UINT32 AcpiExGenerateAccess ( UINT32 FieldBitOffset, UINT32 FieldBitLength, UINT32 RegionLength); /******************************************************************************* * * FUNCTION: AcpiExGenerateAccess * * PARAMETERS: FieldBitOffset - Start of field within parent region/buffer * FieldBitLength - Length of field in bits * RegionLength - Length of parent in bytes * * RETURN: Field granularity (8, 16, 32 or 64) and * ByteAlignment (1, 2, 3, or 4) * * DESCRIPTION: Generate an optimal access width for fields defined with the * AnyAcc keyword. * * NOTE: Need to have the RegionLength in order to check for boundary * conditions (end-of-region). However, the RegionLength is a deferred * operation. Therefore, to complete this implementation, the generation * of this access width must be deferred until the region length has * been evaluated. * ******************************************************************************/ static UINT32 AcpiExGenerateAccess ( UINT32 FieldBitOffset, UINT32 FieldBitLength, UINT32 RegionLength) { UINT32 FieldByteLength; UINT32 FieldByteOffset; UINT32 FieldByteEndOffset; UINT32 AccessByteWidth; UINT32 FieldStartOffset; UINT32 FieldEndOffset; UINT32 MinimumAccessWidth = 0xFFFFFFFF; UINT32 MinimumAccesses = 0xFFFFFFFF; UINT32 Accesses; ACPI_FUNCTION_TRACE (ExGenerateAccess); /* Round Field start offset and length to "minimal" byte boundaries */ FieldByteOffset = ACPI_DIV_8 ( ACPI_ROUND_DOWN (FieldBitOffset, 8)); FieldByteEndOffset = ACPI_DIV_8 ( ACPI_ROUND_UP (FieldBitLength + FieldBitOffset, 8)); FieldByteLength = FieldByteEndOffset - FieldByteOffset; ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Bit length %u, Bit offset %u\n", FieldBitLength, FieldBitOffset)); ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Byte Length %u, Byte Offset %u, End Offset %u\n", FieldByteLength, FieldByteOffset, FieldByteEndOffset)); /* * Iterative search for the maximum access width that is both aligned * and does not go beyond the end of the region * * Start at ByteAcc and work upwards to QwordAcc max. (1,2,4,8 bytes) */ for (AccessByteWidth = 1; AccessByteWidth <= 8; AccessByteWidth <<= 1) { /* * 1) Round end offset up to next access boundary and make sure that * this does not go beyond the end of the parent region. * 2) When the Access width is greater than the FieldByteLength, we * are done. (This does not optimize for the perfectly aligned * case yet). */ if (ACPI_ROUND_UP (FieldByteEndOffset, AccessByteWidth) <= RegionLength) { FieldStartOffset = ACPI_ROUND_DOWN (FieldByteOffset, AccessByteWidth) / AccessByteWidth; FieldEndOffset = ACPI_ROUND_UP ((FieldByteLength + FieldByteOffset), AccessByteWidth) / AccessByteWidth; Accesses = FieldEndOffset - FieldStartOffset; ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "AccessWidth %u end is within region\n", AccessByteWidth)); ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Field Start %u, Field End %u -- requires %u accesses\n", FieldStartOffset, FieldEndOffset, Accesses)); /* Single access is optimal */ if (Accesses <= 1) { ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Entire field can be accessed " "with one operation of size %u\n", AccessByteWidth)); return_VALUE (AccessByteWidth); } /* * Fits in the region, but requires more than one read/write. * try the next wider access on next iteration */ if (Accesses < MinimumAccesses) { MinimumAccesses = Accesses; MinimumAccessWidth = AccessByteWidth; } } else { ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "AccessWidth %u end is NOT within region\n", AccessByteWidth)); if (AccessByteWidth == 1) { ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Field goes beyond end-of-region!\n")); /* Field does not fit in the region at all */ return_VALUE (0); } /* * This width goes beyond the end-of-region, back off to * previous access */ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Backing off to previous optimal access width of %u\n", MinimumAccessWidth)); return_VALUE (MinimumAccessWidth); } } /* * Could not read/write field with one operation, * just use max access width */ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Cannot access field in one operation, using width 8\n")); return_VALUE (8); } #endif /* ACPI_UNDER_DEVELOPMENT */ /******************************************************************************* * * FUNCTION: AcpiExDecodeFieldAccess * * PARAMETERS: ObjDesc - Field object * FieldFlags - Encoded fieldflags (contains access bits) * ReturnByteAlignment - Where the byte alignment is returned * * RETURN: Field granularity (8, 16, 32 or 64) and * ByteAlignment (1, 2, 3, or 4) * * DESCRIPTION: Decode the AccessType bits of a field definition. * ******************************************************************************/ static UINT32 AcpiExDecodeFieldAccess ( ACPI_OPERAND_OBJECT *ObjDesc, UINT8 FieldFlags, UINT32 *ReturnByteAlignment) { UINT32 Access; UINT32 ByteAlignment; UINT32 BitLength; ACPI_FUNCTION_TRACE (ExDecodeFieldAccess); Access = (FieldFlags & AML_FIELD_ACCESS_TYPE_MASK); switch (Access) { case AML_FIELD_ACCESS_ANY: #ifdef ACPI_UNDER_DEVELOPMENT ByteAlignment = AcpiExGenerateAccess (ObjDesc->CommonField.StartFieldBitOffset, ObjDesc->CommonField.BitLength, 0xFFFFFFFF /* Temp until we pass RegionLength as parameter */); BitLength = ByteAlignment * 8; #endif ByteAlignment = 1; BitLength = 8; break; case AML_FIELD_ACCESS_BYTE: case AML_FIELD_ACCESS_BUFFER: /* ACPI 2.0 (SMBus Buffer) */ ByteAlignment = 1; BitLength = 8; break; case AML_FIELD_ACCESS_WORD: ByteAlignment = 2; BitLength = 16; break; case AML_FIELD_ACCESS_DWORD: ByteAlignment = 4; BitLength = 32; break; case AML_FIELD_ACCESS_QWORD: /* ACPI 2.0 */ ByteAlignment = 8; BitLength = 64; break; default: /* Invalid field access type */ ACPI_ERROR ((AE_INFO, "Unknown field access type 0x%X", Access)); return_UINT32 (0); } if (ObjDesc->Common.Type == ACPI_TYPE_BUFFER_FIELD) { /* * BufferField access can be on any byte boundary, so the * ByteAlignment is always 1 byte -- regardless of any ByteAlignment * implied by the field access type. */ ByteAlignment = 1; } *ReturnByteAlignment = ByteAlignment; return_UINT32 (BitLength); } /******************************************************************************* * * FUNCTION: AcpiExPrepCommonFieldObject * * PARAMETERS: ObjDesc - The field object * FieldFlags - Access, LockRule, and UpdateRule. * The format of a FieldFlag is described * in the ACPI specification * FieldAttribute - Special attributes (not used) * FieldBitPosition - Field start position * FieldBitLength - Field length in number of bits * * RETURN: Status * * DESCRIPTION: Initialize the areas of the field object that are common * to the various types of fields. Note: This is very "sensitive" * code because we are solving the general case for field * alignment. * ******************************************************************************/ ACPI_STATUS AcpiExPrepCommonFieldObject ( ACPI_OPERAND_OBJECT *ObjDesc, UINT8 FieldFlags, UINT8 FieldAttribute, UINT32 FieldBitPosition, UINT32 FieldBitLength) { UINT32 AccessBitWidth; UINT32 ByteAlignment; UINT32 NearestByteAddress; ACPI_FUNCTION_TRACE (ExPrepCommonFieldObject); /* * Note: the structure being initialized is the * ACPI_COMMON_FIELD_INFO; No structure fields outside of the common * area are initialized by this procedure. */ ObjDesc->CommonField.FieldFlags = FieldFlags; ObjDesc->CommonField.Attribute = FieldAttribute; ObjDesc->CommonField.BitLength = FieldBitLength; /* * Decode the access type so we can compute offsets. The access type gives * two pieces of information - the width of each field access and the * necessary ByteAlignment (address granularity) of the access. * * For AnyAcc, the AccessBitWidth is the largest width that is both * necessary and possible in an attempt to access the whole field in one * I/O operation. However, for AnyAcc, the ByteAlignment is always one * byte. * * For all Buffer Fields, the ByteAlignment is always one byte. * * For all other access types (Byte, Word, Dword, Qword), the Bitwidth is * the same (equivalent) as the ByteAlignment. */ AccessBitWidth = AcpiExDecodeFieldAccess ( ObjDesc, FieldFlags, &ByteAlignment); if (!AccessBitWidth) { return_ACPI_STATUS (AE_AML_OPERAND_VALUE); } /* Setup width (access granularity) fields (values are: 1, 2, 4, 8) */ ObjDesc->CommonField.AccessByteWidth = (UINT8) ACPI_DIV_8 (AccessBitWidth); /* * BaseByteOffset is the address of the start of the field within the * region. It is the byte address of the first *datum* (field-width data * unit) of the field. (i.e., the first datum that contains at least the * first *bit* of the field.) * * Note: ByteAlignment is always either equal to the AccessBitWidth or 8 * (Byte access), and it defines the addressing granularity of the parent * region or buffer. */ NearestByteAddress = ACPI_ROUND_BITS_DOWN_TO_BYTES (FieldBitPosition); ObjDesc->CommonField.BaseByteOffset = (UINT32) ACPI_ROUND_DOWN (NearestByteAddress, ByteAlignment); /* * StartFieldBitOffset is the offset of the first bit of the field within * a field datum. */ ObjDesc->CommonField.StartFieldBitOffset = (UINT8) (FieldBitPosition - ACPI_MUL_8 (ObjDesc->CommonField.BaseByteOffset)); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExPrepFieldValue * * PARAMETERS: Info - Contains all field creation info * * RETURN: Status * * DESCRIPTION: Construct an object of type ACPI_OPERAND_OBJECT with a * subtype of DefField and connect it to the parent Node. * ******************************************************************************/ ACPI_STATUS AcpiExPrepFieldValue ( ACPI_CREATE_FIELD_INFO *Info) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *SecondDesc = NULL; ACPI_STATUS Status; UINT32 AccessByteWidth; UINT32 Type; ACPI_FUNCTION_TRACE (ExPrepFieldValue); /* Parameter validation */ if (Info->FieldType != ACPI_TYPE_LOCAL_INDEX_FIELD) { if (!Info->RegionNode) { ACPI_ERROR ((AE_INFO, "Null RegionNode")); return_ACPI_STATUS (AE_AML_NO_OPERAND); } Type = AcpiNsGetType (Info->RegionNode); if (Type != ACPI_TYPE_REGION) { ACPI_ERROR ((AE_INFO, "Needed Region, found type 0x%X (%s)", Type, AcpiUtGetTypeName (Type))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } } /* Allocate a new field object */ ObjDesc = AcpiUtCreateInternalObject (Info->FieldType); if (!ObjDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Initialize areas of the object that are common to all fields */ ObjDesc->CommonField.Node = Info->FieldNode; Status = AcpiExPrepCommonFieldObject (ObjDesc, Info->FieldFlags, Info->Attribute, Info->FieldBitPosition, Info->FieldBitLength); if (ACPI_FAILURE (Status)) { AcpiUtDeleteObjectDesc (ObjDesc); return_ACPI_STATUS (Status); } /* Initialize areas of the object that are specific to the field type */ switch (Info->FieldType) { case ACPI_TYPE_LOCAL_REGION_FIELD: ObjDesc->Field.RegionObj = AcpiNsGetAttachedObject (Info->RegionNode); /* Fields specific to GenericSerialBus fields */ ObjDesc->Field.AccessLength = Info->AccessLength; if (Info->ConnectionNode) { SecondDesc = Info->ConnectionNode->Object; if (!(SecondDesc->Common.Flags & AOPOBJ_DATA_VALID)) { Status = AcpiDsGetBufferArguments (SecondDesc); if (ACPI_FAILURE (Status)) { AcpiUtDeleteObjectDesc (ObjDesc); return_ACPI_STATUS (Status); } } ObjDesc->Field.ResourceBuffer = SecondDesc->Buffer.Pointer; ObjDesc->Field.ResourceLength = (UINT16) SecondDesc->Buffer.Length; } else if (Info->ResourceBuffer) { ObjDesc->Field.ResourceBuffer = Info->ResourceBuffer; ObjDesc->Field.ResourceLength = Info->ResourceLength; } ObjDesc->Field.PinNumberIndex = Info->PinNumberIndex; /* Allow full data read from EC address space */ if ((ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_EC) && (ObjDesc->CommonField.BitLength > 8)) { AccessByteWidth = ACPI_ROUND_BITS_UP_TO_BYTES ( ObjDesc->CommonField.BitLength); /* Maximum byte width supported is 255 */ if (AccessByteWidth < 256) { ObjDesc->CommonField.AccessByteWidth = (UINT8) AccessByteWidth; } } ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "RegionField: BitOff %X, Off %X, Gran %X, Region %p\n", ObjDesc->Field.StartFieldBitOffset, ObjDesc->Field.BaseByteOffset, ObjDesc->Field.AccessByteWidth, ObjDesc->Field.RegionObj)); break; case ACPI_TYPE_LOCAL_BANK_FIELD: ObjDesc->BankField.Value = Info->BankValue; ObjDesc->BankField.RegionObj = AcpiNsGetAttachedObject (Info->RegionNode); ObjDesc->BankField.BankObj = AcpiNsGetAttachedObject (Info->RegisterNode); /* An additional reference for the attached objects */ AcpiUtAddReference (ObjDesc->BankField.RegionObj); AcpiUtAddReference (ObjDesc->BankField.BankObj); ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Bank Field: BitOff %X, Off %X, Gran %X, Region %p, BankReg %p\n", ObjDesc->BankField.StartFieldBitOffset, ObjDesc->BankField.BaseByteOffset, ObjDesc->Field.AccessByteWidth, ObjDesc->BankField.RegionObj, ObjDesc->BankField.BankObj)); /* * Remember location in AML stream of the field unit * opcode and operands -- since the BankValue * operands must be evaluated. */ SecondDesc = ObjDesc->Common.NextObject; SecondDesc->Extra.AmlStart = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Info->DataRegisterNode)->Named.Data; SecondDesc->Extra.AmlLength = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Info->DataRegisterNode)->Named.Length; break; case ACPI_TYPE_LOCAL_INDEX_FIELD: /* Get the Index and Data registers */ ObjDesc->IndexField.IndexObj = AcpiNsGetAttachedObject (Info->RegisterNode); ObjDesc->IndexField.DataObj = AcpiNsGetAttachedObject (Info->DataRegisterNode); if (!ObjDesc->IndexField.DataObj || !ObjDesc->IndexField.IndexObj) { ACPI_ERROR ((AE_INFO, "Null Index Object during field prep")); AcpiUtDeleteObjectDesc (ObjDesc); return_ACPI_STATUS (AE_AML_INTERNAL); } /* An additional reference for the attached objects */ AcpiUtAddReference (ObjDesc->IndexField.DataObj); AcpiUtAddReference (ObjDesc->IndexField.IndexObj); /* * April 2006: Changed to match MS behavior * * The value written to the Index register is the byte offset of the * target field in units of the granularity of the IndexField * * Previously, the value was calculated as an index in terms of the * width of the Data register, as below: * * ObjDesc->IndexField.Value = (UINT32) * (Info->FieldBitPosition / ACPI_MUL_8 ( * ObjDesc->Field.AccessByteWidth)); * * February 2006: Tried value as a byte offset: * ObjDesc->IndexField.Value = (UINT32) * ACPI_DIV_8 (Info->FieldBitPosition); */ ObjDesc->IndexField.Value = (UINT32) ACPI_ROUND_DOWN ( ACPI_DIV_8 (Info->FieldBitPosition), ObjDesc->IndexField.AccessByteWidth); ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "IndexField: BitOff %X, Off %X, Value %X, " "Gran %X, Index %p, Data %p\n", ObjDesc->IndexField.StartFieldBitOffset, ObjDesc->IndexField.BaseByteOffset, ObjDesc->IndexField.Value, ObjDesc->Field.AccessByteWidth, ObjDesc->IndexField.IndexObj, ObjDesc->IndexField.DataObj)); break; default: /* No other types should get here */ break; } /* * Store the constructed descriptor (ObjDesc) into the parent Node, * preserving the current type of that NamedObj. */ Status = AcpiNsAttachObject ( Info->FieldNode, ObjDesc, AcpiNsGetType (Info->FieldNode)); ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Set NamedObj %p [%4.4s], ObjDesc %p\n", Info->FieldNode, AcpiUtGetNodeName (Info->FieldNode), ObjDesc)); /* Remove local reference to the object */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exregion.c000066400000000000000000000601761465205512700224030ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exregion - ACPI default OpRegion (address space) handlers * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exregion") /******************************************************************************* * * FUNCTION: AcpiExSystemMemorySpaceHandler * * PARAMETERS: Function - Read or Write operation * Address - Where in the space to read or write * BitWidth - Field width in bits (8, 16, or 32) * Value - Pointer to in or out value * HandlerContext - Pointer to Handler's context * RegionContext - Pointer to context specific to the * accessed region * * RETURN: Status * * DESCRIPTION: Handler for the System Memory address space (Op Region) * ******************************************************************************/ ACPI_STATUS AcpiExSystemMemorySpaceHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext) { ACPI_STATUS Status = AE_OK; void *LogicalAddrPtr = NULL; ACPI_MEM_SPACE_CONTEXT *MemInfo = RegionContext; ACPI_MEM_MAPPING *Mm = MemInfo->CurMm; UINT32 Length; ACPI_SIZE MapLength; ACPI_SIZE PageBoundaryMapLength; #ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED UINT32 Remainder; #endif ACPI_FUNCTION_TRACE (ExSystemMemorySpaceHandler); /* Validate and translate the bit width */ switch (BitWidth) { case 8: Length = 1; break; case 16: Length = 2; break; case 32: Length = 4; break; case 64: Length = 8; break; default: ACPI_ERROR ((AE_INFO, "Invalid SystemMemory width %u", BitWidth)); return_ACPI_STATUS (AE_AML_OPERAND_VALUE); } #ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED /* * Hardware does not support non-aligned data transfers, we must verify * the request. */ (void) AcpiUtShortDivide ((UINT64) Address, Length, NULL, &Remainder); if (Remainder != 0) { return_ACPI_STATUS (AE_AML_ALIGNMENT); } #endif /* * Does the request fit into the cached memory mapping? * Is 1) Address below the current mapping? OR * 2) Address beyond the current mapping? */ if (!Mm || (Address < Mm->PhysicalAddress) || ((UINT64) Address + Length > (UINT64) Mm->PhysicalAddress + Mm->Length)) { /* * The request cannot be resolved by the current memory mapping. * * Look for an existing saved mapping covering the address range * at hand. If found, save it as the current one and carry out * the access. */ for (Mm = MemInfo->FirstMm; Mm; Mm = Mm->NextMm) { if (Mm == MemInfo->CurMm) { continue; } if (Address < Mm->PhysicalAddress) { continue; } if ((UINT64) Address + Length > (UINT64) Mm->PhysicalAddress + Mm->Length) { continue; } MemInfo->CurMm = Mm; goto access; } /* Create a new mappings list entry */ Mm = ACPI_ALLOCATE_ZEROED(sizeof(*Mm)); if (!Mm) { ACPI_ERROR((AE_INFO, "Unable to save memory mapping at 0x%8.8X%8.8X, size %u", ACPI_FORMAT_UINT64(Address), Length)); return_ACPI_STATUS(AE_NO_MEMORY); } /* * October 2009: Attempt to map from the requested address to the * end of the region. However, we will never map more than one * page, nor will we cross a page boundary. */ MapLength = (ACPI_SIZE) ((MemInfo->Address + MemInfo->Length) - Address); /* * If mapping the entire remaining portion of the region will cross * a page boundary, just map up to the page boundary, do not cross. * On some systems, crossing a page boundary while mapping regions * can cause warnings if the pages have different attributes * due to resource management. * * This has the added benefit of constraining a single mapping to * one page, which is similar to the original code that used a 4k * maximum window. */ PageBoundaryMapLength = (ACPI_SIZE) (ACPI_ROUND_UP (Address, ACPI_DEFAULT_PAGE_SIZE) - Address); if (PageBoundaryMapLength == 0) { PageBoundaryMapLength = ACPI_DEFAULT_PAGE_SIZE; } if (MapLength > PageBoundaryMapLength) { MapLength = PageBoundaryMapLength; } /* Create a new mapping starting at the address given */ LogicalAddrPtr = AcpiOsMapMemory(Address, MapLength); if (!LogicalAddrPtr) { ACPI_ERROR ((AE_INFO, "Could not map memory at 0x%8.8X%8.8X, size %u", ACPI_FORMAT_UINT64 (Address), (UINT32) MapLength)); ACPI_FREE(Mm); return_ACPI_STATUS (AE_NO_MEMORY); } /* Save the physical address and mapping size */ Mm->LogicalAddress = LogicalAddrPtr; Mm->PhysicalAddress = Address; Mm->Length = MapLength; /* * Add the new entry to the mappigs list and save it as the * current mapping. */ Mm->NextMm = MemInfo->FirstMm; MemInfo->FirstMm = Mm; MemInfo->CurMm = Mm; } access: /* * Generate a logical pointer corresponding to the address we want to * access */ LogicalAddrPtr = Mm->LogicalAddress + ((UINT64) Address - (UINT64) Mm->PhysicalAddress); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "System-Memory (width %u) R/W %u Address=%8.8X%8.8X\n", BitWidth, Function, ACPI_FORMAT_UINT64 (Address))); /* * Perform the memory read or write * * Note: For machines that do not support non-aligned transfers, the target * address was checked for alignment above. We do not attempt to break the * transfer up into smaller (byte-size) chunks because the AML specifically * asked for a transfer width that the hardware may require. */ switch (Function) { case ACPI_READ: *Value = 0; switch (BitWidth) { case 8: *Value = (UINT64) ACPI_GET8 (LogicalAddrPtr); break; case 16: *Value = (UINT64) ACPI_GET16 (LogicalAddrPtr); break; case 32: *Value = (UINT64) ACPI_GET32 (LogicalAddrPtr); break; case 64: *Value = (UINT64) ACPI_GET64 (LogicalAddrPtr); break; default: /* BitWidth was already validated */ break; } break; case ACPI_WRITE: switch (BitWidth) { case 8: ACPI_SET8 (LogicalAddrPtr, *Value); break; case 16: ACPI_SET16 (LogicalAddrPtr, *Value); break; case 32: ACPI_SET32 (LogicalAddrPtr, *Value); break; case 64: ACPI_SET64 (LogicalAddrPtr, *Value); break; default: /* BitWidth was already validated */ break; } break; default: Status = AE_BAD_PARAMETER; break; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExSystemIoSpaceHandler * * PARAMETERS: Function - Read or Write operation * Address - Where in the space to read or write * BitWidth - Field width in bits (8, 16, or 32) * Value - Pointer to in or out value * HandlerContext - Pointer to Handler's context * RegionContext - Pointer to context specific to the * accessed region * * RETURN: Status * * DESCRIPTION: Handler for the System IO address space (Op Region) * ******************************************************************************/ ACPI_STATUS AcpiExSystemIoSpaceHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext) { ACPI_STATUS Status = AE_OK; UINT32 Value32; ACPI_FUNCTION_TRACE (ExSystemIoSpaceHandler); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "System-IO (width %u) R/W %u Address=%8.8X%8.8X\n", BitWidth, Function, ACPI_FORMAT_UINT64 (Address))); /* Decode the function parameter */ switch (Function) { case ACPI_READ: Status = AcpiHwReadPort ((ACPI_IO_ADDRESS) Address, &Value32, BitWidth); *Value = Value32; break; case ACPI_WRITE: Status = AcpiHwWritePort ((ACPI_IO_ADDRESS) Address, (UINT32) *Value, BitWidth); break; default: Status = AE_BAD_PARAMETER; break; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExPciConfigSpaceHandler * * PARAMETERS: Function - Read or Write operation * Address - Where in the space to read or write * BitWidth - Field width in bits (8, 16, or 32) * Value - Pointer to in or out value * HandlerContext - Pointer to Handler's context * RegionContext - Pointer to context specific to the * accessed region * * RETURN: Status * * DESCRIPTION: Handler for the PCI Config address space (Op Region) * ******************************************************************************/ ACPI_STATUS AcpiExPciConfigSpaceHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext) { ACPI_STATUS Status = AE_OK; ACPI_PCI_ID *PciId; UINT16 PciRegister; ACPI_FUNCTION_TRACE (ExPciConfigSpaceHandler); /* * The arguments to AcpiOs(Read|Write)PciConfiguration are: * * PciSegment is the PCI bus segment range 0-31 * PciBus is the PCI bus number range 0-255 * PciDevice is the PCI device number range 0-31 * PciFunction is the PCI device function number * PciRegister is the Config space register range 0-255 bytes * * Value - input value for write, output address for read * */ PciId = (ACPI_PCI_ID *) RegionContext; PciRegister = (UINT16) (UINT32) Address; ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Pci-Config %u (%u) Seg(%04x) Bus(%04x) " "Dev(%04x) Func(%04x) Reg(%04x)\n", Function, BitWidth, PciId->Segment, PciId->Bus, PciId->Device, PciId->Function, PciRegister)); switch (Function) { case ACPI_READ: *Value = 0; Status = AcpiOsReadPciConfiguration ( PciId, PciRegister, Value, BitWidth); break; case ACPI_WRITE: Status = AcpiOsWritePciConfiguration ( PciId, PciRegister, *Value, BitWidth); break; default: Status = AE_BAD_PARAMETER; break; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExCmosSpaceHandler * * PARAMETERS: Function - Read or Write operation * Address - Where in the space to read or write * BitWidth - Field width in bits (8, 16, or 32) * Value - Pointer to in or out value * HandlerContext - Pointer to Handler's context * RegionContext - Pointer to context specific to the * accessed region * * RETURN: Status * * DESCRIPTION: Handler for the CMOS address space (Op Region) * ******************************************************************************/ ACPI_STATUS AcpiExCmosSpaceHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (ExCmosSpaceHandler); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExPciBarSpaceHandler * * PARAMETERS: Function - Read or Write operation * Address - Where in the space to read or write * BitWidth - Field width in bits (8, 16, or 32) * Value - Pointer to in or out value * HandlerContext - Pointer to Handler's context * RegionContext - Pointer to context specific to the * accessed region * * RETURN: Status * * DESCRIPTION: Handler for the PCI BarTarget address space (Op Region) * ******************************************************************************/ ACPI_STATUS AcpiExPciBarSpaceHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (ExPciBarSpaceHandler); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExDataTableSpaceHandler * * PARAMETERS: Function - Read or Write operation * Address - Where in the space to read or write * BitWidth - Field width in bits (8, 16, or 32) * Value - Pointer to in or out value * HandlerContext - Pointer to Handler's context * RegionContext - Pointer to context specific to the * accessed region * * RETURN: Status * * DESCRIPTION: Handler for the Data Table address space (Op Region) * ******************************************************************************/ ACPI_STATUS AcpiExDataTableSpaceHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext) { ACPI_DATA_TABLE_MAPPING *Mapping; char *Pointer; ACPI_FUNCTION_TRACE (ExDataTableSpaceHandler); Mapping = (ACPI_DATA_TABLE_MAPPING *) RegionContext; Pointer = ACPI_CAST_PTR (char, Mapping->Pointer) + (Address - ACPI_PTR_TO_PHYSADDR (Mapping->Pointer)); /* * Perform the memory read or write. The BitWidth was already * validated. */ switch (Function) { case ACPI_READ: memcpy (ACPI_CAST_PTR (char, Value), Pointer, ACPI_DIV_8 (BitWidth)); break; case ACPI_WRITE: memcpy (Pointer, ACPI_CAST_PTR (char, Value), ACPI_DIV_8 (BitWidth)); break; default: return_ACPI_STATUS (AE_BAD_PARAMETER); } return_ACPI_STATUS (AE_OK); } src/acpica/source/components/executer/exresnte.c000066400000000000000000000363261465205512700224200ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exresnte - AML Interpreter object resolution * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdispat.h" #include "acinterp.h" #include "acnamesp.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exresnte") /******************************************************************************* * * FUNCTION: AcpiExResolveNodeToValue * * PARAMETERS: ObjectPtr - Pointer to a location that contains * a pointer to a NS node, and will receive a * pointer to the resolved object. * WalkState - Current state. Valid only if executing AML * code. NULL if simply resolving an object * * RETURN: Status * * DESCRIPTION: Resolve a Namespace node to a valued object * * Note: for some of the data types, the pointer attached to the Node * can be either a pointer to an actual internal object or a pointer into the * AML stream itself. These types are currently: * * ACPI_TYPE_INTEGER * ACPI_TYPE_STRING * ACPI_TYPE_BUFFER * ACPI_TYPE_MUTEX * ACPI_TYPE_PACKAGE * ******************************************************************************/ ACPI_STATUS AcpiExResolveNodeToValue ( ACPI_NAMESPACE_NODE **ObjectPtr, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT *SourceDesc; ACPI_OPERAND_OBJECT *ObjDesc = NULL; ACPI_NAMESPACE_NODE *Node; ACPI_OBJECT_TYPE EntryType; ACPI_FUNCTION_TRACE (ExResolveNodeToValue); /* * The stack pointer points to a ACPI_NAMESPACE_NODE (Node). Get the * object that is attached to the Node. */ Node = *ObjectPtr; SourceDesc = AcpiNsGetAttachedObject (Node); EntryType = AcpiNsGetType ((ACPI_HANDLE) Node); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Entry=%p SourceDesc=%p [%s]\n", Node, SourceDesc, AcpiUtGetTypeName (EntryType))); if ((EntryType == ACPI_TYPE_LOCAL_ALIAS) || (EntryType == ACPI_TYPE_LOCAL_METHOD_ALIAS)) { /* There is always exactly one level of indirection */ Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Node->Object); SourceDesc = AcpiNsGetAttachedObject (Node); EntryType = AcpiNsGetType ((ACPI_HANDLE) Node); *ObjectPtr = Node; } /* * Several object types require no further processing: * 1) Device/Thermal objects don't have a "real" subobject, return Node * 2) Method locals and arguments have a pseudo-Node * 3) 10/2007: Added method type to assist with Package construction. */ if ((EntryType == ACPI_TYPE_DEVICE) || (EntryType == ACPI_TYPE_THERMAL) || (EntryType == ACPI_TYPE_METHOD) || (Node->Flags & (ANOBJ_METHOD_ARG | ANOBJ_METHOD_LOCAL))) { return_ACPI_STATUS (AE_OK); } if (!SourceDesc) { ACPI_ERROR ((AE_INFO, "No object attached to node [%4.4s] %p", Node->Name.Ascii, Node)); return_ACPI_STATUS (AE_AML_UNINITIALIZED_NODE); } /* * Action is based on the type of the Node, which indicates the type * of the attached object or pointer */ switch (EntryType) { case ACPI_TYPE_PACKAGE: if (SourceDesc->Common.Type != ACPI_TYPE_PACKAGE) { ACPI_ERROR ((AE_INFO, "Object not a Package, type %s", AcpiUtGetObjectTypeName (SourceDesc))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } Status = AcpiDsGetPackageArguments (SourceDesc); if (ACPI_SUCCESS (Status)) { /* Return an additional reference to the object */ ObjDesc = SourceDesc; AcpiUtAddReference (ObjDesc); } break; case ACPI_TYPE_BUFFER: if (SourceDesc->Common.Type != ACPI_TYPE_BUFFER) { ACPI_ERROR ((AE_INFO, "Object not a Buffer, type %s", AcpiUtGetObjectTypeName (SourceDesc))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } Status = AcpiDsGetBufferArguments (SourceDesc); if (ACPI_SUCCESS (Status)) { /* Return an additional reference to the object */ ObjDesc = SourceDesc; AcpiUtAddReference (ObjDesc); } break; case ACPI_TYPE_STRING: if (SourceDesc->Common.Type != ACPI_TYPE_STRING) { ACPI_ERROR ((AE_INFO, "Object not a String, type %s", AcpiUtGetObjectTypeName (SourceDesc))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* Return an additional reference to the object */ ObjDesc = SourceDesc; AcpiUtAddReference (ObjDesc); break; case ACPI_TYPE_INTEGER: if (SourceDesc->Common.Type != ACPI_TYPE_INTEGER) { ACPI_ERROR ((AE_INFO, "Object not a Integer, type %s", AcpiUtGetObjectTypeName (SourceDesc))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* Return an additional reference to the object */ ObjDesc = SourceDesc; AcpiUtAddReference (ObjDesc); break; case ACPI_TYPE_BUFFER_FIELD: case ACPI_TYPE_LOCAL_REGION_FIELD: case ACPI_TYPE_LOCAL_BANK_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD: ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "FieldRead Node=%p SourceDesc=%p Type=%X\n", Node, SourceDesc, EntryType)); Status = AcpiExReadDataFromField (WalkState, SourceDesc, &ObjDesc); break; /* For these objects, just return the object attached to the Node */ case ACPI_TYPE_MUTEX: case ACPI_TYPE_POWER: case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_EVENT: case ACPI_TYPE_REGION: /* Return an additional reference to the object */ ObjDesc = SourceDesc; AcpiUtAddReference (ObjDesc); break; /* TYPE_ANY is untyped, and thus there is no object associated with it */ case ACPI_TYPE_ANY: ACPI_ERROR ((AE_INFO, "Untyped entry %p, no attached object!", Node)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); /* Cannot be AE_TYPE */ case ACPI_TYPE_LOCAL_REFERENCE: switch (SourceDesc->Reference.Class) { case ACPI_REFCLASS_TABLE: /* This is a DdbHandle */ case ACPI_REFCLASS_REFOF: case ACPI_REFCLASS_INDEX: /* Return an additional reference to the object */ ObjDesc = SourceDesc; AcpiUtAddReference (ObjDesc); break; default: /* No named references are allowed here */ ACPI_ERROR ((AE_INFO, "Unsupported Reference type 0x%X", SourceDesc->Reference.Class)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } break; default: /* Default case is for unknown types */ ACPI_ERROR ((AE_INFO, "Node %p - Unknown object type 0x%X", Node, EntryType)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* switch (EntryType) */ /* Return the object descriptor */ *ObjectPtr = (void *) ObjDesc; return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exresolv.c000066400000000000000000000564321465205512700224320ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exresolv - AML Interpreter object resolution * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "amlcode.h" #include "acdispat.h" #include "acinterp.h" #include "acnamesp.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exresolv") /* Local prototypes */ static ACPI_STATUS AcpiExResolveObjectToValue ( ACPI_OPERAND_OBJECT **StackPtr, ACPI_WALK_STATE *WalkState); /******************************************************************************* * * FUNCTION: AcpiExResolveToValue * * PARAMETERS: **StackPtr - Points to entry on ObjStack, which can * be either an (ACPI_OPERAND_OBJECT *) * or an ACPI_HANDLE. * WalkState - Current method state * * RETURN: Status * * DESCRIPTION: Convert Reference objects to values * ******************************************************************************/ ACPI_STATUS AcpiExResolveToValue ( ACPI_OPERAND_OBJECT **StackPtr, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE_PTR (ExResolveToValue, StackPtr); if (!StackPtr || !*StackPtr) { ACPI_ERROR ((AE_INFO, "Internal - null pointer")); return_ACPI_STATUS (AE_AML_NO_OPERAND); } /* * The entity pointed to by the StackPtr can be either * 1) A valid ACPI_OPERAND_OBJECT, or * 2) A ACPI_NAMESPACE_NODE (NamedObj) */ if (ACPI_GET_DESCRIPTOR_TYPE (*StackPtr) == ACPI_DESC_TYPE_OPERAND) { Status = AcpiExResolveObjectToValue (StackPtr, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (!*StackPtr) { ACPI_ERROR ((AE_INFO, "Internal - null pointer")); return_ACPI_STATUS (AE_AML_NO_OPERAND); } } /* * Object on the stack may have changed if AcpiExResolveObjectToValue() * was called (i.e., we can't use an _else_ here.) */ if (ACPI_GET_DESCRIPTOR_TYPE (*StackPtr) == ACPI_DESC_TYPE_NAMED) { Status = AcpiExResolveNodeToValue ( ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE, StackPtr), WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Resolved object %p\n", *StackPtr)); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExResolveObjectToValue * * PARAMETERS: StackPtr - Pointer to an internal object * WalkState - Current method state * * RETURN: Status * * DESCRIPTION: Retrieve the value from an internal object. The Reference type * uses the associated AML opcode to determine the value. * ******************************************************************************/ static ACPI_STATUS AcpiExResolveObjectToValue ( ACPI_OPERAND_OBJECT **StackPtr, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT *StackDesc; ACPI_OPERAND_OBJECT *ObjDesc = NULL; UINT8 RefType; ACPI_FUNCTION_TRACE (ExResolveObjectToValue); StackDesc = *StackPtr; /* This is an object of type ACPI_OPERAND_OBJECT */ switch (StackDesc->Common.Type) { case ACPI_TYPE_LOCAL_REFERENCE: RefType = StackDesc->Reference.Class; switch (RefType) { case ACPI_REFCLASS_LOCAL: case ACPI_REFCLASS_ARG: /* * Get the local from the method's state info * Note: this increments the local's object reference count */ Status = AcpiDsMethodDataGetValue (RefType, StackDesc->Reference.Value, WalkState, &ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Arg/Local %X] ValueObj is %p\n", StackDesc->Reference.Value, ObjDesc)); /* * Now we can delete the original Reference Object and * replace it with the resolved value */ AcpiUtRemoveReference (StackDesc); *StackPtr = ObjDesc; break; case ACPI_REFCLASS_INDEX: switch (StackDesc->Reference.TargetType) { case ACPI_TYPE_BUFFER_FIELD: /* Just return - do not dereference */ break; case ACPI_TYPE_PACKAGE: /* If method call or CopyObject - do not dereference */ if ((WalkState->Opcode == AML_INT_METHODCALL_OP) || (WalkState->Opcode == AML_COPY_OBJECT_OP)) { break; } /* Otherwise, dereference the PackageIndex to a package element */ ObjDesc = *StackDesc->Reference.Where; if (ObjDesc) { /* * Valid object descriptor, copy pointer to return value * (i.e., dereference the package index) * Delete the ref object, increment the returned object */ AcpiUtAddReference (ObjDesc); *StackPtr = ObjDesc; } else { /* * A NULL object descriptor means an uninitialized element of * the package, can't dereference it */ ACPI_ERROR ((AE_INFO, "Attempt to dereference an Index to " "NULL package element Idx=%p", StackDesc)); Status = AE_AML_UNINITIALIZED_ELEMENT; } break; default: /* Invalid reference object */ ACPI_ERROR ((AE_INFO, "Unknown TargetType 0x%X in Index/Reference object %p", StackDesc->Reference.TargetType, StackDesc)); Status = AE_AML_INTERNAL; break; } break; case ACPI_REFCLASS_REFOF: case ACPI_REFCLASS_DEBUG: case ACPI_REFCLASS_TABLE: /* Just leave the object as-is, do not dereference */ break; case ACPI_REFCLASS_NAME: /* Reference to a named object */ /* Dereference the name */ if ((StackDesc->Reference.Node->Type == ACPI_TYPE_DEVICE) || (StackDesc->Reference.Node->Type == ACPI_TYPE_THERMAL)) { /* These node types do not have 'real' subobjects */ *StackPtr = (void *) StackDesc->Reference.Node; } else { /* Get the object pointed to by the namespace node */ *StackPtr = (StackDesc->Reference.Node)->Object; AcpiUtAddReference (*StackPtr); } AcpiUtRemoveReference (StackDesc); break; default: ACPI_ERROR ((AE_INFO, "Unknown Reference type 0x%X in %p", RefType, StackDesc)); Status = AE_AML_INTERNAL; break; } break; case ACPI_TYPE_BUFFER: Status = AcpiDsGetBufferArguments (StackDesc); break; case ACPI_TYPE_PACKAGE: Status = AcpiDsGetPackageArguments (StackDesc); break; case ACPI_TYPE_BUFFER_FIELD: case ACPI_TYPE_LOCAL_REGION_FIELD: case ACPI_TYPE_LOCAL_BANK_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD: ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "FieldRead SourceDesc=%p Type=%X\n", StackDesc, StackDesc->Common.Type)); Status = AcpiExReadDataFromField (WalkState, StackDesc, &ObjDesc); /* Remove a reference to the original operand, then override */ AcpiUtRemoveReference (*StackPtr); *StackPtr = (void *) ObjDesc; break; default: break; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExResolveMultiple * * PARAMETERS: WalkState - Current state (contains AML opcode) * Operand - Starting point for resolution * ReturnType - Where the object type is returned * ReturnDesc - Where the resolved object is returned * * RETURN: Status * * DESCRIPTION: Return the base object and type. Traverse a reference list if * necessary to get to the base object. * ******************************************************************************/ ACPI_STATUS AcpiExResolveMultiple ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT *Operand, ACPI_OBJECT_TYPE *ReturnType, ACPI_OPERAND_OBJECT **ReturnDesc) { ACPI_OPERAND_OBJECT *ObjDesc = ACPI_CAST_PTR (void, Operand); ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Operand); ACPI_OBJECT_TYPE Type; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiExResolveMultiple); /* Operand can be either a namespace node or an operand descriptor */ switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) { case ACPI_DESC_TYPE_OPERAND: Type = ObjDesc->Common.Type; break; case ACPI_DESC_TYPE_NAMED: Type = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type; ObjDesc = AcpiNsGetAttachedObject (Node); /* If we had an Alias node, use the attached object for type info */ if (Type == ACPI_TYPE_LOCAL_ALIAS) { Type = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type; ObjDesc = AcpiNsGetAttachedObject ( (ACPI_NAMESPACE_NODE *) ObjDesc); } switch (Type) { case ACPI_TYPE_DEVICE: case ACPI_TYPE_THERMAL: /* These types have no attached subobject */ break; default: /* All other types require a subobject */ if (!ObjDesc) { ACPI_ERROR ((AE_INFO, "[%4.4s] Node is unresolved or uninitialized", AcpiUtGetNodeName (Node))); return_ACPI_STATUS (AE_AML_UNINITIALIZED_NODE); } break; } break; default: return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* If type is anything other than a reference, we are done */ if (Type != ACPI_TYPE_LOCAL_REFERENCE) { goto Exit; } /* * For reference objects created via the RefOf, Index, or Load/LoadTable * operators, we need to get to the base object (as per the ACPI * specification of the ObjectType and SizeOf operators). This means * traversing the list of possibly many nested references. */ while (ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) { switch (ObjDesc->Reference.Class) { case ACPI_REFCLASS_REFOF: case ACPI_REFCLASS_NAME: /* Dereference the reference pointer */ if (ObjDesc->Reference.Class == ACPI_REFCLASS_REFOF) { Node = ObjDesc->Reference.Object; } else /* AML_INT_NAMEPATH_OP */ { Node = ObjDesc->Reference.Node; } /* All "References" point to a NS node */ if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) { ACPI_ERROR ((AE_INFO, "Not a namespace node %p [%s]", Node, AcpiUtGetDescriptorName (Node))); return_ACPI_STATUS (AE_AML_INTERNAL); } /* Get the attached object */ ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { /* No object, use the NS node type */ Type = AcpiNsGetType (Node); goto Exit; } /* Check for circular references */ if (ObjDesc == Operand) { return_ACPI_STATUS (AE_AML_CIRCULAR_REFERENCE); } break; case ACPI_REFCLASS_INDEX: /* Get the type of this reference (index into another object) */ Type = ObjDesc->Reference.TargetType; if (Type != ACPI_TYPE_PACKAGE) { goto Exit; } /* * The main object is a package, we want to get the type * of the individual package element that is referenced by * the index. * * This could of course in turn be another reference object. */ ObjDesc = *(ObjDesc->Reference.Where); if (!ObjDesc) { /* NULL package elements are allowed */ Type = 0; /* Uninitialized */ goto Exit; } break; case ACPI_REFCLASS_TABLE: Type = ACPI_TYPE_DDB_HANDLE; goto Exit; case ACPI_REFCLASS_LOCAL: case ACPI_REFCLASS_ARG: if (ReturnDesc) { Status = AcpiDsMethodDataGetValue (ObjDesc->Reference.Class, ObjDesc->Reference.Value, WalkState, &ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } AcpiUtRemoveReference (ObjDesc); } else { Status = AcpiDsMethodDataGetNode (ObjDesc->Reference.Class, ObjDesc->Reference.Value, WalkState, &Node); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { Type = ACPI_TYPE_ANY; goto Exit; } } break; case ACPI_REFCLASS_DEBUG: /* The Debug Object is of type "DebugObject" */ Type = ACPI_TYPE_DEBUG_OBJECT; goto Exit; default: ACPI_ERROR ((AE_INFO, "Unknown Reference Class 0x%2.2X", ObjDesc->Reference.Class)); return_ACPI_STATUS (AE_AML_INTERNAL); } } /* * Now we are guaranteed to have an object that has not been created * via the RefOf or Index operators. */ Type = ObjDesc->Common.Type; Exit: /* Convert internal types to external types */ switch (Type) { case ACPI_TYPE_LOCAL_REGION_FIELD: case ACPI_TYPE_LOCAL_BANK_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD: Type = ACPI_TYPE_FIELD_UNIT; break; case ACPI_TYPE_LOCAL_SCOPE: /* Per ACPI Specification, Scope is untyped */ Type = ACPI_TYPE_ANY; break; default: /* No change to Type required */ break; } *ReturnType = Type; if (ReturnDesc) { *ReturnDesc = ObjDesc; } return_ACPI_STATUS (AE_OK); } src/acpica/source/components/executer/exresop.c000066400000000000000000000676721465205512700222600ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exresop - AML Interpreter operand/object resolution * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "amlcode.h" #include "acparser.h" #include "acinterp.h" #include "acnamesp.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exresop") /* Local prototypes */ static ACPI_STATUS AcpiExCheckObjectType ( ACPI_OBJECT_TYPE TypeNeeded, ACPI_OBJECT_TYPE ThisType, void *Object); /******************************************************************************* * * FUNCTION: AcpiExCheckObjectType * * PARAMETERS: TypeNeeded Object type needed * ThisType Actual object type * Object Object pointer * * RETURN: Status * * DESCRIPTION: Check required type against actual type * ******************************************************************************/ static ACPI_STATUS AcpiExCheckObjectType ( ACPI_OBJECT_TYPE TypeNeeded, ACPI_OBJECT_TYPE ThisType, void *Object) { ACPI_FUNCTION_ENTRY (); if (TypeNeeded == ACPI_TYPE_ANY) { /* All types OK, so we don't perform any typechecks */ return (AE_OK); } if (TypeNeeded == ACPI_TYPE_LOCAL_REFERENCE) { /* * Allow the AML "Constant" opcodes (Zero, One, etc.) to be reference * objects and thus allow them to be targets. (As per the ACPI * specification, a store to a constant is a noop.) */ if ((ThisType == ACPI_TYPE_INTEGER) && (((ACPI_OPERAND_OBJECT *) Object)->Common.Flags & AOPOBJ_AML_CONSTANT)) { return (AE_OK); } } if (TypeNeeded != ThisType) { ACPI_ERROR ((AE_INFO, "Needed type [%s], found [%s] %p", AcpiUtGetTypeName (TypeNeeded), AcpiUtGetTypeName (ThisType), Object)); return (AE_AML_OPERAND_TYPE); } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExResolveOperands * * PARAMETERS: Opcode - Opcode being interpreted * StackPtr - Pointer to the operand stack to be * resolved * WalkState - Current state * * RETURN: Status * * DESCRIPTION: Convert multiple input operands to the types required by the * target operator. * * Each 5-bit group in ArgTypes represents one required * operand and indicates the required Type. The corresponding operand * will be converted to the required type if possible, otherwise we * abort with an exception. * ******************************************************************************/ ACPI_STATUS AcpiExResolveOperands ( UINT16 Opcode, ACPI_OPERAND_OBJECT **StackPtr, ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status = AE_OK; UINT8 ObjectType; UINT32 ArgTypes; const ACPI_OPCODE_INFO *OpInfo; UINT32 ThisArgType; ACPI_OBJECT_TYPE TypeNeeded; UINT16 TargetOp = 0; ACPI_FUNCTION_TRACE_U32 (ExResolveOperands, Opcode); OpInfo = AcpiPsGetOpcodeInfo (Opcode); if (OpInfo->Class == AML_CLASS_UNKNOWN) { return_ACPI_STATUS (AE_AML_BAD_OPCODE); } ArgTypes = OpInfo->RuntimeArgs; if (ArgTypes == ARGI_INVALID_OPCODE) { ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X", Opcode)); return_ACPI_STATUS (AE_AML_INTERNAL); } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Opcode %X [%s] RequiredOperandTypes=%8.8X\n", Opcode, OpInfo->Name, ArgTypes)); /* * Normal exit is with (ArgTypes == 0) at end of argument list. * Function will return an exception from within the loop upon * finding an entry which is not (or cannot be converted * to) the required type; if stack underflows; or upon * finding a NULL stack entry (which should not happen). */ while (GET_CURRENT_ARG_TYPE (ArgTypes)) { if (!StackPtr || !*StackPtr) { ACPI_ERROR ((AE_INFO, "Null stack entry at %p", StackPtr)); return_ACPI_STATUS (AE_AML_INTERNAL); } /* Extract useful items */ ObjDesc = *StackPtr; /* Decode the descriptor type */ switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) { case ACPI_DESC_TYPE_NAMED: /* Namespace Node */ ObjectType = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type; /* * Resolve an alias object. The construction of these objects * guarantees that there is only one level of alias indirection; * thus, the attached object is always the aliased namespace node */ if (ObjectType == ACPI_TYPE_LOCAL_ALIAS) { ObjDesc = AcpiNsGetAttachedObject ( (ACPI_NAMESPACE_NODE *) ObjDesc); *StackPtr = ObjDesc; ObjectType = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type; } break; case ACPI_DESC_TYPE_OPERAND: /* ACPI internal object */ ObjectType = ObjDesc->Common.Type; /* Check for bad ACPI_OBJECT_TYPE */ if (!AcpiUtValidObjectType (ObjectType)) { ACPI_ERROR ((AE_INFO, "Bad operand object type [0x%X]", ObjectType)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } if (ObjectType == (UINT8) ACPI_TYPE_LOCAL_REFERENCE) { /* Validate the Reference */ switch (ObjDesc->Reference.Class) { case ACPI_REFCLASS_DEBUG: TargetOp = AML_DEBUG_OP; ACPI_FALLTHROUGH; case ACPI_REFCLASS_ARG: case ACPI_REFCLASS_LOCAL: case ACPI_REFCLASS_INDEX: case ACPI_REFCLASS_REFOF: case ACPI_REFCLASS_TABLE: /* DdbHandle from LOAD_OP or LOAD_TABLE_OP */ case ACPI_REFCLASS_NAME: /* Reference to a named object */ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Operand is a Reference, Class [%s] %2.2X\n", AcpiUtGetReferenceName (ObjDesc), ObjDesc->Reference.Class)); break; default: ACPI_ERROR ((AE_INFO, "Unknown Reference Class 0x%2.2X in %p", ObjDesc->Reference.Class, ObjDesc)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } } break; default: /* Invalid descriptor */ ACPI_ERROR ((AE_INFO, "Invalid descriptor %p [%s]", ObjDesc, AcpiUtGetDescriptorName (ObjDesc))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* Get one argument type, point to the next */ ThisArgType = GET_CURRENT_ARG_TYPE (ArgTypes); INCREMENT_ARG_LIST (ArgTypes); /* * Handle cases where the object does not need to be * resolved to a value */ switch (ThisArgType) { case ARGI_REF_OR_STRING: /* Can be a String or Reference */ if ((ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND) && (ObjDesc->Common.Type == ACPI_TYPE_STRING)) { /* * String found - the string references a named object and * must be resolved to a node */ goto NextOperand; } /* * Else not a string - fall through to the normal Reference * case below */ ACPI_FALLTHROUGH; case ARGI_REFERENCE: /* References: */ case ARGI_INTEGER_REF: case ARGI_OBJECT_REF: case ARGI_DEVICE_REF: case ARGI_TARGETREF: /* Allows implicit conversion rules before store */ case ARGI_FIXED_TARGET: /* No implicit conversion before store to target */ case ARGI_SIMPLE_TARGET: /* Name, Local, or Arg - no implicit conversion */ case ARGI_STORE_TARGET: /* * Need an operand of type ACPI_TYPE_LOCAL_REFERENCE * A Namespace Node is OK as-is */ if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED) { goto NextOperand; } Status = AcpiExCheckObjectType ( ACPI_TYPE_LOCAL_REFERENCE, ObjectType, ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } goto NextOperand; case ARGI_DATAREFOBJ: /* Store operator only */ /* * We don't want to resolve IndexOp reference objects during * a store because this would be an implicit DeRefOf operation. * Instead, we just want to store the reference object. * -- All others must be resolved below. */ if ((Opcode == AML_STORE_OP) && ((*StackPtr)->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) && ((*StackPtr)->Reference.Class == ACPI_REFCLASS_INDEX)) { goto NextOperand; } break; default: /* All cases covered above */ break; } /* * Resolve this object to a value */ Status = AcpiExResolveToValue (StackPtr, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Get the resolved object */ ObjDesc = *StackPtr; /* * Check the resulting object (value) type */ switch (ThisArgType) { /* * For the simple cases, only one type of resolved object * is allowed */ case ARGI_MUTEX: /* Need an operand of type ACPI_TYPE_MUTEX */ TypeNeeded = ACPI_TYPE_MUTEX; break; case ARGI_EVENT: /* Need an operand of type ACPI_TYPE_EVENT */ TypeNeeded = ACPI_TYPE_EVENT; break; case ARGI_PACKAGE: /* Package */ /* Need an operand of type ACPI_TYPE_PACKAGE */ TypeNeeded = ACPI_TYPE_PACKAGE; break; case ARGI_ANYTYPE: /* Any operand type will do */ TypeNeeded = ACPI_TYPE_ANY; break; case ARGI_DDBHANDLE: /* Need an operand of type ACPI_TYPE_DDB_HANDLE */ TypeNeeded = ACPI_TYPE_LOCAL_REFERENCE; break; /* * The more complex cases allow multiple resolved object types */ case ARGI_INTEGER: /* * Need an operand of type ACPI_TYPE_INTEGER, but we can * implicitly convert from a STRING or BUFFER. * * Known as "Implicit Source Operand Conversion" */ Status = AcpiExConvertToInteger (ObjDesc, StackPtr, ACPI_IMPLICIT_CONVERSION); if (ACPI_FAILURE (Status)) { if (Status == AE_TYPE) { ACPI_ERROR ((AE_INFO, "Needed [Integer/String/Buffer], found [%s] %p", AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } return_ACPI_STATUS (Status); } if (ObjDesc != *StackPtr) { AcpiUtRemoveReference (ObjDesc); } goto NextOperand; case ARGI_BUFFER: /* * Need an operand of type ACPI_TYPE_BUFFER, * But we can implicitly convert from a STRING or INTEGER * Aka - "Implicit Source Operand Conversion" */ Status = AcpiExConvertToBuffer (ObjDesc, StackPtr); if (ACPI_FAILURE (Status)) { if (Status == AE_TYPE) { ACPI_ERROR ((AE_INFO, "Needed [Integer/String/Buffer], found [%s] %p", AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } return_ACPI_STATUS (Status); } if (ObjDesc != *StackPtr) { AcpiUtRemoveReference (ObjDesc); } goto NextOperand; case ARGI_STRING: /* * Need an operand of type ACPI_TYPE_STRING, * But we can implicitly convert from a BUFFER or INTEGER * Aka - "Implicit Source Operand Conversion" */ Status = AcpiExConvertToString ( ObjDesc, StackPtr, ACPI_IMPLICIT_CONVERT_HEX); if (ACPI_FAILURE (Status)) { if (Status == AE_TYPE) { ACPI_ERROR ((AE_INFO, "Needed [Integer/String/Buffer], found [%s] %p", AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } return_ACPI_STATUS (Status); } if (ObjDesc != *StackPtr) { AcpiUtRemoveReference (ObjDesc); } goto NextOperand; case ARGI_COMPUTEDATA: /* Need an operand of type INTEGER, STRING or BUFFER */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_INTEGER: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: /* Valid operand */ break; default: ACPI_ERROR ((AE_INFO, "Needed [Integer/String/Buffer], found [%s] %p", AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } goto NextOperand; case ARGI_BUFFER_OR_STRING: /* Need an operand of type STRING or BUFFER */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: /* Valid operand */ break; case ACPI_TYPE_INTEGER: /* Highest priority conversion is to type Buffer */ Status = AcpiExConvertToBuffer (ObjDesc, StackPtr); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (ObjDesc != *StackPtr) { AcpiUtRemoveReference (ObjDesc); } break; default: ACPI_ERROR ((AE_INFO, "Needed [Integer/String/Buffer], found [%s] %p", AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } goto NextOperand; case ARGI_DATAOBJECT: /* * ARGI_DATAOBJECT is only used by the SizeOf operator. * Need a buffer, string, package, or RefOf reference. * * The only reference allowed here is a direct reference to * a namespace node. */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_PACKAGE: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: case ACPI_TYPE_LOCAL_REFERENCE: /* Valid operand */ break; default: ACPI_ERROR ((AE_INFO, "Needed [Buffer/String/Package/Reference], found [%s] %p", AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } goto NextOperand; case ARGI_COMPLEXOBJ: /* Need a buffer or package or (ACPI 2.0) String */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_PACKAGE: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: /* Valid operand */ break; default: ACPI_ERROR ((AE_INFO, "Needed [Buffer/String/Package], found [%s] %p", AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } goto NextOperand; case ARGI_REGION_OR_BUFFER: /* Used by Load() only */ /* * Need an operand of type REGION or a BUFFER * (which could be a resolved region field) */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_BUFFER: case ACPI_TYPE_REGION: /* Valid operand */ break; default: ACPI_ERROR ((AE_INFO, "Needed [Region/Buffer], found [%s] %p", AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } goto NextOperand; case ARGI_DATAREFOBJ: /* Used by the Store() operator only */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_INTEGER: case ACPI_TYPE_PACKAGE: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: case ACPI_TYPE_BUFFER_FIELD: case ACPI_TYPE_LOCAL_REFERENCE: case ACPI_TYPE_LOCAL_REGION_FIELD: case ACPI_TYPE_LOCAL_BANK_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD: case ACPI_TYPE_DDB_HANDLE: /* Valid operand */ break; default: if (AcpiGbl_EnableInterpreterSlack) { /* * Enable original behavior of Store(), allowing any * and all objects as the source operand. The ACPI * spec does not allow this, however. */ break; } if (TargetOp == AML_DEBUG_OP) { /* Allow store of any object to the Debug object */ break; } ACPI_ERROR ((AE_INFO, "Needed Integer/Buffer/String/Package/Ref/Ddb]" ", found [%s] %p", AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } goto NextOperand; default: /* Unknown type */ ACPI_ERROR ((AE_INFO, "Internal - Unknown ARGI (required operand) type 0x%X", ThisArgType)); return_ACPI_STATUS (AE_BAD_PARAMETER); } /* * Make sure that the original object was resolved to the * required object type (Simple cases only). */ Status = AcpiExCheckObjectType ( TypeNeeded, (*StackPtr)->Common.Type, *StackPtr); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } NextOperand: /* * If more operands needed, decrement StackPtr to point * to next operand on stack */ if (GET_CURRENT_ARG_TYPE (ArgTypes)) { StackPtr--; } } ACPI_DUMP_OPERANDS (WalkState->Operands, AcpiPsGetOpcodeName (Opcode), WalkState->NumOperands); return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exserial.c000066400000000000000000000460511465205512700223730ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exserial - FieldUnit support for serial address spaces * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdispat.h" #include "acinterp.h" #include "amlcode.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exserial") /******************************************************************************* * * FUNCTION: AcpiExReadGpio * * PARAMETERS: ObjDesc - The named field to read * Buffer - Where the return data is returned * * RETURN: Status * * DESCRIPTION: Read from a named field that references a Generic Serial Bus * field * ******************************************************************************/ ACPI_STATUS AcpiExReadGpio ( ACPI_OPERAND_OBJECT *ObjDesc, void *Buffer) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE_PTR (ExReadGpio, ObjDesc); /* * For GPIO (GeneralPurposeIo), the Address will be the bit offset * from the previous Connection() operator, making it effectively a * pin number index. The BitLength is the length of the field, which * is thus the number of pins. */ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "GPIO FieldRead [FROM]: Pin %u Bits %u\n", ObjDesc->Field.PinNumberIndex, ObjDesc->Field.BitLength)); /* Lock entire transaction if requested */ AcpiExAcquireGlobalLock (ObjDesc->CommonField.FieldFlags); /* Perform the read */ Status = AcpiExAccessRegion ( ObjDesc, 0, (UINT64 *) Buffer, ACPI_READ); AcpiExReleaseGlobalLock (ObjDesc->CommonField.FieldFlags); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExWriteGpio * * PARAMETERS: SourceDesc - Contains data to write. Expect to be * an Integer object. * ObjDesc - The named field * ResultDesc - Where the return value is returned, if any * * RETURN: Status * * DESCRIPTION: Write to a named field that references a General Purpose I/O * field. * ******************************************************************************/ ACPI_STATUS AcpiExWriteGpio ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ReturnBuffer) { ACPI_STATUS Status; void *Buffer; ACPI_FUNCTION_TRACE_PTR (ExWriteGpio, ObjDesc); /* * For GPIO (GeneralPurposeIo), we will bypass the entire field * mechanism and handoff the bit address and bit width directly to * the handler. The Address will be the bit offset * from the previous Connection() operator, making it effectively a * pin number index. The BitLength is the length of the field, which * is thus the number of pins. */ if (SourceDesc->Common.Type != ACPI_TYPE_INTEGER) { return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "GPIO FieldWrite [FROM]: (%s:%X), Value %.8X [TO]: Pin %u Bits %u\n", AcpiUtGetTypeName (SourceDesc->Common.Type), SourceDesc->Common.Type, (UINT32) SourceDesc->Integer.Value, ObjDesc->Field.PinNumberIndex, ObjDesc->Field.BitLength)); Buffer = &SourceDesc->Integer.Value; /* Lock entire transaction if requested */ AcpiExAcquireGlobalLock (ObjDesc->CommonField.FieldFlags); /* Perform the write */ Status = AcpiExAccessRegion ( ObjDesc, 0, (UINT64 *) Buffer, ACPI_WRITE); AcpiExReleaseGlobalLock (ObjDesc->CommonField.FieldFlags); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExReadSerialBus * * PARAMETERS: ObjDesc - The named field to read * ReturnBuffer - Where the return value is returned, if any * * RETURN: Status * * DESCRIPTION: Read from a named field that references a serial bus * (SMBus, IPMI, or GSBus). * ******************************************************************************/ ACPI_STATUS AcpiExReadSerialBus ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ReturnBuffer) { ACPI_STATUS Status; UINT32 BufferLength; ACPI_OPERAND_OBJECT *BufferDesc; UINT32 Function; UINT16 AccessorType; ACPI_FUNCTION_TRACE_PTR (ExReadSerialBus, ObjDesc); /* * This is an SMBus, GSBus or IPMI read. We must create a buffer to * hold the data and then directly access the region handler. * * Note: SMBus and GSBus protocol value is passed in upper 16-bits * of Function * * Common buffer format: * Status; (Byte 0 of the data buffer) * Length; (Byte 1 of the data buffer) * Data[x-1]: (Bytes 2-x of the arbitrary length data buffer) */ switch (ObjDesc->Field.RegionObj->Region.SpaceId) { case ACPI_ADR_SPACE_SMBUS: BufferLength = ACPI_SMBUS_BUFFER_SIZE; Function = ACPI_READ | (ObjDesc->Field.Attribute << 16); break; case ACPI_ADR_SPACE_IPMI: BufferLength = ACPI_IPMI_BUFFER_SIZE; Function = ACPI_READ; break; case ACPI_ADR_SPACE_GSBUS: AccessorType = ObjDesc->Field.Attribute; if (AccessorType == AML_FIELD_ATTRIB_RAW_PROCESS_BYTES) { ACPI_ERROR ((AE_INFO, "Invalid direct read using bidirectional write-then-read protocol")); return_ACPI_STATUS (AE_AML_PROTOCOL); } Status = AcpiExGetProtocolBufferLength (AccessorType, &BufferLength); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Invalid protocol ID for GSBus: 0x%4.4X", AccessorType)); return_ACPI_STATUS (Status); } /* Add header length to get the full size of the buffer */ BufferLength += ACPI_SERIAL_HEADER_SIZE; Function = ACPI_READ | (AccessorType << 16); break; case ACPI_ADR_SPACE_PLATFORM_RT: BufferLength = ACPI_PRM_INPUT_BUFFER_SIZE; Function = ACPI_READ; break; default: return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID); } /* Create the local transfer buffer that is returned to the caller */ BufferDesc = AcpiUtCreateBufferObject (BufferLength); if (!BufferDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Lock entire transaction if requested */ AcpiExAcquireGlobalLock (ObjDesc->CommonField.FieldFlags); /* Call the region handler for the write-then-read */ Status = AcpiExAccessRegion (ObjDesc, 0, ACPI_CAST_PTR (UINT64, BufferDesc->Buffer.Pointer), Function); AcpiExReleaseGlobalLock (ObjDesc->CommonField.FieldFlags); *ReturnBuffer = BufferDesc; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExWriteSerialBus * * PARAMETERS: SourceDesc - Contains data to write * ObjDesc - The named field * ReturnBuffer - Where the return value is returned, if any * * RETURN: Status * * DESCRIPTION: Write to a named field that references a serial bus * (SMBus, IPMI, GSBus). * ******************************************************************************/ ACPI_STATUS AcpiExWriteSerialBus ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ReturnBuffer) { ACPI_STATUS Status; UINT32 BufferLength; UINT32 DataLength; void *Buffer; ACPI_OPERAND_OBJECT *BufferDesc; UINT32 Function; UINT16 AccessorType; ACPI_FUNCTION_TRACE_PTR (ExWriteSerialBus, ObjDesc); /* * This is an SMBus, GSBus or IPMI write. We will bypass the entire * field mechanism and handoff the buffer directly to the handler. * For these address spaces, the buffer is bidirectional; on a * write, return data is returned in the same buffer. * * Source must be a buffer of sufficient size, these are fixed size: * ACPI_SMBUS_BUFFER_SIZE, or ACPI_IPMI_BUFFER_SIZE. * * Note: SMBus and GSBus protocol type is passed in upper 16-bits * of Function * * Common buffer format: * Status; (Byte 0 of the data buffer) * Length; (Byte 1 of the data buffer) * Data[x-1]: (Bytes 2-x of the arbitrary length data buffer) */ if (SourceDesc->Common.Type != ACPI_TYPE_BUFFER) { ACPI_ERROR ((AE_INFO, "SMBus/IPMI/GenericSerialBus write requires " "Buffer, found type %s", AcpiUtGetObjectTypeName (SourceDesc))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } switch (ObjDesc->Field.RegionObj->Region.SpaceId) { case ACPI_ADR_SPACE_SMBUS: BufferLength = ACPI_SMBUS_BUFFER_SIZE; Function = ACPI_WRITE | (ObjDesc->Field.Attribute << 16); break; case ACPI_ADR_SPACE_IPMI: BufferLength = ACPI_IPMI_BUFFER_SIZE; Function = ACPI_WRITE; break; case ACPI_ADR_SPACE_GSBUS: AccessorType = ObjDesc->Field.Attribute; Status = AcpiExGetProtocolBufferLength (AccessorType, &BufferLength); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Invalid protocol ID for GSBus: 0x%4.4X", AccessorType)); return_ACPI_STATUS (Status); } /* Add header length to get the full size of the buffer */ BufferLength += ACPI_SERIAL_HEADER_SIZE; Function = ACPI_WRITE | (AccessorType << 16); break; case ACPI_ADR_SPACE_PLATFORM_RT: BufferLength = ACPI_PRM_INPUT_BUFFER_SIZE; Function = ACPI_WRITE; break; case ACPI_ADR_SPACE_FIXED_HARDWARE: BufferLength = ACPI_FFH_INPUT_BUFFER_SIZE; Function = ACPI_WRITE; break; default: return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID); } /* Create the transfer/bidirectional/return buffer */ BufferDesc = AcpiUtCreateBufferObject (BufferLength); if (!BufferDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Copy the input buffer data to the transfer buffer */ Buffer = BufferDesc->Buffer.Pointer; DataLength = ACPI_MIN (BufferLength, SourceDesc->Buffer.Length); memcpy (Buffer, SourceDesc->Buffer.Pointer, DataLength); /* Lock entire transaction if requested */ AcpiExAcquireGlobalLock (ObjDesc->CommonField.FieldFlags); /* * Perform the write (returns status and perhaps data in the * same buffer) */ Status = AcpiExAccessRegion ( ObjDesc, 0, (UINT64 *) Buffer, Function); AcpiExReleaseGlobalLock (ObjDesc->CommonField.FieldFlags); *ReturnBuffer = BufferDesc; return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exstore.c000066400000000000000000000642331465205512700222520ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exstore - AML Interpreter object store support * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdispat.h" #include "acinterp.h" #include "amlcode.h" #include "acnamesp.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exstore") /* Local prototypes */ static ACPI_STATUS AcpiExStoreObjectToIndex ( ACPI_OPERAND_OBJECT *ValDesc, ACPI_OPERAND_OBJECT *DestDesc, ACPI_WALK_STATE *WalkState); static ACPI_STATUS AcpiExStoreDirectToNode ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_NAMESPACE_NODE *Node, ACPI_WALK_STATE *WalkState); /******************************************************************************* * * FUNCTION: AcpiExStore * * PARAMETERS: *SourceDesc - Value to be stored * *DestDesc - Where to store it. Must be an NS node * or ACPI_OPERAND_OBJECT of type * Reference; * WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Store the value described by SourceDesc into the location * described by DestDesc. Called by various interpreter * functions to store the result of an operation into * the destination operand -- not just simply the actual "Store" * ASL operator. * ******************************************************************************/ ACPI_STATUS AcpiExStore ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *DestDesc, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT *RefDesc = DestDesc; ACPI_FUNCTION_TRACE_PTR (ExStore, DestDesc); /* Validate parameters */ if (!SourceDesc || !DestDesc) { ACPI_ERROR ((AE_INFO, "Null parameter")); return_ACPI_STATUS (AE_AML_NO_OPERAND); } /* DestDesc can be either a namespace node or an ACPI object */ if (ACPI_GET_DESCRIPTOR_TYPE (DestDesc) == ACPI_DESC_TYPE_NAMED) { /* * Dest is a namespace node, * Storing an object into a Named node. */ Status = AcpiExStoreObjectToNode (SourceDesc, (ACPI_NAMESPACE_NODE *) DestDesc, WalkState, ACPI_IMPLICIT_CONVERSION); return_ACPI_STATUS (Status); } /* Destination object must be a Reference or a Constant object */ switch (DestDesc->Common.Type) { case ACPI_TYPE_LOCAL_REFERENCE: break; case ACPI_TYPE_INTEGER: /* Allow stores to Constants -- a Noop as per ACPI spec */ if (DestDesc->Common.Flags & AOPOBJ_AML_CONSTANT) { return_ACPI_STATUS (AE_OK); } ACPI_FALLTHROUGH; default: /* Destination is not a Reference object */ ACPI_ERROR ((AE_INFO, "Target is not a Reference or Constant object - [%s] %p", AcpiUtGetObjectTypeName (DestDesc), DestDesc)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* * Examine the Reference class. These cases are handled: * * 1) Store to Name (Change the object associated with a name) * 2) Store to an indexed area of a Buffer or Package * 3) Store to a Method Local or Arg * 4) Store to the debug object */ switch (RefDesc->Reference.Class) { case ACPI_REFCLASS_REFOF: /* Storing an object into a Name "container" */ Status = AcpiExStoreObjectToNode (SourceDesc, RefDesc->Reference.Object, WalkState, ACPI_IMPLICIT_CONVERSION); break; case ACPI_REFCLASS_INDEX: /* Storing to an Index (pointer into a packager or buffer) */ Status = AcpiExStoreObjectToIndex (SourceDesc, RefDesc, WalkState); break; case ACPI_REFCLASS_LOCAL: case ACPI_REFCLASS_ARG: /* Store to a method local/arg */ Status = AcpiDsStoreObjectToLocal (RefDesc->Reference.Class, RefDesc->Reference.Value, SourceDesc, WalkState); break; case ACPI_REFCLASS_DEBUG: /* * Storing to the Debug object causes the value stored to be * displayed and otherwise has no effect -- see ACPI Specification */ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "**** Write to Debug Object: Object %p [%s] ****:\n\n", SourceDesc, AcpiUtGetObjectTypeName (SourceDesc))); ACPI_DEBUG_OBJECT (SourceDesc, 0, 0); break; default: ACPI_ERROR ((AE_INFO, "Unknown Reference Class 0x%2.2X", RefDesc->Reference.Class)); ACPI_DUMP_ENTRY (RefDesc, ACPI_LV_INFO); Status = AE_AML_INTERNAL; break; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExStoreObjectToIndex * * PARAMETERS: *SourceDesc - Value to be stored * *DestDesc - Named object to receive the value * WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Store the object to indexed Buffer or Package element * ******************************************************************************/ static ACPI_STATUS AcpiExStoreObjectToIndex ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *IndexDesc, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *NewDesc; UINT8 Value = 0; UINT32 i; ACPI_FUNCTION_TRACE (ExStoreObjectToIndex); /* * Destination must be a reference pointer, and * must point to either a buffer or a package */ switch (IndexDesc->Reference.TargetType) { case ACPI_TYPE_PACKAGE: /* * Storing to a package element. Copy the object and replace * any existing object with the new object. No implicit * conversion is performed. * * The object at *(IndexDesc->Reference.Where) is the * element within the package that is to be modified. * The parent package object is at IndexDesc->Reference.Object */ ObjDesc = *(IndexDesc->Reference.Where); if (SourceDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE && SourceDesc->Reference.Class == ACPI_REFCLASS_TABLE) { /* This is a DDBHandle, just add a reference to it */ AcpiUtAddReference (SourceDesc); NewDesc = SourceDesc; } else { /* Normal object, copy it */ Status = AcpiUtCopyIobjectToIobject ( SourceDesc, &NewDesc, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } if (ObjDesc) { /* Decrement reference count by the ref count of the parent package */ for (i = 0; i < ((ACPI_OPERAND_OBJECT *) IndexDesc->Reference.Object)->Common.ReferenceCount; i++) { AcpiUtRemoveReference (ObjDesc); } } *(IndexDesc->Reference.Where) = NewDesc; /* Increment ref count by the ref count of the parent package-1 */ for (i = 1; i < ((ACPI_OPERAND_OBJECT *) IndexDesc->Reference.Object)->Common.ReferenceCount; i++) { AcpiUtAddReference (NewDesc); } break; case ACPI_TYPE_BUFFER_FIELD: /* * Store into a Buffer or String (not actually a real BufferField) * at a location defined by an Index. * * The first 8-bit element of the source object is written to the * 8-bit Buffer location defined by the Index destination object, * according to the ACPI 2.0 specification. */ /* * Make sure the target is a Buffer or String. An error should * not happen here, since the ReferenceObject was constructed * by the INDEX_OP code. */ ObjDesc = IndexDesc->Reference.Object; if ((ObjDesc->Common.Type != ACPI_TYPE_BUFFER) && (ObjDesc->Common.Type != ACPI_TYPE_STRING)) { return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* * The assignment of the individual elements will be slightly * different for each source type. */ switch (SourceDesc->Common.Type) { case ACPI_TYPE_INTEGER: /* Use the least-significant byte of the integer */ Value = (UINT8) (SourceDesc->Integer.Value); break; case ACPI_TYPE_BUFFER: case ACPI_TYPE_STRING: /* Note: Takes advantage of common string/buffer fields */ Value = SourceDesc->Buffer.Pointer[0]; break; default: /* All other types are invalid */ ACPI_ERROR ((AE_INFO, "Source must be type [Integer/Buffer/String], found [%s]", AcpiUtGetObjectTypeName (SourceDesc))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* Store the source value into the target buffer byte */ ObjDesc->Buffer.Pointer[IndexDesc->Reference.Value] = Value; break; default: ACPI_ERROR ((AE_INFO, "Target is not of type [Package/BufferField]")); Status = AE_AML_TARGET_TYPE; break; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExStoreObjectToNode * * PARAMETERS: SourceDesc - Value to be stored * Node - Named object to receive the value * WalkState - Current walk state * ImplicitConversion - Perform implicit conversion (yes/no) * * RETURN: Status * * DESCRIPTION: Store the object to the named object. * * The assignment of an object to a named object is handled here. * The value passed in will replace the current value (if any) * with the input value. * * When storing into an object the data is converted to the * target object type then stored in the object. This means * that the target object type (for an initialized target) will * not be changed by a store operation. A CopyObject can change * the target type, however. * * The ImplicitConversion flag is set to NO/FALSE only when * storing to an ArgX -- as per the rules of the ACPI spec. * * Assumes parameters are already validated. * ******************************************************************************/ ACPI_STATUS AcpiExStoreObjectToNode ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_NAMESPACE_NODE *Node, ACPI_WALK_STATE *WalkState, UINT8 ImplicitConversion) { ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT *TargetDesc; ACPI_OPERAND_OBJECT *NewDesc; ACPI_OBJECT_TYPE TargetType; ACPI_FUNCTION_TRACE_PTR (ExStoreObjectToNode, SourceDesc); /* Get current type of the node, and object attached to Node */ TargetType = AcpiNsGetType (Node); TargetDesc = AcpiNsGetAttachedObject (Node); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Storing %p [%s] to node %p [%s]\n", SourceDesc, AcpiUtGetObjectTypeName (SourceDesc), Node, AcpiUtGetTypeName (TargetType))); /* Only limited target types possible for everything except CopyObject */ if (WalkState->Opcode != AML_COPY_OBJECT_OP) { /* * Only CopyObject allows all object types to be overwritten. For * TargetRef(s), there are restrictions on the object types that * are allowed. * * Allowable operations/typing for Store: * * 1) Simple Store * Integer --> Integer (Named/Local/Arg) * String --> String (Named/Local/Arg) * Buffer --> Buffer (Named/Local/Arg) * Package --> Package (Named/Local/Arg) * * 2) Store with implicit conversion * Integer --> String or Buffer (Named) * String --> Integer or Buffer (Named) * Buffer --> Integer or String (Named) */ switch (TargetType) { case ACPI_TYPE_PACKAGE: /* * Here, can only store a package to an existing package. * Storing a package to a Local/Arg is OK, and handled * elsewhere. */ if (WalkState->Opcode == AML_STORE_OP) { if (SourceDesc->Common.Type != ACPI_TYPE_PACKAGE) { ACPI_ERROR ((AE_INFO, "Cannot assign type [%s] to [Package] " "(source must be type Pkg)", AcpiUtGetObjectTypeName (SourceDesc))); return_ACPI_STATUS (AE_AML_TARGET_TYPE); } break; } ACPI_FALLTHROUGH; case ACPI_TYPE_DEVICE: case ACPI_TYPE_EVENT: case ACPI_TYPE_MUTEX: case ACPI_TYPE_REGION: case ACPI_TYPE_POWER: case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_THERMAL: ACPI_ERROR ((AE_INFO, "Target must be [Buffer/Integer/String/Reference]" ", found [%s] (%4.4s)", AcpiUtGetTypeName (Node->Type), Node->Name.Ascii)); return_ACPI_STATUS (AE_AML_TARGET_TYPE); default: break; } } /* * Resolve the source object to an actual value * (If it is a reference object) */ Status = AcpiExResolveObject (&SourceDesc, TargetType, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Do the actual store operation */ switch (TargetType) { /* * The simple data types all support implicit source operand * conversion before the store. */ case ACPI_TYPE_INTEGER: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: if ((WalkState->Opcode == AML_COPY_OBJECT_OP) || !ImplicitConversion) { /* * However, CopyObject and Stores to ArgX do not perform * an implicit conversion, as per the ACPI specification. * A direct store is performed instead. */ Status = AcpiExStoreDirectToNode (SourceDesc, Node, WalkState); break; } /* Store with implicit source operand conversion support */ Status = AcpiExStoreObjectToObject (SourceDesc, TargetDesc, &NewDesc, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (NewDesc != TargetDesc) { /* * Store the new NewDesc as the new value of the Name, and set * the Name's type to that of the value being stored in it. * SourceDesc reference count is incremented by AttachObject. * * Note: This may change the type of the node if an explicit * store has been performed such that the node/object type * has been changed. */ Status = AcpiNsAttachObject ( Node, NewDesc, NewDesc->Common.Type); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Store type [%s] into [%s] via Convert/Attach\n", AcpiUtGetObjectTypeName (SourceDesc), AcpiUtGetObjectTypeName (NewDesc))); } break; case ACPI_TYPE_BUFFER_FIELD: case ACPI_TYPE_LOCAL_REGION_FIELD: case ACPI_TYPE_LOCAL_BANK_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD: /* * For all fields, always write the source data to the target * field. Any required implicit source operand conversion is * performed in the function below as necessary. Note, field * objects must retain their original type permanently. */ Status = AcpiExWriteDataToField (SourceDesc, TargetDesc, &WalkState->ResultObj); break; default: /* * CopyObject operator: No conversions for all other types. * Instead, directly store a copy of the source object. * * This is the ACPI spec-defined behavior for the CopyObject * operator. (Note, for this default case, all normal * Store/Target operations exited above with an error). */ Status = AcpiExStoreDirectToNode (SourceDesc, Node, WalkState); break; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExStoreDirectToNode * * PARAMETERS: SourceDesc - Value to be stored * Node - Named object to receive the value * WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: "Store" an object directly to a node. This involves a copy * and an attach. * ******************************************************************************/ static ACPI_STATUS AcpiExStoreDirectToNode ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_NAMESPACE_NODE *Node, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *NewDesc; ACPI_FUNCTION_TRACE (ExStoreDirectToNode); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Storing [%s] (%p) directly into node [%s] (%p)" " with no implicit conversion\n", AcpiUtGetObjectTypeName (SourceDesc), SourceDesc, AcpiUtGetTypeName (Node->Type), Node)); /* Copy the source object to a new object */ Status = AcpiUtCopyIobjectToIobject (SourceDesc, &NewDesc, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Attach the new object to the node */ Status = AcpiNsAttachObject (Node, NewDesc, NewDesc->Common.Type); AcpiUtRemoveReference (NewDesc); return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exstoren.c000066400000000000000000000401611465205512700224220ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exstoren - AML Interpreter object store support, * Store to Node (namespace object) * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "amlcode.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exstoren") /******************************************************************************* * * FUNCTION: AcpiExResolveObject * * PARAMETERS: SourceDescPtr - Pointer to the source object * TargetType - Current type of the target * WalkState - Current walk state * * RETURN: Status, resolved object in SourceDescPtr. * * DESCRIPTION: Resolve an object. If the object is a reference, dereference * it and return the actual object in the SourceDescPtr. * ******************************************************************************/ ACPI_STATUS AcpiExResolveObject ( ACPI_OPERAND_OBJECT **SourceDescPtr, ACPI_OBJECT_TYPE TargetType, ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT *SourceDesc = *SourceDescPtr; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (ExResolveObject); /* Ensure we have a Target that can be stored to */ switch (TargetType) { case ACPI_TYPE_BUFFER_FIELD: case ACPI_TYPE_LOCAL_REGION_FIELD: case ACPI_TYPE_LOCAL_BANK_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD: /* * These cases all require only Integers or values that * can be converted to Integers (Strings or Buffers) */ case ACPI_TYPE_INTEGER: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: /* * Stores into a Field/Region or into a Integer/Buffer/String * are all essentially the same. This case handles the * "interchangeable" types Integer, String, and Buffer. */ if (SourceDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) { /* Resolve a reference object first */ Status = AcpiExResolveToValue (SourceDescPtr, WalkState); if (ACPI_FAILURE (Status)) { break; } } /* For CopyObject, no further validation necessary */ if (WalkState->Opcode == AML_COPY_OBJECT_OP) { break; } /* Must have a Integer, Buffer, or String */ if ((SourceDesc->Common.Type != ACPI_TYPE_INTEGER) && (SourceDesc->Common.Type != ACPI_TYPE_BUFFER) && (SourceDesc->Common.Type != ACPI_TYPE_STRING) && !((SourceDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) && (SourceDesc->Reference.Class== ACPI_REFCLASS_TABLE))) { /* Conversion successful but still not a valid type */ ACPI_ERROR ((AE_INFO, "Cannot assign type [%s] to [%s] (must be type Int/Str/Buf)", AcpiUtGetObjectTypeName (SourceDesc), AcpiUtGetTypeName (TargetType))); Status = AE_AML_OPERAND_TYPE; } break; case ACPI_TYPE_LOCAL_ALIAS: case ACPI_TYPE_LOCAL_METHOD_ALIAS: /* * All aliases should have been resolved earlier, during the * operand resolution phase. */ ACPI_ERROR ((AE_INFO, "Store into an unresolved Alias object")); Status = AE_AML_INTERNAL; break; case ACPI_TYPE_PACKAGE: default: /* * All other types than Alias and the various Fields come here, * including the untyped case - ACPI_TYPE_ANY. */ break; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExStoreObjectToObject * * PARAMETERS: SourceDesc - Object to store * DestDesc - Object to receive a copy of the source * NewDesc - New object if DestDesc is obsoleted * WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: "Store" an object to another object. This may include * converting the source type to the target type (implicit * conversion), and a copy of the value of the source to * the target. * * The Assignment of an object to another (not named) object * is handled here. * The Source passed in will replace the current value (if any) * with the input value. * * When storing into an object the data is converted to the * target object type then stored in the object. This means * that the target object type (for an initialized target) will * not be changed by a store operation. * * This module allows destination types of Number, String, * Buffer, and Package. * * Assumes parameters are already validated. NOTE: SourceDesc * resolution (from a reference object) must be performed by * the caller if necessary. * ******************************************************************************/ ACPI_STATUS AcpiExStoreObjectToObject ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *DestDesc, ACPI_OPERAND_OBJECT **NewDesc, ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT *ActualSrcDesc; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE_PTR (ExStoreObjectToObject, SourceDesc); ActualSrcDesc = SourceDesc; if (!DestDesc) { /* * There is no destination object (An uninitialized node or * package element), so we can simply copy the source object * creating a new destination object */ Status = AcpiUtCopyIobjectToIobject (ActualSrcDesc, NewDesc, WalkState); return_ACPI_STATUS (Status); } if (SourceDesc->Common.Type != DestDesc->Common.Type) { /* * The source type does not match the type of the destination. * Perform the "implicit conversion" of the source to the current type * of the target as per the ACPI specification. * * If no conversion performed, ActualSrcDesc = SourceDesc. * Otherwise, ActualSrcDesc is a temporary object to hold the * converted object. */ Status = AcpiExConvertToTargetType (DestDesc->Common.Type, SourceDesc, &ActualSrcDesc, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (SourceDesc == ActualSrcDesc) { /* * No conversion was performed. Return the SourceDesc as the * new object. */ *NewDesc = SourceDesc; return_ACPI_STATUS (AE_OK); } } /* * We now have two objects of identical types, and we can perform a * copy of the *value* of the source object. */ switch (DestDesc->Common.Type) { case ACPI_TYPE_INTEGER: DestDesc->Integer.Value = ActualSrcDesc->Integer.Value; /* Truncate value if we are executing from a 32-bit ACPI table */ (void) AcpiExTruncateFor32bitTable (DestDesc); break; case ACPI_TYPE_STRING: Status = AcpiExStoreStringToString (ActualSrcDesc, DestDesc); break; case ACPI_TYPE_BUFFER: Status = AcpiExStoreBufferToBuffer (ActualSrcDesc, DestDesc); break; case ACPI_TYPE_PACKAGE: Status = AcpiUtCopyIobjectToIobject (ActualSrcDesc, &DestDesc, WalkState); break; default: /* * All other types come here. */ ACPI_WARNING ((AE_INFO, "Store into type [%s] not implemented", AcpiUtGetObjectTypeName (DestDesc))); Status = AE_NOT_IMPLEMENTED; break; } if (ActualSrcDesc != SourceDesc) { /* Delete the intermediate (temporary) source object */ AcpiUtRemoveReference (ActualSrcDesc); } *NewDesc = DestDesc; return_ACPI_STATUS (Status); } src/acpica/source/components/executer/exstorob.c000066400000000000000000000332511465205512700224220ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exstorob - AML object store support, store to object * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exstorob") /******************************************************************************* * * FUNCTION: AcpiExStoreBufferToBuffer * * PARAMETERS: SourceDesc - Source object to copy * TargetDesc - Destination object of the copy * * RETURN: Status * * DESCRIPTION: Copy a buffer object to another buffer object. * ******************************************************************************/ ACPI_STATUS AcpiExStoreBufferToBuffer ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *TargetDesc) { UINT32 Length; UINT8 *Buffer; ACPI_FUNCTION_TRACE_PTR (ExStoreBufferToBuffer, SourceDesc); /* If Source and Target are the same, just return */ if (SourceDesc == TargetDesc) { return_ACPI_STATUS (AE_OK); } /* We know that SourceDesc is a buffer by now */ Buffer = ACPI_CAST_PTR (UINT8, SourceDesc->Buffer.Pointer); Length = SourceDesc->Buffer.Length; /* * If target is a buffer of length zero or is a static buffer, * allocate a new buffer of the proper length */ if ((TargetDesc->Buffer.Length == 0) || (TargetDesc->Common.Flags & AOPOBJ_STATIC_POINTER)) { TargetDesc->Buffer.Pointer = ACPI_ALLOCATE (Length); if (!TargetDesc->Buffer.Pointer) { return_ACPI_STATUS (AE_NO_MEMORY); } TargetDesc->Buffer.Length = Length; } /* Copy source buffer to target buffer */ if (Length <= TargetDesc->Buffer.Length) { /* Clear existing buffer and copy in the new one */ memset (TargetDesc->Buffer.Pointer, 0, TargetDesc->Buffer.Length); memcpy (TargetDesc->Buffer.Pointer, Buffer, Length); #ifdef ACPI_OBSOLETE_BEHAVIOR /* * NOTE: ACPI versions up to 3.0 specified that the buffer must be * truncated if the string is smaller than the buffer. However, "other" * implementations of ACPI never did this and thus became the defacto * standard. ACPI 3.0A changes this behavior such that the buffer * is no longer truncated. */ /* * OBSOLETE BEHAVIOR: * If the original source was a string, we must truncate the buffer, * according to the ACPI spec. Integer-to-Buffer and Buffer-to-Buffer * copy must not truncate the original buffer. */ if (OriginalSrcType == ACPI_TYPE_STRING) { /* Set the new length of the target */ TargetDesc->Buffer.Length = Length; } #endif } else { /* Truncate the source, copy only what will fit */ memcpy (TargetDesc->Buffer.Pointer, Buffer, TargetDesc->Buffer.Length); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Truncating source buffer from %X to %X\n", Length, TargetDesc->Buffer.Length)); } /* Copy flags */ TargetDesc->Buffer.Flags = SourceDesc->Buffer.Flags; TargetDesc->Common.Flags &= ~AOPOBJ_STATIC_POINTER; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExStoreStringToString * * PARAMETERS: SourceDesc - Source object to copy * TargetDesc - Destination object of the copy * * RETURN: Status * * DESCRIPTION: Copy a String object to another String object * ******************************************************************************/ ACPI_STATUS AcpiExStoreStringToString ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *TargetDesc) { UINT32 Length; UINT8 *Buffer; ACPI_FUNCTION_TRACE_PTR (ExStoreStringToString, SourceDesc); /* If Source and Target are the same, just return */ if (SourceDesc == TargetDesc) { return_ACPI_STATUS (AE_OK); } /* We know that SourceDesc is a string by now */ Buffer = ACPI_CAST_PTR (UINT8, SourceDesc->String.Pointer); Length = SourceDesc->String.Length; /* * Replace existing string value if it will fit and the string * pointer is not a static pointer (part of an ACPI table) */ if ((Length < TargetDesc->String.Length) && (!(TargetDesc->Common.Flags & AOPOBJ_STATIC_POINTER))) { /* * String will fit in existing non-static buffer. * Clear old string and copy in the new one */ memset (TargetDesc->String.Pointer, 0, (ACPI_SIZE) TargetDesc->String.Length + 1); memcpy (TargetDesc->String.Pointer, Buffer, Length); } else { /* * Free the current buffer, then allocate a new buffer * large enough to hold the value */ if (TargetDesc->String.Pointer && (!(TargetDesc->Common.Flags & AOPOBJ_STATIC_POINTER))) { /* Only free if not a pointer into the DSDT */ ACPI_FREE (TargetDesc->String.Pointer); } TargetDesc->String.Pointer = ACPI_ALLOCATE_ZEROED ((ACPI_SIZE) Length + 1); if (!TargetDesc->String.Pointer) { return_ACPI_STATUS (AE_NO_MEMORY); } TargetDesc->Common.Flags &= ~AOPOBJ_STATIC_POINTER; memcpy (TargetDesc->String.Pointer, Buffer, Length); } /* Set the new target length */ TargetDesc->String.Length = Length; return_ACPI_STATUS (AE_OK); } src/acpica/source/components/executer/exsystem.c000066400000000000000000000376151465205512700224460ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exsystem - Interface to OS services * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exsystem") /******************************************************************************* * * FUNCTION: AcpiExSystemWaitSemaphore * * PARAMETERS: Semaphore - Semaphore to wait on * Timeout - Max time to wait * * RETURN: Status * * DESCRIPTION: Implements a semaphore wait with a check to see if the * semaphore is available immediately. If it is not, the * interpreter is released before waiting. * ******************************************************************************/ ACPI_STATUS AcpiExSystemWaitSemaphore ( ACPI_SEMAPHORE Semaphore, UINT16 Timeout) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (ExSystemWaitSemaphore); Status = AcpiOsWaitSemaphore (Semaphore, 1, ACPI_DO_NOT_WAIT); if (ACPI_SUCCESS (Status)) { return_ACPI_STATUS (Status); } if (Status == AE_TIME) { /* We must wait, so unlock the interpreter */ AcpiExExitInterpreter (); Status = AcpiOsWaitSemaphore (Semaphore, 1, Timeout); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*** Thread awake after blocking, %s\n", AcpiFormatException (Status))); /* Reacquire the interpreter */ AcpiExEnterInterpreter (); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExSystemWaitMutex * * PARAMETERS: Mutex - Mutex to wait on * Timeout - Max time to wait * * RETURN: Status * * DESCRIPTION: Implements a mutex wait with a check to see if the * mutex is available immediately. If it is not, the * interpreter is released before waiting. * ******************************************************************************/ ACPI_STATUS AcpiExSystemWaitMutex ( ACPI_MUTEX Mutex, UINT16 Timeout) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (ExSystemWaitMutex); Status = AcpiOsAcquireMutex (Mutex, ACPI_DO_NOT_WAIT); if (ACPI_SUCCESS (Status)) { return_ACPI_STATUS (Status); } if (Status == AE_TIME) { /* We must wait, so unlock the interpreter */ AcpiExExitInterpreter (); Status = AcpiOsAcquireMutex (Mutex, Timeout); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*** Thread awake after blocking, %s\n", AcpiFormatException (Status))); /* Reacquire the interpreter */ AcpiExEnterInterpreter (); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExSystemDoStall * * PARAMETERS: HowLongUs - The amount of time to stall, * in microseconds * * RETURN: Status * * DESCRIPTION: Suspend running thread for specified amount of time. * Note: ACPI specification requires that Stall() does not * relinquish the processor, and delays longer than 100 usec * should use Sleep() instead. We allow stalls up to 255 usec * for compatibility with other interpreters and existing BIOSs. * ******************************************************************************/ ACPI_STATUS AcpiExSystemDoStall ( UINT32 HowLongUs) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_ENTRY (); if (HowLongUs > 255) { /* * Longer than 255 microseconds, this is an error * * (ACPI specifies 100 usec as max, but this gives some slack in * order to support existing BIOSs) */ ACPI_ERROR ((AE_INFO, "Time parameter is too large (%u)", HowLongUs)); Status = AE_AML_OPERAND_VALUE; } else { if (HowLongUs > 100) { ACPI_WARNING ((AE_INFO, "Time parameter %u us > 100 us violating ACPI spec, please fix the firmware.", HowLongUs)); } AcpiOsStall (HowLongUs); } return (Status); } /******************************************************************************* * * FUNCTION: AcpiExSystemDoSleep * * PARAMETERS: HowLongMs - The amount of time to sleep, * in milliseconds * * RETURN: None * * DESCRIPTION: Sleep the running thread for specified amount of time. * ******************************************************************************/ ACPI_STATUS AcpiExSystemDoSleep ( UINT64 HowLongMs) { ACPI_FUNCTION_ENTRY (); /* Since this thread will sleep, we must release the interpreter */ AcpiExExitInterpreter (); /* * For compatibility with other ACPI implementations and to prevent * accidental deep sleeps, limit the sleep time to something reasonable. */ if (HowLongMs > ACPI_MAX_SLEEP) { HowLongMs = ACPI_MAX_SLEEP; } AcpiOsSleep (HowLongMs); /* And now we must get the interpreter again */ AcpiExEnterInterpreter (); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiExSystemSignalEvent * * PARAMETERS: ObjDesc - The object descriptor for this op * * RETURN: Status * * DESCRIPTION: Provides an access point to perform synchronization operations * within the AML. * ******************************************************************************/ ACPI_STATUS AcpiExSystemSignalEvent ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (ExSystemSignalEvent); if (ObjDesc) { Status = AcpiOsSignalSemaphore (ObjDesc->Event.OsSemaphore, 1); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExSystemWaitEvent * * PARAMETERS: TimeDesc - The 'time to delay' object descriptor * ObjDesc - The object descriptor for this op * * RETURN: Status * * DESCRIPTION: Provides an access point to perform synchronization operations * within the AML. This operation is a request to wait for an * event. * ******************************************************************************/ ACPI_STATUS AcpiExSystemWaitEvent ( ACPI_OPERAND_OBJECT *TimeDesc, ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (ExSystemWaitEvent); if (ObjDesc) { Status = AcpiExSystemWaitSemaphore (ObjDesc->Event.OsSemaphore, (UINT16) TimeDesc->Integer.Value); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiExSystemResetEvent * * PARAMETERS: ObjDesc - The object descriptor for this op * * RETURN: Status * * DESCRIPTION: Reset an event to a known state. * ******************************************************************************/ ACPI_STATUS AcpiExSystemResetEvent ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_STATUS Status = AE_OK; ACPI_SEMAPHORE TempSemaphore; ACPI_FUNCTION_ENTRY (); /* * We are going to simply delete the existing semaphore and * create a new one! */ Status = AcpiOsCreateSemaphore (ACPI_NO_UNIT_LIMIT, 0, &TempSemaphore); if (ACPI_SUCCESS (Status)) { (void) AcpiOsDeleteSemaphore (ObjDesc->Event.OsSemaphore); ObjDesc->Event.OsSemaphore = TempSemaphore; } return (Status); } src/acpica/source/components/executer/extrace.c000066400000000000000000000413521465205512700222110ustar00rootroot00000000000000/****************************************************************************** * * Module Name: extrace - Support for interpreter execution tracing * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acinterp.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("extrace") static ACPI_OPERAND_OBJECT *AcpiGbl_TraceMethodObject = NULL; /* Local prototypes */ #ifdef ACPI_DEBUG_OUTPUT static const char * AcpiExGetTraceEventName ( ACPI_TRACE_EVENT_TYPE Type); #endif /******************************************************************************* * * FUNCTION: AcpiExInterpreterTraceEnabled * * PARAMETERS: Name - Whether method name should be matched, * this should be checked before starting * the tracer * * RETURN: TRUE if interpreter trace is enabled. * * DESCRIPTION: Check whether interpreter trace is enabled * ******************************************************************************/ static BOOLEAN AcpiExInterpreterTraceEnabled ( char *Name) { /* Check if tracing is enabled */ if (!(AcpiGbl_TraceFlags & ACPI_TRACE_ENABLED)) { return (FALSE); } /* * Check if tracing is filtered: * * 1. If the tracer is started, AcpiGbl_TraceMethodObject should have * been filled by the trace starter * 2. If the tracer is not started, AcpiGbl_TraceMethodName should be * matched if it is specified * 3. If the tracer is oneshot style, AcpiGbl_TraceMethodName should * not be cleared by the trace stopper during the first match */ if (AcpiGbl_TraceMethodObject) { return (TRUE); } if (Name && (AcpiGbl_TraceMethodName && strcmp (AcpiGbl_TraceMethodName, Name))) { return (FALSE); } if ((AcpiGbl_TraceFlags & ACPI_TRACE_ONESHOT) && !AcpiGbl_TraceMethodName) { return (FALSE); } return (TRUE); } /******************************************************************************* * * FUNCTION: AcpiExGetTraceEventName * * PARAMETERS: Type - Trace event type * * RETURN: Trace event name. * * DESCRIPTION: Used to obtain the full trace event name. * ******************************************************************************/ #ifdef ACPI_DEBUG_OUTPUT static const char * AcpiExGetTraceEventName ( ACPI_TRACE_EVENT_TYPE Type) { switch (Type) { case ACPI_TRACE_AML_METHOD: return "Method"; case ACPI_TRACE_AML_OPCODE: return "Opcode"; case ACPI_TRACE_AML_REGION: return "Region"; default: return ""; } } #endif /******************************************************************************* * * FUNCTION: AcpiExTracePoint * * PARAMETERS: Type - Trace event type * Begin - TRUE if before execution * Aml - Executed AML address * Pathname - Object path * * RETURN: None * * DESCRIPTION: Internal interpreter execution trace. * ******************************************************************************/ void AcpiExTracePoint ( ACPI_TRACE_EVENT_TYPE Type, BOOLEAN Begin, UINT8 *Aml, char *Pathname) { ACPI_FUNCTION_NAME (ExTracePoint); if (Pathname) { ACPI_DEBUG_PRINT ((ACPI_DB_TRACE_POINT, "%s %s [0x%p:%s] execution.\n", AcpiExGetTraceEventName (Type), Begin ? "Begin" : "End", Aml, Pathname)); } else { ACPI_DEBUG_PRINT ((ACPI_DB_TRACE_POINT, "%s %s [0x%p] execution.\n", AcpiExGetTraceEventName (Type), Begin ? "Begin" : "End", Aml)); } } /******************************************************************************* * * FUNCTION: AcpiExStartTraceMethod * * PARAMETERS: MethodNode - Node of the method * ObjDesc - The method object * WalkState - current state, NULL if not yet executing * a method. * * RETURN: None * * DESCRIPTION: Start control method execution trace * ******************************************************************************/ void AcpiExStartTraceMethod ( ACPI_NAMESPACE_NODE *MethodNode, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState) { char *Pathname = NULL; BOOLEAN Enabled = FALSE; ACPI_FUNCTION_NAME (ExStartTraceMethod); if (MethodNode) { Pathname = AcpiNsGetNormalizedPathname (MethodNode, TRUE); } Enabled = AcpiExInterpreterTraceEnabled (Pathname); if (Enabled && !AcpiGbl_TraceMethodObject) { AcpiGbl_TraceMethodObject = ObjDesc; AcpiGbl_OriginalDbgLevel = AcpiDbgLevel; AcpiGbl_OriginalDbgLayer = AcpiDbgLayer; AcpiDbgLevel = ACPI_TRACE_LEVEL_ALL; AcpiDbgLayer = ACPI_TRACE_LAYER_ALL; if (AcpiGbl_TraceDbgLevel) { AcpiDbgLevel = AcpiGbl_TraceDbgLevel; } if (AcpiGbl_TraceDbgLayer) { AcpiDbgLayer = AcpiGbl_TraceDbgLayer; } } if (Enabled) { ACPI_TRACE_POINT (ACPI_TRACE_AML_METHOD, TRUE, ObjDesc ? ObjDesc->Method.AmlStart : NULL, Pathname); } if (Pathname) { ACPI_FREE (Pathname); } } /******************************************************************************* * * FUNCTION: AcpiExStopTraceMethod * * PARAMETERS: MethodNode - Node of the method * ObjDesc - The method object * WalkState - current state, NULL if not yet executing * a method. * * RETURN: None * * DESCRIPTION: Stop control method execution trace * ******************************************************************************/ void AcpiExStopTraceMethod ( ACPI_NAMESPACE_NODE *MethodNode, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState) { char *Pathname = NULL; BOOLEAN Enabled; ACPI_FUNCTION_NAME (ExStopTraceMethod); if (MethodNode) { Pathname = AcpiNsGetNormalizedPathname (MethodNode, TRUE); } Enabled = AcpiExInterpreterTraceEnabled (NULL); if (Enabled) { ACPI_TRACE_POINT (ACPI_TRACE_AML_METHOD, FALSE, ObjDesc ? ObjDesc->Method.AmlStart : NULL, Pathname); } /* Check whether the tracer should be stopped */ if (AcpiGbl_TraceMethodObject == ObjDesc) { /* Disable further tracing if type is one-shot */ if (AcpiGbl_TraceFlags & ACPI_TRACE_ONESHOT) { AcpiGbl_TraceMethodName = NULL; } AcpiDbgLevel = AcpiGbl_OriginalDbgLevel; AcpiDbgLayer = AcpiGbl_OriginalDbgLayer; AcpiGbl_TraceMethodObject = NULL; } if (Pathname) { ACPI_FREE (Pathname); } } /******************************************************************************* * * FUNCTION: AcpiExStartTraceOpcode * * PARAMETERS: Op - The parser opcode object * WalkState - current state, NULL if not yet executing * a method. * * RETURN: None * * DESCRIPTION: Start opcode execution trace * ******************************************************************************/ void AcpiExStartTraceOpcode ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState) { ACPI_FUNCTION_NAME (ExStartTraceOpcode); if (AcpiExInterpreterTraceEnabled (NULL) && (AcpiGbl_TraceFlags & ACPI_TRACE_OPCODE)) { ACPI_TRACE_POINT (ACPI_TRACE_AML_OPCODE, TRUE, Op->Common.Aml, Op->Common.AmlOpName); } } /******************************************************************************* * * FUNCTION: AcpiExStopTraceOpcode * * PARAMETERS: Op - The parser opcode object * WalkState - current state, NULL if not yet executing * a method. * * RETURN: None * * DESCRIPTION: Stop opcode execution trace * ******************************************************************************/ void AcpiExStopTraceOpcode ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState) { ACPI_FUNCTION_NAME (ExStopTraceOpcode); if (AcpiExInterpreterTraceEnabled (NULL) && (AcpiGbl_TraceFlags & ACPI_TRACE_OPCODE)) { ACPI_TRACE_POINT (ACPI_TRACE_AML_OPCODE, FALSE, Op->Common.Aml, Op->Common.AmlOpName); } } src/acpica/source/components/executer/exutils.c000066400000000000000000000515651465205512700222620ustar00rootroot00000000000000/****************************************************************************** * * Module Name: exutils - interpreter/scanner utilities * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ /* * DEFINE_AML_GLOBALS is tested in amlcode.h * to determine whether certain global names should be "defined" or only * "declared" in the current compilation. This enhances maintainability * by enabling a single header file to embody all knowledge of the names * in question. * * Exactly one module of any executable should #define DEFINE_GLOBALS * before #including the header files which use this convention. The * names in question will be defined and initialized in that module, * and declared as extern in all other modules which #include those * header files. */ #define DEFINE_AML_GLOBALS #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "amlcode.h" #define _COMPONENT ACPI_EXECUTER ACPI_MODULE_NAME ("exutils") /* Local prototypes */ static UINT32 AcpiExDigitsNeeded ( UINT64 Value, UINT32 Base); /******************************************************************************* * * FUNCTION: AcpiExEnterInterpreter * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Enter the interpreter execution region. Failure to enter * the interpreter region is a fatal system error. Used in * conjunction with ExitInterpreter. * ******************************************************************************/ void AcpiExEnterInterpreter ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (ExEnterInterpreter); Status = AcpiUtAcquireMutex (ACPI_MTX_INTERPRETER); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Could not acquire AML Interpreter mutex")); } Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Could not acquire AML Namespace mutex")); } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiExExitInterpreter * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Exit the interpreter execution region. This is the top level * routine used to exit the interpreter when all processing has * been completed, or when the method blocks. * * Cases where the interpreter is unlocked internally: * 1) Method will be blocked on a Sleep() AML opcode * 2) Method will be blocked on an Acquire() AML opcode * 3) Method will be blocked on a Wait() AML opcode * 4) Method will be blocked to acquire the global lock * 5) Method will be blocked waiting to execute a serialized control * method that is currently executing * 6) About to invoke a user-installed opregion handler * ******************************************************************************/ void AcpiExExitInterpreter ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (ExExitInterpreter); Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Could not release AML Namespace mutex")); } Status = AcpiUtReleaseMutex (ACPI_MTX_INTERPRETER); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Could not release AML Interpreter mutex")); } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiExTruncateFor32bitTable * * PARAMETERS: ObjDesc - Object to be truncated * * RETURN: TRUE if a truncation was performed, FALSE otherwise. * * DESCRIPTION: Truncate an ACPI Integer to 32 bits if the execution mode is * 32-bit, as determined by the revision of the DSDT. * ******************************************************************************/ BOOLEAN AcpiExTruncateFor32bitTable ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_FUNCTION_ENTRY (); /* * Object must be a valid number and we must be executing * a control method. Object could be NS node for AML_INT_NAMEPATH_OP. */ if ((!ObjDesc) || (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) || (ObjDesc->Common.Type != ACPI_TYPE_INTEGER)) { return (FALSE); } if ((AcpiGbl_IntegerByteWidth == 4) && (ObjDesc->Integer.Value > (UINT64) ACPI_UINT32_MAX)) { /* * We are executing in a 32-bit ACPI table. Truncate * the value to 32 bits by zeroing out the upper 32-bit field */ ObjDesc->Integer.Value &= (UINT64) ACPI_UINT32_MAX; return (TRUE); } return (FALSE); } /******************************************************************************* * * FUNCTION: AcpiExAcquireGlobalLock * * PARAMETERS: FieldFlags - Flags with Lock rule: * AlwaysLock or NeverLock * * RETURN: None * * DESCRIPTION: Obtain the ACPI hardware Global Lock, only if the field * flags specify that it is to be obtained before field access. * ******************************************************************************/ void AcpiExAcquireGlobalLock ( UINT32 FieldFlags) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (ExAcquireGlobalLock); /* Only use the lock if the AlwaysLock bit is set */ if (!(FieldFlags & AML_FIELD_LOCK_RULE_MASK)) { return_VOID; } /* Attempt to get the global lock, wait forever */ Status = AcpiExAcquireMutexObject (ACPI_WAIT_FOREVER, AcpiGbl_GlobalLockMutex, AcpiOsGetThreadId ()); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not acquire Global Lock")); } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiExReleaseGlobalLock * * PARAMETERS: FieldFlags - Flags with Lock rule: * AlwaysLock or NeverLock * * RETURN: None * * DESCRIPTION: Release the ACPI hardware Global Lock * ******************************************************************************/ void AcpiExReleaseGlobalLock ( UINT32 FieldFlags) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (ExReleaseGlobalLock); /* Only use the lock if the AlwaysLock bit is set */ if (!(FieldFlags & AML_FIELD_LOCK_RULE_MASK)) { return_VOID; } /* Release the global lock */ Status = AcpiExReleaseMutexObject (AcpiGbl_GlobalLockMutex); if (ACPI_FAILURE (Status)) { /* Report the error, but there isn't much else we can do */ ACPI_EXCEPTION ((AE_INFO, Status, "Could not release Global Lock")); } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiExDigitsNeeded * * PARAMETERS: Value - Value to be represented * Base - Base of representation * * RETURN: The number of digits. * * DESCRIPTION: Calculate the number of digits needed to represent the Value * in the given Base (Radix) * ******************************************************************************/ static UINT32 AcpiExDigitsNeeded ( UINT64 Value, UINT32 Base) { UINT32 NumDigits; UINT64 CurrentValue; ACPI_FUNCTION_TRACE (ExDigitsNeeded); /* UINT64 is unsigned, so we don't worry about a '-' prefix */ if (Value == 0) { return_UINT32 (1); } CurrentValue = Value; NumDigits = 0; /* Count the digits in the requested base */ while (CurrentValue) { (void) AcpiUtShortDivide (CurrentValue, Base, &CurrentValue, NULL); NumDigits++; } return_UINT32 (NumDigits); } /******************************************************************************* * * FUNCTION: AcpiExEisaIdToString * * PARAMETERS: OutString - Where to put the converted string (8 bytes) * CompressedId - EISAID to be converted * * RETURN: None * * DESCRIPTION: Convert a numeric EISAID to string representation. Return * buffer must be large enough to hold the string. The string * returned is always exactly of length ACPI_EISAID_STRING_SIZE * (includes null terminator). The EISAID is always 32 bits. * ******************************************************************************/ void AcpiExEisaIdToString ( char *OutString, UINT64 CompressedId) { UINT32 SwappedId; ACPI_FUNCTION_ENTRY (); /* The EISAID should be a 32-bit integer */ if (CompressedId > ACPI_UINT32_MAX) { ACPI_WARNING ((AE_INFO, "Expected EISAID is larger than 32 bits: " "0x%8.8X%8.8X, truncating", ACPI_FORMAT_UINT64 (CompressedId))); } /* Swap ID to big-endian to get contiguous bits */ SwappedId = AcpiUtDwordByteSwap ((UINT32) CompressedId); /* First 3 bytes are uppercase letters. Next 4 bytes are hexadecimal */ OutString[0] = (char) (0x40 + (((unsigned long) SwappedId >> 26) & 0x1F)); OutString[1] = (char) (0x40 + ((SwappedId >> 21) & 0x1F)); OutString[2] = (char) (0x40 + ((SwappedId >> 16) & 0x1F)); OutString[3] = AcpiUtHexToAsciiChar ((UINT64) SwappedId, 12); OutString[4] = AcpiUtHexToAsciiChar ((UINT64) SwappedId, 8); OutString[5] = AcpiUtHexToAsciiChar ((UINT64) SwappedId, 4); OutString[6] = AcpiUtHexToAsciiChar ((UINT64) SwappedId, 0); OutString[7] = 0; } /******************************************************************************* * * FUNCTION: AcpiExIntegerToString * * PARAMETERS: OutString - Where to put the converted string. At least * 21 bytes are needed to hold the largest * possible 64-bit integer. * Value - Value to be converted * * RETURN: Converted string in OutString * * DESCRIPTION: Convert a 64-bit integer to decimal string representation. * Assumes string buffer is large enough to hold the string. The * largest string is (ACPI_MAX64_DECIMAL_DIGITS + 1). * ******************************************************************************/ void AcpiExIntegerToString ( char *OutString, UINT64 Value) { UINT32 Count; UINT32 DigitsNeeded; UINT32 Remainder; ACPI_FUNCTION_ENTRY (); DigitsNeeded = AcpiExDigitsNeeded (Value, 10); OutString[DigitsNeeded] = 0; for (Count = DigitsNeeded; Count > 0; Count--) { (void) AcpiUtShortDivide (Value, 10, &Value, &Remainder); OutString[Count-1] = (char) ('0' + Remainder);\ } } /******************************************************************************* * * FUNCTION: AcpiExPciClsToString * * PARAMETERS: OutString - Where to put the converted string (7 bytes) * ClassCode - PCI class code to be converted (3 bytes) * * RETURN: Converted string in OutString * * DESCRIPTION: Convert 3-bytes PCI class code to string representation. * Return buffer must be large enough to hold the string. The * string returned is always exactly of length * ACPI_PCICLS_STRING_SIZE (includes null terminator). * ******************************************************************************/ void AcpiExPciClsToString ( char *OutString, UINT8 ClassCode[3]) { ACPI_FUNCTION_ENTRY (); /* All 3 bytes are hexadecimal */ OutString[0] = AcpiUtHexToAsciiChar ((UINT64) ClassCode[0], 4); OutString[1] = AcpiUtHexToAsciiChar ((UINT64) ClassCode[0], 0); OutString[2] = AcpiUtHexToAsciiChar ((UINT64) ClassCode[1], 4); OutString[3] = AcpiUtHexToAsciiChar ((UINT64) ClassCode[1], 0); OutString[4] = AcpiUtHexToAsciiChar ((UINT64) ClassCode[2], 4); OutString[5] = AcpiUtHexToAsciiChar ((UINT64) ClassCode[2], 0); OutString[6] = 0; } /******************************************************************************* * * FUNCTION: AcpiIsValidSpaceId * * PARAMETERS: SpaceId - ID to be validated * * RETURN: TRUE if SpaceId is a valid/supported ID. * * DESCRIPTION: Validate an operation region SpaceID. * ******************************************************************************/ BOOLEAN AcpiIsValidSpaceId ( UINT8 SpaceId) { if ((SpaceId >= ACPI_NUM_PREDEFINED_REGIONS) && (SpaceId < ACPI_USER_REGION_BEGIN) && (SpaceId != ACPI_ADR_SPACE_DATA_TABLE) && (SpaceId != ACPI_ADR_SPACE_FIXED_HARDWARE)) { return (FALSE); } return (TRUE); } src/acpica/source/components/hardware/000077500000000000000000000000001465205512700203565ustar00rootroot00000000000000src/acpica/source/components/hardware/hwacpi.c000066400000000000000000000311341465205512700217770ustar00rootroot00000000000000/****************************************************************************** * * Module Name: hwacpi - ACPI Hardware Initialization/Mode Interface * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_HARDWARE ACPI_MODULE_NAME ("hwacpi") #if (!ACPI_REDUCED_HARDWARE) /* Entire module */ /****************************************************************************** * * FUNCTION: AcpiHwSetMode * * PARAMETERS: Mode - SYS_MODE_ACPI or SYS_MODE_LEGACY * * RETURN: Status * * DESCRIPTION: Transitions the system into the requested mode. * ******************************************************************************/ ACPI_STATUS AcpiHwSetMode ( UINT32 Mode) { ACPI_STATUS Status; UINT32 Retry; ACPI_FUNCTION_TRACE (HwSetMode); /* If the Hardware Reduced flag is set, machine is always in acpi mode */ if (AcpiGbl_ReducedHardware) { return_ACPI_STATUS (AE_OK); } /* * ACPI 2.0 clarified that if SMI_CMD in FADT is zero, * system does not support mode transition. */ if (!AcpiGbl_FADT.SmiCommand) { ACPI_ERROR ((AE_INFO, "No SMI_CMD in FADT, mode transition failed")); return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE); } /* * ACPI 2.0 clarified the meaning of ACPI_ENABLE and ACPI_DISABLE * in FADT: If it is zero, enabling or disabling is not supported. * As old systems may have used zero for mode transition, * we make sure both the numbers are zero to determine these * transitions are not supported. */ if (!AcpiGbl_FADT.AcpiEnable && !AcpiGbl_FADT.AcpiDisable) { ACPI_ERROR ((AE_INFO, "No ACPI mode transition supported in this system " "(enable/disable both zero)")); return_ACPI_STATUS (AE_OK); } switch (Mode) { case ACPI_SYS_MODE_ACPI: /* BIOS should have disabled ALL fixed and GP events */ Status = AcpiHwWritePort (AcpiGbl_FADT.SmiCommand, (UINT32) AcpiGbl_FADT.AcpiEnable, 8); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Attempting to enable ACPI mode\n")); break; case ACPI_SYS_MODE_LEGACY: /* * BIOS should clear all fixed status bits and restore fixed event * enable bits to default */ Status = AcpiHwWritePort (AcpiGbl_FADT.SmiCommand, (UINT32) AcpiGbl_FADT.AcpiDisable, 8); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Attempting to enable Legacy (non-ACPI) mode\n")); break; default: return_ACPI_STATUS (AE_BAD_PARAMETER); } if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not write ACPI mode change")); return_ACPI_STATUS (Status); } /* * Some hardware takes a LONG time to switch modes. Give them 3 sec to * do so, but allow faster systems to proceed more quickly. */ Retry = 3000; while (Retry) { if (AcpiHwGetMode () == Mode) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Mode %X successfully enabled\n", Mode)); return_ACPI_STATUS (AE_OK); } AcpiOsStall (ACPI_USEC_PER_MSEC); Retry--; } ACPI_ERROR ((AE_INFO, "Hardware did not change modes")); return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE); } /******************************************************************************* * * FUNCTION: AcpiHwGetMode * * PARAMETERS: none * * RETURN: SYS_MODE_ACPI or SYS_MODE_LEGACY * * DESCRIPTION: Return current operating state of system. Determined by * querying the SCI_EN bit. * ******************************************************************************/ UINT32 AcpiHwGetMode ( void) { ACPI_STATUS Status; UINT32 Value; ACPI_FUNCTION_TRACE (HwGetMode); /* If the Hardware Reduced flag is set, machine is always in acpi mode */ if (AcpiGbl_ReducedHardware) { return_UINT32 (ACPI_SYS_MODE_ACPI); } /* * ACPI 2.0 clarified that if SMI_CMD in FADT is zero, * system does not support mode transition. */ if (!AcpiGbl_FADT.SmiCommand) { return_UINT32 (ACPI_SYS_MODE_ACPI); } Status = AcpiReadBitRegister (ACPI_BITREG_SCI_ENABLE, &Value); if (ACPI_FAILURE (Status)) { return_UINT32 (ACPI_SYS_MODE_LEGACY); } if (Value) { return_UINT32 (ACPI_SYS_MODE_ACPI); } else { return_UINT32 (ACPI_SYS_MODE_LEGACY); } } #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/hardware/hwesleep.c000066400000000000000000000341251465205512700223430ustar00rootroot00000000000000/****************************************************************************** * * Name: hwesleep.c - ACPI Hardware Sleep/Wake Support functions for the * extended FADT-V5 sleep registers. * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_HARDWARE ACPI_MODULE_NAME ("hwesleep") /******************************************************************************* * * FUNCTION: AcpiHwExecuteSleepMethod * * PARAMETERS: MethodPathname - Pathname of method to execute * IntegerArgument - Argument to pass to the method * * RETURN: None * * DESCRIPTION: Execute a sleep/wake related method with one integer argument * and no return value. * ******************************************************************************/ void AcpiHwExecuteSleepMethod ( char *MethodPathname, UINT32 IntegerArgument) { ACPI_OBJECT_LIST ArgList; ACPI_OBJECT Arg; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (HwExecuteSleepMethod); /* One argument, IntegerArgument; No return value expected */ ArgList.Count = 1; ArgList.Pointer = &Arg; Arg.Type = ACPI_TYPE_INTEGER; Arg.Integer.Value = (UINT64) IntegerArgument; Status = AcpiEvaluateObject (NULL, MethodPathname, &ArgList, NULL); if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND) { ACPI_EXCEPTION ((AE_INFO, Status, "While executing method %s", MethodPathname)); } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiHwExtendedSleep * * PARAMETERS: SleepState - Which sleep state to enter * * RETURN: Status * * DESCRIPTION: Enter a system sleep state via the extended FADT sleep * registers (V5 FADT). * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED * ******************************************************************************/ ACPI_STATUS AcpiHwExtendedSleep ( UINT8 SleepState) { ACPI_STATUS Status; UINT8 SleepControl; UINT64 SleepStatus; ACPI_FUNCTION_TRACE (HwExtendedSleep); /* Extended sleep registers must be valid */ if (!AcpiGbl_FADT.SleepControl.Address || !AcpiGbl_FADT.SleepStatus.Address) { return_ACPI_STATUS (AE_NOT_EXIST); } /* Clear wake status (WAK_STS) */ Status = AcpiWrite ((UINT64) ACPI_X_WAKE_STATUS, &AcpiGbl_FADT.SleepStatus); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } AcpiGbl_SystemAwakeAndRunning = FALSE; /* * Set the SLP_TYP and SLP_EN bits. * * Note: We only use the first value returned by the \_Sx method * (AcpiGbl_SleepTypeA) - As per ACPI specification. */ ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "Entering sleep state [S%u]\n", SleepState)); SleepControl = ((AcpiGbl_SleepTypeA << ACPI_X_SLEEP_TYPE_POSITION) & ACPI_X_SLEEP_TYPE_MASK) | ACPI_X_SLEEP_ENABLE; /* Flush caches, as per ACPI specification */ if (SleepState < ACPI_STATE_S4) { ACPI_FLUSH_CPU_CACHE (); } Status = AcpiOsEnterSleep (SleepState, SleepControl, 0); if (Status == AE_CTRL_TERMINATE) { return_ACPI_STATUS (AE_OK); } if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiWrite ((UINT64) SleepControl, &AcpiGbl_FADT.SleepControl); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Wait for transition back to Working State */ do { Status = AcpiRead (&SleepStatus, &AcpiGbl_FADT.SleepStatus); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } while (!(((UINT8) SleepStatus) & ACPI_X_WAKE_STATUS)); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiHwExtendedWakePrep * * PARAMETERS: SleepState - Which sleep state we just exited * * RETURN: Status * * DESCRIPTION: Perform first part of OS-independent ACPI cleanup after * a sleep. Called with interrupts ENABLED. * ******************************************************************************/ ACPI_STATUS AcpiHwExtendedWakePrep ( UINT8 SleepState) { UINT8 SleepTypeValue; ACPI_FUNCTION_TRACE (HwExtendedWakePrep); if (AcpiGbl_SleepTypeAS0 != ACPI_SLEEP_TYPE_INVALID) { SleepTypeValue = ((AcpiGbl_SleepTypeAS0 << ACPI_X_SLEEP_TYPE_POSITION) & ACPI_X_SLEEP_TYPE_MASK); (void) AcpiWrite ((UINT64) (SleepTypeValue | ACPI_X_SLEEP_ENABLE), &AcpiGbl_FADT.SleepControl); } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiHwExtendedWake * * PARAMETERS: SleepState - Which sleep state we just exited * * RETURN: Status * * DESCRIPTION: Perform OS-independent ACPI cleanup after a sleep * Called with interrupts ENABLED. * ******************************************************************************/ ACPI_STATUS AcpiHwExtendedWake ( UINT8 SleepState) { ACPI_FUNCTION_TRACE (HwExtendedWake); /* Ensure EnterSleepStatePrep -> EnterSleepState ordering */ AcpiGbl_SleepTypeA = ACPI_SLEEP_TYPE_INVALID; /* Execute the wake methods */ AcpiHwExecuteSleepMethod (METHOD_PATHNAME__SST, ACPI_SST_WAKING); AcpiHwExecuteSleepMethod (METHOD_PATHNAME__WAK, SleepState); /* * Some BIOS code assumes that WAK_STS will be cleared on resume * and use it to determine whether the system is rebooting or * resuming. Clear WAK_STS for compatibility. */ (void) AcpiWrite ((UINT64) ACPI_X_WAKE_STATUS, &AcpiGbl_FADT.SleepStatus); AcpiGbl_SystemAwakeAndRunning = TRUE; AcpiHwExecuteSleepMethod (METHOD_PATHNAME__SST, ACPI_SST_WORKING); return_ACPI_STATUS (AE_OK); } src/acpica/source/components/hardware/hwgpe.c000066400000000000000000000574471465205512700216550ustar00rootroot00000000000000/****************************************************************************** * * Module Name: hwgpe - Low level GPE enable/disable/clear functions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acevents.h" #define _COMPONENT ACPI_HARDWARE ACPI_MODULE_NAME ("hwgpe") #if (!ACPI_REDUCED_HARDWARE) /* Entire module */ /* Local prototypes */ static ACPI_STATUS AcpiHwEnableWakeupGpeBlock ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context); static ACPI_STATUS AcpiHwGpeEnableWrite ( UINT8 EnableMask, ACPI_GPE_REGISTER_INFO *GpeRegisterInfo); /****************************************************************************** * * FUNCTION: AcpiHwGetGpeRegisterBit * * PARAMETERS: GpeEventInfo - Info block for the GPE * * RETURN: Register mask with a one in the GPE bit position * * DESCRIPTION: Compute the register mask for this GPE. One bit is set in the * correct position for the input GPE. * ******************************************************************************/ UINT32 AcpiHwGetGpeRegisterBit ( ACPI_GPE_EVENT_INFO *GpeEventInfo) { return ((UINT32) 1 << (GpeEventInfo->GpeNumber - GpeEventInfo->RegisterInfo->BaseGpeNumber)); } /****************************************************************************** * * FUNCTION: AcpiHwLowSetGpe * * PARAMETERS: GpeEventInfo - Info block for the GPE to be disabled * Action - Enable or disable * * RETURN: Status * * DESCRIPTION: Enable or disable a single GPE in the parent enable register. * The EnableMask field of the involved GPE register must be * updated by the caller if necessary. * ******************************************************************************/ ACPI_STATUS AcpiHwLowSetGpe ( ACPI_GPE_EVENT_INFO *GpeEventInfo, UINT32 Action) { ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; ACPI_STATUS Status = AE_OK; UINT64 EnableMask; UINT32 RegisterBit; ACPI_FUNCTION_ENTRY (); /* Get the info block for the entire GPE register */ GpeRegisterInfo = GpeEventInfo->RegisterInfo; if (!GpeRegisterInfo) { return (AE_NOT_EXIST); } /* Get current value of the enable register that contains this GPE */ Status = AcpiHwRead (&EnableMask, &GpeRegisterInfo->EnableAddress); if (ACPI_FAILURE (Status)) { return (Status); } /* Set or clear just the bit that corresponds to this GPE */ RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo); switch (Action) { case ACPI_GPE_CONDITIONAL_ENABLE: /* Only enable if the corresponding EnableMask bit is set */ if (!(RegisterBit & GpeRegisterInfo->EnableMask)) { return (AE_BAD_PARAMETER); } ACPI_FALLTHROUGH; case ACPI_GPE_ENABLE: ACPI_SET_BIT (EnableMask, RegisterBit); break; case ACPI_GPE_DISABLE: ACPI_CLEAR_BIT (EnableMask, RegisterBit); break; default: ACPI_ERROR ((AE_INFO, "Invalid GPE Action, %u", Action)); return (AE_BAD_PARAMETER); } if (!(RegisterBit & GpeRegisterInfo->MaskForRun)) { /* Write the updated enable mask */ Status = AcpiHwWrite (EnableMask, &GpeRegisterInfo->EnableAddress); } return (Status); } /****************************************************************************** * * FUNCTION: AcpiHwClearGpe * * PARAMETERS: GpeEventInfo - Info block for the GPE to be cleared * * RETURN: Status * * DESCRIPTION: Clear the status bit for a single GPE. * ******************************************************************************/ ACPI_STATUS AcpiHwClearGpe ( ACPI_GPE_EVENT_INFO *GpeEventInfo) { ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; ACPI_STATUS Status; UINT32 RegisterBit; ACPI_FUNCTION_ENTRY (); /* Get the info block for the entire GPE register */ GpeRegisterInfo = GpeEventInfo->RegisterInfo; if (!GpeRegisterInfo) { return (AE_NOT_EXIST); } /* * Write a one to the appropriate bit in the status register to * clear this GPE. */ RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo); Status = AcpiHwWrite (RegisterBit, &GpeRegisterInfo->StatusAddress); return (Status); } /****************************************************************************** * * FUNCTION: AcpiHwGetGpeStatus * * PARAMETERS: GpeEventInfo - Info block for the GPE to queried * EventStatus - Where the GPE status is returned * * RETURN: Status * * DESCRIPTION: Return the status of a single GPE. * ******************************************************************************/ ACPI_STATUS AcpiHwGetGpeStatus ( ACPI_GPE_EVENT_INFO *GpeEventInfo, ACPI_EVENT_STATUS *EventStatus) { UINT64 InByte; UINT32 RegisterBit; ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; ACPI_EVENT_STATUS LocalEventStatus = 0; ACPI_STATUS Status; ACPI_FUNCTION_ENTRY (); if (!EventStatus) { return (AE_BAD_PARAMETER); } /* GPE currently handled? */ if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) != ACPI_GPE_DISPATCH_NONE) { LocalEventStatus |= ACPI_EVENT_FLAG_HAS_HANDLER; } /* Get the info block for the entire GPE register */ GpeRegisterInfo = GpeEventInfo->RegisterInfo; /* Get the register bitmask for this GPE */ RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo); /* GPE currently enabled? (enabled for runtime?) */ if (RegisterBit & GpeRegisterInfo->EnableForRun) { LocalEventStatus |= ACPI_EVENT_FLAG_ENABLED; } /* GPE currently masked? (masked for runtime?) */ if (RegisterBit & GpeRegisterInfo->MaskForRun) { LocalEventStatus |= ACPI_EVENT_FLAG_MASKED; } /* GPE enabled for wake? */ if (RegisterBit & GpeRegisterInfo->EnableForWake) { LocalEventStatus |= ACPI_EVENT_FLAG_WAKE_ENABLED; } /* GPE currently enabled (enable bit == 1)? */ Status = AcpiHwRead (&InByte, &GpeRegisterInfo->EnableAddress); if (ACPI_FAILURE (Status)) { return (Status); } if (RegisterBit & InByte) { LocalEventStatus |= ACPI_EVENT_FLAG_ENABLE_SET; } /* GPE currently active (status bit == 1)? */ Status = AcpiHwRead (&InByte, &GpeRegisterInfo->StatusAddress); if (ACPI_FAILURE (Status)) { return (Status); } if (RegisterBit & InByte) { LocalEventStatus |= ACPI_EVENT_FLAG_STATUS_SET; } /* Set return value */ (*EventStatus) = LocalEventStatus; return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiHwGpeEnableWrite * * PARAMETERS: EnableMask - Bit mask to write to the GPE register * GpeRegisterInfo - Gpe Register info * * RETURN: Status * * DESCRIPTION: Write the enable mask byte to the given GPE register. * ******************************************************************************/ static ACPI_STATUS AcpiHwGpeEnableWrite ( UINT8 EnableMask, ACPI_GPE_REGISTER_INFO *GpeRegisterInfo) { ACPI_STATUS Status; GpeRegisterInfo->EnableMask = EnableMask; Status = AcpiHwWrite (EnableMask, &GpeRegisterInfo->EnableAddress); return (Status); } /****************************************************************************** * * FUNCTION: AcpiHwDisableGpeBlock * * PARAMETERS: GpeXruptInfo - GPE Interrupt info * GpeBlock - Gpe Block info * * RETURN: Status * * DESCRIPTION: Disable all GPEs within a single GPE block * ******************************************************************************/ ACPI_STATUS AcpiHwDisableGpeBlock ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context) { UINT32 i; ACPI_STATUS Status; /* Examine each GPE Register within the block */ for (i = 0; i < GpeBlock->RegisterCount; i++) { /* Disable all GPEs in this register */ Status = AcpiHwGpeEnableWrite (0x00, &GpeBlock->RegisterInfo[i]); if (ACPI_FAILURE (Status)) { return (Status); } } return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiHwClearGpeBlock * * PARAMETERS: GpeXruptInfo - GPE Interrupt info * GpeBlock - Gpe Block info * * RETURN: Status * * DESCRIPTION: Clear status bits for all GPEs within a single GPE block * ******************************************************************************/ ACPI_STATUS AcpiHwClearGpeBlock ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context) { UINT32 i; ACPI_STATUS Status; /* Examine each GPE Register within the block */ for (i = 0; i < GpeBlock->RegisterCount; i++) { /* Clear status on all GPEs in this register */ Status = AcpiHwWrite (0xFF, &GpeBlock->RegisterInfo[i].StatusAddress); if (ACPI_FAILURE (Status)) { return (Status); } } return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiHwEnableRuntimeGpeBlock * * PARAMETERS: GpeXruptInfo - GPE Interrupt info * GpeBlock - Gpe Block info * * RETURN: Status * * DESCRIPTION: Enable all "runtime" GPEs within a single GPE block. Includes * combination wake/run GPEs. * ******************************************************************************/ ACPI_STATUS AcpiHwEnableRuntimeGpeBlock ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context) { UINT32 i; ACPI_STATUS Status; ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; UINT8 EnableMask; /* NOTE: assumes that all GPEs are currently disabled */ /* Examine each GPE Register within the block */ for (i = 0; i < GpeBlock->RegisterCount; i++) { GpeRegisterInfo = &GpeBlock->RegisterInfo[i]; if (!GpeRegisterInfo->EnableForRun) { continue; } /* Enable all "runtime" GPEs in this register */ EnableMask = GpeRegisterInfo->EnableForRun & ~GpeRegisterInfo->MaskForRun; Status = AcpiHwGpeEnableWrite (EnableMask, GpeRegisterInfo); if (ACPI_FAILURE (Status)) { return (Status); } } return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiHwEnableWakeupGpeBlock * * PARAMETERS: GpeXruptInfo - GPE Interrupt info * GpeBlock - Gpe Block info * * RETURN: Status * * DESCRIPTION: Enable all "wake" GPEs within a single GPE block. Includes * combination wake/run GPEs. * ******************************************************************************/ static ACPI_STATUS AcpiHwEnableWakeupGpeBlock ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context) { UINT32 i; ACPI_STATUS Status; ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; /* Examine each GPE Register within the block */ for (i = 0; i < GpeBlock->RegisterCount; i++) { GpeRegisterInfo = &GpeBlock->RegisterInfo[i]; /* * Enable all "wake" GPEs in this register and disable the * remaining ones. */ Status = AcpiHwGpeEnableWrite (GpeRegisterInfo->EnableForWake, GpeRegisterInfo); if (ACPI_FAILURE (Status)) { return (Status); } } return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiHwGetGpeBlockStatus * * PARAMETERS: GpeXruptInfo - GPE Interrupt info * GpeBlock - Gpe Block info * * RETURN: Success * * DESCRIPTION: Produce a combined GPE status bits mask for the given block. * ******************************************************************************/ static ACPI_STATUS AcpiHwGetGpeBlockStatus( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *RetPtr) { ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; UINT64 InEnable; UINT64 InStatus; ACPI_STATUS Status; UINT8 *Ret = RetPtr; UINT32 i; /* Examine each GPE Register within the block */ for (i = 0; i < GpeBlock->RegisterCount; i++) { GpeRegisterInfo = &GpeBlock->RegisterInfo[i]; Status = AcpiHwRead (&InEnable, &GpeRegisterInfo->EnableAddress); if (ACPI_FAILURE (Status)) { continue; } Status = AcpiHwRead (&InStatus, &GpeRegisterInfo->StatusAddress); if (ACPI_FAILURE (Status)) { continue; } *Ret |= InEnable & InStatus; } return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiHwDisableAllGpes * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Disable and clear all GPEs in all GPE blocks * ******************************************************************************/ ACPI_STATUS AcpiHwDisableAllGpes ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (HwDisableAllGpes); Status = AcpiEvWalkGpeList (AcpiHwDisableGpeBlock, NULL); return_ACPI_STATUS (Status); } /****************************************************************************** * * FUNCTION: AcpiHwEnableAllRuntimeGpes * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Enable all "runtime" GPEs, in all GPE blocks * ******************************************************************************/ ACPI_STATUS AcpiHwEnableAllRuntimeGpes ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (HwEnableAllRuntimeGpes); Status = AcpiEvWalkGpeList (AcpiHwEnableRuntimeGpeBlock, NULL); return_ACPI_STATUS (Status); } /****************************************************************************** * * FUNCTION: AcpiHwEnableAllWakeupGpes * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Enable all "wakeup" GPEs, in all GPE blocks * ******************************************************************************/ ACPI_STATUS AcpiHwEnableAllWakeupGpes ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (HwEnableAllWakeupGpes); Status = AcpiEvWalkGpeList (AcpiHwEnableWakeupGpeBlock, NULL); return_ACPI_STATUS (Status); } /****************************************************************************** * * FUNCTION: AcpiHwCheckAllGpes * * PARAMETERS: None * * RETURN: Combined status of all GPEs * * DESCRIPTION: Check all enabled GPEs in all GPE blocks and return TRUE if the * status bit is set for at least one of them of FALSE otherwise. * ******************************************************************************/ UINT8 AcpiHwCheckAllGpes ( void) { UINT8 Ret = 0; ACPI_FUNCTION_TRACE (AcpiHwCheckAllGpes); (void) AcpiEvWalkGpeList (AcpiHwGetGpeBlockStatus, &Ret); return (Ret != 0); } #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/hardware/hwpci.c000066400000000000000000000505751465205512700216500ustar00rootroot00000000000000/******************************************************************************* * * Module Name: hwpci - Obtain PCI bus, device, and function numbers * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("hwpci") /* PCI configuration space values */ #define PCI_CFG_HEADER_TYPE_REG 0x0E #define PCI_CFG_PRIMARY_BUS_NUMBER_REG 0x18 #define PCI_CFG_SECONDARY_BUS_NUMBER_REG 0x19 /* PCI header values */ #define PCI_HEADER_TYPE_MASK 0x7F #define PCI_TYPE_BRIDGE 0x01 #define PCI_TYPE_CARDBUS_BRIDGE 0x02 typedef struct acpi_pci_device { ACPI_HANDLE Device; struct acpi_pci_device *Next; } ACPI_PCI_DEVICE; /* Local prototypes */ static ACPI_STATUS AcpiHwBuildPciList ( ACPI_HANDLE RootPciDevice, ACPI_HANDLE PciRegion, ACPI_PCI_DEVICE **ReturnListHead); static ACPI_STATUS AcpiHwProcessPciList ( ACPI_PCI_ID *PciId, ACPI_PCI_DEVICE *ListHead); static void AcpiHwDeletePciList ( ACPI_PCI_DEVICE *ListHead); static ACPI_STATUS AcpiHwGetPciDeviceInfo ( ACPI_PCI_ID *PciId, ACPI_HANDLE PciDevice, UINT16 *BusNumber, BOOLEAN *IsBridge); /******************************************************************************* * * FUNCTION: AcpiHwDerivePciId * * PARAMETERS: PciId - Initial values for the PCI ID. May be * modified by this function. * RootPciDevice - A handle to a PCI device object. This * object must be a PCI Root Bridge having a * _HID value of either PNP0A03 or PNP0A08 * PciRegion - A handle to a PCI configuration space * Operation Region being initialized * * RETURN: Status * * DESCRIPTION: This function derives a full PCI ID for a PCI device, * consisting of a Segment number, Bus number, Device number, * and function code. * * The PCI hardware dynamically configures PCI bus numbers * depending on the bus topology discovered during system * initialization. This function is invoked during configuration * of a PCI_Config Operation Region in order to (possibly) update * the Bus/Device/Function numbers in the PciId with the actual * values as determined by the hardware and operating system * configuration. * * The PciId parameter is initially populated during the Operation * Region initialization. This function is then called, and is * will make any necessary modifications to the Bus, Device, or * Function number PCI ID subfields as appropriate for the * current hardware and OS configuration. * * NOTE: Created 08/2010. Replaces the previous OSL AcpiOsDerivePciId * interface since this feature is OS-independent. This module * specifically avoids any use of recursion by building a local * temporary device list. * ******************************************************************************/ ACPI_STATUS AcpiHwDerivePciId ( ACPI_PCI_ID *PciId, ACPI_HANDLE RootPciDevice, ACPI_HANDLE PciRegion) { ACPI_STATUS Status; ACPI_PCI_DEVICE *ListHead; ACPI_FUNCTION_TRACE (HwDerivePciId); if (!PciId) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Build a list of PCI devices, from PciRegion up to RootPciDevice */ Status = AcpiHwBuildPciList (RootPciDevice, PciRegion, &ListHead); if (ACPI_SUCCESS (Status)) { /* Walk the list, updating the PCI device/function/bus numbers */ Status = AcpiHwProcessPciList (PciId, ListHead); /* Delete the list */ AcpiHwDeletePciList (ListHead); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiHwBuildPciList * * PARAMETERS: RootPciDevice - A handle to a PCI device object. This * object is guaranteed to be a PCI Root * Bridge having a _HID value of either * PNP0A03 or PNP0A08 * PciRegion - A handle to the PCI configuration space * Operation Region * ReturnListHead - Where the PCI device list is returned * * RETURN: Status * * DESCRIPTION: Builds a list of devices from the input PCI region up to the * Root PCI device for this namespace subtree. * ******************************************************************************/ static ACPI_STATUS AcpiHwBuildPciList ( ACPI_HANDLE RootPciDevice, ACPI_HANDLE PciRegion, ACPI_PCI_DEVICE **ReturnListHead) { ACPI_HANDLE CurrentDevice; ACPI_HANDLE ParentDevice; ACPI_STATUS Status; ACPI_PCI_DEVICE *ListElement; /* * Ascend namespace branch until the RootPciDevice is reached, building * a list of device nodes. Loop will exit when either the PCI device is * found, or the root of the namespace is reached. */ *ReturnListHead = NULL; CurrentDevice = PciRegion; while (1) { Status = AcpiGetParent (CurrentDevice, &ParentDevice); if (ACPI_FAILURE (Status)) { /* Must delete the list before exit */ AcpiHwDeletePciList (*ReturnListHead); return (Status); } /* Finished when we reach the PCI root device (PNP0A03 or PNP0A08) */ if (ParentDevice == RootPciDevice) { return (AE_OK); } ListElement = ACPI_ALLOCATE (sizeof (ACPI_PCI_DEVICE)); if (!ListElement) { /* Must delete the list before exit */ AcpiHwDeletePciList (*ReturnListHead); return (AE_NO_MEMORY); } /* Put new element at the head of the list */ ListElement->Next = *ReturnListHead; ListElement->Device = ParentDevice; *ReturnListHead = ListElement; CurrentDevice = ParentDevice; } } /******************************************************************************* * * FUNCTION: AcpiHwProcessPciList * * PARAMETERS: PciId - Initial values for the PCI ID. May be * modified by this function. * ListHead - Device list created by * AcpiHwBuildPciList * * RETURN: Status * * DESCRIPTION: Walk downward through the PCI device list, getting the device * info for each, via the PCI configuration space and updating * the PCI ID as necessary. Deletes the list during traversal. * ******************************************************************************/ static ACPI_STATUS AcpiHwProcessPciList ( ACPI_PCI_ID *PciId, ACPI_PCI_DEVICE *ListHead) { ACPI_STATUS Status = AE_OK; ACPI_PCI_DEVICE *Info; UINT16 BusNumber; BOOLEAN IsBridge = TRUE; ACPI_FUNCTION_NAME (HwProcessPciList); ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Input PciId: Seg %4.4X Bus %4.4X Dev %4.4X Func %4.4X\n", PciId->Segment, PciId->Bus, PciId->Device, PciId->Function)); BusNumber = PciId->Bus; /* * Descend down the namespace tree, collecting PCI device, function, * and bus numbers. BusNumber is only important for PCI bridges. * Algorithm: As we descend the tree, use the last valid PCI device, * function, and bus numbers that are discovered, and assign them * to the PCI ID for the target device. */ Info = ListHead; while (Info) { Status = AcpiHwGetPciDeviceInfo (PciId, Info->Device, &BusNumber, &IsBridge); if (ACPI_FAILURE (Status)) { return (Status); } Info = Info->Next; } ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Output PciId: Seg %4.4X Bus %4.4X Dev %4.4X Func %4.4X " "Status %X BusNumber %X IsBridge %X\n", PciId->Segment, PciId->Bus, PciId->Device, PciId->Function, Status, BusNumber, IsBridge)); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiHwDeletePciList * * PARAMETERS: ListHead - Device list created by * AcpiHwBuildPciList * * RETURN: None * * DESCRIPTION: Free the entire PCI list. * ******************************************************************************/ static void AcpiHwDeletePciList ( ACPI_PCI_DEVICE *ListHead) { ACPI_PCI_DEVICE *Next; ACPI_PCI_DEVICE *Previous; Next = ListHead; while (Next) { Previous = Next; Next = Previous->Next; ACPI_FREE (Previous); } } /******************************************************************************* * * FUNCTION: AcpiHwGetPciDeviceInfo * * PARAMETERS: PciId - Initial values for the PCI ID. May be * modified by this function. * PciDevice - Handle for the PCI device object * BusNumber - Where a PCI bridge bus number is returned * IsBridge - Return value, indicates if this PCI * device is a PCI bridge * * RETURN: Status * * DESCRIPTION: Get the device info for a single PCI device object. Get the * _ADR (contains PCI device and function numbers), and for PCI * bridge devices, get the bus number from PCI configuration * space. * ******************************************************************************/ static ACPI_STATUS AcpiHwGetPciDeviceInfo ( ACPI_PCI_ID *PciId, ACPI_HANDLE PciDevice, UINT16 *BusNumber, BOOLEAN *IsBridge) { ACPI_STATUS Status; ACPI_OBJECT_TYPE ObjectType; UINT64 ReturnValue; UINT64 PciValue; /* We only care about objects of type Device */ Status = AcpiGetType (PciDevice, &ObjectType); if (ACPI_FAILURE (Status)) { return (Status); } if (ObjectType != ACPI_TYPE_DEVICE) { return (AE_OK); } /* We need an _ADR. Ignore device if not present */ Status = AcpiUtEvaluateNumericObject (METHOD_NAME__ADR, PciDevice, &ReturnValue); if (ACPI_FAILURE (Status)) { return (AE_OK); } /* * From _ADR, get the PCI Device and Function and * update the PCI ID. */ PciId->Device = ACPI_HIWORD (ACPI_LODWORD (ReturnValue)); PciId->Function = ACPI_LOWORD (ACPI_LODWORD (ReturnValue)); /* * If the previous device was a bridge, use the previous * device bus number */ if (*IsBridge) { PciId->Bus = *BusNumber; } /* * Get the bus numbers from PCI Config space: * * First, get the PCI HeaderType */ *IsBridge = FALSE; Status = AcpiOsReadPciConfiguration (PciId, PCI_CFG_HEADER_TYPE_REG, &PciValue, 8); if (ACPI_FAILURE (Status)) { return (Status); } /* We only care about bridges (1=PciBridge, 2=CardBusBridge) */ PciValue &= PCI_HEADER_TYPE_MASK; if ((PciValue != PCI_TYPE_BRIDGE) && (PciValue != PCI_TYPE_CARDBUS_BRIDGE)) { return (AE_OK); } /* Bridge: Get the Primary BusNumber */ Status = AcpiOsReadPciConfiguration (PciId, PCI_CFG_PRIMARY_BUS_NUMBER_REG, &PciValue, 8); if (ACPI_FAILURE (Status)) { return (Status); } *IsBridge = TRUE; PciId->Bus = (UINT16) PciValue; /* Bridge: Get the Secondary BusNumber */ Status = AcpiOsReadPciConfiguration (PciId, PCI_CFG_SECONDARY_BUS_NUMBER_REG, &PciValue, 8); if (ACPI_FAILURE (Status)) { return (Status); } *BusNumber = (UINT16) PciValue; return (AE_OK); } src/acpica/source/components/hardware/hwregs.c000066400000000000000000001005201465205512700220170ustar00rootroot00000000000000/******************************************************************************* * * Module Name: hwregs - Read/write access functions for the various ACPI * control and status registers. * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acevents.h" #define _COMPONENT ACPI_HARDWARE ACPI_MODULE_NAME ("hwregs") #if (!ACPI_REDUCED_HARDWARE) /* Local Prototypes */ static UINT8 AcpiHwGetAccessBitWidth ( UINT64 Address, ACPI_GENERIC_ADDRESS *Reg, UINT8 MaxBitWidth); static ACPI_STATUS AcpiHwReadMultiple ( UINT32 *Value, ACPI_GENERIC_ADDRESS *RegisterA, ACPI_GENERIC_ADDRESS *RegisterB); static ACPI_STATUS AcpiHwWriteMultiple ( UINT32 Value, ACPI_GENERIC_ADDRESS *RegisterA, ACPI_GENERIC_ADDRESS *RegisterB); #endif /* !ACPI_REDUCED_HARDWARE */ /****************************************************************************** * * FUNCTION: AcpiHwGetAccessBitWidth * * PARAMETERS: Address - GAS register address * Reg - GAS register structure * MaxBitWidth - Max BitWidth supported (32 or 64) * * RETURN: Status * * DESCRIPTION: Obtain optimal access bit width * ******************************************************************************/ static UINT8 AcpiHwGetAccessBitWidth ( UINT64 Address, ACPI_GENERIC_ADDRESS *Reg, UINT8 MaxBitWidth) { UINT8 AccessBitWidth; /* * GAS format "register", used by FADT: * 1. Detected if BitOffset is 0 and BitWidth is 8/16/32/64; * 2. AccessSize field is ignored and BitWidth field is used for * determining the boundary of the IO accesses. * GAS format "region", used by APEI registers: * 1. Detected if BitOffset is not 0 or BitWidth is not 8/16/32/64; * 2. AccessSize field is used for determining the boundary of the * IO accesses; * 3. BitOffset/BitWidth fields are used to describe the "region". * * Note: This algorithm assumes that the "Address" fields should always * contain aligned values. */ if (!Reg->BitOffset && Reg->BitWidth && ACPI_IS_POWER_OF_TWO (Reg->BitWidth) && ACPI_IS_ALIGNED (Reg->BitWidth, 8)) { AccessBitWidth = Reg->BitWidth; } else if (Reg->AccessWidth) { AccessBitWidth = ACPI_ACCESS_BIT_WIDTH (Reg->AccessWidth); } else { AccessBitWidth = ACPI_ROUND_UP_POWER_OF_TWO_8 ( Reg->BitOffset + Reg->BitWidth); if (AccessBitWidth <= 8) { AccessBitWidth = 8; } else { while (!ACPI_IS_ALIGNED (Address, AccessBitWidth >> 3)) { AccessBitWidth >>= 1; } } } /* Maximum IO port access bit width is 32 */ if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_IO) { MaxBitWidth = 32; } /* * Return access width according to the requested maximum access bit width, * as the caller should know the format of the register and may enforce * a 32-bit accesses. */ if (AccessBitWidth < MaxBitWidth) { return (AccessBitWidth); } return (MaxBitWidth); } /****************************************************************************** * * FUNCTION: AcpiHwValidateRegister * * PARAMETERS: Reg - GAS register structure * MaxBitWidth - Max BitWidth supported (32 or 64) * Address - Pointer to where the gas->address * is returned * * RETURN: Status * * DESCRIPTION: Validate the contents of a GAS register. Checks the GAS * pointer, Address, SpaceId, BitWidth, and BitOffset. * ******************************************************************************/ ACPI_STATUS AcpiHwValidateRegister ( ACPI_GENERIC_ADDRESS *Reg, UINT8 MaxBitWidth, UINT64 *Address) { UINT8 BitWidth; UINT8 AccessWidth; /* Must have a valid pointer to a GAS structure */ if (!Reg) { return (AE_BAD_PARAMETER); } /* * Copy the target address. This handles possible alignment issues. * Address must not be null. A null address also indicates an optional * ACPI register that is not supported, so no error message. */ ACPI_MOVE_64_TO_64 (Address, &Reg->Address); if (!(*Address)) { return (AE_BAD_ADDRESS); } /* Validate the SpaceID */ if ((Reg->SpaceId != ACPI_ADR_SPACE_SYSTEM_MEMORY) && (Reg->SpaceId != ACPI_ADR_SPACE_SYSTEM_IO)) { ACPI_ERROR ((AE_INFO, "Unsupported address space: 0x%X", Reg->SpaceId)); return (AE_SUPPORT); } /* Validate the AccessWidth */ if (Reg->AccessWidth > 4) { ACPI_ERROR ((AE_INFO, "Unsupported register access width: 0x%X", Reg->AccessWidth)); return (AE_SUPPORT); } /* Validate the BitWidth, convert AccessWidth into number of bits */ AccessWidth = AcpiHwGetAccessBitWidth (*Address, Reg, MaxBitWidth); BitWidth = ACPI_ROUND_UP (Reg->BitOffset + Reg->BitWidth, AccessWidth); if (MaxBitWidth < BitWidth) { ACPI_WARNING ((AE_INFO, "Requested bit width 0x%X is smaller than register bit width 0x%X", MaxBitWidth, BitWidth)); return (AE_SUPPORT); } return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiHwRead * * PARAMETERS: Value - Where the value is returned * Reg - GAS register structure * * RETURN: Status * * DESCRIPTION: Read from either memory or IO space. This is a 64-bit max * version of AcpiRead. * * LIMITATIONS: * SpaceID must be SystemMemory or SystemIO. * ******************************************************************************/ ACPI_STATUS AcpiHwRead ( UINT64 *Value, ACPI_GENERIC_ADDRESS *Reg) { UINT64 Address; UINT8 AccessWidth; UINT32 BitWidth; UINT8 BitOffset; UINT64 Value64; UINT32 Value32; UINT8 Index; ACPI_STATUS Status; ACPI_FUNCTION_NAME (HwRead); /* Validate contents of the GAS register */ Status = AcpiHwValidateRegister (Reg, 64, &Address); if (ACPI_FAILURE (Status)) { return (Status); } /* * Initialize entire 64-bit return value to zero, convert AccessWidth * into number of bits based */ *Value = 0; AccessWidth = AcpiHwGetAccessBitWidth (Address, Reg, 64); BitWidth = Reg->BitOffset + Reg->BitWidth; BitOffset = Reg->BitOffset; /* * Two address spaces supported: Memory or IO. PCI_Config is * not supported here because the GAS structure is insufficient */ Index = 0; while (BitWidth) { if (BitOffset >= AccessWidth) { Value64 = 0; BitOffset -= AccessWidth; } else { if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY) { Status = AcpiOsReadMemory ((ACPI_PHYSICAL_ADDRESS) Address + Index * ACPI_DIV_8 (AccessWidth), &Value64, AccessWidth); } else /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */ { Status = AcpiHwReadPort ((ACPI_IO_ADDRESS) Address + Index * ACPI_DIV_8 (AccessWidth), &Value32, AccessWidth); Value64 = (UINT64) Value32; } } /* * Use offset style bit writes because "Index * AccessWidth" is * ensured to be less than 64-bits by AcpiHwValidateRegister(). */ ACPI_SET_BITS (Value, Index * AccessWidth, ACPI_MASK_BITS_ABOVE_64 (AccessWidth), Value64); BitWidth -= BitWidth > AccessWidth ? AccessWidth : BitWidth; Index++; } ACPI_DEBUG_PRINT ((ACPI_DB_IO, "Read: %8.8X%8.8X width %2d from %8.8X%8.8X (%s)\n", ACPI_FORMAT_UINT64 (*Value), AccessWidth, ACPI_FORMAT_UINT64 (Address), AcpiUtGetRegionName (Reg->SpaceId))); return (Status); } /****************************************************************************** * * FUNCTION: AcpiHwWrite * * PARAMETERS: Value - Value to be written * Reg - GAS register structure * * RETURN: Status * * DESCRIPTION: Write to either memory or IO space. This is a 64-bit max * version of AcpiWrite. * ******************************************************************************/ ACPI_STATUS AcpiHwWrite ( UINT64 Value, ACPI_GENERIC_ADDRESS *Reg) { UINT64 Address; UINT8 AccessWidth; UINT32 BitWidth; UINT8 BitOffset; UINT64 Value64; UINT8 Index; ACPI_STATUS Status; ACPI_FUNCTION_NAME (HwWrite); /* Validate contents of the GAS register */ Status = AcpiHwValidateRegister (Reg, 64, &Address); if (ACPI_FAILURE (Status)) { return (Status); } /* Convert AccessWidth into number of bits based */ AccessWidth = AcpiHwGetAccessBitWidth (Address, Reg, 64); BitWidth = Reg->BitOffset + Reg->BitWidth; BitOffset = Reg->BitOffset; /* * Two address spaces supported: Memory or IO. PCI_Config is * not supported here because the GAS structure is insufficient */ Index = 0; while (BitWidth) { /* * Use offset style bit reads because "Index * AccessWidth" is * ensured to be less than 64-bits by AcpiHwValidateRegister(). */ Value64 = ACPI_GET_BITS (&Value, Index * AccessWidth, ACPI_MASK_BITS_ABOVE_64 (AccessWidth)); if (BitOffset >= AccessWidth) { BitOffset -= AccessWidth; } else { if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY) { Status = AcpiOsWriteMemory ((ACPI_PHYSICAL_ADDRESS) Address + Index * ACPI_DIV_8 (AccessWidth), Value64, AccessWidth); } else /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */ { Status = AcpiHwWritePort ((ACPI_IO_ADDRESS) Address + Index * ACPI_DIV_8 (AccessWidth), (UINT32) Value64, AccessWidth); } } /* * Index * AccessWidth is ensured to be less than 32-bits by * AcpiHwValidateRegister(). */ BitWidth -= BitWidth > AccessWidth ? AccessWidth : BitWidth; Index++; } ACPI_DEBUG_PRINT ((ACPI_DB_IO, "Wrote: %8.8X%8.8X width %2d to %8.8X%8.8X (%s)\n", ACPI_FORMAT_UINT64 (Value), AccessWidth, ACPI_FORMAT_UINT64 (Address), AcpiUtGetRegionName (Reg->SpaceId))); return (Status); } #if (!ACPI_REDUCED_HARDWARE) /******************************************************************************* * * FUNCTION: AcpiHwClearAcpiStatus * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Clears all fixed and general purpose status bits * ******************************************************************************/ ACPI_STATUS AcpiHwClearAcpiStatus ( void) { ACPI_STATUS Status; ACPI_CPU_FLAGS LockFlags = 0; ACPI_FUNCTION_TRACE (HwClearAcpiStatus); ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %8.8X%8.8X\n", ACPI_BITMASK_ALL_FIXED_STATUS, ACPI_FORMAT_UINT64 (AcpiGbl_XPm1aStatus.Address))); LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock); /* Clear the fixed events in PM1 A/B */ Status = AcpiHwRegisterWrite (ACPI_REGISTER_PM1_STATUS, ACPI_BITMASK_ALL_FIXED_STATUS); AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags); if (ACPI_FAILURE (Status)) { goto Exit; } /* Clear the GPE Bits in all GPE registers in all GPE blocks */ Status = AcpiEvWalkGpeList (AcpiHwClearGpeBlock, NULL); Exit: return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiHwGetBitRegisterInfo * * PARAMETERS: RegisterId - Index of ACPI Register to access * * RETURN: The bitmask to be used when accessing the register * * DESCRIPTION: Map RegisterId into a register bitmask. * ******************************************************************************/ ACPI_BIT_REGISTER_INFO * AcpiHwGetBitRegisterInfo ( UINT32 RegisterId) { ACPI_FUNCTION_ENTRY (); if (RegisterId > ACPI_BITREG_MAX) { ACPI_ERROR ((AE_INFO, "Invalid BitRegister ID: 0x%X", RegisterId)); return (NULL); } return (&AcpiGbl_BitRegisterInfo[RegisterId]); } /****************************************************************************** * * FUNCTION: AcpiHwWritePm1Control * * PARAMETERS: Pm1aControl - Value to be written to PM1A control * Pm1bControl - Value to be written to PM1B control * * RETURN: Status * * DESCRIPTION: Write the PM1 A/B control registers. These registers are * different than the PM1 A/B status and enable registers * in that different values can be written to the A/B registers. * Most notably, the SLP_TYP bits can be different, as per the * values returned from the _Sx predefined methods. * ******************************************************************************/ ACPI_STATUS AcpiHwWritePm1Control ( UINT32 Pm1aControl, UINT32 Pm1bControl) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (HwWritePm1Control); Status = AcpiHwWrite (Pm1aControl, &AcpiGbl_FADT.XPm1aControlBlock); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (AcpiGbl_FADT.XPm1bControlBlock.Address) { Status = AcpiHwWrite (Pm1bControl, &AcpiGbl_FADT.XPm1bControlBlock); } return_ACPI_STATUS (Status); } /****************************************************************************** * * FUNCTION: AcpiHwRegisterRead * * PARAMETERS: RegisterId - ACPI Register ID * ReturnValue - Where the register value is returned * * RETURN: Status and the value read. * * DESCRIPTION: Read from the specified ACPI register * ******************************************************************************/ ACPI_STATUS AcpiHwRegisterRead ( UINT32 RegisterId, UINT32 *ReturnValue) { UINT32 Value = 0; UINT64 Value64; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (HwRegisterRead); switch (RegisterId) { case ACPI_REGISTER_PM1_STATUS: /* PM1 A/B: 16-bit access each */ Status = AcpiHwReadMultiple (&Value, &AcpiGbl_XPm1aStatus, &AcpiGbl_XPm1bStatus); break; case ACPI_REGISTER_PM1_ENABLE: /* PM1 A/B: 16-bit access each */ Status = AcpiHwReadMultiple (&Value, &AcpiGbl_XPm1aEnable, &AcpiGbl_XPm1bEnable); break; case ACPI_REGISTER_PM1_CONTROL: /* PM1 A/B: 16-bit access each */ Status = AcpiHwReadMultiple (&Value, &AcpiGbl_FADT.XPm1aControlBlock, &AcpiGbl_FADT.XPm1bControlBlock); /* * Zero the write-only bits. From the ACPI specification, "Hardware * Write-Only Bits": "Upon reads to registers with write-only bits, * software masks out all write-only bits." */ Value &= ~ACPI_PM1_CONTROL_WRITEONLY_BITS; break; case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */ Status = AcpiHwRead (&Value64, &AcpiGbl_FADT.XPm2ControlBlock); if (ACPI_SUCCESS (Status)) { Value = (UINT32) Value64; } break; case ACPI_REGISTER_PM_TIMER: /* 32-bit access */ Status = AcpiHwRead (&Value64, &AcpiGbl_FADT.XPmTimerBlock); if (ACPI_SUCCESS (Status)) { Value = (UINT32) Value64; } break; case ACPI_REGISTER_SMI_COMMAND_BLOCK: /* 8-bit access */ Status = AcpiHwReadPort (AcpiGbl_FADT.SmiCommand, &Value, 8); break; default: ACPI_ERROR ((AE_INFO, "Unknown Register ID: 0x%X", RegisterId)); Status = AE_BAD_PARAMETER; break; } if (ACPI_SUCCESS (Status)) { *ReturnValue = (UINT32) Value; } return_ACPI_STATUS (Status); } /****************************************************************************** * * FUNCTION: AcpiHwRegisterWrite * * PARAMETERS: RegisterId - ACPI Register ID * Value - The value to write * * RETURN: Status * * DESCRIPTION: Write to the specified ACPI register * * NOTE: In accordance with the ACPI specification, this function automatically * preserves the value of the following bits, meaning that these bits cannot be * changed via this interface: * * PM1_CONTROL[0] = SCI_EN * PM1_CONTROL[9] * PM1_STATUS[11] * * ACPI References: * 1) Hardware Ignored Bits: When software writes to a register with ignored * bit fields, it preserves the ignored bit fields * 2) SCI_EN: OSPM always preserves this bit position * ******************************************************************************/ ACPI_STATUS AcpiHwRegisterWrite ( UINT32 RegisterId, UINT32 Value) { ACPI_STATUS Status; UINT32 ReadValue; UINT64 ReadValue64; ACPI_FUNCTION_TRACE (HwRegisterWrite); switch (RegisterId) { case ACPI_REGISTER_PM1_STATUS: /* PM1 A/B: 16-bit access each */ /* * Handle the "ignored" bit in PM1 Status. According to the ACPI * specification, ignored bits are to be preserved when writing. * Normally, this would mean a read/modify/write sequence. However, * preserving a bit in the status register is different. Writing a * one clears the status, and writing a zero preserves the status. * Therefore, we must always write zero to the ignored bit. * * This behavior is clarified in the ACPI 4.0 specification. */ Value &= ~ACPI_PM1_STATUS_PRESERVED_BITS; Status = AcpiHwWriteMultiple (Value, &AcpiGbl_XPm1aStatus, &AcpiGbl_XPm1bStatus); break; case ACPI_REGISTER_PM1_ENABLE: /* PM1 A/B: 16-bit access each */ Status = AcpiHwWriteMultiple (Value, &AcpiGbl_XPm1aEnable, &AcpiGbl_XPm1bEnable); break; case ACPI_REGISTER_PM1_CONTROL: /* PM1 A/B: 16-bit access each */ /* * Perform a read first to preserve certain bits (per ACPI spec) * Note: This includes SCI_EN, we never want to change this bit */ Status = AcpiHwReadMultiple (&ReadValue, &AcpiGbl_FADT.XPm1aControlBlock, &AcpiGbl_FADT.XPm1bControlBlock); if (ACPI_FAILURE (Status)) { goto Exit; } /* Insert the bits to be preserved */ ACPI_INSERT_BITS (Value, ACPI_PM1_CONTROL_PRESERVED_BITS, ReadValue); /* Now we can write the data */ Status = AcpiHwWriteMultiple (Value, &AcpiGbl_FADT.XPm1aControlBlock, &AcpiGbl_FADT.XPm1bControlBlock); break; case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */ /* * For control registers, all reserved bits must be preserved, * as per the ACPI spec. */ Status = AcpiHwRead (&ReadValue64, &AcpiGbl_FADT.XPm2ControlBlock); if (ACPI_FAILURE (Status)) { goto Exit; } ReadValue = (UINT32) ReadValue64; /* Insert the bits to be preserved */ ACPI_INSERT_BITS (Value, ACPI_PM2_CONTROL_PRESERVED_BITS, ReadValue); Status = AcpiHwWrite (Value, &AcpiGbl_FADT.XPm2ControlBlock); break; case ACPI_REGISTER_PM_TIMER: /* 32-bit access */ Status = AcpiHwWrite (Value, &AcpiGbl_FADT.XPmTimerBlock); break; case ACPI_REGISTER_SMI_COMMAND_BLOCK: /* 8-bit access */ /* SMI_CMD is currently always in IO space */ Status = AcpiHwWritePort (AcpiGbl_FADT.SmiCommand, Value, 8); break; default: ACPI_ERROR ((AE_INFO, "Unknown Register ID: 0x%X", RegisterId)); Status = AE_BAD_PARAMETER; break; } Exit: return_ACPI_STATUS (Status); } /****************************************************************************** * * FUNCTION: AcpiHwReadMultiple * * PARAMETERS: Value - Where the register value is returned * RegisterA - First ACPI register (required) * RegisterB - Second ACPI register (optional) * * RETURN: Status * * DESCRIPTION: Read from the specified two-part ACPI register (such as PM1 A/B) * ******************************************************************************/ static ACPI_STATUS AcpiHwReadMultiple ( UINT32 *Value, ACPI_GENERIC_ADDRESS *RegisterA, ACPI_GENERIC_ADDRESS *RegisterB) { UINT32 ValueA = 0; UINT32 ValueB = 0; UINT64 Value64; ACPI_STATUS Status; /* The first register is always required */ Status = AcpiHwRead (&Value64, RegisterA); if (ACPI_FAILURE (Status)) { return (Status); } ValueA = (UINT32) Value64; /* Second register is optional */ if (RegisterB->Address) { Status = AcpiHwRead (&Value64, RegisterB); if (ACPI_FAILURE (Status)) { return (Status); } ValueB = (UINT32) Value64; } /* * OR the two return values together. No shifting or masking is necessary, * because of how the PM1 registers are defined in the ACPI specification: * * "Although the bits can be split between the two register blocks (each * register block has a unique pointer within the FADT), the bit positions * are maintained. The register block with unimplemented bits (that is, * those implemented in the other register block) always returns zeros, * and writes have no side effects" */ *Value = (ValueA | ValueB); return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiHwWriteMultiple * * PARAMETERS: Value - The value to write * RegisterA - First ACPI register (required) * RegisterB - Second ACPI register (optional) * * RETURN: Status * * DESCRIPTION: Write to the specified two-part ACPI register (such as PM1 A/B) * ******************************************************************************/ static ACPI_STATUS AcpiHwWriteMultiple ( UINT32 Value, ACPI_GENERIC_ADDRESS *RegisterA, ACPI_GENERIC_ADDRESS *RegisterB) { ACPI_STATUS Status; /* The first register is always required */ Status = AcpiHwWrite (Value, RegisterA); if (ACPI_FAILURE (Status)) { return (Status); } /* * Second register is optional * * No bit shifting or clearing is necessary, because of how the PM1 * registers are defined in the ACPI specification: * * "Although the bits can be split between the two register blocks (each * register block has a unique pointer within the FADT), the bit positions * are maintained. The register block with unimplemented bits (that is, * those implemented in the other register block) always returns zeros, * and writes have no side effects" */ if (RegisterB->Address) { Status = AcpiHwWrite (Value, RegisterB); } return (Status); } #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/hardware/hwsleep.c000066400000000000000000000421741465205512700222010ustar00rootroot00000000000000/****************************************************************************** * * Name: hwsleep.c - ACPI Hardware Sleep/Wake Support functions for the * original/legacy sleep/PM registers. * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_HARDWARE ACPI_MODULE_NAME ("hwsleep") #if (!ACPI_REDUCED_HARDWARE) /* Entire module */ /******************************************************************************* * * FUNCTION: AcpiHwLegacySleep * * PARAMETERS: SleepState - Which sleep state to enter * * RETURN: Status * * DESCRIPTION: Enter a system sleep state via the legacy FADT PM registers * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED * ******************************************************************************/ ACPI_STATUS AcpiHwLegacySleep ( UINT8 SleepState) { ACPI_BIT_REGISTER_INFO *SleepTypeRegInfo; ACPI_BIT_REGISTER_INFO *SleepEnableRegInfo; UINT32 Pm1aControl; UINT32 Pm1bControl; UINT32 InValue; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (HwLegacySleep); SleepTypeRegInfo = AcpiHwGetBitRegisterInfo (ACPI_BITREG_SLEEP_TYPE); SleepEnableRegInfo = AcpiHwGetBitRegisterInfo (ACPI_BITREG_SLEEP_ENABLE); /* Clear wake status */ Status = AcpiWriteBitRegister (ACPI_BITREG_WAKE_STATUS, ACPI_CLEAR_STATUS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Disable all GPEs */ Status = AcpiHwDisableAllGpes (); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiHwClearAcpiStatus(); if (ACPI_FAILURE(Status)) { return_ACPI_STATUS(Status); } AcpiGbl_SystemAwakeAndRunning = FALSE; /* Enable all wakeup GPEs */ Status = AcpiHwEnableAllWakeupGpes (); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Get current value of PM1A control */ Status = AcpiHwRegisterRead (ACPI_REGISTER_PM1_CONTROL, &Pm1aControl); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "Entering sleep state [S%u]\n", SleepState)); /* Clear the SLP_EN and SLP_TYP fields */ Pm1aControl &= ~(SleepTypeRegInfo->AccessBitMask | SleepEnableRegInfo->AccessBitMask); Pm1bControl = Pm1aControl; /* Insert the SLP_TYP bits */ Pm1aControl |= (AcpiGbl_SleepTypeA << SleepTypeRegInfo->BitPosition); Pm1bControl |= (AcpiGbl_SleepTypeB << SleepTypeRegInfo->BitPosition); /* * We split the writes of SLP_TYP and SLP_EN to workaround * poorly implemented hardware. */ /* Write #1: write the SLP_TYP data to the PM1 Control registers */ Status = AcpiHwWritePm1Control (Pm1aControl, Pm1bControl); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Insert the sleep enable (SLP_EN) bit */ Pm1aControl |= SleepEnableRegInfo->AccessBitMask; Pm1bControl |= SleepEnableRegInfo->AccessBitMask; /* Flush caches, as per ACPI specification */ if (SleepState < ACPI_STATE_S4) { ACPI_FLUSH_CPU_CACHE (); } Status = AcpiOsEnterSleep (SleepState, Pm1aControl, Pm1bControl); if (Status == AE_CTRL_TERMINATE) { return_ACPI_STATUS (AE_OK); } if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Write #2: Write both SLP_TYP + SLP_EN */ Status = AcpiHwWritePm1Control (Pm1aControl, Pm1bControl); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (SleepState > ACPI_STATE_S3) { /* * We wanted to sleep > S3, but it didn't happen (by virtue of the * fact that we are still executing!) * * Wait ten seconds, then try again. This is to get S4/S5 to work on * all machines. * * We wait so long to allow chipsets that poll this reg very slowly * to still read the right value. Ideally, this block would go * away entirely. */ AcpiOsStall (10 * ACPI_USEC_PER_SEC); Status = AcpiHwRegisterWrite (ACPI_REGISTER_PM1_CONTROL, SleepEnableRegInfo->AccessBitMask); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } /* Wait for transition back to Working State */ do { Status = AcpiReadBitRegister (ACPI_BITREG_WAKE_STATUS, &InValue); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } while (!InValue); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiHwLegacyWakePrep * * PARAMETERS: SleepState - Which sleep state we just exited * * RETURN: Status * * DESCRIPTION: Perform the first state of OS-independent ACPI cleanup after a * sleep. * Called with interrupts ENABLED. * ******************************************************************************/ ACPI_STATUS AcpiHwLegacyWakePrep ( UINT8 SleepState) { ACPI_STATUS Status = AE_OK; ACPI_BIT_REGISTER_INFO *SleepTypeRegInfo; ACPI_BIT_REGISTER_INFO *SleepEnableRegInfo; UINT32 Pm1aControl; UINT32 Pm1bControl; ACPI_FUNCTION_TRACE (HwLegacyWakePrep); /* * Set SLP_TYPE and SLP_EN to state S0. * This is unclear from the ACPI Spec, but it is required * by some machines. */ if (AcpiGbl_SleepTypeAS0 != ACPI_SLEEP_TYPE_INVALID) { SleepTypeRegInfo = AcpiHwGetBitRegisterInfo (ACPI_BITREG_SLEEP_TYPE); SleepEnableRegInfo = AcpiHwGetBitRegisterInfo (ACPI_BITREG_SLEEP_ENABLE); /* Get current value of PM1A control */ Status = AcpiHwRegisterRead (ACPI_REGISTER_PM1_CONTROL, &Pm1aControl); if (ACPI_SUCCESS (Status)) { /* Clear the SLP_EN and SLP_TYP fields */ Pm1aControl &= ~(SleepTypeRegInfo->AccessBitMask | SleepEnableRegInfo->AccessBitMask); Pm1bControl = Pm1aControl; /* Insert the SLP_TYP bits */ Pm1aControl |= (AcpiGbl_SleepTypeAS0 << SleepTypeRegInfo->BitPosition); Pm1bControl |= (AcpiGbl_SleepTypeBS0 << SleepTypeRegInfo->BitPosition); /* Write the control registers and ignore any errors */ (void) AcpiHwWritePm1Control (Pm1aControl, Pm1bControl); } } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiHwLegacyWake * * PARAMETERS: SleepState - Which sleep state we just exited * * RETURN: Status * * DESCRIPTION: Perform OS-independent ACPI cleanup after a sleep * Called with interrupts ENABLED. * ******************************************************************************/ ACPI_STATUS AcpiHwLegacyWake ( UINT8 SleepState) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (HwLegacyWake); /* Ensure EnterSleepStatePrep -> EnterSleepState ordering */ AcpiGbl_SleepTypeA = ACPI_SLEEP_TYPE_INVALID; AcpiHwExecuteSleepMethod (METHOD_PATHNAME__SST, ACPI_SST_WAKING); /* * GPEs must be enabled before _WAK is called as GPEs * might get fired there * * Restore the GPEs: * 1) Disable all GPEs * 2) Enable all runtime GPEs */ Status = AcpiHwDisableAllGpes (); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiHwEnableAllRuntimeGpes (); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Now we can execute _WAK, etc. Some machines require that the GPEs * are enabled before the wake methods are executed. */ AcpiHwExecuteSleepMethod (METHOD_PATHNAME__WAK, SleepState); /* * Some BIOS code assumes that WAK_STS will be cleared on resume * and use it to determine whether the system is rebooting or * resuming. Clear WAK_STS for compatibility. */ (void) AcpiWriteBitRegister (ACPI_BITREG_WAKE_STATUS, ACPI_CLEAR_STATUS); AcpiGbl_SystemAwakeAndRunning = TRUE; /* Enable power button */ (void) AcpiWriteBitRegister( AcpiGbl_FixedEventInfo[ACPI_EVENT_POWER_BUTTON].EnableRegisterId, ACPI_ENABLE_EVENT); (void) AcpiWriteBitRegister( AcpiGbl_FixedEventInfo[ACPI_EVENT_POWER_BUTTON].StatusRegisterId, ACPI_CLEAR_STATUS); /* Enable sleep button */ (void) AcpiWriteBitRegister ( AcpiGbl_FixedEventInfo[ACPI_EVENT_SLEEP_BUTTON].EnableRegisterId, ACPI_ENABLE_EVENT); (void) AcpiWriteBitRegister ( AcpiGbl_FixedEventInfo[ACPI_EVENT_SLEEP_BUTTON].StatusRegisterId, ACPI_CLEAR_STATUS); AcpiHwExecuteSleepMethod (METHOD_PATHNAME__SST, ACPI_SST_WORKING); return_ACPI_STATUS (Status); } #endif /* !ACPI_REDUCED_HARDWARE */ src/acpica/source/components/hardware/hwvalid.c000066400000000000000000000430741465205512700221700ustar00rootroot00000000000000/****************************************************************************** * * Module Name: hwvalid - I/O request validation * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_HARDWARE ACPI_MODULE_NAME ("hwvalid") /* Local prototypes */ static ACPI_STATUS AcpiHwValidateIoRequest ( ACPI_IO_ADDRESS Address, UINT32 BitWidth); /* * Protected I/O ports. Some ports are always illegal, and some are * conditionally illegal. This table must remain ordered by port address. * * The table is used to implement the Microsoft port access rules that * first appeared in Windows XP. Some ports are always illegal, and some * ports are only illegal if the BIOS calls _OSI with nothing newer than * the specific _OSI strings. * * This provides ACPICA with the desired port protections and * Microsoft compatibility. * * Description of port entries: * DMA: DMA controller * PIC0: Programmable Interrupt Controller (8259A) * PIT1: System Timer 1 * PIT2: System Timer 2 failsafe * RTC: Real-time clock * CMOS: Extended CMOS * DMA1: DMA 1 page registers * DMA1L: DMA 1 Ch 0 low page * DMA2: DMA 2 page registers * DMA2L: DMA 2 low page refresh * ARBC: Arbitration control * SETUP: Reserved system board setup * POS: POS channel select * PIC1: Cascaded PIC * IDMA: ISA DMA * ELCR: PIC edge/level registers * PCI: PCI configuration space */ static const ACPI_PORT_INFO AcpiProtectedPorts[] = { {"DMA", 0x0000, 0x000F, ACPI_OSI_WIN_XP}, {"PIC0", 0x0020, 0x0021, ACPI_ALWAYS_ILLEGAL}, {"PIT1", 0x0040, 0x0043, ACPI_OSI_WIN_XP}, {"PIT2", 0x0048, 0x004B, ACPI_OSI_WIN_XP}, {"RTC", 0x0070, 0x0071, ACPI_OSI_WIN_XP}, {"CMOS", 0x0074, 0x0076, ACPI_OSI_WIN_XP}, {"DMA1", 0x0081, 0x0083, ACPI_OSI_WIN_XP}, {"DMA1L", 0x0087, 0x0087, ACPI_OSI_WIN_XP}, {"DMA2", 0x0089, 0x008B, ACPI_OSI_WIN_XP}, {"DMA2L", 0x008F, 0x008F, ACPI_OSI_WIN_XP}, {"ARBC", 0x0090, 0x0091, ACPI_OSI_WIN_XP}, {"SETUP", 0x0093, 0x0094, ACPI_OSI_WIN_XP}, {"POS", 0x0096, 0x0097, ACPI_OSI_WIN_XP}, {"PIC1", 0x00A0, 0x00A1, ACPI_ALWAYS_ILLEGAL}, {"IDMA", 0x00C0, 0x00DF, ACPI_OSI_WIN_XP}, {"ELCR", 0x04D0, 0x04D1, ACPI_ALWAYS_ILLEGAL}, {"PCI", 0x0CF8, 0x0CFF, ACPI_OSI_WIN_XP} }; #define ACPI_PORT_INFO_ENTRIES ACPI_ARRAY_LENGTH (AcpiProtectedPorts) /****************************************************************************** * * FUNCTION: AcpiHwValidateIoRequest * * PARAMETERS: Address Address of I/O port/register * BitWidth Number of bits (8,16,32) * * RETURN: Status * * DESCRIPTION: Validates an I/O request (address/length). Certain ports are * always illegal and some ports are only illegal depending on * the requests the BIOS AML code makes to the predefined * _OSI method. * ******************************************************************************/ static ACPI_STATUS AcpiHwValidateIoRequest ( ACPI_IO_ADDRESS Address, UINT32 BitWidth) { UINT32 i; UINT32 ByteWidth; ACPI_IO_ADDRESS LastAddress; const ACPI_PORT_INFO *PortInfo; ACPI_FUNCTION_TRACE (HwValidateIoRequest); /* Supported widths are 8/16/32 */ if ((BitWidth != 8) && (BitWidth != 16) && (BitWidth != 32)) { ACPI_ERROR ((AE_INFO, "Bad BitWidth parameter: %8.8X", BitWidth)); return_ACPI_STATUS (AE_BAD_PARAMETER); } PortInfo = AcpiProtectedPorts; ByteWidth = ACPI_DIV_8 (BitWidth); LastAddress = Address + ByteWidth - 1; ACPI_DEBUG_PRINT ((ACPI_DB_IO, "Address %8.8X%8.8X LastAddress %8.8X%8.8X Length %X", ACPI_FORMAT_UINT64 (Address), ACPI_FORMAT_UINT64 (LastAddress), ByteWidth)); /* Maximum 16-bit address in I/O space */ if (LastAddress > ACPI_UINT16_MAX) { ACPI_ERROR ((AE_INFO, "Illegal I/O port address/length above 64K: %8.8X%8.8X/0x%X", ACPI_FORMAT_UINT64 (Address), ByteWidth)); return_ACPI_STATUS (AE_LIMIT); } /* Exit if requested address is not within the protected port table */ if (Address > AcpiProtectedPorts[ACPI_PORT_INFO_ENTRIES - 1].End) { return_ACPI_STATUS (AE_OK); } /* Check request against the list of protected I/O ports */ for (i = 0; i < ACPI_PORT_INFO_ENTRIES; i++, PortInfo++) { /* * Check if the requested address range will write to a reserved * port. There are four cases to consider: * * 1) Address range is contained completely in the port address range * 2) Address range overlaps port range at the port range start * 3) Address range overlaps port range at the port range end * 4) Address range completely encompasses the port range */ if ((Address <= PortInfo->End) && (LastAddress >= PortInfo->Start)) { /* Port illegality may depend on the _OSI calls made by the BIOS */ if (PortInfo->OsiDependency == ACPI_ALWAYS_ILLEGAL || AcpiGbl_OsiData == PortInfo->OsiDependency) { ACPI_DEBUG_PRINT ((ACPI_DB_VALUES, "Denied AML access to port 0x%8.8X%8.8X/%X (%s 0x%.4X-0x%.4X)\n", ACPI_FORMAT_UINT64 (Address), ByteWidth, PortInfo->Name, PortInfo->Start, PortInfo->End)); return_ACPI_STATUS (AE_AML_ILLEGAL_ADDRESS); } } /* Finished if address range ends before the end of this port */ if (LastAddress <= PortInfo->End) { break; } } return_ACPI_STATUS (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiHwReadPort * * PARAMETERS: Address Address of I/O port/register to read * Value Where value (data) is returned * Width Number of bits * * RETURN: Status and value read from port * * DESCRIPTION: Read data from an I/O port or register. This is a front-end * to AcpiOsReadPort that performs validation on both the port * address and the length. * *****************************************************************************/ ACPI_STATUS AcpiHwReadPort ( ACPI_IO_ADDRESS Address, UINT32 *Value, UINT32 Width) { ACPI_STATUS Status; UINT32 OneByte; UINT32 i; /* Truncate address to 16 bits if requested */ if (AcpiGbl_TruncateIoAddresses) { Address &= ACPI_UINT16_MAX; } /* Validate the entire request and perform the I/O */ Status = AcpiHwValidateIoRequest (Address, Width); if (ACPI_SUCCESS (Status)) { Status = AcpiOsReadPort (Address, Value, Width); return (Status); } if (Status != AE_AML_ILLEGAL_ADDRESS) { return (Status); } /* * There has been a protection violation within the request. Fall * back to byte granularity port I/O and ignore the failing bytes. * This provides compatibility with other ACPI implementations. */ for (i = 0, *Value = 0; i < Width; i += 8) { /* Validate and read one byte */ if (AcpiHwValidateIoRequest (Address, 8) == AE_OK) { Status = AcpiOsReadPort (Address, &OneByte, 8); if (ACPI_FAILURE (Status)) { return (Status); } *Value |= (OneByte << i); } Address++; } return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiHwWritePort * * PARAMETERS: Address Address of I/O port/register to write * Value Value to write * Width Number of bits * * RETURN: Status * * DESCRIPTION: Write data to an I/O port or register. This is a front-end * to AcpiOsWritePort that performs validation on both the port * address and the length. * *****************************************************************************/ ACPI_STATUS AcpiHwWritePort ( ACPI_IO_ADDRESS Address, UINT32 Value, UINT32 Width) { ACPI_STATUS Status; UINT32 i; /* Truncate address to 16 bits if requested */ if (AcpiGbl_TruncateIoAddresses) { Address &= ACPI_UINT16_MAX; } /* Validate the entire request and perform the I/O */ Status = AcpiHwValidateIoRequest (Address, Width); if (ACPI_SUCCESS (Status)) { Status = AcpiOsWritePort (Address, Value, Width); return (Status); } if (Status != AE_AML_ILLEGAL_ADDRESS) { return (Status); } /* * There has been a protection violation within the request. Fall * back to byte granularity port I/O and ignore the failing bytes. * This provides compatibility with other ACPI implementations. */ for (i = 0; i < Width; i += 8) { /* Validate and write one byte */ if (AcpiHwValidateIoRequest (Address, 8) == AE_OK) { Status = AcpiOsWritePort (Address, (Value >> i) & 0xFF, 8); if (ACPI_FAILURE (Status)) { return (Status); } } Address++; } return (AE_OK); } src/acpica/source/components/hardware/hwxface.c000066400000000000000000000540451465205512700221570ustar00rootroot00000000000000/****************************************************************************** * * Module Name: hwxface - Public ACPICA hardware interfaces * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #define _COMPONENT ACPI_HARDWARE ACPI_MODULE_NAME ("hwxface") /****************************************************************************** * * FUNCTION: AcpiReset * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Set reset register in memory or IO space. Note: Does not * support reset register in PCI config space, this must be * handled separately. * ******************************************************************************/ ACPI_STATUS AcpiReset ( void) { ACPI_GENERIC_ADDRESS *ResetReg; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiReset); ResetReg = &AcpiGbl_FADT.ResetRegister; /* Check if the reset register is supported */ if (!(AcpiGbl_FADT.Flags & ACPI_FADT_RESET_REGISTER) || !ResetReg->Address) { return_ACPI_STATUS (AE_NOT_EXIST); } if (ResetReg->SpaceId == ACPI_ADR_SPACE_SYSTEM_IO) { /* * For I/O space, write directly to the OSL. This bypasses the port * validation mechanism, which may block a valid write to the reset * register. * * NOTE: * The ACPI spec requires the reset register width to be 8, so we * hardcode it here and ignore the FADT value. This maintains * compatibility with other ACPI implementations that have allowed * BIOS code with bad register width values to go unnoticed. */ Status = AcpiOsWritePort ((ACPI_IO_ADDRESS) ResetReg->Address, AcpiGbl_FADT.ResetValue, ACPI_RESET_REGISTER_WIDTH); } else { /* Write the reset value to the reset register */ Status = AcpiHwWrite (AcpiGbl_FADT.ResetValue, ResetReg); } return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiReset) /****************************************************************************** * * FUNCTION: AcpiRead * * PARAMETERS: Value - Where the value is returned * Reg - GAS register structure * * RETURN: Status * * DESCRIPTION: Read from either memory or IO space. * * LIMITATIONS: * BitWidth must be exactly 8, 16, 32, or 64. * SpaceID must be SystemMemory or SystemIO. * BitOffset and AccessWidth are currently ignored, as there has * not been a need to implement these. * ******************************************************************************/ ACPI_STATUS AcpiRead ( UINT64 *ReturnValue, ACPI_GENERIC_ADDRESS *Reg) { ACPI_STATUS Status; ACPI_FUNCTION_NAME (AcpiRead); Status = AcpiHwRead (ReturnValue, Reg); return (Status); } ACPI_EXPORT_SYMBOL (AcpiRead) /****************************************************************************** * * FUNCTION: AcpiWrite * * PARAMETERS: Value - Value to be written * Reg - GAS register structure * * RETURN: Status * * DESCRIPTION: Write to either memory or IO space. * ******************************************************************************/ ACPI_STATUS AcpiWrite ( UINT64 Value, ACPI_GENERIC_ADDRESS *Reg) { ACPI_STATUS Status; ACPI_FUNCTION_NAME (AcpiWrite); Status = AcpiHwWrite (Value, Reg); return (Status); } ACPI_EXPORT_SYMBOL (AcpiWrite) #if (!ACPI_REDUCED_HARDWARE) /******************************************************************************* * * FUNCTION: AcpiReadBitRegister * * PARAMETERS: RegisterId - ID of ACPI Bit Register to access * ReturnValue - Value that was read from the register, * normalized to bit position zero. * * RETURN: Status and the value read from the specified Register. Value * returned is normalized to bit0 (is shifted all the way right) * * DESCRIPTION: ACPI BitRegister read function. Does not acquire the HW lock. * * SUPPORTS: Bit fields in PM1 Status, PM1 Enable, PM1 Control, and * PM2 Control. * * Note: The hardware lock is not required when reading the ACPI bit registers * since almost all of them are single bit and it does not matter that * the parent hardware register can be split across two physical * registers. The only multi-bit field is SLP_TYP in the PM1 control * register, but this field does not cross an 8-bit boundary (nor does * it make much sense to actually read this field.) * ******************************************************************************/ ACPI_STATUS AcpiReadBitRegister ( UINT32 RegisterId, UINT32 *ReturnValue) { ACPI_BIT_REGISTER_INFO *BitRegInfo; UINT32 RegisterValue; UINT32 Value; ACPI_STATUS Status; ACPI_FUNCTION_TRACE_U32 (AcpiReadBitRegister, RegisterId); /* Get the info structure corresponding to the requested ACPI Register */ BitRegInfo = AcpiHwGetBitRegisterInfo (RegisterId); if (!BitRegInfo) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Read the entire parent register */ Status = AcpiHwRegisterRead (BitRegInfo->ParentRegister, &RegisterValue); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Normalize the value that was read, mask off other bits */ Value = ((RegisterValue & BitRegInfo->AccessBitMask) >> BitRegInfo->BitPosition); ACPI_DEBUG_PRINT ((ACPI_DB_IO, "BitReg %X, ParentReg %X, Actual %8.8X, ReturnValue %8.8X\n", RegisterId, BitRegInfo->ParentRegister, RegisterValue, Value)); *ReturnValue = Value; return_ACPI_STATUS (AE_OK); } ACPI_EXPORT_SYMBOL (AcpiReadBitRegister) /******************************************************************************* * * FUNCTION: AcpiWriteBitRegister * * PARAMETERS: RegisterId - ID of ACPI Bit Register to access * Value - Value to write to the register, in bit * position zero. The bit is automatically * shifted to the correct position. * * RETURN: Status * * DESCRIPTION: ACPI Bit Register write function. Acquires the hardware lock * since most operations require a read/modify/write sequence. * * SUPPORTS: Bit fields in PM1 Status, PM1 Enable, PM1 Control, and * PM2 Control. * * Note that at this level, the fact that there may be actually two * hardware registers (A and B - and B may not exist) is abstracted. * ******************************************************************************/ ACPI_STATUS AcpiWriteBitRegister ( UINT32 RegisterId, UINT32 Value) { ACPI_BIT_REGISTER_INFO *BitRegInfo; ACPI_CPU_FLAGS LockFlags; UINT32 RegisterValue; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE_U32 (AcpiWriteBitRegister, RegisterId); /* Get the info structure corresponding to the requested ACPI Register */ BitRegInfo = AcpiHwGetBitRegisterInfo (RegisterId); if (!BitRegInfo) { return_ACPI_STATUS (AE_BAD_PARAMETER); } LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock); /* * At this point, we know that the parent register is one of the * following: PM1 Status, PM1 Enable, PM1 Control, or PM2 Control */ if (BitRegInfo->ParentRegister != ACPI_REGISTER_PM1_STATUS) { /* * 1) Case for PM1 Enable, PM1 Control, and PM2 Control * * Perform a register read to preserve the bits that we are not * interested in */ Status = AcpiHwRegisterRead (BitRegInfo->ParentRegister, &RegisterValue); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; } /* * Insert the input bit into the value that was just read * and write the register */ ACPI_REGISTER_INSERT_VALUE (RegisterValue, BitRegInfo->BitPosition, BitRegInfo->AccessBitMask, Value); Status = AcpiHwRegisterWrite (BitRegInfo->ParentRegister, RegisterValue); } else { /* * 2) Case for PM1 Status * * The Status register is different from the rest. Clear an event * by writing 1, writing 0 has no effect. So, the only relevant * information is the single bit we're interested in, all others * should be written as 0 so they will be left unchanged. */ RegisterValue = ACPI_REGISTER_PREPARE_BITS (Value, BitRegInfo->BitPosition, BitRegInfo->AccessBitMask); /* No need to write the register if value is all zeros */ if (RegisterValue) { Status = AcpiHwRegisterWrite (ACPI_REGISTER_PM1_STATUS, RegisterValue); } } ACPI_DEBUG_PRINT ((ACPI_DB_IO, "BitReg %X, ParentReg %X, Value %8.8X, Actual %8.8X\n", RegisterId, BitRegInfo->ParentRegister, Value, RegisterValue)); UnlockAndExit: AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiWriteBitRegister) #endif /* !ACPI_REDUCED_HARDWARE */ /******************************************************************************* * * FUNCTION: AcpiGetSleepTypeData * * PARAMETERS: SleepState - Numeric sleep state * *SleepTypeA - Where SLP_TYPa is returned * *SleepTypeB - Where SLP_TYPb is returned * * RETURN: Status * * DESCRIPTION: Obtain the SLP_TYPa and SLP_TYPb values for the requested * sleep state via the appropriate \_Sx object. * * The sleep state package returned from the corresponding \_Sx_ object * must contain at least one integer. * * March 2005: * Added support for a package that contains two integers. This * goes against the ACPI specification which defines this object as a * package with one encoded DWORD integer. However, existing practice * by many BIOS vendors is to return a package with 2 or more integer * elements, at least one per sleep type (A/B). * * January 2013: * Therefore, we must be prepared to accept a package with either a * single integer or multiple integers. * * The single integer DWORD format is as follows: * BYTE 0 - Value for the PM1A SLP_TYP register * BYTE 1 - Value for the PM1B SLP_TYP register * BYTE 2-3 - Reserved * * The dual integer format is as follows: * Integer 0 - Value for the PM1A SLP_TYP register * Integer 1 - Value for the PM1A SLP_TYP register * ******************************************************************************/ ACPI_STATUS AcpiGetSleepTypeData ( UINT8 SleepState, UINT8 *SleepTypeA, UINT8 *SleepTypeB) { ACPI_STATUS Status; ACPI_EVALUATE_INFO *Info; ACPI_OPERAND_OBJECT **Elements; ACPI_FUNCTION_TRACE (AcpiGetSleepTypeData); /* Validate parameters */ if ((SleepState > ACPI_S_STATES_MAX) || !SleepTypeA || !SleepTypeB) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Allocate the evaluation information block */ Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); if (!Info) { return_ACPI_STATUS (AE_NO_MEMORY); } /* * Evaluate the \_Sx namespace object containing the register values * for this state */ Info->RelativePathname = AcpiGbl_SleepStateNames[SleepState]; Status = AcpiNsEvaluate (Info); if (ACPI_FAILURE (Status)) { if (Status == AE_NOT_FOUND) { /* The _Sx states are optional, ignore NOT_FOUND */ goto FinalCleanup; } goto WarningCleanup; } /* Must have a return object */ if (!Info->ReturnObject) { ACPI_ERROR ((AE_INFO, "No Sleep State object returned from [%s]", Info->RelativePathname)); Status = AE_AML_NO_RETURN_VALUE; goto WarningCleanup; } /* Return object must be of type Package */ if (Info->ReturnObject->Common.Type != ACPI_TYPE_PACKAGE) { ACPI_ERROR ((AE_INFO, "Sleep State return object is not a Package")); Status = AE_AML_OPERAND_TYPE; goto ReturnValueCleanup; } /* * Any warnings about the package length or the object types have * already been issued by the predefined name module -- there is no * need to repeat them here. */ Elements = Info->ReturnObject->Package.Elements; switch (Info->ReturnObject->Package.Count) { case 0: Status = AE_AML_PACKAGE_LIMIT; break; case 1: if (Elements[0]->Common.Type != ACPI_TYPE_INTEGER) { Status = AE_AML_OPERAND_TYPE; break; } /* A valid _Sx_ package with one integer */ *SleepTypeA = (UINT8) Elements[0]->Integer.Value; *SleepTypeB = (UINT8) (Elements[0]->Integer.Value >> 8); break; case 2: default: if ((Elements[0]->Common.Type != ACPI_TYPE_INTEGER) || (Elements[1]->Common.Type != ACPI_TYPE_INTEGER)) { Status = AE_AML_OPERAND_TYPE; break; } /* A valid _Sx_ package with two integers */ *SleepTypeA = (UINT8) Elements[0]->Integer.Value; *SleepTypeB = (UINT8) Elements[1]->Integer.Value; break; } ReturnValueCleanup: AcpiUtRemoveReference (Info->ReturnObject); WarningCleanup: if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "While evaluating Sleep State [%s]", Info->RelativePathname)); } FinalCleanup: ACPI_FREE (Info); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiGetSleepTypeData) src/acpica/source/components/hardware/hwxfsleep.c000066400000000000000000000512731465205512700225370ustar00rootroot00000000000000/****************************************************************************** * * Name: hwxfsleep.c - ACPI Hardware Sleep/Wake External Interfaces * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_HARDWARE ACPI_MODULE_NAME ("hwxfsleep") /* Local prototypes */ #if (!ACPI_REDUCED_HARDWARE) static ACPI_STATUS AcpiHwSetFirmwareWakingVector ( ACPI_TABLE_FACS *Facs, ACPI_PHYSICAL_ADDRESS PhysicalAddress, ACPI_PHYSICAL_ADDRESS PhysicalAddress64); #endif static ACPI_STATUS AcpiHwSleepDispatch ( UINT8 SleepState, UINT32 FunctionId); /* * Dispatch table used to efficiently branch to the various sleep * functions. */ #define ACPI_SLEEP_FUNCTION_ID 0 #define ACPI_WAKE_PREP_FUNCTION_ID 1 #define ACPI_WAKE_FUNCTION_ID 2 /* Legacy functions are optional, based upon ACPI_REDUCED_HARDWARE */ static ACPI_SLEEP_FUNCTIONS AcpiSleepDispatch[] = { {ACPI_STRUCT_INIT (LegacyFunction, ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacySleep)), ACPI_STRUCT_INIT (ExtendedFunction, AcpiHwExtendedSleep) }, {ACPI_STRUCT_INIT (LegacyFunction, ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacyWakePrep)), ACPI_STRUCT_INIT (ExtendedFunction, AcpiHwExtendedWakePrep) }, {ACPI_STRUCT_INIT (LegacyFunction, ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacyWake)), ACPI_STRUCT_INIT (ExtendedFunction, AcpiHwExtendedWake) } }; /* * These functions are removed for the ACPI_REDUCED_HARDWARE case: * AcpiSetFirmwareWakingVector * AcpiEnterSleepStateS4bios */ #if (!ACPI_REDUCED_HARDWARE) /******************************************************************************* * * FUNCTION: AcpiHwSetFirmwareWakingVector * * PARAMETERS: Facs - Pointer to FACS table * PhysicalAddress - 32-bit physical address of ACPI real mode * entry point * PhysicalAddress64 - 64-bit physical address of ACPI protected * mode entry point * * RETURN: Status * * DESCRIPTION: Sets the FirmwareWakingVector fields of the FACS * ******************************************************************************/ static ACPI_STATUS AcpiHwSetFirmwareWakingVector ( ACPI_TABLE_FACS *Facs, ACPI_PHYSICAL_ADDRESS PhysicalAddress, ACPI_PHYSICAL_ADDRESS PhysicalAddress64) { ACPI_FUNCTION_TRACE (AcpiHwSetFirmwareWakingVector); /* * According to the ACPI specification 2.0c and later, the 64-bit * waking vector should be cleared and the 32-bit waking vector should * be used, unless we want the wake-up code to be called by the BIOS in * Protected Mode. Some systems (for example HP dv5-1004nr) are known * to fail to resume if the 64-bit vector is used. */ /* Set the 32-bit vector */ Facs->FirmwareWakingVector = (UINT32) PhysicalAddress; if (Facs->Length > 32) { if (Facs->Version >= 1) { /* Set the 64-bit vector */ Facs->XFirmwareWakingVector = PhysicalAddress64; } else { /* Clear the 64-bit vector if it exists */ Facs->XFirmwareWakingVector = 0; } } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiSetFirmwareWakingVector * * PARAMETERS: PhysicalAddress - 32-bit physical address of ACPI real mode * entry point * PhysicalAddress64 - 64-bit physical address of ACPI protected * mode entry point * * RETURN: Status * * DESCRIPTION: Sets the FirmwareWakingVector fields of the FACS * ******************************************************************************/ ACPI_STATUS AcpiSetFirmwareWakingVector ( ACPI_PHYSICAL_ADDRESS PhysicalAddress, ACPI_PHYSICAL_ADDRESS PhysicalAddress64) { ACPI_FUNCTION_TRACE (AcpiSetFirmwareWakingVector); if (AcpiGbl_FACS) { (void) AcpiHwSetFirmwareWakingVector (AcpiGbl_FACS, PhysicalAddress, PhysicalAddress64); } return_ACPI_STATUS (AE_OK); } ACPI_EXPORT_SYMBOL (AcpiSetFirmwareWakingVector) /******************************************************************************* * * FUNCTION: AcpiEnterSleepStateS4bios * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Perform a S4 bios request. * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED * ******************************************************************************/ ACPI_STATUS AcpiEnterSleepStateS4bios ( void) { UINT32 InValue; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiEnterSleepStateS4bios); /* Clear the wake status bit (PM1) */ Status = AcpiWriteBitRegister (ACPI_BITREG_WAKE_STATUS, ACPI_CLEAR_STATUS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiHwClearAcpiStatus (); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * 1) Disable all GPEs * 2) Enable all wakeup GPEs */ Status = AcpiHwDisableAllGpes (); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } AcpiGbl_SystemAwakeAndRunning = FALSE; Status = AcpiHwEnableAllWakeupGpes (); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiHwWritePort (AcpiGbl_FADT.SmiCommand, (UINT32) AcpiGbl_FADT.S4BiosRequest, 8); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } do { AcpiOsStall (ACPI_USEC_PER_MSEC); Status = AcpiReadBitRegister (ACPI_BITREG_WAKE_STATUS, &InValue); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } while (!InValue); return_ACPI_STATUS (AE_OK); } ACPI_EXPORT_SYMBOL (AcpiEnterSleepStateS4bios) #endif /* !ACPI_REDUCED_HARDWARE */ /******************************************************************************* * * FUNCTION: AcpiHwSleepDispatch * * PARAMETERS: SleepState - Which sleep state to enter/exit * FunctionId - Sleep, WakePrep, or Wake * * RETURN: Status from the invoked sleep handling function. * * DESCRIPTION: Dispatch a sleep/wake request to the appropriate handling * function. * ******************************************************************************/ static ACPI_STATUS AcpiHwSleepDispatch ( UINT8 SleepState, UINT32 FunctionId) { ACPI_STATUS Status; ACPI_SLEEP_FUNCTIONS *SleepFunctions = &AcpiSleepDispatch[FunctionId]; #if (!ACPI_REDUCED_HARDWARE) /* * If the Hardware Reduced flag is set (from the FADT), we must * use the extended sleep registers (FADT). Note: As per the ACPI * specification, these extended registers are to be used for HW-reduced * platforms only. They are not general-purpose replacements for the * legacy PM register sleep support. */ if (AcpiGbl_ReducedHardware) { Status = SleepFunctions->ExtendedFunction (SleepState); } else { /* Legacy sleep */ Status = SleepFunctions->LegacyFunction (SleepState); } return (Status); #else /* * For the case where reduced-hardware-only code is being generated, * we know that only the extended sleep registers are available */ Status = SleepFunctions->ExtendedFunction (SleepState); return (Status); #endif /* !ACPI_REDUCED_HARDWARE */ } /******************************************************************************* * * FUNCTION: AcpiEnterSleepStatePrep * * PARAMETERS: SleepState - Which sleep state to enter * * RETURN: Status * * DESCRIPTION: Prepare to enter a system sleep state. * This function must execute with interrupts enabled. * We break sleeping into 2 stages so that OSPM can handle * various OS-specific tasks between the two steps. * ******************************************************************************/ ACPI_STATUS AcpiEnterSleepStatePrep ( UINT8 SleepState) { ACPI_STATUS Status; ACPI_OBJECT_LIST ArgList; ACPI_OBJECT Arg; UINT32 SstValue; ACPI_FUNCTION_TRACE (AcpiEnterSleepStatePrep); Status = AcpiGetSleepTypeData (SleepState, &AcpiGbl_SleepTypeA, &AcpiGbl_SleepTypeB); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiGetSleepTypeData (ACPI_STATE_S0, &AcpiGbl_SleepTypeAS0, &AcpiGbl_SleepTypeBS0); if (ACPI_FAILURE (Status)) { AcpiGbl_SleepTypeAS0 = ACPI_SLEEP_TYPE_INVALID; } /* Execute the _PTS method (Prepare To Sleep) */ ArgList.Count = 1; ArgList.Pointer = &Arg; Arg.Type = ACPI_TYPE_INTEGER; Arg.Integer.Value = SleepState; Status = AcpiEvaluateObject (NULL, METHOD_PATHNAME__PTS, &ArgList, NULL); if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND) { return_ACPI_STATUS (Status); } /* Setup the argument to the _SST method (System STatus) */ switch (SleepState) { case ACPI_STATE_S0: SstValue = ACPI_SST_WORKING; break; case ACPI_STATE_S1: case ACPI_STATE_S2: case ACPI_STATE_S3: SstValue = ACPI_SST_SLEEPING; break; case ACPI_STATE_S4: SstValue = ACPI_SST_SLEEP_CONTEXT; break; default: SstValue = ACPI_SST_INDICATOR_OFF; /* Default is off */ break; } /* * Set the system indicators to show the desired sleep state. * _SST is an optional method (return no error if not found) */ AcpiHwExecuteSleepMethod (METHOD_PATHNAME__SST, SstValue); return_ACPI_STATUS (AE_OK); } ACPI_EXPORT_SYMBOL (AcpiEnterSleepStatePrep) /******************************************************************************* * * FUNCTION: AcpiEnterSleepState * * PARAMETERS: SleepState - Which sleep state to enter * * RETURN: Status * * DESCRIPTION: Enter a system sleep state * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED * ******************************************************************************/ ACPI_STATUS AcpiEnterSleepState ( UINT8 SleepState) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiEnterSleepState); if ((AcpiGbl_SleepTypeA > ACPI_SLEEP_TYPE_MAX) || (AcpiGbl_SleepTypeB > ACPI_SLEEP_TYPE_MAX)) { ACPI_ERROR ((AE_INFO, "Sleep values out of range: A=0x%X B=0x%X", AcpiGbl_SleepTypeA, AcpiGbl_SleepTypeB)); return_ACPI_STATUS (AE_AML_OPERAND_VALUE); } Status = AcpiHwSleepDispatch (SleepState, ACPI_SLEEP_FUNCTION_ID); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiEnterSleepState) /******************************************************************************* * * FUNCTION: AcpiLeaveSleepStatePrep * * PARAMETERS: SleepState - Which sleep state we are exiting * * RETURN: Status * * DESCRIPTION: Perform the first state of OS-independent ACPI cleanup after a * sleep. Called with interrupts DISABLED. * We break wake/resume into 2 stages so that OSPM can handle * various OS-specific tasks between the two steps. * ******************************************************************************/ ACPI_STATUS AcpiLeaveSleepStatePrep ( UINT8 SleepState) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiLeaveSleepStatePrep); Status = AcpiHwSleepDispatch (SleepState, ACPI_WAKE_PREP_FUNCTION_ID); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiLeaveSleepStatePrep) /******************************************************************************* * * FUNCTION: AcpiLeaveSleepState * * PARAMETERS: SleepState - Which sleep state we are exiting * * RETURN: Status * * DESCRIPTION: Perform OS-independent ACPI cleanup after a sleep * Called with interrupts ENABLED. * ******************************************************************************/ ACPI_STATUS AcpiLeaveSleepState ( UINT8 SleepState) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiLeaveSleepState); Status = AcpiHwSleepDispatch (SleepState, ACPI_WAKE_FUNCTION_ID); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiLeaveSleepState) src/acpica/source/components/namespace/000077500000000000000000000000001465205512700205155ustar00rootroot00000000000000src/acpica/source/components/namespace/nsaccess.c000066400000000000000000001000161465205512700224610ustar00rootroot00000000000000/******************************************************************************* * * Module Name: nsaccess - Top-level functions for accessing ACPI namespace * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "amlcode.h" #include "acnamesp.h" #include "acdispat.h" #ifdef ACPI_ASL_COMPILER #include "acdisasm.h" #endif #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsaccess") /******************************************************************************* * * FUNCTION: AcpiNsRootInitialize * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Allocate and initialize the default root named objects * * MUTEX: Locks namespace for entire execution * ******************************************************************************/ ACPI_STATUS AcpiNsRootInitialize ( void) { ACPI_STATUS Status; const ACPI_PREDEFINED_NAMES *InitVal = NULL; ACPI_NAMESPACE_NODE *NewNode; ACPI_NAMESPACE_NODE *PrevNode = NULL; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STRING Val = NULL; ACPI_FUNCTION_TRACE (NsRootInitialize); Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * The global root ptr is initially NULL, so a non-NULL value indicates * that AcpiNsRootInitialize() has already been called; just return. */ if (AcpiGbl_RootNode) { Status = AE_OK; goto UnlockAndExit; } /* * Tell the rest of the subsystem that the root is initialized * (This is OK because the namespace is locked) */ AcpiGbl_RootNode = &AcpiGbl_RootNodeStruct; /* Enter the predefined names in the name table */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Entering predefined entries into namespace\n")); /* * Create the initial (default) namespace. * This namespace looks like something similar to this: * * ACPI Namespace (from Namespace Root): * 0 _GPE Scope 00203160 00 * 0 _PR_ Scope 002031D0 00 * 0 _SB_ Device 00203240 00 Notify Object: 0020ADD8 * 0 _SI_ Scope 002032B0 00 * 0 _TZ_ Device 00203320 00 * 0 _REV Integer 00203390 00 = 0000000000000002 * 0 _OS_ String 00203488 00 Len 14 "Microsoft Windows NT" * 0 _GL_ Mutex 00203580 00 Object 002035F0 * 0 _OSI Method 00203678 00 Args 1 Len 0000 Aml 00000000 */ for (InitVal = AcpiGbl_PreDefinedNames; InitVal->Name; InitVal++) { Status = AE_OK; /* _OSI is optional for now, will be permanent later */ if (!strcmp (InitVal->Name, "_OSI") && !AcpiGbl_CreateOsiMethod) { continue; } /* * Create, init, and link the new predefined name * Note: No need to use AcpiNsLookup here because all the * predefined names are at the root level. It is much easier to * just create and link the new node(s) here. */ NewNode = AcpiNsCreateNode (*ACPI_CAST_PTR (UINT32, InitVal->Name)); if (!NewNode) { Status = AE_NO_MEMORY; goto UnlockAndExit; } NewNode->DescriptorType = ACPI_DESC_TYPE_NAMED; NewNode->Type = InitVal->Type; if (!PrevNode) { AcpiGbl_RootNodeStruct.Child = NewNode; } else { PrevNode->Peer = NewNode; } NewNode->Parent = &AcpiGbl_RootNodeStruct; PrevNode = NewNode; /* * Name entered successfully. If entry in PreDefinedNames[] specifies * an initial value, create the initial value. */ if (InitVal->Val) { Status = AcpiOsPredefinedOverride (InitVal, &Val); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Could not override predefined %s", InitVal->Name)); } if (!Val) { Val = InitVal->Val; } /* * Entry requests an initial value, allocate a * descriptor for it. */ ObjDesc = AcpiUtCreateInternalObject (InitVal->Type); if (!ObjDesc) { Status = AE_NO_MEMORY; goto UnlockAndExit; } /* * Convert value string from table entry to * internal representation. Only types actually * used for initial values are implemented here. */ switch (InitVal->Type) { case ACPI_TYPE_METHOD: ObjDesc->Method.ParamCount = (UINT8) ACPI_TO_INTEGER (Val); ObjDesc->Common.Flags |= AOPOBJ_DATA_VALID; #if defined (ACPI_ASL_COMPILER) /* Save the parameter count for the iASL compiler */ NewNode->Value = ObjDesc->Method.ParamCount; #else /* Mark this as a very SPECIAL method (_OSI) */ ObjDesc->Method.InfoFlags = ACPI_METHOD_INTERNAL_ONLY; ObjDesc->Method.Dispatch.Implementation = AcpiUtOsiImplementation; #endif break; case ACPI_TYPE_INTEGER: ObjDesc->Integer.Value = ACPI_TO_INTEGER (Val); break; case ACPI_TYPE_STRING: /* Build an object around the static string */ ObjDesc->String.Length = (UINT32) strlen (Val); ObjDesc->String.Pointer = Val; ObjDesc->Common.Flags |= AOPOBJ_STATIC_POINTER; break; case ACPI_TYPE_MUTEX: ObjDesc->Mutex.Node = NewNode; ObjDesc->Mutex.SyncLevel = (UINT8) (ACPI_TO_INTEGER (Val) - 1); /* Create a mutex */ Status = AcpiOsCreateMutex (&ObjDesc->Mutex.OsMutex); if (ACPI_FAILURE (Status)) { AcpiUtRemoveReference (ObjDesc); goto UnlockAndExit; } /* Special case for ACPI Global Lock */ if (strcmp (InitVal->Name, "_GL_") == 0) { AcpiGbl_GlobalLockMutex = ObjDesc; /* Create additional counting semaphore for global lock */ Status = AcpiOsCreateSemaphore ( 1, 0, &AcpiGbl_GlobalLockSemaphore); if (ACPI_FAILURE (Status)) { AcpiUtRemoveReference (ObjDesc); goto UnlockAndExit; } } break; default: ACPI_ERROR ((AE_INFO, "Unsupported initial type value 0x%X", InitVal->Type)); AcpiUtRemoveReference (ObjDesc); ObjDesc = NULL; continue; } /* Store pointer to value descriptor in the Node */ Status = AcpiNsAttachObject (NewNode, ObjDesc, ObjDesc->Common.Type); /* Remove local reference to the object */ AcpiUtRemoveReference (ObjDesc); } } UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); /* Save a handle to "_GPE", it is always present */ if (ACPI_SUCCESS (Status)) { Status = AcpiNsGetNode (NULL, "\\_GPE", ACPI_NS_NO_UPSEARCH, &AcpiGbl_FadtGpeDevice); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiNsLookup * * PARAMETERS: ScopeInfo - Current scope info block * Pathname - Search pathname, in internal format * (as represented in the AML stream) * Type - Type associated with name * InterpreterMode - IMODE_LOAD_PASS2 => add name if not found * Flags - Flags describing the search restrictions * WalkState - Current state of the walk * ReturnNode - Where the Node is placed (if found * or created successfully) * * RETURN: Status * * DESCRIPTION: Find or enter the passed name in the name space. * Log an error if name not found in Exec mode. * * MUTEX: Assumes namespace is locked. * ******************************************************************************/ ACPI_STATUS AcpiNsLookup ( ACPI_GENERIC_STATE *ScopeInfo, char *Pathname, ACPI_OBJECT_TYPE Type, ACPI_INTERPRETER_MODE InterpreterMode, UINT32 Flags, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE **ReturnNode) { ACPI_STATUS Status; char *Path = Pathname; char *ExternalPath; ACPI_NAMESPACE_NODE *PrefixNode; ACPI_NAMESPACE_NODE *CurrentNode = NULL; ACPI_NAMESPACE_NODE *ThisNode = NULL; UINT32 NumSegments; UINT32 NumCarats; ACPI_NAME SimpleName; ACPI_OBJECT_TYPE TypeToCheckFor; ACPI_OBJECT_TYPE ThisSearchType; UINT32 SearchParentFlag = ACPI_NS_SEARCH_PARENT; UINT32 LocalFlags; ACPI_INTERPRETER_MODE LocalInterpreterMode; ACPI_FUNCTION_TRACE (NsLookup); if (!ReturnNode) { return_ACPI_STATUS (AE_BAD_PARAMETER); } LocalFlags = Flags & ~(ACPI_NS_ERROR_IF_FOUND | ACPI_NS_OVERRIDE_IF_FOUND | ACPI_NS_SEARCH_PARENT); *ReturnNode = ACPI_ENTRY_NOT_FOUND; AcpiGbl_NsLookupCount++; if (!AcpiGbl_RootNode) { return_ACPI_STATUS (AE_NO_NAMESPACE); } /* Get the prefix scope. A null scope means use the root scope */ if ((!ScopeInfo) || (!ScopeInfo->Scope.Node)) { ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Null scope prefix, using root node (%p)\n", AcpiGbl_RootNode)); PrefixNode = AcpiGbl_RootNode; } else { PrefixNode = ScopeInfo->Scope.Node; if (ACPI_GET_DESCRIPTOR_TYPE (PrefixNode) != ACPI_DESC_TYPE_NAMED) { ACPI_ERROR ((AE_INFO, "%p is not a namespace node [%s]", PrefixNode, AcpiUtGetDescriptorName (PrefixNode))); return_ACPI_STATUS (AE_AML_INTERNAL); } if (!(Flags & ACPI_NS_PREFIX_IS_SCOPE)) { /* * This node might not be a actual "scope" node (such as a * Device/Method, etc.) It could be a Package or other object * node. Backup up the tree to find the containing scope node. */ while (!AcpiNsOpensScope (PrefixNode->Type) && PrefixNode->Type != ACPI_TYPE_ANY) { PrefixNode = PrefixNode->Parent; } } } /* Save type. TBD: may be no longer necessary */ TypeToCheckFor = Type; /* * Begin examination of the actual pathname */ if (!Pathname) { /* A Null NamePath is allowed and refers to the root */ NumSegments = 0; ThisNode = AcpiGbl_RootNode; Path = ""; ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Null Pathname (Zero segments), Flags=%X\n", Flags)); } else { /* * Name pointer is valid (and must be in internal name format) * * Check for scope prefixes: * * As represented in the AML stream, a namepath consists of an * optional scope prefix followed by a name segment part. * * If present, the scope prefix is either a Root Prefix (in * which case the name is fully qualified), or one or more * Parent Prefixes (in which case the name's scope is relative * to the current scope). */ if (*Path == (UINT8) AML_ROOT_PREFIX) { /* Pathname is fully qualified, start from the root */ ThisNode = AcpiGbl_RootNode; SearchParentFlag = ACPI_NS_NO_UPSEARCH; /* Point to name segment part */ Path++; ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Path is absolute from root [%p]\n", ThisNode)); } else { /* Pathname is relative to current scope, start there */ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching relative to prefix scope [%4.4s] (%p)\n", AcpiUtGetNodeName (PrefixNode), PrefixNode)); /* * Handle multiple Parent Prefixes (carat) by just getting * the parent node for each prefix instance. */ ThisNode = PrefixNode; NumCarats = 0; while (*Path == (UINT8) AML_PARENT_PREFIX) { /* Name is fully qualified, no search rules apply */ SearchParentFlag = ACPI_NS_NO_UPSEARCH; /* * Point past this prefix to the name segment * part or the next Parent Prefix */ Path++; /* Backup to the parent node */ NumCarats++; ThisNode = ThisNode->Parent; if (!ThisNode) { /* * Current scope has no parent scope. Externalize * the internal path for error message. */ Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, Pathname, NULL, &ExternalPath); if (ACPI_SUCCESS (Status)) { ACPI_ERROR ((AE_INFO, "%s: Path has too many parent prefixes (^)", ExternalPath)); ACPI_FREE (ExternalPath); } return_ACPI_STATUS (AE_NOT_FOUND); } } if (SearchParentFlag == ACPI_NS_NO_UPSEARCH) { ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Search scope is [%4.4s], path has %u carat(s)\n", AcpiUtGetNodeName (ThisNode), NumCarats)); } } /* * Determine the number of ACPI name segments in this pathname. * * The segment part consists of either: * - A Null name segment (0) * - A DualNamePrefix followed by two 4-byte name segments * - A MultiNamePrefix followed by a byte indicating the * number of segments and the segments themselves. * - A single 4-byte name segment * * Examine the name prefix opcode, if any, to determine the number of * segments. */ switch (*Path) { case 0: /* * Null name after a root or parent prefixes. We already * have the correct target node and there are no name segments. */ NumSegments = 0; Type = ThisNode->Type; ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Prefix-only Pathname (Zero name segments), Flags=%X\n", Flags)); break; case AML_DUAL_NAME_PREFIX: /* More than one NameSeg, search rules do not apply */ SearchParentFlag = ACPI_NS_NO_UPSEARCH; /* Two segments, point to first name segment */ NumSegments = 2; Path++; ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Dual Pathname (2 segments, Flags=%X)\n", Flags)); break; case AML_MULTI_NAME_PREFIX: /* More than one NameSeg, search rules do not apply */ SearchParentFlag = ACPI_NS_NO_UPSEARCH; /* Extract segment count, point to first name segment */ Path++; NumSegments = (UINT32) (UINT8) *Path; Path++; ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Multi Pathname (%u Segments, Flags=%X)\n", NumSegments, Flags)); break; default: /* * Not a Null name, no Dual or Multi prefix, hence there is * only one name segment and Pathname is already pointing to it. */ NumSegments = 1; ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Simple Pathname (1 segment, Flags=%X)\n", Flags)); break; } ACPI_DEBUG_EXEC (AcpiNsPrintPathname (NumSegments, Path)); } /* * Search namespace for each segment of the name. Loop through and * verify (or add to the namespace) each name segment. * * The object type is significant only at the last name * segment. (We don't care about the types along the path, only * the type of the final target object.) */ ThisSearchType = ACPI_TYPE_ANY; CurrentNode = ThisNode; while (NumSegments && CurrentNode) { NumSegments--; if (!NumSegments) { /* This is the last segment, enable typechecking */ ThisSearchType = Type; /* * Only allow automatic parent search (search rules) if the caller * requested it AND we have a single, non-fully-qualified NameSeg */ if ((SearchParentFlag != ACPI_NS_NO_UPSEARCH) && (Flags & ACPI_NS_SEARCH_PARENT)) { LocalFlags |= ACPI_NS_SEARCH_PARENT; } /* Set error flag according to caller */ if (Flags & ACPI_NS_ERROR_IF_FOUND) { LocalFlags |= ACPI_NS_ERROR_IF_FOUND; } /* Set override flag according to caller */ if (Flags & ACPI_NS_OVERRIDE_IF_FOUND) { LocalFlags |= ACPI_NS_OVERRIDE_IF_FOUND; } } /* Handle opcodes that create a new NameSeg via a full NamePath */ LocalInterpreterMode = InterpreterMode; if ((Flags & ACPI_NS_PREFIX_MUST_EXIST) && (NumSegments > 0)) { /* Every element of the path must exist (except for the final NameSeg) */ LocalInterpreterMode = ACPI_IMODE_EXECUTE; } /* Extract one ACPI name from the front of the pathname */ ACPI_MOVE_32_TO_32 (&SimpleName, Path); /* Try to find the single (4 character) ACPI name */ Status = AcpiNsSearchAndEnter (SimpleName, WalkState, CurrentNode, LocalInterpreterMode, ThisSearchType, LocalFlags, &ThisNode); if (ACPI_FAILURE (Status)) { if (Status == AE_NOT_FOUND) { #if !defined ACPI_ASL_COMPILER /* Note: iASL reports this error by itself, not needed here */ if (Flags & ACPI_NS_PREFIX_MUST_EXIST) { AcpiOsPrintf (ACPI_MSG_BIOS_ERROR "Object does not exist: %4.4s\n", (char *) &SimpleName); } #endif /* Name not found in ACPI namespace */ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Name [%4.4s] not found in scope [%4.4s] %p\n", (char *) &SimpleName, (char *) &CurrentNode->Name, CurrentNode)); } #ifdef ACPI_EXEC_APP if ((Status == AE_ALREADY_EXISTS) && (ThisNode->Flags & ANOBJ_NODE_EARLY_INIT)) { ThisNode->Flags &= ~ANOBJ_NODE_EARLY_INIT; Status = AE_OK; } #endif #ifdef ACPI_ASL_COMPILER /* * If this ACPI name already exists within the namespace as an * external declaration, then mark the external as a conflicting * declaration and proceed to process the current node as if it did * not exist in the namespace. If this node is not processed as * normal, then it could cause improper namespace resolution * by failing to open a new scope. */ if (AcpiGbl_DisasmFlag && (Status == AE_ALREADY_EXISTS) && ((ThisNode->Flags & ANOBJ_IS_EXTERNAL) || (WalkState && WalkState->Opcode == AML_EXTERNAL_OP))) { ThisNode->Flags &= ~ANOBJ_IS_EXTERNAL; ThisNode->Type = (UINT8)ThisSearchType; if (WalkState->Opcode != AML_EXTERNAL_OP) { AcpiDmMarkExternalConflict (ThisNode); } break; } #endif *ReturnNode = ThisNode; return_ACPI_STATUS (Status); } /* More segments to follow? */ if (NumSegments > 0) { /* * If we have an alias to an object that opens a scope (such as a * device or processor), we need to dereference the alias here so * that we can access any children of the original node (via the * remaining segments). */ if (ThisNode->Type == ACPI_TYPE_LOCAL_ALIAS) { if (!ThisNode->Object) { return_ACPI_STATUS (AE_NOT_EXIST); } if (AcpiNsOpensScope (((ACPI_NAMESPACE_NODE *) ThisNode->Object)->Type)) { ThisNode = (ACPI_NAMESPACE_NODE *) ThisNode->Object; } } } /* Special handling for the last segment (NumSegments == 0) */ else { /* * Sanity typecheck of the target object: * * If 1) This is the last segment (NumSegments == 0) * 2) And we are looking for a specific type * (Not checking for TYPE_ANY) * 3) Which is not an alias * 4) Which is not a local type (TYPE_SCOPE) * 5) And the type of target object is known (not TYPE_ANY) * 6) And target object does not match what we are looking for * * Then we have a type mismatch. Just warn and ignore it. */ if ((TypeToCheckFor != ACPI_TYPE_ANY) && (TypeToCheckFor != ACPI_TYPE_LOCAL_ALIAS) && (TypeToCheckFor != ACPI_TYPE_LOCAL_METHOD_ALIAS) && (TypeToCheckFor != ACPI_TYPE_LOCAL_SCOPE) && (ThisNode->Type != ACPI_TYPE_ANY) && (ThisNode->Type != TypeToCheckFor)) { /* Complain about a type mismatch */ ACPI_WARNING ((AE_INFO, "NsLookup: Type mismatch on %4.4s (%s), searching for (%s)", ACPI_CAST_PTR (char, &SimpleName), AcpiUtGetTypeName (ThisNode->Type), AcpiUtGetTypeName (TypeToCheckFor))); } /* * If this is the last name segment and we are not looking for a * specific type, but the type of found object is known, use that * type to (later) see if it opens a scope. */ if (Type == ACPI_TYPE_ANY) { Type = ThisNode->Type; } } /* Point to next name segment and make this node current */ Path += ACPI_NAMESEG_SIZE; CurrentNode = ThisNode; } /* Always check if we need to open a new scope */ if (!(Flags & ACPI_NS_DONT_OPEN_SCOPE) && (WalkState)) { /* * If entry is a type which opens a scope, push the new scope on the * scope stack. */ if (AcpiNsOpensScope (Type)) { Status = AcpiDsScopeStackPush (ThisNode, Type, WalkState); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } } #ifdef ACPI_EXEC_APP if (Flags & ACPI_NS_EARLY_INIT) { ThisNode->Flags |= ANOBJ_NODE_EARLY_INIT; } #endif *ReturnNode = ThisNode; return_ACPI_STATUS (AE_OK); } src/acpica/source/components/namespace/nsalloc.c000066400000000000000000000536211465205512700223230ustar00rootroot00000000000000/******************************************************************************* * * Module Name: nsalloc - Namespace allocation and deletion utilities * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsalloc") /******************************************************************************* * * FUNCTION: AcpiNsCreateNode * * PARAMETERS: Name - Name of the new node (4 char ACPI name) * * RETURN: New namespace node (Null on failure) * * DESCRIPTION: Create a namespace node * ******************************************************************************/ ACPI_NAMESPACE_NODE * AcpiNsCreateNode ( UINT32 Name) { ACPI_NAMESPACE_NODE *Node; #ifdef ACPI_DBG_TRACK_ALLOCATIONS UINT32 Temp; #endif ACPI_FUNCTION_TRACE (NsCreateNode); Node = AcpiOsAcquireObject (AcpiGbl_NamespaceCache); if (!Node) { return_PTR (NULL); } ACPI_MEM_TRACKING (AcpiGbl_NsNodeList->TotalAllocated++); #ifdef ACPI_DBG_TRACK_ALLOCATIONS Temp = AcpiGbl_NsNodeList->TotalAllocated - AcpiGbl_NsNodeList->TotalFreed; if (Temp > AcpiGbl_NsNodeList->MaxOccupied) { AcpiGbl_NsNodeList->MaxOccupied = Temp; } #endif Node->Name.Integer = Name; ACPI_SET_DESCRIPTOR_TYPE (Node, ACPI_DESC_TYPE_NAMED); return_PTR (Node); } /******************************************************************************* * * FUNCTION: AcpiNsDeleteNode * * PARAMETERS: Node - Node to be deleted * * RETURN: None * * DESCRIPTION: Delete a namespace node. All node deletions must come through * here. Detaches any attached objects, including any attached * data. If a handler is associated with attached data, it is * invoked before the node is deleted. * ******************************************************************************/ void AcpiNsDeleteNode ( ACPI_NAMESPACE_NODE *Node) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *NextDesc; ACPI_FUNCTION_NAME (NsDeleteNode); if (!Node) { return_VOID; } /* Detach an object if there is one */ AcpiNsDetachObject (Node); /* * Delete an attached data object list if present (objects that were * attached via AcpiAttachData). Note: After any normal object is * detached above, the only possible remaining object(s) are data * objects, in a linked list. */ ObjDesc = Node->Object; while (ObjDesc && (ObjDesc->Common.Type == ACPI_TYPE_LOCAL_DATA)) { /* Invoke the attached data deletion handler if present */ if (ObjDesc->Data.Handler) { ObjDesc->Data.Handler (Node, ObjDesc->Data.Pointer); } NextDesc = ObjDesc->Common.NextObject; AcpiUtRemoveReference (ObjDesc); ObjDesc = NextDesc; } /* Special case for the statically allocated root node */ if (Node == AcpiGbl_RootNode) { return; } /* Now we can delete the node */ (void) AcpiOsReleaseObject (AcpiGbl_NamespaceCache, Node); ACPI_MEM_TRACKING (AcpiGbl_NsNodeList->TotalFreed++); ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Node %p, Remaining %X\n", Node, AcpiGbl_CurrentNodeCount)); } /******************************************************************************* * * FUNCTION: AcpiNsRemoveNode * * PARAMETERS: Node - Node to be removed/deleted * * RETURN: None * * DESCRIPTION: Remove (unlink) and delete a namespace node * ******************************************************************************/ void AcpiNsRemoveNode ( ACPI_NAMESPACE_NODE *Node) { ACPI_NAMESPACE_NODE *ParentNode; ACPI_NAMESPACE_NODE *PrevNode; ACPI_NAMESPACE_NODE *NextNode; ACPI_FUNCTION_TRACE_PTR (NsRemoveNode, Node); ParentNode = Node->Parent; PrevNode = NULL; NextNode = ParentNode->Child; /* Find the node that is the previous peer in the parent's child list */ while (NextNode != Node) { PrevNode = NextNode; NextNode = NextNode->Peer; } if (PrevNode) { /* Node is not first child, unlink it */ PrevNode->Peer = Node->Peer; } else { /* * Node is first child (has no previous peer). * Link peer list to parent */ ParentNode->Child = Node->Peer; } /* Delete the node and any attached objects */ AcpiNsDeleteNode (Node); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiNsInstallNode * * PARAMETERS: WalkState - Current state of the walk * ParentNode - The parent of the new Node * Node - The new Node to install * Type - ACPI object type of the new Node * * RETURN: None * * DESCRIPTION: Initialize a new namespace node and install it amongst * its peers. * * Note: Current namespace lookup is linear search. This appears * to be sufficient as namespace searches consume only a small * fraction of the execution time of the ACPI subsystem. * ******************************************************************************/ void AcpiNsInstallNode ( ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE *ParentNode, /* Parent */ ACPI_NAMESPACE_NODE *Node, /* New Child*/ ACPI_OBJECT_TYPE Type) { ACPI_OWNER_ID OwnerId = 0; ACPI_NAMESPACE_NODE *ChildNode; ACPI_FUNCTION_TRACE (NsInstallNode); if (WalkState) { /* * Get the owner ID from the Walk state. The owner ID is used to * track table deletion and deletion of objects created by methods. */ OwnerId = WalkState->OwnerId; if ((WalkState->MethodDesc) && (ParentNode != WalkState->MethodNode)) { /* * A method is creating a new node that is not a child of the * method (it is non-local). Mark the executing method as having * modified the namespace. This is used for cleanup when the * method exits. */ WalkState->MethodDesc->Method.InfoFlags |= ACPI_METHOD_MODIFIED_NAMESPACE; } } /* Link the new entry into the parent and existing children */ Node->Peer = NULL; Node->Parent = ParentNode; ChildNode = ParentNode->Child; if (!ChildNode) { ParentNode->Child = Node; } else { /* Add node to the end of the peer list */ while (ChildNode->Peer) { ChildNode = ChildNode->Peer; } ChildNode->Peer = Node; } /* Init the new entry */ Node->OwnerId = OwnerId; Node->Type = (UINT8) Type; ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%4.4s (%s) [Node %p Owner %3.3X] added to %4.4s (%s) [Node %p]\n", AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type), Node, OwnerId, AcpiUtGetNodeName (ParentNode), AcpiUtGetTypeName (ParentNode->Type), ParentNode)); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiNsDeleteChildren * * PARAMETERS: ParentNode - Delete this objects children * * RETURN: None. * * DESCRIPTION: Delete all children of the parent object. In other words, * deletes a "scope". * ******************************************************************************/ void AcpiNsDeleteChildren ( ACPI_NAMESPACE_NODE *ParentNode) { ACPI_NAMESPACE_NODE *NextNode; ACPI_NAMESPACE_NODE *NodeToDelete; ACPI_FUNCTION_TRACE_PTR (NsDeleteChildren, ParentNode); if (!ParentNode) { return_VOID; } /* Deallocate all children at this level */ NextNode = ParentNode->Child; while (NextNode) { /* Grandchildren should have all been deleted already */ if (NextNode->Child) { ACPI_ERROR ((AE_INFO, "Found a grandchild! P=%p C=%p", ParentNode, NextNode)); } /* * Delete this child node and move on to the next child in the list. * No need to unlink the node since we are deleting the entire branch. */ NodeToDelete = NextNode; NextNode = NextNode->Peer; AcpiNsDeleteNode (NodeToDelete); } /* Clear the parent's child pointer */ ParentNode->Child = NULL; return_VOID; } /******************************************************************************* * * FUNCTION: AcpiNsDeleteNamespaceSubtree * * PARAMETERS: ParentNode - Root of the subtree to be deleted * * RETURN: None. * * DESCRIPTION: Delete a subtree of the namespace. This includes all objects * stored within the subtree. * ******************************************************************************/ void AcpiNsDeleteNamespaceSubtree ( ACPI_NAMESPACE_NODE *ParentNode) { ACPI_NAMESPACE_NODE *ChildNode = NULL; UINT32 Level = 1; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (NsDeleteNamespaceSubtree); if (!ParentNode) { return_VOID; } /* Lock namespace for possible update */ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_VOID; } /* * Traverse the tree of objects until we bubble back up * to where we started. */ while (Level > 0) { /* Get the next node in this scope (NULL if none) */ ChildNode = AcpiNsGetNextNode (ParentNode, ChildNode); if (ChildNode) { /* Found a child node - detach any attached object */ AcpiNsDetachObject (ChildNode); /* Check if this node has any children */ if (ChildNode->Child) { /* * There is at least one child of this node, * visit the node */ Level++; ParentNode = ChildNode; ChildNode = NULL; } } else { /* * No more children of this parent node. * Move up to the grandparent. */ Level--; /* * Now delete all of the children of this parent * all at the same time. */ AcpiNsDeleteChildren (ParentNode); /* New "last child" is this parent node */ ChildNode = ParentNode; /* Move up the tree to the grandparent */ ParentNode = ParentNode->Parent; } } (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiNsDeleteNamespaceByOwner * * PARAMETERS: OwnerId - All nodes with this owner will be deleted * * RETURN: Status * * DESCRIPTION: Delete entries within the namespace that are owned by a * specific ID. Used to delete entire ACPI tables. All * reference counts are updated. * * MUTEX: Locks namespace during deletion walk. * ******************************************************************************/ void AcpiNsDeleteNamespaceByOwner ( ACPI_OWNER_ID OwnerId) { ACPI_NAMESPACE_NODE *ChildNode; ACPI_NAMESPACE_NODE *DeletionNode; ACPI_NAMESPACE_NODE *ParentNode; UINT32 Level; ACPI_STATUS Status; ACPI_FUNCTION_TRACE_U32 (NsDeleteNamespaceByOwner, OwnerId); if (OwnerId == 0) { return_VOID; } /* Lock namespace for possible update */ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_VOID; } DeletionNode = NULL; ParentNode = AcpiGbl_RootNode; ChildNode = NULL; Level = 1; /* * Traverse the tree of nodes until we bubble back up * to where we started. */ while (Level > 0) { /* * Get the next child of this parent node. When ChildNode is NULL, * the first child of the parent is returned */ ChildNode = AcpiNsGetNextNode (ParentNode, ChildNode); if (DeletionNode) { AcpiNsDeleteChildren (DeletionNode); AcpiNsRemoveNode (DeletionNode); DeletionNode = NULL; } if (ChildNode) { if (ChildNode->OwnerId == OwnerId) { /* Found a matching child node - detach any attached object */ AcpiNsDetachObject (ChildNode); } /* Check if this node has any children */ if (ChildNode->Child) { /* * There is at least one child of this node, * visit the node */ Level++; ParentNode = ChildNode; ChildNode = NULL; } else if (ChildNode->OwnerId == OwnerId) { DeletionNode = ChildNode; } } else { /* * No more children of this parent node. * Move up to the grandparent. */ Level--; if (Level != 0) { if (ParentNode->OwnerId == OwnerId) { DeletionNode = ParentNode; } } /* New "last child" is this parent node */ ChildNode = ParentNode; /* Move up the tree to the grandparent */ ParentNode = ParentNode->Parent; } } (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return_VOID; } src/acpica/source/components/namespace/nsarguments.c000066400000000000000000000425511465205512700232360ustar00rootroot00000000000000/****************************************************************************** * * Module Name: nsarguments - Validation of args for ACPI predefined methods * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acpredef.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsarguments") /******************************************************************************* * * FUNCTION: AcpiNsCheckArgumentTypes * * PARAMETERS: Info - Method execution information block * * RETURN: None * * DESCRIPTION: Check the incoming argument count and all argument types * against the argument type list for a predefined name. * ******************************************************************************/ void AcpiNsCheckArgumentTypes ( ACPI_EVALUATE_INFO *Info) { UINT16 ArgTypeList; UINT8 ArgCount; UINT8 ArgType; UINT8 UserArgType; UINT32 i; /* * If not a predefined name, cannot typecheck args, because * we have no idea what argument types are expected. * Also, ignore typecheck if warnings/errors if this method * has already been evaluated at least once -- in order * to suppress repetitive messages. */ if (!Info->Predefined || (Info->Node->Flags & ANOBJ_EVALUATED)) { return; } ArgTypeList = Info->Predefined->Info.ArgumentList; ArgCount = METHOD_GET_ARG_COUNT (ArgTypeList); /* Typecheck all arguments */ for (i = 0; ((i < ArgCount) && (i < Info->ParamCount)); i++) { ArgType = METHOD_GET_NEXT_TYPE (ArgTypeList); UserArgType = Info->Parameters[i]->Common.Type; /* No typechecking for ACPI_TYPE_ANY */ if ((UserArgType != ArgType) && (ArgType != ACPI_TYPE_ANY)) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, ACPI_WARN_ALWAYS, "Argument #%u type mismatch - " "Found [%s], ACPI requires [%s]", (i + 1), AcpiUtGetTypeName (UserArgType), AcpiUtGetTypeName (ArgType))); /* Prevent any additional typechecking for this method */ Info->Node->Flags |= ANOBJ_EVALUATED; } } } /******************************************************************************* * * FUNCTION: AcpiNsCheckAcpiCompliance * * PARAMETERS: Pathname - Full pathname to the node (for error msgs) * Node - Namespace node for the method/object * Predefined - Pointer to entry in predefined name table * * RETURN: None * * DESCRIPTION: Check that the declared parameter count (in ASL/AML) for a * predefined name is what is expected (matches what is defined in * the ACPI specification for this predefined name.) * ******************************************************************************/ void AcpiNsCheckAcpiCompliance ( char *Pathname, ACPI_NAMESPACE_NODE *Node, const ACPI_PREDEFINED_INFO *Predefined) { UINT32 AmlParamCount; UINT32 RequiredParamCount; if (!Predefined || (Node->Flags & ANOBJ_EVALUATED)) { return; } /* Get the ACPI-required arg count from the predefined info table */ RequiredParamCount = METHOD_GET_ARG_COUNT (Predefined->Info.ArgumentList); /* * If this object is not a control method, we can check if the ACPI * spec requires that it be a method. */ if (Node->Type != ACPI_TYPE_METHOD) { if (RequiredParamCount > 0) { /* Object requires args, must be implemented as a method */ ACPI_BIOS_ERROR_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, "Object (%s) must be a control method with %u arguments", AcpiUtGetTypeName (Node->Type), RequiredParamCount)); } else if (!RequiredParamCount && !Predefined->Info.ExpectedBtypes) { /* Object requires no args and no return value, must be a method */ ACPI_BIOS_ERROR_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, "Object (%s) must be a control method " "with no arguments and no return value", AcpiUtGetTypeName (Node->Type))); } return; } /* * This is a control method. * Check that the ASL/AML-defined parameter count for this method * matches the ACPI-required parameter count * * Some methods are allowed to have a "minimum" number of args (_SCP) * because their definition in ACPI has changed over time. * * Note: These are BIOS errors in the declaration of the object */ AmlParamCount = Node->Object->Method.ParamCount; if (AmlParamCount < RequiredParamCount) { ACPI_BIOS_ERROR_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, "Insufficient arguments - " "ASL declared %u, ACPI requires %u", AmlParamCount, RequiredParamCount)); } else if ((AmlParamCount > RequiredParamCount) && !(Predefined->Info.ArgumentList & ARG_COUNT_IS_MINIMUM)) { ACPI_BIOS_ERROR_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, "Excess arguments - " "ASL declared %u, ACPI requires %u", AmlParamCount, RequiredParamCount)); } } /******************************************************************************* * * FUNCTION: AcpiNsCheckArgumentCount * * PARAMETERS: Pathname - Full pathname to the node (for error msgs) * Node - Namespace node for the method/object * UserParamCount - Number of args passed in by the caller * Predefined - Pointer to entry in predefined name table * * RETURN: None * * DESCRIPTION: Check that incoming argument count matches the declared * parameter count (in the ASL/AML) for an object. * ******************************************************************************/ void AcpiNsCheckArgumentCount ( char *Pathname, ACPI_NAMESPACE_NODE *Node, UINT32 UserParamCount, const ACPI_PREDEFINED_INFO *Predefined) { UINT32 AmlParamCount; UINT32 RequiredParamCount; if (Node->Flags & ANOBJ_EVALUATED) { return; } if (!Predefined) { /* * Not a predefined name. Check the incoming user argument count * against the count that is specified in the method/object. */ if (Node->Type != ACPI_TYPE_METHOD) { if (UserParamCount) { ACPI_INFO_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, "%u arguments were passed to a non-method ACPI object (%s)", UserParamCount, AcpiUtGetTypeName (Node->Type))); } return; } /* * This is a control method. Check the parameter count. * We can only check the incoming argument count against the * argument count declared for the method in the ASL/AML. * * Emit a message if too few or too many arguments have been passed * by the caller. * * Note: Too many arguments will not cause the method to * fail. However, the method will fail if there are too few * arguments and the method attempts to use one of the missing ones. */ AmlParamCount = Node->Object->Method.ParamCount; if (UserParamCount < AmlParamCount) { ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, "Insufficient arguments - " "Caller passed %u, method requires %u", UserParamCount, AmlParamCount)); } else if (UserParamCount > AmlParamCount) { ACPI_INFO_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, "Excess arguments - " "Caller passed %u, method requires %u", UserParamCount, AmlParamCount)); } return; } /* * This is a predefined name. Validate the user-supplied parameter * count against the ACPI specification. We don't validate against * the method itself because what is important here is that the * caller is in conformance with the spec. (The arg count for the * method was checked against the ACPI spec earlier.) * * Some methods are allowed to have a "minimum" number of args (_SCP) * because their definition in ACPI has changed over time. */ RequiredParamCount = METHOD_GET_ARG_COUNT (Predefined->Info.ArgumentList); if (UserParamCount < RequiredParamCount) { ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, "Insufficient arguments - " "Caller passed %u, ACPI requires %u", UserParamCount, RequiredParamCount)); } else if ((UserParamCount > RequiredParamCount) && !(Predefined->Info.ArgumentList & ARG_COUNT_IS_MINIMUM)) { ACPI_INFO_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, "Excess arguments - " "Caller passed %u, ACPI requires %u", UserParamCount, RequiredParamCount)); } } src/acpica/source/components/namespace/nsconvert.c000066400000000000000000000544351465205512700227150ustar00rootroot00000000000000/****************************************************************************** * * Module Name: nsconvert - Object conversions for objects returned by * predefined methods * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acinterp.h" #include "acpredef.h" #include "amlresrc.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsconvert") /******************************************************************************* * * FUNCTION: AcpiNsConvertToInteger * * PARAMETERS: OriginalObject - Object to be converted * ReturnObject - Where the new converted object is returned * * RETURN: Status. AE_OK if conversion was successful. * * DESCRIPTION: Attempt to convert a String/Buffer object to an Integer. * ******************************************************************************/ ACPI_STATUS AcpiNsConvertToInteger ( ACPI_OPERAND_OBJECT *OriginalObject, ACPI_OPERAND_OBJECT **ReturnObject) { ACPI_OPERAND_OBJECT *NewObject; ACPI_STATUS Status; UINT64 Value = 0; UINT32 i; switch (OriginalObject->Common.Type) { case ACPI_TYPE_STRING: /* String-to-Integer conversion */ Status = AcpiUtStrtoul64 (OriginalObject->String.Pointer, &Value); if (ACPI_FAILURE (Status)) { return (Status); } break; case ACPI_TYPE_BUFFER: /* Buffer-to-Integer conversion. Max buffer size is 64 bits. */ if (OriginalObject->Buffer.Length > 8) { return (AE_AML_OPERAND_TYPE); } /* Extract each buffer byte to create the integer */ for (i = 0; i < OriginalObject->Buffer.Length; i++) { Value |= ((UINT64) OriginalObject->Buffer.Pointer[i] << (i * 8)); } break; default: return (AE_AML_OPERAND_TYPE); } NewObject = AcpiUtCreateIntegerObject (Value); if (!NewObject) { return (AE_NO_MEMORY); } *ReturnObject = NewObject; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsConvertToString * * PARAMETERS: OriginalObject - Object to be converted * ReturnObject - Where the new converted object is returned * * RETURN: Status. AE_OK if conversion was successful. * * DESCRIPTION: Attempt to convert a Integer/Buffer object to a String. * ******************************************************************************/ ACPI_STATUS AcpiNsConvertToString ( ACPI_OPERAND_OBJECT *OriginalObject, ACPI_OPERAND_OBJECT **ReturnObject) { ACPI_OPERAND_OBJECT *NewObject; ACPI_SIZE Length; ACPI_STATUS Status; switch (OriginalObject->Common.Type) { case ACPI_TYPE_INTEGER: /* * Integer-to-String conversion. Commonly, convert * an integer of value 0 to a NULL string. The last element of * _BIF and _BIX packages occasionally need this fix. */ if (OriginalObject->Integer.Value == 0) { /* Allocate a new NULL string object */ NewObject = AcpiUtCreateStringObject (0); if (!NewObject) { return (AE_NO_MEMORY); } } else { Status = AcpiExConvertToString (OriginalObject, &NewObject, ACPI_IMPLICIT_CONVERT_HEX); if (ACPI_FAILURE (Status)) { return (Status); } } break; case ACPI_TYPE_BUFFER: /* * Buffer-to-String conversion. Use a ToString * conversion, no transform performed on the buffer data. The best * example of this is the _BIF method, where the string data from * the battery is often (incorrectly) returned as buffer object(s). */ Length = 0; while ((Length < OriginalObject->Buffer.Length) && (OriginalObject->Buffer.Pointer[Length])) { Length++; } /* Allocate a new string object */ NewObject = AcpiUtCreateStringObject (Length); if (!NewObject) { return (AE_NO_MEMORY); } /* * Copy the raw buffer data with no transform. String is already NULL * terminated at Length+1. */ memcpy (NewObject->String.Pointer, OriginalObject->Buffer.Pointer, Length); break; default: return (AE_AML_OPERAND_TYPE); } *ReturnObject = NewObject; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsConvertToBuffer * * PARAMETERS: OriginalObject - Object to be converted * ReturnObject - Where the new converted object is returned * * RETURN: Status. AE_OK if conversion was successful. * * DESCRIPTION: Attempt to convert a Integer/String/Package object to a Buffer. * ******************************************************************************/ ACPI_STATUS AcpiNsConvertToBuffer ( ACPI_OPERAND_OBJECT *OriginalObject, ACPI_OPERAND_OBJECT **ReturnObject) { ACPI_OPERAND_OBJECT *NewObject; ACPI_STATUS Status; ACPI_OPERAND_OBJECT **Elements; UINT32 *DwordBuffer; UINT32 Count; UINT32 i; switch (OriginalObject->Common.Type) { case ACPI_TYPE_INTEGER: /* * Integer-to-Buffer conversion. * Convert the Integer to a packed-byte buffer. _MAT and other * objects need this sometimes, if a read has been performed on a * Field object that is less than or equal to the global integer * size (32 or 64 bits). */ Status = AcpiExConvertToBuffer (OriginalObject, &NewObject); if (ACPI_FAILURE (Status)) { return (Status); } break; case ACPI_TYPE_STRING: /* String-to-Buffer conversion. Simple data copy */ NewObject = AcpiUtCreateBufferObject (OriginalObject->String.Length); if (!NewObject) { return (AE_NO_MEMORY); } memcpy (NewObject->Buffer.Pointer, OriginalObject->String.Pointer, OriginalObject->String.Length); break; case ACPI_TYPE_PACKAGE: /* * This case is often seen for predefined names that must return a * Buffer object with multiple DWORD integers within. For example, * _FDE and _GTM. The Package can be converted to a Buffer. */ /* All elements of the Package must be integers */ Elements = OriginalObject->Package.Elements; Count = OriginalObject->Package.Count; for (i = 0; i < Count; i++) { if ((!*Elements) || ((*Elements)->Common.Type != ACPI_TYPE_INTEGER)) { return (AE_AML_OPERAND_TYPE); } Elements++; } /* Create the new buffer object to replace the Package */ NewObject = AcpiUtCreateBufferObject (ACPI_MUL_4 (Count)); if (!NewObject) { return (AE_NO_MEMORY); } /* Copy the package elements (integers) to the buffer as DWORDs */ Elements = OriginalObject->Package.Elements; DwordBuffer = ACPI_CAST_PTR (UINT32, NewObject->Buffer.Pointer); for (i = 0; i < Count; i++) { *DwordBuffer = (UINT32) (*Elements)->Integer.Value; DwordBuffer++; Elements++; } break; default: return (AE_AML_OPERAND_TYPE); } *ReturnObject = NewObject; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsConvertToUnicode * * PARAMETERS: Scope - Namespace node for the method/object * OriginalObject - ASCII String Object to be converted * ReturnObject - Where the new converted object is returned * * RETURN: Status. AE_OK if conversion was successful. * * DESCRIPTION: Attempt to convert a String object to a Unicode string Buffer. * ******************************************************************************/ ACPI_STATUS AcpiNsConvertToUnicode ( ACPI_NAMESPACE_NODE *Scope, ACPI_OPERAND_OBJECT *OriginalObject, ACPI_OPERAND_OBJECT **ReturnObject) { ACPI_OPERAND_OBJECT *NewObject; char *AsciiString; UINT16 *UnicodeBuffer; UINT32 UnicodeLength; UINT32 i; if (!OriginalObject) { return (AE_OK); } /* If a Buffer was returned, it must be at least two bytes long */ if (OriginalObject->Common.Type == ACPI_TYPE_BUFFER) { if (OriginalObject->Buffer.Length < 2) { return (AE_AML_OPERAND_VALUE); } *ReturnObject = NULL; return (AE_OK); } /* * The original object is an ASCII string. Convert this string to * a unicode buffer. */ AsciiString = OriginalObject->String.Pointer; UnicodeLength = (OriginalObject->String.Length * 2) + 2; /* Create a new buffer object for the Unicode data */ NewObject = AcpiUtCreateBufferObject (UnicodeLength); if (!NewObject) { return (AE_NO_MEMORY); } UnicodeBuffer = ACPI_CAST_PTR (UINT16, NewObject->Buffer.Pointer); /* Convert ASCII to Unicode */ for (i = 0; i < OriginalObject->String.Length; i++) { UnicodeBuffer[i] = (UINT16) AsciiString[i]; } *ReturnObject = NewObject; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsConvertToResource * * PARAMETERS: Scope - Namespace node for the method/object * OriginalObject - Object to be converted * ReturnObject - Where the new converted object is returned * * RETURN: Status. AE_OK if conversion was successful * * DESCRIPTION: Attempt to convert a Integer object to a ResourceTemplate * Buffer. * ******************************************************************************/ ACPI_STATUS AcpiNsConvertToResource ( ACPI_NAMESPACE_NODE *Scope, ACPI_OPERAND_OBJECT *OriginalObject, ACPI_OPERAND_OBJECT **ReturnObject) { ACPI_OPERAND_OBJECT *NewObject; UINT8 *Buffer; /* * We can fix the following cases for an expected resource template: * 1. No return value (interpreter slack mode is disabled) * 2. A "Return (Zero)" statement * 3. A "Return empty buffer" statement * * We will return a buffer containing a single EndTag * resource descriptor. */ if (OriginalObject) { switch (OriginalObject->Common.Type) { case ACPI_TYPE_INTEGER: /* We can only repair an Integer==0 */ if (OriginalObject->Integer.Value) { return (AE_AML_OPERAND_TYPE); } break; case ACPI_TYPE_BUFFER: if (OriginalObject->Buffer.Length) { /* Additional checks can be added in the future */ *ReturnObject = NULL; return (AE_OK); } break; case ACPI_TYPE_STRING: default: return (AE_AML_OPERAND_TYPE); } } /* Create the new buffer object for the resource descriptor */ NewObject = AcpiUtCreateBufferObject (2); if (!NewObject) { return (AE_NO_MEMORY); } Buffer = ACPI_CAST_PTR (UINT8, NewObject->Buffer.Pointer); /* Initialize the Buffer with a single EndTag descriptor */ Buffer[0] = (ACPI_RESOURCE_NAME_END_TAG | ASL_RDESC_END_TAG_SIZE); Buffer[1] = 0x00; *ReturnObject = NewObject; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsConvertToReference * * PARAMETERS: Scope - Namespace node for the method/object * OriginalObject - Object to be converted * ReturnObject - Where the new converted object is returned * * RETURN: Status. AE_OK if conversion was successful * * DESCRIPTION: Attempt to convert a Integer object to a ObjectReference. * Buffer. * ******************************************************************************/ ACPI_STATUS AcpiNsConvertToReference ( ACPI_NAMESPACE_NODE *Scope, ACPI_OPERAND_OBJECT *OriginalObject, ACPI_OPERAND_OBJECT **ReturnObject) { ACPI_OPERAND_OBJECT *NewObject = NULL; ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_GENERIC_STATE ScopeInfo; char *Name; ACPI_FUNCTION_NAME (NsConvertToReference); /* Convert path into internal presentation */ Status = AcpiNsInternalizeName (OriginalObject->String.Pointer, &Name); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Find the namespace node */ ScopeInfo.Scope.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Scope); Status = AcpiNsLookup (&ScopeInfo, Name, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node); if (ACPI_FAILURE (Status)) { /* Check if we are resolving a named reference within a package */ ACPI_ERROR_NAMESPACE (&ScopeInfo, OriginalObject->String.Pointer, Status); goto ErrorExit; } /* Create and init a new internal ACPI object */ NewObject = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_REFERENCE); if (!NewObject) { Status = AE_NO_MEMORY; goto ErrorExit; } NewObject->Reference.Node = Node; NewObject->Reference.Object = Node->Object; NewObject->Reference.Class = ACPI_REFCLASS_NAME; /* * Increase reference of the object if needed (the object is likely a * null for device nodes). */ AcpiUtAddReference (Node->Object); ErrorExit: ACPI_FREE (Name); *ReturnObject = NewObject; return (Status); } src/acpica/source/components/namespace/nsdump.c000066400000000000000000000775701465205512700222070ustar00rootroot00000000000000/****************************************************************************** * * Module Name: nsdump - table dumping routines for debug * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acoutput.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsdump") /* Local prototypes */ #ifdef ACPI_OBSOLETE_FUNCTIONS void AcpiNsDumpRootDevices ( void); static ACPI_STATUS AcpiNsDumpOneDevice ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); #endif #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) static ACPI_STATUS AcpiNsDumpOneObjectPath ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); static ACPI_STATUS AcpiNsGetMaxDepth ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); /******************************************************************************* * * FUNCTION: AcpiNsPrintPathname * * PARAMETERS: NumSegments - Number of ACPI name segments * Pathname - The compressed (internal) path * * RETURN: None * * DESCRIPTION: Print an object's full namespace pathname * ******************************************************************************/ void AcpiNsPrintPathname ( UINT32 NumSegments, const char *Pathname) { UINT32 i; ACPI_FUNCTION_NAME (NsPrintPathname); /* Check if debug output enabled */ if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_NAMES, ACPI_NAMESPACE)) { return; } /* Print the entire name */ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[")); while (NumSegments) { for (i = 0; i < 4; i++) { isprint ((int) Pathname[i]) ? AcpiOsPrintf ("%c", Pathname[i]) : AcpiOsPrintf ("?"); } Pathname += ACPI_NAMESEG_SIZE; NumSegments--; if (NumSegments) { AcpiOsPrintf ("."); } } AcpiOsPrintf ("]\n"); } #ifdef ACPI_OBSOLETE_FUNCTIONS /* Not used at this time, perhaps later */ /******************************************************************************* * * FUNCTION: AcpiNsDumpPathname * * PARAMETERS: Handle - Object * Msg - Prefix message * Level - Desired debug level * Component - Caller's component ID * * RETURN: None * * DESCRIPTION: Print an object's full namespace pathname * Manages allocation/freeing of a pathname buffer * ******************************************************************************/ void AcpiNsDumpPathname ( ACPI_HANDLE Handle, const char *Msg, UINT32 Level, UINT32 Component) { ACPI_FUNCTION_TRACE (NsDumpPathname); /* Do this only if the requested debug level and component are enabled */ if (!ACPI_IS_DEBUG_ENABLED (Level, Component)) { return_VOID; } /* Convert handle to a full pathname and print it (with supplied message) */ AcpiNsPrintNodePathname (Handle, Msg); AcpiOsPrintf ("\n"); return_VOID; } #endif /******************************************************************************* * * FUNCTION: AcpiNsDumpOneObject * * PARAMETERS: ObjHandle - Node to be dumped * Level - Nesting level of the handle * Context - Passed into WalkNamespace * ReturnValue - Not used * * RETURN: Status * * DESCRIPTION: Dump a single Node * This procedure is a UserFunction called by AcpiNsWalkNamespace. * ******************************************************************************/ ACPI_STATUS AcpiNsDumpOneObject ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_WALK_INFO *Info = (ACPI_WALK_INFO *) Context; ACPI_NAMESPACE_NODE *ThisNode; ACPI_OPERAND_OBJECT *ObjDesc = NULL; ACPI_OBJECT_TYPE ObjType; ACPI_OBJECT_TYPE Type; UINT32 BytesToDump; UINT32 DbgLevel; UINT32 i; ACPI_FUNCTION_NAME (NsDumpOneObject); /* Is output enabled? */ if (!(AcpiDbgLevel & Info->DebugLevel)) { return (AE_OK); } if (!ObjHandle) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Null object handle\n")); return (AE_OK); } ThisNode = AcpiNsValidateHandle (ObjHandle); if (!ThisNode) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Invalid object handle %p\n", ObjHandle)); return (AE_OK); } Type = ThisNode->Type; Info->Count++; /* Check if the owner matches */ if ((Info->OwnerId != ACPI_OWNER_ID_MAX) && (Info->OwnerId != ThisNode->OwnerId)) { return (AE_OK); } if (!(Info->DisplayType & ACPI_DISPLAY_SHORT)) { /* Indent the object according to the level */ AcpiOsPrintf ("%2d%*s", (UINT32) Level - 1, (int) Level * 2, " "); /* Check the node type and name */ if (Type > ACPI_TYPE_LOCAL_MAX) { ACPI_WARNING ((AE_INFO, "Invalid ACPI Object Type 0x%08X", Type)); } AcpiOsPrintf ("%4.4s", AcpiUtGetNodeName (ThisNode)); } /* Now we can print out the pertinent information */ AcpiOsPrintf (" %-12s %p %3.3X ", AcpiUtGetTypeName (Type), ThisNode, ThisNode->OwnerId); DbgLevel = AcpiDbgLevel; AcpiDbgLevel = 0; ObjDesc = AcpiNsGetAttachedObject (ThisNode); AcpiDbgLevel = DbgLevel; /* Temp nodes are those nodes created by a control method */ if (ThisNode->Flags & ANOBJ_TEMPORARY) { AcpiOsPrintf ("(T) "); } switch (Info->DisplayType & ACPI_DISPLAY_MASK) { case ACPI_DISPLAY_SUMMARY: if (!ObjDesc) { /* No attached object. Some types should always have an object */ switch (Type) { case ACPI_TYPE_INTEGER: case ACPI_TYPE_PACKAGE: case ACPI_TYPE_BUFFER: case ACPI_TYPE_STRING: case ACPI_TYPE_METHOD: AcpiOsPrintf (""); break; default: break; } AcpiOsPrintf ("\n"); return (AE_OK); } switch (Type) { case ACPI_TYPE_PROCESSOR: AcpiOsPrintf ("ID %02X Len %02X Addr %8.8X%8.8X\n", ObjDesc->Processor.ProcId, ObjDesc->Processor.Length, ACPI_FORMAT_UINT64 (ObjDesc->Processor.Address)); break; case ACPI_TYPE_DEVICE: AcpiOsPrintf ("Notify Object: %p\n", ObjDesc); break; case ACPI_TYPE_METHOD: AcpiOsPrintf ("Args %X Len %.4X Aml %p\n", (UINT32) ObjDesc->Method.ParamCount, ObjDesc->Method.AmlLength, ObjDesc->Method.AmlStart); break; case ACPI_TYPE_INTEGER: AcpiOsPrintf ("= %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); break; case ACPI_TYPE_PACKAGE: if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) { AcpiOsPrintf ("Elements %.2X\n", ObjDesc->Package.Count); } else { AcpiOsPrintf ("[Length not yet evaluated]\n"); } break; case ACPI_TYPE_BUFFER: if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) { AcpiOsPrintf ("Len %.2X", ObjDesc->Buffer.Length); /* Dump some of the buffer */ if (ObjDesc->Buffer.Length > 0) { AcpiOsPrintf (" ="); for (i = 0; (i < ObjDesc->Buffer.Length && i < 12); i++) { AcpiOsPrintf (" %2.2X", ObjDesc->Buffer.Pointer[i]); } } AcpiOsPrintf ("\n"); } else { AcpiOsPrintf ("[Length not yet evaluated]\n"); } break; case ACPI_TYPE_STRING: AcpiOsPrintf ("Len %.2X ", ObjDesc->String.Length); AcpiUtPrintString (ObjDesc->String.Pointer, 80); AcpiOsPrintf ("\n"); break; case ACPI_TYPE_REGION: AcpiOsPrintf ("[%s]", AcpiUtGetRegionName (ObjDesc->Region.SpaceId)); if (ObjDesc->Region.Flags & AOPOBJ_DATA_VALID) { AcpiOsPrintf (" Addr %8.8X%8.8X Len %.4X\n", ACPI_FORMAT_UINT64 (ObjDesc->Region.Address), ObjDesc->Region.Length); } else { AcpiOsPrintf (" [Address/Length not yet evaluated]\n"); } break; case ACPI_TYPE_LOCAL_REFERENCE: AcpiOsPrintf ("[%s]\n", AcpiUtGetReferenceName (ObjDesc)); break; case ACPI_TYPE_BUFFER_FIELD: if (ObjDesc->BufferField.BufferObj && ObjDesc->BufferField.BufferObj->Buffer.Node) { AcpiOsPrintf ("Buf [%4.4s]", AcpiUtGetNodeName ( ObjDesc->BufferField.BufferObj->Buffer.Node)); } break; case ACPI_TYPE_LOCAL_REGION_FIELD: AcpiOsPrintf ("Rgn [%4.4s]", AcpiUtGetNodeName ( ObjDesc->CommonField.RegionObj->Region.Node)); break; case ACPI_TYPE_LOCAL_BANK_FIELD: AcpiOsPrintf ("Rgn [%4.4s] Bnk [%4.4s]", AcpiUtGetNodeName ( ObjDesc->CommonField.RegionObj->Region.Node), AcpiUtGetNodeName ( ObjDesc->BankField.BankObj->CommonField.Node)); break; case ACPI_TYPE_LOCAL_INDEX_FIELD: AcpiOsPrintf ("Idx [%4.4s] Dat [%4.4s]", AcpiUtGetNodeName ( ObjDesc->IndexField.IndexObj->CommonField.Node), AcpiUtGetNodeName ( ObjDesc->IndexField.DataObj->CommonField.Node)); break; case ACPI_TYPE_LOCAL_ALIAS: case ACPI_TYPE_LOCAL_METHOD_ALIAS: AcpiOsPrintf ("Target %4.4s (%p)\n", AcpiUtGetNodeName (ObjDesc), ObjDesc); break; default: AcpiOsPrintf ("Object %p\n", ObjDesc); break; } /* Common field handling */ switch (Type) { case ACPI_TYPE_BUFFER_FIELD: case ACPI_TYPE_LOCAL_REGION_FIELD: case ACPI_TYPE_LOCAL_BANK_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD: AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2X\n", (ObjDesc->CommonField.BaseByteOffset * 8) + ObjDesc->CommonField.StartFieldBitOffset, ObjDesc->CommonField.BitLength, ObjDesc->CommonField.AccessByteWidth); break; default: break; } break; case ACPI_DISPLAY_OBJECTS: AcpiOsPrintf ("O:%p", ObjDesc); if (!ObjDesc) { /* No attached object, we are done */ AcpiOsPrintf ("\n"); return (AE_OK); } AcpiOsPrintf ("(R%u)", ObjDesc->Common.ReferenceCount); switch (Type) { case ACPI_TYPE_METHOD: /* Name is a Method and its AML offset/length are set */ AcpiOsPrintf (" M:%p-%X\n", ObjDesc->Method.AmlStart, ObjDesc->Method.AmlLength); break; case ACPI_TYPE_INTEGER: AcpiOsPrintf (" I:%8.8X8.8%X\n", ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); break; case ACPI_TYPE_STRING: AcpiOsPrintf (" S:%p-%X\n", ObjDesc->String.Pointer, ObjDesc->String.Length); break; case ACPI_TYPE_BUFFER: AcpiOsPrintf (" B:%p-%X\n", ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length); break; default: AcpiOsPrintf ("\n"); break; } break; default: AcpiOsPrintf ("\n"); break; } /* If debug turned off, done */ if (!(AcpiDbgLevel & ACPI_LV_VALUES)) { return (AE_OK); } /* If there is an attached object, display it */ DbgLevel = AcpiDbgLevel; AcpiDbgLevel = 0; ObjDesc = AcpiNsGetAttachedObject (ThisNode); AcpiDbgLevel = DbgLevel; /* Dump attached objects */ while (ObjDesc) { ObjType = ACPI_TYPE_INVALID; AcpiOsPrintf ("Attached Object %p: ", ObjDesc); /* Decode the type of attached object and dump the contents */ switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) { case ACPI_DESC_TYPE_NAMED: AcpiOsPrintf ("(Ptr to Node)\n"); BytesToDump = sizeof (ACPI_NAMESPACE_NODE); ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); break; case ACPI_DESC_TYPE_OPERAND: ObjType = ObjDesc->Common.Type; if (ObjType > ACPI_TYPE_LOCAL_MAX) { AcpiOsPrintf ( "(Pointer to ACPI Object type %.2X [UNKNOWN])\n", ObjType); BytesToDump = 32; } else { AcpiOsPrintf ( "(Pointer to ACPI Object type %.2X [%s])\n", ObjType, AcpiUtGetTypeName (ObjType)); BytesToDump = sizeof (ACPI_OPERAND_OBJECT); } ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); break; default: break; } /* If value is NOT an internal object, we are done */ if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) { goto Cleanup; } /* Valid object, get the pointer to next level, if any */ switch (ObjType) { case ACPI_TYPE_BUFFER: case ACPI_TYPE_STRING: /* * NOTE: takes advantage of common fields between string/buffer */ BytesToDump = ObjDesc->String.Length; ObjDesc = (void *) ObjDesc->String.Pointer; AcpiOsPrintf ("(Buffer/String pointer %p length %X)\n", ObjDesc, BytesToDump); ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); goto Cleanup; case ACPI_TYPE_BUFFER_FIELD: ObjDesc = (ACPI_OPERAND_OBJECT *) ObjDesc->BufferField.BufferObj; break; case ACPI_TYPE_PACKAGE: ObjDesc = (void *) ObjDesc->Package.Elements; break; case ACPI_TYPE_METHOD: ObjDesc = (void *) ObjDesc->Method.AmlStart; break; case ACPI_TYPE_LOCAL_REGION_FIELD: ObjDesc = (void *) ObjDesc->Field.RegionObj; break; case ACPI_TYPE_LOCAL_BANK_FIELD: ObjDesc = (void *) ObjDesc->BankField.RegionObj; break; case ACPI_TYPE_LOCAL_INDEX_FIELD: ObjDesc = (void *) ObjDesc->IndexField.IndexObj; break; default: goto Cleanup; } } Cleanup: AcpiOsPrintf ("\n"); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsDumpObjects * * PARAMETERS: Type - Object type to be dumped * DisplayType - 0 or ACPI_DISPLAY_SUMMARY * MaxDepth - Maximum depth of dump. Use ACPI_UINT32_MAX * for an effectively unlimited depth. * OwnerId - Dump only objects owned by this ID. Use * ACPI_UINT32_MAX to match all owners. * StartHandle - Where in namespace to start/end search * * RETURN: None * * DESCRIPTION: Dump typed objects within the loaded namespace. Uses * AcpiNsWalkNamespace in conjunction with AcpiNsDumpOneObject. * ******************************************************************************/ void AcpiNsDumpObjects ( ACPI_OBJECT_TYPE Type, UINT8 DisplayType, UINT32 MaxDepth, ACPI_OWNER_ID OwnerId, ACPI_HANDLE StartHandle) { ACPI_WALK_INFO Info; ACPI_STATUS Status; ACPI_FUNCTION_ENTRY (); /* * Just lock the entire namespace for the duration of the dump. * We don't want any changes to the namespace during this time, * especially the temporary nodes since we are going to display * them also. */ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not acquire namespace mutex\n"); return; } Info.Count = 0; Info.DebugLevel = ACPI_LV_TABLES; Info.OwnerId = OwnerId; Info.DisplayType = DisplayType; (void) AcpiNsWalkNamespace (Type, StartHandle, MaxDepth, ACPI_NS_WALK_NO_UNLOCK | ACPI_NS_WALK_TEMP_NODES, AcpiNsDumpOneObject, NULL, (void *) &Info, NULL); AcpiOsPrintf ("\nNamespace node count: %u\n\n", Info.Count); (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); } /******************************************************************************* * * FUNCTION: AcpiNsDumpOneObjectPath, AcpiNsGetMaxDepth * * PARAMETERS: ObjHandle - Node to be dumped * Level - Nesting level of the handle * Context - Passed into WalkNamespace * ReturnValue - Not used * * RETURN: Status * * DESCRIPTION: Dump the full pathname to a namespace object. AcpNsGetMaxDepth * computes the maximum nesting depth in the namespace tree, in * order to simplify formatting in AcpiNsDumpOneObjectPath. * These procedures are UserFunctions called by AcpiNsWalkNamespace. * ******************************************************************************/ static ACPI_STATUS AcpiNsDumpOneObjectPath ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { UINT32 MaxLevel = *((UINT32 *) Context); char *Pathname; ACPI_NAMESPACE_NODE *Node; int PathIndent; if (!ObjHandle) { return (AE_OK); } Node = AcpiNsValidateHandle (ObjHandle); if (!Node) { /* Ignore bad node during namespace walk */ return (AE_OK); } Pathname = AcpiNsGetNormalizedPathname (Node, TRUE); PathIndent = 1; if (Level <= MaxLevel) { PathIndent = MaxLevel - Level + 1; } AcpiOsPrintf ("%2d%*s%-12s%*s", Level, Level, " ", AcpiUtGetTypeName (Node->Type), PathIndent, " "); AcpiOsPrintf ("%s\n", &Pathname[1]); ACPI_FREE (Pathname); return (AE_OK); } static ACPI_STATUS AcpiNsGetMaxDepth ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { UINT32 *MaxLevel = (UINT32 *) Context; if (Level > *MaxLevel) { *MaxLevel = Level; } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsDumpObjectPaths * * PARAMETERS: Type - Object type to be dumped * DisplayType - 0 or ACPI_DISPLAY_SUMMARY * MaxDepth - Maximum depth of dump. Use ACPI_UINT32_MAX * for an effectively unlimited depth. * OwnerId - Dump only objects owned by this ID. Use * ACPI_UINT32_MAX to match all owners. * StartHandle - Where in namespace to start/end search * * RETURN: None * * DESCRIPTION: Dump full object pathnames within the loaded namespace. Uses * AcpiNsWalkNamespace in conjunction with AcpiNsDumpOneObjectPath. * ******************************************************************************/ void AcpiNsDumpObjectPaths ( ACPI_OBJECT_TYPE Type, UINT8 DisplayType, UINT32 MaxDepth, ACPI_OWNER_ID OwnerId, ACPI_HANDLE StartHandle) { ACPI_STATUS Status; UINT32 MaxLevel = 0; ACPI_FUNCTION_ENTRY (); /* * Just lock the entire namespace for the duration of the dump. * We don't want any changes to the namespace during this time, * especially the temporary nodes since we are going to display * them also. */ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not acquire namespace mutex\n"); return; } /* Get the max depth of the namespace tree, for formatting later */ (void) AcpiNsWalkNamespace (Type, StartHandle, MaxDepth, ACPI_NS_WALK_NO_UNLOCK | ACPI_NS_WALK_TEMP_NODES, AcpiNsGetMaxDepth, NULL, (void *) &MaxLevel, NULL); /* Now dump the entire namespace */ (void) AcpiNsWalkNamespace (Type, StartHandle, MaxDepth, ACPI_NS_WALK_NO_UNLOCK | ACPI_NS_WALK_TEMP_NODES, AcpiNsDumpOneObjectPath, NULL, (void *) &MaxLevel, NULL); (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); } /******************************************************************************* * * FUNCTION: AcpiNsDumpEntry * * PARAMETERS: Handle - Node to be dumped * DebugLevel - Output level * * RETURN: None * * DESCRIPTION: Dump a single Node * ******************************************************************************/ void AcpiNsDumpEntry ( ACPI_HANDLE Handle, UINT32 DebugLevel) { ACPI_WALK_INFO Info; ACPI_FUNCTION_ENTRY (); Info.DebugLevel = DebugLevel; Info.OwnerId = ACPI_OWNER_ID_MAX; Info.DisplayType = ACPI_DISPLAY_SUMMARY; (void) AcpiNsDumpOneObject (Handle, 1, &Info, NULL); } #ifdef ACPI_ASL_COMPILER /******************************************************************************* * * FUNCTION: AcpiNsDumpTables * * PARAMETERS: SearchBase - Root of subtree to be dumped, or * NS_ALL to dump the entire namespace * MaxDepth - Maximum depth of dump. Use INT_MAX * for an effectively unlimited depth. * * RETURN: None * * DESCRIPTION: Dump the name space, or a portion of it. * ******************************************************************************/ void AcpiNsDumpTables ( ACPI_HANDLE SearchBase, UINT32 MaxDepth) { ACPI_HANDLE SearchHandle = SearchBase; ACPI_FUNCTION_TRACE (NsDumpTables); if (!AcpiGbl_RootNode) { /* * If the name space has not been initialized, * there is nothing to dump. */ ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "namespace not initialized!\n")); return_VOID; } if (ACPI_NS_ALL == SearchBase) { /* Entire namespace */ SearchHandle = AcpiGbl_RootNode; ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "\\\n")); } AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, MaxDepth, ACPI_OWNER_ID_MAX, SearchHandle); return_VOID; } #endif #endif src/acpica/source/components/namespace/nsdumpdv.c000066400000000000000000000257251465205512700225340ustar00rootroot00000000000000/****************************************************************************** * * Module Name: nsdump - table dumping routines for debug * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" /* TBD: This entire module is apparently obsolete and should be removed */ #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsdumpdv") #ifdef ACPI_OBSOLETE_FUNCTIONS #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) #include "acnamesp.h" /******************************************************************************* * * FUNCTION: AcpiNsDumpOneDevice * * PARAMETERS: Handle - Node to be dumped * Level - Nesting level of the handle * Context - Passed into WalkNamespace * ReturnValue - Not used * * RETURN: Status * * DESCRIPTION: Dump a single Node that represents a device * This procedure is a UserFunction called by AcpiNsWalkNamespace. * ******************************************************************************/ static ACPI_STATUS AcpiNsDumpOneDevice ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_BUFFER Buffer; ACPI_DEVICE_INFO *Info; ACPI_STATUS Status; UINT32 i; ACPI_FUNCTION_NAME (NsDumpOneDevice); Status = AcpiNsDumpOneObject (ObjHandle, Level, Context, ReturnValue); Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiGetObjectInfo (ObjHandle, &Buffer); if (ACPI_SUCCESS (Status)) { Info = Buffer.Pointer; for (i = 0; i < Level; i++) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " ")); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " HID: %s, ADR: %8.8X%8.8X\n", Info->HardwareId.Value, ACPI_FORMAT_UINT64 (Info->Address))); ACPI_FREE (Info); } return (Status); } /******************************************************************************* * * FUNCTION: AcpiNsDumpRootDevices * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Dump all objects of type "device" * ******************************************************************************/ void AcpiNsDumpRootDevices ( void) { ACPI_HANDLE SysBusHandle; ACPI_STATUS Status; ACPI_FUNCTION_NAME (NsDumpRootDevices); /* Only dump the table if tracing is enabled */ if (!(ACPI_LV_TABLES & AcpiDbgLevel)) { return; } Status = AcpiGetHandle (NULL, METHOD_NAME__SB_, &SysBusHandle); if (ACPI_FAILURE (Status)) { return; } ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Display of all devices in the namespace:\n")); Status = AcpiNsWalkNamespace (ACPI_TYPE_DEVICE, SysBusHandle, ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, AcpiNsDumpOneDevice, NULL, NULL, NULL); } #endif #endif src/acpica/source/components/namespace/nseval.c000066400000000000000000000434131465205512700221560ustar00rootroot00000000000000/******************************************************************************* * * Module Name: nseval - Object evaluation, includes control method execution * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "acinterp.h" #include "acnamesp.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nseval") /******************************************************************************* * * FUNCTION: AcpiNsEvaluate * * PARAMETERS: Info - Evaluation info block, contains these fields * and more: * PrefixNode - Prefix or Method/Object Node to execute * RelativePath - Name of method to execute, If NULL, the * Node is the object to execute * Parameters - List of parameters to pass to the method, * terminated by NULL. Params itself may be * NULL if no parameters are being passed. * ParameterType - Type of Parameter list * ReturnObject - Where to put method's return value (if * any). If NULL, no value is returned. * Flags - ACPI_IGNORE_RETURN_VALUE to delete return * * RETURN: Status * * DESCRIPTION: Execute a control method or return the current value of an * ACPI namespace object. * * MUTEX: Locks interpreter * ******************************************************************************/ ACPI_STATUS AcpiNsEvaluate ( ACPI_EVALUATE_INFO *Info) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (NsEvaluate); if (!Info) { return_ACPI_STATUS (AE_BAD_PARAMETER); } if (!Info->Node) { /* * Get the actual namespace node for the target object if we * need to. Handles these cases: * * 1) Null node, valid pathname from root (absolute path) * 2) Node and valid pathname (path relative to Node) * 3) Node, Null pathname */ Status = AcpiNsGetNode (Info->PrefixNode, Info->RelativePathname, ACPI_NS_NO_UPSEARCH, &Info->Node); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } /* * For a method alias, we must grab the actual method node so that * proper scoping context will be established before execution. */ if (AcpiNsGetType (Info->Node) == ACPI_TYPE_LOCAL_METHOD_ALIAS) { Info->Node = ACPI_CAST_PTR ( ACPI_NAMESPACE_NODE, Info->Node->Object); } /* Complete the info block initialization */ Info->ReturnObject = NULL; Info->NodeFlags = Info->Node->Flags; Info->ObjDesc = AcpiNsGetAttachedObject (Info->Node); ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s [%p] Value %p\n", Info->RelativePathname, Info->Node, AcpiNsGetAttachedObject (Info->Node))); /* Get info if we have a predefined name (_HID, etc.) */ Info->Predefined = AcpiUtMatchPredefinedMethod (Info->Node->Name.Ascii); /* Get the full pathname to the object, for use in warning messages */ Info->FullPathname = AcpiNsGetNormalizedPathname (Info->Node, TRUE); if (!Info->FullPathname) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Optional object evaluation log */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION, "%-26s: %s (%s)\n", " Enter evaluation", &Info->FullPathname[1], AcpiUtGetTypeName (Info->Node->Type))); /* Count the number of arguments being passed in */ Info->ParamCount = 0; if (Info->Parameters) { while (Info->Parameters[Info->ParamCount]) { Info->ParamCount++; } /* Warn on impossible argument count */ if (Info->ParamCount > ACPI_METHOD_NUM_ARGS) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, ACPI_WARN_ALWAYS, "Excess arguments (%u) - using only %u", Info->ParamCount, ACPI_METHOD_NUM_ARGS)); Info->ParamCount = ACPI_METHOD_NUM_ARGS; } } /* * For predefined names: Check that the declared argument count * matches the ACPI spec -- otherwise this is a BIOS error. */ AcpiNsCheckAcpiCompliance (Info->FullPathname, Info->Node, Info->Predefined); /* * For all names: Check that the incoming argument count for * this method/object matches the actual ASL/AML definition. */ AcpiNsCheckArgumentCount (Info->FullPathname, Info->Node, Info->ParamCount, Info->Predefined); /* For predefined names: Typecheck all incoming arguments */ AcpiNsCheckArgumentTypes (Info); /* * Three major evaluation cases: * * 1) Object types that cannot be evaluated by definition * 2) The object is a control method -- execute it * 3) The object is not a method -- just return it's current value */ switch (AcpiNsGetType (Info->Node)) { case ACPI_TYPE_ANY: case ACPI_TYPE_DEVICE: case ACPI_TYPE_EVENT: case ACPI_TYPE_MUTEX: case ACPI_TYPE_REGION: case ACPI_TYPE_THERMAL: case ACPI_TYPE_LOCAL_SCOPE: /* * 1) Disallow evaluation of these object types. For these, * object evaluation is undefined. */ ACPI_ERROR ((AE_INFO, "%s: This object type [%s] " "never contains data and cannot be evaluated", Info->FullPathname, AcpiUtGetTypeName (Info->Node->Type))); Status = AE_TYPE; goto Cleanup; case ACPI_TYPE_METHOD: /* * 2) Object is a control method - execute it */ /* Verify that there is a method object associated with this node */ if (!Info->ObjDesc) { ACPI_ERROR ((AE_INFO, "%s: Method has no attached sub-object", Info->FullPathname)); Status = AE_NULL_OBJECT; goto Cleanup; } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "**** Execute method [%s] at AML address %p length %X\n", Info->FullPathname, Info->ObjDesc->Method.AmlStart + 1, Info->ObjDesc->Method.AmlLength - 1)); /* * Any namespace deletion must acquire both the namespace and * interpreter locks to ensure that no thread is using the portion of * the namespace that is being deleted. * * Execute the method via the interpreter. The interpreter is locked * here before calling into the AML parser */ AcpiExEnterInterpreter (); Status = AcpiPsExecuteMethod (Info); AcpiExExitInterpreter (); break; default: /* * 3) All other non-method objects -- get the current object value */ /* * Some objects require additional resolution steps (e.g., the Node * may be a field that must be read, etc.) -- we can't just grab * the object out of the node. * * Use ResolveNodeToValue() to get the associated value. * * NOTE: we can get away with passing in NULL for a walk state because * the Node is guaranteed to not be a reference to either a method * local or a method argument (because this interface is never called * from a running method.) * * Even though we do not directly invoke the interpreter for object * resolution, we must lock it because we could access an OpRegion. * The OpRegion access code assumes that the interpreter is locked. */ AcpiExEnterInterpreter (); /* TBD: ResolveNodeToValue has a strange interface, fix */ Info->ReturnObject = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Info->Node); Status = AcpiExResolveNodeToValue (ACPI_CAST_INDIRECT_PTR ( ACPI_NAMESPACE_NODE, &Info->ReturnObject), NULL); AcpiExExitInterpreter (); if (ACPI_FAILURE (Status)) { Info->ReturnObject = NULL; goto Cleanup; } ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Returned object %p [%s]\n", Info->ReturnObject, AcpiUtGetObjectTypeName (Info->ReturnObject))); Status = AE_CTRL_RETURN_VALUE; /* Always has a "return value" */ break; } /* * For predefined names, check the return value against the ACPI * specification. Some incorrect return value types are repaired. */ (void) AcpiNsCheckReturnValue (Info->Node, Info, Info->ParamCount, Status, &Info->ReturnObject); /* Check if there is a return value that must be dealt with */ if (Status == AE_CTRL_RETURN_VALUE) { /* If caller does not want the return value, delete it */ if (Info->Flags & ACPI_IGNORE_RETURN_VALUE) { AcpiUtRemoveReference (Info->ReturnObject); Info->ReturnObject = NULL; } /* Map AE_CTRL_RETURN_VALUE to AE_OK, we are done with it */ Status = AE_OK; } else if (ACPI_FAILURE(Status)) { /* If ReturnObject exists, delete it */ if (Info->ReturnObject) { AcpiUtRemoveReference (Info->ReturnObject); Info->ReturnObject = NULL; } } ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "*** Completed evaluation of object %s ***\n", Info->RelativePathname)); Cleanup: /* Optional object evaluation log */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION, "%-26s: %s\n", " Exit evaluation", &Info->FullPathname[1])); /* * Namespace was unlocked by the handling AcpiNs* function, so we * just free the pathname and return */ ACPI_FREE (Info->FullPathname); Info->FullPathname = NULL; return_ACPI_STATUS (Status); } src/acpica/source/components/namespace/nsinit.c000066400000000000000000000716071465205512700222000ustar00rootroot00000000000000/****************************************************************************** * * Module Name: nsinit - namespace initialization * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acdispat.h" #include "acinterp.h" #include "acevents.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsinit") /* Local prototypes */ static ACPI_STATUS AcpiNsInitOneObject ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); static ACPI_STATUS AcpiNsInitOneDevice ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); static ACPI_STATUS AcpiNsFindIniMethods ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); /******************************************************************************* * * FUNCTION: AcpiNsInitializeObjects * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Walk the entire namespace and perform any necessary * initialization on the objects found therein * ******************************************************************************/ ACPI_STATUS AcpiNsInitializeObjects ( void) { ACPI_STATUS Status; ACPI_INIT_WALK_INFO Info; ACPI_FUNCTION_TRACE (NsInitializeObjects); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Completing Initialization of ACPI Objects\n")); ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "**** Starting initialization of namespace objects ****\n")); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "Final data object initialization: ")); /* Clear the info block */ memset (&Info, 0, sizeof (ACPI_INIT_WALK_INFO)); /* Walk entire namespace from the supplied root */ /* * TBD: will become ACPI_TYPE_PACKAGE as this type object * is now the only one that supports deferred initialization * (forward references). */ Status = AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiNsInitOneObject, NULL, &Info, NULL); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "During WalkNamespace")); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "Namespace contains %u (0x%X) objects\n", Info.ObjectCount, Info.ObjectCount)); ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "%u Control Methods found\n%u Op Regions found\n", Info.MethodCount, Info.OpRegionCount)); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsInitializeDevices * * PARAMETERS: None * * RETURN: ACPI_STATUS * * DESCRIPTION: Walk the entire namespace and initialize all ACPI devices. * This means running _INI on all present devices. * * Note: We install PCI config space handler on region access, * not here. * ******************************************************************************/ ACPI_STATUS AcpiNsInitializeDevices ( UINT32 Flags) { ACPI_STATUS Status = AE_OK; ACPI_DEVICE_WALK_INFO Info; ACPI_HANDLE Handle; ACPI_FUNCTION_TRACE (NsInitializeDevices); if (!(Flags & ACPI_NO_DEVICE_INIT)) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Initializing ACPI Devices\n")); /* Init counters */ Info.DeviceCount = 0; Info.Num_STA = 0; Info.Num_INI = 0; ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "Initializing Device/Processor/Thermal objects " "and executing _INI/_STA methods:\n")); /* Tree analysis: find all subtrees that contain _INI methods */ Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, FALSE, AcpiNsFindIniMethods, NULL, &Info, NULL); if (ACPI_FAILURE (Status)) { goto ErrorExit; } /* Allocate the evaluation information block */ Info.EvaluateInfo = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); if (!Info.EvaluateInfo) { Status = AE_NO_MEMORY; goto ErrorExit; } /* * Execute the "global" _INI method that may appear at the root. * This support is provided for Windows compatibility (Vista+) and * is not part of the ACPI specification. */ Info.EvaluateInfo->PrefixNode = AcpiGbl_RootNode; Info.EvaluateInfo->RelativePathname = METHOD_NAME__INI; Info.EvaluateInfo->Parameters = NULL; Info.EvaluateInfo->Flags = ACPI_IGNORE_RETURN_VALUE; Status = AcpiNsEvaluate (Info.EvaluateInfo); if (ACPI_SUCCESS (Status)) { Info.Num_INI++; } /* * Execute \_SB._INI. * There appears to be a strict order requirement for \_SB._INI, * which should be evaluated before any _REG evaluations. */ Status = AcpiGetHandle (NULL, "\\_SB", &Handle); if (ACPI_SUCCESS (Status)) { memset (Info.EvaluateInfo, 0, sizeof (ACPI_EVALUATE_INFO)); Info.EvaluateInfo->PrefixNode = Handle; Info.EvaluateInfo->RelativePathname = METHOD_NAME__INI; Info.EvaluateInfo->Parameters = NULL; Info.EvaluateInfo->Flags = ACPI_IGNORE_RETURN_VALUE; Status = AcpiNsEvaluate (Info.EvaluateInfo); if (ACPI_SUCCESS (Status)) { Info.Num_INI++; } } } /* * Run all _REG methods * * Note: Any objects accessed by the _REG methods will be automatically * initialized, even if they contain executable AML (see the call to * AcpiNsInitializeObjects below). * * Note: According to the ACPI specification, we actually needn't execute * _REG for SystemMemory/SystemIo operation regions, but for PCI_Config * operation regions, it is required to evaluate _REG for those on a PCI * root bus that doesn't contain _BBN object. So this code is kept here * in order not to break things. */ if (!(Flags & ACPI_NO_ADDRESS_SPACE_INIT)) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Executing _REG OpRegion methods\n")); Status = AcpiEvInitializeOpRegions (); if (ACPI_FAILURE (Status)) { goto ErrorExit; } } if (!(Flags & ACPI_NO_DEVICE_INIT)) { /* Walk namespace to execute all _INIs on present devices */ Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, FALSE, AcpiNsInitOneDevice, NULL, &Info, NULL); /* * Any _OSI requests should be completed by now. If the BIOS has * requested any Windows OSI strings, we will always truncate * I/O addresses to 16 bits -- for Windows compatibility. */ if (AcpiGbl_OsiData >= ACPI_OSI_WIN_2000) { AcpiGbl_TruncateIoAddresses = TRUE; } ACPI_FREE (Info.EvaluateInfo); if (ACPI_FAILURE (Status)) { goto ErrorExit; } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, " Executed %u _INI methods requiring %u _STA executions " "(examined %u objects)\n", Info.Num_INI, Info.Num_STA, Info.DeviceCount)); } return_ACPI_STATUS (Status); ErrorExit: ACPI_EXCEPTION ((AE_INFO, Status, "During device initialization")); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiNsInitOnePackage * * PARAMETERS: ObjHandle - Node * Level - Current nesting level * Context - Not used * ReturnValue - Not used * * RETURN: Status * * DESCRIPTION: Callback from AcpiWalkNamespace. Invoked for every package * within the namespace. Used during dynamic load of an SSDT. * ******************************************************************************/ ACPI_STATUS AcpiNsInitOnePackage ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { return (AE_OK); } /* Exit if package is already initialized */ if (ObjDesc->Package.Flags & AOPOBJ_DATA_VALID) { return (AE_OK); } Status = AcpiDsGetPackageArguments (ObjDesc); if (ACPI_FAILURE (Status)) { return (AE_OK); } Status = AcpiUtWalkPackageTree (ObjDesc, NULL, AcpiDsInitPackageElement, NULL); if (ACPI_FAILURE (Status)) { return (AE_OK); } ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsInitOneObject * * PARAMETERS: ObjHandle - Node * Level - Current nesting level * Context - Points to a init info struct * ReturnValue - Not used * * RETURN: Status * * DESCRIPTION: Callback from AcpiWalkNamespace. Invoked for every object * within the namespace. * * Currently, the only objects that require initialization are: * 1) Methods * 2) Op Regions * ******************************************************************************/ static ACPI_STATUS AcpiNsInitOneObject ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_OBJECT_TYPE Type; ACPI_STATUS Status = AE_OK; ACPI_INIT_WALK_INFO *Info = (ACPI_INIT_WALK_INFO *) Context; ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_FUNCTION_NAME (NsInitOneObject); Info->ObjectCount++; /* And even then, we are only interested in a few object types */ Type = AcpiNsGetType (ObjHandle); ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { return (AE_OK); } /* Increment counters for object types we are looking for */ switch (Type) { case ACPI_TYPE_REGION: Info->OpRegionCount++; break; case ACPI_TYPE_BUFFER_FIELD: Info->FieldCount++; break; case ACPI_TYPE_LOCAL_BANK_FIELD: Info->FieldCount++; break; case ACPI_TYPE_BUFFER: Info->BufferCount++; break; case ACPI_TYPE_PACKAGE: Info->PackageCount++; break; default: /* No init required, just exit now */ return (AE_OK); } /* If the object is already initialized, nothing else to do */ if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) { return (AE_OK); } /* Must lock the interpreter before executing AML code */ AcpiExEnterInterpreter (); /* * Only initialization of Package objects can be deferred, in order * to support forward references. */ switch (Type) { case ACPI_TYPE_LOCAL_BANK_FIELD: /* TBD: BankFields do not require deferred init, remove this code */ Info->FieldInit++; Status = AcpiDsGetBankFieldArguments (ObjDesc); break; case ACPI_TYPE_PACKAGE: /* Complete the initialization/resolution of the package object */ Info->PackageInit++; Status = AcpiNsInitOnePackage (ObjHandle, Level, NULL, NULL); break; default: /* No other types should get here */ Status = AE_TYPE; ACPI_EXCEPTION ((AE_INFO, Status, "Opcode is not deferred [%4.4s] (%s)", AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Type))); break; } if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not execute arguments for [%4.4s] (%s)", AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Type))); } /* * We ignore errors from above, and always return OK, since we don't want * to abort the walk on any single error. */ AcpiExExitInterpreter (); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsFindIniMethods * * PARAMETERS: ACPI_WALK_CALLBACK * * RETURN: ACPI_STATUS * * DESCRIPTION: Called during namespace walk. Finds objects named _INI under * device/processor/thermal objects, and marks the entire subtree * with a SUBTREE_HAS_INI flag. This flag is used during the * subsequent device initialization walk to avoid entire subtrees * that do not contain an _INI. * ******************************************************************************/ static ACPI_STATUS AcpiNsFindIniMethods ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_DEVICE_WALK_INFO *Info = ACPI_CAST_PTR (ACPI_DEVICE_WALK_INFO, Context); ACPI_NAMESPACE_NODE *Node; ACPI_NAMESPACE_NODE *ParentNode; /* Keep count of device/processor/thermal objects */ Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle); if ((Node->Type == ACPI_TYPE_DEVICE) || (Node->Type == ACPI_TYPE_PROCESSOR) || (Node->Type == ACPI_TYPE_THERMAL)) { Info->DeviceCount++; return (AE_OK); } /* We are only looking for methods named _INI */ if (!ACPI_COMPARE_NAMESEG (Node->Name.Ascii, METHOD_NAME__INI)) { return (AE_OK); } /* * The only _INI methods that we care about are those that are * present under Device, Processor, and Thermal objects. */ ParentNode = Node->Parent; switch (ParentNode->Type) { case ACPI_TYPE_DEVICE: case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_THERMAL: /* Mark parent and bubble up the INI present flag to the root */ while (ParentNode) { ParentNode->Flags |= ANOBJ_SUBTREE_HAS_INI; ParentNode = ParentNode->Parent; } break; default: break; } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsInitOneDevice * * PARAMETERS: ACPI_WALK_CALLBACK * * RETURN: ACPI_STATUS * * DESCRIPTION: This is called once per device soon after ACPI is enabled * to initialize each device. It determines if the device is * present, and if so, calls _INI. * ******************************************************************************/ static ACPI_STATUS AcpiNsInitOneDevice ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_DEVICE_WALK_INFO *WalkInfo = ACPI_CAST_PTR (ACPI_DEVICE_WALK_INFO, Context); ACPI_EVALUATE_INFO *Info = WalkInfo->EvaluateInfo; UINT32 Flags; ACPI_STATUS Status; ACPI_NAMESPACE_NODE *DeviceNode; ACPI_FUNCTION_TRACE (NsInitOneDevice); /* We are interested in Devices, Processors and ThermalZones only */ DeviceNode = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle); if ((DeviceNode->Type != ACPI_TYPE_DEVICE) && (DeviceNode->Type != ACPI_TYPE_PROCESSOR) && (DeviceNode->Type != ACPI_TYPE_THERMAL)) { return_ACPI_STATUS (AE_OK); } /* * Because of an earlier namespace analysis, all subtrees that contain an * _INI method are tagged. * * If this device subtree does not contain any _INI methods, we * can exit now and stop traversing this entire subtree. */ if (!(DeviceNode->Flags & ANOBJ_SUBTREE_HAS_INI)) { return_ACPI_STATUS (AE_CTRL_DEPTH); } /* * Run _STA to determine if this device is present and functioning. We * must know this information for two important reasons (from ACPI spec): * * 1) We can only run _INI if the device is present. * 2) We must abort the device tree walk on this subtree if the device is * not present and is not functional (we will not examine the children) * * The _STA method is not required to be present under the device, we * assume the device is present if _STA does not exist. */ ACPI_DEBUG_EXEC (AcpiUtDisplayInitPathname ( ACPI_TYPE_METHOD, DeviceNode, METHOD_NAME__STA)); Status = AcpiUtExecute_STA (DeviceNode, &Flags); if (ACPI_FAILURE (Status)) { /* Ignore error and move on to next device */ return_ACPI_STATUS (AE_OK); } /* * Flags == -1 means that _STA was not found. In this case, we assume that * the device is both present and functional. * * From the ACPI spec, description of _STA: * * "If a device object (including the processor object) does not have an * _STA object, then OSPM assumes that all of the above bits are set (in * other words, the device is present, ..., and functioning)" */ if (Flags != ACPI_UINT32_MAX) { WalkInfo->Num_STA++; } /* * Examine the PRESENT and FUNCTIONING status bits * * Note: ACPI spec does not seem to specify behavior for the present but * not functioning case, so we assume functioning if present. */ if (!(Flags & ACPI_STA_DEVICE_PRESENT)) { /* Device is not present, we must examine the Functioning bit */ if (Flags & ACPI_STA_DEVICE_FUNCTIONING) { /* * Device is not present but is "functioning". In this case, * we will not run _INI, but we continue to examine the children * of this device. * * From the ACPI spec, description of _STA: (Note - no mention * of whether to run _INI or not on the device in question) * * "_STA may return bit 0 clear (not present) with bit 3 set * (device is functional). This case is used to indicate a valid * device for which no device driver should be loaded (for example, * a bridge device.) Children of this device may be present and * valid. OSPM should continue enumeration below a device whose * _STA returns this bit combination" */ return_ACPI_STATUS (AE_OK); } else { /* * Device is not present and is not functioning. We must abort the * walk of this subtree immediately -- don't look at the children * of such a device. * * From the ACPI spec, description of _INI: * * "If the _STA method indicates that the device is not present, * OSPM will not run the _INI and will not examine the children * of the device for _INI methods" */ return_ACPI_STATUS (AE_CTRL_DEPTH); } } /* * The device is present or is assumed present if no _STA exists. * Run the _INI if it exists (not required to exist) * * Note: We know there is an _INI within this subtree, but it may not be * under this particular device, it may be lower in the branch. */ if (!ACPI_COMPARE_NAMESEG (DeviceNode->Name.Ascii, "_SB_") || DeviceNode->Parent != AcpiGbl_RootNode) { ACPI_DEBUG_EXEC (AcpiUtDisplayInitPathname ( ACPI_TYPE_METHOD, DeviceNode, METHOD_NAME__INI)); memset (Info, 0, sizeof (ACPI_EVALUATE_INFO)); Info->PrefixNode = DeviceNode; Info->RelativePathname = METHOD_NAME__INI; Info->Parameters = NULL; Info->Flags = ACPI_IGNORE_RETURN_VALUE; Status = AcpiNsEvaluate (Info); if (ACPI_SUCCESS (Status)) { WalkInfo->Num_INI++; } #ifdef ACPI_DEBUG_OUTPUT else if (Status != AE_NOT_FOUND) { /* Ignore error and move on to next device */ char *ScopeName = AcpiNsGetNormalizedPathname (DeviceNode, TRUE); ACPI_EXCEPTION ((AE_INFO, Status, "during %s._INI execution", ScopeName)); ACPI_FREE (ScopeName); } #endif } /* Ignore errors from above */ Status = AE_OK; /* * The _INI method has been run if present; call the Global Initialization * Handler for this device. */ if (AcpiGbl_InitHandler) { Status = AcpiGbl_InitHandler (DeviceNode, ACPI_INIT_DEVICE_INI); } return_ACPI_STATUS (Status); } src/acpica/source/components/namespace/nsload.c000066400000000000000000000403011465205512700221370ustar00rootroot00000000000000/****************************************************************************** * * Module Name: nsload - namespace loading/expanding/contracting procedures * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acdispat.h" #include "actables.h" #include "acinterp.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsload") /* Local prototypes */ #ifdef ACPI_FUTURE_IMPLEMENTATION ACPI_STATUS AcpiNsUnloadNamespace ( ACPI_HANDLE Handle); static ACPI_STATUS AcpiNsDeleteSubtree ( ACPI_HANDLE StartHandle); #endif /******************************************************************************* * * FUNCTION: AcpiNsLoadTable * * PARAMETERS: TableIndex - Index for table to be loaded * Node - Owning NS node * * RETURN: Status * * DESCRIPTION: Load one ACPI table into the namespace * ******************************************************************************/ ACPI_STATUS AcpiNsLoadTable ( UINT32 TableIndex, ACPI_NAMESPACE_NODE *Node) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (NsLoadTable); /* If table already loaded into namespace, just return */ if (AcpiTbIsTableLoaded (TableIndex)) { Status = AE_ALREADY_EXISTS; goto Unlock; } ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** Loading table into namespace ****\n")); Status = AcpiTbAllocateOwnerId (TableIndex); if (ACPI_FAILURE (Status)) { goto Unlock; } /* * Parse the table and load the namespace with all named * objects found within. Control methods are NOT parsed * at this time. In fact, the control methods cannot be * parsed until the entire namespace is loaded, because * if a control method makes a forward reference (call) * to another control method, we can't continue parsing * because we don't know how many arguments to parse next! */ Status = AcpiNsParseTable (TableIndex, Node); if (ACPI_SUCCESS (Status)) { AcpiTbSetTableLoadedFlag (TableIndex, TRUE); } else { /* * On error, delete any namespace objects created by this table. * We cannot initialize these objects, so delete them. There are * a couple of especially bad cases: * AE_ALREADY_EXISTS - namespace collision. * AE_NOT_FOUND - the target of a Scope operator does not * exist. This target of Scope must already exist in the * namespace, as per the ACPI specification. */ AcpiNsDeleteNamespaceByOwner ( AcpiGbl_RootTableList.Tables[TableIndex].OwnerId); AcpiTbReleaseOwnerId (TableIndex); return_ACPI_STATUS (Status); } Unlock: if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Now we can parse the control methods. We always parse * them here for a sanity check, and if configured for * just-in-time parsing, we delete the control method * parse trees. */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** Begin Table Object Initialization\n")); AcpiExEnterInterpreter (); Status = AcpiDsInitializeObjects (TableIndex, Node); AcpiExExitInterpreter (); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** Completed Table Object Initialization\n")); return_ACPI_STATUS (Status); } #ifdef ACPI_OBSOLETE_FUNCTIONS /******************************************************************************* * * FUNCTION: AcpiLoadNamespace * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Load the name space from what ever is pointed to by DSDT. * (DSDT points to either the BIOS or a buffer.) * ******************************************************************************/ ACPI_STATUS AcpiNsLoadNamespace ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiLoadNameSpace); /* There must be at least a DSDT installed */ if (AcpiGbl_DSDT == NULL) { ACPI_ERROR ((AE_INFO, "DSDT is not in memory")); return_ACPI_STATUS (AE_NO_ACPI_TABLES); } /* * Load the namespace. The DSDT is required, * but the SSDT and PSDT tables are optional. */ Status = AcpiNsLoadTableByType (ACPI_TABLE_ID_DSDT); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Ignore exceptions from these */ (void) AcpiNsLoadTableByType (ACPI_TABLE_ID_SSDT); (void) AcpiNsLoadTableByType (ACPI_TABLE_ID_PSDT); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "ACPI Namespace successfully loaded at root %p\n", AcpiGbl_RootNode)); return_ACPI_STATUS (Status); } #endif #ifdef ACPI_FUTURE_IMPLEMENTATION /******************************************************************************* * * FUNCTION: AcpiNsDeleteSubtree * * PARAMETERS: StartHandle - Handle in namespace where search begins * * RETURNS Status * * DESCRIPTION: Walks the namespace starting at the given handle and deletes * all objects, entries, and scopes in the entire subtree. * * Namespace/Interpreter should be locked or the subsystem should * be in shutdown before this routine is called. * ******************************************************************************/ static ACPI_STATUS AcpiNsDeleteSubtree ( ACPI_HANDLE StartHandle) { ACPI_STATUS Status; ACPI_HANDLE ChildHandle; ACPI_HANDLE ParentHandle; ACPI_HANDLE NextChildHandle; ACPI_HANDLE Dummy; UINT32 Level; ACPI_FUNCTION_TRACE (NsDeleteSubtree); ParentHandle = StartHandle; ChildHandle = NULL; Level = 1; /* * Traverse the tree of objects until we bubble back up * to where we started. */ while (Level > 0) { /* Attempt to get the next object in this scope */ Status = AcpiGetNextObject (ACPI_TYPE_ANY, ParentHandle, ChildHandle, &NextChildHandle); ChildHandle = NextChildHandle; /* Did we get a new object? */ if (ACPI_SUCCESS (Status)) { /* Check if this object has any children */ if (ACPI_SUCCESS (AcpiGetNextObject (ACPI_TYPE_ANY, ChildHandle, NULL, &Dummy))) { /* * There is at least one child of this object, * visit the object */ Level++; ParentHandle = ChildHandle; ChildHandle = NULL; } } else { /* * No more children in this object, go back up to * the object's parent */ Level--; /* Delete all children now */ AcpiNsDeleteChildren (ChildHandle); ChildHandle = ParentHandle; Status = AcpiGetParent (ParentHandle, &ParentHandle); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } } /* Now delete the starting object, and we are done */ AcpiNsRemoveNode (ChildHandle); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsUnloadNameSpace * * PARAMETERS: Handle - Root of namespace subtree to be deleted * * RETURN: Status * * DESCRIPTION: Shrinks the namespace, typically in response to an undocking * event. Deletes an entire subtree starting from (and * including) the given handle. * ******************************************************************************/ ACPI_STATUS AcpiNsUnloadNamespace ( ACPI_HANDLE Handle) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (NsUnloadNameSpace); /* Parameter validation */ if (!AcpiGbl_RootNode) { return_ACPI_STATUS (AE_NO_NAMESPACE); } if (!Handle) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* This function does the real work */ Status = AcpiNsDeleteSubtree (Handle); return_ACPI_STATUS (Status); } #endif src/acpica/source/components/namespace/nsnames.c000066400000000000000000000544311465205512700223340ustar00rootroot00000000000000/******************************************************************************* * * Module Name: nsnames - Name manipulation and search * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "amlcode.h" #include "acnamesp.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsnames") /******************************************************************************* * * FUNCTION: AcpiNsGetExternalPathname * * PARAMETERS: Node - Namespace node whose pathname is needed * * RETURN: Pointer to storage containing the fully qualified name of * the node, In external format (name segments separated by path * separators.) * * DESCRIPTION: Used to obtain the full pathname to a namespace node, usually * for error and debug statements. * ******************************************************************************/ char * AcpiNsGetExternalPathname ( ACPI_NAMESPACE_NODE *Node) { char *NameBuffer; ACPI_FUNCTION_TRACE_PTR (NsGetExternalPathname, Node); NameBuffer = AcpiNsGetNormalizedPathname (Node, FALSE); return_PTR (NameBuffer); } /******************************************************************************* * * FUNCTION: AcpiNsGetPathnameLength * * PARAMETERS: Node - Namespace node * * RETURN: Length of path, including prefix * * DESCRIPTION: Get the length of the pathname string for this node * ******************************************************************************/ ACPI_SIZE AcpiNsGetPathnameLength ( ACPI_NAMESPACE_NODE *Node) { ACPI_SIZE Size; /* Validate the Node */ if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) { ACPI_ERROR ((AE_INFO, "Invalid/cached reference target node: %p, descriptor type %d", Node, ACPI_GET_DESCRIPTOR_TYPE (Node))); return (0); } Size = AcpiNsBuildNormalizedPath (Node, NULL, 0, FALSE); return (Size); } /******************************************************************************* * * FUNCTION: AcpiNsHandleToName * * PARAMETERS: TargetHandle - Handle of named object whose name is * to be found * Buffer - Where the name is returned * * RETURN: Status, Buffer is filled with name if status is AE_OK * * DESCRIPTION: Build and return a full namespace name * ******************************************************************************/ ACPI_STATUS AcpiNsHandleToName ( ACPI_HANDLE TargetHandle, ACPI_BUFFER *Buffer) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; const char *NodeName; ACPI_FUNCTION_TRACE_PTR (NsHandleToName, TargetHandle); Node = AcpiNsValidateHandle (TargetHandle); if (!Node) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Validate/Allocate/Clear caller buffer */ Status = AcpiUtInitializeBuffer (Buffer, ACPI_PATH_SEGMENT_LENGTH); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Just copy the ACPI name from the Node and zero terminate it */ NodeName = AcpiUtGetNodeName (Node); ACPI_COPY_NAMESEG (Buffer->Pointer, NodeName); ((char *) Buffer->Pointer) [ACPI_NAMESEG_SIZE] = 0; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%4.4s\n", (char *) Buffer->Pointer)); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsHandleToPathname * * PARAMETERS: TargetHandle - Handle of named object whose name is * to be found * Buffer - Where the pathname is returned * NoTrailing - Remove trailing '_' for each name * segment * * RETURN: Status, Buffer is filled with pathname if status is AE_OK * * DESCRIPTION: Build and return a full namespace pathname * ******************************************************************************/ ACPI_STATUS AcpiNsHandleToPathname ( ACPI_HANDLE TargetHandle, ACPI_BUFFER *Buffer, BOOLEAN NoTrailing) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_SIZE RequiredSize; ACPI_FUNCTION_TRACE_PTR (NsHandleToPathname, TargetHandle); Node = AcpiNsValidateHandle (TargetHandle); if (!Node) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Determine size required for the caller buffer */ RequiredSize = AcpiNsBuildNormalizedPath (Node, NULL, 0, NoTrailing); if (!RequiredSize) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Validate/Allocate/Clear caller buffer */ Status = AcpiUtInitializeBuffer (Buffer, RequiredSize); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Build the path in the caller buffer */ (void) AcpiNsBuildNormalizedPath (Node, Buffer->Pointer, (UINT32) RequiredSize, NoTrailing); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%s [%X]\n", (char *) Buffer->Pointer, (UINT32) RequiredSize)); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsBuildNormalizedPath * * PARAMETERS: Node - Namespace node * FullPath - Where the path name is returned * PathSize - Size of returned path name buffer * NoTrailing - Remove trailing '_' from each name segment * * RETURN: Return 1 if the AML path is empty, otherwise returning (length * of pathname + 1) which means the 'FullPath' contains a trailing * null. * * DESCRIPTION: Build and return a full namespace pathname. * Note that if the size of 'FullPath' isn't large enough to * contain the namespace node's path name, the actual required * buffer length is returned, and it should be greater than * 'PathSize'. So callers are able to check the returning value * to determine the buffer size of 'FullPath'. * ******************************************************************************/ UINT32 AcpiNsBuildNormalizedPath ( ACPI_NAMESPACE_NODE *Node, char *FullPath, UINT32 PathSize, BOOLEAN NoTrailing) { UINT32 Length = 0, i; char Name[ACPI_NAMESEG_SIZE]; BOOLEAN DoNoTrailing; char c, *Left, *Right; ACPI_NAMESPACE_NODE *NextNode; ACPI_FUNCTION_TRACE_PTR (NsBuildNormalizedPath, Node); #define ACPI_PATH_PUT8(Path, Size, Byte, Length) \ do { \ if ((Length) < (Size)) \ { \ (Path)[(Length)] = (Byte); \ } \ (Length)++; \ } while (0) /* * Make sure the PathSize is correct, so that we don't need to * validate both FullPath and PathSize. */ if (!FullPath) { PathSize = 0; } if (!Node) { goto BuildTrailingNull; } NextNode = Node; while (NextNode && NextNode != AcpiGbl_RootNode) { if (NextNode != Node) { ACPI_PATH_PUT8(FullPath, PathSize, AML_DUAL_NAME_PREFIX, Length); } ACPI_MOVE_32_TO_32 (Name, &NextNode->Name); DoNoTrailing = NoTrailing; for (i = 0; i < 4; i++) { c = Name[4-i-1]; if (DoNoTrailing && c != '_') { DoNoTrailing = FALSE; } if (!DoNoTrailing) { ACPI_PATH_PUT8(FullPath, PathSize, c, Length); } } NextNode = NextNode->Parent; } ACPI_PATH_PUT8(FullPath, PathSize, AML_ROOT_PREFIX, Length); /* Reverse the path string */ if (Length <= PathSize) { Left = FullPath; Right = FullPath+Length - 1; while (Left < Right) { c = *Left; *Left++ = *Right; *Right-- = c; } } /* Append the trailing null */ BuildTrailingNull: ACPI_PATH_PUT8 (FullPath, PathSize, '\0', Length); #undef ACPI_PATH_PUT8 return_UINT32 (Length); } /******************************************************************************* * * FUNCTION: AcpiNsGetNormalizedPathname * * PARAMETERS: Node - Namespace node whose pathname is needed * NoTrailing - Remove trailing '_' from each name segment * * RETURN: Pointer to storage containing the fully qualified name of * the node, In external format (name segments separated by path * separators.) * * DESCRIPTION: Used to obtain the full pathname to a namespace node, usually * for error and debug statements. All trailing '_' will be * removed from the full pathname if 'NoTrailing' is specified.. * ******************************************************************************/ char * AcpiNsGetNormalizedPathname ( ACPI_NAMESPACE_NODE *Node, BOOLEAN NoTrailing) { char *NameBuffer; ACPI_SIZE Size; ACPI_FUNCTION_TRACE_PTR (NsGetNormalizedPathname, Node); /* Calculate required buffer size based on depth below root */ Size = AcpiNsBuildNormalizedPath (Node, NULL, 0, NoTrailing); if (!Size) { return_PTR (NULL); } /* Allocate a buffer to be returned to caller */ NameBuffer = ACPI_ALLOCATE_ZEROED (Size); if (!NameBuffer) { ACPI_ERROR ((AE_INFO, "Could not allocate %u bytes", (UINT32) Size)); return_PTR (NULL); } /* Build the path in the allocated buffer */ (void) AcpiNsBuildNormalizedPath (Node, NameBuffer, (UINT32) Size, NoTrailing); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES, "%s: Path \"%s\"\n", ACPI_GET_FUNCTION_NAME, NameBuffer)); return_PTR (NameBuffer); } /******************************************************************************* * * FUNCTION: AcpiNsBuildPrefixedPathname * * PARAMETERS: PrefixScope - Scope/Path that prefixes the internal path * InternalPath - Name or path of the namespace node * * RETURN: None * * DESCRIPTION: Construct a fully qualified pathname from a concatenation of: * 1) Path associated with the PrefixScope namespace node * 2) External path representation of the Internal path * ******************************************************************************/ char * AcpiNsBuildPrefixedPathname ( ACPI_GENERIC_STATE *PrefixScope, const char *InternalPath) { ACPI_STATUS Status; char *FullPath = NULL; char *ExternalPath = NULL; char *PrefixPath = NULL; ACPI_SIZE PrefixPathLength = 0; /* If there is a prefix, get the pathname to it */ if (PrefixScope && PrefixScope->Scope.Node) { PrefixPath = AcpiNsGetNormalizedPathname (PrefixScope->Scope.Node, TRUE); if (PrefixPath) { PrefixPathLength = strlen (PrefixPath); } } Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, InternalPath, NULL, &ExternalPath); if (ACPI_FAILURE (Status)) { goto Cleanup; } /* Merge the prefix path and the path. 2 is for one dot and trailing null */ FullPath = ACPI_ALLOCATE_ZEROED ( PrefixPathLength + strlen (ExternalPath) + 2); if (!FullPath) { goto Cleanup; } /* Don't merge if the External path is already fully qualified */ if (PrefixPath && (*ExternalPath != '\\') && (*ExternalPath != '^')) { strcat (FullPath, PrefixPath); if (PrefixPath[1]) { strcat (FullPath, "."); } } AcpiNsNormalizePathname (ExternalPath); strcat (FullPath, ExternalPath); Cleanup: if (PrefixPath) { ACPI_FREE (PrefixPath); } if (ExternalPath) { ACPI_FREE (ExternalPath); } return (FullPath); } /******************************************************************************* * * FUNCTION: AcpiNsNormalizePathname * * PARAMETERS: OriginalPath - Path to be normalized, in External format * * RETURN: The original path is processed in-place * * DESCRIPTION: Remove trailing underscores from each element of a path. * * For example: \A___.B___.C___ becomes \A.B.C * ******************************************************************************/ void AcpiNsNormalizePathname ( char *OriginalPath) { char *InputPath = OriginalPath; char *NewPathBuffer; char *NewPath; UINT32 i; /* Allocate a temp buffer in which to construct the new path */ NewPathBuffer = ACPI_ALLOCATE_ZEROED (strlen (InputPath) + 1); NewPath = NewPathBuffer; if (!NewPathBuffer) { return; } /* Special characters may appear at the beginning of the path */ if (*InputPath == '\\') { *NewPath = *InputPath; NewPath++; InputPath++; } while (*InputPath == '^') { *NewPath = *InputPath; NewPath++; InputPath++; } /* Remainder of the path */ while (*InputPath) { /* Do one nameseg at a time */ for (i = 0; (i < ACPI_NAMESEG_SIZE) && *InputPath; i++) { if ((i == 0) || (*InputPath != '_')) /* First char is allowed to be underscore */ { *NewPath = *InputPath; NewPath++; } InputPath++; } /* Dot means that there are more namesegs to come */ if (*InputPath == '.') { *NewPath = *InputPath; NewPath++; InputPath++; } } *NewPath = 0; strcpy (OriginalPath, NewPathBuffer); ACPI_FREE (NewPathBuffer); } src/acpica/source/components/namespace/nsobject.c000066400000000000000000000503441465205512700224760ustar00rootroot00000000000000/******************************************************************************* * * Module Name: nsobject - Utilities for objects attached to namespace * table entries * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsobject") /******************************************************************************* * * FUNCTION: AcpiNsAttachObject * * PARAMETERS: Node - Parent Node * Object - Object to be attached * Type - Type of object, or ACPI_TYPE_ANY if not * known * * RETURN: Status * * DESCRIPTION: Record the given object as the value associated with the * name whose ACPI_HANDLE is passed. If Object is NULL * and Type is ACPI_TYPE_ANY, set the name as having no value. * Note: Future may require that the Node->Flags field be passed * as a parameter. * * MUTEX: Assumes namespace is locked * ******************************************************************************/ ACPI_STATUS AcpiNsAttachObject ( ACPI_NAMESPACE_NODE *Node, ACPI_OPERAND_OBJECT *Object, ACPI_OBJECT_TYPE Type) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *LastObjDesc; ACPI_OBJECT_TYPE ObjectType = ACPI_TYPE_ANY; ACPI_FUNCTION_TRACE (NsAttachObject); /* * Parameter validation */ if (!Node) { /* Invalid handle */ ACPI_ERROR ((AE_INFO, "Null NamedObj handle")); return_ACPI_STATUS (AE_BAD_PARAMETER); } if (!Object && (ACPI_TYPE_ANY != Type)) { /* Null object */ ACPI_ERROR ((AE_INFO, "Null object, but type not ACPI_TYPE_ANY")); return_ACPI_STATUS (AE_BAD_PARAMETER); } if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) { /* Not a name handle */ ACPI_ERROR ((AE_INFO, "Invalid handle %p [%s]", Node, AcpiUtGetDescriptorName (Node))); return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Check if this object is already attached */ if (Node->Object == Object) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj %p already installed in NameObj %p\n", Object, Node)); return_ACPI_STATUS (AE_OK); } /* If null object, we will just install it */ if (!Object) { ObjDesc = NULL; ObjectType = ACPI_TYPE_ANY; } /* * If the source object is a namespace Node with an attached object, * we will use that (attached) object */ else if ((ACPI_GET_DESCRIPTOR_TYPE (Object) == ACPI_DESC_TYPE_NAMED) && ((ACPI_NAMESPACE_NODE *) Object)->Object) { /* * Value passed is a name handle and that name has a * non-null value. Use that name's value and type. */ ObjDesc = ((ACPI_NAMESPACE_NODE *) Object)->Object; ObjectType = ((ACPI_NAMESPACE_NODE *) Object)->Type; } /* * Otherwise, we will use the parameter object, but we must type * it first */ else { ObjDesc = (ACPI_OPERAND_OBJECT *) Object; /* Use the given type */ ObjectType = Type; } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Installing %p into Node %p [%4.4s]\n", ObjDesc, Node, AcpiUtGetNodeName (Node))); /* Detach an existing attached object if present */ if (Node->Object) { AcpiNsDetachObject (Node); } if (ObjDesc) { /* * Must increment the new value's reference count * (if it is an internal object) */ AcpiUtAddReference (ObjDesc); /* * Handle objects with multiple descriptors - walk * to the end of the descriptor list */ LastObjDesc = ObjDesc; while (LastObjDesc->Common.NextObject) { LastObjDesc = LastObjDesc->Common.NextObject; } /* Install the object at the front of the object list */ LastObjDesc->Common.NextObject = Node->Object; } Node->Type = (UINT8) ObjectType; Node->Object = ObjDesc; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsDetachObject * * PARAMETERS: Node - A Namespace node whose object will be detached * * RETURN: None. * * DESCRIPTION: Detach/delete an object associated with a namespace node. * if the object is an allocated object, it is freed. * Otherwise, the field is simply cleared. * ******************************************************************************/ void AcpiNsDetachObject ( ACPI_NAMESPACE_NODE *Node) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_FUNCTION_TRACE (NsDetachObject); ObjDesc = Node->Object; if (!ObjDesc || (ObjDesc->Common.Type == ACPI_TYPE_LOCAL_DATA)) { return_VOID; } if (Node->Flags & ANOBJ_ALLOCATED_BUFFER) { /* Free the dynamic aml buffer */ if (ObjDesc->Common.Type == ACPI_TYPE_METHOD) { ACPI_FREE (ObjDesc->Method.AmlStart); } } if (ObjDesc->Common.Type == ACPI_TYPE_REGION) { AcpiUtRemoveAddressRange(ObjDesc->Region.SpaceId, Node); } /* Clear the Node entry in all cases */ Node->Object = NULL; if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND) { /* Unlink object from front of possible object list */ Node->Object = ObjDesc->Common.NextObject; /* Handle possible 2-descriptor object */ if (Node->Object && (Node->Object->Common.Type != ACPI_TYPE_LOCAL_DATA)) { Node->Object = Node->Object->Common.NextObject; } /* * Detach the object from any data objects (which are still held by * the namespace node) */ if (ObjDesc->Common.NextObject && ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA)) { ObjDesc->Common.NextObject = NULL; } } /* Reset the node type to untyped */ Node->Type = ACPI_TYPE_ANY; ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Node %p [%4.4s] Object %p\n", Node, AcpiUtGetNodeName (Node), ObjDesc)); /* Remove one reference on the object (and all subobjects) */ AcpiUtRemoveReference (ObjDesc); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiNsGetAttachedObject * * PARAMETERS: Node - Namespace node * * RETURN: Current value of the object field from the Node whose * handle is passed * * DESCRIPTION: Obtain the object attached to a namespace node. * ******************************************************************************/ ACPI_OPERAND_OBJECT * AcpiNsGetAttachedObject ( ACPI_NAMESPACE_NODE *Node) { ACPI_FUNCTION_TRACE_PTR (NsGetAttachedObject, Node); if (!Node) { ACPI_WARNING ((AE_INFO, "Null Node ptr")); return_PTR (NULL); } if (!Node->Object || ((ACPI_GET_DESCRIPTOR_TYPE (Node->Object) != ACPI_DESC_TYPE_OPERAND) && (ACPI_GET_DESCRIPTOR_TYPE (Node->Object) != ACPI_DESC_TYPE_NAMED)) || ((Node->Object)->Common.Type == ACPI_TYPE_LOCAL_DATA)) { return_PTR (NULL); } return_PTR (Node->Object); } /******************************************************************************* * * FUNCTION: AcpiNsGetSecondaryObject * * PARAMETERS: Node - Namespace node * * RETURN: Current value of the object field from the Node whose * handle is passed. * * DESCRIPTION: Obtain a secondary object associated with a namespace node. * ******************************************************************************/ ACPI_OPERAND_OBJECT * AcpiNsGetSecondaryObject ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_FUNCTION_TRACE_PTR (NsGetSecondaryObject, ObjDesc); if ((!ObjDesc) || (ObjDesc->Common.Type== ACPI_TYPE_LOCAL_DATA) || (!ObjDesc->Common.NextObject) || ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA)) { return_PTR (NULL); } return_PTR (ObjDesc->Common.NextObject); } /******************************************************************************* * * FUNCTION: AcpiNsAttachData * * PARAMETERS: Node - Namespace node * Handler - Handler to be associated with the data * Data - Data to be attached * * RETURN: Status * * DESCRIPTION: Low-level attach data. Create and attach a Data object. * ******************************************************************************/ ACPI_STATUS AcpiNsAttachData ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_HANDLER Handler, void *Data) { ACPI_OPERAND_OBJECT *PrevObjDesc; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *DataDesc; /* We only allow one attachment per handler */ PrevObjDesc = NULL; ObjDesc = Node->Object; while (ObjDesc) { if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_DATA) && (ObjDesc->Data.Handler == Handler)) { return (AE_ALREADY_EXISTS); } PrevObjDesc = ObjDesc; ObjDesc = ObjDesc->Common.NextObject; } /* Create an internal object for the data */ DataDesc = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_DATA); if (!DataDesc) { return (AE_NO_MEMORY); } DataDesc->Data.Handler = Handler; DataDesc->Data.Pointer = Data; /* Install the data object */ if (PrevObjDesc) { PrevObjDesc->Common.NextObject = DataDesc; } else { Node->Object = DataDesc; } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsDetachData * * PARAMETERS: Node - Namespace node * Handler - Handler associated with the data * * RETURN: Status * * DESCRIPTION: Low-level detach data. Delete the data node, but the caller * is responsible for the actual data. * ******************************************************************************/ ACPI_STATUS AcpiNsDetachData ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_HANDLER Handler) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *PrevObjDesc; PrevObjDesc = NULL; ObjDesc = Node->Object; while (ObjDesc) { if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_DATA) && (ObjDesc->Data.Handler == Handler)) { if (PrevObjDesc) { PrevObjDesc->Common.NextObject = ObjDesc->Common.NextObject; } else { Node->Object = ObjDesc->Common.NextObject; } AcpiUtRemoveReference (ObjDesc); return (AE_OK); } PrevObjDesc = ObjDesc; ObjDesc = ObjDesc->Common.NextObject; } return (AE_NOT_FOUND); } /******************************************************************************* * * FUNCTION: AcpiNsGetAttachedData * * PARAMETERS: Node - Namespace node * Handler - Handler associated with the data * Data - Where the data is returned * * RETURN: Status * * DESCRIPTION: Low level interface to obtain data previously associated with * a namespace node. * ******************************************************************************/ ACPI_STATUS AcpiNsGetAttachedData ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_HANDLER Handler, void **Data) { ACPI_OPERAND_OBJECT *ObjDesc; ObjDesc = Node->Object; while (ObjDesc) { if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_DATA) && (ObjDesc->Data.Handler == Handler)) { *Data = ObjDesc->Data.Pointer; return (AE_OK); } ObjDesc = ObjDesc->Common.NextObject; } return (AE_NOT_FOUND); } src/acpica/source/components/namespace/nsparse.c000066400000000000000000000376531465205512700223520ustar00rootroot00000000000000/****************************************************************************** * * Module Name: nsparse - namespace interface to AML parser * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acparser.h" #include "acdispat.h" #include "actables.h" #include "acinterp.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsparse") /******************************************************************************* * * FUNCTION: NsExecuteTable * * PARAMETERS: TableDesc - An ACPI table descriptor for table to parse * StartNode - Where to enter the table into the namespace * * RETURN: Status * * DESCRIPTION: Load ACPI/AML table by executing the entire table as a single * large control method. * * NOTE: The point of this is to execute any module-level code in-place * as the table is parsed. Some AML code depends on this behavior. * * It is a run-time option at this time, but will eventually become * the default. * * Note: This causes the table to only have a single-pass parse. * However, this is compatible with other ACPI implementations. * ******************************************************************************/ ACPI_STATUS AcpiNsExecuteTable ( UINT32 TableIndex, ACPI_NAMESPACE_NODE *StartNode) { ACPI_STATUS Status; ACPI_TABLE_HEADER *Table; ACPI_OWNER_ID OwnerId; ACPI_EVALUATE_INFO *Info = NULL; UINT32 AmlLength; UINT8 *AmlStart; ACPI_OPERAND_OBJECT *MethodObj = NULL; ACPI_FUNCTION_TRACE (NsExecuteTable); Status = AcpiGetTableByIndex (TableIndex, &Table); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Table must consist of at least a complete header */ if (Table->Length < sizeof (ACPI_TABLE_HEADER)) { return_ACPI_STATUS (AE_BAD_HEADER); } AmlStart = (UINT8 *) Table + sizeof (ACPI_TABLE_HEADER); AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER); Status = AcpiTbGetOwnerId (TableIndex, &OwnerId); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Create, initialize, and link a new temporary method object */ MethodObj = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD); if (!MethodObj) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Allocate the evaluation information block */ Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); if (!Info) { Status = AE_NO_MEMORY; goto Cleanup; } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, "%s: Create table pseudo-method for [%4.4s] @%p, method %p\n", ACPI_GET_FUNCTION_NAME, Table->Signature, Table, MethodObj)); MethodObj->Method.AmlStart = AmlStart; MethodObj->Method.AmlLength = AmlLength; MethodObj->Method.OwnerId = OwnerId; MethodObj->Method.InfoFlags |= ACPI_METHOD_MODULE_LEVEL; Info->PassNumber = ACPI_IMODE_EXECUTE; Info->Node = StartNode; Info->ObjDesc = MethodObj; Info->NodeFlags = Info->Node->Flags; Info->FullPathname = AcpiNsGetNormalizedPathname (Info->Node, TRUE); if (!Info->FullPathname) { Status = AE_NO_MEMORY; goto Cleanup; } /* Optional object evaluation log */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION, "%-26s: (Definition Block level)\n", "Module-level evaluation")); Status = AcpiPsExecuteTable (Info); /* Optional object evaluation log */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION, "%-26s: (Definition Block level)\n", "Module-level complete")); Cleanup: if (Info) { ACPI_FREE (Info->FullPathname); Info->FullPathname = NULL; } ACPI_FREE (Info); AcpiUtRemoveReference (MethodObj); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: NsOneCompleteParse * * PARAMETERS: PassNumber - 1 or 2 * TableDesc - The table to be parsed. * * RETURN: Status * * DESCRIPTION: Perform one complete parse of an ACPI/AML table. * ******************************************************************************/ ACPI_STATUS AcpiNsOneCompleteParse ( UINT32 PassNumber, UINT32 TableIndex, ACPI_NAMESPACE_NODE *StartNode) { ACPI_PARSE_OBJECT *ParseRoot; ACPI_STATUS Status; UINT32 AmlLength; UINT8 *AmlStart; ACPI_WALK_STATE *WalkState; ACPI_TABLE_HEADER *Table; ACPI_OWNER_ID OwnerId; ACPI_FUNCTION_TRACE (NsOneCompleteParse); Status = AcpiGetTableByIndex (TableIndex, &Table); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Table must consist of at least a complete header */ if (Table->Length < sizeof (ACPI_TABLE_HEADER)) { return_ACPI_STATUS (AE_BAD_HEADER); } AmlStart = (UINT8 *) Table + sizeof (ACPI_TABLE_HEADER); AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER); Status = AcpiTbGetOwnerId (TableIndex, &OwnerId); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Create and init a Root Node */ ParseRoot = AcpiPsCreateScopeOp (AmlStart); if (!ParseRoot) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Create and initialize a new walk state */ WalkState = AcpiDsCreateWalkState (OwnerId, NULL, NULL, NULL); if (!WalkState) { AcpiPsFreeOp (ParseRoot); return_ACPI_STATUS (AE_NO_MEMORY); } Status = AcpiDsInitAmlWalk (WalkState, ParseRoot, NULL, AmlStart, AmlLength, NULL, (UINT8) PassNumber); if (ACPI_FAILURE (Status)) { AcpiDsDeleteWalkState (WalkState); goto Cleanup; } /* Found OSDT table, enable the namespace override feature */ if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_OSDT) && PassNumber == ACPI_IMODE_LOAD_PASS1) { WalkState->NamespaceOverride = TRUE; } /* StartNode is the default location to load the table */ if (StartNode && StartNode != AcpiGbl_RootNode) { Status = AcpiDsScopeStackPush ( StartNode, ACPI_TYPE_METHOD, WalkState); if (ACPI_FAILURE (Status)) { AcpiDsDeleteWalkState (WalkState); goto Cleanup; } } /* Parse the AML */ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "*PARSE* pass %u parse\n", PassNumber)); AcpiExEnterInterpreter (); Status = AcpiPsParseAml (WalkState); AcpiExExitInterpreter (); Cleanup: AcpiPsDeleteParseTree (ParseRoot); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiNsParseTable * * PARAMETERS: TableDesc - An ACPI table descriptor for table to parse * StartNode - Where to enter the table into the namespace * * RETURN: Status * * DESCRIPTION: Parse AML within an ACPI table and return a tree of ops * ******************************************************************************/ ACPI_STATUS AcpiNsParseTable ( UINT32 TableIndex, ACPI_NAMESPACE_NODE *StartNode) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (NsParseTable); /* * Executes the AML table as one large control method. * The point of this is to execute any module-level code in-place * as the table is parsed. Some AML code depends on this behavior. * * Note: This causes the table to only have a single-pass parse. * However, this is compatible with other ACPI implementations. */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, "%s: **** Start table execution pass\n", ACPI_GET_FUNCTION_NAME)); Status = AcpiNsExecuteTable (TableIndex, StartNode); return_ACPI_STATUS (Status); } src/acpica/source/components/namespace/nspredef.c000066400000000000000000000502471465205512700224770ustar00rootroot00000000000000/****************************************************************************** * * Module Name: nspredef - Validation of ACPI predefined methods and objects * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define ACPI_CREATE_PREDEFINED_TABLE #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acpredef.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nspredef") /******************************************************************************* * * This module validates predefined ACPI objects that appear in the namespace, * at the time they are evaluated (via AcpiEvaluateObject). The purpose of this * validation is to detect problems with BIOS-exposed predefined ACPI objects * before the results are returned to the ACPI-related drivers. * * There are several areas that are validated: * * 1) The number of input arguments as defined by the method/object in the * ASL is validated against the ACPI specification. * 2) The type of the return object (if any) is validated against the ACPI * specification. * 3) For returned package objects, the count of package elements is * validated, as well as the type of each package element. Nested * packages are supported. * * For any problems found, a warning message is issued. * ******************************************************************************/ /* Local prototypes */ static ACPI_STATUS AcpiNsCheckReference ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT *ReturnObject); static UINT32 AcpiNsGetBitmappedType ( ACPI_OPERAND_OBJECT *ReturnObject); /******************************************************************************* * * FUNCTION: AcpiNsCheckReturnValue * * PARAMETERS: Node - Namespace node for the method/object * Info - Method execution information block * UserParamCount - Number of parameters actually passed * ReturnStatus - Status from the object evaluation * ReturnObjectPtr - Pointer to the object returned from the * evaluation of a method or object * * RETURN: Status * * DESCRIPTION: Check the value returned from a predefined name. * ******************************************************************************/ ACPI_STATUS AcpiNsCheckReturnValue ( ACPI_NAMESPACE_NODE *Node, ACPI_EVALUATE_INFO *Info, UINT32 UserParamCount, ACPI_STATUS ReturnStatus, ACPI_OPERAND_OBJECT **ReturnObjectPtr) { ACPI_STATUS Status; const ACPI_PREDEFINED_INFO *Predefined; ACPI_FUNCTION_TRACE (NsCheckReturnValue); /* If not a predefined name, we cannot validate the return object */ Predefined = Info->Predefined; if (!Predefined) { return_ACPI_STATUS (AE_OK); } /* * If the method failed or did not actually return an object, we cannot * validate the return object */ if ((ReturnStatus != AE_OK) && (ReturnStatus != AE_CTRL_RETURN_VALUE)) { return_ACPI_STATUS (AE_OK); } /* * Return value validation and possible repair. * * 1) Don't perform return value validation/repair if this feature * has been disabled via a global option. * * 2) We have a return value, but if one wasn't expected, just exit, * this is not a problem. For example, if the "Implicit Return" * feature is enabled, methods will always return a value. * * 3) If the return value can be of any type, then we cannot perform * any validation, just exit. */ if (AcpiGbl_DisableAutoRepair || (!Predefined->Info.ExpectedBtypes) || (Predefined->Info.ExpectedBtypes == ACPI_RTYPE_ALL)) { return_ACPI_STATUS (AE_OK); } /* * Check that the type of the main return object is what is expected * for this predefined name */ Status = AcpiNsCheckObjectType (Info, ReturnObjectPtr, Predefined->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT); if (ACPI_FAILURE (Status)) { goto Exit; } /* * * 4) If there is no return value and it is optional, just return * AE_OK (_WAK). */ if (!(*ReturnObjectPtr)) { goto Exit; } /* * For returned Package objects, check the type of all sub-objects. * Note: Package may have been newly created by call above. */ if ((*ReturnObjectPtr)->Common.Type == ACPI_TYPE_PACKAGE) { Info->ParentPackage = *ReturnObjectPtr; Status = AcpiNsCheckPackage (Info, ReturnObjectPtr); if (ACPI_FAILURE (Status)) { /* We might be able to fix some errors */ if ((Status != AE_AML_OPERAND_TYPE) && (Status != AE_AML_OPERAND_VALUE)) { goto Exit; } } } /* * The return object was OK, or it was successfully repaired above. * Now make some additional checks such as verifying that package * objects are sorted correctly (if required) or buffer objects have * the correct data width (bytes vs. dwords). These repairs are * performed on a per-name basis, i.e., the code is specific to * particular predefined names. */ Status = AcpiNsComplexRepairs (Info, Node, Status, ReturnObjectPtr); Exit: /* * If the object validation failed or if we successfully repaired one * or more objects, mark the parent node to suppress further warning * messages during the next evaluation of the same method/object. */ if (ACPI_FAILURE (Status) || (Info->ReturnFlags & ACPI_OBJECT_REPAIRED)) { Node->Flags |= ANOBJ_EVALUATED; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiNsCheckObjectType * * PARAMETERS: Info - Method execution information block * ReturnObjectPtr - Pointer to the object returned from the * evaluation of a method or object * ExpectedBtypes - Bitmap of expected return type(s) * PackageIndex - Index of object within parent package (if * applicable - ACPI_NOT_PACKAGE_ELEMENT * otherwise) * * RETURN: Status * * DESCRIPTION: Check the type of the return object against the expected object * type(s). Use of Btype allows multiple expected object types. * ******************************************************************************/ ACPI_STATUS AcpiNsCheckObjectType ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr, UINT32 ExpectedBtypes, UINT32 PackageIndex) { ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; ACPI_STATUS Status = AE_OK; char TypeBuffer[96]; /* Room for 10 types */ /* A Namespace node should not get here, but make sure */ if (ReturnObject && ACPI_GET_DESCRIPTOR_TYPE (ReturnObject) == ACPI_DESC_TYPE_NAMED) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Invalid return type - Found a Namespace node [%4.4s] type %s", ReturnObject->Node.Name.Ascii, AcpiUtGetTypeName (ReturnObject->Node.Type))); return (AE_AML_OPERAND_TYPE); } /* * Convert the object type (ACPI_TYPE_xxx) to a bitmapped object type. * The bitmapped type allows multiple possible return types. * * Note, the cases below must handle all of the possible types returned * from all of the predefined names (including elements of returned * packages) */ Info->ReturnBtype = AcpiNsGetBitmappedType (ReturnObject); if (Info->ReturnBtype == ACPI_RTYPE_ANY) { /* Not one of the supported objects, must be incorrect */ goto TypeErrorExit; } /* For reference objects, check that the reference type is correct */ if ((Info->ReturnBtype & ExpectedBtypes) == ACPI_RTYPE_REFERENCE) { Status = AcpiNsCheckReference (Info, ReturnObject); return (Status); } /* Attempt simple repair of the returned object if necessary */ Status = AcpiNsSimpleRepair (Info, ExpectedBtypes, PackageIndex, ReturnObjectPtr); if (ACPI_SUCCESS (Status)) { return (AE_OK); /* Successful repair */ } TypeErrorExit: /* Create a string with all expected types for this predefined object */ AcpiUtGetExpectedReturnTypes (TypeBuffer, ExpectedBtypes); if (!ReturnObject) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Expected return object of type %s", TypeBuffer)); } else if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Return type mismatch - found %s, expected %s", AcpiUtGetObjectTypeName (ReturnObject), TypeBuffer)); } else { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Return Package type mismatch at index %u - " "found %s, expected %s", PackageIndex, AcpiUtGetObjectTypeName (ReturnObject), TypeBuffer)); } return (AE_AML_OPERAND_TYPE); } /******************************************************************************* * * FUNCTION: AcpiNsCheckReference * * PARAMETERS: Info - Method execution information block * ReturnObject - Object returned from the evaluation of a * method or object * * RETURN: Status * * DESCRIPTION: Check a returned reference object for the correct reference * type. The only reference type that can be returned from a * predefined method is a named reference. All others are invalid. * ******************************************************************************/ static ACPI_STATUS AcpiNsCheckReference ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT *ReturnObject) { /* * Check the reference object for the correct reference type (opcode). * The only type of reference that can be converted to an ACPI_OBJECT is * a reference to a named object (reference class: NAME) */ if (ReturnObject->Reference.Class == ACPI_REFCLASS_NAME) { return (AE_OK); } ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Return type mismatch - unexpected reference object type [%s] %2.2X", AcpiUtGetReferenceName (ReturnObject), ReturnObject->Reference.Class)); return (AE_AML_OPERAND_TYPE); } /******************************************************************************* * * FUNCTION: AcpiNsGetBitmappedType * * PARAMETERS: ReturnObject - Object returned from method/obj evaluation * * RETURN: Object return type. ACPI_RTYPE_ANY indicates that the object * type is not supported. ACPI_RTYPE_NONE indicates that no * object was returned (ReturnObject is NULL). * * DESCRIPTION: Convert object type into a bitmapped object return type. * ******************************************************************************/ static UINT32 AcpiNsGetBitmappedType ( ACPI_OPERAND_OBJECT *ReturnObject) { UINT32 ReturnBtype; if (!ReturnObject) { return (ACPI_RTYPE_NONE); } /* Map ACPI_OBJECT_TYPE to internal bitmapped type */ switch (ReturnObject->Common.Type) { case ACPI_TYPE_INTEGER: ReturnBtype = ACPI_RTYPE_INTEGER; break; case ACPI_TYPE_BUFFER: ReturnBtype = ACPI_RTYPE_BUFFER; break; case ACPI_TYPE_STRING: ReturnBtype = ACPI_RTYPE_STRING; break; case ACPI_TYPE_PACKAGE: ReturnBtype = ACPI_RTYPE_PACKAGE; break; case ACPI_TYPE_LOCAL_REFERENCE: ReturnBtype = ACPI_RTYPE_REFERENCE; break; default: /* Not one of the supported objects, must be incorrect */ ReturnBtype = ACPI_RTYPE_ANY; break; } return (ReturnBtype); } src/acpica/source/components/namespace/nsprepkg.c000066400000000000000000000745541465205512700225310ustar00rootroot00000000000000/****************************************************************************** * * Module Name: nsprepkg - Validation of package objects for predefined names * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acpredef.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsprepkg") /* Local prototypes */ static ACPI_STATUS AcpiNsCheckPackageList ( ACPI_EVALUATE_INFO *Info, const ACPI_PREDEFINED_INFO *Package, ACPI_OPERAND_OBJECT **Elements, UINT32 Count); static ACPI_STATUS AcpiNsCheckPackageElements ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **Elements, UINT8 Type1, UINT32 Count1, UINT8 Type2, UINT32 Count2, UINT32 StartIndex); static ACPI_STATUS AcpiNsCustomPackage ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **Elements, UINT32 Count); /******************************************************************************* * * FUNCTION: AcpiNsCheckPackage * * PARAMETERS: Info - Method execution information block * ReturnObjectPtr - Pointer to the object returned from the * evaluation of a method or object * * RETURN: Status * * DESCRIPTION: Check a returned package object for the correct count and * correct type of all sub-objects. * ******************************************************************************/ ACPI_STATUS AcpiNsCheckPackage ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr) { ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; const ACPI_PREDEFINED_INFO *Package; ACPI_OPERAND_OBJECT **Elements; ACPI_STATUS Status = AE_OK; UINT32 ExpectedCount; UINT32 Count; UINT32 i; ACPI_FUNCTION_TRACE (NsCheckPackage); /* The package info for this name is in the next table entry */ Package = Info->Predefined + 1; ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s Validating return Package of Type %X, Count %X\n", Info->FullPathname, Package->RetInfo.Type, ReturnObject->Package.Count)); /* * For variable-length Packages, we can safely remove all embedded * and trailing NULL package elements */ AcpiNsRemoveNullElements (Info, Package->RetInfo.Type, ReturnObject); /* Extract package count and elements array */ Elements = ReturnObject->Package.Elements; Count = ReturnObject->Package.Count; /* * Most packages must have at least one element. The only exception * is the variable-length package (ACPI_PTYPE1_VAR). */ if (!Count) { if (Package->RetInfo.Type == ACPI_PTYPE1_VAR) { return_ACPI_STATUS (AE_OK); } ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Return Package has no elements (empty)")); return_ACPI_STATUS (AE_AML_OPERAND_VALUE); } /* * Decode the type of the expected package contents * * PTYPE1 packages contain no subpackages * PTYPE2 packages contain subpackages */ switch (Package->RetInfo.Type) { case ACPI_PTYPE_CUSTOM: Status = AcpiNsCustomPackage (Info, Elements, Count); break; case ACPI_PTYPE1_FIXED: /* * The package count is fixed and there are no subpackages * * If package is too small, exit. * If package is larger than expected, issue warning but continue */ ExpectedCount = Package->RetInfo.Count1 + Package->RetInfo.Count2; if (Count < ExpectedCount) { goto PackageTooSmall; } else if (Count > ExpectedCount) { ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, "%s: Return Package is larger than needed - " "found %u, expected %u\n", Info->FullPathname, Count, ExpectedCount)); } /* Validate all elements of the returned package */ Status = AcpiNsCheckPackageElements (Info, Elements, Package->RetInfo.ObjectType1, Package->RetInfo.Count1, Package->RetInfo.ObjectType2, Package->RetInfo.Count2, 0); break; case ACPI_PTYPE1_VAR: /* * The package count is variable, there are no subpackages, and all * elements must be of the same type */ for (i = 0; i < Count; i++) { Status = AcpiNsCheckObjectType (Info, Elements, Package->RetInfo.ObjectType1, i); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Elements++; } break; case ACPI_PTYPE1_OPTION: /* * The package count is variable, there are no subpackages. There are * a fixed number of required elements, and a variable number of * optional elements. * * Check if package is at least as large as the minimum required */ ExpectedCount = Package->RetInfo3.Count; if (Count < ExpectedCount) { goto PackageTooSmall; } /* Variable number of sub-objects */ for (i = 0; i < Count; i++) { if (i < Package->RetInfo3.Count) { /* These are the required package elements (0, 1, or 2) */ Status = AcpiNsCheckObjectType (Info, Elements, Package->RetInfo3.ObjectType[i], i); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } else { /* These are the optional package elements */ Status = AcpiNsCheckObjectType (Info, Elements, Package->RetInfo3.TailObjectType, i); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } Elements++; } break; case ACPI_PTYPE2_REV_FIXED: /* First element is the (Integer) revision */ Status = AcpiNsCheckObjectType ( Info, Elements, ACPI_RTYPE_INTEGER, 0); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Elements++; Count--; /* Examine the subpackages */ Status = AcpiNsCheckPackageList (Info, Package, Elements, Count); break; case ACPI_PTYPE2_PKG_COUNT: /* First element is the (Integer) count of subpackages to follow */ Status = AcpiNsCheckObjectType ( Info, Elements, ACPI_RTYPE_INTEGER, 0); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Count cannot be larger than the parent package length, but allow it * to be smaller. The >= accounts for the Integer above. */ ExpectedCount = (UINT32) (*Elements)->Integer.Value; if (ExpectedCount >= Count) { goto PackageTooSmall; } Count = ExpectedCount; Elements++; /* Examine the subpackages */ Status = AcpiNsCheckPackageList (Info, Package, Elements, Count); break; case ACPI_PTYPE2: case ACPI_PTYPE2_FIXED: case ACPI_PTYPE2_MIN: case ACPI_PTYPE2_COUNT: case ACPI_PTYPE2_FIX_VAR: /* * These types all return a single Package that consists of a * variable number of subpackages. * * First, ensure that the first element is a subpackage. If not, * the BIOS may have incorrectly returned the object as a single * package instead of a Package of Packages (a common error if * there is only one entry). We may be able to repair this by * wrapping the returned Package with a new outer Package. */ if (*Elements && ((*Elements)->Common.Type != ACPI_TYPE_PACKAGE)) { /* Create the new outer package and populate it */ Status = AcpiNsWrapWithPackage ( Info, ReturnObject, ReturnObjectPtr); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Update locals to point to the new package (of 1 element) */ ReturnObject = *ReturnObjectPtr; Elements = ReturnObject->Package.Elements; Count = 1; } /* Examine the subpackages */ Status = AcpiNsCheckPackageList (Info, Package, Elements, Count); break; case ACPI_PTYPE2_VAR_VAR: /* * Returns a variable list of packages, each with a variable list * of objects. */ break; case ACPI_PTYPE2_UUID_PAIR: /* The package must contain pairs of (UUID + type) */ if (Count & 1) { ExpectedCount = Count + 1; goto PackageTooSmall; } while (Count > 0) { Status = AcpiNsCheckObjectType(Info, Elements, Package->RetInfo.ObjectType1, 0); if (ACPI_FAILURE(Status)) { return_ACPI_STATUS (Status); } /* Validate length of the UUID buffer */ if ((*Elements)->Buffer.Length != 16) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Invalid length for UUID Buffer")); return_ACPI_STATUS (AE_AML_OPERAND_VALUE); } Status = AcpiNsCheckObjectType(Info, Elements + 1, Package->RetInfo.ObjectType2, 0); if (ACPI_FAILURE(Status)) { return_ACPI_STATUS (Status); } Elements += 2; Count -= 2; } break; default: /* Should not get here if predefined info table is correct */ ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Invalid internal return type in table entry: %X", Package->RetInfo.Type)); return_ACPI_STATUS (AE_AML_INTERNAL); } return_ACPI_STATUS (Status); PackageTooSmall: /* Error exit for the case with an incorrect package count */ ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Return Package is too small - found %u elements, expected %u", Count, ExpectedCount)); return_ACPI_STATUS (AE_AML_OPERAND_VALUE); } /******************************************************************************* * * FUNCTION: AcpiNsCheckPackageList * * PARAMETERS: Info - Method execution information block * Package - Pointer to package-specific info for method * Elements - Element list of parent package. All elements * of this list should be of type Package. * Count - Count of subpackages * * RETURN: Status * * DESCRIPTION: Examine a list of subpackages * ******************************************************************************/ static ACPI_STATUS AcpiNsCheckPackageList ( ACPI_EVALUATE_INFO *Info, const ACPI_PREDEFINED_INFO *Package, ACPI_OPERAND_OBJECT **Elements, UINT32 Count) { ACPI_OPERAND_OBJECT *SubPackage; ACPI_OPERAND_OBJECT **SubElements; ACPI_STATUS Status; UINT32 ExpectedCount; UINT32 i; UINT32 j; /* * Validate each subpackage in the parent Package * * NOTE: assumes list of subpackages contains no NULL elements. * Any NULL elements should have been removed by earlier call * to AcpiNsRemoveNullElements. */ for (i = 0; i < Count; i++) { SubPackage = *Elements; SubElements = SubPackage->Package.Elements; Info->ParentPackage = SubPackage; /* Each sub-object must be of type Package */ Status = AcpiNsCheckObjectType (Info, &SubPackage, ACPI_RTYPE_PACKAGE, i); if (ACPI_FAILURE (Status)) { return (Status); } /* Examine the different types of expected subpackages */ Info->ParentPackage = SubPackage; switch (Package->RetInfo.Type) { case ACPI_PTYPE2: case ACPI_PTYPE2_PKG_COUNT: case ACPI_PTYPE2_REV_FIXED: /* Each subpackage has a fixed number of elements */ ExpectedCount = Package->RetInfo.Count1 + Package->RetInfo.Count2; if (SubPackage->Package.Count < ExpectedCount) { goto PackageTooSmall; } Status = AcpiNsCheckPackageElements (Info, SubElements, Package->RetInfo.ObjectType1, Package->RetInfo.Count1, Package->RetInfo.ObjectType2, Package->RetInfo.Count2, 0); if (ACPI_FAILURE (Status)) { return (Status); } break; case ACPI_PTYPE2_FIX_VAR: /* * Each subpackage has a fixed number of elements and an * optional element */ ExpectedCount = Package->RetInfo.Count1 + Package->RetInfo.Count2; if (SubPackage->Package.Count < ExpectedCount) { goto PackageTooSmall; } Status = AcpiNsCheckPackageElements (Info, SubElements, Package->RetInfo.ObjectType1, Package->RetInfo.Count1, Package->RetInfo.ObjectType2, SubPackage->Package.Count - Package->RetInfo.Count1, 0); if (ACPI_FAILURE (Status)) { return (Status); } break; case ACPI_PTYPE2_VAR_VAR: /* * Each subpackage has a fixed or variable number of elements */ break; case ACPI_PTYPE2_FIXED: /* Each subpackage has a fixed length */ ExpectedCount = Package->RetInfo2.Count; if (SubPackage->Package.Count < ExpectedCount) { goto PackageTooSmall; } /* Check the type of each subpackage element */ for (j = 0; j < ExpectedCount; j++) { Status = AcpiNsCheckObjectType (Info, &SubElements[j], Package->RetInfo2.ObjectType[j], j); if (ACPI_FAILURE (Status)) { return (Status); } } break; case ACPI_PTYPE2_MIN: /* Each subpackage has a variable but minimum length */ ExpectedCount = Package->RetInfo.Count1; if (SubPackage->Package.Count < ExpectedCount) { goto PackageTooSmall; } /* Check the type of each subpackage element */ Status = AcpiNsCheckPackageElements (Info, SubElements, Package->RetInfo.ObjectType1, SubPackage->Package.Count, 0, 0, 0); if (ACPI_FAILURE (Status)) { return (Status); } break; case ACPI_PTYPE2_COUNT: /* * First element is the (Integer) count of elements, including * the count field (the ACPI name is NumElements) */ Status = AcpiNsCheckObjectType (Info, SubElements, ACPI_RTYPE_INTEGER, 0); if (ACPI_FAILURE (Status)) { return (Status); } /* * Make sure package is large enough for the Count and is * is as large as the minimum size */ ExpectedCount = (UINT32) (*SubElements)->Integer.Value; if (SubPackage->Package.Count < ExpectedCount) { goto PackageTooSmall; } if (SubPackage->Package.Count < Package->RetInfo.Count1) { ExpectedCount = Package->RetInfo.Count1; goto PackageTooSmall; } if (ExpectedCount == 0) { /* * Either the NumEntries element was originally zero or it was * a NULL element and repaired to an Integer of value zero. * In either case, repair it by setting NumEntries to be the * actual size of the subpackage. */ ExpectedCount = SubPackage->Package.Count; (*SubElements)->Integer.Value = ExpectedCount; } /* Check the type of each subpackage element */ Status = AcpiNsCheckPackageElements (Info, (SubElements + 1), Package->RetInfo.ObjectType1, (ExpectedCount - 1), 0, 0, 1); if (ACPI_FAILURE (Status)) { return (Status); } break; default: /* Should not get here, type was validated by caller */ ACPI_ERROR ((AE_INFO, "Invalid Package type: %X", Package->RetInfo.Type)); return (AE_AML_INTERNAL); } Elements++; } return (AE_OK); PackageTooSmall: /* The subpackage count was smaller than required */ ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Return SubPackage[%u] is too small - found %u elements, expected %u", i, SubPackage->Package.Count, ExpectedCount)); return (AE_AML_OPERAND_VALUE); } /******************************************************************************* * * FUNCTION: AcpiNsCustomPackage * * PARAMETERS: Info - Method execution information block * Elements - Pointer to the package elements array * Count - Element count for the package * * RETURN: Status * * DESCRIPTION: Check a returned package object for the correct count and * correct type of all sub-objects. * * NOTE: Currently used for the _BIX method only. When needed for two or more * methods, probably a detect/dispatch mechanism will be required. * ******************************************************************************/ static ACPI_STATUS AcpiNsCustomPackage ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **Elements, UINT32 Count) { UINT32 ExpectedCount; UINT32 Version; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_NAME (NsCustomPackage); /* Get version number, must be Integer */ if ((*Elements)->Common.Type != ACPI_TYPE_INTEGER) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Return Package has invalid object type for version number")); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } Version = (UINT32) (*Elements)->Integer.Value; ExpectedCount = 21; /* Version 1 */ if (Version == 0) { ExpectedCount = 20; /* Version 0 */ } if (Count < ExpectedCount) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Return Package is too small - found %u elements, expected %u", Count, ExpectedCount)); return_ACPI_STATUS (AE_AML_OPERAND_VALUE); } else if (Count > ExpectedCount) { ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, "%s: Return Package is larger than needed - " "found %u, expected %u\n", Info->FullPathname, Count, ExpectedCount)); } /* Validate all elements of the returned package */ Status = AcpiNsCheckPackageElements (Info, Elements, ACPI_RTYPE_INTEGER, 16, ACPI_RTYPE_STRING, 4, 0); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Version 1 has a single trailing integer */ if (Version > 0) { Status = AcpiNsCheckPackageElements (Info, Elements + 20, ACPI_RTYPE_INTEGER, 1, 0, 0, 20); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiNsCheckPackageElements * * PARAMETERS: Info - Method execution information block * Elements - Pointer to the package elements array * Type1 - Object type for first group * Count1 - Count for first group * Type2 - Object type for second group * Count2 - Count for second group * StartIndex - Start of the first group of elements * * RETURN: Status * * DESCRIPTION: Check that all elements of a package are of the correct object * type. Supports up to two groups of different object types. * ******************************************************************************/ static ACPI_STATUS AcpiNsCheckPackageElements ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **Elements, UINT8 Type1, UINT32 Count1, UINT8 Type2, UINT32 Count2, UINT32 StartIndex) { ACPI_OPERAND_OBJECT **ThisElement = Elements; ACPI_STATUS Status; UINT32 i; ACPI_FUNCTION_TRACE (NsCheckPackageElements); /* * Up to two groups of package elements are supported by the data * structure. All elements in each group must be of the same type. * The second group can have a count of zero. */ for (i = 0; i < Count1; i++) { Status = AcpiNsCheckObjectType (Info, ThisElement, Type1, i + StartIndex); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ThisElement++; } for (i = 0; i < Count2; i++) { Status = AcpiNsCheckObjectType (Info, ThisElement, Type2, (i + Count1 + StartIndex)); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ThisElement++; } return_ACPI_STATUS (AE_OK); } src/acpica/source/components/namespace/nsrepair.c000066400000000000000000000644431465205512700225170ustar00rootroot00000000000000/****************************************************************************** * * Module Name: nsrepair - Repair for objects returned by predefined methods * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acinterp.h" #include "acpredef.h" #include "amlresrc.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsrepair") /******************************************************************************* * * This module attempts to repair or convert objects returned by the * predefined methods to an object type that is expected, as per the ACPI * specification. The need for this code is dictated by the many machines that * return incorrect types for the standard predefined methods. Performing these * conversions here, in one place, eliminates the need for individual ACPI * device drivers to do the same. Note: Most of these conversions are different * than the internal object conversion routines used for implicit object * conversion. * * The following conversions can be performed as necessary: * * Integer -> String * Integer -> Buffer * String -> Integer * String -> Buffer * Buffer -> Integer * Buffer -> String * Buffer -> Package of Integers * Package -> Package of one Package * * Additional conversions that are available: * Convert a null return or zero return value to an EndTag descriptor * Convert an ASCII string to a Unicode buffer * * An incorrect standalone object is wrapped with required outer package * * Additional possible repairs: * Required package elements that are NULL replaced by Integer/String/Buffer * ******************************************************************************/ /* Local prototypes */ static const ACPI_SIMPLE_REPAIR_INFO * AcpiNsMatchSimpleRepair ( ACPI_NAMESPACE_NODE *Node, UINT32 ReturnBtype, UINT32 PackageIndex); /* * Special but simple repairs for some names. * * 2nd argument: Unexpected types that can be repaired */ static const ACPI_SIMPLE_REPAIR_INFO AcpiObjectRepairInfo[] = { /* Resource descriptor conversions */ { "_CRS", ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | ACPI_RTYPE_BUFFER | ACPI_RTYPE_NONE, ACPI_NOT_PACKAGE_ELEMENT, AcpiNsConvertToResource }, { "_DMA", ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | ACPI_RTYPE_BUFFER | ACPI_RTYPE_NONE, ACPI_NOT_PACKAGE_ELEMENT, AcpiNsConvertToResource }, { "_PRS", ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | ACPI_RTYPE_BUFFER | ACPI_RTYPE_NONE, ACPI_NOT_PACKAGE_ELEMENT, AcpiNsConvertToResource }, /* Object reference conversions */ { "_DEP", ACPI_RTYPE_STRING, ACPI_ALL_PACKAGE_ELEMENTS, AcpiNsConvertToReference }, /* Unicode conversions */ { "_MLS", ACPI_RTYPE_STRING, 1, AcpiNsConvertToUnicode }, { "_STR", ACPI_RTYPE_STRING | ACPI_RTYPE_BUFFER, ACPI_NOT_PACKAGE_ELEMENT, AcpiNsConvertToUnicode }, { {0,0,0,0}, 0, 0, NULL } /* Table terminator */ }; /******************************************************************************* * * FUNCTION: AcpiNsSimpleRepair * * PARAMETERS: Info - Method execution information block * ExpectedBtypes - Object types expected * PackageIndex - Index of object within parent package (if * applicable - ACPI_NOT_PACKAGE_ELEMENT * otherwise) * ReturnObjectPtr - Pointer to the object returned from the * evaluation of a method or object * * RETURN: Status. AE_OK if repair was successful. * * DESCRIPTION: Attempt to repair/convert a return object of a type that was * not expected. * ******************************************************************************/ ACPI_STATUS AcpiNsSimpleRepair ( ACPI_EVALUATE_INFO *Info, UINT32 ExpectedBtypes, UINT32 PackageIndex, ACPI_OPERAND_OBJECT **ReturnObjectPtr) { ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; ACPI_OPERAND_OBJECT *NewObject = NULL; ACPI_STATUS Status; const ACPI_SIMPLE_REPAIR_INFO *Predefined; ACPI_FUNCTION_NAME (NsSimpleRepair); /* * Special repairs for certain names that are in the repair table. * Check if this name is in the list of repairable names. */ Predefined = AcpiNsMatchSimpleRepair (Info->Node, Info->ReturnBtype, PackageIndex); if (Predefined) { if (!ReturnObject) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, ACPI_WARN_ALWAYS, "Missing expected return value")); } Status = Predefined->ObjectConverter (Info->Node, ReturnObject, &NewObject); if (ACPI_FAILURE (Status)) { /* A fatal error occurred during a conversion */ ACPI_EXCEPTION ((AE_INFO, Status, "During return object analysis")); return (Status); } if (NewObject) { goto ObjectRepaired; } } /* * Do not perform simple object repair unless the return type is not * expected. */ if (Info->ReturnBtype & ExpectedBtypes) { return (AE_OK); } /* * At this point, we know that the type of the returned object was not * one of the expected types for this predefined name. Attempt to * repair the object by converting it to one of the expected object * types for this predefined name. */ /* * If there is no return value, check if we require a return value for * this predefined name. Either one return value is expected, or none, * for both methods and other objects. * * Try to fix if there was no return object. Warning if failed to fix. */ if (!ReturnObject) { if (ExpectedBtypes) { if (!(ExpectedBtypes & ACPI_RTYPE_NONE) && PackageIndex != ACPI_NOT_PACKAGE_ELEMENT) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, ACPI_WARN_ALWAYS, "Found unexpected NULL package element")); Status = AcpiNsRepairNullElement (Info, ExpectedBtypes, PackageIndex, ReturnObjectPtr); if (ACPI_SUCCESS (Status)) { return (AE_OK); /* Repair was successful */ } } if (ExpectedBtypes != ACPI_RTYPE_NONE) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, ACPI_WARN_ALWAYS, "Missing expected return value")); return (AE_AML_NO_RETURN_VALUE); } } } if (ExpectedBtypes & ACPI_RTYPE_INTEGER) { Status = AcpiNsConvertToInteger (ReturnObject, &NewObject); if (ACPI_SUCCESS (Status)) { goto ObjectRepaired; } } if (ExpectedBtypes & ACPI_RTYPE_STRING) { Status = AcpiNsConvertToString (ReturnObject, &NewObject); if (ACPI_SUCCESS (Status)) { goto ObjectRepaired; } } if (ExpectedBtypes & ACPI_RTYPE_BUFFER) { Status = AcpiNsConvertToBuffer (ReturnObject, &NewObject); if (ACPI_SUCCESS (Status)) { goto ObjectRepaired; } } if (ExpectedBtypes & ACPI_RTYPE_PACKAGE) { /* * A package is expected. We will wrap the existing object with a * new package object. It is often the case that if a variable-length * package is required, but there is only a single object needed, the * BIOS will return that object instead of wrapping it with a Package * object. Note: after the wrapping, the package will be validated * for correct contents (expected object type or types). */ Status = AcpiNsWrapWithPackage (Info, ReturnObject, &NewObject); if (ACPI_SUCCESS (Status)) { /* * The original object just had its reference count * incremented for being inserted into the new package. */ *ReturnObjectPtr = NewObject; /* New Package object */ Info->ReturnFlags |= ACPI_OBJECT_REPAIRED; return (AE_OK); } } /* We cannot repair this object */ return (AE_AML_OPERAND_TYPE); ObjectRepaired: /* Object was successfully repaired */ if (PackageIndex != ACPI_NOT_PACKAGE_ELEMENT) { /* Update reference count of new object */ if (!(Info->ReturnFlags & ACPI_OBJECT_WRAPPED)) { NewObject->Common.ReferenceCount = ReturnObject->Common.ReferenceCount; } ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, "%s: Converted %s to expected %s at Package index %u\n", Info->FullPathname, AcpiUtGetObjectTypeName (ReturnObject), AcpiUtGetObjectTypeName (NewObject), PackageIndex)); } else { ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, "%s: Converted %s to expected %s\n", Info->FullPathname, AcpiUtGetObjectTypeName (ReturnObject), AcpiUtGetObjectTypeName (NewObject))); } /* Delete old object, install the new return object */ AcpiUtRemoveReference (ReturnObject); *ReturnObjectPtr = NewObject; Info->ReturnFlags |= ACPI_OBJECT_REPAIRED; return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiNsMatchSimpleRepair * * PARAMETERS: Node - Namespace node for the method/object * ReturnBtype - Object type that was returned * PackageIndex - Index of object within parent package (if * applicable - ACPI_NOT_PACKAGE_ELEMENT * otherwise) * * RETURN: Pointer to entry in repair table. NULL indicates not found. * * DESCRIPTION: Check an object name against the repairable object list. * *****************************************************************************/ static const ACPI_SIMPLE_REPAIR_INFO * AcpiNsMatchSimpleRepair ( ACPI_NAMESPACE_NODE *Node, UINT32 ReturnBtype, UINT32 PackageIndex) { const ACPI_SIMPLE_REPAIR_INFO *ThisName; /* Search info table for a repairable predefined method/object name */ ThisName = AcpiObjectRepairInfo; while (ThisName->ObjectConverter) { if (ACPI_COMPARE_NAMESEG (Node->Name.Ascii, ThisName->Name)) { /* Check if we can actually repair this name/type combination */ if ((ReturnBtype & ThisName->UnexpectedBtypes) && (ThisName->PackageIndex == ACPI_ALL_PACKAGE_ELEMENTS || PackageIndex == ThisName->PackageIndex)) { return (ThisName); } return (NULL); } ThisName++; } return (NULL); /* Name was not found in the repair table */ } /******************************************************************************* * * FUNCTION: AcpiNsRepairNullElement * * PARAMETERS: Info - Method execution information block * ExpectedBtypes - Object types expected * PackageIndex - Index of object within parent package (if * applicable - ACPI_NOT_PACKAGE_ELEMENT * otherwise) * ReturnObjectPtr - Pointer to the object returned from the * evaluation of a method or object * * RETURN: Status. AE_OK if repair was successful. * * DESCRIPTION: Attempt to repair a NULL element of a returned Package object. * ******************************************************************************/ ACPI_STATUS AcpiNsRepairNullElement ( ACPI_EVALUATE_INFO *Info, UINT32 ExpectedBtypes, UINT32 PackageIndex, ACPI_OPERAND_OBJECT **ReturnObjectPtr) { ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; ACPI_OPERAND_OBJECT *NewObject; ACPI_FUNCTION_NAME (NsRepairNullElement); /* No repair needed if return object is non-NULL */ if (ReturnObject) { return (AE_OK); } /* * Attempt to repair a NULL element of a Package object. This applies to * predefined names that return a fixed-length package and each element * is required. It does not apply to variable-length packages where NULL * elements are allowed, especially at the end of the package. */ if (ExpectedBtypes & ACPI_RTYPE_INTEGER) { /* Need an Integer - create a zero-value integer */ NewObject = AcpiUtCreateIntegerObject ((UINT64) 0); } else if (ExpectedBtypes & ACPI_RTYPE_STRING) { /* Need a String - create a NULL string */ NewObject = AcpiUtCreateStringObject (0); } else if (ExpectedBtypes & ACPI_RTYPE_BUFFER) { /* Need a Buffer - create a zero-length buffer */ NewObject = AcpiUtCreateBufferObject (0); } else { /* Error for all other expected types */ return (AE_AML_OPERAND_TYPE); } if (!NewObject) { return (AE_NO_MEMORY); } /* Set the reference count according to the parent Package object */ NewObject->Common.ReferenceCount = Info->ParentPackage->Common.ReferenceCount; ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, "%s: Converted NULL package element to expected %s at index %u\n", Info->FullPathname, AcpiUtGetObjectTypeName (NewObject), PackageIndex)); *ReturnObjectPtr = NewObject; Info->ReturnFlags |= ACPI_OBJECT_REPAIRED; return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiNsRemoveNullElements * * PARAMETERS: Info - Method execution information block * PackageType - An AcpiReturnPackageTypes value * ObjDesc - A Package object * * RETURN: None. * * DESCRIPTION: Remove all NULL package elements from packages that contain * a variable number of subpackages. For these types of * packages, NULL elements can be safely removed. * *****************************************************************************/ void AcpiNsRemoveNullElements ( ACPI_EVALUATE_INFO *Info, UINT8 PackageType, ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_OPERAND_OBJECT **Source; ACPI_OPERAND_OBJECT **Dest; UINT32 Count; UINT32 NewCount; UINT32 i; ACPI_FUNCTION_NAME (NsRemoveNullElements); /* * We can safely remove all NULL elements from these package types: * PTYPE1_VAR packages contain a variable number of simple data types. * PTYPE2 packages contain a variable number of subpackages. */ switch (PackageType) { case ACPI_PTYPE1_VAR: case ACPI_PTYPE2: case ACPI_PTYPE2_COUNT: case ACPI_PTYPE2_PKG_COUNT: case ACPI_PTYPE2_FIXED: case ACPI_PTYPE2_MIN: case ACPI_PTYPE2_REV_FIXED: case ACPI_PTYPE2_FIX_VAR: break; default: case ACPI_PTYPE2_VAR_VAR: case ACPI_PTYPE1_FIXED: case ACPI_PTYPE1_OPTION: return; } Count = ObjDesc->Package.Count; NewCount = Count; Source = ObjDesc->Package.Elements; Dest = Source; /* Examine all elements of the package object, remove nulls */ for (i = 0; i < Count; i++) { if (!*Source) { NewCount--; } else { *Dest = *Source; Dest++; } Source++; } /* Update parent package if any null elements were removed */ if (NewCount < Count) { ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, "%s: Found and removed %u NULL elements\n", Info->FullPathname, (Count - NewCount))); /* NULL terminate list and update the package count */ *Dest = NULL; ObjDesc->Package.Count = NewCount; } } /******************************************************************************* * * FUNCTION: AcpiNsWrapWithPackage * * PARAMETERS: Info - Method execution information block * OriginalObject - Pointer to the object to repair. * ObjDescPtr - The new package object is returned here * * RETURN: Status, new object in *ObjDescPtr * * DESCRIPTION: Repair a common problem with objects that are defined to * return a variable-length Package of sub-objects. If there is * only one sub-object, some BIOS code mistakenly simply declares * the single object instead of a Package with one sub-object. * This function attempts to repair this error by wrapping a * Package object around the original object, creating the * correct and expected Package with one sub-object. * * Names that can be repaired in this manner include: * _ALR, _CSD, _HPX, _MLS, _PLD, _PRT, _PSS, _TRT, _TSS, * _BCL, _DOD, _FIX, _Sx * ******************************************************************************/ ACPI_STATUS AcpiNsWrapWithPackage ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT *OriginalObject, ACPI_OPERAND_OBJECT **ObjDescPtr) { ACPI_OPERAND_OBJECT *PkgObjDesc; ACPI_FUNCTION_NAME (NsWrapWithPackage); /* * Create the new outer package and populate it. The new * package will have a single element, the lone sub-object. */ PkgObjDesc = AcpiUtCreatePackageObject (1); if (!PkgObjDesc) { return (AE_NO_MEMORY); } PkgObjDesc->Package.Elements[0] = OriginalObject; ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, "%s: Wrapped %s with expected Package object\n", Info->FullPathname, AcpiUtGetObjectTypeName (OriginalObject))); /* Return the new object in the object pointer */ *ObjDescPtr = PkgObjDesc; Info->ReturnFlags |= ACPI_OBJECT_REPAIRED | ACPI_OBJECT_WRAPPED; return (AE_OK); } src/acpica/source/components/namespace/nsrepair2.c000066400000000000000000001161461465205512700225770ustar00rootroot00000000000000/****************************************************************************** * * Module Name: nsrepair2 - Repair for objects returned by specific * predefined methods * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsrepair2") /* * Information structure and handler for ACPI predefined names that can * be repaired on a per-name basis. */ typedef ACPI_STATUS (*ACPI_REPAIR_FUNCTION) ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr); typedef struct acpi_repair_info { char Name[ACPI_NAMESEG_SIZE]; ACPI_REPAIR_FUNCTION RepairFunction; } ACPI_REPAIR_INFO; /* Local prototypes */ static const ACPI_REPAIR_INFO * AcpiNsMatchComplexRepair ( ACPI_NAMESPACE_NODE *Node); static ACPI_STATUS AcpiNsRepair_ALR ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr); static ACPI_STATUS AcpiNsRepair_CID ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr); static ACPI_STATUS AcpiNsRepair_CST ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr); static ACPI_STATUS AcpiNsRepair_FDE ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr); static ACPI_STATUS AcpiNsRepair_HID ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr); static ACPI_STATUS AcpiNsRepair_PRT ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr); static ACPI_STATUS AcpiNsRepair_PSS ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr); static ACPI_STATUS AcpiNsRepair_TSS ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr); static ACPI_STATUS AcpiNsCheckSortedList ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT *ReturnObject, UINT32 StartIndex, UINT32 ExpectedCount, UINT32 SortIndex, UINT8 SortDirection, char *SortKeyName); /* Values for SortDirection above */ #define ACPI_SORT_ASCENDING 0 #define ACPI_SORT_DESCENDING 1 static void AcpiNsRemoveElement ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 Index); static void AcpiNsSortList ( ACPI_OPERAND_OBJECT **Elements, UINT32 Count, UINT32 Index, UINT8 SortDirection); /* * This table contains the names of the predefined methods for which we can * perform more complex repairs. * * As necessary: * * _ALR: Sort the list ascending by AmbientIlluminance * _CID: Strings: uppercase all, remove any leading asterisk * _CST: Sort the list ascending by C state type * _FDE: Convert Buffer of BYTEs to a Buffer of DWORDs * _GTM: Convert Buffer of BYTEs to a Buffer of DWORDs * _HID: Strings: uppercase all, remove any leading asterisk * _PRT: Fix reversed SourceName and SourceIndex * _PSS: Sort the list descending by Power * _TSS: Sort the list descending by Power * * Names that must be packages, but cannot be sorted: * * _BCL: Values are tied to the Package index where they appear, and cannot * be moved or sorted. These index values are used for _BQC and _BCM. * However, we can fix the case where a buffer is returned, by converting * it to a Package of integers. */ static const ACPI_REPAIR_INFO AcpiNsRepairableNames[] = { {"_ALR", AcpiNsRepair_ALR}, {"_CID", AcpiNsRepair_CID}, {"_CST", AcpiNsRepair_CST}, {"_FDE", AcpiNsRepair_FDE}, {"_GTM", AcpiNsRepair_FDE}, /* _GTM has same repair as _FDE */ {"_HID", AcpiNsRepair_HID}, {"_PRT", AcpiNsRepair_PRT}, {"_PSS", AcpiNsRepair_PSS}, {"_TSS", AcpiNsRepair_TSS}, {{0,0,0,0}, NULL} /* Table terminator */ }; #define ACPI_FDE_FIELD_COUNT 5 #define ACPI_FDE_BYTE_BUFFER_SIZE 5 #define ACPI_FDE_DWORD_BUFFER_SIZE (ACPI_FDE_FIELD_COUNT * (UINT32) sizeof (UINT32)) /****************************************************************************** * * FUNCTION: AcpiNsComplexRepairs * * PARAMETERS: Info - Method execution information block * Node - Namespace node for the method/object * ValidateStatus - Original status of earlier validation * ReturnObjectPtr - Pointer to the object returned from the * evaluation of a method or object * * RETURN: Status. AE_OK if repair was successful. If name is not * matched, ValidateStatus is returned. * * DESCRIPTION: Attempt to repair/convert a return object of a type that was * not expected. * *****************************************************************************/ ACPI_STATUS AcpiNsComplexRepairs ( ACPI_EVALUATE_INFO *Info, ACPI_NAMESPACE_NODE *Node, ACPI_STATUS ValidateStatus, ACPI_OPERAND_OBJECT **ReturnObjectPtr) { const ACPI_REPAIR_INFO *Predefined; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (NsComplexRepairs); /* Check if this name is in the list of repairable names */ Predefined = AcpiNsMatchComplexRepair (Node); if (!Predefined) { return_ACPI_STATUS (ValidateStatus); } Status = Predefined->RepairFunction (Info, ReturnObjectPtr); return_ACPI_STATUS (Status); } /****************************************************************************** * * FUNCTION: AcpiNsMatchComplexRepair * * PARAMETERS: Node - Namespace node for the method/object * * RETURN: Pointer to entry in repair table. NULL indicates not found. * * DESCRIPTION: Check an object name against the repairable object list. * *****************************************************************************/ static const ACPI_REPAIR_INFO * AcpiNsMatchComplexRepair ( ACPI_NAMESPACE_NODE *Node) { const ACPI_REPAIR_INFO *ThisName; /* Search info table for a repairable predefined method/object name */ ThisName = AcpiNsRepairableNames; while (ThisName->RepairFunction) { if (ACPI_COMPARE_NAMESEG (Node->Name.Ascii, ThisName->Name)) { return (ThisName); } ThisName++; } return (NULL); /* Not found */ } /****************************************************************************** * * FUNCTION: AcpiNsRepair_ALR * * PARAMETERS: Info - Method execution information block * ReturnObjectPtr - Pointer to the object returned from the * evaluation of a method or object * * RETURN: Status. AE_OK if object is OK or was repaired successfully * * DESCRIPTION: Repair for the _ALR object. If necessary, sort the object list * ascending by the ambient illuminance values. * *****************************************************************************/ static ACPI_STATUS AcpiNsRepair_ALR ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr) { ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; ACPI_STATUS Status; Status = AcpiNsCheckSortedList (Info, ReturnObject, 0, 2, 1, ACPI_SORT_ASCENDING, "AmbientIlluminance"); return (Status); } /****************************************************************************** * * FUNCTION: AcpiNsRepair_FDE * * PARAMETERS: Info - Method execution information block * ReturnObjectPtr - Pointer to the object returned from the * evaluation of a method or object * * RETURN: Status. AE_OK if object is OK or was repaired successfully * * DESCRIPTION: Repair for the _FDE and _GTM objects. The expected return * value is a Buffer of 5 DWORDs. This function repairs a common * problem where the return value is a Buffer of BYTEs, not * DWORDs. * *****************************************************************************/ static ACPI_STATUS AcpiNsRepair_FDE ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr) { ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; ACPI_OPERAND_OBJECT *BufferObject; UINT8 *ByteBuffer; UINT32 *DwordBuffer; UINT32 i; ACPI_FUNCTION_NAME (NsRepair_FDE); switch (ReturnObject->Common.Type) { case ACPI_TYPE_BUFFER: /* This is the expected type. Length should be (at least) 5 DWORDs */ if (ReturnObject->Buffer.Length >= ACPI_FDE_DWORD_BUFFER_SIZE) { return (AE_OK); } /* We can only repair if we have exactly 5 BYTEs */ if (ReturnObject->Buffer.Length != ACPI_FDE_BYTE_BUFFER_SIZE) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Incorrect return buffer length %u, expected %u", ReturnObject->Buffer.Length, ACPI_FDE_DWORD_BUFFER_SIZE)); return (AE_AML_OPERAND_TYPE); } /* Create the new (larger) buffer object */ BufferObject = AcpiUtCreateBufferObject ( ACPI_FDE_DWORD_BUFFER_SIZE); if (!BufferObject) { return (AE_NO_MEMORY); } /* Expand each byte to a DWORD */ ByteBuffer = ReturnObject->Buffer.Pointer; DwordBuffer = ACPI_CAST_PTR (UINT32, BufferObject->Buffer.Pointer); for (i = 0; i < ACPI_FDE_FIELD_COUNT; i++) { *DwordBuffer = (UINT32) *ByteBuffer; DwordBuffer++; ByteBuffer++; } ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, "%s Expanded Byte Buffer to expected DWord Buffer\n", Info->FullPathname)); break; default: return (AE_AML_OPERAND_TYPE); } /* Delete the original return object, return the new buffer object */ AcpiUtRemoveReference (ReturnObject); *ReturnObjectPtr = BufferObject; Info->ReturnFlags |= ACPI_OBJECT_REPAIRED; return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiNsRepair_CID * * PARAMETERS: Info - Method execution information block * ReturnObjectPtr - Pointer to the object returned from the * evaluation of a method or object * * RETURN: Status. AE_OK if object is OK or was repaired successfully * * DESCRIPTION: Repair for the _CID object. If a string, ensure that all * letters are uppercase and that there is no leading asterisk. * If a Package, ensure same for all string elements. * *****************************************************************************/ static ACPI_STATUS AcpiNsRepair_CID ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr) { ACPI_STATUS Status; ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; ACPI_OPERAND_OBJECT **ElementPtr; ACPI_OPERAND_OBJECT *OriginalElement; UINT16 OriginalRefCount; UINT32 i; ACPI_FUNCTION_TRACE (NsRepair_CID); /* Check for _CID as a simple string */ if (ReturnObject->Common.Type == ACPI_TYPE_STRING) { Status = AcpiNsRepair_HID (Info, ReturnObjectPtr); return_ACPI_STATUS (Status); } /* Exit if not a Package */ if (ReturnObject->Common.Type != ACPI_TYPE_PACKAGE) { return_ACPI_STATUS (AE_OK); } /* Examine each element of the _CID package */ ElementPtr = ReturnObject->Package.Elements; for (i = 0; i < ReturnObject->Package.Count; i++) { OriginalElement = *ElementPtr; OriginalRefCount = OriginalElement->Common.ReferenceCount; Status = AcpiNsRepair_HID (Info, ElementPtr); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (OriginalElement != *ElementPtr) { /* Update reference count of new object */ (*ElementPtr)->Common.ReferenceCount = OriginalRefCount; } ElementPtr++; } return_ACPI_STATUS (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiNsRepair_CST * * PARAMETERS: Info - Method execution information block * ReturnObjectPtr - Pointer to the object returned from the * evaluation of a method or object * * RETURN: Status. AE_OK if object is OK or was repaired successfully * * DESCRIPTION: Repair for the _CST object: * 1. Sort the list ascending by C state type * 2. Ensure type cannot be zero * 3. A subpackage count of zero means _CST is meaningless * 4. Count must match the number of C state subpackages * *****************************************************************************/ static ACPI_STATUS AcpiNsRepair_CST ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr) { ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; ACPI_OPERAND_OBJECT **OuterElements; UINT32 OuterElementCount; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; BOOLEAN Removing; UINT32 i; ACPI_FUNCTION_NAME (NsRepair_CST); /* * Check if the C-state type values are proportional. */ OuterElementCount = ReturnObject->Package.Count - 1; i = 0; while (i < OuterElementCount) { OuterElements = &ReturnObject->Package.Elements[i + 1]; Removing = FALSE; if ((*OuterElements)->Package.Count == 0) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "SubPackage[%u] - removing entry due to zero count", i)); Removing = TRUE; goto RemoveElement; } ObjDesc = (*OuterElements)->Package.Elements[1]; /* Index1 = Type */ if ((UINT32) ObjDesc->Integer.Value == 0) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "SubPackage[%u] - removing entry due to invalid Type(0)", i)); Removing = TRUE; } RemoveElement: if (Removing) { AcpiNsRemoveElement (ReturnObject, i + 1); OuterElementCount--; } else { i++; } } /* Update top-level package count, Type "Integer" checked elsewhere */ ObjDesc = ReturnObject->Package.Elements[0]; ObjDesc->Integer.Value = OuterElementCount; /* * Entries (subpackages) in the _CST Package must be sorted by the * C-state type, in ascending order. */ Status = AcpiNsCheckSortedList (Info, ReturnObject, 1, 4, 1, ACPI_SORT_ASCENDING, "C-State Type"); if (ACPI_FAILURE (Status)) { return (Status); } return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiNsRepair_HID * * PARAMETERS: Info - Method execution information block * ReturnObjectPtr - Pointer to the object returned from the * evaluation of a method or object * * RETURN: Status. AE_OK if object is OK or was repaired successfully * * DESCRIPTION: Repair for the _HID object. If a string, ensure that all * letters are uppercase and that there is no leading asterisk. * *****************************************************************************/ static ACPI_STATUS AcpiNsRepair_HID ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr) { ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; ACPI_OPERAND_OBJECT *NewString; char *Source; char *Dest; ACPI_FUNCTION_TRACE (NsRepair_HID); /* We only care about string _HID objects (not integers) */ if (ReturnObject->Common.Type != ACPI_TYPE_STRING) { return_ACPI_STATUS (AE_OK); } if (ReturnObject->String.Length == 0) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Invalid zero-length _HID or _CID string")); /* Return AE_OK anyway, let driver handle it */ Info->ReturnFlags |= ACPI_OBJECT_REPAIRED; return_ACPI_STATUS (AE_OK); } /* It is simplest to always create a new string object */ NewString = AcpiUtCreateStringObject (ReturnObject->String.Length); if (!NewString) { return_ACPI_STATUS (AE_NO_MEMORY); } /* * Remove a leading asterisk if present. For some unknown reason, there * are many machines in the field that contains IDs like this. * * Examples: "*PNP0C03", "*ACPI0003" */ Source = ReturnObject->String.Pointer; if (*Source == '*') { Source++; NewString->String.Length--; ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, "%s: Removed invalid leading asterisk\n", Info->FullPathname)); } /* * Copy and uppercase the string. From the ACPI 5.0 specification: * * A valid PNP ID must be of the form "AAA####" where A is an uppercase * letter and # is a hex digit. A valid ACPI ID must be of the form * "NNNN####" where N is an uppercase letter or decimal digit, and * # is a hex digit. */ for (Dest = NewString->String.Pointer; *Source; Dest++, Source++) { *Dest = (char) toupper ((int) *Source); } AcpiUtRemoveReference (ReturnObject); *ReturnObjectPtr = NewString; return_ACPI_STATUS (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiNsRepair_PRT * * PARAMETERS: Info - Method execution information block * ReturnObjectPtr - Pointer to the object returned from the * evaluation of a method or object * * RETURN: Status. AE_OK if object is OK or was repaired successfully * * DESCRIPTION: Repair for the _PRT object. If necessary, fix reversed * SourceName and SourceIndex field, a common BIOS bug. * *****************************************************************************/ static ACPI_STATUS AcpiNsRepair_PRT ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr) { ACPI_OPERAND_OBJECT *PackageObject = *ReturnObjectPtr; ACPI_OPERAND_OBJECT **TopObjectList; ACPI_OPERAND_OBJECT **SubObjectList; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *SubPackage; UINT32 ElementCount; UINT32 Index; /* Each element in the _PRT package is a subpackage */ TopObjectList = PackageObject->Package.Elements; ElementCount = PackageObject->Package.Count; /* Examine each subpackage */ for (Index = 0; Index < ElementCount; Index++, TopObjectList++) { SubPackage = *TopObjectList; SubObjectList = SubPackage->Package.Elements; /* Check for minimum required element count */ if (SubPackage->Package.Count < 4) { continue; } /* * If the BIOS has erroneously reversed the _PRT SourceName (index 2) * and the SourceIndex (index 3), fix it. _PRT is important enough to * workaround this BIOS error. This also provides compatibility with * other ACPI implementations. */ ObjDesc = SubObjectList[3]; if (!ObjDesc || (ObjDesc->Common.Type != ACPI_TYPE_INTEGER)) { SubObjectList[3] = SubObjectList[2]; SubObjectList[2] = ObjDesc; Info->ReturnFlags |= ACPI_OBJECT_REPAIRED; ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "PRT[%X]: Fixed reversed SourceName and SourceIndex", Index)); } } return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiNsRepair_PSS * * PARAMETERS: Info - Method execution information block * ReturnObjectPtr - Pointer to the object returned from the * evaluation of a method or object * * RETURN: Status. AE_OK if object is OK or was repaired successfully * * DESCRIPTION: Repair for the _PSS object. If necessary, sort the object list * by the CPU frequencies. Check that the power dissipation values * are all proportional to CPU frequency (i.e., sorting by * frequency should be the same as sorting by power.) * *****************************************************************************/ static ACPI_STATUS AcpiNsRepair_PSS ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr) { ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; ACPI_OPERAND_OBJECT **OuterElements; UINT32 OuterElementCount; ACPI_OPERAND_OBJECT **Elements; ACPI_OPERAND_OBJECT *ObjDesc; UINT32 PreviousValue; ACPI_STATUS Status; UINT32 i; /* * Entries (subpackages) in the _PSS Package must be sorted by power * dissipation, in descending order. If it appears that the list is * incorrectly sorted, sort it. We sort by CpuFrequency, since this * should be proportional to the power. */ Status = AcpiNsCheckSortedList (Info, ReturnObject, 0, 6, 0, ACPI_SORT_DESCENDING, "CpuFrequency"); if (ACPI_FAILURE (Status)) { return (Status); } /* * We now know the list is correctly sorted by CPU frequency. Check if * the power dissipation values are proportional. */ PreviousValue = ACPI_UINT32_MAX; OuterElements = ReturnObject->Package.Elements; OuterElementCount = ReturnObject->Package.Count; for (i = 0; i < OuterElementCount; i++) { Elements = (*OuterElements)->Package.Elements; ObjDesc = Elements[1]; /* Index1 = PowerDissipation */ if ((UINT32) ObjDesc->Integer.Value > PreviousValue) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "SubPackage[%u,%u] - suspicious power dissipation values", i-1, i)); } PreviousValue = (UINT32) ObjDesc->Integer.Value; OuterElements++; } return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiNsRepair_TSS * * PARAMETERS: Info - Method execution information block * ReturnObjectPtr - Pointer to the object returned from the * evaluation of a method or object * * RETURN: Status. AE_OK if object is OK or was repaired successfully * * DESCRIPTION: Repair for the _TSS object. If necessary, sort the object list * descending by the power dissipation values. * *****************************************************************************/ static ACPI_STATUS AcpiNsRepair_TSS ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr) { ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; /* * We can only sort the _TSS return package if there is no _PSS in the * same scope. This is because if _PSS is present, the ACPI specification * dictates that the _TSS Power Dissipation field is to be ignored, and * therefore some BIOSs leave garbage values in the _TSS Power field(s). * In this case, it is best to just return the _TSS package as-is. * (May, 2011) */ Status = AcpiNsGetNode (Info->Node, "^_PSS", ACPI_NS_NO_UPSEARCH, &Node); if (ACPI_SUCCESS (Status)) { return (AE_OK); } Status = AcpiNsCheckSortedList (Info, ReturnObject, 0, 5, 1, ACPI_SORT_DESCENDING, "PowerDissipation"); return (Status); } /****************************************************************************** * * FUNCTION: AcpiNsCheckSortedList * * PARAMETERS: Info - Method execution information block * ReturnObject - Pointer to the top-level returned object * StartIndex - Index of the first subpackage * ExpectedCount - Minimum length of each subpackage * SortIndex - Subpackage entry to sort on * SortDirection - Ascending or descending * SortKeyName - Name of the SortIndex field * * RETURN: Status. AE_OK if the list is valid and is sorted correctly or * has been repaired by sorting the list. * * DESCRIPTION: Check if the package list is valid and sorted correctly by the * SortIndex. If not, then sort the list. * *****************************************************************************/ static ACPI_STATUS AcpiNsCheckSortedList ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT *ReturnObject, UINT32 StartIndex, UINT32 ExpectedCount, UINT32 SortIndex, UINT8 SortDirection, char *SortKeyName) { UINT32 OuterElementCount; ACPI_OPERAND_OBJECT **OuterElements; ACPI_OPERAND_OBJECT **Elements; ACPI_OPERAND_OBJECT *ObjDesc; UINT32 i; UINT32 PreviousValue; ACPI_FUNCTION_NAME (NsCheckSortedList); /* The top-level object must be a package */ if (ReturnObject->Common.Type != ACPI_TYPE_PACKAGE) { return (AE_AML_OPERAND_TYPE); } /* * NOTE: assumes list of subpackages contains no NULL elements. * Any NULL elements should have been removed by earlier call * to AcpiNsRemoveNullElements. */ OuterElementCount = ReturnObject->Package.Count; if (!OuterElementCount || StartIndex >= OuterElementCount) { return (AE_AML_PACKAGE_LIMIT); } OuterElements = &ReturnObject->Package.Elements[StartIndex]; OuterElementCount -= StartIndex; PreviousValue = 0; if (SortDirection == ACPI_SORT_DESCENDING) { PreviousValue = ACPI_UINT32_MAX; } /* Examine each subpackage */ for (i = 0; i < OuterElementCount; i++) { /* Each element of the top-level package must also be a package */ if ((*OuterElements)->Common.Type != ACPI_TYPE_PACKAGE) { return (AE_AML_OPERAND_TYPE); } /* Each subpackage must have the minimum length */ if ((*OuterElements)->Package.Count < ExpectedCount) { return (AE_AML_PACKAGE_LIMIT); } Elements = (*OuterElements)->Package.Elements; ObjDesc = Elements[SortIndex]; if (ObjDesc->Common.Type != ACPI_TYPE_INTEGER) { return (AE_AML_OPERAND_TYPE); } /* * The list must be sorted in the specified order. If we detect a * discrepancy, sort the entire list. */ if (((SortDirection == ACPI_SORT_ASCENDING) && (ObjDesc->Integer.Value < PreviousValue)) || ((SortDirection == ACPI_SORT_DESCENDING) && (ObjDesc->Integer.Value > PreviousValue))) { AcpiNsSortList (&ReturnObject->Package.Elements[StartIndex], OuterElementCount, SortIndex, SortDirection); Info->ReturnFlags |= ACPI_OBJECT_REPAIRED; ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, "%s: Repaired unsorted list - now sorted by %s\n", Info->FullPathname, SortKeyName)); return (AE_OK); } PreviousValue = (UINT32) ObjDesc->Integer.Value; OuterElements++; } return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiNsSortList * * PARAMETERS: Elements - Package object element list * Count - Element count for above * Index - Sort by which package element * SortDirection - Ascending or Descending sort * * RETURN: None * * DESCRIPTION: Sort the objects that are in a package element list. * * NOTE: Assumes that all NULL elements have been removed from the package, * and that all elements have been verified to be of type Integer. * *****************************************************************************/ static void AcpiNsSortList ( ACPI_OPERAND_OBJECT **Elements, UINT32 Count, UINT32 Index, UINT8 SortDirection) { ACPI_OPERAND_OBJECT *ObjDesc1; ACPI_OPERAND_OBJECT *ObjDesc2; ACPI_OPERAND_OBJECT *TempObj; UINT32 i; UINT32 j; /* Simple bubble sort */ for (i = 1; i < Count; i++) { for (j = (Count - 1); j >= i; j--) { ObjDesc1 = Elements[j-1]->Package.Elements[Index]; ObjDesc2 = Elements[j]->Package.Elements[Index]; if (((SortDirection == ACPI_SORT_ASCENDING) && (ObjDesc1->Integer.Value > ObjDesc2->Integer.Value)) || ((SortDirection == ACPI_SORT_DESCENDING) && (ObjDesc1->Integer.Value < ObjDesc2->Integer.Value))) { TempObj = Elements[j-1]; Elements[j-1] = Elements[j]; Elements[j] = TempObj; } } } } /****************************************************************************** * * FUNCTION: AcpiNsRemoveElement * * PARAMETERS: ObjDesc - Package object element list * Index - Index of element to remove * * RETURN: None * * DESCRIPTION: Remove the requested element of a package and delete it. * *****************************************************************************/ static void AcpiNsRemoveElement ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 Index) { ACPI_OPERAND_OBJECT **Source; ACPI_OPERAND_OBJECT **Dest; UINT32 Count; UINT32 NewCount; UINT32 i; ACPI_FUNCTION_NAME (NsRemoveElement); Count = ObjDesc->Package.Count; NewCount = Count - 1; Source = ObjDesc->Package.Elements; Dest = Source; /* Examine all elements of the package object, remove matched index */ for (i = 0; i < Count; i++) { if (i == Index) { AcpiUtRemoveReference (*Source); /* Remove one ref for being in pkg */ AcpiUtRemoveReference (*Source); } else { *Dest = *Source; Dest++; } Source++; } /* NULL terminate list and update the package count */ *Dest = NULL; ObjDesc->Package.Count = NewCount; } src/acpica/source/components/namespace/nssearch.c000066400000000000000000000525261465205512700225010ustar00rootroot00000000000000/******************************************************************************* * * Module Name: nssearch - Namespace search * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #ifdef ACPI_ASL_COMPILER #include "amlcode.h" #endif #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nssearch") /* Local prototypes */ static ACPI_STATUS AcpiNsSearchParentTree ( UINT32 TargetName, ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_TYPE Type, ACPI_NAMESPACE_NODE **ReturnNode); /******************************************************************************* * * FUNCTION: AcpiNsSearchOneScope * * PARAMETERS: TargetName - Ascii ACPI name to search for * ParentNode - Starting node where search will begin * Type - Object type to match * ReturnNode - Where the matched Named obj is returned * * RETURN: Status * * DESCRIPTION: Search a single level of the namespace. Performs a * simple search of the specified level, and does not add * entries or search parents. * * * Named object lists are built (and subsequently dumped) in the * order in which the names are encountered during the namespace load; * * All namespace searching is linear in this implementation, but * could be easily modified to support any improved search * algorithm. However, the linear search was chosen for simplicity * and because the trees are small and the other interpreter * execution overhead is relatively high. * * Note: CPU execution analysis has shown that the AML interpreter spends * a very small percentage of its time searching the namespace. Therefore, * the linear search seems to be sufficient, as there would seem to be * little value in improving the search. * ******************************************************************************/ ACPI_STATUS AcpiNsSearchOneScope ( UINT32 TargetName, ACPI_NAMESPACE_NODE *ParentNode, ACPI_OBJECT_TYPE Type, ACPI_NAMESPACE_NODE **ReturnNode) { ACPI_NAMESPACE_NODE *Node; ACPI_FUNCTION_TRACE (NsSearchOneScope); #ifdef ACPI_DEBUG_OUTPUT if (ACPI_LV_NAMES & AcpiDbgLevel) { char *ScopeName; ScopeName = AcpiNsGetNormalizedPathname (ParentNode, TRUE); if (ScopeName) { ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching %s (%p) For [%4.4s] (%s)\n", ScopeName, ParentNode, ACPI_CAST_PTR (char, &TargetName), AcpiUtGetTypeName (Type))); ACPI_FREE (ScopeName); } } #endif /* * Search for name at this namespace level, which is to say that we * must search for the name among the children of this object */ Node = ParentNode->Child; while (Node) { /* Check for match against the name */ if (Node->Name.Integer == TargetName) { /* Resolve a control method alias if any */ if (AcpiNsGetType (Node) == ACPI_TYPE_LOCAL_METHOD_ALIAS) { Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Node->Object); } /* Found matching entry */ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Name [%4.4s] (%s) %p found in scope [%4.4s] %p\n", ACPI_CAST_PTR (char, &TargetName), AcpiUtGetTypeName (Node->Type), Node, AcpiUtGetNodeName (ParentNode), ParentNode)); *ReturnNode = Node; return_ACPI_STATUS (AE_OK); } /* Didn't match name, move on to the next peer object */ Node = Node->Peer; } /* Searched entire namespace level, not found */ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Name [%4.4s] (%s) not found in search in scope [%4.4s] " "%p first child %p\n", ACPI_CAST_PTR (char, &TargetName), AcpiUtGetTypeName (Type), AcpiUtGetNodeName (ParentNode), ParentNode, ParentNode->Child)); return_ACPI_STATUS (AE_NOT_FOUND); } /******************************************************************************* * * FUNCTION: AcpiNsSearchParentTree * * PARAMETERS: TargetName - Ascii ACPI name to search for * Node - Starting node where search will begin * Type - Object type to match * ReturnNode - Where the matched Node is returned * * RETURN: Status * * DESCRIPTION: Called when a name has not been found in the current namespace * level. Before adding it or giving up, ACPI scope rules require * searching enclosing scopes in cases identified by AcpiNsLocal(). * * "A name is located by finding the matching name in the current * name space, and then in the parent name space. If the parent * name space does not contain the name, the search continues * recursively until either the name is found or the name space * does not have a parent (the root of the name space). This * indicates that the name is not found" (From ACPI Specification, * section 5.3) * ******************************************************************************/ static ACPI_STATUS AcpiNsSearchParentTree ( UINT32 TargetName, ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_TYPE Type, ACPI_NAMESPACE_NODE **ReturnNode) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *ParentNode; ACPI_FUNCTION_TRACE (NsSearchParentTree); ParentNode = Node->Parent; /* * If there is no parent (i.e., we are at the root) or type is "local", * we won't be searching the parent tree. */ if (!ParentNode) { ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[%4.4s] has no parent\n", ACPI_CAST_PTR (char, &TargetName))); return_ACPI_STATUS (AE_NOT_FOUND); } if (AcpiNsLocal (Type)) { ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[%4.4s] type [%s] must be local to this scope (no parent search)\n", ACPI_CAST_PTR (char, &TargetName), AcpiUtGetTypeName (Type))); return_ACPI_STATUS (AE_NOT_FOUND); } /* Search the parent tree */ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching parent [%4.4s] for [%4.4s]\n", AcpiUtGetNodeName (ParentNode), ACPI_CAST_PTR (char, &TargetName))); /* Search parents until target is found or we have backed up to the root */ while (ParentNode) { /* * Search parent scope. Use TYPE_ANY because we don't care about the * object type at this point, we only care about the existence of * the actual name we are searching for. Typechecking comes later. */ Status = AcpiNsSearchOneScope ( TargetName, ParentNode, ACPI_TYPE_ANY, ReturnNode); if (ACPI_SUCCESS (Status)) { return_ACPI_STATUS (Status); } /* Not found here, go up another level (until we reach the root) */ ParentNode = ParentNode->Parent; } /* Not found in parent tree */ return_ACPI_STATUS (AE_NOT_FOUND); } /******************************************************************************* * * FUNCTION: AcpiNsSearchAndEnter * * PARAMETERS: TargetName - Ascii ACPI name to search for (4 chars) * WalkState - Current state of the walk * Node - Starting node where search will begin * InterpreterMode - Add names only in ACPI_MODE_LOAD_PASS_x. * Otherwise,search only. * Type - Object type to match * Flags - Flags describing the search restrictions * ReturnNode - Where the Node is returned * * RETURN: Status * * DESCRIPTION: Search for a name segment in a single namespace level, * optionally adding it if it is not found. If the passed * Type is not Any and the type previously stored in the * entry was Any (i.e. unknown), update the stored type. * * In ACPI_IMODE_EXECUTE, search only. * In other modes, search and add if not found. * ******************************************************************************/ ACPI_STATUS AcpiNsSearchAndEnter ( UINT32 TargetName, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE *Node, ACPI_INTERPRETER_MODE InterpreterMode, ACPI_OBJECT_TYPE Type, UINT32 Flags, ACPI_NAMESPACE_NODE **ReturnNode) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *NewNode; ACPI_FUNCTION_TRACE (NsSearchAndEnter); /* Parameter validation */ if (!Node || !TargetName || !ReturnNode) { ACPI_ERROR ((AE_INFO, "Null parameter: Node %p Name 0x%X ReturnNode %p", Node, TargetName, ReturnNode)); return_ACPI_STATUS (AE_BAD_PARAMETER); } /* * Name must consist of valid ACPI characters. We will repair the name if * necessary because we don't want to abort because of this, but we want * all namespace names to be printable. A warning message is appropriate. * * This issue came up because there are in fact machines that exhibit * this problem, and we want to be able to enable ACPI support for them, * even though there are a few bad names. */ AcpiUtRepairName (ACPI_CAST_PTR (char, &TargetName)); /* Try to find the name in the namespace level specified by the caller */ *ReturnNode = ACPI_ENTRY_NOT_FOUND; Status = AcpiNsSearchOneScope (TargetName, Node, Type, ReturnNode); if (Status != AE_NOT_FOUND) { /* * If we found it AND the request specifies that a find is an error, * return the error */ if (Status == AE_OK) { /* The node was found in the namespace */ /* * If the namespace override feature is enabled for this node, * delete any existing attached sub-object and make the node * look like a new node that is owned by the override table. */ if (Flags & ACPI_NS_OVERRIDE_IF_FOUND) { ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Namespace override: %4.4s pass %u type %X Owner %X\n", ACPI_CAST_PTR(char, &TargetName), InterpreterMode, (*ReturnNode)->Type, WalkState->OwnerId)); AcpiNsDeleteChildren (*ReturnNode); if (AcpiGbl_RuntimeNamespaceOverride) { AcpiUtRemoveReference ((*ReturnNode)->Object); (*ReturnNode)->Object = NULL; (*ReturnNode)->OwnerId = WalkState->OwnerId; } else { AcpiNsRemoveNode (*ReturnNode); *ReturnNode = ACPI_ENTRY_NOT_FOUND; } } /* Return an error if we don't expect to find the object */ else if (Flags & ACPI_NS_ERROR_IF_FOUND) { Status = AE_ALREADY_EXISTS; } } #ifdef ACPI_ASL_COMPILER if (*ReturnNode && (*ReturnNode)->Type == ACPI_TYPE_ANY) { (*ReturnNode)->Flags |= ANOBJ_IS_EXTERNAL; } #endif /* Either found it or there was an error: finished either way */ return_ACPI_STATUS (Status); } /* * The name was not found. If we are NOT performing the first pass * (name entry) of loading the namespace, search the parent tree (all the * way to the root if necessary.) We don't want to perform the parent * search when the namespace is actually being loaded. We want to perform * the search when namespace references are being resolved (load pass 2) * and during the execution phase. */ if ((InterpreterMode != ACPI_IMODE_LOAD_PASS1) && (Flags & ACPI_NS_SEARCH_PARENT)) { /* * Not found at this level - search parent tree according to the * ACPI specification */ Status = AcpiNsSearchParentTree (TargetName, Node, Type, ReturnNode); if (ACPI_SUCCESS (Status)) { return_ACPI_STATUS (Status); } } /* In execute mode, just search, never add names. Exit now */ if (InterpreterMode == ACPI_IMODE_EXECUTE) { ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%4.4s Not found in %p [Not adding]\n", ACPI_CAST_PTR (char, &TargetName), Node)); return_ACPI_STATUS (AE_NOT_FOUND); } /* Create the new named object */ NewNode = AcpiNsCreateNode (TargetName); if (!NewNode) { return_ACPI_STATUS (AE_NO_MEMORY); } #ifdef ACPI_ASL_COMPILER /* Node is an object defined by an External() statement */ if (Flags & ACPI_NS_EXTERNAL || (WalkState && WalkState->Opcode == AML_SCOPE_OP)) { NewNode->Flags |= ANOBJ_IS_EXTERNAL; } #endif if (Flags & ACPI_NS_TEMPORARY) { NewNode->Flags |= ANOBJ_TEMPORARY; } /* Install the new object into the parent's list of children */ AcpiNsInstallNode (WalkState, Node, NewNode, Type); *ReturnNode = NewNode; return_ACPI_STATUS (AE_OK); } src/acpica/source/components/namespace/nsutils.c000066400000000000000000000734341465205512700223750ustar00rootroot00000000000000/****************************************************************************** * * Module Name: nsutils - Utilities for accessing ACPI namespace, accessing * parents and siblings and Scope manipulation * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "amlcode.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsutils") /* Local prototypes */ #ifdef ACPI_OBSOLETE_FUNCTIONS ACPI_NAME AcpiNsFindParentName ( ACPI_NAMESPACE_NODE *NodeToSearch); #endif /******************************************************************************* * * FUNCTION: AcpiNsPrintNodePathname * * PARAMETERS: Node - Object * Message - Prefix message * * DESCRIPTION: Print an object's full namespace pathname * Manages allocation/freeing of a pathname buffer * ******************************************************************************/ void AcpiNsPrintNodePathname ( ACPI_NAMESPACE_NODE *Node, const char *Message) { ACPI_BUFFER Buffer; ACPI_STATUS Status; if (!Node) { AcpiOsPrintf ("[NULL NAME]"); return; } /* Convert handle to full pathname and print it (with supplied message) */ Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiNsHandleToPathname (Node, &Buffer, TRUE); if (ACPI_SUCCESS (Status)) { if (Message) { AcpiOsPrintf ("%s ", Message); } AcpiOsPrintf ("%s", (char *) Buffer.Pointer); ACPI_FREE (Buffer.Pointer); } } /******************************************************************************* * * FUNCTION: AcpiNsGetType * * PARAMETERS: Node - Parent Node to be examined * * RETURN: Type field from Node whose handle is passed * * DESCRIPTION: Return the type of a Namespace node * ******************************************************************************/ ACPI_OBJECT_TYPE AcpiNsGetType ( ACPI_NAMESPACE_NODE *Node) { ACPI_FUNCTION_TRACE (NsGetType); if (!Node) { ACPI_WARNING ((AE_INFO, "Null Node parameter")); return_UINT8 (ACPI_TYPE_ANY); } return_UINT8 (Node->Type); } /******************************************************************************* * * FUNCTION: AcpiNsLocal * * PARAMETERS: Type - A namespace object type * * RETURN: LOCAL if names must be found locally in objects of the * passed type, 0 if enclosing scopes should be searched * * DESCRIPTION: Returns scope rule for the given object type. * ******************************************************************************/ UINT32 AcpiNsLocal ( ACPI_OBJECT_TYPE Type) { ACPI_FUNCTION_TRACE (NsLocal); if (!AcpiUtValidObjectType (Type)) { /* Type code out of range */ ACPI_WARNING ((AE_INFO, "Invalid Object Type 0x%X", Type)); return_UINT32 (ACPI_NS_NORMAL); } return_UINT32 (AcpiGbl_NsProperties[Type] & ACPI_NS_LOCAL); } /******************************************************************************* * * FUNCTION: AcpiNsGetInternalNameLength * * PARAMETERS: Info - Info struct initialized with the * external name pointer. * * RETURN: None * * DESCRIPTION: Calculate the length of the internal (AML) namestring * corresponding to the external (ASL) namestring. * ******************************************************************************/ void AcpiNsGetInternalNameLength ( ACPI_NAMESTRING_INFO *Info) { const char *NextExternalChar; UINT32 i; ACPI_FUNCTION_ENTRY (); NextExternalChar = Info->ExternalName; Info->NumCarats = 0; Info->NumSegments = 0; Info->FullyQualified = FALSE; /* * For the internal name, the required length is 4 bytes per segment, * plus 1 each for RootPrefix, MultiNamePrefixOp, segment count, * trailing null (which is not really needed, but no there's harm in * putting it there) * * strlen() + 1 covers the first NameSeg, which has no path separator */ if (ACPI_IS_ROOT_PREFIX (*NextExternalChar)) { Info->FullyQualified = TRUE; NextExternalChar++; /* Skip redundant RootPrefix, like \\_SB.PCI0.SBRG.EC0 */ while (ACPI_IS_ROOT_PREFIX (*NextExternalChar)) { NextExternalChar++; } } else { /* Handle Carat prefixes */ while (ACPI_IS_PARENT_PREFIX (*NextExternalChar)) { Info->NumCarats++; NextExternalChar++; } } /* * Determine the number of ACPI name "segments" by counting the number of * path separators within the string. Start with one segment since the * segment count is [(# separators) + 1], and zero separators is ok. */ if (*NextExternalChar) { Info->NumSegments = 1; for (i = 0; NextExternalChar[i]; i++) { if (ACPI_IS_PATH_SEPARATOR (NextExternalChar[i])) { Info->NumSegments++; } } } Info->Length = (ACPI_NAMESEG_SIZE * Info->NumSegments) + 4 + Info->NumCarats; Info->NextExternalChar = NextExternalChar; } /******************************************************************************* * * FUNCTION: AcpiNsBuildInternalName * * PARAMETERS: Info - Info struct fully initialized * * RETURN: Status * * DESCRIPTION: Construct the internal (AML) namestring * corresponding to the external (ASL) namestring. * ******************************************************************************/ ACPI_STATUS AcpiNsBuildInternalName ( ACPI_NAMESTRING_INFO *Info) { UINT32 NumSegments = Info->NumSegments; char *InternalName = Info->InternalName; const char *ExternalName = Info->NextExternalChar; char *Result = NULL; UINT32 i; ACPI_FUNCTION_TRACE (NsBuildInternalName); /* Setup the correct prefixes, counts, and pointers */ if (Info->FullyQualified) { InternalName[0] = AML_ROOT_PREFIX; if (NumSegments <= 1) { Result = &InternalName[1]; } else if (NumSegments == 2) { InternalName[1] = AML_DUAL_NAME_PREFIX; Result = &InternalName[2]; } else { InternalName[1] = AML_MULTI_NAME_PREFIX; InternalName[2] = (char) NumSegments; Result = &InternalName[3]; } } else { /* * Not fully qualified. * Handle Carats first, then append the name segments */ i = 0; if (Info->NumCarats) { for (i = 0; i < Info->NumCarats; i++) { InternalName[i] = AML_PARENT_PREFIX; } } if (NumSegments <= 1) { Result = &InternalName[i]; } else if (NumSegments == 2) { InternalName[i] = AML_DUAL_NAME_PREFIX; Result = &InternalName[(ACPI_SIZE) i+1]; } else { InternalName[i] = AML_MULTI_NAME_PREFIX; InternalName[(ACPI_SIZE) i+1] = (char) NumSegments; Result = &InternalName[(ACPI_SIZE) i+2]; } } /* Build the name (minus path separators) */ for (; NumSegments; NumSegments--) { for (i = 0; i < ACPI_NAMESEG_SIZE; i++) { if (ACPI_IS_PATH_SEPARATOR (*ExternalName) || (*ExternalName == 0)) { /* Pad the segment with underscore(s) if segment is short */ Result[i] = '_'; } else { /* Convert the character to uppercase and save it */ Result[i] = (char) toupper ((int) *ExternalName); ExternalName++; } } /* Now we must have a path separator, or the pathname is bad */ if (!ACPI_IS_PATH_SEPARATOR (*ExternalName) && (*ExternalName != 0)) { return_ACPI_STATUS (AE_BAD_PATHNAME); } /* Move on the next segment */ ExternalName++; Result += ACPI_NAMESEG_SIZE; } /* Terminate the string */ *Result = 0; if (Info->FullyQualified) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Returning [%p] (abs) \"\\%s\"\n", InternalName, InternalName)); } else { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Returning [%p] (rel) \"%s\"\n", InternalName, InternalName)); } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsInternalizeName * * PARAMETERS: *ExternalName - External representation of name * **Converted Name - Where to return the resulting * internal representation of the name * * RETURN: Status * * DESCRIPTION: Convert an external representation (e.g. "\_PR_.CPU0") * to internal form (e.g. 5c 2f 02 5f 50 52 5f 43 50 55 30) * *******************************************************************************/ ACPI_STATUS AcpiNsInternalizeName ( const char *ExternalName, char **ConvertedName) { char *InternalName; ACPI_NAMESTRING_INFO Info; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (NsInternalizeName); if ((!ExternalName) || (*ExternalName == 0) || (!ConvertedName)) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Get the length of the new internal name */ Info.ExternalName = ExternalName; AcpiNsGetInternalNameLength (&Info); /* We need a segment to store the internal name */ InternalName = ACPI_ALLOCATE_ZEROED (Info.Length); if (!InternalName) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Build the name */ Info.InternalName = InternalName; Status = AcpiNsBuildInternalName (&Info); if (ACPI_FAILURE (Status)) { ACPI_FREE (InternalName); return_ACPI_STATUS (Status); } *ConvertedName = InternalName; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsExternalizeName * * PARAMETERS: InternalNameLength - Length of the internal name below * InternalName - Internal representation of name * ConvertedNameLength - Where the length is returned * ConvertedName - Where the resulting external name * is returned * * RETURN: Status * * DESCRIPTION: Convert internal name (e.g. 5c 2f 02 5f 50 52 5f 43 50 55 30) * to its external (printable) form (e.g. "\_PR_.CPU0") * ******************************************************************************/ ACPI_STATUS AcpiNsExternalizeName ( UINT32 InternalNameLength, const char *InternalName, UINT32 *ConvertedNameLength, char **ConvertedName) { UINT32 NamesIndex = 0; UINT32 NumSegments = 0; UINT32 RequiredLength; UINT32 PrefixLength = 0; UINT32 i = 0; UINT32 j = 0; ACPI_FUNCTION_TRACE (NsExternalizeName); if (!InternalNameLength || !InternalName || !ConvertedName) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Check for a prefix (one '\' | one or more '^') */ switch (InternalName[0]) { case AML_ROOT_PREFIX: PrefixLength = 1; break; case AML_PARENT_PREFIX: for (i = 0; i < InternalNameLength; i++) { if (ACPI_IS_PARENT_PREFIX (InternalName[i])) { PrefixLength = i + 1; } else { break; } } if (i == InternalNameLength) { PrefixLength = i; } break; default: break; } /* * Check for object names. Note that there could be 0-255 of these * 4-byte elements. */ if (PrefixLength < InternalNameLength) { switch (InternalName[PrefixLength]) { case AML_MULTI_NAME_PREFIX: /* 4-byte names */ NamesIndex = PrefixLength + 2; NumSegments = (UINT8) InternalName[(ACPI_SIZE) PrefixLength + 1]; break; case AML_DUAL_NAME_PREFIX: /* Two 4-byte names */ NamesIndex = PrefixLength + 1; NumSegments = 2; break; case 0: /* NullName */ NamesIndex = 0; NumSegments = 0; break; default: /* one 4-byte name */ NamesIndex = PrefixLength; NumSegments = 1; break; } } /* * Calculate the length of ConvertedName, which equals the length * of the prefix, length of all object names, length of any required * punctuation ('.') between object names, plus the NULL terminator. */ RequiredLength = PrefixLength + (4 * NumSegments) + ((NumSegments > 0) ? (NumSegments - 1) : 0) + 1; /* * Check to see if we're still in bounds. If not, there's a problem * with InternalName (invalid format). */ if (RequiredLength > InternalNameLength) { ACPI_ERROR ((AE_INFO, "Invalid internal name")); return_ACPI_STATUS (AE_BAD_PATHNAME); } /* Build the ConvertedName */ *ConvertedName = ACPI_ALLOCATE_ZEROED (RequiredLength); if (!(*ConvertedName)) { return_ACPI_STATUS (AE_NO_MEMORY); } j = 0; for (i = 0; i < PrefixLength; i++) { (*ConvertedName)[j++] = InternalName[i]; } if (NumSegments > 0) { for (i = 0; i < NumSegments; i++) { if (i > 0) { (*ConvertedName)[j++] = '.'; } /* Copy and validate the 4-char name segment */ ACPI_COPY_NAMESEG (&(*ConvertedName)[j], &InternalName[NamesIndex]); AcpiUtRepairName (&(*ConvertedName)[j]); j += ACPI_NAMESEG_SIZE; NamesIndex += ACPI_NAMESEG_SIZE; } } if (ConvertedNameLength) { *ConvertedNameLength = (UINT32) RequiredLength; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiNsValidateHandle * * PARAMETERS: Handle - Handle to be validated and typecast to a * namespace node. * * RETURN: A pointer to a namespace node * * DESCRIPTION: Convert a namespace handle to a namespace node. Handles special * cases for the root node. * * NOTE: Real integer handles would allow for more verification * and keep all pointers within this subsystem - however this introduces * more overhead and has not been necessary to this point. Drivers * holding handles are typically notified before a node becomes invalid * due to a table unload. * ******************************************************************************/ ACPI_NAMESPACE_NODE * AcpiNsValidateHandle ( ACPI_HANDLE Handle) { ACPI_FUNCTION_ENTRY (); /* Parameter validation */ if ((!Handle) || (Handle == ACPI_ROOT_OBJECT)) { return (AcpiGbl_RootNode); } /* We can at least attempt to verify the handle */ if (ACPI_GET_DESCRIPTOR_TYPE (Handle) != ACPI_DESC_TYPE_NAMED) { return (NULL); } return (ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Handle)); } /******************************************************************************* * * FUNCTION: AcpiNsTerminate * * PARAMETERS: none * * RETURN: none * * DESCRIPTION: free memory allocated for namespace and ACPI table storage. * ******************************************************************************/ void AcpiNsTerminate ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (NsTerminate); /* * Free the entire namespace -- all nodes and all objects * attached to the nodes */ AcpiNsDeleteNamespaceSubtree (AcpiGbl_RootNode); /* Delete any objects attached to the root node */ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_VOID; } AcpiNsDeleteNode (AcpiGbl_RootNode); (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Namespace freed\n")); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiNsOpensScope * * PARAMETERS: Type - A valid namespace type * * RETURN: NEWSCOPE if the passed type "opens a name scope" according * to the ACPI specification, else 0 * ******************************************************************************/ UINT32 AcpiNsOpensScope ( ACPI_OBJECT_TYPE Type) { ACPI_FUNCTION_ENTRY (); if (Type > ACPI_TYPE_LOCAL_MAX) { /* type code out of range */ ACPI_WARNING ((AE_INFO, "Invalid Object Type 0x%X", Type)); return (ACPI_NS_NORMAL); } return (((UINT32) AcpiGbl_NsProperties[Type]) & ACPI_NS_NEWSCOPE); } /******************************************************************************* * * FUNCTION: AcpiNsGetNodeUnlocked * * PARAMETERS: *Pathname - Name to be found, in external (ASL) format. The * \ (backslash) and ^ (carat) prefixes, and the * . (period) to separate segments are supported. * PrefixNode - Root of subtree to be searched, or NS_ALL for the * root of the name space. If Name is fully * qualified (first INT8 is '\'), the passed value * of Scope will not be accessed. * Flags - Used to indicate whether to perform upsearch or * not. * ReturnNode - Where the Node is returned * * DESCRIPTION: Look up a name relative to a given scope and return the * corresponding Node. NOTE: Scope can be null. * * MUTEX: Doesn't locks namespace * ******************************************************************************/ ACPI_STATUS AcpiNsGetNodeUnlocked ( ACPI_NAMESPACE_NODE *PrefixNode, const char *Pathname, UINT32 Flags, ACPI_NAMESPACE_NODE **ReturnNode) { ACPI_GENERIC_STATE ScopeInfo; ACPI_STATUS Status; char *InternalPath; ACPI_FUNCTION_TRACE_PTR (NsGetNodeUnlocked, ACPI_CAST_PTR (char, Pathname)); /* Simplest case is a null pathname */ if (!Pathname) { *ReturnNode = PrefixNode; if (!PrefixNode) { *ReturnNode = AcpiGbl_RootNode; } return_ACPI_STATUS (AE_OK); } /* Quick check for a reference to the root */ if (ACPI_IS_ROOT_PREFIX (Pathname[0]) && (!Pathname[1])) { *ReturnNode = AcpiGbl_RootNode; return_ACPI_STATUS (AE_OK); } /* Convert path to internal representation */ Status = AcpiNsInternalizeName (Pathname, &InternalPath); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Setup lookup scope (search starting point) */ ScopeInfo.Scope.Node = PrefixNode; /* Lookup the name in the namespace */ Status = AcpiNsLookup (&ScopeInfo, InternalPath, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, (Flags | ACPI_NS_DONT_OPEN_SCOPE), NULL, ReturnNode); if (ACPI_FAILURE (Status)) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%s, %s\n", Pathname, AcpiFormatException (Status))); } ACPI_FREE (InternalPath); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiNsGetNode * * PARAMETERS: *Pathname - Name to be found, in external (ASL) format. The * \ (backslash) and ^ (carat) prefixes, and the * . (period) to separate segments are supported. * PrefixNode - Root of subtree to be searched, or NS_ALL for the * root of the name space. If Name is fully * qualified (first INT8 is '\'), the passed value * of Scope will not be accessed. * Flags - Used to indicate whether to perform upsearch or * not. * ReturnNode - Where the Node is returned * * DESCRIPTION: Look up a name relative to a given scope and return the * corresponding Node. NOTE: Scope can be null. * * MUTEX: Locks namespace * ******************************************************************************/ ACPI_STATUS AcpiNsGetNode ( ACPI_NAMESPACE_NODE *PrefixNode, const char *Pathname, UINT32 Flags, ACPI_NAMESPACE_NODE **ReturnNode) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE_PTR (NsGetNode, ACPI_CAST_PTR (char, Pathname)); Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiNsGetNodeUnlocked (PrefixNode, Pathname, Flags, ReturnNode); (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return_ACPI_STATUS (Status); } src/acpica/source/components/namespace/nswalk.c000066400000000000000000000446541465205512700221750ustar00rootroot00000000000000/****************************************************************************** * * Module Name: nswalk - Functions for walking the ACPI namespace * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nswalk") /******************************************************************************* * * FUNCTION: AcpiNsGetNextNode * * PARAMETERS: ParentNode - Parent node whose children we are * getting * ChildNode - Previous child that was found. * The NEXT child will be returned * * RETURN: ACPI_NAMESPACE_NODE - Pointer to the NEXT child or NULL if * none is found. * * DESCRIPTION: Return the next peer node within the namespace. If Handle * is valid, Scope is ignored. Otherwise, the first node * within Scope is returned. * ******************************************************************************/ ACPI_NAMESPACE_NODE * AcpiNsGetNextNode ( ACPI_NAMESPACE_NODE *ParentNode, ACPI_NAMESPACE_NODE *ChildNode) { ACPI_FUNCTION_ENTRY (); if (!ChildNode) { /* It's really the parent's _scope_ that we want */ return (ParentNode->Child); } /* Otherwise just return the next peer */ return (ChildNode->Peer); } /******************************************************************************* * * FUNCTION: AcpiNsGetNextNodeTyped * * PARAMETERS: Type - Type of node to be searched for * ParentNode - Parent node whose children we are * getting * ChildNode - Previous child that was found. * The NEXT child will be returned * * RETURN: ACPI_NAMESPACE_NODE - Pointer to the NEXT child or NULL if * none is found. * * DESCRIPTION: Return the next peer node within the namespace. If Handle * is valid, Scope is ignored. Otherwise, the first node * within Scope is returned. * ******************************************************************************/ ACPI_NAMESPACE_NODE * AcpiNsGetNextNodeTyped ( ACPI_OBJECT_TYPE Type, ACPI_NAMESPACE_NODE *ParentNode, ACPI_NAMESPACE_NODE *ChildNode) { ACPI_NAMESPACE_NODE *NextNode = NULL; ACPI_FUNCTION_ENTRY (); NextNode = AcpiNsGetNextNode (ParentNode, ChildNode); /* If any type is OK, we are done */ if (Type == ACPI_TYPE_ANY) { /* NextNode is NULL if we are at the end-of-list */ return (NextNode); } /* Must search for the node -- but within this scope only */ while (NextNode) { /* If type matches, we are done */ if (NextNode->Type == Type) { return (NextNode); } /* Otherwise, move on to the next peer node */ NextNode = NextNode->Peer; } /* Not found */ return (NULL); } /******************************************************************************* * * FUNCTION: AcpiNsWalkNamespace * * PARAMETERS: Type - ACPI_OBJECT_TYPE to search for * StartNode - Handle in namespace where search begins * MaxDepth - Depth to which search is to reach * Flags - Whether to unlock the NS before invoking * the callback routine * DescendingCallback - Called during tree descent * when an object of "Type" is found * AscendingCallback - Called during tree ascent * when an object of "Type" is found * Context - Passed to user function(s) above * ReturnValue - from the UserFunction if terminated * early. Otherwise, returns NULL. * RETURNS: Status * * DESCRIPTION: Performs a modified depth-first walk of the namespace tree, * starting (and ending) at the node specified by StartHandle. * The callback function is called whenever a node that matches * the type parameter is found. If the callback function returns * a non-zero value, the search is terminated immediately and * this value is returned to the caller. * * The point of this procedure is to provide a generic namespace * walk routine that can be called from multiple places to * provide multiple services; the callback function(s) can be * tailored to each task, whether it is a print function, * a compare function, etc. * ******************************************************************************/ ACPI_STATUS AcpiNsWalkNamespace ( ACPI_OBJECT_TYPE Type, ACPI_HANDLE StartNode, UINT32 MaxDepth, UINT32 Flags, ACPI_WALK_CALLBACK DescendingCallback, ACPI_WALK_CALLBACK AscendingCallback, void *Context, void **ReturnValue) { ACPI_STATUS Status; ACPI_STATUS MutexStatus; ACPI_NAMESPACE_NODE *ChildNode; ACPI_NAMESPACE_NODE *ParentNode; ACPI_OBJECT_TYPE ChildType; UINT32 Level; BOOLEAN NodePreviouslyVisited = FALSE; ACPI_FUNCTION_TRACE (NsWalkNamespace); /* Special case for the namespace Root Node */ if (StartNode == ACPI_ROOT_OBJECT) { StartNode = AcpiGbl_RootNode; if (!StartNode) { return_ACPI_STATUS (AE_NO_NAMESPACE); } } /* Null child means "get first node" */ ParentNode = StartNode; ChildNode = AcpiNsGetNextNode (ParentNode, NULL); ChildType = ACPI_TYPE_ANY; Level = 1; /* * Traverse the tree of nodes until we bubble back up to where we * started. When Level is zero, the loop is done because we have * bubbled up to (and passed) the original parent handle (StartEntry) */ while (Level > 0 && ChildNode) { Status = AE_OK; /* Found next child, get the type if we are not searching for ANY */ if (Type != ACPI_TYPE_ANY) { ChildType = ChildNode->Type; } /* * Ignore all temporary namespace nodes (created during control * method execution) unless told otherwise. These temporary nodes * can cause a race condition because they can be deleted during * the execution of the user function (if the namespace is * unlocked before invocation of the user function.) Only the * debugger namespace dump will examine the temporary nodes. */ if ((ChildNode->Flags & ANOBJ_TEMPORARY) && !(Flags & ACPI_NS_WALK_TEMP_NODES)) { Status = AE_CTRL_DEPTH; } /* Type must match requested type */ else if (ChildType == Type) { /* * Found a matching node, invoke the user callback function. * Unlock the namespace if flag is set. */ if (Flags & ACPI_NS_WALK_UNLOCK) { MutexStatus = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (MutexStatus)) { return_ACPI_STATUS (MutexStatus); } } /* * Invoke the user function, either descending, ascending, * or both. */ if (!NodePreviouslyVisited) { if (DescendingCallback) { Status = DescendingCallback (ChildNode, Level, Context, ReturnValue); } } else { if (AscendingCallback) { Status = AscendingCallback (ChildNode, Level, Context, ReturnValue); } } if (Flags & ACPI_NS_WALK_UNLOCK) { MutexStatus = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (MutexStatus)) { return_ACPI_STATUS (MutexStatus); } } switch (Status) { case AE_OK: case AE_CTRL_DEPTH: /* Just keep going */ break; case AE_CTRL_TERMINATE: /* Exit now, with OK status */ return_ACPI_STATUS (AE_OK); default: /* All others are valid exceptions */ return_ACPI_STATUS (Status); } } /* * Depth first search: Attempt to go down another level in the * namespace if we are allowed to. Don't go any further if we have * reached the caller specified maximum depth or if the user * function has specified that the maximum depth has been reached. */ if (!NodePreviouslyVisited && (Level < MaxDepth) && (Status != AE_CTRL_DEPTH)) { if (ChildNode->Child) { /* There is at least one child of this node, visit it */ Level++; ParentNode = ChildNode; ChildNode = AcpiNsGetNextNode (ParentNode, NULL); continue; } } /* No more children, re-visit this node */ if (!NodePreviouslyVisited) { NodePreviouslyVisited = TRUE; continue; } /* No more children, visit peers */ ChildNode = AcpiNsGetNextNode (ParentNode, ChildNode); if (ChildNode) { NodePreviouslyVisited = FALSE; } /* No peers, re-visit parent */ else { /* * No more children of this node (AcpiNsGetNextNode failed), go * back upwards in the namespace tree to the node's parent. */ Level--; ChildNode = ParentNode; ParentNode = ParentNode->Parent; NodePreviouslyVisited = TRUE; } } /* Complete walk, not terminated by user function */ return_ACPI_STATUS (AE_OK); } src/acpica/source/components/namespace/nsxfeval.c000066400000000000000000001135571465205512700225230ustar00rootroot00000000000000/******************************************************************************* * * Module Name: nsxfeval - Public interfaces to the ACPI subsystem * ACPI Object evaluation interfaces * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acinterp.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsxfeval") /* Local prototypes */ static void AcpiNsResolveReferences ( ACPI_EVALUATE_INFO *Info); /******************************************************************************* * * FUNCTION: AcpiEvaluateObjectTyped * * PARAMETERS: Handle - Object handle (optional) * Pathname - Object pathname (optional) * ExternalParams - List of parameters to pass to a method, * terminated by NULL. May be NULL * if no parameters are being passed. * ReturnBuffer - Where to put the object return value (if * any). Required. * ReturnType - Expected type of return object * * RETURN: Status * * DESCRIPTION: Find and evaluate the given object, passing the given * parameters if necessary. One of "Handle" or "Pathname" must * be valid (non-null) * ******************************************************************************/ ACPI_STATUS AcpiEvaluateObjectTyped ( ACPI_HANDLE Handle, ACPI_STRING Pathname, ACPI_OBJECT_LIST *ExternalParams, ACPI_BUFFER *ReturnBuffer, ACPI_OBJECT_TYPE ReturnType) { ACPI_STATUS Status; BOOLEAN FreeBufferOnError = FALSE; ACPI_HANDLE TargetHandle; char *FullPathname; ACPI_FUNCTION_TRACE (AcpiEvaluateObjectTyped); /* Return buffer must be valid */ if (!ReturnBuffer) { return_ACPI_STATUS (AE_BAD_PARAMETER); } if (ReturnBuffer->Length == ACPI_ALLOCATE_BUFFER) { FreeBufferOnError = TRUE; } /* Get a handle here, in order to build an error message if needed */ TargetHandle = Handle; if (Pathname) { Status = AcpiGetHandle (Handle, Pathname, &TargetHandle); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } FullPathname = AcpiNsGetExternalPathname (TargetHandle); if (!FullPathname) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Evaluate the object */ Status = AcpiEvaluateObject (TargetHandle, NULL, ExternalParams, ReturnBuffer); if (ACPI_FAILURE (Status)) { goto Exit; } /* Type ANY means "don't care about return value type" */ if (ReturnType == ACPI_TYPE_ANY) { goto Exit; } if (ReturnBuffer->Length == 0) { /* Error because caller specifically asked for a return value */ ACPI_ERROR ((AE_INFO, "%s did not return any object", FullPathname)); Status = AE_NULL_OBJECT; goto Exit; } /* Examine the object type returned from EvaluateObject */ if (((ACPI_OBJECT *) ReturnBuffer->Pointer)->Type == ReturnType) { goto Exit; } /* Return object type does not match requested type */ ACPI_ERROR ((AE_INFO, "Incorrect return type from %s - received [%s], requested [%s]", FullPathname, AcpiUtGetTypeName (((ACPI_OBJECT *) ReturnBuffer->Pointer)->Type), AcpiUtGetTypeName (ReturnType))); if (FreeBufferOnError) { /* * Free a buffer created via ACPI_ALLOCATE_BUFFER. * Note: We use AcpiOsFree here because AcpiOsAllocate was used * to allocate the buffer. This purposefully bypasses the * (optionally enabled) allocation tracking mechanism since we * only want to track internal allocations. */ AcpiOsFree (ReturnBuffer->Pointer); ReturnBuffer->Pointer = NULL; } ReturnBuffer->Length = 0; Status = AE_TYPE; Exit: ACPI_FREE (FullPathname); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiEvaluateObjectTyped) /******************************************************************************* * * FUNCTION: AcpiEvaluateObject * * PARAMETERS: Handle - Object handle (optional) * Pathname - Object pathname (optional) * ExternalParams - List of parameters to pass to method, * terminated by NULL. May be NULL * if no parameters are being passed. * ReturnBuffer - Where to put method's return value (if * any). If NULL, no value is returned. * * RETURN: Status * * DESCRIPTION: Find and evaluate the given object, passing the given * parameters if necessary. One of "Handle" or "Pathname" must * be valid (non-null) * ******************************************************************************/ ACPI_STATUS AcpiEvaluateObject ( ACPI_HANDLE Handle, ACPI_STRING Pathname, ACPI_OBJECT_LIST *ExternalParams, ACPI_BUFFER *ReturnBuffer) { ACPI_STATUS Status; ACPI_EVALUATE_INFO *Info; ACPI_SIZE BufferSpaceNeeded; UINT32 i; ACPI_FUNCTION_TRACE (AcpiEvaluateObject); /* Allocate and initialize the evaluation information block */ Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); if (!Info) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Convert and validate the device handle */ Info->PrefixNode = AcpiNsValidateHandle (Handle); if (!Info->PrefixNode) { Status = AE_BAD_PARAMETER; goto Cleanup; } /* * Get the actual namespace node for the target object. * Handles these cases: * * 1) Null node, valid pathname from root (absolute path) * 2) Node and valid pathname (path relative to Node) * 3) Node, Null pathname */ if ((Pathname) && (ACPI_IS_ROOT_PREFIX (Pathname[0]))) { /* The path is fully qualified, just evaluate by name */ Info->PrefixNode = NULL; } else if (!Handle) { /* * A handle is optional iff a fully qualified pathname is specified. * Since we've already handled fully qualified names above, this is * an error. */ if (!Pathname) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Both Handle and Pathname are NULL")); } else { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Null Handle with relative pathname [%s]", Pathname)); } Status = AE_BAD_PARAMETER; goto Cleanup; } Info->RelativePathname = Pathname; /* * Convert all external objects passed as arguments to the * internal version(s). */ if (ExternalParams && ExternalParams->Count) { Info->ParamCount = (UINT16) ExternalParams->Count; /* Warn on impossible argument count */ if (Info->ParamCount > ACPI_METHOD_NUM_ARGS) { ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, "Excess arguments (%u) - using only %u", Info->ParamCount, ACPI_METHOD_NUM_ARGS)); Info->ParamCount = ACPI_METHOD_NUM_ARGS; } /* * Allocate a new parameter block for the internal objects * Add 1 to count to allow for null terminated internal list */ Info->Parameters = ACPI_ALLOCATE_ZEROED ( ((ACPI_SIZE) Info->ParamCount + 1) * sizeof (void *)); if (!Info->Parameters) { Status = AE_NO_MEMORY; goto Cleanup; } /* Convert each external object in the list to an internal object */ for (i = 0; i < Info->ParamCount; i++) { Status = AcpiUtCopyEobjectToIobject ( &ExternalParams->Pointer[i], &Info->Parameters[i]); if (ACPI_FAILURE (Status)) { goto Cleanup; } } Info->Parameters[Info->ParamCount] = NULL; } #ifdef _FUTURE_FEATURE /* * Begin incoming argument count analysis. Check for too few args * and too many args. */ switch (AcpiNsGetType (Info->Node)) { case ACPI_TYPE_METHOD: /* Check incoming argument count against the method definition */ if (Info->ObjDesc->Method.ParamCount > Info->ParamCount) { ACPI_ERROR ((AE_INFO, "Insufficient arguments (%u) - %u are required", Info->ParamCount, Info->ObjDesc->Method.ParamCount)); Status = AE_MISSING_ARGUMENTS; goto Cleanup; } else if (Info->ObjDesc->Method.ParamCount < Info->ParamCount) { ACPI_WARNING ((AE_INFO, "Excess arguments (%u) - only %u are required", Info->ParamCount, Info->ObjDesc->Method.ParamCount)); /* Just pass the required number of arguments */ Info->ParamCount = Info->ObjDesc->Method.ParamCount; } /* * Any incoming external objects to be passed as arguments to the * method must be converted to internal objects */ if (Info->ParamCount) { /* * Allocate a new parameter block for the internal objects * Add 1 to count to allow for null terminated internal list */ Info->Parameters = ACPI_ALLOCATE_ZEROED ( ((ACPI_SIZE) Info->ParamCount + 1) * sizeof (void *)); if (!Info->Parameters) { Status = AE_NO_MEMORY; goto Cleanup; } /* Convert each external object in the list to an internal object */ for (i = 0; i < Info->ParamCount; i++) { Status = AcpiUtCopyEobjectToIobject ( &ExternalParams->Pointer[i], &Info->Parameters[i]); if (ACPI_FAILURE (Status)) { goto Cleanup; } } Info->Parameters[Info->ParamCount] = NULL; } break; default: /* Warn if arguments passed to an object that is not a method */ if (Info->ParamCount) { ACPI_WARNING ((AE_INFO, "%u arguments were passed to a non-method ACPI object", Info->ParamCount)); } break; } #endif /* Now we can evaluate the object */ Status = AcpiNsEvaluate (Info); /* * If we are expecting a return value, and all went well above, * copy the return value to an external object. */ if (!ReturnBuffer) { goto CleanupReturnObject; } if (!Info->ReturnObject) { ReturnBuffer->Length = 0; goto Cleanup; } if (ACPI_GET_DESCRIPTOR_TYPE (Info->ReturnObject) == ACPI_DESC_TYPE_NAMED) { /* * If we received a NS Node as a return object, this means that * the object we are evaluating has nothing interesting to * return (such as a mutex, etc.) We return an error because * these types are essentially unsupported by this interface. * We don't check up front because this makes it easier to add * support for various types at a later date if necessary. */ Status = AE_TYPE; Info->ReturnObject = NULL; /* No need to delete a NS Node */ ReturnBuffer->Length = 0; } if (ACPI_FAILURE (Status)) { goto CleanupReturnObject; } /* Dereference Index and RefOf references */ AcpiNsResolveReferences (Info); /* Get the size of the returned object */ Status = AcpiUtGetObjectSize (Info->ReturnObject, &BufferSpaceNeeded); if (ACPI_SUCCESS (Status)) { /* Validate/Allocate/Clear caller buffer */ Status = AcpiUtInitializeBuffer (ReturnBuffer, BufferSpaceNeeded); if (ACPI_FAILURE (Status)) { /* * Caller's buffer is too small or a new one can't * be allocated */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Needed buffer size %X, %s\n", (UINT32) BufferSpaceNeeded, AcpiFormatException (Status))); } else { /* We have enough space for the object, build it */ Status = AcpiUtCopyIobjectToEobject ( Info->ReturnObject, ReturnBuffer); } } CleanupReturnObject: if (Info->ReturnObject) { /* * Delete the internal return object. NOTE: Interpreter must be * locked to avoid race condition. */ AcpiExEnterInterpreter (); /* Remove one reference on the return object (should delete it) */ AcpiUtRemoveReference (Info->ReturnObject); AcpiExExitInterpreter (); } Cleanup: /* Free the input parameter list (if we created one) */ if (Info->Parameters) { /* Free the allocated parameter block */ AcpiUtDeleteInternalObjectList (Info->Parameters); } ACPI_FREE (Info); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiEvaluateObject) /******************************************************************************* * * FUNCTION: AcpiNsResolveReferences * * PARAMETERS: Info - Evaluation info block * * RETURN: Info->ReturnObject is replaced with the dereferenced object * * DESCRIPTION: Dereference certain reference objects. Called before an * internal return object is converted to an external ACPI_OBJECT. * * Performs an automatic dereference of Index and RefOf reference objects. * These reference objects are not supported by the ACPI_OBJECT, so this is a * last resort effort to return something useful. Also, provides compatibility * with other ACPI implementations. * * NOTE: does not handle references within returned package objects or nested * references, but this support could be added later if found to be necessary. * ******************************************************************************/ static void AcpiNsResolveReferences ( ACPI_EVALUATE_INFO *Info) { ACPI_OPERAND_OBJECT *ObjDesc = NULL; ACPI_NAMESPACE_NODE *Node; /* We are interested in reference objects only */ if ((Info->ReturnObject)->Common.Type != ACPI_TYPE_LOCAL_REFERENCE) { return; } /* * Two types of references are supported - those created by Index and * RefOf operators. A name reference (AML_NAMEPATH_OP) can be converted * to an ACPI_OBJECT, so it is not dereferenced here. A DdbHandle * (AML_LOAD_OP) cannot be dereferenced, nor can it be converted to * an ACPI_OBJECT. */ switch (Info->ReturnObject->Reference.Class) { case ACPI_REFCLASS_INDEX: ObjDesc = *(Info->ReturnObject->Reference.Where); break; case ACPI_REFCLASS_REFOF: Node = Info->ReturnObject->Reference.Object; if (Node) { ObjDesc = Node->Object; } break; default: return; } /* Replace the existing reference object */ if (ObjDesc) { AcpiUtAddReference (ObjDesc); AcpiUtRemoveReference (Info->ReturnObject); Info->ReturnObject = ObjDesc; } return; } /******************************************************************************* * * FUNCTION: AcpiWalkNamespace * * PARAMETERS: Type - ACPI_OBJECT_TYPE to search for * StartObject - Handle in namespace where search begins * MaxDepth - Depth to which search is to reach * DescendingCallback - Called during tree descent * when an object of "Type" is found * AscendingCallback - Called during tree ascent * when an object of "Type" is found * Context - Passed to user function(s) above * ReturnValue - Location where return value of * UserFunction is put if terminated early * * RETURNS Return value from the UserFunction if terminated early. * Otherwise, returns NULL. * * DESCRIPTION: Performs a modified depth-first walk of the namespace tree, * starting (and ending) at the object specified by StartHandle. * The callback function is called whenever an object that matches * the type parameter is found. If the callback function returns * a non-zero value, the search is terminated immediately and this * value is returned to the caller. * * The point of this procedure is to provide a generic namespace * walk routine that can be called from multiple places to * provide multiple services; the callback function(s) can be * tailored to each task, whether it is a print function, * a compare function, etc. * ******************************************************************************/ ACPI_STATUS AcpiWalkNamespace ( ACPI_OBJECT_TYPE Type, ACPI_HANDLE StartObject, UINT32 MaxDepth, ACPI_WALK_CALLBACK DescendingCallback, ACPI_WALK_CALLBACK AscendingCallback, void *Context, void **ReturnValue) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiWalkNamespace); /* Parameter validation */ if ((Type > ACPI_TYPE_LOCAL_MAX) || (!MaxDepth) || (!DescendingCallback && !AscendingCallback)) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* * Need to acquire the namespace reader lock to prevent interference * with any concurrent table unloads (which causes the deletion of * namespace objects). We cannot allow the deletion of a namespace node * while the user function is using it. The exception to this are the * nodes created and deleted during control method execution -- these * nodes are marked as temporary nodes and are ignored by the namespace * walk. Thus, control methods can be executed while holding the * namespace deletion lock (and the user function can execute control * methods.) */ Status = AcpiUtAcquireReadLock (&AcpiGbl_NamespaceRwLock); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Lock the namespace around the walk. The namespace will be * unlocked/locked around each call to the user function - since the user * function must be allowed to make ACPICA calls itself (for example, it * will typically execute control methods during device enumeration.) */ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; } /* Now we can validate the starting node */ if (!AcpiNsValidateHandle (StartObject)) { Status = AE_BAD_PARAMETER; goto UnlockAndExit2; } Status = AcpiNsWalkNamespace (Type, StartObject, MaxDepth, ACPI_NS_WALK_UNLOCK, DescendingCallback, AscendingCallback, Context, ReturnValue); UnlockAndExit2: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); UnlockAndExit: (void) AcpiUtReleaseReadLock (&AcpiGbl_NamespaceRwLock); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiWalkNamespace) /******************************************************************************* * * FUNCTION: AcpiNsGetDeviceCallback * * PARAMETERS: Callback from AcpiGetDevice * * RETURN: Status * * DESCRIPTION: Takes callbacks from WalkNamespace and filters out all non- * present devices, or if they specified a HID, it filters based * on that. * ******************************************************************************/ static ACPI_STATUS AcpiNsGetDeviceCallback ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_GET_DEVICES_INFO *Info = Context; ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; UINT32 Flags; ACPI_PNP_DEVICE_ID *Hid; ACPI_PNP_DEVICE_ID_LIST *Cid; UINT32 i; BOOLEAN Found; int NoMatch; Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return (Status); } Node = AcpiNsValidateHandle (ObjHandle); Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return (Status); } if (!Node) { return (AE_BAD_PARAMETER); } /* * First, filter based on the device HID and CID. * * 01/2010: For this case where a specific HID is requested, we don't * want to run _STA until we have an actual HID match. Thus, we will * not unnecessarily execute _STA on devices for which the caller * doesn't care about. Previously, _STA was executed unconditionally * on all devices found here. * * A side-effect of this change is that now we will continue to search * for a matching HID even under device trees where the parent device * would have returned a _STA that indicates it is not present or * not functioning (thus aborting the search on that branch). */ if (Info->Hid != NULL) { Status = AcpiUtExecute_HID (Node, &Hid); if (Status == AE_NOT_FOUND) { return (AE_OK); } else if (ACPI_FAILURE (Status)) { return (AE_CTRL_DEPTH); } NoMatch = strcmp (Hid->String, Info->Hid); ACPI_FREE (Hid); if (NoMatch) { /* * HID does not match, attempt match within the * list of Compatible IDs (CIDs) */ Status = AcpiUtExecute_CID (Node, &Cid); if (Status == AE_NOT_FOUND) { return (AE_OK); } else if (ACPI_FAILURE (Status)) { return (AE_CTRL_DEPTH); } /* Walk the CID list */ Found = FALSE; for (i = 0; i < Cid->Count; i++) { if (strcmp (Cid->Ids[i].String, Info->Hid) == 0) { /* Found a matching CID */ Found = TRUE; break; } } ACPI_FREE (Cid); if (!Found) { return (AE_OK); } } } /* Run _STA to determine if device is present */ Status = AcpiUtExecute_STA (Node, &Flags); if (ACPI_FAILURE (Status)) { return (AE_CTRL_DEPTH); } if (!(Flags & ACPI_STA_DEVICE_PRESENT) && !(Flags & ACPI_STA_DEVICE_FUNCTIONING)) { /* * Don't examine the children of the device only when the * device is neither present nor functional. See ACPI spec, * description of _STA for more information. */ return (AE_CTRL_DEPTH); } /* We have a valid device, invoke the user function */ Status = Info->UserFunction (ObjHandle, NestingLevel, Info->Context, ReturnValue); return (Status); } /******************************************************************************* * * FUNCTION: AcpiGetDevices * * PARAMETERS: HID - HID to search for. Can be NULL. * UserFunction - Called when a matching object is found * Context - Passed to user function * ReturnValue - Location where return value of * UserFunction is put if terminated early * * RETURNS Return value from the UserFunction if terminated early. * Otherwise, returns NULL. * * DESCRIPTION: Performs a modified depth-first walk of the namespace tree, * starting (and ending) at the object specified by StartHandle. * The UserFunction is called whenever an object of type * Device is found. If the user function returns * a non-zero value, the search is terminated immediately and this * value is returned to the caller. * * This is a wrapper for WalkNamespace, but the callback performs * additional filtering. Please see AcpiNsGetDeviceCallback. * ******************************************************************************/ ACPI_STATUS AcpiGetDevices ( char *HID, ACPI_WALK_CALLBACK UserFunction, void *Context, void **ReturnValue) { ACPI_STATUS Status; ACPI_GET_DEVICES_INFO Info; ACPI_FUNCTION_TRACE (AcpiGetDevices); /* Parameter validation */ if (!UserFunction) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* * We're going to call their callback from OUR callback, so we need * to know what it is, and their context parameter. */ Info.Hid = HID; Info.Context = Context; Info.UserFunction = UserFunction; /* * Lock the namespace around the walk. * The namespace will be unlocked/locked around each call * to the user function - since this function * must be allowed to make Acpi calls itself. */ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiNsWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK, AcpiNsGetDeviceCallback, NULL, &Info, ReturnValue); (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiGetDevices) /******************************************************************************* * * FUNCTION: AcpiAttachData * * PARAMETERS: ObjHandle - Namespace node * Handler - Handler for this attachment * Data - Pointer to data to be attached * * RETURN: Status * * DESCRIPTION: Attach arbitrary data and handler to a namespace node. * ******************************************************************************/ ACPI_STATUS AcpiAttachData ( ACPI_HANDLE ObjHandle, ACPI_OBJECT_HANDLER Handler, void *Data) { ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; /* Parameter validation */ if (!ObjHandle || !Handler || !Data) { return (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return (Status); } /* Convert and validate the handle */ Node = AcpiNsValidateHandle (ObjHandle); if (!Node) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } Status = AcpiNsAttachData (Node, Handler, Data); UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return (Status); } ACPI_EXPORT_SYMBOL (AcpiAttachData) /******************************************************************************* * * FUNCTION: AcpiDetachData * * PARAMETERS: ObjHandle - Namespace node handle * Handler - Handler used in call to AcpiAttachData * * RETURN: Status * * DESCRIPTION: Remove data that was previously attached to a node. * ******************************************************************************/ ACPI_STATUS AcpiDetachData ( ACPI_HANDLE ObjHandle, ACPI_OBJECT_HANDLER Handler) { ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; /* Parameter validation */ if (!ObjHandle || !Handler) { return (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return (Status); } /* Convert and validate the handle */ Node = AcpiNsValidateHandle (ObjHandle); if (!Node) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } Status = AcpiNsDetachData (Node, Handler); UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return (Status); } ACPI_EXPORT_SYMBOL (AcpiDetachData) /******************************************************************************* * * FUNCTION: AcpiGetData * * PARAMETERS: ObjHandle - Namespace node * Handler - Handler used in call to AttachData * Data - Where the data is returned * * RETURN: Status * * DESCRIPTION: Retrieve data that was previously attached to a namespace node. * ******************************************************************************/ ACPI_STATUS AcpiGetData ( ACPI_HANDLE ObjHandle, ACPI_OBJECT_HANDLER Handler, void **Data) { ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; /* Parameter validation */ if (!ObjHandle || !Handler || !Data) { return (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return (Status); } /* Convert and validate the handle */ Node = AcpiNsValidateHandle (ObjHandle); if (!Node) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } Status = AcpiNsGetAttachedData (Node, Handler, Data); UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return (Status); } ACPI_EXPORT_SYMBOL (AcpiGetData) src/acpica/source/components/namespace/nsxfname.c000066400000000000000000000631711465205512700225100ustar00rootroot00000000000000/****************************************************************************** * * Module Name: nsxfname - Public interfaces to the ACPI subsystem * ACPI Namespace oriented interfaces * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acparser.h" #include "amlcode.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsxfname") /* Local prototypes */ static char * AcpiNsCopyDeviceId ( ACPI_PNP_DEVICE_ID *Dest, ACPI_PNP_DEVICE_ID *Source, char *StringArea); /****************************************************************************** * * FUNCTION: AcpiGetHandle * * PARAMETERS: Parent - Object to search under (search scope). * Pathname - Pointer to an asciiz string containing the * name * RetHandle - Where the return handle is returned * * RETURN: Status * * DESCRIPTION: This routine will search for a caller specified name in the * name space. The caller can restrict the search region by * specifying a non NULL parent. The parent value is itself a * namespace handle. * ******************************************************************************/ ACPI_STATUS AcpiGetHandle ( ACPI_HANDLE Parent, const char *Pathname, ACPI_HANDLE *RetHandle) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node = NULL; ACPI_NAMESPACE_NODE *PrefixNode = NULL; ACPI_FUNCTION_ENTRY (); /* Parameter Validation */ if (!RetHandle || !Pathname) { return (AE_BAD_PARAMETER); } /* Convert a parent handle to a prefix node */ if (Parent) { PrefixNode = AcpiNsValidateHandle (Parent); if (!PrefixNode) { return (AE_BAD_PARAMETER); } } /* * Valid cases are: * 1) Fully qualified pathname * 2) Parent + Relative pathname * * Error for */ if (ACPI_IS_ROOT_PREFIX (Pathname[0])) { /* Pathname is fully qualified (starts with '\') */ /* Special case for root-only, since we can't search for it */ if (!strcmp (Pathname, ACPI_NS_ROOT_PATH)) { *RetHandle = ACPI_CAST_PTR (ACPI_HANDLE, AcpiGbl_RootNode); return (AE_OK); } } else if (!PrefixNode) { /* Relative path with null prefix is disallowed */ return (AE_BAD_PARAMETER); } /* Find the Node and convert to a handle */ Status = AcpiNsGetNode (PrefixNode, Pathname, ACPI_NS_NO_UPSEARCH, &Node); if (ACPI_SUCCESS (Status)) { *RetHandle = ACPI_CAST_PTR (ACPI_HANDLE, Node); } return (Status); } ACPI_EXPORT_SYMBOL (AcpiGetHandle) /****************************************************************************** * * FUNCTION: AcpiGetName * * PARAMETERS: Handle - Handle to be converted to a pathname * NameType - Full pathname or single segment * Buffer - Buffer for returned path * * RETURN: Pointer to a string containing the fully qualified Name. * * DESCRIPTION: This routine returns the fully qualified name associated with * the Handle parameter. This and the AcpiPathnameToHandle are * complementary functions. * ******************************************************************************/ ACPI_STATUS AcpiGetName ( ACPI_HANDLE Handle, UINT32 NameType, ACPI_BUFFER *Buffer) { ACPI_STATUS Status; /* Parameter validation */ if (NameType > ACPI_NAME_TYPE_MAX) { return (AE_BAD_PARAMETER); } Status = AcpiUtValidateBuffer (Buffer); if (ACPI_FAILURE (Status)) { return (Status); } /* * Wants the single segment ACPI name. * Validate handle and convert to a namespace Node */ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return (Status); } if (NameType == ACPI_FULL_PATHNAME || NameType == ACPI_FULL_PATHNAME_NO_TRAILING) { /* Get the full pathname (From the namespace root) */ Status = AcpiNsHandleToPathname (Handle, Buffer, NameType == ACPI_FULL_PATHNAME ? FALSE : TRUE); } else { /* Get the single name */ Status = AcpiNsHandleToName (Handle, Buffer); } (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return (Status); } ACPI_EXPORT_SYMBOL (AcpiGetName) /****************************************************************************** * * FUNCTION: AcpiNsCopyDeviceId * * PARAMETERS: Dest - Pointer to the destination PNP_DEVICE_ID * Source - Pointer to the source PNP_DEVICE_ID * StringArea - Pointer to where to copy the dest string * * RETURN: Pointer to the next string area * * DESCRIPTION: Copy a single PNP_DEVICE_ID, including the string data. * ******************************************************************************/ static char * AcpiNsCopyDeviceId ( ACPI_PNP_DEVICE_ID *Dest, ACPI_PNP_DEVICE_ID *Source, char *StringArea) { /* Create the destination PNP_DEVICE_ID */ Dest->String = StringArea; Dest->Length = Source->Length; /* Copy actual string and return a pointer to the next string area */ memcpy (StringArea, Source->String, Source->Length); return (StringArea + Source->Length); } /****************************************************************************** * * FUNCTION: AcpiGetObjectInfo * * PARAMETERS: Handle - Object Handle * ReturnBuffer - Where the info is returned * * RETURN: Status * * DESCRIPTION: Returns information about an object as gleaned from the * namespace node and possibly by running several standard * control methods (Such as in the case of a device.) * * For Device and Processor objects, run the Device _HID, _UID, _CID, * _CLS, _ADR, _SxW, and _SxD methods. * * Note: Allocates the return buffer, must be freed by the caller. * * Note: This interface is intended to be used during the initial device * discovery namespace traversal. Therefore, no complex methods can be * executed, especially those that access operation regions. Therefore, do * not add any additional methods that could cause problems in this area. * Because of this reason support for the following methods has been removed: * 1) _SUB method was removed (11/2015) * 2) _STA method was removed (02/2018) * ******************************************************************************/ ACPI_STATUS AcpiGetObjectInfo ( ACPI_HANDLE Handle, ACPI_DEVICE_INFO **ReturnBuffer) { ACPI_NAMESPACE_NODE *Node; ACPI_DEVICE_INFO *Info; ACPI_PNP_DEVICE_ID_LIST *CidList = NULL; ACPI_PNP_DEVICE_ID *Hid = NULL; ACPI_PNP_DEVICE_ID *Uid = NULL; ACPI_PNP_DEVICE_ID *Cls = NULL; char *NextIdString; ACPI_OBJECT_TYPE Type; ACPI_NAME Name; UINT8 ParamCount= 0; UINT16 Valid = 0; UINT32 InfoSize; UINT32 i; ACPI_STATUS Status; /* Parameter validation */ if (!Handle || !ReturnBuffer) { return (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return (Status); } Node = AcpiNsValidateHandle (Handle); if (!Node) { (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return (AE_BAD_PARAMETER); } /* Get the namespace node data while the namespace is locked */ InfoSize = sizeof (ACPI_DEVICE_INFO); Type = Node->Type; Name = Node->Name.Integer; if (Node->Type == ACPI_TYPE_METHOD) { ParamCount = Node->Object->Method.ParamCount; } Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return (Status); } if ((Type == ACPI_TYPE_DEVICE) || (Type == ACPI_TYPE_PROCESSOR)) { /* * Get extra info for ACPI Device/Processor objects only: * Run the Device _HID, _UID, _CLS, and _CID methods. * * Note: none of these methods are required, so they may or may * not be present for this device. The Info->Valid bitfield is used * to indicate which methods were found and run successfully. */ /* Execute the Device._HID method */ Status = AcpiUtExecute_HID (Node, &Hid); if (ACPI_SUCCESS (Status)) { InfoSize += Hid->Length; Valid |= ACPI_VALID_HID; } /* Execute the Device._UID method */ Status = AcpiUtExecute_UID (Node, &Uid); if (ACPI_SUCCESS (Status)) { InfoSize += Uid->Length; Valid |= ACPI_VALID_UID; } /* Execute the Device._CID method */ Status = AcpiUtExecute_CID (Node, &CidList); if (ACPI_SUCCESS (Status)) { /* Add size of CID strings and CID pointer array */ InfoSize += (CidList->ListSize - sizeof (ACPI_PNP_DEVICE_ID_LIST)); Valid |= ACPI_VALID_CID; } /* Execute the Device._CLS method */ Status = AcpiUtExecute_CLS (Node, &Cls); if (ACPI_SUCCESS (Status)) { InfoSize += Cls->Length; Valid |= ACPI_VALID_CLS; } } /* * Now that we have the variable-length data, we can allocate the * return buffer */ Info = ACPI_ALLOCATE_ZEROED (InfoSize); if (!Info) { Status = AE_NO_MEMORY; goto Cleanup; } /* Get the fixed-length data */ if ((Type == ACPI_TYPE_DEVICE) || (Type == ACPI_TYPE_PROCESSOR)) { /* * Get extra info for ACPI Device/Processor objects only: * Run the _ADR and, SxW, and _SxD methods. * * Notes: none of these methods are required, so they may or may * not be present for this device. The Info->Valid bitfield is used * to indicate which methods were found and run successfully. */ /* Execute the Device._ADR method */ Status = AcpiUtEvaluateNumericObject (METHOD_NAME__ADR, Node, &Info->Address); if (ACPI_SUCCESS (Status)) { Valid |= ACPI_VALID_ADR; } /* Execute the Device._SxW methods */ Status = AcpiUtExecutePowerMethods (Node, AcpiGbl_LowestDstateNames, ACPI_NUM_SxW_METHODS, Info->LowestDstates); if (ACPI_SUCCESS (Status)) { Valid |= ACPI_VALID_SXWS; } /* Execute the Device._SxD methods */ Status = AcpiUtExecutePowerMethods (Node, AcpiGbl_HighestDstateNames, ACPI_NUM_SxD_METHODS, Info->HighestDstates); if (ACPI_SUCCESS (Status)) { Valid |= ACPI_VALID_SXDS; } } /* * Create a pointer to the string area of the return buffer. * Point to the end of the base ACPI_DEVICE_INFO structure. */ NextIdString = ACPI_CAST_PTR (char, Info->CompatibleIdList.Ids); if (CidList) { /* Point past the CID PNP_DEVICE_ID array */ NextIdString += ((ACPI_SIZE) CidList->Count * sizeof (ACPI_PNP_DEVICE_ID)); } /* * Copy the HID, UID, and CIDs to the return buffer. The variable-length * strings are copied to the reserved area at the end of the buffer. * * For HID and CID, check if the ID is a PCI Root Bridge. */ if (Hid) { NextIdString = AcpiNsCopyDeviceId (&Info->HardwareId, Hid, NextIdString); if (AcpiUtIsPciRootBridge (Hid->String)) { Info->Flags |= ACPI_PCI_ROOT_BRIDGE; } } if (Uid) { NextIdString = AcpiNsCopyDeviceId (&Info->UniqueId, Uid, NextIdString); } if (CidList) { Info->CompatibleIdList.Count = CidList->Count; Info->CompatibleIdList.ListSize = CidList->ListSize; /* Copy each CID */ for (i = 0; i < CidList->Count; i++) { NextIdString = AcpiNsCopyDeviceId (&Info->CompatibleIdList.Ids[i], &CidList->Ids[i], NextIdString); if (AcpiUtIsPciRootBridge (CidList->Ids[i].String)) { Info->Flags |= ACPI_PCI_ROOT_BRIDGE; } } } if (Cls) { (void) AcpiNsCopyDeviceId (&Info->ClassCode, Cls, NextIdString); } /* Copy the fixed-length data */ Info->InfoSize = InfoSize; Info->Type = Type; Info->Name = Name; Info->ParamCount = ParamCount; Info->Valid = Valid; *ReturnBuffer = Info; Status = AE_OK; Cleanup: if (Hid) { ACPI_FREE (Hid); } if (Uid) { ACPI_FREE (Uid); } if (CidList) { ACPI_FREE (CidList); } if (Cls) { ACPI_FREE (Cls); } return (Status); } ACPI_EXPORT_SYMBOL (AcpiGetObjectInfo) /****************************************************************************** * * FUNCTION: AcpiInstallMethod * * PARAMETERS: Buffer - An ACPI table containing one control method * * RETURN: Status * * DESCRIPTION: Install a control method into the namespace. If the method * name already exists in the namespace, it is overwritten. The * input buffer must contain a valid DSDT or SSDT containing a * single control method. * ******************************************************************************/ ACPI_STATUS AcpiInstallMethod ( UINT8 *Buffer) { ACPI_TABLE_HEADER *Table = ACPI_CAST_PTR (ACPI_TABLE_HEADER, Buffer); UINT8 *AmlBuffer; UINT8 *AmlStart; char *Path; ACPI_NAMESPACE_NODE *Node; ACPI_OPERAND_OBJECT *MethodObj; ACPI_PARSE_STATE ParserState; UINT32 AmlLength; UINT16 Opcode; UINT8 MethodFlags; ACPI_STATUS Status; /* Parameter validation */ if (!Buffer) { return (AE_BAD_PARAMETER); } /* Table must be a DSDT or SSDT */ if (!ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_DSDT) && !ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_SSDT)) { return (AE_BAD_HEADER); } /* First AML opcode in the table must be a control method */ ParserState.Aml = Buffer + sizeof (ACPI_TABLE_HEADER); Opcode = AcpiPsPeekOpcode (&ParserState); if (Opcode != AML_METHOD_OP) { return (AE_BAD_PARAMETER); } /* Extract method information from the raw AML */ ParserState.Aml += AcpiPsGetOpcodeSize (Opcode); ParserState.PkgEnd = AcpiPsGetNextPackageEnd (&ParserState); Path = AcpiPsGetNextNamestring (&ParserState); MethodFlags = *ParserState.Aml++; AmlStart = ParserState.Aml; AmlLength = (UINT32) ACPI_PTR_DIFF (ParserState.PkgEnd, AmlStart); /* * Allocate resources up-front. We don't want to have to delete a new * node from the namespace if we cannot allocate memory. */ AmlBuffer = ACPI_ALLOCATE (AmlLength); if (!AmlBuffer) { return (AE_NO_MEMORY); } MethodObj = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD); if (!MethodObj) { ACPI_FREE (AmlBuffer); return (AE_NO_MEMORY); } /* Lock namespace for AcpiNsLookup, we may be creating a new node */ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { goto ErrorExit; } /* The lookup either returns an existing node or creates a new one */ Status = AcpiNsLookup (NULL, Path, ACPI_TYPE_METHOD, ACPI_IMODE_LOAD_PASS1, ACPI_NS_DONT_OPEN_SCOPE | ACPI_NS_ERROR_IF_FOUND, NULL, &Node); (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) /* NsLookup */ { if (Status != AE_ALREADY_EXISTS) { goto ErrorExit; } /* Node existed previously, make sure it is a method node */ if (Node->Type != ACPI_TYPE_METHOD) { Status = AE_TYPE; goto ErrorExit; } } /* Copy the method AML to the local buffer */ memcpy (AmlBuffer, AmlStart, AmlLength); /* Initialize the method object with the new method's information */ MethodObj->Method.AmlStart = AmlBuffer; MethodObj->Method.AmlLength = AmlLength; MethodObj->Method.ParamCount = (UINT8) (MethodFlags & AML_METHOD_ARG_COUNT); if (MethodFlags & AML_METHOD_SERIALIZED) { MethodObj->Method.InfoFlags = ACPI_METHOD_SERIALIZED; MethodObj->Method.SyncLevel = (UINT8) ((MethodFlags & AML_METHOD_SYNC_LEVEL) >> 4); } /* * Now that it is complete, we can attach the new method object to * the method Node (detaches/deletes any existing object) */ Status = AcpiNsAttachObject (Node, MethodObj, ACPI_TYPE_METHOD); /* * Flag indicates AML buffer is dynamic, must be deleted later. * Must be set only after attach above. */ Node->Flags |= ANOBJ_ALLOCATED_BUFFER; /* Remove local reference to the method object */ AcpiUtRemoveReference (MethodObj); return (Status); ErrorExit: ACPI_FREE (AmlBuffer); ACPI_FREE (MethodObj); return (Status); } ACPI_EXPORT_SYMBOL (AcpiInstallMethod) src/acpica/source/components/namespace/nsxfobj.c000066400000000000000000000331531465205512700223370ustar00rootroot00000000000000/******************************************************************************* * * Module Name: nsxfobj - Public interfaces to the ACPI subsystem * ACPI Object oriented interfaces * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsxfobj") /******************************************************************************* * * FUNCTION: AcpiGetType * * PARAMETERS: Handle - Handle of object whose type is desired * RetType - Where the type will be placed * * RETURN: Status * * DESCRIPTION: This routine returns the type associated with a particular * handle * ******************************************************************************/ ACPI_STATUS AcpiGetType ( ACPI_HANDLE Handle, ACPI_OBJECT_TYPE *RetType) { ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; /* Parameter Validation */ if (!RetType) { return (AE_BAD_PARAMETER); } /* Special case for the predefined Root Node (return type ANY) */ if (Handle == ACPI_ROOT_OBJECT) { *RetType = ACPI_TYPE_ANY; return (AE_OK); } Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return (Status); } /* Convert and validate the handle */ Node = AcpiNsValidateHandle (Handle); if (!Node) { (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return (AE_BAD_PARAMETER); } *RetType = Node->Type; Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return (Status); } ACPI_EXPORT_SYMBOL (AcpiGetType) /******************************************************************************* * * FUNCTION: AcpiGetParent * * PARAMETERS: Handle - Handle of object whose parent is desired * RetHandle - Where the parent handle will be placed * * RETURN: Status * * DESCRIPTION: Returns a handle to the parent of the object represented by * Handle. * ******************************************************************************/ ACPI_STATUS AcpiGetParent ( ACPI_HANDLE Handle, ACPI_HANDLE *RetHandle) { ACPI_NAMESPACE_NODE *Node; ACPI_NAMESPACE_NODE *ParentNode; ACPI_STATUS Status; if (!RetHandle) { return (AE_BAD_PARAMETER); } /* Special case for the predefined Root Node (no parent) */ if (Handle == ACPI_ROOT_OBJECT) { return (AE_NULL_ENTRY); } Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return (Status); } /* Convert and validate the handle */ Node = AcpiNsValidateHandle (Handle); if (!Node) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } /* Get the parent entry */ ParentNode = Node->Parent; *RetHandle = ACPI_CAST_PTR (ACPI_HANDLE, ParentNode); /* Return exception if parent is null */ if (!ParentNode) { Status = AE_NULL_ENTRY; } UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return (Status); } ACPI_EXPORT_SYMBOL (AcpiGetParent) /******************************************************************************* * * FUNCTION: AcpiGetNextObject * * PARAMETERS: Type - Type of object to be searched for * Parent - Parent object whose children we are getting * LastChild - Previous child that was found. * The NEXT child will be returned * RetHandle - Where handle to the next object is placed * * RETURN: Status * * DESCRIPTION: Return the next peer object within the namespace. If Handle is * valid, Scope is ignored. Otherwise, the first object within * Scope is returned. * ******************************************************************************/ ACPI_STATUS AcpiGetNextObject ( ACPI_OBJECT_TYPE Type, ACPI_HANDLE Parent, ACPI_HANDLE Child, ACPI_HANDLE *RetHandle) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_NAMESPACE_NODE *ParentNode = NULL; ACPI_NAMESPACE_NODE *ChildNode = NULL; /* Parameter validation */ if (Type > ACPI_TYPE_EXTERNAL_MAX) { return (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return (Status); } /* If null handle, use the parent */ if (!Child) { /* Start search at the beginning of the specified scope */ ParentNode = AcpiNsValidateHandle (Parent); if (!ParentNode) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } } else { /* Non-null handle, ignore the parent */ /* Convert and validate the handle */ ChildNode = AcpiNsValidateHandle (Child); if (!ChildNode) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } } /* Internal function does the real work */ Node = AcpiNsGetNextNodeTyped (Type, ParentNode, ChildNode); if (!Node) { Status = AE_NOT_FOUND; goto UnlockAndExit; } if (RetHandle) { *RetHandle = ACPI_CAST_PTR (ACPI_HANDLE, Node); } UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return (Status); } ACPI_EXPORT_SYMBOL (AcpiGetNextObject) src/acpica/source/components/parser/000077500000000000000000000000001465205512700200555ustar00rootroot00000000000000src/acpica/source/components/parser/psargs.c000066400000000000000000001031111465205512700215150ustar00rootroot00000000000000/****************************************************************************** * * Module Name: psargs - Parse AML opcode arguments * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acnamesp.h" #include "acdispat.h" #include "acconvert.h" #define _COMPONENT ACPI_PARSER ACPI_MODULE_NAME ("psargs") /* Local prototypes */ static UINT32 AcpiPsGetNextPackageLength ( ACPI_PARSE_STATE *ParserState); static ACPI_PARSE_OBJECT * AcpiPsGetNextField ( ACPI_PARSE_STATE *ParserState); /******************************************************************************* * * FUNCTION: AcpiPsGetNextPackageLength * * PARAMETERS: ParserState - Current parser state object * * RETURN: Decoded package length. On completion, the AML pointer points * past the length byte or bytes. * * DESCRIPTION: Decode and return a package length field. * Note: Largest package length is 28 bits, from ACPI specification * ******************************************************************************/ static UINT32 AcpiPsGetNextPackageLength ( ACPI_PARSE_STATE *ParserState) { UINT8 *Aml = ParserState->Aml; UINT32 PackageLength = 0; UINT32 ByteCount; UINT8 ByteZeroMask = 0x3F; /* Default [0:5] */ ACPI_FUNCTION_TRACE (PsGetNextPackageLength); /* * Byte 0 bits [6:7] contain the number of additional bytes * used to encode the package length, either 0,1,2, or 3 */ ByteCount = (Aml[0] >> 6); ParserState->Aml += ((ACPI_SIZE) ByteCount + 1); /* Get bytes 3, 2, 1 as needed */ while (ByteCount) { /* * Final bit positions for the package length bytes: * Byte3->[20:27] * Byte2->[12:19] * Byte1->[04:11] * Byte0->[00:03] */ PackageLength |= (Aml[ByteCount] << ((ByteCount << 3) - 4)); ByteZeroMask = 0x0F; /* Use bits [0:3] of byte 0 */ ByteCount--; } /* Byte 0 is a special case, either bits [0:3] or [0:5] are used */ PackageLength |= (Aml[0] & ByteZeroMask); return_UINT32 (PackageLength); } /******************************************************************************* * * FUNCTION: AcpiPsGetNextPackageEnd * * PARAMETERS: ParserState - Current parser state object * * RETURN: Pointer to end-of-package +1 * * DESCRIPTION: Get next package length and return a pointer past the end of * the package. Consumes the package length field * ******************************************************************************/ UINT8 * AcpiPsGetNextPackageEnd ( ACPI_PARSE_STATE *ParserState) { UINT8 *Start = ParserState->Aml; UINT32 PackageLength; ACPI_FUNCTION_TRACE (PsGetNextPackageEnd); /* Function below updates ParserState->Aml */ PackageLength = AcpiPsGetNextPackageLength (ParserState); return_PTR (Start + PackageLength); /* end of package */ } /******************************************************************************* * * FUNCTION: AcpiPsGetNextNamestring * * PARAMETERS: ParserState - Current parser state object * * RETURN: Pointer to the start of the name string (pointer points into * the AML. * * DESCRIPTION: Get next raw namestring within the AML stream. Handles all name * prefix characters. Set parser state to point past the string. * (Name is consumed from the AML.) * ******************************************************************************/ char * AcpiPsGetNextNamestring ( ACPI_PARSE_STATE *ParserState) { UINT8 *Start = ParserState->Aml; UINT8 *End = ParserState->Aml; ACPI_FUNCTION_TRACE (PsGetNextNamestring); /* Point past any namestring prefix characters (backslash or carat) */ while (ACPI_IS_ROOT_PREFIX (*End) || ACPI_IS_PARENT_PREFIX (*End)) { End++; } /* Decode the path prefix character */ switch (*End) { case 0: /* NullName */ if (End == Start) { Start = NULL; } End++; break; case AML_DUAL_NAME_PREFIX: /* Two name segments */ End += 1 + (2 * ACPI_NAMESEG_SIZE); break; case AML_MULTI_NAME_PREFIX: /* Multiple name segments, 4 chars each, count in next byte */ End += 2 + (*(End + 1) * ACPI_NAMESEG_SIZE); break; default: /* Single name segment */ End += ACPI_NAMESEG_SIZE; break; } ParserState->Aml = End; return_PTR ((char *) Start); } /******************************************************************************* * * FUNCTION: AcpiPsGetNextNamepath * * PARAMETERS: ParserState - Current parser state object * Arg - Where the namepath will be stored * ArgCount - If the namepath points to a control method * the method's argument is returned here. * PossibleMethodCall - Whether the namepath can possibly be the * start of a method call * * RETURN: Status * * DESCRIPTION: Get next name (if method call, return # of required args). * Names are looked up in the internal namespace to determine * if the name represents a control method. If a method * is found, the number of arguments to the method is returned. * This information is critical for parsing to continue correctly. * ******************************************************************************/ ACPI_STATUS AcpiPsGetNextNamepath ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_STATE *ParserState, ACPI_PARSE_OBJECT *Arg, BOOLEAN PossibleMethodCall) { ACPI_STATUS Status; char *Path; ACPI_PARSE_OBJECT *NameOp; ACPI_OPERAND_OBJECT *MethodDesc; ACPI_NAMESPACE_NODE *Node; UINT8 *Start = ParserState->Aml; ACPI_FUNCTION_TRACE (PsGetNextNamepath); Path = AcpiPsGetNextNamestring (ParserState); AcpiPsInitOp (Arg, AML_INT_NAMEPATH_OP); /* Null path case is allowed, just exit */ if (!Path) { Arg->Common.Value.Name = Path; return_ACPI_STATUS (AE_OK); } /* * Lookup the name in the internal namespace, starting with the current * scope. We don't want to add anything new to the namespace here, * however, so we use MODE_EXECUTE. * Allow searching of the parent tree, but don't open a new scope - * we just want to lookup the object (must be mode EXECUTE to perform * the upsearch) */ Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node); /* * If this name is a control method invocation, we must * setup the method call */ if (ACPI_SUCCESS (Status) && PossibleMethodCall && (Node->Type == ACPI_TYPE_METHOD)) { if ((GET_CURRENT_ARG_TYPE (WalkState->ArgTypes) == ARGP_SUPERNAME) || (GET_CURRENT_ARG_TYPE (WalkState->ArgTypes) == ARGP_TARGET)) { /* * AcpiPsGetNextNamestring has increased the AML pointer past * the method invocation namestring, so we need to restore the * saved AML pointer back to the original method invocation * namestring. */ WalkState->ParserState.Aml = Start; WalkState->ArgCount = 1; AcpiPsInitOp (Arg, AML_INT_METHODCALL_OP); } /* This name is actually a control method invocation */ MethodDesc = AcpiNsGetAttachedObject (Node); ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Control Method invocation %4.4s - %p Desc %p Path=%p\n", Node->Name.Ascii, Node, MethodDesc, Path)); NameOp = AcpiPsAllocOp (AML_INT_NAMEPATH_OP, Start); if (!NameOp) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Change Arg into a METHOD CALL and attach name to it */ AcpiPsInitOp (Arg, AML_INT_METHODCALL_OP); NameOp->Common.Value.Name = Path; /* Point METHODCALL/NAME to the METHOD Node */ NameOp->Common.Node = Node; AcpiPsAppendArg (Arg, NameOp); if (!MethodDesc) { ACPI_ERROR ((AE_INFO, "Control Method %p has no attached object", Node)); return_ACPI_STATUS (AE_AML_INTERNAL); } ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Control Method - %p Args %X\n", Node, MethodDesc->Method.ParamCount)); /* Get the number of arguments to expect */ WalkState->ArgCount = MethodDesc->Method.ParamCount; return_ACPI_STATUS (AE_OK); } /* * Special handling if the name was not found during the lookup - * some NotFound cases are allowed */ if (Status == AE_NOT_FOUND) { /* 1) NotFound is ok during load pass 1/2 (allow forward references) */ if ((WalkState->ParseFlags & ACPI_PARSE_MODE_MASK) != ACPI_PARSE_EXECUTE) { Status = AE_OK; } /* 2) NotFound during a CondRefOf(x) is ok by definition */ else if (WalkState->Op->Common.AmlOpcode == AML_CONDITIONAL_REF_OF_OP) { Status = AE_OK; } /* * 3) NotFound while building a Package is ok at this point, we * may flag as an error later if slack mode is not enabled. * (Some ASL code depends on allowing this behavior) */ else if ((Arg->Common.Parent) && ((Arg->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) || (Arg->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP))) { Status = AE_OK; } } /* Final exception check (may have been changed from code above) */ if (ACPI_FAILURE (Status)) { ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Path, Status); if ((WalkState->ParseFlags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE) { /* Report a control method execution error */ Status = AcpiDsMethodError (Status, WalkState); } } /* Save the namepath */ Arg->Common.Value.Name = Path; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiPsGetNextSimpleArg * * PARAMETERS: ParserState - Current parser state object * ArgType - The argument type (AML_*_ARG) * Arg - Where the argument is returned * * RETURN: None * * DESCRIPTION: Get the next simple argument (constant, string, or namestring) * ******************************************************************************/ void AcpiPsGetNextSimpleArg ( ACPI_PARSE_STATE *ParserState, UINT32 ArgType, ACPI_PARSE_OBJECT *Arg) { UINT32 Length; UINT16 Opcode; UINT8 *Aml = ParserState->Aml; ACPI_FUNCTION_TRACE_U32 (PsGetNextSimpleArg, ArgType); switch (ArgType) { case ARGP_BYTEDATA: /* Get 1 byte from the AML stream */ Opcode = AML_BYTE_OP; Arg->Common.Value.Integer = (UINT64) *Aml; Length = 1; break; case ARGP_WORDDATA: /* Get 2 bytes from the AML stream */ Opcode = AML_WORD_OP; ACPI_MOVE_16_TO_64 (&Arg->Common.Value.Integer, Aml); Length = 2; break; case ARGP_DWORDDATA: /* Get 4 bytes from the AML stream */ Opcode = AML_DWORD_OP; ACPI_MOVE_32_TO_64 (&Arg->Common.Value.Integer, Aml); Length = 4; break; case ARGP_QWORDDATA: /* Get 8 bytes from the AML stream */ Opcode = AML_QWORD_OP; ACPI_MOVE_64_TO_64 (&Arg->Common.Value.Integer, Aml); Length = 8; break; case ARGP_CHARLIST: /* Get a pointer to the string, point past the string */ Opcode = AML_STRING_OP; Arg->Common.Value.String = ACPI_CAST_PTR (char, Aml); /* Find the null terminator */ Length = 0; while (Aml[Length]) { Length++; } Length++; break; case ARGP_NAME: case ARGP_NAMESTRING: AcpiPsInitOp (Arg, AML_INT_NAMEPATH_OP); Arg->Common.Value.Name = AcpiPsGetNextNamestring (ParserState); return_VOID; default: ACPI_ERROR ((AE_INFO, "Invalid ArgType 0x%X", ArgType)); return_VOID; } AcpiPsInitOp (Arg, Opcode); ParserState->Aml += Length; return_VOID; } /******************************************************************************* * * FUNCTION: AcpiPsGetNextField * * PARAMETERS: ParserState - Current parser state object * * RETURN: A newly allocated FIELD op * * DESCRIPTION: Get next field (NamedField, ReservedField, or AccessField) * ******************************************************************************/ static ACPI_PARSE_OBJECT * AcpiPsGetNextField ( ACPI_PARSE_STATE *ParserState) { UINT8 *Aml; ACPI_PARSE_OBJECT *Field; ACPI_PARSE_OBJECT *Arg = NULL; UINT16 Opcode; UINT32 Name; UINT8 AccessType; UINT8 AccessAttribute; UINT8 AccessLength; UINT32 PkgLength; UINT8 *PkgEnd; UINT32 BufferLength; ACPI_FUNCTION_TRACE (PsGetNextField); ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState); Aml = ParserState->Aml; /* Determine field type */ switch (ACPI_GET8 (ParserState->Aml)) { case AML_FIELD_OFFSET_OP: Opcode = AML_INT_RESERVEDFIELD_OP; ParserState->Aml++; break; case AML_FIELD_ACCESS_OP: Opcode = AML_INT_ACCESSFIELD_OP; ParserState->Aml++; break; case AML_FIELD_CONNECTION_OP: Opcode = AML_INT_CONNECTION_OP; ParserState->Aml++; break; case AML_FIELD_EXT_ACCESS_OP: Opcode = AML_INT_EXTACCESSFIELD_OP; ParserState->Aml++; break; default: Opcode = AML_INT_NAMEDFIELD_OP; break; } /* Allocate a new field op */ Field = AcpiPsAllocOp (Opcode, Aml); if (!Field) { return_PTR (NULL); } /* Decode the field type */ ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState); switch (Opcode) { case AML_INT_NAMEDFIELD_OP: /* Get the 4-character name */ ACPI_MOVE_32_TO_32 (&Name, ParserState->Aml); AcpiPsSetName (Field, Name); ParserState->Aml += ACPI_NAMESEG_SIZE; ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState); #ifdef ACPI_ASL_COMPILER /* * Because the package length isn't represented as a parse tree object, * take comments surrounding this and add to the previously created * parse node. */ if (Field->Common.InlineComment) { Field->Common.NameComment = Field->Common.InlineComment; } Field->Common.InlineComment = AcpiGbl_CurrentInlineComment; AcpiGbl_CurrentInlineComment = NULL; #endif /* Get the length which is encoded as a package length */ Field->Common.Value.Size = AcpiPsGetNextPackageLength (ParserState); break; case AML_INT_RESERVEDFIELD_OP: /* Get the length which is encoded as a package length */ Field->Common.Value.Size = AcpiPsGetNextPackageLength (ParserState); break; case AML_INT_ACCESSFIELD_OP: case AML_INT_EXTACCESSFIELD_OP: /* * Get AccessType and AccessAttrib and merge into the field Op * AccessType is first operand, AccessAttribute is second. stuff * these bytes into the node integer value for convenience. */ /* Get the two bytes (Type/Attribute) */ AccessType = ACPI_GET8 (ParserState->Aml); ParserState->Aml++; AccessAttribute = ACPI_GET8 (ParserState->Aml); ParserState->Aml++; Field->Common.Value.Integer = (UINT8) AccessType; Field->Common.Value.Integer |= (UINT16) (AccessAttribute << 8); /* This opcode has a third byte, AccessLength */ if (Opcode == AML_INT_EXTACCESSFIELD_OP) { AccessLength = ACPI_GET8 (ParserState->Aml); ParserState->Aml++; Field->Common.Value.Integer |= (UINT32) (AccessLength << 16); } break; case AML_INT_CONNECTION_OP: /* * Argument for Connection operator can be either a Buffer * (resource descriptor), or a NameString. */ Aml = ParserState->Aml; if (ACPI_GET8 (ParserState->Aml) == AML_BUFFER_OP) { ParserState->Aml++; ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState); PkgEnd = ParserState->Aml; PkgLength = AcpiPsGetNextPackageLength (ParserState); PkgEnd += PkgLength; ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState); if (ParserState->Aml < PkgEnd) { /* Non-empty list */ Arg = AcpiPsAllocOp (AML_INT_BYTELIST_OP, Aml); if (!Arg) { AcpiPsFreeOp (Field); return_PTR (NULL); } /* Get the actual buffer length argument */ Opcode = ACPI_GET8 (ParserState->Aml); ParserState->Aml++; ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState); switch (Opcode) { case AML_BYTE_OP: /* AML_BYTEDATA_ARG */ BufferLength = ACPI_GET8 (ParserState->Aml); ParserState->Aml += 1; break; case AML_WORD_OP: /* AML_WORDDATA_ARG */ BufferLength = ACPI_GET16 (ParserState->Aml); ParserState->Aml += 2; break; case AML_DWORD_OP: /* AML_DWORDATA_ARG */ BufferLength = ACPI_GET32 (ParserState->Aml); ParserState->Aml += 4; break; default: BufferLength = 0; break; } /* Fill in bytelist data */ ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState); Arg->Named.Value.Size = BufferLength; Arg->Named.Data = ParserState->Aml; } /* Skip to End of byte data */ ParserState->Aml = PkgEnd; } else { Arg = AcpiPsAllocOp (AML_INT_NAMEPATH_OP, Aml); if (!Arg) { AcpiPsFreeOp (Field); return_PTR (NULL); } /* Get the Namestring argument */ Arg->Common.Value.Name = AcpiPsGetNextNamestring (ParserState); } /* Link the buffer/namestring to parent (CONNECTION_OP) */ AcpiPsAppendArg (Field, Arg); break; default: /* Opcode was set in previous switch */ break; } return_PTR (Field); } /******************************************************************************* * * FUNCTION: AcpiPsGetNextArg * * PARAMETERS: WalkState - Current state * ParserState - Current parser state object * ArgType - The argument type (AML_*_ARG) * ReturnArg - Where the next arg is returned * * RETURN: Status, and an op object containing the next argument. * * DESCRIPTION: Get next argument (including complex list arguments that require * pushing the parser stack) * ******************************************************************************/ ACPI_STATUS AcpiPsGetNextArg ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_STATE *ParserState, UINT32 ArgType, ACPI_PARSE_OBJECT **ReturnArg) { ACPI_PARSE_OBJECT *Arg = NULL; ACPI_PARSE_OBJECT *Prev = NULL; ACPI_PARSE_OBJECT *Field; UINT32 Subop; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE_PTR (PsGetNextArg, ParserState); ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Expected argument type ARGP: %s (%2.2X)\n", AcpiUtGetArgumentTypeName (ArgType), ArgType)); switch (ArgType) { case ARGP_BYTEDATA: case ARGP_WORDDATA: case ARGP_DWORDDATA: case ARGP_CHARLIST: case ARGP_NAME: case ARGP_NAMESTRING: /* Constants, strings, and namestrings are all the same size */ Arg = AcpiPsAllocOp (AML_BYTE_OP, ParserState->Aml); if (!Arg) { return_ACPI_STATUS (AE_NO_MEMORY); } AcpiPsGetNextSimpleArg (ParserState, ArgType, Arg); break; case ARGP_PKGLENGTH: /* Package length, nothing returned */ ParserState->PkgEnd = AcpiPsGetNextPackageEnd (ParserState); break; case ARGP_FIELDLIST: if (ParserState->Aml < ParserState->PkgEnd) { /* Non-empty list */ while (ParserState->Aml < ParserState->PkgEnd) { Field = AcpiPsGetNextField (ParserState); if (!Field) { return_ACPI_STATUS (AE_NO_MEMORY); } if (Prev) { Prev->Common.Next = Field; } else { Arg = Field; } Prev = Field; } /* Skip to End of byte data */ ParserState->Aml = ParserState->PkgEnd; } break; case ARGP_BYTELIST: if (ParserState->Aml < ParserState->PkgEnd) { /* Non-empty list */ Arg = AcpiPsAllocOp (AML_INT_BYTELIST_OP, ParserState->Aml); if (!Arg) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Fill in bytelist data */ Arg->Common.Value.Size = (UINT32) ACPI_PTR_DIFF (ParserState->PkgEnd, ParserState->Aml); Arg->Named.Data = ParserState->Aml; /* Skip to End of byte data */ ParserState->Aml = ParserState->PkgEnd; } break; case ARGP_SIMPLENAME: case ARGP_NAME_OR_REF: ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** SimpleName/NameOrRef: %s (%2.2X)\n", AcpiUtGetArgumentTypeName (ArgType), ArgType)); Subop = AcpiPsPeekOpcode (ParserState); if (Subop == 0 || AcpiPsIsLeadingChar (Subop) || ACPI_IS_ROOT_PREFIX (Subop) || ACPI_IS_PARENT_PREFIX (Subop)) { /* NullName or NameString */ Arg = AcpiPsAllocOp (AML_INT_NAMEPATH_OP, ParserState->Aml); if (!Arg) { return_ACPI_STATUS (AE_NO_MEMORY); } Status = AcpiPsGetNextNamepath (WalkState, ParserState, Arg, ACPI_NOT_METHOD_CALL); } else { /* Single complex argument, nothing returned */ WalkState->ArgCount = 1; } break; case ARGP_TARGET: case ARGP_SUPERNAME: ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** Target/Supername: %s (%2.2X)\n", AcpiUtGetArgumentTypeName (ArgType), ArgType)); Subop = AcpiPsPeekOpcode (ParserState); if (Subop == 0 || AcpiPsIsLeadingChar (Subop) || ACPI_IS_ROOT_PREFIX (Subop) || ACPI_IS_PARENT_PREFIX (Subop)) { /* NULL target (zero). Convert to a NULL namepath */ Arg = AcpiPsAllocOp (AML_INT_NAMEPATH_OP, ParserState->Aml); if (!Arg) { return_ACPI_STATUS (AE_NO_MEMORY); } Status = AcpiPsGetNextNamepath (WalkState, ParserState, Arg, ACPI_POSSIBLE_METHOD_CALL); if (Arg->Common.AmlOpcode == AML_INT_METHODCALL_OP) { /* Free method call op and corresponding namestring sub-ob */ AcpiPsFreeOp (Arg->Common.Value.Arg); AcpiPsFreeOp (Arg); Arg = NULL; WalkState->ArgCount = 1; } } else { /* Single complex argument, nothing returned */ WalkState->ArgCount = 1; } break; case ARGP_DATAOBJ: case ARGP_TERMARG: ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** TermArg/DataObj: %s (%2.2X)\n", AcpiUtGetArgumentTypeName (ArgType), ArgType)); /* Single complex argument, nothing returned */ WalkState->ArgCount = 1; break; case ARGP_DATAOBJLIST: case ARGP_TERMLIST: case ARGP_OBJLIST: if (ParserState->Aml < ParserState->PkgEnd) { /* Non-empty list of variable arguments, nothing returned */ WalkState->ArgCount = ACPI_VAR_ARGS; } break; default: ACPI_ERROR ((AE_INFO, "Invalid ArgType: 0x%X", ArgType)); Status = AE_AML_OPERAND_TYPE; break; } *ReturnArg = Arg; return_ACPI_STATUS (Status); } src/acpica/source/components/parser/psloop.c000066400000000000000000000627541465205512700215530ustar00rootroot00000000000000/****************************************************************************** * * Module Name: psloop - Main AML parse loop * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ /* * Parse the AML and build an operation tree as most interpreters, (such as * Perl) do. Parsing is done by hand rather than with a YACC generated parser * to tightly constrain stack and dynamic memory usage. Parsing is kept * flexible and the code fairly compact by parsing based on a list of AML * opcode templates in AmlOpInfo[]. */ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "acparser.h" #include "acdispat.h" #include "amlcode.h" #include "acconvert.h" #include "acnamesp.h" #define _COMPONENT ACPI_PARSER ACPI_MODULE_NAME ("psloop") /* Local prototypes */ static ACPI_STATUS AcpiPsGetArguments ( ACPI_WALK_STATE *WalkState, UINT8 *AmlOpStart, ACPI_PARSE_OBJECT *Op); /******************************************************************************* * * FUNCTION: AcpiPsGetArguments * * PARAMETERS: WalkState - Current state * AmlOpStart - Op start in AML * Op - Current Op * * RETURN: Status * * DESCRIPTION: Get arguments for passed Op. * ******************************************************************************/ static ACPI_STATUS AcpiPsGetArguments ( ACPI_WALK_STATE *WalkState, UINT8 *AmlOpStart, ACPI_PARSE_OBJECT *Op) { ACPI_STATUS Status = AE_OK; ACPI_PARSE_OBJECT *Arg = NULL; ACPI_FUNCTION_TRACE_PTR (PsGetArguments, WalkState); ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Get arguments for opcode [%s]\n", Op->Common.AmlOpName)); switch (Op->Common.AmlOpcode) { case AML_BYTE_OP: /* AML_BYTEDATA_ARG */ case AML_WORD_OP: /* AML_WORDDATA_ARG */ case AML_DWORD_OP: /* AML_DWORDATA_ARG */ case AML_QWORD_OP: /* AML_QWORDATA_ARG */ case AML_STRING_OP: /* AML_ASCIICHARLIST_ARG */ /* Fill in constant or string argument directly */ AcpiPsGetNextSimpleArg (&(WalkState->ParserState), GET_CURRENT_ARG_TYPE (WalkState->ArgTypes), Op); break; case AML_INT_NAMEPATH_OP: /* AML_NAMESTRING_ARG */ Status = AcpiPsGetNextNamepath (WalkState, &(WalkState->ParserState), Op, ACPI_POSSIBLE_METHOD_CALL); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } WalkState->ArgTypes = 0; break; default: /* * Op is not a constant or string, append each argument to the Op */ while (GET_CURRENT_ARG_TYPE (WalkState->ArgTypes) && !WalkState->ArgCount) { WalkState->Aml = WalkState->ParserState.Aml; switch (Op->Common.AmlOpcode) { case AML_METHOD_OP: case AML_BUFFER_OP: case AML_PACKAGE_OP: case AML_VARIABLE_PACKAGE_OP: case AML_WHILE_OP: break; default: ASL_CV_CAPTURE_COMMENTS (WalkState); break; } Status = AcpiPsGetNextArg (WalkState, &(WalkState->ParserState), GET_CURRENT_ARG_TYPE (WalkState->ArgTypes), &Arg); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (Arg) { AcpiPsAppendArg (Op, Arg); } INCREMENT_ARG_LIST (WalkState->ArgTypes); } ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Final argument count: %8.8X pass %u\n", WalkState->ArgCount, WalkState->PassNumber)); /* Special processing for certain opcodes */ switch (Op->Common.AmlOpcode) { case AML_METHOD_OP: /* * Skip parsing of control method because we don't have enough * info in the first pass to parse it correctly. * * Save the length and address of the body */ Op->Named.Data = WalkState->ParserState.Aml; Op->Named.Length = (UINT32) (WalkState->ParserState.PkgEnd - WalkState->ParserState.Aml); /* Skip body of method */ WalkState->ParserState.Aml = WalkState->ParserState.PkgEnd; WalkState->ArgCount = 0; break; case AML_BUFFER_OP: case AML_PACKAGE_OP: case AML_VARIABLE_PACKAGE_OP: if ((Op->Common.Parent) && (Op->Common.Parent->Common.AmlOpcode == AML_NAME_OP) && (WalkState->PassNumber <= ACPI_IMODE_LOAD_PASS2)) { ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Setup Package/Buffer: Pass %u, AML Ptr: %p\n", WalkState->PassNumber, AmlOpStart)); /* * Skip parsing of Buffers and Packages because we don't have * enough info in the first pass to parse them correctly. */ Op->Named.Data = AmlOpStart; Op->Named.Length = (UINT32) (WalkState->ParserState.PkgEnd - AmlOpStart); /* Skip body */ WalkState->ParserState.Aml = WalkState->ParserState.PkgEnd; WalkState->ArgCount = 0; } break; case AML_WHILE_OP: if (WalkState->ControlState) { WalkState->ControlState->Control.PackageEnd = WalkState->ParserState.PkgEnd; } break; default: /* No action for all other opcodes */ break; } break; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiPsParseLoop * * PARAMETERS: WalkState - Current state * * RETURN: Status * * DESCRIPTION: Parse AML (pointed to by the current parser state) and return * a tree of ops. * ******************************************************************************/ ACPI_STATUS AcpiPsParseLoop ( ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_PARSE_OBJECT *Op = NULL; /* current op */ ACPI_PARSE_STATE *ParserState; UINT8 *AmlOpStart = NULL; UINT8 OpcodeLength; ACPI_FUNCTION_TRACE_PTR (PsParseLoop, WalkState); if (WalkState->DescendingCallback == NULL) { return_ACPI_STATUS (AE_BAD_PARAMETER); } ParserState = &WalkState->ParserState; WalkState->ArgTypes = 0; #ifndef ACPI_CONSTANT_EVAL_ONLY if (WalkState->WalkType & ACPI_WALK_METHOD_RESTART) { /* We are restarting a preempted control method */ if (AcpiPsHasCompletedScope (ParserState)) { /* * We must check if a predicate to an IF or WHILE statement * was just completed */ if ((ParserState->Scope->ParseScope.Op) && ((ParserState->Scope->ParseScope.Op->Common.AmlOpcode == AML_IF_OP) || (ParserState->Scope->ParseScope.Op->Common.AmlOpcode == AML_WHILE_OP)) && (WalkState->ControlState) && (WalkState->ControlState->Common.State == ACPI_CONTROL_PREDICATE_EXECUTING)) { /* * A predicate was just completed, get the value of the * predicate and branch based on that value */ WalkState->Op = NULL; Status = AcpiDsGetPredicateValue (WalkState, ACPI_TO_POINTER (TRUE)); if (ACPI_FAILURE (Status) && !ACPI_CNTL_EXCEPTION (Status)) { if (Status == AE_AML_NO_RETURN_VALUE) { ACPI_EXCEPTION ((AE_INFO, Status, "Invoked method did not return a value")); } ACPI_EXCEPTION ((AE_INFO, Status, "GetPredicate Failed")); return_ACPI_STATUS (Status); } Status = AcpiPsNextParseState (WalkState, Op, Status); } AcpiPsPopScope (ParserState, &Op, &WalkState->ArgTypes, &WalkState->ArgCount); ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Popped scope, Op=%p\n", Op)); } else if (WalkState->PrevOp) { /* We were in the middle of an op */ Op = WalkState->PrevOp; WalkState->ArgTypes = WalkState->PrevArgTypes; } } #endif /* Iterative parsing loop, while there is more AML to process: */ while ((ParserState->Aml < ParserState->AmlEnd) || (Op)) { ASL_CV_CAPTURE_COMMENTS (WalkState); AmlOpStart = ParserState->Aml; if (!Op) { Status = AcpiPsCreateOp (WalkState, AmlOpStart, &Op); if (ACPI_FAILURE (Status)) { /* * ACPI_PARSE_MODULE_LEVEL means that we are loading a table by * executing it as a control method. However, if we encounter * an error while loading the table, we need to keep trying to * load the table rather than aborting the table load. Set the * status to AE_OK to proceed with the table load. */ if ((WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) && ((Status == AE_ALREADY_EXISTS) || (Status == AE_NOT_FOUND))) { Status = AE_OK; } if (Status == AE_CTRL_PARSE_CONTINUE) { continue; } if (Status == AE_CTRL_PARSE_PENDING) { Status = AE_OK; } if (Status == AE_CTRL_TERMINATE) { return_ACPI_STATUS (Status); } Status = AcpiPsCompleteOp (WalkState, &Op, Status); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (AcpiNsOpensScope ( AcpiPsGetOpcodeInfo (WalkState->Opcode)->ObjectType)) { /* * If the scope/device op fails to parse, skip the body of * the scope op because the parse failure indicates that * the device may not exist. */ ACPI_INFO (("Skipping parse of AML opcode: %s (0x%4.4X)", AcpiPsGetOpcodeName (WalkState->Opcode), WalkState->Opcode)); /* * Determine the opcode length before skipping the opcode. * An opcode can be 1 byte or 2 bytes in length. */ OpcodeLength = 1; if ((WalkState->Opcode & 0xFF00) == AML_EXTENDED_OPCODE) { OpcodeLength = 2; } WalkState->ParserState.Aml = WalkState->Aml + OpcodeLength; WalkState->ParserState.Aml = AcpiPsGetNextPackageEnd(&WalkState->ParserState); WalkState->Aml = WalkState->ParserState.Aml; } continue; } AcpiExStartTraceOpcode (Op, WalkState); } /* * Start ArgCount at zero because we don't know if there are * any args yet */ WalkState->ArgCount = 0; switch (Op->Common.AmlOpcode) { case AML_BYTE_OP: case AML_WORD_OP: case AML_DWORD_OP: case AML_QWORD_OP: break; default: ASL_CV_CAPTURE_COMMENTS (WalkState); break; } /* Are there any arguments that must be processed? */ if (WalkState->ArgTypes) { /* Get arguments */ Status = AcpiPsGetArguments (WalkState, AmlOpStart, Op); if (ACPI_FAILURE (Status)) { Status = AcpiPsCompleteOp (WalkState, &Op, Status); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if ((WalkState->ControlState) && ((WalkState->ControlState->Control.Opcode == AML_IF_OP) || (WalkState->ControlState->Control.Opcode == AML_WHILE_OP))) { /* * If the if/while op fails to parse, we will skip parsing * the body of the op. */ ParserState->Aml = WalkState->ControlState->Control.AmlPredicateStart + 1; ParserState->Aml = AcpiPsGetNextPackageEnd (ParserState); WalkState->Aml = ParserState->Aml; ACPI_ERROR ((AE_INFO, "Skipping While/If block")); if (*WalkState->Aml == AML_ELSE_OP) { ACPI_ERROR ((AE_INFO, "Skipping Else block")); WalkState->ParserState.Aml = WalkState->Aml + 1; WalkState->ParserState.Aml = AcpiPsGetNextPackageEnd (ParserState); WalkState->Aml = ParserState->Aml; } ACPI_FREE(AcpiUtPopGenericState (&WalkState->ControlState)); } Op = NULL; continue; } } /* Check for arguments that need to be processed */ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Parseloop: argument count: %8.8X\n", WalkState->ArgCount)); if (WalkState->ArgCount) { /* * There are arguments (complex ones), push Op and * prepare for argument */ Status = AcpiPsPushScope (ParserState, Op, WalkState->ArgTypes, WalkState->ArgCount); if (ACPI_FAILURE (Status)) { Status = AcpiPsCompleteOp (WalkState, &Op, Status); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } continue; } Op = NULL; continue; } /* * All arguments have been processed -- Op is complete, * prepare for next */ WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); if (WalkState->OpInfo->Flags & AML_NAMED) { if (Op->Common.AmlOpcode == AML_REGION_OP || Op->Common.AmlOpcode == AML_DATA_REGION_OP) { /* * Skip parsing of control method or opregion body, * because we don't have enough info in the first pass * to parse them correctly. * * Completed parsing an OpRegion declaration, we now * know the length. */ Op->Named.Length = (UINT32) (ParserState->Aml - Op->Named.Data); } } if (WalkState->OpInfo->Flags & AML_CREATE) { /* * Backup to beginning of CreateXXXfield declaration (1 for * Opcode) * * BodyLength is unknown until we parse the body */ Op->Named.Length = (UINT32) (ParserState->Aml - Op->Named.Data); } if (Op->Common.AmlOpcode == AML_BANK_FIELD_OP) { /* * Backup to beginning of BankField declaration * * BodyLength is unknown until we parse the body */ Op->Named.Length = (UINT32) (ParserState->Aml - Op->Named.Data); } /* This op complete, notify the dispatcher */ if (WalkState->AscendingCallback != NULL) { WalkState->Op = Op; WalkState->Opcode = Op->Common.AmlOpcode; Status = WalkState->AscendingCallback (WalkState); Status = AcpiPsNextParseState (WalkState, Op, Status); if (Status == AE_CTRL_PENDING) { Status = AE_OK; } else if ((WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) && (ACPI_AML_EXCEPTION(Status) || Status == AE_ALREADY_EXISTS || Status == AE_NOT_FOUND)) { /* * ACPI_PARSE_MODULE_LEVEL flag means that we are currently * loading a table by executing it as a control method. * However, if we encounter an error while loading the table, * we need to keep trying to load the table rather than * aborting the table load (setting the status to AE_OK * continues the table load). If we get a failure at this * point, it means that the dispatcher got an error while * trying to execute the Op. */ Status = AE_OK; } } Status = AcpiPsCompleteOp (WalkState, &Op, Status); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } /* while ParserState->Aml */ Status = AcpiPsCompleteFinalOp (WalkState, Op, Status); return_ACPI_STATUS (Status); } src/acpica/source/components/parser/psobject.c000066400000000000000000000736211465205512700220430ustar00rootroot00000000000000/****************************************************************************** * * Module Name: psobject - Support for parse objects * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acconvert.h" #include "acnamesp.h" #define _COMPONENT ACPI_PARSER ACPI_MODULE_NAME ("psobject") /* Local prototypes */ static ACPI_STATUS AcpiPsGetAmlOpcode ( ACPI_WALK_STATE *WalkState); /******************************************************************************* * * FUNCTION: AcpiPsGetAmlOpcode * * PARAMETERS: WalkState - Current state * * RETURN: Status * * DESCRIPTION: Extract the next AML opcode from the input stream. * ******************************************************************************/ static ACPI_STATUS AcpiPsGetAmlOpcode ( ACPI_WALK_STATE *WalkState) { ACPI_ERROR_ONLY (UINT32 AmlOffset); ACPI_FUNCTION_TRACE_PTR (PsGetAmlOpcode, WalkState); WalkState->Aml = WalkState->ParserState.Aml; WalkState->Opcode = AcpiPsPeekOpcode (&(WalkState->ParserState)); /* * First cut to determine what we have found: * 1) A valid AML opcode * 2) A name string * 3) An unknown/invalid opcode */ WalkState->OpInfo = AcpiPsGetOpcodeInfo (WalkState->Opcode); switch (WalkState->OpInfo->Class) { case AML_CLASS_ASCII: case AML_CLASS_PREFIX: /* * Starts with a valid prefix or ASCII char, this is a name * string. Convert the bare name string to a namepath. */ WalkState->Opcode = AML_INT_NAMEPATH_OP; WalkState->ArgTypes = ARGP_NAMESTRING; break; case AML_CLASS_UNKNOWN: /* The opcode is unrecognized. Complain and skip unknown opcodes */ if (WalkState->PassNumber == 2) { ACPI_ERROR_ONLY(AmlOffset = (UINT32) ACPI_PTR_DIFF (WalkState->Aml, WalkState->ParserState.AmlStart)); ACPI_ERROR ((AE_INFO, "Unknown opcode 0x%.2X at table offset 0x%.4X, ignoring", WalkState->Opcode, (UINT32) (AmlOffset + sizeof (ACPI_TABLE_HEADER)))); ACPI_DUMP_BUFFER ((WalkState->ParserState.Aml - 16), 48); #ifdef ACPI_ASL_COMPILER /* * This is executed for the disassembler only. Output goes * to the disassembled ASL output file. */ AcpiOsPrintf ( "/*\nError: Unknown opcode 0x%.2X at table offset 0x%.4X, context:\n", WalkState->Opcode, (UINT32) (AmlOffset + sizeof (ACPI_TABLE_HEADER))); ACPI_ERROR ((AE_INFO, "Aborting disassembly, AML byte code is corrupt")); /* Dump the context surrounding the invalid opcode */ AcpiUtDumpBuffer (((UINT8 *) WalkState->ParserState.Aml - 16), 48, DB_BYTE_DISPLAY, (AmlOffset + sizeof (ACPI_TABLE_HEADER) - 16)); AcpiOsPrintf (" */\n"); /* * Just abort the disassembly, cannot continue because the * parser is essentially lost. The disassembler can then * randomly fail because an ill-constructed parse tree * can result. */ return_ACPI_STATUS (AE_AML_BAD_OPCODE); #endif } /* Increment past one-byte or two-byte opcode */ WalkState->ParserState.Aml++; if (WalkState->Opcode > 0xFF) /* Can only happen if first byte is 0x5B */ { WalkState->ParserState.Aml++; } return_ACPI_STATUS (AE_CTRL_PARSE_CONTINUE); default: /* Found opcode info, this is a normal opcode */ WalkState->ParserState.Aml += AcpiPsGetOpcodeSize (WalkState->Opcode); WalkState->ArgTypes = WalkState->OpInfo->ParseArgs; break; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiPsBuildNamedOp * * PARAMETERS: WalkState - Current state * AmlOpStart - Begin of named Op in AML * UnnamedOp - Early Op (not a named Op) * Op - Returned Op * * RETURN: Status * * DESCRIPTION: Parse a named Op * ******************************************************************************/ ACPI_STATUS AcpiPsBuildNamedOp ( ACPI_WALK_STATE *WalkState, UINT8 *AmlOpStart, ACPI_PARSE_OBJECT *UnnamedOp, ACPI_PARSE_OBJECT **Op) { ACPI_STATUS Status = AE_OK; ACPI_PARSE_OBJECT *Arg = NULL; ACPI_FUNCTION_TRACE_PTR (PsBuildNamedOp, WalkState); UnnamedOp->Common.Value.Arg = NULL; UnnamedOp->Common.ArgListLength = 0; UnnamedOp->Common.AmlOpcode = WalkState->Opcode; /* * Get and append arguments until we find the node that contains * the name (the type ARGP_NAME). */ while (GET_CURRENT_ARG_TYPE (WalkState->ArgTypes) && (GET_CURRENT_ARG_TYPE (WalkState->ArgTypes) != ARGP_NAME)) { ASL_CV_CAPTURE_COMMENTS (WalkState); Status = AcpiPsGetNextArg (WalkState, &(WalkState->ParserState), GET_CURRENT_ARG_TYPE (WalkState->ArgTypes), &Arg); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } AcpiPsAppendArg (UnnamedOp, Arg); INCREMENT_ARG_LIST (WalkState->ArgTypes); } /* are there any inline comments associated with the NameSeg?? If so, save this. */ ASL_CV_CAPTURE_COMMENTS (WalkState); #ifdef ACPI_ASL_COMPILER if (AcpiGbl_CurrentInlineComment != NULL) { UnnamedOp->Common.NameComment = AcpiGbl_CurrentInlineComment; AcpiGbl_CurrentInlineComment = NULL; } #endif /* * Make sure that we found a NAME and didn't run out of arguments */ if (!GET_CURRENT_ARG_TYPE (WalkState->ArgTypes)) { return_ACPI_STATUS (AE_AML_NO_OPERAND); } /* We know that this arg is a name, move to next arg */ INCREMENT_ARG_LIST (WalkState->ArgTypes); /* * Find the object. This will either insert the object into * the namespace or simply look it up */ WalkState->Op = NULL; Status = WalkState->DescendingCallback (WalkState, Op); if (ACPI_FAILURE (Status)) { if (Status != AE_CTRL_TERMINATE) { ACPI_EXCEPTION ((AE_INFO, Status, "During name lookup/catalog")); } return_ACPI_STATUS (Status); } if (!*Op) { return_ACPI_STATUS (AE_CTRL_PARSE_CONTINUE); } Status = AcpiPsNextParseState (WalkState, *Op, Status); if (ACPI_FAILURE (Status)) { if (Status == AE_CTRL_PENDING) { Status = AE_CTRL_PARSE_PENDING; } return_ACPI_STATUS (Status); } AcpiPsAppendArg (*Op, UnnamedOp->Common.Value.Arg); #ifdef ACPI_ASL_COMPILER /* save any comments that might be associated with UnnamedOp. */ (*Op)->Common.InlineComment = UnnamedOp->Common.InlineComment; (*Op)->Common.EndNodeComment = UnnamedOp->Common.EndNodeComment; (*Op)->Common.CloseBraceComment = UnnamedOp->Common.CloseBraceComment; (*Op)->Common.NameComment = UnnamedOp->Common.NameComment; (*Op)->Common.CommentList = UnnamedOp->Common.CommentList; (*Op)->Common.EndBlkComment = UnnamedOp->Common.EndBlkComment; (*Op)->Common.CvFilename = UnnamedOp->Common.CvFilename; (*Op)->Common.CvParentFilename = UnnamedOp->Common.CvParentFilename; (*Op)->Named.Aml = UnnamedOp->Common.Aml; UnnamedOp->Common.InlineComment = NULL; UnnamedOp->Common.EndNodeComment = NULL; UnnamedOp->Common.CloseBraceComment = NULL; UnnamedOp->Common.NameComment = NULL; UnnamedOp->Common.CommentList = NULL; UnnamedOp->Common.EndBlkComment = NULL; #endif if ((*Op)->Common.AmlOpcode == AML_REGION_OP || (*Op)->Common.AmlOpcode == AML_DATA_REGION_OP) { /* * Defer final parsing of an OperationRegion body, because we don't * have enough info in the first pass to parse it correctly (i.e., * there may be method calls within the TermArg elements of the body.) * * However, we must continue parsing because the opregion is not a * standalone package -- we don't know where the end is at this point. * * (Length is unknown until parse of the body complete) */ (*Op)->Named.Data = AmlOpStart; (*Op)->Named.Length = 0; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiPsCreateOp * * PARAMETERS: WalkState - Current state * AmlOpStart - Op start in AML * NewOp - Returned Op * * RETURN: Status * * DESCRIPTION: Get Op from AML * ******************************************************************************/ ACPI_STATUS AcpiPsCreateOp ( ACPI_WALK_STATE *WalkState, UINT8 *AmlOpStart, ACPI_PARSE_OBJECT **NewOp) { ACPI_STATUS Status = AE_OK; ACPI_PARSE_OBJECT *Op; ACPI_PARSE_OBJECT *NamedOp = NULL; ACPI_PARSE_OBJECT *ParentScope; UINT8 ArgumentCount; const ACPI_OPCODE_INFO *OpInfo; ACPI_FUNCTION_TRACE_PTR (PsCreateOp, WalkState); Status = AcpiPsGetAmlOpcode (WalkState); if (Status == AE_CTRL_PARSE_CONTINUE) { return_ACPI_STATUS (AE_CTRL_PARSE_CONTINUE); } if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Create Op structure and append to parent's argument list */ WalkState->OpInfo = AcpiPsGetOpcodeInfo (WalkState->Opcode); Op = AcpiPsAllocOp (WalkState->Opcode, AmlOpStart); if (!Op) { return_ACPI_STATUS (AE_NO_MEMORY); } if (WalkState->OpInfo->Flags & AML_NAMED) { Status = AcpiPsBuildNamedOp (WalkState, AmlOpStart, Op, &NamedOp); AcpiPsFreeOp (Op); #ifdef ACPI_ASL_COMPILER if (AcpiGbl_DisasmFlag && WalkState->Opcode == AML_EXTERNAL_OP && Status == AE_NOT_FOUND) { /* * If parsing of AML_EXTERNAL_OP's name path fails, then skip * past this opcode and keep parsing. This is a much better * alternative than to abort the entire disassembler. At this * point, the ParserState is at the end of the namepath of the * external declaration opcode. Setting WalkState->Aml to * WalkState->ParserState.Aml + 2 moves increments the * WalkState->Aml past the object type and the paramcount of the * external opcode. */ WalkState->Aml = WalkState->ParserState.Aml + 2; WalkState->ParserState.Aml = WalkState->Aml; return_ACPI_STATUS (AE_CTRL_PARSE_CONTINUE); } #endif if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } *NewOp = NamedOp; return_ACPI_STATUS (AE_OK); } /* Not a named opcode, just allocate Op and append to parent */ if (WalkState->OpInfo->Flags & AML_CREATE) { /* * Backup to beginning of CreateXXXfield declaration * BodyLength is unknown until we parse the body */ Op->Named.Data = AmlOpStart; Op->Named.Length = 0; } if (WalkState->Opcode == AML_BANK_FIELD_OP) { /* * Backup to beginning of BankField declaration * BodyLength is unknown until we parse the body */ Op->Named.Data = AmlOpStart; Op->Named.Length = 0; } ParentScope = AcpiPsGetParentScope (&(WalkState->ParserState)); AcpiPsAppendArg (ParentScope, Op); if (ParentScope) { OpInfo = AcpiPsGetOpcodeInfo (ParentScope->Common.AmlOpcode); if (OpInfo->Flags & AML_HAS_TARGET) { ArgumentCount = AcpiPsGetArgumentCount (OpInfo->Type); if (ParentScope->Common.ArgListLength > ArgumentCount) { Op->Common.Flags |= ACPI_PARSEOP_TARGET; } } /* * Special case for both Increment() and Decrement(), where * the lone argument is both a source and a target. */ else if ((ParentScope->Common.AmlOpcode == AML_INCREMENT_OP) || (ParentScope->Common.AmlOpcode == AML_DECREMENT_OP)) { Op->Common.Flags |= ACPI_PARSEOP_TARGET; } } if (WalkState->DescendingCallback != NULL) { /* * Find the object. This will either insert the object into * the namespace or simply look it up */ WalkState->Op = *NewOp = Op; Status = WalkState->DescendingCallback (WalkState, &Op); Status = AcpiPsNextParseState (WalkState, Op, Status); if (Status == AE_CTRL_PENDING) { Status = AE_CTRL_PARSE_PENDING; } } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiPsCompleteOp * * PARAMETERS: WalkState - Current state * Op - Returned Op * Status - Parse status before complete Op * * RETURN: Status * * DESCRIPTION: Complete Op * ******************************************************************************/ ACPI_STATUS AcpiPsCompleteOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT **Op, ACPI_STATUS Status) { ACPI_STATUS Status2; ACPI_FUNCTION_TRACE_PTR (PsCompleteOp, WalkState); /* * Finished one argument of the containing scope */ WalkState->ParserState.Scope->ParseScope.ArgCount--; /* Close this Op (will result in parse subtree deletion) */ Status2 = AcpiPsCompleteThisOp (WalkState, *Op); if (ACPI_FAILURE (Status2)) { return_ACPI_STATUS (Status2); } *Op = NULL; switch (Status) { case AE_OK: break; case AE_CTRL_TRANSFER: /* We are about to transfer to a called method */ WalkState->PrevOp = NULL; WalkState->PrevArgTypes = WalkState->ArgTypes; return_ACPI_STATUS (Status); case AE_CTRL_END: AcpiPsPopScope (&(WalkState->ParserState), Op, &WalkState->ArgTypes, &WalkState->ArgCount); if (*Op) { WalkState->Op = *Op; WalkState->OpInfo = AcpiPsGetOpcodeInfo ((*Op)->Common.AmlOpcode); WalkState->Opcode = (*Op)->Common.AmlOpcode; Status = WalkState->AscendingCallback (WalkState); (void) AcpiPsNextParseState (WalkState, *Op, Status); Status2 = AcpiPsCompleteThisOp (WalkState, *Op); if (ACPI_FAILURE (Status2)) { return_ACPI_STATUS (Status2); } } break; case AE_CTRL_BREAK: case AE_CTRL_CONTINUE: /* Pop off scopes until we find the While */ while (!(*Op) || ((*Op)->Common.AmlOpcode != AML_WHILE_OP)) { AcpiPsPopScope (&(WalkState->ParserState), Op, &WalkState->ArgTypes, &WalkState->ArgCount); } /* Close this iteration of the While loop */ WalkState->Op = *Op; WalkState->OpInfo = AcpiPsGetOpcodeInfo ((*Op)->Common.AmlOpcode); WalkState->Opcode = (*Op)->Common.AmlOpcode; Status = WalkState->AscendingCallback (WalkState); (void) AcpiPsNextParseState (WalkState, *Op, Status); Status2 = AcpiPsCompleteThisOp (WalkState, *Op); if (ACPI_FAILURE (Status2)) { return_ACPI_STATUS (Status2); } break; case AE_CTRL_TERMINATE: /* Clean up */ do { if (*Op) { Status2 = AcpiPsCompleteThisOp (WalkState, *Op); if (ACPI_FAILURE (Status2)) { return_ACPI_STATUS (Status2); } AcpiUtDeleteGenericState ( AcpiUtPopGenericState (&WalkState->ControlState)); } AcpiPsPopScope (&(WalkState->ParserState), Op, &WalkState->ArgTypes, &WalkState->ArgCount); } while (*Op); return_ACPI_STATUS (AE_OK); default: /* All other non-AE_OK status */ do { if (*Op) { /* * These Opcodes need to be removed from the namespace because they * get created even if these opcodes cannot be created due to * errors. */ if (((*Op)->Common.AmlOpcode == AML_REGION_OP) || ((*Op)->Common.AmlOpcode == AML_DATA_REGION_OP)) { AcpiNsDeleteChildren ((*Op)->Common.Node); AcpiNsRemoveNode ((*Op)->Common.Node); (*Op)->Common.Node = NULL; AcpiPsDeleteParseTree (*Op); } Status2 = AcpiPsCompleteThisOp (WalkState, *Op); if (ACPI_FAILURE (Status2)) { return_ACPI_STATUS (Status2); } } AcpiPsPopScope (&(WalkState->ParserState), Op, &WalkState->ArgTypes, &WalkState->ArgCount); } while (*Op); #if 0 /* * TBD: Cleanup parse ops on error */ if (*Op == NULL) { AcpiPsPopScope (ParserState, Op, &WalkState->ArgTypes, &WalkState->ArgCount); } #endif WalkState->PrevOp = NULL; WalkState->PrevArgTypes = WalkState->ArgTypes; if (WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) { /* * There was something that went wrong while executing code at the * module-level. We need to skip parsing whatever caused the * error and keep going. One runtime error during the table load * should not cause the entire table to not be loaded. This is * because there could be correct AML beyond the parts that caused * the runtime error. */ ACPI_INFO (("Ignoring error and continuing table load")); return_ACPI_STATUS (AE_OK); } return_ACPI_STATUS (Status); } /* This scope complete? */ if (AcpiPsHasCompletedScope (&(WalkState->ParserState))) { AcpiPsPopScope (&(WalkState->ParserState), Op, &WalkState->ArgTypes, &WalkState->ArgCount); ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Popped scope, Op=%p\n", *Op)); } else { *Op = NULL; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiPsCompleteFinalOp * * PARAMETERS: WalkState - Current state * Op - Current Op * Status - Current parse status before complete last * Op * * RETURN: Status * * DESCRIPTION: Complete last Op. * ******************************************************************************/ ACPI_STATUS AcpiPsCompleteFinalOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, ACPI_STATUS Status) { ACPI_STATUS Status2; ACPI_FUNCTION_TRACE_PTR (PsCompleteFinalOp, WalkState); /* * Complete the last Op (if not completed), and clear the scope stack. * It is easily possible to end an AML "package" with an unbounded number * of open scopes (such as when several ASL blocks are closed with * sequential closing braces). We want to terminate each one cleanly. */ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "AML package complete at Op %p\n", Op)); do { if (Op) { if (WalkState->AscendingCallback != NULL) { WalkState->Op = Op; WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); WalkState->Opcode = Op->Common.AmlOpcode; Status = WalkState->AscendingCallback (WalkState); Status = AcpiPsNextParseState (WalkState, Op, Status); if (Status == AE_CTRL_PENDING) { Status = AcpiPsCompleteOp (WalkState, &Op, AE_OK); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } if (Status == AE_CTRL_TERMINATE) { Status = AE_OK; /* Clean up */ do { if (Op) { Status2 = AcpiPsCompleteThisOp (WalkState, Op); if (ACPI_FAILURE (Status2)) { return_ACPI_STATUS (Status2); } } AcpiPsPopScope (&(WalkState->ParserState), &Op, &WalkState->ArgTypes, &WalkState->ArgCount); } while (Op); return_ACPI_STATUS (Status); } else if (ACPI_FAILURE (Status)) { /* First error is most important */ (void) AcpiPsCompleteThisOp (WalkState, Op); return_ACPI_STATUS (Status); } } Status2 = AcpiPsCompleteThisOp (WalkState, Op); if (ACPI_FAILURE (Status2)) { return_ACPI_STATUS (Status2); } } AcpiPsPopScope (&(WalkState->ParserState), &Op, &WalkState->ArgTypes, &WalkState->ArgCount); } while (Op); return_ACPI_STATUS (Status); } src/acpica/source/components/parser/psopcode.c000066400000000000000000001157741465205512700220540ustar00rootroot00000000000000/****************************************************************************** * * Module Name: psopcode - Parser/Interpreter opcode information table * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acopcode.h" #include "amlcode.h" #define _COMPONENT ACPI_PARSER ACPI_MODULE_NAME ("psopcode") /******************************************************************************* * * NAME: AcpiGbl_AmlOpInfo * * DESCRIPTION: Opcode table. Each entry contains * The name is a simple ascii string, the operand specifier is an * ascii string with one letter per operand. The letter specifies * the operand type. * ******************************************************************************/ /* * Summary of opcode types/flags * Opcodes that have associated namespace objects (AML_NSOBJECT flag) AML_SCOPE_OP AML_DEVICE_OP AML_THERMAL_ZONE_OP AML_METHOD_OP AML_POWER_RESOURCE_OP AML_PROCESSOR_OP AML_FIELD_OP AML_INDEX_FIELD_OP AML_BANK_FIELD_OP AML_NAME_OP AML_ALIAS_OP AML_MUTEX_OP AML_EVENT_OP AML_REGION_OP AML_CREATE_FIELD_OP AML_CREATE_BIT_FIELD_OP AML_CREATE_BYTE_FIELD_OP AML_CREATE_WORD_FIELD_OP AML_CREATE_DWORD_FIELD_OP AML_CREATE_QWORD_FIELD_OP AML_INT_NAMEDFIELD_OP AML_INT_METHODCALL_OP AML_INT_NAMEPATH_OP Opcodes that are "namespace" opcodes (AML_NSOPCODE flag) AML_SCOPE_OP AML_DEVICE_OP AML_THERMAL_ZONE_OP AML_METHOD_OP AML_POWER_RESOURCE_OP AML_PROCESSOR_OP AML_FIELD_OP AML_INDEX_FIELD_OP AML_BANK_FIELD_OP AML_NAME_OP AML_ALIAS_OP AML_MUTEX_OP AML_EVENT_OP AML_REGION_OP AML_INT_NAMEDFIELD_OP Opcodes that have an associated namespace node (AML_NSNODE flag) AML_SCOPE_OP AML_DEVICE_OP AML_THERMAL_ZONE_OP AML_METHOD_OP AML_POWER_RESOURCE_OP AML_PROCESSOR_OP AML_NAME_OP AML_ALIAS_OP AML_MUTEX_OP AML_EVENT_OP AML_REGION_OP AML_CREATE_FIELD_OP AML_CREATE_BIT_FIELD_OP AML_CREATE_BYTE_FIELD_OP AML_CREATE_WORD_FIELD_OP AML_CREATE_DWORD_FIELD_OP AML_CREATE_QWORD_FIELD_OP AML_INT_NAMEDFIELD_OP AML_INT_METHODCALL_OP AML_INT_NAMEPATH_OP Opcodes that define named ACPI objects (AML_NAMED flag) AML_SCOPE_OP AML_DEVICE_OP AML_THERMAL_ZONE_OP AML_METHOD_OP AML_POWER_RESOURCE_OP AML_PROCESSOR_OP AML_NAME_OP AML_ALIAS_OP AML_MUTEX_OP AML_EVENT_OP AML_REGION_OP AML_INT_NAMEDFIELD_OP Opcodes that contain executable AML as part of the definition that must be deferred until needed AML_METHOD_OP AML_VARIABLE_PACKAGE_OP AML_CREATE_FIELD_OP AML_CREATE_BIT_FIELD_OP AML_CREATE_BYTE_FIELD_OP AML_CREATE_WORD_FIELD_OP AML_CREATE_DWORD_FIELD_OP AML_CREATE_QWORD_FIELD_OP AML_REGION_OP AML_BUFFER_OP Field opcodes AML_CREATE_FIELD_OP AML_FIELD_OP AML_INDEX_FIELD_OP AML_BANK_FIELD_OP Field "Create" opcodes AML_CREATE_FIELD_OP AML_CREATE_BIT_FIELD_OP AML_CREATE_BYTE_FIELD_OP AML_CREATE_WORD_FIELD_OP AML_CREATE_DWORD_FIELD_OP AML_CREATE_QWORD_FIELD_OP ******************************************************************************/ /* * Master Opcode information table. A summary of everything we know about each * opcode, all in one place. */ const ACPI_OPCODE_INFO AcpiGbl_AmlOpInfo[AML_NUM_OPCODES] = { /*! [Begin] no source code translation */ /* Index Name Parser Args Interpreter Args ObjectType Class Type Flags */ /* 00 */ ACPI_OP ("Zero", ARGP_ZERO_OP, ARGI_ZERO_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), /* 01 */ ACPI_OP ("One", ARGP_ONE_OP, ARGI_ONE_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), /* 02 */ ACPI_OP ("Alias", ARGP_ALIAS_OP, ARGI_ALIAS_OP, ACPI_TYPE_LOCAL_ALIAS, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), /* 03 */ ACPI_OP ("Name", ARGP_NAME_OP, ARGI_NAME_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), /* 04 */ ACPI_OP ("ByteConst", ARGP_BYTE_OP, ARGI_BYTE_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT), /* 05 */ ACPI_OP ("WordConst", ARGP_WORD_OP, ARGI_WORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT), /* 06 */ ACPI_OP ("DwordConst", ARGP_DWORD_OP, ARGI_DWORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT), /* 07 */ ACPI_OP ("String", ARGP_STRING_OP, ARGI_STRING_OP, ACPI_TYPE_STRING, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT), /* 08 */ ACPI_OP ("Scope", ARGP_SCOPE_OP, ARGI_SCOPE_OP, ACPI_TYPE_LOCAL_SCOPE, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), /* 09 */ ACPI_OP ("Buffer", ARGP_BUFFER_OP, ARGI_BUFFER_OP, ACPI_TYPE_BUFFER, AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, AML_HAS_ARGS | AML_DEFER | AML_CONSTANT), /* 0A */ ACPI_OP ("Package", ARGP_PACKAGE_OP, ARGI_PACKAGE_OP, ACPI_TYPE_PACKAGE, AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, AML_HAS_ARGS | AML_DEFER | AML_CONSTANT), /* 0B */ ACPI_OP ("Method", ARGP_METHOD_OP, ARGI_METHOD_OP, ACPI_TYPE_METHOD, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER), /* 0C */ ACPI_OP ("Local0", ARGP_LOCAL0, ARGI_LOCAL0, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), /* 0D */ ACPI_OP ("Local1", ARGP_LOCAL1, ARGI_LOCAL1, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), /* 0E */ ACPI_OP ("Local2", ARGP_LOCAL2, ARGI_LOCAL2, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), /* 0F */ ACPI_OP ("Local3", ARGP_LOCAL3, ARGI_LOCAL3, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), /* 10 */ ACPI_OP ("Local4", ARGP_LOCAL4, ARGI_LOCAL4, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), /* 11 */ ACPI_OP ("Local5", ARGP_LOCAL5, ARGI_LOCAL5, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), /* 12 */ ACPI_OP ("Local6", ARGP_LOCAL6, ARGI_LOCAL6, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), /* 13 */ ACPI_OP ("Local7", ARGP_LOCAL7, ARGI_LOCAL7, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), /* 14 */ ACPI_OP ("Arg0", ARGP_ARG0, ARGI_ARG0, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), /* 15 */ ACPI_OP ("Arg1", ARGP_ARG1, ARGI_ARG1, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), /* 16 */ ACPI_OP ("Arg2", ARGP_ARG2, ARGI_ARG2, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), /* 17 */ ACPI_OP ("Arg3", ARGP_ARG3, ARGI_ARG3, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), /* 18 */ ACPI_OP ("Arg4", ARGP_ARG4, ARGI_ARG4, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), /* 19 */ ACPI_OP ("Arg5", ARGP_ARG5, ARGI_ARG5, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), /* 1A */ ACPI_OP ("Arg6", ARGP_ARG6, ARGI_ARG6, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), /* 1B */ ACPI_OP ("Store", ARGP_STORE_OP, ARGI_STORE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), /* 1C */ ACPI_OP ("RefOf", ARGP_REF_OF_OP, ARGI_REF_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R), /* 1D */ ACPI_OP ("Add", ARGP_ADD_OP, ARGI_ADD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), /* 1E */ ACPI_OP ("Concatenate", ARGP_CONCAT_OP, ARGI_CONCAT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), /* 1F */ ACPI_OP ("Subtract", ARGP_SUBTRACT_OP, ARGI_SUBTRACT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), /* 20 */ ACPI_OP ("Increment", ARGP_INCREMENT_OP, ARGI_INCREMENT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT), /* 21 */ ACPI_OP ("Decrement", ARGP_DECREMENT_OP, ARGI_DECREMENT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT), /* 22 */ ACPI_OP ("Multiply", ARGP_MULTIPLY_OP, ARGI_MULTIPLY_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), /* 23 */ ACPI_OP ("Divide", ARGP_DIVIDE_OP, ARGI_DIVIDE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_2T_1R, AML_FLAGS_EXEC_2A_2T_1R | AML_CONSTANT), /* 24 */ ACPI_OP ("ShiftLeft", ARGP_SHIFT_LEFT_OP, ARGI_SHIFT_LEFT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), /* 25 */ ACPI_OP ("ShiftRight", ARGP_SHIFT_RIGHT_OP, ARGI_SHIFT_RIGHT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), /* 26 */ ACPI_OP ("And", ARGP_BIT_AND_OP, ARGI_BIT_AND_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), /* 27 */ ACPI_OP ("NAnd", ARGP_BIT_NAND_OP, ARGI_BIT_NAND_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), /* 28 */ ACPI_OP ("Or", ARGP_BIT_OR_OP, ARGI_BIT_OR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), /* 29 */ ACPI_OP ("NOr", ARGP_BIT_NOR_OP, ARGI_BIT_NOR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), /* 2A */ ACPI_OP ("XOr", ARGP_BIT_XOR_OP, ARGI_BIT_XOR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), /* 2B */ ACPI_OP ("Not", ARGP_BIT_NOT_OP, ARGI_BIT_NOT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), /* 2C */ ACPI_OP ("FindSetLeftBit", ARGP_FIND_SET_LEFT_BIT_OP, ARGI_FIND_SET_LEFT_BIT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), /* 2D */ ACPI_OP ("FindSetRightBit", ARGP_FIND_SET_RIGHT_BIT_OP,ARGI_FIND_SET_RIGHT_BIT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), /* 2E */ ACPI_OP ("DerefOf", ARGP_DEREF_OF_OP, ARGI_DEREF_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R), /* 2F */ ACPI_OP ("Notify", ARGP_NOTIFY_OP, ARGI_NOTIFY_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_0R, AML_FLAGS_EXEC_2A_0T_0R), /* 30 */ ACPI_OP ("SizeOf", ARGP_SIZE_OF_OP, ARGI_SIZE_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE), /* 31 */ ACPI_OP ("Index", ARGP_INDEX_OP, ARGI_INDEX_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R), /* 32 */ ACPI_OP ("Match", ARGP_MATCH_OP, ARGI_MATCH_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R | AML_CONSTANT), /* 33 */ ACPI_OP ("CreateDWordField", ARGP_CREATE_DWORD_FIELD_OP,ARGI_CREATE_DWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), /* 34 */ ACPI_OP ("CreateWordField", ARGP_CREATE_WORD_FIELD_OP, ARGI_CREATE_WORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), /* 35 */ ACPI_OP ("CreateByteField", ARGP_CREATE_BYTE_FIELD_OP, ARGI_CREATE_BYTE_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), /* 36 */ ACPI_OP ("CreateBitField", ARGP_CREATE_BIT_FIELD_OP, ARGI_CREATE_BIT_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), /* 37 */ ACPI_OP ("ObjectType", ARGP_OBJECT_TYPE_OP, ARGI_OBJECT_TYPE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE), /* 38 */ ACPI_OP ("LAnd", ARGP_LAND_OP, ARGI_LAND_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL_NUMERIC | AML_CONSTANT), /* 39 */ ACPI_OP ("LOr", ARGP_LOR_OP, ARGI_LOR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL_NUMERIC | AML_CONSTANT), /* 3A */ ACPI_OP ("LNot", ARGP_LNOT_OP, ARGI_LNOT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT), /* 3B */ ACPI_OP ("LEqual", ARGP_LEQUAL_OP, ARGI_LEQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT), /* 3C */ ACPI_OP ("LGreater", ARGP_LGREATER_OP, ARGI_LGREATER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT), /* 3D */ ACPI_OP ("LLess", ARGP_LLESS_OP, ARGI_LLESS_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT), /* 3E */ ACPI_OP ("If", ARGP_IF_OP, ARGI_IF_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), /* 3F */ ACPI_OP ("Else", ARGP_ELSE_OP, ARGI_ELSE_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), /* 40 */ ACPI_OP ("While", ARGP_WHILE_OP, ARGI_WHILE_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), /* 41 */ ACPI_OP ("Noop", ARGP_NOOP_OP, ARGI_NOOP_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), /* 42 */ ACPI_OP ("Return", ARGP_RETURN_OP, ARGI_RETURN_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), /* 43 */ ACPI_OP ("Break", ARGP_BREAK_OP, ARGI_BREAK_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), /* 44 */ ACPI_OP ("BreakPoint", ARGP_BREAK_POINT_OP, ARGI_BREAK_POINT_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), /* 45 */ ACPI_OP ("Ones", ARGP_ONES_OP, ARGI_ONES_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), /* Prefixed opcodes (Two-byte opcodes with a prefix op) */ /* 46 */ ACPI_OP ("Mutex", ARGP_MUTEX_OP, ARGI_MUTEX_OP, ACPI_TYPE_MUTEX, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), /* 47 */ ACPI_OP ("Event", ARGP_EVENT_OP, ARGI_EVENT_OP, ACPI_TYPE_EVENT, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ), /* 48 */ ACPI_OP ("CondRefOf", ARGP_COND_REF_OF_OP, ARGI_COND_REF_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), /* 49 */ ACPI_OP ("CreateField", ARGP_CREATE_FIELD_OP, ARGI_CREATE_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_FIELD | AML_CREATE), /* 4A */ ACPI_OP ("Load", ARGP_LOAD_OP, ARGI_LOAD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), /* 4B */ ACPI_OP ("Stall", ARGP_STALL_OP, ARGI_STALL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), /* 4C */ ACPI_OP ("Sleep", ARGP_SLEEP_OP, ARGI_SLEEP_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), /* 4D */ ACPI_OP ("Acquire", ARGP_ACQUIRE_OP, ARGI_ACQUIRE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R), /* 4E */ ACPI_OP ("Signal", ARGP_SIGNAL_OP, ARGI_SIGNAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), /* 4F */ ACPI_OP ("Wait", ARGP_WAIT_OP, ARGI_WAIT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R), /* 50 */ ACPI_OP ("Reset", ARGP_RESET_OP, ARGI_RESET_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), /* 51 */ ACPI_OP ("Release", ARGP_RELEASE_OP, ARGI_RELEASE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), /* 52 */ ACPI_OP ("FromBCD", ARGP_FROM_BCD_OP, ARGI_FROM_BCD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), /* 53 */ ACPI_OP ("ToBCD", ARGP_TO_BCD_OP, ARGI_TO_BCD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), /* 54 */ ACPI_OP ("Unload", ARGP_UNLOAD_OP, ARGI_UNLOAD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), /* 55 */ ACPI_OP ("Revision", ARGP_REVISION_OP, ARGI_REVISION_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0), /* 56 */ ACPI_OP ("Debug", ARGP_DEBUG_OP, ARGI_DEBUG_OP, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0), /* 57 */ ACPI_OP ("Fatal", ARGP_FATAL_OP, ARGI_FATAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_0T_0R, AML_FLAGS_EXEC_3A_0T_0R), /* 58 */ ACPI_OP ("OperationRegion", ARGP_REGION_OP, ARGI_REGION_OP, ACPI_TYPE_REGION, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER), /* 59 */ ACPI_OP ("Field", ARGP_FIELD_OP, ARGI_FIELD_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD), /* 5A */ ACPI_OP ("Device", ARGP_DEVICE_OP, ARGI_DEVICE_OP, ACPI_TYPE_DEVICE, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), /* 5B */ ACPI_OP ("Processor", ARGP_PROCESSOR_OP, ARGI_PROCESSOR_OP, ACPI_TYPE_PROCESSOR, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), /* 5C */ ACPI_OP ("PowerResource", ARGP_POWER_RES_OP, ARGI_POWER_RES_OP, ACPI_TYPE_POWER, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), /* 5D */ ACPI_OP ("ThermalZone", ARGP_THERMAL_ZONE_OP, ARGI_THERMAL_ZONE_OP, ACPI_TYPE_THERMAL, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), /* 5E */ ACPI_OP ("IndexField", ARGP_INDEX_FIELD_OP, ARGI_INDEX_FIELD_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD), /* 5F */ ACPI_OP ("BankField", ARGP_BANK_FIELD_OP, ARGI_BANK_FIELD_OP, ACPI_TYPE_LOCAL_BANK_FIELD, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD | AML_DEFER), /* Internal opcodes that map to invalid AML opcodes */ /* 60 */ ACPI_OP ("LNotEqual", ARGP_LNOTEQUAL_OP, ARGI_LNOTEQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT), /* 61 */ ACPI_OP ("LLessEqual", ARGP_LLESSEQUAL_OP, ARGI_LLESSEQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT), /* 62 */ ACPI_OP ("LGreaterEqual", ARGP_LGREATEREQUAL_OP, ARGI_LGREATEREQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT), /* 63 */ ACPI_OP ("-NamePath-", ARGP_NAMEPATH_OP, ARGI_NAMEPATH_OP, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_NSOBJECT | AML_NSNODE ), /* 64 */ ACPI_OP ("-MethodCall-", ARGP_METHODCALL_OP, ARGI_METHODCALL_OP, ACPI_TYPE_METHOD, AML_CLASS_METHOD_CALL, AML_TYPE_METHOD_CALL, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE), /* 65 */ ACPI_OP ("-ByteList-", ARGP_BYTELIST_OP, ARGI_BYTELIST_OP, ACPI_TYPE_ANY, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0), /* 66 */ ACPI_OP ("-ReservedField-", ARGP_RESERVEDFIELD_OP, ARGI_RESERVEDFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0), /* 67 */ ACPI_OP ("-NamedField-", ARGP_NAMEDFIELD_OP, ARGI_NAMEDFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ), /* 68 */ ACPI_OP ("-AccessField-", ARGP_ACCESSFIELD_OP, ARGI_ACCESSFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0), /* 69 */ ACPI_OP ("-StaticString", ARGP_STATICSTRING_OP, ARGI_STATICSTRING_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0), /* 6A */ ACPI_OP ("-Return Value-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_RETURN_VALUE, AML_TYPE_RETURN, AML_HAS_ARGS | AML_HAS_RETVAL), /* 6B */ ACPI_OP ("-UNKNOWN_OP-", ARG_NONE, ARG_NONE, ACPI_TYPE_INVALID, AML_CLASS_UNKNOWN, AML_TYPE_BOGUS, AML_HAS_ARGS), /* 6C */ ACPI_OP ("-ASCII_ONLY-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_ASCII, AML_TYPE_BOGUS, AML_HAS_ARGS), /* 6D */ ACPI_OP ("-PREFIX_ONLY-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_PREFIX, AML_TYPE_BOGUS, AML_HAS_ARGS), /* ACPI 2.0 opcodes */ /* 6E */ ACPI_OP ("QwordConst", ARGP_QWORD_OP, ARGI_QWORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT), /* 6F */ ACPI_OP ("Package", /* Var */ ARGP_VAR_PACKAGE_OP, ARGI_VAR_PACKAGE_OP, ACPI_TYPE_PACKAGE, AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, AML_HAS_ARGS | AML_DEFER), /* 70 */ ACPI_OP ("ConcatenateResTemplate", ARGP_CONCAT_RES_OP, ARGI_CONCAT_RES_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), /* 71 */ ACPI_OP ("Mod", ARGP_MOD_OP, ARGI_MOD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), /* 72 */ ACPI_OP ("CreateQWordField", ARGP_CREATE_QWORD_FIELD_OP,ARGI_CREATE_QWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), /* 73 */ ACPI_OP ("ToBuffer", ARGP_TO_BUFFER_OP, ARGI_TO_BUFFER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), /* 74 */ ACPI_OP ("ToDecimalString", ARGP_TO_DEC_STR_OP, ARGI_TO_DEC_STR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), /* 75 */ ACPI_OP ("ToHexString", ARGP_TO_HEX_STR_OP, ARGI_TO_HEX_STR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), /* 76 */ ACPI_OP ("ToInteger", ARGP_TO_INTEGER_OP, ARGI_TO_INTEGER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), /* 77 */ ACPI_OP ("ToString", ARGP_TO_STRING_OP, ARGI_TO_STRING_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), /* 78 */ ACPI_OP ("CopyObject", ARGP_COPY_OP, ARGI_COPY_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), /* 79 */ ACPI_OP ("Mid", ARGP_MID_OP, ARGI_MID_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_1T_1R, AML_FLAGS_EXEC_3A_1T_1R | AML_CONSTANT), /* 7A */ ACPI_OP ("Continue", ARGP_CONTINUE_OP, ARGI_CONTINUE_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), /* 7B */ ACPI_OP ("LoadTable", ARGP_LOAD_TABLE_OP, ARGI_LOAD_TABLE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R), /* 7C */ ACPI_OP ("DataTableRegion", ARGP_DATA_REGION_OP, ARGI_DATA_REGION_OP, ACPI_TYPE_REGION, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER), /* 7D */ ACPI_OP ("[EvalSubTree]", ARGP_SCOPE_OP, ARGI_SCOPE_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE), /* ACPI 3.0 opcodes */ /* 7E */ ACPI_OP ("Timer", ARGP_TIMER_OP, ARGI_TIMER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_0A_0T_1R, AML_FLAGS_EXEC_0A_0T_1R | AML_NO_OPERAND_RESOLVE), /* ACPI 5.0 opcodes */ /* 7F */ ACPI_OP ("-ConnectField-", ARGP_CONNECTFIELD_OP, ARGI_CONNECTFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS), /* 80 */ ACPI_OP ("-ExtAccessField-", ARGP_CONNECTFIELD_OP, ARGI_CONNECTFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0), /* ACPI 6.0 opcodes */ /* 81 */ ACPI_OP ("External", ARGP_EXTERNAL_OP, ARGI_EXTERNAL_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), /* 82 */ ACPI_OP ("Comment", ARGP_COMMENT_OP, ARGI_COMMENT_OP, ACPI_TYPE_STRING, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT) /*! [End] no source code translation !*/ }; src/acpica/source/components/parser/psopinfo.c000066400000000000000000000371611465205512700220660ustar00rootroot00000000000000/****************************************************************************** * * Module Name: psopinfo - AML opcode information functions and dispatch tables * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "acopcode.h" #include "amlcode.h" #define _COMPONENT ACPI_PARSER ACPI_MODULE_NAME ("psopinfo") static const UINT8 AcpiGbl_ArgumentCount[] = {0,1,1,1,1,2,2,2,2,3,3,6}; /******************************************************************************* * * FUNCTION: AcpiPsGetOpcodeInfo * * PARAMETERS: Opcode - The AML opcode * * RETURN: A pointer to the info about the opcode. * * DESCRIPTION: Find AML opcode description based on the opcode. * NOTE: This procedure must ALWAYS return a valid pointer! * ******************************************************************************/ const ACPI_OPCODE_INFO * AcpiPsGetOpcodeInfo ( UINT16 Opcode) { #ifdef ACPI_DEBUG_OUTPUT const char *OpcodeName = "Unknown AML opcode"; #endif ACPI_FUNCTION_NAME (PsGetOpcodeInfo); /* * Detect normal 8-bit opcode or extended 16-bit opcode */ if (!(Opcode & 0xFF00)) { /* Simple (8-bit) opcode: 0-255, can't index beyond table */ return (&AcpiGbl_AmlOpInfo [AcpiGbl_ShortOpIndex [(UINT8) Opcode]]); } if (((Opcode & 0xFF00) == AML_EXTENDED_OPCODE) && (((UINT8) Opcode) <= MAX_EXTENDED_OPCODE)) { /* Valid extended (16-bit) opcode */ return (&AcpiGbl_AmlOpInfo [AcpiGbl_LongOpIndex [(UINT8) Opcode]]); } #if defined ACPI_ASL_COMPILER && defined ACPI_DEBUG_OUTPUT #include "asldefine.h" switch (Opcode) { case AML_RAW_DATA_BYTE: OpcodeName = "-Raw Data Byte-"; break; case AML_RAW_DATA_WORD: OpcodeName = "-Raw Data Word-"; break; case AML_RAW_DATA_DWORD: OpcodeName = "-Raw Data Dword-"; break; case AML_RAW_DATA_QWORD: OpcodeName = "-Raw Data Qword-"; break; case AML_RAW_DATA_BUFFER: OpcodeName = "-Raw Data Buffer-"; break; case AML_RAW_DATA_CHAIN: OpcodeName = "-Raw Data Buffer Chain-"; break; case AML_PACKAGE_LENGTH: OpcodeName = "-Package Length-"; break; case AML_UNASSIGNED_OPCODE: OpcodeName = "-Unassigned Opcode-"; break; case AML_DEFAULT_ARG_OP: OpcodeName = "-Default Arg-"; break; default: break; } #endif /* Unknown AML opcode */ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%s [%4.4X]\n", OpcodeName, Opcode)); return (&AcpiGbl_AmlOpInfo [_UNK]); } /******************************************************************************* * * FUNCTION: AcpiPsGetOpcodeName * * PARAMETERS: Opcode - The AML opcode * * RETURN: A pointer to the name of the opcode (ASCII String) * Note: Never returns NULL. * * DESCRIPTION: Translate an opcode into a human-readable string * ******************************************************************************/ const char * AcpiPsGetOpcodeName ( UINT16 Opcode) { #if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT) const ACPI_OPCODE_INFO *Op; Op = AcpiPsGetOpcodeInfo (Opcode); /* Always guaranteed to return a valid pointer */ return (Op->Name); #else return ("OpcodeName unavailable"); #endif } /******************************************************************************* * * FUNCTION: AcpiPsGetArgumentCount * * PARAMETERS: OpType - Type associated with the AML opcode * * RETURN: Argument count * * DESCRIPTION: Obtain the number of expected arguments for an AML opcode * ******************************************************************************/ UINT8 AcpiPsGetArgumentCount ( UINT32 OpType) { if (OpType <= AML_TYPE_EXEC_6A_0T_1R) { return (AcpiGbl_ArgumentCount[OpType]); } return (0); } /* * This table is directly indexed by the opcodes It returns * an index into the opcode table (AcpiGbl_AmlOpInfo) */ const UINT8 AcpiGbl_ShortOpIndex[256] = { /* 0 1 2 3 4 5 6 7 */ /* 8 9 A B C D E F */ /* 0x00 */ 0x00, 0x01, _UNK, _UNK, _UNK, _UNK, 0x02, _UNK, /* 0x08 */ 0x03, _UNK, 0x04, 0x05, 0x06, 0x07, 0x6E, _UNK, /* 0x10 */ 0x08, 0x09, 0x0a, 0x6F, 0x0b, 0x81, _UNK, _UNK, /* 0x18 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x20 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x28 */ _UNK, _UNK, _UNK, _UNK, _UNK, 0x63, _PFX, _PFX, /* 0x30 */ 0x67, 0x66, 0x68, 0x65, 0x69, 0x64, 0x6A, 0x7D, /* 0x38 */ 0x7F, 0x80, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x40 */ _UNK, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, /* 0x48 */ _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, /* 0x50 */ _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, /* 0x58 */ _ASC, _ASC, _ASC, _UNK, _PFX, _UNK, _PFX, _ASC, /* 0x60 */ 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, /* 0x68 */ 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, _UNK, /* 0x70 */ 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, /* 0x78 */ 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, /* 0x80 */ 0x2b, 0x2c, 0x2d, 0x2e, 0x70, 0x71, 0x2f, 0x30, /* 0x88 */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x72, /* 0x90 */ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x73, 0x74, /* 0x98 */ 0x75, 0x76, _UNK, _UNK, 0x77, 0x78, 0x79, 0x7A, /* 0xA0 */ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x60, 0x61, /* 0xA8 */ 0x62, 0x82, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0xB0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0xB8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0xC0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0xC8 */ _UNK, _UNK, _UNK, _UNK, 0x44, _UNK, _UNK, _UNK, /* 0xD0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0xD8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0xE0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0xE8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0xF0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0xF8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x45, }; /* * This table is indexed by the second opcode of the extended opcode * pair. It returns an index into the opcode table (AcpiGbl_AmlOpInfo) */ const UINT8 AcpiGbl_LongOpIndex[NUM_EXTENDED_OPCODE] = { /* 0 1 2 3 4 5 6 7 */ /* 8 9 A B C D E F */ /* 0x00 */ _UNK, 0x46, 0x47, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x08 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x10 */ _UNK, _UNK, 0x48, 0x49, _UNK, _UNK, _UNK, _UNK, /* 0x18 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x7B, /* 0x20 */ 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, /* 0x28 */ 0x52, 0x53, 0x54, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x30 */ 0x55, 0x56, 0x57, 0x7e, _UNK, _UNK, _UNK, _UNK, /* 0x38 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x40 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x48 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x50 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x58 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x60 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x68 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x70 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x78 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x80 */ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x88 */ 0x7C, }; src/acpica/source/components/parser/psparse.c000066400000000000000000000705631465205512700217110ustar00rootroot00000000000000/****************************************************************************** * * Module Name: psparse - Parser top level AML parse routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ /* * Parse the AML and build an operation tree as most interpreters, * like Perl, do. Parsing is done by hand rather than with a YACC * generated parser to tightly constrain stack and dynamic memory * usage. At the same time, parsing is kept flexible and the code * fairly compact by parsing based on a list of AML opcode * templates in AmlOpInfo[] */ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "acdispat.h" #include "amlcode.h" #include "acinterp.h" #include "acnamesp.h" #define _COMPONENT ACPI_PARSER ACPI_MODULE_NAME ("psparse") /******************************************************************************* * * FUNCTION: AcpiPsGetOpcodeSize * * PARAMETERS: Opcode - An AML opcode * * RETURN: Size of the opcode, in bytes (1 or 2) * * DESCRIPTION: Get the size of the current opcode. * ******************************************************************************/ UINT32 AcpiPsGetOpcodeSize ( UINT32 Opcode) { /* Extended (2-byte) opcode if > 255 */ if (Opcode > 0x00FF) { return (2); } /* Otherwise, just a single byte opcode */ return (1); } /******************************************************************************* * * FUNCTION: AcpiPsPeekOpcode * * PARAMETERS: ParserState - A parser state object * * RETURN: Next AML opcode * * DESCRIPTION: Get next AML opcode (without incrementing AML pointer) * ******************************************************************************/ UINT16 AcpiPsPeekOpcode ( ACPI_PARSE_STATE *ParserState) { UINT8 *Aml; UINT16 Opcode; Aml = ParserState->Aml; Opcode = (UINT16) ACPI_GET8 (Aml); if (Opcode == AML_EXTENDED_PREFIX) { /* Extended opcode, get the second opcode byte */ Aml++; Opcode = (UINT16) ((Opcode << 8) | ACPI_GET8 (Aml)); } return (Opcode); } /******************************************************************************* * * FUNCTION: AcpiPsCompleteThisOp * * PARAMETERS: WalkState - Current State * Op - Op to complete * * RETURN: Status * * DESCRIPTION: Perform any cleanup at the completion of an Op. * ******************************************************************************/ ACPI_STATUS AcpiPsCompleteThisOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Prev; ACPI_PARSE_OBJECT *Next; const ACPI_OPCODE_INFO *ParentInfo; ACPI_PARSE_OBJECT *ReplacementOp = NULL; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE_PTR (PsCompleteThisOp, Op); /* Check for null Op, can happen if AML code is corrupt */ if (!Op) { return_ACPI_STATUS (AE_OK); /* OK for now */ } AcpiExStopTraceOpcode (Op, WalkState); /* Delete this op and the subtree below it if asked to */ if (((WalkState->ParseFlags & ACPI_PARSE_TREE_MASK) != ACPI_PARSE_DELETE_TREE) || (WalkState->OpInfo->Class == AML_CLASS_ARGUMENT)) { return_ACPI_STATUS (AE_OK); } /* Make sure that we only delete this subtree */ if (Op->Common.Parent) { Prev = Op->Common.Parent->Common.Value.Arg; if (!Prev) { /* Nothing more to do */ goto Cleanup; } /* * Check if we need to replace the operator and its subtree * with a return value op (placeholder op) */ ParentInfo = AcpiPsGetOpcodeInfo (Op->Common.Parent->Common.AmlOpcode); switch (ParentInfo->Class) { case AML_CLASS_CONTROL: break; case AML_CLASS_CREATE: /* * These opcodes contain TermArg operands. The current * op must be replaced by a placeholder return op */ ReplacementOp = AcpiPsAllocOp ( AML_INT_RETURN_VALUE_OP, Op->Common.Aml); if (!ReplacementOp) { Status = AE_NO_MEMORY; } break; case AML_CLASS_NAMED_OBJECT: /* * These opcodes contain TermArg operands. The current * op must be replaced by a placeholder return op */ if ((Op->Common.Parent->Common.AmlOpcode == AML_REGION_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_DATA_REGION_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_BUFFER_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_BANK_FIELD_OP) || (Op->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP)) { ReplacementOp = AcpiPsAllocOp ( AML_INT_RETURN_VALUE_OP, Op->Common.Aml); if (!ReplacementOp) { Status = AE_NO_MEMORY; } } else if ((Op->Common.Parent->Common.AmlOpcode == AML_NAME_OP) && (WalkState->PassNumber <= ACPI_IMODE_LOAD_PASS2)) { if ((Op->Common.AmlOpcode == AML_BUFFER_OP) || (Op->Common.AmlOpcode == AML_PACKAGE_OP) || (Op->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP)) { ReplacementOp = AcpiPsAllocOp (Op->Common.AmlOpcode, Op->Common.Aml); if (!ReplacementOp) { Status = AE_NO_MEMORY; } else { ReplacementOp->Named.Data = Op->Named.Data; ReplacementOp->Named.Length = Op->Named.Length; } } } break; default: ReplacementOp = AcpiPsAllocOp ( AML_INT_RETURN_VALUE_OP, Op->Common.Aml); if (!ReplacementOp) { Status = AE_NO_MEMORY; } } /* We must unlink this op from the parent tree */ if (Prev == Op) { /* This op is the first in the list */ if (ReplacementOp) { ReplacementOp->Common.Parent = Op->Common.Parent; ReplacementOp->Common.Value.Arg = NULL; ReplacementOp->Common.Node = Op->Common.Node; Op->Common.Parent->Common.Value.Arg = ReplacementOp; ReplacementOp->Common.Next = Op->Common.Next; } else { Op->Common.Parent->Common.Value.Arg = Op->Common.Next; } } /* Search the parent list */ else while (Prev) { /* Traverse all siblings in the parent's argument list */ Next = Prev->Common.Next; if (Next == Op) { if (ReplacementOp) { ReplacementOp->Common.Parent = Op->Common.Parent; ReplacementOp->Common.Value.Arg = NULL; ReplacementOp->Common.Node = Op->Common.Node; Prev->Common.Next = ReplacementOp; ReplacementOp->Common.Next = Op->Common.Next; Next = NULL; } else { Prev->Common.Next = Op->Common.Next; Next = NULL; } } Prev = Next; } } Cleanup: /* Now we can actually delete the subtree rooted at Op */ AcpiPsDeleteParseTree (Op); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiPsNextParseState * * PARAMETERS: WalkState - Current state * Op - Current parse op * CallbackStatus - Status from previous operation * * RETURN: Status * * DESCRIPTION: Update the parser state based upon the return exception from * the parser callback. * ******************************************************************************/ ACPI_STATUS AcpiPsNextParseState ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, ACPI_STATUS CallbackStatus) { ACPI_PARSE_STATE *ParserState = &WalkState->ParserState; ACPI_STATUS Status = AE_CTRL_PENDING; ACPI_FUNCTION_TRACE_PTR (PsNextParseState, Op); switch (CallbackStatus) { case AE_CTRL_TERMINATE: /* * A control method was terminated via a RETURN statement. * The walk of this method is complete. */ ParserState->Aml = ParserState->AmlEnd; Status = AE_CTRL_TERMINATE; break; case AE_CTRL_BREAK: ParserState->Aml = WalkState->AmlLastWhile; WalkState->ControlState->Common.Value = FALSE; Status = AE_CTRL_BREAK; break; case AE_CTRL_CONTINUE: ParserState->Aml = WalkState->AmlLastWhile; Status = AE_CTRL_CONTINUE; break; case AE_CTRL_PENDING: ParserState->Aml = WalkState->AmlLastWhile; break; #if 0 case AE_CTRL_SKIP: ParserState->Aml = ParserState->Scope->ParseScope.PkgEnd; Status = AE_OK; break; #endif case AE_CTRL_TRUE: /* * Predicate of an IF was true, and we are at the matching ELSE. * Just close out this package */ ParserState->Aml = AcpiPsGetNextPackageEnd (ParserState); Status = AE_CTRL_PENDING; break; case AE_CTRL_FALSE: /* * Either an IF/WHILE Predicate was false or we encountered a BREAK * opcode. In both cases, we do not execute the rest of the * package; We simply close out the parent (finishing the walk of * this branch of the tree) and continue execution at the parent * level. */ ParserState->Aml = ParserState->Scope->ParseScope.PkgEnd; /* In the case of a BREAK, just force a predicate (if any) to FALSE */ WalkState->ControlState->Common.Value = FALSE; Status = AE_CTRL_END; break; case AE_CTRL_TRANSFER: /* A method call (invocation) -- transfer control */ Status = AE_CTRL_TRANSFER; WalkState->PrevOp = Op; WalkState->MethodCallOp = Op; WalkState->MethodCallNode = (Op->Common.Value.Arg)->Common.Node; /* Will return value (if any) be used by the caller? */ WalkState->ReturnUsed = AcpiDsIsResultUsed (Op, WalkState); break; default: Status = CallbackStatus; if (ACPI_CNTL_EXCEPTION (CallbackStatus)) { Status = AE_OK; } break; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiPsParseAml * * PARAMETERS: WalkState - Current state * * * RETURN: Status * * DESCRIPTION: Parse raw AML and return a tree of ops * ******************************************************************************/ ACPI_STATUS AcpiPsParseAml ( ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status; ACPI_THREAD_STATE *Thread; ACPI_THREAD_STATE *PrevWalkList = AcpiGbl_CurrentWalkList; ACPI_WALK_STATE *PreviousWalkState; ACPI_FUNCTION_TRACE (PsParseAml); ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Entered with WalkState=%p Aml=%p size=%X\n", WalkState, WalkState->ParserState.Aml, WalkState->ParserState.AmlSize)); if (!WalkState->ParserState.Aml) { return_ACPI_STATUS (AE_BAD_ADDRESS); } /* Create and initialize a new thread state */ Thread = AcpiUtCreateThreadState (); if (!Thread) { if (WalkState->MethodDesc) { /* Executing a control method - additional cleanup */ AcpiDsTerminateControlMethod (WalkState->MethodDesc, WalkState); } AcpiDsDeleteWalkState (WalkState); return_ACPI_STATUS (AE_NO_MEMORY); } WalkState->Thread = Thread; /* * If executing a method, the starting SyncLevel is this method's * SyncLevel */ if (WalkState->MethodDesc) { WalkState->Thread->CurrentSyncLevel = WalkState->MethodDesc->Method.SyncLevel; } AcpiDsPushWalkState (WalkState, Thread); /* * This global allows the AML debugger to get a handle to the currently * executing control method. */ AcpiGbl_CurrentWalkList = Thread; /* * Execute the walk loop as long as there is a valid Walk State. This * handles nested control method invocations without recursion. */ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "State=%p\n", WalkState)); Status = AE_OK; while (WalkState) { if (ACPI_SUCCESS (Status)) { /* * The ParseLoop executes AML until the method terminates * or calls another method. */ Status = AcpiPsParseLoop (WalkState); } ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Completed one call to walk loop, %s State=%p\n", AcpiFormatException (Status), WalkState)); if (WalkState->MethodPathname && WalkState->MethodIsNested) { /* Optional object evaluation log */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION, "%-26s: %*s%s\n", " Exit nested method", (WalkState->MethodNestingDepth + 1) * 3, " ", &WalkState->MethodPathname[1])); ACPI_FREE (WalkState->MethodPathname); WalkState->MethodIsNested = FALSE; } if (Status == AE_CTRL_TRANSFER) { /* * A method call was detected. * Transfer control to the called control method */ Status = AcpiDsCallControlMethod (Thread, WalkState, NULL); if (ACPI_FAILURE (Status)) { Status = AcpiDsMethodError (Status, WalkState); } /* * If the transfer to the new method method call worked, * a new walk state was created -- get it */ WalkState = AcpiDsGetCurrentWalkState (Thread); continue; } else if (Status == AE_CTRL_TERMINATE) { Status = AE_OK; } else if ((Status != AE_OK) && (WalkState->MethodDesc)) { /* Either the method parse or actual execution failed */ AcpiExExitInterpreter (); if (Status == AE_ABORT_METHOD) { AcpiNsPrintNodePathname ( WalkState->MethodNode, "Aborting method"); AcpiOsPrintf ("\n"); } else { ACPI_ERROR_METHOD ("Aborting method", WalkState->MethodNode, NULL, Status); } AcpiExEnterInterpreter (); /* Check for possible multi-thread reentrancy problem */ if ((Status == AE_ALREADY_EXISTS) && (!(WalkState->MethodDesc->Method.InfoFlags & ACPI_METHOD_SERIALIZED))) { /* * Method is not serialized and tried to create an object * twice. The probable cause is that the method cannot * handle reentrancy. Mark as "pending serialized" now, and * then mark "serialized" when the last thread exits. */ WalkState->MethodDesc->Method.InfoFlags |= ACPI_METHOD_SERIALIZED_PENDING; } } /* We are done with this walk, move on to the parent if any */ WalkState = AcpiDsPopWalkState (Thread); /* Reset the current scope to the beginning of scope stack */ AcpiDsScopeStackClear (WalkState); /* * If we just returned from the execution of a control method or if we * encountered an error during the method parse phase, there's lots of * cleanup to do */ if (((WalkState->ParseFlags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE && !(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL)) || (ACPI_FAILURE (Status))) { AcpiDsTerminateControlMethod (WalkState->MethodDesc, WalkState); } /* Delete this walk state and all linked control states */ AcpiPsCleanupScope (&WalkState->ParserState); PreviousWalkState = WalkState; ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "ReturnValue=%p, ImplicitValue=%p State=%p\n", WalkState->ReturnDesc, WalkState->ImplicitReturnObj, WalkState)); /* Check if we have restarted a preempted walk */ WalkState = AcpiDsGetCurrentWalkState (Thread); if (WalkState) { if (ACPI_SUCCESS (Status)) { /* * There is another walk state, restart it. * If the method return value is not used by the parent, * The object is deleted */ if (!PreviousWalkState->ReturnDesc) { /* * In slack mode execution, if there is no return value * we should implicitly return zero (0) as a default value. */ if (AcpiGbl_EnableInterpreterSlack && !PreviousWalkState->ImplicitReturnObj) { PreviousWalkState->ImplicitReturnObj = AcpiUtCreateIntegerObject ((UINT64) 0); if (!PreviousWalkState->ImplicitReturnObj) { return_ACPI_STATUS (AE_NO_MEMORY); } } /* Restart the calling control method */ Status = AcpiDsRestartControlMethod (WalkState, PreviousWalkState->ImplicitReturnObj); } else { /* * We have a valid return value, delete any implicit * return value. */ AcpiDsClearImplicitReturn (PreviousWalkState); Status = AcpiDsRestartControlMethod (WalkState, PreviousWalkState->ReturnDesc); } if (ACPI_SUCCESS (Status)) { WalkState->WalkType |= ACPI_WALK_METHOD_RESTART; } } else { /* On error, delete any return object or implicit return */ AcpiUtRemoveReference (PreviousWalkState->ReturnDesc); AcpiDsClearImplicitReturn (PreviousWalkState); } } /* * Just completed a 1st-level method, save the final internal return * value (if any) */ else if (PreviousWalkState->CallerReturnDesc) { if (PreviousWalkState->ImplicitReturnObj) { *(PreviousWalkState->CallerReturnDesc) = PreviousWalkState->ImplicitReturnObj; } else { /* NULL if no return value */ *(PreviousWalkState->CallerReturnDesc) = PreviousWalkState->ReturnDesc; } } else { if (PreviousWalkState->ReturnDesc) { /* Caller doesn't want it, must delete it */ AcpiUtRemoveReference (PreviousWalkState->ReturnDesc); } if (PreviousWalkState->ImplicitReturnObj) { /* Caller doesn't want it, must delete it */ AcpiUtRemoveReference (PreviousWalkState->ImplicitReturnObj); } } AcpiDsDeleteWalkState (PreviousWalkState); } /* Normal exit */ AcpiExReleaseAllMutexes (Thread); AcpiUtDeleteGenericState (ACPI_CAST_PTR (ACPI_GENERIC_STATE, Thread)); AcpiGbl_CurrentWalkList = PrevWalkList; return_ACPI_STATUS (Status); } src/acpica/source/components/parser/psscope.c000066400000000000000000000351101465205512700216750ustar00rootroot00000000000000/****************************************************************************** * * Module Name: psscope - Parser scope stack management routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #define _COMPONENT ACPI_PARSER ACPI_MODULE_NAME ("psscope") /******************************************************************************* * * FUNCTION: AcpiPsGetParentScope * * PARAMETERS: ParserState - Current parser state object * * RETURN: Pointer to an Op object * * DESCRIPTION: Get parent of current op being parsed * ******************************************************************************/ ACPI_PARSE_OBJECT * AcpiPsGetParentScope ( ACPI_PARSE_STATE *ParserState) { return (ParserState->Scope->ParseScope.Op); } /******************************************************************************* * * FUNCTION: AcpiPsHasCompletedScope * * PARAMETERS: ParserState - Current parser state object * * RETURN: Boolean, TRUE = scope completed. * * DESCRIPTION: Is parsing of current argument complete? Determined by * 1) AML pointer is at or beyond the end of the scope * 2) The scope argument count has reached zero. * ******************************************************************************/ BOOLEAN AcpiPsHasCompletedScope ( ACPI_PARSE_STATE *ParserState) { return ((BOOLEAN) ((ParserState->Aml >= ParserState->Scope->ParseScope.ArgEnd || !ParserState->Scope->ParseScope.ArgCount))); } /******************************************************************************* * * FUNCTION: AcpiPsInitScope * * PARAMETERS: ParserState - Current parser state object * Root - the Root Node of this new scope * * RETURN: Status * * DESCRIPTION: Allocate and init a new scope object * ******************************************************************************/ ACPI_STATUS AcpiPsInitScope ( ACPI_PARSE_STATE *ParserState, ACPI_PARSE_OBJECT *RootOp) { ACPI_GENERIC_STATE *Scope; ACPI_FUNCTION_TRACE_PTR (PsInitScope, RootOp); Scope = AcpiUtCreateGenericState (); if (!Scope) { return_ACPI_STATUS (AE_NO_MEMORY); } Scope->Common.DescriptorType = ACPI_DESC_TYPE_STATE_RPSCOPE; Scope->ParseScope.Op = RootOp; Scope->ParseScope.ArgCount = ACPI_VAR_ARGS; Scope->ParseScope.ArgEnd = ParserState->AmlEnd; Scope->ParseScope.PkgEnd = ParserState->AmlEnd; ParserState->Scope = Scope; ParserState->StartOp = RootOp; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiPsPushScope * * PARAMETERS: ParserState - Current parser state object * Op - Current op to be pushed * RemainingArgs - List of args remaining * ArgCount - Fixed or variable number of args * * RETURN: Status * * DESCRIPTION: Push current op to begin parsing its argument * ******************************************************************************/ ACPI_STATUS AcpiPsPushScope ( ACPI_PARSE_STATE *ParserState, ACPI_PARSE_OBJECT *Op, UINT32 RemainingArgs, UINT32 ArgCount) { ACPI_GENERIC_STATE *Scope; ACPI_FUNCTION_TRACE_PTR (PsPushScope, Op); Scope = AcpiUtCreateGenericState (); if (!Scope) { return_ACPI_STATUS (AE_NO_MEMORY); } Scope->Common.DescriptorType = ACPI_DESC_TYPE_STATE_PSCOPE; Scope->ParseScope.Op = Op; Scope->ParseScope.ArgList = RemainingArgs; Scope->ParseScope.ArgCount = ArgCount; Scope->ParseScope.PkgEnd = ParserState->PkgEnd; /* Push onto scope stack */ AcpiUtPushGenericState (&ParserState->Scope, Scope); if (ArgCount == ACPI_VAR_ARGS) { /* Multiple arguments */ Scope->ParseScope.ArgEnd = ParserState->PkgEnd; } else { /* Single argument */ Scope->ParseScope.ArgEnd = ACPI_TO_POINTER (ACPI_MAX_PTR); } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiPsPopScope * * PARAMETERS: ParserState - Current parser state object * Op - Where the popped op is returned * ArgList - Where the popped "next argument" is * returned * ArgCount - Count of objects in ArgList * * RETURN: Status * * DESCRIPTION: Return to parsing a previous op * ******************************************************************************/ void AcpiPsPopScope ( ACPI_PARSE_STATE *ParserState, ACPI_PARSE_OBJECT **Op, UINT32 *ArgList, UINT32 *ArgCount) { ACPI_GENERIC_STATE *Scope = ParserState->Scope; ACPI_FUNCTION_TRACE (PsPopScope); /* Only pop the scope if there is in fact a next scope */ if (Scope->Common.Next) { Scope = AcpiUtPopGenericState (&ParserState->Scope); /* Return to parsing previous op */ *Op = Scope->ParseScope.Op; *ArgList = Scope->ParseScope.ArgList; *ArgCount = Scope->ParseScope.ArgCount; ParserState->PkgEnd = Scope->ParseScope.PkgEnd; /* All done with this scope state structure */ AcpiUtDeleteGenericState (Scope); } else { /* Empty parse stack, prepare to fetch next opcode */ *Op = NULL; *ArgList = 0; *ArgCount = 0; } ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Popped Op %p Args %X\n", *Op, *ArgCount)); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiPsCleanupScope * * PARAMETERS: ParserState - Current parser state object * * RETURN: None * * DESCRIPTION: Destroy available list, remaining stack levels, and return * root scope * ******************************************************************************/ void AcpiPsCleanupScope ( ACPI_PARSE_STATE *ParserState) { ACPI_GENERIC_STATE *Scope; ACPI_FUNCTION_TRACE_PTR (PsCleanupScope, ParserState); if (!ParserState) { return_VOID; } /* Delete anything on the scope stack */ while (ParserState->Scope) { Scope = AcpiUtPopGenericState (&ParserState->Scope); AcpiUtDeleteGenericState (Scope); } return_VOID; } src/acpica/source/components/parser/pstree.c000066400000000000000000000354541465205512700215360ustar00rootroot00000000000000/****************************************************************************** * * Module Name: pstree - Parser op tree manipulation/traversal/search * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acconvert.h" #define _COMPONENT ACPI_PARSER ACPI_MODULE_NAME ("pstree") /* Local prototypes */ #ifdef ACPI_OBSOLETE_FUNCTIONS ACPI_PARSE_OBJECT * AcpiPsGetChild ( ACPI_PARSE_OBJECT *op); #endif /******************************************************************************* * * FUNCTION: AcpiPsGetArg * * PARAMETERS: Op - Get an argument for this op * Argn - Nth argument to get * * RETURN: The argument (as an Op object). NULL if argument does not exist * * DESCRIPTION: Get the specified op's argument. * ******************************************************************************/ ACPI_PARSE_OBJECT * AcpiPsGetArg ( ACPI_PARSE_OBJECT *Op, UINT32 Argn) { ACPI_PARSE_OBJECT *Arg = NULL; const ACPI_OPCODE_INFO *OpInfo; ACPI_FUNCTION_ENTRY (); /* if (Op->Common.AmlOpcode == AML_INT_CONNECTION_OP) { return (Op->Common.Value.Arg); } */ /* Get the info structure for this opcode */ OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); if (OpInfo->Class == AML_CLASS_UNKNOWN) { /* Invalid opcode or ASCII character */ return (NULL); } /* Check if this opcode requires argument sub-objects */ if (!(OpInfo->Flags & AML_HAS_ARGS)) { /* Has no linked argument objects */ return (NULL); } /* Get the requested argument object */ Arg = Op->Common.Value.Arg; while (Arg && Argn) { Argn--; Arg = Arg->Common.Next; } return (Arg); } /******************************************************************************* * * FUNCTION: AcpiPsAppendArg * * PARAMETERS: Op - Append an argument to this Op. * Arg - Argument Op to append * * RETURN: None. * * DESCRIPTION: Append an argument to an op's argument list (a NULL arg is OK) * ******************************************************************************/ void AcpiPsAppendArg ( ACPI_PARSE_OBJECT *Op, ACPI_PARSE_OBJECT *Arg) { ACPI_PARSE_OBJECT *PrevArg; const ACPI_OPCODE_INFO *OpInfo; ACPI_FUNCTION_TRACE (PsAppendArg); if (!Op) { return_VOID; } /* Get the info structure for this opcode */ OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); if (OpInfo->Class == AML_CLASS_UNKNOWN) { /* Invalid opcode */ ACPI_ERROR ((AE_INFO, "Invalid AML Opcode: 0x%2.2X", Op->Common.AmlOpcode)); return_VOID; } /* Check if this opcode requires argument sub-objects */ if (!(OpInfo->Flags & AML_HAS_ARGS)) { /* Has no linked argument objects */ return_VOID; } /* Append the argument to the linked argument list */ if (Op->Common.Value.Arg) { /* Append to existing argument list */ PrevArg = Op->Common.Value.Arg; while (PrevArg->Common.Next) { PrevArg = PrevArg->Common.Next; } PrevArg->Common.Next = Arg; } else { /* No argument list, this will be the first argument */ Op->Common.Value.Arg = Arg; } /* Set the parent in this arg and any args linked after it */ while (Arg) { Arg->Common.Parent = Op; Arg = Arg->Common.Next; Op->Common.ArgListLength++; } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiPsGetDepthNext * * PARAMETERS: Origin - Root of subtree to search * Op - Last (previous) Op that was found * * RETURN: Next Op found in the search. * * DESCRIPTION: Get next op in tree (walking the tree in depth-first order) * Return NULL when reaching "origin" or when walking up from root * ******************************************************************************/ ACPI_PARSE_OBJECT * AcpiPsGetDepthNext ( ACPI_PARSE_OBJECT *Origin, ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Next = NULL; ACPI_PARSE_OBJECT *Parent; ACPI_PARSE_OBJECT *Arg; ACPI_FUNCTION_ENTRY (); if (!Op) { return (NULL); } /* Look for an argument or child */ Next = AcpiPsGetArg (Op, 0); if (Next) { ASL_CV_LABEL_FILENODE (Next); return (Next); } /* Look for a sibling */ Next = Op->Common.Next; if (Next) { ASL_CV_LABEL_FILENODE (Next); return (Next); } /* Look for a sibling of parent */ Parent = Op->Common.Parent; while (Parent) { Arg = AcpiPsGetArg (Parent, 0); while (Arg && (Arg != Origin) && (Arg != Op)) { ASL_CV_LABEL_FILENODE (Arg); Arg = Arg->Common.Next; } if (Arg == Origin) { /* Reached parent of origin, end search */ return (NULL); } if (Parent->Common.Next) { /* Found sibling of parent */ ASL_CV_LABEL_FILENODE (Parent->Common.Next); return (Parent->Common.Next); } Op = Parent; Parent = Parent->Common.Parent; } ASL_CV_LABEL_FILENODE (Next); return (Next); } #ifdef ACPI_OBSOLETE_FUNCTIONS /******************************************************************************* * * FUNCTION: AcpiPsGetChild * * PARAMETERS: Op - Get the child of this Op * * RETURN: Child Op, Null if none is found. * * DESCRIPTION: Get op's children or NULL if none * ******************************************************************************/ ACPI_PARSE_OBJECT * AcpiPsGetChild ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Child = NULL; ACPI_FUNCTION_ENTRY (); switch (Op->Common.AmlOpcode) { case AML_SCOPE_OP: case AML_ELSE_OP: case AML_DEVICE_OP: case AML_THERMAL_ZONE_OP: case AML_INT_METHODCALL_OP: Child = AcpiPsGetArg (Op, 0); break; case AML_BUFFER_OP: case AML_PACKAGE_OP: case AML_VARIABLE_PACKAGE_OP: case AML_METHOD_OP: case AML_IF_OP: case AML_WHILE_OP: case AML_FIELD_OP: Child = AcpiPsGetArg (Op, 1); break; case AML_POWER_RESOURCE_OP: case AML_INDEX_FIELD_OP: Child = AcpiPsGetArg (Op, 2); break; case AML_PROCESSOR_OP: case AML_BANK_FIELD_OP: Child = AcpiPsGetArg (Op, 3); break; default: /* All others have no children */ break; } return (Child); } #endif src/acpica/source/components/parser/psutils.c000066400000000000000000000331751465205512700217350ustar00rootroot00000000000000/****************************************************************************** * * Module Name: psutils - Parser miscellaneous utilities (Parser only) * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acconvert.h" #define _COMPONENT ACPI_PARSER ACPI_MODULE_NAME ("psutils") /******************************************************************************* * * FUNCTION: AcpiPsCreateScopeOp * * PARAMETERS: None * * RETURN: A new Scope object, null on failure * * DESCRIPTION: Create a Scope and associated namepath op with the root name * ******************************************************************************/ ACPI_PARSE_OBJECT * AcpiPsCreateScopeOp ( UINT8 *Aml) { ACPI_PARSE_OBJECT *ScopeOp; ScopeOp = AcpiPsAllocOp (AML_SCOPE_OP, Aml); if (!ScopeOp) { return (NULL); } ScopeOp->Named.Name = ACPI_ROOT_NAME; return (ScopeOp); } /******************************************************************************* * * FUNCTION: AcpiPsInitOp * * PARAMETERS: Op - A newly allocated Op object * Opcode - Opcode to store in the Op * * RETURN: None * * DESCRIPTION: Initialize a parse (Op) object * ******************************************************************************/ void AcpiPsInitOp ( ACPI_PARSE_OBJECT *Op, UINT16 Opcode) { ACPI_FUNCTION_ENTRY (); Op->Common.DescriptorType = ACPI_DESC_TYPE_PARSER; Op->Common.AmlOpcode = Opcode; ACPI_DISASM_ONLY_MEMBERS (AcpiUtSafeStrncpy (Op->Common.AmlOpName, (AcpiPsGetOpcodeInfo (Opcode))->Name, sizeof (Op->Common.AmlOpName))); } /******************************************************************************* * * FUNCTION: AcpiPsAllocOp * * PARAMETERS: Opcode - Opcode that will be stored in the new Op * Aml - Address of the opcode * * RETURN: Pointer to the new Op, null on failure * * DESCRIPTION: Allocate an acpi_op, choose op type (and thus size) based on * opcode. A cache of opcodes is available for the pure * GENERIC_OP, since this is by far the most commonly used. * ******************************************************************************/ ACPI_PARSE_OBJECT* AcpiPsAllocOp ( UINT16 Opcode, UINT8 *Aml) { ACPI_PARSE_OBJECT *Op; const ACPI_OPCODE_INFO *OpInfo; UINT8 Flags = ACPI_PARSEOP_GENERIC; ACPI_FUNCTION_ENTRY (); OpInfo = AcpiPsGetOpcodeInfo (Opcode); /* Determine type of ParseOp required */ if (OpInfo->Flags & AML_DEFER) { Flags = ACPI_PARSEOP_DEFERRED; } else if (OpInfo->Flags & AML_NAMED) { Flags = ACPI_PARSEOP_NAMED_OBJECT; } else if (Opcode == AML_INT_BYTELIST_OP) { Flags = ACPI_PARSEOP_BYTELIST; } /* Allocate the minimum required size object */ if (Flags == ACPI_PARSEOP_GENERIC) { /* The generic op (default) is by far the most common (16 to 1) */ Op = AcpiOsAcquireObject (AcpiGbl_PsNodeCache); } else { /* Extended parseop */ Op = AcpiOsAcquireObject (AcpiGbl_PsNodeExtCache); } /* Initialize the Op */ if (Op) { AcpiPsInitOp (Op, Opcode); Op->Common.Aml = Aml; Op->Common.Flags = Flags; ASL_CV_CLEAR_OP_COMMENTS(Op); if (Opcode == AML_SCOPE_OP) { AcpiGbl_CurrentScope = Op; } if (AcpiGbl_CaptureComments) { ASL_CV_TRANSFER_COMMENTS (Op); } } return (Op); } /******************************************************************************* * * FUNCTION: AcpiPsFreeOp * * PARAMETERS: Op - Op to be freed * * RETURN: None. * * DESCRIPTION: Free an Op object. Either put it on the GENERIC_OP cache list * or actually free it. * ******************************************************************************/ void AcpiPsFreeOp ( ACPI_PARSE_OBJECT *Op) { ACPI_FUNCTION_NAME (PsFreeOp); ASL_CV_CLEAR_OP_COMMENTS(Op); if (Op->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP) { ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Free retval op: %p\n", Op)); } if (Op->Common.Flags & ACPI_PARSEOP_GENERIC) { (void) AcpiOsReleaseObject (AcpiGbl_PsNodeCache, Op); } else { (void) AcpiOsReleaseObject (AcpiGbl_PsNodeExtCache, Op); } } /******************************************************************************* * * FUNCTION: Utility functions * * DESCRIPTION: Low level character and object functions * ******************************************************************************/ /* * Is "c" a namestring lead character? */ BOOLEAN AcpiPsIsLeadingChar ( UINT32 c) { return ((BOOLEAN) (c == '_' || (c >= 'A' && c <= 'Z'))); } /* * Get op's name (4-byte name segment) or 0 if unnamed */ UINT32 AcpiPsGetName ( ACPI_PARSE_OBJECT *Op) { /* The "generic" object has no name associated with it */ if (Op->Common.Flags & ACPI_PARSEOP_GENERIC) { return (0); } /* Only the "Extended" parse objects have a name */ return (Op->Named.Name); } /* * Set op's name */ void AcpiPsSetName ( ACPI_PARSE_OBJECT *Op, UINT32 name) { /* The "generic" object has no name associated with it */ if (Op->Common.Flags & ACPI_PARSEOP_GENERIC) { return; } Op->Named.Name = name; } src/acpica/source/components/parser/pswalk.c000066400000000000000000000252431465205512700215300ustar00rootroot00000000000000/****************************************************************************** * * Module Name: pswalk - Parser routines to walk parsed op tree(s) * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #define _COMPONENT ACPI_PARSER ACPI_MODULE_NAME ("pswalk") /******************************************************************************* * * FUNCTION: AcpiPsDeleteParseTree * * PARAMETERS: SubtreeRoot - Root of tree (or subtree) to delete * * RETURN: None * * DESCRIPTION: Delete a portion of or an entire parse tree. * ******************************************************************************/ #include "amlcode.h" void AcpiPsDeleteParseTree ( ACPI_PARSE_OBJECT *SubtreeRoot) { ACPI_PARSE_OBJECT *Op = SubtreeRoot; ACPI_PARSE_OBJECT *Next = NULL; ACPI_PARSE_OBJECT *Parent = NULL; UINT32 Level = 0; ACPI_FUNCTION_TRACE_PTR (PsDeleteParseTree, SubtreeRoot); ACPI_DEBUG_PRINT ((ACPI_DB_PARSE_TREES, " root %p\n", SubtreeRoot)); /* Visit all nodes in the subtree */ while (Op) { if (Op != Parent) { /* This is the descending case */ if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_PARSE_TREES, _COMPONENT)) { /* This debug option will print the entire parse tree */ AcpiOsPrintf (" %*.s%s %p", (Level * 4), " ", AcpiPsGetOpcodeName (Op->Common.AmlOpcode), Op); if (Op->Named.AmlOpcode == AML_INT_NAMEPATH_OP) { AcpiOsPrintf (" %4.4s", Op->Common.Value.String); } if (Op->Named.AmlOpcode == AML_STRING_OP) { AcpiOsPrintf (" %s", Op->Common.Value.String); } AcpiOsPrintf ("\n"); } /* Look for an argument or child of the current op */ Next = AcpiPsGetArg (Op, 0); if (Next) { /* Still going downward in tree (Op is not completed yet) */ Op = Next; Level++; continue; } } /* No more children, this Op is complete. */ Next = Op->Common.Next; Parent = Op->Common.Parent; AcpiPsFreeOp (Op); /* If we are back to the starting point, the walk is complete. */ if (Op == SubtreeRoot) { return_VOID; } if (Next) { Op = Next; } else { Level--; Op = Parent; } } return_VOID; } src/acpica/source/components/parser/psxface.c000066400000000000000000000434211465205512700216560ustar00rootroot00000000000000/****************************************************************************** * * Module Name: psxface - Parser external interfaces * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "acdispat.h" #include "acinterp.h" #include "actables.h" #include "acnamesp.h" #define _COMPONENT ACPI_PARSER ACPI_MODULE_NAME ("psxface") /* Local Prototypes */ static void AcpiPsUpdateParameterList ( ACPI_EVALUATE_INFO *Info, UINT16 Action); /******************************************************************************* * * FUNCTION: AcpiDebugTrace * * PARAMETERS: MethodName - Valid ACPI name string * DebugLevel - Optional level mask. 0 to use default * DebugLayer - Optional layer mask. 0 to use default * Flags - bit 1: one shot(1) or persistent(0) * * RETURN: Status * * DESCRIPTION: External interface to enable debug tracing during control * method execution * ******************************************************************************/ ACPI_STATUS AcpiDebugTrace ( const char *Name, UINT32 DebugLevel, UINT32 DebugLayer, UINT32 Flags) { ACPI_STATUS Status; Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return (Status); } AcpiGbl_TraceMethodName = Name; AcpiGbl_TraceFlags = Flags; AcpiGbl_TraceDbgLevel = DebugLevel; AcpiGbl_TraceDbgLayer = DebugLayer; Status = AE_OK; (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return (Status); } /******************************************************************************* * * FUNCTION: AcpiPsExecuteMethod * * PARAMETERS: Info - Method info block, contains: * Node - Method Node to execute * ObjDesc - Method object * Parameters - List of parameters to pass to the method, * terminated by NULL. Params itself may be * NULL if no parameters are being passed. * ReturnObject - Where to put method's return value (if * any). If NULL, no value is returned. * ParameterType - Type of Parameter list * ReturnObject - Where to put method's return value (if * any). If NULL, no value is returned. * PassNumber - Parse or execute pass * * RETURN: Status * * DESCRIPTION: Execute a control method * ******************************************************************************/ ACPI_STATUS AcpiPsExecuteMethod ( ACPI_EVALUATE_INFO *Info) { ACPI_STATUS Status; ACPI_PARSE_OBJECT *Op; ACPI_WALK_STATE *WalkState; ACPI_FUNCTION_TRACE (PsExecuteMethod); /* Quick validation of DSDT header */ AcpiTbCheckDsdtHeader (); /* Validate the Info and method Node */ if (!Info || !Info->Node) { return_ACPI_STATUS (AE_NULL_ENTRY); } /* Init for new method, wait on concurrency semaphore */ Status = AcpiDsBeginMethodExecution (Info->Node, Info->ObjDesc, NULL); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * The caller "owns" the parameters, so give each one an extra reference */ AcpiPsUpdateParameterList (Info, REF_INCREMENT); /* * Execute the method. Performs parse simultaneously */ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** Begin Method Parse/Execute [%4.4s] **** Node=%p Obj=%p\n", Info->Node->Name.Ascii, Info->Node, Info->ObjDesc)); /* Create and init a Root Node */ Op = AcpiPsCreateScopeOp (Info->ObjDesc->Method.AmlStart); if (!Op) { Status = AE_NO_MEMORY; goto Cleanup; } /* Create and initialize a new walk state */ Info->PassNumber = ACPI_IMODE_EXECUTE; WalkState = AcpiDsCreateWalkState ( Info->ObjDesc->Method.OwnerId, NULL, NULL, NULL); if (!WalkState) { Status = AE_NO_MEMORY; goto Cleanup; } Status = AcpiDsInitAmlWalk (WalkState, Op, Info->Node, Info->ObjDesc->Method.AmlStart, Info->ObjDesc->Method.AmlLength, Info, Info->PassNumber); if (ACPI_FAILURE (Status)) { AcpiDsDeleteWalkState (WalkState); goto Cleanup; } WalkState->MethodPathname = Info->FullPathname; WalkState->MethodIsNested = FALSE; if (Info->ObjDesc->Method.InfoFlags & ACPI_METHOD_MODULE_LEVEL) { WalkState->ParseFlags |= ACPI_PARSE_MODULE_LEVEL; } /* Invoke an internal method if necessary */ if (Info->ObjDesc->Method.InfoFlags & ACPI_METHOD_INTERNAL_ONLY) { Status = Info->ObjDesc->Method.Dispatch.Implementation (WalkState); Info->ReturnObject = WalkState->ReturnDesc; /* Cleanup states */ AcpiDsScopeStackClear (WalkState); AcpiPsCleanupScope (&WalkState->ParserState); AcpiDsTerminateControlMethod (WalkState->MethodDesc, WalkState); AcpiDsDeleteWalkState (WalkState); goto Cleanup; } /* * Start method evaluation with an implicit return of zero. * This is done for Windows compatibility. */ if (AcpiGbl_EnableInterpreterSlack) { WalkState->ImplicitReturnObj = AcpiUtCreateIntegerObject ((UINT64) 0); if (!WalkState->ImplicitReturnObj) { Status = AE_NO_MEMORY; AcpiDsDeleteWalkState (WalkState); goto Cleanup; } } /* Parse the AML */ Status = AcpiPsParseAml (WalkState); /* WalkState was deleted by ParseAml */ Cleanup: AcpiPsDeleteParseTree (Op); /* Take away the extra reference that we gave the parameters above */ AcpiPsUpdateParameterList (Info, REF_DECREMENT); /* Exit now if error above */ if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * If the method has returned an object, signal this to the caller with * a control exception code */ if (Info->ReturnObject) { ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Method returned ObjDesc=%p\n", Info->ReturnObject)); ACPI_DUMP_STACK_ENTRY (Info->ReturnObject); Status = AE_CTRL_RETURN_VALUE; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiPsExecuteTable * * PARAMETERS: Info - Method info block, contains: * Node - Node to where the is entered into the * namespace * ObjDesc - Pseudo method object describing the AML * code of the entire table * PassNumber - Parse or execute pass * * RETURN: Status * * DESCRIPTION: Execute a table * ******************************************************************************/ ACPI_STATUS AcpiPsExecuteTable ( ACPI_EVALUATE_INFO *Info) { ACPI_STATUS Status; ACPI_PARSE_OBJECT *Op = NULL; ACPI_WALK_STATE *WalkState = NULL; ACPI_FUNCTION_TRACE (PsExecuteTable); /* Create and init a Root Node */ Op = AcpiPsCreateScopeOp (Info->ObjDesc->Method.AmlStart); if (!Op) { Status = AE_NO_MEMORY; goto Cleanup; } /* Create and initialize a new walk state */ WalkState = AcpiDsCreateWalkState ( Info->ObjDesc->Method.OwnerId, NULL, NULL, NULL); if (!WalkState) { Status = AE_NO_MEMORY; goto Cleanup; } Status = AcpiDsInitAmlWalk (WalkState, Op, Info->Node, Info->ObjDesc->Method.AmlStart, Info->ObjDesc->Method.AmlLength, Info, Info->PassNumber); if (ACPI_FAILURE (Status)) { goto Cleanup; } WalkState->MethodPathname = Info->FullPathname; WalkState->MethodIsNested = FALSE; if (Info->ObjDesc->Method.InfoFlags & ACPI_METHOD_MODULE_LEVEL) { WalkState->ParseFlags |= ACPI_PARSE_MODULE_LEVEL; } /* Info->Node is the default location to load the table */ if (Info->Node && Info->Node != AcpiGbl_RootNode) { Status = AcpiDsScopeStackPush ( Info->Node, ACPI_TYPE_METHOD, WalkState); if (ACPI_FAILURE (Status)) { goto Cleanup; } } /* * Parse the AML, WalkState will be deleted by ParseAml */ AcpiExEnterInterpreter (); Status = AcpiPsParseAml (WalkState); AcpiExExitInterpreter (); WalkState = NULL; Cleanup: if (WalkState) { AcpiDsDeleteWalkState (WalkState); } if (Op) { AcpiPsDeleteParseTree (Op); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiPsUpdateParameterList * * PARAMETERS: Info - See ACPI_EVALUATE_INFO * (Used: ParameterType and Parameters) * Action - Add or Remove reference * * RETURN: Status * * DESCRIPTION: Update reference count on all method parameter objects * ******************************************************************************/ static void AcpiPsUpdateParameterList ( ACPI_EVALUATE_INFO *Info, UINT16 Action) { UINT32 i; if (Info->Parameters) { /* Update reference count for each parameter */ for (i = 0; Info->Parameters[i]; i++) { /* Ignore errors, just do them all */ (void) AcpiUtUpdateObjectReference ( Info->Parameters[i], Action); } } } src/acpica/source/components/resources/000077500000000000000000000000001465205512700205735ustar00rootroot00000000000000src/acpica/source/components/resources/rsaddr.c000066400000000000000000000476611465205512700222340ustar00rootroot00000000000000/******************************************************************************* * * Module Name: rsaddr - Address resource descriptors (16/32/64) * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acresrc.h" #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rsaddr") /******************************************************************************* * * AcpiRsConvertAddress16 - All WORD (16-bit) address resources * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertAddress16[5] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_ADDRESS16, ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS16), ACPI_RSC_TABLE_SIZE (AcpiRsConvertAddress16)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_ADDRESS16, sizeof (AML_RESOURCE_ADDRESS16), 0}, /* Resource Type, General Flags, and Type-Specific Flags */ {ACPI_RSC_ADDRESS, 0, 0, 0}, /* * These fields are contiguous in both the source and destination: * Address Granularity * Address Range Minimum * Address Range Maximum * Address Translation Offset * Address Length */ {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.Address16.Address.Granularity), AML_OFFSET (Address16.Granularity), 5}, /* Optional ResourceSource (Index and String) */ {ACPI_RSC_SOURCE, ACPI_RS_OFFSET (Data.Address16.ResourceSource), 0, sizeof (AML_RESOURCE_ADDRESS16)} }; /******************************************************************************* * * AcpiRsConvertAddress32 - All DWORD (32-bit) address resources * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertAddress32[5] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_ADDRESS32, ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS32), ACPI_RSC_TABLE_SIZE (AcpiRsConvertAddress32)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_ADDRESS32, sizeof (AML_RESOURCE_ADDRESS32), 0}, /* Resource Type, General Flags, and Type-Specific Flags */ {ACPI_RSC_ADDRESS, 0, 0, 0}, /* * These fields are contiguous in both the source and destination: * Address Granularity * Address Range Minimum * Address Range Maximum * Address Translation Offset * Address Length */ {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.Address32.Address.Granularity), AML_OFFSET (Address32.Granularity), 5}, /* Optional ResourceSource (Index and String) */ {ACPI_RSC_SOURCE, ACPI_RS_OFFSET (Data.Address32.ResourceSource), 0, sizeof (AML_RESOURCE_ADDRESS32)} }; /******************************************************************************* * * AcpiRsConvertAddress64 - All QWORD (64-bit) address resources * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertAddress64[5] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_ADDRESS64, ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS64), ACPI_RSC_TABLE_SIZE (AcpiRsConvertAddress64)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_ADDRESS64, sizeof (AML_RESOURCE_ADDRESS64), 0}, /* Resource Type, General Flags, and Type-Specific Flags */ {ACPI_RSC_ADDRESS, 0, 0, 0}, /* * These fields are contiguous in both the source and destination: * Address Granularity * Address Range Minimum * Address Range Maximum * Address Translation Offset * Address Length */ {ACPI_RSC_MOVE64, ACPI_RS_OFFSET (Data.Address64.Address.Granularity), AML_OFFSET (Address64.Granularity), 5}, /* Optional ResourceSource (Index and String) */ {ACPI_RSC_SOURCE, ACPI_RS_OFFSET (Data.Address64.ResourceSource), 0, sizeof (AML_RESOURCE_ADDRESS64)} }; /******************************************************************************* * * AcpiRsConvertExtAddress64 - All Extended (64-bit) address resources * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertExtAddress64[5] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64, ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_ADDRESS64), ACPI_RSC_TABLE_SIZE (AcpiRsConvertExtAddress64)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64, sizeof (AML_RESOURCE_EXTENDED_ADDRESS64), 0}, /* Resource Type, General Flags, and Type-Specific Flags */ {ACPI_RSC_ADDRESS, 0, 0, 0}, /* Revision ID */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.ExtAddress64.RevisionID), AML_OFFSET (ExtAddress64.RevisionID), 1}, /* * These fields are contiguous in both the source and destination: * Address Granularity * Address Range Minimum * Address Range Maximum * Address Translation Offset * Address Length * Type-Specific Attribute */ {ACPI_RSC_MOVE64, ACPI_RS_OFFSET (Data.ExtAddress64.Address.Granularity), AML_OFFSET (ExtAddress64.Granularity), 6} }; /******************************************************************************* * * AcpiRsConvertGeneralFlags - Flags common to all address descriptors * ******************************************************************************/ static ACPI_RSCONVERT_INFO AcpiRsConvertGeneralFlags[6] = { {ACPI_RSC_FLAGINIT, 0, AML_OFFSET (Address.Flags), ACPI_RSC_TABLE_SIZE (AcpiRsConvertGeneralFlags)}, /* Resource Type (Memory, Io, BusNumber, etc.) */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Address.ResourceType), AML_OFFSET (Address.ResourceType), 1}, /* General Flags - Consume, Decode, MinFixed, MaxFixed */ {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.ProducerConsumer), AML_OFFSET (Address.Flags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Decode), AML_OFFSET (Address.Flags), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.MinAddressFixed), AML_OFFSET (Address.Flags), 2}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.MaxAddressFixed), AML_OFFSET (Address.Flags), 3} }; /******************************************************************************* * * AcpiRsConvertMemFlags - Flags common to Memory address descriptors * ******************************************************************************/ static ACPI_RSCONVERT_INFO AcpiRsConvertMemFlags[5] = { {ACPI_RSC_FLAGINIT, 0, AML_OFFSET (Address.SpecificFlags), ACPI_RSC_TABLE_SIZE (AcpiRsConvertMemFlags)}, /* Memory-specific flags */ {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.WriteProtect), AML_OFFSET (Address.SpecificFlags), 0}, {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.Caching), AML_OFFSET (Address.SpecificFlags), 1}, {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.RangeType), AML_OFFSET (Address.SpecificFlags), 3}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.Translation), AML_OFFSET (Address.SpecificFlags), 5} }; /******************************************************************************* * * AcpiRsConvertIoFlags - Flags common to I/O address descriptors * ******************************************************************************/ static ACPI_RSCONVERT_INFO AcpiRsConvertIoFlags[4] = { {ACPI_RSC_FLAGINIT, 0, AML_OFFSET (Address.SpecificFlags), ACPI_RSC_TABLE_SIZE (AcpiRsConvertIoFlags)}, /* I/O-specific flags */ {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Io.RangeType), AML_OFFSET (Address.SpecificFlags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Io.Translation), AML_OFFSET (Address.SpecificFlags), 4}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Io.TranslationType), AML_OFFSET (Address.SpecificFlags), 5} }; /******************************************************************************* * * FUNCTION: AcpiRsGetAddressCommon * * PARAMETERS: Resource - Pointer to the internal resource struct * Aml - Pointer to the AML resource descriptor * * RETURN: TRUE if the ResourceType field is OK, FALSE otherwise * * DESCRIPTION: Convert common flag fields from a raw AML resource descriptor * to an internal resource descriptor * ******************************************************************************/ BOOLEAN AcpiRsGetAddressCommon ( ACPI_RESOURCE *Resource, AML_RESOURCE *Aml) { /* Avoid undefined behavior: member access within misaligned address */ AML_RESOURCE_ADDRESS Address; memcpy(&Address, Aml, sizeof(Address)); ACPI_FUNCTION_ENTRY(); /* Validate the Resource Type */ if ((Address.ResourceType > 2) && (Address.ResourceType < 0xC0)) { return (FALSE); } /* Get the Resource Type and General Flags */ (void) AcpiRsConvertAmlToResource ( Resource, Aml, AcpiRsConvertGeneralFlags); /* Get the Type-Specific Flags (Memory and I/O descriptors only) */ if (Resource->Data.Address.ResourceType == ACPI_MEMORY_RANGE) { (void) AcpiRsConvertAmlToResource ( Resource, Aml, AcpiRsConvertMemFlags); } else if (Resource->Data.Address.ResourceType == ACPI_IO_RANGE) { (void) AcpiRsConvertAmlToResource ( Resource, Aml, AcpiRsConvertIoFlags); } else { /* Generic resource type, just grab the TypeSpecific byte */ Resource->Data.Address.Info.TypeSpecific = Address.SpecificFlags; } return (TRUE); } /******************************************************************************* * * FUNCTION: AcpiRsSetAddressCommon * * PARAMETERS: Aml - Pointer to the AML resource descriptor * Resource - Pointer to the internal resource struct * * RETURN: None * * DESCRIPTION: Convert common flag fields from a resource descriptor to an * AML descriptor * ******************************************************************************/ void AcpiRsSetAddressCommon ( AML_RESOURCE *Aml, ACPI_RESOURCE *Resource) { ACPI_FUNCTION_ENTRY (); /* Set the Resource Type and General Flags */ (void) AcpiRsConvertResourceToAml ( Resource, Aml, AcpiRsConvertGeneralFlags); /* Set the Type-Specific Flags (Memory and I/O descriptors only) */ if (Resource->Data.Address.ResourceType == ACPI_MEMORY_RANGE) { (void) AcpiRsConvertResourceToAml ( Resource, Aml, AcpiRsConvertMemFlags); } else if (Resource->Data.Address.ResourceType == ACPI_IO_RANGE) { (void) AcpiRsConvertResourceToAml ( Resource, Aml, AcpiRsConvertIoFlags); } else { /* Generic resource type, just copy the TypeSpecific byte */ Aml->Address.SpecificFlags = Resource->Data.Address.Info.TypeSpecific; } } src/acpica/source/components/resources/rscalc.c000066400000000000000000001032651465205512700222150ustar00rootroot00000000000000/******************************************************************************* * * Module Name: rscalc - Calculate stream and list lengths * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acresrc.h" #include "acnamesp.h" #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rscalc") /* Local prototypes */ static UINT8 AcpiRsCountSetBits ( UINT16 BitField); static ACPI_RS_LENGTH AcpiRsStructOptionLength ( ACPI_RESOURCE_SOURCE *ResourceSource); static UINT32 AcpiRsStreamOptionLength ( UINT32 ResourceLength, UINT32 MinimumTotalLength); /******************************************************************************* * * FUNCTION: AcpiRsCountSetBits * * PARAMETERS: BitField - Field in which to count bits * * RETURN: Number of bits set within the field * * DESCRIPTION: Count the number of bits set in a resource field. Used for * (Short descriptor) interrupt and DMA lists. * ******************************************************************************/ static UINT8 AcpiRsCountSetBits ( UINT16 BitField) { UINT8 BitsSet; ACPI_FUNCTION_ENTRY (); for (BitsSet = 0; BitField; BitsSet++) { /* Zero the least significant bit that is set */ BitField &= (UINT16) (BitField - 1); } return (BitsSet); } /******************************************************************************* * * FUNCTION: AcpiRsStructOptionLength * * PARAMETERS: ResourceSource - Pointer to optional descriptor field * * RETURN: Status * * DESCRIPTION: Common code to handle optional ResourceSourceIndex and * ResourceSource fields in some Large descriptors. Used during * list-to-stream conversion * ******************************************************************************/ static ACPI_RS_LENGTH AcpiRsStructOptionLength ( ACPI_RESOURCE_SOURCE *ResourceSource) { ACPI_FUNCTION_ENTRY (); /* * If the ResourceSource string is valid, return the size of the string * (StringLength includes the NULL terminator) plus the size of the * ResourceSourceIndex (1). */ if (ResourceSource->StringPtr) { return ((ACPI_RS_LENGTH) (ResourceSource->StringLength + 1)); } return (0); } /******************************************************************************* * * FUNCTION: AcpiRsStreamOptionLength * * PARAMETERS: ResourceLength - Length from the resource header * MinimumTotalLength - Minimum length of this resource, before * any optional fields. Includes header size * * RETURN: Length of optional string (0 if no string present) * * DESCRIPTION: Common code to handle optional ResourceSourceIndex and * ResourceSource fields in some Large descriptors. Used during * stream-to-list conversion * ******************************************************************************/ static UINT32 AcpiRsStreamOptionLength ( UINT32 ResourceLength, UINT32 MinimumAmlResourceLength) { UINT32 StringLength = 0; ACPI_FUNCTION_ENTRY (); /* * The ResourceSourceIndex and ResourceSource are optional elements of * some Large-type resource descriptors. */ /* * If the length of the actual resource descriptor is greater than the * ACPI spec-defined minimum length, it means that a ResourceSourceIndex * exists and is followed by a (required) null terminated string. The * string length (including the null terminator) is the resource length * minus the minimum length, minus one byte for the ResourceSourceIndex * itself. */ if (ResourceLength > MinimumAmlResourceLength) { /* Compute the length of the optional string */ StringLength = ResourceLength - MinimumAmlResourceLength - 1; } /* * Round the length up to a multiple of the native word in order to * guarantee that the entire resource descriptor is native word aligned */ return ((UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (StringLength)); } /******************************************************************************* * * FUNCTION: AcpiRsGetAmlLength * * PARAMETERS: Resource - Pointer to the resource linked list * ResourceListSize - Size of the resource linked list * SizeNeeded - Where the required size is returned * * RETURN: Status * * DESCRIPTION: Takes a linked list of internal resource descriptors and * calculates the size buffer needed to hold the corresponding * external resource byte stream. * ******************************************************************************/ ACPI_STATUS AcpiRsGetAmlLength ( ACPI_RESOURCE *Resource, ACPI_SIZE ResourceListSize, ACPI_SIZE *SizeNeeded) { ACPI_SIZE AmlSizeNeeded = 0; ACPI_RESOURCE *ResourceEnd; ACPI_RS_LENGTH TotalSize; ACPI_FUNCTION_TRACE (RsGetAmlLength); /* Traverse entire list of internal resource descriptors */ ResourceEnd = ACPI_ADD_PTR (ACPI_RESOURCE, Resource, ResourceListSize); while (Resource < ResourceEnd) { /* Validate the descriptor type */ if (Resource->Type > ACPI_RESOURCE_TYPE_MAX) { return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE); } /* Sanity check the length. It must not be zero, or we loop forever */ if (!Resource->Length) { return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH); } /* Get the base size of the (external stream) resource descriptor */ TotalSize = AcpiGbl_AmlResourceSizes [Resource->Type]; /* * Augment the base size for descriptors with optional and/or * variable-length fields */ switch (Resource->Type) { case ACPI_RESOURCE_TYPE_IRQ: /* Length can be 3 or 2 */ if (Resource->Data.Irq.DescriptorLength == 2) { TotalSize--; } break; case ACPI_RESOURCE_TYPE_START_DEPENDENT: /* Length can be 1 or 0 */ if (Resource->Data.Irq.DescriptorLength == 0) { TotalSize--; } break; case ACPI_RESOURCE_TYPE_VENDOR: /* * Vendor Defined Resource: * For a Vendor Specific resource, if the Length is between 1 and 7 * it will be created as a Small Resource data type, otherwise it * is a Large Resource data type. */ if (Resource->Data.Vendor.ByteLength > 7) { /* Base size of a Large resource descriptor */ TotalSize = sizeof (AML_RESOURCE_LARGE_HEADER); } /* Add the size of the vendor-specific data */ TotalSize = (ACPI_RS_LENGTH) (TotalSize + Resource->Data.Vendor.ByteLength); break; case ACPI_RESOURCE_TYPE_END_TAG: /* * End Tag: * We are done -- return the accumulated total size. */ *SizeNeeded = AmlSizeNeeded + TotalSize; /* Normal exit */ return_ACPI_STATUS (AE_OK); case ACPI_RESOURCE_TYPE_ADDRESS16: /* * 16-Bit Address Resource: * Add the size of the optional ResourceSource info */ TotalSize = (ACPI_RS_LENGTH) (TotalSize + AcpiRsStructOptionLength ( &Resource->Data.Address16.ResourceSource)); break; case ACPI_RESOURCE_TYPE_ADDRESS32: /* * 32-Bit Address Resource: * Add the size of the optional ResourceSource info */ TotalSize = (ACPI_RS_LENGTH) (TotalSize + AcpiRsStructOptionLength ( &Resource->Data.Address32.ResourceSource)); break; case ACPI_RESOURCE_TYPE_ADDRESS64: /* * 64-Bit Address Resource: * Add the size of the optional ResourceSource info */ TotalSize = (ACPI_RS_LENGTH) (TotalSize + AcpiRsStructOptionLength ( &Resource->Data.Address64.ResourceSource)); break; case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: /* * Extended IRQ Resource: * Add the size of each additional optional interrupt beyond the * required 1 (4 bytes for each UINT32 interrupt number) */ TotalSize = (ACPI_RS_LENGTH) (TotalSize + ((Resource->Data.ExtendedIrq.InterruptCount - 1) * 4) + /* Add the size of the optional ResourceSource info */ AcpiRsStructOptionLength ( &Resource->Data.ExtendedIrq.ResourceSource)); break; case ACPI_RESOURCE_TYPE_GPIO: TotalSize = (ACPI_RS_LENGTH) (TotalSize + (Resource->Data.Gpio.PinTableLength * 2) + Resource->Data.Gpio.ResourceSource.StringLength + Resource->Data.Gpio.VendorLength); break; case ACPI_RESOURCE_TYPE_PIN_FUNCTION: TotalSize = (ACPI_RS_LENGTH) (TotalSize + (Resource->Data.PinFunction.PinTableLength * 2) + Resource->Data.PinFunction.ResourceSource.StringLength + Resource->Data.PinFunction.VendorLength); break; case ACPI_RESOURCE_TYPE_CLOCK_INPUT: TotalSize = (ACPI_RS_LENGTH) (TotalSize + Resource->Data.ClockInput.ResourceSource.StringLength); break; case ACPI_RESOURCE_TYPE_SERIAL_BUS: TotalSize = AcpiGbl_AmlResourceSerialBusSizes [ Resource->Data.CommonSerialBus.Type]; TotalSize = (ACPI_RS_LENGTH) (TotalSize + Resource->Data.I2cSerialBus.ResourceSource.StringLength + Resource->Data.I2cSerialBus.VendorLength); break; case ACPI_RESOURCE_TYPE_PIN_CONFIG: TotalSize = (ACPI_RS_LENGTH) (TotalSize + (Resource->Data.PinConfig.PinTableLength * 2) + Resource->Data.PinConfig.ResourceSource.StringLength + Resource->Data.PinConfig.VendorLength); break; case ACPI_RESOURCE_TYPE_PIN_GROUP: TotalSize = (ACPI_RS_LENGTH) (TotalSize + (Resource->Data.PinGroup.PinTableLength * 2) + Resource->Data.PinGroup.ResourceLabel.StringLength + Resource->Data.PinGroup.VendorLength); break; case ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION: TotalSize = (ACPI_RS_LENGTH) (TotalSize + Resource->Data.PinGroupFunction.ResourceSource.StringLength + Resource->Data.PinGroupFunction.ResourceSourceLabel.StringLength + Resource->Data.PinGroupFunction.VendorLength); break; case ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG: TotalSize = (ACPI_RS_LENGTH) (TotalSize + Resource->Data.PinGroupConfig.ResourceSource.StringLength + Resource->Data.PinGroupConfig.ResourceSourceLabel.StringLength + Resource->Data.PinGroupConfig.VendorLength); break; default: break; } /* Update the total */ AmlSizeNeeded += TotalSize; /* Point to the next object */ Resource = ACPI_ADD_PTR (ACPI_RESOURCE, Resource, Resource->Length); } /* Did not find an EndTag resource descriptor */ return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG); } /******************************************************************************* * * FUNCTION: AcpiRsGetListLength * * PARAMETERS: AmlBuffer - Pointer to the resource byte stream * AmlBufferLength - Size of AmlBuffer * SizeNeeded - Where the size needed is returned * * RETURN: Status * * DESCRIPTION: Takes an external resource byte stream and calculates the size * buffer needed to hold the corresponding internal resource * descriptor linked list. * ******************************************************************************/ ACPI_STATUS AcpiRsGetListLength ( UINT8 *AmlBuffer, UINT32 AmlBufferLength, ACPI_SIZE *SizeNeeded) { ACPI_STATUS Status; UINT8 *EndAml; UINT8 *Buffer; UINT32 BufferSize; UINT16 Temp16; UINT16 ResourceLength; UINT32 ExtraStructBytes; UINT8 ResourceIndex; UINT8 MinimumAmlResourceLength; AML_RESOURCE *AmlResource; ACPI_FUNCTION_TRACE (RsGetListLength); *SizeNeeded = ACPI_RS_SIZE_MIN; /* Minimum size is one EndTag */ EndAml = AmlBuffer + AmlBufferLength; /* Walk the list of AML resource descriptors */ while (AmlBuffer < EndAml) { /* Validate the Resource Type and Resource Length */ Status = AcpiUtValidateResource (NULL, AmlBuffer, &ResourceIndex); if (ACPI_FAILURE (Status)) { /* * Exit on failure. Cannot continue because the descriptor length * may be bogus also. */ return_ACPI_STATUS (Status); } AmlResource = (void *) AmlBuffer; /* Get the resource length and base (minimum) AML size */ ResourceLength = AcpiUtGetResourceLength (AmlBuffer); MinimumAmlResourceLength = AcpiGbl_ResourceAmlSizes[ResourceIndex]; /* * Augment the size for descriptors with optional * and/or variable length fields */ ExtraStructBytes = 0; Buffer = AmlBuffer + AcpiUtGetResourceHeaderLength (AmlBuffer); switch (AcpiUtGetResourceType (AmlBuffer)) { case ACPI_RESOURCE_NAME_IRQ: /* * IRQ Resource: * Get the number of bits set in the 16-bit IRQ mask */ ACPI_MOVE_16_TO_16 (&Temp16, Buffer); ExtraStructBytes = AcpiRsCountSetBits (Temp16); break; case ACPI_RESOURCE_NAME_DMA: /* * DMA Resource: * Get the number of bits set in the 8-bit DMA mask */ ExtraStructBytes = AcpiRsCountSetBits (*Buffer); break; case ACPI_RESOURCE_NAME_VENDOR_SMALL: case ACPI_RESOURCE_NAME_VENDOR_LARGE: /* * Vendor Resource: * Get the number of vendor data bytes */ ExtraStructBytes = ResourceLength; /* * There is already one byte included in the minimum * descriptor size. If there are extra struct bytes, * subtract one from the count. */ if (ExtraStructBytes) { ExtraStructBytes--; } break; case ACPI_RESOURCE_NAME_END_TAG: /* * End Tag: This is the normal exit */ return_ACPI_STATUS (AE_OK); case ACPI_RESOURCE_NAME_ADDRESS32: case ACPI_RESOURCE_NAME_ADDRESS16: case ACPI_RESOURCE_NAME_ADDRESS64: /* * Address Resource: * Add the size of the optional ResourceSource */ ExtraStructBytes = AcpiRsStreamOptionLength ( ResourceLength, MinimumAmlResourceLength); break; case ACPI_RESOURCE_NAME_EXTENDED_IRQ: /* * Extended IRQ Resource: * Using the InterruptTableLength, add 4 bytes for each additional * interrupt. Note: at least one interrupt is required and is * included in the minimum descriptor size (reason for the -1) */ ExtraStructBytes = (Buffer[1] - 1) * sizeof (UINT32); /* Add the size of the optional ResourceSource */ ExtraStructBytes += AcpiRsStreamOptionLength ( ResourceLength - ExtraStructBytes, MinimumAmlResourceLength); break; case ACPI_RESOURCE_NAME_GPIO: /* Vendor data is optional */ if (AmlResource->Gpio.VendorLength) { ExtraStructBytes += AmlResource->Gpio.VendorOffset - AmlResource->Gpio.PinTableOffset + AmlResource->Gpio.VendorLength; } else { ExtraStructBytes += AmlResource->LargeHeader.ResourceLength + sizeof (AML_RESOURCE_LARGE_HEADER) - AmlResource->Gpio.PinTableOffset; } break; case ACPI_RESOURCE_NAME_PIN_FUNCTION: /* Vendor data is optional */ if (AmlResource->PinFunction.VendorLength) { ExtraStructBytes += AmlResource->PinFunction.VendorOffset - AmlResource->PinFunction.PinTableOffset + AmlResource->PinFunction.VendorLength; } else { ExtraStructBytes += AmlResource->LargeHeader.ResourceLength + sizeof (AML_RESOURCE_LARGE_HEADER) - AmlResource->PinFunction.PinTableOffset; } break; case ACPI_RESOURCE_NAME_SERIAL_BUS: { /* Avoid undefined behavior: member access within misaligned address */ AML_RESOURCE_COMMON_SERIALBUS CommonSerialBus; memcpy(&CommonSerialBus, AmlResource, sizeof(CommonSerialBus)); MinimumAmlResourceLength = AcpiGbl_ResourceAmlSerialBusSizes[ CommonSerialBus.Type]; ExtraStructBytes += CommonSerialBus.ResourceLength - MinimumAmlResourceLength; break; } case ACPI_RESOURCE_NAME_PIN_CONFIG: /* Vendor data is optional */ if (AmlResource->PinConfig.VendorLength) { ExtraStructBytes += AmlResource->PinConfig.VendorOffset - AmlResource->PinConfig.PinTableOffset + AmlResource->PinConfig.VendorLength; } else { ExtraStructBytes += AmlResource->LargeHeader.ResourceLength + sizeof (AML_RESOURCE_LARGE_HEADER) - AmlResource->PinConfig.PinTableOffset; } break; case ACPI_RESOURCE_NAME_PIN_GROUP: ExtraStructBytes += AmlResource->PinGroup.VendorOffset - AmlResource->PinGroup.PinTableOffset + AmlResource->PinGroup.VendorLength; break; case ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION: ExtraStructBytes += AmlResource->PinGroupFunction.VendorOffset - AmlResource->PinGroupFunction.ResSourceOffset + AmlResource->PinGroupFunction.VendorLength; break; case ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG: ExtraStructBytes += AmlResource->PinGroupConfig.VendorOffset - AmlResource->PinGroupConfig.ResSourceOffset + AmlResource->PinGroupConfig.VendorLength; break; case ACPI_RESOURCE_NAME_CLOCK_INPUT: ExtraStructBytes = AcpiRsStreamOptionLength ( ResourceLength, MinimumAmlResourceLength); break; default: break; } /* * Update the required buffer size for the internal descriptor structs * * Important: Round the size up for the appropriate alignment. This * is a requirement on IA64. */ if (AcpiUtGetResourceType (AmlBuffer) == ACPI_RESOURCE_NAME_SERIAL_BUS) { /* Avoid undefined behavior: member access within misaligned address */ AML_RESOURCE_COMMON_SERIALBUS CommonSerialBus; memcpy(&CommonSerialBus, AmlResource, sizeof(CommonSerialBus)); BufferSize = AcpiGbl_ResourceStructSerialBusSizes[ CommonSerialBus.Type] + ExtraStructBytes; } else { BufferSize = AcpiGbl_ResourceStructSizes[ResourceIndex] + ExtraStructBytes; } BufferSize = (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (BufferSize); *SizeNeeded += BufferSize; ACPI_DEBUG_PRINT ((ACPI_DB_RESOURCES, "Type %.2X, AmlLength %.2X InternalLength %.2X%8X\n", AcpiUtGetResourceType (AmlBuffer), AcpiUtGetDescriptorLength (AmlBuffer), ACPI_FORMAT_UINT64(*SizeNeeded))); /* * Point to the next resource within the AML stream using the length * contained in the resource descriptor header */ AmlBuffer += AcpiUtGetDescriptorLength (AmlBuffer); } /* Did not find an EndTag resource descriptor */ return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG); } /******************************************************************************* * * FUNCTION: AcpiRsGetPciRoutingTableLength * * PARAMETERS: PackageObject - Pointer to the package object * BufferSizeNeeded - UINT32 pointer of the size buffer * needed to properly return the * parsed data * * RETURN: Status * * DESCRIPTION: Given a package representing a PCI routing table, this * calculates the size of the corresponding linked list of * descriptions. * ******************************************************************************/ ACPI_STATUS AcpiRsGetPciRoutingTableLength ( ACPI_OPERAND_OBJECT *PackageObject, ACPI_SIZE *BufferSizeNeeded) { UINT32 NumberOfElements; ACPI_SIZE TempSizeNeeded = 0; ACPI_OPERAND_OBJECT **TopObjectList; UINT32 Index; ACPI_OPERAND_OBJECT *PackageElement; ACPI_OPERAND_OBJECT **SubObjectList; BOOLEAN NameFound; UINT32 TableIndex; ACPI_FUNCTION_TRACE (RsGetPciRoutingTableLength); NumberOfElements = PackageObject->Package.Count; /* * Calculate the size of the return buffer. * The base size is the number of elements * the sizes of the * structures. Additional space for the strings is added below. * The minus one is to subtract the size of the UINT8 Source[1] * member because it is added below. * * But each PRT_ENTRY structure has a pointer to a string and * the size of that string must be found. */ TopObjectList = PackageObject->Package.Elements; for (Index = 0; Index < NumberOfElements; Index++) { /* Dereference the subpackage */ PackageElement = *TopObjectList; /* We must have a valid Package object */ if (!PackageElement || (PackageElement->Common.Type != ACPI_TYPE_PACKAGE)) { return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* * The SubObjectList will now point to an array of the * four IRQ elements: Address, Pin, Source and SourceIndex */ SubObjectList = PackageElement->Package.Elements; /* Scan the IrqTableElements for the Source Name String */ NameFound = FALSE; for (TableIndex = 0; TableIndex < PackageElement->Package.Count && !NameFound; TableIndex++) { if (*SubObjectList && /* Null object allowed */ ((ACPI_TYPE_STRING == (*SubObjectList)->Common.Type) || ((ACPI_TYPE_LOCAL_REFERENCE == (*SubObjectList)->Common.Type) && ((*SubObjectList)->Reference.Class == ACPI_REFCLASS_NAME)))) { NameFound = TRUE; } else { /* Look at the next element */ SubObjectList++; } } TempSizeNeeded += (sizeof (ACPI_PCI_ROUTING_TABLE) - 4); /* Was a String type found? */ if (NameFound) { if ((*SubObjectList)->Common.Type == ACPI_TYPE_STRING) { /* * The length String.Length field does not include the * terminating NULL, add 1 */ TempSizeNeeded += ((ACPI_SIZE) (*SubObjectList)->String.Length + 1); } else { TempSizeNeeded += AcpiNsGetPathnameLength ( (*SubObjectList)->Reference.Node); } } else { /* * If no name was found, then this is a NULL, which is * translated as a UINT32 zero. */ TempSizeNeeded += sizeof (UINT32); } /* Round up the size since each element must be aligned */ TempSizeNeeded = ACPI_ROUND_UP_TO_64BIT (TempSizeNeeded); /* Point to the next ACPI_OPERAND_OBJECT */ TopObjectList++; } /* * Add an extra element to the end of the list, essentially a * NULL terminator */ *BufferSizeNeeded = TempSizeNeeded + sizeof (ACPI_PCI_ROUTING_TABLE); return_ACPI_STATUS (AE_OK); } src/acpica/source/components/resources/rscreate.c000066400000000000000000000551461465205512700225620ustar00rootroot00000000000000/******************************************************************************* * * Module Name: rscreate - Create resource lists/tables * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acresrc.h" #include "acnamesp.h" #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rscreate") /******************************************************************************* * * FUNCTION: AcpiBufferToResource * * PARAMETERS: AmlBuffer - Pointer to the resource byte stream * AmlBufferLength - Length of the AmlBuffer * ResourcePtr - Where the converted resource is returned * * RETURN: Status * * DESCRIPTION: Convert a raw AML buffer to a resource list * ******************************************************************************/ ACPI_STATUS AcpiBufferToResource ( UINT8 *AmlBuffer, UINT16 AmlBufferLength, ACPI_RESOURCE **ResourcePtr) { ACPI_STATUS Status; ACPI_SIZE ListSizeNeeded; void *Resource; void *CurrentResourcePtr; ACPI_FUNCTION_TRACE (AcpiBufferToResource); /* * Note: we allow AE_AML_NO_RESOURCE_END_TAG, since an end tag * is not required here. */ /* Get the required length for the converted resource */ Status = AcpiRsGetListLength ( AmlBuffer, AmlBufferLength, &ListSizeNeeded); if (Status == AE_AML_NO_RESOURCE_END_TAG) { Status = AE_OK; } if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Allocate a buffer for the converted resource */ Resource = ACPI_ALLOCATE_ZEROED (ListSizeNeeded); CurrentResourcePtr = Resource; if (!Resource) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Perform the AML-to-Resource conversion */ Status = AcpiUtWalkAmlResources (NULL, AmlBuffer, AmlBufferLength, AcpiRsConvertAmlToResources, &CurrentResourcePtr); if (Status == AE_AML_NO_RESOURCE_END_TAG) { Status = AE_OK; } if (ACPI_FAILURE (Status)) { ACPI_FREE (Resource); } else { *ResourcePtr = Resource; } return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiBufferToResource) /******************************************************************************* * * FUNCTION: AcpiRsCreateResourceList * * PARAMETERS: AmlBuffer - Pointer to the resource byte stream * OutputBuffer - Pointer to the user's buffer * * RETURN: Status: AE_OK if okay, else a valid ACPI_STATUS code * If OutputBuffer is not large enough, OutputBufferLength * indicates how large OutputBuffer should be, else it * indicates how may UINT8 elements of OutputBuffer are valid. * * DESCRIPTION: Takes the byte stream returned from a _CRS, _PRS control method * execution and parses the stream to create a linked list * of device resources. * ******************************************************************************/ ACPI_STATUS AcpiRsCreateResourceList ( ACPI_OPERAND_OBJECT *AmlBuffer, ACPI_BUFFER *OutputBuffer) { ACPI_STATUS Status; UINT8 *AmlStart; ACPI_SIZE ListSizeNeeded = 0; UINT32 AmlBufferLength; void *Resource; ACPI_FUNCTION_TRACE (RsCreateResourceList); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "AmlBuffer = %p\n", AmlBuffer)); /* Params already validated, so we don't re-validate here */ AmlBufferLength = AmlBuffer->Buffer.Length; AmlStart = AmlBuffer->Buffer.Pointer; /* * Pass the AmlBuffer into a module that can calculate * the buffer size needed for the linked list */ Status = AcpiRsGetListLength (AmlStart, AmlBufferLength, &ListSizeNeeded); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Status=%X ListSizeNeeded=%X\n", Status, (UINT32) ListSizeNeeded)); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Validate/Allocate/Clear caller buffer */ Status = AcpiUtInitializeBuffer (OutputBuffer, ListSizeNeeded); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Do the conversion */ Resource = OutputBuffer->Pointer; Status = AcpiUtWalkAmlResources (NULL, AmlStart, AmlBufferLength, AcpiRsConvertAmlToResources, &Resource); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer %p Length %X\n", OutputBuffer->Pointer, (UINT32) OutputBuffer->Length)); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiRsCreatePciRoutingTable * * PARAMETERS: PackageObject - Pointer to a package containing one * of more ACPI_OPERAND_OBJECTs * OutputBuffer - Pointer to the user's buffer * * RETURN: Status AE_OK if okay, else a valid ACPI_STATUS code. * If the OutputBuffer is too small, the error will be * AE_BUFFER_OVERFLOW and OutputBuffer->Length will point * to the size buffer needed. * * DESCRIPTION: Takes the ACPI_OPERAND_OBJECT package and creates a * linked list of PCI interrupt descriptions * * NOTE: It is the caller's responsibility to ensure that the start of the * output buffer is aligned properly (if necessary). * ******************************************************************************/ ACPI_STATUS AcpiRsCreatePciRoutingTable ( ACPI_OPERAND_OBJECT *PackageObject, ACPI_BUFFER *OutputBuffer) { UINT8 *Buffer; ACPI_OPERAND_OBJECT **TopObjectList; ACPI_OPERAND_OBJECT **SubObjectList; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_SIZE BufferSizeNeeded = 0; UINT32 NumberOfElements; UINT32 Index; ACPI_PCI_ROUTING_TABLE *UserPrt; ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; ACPI_BUFFER PathBuffer; ACPI_FUNCTION_TRACE (RsCreatePciRoutingTable); /* Params already validated, so we don't re-validate here */ /* Get the required buffer length */ Status = AcpiRsGetPciRoutingTableLength ( PackageObject,&BufferSizeNeeded); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "BufferSizeNeeded = %X\n", (UINT32) BufferSizeNeeded)); /* Validate/Allocate/Clear caller buffer */ Status = AcpiUtInitializeBuffer (OutputBuffer, BufferSizeNeeded); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Loop through the ACPI_INTERNAL_OBJECTS - Each object should be a * package that in turn contains an UINT64 Address, a UINT8 Pin, * a Name, and a UINT8 SourceIndex. */ TopObjectList = PackageObject->Package.Elements; NumberOfElements = PackageObject->Package.Count; Buffer = OutputBuffer->Pointer; UserPrt = ACPI_CAST_PTR (ACPI_PCI_ROUTING_TABLE, Buffer); for (Index = 0; Index < NumberOfElements; Index++) { /* * Point UserPrt past this current structure * * NOTE: On the first iteration, UserPrt->Length will * be zero because we cleared the return buffer earlier */ Buffer += UserPrt->Length; UserPrt = ACPI_CAST_PTR (ACPI_PCI_ROUTING_TABLE, Buffer); /* * Fill in the Length field with the information we have at this * point. The minus four is to subtract the size of the UINT8 * Source[4] member because it is added below. */ UserPrt->Length = (sizeof (ACPI_PCI_ROUTING_TABLE) - 4); /* Each subpackage must be of length 4 */ if ((*TopObjectList)->Package.Count != 4) { ACPI_ERROR ((AE_INFO, "(PRT[%u]) Need package of length 4, found length %u", Index, (*TopObjectList)->Package.Count)); return_ACPI_STATUS (AE_AML_PACKAGE_LIMIT); } /* * Dereference the subpackage. * The SubObjectList will now point to an array of the four IRQ * elements: [Address, Pin, Source, SourceIndex] */ SubObjectList = (*TopObjectList)->Package.Elements; /* 1) First subobject: Dereference the PRT.Address */ ObjDesc = SubObjectList[0]; if (!ObjDesc || ObjDesc->Common.Type != ACPI_TYPE_INTEGER) { ACPI_ERROR ((AE_INFO, "(PRT[%u].Address) Need Integer, found %s", Index, AcpiUtGetObjectTypeName (ObjDesc))); return_ACPI_STATUS (AE_BAD_DATA); } UserPrt->Address = ObjDesc->Integer.Value; /* 2) Second subobject: Dereference the PRT.Pin */ ObjDesc = SubObjectList[1]; if (!ObjDesc || ObjDesc->Common.Type != ACPI_TYPE_INTEGER) { ACPI_ERROR ((AE_INFO, "(PRT[%u].Pin) Need Integer, found %s", Index, AcpiUtGetObjectTypeName (ObjDesc))); return_ACPI_STATUS (AE_BAD_DATA); } UserPrt->Pin = (UINT32) ObjDesc->Integer.Value; /* * 3) Third subobject: Dereference the PRT.SourceName * The name may be unresolved (slack mode), so allow a null object */ ObjDesc = SubObjectList[2]; if (ObjDesc) { switch (ObjDesc->Common.Type) { case ACPI_TYPE_LOCAL_REFERENCE: if (ObjDesc->Reference.Class != ACPI_REFCLASS_NAME) { ACPI_ERROR ((AE_INFO, "(PRT[%u].Source) Need name, found Reference Class 0x%X", Index, ObjDesc->Reference.Class)); return_ACPI_STATUS (AE_BAD_DATA); } Node = ObjDesc->Reference.Node; /* Use *remaining* length of the buffer as max for pathname */ PathBuffer.Length = OutputBuffer->Length - (UINT32) ((UINT8 *) UserPrt->Source - (UINT8 *) OutputBuffer->Pointer); PathBuffer.Pointer = UserPrt->Source; Status = AcpiNsHandleToPathname ( (ACPI_HANDLE) Node, &PathBuffer, FALSE); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* +1 to include null terminator */ UserPrt->Length += (UINT32) strlen (UserPrt->Source) + 1; break; case ACPI_TYPE_STRING: strcpy (UserPrt->Source, ObjDesc->String.Pointer); /* * Add to the Length field the length of the string * (add 1 for terminator) */ UserPrt->Length += ObjDesc->String.Length + 1; break; case ACPI_TYPE_INTEGER: /* * If this is a number, then the Source Name is NULL, since * the entire buffer was zeroed out, we can leave this alone. * * Add to the Length field the length of the UINT32 NULL */ UserPrt->Length += sizeof (UINT32); break; default: ACPI_ERROR ((AE_INFO, "(PRT[%u].Source) Need Ref/String/Integer, found %s", Index, AcpiUtGetObjectTypeName (ObjDesc))); return_ACPI_STATUS (AE_BAD_DATA); } } /* Now align the current length */ UserPrt->Length = (UINT32) ACPI_ROUND_UP_TO_64BIT (UserPrt->Length); /* 4) Fourth subobject: Dereference the PRT.SourceIndex */ ObjDesc = SubObjectList[3]; if (!ObjDesc || ObjDesc->Common.Type != ACPI_TYPE_INTEGER) { ACPI_ERROR ((AE_INFO, "(PRT[%u].SourceIndex) Need Integer, found %s", Index, AcpiUtGetObjectTypeName (ObjDesc))); return_ACPI_STATUS (AE_BAD_DATA); } UserPrt->SourceIndex = (UINT32) ObjDesc->Integer.Value; /* Point to the next ACPI_OPERAND_OBJECT in the top level package */ TopObjectList++; } ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer %p Length %X\n", OutputBuffer->Pointer, (UINT32) OutputBuffer->Length)); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiRsCreateAmlResources * * PARAMETERS: ResourceList - Pointer to the resource list buffer * OutputBuffer - Where the AML buffer is returned * * RETURN: Status AE_OK if okay, else a valid ACPI_STATUS code. * If the OutputBuffer is too small, the error will be * AE_BUFFER_OVERFLOW and OutputBuffer->Length will point * to the size buffer needed. * * DESCRIPTION: Converts a list of device resources to an AML bytestream * to be used as input for the _SRS control method. * ******************************************************************************/ ACPI_STATUS AcpiRsCreateAmlResources ( ACPI_BUFFER *ResourceList, ACPI_BUFFER *OutputBuffer) { ACPI_STATUS Status; ACPI_SIZE AmlSizeNeeded = 0; ACPI_FUNCTION_TRACE (RsCreateAmlResources); /* Params already validated, no need to re-validate here */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "ResourceList Buffer = %p\n", ResourceList->Pointer)); /* Get the buffer size needed for the AML byte stream */ Status = AcpiRsGetAmlLength ( ResourceList->Pointer, ResourceList->Length, &AmlSizeNeeded); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "AmlSizeNeeded=%X, %s\n", (UINT32) AmlSizeNeeded, AcpiFormatException (Status))); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Validate/Allocate/Clear caller buffer */ Status = AcpiUtInitializeBuffer (OutputBuffer, AmlSizeNeeded); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Do the conversion */ Status = AcpiRsConvertResourcesToAml (ResourceList->Pointer, AmlSizeNeeded, OutputBuffer->Pointer); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer %p Length %X\n", OutputBuffer->Pointer, (UINT32) OutputBuffer->Length)); return_ACPI_STATUS (AE_OK); } src/acpica/source/components/resources/rsdump.c000066400000000000000000000603561465205512700222630ustar00rootroot00000000000000/******************************************************************************* * * Module Name: rsdump - AML debugger support for resource structures. * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acresrc.h" #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rsdump") /* * All functions in this module are used by the AML Debugger only */ /* Local prototypes */ static void AcpiRsOutString ( const char *Title, const char *Value); static void AcpiRsOutInteger8 ( const char *Title, UINT8 Value); static void AcpiRsOutInteger16 ( const char *Title, UINT16 Value); static void AcpiRsOutInteger32 ( const char *Title, UINT32 Value); static void AcpiRsOutInteger64 ( const char *Title, UINT64 Value); static void AcpiRsOutTitle ( const char *Title); static void AcpiRsDumpByteList ( UINT16 Length, UINT8 *Data); static void AcpiRsDumpWordList ( UINT16 Length, UINT16 *Data); static void AcpiRsDumpDwordList ( UINT8 Length, UINT32 *Data); static void AcpiRsDumpShortByteList ( UINT8 Length, UINT8 *Data); static void AcpiRsDumpResourceSource ( ACPI_RESOURCE_SOURCE *ResourceSource); static void AcpiRsDumpResourceLabel ( char *Title, ACPI_RESOURCE_LABEL *ResourceLabel); static void AcpiRsDumpAddressCommon ( ACPI_RESOURCE_DATA *Resource); static void AcpiRsDumpDescriptor ( void *Resource, ACPI_RSDUMP_INFO *Table); /******************************************************************************* * * FUNCTION: AcpiRsDumpResourceList * * PARAMETERS: ResourceList - Pointer to a resource descriptor list * * RETURN: None * * DESCRIPTION: Dispatches the structure to the correct dump routine. * ******************************************************************************/ void AcpiRsDumpResourceList ( ACPI_RESOURCE *ResourceList) { UINT32 Count = 0; UINT32 Type; ACPI_FUNCTION_ENTRY (); /* Check if debug output enabled */ if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_RESOURCES, _COMPONENT)) { return; } /* Walk list and dump all resource descriptors (END_TAG terminates) */ do { AcpiOsPrintf ("\n[%02X] ", Count); Count++; /* Validate Type before dispatch */ Type = ResourceList->Type; if (Type > ACPI_RESOURCE_TYPE_MAX) { AcpiOsPrintf ( "Invalid descriptor type (%X) in resource list\n", ResourceList->Type); return; } else if (!ResourceList->Type) { ACPI_ERROR ((AE_INFO, "Invalid Zero Resource Type")); return; } /* Sanity check the length. It must not be zero, or we loop forever */ if (!ResourceList->Length) { AcpiOsPrintf ( "Invalid zero length descriptor in resource list\n"); return; } /* Dump the resource descriptor */ if (Type == ACPI_RESOURCE_TYPE_SERIAL_BUS) { AcpiRsDumpDescriptor (&ResourceList->Data, AcpiGbl_DumpSerialBusDispatch[ ResourceList->Data.CommonSerialBus.Type]); } else { AcpiRsDumpDescriptor (&ResourceList->Data, AcpiGbl_DumpResourceDispatch[Type]); } /* Point to the next resource structure */ ResourceList = ACPI_NEXT_RESOURCE (ResourceList); /* Exit when END_TAG descriptor is reached */ } while (Type != ACPI_RESOURCE_TYPE_END_TAG); } /******************************************************************************* * * FUNCTION: AcpiRsDumpIrqList * * PARAMETERS: RouteTable - Pointer to the routing table to dump. * * RETURN: None * * DESCRIPTION: Print IRQ routing table * ******************************************************************************/ void AcpiRsDumpIrqList ( UINT8 *RouteTable) { ACPI_PCI_ROUTING_TABLE *PrtElement; UINT8 Count; ACPI_FUNCTION_ENTRY (); /* Check if debug output enabled */ if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_RESOURCES, _COMPONENT)) { return; } PrtElement = ACPI_CAST_PTR (ACPI_PCI_ROUTING_TABLE, RouteTable); /* Dump all table elements, Exit on zero length element */ for (Count = 0; PrtElement->Length; Count++) { AcpiOsPrintf ("\n[%02X] PCI IRQ Routing Table Package\n", Count); AcpiRsDumpDescriptor (PrtElement, AcpiRsDumpPrt); PrtElement = ACPI_ADD_PTR (ACPI_PCI_ROUTING_TABLE, PrtElement, PrtElement->Length); } } /******************************************************************************* * * FUNCTION: AcpiRsDumpDescriptor * * PARAMETERS: Resource - Buffer containing the resource * Table - Table entry to decode the resource * * RETURN: None * * DESCRIPTION: Dump a resource descriptor based on a dump table entry. * ******************************************************************************/ static void AcpiRsDumpDescriptor ( void *Resource, ACPI_RSDUMP_INFO *Table) { UINT8 *Target = NULL; UINT8 *PreviousTarget; const char *Name; UINT8 Count; /* First table entry must contain the table length (# of table entries) */ Count = Table->Offset; while (Count) { PreviousTarget = Target; Target = ACPI_ADD_PTR (UINT8, Resource, Table->Offset); Name = Table->Name; switch (Table->Opcode) { case ACPI_RSD_TITLE: /* * Optional resource title */ if (Table->Name) { AcpiOsPrintf ("%s Resource\n", Name); } break; /* Strings */ case ACPI_RSD_LITERAL: AcpiRsOutString (Name, ACPI_CAST_PTR (char, Table->Pointer)); break; case ACPI_RSD_STRING: AcpiRsOutString (Name, ACPI_CAST_PTR (char, Target)); break; /* Data items, 8/16/32/64 bit */ case ACPI_RSD_UINT8: if (Table->Pointer) { AcpiRsOutString (Name, Table->Pointer [*Target]); } else { AcpiRsOutInteger8 (Name, ACPI_GET8 (Target)); } break; case ACPI_RSD_UINT16: AcpiRsOutInteger16 (Name, ACPI_GET16 (Target)); break; case ACPI_RSD_UINT32: AcpiRsOutInteger32 (Name, ACPI_GET32 (Target)); break; case ACPI_RSD_UINT64: AcpiRsOutInteger64 (Name, ACPI_GET64 (Target)); break; /* Flags: 1-bit and 2-bit flags supported */ case ACPI_RSD_1BITFLAG: AcpiRsOutString (Name, Table->Pointer [*Target & 0x01]); break; case ACPI_RSD_2BITFLAG: AcpiRsOutString (Name, Table->Pointer [*Target & 0x03]); break; case ACPI_RSD_3BITFLAG: AcpiRsOutString (Name, Table->Pointer [*Target & 0x07]); break; case ACPI_RSD_6BITFLAG: AcpiRsOutInteger8 (Name, (ACPI_GET8 (Target) & 0x3F)); break; case ACPI_RSD_SHORTLIST: /* * Short byte list (single line output) for DMA and IRQ resources * Note: The list length is obtained from the previous table entry */ if (PreviousTarget) { AcpiRsOutTitle (Name); AcpiRsDumpShortByteList (*PreviousTarget, Target); } break; case ACPI_RSD_SHORTLISTX: /* * Short byte list (single line output) for GPIO vendor data * Note: The list length is obtained from the previous table entry */ if (PreviousTarget) { AcpiRsOutTitle (Name); AcpiRsDumpShortByteList (*PreviousTarget, *(ACPI_CAST_INDIRECT_PTR (UINT8, Target))); } break; case ACPI_RSD_LONGLIST: /* * Long byte list for Vendor resource data * Note: The list length is obtained from the previous table entry */ if (PreviousTarget) { AcpiRsDumpByteList (ACPI_GET16 (PreviousTarget), Target); } break; case ACPI_RSD_DWORDLIST: /* * Dword list for Extended Interrupt resources * Note: The list length is obtained from the previous table entry */ if (PreviousTarget) { AcpiRsDumpDwordList (*PreviousTarget, ACPI_CAST_PTR (UINT32, Target)); } break; case ACPI_RSD_WORDLIST: /* * Word list for GPIO Pin Table * Note: The list length is obtained from the previous table entry */ if (PreviousTarget) { AcpiRsDumpWordList (*PreviousTarget, *(ACPI_CAST_INDIRECT_PTR (UINT16, Target))); } break; case ACPI_RSD_ADDRESS: /* * Common flags for all Address resources */ AcpiRsDumpAddressCommon (ACPI_CAST_PTR ( ACPI_RESOURCE_DATA, Target)); break; case ACPI_RSD_SOURCE: /* * Optional ResourceSource for Address resources */ AcpiRsDumpResourceSource (ACPI_CAST_PTR ( ACPI_RESOURCE_SOURCE, Target)); break; case ACPI_RSD_LABEL: /* * ResourceLabel */ AcpiRsDumpResourceLabel ("Resource Label", ACPI_CAST_PTR ( ACPI_RESOURCE_LABEL, Target)); break; case ACPI_RSD_SOURCE_LABEL: /* * ResourceSourceLabel */ AcpiRsDumpResourceLabel ("Resource Source Label", ACPI_CAST_PTR ( ACPI_RESOURCE_LABEL, Target)); break; default: AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n", Table->Opcode); return; } Table++; Count--; } } /******************************************************************************* * * FUNCTION: AcpiRsDumpResourceSource * * PARAMETERS: ResourceSource - Pointer to a Resource Source struct * * RETURN: None * * DESCRIPTION: Common routine for dumping the optional ResourceSource and the * corresponding ResourceSourceIndex. * ******************************************************************************/ static void AcpiRsDumpResourceSource ( ACPI_RESOURCE_SOURCE *ResourceSource) { ACPI_FUNCTION_ENTRY (); if (ResourceSource->Index == 0xFF) { return; } AcpiRsOutInteger8 ("Resource Source Index", ResourceSource->Index); AcpiRsOutString ("Resource Source", ResourceSource->StringPtr ? ResourceSource->StringPtr : "[Not Specified]"); } /******************************************************************************* * * FUNCTION: AcpiRsDumpResourceLabel * * PARAMETERS: Title - Title of the dumped resource field * ResourceLabel - Pointer to a Resource Label struct * * RETURN: None * * DESCRIPTION: Common routine for dumping the ResourceLabel * ******************************************************************************/ static void AcpiRsDumpResourceLabel ( char *Title, ACPI_RESOURCE_LABEL *ResourceLabel) { ACPI_FUNCTION_ENTRY (); AcpiRsOutString (Title, ResourceLabel->StringPtr ? ResourceLabel->StringPtr : "[Not Specified]"); } /******************************************************************************* * * FUNCTION: AcpiRsDumpAddressCommon * * PARAMETERS: Resource - Pointer to an internal resource descriptor * * RETURN: None * * DESCRIPTION: Dump the fields that are common to all Address resource * descriptors * ******************************************************************************/ static void AcpiRsDumpAddressCommon ( ACPI_RESOURCE_DATA *Resource) { ACPI_FUNCTION_ENTRY (); /* Decode the type-specific flags */ switch (Resource->Address.ResourceType) { case ACPI_MEMORY_RANGE: AcpiRsDumpDescriptor (Resource, AcpiRsDumpMemoryFlags); break; case ACPI_IO_RANGE: AcpiRsDumpDescriptor (Resource, AcpiRsDumpIoFlags); break; case ACPI_BUS_NUMBER_RANGE: AcpiRsOutString ("Resource Type", "Bus Number Range"); break; default: AcpiRsOutInteger8 ("Resource Type", (UINT8) Resource->Address.ResourceType); break; } /* Decode the general flags */ AcpiRsDumpDescriptor (Resource, AcpiRsDumpGeneralFlags); } /******************************************************************************* * * FUNCTION: AcpiRsOut* * * PARAMETERS: Title - Name of the resource field * Value - Value of the resource field * * RETURN: None * * DESCRIPTION: Miscellaneous helper functions to consistently format the * output of the resource dump routines * ******************************************************************************/ static void AcpiRsOutString ( const char *Title, const char *Value) { AcpiOsPrintf ("%27s : %s", Title, Value); if (!*Value) { AcpiOsPrintf ("[NULL NAMESTRING]"); } AcpiOsPrintf ("\n"); } static void AcpiRsOutInteger8 ( const char *Title, UINT8 Value) { AcpiOsPrintf ("%27s : %2.2X\n", Title, Value); } static void AcpiRsOutInteger16 ( const char *Title, UINT16 Value) { AcpiOsPrintf ("%27s : %4.4X\n", Title, Value); } static void AcpiRsOutInteger32 ( const char *Title, UINT32 Value) { AcpiOsPrintf ("%27s : %8.8X\n", Title, Value); } static void AcpiRsOutInteger64 ( const char *Title, UINT64 Value) { AcpiOsPrintf ("%27s : %8.8X%8.8X\n", Title, ACPI_FORMAT_UINT64 (Value)); } static void AcpiRsOutTitle ( const char *Title) { AcpiOsPrintf ("%27s : ", Title); } /******************************************************************************* * * FUNCTION: AcpiRsDump*List * * PARAMETERS: Length - Number of elements in the list * Data - Start of the list * * RETURN: None * * DESCRIPTION: Miscellaneous functions to dump lists of raw data * ******************************************************************************/ static void AcpiRsDumpByteList ( UINT16 Length, UINT8 *Data) { UINT16 i; for (i = 0; i < Length; i++) { AcpiOsPrintf ("%25s%2.2X : %2.2X\n", "Byte", i, Data[i]); } } static void AcpiRsDumpShortByteList ( UINT8 Length, UINT8 *Data) { UINT8 i; for (i = 0; i < Length; i++) { AcpiOsPrintf ("%X ", Data[i]); } AcpiOsPrintf ("\n"); } static void AcpiRsDumpDwordList ( UINT8 Length, UINT32 *Data) { UINT8 i; for (i = 0; i < Length; i++) { AcpiOsPrintf ("%25s%2.2X : %8.8X\n", "Dword", i, Data[i]); } } static void AcpiRsDumpWordList ( UINT16 Length, UINT16 *Data) { UINT16 i; for (i = 0; i < Length; i++) { AcpiOsPrintf ("%25s%2.2X : %4.4X\n", "Word", i, Data[i]); } } src/acpica/source/components/resources/rsdumpinfo.c000066400000000000000000001126001465205512700231250ustar00rootroot00000000000000/******************************************************************************* * * Module Name: rsdumpinfo - Tables used to display resource descriptors. * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acresrc.h" #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rsdumpinfo") #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUGGER) #define ACPI_RSD_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_RESOURCE_DATA,f) #define ACPI_PRT_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_PCI_ROUTING_TABLE,f) #define ACPI_RSD_TABLE_SIZE(name) (sizeof(name) / sizeof (ACPI_RSDUMP_INFO)) /******************************************************************************* * * Resource Descriptor info tables * * Note: The first table entry must be a Title or Literal and must contain * the table length (number of table entries) * ******************************************************************************/ ACPI_RSDUMP_INFO AcpiRsDumpIrq[7] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpIrq), "IRQ", NULL}, {ACPI_RSD_UINT8 , ACPI_RSD_OFFSET (Irq.DescriptorLength), "Descriptor Length", NULL}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Irq.Triggering), "Triggering", AcpiGbl_HeDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Irq.Polarity), "Polarity", AcpiGbl_LlDecode}, {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Irq.Shareable), "Sharing", AcpiGbl_ShrDecode}, {ACPI_RSD_UINT8 , ACPI_RSD_OFFSET (Irq.InterruptCount), "Interrupt Count", NULL}, {ACPI_RSD_SHORTLIST,ACPI_RSD_OFFSET (Irq.Interrupts[0]), "Interrupt List", NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpDma[6] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpDma), "DMA", NULL}, {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Dma.Type), "Speed", AcpiGbl_TypDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Dma.BusMaster), "Mastering", AcpiGbl_BmDecode}, {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Dma.Transfer), "Transfer Type", AcpiGbl_SizDecode}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (Dma.ChannelCount), "Channel Count", NULL}, {ACPI_RSD_SHORTLIST,ACPI_RSD_OFFSET (Dma.Channels[0]), "Channel List", NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpStartDpf[4] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpStartDpf), "Start-Dependent-Functions",NULL}, {ACPI_RSD_UINT8 , ACPI_RSD_OFFSET (StartDpf.DescriptorLength), "Descriptor Length", NULL}, {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (StartDpf.CompatibilityPriority), "Compatibility Priority", AcpiGbl_ConfigDecode}, {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (StartDpf.PerformanceRobustness), "Performance/Robustness", AcpiGbl_ConfigDecode} }; ACPI_RSDUMP_INFO AcpiRsDumpEndDpf[1] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpEndDpf), "End-Dependent-Functions", NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpIo[6] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpIo), "I/O", NULL}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Io.IoDecode), "Address Decoding", AcpiGbl_IoDecode}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Io.Minimum), "Address Minimum", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Io.Maximum), "Address Maximum", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (Io.Alignment), "Alignment", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (Io.AddressLength), "Address Length", NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpFixedIo[3] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpFixedIo), "Fixed I/O", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (FixedIo.Address), "Address", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (FixedIo.AddressLength), "Address Length", NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpVendor[3] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpVendor), "Vendor Specific", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Vendor.ByteLength), "Length", NULL}, {ACPI_RSD_LONGLIST, ACPI_RSD_OFFSET (Vendor.ByteData[0]), "Vendor Data", NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpEndTag[1] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpEndTag), "EndTag", NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpMemory24[6] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpMemory24), "24-Bit Memory Range", NULL}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Memory24.WriteProtect), "Write Protect", AcpiGbl_RwDecode}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Memory24.Minimum), "Address Minimum", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Memory24.Maximum), "Address Maximum", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Memory24.Alignment), "Alignment", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Memory24.AddressLength), "Address Length", NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpMemory32[6] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpMemory32), "32-Bit Memory Range", NULL}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Memory32.WriteProtect), "Write Protect", AcpiGbl_RwDecode}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Memory32.Minimum), "Address Minimum", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Memory32.Maximum), "Address Maximum", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Memory32.Alignment), "Alignment", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Memory32.AddressLength), "Address Length", NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpFixedMemory32[4] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpFixedMemory32), "32-Bit Fixed Memory Range",NULL}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (FixedMemory32.WriteProtect), "Write Protect", AcpiGbl_RwDecode}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (FixedMemory32.Address), "Address", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (FixedMemory32.AddressLength), "Address Length", NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpAddress16[8] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpAddress16), "16-Bit WORD Address Space",NULL}, {ACPI_RSD_ADDRESS, 0, NULL, NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Address16.Address.Granularity), "Granularity", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Address16.Address.Minimum), "Address Minimum", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Address16.Address.Maximum), "Address Maximum", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Address16.Address.TranslationOffset), "Translation Offset", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Address16.Address.AddressLength), "Address Length", NULL}, {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (Address16.ResourceSource), NULL, NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpAddress32[8] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpAddress32), "32-Bit DWORD Address Space", NULL}, {ACPI_RSD_ADDRESS, 0, NULL, NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Address32.Address.Granularity), "Granularity", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Address32.Address.Minimum), "Address Minimum", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Address32.Address.Maximum), "Address Maximum", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Address32.Address.TranslationOffset), "Translation Offset", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Address32.Address.AddressLength), "Address Length", NULL}, {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (Address32.ResourceSource), NULL, NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpAddress64[8] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpAddress64), "64-Bit QWORD Address Space", NULL}, {ACPI_RSD_ADDRESS, 0, NULL, NULL}, {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (Address64.Address.Granularity), "Granularity", NULL}, {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (Address64.Address.Minimum), "Address Minimum", NULL}, {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (Address64.Address.Maximum), "Address Maximum", NULL}, {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (Address64.Address.TranslationOffset), "Translation Offset", NULL}, {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (Address64.Address.AddressLength), "Address Length", NULL}, {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (Address64.ResourceSource), NULL, NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpExtAddress64[8] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpExtAddress64), "64-Bit Extended Address Space", NULL}, {ACPI_RSD_ADDRESS, 0, NULL, NULL}, {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (ExtAddress64.Address.Granularity), "Granularity", NULL}, {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (ExtAddress64.Address.Minimum), "Address Minimum", NULL}, {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (ExtAddress64.Address.Maximum), "Address Maximum", NULL}, {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (ExtAddress64.Address.TranslationOffset), "Translation Offset", NULL}, {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (ExtAddress64.Address.AddressLength), "Address Length", NULL}, {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (ExtAddress64.TypeSpecific), "Type-Specific Attribute", NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpExtIrq[8] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpExtIrq), "Extended IRQ", NULL}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.ProducerConsumer), "Type", AcpiGbl_ConsumeDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.Triggering), "Triggering", AcpiGbl_HeDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.Polarity), "Polarity", AcpiGbl_LlDecode}, {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.Shareable), "Sharing", AcpiGbl_ShrDecode}, {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (ExtendedIrq.ResourceSource), NULL, NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (ExtendedIrq.InterruptCount), "Interrupt Count", NULL}, {ACPI_RSD_DWORDLIST,ACPI_RSD_OFFSET (ExtendedIrq.Interrupts[0]), "Interrupt List", NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpGenericReg[6] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpGenericReg), "Generic Register", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (GenericReg.SpaceId), "Space ID", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (GenericReg.BitWidth), "Bit Width", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (GenericReg.BitOffset), "Bit Offset", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (GenericReg.AccessSize), "Access Size", NULL}, {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (GenericReg.Address), "Address", NULL} }; ACPI_RSDUMP_INFO AcpiRsDumpGpio[16] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpGpio), "GPIO", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (Gpio.RevisionId), "RevisionId", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (Gpio.ConnectionType), "ConnectionType", AcpiGbl_CtDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Gpio.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (Gpio.PinConfig), "PinConfig", AcpiGbl_PpcDecode}, {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Gpio.Shareable), "Sharing", AcpiGbl_ShrDecode}, {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Gpio.IoRestriction), "IoRestriction", AcpiGbl_IorDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Gpio.Triggering), "Triggering", AcpiGbl_HeDecode}, {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Gpio.Polarity), "Polarity", AcpiGbl_LlDecode}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Gpio.DriveStrength), "DriveStrength", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Gpio.DebounceTimeout), "DebounceTimeout", NULL}, {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (Gpio.ResourceSource), "ResourceSource", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Gpio.PinTableLength), "PinTableLength", NULL}, {ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET (Gpio.PinTable), "PinTable", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Gpio.VendorLength), "VendorLength", NULL}, {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (Gpio.VendorData), "VendorData", NULL}, }; ACPI_RSDUMP_INFO AcpiRsDumpPinFunction[10] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinFunction), "PinFunction", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinFunction.RevisionId), "RevisionId", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinFunction.PinConfig), "PinConfig", AcpiGbl_PpcDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinFunction.Shareable), "Sharing", AcpiGbl_ShrDecode}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinFunction.FunctionNumber), "FunctionNumber", NULL}, {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (PinFunction.ResourceSource), "ResourceSource", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinFunction.PinTableLength), "PinTableLength", NULL}, {ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET (PinFunction.PinTable), "PinTable", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinFunction.VendorLength), "VendorLength", NULL}, {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinFunction.VendorData), "VendorData", NULL}, }; ACPI_RSDUMP_INFO AcpiRsDumpClockInput[7] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpClockInput), "ClockInput", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (ClockInput.RevisionId), "RevisionId", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (ClockInput.FrequencyNumerator), "FrequencyNumerator", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (ClockInput.FrequencyDivisor), "FrequencyDivisor", NULL}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ClockInput.Scale), "Scale", AcpiGbl_ClockInputScale}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ClockInput.Mode), "Mode", AcpiGbl_ClockInputMode}, {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (ClockInput.ResourceSource), "ResourceSource", NULL}, }; ACPI_RSDUMP_INFO AcpiRsDumpPinConfig[11] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinConfig), "PinConfig", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinConfig.RevisionId), "RevisionId", NULL}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinConfig.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinConfig.Shareable), "Sharing", AcpiGbl_ShrDecode}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinConfig.PinConfigType), "PinConfigType", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (PinConfig.PinConfigValue), "PinConfigValue", NULL}, {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (PinConfig.ResourceSource), "ResourceSource", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinConfig.PinTableLength), "PinTableLength", NULL}, {ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET (PinConfig.PinTable), "PinTable", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinConfig.VendorLength), "VendorLength", NULL}, {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinConfig.VendorData), "VendorData", NULL}, }; ACPI_RSDUMP_INFO AcpiRsDumpPinGroup[8] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinGroup), "PinGroup", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinGroup.RevisionId), "RevisionId", NULL}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroup.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroup.PinTableLength), "PinTableLength", NULL}, {ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET (PinGroup.PinTable), "PinTable", NULL}, {ACPI_RSD_LABEL, ACPI_RSD_OFFSET (PinGroup.ResourceLabel), "ResourceLabel", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroup.VendorLength), "VendorLength", NULL}, {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinGroup.VendorData), "VendorData", NULL}, }; ACPI_RSDUMP_INFO AcpiRsDumpPinGroupFunction[9] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinGroupFunction), "PinGroupFunction", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinGroupFunction.RevisionId), "RevisionId", NULL}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroupFunction.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroupFunction.Shareable), "Sharing", AcpiGbl_ShrDecode}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroupFunction.FunctionNumber), "FunctionNumber", NULL}, {ACPI_RSD_SOURCE_LABEL, ACPI_RSD_OFFSET (PinGroupFunction.ResourceSourceLabel), "ResourceSourceLabel", NULL}, {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (PinGroupFunction.ResourceSource), "ResourceSource", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroupFunction.VendorLength), "VendorLength", NULL}, {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinGroupFunction.VendorData), "VendorData", NULL}, }; ACPI_RSDUMP_INFO AcpiRsDumpPinGroupConfig[10] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinGroupConfig), "PinGroupConfig", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinGroupConfig.RevisionId), "RevisionId", NULL}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroupConfig.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroupConfig.Shareable), "Sharing", AcpiGbl_ShrDecode}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinGroupConfig.PinConfigType), "PinConfigType", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (PinGroupConfig.PinConfigValue), "PinConfigValue", NULL}, {ACPI_RSD_SOURCE_LABEL, ACPI_RSD_OFFSET (PinGroupConfig.ResourceSourceLabel), "ResourceSourceLabel", NULL}, {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (PinGroupConfig.ResourceSource), "ResourceSource", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroupConfig.VendorLength), "VendorLength", NULL}, {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinGroupConfig.VendorData), "VendorData", NULL}, }; ACPI_RSDUMP_INFO AcpiRsDumpFixedDma[4] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpFixedDma), "FixedDma", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (FixedDma.RequestLines), "RequestLines", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (FixedDma.Channels), "Channels", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (FixedDma.Width), "TransferWidth", AcpiGbl_DtsDecode}, }; #define ACPI_RS_DUMP_COMMON_SERIAL_BUS \ {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (CommonSerialBus.RevisionId), "RevisionId", NULL}, \ {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (CommonSerialBus.Type), "Type", AcpiGbl_SbtDecode}, \ {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (CommonSerialBus.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode}, \ {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (CommonSerialBus.SlaveMode), "SlaveMode", AcpiGbl_SmDecode}, \ {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (CommonSerialBus.ConnectionSharing),"ConnectionSharing", AcpiGbl_ShrDecode}, \ {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (CommonSerialBus.TypeRevisionId), "TypeRevisionId", NULL}, \ {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (CommonSerialBus.TypeDataLength), "TypeDataLength", NULL}, \ {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (CommonSerialBus.ResourceSource), "ResourceSource", NULL}, \ {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (CommonSerialBus.VendorLength), "VendorLength", NULL}, \ {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (CommonSerialBus.VendorData), "VendorData", NULL}, ACPI_RSDUMP_INFO AcpiRsDumpCommonSerialBus[11] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpCommonSerialBus), "Common Serial Bus", NULL}, ACPI_RS_DUMP_COMMON_SERIAL_BUS }; ACPI_RSDUMP_INFO AcpiRsDumpCsi2SerialBus[11] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpCsi2SerialBus), "Camera Serial Bus", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (Csi2SerialBus.RevisionId), "RevisionId", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (Csi2SerialBus.Type), "Type", AcpiGbl_SbtDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Csi2SerialBus.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Csi2SerialBus.SlaveMode), "SlaveMode", AcpiGbl_SmDecode}, {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Csi2SerialBus.PhyType), "PhyType", AcpiGbl_PhyDecode}, {ACPI_RSD_6BITFLAG, ACPI_RSD_OFFSET (Csi2SerialBus.LocalPortInstance), "LocalPortInstance", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (Csi2SerialBus.TypeRevisionId), "TypeRevisionId", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Csi2SerialBus.VendorLength), "VendorLength", NULL}, {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (Csi2SerialBus.VendorData), "VendorData", NULL}, {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (Csi2SerialBus.ResourceSource), "ResourceSource", NULL}, }; ACPI_RSDUMP_INFO AcpiRsDumpI2cSerialBus[14] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpI2cSerialBus), "I2C Serial Bus", NULL}, ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (I2cSerialBus.AccessMode), "AccessMode", AcpiGbl_AmDecode}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (I2cSerialBus.ConnectionSpeed), "ConnectionSpeed", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (I2cSerialBus.SlaveAddress), "SlaveAddress", NULL}, }; ACPI_RSDUMP_INFO AcpiRsDumpSpiSerialBus[18] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpSpiSerialBus), "Spi Serial Bus", NULL}, ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (SpiSerialBus.WireMode), "WireMode", AcpiGbl_WmDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (SpiSerialBus.DevicePolarity), "DevicePolarity", AcpiGbl_DpDecode}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (SpiSerialBus.DataBitLength), "DataBitLength", NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (SpiSerialBus.ClockPhase), "ClockPhase", AcpiGbl_CphDecode}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (SpiSerialBus.ClockPolarity), "ClockPolarity", AcpiGbl_CpoDecode}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (SpiSerialBus.DeviceSelection), "DeviceSelection", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (SpiSerialBus.ConnectionSpeed), "ConnectionSpeed", NULL}, }; ACPI_RSDUMP_INFO AcpiRsDumpUartSerialBus[20] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpUartSerialBus), "Uart Serial Bus", NULL}, ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (UartSerialBus.FlowControl), "FlowControl", AcpiGbl_FcDecode}, {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (UartSerialBus.StopBits), "StopBits", AcpiGbl_SbDecode}, {ACPI_RSD_3BITFLAG, ACPI_RSD_OFFSET (UartSerialBus.DataBits), "DataBits", AcpiGbl_BpbDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (UartSerialBus.Endian), "Endian", AcpiGbl_EdDecode}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (UartSerialBus.Parity), "Parity", AcpiGbl_PtDecode}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (UartSerialBus.LinesEnabled), "LinesEnabled", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (UartSerialBus.RxFifoSize), "RxFifoSize", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (UartSerialBus.TxFifoSize), "TxFifoSize", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (UartSerialBus.DefaultBaudRate), "ConnectionSpeed", NULL}, }; /* * Tables used for common address descriptor flag fields */ ACPI_RSDUMP_INFO AcpiRsDumpGeneralFlags[5] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpGeneralFlags), NULL, NULL}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.ProducerConsumer), "Consumer/Producer", AcpiGbl_ConsumeDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Decode), "Address Decode", AcpiGbl_DecDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.MinAddressFixed), "Min Relocatability", AcpiGbl_MinDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.MaxAddressFixed), "Max Relocatability", AcpiGbl_MaxDecode} }; ACPI_RSDUMP_INFO AcpiRsDumpMemoryFlags[5] = { {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE (AcpiRsDumpMemoryFlags), "Resource Type", (void *) "Memory Range"}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.WriteProtect), "Write Protect", AcpiGbl_RwDecode}, {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.Caching), "Caching", AcpiGbl_MemDecode}, {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.RangeType), "Range Type", AcpiGbl_MtpDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.Translation), "Translation", AcpiGbl_TtpDecode} }; ACPI_RSDUMP_INFO AcpiRsDumpIoFlags[4] = { {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE (AcpiRsDumpIoFlags), "Resource Type", (void *) "I/O Range"}, {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.RangeType), "Range Type", AcpiGbl_RngDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.Translation), "Translation", AcpiGbl_TtpDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.TranslationType), "Translation Type", AcpiGbl_TrsDecode} }; /* * Table used to dump _PRT contents */ ACPI_RSDUMP_INFO AcpiRsDumpPrt[5] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPrt), NULL, NULL}, {ACPI_RSD_UINT64, ACPI_PRT_OFFSET (Address), "Address", NULL}, {ACPI_RSD_UINT32, ACPI_PRT_OFFSET (Pin), "Pin", NULL}, {ACPI_RSD_STRING, ACPI_PRT_OFFSET (Source[0]), "Source", NULL}, {ACPI_RSD_UINT32, ACPI_PRT_OFFSET (SourceIndex), "Source Index", NULL} }; #endif src/acpica/source/components/resources/rsinfo.c000066400000000000000000000510051465205512700222400ustar00rootroot00000000000000/******************************************************************************* * * Module Name: rsinfo - Dispatch and Info tables * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acresrc.h" #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rsinfo") /* * Resource dispatch and information tables. Any new resource types (either * Large or Small) must be reflected in each of these tables, so they are here * in one place. * * The tables for Large descriptors are indexed by bits 6:0 of the AML * descriptor type byte. The tables for Small descriptors are indexed by * bits 6:3 of the descriptor byte. The tables for internal resource * descriptors are indexed by the ACPI_RESOURCE_TYPE field. */ /* Dispatch table for resource-to-AML (Set Resource) conversion functions */ ACPI_RSCONVERT_INFO *AcpiGbl_SetResourceDispatch[] = { AcpiRsSetIrq, /* 0x00, ACPI_RESOURCE_TYPE_IRQ */ AcpiRsConvertDma, /* 0x01, ACPI_RESOURCE_TYPE_DMA */ AcpiRsSetStartDpf, /* 0x02, ACPI_RESOURCE_TYPE_START_DEPENDENT */ AcpiRsConvertEndDpf, /* 0x03, ACPI_RESOURCE_TYPE_END_DEPENDENT */ AcpiRsConvertIo, /* 0x04, ACPI_RESOURCE_TYPE_IO */ AcpiRsConvertFixedIo, /* 0x05, ACPI_RESOURCE_TYPE_FIXED_IO */ AcpiRsSetVendor, /* 0x06, ACPI_RESOURCE_TYPE_VENDOR */ AcpiRsConvertEndTag, /* 0x07, ACPI_RESOURCE_TYPE_END_TAG */ AcpiRsConvertMemory24, /* 0x08, ACPI_RESOURCE_TYPE_MEMORY24 */ AcpiRsConvertMemory32, /* 0x09, ACPI_RESOURCE_TYPE_MEMORY32 */ AcpiRsConvertFixedMemory32, /* 0x0A, ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */ AcpiRsConvertAddress16, /* 0x0B, ACPI_RESOURCE_TYPE_ADDRESS16 */ AcpiRsConvertAddress32, /* 0x0C, ACPI_RESOURCE_TYPE_ADDRESS32 */ AcpiRsConvertAddress64, /* 0x0D, ACPI_RESOURCE_TYPE_ADDRESS64 */ AcpiRsConvertExtAddress64, /* 0x0E, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */ AcpiRsConvertExtIrq, /* 0x0F, ACPI_RESOURCE_TYPE_EXTENDED_IRQ */ AcpiRsConvertGenericReg, /* 0x10, ACPI_RESOURCE_TYPE_GENERIC_REGISTER */ AcpiRsConvertGpio, /* 0x11, ACPI_RESOURCE_TYPE_GPIO */ AcpiRsConvertFixedDma, /* 0x12, ACPI_RESOURCE_TYPE_FIXED_DMA */ NULL, /* 0x13, ACPI_RESOURCE_TYPE_SERIAL_BUS - Use subtype table below */ AcpiRsConvertPinFunction, /* 0x14, ACPI_RESOURCE_TYPE_PIN_FUNCTION */ AcpiRsConvertPinConfig, /* 0x15, ACPI_RESOURCE_TYPE_PIN_CONFIG */ AcpiRsConvertPinGroup, /* 0x16, ACPI_RESOURCE_TYPE_PIN_GROUP */ AcpiRsConvertPinGroupFunction, /* 0x17, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */ AcpiRsConvertPinGroupConfig, /* 0x18, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */ AcpiRsConvertClockInput, /* 0x19, ACPI_RESOURCE_TYPE_CLOCK_INPUT */ }; /* Dispatch tables for AML-to-resource (Get Resource) conversion functions */ ACPI_RSCONVERT_INFO *AcpiGbl_GetResourceDispatch[] = { /* Small descriptors */ NULL, /* 0x00, Reserved */ NULL, /* 0x01, Reserved */ NULL, /* 0x02, Reserved */ NULL, /* 0x03, Reserved */ AcpiRsGetIrq, /* 0x04, ACPI_RESOURCE_NAME_IRQ */ AcpiRsConvertDma, /* 0x05, ACPI_RESOURCE_NAME_DMA */ AcpiRsGetStartDpf, /* 0x06, ACPI_RESOURCE_NAME_START_DEPENDENT */ AcpiRsConvertEndDpf, /* 0x07, ACPI_RESOURCE_NAME_END_DEPENDENT */ AcpiRsConvertIo, /* 0x08, ACPI_RESOURCE_NAME_IO */ AcpiRsConvertFixedIo, /* 0x09, ACPI_RESOURCE_NAME_FIXED_IO */ AcpiRsConvertFixedDma, /* 0x0A, ACPI_RESOURCE_NAME_FIXED_DMA */ NULL, /* 0x0B, Reserved */ NULL, /* 0x0C, Reserved */ NULL, /* 0x0D, Reserved */ AcpiRsGetVendorSmall, /* 0x0E, ACPI_RESOURCE_NAME_VENDOR_SMALL */ AcpiRsConvertEndTag, /* 0x0F, ACPI_RESOURCE_NAME_END_TAG */ /* Large descriptors */ NULL, /* 0x00, Reserved */ AcpiRsConvertMemory24, /* 0x01, ACPI_RESOURCE_NAME_MEMORY24 */ AcpiRsConvertGenericReg, /* 0x02, ACPI_RESOURCE_NAME_GENERIC_REGISTER */ NULL, /* 0x03, Reserved */ AcpiRsGetVendorLarge, /* 0x04, ACPI_RESOURCE_NAME_VENDOR_LARGE */ AcpiRsConvertMemory32, /* 0x05, ACPI_RESOURCE_NAME_MEMORY32 */ AcpiRsConvertFixedMemory32, /* 0x06, ACPI_RESOURCE_NAME_FIXED_MEMORY32 */ AcpiRsConvertAddress32, /* 0x07, ACPI_RESOURCE_NAME_ADDRESS32 */ AcpiRsConvertAddress16, /* 0x08, ACPI_RESOURCE_NAME_ADDRESS16 */ AcpiRsConvertExtIrq, /* 0x09, ACPI_RESOURCE_NAME_EXTENDED_IRQ */ AcpiRsConvertAddress64, /* 0x0A, ACPI_RESOURCE_NAME_ADDRESS64 */ AcpiRsConvertExtAddress64, /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 */ AcpiRsConvertGpio, /* 0x0C, ACPI_RESOURCE_NAME_GPIO */ AcpiRsConvertPinFunction, /* 0x0D, ACPI_RESOURCE_NAME_PIN_FUNCTION */ NULL, /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use subtype table below */ AcpiRsConvertPinConfig, /* 0x0F, ACPI_RESOURCE_NAME_PIN_CONFIG */ AcpiRsConvertPinGroup, /* 0x10, ACPI_RESOURCE_NAME_PIN_GROUP */ AcpiRsConvertPinGroupFunction, /* 0x11, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION */ AcpiRsConvertPinGroupConfig, /* 0x12, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG */ AcpiRsConvertClockInput, /* 0x13, ACPI_RESOURCE_NAME_CLOCK_INPUT */ }; /* Subtype table for SerialBus -- I2C, SPI, UART, and CSI2 */ ACPI_RSCONVERT_INFO *AcpiGbl_ConvertResourceSerialBusDispatch[] = { NULL, AcpiRsConvertI2cSerialBus, AcpiRsConvertSpiSerialBus, AcpiRsConvertUartSerialBus, AcpiRsConvertCsi2SerialBus }; #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUGGER) /* Dispatch table for resource dump functions */ ACPI_RSDUMP_INFO *AcpiGbl_DumpResourceDispatch[] = { AcpiRsDumpIrq, /* ACPI_RESOURCE_TYPE_IRQ */ AcpiRsDumpDma, /* ACPI_RESOURCE_TYPE_DMA */ AcpiRsDumpStartDpf, /* ACPI_RESOURCE_TYPE_START_DEPENDENT */ AcpiRsDumpEndDpf, /* ACPI_RESOURCE_TYPE_END_DEPENDENT */ AcpiRsDumpIo, /* ACPI_RESOURCE_TYPE_IO */ AcpiRsDumpFixedIo, /* ACPI_RESOURCE_TYPE_FIXED_IO */ AcpiRsDumpVendor, /* ACPI_RESOURCE_TYPE_VENDOR */ AcpiRsDumpEndTag, /* ACPI_RESOURCE_TYPE_END_TAG */ AcpiRsDumpMemory24, /* ACPI_RESOURCE_TYPE_MEMORY24 */ AcpiRsDumpMemory32, /* ACPI_RESOURCE_TYPE_MEMORY32 */ AcpiRsDumpFixedMemory32, /* ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */ AcpiRsDumpAddress16, /* ACPI_RESOURCE_TYPE_ADDRESS16 */ AcpiRsDumpAddress32, /* ACPI_RESOURCE_TYPE_ADDRESS32 */ AcpiRsDumpAddress64, /* ACPI_RESOURCE_TYPE_ADDRESS64 */ AcpiRsDumpExtAddress64, /* ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */ AcpiRsDumpExtIrq, /* ACPI_RESOURCE_TYPE_EXTENDED_IRQ */ AcpiRsDumpGenericReg, /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */ AcpiRsDumpGpio, /* ACPI_RESOURCE_TYPE_GPIO */ AcpiRsDumpFixedDma, /* ACPI_RESOURCE_TYPE_FIXED_DMA */ NULL, /* ACPI_RESOURCE_TYPE_SERIAL_BUS */ AcpiRsDumpPinFunction, /* ACPI_RESOURCE_TYPE_PIN_FUNCTION */ AcpiRsDumpPinConfig, /* ACPI_RESOURCE_TYPE_PIN_CONFIG */ AcpiRsDumpPinGroup, /* ACPI_RESOURCE_TYPE_PIN_GROUP */ AcpiRsDumpPinGroupFunction, /* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */ AcpiRsDumpPinGroupConfig, /* ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */ AcpiRsDumpClockInput, /* ACPI_RESOURCE_TYPE_CLOCK_INPUT */ }; ACPI_RSDUMP_INFO *AcpiGbl_DumpSerialBusDispatch[] = { NULL, AcpiRsDumpI2cSerialBus, /* AML_RESOURCE_I2C_BUS_TYPE */ AcpiRsDumpSpiSerialBus, /* AML_RESOURCE_SPI_BUS_TYPE */ AcpiRsDumpUartSerialBus, /* AML_RESOURCE_UART_BUS_TYPE */ AcpiRsDumpCsi2SerialBus, /* AML_RESOURCE_CSI2_BUS_TYPE */ }; #endif /* * Base sizes for external AML resource descriptors, indexed by internal type. * Includes size of the descriptor header (1 byte for small descriptors, * 3 bytes for large descriptors) */ const UINT8 AcpiGbl_AmlResourceSizes[] = { sizeof (AML_RESOURCE_IRQ), /* ACPI_RESOURCE_TYPE_IRQ (optional Byte 3 always created) */ sizeof (AML_RESOURCE_DMA), /* ACPI_RESOURCE_TYPE_DMA */ sizeof (AML_RESOURCE_START_DEPENDENT), /* ACPI_RESOURCE_TYPE_START_DEPENDENT (optional Byte 1 always created) */ sizeof (AML_RESOURCE_END_DEPENDENT), /* ACPI_RESOURCE_TYPE_END_DEPENDENT */ sizeof (AML_RESOURCE_IO), /* ACPI_RESOURCE_TYPE_IO */ sizeof (AML_RESOURCE_FIXED_IO), /* ACPI_RESOURCE_TYPE_FIXED_IO */ sizeof (AML_RESOURCE_VENDOR_SMALL), /* ACPI_RESOURCE_TYPE_VENDOR */ sizeof (AML_RESOURCE_END_TAG), /* ACPI_RESOURCE_TYPE_END_TAG */ sizeof (AML_RESOURCE_MEMORY24), /* ACPI_RESOURCE_TYPE_MEMORY24 */ sizeof (AML_RESOURCE_MEMORY32), /* ACPI_RESOURCE_TYPE_MEMORY32 */ sizeof (AML_RESOURCE_FIXED_MEMORY32), /* ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */ sizeof (AML_RESOURCE_ADDRESS16), /* ACPI_RESOURCE_TYPE_ADDRESS16 */ sizeof (AML_RESOURCE_ADDRESS32), /* ACPI_RESOURCE_TYPE_ADDRESS32 */ sizeof (AML_RESOURCE_ADDRESS64), /* ACPI_RESOURCE_TYPE_ADDRESS64 */ sizeof (AML_RESOURCE_EXTENDED_ADDRESS64),/*ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */ sizeof (AML_RESOURCE_EXTENDED_IRQ), /* ACPI_RESOURCE_TYPE_EXTENDED_IRQ */ sizeof (AML_RESOURCE_GENERIC_REGISTER), /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */ sizeof (AML_RESOURCE_GPIO), /* ACPI_RESOURCE_TYPE_GPIO */ sizeof (AML_RESOURCE_FIXED_DMA), /* ACPI_RESOURCE_TYPE_FIXED_DMA */ sizeof (AML_RESOURCE_COMMON_SERIALBUS), /* ACPI_RESOURCE_TYPE_SERIAL_BUS */ sizeof (AML_RESOURCE_PIN_FUNCTION), /* ACPI_RESOURCE_TYPE_PIN_FUNCTION */ sizeof (AML_RESOURCE_PIN_CONFIG), /* ACPI_RESOURCE_TYPE_PIN_CONFIG */ sizeof (AML_RESOURCE_PIN_GROUP), /* ACPI_RESOURCE_TYPE_PIN_GROUP */ sizeof (AML_RESOURCE_PIN_GROUP_FUNCTION), /* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */ sizeof (AML_RESOURCE_PIN_GROUP_CONFIG), /* ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */ sizeof (AML_RESOURCE_CLOCK_INPUT), /* ACPI_RESOURCE_TYPE_CLOCK_INPUT */ }; const UINT8 AcpiGbl_ResourceStructSizes[] = { /* Small descriptors */ 0, 0, 0, 0, ACPI_RS_SIZE (ACPI_RESOURCE_IRQ), ACPI_RS_SIZE (ACPI_RESOURCE_DMA), ACPI_RS_SIZE (ACPI_RESOURCE_START_DEPENDENT), ACPI_RS_SIZE_MIN, ACPI_RS_SIZE (ACPI_RESOURCE_IO), ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_IO), ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_DMA), 0, 0, 0, ACPI_RS_SIZE (ACPI_RESOURCE_VENDOR), ACPI_RS_SIZE_MIN, /* Large descriptors */ 0, ACPI_RS_SIZE (ACPI_RESOURCE_MEMORY24), ACPI_RS_SIZE (ACPI_RESOURCE_GENERIC_REGISTER), 0, ACPI_RS_SIZE (ACPI_RESOURCE_VENDOR), ACPI_RS_SIZE (ACPI_RESOURCE_MEMORY32), ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_MEMORY32), ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS32), ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS16), ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_IRQ), ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS64), ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_ADDRESS64), ACPI_RS_SIZE (ACPI_RESOURCE_GPIO), ACPI_RS_SIZE (ACPI_RESOURCE_PIN_FUNCTION), ACPI_RS_SIZE (ACPI_RESOURCE_COMMON_SERIALBUS), ACPI_RS_SIZE (ACPI_RESOURCE_PIN_CONFIG), ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP), ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_FUNCTION), ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_CONFIG), ACPI_RS_SIZE (ACPI_RESOURCE_CLOCK_INPUT), }; const UINT8 AcpiGbl_AmlResourceSerialBusSizes[] = { 0, sizeof (AML_RESOURCE_I2C_SERIALBUS), sizeof (AML_RESOURCE_SPI_SERIALBUS), sizeof (AML_RESOURCE_UART_SERIALBUS), sizeof (AML_RESOURCE_CSI2_SERIALBUS), }; const UINT8 AcpiGbl_ResourceStructSerialBusSizes[] = { 0, ACPI_RS_SIZE (ACPI_RESOURCE_I2C_SERIALBUS), ACPI_RS_SIZE (ACPI_RESOURCE_SPI_SERIALBUS), ACPI_RS_SIZE (ACPI_RESOURCE_UART_SERIALBUS), ACPI_RS_SIZE (ACPI_RESOURCE_CSI2_SERIALBUS), }; src/acpica/source/components/resources/rsio.c000066400000000000000000000406731465205512700217250ustar00rootroot00000000000000/******************************************************************************* * * Module Name: rsio - IO and DMA resource descriptors * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acresrc.h" #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rsio") /******************************************************************************* * * AcpiRsConvertIo * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertIo[5] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_IO, ACPI_RS_SIZE (ACPI_RESOURCE_IO), ACPI_RSC_TABLE_SIZE (AcpiRsConvertIo)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_IO, sizeof (AML_RESOURCE_IO), 0}, /* Decode flag */ {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Io.IoDecode), AML_OFFSET (Io.Flags), 0}, /* * These fields are contiguous in both the source and destination: * Address Alignment * Length * Minimum Base Address * Maximum Base Address */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Io.Alignment), AML_OFFSET (Io.Alignment), 2}, {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.Io.Minimum), AML_OFFSET (Io.Minimum), 2} }; /******************************************************************************* * * AcpiRsConvertFixedIo * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertFixedIo[4] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_IO, ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_IO), ACPI_RSC_TABLE_SIZE (AcpiRsConvertFixedIo)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_IO, sizeof (AML_RESOURCE_FIXED_IO), 0}, /* * These fields are contiguous in both the source and destination: * Base Address * Length */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.FixedIo.AddressLength), AML_OFFSET (FixedIo.AddressLength), 1}, {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.FixedIo.Address), AML_OFFSET (FixedIo.Address), 1} }; /******************************************************************************* * * AcpiRsConvertGenericReg * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertGenericReg[4] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_GENERIC_REGISTER, ACPI_RS_SIZE (ACPI_RESOURCE_GENERIC_REGISTER), ACPI_RSC_TABLE_SIZE (AcpiRsConvertGenericReg)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_GENERIC_REGISTER, sizeof (AML_RESOURCE_GENERIC_REGISTER), 0}, /* * These fields are contiguous in both the source and destination: * Address Space ID * Register Bit Width * Register Bit Offset * Access Size */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.GenericReg.SpaceId), AML_OFFSET (GenericReg.AddressSpaceId), 4}, /* Get the Register Address */ {ACPI_RSC_MOVE64, ACPI_RS_OFFSET (Data.GenericReg.Address), AML_OFFSET (GenericReg.Address), 1} }; /******************************************************************************* * * AcpiRsConvertEndDpf * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertEndDpf[2] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_END_DEPENDENT, ACPI_RS_SIZE_MIN, ACPI_RSC_TABLE_SIZE (AcpiRsConvertEndDpf)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_END_DEPENDENT, sizeof (AML_RESOURCE_END_DEPENDENT), 0} }; /******************************************************************************* * * AcpiRsConvertEndTag * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertEndTag[2] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_END_TAG, ACPI_RS_SIZE_MIN, ACPI_RSC_TABLE_SIZE (AcpiRsConvertEndTag)}, /* * Note: The checksum field is set to zero, meaning that the resource * data is treated as if the checksum operation succeeded. * (ACPI Spec 1.0b Section 6.4.2.8) */ {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_END_TAG, sizeof (AML_RESOURCE_END_TAG), 0} }; /******************************************************************************* * * AcpiRsGetStartDpf * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsGetStartDpf[6] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_START_DEPENDENT, ACPI_RS_SIZE (ACPI_RESOURCE_START_DEPENDENT), ACPI_RSC_TABLE_SIZE (AcpiRsGetStartDpf)}, /* Defaults for Compatibility and Performance priorities */ {ACPI_RSC_SET8, ACPI_RS_OFFSET (Data.StartDpf.CompatibilityPriority), ACPI_ACCEPTABLE_CONFIGURATION, 2}, /* Get the descriptor length (0 or 1 for Start Dpf descriptor) */ {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.StartDpf.DescriptorLength), AML_OFFSET (StartDpf.DescriptorType), 0}, /* All done if there is no flag byte present in the descriptor */ {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_AML_LENGTH, 0, 1}, /* Flag byte is present, get the flags */ {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.StartDpf.CompatibilityPriority), AML_OFFSET (StartDpf.Flags), 0}, {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.StartDpf.PerformanceRobustness), AML_OFFSET (StartDpf.Flags), 2} }; /******************************************************************************* * * AcpiRsSetStartDpf * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsSetStartDpf[10] = { /* Start with a default descriptor of length 1 */ {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_START_DEPENDENT, sizeof (AML_RESOURCE_START_DEPENDENT), ACPI_RSC_TABLE_SIZE (AcpiRsSetStartDpf)}, /* Set the default flag values */ {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.StartDpf.CompatibilityPriority), AML_OFFSET (StartDpf.Flags), 0}, {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.StartDpf.PerformanceRobustness), AML_OFFSET (StartDpf.Flags), 2}, /* * All done if the output descriptor length is required to be 1 * (i.e., optimization to 0 bytes cannot be attempted) */ {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, ACPI_RS_OFFSET(Data.StartDpf.DescriptorLength), 1}, /* Set length to 0 bytes (no flags byte) */ {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_START_DEPENDENT_NOPRIO)}, /* * All done if the output descriptor length is required to be 0. * * TBD: Perhaps we should check for error if input flags are not * compatible with a 0-byte descriptor. */ {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, ACPI_RS_OFFSET(Data.StartDpf.DescriptorLength), 0}, /* Reset length to 1 byte (descriptor with flags byte) */ {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_START_DEPENDENT)}, /* * All done if flags byte is necessary -- if either priority value * is not ACPI_ACCEPTABLE_CONFIGURATION */ {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, ACPI_RS_OFFSET (Data.StartDpf.CompatibilityPriority), ACPI_ACCEPTABLE_CONFIGURATION}, {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, ACPI_RS_OFFSET (Data.StartDpf.PerformanceRobustness), ACPI_ACCEPTABLE_CONFIGURATION}, /* Flag byte is not necessary */ {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_START_DEPENDENT_NOPRIO)} }; src/acpica/source/components/resources/rsirq.c000066400000000000000000000422741465205512700221100ustar00rootroot00000000000000/******************************************************************************* * * Module Name: rsirq - IRQ resource descriptors * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acresrc.h" #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rsirq") /******************************************************************************* * * AcpiRsGetIrq * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsGetIrq[9] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_IRQ, ACPI_RS_SIZE (ACPI_RESOURCE_IRQ), ACPI_RSC_TABLE_SIZE (AcpiRsGetIrq)}, /* Get the IRQ mask (bytes 1:2) */ {ACPI_RSC_BITMASK16,ACPI_RS_OFFSET (Data.Irq.Interrupts[0]), AML_OFFSET (Irq.IrqMask), ACPI_RS_OFFSET (Data.Irq.InterruptCount)}, /* Set default flags (others are zero) */ {ACPI_RSC_SET8, ACPI_RS_OFFSET (Data.Irq.Triggering), ACPI_EDGE_SENSITIVE, 1}, /* Get the descriptor length (2 or 3 for IRQ descriptor) */ {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Irq.DescriptorLength), AML_OFFSET (Irq.DescriptorType), 0}, /* All done if no flag byte present in descriptor */ {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_AML_LENGTH, 0, 3}, /* Get flags: Triggering[0], Polarity[3], Sharing[4], Wake[5] */ {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Triggering), AML_OFFSET (Irq.Flags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Polarity), AML_OFFSET (Irq.Flags), 3}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Shareable), AML_OFFSET (Irq.Flags), 4}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.WakeCapable), AML_OFFSET (Irq.Flags), 5} }; /******************************************************************************* * * AcpiRsSetIrq * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsSetIrq[14] = { /* Start with a default descriptor of length 3 */ {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_IRQ, sizeof (AML_RESOURCE_IRQ), ACPI_RSC_TABLE_SIZE (AcpiRsSetIrq)}, /* Convert interrupt list to 16-bit IRQ bitmask */ {ACPI_RSC_BITMASK16,ACPI_RS_OFFSET (Data.Irq.Interrupts[0]), AML_OFFSET (Irq.IrqMask), ACPI_RS_OFFSET (Data.Irq.InterruptCount)}, /* Set flags: Triggering[0], Polarity[3], Sharing[4], Wake[5] */ {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Triggering), AML_OFFSET (Irq.Flags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Polarity), AML_OFFSET (Irq.Flags), 3}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Shareable), AML_OFFSET (Irq.Flags), 4}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.WakeCapable), AML_OFFSET (Irq.Flags), 5}, /* * All done if the output descriptor length is required to be 3 * (i.e., optimization to 2 bytes cannot be attempted) */ {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, ACPI_RS_OFFSET(Data.Irq.DescriptorLength), 3}, /* Set length to 2 bytes (no flags byte) */ {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_IRQ_NOFLAGS)}, /* * All done if the output descriptor length is required to be 2. * * TBD: Perhaps we should check for error if input flags are not * compatible with a 2-byte descriptor. */ {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, ACPI_RS_OFFSET(Data.Irq.DescriptorLength), 2}, /* Reset length to 3 bytes (descriptor with flags byte) */ {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_IRQ)}, /* * Check if the flags byte is necessary. Not needed if the flags are: * ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_HIGH, ACPI_EXCLUSIVE */ {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, ACPI_RS_OFFSET (Data.Irq.Triggering), ACPI_EDGE_SENSITIVE}, {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, ACPI_RS_OFFSET (Data.Irq.Polarity), ACPI_ACTIVE_HIGH}, {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, ACPI_RS_OFFSET (Data.Irq.Shareable), ACPI_EXCLUSIVE}, /* We can optimize to a 2-byte IrqNoFlags() descriptor */ {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_IRQ_NOFLAGS)} }; /******************************************************************************* * * AcpiRsConvertExtIrq * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertExtIrq[10] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_EXTENDED_IRQ, ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_IRQ), ACPI_RSC_TABLE_SIZE (AcpiRsConvertExtIrq)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_EXTENDED_IRQ, sizeof (AML_RESOURCE_EXTENDED_IRQ), 0}, /* * Flags: Producer/Consumer[0], Triggering[1], Polarity[2], * Sharing[3], Wake[4] */ {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.ProducerConsumer), AML_OFFSET (ExtendedIrq.Flags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.Triggering), AML_OFFSET (ExtendedIrq.Flags), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.Polarity), AML_OFFSET (ExtendedIrq.Flags), 2}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.Shareable), AML_OFFSET (ExtendedIrq.Flags), 3}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.WakeCapable), AML_OFFSET (ExtendedIrq.Flags), 4}, /* IRQ Table length (Byte4) */ {ACPI_RSC_COUNT, ACPI_RS_OFFSET (Data.ExtendedIrq.InterruptCount), AML_OFFSET (ExtendedIrq.InterruptCount), sizeof (UINT32)}, /* Copy every IRQ in the table, each is 32 bits */ {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.ExtendedIrq.Interrupts[0]), AML_OFFSET (ExtendedIrq.Interrupts[0]), 0}, /* Optional ResourceSource (Index and String) */ {ACPI_RSC_SOURCEX, ACPI_RS_OFFSET (Data.ExtendedIrq.ResourceSource), ACPI_RS_OFFSET (Data.ExtendedIrq.Interrupts[0]), sizeof (AML_RESOURCE_EXTENDED_IRQ)} }; /******************************************************************************* * * AcpiRsConvertDma * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertDma[6] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_DMA, ACPI_RS_SIZE (ACPI_RESOURCE_DMA), ACPI_RSC_TABLE_SIZE (AcpiRsConvertDma)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_DMA, sizeof (AML_RESOURCE_DMA), 0}, /* Flags: transfer preference, bus mastering, channel speed */ {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Dma.Transfer), AML_OFFSET (Dma.Flags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Dma.BusMaster), AML_OFFSET (Dma.Flags), 2}, {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Dma.Type), AML_OFFSET (Dma.Flags), 5}, /* DMA channel mask bits */ {ACPI_RSC_BITMASK, ACPI_RS_OFFSET (Data.Dma.Channels[0]), AML_OFFSET (Dma.DmaChannelMask), ACPI_RS_OFFSET (Data.Dma.ChannelCount)} }; /******************************************************************************* * * AcpiRsConvertFixedDma * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertFixedDma[4] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_DMA, ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_DMA), ACPI_RSC_TABLE_SIZE (AcpiRsConvertFixedDma)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_DMA, sizeof (AML_RESOURCE_FIXED_DMA), 0}, /* * These fields are contiguous in both the source and destination: * RequestLines * Channels */ {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.FixedDma.RequestLines), AML_OFFSET (FixedDma.RequestLines), 2}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.FixedDma.Width), AML_OFFSET (FixedDma.Width), 1}, }; src/acpica/source/components/resources/rslist.c000066400000000000000000000374121465205512700222660ustar00rootroot00000000000000/******************************************************************************* * * Module Name: rslist - Linked list utilities * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acresrc.h" #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rslist") /******************************************************************************* * * FUNCTION: AcpiRsConvertAmlToResources * * PARAMETERS: ACPI_WALK_AML_CALLBACK * ResourcePtr - Pointer to the buffer that will * contain the output structures * * RETURN: Status * * DESCRIPTION: Convert an AML resource to an internal representation of the * resource that is aligned and easier to access. * ******************************************************************************/ ACPI_STATUS AcpiRsConvertAmlToResources ( UINT8 *Aml, UINT32 Length, UINT32 Offset, UINT8 ResourceIndex, void **Context) { ACPI_RESOURCE **ResourcePtr = ACPI_CAST_INDIRECT_PTR ( ACPI_RESOURCE, Context); ACPI_RESOURCE *Resource; AML_RESOURCE *AmlResource; ACPI_RSCONVERT_INFO *ConversionTable; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (RsConvertAmlToResources); /* * Check that the input buffer and all subsequent pointers into it * are aligned on a native word boundary. Most important on IA64 */ Resource = *ResourcePtr; if (ACPI_IS_MISALIGNED (Resource)) { ACPI_WARNING ((AE_INFO, "Misaligned resource pointer %p", Resource)); } /* Get the appropriate conversion info table */ AmlResource = ACPI_CAST_PTR (AML_RESOURCE, Aml); if (AcpiUtGetResourceType (Aml) == ACPI_RESOURCE_NAME_SERIAL_BUS) { /* Avoid undefined behavior: member access within misaligned address */ AML_RESOURCE_COMMON_SERIALBUS CommonSerialBus; memcpy(&CommonSerialBus, AmlResource, sizeof(CommonSerialBus)); if (CommonSerialBus.Type > AML_RESOURCE_MAX_SERIALBUSTYPE) { ConversionTable = NULL; } else { /* This is an I2C, SPI, UART, or CSI2 SerialBus descriptor */ ConversionTable = AcpiGbl_ConvertResourceSerialBusDispatch [ CommonSerialBus.Type]; } } else { ConversionTable = AcpiGbl_GetResourceDispatch[ResourceIndex]; } if (!ConversionTable) { ACPI_ERROR ((AE_INFO, "Invalid/unsupported resource descriptor: Type 0x%2.2X", ResourceIndex)); return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE); } /* Convert the AML byte stream resource to a local resource struct */ Status = AcpiRsConvertAmlToResource ( Resource, AmlResource, ConversionTable); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not convert AML resource (Type 0x%X)", *Aml)); return_ACPI_STATUS (Status); } if (!Resource->Length) { ACPI_EXCEPTION ((AE_INFO, Status, "Zero-length resource returned from RsConvertAmlToResource")); } ACPI_DEBUG_PRINT ((ACPI_DB_RESOURCES, "Type %.2X, AmlLength %.2X InternalLength %.2X\n", AcpiUtGetResourceType (Aml), Length, Resource->Length)); /* Point to the next structure in the output buffer */ *ResourcePtr = ACPI_NEXT_RESOURCE (Resource); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiRsConvertResourcesToAml * * PARAMETERS: Resource - Pointer to the resource linked list * AmlSizeNeeded - Calculated size of the byte stream * needed from calling AcpiRsGetAmlLength() * The size of the OutputBuffer is * guaranteed to be >= AmlSizeNeeded * OutputBuffer - Pointer to the buffer that will * contain the byte stream * * RETURN: Status * * DESCRIPTION: Takes the resource linked list and parses it, creating a * byte stream of resources in the caller's output buffer * ******************************************************************************/ ACPI_STATUS AcpiRsConvertResourcesToAml ( ACPI_RESOURCE *Resource, ACPI_SIZE AmlSizeNeeded, UINT8 *OutputBuffer) { UINT8 *Aml = OutputBuffer; UINT8 *EndAml = OutputBuffer + AmlSizeNeeded; ACPI_RSCONVERT_INFO *ConversionTable; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (RsConvertResourcesToAml); /* Walk the resource descriptor list, convert each descriptor */ while (Aml < EndAml) { /* Validate the (internal) Resource Type */ if (Resource->Type > ACPI_RESOURCE_TYPE_MAX) { ACPI_ERROR ((AE_INFO, "Invalid descriptor type (0x%X) in resource list", Resource->Type)); return_ACPI_STATUS (AE_BAD_DATA); } /* Sanity check the length. It must not be zero, or we loop forever */ if (!Resource->Length) { ACPI_ERROR ((AE_INFO, "Invalid zero length descriptor in resource list\n")); return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH); } /* Perform the conversion */ if (Resource->Type == ACPI_RESOURCE_TYPE_SERIAL_BUS) { if (Resource->Data.CommonSerialBus.Type > AML_RESOURCE_MAX_SERIALBUSTYPE) { ConversionTable = NULL; } else { /* This is an I2C, SPI, UART or CSI2 SerialBus descriptor */ ConversionTable = AcpiGbl_ConvertResourceSerialBusDispatch[ Resource->Data.CommonSerialBus.Type]; } } else { ConversionTable = AcpiGbl_SetResourceDispatch[Resource->Type]; } if (!ConversionTable) { ACPI_ERROR ((AE_INFO, "Invalid/unsupported resource descriptor: Type 0x%2.2X", Resource->Type)); return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE); } Status = AcpiRsConvertResourceToAml (Resource, ACPI_CAST_PTR (AML_RESOURCE, Aml), ConversionTable); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not convert resource (type 0x%X) to AML", Resource->Type)); return_ACPI_STATUS (Status); } /* Perform final sanity check on the new AML resource descriptor */ Status = AcpiUtValidateResource ( NULL, ACPI_CAST_PTR (AML_RESOURCE, Aml), NULL); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Check for end-of-list, normal exit */ if (Resource->Type == ACPI_RESOURCE_TYPE_END_TAG) { /* An End Tag indicates the end of the input Resource Template */ return_ACPI_STATUS (AE_OK); } /* * Extract the total length of the new descriptor and set the * Aml to point to the next (output) resource descriptor */ Aml += AcpiUtGetDescriptorLength (Aml); /* Point to the next input resource descriptor */ Resource = ACPI_NEXT_RESOURCE (Resource); } /* Completed buffer, but did not find an EndTag resource descriptor */ return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG); } src/acpica/source/components/resources/rsmemory.c000066400000000000000000000346541465205512700226300ustar00rootroot00000000000000/******************************************************************************* * * Module Name: rsmem24 - Memory resource descriptors * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acresrc.h" #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rsmemory") /******************************************************************************* * * AcpiRsConvertMemory24 * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertMemory24[4] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY24, ACPI_RS_SIZE (ACPI_RESOURCE_MEMORY24), ACPI_RSC_TABLE_SIZE (AcpiRsConvertMemory24)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY24, sizeof (AML_RESOURCE_MEMORY24), 0}, /* Read/Write bit */ {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Memory24.WriteProtect), AML_OFFSET (Memory24.Flags), 0}, /* * These fields are contiguous in both the source and destination: * Minimum Base Address * Maximum Base Address * Address Base Alignment * Range Length */ {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.Memory24.Minimum), AML_OFFSET (Memory24.Minimum), 4} }; /******************************************************************************* * * AcpiRsConvertMemory32 * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertMemory32[4] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY32, ACPI_RS_SIZE (ACPI_RESOURCE_MEMORY32), ACPI_RSC_TABLE_SIZE (AcpiRsConvertMemory32)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY32, sizeof (AML_RESOURCE_MEMORY32), 0}, /* Read/Write bit */ {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Memory32.WriteProtect), AML_OFFSET (Memory32.Flags), 0}, /* * These fields are contiguous in both the source and destination: * Minimum Base Address * Maximum Base Address * Address Base Alignment * Range Length */ {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.Memory32.Minimum), AML_OFFSET (Memory32.Minimum), 4} }; /******************************************************************************* * * AcpiRsConvertFixedMemory32 * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertFixedMemory32[4] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_MEMORY32, ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_MEMORY32), ACPI_RSC_TABLE_SIZE (AcpiRsConvertFixedMemory32)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_MEMORY32, sizeof (AML_RESOURCE_FIXED_MEMORY32), 0}, /* Read/Write bit */ {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.FixedMemory32.WriteProtect), AML_OFFSET (FixedMemory32.Flags), 0}, /* * These fields are contiguous in both the source and destination: * Base Address * Range Length */ {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.FixedMemory32.Address), AML_OFFSET (FixedMemory32.Address), 2} }; /******************************************************************************* * * AcpiRsGetVendorSmall * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsGetVendorSmall[3] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR, ACPI_RS_SIZE (ACPI_RESOURCE_VENDOR), ACPI_RSC_TABLE_SIZE (AcpiRsGetVendorSmall)}, /* Length of the vendor data (byte count) */ {ACPI_RSC_COUNT16, ACPI_RS_OFFSET (Data.Vendor.ByteLength), 0, sizeof (UINT8)}, /* Vendor data */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Vendor.ByteData[0]), sizeof (AML_RESOURCE_SMALL_HEADER), 0} }; /******************************************************************************* * * AcpiRsGetVendorLarge * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsGetVendorLarge[3] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR, ACPI_RS_SIZE (ACPI_RESOURCE_VENDOR), ACPI_RSC_TABLE_SIZE (AcpiRsGetVendorLarge)}, /* Length of the vendor data (byte count) */ {ACPI_RSC_COUNT16, ACPI_RS_OFFSET (Data.Vendor.ByteLength), 0, sizeof (UINT8)}, /* Vendor data */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Vendor.ByteData[0]), sizeof (AML_RESOURCE_LARGE_HEADER), 0} }; /******************************************************************************* * * AcpiRsSetVendor * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsSetVendor[7] = { /* Default is a small vendor descriptor */ {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_SMALL, sizeof (AML_RESOURCE_SMALL_HEADER), ACPI_RSC_TABLE_SIZE (AcpiRsSetVendor)}, /* Get the length and copy the data */ {ACPI_RSC_COUNT16, ACPI_RS_OFFSET (Data.Vendor.ByteLength), 0, 0}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Vendor.ByteData[0]), sizeof (AML_RESOURCE_SMALL_HEADER), 0}, /* * All done if the Vendor byte length is 7 or less, meaning that it will * fit within a small descriptor */ {ACPI_RSC_EXIT_LE, 0, 0, 7}, /* Must create a large vendor descriptor */ {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_LARGE, sizeof (AML_RESOURCE_LARGE_HEADER), 0}, {ACPI_RSC_COUNT16, ACPI_RS_OFFSET (Data.Vendor.ByteLength), 0, 0}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Vendor.ByteData[0]), sizeof (AML_RESOURCE_LARGE_HEADER), 0} }; src/acpica/source/components/resources/rsmisc.c000066400000000000000000000762571465205512700222600ustar00rootroot00000000000000/******************************************************************************* * * Module Name: rsmisc - Miscellaneous resource descriptors * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acresrc.h" #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rsmisc") #define INIT_RESOURCE_TYPE(i) i->ResourceOffset #define INIT_RESOURCE_LENGTH(i) i->AmlOffset #define INIT_TABLE_LENGTH(i) i->Value #define COMPARE_OPCODE(i) i->ResourceOffset #define COMPARE_TARGET(i) i->AmlOffset #define COMPARE_VALUE(i) i->Value /******************************************************************************* * * FUNCTION: AcpiRsConvertAmlToResource * * PARAMETERS: Resource - Pointer to the resource descriptor * Aml - Where the AML descriptor is returned * Info - Pointer to appropriate conversion table * * RETURN: Status * * DESCRIPTION: Convert an external AML resource descriptor to the corresponding * internal resource descriptor * ******************************************************************************/ ACPI_STATUS AcpiRsConvertAmlToResource ( ACPI_RESOURCE *Resource, AML_RESOURCE *Aml, ACPI_RSCONVERT_INFO *Info) { ACPI_RS_LENGTH AmlResourceLength; void *Source; void *Destination; char *Target; UINT8 Count; UINT8 FlagsMode = FALSE; UINT16 ItemCount = 0; UINT16 Temp16 = 0; ACPI_FUNCTION_TRACE (RsConvertAmlToResource); if (!Info) { return_ACPI_STATUS (AE_BAD_PARAMETER); } if (((ACPI_SIZE) Resource) & 0x3) { /* Each internal resource struct is expected to be 32-bit aligned */ ACPI_WARNING ((AE_INFO, "Misaligned resource pointer (get): %p Type 0x%2.2X Length %u", Resource, Resource->Type, Resource->Length)); } /* Extract the resource Length field (does not include header length) */ AmlResourceLength = AcpiUtGetResourceLength (Aml); /* * First table entry must be ACPI_RSC_INITxxx and must contain the * table length (# of table entries) */ Count = INIT_TABLE_LENGTH (Info); while (Count) { Target = NULL; /* * Source is the external AML byte stream buffer, * destination is the internal resource descriptor */ Source = ACPI_ADD_PTR (void, Aml, Info->AmlOffset); Destination = ACPI_ADD_PTR (void, Resource, Info->ResourceOffset); switch (Info->Opcode) { case ACPI_RSC_INITGET: /* * Get the resource type and the initial (minimum) length */ memset (Resource, 0, INIT_RESOURCE_LENGTH (Info)); Resource->Type = INIT_RESOURCE_TYPE (Info); Resource->Length = INIT_RESOURCE_LENGTH (Info); break; case ACPI_RSC_INITSET: break; case ACPI_RSC_FLAGINIT: FlagsMode = TRUE; break; case ACPI_RSC_1BITFLAG: /* * Mask and shift the flag bit */ ACPI_SET8 (Destination, ((ACPI_GET8 (Source) >> Info->Value) & 0x01)); break; case ACPI_RSC_2BITFLAG: /* * Mask and shift the flag bits */ ACPI_SET8 (Destination, ((ACPI_GET8 (Source) >> Info->Value) & 0x03)); break; case ACPI_RSC_3BITFLAG: /* * Mask and shift the flag bits */ ACPI_SET8 (Destination, ((ACPI_GET8 (Source) >> Info->Value) & 0x07)); break; case ACPI_RSC_6BITFLAG: /* * Mask and shift the flag bits */ ACPI_SET8 (Destination, ((ACPI_GET8 (Source) >> Info->Value) & 0x3F)); break; case ACPI_RSC_COUNT: ItemCount = ACPI_GET8 (Source); ACPI_SET8 (Destination, ItemCount); Resource->Length = Resource->Length + (Info->Value * (ItemCount - 1)); break; case ACPI_RSC_COUNT16: ItemCount = AmlResourceLength; ACPI_SET16 (Destination, ItemCount); Resource->Length = Resource->Length + (Info->Value * (ItemCount - 1)); break; case ACPI_RSC_COUNT_GPIO_PIN: Target = ACPI_ADD_PTR (void, Aml, Info->Value); ItemCount = ACPI_GET16 (Target) - ACPI_GET16 (Source); Resource->Length = Resource->Length + ItemCount; ItemCount = ItemCount / 2; ACPI_SET16 (Destination, ItemCount); break; case ACPI_RSC_COUNT_GPIO_VEN: ItemCount = ACPI_GET8 (Source); ACPI_SET8 (Destination, ItemCount); Resource->Length = Resource->Length + (Info->Value * ItemCount); break; case ACPI_RSC_COUNT_GPIO_RES: /* * Vendor data is optional (length/offset may both be zero) * Examine vendor data length field first */ Target = ACPI_ADD_PTR (void, Aml, (Info->Value + 2)); if (ACPI_GET16 (Target)) { /* Use vendor offset to get resource source length */ Target = ACPI_ADD_PTR (void, Aml, Info->Value); ItemCount = ACPI_GET16 (Target) - ACPI_GET16 (Source); } else { /* No vendor data to worry about */ ItemCount = Aml->LargeHeader.ResourceLength + sizeof (AML_RESOURCE_LARGE_HEADER) - ACPI_GET16 (Source); } Resource->Length = Resource->Length + ItemCount; ACPI_SET16 (Destination, ItemCount); break; case ACPI_RSC_COUNT_SERIAL_VEN: ACPI_MOVE_16_TO_16(&Temp16, Source); ItemCount = Temp16 - Info->Value; Resource->Length = Resource->Length + ItemCount; ACPI_SET16 (Destination, ItemCount); break; case ACPI_RSC_COUNT_SERIAL_RES: ACPI_MOVE_16_TO_16(&Temp16, Source); ItemCount = (AmlResourceLength + sizeof (AML_RESOURCE_LARGE_HEADER)) - Temp16 - Info->Value; Resource->Length = Resource->Length + ItemCount; ACPI_SET16 (Destination, ItemCount); break; case ACPI_RSC_LENGTH: Resource->Length = Resource->Length + Info->Value; break; case ACPI_RSC_MOVE8: case ACPI_RSC_MOVE16: case ACPI_RSC_MOVE32: case ACPI_RSC_MOVE64: /* * Raw data move. Use the Info value field unless ItemCount has * been previously initialized via a COUNT opcode */ if (Info->Value) { ItemCount = Info->Value; } AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode); break; case ACPI_RSC_MOVE_GPIO_PIN: /* Generate and set the PIN data pointer */ Target = (char *) ACPI_ADD_PTR (void, Resource, (Resource->Length - ItemCount * 2)); *(UINT16 **) Destination = ACPI_CAST_PTR (UINT16, Target); /* Copy the PIN data */ Source = ACPI_ADD_PTR (void, Aml, ACPI_GET16 (Source)); AcpiRsMoveData (Target, Source, ItemCount, Info->Opcode); break; case ACPI_RSC_MOVE_GPIO_RES: /* Generate and set the ResourceSource string pointer */ Target = (char *) ACPI_ADD_PTR (void, Resource, (Resource->Length - ItemCount)); *(UINT8 **) Destination = ACPI_CAST_PTR (UINT8, Target); /* Copy the ResourceSource string */ Source = ACPI_ADD_PTR (void, Aml, ACPI_GET16 (Source)); AcpiRsMoveData (Target, Source, ItemCount, Info->Opcode); break; case ACPI_RSC_MOVE_SERIAL_VEN: /* Generate and set the Vendor Data pointer */ Target = (char *) ACPI_ADD_PTR (void, Resource, (Resource->Length - ItemCount)); *(UINT8 **) Destination = ACPI_CAST_PTR (UINT8, Target); /* Copy the Vendor Data */ Source = ACPI_ADD_PTR (void, Aml, Info->Value); AcpiRsMoveData (Target, Source, ItemCount, Info->Opcode); break; case ACPI_RSC_MOVE_SERIAL_RES: /* Generate and set the ResourceSource string pointer */ Target = (char *) ACPI_ADD_PTR (void, Resource, (Resource->Length - ItemCount)); *(UINT8 **) Destination = ACPI_CAST_PTR (UINT8, Target); /* Copy the ResourceSource string */ ACPI_MOVE_16_TO_16 (&Temp16, Source); Source = ACPI_ADD_PTR ( void, Aml, (Temp16 + Info->Value)); AcpiRsMoveData (Target, Source, ItemCount, Info->Opcode); break; case ACPI_RSC_SET8: memset (Destination, Info->AmlOffset, Info->Value); break; case ACPI_RSC_DATA8: Target = ACPI_ADD_PTR (char, Resource, Info->Value); memcpy (Destination, Source, ACPI_GET16 (Target)); break; case ACPI_RSC_ADDRESS: /* * Common handler for address descriptor flags */ if (!AcpiRsGetAddressCommon (Resource, Aml)) { return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE); } break; case ACPI_RSC_SOURCE: /* * Optional ResourceSource (Index and String) */ Resource->Length += AcpiRsGetResourceSource (AmlResourceLength, Info->Value, Destination, Aml, NULL); break; case ACPI_RSC_SOURCEX: /* * Optional ResourceSource (Index and String). This is the more * complicated case used by the Interrupt() macro */ Target = ACPI_ADD_PTR (char, Resource, Info->AmlOffset + (ItemCount * 4)); Resource->Length += AcpiRsGetResourceSource (AmlResourceLength, (ACPI_RS_LENGTH) (((ItemCount - 1) * sizeof (UINT32)) + Info->Value), Destination, Aml, Target); break; case ACPI_RSC_BITMASK: /* * 8-bit encoded bitmask (DMA macro) */ ItemCount = AcpiRsDecodeBitmask (ACPI_GET8 (Source), Destination); if (ItemCount) { Resource->Length += (ItemCount - 1); } Target = ACPI_ADD_PTR (char, Resource, Info->Value); ACPI_SET8 (Target, ItemCount); break; case ACPI_RSC_BITMASK16: /* * 16-bit encoded bitmask (IRQ macro) */ ACPI_MOVE_16_TO_16 (&Temp16, Source); ItemCount = AcpiRsDecodeBitmask (Temp16, Destination); if (ItemCount) { Resource->Length += (ItemCount - 1); } Target = ACPI_ADD_PTR (char, Resource, Info->Value); ACPI_SET8 (Target, ItemCount); break; case ACPI_RSC_EXIT_NE: /* * Control - Exit conversion if not equal */ switch (Info->ResourceOffset) { case ACPI_RSC_COMPARE_AML_LENGTH: if (AmlResourceLength != Info->Value) { goto Exit; } break; case ACPI_RSC_COMPARE_VALUE: if (ACPI_GET8 (Source) != Info->Value) { goto Exit; } break; default: ACPI_ERROR ((AE_INFO, "Invalid conversion sub-opcode")); return_ACPI_STATUS (AE_BAD_PARAMETER); } break; default: ACPI_ERROR ((AE_INFO, "Invalid conversion opcode")); return_ACPI_STATUS (AE_BAD_PARAMETER); } Count--; Info++; } Exit: if (!FlagsMode) { /* Round the resource struct length up to the next boundary (32 or 64) */ Resource->Length = (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (Resource->Length); } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiRsConvertResourceToAml * * PARAMETERS: Resource - Pointer to the resource descriptor * Aml - Where the AML descriptor is returned * Info - Pointer to appropriate conversion table * * RETURN: Status * * DESCRIPTION: Convert an internal resource descriptor to the corresponding * external AML resource descriptor. * ******************************************************************************/ ACPI_STATUS AcpiRsConvertResourceToAml ( ACPI_RESOURCE *Resource, AML_RESOURCE *Aml, ACPI_RSCONVERT_INFO *Info) { void *Source = NULL; void *Destination; char *Target; ACPI_RSDESC_SIZE AmlLength = 0; UINT8 Count; UINT16 Temp16 = 0; UINT16 ItemCount = 0; ACPI_FUNCTION_TRACE (RsConvertResourceToAml); if (!Info) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* * First table entry must be ACPI_RSC_INITxxx and must contain the * table length (# of table entries) */ Count = INIT_TABLE_LENGTH (Info); while (Count) { /* * Source is the internal resource descriptor, * destination is the external AML byte stream buffer */ Source = ACPI_ADD_PTR (void, Resource, Info->ResourceOffset); Destination = ACPI_ADD_PTR (void, Aml, Info->AmlOffset); switch (Info->Opcode) { case ACPI_RSC_INITSET: memset (Aml, 0, INIT_RESOURCE_LENGTH (Info)); AmlLength = INIT_RESOURCE_LENGTH (Info); AcpiRsSetResourceHeader ( INIT_RESOURCE_TYPE (Info), AmlLength, Aml); break; case ACPI_RSC_INITGET: break; case ACPI_RSC_FLAGINIT: /* * Clear the flag byte */ ACPI_SET8 (Destination, 0); break; case ACPI_RSC_1BITFLAG: /* * Mask and shift the flag bit */ ACPI_SET_BIT (*ACPI_CAST8 (Destination), (UINT8) ((ACPI_GET8 (Source) & 0x01) << Info->Value)); break; case ACPI_RSC_2BITFLAG: /* * Mask and shift the flag bits */ ACPI_SET_BIT (*ACPI_CAST8 (Destination), (UINT8) ((ACPI_GET8 (Source) & 0x03) << Info->Value)); break; case ACPI_RSC_3BITFLAG: /* * Mask and shift the flag bits */ ACPI_SET_BIT (*ACPI_CAST8 (Destination), (UINT8) ((ACPI_GET8 (Source) & 0x07) << Info->Value)); break; case ACPI_RSC_6BITFLAG: /* * Mask and shift the flag bits */ ACPI_SET_BIT (*ACPI_CAST8 (Destination), (UINT8) ((ACPI_GET8 (Source) & 0x3F) << Info->Value)); break; case ACPI_RSC_COUNT: ItemCount = ACPI_GET8 (Source); ACPI_SET8 (Destination, ItemCount); AmlLength = (UINT16) (AmlLength + (Info->Value * (ItemCount - 1))); break; case ACPI_RSC_COUNT16: ItemCount = ACPI_GET16 (Source); AmlLength = (UINT16) (AmlLength + ItemCount); AcpiRsSetResourceLength (AmlLength, Aml); break; case ACPI_RSC_COUNT_GPIO_PIN: ItemCount = ACPI_GET16 (Source); ACPI_SET16 (Destination, AmlLength); AmlLength = (UINT16) (AmlLength + ItemCount * 2); Target = ACPI_ADD_PTR (void, Aml, Info->Value); ACPI_SET16 (Target, AmlLength); AcpiRsSetResourceLength (AmlLength, Aml); break; case ACPI_RSC_COUNT_GPIO_VEN: ItemCount = ACPI_GET16 (Source); ACPI_SET16 (Destination, ItemCount); AmlLength = (UINT16) ( AmlLength + (Info->Value * ItemCount)); AcpiRsSetResourceLength (AmlLength, Aml); break; case ACPI_RSC_COUNT_GPIO_RES: /* Set resource source string length */ ItemCount = ACPI_GET16 (Source); ACPI_SET16 (Destination, AmlLength); /* Compute offset for the Vendor Data */ AmlLength = (UINT16) (AmlLength + ItemCount); Target = ACPI_ADD_PTR (void, Aml, Info->Value); /* Set vendor offset only if there is vendor data */ ACPI_SET16 (Target, AmlLength); AcpiRsSetResourceLength (AmlLength, Aml); break; case ACPI_RSC_COUNT_SERIAL_VEN: ItemCount = ACPI_GET16 (Source); ACPI_SET16 (Destination, ItemCount + Info->Value); AmlLength = (UINT16) (AmlLength + ItemCount); AcpiRsSetResourceLength (AmlLength, Aml); break; case ACPI_RSC_COUNT_SERIAL_RES: ItemCount = ACPI_GET16 (Source); AmlLength = (UINT16) (AmlLength + ItemCount); AcpiRsSetResourceLength (AmlLength, Aml); break; case ACPI_RSC_LENGTH: AcpiRsSetResourceLength (Info->Value, Aml); break; case ACPI_RSC_MOVE8: case ACPI_RSC_MOVE16: case ACPI_RSC_MOVE32: case ACPI_RSC_MOVE64: if (Info->Value) { ItemCount = Info->Value; } AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode); break; case ACPI_RSC_MOVE_GPIO_PIN: Destination = (char *) ACPI_ADD_PTR (void, Aml, ACPI_GET16 (Destination)); Source = * (UINT16 **) Source; AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode); break; case ACPI_RSC_MOVE_GPIO_RES: /* Used for both ResourceSource string and VendorData */ Destination = (char *) ACPI_ADD_PTR (void, Aml, ACPI_GET16 (Destination)); Source = * (UINT8 **) Source; AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode); break; case ACPI_RSC_MOVE_SERIAL_VEN: Destination = (char *) ACPI_ADD_PTR (void, Aml, (AmlLength - ItemCount)); Source = * (UINT8 **) Source; AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode); break; case ACPI_RSC_MOVE_SERIAL_RES: Destination = (char *) ACPI_ADD_PTR (void, Aml, (AmlLength - ItemCount)); Source = * (UINT8 **) Source; AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode); break; case ACPI_RSC_ADDRESS: /* Set the Resource Type, General Flags, and Type-Specific Flags */ AcpiRsSetAddressCommon (Aml, Resource); break; case ACPI_RSC_SOURCEX: /* * Optional ResourceSource (Index and String) */ AmlLength = AcpiRsSetResourceSource ( Aml, (ACPI_RS_LENGTH) AmlLength, Source); AcpiRsSetResourceLength (AmlLength, Aml); break; case ACPI_RSC_SOURCE: /* * Optional ResourceSource (Index and String). This is the more * complicated case used by the Interrupt() macro */ AmlLength = AcpiRsSetResourceSource (Aml, Info->Value, Source); AcpiRsSetResourceLength (AmlLength, Aml); break; case ACPI_RSC_BITMASK: /* * 8-bit encoded bitmask (DMA macro) */ ACPI_SET8 (Destination, AcpiRsEncodeBitmask (Source, *ACPI_ADD_PTR (UINT8, Resource, Info->Value))); break; case ACPI_RSC_BITMASK16: /* * 16-bit encoded bitmask (IRQ macro) */ Temp16 = AcpiRsEncodeBitmask ( Source, *ACPI_ADD_PTR (UINT8, Resource, Info->Value)); ACPI_MOVE_16_TO_16 (Destination, &Temp16); break; case ACPI_RSC_EXIT_LE: /* * Control - Exit conversion if less than or equal */ if (ItemCount <= Info->Value) { goto Exit; } break; case ACPI_RSC_EXIT_NE: /* * Control - Exit conversion if not equal */ switch (COMPARE_OPCODE (Info)) { case ACPI_RSC_COMPARE_VALUE: if (*ACPI_ADD_PTR (UINT8, Resource, COMPARE_TARGET (Info)) != COMPARE_VALUE (Info)) { goto Exit; } break; default: ACPI_ERROR ((AE_INFO, "Invalid conversion sub-opcode")); return_ACPI_STATUS (AE_BAD_PARAMETER); } break; case ACPI_RSC_EXIT_EQ: /* * Control - Exit conversion if equal */ if (*ACPI_ADD_PTR (UINT8, Resource, COMPARE_TARGET (Info)) == COMPARE_VALUE (Info)) { goto Exit; } break; default: ACPI_ERROR ((AE_INFO, "Invalid conversion opcode")); return_ACPI_STATUS (AE_BAD_PARAMETER); } Count--; Info++; } Exit: return_ACPI_STATUS (AE_OK); } #if 0 /* Previous resource validations */ if (Aml->ExtAddress64.RevisionID != AML_RESOURCE_EXTENDED_ADDRESS_REVISION) { return_ACPI_STATUS (AE_SUPPORT); } if (Resource->Data.StartDpf.PerformanceRobustness >= 3) { return_ACPI_STATUS (AE_AML_BAD_RESOURCE_VALUE); } if (((Aml->Irq.Flags & 0x09) == 0x00) || ((Aml->Irq.Flags & 0x09) == 0x09)) { /* * Only [ActiveHigh, EdgeSensitive] or [ActiveLow, LevelSensitive] * polarity/trigger interrupts are allowed (ACPI spec, section * "IRQ Format"), so 0x00 and 0x09 are illegal. */ ACPI_ERROR ((AE_INFO, "Invalid interrupt polarity/trigger in resource list, 0x%X", Aml->Irq.Flags)); return_ACPI_STATUS (AE_BAD_DATA); } Resource->Data.ExtendedIrq.InterruptCount = Temp8; if (Temp8 < 1) { /* Must have at least one IRQ */ return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH); } if (Resource->Data.Dma.Transfer == 0x03) { ACPI_ERROR ((AE_INFO, "Invalid DMA.Transfer preference (3)")); return_ACPI_STATUS (AE_BAD_DATA); } #endif src/acpica/source/components/resources/rsserial.c000066400000000000000000001215261465205512700225720ustar00rootroot00000000000000/******************************************************************************* * * Module Name: rsserial - GPIO/SerialBus resource descriptors * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acresrc.h" #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rsserial") /******************************************************************************* * * AcpiRsConvertGpio * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertGpio[18] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_GPIO, ACPI_RS_SIZE (ACPI_RESOURCE_GPIO), ACPI_RSC_TABLE_SIZE (AcpiRsConvertGpio)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_GPIO, sizeof (AML_RESOURCE_GPIO), 0}, /* * These fields are contiguous in both the source and destination: * RevisionId * ConnectionType */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Gpio.RevisionId), AML_OFFSET (Gpio.RevisionId), 2}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.ProducerConsumer), AML_OFFSET (Gpio.Flags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Shareable), AML_OFFSET (Gpio.IntFlags), 3}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.WakeCapable), AML_OFFSET (Gpio.IntFlags), 4}, {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Gpio.IoRestriction), AML_OFFSET (Gpio.IntFlags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Triggering), AML_OFFSET (Gpio.IntFlags), 0}, {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Polarity), AML_OFFSET (Gpio.IntFlags), 1}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Gpio.PinConfig), AML_OFFSET (Gpio.PinConfig), 1}, /* * These fields are contiguous in both the source and destination: * DriveStrength * DebounceTimeout */ {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.Gpio.DriveStrength), AML_OFFSET (Gpio.DriveStrength), 2}, /* Pin Table */ {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.Gpio.PinTableLength), AML_OFFSET (Gpio.PinTableOffset), AML_OFFSET (Gpio.ResSourceOffset)}, {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.Gpio.PinTable), AML_OFFSET (Gpio.PinTableOffset), 0}, /* Resource Source */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Gpio.ResourceSource.Index), AML_OFFSET (Gpio.ResSourceIndex), 1}, {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.Gpio.ResourceSource.StringLength), AML_OFFSET (Gpio.ResSourceOffset), AML_OFFSET (Gpio.VendorOffset)}, {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.Gpio.ResourceSource.StringPtr), AML_OFFSET (Gpio.ResSourceOffset), 0}, /* Vendor Data */ {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.Gpio.VendorLength), AML_OFFSET (Gpio.VendorLength), 1}, {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.Gpio.VendorData), AML_OFFSET (Gpio.VendorOffset), 0}, }; /******************************************************************************* * * AcpiRsConvertClockInput * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertClockInput[8] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_CLOCK_INPUT, ACPI_RS_SIZE (ACPI_RESOURCE_CLOCK_INPUT), ACPI_RSC_TABLE_SIZE (AcpiRsConvertClockInput)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_CLOCK_INPUT, sizeof (AML_RESOURCE_CLOCK_INPUT), 0}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.ClockInput.RevisionId), AML_OFFSET (ClockInput.RevisionId), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ClockInput.Mode), AML_OFFSET (ClockInput.Flags), 0}, {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.ClockInput.Scale), AML_OFFSET (ClockInput.Flags), 1}, {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.ClockInput.FrequencyDivisor), AML_OFFSET (ClockInput.FrequencyDivisor), 2}, {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.ClockInput.FrequencyNumerator), AML_OFFSET (ClockInput.FrequencyNumerator), 4}, /* Resource Source */ {ACPI_RSC_SOURCE, ACPI_RS_OFFSET (Data.ClockInput.ResourceSource), 0, sizeof(AML_RESOURCE_CLOCK_INPUT)}, }; /******************************************************************************* * * AcpiRsConvertPinfunction * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertPinFunction[13] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_FUNCTION, ACPI_RS_SIZE (ACPI_RESOURCE_PIN_FUNCTION), ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinFunction)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_FUNCTION, sizeof (AML_RESOURCE_PIN_FUNCTION), 0}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinFunction.RevisionId), AML_OFFSET (PinFunction.RevisionId), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinFunction.Shareable), AML_OFFSET (PinFunction.Flags), 0}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinFunction.PinConfig), AML_OFFSET (PinFunction.PinConfig), 1}, {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.PinFunction.FunctionNumber), AML_OFFSET (PinFunction.FunctionNumber), 2}, /* Pin Table */ /* * It is OK to use GPIO operations here because none of them refer GPIO * structures directly but instead use offsets given here. */ {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinFunction.PinTableLength), AML_OFFSET (PinFunction.PinTableOffset), AML_OFFSET (PinFunction.ResSourceOffset)}, {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinFunction.PinTable), AML_OFFSET (PinFunction.PinTableOffset), 0}, /* Resource Source */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.Index), AML_OFFSET (PinFunction.ResSourceIndex), 1}, {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.StringLength), AML_OFFSET (PinFunction.ResSourceOffset), AML_OFFSET (PinFunction.VendorOffset)}, {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.StringPtr), AML_OFFSET (PinFunction.ResSourceOffset), 0}, /* Vendor Data */ {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinFunction.VendorLength), AML_OFFSET (PinFunction.VendorLength), 1}, {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinFunction.VendorData), AML_OFFSET (PinFunction.VendorOffset), 0}, }; /******************************************************************************* * * AcpiRsConvertCsi2SerialBus * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertCsi2SerialBus[14] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, ACPI_RS_SIZE (ACPI_RESOURCE_CSI2_SERIALBUS), ACPI_RSC_TABLE_SIZE (AcpiRsConvertCsi2SerialBus)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, sizeof (AML_RESOURCE_CSI2_SERIALBUS), 0}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId), AML_OFFSET (CommonSerialBus.RevisionId), 1}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Csi2SerialBus.Type), AML_OFFSET (Csi2SerialBus.Type), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.ProducerConsumer), AML_OFFSET (Csi2SerialBus.Flags), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.SlaveMode), AML_OFFSET (Csi2SerialBus.Flags), 0}, {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.PhyType), AML_OFFSET (Csi2SerialBus.TypeSpecificFlags), 0}, {ACPI_RSC_6BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.LocalPortInstance), AML_OFFSET (Csi2SerialBus.TypeSpecificFlags), 2}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Csi2SerialBus.TypeRevisionId), AML_OFFSET (Csi2SerialBus.TypeRevisionId), 1}, /* Vendor data */ {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.Csi2SerialBus.VendorLength), AML_OFFSET (Csi2SerialBus.TypeDataLength), AML_RESOURCE_CSI2_MIN_DATA_LEN}, {ACPI_RSC_MOVE_SERIAL_VEN, ACPI_RS_OFFSET (Data.Csi2SerialBus.VendorData), 0, sizeof (AML_RESOURCE_CSI2_SERIALBUS)}, /* Resource Source */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Csi2SerialBus.ResourceSource.Index), AML_OFFSET (Csi2SerialBus.ResSourceIndex), 1}, {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.Csi2SerialBus.ResourceSource.StringLength), AML_OFFSET (Csi2SerialBus.TypeDataLength), sizeof (AML_RESOURCE_CSI2_SERIALBUS)}, {ACPI_RSC_MOVE_SERIAL_RES, ACPI_RS_OFFSET (Data.Csi2SerialBus.ResourceSource.StringPtr), AML_OFFSET (Csi2SerialBus.TypeDataLength), sizeof (AML_RESOURCE_CSI2_SERIALBUS)}, }; /******************************************************************************* * * AcpiRsConvertI2cSerialBus * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertI2cSerialBus[17] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, ACPI_RS_SIZE (ACPI_RESOURCE_I2C_SERIALBUS), ACPI_RSC_TABLE_SIZE (AcpiRsConvertI2cSerialBus)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, sizeof (AML_RESOURCE_I2C_SERIALBUS), 0}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId), AML_OFFSET (CommonSerialBus.RevisionId), 1}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.Type), AML_OFFSET (CommonSerialBus.Type), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode), AML_OFFSET (CommonSerialBus.Flags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer), AML_OFFSET (CommonSerialBus.Flags), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ConnectionSharing), AML_OFFSET (CommonSerialBus.Flags), 2}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId), AML_OFFSET (CommonSerialBus.TypeRevisionId), 1}, {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength), AML_OFFSET (CommonSerialBus.TypeDataLength), 1}, /* Vendor data */ {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength), AML_OFFSET (CommonSerialBus.TypeDataLength), AML_RESOURCE_I2C_MIN_DATA_LEN}, {ACPI_RSC_MOVE_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData), 0, sizeof (AML_RESOURCE_I2C_SERIALBUS)}, /* Resource Source */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index), AML_OFFSET (CommonSerialBus.ResSourceIndex), 1}, {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength), AML_OFFSET (CommonSerialBus.TypeDataLength), sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, {ACPI_RSC_MOVE_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr), AML_OFFSET (CommonSerialBus.TypeDataLength), sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, /* I2C bus type specific */ {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.I2cSerialBus.AccessMode), AML_OFFSET (I2cSerialBus.TypeSpecificFlags), 0}, {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.I2cSerialBus.ConnectionSpeed), AML_OFFSET (I2cSerialBus.ConnectionSpeed), 1}, {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.I2cSerialBus.SlaveAddress), AML_OFFSET (I2cSerialBus.SlaveAddress), 1}, }; /******************************************************************************* * * AcpiRsConvertSpiSerialBus * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertSpiSerialBus[21] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, ACPI_RS_SIZE (ACPI_RESOURCE_SPI_SERIALBUS), ACPI_RSC_TABLE_SIZE (AcpiRsConvertSpiSerialBus)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, sizeof (AML_RESOURCE_SPI_SERIALBUS), 0}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId), AML_OFFSET (CommonSerialBus.RevisionId), 1}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.Type), AML_OFFSET (CommonSerialBus.Type), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode), AML_OFFSET (CommonSerialBus.Flags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer), AML_OFFSET (CommonSerialBus.Flags), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ConnectionSharing), AML_OFFSET (CommonSerialBus.Flags), 2}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId), AML_OFFSET (CommonSerialBus.TypeRevisionId), 1}, {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength), AML_OFFSET (CommonSerialBus.TypeDataLength), 1}, /* Vendor data */ {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength), AML_OFFSET (CommonSerialBus.TypeDataLength), AML_RESOURCE_SPI_MIN_DATA_LEN}, {ACPI_RSC_MOVE_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData), 0, sizeof (AML_RESOURCE_SPI_SERIALBUS)}, /* Resource Source */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index), AML_OFFSET (CommonSerialBus.ResSourceIndex), 1}, {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength), AML_OFFSET (CommonSerialBus.TypeDataLength), sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, {ACPI_RSC_MOVE_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr), AML_OFFSET (CommonSerialBus.TypeDataLength), sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, /* Spi bus type specific */ {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.SpiSerialBus.WireMode), AML_OFFSET (SpiSerialBus.TypeSpecificFlags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.SpiSerialBus.DevicePolarity), AML_OFFSET (SpiSerialBus.TypeSpecificFlags), 1}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.SpiSerialBus.DataBitLength), AML_OFFSET (SpiSerialBus.DataBitLength), 1}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.SpiSerialBus.ClockPhase), AML_OFFSET (SpiSerialBus.ClockPhase), 1}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.SpiSerialBus.ClockPolarity), AML_OFFSET (SpiSerialBus.ClockPolarity), 1}, {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.SpiSerialBus.DeviceSelection), AML_OFFSET (SpiSerialBus.DeviceSelection), 1}, {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.SpiSerialBus.ConnectionSpeed), AML_OFFSET (SpiSerialBus.ConnectionSpeed), 1}, }; /******************************************************************************* * * AcpiRsConvertUartSerialBus * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertUartSerialBus[23] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, ACPI_RS_SIZE (ACPI_RESOURCE_UART_SERIALBUS), ACPI_RSC_TABLE_SIZE (AcpiRsConvertUartSerialBus)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, sizeof (AML_RESOURCE_UART_SERIALBUS), 0}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId), AML_OFFSET (CommonSerialBus.RevisionId), 1}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.Type), AML_OFFSET (CommonSerialBus.Type), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode), AML_OFFSET (CommonSerialBus.Flags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer), AML_OFFSET (CommonSerialBus.Flags), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ConnectionSharing), AML_OFFSET (CommonSerialBus.Flags), 2}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId), AML_OFFSET (CommonSerialBus.TypeRevisionId), 1}, {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength), AML_OFFSET (CommonSerialBus.TypeDataLength), 1}, /* Vendor data */ {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength), AML_OFFSET (CommonSerialBus.TypeDataLength), AML_RESOURCE_UART_MIN_DATA_LEN}, {ACPI_RSC_MOVE_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData), 0, sizeof (AML_RESOURCE_UART_SERIALBUS)}, /* Resource Source */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index), AML_OFFSET (CommonSerialBus.ResSourceIndex), 1}, {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength), AML_OFFSET (CommonSerialBus.TypeDataLength), sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, {ACPI_RSC_MOVE_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr), AML_OFFSET (CommonSerialBus.TypeDataLength), sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, /* Uart bus type specific */ {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.FlowControl), AML_OFFSET (UartSerialBus.TypeSpecificFlags), 0}, {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.StopBits), AML_OFFSET (UartSerialBus.TypeSpecificFlags), 2}, {ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.DataBits), AML_OFFSET (UartSerialBus.TypeSpecificFlags), 4}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.Endian), AML_OFFSET (UartSerialBus.TypeSpecificFlags), 7}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.UartSerialBus.Parity), AML_OFFSET (UartSerialBus.Parity), 1}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.UartSerialBus.LinesEnabled), AML_OFFSET (UartSerialBus.LinesEnabled), 1}, {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.UartSerialBus.RxFifoSize), AML_OFFSET (UartSerialBus.RxFifoSize), 1}, {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.UartSerialBus.TxFifoSize), AML_OFFSET (UartSerialBus.TxFifoSize), 1}, {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.UartSerialBus.DefaultBaudRate), AML_OFFSET (UartSerialBus.DefaultBaudRate), 1}, }; /******************************************************************************* * * AcpiRsConvertPinConfig * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertPinConfig[14] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG, ACPI_RS_SIZE (ACPI_RESOURCE_PIN_CONFIG), ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinConfig)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG, sizeof (AML_RESOURCE_PIN_CONFIG), 0}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.RevisionId), AML_OFFSET (PinConfig.RevisionId), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinConfig.Shareable), AML_OFFSET (PinConfig.Flags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinConfig.ProducerConsumer), AML_OFFSET (PinConfig.Flags), 1}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.PinConfigType), AML_OFFSET (PinConfig.PinConfigType), 1}, {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.PinConfig.PinConfigValue), AML_OFFSET (PinConfig.PinConfigValue), 1}, /* Pin Table */ /* * It is OK to use GPIO operations here because none of them refer GPIO * structures directly but instead use offsets given here. */ {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinConfig.PinTableLength), AML_OFFSET (PinConfig.PinTableOffset), AML_OFFSET (PinConfig.ResSourceOffset)}, {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinConfig.PinTable), AML_OFFSET (PinConfig.PinTableOffset), 0}, /* Resource Source */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.Index), AML_OFFSET (PinConfig.ResSourceIndex), 1}, {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.StringLength), AML_OFFSET (PinConfig.ResSourceOffset), AML_OFFSET (PinConfig.VendorOffset)}, {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.StringPtr), AML_OFFSET (PinConfig.ResSourceOffset), 0}, /* Vendor Data */ {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinConfig.VendorLength), AML_OFFSET (PinConfig.VendorLength), 1}, {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.VendorData), AML_OFFSET (PinConfig.VendorOffset), 0}, }; /******************************************************************************* * * AcpiRsConvertPinGroup * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertPinGroup[10] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP, ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP), ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroup)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP, sizeof (AML_RESOURCE_PIN_GROUP), 0}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroup.RevisionId), AML_OFFSET (PinGroup.RevisionId), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroup.ProducerConsumer), AML_OFFSET (PinGroup.Flags), 0}, /* Pin Table */ /* * It is OK to use GPIO operations here because none of them refer GPIO * structures directly but instead use offsets given here. */ {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinGroup.PinTableLength), AML_OFFSET (PinGroup.PinTableOffset), AML_OFFSET (PinGroup.LabelOffset)}, {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinGroup.PinTable), AML_OFFSET (PinGroup.PinTableOffset), 0}, /* Resource Label */ {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.ResourceLabel.StringLength), AML_OFFSET (PinGroup.LabelOffset), AML_OFFSET (PinGroup.VendorOffset)}, {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.ResourceLabel.StringPtr), AML_OFFSET (PinGroup.LabelOffset), 0}, /* Vendor Data */ {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroup.VendorLength), AML_OFFSET (PinGroup.VendorLength), 1}, {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.VendorData), AML_OFFSET (PinGroup.VendorOffset), 0}, }; /******************************************************************************* * * AcpiRsConvertPinGroupFunction * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupFunction[13] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION, ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_FUNCTION), ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroupFunction)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION, sizeof (AML_RESOURCE_PIN_GROUP_FUNCTION), 0}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupFunction.RevisionId), AML_OFFSET (PinGroupFunction.RevisionId), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupFunction.Shareable), AML_OFFSET (PinGroupFunction.Flags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupFunction.ProducerConsumer), AML_OFFSET (PinGroupFunction.Flags), 1}, {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.PinGroupFunction.FunctionNumber), AML_OFFSET (PinGroupFunction.FunctionNumber), 1}, /* Resource Source */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.Index), AML_OFFSET (PinGroupFunction.ResSourceIndex), 1}, {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.StringLength), AML_OFFSET (PinGroupFunction.ResSourceOffset), AML_OFFSET (PinGroupFunction.ResSourceLabelOffset)}, {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.StringPtr), AML_OFFSET (PinGroupFunction.ResSourceOffset), 0}, /* Resource Source Label */ {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSourceLabel.StringLength), AML_OFFSET (PinGroupFunction.ResSourceLabelOffset), AML_OFFSET (PinGroupFunction.VendorOffset)}, {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSourceLabel.StringPtr), AML_OFFSET (PinGroupFunction.ResSourceLabelOffset), 0}, /* Vendor Data */ {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroupFunction.VendorLength), AML_OFFSET (PinGroupFunction.VendorLength), 1}, {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.VendorData), AML_OFFSET (PinGroupFunction.VendorOffset), 0}, }; /******************************************************************************* * * AcpiRsConvertPinGroupConfig * ******************************************************************************/ ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupConfig[14] = { {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG, ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_CONFIG), ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroupConfig)}, {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG, sizeof (AML_RESOURCE_PIN_GROUP_CONFIG), 0}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.RevisionId), AML_OFFSET (PinGroupConfig.RevisionId), 1}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupConfig.Shareable), AML_OFFSET (PinGroupConfig.Flags), 0}, {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupConfig.ProducerConsumer), AML_OFFSET (PinGroupConfig.Flags), 1}, {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.PinConfigType), AML_OFFSET (PinGroupConfig.PinConfigType), 1}, {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.PinGroupConfig.PinConfigValue), AML_OFFSET (PinGroupConfig.PinConfigValue), 1}, /* Resource Source */ {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.Index), AML_OFFSET (PinGroupConfig.ResSourceIndex), 1}, {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.StringLength), AML_OFFSET (PinGroupConfig.ResSourceOffset), AML_OFFSET (PinGroupConfig.ResSourceLabelOffset)}, {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.StringPtr), AML_OFFSET (PinGroupConfig.ResSourceOffset), 0}, /* Resource Source Label */ {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSourceLabel.StringLength), AML_OFFSET (PinGroupConfig.ResSourceLabelOffset), AML_OFFSET (PinGroupConfig.VendorOffset)}, {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSourceLabel.StringPtr), AML_OFFSET (PinGroupConfig.ResSourceLabelOffset), 0}, /* Vendor Data */ {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroupConfig.VendorLength), AML_OFFSET (PinGroupConfig.VendorLength), 1}, {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.VendorData), AML_OFFSET (PinGroupConfig.VendorOffset), 0}, }; src/acpica/source/components/resources/rsutils.c000066400000000000000000000762121465205512700224540ustar00rootroot00000000000000/******************************************************************************* * * Module Name: rsutils - Utilities for the resource manager * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acresrc.h" #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rsutils") /******************************************************************************* * * FUNCTION: AcpiRsDecodeBitmask * * PARAMETERS: Mask - Bitmask to decode * List - Where the converted list is returned * * RETURN: Count of bits set (length of list) * * DESCRIPTION: Convert a bit mask into a list of values * ******************************************************************************/ UINT8 AcpiRsDecodeBitmask ( UINT16 Mask, UINT8 *List) { UINT8 i; UINT8 BitCount; ACPI_FUNCTION_ENTRY (); /* Decode the mask bits */ for (i = 0, BitCount = 0; Mask; i++) { if (Mask & 0x0001) { List[BitCount] = i; BitCount++; } Mask >>= 1; } return (BitCount); } /******************************************************************************* * * FUNCTION: AcpiRsEncodeBitmask * * PARAMETERS: List - List of values to encode * Count - Length of list * * RETURN: Encoded bitmask * * DESCRIPTION: Convert a list of values to an encoded bitmask * ******************************************************************************/ UINT16 AcpiRsEncodeBitmask ( UINT8 *List, UINT8 Count) { UINT32 i; UINT16 Mask; ACPI_FUNCTION_ENTRY (); /* Encode the list into a single bitmask */ for (i = 0, Mask = 0; i < Count; i++) { Mask |= (0x1 << List[i]); } return (Mask); } /******************************************************************************* * * FUNCTION: AcpiRsMoveData * * PARAMETERS: Destination - Pointer to the destination descriptor * Source - Pointer to the source descriptor * ItemCount - How many items to move * MoveType - Byte width * * RETURN: None * * DESCRIPTION: Move multiple data items from one descriptor to another. Handles * alignment issues and endian issues if necessary, as configured * via the ACPI_MOVE_* macros. (This is why a memcpy is not used) * ******************************************************************************/ void AcpiRsMoveData ( void *Destination, void *Source, UINT16 ItemCount, UINT8 MoveType) { UINT32 i; ACPI_FUNCTION_ENTRY (); /* One move per item */ for (i = 0; i < ItemCount; i++) { switch (MoveType) { /* * For the 8-bit case, we can perform the move all at once * since there are no alignment or endian issues */ case ACPI_RSC_MOVE8: case ACPI_RSC_MOVE_GPIO_RES: case ACPI_RSC_MOVE_SERIAL_VEN: case ACPI_RSC_MOVE_SERIAL_RES: memcpy (Destination, Source, ItemCount); return; /* * 16-, 32-, and 64-bit cases must use the move macros that perform * endian conversion and/or accommodate hardware that cannot perform * misaligned memory transfers */ case ACPI_RSC_MOVE16: case ACPI_RSC_MOVE_GPIO_PIN: ACPI_MOVE_16_TO_16 ( &ACPI_CAST_PTR (UINT16, Destination)[i], &ACPI_CAST_PTR (UINT16, Source)[i]); break; case ACPI_RSC_MOVE32: ACPI_MOVE_32_TO_32 ( &ACPI_CAST_PTR (UINT32, Destination)[i], &ACPI_CAST_PTR (UINT32, Source)[i]); break; case ACPI_RSC_MOVE64: ACPI_MOVE_64_TO_64 ( &ACPI_CAST_PTR (UINT64, Destination)[i], &ACPI_CAST_PTR (UINT64, Source)[i]); break; default: return; } } } /******************************************************************************* * * FUNCTION: AcpiRsSetResourceLength * * PARAMETERS: TotalLength - Length of the AML descriptor, including * the header and length fields. * Aml - Pointer to the raw AML descriptor * * RETURN: None * * DESCRIPTION: Set the ResourceLength field of an AML * resource descriptor, both Large and Small descriptors are * supported automatically. Note: Descriptor Type field must * be valid. * ******************************************************************************/ void AcpiRsSetResourceLength ( ACPI_RSDESC_SIZE TotalLength, AML_RESOURCE *Aml) { ACPI_RS_LENGTH ResourceLength; ACPI_FUNCTION_ENTRY (); /* Length is the total descriptor length minus the header length */ ResourceLength = (ACPI_RS_LENGTH) (TotalLength - AcpiUtGetResourceHeaderLength (Aml)); /* Length is stored differently for large and small descriptors */ if (Aml->SmallHeader.DescriptorType & ACPI_RESOURCE_NAME_LARGE) { /* Large descriptor -- bytes 1-2 contain the 16-bit length */ ACPI_MOVE_16_TO_16 ( &Aml->LargeHeader.ResourceLength, &ResourceLength); } else { /* * Small descriptor -- bits 2:0 of byte 0 contain the length * Clear any existing length, preserving descriptor type bits */ Aml->SmallHeader.DescriptorType = (UINT8) ((Aml->SmallHeader.DescriptorType & ~ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK) | ResourceLength); } } /******************************************************************************* * * FUNCTION: AcpiRsSetResourceHeader * * PARAMETERS: DescriptorType - Byte to be inserted as the type * TotalLength - Length of the AML descriptor, including * the header and length fields. * Aml - Pointer to the raw AML descriptor * * RETURN: None * * DESCRIPTION: Set the DescriptorType and ResourceLength fields of an AML * resource descriptor, both Large and Small descriptors are * supported automatically * ******************************************************************************/ void AcpiRsSetResourceHeader ( UINT8 DescriptorType, ACPI_RSDESC_SIZE TotalLength, AML_RESOURCE *Aml) { ACPI_FUNCTION_ENTRY (); /* Set the Resource Type */ Aml->SmallHeader.DescriptorType = DescriptorType; /* Set the Resource Length */ AcpiRsSetResourceLength (TotalLength, Aml); } /******************************************************************************* * * FUNCTION: AcpiRsStrcpy * * PARAMETERS: Destination - Pointer to the destination string * Source - Pointer to the source string * * RETURN: String length, including NULL terminator * * DESCRIPTION: Local string copy that returns the string length, saving a * strcpy followed by a strlen. * ******************************************************************************/ static UINT16 AcpiRsStrcpy ( char *Destination, char *Source) { UINT16 i; ACPI_FUNCTION_ENTRY (); for (i = 0; Source[i]; i++) { Destination[i] = Source[i]; } Destination[i] = 0; /* Return string length including the NULL terminator */ return ((UINT16) (i + 1)); } /******************************************************************************* * * FUNCTION: AcpiRsGetResourceSource * * PARAMETERS: ResourceLength - Length field of the descriptor * MinimumLength - Minimum length of the descriptor (minus * any optional fields) * ResourceSource - Where the ResourceSource is returned * Aml - Pointer to the raw AML descriptor * StringPtr - (optional) where to store the actual * ResourceSource string * * RETURN: Length of the string plus NULL terminator, rounded up to native * word boundary * * DESCRIPTION: Copy the optional ResourceSource data from a raw AML descriptor * to an internal resource descriptor * ******************************************************************************/ ACPI_RS_LENGTH AcpiRsGetResourceSource ( ACPI_RS_LENGTH ResourceLength, ACPI_RS_LENGTH MinimumLength, ACPI_RESOURCE_SOURCE *ResourceSource, AML_RESOURCE *Aml, char *StringPtr) { ACPI_RSDESC_SIZE TotalLength; UINT8 *AmlResourceSource; ACPI_FUNCTION_ENTRY (); TotalLength = ResourceLength + sizeof (AML_RESOURCE_LARGE_HEADER); AmlResourceSource = ACPI_ADD_PTR (UINT8, Aml, MinimumLength); /* * ResourceSource is present if the length of the descriptor is longer * than the minimum length. * * Note: Some resource descriptors will have an additional null, so * we add 1 to the minimum length. */ if (TotalLength > (ACPI_RSDESC_SIZE) (MinimumLength + 1)) { /* Get the ResourceSourceIndex */ ResourceSource->Index = AmlResourceSource[0]; ResourceSource->StringPtr = StringPtr; if (!StringPtr) { /* * String destination pointer is not specified; Set the String * pointer to the end of the current ResourceSource structure. */ ResourceSource->StringPtr = ACPI_ADD_PTR ( char, ResourceSource, sizeof (ACPI_RESOURCE_SOURCE)); } /* * In order for the Resource length to be a multiple of the native * word, calculate the length of the string (+1 for NULL terminator) * and expand to the next word multiple. * * Zero the entire area of the buffer. */ TotalLength = (UINT32) strlen ( ACPI_CAST_PTR (char, &AmlResourceSource[1])) + 1; TotalLength = (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (TotalLength); memset (ResourceSource->StringPtr, 0, TotalLength); /* Copy the ResourceSource string to the destination */ ResourceSource->StringLength = AcpiRsStrcpy ( ResourceSource->StringPtr, ACPI_CAST_PTR (char, &AmlResourceSource[1])); return ((ACPI_RS_LENGTH) TotalLength); } /* ResourceSource is not present */ ResourceSource->Index = 0; ResourceSource->StringLength = 0; ResourceSource->StringPtr = NULL; return (0); } /******************************************************************************* * * FUNCTION: AcpiRsSetResourceSource * * PARAMETERS: Aml - Pointer to the raw AML descriptor * MinimumLength - Minimum length of the descriptor (minus * any optional fields) * ResourceSource - Internal ResourceSource * * RETURN: Total length of the AML descriptor * * DESCRIPTION: Convert an optional ResourceSource from internal format to a * raw AML resource descriptor * ******************************************************************************/ ACPI_RSDESC_SIZE AcpiRsSetResourceSource ( AML_RESOURCE *Aml, ACPI_RS_LENGTH MinimumLength, ACPI_RESOURCE_SOURCE *ResourceSource) { UINT8 *AmlResourceSource; ACPI_RSDESC_SIZE DescriptorLength; ACPI_FUNCTION_ENTRY (); DescriptorLength = MinimumLength; /* Non-zero string length indicates presence of a ResourceSource */ if (ResourceSource->StringLength) { /* Point to the end of the AML descriptor */ AmlResourceSource = ACPI_ADD_PTR (UINT8, Aml, MinimumLength); /* Copy the ResourceSourceIndex */ AmlResourceSource[0] = (UINT8) ResourceSource->Index; /* Copy the ResourceSource string */ strcpy (ACPI_CAST_PTR (char, &AmlResourceSource[1]), ResourceSource->StringPtr); /* * Add the length of the string (+ 1 for null terminator) to the * final descriptor length */ DescriptorLength += ((ACPI_RSDESC_SIZE) ResourceSource->StringLength + 1); } /* Return the new total length of the AML descriptor */ return (DescriptorLength); } /******************************************************************************* * * FUNCTION: AcpiRsGetPrtMethodData * * PARAMETERS: Node - Device node * RetBuffer - Pointer to a buffer structure for the * results * * RETURN: Status * * DESCRIPTION: This function is called to get the _PRT value of an object * contained in an object specified by the handle passed in * * If the function fails an appropriate status will be returned * and the contents of the callers buffer is undefined. * ******************************************************************************/ ACPI_STATUS AcpiRsGetPrtMethodData ( ACPI_NAMESPACE_NODE *Node, ACPI_BUFFER *RetBuffer) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (RsGetPrtMethodData); /* Parameters guaranteed valid by caller */ /* Execute the method, no parameters */ Status = AcpiUtEvaluateObject ( Node, METHOD_NAME__PRT, ACPI_BTYPE_PACKAGE, &ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Create a resource linked list from the byte stream buffer that comes * back from the _CRS method execution. */ Status = AcpiRsCreatePciRoutingTable (ObjDesc, RetBuffer); /* On exit, we must delete the object returned by EvaluateObject */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiRsGetCrsMethodData * * PARAMETERS: Node - Device node * RetBuffer - Pointer to a buffer structure for the * results * * RETURN: Status * * DESCRIPTION: This function is called to get the _CRS value of an object * contained in an object specified by the handle passed in * * If the function fails an appropriate status will be returned * and the contents of the callers buffer is undefined. * ******************************************************************************/ ACPI_STATUS AcpiRsGetCrsMethodData ( ACPI_NAMESPACE_NODE *Node, ACPI_BUFFER *RetBuffer) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (RsGetCrsMethodData); /* Parameters guaranteed valid by caller */ /* Execute the method, no parameters */ Status = AcpiUtEvaluateObject ( Node, METHOD_NAME__CRS, ACPI_BTYPE_BUFFER, &ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Make the call to create a resource linked list from the * byte stream buffer that comes back from the _CRS method * execution. */ Status = AcpiRsCreateResourceList (ObjDesc, RetBuffer); /* On exit, we must delete the object returned by evaluateObject */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiRsGetPrsMethodData * * PARAMETERS: Node - Device node * RetBuffer - Pointer to a buffer structure for the * results * * RETURN: Status * * DESCRIPTION: This function is called to get the _PRS value of an object * contained in an object specified by the handle passed in * * If the function fails an appropriate status will be returned * and the contents of the callers buffer is undefined. * ******************************************************************************/ ACPI_STATUS AcpiRsGetPrsMethodData ( ACPI_NAMESPACE_NODE *Node, ACPI_BUFFER *RetBuffer) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (RsGetPrsMethodData); /* Parameters guaranteed valid by caller */ /* Execute the method, no parameters */ Status = AcpiUtEvaluateObject ( Node, METHOD_NAME__PRS, ACPI_BTYPE_BUFFER, &ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Make the call to create a resource linked list from the * byte stream buffer that comes back from the _CRS method * execution. */ Status = AcpiRsCreateResourceList (ObjDesc, RetBuffer); /* On exit, we must delete the object returned by evaluateObject */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiRsGetAeiMethodData * * PARAMETERS: Node - Device node * RetBuffer - Pointer to a buffer structure for the * results * * RETURN: Status * * DESCRIPTION: This function is called to get the _AEI value of an object * contained in an object specified by the handle passed in * * If the function fails an appropriate status will be returned * and the contents of the callers buffer is undefined. * ******************************************************************************/ ACPI_STATUS AcpiRsGetAeiMethodData ( ACPI_NAMESPACE_NODE *Node, ACPI_BUFFER *RetBuffer) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (RsGetAeiMethodData); /* Parameters guaranteed valid by caller */ /* Execute the method, no parameters */ Status = AcpiUtEvaluateObject ( Node, METHOD_NAME__AEI, ACPI_BTYPE_BUFFER, &ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Make the call to create a resource linked list from the * byte stream buffer that comes back from the _CRS method * execution. */ Status = AcpiRsCreateResourceList (ObjDesc, RetBuffer); /* On exit, we must delete the object returned by evaluateObject */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiRsGetMethodData * * PARAMETERS: Handle - Handle to the containing object * Path - Path to method, relative to Handle * RetBuffer - Pointer to a buffer structure for the * results * * RETURN: Status * * DESCRIPTION: This function is called to get the _CRS or _PRS value of an * object contained in an object specified by the handle passed in * * If the function fails an appropriate status will be returned * and the contents of the callers buffer is undefined. * ******************************************************************************/ ACPI_STATUS AcpiRsGetMethodData ( ACPI_HANDLE Handle, const char *Path, ACPI_BUFFER *RetBuffer) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (RsGetMethodData); /* Parameters guaranteed valid by caller */ /* Execute the method, no parameters */ Status = AcpiUtEvaluateObject ( ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Handle), Path, ACPI_BTYPE_BUFFER, &ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Make the call to create a resource linked list from the * byte stream buffer that comes back from the method * execution. */ Status = AcpiRsCreateResourceList (ObjDesc, RetBuffer); /* On exit, we must delete the object returned by EvaluateObject */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiRsSetSrsMethodData * * PARAMETERS: Node - Device node * InBuffer - Pointer to a buffer structure of the * parameter * * RETURN: Status * * DESCRIPTION: This function is called to set the _SRS of an object contained * in an object specified by the handle passed in * * If the function fails an appropriate status will be returned * and the contents of the callers buffer is undefined. * * Note: Parameters guaranteed valid by caller * ******************************************************************************/ ACPI_STATUS AcpiRsSetSrsMethodData ( ACPI_NAMESPACE_NODE *Node, ACPI_BUFFER *InBuffer) { ACPI_EVALUATE_INFO *Info; ACPI_OPERAND_OBJECT *Args[2]; ACPI_STATUS Status; ACPI_BUFFER Buffer; ACPI_FUNCTION_TRACE (RsSetSrsMethodData); /* Allocate and initialize the evaluation information block */ Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); if (!Info) { return_ACPI_STATUS (AE_NO_MEMORY); } Info->PrefixNode = Node; Info->RelativePathname = METHOD_NAME__SRS; Info->Parameters = Args; Info->Flags = ACPI_IGNORE_RETURN_VALUE; /* * The InBuffer parameter will point to a linked list of * resource parameters. It needs to be formatted into a * byte stream to be sent in as an input parameter to _SRS * * Convert the linked list into a byte stream */ Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiRsCreateAmlResources (InBuffer, &Buffer); if (ACPI_FAILURE (Status)) { goto Cleanup; } /* Create and initialize the method parameter object */ Args[0] = AcpiUtCreateInternalObject (ACPI_TYPE_BUFFER); if (!Args[0]) { /* * Must free the buffer allocated above (otherwise it is freed * later) */ ACPI_FREE (Buffer.Pointer); Status = AE_NO_MEMORY; goto Cleanup; } Args[0]->Buffer.Length = (UINT32) Buffer.Length; Args[0]->Buffer.Pointer = Buffer.Pointer; Args[0]->Common.Flags = AOPOBJ_DATA_VALID; Args[1] = NULL; /* Execute the method, no return value is expected */ Status = AcpiNsEvaluate (Info); /* Clean up and return the status from AcpiNsEvaluate */ AcpiUtRemoveReference (Args[0]); Cleanup: ACPI_FREE (Info); return_ACPI_STATUS (Status); } src/acpica/source/components/resources/rsxface.c000066400000000000000000000705551465205512700224060ustar00rootroot00000000000000/******************************************************************************* * * Module Name: rsxface - Public interfaces to the resource manager * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #include "acresrc.h" #include "acnamesp.h" #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rsxface") /* Local macros for 16,32-bit to 64-bit conversion */ #define ACPI_COPY_FIELD(Out, In, Field) ((Out)->Field = (In)->Field) #define ACPI_COPY_ADDRESS(Out, In) \ ACPI_COPY_FIELD(Out, In, ResourceType); \ ACPI_COPY_FIELD(Out, In, ProducerConsumer); \ ACPI_COPY_FIELD(Out, In, Decode); \ ACPI_COPY_FIELD(Out, In, MinAddressFixed); \ ACPI_COPY_FIELD(Out, In, MaxAddressFixed); \ ACPI_COPY_FIELD(Out, In, Info); \ ACPI_COPY_FIELD(Out, In, Address.Granularity); \ ACPI_COPY_FIELD(Out, In, Address.Minimum); \ ACPI_COPY_FIELD(Out, In, Address.Maximum); \ ACPI_COPY_FIELD(Out, In, Address.TranslationOffset); \ ACPI_COPY_FIELD(Out, In, Address.AddressLength); \ ACPI_COPY_FIELD(Out, In, ResourceSource); /* Local prototypes */ static ACPI_STATUS AcpiRsMatchVendorResource ( ACPI_RESOURCE *Resource, void *Context); static ACPI_STATUS AcpiRsValidateParameters ( ACPI_HANDLE DeviceHandle, ACPI_BUFFER *Buffer, ACPI_NAMESPACE_NODE **ReturnNode); /******************************************************************************* * * FUNCTION: AcpiRsValidateParameters * * PARAMETERS: DeviceHandle - Handle to a device * Buffer - Pointer to a data buffer * ReturnNode - Pointer to where the device node is returned * * RETURN: Status * * DESCRIPTION: Common parameter validation for resource interfaces * ******************************************************************************/ static ACPI_STATUS AcpiRsValidateParameters ( ACPI_HANDLE DeviceHandle, ACPI_BUFFER *Buffer, ACPI_NAMESPACE_NODE **ReturnNode) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_FUNCTION_TRACE (RsValidateParameters); /* * Must have a valid handle to an ACPI device */ if (!DeviceHandle) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Node = AcpiNsValidateHandle (DeviceHandle); if (!Node) { return_ACPI_STATUS (AE_BAD_PARAMETER); } if (Node->Type != ACPI_TYPE_DEVICE) { return_ACPI_STATUS (AE_TYPE); } /* * Validate the user buffer object * * if there is a non-zero buffer length we also need a valid pointer in * the buffer. If it's a zero buffer length, we'll be returning the * needed buffer size (later), so keep going. */ Status = AcpiUtValidateBuffer (Buffer); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } *ReturnNode = Node; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiGetIrqRoutingTable * * PARAMETERS: DeviceHandle - Handle to the Bus device we are querying * RetBuffer - Pointer to a buffer to receive the * current resources for the device * * RETURN: Status * * DESCRIPTION: This function is called to get the IRQ routing table for a * specific bus. The caller must first acquire a handle for the * desired bus. The routine table is placed in the buffer pointed * to by the RetBuffer variable parameter. * * If the function fails an appropriate status will be returned * and the value of RetBuffer is undefined. * * This function attempts to execute the _PRT method contained in * the object indicated by the passed DeviceHandle. * ******************************************************************************/ ACPI_STATUS AcpiGetIrqRoutingTable ( ACPI_HANDLE DeviceHandle, ACPI_BUFFER *RetBuffer) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_FUNCTION_TRACE (AcpiGetIrqRoutingTable); /* Validate parameters then dispatch to internal routine */ Status = AcpiRsValidateParameters (DeviceHandle, RetBuffer, &Node); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiRsGetPrtMethodData (Node, RetBuffer); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiGetIrqRoutingTable) /******************************************************************************* * * FUNCTION: AcpiGetCurrentResources * * PARAMETERS: DeviceHandle - Handle to the device object for the * device we are querying * RetBuffer - Pointer to a buffer to receive the * current resources for the device * * RETURN: Status * * DESCRIPTION: This function is called to get the current resources for a * specific device. The caller must first acquire a handle for * the desired device. The resource data is placed in the buffer * pointed to by the RetBuffer variable parameter. * * If the function fails an appropriate status will be returned * and the value of RetBuffer is undefined. * * This function attempts to execute the _CRS method contained in * the object indicated by the passed DeviceHandle. * ******************************************************************************/ ACPI_STATUS AcpiGetCurrentResources ( ACPI_HANDLE DeviceHandle, ACPI_BUFFER *RetBuffer) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_FUNCTION_TRACE (AcpiGetCurrentResources); /* Validate parameters then dispatch to internal routine */ Status = AcpiRsValidateParameters (DeviceHandle, RetBuffer, &Node); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiRsGetCrsMethodData (Node, RetBuffer); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiGetCurrentResources) /******************************************************************************* * * FUNCTION: AcpiGetPossibleResources * * PARAMETERS: DeviceHandle - Handle to the device object for the * device we are querying * RetBuffer - Pointer to a buffer to receive the * resources for the device * * RETURN: Status * * DESCRIPTION: This function is called to get a list of the possible resources * for a specific device. The caller must first acquire a handle * for the desired device. The resource data is placed in the * buffer pointed to by the RetBuffer variable. * * If the function fails an appropriate status will be returned * and the value of RetBuffer is undefined. * ******************************************************************************/ ACPI_STATUS AcpiGetPossibleResources ( ACPI_HANDLE DeviceHandle, ACPI_BUFFER *RetBuffer) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_FUNCTION_TRACE (AcpiGetPossibleResources); /* Validate parameters then dispatch to internal routine */ Status = AcpiRsValidateParameters (DeviceHandle, RetBuffer, &Node); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiRsGetPrsMethodData (Node, RetBuffer); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiGetPossibleResources) /******************************************************************************* * * FUNCTION: AcpiSetCurrentResources * * PARAMETERS: DeviceHandle - Handle to the device object for the * device we are setting resources * InBuffer - Pointer to a buffer containing the * resources to be set for the device * * RETURN: Status * * DESCRIPTION: This function is called to set the current resources for a * specific device. The caller must first acquire a handle for * the desired device. The resource data is passed to the routine * the buffer pointed to by the InBuffer variable. * ******************************************************************************/ ACPI_STATUS AcpiSetCurrentResources ( ACPI_HANDLE DeviceHandle, ACPI_BUFFER *InBuffer) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_FUNCTION_TRACE (AcpiSetCurrentResources); /* Validate the buffer, don't allow zero length */ if ((!InBuffer) || (!InBuffer->Pointer) || (!InBuffer->Length)) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Validate parameters then dispatch to internal routine */ Status = AcpiRsValidateParameters (DeviceHandle, InBuffer, &Node); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiRsSetSrsMethodData (Node, InBuffer); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiSetCurrentResources) /******************************************************************************* * * FUNCTION: AcpiGetEventResources * * PARAMETERS: DeviceHandle - Handle to the device object for the * device we are getting resources * InBuffer - Pointer to a buffer containing the * resources to be set for the device * * RETURN: Status * * DESCRIPTION: This function is called to get the event resources for a * specific device. The caller must first acquire a handle for * the desired device. The resource data is passed to the routine * the buffer pointed to by the InBuffer variable. Uses the * _AEI method. * ******************************************************************************/ ACPI_STATUS AcpiGetEventResources ( ACPI_HANDLE DeviceHandle, ACPI_BUFFER *RetBuffer) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; ACPI_FUNCTION_TRACE (AcpiGetEventResources); /* Validate parameters then dispatch to internal routine */ Status = AcpiRsValidateParameters (DeviceHandle, RetBuffer, &Node); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiRsGetAeiMethodData (Node, RetBuffer); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiGetEventResources) /****************************************************************************** * * FUNCTION: AcpiResourceToAddress64 * * PARAMETERS: Resource - Pointer to a resource * Out - Pointer to the users's return buffer * (a struct acpi_resource_address64) * * RETURN: Status * * DESCRIPTION: If the resource is an address16, address32, or address64, * copy it to the address64 return buffer. This saves the * caller from having to duplicate code for different-sized * addresses. * ******************************************************************************/ ACPI_STATUS AcpiResourceToAddress64 ( ACPI_RESOURCE *Resource, ACPI_RESOURCE_ADDRESS64 *Out) { ACPI_RESOURCE_ADDRESS16 *Address16; ACPI_RESOURCE_ADDRESS32 *Address32; if (!Resource || !Out) { return (AE_BAD_PARAMETER); } /* Convert 16 or 32 address descriptor to 64 */ switch (Resource->Type) { case ACPI_RESOURCE_TYPE_ADDRESS16: Address16 = ACPI_CAST_PTR ( ACPI_RESOURCE_ADDRESS16, &Resource->Data); ACPI_COPY_ADDRESS (Out, Address16); break; case ACPI_RESOURCE_TYPE_ADDRESS32: Address32 = ACPI_CAST_PTR ( ACPI_RESOURCE_ADDRESS32, &Resource->Data); ACPI_COPY_ADDRESS (Out, Address32); break; case ACPI_RESOURCE_TYPE_ADDRESS64: /* Simple copy for 64 bit source */ memcpy (Out, &Resource->Data, sizeof (ACPI_RESOURCE_ADDRESS64)); break; default: return (AE_BAD_PARAMETER); } return (AE_OK); } ACPI_EXPORT_SYMBOL (AcpiResourceToAddress64) /******************************************************************************* * * FUNCTION: AcpiGetVendorResource * * PARAMETERS: DeviceHandle - Handle for the parent device object * Name - Method name for the parent resource * (METHOD_NAME__CRS or METHOD_NAME__PRS) * Uuid - Pointer to the UUID to be matched. * includes both subtype and 16-byte UUID * RetBuffer - Where the vendor resource is returned * * RETURN: Status * * DESCRIPTION: Walk a resource template for the specified device to find a * vendor-defined resource that matches the supplied UUID and * UUID subtype. Returns a ACPI_RESOURCE of type Vendor. * ******************************************************************************/ ACPI_STATUS AcpiGetVendorResource ( ACPI_HANDLE DeviceHandle, char *Name, ACPI_VENDOR_UUID *Uuid, ACPI_BUFFER *RetBuffer) { ACPI_VENDOR_WALK_INFO Info; ACPI_STATUS Status; /* Other parameters are validated by AcpiWalkResources */ if (!Uuid || !RetBuffer) { return (AE_BAD_PARAMETER); } Info.Uuid = Uuid; Info.Buffer = RetBuffer; Info.Status = AE_NOT_EXIST; /* Walk the _CRS or _PRS resource list for this device */ Status = AcpiWalkResources ( DeviceHandle, Name, AcpiRsMatchVendorResource, &Info); if (ACPI_FAILURE (Status)) { return (Status); } return (Info.Status); } ACPI_EXPORT_SYMBOL (AcpiGetVendorResource) /******************************************************************************* * * FUNCTION: AcpiRsMatchVendorResource * * PARAMETERS: ACPI_WALK_RESOURCE_CALLBACK * * RETURN: Status * * DESCRIPTION: Match a vendor resource via the ACPI 3.0 UUID * ******************************************************************************/ static ACPI_STATUS AcpiRsMatchVendorResource ( ACPI_RESOURCE *Resource, void *Context) { ACPI_VENDOR_WALK_INFO *Info = Context; ACPI_RESOURCE_VENDOR_TYPED *Vendor; ACPI_BUFFER *Buffer; ACPI_STATUS Status; /* Ignore all descriptors except Vendor */ if (Resource->Type != ACPI_RESOURCE_TYPE_VENDOR) { return (AE_OK); } Vendor = &Resource->Data.VendorTyped; /* * For a valid match, these conditions must hold: * * 1) Length of descriptor data must be at least as long as a UUID struct * 2) The UUID subtypes must match * 3) The UUID data must match */ if ((Vendor->ByteLength < (ACPI_UUID_LENGTH + 1)) || (Vendor->UuidSubtype != Info->Uuid->Subtype) || (memcmp (Vendor->Uuid, Info->Uuid->Data, ACPI_UUID_LENGTH))) { return (AE_OK); } /* Validate/Allocate/Clear caller buffer */ Buffer = Info->Buffer; Status = AcpiUtInitializeBuffer (Buffer, Resource->Length); if (ACPI_FAILURE (Status)) { return (Status); } /* Found the correct resource, copy and return it */ memcpy (Buffer->Pointer, Resource, Resource->Length); Buffer->Length = Resource->Length; /* Found the desired descriptor, terminate resource walk */ Info->Status = AE_OK; return (AE_CTRL_TERMINATE); } /******************************************************************************* * * FUNCTION: AcpiWalkResourceBuffer * * PARAMETERS: Buffer - Formatted buffer returned by one of the * various Get*Resource functions * UserFunction - Called for each resource * Context - Passed to UserFunction * * RETURN: Status * * DESCRIPTION: Walks the input resource template. The UserFunction is called * once for each resource in the list. * ******************************************************************************/ ACPI_STATUS AcpiWalkResourceBuffer ( ACPI_BUFFER *Buffer, ACPI_WALK_RESOURCE_CALLBACK UserFunction, void *Context) { ACPI_STATUS Status = AE_OK; ACPI_RESOURCE *Resource; ACPI_RESOURCE *ResourceEnd; ACPI_FUNCTION_TRACE (AcpiWalkResourceBuffer); /* Parameter validation */ if (!Buffer || !Buffer->Pointer || !UserFunction) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Buffer contains the resource list and length */ Resource = ACPI_CAST_PTR (ACPI_RESOURCE, Buffer->Pointer); ResourceEnd = ACPI_ADD_PTR ( ACPI_RESOURCE, Buffer->Pointer, Buffer->Length); /* Walk the resource list until the EndTag is found (or buffer end) */ while (Resource < ResourceEnd) { /* Sanity check the resource type */ if (Resource->Type > ACPI_RESOURCE_TYPE_MAX) { Status = AE_AML_INVALID_RESOURCE_TYPE; break; } /* Sanity check the length. It must not be zero, or we loop forever */ if (!Resource->Length) { return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH); } /* Invoke the user function, abort on any error returned */ Status = UserFunction (Resource, Context); if (ACPI_FAILURE (Status)) { if (Status == AE_CTRL_TERMINATE) { /* This is an OK termination by the user function */ Status = AE_OK; } break; } /* EndTag indicates end-of-list */ if (Resource->Type == ACPI_RESOURCE_TYPE_END_TAG) { break; } /* Get the next resource descriptor */ Resource = ACPI_NEXT_RESOURCE (Resource); } return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiWalkResourceBuffer) /******************************************************************************* * * FUNCTION: AcpiWalkResources * * PARAMETERS: DeviceHandle - Handle to the device object for the * device we are querying * Name - Method name of the resources we want. * (METHOD_NAME__CRS, METHOD_NAME__PRS, or * METHOD_NAME__AEI or METHOD_NAME__DMA) * UserFunction - Called for each resource * Context - Passed to UserFunction * * RETURN: Status * * DESCRIPTION: Retrieves the current or possible resource list for the * specified device. The UserFunction is called once for * each resource in the list. * ******************************************************************************/ ACPI_STATUS AcpiWalkResources ( ACPI_HANDLE DeviceHandle, char *Name, ACPI_WALK_RESOURCE_CALLBACK UserFunction, void *Context) { ACPI_STATUS Status; ACPI_BUFFER Buffer; ACPI_FUNCTION_TRACE (AcpiWalkResources); /* Parameter validation */ if (!DeviceHandle || !UserFunction || !Name || (!ACPI_COMPARE_NAMESEG (Name, METHOD_NAME__CRS) && !ACPI_COMPARE_NAMESEG (Name, METHOD_NAME__PRS) && !ACPI_COMPARE_NAMESEG (Name, METHOD_NAME__AEI) && !ACPI_COMPARE_NAMESEG (Name, METHOD_NAME__DMA))) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Get the _CRS/_PRS/_AEI/_DMA resource list */ Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiRsGetMethodData (DeviceHandle, Name, &Buffer); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Walk the resource list and cleanup */ Status = AcpiWalkResourceBuffer (&Buffer, UserFunction, Context); ACPI_FREE (Buffer.Pointer); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiWalkResources) src/acpica/source/components/tables/000077500000000000000000000000001465205512700200335ustar00rootroot00000000000000src/acpica/source/components/tables/tbdata.c000066400000000000000000001200751465205512700214430ustar00rootroot00000000000000/****************************************************************************** * * Module Name: tbdata - Table manager data structure functions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "actables.h" #include "acevents.h" #define _COMPONENT ACPI_TABLES ACPI_MODULE_NAME ("tbdata") /* Local prototypes */ static ACPI_STATUS AcpiTbCheckDuplication ( ACPI_TABLE_DESC *TableDesc, UINT32 *TableIndex); static BOOLEAN AcpiTbCompareTables ( ACPI_TABLE_DESC *TableDesc, UINT32 TableIndex); /******************************************************************************* * * FUNCTION: AcpiTbCompareTables * * PARAMETERS: TableDesc - Table 1 descriptor to be compared * TableIndex - Index of table 2 to be compared * * RETURN: TRUE if both tables are identical. * * DESCRIPTION: This function compares a table with another table that has * already been installed in the root table list. * ******************************************************************************/ static BOOLEAN AcpiTbCompareTables ( ACPI_TABLE_DESC *TableDesc, UINT32 TableIndex) { ACPI_STATUS Status = AE_OK; BOOLEAN IsIdentical; ACPI_TABLE_HEADER *Table; UINT32 TableLength; UINT8 TableFlags; Status = AcpiTbAcquireTable (&AcpiGbl_RootTableList.Tables[TableIndex], &Table, &TableLength, &TableFlags); if (ACPI_FAILURE (Status)) { return (FALSE); } /* * Check for a table match on the entire table length, * not just the header. */ IsIdentical = (BOOLEAN)((TableDesc->Length != TableLength || memcmp (TableDesc->Pointer, Table, TableLength)) ? FALSE : TRUE); /* Release the acquired table */ AcpiTbReleaseTable (Table, TableLength, TableFlags); return (IsIdentical); } /******************************************************************************* * * FUNCTION: AcpiTbInitTableDescriptor * * PARAMETERS: TableDesc - Table descriptor * Address - Physical address of the table * Flags - Allocation flags of the table * Table - Pointer to the table * * RETURN: None * * DESCRIPTION: Initialize a new table descriptor * ******************************************************************************/ void AcpiTbInitTableDescriptor ( ACPI_TABLE_DESC *TableDesc, ACPI_PHYSICAL_ADDRESS Address, UINT8 Flags, ACPI_TABLE_HEADER *Table) { /* * Initialize the table descriptor. Set the pointer to NULL for external * tables, since the table is not fully mapped at this time. */ memset (TableDesc, 0, sizeof (ACPI_TABLE_DESC)); TableDesc->Address = Address; TableDesc->Length = Table->Length; TableDesc->Flags = Flags; ACPI_MOVE_32_TO_32 (TableDesc->Signature.Ascii, Table->Signature); switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK) { case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL: TableDesc->Pointer = Table; break; case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL: default: break; } } /******************************************************************************* * * FUNCTION: AcpiTbAcquireTable * * PARAMETERS: TableDesc - Table descriptor * TablePtr - Where table is returned * TableLength - Where table length is returned * TableFlags - Where table allocation flags are returned * * RETURN: Status * * DESCRIPTION: Acquire an ACPI table. It can be used for tables not * maintained in the AcpiGbl_RootTableList. * ******************************************************************************/ ACPI_STATUS AcpiTbAcquireTable ( ACPI_TABLE_DESC *TableDesc, ACPI_TABLE_HEADER **TablePtr, UINT32 *TableLength, UINT8 *TableFlags) { ACPI_TABLE_HEADER *Table = NULL; switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK) { case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL: Table = AcpiOsMapMemory (TableDesc->Address, TableDesc->Length); break; case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL: Table = TableDesc->Pointer; break; default: break; } /* Table is not valid yet */ if (!Table) { return (AE_NO_MEMORY); } /* Fill the return values */ *TablePtr = Table; *TableLength = TableDesc->Length; *TableFlags = TableDesc->Flags; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiTbReleaseTable * * PARAMETERS: Table - Pointer for the table * TableLength - Length for the table * TableFlags - Allocation flags for the table * * RETURN: None * * DESCRIPTION: Release a table. The inverse of AcpiTbAcquireTable(). * ******************************************************************************/ void AcpiTbReleaseTable ( ACPI_TABLE_HEADER *Table, UINT32 TableLength, UINT8 TableFlags) { switch (TableFlags & ACPI_TABLE_ORIGIN_MASK) { case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL: AcpiOsUnmapMemory (Table, TableLength); break; case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL: default: break; } } /******************************************************************************* * * FUNCTION: AcpiTbAcquireTempTable * * PARAMETERS: TableDesc - Table descriptor to be acquired * Address - Address of the table * Flags - Allocation flags of the table * Table - Pointer to the table (required for virtual * origins, optional for physical) * * RETURN: Status * * DESCRIPTION: This function validates the table header to obtain the length * of a table and fills the table descriptor to make its state as * "INSTALLED". Such a table descriptor is only used for verified * installation. * ******************************************************************************/ ACPI_STATUS AcpiTbAcquireTempTable ( ACPI_TABLE_DESC *TableDesc, ACPI_PHYSICAL_ADDRESS Address, UINT8 Flags, ACPI_TABLE_HEADER *Table) { BOOLEAN MappedTable = FALSE; switch (Flags & ACPI_TABLE_ORIGIN_MASK) { case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL: /* Get the length of the full table from the header */ if (!Table) { Table = AcpiOsMapMemory (Address, sizeof (ACPI_TABLE_HEADER)); if (!Table) { return (AE_NO_MEMORY); } MappedTable = TRUE; } break; case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL: if (!Table) { return (AE_BAD_PARAMETER); } break; default: /* Table is not valid yet */ return (AE_NO_MEMORY); } AcpiTbInitTableDescriptor (TableDesc, Address, Flags, Table); if (MappedTable) { AcpiOsUnmapMemory (Table, sizeof (ACPI_TABLE_HEADER)); } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiTbReleaseTempTable * * PARAMETERS: TableDesc - Table descriptor to be released * * RETURN: Status * * DESCRIPTION: The inverse of AcpiTbAcquireTempTable(). * *****************************************************************************/ void AcpiTbReleaseTempTable ( ACPI_TABLE_DESC *TableDesc) { /* * Note that the .Address is maintained by the callers of * AcpiTbAcquireTempTable(), thus do not invoke AcpiTbUninstallTable() * where .Address will be freed. */ AcpiTbInvalidateTable (TableDesc); } /****************************************************************************** * * FUNCTION: AcpiTbValidateTable * * PARAMETERS: TableDesc - Table descriptor * * RETURN: Status * * DESCRIPTION: This function is called to validate the table, the returned * table descriptor is in "VALIDATED" state. * *****************************************************************************/ ACPI_STATUS AcpiTbValidateTable ( ACPI_TABLE_DESC *TableDesc) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (TbValidateTable); /* Validate the table if necessary */ if (!TableDesc->Pointer) { Status = AcpiTbAcquireTable (TableDesc, &TableDesc->Pointer, &TableDesc->Length, &TableDesc->Flags); if (!TableDesc->Pointer) { Status = AE_NO_MEMORY; } } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiTbInvalidateTable * * PARAMETERS: TableDesc - Table descriptor * * RETURN: None * * DESCRIPTION: Invalidate one internal ACPI table, this is the inverse of * AcpiTbValidateTable(). * ******************************************************************************/ void AcpiTbInvalidateTable ( ACPI_TABLE_DESC *TableDesc) { ACPI_FUNCTION_TRACE (TbInvalidateTable); /* Table must be validated */ if (!TableDesc->Pointer) { return_VOID; } AcpiTbReleaseTable (TableDesc->Pointer, TableDesc->Length, TableDesc->Flags); switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK) { case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL: TableDesc->Pointer = NULL; break; case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL: default: break; } return_VOID; } /****************************************************************************** * * FUNCTION: AcpiTbValidateTempTable * * PARAMETERS: TableDesc - Table descriptor * * RETURN: Status * * DESCRIPTION: This function is called to validate the table, the returned * table descriptor is in "VALIDATED" state. * *****************************************************************************/ ACPI_STATUS AcpiTbValidateTempTable ( ACPI_TABLE_DESC *TableDesc) { if (!TableDesc->Pointer && !AcpiGbl_EnableTableValidation) { /* * Only validates the header of the table. * Note that Length contains the size of the mapping after invoking * this work around, this value is required by * AcpiTbReleaseTempTable(). * We can do this because in AcpiInitTableDescriptor(), the Length * field of the installed descriptor is filled with the actual * table length obtaining from the table header. */ TableDesc->Length = sizeof (ACPI_TABLE_HEADER); } return (AcpiTbValidateTable (TableDesc)); } /******************************************************************************* * * FUNCTION: AcpiTbCheckDuplication * * PARAMETERS: TableDesc - Table descriptor * TableIndex - Where the table index is returned * * RETURN: Status * * DESCRIPTION: Avoid installing duplicated tables. However table override and * user aided dynamic table load is allowed, thus comparing the * address of the table is not sufficient, and checking the entire * table content is required. * ******************************************************************************/ static ACPI_STATUS AcpiTbCheckDuplication ( ACPI_TABLE_DESC *TableDesc, UINT32 *TableIndex) { UINT32 i; ACPI_FUNCTION_TRACE (TbCheckDuplication); /* Check if table is already registered */ for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; ++i) { /* Do not compare with unverified tables */ if (!(AcpiGbl_RootTableList.Tables[i].Flags & ACPI_TABLE_IS_VERIFIED)) { continue; } /* * Check for a table match on the entire table length, * not just the header. */ if (!AcpiTbCompareTables (TableDesc, i)) { continue; } /* * Note: the current mechanism does not unregister a table if it is * dynamically unloaded. The related namespace entries are deleted, * but the table remains in the root table list. * * The assumption here is that the number of different tables that * will be loaded is actually small, and there is minimal overhead * in just keeping the table in case it is needed again. * * If this assumption changes in the future (perhaps on large * machines with many table load/unload operations), tables will * need to be unregistered when they are unloaded, and slots in the * root table list should be reused when empty. */ if (AcpiGbl_RootTableList.Tables[i].Flags & ACPI_TABLE_IS_LOADED) { /* Table is still loaded, this is an error */ return_ACPI_STATUS (AE_ALREADY_EXISTS); } else { *TableIndex = i; return_ACPI_STATUS (AE_CTRL_TERMINATE); } } /* Indicate no duplication to the caller */ return_ACPI_STATUS (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiTbVerifyTempTable * * PARAMETERS: TableDesc - Table descriptor * Signature - Table signature to verify * TableIndex - Where the table index is returned * * RETURN: Status * * DESCRIPTION: This function is called to validate and verify the table, the * returned table descriptor is in "VALIDATED" state. * Note that 'TableIndex' is required to be set to !NULL to * enable duplication check. * *****************************************************************************/ ACPI_STATUS AcpiTbVerifyTempTable ( ACPI_TABLE_DESC *TableDesc, char *Signature, UINT32 *TableIndex) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (TbVerifyTempTable); /* Validate the table */ Status = AcpiTbValidateTempTable (TableDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (AE_NO_MEMORY); } /* If a particular signature is expected (DSDT/FACS), it must match */ if (Signature && !ACPI_COMPARE_NAMESEG (&TableDesc->Signature, Signature)) { ACPI_BIOS_ERROR ((AE_INFO, "Invalid signature 0x%X for ACPI table, expected [%s]", TableDesc->Signature.Integer, Signature)); Status = AE_BAD_SIGNATURE; goto InvalidateAndExit; } if (AcpiGbl_EnableTableValidation) { /* Verify the checksum */ Status = AcpiUtVerifyChecksum (TableDesc->Pointer, TableDesc->Length); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, AE_NO_MEMORY, "%4.4s 0x%8.8X%8.8X" " Attempted table install failed", AcpiUtValidNameseg (TableDesc->Signature.Ascii) ? TableDesc->Signature.Ascii : "????", ACPI_FORMAT_UINT64 (TableDesc->Address))); goto InvalidateAndExit; } /* Avoid duplications */ if (TableIndex) { Status = AcpiTbCheckDuplication (TableDesc, TableIndex); if (ACPI_FAILURE (Status)) { if (Status != AE_CTRL_TERMINATE) { ACPI_EXCEPTION ((AE_INFO, Status, "%4.4s 0x%8.8X%8.8X" " Table is already loaded", AcpiUtValidNameseg (TableDesc->Signature.Ascii) ? TableDesc->Signature.Ascii : "????", ACPI_FORMAT_UINT64 (TableDesc->Address))); } goto InvalidateAndExit; } } TableDesc->Flags |= ACPI_TABLE_IS_VERIFIED; } return_ACPI_STATUS (Status); InvalidateAndExit: AcpiTbInvalidateTable (TableDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiTbResizeRootTableList * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Expand the size of global table array * ******************************************************************************/ ACPI_STATUS AcpiTbResizeRootTableList ( void) { ACPI_TABLE_DESC *Tables; UINT32 TableCount; UINT32 CurrentTableCount, MaxTableCount; UINT32 i; ACPI_FUNCTION_TRACE (TbResizeRootTableList); /* AllowResize flag is a parameter to AcpiInitializeTables */ if (!(AcpiGbl_RootTableList.Flags & ACPI_ROOT_ALLOW_RESIZE)) { ACPI_ERROR ((AE_INFO, "Resize of Root Table Array is not allowed")); return_ACPI_STATUS (AE_SUPPORT); } /* Increase the Table Array size */ if (AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED) { TableCount = AcpiGbl_RootTableList.MaxTableCount; } else { TableCount = AcpiGbl_RootTableList.CurrentTableCount; } MaxTableCount = TableCount + ACPI_ROOT_TABLE_SIZE_INCREMENT; Tables = ACPI_ALLOCATE_ZEROED ( ((ACPI_SIZE) MaxTableCount) * sizeof (ACPI_TABLE_DESC)); if (!Tables) { ACPI_ERROR ((AE_INFO, "Could not allocate new root table array")); return_ACPI_STATUS (AE_NO_MEMORY); } /* Copy and free the previous table array */ CurrentTableCount = 0; if (AcpiGbl_RootTableList.Tables) { for (i = 0; i < TableCount; i++) { if (AcpiGbl_RootTableList.Tables[i].Address) { memcpy (Tables + CurrentTableCount, AcpiGbl_RootTableList.Tables + i, sizeof (ACPI_TABLE_DESC)); CurrentTableCount++; } } if (AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED) { ACPI_FREE (AcpiGbl_RootTableList.Tables); } } AcpiGbl_RootTableList.Tables = Tables; AcpiGbl_RootTableList.MaxTableCount = MaxTableCount; AcpiGbl_RootTableList.CurrentTableCount = CurrentTableCount; AcpiGbl_RootTableList.Flags |= ACPI_ROOT_ORIGIN_ALLOCATED; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiTbGetNextTableDescriptor * * PARAMETERS: TableIndex - Where table index is returned * TableDesc - Where table descriptor is returned * * RETURN: Status and table index/descriptor. * * DESCRIPTION: Allocate a new ACPI table entry to the global table list * ******************************************************************************/ ACPI_STATUS AcpiTbGetNextTableDescriptor ( UINT32 *TableIndex, ACPI_TABLE_DESC **TableDesc) { ACPI_STATUS Status; UINT32 i; /* Ensure that there is room for the table in the Root Table List */ if (AcpiGbl_RootTableList.CurrentTableCount >= AcpiGbl_RootTableList.MaxTableCount) { Status = AcpiTbResizeRootTableList(); if (ACPI_FAILURE (Status)) { return (Status); } } i = AcpiGbl_RootTableList.CurrentTableCount; AcpiGbl_RootTableList.CurrentTableCount++; if (TableIndex) { *TableIndex = i; } if (TableDesc) { *TableDesc = &AcpiGbl_RootTableList.Tables[i]; } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiTbTerminate * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Delete all internal ACPI tables * ******************************************************************************/ void AcpiTbTerminate ( void) { UINT32 i; ACPI_FUNCTION_TRACE (TbTerminate); (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); /* Delete the individual tables */ for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++) { AcpiTbUninstallTable (&AcpiGbl_RootTableList.Tables[i]); } /* * Delete the root table array if allocated locally. Array cannot be * mapped, so we don't need to check for that flag. */ if (AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED) { ACPI_FREE (AcpiGbl_RootTableList.Tables); } AcpiGbl_RootTableList.Tables = NULL; AcpiGbl_RootTableList.Flags = 0; AcpiGbl_RootTableList.CurrentTableCount = 0; ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "ACPI Tables freed\n")); (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiTbDeleteNamespaceByOwner * * PARAMETERS: TableIndex - Table index * * RETURN: Status * * DESCRIPTION: Delete all namespace objects created when this table was loaded. * ******************************************************************************/ ACPI_STATUS AcpiTbDeleteNamespaceByOwner ( UINT32 TableIndex) { ACPI_OWNER_ID OwnerId; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (TbDeleteNamespaceByOwner); Status = AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } if (TableIndex >= AcpiGbl_RootTableList.CurrentTableCount) { /* The table index does not exist */ (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return_ACPI_STATUS (AE_NOT_EXIST); } /* Get the owner ID for this table, used to delete namespace nodes */ OwnerId = AcpiGbl_RootTableList.Tables[TableIndex].OwnerId; (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); /* * Need to acquire the namespace writer lock to prevent interference * with any concurrent namespace walks. The interpreter must be * released during the deletion since the acquisition of the deletion * lock may block, and also since the execution of a namespace walk * must be allowed to use the interpreter. */ Status = AcpiUtAcquireWriteLock (&AcpiGbl_NamespaceRwLock); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } AcpiNsDeleteNamespaceByOwner (OwnerId); AcpiUtReleaseWriteLock (&AcpiGbl_NamespaceRwLock); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiTbAllocateOwnerId * * PARAMETERS: TableIndex - Table index * * RETURN: Status * * DESCRIPTION: Allocates OwnerId in TableDesc * ******************************************************************************/ ACPI_STATUS AcpiTbAllocateOwnerId ( UINT32 TableIndex) { ACPI_STATUS Status = AE_BAD_PARAMETER; ACPI_FUNCTION_TRACE (TbAllocateOwnerId); (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount) { Status = AcpiUtAllocateOwnerId ( &(AcpiGbl_RootTableList.Tables[TableIndex].OwnerId)); } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiTbReleaseOwnerId * * PARAMETERS: TableIndex - Table index * * RETURN: Status * * DESCRIPTION: Releases OwnerId in TableDesc * ******************************************************************************/ ACPI_STATUS AcpiTbReleaseOwnerId ( UINT32 TableIndex) { ACPI_STATUS Status = AE_BAD_PARAMETER; ACPI_FUNCTION_TRACE (TbReleaseOwnerId); (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount) { AcpiUtReleaseOwnerId ( &(AcpiGbl_RootTableList.Tables[TableIndex].OwnerId)); Status = AE_OK; } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiTbGetOwnerId * * PARAMETERS: TableIndex - Table index * OwnerId - Where the table OwnerId is returned * * RETURN: Status * * DESCRIPTION: returns OwnerId for the ACPI table * ******************************************************************************/ ACPI_STATUS AcpiTbGetOwnerId ( UINT32 TableIndex, ACPI_OWNER_ID *OwnerId) { ACPI_STATUS Status = AE_BAD_PARAMETER; ACPI_FUNCTION_TRACE (TbGetOwnerId); (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount) { *OwnerId = AcpiGbl_RootTableList.Tables[TableIndex].OwnerId; Status = AE_OK; } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiTbIsTableLoaded * * PARAMETERS: TableIndex - Index into the root table * * RETURN: Table Loaded Flag * ******************************************************************************/ BOOLEAN AcpiTbIsTableLoaded ( UINT32 TableIndex) { BOOLEAN IsLoaded = FALSE; (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount) { IsLoaded = (BOOLEAN) (AcpiGbl_RootTableList.Tables[TableIndex].Flags & ACPI_TABLE_IS_LOADED); } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return (IsLoaded); } /******************************************************************************* * * FUNCTION: AcpiTbSetTableLoadedFlag * * PARAMETERS: TableIndex - Table index * IsLoaded - TRUE if table is loaded, FALSE otherwise * * RETURN: None * * DESCRIPTION: Sets the table loaded flag to either TRUE or FALSE. * ******************************************************************************/ void AcpiTbSetTableLoadedFlag ( UINT32 TableIndex, BOOLEAN IsLoaded) { (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount) { if (IsLoaded) { AcpiGbl_RootTableList.Tables[TableIndex].Flags |= ACPI_TABLE_IS_LOADED; } else { AcpiGbl_RootTableList.Tables[TableIndex].Flags &= ~ACPI_TABLE_IS_LOADED; } } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); } /******************************************************************************* * * FUNCTION: AcpiTbLoadTable * * PARAMETERS: TableIndex - Table index * ParentNode - Where table index is returned * * RETURN: Status * * DESCRIPTION: Load an ACPI table * ******************************************************************************/ ACPI_STATUS AcpiTbLoadTable ( UINT32 TableIndex, ACPI_NAMESPACE_NODE *ParentNode) { ACPI_TABLE_HEADER *Table; ACPI_STATUS Status; ACPI_OWNER_ID OwnerId; ACPI_FUNCTION_TRACE (TbLoadTable); /* * Note: Now table is "INSTALLED", it must be validated before * using. */ Status = AcpiGetTableByIndex (TableIndex, &Table); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiNsLoadTable (TableIndex, ParentNode); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Update GPEs for any new _Lxx/_Exx methods. Ignore errors. The host is * responsible for discovering any new wake GPEs by running _PRW methods * that may have been loaded by this table. */ Status = AcpiTbGetOwnerId (TableIndex, &OwnerId); if (ACPI_SUCCESS (Status)) { AcpiEvUpdateGpes (OwnerId); } /* Invoke table handler */ AcpiTbNotifyTable (ACPI_TABLE_EVENT_LOAD, Table); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiTbInstallAndLoadTable * * PARAMETERS: Address - Physical address of the table * Flags - Allocation flags of the table * Table - Pointer to the table (required for * virtual origins, optional for * physical) * Override - Whether override should be performed * TableIndex - Where table index is returned * * RETURN: Status * * DESCRIPTION: Install and load an ACPI table * ******************************************************************************/ ACPI_STATUS AcpiTbInstallAndLoadTable ( ACPI_PHYSICAL_ADDRESS Address, UINT8 Flags, ACPI_TABLE_HEADER *Table, BOOLEAN Override, UINT32 *TableIndex) { ACPI_STATUS Status; UINT32 i; ACPI_FUNCTION_TRACE (TbInstallAndLoadTable); /* Install the table and load it into the namespace */ Status = AcpiTbInstallStandardTable (Address, Flags, Table, TRUE, Override, &i); if (ACPI_FAILURE (Status)) { goto Exit; } Status = AcpiTbLoadTable (i, AcpiGbl_RootNode); Exit: *TableIndex = i; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiTbUnloadTable * * PARAMETERS: TableIndex - Table index * * RETURN: Status * * DESCRIPTION: Unload an ACPI table * ******************************************************************************/ ACPI_STATUS AcpiTbUnloadTable ( UINT32 TableIndex) { ACPI_STATUS Status = AE_OK; ACPI_TABLE_HEADER *Table; ACPI_FUNCTION_TRACE (TbUnloadTable); /* Ensure the table is still loaded */ if (!AcpiTbIsTableLoaded (TableIndex)) { return_ACPI_STATUS (AE_NOT_EXIST); } /* Invoke table handler */ Status = AcpiGetTableByIndex (TableIndex, &Table); if (ACPI_SUCCESS (Status)) { AcpiTbNotifyTable (ACPI_TABLE_EVENT_UNLOAD, Table); } /* Delete the portion of the namespace owned by this table */ Status = AcpiTbDeleteNamespaceByOwner (TableIndex); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } (void) AcpiTbReleaseOwnerId (TableIndex); AcpiTbSetTableLoadedFlag (TableIndex, FALSE); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiTbNotifyTable * * PARAMETERS: Event - Table event * Table - Validated table pointer * * RETURN: None * * DESCRIPTION: Notify a table event to the users. * ******************************************************************************/ void AcpiTbNotifyTable ( UINT32 Event, void *Table) { /* Invoke table handler if present */ if (AcpiGbl_TableHandler) { (void) AcpiGbl_TableHandler (Event, Table, AcpiGbl_TableHandlerContext); } } src/acpica/source/components/tables/tbfadt.c000066400000000000000000001003161465205512700214440ustar00rootroot00000000000000/****************************************************************************** * * Module Name: tbfadt - FADT table utilities * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "actables.h" #define _COMPONENT ACPI_TABLES ACPI_MODULE_NAME ("tbfadt") /* Local prototypes */ static void AcpiTbInitGenericAddress ( ACPI_GENERIC_ADDRESS *GenericAddress, UINT8 SpaceId, UINT8 ByteWidth, UINT64 Address, const char *RegisterName, UINT8 Flags); static void AcpiTbConvertFadt ( void); static void AcpiTbSetupFadtRegisters ( void); static UINT64 AcpiTbSelectAddress ( char *RegisterName, UINT32 Address32, UINT64 Address64); /* Table for conversion of FADT to common internal format and FADT validation */ typedef struct acpi_fadt_info { const char *Name; UINT16 Address64; UINT16 Address32; UINT16 Length; UINT8 DefaultLength; UINT8 Flags; } ACPI_FADT_INFO; #define ACPI_FADT_OPTIONAL 0 #define ACPI_FADT_REQUIRED 1 #define ACPI_FADT_SEPARATE_LENGTH 2 #define ACPI_FADT_GPE_REGISTER 4 static ACPI_FADT_INFO FadtInfoTable[] = { {"Pm1aEventBlock", ACPI_FADT_OFFSET (XPm1aEventBlock), ACPI_FADT_OFFSET (Pm1aEventBlock), ACPI_FADT_OFFSET (Pm1EventLength), ACPI_PM1_REGISTER_WIDTH * 2, /* Enable + Status register */ ACPI_FADT_REQUIRED}, {"Pm1bEventBlock", ACPI_FADT_OFFSET (XPm1bEventBlock), ACPI_FADT_OFFSET (Pm1bEventBlock), ACPI_FADT_OFFSET (Pm1EventLength), ACPI_PM1_REGISTER_WIDTH * 2, /* Enable + Status register */ ACPI_FADT_OPTIONAL}, {"Pm1aControlBlock", ACPI_FADT_OFFSET (XPm1aControlBlock), ACPI_FADT_OFFSET (Pm1aControlBlock), ACPI_FADT_OFFSET (Pm1ControlLength), ACPI_PM1_REGISTER_WIDTH, ACPI_FADT_REQUIRED}, {"Pm1bControlBlock", ACPI_FADT_OFFSET (XPm1bControlBlock), ACPI_FADT_OFFSET (Pm1bControlBlock), ACPI_FADT_OFFSET (Pm1ControlLength), ACPI_PM1_REGISTER_WIDTH, ACPI_FADT_OPTIONAL}, {"Pm2ControlBlock", ACPI_FADT_OFFSET (XPm2ControlBlock), ACPI_FADT_OFFSET (Pm2ControlBlock), ACPI_FADT_OFFSET (Pm2ControlLength), ACPI_PM2_REGISTER_WIDTH, ACPI_FADT_SEPARATE_LENGTH}, {"PmTimerBlock", ACPI_FADT_OFFSET (XPmTimerBlock), ACPI_FADT_OFFSET (PmTimerBlock), ACPI_FADT_OFFSET (PmTimerLength), ACPI_PM_TIMER_WIDTH, ACPI_FADT_SEPARATE_LENGTH}, /* ACPI 5.0A: Timer is optional */ {"Gpe0Block", ACPI_FADT_OFFSET (XGpe0Block), ACPI_FADT_OFFSET (Gpe0Block), ACPI_FADT_OFFSET (Gpe0BlockLength), 0, ACPI_FADT_SEPARATE_LENGTH | ACPI_FADT_GPE_REGISTER}, {"Gpe1Block", ACPI_FADT_OFFSET (XGpe1Block), ACPI_FADT_OFFSET (Gpe1Block), ACPI_FADT_OFFSET (Gpe1BlockLength), 0, ACPI_FADT_SEPARATE_LENGTH | ACPI_FADT_GPE_REGISTER} }; #define ACPI_FADT_INFO_ENTRIES \ (sizeof (FadtInfoTable) / sizeof (ACPI_FADT_INFO)) /* Table used to split Event Blocks into separate status/enable registers */ typedef struct acpi_fadt_pm_info { ACPI_GENERIC_ADDRESS *Target; UINT16 Source; UINT8 RegisterNum; } ACPI_FADT_PM_INFO; static ACPI_FADT_PM_INFO FadtPmInfoTable[] = { {&AcpiGbl_XPm1aStatus, ACPI_FADT_OFFSET (XPm1aEventBlock), 0}, {&AcpiGbl_XPm1aEnable, ACPI_FADT_OFFSET (XPm1aEventBlock), 1}, {&AcpiGbl_XPm1bStatus, ACPI_FADT_OFFSET (XPm1bEventBlock), 0}, {&AcpiGbl_XPm1bEnable, ACPI_FADT_OFFSET (XPm1bEventBlock), 1} }; #define ACPI_FADT_PM_INFO_ENTRIES \ (sizeof (FadtPmInfoTable) / sizeof (ACPI_FADT_PM_INFO)) /******************************************************************************* * * FUNCTION: AcpiTbInitGenericAddress * * PARAMETERS: GenericAddress - GAS struct to be initialized * SpaceId - ACPI Space ID for this register * ByteWidth - Width of this register * Address - Address of the register * RegisterName - ASCII name of the ACPI register * * RETURN: None * * DESCRIPTION: Initialize a Generic Address Structure (GAS) * See the ACPI specification for a full description and * definition of this structure. * ******************************************************************************/ static void AcpiTbInitGenericAddress ( ACPI_GENERIC_ADDRESS *GenericAddress, UINT8 SpaceId, UINT8 ByteWidth, UINT64 Address, const char *RegisterName, UINT8 Flags) { UINT8 BitWidth; /* * Bit width field in the GAS is only one byte long, 255 max. * Check for BitWidth overflow in GAS. */ BitWidth = (UINT8) (ByteWidth * 8); if (ByteWidth > 31) /* (31*8)=248, (32*8)=256 */ { /* * No error for GPE blocks, because we do not use the BitWidth * for GPEs, the legacy length (ByteWidth) is used instead to * allow for a large number of GPEs. */ if (!(Flags & ACPI_FADT_GPE_REGISTER)) { ACPI_ERROR ((AE_INFO, "%s - 32-bit FADT register is too long (%u bytes, %u bits) " "to convert to GAS struct - 255 bits max, truncating", RegisterName, ByteWidth, (ByteWidth * 8))); } BitWidth = 255; } /* * The 64-bit Address field is non-aligned in the byte packed * GAS struct. */ ACPI_MOVE_64_TO_64 (&GenericAddress->Address, &Address); /* All other fields are byte-wide */ GenericAddress->SpaceId = SpaceId; GenericAddress->BitWidth = BitWidth; GenericAddress->BitOffset = 0; GenericAddress->AccessWidth = 0; /* Access width ANY */ } /******************************************************************************* * * FUNCTION: AcpiTbSelectAddress * * PARAMETERS: RegisterName - ASCII name of the ACPI register * Address32 - 32-bit address of the register * Address64 - 64-bit address of the register * * RETURN: The resolved 64-bit address * * DESCRIPTION: Select between 32-bit and 64-bit versions of addresses within * the FADT. Used for the FACS and DSDT addresses. * * NOTES: * * Check for FACS and DSDT address mismatches. An address mismatch between * the 32-bit and 64-bit address fields (FIRMWARE_CTRL/X_FIRMWARE_CTRL and * DSDT/X_DSDT) could be a corrupted address field or it might indicate * the presence of two FACS or two DSDT tables. * * November 2013: * By default, as per the ACPICA specification, a valid 64-bit address is * used regardless of the value of the 32-bit address. However, this * behavior can be overridden via the AcpiGbl_Use32BitFadtAddresses flag. * ******************************************************************************/ static UINT64 AcpiTbSelectAddress ( char *RegisterName, UINT32 Address32, UINT64 Address64) { if (!Address64) { /* 64-bit address is zero, use 32-bit address */ return ((UINT64) Address32); } if (Address32 && (Address64 != (UINT64) Address32)) { /* Address mismatch between 32-bit and 64-bit versions */ ACPI_BIOS_WARNING ((AE_INFO, "32/64X %s address mismatch in FADT: " "0x%8.8X/0x%8.8X%8.8X, using %u-bit address", RegisterName, Address32, ACPI_FORMAT_UINT64 (Address64), AcpiGbl_Use32BitFadtAddresses ? 32 : 64)); /* 32-bit address override */ if (AcpiGbl_Use32BitFadtAddresses) { return ((UINT64) Address32); } } /* Default is to use the 64-bit address */ return (Address64); } /******************************************************************************* * * FUNCTION: AcpiTbParseFadt * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Initialize the FADT, DSDT and FACS tables * (FADT contains the addresses of the DSDT and FACS) * ******************************************************************************/ void AcpiTbParseFadt ( void) { UINT32 Length; ACPI_TABLE_HEADER *Table; ACPI_TABLE_DESC *FadtDesc; ACPI_STATUS Status; /* * The FADT has multiple versions with different lengths, * and it contains pointers to both the DSDT and FACS tables. * * Get a local copy of the FADT and convert it to a common format * Map entire FADT, assumed to be smaller than one page. */ FadtDesc = &AcpiGbl_RootTableList.Tables[AcpiGbl_FadtIndex]; Status = AcpiTbGetTable (FadtDesc, &Table); if (ACPI_FAILURE (Status)) { return; } Length = FadtDesc->Length; /* * Validate the FADT checksum before we copy the table. Ignore * checksum error as we want to try to get the DSDT and FACS. */ (void) AcpiUtVerifyChecksum (Table, Length); /* Create a local copy of the FADT in common ACPI 2.0+ format */ AcpiTbCreateLocalFadt (Table, Length); /* All done with the real FADT, unmap it */ AcpiTbPutTable (FadtDesc); /* Obtain the DSDT and FACS tables via their addresses within the FADT */ AcpiTbInstallStandardTable ( (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XDsdt, ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE, &AcpiGbl_DsdtIndex); /* If Hardware Reduced flag is set, there is no FACS */ if (!AcpiGbl_ReducedHardware) { if (AcpiGbl_FADT.Facs) { AcpiTbInstallStandardTable ( (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.Facs, ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE, &AcpiGbl_FacsIndex); } if (AcpiGbl_FADT.XFacs) { AcpiTbInstallStandardTable ( (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XFacs, ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE, &AcpiGbl_XFacsIndex); } } } /******************************************************************************* * * FUNCTION: AcpiTbCreateLocalFadt * * PARAMETERS: Table - Pointer to BIOS FADT * Length - Length of the table * * RETURN: None * * DESCRIPTION: Get a local copy of the FADT and convert it to a common format. * Performs validation on some important FADT fields. * * NOTE: We create a local copy of the FADT regardless of the version. * ******************************************************************************/ void AcpiTbCreateLocalFadt ( ACPI_TABLE_HEADER *Table, UINT32 Length) { /* * Check if the FADT is larger than the largest table that we expect * (typically the current ACPI specification version). If so, truncate * the table, and issue a warning. */ if (Length > sizeof (ACPI_TABLE_FADT)) { ACPI_BIOS_WARNING ((AE_INFO, "FADT (revision %u) is longer than %s length, " "truncating length %u to %u", Table->Revision, ACPI_FADT_CONFORMANCE, Length, (UINT32) sizeof (ACPI_TABLE_FADT))); } /* Clear the entire local FADT */ memset (&AcpiGbl_FADT, 0, sizeof (ACPI_TABLE_FADT)); /* Copy the original FADT, up to sizeof (ACPI_TABLE_FADT) */ memcpy (&AcpiGbl_FADT, Table, ACPI_MIN (Length, sizeof (ACPI_TABLE_FADT))); /* Take a copy of the Hardware Reduced flag */ AcpiGbl_ReducedHardware = FALSE; if (AcpiGbl_FADT.Flags & ACPI_FADT_HW_REDUCED) { AcpiGbl_ReducedHardware = TRUE; } /* Convert the local copy of the FADT to the common internal format */ AcpiTbConvertFadt (); /* Initialize the global ACPI register structures */ AcpiTbSetupFadtRegisters (); } /******************************************************************************* * * FUNCTION: AcpiTbConvertFadt * * PARAMETERS: None - AcpiGbl_FADT is used. * * RETURN: None * * DESCRIPTION: Converts all versions of the FADT to a common internal format. * Expand 32-bit addresses to 64-bit as necessary. Also validate * important fields within the FADT. * * NOTE: AcpiGbl_FADT must be of size (ACPI_TABLE_FADT), and must * contain a copy of the actual BIOS-provided FADT. * * Notes on 64-bit register addresses: * * After this FADT conversion, later ACPICA code will only use the 64-bit "X" * fields of the FADT for all ACPI register addresses. * * The 64-bit X fields are optional extensions to the original 32-bit FADT * V1.0 fields. Even if they are present in the FADT, they are optional and * are unused if the BIOS sets them to zero. Therefore, we must copy/expand * 32-bit V1.0 fields to the 64-bit X fields if the 64-bit X field is originally * zero. * * For ACPI 1.0 FADTs (that contain no 64-bit addresses), all 32-bit address * fields are expanded to the corresponding 64-bit X fields in the internal * common FADT. * * For ACPI 2.0+ FADTs, all valid (non-zero) 32-bit address fields are expanded * to the corresponding 64-bit X fields, if the 64-bit field is originally * zero. Adhering to the ACPI specification, we completely ignore the 32-bit * field if the 64-bit field is valid, regardless of whether the host OS is * 32-bit or 64-bit. * * Possible additional checks: * (AcpiGbl_FADT.Pm1EventLength >= 4) * (AcpiGbl_FADT.Pm1ControlLength >= 2) * (AcpiGbl_FADT.PmTimerLength >= 4) * Gpe block lengths must be multiple of 2 * ******************************************************************************/ static void AcpiTbConvertFadt ( void) { const char *Name; ACPI_GENERIC_ADDRESS *Address64; UINT32 Address32; UINT8 Length; UINT8 Flags; UINT32 i; /* * For ACPI 1.0 FADTs (revision 1 or 2), ensure that reserved fields which * should be zero are indeed zero. This will workaround BIOSs that * inadvertently place values in these fields. * * The ACPI 1.0 reserved fields that will be zeroed are the bytes located * at offset 45, 55, 95, and the word located at offset 109, 110. * * Note: The FADT revision value is unreliable. Only the length can be * trusted. */ if (AcpiGbl_FADT.Header.Length <= ACPI_FADT_V2_SIZE) { AcpiGbl_FADT.PreferredProfile = 0; AcpiGbl_FADT.PstateControl = 0; AcpiGbl_FADT.CstControl = 0; AcpiGbl_FADT.BootFlags = 0; } /* * Now we can update the local FADT length to the length of the * current FADT version as defined by the ACPI specification. * Thus, we will have a common FADT internally. */ AcpiGbl_FADT.Header.Length = sizeof (ACPI_TABLE_FADT); /* * Expand the 32-bit DSDT addresses to 64-bit as necessary. * Later ACPICA code will always use the X 64-bit field. */ AcpiGbl_FADT.XDsdt = AcpiTbSelectAddress ("DSDT", AcpiGbl_FADT.Dsdt, AcpiGbl_FADT.XDsdt); /* If Hardware Reduced flag is set, we are all done */ if (AcpiGbl_ReducedHardware) { return; } /* Examine all of the 64-bit extended address fields (X fields) */ for (i = 0; i < ACPI_FADT_INFO_ENTRIES; i++) { /* * Get the 32-bit and 64-bit addresses, as well as the register * length and register name. */ Address32 = *ACPI_ADD_PTR (UINT32, &AcpiGbl_FADT, FadtInfoTable[i].Address32); Address64 = ACPI_ADD_PTR (ACPI_GENERIC_ADDRESS, &AcpiGbl_FADT, FadtInfoTable[i].Address64); Length = *ACPI_ADD_PTR (UINT8, &AcpiGbl_FADT, FadtInfoTable[i].Length); Name = FadtInfoTable[i].Name; Flags = FadtInfoTable[i].Flags; /* * Expand the ACPI 1.0 32-bit addresses to the ACPI 2.0 64-bit "X" * generic address structures as necessary. Later code will always use * the 64-bit address structures. * * November 2013: * Now always use the 64-bit address if it is valid (non-zero), in * accordance with the ACPI specification which states that a 64-bit * address supersedes the 32-bit version. This behavior can be * overridden by the AcpiGbl_Use32BitFadtAddresses flag. * * During 64-bit address construction and verification, * these cases are handled: * * Address32 zero, Address64 [don't care] - Use Address64 * * No override: if AcpiGbl_Use32BitFadtAddresses is FALSE, and: * Address32 non-zero, Address64 zero - Copy/use Address32 * Address32 non-zero == Address64 non-zero - Use Address64 * Address32 non-zero != Address64 non-zero - Warning, use Address64 * * Override: if AcpiGbl_Use32BitFadtAddresses is TRUE, and: * Address32 non-zero, Address64 zero - Copy/use Address32 * Address32 non-zero == Address64 non-zero - Copy/use Address32 * Address32 non-zero != Address64 non-zero - Warning, copy/use Address32 * * Note: SpaceId is always I/O for 32-bit legacy address fields */ if (Address32) { if (Address64->Address) { if (Address64->Address != (UINT64) Address32) { /* Address mismatch */ ACPI_BIOS_WARNING ((AE_INFO, "32/64X address mismatch in FADT/%s: " "0x%8.8X/0x%8.8X%8.8X, using %u-bit address", Name, Address32, ACPI_FORMAT_UINT64 (Address64->Address), AcpiGbl_Use32BitFadtAddresses ? 32 : 64)); } /* * For each extended field, check for length mismatch * between the legacy length field and the corresponding * 64-bit X length field. * Note: If the legacy length field is > 0xFF bits, ignore * this check. (GPE registers can be larger than the * 64-bit GAS structure can accommodate, 0xFF bits). */ if ((ACPI_MUL_8 (Length) <= ACPI_UINT8_MAX) && (Address64->BitWidth != ACPI_MUL_8 (Length))) { ACPI_BIOS_WARNING ((AE_INFO, "32/64X length mismatch in FADT/%s: %u/%u", Name, ACPI_MUL_8 (Length), Address64->BitWidth)); } } /* * Hardware register access code always uses the 64-bit fields. * So if the 64-bit field is zero or is to be overridden, * initialize it with the 32-bit fields. * Note that when the 32-bit address favor is specified, the * 64-bit fields are always re-initialized so that * AccessSize/BitWidth/BitOffset fields can be correctly * configured to the values to trigger a 32-bit compatible * access mode in the hardware register access code. */ if (!Address64->Address || AcpiGbl_Use32BitFadtAddresses) { AcpiTbInitGenericAddress (Address64, ACPI_ADR_SPACE_SYSTEM_IO, Length, (UINT64) Address32, Name, Flags); } } if (FadtInfoTable[i].Flags & ACPI_FADT_REQUIRED) { /* * Field is required (PM1aEvent, PM1aControl). * Both the address and length must be non-zero. */ if (!Address64->Address || !Length) { ACPI_BIOS_ERROR ((AE_INFO, "Required FADT field %s has zero address and/or length: " "0x%8.8X%8.8X/0x%X", Name, ACPI_FORMAT_UINT64 (Address64->Address), Length)); } } else if (FadtInfoTable[i].Flags & ACPI_FADT_SEPARATE_LENGTH) { /* * Field is optional (PM2Control, GPE0, GPE1) AND has its own * length field. If present, both the address and length must * be valid. */ if ((Address64->Address && !Length) || (!Address64->Address && Length)) { ACPI_BIOS_WARNING ((AE_INFO, "Optional FADT field %s has valid %s but zero %s: " "0x%8.8X%8.8X/0x%X", Name, (Length ? "Length" : "Address"), (Length ? "Address": "Length"), ACPI_FORMAT_UINT64 (Address64->Address), Length)); } } } } /******************************************************************************* * * FUNCTION: AcpiTbSetupFadtRegisters * * PARAMETERS: None, uses AcpiGbl_FADT. * * RETURN: None * * DESCRIPTION: Initialize global ACPI PM1 register definitions. Optionally, * force FADT register definitions to their default lengths. * ******************************************************************************/ static void AcpiTbSetupFadtRegisters ( void) { ACPI_GENERIC_ADDRESS *Target64; ACPI_GENERIC_ADDRESS *Source64; UINT8 Pm1RegisterByteWidth; UINT32 i; /* * Optionally check all register lengths against the default values and * update them if they are incorrect. */ if (AcpiGbl_UseDefaultRegisterWidths) { for (i = 0; i < ACPI_FADT_INFO_ENTRIES; i++) { Target64 = ACPI_ADD_PTR (ACPI_GENERIC_ADDRESS, &AcpiGbl_FADT, FadtInfoTable[i].Address64); /* * If a valid register (Address != 0) and the (DefaultLength > 0) * (Not a GPE register), then check the width against the default. */ if ((Target64->Address) && (FadtInfoTable[i].DefaultLength > 0) && (FadtInfoTable[i].DefaultLength != Target64->BitWidth)) { ACPI_BIOS_WARNING ((AE_INFO, "Invalid length for FADT/%s: %u, using default %u", FadtInfoTable[i].Name, Target64->BitWidth, FadtInfoTable[i].DefaultLength)); /* Incorrect size, set width to the default */ Target64->BitWidth = FadtInfoTable[i].DefaultLength; } } } /* * Get the length of the individual PM1 registers (enable and status). * Each register is defined to be (event block length / 2). Extra divide * by 8 converts bits to bytes. */ Pm1RegisterByteWidth = (UINT8) ACPI_DIV_16 (AcpiGbl_FADT.XPm1aEventBlock.BitWidth); /* * Calculate separate GAS structs for the PM1x (A/B) Status and Enable * registers. These addresses do not appear (directly) in the FADT, so it * is useful to pre-calculate them from the PM1 Event Block definitions. * * The PM event blocks are split into two register blocks, first is the * PM Status Register block, followed immediately by the PM Enable * Register block. Each is of length (Pm1EventLength/2) * * Note: The PM1A event block is required by the ACPI specification. * However, the PM1B event block is optional and is rarely, if ever, * used. */ for (i = 0; i < ACPI_FADT_PM_INFO_ENTRIES; i++) { Source64 = ACPI_ADD_PTR (ACPI_GENERIC_ADDRESS, &AcpiGbl_FADT, FadtPmInfoTable[i].Source); if (Source64->Address) { AcpiTbInitGenericAddress (FadtPmInfoTable[i].Target, Source64->SpaceId, Pm1RegisterByteWidth, Source64->Address + (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth), "PmRegisters", 0); } } } src/acpica/source/components/tables/tbfind.c000066400000000000000000000271071465205512700214540ustar00rootroot00000000000000/****************************************************************************** * * Module Name: tbfind - find table * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "actables.h" #define _COMPONENT ACPI_TABLES ACPI_MODULE_NAME ("tbfind") /******************************************************************************* * * FUNCTION: AcpiTbFindTable * * PARAMETERS: Signature - String with ACPI table signature * OemId - String with the table OEM ID * OemTableId - String with the OEM Table ID * TableIndex - Where the table index is returned * * RETURN: Status and table index * * DESCRIPTION: Find an ACPI table (in the RSDT/XSDT) that matches the * Signature, OEM ID and OEM Table ID. Returns an index that can * be used to get the table header or entire table. * ******************************************************************************/ ACPI_STATUS AcpiTbFindTable ( char *Signature, char *OemId, char *OemTableId, UINT32 *TableIndex) { ACPI_STATUS Status = AE_OK; ACPI_TABLE_HEADER Header; UINT32 i; ACPI_FUNCTION_TRACE (TbFindTable); /* Validate the input table signature */ if (!AcpiUtValidNameseg (Signature)) { return_ACPI_STATUS (AE_BAD_SIGNATURE); } /* Don't allow the OEM strings to be too long */ if ((strlen (OemId) > ACPI_OEM_ID_SIZE) || (strlen (OemTableId) > ACPI_OEM_TABLE_ID_SIZE)) { return_ACPI_STATUS (AE_AML_STRING_LIMIT); } /* Normalize the input strings */ memset (&Header, 0, sizeof (ACPI_TABLE_HEADER)); ACPI_COPY_NAMESEG (Header.Signature, Signature); strncpy (Header.OemId, OemId, ACPI_OEM_ID_SIZE); strncpy (Header.OemTableId, OemTableId, ACPI_OEM_TABLE_ID_SIZE); /* Search for the table */ (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; ++i) { if (memcmp (&(AcpiGbl_RootTableList.Tables[i].Signature), Header.Signature, ACPI_NAMESEG_SIZE)) { /* Not the requested table */ continue; } /* Table with matching signature has been found */ if (!AcpiGbl_RootTableList.Tables[i].Pointer) { /* Table is not currently mapped, map it */ Status = AcpiTbValidateTable (&AcpiGbl_RootTableList.Tables[i]); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; } if (!AcpiGbl_RootTableList.Tables[i].Pointer) { continue; } } /* Check for table match on all IDs */ if (!memcmp (AcpiGbl_RootTableList.Tables[i].Pointer->Signature, Header.Signature, ACPI_NAMESEG_SIZE) && (!OemId[0] || !memcmp (AcpiGbl_RootTableList.Tables[i].Pointer->OemId, Header.OemId, ACPI_OEM_ID_SIZE)) && (!OemTableId[0] || !memcmp (AcpiGbl_RootTableList.Tables[i].Pointer->OemTableId, Header.OemTableId, ACPI_OEM_TABLE_ID_SIZE))) { *TableIndex = i; ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Found table [%4.4s]\n", Header.Signature)); goto UnlockAndExit; } } Status = AE_NOT_FOUND; UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return_ACPI_STATUS (Status); } src/acpica/source/components/tables/tbinstal.c000066400000000000000000000431431465205512700220240ustar00rootroot00000000000000/****************************************************************************** * * Module Name: tbinstal - ACPI table installation and removal * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "actables.h" #define _COMPONENT ACPI_TABLES ACPI_MODULE_NAME ("tbinstal") /******************************************************************************* * * FUNCTION: AcpiTbInstallTableWithOverride * * PARAMETERS: NewTableDesc - New table descriptor to install * Override - Whether override should be performed * TableIndex - Where the table index is returned * * RETURN: None * * DESCRIPTION: Install an ACPI table into the global data structure. The * table override mechanism is called to allow the host * OS to replace any table before it is installed in the root * table array. * ******************************************************************************/ void AcpiTbInstallTableWithOverride ( ACPI_TABLE_DESC *NewTableDesc, BOOLEAN Override, UINT32 *TableIndex) { UINT32 i; ACPI_STATUS Status; Status = AcpiTbGetNextTableDescriptor (&i, NULL); if (ACPI_FAILURE (Status)) { return; } /* * ACPI Table Override: * * Before we install the table, let the host OS override it with a new * one if desired. Any table within the RSDT/XSDT can be replaced, * including the DSDT which is pointed to by the FADT. */ if (Override) { AcpiTbOverrideTable (NewTableDesc); } AcpiTbInitTableDescriptor (&AcpiGbl_RootTableList.Tables[i], NewTableDesc->Address, NewTableDesc->Flags, NewTableDesc->Pointer); AcpiTbPrintTableHeader (NewTableDesc->Address, NewTableDesc->Pointer); /* This synchronizes AcpiGbl_DsdtIndex */ *TableIndex = i; /* Set the global integer width (based upon revision of the DSDT) */ if (i == AcpiGbl_DsdtIndex) { AcpiUtSetIntegerWidth (NewTableDesc->Pointer->Revision); } } /******************************************************************************* * * FUNCTION: AcpiTbInstallStandardTable * * PARAMETERS: Address - Address of the table (might be a virtual * address depending on the TableFlags) * Flags - Flags for the table * Table - Pointer to the table (required for virtual * origins, optional for physical) * Reload - Whether reload should be performed * Override - Whether override should be performed * TableIndex - Where the table index is returned * * RETURN: Status * * DESCRIPTION: This function is called to verify and install an ACPI table. * When this function is called by "Load" or "LoadTable" opcodes, * or by AcpiLoadTable() API, the "Reload" parameter is set. * After successfully returning from this function, table is * "INSTALLED" but not "VALIDATED". * ******************************************************************************/ ACPI_STATUS AcpiTbInstallStandardTable ( ACPI_PHYSICAL_ADDRESS Address, UINT8 Flags, ACPI_TABLE_HEADER *Table, BOOLEAN Reload, BOOLEAN Override, UINT32 *TableIndex) { UINT32 i; ACPI_STATUS Status = AE_OK; ACPI_TABLE_DESC NewTableDesc; ACPI_FUNCTION_TRACE (TbInstallStandardTable); /* Acquire a temporary table descriptor for validation */ Status = AcpiTbAcquireTempTable (&NewTableDesc, Address, Flags, Table); if (ACPI_FAILURE (Status)) { ACPI_ERROR ((AE_INFO, "Could not acquire table length at %8.8X%8.8X", ACPI_FORMAT_UINT64 (Address))); return_ACPI_STATUS (Status); } /* * Optionally do not load any SSDTs from the RSDT/XSDT. This can * be useful for debugging ACPI problems on some machines. */ if (!Reload && AcpiGbl_DisableSsdtTableInstall && ACPI_COMPARE_NAMESEG (&NewTableDesc.Signature, ACPI_SIG_SSDT)) { ACPI_INFO (( "Ignoring installation of %4.4s at %8.8X%8.8X", NewTableDesc.Signature.Ascii, ACPI_FORMAT_UINT64 (Address))); goto ReleaseAndExit; } /* Acquire the table lock */ (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); /* Validate and verify a table before installation */ Status = AcpiTbVerifyTempTable (&NewTableDesc, NULL, &i); if (ACPI_FAILURE (Status)) { if (Status == AE_CTRL_TERMINATE) { /* * Table was unloaded, allow it to be reloaded. * As we are going to return AE_OK to the caller, we should * take the responsibility of freeing the input descriptor. * Refill the input descriptor to ensure * AcpiTbInstallTableWithOverride() can be called again to * indicate the re-installation. */ AcpiTbUninstallTable (&NewTableDesc); (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); *TableIndex = i; return_ACPI_STATUS (AE_OK); } goto UnlockAndExit; } /* Add the table to the global root table list */ AcpiTbInstallTableWithOverride (&NewTableDesc, Override, TableIndex); /* Invoke table handler */ (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); AcpiTbNotifyTable (ACPI_TABLE_EVENT_INSTALL, NewTableDesc.Pointer); (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); UnlockAndExit: /* Release the table lock */ (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); ReleaseAndExit: /* Release the temporary table descriptor */ AcpiTbReleaseTempTable (&NewTableDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiTbOverrideTable * * PARAMETERS: OldTableDesc - Validated table descriptor to be * overridden * * RETURN: None * * DESCRIPTION: Attempt table override by calling the OSL override functions. * Note: If the table is overridden, then the entire new table * is acquired and returned by this function. * Before/after invocation, the table descriptor is in a state * that is "VALIDATED". * ******************************************************************************/ void AcpiTbOverrideTable ( ACPI_TABLE_DESC *OldTableDesc) { ACPI_STATUS Status; ACPI_TABLE_DESC NewTableDesc; ACPI_TABLE_HEADER *Table; ACPI_PHYSICAL_ADDRESS Address; UINT32 Length; ACPI_ERROR_ONLY (char *OverrideType); /* (1) Attempt logical override (returns a logical address) */ Status = AcpiOsTableOverride (OldTableDesc->Pointer, &Table); if (ACPI_SUCCESS (Status) && Table) { AcpiTbAcquireTempTable (&NewTableDesc, ACPI_PTR_TO_PHYSADDR (Table), ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, Table); ACPI_ERROR_ONLY (OverrideType = "Logical"); goto FinishOverride; } /* (2) Attempt physical override (returns a physical address) */ Status = AcpiOsPhysicalTableOverride (OldTableDesc->Pointer, &Address, &Length); if (ACPI_SUCCESS (Status) && Address && Length) { AcpiTbAcquireTempTable (&NewTableDesc, Address, ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL); ACPI_ERROR_ONLY (OverrideType = "Physical"); goto FinishOverride; } return; /* There was no override */ FinishOverride: /* * Validate and verify a table before overriding, no nested table * duplication check as it's too complicated and unnecessary. */ Status = AcpiTbVerifyTempTable (&NewTableDesc, NULL, NULL); if (ACPI_FAILURE (Status)) { return; } ACPI_INFO (("%4.4s 0x%8.8X%8.8X" " %s table override, new table: 0x%8.8X%8.8X", OldTableDesc->Signature.Ascii, ACPI_FORMAT_UINT64 (OldTableDesc->Address), OverrideType, ACPI_FORMAT_UINT64 (NewTableDesc.Address))); /* We can now uninstall the original table */ AcpiTbUninstallTable (OldTableDesc); /* * Replace the original table descriptor and keep its state as * "VALIDATED". */ AcpiTbInitTableDescriptor (OldTableDesc, NewTableDesc.Address, NewTableDesc.Flags, NewTableDesc.Pointer); AcpiTbValidateTempTable (OldTableDesc); /* Release the temporary table descriptor */ AcpiTbReleaseTempTable (&NewTableDesc); } /******************************************************************************* * * FUNCTION: AcpiTbUninstallTable * * PARAMETERS: TableDesc - Table descriptor * * RETURN: None * * DESCRIPTION: Delete one internal ACPI table * ******************************************************************************/ void AcpiTbUninstallTable ( ACPI_TABLE_DESC *TableDesc) { ACPI_FUNCTION_TRACE (TbUninstallTable); /* Table must be installed */ if (!TableDesc->Address) { return_VOID; } AcpiTbInvalidateTable (TableDesc); if ((TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK) == ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL) { ACPI_FREE (TableDesc->Pointer); TableDesc->Pointer = NULL; } TableDesc->Address = ACPI_PTR_TO_PHYSADDR (NULL); return_VOID; } src/acpica/source/components/tables/tbprint.c000066400000000000000000000304111465205512700216600ustar00rootroot00000000000000/****************************************************************************** * * Module Name: tbprint - Table output utilities * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "actables.h" #include "acdisasm.h" #include "acutils.h" #define _COMPONENT ACPI_TABLES ACPI_MODULE_NAME ("tbprint") /* Local prototypes */ static void AcpiTbFixString ( char *String, ACPI_SIZE Length); static void AcpiTbCleanupTableHeader ( ACPI_TABLE_HEADER *OutHeader, ACPI_TABLE_HEADER *Header); /******************************************************************************* * * FUNCTION: AcpiTbFixString * * PARAMETERS: String - String to be repaired * Length - Maximum length * * RETURN: None * * DESCRIPTION: Replace every non-printable or non-ascii byte in the string * with a question mark '?'. * ******************************************************************************/ static void AcpiTbFixString ( char *String, ACPI_SIZE Length) { while (Length && *String) { if (!isprint ((int) (UINT8) *String)) { *String = '?'; } String++; Length--; } } /******************************************************************************* * * FUNCTION: AcpiTbCleanupTableHeader * * PARAMETERS: OutHeader - Where the cleaned header is returned * Header - Input ACPI table header * * RETURN: Returns the cleaned header in OutHeader * * DESCRIPTION: Copy the table header and ensure that all "string" fields in * the header consist of printable characters. * ******************************************************************************/ static void AcpiTbCleanupTableHeader ( ACPI_TABLE_HEADER *OutHeader, ACPI_TABLE_HEADER *Header) { memcpy (OutHeader, Header, sizeof (ACPI_TABLE_HEADER)); AcpiTbFixString (OutHeader->Signature, ACPI_NAMESEG_SIZE); AcpiTbFixString (OutHeader->OemId, ACPI_OEM_ID_SIZE); AcpiTbFixString (OutHeader->OemTableId, ACPI_OEM_TABLE_ID_SIZE); AcpiTbFixString (OutHeader->AslCompilerId, ACPI_NAMESEG_SIZE); } /******************************************************************************* * * FUNCTION: AcpiTbPrintTableHeader * * PARAMETERS: Address - Table physical address * Header - Table header * * RETURN: None * * DESCRIPTION: Print an ACPI table header. Special cases for FACS and RSDP. * ******************************************************************************/ void AcpiTbPrintTableHeader ( ACPI_PHYSICAL_ADDRESS Address, ACPI_TABLE_HEADER *Header) { ACPI_TABLE_HEADER LocalHeader; if (ACPI_COMPARE_NAMESEG (Header->Signature, ACPI_SIG_FACS)) { /* FACS only has signature and length fields */ ACPI_INFO (("%-4.4s 0x%8.8X%8.8X %06X", Header->Signature, ACPI_FORMAT_UINT64 (Address), Header->Length)); } else if (ACPI_VALIDATE_RSDP_SIG (ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->Signature)) { /* RSDP has no common fields */ memcpy (LocalHeader.OemId, ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->OemId, ACPI_OEM_ID_SIZE); AcpiTbFixString (LocalHeader.OemId, ACPI_OEM_ID_SIZE); ACPI_INFO (("RSDP 0x%8.8X%8.8X %06X (v%.2d %-6.6s)", ACPI_FORMAT_UINT64 (Address), (ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->Revision > 0) ? ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->Length : 20, ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->Revision, LocalHeader.OemId)); } else { /* Standard ACPI table with full common header */ AcpiTbCleanupTableHeader (&LocalHeader, Header); ACPI_INFO (( "%-4.4s 0x%8.8X%8.8X" " %06X (v%.2d %-6.6s %-8.8s %08X %-4.4s %08X)", LocalHeader.Signature, ACPI_FORMAT_UINT64 (Address), LocalHeader.Length, LocalHeader.Revision, LocalHeader.OemId, LocalHeader.OemTableId, LocalHeader.OemRevision, LocalHeader.AslCompilerId, LocalHeader.AslCompilerRevision)); } } src/acpica/source/components/tables/tbutils.c000066400000000000000000000530461465205512700216750ustar00rootroot00000000000000/****************************************************************************** * * Module Name: tbutils - ACPI Table utilities * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "actables.h" #define _COMPONENT ACPI_TABLES ACPI_MODULE_NAME ("tbutils") /* Local prototypes */ static ACPI_PHYSICAL_ADDRESS AcpiTbGetRootTableEntry ( UINT8 *TableEntry, UINT32 TableEntrySize); #if (!ACPI_REDUCED_HARDWARE) /******************************************************************************* * * FUNCTION: AcpiTbInitializeFacs * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Create a permanent mapping for the FADT and save it in a global * for accessing the Global Lock and Firmware Waking Vector * ******************************************************************************/ ACPI_STATUS AcpiTbInitializeFacs ( void) { ACPI_TABLE_FACS *Facs; /* If Hardware Reduced flag is set, there is no FACS */ if (AcpiGbl_ReducedHardware) { AcpiGbl_FACS = NULL; return (AE_OK); } else if (AcpiGbl_FADT.XFacs && (!AcpiGbl_FADT.Facs || !AcpiGbl_Use32BitFacsAddresses)) { (void) AcpiGetTableByIndex (AcpiGbl_XFacsIndex, ACPI_CAST_INDIRECT_PTR (ACPI_TABLE_HEADER, &Facs)); AcpiGbl_FACS = Facs; } else if (AcpiGbl_FADT.Facs) { (void) AcpiGetTableByIndex (AcpiGbl_FacsIndex, ACPI_CAST_INDIRECT_PTR (ACPI_TABLE_HEADER, &Facs)); AcpiGbl_FACS = Facs; } /* If there is no FACS, just continue. There was already an error msg */ return (AE_OK); } #endif /* !ACPI_REDUCED_HARDWARE */ /******************************************************************************* * * FUNCTION: AcpiTbCheckDsdtHeader * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Quick compare to check validity of the DSDT. This will detect * if the DSDT has been replaced from outside the OS and/or if * the DSDT header has been corrupted. * ******************************************************************************/ void AcpiTbCheckDsdtHeader ( void) { /* Compare original length and checksum to current values */ if (AcpiGbl_OriginalDsdtHeader.Length != AcpiGbl_DSDT->Length || AcpiGbl_OriginalDsdtHeader.Checksum != AcpiGbl_DSDT->Checksum) { ACPI_BIOS_ERROR ((AE_INFO, "The DSDT has been corrupted or replaced - " "old, new headers below")); AcpiTbPrintTableHeader (0, &AcpiGbl_OriginalDsdtHeader); AcpiTbPrintTableHeader (0, AcpiGbl_DSDT); /* Disable further error messages */ AcpiGbl_OriginalDsdtHeader.Length = AcpiGbl_DSDT->Length; AcpiGbl_OriginalDsdtHeader.Checksum = AcpiGbl_DSDT->Checksum; } } /******************************************************************************* * * FUNCTION: AcpiTbCopyDsdt * * PARAMETERS: TableIndex - Index of installed table to copy * * RETURN: The copied DSDT * * DESCRIPTION: Implements a subsystem option to copy the DSDT to local memory. * Some very bad BIOSs are known to either corrupt the DSDT or * install a new, bad DSDT. This copy works around the problem. * ******************************************************************************/ ACPI_TABLE_HEADER * AcpiTbCopyDsdt ( UINT32 TableIndex) { ACPI_TABLE_HEADER *NewTable; ACPI_TABLE_DESC *TableDesc; TableDesc = &AcpiGbl_RootTableList.Tables[TableIndex]; NewTable = ACPI_ALLOCATE (TableDesc->Length); if (!NewTable) { ACPI_ERROR ((AE_INFO, "Could not copy DSDT of length 0x%X", TableDesc->Length)); return (NULL); } memcpy (NewTable, TableDesc->Pointer, TableDesc->Length); AcpiTbUninstallTable (TableDesc); AcpiTbInitTableDescriptor ( &AcpiGbl_RootTableList.Tables[AcpiGbl_DsdtIndex], ACPI_PTR_TO_PHYSADDR (NewTable), ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL, NewTable); ACPI_INFO (( "Forced DSDT copy: length 0x%05X copied locally, original unmapped", NewTable->Length)); return (NewTable); } /******************************************************************************* * * FUNCTION: AcpiTbGetRootTableEntry * * PARAMETERS: TableEntry - Pointer to the RSDT/XSDT table entry * TableEntrySize - sizeof 32 or 64 (RSDT or XSDT) * * RETURN: Physical address extracted from the root table * * DESCRIPTION: Get one root table entry. Handles 32-bit and 64-bit cases on * both 32-bit and 64-bit platforms * * NOTE: ACPI_PHYSICAL_ADDRESS is 32-bit on 32-bit platforms, 64-bit on * 64-bit platforms. * ******************************************************************************/ static ACPI_PHYSICAL_ADDRESS AcpiTbGetRootTableEntry ( UINT8 *TableEntry, UINT32 TableEntrySize) { UINT32 Address32; UINT64 Address64; /* * Get the table physical address (32-bit for RSDT, 64-bit for XSDT): * Note: Addresses are 32-bit aligned (not 64) in both RSDT and XSDT */ if (TableEntrySize == ACPI_RSDT_ENTRY_SIZE) { /* * 32-bit platform, RSDT: Return 32-bit table entry * 64-bit platform, RSDT: Expand 32-bit to 64-bit and return */ ACPI_MOVE_32_TO_32(&Address32, TableEntry); return Address32; } else { /* * 32-bit platform, XSDT: Truncate 64-bit to 32-bit and return * 64-bit platform, XSDT: Move (unaligned) 64-bit to local, * return 64-bit */ ACPI_MOVE_64_TO_64 (&Address64, TableEntry); #if ACPI_MACHINE_WIDTH == 32 if (Address64 > ACPI_UINT32_MAX) { /* Will truncate 64-bit address to 32 bits, issue warning */ ACPI_BIOS_WARNING ((AE_INFO, "64-bit Physical Address in XSDT is too large (0x%8.8X%8.8X)," " truncating", ACPI_FORMAT_UINT64 (Address64))); } #endif return ((ACPI_PHYSICAL_ADDRESS) (Address64)); } } /******************************************************************************* * * FUNCTION: AcpiTbParseRootTable * * PARAMETERS: RsdpAddress - Pointer to the RSDP * * RETURN: Status * * DESCRIPTION: This function is called to parse the Root System Description * Table (RSDT or XSDT) * * NOTE: Tables are mapped (not copied) for efficiency. The FACS must * be mapped and cannot be copied because it contains the actual * memory location of the ACPI Global Lock. * ******************************************************************************/ ACPI_STATUS ACPI_INIT_FUNCTION AcpiTbParseRootTable ( ACPI_PHYSICAL_ADDRESS RsdpAddress) { ACPI_TABLE_RSDP *Rsdp; UINT32 TableEntrySize; UINT32 i; UINT32 TableCount; ACPI_TABLE_HEADER *Table; ACPI_PHYSICAL_ADDRESS Address; UINT32 Length; UINT8 *TableEntry; ACPI_STATUS Status; UINT32 TableIndex; ACPI_FUNCTION_TRACE (TbParseRootTable); /* Map the entire RSDP and extract the address of the RSDT or XSDT */ Rsdp = AcpiOsMapMemory (RsdpAddress, sizeof (ACPI_TABLE_RSDP)); if (!Rsdp) { return_ACPI_STATUS (AE_NO_MEMORY); } AcpiTbPrintTableHeader (RsdpAddress, ACPI_CAST_PTR (ACPI_TABLE_HEADER, Rsdp)); /* Use XSDT if present and not overridden. Otherwise, use RSDT */ if ((Rsdp->Revision > 1) && Rsdp->XsdtPhysicalAddress && !AcpiGbl_DoNotUseXsdt) { /* * RSDP contains an XSDT (64-bit physical addresses). We must use * the XSDT if the revision is > 1 and the XSDT pointer is present, * as per the ACPI specification. */ Address = (ACPI_PHYSICAL_ADDRESS) Rsdp->XsdtPhysicalAddress; TableEntrySize = ACPI_XSDT_ENTRY_SIZE; } else { /* Root table is an RSDT (32-bit physical addresses) */ Address = (ACPI_PHYSICAL_ADDRESS) Rsdp->RsdtPhysicalAddress; TableEntrySize = ACPI_RSDT_ENTRY_SIZE; } /* * It is not possible to map more than one entry in some environments, * so unmap the RSDP here before mapping other tables */ AcpiOsUnmapMemory (Rsdp, sizeof (ACPI_TABLE_RSDP)); /* Map the RSDT/XSDT table header to get the full table length */ Table = AcpiOsMapMemory (Address, sizeof (ACPI_TABLE_HEADER)); if (!Table) { return_ACPI_STATUS (AE_NO_MEMORY); } AcpiTbPrintTableHeader (Address, Table); /* * Validate length of the table, and map entire table. * Minimum length table must contain at least one entry. */ Length = Table->Length; AcpiOsUnmapMemory (Table, sizeof (ACPI_TABLE_HEADER)); if (Length < (sizeof (ACPI_TABLE_HEADER) + TableEntrySize)) { ACPI_BIOS_ERROR ((AE_INFO, "Invalid table length 0x%X in RSDT/XSDT", Length)); return_ACPI_STATUS (AE_INVALID_TABLE_LENGTH); } Table = AcpiOsMapMemory (Address, Length); if (!Table) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Validate the root table checksum */ Status = AcpiUtVerifyChecksum (Table, Length); if (ACPI_FAILURE (Status)) { AcpiOsUnmapMemory (Table, Length); return_ACPI_STATUS (Status); } /* Get the number of entries and pointer to first entry */ TableCount = (UINT32) ((Table->Length - sizeof (ACPI_TABLE_HEADER)) / TableEntrySize); TableEntry = ACPI_ADD_PTR (UINT8, Table, sizeof (ACPI_TABLE_HEADER)); /* Initialize the root table array from the RSDT/XSDT */ for (i = 0; i < TableCount; i++) { /* Get the table physical address (32-bit for RSDT, 64-bit for XSDT) */ Address = AcpiTbGetRootTableEntry (TableEntry, TableEntrySize); /* Skip NULL entries in RSDT/XSDT */ if (!Address) { goto NextTable; } Status = AcpiTbInstallStandardTable (Address, ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE, &TableIndex); if (ACPI_SUCCESS (Status) && ACPI_COMPARE_NAMESEG ( &AcpiGbl_RootTableList.Tables[TableIndex].Signature, ACPI_SIG_FADT)) { AcpiGbl_FadtIndex = TableIndex; AcpiTbParseFadt (); } NextTable: TableEntry += TableEntrySize; } AcpiOsUnmapMemory (Table, Length); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiTbGetTable * * PARAMETERS: TableDesc - Table descriptor * OutTable - Where the pointer to the table is returned * * RETURN: Status and pointer to the requested table * * DESCRIPTION: Increase a reference to a table descriptor and return the * validated table pointer. * If the table descriptor is an entry of the root table list, * this API must be invoked with ACPI_MTX_TABLES acquired. * ******************************************************************************/ ACPI_STATUS AcpiTbGetTable ( ACPI_TABLE_DESC *TableDesc, ACPI_TABLE_HEADER **OutTable) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiTbGetTable); if (TableDesc->ValidationCount == 0) { /* Table need to be "VALIDATED" */ Status = AcpiTbValidateTable (TableDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } if (TableDesc->ValidationCount < ACPI_MAX_TABLE_VALIDATIONS) { TableDesc->ValidationCount++; /* * Detect ValidationCount overflows to ensure that the warning * message will only be printed once. */ if (TableDesc->ValidationCount >= ACPI_MAX_TABLE_VALIDATIONS) { ACPI_WARNING((AE_INFO, "Table %p, Validation count overflows\n", TableDesc)); } } *OutTable = TableDesc->Pointer; return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiTbPutTable * * PARAMETERS: TableDesc - Table descriptor * * RETURN: None * * DESCRIPTION: Decrease a reference to a table descriptor and release the * validated table pointer if no references. * If the table descriptor is an entry of the root table list, * this API must be invoked with ACPI_MTX_TABLES acquired. * ******************************************************************************/ void AcpiTbPutTable ( ACPI_TABLE_DESC *TableDesc) { ACPI_FUNCTION_TRACE (AcpiTbPutTable); if (TableDesc->ValidationCount < ACPI_MAX_TABLE_VALIDATIONS) { TableDesc->ValidationCount--; /* * Detect ValidationCount underflows to ensure that the warning * message will only be printed once. */ if (TableDesc->ValidationCount >= ACPI_MAX_TABLE_VALIDATIONS) { ACPI_WARNING ((AE_INFO, "Table %p, Validation count underflows\n", TableDesc)); return_VOID; } } if (TableDesc->ValidationCount == 0) { /* Table need to be "INVALIDATED" */ AcpiTbInvalidateTable (TableDesc); } return_VOID; } src/acpica/source/components/tables/tbxface.c000066400000000000000000000604331465205512700216210ustar00rootroot00000000000000/****************************************************************************** * * Module Name: tbxface - ACPI table-oriented external interfaces * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #include "actables.h" #define _COMPONENT ACPI_TABLES ACPI_MODULE_NAME ("tbxface") /******************************************************************************* * * FUNCTION: AcpiAllocateRootTable * * PARAMETERS: InitialTableCount - Size of InitialTableArray, in number of * ACPI_TABLE_DESC structures * * RETURN: Status * * DESCRIPTION: Allocate a root table array. Used by iASL compiler and * AcpiInitializeTables. * ******************************************************************************/ ACPI_STATUS AcpiAllocateRootTable ( UINT32 InitialTableCount) { AcpiGbl_RootTableList.MaxTableCount = InitialTableCount; AcpiGbl_RootTableList.Flags = ACPI_ROOT_ALLOW_RESIZE; return (AcpiTbResizeRootTableList ()); } /******************************************************************************* * * FUNCTION: AcpiInitializeTables * * PARAMETERS: InitialTableArray - Pointer to an array of pre-allocated * ACPI_TABLE_DESC structures. If NULL, the * array is dynamically allocated. * InitialTableCount - Size of InitialTableArray, in number of * ACPI_TABLE_DESC structures * AllowResize - Flag to tell Table Manager if resize of * pre-allocated array is allowed. Ignored * if InitialTableArray is NULL. * * RETURN: Status * * DESCRIPTION: Initialize the table manager, get the RSDP and RSDT/XSDT. * * NOTE: Allows static allocation of the initial table array in order * to avoid the use of dynamic memory in confined environments * such as the kernel boot sequence where it may not be available. * * If the host OS memory managers are initialized, use NULL for * InitialTableArray, and the table will be dynamically allocated. * ******************************************************************************/ ACPI_STATUS ACPI_INIT_FUNCTION AcpiInitializeTables ( ACPI_TABLE_DESC *InitialTableArray, UINT32 InitialTableCount, BOOLEAN AllowResize) { ACPI_PHYSICAL_ADDRESS RsdpAddress; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiInitializeTables); /* * Setup the Root Table Array and allocate the table array * if requested */ if (!InitialTableArray) { Status = AcpiAllocateRootTable (InitialTableCount); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } else { /* Root Table Array has been statically allocated by the host */ memset (InitialTableArray, 0, (ACPI_SIZE) InitialTableCount * sizeof (ACPI_TABLE_DESC)); AcpiGbl_RootTableList.Tables = InitialTableArray; AcpiGbl_RootTableList.MaxTableCount = InitialTableCount; AcpiGbl_RootTableList.Flags = ACPI_ROOT_ORIGIN_UNKNOWN; if (AllowResize) { AcpiGbl_RootTableList.Flags |= ACPI_ROOT_ALLOW_RESIZE; } } /* Get the address of the RSDP */ RsdpAddress = AcpiOsGetRootPointer (); if (!RsdpAddress) { return_ACPI_STATUS (AE_NOT_FOUND); } /* * Get the root table (RSDT or XSDT) and extract all entries to the local * Root Table Array. This array contains the information of the RSDT/XSDT * in a common, more usable format. */ Status = AcpiTbParseRootTable (RsdpAddress); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL_INIT (AcpiInitializeTables) /******************************************************************************* * * FUNCTION: AcpiReallocateRootTable * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Reallocate Root Table List into dynamic memory. Copies the * root list from the previously provided scratch area. Should * be called once dynamic memory allocation is available in the * kernel. * ******************************************************************************/ ACPI_STATUS ACPI_INIT_FUNCTION AcpiReallocateRootTable ( void) { ACPI_STATUS Status; ACPI_TABLE_DESC *TableDesc; UINT32 i, j; ACPI_FUNCTION_TRACE (AcpiReallocateRootTable); /* * If there are tables unverified, it is required to reallocate the * root table list to clean up invalid table entries. Otherwise only * reallocate the root table list if the host provided a static buffer * for the table array in the call to AcpiInitializeTables(). */ if ((AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED) && AcpiGbl_EnableTableValidation) { return_ACPI_STATUS (AE_SUPPORT); } (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); /* * Ensure OS early boot logic, which is required by some hosts. If the * table state is reported to be wrong, developers should fix the * issue by invoking AcpiPutTable() for the reported table during the * early stage. */ for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; ++i) { TableDesc = &AcpiGbl_RootTableList.Tables[i]; if (TableDesc->Pointer) { ACPI_ERROR ((AE_INFO, "Table [%4.4s] is not invalidated during early boot stage", TableDesc->Signature.Ascii)); } } if (!AcpiGbl_EnableTableValidation) { /* * Now it's safe to do full table validation. We can do deferred * table initialization here once the flag is set. */ AcpiGbl_EnableTableValidation = TRUE; for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; ++i) { TableDesc = &AcpiGbl_RootTableList.Tables[i]; if (!(TableDesc->Flags & ACPI_TABLE_IS_VERIFIED)) { Status = AcpiTbVerifyTempTable (TableDesc, NULL, &j); if (ACPI_FAILURE (Status)) { AcpiTbUninstallTable (TableDesc); } } } } AcpiGbl_RootTableList.Flags |= ACPI_ROOT_ALLOW_RESIZE; Status = AcpiTbResizeRootTableList (); AcpiGbl_RootTableList.Flags |= ACPI_ROOT_ORIGIN_ALLOCATED; (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL_INIT (AcpiReallocateRootTable) /******************************************************************************* * * FUNCTION: AcpiGetTableHeader * * PARAMETERS: Signature - ACPI signature of needed table * Instance - Which instance (for SSDTs) * OutTableHeader - The pointer to the where the table header * is returned * * RETURN: Status and a copy of the table header * * DESCRIPTION: Finds and returns an ACPI table header. Caller provides the * memory where a copy of the header is to be returned * (fixed length). * ******************************************************************************/ ACPI_STATUS AcpiGetTableHeader ( char *Signature, UINT32 Instance, ACPI_TABLE_HEADER *OutTableHeader) { UINT32 i; UINT32 j; ACPI_TABLE_HEADER *Header; /* Parameter validation */ if (!Signature || !OutTableHeader) { return (AE_BAD_PARAMETER); } /* Walk the root table list */ for (i = 0, j = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++) { if (!ACPI_COMPARE_NAMESEG ( &(AcpiGbl_RootTableList.Tables[i].Signature), Signature)) { continue; } if (++j < Instance) { continue; } if (!AcpiGbl_RootTableList.Tables[i].Pointer) { if ((AcpiGbl_RootTableList.Tables[i].Flags & ACPI_TABLE_ORIGIN_MASK) == ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL) { Header = AcpiOsMapMemory ( AcpiGbl_RootTableList.Tables[i].Address, sizeof (ACPI_TABLE_HEADER)); if (!Header) { return (AE_NO_MEMORY); } memcpy (OutTableHeader, Header, sizeof (ACPI_TABLE_HEADER)); AcpiOsUnmapMemory (Header, sizeof (ACPI_TABLE_HEADER)); } else { return (AE_NOT_FOUND); } } else { memcpy (OutTableHeader, AcpiGbl_RootTableList.Tables[i].Pointer, sizeof (ACPI_TABLE_HEADER)); } return (AE_OK); } return (AE_NOT_FOUND); } ACPI_EXPORT_SYMBOL (AcpiGetTableHeader) /******************************************************************************* * * FUNCTION: AcpiGetTable * * PARAMETERS: Signature - ACPI signature of needed table * Instance - Which instance (for SSDTs) * OutTable - Where the pointer to the table is returned * * RETURN: Status and pointer to the requested table * * DESCRIPTION: Finds and verifies an ACPI table. Table must be in the * RSDT/XSDT. * Note that an early stage AcpiGetTable() call must be paired * with an early stage AcpiPutTable() call. otherwise the table * pointer mapped by the early stage mapping implementation may be * erroneously unmapped by the late stage unmapping implementation * in an AcpiPutTable() invoked during the late stage. * ******************************************************************************/ ACPI_STATUS AcpiGetTable ( char *Signature, UINT32 Instance, ACPI_TABLE_HEADER **OutTable) { UINT32 i; UINT32 j; ACPI_STATUS Status = AE_NOT_FOUND; ACPI_TABLE_DESC *TableDesc; /* Parameter validation */ if (!Signature || !OutTable) { return (AE_BAD_PARAMETER); } /* * Note that the following line is required by some OSPMs, they only * check if the returned table is NULL instead of the returned status * to determined if this function is succeeded. */ *OutTable = NULL; (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); /* Walk the root table list */ for (i = 0, j = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++) { TableDesc = &AcpiGbl_RootTableList.Tables[i]; if (!ACPI_COMPARE_NAMESEG (&TableDesc->Signature, Signature)) { continue; } if (++j < Instance) { continue; } Status = AcpiTbGetTable (TableDesc, OutTable); break; } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return (Status); } ACPI_EXPORT_SYMBOL (AcpiGetTable) /******************************************************************************* * * FUNCTION: AcpiPutTable * * PARAMETERS: Table - The pointer to the table * * RETURN: None * * DESCRIPTION: Release a table returned by AcpiGetTable() and its clones. * Note that it is not safe if this function was invoked after an * uninstallation happened to the original table descriptor. * Currently there is no OSPMs' requirement to handle such * situations. * ******************************************************************************/ void AcpiPutTable ( ACPI_TABLE_HEADER *Table) { UINT32 i; ACPI_TABLE_DESC *TableDesc; ACPI_FUNCTION_TRACE (AcpiPutTable); if (!Table) { return_VOID; } (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); /* Walk the root table list */ for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++) { TableDesc = &AcpiGbl_RootTableList.Tables[i]; if (TableDesc->Pointer != Table) { continue; } AcpiTbPutTable (TableDesc); break; } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return_VOID; } ACPI_EXPORT_SYMBOL (AcpiPutTable) /******************************************************************************* * * FUNCTION: AcpiGetTableByIndex * * PARAMETERS: TableIndex - Table index * OutTable - Where the pointer to the table is returned * * RETURN: Status and pointer to the requested table * * DESCRIPTION: Obtain a table by an index into the global table list. Used * internally also. * ******************************************************************************/ ACPI_STATUS AcpiGetTableByIndex ( UINT32 TableIndex, ACPI_TABLE_HEADER **OutTable) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiGetTableByIndex); /* Parameter validation */ if (!OutTable) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* * Note that the following line is required by some OSPMs, they only * check if the returned table is NULL instead of the returned status * to determined if this function is succeeded. */ *OutTable = NULL; (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); /* Validate index */ if (TableIndex >= AcpiGbl_RootTableList.CurrentTableCount) { Status = AE_BAD_PARAMETER; goto UnlockAndExit; } Status = AcpiTbGetTable ( &AcpiGbl_RootTableList.Tables[TableIndex], OutTable); UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiGetTableByIndex) /******************************************************************************* * * FUNCTION: AcpiInstallTableHandler * * PARAMETERS: Handler - Table event handler * Context - Value passed to the handler on each event * * RETURN: Status * * DESCRIPTION: Install a global table event handler. * ******************************************************************************/ ACPI_STATUS AcpiInstallTableHandler ( ACPI_TABLE_HANDLER Handler, void *Context) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiInstallTableHandler); if (!Handler) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Don't allow more than one handler */ if (AcpiGbl_TableHandler) { Status = AE_ALREADY_EXISTS; goto Cleanup; } /* Install the handler */ AcpiGbl_TableHandler = Handler; AcpiGbl_TableHandlerContext = Context; Cleanup: (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiInstallTableHandler) /******************************************************************************* * * FUNCTION: AcpiRemoveTableHandler * * PARAMETERS: Handler - Table event handler that was installed * previously. * * RETURN: Status * * DESCRIPTION: Remove a table event handler * ******************************************************************************/ ACPI_STATUS AcpiRemoveTableHandler ( ACPI_TABLE_HANDLER Handler) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiRemoveTableHandler); Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Make sure that the installed handler is the same */ if (!Handler || Handler != AcpiGbl_TableHandler) { Status = AE_BAD_PARAMETER; goto Cleanup; } /* Remove the handler */ AcpiGbl_TableHandler = NULL; Cleanup: (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiRemoveTableHandler) src/acpica/source/components/tables/tbxfload.c000066400000000000000000000537431465205512700220160ustar00rootroot00000000000000/****************************************************************************** * * Module Name: tbxfload - Table load/unload external interfaces * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "actables.h" #include "acevents.h" #define _COMPONENT ACPI_TABLES ACPI_MODULE_NAME ("tbxfload") /******************************************************************************* * * FUNCTION: AcpiLoadTables * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Load the ACPI tables from the RSDT/XSDT * ******************************************************************************/ ACPI_STATUS ACPI_INIT_FUNCTION AcpiLoadTables ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiLoadTables); /* * Install the default operation region handlers. These are the * handlers that are defined by the ACPI specification to be * "always accessible" -- namely, SystemMemory, SystemIO, and * PCI_Config. This also means that no _REG methods need to be * run for these address spaces. We need to have these handlers * installed before any AML code can be executed, especially any * module-level code (11/2015). * Note that we allow OSPMs to install their own region handlers * between AcpiInitializeSubsystem() and AcpiLoadTables() to use * their customized default region handlers. */ Status = AcpiEvInstallRegionHandlers (); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "During Region initialization")); return_ACPI_STATUS (Status); } /* Load the namespace from the tables */ Status = AcpiTbLoadNamespace (); /* Don't let single failures abort the load */ if (Status == AE_CTRL_TERMINATE) { Status = AE_OK; } if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "While loading namespace from ACPI tables")); } /* * Initialize the objects in the namespace that remain uninitialized. * This runs the executable AML that may be part of the declaration of * these name objects: * OperationRegions, BufferFields, Buffers, and Packages. * */ Status = AcpiNsInitializeObjects (); if (ACPI_SUCCESS (Status)) { AcpiGbl_NamespaceInitialized = TRUE; } return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL_INIT (AcpiLoadTables) /******************************************************************************* * * FUNCTION: AcpiTbLoadNamespace * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Load the namespace from the DSDT and all SSDTs/PSDTs found in * the RSDT/XSDT. * ******************************************************************************/ ACPI_STATUS AcpiTbLoadNamespace ( void) { ACPI_STATUS Status; UINT32 i; ACPI_TABLE_HEADER *NewDsdt; ACPI_TABLE_DESC *Table; UINT32 TablesLoaded = 0; UINT32 TablesFailed = 0; ACPI_FUNCTION_TRACE (TbLoadNamespace); (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); /* * Load the namespace. The DSDT is required, but any SSDT and * PSDT tables are optional. Verify the DSDT. */ Table = &AcpiGbl_RootTableList.Tables[AcpiGbl_DsdtIndex]; if (!AcpiGbl_RootTableList.CurrentTableCount || !ACPI_COMPARE_NAMESEG (Table->Signature.Ascii, ACPI_SIG_DSDT) || ACPI_FAILURE (AcpiTbValidateTable (Table))) { Status = AE_NO_ACPI_TABLES; goto UnlockAndExit; } /* * Save the DSDT pointer for simple access. This is the mapped memory * address. We must take care here because the address of the .Tables * array can change dynamically as tables are loaded at run-time. Note: * .Pointer field is not validated until after call to AcpiTbValidateTable. */ AcpiGbl_DSDT = Table->Pointer; /* * Optionally copy the entire DSDT to local memory (instead of simply * mapping it.) There are some BIOSs that corrupt or replace the original * DSDT, creating the need for this option. Default is FALSE, do not copy * the DSDT. */ if (AcpiGbl_CopyDsdtLocally) { NewDsdt = AcpiTbCopyDsdt (AcpiGbl_DsdtIndex); if (NewDsdt) { AcpiGbl_DSDT = NewDsdt; } } /* * Save the original DSDT header for detection of table corruption * and/or replacement of the DSDT from outside the OS. */ memcpy (&AcpiGbl_OriginalDsdtHeader, AcpiGbl_DSDT, sizeof (ACPI_TABLE_HEADER)); /* Load and parse tables */ (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); Status = AcpiNsLoadTable (AcpiGbl_DsdtIndex, AcpiGbl_RootNode); (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "[DSDT] table load failed")); TablesFailed++; } else { TablesLoaded++; } /* Load any SSDT or PSDT tables. Note: Loop leaves tables locked */ for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; ++i) { Table = &AcpiGbl_RootTableList.Tables[i]; if (!Table->Address || (!ACPI_COMPARE_NAMESEG (Table->Signature.Ascii, ACPI_SIG_SSDT) && !ACPI_COMPARE_NAMESEG (Table->Signature.Ascii, ACPI_SIG_PSDT) && !ACPI_COMPARE_NAMESEG (Table->Signature.Ascii, ACPI_SIG_OSDT)) || ACPI_FAILURE (AcpiTbValidateTable (Table))) { continue; } /* Ignore errors while loading tables, get as many as possible */ (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); Status = AcpiNsLoadTable (i, AcpiGbl_RootNode); (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "(%4.4s:%8.8s) while loading table", Table->Signature.Ascii, Table->Pointer->OemTableId)); TablesFailed++; ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "Table [%4.4s:%8.8s] (id FF) - Table namespace load failed\n\n", Table->Signature.Ascii, Table->Pointer->OemTableId)); } else { TablesLoaded++; } } if (!TablesFailed) { ACPI_INFO (( "%u ACPI AML tables successfully acquired and loaded", TablesLoaded)); } else { ACPI_ERROR ((AE_INFO, "%u table load failures, %u successful", TablesFailed, TablesLoaded)); /* Indicate at least one failure */ Status = AE_CTRL_TERMINATE; } #ifdef ACPI_APPLICATION ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "\n")); #endif UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiInstallTable * * PARAMETERS: Table - Pointer to the ACPI table to be installed. * * RETURN: Status * * DESCRIPTION: Dynamically install an ACPI table. * Note: This function should only be invoked after * AcpiInitializeTables() and before AcpiLoadTables(). * ******************************************************************************/ ACPI_STATUS ACPI_INIT_FUNCTION AcpiInstallTable ( ACPI_TABLE_HEADER *Table) { ACPI_STATUS Status; UINT32 TableIndex; ACPI_FUNCTION_TRACE (AcpiInstallTable); Status = AcpiTbInstallStandardTable (ACPI_PTR_TO_PHYSADDR (Table), ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, Table, FALSE, FALSE, &TableIndex); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL_INIT (AcpiInstallTable) /******************************************************************************* * * FUNCTION: AcpiInstallPhysicalTable * * PARAMETERS: Address - Address of the ACPI table to be installed. * * RETURN: Status * * DESCRIPTION: Dynamically install an ACPI table. * Note: This function should only be invoked after * AcpiInitializeTables() and before AcpiLoadTables(). * ******************************************************************************/ ACPI_STATUS ACPI_INIT_FUNCTION AcpiInstallPhysicalTable ( ACPI_PHYSICAL_ADDRESS Address) { ACPI_STATUS Status; UINT32 TableIndex; ACPI_FUNCTION_TRACE (AcpiInstallPhysicalTable); Status = AcpiTbInstallStandardTable (Address, ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, FALSE, &TableIndex); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL_INIT (AcpiInstallPhysicalTable) /******************************************************************************* * * FUNCTION: AcpiLoadTable * * PARAMETERS: Table - Pointer to a buffer containing the ACPI * table to be loaded. * TableIdx - Pointer to a UINT32 for storing the table * index, might be NULL * * RETURN: Status * * DESCRIPTION: Dynamically load an ACPI table from the caller's buffer. Must * be a valid ACPI table with a valid ACPI table header. * Note1: Mainly intended to support hotplug addition of SSDTs. * Note2: Does not copy the incoming table. User is responsible * to ensure that the table is not deleted or unmapped. * ******************************************************************************/ ACPI_STATUS AcpiLoadTable ( ACPI_TABLE_HEADER *Table, UINT32 *TableIdx) { ACPI_STATUS Status; UINT32 TableIndex; ACPI_FUNCTION_TRACE (AcpiLoadTable); /* Parameter validation */ if (!Table) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Install the table and load it into the namespace */ ACPI_INFO (("Host-directed Dynamic ACPI Table Load:")); Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table), ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, Table, FALSE, &TableIndex); if (TableIdx) { *TableIdx = TableIndex; } if (ACPI_SUCCESS (Status)) { /* Complete the initialization/resolution of new objects */ AcpiNsInitializeObjects (); } return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiLoadTable) /******************************************************************************* * * FUNCTION: AcpiUnloadParentTable * * PARAMETERS: Object - Handle to any namespace object owned by * the table to be unloaded * * RETURN: Status * * DESCRIPTION: Via any namespace object within an SSDT or OEMx table, unloads * the table and deletes all namespace objects associated with * that table. Unloading of the DSDT is not allowed. * Note: Mainly intended to support hotplug removal of SSDTs. * ******************************************************************************/ ACPI_STATUS AcpiUnloadParentTable ( ACPI_HANDLE Object) { ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Object); ACPI_STATUS Status = AE_NOT_EXIST; ACPI_OWNER_ID OwnerId; UINT32 i; ACPI_FUNCTION_TRACE (AcpiUnloadParentTable); /* Parameter validation */ if (!Object) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* * The node OwnerId is currently the same as the parent table ID. * However, this could change in the future. */ OwnerId = Node->OwnerId; if (!OwnerId) { /* OwnerId==0 means DSDT is the owner. DSDT cannot be unloaded */ return_ACPI_STATUS (AE_TYPE); } /* Must acquire the table lock during this operation */ Status = AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Find the table in the global table list */ for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++) { if (OwnerId != AcpiGbl_RootTableList.Tables[i].OwnerId) { continue; } /* * Allow unload of SSDT and OEMx tables only. Do not allow unload * of the DSDT. No other types of tables should get here, since * only these types can contain AML and thus are the only types * that can create namespace objects. */ if (ACPI_COMPARE_NAMESEG ( AcpiGbl_RootTableList.Tables[i].Signature.Ascii, ACPI_SIG_DSDT)) { Status = AE_TYPE; break; } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); Status = AcpiTbUnloadTable (i); (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); break; } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiUnloadParentTable) /******************************************************************************* * * FUNCTION: AcpiUnloadTable * * PARAMETERS: TableIndex - Index as returned by AcpiLoadTable * * RETURN: Status * * DESCRIPTION: Via the TableIndex representing an SSDT or OEMx table, unloads * the table and deletes all namespace objects associated with * that table. Unloading of the DSDT is not allowed. * Note: Mainly intended to support hotplug removal of SSDTs. * ******************************************************************************/ ACPI_STATUS AcpiUnloadTable ( UINT32 TableIndex) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiUnloadTable); if (TableIndex == 1) { /* TableIndex==1 means DSDT is the owner. DSDT cannot be unloaded */ return_ACPI_STATUS (AE_TYPE); } Status = AcpiTbUnloadTable (TableIndex); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL (AcpiUnloadTable) src/acpica/source/components/tables/tbxfroot.c000066400000000000000000000377051465205512700220620ustar00rootroot00000000000000/****************************************************************************** * * Module Name: tbxfroot - Find the root ACPI table (RSDT) * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "actables.h" #define _COMPONENT ACPI_TABLES ACPI_MODULE_NAME ("tbxfroot") /******************************************************************************* * * FUNCTION: AcpiTbGetRsdpLength * * PARAMETERS: Rsdp - Pointer to RSDP * * RETURN: Table length * * DESCRIPTION: Get the length of the RSDP * ******************************************************************************/ UINT32 AcpiTbGetRsdpLength ( ACPI_TABLE_RSDP *Rsdp) { if (!ACPI_VALIDATE_RSDP_SIG (Rsdp->Signature)) { /* BAD Signature */ return (0); } /* "Length" field is available if table version >= 2 */ if (Rsdp->Revision >= 2) { return (Rsdp->Length); } else { return (ACPI_RSDP_CHECKSUM_LENGTH); } } /******************************************************************************* * * FUNCTION: AcpiTbValidateRsdp * * PARAMETERS: Rsdp - Pointer to unvalidated RSDP * * RETURN: Status * * DESCRIPTION: Validate the RSDP (ptr) * ******************************************************************************/ ACPI_STATUS AcpiTbValidateRsdp ( ACPI_TABLE_RSDP *Rsdp) { /* * The signature and checksum must both be correct * * Note: Sometimes there exists more than one RSDP in memory; the valid * RSDP has a valid checksum, all others have an invalid checksum. */ if (!ACPI_VALIDATE_RSDP_SIG (Rsdp->Signature)) { /* Nope, BAD Signature */ return (AE_BAD_SIGNATURE); } /* Check the standard checksum */ if (AcpiUtChecksum ((UINT8 *) Rsdp, ACPI_RSDP_CHECKSUM_LENGTH) != 0) { return (AE_BAD_CHECKSUM); } /* Check extended checksum if table version >= 2 */ if ((Rsdp->Revision >= 2) && (AcpiUtChecksum ((UINT8 *) Rsdp, ACPI_RSDP_XCHECKSUM_LENGTH) != 0)) { return (AE_BAD_CHECKSUM); } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiFindRootPointer * * PARAMETERS: TableAddress - Where the table pointer is returned * * RETURN: Status, RSDP physical address * * DESCRIPTION: Search lower 1Mbyte of memory for the root system descriptor * pointer structure. If it is found, set *RSDP to point to it. * * NOTE1: The RSDP must be either in the first 1K of the Extended * BIOS Data Area or between E0000 and FFFFF (From ACPI Spec.) * Only a 32-bit physical address is necessary. * * NOTE2: This function is always available, regardless of the * initialization state of the rest of ACPI. * ******************************************************************************/ ACPI_STATUS ACPI_INIT_FUNCTION AcpiFindRootPointer ( ACPI_PHYSICAL_ADDRESS *TableAddress) { UINT8 *TablePtr; UINT8 *MemRover; UINT32 PhysicalAddress; UINT32 EbdaWindowSize; ACPI_FUNCTION_TRACE (AcpiFindRootPointer); /* 1a) Get the location of the Extended BIOS Data Area (EBDA) */ TablePtr = AcpiOsMapMemory ( (ACPI_PHYSICAL_ADDRESS) ACPI_EBDA_PTR_LOCATION, ACPI_EBDA_PTR_LENGTH); if (!TablePtr) { ACPI_ERROR ((AE_INFO, "Could not map memory at 0x%8.8X for length %u", ACPI_EBDA_PTR_LOCATION, ACPI_EBDA_PTR_LENGTH)); return_ACPI_STATUS (AE_NO_MEMORY); } ACPI_MOVE_16_TO_32 (&PhysicalAddress, TablePtr); /* Convert segment part to physical address */ PhysicalAddress <<= 4; AcpiOsUnmapMemory (TablePtr, ACPI_EBDA_PTR_LENGTH); /* EBDA present? */ /* * Check that the EBDA pointer from memory is sane and does not point * above valid low memory */ if (PhysicalAddress > 0x400 && PhysicalAddress < 0xA0000) { /* * Calculate the scan window size * The EBDA is not guaranteed to be larger than a KiB and in case * that it is smaller, the scanning function would leave the low * memory and continue to the VGA range. */ EbdaWindowSize = ACPI_MIN(ACPI_EBDA_WINDOW_SIZE, 0xA0000 - PhysicalAddress); /* * 1b) Search EBDA paragraphs */ TablePtr = AcpiOsMapMemory ( (ACPI_PHYSICAL_ADDRESS) PhysicalAddress, EbdaWindowSize); if (!TablePtr) { ACPI_ERROR ((AE_INFO, "Could not map memory at 0x%8.8X for length %u", PhysicalAddress, EbdaWindowSize)); return_ACPI_STATUS (AE_NO_MEMORY); } MemRover = AcpiTbScanMemoryForRsdp ( TablePtr, EbdaWindowSize); AcpiOsUnmapMemory (TablePtr, EbdaWindowSize); if (MemRover) { /* Return the physical address */ PhysicalAddress += (UINT32) ACPI_PTR_DIFF (MemRover, TablePtr); *TableAddress = (ACPI_PHYSICAL_ADDRESS) PhysicalAddress; return_ACPI_STATUS (AE_OK); } } /* * 2) Search upper memory: 16-byte boundaries in E0000h-FFFFFh */ TablePtr = AcpiOsMapMemory ( (ACPI_PHYSICAL_ADDRESS) ACPI_HI_RSDP_WINDOW_BASE, ACPI_HI_RSDP_WINDOW_SIZE); if (!TablePtr) { ACPI_ERROR ((AE_INFO, "Could not map memory at 0x%8.8X for length %u", ACPI_HI_RSDP_WINDOW_BASE, ACPI_HI_RSDP_WINDOW_SIZE)); return_ACPI_STATUS (AE_NO_MEMORY); } MemRover = AcpiTbScanMemoryForRsdp ( TablePtr, ACPI_HI_RSDP_WINDOW_SIZE); AcpiOsUnmapMemory (TablePtr, ACPI_HI_RSDP_WINDOW_SIZE); if (MemRover) { /* Return the physical address */ PhysicalAddress = (UINT32) (ACPI_HI_RSDP_WINDOW_BASE + ACPI_PTR_DIFF (MemRover, TablePtr)); *TableAddress = (ACPI_PHYSICAL_ADDRESS) PhysicalAddress; return_ACPI_STATUS (AE_OK); } /* A valid RSDP was not found */ ACPI_BIOS_ERROR ((AE_INFO, "A valid RSDP was not found")); return_ACPI_STATUS (AE_NOT_FOUND); } ACPI_EXPORT_SYMBOL_INIT (AcpiFindRootPointer) /******************************************************************************* * * FUNCTION: AcpiTbScanMemoryForRsdp * * PARAMETERS: StartAddress - Starting pointer for search * Length - Maximum length to search * * RETURN: Pointer to the RSDP if found, otherwise NULL. * * DESCRIPTION: Search a block of memory for the RSDP signature * ******************************************************************************/ UINT8 * AcpiTbScanMemoryForRsdp ( UINT8 *StartAddress, UINT32 Length) { ACPI_STATUS Status; UINT8 *MemRover; UINT8 *EndAddress; ACPI_FUNCTION_TRACE (TbScanMemoryForRsdp); EndAddress = StartAddress + Length; /* Search from given start address for the requested length */ for (MemRover = StartAddress; MemRover < EndAddress; MemRover += ACPI_RSDP_SCAN_STEP) { /* The RSDP signature and checksum must both be correct */ Status = AcpiTbValidateRsdp ( ACPI_CAST_PTR (ACPI_TABLE_RSDP, MemRover)); if (ACPI_SUCCESS (Status)) { /* Sig and checksum valid, we have found a real RSDP */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "RSDP located at physical address %p\n", MemRover)); return_PTR (MemRover); } /* No sig match or bad checksum, keep searching */ } /* Searched entire block, no RSDP was found */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Searched entire block from %p, valid RSDP was not found\n", StartAddress)); return_PTR (NULL); } src/acpica/source/components/utilities/000077500000000000000000000000001465205512700205745ustar00rootroot00000000000000src/acpica/source/components/utilities/utaddress.c000066400000000000000000000377731465205512700227570ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utaddress - OpRegion address range check * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utaddress") /******************************************************************************* * * FUNCTION: AcpiUtAddAddressRange * * PARAMETERS: SpaceId - Address space ID * Address - OpRegion start address * Length - OpRegion length * RegionNode - OpRegion namespace node * * RETURN: Status * * DESCRIPTION: Add the Operation Region address range to the global list. * The only supported Space IDs are Memory and I/O. Called when * the OpRegion address/length operands are fully evaluated. * * MUTEX: Locks the namespace * * NOTE: Because this interface is only called when an OpRegion argument * list is evaluated, there cannot be any duplicate RegionNodes. * Duplicate Address/Length values are allowed, however, so that multiple * address conflicts can be detected. * ******************************************************************************/ ACPI_STATUS AcpiUtAddAddressRange ( ACPI_ADR_SPACE_TYPE SpaceId, ACPI_PHYSICAL_ADDRESS Address, UINT32 Length, ACPI_NAMESPACE_NODE *RegionNode) { ACPI_ADDRESS_RANGE *RangeInfo; ACPI_FUNCTION_TRACE (UtAddAddressRange); if ((SpaceId != ACPI_ADR_SPACE_SYSTEM_MEMORY) && (SpaceId != ACPI_ADR_SPACE_SYSTEM_IO)) { return_ACPI_STATUS (AE_OK); } /* Allocate/init a new info block, add it to the appropriate list */ RangeInfo = ACPI_ALLOCATE (sizeof (ACPI_ADDRESS_RANGE)); if (!RangeInfo) { return_ACPI_STATUS (AE_NO_MEMORY); } RangeInfo->StartAddress = Address; RangeInfo->EndAddress = (Address + Length - 1); RangeInfo->RegionNode = RegionNode; RangeInfo->Next = AcpiGbl_AddressRangeList[SpaceId]; AcpiGbl_AddressRangeList[SpaceId] = RangeInfo; ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "\nAdded [%4.4s] address range: 0x%8.8X%8.8X-0x%8.8X%8.8X\n", AcpiUtGetNodeName (RangeInfo->RegionNode), ACPI_FORMAT_UINT64 (Address), ACPI_FORMAT_UINT64 (RangeInfo->EndAddress))); return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtRemoveAddressRange * * PARAMETERS: SpaceId - Address space ID * RegionNode - OpRegion namespace node * * RETURN: None * * DESCRIPTION: Remove the Operation Region from the global list. The only * supported Space IDs are Memory and I/O. Called when an * OpRegion is deleted. * * MUTEX: Assumes the namespace is locked * ******************************************************************************/ void AcpiUtRemoveAddressRange ( ACPI_ADR_SPACE_TYPE SpaceId, ACPI_NAMESPACE_NODE *RegionNode) { ACPI_ADDRESS_RANGE *RangeInfo; ACPI_ADDRESS_RANGE *Prev; ACPI_FUNCTION_TRACE (UtRemoveAddressRange); if ((SpaceId != ACPI_ADR_SPACE_SYSTEM_MEMORY) && (SpaceId != ACPI_ADR_SPACE_SYSTEM_IO)) { return_VOID; } /* Get the appropriate list head and check the list */ RangeInfo = Prev = AcpiGbl_AddressRangeList[SpaceId]; while (RangeInfo) { if (RangeInfo->RegionNode == RegionNode) { if (RangeInfo == Prev) /* Found at list head */ { AcpiGbl_AddressRangeList[SpaceId] = RangeInfo->Next; } else { Prev->Next = RangeInfo->Next; } ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "\nRemoved [%4.4s] address range: 0x%8.8X%8.8X-0x%8.8X%8.8X\n", AcpiUtGetNodeName (RangeInfo->RegionNode), ACPI_FORMAT_UINT64 (RangeInfo->StartAddress), ACPI_FORMAT_UINT64 (RangeInfo->EndAddress))); ACPI_FREE (RangeInfo); return_VOID; } Prev = RangeInfo; RangeInfo = RangeInfo->Next; } return_VOID; } /******************************************************************************* * * FUNCTION: AcpiUtCheckAddressRange * * PARAMETERS: SpaceId - Address space ID * Address - Start address * Length - Length of address range * Warn - TRUE if warning on overlap desired * * RETURN: Count of the number of conflicts detected. Zero is always * returned for Space IDs other than Memory or I/O. * * DESCRIPTION: Check if the input address range overlaps any of the * ASL operation region address ranges. The only supported * Space IDs are Memory and I/O. * * MUTEX: Assumes the namespace is locked. * ******************************************************************************/ UINT32 AcpiUtCheckAddressRange ( ACPI_ADR_SPACE_TYPE SpaceId, ACPI_PHYSICAL_ADDRESS Address, UINT32 Length, BOOLEAN Warn) { ACPI_ADDRESS_RANGE *RangeInfo; ACPI_PHYSICAL_ADDRESS EndAddress; char *Pathname; UINT32 OverlapCount = 0; ACPI_FUNCTION_TRACE (UtCheckAddressRange); if ((SpaceId != ACPI_ADR_SPACE_SYSTEM_MEMORY) && (SpaceId != ACPI_ADR_SPACE_SYSTEM_IO)) { return_UINT32 (0); } RangeInfo = AcpiGbl_AddressRangeList[SpaceId]; EndAddress = Address + Length - 1; /* Check entire list for all possible conflicts */ while (RangeInfo) { /* * Check if the requested address/length overlaps this * address range. There are four cases to consider: * * 1) Input address/length is contained completely in the * address range * 2) Input address/length overlaps range at the range start * 3) Input address/length overlaps range at the range end * 4) Input address/length completely encompasses the range */ if ((Address <= RangeInfo->EndAddress) && (EndAddress >= RangeInfo->StartAddress)) { /* Found an address range overlap */ OverlapCount++; if (Warn) /* Optional warning message */ { Pathname = AcpiNsGetNormalizedPathname (RangeInfo->RegionNode, TRUE); ACPI_WARNING ((AE_INFO, "%s range 0x%8.8X%8.8X-0x%8.8X%8.8X conflicts with OpRegion 0x%8.8X%8.8X-0x%8.8X%8.8X (%s)", AcpiUtGetRegionName (SpaceId), ACPI_FORMAT_UINT64 (Address), ACPI_FORMAT_UINT64 (EndAddress), ACPI_FORMAT_UINT64 (RangeInfo->StartAddress), ACPI_FORMAT_UINT64 (RangeInfo->EndAddress), Pathname)); ACPI_FREE (Pathname); } } RangeInfo = RangeInfo->Next; } return_UINT32 (OverlapCount); } /******************************************************************************* * * FUNCTION: AcpiUtDeleteAddressLists * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Delete all global address range lists (called during * subsystem shutdown). * ******************************************************************************/ void AcpiUtDeleteAddressLists ( void) { ACPI_ADDRESS_RANGE *Next; ACPI_ADDRESS_RANGE *RangeInfo; int i; /* Delete all elements in all address range lists */ for (i = 0; i < ACPI_ADDRESS_RANGE_MAX; i++) { Next = AcpiGbl_AddressRangeList[i]; while (Next) { RangeInfo = Next; Next = RangeInfo->Next; ACPI_FREE (RangeInfo); } AcpiGbl_AddressRangeList[i] = NULL; } } src/acpica/source/components/utilities/utalloc.c000066400000000000000000000420751465205512700224130ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utalloc - local memory allocation routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdebug.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utalloc") #if !defined (USE_NATIVE_ALLOCATE_ZEROED) /******************************************************************************* * * FUNCTION: AcpiOsAllocateZeroed * * PARAMETERS: Size - Size of the allocation * * RETURN: Address of the allocated memory on success, NULL on failure. * * DESCRIPTION: Subsystem equivalent of calloc. Allocate and zero memory. * This is the default implementation. Can be overridden via the * USE_NATIVE_ALLOCATE_ZEROED flag. * ******************************************************************************/ void * AcpiOsAllocateZeroed ( ACPI_SIZE Size) { void *Allocation; ACPI_FUNCTION_ENTRY (); Allocation = AcpiOsAllocate (Size); if (Allocation) { /* Clear the memory block */ memset (Allocation, 0, Size); } return (Allocation); } #endif /* !USE_NATIVE_ALLOCATE_ZEROED */ /******************************************************************************* * * FUNCTION: AcpiUtCreateCaches * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Create all local caches * ******************************************************************************/ ACPI_STATUS AcpiUtCreateCaches ( void) { ACPI_STATUS Status; /* Object Caches, for frequently used objects */ Status = AcpiOsCreateCache ("Acpi-Namespace", sizeof (ACPI_NAMESPACE_NODE), ACPI_MAX_NAMESPACE_CACHE_DEPTH, &AcpiGbl_NamespaceCache); if (ACPI_FAILURE (Status)) { return (Status); } Status = AcpiOsCreateCache ("Acpi-State", sizeof (ACPI_GENERIC_STATE), ACPI_MAX_STATE_CACHE_DEPTH, &AcpiGbl_StateCache); if (ACPI_FAILURE (Status)) { return (Status); } Status = AcpiOsCreateCache ("Acpi-Parse", sizeof (ACPI_PARSE_OBJ_COMMON), ACPI_MAX_PARSE_CACHE_DEPTH, &AcpiGbl_PsNodeCache); if (ACPI_FAILURE (Status)) { return (Status); } Status = AcpiOsCreateCache ("Acpi-ParseExt", sizeof (ACPI_PARSE_OBJ_NAMED), ACPI_MAX_EXTPARSE_CACHE_DEPTH, &AcpiGbl_PsNodeExtCache); if (ACPI_FAILURE (Status)) { return (Status); } Status = AcpiOsCreateCache ("Acpi-Operand", sizeof (ACPI_OPERAND_OBJECT), ACPI_MAX_OBJECT_CACHE_DEPTH, &AcpiGbl_OperandCache); if (ACPI_FAILURE (Status)) { return (Status); } #ifdef ACPI_ASL_COMPILER /* * For use with the ASL-/ASL+ option. This cache keeps track of regular * 0xA9 0x01 comments. */ Status = AcpiOsCreateCache ("Acpi-Comment", sizeof (ACPI_COMMENT_NODE), ACPI_MAX_COMMENT_CACHE_DEPTH, &AcpiGbl_RegCommentCache); if (ACPI_FAILURE (Status)) { return (Status); } /* * This cache keeps track of the starting addresses of where the comments * lie. This helps prevent duplication of comments. */ Status = AcpiOsCreateCache ("Acpi-Comment-Addr", sizeof (ACPI_COMMENT_ADDR_NODE), ACPI_MAX_COMMENT_CACHE_DEPTH, &AcpiGbl_CommentAddrCache); if (ACPI_FAILURE (Status)) { return (Status); } /* * This cache will be used for nodes that represent files. */ Status = AcpiOsCreateCache ("Acpi-File", sizeof (ACPI_FILE_NODE), ACPI_MAX_COMMENT_CACHE_DEPTH, &AcpiGbl_FileCache); if (ACPI_FAILURE (Status)) { return (Status); } #endif #ifdef ACPI_DBG_TRACK_ALLOCATIONS /* Memory allocation lists */ Status = AcpiUtCreateList ("Acpi-Global", 0, &AcpiGbl_GlobalList); if (ACPI_FAILURE (Status)) { return (Status); } Status = AcpiUtCreateList ("Acpi-Namespace", sizeof (ACPI_NAMESPACE_NODE), &AcpiGbl_NsNodeList); if (ACPI_FAILURE (Status)) { return (Status); } #endif return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtDeleteCaches * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Purge and delete all local caches * ******************************************************************************/ ACPI_STATUS AcpiUtDeleteCaches ( void) { #ifdef ACPI_DBG_TRACK_ALLOCATIONS char Buffer[7]; if (AcpiGbl_DisplayFinalMemStats) { strcpy (Buffer, "MEMORY"); (void) AcpiDbDisplayStatistics (Buffer); } #endif (void) AcpiOsDeleteCache (AcpiGbl_NamespaceCache); AcpiGbl_NamespaceCache = NULL; (void) AcpiOsDeleteCache (AcpiGbl_StateCache); AcpiGbl_StateCache = NULL; (void) AcpiOsDeleteCache (AcpiGbl_OperandCache); AcpiGbl_OperandCache = NULL; (void) AcpiOsDeleteCache (AcpiGbl_PsNodeCache); AcpiGbl_PsNodeCache = NULL; (void) AcpiOsDeleteCache (AcpiGbl_PsNodeExtCache); AcpiGbl_PsNodeExtCache = NULL; #ifdef ACPI_ASL_COMPILER (void) AcpiOsDeleteCache (AcpiGbl_RegCommentCache); AcpiGbl_RegCommentCache = NULL; (void) AcpiOsDeleteCache (AcpiGbl_CommentAddrCache); AcpiGbl_CommentAddrCache = NULL; (void) AcpiOsDeleteCache (AcpiGbl_FileCache); AcpiGbl_FileCache = NULL; #endif #ifdef ACPI_DBG_TRACK_ALLOCATIONS /* Debug only - display leftover memory allocation, if any */ AcpiUtDumpAllocations (ACPI_UINT32_MAX, NULL); /* Free memory lists */ AcpiOsFree (AcpiGbl_GlobalList); AcpiGbl_GlobalList = NULL; AcpiOsFree (AcpiGbl_NsNodeList); AcpiGbl_NsNodeList = NULL; #endif return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtValidateBuffer * * PARAMETERS: Buffer - Buffer descriptor to be validated * * RETURN: Status * * DESCRIPTION: Perform parameter validation checks on an ACPI_BUFFER * ******************************************************************************/ ACPI_STATUS AcpiUtValidateBuffer ( ACPI_BUFFER *Buffer) { /* Obviously, the structure pointer must be valid */ if (!Buffer) { return (AE_BAD_PARAMETER); } /* Special semantics for the length */ if ((Buffer->Length == ACPI_NO_BUFFER) || (Buffer->Length == ACPI_ALLOCATE_BUFFER) || (Buffer->Length == ACPI_ALLOCATE_LOCAL_BUFFER)) { return (AE_OK); } /* Length is valid, the buffer pointer must be also */ if (!Buffer->Pointer) { return (AE_BAD_PARAMETER); } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtInitializeBuffer * * PARAMETERS: Buffer - Buffer to be validated * RequiredLength - Length needed * * RETURN: Status * * DESCRIPTION: Validate that the buffer is of the required length or * allocate a new buffer. Returned buffer is always zeroed. * ******************************************************************************/ ACPI_STATUS AcpiUtInitializeBuffer ( ACPI_BUFFER *Buffer, ACPI_SIZE RequiredLength) { ACPI_SIZE InputBufferLength; /* Parameter validation */ if (!Buffer || !RequiredLength) { return (AE_BAD_PARAMETER); } /* * Buffer->Length is used as both an input and output parameter. Get the * input actual length and set the output required buffer length. */ InputBufferLength = Buffer->Length; Buffer->Length = RequiredLength; /* * The input buffer length contains the actual buffer length, or the type * of buffer to be allocated by this routine. */ switch (InputBufferLength) { case ACPI_NO_BUFFER: /* Return the exception (and the required buffer length) */ return (AE_BUFFER_OVERFLOW); case ACPI_ALLOCATE_BUFFER: /* * Allocate a new buffer. We directectly call AcpiOsAllocate here to * purposefully bypass the (optionally enabled) internal allocation * tracking mechanism since we only want to track internal * allocations. Note: The caller should use AcpiOsFree to free this * buffer created via ACPI_ALLOCATE_BUFFER. */ Buffer->Pointer = AcpiOsAllocate (RequiredLength); break; case ACPI_ALLOCATE_LOCAL_BUFFER: /* Allocate a new buffer with local interface to allow tracking */ Buffer->Pointer = ACPI_ALLOCATE (RequiredLength); break; default: /* Existing buffer: Validate the size of the buffer */ if (InputBufferLength < RequiredLength) { return (AE_BUFFER_OVERFLOW); } break; } /* Validate allocation from above or input buffer pointer */ if (!Buffer->Pointer) { return (AE_NO_MEMORY); } /* Have a valid buffer, clear it */ memset (Buffer->Pointer, 0, RequiredLength); return (AE_OK); } src/acpica/source/components/utilities/utascii.c000066400000000000000000000260001465205512700223770ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utascii - Utility ascii functions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" /******************************************************************************* * * FUNCTION: AcpiUtValidNameseg * * PARAMETERS: Name - The name or table signature to be examined. * Four characters, does not have to be a * NULL terminated string. * * RETURN: TRUE if signature is has 4 valid ACPI characters * * DESCRIPTION: Validate an ACPI table signature. * ******************************************************************************/ BOOLEAN AcpiUtValidNameseg ( char *Name) { UINT32 i; /* Validate each character in the signature */ for (i = 0; i < ACPI_NAMESEG_SIZE; i++) { if (!AcpiUtValidNameChar (Name[i], i)) { return (FALSE); } } return (TRUE); } /******************************************************************************* * * FUNCTION: AcpiUtValidNameChar * * PARAMETERS: Char - The character to be examined * Position - Byte position (0-3) * * RETURN: TRUE if the character is valid, FALSE otherwise * * DESCRIPTION: Check for a valid ACPI character. Must be one of: * 1) Upper case alpha * 2) numeric * 3) underscore * * We allow a '!' as the last character because of the ASF! table * ******************************************************************************/ BOOLEAN AcpiUtValidNameChar ( char Character, UINT32 Position) { if (!((Character >= 'A' && Character <= 'Z') || (Character >= '0' && Character <= '9') || (Character == '_'))) { /* Allow a '!' in the last position */ if (Character == '!' && Position == 3) { return (TRUE); } return (FALSE); } return (TRUE); } /******************************************************************************* * * FUNCTION: AcpiUtCheckAndRepairAscii * * PARAMETERS: Name - Ascii string * Count - Number of characters to check * * RETURN: None * * DESCRIPTION: Ensure that the requested number of characters are printable * Ascii characters. Sets non-printable and null chars to . * ******************************************************************************/ void AcpiUtCheckAndRepairAscii ( UINT8 *Name, char *RepairedName, UINT32 Count) { UINT32 i; for (i = 0; i < Count; i++) { RepairedName[i] = (char) Name[i]; if (!Name[i]) { return; } if (!isprint (Name[i])) { RepairedName[i] = ' '; } } } src/acpica/source/components/utilities/utbuffer.c000066400000000000000000000414141465205512700225660ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utbuffer - Buffer dump routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utbuffer") /******************************************************************************* * * FUNCTION: AcpiUtDumpBuffer * * PARAMETERS: Buffer - Buffer to dump * Count - Amount to dump, in bytes * Display - BYTE, WORD, DWORD, or QWORD display: * DB_BYTE_DISPLAY * DB_WORD_DISPLAY * DB_DWORD_DISPLAY * DB_QWORD_DISPLAY * BaseOffset - Beginning buffer offset (display only) * * RETURN: None * * DESCRIPTION: Generic dump buffer in both hex and ascii. * ******************************************************************************/ void AcpiUtDumpBuffer ( UINT8 *Buffer, UINT32 Count, UINT32 Display, UINT32 BaseOffset) { UINT32 i = 0; UINT32 j; UINT32 Temp32; UINT8 BufChar; UINT32 DisplayDataOnly = Display & DB_DISPLAY_DATA_ONLY; Display &= ~DB_DISPLAY_DATA_ONLY; if (!Buffer) { AcpiOsPrintf ("Null Buffer Pointer in DumpBuffer!\n"); return; } if ((Count < 4) || (Count & 0x01)) { Display = DB_BYTE_DISPLAY; } /* Nasty little dump buffer routine! */ while (i < Count) { /* Print current offset */ if (!DisplayDataOnly) { AcpiOsPrintf ("%8.4X: ", (BaseOffset + i)); } /* Print 16 hex chars */ for (j = 0; j < 16;) { if (i + j >= Count) { /* Dump fill spaces */ AcpiOsPrintf ("%*s", ((Display * 2) + 1), " "); j += Display; continue; } switch (Display) { case DB_BYTE_DISPLAY: default: /* Default is BYTE display */ AcpiOsPrintf ("%02X ", Buffer[(ACPI_SIZE) i + j]); break; case DB_WORD_DISPLAY: ACPI_MOVE_16_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); AcpiOsPrintf ("%04X ", Temp32); break; case DB_DWORD_DISPLAY: ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); AcpiOsPrintf ("%08X ", Temp32); break; case DB_QWORD_DISPLAY: ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); AcpiOsPrintf ("%08X", Temp32); ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j + 4]); AcpiOsPrintf ("%08X ", Temp32); break; } j += Display; } /* * Print the ASCII equivalent characters but watch out for the bad * unprintable ones (printable chars are 0x20 through 0x7E) */ if (!DisplayDataOnly) { AcpiOsPrintf (" "); for (j = 0; j < 16; j++) { if (i + j >= Count) { AcpiOsPrintf ("\n"); return; } /* * Add comment characters so rest of line is ignored when * compiled */ if (j == 0) { AcpiOsPrintf ("// "); } BufChar = Buffer[(ACPI_SIZE) i + j]; if (isprint (BufChar)) { AcpiOsPrintf ("%c", BufChar); } else { AcpiOsPrintf ("."); } } /* Done with that line. */ AcpiOsPrintf ("\n"); } i += 16; } return; } /******************************************************************************* * * FUNCTION: AcpiUtDebugDumpBuffer * * PARAMETERS: Buffer - Buffer to dump * Count - Amount to dump, in bytes * Display - BYTE, WORD, DWORD, or QWORD display: * DB_BYTE_DISPLAY * DB_WORD_DISPLAY * DB_DWORD_DISPLAY * DB_QWORD_DISPLAY * ComponentID - Caller's component ID * * RETURN: None * * DESCRIPTION: Generic dump buffer in both hex and ascii. * ******************************************************************************/ void AcpiUtDebugDumpBuffer ( UINT8 *Buffer, UINT32 Count, UINT32 Display, UINT32 ComponentId) { /* Only dump the buffer if tracing is enabled */ if (!((ACPI_LV_TABLES & AcpiDbgLevel) && (ComponentId & AcpiDbgLayer))) { return; } AcpiUtDumpBuffer (Buffer, Count, Display, 0); } #ifdef ACPI_APPLICATION /******************************************************************************* * * FUNCTION: AcpiUtDumpBufferToFile * * PARAMETERS: File - File descriptor * Buffer - Buffer to dump * Count - Amount to dump, in bytes * Display - BYTE, WORD, DWORD, or QWORD display: * DB_BYTE_DISPLAY * DB_WORD_DISPLAY * DB_DWORD_DISPLAY * DB_QWORD_DISPLAY * BaseOffset - Beginning buffer offset (display only) * * RETURN: None * * DESCRIPTION: Generic dump buffer in both hex and ascii to a file. * ******************************************************************************/ void AcpiUtDumpBufferToFile ( ACPI_FILE File, UINT8 *Buffer, UINT32 Count, UINT32 Display, UINT32 BaseOffset) { UINT32 i = 0; UINT32 j; UINT32 Temp32; UINT8 BufChar; if (!Buffer) { fprintf (File, "Null Buffer Pointer in DumpBuffer!\n"); return; } if ((Count < 4) || (Count & 0x01)) { Display = DB_BYTE_DISPLAY; } /* Nasty little dump buffer routine! */ while (i < Count) { /* Print current offset */ fprintf (File, "%8.4X: ", (BaseOffset + i)); /* Print 16 hex chars */ for (j = 0; j < 16;) { if (i + j >= Count) { /* Dump fill spaces */ fprintf (File, "%*s", ((Display * 2) + 1), " "); j += Display; continue; } switch (Display) { case DB_BYTE_DISPLAY: default: /* Default is BYTE display */ fprintf (File, "%02X ", Buffer[(ACPI_SIZE) i + j]); break; case DB_WORD_DISPLAY: ACPI_MOVE_16_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); fprintf (File, "%04X ", Temp32); break; case DB_DWORD_DISPLAY: ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); fprintf (File, "%08X ", Temp32); break; case DB_QWORD_DISPLAY: ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); fprintf (File, "%08X", Temp32); ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j + 4]); fprintf (File, "%08X ", Temp32); break; } j += Display; } /* * Print the ASCII equivalent characters but watch out for the bad * unprintable ones (printable chars are 0x20 through 0x7E) */ fprintf (File, " "); for (j = 0; j < 16; j++) { if (i + j >= Count) { fprintf (File, "\n"); return; } BufChar = Buffer[(ACPI_SIZE) i + j]; if (isprint (BufChar)) { fprintf (File, "%c", BufChar); } else { fprintf (File, "."); } } /* Done with that line. */ fprintf (File, "\n"); i += 16; } return; } #endif src/acpica/source/components/utilities/utcache.c000066400000000000000000000361761465205512700223710ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utcache - local cache allocation routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utcache") #ifdef ACPI_USE_LOCAL_CACHE /******************************************************************************* * * FUNCTION: AcpiOsCreateCache * * PARAMETERS: CacheName - Ascii name for the cache * ObjectSize - Size of each cached object * MaxDepth - Maximum depth of the cache (in objects) * ReturnCache - Where the new cache object is returned * * RETURN: Status * * DESCRIPTION: Create a cache object * ******************************************************************************/ ACPI_STATUS AcpiOsCreateCache ( char *CacheName, UINT16 ObjectSize, UINT16 MaxDepth, ACPI_MEMORY_LIST **ReturnCache) { ACPI_MEMORY_LIST *Cache; ACPI_FUNCTION_ENTRY (); if (!CacheName || !ReturnCache || !ObjectSize) { return (AE_BAD_PARAMETER); } /* Create the cache object */ Cache = AcpiOsAllocate (sizeof (ACPI_MEMORY_LIST)); if (!Cache) { return (AE_NO_MEMORY); } /* Populate the cache object and return it */ memset (Cache, 0, sizeof (ACPI_MEMORY_LIST)); Cache->ListName = CacheName; Cache->ObjectSize = ObjectSize; Cache->MaxDepth = MaxDepth; *ReturnCache = Cache; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiOsPurgeCache * * PARAMETERS: Cache - Handle to cache object * * RETURN: Status * * DESCRIPTION: Free all objects within the requested cache. * ******************************************************************************/ ACPI_STATUS AcpiOsPurgeCache ( ACPI_MEMORY_LIST *Cache) { void *Next; ACPI_STATUS Status; ACPI_FUNCTION_ENTRY (); if (!Cache) { return (AE_BAD_PARAMETER); } Status = AcpiUtAcquireMutex (ACPI_MTX_CACHES); if (ACPI_FAILURE (Status)) { return (Status); } /* Walk the list of objects in this cache */ while (Cache->ListHead) { /* Delete and unlink one cached state object */ Next = ACPI_GET_DESCRIPTOR_PTR (Cache->ListHead); ACPI_FREE (Cache->ListHead); Cache->ListHead = Next; Cache->CurrentDepth--; } (void) AcpiUtReleaseMutex (ACPI_MTX_CACHES); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiOsDeleteCache * * PARAMETERS: Cache - Handle to cache object * * RETURN: Status * * DESCRIPTION: Free all objects within the requested cache and delete the * cache object. * ******************************************************************************/ ACPI_STATUS AcpiOsDeleteCache ( ACPI_MEMORY_LIST *Cache) { ACPI_STATUS Status; ACPI_FUNCTION_ENTRY (); /* Purge all objects in the cache */ Status = AcpiOsPurgeCache (Cache); if (ACPI_FAILURE (Status)) { return (Status); } /* Now we can delete the cache object */ AcpiOsFree (Cache); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiOsReleaseObject * * PARAMETERS: Cache - Handle to cache object * Object - The object to be released * * RETURN: None * * DESCRIPTION: Release an object to the specified cache. If cache is full, * the object is deleted. * ******************************************************************************/ ACPI_STATUS AcpiOsReleaseObject ( ACPI_MEMORY_LIST *Cache, void *Object) { ACPI_STATUS Status; ACPI_FUNCTION_ENTRY (); if (!Cache || !Object) { return (AE_BAD_PARAMETER); } /* If cache is full, just free this object */ if (Cache->CurrentDepth >= Cache->MaxDepth) { ACPI_FREE (Object); ACPI_MEM_TRACKING (Cache->TotalFreed++); } /* Otherwise put this object back into the cache */ else { Status = AcpiUtAcquireMutex (ACPI_MTX_CACHES); if (ACPI_FAILURE (Status)) { return (Status); } /* Mark the object as cached */ memset (Object, 0xCA, Cache->ObjectSize); ACPI_SET_DESCRIPTOR_TYPE (Object, ACPI_DESC_TYPE_CACHED); /* Put the object at the head of the cache list */ ACPI_SET_DESCRIPTOR_PTR (Object, Cache->ListHead); Cache->ListHead = Object; Cache->CurrentDepth++; (void) AcpiUtReleaseMutex (ACPI_MTX_CACHES); } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiOsAcquireObject * * PARAMETERS: Cache - Handle to cache object * * RETURN: the acquired object. NULL on error * * DESCRIPTION: Get an object from the specified cache. If cache is empty, * the object is allocated. * ******************************************************************************/ void * AcpiOsAcquireObject ( ACPI_MEMORY_LIST *Cache) { ACPI_STATUS Status; void *Object; ACPI_FUNCTION_TRACE (OsAcquireObject); if (!Cache) { return_PTR (NULL); } Status = AcpiUtAcquireMutex (ACPI_MTX_CACHES); if (ACPI_FAILURE (Status)) { return_PTR (NULL); } ACPI_MEM_TRACKING (Cache->Requests++); /* Check the cache first */ if (Cache->ListHead) { /* There is an object available, use it */ Object = Cache->ListHead; Cache->ListHead = ACPI_GET_DESCRIPTOR_PTR (Object); Cache->CurrentDepth--; ACPI_MEM_TRACKING (Cache->Hits++); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "%s: Object %p from %s cache\n", ACPI_GET_FUNCTION_NAME, Object, Cache->ListName)); Status = AcpiUtReleaseMutex (ACPI_MTX_CACHES); if (ACPI_FAILURE (Status)) { return_PTR (NULL); } /* Clear (zero) the previously used Object */ memset (Object, 0, Cache->ObjectSize); } else { /* The cache is empty, create a new object */ ACPI_MEM_TRACKING (Cache->TotalAllocated++); #ifdef ACPI_DBG_TRACK_ALLOCATIONS if ((Cache->TotalAllocated - Cache->TotalFreed) > Cache->MaxOccupied) { Cache->MaxOccupied = Cache->TotalAllocated - Cache->TotalFreed; } #endif /* Avoid deadlock with ACPI_ALLOCATE_ZEROED */ Status = AcpiUtReleaseMutex (ACPI_MTX_CACHES); if (ACPI_FAILURE (Status)) { return_PTR (NULL); } Object = ACPI_ALLOCATE_ZEROED (Cache->ObjectSize); if (!Object) { return_PTR (NULL); } } return_PTR (Object); } #endif /* ACPI_USE_LOCAL_CACHE */ src/acpica/source/components/utilities/utcksum.c000066400000000000000000000317121465205512700224370ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utcksum - Support generating table checksums * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdisasm.h" #include "acutils.h" /* This module used for application-level code only */ #define _COMPONENT ACPI_CA_DISASSEMBLER ACPI_MODULE_NAME ("utcksum") /******************************************************************************* * * FUNCTION: AcpiUtVerifyChecksum * * PARAMETERS: Table - ACPI table to verify * Length - Length of entire table * * RETURN: Status * * DESCRIPTION: Verifies that the table checksums to zero. Optionally returns * exception on bad checksum. * Note: We don't have to check for a CDAT here, since CDAT is * not in the RSDT/XSDT, and the CDAT table is never installed * via ACPICA. * ******************************************************************************/ ACPI_STATUS AcpiUtVerifyChecksum ( ACPI_TABLE_HEADER *Table, UINT32 Length) { UINT8 Checksum; /* * FACS/S3PT: * They are the odd tables, have no standard ACPI header and no checksum */ if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_S3PT) || ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_FACS)) { return (AE_OK); } /* Compute the checksum on the table */ Length = Table->Length; Checksum = AcpiUtGenerateChecksum (ACPI_CAST_PTR (UINT8, Table), Length, Table->Checksum); /* Computed checksum matches table? */ if (Checksum != Table->Checksum) { ACPI_BIOS_WARNING ((AE_INFO, "Incorrect checksum in table [%4.4s] - 0x%2.2X, " "should be 0x%2.2X", Table->Signature, Table->Checksum, Table->Checksum - Checksum)); #if (ACPI_CHECKSUM_ABORT) return (AE_BAD_CHECKSUM); #endif } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtVerifyCdatChecksum * * PARAMETERS: Table - CDAT ACPI table to verify * Length - Length of entire table * * RETURN: Status * * DESCRIPTION: Verifies that the CDAT table checksums to zero. Optionally * returns an exception on bad checksum. * ******************************************************************************/ ACPI_STATUS AcpiUtVerifyCdatChecksum ( ACPI_TABLE_CDAT *CdatTable, UINT32 Length) { UINT8 Checksum; /* Compute the checksum on the table */ Checksum = AcpiUtGenerateChecksum (ACPI_CAST_PTR (UINT8, CdatTable), CdatTable->Length, CdatTable->Checksum); /* Computed checksum matches table? */ if (Checksum != CdatTable->Checksum) { ACPI_BIOS_WARNING ((AE_INFO, "Incorrect checksum in table [%4.4s] - 0x%2.2X, " "should be 0x%2.2X", AcpiGbl_CDAT, CdatTable->Checksum, Checksum)); #if (ACPI_CHECKSUM_ABORT) return (AE_BAD_CHECKSUM); #endif } CdatTable->Checksum = Checksum; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtGenerateChecksum * * PARAMETERS: Table - Pointer to table to be checksummed * Length - Length of the table * OriginalChecksum - Value of the checksum field * * RETURN: 8 bit checksum of buffer * * DESCRIPTION: Computes an 8 bit checksum of the table. * ******************************************************************************/ UINT8 AcpiUtGenerateChecksum ( void *Table, UINT32 Length, UINT8 OriginalChecksum) { UINT8 Checksum; /* Sum the entire table as-is */ Checksum = AcpiUtChecksum ((UINT8 *) Table, Length); /* Subtract off the existing checksum value in the table */ Checksum = (UINT8) (Checksum - OriginalChecksum); /* Compute and return the final checksum */ Checksum = (UINT8) (0 - Checksum); return (Checksum); } /******************************************************************************* * * FUNCTION: AcpiUtChecksum * * PARAMETERS: Buffer - Pointer to memory region to be checked * Length - Length of this memory region * * RETURN: Checksum (UINT8) * * DESCRIPTION: Calculates circular checksum of memory region. * ******************************************************************************/ UINT8 AcpiUtChecksum ( UINT8 *Buffer, UINT32 Length) { UINT8 Sum = 0; UINT8 *End = Buffer + Length; while (Buffer < End) { Sum = (UINT8) (Sum + *(Buffer++)); } return (Sum); } src/acpica/source/components/utilities/utcopy.c000066400000000000000000001106541465205512700222720ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utcopy - Internal to external object translation utilities * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utcopy") /* Local prototypes */ static ACPI_STATUS AcpiUtCopyIsimpleToEsimple ( ACPI_OPERAND_OBJECT *InternalObject, ACPI_OBJECT *ExternalObject, UINT8 *DataSpace, ACPI_SIZE *BufferSpaceUsed); static ACPI_STATUS AcpiUtCopyIelementToIelement ( UINT8 ObjectType, ACPI_OPERAND_OBJECT *SourceObject, ACPI_GENERIC_STATE *State, void *Context); static ACPI_STATUS AcpiUtCopyIpackageToEpackage ( ACPI_OPERAND_OBJECT *InternalObject, UINT8 *Buffer, ACPI_SIZE *SpaceUsed); static ACPI_STATUS AcpiUtCopyEsimpleToIsimple( ACPI_OBJECT *UserObj, ACPI_OPERAND_OBJECT **ReturnObj); static ACPI_STATUS AcpiUtCopyEpackageToIpackage ( ACPI_OBJECT *ExternalObject, ACPI_OPERAND_OBJECT **InternalObject); static ACPI_STATUS AcpiUtCopySimpleObject ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *DestDesc); static ACPI_STATUS AcpiUtCopyIelementToEelement ( UINT8 ObjectType, ACPI_OPERAND_OBJECT *SourceObject, ACPI_GENERIC_STATE *State, void *Context); static ACPI_STATUS AcpiUtCopyIpackageToIpackage ( ACPI_OPERAND_OBJECT *SourceObj, ACPI_OPERAND_OBJECT *DestObj, ACPI_WALK_STATE *WalkState); /******************************************************************************* * * FUNCTION: AcpiUtCopyIsimpleToEsimple * * PARAMETERS: InternalObject - Source object to be copied * ExternalObject - Where to return the copied object * DataSpace - Where object data is returned (such as * buffer and string data) * BufferSpaceUsed - Length of DataSpace that was used * * RETURN: Status * * DESCRIPTION: This function is called to copy a simple internal object to * an external object. * * The DataSpace buffer is assumed to have sufficient space for * the object. * ******************************************************************************/ static ACPI_STATUS AcpiUtCopyIsimpleToEsimple ( ACPI_OPERAND_OBJECT *InternalObject, ACPI_OBJECT *ExternalObject, UINT8 *DataSpace, ACPI_SIZE *BufferSpaceUsed) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (UtCopyIsimpleToEsimple); *BufferSpaceUsed = 0; /* * Check for NULL object case (could be an uninitialized * package element) */ if (!InternalObject) { return_ACPI_STATUS (AE_OK); } /* Always clear the external object */ memset (ExternalObject, 0, sizeof (ACPI_OBJECT)); /* * In general, the external object will be the same type as * the internal object */ ExternalObject->Type = InternalObject->Common.Type; /* However, only a limited number of external types are supported */ switch (InternalObject->Common.Type) { case ACPI_TYPE_STRING: ExternalObject->String.Pointer = (char *) DataSpace; ExternalObject->String.Length = InternalObject->String.Length; *BufferSpaceUsed = ACPI_ROUND_UP_TO_NATIVE_WORD ( (ACPI_SIZE) InternalObject->String.Length + 1); memcpy ((void *) DataSpace, (void *) InternalObject->String.Pointer, (ACPI_SIZE) InternalObject->String.Length + 1); break; case ACPI_TYPE_BUFFER: ExternalObject->Buffer.Pointer = DataSpace; ExternalObject->Buffer.Length = InternalObject->Buffer.Length; *BufferSpaceUsed = ACPI_ROUND_UP_TO_NATIVE_WORD ( InternalObject->String.Length); memcpy ((void *) DataSpace, (void *) InternalObject->Buffer.Pointer, InternalObject->Buffer.Length); break; case ACPI_TYPE_INTEGER: ExternalObject->Integer.Value = InternalObject->Integer.Value; break; case ACPI_TYPE_LOCAL_REFERENCE: /* This is an object reference. */ switch (InternalObject->Reference.Class) { case ACPI_REFCLASS_NAME: /* * For namepath, return the object handle ("reference") * We are referring to the namespace node */ ExternalObject->Reference.Handle = InternalObject->Reference.Node; ExternalObject->Reference.ActualType = AcpiNsGetType (InternalObject->Reference.Node); break; default: /* All other reference types are unsupported */ return_ACPI_STATUS (AE_TYPE); } break; case ACPI_TYPE_PROCESSOR: ExternalObject->Processor.ProcId = InternalObject->Processor.ProcId; ExternalObject->Processor.PblkAddress = InternalObject->Processor.Address; ExternalObject->Processor.PblkLength = InternalObject->Processor.Length; break; case ACPI_TYPE_POWER: ExternalObject->PowerResource.SystemLevel = InternalObject->PowerResource.SystemLevel; ExternalObject->PowerResource.ResourceOrder = InternalObject->PowerResource.ResourceOrder; break; default: /* * There is no corresponding external object type */ ACPI_ERROR ((AE_INFO, "Unsupported object type, cannot convert to external object: %s", AcpiUtGetTypeName (InternalObject->Common.Type))); return_ACPI_STATUS (AE_SUPPORT); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtCopyIelementToEelement * * PARAMETERS: ACPI_PKG_CALLBACK * * RETURN: Status * * DESCRIPTION: Copy one package element to another package element * ******************************************************************************/ static ACPI_STATUS AcpiUtCopyIelementToEelement ( UINT8 ObjectType, ACPI_OPERAND_OBJECT *SourceObject, ACPI_GENERIC_STATE *State, void *Context) { ACPI_STATUS Status = AE_OK; ACPI_PKG_INFO *Info = (ACPI_PKG_INFO *) Context; ACPI_SIZE ObjectSpace; UINT32 ThisIndex; ACPI_OBJECT *TargetObject; ACPI_FUNCTION_ENTRY (); ThisIndex = State->Pkg.Index; TargetObject = (ACPI_OBJECT *) &((ACPI_OBJECT *) (State->Pkg.DestObject))->Package.Elements[ThisIndex]; switch (ObjectType) { case ACPI_COPY_TYPE_SIMPLE: /* * This is a simple or null object */ Status = AcpiUtCopyIsimpleToEsimple (SourceObject, TargetObject, Info->FreeSpace, &ObjectSpace); if (ACPI_FAILURE (Status)) { return (Status); } break; case ACPI_COPY_TYPE_PACKAGE: /* * Build the package object */ TargetObject->Type = ACPI_TYPE_PACKAGE; TargetObject->Package.Count = SourceObject->Package.Count; TargetObject->Package.Elements = ACPI_CAST_PTR (ACPI_OBJECT, Info->FreeSpace); /* * Pass the new package object back to the package walk routine */ State->Pkg.ThisTargetObj = TargetObject; /* * Save space for the array of objects (Package elements) * update the buffer length counter */ ObjectSpace = ACPI_ROUND_UP_TO_NATIVE_WORD ( (ACPI_SIZE) TargetObject->Package.Count * sizeof (ACPI_OBJECT)); break; default: return (AE_BAD_PARAMETER); } Info->FreeSpace += ObjectSpace; Info->Length += ObjectSpace; return (Status); } /******************************************************************************* * * FUNCTION: AcpiUtCopyIpackageToEpackage * * PARAMETERS: InternalObject - Pointer to the object we are returning * Buffer - Where the object is returned * SpaceUsed - Where the object length is returned * * RETURN: Status * * DESCRIPTION: This function is called to place a package object in a user * buffer. A package object by definition contains other objects. * * The buffer is assumed to have sufficient space for the object. * The caller must have verified the buffer length needed using * the AcpiUtGetObjectSize function before calling this function. * ******************************************************************************/ static ACPI_STATUS AcpiUtCopyIpackageToEpackage ( ACPI_OPERAND_OBJECT *InternalObject, UINT8 *Buffer, ACPI_SIZE *SpaceUsed) { ACPI_OBJECT *ExternalObject; ACPI_STATUS Status; ACPI_PKG_INFO Info; ACPI_FUNCTION_TRACE (UtCopyIpackageToEpackage); /* * First package at head of the buffer */ ExternalObject = ACPI_CAST_PTR (ACPI_OBJECT, Buffer); /* * Free space begins right after the first package */ Info.Length = ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT)); Info.FreeSpace = Buffer + ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT)); Info.ObjectSpace = 0; Info.NumPackages = 1; ExternalObject->Type = InternalObject->Common.Type; ExternalObject->Package.Count = InternalObject->Package.Count; ExternalObject->Package.Elements = ACPI_CAST_PTR (ACPI_OBJECT, Info.FreeSpace); /* * Leave room for an array of ACPI_OBJECTS in the buffer * and move the free space past it */ Info.Length += (ACPI_SIZE) ExternalObject->Package.Count * ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT)); Info.FreeSpace += ExternalObject->Package.Count * ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT)); Status = AcpiUtWalkPackageTree (InternalObject, ExternalObject, AcpiUtCopyIelementToEelement, &Info); *SpaceUsed = Info.Length; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtCopyIobjectToEobject * * PARAMETERS: InternalObject - The internal object to be converted * RetBuffer - Where the object is returned * * RETURN: Status * * DESCRIPTION: This function is called to build an API object to be returned * to the caller. * ******************************************************************************/ ACPI_STATUS AcpiUtCopyIobjectToEobject ( ACPI_OPERAND_OBJECT *InternalObject, ACPI_BUFFER *RetBuffer) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (UtCopyIobjectToEobject); if (InternalObject->Common.Type == ACPI_TYPE_PACKAGE) { /* * Package object: Copy all subobjects (including * nested packages) */ Status = AcpiUtCopyIpackageToEpackage (InternalObject, RetBuffer->Pointer, &RetBuffer->Length); } else { /* * Build a simple object (no nested objects) */ Status = AcpiUtCopyIsimpleToEsimple (InternalObject, ACPI_CAST_PTR (ACPI_OBJECT, RetBuffer->Pointer), ACPI_ADD_PTR (UINT8, RetBuffer->Pointer, ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT))), &RetBuffer->Length); /* * build simple does not include the object size in the length * so we add it in here */ RetBuffer->Length += sizeof (ACPI_OBJECT); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtCopyEsimpleToIsimple * * PARAMETERS: ExternalObject - The external object to be converted * RetInternalObject - Where the internal object is returned * * RETURN: Status * * DESCRIPTION: This function copies an external object to an internal one. * NOTE: Pointers can be copied, we don't need to copy data. * (The pointers have to be valid in our address space no matter * what we do with them!) * ******************************************************************************/ static ACPI_STATUS AcpiUtCopyEsimpleToIsimple ( ACPI_OBJECT *ExternalObject, ACPI_OPERAND_OBJECT **RetInternalObject) { ACPI_OPERAND_OBJECT *InternalObject; ACPI_FUNCTION_TRACE (UtCopyEsimpleToIsimple); /* * Simple types supported are: String, Buffer, Integer */ switch (ExternalObject->Type) { case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: case ACPI_TYPE_INTEGER: case ACPI_TYPE_LOCAL_REFERENCE: InternalObject = AcpiUtCreateInternalObject ( (UINT8) ExternalObject->Type); if (!InternalObject) { return_ACPI_STATUS (AE_NO_MEMORY); } break; case ACPI_TYPE_ANY: /* This is the case for a NULL object */ *RetInternalObject = NULL; return_ACPI_STATUS (AE_OK); default: /* All other types are not supported */ ACPI_ERROR ((AE_INFO, "Unsupported object type, cannot convert to internal object: %s", AcpiUtGetTypeName (ExternalObject->Type))); return_ACPI_STATUS (AE_SUPPORT); } /* Must COPY string and buffer contents */ switch (ExternalObject->Type) { case ACPI_TYPE_STRING: InternalObject->String.Pointer = ACPI_ALLOCATE_ZEROED ((ACPI_SIZE) ExternalObject->String.Length + 1); if (!InternalObject->String.Pointer) { goto ErrorExit; } memcpy (InternalObject->String.Pointer, ExternalObject->String.Pointer, ExternalObject->String.Length); InternalObject->String.Length = ExternalObject->String.Length; break; case ACPI_TYPE_BUFFER: InternalObject->Buffer.Pointer = ACPI_ALLOCATE_ZEROED (ExternalObject->Buffer.Length); if (!InternalObject->Buffer.Pointer) { goto ErrorExit; } memcpy (InternalObject->Buffer.Pointer, ExternalObject->Buffer.Pointer, ExternalObject->Buffer.Length); InternalObject->Buffer.Length = ExternalObject->Buffer.Length; /* Mark buffer data valid */ InternalObject->Buffer.Flags |= AOPOBJ_DATA_VALID; break; case ACPI_TYPE_INTEGER: InternalObject->Integer.Value = ExternalObject->Integer.Value; break; case ACPI_TYPE_LOCAL_REFERENCE: /* An incoming reference is defined to be a namespace node */ InternalObject->Reference.Class = ACPI_REFCLASS_REFOF; InternalObject->Reference.Object = ExternalObject->Reference.Handle; break; default: /* Other types can't get here */ break; } *RetInternalObject = InternalObject; return_ACPI_STATUS (AE_OK); ErrorExit: AcpiUtRemoveReference (InternalObject); return_ACPI_STATUS (AE_NO_MEMORY); } /******************************************************************************* * * FUNCTION: AcpiUtCopyEpackageToIpackage * * PARAMETERS: ExternalObject - The external object to be converted * InternalObject - Where the internal object is returned * * RETURN: Status * * DESCRIPTION: Copy an external package object to an internal package. * Handles nested packages. * ******************************************************************************/ static ACPI_STATUS AcpiUtCopyEpackageToIpackage ( ACPI_OBJECT *ExternalObject, ACPI_OPERAND_OBJECT **InternalObject) { ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT *PackageObject; ACPI_OPERAND_OBJECT **PackageElements; UINT32 i; ACPI_FUNCTION_TRACE (UtCopyEpackageToIpackage); /* Create the package object */ PackageObject = AcpiUtCreatePackageObject ( ExternalObject->Package.Count); if (!PackageObject) { return_ACPI_STATUS (AE_NO_MEMORY); } PackageElements = PackageObject->Package.Elements; /* * Recursive implementation. Probably ok, since nested external * packages as parameters should be very rare. */ for (i = 0; i < ExternalObject->Package.Count; i++) { Status = AcpiUtCopyEobjectToIobject ( &ExternalObject->Package.Elements[i], &PackageElements[i]); if (ACPI_FAILURE (Status)) { /* Truncate package and delete it */ PackageObject->Package.Count = i; PackageElements[i] = NULL; AcpiUtRemoveReference (PackageObject); return_ACPI_STATUS (Status); } } /* Mark package data valid */ PackageObject->Package.Flags |= AOPOBJ_DATA_VALID; *InternalObject = PackageObject; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtCopyEobjectToIobject * * PARAMETERS: ExternalObject - The external object to be converted * InternalObject - Where the internal object is returned * * RETURN: Status * * DESCRIPTION: Converts an external object to an internal object. * ******************************************************************************/ ACPI_STATUS AcpiUtCopyEobjectToIobject ( ACPI_OBJECT *ExternalObject, ACPI_OPERAND_OBJECT **InternalObject) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (UtCopyEobjectToIobject); if (ExternalObject->Type == ACPI_TYPE_PACKAGE) { Status = AcpiUtCopyEpackageToIpackage ( ExternalObject, InternalObject); } else { /* * Build a simple object (no nested objects) */ Status = AcpiUtCopyEsimpleToIsimple (ExternalObject, InternalObject); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtCopySimpleObject * * PARAMETERS: SourceDesc - The internal object to be copied * DestDesc - New target object * * RETURN: Status * * DESCRIPTION: Simple copy of one internal object to another. Reference count * of the destination object is preserved. * ******************************************************************************/ static ACPI_STATUS AcpiUtCopySimpleObject ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *DestDesc) { UINT16 ReferenceCount; ACPI_OPERAND_OBJECT *NextObject; ACPI_STATUS Status; ACPI_SIZE CopySize; /* Save fields from destination that we don't want to overwrite */ ReferenceCount = DestDesc->Common.ReferenceCount; NextObject = DestDesc->Common.NextObject; /* * Copy the entire source object over the destination object. * Note: Source can be either an operand object or namespace node. */ CopySize = sizeof (ACPI_OPERAND_OBJECT); if (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc) == ACPI_DESC_TYPE_NAMED) { CopySize = sizeof (ACPI_NAMESPACE_NODE); } memcpy (ACPI_CAST_PTR (char, DestDesc), ACPI_CAST_PTR (char, SourceDesc), CopySize); /* Restore the saved fields */ DestDesc->Common.ReferenceCount = ReferenceCount; DestDesc->Common.NextObject = NextObject; /* New object is not static, regardless of source */ DestDesc->Common.Flags &= ~AOPOBJ_STATIC_POINTER; /* Handle the objects with extra data */ switch (DestDesc->Common.Type) { case ACPI_TYPE_BUFFER: /* * Allocate and copy the actual buffer if and only if: * 1) There is a valid buffer pointer * 2) The buffer has a length > 0 */ if ((SourceDesc->Buffer.Pointer) && (SourceDesc->Buffer.Length)) { DestDesc->Buffer.Pointer = ACPI_ALLOCATE (SourceDesc->Buffer.Length); if (!DestDesc->Buffer.Pointer) { return (AE_NO_MEMORY); } /* Copy the actual buffer data */ memcpy (DestDesc->Buffer.Pointer, SourceDesc->Buffer.Pointer, SourceDesc->Buffer.Length); } break; case ACPI_TYPE_STRING: /* * Allocate and copy the actual string if and only if: * 1) There is a valid string pointer * (Pointer to a NULL string is allowed) */ if (SourceDesc->String.Pointer) { DestDesc->String.Pointer = ACPI_ALLOCATE ((ACPI_SIZE) SourceDesc->String.Length + 1); if (!DestDesc->String.Pointer) { return (AE_NO_MEMORY); } /* Copy the actual string data */ memcpy (DestDesc->String.Pointer, SourceDesc->String.Pointer, (ACPI_SIZE) SourceDesc->String.Length + 1); } break; case ACPI_TYPE_LOCAL_REFERENCE: /* * We copied the reference object, so we now must add a reference * to the object pointed to by the reference * * DDBHandle reference (from Load/LoadTable) is a special reference, * it does not have a Reference.Object, so does not need to * increase the reference count */ if (SourceDesc->Reference.Class == ACPI_REFCLASS_TABLE) { break; } AcpiUtAddReference (SourceDesc->Reference.Object); break; case ACPI_TYPE_REGION: /* * We copied the Region Handler, so we now must add a reference */ if (DestDesc->Region.Handler) { AcpiUtAddReference (DestDesc->Region.Handler); } break; /* * For Mutex and Event objects, we cannot simply copy the underlying * OS object. We must create a new one. */ case ACPI_TYPE_MUTEX: Status = AcpiOsCreateMutex (&DestDesc->Mutex.OsMutex); if (ACPI_FAILURE (Status)) { return (Status); } break; case ACPI_TYPE_EVENT: Status = AcpiOsCreateSemaphore (ACPI_NO_UNIT_LIMIT, 0, &DestDesc->Event.OsSemaphore); if (ACPI_FAILURE (Status)) { return (Status); } break; default: /* Nothing to do for other simple objects */ break; } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtCopyIelementToIelement * * PARAMETERS: ACPI_PKG_CALLBACK * * RETURN: Status * * DESCRIPTION: Copy one package element to another package element * ******************************************************************************/ static ACPI_STATUS AcpiUtCopyIelementToIelement ( UINT8 ObjectType, ACPI_OPERAND_OBJECT *SourceObject, ACPI_GENERIC_STATE *State, void *Context) { ACPI_STATUS Status = AE_OK; UINT32 ThisIndex; ACPI_OPERAND_OBJECT **ThisTargetPtr; ACPI_OPERAND_OBJECT *TargetObject; ACPI_FUNCTION_ENTRY (); ThisIndex = State->Pkg.Index; ThisTargetPtr = (ACPI_OPERAND_OBJECT **) &State->Pkg.DestObject->Package.Elements[ThisIndex]; switch (ObjectType) { case ACPI_COPY_TYPE_SIMPLE: /* A null source object indicates a (legal) null package element */ if (SourceObject) { /* * This is a simple object, just copy it */ TargetObject = AcpiUtCreateInternalObject ( SourceObject->Common.Type); if (!TargetObject) { return (AE_NO_MEMORY); } Status = AcpiUtCopySimpleObject (SourceObject, TargetObject); if (ACPI_FAILURE (Status)) { goto ErrorExit; } *ThisTargetPtr = TargetObject; } else { /* Pass through a null element */ *ThisTargetPtr = NULL; } break; case ACPI_COPY_TYPE_PACKAGE: /* * This object is a package - go down another nesting level * Create and build the package object */ TargetObject = AcpiUtCreatePackageObject ( SourceObject->Package.Count); if (!TargetObject) { return (AE_NO_MEMORY); } TargetObject->Common.Flags = SourceObject->Common.Flags; /* Pass the new package object back to the package walk routine */ State->Pkg.ThisTargetObj = TargetObject; /* Store the object pointer in the parent package object */ *ThisTargetPtr = TargetObject; break; default: return (AE_BAD_PARAMETER); } return (Status); ErrorExit: AcpiUtRemoveReference (TargetObject); return (Status); } /******************************************************************************* * * FUNCTION: AcpiUtCopyIpackageToIpackage * * PARAMETERS: SourceObj - Pointer to the source package object * DestObj - Where the internal object is returned * WalkState - Current Walk state descriptor * * RETURN: Status * * DESCRIPTION: This function is called to copy an internal package object * into another internal package object. * ******************************************************************************/ static ACPI_STATUS AcpiUtCopyIpackageToIpackage ( ACPI_OPERAND_OBJECT *SourceObj, ACPI_OPERAND_OBJECT *DestObj, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (UtCopyIpackageToIpackage); DestObj->Common.Type = SourceObj->Common.Type; DestObj->Common.Flags = SourceObj->Common.Flags; DestObj->Package.Count = SourceObj->Package.Count; /* * Create the object array and walk the source package tree */ DestObj->Package.Elements = ACPI_ALLOCATE_ZEROED ( ((ACPI_SIZE) SourceObj->Package.Count + 1) * sizeof (void *)); if (!DestObj->Package.Elements) { ACPI_ERROR ((AE_INFO, "Package allocation failure")); return_ACPI_STATUS (AE_NO_MEMORY); } /* * Copy the package element-by-element by walking the package "tree". * This handles nested packages of arbitrary depth. */ Status = AcpiUtWalkPackageTree (SourceObj, DestObj, AcpiUtCopyIelementToIelement, WalkState); if (ACPI_FAILURE (Status)) { /* On failure, delete the destination package object */ AcpiUtRemoveReference (DestObj); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtCopyIobjectToIobject * * PARAMETERS: SourceDesc - The internal object to be copied * DestDesc - Where the copied object is returned * WalkState - Current walk state * * RETURN: Status * * DESCRIPTION: Copy an internal object to a new internal object * ******************************************************************************/ ACPI_STATUS AcpiUtCopyIobjectToIobject ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT **DestDesc, ACPI_WALK_STATE *WalkState) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (UtCopyIobjectToIobject); /* Create the top level object */ *DestDesc = AcpiUtCreateInternalObject (SourceDesc->Common.Type); if (!*DestDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Copy the object and possible subobjects */ if (SourceDesc->Common.Type == ACPI_TYPE_PACKAGE) { Status = AcpiUtCopyIpackageToIpackage ( SourceDesc, *DestDesc, WalkState); } else { Status = AcpiUtCopySimpleObject (SourceDesc, *DestDesc); } /* Delete the allocated object if copy failed */ if (ACPI_FAILURE (Status)) { AcpiUtRemoveReference (*DestDesc); } return_ACPI_STATUS (Status); } src/acpica/source/components/utilities/utdebug.c000066400000000000000000000670571465205512700224160ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utdebug - Debug print/trace routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #include "acinterp.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utdebug") #ifdef ACPI_DEBUG_OUTPUT static ACPI_THREAD_ID AcpiGbl_PreviousThreadId = (ACPI_THREAD_ID) 0xFFFFFFFF; static const char *AcpiGbl_FunctionEntryPrefix = "----Entry"; static const char *AcpiGbl_FunctionExitPrefix = "----Exit-"; /******************************************************************************* * * FUNCTION: AcpiUtInitStackPtrTrace * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Save the current CPU stack pointer at subsystem startup * ******************************************************************************/ void AcpiUtInitStackPtrTrace ( void) { ACPI_SIZE CurrentSp; #pragma GCC diagnostic push #if defined(__GNUC__) && __GNUC__ >= 12 #pragma GCC diagnostic ignored "-Wdangling-pointer=" #endif AcpiGbl_EntryStackPointer = &CurrentSp; #pragma GCC diagnostic pop } /******************************************************************************* * * FUNCTION: AcpiUtTrackStackPtr * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Save the current CPU stack pointer * ******************************************************************************/ void AcpiUtTrackStackPtr ( void) { ACPI_SIZE CurrentSp; if (&CurrentSp < AcpiGbl_LowestStackPointer) { #pragma GCC diagnostic push #if defined(__GNUC__) && __GNUC__ >= 12 #pragma GCC diagnostic ignored "-Wdangling-pointer=" #endif AcpiGbl_LowestStackPointer = &CurrentSp; #pragma GCC diagnostic pop } if (AcpiGbl_NestingLevel > AcpiGbl_DeepestNesting) { AcpiGbl_DeepestNesting = AcpiGbl_NestingLevel; } } /******************************************************************************* * * FUNCTION: AcpiUtTrimFunctionName * * PARAMETERS: FunctionName - Ascii string containing a procedure name * * RETURN: Updated pointer to the function name * * DESCRIPTION: Remove the "Acpi" prefix from the function name, if present. * This allows compiler macros such as __FUNCTION__ to be used * with no change to the debug output. * ******************************************************************************/ static const char * AcpiUtTrimFunctionName ( const char *FunctionName) { /* All Function names are longer than 4 chars, check is safe */ if (*(ACPI_CAST_PTR (UINT32, FunctionName)) == ACPI_PREFIX_MIXED) { /* This is the case where the original source has not been modified */ return (FunctionName + 4); } if (*(ACPI_CAST_PTR (UINT32, FunctionName)) == ACPI_PREFIX_LOWER) { /* This is the case where the source has been 'linuxized' */ return (FunctionName + 5); } return (FunctionName); } /******************************************************************************* * * FUNCTION: AcpiDebugPrint * * PARAMETERS: RequestedDebugLevel - Requested debug print level * LineNumber - Caller's line number (for error output) * FunctionName - Caller's procedure name * ModuleName - Caller's module name * ComponentId - Caller's component ID * Format - Printf format field * ... - Optional printf arguments * * RETURN: None * * DESCRIPTION: Print error message with prefix consisting of the module name, * line number, and component ID. * ******************************************************************************/ void ACPI_INTERNAL_VAR_XFACE AcpiDebugPrint ( UINT32 RequestedDebugLevel, UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, const char *Format, ...) { ACPI_THREAD_ID ThreadId; va_list args; #ifdef ACPI_APPLICATION int FillCount; #endif /* Check if debug output enabled */ if (!ACPI_IS_DEBUG_ENABLED (RequestedDebugLevel, ComponentId)) { return; } /* * Thread tracking and context switch notification */ ThreadId = AcpiOsGetThreadId (); if (ThreadId != AcpiGbl_PreviousThreadId) { if (ACPI_LV_THREADS & AcpiDbgLevel) { AcpiOsPrintf ( "\n**** Context Switch from TID %u to TID %u ****\n\n", (UINT32) AcpiGbl_PreviousThreadId, (UINT32) ThreadId); } AcpiGbl_PreviousThreadId = ThreadId; AcpiGbl_NestingLevel = 0; } /* * Display the module name, current line number, thread ID (if requested), * current procedure nesting level, and the current procedure name */ AcpiOsPrintf ("%9s-%04d ", ModuleName, LineNumber); #ifdef ACPI_APPLICATION /* * For AcpiExec/iASL only, emit the thread ID and nesting level. * Note: nesting level is really only useful during a single-thread * execution. Otherwise, multiple threads will keep resetting the * level. */ if (ACPI_LV_THREADS & AcpiDbgLevel) { AcpiOsPrintf ("[%u] ", (UINT32) ThreadId); } FillCount = 48 - AcpiGbl_NestingLevel - strlen (AcpiUtTrimFunctionName (FunctionName)); if (FillCount < 0) { FillCount = 0; } AcpiOsPrintf ("[%02d] %*s", AcpiGbl_NestingLevel, AcpiGbl_NestingLevel + 1, " "); AcpiOsPrintf ("%s%*s: ", AcpiUtTrimFunctionName (FunctionName), FillCount, " "); #else AcpiOsPrintf ("%-22.22s: ", AcpiUtTrimFunctionName (FunctionName)); #endif va_start (args, Format); AcpiOsVprintf (Format, args); va_end (args); } ACPI_EXPORT_SYMBOL (AcpiDebugPrint) /******************************************************************************* * * FUNCTION: AcpiDebugPrintRaw * * PARAMETERS: RequestedDebugLevel - Requested debug print level * LineNumber - Caller's line number * FunctionName - Caller's procedure name * ModuleName - Caller's module name * ComponentId - Caller's component ID * Format - Printf format field * ... - Optional printf arguments * * RETURN: None * * DESCRIPTION: Print message with no headers. Has same interface as * DebugPrint so that the same macros can be used. * ******************************************************************************/ void ACPI_INTERNAL_VAR_XFACE AcpiDebugPrintRaw ( UINT32 RequestedDebugLevel, UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, const char *Format, ...) { va_list args; /* Check if debug output enabled */ if (!ACPI_IS_DEBUG_ENABLED (RequestedDebugLevel, ComponentId)) { return; } va_start (args, Format); AcpiOsVprintf (Format, args); va_end (args); } ACPI_EXPORT_SYMBOL (AcpiDebugPrintRaw) /******************************************************************************* * * FUNCTION: AcpiUtTrace * * PARAMETERS: LineNumber - Caller's line number * FunctionName - Caller's procedure name * ModuleName - Caller's module name * ComponentId - Caller's component ID * * RETURN: None * * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is * set in DebugLevel * ******************************************************************************/ void AcpiUtTrace ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId) { AcpiGbl_NestingLevel++; AcpiUtTrackStackPtr (); /* Check if enabled up-front for performance */ if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) { AcpiDebugPrint (ACPI_LV_FUNCTIONS, LineNumber, FunctionName, ModuleName, ComponentId, "%s\n", AcpiGbl_FunctionEntryPrefix); } } ACPI_EXPORT_SYMBOL (AcpiUtTrace) /******************************************************************************* * * FUNCTION: AcpiUtTracePtr * * PARAMETERS: LineNumber - Caller's line number * FunctionName - Caller's procedure name * ModuleName - Caller's module name * ComponentId - Caller's component ID * Pointer - Pointer to display * * RETURN: None * * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is * set in DebugLevel * ******************************************************************************/ void AcpiUtTracePtr ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, const void *Pointer) { AcpiGbl_NestingLevel++; AcpiUtTrackStackPtr (); /* Check if enabled up-front for performance */ if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) { AcpiDebugPrint (ACPI_LV_FUNCTIONS, LineNumber, FunctionName, ModuleName, ComponentId, "%s %p\n", AcpiGbl_FunctionEntryPrefix, Pointer); } } /******************************************************************************* * * FUNCTION: AcpiUtTraceStr * * PARAMETERS: LineNumber - Caller's line number * FunctionName - Caller's procedure name * ModuleName - Caller's module name * ComponentId - Caller's component ID * String - Additional string to display * * RETURN: None * * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is * set in DebugLevel * ******************************************************************************/ void AcpiUtTraceStr ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, const char *String) { AcpiGbl_NestingLevel++; AcpiUtTrackStackPtr (); /* Check if enabled up-front for performance */ if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) { AcpiDebugPrint (ACPI_LV_FUNCTIONS, LineNumber, FunctionName, ModuleName, ComponentId, "%s %s\n", AcpiGbl_FunctionEntryPrefix, String); } } /******************************************************************************* * * FUNCTION: AcpiUtTraceU32 * * PARAMETERS: LineNumber - Caller's line number * FunctionName - Caller's procedure name * ModuleName - Caller's module name * ComponentId - Caller's component ID * Integer - Integer to display * * RETURN: None * * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is * set in DebugLevel * ******************************************************************************/ void AcpiUtTraceU32 ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, UINT32 Integer) { AcpiGbl_NestingLevel++; AcpiUtTrackStackPtr (); /* Check if enabled up-front for performance */ if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) { AcpiDebugPrint (ACPI_LV_FUNCTIONS, LineNumber, FunctionName, ModuleName, ComponentId, "%s %08X\n", AcpiGbl_FunctionEntryPrefix, Integer); } } /******************************************************************************* * * FUNCTION: AcpiUtExit * * PARAMETERS: LineNumber - Caller's line number * FunctionName - Caller's procedure name * ModuleName - Caller's module name * ComponentId - Caller's component ID * * RETURN: None * * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is * set in DebugLevel * ******************************************************************************/ void AcpiUtExit ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId) { /* Check if enabled up-front for performance */ if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) { AcpiDebugPrint (ACPI_LV_FUNCTIONS, LineNumber, FunctionName, ModuleName, ComponentId, "%s\n", AcpiGbl_FunctionExitPrefix); } if (AcpiGbl_NestingLevel) { AcpiGbl_NestingLevel--; } } ACPI_EXPORT_SYMBOL (AcpiUtExit) /******************************************************************************* * * FUNCTION: AcpiUtStatusExit * * PARAMETERS: LineNumber - Caller's line number * FunctionName - Caller's procedure name * ModuleName - Caller's module name * ComponentId - Caller's component ID * Status - Exit status code * * RETURN: None * * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is * set in DebugLevel. Prints exit status also. * ******************************************************************************/ void AcpiUtStatusExit ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, ACPI_STATUS Status) { /* Check if enabled up-front for performance */ if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) { if (ACPI_SUCCESS (Status)) { AcpiDebugPrint (ACPI_LV_FUNCTIONS, LineNumber, FunctionName, ModuleName, ComponentId, "%s %s\n", AcpiGbl_FunctionExitPrefix, AcpiFormatException (Status)); } else { AcpiDebugPrint (ACPI_LV_FUNCTIONS, LineNumber, FunctionName, ModuleName, ComponentId, "%s ****Exception****: %s\n", AcpiGbl_FunctionExitPrefix, AcpiFormatException (Status)); } } if (AcpiGbl_NestingLevel) { AcpiGbl_NestingLevel--; } } ACPI_EXPORT_SYMBOL (AcpiUtStatusExit) /******************************************************************************* * * FUNCTION: AcpiUtValueExit * * PARAMETERS: LineNumber - Caller's line number * FunctionName - Caller's procedure name * ModuleName - Caller's module name * ComponentId - Caller's component ID * Value - Value to be printed with exit msg * * RETURN: None * * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is * set in DebugLevel. Prints exit value also. * ******************************************************************************/ void AcpiUtValueExit ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, UINT64 Value) { /* Check if enabled up-front for performance */ if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) { AcpiDebugPrint (ACPI_LV_FUNCTIONS, LineNumber, FunctionName, ModuleName, ComponentId, "%s %8.8X%8.8X\n", AcpiGbl_FunctionExitPrefix, ACPI_FORMAT_UINT64 (Value)); } if (AcpiGbl_NestingLevel) { AcpiGbl_NestingLevel--; } } ACPI_EXPORT_SYMBOL (AcpiUtValueExit) /******************************************************************************* * * FUNCTION: AcpiUtPtrExit * * PARAMETERS: LineNumber - Caller's line number * FunctionName - Caller's procedure name * ModuleName - Caller's module name * ComponentId - Caller's component ID * Ptr - Pointer to display * * RETURN: None * * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is * set in DebugLevel. Prints exit value also. * ******************************************************************************/ void AcpiUtPtrExit ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, UINT8 *Ptr) { /* Check if enabled up-front for performance */ if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) { AcpiDebugPrint (ACPI_LV_FUNCTIONS, LineNumber, FunctionName, ModuleName, ComponentId, "%s %p\n", AcpiGbl_FunctionExitPrefix, Ptr); } if (AcpiGbl_NestingLevel) { AcpiGbl_NestingLevel--; } } /******************************************************************************* * * FUNCTION: AcpiUtStrExit * * PARAMETERS: LineNumber - Caller's line number * FunctionName - Caller's procedure name * ModuleName - Caller's module name * ComponentId - Caller's component ID * String - String to display * * RETURN: None * * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is * set in DebugLevel. Prints exit value also. * ******************************************************************************/ void AcpiUtStrExit ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, const char *String) { /* Check if enabled up-front for performance */ if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) { AcpiDebugPrint (ACPI_LV_FUNCTIONS, LineNumber, FunctionName, ModuleName, ComponentId, "%s %s\n", AcpiGbl_FunctionExitPrefix, String); } if (AcpiGbl_NestingLevel) { AcpiGbl_NestingLevel--; } } /******************************************************************************* * * FUNCTION: AcpiTracePoint * * PARAMETERS: Type - Trace event type * Begin - TRUE if before execution * Aml - Executed AML address * Pathname - Object path * Pointer - Pointer to the related object * * RETURN: None * * DESCRIPTION: Interpreter execution trace. * ******************************************************************************/ void AcpiTracePoint ( ACPI_TRACE_EVENT_TYPE Type, BOOLEAN Begin, UINT8 *Aml, char *Pathname) { ACPI_FUNCTION_ENTRY (); AcpiExTracePoint (Type, Begin, Aml, Pathname); #ifdef ACPI_USE_SYSTEM_TRACER AcpiOsTracePoint (Type, Begin, Aml, Pathname); #endif } ACPI_EXPORT_SYMBOL (AcpiTracePoint) #endif src/acpica/source/components/utilities/utdecode.c000066400000000000000000000616041465205512700225430ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utdecode - Utility decoding routines (value-to-string) * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "amlcode.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utdecode") /* * Properties of the ACPI Object Types, both internal and external. * The table is indexed by values of ACPI_OBJECT_TYPE */ const UINT8 AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] = { ACPI_NS_NORMAL, /* 00 Any */ ACPI_NS_NORMAL, /* 01 Number */ ACPI_NS_NORMAL, /* 02 String */ ACPI_NS_NORMAL, /* 03 Buffer */ ACPI_NS_NORMAL, /* 04 Package */ ACPI_NS_NORMAL, /* 05 FieldUnit */ ACPI_NS_NEWSCOPE, /* 06 Device */ ACPI_NS_NORMAL, /* 07 Event */ ACPI_NS_NEWSCOPE, /* 08 Method */ ACPI_NS_NORMAL, /* 09 Mutex */ ACPI_NS_NORMAL, /* 10 Region */ ACPI_NS_NEWSCOPE, /* 11 Power */ ACPI_NS_NEWSCOPE, /* 12 Processor */ ACPI_NS_NEWSCOPE, /* 13 Thermal */ ACPI_NS_NORMAL, /* 14 BufferField */ ACPI_NS_NORMAL, /* 15 DdbHandle */ ACPI_NS_NORMAL, /* 16 Debug Object */ ACPI_NS_NORMAL, /* 17 DefField */ ACPI_NS_NORMAL, /* 18 BankField */ ACPI_NS_NORMAL, /* 19 IndexField */ ACPI_NS_NORMAL, /* 20 Reference */ ACPI_NS_NORMAL, /* 21 Alias */ ACPI_NS_NORMAL, /* 22 MethodAlias */ ACPI_NS_NORMAL, /* 23 Notify */ ACPI_NS_NORMAL, /* 24 Address Handler */ ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 25 Resource Desc */ ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 26 Resource Field */ ACPI_NS_NEWSCOPE, /* 27 Scope */ ACPI_NS_NORMAL, /* 28 Extra */ ACPI_NS_NORMAL, /* 29 Data */ ACPI_NS_NORMAL /* 30 Invalid */ }; /******************************************************************************* * * FUNCTION: AcpiUtGetRegionName * * PARAMETERS: Space ID - ID for the region * * RETURN: Decoded region SpaceId name * * DESCRIPTION: Translate a Space ID into a name string (Debug only) * ******************************************************************************/ /* Region type decoding */ const char *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] = { "SystemMemory", /* 0x00 */ "SystemIO", /* 0x01 */ "PCI_Config", /* 0x02 */ "EmbeddedControl", /* 0x03 */ "SMBus", /* 0x04 */ "SystemCMOS", /* 0x05 */ "PCIBARTarget", /* 0x06 */ "IPMI", /* 0x07 */ "GeneralPurposeIo", /* 0x08 */ "GenericSerialBus", /* 0x09 */ "PCC", /* 0x0A */ "PlatformRtMechanism" /* 0x0B */ }; const char * AcpiUtGetRegionName ( UINT8 SpaceId) { if (SpaceId >= ACPI_USER_REGION_BEGIN) { return ("UserDefinedRegion"); } else if (SpaceId == ACPI_ADR_SPACE_DATA_TABLE) { return ("DataTable"); } else if (SpaceId == ACPI_ADR_SPACE_FIXED_HARDWARE) { return ("FunctionalFixedHW"); } else if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS) { return ("InvalidSpaceId"); } return (AcpiGbl_RegionTypes[SpaceId]); } /******************************************************************************* * * FUNCTION: AcpiUtGetEventName * * PARAMETERS: EventId - Fixed event ID * * RETURN: Decoded event ID name * * DESCRIPTION: Translate a Event ID into a name string (Debug only) * ******************************************************************************/ /* Event type decoding */ static const char *AcpiGbl_EventTypes[ACPI_NUM_FIXED_EVENTS] = { "PM_Timer", "GlobalLock", "PowerButton", "SleepButton", "RealTimeClock", }; const char * AcpiUtGetEventName ( UINT32 EventId) { if (EventId > ACPI_EVENT_MAX) { return ("InvalidEventID"); } return (AcpiGbl_EventTypes[EventId]); } /******************************************************************************* * * FUNCTION: AcpiUtGetTypeName * * PARAMETERS: Type - An ACPI object type * * RETURN: Decoded ACPI object type name * * DESCRIPTION: Translate a Type ID into a name string (Debug only) * ******************************************************************************/ /* * Elements of AcpiGbl_NsTypeNames below must match * one-to-one with values of ACPI_OBJECT_TYPE * * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching; * when stored in a table it really means that we have thus far seen no * evidence to indicate what type is actually going to be stored for this & entry. */ static const char AcpiGbl_BadType[] = "UNDEFINED"; /* Printable names of the ACPI object types */ static const char *AcpiGbl_NsTypeNames[] = { /* 00 */ "Untyped", /* 01 */ "Integer", /* 02 */ "String", /* 03 */ "Buffer", /* 04 */ "Package", /* 05 */ "FieldUnit", /* 06 */ "Device", /* 07 */ "Event", /* 08 */ "Method", /* 09 */ "Mutex", /* 10 */ "Region", /* 11 */ "Power", /* 12 */ "Processor", /* 13 */ "Thermal", /* 14 */ "BufferField", /* 15 */ "DdbHandle", /* 16 */ "DebugObject", /* 17 */ "RegionField", /* 18 */ "BankField", /* 19 */ "IndexField", /* 20 */ "Reference", /* 21 */ "Alias", /* 22 */ "MethodAlias", /* 23 */ "Notify", /* 24 */ "AddrHandler", /* 25 */ "ResourceDesc", /* 26 */ "ResourceFld", /* 27 */ "Scope", /* 28 */ "Extra", /* 29 */ "Data", /* 30 */ "Invalid" }; const char * AcpiUtGetTypeName ( ACPI_OBJECT_TYPE Type) { if (Type > ACPI_TYPE_INVALID) { return (AcpiGbl_BadType); } return (AcpiGbl_NsTypeNames[Type]); } const char * AcpiUtGetObjectTypeName ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_FUNCTION_TRACE (UtGetObjectTypeName); if (!ObjDesc) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n")); return_STR ("[NULL Object Descriptor]"); } /* These descriptor types share a common area */ if ((ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) && (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_NAMED)) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Invalid object descriptor type: 0x%2.2X [%s] (%p)\n", ACPI_GET_DESCRIPTOR_TYPE (ObjDesc), AcpiUtGetDescriptorName (ObjDesc), ObjDesc)); return_STR ("Invalid object"); } return_STR (AcpiUtGetTypeName (ObjDesc->Common.Type)); } /******************************************************************************* * * FUNCTION: AcpiUtGetNodeName * * PARAMETERS: Object - A namespace node * * RETURN: ASCII name of the node * * DESCRIPTION: Validate the node and return the node's ACPI name. * ******************************************************************************/ const char * AcpiUtGetNodeName ( void *Object) { ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) Object; /* Must return a string of exactly 4 characters == ACPI_NAMESEG_SIZE */ if (!Object) { return ("NULL"); } /* Check for Root node */ if ((Object == ACPI_ROOT_OBJECT) || (Object == AcpiGbl_RootNode)) { return ("\"\\\" "); } /* Descriptor must be a namespace node */ if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) { return ("####"); } /* * Ensure name is valid. The name was validated/repaired when the node * was created, but make sure it has not been corrupted. */ AcpiUtRepairName (Node->Name.Ascii); /* Return the name */ return (Node->Name.Ascii); } /******************************************************************************* * * FUNCTION: AcpiUtGetDescriptorName * * PARAMETERS: Object - An ACPI object * * RETURN: Decoded name of the descriptor type * * DESCRIPTION: Validate object and return the descriptor type * ******************************************************************************/ /* Printable names of object descriptor types */ static const char *AcpiGbl_DescTypeNames[] = { /* 00 */ "Not a Descriptor", /* 01 */ "Cached Object", /* 02 */ "State-Generic", /* 03 */ "State-Update", /* 04 */ "State-Package", /* 05 */ "State-Control", /* 06 */ "State-RootParseScope", /* 07 */ "State-ParseScope", /* 08 */ "State-WalkScope", /* 09 */ "State-Result", /* 10 */ "State-Notify", /* 11 */ "State-Thread", /* 12 */ "Tree Walk State", /* 13 */ "Parse Tree Op", /* 14 */ "Operand Object", /* 15 */ "Namespace Node" }; const char * AcpiUtGetDescriptorName ( void *Object) { if (!Object) { return ("NULL OBJECT"); } if (ACPI_GET_DESCRIPTOR_TYPE (Object) > ACPI_DESC_TYPE_MAX) { return ("Not a Descriptor"); } return (AcpiGbl_DescTypeNames[ACPI_GET_DESCRIPTOR_TYPE (Object)]); } /******************************************************************************* * * FUNCTION: AcpiUtGetReferenceName * * PARAMETERS: Object - An ACPI reference object * * RETURN: Decoded name of the type of reference * * DESCRIPTION: Decode a reference object sub-type to a string. * ******************************************************************************/ /* Printable names of reference object sub-types */ static const char *AcpiGbl_RefClassNames[] = { /* 00 */ "Local", /* 01 */ "Argument", /* 02 */ "RefOf", /* 03 */ "Index", /* 04 */ "DdbHandle", /* 05 */ "Named Object", /* 06 */ "Debug" }; const char * AcpiUtGetReferenceName ( ACPI_OPERAND_OBJECT *Object) { if (!Object) { return ("NULL Object"); } if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND) { return ("Not an Operand object"); } if (Object->Common.Type != ACPI_TYPE_LOCAL_REFERENCE) { return ("Not a Reference object"); } if (Object->Reference.Class > ACPI_REFCLASS_MAX) { return ("Unknown Reference class"); } return (AcpiGbl_RefClassNames[Object->Reference.Class]); } /******************************************************************************* * * FUNCTION: AcpiUtGetMutexName * * PARAMETERS: MutexId - The predefined ID for this mutex. * * RETURN: Decoded name of the internal mutex * * DESCRIPTION: Translate a mutex ID into a name string (Debug only) * ******************************************************************************/ /* Names for internal mutex objects, used for debug output */ static const char *AcpiGbl_MutexNames[ACPI_NUM_MUTEX] = { "ACPI_MTX_Interpreter", "ACPI_MTX_Namespace", "ACPI_MTX_Tables", "ACPI_MTX_Events", "ACPI_MTX_Caches", "ACPI_MTX_Memory", }; const char * AcpiUtGetMutexName ( UINT32 MutexId) { if (MutexId > ACPI_MAX_MUTEX) { return ("Invalid Mutex ID"); } return (AcpiGbl_MutexNames[MutexId]); } #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) /* * Strings and procedures used for debug only */ /******************************************************************************* * * FUNCTION: AcpiUtGetNotifyName * * PARAMETERS: NotifyValue - Value from the Notify() request * * RETURN: Decoded name for the notify value * * DESCRIPTION: Translate a Notify Value to a notify namestring. * ******************************************************************************/ /* Names for Notify() values, used for debug output */ static const char *AcpiGbl_GenericNotify[ACPI_GENERIC_NOTIFY_MAX + 1] = { /* 00 */ "Bus Check", /* 01 */ "Device Check", /* 02 */ "Device Wake", /* 03 */ "Eject Request", /* 04 */ "Device Check Light", /* 05 */ "Frequency Mismatch", /* 06 */ "Bus Mode Mismatch", /* 07 */ "Power Fault", /* 08 */ "Capabilities Check", /* 09 */ "Device PLD Check", /* 0A */ "Reserved", /* 0B */ "System Locality Update", /* 0C */ "Reserved (was previously Shutdown Request)", /* Reserved in ACPI 6.0 */ /* 0D */ "System Resource Affinity Update", /* 0E */ "Heterogeneous Memory Attributes Update", /* ACPI 6.2 */ /* 0F */ "Error Disconnect Recover" /* ACPI 6.3 */ }; static const char *AcpiGbl_DeviceNotify[5] = { /* 80 */ "Status Change", /* 81 */ "Information Change", /* 82 */ "Device-Specific Change", /* 83 */ "Device-Specific Change", /* 84 */ "Reserved" }; static const char *AcpiGbl_ProcessorNotify[5] = { /* 80 */ "Performance Capability Change", /* 81 */ "C-State Change", /* 82 */ "Throttling Capability Change", /* 83 */ "Guaranteed Change", /* 84 */ "Minimum Excursion" }; static const char *AcpiGbl_ThermalNotify[5] = { /* 80 */ "Thermal Status Change", /* 81 */ "Thermal Trip Point Change", /* 82 */ "Thermal Device List Change", /* 83 */ "Thermal Relationship Change", /* 84 */ "Reserved" }; const char * AcpiUtGetNotifyName ( UINT32 NotifyValue, ACPI_OBJECT_TYPE Type) { /* 00 - 0F are "common to all object types" (from ACPI Spec) */ if (NotifyValue <= ACPI_GENERIC_NOTIFY_MAX) { return (AcpiGbl_GenericNotify[NotifyValue]); } /* 10 - 7F are reserved */ if (NotifyValue <= ACPI_MAX_SYS_NOTIFY) { return ("Reserved"); } /* 80 - 84 are per-object-type */ if (NotifyValue <= ACPI_SPECIFIC_NOTIFY_MAX) { switch (Type) { case ACPI_TYPE_ANY: case ACPI_TYPE_DEVICE: return (AcpiGbl_DeviceNotify [NotifyValue - 0x80]); case ACPI_TYPE_PROCESSOR: return (AcpiGbl_ProcessorNotify [NotifyValue - 0x80]); case ACPI_TYPE_THERMAL: return (AcpiGbl_ThermalNotify [NotifyValue - 0x80]); default: return ("Target object type does not support notifies"); } } /* 84 - BF are device-specific */ if (NotifyValue <= ACPI_MAX_DEVICE_SPECIFIC_NOTIFY) { return ("Device-Specific"); } /* C0 and above are hardware-specific */ return ("Hardware-Specific"); } /******************************************************************************* * * FUNCTION: AcpiUtGetArgumentTypeName * * PARAMETERS: ArgType - an ARGP_* parser argument type * * RETURN: Decoded ARGP_* type * * DESCRIPTION: Decode an ARGP_* parser type, as defined in the amlcode.h file, * and used in the acopcode.h file. For example, ARGP_TERMARG. * Used for debug only. * ******************************************************************************/ static const char *AcpiGbl_ArgumentType[20] = { /* 00 */ "Unknown ARGP", /* 01 */ "ByteData", /* 02 */ "ByteList", /* 03 */ "CharList", /* 04 */ "DataObject", /* 05 */ "DataObjectList", /* 06 */ "DWordData", /* 07 */ "FieldList", /* 08 */ "Name", /* 09 */ "NameString", /* 0A */ "ObjectList", /* 0B */ "PackageLength", /* 0C */ "SuperName", /* 0D */ "Target", /* 0E */ "TermArg", /* 0F */ "TermList", /* 10 */ "WordData", /* 11 */ "QWordData", /* 12 */ "SimpleName", /* 13 */ "NameOrRef" }; const char * AcpiUtGetArgumentTypeName ( UINT32 ArgType) { if (ArgType > ARGP_MAX) { return ("Unknown ARGP"); } return (AcpiGbl_ArgumentType[ArgType]); } #endif /******************************************************************************* * * FUNCTION: AcpiUtValidObjectType * * PARAMETERS: Type - Object type to be validated * * RETURN: TRUE if valid object type, FALSE otherwise * * DESCRIPTION: Validate an object type * ******************************************************************************/ BOOLEAN AcpiUtValidObjectType ( ACPI_OBJECT_TYPE Type) { if (Type > ACPI_TYPE_LOCAL_MAX) { /* Note: Assumes all TYPEs are contiguous (external/local) */ return (FALSE); } return (TRUE); } src/acpica/source/components/utilities/utdelete.c000066400000000000000000000733011465205512700225570ustar00rootroot00000000000000/******************************************************************************* * * Module Name: utdelete - object deletion and reference count utilities * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #include "acnamesp.h" #include "acevents.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utdelete") /* Local prototypes */ static void AcpiUtDeleteInternalObj ( ACPI_OPERAND_OBJECT *Object); static void AcpiUtUpdateRefCount ( ACPI_OPERAND_OBJECT *Object, UINT32 Action); /******************************************************************************* * * FUNCTION: AcpiUtDeleteInternalObj * * PARAMETERS: Object - Object to be deleted * * RETURN: None * * DESCRIPTION: Low level object deletion, after reference counts have been * updated (All reference counts, including sub-objects!) * ******************************************************************************/ static void AcpiUtDeleteInternalObj ( ACPI_OPERAND_OBJECT *Object) { void *ObjPointer = NULL; ACPI_OPERAND_OBJECT *HandlerDesc; ACPI_OPERAND_OBJECT *SecondDesc; ACPI_OPERAND_OBJECT *NextDesc; ACPI_OPERAND_OBJECT *StartDesc; ACPI_OPERAND_OBJECT **LastObjPtr; ACPI_FUNCTION_TRACE_PTR (UtDeleteInternalObj, Object); if (!Object) { return_VOID; } /* * Must delete or free any pointers within the object that are not * actual ACPI objects (for example, a raw buffer pointer). */ switch (Object->Common.Type) { case ACPI_TYPE_STRING: ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "**** String %p, ptr %p\n", Object, Object->String.Pointer)); /* Free the actual string buffer */ if (!(Object->Common.Flags & AOPOBJ_STATIC_POINTER)) { /* But only if it is NOT a pointer into an ACPI table */ ObjPointer = Object->String.Pointer; } break; case ACPI_TYPE_BUFFER: ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "**** Buffer %p, ptr %p\n", Object, Object->Buffer.Pointer)); /* Free the actual buffer */ if (!(Object->Common.Flags & AOPOBJ_STATIC_POINTER)) { /* But only if it is NOT a pointer into an ACPI table */ ObjPointer = Object->Buffer.Pointer; } break; case ACPI_TYPE_PACKAGE: ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, " **** Package of count %X\n", Object->Package.Count)); /* * Elements of the package are not handled here, they are deleted * separately */ /* Free the (variable length) element pointer array */ ObjPointer = Object->Package.Elements; break; /* * These objects have a possible list of notify handlers. * Device object also may have a GPE block. */ case ACPI_TYPE_DEVICE: if (Object->Device.GpeBlock) { (void) AcpiEvDeleteGpeBlock (Object->Device.GpeBlock); } ACPI_FALLTHROUGH; case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_THERMAL: /* Walk the address handler list for this object */ HandlerDesc = Object->CommonNotify.Handler; while (HandlerDesc) { NextDesc = HandlerDesc->AddressSpace.Next; AcpiUtRemoveReference (HandlerDesc); HandlerDesc = NextDesc; } break; case ACPI_TYPE_MUTEX: ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "***** Mutex %p, OS Mutex %p\n", Object, Object->Mutex.OsMutex)); if (Object == AcpiGbl_GlobalLockMutex) { /* Global Lock has extra semaphore */ (void) AcpiOsDeleteSemaphore (AcpiGbl_GlobalLockSemaphore); AcpiGbl_GlobalLockSemaphore = NULL; AcpiOsDeleteMutex (Object->Mutex.OsMutex); AcpiGbl_GlobalLockMutex = NULL; } else { AcpiExUnlinkMutex (Object); AcpiOsDeleteMutex (Object->Mutex.OsMutex); } break; case ACPI_TYPE_EVENT: ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "***** Event %p, OS Semaphore %p\n", Object, Object->Event.OsSemaphore)); (void) AcpiOsDeleteSemaphore (Object->Event.OsSemaphore); Object->Event.OsSemaphore = NULL; break; case ACPI_TYPE_METHOD: ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "***** Method %p\n", Object)); /* Delete the method mutex if it exists */ if (Object->Method.Mutex) { AcpiOsDeleteMutex (Object->Method.Mutex->Mutex.OsMutex); AcpiUtDeleteObjectDesc (Object->Method.Mutex); Object->Method.Mutex = NULL; } if (Object->Method.Node) { Object->Method.Node = NULL; } break; case ACPI_TYPE_REGION: ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "***** Region %p\n", Object)); /* * Update AddressRange list. However, only permanent regions * are installed in this list. (Not created within a method) */ if (!(Object->Region.Node->Flags & ANOBJ_TEMPORARY)) { AcpiUtRemoveAddressRange (Object->Region.SpaceId, Object->Region.Node); } SecondDesc = AcpiNsGetSecondaryObject (Object); if (SecondDesc) { /* * Free the RegionContext if and only if the handler is one of the * default handlers -- and therefore, we created the context object * locally, it was not created by an external caller. */ HandlerDesc = Object->Region.Handler; if (HandlerDesc) { NextDesc = HandlerDesc->AddressSpace.RegionList; StartDesc = NextDesc; LastObjPtr = &HandlerDesc->AddressSpace.RegionList; /* Remove the region object from the handler list */ while (NextDesc) { if (NextDesc == Object) { *LastObjPtr = NextDesc->Region.Next; break; } /* Walk the linked list of handlers */ LastObjPtr = &NextDesc->Region.Next; NextDesc = NextDesc->Region.Next; /* Prevent infinite loop if list is corrupted */ if (NextDesc == StartDesc) { ACPI_ERROR ((AE_INFO, "Circular region list in address handler object %p", HandlerDesc)); return_VOID; } } if (HandlerDesc->AddressSpace.HandlerFlags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) { /* Deactivate region and free region context */ if (HandlerDesc->AddressSpace.Setup) { (void) HandlerDesc->AddressSpace.Setup (Object, ACPI_REGION_DEACTIVATE, HandlerDesc->AddressSpace.Context, &SecondDesc->Extra.RegionContext); } } AcpiUtRemoveReference (HandlerDesc); } /* Now we can free the Extra object */ AcpiUtDeleteObjectDesc (SecondDesc); } if (Object->Field.InternalPccBuffer) { ACPI_FREE(Object->Field.InternalPccBuffer); } break; case ACPI_TYPE_BUFFER_FIELD: ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "***** Buffer Field %p\n", Object)); SecondDesc = AcpiNsGetSecondaryObject (Object); if (SecondDesc) { AcpiUtDeleteObjectDesc (SecondDesc); } break; case ACPI_TYPE_LOCAL_BANK_FIELD: ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "***** Bank Field %p\n", Object)); SecondDesc = AcpiNsGetSecondaryObject (Object); if (SecondDesc) { AcpiUtDeleteObjectDesc (SecondDesc); } break; case ACPI_TYPE_LOCAL_ADDRESS_HANDLER: ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "***** Address handler %p\n", Object)); AcpiOsDeleteMutex (Object->AddressSpace.ContextMutex); break; default: break; } /* Free any allocated memory (pointer within the object) found above */ if (ObjPointer) { ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Deleting Object Subptr %p\n", ObjPointer)); ACPI_FREE (ObjPointer); } /* Now the object can be safely deleted */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, "%s: Deleting Object %p [%s]\n", ACPI_GET_FUNCTION_NAME, Object, AcpiUtGetObjectTypeName (Object))); AcpiUtDeleteObjectDesc (Object); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiUtDeleteInternalObjectList * * PARAMETERS: ObjList - Pointer to the list to be deleted * * RETURN: None * * DESCRIPTION: This function deletes an internal object list, including both * simple objects and package objects * ******************************************************************************/ void AcpiUtDeleteInternalObjectList ( ACPI_OPERAND_OBJECT **ObjList) { ACPI_OPERAND_OBJECT **InternalObj; ACPI_FUNCTION_ENTRY (); /* Walk the null-terminated internal list */ for (InternalObj = ObjList; *InternalObj; InternalObj++) { AcpiUtRemoveReference (*InternalObj); } /* Free the combined parameter pointer list and object array */ ACPI_FREE (ObjList); return; } /******************************************************************************* * * FUNCTION: AcpiUtUpdateRefCount * * PARAMETERS: Object - Object whose ref count is to be updated * Action - What to do (REF_INCREMENT or REF_DECREMENT) * * RETURN: None. Sets new reference count within the object * * DESCRIPTION: Modify the reference count for an internal acpi object * ******************************************************************************/ static void AcpiUtUpdateRefCount ( ACPI_OPERAND_OBJECT *Object, UINT32 Action) { UINT16 OriginalCount; UINT16 NewCount = 0; ACPI_CPU_FLAGS LockFlags; char *Message; ACPI_FUNCTION_NAME (UtUpdateRefCount); if (!Object) { return; } /* * Always get the reference count lock. Note: Interpreter and/or * Namespace is not always locked when this function is called. */ LockFlags = AcpiOsAcquireLock (AcpiGbl_ReferenceCountLock); OriginalCount = Object->Common.ReferenceCount; /* Perform the reference count action (increment, decrement) */ switch (Action) { case REF_INCREMENT: NewCount = OriginalCount + 1; Object->Common.ReferenceCount = NewCount; AcpiOsReleaseLock (AcpiGbl_ReferenceCountLock, LockFlags); /* The current reference count should never be zero here */ if (!OriginalCount) { ACPI_WARNING ((AE_INFO, "Obj %p, Reference Count was zero before increment\n", Object)); } ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Obj %p Type %.2X [%s] Refs %.2X [Incremented]\n", Object, Object->Common.Type, AcpiUtGetObjectTypeName (Object), NewCount)); Message = "Incremement"; break; case REF_DECREMENT: /* The current reference count must be non-zero */ if (OriginalCount) { NewCount = OriginalCount - 1; Object->Common.ReferenceCount = NewCount; } AcpiOsReleaseLock (AcpiGbl_ReferenceCountLock, LockFlags); if (!OriginalCount) { ACPI_WARNING ((AE_INFO, "Obj %p, Reference Count is already zero, cannot decrement\n", Object)); return; } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, "%s: Obj %p Type %.2X Refs %.2X [Decremented]\n", ACPI_GET_FUNCTION_NAME, Object, Object->Common.Type, NewCount)); /* Actually delete the object on a reference count of zero */ if (NewCount == 0) { AcpiUtDeleteInternalObj (Object); } Message = "Decrement"; break; default: AcpiOsReleaseLock (AcpiGbl_ReferenceCountLock, LockFlags); ACPI_ERROR ((AE_INFO, "Unknown Reference Count action (0x%X)", Action)); return; } /* * Sanity check the reference count, for debug purposes only. * (A deleted object will have a huge reference count) */ if (NewCount > ACPI_MAX_REFERENCE_COUNT) { ACPI_WARNING ((AE_INFO, "Large Reference Count (0x%X) in object %p, Type=0x%.2X Operation=%s", NewCount, Object, Object->Common.Type, Message)); } } /******************************************************************************* * * FUNCTION: AcpiUtUpdateObjectReference * * PARAMETERS: Object - Increment or decrement the ref count for * this object and all sub-objects * Action - Either REF_INCREMENT or REF_DECREMENT * * RETURN: Status * * DESCRIPTION: Increment or decrement the object reference count * * Object references are incremented when: * 1) An object is attached to a Node (namespace object) * 2) An object is copied (all subobjects must be incremented) * * Object references are decremented when: * 1) An object is detached from an Node * ******************************************************************************/ ACPI_STATUS AcpiUtUpdateObjectReference ( ACPI_OPERAND_OBJECT *Object, UINT16 Action) { ACPI_STATUS Status = AE_OK; ACPI_GENERIC_STATE *StateList = NULL; ACPI_OPERAND_OBJECT *NextObject = NULL; ACPI_OPERAND_OBJECT *PrevObject; ACPI_GENERIC_STATE *State; UINT32 i; ACPI_FUNCTION_NAME (UtUpdateObjectReference); while (Object) { /* Make sure that this isn't a namespace handle */ if (ACPI_GET_DESCRIPTOR_TYPE (Object) == ACPI_DESC_TYPE_NAMED) { ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Object %p is NS handle\n", Object)); return (AE_OK); } /* * All sub-objects must have their reference count updated * also. Different object types have different subobjects. */ switch (Object->Common.Type) { case ACPI_TYPE_DEVICE: case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_POWER: case ACPI_TYPE_THERMAL: /* * Update the notify objects for these types (if present) * Two lists, system and device notify handlers. */ for (i = 0; i < ACPI_NUM_NOTIFY_TYPES; i++) { PrevObject = Object->CommonNotify.NotifyList[i]; while (PrevObject) { NextObject = PrevObject->Notify.Next[i]; AcpiUtUpdateRefCount (PrevObject, Action); PrevObject = NextObject; } } break; case ACPI_TYPE_PACKAGE: /* * We must update all the sub-objects of the package, * each of whom may have their own sub-objects. */ for (i = 0; i < Object->Package.Count; i++) { /* * Null package elements are legal and can be simply * ignored. */ NextObject = Object->Package.Elements[i]; if (!NextObject) { continue; } switch (NextObject->Common.Type) { case ACPI_TYPE_INTEGER: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: /* * For these very simple sub-objects, we can just * update the reference count here and continue. * Greatly increases performance of this operation. */ AcpiUtUpdateRefCount (NextObject, Action); break; default: /* * For complex sub-objects, push them onto the stack * for later processing (this eliminates recursion.) */ Status = AcpiUtCreateUpdateStateAndPush ( NextObject, Action, &StateList); if (ACPI_FAILURE (Status)) { goto ErrorExit; } break; } } NextObject = NULL; break; case ACPI_TYPE_BUFFER_FIELD: NextObject = Object->BufferField.BufferObj; break; case ACPI_TYPE_LOCAL_BANK_FIELD: NextObject = Object->BankField.BankObj; Status = AcpiUtCreateUpdateStateAndPush ( Object->BankField.RegionObj, Action, &StateList); if (ACPI_FAILURE (Status)) { goto ErrorExit; } break; case ACPI_TYPE_LOCAL_INDEX_FIELD: NextObject = Object->IndexField.IndexObj; Status = AcpiUtCreateUpdateStateAndPush ( Object->IndexField.DataObj, Action, &StateList); if (ACPI_FAILURE (Status)) { goto ErrorExit; } break; case ACPI_TYPE_LOCAL_REFERENCE: /* * The target of an Index (a package, string, or buffer) or a named * reference must track changes to the ref count of the index or * target object. */ if ((Object->Reference.Class == ACPI_REFCLASS_INDEX) || (Object->Reference.Class== ACPI_REFCLASS_NAME)) { NextObject = Object->Reference.Object; } break; case ACPI_TYPE_LOCAL_REGION_FIELD: case ACPI_TYPE_REGION: default: break; /* No subobjects for all other types */ } /* * Now we can update the count in the main object. This can only * happen after we update the sub-objects in case this causes the * main object to be deleted. */ AcpiUtUpdateRefCount (Object, Action); Object = NULL; /* Move on to the next object to be updated */ if (NextObject) { Object = NextObject; NextObject = NULL; } else if (StateList) { State = AcpiUtPopGenericState (&StateList); Object = State->Update.Object; AcpiUtDeleteGenericState (State); } } return (AE_OK); ErrorExit: ACPI_EXCEPTION ((AE_INFO, Status, "Could not update object reference count")); /* Free any stacked Update State objects */ while (StateList) { State = AcpiUtPopGenericState (&StateList); AcpiUtDeleteGenericState (State); } return (Status); } /******************************************************************************* * * FUNCTION: AcpiUtAddReference * * PARAMETERS: Object - Object whose reference count is to be * incremented * * RETURN: None * * DESCRIPTION: Add one reference to an ACPI object * ******************************************************************************/ void AcpiUtAddReference ( ACPI_OPERAND_OBJECT *Object) { ACPI_FUNCTION_NAME (UtAddReference); /* Ensure that we have a valid object */ if (!AcpiUtValidInternalObject (Object)) { return; } ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Obj %p Current Refs=%X [To Be Incremented]\n", Object, Object->Common.ReferenceCount)); /* Increment the reference count */ (void) AcpiUtUpdateObjectReference (Object, REF_INCREMENT); return; } /******************************************************************************* * * FUNCTION: AcpiUtRemoveReference * * PARAMETERS: Object - Object whose ref count will be decremented * * RETURN: None * * DESCRIPTION: Decrement the reference count of an ACPI internal object * ******************************************************************************/ void AcpiUtRemoveReference ( ACPI_OPERAND_OBJECT *Object) { ACPI_FUNCTION_NAME (UtRemoveReference); /* * Allow a NULL pointer to be passed in, just ignore it. This saves * each caller from having to check. Also, ignore NS nodes. */ if (!Object || (ACPI_GET_DESCRIPTOR_TYPE (Object) == ACPI_DESC_TYPE_NAMED)) { return; } /* Ensure that we have a valid object */ if (!AcpiUtValidInternalObject (Object)) { return; } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, "%s: Obj %p Current Refs=%X [To Be Decremented]\n", ACPI_GET_FUNCTION_NAME, Object, Object->Common.ReferenceCount)); /* * Decrement the reference count, and only actually delete the object * if the reference count becomes 0. (Must also decrement the ref count * of all subobjects!) */ (void) AcpiUtUpdateObjectReference (Object, REF_DECREMENT); return; } src/acpica/source/components/utilities/uterror.c000066400000000000000000000450231465205512700224460ustar00rootroot00000000000000/******************************************************************************* * * Module Name: uterror - Various internal error/warning output functions * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("uterror") /* * This module contains internal error functions that may * be configured out. */ #if !defined (ACPI_NO_ERROR_MESSAGES) /******************************************************************************* * * FUNCTION: AcpiUtPredefinedWarning * * PARAMETERS: ModuleName - Caller's module name (for error output) * LineNumber - Caller's line number (for error output) * Pathname - Full pathname to the node * NodeFlags - From Namespace node for the method/object * Format - Printf format string + additional args * * RETURN: None * * DESCRIPTION: Warnings for the predefined validation module. Messages are * only emitted the first time a problem with a particular * method/object is detected. This prevents a flood of error * messages for methods that are repeatedly evaluated. * ******************************************************************************/ void ACPI_INTERNAL_VAR_XFACE AcpiUtPredefinedWarning ( const char *ModuleName, UINT32 LineNumber, char *Pathname, UINT16 NodeFlags, const char *Format, ...) { va_list ArgList; /* * Warning messages for this method/object will be disabled after the * first time a validation fails or an object is successfully repaired. */ if (NodeFlags & ANOBJ_EVALUATED) { return; } AcpiOsPrintf (ACPI_MSG_WARNING "%s: ", Pathname); va_start (ArgList, Format); AcpiOsVprintf (Format, ArgList); ACPI_MSG_SUFFIX; va_end (ArgList); } /******************************************************************************* * * FUNCTION: AcpiUtPredefinedInfo * * PARAMETERS: ModuleName - Caller's module name (for error output) * LineNumber - Caller's line number (for error output) * Pathname - Full pathname to the node * NodeFlags - From Namespace node for the method/object * Format - Printf format string + additional args * * RETURN: None * * DESCRIPTION: Info messages for the predefined validation module. Messages * are only emitted the first time a problem with a particular * method/object is detected. This prevents a flood of * messages for methods that are repeatedly evaluated. * ******************************************************************************/ void ACPI_INTERNAL_VAR_XFACE AcpiUtPredefinedInfo ( const char *ModuleName, UINT32 LineNumber, char *Pathname, UINT16 NodeFlags, const char *Format, ...) { va_list ArgList; /* * Warning messages for this method/object will be disabled after the * first time a validation fails or an object is successfully repaired. */ if (NodeFlags & ANOBJ_EVALUATED) { return; } AcpiOsPrintf (ACPI_MSG_INFO "%s: ", Pathname); va_start (ArgList, Format); AcpiOsVprintf (Format, ArgList); ACPI_MSG_SUFFIX; va_end (ArgList); } /******************************************************************************* * * FUNCTION: AcpiUtPredefinedBiosError * * PARAMETERS: ModuleName - Caller's module name (for error output) * LineNumber - Caller's line number (for error output) * Pathname - Full pathname to the node * NodeFlags - From Namespace node for the method/object * Format - Printf format string + additional args * * RETURN: None * * DESCRIPTION: BIOS error message for predefined names. Messages * are only emitted the first time a problem with a particular * method/object is detected. This prevents a flood of * messages for methods that are repeatedly evaluated. * ******************************************************************************/ void ACPI_INTERNAL_VAR_XFACE AcpiUtPredefinedBiosError ( const char *ModuleName, UINT32 LineNumber, char *Pathname, UINT16 NodeFlags, const char *Format, ...) { va_list ArgList; /* * Warning messages for this method/object will be disabled after the * first time a validation fails or an object is successfully repaired. */ if (NodeFlags & ANOBJ_EVALUATED) { return; } AcpiOsPrintf (ACPI_MSG_BIOS_ERROR "%s: ", Pathname); va_start (ArgList, Format); AcpiOsVprintf (Format, ArgList); ACPI_MSG_SUFFIX; va_end (ArgList); } /******************************************************************************* * * FUNCTION: AcpiUtPrefixedNamespaceError * * PARAMETERS: ModuleName - Caller's module name (for error output) * LineNumber - Caller's line number (for error output) * PrefixScope - Scope/Path that prefixes the internal path * InternalPath - Name or path of the namespace node * LookupStatus - Exception code from NS lookup * * RETURN: None * * DESCRIPTION: Print error message with the full pathname constructed this way: * * PrefixScopeNodeFullPath.ExternalizedInternalPath * * NOTE: 10/2017: Treat the major NsLookup errors as firmware errors * ******************************************************************************/ void AcpiUtPrefixedNamespaceError ( const char *ModuleName, UINT32 LineNumber, ACPI_GENERIC_STATE *PrefixScope, const char *InternalPath, ACPI_STATUS LookupStatus) { char *FullPath; const char *Message; /* * Main cases: * 1) Object creation, object must not already exist * 2) Object lookup, object must exist */ switch (LookupStatus) { case AE_ALREADY_EXISTS: AcpiOsPrintf (ACPI_MSG_BIOS_ERROR); Message = "Failure creating named object"; break; case AE_NOT_FOUND: AcpiOsPrintf (ACPI_MSG_BIOS_ERROR); Message = "Could not resolve symbol"; break; default: AcpiOsPrintf (ACPI_MSG_ERROR); Message = "Failure resolving symbol"; break; } /* Concatenate the prefix path and the internal path */ FullPath = AcpiNsBuildPrefixedPathname (PrefixScope, InternalPath); AcpiOsPrintf ("%s [%s], %s", Message, FullPath ? FullPath : "Could not get pathname", AcpiFormatException (LookupStatus)); if (FullPath) { ACPI_FREE (FullPath); } ACPI_MSG_SUFFIX; } #ifdef __OBSOLETE_FUNCTION /******************************************************************************* * * FUNCTION: AcpiUtNamespaceError * * PARAMETERS: ModuleName - Caller's module name (for error output) * LineNumber - Caller's line number (for error output) * InternalName - Name or path of the namespace node * LookupStatus - Exception code from NS lookup * * RETURN: None * * DESCRIPTION: Print error message with the full pathname for the NS node. * ******************************************************************************/ void AcpiUtNamespaceError ( const char *ModuleName, UINT32 LineNumber, const char *InternalName, ACPI_STATUS LookupStatus) { ACPI_STATUS Status; UINT32 BadName; char *Name = NULL; ACPI_MSG_REDIRECT_BEGIN; AcpiOsPrintf (ACPI_MSG_ERROR); if (LookupStatus == AE_BAD_CHARACTER) { /* There is a non-ascii character in the name */ ACPI_MOVE_32_TO_32 (&BadName, ACPI_CAST_PTR (UINT32, InternalName)); AcpiOsPrintf ("[0x%.8X] (NON-ASCII)", BadName); } else { /* Convert path to external format */ Status = AcpiNsExternalizeName ( ACPI_UINT32_MAX, InternalName, NULL, &Name); /* Print target name */ if (ACPI_SUCCESS (Status)) { AcpiOsPrintf ("[%s]", Name); } else { AcpiOsPrintf ("[COULD NOT EXTERNALIZE NAME]"); } if (Name) { ACPI_FREE (Name); } } AcpiOsPrintf (" Namespace lookup failure, %s", AcpiFormatException (LookupStatus)); ACPI_MSG_SUFFIX; ACPI_MSG_REDIRECT_END; } #endif /******************************************************************************* * * FUNCTION: AcpiUtMethodError * * PARAMETERS: ModuleName - Caller's module name (for error output) * LineNumber - Caller's line number (for error output) * Message - Error message to use on failure * PrefixNode - Prefix relative to the path * Path - Path to the node (optional) * MethodStatus - Execution status * * RETURN: None * * DESCRIPTION: Print error message with the full pathname for the method. * ******************************************************************************/ void AcpiUtMethodError ( const char *ModuleName, UINT32 LineNumber, const char *Message, ACPI_NAMESPACE_NODE *PrefixNode, const char *Path, ACPI_STATUS MethodStatus) { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node = PrefixNode; ACPI_MSG_REDIRECT_BEGIN; AcpiOsPrintf (ACPI_MSG_ERROR); if (Path) { Status = AcpiNsGetNode (PrefixNode, Path, ACPI_NS_NO_UPSEARCH, &Node); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("[Could not get node by pathname]"); } } AcpiNsPrintNodePathname (Node, Message); AcpiOsPrintf (" due to previous error (%s)", AcpiFormatException (MethodStatus)); ACPI_MSG_SUFFIX; ACPI_MSG_REDIRECT_END; } #endif /* ACPI_NO_ERROR_MESSAGES */ src/acpica/source/components/utilities/uteval.c000066400000000000000000000422131465205512700222420ustar00rootroot00000000000000/****************************************************************************** * * Module Name: uteval - Object evaluation * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("uteval") /******************************************************************************* * * FUNCTION: AcpiUtEvaluateObject * * PARAMETERS: PrefixNode - Starting node * Path - Path to object from starting node * ExpectedReturnTypes - Bitmap of allowed return types * ReturnDesc - Where a return value is stored * * RETURN: Status * * DESCRIPTION: Evaluates a namespace object and verifies the type of the * return object. Common code that simplifies accessing objects * that have required return objects of fixed types. * * NOTE: Internal function, no parameter validation * ******************************************************************************/ ACPI_STATUS AcpiUtEvaluateObject ( ACPI_NAMESPACE_NODE *PrefixNode, const char *Path, UINT32 ExpectedReturnBtypes, ACPI_OPERAND_OBJECT **ReturnDesc) { ACPI_EVALUATE_INFO *Info; ACPI_STATUS Status; UINT32 ReturnBtype; ACPI_FUNCTION_TRACE (UtEvaluateObject); /* Allocate the evaluation information block */ Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); if (!Info) { return_ACPI_STATUS (AE_NO_MEMORY); } Info->PrefixNode = PrefixNode; Info->RelativePathname = Path; /* Evaluate the object/method */ Status = AcpiNsEvaluate (Info); if (ACPI_FAILURE (Status)) { if (Status == AE_NOT_FOUND) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s.%s] was not found\n", AcpiUtGetNodeName (PrefixNode), Path)); } else { ACPI_ERROR_METHOD ("Method execution failed", PrefixNode, Path, Status); } goto Cleanup; } /* Did we get a return object? */ if (!Info->ReturnObject) { if (ExpectedReturnBtypes) { ACPI_ERROR_METHOD ("No object was returned from", PrefixNode, Path, AE_NOT_EXIST); Status = AE_NOT_EXIST; } goto Cleanup; } /* Map the return object type to the bitmapped type */ switch ((Info->ReturnObject)->Common.Type) { case ACPI_TYPE_INTEGER: ReturnBtype = ACPI_BTYPE_INTEGER; break; case ACPI_TYPE_BUFFER: ReturnBtype = ACPI_BTYPE_BUFFER; break; case ACPI_TYPE_STRING: ReturnBtype = ACPI_BTYPE_STRING; break; case ACPI_TYPE_PACKAGE: ReturnBtype = ACPI_BTYPE_PACKAGE; break; default: ReturnBtype = 0; break; } if ((AcpiGbl_EnableInterpreterSlack) && (!ExpectedReturnBtypes)) { /* * We received a return object, but one was not expected. This can * happen frequently if the "implicit return" feature is enabled. * Just delete the return object and return AE_OK. */ AcpiUtRemoveReference (Info->ReturnObject); goto Cleanup; } /* Is the return object one of the expected types? */ if (!(ExpectedReturnBtypes & ReturnBtype)) { ACPI_ERROR_METHOD ("Return object type is incorrect", PrefixNode, Path, AE_TYPE); ACPI_ERROR ((AE_INFO, "Type returned from %s was incorrect: %s, expected Btypes: 0x%X", Path, AcpiUtGetObjectTypeName (Info->ReturnObject), ExpectedReturnBtypes)); /* On error exit, we must delete the return object */ AcpiUtRemoveReference (Info->ReturnObject); Status = AE_TYPE; goto Cleanup; } /* Object type is OK, return it */ *ReturnDesc = Info->ReturnObject; Cleanup: ACPI_FREE (Info); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtEvaluateNumericObject * * PARAMETERS: ObjectName - Object name to be evaluated * DeviceNode - Node for the device * Value - Where the value is returned * * RETURN: Status * * DESCRIPTION: Evaluates a numeric namespace object for a selected device * and stores result in *Value. * * NOTE: Internal function, no parameter validation * ******************************************************************************/ ACPI_STATUS AcpiUtEvaluateNumericObject ( const char *ObjectName, ACPI_NAMESPACE_NODE *DeviceNode, UINT64 *Value) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (UtEvaluateNumericObject); Status = AcpiUtEvaluateObject (DeviceNode, ObjectName, ACPI_BTYPE_INTEGER, &ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Get the returned Integer */ *Value = ObjDesc->Integer.Value; /* On exit, we must delete the return object */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtExecute_STA * * PARAMETERS: DeviceNode - Node for the device * Flags - Where the status flags are returned * * RETURN: Status * * DESCRIPTION: Executes _STA for selected device and stores results in * *Flags. If _STA does not exist, then the device is assumed * to be present/functional/enabled (as per the ACPI spec). * * NOTE: Internal function, no parameter validation * ******************************************************************************/ ACPI_STATUS AcpiUtExecute_STA ( ACPI_NAMESPACE_NODE *DeviceNode, UINT32 *Flags) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (UtExecute_STA); Status = AcpiUtEvaluateObject (DeviceNode, METHOD_NAME__STA, ACPI_BTYPE_INTEGER, &ObjDesc); if (ACPI_FAILURE (Status)) { if (AE_NOT_FOUND == Status) { /* * if _STA does not exist, then (as per the ACPI specification), * the returned flags will indicate that the device is present, * functional, and enabled. */ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "_STA on %4.4s was not found, assuming device is present\n", AcpiUtGetNodeName (DeviceNode))); *Flags = ACPI_UINT32_MAX; Status = AE_OK; } return_ACPI_STATUS (Status); } /* Extract the status flags */ *Flags = (UINT32) ObjDesc->Integer.Value; /* On exit, we must delete the return object */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtExecutePowerMethods * * PARAMETERS: DeviceNode - Node for the device * MethodNames - Array of power method names * MethodCount - Number of methods to execute * OutValues - Where the power method values are returned * * RETURN: Status, OutValues * * DESCRIPTION: Executes the specified power methods for the device and returns * the result(s). * * NOTE: Internal function, no parameter validation * ******************************************************************************/ ACPI_STATUS AcpiUtExecutePowerMethods ( ACPI_NAMESPACE_NODE *DeviceNode, const char **MethodNames, UINT8 MethodCount, UINT8 *OutValues) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STATUS Status; ACPI_STATUS FinalStatus = AE_NOT_FOUND; UINT32 i; ACPI_FUNCTION_TRACE (UtExecutePowerMethods); for (i = 0; i < MethodCount; i++) { /* * Execute the power method (_SxD or _SxW). The only allowable * return type is an Integer. */ Status = AcpiUtEvaluateObject (DeviceNode, ACPI_CAST_PTR (char, MethodNames[i]), ACPI_BTYPE_INTEGER, &ObjDesc); if (ACPI_SUCCESS (Status)) { OutValues[i] = (UINT8) ObjDesc->Integer.Value; /* Delete the return object */ AcpiUtRemoveReference (ObjDesc); FinalStatus = AE_OK; /* At least one value is valid */ continue; } OutValues[i] = ACPI_UINT8_MAX; if (Status == AE_NOT_FOUND) { continue; /* Ignore if not found */ } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Failed %s on Device %4.4s, %s\n", ACPI_CAST_PTR (char, MethodNames[i]), AcpiUtGetNodeName (DeviceNode), AcpiFormatException (Status))); } return_ACPI_STATUS (FinalStatus); } src/acpica/source/components/utilities/utexcep.c000066400000000000000000000263011465205512700224170ustar00rootroot00000000000000/******************************************************************************* * * Module Name: utexcep - Exception code support * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #define ACPI_DEFINE_EXCEPTION_TABLE #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utexcep") /******************************************************************************* * * FUNCTION: AcpiFormatException * * PARAMETERS: Status - The ACPI_STATUS code to be formatted * * RETURN: A string containing the exception text. A valid pointer is * always returned. * * DESCRIPTION: This function translates an ACPI exception into an ASCII * string. Returns "unknown status" string for invalid codes. * ******************************************************************************/ const char * AcpiFormatException ( ACPI_STATUS Status) { const ACPI_EXCEPTION_INFO *Exception; ACPI_FUNCTION_ENTRY (); Exception = AcpiUtValidateException (Status); if (!Exception) { /* Exception code was not recognized */ ACPI_ERROR ((AE_INFO, "Unknown exception code: 0x%8.8X", Status)); return ("UNKNOWN_STATUS_CODE"); } return (Exception->Name); } ACPI_EXPORT_SYMBOL (AcpiFormatException) /******************************************************************************* * * FUNCTION: AcpiUtValidateException * * PARAMETERS: Status - The ACPI_STATUS code to be formatted * * RETURN: A string containing the exception text. NULL if exception is * not valid. * * DESCRIPTION: This function validates and translates an ACPI exception into * an ASCII string. * ******************************************************************************/ const ACPI_EXCEPTION_INFO * AcpiUtValidateException ( ACPI_STATUS Status) { UINT32 SubStatus; const ACPI_EXCEPTION_INFO *Exception = NULL; ACPI_FUNCTION_ENTRY (); /* * Status is composed of two parts, a "type" and an actual code */ SubStatus = (Status & ~AE_CODE_MASK); switch (Status & AE_CODE_MASK) { case AE_CODE_ENVIRONMENTAL: if (SubStatus <= AE_CODE_ENV_MAX) { Exception = &AcpiGbl_ExceptionNames_Env [SubStatus]; } break; case AE_CODE_PROGRAMMER: if (SubStatus <= AE_CODE_PGM_MAX) { Exception = &AcpiGbl_ExceptionNames_Pgm [SubStatus]; } break; case AE_CODE_ACPI_TABLES: if (SubStatus <= AE_CODE_TBL_MAX) { Exception = &AcpiGbl_ExceptionNames_Tbl [SubStatus]; } break; case AE_CODE_AML: if (SubStatus <= AE_CODE_AML_MAX) { Exception = &AcpiGbl_ExceptionNames_Aml [SubStatus]; } break; case AE_CODE_CONTROL: if (SubStatus <= AE_CODE_CTRL_MAX) { Exception = &AcpiGbl_ExceptionNames_Ctrl [SubStatus]; } break; default: break; } if (!Exception || !Exception->Name) { return (NULL); } return (Exception); } src/acpica/source/components/utilities/utglobal.c000066400000000000000000000376161465205512700225660ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utglobal - Global variables for the ACPI subsystem * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #define DEFINE_ACPI_GLOBALS #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utglobal") /******************************************************************************* * * Static global variable initialization. * ******************************************************************************/ /* Various state name strings */ const char *AcpiGbl_SleepStateNames[ACPI_S_STATE_COUNT] = { "\\_S0_", "\\_S1_", "\\_S2_", "\\_S3_", "\\_S4_", "\\_S5_" }; const char *AcpiGbl_LowestDstateNames[ACPI_NUM_SxW_METHODS] = { "_S0W", "_S1W", "_S2W", "_S3W", "_S4W" }; const char *AcpiGbl_HighestDstateNames[ACPI_NUM_SxD_METHODS] = { "_S1D", "_S2D", "_S3D", "_S4D" }; /* Hex-to-ascii */ const char AcpiGbl_LowerHexDigits[] = "0123456789abcdef"; const char AcpiGbl_UpperHexDigits[] = "0123456789ABCDEF"; /******************************************************************************* * * Namespace globals * ******************************************************************************/ /* * Predefined ACPI Names (Built-in to the Interpreter) * * NOTES: * 1) _SB_ is defined to be a device to allow \_SB_._INI to be run * during the initialization sequence. * 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to * perform a Notify() operation on it. 09/2010: Changed to type Device. * This still allows notifies, but does not confuse host code that * searches for valid ThermalZone objects. */ const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames[] = { {"_GPE", ACPI_TYPE_LOCAL_SCOPE, NULL}, {"_PR_", ACPI_TYPE_LOCAL_SCOPE, NULL}, {"_SB_", ACPI_TYPE_DEVICE, NULL}, {"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL}, {"_TZ_", ACPI_TYPE_DEVICE, NULL}, /* * March, 2015: * The _REV object is in the process of being deprecated, because * other ACPI implementations permanently return 2. Thus, it * has little or no value. Return 2 for compatibility with * other ACPI implementations. */ {"_REV", ACPI_TYPE_INTEGER, ACPI_CAST_PTR (char, 2)}, {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME}, {"_GL_", ACPI_TYPE_MUTEX, ACPI_CAST_PTR (char, 1)}, {"_OSI", ACPI_TYPE_METHOD, ACPI_CAST_PTR (char, 1)}, /* Table terminator */ {NULL, ACPI_TYPE_ANY, NULL} }; #if (!ACPI_REDUCED_HARDWARE) /****************************************************************************** * * Event and Hardware globals * ******************************************************************************/ ACPI_BIT_REGISTER_INFO AcpiGbl_BitRegisterInfo[ACPI_NUM_BITREG] = { /* Name Parent Register Register Bit Position Register Bit Mask */ /* ACPI_BITREG_TIMER_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_TIMER_STATUS, ACPI_BITMASK_TIMER_STATUS}, /* ACPI_BITREG_BUS_MASTER_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_BUS_MASTER_STATUS, ACPI_BITMASK_BUS_MASTER_STATUS}, /* ACPI_BITREG_GLOBAL_LOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_GLOBAL_LOCK_STATUS, ACPI_BITMASK_GLOBAL_LOCK_STATUS}, /* ACPI_BITREG_POWER_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_POWER_BUTTON_STATUS, ACPI_BITMASK_POWER_BUTTON_STATUS}, /* ACPI_BITREG_SLEEP_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_SLEEP_BUTTON_STATUS, ACPI_BITMASK_SLEEP_BUTTON_STATUS}, /* ACPI_BITREG_RT_CLOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_RT_CLOCK_STATUS, ACPI_BITMASK_RT_CLOCK_STATUS}, /* ACPI_BITREG_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_WAKE_STATUS, ACPI_BITMASK_WAKE_STATUS}, /* ACPI_BITREG_PCIEXP_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_PCIEXP_WAKE_STATUS, ACPI_BITMASK_PCIEXP_WAKE_STATUS}, /* ACPI_BITREG_TIMER_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_TIMER_ENABLE, ACPI_BITMASK_TIMER_ENABLE}, /* ACPI_BITREG_GLOBAL_LOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE, ACPI_BITMASK_GLOBAL_LOCK_ENABLE}, /* ACPI_BITREG_POWER_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_POWER_BUTTON_ENABLE, ACPI_BITMASK_POWER_BUTTON_ENABLE}, /* ACPI_BITREG_SLEEP_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE, ACPI_BITMASK_SLEEP_BUTTON_ENABLE}, /* ACPI_BITREG_RT_CLOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_RT_CLOCK_ENABLE, ACPI_BITMASK_RT_CLOCK_ENABLE}, /* ACPI_BITREG_PCIEXP_WAKE_DISABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE, ACPI_BITMASK_PCIEXP_WAKE_DISABLE}, /* ACPI_BITREG_SCI_ENABLE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_SCI_ENABLE, ACPI_BITMASK_SCI_ENABLE}, /* ACPI_BITREG_BUS_MASTER_RLD */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_BUS_MASTER_RLD, ACPI_BITMASK_BUS_MASTER_RLD}, /* ACPI_BITREG_GLOBAL_LOCK_RELEASE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE, ACPI_BITMASK_GLOBAL_LOCK_RELEASE}, /* ACPI_BITREG_SLEEP_TYPE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_SLEEP_TYPE, ACPI_BITMASK_SLEEP_TYPE}, /* ACPI_BITREG_SLEEP_ENABLE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_SLEEP_ENABLE, ACPI_BITMASK_SLEEP_ENABLE}, /* ACPI_BITREG_ARB_DIS */ {ACPI_REGISTER_PM2_CONTROL, ACPI_BITPOSITION_ARB_DISABLE, ACPI_BITMASK_ARB_DISABLE} }; ACPI_FIXED_EVENT_INFO AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS] = { /* ACPI_EVENT_PMTIMER */ {ACPI_BITREG_TIMER_STATUS, ACPI_BITREG_TIMER_ENABLE, ACPI_BITMASK_TIMER_STATUS, ACPI_BITMASK_TIMER_ENABLE}, /* ACPI_EVENT_GLOBAL */ {ACPI_BITREG_GLOBAL_LOCK_STATUS, ACPI_BITREG_GLOBAL_LOCK_ENABLE, ACPI_BITMASK_GLOBAL_LOCK_STATUS, ACPI_BITMASK_GLOBAL_LOCK_ENABLE}, /* ACPI_EVENT_POWER_BUTTON */ {ACPI_BITREG_POWER_BUTTON_STATUS, ACPI_BITREG_POWER_BUTTON_ENABLE, ACPI_BITMASK_POWER_BUTTON_STATUS, ACPI_BITMASK_POWER_BUTTON_ENABLE}, /* ACPI_EVENT_SLEEP_BUTTON */ {ACPI_BITREG_SLEEP_BUTTON_STATUS, ACPI_BITREG_SLEEP_BUTTON_ENABLE, ACPI_BITMASK_SLEEP_BUTTON_STATUS, ACPI_BITMASK_SLEEP_BUTTON_ENABLE}, /* ACPI_EVENT_RTC */ {ACPI_BITREG_RT_CLOCK_STATUS, ACPI_BITREG_RT_CLOCK_ENABLE, ACPI_BITMASK_RT_CLOCK_STATUS, ACPI_BITMASK_RT_CLOCK_ENABLE}, }; #endif /* !ACPI_REDUCED_HARDWARE */ #if defined (ACPI_DISASSEMBLER) || defined (ACPI_ASL_COMPILER) /* ToPld macro: compile/disassemble strings */ const char *AcpiGbl_PldPanelList[] = { "TOP", "BOTTOM", "LEFT", "RIGHT", "FRONT", "BACK", "UNKNOWN", NULL }; const char *AcpiGbl_PldVerticalPositionList[] = { "UPPER", "CENTER", "LOWER", NULL }; const char *AcpiGbl_PldHorizontalPositionList[] = { "LEFT", "CENTER", "RIGHT", NULL }; const char *AcpiGbl_PldShapeList[] = { "ROUND", "OVAL", "SQUARE", "VERTICALRECTANGLE", "HORIZONTALRECTANGLE", "VERTICALTRAPEZOID", "HORIZONTALTRAPEZOID", "UNKNOWN", "CHAMFERED", NULL }; #endif /* Public globals */ ACPI_EXPORT_SYMBOL (AcpiGbl_FADT) ACPI_EXPORT_SYMBOL (AcpiDbgLevel) ACPI_EXPORT_SYMBOL (AcpiDbgLayer) ACPI_EXPORT_SYMBOL (AcpiGpeCount) ACPI_EXPORT_SYMBOL (AcpiCurrentGpeCount) src/acpica/source/components/utilities/uthex.c000066400000000000000000000257131465205512700221050ustar00rootroot00000000000000/****************************************************************************** * * Module Name: uthex -- Hex/ASCII support functions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("uthex") /* Hex to ASCII conversion table */ static const char AcpiGbl_HexToAscii[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; /******************************************************************************* * * FUNCTION: AcpiUtHexToAsciiChar * * PARAMETERS: Integer - Contains the hex digit * Position - bit position of the digit within the * integer (multiple of 4) * * RETURN: The converted Ascii character * * DESCRIPTION: Convert a hex digit to an Ascii character * ******************************************************************************/ char AcpiUtHexToAsciiChar ( UINT64 Integer, UINT32 Position) { UINT64 Index; AcpiUtShortShiftRight (Integer, Position, &Index); return (AcpiGbl_HexToAscii[Index & 0xF]); } /******************************************************************************* * * FUNCTION: AcpiUtAsciiToHexByte * * PARAMETERS: TwoAsciiChars - Pointer to two ASCII characters * ReturnByte - Where converted byte is returned * * RETURN: Status and converted hex byte * * DESCRIPTION: Perform ascii-to-hex translation, exactly two ASCII characters * to a single converted byte value. * ******************************************************************************/ ACPI_STATUS AcpiUtAsciiToHexByte ( char *TwoAsciiChars, UINT8 *ReturnByte) { /* Both ASCII characters must be valid hex digits */ if (!isxdigit ((int) TwoAsciiChars[0]) || !isxdigit ((int) TwoAsciiChars[1])) { return (AE_BAD_HEX_CONSTANT); } *ReturnByte = AcpiUtAsciiCharToHex (TwoAsciiChars[1]) | (AcpiUtAsciiCharToHex (TwoAsciiChars[0]) << 4); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtAsciiCharToHex * * PARAMETERS: HexChar - Hex character in Ascii. Must be: * 0-9 or A-F or a-f * * RETURN: The binary value of the ascii/hex character * * DESCRIPTION: Perform ascii-to-hex translation * ******************************************************************************/ UINT8 AcpiUtAsciiCharToHex ( int HexChar) { /* Values 0-9 */ if (HexChar <= '9') { return ((UINT8) (HexChar - '0')); } /* Upper case A-F */ if (HexChar <= 'F') { return ((UINT8) (HexChar - 0x37)); } /* Lower case a-f */ return ((UINT8) (HexChar - 0x57)); } src/acpica/source/components/utilities/utids.c000066400000000000000000000475031465205512700221010ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utids - support for device IDs - HID, UID, CID, SUB, CLS * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acinterp.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utids") /******************************************************************************* * * FUNCTION: AcpiUtExecute_HID * * PARAMETERS: DeviceNode - Node for the device * ReturnId - Where the string HID is returned * * RETURN: Status * * DESCRIPTION: Executes the _HID control method that returns the hardware * ID of the device. The HID is either an 32-bit encoded EISAID * Integer or a String. A string is always returned. An EISAID * is converted to a string. * * NOTE: Internal function, no parameter validation * ******************************************************************************/ ACPI_STATUS AcpiUtExecute_HID ( ACPI_NAMESPACE_NODE *DeviceNode, ACPI_PNP_DEVICE_ID **ReturnId) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_PNP_DEVICE_ID *Hid; UINT32 Length; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (UtExecute_HID); Status = AcpiUtEvaluateObject (DeviceNode, METHOD_NAME__HID, ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING, &ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Get the size of the String to be returned, includes null terminator */ if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER) { Length = ACPI_EISAID_STRING_SIZE; } else { Length = ObjDesc->String.Length + 1; } /* Allocate a buffer for the HID */ Hid = ACPI_ALLOCATE_ZEROED ( sizeof (ACPI_PNP_DEVICE_ID) + (ACPI_SIZE) Length); if (!Hid) { Status = AE_NO_MEMORY; goto Cleanup; } /* Area for the string starts after PNP_DEVICE_ID struct */ Hid->String = ACPI_ADD_PTR (char, Hid, sizeof (ACPI_PNP_DEVICE_ID)); /* Convert EISAID to a string or simply copy existing string */ if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER) { AcpiExEisaIdToString (Hid->String, ObjDesc->Integer.Value); } else { strcpy (Hid->String, ObjDesc->String.Pointer); } Hid->Length = Length; *ReturnId = Hid; Cleanup: /* On exit, we must delete the return object */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtExecute_UID * * PARAMETERS: DeviceNode - Node for the device * ReturnId - Where the string UID is returned * * RETURN: Status * * DESCRIPTION: Executes the _UID control method that returns the unique * ID of the device. The UID is either a 64-bit Integer (NOT an * EISAID) or a string. Always returns a string. A 64-bit integer * is converted to a decimal string. * * NOTE: Internal function, no parameter validation * ******************************************************************************/ ACPI_STATUS AcpiUtExecute_UID ( ACPI_NAMESPACE_NODE *DeviceNode, ACPI_PNP_DEVICE_ID **ReturnId) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_PNP_DEVICE_ID *Uid; UINT32 Length; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (UtExecute_UID); Status = AcpiUtEvaluateObject (DeviceNode, METHOD_NAME__UID, ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING, &ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Get the size of the String to be returned, includes null terminator */ if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER) { Length = ACPI_MAX64_DECIMAL_DIGITS + 1; } else { Length = ObjDesc->String.Length + 1; } /* Allocate a buffer for the UID */ Uid = ACPI_ALLOCATE_ZEROED ( sizeof (ACPI_PNP_DEVICE_ID) + (ACPI_SIZE) Length); if (!Uid) { Status = AE_NO_MEMORY; goto Cleanup; } /* Area for the string starts after PNP_DEVICE_ID struct */ Uid->String = ACPI_ADD_PTR (char, Uid, sizeof (ACPI_PNP_DEVICE_ID)); /* Convert an Integer to string, or just copy an existing string */ if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER) { AcpiExIntegerToString (Uid->String, ObjDesc->Integer.Value); } else { strcpy (Uid->String, ObjDesc->String.Pointer); } Uid->Length = Length; *ReturnId = Uid; Cleanup: /* On exit, we must delete the return object */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtExecute_CID * * PARAMETERS: DeviceNode - Node for the device * ReturnCidList - Where the CID list is returned * * RETURN: Status, list of CID strings * * DESCRIPTION: Executes the _CID control method that returns one or more * compatible hardware IDs for the device. * * NOTE: Internal function, no parameter validation * * A _CID method can return either a single compatible ID or a package of * compatible IDs. Each compatible ID can be one of the following: * 1) Integer (32 bit compressed EISA ID) or * 2) String (PCI ID format, e.g. "PCI\VEN_vvvv&DEV_dddd&SUBSYS_ssssssss") * * The Integer CIDs are converted to string format by this function. * ******************************************************************************/ ACPI_STATUS AcpiUtExecute_CID ( ACPI_NAMESPACE_NODE *DeviceNode, ACPI_PNP_DEVICE_ID_LIST **ReturnCidList) { ACPI_OPERAND_OBJECT **CidObjects; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_PNP_DEVICE_ID_LIST *CidList; char *NextIdString; UINT32 StringAreaSize; UINT32 Length; UINT32 CidListSize; ACPI_STATUS Status; UINT32 Count; UINT32 i; ACPI_FUNCTION_TRACE (UtExecute_CID); /* Evaluate the _CID method for this device */ Status = AcpiUtEvaluateObject (DeviceNode, METHOD_NAME__CID, ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_PACKAGE, &ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Get the count and size of the returned _CIDs. _CID can return either * a Package of Integers/Strings or a single Integer or String. * Note: This section also validates that all CID elements are of the * correct type (Integer or String). */ if (ObjDesc->Common.Type == ACPI_TYPE_PACKAGE) { Count = ObjDesc->Package.Count; CidObjects = ObjDesc->Package.Elements; } else /* Single Integer or String CID */ { Count = 1; CidObjects = &ObjDesc; } StringAreaSize = 0; for (i = 0; i < Count; i++) { /* String lengths include null terminator */ switch (CidObjects[i]->Common.Type) { case ACPI_TYPE_INTEGER: StringAreaSize += ACPI_EISAID_STRING_SIZE; break; case ACPI_TYPE_STRING: StringAreaSize += CidObjects[i]->String.Length + 1; break; default: Status = AE_TYPE; goto Cleanup; } } /* * Now that we know the length of the CIDs, allocate return buffer: * 1) Size of the base structure + * 2) Size of the CID PNP_DEVICE_ID array + * 3) Size of the actual CID strings */ CidListSize = sizeof (ACPI_PNP_DEVICE_ID_LIST) + (Count * sizeof (ACPI_PNP_DEVICE_ID)) + StringAreaSize; CidList = ACPI_ALLOCATE_ZEROED (CidListSize); if (!CidList) { Status = AE_NO_MEMORY; goto Cleanup; } /* Area for CID strings starts after the CID PNP_DEVICE_ID array */ NextIdString = ACPI_CAST_PTR (char, CidList->Ids) + ((ACPI_SIZE) Count * sizeof (ACPI_PNP_DEVICE_ID)); /* Copy/convert the CIDs to the return buffer */ for (i = 0; i < Count; i++) { if (CidObjects[i]->Common.Type == ACPI_TYPE_INTEGER) { /* Convert the Integer (EISAID) CID to a string */ AcpiExEisaIdToString ( NextIdString, CidObjects[i]->Integer.Value); Length = ACPI_EISAID_STRING_SIZE; } else /* ACPI_TYPE_STRING */ { /* Copy the String CID from the returned object */ strcpy (NextIdString, CidObjects[i]->String.Pointer); Length = CidObjects[i]->String.Length + 1; } CidList->Ids[i].String = NextIdString; CidList->Ids[i].Length = Length; NextIdString += Length; } /* Finish the CID list */ CidList->Count = Count; CidList->ListSize = CidListSize; *ReturnCidList = CidList; Cleanup: /* On exit, we must delete the _CID return object */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtExecute_CLS * * PARAMETERS: DeviceNode - Node for the device * ReturnId - Where the _CLS is returned * * RETURN: Status * * DESCRIPTION: Executes the _CLS control method that returns PCI-defined * class code of the device. The _CLS value is always a package * containing PCI class information as a list of integers. * The returned string has format "BBSSPP", where: * BB = Base-class code * SS = Sub-class code * PP = Programming Interface code * ******************************************************************************/ ACPI_STATUS AcpiUtExecute_CLS ( ACPI_NAMESPACE_NODE *DeviceNode, ACPI_PNP_DEVICE_ID **ReturnId) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT **ClsObjects; UINT32 Count; ACPI_PNP_DEVICE_ID *Cls; UINT32 Length; ACPI_STATUS Status; UINT8 ClassCode[3] = {0, 0, 0}; ACPI_FUNCTION_TRACE (UtExecute_CLS); Status = AcpiUtEvaluateObject (DeviceNode, METHOD_NAME__CLS, ACPI_BTYPE_PACKAGE, &ObjDesc); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Get the size of the String to be returned, includes null terminator */ Length = ACPI_PCICLS_STRING_SIZE; ClsObjects = ObjDesc->Package.Elements; Count = ObjDesc->Package.Count; if (ObjDesc->Common.Type == ACPI_TYPE_PACKAGE) { if (Count > 0 && ClsObjects[0]->Common.Type == ACPI_TYPE_INTEGER) { ClassCode[0] = (UINT8) ClsObjects[0]->Integer.Value; } if (Count > 1 && ClsObjects[1]->Common.Type == ACPI_TYPE_INTEGER) { ClassCode[1] = (UINT8) ClsObjects[1]->Integer.Value; } if (Count > 2 && ClsObjects[2]->Common.Type == ACPI_TYPE_INTEGER) { ClassCode[2] = (UINT8) ClsObjects[2]->Integer.Value; } } /* Allocate a buffer for the CLS */ Cls = ACPI_ALLOCATE_ZEROED ( sizeof (ACPI_PNP_DEVICE_ID) + (ACPI_SIZE) Length); if (!Cls) { Status = AE_NO_MEMORY; goto Cleanup; } /* Area for the string starts after PNP_DEVICE_ID struct */ Cls->String = ACPI_ADD_PTR (char, Cls, sizeof (ACPI_PNP_DEVICE_ID)); /* Simply copy existing string */ AcpiExPciClsToString (Cls->String, ClassCode); Cls->Length = Length; *ReturnId = Cls; Cleanup: /* On exit, we must delete the return object */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } src/acpica/source/components/utilities/utinit.c000066400000000000000000000370101465205512700222550ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utinit - Common ACPI subsystem initialization * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "acevents.h" #include "actables.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utinit") /* Local prototypes */ static void AcpiUtTerminate ( void); #if (!ACPI_REDUCED_HARDWARE) static void AcpiUtFreeGpeLists ( void); #else #define AcpiUtFreeGpeLists() #endif /* !ACPI_REDUCED_HARDWARE */ #if (!ACPI_REDUCED_HARDWARE) /****************************************************************************** * * FUNCTION: AcpiUtFreeGpeLists * * PARAMETERS: none * * RETURN: none * * DESCRIPTION: Free global GPE lists * ******************************************************************************/ static void AcpiUtFreeGpeLists ( void) { ACPI_GPE_BLOCK_INFO *GpeBlock; ACPI_GPE_BLOCK_INFO *NextGpeBlock; ACPI_GPE_XRUPT_INFO *GpeXruptInfo; ACPI_GPE_XRUPT_INFO *NextGpeXruptInfo; /* Free global GPE blocks and related info structures */ GpeXruptInfo = AcpiGbl_GpeXruptListHead; while (GpeXruptInfo) { GpeBlock = GpeXruptInfo->GpeBlockListHead; while (GpeBlock) { NextGpeBlock = GpeBlock->Next; ACPI_FREE (GpeBlock->EventInfo); ACPI_FREE (GpeBlock->RegisterInfo); ACPI_FREE (GpeBlock); GpeBlock = NextGpeBlock; } NextGpeXruptInfo = GpeXruptInfo->Next; ACPI_FREE (GpeXruptInfo); GpeXruptInfo = NextGpeXruptInfo; } } #endif /* !ACPI_REDUCED_HARDWARE */ /******************************************************************************* * * FUNCTION: AcpiUtInitGlobals * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Initialize ACPICA globals. All globals that require specific * initialization should be initialized here. This allows for * a warm restart. * ******************************************************************************/ ACPI_STATUS AcpiUtInitGlobals ( void) { ACPI_STATUS Status; UINT32 i; ACPI_FUNCTION_TRACE (UtInitGlobals); /* Create all memory caches */ Status = AcpiUtCreateCaches (); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Address Range lists */ for (i = 0; i < ACPI_ADDRESS_RANGE_MAX; i++) { AcpiGbl_AddressRangeList[i] = NULL; } /* Mutex locked flags */ for (i = 0; i < ACPI_NUM_MUTEX; i++) { AcpiGbl_MutexInfo[i].Mutex = NULL; AcpiGbl_MutexInfo[i].ThreadId = ACPI_MUTEX_NOT_ACQUIRED; AcpiGbl_MutexInfo[i].UseCount = 0; } for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++) { AcpiGbl_OwnerIdMask[i] = 0; } /* Last OwnerID is never valid */ AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000; /* Event counters */ AcpiMethodCount = 0; AcpiSciCount = 0; AcpiGpeCount = 0; for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) { AcpiFixedEventCount[i] = 0; } #if (!ACPI_REDUCED_HARDWARE) /* GPE/SCI support */ AcpiGbl_AllGpesInitialized = FALSE; AcpiGbl_GpeXruptListHead = NULL; AcpiGbl_GpeFadtBlocks[0] = NULL; AcpiGbl_GpeFadtBlocks[1] = NULL; AcpiCurrentGpeCount = 0; AcpiGbl_GlobalEventHandler = NULL; AcpiGbl_SciHandlerList = NULL; #endif /* !ACPI_REDUCED_HARDWARE */ /* Global handlers */ AcpiGbl_GlobalNotify[0].Handler = NULL; AcpiGbl_GlobalNotify[1].Handler = NULL; AcpiGbl_ExceptionHandler = NULL; AcpiGbl_InitHandler = NULL; AcpiGbl_TableHandler = NULL; AcpiGbl_InterfaceHandler = NULL; /* Global Lock support */ AcpiGbl_GlobalLockSemaphore = NULL; AcpiGbl_GlobalLockMutex = NULL; AcpiGbl_GlobalLockAcquired = FALSE; AcpiGbl_GlobalLockHandle = 0; AcpiGbl_GlobalLockPresent = FALSE; /* Miscellaneous variables */ AcpiGbl_DSDT = NULL; AcpiGbl_CmSingleStep = FALSE; AcpiGbl_Shutdown = FALSE; AcpiGbl_NsLookupCount = 0; AcpiGbl_PsFindCount = 0; AcpiGbl_AcpiHardwarePresent = TRUE; AcpiGbl_LastOwnerIdIndex = 0; AcpiGbl_NextOwnerIdOffset = 0; AcpiGbl_DebuggerConfiguration = DEBUGGER_THREADING; AcpiGbl_OsiMutex = NULL; /* Hardware oriented */ AcpiGbl_EventsInitialized = FALSE; AcpiGbl_SystemAwakeAndRunning = TRUE; /* Namespace */ AcpiGbl_RootNode = NULL; AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME; AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED; AcpiGbl_RootNodeStruct.Type = ACPI_TYPE_DEVICE; AcpiGbl_RootNodeStruct.Parent = NULL; AcpiGbl_RootNodeStruct.Child = NULL; AcpiGbl_RootNodeStruct.Peer = NULL; AcpiGbl_RootNodeStruct.Object = NULL; #ifdef ACPI_DISASSEMBLER AcpiGbl_ExternalList = NULL; AcpiGbl_NumExternalMethods = 0; AcpiGbl_ResolvedExternalMethods = 0; #endif #ifdef ACPI_DEBUG_OUTPUT AcpiGbl_LowestStackPointer = ACPI_CAST_PTR (ACPI_SIZE, ACPI_SIZE_MAX); #endif #ifdef ACPI_DBG_TRACK_ALLOCATIONS AcpiGbl_DisplayFinalMemStats = FALSE; AcpiGbl_DisableMemTracking = FALSE; #endif return_ACPI_STATUS (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiUtTerminate * * PARAMETERS: none * * RETURN: none * * DESCRIPTION: Free global memory * ******************************************************************************/ static void AcpiUtTerminate ( void) { ACPI_FUNCTION_TRACE (UtTerminate); AcpiUtFreeGpeLists (); AcpiUtDeleteAddressLists (); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiUtSubsystemShutdown * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Shutdown the various components. Do not delete the mutex * objects here, because the AML debugger may be still running. * ******************************************************************************/ void AcpiUtSubsystemShutdown ( void) { ACPI_FUNCTION_TRACE (UtSubsystemShutdown); /* Just exit if subsystem is already shutdown */ if (AcpiGbl_Shutdown) { ACPI_ERROR ((AE_INFO, "ACPI Subsystem is already terminated")); return_VOID; } /* Subsystem appears active, go ahead and shut it down */ AcpiGbl_Shutdown = TRUE; AcpiGbl_StartupFlags = 0; ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Shutting down ACPI Subsystem\n")); #ifndef ACPI_ASL_COMPILER /* Close the AcpiEvent Handling */ AcpiEvTerminate (); /* Delete any dynamic _OSI interfaces */ AcpiUtInterfaceTerminate (); #endif /* Close the Namespace */ AcpiNsTerminate (); /* Delete the ACPI tables */ AcpiTbTerminate (); /* Close the globals */ AcpiUtTerminate (); /* Purge the local caches */ (void) AcpiUtDeleteCaches (); return_VOID; } src/acpica/source/components/utilities/utlock.c000066400000000000000000000276611465205512700222550ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utlock - Reader/Writer lock interfaces * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utlock") /******************************************************************************* * * FUNCTION: AcpiUtCreateRwLock * AcpiUtDeleteRwLock * * PARAMETERS: Lock - Pointer to a valid RW lock * * RETURN: Status * * DESCRIPTION: Reader/writer lock creation and deletion interfaces. * ******************************************************************************/ ACPI_STATUS AcpiUtCreateRwLock ( ACPI_RW_LOCK *Lock) { ACPI_STATUS Status; Lock->NumReaders = 0; Status = AcpiOsCreateMutex (&Lock->ReaderMutex); if (ACPI_FAILURE (Status)) { return (Status); } Status = AcpiOsCreateMutex (&Lock->WriterMutex); return (Status); } void AcpiUtDeleteRwLock ( ACPI_RW_LOCK *Lock) { AcpiOsDeleteMutex (Lock->ReaderMutex); AcpiOsDeleteMutex (Lock->WriterMutex); Lock->NumReaders = 0; Lock->ReaderMutex = NULL; Lock->WriterMutex = NULL; } /******************************************************************************* * * FUNCTION: AcpiUtAcquireReadLock * AcpiUtReleaseReadLock * * PARAMETERS: Lock - Pointer to a valid RW lock * * RETURN: Status * * DESCRIPTION: Reader interfaces for reader/writer locks. On acquisition, * only the first reader acquires the write mutex. On release, * only the last reader releases the write mutex. Although this * algorithm can in theory starve writers, this should not be a * problem with ACPICA since the subsystem is infrequently used * in comparison to (for example) an I/O system. * ******************************************************************************/ ACPI_STATUS AcpiUtAcquireReadLock ( ACPI_RW_LOCK *Lock) { ACPI_STATUS Status; Status = AcpiOsAcquireMutex (Lock->ReaderMutex, ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { return (Status); } /* Acquire the write lock only for the first reader */ Lock->NumReaders++; if (Lock->NumReaders == 1) { Status = AcpiOsAcquireMutex (Lock->WriterMutex, ACPI_WAIT_FOREVER); } AcpiOsReleaseMutex (Lock->ReaderMutex); return (Status); } ACPI_STATUS AcpiUtReleaseReadLock ( ACPI_RW_LOCK *Lock) { ACPI_STATUS Status; Status = AcpiOsAcquireMutex (Lock->ReaderMutex, ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { return (Status); } /* Release the write lock only for the very last reader */ Lock->NumReaders--; if (Lock->NumReaders == 0) { AcpiOsReleaseMutex (Lock->WriterMutex); } AcpiOsReleaseMutex (Lock->ReaderMutex); return (Status); } /******************************************************************************* * * FUNCTION: AcpiUtAcquireWriteLock * AcpiUtReleaseWriteLock * * PARAMETERS: Lock - Pointer to a valid RW lock * * RETURN: Status * * DESCRIPTION: Writer interfaces for reader/writer locks. Simply acquire or * release the writer mutex associated with the lock. Acquisition * of the lock is fully exclusive and will block all readers and * writers until it is released. * ******************************************************************************/ ACPI_STATUS AcpiUtAcquireWriteLock ( ACPI_RW_LOCK *Lock) { ACPI_STATUS Status; Status = AcpiOsAcquireMutex (Lock->WriterMutex, ACPI_WAIT_FOREVER); return (Status); } void AcpiUtReleaseWriteLock ( ACPI_RW_LOCK *Lock) { AcpiOsReleaseMutex (Lock->WriterMutex); } src/acpica/source/components/utilities/utmath.c000066400000000000000000000552071465205512700222530ustar00rootroot00000000000000/******************************************************************************* * * Module Name: utmath - Integer math support routines * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utmath") /* Structures used only for 64-bit divide */ typedef struct uint64_struct { UINT32 Lo; UINT32 Hi; } UINT64_STRUCT; typedef union uint64_overlay { UINT64 Full; UINT64_STRUCT Part; } UINT64_OVERLAY; /* * Optional support for 64-bit double-precision integer multiply and shift. * This code is configurable and is implemented in order to support 32-bit * kernel environments where a 64-bit double-precision math library is not * available. */ #ifndef ACPI_USE_NATIVE_MATH64 /******************************************************************************* * * FUNCTION: AcpiUtShortMultiply * * PARAMETERS: Multiplicand - 64-bit multiplicand * Multiplier - 32-bit multiplier * OutProduct - Pointer to where the product is returned * * DESCRIPTION: Perform a short multiply. * ******************************************************************************/ ACPI_STATUS AcpiUtShortMultiply ( UINT64 Multiplicand, UINT32 Multiplier, UINT64 *OutProduct) { UINT64_OVERLAY MultiplicandOvl; UINT64_OVERLAY Product; UINT32 Carry32; ACPI_FUNCTION_TRACE (UtShortMultiply); MultiplicandOvl.Full = Multiplicand; /* * The Product is 64 bits, the carry is always 32 bits, * and is generated by the second multiply. */ ACPI_MUL_64_BY_32 (0, MultiplicandOvl.Part.Hi, Multiplier, Product.Part.Hi, Carry32); ACPI_MUL_64_BY_32 (0, MultiplicandOvl.Part.Lo, Multiplier, Product.Part.Lo, Carry32); Product.Part.Hi += Carry32; /* Return only what was requested */ if (OutProduct) { *OutProduct = Product.Full; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtShortShiftLeft * * PARAMETERS: Operand - 64-bit shift operand * Count - 32-bit shift count * OutResult - Pointer to where the result is returned * * DESCRIPTION: Perform a short left shift. * ******************************************************************************/ ACPI_STATUS AcpiUtShortShiftLeft ( UINT64 Operand, UINT32 Count, UINT64 *OutResult) { UINT64_OVERLAY OperandOvl; ACPI_FUNCTION_TRACE (UtShortShiftLeft); OperandOvl.Full = Operand; if ((Count & 63) >= 32) { OperandOvl.Part.Hi = OperandOvl.Part.Lo; OperandOvl.Part.Lo = 0; Count = (Count & 63) - 32; } ACPI_SHIFT_LEFT_64_BY_32 (OperandOvl.Part.Hi, OperandOvl.Part.Lo, Count); /* Return only what was requested */ if (OutResult) { *OutResult = OperandOvl.Full; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtShortShiftRight * * PARAMETERS: Operand - 64-bit shift operand * Count - 32-bit shift count * OutResult - Pointer to where the result is returned * * DESCRIPTION: Perform a short right shift. * ******************************************************************************/ ACPI_STATUS AcpiUtShortShiftRight ( UINT64 Operand, UINT32 Count, UINT64 *OutResult) { UINT64_OVERLAY OperandOvl; ACPI_FUNCTION_TRACE (UtShortShiftRight); OperandOvl.Full = Operand; if ((Count & 63) >= 32) { OperandOvl.Part.Lo = OperandOvl.Part.Hi; OperandOvl.Part.Hi = 0; Count = (Count & 63) - 32; } ACPI_SHIFT_RIGHT_64_BY_32 (OperandOvl.Part.Hi, OperandOvl.Part.Lo, Count); /* Return only what was requested */ if (OutResult) { *OutResult = OperandOvl.Full; } return_ACPI_STATUS (AE_OK); } #else /******************************************************************************* * * FUNCTION: AcpiUtShortMultiply * * PARAMETERS: See function headers above * * DESCRIPTION: Native version of the UtShortMultiply function. * ******************************************************************************/ ACPI_STATUS AcpiUtShortMultiply ( UINT64 Multiplicand, UINT32 Multiplier, UINT64 *OutProduct) { ACPI_FUNCTION_TRACE (UtShortMultiply); /* Return only what was requested */ if (OutProduct) { *OutProduct = Multiplicand * Multiplier; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtShortShiftLeft * * PARAMETERS: See function headers above * * DESCRIPTION: Native version of the UtShortShiftLeft function. * ******************************************************************************/ ACPI_STATUS AcpiUtShortShiftLeft ( UINT64 Operand, UINT32 Count, UINT64 *OutResult) { ACPI_FUNCTION_TRACE (UtShortShiftLeft); /* Return only what was requested */ if (OutResult) { *OutResult = Operand << Count; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtShortShiftRight * * PARAMETERS: See function headers above * * DESCRIPTION: Native version of the UtShortShiftRight function. * ******************************************************************************/ ACPI_STATUS AcpiUtShortShiftRight ( UINT64 Operand, UINT32 Count, UINT64 *OutResult) { ACPI_FUNCTION_TRACE (UtShortShiftRight); /* Return only what was requested */ if (OutResult) { *OutResult = Operand >> Count; } return_ACPI_STATUS (AE_OK); } #endif /* * Optional support for 64-bit double-precision integer divide. This code * is configurable and is implemented in order to support 32-bit kernel * environments where a 64-bit double-precision math library is not available. * * Support for a more normal 64-bit divide/modulo (with check for a divide- * by-zero) appears after this optional section of code. */ #ifndef ACPI_USE_NATIVE_DIVIDE /******************************************************************************* * * FUNCTION: AcpiUtShortDivide * * PARAMETERS: Dividend - 64-bit dividend * Divisor - 32-bit divisor * OutQuotient - Pointer to where the quotient is returned * OutRemainder - Pointer to where the remainder is returned * * RETURN: Status (Checks for divide-by-zero) * * DESCRIPTION: Perform a short (maximum 64 bits divided by 32 bits) * divide and modulo. The result is a 64-bit quotient and a * 32-bit remainder. * ******************************************************************************/ ACPI_STATUS AcpiUtShortDivide ( UINT64 Dividend, UINT32 Divisor, UINT64 *OutQuotient, UINT32 *OutRemainder) { UINT64_OVERLAY DividendOvl; UINT64_OVERLAY Quotient; UINT32 Remainder32; ACPI_FUNCTION_TRACE (UtShortDivide); /* Always check for a zero divisor */ if (Divisor == 0) { ACPI_ERROR ((AE_INFO, "Divide by zero")); return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO); } DividendOvl.Full = Dividend; /* * The quotient is 64 bits, the remainder is always 32 bits, * and is generated by the second divide. */ ACPI_DIV_64_BY_32 (0, DividendOvl.Part.Hi, Divisor, Quotient.Part.Hi, Remainder32); ACPI_DIV_64_BY_32 (Remainder32, DividendOvl.Part.Lo, Divisor, Quotient.Part.Lo, Remainder32); /* Return only what was requested */ if (OutQuotient) { *OutQuotient = Quotient.Full; } if (OutRemainder) { *OutRemainder = Remainder32; } return_ACPI_STATUS (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtDivide * * PARAMETERS: InDividend - Dividend * InDivisor - Divisor * OutQuotient - Pointer to where the quotient is returned * OutRemainder - Pointer to where the remainder is returned * * RETURN: Status (Checks for divide-by-zero) * * DESCRIPTION: Perform a divide and modulo. * ******************************************************************************/ ACPI_STATUS AcpiUtDivide ( UINT64 InDividend, UINT64 InDivisor, UINT64 *OutQuotient, UINT64 *OutRemainder) { UINT64_OVERLAY Dividend; UINT64_OVERLAY Divisor; UINT64_OVERLAY Quotient; UINT64_OVERLAY Remainder; UINT64_OVERLAY NormalizedDividend; UINT64_OVERLAY NormalizedDivisor; UINT32 Partial1; UINT64_OVERLAY Partial2; UINT64_OVERLAY Partial3; ACPI_FUNCTION_TRACE (UtDivide); /* Always check for a zero divisor */ if (InDivisor == 0) { ACPI_ERROR ((AE_INFO, "Divide by zero")); return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO); } Divisor.Full = InDivisor; Dividend.Full = InDividend; if (Divisor.Part.Hi == 0) { /* * 1) Simplest case is where the divisor is 32 bits, we can * just do two divides */ Remainder.Part.Hi = 0; /* * The quotient is 64 bits, the remainder is always 32 bits, * and is generated by the second divide. */ ACPI_DIV_64_BY_32 (0, Dividend.Part.Hi, Divisor.Part.Lo, Quotient.Part.Hi, Partial1); ACPI_DIV_64_BY_32 (Partial1, Dividend.Part.Lo, Divisor.Part.Lo, Quotient.Part.Lo, Remainder.Part.Lo); } else { /* * 2) The general case where the divisor is a full 64 bits * is more difficult */ Quotient.Part.Hi = 0; NormalizedDividend = Dividend; NormalizedDivisor = Divisor; /* Normalize the operands (shift until the divisor is < 32 bits) */ do { ACPI_SHIFT_RIGHT_64 ( NormalizedDivisor.Part.Hi, NormalizedDivisor.Part.Lo); ACPI_SHIFT_RIGHT_64 ( NormalizedDividend.Part.Hi, NormalizedDividend.Part.Lo); } while (NormalizedDivisor.Part.Hi != 0); /* Partial divide */ ACPI_DIV_64_BY_32 ( NormalizedDividend.Part.Hi, NormalizedDividend.Part.Lo, NormalizedDivisor.Part.Lo, Quotient.Part.Lo, Partial1); /* * The quotient is always 32 bits, and simply requires * adjustment. The 64-bit remainder must be generated. */ Partial1 = Quotient.Part.Lo * Divisor.Part.Hi; Partial2.Full = (UINT64) Quotient.Part.Lo * Divisor.Part.Lo; Partial3.Full = (UINT64) Partial2.Part.Hi + Partial1; Remainder.Part.Hi = Partial3.Part.Lo; Remainder.Part.Lo = Partial2.Part.Lo; if (Partial3.Part.Hi == 0) { if (Partial3.Part.Lo >= Dividend.Part.Hi) { if (Partial3.Part.Lo == Dividend.Part.Hi) { if (Partial2.Part.Lo > Dividend.Part.Lo) { Quotient.Part.Lo--; Remainder.Full -= Divisor.Full; } } else { Quotient.Part.Lo--; Remainder.Full -= Divisor.Full; } } Remainder.Full = Remainder.Full - Dividend.Full; Remainder.Part.Hi = (UINT32) -((INT32) Remainder.Part.Hi); Remainder.Part.Lo = (UINT32) -((INT32) Remainder.Part.Lo); if (Remainder.Part.Lo) { Remainder.Part.Hi--; } } } /* Return only what was requested */ if (OutQuotient) { *OutQuotient = Quotient.Full; } if (OutRemainder) { *OutRemainder = Remainder.Full; } return_ACPI_STATUS (AE_OK); } #else /******************************************************************************* * * FUNCTION: AcpiUtShortDivide, AcpiUtDivide * * PARAMETERS: See function headers above * * DESCRIPTION: Native versions of the UtDivide functions. Use these if either * 1) The target is a 64-bit platform and therefore 64-bit * integer math is supported directly by the machine. * 2) The target is a 32-bit or 16-bit platform, and the * double-precision integer math library is available to * perform the divide. * ******************************************************************************/ ACPI_STATUS AcpiUtShortDivide ( UINT64 InDividend, UINT32 Divisor, UINT64 *OutQuotient, UINT32 *OutRemainder) { ACPI_FUNCTION_TRACE (UtShortDivide); /* Always check for a zero divisor */ if (Divisor == 0) { ACPI_ERROR ((AE_INFO, "Divide by zero")); return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO); } /* Return only what was requested */ if (OutQuotient) { *OutQuotient = InDividend / Divisor; } if (OutRemainder) { *OutRemainder = (UINT32) (InDividend % Divisor); } return_ACPI_STATUS (AE_OK); } ACPI_STATUS AcpiUtDivide ( UINT64 InDividend, UINT64 InDivisor, UINT64 *OutQuotient, UINT64 *OutRemainder) { ACPI_FUNCTION_TRACE (UtDivide); /* Always check for a zero divisor */ if (InDivisor == 0) { ACPI_ERROR ((AE_INFO, "Divide by zero")); return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO); } /* Return only what was requested */ if (OutQuotient) { *OutQuotient = InDividend / InDivisor; } if (OutRemainder) { *OutRemainder = InDividend % InDivisor; } return_ACPI_STATUS (AE_OK); } #endif src/acpica/source/components/utilities/utmisc.c000066400000000000000000000463151465205512700222550ustar00rootroot00000000000000/******************************************************************************* * * Module Name: utmisc - common utility procedures * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utmisc") /******************************************************************************* * * FUNCTION: AcpiUtIsPciRootBridge * * PARAMETERS: Id - The HID/CID in string format * * RETURN: TRUE if the Id is a match for a PCI/PCI-Express Root Bridge * * DESCRIPTION: Determine if the input ID is a PCI Root Bridge ID. * ******************************************************************************/ BOOLEAN AcpiUtIsPciRootBridge ( char *Id) { /* * Check if this is a PCI root bridge. * ACPI 3.0+: check for a PCI Express root also. */ if (!(strcmp (Id, PCI_ROOT_HID_STRING)) || !(strcmp (Id, PCI_EXPRESS_ROOT_HID_STRING))) { return (TRUE); } return (FALSE); } #if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP || defined ACPI_NAMES_APP) /******************************************************************************* * * FUNCTION: AcpiUtIsAmlTable * * PARAMETERS: Table - An ACPI table * * RETURN: TRUE if table contains executable AML; FALSE otherwise * * DESCRIPTION: Check ACPI Signature for a table that contains AML code. * Currently, these are DSDT,SSDT,PSDT. All other table types are * data tables that do not contain AML code. * ******************************************************************************/ BOOLEAN AcpiUtIsAmlTable ( ACPI_TABLE_HEADER *Table) { /* These are the only tables that contain executable AML */ if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_DSDT) || ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_PSDT) || ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_SSDT) || ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_OSDT) || ACPI_IS_OEM_SIG (Table->Signature)) { return (TRUE); } return (FALSE); } #endif /******************************************************************************* * * FUNCTION: AcpiUtDwordByteSwap * * PARAMETERS: Value - Value to be converted * * RETURN: UINT32 integer with bytes swapped * * DESCRIPTION: Convert a 32-bit value to big-endian (swap the bytes) * ******************************************************************************/ UINT32 AcpiUtDwordByteSwap ( UINT32 Value) { union { UINT32 Value; UINT8 Bytes[4]; } Out; union { UINT32 Value; UINT8 Bytes[4]; } In; ACPI_FUNCTION_ENTRY (); In.Value = Value; Out.Bytes[0] = In.Bytes[3]; Out.Bytes[1] = In.Bytes[2]; Out.Bytes[2] = In.Bytes[1]; Out.Bytes[3] = In.Bytes[0]; return (Out.Value); } /******************************************************************************* * * FUNCTION: AcpiUtSetIntegerWidth * * PARAMETERS: Revision From DSDT header * * RETURN: None * * DESCRIPTION: Set the global integer bit width based upon the revision * of the DSDT. For Revision 1 and 0, Integers are 32 bits. * For Revision 2 and above, Integers are 64 bits. Yes, this * makes a difference. * ******************************************************************************/ void AcpiUtSetIntegerWidth ( UINT8 Revision) { if (Revision < 2) { /* 32-bit case */ AcpiGbl_IntegerBitWidth = 32; AcpiGbl_IntegerNybbleWidth = 8; AcpiGbl_IntegerByteWidth = 4; } else { /* 64-bit case (ACPI 2.0+) */ AcpiGbl_IntegerBitWidth = 64; AcpiGbl_IntegerNybbleWidth = 16; AcpiGbl_IntegerByteWidth = 8; } } /******************************************************************************* * * FUNCTION: AcpiUtCreateUpdateStateAndPush * * PARAMETERS: Object - Object to be added to the new state * Action - Increment/Decrement * StateList - List the state will be added to * * RETURN: Status * * DESCRIPTION: Create a new state and push it * ******************************************************************************/ ACPI_STATUS AcpiUtCreateUpdateStateAndPush ( ACPI_OPERAND_OBJECT *Object, UINT16 Action, ACPI_GENERIC_STATE **StateList) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_ENTRY (); /* Ignore null objects; these are expected */ if (!Object) { return (AE_OK); } State = AcpiUtCreateUpdateState (Object, Action); if (!State) { return (AE_NO_MEMORY); } AcpiUtPushGenericState (StateList, State); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtWalkPackageTree * * PARAMETERS: SourceObject - The package to walk * TargetObject - Target object (if package is being copied) * WalkCallback - Called once for each package element * Context - Passed to the callback function * * RETURN: Status * * DESCRIPTION: Walk through a package, including subpackages * ******************************************************************************/ ACPI_STATUS AcpiUtWalkPackageTree ( ACPI_OPERAND_OBJECT *SourceObject, void *TargetObject, ACPI_PKG_CALLBACK WalkCallback, void *Context) { ACPI_STATUS Status = AE_OK; ACPI_GENERIC_STATE *StateList = NULL; ACPI_GENERIC_STATE *State; ACPI_OPERAND_OBJECT *ThisSourceObj; UINT32 ThisIndex; ACPI_FUNCTION_TRACE (UtWalkPackageTree); State = AcpiUtCreatePkgState (SourceObject, TargetObject, 0); if (!State) { return_ACPI_STATUS (AE_NO_MEMORY); } while (State) { /* Get one element of the package */ ThisIndex = State->Pkg.Index; ThisSourceObj = State->Pkg.SourceObject->Package.Elements[ThisIndex]; State->Pkg.ThisTargetObj = &State->Pkg.SourceObject->Package.Elements[ThisIndex]; /* * Check for: * 1) An uninitialized package element. It is completely * legal to declare a package and leave it uninitialized * 2) Not an internal object - can be a namespace node instead * 3) Any type other than a package. Packages are handled in else * case below. */ if ((!ThisSourceObj) || (ACPI_GET_DESCRIPTOR_TYPE (ThisSourceObj) != ACPI_DESC_TYPE_OPERAND) || (ThisSourceObj->Common.Type != ACPI_TYPE_PACKAGE)) { Status = WalkCallback (ACPI_COPY_TYPE_SIMPLE, ThisSourceObj, State, Context); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } State->Pkg.Index++; while (State->Pkg.Index >= State->Pkg.SourceObject->Package.Count) { /* * We've handled all of the objects at this level, This means * that we have just completed a package. That package may * have contained one or more packages itself. * * Delete this state and pop the previous state (package). */ AcpiUtDeleteGenericState (State); State = AcpiUtPopGenericState (&StateList); /* Finished when there are no more states */ if (!State) { /* * We have handled all of the objects in the top level * package just add the length of the package objects * and exit */ return_ACPI_STATUS (AE_OK); } /* * Go back up a level and move the index past the just * completed package object. */ State->Pkg.Index++; } } else { /* This is a subobject of type package */ Status = WalkCallback ( ACPI_COPY_TYPE_PACKAGE, ThisSourceObj, State, Context); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Push the current state and create a new one * The callback above returned a new target package object. */ AcpiUtPushGenericState (&StateList, State); State = AcpiUtCreatePkgState ( ThisSourceObj, State->Pkg.ThisTargetObj, 0); if (!State) { /* Free any stacked Update State objects */ while (StateList) { State = AcpiUtPopGenericState (&StateList); AcpiUtDeleteGenericState (State); } return_ACPI_STATUS (AE_NO_MEMORY); } } } /* We should never get here */ ACPI_ERROR ((AE_INFO, "State list did not terminate correctly")); return_ACPI_STATUS (AE_AML_INTERNAL); } #ifdef ACPI_DEBUG_OUTPUT /******************************************************************************* * * FUNCTION: AcpiUtDisplayInitPathname * * PARAMETERS: Type - Object type of the node * ObjHandle - Handle whose pathname will be displayed * Path - Additional path string to be appended. * (NULL if no extra path) * * RETURN: ACPI_STATUS * * DESCRIPTION: Display full pathname of an object, DEBUG ONLY * ******************************************************************************/ void AcpiUtDisplayInitPathname ( UINT8 Type, ACPI_NAMESPACE_NODE *ObjHandle, const char *Path) { ACPI_STATUS Status; ACPI_BUFFER Buffer; ACPI_FUNCTION_ENTRY (); /* Only print the path if the appropriate debug level is enabled */ if (!(AcpiDbgLevel & ACPI_LV_INIT_NAMES)) { return; } /* Get the full pathname to the node */ Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiNsHandleToPathname (ObjHandle, &Buffer, TRUE); if (ACPI_FAILURE (Status)) { return; } /* Print what we're doing */ switch (Type) { case ACPI_TYPE_METHOD: AcpiOsPrintf ("Executing "); break; default: AcpiOsPrintf ("Initializing "); break; } /* Print the object type and pathname */ AcpiOsPrintf ("%-12s %s", AcpiUtGetTypeName (Type), (char *) Buffer.Pointer); /* Extra path is used to append names like _STA, _INI, etc. */ if (Path) { AcpiOsPrintf (".%s", Path); } AcpiOsPrintf ("\n"); ACPI_FREE (Buffer.Pointer); } #endif src/acpica/source/components/utilities/utmutex.c000066400000000000000000000422261465205512700224610ustar00rootroot00000000000000/******************************************************************************* * * Module Name: utmutex - local mutex support * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utmutex") /* Local prototypes */ static ACPI_STATUS AcpiUtCreateMutex ( ACPI_MUTEX_HANDLE MutexId); static void AcpiUtDeleteMutex ( ACPI_MUTEX_HANDLE MutexId); /******************************************************************************* * * FUNCTION: AcpiUtMutexInitialize * * PARAMETERS: None. * * RETURN: Status * * DESCRIPTION: Create the system mutex objects. This includes mutexes, * spin locks, and reader/writer locks. * ******************************************************************************/ ACPI_STATUS AcpiUtMutexInitialize ( void) { UINT32 i; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (UtMutexInitialize); /* Create each of the predefined mutex objects */ for (i = 0; i < ACPI_NUM_MUTEX; i++) { Status = AcpiUtCreateMutex (i); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } /* Create the spinlocks for use at interrupt level or for speed */ Status = AcpiOsCreateLock (&AcpiGbl_GpeLock); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiOsCreateLock (&AcpiGbl_HardwareLock); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } Status = AcpiOsCreateLock (&AcpiGbl_ReferenceCountLock); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Mutex for _OSI support */ Status = AcpiOsCreateMutex (&AcpiGbl_OsiMutex); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Create the reader/writer lock for namespace access */ Status = AcpiUtCreateRwLock (&AcpiGbl_NamespaceRwLock); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtMutexTerminate * * PARAMETERS: None. * * RETURN: None. * * DESCRIPTION: Delete all of the system mutex objects. This includes mutexes, * spin locks, and reader/writer locks. * ******************************************************************************/ void AcpiUtMutexTerminate ( void) { UINT32 i; ACPI_FUNCTION_TRACE (UtMutexTerminate); /* Delete each predefined mutex object */ for (i = 0; i < ACPI_NUM_MUTEX; i++) { AcpiUtDeleteMutex (i); } AcpiOsDeleteMutex (AcpiGbl_OsiMutex); /* Delete the spinlocks */ AcpiOsDeleteLock (AcpiGbl_GpeLock); AcpiOsDeleteLock (AcpiGbl_HardwareLock); AcpiOsDeleteLock (AcpiGbl_ReferenceCountLock); /* Delete the reader/writer lock */ AcpiUtDeleteRwLock (&AcpiGbl_NamespaceRwLock); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiUtCreateMutex * * PARAMETERS: MutexID - ID of the mutex to be created * * RETURN: Status * * DESCRIPTION: Create a mutex object. * ******************************************************************************/ static ACPI_STATUS AcpiUtCreateMutex ( ACPI_MUTEX_HANDLE MutexId) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE_U32 (UtCreateMutex, MutexId); if (!AcpiGbl_MutexInfo[MutexId].Mutex) { Status = AcpiOsCreateMutex (&AcpiGbl_MutexInfo[MutexId].Mutex); AcpiGbl_MutexInfo[MutexId].ThreadId = ACPI_MUTEX_NOT_ACQUIRED; AcpiGbl_MutexInfo[MutexId].UseCount = 0; } return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtDeleteMutex * * PARAMETERS: MutexID - ID of the mutex to be deleted * * RETURN: Status * * DESCRIPTION: Delete a mutex object. * ******************************************************************************/ static void AcpiUtDeleteMutex ( ACPI_MUTEX_HANDLE MutexId) { ACPI_FUNCTION_TRACE_U32 (UtDeleteMutex, MutexId); AcpiOsDeleteMutex (AcpiGbl_MutexInfo[MutexId].Mutex); AcpiGbl_MutexInfo[MutexId].Mutex = NULL; AcpiGbl_MutexInfo[MutexId].ThreadId = ACPI_MUTEX_NOT_ACQUIRED; return_VOID; } /******************************************************************************* * * FUNCTION: AcpiUtAcquireMutex * * PARAMETERS: MutexID - ID of the mutex to be acquired * * RETURN: Status * * DESCRIPTION: Acquire a mutex object. * ******************************************************************************/ ACPI_STATUS AcpiUtAcquireMutex ( ACPI_MUTEX_HANDLE MutexId) { ACPI_STATUS Status; ACPI_THREAD_ID ThisThreadId; ACPI_FUNCTION_NAME (UtAcquireMutex); if (MutexId > ACPI_MAX_MUTEX) { return (AE_BAD_PARAMETER); } ThisThreadId = AcpiOsGetThreadId (); #ifdef ACPI_MUTEX_DEBUG { UINT32 i; /* * Mutex debug code, for internal debugging only. * * Deadlock prevention. Check if this thread owns any mutexes of value * greater than or equal to this one. If so, the thread has violated * the mutex ordering rule. This indicates a coding error somewhere in * the ACPI subsystem code. */ for (i = MutexId; i < ACPI_NUM_MUTEX; i++) { if (AcpiGbl_MutexInfo[i].ThreadId == ThisThreadId) { if (i == MutexId) { ACPI_ERROR ((AE_INFO, "Mutex [%s] already acquired by this thread [%u]", AcpiUtGetMutexName (MutexId), (UINT32) ThisThreadId)); return (AE_ALREADY_ACQUIRED); } ACPI_ERROR ((AE_INFO, "Invalid acquire order: Thread %u owns [%s], wants [%s]", (UINT32) ThisThreadId, AcpiUtGetMutexName (i), AcpiUtGetMutexName (MutexId))); return (AE_ACQUIRE_DEADLOCK); } } } #endif ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Thread %u attempting to acquire Mutex [%s]\n", (UINT32) ThisThreadId, AcpiUtGetMutexName (MutexId))); Status = AcpiOsAcquireMutex ( AcpiGbl_MutexInfo[MutexId].Mutex, ACPI_WAIT_FOREVER); if (ACPI_SUCCESS (Status)) { ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Thread %u acquired Mutex [%s]\n", (UINT32) ThisThreadId, AcpiUtGetMutexName (MutexId))); AcpiGbl_MutexInfo[MutexId].UseCount++; AcpiGbl_MutexInfo[MutexId].ThreadId = ThisThreadId; } else { ACPI_EXCEPTION ((AE_INFO, Status, "Thread %u could not acquire Mutex [%s] (0x%X)", (UINT32) ThisThreadId, AcpiUtGetMutexName (MutexId), MutexId)); } return (Status); } /******************************************************************************* * * FUNCTION: AcpiUtReleaseMutex * * PARAMETERS: MutexID - ID of the mutex to be released * * RETURN: Status * * DESCRIPTION: Release a mutex object. * ******************************************************************************/ ACPI_STATUS AcpiUtReleaseMutex ( ACPI_MUTEX_HANDLE MutexId) { ACPI_FUNCTION_NAME (UtReleaseMutex); ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Thread %u releasing Mutex [%s]\n", (UINT32) AcpiOsGetThreadId (), AcpiUtGetMutexName (MutexId))); if (MutexId > ACPI_MAX_MUTEX) { return (AE_BAD_PARAMETER); } /* * Mutex must be acquired in order to release it! */ if (AcpiGbl_MutexInfo[MutexId].ThreadId == ACPI_MUTEX_NOT_ACQUIRED) { ACPI_ERROR ((AE_INFO, "Mutex [%s] (0x%X) is not acquired, cannot release", AcpiUtGetMutexName (MutexId), MutexId)); return (AE_NOT_ACQUIRED); } #ifdef ACPI_MUTEX_DEBUG { UINT32 i; /* * Mutex debug code, for internal debugging only. * * Deadlock prevention. Check if this thread owns any mutexes of value * greater than this one. If so, the thread has violated the mutex * ordering rule. This indicates a coding error somewhere in * the ACPI subsystem code. */ for (i = MutexId; i < ACPI_NUM_MUTEX; i++) { if (AcpiGbl_MutexInfo[i].ThreadId == AcpiOsGetThreadId ()) { if (i == MutexId) { continue; } ACPI_ERROR ((AE_INFO, "Invalid release order: owns [%s], releasing [%s]", AcpiUtGetMutexName (i), AcpiUtGetMutexName (MutexId))); return (AE_RELEASE_DEADLOCK); } } } #endif /* Mark unlocked FIRST */ AcpiGbl_MutexInfo[MutexId].ThreadId = ACPI_MUTEX_NOT_ACQUIRED; AcpiOsReleaseMutex (AcpiGbl_MutexInfo[MutexId].Mutex); return (AE_OK); } src/acpica/source/components/utilities/utnonansi.c000066400000000000000000000316271465205512700227670ustar00rootroot00000000000000/******************************************************************************* * * Module Name: utnonansi - Non-ansi C library functions * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utnonansi") /* * Non-ANSI C library functions - strlwr, strupr, stricmp, and "safe" * string functions. */ /******************************************************************************* * * FUNCTION: AcpiUtStrlwr (strlwr) * * PARAMETERS: SrcString - The source string to convert * * RETURN: None * * DESCRIPTION: Convert a string to lowercase * ******************************************************************************/ void AcpiUtStrlwr ( char *SrcString) { char *String; ACPI_FUNCTION_ENTRY (); if (!SrcString) { return; } /* Walk entire string, lowercasing the letters */ for (String = SrcString; *String; String++) { *String = (char) tolower ((int) *String); } } /******************************************************************************* * * FUNCTION: AcpiUtStrupr (strupr) * * PARAMETERS: SrcString - The source string to convert * * RETURN: None * * DESCRIPTION: Convert a string to uppercase * ******************************************************************************/ void AcpiUtStrupr ( char *SrcString) { char *String; ACPI_FUNCTION_ENTRY (); if (!SrcString) { return; } /* Walk entire string, uppercasing the letters */ for (String = SrcString; *String; String++) { *String = (char) toupper ((int) *String); } } /****************************************************************************** * * FUNCTION: AcpiUtStricmp (stricmp) * * PARAMETERS: String1 - first string to compare * String2 - second string to compare * * RETURN: int that signifies string relationship. Zero means strings * are equal. * * DESCRIPTION: Case-insensitive string compare. Implementation of the * non-ANSI stricmp function. * ******************************************************************************/ int AcpiUtStricmp ( char *String1, char *String2) { int c1; int c2; do { c1 = tolower ((int) *String1); c2 = tolower ((int) *String2); String1++; String2++; } while ((c1 == c2) && (c1)); return (c1 - c2); } #if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) || defined (ACPI_DEBUG_OUTPUT) /******************************************************************************* * * FUNCTION: AcpiUtSafeStrcpy, AcpiUtSafeStrcat, AcpiUtSafeStrncat * * PARAMETERS: Adds a "DestSize" parameter to each of the standard string * functions. This is the size of the Destination buffer. * * RETURN: TRUE if the operation would overflow the destination buffer. * * DESCRIPTION: Safe versions of standard Clib string functions. Ensure that * the result of the operation will not overflow the output string * buffer. * * NOTE: These functions are typically only helpful for processing * user input and command lines. For most ACPICA code, the * required buffer length is precisely calculated before buffer * allocation, so the use of these functions is unnecessary. * ******************************************************************************/ BOOLEAN AcpiUtSafeStrcpy ( char *Dest, ACPI_SIZE DestSize, char *Source) { if (strlen (Source) >= DestSize) { return (TRUE); } strcpy (Dest, Source); return (FALSE); } BOOLEAN AcpiUtSafeStrcat ( char *Dest, ACPI_SIZE DestSize, char *Source) { if ((strlen (Dest) + strlen (Source)) >= DestSize) { return (TRUE); } strcat (Dest, Source); return (FALSE); } BOOLEAN AcpiUtSafeStrncat ( char *Dest, ACPI_SIZE DestSize, char *Source, ACPI_SIZE MaxTransferLength) { ACPI_SIZE ActualTransferLength; ActualTransferLength = ACPI_MIN (MaxTransferLength, strlen (Source)); if ((strlen (Dest) + ActualTransferLength) >= DestSize) { return (TRUE); } strncat (Dest, Source, MaxTransferLength); return (FALSE); } void AcpiUtSafeStrncpy ( char *Dest, char *Source, ACPI_SIZE DestSize) { /* Always terminate destination string */ strncpy (Dest, Source, DestSize); Dest[DestSize - 1] = 0; } #endif src/acpica/source/components/utilities/utobject.c000066400000000000000000000673031465205512700225700ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utobject - ACPI object create/delete/size/cache routines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utobject") /* Local prototypes */ static ACPI_STATUS AcpiUtGetSimpleObjectSize ( ACPI_OPERAND_OBJECT *Obj, ACPI_SIZE *ObjLength); static ACPI_STATUS AcpiUtGetPackageObjectSize ( ACPI_OPERAND_OBJECT *Obj, ACPI_SIZE *ObjLength); static ACPI_STATUS AcpiUtGetElementLength ( UINT8 ObjectType, ACPI_OPERAND_OBJECT *SourceObject, ACPI_GENERIC_STATE *State, void *Context); /******************************************************************************* * * FUNCTION: AcpiUtCreateInternalObjectDbg * * PARAMETERS: ModuleName - Source file name of caller * LineNumber - Line number of caller * ComponentId - Component type of caller * Type - ACPI Type of the new object * * RETURN: A new internal object, null on failure * * DESCRIPTION: Create and initialize a new internal object. * * NOTE: We always allocate the worst-case object descriptor because * these objects are cached, and we want them to be * one-size-satisfies-any-request. This in itself may not be * the most memory efficient, but the efficiency of the object * cache should more than make up for this! * ******************************************************************************/ ACPI_OPERAND_OBJECT * AcpiUtCreateInternalObjectDbg ( const char *ModuleName, UINT32 LineNumber, UINT32 ComponentId, ACPI_OBJECT_TYPE Type) { ACPI_OPERAND_OBJECT *Object; ACPI_OPERAND_OBJECT *SecondObject; ACPI_FUNCTION_TRACE_STR (UtCreateInternalObjectDbg, AcpiUtGetTypeName (Type)); /* Allocate the raw object descriptor */ Object = AcpiUtAllocateObjectDescDbg ( ModuleName, LineNumber, ComponentId); if (!Object) { return_PTR (NULL); } switch (Type) { case ACPI_TYPE_REGION: case ACPI_TYPE_BUFFER_FIELD: case ACPI_TYPE_LOCAL_BANK_FIELD: /* These types require a secondary object */ SecondObject = AcpiUtAllocateObjectDescDbg ( ModuleName, LineNumber, ComponentId); if (!SecondObject) { AcpiUtDeleteObjectDesc (Object); return_PTR (NULL); } SecondObject->Common.Type = ACPI_TYPE_LOCAL_EXTRA; SecondObject->Common.ReferenceCount = 1; /* Link the second object to the first */ Object->Common.NextObject = SecondObject; break; default: /* All others have no secondary object */ break; } /* Save the object type in the object descriptor */ Object->Common.Type = (UINT8) Type; /* Init the reference count */ Object->Common.ReferenceCount = 1; /* Any per-type initialization should go here */ return_PTR (Object); } /******************************************************************************* * * FUNCTION: AcpiUtCreatePackageObject * * PARAMETERS: Count - Number of package elements * * RETURN: Pointer to a new Package object, null on failure * * DESCRIPTION: Create a fully initialized package object * ******************************************************************************/ ACPI_OPERAND_OBJECT * AcpiUtCreatePackageObject ( UINT32 Count) { ACPI_OPERAND_OBJECT *PackageDesc; ACPI_OPERAND_OBJECT **PackageElements; ACPI_FUNCTION_TRACE_U32 (UtCreatePackageObject, Count); /* Create a new Package object */ PackageDesc = AcpiUtCreateInternalObject (ACPI_TYPE_PACKAGE); if (!PackageDesc) { return_PTR (NULL); } /* * Create the element array. Count+1 allows the array to be null * terminated. */ PackageElements = ACPI_ALLOCATE_ZEROED ( ((ACPI_SIZE) Count + 1) * sizeof (void *)); if (!PackageElements) { ACPI_FREE (PackageDesc); return_PTR (NULL); } PackageDesc->Package.Count = Count; PackageDesc->Package.Elements = PackageElements; return_PTR (PackageDesc); } /******************************************************************************* * * FUNCTION: AcpiUtCreateIntegerObject * * PARAMETERS: InitialValue - Initial value for the integer * * RETURN: Pointer to a new Integer object, null on failure * * DESCRIPTION: Create an initialized integer object * ******************************************************************************/ ACPI_OPERAND_OBJECT * AcpiUtCreateIntegerObject ( UINT64 InitialValue) { ACPI_OPERAND_OBJECT *IntegerDesc; ACPI_FUNCTION_TRACE (UtCreateIntegerObject); /* Create and initialize a new integer object */ IntegerDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); if (!IntegerDesc) { return_PTR (NULL); } IntegerDesc->Integer.Value = InitialValue; return_PTR (IntegerDesc); } /******************************************************************************* * * FUNCTION: AcpiUtCreateBufferObject * * PARAMETERS: BufferSize - Size of buffer to be created * * RETURN: Pointer to a new Buffer object, null on failure * * DESCRIPTION: Create a fully initialized buffer object * ******************************************************************************/ ACPI_OPERAND_OBJECT * AcpiUtCreateBufferObject ( ACPI_SIZE BufferSize) { ACPI_OPERAND_OBJECT *BufferDesc; UINT8 *Buffer = NULL; ACPI_FUNCTION_TRACE_U32 (UtCreateBufferObject, BufferSize); /* Create a new Buffer object */ BufferDesc = AcpiUtCreateInternalObject (ACPI_TYPE_BUFFER); if (!BufferDesc) { return_PTR (NULL); } /* Create an actual buffer only if size > 0 */ if (BufferSize > 0) { /* Allocate the actual buffer */ Buffer = ACPI_ALLOCATE_ZEROED (BufferSize); if (!Buffer) { ACPI_ERROR ((AE_INFO, "Could not allocate size %u", (UINT32) BufferSize)); AcpiUtRemoveReference (BufferDesc); return_PTR (NULL); } } /* Complete buffer object initialization */ BufferDesc->Buffer.Flags |= AOPOBJ_DATA_VALID; BufferDesc->Buffer.Pointer = Buffer; BufferDesc->Buffer.Length = (UINT32) BufferSize; /* Return the new buffer descriptor */ return_PTR (BufferDesc); } /******************************************************************************* * * FUNCTION: AcpiUtCreateStringObject * * PARAMETERS: StringSize - Size of string to be created. Does not * include NULL terminator, this is added * automatically. * * RETURN: Pointer to a new String object * * DESCRIPTION: Create a fully initialized string object * ******************************************************************************/ ACPI_OPERAND_OBJECT * AcpiUtCreateStringObject ( ACPI_SIZE StringSize) { ACPI_OPERAND_OBJECT *StringDesc; char *String; ACPI_FUNCTION_TRACE_U32 (UtCreateStringObject, StringSize); /* Create a new String object */ StringDesc = AcpiUtCreateInternalObject (ACPI_TYPE_STRING); if (!StringDesc) { return_PTR (NULL); } /* * Allocate the actual string buffer -- (Size + 1) for NULL terminator. * NOTE: Zero-length strings are NULL terminated */ String = ACPI_ALLOCATE_ZEROED (StringSize + 1); if (!String) { ACPI_ERROR ((AE_INFO, "Could not allocate size %u", (UINT32) StringSize)); AcpiUtRemoveReference (StringDesc); return_PTR (NULL); } /* Complete string object initialization */ StringDesc->String.Pointer = String; StringDesc->String.Length = (UINT32) StringSize; /* Return the new string descriptor */ return_PTR (StringDesc); } /******************************************************************************* * * FUNCTION: AcpiUtValidInternalObject * * PARAMETERS: Object - Object to be validated * * RETURN: TRUE if object is valid, FALSE otherwise * * DESCRIPTION: Validate a pointer to be of type ACPI_OPERAND_OBJECT * ******************************************************************************/ BOOLEAN AcpiUtValidInternalObject ( void *Object) { ACPI_FUNCTION_NAME (UtValidInternalObject); /* Check for a null pointer */ if (!Object) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "**** Null Object Ptr\n")); return (FALSE); } /* Check the descriptor type field */ switch (ACPI_GET_DESCRIPTOR_TYPE (Object)) { case ACPI_DESC_TYPE_OPERAND: /* The object appears to be a valid ACPI_OPERAND_OBJECT */ return (TRUE); default: ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p is not an ACPI operand obj [%s]\n", Object, AcpiUtGetDescriptorName (Object))); break; } return (FALSE); } /******************************************************************************* * * FUNCTION: AcpiUtAllocateObjectDescDbg * * PARAMETERS: ModuleName - Caller's module name (for error output) * LineNumber - Caller's line number (for error output) * ComponentId - Caller's component ID (for error output) * * RETURN: Pointer to newly allocated object descriptor. Null on error * * DESCRIPTION: Allocate a new object descriptor. Gracefully handle * error conditions. * ******************************************************************************/ void * AcpiUtAllocateObjectDescDbg ( const char *ModuleName, UINT32 LineNumber, UINT32 ComponentId) { ACPI_OPERAND_OBJECT *Object; ACPI_FUNCTION_TRACE (UtAllocateObjectDescDbg); Object = AcpiOsAcquireObject (AcpiGbl_OperandCache); if (!Object) { ACPI_ERROR ((ModuleName, LineNumber, "Could not allocate an object descriptor")); return_PTR (NULL); } /* Mark the descriptor type */ ACPI_SET_DESCRIPTOR_TYPE (Object, ACPI_DESC_TYPE_OPERAND); ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "%p Size %X\n", Object, (UINT32) sizeof (ACPI_OPERAND_OBJECT))); return_PTR (Object); } /******************************************************************************* * * FUNCTION: AcpiUtDeleteObjectDesc * * PARAMETERS: Object - An Acpi internal object to be deleted * * RETURN: None. * * DESCRIPTION: Free an ACPI object descriptor or add it to the object cache * ******************************************************************************/ void AcpiUtDeleteObjectDesc ( ACPI_OPERAND_OBJECT *Object) { ACPI_FUNCTION_TRACE_PTR (UtDeleteObjectDesc, Object); /* Object must be of type ACPI_OPERAND_OBJECT */ if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND) { ACPI_ERROR ((AE_INFO, "%p is not an ACPI Operand object [%s]", Object, AcpiUtGetDescriptorName (Object))); return_VOID; } (void) AcpiOsReleaseObject (AcpiGbl_OperandCache, Object); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiUtGetSimpleObjectSize * * PARAMETERS: InternalObject - An ACPI operand object * ObjLength - Where the length is returned * * RETURN: Status * * DESCRIPTION: This function is called to determine the space required to * contain a simple object for return to an external user. * * The length includes the object structure plus any additional * needed space. * ******************************************************************************/ static ACPI_STATUS AcpiUtGetSimpleObjectSize ( ACPI_OPERAND_OBJECT *InternalObject, ACPI_SIZE *ObjLength) { ACPI_SIZE Length; ACPI_SIZE Size; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE_PTR (UtGetSimpleObjectSize, InternalObject); /* Start with the length of the (external) Acpi object */ Length = sizeof (ACPI_OBJECT); /* A NULL object is allowed, can be a legal uninitialized package element */ if (!InternalObject) { /* * Object is NULL, just return the length of ACPI_OBJECT * (A NULL ACPI_OBJECT is an object of all zeroes.) */ *ObjLength = ACPI_ROUND_UP_TO_NATIVE_WORD (Length); return_ACPI_STATUS (AE_OK); } /* A Namespace Node should never appear here */ if (ACPI_GET_DESCRIPTOR_TYPE (InternalObject) == ACPI_DESC_TYPE_NAMED) { /* A namespace node should never get here */ ACPI_ERROR ((AE_INFO, "Received a namespace node [%4.4s] " "where an operand object is required", ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, InternalObject)->Name.Ascii)); return_ACPI_STATUS (AE_AML_INTERNAL); } /* * The final length depends on the object type * Strings and Buffers are packed right up against the parent object and * must be accessed bytewise or there may be alignment problems on * certain processors */ switch (InternalObject->Common.Type) { case ACPI_TYPE_STRING: Length += (ACPI_SIZE) InternalObject->String.Length + 1; break; case ACPI_TYPE_BUFFER: Length += (ACPI_SIZE) InternalObject->Buffer.Length; break; case ACPI_TYPE_INTEGER: case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_POWER: /* No extra data for these types */ break; case ACPI_TYPE_LOCAL_REFERENCE: switch (InternalObject->Reference.Class) { case ACPI_REFCLASS_NAME: /* * Get the actual length of the full pathname to this object. * The reference will be converted to the pathname to the object */ Size = AcpiNsGetPathnameLength (InternalObject->Reference.Node); if (!Size) { return_ACPI_STATUS (AE_BAD_PARAMETER); } Length += ACPI_ROUND_UP_TO_NATIVE_WORD (Size); break; default: /* * No other reference opcodes are supported. * Notably, Locals and Args are not supported, but this may be * required eventually. */ ACPI_ERROR ((AE_INFO, "Cannot convert to external object - " "unsupported Reference Class [%s] 0x%X in object %p", AcpiUtGetReferenceName (InternalObject), InternalObject->Reference.Class, InternalObject)); Status = AE_TYPE; break; } break; default: ACPI_ERROR ((AE_INFO, "Cannot convert to external object - " "unsupported type [%s] 0x%X in object %p", AcpiUtGetObjectTypeName (InternalObject), InternalObject->Common.Type, InternalObject)); Status = AE_TYPE; break; } /* * Account for the space required by the object rounded up to the next * multiple of the machine word size. This keeps each object aligned * on a machine word boundary. (preventing alignment faults on some * machines.) */ *ObjLength = ACPI_ROUND_UP_TO_NATIVE_WORD (Length); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtGetElementLength * * PARAMETERS: ACPI_PKG_CALLBACK * * RETURN: Status * * DESCRIPTION: Get the length of one package element. * ******************************************************************************/ static ACPI_STATUS AcpiUtGetElementLength ( UINT8 ObjectType, ACPI_OPERAND_OBJECT *SourceObject, ACPI_GENERIC_STATE *State, void *Context) { ACPI_STATUS Status = AE_OK; ACPI_PKG_INFO *Info = (ACPI_PKG_INFO *) Context; ACPI_SIZE ObjectSpace; switch (ObjectType) { case ACPI_COPY_TYPE_SIMPLE: /* * Simple object - just get the size (Null object/entry is handled * here also) and sum it into the running package length */ Status = AcpiUtGetSimpleObjectSize (SourceObject, &ObjectSpace); if (ACPI_FAILURE (Status)) { return (Status); } Info->Length += ObjectSpace; break; case ACPI_COPY_TYPE_PACKAGE: /* Package object - nothing much to do here, let the walk handle it */ Info->NumPackages++; State->Pkg.ThisTargetObj = NULL; break; default: /* No other types allowed */ return (AE_BAD_PARAMETER); } return (Status); } /******************************************************************************* * * FUNCTION: AcpiUtGetPackageObjectSize * * PARAMETERS: InternalObject - An ACPI internal object * ObjLength - Where the length is returned * * RETURN: Status * * DESCRIPTION: This function is called to determine the space required to * contain a package object for return to an external user. * * This is moderately complex since a package contains other * objects including packages. * ******************************************************************************/ static ACPI_STATUS AcpiUtGetPackageObjectSize ( ACPI_OPERAND_OBJECT *InternalObject, ACPI_SIZE *ObjLength) { ACPI_STATUS Status; ACPI_PKG_INFO Info; ACPI_FUNCTION_TRACE_PTR (UtGetPackageObjectSize, InternalObject); Info.Length = 0; Info.ObjectSpace = 0; Info.NumPackages = 1; Status = AcpiUtWalkPackageTree ( InternalObject, NULL, AcpiUtGetElementLength, &Info); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * We have handled all of the objects in all levels of the package. * just add the length of the package objects themselves. * Round up to the next machine word. */ Info.Length += ACPI_ROUND_UP_TO_NATIVE_WORD ( sizeof (ACPI_OBJECT)) * (ACPI_SIZE) Info.NumPackages; /* Return the total package length */ *ObjLength = Info.Length; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtGetObjectSize * * PARAMETERS: InternalObject - An ACPI internal object * ObjLength - Where the length will be returned * * RETURN: Status * * DESCRIPTION: This function is called to determine the space required to * contain an object for return to an API user. * ******************************************************************************/ ACPI_STATUS AcpiUtGetObjectSize ( ACPI_OPERAND_OBJECT *InternalObject, ACPI_SIZE *ObjLength) { ACPI_STATUS Status; ACPI_FUNCTION_ENTRY (); if ((ACPI_GET_DESCRIPTOR_TYPE (InternalObject) == ACPI_DESC_TYPE_OPERAND) && (InternalObject->Common.Type == ACPI_TYPE_PACKAGE)) { Status = AcpiUtGetPackageObjectSize (InternalObject, ObjLength); } else { Status = AcpiUtGetSimpleObjectSize (InternalObject, ObjLength); } return (Status); } src/acpica/source/components/utilities/utosi.c000066400000000000000000000607201465205512700221100ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utosi - Support for the _OSI predefined control method * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utosi") /****************************************************************************** * * ACPICA policy for new _OSI strings: * * It is the stated policy of ACPICA that new _OSI strings will be integrated * into this module as soon as possible after they are defined. It is strongly * recommended that all ACPICA hosts mirror this policy and integrate any * changes to this module as soon as possible. There are several historical * reasons behind this policy: * * 1) New BIOSs tend to test only the case where the host responds TRUE to * the latest version of Windows, which would respond to the latest/newest * _OSI string. Not responding TRUE to the latest version of Windows will * risk executing untested code paths throughout the DSDT and SSDTs. * * 2) If a new _OSI string is recognized only after a significant delay, this * has the potential to cause problems on existing working machines because * of the possibility that a new and different path through the ASL code * will be executed. * * 3) New _OSI strings are tending to come out about once per year. A delay * in recognizing a new string for a significant amount of time risks the * release of another string which only compounds the initial problem. * *****************************************************************************/ /* * Strings supported by the _OSI predefined control method (which is * implemented internally within this module.) * * March 2009: Removed "Linux" as this host no longer wants to respond true * for this string. Basically, the only safe OS strings are windows-related * and in many or most cases represent the only test path within the * BIOS-provided ASL code. * * The last element of each entry is used to track the newest version of * Windows that the BIOS has requested. */ static ACPI_INTERFACE_INFO AcpiDefaultSupportedInterfaces[] = { /* Operating System Vendor Strings */ {"Windows 2000", NULL, 0, ACPI_OSI_WIN_2000}, /* Windows 2000 */ {"Windows 2001", NULL, 0, ACPI_OSI_WIN_XP}, /* Windows XP */ {"Windows 2001 SP1", NULL, 0, ACPI_OSI_WIN_XP_SP1}, /* Windows XP SP1 */ {"Windows 2001.1", NULL, 0, ACPI_OSI_WINSRV_2003}, /* Windows Server 2003 */ {"Windows 2001 SP2", NULL, 0, ACPI_OSI_WIN_XP_SP2}, /* Windows XP SP2 */ {"Windows 2001.1 SP1", NULL, 0, ACPI_OSI_WINSRV_2003_SP1}, /* Windows Server 2003 SP1 - Added 03/2006 */ {"Windows 2006", NULL, 0, ACPI_OSI_WIN_VISTA}, /* Windows Vista - Added 03/2006 */ {"Windows 2006.1", NULL, 0, ACPI_OSI_WINSRV_2008}, /* Windows Server 2008 - Added 09/2009 */ {"Windows 2006 SP1", NULL, 0, ACPI_OSI_WIN_VISTA_SP1}, /* Windows Vista SP1 - Added 09/2009 */ {"Windows 2006 SP2", NULL, 0, ACPI_OSI_WIN_VISTA_SP2}, /* Windows Vista SP2 - Added 09/2010 */ {"Windows 2009", NULL, 0, ACPI_OSI_WIN_7}, /* Windows 7 and Server 2008 R2 - Added 09/2009 */ {"Windows 2012", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8 and Server 2012 - Added 08/2012 */ {"Windows 2013", NULL, 0, ACPI_OSI_WIN_8_1}, /* Windows 8.1 and Server 2012 R2 - Added 01/2014 */ {"Windows 2015", NULL, 0, ACPI_OSI_WIN_10}, /* Windows 10 - Added 03/2015 */ {"Windows 2016", NULL, 0, ACPI_OSI_WIN_10_RS1}, /* Windows 10 version 1607 - Added 12/2017 */ {"Windows 2017", NULL, 0, ACPI_OSI_WIN_10_RS2}, /* Windows 10 version 1703 - Added 12/2017 */ {"Windows 2017.2", NULL, 0, ACPI_OSI_WIN_10_RS3}, /* Windows 10 version 1709 - Added 02/2018 */ {"Windows 2018", NULL, 0, ACPI_OSI_WIN_10_RS4}, /* Windows 10 version 1803 - Added 11/2018 */ {"Windows 2018.2", NULL, 0, ACPI_OSI_WIN_10_RS5}, /* Windows 10 version 1809 - Added 11/2018 */ {"Windows 2019", NULL, 0, ACPI_OSI_WIN_10_19H1}, /* Windows 10 version 1903 - Added 08/2019 */ {"Windows 2020", NULL, 0, ACPI_OSI_WIN_10_20H1}, /* Windows 10 version 2004 - Added 08/2021 */ {"Windows 2021", NULL, 0, ACPI_OSI_WIN_11}, /* Windows 11 - Added 01/2022 */ /* Feature Group Strings */ {"Extended Address Space Descriptor", NULL, ACPI_OSI_FEATURE, 0}, /* * All "optional" feature group strings (features that are implemented * by the host) should be dynamically modified to VALID by the host via * AcpiInstallInterface or AcpiUpdateInterfaces. Such optional feature * group strings are set as INVALID by default here. */ {"Module Device", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0}, {"Processor Device", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0}, {"3.0 Thermal Model", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0}, {"3.0 _SCP Extensions", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0}, {"Processor Aggregator Device", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0} }; /******************************************************************************* * * FUNCTION: AcpiUtInitializeInterfaces * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Initialize the global _OSI supported interfaces list * ******************************************************************************/ ACPI_STATUS AcpiUtInitializeInterfaces ( void) { ACPI_STATUS Status; UINT32 i; Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { return (Status); } AcpiGbl_SupportedInterfaces = AcpiDefaultSupportedInterfaces; /* Link the static list of supported interfaces */ for (i = 0; i < (ACPI_ARRAY_LENGTH (AcpiDefaultSupportedInterfaces) - 1); i++) { AcpiDefaultSupportedInterfaces[i].Next = &AcpiDefaultSupportedInterfaces[(ACPI_SIZE) i + 1]; } AcpiOsReleaseMutex (AcpiGbl_OsiMutex); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtInterfaceTerminate * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Delete all interfaces in the global list. Sets * AcpiGbl_SupportedInterfaces to NULL. * ******************************************************************************/ ACPI_STATUS AcpiUtInterfaceTerminate ( void) { ACPI_STATUS Status; ACPI_INTERFACE_INFO *NextInterface; Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { return (Status); } NextInterface = AcpiGbl_SupportedInterfaces; while (NextInterface) { AcpiGbl_SupportedInterfaces = NextInterface->Next; if (NextInterface->Flags & ACPI_OSI_DYNAMIC) { /* Only interfaces added at runtime can be freed */ ACPI_FREE (NextInterface->Name); ACPI_FREE (NextInterface); } else { /* Interface is in static list. Reset it to invalid or valid. */ if (NextInterface->Flags & ACPI_OSI_DEFAULT_INVALID) { NextInterface->Flags |= ACPI_OSI_INVALID; } else { NextInterface->Flags &= ~ACPI_OSI_INVALID; } } NextInterface = AcpiGbl_SupportedInterfaces; } AcpiOsReleaseMutex (AcpiGbl_OsiMutex); return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtInstallInterface * * PARAMETERS: InterfaceName - The interface to install * * RETURN: Status * * DESCRIPTION: Install the interface into the global interface list. * Caller MUST hold AcpiGbl_OsiMutex * ******************************************************************************/ ACPI_STATUS AcpiUtInstallInterface ( ACPI_STRING InterfaceName) { ACPI_INTERFACE_INFO *InterfaceInfo; /* Allocate info block and space for the name string */ InterfaceInfo = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_INTERFACE_INFO)); if (!InterfaceInfo) { return (AE_NO_MEMORY); } InterfaceInfo->Name = ACPI_ALLOCATE_ZEROED (strlen (InterfaceName) + 1); if (!InterfaceInfo->Name) { ACPI_FREE (InterfaceInfo); return (AE_NO_MEMORY); } /* Initialize new info and insert at the head of the global list */ strcpy (InterfaceInfo->Name, InterfaceName); InterfaceInfo->Flags = ACPI_OSI_DYNAMIC; InterfaceInfo->Next = AcpiGbl_SupportedInterfaces; AcpiGbl_SupportedInterfaces = InterfaceInfo; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtRemoveInterface * * PARAMETERS: InterfaceName - The interface to remove * * RETURN: Status * * DESCRIPTION: Remove the interface from the global interface list. * Caller MUST hold AcpiGbl_OsiMutex * ******************************************************************************/ ACPI_STATUS AcpiUtRemoveInterface ( ACPI_STRING InterfaceName) { ACPI_INTERFACE_INFO *PreviousInterface; ACPI_INTERFACE_INFO *NextInterface; PreviousInterface = NextInterface = AcpiGbl_SupportedInterfaces; while (NextInterface) { if (!strcmp (InterfaceName, NextInterface->Name)) { /* * Found: name is in either the static list * or was added at runtime */ if (NextInterface->Flags & ACPI_OSI_DYNAMIC) { /* Interface was added dynamically, remove and free it */ if (PreviousInterface == NextInterface) { AcpiGbl_SupportedInterfaces = NextInterface->Next; } else { PreviousInterface->Next = NextInterface->Next; } ACPI_FREE (NextInterface->Name); ACPI_FREE (NextInterface); } else { /* * Interface is in static list. If marked invalid, then * it does not actually exist. Else, mark it invalid. */ if (NextInterface->Flags & ACPI_OSI_INVALID) { return (AE_NOT_EXIST); } NextInterface->Flags |= ACPI_OSI_INVALID; } return (AE_OK); } PreviousInterface = NextInterface; NextInterface = NextInterface->Next; } /* Interface was not found */ return (AE_NOT_EXIST); } /******************************************************************************* * * FUNCTION: AcpiUtUpdateInterfaces * * PARAMETERS: Action - Actions to be performed during the * update * * RETURN: Status * * DESCRIPTION: Update _OSI interface strings, disabling or enabling OS vendor * strings or/and feature group strings. * Caller MUST hold AcpiGbl_OsiMutex * ******************************************************************************/ ACPI_STATUS AcpiUtUpdateInterfaces ( UINT8 Action) { ACPI_INTERFACE_INFO *NextInterface; NextInterface = AcpiGbl_SupportedInterfaces; while (NextInterface) { if (((NextInterface->Flags & ACPI_OSI_FEATURE) && (Action & ACPI_FEATURE_STRINGS)) || (!(NextInterface->Flags & ACPI_OSI_FEATURE) && (Action & ACPI_VENDOR_STRINGS))) { if (Action & ACPI_DISABLE_INTERFACES) { /* Mark the interfaces as invalid */ NextInterface->Flags |= ACPI_OSI_INVALID; } else { /* Mark the interfaces as valid */ NextInterface->Flags &= ~ACPI_OSI_INVALID; } } NextInterface = NextInterface->Next; } return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtGetInterface * * PARAMETERS: InterfaceName - The interface to find * * RETURN: ACPI_INTERFACE_INFO if found. NULL if not found. * * DESCRIPTION: Search for the specified interface name in the global list. * Caller MUST hold AcpiGbl_OsiMutex * ******************************************************************************/ ACPI_INTERFACE_INFO * AcpiUtGetInterface ( ACPI_STRING InterfaceName) { ACPI_INTERFACE_INFO *NextInterface; NextInterface = AcpiGbl_SupportedInterfaces; while (NextInterface) { if (!strcmp (InterfaceName, NextInterface->Name)) { return (NextInterface); } NextInterface = NextInterface->Next; } return (NULL); } /******************************************************************************* * * FUNCTION: AcpiUtOsiImplementation * * PARAMETERS: WalkState - Current walk state * * RETURN: Status * Integer: TRUE (0) if input string is matched * FALSE (-1) if string is not matched * * DESCRIPTION: Implementation of the _OSI predefined control method. When * an invocation of _OSI is encountered in the system AML, * control is transferred to this function. * * (August 2016) * Note: _OSI is now defined to return "Ones" to indicate a match, for * compatibility with other ACPI implementations. On a 32-bit DSDT, Ones * is 0xFFFFFFFF. On a 64-bit DSDT, Ones is 0xFFFFFFFFFFFFFFFF * (ACPI_UINT64_MAX). * * This function always returns ACPI_UINT64_MAX for TRUE, and later code * will truncate this to 32 bits if necessary. * ******************************************************************************/ ACPI_STATUS AcpiUtOsiImplementation ( ACPI_WALK_STATE *WalkState) { ACPI_OPERAND_OBJECT *StringDesc; ACPI_OPERAND_OBJECT *ReturnDesc; ACPI_INTERFACE_INFO *InterfaceInfo; ACPI_INTERFACE_HANDLER InterfaceHandler; ACPI_STATUS Status; UINT64 ReturnValue; ACPI_FUNCTION_TRACE (UtOsiImplementation); /* Validate the string input argument (from the AML caller) */ StringDesc = WalkState->Arguments[0].Object; if (!StringDesc || (StringDesc->Common.Type != ACPI_TYPE_STRING)) { return_ACPI_STATUS (AE_TYPE); } /* Create a return object */ ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); if (!ReturnDesc) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Default return value is 0, NOT SUPPORTED */ ReturnValue = 0; Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { AcpiUtRemoveReference (ReturnDesc); return_ACPI_STATUS (Status); } /* Lookup the interface in the global _OSI list */ InterfaceInfo = AcpiUtGetInterface (StringDesc->String.Pointer); if (InterfaceInfo && !(InterfaceInfo->Flags & ACPI_OSI_INVALID)) { /* * The interface is supported. * Update the OsiData if necessary. We keep track of the latest * version of Windows that has been requested by the BIOS. */ if (InterfaceInfo->Value > AcpiGbl_OsiData) { AcpiGbl_OsiData = InterfaceInfo->Value; } ReturnValue = ACPI_UINT64_MAX; } AcpiOsReleaseMutex (AcpiGbl_OsiMutex); /* * Invoke an optional _OSI interface handler. The host OS may wish * to do some interface-specific handling. For example, warn about * certain interfaces or override the true/false support value. */ InterfaceHandler = AcpiGbl_InterfaceHandler; if (InterfaceHandler) { if (InterfaceHandler ( StringDesc->String.Pointer, (UINT32) ReturnValue)) { ReturnValue = ACPI_UINT64_MAX; } } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "ACPI: BIOS _OSI(\"%s\") is %ssupported\n", StringDesc->String.Pointer, ReturnValue == 0 ? "not " : "")); /* Complete the return object */ ReturnDesc->Integer.Value = ReturnValue; WalkState->ReturnDesc = ReturnDesc; return_ACPI_STATUS (AE_OK); } src/acpica/source/components/utilities/utownerid.c000066400000000000000000000336011465205512700227630ustar00rootroot00000000000000/******************************************************************************* * * Module Name: utownerid - Support for Table/Method Owner IDs * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utownerid") /******************************************************************************* * * FUNCTION: AcpiUtAllocateOwnerId * * PARAMETERS: OwnerId - Where the new owner ID is returned * * RETURN: Status * * DESCRIPTION: Allocate a table or method owner ID. The owner ID is used to * track objects created by the table or method, to be deleted * when the method exits or the table is unloaded. * ******************************************************************************/ ACPI_STATUS AcpiUtAllocateOwnerId ( ACPI_OWNER_ID *OwnerId) { UINT32 i; UINT32 j; UINT32 k; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (UtAllocateOwnerId); /* Guard against multiple allocations of ID to the same location */ if (*OwnerId) { ACPI_ERROR ((AE_INFO, "Owner ID [0x%3.3X] already exists", *OwnerId)); return_ACPI_STATUS (AE_ALREADY_EXISTS); } /* Mutex for the global ID mask */ Status = AcpiUtAcquireMutex (ACPI_MTX_CACHES); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Find a free owner ID, cycle through all possible IDs on repeated * allocations. (ACPI_NUM_OWNERID_MASKS + 1) because first index * may have to be scanned twice. */ for (i = 0, j = AcpiGbl_LastOwnerIdIndex; i < (ACPI_NUM_OWNERID_MASKS + 1); i++, j++) { if (j >= ACPI_NUM_OWNERID_MASKS) { j = 0; /* Wraparound to start of mask array */ } for (k = AcpiGbl_NextOwnerIdOffset; k < 32; k++) { if (AcpiGbl_OwnerIdMask[j] == ACPI_UINT32_MAX) { /* There are no free IDs in this mask */ break; } /* * Note: the UINT32 cast ensures that 1 is stored as a unsigned * integer. Omitting the cast may result in 1 being stored as an * int. Some compilers or runtime error detection may flag this as * an error. */ if (!(AcpiGbl_OwnerIdMask[j] & ((UINT32) 1 << k))) { /* * Found a free ID. The actual ID is the bit index plus one, * making zero an invalid Owner ID. Save this as the last ID * allocated and update the global ID mask. */ AcpiGbl_OwnerIdMask[j] |= ((UINT32) 1 << k); AcpiGbl_LastOwnerIdIndex = (UINT8) j; AcpiGbl_NextOwnerIdOffset = (UINT8) (k + 1); /* * Construct encoded ID from the index and bit position * * Note: Last [j].k (bit 4095) is never used and is marked * permanently allocated (prevents +1 overflow) */ *OwnerId = (ACPI_OWNER_ID) ((k + 1) + ACPI_MUL_32 (j)); ACPI_DEBUG_PRINT ((ACPI_DB_VALUES, "Allocated OwnerId: 0x%3.3X\n", (unsigned int) *OwnerId)); goto Exit; } } AcpiGbl_NextOwnerIdOffset = 0; } /* * All OwnerIds have been allocated. This typically should * not happen since the IDs are reused after deallocation. The IDs are * allocated upon table load (one per table) and method execution, and * they are released when a table is unloaded or a method completes * execution. * * If this error happens, there may be very deep nesting of invoked * control methods, or there may be a bug where the IDs are not released. */ Status = AE_OWNER_ID_LIMIT; ACPI_ERROR ((AE_INFO, "Could not allocate new OwnerId (4095 max), AE_OWNER_ID_LIMIT")); Exit: (void) AcpiUtReleaseMutex (ACPI_MTX_CACHES); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtReleaseOwnerId * * PARAMETERS: OwnerIdPtr - Pointer to a previously allocated OwnerID * * RETURN: None. No error is returned because we are either exiting a * control method or unloading a table. Either way, we would * ignore any error anyway. * * DESCRIPTION: Release a table or method owner ID. Valid IDs are 1 - 255 * ******************************************************************************/ void AcpiUtReleaseOwnerId ( ACPI_OWNER_ID *OwnerIdPtr) { ACPI_OWNER_ID OwnerId = *OwnerIdPtr; ACPI_STATUS Status; UINT32 Index; UINT32 Bit; ACPI_FUNCTION_TRACE_U32 (UtReleaseOwnerId, OwnerId); /* Always clear the input OwnerId (zero is an invalid ID) */ *OwnerIdPtr = 0; /* Zero is not a valid OwnerID */ if (OwnerId == 0) { ACPI_ERROR ((AE_INFO, "Invalid OwnerId: 0x%3.3X", OwnerId)); return_VOID; } /* Mutex for the global ID mask */ Status = AcpiUtAcquireMutex (ACPI_MTX_CACHES); if (ACPI_FAILURE (Status)) { return_VOID; } /* Normalize the ID to zero */ OwnerId--; /* Decode ID to index/offset pair */ Index = ACPI_DIV_32 (OwnerId); Bit = (UINT32) 1 << ACPI_MOD_32 (OwnerId); /* Free the owner ID only if it is valid */ if (AcpiGbl_OwnerIdMask[Index] & Bit) { AcpiGbl_OwnerIdMask[Index] ^= Bit; } else { ACPI_ERROR ((AE_INFO, "Attempted release of non-allocated OwnerId: 0x%3.3X", OwnerId + 1)); } (void) AcpiUtReleaseMutex (ACPI_MTX_CACHES); return_VOID; } src/acpica/source/components/utilities/utpredef.c000066400000000000000000000443441465205512700225670ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utpredef - support functions for predefined names * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acpredef.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utpredef") /* * Names for the types that can be returned by the predefined objects. * Used for warning messages. Must be in the same order as the ACPI_RTYPEs */ static const char *UtRtypeNames[] = { "/Integer", "/String", "/Buffer", "/Package", "/Reference", }; /******************************************************************************* * * FUNCTION: AcpiUtGetNextPredefinedMethod * * PARAMETERS: ThisName - Entry in the predefined method/name table * * RETURN: Pointer to next entry in predefined table. * * DESCRIPTION: Get the next entry in the predefine method table. Handles the * cases where a package info entry follows a method name that * returns a package. * ******************************************************************************/ const ACPI_PREDEFINED_INFO * AcpiUtGetNextPredefinedMethod ( const ACPI_PREDEFINED_INFO *ThisName) { /* * Skip next entry in the table if this name returns a Package * (next entry contains the package info) */ if ((ThisName->Info.ExpectedBtypes & ACPI_RTYPE_PACKAGE) && (ThisName->Info.ExpectedBtypes != ACPI_RTYPE_ALL)) { ThisName++; } ThisName++; return (ThisName); } /******************************************************************************* * * FUNCTION: AcpiUtMatchPredefinedMethod * * PARAMETERS: Name - Name to find * * RETURN: Pointer to entry in predefined table. NULL indicates not found. * * DESCRIPTION: Check an object name against the predefined object list. * ******************************************************************************/ const ACPI_PREDEFINED_INFO * AcpiUtMatchPredefinedMethod ( char *Name) { const ACPI_PREDEFINED_INFO *ThisName; /* Quick check for a predefined name, first character must be underscore */ if (Name[0] != '_') { return (NULL); } /* Search info table for a predefined method/object name */ ThisName = AcpiGbl_PredefinedMethods; while (ThisName->Info.Name[0]) { if (ACPI_COMPARE_NAMESEG (Name, ThisName->Info.Name)) { return (ThisName); } ThisName = AcpiUtGetNextPredefinedMethod (ThisName); } return (NULL); /* Not found */ } /******************************************************************************* * * FUNCTION: AcpiUtGetExpectedReturnTypes * * PARAMETERS: Buffer - Where the formatted string is returned * ExpectedBTypes - Bitfield of expected data types * * RETURN: Formatted string in Buffer. * * DESCRIPTION: Format the expected object types into a printable string. * ******************************************************************************/ void AcpiUtGetExpectedReturnTypes ( char *Buffer, UINT32 ExpectedBtypes) { UINT32 ThisRtype; UINT32 i; UINT32 j; if (!ExpectedBtypes) { strcpy (Buffer, "NONE"); return; } j = 1; Buffer[0] = 0; ThisRtype = ACPI_RTYPE_INTEGER; for (i = 0; i < ACPI_NUM_RTYPES; i++) { /* If one of the expected types, concatenate the name of this type */ if (ExpectedBtypes & ThisRtype) { strcat (Buffer, &UtRtypeNames[i][j]); j = 0; /* Use name separator from now on */ } ThisRtype <<= 1; /* Next Rtype */ } } /******************************************************************************* * * The remaining functions are used by iASL and AcpiHelp only * ******************************************************************************/ #if (defined ACPI_ASL_COMPILER || defined ACPI_HELP_APP) /* Local prototypes */ static UINT32 AcpiUtGetArgumentTypes ( char *Buffer, UINT16 ArgumentTypes); /* Types that can be returned externally by a predefined name */ static const char *UtExternalTypeNames[] = /* Indexed by ACPI_TYPE_* */ { ", Type_ANY", ", Integer", ", String", ", Buffer", ", Package" }; /* Bit widths for resource descriptor predefined names */ static const char *UtResourceTypeNames[] = { "/1", "/2", "/3", "/8", "/16", "/32", "/64", "/variable", }; /******************************************************************************* * * FUNCTION: AcpiUtMatchResourceName * * PARAMETERS: Name - Name to find * * RETURN: Pointer to entry in the resource table. NULL indicates not * found. * * DESCRIPTION: Check an object name against the predefined resource * descriptor object list. * ******************************************************************************/ const ACPI_PREDEFINED_INFO * AcpiUtMatchResourceName ( char *Name) { const ACPI_PREDEFINED_INFO *ThisName; /* * Quick check for a predefined name, first character must * be underscore */ if (Name[0] != '_') { return (NULL); } /* Search info table for a predefined method/object name */ ThisName = AcpiGbl_ResourceNames; while (ThisName->Info.Name[0]) { if (ACPI_COMPARE_NAMESEG (Name, ThisName->Info.Name)) { return (ThisName); } ThisName++; } return (NULL); /* Not found */ } /******************************************************************************* * * FUNCTION: AcpiUtDisplayPredefinedMethod * * PARAMETERS: Buffer - Scratch buffer for this function * ThisName - Entry in the predefined method/name table * MultiLine - TRUE if output should be on >1 line * * RETURN: None * * DESCRIPTION: Display information about a predefined method. Number and * type of the input arguments, and expected type(s) for the * return value, if any. * ******************************************************************************/ void AcpiUtDisplayPredefinedMethod ( char *Buffer, const ACPI_PREDEFINED_INFO *ThisName, BOOLEAN MultiLine) { UINT32 ArgCount; /* * Get the argument count and the string buffer * containing all argument types */ ArgCount = AcpiUtGetArgumentTypes (Buffer, ThisName->Info.ArgumentList); if (MultiLine) { printf (" "); } printf ("%4.4s Requires %s%u argument%s", ThisName->Info.Name, (ThisName->Info.ArgumentList & ARG_COUNT_IS_MINIMUM) ? "(at least) " : "", ArgCount, ArgCount != 1 ? "s" : ""); /* Display the types for any arguments */ if (ArgCount > 0) { printf (" (%s)", Buffer); } if (MultiLine) { printf ("\n "); } /* Get the return value type(s) allowed */ if (ThisName->Info.ExpectedBtypes) { AcpiUtGetExpectedReturnTypes (Buffer, ThisName->Info.ExpectedBtypes); printf (" Return value types: %s\n", Buffer); } else { printf (" No return value\n"); } } /******************************************************************************* * * FUNCTION: AcpiUtGetArgumentTypes * * PARAMETERS: Buffer - Where to return the formatted types * ArgumentTypes - Types field for this method * * RETURN: Count - the number of arguments required for this method * * DESCRIPTION: Format the required data types for this method (Integer, * String, Buffer, or Package) and return the required argument * count. * ******************************************************************************/ static UINT32 AcpiUtGetArgumentTypes ( char *Buffer, UINT16 ArgumentTypes) { UINT16 ThisArgumentType; UINT16 SubIndex; UINT16 ArgCount; UINT32 i; *Buffer = 0; SubIndex = 2; /* First field in the types list is the count of args to follow */ ArgCount = METHOD_GET_ARG_COUNT (ArgumentTypes); if (ArgCount > METHOD_PREDEF_ARGS_MAX) { printf ("**** Invalid argument count (%u) " "in predefined info structure\n", ArgCount); return (ArgCount); } /* Get each argument from the list, convert to ascii, store to buffer */ for (i = 0; i < ArgCount; i++) { ThisArgumentType = METHOD_GET_NEXT_TYPE (ArgumentTypes); if (ThisArgumentType > METHOD_MAX_ARG_TYPE) { printf ("**** Invalid argument type (%u) " "in predefined info structure\n", ThisArgumentType); return (ArgCount); } strcat (Buffer, UtExternalTypeNames[ThisArgumentType] + SubIndex); SubIndex = 0; } return (ArgCount); } /******************************************************************************* * * FUNCTION: AcpiUtGetResourceBitWidth * * PARAMETERS: Buffer - Where the formatted string is returned * Types - Bitfield of expected data types * * RETURN: Count of return types. Formatted string in Buffer. * * DESCRIPTION: Format the resource bit widths into a printable string. * ******************************************************************************/ UINT32 AcpiUtGetResourceBitWidth ( char *Buffer, UINT16 Types) { UINT32 i; UINT16 SubIndex; UINT32 Found; *Buffer = 0; SubIndex = 1; Found = 0; for (i = 0; i < NUM_RESOURCE_WIDTHS; i++) { if (Types & 1) { strcat (Buffer, &(UtResourceTypeNames[i][SubIndex])); SubIndex = 0; Found++; } Types >>= 1; } return (Found); } #endif src/acpica/source/components/utilities/utresdecode.c000066400000000000000000000340431465205512700232520ustar00rootroot00000000000000/******************************************************************************* * * Module Name: utresdecode - Resource descriptor keyword strings * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acresrc.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utresdecode") #if defined (ACPI_DEBUG_OUTPUT) || \ defined (ACPI_DISASSEMBLER) || \ defined (ACPI_DEBUGGER) /* * Strings used to decode resource descriptors. * Used by both the disassembler and the debugger resource dump routines */ const char *AcpiGbl_BmDecode[] = { "NotBusMaster", "BusMaster" }; const char *AcpiGbl_ConfigDecode[] = { "0 - Good Configuration", "1 - Acceptable Configuration", "2 - Suboptimal Configuration", "3 - ***Invalid Configuration***", }; const char *AcpiGbl_ConsumeDecode[] = { "ResourceProducer", "ResourceConsumer" }; const char *AcpiGbl_DecDecode[] = { "PosDecode", "SubDecode" }; const char *AcpiGbl_HeDecode[] = { "Level", "Edge" }; const char *AcpiGbl_IoDecode[] = { "Decode10", "Decode16" }; const char *AcpiGbl_LlDecode[] = { "ActiveHigh", "ActiveLow", "ActiveBoth", "Reserved" }; const char *AcpiGbl_MaxDecode[] = { "MaxNotFixed", "MaxFixed" }; const char *AcpiGbl_MemDecode[] = { "NonCacheable", "Cacheable", "WriteCombining", "Prefetchable" }; const char *AcpiGbl_MinDecode[] = { "MinNotFixed", "MinFixed" }; const char *AcpiGbl_MtpDecode[] = { "AddressRangeMemory", "AddressRangeReserved", "AddressRangeACPI", "AddressRangeNVS" }; const char *AcpiGbl_PhyDecode[] = { "Type C", "Type D", "Unknown Type", "Unknown Type" }; const char *AcpiGbl_RngDecode[] = { "InvalidRanges", "NonISAOnlyRanges", "ISAOnlyRanges", "EntireRange" }; const char *AcpiGbl_RwDecode[] = { "ReadOnly", "ReadWrite" }; const char *AcpiGbl_ShrDecode[] = { "Exclusive", "Shared", "ExclusiveAndWake", /* ACPI 5.0 */ "SharedAndWake" /* ACPI 5.0 */ }; const char *AcpiGbl_SizDecode[] = { "Transfer8", "Transfer8_16", "Transfer16", "InvalidSize" }; const char *AcpiGbl_TrsDecode[] = { "DenseTranslation", "SparseTranslation" }; const char *AcpiGbl_TtpDecode[] = { "TypeStatic", "TypeTranslation" }; const char *AcpiGbl_TypDecode[] = { "Compatibility", "TypeA", "TypeB", "TypeF" }; const char *AcpiGbl_PpcDecode[] = { "PullDefault", "PullUp", "PullDown", "PullNone" }; const char *AcpiGbl_IorDecode[] = { "IoRestrictionNone", "IoRestrictionInputOnly", "IoRestrictionOutputOnly", "IoRestrictionNoneAndPreserve" }; const char *AcpiGbl_DtsDecode[] = { "Width8bit", "Width16bit", "Width32bit", "Width64bit", "Width128bit", "Width256bit", }; /* GPIO connection type */ const char *AcpiGbl_CtDecode[] = { "Interrupt", "I/O" }; /* Serial bus type */ const char *AcpiGbl_SbtDecode[] = { "/* UNKNOWN serial bus type */", "I2C", "SPI", "UART", "CSI2" }; /* I2C serial bus access mode */ const char *AcpiGbl_AmDecode[] = { "AddressingMode7Bit", "AddressingMode10Bit" }; /* I2C serial bus slave mode */ const char *AcpiGbl_SmDecode[] = { "ControllerInitiated", "DeviceInitiated" }; /* SPI serial bus wire mode */ const char *AcpiGbl_WmDecode[] = { "FourWireMode", "ThreeWireMode" }; /* SPI serial clock phase */ const char *AcpiGbl_CphDecode[] = { "ClockPhaseFirst", "ClockPhaseSecond" }; /* SPI serial bus clock polarity */ const char *AcpiGbl_CpoDecode[] = { "ClockPolarityLow", "ClockPolarityHigh" }; /* SPI serial bus device polarity */ const char *AcpiGbl_DpDecode[] = { "PolarityLow", "PolarityHigh" }; /* UART serial bus endian */ const char *AcpiGbl_EdDecode[] = { "LittleEndian", "BigEndian" }; /* UART serial bus bits per byte */ const char *AcpiGbl_BpbDecode[] = { "DataBitsFive", "DataBitsSix", "DataBitsSeven", "DataBitsEight", "DataBitsNine", "/* UNKNOWN Bits per byte */", "/* UNKNOWN Bits per byte */", "/* UNKNOWN Bits per byte */" }; /* UART serial bus stop bits */ const char *AcpiGbl_SbDecode[] = { "StopBitsZero", "StopBitsOne", "StopBitsOnePlusHalf", "StopBitsTwo" }; /* UART serial bus flow control */ const char *AcpiGbl_FcDecode[] = { "FlowControlNone", "FlowControlHardware", "FlowControlXON", "/* UNKNOWN flow control keyword */" }; /* UART serial bus parity type */ const char *AcpiGbl_PtDecode[] = { "ParityTypeNone", "ParityTypeEven", "ParityTypeOdd", "ParityTypeMark", "ParityTypeSpace", "/* UNKNOWN parity keyword */", "/* UNKNOWN parity keyword */", "/* UNKNOWN parity keyword */" }; /* PinConfig type */ const char *AcpiGbl_PtypDecode[] = { "Default", "Bias Pull-up", "Bias Pull-down", "Bias Default", "Bias Disable", "Bias High Impedance", "Bias Bus Hold", "Drive Open Drain", "Drive Open Source", "Drive Push Pull", "Drive Strength", "Slew Rate", "Input Debounce", "Input Schmitt Trigger", }; const char *AcpiGbl_ClockInputMode[] = { "Fixed", "Variable", }; const char *AcpiGbl_ClockInputScale[] = { "Hz", "KHz", "MHz", }; #endif src/acpica/source/components/utilities/utresrc.c000066400000000000000000000642121465205512700224340ustar00rootroot00000000000000/******************************************************************************* * * Module Name: utresrc - Resource management utilities * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acresrc.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utresrc") /* * Base sizes of the raw AML resource descriptors, indexed by resource type. * Zero indicates a reserved (and therefore invalid) resource type. */ const UINT8 AcpiGbl_ResourceAmlSizes[] = { /* Small descriptors */ 0, 0, 0, 0, ACPI_AML_SIZE_SMALL (AML_RESOURCE_IRQ), ACPI_AML_SIZE_SMALL (AML_RESOURCE_DMA), ACPI_AML_SIZE_SMALL (AML_RESOURCE_START_DEPENDENT), ACPI_AML_SIZE_SMALL (AML_RESOURCE_END_DEPENDENT), ACPI_AML_SIZE_SMALL (AML_RESOURCE_IO), ACPI_AML_SIZE_SMALL (AML_RESOURCE_FIXED_IO), ACPI_AML_SIZE_SMALL (AML_RESOURCE_FIXED_DMA), 0, 0, 0, ACPI_AML_SIZE_SMALL (AML_RESOURCE_VENDOR_SMALL), ACPI_AML_SIZE_SMALL (AML_RESOURCE_END_TAG), /* Large descriptors */ 0, ACPI_AML_SIZE_LARGE (AML_RESOURCE_MEMORY24), ACPI_AML_SIZE_LARGE (AML_RESOURCE_GENERIC_REGISTER), 0, ACPI_AML_SIZE_LARGE (AML_RESOURCE_VENDOR_LARGE), ACPI_AML_SIZE_LARGE (AML_RESOURCE_MEMORY32), ACPI_AML_SIZE_LARGE (AML_RESOURCE_FIXED_MEMORY32), ACPI_AML_SIZE_LARGE (AML_RESOURCE_ADDRESS32), ACPI_AML_SIZE_LARGE (AML_RESOURCE_ADDRESS16), ACPI_AML_SIZE_LARGE (AML_RESOURCE_EXTENDED_IRQ), ACPI_AML_SIZE_LARGE (AML_RESOURCE_ADDRESS64), ACPI_AML_SIZE_LARGE (AML_RESOURCE_EXTENDED_ADDRESS64), ACPI_AML_SIZE_LARGE (AML_RESOURCE_GPIO), ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_FUNCTION), ACPI_AML_SIZE_LARGE (AML_RESOURCE_COMMON_SERIALBUS), ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_CONFIG), ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP), ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP_FUNCTION), ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP_CONFIG), ACPI_AML_SIZE_LARGE (AML_RESOURCE_CLOCK_INPUT), }; const UINT8 AcpiGbl_ResourceAmlSerialBusSizes[] = { 0, ACPI_AML_SIZE_LARGE (AML_RESOURCE_I2C_SERIALBUS), ACPI_AML_SIZE_LARGE (AML_RESOURCE_SPI_SERIALBUS), ACPI_AML_SIZE_LARGE (AML_RESOURCE_UART_SERIALBUS), ACPI_AML_SIZE_LARGE (AML_RESOURCE_CSI2_SERIALBUS), }; /* * Resource types, used to validate the resource length field. * The length of fixed-length types must match exactly, variable * lengths must meet the minimum required length, etc. * Zero indicates a reserved (and therefore invalid) resource type. */ static const UINT8 AcpiGbl_ResourceTypes[] = { /* Small descriptors */ 0, 0, 0, 0, ACPI_SMALL_VARIABLE_LENGTH, /* 04 IRQ */ ACPI_FIXED_LENGTH, /* 05 DMA */ ACPI_SMALL_VARIABLE_LENGTH, /* 06 StartDependentFunctions */ ACPI_FIXED_LENGTH, /* 07 EndDependentFunctions */ ACPI_FIXED_LENGTH, /* 08 IO */ ACPI_FIXED_LENGTH, /* 09 FixedIO */ ACPI_FIXED_LENGTH, /* 0A FixedDMA */ 0, 0, 0, ACPI_VARIABLE_LENGTH, /* 0E VendorShort */ ACPI_FIXED_LENGTH, /* 0F EndTag */ /* Large descriptors */ 0, ACPI_FIXED_LENGTH, /* 01 Memory24 */ ACPI_FIXED_LENGTH, /* 02 GenericRegister */ 0, ACPI_VARIABLE_LENGTH, /* 04 VendorLong */ ACPI_FIXED_LENGTH, /* 05 Memory32 */ ACPI_FIXED_LENGTH, /* 06 Memory32Fixed */ ACPI_VARIABLE_LENGTH, /* 07 Dword* address */ ACPI_VARIABLE_LENGTH, /* 08 Word* address */ ACPI_VARIABLE_LENGTH, /* 09 ExtendedIRQ */ ACPI_VARIABLE_LENGTH, /* 0A Qword* address */ ACPI_FIXED_LENGTH, /* 0B Extended* address */ ACPI_VARIABLE_LENGTH, /* 0C Gpio* */ ACPI_VARIABLE_LENGTH, /* 0D PinFunction */ ACPI_VARIABLE_LENGTH, /* 0E *SerialBus */ ACPI_VARIABLE_LENGTH, /* 0F PinConfig */ ACPI_VARIABLE_LENGTH, /* 10 PinGroup */ ACPI_VARIABLE_LENGTH, /* 11 PinGroupFunction */ ACPI_VARIABLE_LENGTH, /* 12 PinGroupConfig */ ACPI_VARIABLE_LENGTH, /* 13 ClockInput */ }; /******************************************************************************* * * FUNCTION: AcpiUtWalkAmlResources * * PARAMETERS: WalkState - Current walk info * PARAMETERS: Aml - Pointer to the raw AML resource template * AmlLength - Length of the entire template * UserFunction - Called once for each descriptor found. If * NULL, a pointer to the EndTag is returned * Context - Passed to UserFunction * * RETURN: Status * * DESCRIPTION: Walk a raw AML resource list(buffer). User function called * once for each resource found. * ******************************************************************************/ ACPI_STATUS AcpiUtWalkAmlResources ( ACPI_WALK_STATE *WalkState, UINT8 *Aml, ACPI_SIZE AmlLength, ACPI_WALK_AML_CALLBACK UserFunction, void **Context) { ACPI_STATUS Status; UINT8 *EndAml; UINT8 ResourceIndex; UINT32 Length; UINT32 Offset = 0; UINT8 EndTag[2] = {0x79, 0x00}; ACPI_FUNCTION_TRACE (UtWalkAmlResources); /* The absolute minimum resource template is one EndTag descriptor */ if (AmlLength < sizeof (AML_RESOURCE_END_TAG)) { return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG); } /* Point to the end of the resource template buffer */ EndAml = Aml + AmlLength; /* Walk the byte list, abort on any invalid descriptor type or length */ while (Aml < EndAml) { /* Validate the Resource Type and Resource Length */ Status = AcpiUtValidateResource (WalkState, Aml, &ResourceIndex); if (ACPI_FAILURE (Status)) { /* * Exit on failure. Cannot continue because the descriptor * length may be bogus also. */ return_ACPI_STATUS (Status); } /* Get the length of this descriptor */ Length = AcpiUtGetDescriptorLength (Aml); /* Invoke the user function */ if (UserFunction) { Status = UserFunction ( Aml, Length, Offset, ResourceIndex, Context); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } /* An EndTag descriptor terminates this resource template */ if (AcpiUtGetResourceType (Aml) == ACPI_RESOURCE_NAME_END_TAG) { /* * There must be at least one more byte in the buffer for * the 2nd byte of the EndTag */ if ((Aml + 1) >= EndAml) { return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG); } /* * Don't attempt to perform any validation on the 2nd byte. * Although all known ASL compilers insert a zero for the 2nd * byte, it can also be a checksum (as per the ACPI spec), * and this is occasionally seen in the field. July 2017. */ /* Return the pointer to the EndTag if requested */ if (!UserFunction) { *Context = Aml; } /* Normal exit */ return_ACPI_STATUS (AE_OK); } Aml += Length; Offset += Length; } /* Did not find an EndTag descriptor */ if (UserFunction) { /* Insert an EndTag anyway. AcpiRsGetListLength always leaves room */ (void) AcpiUtValidateResource (WalkState, EndTag, &ResourceIndex); Status = UserFunction (EndTag, 2, Offset, ResourceIndex, Context); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG); } /******************************************************************************* * * FUNCTION: AcpiUtValidateResource * * PARAMETERS: WalkState - Current walk info * Aml - Pointer to the raw AML resource descriptor * ReturnIndex - Where the resource index is returned. NULL * if the index is not required. * * RETURN: Status, and optionally the Index into the global resource tables * * DESCRIPTION: Validate an AML resource descriptor by checking the Resource * Type and Resource Length. Returns an index into the global * resource information/dispatch tables for later use. * ******************************************************************************/ ACPI_STATUS AcpiUtValidateResource ( ACPI_WALK_STATE *WalkState, void *Aml, UINT8 *ReturnIndex) { AML_RESOURCE *AmlResource; UINT8 ResourceType; UINT8 ResourceIndex; ACPI_RS_LENGTH ResourceLength; ACPI_RS_LENGTH MinimumResourceLength; ACPI_FUNCTION_ENTRY (); /* * 1) Validate the ResourceType field (Byte 0) */ ResourceType = ACPI_GET8 (Aml); /* * Byte 0 contains the descriptor name (Resource Type) * Examine the large/small bit in the resource header */ if (ResourceType & ACPI_RESOURCE_NAME_LARGE) { /* Verify the large resource type (name) against the max */ if (ResourceType > ACPI_RESOURCE_NAME_LARGE_MAX) { goto InvalidResource; } /* * Large Resource Type -- bits 6:0 contain the name * Translate range 0x80-0x8B to index range 0x10-0x1B */ ResourceIndex = (UINT8) (ResourceType - 0x70); } else { /* * Small Resource Type -- bits 6:3 contain the name * Shift range to index range 0x00-0x0F */ ResourceIndex = (UINT8) ((ResourceType & ACPI_RESOURCE_NAME_SMALL_MASK) >> 3); } /* * Check validity of the resource type, via AcpiGbl_ResourceTypes. * Zero indicates an invalid resource. */ if (!AcpiGbl_ResourceTypes[ResourceIndex]) { goto InvalidResource; } /* * Validate the ResourceLength field. This ensures that the length * is at least reasonable, and guarantees that it is non-zero. */ ResourceLength = AcpiUtGetResourceLength (Aml); MinimumResourceLength = AcpiGbl_ResourceAmlSizes[ResourceIndex]; /* Validate based upon the type of resource - fixed length or variable */ switch (AcpiGbl_ResourceTypes[ResourceIndex]) { case ACPI_FIXED_LENGTH: /* Fixed length resource, length must match exactly */ if (ResourceLength != MinimumResourceLength) { goto BadResourceLength; } break; case ACPI_VARIABLE_LENGTH: /* Variable length resource, length must be at least the minimum */ if (ResourceLength < MinimumResourceLength) { goto BadResourceLength; } break; case ACPI_SMALL_VARIABLE_LENGTH: /* Small variable length resource, length can be (Min) or (Min-1) */ if ((ResourceLength > MinimumResourceLength) || (ResourceLength < (MinimumResourceLength - 1))) { goto BadResourceLength; } break; default: /* Shouldn't happen (because of validation earlier), but be sure */ goto InvalidResource; } AmlResource = ACPI_CAST_PTR (AML_RESOURCE, Aml); if (ResourceType == ACPI_RESOURCE_NAME_SERIAL_BUS) { /* Avoid undefined behavior: member access within misaligned address */ AML_RESOURCE_COMMON_SERIALBUS CommonSerialBus; memcpy(&CommonSerialBus, AmlResource, sizeof(CommonSerialBus)); /* Validate the BusType field */ if ((CommonSerialBus.Type == 0) || (CommonSerialBus.Type > AML_RESOURCE_MAX_SERIALBUSTYPE)) { if (WalkState) { ACPI_ERROR ((AE_INFO, "Invalid/unsupported SerialBus resource descriptor: BusType 0x%2.2X", CommonSerialBus.Type)); } return (AE_AML_INVALID_RESOURCE_TYPE); } } /* Optionally return the resource table index */ if (ReturnIndex) { *ReturnIndex = ResourceIndex; } return (AE_OK); InvalidResource: if (WalkState) { ACPI_ERROR ((AE_INFO, "Invalid/unsupported resource descriptor: Type 0x%2.2X", ResourceType)); } return (AE_AML_INVALID_RESOURCE_TYPE); BadResourceLength: if (WalkState) { ACPI_ERROR ((AE_INFO, "Invalid resource descriptor length: Type " "0x%2.2X, Length 0x%4.4X, MinLength 0x%4.4X", ResourceType, ResourceLength, MinimumResourceLength)); } return (AE_AML_BAD_RESOURCE_LENGTH); } /******************************************************************************* * * FUNCTION: AcpiUtGetResourceType * * PARAMETERS: Aml - Pointer to the raw AML resource descriptor * * RETURN: The Resource Type with no extraneous bits (except the * Large/Small descriptor bit -- this is left alone) * * DESCRIPTION: Extract the Resource Type/Name from the first byte of * a resource descriptor. * ******************************************************************************/ UINT8 AcpiUtGetResourceType ( void *Aml) { ACPI_FUNCTION_ENTRY (); /* * Byte 0 contains the descriptor name (Resource Type) * Examine the large/small bit in the resource header */ if (ACPI_GET8 (Aml) & ACPI_RESOURCE_NAME_LARGE) { /* Large Resource Type -- bits 6:0 contain the name */ return (ACPI_GET8 (Aml)); } else { /* Small Resource Type -- bits 6:3 contain the name */ return ((UINT8) (ACPI_GET8 (Aml) & ACPI_RESOURCE_NAME_SMALL_MASK)); } } /******************************************************************************* * * FUNCTION: AcpiUtGetResourceLength * * PARAMETERS: Aml - Pointer to the raw AML resource descriptor * * RETURN: Byte Length * * DESCRIPTION: Get the "Resource Length" of a raw AML descriptor. By * definition, this does not include the size of the descriptor * header or the length field itself. * ******************************************************************************/ UINT16 AcpiUtGetResourceLength ( void *Aml) { ACPI_RS_LENGTH ResourceLength; ACPI_FUNCTION_ENTRY (); /* * Byte 0 contains the descriptor name (Resource Type) * Examine the large/small bit in the resource header */ if (ACPI_GET8 (Aml) & ACPI_RESOURCE_NAME_LARGE) { /* Large Resource type -- bytes 1-2 contain the 16-bit length */ ACPI_MOVE_16_TO_16 (&ResourceLength, ACPI_ADD_PTR (UINT8, Aml, 1)); } else { /* Small Resource type -- bits 2:0 of byte 0 contain the length */ ResourceLength = (UINT16) (ACPI_GET8 (Aml) & ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK); } return (ResourceLength); } /******************************************************************************* * * FUNCTION: AcpiUtGetResourceHeaderLength * * PARAMETERS: Aml - Pointer to the raw AML resource descriptor * * RETURN: Length of the AML header (depends on large/small descriptor) * * DESCRIPTION: Get the length of the header for this resource. * ******************************************************************************/ UINT8 AcpiUtGetResourceHeaderLength ( void *Aml) { ACPI_FUNCTION_ENTRY (); /* Examine the large/small bit in the resource header */ if (ACPI_GET8 (Aml) & ACPI_RESOURCE_NAME_LARGE) { return (sizeof (AML_RESOURCE_LARGE_HEADER)); } else { return (sizeof (AML_RESOURCE_SMALL_HEADER)); } } /******************************************************************************* * * FUNCTION: AcpiUtGetDescriptorLength * * PARAMETERS: Aml - Pointer to the raw AML resource descriptor * * RETURN: Byte length * * DESCRIPTION: Get the total byte length of a raw AML descriptor, including the * length of the descriptor header and the length field itself. * Used to walk descriptor lists. * ******************************************************************************/ UINT32 AcpiUtGetDescriptorLength ( void *Aml) { ACPI_FUNCTION_ENTRY (); /* * Get the Resource Length (does not include header length) and add * the header length (depends on if this is a small or large resource) */ return (AcpiUtGetResourceLength (Aml) + AcpiUtGetResourceHeaderLength (Aml)); } /******************************************************************************* * * FUNCTION: AcpiUtGetResourceEndTag * * PARAMETERS: ObjDesc - The resource template buffer object * EndTag - Where the pointer to the EndTag is returned * * RETURN: Status, pointer to the end tag * * DESCRIPTION: Find the EndTag resource descriptor in an AML resource template * Note: allows a buffer length of zero. * ******************************************************************************/ ACPI_STATUS AcpiUtGetResourceEndTag ( ACPI_OPERAND_OBJECT *ObjDesc, UINT8 **EndTag) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (UtGetResourceEndTag); /* Allow a buffer length of zero */ if (!ObjDesc->Buffer.Length) { *EndTag = ObjDesc->Buffer.Pointer; return_ACPI_STATUS (AE_OK); } /* Validate the template and get a pointer to the EndTag */ Status = AcpiUtWalkAmlResources (NULL, ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length, NULL, (void **) EndTag); return_ACPI_STATUS (Status); } src/acpica/source/components/utilities/utstate.c000066400000000000000000000364631465205512700224450ustar00rootroot00000000000000/******************************************************************************* * * Module Name: utstate - state object support procedures * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utstate") /******************************************************************************* * * FUNCTION: AcpiUtPushGenericState * * PARAMETERS: ListHead - Head of the state stack * State - State object to push * * RETURN: None * * DESCRIPTION: Push a state object onto a state stack * ******************************************************************************/ void AcpiUtPushGenericState ( ACPI_GENERIC_STATE **ListHead, ACPI_GENERIC_STATE *State) { ACPI_FUNCTION_ENTRY (); /* Push the state object onto the front of the list (stack) */ State->Common.Next = *ListHead; *ListHead = State; return; } /******************************************************************************* * * FUNCTION: AcpiUtPopGenericState * * PARAMETERS: ListHead - Head of the state stack * * RETURN: The popped state object * * DESCRIPTION: Pop a state object from a state stack * ******************************************************************************/ ACPI_GENERIC_STATE * AcpiUtPopGenericState ( ACPI_GENERIC_STATE **ListHead) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_ENTRY (); /* Remove the state object at the head of the list (stack) */ State = *ListHead; if (State) { /* Update the list head */ *ListHead = State->Common.Next; } return (State); } /******************************************************************************* * * FUNCTION: AcpiUtCreateGenericState * * PARAMETERS: None * * RETURN: The new state object. NULL on failure. * * DESCRIPTION: Create a generic state object. Attempt to obtain one from * the global state cache; If none available, create a new one. * ******************************************************************************/ ACPI_GENERIC_STATE * AcpiUtCreateGenericState ( void) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_ENTRY (); State = AcpiOsAcquireObject (AcpiGbl_StateCache); if (State) { /* Initialize */ State->Common.DescriptorType = ACPI_DESC_TYPE_STATE; } return (State); } /******************************************************************************* * * FUNCTION: AcpiUtCreateThreadState * * PARAMETERS: None * * RETURN: New Thread State. NULL on failure * * DESCRIPTION: Create a "Thread State" - a flavor of the generic state used * to track per-thread info during method execution * ******************************************************************************/ ACPI_THREAD_STATE * AcpiUtCreateThreadState ( void) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_ENTRY (); /* Create the generic state object */ State = AcpiUtCreateGenericState (); if (!State) { return (NULL); } /* Init fields specific to the update struct */ State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_THREAD; State->Thread.ThreadId = AcpiOsGetThreadId (); /* Check for invalid thread ID - zero is very bad, it will break things */ if (!State->Thread.ThreadId) { ACPI_ERROR ((AE_INFO, "Invalid zero ID from AcpiOsGetThreadId")); State->Thread.ThreadId = (ACPI_THREAD_ID) 1; } return ((ACPI_THREAD_STATE *) State); } /******************************************************************************* * * FUNCTION: AcpiUtCreateUpdateState * * PARAMETERS: Object - Initial Object to be installed in the state * Action - Update action to be performed * * RETURN: New state object, null on failure * * DESCRIPTION: Create an "Update State" - a flavor of the generic state used * to update reference counts and delete complex objects such * as packages. * ******************************************************************************/ ACPI_GENERIC_STATE * AcpiUtCreateUpdateState ( ACPI_OPERAND_OBJECT *Object, UINT16 Action) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_ENTRY (); /* Create the generic state object */ State = AcpiUtCreateGenericState (); if (!State) { return (NULL); } /* Init fields specific to the update struct */ State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_UPDATE; State->Update.Object = Object; State->Update.Value = Action; return (State); } /******************************************************************************* * * FUNCTION: AcpiUtCreatePkgState * * PARAMETERS: Object - Initial Object to be installed in the state * Action - Update action to be performed * * RETURN: New state object, null on failure * * DESCRIPTION: Create a "Package State" * ******************************************************************************/ ACPI_GENERIC_STATE * AcpiUtCreatePkgState ( void *InternalObject, void *ExternalObject, UINT32 Index) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_ENTRY (); /* Create the generic state object */ State = AcpiUtCreateGenericState (); if (!State) { return (NULL); } /* Init fields specific to the update struct */ State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_PACKAGE; State->Pkg.SourceObject = (ACPI_OPERAND_OBJECT *) InternalObject; State->Pkg.DestObject = ExternalObject; State->Pkg.Index= Index; State->Pkg.NumPackages = 1; return (State); } /******************************************************************************* * * FUNCTION: AcpiUtCreateControlState * * PARAMETERS: None * * RETURN: New state object, null on failure * * DESCRIPTION: Create a "Control State" - a flavor of the generic state used * to support nested IF/WHILE constructs in the AML. * ******************************************************************************/ ACPI_GENERIC_STATE * AcpiUtCreateControlState ( void) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_ENTRY (); /* Create the generic state object */ State = AcpiUtCreateGenericState (); if (!State) { return (NULL); } /* Init fields specific to the control struct */ State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_CONTROL; State->Common.State = ACPI_CONTROL_CONDITIONAL_EXECUTING; return (State); } /******************************************************************************* * * FUNCTION: AcpiUtDeleteGenericState * * PARAMETERS: State - The state object to be deleted * * RETURN: None * * DESCRIPTION: Release a state object to the state cache. NULL state objects * are ignored. * ******************************************************************************/ void AcpiUtDeleteGenericState ( ACPI_GENERIC_STATE *State) { ACPI_FUNCTION_ENTRY (); /* Ignore null state */ if (State) { (void) AcpiOsReleaseObject (AcpiGbl_StateCache, State); } return; } src/acpica/source/components/utilities/utstring.c000066400000000000000000000334641465205512700226310ustar00rootroot00000000000000/******************************************************************************* * * Module Name: utstring - Common functions for strings and characters * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utstring") /******************************************************************************* * * FUNCTION: AcpiUtPrintString * * PARAMETERS: String - Null terminated ASCII string * MaxLength - Maximum output length. Used to constrain the * length of strings during debug output only. * * RETURN: None * * DESCRIPTION: Dump an ASCII string with support for ACPI-defined escape * sequences. * ******************************************************************************/ void AcpiUtPrintString ( char *String, UINT16 MaxLength) { UINT32 i; if (!String) { AcpiOsPrintf ("<\"NULL STRING PTR\">"); return; } AcpiOsPrintf ("\""); for (i = 0; (i < MaxLength) && String[i]; i++) { /* Escape sequences */ switch (String[i]) { case 0x07: AcpiOsPrintf ("\\a"); /* BELL */ break; case 0x08: AcpiOsPrintf ("\\b"); /* BACKSPACE */ break; case 0x0C: AcpiOsPrintf ("\\f"); /* FORMFEED */ break; case 0x0A: AcpiOsPrintf ("\\n"); /* LINEFEED */ break; case 0x0D: AcpiOsPrintf ("\\r"); /* CARRIAGE RETURN*/ break; case 0x09: AcpiOsPrintf ("\\t"); /* HORIZONTAL TAB */ break; case 0x0B: AcpiOsPrintf ("\\v"); /* VERTICAL TAB */ break; case '\'': /* Single Quote */ case '\"': /* Double Quote */ case '\\': /* Backslash */ AcpiOsPrintf ("\\%c", (int) String[i]); break; default: /* Check for printable character or hex escape */ if (isprint ((int) String[i])) { /* This is a normal character */ AcpiOsPrintf ("%c", (int) String[i]); } else { /* All others will be Hex escapes */ AcpiOsPrintf ("\\x%2.2X", (INT32) String[i]); } break; } } AcpiOsPrintf ("\""); if (i == MaxLength && String[i]) { AcpiOsPrintf ("..."); } } /******************************************************************************* * * FUNCTION: AcpiUtRepairName * * PARAMETERS: Name - The ACPI name to be repaired * * RETURN: Repaired version of the name * * DESCRIPTION: Repair an ACPI name: Change invalid characters to '*' and * return the new name. NOTE: the Name parameter must reside in * read/write memory, cannot be a const. * * An ACPI Name must consist of valid ACPI characters. We will repair the name * if necessary because we don't want to abort because of this, but we want * all namespace names to be printable. A warning message is appropriate. * * This issue came up because there are in fact machines that exhibit * this problem, and we want to be able to enable ACPI support for them, * even though there are a few bad names. * ******************************************************************************/ void AcpiUtRepairName ( char *Name) { UINT32 i; BOOLEAN FoundBadChar = FALSE; UINT32 OriginalName; ACPI_FUNCTION_NAME (UtRepairName); /* * Special case for the root node. This can happen if we get an * error during the execution of module-level code. */ if (ACPI_COMPARE_NAMESEG (Name, ACPI_ROOT_PATHNAME)) { return; } ACPI_COPY_NAMESEG (&OriginalName, &Name[0]); /* Check each character in the name */ for (i = 0; i < ACPI_NAMESEG_SIZE; i++) { if (AcpiUtValidNameChar (Name[i], i)) { continue; } /* * Replace a bad character with something printable, yet technically * "odd". This prevents any collisions with existing "good" * names in the namespace. */ Name[i] = '_'; FoundBadChar = TRUE; } if (FoundBadChar) { /* Report warning only if in strict mode or debug mode */ if (!AcpiGbl_EnableInterpreterSlack) { ACPI_WARNING ((AE_INFO, "Invalid character(s) in name (0x%.8X) %p, repaired: [%4.4s]", OriginalName, Name, &Name[0])); } else { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Invalid character(s) in name (0x%.8X), repaired: [%4.4s]", OriginalName, Name)); } } } #if defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP /******************************************************************************* * * FUNCTION: UtConvertBackslashes * * PARAMETERS: Pathname - File pathname string to be converted * * RETURN: Modifies the input Pathname * * DESCRIPTION: Convert all backslashes (0x5C) to forward slashes (0x2F) within * the entire input file pathname string. * ******************************************************************************/ void UtConvertBackslashes ( char *Pathname) { if (!Pathname) { return; } while (*Pathname) { if (*Pathname == '\\') { *Pathname = '/'; } Pathname++; } } #endif src/acpica/source/components/utilities/utstrsuppt.c000066400000000000000000000545051465205512700232260ustar00rootroot00000000000000/******************************************************************************* * * Module Name: utstrsuppt - Support functions for string-to-integer conversion * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utstrsuppt") /* Local prototypes */ static ACPI_STATUS AcpiUtInsertDigit ( UINT64 *AccumulatedValue, UINT32 Base, int AsciiDigit); static ACPI_STATUS AcpiUtStrtoulMultiply64 ( UINT64 Multiplicand, UINT32 Base, UINT64 *OutProduct); static ACPI_STATUS AcpiUtStrtoulAdd64 ( UINT64 Addend1, UINT32 Digit, UINT64 *OutSum); /******************************************************************************* * * FUNCTION: AcpiUtConvertOctalString * * PARAMETERS: String - Null terminated input string * ReturnValuePtr - Where the converted value is returned * * RETURN: Status and 64-bit converted integer * * DESCRIPTION: Performs a base 8 conversion of the input string to an * integer value, either 32 or 64 bits. * * NOTE: Maximum 64-bit unsigned octal value is 01777777777777777777777 * Maximum 32-bit unsigned octal value is 037777777777 * ******************************************************************************/ ACPI_STATUS AcpiUtConvertOctalString ( char *String, UINT64 *ReturnValuePtr) { UINT64 AccumulatedValue = 0; ACPI_STATUS Status = AE_OK; /* Convert each ASCII byte in the input string */ while (*String) { /* * Character must be ASCII 0-7, otherwise: * 1) Runtime: terminate with no error, per the ACPI spec * 2) Compiler: return an error */ if (!(ACPI_IS_OCTAL_DIGIT (*String))) { #ifdef ACPI_ASL_COMPILER Status = AE_BAD_OCTAL_CONSTANT; #endif break; } /* Convert and insert this octal digit into the accumulator */ Status = AcpiUtInsertDigit (&AccumulatedValue, 8, *String); if (ACPI_FAILURE (Status)) { Status = AE_OCTAL_OVERFLOW; break; } String++; } /* Always return the value that has been accumulated */ *ReturnValuePtr = AccumulatedValue; return (Status); } /******************************************************************************* * * FUNCTION: AcpiUtConvertDecimalString * * PARAMETERS: String - Null terminated input string * ReturnValuePtr - Where the converted value is returned * * RETURN: Status and 64-bit converted integer * * DESCRIPTION: Performs a base 10 conversion of the input string to an * integer value, either 32 or 64 bits. * * NOTE: Maximum 64-bit unsigned decimal value is 18446744073709551615 * Maximum 32-bit unsigned decimal value is 4294967295 * ******************************************************************************/ ACPI_STATUS AcpiUtConvertDecimalString ( char *String, UINT64 *ReturnValuePtr) { UINT64 AccumulatedValue = 0; ACPI_STATUS Status = AE_OK; /* Convert each ASCII byte in the input string */ while (*String) { /* * Character must be ASCII 0-9, otherwise: * 1) Runtime: terminate with no error, per the ACPI spec * 2) Compiler: return an error */ if (!isdigit ((int) *String)) { #ifdef ACPI_ASL_COMPILER Status = AE_BAD_DECIMAL_CONSTANT; #endif break; } /* Convert and insert this decimal digit into the accumulator */ Status = AcpiUtInsertDigit (&AccumulatedValue, 10, *String); if (ACPI_FAILURE (Status)) { Status = AE_DECIMAL_OVERFLOW; break; } String++; } /* Always return the value that has been accumulated */ *ReturnValuePtr = AccumulatedValue; return (Status); } /******************************************************************************* * * FUNCTION: AcpiUtConvertHexString * * PARAMETERS: String - Null terminated input string * ReturnValuePtr - Where the converted value is returned * * RETURN: Status and 64-bit converted integer * * DESCRIPTION: Performs a base 16 conversion of the input string to an * integer value, either 32 or 64 bits. * * NOTE: Maximum 64-bit unsigned hex value is 0xFFFFFFFFFFFFFFFF * Maximum 32-bit unsigned hex value is 0xFFFFFFFF * ******************************************************************************/ ACPI_STATUS AcpiUtConvertHexString ( char *String, UINT64 *ReturnValuePtr) { UINT64 AccumulatedValue = 0; ACPI_STATUS Status = AE_OK; /* Convert each ASCII byte in the input string */ while (*String) { /* * Character must be ASCII A-F, a-f, or 0-9, otherwise: * 1) Runtime: terminate with no error, per the ACPI spec * 2) Compiler: return an error */ if (!isxdigit ((int) *String)) { #ifdef ACPI_ASL_COMPILER Status = AE_BAD_HEX_CONSTANT; #endif break; } /* Convert and insert this hex digit into the accumulator */ Status = AcpiUtInsertDigit (&AccumulatedValue, 16, *String); if (ACPI_FAILURE (Status)) { Status = AE_HEX_OVERFLOW; break; } String++; } /* Always return the value that has been accumulated */ *ReturnValuePtr = AccumulatedValue; return (Status); } /******************************************************************************* * * FUNCTION: AcpiUtRemoveLeadingZeros * * PARAMETERS: String - Pointer to input ASCII string * * RETURN: Next character after any leading zeros. This character may be * used by the caller to detect end-of-string. * * DESCRIPTION: Remove any leading zeros in the input string. Return the * next character after the final ASCII zero to enable the caller * to check for the end of the string (NULL terminator). * ******************************************************************************/ char AcpiUtRemoveLeadingZeros ( char **String) { while (**String == ACPI_ASCII_ZERO) { *String += 1; } return (**String); } /******************************************************************************* * * FUNCTION: AcpiUtRemoveWhitespace * * PARAMETERS: String - Pointer to input ASCII string * * RETURN: Next character after any whitespace. This character may be * used by the caller to detect end-of-string. * * DESCRIPTION: Remove any leading whitespace in the input string. Return the * next character after the final ASCII zero to enable the caller * to check for the end of the string (NULL terminator). * ******************************************************************************/ char AcpiUtRemoveWhitespace ( char **String) { while (isspace ((UINT8) **String)) { *String += 1; } return (**String); } /******************************************************************************* * * FUNCTION: AcpiUtDetectHexPrefix * * PARAMETERS: String - Pointer to input ASCII string * * RETURN: TRUE if a "0x" prefix was found at the start of the string * * DESCRIPTION: Detect and remove a hex "0x" prefix * ******************************************************************************/ BOOLEAN AcpiUtDetectHexPrefix ( char **String) { char *InitialPosition = *String; AcpiUtRemoveHexPrefix (String); if (*String != InitialPosition) { return (TRUE); /* String is past leading 0x */ } return (FALSE); /* Not a hex string */ } /******************************************************************************* * * FUNCTION: AcpiUtRemoveHexPrefix * * PARAMETERS: String - Pointer to input ASCII string * * RETURN: none * * DESCRIPTION: Remove a hex "0x" prefix * ******************************************************************************/ void AcpiUtRemoveHexPrefix ( char **String) { if ((**String == ACPI_ASCII_ZERO) && (tolower ((int) *(*String + 1)) == 'x')) { *String += 2; /* Go past the leading 0x */ } } /******************************************************************************* * * FUNCTION: AcpiUtDetectOctalPrefix * * PARAMETERS: String - Pointer to input ASCII string * * RETURN: True if an octal "0" prefix was found at the start of the * string * * DESCRIPTION: Detect and remove an octal prefix (zero) * ******************************************************************************/ BOOLEAN AcpiUtDetectOctalPrefix ( char **String) { if (**String == ACPI_ASCII_ZERO) { *String += 1; /* Go past the leading 0 */ return (TRUE); } return (FALSE); /* Not an octal string */ } /******************************************************************************* * * FUNCTION: AcpiUtInsertDigit * * PARAMETERS: AccumulatedValue - Current value of the integer value * accumulator. The new value is * returned here. * Base - Radix, either 8/10/16 * AsciiDigit - ASCII single digit to be inserted * * RETURN: Status and result of the convert/insert operation. The only * possible returned exception code is numeric overflow of * either the multiply or add conversion operations. * * DESCRIPTION: Generic conversion and insertion function for all bases: * * 1) Multiply the current accumulated/converted value by the * base in order to make room for the new character. * * 2) Convert the new character to binary and add it to the * current accumulated value. * * Note: The only possible exception indicates an integer * overflow (AE_NUMERIC_OVERFLOW) * ******************************************************************************/ static ACPI_STATUS AcpiUtInsertDigit ( UINT64 *AccumulatedValue, UINT32 Base, int AsciiDigit) { ACPI_STATUS Status; UINT64 Product; /* Make room in the accumulated value for the incoming digit */ Status = AcpiUtStrtoulMultiply64 (*AccumulatedValue, Base, &Product); if (ACPI_FAILURE (Status)) { return (Status); } /* Add in the new digit, and store the sum to the accumulated value */ Status = AcpiUtStrtoulAdd64 (Product, AcpiUtAsciiCharToHex (AsciiDigit), AccumulatedValue); return (Status); } /******************************************************************************* * * FUNCTION: AcpiUtStrtoulMultiply64 * * PARAMETERS: Multiplicand - Current accumulated converted integer * Base - Base/Radix * OutProduct - Where the product is returned * * RETURN: Status and 64-bit product * * DESCRIPTION: Multiply two 64-bit values, with checking for 64-bit overflow as * well as 32-bit overflow if necessary (if the current global * integer width is 32). * ******************************************************************************/ static ACPI_STATUS AcpiUtStrtoulMultiply64 ( UINT64 Multiplicand, UINT32 Base, UINT64 *OutProduct) { UINT64 Product; UINT64 Quotient; /* Exit if either operand is zero */ *OutProduct = 0; if (!Multiplicand || !Base) { return (AE_OK); } /* * Check for 64-bit overflow before the actual multiplication. * * Notes: 64-bit division is often not supported on 32-bit platforms * (it requires a library function), Therefore ACPICA has a local * 64-bit divide function. Also, Multiplier is currently only used * as the radix (8/10/16), to the 64/32 divide will always work. */ AcpiUtShortDivide (ACPI_UINT64_MAX, Base, &Quotient, NULL); if (Multiplicand > Quotient) { return (AE_NUMERIC_OVERFLOW); } Product = Multiplicand * Base; /* Check for 32-bit overflow if necessary */ if ((AcpiGbl_IntegerBitWidth == 32) && (Product > ACPI_UINT32_MAX)) { return (AE_NUMERIC_OVERFLOW); } *OutProduct = Product; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtStrtoulAdd64 * * PARAMETERS: Addend1 - Current accumulated converted integer * Digit - New hex value/char * OutSum - Where sum is returned (Accumulator) * * RETURN: Status and 64-bit sum * * DESCRIPTION: Add two 64-bit values, with checking for 64-bit overflow as * well as 32-bit overflow if necessary (if the current global * integer width is 32). * ******************************************************************************/ static ACPI_STATUS AcpiUtStrtoulAdd64 ( UINT64 Addend1, UINT32 Digit, UINT64 *OutSum) { UINT64 Sum; /* Check for 64-bit overflow before the actual addition */ if ((Addend1 > 0) && (Digit > (ACPI_UINT64_MAX - Addend1))) { return (AE_NUMERIC_OVERFLOW); } Sum = Addend1 + Digit; /* Check for 32-bit overflow if necessary */ if ((AcpiGbl_IntegerBitWidth == 32) && (Sum > ACPI_UINT32_MAX)) { return (AE_NUMERIC_OVERFLOW); } *OutSum = Sum; return (AE_OK); } src/acpica/source/components/utilities/utstrtoul64.c000066400000000000000000000500671465205512700232070ustar00rootroot00000000000000/******************************************************************************* * * Module Name: utstrtoul64 - String-to-integer conversion support for both * 64-bit and 32-bit integers * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utstrtoul64") /******************************************************************************* * * This module contains the top-level string to 64/32-bit unsigned integer * conversion functions: * * 1) A standard strtoul() function that supports 64-bit integers, base * 8/10/16, with integer overflow support. This is used mainly by the * iASL compiler, which implements tighter constraints on integer * constants than the runtime (interpreter) integer-to-string conversions. * 2) Runtime "Explicit conversion" as defined in the ACPI specification. * 3) Runtime "Implicit conversion" as defined in the ACPI specification. * * Current users of this module: * * iASL - Preprocessor (constants and math expressions) * iASL - Main parser, conversion of constants to integers * iASL - Data Table Compiler parser (constants and math expressions) * Interpreter - Implicit and explicit conversions, GPE method names * Interpreter - Repair code for return values from predefined names * Debugger - Command line input string conversion * AcpiDump - ACPI table physical addresses * AcpiExec - Support for namespace overrides * * Notes concerning users of these interfaces: * * AcpiGbl_IntegerByteWidth is used to set the 32/64 bit limit for explicit * and implicit conversions. This global must be set to the proper width. * For the core ACPICA code, the width depends on the DSDT version. For the * AcpiUtStrtoul64 interface, all conversions are 64 bits. This interface is * used primarily for iASL, where the default width is 64 bits for all parsers, * but error checking is performed later to flag cases where a 64-bit constant * is wrongly defined in a 32-bit DSDT/SSDT. * * In ACPI, the only place where octal numbers are supported is within * the ASL language itself. This is implemented via the main AcpiUtStrtoul64 * interface. According the ACPI specification, there is no ACPI runtime * support (explicit/implicit) for octal string conversions. * ******************************************************************************/ /******************************************************************************* * * FUNCTION: AcpiUtStrtoul64 * * PARAMETERS: String - Null terminated input string, * must be a valid pointer * ReturnValue - Where the converted integer is * returned. Must be a valid pointer * * RETURN: Status and converted integer. Returns an exception on a * 64-bit numeric overflow * * DESCRIPTION: Convert a string into an unsigned integer. Always performs a * full 64-bit conversion, regardless of the current global * integer width. Supports Decimal, Hex, and Octal strings. * * Current users of this function: * * iASL - Preprocessor (constants and math expressions) * iASL - Main ASL parser, conversion of ASL constants to integers * iASL - Data Table Compiler parser (constants and math expressions) * Interpreter - Repair code for return values from predefined names * AcpiDump - ACPI table physical addresses * AcpiExec - Support for namespace overrides * ******************************************************************************/ ACPI_STATUS AcpiUtStrtoul64 ( char *String, UINT64 *ReturnValue) { ACPI_STATUS Status = AE_OK; UINT8 OriginalBitWidth; UINT32 Base = 10; /* Default is decimal */ ACPI_FUNCTION_TRACE_STR (UtStrtoul64, String); *ReturnValue = 0; /* A NULL return string returns a value of zero */ if (*String == 0) { return_ACPI_STATUS (AE_OK); } if (!AcpiUtRemoveWhitespace (&String)) { return_ACPI_STATUS (AE_OK); } /* * 1) Check for a hex constant. A "0x" prefix indicates base 16. */ if (AcpiUtDetectHexPrefix (&String)) { Base = 16; } /* * 2) Check for an octal constant, defined to be a leading zero * followed by sequence of octal digits (0-7) */ else if (AcpiUtDetectOctalPrefix (&String)) { Base = 8; } if (!AcpiUtRemoveLeadingZeros (&String)) { return_ACPI_STATUS (AE_OK); /* Return value 0 */ } /* * Force a full 64-bit conversion. The caller (usually iASL) must * check for a 32-bit overflow later as necessary (If current mode * is 32-bit, meaning a 32-bit DSDT). */ OriginalBitWidth = AcpiGbl_IntegerBitWidth; AcpiGbl_IntegerBitWidth = 64; /* * Perform the base 8, 10, or 16 conversion. A 64-bit numeric overflow * will return an exception (to allow iASL to flag the statement). */ switch (Base) { case 8: Status = AcpiUtConvertOctalString (String, ReturnValue); break; case 10: Status = AcpiUtConvertDecimalString (String, ReturnValue); break; case 16: default: Status = AcpiUtConvertHexString (String, ReturnValue); break; } /* Only possible exception from above is a 64-bit overflow */ AcpiGbl_IntegerBitWidth = OriginalBitWidth; return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtImplicitStrtoul64 * * PARAMETERS: String - Null terminated input string, * must be a valid pointer * * RETURN: Converted integer * * DESCRIPTION: Perform a 64-bit conversion with restrictions placed upon * an "implicit conversion" by the ACPI specification. Used by * many ASL operators that require an integer operand, and support * an automatic (implicit) conversion from a string operand * to the final integer operand. The major restriction is that * only hex strings are supported. * * ----------------------------------------------------------------------------- * * Base is always 16, either with or without the 0x prefix. Decimal and * Octal strings are not supported, as per the ACPI specification. * * Examples (both are hex values): * Add ("BA98", Arg0, Local0) * Subtract ("0x12345678", Arg1, Local1) * * Conversion rules as extracted from the ACPI specification: * * The converted integer is initialized to the value zero. * The ASCII string is always interpreted as a hexadecimal constant. * * 1) According to the ACPI specification, a "0x" prefix is not allowed. * However, ACPICA allows this as an ACPI extension on general * principle. (NO ERROR) * * 2) The conversion terminates when the size of an integer is reached * (32 or 64 bits). There are no numeric overflow conditions. (NO ERROR) * * 3) The first non-hex character terminates the conversion and returns * the current accumulated value of the converted integer (NO ERROR). * * 4) Conversion of a null (zero-length) string to an integer is * technically not allowed. However, ACPICA allows this as an ACPI * extension. The conversion returns the value 0. (NO ERROR) * * NOTE: There are no error conditions returned by this function. At * the minimum, a value of zero is returned. * * Current users of this function: * * Interpreter - All runtime implicit conversions, as per ACPI specification * iASL - Data Table Compiler parser (constants and math expressions) * ******************************************************************************/ UINT64 AcpiUtImplicitStrtoul64 ( char *String) { UINT64 ConvertedInteger = 0; ACPI_FUNCTION_TRACE_STR (UtImplicitStrtoul64, String); if (!AcpiUtRemoveWhitespace (&String)) { return_VALUE (0); } /* * Per the ACPI specification, only hexadecimal is supported for * implicit conversions, and the "0x" prefix is "not allowed". * However, allow a "0x" prefix as an ACPI extension. */ AcpiUtRemoveHexPrefix (&String); if (!AcpiUtRemoveLeadingZeros (&String)) { return_VALUE (0); } /* * Ignore overflow as per the ACPI specification. This is implemented by * ignoring the return status from the conversion function called below. * On overflow, the input string is simply truncated. */ AcpiUtConvertHexString (String, &ConvertedInteger); return_VALUE (ConvertedInteger); } /******************************************************************************* * * FUNCTION: AcpiUtExplicitStrtoul64 * * PARAMETERS: String - Null terminated input string, * must be a valid pointer * * RETURN: Converted integer * * DESCRIPTION: Perform a 64-bit conversion with the restrictions placed upon * an "explicit conversion" by the ACPI specification. The * main restriction is that only hex and decimal are supported. * * ----------------------------------------------------------------------------- * * Base is either 10 (default) or 16 (with 0x prefix). Octal (base 8) strings * are not supported, as per the ACPI specification. * * Examples: * ToInteger ("1000") Decimal * ToInteger ("0xABCD") Hex * * Conversion rules as extracted from the ACPI specification: * * 1) The input string is either a decimal or hexadecimal numeric string. * A hex value must be prefixed by "0x" or it is interpreted as decimal. * * 2) The value must not exceed the maximum of an integer value * (32 or 64 bits). The ACPI specification states the behavior is * "unpredictable", so ACPICA matches the behavior of the implicit * conversion case. There are no numeric overflow conditions. (NO ERROR) * * 3) Behavior on the first non-hex character is not defined by the ACPI * specification (for the ToInteger operator), so ACPICA matches the * behavior of the implicit conversion case. It terminates the * conversion and returns the current accumulated value of the converted * integer. (NO ERROR) * * 4) Conversion of a null (zero-length) string to an integer is * technically not allowed. However, ACPICA allows this as an ACPI * extension. The conversion returns the value 0. (NO ERROR) * * NOTE: There are no error conditions returned by this function. At the * minimum, a value of zero is returned. * * Current users of this function: * * Interpreter - Runtime ASL ToInteger operator, as per the ACPI specification * ******************************************************************************/ UINT64 AcpiUtExplicitStrtoul64 ( char *String) { UINT64 ConvertedInteger = 0; UINT32 Base = 10; /* Default is decimal */ ACPI_FUNCTION_TRACE_STR (UtExplicitStrtoul64, String); if (!AcpiUtRemoveWhitespace (&String)) { return_VALUE (0); } /* * Only Hex and Decimal are supported, as per the ACPI specification. * A "0x" prefix indicates hex; otherwise decimal is assumed. */ if (AcpiUtDetectHexPrefix (&String)) { Base = 16; } if (!AcpiUtRemoveLeadingZeros (&String)) { return_VALUE (0); } /* * Ignore overflow as per the ACPI specification. This is implemented by * ignoring the return status from the conversion functions called below. * On overflow, the input string is simply truncated. */ switch (Base) { case 10: default: AcpiUtConvertDecimalString (String, &ConvertedInteger); break; case 16: AcpiUtConvertHexString (String, &ConvertedInteger); break; } return_VALUE (ConvertedInteger); } src/acpica/source/components/utilities/uttrack.c000066400000000000000000000713531465205512700224260ustar00rootroot00000000000000/****************************************************************************** * * Module Name: uttrack - Memory allocation tracking routines (debug only) * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ /* * These procedures are used for tracking memory leaks in the subsystem, and * they get compiled out when the ACPI_DBG_TRACK_ALLOCATIONS is not set. * * Each memory allocation is tracked via a doubly linked list. Each * element contains the caller's component, module name, function name, and * line number. AcpiUtAllocate and AcpiUtAllocateZeroed call * AcpiUtTrackAllocation to add an element to the list; deletion * occurs in the body of AcpiUtFree. */ #include "acpi.h" #include "accommon.h" #ifdef ACPI_DBG_TRACK_ALLOCATIONS #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("uttrack") /* Local prototypes */ static ACPI_DEBUG_MEM_BLOCK * AcpiUtFindAllocation ( ACPI_DEBUG_MEM_BLOCK *Allocation); static ACPI_STATUS AcpiUtTrackAllocation ( ACPI_DEBUG_MEM_BLOCK *Address, ACPI_SIZE Size, UINT8 AllocType, UINT32 Component, const char *Module, UINT32 Line); static ACPI_STATUS AcpiUtRemoveAllocation ( ACPI_DEBUG_MEM_BLOCK *Address, UINT32 Component, const char *Module, UINT32 Line); /******************************************************************************* * * FUNCTION: AcpiUtCreateList * * PARAMETERS: CacheName - Ascii name for the cache * ObjectSize - Size of each cached object * ReturnCache - Where the new cache object is returned * * RETURN: Status * * DESCRIPTION: Create a local memory list for tracking purposed * ******************************************************************************/ ACPI_STATUS AcpiUtCreateList ( const char *ListName, UINT16 ObjectSize, ACPI_MEMORY_LIST **ReturnCache) { ACPI_MEMORY_LIST *Cache; Cache = AcpiOsAllocateZeroed (sizeof (ACPI_MEMORY_LIST)); if (!Cache) { return (AE_NO_MEMORY); } Cache->ListName = ListName; Cache->ObjectSize = ObjectSize; *ReturnCache = Cache; return (AE_OK); } /******************************************************************************* * * FUNCTION: AcpiUtAllocateAndTrack * * PARAMETERS: Size - Size of the allocation * Component - Component type of caller * Module - Source file name of caller * Line - Line number of caller * * RETURN: Address of the allocated memory on success, NULL on failure. * * DESCRIPTION: The subsystem's equivalent of malloc. * ******************************************************************************/ void * AcpiUtAllocateAndTrack ( ACPI_SIZE Size, UINT32 Component, const char *Module, UINT32 Line) { ACPI_DEBUG_MEM_BLOCK *Allocation; ACPI_STATUS Status; /* Check for an inadvertent size of zero bytes */ if (!Size) { ACPI_WARNING ((Module, Line, "Attempt to allocate zero bytes, allocating 1 byte")); Size = 1; } Allocation = AcpiOsAllocate (Size + sizeof (ACPI_DEBUG_MEM_HEADER)); if (!Allocation) { /* Report allocation error */ ACPI_WARNING ((Module, Line, "Could not allocate size %u", (UINT32) Size)); return (NULL); } Status = AcpiUtTrackAllocation ( Allocation, Size, ACPI_MEM_MALLOC, Component, Module, Line); if (ACPI_FAILURE (Status)) { AcpiOsFree (Allocation); return (NULL); } AcpiGbl_GlobalList->TotalAllocated++; AcpiGbl_GlobalList->TotalSize += (UINT32) Size; AcpiGbl_GlobalList->CurrentTotalSize += (UINT32) Size; if (AcpiGbl_GlobalList->CurrentTotalSize > AcpiGbl_GlobalList->MaxOccupied) { AcpiGbl_GlobalList->MaxOccupied = AcpiGbl_GlobalList->CurrentTotalSize; } return ((void *) &Allocation->UserSpace); } /******************************************************************************* * * FUNCTION: AcpiUtAllocateZeroedAndTrack * * PARAMETERS: Size - Size of the allocation * Component - Component type of caller * Module - Source file name of caller * Line - Line number of caller * * RETURN: Address of the allocated memory on success, NULL on failure. * * DESCRIPTION: Subsystem equivalent of calloc. * ******************************************************************************/ void * AcpiUtAllocateZeroedAndTrack ( ACPI_SIZE Size, UINT32 Component, const char *Module, UINT32 Line) { ACPI_DEBUG_MEM_BLOCK *Allocation; ACPI_STATUS Status; /* Check for an inadvertent size of zero bytes */ if (!Size) { ACPI_WARNING ((Module, Line, "Attempt to allocate zero bytes, allocating 1 byte")); Size = 1; } Allocation = AcpiOsAllocateZeroed ( Size + sizeof (ACPI_DEBUG_MEM_HEADER)); if (!Allocation) { /* Report allocation error */ ACPI_ERROR ((Module, Line, "Could not allocate size %u", (UINT32) Size)); return (NULL); } Status = AcpiUtTrackAllocation (Allocation, Size, ACPI_MEM_CALLOC, Component, Module, Line); if (ACPI_FAILURE (Status)) { AcpiOsFree (Allocation); return (NULL); } AcpiGbl_GlobalList->TotalAllocated++; AcpiGbl_GlobalList->TotalSize += (UINT32) Size; AcpiGbl_GlobalList->CurrentTotalSize += (UINT32) Size; if (AcpiGbl_GlobalList->CurrentTotalSize > AcpiGbl_GlobalList->MaxOccupied) { AcpiGbl_GlobalList->MaxOccupied = AcpiGbl_GlobalList->CurrentTotalSize; } return ((void *) &Allocation->UserSpace); } /******************************************************************************* * * FUNCTION: AcpiUtFreeAndTrack * * PARAMETERS: Allocation - Address of the memory to deallocate * Component - Component type of caller * Module - Source file name of caller * Line - Line number of caller * * RETURN: None * * DESCRIPTION: Frees the memory at Allocation * ******************************************************************************/ void AcpiUtFreeAndTrack ( void *Allocation, UINT32 Component, const char *Module, UINT32 Line) { ACPI_DEBUG_MEM_BLOCK *DebugBlock; ACPI_STATUS Status; ACPI_FUNCTION_TRACE_PTR (UtFree, Allocation); if (NULL == Allocation) { ACPI_ERROR ((Module, Line, "Attempt to delete a NULL address")); return_VOID; } DebugBlock = ACPI_CAST_PTR (ACPI_DEBUG_MEM_BLOCK, (((char *) Allocation) - sizeof (ACPI_DEBUG_MEM_HEADER))); AcpiGbl_GlobalList->TotalFreed++; AcpiGbl_GlobalList->CurrentTotalSize -= DebugBlock->Size; Status = AcpiUtRemoveAllocation (DebugBlock, Component, Module, Line); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not free memory")); } AcpiOsFree (DebugBlock); ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "%p freed (block %p)\n", Allocation, DebugBlock)); return_VOID; } /******************************************************************************* * * FUNCTION: AcpiUtFindAllocation * * PARAMETERS: Allocation - Address of allocated memory * * RETURN: Three cases: * 1) List is empty, NULL is returned. * 2) Element was found. Returns Allocation parameter. * 3) Element was not found. Returns position where it should be * inserted into the list. * * DESCRIPTION: Searches for an element in the global allocation tracking list. * If the element is not found, returns the location within the * list where the element should be inserted. * * Note: The list is ordered by larger-to-smaller addresses. * * This global list is used to detect memory leaks in ACPICA as * well as other issues such as an attempt to release the same * internal object more than once. Although expensive as far * as cpu time, this list is much more helpful for finding these * types of issues than using memory leak detectors outside of * the ACPICA code. * ******************************************************************************/ static ACPI_DEBUG_MEM_BLOCK * AcpiUtFindAllocation ( ACPI_DEBUG_MEM_BLOCK *Allocation) { ACPI_DEBUG_MEM_BLOCK *Element; Element = AcpiGbl_GlobalList->ListHead; if (!Element) { return (NULL); } /* * Search for the address. * * Note: List is ordered by larger-to-smaller addresses, on the * assumption that a new allocation usually has a larger address * than previous allocations. */ while (Element > Allocation) { /* Check for end-of-list */ if (!Element->Next) { return (Element); } Element = Element->Next; } if (Element == Allocation) { return (Element); } return (Element->Previous); } /******************************************************************************* * * FUNCTION: AcpiUtTrackAllocation * * PARAMETERS: Allocation - Address of allocated memory * Size - Size of the allocation * AllocType - MEM_MALLOC or MEM_CALLOC * Component - Component type of caller * Module - Source file name of caller * Line - Line number of caller * * RETURN: Status * * DESCRIPTION: Inserts an element into the global allocation tracking list. * ******************************************************************************/ static ACPI_STATUS AcpiUtTrackAllocation ( ACPI_DEBUG_MEM_BLOCK *Allocation, ACPI_SIZE Size, UINT8 AllocType, UINT32 Component, const char *Module, UINT32 Line) { ACPI_MEMORY_LIST *MemList; ACPI_DEBUG_MEM_BLOCK *Element; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE_PTR (UtTrackAllocation, Allocation); if (AcpiGbl_DisableMemTracking) { return_ACPI_STATUS (AE_OK); } MemList = AcpiGbl_GlobalList; Status = AcpiUtAcquireMutex (ACPI_MTX_MEMORY); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Search the global list for this address to make sure it is not * already present. This will catch several kinds of problems. */ Element = AcpiUtFindAllocation (Allocation); if (Element == Allocation) { ACPI_ERROR ((AE_INFO, "UtTrackAllocation: Allocation (%p) already present in global list!", Allocation)); goto UnlockAndExit; } /* Fill in the instance data */ Allocation->Size = (UINT32) Size; Allocation->AllocType = AllocType; Allocation->Component = Component; Allocation->Line = Line; AcpiUtSafeStrncpy (Allocation->Module, (char *) Module, ACPI_MAX_MODULE_NAME); if (!Element) { /* Insert at list head */ if (MemList->ListHead) { ((ACPI_DEBUG_MEM_BLOCK *)(MemList->ListHead))->Previous = Allocation; } Allocation->Next = MemList->ListHead; Allocation->Previous = NULL; MemList->ListHead = Allocation; } else { /* Insert after element */ Allocation->Next = Element->Next; Allocation->Previous = Element; if (Element->Next) { (Element->Next)->Previous = Allocation; } Element->Next = Allocation; } UnlockAndExit: Status = AcpiUtReleaseMutex (ACPI_MTX_MEMORY); return_ACPI_STATUS (Status); } /******************************************************************************* * * FUNCTION: AcpiUtRemoveAllocation * * PARAMETERS: Allocation - Address of allocated memory * Component - Component type of caller * Module - Source file name of caller * Line - Line number of caller * * RETURN: Status * * DESCRIPTION: Deletes an element from the global allocation tracking list. * ******************************************************************************/ static ACPI_STATUS AcpiUtRemoveAllocation ( ACPI_DEBUG_MEM_BLOCK *Allocation, UINT32 Component, const char *Module, UINT32 Line) { ACPI_MEMORY_LIST *MemList; ACPI_STATUS Status; ACPI_FUNCTION_NAME (UtRemoveAllocation); if (AcpiGbl_DisableMemTracking) { return (AE_OK); } MemList = AcpiGbl_GlobalList; if (NULL == MemList->ListHead) { /* No allocations! */ ACPI_ERROR ((Module, Line, "Empty allocation list, nothing to free!")); return (AE_OK); } Status = AcpiUtAcquireMutex (ACPI_MTX_MEMORY); if (ACPI_FAILURE (Status)) { return (Status); } /* Unlink */ if (Allocation->Previous) { (Allocation->Previous)->Next = Allocation->Next; } else { MemList->ListHead = Allocation->Next; } if (Allocation->Next) { (Allocation->Next)->Previous = Allocation->Previous; } ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Freeing %p, size 0%X\n", &Allocation->UserSpace, Allocation->Size)); /* Mark the segment as deleted */ memset (&Allocation->UserSpace, 0xEA, Allocation->Size); Status = AcpiUtReleaseMutex (ACPI_MTX_MEMORY); return (Status); } /******************************************************************************* * * FUNCTION: AcpiUtDumpAllocationInfo * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Print some info about the outstanding allocations. * ******************************************************************************/ void AcpiUtDumpAllocationInfo ( void) { /* ACPI_MEMORY_LIST *MemList; */ ACPI_FUNCTION_TRACE (UtDumpAllocationInfo); /* ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, ("%30s: %4d (%3d Kb)\n", "Current allocations", MemList->CurrentCount, ROUND_UP_TO_1K (MemList->CurrentSize))); ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, ("%30s: %4d (%3d Kb)\n", "Max concurrent allocations", MemList->MaxConcurrentCount, ROUND_UP_TO_1K (MemList->MaxConcurrentSize))); ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, ("%30s: %4d (%3d Kb)\n", "Total (all) internal objects", RunningObjectCount, ROUND_UP_TO_1K (RunningObjectSize))); ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, ("%30s: %4d (%3d Kb)\n", "Total (all) allocations", RunningAllocCount, ROUND_UP_TO_1K (RunningAllocSize))); ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, ("%30s: %4d (%3d Kb)\n", "Current Nodes", AcpiGbl_CurrentNodeCount, ROUND_UP_TO_1K (AcpiGbl_CurrentNodeSize))); ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, ("%30s: %4d (%3d Kb)\n", "Max Nodes", AcpiGbl_MaxConcurrentNodeCount, ROUND_UP_TO_1K ((AcpiGbl_MaxConcurrentNodeCount * sizeof (ACPI_NAMESPACE_NODE))))); */ return_VOID; } /******************************************************************************* * * FUNCTION: AcpiUtDumpAllocations * * PARAMETERS: Component - Component(s) to dump info for. * Module - Module to dump info for. NULL means all. * * RETURN: None * * DESCRIPTION: Print a list of all outstanding allocations. * ******************************************************************************/ void AcpiUtDumpAllocations ( UINT32 Component, const char *Module) { ACPI_DEBUG_MEM_BLOCK *Element; ACPI_DESCRIPTOR *Descriptor; UINT32 NumOutstanding = 0; UINT8 DescriptorType; ACPI_FUNCTION_TRACE (UtDumpAllocations); if (AcpiGbl_DisableMemTracking) { return_VOID; } /* * Walk the allocation list. */ if (ACPI_FAILURE (AcpiUtAcquireMutex (ACPI_MTX_MEMORY))) { return_VOID; } if (!AcpiGbl_GlobalList) { goto Exit; } Element = AcpiGbl_GlobalList->ListHead; while (Element) { if ((Element->Component & Component) && ((Module == NULL) || (0 == strcmp (Module, Element->Module)))) { Descriptor = ACPI_CAST_PTR ( ACPI_DESCRIPTOR, &Element->UserSpace); if (Element->Size < sizeof (ACPI_COMMON_DESCRIPTOR)) { AcpiOsPrintf ("%p Length 0x%04X %9.9s-%4.4u " "[Not a Descriptor - too small]\n", Descriptor, Element->Size, Element->Module, Element->Line); } else { /* Ignore allocated objects that are in a cache */ if (ACPI_GET_DESCRIPTOR_TYPE (Descriptor) != ACPI_DESC_TYPE_CACHED) { AcpiOsPrintf ("%p Length 0x%04X %9.9s-%4.4u [%s] ", Descriptor, Element->Size, Element->Module, Element->Line, AcpiUtGetDescriptorName (Descriptor)); /* Optional object hex dump */ if (AcpiGbl_VerboseLeakDump) { AcpiOsPrintf ("\n"); AcpiUtDumpBuffer ((UINT8 *) Descriptor, Element->Size, DB_BYTE_DISPLAY, 0); } /* Validate the descriptor type using Type field and length */ DescriptorType = 0; /* Not a valid descriptor type */ switch (ACPI_GET_DESCRIPTOR_TYPE (Descriptor)) { case ACPI_DESC_TYPE_OPERAND: if (Element->Size == sizeof (ACPI_OPERAND_OBJECT)) { DescriptorType = ACPI_DESC_TYPE_OPERAND; } break; case ACPI_DESC_TYPE_PARSER: if (Element->Size == sizeof (ACPI_PARSE_OBJECT)) { DescriptorType = ACPI_DESC_TYPE_PARSER; } break; case ACPI_DESC_TYPE_NAMED: if (Element->Size == sizeof (ACPI_NAMESPACE_NODE)) { DescriptorType = ACPI_DESC_TYPE_NAMED; } break; default: break; } /* Display additional info for the major descriptor types */ switch (DescriptorType) { case ACPI_DESC_TYPE_OPERAND: AcpiOsPrintf ("%12.12s RefCount 0x%04X\n", AcpiUtGetTypeName (Descriptor->Object.Common.Type), Descriptor->Object.Common.ReferenceCount); break; case ACPI_DESC_TYPE_PARSER: AcpiOsPrintf ("AmlOpcode 0x%04X\n", Descriptor->Op.Asl.AmlOpcode); break; case ACPI_DESC_TYPE_NAMED: AcpiOsPrintf ("%4.4s\n", AcpiUtGetNodeName (&Descriptor->Node)); break; default: AcpiOsPrintf ( "\n"); break; } } } NumOutstanding++; } Element = Element->Next; } Exit: (void) AcpiUtReleaseMutex (ACPI_MTX_MEMORY); /* Print summary */ if (!NumOutstanding) { ACPI_INFO (("No outstanding allocations")); } else { ACPI_ERROR ((AE_INFO, "%u (0x%X) Outstanding cache allocations", NumOutstanding, NumOutstanding)); } return_VOID; } #endif /* ACPI_DBG_TRACK_ALLOCATIONS */ src/acpica/source/components/utilities/utuuid.c000066400000000000000000000263221465205512700222640ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utuuid -- UUID support functions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("utuuid") #if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP || defined ACPI_HELP_APP) /* * UUID support functions. * * This table is used to convert an input UUID ascii string to a 16 byte * buffer and the reverse. The table maps a UUID buffer index 0-15 to * the index within the 36-byte UUID string where the associated 2-byte * hex value can be found. * * 36-byte UUID strings are of the form: * aabbccdd-eeff-gghh-iijj-kkllmmnnoopp * Where aa-pp are one byte hex numbers, made up of two hex digits * * Note: This table is basically the inverse of the string-to-offset table * found in the ACPI spec in the description of the ToUUID macro. */ const UINT8 AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH] = { 6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34 }; /******************************************************************************* * * FUNCTION: AcpiUtConvertStringToUuid * * PARAMETERS: InString - 36-byte formatted UUID string * UuidBuffer - Where the 16-byte UUID buffer is returned * * RETURN: None. Output data is returned in the UuidBuffer * * DESCRIPTION: Convert a 36-byte formatted UUID string to 16-byte UUID buffer * ******************************************************************************/ void AcpiUtConvertStringToUuid ( char *InString, UINT8 *UuidBuffer) { UINT32 i; for (i = 0; i < UUID_BUFFER_LENGTH; i++) { UuidBuffer[i] = (AcpiUtAsciiCharToHex ( InString[AcpiGbl_MapToUuidOffset[i]]) << 4); UuidBuffer[i] |= AcpiUtAsciiCharToHex ( InString[AcpiGbl_MapToUuidOffset[i] + 1]); } } /******************************************************************************* * * FUNCTION: AcpiUtConvertUuidToString * * PARAMETERS: UuidBuffer - 16-byte UUID buffer * OutString - 36-byte formatted UUID string * * RETURN: Status * * DESCRIPTION: Convert 16-byte UUID buffer to 36-byte formatted UUID string * OutString must be 37 bytes to include null terminator. * ******************************************************************************/ ACPI_STATUS AcpiUtConvertUuidToString ( char *UuidBuffer, char *OutString) { UINT32 i; if (!UuidBuffer || !OutString) { return (AE_BAD_PARAMETER); } for (i = 0; i < UUID_BUFFER_LENGTH; i++) { OutString[AcpiGbl_MapToUuidOffset[i]] = AcpiUtHexToAsciiChar (UuidBuffer[i], 4); OutString[AcpiGbl_MapToUuidOffset[i] + 1] = AcpiUtHexToAsciiChar (UuidBuffer[i], 0); } /* Insert required hyphens (dashes) */ OutString[UUID_HYPHEN1_OFFSET] = OutString[UUID_HYPHEN2_OFFSET] = OutString[UUID_HYPHEN3_OFFSET] = OutString[UUID_HYPHEN4_OFFSET] = '-'; OutString[UUID_STRING_LENGTH] = 0; /* Null terminate */ return (AE_OK); } #endif src/acpica/source/components/utilities/utxface.c000066400000000000000000000567241465205512700224150ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utxface - External interfaces, miscellaneous utility functions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #include "acdebug.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utxface") /******************************************************************************* * * FUNCTION: AcpiTerminate * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Shutdown the ACPICA subsystem and release all resources. * ******************************************************************************/ ACPI_STATUS ACPI_INIT_FUNCTION AcpiTerminate ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiTerminate); /* Shutdown and free all resources */ AcpiUtSubsystemShutdown (); /* Free the mutex objects */ AcpiUtMutexTerminate (); /* Now we can shutdown the OS-dependent layer */ Status = AcpiOsTerminate (); return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL_INIT (AcpiTerminate) #ifndef ACPI_ASL_COMPILER /******************************************************************************* * * FUNCTION: AcpiSubsystemStatus * * PARAMETERS: None * * RETURN: Status of the ACPI subsystem * * DESCRIPTION: Other drivers that use the ACPI subsystem should call this * before making any other calls, to ensure the subsystem * initialized successfully. * ******************************************************************************/ ACPI_STATUS AcpiSubsystemStatus ( void) { if (AcpiGbl_StartupFlags & ACPI_INITIALIZED_OK) { return (AE_OK); } else { return (AE_ERROR); } } ACPI_EXPORT_SYMBOL (AcpiSubsystemStatus) /******************************************************************************* * * FUNCTION: AcpiGetSystemInfo * * PARAMETERS: OutBuffer - A buffer to receive the resources for the * device * * RETURN: Status - the status of the call * * DESCRIPTION: This function is called to get information about the current * state of the ACPI subsystem. It will return system information * in the OutBuffer. * * If the function fails an appropriate status will be returned * and the value of OutBuffer is undefined. * ******************************************************************************/ ACPI_STATUS AcpiGetSystemInfo ( ACPI_BUFFER *OutBuffer) { ACPI_SYSTEM_INFO *InfoPtr; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiGetSystemInfo); /* Parameter validation */ Status = AcpiUtValidateBuffer (OutBuffer); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* Validate/Allocate/Clear caller buffer */ Status = AcpiUtInitializeBuffer (OutBuffer, sizeof (ACPI_SYSTEM_INFO)); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Populate the return buffer */ InfoPtr = (ACPI_SYSTEM_INFO *) OutBuffer->Pointer; InfoPtr->AcpiCaVersion = ACPI_CA_VERSION; /* System flags (ACPI capabilities) */ InfoPtr->Flags = ACPI_SYS_MODE_ACPI; /* Timer resolution - 24 or 32 bits */ if (AcpiGbl_FADT.Flags & ACPI_FADT_32BIT_TIMER) { InfoPtr->TimerResolution = 24; } else { InfoPtr->TimerResolution = 32; } /* Clear the reserved fields */ InfoPtr->Reserved1 = 0; InfoPtr->Reserved2 = 0; /* Current debug levels */ InfoPtr->DebugLayer = AcpiDbgLayer; InfoPtr->DebugLevel = AcpiDbgLevel; return_ACPI_STATUS (AE_OK); } ACPI_EXPORT_SYMBOL (AcpiGetSystemInfo) /******************************************************************************* * * FUNCTION: AcpiGetStatistics * * PARAMETERS: Stats - Where the statistics are returned * * RETURN: Status - the status of the call * * DESCRIPTION: Get the contents of the various system counters * ******************************************************************************/ ACPI_STATUS AcpiGetStatistics ( ACPI_STATISTICS *Stats) { ACPI_FUNCTION_TRACE (AcpiGetStatistics); /* Parameter validation */ if (!Stats) { return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Various interrupt-based event counters */ Stats->SciCount = AcpiSciCount; Stats->GpeCount = AcpiGpeCount; memcpy (Stats->FixedEventCount, AcpiFixedEventCount, sizeof (AcpiFixedEventCount)); /* Other counters */ Stats->MethodCount = AcpiMethodCount; return_ACPI_STATUS (AE_OK); } ACPI_EXPORT_SYMBOL (AcpiGetStatistics) /***************************************************************************** * * FUNCTION: AcpiInstallInitializationHandler * * PARAMETERS: Handler - Callback procedure * Function - Not (currently) used, see below * * RETURN: Status * * DESCRIPTION: Install an initialization handler * * TBD: When a second function is added, must save the Function also. * ****************************************************************************/ ACPI_STATUS AcpiInstallInitializationHandler ( ACPI_INIT_HANDLER Handler, UINT32 Function) { if (!Handler) { return (AE_BAD_PARAMETER); } if (AcpiGbl_InitHandler) { return (AE_ALREADY_EXISTS); } AcpiGbl_InitHandler = Handler; return (AE_OK); } ACPI_EXPORT_SYMBOL (AcpiInstallInitializationHandler) /***************************************************************************** * * FUNCTION: AcpiPurgeCachedObjects * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Empty all caches (delete the cached objects) * ****************************************************************************/ ACPI_STATUS AcpiPurgeCachedObjects ( void) { ACPI_FUNCTION_TRACE (AcpiPurgeCachedObjects); (void) AcpiOsPurgeCache (AcpiGbl_StateCache); (void) AcpiOsPurgeCache (AcpiGbl_OperandCache); (void) AcpiOsPurgeCache (AcpiGbl_PsNodeCache); (void) AcpiOsPurgeCache (AcpiGbl_PsNodeExtCache); return_ACPI_STATUS (AE_OK); } ACPI_EXPORT_SYMBOL (AcpiPurgeCachedObjects) /***************************************************************************** * * FUNCTION: AcpiInstallInterface * * PARAMETERS: InterfaceName - The interface to install * * RETURN: Status * * DESCRIPTION: Install an _OSI interface to the global list * ****************************************************************************/ ACPI_STATUS AcpiInstallInterface ( ACPI_STRING InterfaceName) { ACPI_STATUS Status; ACPI_INTERFACE_INFO *InterfaceInfo; /* Parameter validation */ if (!InterfaceName || (strlen (InterfaceName) == 0)) { return (AE_BAD_PARAMETER); } Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { return (Status); } /* Check if the interface name is already in the global list */ InterfaceInfo = AcpiUtGetInterface (InterfaceName); if (InterfaceInfo) { /* * The interface already exists in the list. This is OK if the * interface has been marked invalid -- just clear the bit. */ if (InterfaceInfo->Flags & ACPI_OSI_INVALID) { InterfaceInfo->Flags &= ~ACPI_OSI_INVALID; Status = AE_OK; } else { Status = AE_ALREADY_EXISTS; } } else { /* New interface name, install into the global list */ Status = AcpiUtInstallInterface (InterfaceName); } AcpiOsReleaseMutex (AcpiGbl_OsiMutex); return (Status); } ACPI_EXPORT_SYMBOL (AcpiInstallInterface) /***************************************************************************** * * FUNCTION: AcpiRemoveInterface * * PARAMETERS: InterfaceName - The interface to remove * * RETURN: Status * * DESCRIPTION: Remove an _OSI interface from the global list * ****************************************************************************/ ACPI_STATUS AcpiRemoveInterface ( ACPI_STRING InterfaceName) { ACPI_STATUS Status; /* Parameter validation */ if (!InterfaceName || (strlen (InterfaceName) == 0)) { return (AE_BAD_PARAMETER); } Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { return (Status); } Status = AcpiUtRemoveInterface (InterfaceName); AcpiOsReleaseMutex (AcpiGbl_OsiMutex); return (Status); } ACPI_EXPORT_SYMBOL (AcpiRemoveInterface) /***************************************************************************** * * FUNCTION: AcpiInstallInterfaceHandler * * PARAMETERS: Handler - The _OSI interface handler to install * NULL means "remove existing handler" * * RETURN: Status * * DESCRIPTION: Install a handler for the predefined _OSI ACPI method. * invoked during execution of the internal implementation of * _OSI. A NULL handler simply removes any existing handler. * ****************************************************************************/ ACPI_STATUS AcpiInstallInterfaceHandler ( ACPI_INTERFACE_HANDLER Handler) { ACPI_STATUS Status; Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { return (Status); } if (Handler && AcpiGbl_InterfaceHandler) { Status = AE_ALREADY_EXISTS; } else { AcpiGbl_InterfaceHandler = Handler; } AcpiOsReleaseMutex (AcpiGbl_OsiMutex); return (Status); } ACPI_EXPORT_SYMBOL (AcpiInstallInterfaceHandler) /***************************************************************************** * * FUNCTION: AcpiUpdateInterfaces * * PARAMETERS: Action - Actions to be performed during the * update * * RETURN: Status * * DESCRIPTION: Update _OSI interface strings, disabling or enabling OS vendor * string or/and feature group strings. * ****************************************************************************/ ACPI_STATUS AcpiUpdateInterfaces ( UINT8 Action) { ACPI_STATUS Status; Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { return (Status); } Status = AcpiUtUpdateInterfaces (Action); AcpiOsReleaseMutex (AcpiGbl_OsiMutex); return (Status); } /***************************************************************************** * * FUNCTION: AcpiCheckAddressRange * * PARAMETERS: SpaceId - Address space ID * Address - Start address * Length - Length * Warn - TRUE if warning on overlap desired * * RETURN: Count of the number of conflicts detected. * * DESCRIPTION: Check if the input address range overlaps any of the * ASL operation region address ranges. * ****************************************************************************/ UINT32 AcpiCheckAddressRange ( ACPI_ADR_SPACE_TYPE SpaceId, ACPI_PHYSICAL_ADDRESS Address, ACPI_SIZE Length, BOOLEAN Warn) { UINT32 Overlaps; ACPI_STATUS Status; Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (Status)) { return (0); } Overlaps = AcpiUtCheckAddressRange (SpaceId, Address, (UINT32) Length, Warn); (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); return (Overlaps); } ACPI_EXPORT_SYMBOL (AcpiCheckAddressRange) #endif /* !ACPI_ASL_COMPILER */ /******************************************************************************* * * FUNCTION: AcpiDecodePldBuffer * * PARAMETERS: InBuffer - Buffer returned by _PLD method * Length - Length of the InBuffer * ReturnBuffer - Where the decode buffer is returned * * RETURN: Status and the decoded _PLD buffer. User must deallocate * the buffer via ACPI_FREE. * * DESCRIPTION: Decode the bit-packed buffer returned by the _PLD method into * a local struct that is much more useful to an ACPI driver. * ******************************************************************************/ ACPI_STATUS AcpiDecodePldBuffer ( UINT8 *InBuffer, ACPI_SIZE Length, ACPI_PLD_INFO **ReturnBuffer) { ACPI_PLD_INFO *PldInfo; UINT32 *Buffer = ACPI_CAST_PTR (UINT32, InBuffer); UINT32 Dword; /* Parameter validation */ if (!InBuffer || !ReturnBuffer || (Length < ACPI_PLD_REV1_BUFFER_SIZE)) { return (AE_BAD_PARAMETER); } PldInfo = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PLD_INFO)); if (!PldInfo) { return (AE_NO_MEMORY); } /* First 32-bit DWord */ ACPI_MOVE_32_TO_32 (&Dword, &Buffer[0]); PldInfo->Revision = ACPI_PLD_GET_REVISION (&Dword); PldInfo->IgnoreColor = ACPI_PLD_GET_IGNORE_COLOR (&Dword); PldInfo->Red = ACPI_PLD_GET_RED (&Dword); PldInfo->Green = ACPI_PLD_GET_GREEN (&Dword); PldInfo->Blue = ACPI_PLD_GET_BLUE (&Dword); /* Second 32-bit DWord */ ACPI_MOVE_32_TO_32 (&Dword, &Buffer[1]); PldInfo->Width = ACPI_PLD_GET_WIDTH (&Dword); PldInfo->Height = ACPI_PLD_GET_HEIGHT(&Dword); /* Third 32-bit DWord */ ACPI_MOVE_32_TO_32 (&Dword, &Buffer[2]); PldInfo->UserVisible = ACPI_PLD_GET_USER_VISIBLE (&Dword); PldInfo->Dock = ACPI_PLD_GET_DOCK (&Dword); PldInfo->Lid = ACPI_PLD_GET_LID (&Dword); PldInfo->Panel = ACPI_PLD_GET_PANEL (&Dword); PldInfo->VerticalPosition = ACPI_PLD_GET_VERTICAL (&Dword); PldInfo->HorizontalPosition = ACPI_PLD_GET_HORIZONTAL (&Dword); PldInfo->Shape = ACPI_PLD_GET_SHAPE (&Dword); PldInfo->GroupOrientation = ACPI_PLD_GET_ORIENTATION (&Dword); PldInfo->GroupToken = ACPI_PLD_GET_TOKEN (&Dword); PldInfo->GroupPosition = ACPI_PLD_GET_POSITION (&Dword); PldInfo->Bay = ACPI_PLD_GET_BAY (&Dword); /* Fourth 32-bit DWord */ ACPI_MOVE_32_TO_32 (&Dword, &Buffer[3]); PldInfo->Ejectable = ACPI_PLD_GET_EJECTABLE (&Dword); PldInfo->OspmEjectRequired = ACPI_PLD_GET_OSPM_EJECT (&Dword); PldInfo->CabinetNumber = ACPI_PLD_GET_CABINET (&Dword); PldInfo->CardCageNumber = ACPI_PLD_GET_CARD_CAGE (&Dword); PldInfo->Reference = ACPI_PLD_GET_REFERENCE (&Dword); PldInfo->Rotation = ACPI_PLD_GET_ROTATION (&Dword); PldInfo->Order = ACPI_PLD_GET_ORDER (&Dword); if (Length >= ACPI_PLD_REV2_BUFFER_SIZE) { /* Fifth 32-bit DWord (Revision 2 of _PLD) */ ACPI_MOVE_32_TO_32 (&Dword, &Buffer[4]); PldInfo->VerticalOffset = ACPI_PLD_GET_VERT_OFFSET (&Dword); PldInfo->HorizontalOffset = ACPI_PLD_GET_HORIZ_OFFSET (&Dword); } *ReturnBuffer = PldInfo; return (AE_OK); } ACPI_EXPORT_SYMBOL (AcpiDecodePldBuffer) src/acpica/source/components/utilities/utxferror.c000066400000000000000000000376651465205512700230210ustar00rootroot00000000000000/******************************************************************************* * * Module Name: utxferror - Various error/warning output functions * ******************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utxferror") /* * This module is used for the in-kernel ACPICA as well as the ACPICA * tools/applications. */ #ifndef ACPI_NO_ERROR_MESSAGES /* Entire module */ /******************************************************************************* * * FUNCTION: AcpiError * * PARAMETERS: ModuleName - Caller's module name (for error output) * LineNumber - Caller's line number (for error output) * Format - Printf format string + additional args * * RETURN: None * * DESCRIPTION: Print "ACPI Error" message with module/line/version info * ******************************************************************************/ void ACPI_INTERNAL_VAR_XFACE AcpiError ( const char *ModuleName, UINT32 LineNumber, const char *Format, ...) { va_list ArgList; ACPI_MSG_REDIRECT_BEGIN; AcpiOsPrintf (ACPI_MSG_ERROR); va_start (ArgList, Format); AcpiOsVprintf (Format, ArgList); ACPI_MSG_SUFFIX; va_end (ArgList); ACPI_MSG_REDIRECT_END; } ACPI_EXPORT_SYMBOL (AcpiError) /******************************************************************************* * * FUNCTION: AcpiException * * PARAMETERS: ModuleName - Caller's module name (for error output) * LineNumber - Caller's line number (for error output) * Status - Status value to be decoded/formatted * Format - Printf format string + additional args * * RETURN: None * * DESCRIPTION: Print an "ACPI Error" message with module/line/version * info as well as decoded ACPI_STATUS. * ******************************************************************************/ void ACPI_INTERNAL_VAR_XFACE AcpiException ( const char *ModuleName, UINT32 LineNumber, ACPI_STATUS Status, const char *Format, ...) { va_list ArgList; ACPI_MSG_REDIRECT_BEGIN; /* For AE_OK, just print the message */ if (ACPI_SUCCESS (Status)) { AcpiOsPrintf (ACPI_MSG_ERROR); } else { AcpiOsPrintf (ACPI_MSG_ERROR "%s, ", AcpiFormatException (Status)); } va_start (ArgList, Format); AcpiOsVprintf (Format, ArgList); ACPI_MSG_SUFFIX; va_end (ArgList); ACPI_MSG_REDIRECT_END; } ACPI_EXPORT_SYMBOL (AcpiException) /******************************************************************************* * * FUNCTION: AcpiWarning * * PARAMETERS: ModuleName - Caller's module name (for warning output) * LineNumber - Caller's line number (for warning output) * Format - Printf format string + additional args * * RETURN: None * * DESCRIPTION: Print "ACPI Warning" message with module/line/version info * ******************************************************************************/ void ACPI_INTERNAL_VAR_XFACE AcpiWarning ( const char *ModuleName, UINT32 LineNumber, const char *Format, ...) { va_list ArgList; ACPI_MSG_REDIRECT_BEGIN; AcpiOsPrintf (ACPI_MSG_WARNING); va_start (ArgList, Format); AcpiOsVprintf (Format, ArgList); ACPI_MSG_SUFFIX; va_end (ArgList); ACPI_MSG_REDIRECT_END; } ACPI_EXPORT_SYMBOL (AcpiWarning) /******************************************************************************* * * FUNCTION: AcpiInfo * * PARAMETERS: Format - Printf format string + additional args * * RETURN: None * * DESCRIPTION: Print generic "ACPI:" information message. There is no * module/line/version info in order to keep the message simple. * ******************************************************************************/ void ACPI_INTERNAL_VAR_XFACE AcpiInfo ( const char *Format, ...) { va_list ArgList; ACPI_MSG_REDIRECT_BEGIN; AcpiOsPrintf (ACPI_MSG_INFO); va_start (ArgList, Format); AcpiOsVprintf (Format, ArgList); AcpiOsPrintf ("\n"); va_end (ArgList); ACPI_MSG_REDIRECT_END; } ACPI_EXPORT_SYMBOL (AcpiInfo) /******************************************************************************* * * FUNCTION: AcpiBiosError * * PARAMETERS: ModuleName - Caller's module name (for error output) * LineNumber - Caller's line number (for error output) * Format - Printf format string + additional args * * RETURN: None * * DESCRIPTION: Print "ACPI Firmware Error" message with module/line/version * info * ******************************************************************************/ void ACPI_INTERNAL_VAR_XFACE AcpiBiosError ( const char *ModuleName, UINT32 LineNumber, const char *Format, ...) { va_list ArgList; ACPI_MSG_REDIRECT_BEGIN; AcpiOsPrintf (ACPI_MSG_BIOS_ERROR); va_start (ArgList, Format); AcpiOsVprintf (Format, ArgList); ACPI_MSG_SUFFIX; va_end (ArgList); ACPI_MSG_REDIRECT_END; } ACPI_EXPORT_SYMBOL (AcpiBiosError) /******************************************************************************* * * FUNCTION: AcpiBiosException * * PARAMETERS: ModuleName - Caller's module name (for error output) * LineNumber - Caller's line number (for error output) * Status - Status value to be decoded/formatted * Format - Printf format string + additional args * * RETURN: None * * DESCRIPTION: Print an "ACPI Firmware Error" message with module/line/version * info as well as decoded ACPI_STATUS. * ******************************************************************************/ void ACPI_INTERNAL_VAR_XFACE AcpiBiosException ( const char *ModuleName, UINT32 LineNumber, ACPI_STATUS Status, const char *Format, ...) { va_list ArgList; ACPI_MSG_REDIRECT_BEGIN; /* For AE_OK, just print the message */ if (ACPI_SUCCESS (Status)) { AcpiOsPrintf (ACPI_MSG_BIOS_ERROR); } else { AcpiOsPrintf (ACPI_MSG_BIOS_ERROR "%s, ", AcpiFormatException (Status)); } va_start (ArgList, Format); AcpiOsVprintf (Format, ArgList); ACPI_MSG_SUFFIX; va_end (ArgList); ACPI_MSG_REDIRECT_END; } ACPI_EXPORT_SYMBOL (AcpiBiosException) /******************************************************************************* * * FUNCTION: AcpiBiosWarning * * PARAMETERS: ModuleName - Caller's module name (for warning output) * LineNumber - Caller's line number (for warning output) * Format - Printf format string + additional args * * RETURN: None * * DESCRIPTION: Print "ACPI Firmware Warning" message with module/line/version * info * ******************************************************************************/ void ACPI_INTERNAL_VAR_XFACE AcpiBiosWarning ( const char *ModuleName, UINT32 LineNumber, const char *Format, ...) { va_list ArgList; ACPI_MSG_REDIRECT_BEGIN; AcpiOsPrintf (ACPI_MSG_BIOS_WARNING); va_start (ArgList, Format); AcpiOsVprintf (Format, ArgList); ACPI_MSG_SUFFIX; va_end (ArgList); ACPI_MSG_REDIRECT_END; } ACPI_EXPORT_SYMBOL (AcpiBiosWarning) #endif /* ACPI_NO_ERROR_MESSAGES */ src/acpica/source/components/utilities/utxfinit.c000066400000000000000000000367771465205512700226360ustar00rootroot00000000000000/****************************************************************************** * * Module Name: utxfinit - External interfaces for ACPICA initialization * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #define EXPORT_ACPI_INTERFACES #include "acpi.h" #include "accommon.h" #include "acevents.h" #include "acnamesp.h" #include "acdebug.h" #include "actables.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utxfinit") /* For AcpiExec only */ void AeDoObjectOverrides ( void); /******************************************************************************* * * FUNCTION: AcpiInitializeSubsystem * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Initializes all global variables. This is the first function * called, so any early initialization belongs here. * ******************************************************************************/ ACPI_STATUS ACPI_INIT_FUNCTION AcpiInitializeSubsystem ( void) { ACPI_STATUS Status; ACPI_FUNCTION_TRACE (AcpiInitializeSubsystem); AcpiGbl_StartupFlags = ACPI_SUBSYSTEM_INITIALIZE; ACPI_DEBUG_EXEC (AcpiUtInitStackPtrTrace ()); /* Initialize the OS-Dependent layer */ Status = AcpiOsInitialize (); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "During OSL initialization")); return_ACPI_STATUS (Status); } /* Initialize all globals used by the subsystem */ Status = AcpiUtInitGlobals (); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "During initialization of globals")); return_ACPI_STATUS (Status); } /* Create the default mutex objects */ Status = AcpiUtMutexInitialize (); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "During Global Mutex creation")); return_ACPI_STATUS (Status); } /* * Initialize the namespace manager and * the root of the namespace tree */ Status = AcpiNsRootInitialize (); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "During Namespace initialization")); return_ACPI_STATUS (Status); } /* Initialize the global OSI interfaces list with the static names */ Status = AcpiUtInitializeInterfaces (); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "During OSI interfaces initialization")); return_ACPI_STATUS (Status); } return_ACPI_STATUS (AE_OK); } ACPI_EXPORT_SYMBOL_INIT (AcpiInitializeSubsystem) /******************************************************************************* * * FUNCTION: AcpiEnableSubsystem * * PARAMETERS: Flags - Init/enable Options * * RETURN: Status * * DESCRIPTION: Completes the subsystem initialization including hardware. * Puts system into ACPI mode if it isn't already. * ******************************************************************************/ ACPI_STATUS ACPI_INIT_FUNCTION AcpiEnableSubsystem ( UINT32 Flags) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (AcpiEnableSubsystem); /* * The early initialization phase is complete. The namespace is loaded, * and we can now support address spaces other than Memory, I/O, and * PCI_Config. */ AcpiGbl_EarlyInitialization = FALSE; #if (!ACPI_REDUCED_HARDWARE) /* Enable ACPI mode */ if (!(Flags & ACPI_NO_ACPI_ENABLE)) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Going into ACPI mode\n")); AcpiGbl_OriginalMode = AcpiHwGetMode(); Status = AcpiEnable (); if (ACPI_FAILURE (Status)) { ACPI_WARNING ((AE_INFO, "AcpiEnable failed")); return_ACPI_STATUS (Status); } } /* * Obtain a permanent mapping for the FACS. This is required for the * Global Lock and the Firmware Waking Vector */ if (!(Flags & ACPI_NO_FACS_INIT)) { Status = AcpiTbInitializeFacs (); if (ACPI_FAILURE (Status)) { ACPI_WARNING ((AE_INFO, "Could not map the FACS table")); return_ACPI_STATUS (Status); } } /* * Initialize ACPI Event handling (Fixed and General Purpose) * * Note1: We must have the hardware and events initialized before we can * execute any control methods safely. Any control method can require * ACPI hardware support, so the hardware must be fully initialized before * any method execution! * * Note2: Fixed events are initialized and enabled here. GPEs are * initialized, but cannot be enabled until after the hardware is * completely initialized (SCI and GlobalLock activated) and the various * initialization control methods are run (_REG, _STA, _INI) on the * entire namespace. */ if (!(Flags & ACPI_NO_EVENT_INIT)) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Initializing ACPI events\n")); Status = AcpiEvInitializeEvents (); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } /* * Install the SCI handler and Global Lock handler. This completes the * hardware initialization. */ if (!(Flags & ACPI_NO_HANDLER_INIT)) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Installing SCI/GL handlers\n")); Status = AcpiEvInstallXruptHandlers (); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } #endif /* !ACPI_REDUCED_HARDWARE */ return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL_INIT (AcpiEnableSubsystem) /******************************************************************************* * * FUNCTION: AcpiInitializeObjects * * PARAMETERS: Flags - Init/enable Options * * RETURN: Status * * DESCRIPTION: Completes namespace initialization by initializing device * objects and executing AML code for Regions, buffers, etc. * ******************************************************************************/ ACPI_STATUS ACPI_INIT_FUNCTION AcpiInitializeObjects ( UINT32 Flags) { ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_TRACE (AcpiInitializeObjects); #ifdef ACPI_OBSOLETE_BEHAVIOR /* * 05/2019: Removed, initialization now happens at both object * creation and table load time */ /* * Initialize the objects that remain uninitialized. This * runs the executable AML that may be part of the * declaration of these objects: OperationRegions, BufferFields, * BankFields, Buffers, and Packages. */ if (!(Flags & ACPI_NO_OBJECT_INIT)) { Status = AcpiNsInitializeObjects (); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } #endif /* * Initialize all device/region objects in the namespace. This runs * the device _STA and _INI methods and region _REG methods. */ if (!(Flags & (ACPI_NO_DEVICE_INIT | ACPI_NO_ADDRESS_SPACE_INIT))) { Status = AcpiNsInitializeDevices (Flags); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } } /* * Empty the caches (delete the cached objects) on the assumption that * the table load filled them up more than they will be at runtime -- * thus wasting non-paged memory. */ Status = AcpiPurgeCachedObjects (); AcpiGbl_StartupFlags |= ACPI_INITIALIZED_OK; return_ACPI_STATUS (Status); } ACPI_EXPORT_SYMBOL_INIT (AcpiInitializeObjects) src/acpica/source/include/000077500000000000000000000000001465205512700160175ustar00rootroot00000000000000src/acpica/source/include/acapps.h000066400000000000000000000305421465205512700174430ustar00rootroot00000000000000/****************************************************************************** * * Module Name: acapps - common include for ACPI applications/tools * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef _ACAPPS #define _ACAPPS #ifdef ACPI_USE_STANDARD_HEADERS #include #endif /* ACPI_USE_STANDARD_HEADERS */ /* Common info for tool signons */ #define ACPICA_NAME "Intel ACPI Component Architecture" #define ACPICA_COPYRIGHT "Copyright (c) 2000 - 2023 Intel Corporation" #if ACPI_MACHINE_WIDTH == 64 #define ACPI_WIDTH " (64-bit version)" #elif ACPI_MACHINE_WIDTH == 32 #define ACPI_WIDTH " (32-bit version)" #else #error unknown ACPI_MACHINE_WIDTH #define ACPI_WIDTH " (unknown bit width, not 32 or 64)" #endif /* Macros for signons and file headers */ #define ACPI_COMMON_SIGNON(UtilityName) \ "\n%s\n%s version %8.8X\n%s\n\n", \ ACPICA_NAME, \ UtilityName, ((UINT32) ACPI_CA_VERSION), \ ACPICA_COPYRIGHT #define ACPI_COMMON_HEADER(UtilityName, Prefix) \ "%s%s\n%s%s version %8.8X%s\n%s%s\n%s\n", \ Prefix, ACPICA_NAME, \ Prefix, UtilityName, ((UINT32) ACPI_CA_VERSION), ACPI_WIDTH, \ Prefix, ACPICA_COPYRIGHT, \ Prefix #define ACPI_COMMON_BUILD_TIME \ "Build date/time: %s %s\n", __DATE__, __TIME__ /* Macros for usage messages */ #define ACPI_USAGE_HEADER(Usage) \ printf ("Usage: %s\nOptions:\n", Usage); #define ACPI_USAGE_TEXT(Description) \ printf (Description); #define ACPI_OPTION(Name, Description) \ printf (" %-20s%s\n", Name, Description); /* Check for unexpected exceptions */ #define ACPI_CHECK_STATUS(Name, Status, Expected) \ if (Status != Expected) \ { \ AcpiOsPrintf ("Unexpected %s from %s (%s-%d)\n", \ AcpiFormatException (Status), #Name, _AcpiModuleName, __LINE__); \ } /* Check for unexpected non-AE_OK errors */ #define ACPI_CHECK_OK(Name, Status) ACPI_CHECK_STATUS (Name, Status, AE_OK); #define FILE_SUFFIX_DISASSEMBLY "dsl" #define FILE_SUFFIX_BINARY_TABLE ".dat" /* Needs the dot */ /* acfileio */ ACPI_STATUS AcGetAllTablesFromFile ( char *Filename, UINT8 GetOnlyAmlTables, ACPI_NEW_TABLE_DESC **ReturnListHead); void AcDeleteTableList ( ACPI_NEW_TABLE_DESC *ListHead); BOOLEAN AcIsFileBinary ( FILE *File); ACPI_STATUS AcValidateTableHeader ( FILE *File, long TableOffset); /* Values for GetOnlyAmlTables */ #define ACPI_GET_ONLY_AML_TABLES TRUE #define ACPI_GET_ALL_TABLES FALSE /* * getopt */ int AcpiGetopt( int argc, char **argv, char *opts); int AcpiGetoptArgument ( int argc, char **argv); extern int AcpiGbl_Optind; extern int AcpiGbl_Opterr; extern int AcpiGbl_SubOptChar; extern char *AcpiGbl_Optarg; /* * cmfsize - Common get file size function */ UINT32 CmGetFileSize ( ACPI_FILE File); /* * adwalk */ void AcpiDmCrossReferenceNamespace ( ACPI_PARSE_OBJECT *ParseTreeRoot, ACPI_NAMESPACE_NODE *NamespaceRoot, ACPI_OWNER_ID OwnerId); void AcpiDmDumpTree ( ACPI_PARSE_OBJECT *Origin); void AcpiDmFindOrphanMethods ( ACPI_PARSE_OBJECT *Origin); void AcpiDmFinishNamespaceLoad ( ACPI_PARSE_OBJECT *ParseTreeRoot, ACPI_NAMESPACE_NODE *NamespaceRoot, ACPI_OWNER_ID OwnerId); void AcpiDmConvertParseObjects ( ACPI_PARSE_OBJECT *ParseTreeRoot, ACPI_NAMESPACE_NODE *NamespaceRoot); /* * adfile */ ACPI_STATUS AdInitialize ( void); char * FlGenerateFilename ( char *InputFilename, char *Suffix); ACPI_STATUS FlSplitInputPathname ( char *InputPath, char **OutDirectoryPath, char **OutFilename); char * FlGetFileBasename ( char *FilePathname); char * AdGenerateFilename ( char *Prefix, char *TableId); void AdWriteTable ( ACPI_TABLE_HEADER *Table, UINT32 Length, char *TableName, char *OemTableId); #endif /* _ACAPPS */ src/acpica/source/include/acbuffer.h000066400000000000000000000435371465205512700177610ustar00rootroot00000000000000/****************************************************************************** * * Name: acbuffer.h - Support for buffers returned by ACPI predefined names * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACBUFFER_H__ #define __ACBUFFER_H__ /* * Contains buffer structures for these predefined names: * _FDE, _GRT, _GTM, _PLD, _SRT */ /* * Note: C bitfields are not used for this reason: * * "Bitfields are great and easy to read, but unfortunately the C language * does not specify the layout of bitfields in memory, which means they are * essentially useless for dealing with packed data in on-disk formats or * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, * this decision was a design error in C. Ritchie could have picked an order * and stuck with it." Norman Ramsey. * See http://stackoverflow.com/a/1053662/41661 */ /* _FDE return value */ typedef struct acpi_fde_info { UINT32 Floppy0; UINT32 Floppy1; UINT32 Floppy2; UINT32 Floppy3; UINT32 Tape; } ACPI_FDE_INFO; /* * _GRT return value * _SRT input value */ typedef struct acpi_grt_info { UINT16 Year; UINT8 Month; UINT8 Day; UINT8 Hour; UINT8 Minute; UINT8 Second; UINT8 Valid; UINT16 Milliseconds; UINT16 Timezone; UINT8 Daylight; UINT8 Reserved[3]; } ACPI_GRT_INFO; /* _GTM return value */ typedef struct acpi_gtm_info { UINT32 PioSpeed0; UINT32 DmaSpeed0; UINT32 PioSpeed1; UINT32 DmaSpeed1; UINT32 Flags; } ACPI_GTM_INFO; /* * Formatted _PLD return value. The minimum size is a package containing * one buffer. * Revision 1: Buffer is 16 bytes (128 bits) * Revision 2: Buffer is 20 bytes (160 bits) * * Note: This structure is returned from the AcpiDecodePldBuffer * interface. */ typedef struct acpi_pld_info { UINT8 Revision; UINT8 IgnoreColor; UINT8 Red; UINT8 Green; UINT8 Blue; UINT16 Width; UINT16 Height; UINT8 UserVisible; UINT8 Dock; UINT8 Lid; UINT8 Panel; UINT8 VerticalPosition; UINT8 HorizontalPosition; UINT8 Shape; UINT8 GroupOrientation; UINT8 GroupToken; UINT8 GroupPosition; UINT8 Bay; UINT8 Ejectable; UINT8 OspmEjectRequired; UINT8 CabinetNumber; UINT8 CardCageNumber; UINT8 Reference; UINT8 Rotation; UINT8 Order; UINT8 Reserved; UINT16 VerticalOffset; UINT16 HorizontalOffset; } ACPI_PLD_INFO; /* * Macros to: * 1) Convert a _PLD buffer to internal ACPI_PLD_INFO format - ACPI_PLD_GET* * (Used by AcpiDecodePldBuffer) * 2) Construct a _PLD buffer - ACPI_PLD_SET* * (Intended for BIOS use only) */ #define ACPI_PLD_REV1_BUFFER_SIZE 16 /* For Revision 1 of the buffer (From ACPI spec) */ #define ACPI_PLD_REV2_BUFFER_SIZE 20 /* For Revision 2 of the buffer (From ACPI spec) */ #define ACPI_PLD_BUFFER_SIZE 20 /* For Revision 2 of the buffer (From ACPI spec) */ /* First 32-bit dword, bits 0:32 */ #define ACPI_PLD_GET_REVISION(dword) ACPI_GET_BITS (dword, 0, ACPI_7BIT_MASK) #define ACPI_PLD_SET_REVISION(dword,value) ACPI_SET_BITS (dword, 0, ACPI_7BIT_MASK, value) /* Offset 0, Len 7 */ #define ACPI_PLD_GET_IGNORE_COLOR(dword) ACPI_GET_BITS (dword, 7, ACPI_1BIT_MASK) #define ACPI_PLD_SET_IGNORE_COLOR(dword,value) ACPI_SET_BITS (dword, 7, ACPI_1BIT_MASK, value) /* Offset 7, Len 1 */ #define ACPI_PLD_GET_RED(dword) ACPI_GET_BITS (dword, 8, ACPI_8BIT_MASK) #define ACPI_PLD_SET_RED(dword,value) ACPI_SET_BITS (dword, 8, ACPI_8BIT_MASK, value) /* Offset 8, Len 8 */ #define ACPI_PLD_GET_GREEN(dword) ACPI_GET_BITS (dword, 16, ACPI_8BIT_MASK) #define ACPI_PLD_SET_GREEN(dword,value) ACPI_SET_BITS (dword, 16, ACPI_8BIT_MASK, value) /* Offset 16, Len 8 */ #define ACPI_PLD_GET_BLUE(dword) ACPI_GET_BITS (dword, 24, ACPI_8BIT_MASK) #define ACPI_PLD_SET_BLUE(dword,value) ACPI_SET_BITS (dword, 24, ACPI_8BIT_MASK, value) /* Offset 24, Len 8 */ /* Second 32-bit dword, bits 33:63 */ #define ACPI_PLD_GET_WIDTH(dword) ACPI_GET_BITS (dword, 0, ACPI_16BIT_MASK) #define ACPI_PLD_SET_WIDTH(dword,value) ACPI_SET_BITS (dword, 0, ACPI_16BIT_MASK, value) /* Offset 32+0=32, Len 16 */ #define ACPI_PLD_GET_HEIGHT(dword) ACPI_GET_BITS (dword, 16, ACPI_16BIT_MASK) #define ACPI_PLD_SET_HEIGHT(dword,value) ACPI_SET_BITS (dword, 16, ACPI_16BIT_MASK, value) /* Offset 32+16=48, Len 16 */ /* Third 32-bit dword, bits 64:95 */ #define ACPI_PLD_GET_USER_VISIBLE(dword) ACPI_GET_BITS (dword, 0, ACPI_1BIT_MASK) #define ACPI_PLD_SET_USER_VISIBLE(dword,value) ACPI_SET_BITS (dword, 0, ACPI_1BIT_MASK, value) /* Offset 64+0=64, Len 1 */ #define ACPI_PLD_GET_DOCK(dword) ACPI_GET_BITS (dword, 1, ACPI_1BIT_MASK) #define ACPI_PLD_SET_DOCK(dword,value) ACPI_SET_BITS (dword, 1, ACPI_1BIT_MASK, value) /* Offset 64+1=65, Len 1 */ #define ACPI_PLD_GET_LID(dword) ACPI_GET_BITS (dword, 2, ACPI_1BIT_MASK) #define ACPI_PLD_SET_LID(dword,value) ACPI_SET_BITS (dword, 2, ACPI_1BIT_MASK, value) /* Offset 64+2=66, Len 1 */ #define ACPI_PLD_GET_PANEL(dword) ACPI_GET_BITS (dword, 3, ACPI_3BIT_MASK) #define ACPI_PLD_SET_PANEL(dword,value) ACPI_SET_BITS (dword, 3, ACPI_3BIT_MASK, value) /* Offset 64+3=67, Len 3 */ #define ACPI_PLD_GET_VERTICAL(dword) ACPI_GET_BITS (dword, 6, ACPI_2BIT_MASK) #define ACPI_PLD_SET_VERTICAL(dword,value) ACPI_SET_BITS (dword, 6, ACPI_2BIT_MASK, value) /* Offset 64+6=70, Len 2 */ #define ACPI_PLD_GET_HORIZONTAL(dword) ACPI_GET_BITS (dword, 8, ACPI_2BIT_MASK) #define ACPI_PLD_SET_HORIZONTAL(dword,value) ACPI_SET_BITS (dword, 8, ACPI_2BIT_MASK, value) /* Offset 64+8=72, Len 2 */ #define ACPI_PLD_GET_SHAPE(dword) ACPI_GET_BITS (dword, 10, ACPI_4BIT_MASK) #define ACPI_PLD_SET_SHAPE(dword,value) ACPI_SET_BITS (dword, 10, ACPI_4BIT_MASK, value) /* Offset 64+10=74, Len 4 */ #define ACPI_PLD_GET_ORIENTATION(dword) ACPI_GET_BITS (dword, 14, ACPI_1BIT_MASK) #define ACPI_PLD_SET_ORIENTATION(dword,value) ACPI_SET_BITS (dword, 14, ACPI_1BIT_MASK, value) /* Offset 64+14=78, Len 1 */ #define ACPI_PLD_GET_TOKEN(dword) ACPI_GET_BITS (dword, 15, ACPI_8BIT_MASK) #define ACPI_PLD_SET_TOKEN(dword,value) ACPI_SET_BITS (dword, 15, ACPI_8BIT_MASK, value) /* Offset 64+15=79, Len 8 */ #define ACPI_PLD_GET_POSITION(dword) ACPI_GET_BITS (dword, 23, ACPI_8BIT_MASK) #define ACPI_PLD_SET_POSITION(dword,value) ACPI_SET_BITS (dword, 23, ACPI_8BIT_MASK, value) /* Offset 64+23=87, Len 8 */ #define ACPI_PLD_GET_BAY(dword) ACPI_GET_BITS (dword, 31, ACPI_1BIT_MASK) #define ACPI_PLD_SET_BAY(dword,value) ACPI_SET_BITS (dword, 31, ACPI_1BIT_MASK, value) /* Offset 64+31=95, Len 1 */ /* Fourth 32-bit dword, bits 96:127 */ #define ACPI_PLD_GET_EJECTABLE(dword) ACPI_GET_BITS (dword, 0, ACPI_1BIT_MASK) #define ACPI_PLD_SET_EJECTABLE(dword,value) ACPI_SET_BITS (dword, 0, ACPI_1BIT_MASK, value) /* Offset 96+0=96, Len 1 */ #define ACPI_PLD_GET_OSPM_EJECT(dword) ACPI_GET_BITS (dword, 1, ACPI_1BIT_MASK) #define ACPI_PLD_SET_OSPM_EJECT(dword,value) ACPI_SET_BITS (dword, 1, ACPI_1BIT_MASK, value) /* Offset 96+1=97, Len 1 */ #define ACPI_PLD_GET_CABINET(dword) ACPI_GET_BITS (dword, 2, ACPI_8BIT_MASK) #define ACPI_PLD_SET_CABINET(dword,value) ACPI_SET_BITS (dword, 2, ACPI_8BIT_MASK, value) /* Offset 96+2=98, Len 8 */ #define ACPI_PLD_GET_CARD_CAGE(dword) ACPI_GET_BITS (dword, 10, ACPI_8BIT_MASK) #define ACPI_PLD_SET_CARD_CAGE(dword,value) ACPI_SET_BITS (dword, 10, ACPI_8BIT_MASK, value) /* Offset 96+10=106, Len 8 */ #define ACPI_PLD_GET_REFERENCE(dword) ACPI_GET_BITS (dword, 18, ACPI_1BIT_MASK) #define ACPI_PLD_SET_REFERENCE(dword,value) ACPI_SET_BITS (dword, 18, ACPI_1BIT_MASK, value) /* Offset 96+18=114, Len 1 */ #define ACPI_PLD_GET_ROTATION(dword) ACPI_GET_BITS (dword, 19, ACPI_4BIT_MASK) #define ACPI_PLD_SET_ROTATION(dword,value) ACPI_SET_BITS (dword, 19, ACPI_4BIT_MASK, value) /* Offset 96+19=115, Len 4 */ #define ACPI_PLD_GET_ORDER(dword) ACPI_GET_BITS (dword, 23, ACPI_5BIT_MASK) #define ACPI_PLD_SET_ORDER(dword,value) ACPI_SET_BITS (dword, 23, ACPI_5BIT_MASK, value) /* Offset 96+23=119, Len 5 */ /* Fifth 32-bit dword, bits 128:159 (Revision 2 of _PLD only) */ #define ACPI_PLD_GET_VERT_OFFSET(dword) ACPI_GET_BITS (dword, 0, ACPI_16BIT_MASK) #define ACPI_PLD_SET_VERT_OFFSET(dword,value) ACPI_SET_BITS (dword, 0, ACPI_16BIT_MASK, value) /* Offset 128+0=128, Len 16 */ #define ACPI_PLD_GET_HORIZ_OFFSET(dword) ACPI_GET_BITS (dword, 16, ACPI_16BIT_MASK) #define ACPI_PLD_SET_HORIZ_OFFSET(dword,value) ACPI_SET_BITS (dword, 16, ACPI_16BIT_MASK, value) /* Offset 128+16=144, Len 16 */ /* Panel position defined in _PLD section of ACPI Specification 6.3 */ #define ACPI_PLD_PANEL_TOP 0 #define ACPI_PLD_PANEL_BOTTOM 1 #define ACPI_PLD_PANEL_LEFT 2 #define ACPI_PLD_PANEL_RIGHT 3 #define ACPI_PLD_PANEL_FRONT 4 #define ACPI_PLD_PANEL_BACK 5 #define ACPI_PLD_PANEL_UNKNOWN 6 #endif /* ACBUFFER_H */ src/acpica/source/include/accommon.h000066400000000000000000000220631465205512700177670ustar00rootroot00000000000000/****************************************************************************** * * Name: accommon.h - Common include files for generation of ACPICA source * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACCOMMON_H__ #define __ACCOMMON_H__ /* * Common set of includes for all ACPICA source files. * We put them here because we don't want to duplicate them * in the source code again and again. * * Note: The order of these include files is important. */ #include "acconfig.h" /* Global configuration constants */ #include "acmacros.h" /* C macros */ #include "aclocal.h" /* Internal data types */ #include "acobject.h" /* ACPI internal object */ #include "acstruct.h" /* Common structures */ #include "acglobal.h" /* All global variables */ #include "achware.h" /* Hardware defines and interfaces */ #include "acutils.h" /* Utility interfaces */ #ifndef ACPI_USE_SYSTEM_CLIBRARY #include "acclib.h" /* C library interfaces */ #endif /* !ACPI_USE_SYSTEM_CLIBRARY */ #endif /* __ACCOMMON_H__ */ src/acpica/source/include/acconfig.h000066400000000000000000000365411465205512700177520ustar00rootroot00000000000000/****************************************************************************** * * Name: acconfig.h - Global configuration constants * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef _ACCONFIG_H #define _ACCONFIG_H /****************************************************************************** * * Configuration options * *****************************************************************************/ /* * ACPI_DEBUG_OUTPUT - This switch enables all the debug facilities of the * ACPI subsystem. This includes the DEBUG_PRINT output * statements. When disabled, all DEBUG_PRINT * statements are compiled out. * * ACPI_APPLICATION - Use this switch if the subsystem is going to be run * at the application level. * */ /* * OS name, used for the _OS object. The _OS object is essentially obsolete, * but there is a large base of ASL/AML code in existing machines that check * for the string below. The use of this string usually guarantees that * the ASL will execute down the most tested code path. Also, there is some * code that will not execute the _OSI method unless _OS matches the string * below. Therefore, change this string at your own risk. */ #define ACPI_OS_NAME "Microsoft Windows NT" /* Maximum objects in the various object caches */ #define ACPI_MAX_STATE_CACHE_DEPTH 96 /* State objects */ #define ACPI_MAX_PARSE_CACHE_DEPTH 96 /* Parse tree objects */ #define ACPI_MAX_EXTPARSE_CACHE_DEPTH 96 /* Parse tree objects */ #define ACPI_MAX_OBJECT_CACHE_DEPTH 96 /* Interpreter operand objects */ #define ACPI_MAX_NAMESPACE_CACHE_DEPTH 96 /* Namespace objects */ #define ACPI_MAX_COMMENT_CACHE_DEPTH 96 /* Comments for the -ca option */ /* * Should the subsystem abort the loading of an ACPI table if the * table checksum is incorrect? */ #ifndef ACPI_CHECKSUM_ABORT #define ACPI_CHECKSUM_ABORT FALSE #endif /* * Generate a version of ACPICA that only supports "reduced hardware" * platforms (as defined in ACPI 5.0). Set to TRUE to generate a specialized * version of ACPICA that ONLY supports the ACPI 5.0 "reduced hardware" * model. In other words, no ACPI hardware is supported. * * If TRUE, this means no support for the following: * PM Event and Control registers * SCI interrupt (and handler) * Fixed Events * General Purpose Events (GPEs) * Global Lock * ACPI PM timer * FACS table (Waking vectors and Global Lock) */ #ifndef ACPI_REDUCED_HARDWARE #define ACPI_REDUCED_HARDWARE FALSE #endif /****************************************************************************** * * Subsystem Constants * *****************************************************************************/ /* Version of ACPI supported */ #define ACPI_CA_SUPPORT_LEVEL 5 /* Maximum count for a semaphore object */ #define ACPI_MAX_SEMAPHORE_COUNT 256 /* Maximum object reference count (detects object deletion issues) */ #define ACPI_MAX_REFERENCE_COUNT 0x4000 /* Default page size for use in mapping memory for operation regions */ #define ACPI_DEFAULT_PAGE_SIZE 4096 /* Must be power of 2 */ /* OwnerId tracking. 128 entries allows for 4095 OwnerIds */ #define ACPI_NUM_OWNERID_MASKS 128 /* Size of the root table array is increased by this increment */ #define ACPI_ROOT_TABLE_SIZE_INCREMENT 4 /* Maximum sleep allowed via Sleep() operator */ #define ACPI_MAX_SLEEP 2000 /* 2000 millisec == two seconds */ /* Address Range lists are per-SpaceId (Memory and I/O only) */ #define ACPI_ADDRESS_RANGE_MAX 2 /* Maximum time (default 30s) of While() loops before abort */ #define ACPI_MAX_LOOP_TIMEOUT 30 /****************************************************************************** * * ACPI Specification constants (Do not change unless the specification changes) * *****************************************************************************/ /* Method info (in WALK_STATE), containing local variables and arguments */ #define ACPI_METHOD_NUM_LOCALS 8 #define ACPI_METHOD_MAX_LOCAL 7 #define ACPI_METHOD_NUM_ARGS 7 #define ACPI_METHOD_MAX_ARG 6 /* * Operand Stack (in WALK_STATE), Must be large enough to contain METHOD_MAX_ARG */ #define ACPI_OBJ_NUM_OPERANDS 8 #define ACPI_OBJ_MAX_OPERAND 7 /* Number of elements in the Result Stack frame, can be an arbitrary value */ #define ACPI_RESULTS_FRAME_OBJ_NUM 8 /* * Maximal number of elements the Result Stack can contain, * it may be an arbitrary value not exceeding the types of * ResultSize and ResultCount (now UINT8). */ #define ACPI_RESULTS_OBJ_NUM_MAX 255 /* Constants used in searching for the RSDP in low memory */ #define ACPI_EBDA_PTR_LOCATION 0x0000040E /* Physical Address */ #define ACPI_EBDA_PTR_LENGTH 2 #define ACPI_EBDA_WINDOW_SIZE 1024 #define ACPI_HI_RSDP_WINDOW_BASE 0x000E0000 /* Physical Address */ #define ACPI_HI_RSDP_WINDOW_SIZE 0x00020000 #define ACPI_RSDP_SCAN_STEP 16 /* Operation regions */ #define ACPI_USER_REGION_BEGIN 0x80 /* Maximum SpaceIds for Operation Regions */ #define ACPI_MAX_ADDRESS_SPACE 255 #define ACPI_NUM_DEFAULT_SPACES 4 /* Array sizes. Used for range checking also */ #define ACPI_MAX_MATCH_OPCODE 5 /* RSDP checksums */ #define ACPI_RSDP_CHECKSUM_LENGTH 20 #define ACPI_RSDP_XCHECKSUM_LENGTH 36 /* * SMBus, GSBus and IPMI buffer sizes. All have a 2-byte header, * containing both Status and Length. */ #define ACPI_SERIAL_HEADER_SIZE 2 /* Common for below. Status and Length fields */ #define ACPI_SMBUS_DATA_SIZE 32 #define ACPI_SMBUS_BUFFER_SIZE ACPI_SERIAL_HEADER_SIZE + ACPI_SMBUS_DATA_SIZE #define ACPI_IPMI_DATA_SIZE 64 #define ACPI_IPMI_BUFFER_SIZE ACPI_SERIAL_HEADER_SIZE + ACPI_IPMI_DATA_SIZE #define ACPI_MAX_GSBUS_DATA_SIZE 255 #define ACPI_MAX_GSBUS_BUFFER_SIZE ACPI_SERIAL_HEADER_SIZE + ACPI_MAX_GSBUS_DATA_SIZE #define ACPI_PRM_INPUT_BUFFER_SIZE 26 #define ACPI_FFH_INPUT_BUFFER_SIZE 256 /* _SxD and _SxW control methods */ #define ACPI_NUM_SxD_METHODS 4 #define ACPI_NUM_SxW_METHODS 5 /****************************************************************************** * * Miscellaneous constants * *****************************************************************************/ /* UUID constants */ #define UUID_BUFFER_LENGTH 16 /* Length of UUID in memory */ #define UUID_STRING_LENGTH 36 /* Total length of a UUID string */ /* Positions for required hyphens (dashes) in UUID strings */ #define UUID_HYPHEN1_OFFSET 8 #define UUID_HYPHEN2_OFFSET 13 #define UUID_HYPHEN3_OFFSET 18 #define UUID_HYPHEN4_OFFSET 23 /****************************************************************************** * * ACPI AML Debugger * *****************************************************************************/ #define ACPI_DEBUGGER_MAX_ARGS ACPI_METHOD_NUM_ARGS + 4 /* Max command line arguments */ #define ACPI_DB_LINE_BUFFER_SIZE 512 #define ACPI_DEBUGGER_COMMAND_PROMPT '-' #define ACPI_DEBUGGER_EXECUTE_PROMPT '%' #endif /* _ACCONFIG_H */ src/acpica/source/include/acconvert.h000066400000000000000000000262021465205512700201560ustar00rootroot00000000000000/****************************************************************************** * * Module Name: acapps - common include for ACPI applications/tools * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef _ACCONVERT #define _ACCONVERT /* Definitions for comment state */ #define ASL_COMMENT_STANDARD 1 #define ASLCOMMENT_INLINE 2 #define ASL_COMMENT_OPEN_PAREN 3 #define ASL_COMMENT_CLOSE_PAREN 4 #define ASL_COMMENT_CLOSE_BRACE 5 /* Definitions for comment print function*/ #define AML_COMMENT_STANDARD 1 #define AMLCOMMENT_INLINE 2 #define AML_COMMENT_END_NODE 3 #define AML_NAMECOMMENT 4 #define AML_COMMENT_CLOSE_BRACE 5 #define AML_COMMENT_ENDBLK 6 #define AML_COMMENT_INCLUDE 7 #ifdef ACPI_ASL_COMPILER /* * cvcompiler */ void CvProcessComment ( ASL_COMMENT_STATE CurrentState, char *StringBuffer, int c1); void CvProcessCommentType2 ( ASL_COMMENT_STATE CurrentState, char *StringBuffer); UINT32 CvCalculateCommentLengths( ACPI_PARSE_OBJECT *Op); void CvProcessCommentState ( char input); char* CvAppendInlineComment ( char *InlineComment, char *ToAdd); void CvAddToCommentList ( char* ToAdd); void CvPlaceComment ( UINT8 Type, char *CommentString); UINT32 CvParseOpBlockType ( ACPI_PARSE_OBJECT *Op); ACPI_COMMENT_NODE* CvCommentNodeCalloc ( void); void CgWriteAmlDefBlockComment ( ACPI_PARSE_OBJECT *Op); void CgWriteOneAmlComment ( ACPI_PARSE_OBJECT *Op, char* CommentToPrint, UINT8 InputOption); void CgWriteAmlComment ( ACPI_PARSE_OBJECT *Op); /* * cvparser */ void CvInitFileTree ( ACPI_TABLE_HEADER *Table, FILE *RootFile); void CvClearOpComments ( ACPI_PARSE_OBJECT *Op); ACPI_FILE_NODE* CvFilenameExists ( char *Filename, ACPI_FILE_NODE *Head); void CvLabelFileNode ( ACPI_PARSE_OBJECT *Op); void CvCaptureListComments ( ACPI_PARSE_STATE *ParserState, ACPI_COMMENT_NODE *ListHead, ACPI_COMMENT_NODE *ListTail); void CvCaptureCommentsOnly ( ACPI_PARSE_STATE *ParserState); void CvCaptureComments ( ACPI_WALK_STATE *WalkState); void CvTransferComments ( ACPI_PARSE_OBJECT *Op); /* * cvdisasm */ void CvSwitchFiles ( UINT32 level, ACPI_PARSE_OBJECT *op); BOOLEAN CvFileHasSwitched ( ACPI_PARSE_OBJECT *Op); void CvCloseParenWriteComment ( ACPI_PARSE_OBJECT *Op, UINT32 Level); void CvCloseBraceWriteComment ( ACPI_PARSE_OBJECT *Op, UINT32 Level); void CvPrintOneCommentList ( ACPI_COMMENT_NODE *CommentList, UINT32 Level); void CvPrintOneCommentType ( ACPI_PARSE_OBJECT *Op, UINT8 CommentType, char* EndStr, UINT32 Level); #endif #endif /* _ACCONVERT */ src/acpica/source/include/acdebug.h000066400000000000000000000420251465205512700175650ustar00rootroot00000000000000/****************************************************************************** * * Name: acdebug.h - ACPI/AML debugger * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACDEBUG_H__ #define __ACDEBUG_H__ /* The debugger is used in conjunction with the disassembler most of time */ #ifdef ACPI_DISASSEMBLER #include "acdisasm.h" #endif #define ACPI_DEBUG_BUFFER_SIZE 0x4000 /* 16K buffer for return objects */ #define ACPI_DEBUG_LENGTH_FORMAT " (%.4X bits, %.3X bytes)" typedef struct acpi_db_command_info { const char *Name; /* Command Name */ UINT8 MinArgs; /* Minimum arguments required */ } ACPI_DB_COMMAND_INFO; typedef struct acpi_db_command_help { UINT8 LineCount; /* Number of help lines */ char *Invocation; /* Command Invocation */ char *Description; /* Command Description */ } ACPI_DB_COMMAND_HELP; typedef struct acpi_db_argument_info { const char *Name; /* Argument Name */ } ACPI_DB_ARGUMENT_INFO; typedef struct acpi_db_execute_walk { UINT32 Count; UINT32 MaxCount; char NameSeg[ACPI_NAMESEG_SIZE + 1]; } ACPI_DB_EXECUTE_WALK; #define PARAM_LIST(pl) pl #define EX_NO_SINGLE_STEP 1 #define EX_SINGLE_STEP 2 #define EX_ALL 4 /* * dbxface - external debugger interfaces */ ACPI_DBR_DEPENDENT_RETURN_OK ( ACPI_STATUS AcpiDbSingleStep ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, UINT32 OpType)) ACPI_DBR_DEPENDENT_RETURN_VOID ( void AcpiDbSignalBreakPoint ( ACPI_WALK_STATE *WalkState)) /* * dbcmds - debug commands and output routines */ ACPI_NAMESPACE_NODE * AcpiDbConvertToNode ( char *InString); void AcpiDbDisplayTableInfo ( char *TableArg); void AcpiDbDisplayTemplate ( char *BufferArg); void AcpiDbUnloadAcpiTable ( char *Name); void AcpiDbSendNotify ( char *Name, UINT32 Value); void AcpiDbDisplayInterfaces ( char *ActionArg, char *InterfaceNameArg); ACPI_STATUS AcpiDbSleep ( char *ObjectArg); void AcpiDbTrace ( char *EnableArg, char *MethodArg, char *OnceArg); void AcpiDbDisplayLocks ( void); void AcpiDbDisplayResources ( char *ObjectArg); ACPI_HW_DEPENDENT_RETURN_VOID ( void AcpiDbDisplayGpes ( void)) void AcpiDbDisplayHandlers ( void); ACPI_HW_DEPENDENT_RETURN_VOID ( void AcpiDbGenerateGpe ( char *GpeArg, char *BlockArg)) ACPI_HW_DEPENDENT_RETURN_VOID ( void AcpiDbGenerateSci ( void)) void AcpiDbExecuteTest ( char *TypeArg); /* * dbconvert - miscellaneous conversion routines */ ACPI_STATUS AcpiDbHexCharToValue ( int HexChar, UINT8 *ReturnValue); ACPI_STATUS AcpiDbConvertToPackage ( char *String, ACPI_OBJECT *Object); ACPI_STATUS AcpiDbConvertToObject ( ACPI_OBJECT_TYPE Type, char *String, ACPI_OBJECT *Object); UINT8 * AcpiDbEncodePldBuffer ( ACPI_PLD_INFO *PldInfo); void AcpiDbDumpPldBuffer ( ACPI_OBJECT *ObjDesc); /* * dbmethod - control method commands */ void AcpiDbSetMethodBreakpoint ( char *Location, ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); void AcpiDbSetMethodCallBreakpoint ( ACPI_PARSE_OBJECT *Op); void AcpiDbSetMethodData ( char *TypeArg, char *IndexArg, char *ValueArg); ACPI_STATUS AcpiDbDisassembleMethod ( char *Name); void AcpiDbDisassembleAml ( char *Statements, ACPI_PARSE_OBJECT *Op); void AcpiDbEvaluatePredefinedNames ( void); void AcpiDbEvaluateAll ( char *NameSeg); /* * dbnames - namespace commands */ void AcpiDbSetScope ( char *Name); void AcpiDbDumpNamespace ( char *StartArg, char *DepthArg); void AcpiDbDumpNamespacePaths ( void); void AcpiDbDumpNamespaceByOwner ( char *OwnerArg, char *DepthArg); ACPI_STATUS AcpiDbFindNameInNamespace ( char *NameArg); void AcpiDbCheckPredefinedNames ( void); ACPI_STATUS AcpiDbDisplayObjects ( char *ObjTypeArg, char *DisplayCountArg); void AcpiDbCheckIntegrity ( void); void AcpiDbFindReferences ( char *ObjectArg); void AcpiDbGetBusInfo ( void); ACPI_STATUS AcpiDbDisplayFields ( UINT32 AddressSpaceId); /* * dbdisply - debug display commands */ void AcpiDbDisplayMethodInfo ( ACPI_PARSE_OBJECT *Op); void AcpiDbDecodeAndDisplayObject ( char *Target, char *OutputType); ACPI_DBR_DEPENDENT_RETURN_VOID ( void AcpiDbDisplayResultObject ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState)) ACPI_STATUS AcpiDbDisplayAllMethods ( char *DisplayCountArg); void AcpiDbDisplayArguments ( void); void AcpiDbDisplayLocals ( void); void AcpiDbDisplayResults ( void); void AcpiDbDisplayCallingTree ( void); void AcpiDbDisplayObjectType ( char *ObjectArg); ACPI_DBR_DEPENDENT_RETURN_VOID ( void AcpiDbDisplayArgumentObject ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState)) /* * dbexec - debugger control method execution */ void AcpiDbExecute ( char *Name, char **Args, ACPI_OBJECT_TYPE *Types, UINT32 Flags); void AcpiDbCreateExecutionThread ( char *MethodNameArg, char **Arguments, ACPI_OBJECT_TYPE *Types); void AcpiDbCreateExecutionThreads ( char *NumThreadsArg, char *NumLoopsArg, char *MethodNameArg); void AcpiDbDeleteObjects ( UINT32 Count, ACPI_OBJECT *Objects); #ifdef ACPI_DBG_TRACK_ALLOCATIONS UINT32 AcpiDbGetCacheInfo ( ACPI_MEMORY_LIST *Cache); #endif /* * dbfileio - Debugger file I/O commands */ ACPI_OBJECT_TYPE AcpiDbMatchArgument ( char *UserArgument, ACPI_DB_ARGUMENT_INFO *Arguments); void AcpiDbCloseDebugFile ( void); void AcpiDbOpenDebugFile ( char *Name); ACPI_STATUS AcpiDbLoadAcpiTable ( char *Filename); ACPI_STATUS AcpiDbLoadTables ( ACPI_NEW_TABLE_DESC *ListHead); /* * dbhistry - debugger HISTORY command */ void AcpiDbAddToHistory ( char *CommandLine); void AcpiDbDisplayHistory ( void); char * AcpiDbGetFromHistory ( char *CommandNumArg); char * AcpiDbGetHistoryByIndex ( UINT32 CommanddNum); /* * dbinput - user front-end to the AML debugger */ ACPI_STATUS AcpiDbCommandDispatch ( char *InputBuffer, ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); void ACPI_SYSTEM_XFACE AcpiDbExecuteThread ( void *Context); ACPI_STATUS AcpiDbUserCommands ( void); char * AcpiDbGetNextToken ( char *String, char **Next, ACPI_OBJECT_TYPE *ReturnType); /* * dbobject */ void AcpiDbDecodeInternalObject ( ACPI_OPERAND_OBJECT *ObjDesc); void AcpiDbDisplayInternalObject ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState); void AcpiDbDecodeArguments ( ACPI_WALK_STATE *WalkState); void AcpiDbDecodeLocals ( ACPI_WALK_STATE *WalkState); void AcpiDbDumpMethodInfo ( ACPI_STATUS Status, ACPI_WALK_STATE *WalkState); /* * dbstats - Generation and display of ACPI table statistics */ void AcpiDbGenerateStatistics ( ACPI_PARSE_OBJECT *Root, BOOLEAN IsMethod); ACPI_STATUS AcpiDbDisplayStatistics ( char *TypeArg); /* * dbutils - AML debugger utilities */ void AcpiDbSetOutputDestination ( UINT32 Where); void AcpiDbDumpExternalObject ( ACPI_OBJECT *ObjDesc, UINT32 Level); void AcpiDbPrepNamestring ( char *Name); ACPI_NAMESPACE_NODE * AcpiDbLocalNsLookup ( char *Name); void AcpiDbUint32ToHexString ( UINT32 Value, char *Buffer); void AcpiDbGenerateInterrupt ( char *GsivArg); #endif /* __ACDEBUG_H__ */ src/acpica/source/include/acdisasm.h000066400000000000000000001361471465205512700177700ustar00rootroot00000000000000/****************************************************************************** * * Name: acdisasm.h - AML disassembler * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACDISASM_H__ #define __ACDISASM_H__ #include "amlresrc.h" #define BLOCK_NONE 0 #define BLOCK_PAREN 1 #define BLOCK_BRACE 2 #define BLOCK_COMMA_LIST 4 #define ACPI_DEFAULT_RESNAME *(UINT32 *) "__RD" /* * Raw table data header. Used by disassembler and data table compiler. * Do not change. */ #define ACPI_RAW_TABLE_DATA_HEADER "Raw Table Data" typedef struct acpi_dmtable_info { UINT8 Opcode; UINT16 Offset; char *Name; UINT8 Flags; } ACPI_DMTABLE_INFO; /* Values for Flags field above */ #define DT_LENGTH 0x01 /* Field is a subtable length */ #define DT_FLAG 0x02 /* Field is a flag value */ #define DT_NON_ZERO 0x04 /* Field must be non-zero */ #define DT_OPTIONAL 0x08 /* Field is optional */ #define DT_DESCRIBES_OPTIONAL 0x10 /* Field describes an optional field (length, etc.) */ #define DT_COUNT 0x20 /* Currently not used */ /* * Values for Opcode above. * Note: 0-7 must not change, they are used as a flag shift value. Other * than those, new values can be added wherever appropriate. */ typedef enum { /* Simple Data Types */ ACPI_DMT_FLAG0 = 0, ACPI_DMT_FLAG1 = 1, ACPI_DMT_FLAG2 = 2, ACPI_DMT_FLAG3 = 3, ACPI_DMT_FLAG4 = 4, ACPI_DMT_FLAG5 = 5, ACPI_DMT_FLAG6 = 6, ACPI_DMT_FLAG7 = 7, ACPI_DMT_FLAGS0, ACPI_DMT_FLAGS1, ACPI_DMT_FLAGS2, ACPI_DMT_FLAGS8_2, ACPI_DMT_FLAGS4, ACPI_DMT_FLAGS4_0, ACPI_DMT_FLAGS4_4, ACPI_DMT_FLAGS4_8, ACPI_DMT_FLAGS4_12, ACPI_DMT_FLAGS16_16, ACPI_DMT_UINT8, ACPI_DMT_UINT16, ACPI_DMT_UINT24, ACPI_DMT_UINT32, ACPI_DMT_UINT40, ACPI_DMT_UINT48, ACPI_DMT_UINT56, ACPI_DMT_UINT64, ACPI_DMT_BUF7, ACPI_DMT_BUF10, ACPI_DMT_BUF12, ACPI_DMT_BUF16, ACPI_DMT_BUF18, ACPI_DMT_BUF128, ACPI_DMT_SIG, ACPI_DMT_STRING, ACPI_DMT_NAME4, ACPI_DMT_NAME6, ACPI_DMT_NAME8, /* Types that are decoded to strings and miscellaneous */ ACPI_DMT_ACCWIDTH, ACPI_DMT_CHKSUM, ACPI_DMT_GAS, ACPI_DMT_SPACEID, ACPI_DMT_UNICODE, ACPI_DMT_UUID, /* Types used only for the Data Table Compiler */ ACPI_DMT_BUFFER, ACPI_DMT_RAW_BUFFER, /* Large, multiple line buffer */ ACPI_DMT_DEVICE_PATH, ACPI_DMT_LABEL, ACPI_DMT_PCI_PATH, /* Types that are specific to particular ACPI tables */ ACPI_DMT_AEST, ACPI_DMT_AEST_CACHE, ACPI_DMT_AEST_GIC, ACPI_DMT_AEST_RES, ACPI_DMT_AEST_XFACE, ACPI_DMT_AEST_XRUPT, ACPI_DMT_AGDI, ACPI_DMT_ASF, ACPI_DMT_ASPT, ACPI_DMT_CDAT, ACPI_DMT_CEDT, ACPI_DMT_DMAR, ACPI_DMT_DMAR_SCOPE, ACPI_DMT_EINJACT, ACPI_DMT_EINJINST, ACPI_DMT_ERSTACT, ACPI_DMT_ERSTINST, ACPI_DMT_FADTPM, ACPI_DMT_GTDT, ACPI_DMT_HEST, ACPI_DMT_HESTNTFY, ACPI_DMT_HESTNTYP, ACPI_DMT_HMAT, ACPI_DMT_IORTMEM, ACPI_DMT_IVRS, ACPI_DMT_IVRS_DE, ACPI_DMT_IVRS_UNTERMINATED_STRING, ACPI_DMT_LPIT, ACPI_DMT_MADT, ACPI_DMT_MPAM_LOCATOR, ACPI_DMT_NFIT, ACPI_DMT_PCCT, ACPI_DMT_PHAT, ACPI_DMT_PMTT, ACPI_DMT_PMTT_VENDOR, ACPI_DMT_PPTT, ACPI_DMT_RGRT, ACPI_DMT_RHCT, ACPI_DMT_SDEI, ACPI_DMT_SDEV, ACPI_DMT_SLIC, ACPI_DMT_SRAT, ACPI_DMT_TPM2, ACPI_DMT_VIOT, ACPI_DMT_WPBT_UNICODE, /* Special opcodes */ ACPI_DMT_EXTRA_TEXT, ACPI_DMT_EXIT } ACPI_ENTRY_TYPES; typedef void (*ACPI_DMTABLE_HANDLER) ( ACPI_TABLE_HEADER *Table); typedef ACPI_STATUS (*ACPI_CMTABLE_HANDLER) ( void **PFieldList); typedef struct acpi_dmtable_data { char *Signature; ACPI_DMTABLE_INFO *TableInfo; ACPI_DMTABLE_HANDLER TableHandler; ACPI_CMTABLE_HANDLER CmTableHandler; const unsigned char *Template; } ACPI_DMTABLE_DATA; typedef struct acpi_op_walk_info { ACPI_WALK_STATE *WalkState; ACPI_PARSE_OBJECT *MappingOp; UINT8 *PreviousAml; UINT8 *StartAml; UINT32 Level; UINT32 LastLevel; UINT32 Count; UINT32 BitOffset; UINT32 Flags; UINT32 AmlOffset; } ACPI_OP_WALK_INFO; /* * TBD - another copy of this is in asltypes.h, fix */ #ifndef ASL_WALK_CALLBACK_DEFINED typedef ACPI_STATUS (*ASL_WALK_CALLBACK) ( ACPI_PARSE_OBJECT *Op, UINT32 Level, void *Context); #define ASL_WALK_CALLBACK_DEFINED #endif typedef void (*ACPI_RESOURCE_HANDLER) ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); typedef struct acpi_resource_tag { UINT32 BitIndex; char *Tag; } ACPI_RESOURCE_TAG; /* Strings used for decoding flags to ASL keywords */ extern const char *AcpiGbl_WordDecode[]; extern const char *AcpiGbl_IrqDecode[]; extern const char *AcpiGbl_LockRule[]; extern const char *AcpiGbl_AccessTypes[]; extern const char *AcpiGbl_UpdateRules[]; extern const char *AcpiGbl_MatchOps[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestProcError[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestCacheRsrc[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestTlbRsrc[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestGenRsrc[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestMemError[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestSmmuError[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestVendorError[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestGicError[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestXface[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestXrupt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAgdi[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoApmtNode[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf4[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsfHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAspt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsptHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAspt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAspt1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAspt2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoBdat[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoBoot[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoBert[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoBgrt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCcel[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCdatTableHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCdatHeader[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCdat0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCdat1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCdat2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCdat3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCdat4[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCdat5[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCdatEntries[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCedtHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCedt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCedt1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCedt1_te[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCpep[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCpep0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Device[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Addr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Size[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Name[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2OemData[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDbgp[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmarHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmarScope[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar5[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoEcdt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoEinj[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoEinj0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoErst[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoErst0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoFacs[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoFadt1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoFadt2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoFadt3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoFadt5[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoFadt6[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoFpdtHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoGas[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtEl2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHeader[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest6[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest7[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest8[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest9[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest10[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest11[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHestNotify[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHestBank[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHpet[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoLpitHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoLpit0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoLpit1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1b[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1c[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmatHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort0a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort1a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort3a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort3b[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort3c[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort4[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort5[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort6[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort6a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortAcc[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortMap[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortPad[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHware1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHware23[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsMemory[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs4[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8b[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8c[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsCidString[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsCidInteger[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHid[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsUidString[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsUidInteger[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHidString[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHidInteger[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt4[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt5[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt6[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt7[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt8[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt9[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11b[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt12[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt13[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt15[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt15a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt16[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt17[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt18[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt19[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt20[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt21[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt22[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt23[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt24[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt25[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt26[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt27[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt128[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadtHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMchi[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpam0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1A[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1B[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1C[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1D[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1E[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1F[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1G[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpam1Deps[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpam2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpst[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0A[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0B[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpst1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMpst2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMsct[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMsct0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfitHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit4[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit5[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit7[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhatHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhat0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhat0a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhat1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhat1a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhat1b[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmttVendor[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmttHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcctHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct5[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPpttHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPrmtHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPrmtModule[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPrmtHandler[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRasf[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRas2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRas2PccDesc[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRgrt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRgrt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRhct[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRhctNodeHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRhctIsa1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRhctIsaPad[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRhctCmo1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRhctMmu1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRhctHartInfo1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRhctHartInfo2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoS3ptHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSbst[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdei[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdev[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdevHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0b[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdevSecCompHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdevSecCompId[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdevSecCompMem[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1b[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSlic[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSlit[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSpcr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSpmi[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSratHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat5[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat6[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat7[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoStao[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSvkl[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSvkl0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaClient[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoTdel[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm211[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm23[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm23a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoViot[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoViotHeader[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoViot1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoViot2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoViot3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoViot4[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoWaet[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoWdat[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoWdat0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoWddt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoWdrt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoWsmt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoXenv[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoGeneric[][2]; /* * dmtable and ahtable */ extern const ACPI_DMTABLE_DATA AcpiDmTableData[]; extern const AH_TABLE AcpiGbl_SupportedTables[]; UINT8 AcpiDmGenerateChecksum ( void *Table, UINT32 Length, UINT8 OriginalChecksum); const ACPI_DMTABLE_DATA * AcpiDmGetTableData ( char *Signature); void AcpiDmDumpDataTable ( ACPI_TABLE_HEADER *Table); ACPI_STATUS AcpiDmDumpTable ( UINT32 TableLength, UINT32 TableOffset, void *Table, UINT32 SubtableLength, ACPI_DMTABLE_INFO *Info); void AcpiDmLineHeader ( UINT32 Offset, UINT32 ByteLength, char *Name); void AcpiDmLineHeader2 ( UINT32 Offset, UINT32 ByteLength, char *Name, UINT32 Value); /* * dmtbdump */ void AcpiDmDumpBuffer ( void *Table, UINT32 BufferOffset, UINT32 Length, UINT32 AbsoluteOffset, char *Header); void AcpiDmDumpUnicode ( void *Table, UINT32 BufferOffset, UINT32 ByteLength); void AcpiDmDumpAest ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpApmt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpAsf ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpAspt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpCcel ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpCdat ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpCedt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpCpep ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpCsrt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpDbg2 ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpDmar ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpDrtm ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpEinj ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpErst ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpFadt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpFpdt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpGtdt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpHest ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpHmat ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpIort ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpIvrs ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpLpit ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpMadt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpMcfg ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpMpam ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpMpst ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpMsct ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpNfit ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpPcct ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpPdtt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpPhat ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpPmtt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpPptt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpPrmt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpRas2 ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpRgrt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpRhct ( ACPI_TABLE_HEADER *Table); UINT32 AcpiDmDumpRsdp ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpRsdt ( ACPI_TABLE_HEADER *Table); UINT32 AcpiDmDumpS3pt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpSdev ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpSlic ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpSlit ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpSrat ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpStao ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpSvkl ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpTcpa ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpTdel ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpTpm2 ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpViot ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpWdat ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpWpbt ( ACPI_TABLE_HEADER *Table); void AcpiDmDumpXsdt ( ACPI_TABLE_HEADER *Table); /* * dmwalk */ void AcpiDmDisassemble ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Origin, UINT32 NumOpcodes); void AcpiDmWalkParseTree ( ACPI_PARSE_OBJECT *Op, ASL_WALK_CALLBACK DescendingCallback, ASL_WALK_CALLBACK AscendingCallback, void *Context); /* * dmopcode */ void AcpiDmDisassembleOneOp ( ACPI_WALK_STATE *WalkState, ACPI_OP_WALK_INFO *Info, ACPI_PARSE_OBJECT *Op); UINT32 AcpiDmListType ( ACPI_PARSE_OBJECT *Op); void AcpiDmMethodFlags ( ACPI_PARSE_OBJECT *Op); void AcpiDmDisplayTargetPathname ( ACPI_PARSE_OBJECT *Op); void AcpiDmNotifyDescription ( ACPI_PARSE_OBJECT *Op); void AcpiDmPredefinedDescription ( ACPI_PARSE_OBJECT *Op); void AcpiDmFieldPredefinedDescription ( ACPI_PARSE_OBJECT *Op); void AcpiDmFieldFlags ( ACPI_PARSE_OBJECT *Op); void AcpiDmAddressSpace ( UINT8 SpaceId); void AcpiDmRegionFlags ( ACPI_PARSE_OBJECT *Op); void AcpiDmMatchOp ( ACPI_PARSE_OBJECT *Op); /* * dmnames */ UINT32 AcpiDmDumpName ( UINT32 Name); ACPI_STATUS AcpiPsDisplayObjectPathname ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); void AcpiDmNamestring ( char *Name); /* * dmbuffer */ void AcpiDmDisasmByteList ( UINT32 Level, UINT8 *ByteData, UINT32 ByteCount); void AcpiDmByteList ( ACPI_OP_WALK_INFO *Info, ACPI_PARSE_OBJECT *Op); void AcpiDmCheckForHardwareId ( ACPI_PARSE_OBJECT *Op); void AcpiDmDecompressEisaId ( UINT32 EncodedId); BOOLEAN AcpiDmIsUuidBuffer ( ACPI_PARSE_OBJECT *Op); BOOLEAN AcpiDmIsUnicodeBuffer ( ACPI_PARSE_OBJECT *Op); BOOLEAN AcpiDmIsStringBuffer ( ACPI_PARSE_OBJECT *Op); BOOLEAN AcpiDmIsPldBuffer ( ACPI_PARSE_OBJECT *Op); /* * dmdeferred */ ACPI_STATUS AcpiDmParseDeferredOps ( ACPI_PARSE_OBJECT *Root); /* * dmextern */ ACPI_STATUS AcpiDmAddToExternalFileList ( char *PathList); void AcpiDmClearExternalFileList ( void); void AcpiDmAddOpToExternalList ( ACPI_PARSE_OBJECT *Op, char *Path, UINT8 Type, UINT32 Value, UINT16 Flags); void AcpiDmCreateSubobjectForExternal ( UINT8 Type, ACPI_NAMESPACE_NODE **Node, UINT32 Value); void AcpiDmAddNodeToExternalList ( ACPI_NAMESPACE_NODE *Node, UINT8 Type, UINT32 Value, UINT16 Flags); void AcpiDmAddExternalListToNamespace ( void); void AcpiDmAddOneExternalToNamespace ( char *Path, UINT8 Type, UINT32 Value); UINT32 AcpiDmGetUnresolvedExternalMethodCount ( void); void AcpiDmClearExternalList ( void); void AcpiDmEmitExternals ( void); void AcpiDmEmitExternal ( ACPI_PARSE_OBJECT *NameOp, ACPI_PARSE_OBJECT *TypeOp); void AcpiDmUnresolvedWarning ( UINT8 Type); void AcpiDmGetExternalsFromFile ( void); void AcpiDmMarkExternalConflict ( ACPI_NAMESPACE_NODE *Node); /* * dmresrc */ void AcpiDmDumpInteger8 ( UINT8 Value, const char *Name); void AcpiDmDumpInteger16 ( UINT16 Value, const char *Name); void AcpiDmDumpInteger32 ( UINT32 Value, const char *Name); void AcpiDmDumpInteger64 ( UINT64 Value, const char *Name); void AcpiDmResourceTemplate ( ACPI_OP_WALK_INFO *Info, ACPI_PARSE_OBJECT *Op, UINT8 *ByteData, UINT32 ByteCount); ACPI_STATUS AcpiDmIsResourceTemplate ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); void AcpiDmBitList ( UINT16 Mask); void AcpiDmDescriptorName ( void); /* * dmresrcl */ void AcpiDmWordDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmDwordDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmExtendedDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmQwordDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmMemory24Descriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmMemory32Descriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmFixedMemory32Descriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmGenericRegisterDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmInterruptDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmVendorLargeDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmGpioDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmPinFunctionDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmPinConfigDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmPinGroupDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmPinGroupFunctionDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmPinGroupConfigDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmSerialBusDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmVendorCommon ( const char *Name, UINT8 *ByteData, UINT32 Length, UINT32 Level); void AcpiDmClockInputDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); /* * dmresrcs */ void AcpiDmIrqDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmDmaDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmFixedDmaDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmIoDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmFixedIoDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmStartDependentDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmEndDependentDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); void AcpiDmVendorSmallDescriptor ( ACPI_OP_WALK_INFO *Info, AML_RESOURCE *Resource, UINT32 Length, UINT32 Level); /* * dmutils */ void AcpiDmDecodeAttribute ( UINT8 Attribute); void AcpiDmIndent ( UINT32 Level); BOOLEAN AcpiDmCommaIfListMember ( ACPI_PARSE_OBJECT *Op); void AcpiDmCommaIfFieldMember ( ACPI_PARSE_OBJECT *Op); /* * dmrestag */ void AcpiDmFindResources ( ACPI_PARSE_OBJECT *Root); void AcpiDmCheckResourceReference ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState); /* * dmcstyle */ BOOLEAN AcpiDmCheckForSymbolicOpcode ( ACPI_PARSE_OBJECT *Op, ACPI_OP_WALK_INFO *Info); void AcpiDmCloseOperator ( ACPI_PARSE_OBJECT *Op); /* * dmtables */ ACPI_STATUS AcpiDmProcessSwitch ( ACPI_PARSE_OBJECT *Op); void AcpiDmClearTempList( void); /* * dmtables */ void AdDisassemblerHeader ( char *Filename, UINT8 TableType); #define ACPI_IS_AML_TABLE 0 #define ACPI_IS_DATA_TABLE 1 /* * adisasm */ ACPI_STATUS AdAmlDisassemble ( BOOLEAN OutToFile, char *Filename, char *Prefix, char **OutFilename); ACPI_STATUS AdGetLocalTables ( void); ACPI_STATUS AdParseTable ( ACPI_TABLE_HEADER *Table, ACPI_OWNER_ID *OwnerId, BOOLEAN LoadTable, BOOLEAN External); ACPI_STATUS AdDisplayTables ( char *Filename, ACPI_TABLE_HEADER *Table); ACPI_STATUS AdDisplayStatistics ( void); /* * dmwalk */ UINT32 AcpiDmBlockType ( ACPI_PARSE_OBJECT *Op); #endif /* __ACDISASM_H__ */ src/acpica/source/include/acdispat.h000066400000000000000000000435451465205512700177730ustar00rootroot00000000000000/****************************************************************************** * * Name: acdispat.h - dispatcher (parser to interpreter interface) * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef _ACDISPAT_H_ #define _ACDISPAT_H_ #define NAMEOF_LOCAL_NTE "__L0" #define NAMEOF_ARG_NTE "__A0" /* * dsargs - execution of dynamic arguments for static objects */ ACPI_STATUS AcpiDsGetBufferFieldArguments ( ACPI_OPERAND_OBJECT *ObjDesc); ACPI_STATUS AcpiDsGetBankFieldArguments ( ACPI_OPERAND_OBJECT *ObjDesc); ACPI_STATUS AcpiDsGetRegionArguments ( ACPI_OPERAND_OBJECT *RgnDesc); ACPI_STATUS AcpiDsGetBufferArguments ( ACPI_OPERAND_OBJECT *ObjDesc); ACPI_STATUS AcpiDsGetPackageArguments ( ACPI_OPERAND_OBJECT *ObjDesc); /* * dscontrol - support for execution control opcodes */ ACPI_STATUS AcpiDsExecBeginControlOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); ACPI_STATUS AcpiDsExecEndControlOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); /* * dsopcode - support for late operand evaluation */ ACPI_STATUS AcpiDsEvalBufferFieldOperands ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); ACPI_STATUS AcpiDsEvalRegionOperands ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); ACPI_STATUS AcpiDsEvalTableRegionOperands ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); ACPI_STATUS AcpiDsEvalDataObjectOperands ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, ACPI_OPERAND_OBJECT *ObjDesc); ACPI_STATUS AcpiDsEvalBankFieldOperands ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); ACPI_STATUS AcpiDsInitializeRegion ( ACPI_HANDLE ObjHandle); /* * dsexec - Parser/Interpreter interface, method execution callbacks */ ACPI_STATUS AcpiDsGetPredicateValue ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT *ResultObj); ACPI_STATUS AcpiDsExecBeginOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT **OutOp); ACPI_STATUS AcpiDsExecEndOp ( ACPI_WALK_STATE *State); /* * dsfield - Parser/Interpreter interface for AML fields */ ACPI_STATUS AcpiDsCreateField ( ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE *RegionNode, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiDsCreateBankField ( ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE *RegionNode, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiDsCreateIndexField ( ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE *RegionNode, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiDsCreateBufferField ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiDsInitFieldObjects ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState); /* * dsload - Parser/Interpreter interface */ ACPI_STATUS AcpiDsInitCallbacks ( ACPI_WALK_STATE *WalkState, UINT32 PassNumber); /* dsload - pass 1 namespace load callbacks */ ACPI_STATUS AcpiDsLoad1BeginOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT **OutOp); ACPI_STATUS AcpiDsLoad1EndOp ( ACPI_WALK_STATE *WalkState); /* dsload - pass 2 namespace load callbacks */ ACPI_STATUS AcpiDsLoad2BeginOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT **OutOp); ACPI_STATUS AcpiDsLoad2EndOp ( ACPI_WALK_STATE *WalkState); /* * dsmthdat - method data (locals/args) */ ACPI_STATUS AcpiDsStoreObjectToLocal ( UINT8 Type, UINT32 Index, ACPI_OPERAND_OBJECT *SrcDesc, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiDsMethodDataGetEntry ( UINT16 Opcode, UINT32 Index, ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT ***Node); void AcpiDsMethodDataDeleteAll ( ACPI_WALK_STATE *WalkState); BOOLEAN AcpiDsIsMethodValue ( ACPI_OPERAND_OBJECT *ObjDesc); ACPI_STATUS AcpiDsMethodDataGetValue ( UINT8 Type, UINT32 Index, ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT **DestDesc); ACPI_STATUS AcpiDsMethodDataInitArgs ( ACPI_OPERAND_OBJECT **Params, UINT32 MaxParamCount, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiDsMethodDataGetNode ( UINT8 Type, UINT32 Index, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE **Node); void AcpiDsMethodDataInit ( ACPI_WALK_STATE *WalkState); /* * dsmethod - Parser/Interpreter interface - control method parsing */ ACPI_STATUS AcpiDsAutoSerializeMethod ( ACPI_NAMESPACE_NODE *Node, ACPI_OPERAND_OBJECT *ObjDesc); ACPI_STATUS AcpiDsCallControlMethod ( ACPI_THREAD_STATE *Thread, ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); ACPI_STATUS AcpiDsRestartControlMethod ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT *ReturnDesc); void AcpiDsTerminateControlMethod ( ACPI_OPERAND_OBJECT *MethodDesc, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiDsBeginMethodExecution ( ACPI_NAMESPACE_NODE *MethodNode, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiDsMethodError ( ACPI_STATUS Status, ACPI_WALK_STATE *WalkState); /* * dsinit */ ACPI_STATUS AcpiDsInitializeObjects ( UINT32 TableIndex, ACPI_NAMESPACE_NODE *StartNode); /* * dsobject - Parser/Interpreter interface - object initialization and conversion */ ACPI_STATUS AcpiDsBuildInternalObject ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, ACPI_OPERAND_OBJECT **ObjDescPtr); ACPI_STATUS AcpiDsBuildInternalBufferObj ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, UINT32 BufferLength, ACPI_OPERAND_OBJECT **ObjDescPtr); ACPI_STATUS AcpiDsBuildInternalPackageObj ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *op, UINT32 PackageLength, ACPI_OPERAND_OBJECT **ObjDesc); ACPI_STATUS AcpiDsInitObjectFromOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, UINT16 Opcode, ACPI_OPERAND_OBJECT **ObjDesc); ACPI_STATUS AcpiDsCreateNode ( ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE *Node, ACPI_PARSE_OBJECT *Op); /* * dspkginit - Package object initialization */ ACPI_STATUS AcpiDsInitPackageElement ( UINT8 ObjectType, ACPI_OPERAND_OBJECT *SourceObject, ACPI_GENERIC_STATE *State, void *Context); /* * dsutils - Parser/Interpreter interface utility routines */ void AcpiDsClearImplicitReturn ( ACPI_WALK_STATE *WalkState); BOOLEAN AcpiDsDoImplicitReturn ( ACPI_OPERAND_OBJECT *ReturnDesc, ACPI_WALK_STATE *WalkState, BOOLEAN AddReference); BOOLEAN AcpiDsIsResultUsed ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState); void AcpiDsDeleteResultIfNotUsed ( ACPI_PARSE_OBJECT *Op, ACPI_OPERAND_OBJECT *ResultObj, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiDsCreateOperand ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Arg, UINT32 ArgsRemaining); ACPI_STATUS AcpiDsCreateOperands ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *FirstArg); ACPI_STATUS AcpiDsResolveOperands ( ACPI_WALK_STATE *WalkState); void AcpiDsClearOperands ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiDsEvaluateNamePath ( ACPI_WALK_STATE *WalkState); /* * dswscope - Scope Stack manipulation */ ACPI_STATUS AcpiDsScopeStackPush ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_TYPE Type, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiDsScopeStackPop ( ACPI_WALK_STATE *WalkState); void AcpiDsScopeStackClear ( ACPI_WALK_STATE *WalkState); /* * dswstate - parser WALK_STATE management routines */ ACPI_STATUS AcpiDsObjStackPush ( void *Object, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiDsObjStackPop ( UINT32 PopCount, ACPI_WALK_STATE *WalkState); ACPI_WALK_STATE * AcpiDsCreateWalkState ( ACPI_OWNER_ID OwnerId, ACPI_PARSE_OBJECT *Origin, ACPI_OPERAND_OBJECT *MthDesc, ACPI_THREAD_STATE *Thread); ACPI_STATUS AcpiDsInitAmlWalk ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE *MethodNode, UINT8 *AmlStart, UINT32 AmlLength, ACPI_EVALUATE_INFO *Info, UINT8 PassNumber); void AcpiDsObjStackPopAndDelete ( UINT32 PopCount, ACPI_WALK_STATE *WalkState); void AcpiDsDeleteWalkState ( ACPI_WALK_STATE *WalkState); ACPI_WALK_STATE * AcpiDsPopWalkState ( ACPI_THREAD_STATE *Thread); void AcpiDsPushWalkState ( ACPI_WALK_STATE *WalkState, ACPI_THREAD_STATE *Thread); ACPI_STATUS AcpiDsResultStackClear ( ACPI_WALK_STATE *WalkState); ACPI_WALK_STATE * AcpiDsGetCurrentWalkState ( ACPI_THREAD_STATE *Thread); ACPI_STATUS AcpiDsResultPop ( ACPI_OPERAND_OBJECT **Object, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiDsResultPush ( ACPI_OPERAND_OBJECT *Object, ACPI_WALK_STATE *WalkState); /* * dsdebug - parser debugging routines */ void AcpiDsDumpMethodStack ( ACPI_STATUS Status, ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); #endif /* _ACDISPAT_H_ */ src/acpica/source/include/acevents.h000066400000000000000000000374301465205512700200070ustar00rootroot00000000000000/****************************************************************************** * * Name: acevents.h - Event subcomponent prototypes and defines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACEVENTS_H__ #define __ACEVENTS_H__ /* * Conditions to trigger post enabling GPE polling: * It is not sufficient to trigger edge-triggered GPE with specific GPE * chips, software need to poll once after enabling. */ #ifdef ACPI_USE_GPE_POLLING #define ACPI_GPE_IS_POLLING_NEEDED(__gpe__) \ ((__gpe__)->RuntimeCount == 1 && \ (__gpe__)->Flags & ACPI_GPE_INITIALIZED && \ ((__gpe__)->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_EDGE_TRIGGERED) #else #define ACPI_GPE_IS_POLLING_NEEDED(__gpe__) FALSE #endif /* * evevent */ ACPI_STATUS AcpiEvInitializeEvents ( void); ACPI_STATUS AcpiEvInstallXruptHandlers ( void); UINT32 AcpiEvFixedEventDetect ( void); /* * evmisc */ BOOLEAN AcpiEvIsNotifyObject ( ACPI_NAMESPACE_NODE *Node); UINT32 AcpiEvGetGpeNumberIndex ( UINT32 GpeNumber); ACPI_STATUS AcpiEvQueueNotifyRequest ( ACPI_NAMESPACE_NODE *Node, UINT32 NotifyValue); /* * evglock - Global Lock support */ ACPI_STATUS AcpiEvInitGlobalLockHandler ( void); ACPI_HW_DEPENDENT_RETURN_OK ( ACPI_STATUS AcpiEvAcquireGlobalLock( UINT16 Timeout)) ACPI_HW_DEPENDENT_RETURN_OK ( ACPI_STATUS AcpiEvReleaseGlobalLock( void)) ACPI_STATUS AcpiEvRemoveGlobalLockHandler ( void); /* * evgpe - Low-level GPE support */ UINT32 AcpiEvGpeDetect ( ACPI_GPE_XRUPT_INFO *GpeXruptList); ACPI_STATUS AcpiEvUpdateGpeEnableMask ( ACPI_GPE_EVENT_INFO *GpeEventInfo); ACPI_STATUS AcpiEvEnableGpe ( ACPI_GPE_EVENT_INFO *GpeEventInfo); ACPI_STATUS AcpiEvMaskGpe ( ACPI_GPE_EVENT_INFO *GpeEventInfo, BOOLEAN IsMasked); ACPI_STATUS AcpiEvAddGpeReference ( ACPI_GPE_EVENT_INFO *GpeEventInfo, BOOLEAN ClearOnEnable); ACPI_STATUS AcpiEvRemoveGpeReference ( ACPI_GPE_EVENT_INFO *GpeEventInfo); ACPI_GPE_EVENT_INFO * AcpiEvGetGpeEventInfo ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber); ACPI_GPE_EVENT_INFO * AcpiEvLowGetGpeInfo ( UINT32 GpeNumber, ACPI_GPE_BLOCK_INFO *GpeBlock); ACPI_STATUS AcpiEvFinishGpe ( ACPI_GPE_EVENT_INFO *GpeEventInfo); UINT32 AcpiEvDetectGpe ( ACPI_NAMESPACE_NODE *GpeDevice, ACPI_GPE_EVENT_INFO *GpeEventInfo, UINT32 GpeNumber); /* * evgpeblk - Upper-level GPE block support */ ACPI_STATUS AcpiEvCreateGpeBlock ( ACPI_NAMESPACE_NODE *GpeDevice, UINT64 Address, UINT8 SpaceId, UINT32 RegisterCount, UINT16 GpeBlockBaseNumber, UINT32 InterruptNumber, ACPI_GPE_BLOCK_INFO **ReturnGpeBlock); ACPI_STATUS AcpiEvInitializeGpeBlock ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context); ACPI_HW_DEPENDENT_RETURN_OK ( ACPI_STATUS AcpiEvDeleteGpeBlock ( ACPI_GPE_BLOCK_INFO *GpeBlock)) UINT32 AcpiEvGpeDispatch ( ACPI_NAMESPACE_NODE *GpeDevice, ACPI_GPE_EVENT_INFO *GpeEventInfo, UINT32 GpeNumber); /* * evgpeinit - GPE initialization and update */ ACPI_STATUS AcpiEvGpeInitialize ( void); ACPI_HW_DEPENDENT_RETURN_VOID ( void AcpiEvUpdateGpes ( ACPI_OWNER_ID TableOwnerId)) ACPI_STATUS AcpiEvMatchGpeMethod ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); /* * evgpeutil - GPE utilities */ ACPI_STATUS AcpiEvWalkGpeList ( ACPI_GPE_CALLBACK GpeWalkCallback, void *Context); ACPI_STATUS AcpiEvGetGpeDevice ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context); ACPI_STATUS AcpiEvGetGpeXruptBlock ( UINT32 InterruptNumber, ACPI_GPE_XRUPT_INFO **GpeXruptBlock); ACPI_STATUS AcpiEvDeleteGpeXrupt ( ACPI_GPE_XRUPT_INFO *GpeXrupt); ACPI_STATUS AcpiEvDeleteGpeHandlers ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context); /* * evhandler - Address space handling */ ACPI_OPERAND_OBJECT * AcpiEvFindRegionHandler ( ACPI_ADR_SPACE_TYPE SpaceId, ACPI_OPERAND_OBJECT *HandlerObj); BOOLEAN AcpiEvHasDefaultHandler ( ACPI_NAMESPACE_NODE *Node, ACPI_ADR_SPACE_TYPE SpaceId); ACPI_STATUS AcpiEvInstallRegionHandlers ( void); ACPI_STATUS AcpiEvInstallSpaceHandler ( ACPI_NAMESPACE_NODE *Node, ACPI_ADR_SPACE_TYPE SpaceId, ACPI_ADR_SPACE_HANDLER Handler, ACPI_ADR_SPACE_SETUP Setup, void *Context); /* * evregion - Operation region support */ ACPI_STATUS AcpiEvInitializeOpRegions ( void); ACPI_STATUS AcpiEvAddressSpaceDispatch ( ACPI_OPERAND_OBJECT *RegionObj, ACPI_OPERAND_OBJECT *FieldObj, UINT32 Function, UINT32 RegionOffset, UINT32 BitWidth, UINT64 *Value); ACPI_STATUS AcpiEvAttachRegion ( ACPI_OPERAND_OBJECT *HandlerObj, ACPI_OPERAND_OBJECT *RegionObj, BOOLEAN AcpiNsIsLocked); void AcpiEvDetachRegion ( ACPI_OPERAND_OBJECT *RegionObj, BOOLEAN AcpiNsIsLocked); void AcpiEvExecuteRegMethods ( ACPI_NAMESPACE_NODE *Node, ACPI_ADR_SPACE_TYPE SpaceId, UINT32 Function); ACPI_STATUS AcpiEvExecuteRegMethod ( ACPI_OPERAND_OBJECT *RegionObj, UINT32 Function); /* * evregini - Region initialization and setup */ ACPI_STATUS AcpiEvSystemMemoryRegionSetup ( ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext); ACPI_STATUS AcpiEvIoSpaceRegionSetup ( ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext); ACPI_STATUS AcpiEvPciConfigRegionSetup ( ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext); ACPI_STATUS AcpiEvCmosRegionSetup ( ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext); ACPI_STATUS AcpiEvPciBarRegionSetup ( ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext); ACPI_STATUS AcpiEvDataTableRegionSetup ( ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext); ACPI_STATUS AcpiEvDefaultRegionSetup ( ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext); ACPI_STATUS AcpiEvInitializeRegion ( ACPI_OPERAND_OBJECT *RegionObj); BOOLEAN AcpiEvIsPciRootBridge ( ACPI_NAMESPACE_NODE *Node); /* * evsci - SCI (System Control Interrupt) handling/dispatch */ UINT32 ACPI_SYSTEM_XFACE AcpiEvGpeXruptHandler ( void *Context); UINT32 AcpiEvSciDispatch ( void); UINT32 AcpiEvInstallSciHandler ( void); ACPI_STATUS AcpiEvRemoveAllSciHandlers ( void); ACPI_HW_DEPENDENT_RETURN_VOID ( void AcpiEvTerminate ( void)) #endif /* __ACEVENTS_H__ */ src/acpica/source/include/acexcep.h000066400000000000000000000642211465205512700176050ustar00rootroot00000000000000/****************************************************************************** * * Name: acexcep.h - Exception codes returned by the ACPI subsystem * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACEXCEP_H__ #define __ACEXCEP_H__ /* This module contains all possible exception codes for ACPI_STATUS */ /* * Exception code classes */ #define AE_CODE_ENVIRONMENTAL 0x0000 /* General ACPICA environment */ #define AE_CODE_PROGRAMMER 0x1000 /* External ACPICA interface caller */ #define AE_CODE_ACPI_TABLES 0x2000 /* ACPI tables */ #define AE_CODE_AML 0x3000 /* From executing AML code */ #define AE_CODE_CONTROL 0x4000 /* Internal control codes */ #define AE_CODE_MAX 0x4000 #define AE_CODE_MASK 0xF000 /* * Macros to insert the exception code classes */ #define EXCEP_ENV(code) ((ACPI_STATUS) (code | AE_CODE_ENVIRONMENTAL)) #define EXCEP_PGM(code) ((ACPI_STATUS) (code | AE_CODE_PROGRAMMER)) #define EXCEP_TBL(code) ((ACPI_STATUS) (code | AE_CODE_ACPI_TABLES)) #define EXCEP_AML(code) ((ACPI_STATUS) (code | AE_CODE_AML)) #define EXCEP_CTL(code) ((ACPI_STATUS) (code | AE_CODE_CONTROL)) /* * Exception info table. The "Description" field is used only by the * ACPICA help application (acpihelp). */ typedef struct acpi_exception_info { char *Name; #if defined (ACPI_HELP_APP) || defined (ACPI_ASL_COMPILER) char *Description; #endif } ACPI_EXCEPTION_INFO; #if defined (ACPI_HELP_APP) || defined (ACPI_ASL_COMPILER) #define EXCEP_TXT(Name,Description) {Name, Description} #else #define EXCEP_TXT(Name,Description) {Name} #endif /* * Success is always zero, failure is non-zero */ #define ACPI_SUCCESS(a) (!(a)) #define ACPI_FAILURE(a) (a) #define AE_OK (ACPI_STATUS) 0x0000 #define ACPI_ENV_EXCEPTION(Status) (((Status) & AE_CODE_MASK) == AE_CODE_ENVIRONMENTAL) #define ACPI_AML_EXCEPTION(Status) (((Status) & AE_CODE_MASK) == AE_CODE_AML) #define ACPI_PROG_EXCEPTION(Status) (((Status) & AE_CODE_MASK) == AE_CODE_PROGRAMMER) #define ACPI_TABLE_EXCEPTION(Status) (((Status) & AE_CODE_MASK) == AE_CODE_ACPI_TABLES) #define ACPI_CNTL_EXCEPTION(Status) (((Status) & AE_CODE_MASK) == AE_CODE_CONTROL) /* * Environmental exceptions */ #define AE_ERROR EXCEP_ENV (0x0001) #define AE_NO_ACPI_TABLES EXCEP_ENV (0x0002) #define AE_NO_NAMESPACE EXCEP_ENV (0x0003) #define AE_NO_MEMORY EXCEP_ENV (0x0004) #define AE_NOT_FOUND EXCEP_ENV (0x0005) #define AE_NOT_EXIST EXCEP_ENV (0x0006) #define AE_ALREADY_EXISTS EXCEP_ENV (0x0007) #define AE_TYPE EXCEP_ENV (0x0008) #define AE_NULL_OBJECT EXCEP_ENV (0x0009) #define AE_NULL_ENTRY EXCEP_ENV (0x000A) #define AE_BUFFER_OVERFLOW EXCEP_ENV (0x000B) #define AE_STACK_OVERFLOW EXCEP_ENV (0x000C) #define AE_STACK_UNDERFLOW EXCEP_ENV (0x000D) #define AE_NOT_IMPLEMENTED EXCEP_ENV (0x000E) #define AE_SUPPORT EXCEP_ENV (0x000F) #define AE_LIMIT EXCEP_ENV (0x0010) #define AE_TIME EXCEP_ENV (0x0011) #define AE_ACQUIRE_DEADLOCK EXCEP_ENV (0x0012) #define AE_RELEASE_DEADLOCK EXCEP_ENV (0x0013) #define AE_NOT_ACQUIRED EXCEP_ENV (0x0014) #define AE_ALREADY_ACQUIRED EXCEP_ENV (0x0015) #define AE_NO_HARDWARE_RESPONSE EXCEP_ENV (0x0016) #define AE_NO_GLOBAL_LOCK EXCEP_ENV (0x0017) #define AE_ABORT_METHOD EXCEP_ENV (0x0018) #define AE_SAME_HANDLER EXCEP_ENV (0x0019) #define AE_NO_HANDLER EXCEP_ENV (0x001A) #define AE_OWNER_ID_LIMIT EXCEP_ENV (0x001B) #define AE_NOT_CONFIGURED EXCEP_ENV (0x001C) #define AE_ACCESS EXCEP_ENV (0x001D) #define AE_IO_ERROR EXCEP_ENV (0x001E) #define AE_NUMERIC_OVERFLOW EXCEP_ENV (0x001F) #define AE_HEX_OVERFLOW EXCEP_ENV (0x0020) #define AE_DECIMAL_OVERFLOW EXCEP_ENV (0x0021) #define AE_OCTAL_OVERFLOW EXCEP_ENV (0x0022) #define AE_END_OF_TABLE EXCEP_ENV (0x0023) #define AE_CODE_ENV_MAX 0x0023 /* * Programmer exceptions */ #define AE_BAD_PARAMETER EXCEP_PGM (0x0001) #define AE_BAD_CHARACTER EXCEP_PGM (0x0002) #define AE_BAD_PATHNAME EXCEP_PGM (0x0003) #define AE_BAD_DATA EXCEP_PGM (0x0004) #define AE_BAD_HEX_CONSTANT EXCEP_PGM (0x0005) #define AE_BAD_OCTAL_CONSTANT EXCEP_PGM (0x0006) #define AE_BAD_DECIMAL_CONSTANT EXCEP_PGM (0x0007) #define AE_MISSING_ARGUMENTS EXCEP_PGM (0x0008) #define AE_BAD_ADDRESS EXCEP_PGM (0x0009) #define AE_CODE_PGM_MAX 0x0009 /* * Acpi table exceptions */ #define AE_BAD_SIGNATURE EXCEP_TBL (0x0001) #define AE_BAD_HEADER EXCEP_TBL (0x0002) #define AE_BAD_CHECKSUM EXCEP_TBL (0x0003) #define AE_BAD_VALUE EXCEP_TBL (0x0004) #define AE_INVALID_TABLE_LENGTH EXCEP_TBL (0x0005) #define AE_CODE_TBL_MAX 0x0005 /* * AML exceptions. These are caused by problems with * the actual AML byte stream */ #define AE_AML_BAD_OPCODE EXCEP_AML (0x0001) #define AE_AML_NO_OPERAND EXCEP_AML (0x0002) #define AE_AML_OPERAND_TYPE EXCEP_AML (0x0003) #define AE_AML_OPERAND_VALUE EXCEP_AML (0x0004) #define AE_AML_UNINITIALIZED_LOCAL EXCEP_AML (0x0005) #define AE_AML_UNINITIALIZED_ARG EXCEP_AML (0x0006) #define AE_AML_UNINITIALIZED_ELEMENT EXCEP_AML (0x0007) #define AE_AML_NUMERIC_OVERFLOW EXCEP_AML (0x0008) #define AE_AML_REGION_LIMIT EXCEP_AML (0x0009) #define AE_AML_BUFFER_LIMIT EXCEP_AML (0x000A) #define AE_AML_PACKAGE_LIMIT EXCEP_AML (0x000B) #define AE_AML_DIVIDE_BY_ZERO EXCEP_AML (0x000C) #define AE_AML_BAD_NAME EXCEP_AML (0x000D) #define AE_AML_NAME_NOT_FOUND EXCEP_AML (0x000E) #define AE_AML_INTERNAL EXCEP_AML (0x000F) #define AE_AML_INVALID_SPACE_ID EXCEP_AML (0x0010) #define AE_AML_STRING_LIMIT EXCEP_AML (0x0011) #define AE_AML_NO_RETURN_VALUE EXCEP_AML (0x0012) #define AE_AML_METHOD_LIMIT EXCEP_AML (0x0013) #define AE_AML_NOT_OWNER EXCEP_AML (0x0014) #define AE_AML_MUTEX_ORDER EXCEP_AML (0x0015) #define AE_AML_MUTEX_NOT_ACQUIRED EXCEP_AML (0x0016) #define AE_AML_INVALID_RESOURCE_TYPE EXCEP_AML (0x0017) #define AE_AML_INVALID_INDEX EXCEP_AML (0x0018) #define AE_AML_REGISTER_LIMIT EXCEP_AML (0x0019) #define AE_AML_NO_WHILE EXCEP_AML (0x001A) #define AE_AML_ALIGNMENT EXCEP_AML (0x001B) #define AE_AML_NO_RESOURCE_END_TAG EXCEP_AML (0x001C) #define AE_AML_BAD_RESOURCE_VALUE EXCEP_AML (0x001D) #define AE_AML_CIRCULAR_REFERENCE EXCEP_AML (0x001E) #define AE_AML_BAD_RESOURCE_LENGTH EXCEP_AML (0x001F) #define AE_AML_ILLEGAL_ADDRESS EXCEP_AML (0x0020) #define AE_AML_LOOP_TIMEOUT EXCEP_AML (0x0021) #define AE_AML_UNINITIALIZED_NODE EXCEP_AML (0x0022) #define AE_AML_TARGET_TYPE EXCEP_AML (0x0023) #define AE_AML_PROTOCOL EXCEP_AML (0x0024) #define AE_AML_BUFFER_LENGTH EXCEP_AML (0x0025) #define AE_CODE_AML_MAX 0x0025 /* * Internal exceptions used for control */ #define AE_CTRL_RETURN_VALUE EXCEP_CTL (0x0001) #define AE_CTRL_PENDING EXCEP_CTL (0x0002) #define AE_CTRL_TERMINATE EXCEP_CTL (0x0003) #define AE_CTRL_TRUE EXCEP_CTL (0x0004) #define AE_CTRL_FALSE EXCEP_CTL (0x0005) #define AE_CTRL_DEPTH EXCEP_CTL (0x0006) #define AE_CTRL_END EXCEP_CTL (0x0007) #define AE_CTRL_TRANSFER EXCEP_CTL (0x0008) #define AE_CTRL_BREAK EXCEP_CTL (0x0009) #define AE_CTRL_CONTINUE EXCEP_CTL (0x000A) #define AE_CTRL_PARSE_CONTINUE EXCEP_CTL (0x000B) #define AE_CTRL_PARSE_PENDING EXCEP_CTL (0x000C) #define AE_CODE_CTRL_MAX 0x000C /* Exception strings for AcpiFormatException */ #ifdef ACPI_DEFINE_EXCEPTION_TABLE /* * String versions of the exception codes above * These strings must match the corresponding defines exactly */ static const ACPI_EXCEPTION_INFO AcpiGbl_ExceptionNames_Env[] = { EXCEP_TXT ("AE_OK", "No error"), EXCEP_TXT ("AE_ERROR", "Unspecified error"), EXCEP_TXT ("AE_NO_ACPI_TABLES", "ACPI tables could not be found"), EXCEP_TXT ("AE_NO_NAMESPACE", "A namespace has not been loaded"), EXCEP_TXT ("AE_NO_MEMORY", "Insufficient dynamic memory"), EXCEP_TXT ("AE_NOT_FOUND", "A requested entity is not found"), EXCEP_TXT ("AE_NOT_EXIST", "A required entity does not exist"), EXCEP_TXT ("AE_ALREADY_EXISTS", "An entity already exists"), EXCEP_TXT ("AE_TYPE", "The object type is incorrect"), EXCEP_TXT ("AE_NULL_OBJECT", "A required object was missing"), EXCEP_TXT ("AE_NULL_ENTRY", "The requested object does not exist"), EXCEP_TXT ("AE_BUFFER_OVERFLOW", "The buffer provided is too small"), EXCEP_TXT ("AE_STACK_OVERFLOW", "An internal stack overflowed"), EXCEP_TXT ("AE_STACK_UNDERFLOW", "An internal stack underflowed"), EXCEP_TXT ("AE_NOT_IMPLEMENTED", "The feature is not implemented"), EXCEP_TXT ("AE_SUPPORT", "The feature is not supported"), EXCEP_TXT ("AE_LIMIT", "A predefined limit was exceeded"), EXCEP_TXT ("AE_TIME", "A time limit or timeout expired"), EXCEP_TXT ("AE_ACQUIRE_DEADLOCK", "Internal error, attempt was made to acquire a mutex in improper order"), EXCEP_TXT ("AE_RELEASE_DEADLOCK", "Internal error, attempt was made to release a mutex in improper order"), EXCEP_TXT ("AE_NOT_ACQUIRED", "An attempt to release a mutex or Global Lock without a previous acquire"), EXCEP_TXT ("AE_ALREADY_ACQUIRED", "Internal error, attempt was made to acquire a mutex twice"), EXCEP_TXT ("AE_NO_HARDWARE_RESPONSE", "Hardware did not respond after an I/O operation"), EXCEP_TXT ("AE_NO_GLOBAL_LOCK", "There is no FACS Global Lock"), EXCEP_TXT ("AE_ABORT_METHOD", "A control method was aborted"), EXCEP_TXT ("AE_SAME_HANDLER", "Attempt was made to install the same handler that is already installed"), EXCEP_TXT ("AE_NO_HANDLER", "A handler for the operation is not installed"), EXCEP_TXT ("AE_OWNER_ID_LIMIT", "There are no more Owner IDs available for ACPI tables or control methods"), EXCEP_TXT ("AE_NOT_CONFIGURED", "The interface is not part of the current subsystem configuration"), EXCEP_TXT ("AE_ACCESS", "Permission denied for the requested operation"), EXCEP_TXT ("AE_IO_ERROR", "An I/O error occurred"), EXCEP_TXT ("AE_NUMERIC_OVERFLOW", "Overflow during string-to-integer conversion"), EXCEP_TXT ("AE_HEX_OVERFLOW", "Overflow during ASCII hex-to-binary conversion"), EXCEP_TXT ("AE_DECIMAL_OVERFLOW", "Overflow during ASCII decimal-to-binary conversion"), EXCEP_TXT ("AE_OCTAL_OVERFLOW", "Overflow during ASCII octal-to-binary conversion"), EXCEP_TXT ("AE_END_OF_TABLE", "Reached the end of table") }; static const ACPI_EXCEPTION_INFO AcpiGbl_ExceptionNames_Pgm[] = { EXCEP_TXT (NULL, NULL), EXCEP_TXT ("AE_BAD_PARAMETER", "A parameter is out of range or invalid"), EXCEP_TXT ("AE_BAD_CHARACTER", "An invalid character was found in a name"), EXCEP_TXT ("AE_BAD_PATHNAME", "An invalid character was found in a pathname"), EXCEP_TXT ("AE_BAD_DATA", "A package or buffer contained incorrect data"), EXCEP_TXT ("AE_BAD_HEX_CONSTANT", "Invalid character in a Hex constant"), EXCEP_TXT ("AE_BAD_OCTAL_CONSTANT", "Invalid character in an Octal constant"), EXCEP_TXT ("AE_BAD_DECIMAL_CONSTANT", "Invalid character in a Decimal constant"), EXCEP_TXT ("AE_MISSING_ARGUMENTS", "Too few arguments were passed to a control method"), EXCEP_TXT ("AE_BAD_ADDRESS", "An illegal null I/O address") }; static const ACPI_EXCEPTION_INFO AcpiGbl_ExceptionNames_Tbl[] = { EXCEP_TXT (NULL, NULL), EXCEP_TXT ("AE_BAD_SIGNATURE", "An ACPI table has an invalid signature"), EXCEP_TXT ("AE_BAD_HEADER", "Invalid field in an ACPI table header"), EXCEP_TXT ("AE_BAD_CHECKSUM", "An ACPI table checksum is not correct"), EXCEP_TXT ("AE_BAD_VALUE", "An invalid value was found in a table"), EXCEP_TXT ("AE_INVALID_TABLE_LENGTH", "The FADT or FACS has improper length") }; static const ACPI_EXCEPTION_INFO AcpiGbl_ExceptionNames_Aml[] = { EXCEP_TXT (NULL, NULL), EXCEP_TXT ("AE_AML_BAD_OPCODE", "Invalid AML opcode encountered"), EXCEP_TXT ("AE_AML_NO_OPERAND", "A required operand is missing"), EXCEP_TXT ("AE_AML_OPERAND_TYPE", "An operand of an incorrect type was encountered"), EXCEP_TXT ("AE_AML_OPERAND_VALUE", "The operand had an inappropriate or invalid value"), EXCEP_TXT ("AE_AML_UNINITIALIZED_LOCAL", "Method tried to use an uninitialized local variable"), EXCEP_TXT ("AE_AML_UNINITIALIZED_ARG", "Method tried to use an uninitialized argument"), EXCEP_TXT ("AE_AML_UNINITIALIZED_ELEMENT", "Method tried to use an empty package element"), EXCEP_TXT ("AE_AML_NUMERIC_OVERFLOW", "Overflow during BCD conversion or other"), EXCEP_TXT ("AE_AML_REGION_LIMIT", "Tried to access beyond the end of an Operation Region"), EXCEP_TXT ("AE_AML_BUFFER_LIMIT", "Tried to access beyond the end of a buffer"), EXCEP_TXT ("AE_AML_PACKAGE_LIMIT", "Tried to access beyond the end of a package"), EXCEP_TXT ("AE_AML_DIVIDE_BY_ZERO", "During execution of AML Divide operator"), EXCEP_TXT ("AE_AML_BAD_NAME", "An ACPI name contains invalid character(s)"), EXCEP_TXT ("AE_AML_NAME_NOT_FOUND", "Could not resolve a named reference"), EXCEP_TXT ("AE_AML_INTERNAL", "An internal error within the interpreter"), EXCEP_TXT ("AE_AML_INVALID_SPACE_ID", "An Operation Region SpaceID is invalid"), EXCEP_TXT ("AE_AML_STRING_LIMIT", "String is longer than 200 characters"), EXCEP_TXT ("AE_AML_NO_RETURN_VALUE", "A method did not return a required value"), EXCEP_TXT ("AE_AML_METHOD_LIMIT", "A control method reached the maximum reentrancy limit of 255"), EXCEP_TXT ("AE_AML_NOT_OWNER", "A thread tried to release a mutex that it does not own"), EXCEP_TXT ("AE_AML_MUTEX_ORDER", "Mutex SyncLevel release mismatch"), EXCEP_TXT ("AE_AML_MUTEX_NOT_ACQUIRED", "Attempt to release a mutex that was not previously acquired"), EXCEP_TXT ("AE_AML_INVALID_RESOURCE_TYPE", "Invalid resource type in resource list"), EXCEP_TXT ("AE_AML_INVALID_INDEX", "Invalid Argx or Localx (x too large)"), EXCEP_TXT ("AE_AML_REGISTER_LIMIT", "Bank value or Index value beyond range of register"), EXCEP_TXT ("AE_AML_NO_WHILE", "Break or Continue without a While"), EXCEP_TXT ("AE_AML_ALIGNMENT", "Non-aligned memory transfer on platform that does not support this"), EXCEP_TXT ("AE_AML_NO_RESOURCE_END_TAG", "No End Tag in a resource list"), EXCEP_TXT ("AE_AML_BAD_RESOURCE_VALUE", "Invalid value of a resource element"), EXCEP_TXT ("AE_AML_CIRCULAR_REFERENCE", "Two references refer to each other"), EXCEP_TXT ("AE_AML_BAD_RESOURCE_LENGTH", "The length of a Resource Descriptor in the AML is incorrect"), EXCEP_TXT ("AE_AML_ILLEGAL_ADDRESS", "A memory, I/O, or PCI configuration address is invalid"), EXCEP_TXT ("AE_AML_LOOP_TIMEOUT", "An AML While loop exceeded the maximum execution time"), EXCEP_TXT ("AE_AML_UNINITIALIZED_NODE", "A namespace node is uninitialized or unresolved"), EXCEP_TXT ("AE_AML_TARGET_TYPE", "A target operand of an incorrect type was encountered"), EXCEP_TXT ("AE_AML_PROTOCOL", "Violation of a fixed ACPI protocol"), EXCEP_TXT ("AE_AML_BUFFER_LENGTH", "The length of the buffer is invalid/incorrect") }; static const ACPI_EXCEPTION_INFO AcpiGbl_ExceptionNames_Ctrl[] = { EXCEP_TXT (NULL, NULL), EXCEP_TXT ("AE_CTRL_RETURN_VALUE", "A Method returned a value"), EXCEP_TXT ("AE_CTRL_PENDING", "Method is calling another method"), EXCEP_TXT ("AE_CTRL_TERMINATE", "Terminate the executing method"), EXCEP_TXT ("AE_CTRL_TRUE", "An If or While predicate result"), EXCEP_TXT ("AE_CTRL_FALSE", "An If or While predicate result"), EXCEP_TXT ("AE_CTRL_DEPTH", "Maximum search depth has been reached"), EXCEP_TXT ("AE_CTRL_END", "An If or While predicate is false"), EXCEP_TXT ("AE_CTRL_TRANSFER", "Transfer control to called method"), EXCEP_TXT ("AE_CTRL_BREAK", "A Break has been executed"), EXCEP_TXT ("AE_CTRL_CONTINUE", "A Continue has been executed"), EXCEP_TXT ("AE_CTRL_PARSE_CONTINUE", "Used to skip over bad opcodes"), EXCEP_TXT ("AE_CTRL_PARSE_PENDING", "Used to implement AML While loops") }; #endif /* EXCEPTION_TABLE */ #endif /* __ACEXCEP_H__ */ src/acpica/source/include/acglobal.h000066400000000000000000000612701465205512700177420ustar00rootroot00000000000000/****************************************************************************** * * Name: acglobal.h - Declarations for global variables * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACGLOBAL_H__ #define __ACGLOBAL_H__ /***************************************************************************** * * Globals related to the incoming ACPI tables * ****************************************************************************/ /* Master list of all ACPI tables that were found in the RSDT/XSDT */ ACPI_GLOBAL (ACPI_TABLE_LIST, AcpiGbl_RootTableList); /* DSDT information. Used to check for DSDT corruption */ ACPI_GLOBAL (ACPI_TABLE_HEADER *, AcpiGbl_DSDT); ACPI_GLOBAL (ACPI_TABLE_HEADER, AcpiGbl_OriginalDsdtHeader); ACPI_INIT_GLOBAL (char *, AcpiGbl_CDAT, NULL); ACPI_INIT_GLOBAL (UINT32, AcpiGbl_DsdtIndex, ACPI_INVALID_TABLE_INDEX); ACPI_INIT_GLOBAL (UINT32, AcpiGbl_FacsIndex, ACPI_INVALID_TABLE_INDEX); ACPI_INIT_GLOBAL (UINT32, AcpiGbl_XFacsIndex, ACPI_INVALID_TABLE_INDEX); ACPI_INIT_GLOBAL (UINT32, AcpiGbl_FadtIndex, ACPI_INVALID_TABLE_INDEX); #if (!ACPI_REDUCED_HARDWARE) ACPI_GLOBAL (ACPI_TABLE_FACS *, AcpiGbl_FACS); #endif /* !ACPI_REDUCED_HARDWARE */ /* These addresses are calculated from the FADT Event Block addresses */ ACPI_GLOBAL (ACPI_GENERIC_ADDRESS, AcpiGbl_XPm1aStatus); ACPI_GLOBAL (ACPI_GENERIC_ADDRESS, AcpiGbl_XPm1aEnable); ACPI_GLOBAL (ACPI_GENERIC_ADDRESS, AcpiGbl_XPm1bStatus); ACPI_GLOBAL (ACPI_GENERIC_ADDRESS, AcpiGbl_XPm1bEnable); /* * Handle both ACPI 1.0 and ACPI 2.0+ Integer widths. The integer width is * determined by the revision of the DSDT: If the DSDT revision is less than * 2, use only the lower 32 bits of the internal 64-bit Integer. */ ACPI_GLOBAL (UINT8, AcpiGbl_IntegerBitWidth); ACPI_GLOBAL (UINT8, AcpiGbl_IntegerByteWidth); ACPI_GLOBAL (UINT8, AcpiGbl_IntegerNybbleWidth); /***************************************************************************** * * Mutual exclusion within the ACPICA subsystem * ****************************************************************************/ /* * Predefined mutex objects. This array contains the * actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs. * (The table maps local handles to the real OS handles) */ ACPI_GLOBAL (ACPI_MUTEX_INFO, AcpiGbl_MutexInfo[ACPI_NUM_MUTEX]); /* * Global lock mutex is an actual AML mutex object * Global lock semaphore works in conjunction with the actual global lock * Global lock spinlock is used for "pending" handshake */ ACPI_GLOBAL (ACPI_OPERAND_OBJECT *, AcpiGbl_GlobalLockMutex); ACPI_GLOBAL (ACPI_SEMAPHORE, AcpiGbl_GlobalLockSemaphore); ACPI_GLOBAL (ACPI_SPINLOCK, AcpiGbl_GlobalLockPendingLock); ACPI_GLOBAL (UINT16, AcpiGbl_GlobalLockHandle); ACPI_GLOBAL (BOOLEAN, AcpiGbl_GlobalLockAcquired); ACPI_GLOBAL (BOOLEAN, AcpiGbl_GlobalLockPresent); ACPI_GLOBAL (BOOLEAN, AcpiGbl_GlobalLockPending); /* * Spinlocks are used for interfaces that can be possibly called at * interrupt level */ ACPI_GLOBAL (ACPI_SPINLOCK, AcpiGbl_GpeLock); /* For GPE data structs and registers */ ACPI_GLOBAL (ACPI_SPINLOCK, AcpiGbl_HardwareLock); /* For ACPI H/W except GPE registers */ ACPI_GLOBAL (ACPI_SPINLOCK, AcpiGbl_ReferenceCountLock); /* Mutex for _OSI support */ ACPI_GLOBAL (ACPI_MUTEX, AcpiGbl_OsiMutex); /* Reader/Writer lock is used for namespace walk and dynamic table unload */ ACPI_GLOBAL (ACPI_RW_LOCK, AcpiGbl_NamespaceRwLock); /***************************************************************************** * * Miscellaneous globals * ****************************************************************************/ /* Object caches */ ACPI_GLOBAL (ACPI_CACHE_T *, AcpiGbl_NamespaceCache); ACPI_GLOBAL (ACPI_CACHE_T *, AcpiGbl_StateCache); ACPI_GLOBAL (ACPI_CACHE_T *, AcpiGbl_PsNodeCache); ACPI_GLOBAL (ACPI_CACHE_T *, AcpiGbl_PsNodeExtCache); ACPI_GLOBAL (ACPI_CACHE_T *, AcpiGbl_OperandCache); /* System */ ACPI_INIT_GLOBAL (UINT32, AcpiGbl_StartupFlags, 0); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_Shutdown, TRUE); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_EarlyInitialization, TRUE); /* Global handlers */ ACPI_GLOBAL (ACPI_GLOBAL_NOTIFY_HANDLER,AcpiGbl_GlobalNotify[2]); ACPI_GLOBAL (ACPI_EXCEPTION_HANDLER, AcpiGbl_ExceptionHandler); ACPI_GLOBAL (ACPI_INIT_HANDLER, AcpiGbl_InitHandler); ACPI_GLOBAL (ACPI_TABLE_HANDLER, AcpiGbl_TableHandler); ACPI_GLOBAL (void *, AcpiGbl_TableHandlerContext); ACPI_GLOBAL (ACPI_INTERFACE_HANDLER, AcpiGbl_InterfaceHandler); ACPI_GLOBAL (ACPI_SCI_HANDLER_INFO *, AcpiGbl_SciHandlerList); ACPI_GLOBAL (ACPI_GED_HANDLER_INFO *, AcpiGbl_GedHandlerList); /* Owner ID support */ ACPI_GLOBAL (UINT32, AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS]); ACPI_GLOBAL (UINT8, AcpiGbl_LastOwnerIdIndex); ACPI_GLOBAL (UINT8, AcpiGbl_NextOwnerIdOffset); /* Initialization sequencing */ ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_NamespaceInitialized, FALSE); /* Miscellaneous */ ACPI_GLOBAL (UINT32, AcpiGbl_OriginalMode); ACPI_GLOBAL (UINT32, AcpiGbl_NsLookupCount); ACPI_GLOBAL (UINT32, AcpiGbl_PsFindCount); ACPI_GLOBAL (UINT16, AcpiGbl_Pm1EnableRegisterSave); ACPI_GLOBAL (UINT8, AcpiGbl_DebuggerConfiguration); ACPI_GLOBAL (BOOLEAN, AcpiGbl_StepToNextCall); ACPI_GLOBAL (BOOLEAN, AcpiGbl_AcpiHardwarePresent); ACPI_GLOBAL (BOOLEAN, AcpiGbl_EventsInitialized); ACPI_GLOBAL (ACPI_INTERFACE_INFO *, AcpiGbl_SupportedInterfaces); ACPI_GLOBAL (ACPI_ADDRESS_RANGE *, AcpiGbl_AddressRangeList[ACPI_ADDRESS_RANGE_MAX]); /* Other miscellaneous, declared and initialized in utglobal */ extern const char *AcpiGbl_SleepStateNames[ACPI_S_STATE_COUNT]; extern const char *AcpiGbl_LowestDstateNames[ACPI_NUM_SxW_METHODS]; extern const char *AcpiGbl_HighestDstateNames[ACPI_NUM_SxD_METHODS]; extern const char *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS]; extern const char AcpiGbl_LowerHexDigits[]; extern const char AcpiGbl_UpperHexDigits[]; extern const ACPI_OPCODE_INFO AcpiGbl_AmlOpInfo[AML_NUM_OPCODES]; /* Lists for tracking memory allocations (debug only) */ #ifdef ACPI_DBG_TRACK_ALLOCATIONS ACPI_GLOBAL (ACPI_MEMORY_LIST *, AcpiGbl_GlobalList); ACPI_GLOBAL (ACPI_MEMORY_LIST *, AcpiGbl_NsNodeList); ACPI_GLOBAL (BOOLEAN, AcpiGbl_DisplayFinalMemStats); ACPI_GLOBAL (BOOLEAN, AcpiGbl_DisableMemTracking); ACPI_GLOBAL (BOOLEAN, AcpiGbl_VerboseLeakDump); #endif /***************************************************************************** * * ACPI Namespace * ****************************************************************************/ #define NUM_PREDEFINED_NAMES 10 ACPI_GLOBAL (ACPI_NAMESPACE_NODE, AcpiGbl_RootNodeStruct); ACPI_GLOBAL (ACPI_NAMESPACE_NODE *, AcpiGbl_RootNode); ACPI_GLOBAL (ACPI_NAMESPACE_NODE *, AcpiGbl_FadtGpeDevice); extern const UINT8 AcpiGbl_NsProperties [ACPI_NUM_NS_TYPES]; extern const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames [NUM_PREDEFINED_NAMES]; #ifdef ACPI_DEBUG_OUTPUT ACPI_GLOBAL (UINT32, AcpiGbl_CurrentNodeCount); ACPI_GLOBAL (UINT32, AcpiGbl_CurrentNodeSize); ACPI_GLOBAL (UINT32, AcpiGbl_MaxConcurrentNodeCount); ACPI_GLOBAL (ACPI_SIZE *, AcpiGbl_EntryStackPointer); ACPI_GLOBAL (ACPI_SIZE *, AcpiGbl_LowestStackPointer); ACPI_GLOBAL (UINT32, AcpiGbl_DeepestNesting); ACPI_INIT_GLOBAL (UINT32, AcpiGbl_NestingLevel, 0); #endif /***************************************************************************** * * Interpreter/Parser globals * ****************************************************************************/ /* Control method single step flag */ ACPI_GLOBAL (UINT8, AcpiGbl_CmSingleStep); ACPI_GLOBAL (ACPI_THREAD_STATE *, AcpiGbl_CurrentWalkList); ACPI_INIT_GLOBAL (ACPI_PARSE_OBJECT, *AcpiGbl_CurrentScope, NULL); /* ASL/ASL+ converter */ ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_CaptureComments, FALSE); ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_LastListHead, NULL); /***************************************************************************** * * Hardware globals * ****************************************************************************/ extern ACPI_BIT_REGISTER_INFO AcpiGbl_BitRegisterInfo[ACPI_NUM_BITREG]; ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeA); ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeB); ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeAS0); ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeBS0); /***************************************************************************** * * Event and GPE globals * ****************************************************************************/ #if (!ACPI_REDUCED_HARDWARE) ACPI_GLOBAL (UINT8, AcpiGbl_AllGpesInitialized); ACPI_GLOBAL (ACPI_GPE_XRUPT_INFO *, AcpiGbl_GpeXruptListHead); ACPI_GLOBAL (ACPI_GPE_BLOCK_INFO *, AcpiGbl_GpeFadtBlocks[ACPI_MAX_GPE_BLOCKS]); ACPI_GLOBAL (ACPI_GBL_EVENT_HANDLER, AcpiGbl_GlobalEventHandler); ACPI_GLOBAL (void *, AcpiGbl_GlobalEventHandlerContext); ACPI_GLOBAL (ACPI_FIXED_EVENT_HANDLER, AcpiGbl_FixedEventHandlers[ACPI_NUM_FIXED_EVENTS]); extern ACPI_FIXED_EVENT_INFO AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS]; #endif /* !ACPI_REDUCED_HARDWARE */ /***************************************************************************** * * Debug support * ****************************************************************************/ /* Event counters */ ACPI_GLOBAL (UINT32, AcpiMethodCount); ACPI_GLOBAL (UINT32, AcpiGpeCount); ACPI_GLOBAL (UINT32, AcpiSciCount); ACPI_GLOBAL (UINT32, AcpiFixedEventCount[ACPI_NUM_FIXED_EVENTS]); /* Dynamic control method tracing mechanism */ ACPI_GLOBAL (UINT32, AcpiGbl_OriginalDbgLevel); ACPI_GLOBAL (UINT32, AcpiGbl_OriginalDbgLayer); /***************************************************************************** * * Debugger and Disassembler * ****************************************************************************/ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DbOutputFlags, ACPI_DB_CONSOLE_OUTPUT); #ifdef ACPI_DISASSEMBLER /* Do not disassemble buffers to resource descriptors */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_NoResourceDisassembly, FALSE); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_IgnoreNoopOperator, FALSE); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_CstyleDisassembly, TRUE); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_ForceAmlDisassembly, FALSE); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Verbose, TRUE); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DmEmitExternalOpcodes, FALSE); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DoDisassemblerOptimizations, TRUE); ACPI_INIT_GLOBAL (ACPI_PARSE_OBJECT_LIST, *AcpiGbl_TempListHead, NULL); ACPI_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Disasm); ACPI_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Listing); ACPI_GLOBAL (BOOLEAN, AcpiGbl_NumExternalMethods); ACPI_GLOBAL (UINT32, AcpiGbl_ResolvedExternalMethods); ACPI_GLOBAL (ACPI_EXTERNAL_LIST *, AcpiGbl_ExternalList); ACPI_GLOBAL (ACPI_EXTERNAL_FILE *, AcpiGbl_ExternalFileList); #endif #ifdef ACPI_DEBUGGER ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_AbortMethod, FALSE); ACPI_INIT_GLOBAL (ACPI_THREAD_ID, AcpiGbl_DbThreadId, ACPI_INVALID_THREAD_ID); ACPI_INIT_GLOBAL (UINT32, AcpiGbl_NextCmdNum, 1); ACPI_GLOBAL (BOOLEAN, AcpiGbl_DbOpt_NoIniMethods); ACPI_GLOBAL (BOOLEAN, AcpiGbl_DbOpt_NoRegionSupport); ACPI_GLOBAL (BOOLEAN, AcpiGbl_DbOutputToFile); ACPI_GLOBAL (char *, AcpiGbl_DbBuffer); ACPI_GLOBAL (char *, AcpiGbl_DbFilename); ACPI_GLOBAL (UINT32, AcpiGbl_DbDebugLevel); ACPI_GLOBAL (UINT32, AcpiGbl_DbConsoleDebugLevel); ACPI_GLOBAL (ACPI_NAMESPACE_NODE *, AcpiGbl_DbScopeNode); ACPI_GLOBAL (BOOLEAN, AcpiGbl_DbTerminateLoop); ACPI_GLOBAL (BOOLEAN, AcpiGbl_DbThreadsTerminated); ACPI_GLOBAL (char *, AcpiGbl_DbArgs[ACPI_DEBUGGER_MAX_ARGS]); ACPI_GLOBAL (ACPI_OBJECT_TYPE, AcpiGbl_DbArgTypes[ACPI_DEBUGGER_MAX_ARGS]); /* These buffers should all be the same size */ ACPI_GLOBAL (char, AcpiGbl_DbParsedBuf[ACPI_DB_LINE_BUFFER_SIZE]); ACPI_GLOBAL (char, AcpiGbl_DbScopeBuf[ACPI_DB_LINE_BUFFER_SIZE]); ACPI_GLOBAL (char, AcpiGbl_DbDebugFilename[ACPI_DB_LINE_BUFFER_SIZE]); /* Statistics globals */ ACPI_GLOBAL (UINT16, AcpiGbl_ObjTypeCount[ACPI_TOTAL_TYPES]); ACPI_GLOBAL (UINT16, AcpiGbl_NodeTypeCount[ACPI_TOTAL_TYPES]); ACPI_GLOBAL (UINT16, AcpiGbl_ObjTypeCountMisc); ACPI_GLOBAL (UINT16, AcpiGbl_NodeTypeCountMisc); ACPI_GLOBAL (UINT32, AcpiGbl_NumNodes); ACPI_GLOBAL (UINT32, AcpiGbl_NumObjects); #endif /* ACPI_DEBUGGER */ #if defined (ACPI_DISASSEMBLER) || defined (ACPI_ASL_COMPILER) ACPI_GLOBAL (const char, *AcpiGbl_PldPanelList[]); ACPI_GLOBAL (const char, *AcpiGbl_PldVerticalPositionList[]); ACPI_GLOBAL (const char, *AcpiGbl_PldHorizontalPositionList[]); ACPI_GLOBAL (const char, *AcpiGbl_PldShapeList[]); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DisasmFlag, FALSE); #endif /***************************************************************************** * * ACPICA application-specific globals * ****************************************************************************/ /* ASL-to-ASL+ conversion utility (implemented within the iASL compiler) */ #ifdef ACPI_ASL_COMPILER ACPI_INIT_GLOBAL (char *, AcpiGbl_CurrentInlineComment, NULL); ACPI_INIT_GLOBAL (char *, AcpiGbl_CurrentEndNodeComment, NULL); ACPI_INIT_GLOBAL (char *, AcpiGbl_CurrentOpenBraceComment, NULL); ACPI_INIT_GLOBAL (char *, AcpiGbl_CurrentCloseBraceComment, NULL); ACPI_INIT_GLOBAL (char *, AcpiGbl_RootFilename, NULL); ACPI_INIT_GLOBAL (char *, AcpiGbl_CurrentFilename, NULL); ACPI_INIT_GLOBAL (char *, AcpiGbl_CurrentParentFilename, NULL); ACPI_INIT_GLOBAL (char *, AcpiGbl_CurrentIncludeFilename, NULL); ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_DefBlkCommentListHead, NULL); ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_DefBlkCommentListTail, NULL); ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_RegCommentListHead, NULL); ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_RegCommentListTail, NULL); ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_IncCommentListHead, NULL); ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_IncCommentListTail, NULL); ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_EndBlkCommentListHead, NULL); ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_EndBlkCommentListTail, NULL); ACPI_INIT_GLOBAL (ACPI_COMMENT_ADDR_NODE, *AcpiGbl_CommentAddrListHead, NULL); ACPI_INIT_GLOBAL (ACPI_FILE_NODE, *AcpiGbl_FileTreeRoot, NULL); ACPI_GLOBAL (ACPI_CACHE_T *, AcpiGbl_RegCommentCache); ACPI_GLOBAL (ACPI_CACHE_T *, AcpiGbl_CommentAddrCache); ACPI_GLOBAL (ACPI_CACHE_T *, AcpiGbl_FileCache); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DebugAslConversion, FALSE); ACPI_INIT_GLOBAL (ACPI_FILE, AcpiGbl_ConvDebugFile, NULL); ACPI_GLOBAL (char, AcpiGbl_TableSig[4]); #endif #ifdef ACPI_APPLICATION ACPI_INIT_GLOBAL (ACPI_FILE, AcpiGbl_DebugFile, NULL); ACPI_INIT_GLOBAL (ACPI_FILE, AcpiGbl_OutputFile, NULL); ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DebugTimeout, FALSE); /* Print buffer */ ACPI_GLOBAL (ACPI_SPINLOCK, AcpiGbl_PrintLock); /* For print buffer */ ACPI_GLOBAL (char, AcpiGbl_PrintBuffer[1024]); #endif /* ACPI_APPLICATION */ #endif /* __ACGLOBAL_H__ */ src/acpica/source/include/achware.h000066400000000000000000000272731465205512700176150ustar00rootroot00000000000000/****************************************************************************** * * Name: achware.h -- hardware specific interfaces * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACHWARE_H__ #define __ACHWARE_H__ /* Values for the _SST predefined method */ #define ACPI_SST_INDICATOR_OFF 0 #define ACPI_SST_WORKING 1 #define ACPI_SST_WAKING 2 #define ACPI_SST_SLEEPING 3 #define ACPI_SST_SLEEP_CONTEXT 4 /* * hwacpi - high level functions */ ACPI_STATUS AcpiHwSetMode ( UINT32 Mode); UINT32 AcpiHwGetMode ( void); /* * hwregs - ACPI Register I/O */ ACPI_STATUS AcpiHwValidateRegister ( ACPI_GENERIC_ADDRESS *Reg, UINT8 MaxBitWidth, UINT64 *Address); ACPI_STATUS AcpiHwRead ( UINT64 *Value, ACPI_GENERIC_ADDRESS *Reg); ACPI_STATUS AcpiHwWrite ( UINT64 Value, ACPI_GENERIC_ADDRESS *Reg); ACPI_BIT_REGISTER_INFO * AcpiHwGetBitRegisterInfo ( UINT32 RegisterId); ACPI_STATUS AcpiHwWritePm1Control ( UINT32 Pm1aControl, UINT32 Pm1bControl); ACPI_STATUS AcpiHwRegisterRead ( UINT32 RegisterId, UINT32 *ReturnValue); ACPI_STATUS AcpiHwRegisterWrite ( UINT32 RegisterId, UINT32 Value); ACPI_STATUS AcpiHwClearAcpiStatus ( void); /* * hwsleep - sleep/wake support (Legacy sleep registers) */ ACPI_STATUS AcpiHwLegacySleep ( UINT8 SleepState); ACPI_STATUS AcpiHwLegacyWakePrep ( UINT8 SleepState); ACPI_STATUS AcpiHwLegacyWake ( UINT8 SleepState); /* * hwesleep - sleep/wake support (Extended FADT-V5 sleep registers) */ void AcpiHwExecuteSleepMethod ( char *MethodName, UINT32 IntegerArgument); ACPI_STATUS AcpiHwExtendedSleep ( UINT8 SleepState); ACPI_STATUS AcpiHwExtendedWakePrep ( UINT8 SleepState); ACPI_STATUS AcpiHwExtendedWake ( UINT8 SleepState); /* * hwvalid - Port I/O with validation */ ACPI_STATUS AcpiHwReadPort ( ACPI_IO_ADDRESS Address, UINT32 *Value, UINT32 Width); ACPI_STATUS AcpiHwWritePort ( ACPI_IO_ADDRESS Address, UINT32 Value, UINT32 Width); /* * hwgpe - GPE support */ UINT32 AcpiHwGetGpeRegisterBit ( ACPI_GPE_EVENT_INFO *GpeEventInfo); ACPI_STATUS AcpiHwLowSetGpe ( ACPI_GPE_EVENT_INFO *GpeEventInfo, UINT32 Action); ACPI_STATUS AcpiHwDisableGpeBlock ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context); ACPI_STATUS AcpiHwClearGpe ( ACPI_GPE_EVENT_INFO *GpeEventInfo); ACPI_STATUS AcpiHwClearGpeBlock ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context); ACPI_STATUS AcpiHwGetGpeStatus ( ACPI_GPE_EVENT_INFO *GpeEventInfo, ACPI_EVENT_STATUS *EventStatus); ACPI_STATUS AcpiHwDisableAllGpes ( void); ACPI_STATUS AcpiHwEnableAllRuntimeGpes ( void); ACPI_STATUS AcpiHwEnableAllWakeupGpes ( void); UINT8 AcpiHwCheckAllGpes ( void); ACPI_STATUS AcpiHwEnableRuntimeGpeBlock ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context); /* * hwpci - PCI configuration support */ ACPI_STATUS AcpiHwDerivePciId ( ACPI_PCI_ID *PciId, ACPI_HANDLE RootPciDevice, ACPI_HANDLE PciRegion); #endif /* __ACHWARE_H__ */ src/acpica/source/include/acinterp.h000066400000000000000000000627071465205512700200110ustar00rootroot00000000000000/****************************************************************************** * * Name: acinterp.h - Interpreter subcomponent prototypes and defines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACINTERP_H__ #define __ACINTERP_H__ #define ACPI_WALK_OPERANDS (&(WalkState->Operands [WalkState->NumOperands -1])) /* Macros for tables used for debug output */ #define ACPI_EXD_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_OPERAND_OBJECT,f) #define ACPI_EXD_NSOFFSET(f) (UINT8) ACPI_OFFSET (ACPI_NAMESPACE_NODE,f) #define ACPI_EXD_TABLE_SIZE(name) (sizeof(name) / sizeof (ACPI_EXDUMP_INFO)) /* * If possible, pack the following structures to byte alignment, since we * don't care about performance for debug output. Two cases where we cannot * pack the structures: * * 1) Hardware does not support misaligned memory transfers * 2) Compiler does not support pointers within packed structures */ #if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED)) #pragma pack(1) #endif typedef const struct acpi_exdump_info { UINT8 Opcode; UINT8 Offset; const char *Name; } ACPI_EXDUMP_INFO; /* Values for the Opcode field above */ #define ACPI_EXD_INIT 0 #define ACPI_EXD_TYPE 1 #define ACPI_EXD_UINT8 2 #define ACPI_EXD_UINT16 3 #define ACPI_EXD_UINT32 4 #define ACPI_EXD_UINT64 5 #define ACPI_EXD_LITERAL 6 #define ACPI_EXD_POINTER 7 #define ACPI_EXD_ADDRESS 8 #define ACPI_EXD_STRING 9 #define ACPI_EXD_BUFFER 10 #define ACPI_EXD_PACKAGE 11 #define ACPI_EXD_FIELD 12 #define ACPI_EXD_REFERENCE 13 #define ACPI_EXD_LIST 14 /* Operand object list */ #define ACPI_EXD_HDLR_LIST 15 /* Address Handler list */ #define ACPI_EXD_RGN_LIST 16 /* Region list */ #define ACPI_EXD_NODE 17 /* Namespace Node */ /* restore default alignment */ #pragma pack() /* * exconvrt - object conversion */ ACPI_STATUS AcpiExConvertToInteger ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ResultDesc, UINT32 ImplicitConversion); ACPI_STATUS AcpiExConvertToBuffer ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ResultDesc); ACPI_STATUS AcpiExConvertToString ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ResultDesc, UINT32 Type); /* Types for ->String conversion */ #define ACPI_EXPLICIT_BYTE_COPY 0x00000000 #define ACPI_EXPLICIT_CONVERT_HEX 0x00000001 #define ACPI_IMPLICIT_CONVERT_HEX 0x00000002 #define ACPI_EXPLICIT_CONVERT_DECIMAL 0x00000003 ACPI_STATUS AcpiExConvertToTargetType ( ACPI_OBJECT_TYPE DestinationType, ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT **ResultDesc, ACPI_WALK_STATE *WalkState); /* * exdebug - AML debug object */ void AcpiExDoDebugObject ( ACPI_OPERAND_OBJECT *SourceDesc, UINT32 Level, UINT32 Index); void AcpiExStartTraceMethod ( ACPI_NAMESPACE_NODE *MethodNode, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState); void AcpiExStopTraceMethod ( ACPI_NAMESPACE_NODE *MethodNode, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState); void AcpiExStartTraceOpcode ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState); void AcpiExStopTraceOpcode ( ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState); void AcpiExTracePoint ( ACPI_TRACE_EVENT_TYPE Type, BOOLEAN Begin, UINT8 *Aml, char *Pathname); /* * exfield - ACPI AML (p-code) execution - field manipulation */ ACPI_STATUS AcpiExGetProtocolBufferLength ( UINT32 ProtocolId, UINT32 *ReturnLength); ACPI_STATUS AcpiExCommonBufferSetup ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 BufferLength, UINT32 *DatumCount); ACPI_STATUS AcpiExWriteWithUpdateRule ( ACPI_OPERAND_OBJECT *ObjDesc, UINT64 Mask, UINT64 FieldValue, UINT32 FieldDatumByteOffset); void AcpiExGetBufferDatum( UINT64 *Datum, void *Buffer, UINT32 BufferLength, UINT32 ByteGranularity, UINT32 BufferOffset); void AcpiExSetBufferDatum ( UINT64 MergedDatum, void *Buffer, UINT32 BufferLength, UINT32 ByteGranularity, UINT32 BufferOffset); ACPI_STATUS AcpiExReadDataFromField ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **RetBufferDesc); ACPI_STATUS AcpiExWriteDataToField ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ResultDesc); /* * exfldio - low level field I/O */ ACPI_STATUS AcpiExExtractFromField ( ACPI_OPERAND_OBJECT *ObjDesc, void *Buffer, UINT32 BufferLength); ACPI_STATUS AcpiExInsertIntoField ( ACPI_OPERAND_OBJECT *ObjDesc, void *Buffer, UINT32 BufferLength); ACPI_STATUS AcpiExAccessRegion ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 FieldDatumByteOffset, UINT64 *Value, UINT32 ReadWrite); /* * exmisc - misc support routines */ ACPI_STATUS AcpiExGetObjectReference ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ReturnDesc, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExConcatTemplate ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT *ObjDesc2, ACPI_OPERAND_OBJECT **ActualReturnDesc, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExDoConcatenate ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT *ObjDesc2, ACPI_OPERAND_OBJECT **ActualReturnDesc, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExDoLogicalNumericOp ( UINT16 Opcode, UINT64 Integer0, UINT64 Integer1, BOOLEAN *LogicalResult); ACPI_STATUS AcpiExDoLogicalOp ( UINT16 Opcode, ACPI_OPERAND_OBJECT *Operand0, ACPI_OPERAND_OBJECT *Operand1, BOOLEAN *LogicalResult); UINT64 AcpiExDoMathOp ( UINT16 Opcode, UINT64 Operand0, UINT64 Operand1); ACPI_STATUS AcpiExCreateMutex ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExCreateProcessor ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExCreatePowerResource ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExCreateRegion ( UINT8 *AmlStart, UINT32 AmlLength, UINT8 RegionSpace, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExCreateEvent ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExCreateAlias ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExCreateMethod ( UINT8 *AmlStart, UINT32 AmlLength, ACPI_WALK_STATE *WalkState); /* * exconfig - dynamic table load/unload */ ACPI_STATUS AcpiExLoadOp ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT *Target, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExLoadTableOp ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT **ReturnDesc); ACPI_STATUS AcpiExUnloadTable ( ACPI_OPERAND_OBJECT *DdbHandle); /* * exmutex - mutex support */ ACPI_STATUS AcpiExAcquireMutex ( ACPI_OPERAND_OBJECT *TimeDesc, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExAcquireMutexObject ( UINT16 Timeout, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_THREAD_ID ThreadId); ACPI_STATUS AcpiExReleaseMutex ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExReleaseMutexObject ( ACPI_OPERAND_OBJECT *ObjDesc); void AcpiExReleaseAllMutexes ( ACPI_THREAD_STATE *Thread); void AcpiExUnlinkMutex ( ACPI_OPERAND_OBJECT *ObjDesc); /* * exprep - ACPI AML execution - prep utilities */ ACPI_STATUS AcpiExPrepCommonFieldObject ( ACPI_OPERAND_OBJECT *ObjDesc, UINT8 FieldFlags, UINT8 FieldAttribute, UINT32 FieldBitPosition, UINT32 FieldBitLength); ACPI_STATUS AcpiExPrepFieldValue ( ACPI_CREATE_FIELD_INFO *Info); /* * exserial - FieldUnit support for serial address spaces */ ACPI_STATUS AcpiExReadSerialBus ( ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ReturnBuffer); ACPI_STATUS AcpiExWriteSerialBus ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ReturnBuffer); ACPI_STATUS AcpiExReadGpio ( ACPI_OPERAND_OBJECT *ObjDesc, void *Buffer); ACPI_STATUS AcpiExWriteGpio ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *ObjDesc, ACPI_OPERAND_OBJECT **ReturnBuffer); /* * exsystem - Interface to OS services */ ACPI_STATUS AcpiExSystemDoNotifyOp ( ACPI_OPERAND_OBJECT *Value, ACPI_OPERAND_OBJECT *ObjDesc); ACPI_STATUS AcpiExSystemDoSleep( UINT64 Time); ACPI_STATUS AcpiExSystemDoStall ( UINT32 Time); ACPI_STATUS AcpiExSystemSignalEvent( ACPI_OPERAND_OBJECT *ObjDesc); ACPI_STATUS AcpiExSystemWaitEvent( ACPI_OPERAND_OBJECT *Time, ACPI_OPERAND_OBJECT *ObjDesc); ACPI_STATUS AcpiExSystemResetEvent( ACPI_OPERAND_OBJECT *ObjDesc); ACPI_STATUS AcpiExSystemWaitSemaphore ( ACPI_SEMAPHORE Semaphore, UINT16 Timeout); ACPI_STATUS AcpiExSystemWaitMutex ( ACPI_MUTEX Mutex, UINT16 Timeout); /* * exoparg1 - ACPI AML execution, 1 operand */ ACPI_STATUS AcpiExOpcode_0A_0T_1R ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExOpcode_1A_0T_0R ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExOpcode_1A_0T_1R ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExOpcode_1A_1T_1R ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExOpcode_1A_1T_0R ( ACPI_WALK_STATE *WalkState); /* * exoparg2 - ACPI AML execution, 2 operands */ ACPI_STATUS AcpiExOpcode_2A_0T_0R ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExOpcode_2A_0T_1R ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExOpcode_2A_1T_1R ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExOpcode_2A_2T_1R ( ACPI_WALK_STATE *WalkState); /* * exoparg3 - ACPI AML execution, 3 operands */ ACPI_STATUS AcpiExOpcode_3A_0T_0R ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExOpcode_3A_1T_1R ( ACPI_WALK_STATE *WalkState); /* * exoparg6 - ACPI AML execution, 6 operands */ ACPI_STATUS AcpiExOpcode_6A_0T_1R ( ACPI_WALK_STATE *WalkState); /* * exresolv - Object resolution and get value functions */ ACPI_STATUS AcpiExResolveToValue ( ACPI_OPERAND_OBJECT **StackPtr, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExResolveMultiple ( ACPI_WALK_STATE *WalkState, ACPI_OPERAND_OBJECT *Operand, ACPI_OBJECT_TYPE *ReturnType, ACPI_OPERAND_OBJECT **ReturnDesc); /* * exresnte - resolve namespace node */ ACPI_STATUS AcpiExResolveNodeToValue ( ACPI_NAMESPACE_NODE **StackPtr, ACPI_WALK_STATE *WalkState); /* * exresop - resolve operand to value */ ACPI_STATUS AcpiExResolveOperands ( UINT16 Opcode, ACPI_OPERAND_OBJECT **StackPtr, ACPI_WALK_STATE *WalkState); /* * exdump - Interpreter debug output routines */ void AcpiExDumpOperand ( ACPI_OPERAND_OBJECT *ObjDesc, UINT32 Depth); void AcpiExDumpOperands ( ACPI_OPERAND_OBJECT **Operands, const char *OpcodeName, UINT32 NumOpcodes); void AcpiExDumpObjectDescriptor ( ACPI_OPERAND_OBJECT *Object, UINT32 Flags); void AcpiExDumpNamespaceNode ( ACPI_NAMESPACE_NODE *Node, UINT32 Flags); /* * exnames - AML namestring support */ ACPI_STATUS AcpiExGetNameString ( ACPI_OBJECT_TYPE DataType, UINT8 *InAmlAddress, char **OutNameString, UINT32 *OutNameLength); /* * exstore - Object store support */ ACPI_STATUS AcpiExStore ( ACPI_OPERAND_OBJECT *ValDesc, ACPI_OPERAND_OBJECT *DestDesc, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExStoreObjectToNode ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_NAMESPACE_NODE *Node, ACPI_WALK_STATE *WalkState, UINT8 ImplicitConversion); /* * exstoren - resolve/store object */ ACPI_STATUS AcpiExResolveObject ( ACPI_OPERAND_OBJECT **SourceDescPtr, ACPI_OBJECT_TYPE TargetType, ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiExStoreObjectToObject ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *DestDesc, ACPI_OPERAND_OBJECT **NewDesc, ACPI_WALK_STATE *WalkState); /* * exstorob - store object - buffer/string */ ACPI_STATUS AcpiExStoreBufferToBuffer ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *TargetDesc); ACPI_STATUS AcpiExStoreStringToString ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *TargetDesc); /* * excopy - object copy */ ACPI_STATUS AcpiExCopyIntegerToIndexField ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *TargetDesc); ACPI_STATUS AcpiExCopyIntegerToBankField ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *TargetDesc); ACPI_STATUS AcpiExCopyDataToNamedField ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_NAMESPACE_NODE *Node); ACPI_STATUS AcpiExCopyIntegerToBufferField ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *TargetDesc); /* * exutils - interpreter/scanner utilities */ void AcpiExEnterInterpreter ( void); void AcpiExExitInterpreter ( void); BOOLEAN AcpiExTruncateFor32bitTable ( ACPI_OPERAND_OBJECT *ObjDesc); void AcpiExAcquireGlobalLock ( UINT32 Rule); void AcpiExReleaseGlobalLock ( UINT32 Rule); void AcpiExEisaIdToString ( char *Dest, UINT64 CompressedId); void AcpiExIntegerToString ( char *Dest, UINT64 Value); void AcpiExPciClsToString ( char *Dest, UINT8 ClassCode[3]); BOOLEAN AcpiIsValidSpaceId ( UINT8 SpaceId); /* * exregion - default OpRegion handlers */ ACPI_STATUS AcpiExSystemMemorySpaceHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext); ACPI_STATUS AcpiExSystemIoSpaceHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext); ACPI_STATUS AcpiExPciConfigSpaceHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext); ACPI_STATUS AcpiExCmosSpaceHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext); ACPI_STATUS AcpiExPciBarSpaceHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext); ACPI_STATUS AcpiExEmbeddedControllerSpaceHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext); ACPI_STATUS AcpiExSmBusSpaceHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext); ACPI_STATUS AcpiExDataTableSpaceHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext); #endif /* __INTERP_H__ */ src/acpica/source/include/aclocal.h000066400000000000000000001661271465205512700176030ustar00rootroot00000000000000/****************************************************************************** * * Name: aclocal.h - Internal data types used across the ACPI subsystem * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACLOCAL_H__ #define __ACLOCAL_H__ /* acpisrc:StructDefs -- for acpisrc conversion */ #define ACPI_SERIALIZED 0xFF typedef UINT32 ACPI_MUTEX_HANDLE; #define ACPI_GLOBAL_LOCK (ACPI_SEMAPHORE) (-1) /* Total number of aml opcodes defined */ #define AML_NUM_OPCODES 0x83 /* Forward declarations */ struct acpi_walk_state; struct acpi_obj_mutex; union acpi_parse_object; /***************************************************************************** * * Mutex typedefs and structs * ****************************************************************************/ /* * Predefined handles for the mutex objects used within the subsystem * All mutex objects are automatically created by AcpiUtMutexInitialize. * * The acquire/release ordering protocol is implied via this list. Mutexes * with a lower value must be acquired before mutexes with a higher value. * * NOTE: any changes here must be reflected in the AcpiGbl_MutexNames * table below also! */ #define ACPI_MTX_INTERPRETER 0 /* AML Interpreter, main lock */ #define ACPI_MTX_NAMESPACE 1 /* ACPI Namespace */ #define ACPI_MTX_TABLES 2 /* Data for ACPI tables */ #define ACPI_MTX_EVENTS 3 /* Data for ACPI events */ #define ACPI_MTX_CACHES 4 /* Internal caches, general purposes */ #define ACPI_MTX_MEMORY 5 /* Debug memory tracking lists */ #define ACPI_MAX_MUTEX 5 #define ACPI_NUM_MUTEX (ACPI_MAX_MUTEX+1) /* Lock structure for reader/writer interfaces */ typedef struct acpi_rw_lock { ACPI_MUTEX WriterMutex; ACPI_MUTEX ReaderMutex; UINT32 NumReaders; } ACPI_RW_LOCK; /* * Predefined handles for spinlocks used within the subsystem. * These spinlocks are created by AcpiUtMutexInitialize */ #define ACPI_LOCK_GPES 0 #define ACPI_LOCK_HARDWARE 1 #define ACPI_MAX_LOCK 1 #define ACPI_NUM_LOCK (ACPI_MAX_LOCK+1) /* This Thread ID means that the mutex is not in use (unlocked) */ #define ACPI_MUTEX_NOT_ACQUIRED ((ACPI_THREAD_ID) -1) /* This Thread ID means an invalid thread ID */ #ifdef ACPI_OS_INVALID_THREAD_ID #define ACPI_INVALID_THREAD_ID ACPI_OS_INVALID_THREAD_ID #else #define ACPI_INVALID_THREAD_ID ((ACPI_THREAD_ID) 0xFFFFFFFF) #endif /* Table for the global mutexes */ typedef struct acpi_mutex_info { ACPI_MUTEX Mutex; UINT32 UseCount; ACPI_THREAD_ID ThreadId; } ACPI_MUTEX_INFO; /* Lock flag parameter for various interfaces */ #define ACPI_MTX_DO_NOT_LOCK 0 #define ACPI_MTX_LOCK 1 /* Field access granularities */ #define ACPI_FIELD_BYTE_GRANULARITY 1 #define ACPI_FIELD_WORD_GRANULARITY 2 #define ACPI_FIELD_DWORD_GRANULARITY 4 #define ACPI_FIELD_QWORD_GRANULARITY 8 #define ACPI_ENTRY_NOT_FOUND NULL /***************************************************************************** * * Namespace typedefs and structs * ****************************************************************************/ /* Operational modes of the AML interpreter/scanner */ typedef enum { ACPI_IMODE_LOAD_PASS1 = 0x01, ACPI_IMODE_LOAD_PASS2 = 0x02, ACPI_IMODE_EXECUTE = 0x03 } ACPI_INTERPRETER_MODE; /* * The Namespace Node describes a named object that appears in the AML. * DescriptorType is used to differentiate between internal descriptors. * * The node is optimized for both 32-bit and 64-bit platforms: * 20 bytes for the 32-bit case, 32 bytes for the 64-bit case. * * Note: The DescriptorType and Type fields must appear in the identical * position in both the ACPI_NAMESPACE_NODE and ACPI_OPERAND_OBJECT * structures. */ typedef struct acpi_namespace_node { union acpi_operand_object *Object; /* Interpreter object */ UINT8 DescriptorType; /* Differentiate object descriptor types */ UINT8 Type; /* ACPI Type associated with this name */ UINT16 Flags; /* Miscellaneous flags */ ACPI_NAME_UNION Name; /* ACPI Name, always 4 chars per ACPI spec */ struct acpi_namespace_node *Parent; /* Parent node */ struct acpi_namespace_node *Child; /* First child */ struct acpi_namespace_node *Peer; /* First peer */ ACPI_OWNER_ID OwnerId; /* Node creator */ /* * The following fields are used by the ASL compiler and disassembler only */ #ifdef ACPI_LARGE_NAMESPACE_NODE union acpi_parse_object *Op; void *MethodLocals; void *MethodArgs; UINT32 Value; UINT32 Length; UINT8 ArgCount; #endif } ACPI_NAMESPACE_NODE; /* Namespace Node flags */ #define ANOBJ_RESERVED 0x01 /* Available for use */ #define ANOBJ_TEMPORARY 0x02 /* Node is create by a method and is temporary */ #define ANOBJ_METHOD_ARG 0x04 /* Node is a method argument */ #define ANOBJ_METHOD_LOCAL 0x08 /* Node is a method local */ #define ANOBJ_SUBTREE_HAS_INI 0x10 /* Used to optimize device initialization */ #define ANOBJ_EVALUATED 0x20 /* Set on first evaluation of node */ #define ANOBJ_ALLOCATED_BUFFER 0x40 /* Method AML buffer is dynamic (InstallMethod) */ #define ANOBJ_NODE_EARLY_INIT 0x80 /* AcpiExec only: Node was create via init file (-fi) */ #define ANOBJ_IS_EXTERNAL 0x08 /* iASL only: This object created via External() */ #define ANOBJ_METHOD_NO_RETVAL 0x10 /* iASL only: Method has no return value */ #define ANOBJ_METHOD_SOME_NO_RETVAL 0x20 /* iASL only: Method has at least one return value */ #define ANOBJ_IS_REFERENCED 0x80 /* iASL only: Object was referenced */ /* Internal ACPI table management - master table list */ typedef struct acpi_table_list { ACPI_TABLE_DESC *Tables; /* Table descriptor array */ UINT32 CurrentTableCount; /* Tables currently in the array */ UINT32 MaxTableCount; /* Max tables array will hold */ UINT8 Flags; } ACPI_TABLE_LIST; /* Flags for above */ #define ACPI_ROOT_ORIGIN_UNKNOWN (0) /* ~ORIGIN_ALLOCATED */ #define ACPI_ROOT_ORIGIN_ALLOCATED (1) #define ACPI_ROOT_ALLOW_RESIZE (2) /* List to manage incoming ACPI tables */ typedef struct acpi_new_table_desc { ACPI_TABLE_HEADER *Table; struct acpi_new_table_desc *Next; } ACPI_NEW_TABLE_DESC; /* Predefined table indexes */ #define ACPI_INVALID_TABLE_INDEX (0xFFFFFFFF) typedef struct acpi_find_context { char *SearchFor; ACPI_HANDLE *List; UINT32 *Count; } ACPI_FIND_CONTEXT; typedef struct acpi_ns_search_data { ACPI_NAMESPACE_NODE *Node; } ACPI_NS_SEARCH_DATA; /* Object types used during package copies */ #define ACPI_COPY_TYPE_SIMPLE 0 #define ACPI_COPY_TYPE_PACKAGE 1 /* Info structure used to convert external<->internal namestrings */ typedef struct acpi_namestring_info { const char *ExternalName; const char *NextExternalChar; char *InternalName; UINT32 Length; UINT32 NumSegments; UINT32 NumCarats; BOOLEAN FullyQualified; } ACPI_NAMESTRING_INFO; /* Field creation info */ typedef struct acpi_create_field_info { ACPI_NAMESPACE_NODE *RegionNode; ACPI_NAMESPACE_NODE *FieldNode; ACPI_NAMESPACE_NODE *RegisterNode; ACPI_NAMESPACE_NODE *DataRegisterNode; ACPI_NAMESPACE_NODE *ConnectionNode; UINT8 *ResourceBuffer; UINT32 BankValue; UINT32 FieldBitPosition; UINT32 FieldBitLength; UINT16 ResourceLength; UINT16 PinNumberIndex; UINT8 FieldFlags; UINT8 Attribute; UINT8 FieldType; UINT8 AccessLength; } ACPI_CREATE_FIELD_INFO; typedef ACPI_STATUS (*ACPI_INTERNAL_METHOD) ( struct acpi_walk_state *WalkState); /* * Bitmapped ACPI types. Used internally only */ #define ACPI_BTYPE_ANY 0x00000000 #define ACPI_BTYPE_INTEGER 0x00000001 #define ACPI_BTYPE_STRING 0x00000002 #define ACPI_BTYPE_BUFFER 0x00000004 #define ACPI_BTYPE_PACKAGE 0x00000008 #define ACPI_BTYPE_FIELD_UNIT 0x00000010 #define ACPI_BTYPE_DEVICE 0x00000020 #define ACPI_BTYPE_EVENT 0x00000040 #define ACPI_BTYPE_METHOD 0x00000080 #define ACPI_BTYPE_MUTEX 0x00000100 #define ACPI_BTYPE_REGION 0x00000200 #define ACPI_BTYPE_POWER 0x00000400 #define ACPI_BTYPE_PROCESSOR 0x00000800 #define ACPI_BTYPE_THERMAL 0x00001000 #define ACPI_BTYPE_BUFFER_FIELD 0x00002000 #define ACPI_BTYPE_DDB_HANDLE 0x00004000 #define ACPI_BTYPE_DEBUG_OBJECT 0x00008000 #define ACPI_BTYPE_REFERENCE_OBJECT 0x00010000 /* From Index(), RefOf(), etc (Type6Opcodes) */ #define ACPI_BTYPE_RESOURCE 0x00020000 #define ACPI_BTYPE_NAMED_REFERENCE 0x00040000 /* Generic unresolved Name or Namepath */ #define ACPI_BTYPE_COMPUTE_DATA (ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER) #define ACPI_BTYPE_DATA (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_PACKAGE) /* Used by Copy, DeRefOf, Store, Printf, Fprintf */ #define ACPI_BTYPE_DATA_REFERENCE (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE_OBJECT | ACPI_BTYPE_DDB_HANDLE) #define ACPI_BTYPE_DEVICE_OBJECTS (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR) #define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */ #define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF #pragma pack(1) /* * Information structure for ACPI predefined names. * Each entry in the table contains the following items: * * Name - The ACPI reserved name * ParamCount - Number of arguments to the method * ExpectedReturnBtypes - Allowed type(s) for the return value */ typedef struct acpi_name_info { char Name[ACPI_NAMESEG_SIZE]; UINT16 ArgumentList; UINT8 ExpectedBtypes; } ACPI_NAME_INFO; /* * Secondary information structures for ACPI predefined objects that return * package objects. This structure appears as the next entry in the table * after the NAME_INFO structure above. * * The reason for this is to minimize the size of the predefined name table. */ /* * Used for ACPI_PTYPE1_FIXED, ACPI_PTYPE1_VAR, ACPI_PTYPE2, * ACPI_PTYPE2_MIN, ACPI_PTYPE2_PKG_COUNT, ACPI_PTYPE2_COUNT, * ACPI_PTYPE2_FIX_VAR */ typedef struct acpi_package_info { UINT8 Type; UINT8 ObjectType1; UINT8 Count1; UINT8 ObjectType2; UINT8 Count2; UINT16 Reserved; } ACPI_PACKAGE_INFO; /* Used for ACPI_PTYPE2_FIXED */ typedef struct acpi_package_info2 { UINT8 Type; UINT8 Count; UINT8 ObjectType[4]; UINT8 Reserved; } ACPI_PACKAGE_INFO2; /* Used for ACPI_PTYPE1_OPTION */ typedef struct acpi_package_info3 { UINT8 Type; UINT8 Count; UINT8 ObjectType[2]; UINT8 TailObjectType; UINT16 Reserved; } ACPI_PACKAGE_INFO3; typedef struct acpi_package_info4 { UINT8 Type; UINT8 ObjectType1; UINT8 Count1; UINT8 SubObjectTypes; UINT8 PkgCount; UINT16 Reserved; } ACPI_PACKAGE_INFO4; typedef union acpi_predefined_info { ACPI_NAME_INFO Info; ACPI_PACKAGE_INFO RetInfo; ACPI_PACKAGE_INFO2 RetInfo2; ACPI_PACKAGE_INFO3 RetInfo3; ACPI_PACKAGE_INFO4 RetInfo4; } ACPI_PREDEFINED_INFO; /* Reset to default packing */ #pragma pack() /* Return object auto-repair info */ typedef ACPI_STATUS (*ACPI_OBJECT_CONVERTER) ( struct acpi_namespace_node *Scope, union acpi_operand_object *OriginalObject, union acpi_operand_object **ConvertedObject); typedef struct acpi_simple_repair_info { char Name[ACPI_NAMESEG_SIZE]; UINT32 UnexpectedBtypes; UINT32 PackageIndex; ACPI_OBJECT_CONVERTER ObjectConverter; } ACPI_SIMPLE_REPAIR_INFO; /* * Bitmapped return value types * Note: the actual data types must be contiguous, a loop in nspredef.c * depends on this. */ #define ACPI_RTYPE_ANY 0x00 #define ACPI_RTYPE_NONE 0x01 #define ACPI_RTYPE_INTEGER 0x02 #define ACPI_RTYPE_STRING 0x04 #define ACPI_RTYPE_BUFFER 0x08 #define ACPI_RTYPE_PACKAGE 0x10 #define ACPI_RTYPE_REFERENCE 0x20 #define ACPI_RTYPE_ALL 0x3F #define ACPI_NUM_RTYPES 5 /* Number of actual object types */ /* Info for running the _REG methods */ typedef struct acpi_reg_walk_info { UINT32 Function; UINT32 RegRunCount; ACPI_ADR_SPACE_TYPE SpaceId; } ACPI_REG_WALK_INFO; /***************************************************************************** * * Event typedefs and structs * ****************************************************************************/ /* Dispatch info for each host-installed SCI handler */ typedef struct acpi_sci_handler_info { struct acpi_sci_handler_info *Next; ACPI_SCI_HANDLER Address; /* Address of handler */ void *Context; /* Context to be passed to handler */ } ACPI_SCI_HANDLER_INFO; /* Dispatch info for each GPE -- either a method or handler, cannot be both */ typedef struct acpi_gpe_handler_info { ACPI_GPE_HANDLER Address; /* Address of handler, if any */ void *Context; /* Context to be passed to handler */ ACPI_NAMESPACE_NODE *MethodNode; /* Method node for this GPE level (saved) */ UINT8 OriginalFlags; /* Original (pre-handler) GPE info */ BOOLEAN OriginallyEnabled; /* True if GPE was originally enabled */ } 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. */ typedef union acpi_gpe_dispatch_info { ACPI_NAMESPACE_NODE *MethodNode; /* Method node for this GPE level */ ACPI_GPE_HANDLER_INFO *Handler; /* Installed GPE handler */ ACPI_GPE_NOTIFY_INFO *NotifyList; /* List of _PRW devices for implicit notifies */ } ACPI_GPE_DISPATCH_INFO; /* * Information about a GPE, one per each GPE in an array. * NOTE: Important to keep this struct as small as possible. */ typedef struct acpi_gpe_event_info { 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 */ UINT8 RuntimeCount; /* References to a run GPE */ BOOLEAN DisableForDispatch; /* Masked during dispatching */ } ACPI_GPE_EVENT_INFO; /* Information about a GPE register pair, one per each status/enable pair in an array */ typedef struct acpi_gpe_register_info { ACPI_GENERIC_ADDRESS StatusAddress; /* Address of status reg */ ACPI_GENERIC_ADDRESS EnableAddress; /* Address of enable reg */ UINT16 BaseGpeNumber; /* Base GPE number for this register */ UINT8 EnableForWake; /* GPEs to keep enabled when sleeping */ UINT8 EnableForRun; /* GPEs to keep enabled when running */ UINT8 MaskForRun; /* GPEs to keep masked when running */ UINT8 EnableMask; /* Current mask of enabled GPEs */ } ACPI_GPE_REGISTER_INFO; /* * Information about a GPE register block, one per each installed block -- * GPE0, GPE1, and one per each installed GPE Block Device. */ typedef struct acpi_gpe_block_info { ACPI_NAMESPACE_NODE *Node; struct acpi_gpe_block_info *Previous; struct acpi_gpe_block_info *Next; struct acpi_gpe_xrupt_info *XruptBlock; /* Backpointer to interrupt block */ ACPI_GPE_REGISTER_INFO *RegisterInfo; /* One per GPE register pair */ ACPI_GPE_EVENT_INFO *EventInfo; /* One for each GPE */ UINT64 Address; /* Base address of the block */ UINT32 RegisterCount; /* Number of register pairs in block */ UINT16 GpeCount; /* Number of individual GPEs in block */ UINT16 BlockBaseNumber;/* Base GPE number for this block */ UINT8 SpaceId; BOOLEAN Initialized; /* TRUE if this block is initialized */ } ACPI_GPE_BLOCK_INFO; /* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */ typedef struct acpi_gpe_xrupt_info { struct acpi_gpe_xrupt_info *Previous; struct acpi_gpe_xrupt_info *Next; ACPI_GPE_BLOCK_INFO *GpeBlockListHead; /* List of GPE blocks for this xrupt */ UINT32 InterruptNumber; /* System interrupt number */ } ACPI_GPE_XRUPT_INFO; typedef struct acpi_gpe_walk_info { ACPI_NAMESPACE_NODE *GpeDevice; ACPI_GPE_BLOCK_INFO *GpeBlock; UINT16 Count; ACPI_OWNER_ID OwnerId; BOOLEAN ExecuteByOwnerId; } ACPI_GPE_WALK_INFO; typedef struct acpi_gpe_device_info { UINT32 Index; UINT32 NextBlockBaseIndex; ACPI_STATUS Status; ACPI_NAMESPACE_NODE *GpeDevice; } ACPI_GPE_DEVICE_INFO; typedef ACPI_STATUS (*ACPI_GPE_CALLBACK) ( ACPI_GPE_XRUPT_INFO *GpeXruptInfo, ACPI_GPE_BLOCK_INFO *GpeBlock, void *Context); /* Information about each particular fixed event */ typedef struct acpi_fixed_event_handler { ACPI_EVENT_HANDLER Handler; /* Address of handler. */ void *Context; /* Context to be passed to handler */ } ACPI_FIXED_EVENT_HANDLER; typedef struct acpi_fixed_event_info { UINT8 StatusRegisterId; UINT8 EnableRegisterId; UINT16 StatusBitMask; UINT16 EnableBitMask; } ACPI_FIXED_EVENT_INFO; /* Information used during field processing */ typedef struct acpi_field_info { UINT8 SkipField; UINT8 FieldFlag; UINT32 PkgLength; } ACPI_FIELD_INFO; /* Information about the interrupt ID and _EVT of a GED device */ typedef struct acpi_ged_handler_info { struct acpi_ged_handler_info *Next; UINT32 IntId; /* The interrupt ID that triggers the execution of the EvtMethod. */ ACPI_NAMESPACE_NODE *EvtMethod; /* The _EVT method to be executed when an interrupt with ID = IntID is received */ } ACPI_GED_HANDLER_INFO; /***************************************************************************** * * Generic "state" object for stacks * ****************************************************************************/ #define ACPI_CONTROL_NORMAL 0xC0 #define ACPI_CONTROL_CONDITIONAL_EXECUTING 0xC1 #define ACPI_CONTROL_PREDICATE_EXECUTING 0xC2 #define ACPI_CONTROL_PREDICATE_FALSE 0xC3 #define ACPI_CONTROL_PREDICATE_TRUE 0xC4 #define ACPI_STATE_COMMON \ void *Next; \ UINT8 DescriptorType; /* To differentiate various internal objs */\ UINT8 Flags; \ UINT16 Value; \ UINT16 State /* There are 2 bytes available here until the next natural alignment boundary */ typedef struct acpi_common_state { ACPI_STATE_COMMON; } ACPI_COMMON_STATE; /* * Update state - used to traverse complex objects such as packages */ typedef struct acpi_update_state { ACPI_STATE_COMMON; union acpi_operand_object *Object; } ACPI_UPDATE_STATE; /* * Pkg state - used to traverse nested package structures */ typedef struct acpi_pkg_state { ACPI_STATE_COMMON; UINT32 Index; union acpi_operand_object *SourceObject; union acpi_operand_object *DestObject; struct acpi_walk_state *WalkState; void *ThisTargetObj; UINT32 NumPackages; } ACPI_PKG_STATE; /* * Control state - one per if/else and while constructs. * Allows nesting of these constructs */ typedef struct acpi_control_state { ACPI_STATE_COMMON; UINT16 Opcode; union acpi_parse_object *PredicateOp; UINT8 *AmlPredicateStart; /* Start of if/while predicate */ UINT8 *PackageEnd; /* End of if/while block */ UINT64 LoopTimeout; /* While() loop timeout */ } ACPI_CONTROL_STATE; /* * Scope state - current scope during namespace lookups */ typedef struct acpi_scope_state { ACPI_STATE_COMMON; ACPI_NAMESPACE_NODE *Node; } ACPI_SCOPE_STATE; typedef struct acpi_pscope_state { ACPI_STATE_COMMON; UINT32 ArgCount; /* Number of fixed arguments */ union acpi_parse_object *Op; /* Current op being parsed */ UINT8 *ArgEnd; /* Current argument end */ UINT8 *PkgEnd; /* Current package end */ UINT32 ArgList; /* Next argument to parse */ } ACPI_PSCOPE_STATE; /* * Thread state - one per thread across multiple walk states. Multiple walk * states are created when there are nested control methods executing. */ typedef struct acpi_thread_state { ACPI_STATE_COMMON; UINT8 CurrentSyncLevel; /* Mutex Sync (nested acquire) level */ struct acpi_walk_state *WalkStateList; /* Head of list of WalkStates for this thread */ union acpi_operand_object *AcquiredMutexList; /* List of all currently acquired mutexes */ ACPI_THREAD_ID ThreadId; /* Running thread ID */ } ACPI_THREAD_STATE; /* * Result values - used to accumulate the results of nested * AML arguments */ typedef struct acpi_result_values { ACPI_STATE_COMMON; union acpi_operand_object *ObjDesc [ACPI_RESULTS_FRAME_OBJ_NUM]; } ACPI_RESULT_VALUES; typedef ACPI_STATUS (*ACPI_PARSE_DOWNWARDS) ( struct acpi_walk_state *WalkState, union acpi_parse_object **OutOp); typedef ACPI_STATUS (*ACPI_PARSE_UPWARDS) ( struct acpi_walk_state *WalkState); /* Global handlers for AML Notifies */ typedef struct acpi_global_notify_handler { ACPI_NOTIFY_HANDLER Handler; void *Context; } ACPI_GLOBAL_NOTIFY_HANDLER; /* * Notify info - used to pass info to the deferred notify * handler/dispatcher. */ typedef struct acpi_notify_info { ACPI_STATE_COMMON; UINT8 HandlerListId; ACPI_NAMESPACE_NODE *Node; union acpi_operand_object *HandlerListHead; ACPI_GLOBAL_NOTIFY_HANDLER *Global; } ACPI_NOTIFY_INFO; /* Generic state is union of structs above */ typedef union acpi_generic_state { ACPI_COMMON_STATE Common; ACPI_CONTROL_STATE Control; ACPI_UPDATE_STATE Update; ACPI_SCOPE_STATE Scope; ACPI_PSCOPE_STATE ParseScope; ACPI_PKG_STATE Pkg; ACPI_THREAD_STATE Thread; ACPI_RESULT_VALUES Results; ACPI_NOTIFY_INFO Notify; } ACPI_GENERIC_STATE; /***************************************************************************** * * Interpreter typedefs and structs * ****************************************************************************/ typedef ACPI_STATUS (*ACPI_EXECUTE_OP) ( struct acpi_walk_state *WalkState); /* Address Range info block */ typedef struct acpi_address_range { struct acpi_address_range *Next; ACPI_NAMESPACE_NODE *RegionNode; ACPI_PHYSICAL_ADDRESS StartAddress; ACPI_PHYSICAL_ADDRESS EndAddress; } ACPI_ADDRESS_RANGE; /***************************************************************************** * * Parser typedefs and structs * ****************************************************************************/ /* * AML opcode, name, and argument layout */ typedef struct acpi_opcode_info { #if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT) char *Name; /* Opcode name (disassembler/debug only) */ #endif UINT32 ParseArgs; /* Grammar/Parse time arguments */ UINT32 RuntimeArgs; /* Interpret time arguments */ UINT16 Flags; /* Misc flags */ UINT8 ObjectType; /* Corresponding internal object type */ UINT8 Class; /* Opcode class */ UINT8 Type; /* Opcode type */ } ACPI_OPCODE_INFO; /* Structure for Resource Tag information */ typedef struct acpi_tag_info { UINT32 BitOffset; UINT32 BitLength; } ACPI_TAG_INFO; /* Value associated with the parse object */ typedef union acpi_parse_value { UINT64 Integer; /* Integer constant (Up to 64 bits) */ UINT32 Size; /* bytelist or field size */ char *String; /* NULL terminated string */ UINT8 *Buffer; /* buffer or string */ char *Name; /* NULL terminated string */ union acpi_parse_object *Arg; /* arguments and contained ops */ ACPI_TAG_INFO Tag; /* Resource descriptor tag info */ } ACPI_PARSE_VALUE; #if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT) #define ACPI_DISASM_ONLY_MEMBERS(a) a; #else #define ACPI_DISASM_ONLY_MEMBERS(a) #endif #if defined(ACPI_ASL_COMPILER) #define ACPI_CONVERTER_ONLY_MEMBERS(a) a; #else #define ACPI_CONVERTER_ONLY_MEMBERS(a) #endif #define ACPI_PARSE_COMMON \ union acpi_parse_object *Parent; /* Parent op */\ UINT8 DescriptorType; /* To differentiate various internal objs */\ UINT8 Flags; /* Type of Op */\ UINT16 AmlOpcode; /* AML opcode */\ UINT8 *Aml; /* Address of declaration in AML */\ union acpi_parse_object *Next; /* Next op */\ ACPI_NAMESPACE_NODE *Node; /* For use by interpreter */\ ACPI_PARSE_VALUE Value; /* Value or args associated with the opcode */\ UINT8 ArgListLength; /* Number of elements in the arg list */\ ACPI_DISASM_ONLY_MEMBERS (\ UINT16 DisasmFlags; /* Used during AML disassembly */\ UINT8 DisasmOpcode; /* Subtype used for disassembly */\ char *OperatorSymbol; /* Used for C-style operator name strings */\ char AmlOpName[16]) /* Op name (debug only) */\ ACPI_CONVERTER_ONLY_MEMBERS (\ char *InlineComment; /* Inline comment */\ char *EndNodeComment; /* End of node comment */\ char *NameComment; /* Comment associated with the first parameter of the name node */\ char *CloseBraceComment; /* Comments that come after } on the same as } */\ ACPI_COMMENT_NODE *CommentList; /* comments that appears before this node */\ ACPI_COMMENT_NODE *EndBlkComment; /* comments that at the end of a block but before ) or } */\ char *CvFilename; /* Filename associated with this node. Used for ASL/ASL+ converter */\ char *CvParentFilename) /* Parent filename associated with this node. Used for ASL/ASL+ converter */ /* categories of comments */ typedef enum { STANDARD_COMMENT = 1, INLINE_COMMENT, ENDNODE_COMMENT, OPENBRACE_COMMENT, CLOSE_BRACE_COMMENT, STD_DEFBLK_COMMENT, END_DEFBLK_COMMENT, FILENAME_COMMENT, PARENTFILENAME_COMMENT, ENDBLK_COMMENT, INCLUDE_COMMENT } ASL_COMMENT_TYPES; /* Internal opcodes for DisasmOpcode field above */ #define ACPI_DASM_BUFFER 0x00 /* Buffer is a simple data buffer */ #define ACPI_DASM_RESOURCE 0x01 /* Buffer is a Resource Descriptor */ #define ACPI_DASM_STRING 0x02 /* Buffer is a ASCII string */ #define ACPI_DASM_UNICODE 0x03 /* Buffer is a Unicode string */ #define ACPI_DASM_PLD_METHOD 0x04 /* Buffer is a _PLD method bit-packed buffer */ #define ACPI_DASM_UUID 0x05 /* Buffer is a UUID/GUID */ #define ACPI_DASM_EISAID 0x06 /* Integer is an EISAID */ #define ACPI_DASM_MATCHOP 0x07 /* Parent opcode is a Match() operator */ #define ACPI_DASM_LNOT_PREFIX 0x08 /* Start of a LNotEqual (etc.) pair of opcodes */ #define ACPI_DASM_LNOT_SUFFIX 0x09 /* End of a LNotEqual (etc.) pair of opcodes */ #define ACPI_DASM_HID_STRING 0x0A /* String is a _HID or _CID */ #define ACPI_DASM_IGNORE_SINGLE 0x0B /* Ignore the opcode but not it's children */ #define ACPI_DASM_SWITCH 0x0C /* While is a Switch */ #define ACPI_DASM_SWITCH_PREDICATE 0x0D /* Object is a predicate for a Switch or Case block */ #define ACPI_DASM_CASE 0x0E /* If/Else is a Case in a Switch/Case block */ #define ACPI_DASM_DEFAULT 0x0F /* Else is a Default in a Switch/Case block */ /* * List struct used in the -ca option */ typedef struct acpi_comment_node { char *Comment; struct acpi_comment_node *Next; } ACPI_COMMENT_NODE; typedef struct acpi_comment_addr_node { UINT8 *Addr; struct acpi_comment_addr_node *Next; } ACPI_COMMENT_ADDR_NODE; /* * File node - used for "Include" operator file stack and * dependency tree for the -ca option */ typedef struct acpi_file_node { void *File; char *Filename; char *FileStart; /* Points to AML and indicates when the AML for this particular file starts. */ char *FileEnd; /* Points to AML and indicates when the AML for this particular file ends. */ struct acpi_file_node *Next; struct acpi_file_node *Parent; BOOLEAN IncludeWritten; ACPI_COMMENT_NODE *IncludeComment; } ACPI_FILE_NODE; /* * Generic operation (for example: If, While, Store) */ typedef struct acpi_parse_obj_common { ACPI_PARSE_COMMON } ACPI_PARSE_OBJ_COMMON; /* * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and OpRegions), * and bytelists. */ typedef struct acpi_parse_obj_named { ACPI_PARSE_COMMON char *Path; UINT8 *Data; /* AML body or bytelist data */ UINT32 Length; /* AML length */ UINT32 Name; /* 4-byte name or zero if no name */ } ACPI_PARSE_OBJ_NAMED; /* This version is used by the iASL compiler only */ #define ACPI_MAX_PARSEOP_NAME 20 typedef struct acpi_parse_obj_asl { ACPI_PARSE_COMMON union acpi_parse_object *Child; union acpi_parse_object *ParentMethod; char *Filename; BOOLEAN FileChanged; char *ParentFilename; char *ExternalName; char *Namepath; char NameSeg[4]; UINT32 ExtraValue; UINT32 Column; UINT32 LineNumber; UINT32 LogicalLineNumber; UINT32 LogicalByteOffset; UINT32 EndLine; UINT32 EndLogicalLine; UINT32 AcpiBtype; UINT32 AmlLength; UINT32 AmlSubtreeLength; UINT32 FinalAmlLength; UINT32 FinalAmlOffset; UINT32 CompileFlags; UINT16 ParseOpcode; UINT8 AmlOpcodeLength; UINT8 AmlPkgLenBytes; UINT8 Extra; char ParseOpName[ACPI_MAX_PARSEOP_NAME]; } ACPI_PARSE_OBJ_ASL; typedef union acpi_parse_object { ACPI_PARSE_OBJ_COMMON Common; ACPI_PARSE_OBJ_NAMED Named; ACPI_PARSE_OBJ_ASL Asl; } ACPI_PARSE_OBJECT; typedef struct asl_comment_state { UINT8 CommentType; UINT32 SpacesBefore; ACPI_PARSE_OBJECT *LatestParseOp; ACPI_PARSE_OBJECT *ParsingParenBraceNode; BOOLEAN CaptureComments; } ASL_COMMENT_STATE; /* * Parse state - one state per parser invocation and each control * method. */ typedef struct acpi_parse_state { UINT8 *AmlStart; /* First AML byte */ UINT8 *Aml; /* Next AML byte */ UINT8 *AmlEnd; /* (last + 1) AML byte */ UINT8 *PkgStart; /* Current package begin */ UINT8 *PkgEnd; /* Current package end */ union acpi_parse_object *StartOp; /* Root of parse tree */ struct acpi_namespace_node *StartNode; union acpi_generic_state *Scope; /* Current scope */ union acpi_parse_object *StartScope; UINT32 AmlSize; } ACPI_PARSE_STATE; /* Parse object flags */ #define ACPI_PARSEOP_GENERIC 0x01 #define ACPI_PARSEOP_NAMED_OBJECT 0x02 #define ACPI_PARSEOP_DEFERRED 0x04 #define ACPI_PARSEOP_BYTELIST 0x08 #define ACPI_PARSEOP_IN_STACK 0x10 #define ACPI_PARSEOP_TARGET 0x20 #define ACPI_PARSEOP_IN_CACHE 0x80 /* Parse object DisasmFlags */ #define ACPI_PARSEOP_IGNORE 0x0001 #define ACPI_PARSEOP_PARAMETER_LIST 0x0002 #define ACPI_PARSEOP_EMPTY_TERMLIST 0x0004 #define ACPI_PARSEOP_PREDEFINED_CHECKED 0x0008 #define ACPI_PARSEOP_CLOSING_PAREN 0x0010 #define ACPI_PARSEOP_COMPOUND_ASSIGNMENT 0x0020 #define ACPI_PARSEOP_ASSIGNMENT 0x0040 #define ACPI_PARSEOP_ELSEIF 0x0080 #define ACPI_PARSEOP_LEGACY_ASL_ONLY 0x0100 /***************************************************************************** * * Hardware (ACPI registers) and PNP * ****************************************************************************/ typedef struct acpi_bit_register_info { UINT8 ParentRegister; UINT8 BitPosition; UINT16 AccessBitMask; } ACPI_BIT_REGISTER_INFO; /* * Some ACPI registers have bits that must be ignored -- meaning that they * must be preserved. */ #define ACPI_PM1_STATUS_PRESERVED_BITS 0x0800 /* Bit 11 */ /* Write-only bits must be zeroed by software */ #define ACPI_PM1_CONTROL_WRITEONLY_BITS 0x2004 /* Bits 13, 2 */ /* For control registers, both ignored and reserved bits must be preserved */ /* * For PM1 control, the SCI enable bit (bit 0, SCI_EN) is defined by the * ACPI specification to be a "preserved" bit - "OSPM always preserves this * bit position", section 4.7.3.2.1. However, on some machines the OS must * write a one to this bit after resume for the machine to work properly. * To enable this, we no longer attempt to preserve this bit. No machines * are known to fail if the bit is not preserved. (May 2009) */ #define ACPI_PM1_CONTROL_IGNORED_BITS 0x0200 /* Bit 9 */ #define ACPI_PM1_CONTROL_RESERVED_BITS 0xC1F8 /* Bits 14-15, 3-8 */ #define ACPI_PM1_CONTROL_PRESERVED_BITS \ (ACPI_PM1_CONTROL_IGNORED_BITS | ACPI_PM1_CONTROL_RESERVED_BITS) #define ACPI_PM2_CONTROL_PRESERVED_BITS 0xFFFFFFFE /* All except bit 0 */ /* * Register IDs * These are the full ACPI registers */ #define ACPI_REGISTER_PM1_STATUS 0x01 #define ACPI_REGISTER_PM1_ENABLE 0x02 #define ACPI_REGISTER_PM1_CONTROL 0x03 #define ACPI_REGISTER_PM2_CONTROL 0x04 #define ACPI_REGISTER_PM_TIMER 0x05 #define ACPI_REGISTER_PROCESSOR_BLOCK 0x06 #define ACPI_REGISTER_SMI_COMMAND_BLOCK 0x07 /* Masks used to access the BitRegisters */ #define ACPI_BITMASK_TIMER_STATUS 0x0001 #define ACPI_BITMASK_BUS_MASTER_STATUS 0x0010 #define ACPI_BITMASK_GLOBAL_LOCK_STATUS 0x0020 #define ACPI_BITMASK_POWER_BUTTON_STATUS 0x0100 #define ACPI_BITMASK_SLEEP_BUTTON_STATUS 0x0200 #define ACPI_BITMASK_RT_CLOCK_STATUS 0x0400 #define ACPI_BITMASK_PCIEXP_WAKE_STATUS 0x4000 /* ACPI 3.0 */ #define ACPI_BITMASK_WAKE_STATUS 0x8000 #define ACPI_BITMASK_ALL_FIXED_STATUS (\ ACPI_BITMASK_TIMER_STATUS | \ ACPI_BITMASK_BUS_MASTER_STATUS | \ ACPI_BITMASK_GLOBAL_LOCK_STATUS | \ ACPI_BITMASK_POWER_BUTTON_STATUS | \ ACPI_BITMASK_SLEEP_BUTTON_STATUS | \ ACPI_BITMASK_RT_CLOCK_STATUS | \ ACPI_BITMASK_PCIEXP_WAKE_STATUS | \ ACPI_BITMASK_WAKE_STATUS) #define ACPI_BITMASK_TIMER_ENABLE 0x0001 #define ACPI_BITMASK_GLOBAL_LOCK_ENABLE 0x0020 #define ACPI_BITMASK_POWER_BUTTON_ENABLE 0x0100 #define ACPI_BITMASK_SLEEP_BUTTON_ENABLE 0x0200 #define ACPI_BITMASK_RT_CLOCK_ENABLE 0x0400 #define ACPI_BITMASK_PCIEXP_WAKE_DISABLE 0x4000 /* ACPI 3.0 */ #define ACPI_BITMASK_SCI_ENABLE 0x0001 #define ACPI_BITMASK_BUS_MASTER_RLD 0x0002 #define ACPI_BITMASK_GLOBAL_LOCK_RELEASE 0x0004 #define ACPI_BITMASK_SLEEP_TYPE 0x1C00 #define ACPI_BITMASK_SLEEP_ENABLE 0x2000 #define ACPI_BITMASK_ARB_DISABLE 0x0001 /* Raw bit position of each BitRegister */ #define ACPI_BITPOSITION_TIMER_STATUS 0x00 #define ACPI_BITPOSITION_BUS_MASTER_STATUS 0x04 #define ACPI_BITPOSITION_GLOBAL_LOCK_STATUS 0x05 #define ACPI_BITPOSITION_POWER_BUTTON_STATUS 0x08 #define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS 0x09 #define ACPI_BITPOSITION_RT_CLOCK_STATUS 0x0A #define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS 0x0E /* ACPI 3.0 */ #define ACPI_BITPOSITION_WAKE_STATUS 0x0F #define ACPI_BITPOSITION_TIMER_ENABLE 0x00 #define ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE 0x05 #define ACPI_BITPOSITION_POWER_BUTTON_ENABLE 0x08 #define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE 0x09 #define ACPI_BITPOSITION_RT_CLOCK_ENABLE 0x0A #define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE 0x0E /* ACPI 3.0 */ #define ACPI_BITPOSITION_SCI_ENABLE 0x00 #define ACPI_BITPOSITION_BUS_MASTER_RLD 0x01 #define ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE 0x02 #define ACPI_BITPOSITION_SLEEP_TYPE 0x0A #define ACPI_BITPOSITION_SLEEP_ENABLE 0x0D #define ACPI_BITPOSITION_ARB_DISABLE 0x00 /* Structs and definitions for _OSI support and I/O port validation */ #define ACPI_ALWAYS_ILLEGAL 0x00 typedef struct acpi_interface_info { char *Name; struct acpi_interface_info *Next; UINT8 Flags; UINT8 Value; } ACPI_INTERFACE_INFO; #define ACPI_OSI_INVALID 0x01 #define ACPI_OSI_DYNAMIC 0x02 #define ACPI_OSI_FEATURE 0x04 #define ACPI_OSI_DEFAULT_INVALID 0x08 #define ACPI_OSI_OPTIONAL_FEATURE (ACPI_OSI_FEATURE | ACPI_OSI_DEFAULT_INVALID | ACPI_OSI_INVALID) typedef struct acpi_port_info { char *Name; UINT16 Start; UINT16 End; UINT8 OsiDependency; } ACPI_PORT_INFO; /***************************************************************************** * * Resource descriptors * ****************************************************************************/ /* ResourceType values */ #define ACPI_ADDRESS_TYPE_MEMORY_RANGE 0 #define ACPI_ADDRESS_TYPE_IO_RANGE 1 #define ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE 2 /* Resource descriptor types and masks */ #define ACPI_RESOURCE_NAME_LARGE 0x80 #define ACPI_RESOURCE_NAME_SMALL 0x00 #define ACPI_RESOURCE_NAME_SMALL_MASK 0x78 /* Bits 6:3 contain the type */ #define ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK 0x07 /* Bits 2:0 contain the length */ #define ACPI_RESOURCE_NAME_LARGE_MASK 0x7F /* Bits 6:0 contain the type */ /* * Small resource descriptor "names" as defined by the ACPI specification. * Note: Bits 2:0 are used for the descriptor length */ #define ACPI_RESOURCE_NAME_IRQ 0x20 #define ACPI_RESOURCE_NAME_DMA 0x28 #define ACPI_RESOURCE_NAME_START_DEPENDENT 0x30 #define ACPI_RESOURCE_NAME_END_DEPENDENT 0x38 #define ACPI_RESOURCE_NAME_IO 0x40 #define ACPI_RESOURCE_NAME_FIXED_IO 0x48 #define ACPI_RESOURCE_NAME_FIXED_DMA 0x50 #define ACPI_RESOURCE_NAME_RESERVED_S2 0x58 #define ACPI_RESOURCE_NAME_RESERVED_S3 0x60 #define ACPI_RESOURCE_NAME_RESERVED_S4 0x68 #define ACPI_RESOURCE_NAME_VENDOR_SMALL 0x70 #define ACPI_RESOURCE_NAME_END_TAG 0x78 /* * Large resource descriptor "names" as defined by the ACPI specification. * Note: includes the Large Descriptor bit in bit[7] */ #define ACPI_RESOURCE_NAME_MEMORY24 0x81 #define ACPI_RESOURCE_NAME_GENERIC_REGISTER 0x82 #define ACPI_RESOURCE_NAME_RESERVED_L1 0x83 #define ACPI_RESOURCE_NAME_VENDOR_LARGE 0x84 #define ACPI_RESOURCE_NAME_MEMORY32 0x85 #define ACPI_RESOURCE_NAME_FIXED_MEMORY32 0x86 #define ACPI_RESOURCE_NAME_ADDRESS32 0x87 #define ACPI_RESOURCE_NAME_ADDRESS16 0x88 #define ACPI_RESOURCE_NAME_EXTENDED_IRQ 0x89 #define ACPI_RESOURCE_NAME_ADDRESS64 0x8A #define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 0x8B #define ACPI_RESOURCE_NAME_GPIO 0x8C #define ACPI_RESOURCE_NAME_PIN_FUNCTION 0x8D #define ACPI_RESOURCE_NAME_SERIAL_BUS 0x8E #define ACPI_RESOURCE_NAME_PIN_CONFIG 0x8F #define ACPI_RESOURCE_NAME_PIN_GROUP 0x90 #define ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION 0x91 #define ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG 0x92 #define ACPI_RESOURCE_NAME_CLOCK_INPUT 0x93 #define ACPI_RESOURCE_NAME_LARGE_MAX 0x94 /***************************************************************************** * * Miscellaneous * ****************************************************************************/ #define ACPI_ASCII_ZERO 0x30 /***************************************************************************** * * Disassembler * ****************************************************************************/ typedef struct acpi_external_list { char *Path; char *InternalPath; struct acpi_external_list *Next; UINT32 Value; UINT16 Length; UINT16 Flags; UINT8 Type; } ACPI_EXTERNAL_LIST; /* Values for Flags field above */ #define ACPI_EXT_RESOLVED_REFERENCE 0x01 /* Object was resolved during cross ref */ #define ACPI_EXT_ORIGIN_FROM_FILE 0x02 /* External came from a file */ #define ACPI_EXT_INTERNAL_PATH_ALLOCATED 0x04 /* Deallocate internal path on completion */ #define ACPI_EXT_EXTERNAL_EMITTED 0x08 /* External() statement has been emitted */ #define ACPI_EXT_ORIGIN_FROM_OPCODE 0x10 /* External came from a External() opcode */ #define ACPI_EXT_CONFLICTING_DECLARATION 0x20 /* External has a conflicting declaration within AML */ typedef struct acpi_external_file { char *Path; struct acpi_external_file *Next; } ACPI_EXTERNAL_FILE; typedef struct acpi_parse_object_list { ACPI_PARSE_OBJECT *Op; struct acpi_parse_object_list *Next; } ACPI_PARSE_OBJECT_LIST; /***************************************************************************** * * Debugger * ****************************************************************************/ typedef struct acpi_db_method_info { ACPI_HANDLE Method; ACPI_HANDLE MainThreadGate; ACPI_HANDLE ThreadCompleteGate; ACPI_HANDLE InfoGate; ACPI_THREAD_ID *Threads; UINT32 NumThreads; UINT32 NumCreated; UINT32 NumCompleted; char *Name; UINT32 Flags; UINT32 NumLoops; char Pathname[ACPI_DB_LINE_BUFFER_SIZE]; char **Args; ACPI_OBJECT_TYPE *Types; /* * Arguments to be passed to method for the commands Threads and * Background. Note, ACPI specifies a maximum of 7 arguments (0 - 6). * * For the Threads command, the Number of threads, ID of current * thread and Index of current thread inside all them created. */ char InitArgs; #ifdef ACPI_DEBUGGER ACPI_OBJECT_TYPE ArgTypes[ACPI_METHOD_NUM_ARGS]; #endif char *Arguments[ACPI_METHOD_NUM_ARGS]; char NumThreadsStr[11]; char IdOfThreadStr[11]; char IndexOfThreadStr[11]; } ACPI_DB_METHOD_INFO; typedef struct acpi_integrity_info { UINT32 Nodes; UINT32 Objects; } ACPI_INTEGRITY_INFO; #define ACPI_DB_DISABLE_OUTPUT 0x00 #define ACPI_DB_REDIRECTABLE_OUTPUT 0x01 #define ACPI_DB_CONSOLE_OUTPUT 0x02 #define ACPI_DB_DUPLICATE_OUTPUT 0x03 typedef struct acpi_object_info { UINT32 Types[ACPI_TOTAL_TYPES]; } ACPI_OBJECT_INFO; /***************************************************************************** * * Debug * ****************************************************************************/ /* Entry for a memory allocation (debug only) */ #define ACPI_MEM_MALLOC 0 #define ACPI_MEM_CALLOC 1 #define ACPI_MAX_MODULE_NAME 16 #define ACPI_COMMON_DEBUG_MEM_HEADER \ struct acpi_debug_mem_block *Previous; \ struct acpi_debug_mem_block *Next; \ UINT32 Size; \ UINT32 Component; \ UINT32 Line; \ char Module[ACPI_MAX_MODULE_NAME]; \ UINT8 AllocType; typedef struct acpi_debug_mem_header { ACPI_COMMON_DEBUG_MEM_HEADER } ACPI_DEBUG_MEM_HEADER; typedef struct acpi_debug_mem_block { ACPI_COMMON_DEBUG_MEM_HEADER UINT64 UserSpace; } ACPI_DEBUG_MEM_BLOCK; #define ACPI_MEM_LIST_GLOBAL 0 #define ACPI_MEM_LIST_NSNODE 1 #define ACPI_MEM_LIST_MAX 1 #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; typedef struct ah_device_id { char *Name; char *Description; } AH_DEVICE_ID; typedef struct ah_uuid { char *Description; char *String; } AH_UUID; typedef struct ah_table { char *Signature; char *Description; } AH_TABLE; #endif /* __ACLOCAL_H__ */ src/acpica/source/include/acmacros.h000066400000000000000000000775771465205512700200070ustar00rootroot00000000000000/****************************************************************************** * * Name: acmacros.h - C macros for the entire subsystem. * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACMACROS_H__ #define __ACMACROS_H__ /* * Extract data using a pointer. Any more than a byte and we * get into potential alignment issues -- see the STORE macros below. * Use with care. */ #define ACPI_CAST8(ptr) ACPI_CAST_PTR (UINT8, (ptr)) #define ACPI_CAST16(ptr) ACPI_CAST_PTR (UINT16, (ptr)) #define ACPI_CAST32(ptr) ACPI_CAST_PTR (UINT32, (ptr)) #define ACPI_CAST64(ptr) ACPI_CAST_PTR (UINT64, (ptr)) #define ACPI_GET8(ptr) (*ACPI_CAST8 (ptr)) #define ACPI_GET16(ptr) (*ACPI_CAST16 (ptr)) #define ACPI_GET32(ptr) (*ACPI_CAST32 (ptr)) #define ACPI_GET64(ptr) (*ACPI_CAST64 (ptr)) #define ACPI_SET8(ptr, val) (*ACPI_CAST8 (ptr) = (UINT8) (val)) #define ACPI_SET16(ptr, val) (*ACPI_CAST16 (ptr) = (UINT16) (val)) #define ACPI_SET32(ptr, val) (*ACPI_CAST32 (ptr) = (UINT32) (val)) #define ACPI_SET64(ptr, val) (*ACPI_CAST64 (ptr) = (UINT64) (val)) /* * printf() format helper. This macro is a workaround for the difficulties * with emitting 64-bit integers and 64-bit pointers with the same code * for both 32-bit and 64-bit hosts. */ #define ACPI_FORMAT_UINT64(i) ACPI_HIDWORD(i), ACPI_LODWORD(i) /* * Macros for moving data around to/from buffers that are possibly unaligned. * If the hardware supports the transfer of unaligned data, just do the store. * Otherwise, we have to move one byte at a time. */ #ifdef ACPI_BIG_ENDIAN /* * Macros for big-endian machines */ /* These macros reverse the bytes during the move, converting little-endian to big endian */ /* Big Endian <== Little Endian */ /* Hi...Lo Lo...Hi */ /* 16-bit source, 16/32/64 destination */ #define ACPI_MOVE_16_TO_16(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[1];\ (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[0];} #define ACPI_MOVE_16_TO_32(d, s) {(*(UINT32 *)(void *)(d))=0;\ ((UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[1];\ ((UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[0];} #define ACPI_MOVE_16_TO_64(d, s) {(*(UINT64 *)(void *)(d))=0;\ ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\ ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];} /* 32-bit source, 16/32/64 destination */ #define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ #define ACPI_MOVE_32_TO_32(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\ (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[2];\ (( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[1];\ (( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[0];} #define ACPI_MOVE_32_TO_64(d, s) {(*(UINT64 *)(void *)(d))=0;\ ((UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[3];\ ((UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[2];\ ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\ ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];} /* 64-bit source, 16/32/64 destination */ #define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ #define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */ #define ACPI_MOVE_64_TO_64(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\ (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];\ (( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[5];\ (( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[4];\ (( UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[3];\ (( UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[2];\ (( UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\ (( UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];} #else /* * Macros for little-endian machines */ #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED /* The hardware supports unaligned transfers, just do the little-endian move */ /* 16-bit source, 16/32/64 destination */ #define ACPI_MOVE_16_TO_16(d, s) *(UINT16 *)(void *)(d) = *(UINT16 *)(void *)(s) #define ACPI_MOVE_16_TO_32(d, s) *(UINT32 *)(void *)(d) = *(UINT16 *)(void *)(s) #define ACPI_MOVE_16_TO_64(d, s) *(UINT64 *)(void *)(d) = *(UINT16 *)(void *)(s) /* 32-bit source, 16/32/64 destination */ #define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ #define ACPI_MOVE_32_TO_32(d, s) *(UINT32 *)(void *)(d) = *(UINT32 *)(void *)(s) #define ACPI_MOVE_32_TO_64(d, s) *(UINT64 *)(void *)(d) = *(UINT32 *)(void *)(s) /* 64-bit source, 16/32/64 destination */ #define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ #define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */ #define ACPI_MOVE_64_TO_64(d, s) *(UINT64 *)(void *)(d) = *(UINT64 *)(void *)(s) #else /* * The hardware does not support unaligned transfers. We must move the * data one byte at a time. These macros work whether the source or * the destination (or both) is/are unaligned. (Little-endian move) */ /* 16-bit source, 16/32/64 destination */ #define ACPI_MOVE_16_TO_16(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\ (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];} #define ACPI_MOVE_16_TO_32(d, s) {(*(UINT32 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);} #define ACPI_MOVE_16_TO_64(d, s) {(*(UINT64 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);} /* 32-bit source, 16/32/64 destination */ #define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ #define ACPI_MOVE_32_TO_32(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\ (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];\ (( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[2];\ (( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[3];} #define ACPI_MOVE_32_TO_64(d, s) {(*(UINT64 *)(void *)(d)) = 0; ACPI_MOVE_32_TO_32(d, s);} /* 64-bit source, 16/32/64 destination */ #define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ #define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */ #define ACPI_MOVE_64_TO_64(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\ (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];\ (( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[2];\ (( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[3];\ (( UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[4];\ (( UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[5];\ (( UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[6];\ (( UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[7];} #endif #endif /* * Fast power-of-two math macros for non-optimized compilers */ #define _ACPI_DIV(value, PowerOf2) ((UINT32) ((value) >> (PowerOf2))) #define _ACPI_MUL(value, PowerOf2) ((UINT32) ((value) << (PowerOf2))) #define _ACPI_MOD(value, Divisor) ((UINT32) ((value) & ((Divisor) -1))) #define ACPI_DIV_2(a) _ACPI_DIV(a, 1) #define ACPI_MUL_2(a) _ACPI_MUL(a, 1) #define ACPI_MOD_2(a) _ACPI_MOD(a, 2) #define ACPI_DIV_4(a) _ACPI_DIV(a, 2) #define ACPI_MUL_4(a) _ACPI_MUL(a, 2) #define ACPI_MOD_4(a) _ACPI_MOD(a, 4) #define ACPI_DIV_8(a) _ACPI_DIV(a, 3) #define ACPI_MUL_8(a) _ACPI_MUL(a, 3) #define ACPI_MOD_8(a) _ACPI_MOD(a, 8) #define ACPI_DIV_16(a) _ACPI_DIV(a, 4) #define ACPI_MUL_16(a) _ACPI_MUL(a, 4) #define ACPI_MOD_16(a) _ACPI_MOD(a, 16) #define ACPI_DIV_32(a) _ACPI_DIV(a, 5) #define ACPI_MUL_32(a) _ACPI_MUL(a, 5) #define ACPI_MOD_32(a) _ACPI_MOD(a, 32) /* Test for ASCII character */ #define ACPI_IS_ASCII(c) ((c) < 0x80) /* Signed integers */ #define ACPI_SIGN_POSITIVE 0 #define ACPI_SIGN_NEGATIVE 1 /* * Rounding macros (Power of two boundaries only) */ #define ACPI_ROUND_DOWN(value, boundary) (((ACPI_SIZE)(value)) & \ (~(((ACPI_SIZE) boundary)-1))) #define ACPI_ROUND_UP(value, boundary) ((((ACPI_SIZE)(value)) + \ (((ACPI_SIZE) boundary)-1)) & \ (~(((ACPI_SIZE) boundary)-1))) /* Note: sizeof(ACPI_SIZE) evaluates to either 4 or 8 (32- vs 64-bit mode) */ #define ACPI_ROUND_DOWN_TO_32BIT(a) ACPI_ROUND_DOWN(a, 4) #define ACPI_ROUND_DOWN_TO_64BIT(a) ACPI_ROUND_DOWN(a, 8) #define ACPI_ROUND_DOWN_TO_NATIVE_WORD(a) ACPI_ROUND_DOWN(a, sizeof(ACPI_SIZE)) #define ACPI_ROUND_UP_TO_32BIT(a) ACPI_ROUND_UP(a, 4) #define ACPI_ROUND_UP_TO_64BIT(a) ACPI_ROUND_UP(a, 8) #define ACPI_ROUND_UP_TO_NATIVE_WORD(a) ACPI_ROUND_UP(a, sizeof(ACPI_SIZE)) #define ACPI_ROUND_BITS_UP_TO_BYTES(a) ACPI_DIV_8((a) + 7) #define ACPI_ROUND_BITS_DOWN_TO_BYTES(a) ACPI_DIV_8((a)) #define ACPI_ROUND_UP_TO_1K(a) (((a) + 1023) >> 10) /* Generic (non-power-of-two) rounding */ #define ACPI_ROUND_UP_TO(value, boundary) (((value) + ((boundary)-1)) / (boundary)) #define ACPI_IS_MISALIGNED(value) (((ACPI_SIZE) value) & (sizeof(ACPI_SIZE)-1)) /* Generic bit manipulation */ #ifndef ACPI_USE_NATIVE_BIT_FINDER #define __ACPI_FIND_LAST_BIT_2(a, r) ((((UINT8) (a)) & 0x02) ? (r)+1 : (r)) #define __ACPI_FIND_LAST_BIT_4(a, r) ((((UINT8) (a)) & 0x0C) ? \ __ACPI_FIND_LAST_BIT_2 ((a)>>2, (r)+2) : \ __ACPI_FIND_LAST_BIT_2 ((a), (r))) #define __ACPI_FIND_LAST_BIT_8(a, r) ((((UINT8) (a)) & 0xF0) ? \ __ACPI_FIND_LAST_BIT_4 ((a)>>4, (r)+4) : \ __ACPI_FIND_LAST_BIT_4 ((a), (r))) #define __ACPI_FIND_LAST_BIT_16(a, r) ((((UINT16) (a)) & 0xFF00) ? \ __ACPI_FIND_LAST_BIT_8 ((a)>>8, (r)+8) : \ __ACPI_FIND_LAST_BIT_8 ((a), (r))) #define __ACPI_FIND_LAST_BIT_32(a, r) ((((UINT32) (a)) & 0xFFFF0000) ? \ __ACPI_FIND_LAST_BIT_16 ((a)>>16, (r)+16) : \ __ACPI_FIND_LAST_BIT_16 ((a), (r))) #define __ACPI_FIND_LAST_BIT_64(a, r) ((((UINT64) (a)) & 0xFFFFFFFF00000000) ? \ __ACPI_FIND_LAST_BIT_32 ((a)>>32, (r)+32) : \ __ACPI_FIND_LAST_BIT_32 ((a), (r))) #define ACPI_FIND_LAST_BIT_8(a) ((a) ? __ACPI_FIND_LAST_BIT_8 (a, 1) : 0) #define ACPI_FIND_LAST_BIT_16(a) ((a) ? __ACPI_FIND_LAST_BIT_16 (a, 1) : 0) #define ACPI_FIND_LAST_BIT_32(a) ((a) ? __ACPI_FIND_LAST_BIT_32 (a, 1) : 0) #define ACPI_FIND_LAST_BIT_64(a) ((a) ? __ACPI_FIND_LAST_BIT_64 (a, 1) : 0) #define __ACPI_FIND_FIRST_BIT_2(a, r) ((((UINT8) (a)) & 0x01) ? (r) : (r)+1) #define __ACPI_FIND_FIRST_BIT_4(a, r) ((((UINT8) (a)) & 0x03) ? \ __ACPI_FIND_FIRST_BIT_2 ((a), (r)) : \ __ACPI_FIND_FIRST_BIT_2 ((a)>>2, (r)+2)) #define __ACPI_FIND_FIRST_BIT_8(a, r) ((((UINT8) (a)) & 0x0F) ? \ __ACPI_FIND_FIRST_BIT_4 ((a), (r)) : \ __ACPI_FIND_FIRST_BIT_4 ((a)>>4, (r)+4)) #define __ACPI_FIND_FIRST_BIT_16(a, r) ((((UINT16) (a)) & 0x00FF) ? \ __ACPI_FIND_FIRST_BIT_8 ((a), (r)) : \ __ACPI_FIND_FIRST_BIT_8 ((a)>>8, (r)+8)) #define __ACPI_FIND_FIRST_BIT_32(a, r) ((((UINT32) (a)) & 0x0000FFFF) ? \ __ACPI_FIND_FIRST_BIT_16 ((a), (r)) : \ __ACPI_FIND_FIRST_BIT_16 ((a)>>16, (r)+16)) #define __ACPI_FIND_FIRST_BIT_64(a, r) ((((UINT64) (a)) & 0x00000000FFFFFFFF) ? \ __ACPI_FIND_FIRST_BIT_32 ((a), (r)) : \ __ACPI_FIND_FIRST_BIT_32 ((a)>>32, (r)+32)) #define ACPI_FIND_FIRST_BIT_8(a) ((a) ? __ACPI_FIND_FIRST_BIT_8 (a, 1) : 0) #define ACPI_FIND_FIRST_BIT_16(a) ((a) ? __ACPI_FIND_FIRST_BIT_16 (a, 1) : 0) #define ACPI_FIND_FIRST_BIT_32(a) ((a) ? __ACPI_FIND_FIRST_BIT_32 (a, 1) : 0) #define ACPI_FIND_FIRST_BIT_64(a) ((a) ? __ACPI_FIND_FIRST_BIT_64 (a, 1) : 0) #endif /* ACPI_USE_NATIVE_BIT_FINDER */ /* Generic (power-of-two) rounding */ #define ACPI_ROUND_UP_POWER_OF_TWO_8(a) ((UINT8) \ (((UINT16) 1) << ACPI_FIND_LAST_BIT_8 ((a) - 1))) #define ACPI_ROUND_DOWN_POWER_OF_TWO_8(a) ((UINT8) \ (((UINT16) 1) << (ACPI_FIND_LAST_BIT_8 ((a)) - 1))) #define ACPI_ROUND_UP_POWER_OF_TWO_16(a) ((UINT16) \ (((UINT32) 1) << ACPI_FIND_LAST_BIT_16 ((a) - 1))) #define ACPI_ROUND_DOWN_POWER_OF_TWO_16(a) ((UINT16) \ (((UINT32) 1) << (ACPI_FIND_LAST_BIT_16 ((a)) - 1))) #define ACPI_ROUND_UP_POWER_OF_TWO_32(a) ((UINT32) \ (((UINT64) 1) << ACPI_FIND_LAST_BIT_32 ((a) - 1))) #define ACPI_ROUND_DOWN_POWER_OF_TWO_32(a) ((UINT32) \ (((UINT64) 1) << (ACPI_FIND_LAST_BIT_32 ((a)) - 1))) #define ACPI_IS_ALIGNED(a, s) (((a) & ((s) - 1)) == 0) #define ACPI_IS_POWER_OF_TWO(a) ACPI_IS_ALIGNED(a, a) /* * Bitmask creation * Bit positions start at zero. * MASK_BITS_ABOVE creates a mask starting AT the position and above * MASK_BITS_BELOW creates a mask starting one bit BELOW the position * MASK_BITS_ABOVE/BELOW accepts a bit offset to create a mask * MASK_BITS_ABOVE/BELOW_32/64 accepts a bit width to create a mask * Note: The ACPI_INTEGER_BIT_SIZE check is used to bypass compiler * differences with the shift operator */ #define ACPI_MASK_BITS_ABOVE(position) (~((ACPI_UINT64_MAX) << ((UINT32) (position)))) #define ACPI_MASK_BITS_BELOW(position) ((ACPI_UINT64_MAX) << ((UINT32) (position))) #define ACPI_MASK_BITS_ABOVE_32(width) ((UINT32) ACPI_MASK_BITS_ABOVE(width)) #define ACPI_MASK_BITS_BELOW_32(width) ((UINT32) ACPI_MASK_BITS_BELOW(width)) #define ACPI_MASK_BITS_ABOVE_64(width) ((width) == ACPI_INTEGER_BIT_SIZE ? \ ACPI_UINT64_MAX : \ ACPI_MASK_BITS_ABOVE(width)) #define ACPI_MASK_BITS_BELOW_64(width) ((width) == ACPI_INTEGER_BIT_SIZE ? \ (UINT64) 0 : \ ACPI_MASK_BITS_BELOW(width)) /* Bitfields within ACPI registers */ #define ACPI_REGISTER_PREPARE_BITS(Val, Pos, Mask) \ ((Val << Pos) & Mask) #define ACPI_REGISTER_INSERT_VALUE(Reg, Pos, Mask, Val) \ Reg = (Reg & (~(Mask))) | ACPI_REGISTER_PREPARE_BITS(Val, Pos, Mask) #define ACPI_INSERT_BITS(Target, Mask, Source) \ Target = ((Target & (~(Mask))) | (Source & Mask)) /* Generic bitfield macros and masks */ #define ACPI_GET_BITS(SourcePtr, Position, Mask) \ ((*(SourcePtr) >> (Position)) & (Mask)) #define ACPI_SET_BITS(TargetPtr, Position, Mask, Value) \ (*(TargetPtr) |= (((Value) & (Mask)) << (Position))) #define ACPI_1BIT_MASK 0x00000001 #define ACPI_2BIT_MASK 0x00000003 #define ACPI_3BIT_MASK 0x00000007 #define ACPI_4BIT_MASK 0x0000000F #define ACPI_5BIT_MASK 0x0000001F #define ACPI_6BIT_MASK 0x0000003F #define ACPI_7BIT_MASK 0x0000007F #define ACPI_8BIT_MASK 0x000000FF #define ACPI_16BIT_MASK 0x0000FFFF #define ACPI_24BIT_MASK 0x00FFFFFF /* Macros to extract flag bits from position zero */ #define ACPI_GET_1BIT_FLAG(Value) ((Value) & ACPI_1BIT_MASK) #define ACPI_GET_2BIT_FLAG(Value) ((Value) & ACPI_2BIT_MASK) #define ACPI_GET_3BIT_FLAG(Value) ((Value) & ACPI_3BIT_MASK) #define ACPI_GET_4BIT_FLAG(Value) ((Value) & ACPI_4BIT_MASK) /* Macros to extract flag bits from position one and above */ #define ACPI_EXTRACT_1BIT_FLAG(Field, Position) (ACPI_GET_1BIT_FLAG ((Field) >> Position)) #define ACPI_EXTRACT_2BIT_FLAG(Field, Position) (ACPI_GET_2BIT_FLAG ((Field) >> Position)) #define ACPI_EXTRACT_3BIT_FLAG(Field, Position) (ACPI_GET_3BIT_FLAG ((Field) >> Position)) #define ACPI_EXTRACT_4BIT_FLAG(Field, Position) (ACPI_GET_4BIT_FLAG ((Field) >> Position)) /* ACPI Pathname helpers */ #define ACPI_IS_ROOT_PREFIX(c) ((c) == (UINT8) 0x5C) /* Backslash */ #define ACPI_IS_PARENT_PREFIX(c) ((c) == (UINT8) 0x5E) /* Carat */ #define ACPI_IS_PATH_SEPARATOR(c) ((c) == (UINT8) 0x2E) /* Period (dot) */ /* * An object of type ACPI_NAMESPACE_NODE can appear in some contexts * where a pointer to an object of type ACPI_OPERAND_OBJECT can also * appear. This macro is used to distinguish them. * * The "DescriptorType" field is the second field in both structures. */ #define ACPI_GET_DESCRIPTOR_PTR(d) (((ACPI_DESCRIPTOR *)(void *)(d))->Common.CommonPointer) #define ACPI_SET_DESCRIPTOR_PTR(d, p) (((ACPI_DESCRIPTOR *)(void *)(d))->Common.CommonPointer = (p)) #define ACPI_GET_DESCRIPTOR_TYPE(d) (((ACPI_DESCRIPTOR *)(void *)(d))->Common.DescriptorType) #define ACPI_SET_DESCRIPTOR_TYPE(d, t) (((ACPI_DESCRIPTOR *)(void *)(d))->Common.DescriptorType = (t)) /* * Macros for the master AML opcode table */ #if defined (ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT) #define ACPI_OP(Name, PArgs, IArgs, ObjType, Class, Type, Flags) \ {Name, (UINT32)(PArgs), (UINT32)(IArgs), (UINT32)(Flags), ObjType, Class, Type} #else #define ACPI_OP(Name, PArgs, IArgs, ObjType, Class, Type, Flags) \ {(UINT32)(PArgs), (UINT32)(IArgs), (UINT32)(Flags), ObjType, Class, Type} #endif #define ARG_TYPE_WIDTH 5 #define ARG_1(x) ((UINT32)(x)) #define ARG_2(x) ((UINT32)(x) << (1 * ARG_TYPE_WIDTH)) #define ARG_3(x) ((UINT32)(x) << (2 * ARG_TYPE_WIDTH)) #define ARG_4(x) ((UINT32)(x) << (3 * ARG_TYPE_WIDTH)) #define ARG_5(x) ((UINT32)(x) << (4 * ARG_TYPE_WIDTH)) #define ARG_6(x) ((UINT32)(x) << (5 * ARG_TYPE_WIDTH)) #define ARGI_LIST1(a) (ARG_1(a)) #define ARGI_LIST2(a, b) (ARG_1(b)|ARG_2(a)) #define ARGI_LIST3(a, b, c) (ARG_1(c)|ARG_2(b)|ARG_3(a)) #define ARGI_LIST4(a, b, c, d) (ARG_1(d)|ARG_2(c)|ARG_3(b)|ARG_4(a)) #define ARGI_LIST5(a, b, c, d, e) (ARG_1(e)|ARG_2(d)|ARG_3(c)|ARG_4(b)|ARG_5(a)) #define ARGI_LIST6(a, b, c, d, e, f) (ARG_1(f)|ARG_2(e)|ARG_3(d)|ARG_4(c)|ARG_5(b)|ARG_6(a)) #define ARGP_LIST1(a) (ARG_1(a)) #define ARGP_LIST2(a, b) (ARG_1(a)|ARG_2(b)) #define ARGP_LIST3(a, b, c) (ARG_1(a)|ARG_2(b)|ARG_3(c)) #define ARGP_LIST4(a, b, c, d) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)) #define ARGP_LIST5(a, b, c, d, e) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)) #define ARGP_LIST6(a, b, c, d, e, f) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)|ARG_6(f)) #define GET_CURRENT_ARG_TYPE(List) (List & ((UINT32) 0x1F)) #define INCREMENT_ARG_LIST(List) (List >>= ((UINT32) ARG_TYPE_WIDTH)) /* * Ascii error messages can be configured out */ #ifndef ACPI_NO_ERROR_MESSAGES /* * Error reporting. The callers module and line number are inserted by AE_INFO, * the plist contains a set of parens to allow variable-length lists. * These macros are used for both the debug and non-debug versions of the code. */ #define ACPI_ERROR_NAMESPACE(s, p, e) AcpiUtPrefixedNamespaceError (AE_INFO, s, p, e); #define ACPI_ERROR_METHOD(s, n, p, e) AcpiUtMethodError (AE_INFO, s, n, p, e); #define ACPI_WARN_PREDEFINED(plist) AcpiUtPredefinedWarning plist #define ACPI_INFO_PREDEFINED(plist) AcpiUtPredefinedInfo plist #define ACPI_BIOS_ERROR_PREDEFINED(plist) AcpiUtPredefinedBiosError plist #define ACPI_ERROR_ONLY(s) s #else /* No error messages */ #define ACPI_ERROR_NAMESPACE(s, p, e) #define ACPI_ERROR_METHOD(s, n, p, e) #define ACPI_WARN_PREDEFINED(plist) #define ACPI_INFO_PREDEFINED(plist) #define ACPI_BIOS_ERROR_PREDEFINED(plist) #define ACPI_ERROR_ONLY(s) #endif /* ACPI_NO_ERROR_MESSAGES */ #if (!ACPI_REDUCED_HARDWARE) #define ACPI_HW_OPTIONAL_FUNCTION(addr) addr #else #define ACPI_HW_OPTIONAL_FUNCTION(addr) NULL #endif /* * Macros used for ACPICA utilities only */ /* Generate a UUID */ #define ACPI_INIT_UUID(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \ (a) & 0xFF, ((a) >> 8) & 0xFF, ((a) >> 16) & 0xFF, ((a) >> 24) & 0xFF, \ (b) & 0xFF, ((b) >> 8) & 0xFF, \ (c) & 0xFF, ((c) >> 8) & 0xFF, \ (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) #define ACPI_IS_OCTAL_DIGIT(d) (((char)(d) >= '0') && ((char)(d) <= '7')) /* * Macros used for the ASL-/ASL+ converter utility */ #ifdef ACPI_ASL_COMPILER #define ASL_CV_LABEL_FILENODE(a) CvLabelFileNode(a); #define ASL_CV_CAPTURE_COMMENTS_ONLY(a) CvCaptureCommentsOnly (a); #define ASL_CV_CAPTURE_COMMENTS(a) CvCaptureComments (a); #define ASL_CV_TRANSFER_COMMENTS(a) CvTransferComments (a); #define ASL_CV_CLOSE_PAREN(a,b) CvCloseParenWriteComment(a,b); #define ASL_CV_CLOSE_BRACE(a,b) CvCloseBraceWriteComment(a,b); #define ASL_CV_SWITCH_FILES(a,b) CvSwitchFiles(a,b); #define ASL_CV_CLEAR_OP_COMMENTS(a) CvClearOpComments(a); #define ASL_CV_PRINT_ONE_COMMENT(a,b,c,d) CvPrintOneCommentType (a,b,c,d); #define ASL_CV_PRINT_ONE_COMMENT_LIST(a,b) CvPrintOneCommentList (a,b); #define ASL_CV_FILE_HAS_SWITCHED(a) CvFileHasSwitched(a) #define ASL_CV_INIT_FILETREE(a,b) CvInitFileTree(a,b); #else #define ASL_CV_LABEL_FILENODE(a) #define ASL_CV_CAPTURE_COMMENTS_ONLY(a) #define ASL_CV_CAPTURE_COMMENTS(a) #define ASL_CV_TRANSFER_COMMENTS(a) #define ASL_CV_CLOSE_PAREN(a,b) AcpiOsPrintf (")"); #define ASL_CV_CLOSE_BRACE(a,b) AcpiOsPrintf ("}"); #define ASL_CV_SWITCH_FILES(a,b) #define ASL_CV_CLEAR_OP_COMMENTS(a) #define ASL_CV_PRINT_ONE_COMMENT(a,b,c,d) #define ASL_CV_PRINT_ONE_COMMENT_LIST(a,b) #define ASL_CV_FILE_HAS_SWITCHED(a) 0 #define ASL_CV_INIT_FILETREE(a,b) #endif #endif /* ACMACROS_H */ src/acpica/source/include/acnames.h000066400000000000000000000241251465205512700176030ustar00rootroot00000000000000/****************************************************************************** * * Name: acnames.h - Global names and strings * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACNAMES_H__ #define __ACNAMES_H__ /* Method names - these methods can appear anywhere in the namespace */ #define METHOD_NAME__ADR "_ADR" #define METHOD_NAME__AEI "_AEI" #define METHOD_NAME__BBN "_BBN" #define METHOD_NAME__CBA "_CBA" #define METHOD_NAME__CID "_CID" #define METHOD_NAME__CLS "_CLS" #define METHOD_NAME__CRS "_CRS" #define METHOD_NAME__DDN "_DDN" #define METHOD_NAME__DIS "_DIS" #define METHOD_NAME__DMA "_DMA" #define METHOD_NAME__EVT "_EVT" #define METHOD_NAME__HID "_HID" #define METHOD_NAME__INI "_INI" #define METHOD_NAME__PLD "_PLD" #define METHOD_NAME__DSD "_DSD" #define METHOD_NAME__PRS "_PRS" #define METHOD_NAME__PRT "_PRT" #define METHOD_NAME__PRW "_PRW" #define METHOD_NAME__PS0 "_PS0" #define METHOD_NAME__PS1 "_PS1" #define METHOD_NAME__PS2 "_PS2" #define METHOD_NAME__PS3 "_PS3" #define METHOD_NAME__REG "_REG" #define METHOD_NAME__SB_ "_SB_" #define METHOD_NAME__SEG "_SEG" #define METHOD_NAME__SRS "_SRS" #define METHOD_NAME__STA "_STA" #define METHOD_NAME__SUB "_SUB" #define METHOD_NAME__UID "_UID" /* Method names - these methods must appear at the namespace root */ #define METHOD_PATHNAME__PTS "\\_PTS" #define METHOD_PATHNAME__SST "\\_SI._SST" #define METHOD_PATHNAME__WAK "\\_WAK" /* Definitions of the predefined namespace names */ #define ACPI_UNKNOWN_NAME (UINT32) 0x3F3F3F3F /* Unknown name is "????" */ #define ACPI_PREFIX_MIXED (UINT32) 0x69706341 /* "Acpi" */ #define ACPI_PREFIX_LOWER (UINT32) 0x69706361 /* "acpi" */ /* Root name stuff */ #define ACPI_ROOT_NAME (UINT32) 0x5F5F5F5C /* Root name is "\___" */ #define ACPI_ROOT_PATHNAME "\\___" #define ACPI_NAMESPACE_ROOT "Namespace Root" #define ACPI_NS_ROOT_PATH "\\" #endif /* __ACNAMES_H__ */ src/acpica/source/include/acnamesp.h000066400000000000000000000510611465205512700177620ustar00rootroot00000000000000/****************************************************************************** * * Name: acnamesp.h - Namespace subcomponent prototypes and defines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACNAMESP_H__ #define __ACNAMESP_H__ /* To search the entire name space, pass this as SearchBase */ #define ACPI_NS_ALL ((ACPI_HANDLE)0) /* * Elements of AcpiNsProperties are bit significant * and should be one-to-one with values of ACPI_OBJECT_TYPE */ #define ACPI_NS_NORMAL 0 #define ACPI_NS_NEWSCOPE 1 /* a definition of this type opens a name scope */ #define ACPI_NS_LOCAL 2 /* suppress search of enclosing scopes */ /* Flags for AcpiNsLookup, AcpiNsSearchAndEnter */ #define ACPI_NS_NO_UPSEARCH 0 #define ACPI_NS_SEARCH_PARENT 0x0001 #define ACPI_NS_DONT_OPEN_SCOPE 0x0002 #define ACPI_NS_NO_PEER_SEARCH 0x0004 #define ACPI_NS_ERROR_IF_FOUND 0x0008 #define ACPI_NS_PREFIX_IS_SCOPE 0x0010 #define ACPI_NS_EXTERNAL 0x0020 #define ACPI_NS_TEMPORARY 0x0040 #define ACPI_NS_OVERRIDE_IF_FOUND 0x0080 #define ACPI_NS_EARLY_INIT 0x0100 #define ACPI_NS_PREFIX_MUST_EXIST 0x0200 /* Flags for AcpiNsWalkNamespace */ #define ACPI_NS_WALK_NO_UNLOCK 0 #define ACPI_NS_WALK_UNLOCK 0x01 #define ACPI_NS_WALK_TEMP_NODES 0x02 /* Object is not a package element */ #define ACPI_NOT_PACKAGE_ELEMENT ACPI_UINT32_MAX #define ACPI_ALL_PACKAGE_ELEMENTS (ACPI_UINT32_MAX-1) /* Always emit warning message, not dependent on node flags */ #define ACPI_WARN_ALWAYS 0 /* * nsinit - Namespace initialization */ ACPI_STATUS AcpiNsInitializeObjects ( void); ACPI_STATUS AcpiNsInitializeDevices ( UINT32 Flags); ACPI_STATUS AcpiNsInitOnePackage ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); /* * nsload - Namespace loading */ ACPI_STATUS AcpiNsLoadNamespace ( void); ACPI_STATUS AcpiNsLoadTable ( UINT32 TableIndex, ACPI_NAMESPACE_NODE *Node); /* * nswalk - walk the namespace */ ACPI_STATUS AcpiNsWalkNamespace ( ACPI_OBJECT_TYPE Type, ACPI_HANDLE StartObject, UINT32 MaxDepth, UINT32 Flags, ACPI_WALK_CALLBACK DescendingCallback, ACPI_WALK_CALLBACK AscendingCallback, void *Context, void **ReturnValue); ACPI_NAMESPACE_NODE * AcpiNsGetNextNode ( ACPI_NAMESPACE_NODE *Parent, ACPI_NAMESPACE_NODE *Child); ACPI_NAMESPACE_NODE * AcpiNsGetNextNodeTyped ( ACPI_OBJECT_TYPE Type, ACPI_NAMESPACE_NODE *Parent, ACPI_NAMESPACE_NODE *Child); /* * nsparse - table parsing */ ACPI_STATUS AcpiNsParseTable ( UINT32 TableIndex, ACPI_NAMESPACE_NODE *StartNode); ACPI_STATUS AcpiNsExecuteTable ( UINT32 TableIndex, ACPI_NAMESPACE_NODE *StartNode); ACPI_STATUS AcpiNsOneCompleteParse ( UINT32 PassNumber, UINT32 TableIndex, ACPI_NAMESPACE_NODE *StartNode); /* * nsaccess - Top-level namespace access */ ACPI_STATUS AcpiNsRootInitialize ( void); ACPI_STATUS AcpiNsLookup ( ACPI_GENERIC_STATE *ScopeInfo, char *Name, ACPI_OBJECT_TYPE Type, ACPI_INTERPRETER_MODE InterpreterMode, UINT32 Flags, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE **RetNode); /* * nsalloc - Named object allocation/deallocation */ ACPI_NAMESPACE_NODE * AcpiNsCreateNode ( UINT32 Name); void AcpiNsDeleteNode ( ACPI_NAMESPACE_NODE *Node); void AcpiNsRemoveNode ( ACPI_NAMESPACE_NODE *Node); void AcpiNsDeleteNamespaceSubtree ( ACPI_NAMESPACE_NODE *ParentHandle); void AcpiNsDeleteNamespaceByOwner ( ACPI_OWNER_ID OwnerId); void AcpiNsDetachObject ( ACPI_NAMESPACE_NODE *Node); void AcpiNsDeleteChildren ( ACPI_NAMESPACE_NODE *Parent); int AcpiNsCompareNames ( char *Name1, char *Name2); /* * nsconvert - Dynamic object conversion routines */ ACPI_STATUS AcpiNsConvertToInteger ( ACPI_OPERAND_OBJECT *OriginalObject, ACPI_OPERAND_OBJECT **ReturnObject); ACPI_STATUS AcpiNsConvertToString ( ACPI_OPERAND_OBJECT *OriginalObject, ACPI_OPERAND_OBJECT **ReturnObject); ACPI_STATUS AcpiNsConvertToBuffer ( ACPI_OPERAND_OBJECT *OriginalObject, ACPI_OPERAND_OBJECT **ReturnObject); ACPI_STATUS AcpiNsConvertToUnicode ( ACPI_NAMESPACE_NODE *Scope, ACPI_OPERAND_OBJECT *OriginalObject, ACPI_OPERAND_OBJECT **ReturnObject); ACPI_STATUS AcpiNsConvertToResource ( ACPI_NAMESPACE_NODE *Scope, ACPI_OPERAND_OBJECT *OriginalObject, ACPI_OPERAND_OBJECT **ReturnObject); ACPI_STATUS AcpiNsConvertToReference ( ACPI_NAMESPACE_NODE *Scope, ACPI_OPERAND_OBJECT *OriginalObject, ACPI_OPERAND_OBJECT **ReturnObject); /* * nsdump - Namespace dump/print utilities */ void AcpiNsDumpTables ( ACPI_HANDLE SearchBase, UINT32 MaxDepth); void AcpiNsDumpEntry ( ACPI_HANDLE Handle, UINT32 DebugLevel); void AcpiNsDumpPathname ( ACPI_HANDLE Handle, const char *Msg, UINT32 Level, UINT32 Component); void AcpiNsPrintPathname ( UINT32 NumSegments, const char *Pathname); ACPI_STATUS AcpiNsDumpOneObject ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); void AcpiNsDumpObjects ( ACPI_OBJECT_TYPE Type, UINT8 DisplayType, UINT32 MaxDepth, ACPI_OWNER_ID OwnerId, ACPI_HANDLE StartHandle); void AcpiNsDumpObjectPaths ( ACPI_OBJECT_TYPE Type, UINT8 DisplayType, UINT32 MaxDepth, ACPI_OWNER_ID OwnerId, ACPI_HANDLE StartHandle); /* * nseval - Namespace evaluation functions */ ACPI_STATUS AcpiNsEvaluate ( ACPI_EVALUATE_INFO *Info); /* * nsarguments - Argument count/type checking for predefined/reserved names */ void AcpiNsCheckArgumentCount ( char *Pathname, ACPI_NAMESPACE_NODE *Node, UINT32 UserParamCount, const ACPI_PREDEFINED_INFO *Info); void AcpiNsCheckAcpiCompliance ( char *Pathname, ACPI_NAMESPACE_NODE *Node, const ACPI_PREDEFINED_INFO *Predefined); void AcpiNsCheckArgumentTypes ( ACPI_EVALUATE_INFO *Info); /* * nspredef - Return value checking for predefined/reserved names */ ACPI_STATUS AcpiNsCheckReturnValue ( ACPI_NAMESPACE_NODE *Node, ACPI_EVALUATE_INFO *Info, UINT32 UserParamCount, ACPI_STATUS ReturnStatus, ACPI_OPERAND_OBJECT **ReturnObject); ACPI_STATUS AcpiNsCheckObjectType ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr, UINT32 ExpectedBtypes, UINT32 PackageIndex); /* * nsprepkg - Validation of predefined name packages */ ACPI_STATUS AcpiNsCheckPackage ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT **ReturnObjectPtr); /* * nsnames - Name and Scope manipulation */ UINT32 AcpiNsOpensScope ( ACPI_OBJECT_TYPE Type); char * AcpiNsGetExternalPathname ( ACPI_NAMESPACE_NODE *Node); UINT32 AcpiNsBuildNormalizedPath ( ACPI_NAMESPACE_NODE *Node, char *FullPath, UINT32 PathSize, BOOLEAN NoTrailing); void AcpiNsNormalizePathname ( char *OriginalPath); char * AcpiNsGetNormalizedPathname ( ACPI_NAMESPACE_NODE *Node, BOOLEAN NoTrailing); char * AcpiNsBuildPrefixedPathname ( ACPI_GENERIC_STATE *PrefixScope, const char *InternalPath); char * AcpiNsNameOfCurrentScope ( ACPI_WALK_STATE *WalkState); ACPI_STATUS AcpiNsHandleToName ( ACPI_HANDLE TargetHandle, ACPI_BUFFER *Buffer); ACPI_STATUS AcpiNsHandleToPathname ( ACPI_HANDLE TargetHandle, ACPI_BUFFER *Buffer, BOOLEAN NoTrailing); BOOLEAN AcpiNsPatternMatch ( ACPI_NAMESPACE_NODE *ObjNode, char *SearchFor); ACPI_STATUS AcpiNsGetNodeUnlocked ( ACPI_NAMESPACE_NODE *PrefixNode, const char *ExternalPathname, UINT32 Flags, ACPI_NAMESPACE_NODE **OutNode); ACPI_STATUS AcpiNsGetNode ( ACPI_NAMESPACE_NODE *PrefixNode, const char *ExternalPathname, UINT32 Flags, ACPI_NAMESPACE_NODE **OutNode); ACPI_SIZE AcpiNsGetPathnameLength ( ACPI_NAMESPACE_NODE *Node); /* * nsobject - Object management for namespace nodes */ ACPI_STATUS AcpiNsAttachObject ( ACPI_NAMESPACE_NODE *Node, ACPI_OPERAND_OBJECT *Object, ACPI_OBJECT_TYPE Type); ACPI_OPERAND_OBJECT * AcpiNsGetAttachedObject ( ACPI_NAMESPACE_NODE *Node); ACPI_OPERAND_OBJECT * AcpiNsGetSecondaryObject ( ACPI_OPERAND_OBJECT *ObjDesc); ACPI_STATUS AcpiNsAttachData ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_HANDLER Handler, void *Data); ACPI_STATUS AcpiNsDetachData ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_HANDLER Handler); ACPI_STATUS AcpiNsGetAttachedData ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_HANDLER Handler, void **Data); /* * nsrepair - General return object repair for all * predefined methods/objects */ ACPI_STATUS AcpiNsSimpleRepair ( ACPI_EVALUATE_INFO *Info, UINT32 ExpectedBtypes, UINT32 PackageIndex, ACPI_OPERAND_OBJECT **ReturnObjectPtr); ACPI_STATUS AcpiNsWrapWithPackage ( ACPI_EVALUATE_INFO *Info, ACPI_OPERAND_OBJECT *OriginalObject, ACPI_OPERAND_OBJECT **ObjDescPtr); ACPI_STATUS AcpiNsRepairNullElement ( ACPI_EVALUATE_INFO *Info, UINT32 ExpectedBtypes, UINT32 PackageIndex, ACPI_OPERAND_OBJECT **ReturnObjectPtr); void AcpiNsRemoveNullElements ( ACPI_EVALUATE_INFO *Info, UINT8 PackageType, ACPI_OPERAND_OBJECT *ObjDesc); /* * nsrepair2 - Return object repair for specific * predefined methods/objects */ ACPI_STATUS AcpiNsComplexRepairs ( ACPI_EVALUATE_INFO *Info, ACPI_NAMESPACE_NODE *Node, ACPI_STATUS ValidateStatus, ACPI_OPERAND_OBJECT **ReturnObjectPtr); /* * nssearch - Namespace searching and entry */ ACPI_STATUS AcpiNsSearchAndEnter ( UINT32 EntryName, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE *Node, ACPI_INTERPRETER_MODE InterpreterMode, ACPI_OBJECT_TYPE Type, UINT32 Flags, ACPI_NAMESPACE_NODE **RetNode); ACPI_STATUS AcpiNsSearchOneScope ( UINT32 EntryName, ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_TYPE Type, ACPI_NAMESPACE_NODE **RetNode); void AcpiNsInstallNode ( ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE *ParentNode, ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_TYPE Type); /* * nsutils - Utility functions */ ACPI_OBJECT_TYPE AcpiNsGetType ( ACPI_NAMESPACE_NODE *Node); UINT32 AcpiNsLocal ( ACPI_OBJECT_TYPE Type); void AcpiNsPrintNodePathname ( ACPI_NAMESPACE_NODE *Node, const char *Msg); ACPI_STATUS AcpiNsBuildInternalName ( ACPI_NAMESTRING_INFO *Info); void AcpiNsGetInternalNameLength ( ACPI_NAMESTRING_INFO *Info); ACPI_STATUS AcpiNsInternalizeName ( const char *DottedName, char **ConvertedName); ACPI_STATUS AcpiNsExternalizeName ( UINT32 InternalNameLength, const char *InternalName, UINT32 *ConvertedNameLength, char **ConvertedName); ACPI_NAMESPACE_NODE * AcpiNsValidateHandle ( ACPI_HANDLE Handle); void AcpiNsTerminate ( void); #endif /* __ACNAMESP_H__ */ src/acpica/source/include/acobject.h000066400000000000000000000672461465205512700177610ustar00rootroot00000000000000/****************************************************************************** * * Name: acobject.h - Definition of ACPI_OPERAND_OBJECT (Internal object only) * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef _ACOBJECT_H #define _ACOBJECT_H /* acpisrc:StructDefs -- for acpisrc conversion */ /* * The ACPI_OPERAND_OBJECT is used to pass AML operands from the dispatcher * to the interpreter, and to keep track of the various handlers such as * address space handlers and notify handlers. The object is a constant * size in order to allow it to be cached and reused. * * Note: The object is optimized to be aligned and will not work if it is * byte-packed. */ #if ACPI_MACHINE_WIDTH == 64 #pragma pack(8) #else #pragma pack(4) #endif /******************************************************************************* * * Common Descriptors * ******************************************************************************/ /* * Common area for all objects. * * DescriptorType is used to differentiate between internal descriptors, and * must be in the same place across all descriptors * * Note: The DescriptorType and Type fields must appear in the identical * position in both the ACPI_NAMESPACE_NODE and ACPI_OPERAND_OBJECT * structures. */ #define ACPI_OBJECT_COMMON_HEADER \ union acpi_operand_object *NextObject; /* Objects linked to parent NS node */\ UINT8 DescriptorType; /* To differentiate various internal objs */\ UINT8 Type; /* ACPI_OBJECT_TYPE */\ UINT16 ReferenceCount; /* For object deletion management */\ UINT8 Flags /* * Note: There are 3 bytes available here before the * next natural alignment boundary (for both 32/64 cases) */ /* Values for Flag byte above */ #define AOPOBJ_AML_CONSTANT 0x01 /* Integer is an AML constant */ #define AOPOBJ_STATIC_POINTER 0x02 /* Data is part of an ACPI table, don't delete */ #define AOPOBJ_DATA_VALID 0x04 /* Object is initialized and data is valid */ #define AOPOBJ_OBJECT_INITIALIZED 0x08 /* Region is initialized */ #define AOPOBJ_REG_CONNECTED 0x10 /* _REG was run */ #define AOPOBJ_SETUP_COMPLETE 0x20 /* Region setup is complete */ #define AOPOBJ_INVALID 0x40 /* Host OS won't allow a Region address */ /****************************************************************************** * * Basic data types * *****************************************************************************/ typedef struct acpi_object_common { ACPI_OBJECT_COMMON_HEADER; } ACPI_OBJECT_COMMON; typedef struct acpi_object_integer { ACPI_OBJECT_COMMON_HEADER; UINT8 Fill[3]; /* Prevent warning on some compilers */ UINT64 Value; } ACPI_OBJECT_INTEGER; /* * Note: The String and Buffer object must be identical through the * pointer and length elements. There is code that depends on this. * * Fields common to both Strings and Buffers */ #define ACPI_COMMON_BUFFER_INFO(_Type) \ _Type *Pointer; \ UINT32 Length /* Null terminated, ASCII characters only */ typedef struct acpi_object_string { ACPI_OBJECT_COMMON_HEADER; ACPI_COMMON_BUFFER_INFO(char); /* String in AML stream or allocated string */ } ACPI_OBJECT_STRING; typedef struct acpi_object_buffer { ACPI_OBJECT_COMMON_HEADER; ACPI_COMMON_BUFFER_INFO(UINT8); /* Buffer in AML stream or allocated buffer */ UINT32 AmlLength; UINT8 *AmlStart; ACPI_NAMESPACE_NODE *Node; /* Link back to parent node */ } ACPI_OBJECT_BUFFER; typedef struct acpi_object_package { ACPI_OBJECT_COMMON_HEADER; ACPI_NAMESPACE_NODE *Node; /* Link back to parent node */ union acpi_operand_object **Elements; /* Array of pointers to AcpiObjects */ UINT8 *AmlStart; UINT32 AmlLength; UINT32 Count; /* # of elements in package */ } ACPI_OBJECT_PACKAGE; /****************************************************************************** * * Complex data types * *****************************************************************************/ typedef struct acpi_object_event { ACPI_OBJECT_COMMON_HEADER; ACPI_SEMAPHORE OsSemaphore; /* Actual OS synchronization object */ } ACPI_OBJECT_EVENT; typedef struct acpi_object_mutex { ACPI_OBJECT_COMMON_HEADER; UINT8 SyncLevel; /* 0-15, specified in Mutex() call */ UINT16 AcquisitionDepth; /* Allow multiple Acquires, same thread */ ACPI_MUTEX OsMutex; /* Actual OS synchronization object */ ACPI_THREAD_ID ThreadId; /* Current owner of the mutex */ struct acpi_thread_state *OwnerThread; /* Current owner of the mutex */ union acpi_operand_object *Prev; /* Link for list of acquired mutexes */ union acpi_operand_object *Next; /* Link for list of acquired mutexes */ ACPI_NAMESPACE_NODE *Node; /* Containing namespace node */ UINT8 OriginalSyncLevel; /* Owner's original sync level (0-15) */ } ACPI_OBJECT_MUTEX; typedef struct acpi_object_region { ACPI_OBJECT_COMMON_HEADER; UINT8 SpaceId; ACPI_NAMESPACE_NODE *Node; /* Containing namespace node */ union acpi_operand_object *Handler; /* Handler for region access */ union acpi_operand_object *Next; ACPI_PHYSICAL_ADDRESS Address; UINT32 Length; void *Pointer; /* Only for data table regions */ } ACPI_OBJECT_REGION; typedef struct acpi_object_method { ACPI_OBJECT_COMMON_HEADER; UINT8 InfoFlags; UINT8 ParamCount; UINT8 SyncLevel; union acpi_operand_object *Mutex; union acpi_operand_object *Node; UINT8 *AmlStart; union { ACPI_INTERNAL_METHOD Implementation; union acpi_operand_object *Handler; } Dispatch; UINT32 AmlLength; ACPI_OWNER_ID OwnerId; UINT8 ThreadCount; } ACPI_OBJECT_METHOD; /* Flags for InfoFlags field above */ #define ACPI_METHOD_MODULE_LEVEL 0x01 /* Method is actually module-level code */ #define ACPI_METHOD_INTERNAL_ONLY 0x02 /* Method is implemented internally (_OSI) */ #define ACPI_METHOD_SERIALIZED 0x04 /* Method is serialized */ #define ACPI_METHOD_SERIALIZED_PENDING 0x08 /* Method is to be marked serialized */ #define ACPI_METHOD_IGNORE_SYNC_LEVEL 0x10 /* Method was auto-serialized at table load time */ #define ACPI_METHOD_MODIFIED_NAMESPACE 0x20 /* Method modified the namespace */ /****************************************************************************** * * Objects that can be notified. All share a common NotifyInfo area. * *****************************************************************************/ /* * Common fields for objects that support ASL notifications */ #define ACPI_COMMON_NOTIFY_INFO \ union acpi_operand_object *NotifyList[2]; /* Handlers for system/device notifies */\ union acpi_operand_object *Handler /* Handler for Address space */ /* COMMON NOTIFY for POWER, PROCESSOR, DEVICE, and THERMAL */ typedef struct acpi_object_notify_common { ACPI_OBJECT_COMMON_HEADER; ACPI_COMMON_NOTIFY_INFO; } ACPI_OBJECT_NOTIFY_COMMON; typedef struct acpi_object_device { ACPI_OBJECT_COMMON_HEADER; ACPI_COMMON_NOTIFY_INFO; ACPI_GPE_BLOCK_INFO *GpeBlock; } ACPI_OBJECT_DEVICE; typedef struct acpi_object_power_resource { ACPI_OBJECT_COMMON_HEADER; ACPI_COMMON_NOTIFY_INFO; UINT32 SystemLevel; UINT32 ResourceOrder; } ACPI_OBJECT_POWER_RESOURCE; typedef struct acpi_object_processor { ACPI_OBJECT_COMMON_HEADER; /* The next two fields take advantage of the 3-byte space before NOTIFY_INFO */ UINT8 ProcId; UINT8 Length; ACPI_COMMON_NOTIFY_INFO; ACPI_IO_ADDRESS Address; } ACPI_OBJECT_PROCESSOR; typedef struct acpi_object_thermal_zone { ACPI_OBJECT_COMMON_HEADER; ACPI_COMMON_NOTIFY_INFO; } ACPI_OBJECT_THERMAL_ZONE; /****************************************************************************** * * Fields. All share a common header/info field. * *****************************************************************************/ /* * Common bitfield for the field objects * "Field Datum" -- a datum from the actual field object * "Buffer Datum" -- a datum from a user buffer, read from or to be written to the field */ #define ACPI_COMMON_FIELD_INFO \ UINT8 FieldFlags; /* Access, update, and lock bits */\ UINT8 Attribute; /* From AccessAs keyword */\ UINT8 AccessByteWidth; /* Read/Write size in bytes */\ ACPI_NAMESPACE_NODE *Node; /* Link back to parent node */\ UINT32 BitLength; /* Length of field in bits */\ UINT32 BaseByteOffset; /* Byte offset within containing object */\ UINT32 Value; /* Value to store into the Bank or Index register */\ UINT8 StartFieldBitOffset;/* Bit offset within first field datum (0-63) */\ UINT8 AccessLength /* For serial regions/fields */ /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */ typedef struct acpi_object_field_common { ACPI_OBJECT_COMMON_HEADER; ACPI_COMMON_FIELD_INFO; union acpi_operand_object *RegionObj; /* Parent Operation Region object (REGION/BANK fields only) */ } ACPI_OBJECT_FIELD_COMMON; typedef struct acpi_object_region_field { ACPI_OBJECT_COMMON_HEADER; ACPI_COMMON_FIELD_INFO; UINT16 ResourceLength; union acpi_operand_object *RegionObj; /* Containing OpRegion object */ UINT8 *ResourceBuffer; /* ResourceTemplate for serial regions/fields */ UINT16 PinNumberIndex; /* Index relative to previous Connection/Template */ UINT8 *InternalPccBuffer; /* Internal buffer for fields associated with PCC */ } ACPI_OBJECT_REGION_FIELD; typedef struct acpi_object_bank_field { ACPI_OBJECT_COMMON_HEADER; ACPI_COMMON_FIELD_INFO; union acpi_operand_object *RegionObj; /* Containing OpRegion object */ union acpi_operand_object *BankObj; /* BankSelect Register object */ } ACPI_OBJECT_BANK_FIELD; typedef struct acpi_object_index_field { ACPI_OBJECT_COMMON_HEADER; ACPI_COMMON_FIELD_INFO; /* * No "RegionObj" pointer needed since the Index and Data registers * are each field definitions unto themselves. */ union acpi_operand_object *IndexObj; /* Index register */ union acpi_operand_object *DataObj; /* Data register */ } ACPI_OBJECT_INDEX_FIELD; /* The BufferField is different in that it is part of a Buffer, not an OpRegion */ typedef struct acpi_object_buffer_field { ACPI_OBJECT_COMMON_HEADER; ACPI_COMMON_FIELD_INFO; BOOLEAN IsCreateField; /* Special case for objects created by CreateField() */ union acpi_operand_object *BufferObj; /* Containing Buffer object */ } ACPI_OBJECT_BUFFER_FIELD; /****************************************************************************** * * Objects for handlers * *****************************************************************************/ typedef struct acpi_object_notify_handler { ACPI_OBJECT_COMMON_HEADER; ACPI_NAMESPACE_NODE *Node; /* Parent device */ UINT32 HandlerType; /* Type: Device/System/Both */ ACPI_NOTIFY_HANDLER Handler; /* Handler address */ void *Context; union acpi_operand_object *Next[2]; /* Device and System handler lists */ } ACPI_OBJECT_NOTIFY_HANDLER; typedef struct acpi_object_addr_handler { ACPI_OBJECT_COMMON_HEADER; UINT8 SpaceId; UINT8 HandlerFlags; ACPI_ADR_SPACE_HANDLER Handler; ACPI_NAMESPACE_NODE *Node; /* Parent device */ void *Context; ACPI_MUTEX ContextMutex; ACPI_ADR_SPACE_SETUP Setup; union acpi_operand_object *RegionList; /* Regions using this handler */ union acpi_operand_object *Next; } ACPI_OBJECT_ADDR_HANDLER; /* Flags for address handler (HandlerFlags) */ #define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED 0x01 /****************************************************************************** * * Special internal objects * *****************************************************************************/ /* * The Reference object is used for these opcodes: * Arg[0-6], Local[0-7], IndexOp, NameOp, RefOfOp, LoadOp, LoadTableOp, DebugOp * The Reference.Class differentiates these types. */ typedef struct acpi_object_reference { ACPI_OBJECT_COMMON_HEADER; UINT8 Class; /* Reference Class */ UINT8 TargetType; /* Used for Index Op */ UINT8 Resolved; /* Reference has been resolved to a value */ void *Object; /* NameOp=>HANDLE to obj, IndexOp=>ACPI_OPERAND_OBJECT */ ACPI_NAMESPACE_NODE *Node; /* RefOf or Namepath */ union acpi_operand_object **Where; /* Target of Index */ UINT8 *IndexPointer; /* Used for Buffers and Strings */ UINT8 *Aml; /* Used for deferred resolution of the ref */ UINT32 Value; /* Used for Local/Arg/Index/DdbHandle */ } ACPI_OBJECT_REFERENCE; /* Values for Reference.Class above */ typedef enum { ACPI_REFCLASS_LOCAL = 0, /* Method local */ ACPI_REFCLASS_ARG = 1, /* Method argument */ ACPI_REFCLASS_REFOF = 2, /* Result of RefOf() TBD: Split to Ref/Node and Ref/OperandObj? */ ACPI_REFCLASS_INDEX = 3, /* Result of Index() */ ACPI_REFCLASS_TABLE = 4, /* DdbHandle - Load(), LoadTable() */ ACPI_REFCLASS_NAME = 5, /* Reference to a named object */ ACPI_REFCLASS_DEBUG = 6, /* Debug object */ ACPI_REFCLASS_MAX = 6 } ACPI_REFERENCE_CLASSES; /* * Extra object is used as additional storage for types that * have AML code in their declarations (TermArgs) that must be * evaluated at run time. * * Currently: Region and FieldUnit types */ typedef struct acpi_object_extra { ACPI_OBJECT_COMMON_HEADER; ACPI_NAMESPACE_NODE *Method_REG; /* _REG method for this region (if any) */ ACPI_NAMESPACE_NODE *ScopeNode; void *RegionContext; /* Region-specific data */ UINT8 *AmlStart; UINT32 AmlLength; } ACPI_OBJECT_EXTRA; /* Additional data that can be attached to namespace nodes */ typedef struct acpi_object_data { ACPI_OBJECT_COMMON_HEADER; ACPI_OBJECT_HANDLER Handler; void *Pointer; } ACPI_OBJECT_DATA; /* Structure used when objects are cached for reuse */ typedef struct acpi_object_cache_list { ACPI_OBJECT_COMMON_HEADER; union acpi_operand_object *Next; /* Link for object cache and internal lists*/ } ACPI_OBJECT_CACHE_LIST; /****************************************************************************** * * ACPI_OPERAND_OBJECT Descriptor - a giant union of all of the above * *****************************************************************************/ typedef union acpi_operand_object { ACPI_OBJECT_COMMON Common; ACPI_OBJECT_INTEGER Integer; ACPI_OBJECT_STRING String; ACPI_OBJECT_BUFFER Buffer; ACPI_OBJECT_PACKAGE Package; ACPI_OBJECT_EVENT Event; ACPI_OBJECT_METHOD Method; ACPI_OBJECT_MUTEX Mutex; ACPI_OBJECT_REGION Region; ACPI_OBJECT_NOTIFY_COMMON CommonNotify; ACPI_OBJECT_DEVICE Device; ACPI_OBJECT_POWER_RESOURCE PowerResource; ACPI_OBJECT_PROCESSOR Processor; ACPI_OBJECT_THERMAL_ZONE ThermalZone; ACPI_OBJECT_FIELD_COMMON CommonField; ACPI_OBJECT_REGION_FIELD Field; ACPI_OBJECT_BUFFER_FIELD BufferField; ACPI_OBJECT_BANK_FIELD BankField; ACPI_OBJECT_INDEX_FIELD IndexField; ACPI_OBJECT_NOTIFY_HANDLER Notify; ACPI_OBJECT_ADDR_HANDLER AddressSpace; ACPI_OBJECT_REFERENCE Reference; ACPI_OBJECT_EXTRA Extra; ACPI_OBJECT_DATA Data; ACPI_OBJECT_CACHE_LIST Cache; /* * Add namespace node to union in order to simplify code that accepts both * ACPI_OPERAND_OBJECTs and ACPI_NAMESPACE_NODEs. The structures share * a common DescriptorType field in order to differentiate them. */ ACPI_NAMESPACE_NODE Node; } ACPI_OPERAND_OBJECT; /****************************************************************************** * * ACPI_DESCRIPTOR - objects that share a common descriptor identifier * *****************************************************************************/ /* Object descriptor types */ #define ACPI_DESC_TYPE_CACHED 0x01 /* Used only when object is cached */ #define ACPI_DESC_TYPE_STATE 0x02 #define ACPI_DESC_TYPE_STATE_UPDATE 0x03 #define ACPI_DESC_TYPE_STATE_PACKAGE 0x04 #define ACPI_DESC_TYPE_STATE_CONTROL 0x05 #define ACPI_DESC_TYPE_STATE_RPSCOPE 0x06 #define ACPI_DESC_TYPE_STATE_PSCOPE 0x07 #define ACPI_DESC_TYPE_STATE_WSCOPE 0x08 #define ACPI_DESC_TYPE_STATE_RESULT 0x09 #define ACPI_DESC_TYPE_STATE_NOTIFY 0x0A #define ACPI_DESC_TYPE_STATE_THREAD 0x0B #define ACPI_DESC_TYPE_WALK 0x0C #define ACPI_DESC_TYPE_PARSER 0x0D #define ACPI_DESC_TYPE_OPERAND 0x0E #define ACPI_DESC_TYPE_NAMED 0x0F #define ACPI_DESC_TYPE_MAX 0x0F typedef struct acpi_common_descriptor { void *CommonPointer; UINT8 DescriptorType; /* To differentiate various internal objs */ } ACPI_COMMON_DESCRIPTOR; typedef union acpi_descriptor { ACPI_COMMON_DESCRIPTOR Common; ACPI_OPERAND_OBJECT Object; ACPI_NAMESPACE_NODE Node; ACPI_PARSE_OBJECT Op; } ACPI_DESCRIPTOR; #pragma pack() #endif /* _ACOBJECT_H */ src/acpica/source/include/acopcode.h000066400000000000000000000710441465205512700177530ustar00rootroot00000000000000/****************************************************************************** * * Name: acopcode.h - AML opcode information for the AML parser and interpreter * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACOPCODE_H__ #define __ACOPCODE_H__ #define MAX_EXTENDED_OPCODE 0x88 #define NUM_EXTENDED_OPCODE (MAX_EXTENDED_OPCODE + 1) #define MAX_INTERNAL_OPCODE #define NUM_INTERNAL_OPCODE (MAX_INTERNAL_OPCODE + 1) /* Used for non-assigned opcodes */ #define _UNK 0x6B /* * Reserved ASCII characters. Do not use any of these for * internal opcodes, since they are used to differentiate * name strings from AML opcodes */ #define _ASC 0x6C #define _NAM 0x6C #define _PFX 0x6D /* * All AML opcodes and the parse-time arguments for each. Used by the AML * parser Each list is compressed into a 32-bit number and stored in the * master opcode table (in psopcode.c). */ #define ARGP_ACCESSFIELD_OP ARGP_LIST1 (ARGP_NAMESTRING) #define ARGP_ACQUIRE_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_WORDDATA) #define ARGP_ADD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_ALIAS_OP ARGP_LIST2 (ARGP_NAMESTRING, ARGP_NAME) #define ARGP_ARG0 ARG_NONE #define ARGP_ARG1 ARG_NONE #define ARGP_ARG2 ARG_NONE #define ARGP_ARG3 ARG_NONE #define ARGP_ARG4 ARG_NONE #define ARGP_ARG5 ARG_NONE #define ARGP_ARG6 ARG_NONE #define ARGP_BANK_FIELD_OP ARGP_LIST6 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_NAMESTRING,ARGP_TERMARG, ARGP_BYTEDATA, ARGP_FIELDLIST) #define ARGP_BIT_AND_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_BIT_NAND_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_BIT_NOR_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_BIT_NOT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) #define ARGP_BIT_OR_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_BIT_XOR_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_BREAK_OP ARG_NONE #define ARGP_BREAK_POINT_OP ARG_NONE #define ARGP_BUFFER_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_BYTELIST) #define ARGP_BYTE_OP ARGP_LIST1 (ARGP_BYTEDATA) #define ARGP_BYTELIST_OP ARGP_LIST1 (ARGP_NAMESTRING) #define ARGP_COMMENT_OP ARGP_LIST2 (ARGP_BYTEDATA, ARGP_COMMENT) #define ARGP_CONCAT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_CONCAT_RES_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_COND_REF_OF_OP ARGP_LIST2 (ARGP_SIMPLENAME, ARGP_TARGET) #define ARGP_CONNECTFIELD_OP ARGP_LIST1 (ARGP_NAMESTRING) #define ARGP_CONTINUE_OP ARG_NONE #define ARGP_COPY_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_SIMPLENAME) #define ARGP_CREATE_BIT_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) #define ARGP_CREATE_BYTE_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) #define ARGP_CREATE_DWORD_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) #define ARGP_CREATE_FIELD_OP ARGP_LIST4 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) #define ARGP_CREATE_QWORD_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) #define ARGP_CREATE_WORD_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) #define ARGP_DATA_REGION_OP ARGP_LIST4 (ARGP_NAME, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG) #define ARGP_DEBUG_OP ARG_NONE #define ARGP_DECREMENT_OP ARGP_LIST1 (ARGP_SUPERNAME) #define ARGP_DEREF_OF_OP ARGP_LIST1 (ARGP_SUPERNAME) #define ARGP_DEVICE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_OBJLIST) #define ARGP_DIVIDE_OP ARGP_LIST4 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET, ARGP_TARGET) #define ARGP_DWORD_OP ARGP_LIST1 (ARGP_DWORDDATA) #define ARGP_ELSE_OP ARGP_LIST2 (ARGP_PKGLENGTH, ARGP_TERMLIST) #define ARGP_EVENT_OP ARGP_LIST1 (ARGP_NAME) #define ARGP_EXTERNAL_OP ARGP_LIST3 (ARGP_NAME, ARGP_BYTEDATA, ARGP_BYTEDATA) #define ARGP_FATAL_OP ARGP_LIST3 (ARGP_BYTEDATA, ARGP_DWORDDATA, ARGP_TERMARG) #define ARGP_FIELD_OP ARGP_LIST4 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_BYTEDATA, ARGP_FIELDLIST) #define ARGP_FIND_SET_LEFT_BIT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) #define ARGP_FIND_SET_RIGHT_BIT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) #define ARGP_FROM_BCD_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) #define ARGP_IF_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_TERMLIST) #define ARGP_INCREMENT_OP ARGP_LIST1 (ARGP_SUPERNAME) #define ARGP_INDEX_FIELD_OP ARGP_LIST5 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_NAMESTRING,ARGP_BYTEDATA, ARGP_FIELDLIST) #define ARGP_INDEX_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_LAND_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) #define ARGP_LEQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) #define ARGP_LGREATER_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) #define ARGP_LGREATEREQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) #define ARGP_LLESS_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) #define ARGP_LLESSEQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) #define ARGP_LNOT_OP ARGP_LIST1 (ARGP_TERMARG) #define ARGP_LNOTEQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) #define ARGP_LOAD_OP ARGP_LIST2 (ARGP_NAMESTRING, ARGP_SUPERNAME) #define ARGP_LOAD_TABLE_OP ARGP_LIST6 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG) #define ARGP_LOCAL0 ARG_NONE #define ARGP_LOCAL1 ARG_NONE #define ARGP_LOCAL2 ARG_NONE #define ARGP_LOCAL3 ARG_NONE #define ARGP_LOCAL4 ARG_NONE #define ARGP_LOCAL5 ARG_NONE #define ARGP_LOCAL6 ARG_NONE #define ARGP_LOCAL7 ARG_NONE #define ARGP_LOR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) #define ARGP_MATCH_OP ARGP_LIST6 (ARGP_TERMARG, ARGP_BYTEDATA, ARGP_TERMARG, ARGP_BYTEDATA, ARGP_TERMARG, ARGP_TERMARG) #define ARGP_METHOD_OP ARGP_LIST4 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_BYTEDATA, ARGP_TERMLIST) #define ARGP_METHODCALL_OP ARGP_LIST1 (ARGP_NAMESTRING) #define ARGP_MID_OP ARGP_LIST4 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_MOD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_MULTIPLY_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_MUTEX_OP ARGP_LIST2 (ARGP_NAME, ARGP_BYTEDATA) #define ARGP_NAME_OP ARGP_LIST2 (ARGP_NAME, ARGP_DATAOBJ) #define ARGP_NAMEDFIELD_OP ARGP_LIST1 (ARGP_NAMESTRING) #define ARGP_NAMEPATH_OP ARGP_LIST1 (ARGP_NAMESTRING) #define ARGP_NOOP_OP ARG_NONE #define ARGP_NOTIFY_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_TERMARG) #define ARGP_OBJECT_TYPE_OP ARGP_LIST1 (ARGP_SIMPLENAME) #define ARGP_ONE_OP ARG_NONE #define ARGP_ONES_OP ARG_NONE #define ARGP_PACKAGE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_BYTEDATA, ARGP_DATAOBJLIST) #define ARGP_POWER_RES_OP ARGP_LIST5 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_BYTEDATA, ARGP_WORDDATA, ARGP_OBJLIST) #define ARGP_PROCESSOR_OP ARGP_LIST6 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_BYTEDATA, ARGP_DWORDDATA, ARGP_BYTEDATA, ARGP_OBJLIST) #define ARGP_QWORD_OP ARGP_LIST1 (ARGP_QWORDDATA) #define ARGP_REF_OF_OP ARGP_LIST1 (ARGP_SIMPLENAME) #define ARGP_REGION_OP ARGP_LIST4 (ARGP_NAME, ARGP_BYTEDATA, ARGP_TERMARG, ARGP_TERMARG) #define ARGP_RELEASE_OP ARGP_LIST1 (ARGP_SUPERNAME) #define ARGP_RESERVEDFIELD_OP ARGP_LIST1 (ARGP_NAMESTRING) #define ARGP_RESET_OP ARGP_LIST1 (ARGP_SUPERNAME) #define ARGP_RETURN_OP ARGP_LIST1 (ARGP_TERMARG) #define ARGP_REVISION_OP ARG_NONE #define ARGP_SCOPE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_TERMLIST) #define ARGP_SERIALFIELD_OP ARGP_LIST1 (ARGP_NAMESTRING) #define ARGP_SHIFT_LEFT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_SHIFT_RIGHT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_SIGNAL_OP ARGP_LIST1 (ARGP_SUPERNAME) #define ARGP_SIZE_OF_OP ARGP_LIST1 (ARGP_SUPERNAME) #define ARGP_SLEEP_OP ARGP_LIST1 (ARGP_TERMARG) #define ARGP_STALL_OP ARGP_LIST1 (ARGP_TERMARG) #define ARGP_STATICSTRING_OP ARGP_LIST1 (ARGP_NAMESTRING) #define ARGP_STORE_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_SUPERNAME) #define ARGP_STRING_OP ARGP_LIST1 (ARGP_CHARLIST) #define ARGP_SUBTRACT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_THERMAL_ZONE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_OBJLIST) #define ARGP_TIMER_OP ARG_NONE #define ARGP_TO_BCD_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) #define ARGP_TO_BUFFER_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) #define ARGP_TO_DEC_STR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) #define ARGP_TO_HEX_STR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) #define ARGP_TO_INTEGER_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) #define ARGP_TO_STRING_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_UNLOAD_OP ARGP_LIST1 (ARGP_SUPERNAME) #define ARGP_VAR_PACKAGE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_DATAOBJLIST) #define ARGP_WAIT_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_TERMARG) #define ARGP_WHILE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_TERMLIST) #define ARGP_WORD_OP ARGP_LIST1 (ARGP_WORDDATA) #define ARGP_ZERO_OP ARG_NONE /* * All AML opcodes and the runtime arguments for each. Used by the AML * interpreter Each list is compressed into a 32-bit number and stored * in the master opcode table (in psopcode.c). * * (Used by PrepOperands procedure and the ASL Compiler) */ #define ARGI_ACCESSFIELD_OP ARGI_INVALID_OPCODE #define ARGI_ACQUIRE_OP ARGI_LIST2 (ARGI_MUTEX, ARGI_INTEGER) #define ARGI_ADD_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_ALIAS_OP ARGI_INVALID_OPCODE #define ARGI_ARG0 ARG_NONE #define ARGI_ARG1 ARG_NONE #define ARGI_ARG2 ARG_NONE #define ARGI_ARG3 ARG_NONE #define ARGI_ARG4 ARG_NONE #define ARGI_ARG5 ARG_NONE #define ARGI_ARG6 ARG_NONE #define ARGI_BANK_FIELD_OP ARGI_LIST1 (ARGI_INTEGER) #define ARGI_BIT_AND_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_BIT_NAND_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_BIT_NOR_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_BIT_NOT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_BIT_OR_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_BIT_XOR_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_BREAK_OP ARG_NONE #define ARGI_BREAK_POINT_OP ARG_NONE #define ARGI_BUFFER_OP ARGI_LIST1 (ARGI_INTEGER) #define ARGI_BYTE_OP ARGI_INVALID_OPCODE #define ARGI_BYTELIST_OP ARGI_INVALID_OPCODE #define ARGI_COMMENT_OP ARGI_INVALID_OPCODE #define ARGI_CONCAT_OP ARGI_LIST3 (ARGI_ANYTYPE, ARGI_ANYTYPE, ARGI_TARGETREF) #define ARGI_CONCAT_RES_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_BUFFER, ARGI_TARGETREF) #define ARGI_COND_REF_OF_OP ARGI_LIST2 (ARGI_OBJECT_REF, ARGI_TARGETREF) #define ARGI_CONNECTFIELD_OP ARGI_INVALID_OPCODE #define ARGI_CONTINUE_OP ARGI_INVALID_OPCODE #define ARGI_COPY_OP ARGI_LIST2 (ARGI_ANYTYPE, ARGI_SIMPLE_TARGET) #define ARGI_CREATE_BIT_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE) #define ARGI_CREATE_BYTE_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE) #define ARGI_CREATE_DWORD_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE) #define ARGI_CREATE_FIELD_OP ARGI_LIST4 (ARGI_BUFFER, ARGI_INTEGER, ARGI_INTEGER, ARGI_REFERENCE) #define ARGI_CREATE_QWORD_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE) #define ARGI_CREATE_WORD_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE) #define ARGI_DATA_REGION_OP ARGI_LIST3 (ARGI_STRING, ARGI_STRING, ARGI_STRING) #define ARGI_DEBUG_OP ARG_NONE #define ARGI_DECREMENT_OP ARGI_LIST1 (ARGI_TARGETREF) #define ARGI_DEREF_OF_OP ARGI_LIST1 (ARGI_REF_OR_STRING) #define ARGI_DEVICE_OP ARGI_INVALID_OPCODE #define ARGI_DIVIDE_OP ARGI_LIST4 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF, ARGI_TARGETREF) #define ARGI_DWORD_OP ARGI_INVALID_OPCODE #define ARGI_ELSE_OP ARGI_INVALID_OPCODE #define ARGI_EVENT_OP ARGI_INVALID_OPCODE #define ARGI_EXTERNAL_OP ARGI_LIST3 (ARGI_STRING, ARGI_INTEGER, ARGI_INTEGER) #define ARGI_FATAL_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_INTEGER) #define ARGI_FIELD_OP ARGI_INVALID_OPCODE #define ARGI_FIND_SET_LEFT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_FIND_SET_RIGHT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_FROM_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET) #define ARGI_IF_OP ARGI_INVALID_OPCODE #define ARGI_INCREMENT_OP ARGI_LIST1 (ARGI_TARGETREF) #define ARGI_INDEX_FIELD_OP ARGI_INVALID_OPCODE #define ARGI_INDEX_OP ARGI_LIST3 (ARGI_COMPLEXOBJ, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_LAND_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_INTEGER) #define ARGI_LEQUAL_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_COMPUTEDATA) #define ARGI_LGREATER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_COMPUTEDATA) #define ARGI_LGREATEREQUAL_OP ARGI_INVALID_OPCODE #define ARGI_LLESS_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_COMPUTEDATA) #define ARGI_LLESSEQUAL_OP ARGI_INVALID_OPCODE #define ARGI_LNOT_OP ARGI_LIST1 (ARGI_INTEGER) #define ARGI_LNOTEQUAL_OP ARGI_INVALID_OPCODE #define ARGI_LOAD_OP ARGI_LIST2 (ARGI_REGION_OR_BUFFER,ARGI_TARGETREF) #define ARGI_LOAD_TABLE_OP ARGI_LIST6 (ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_ANYTYPE) #define ARGI_LOCAL0 ARG_NONE #define ARGI_LOCAL1 ARG_NONE #define ARGI_LOCAL2 ARG_NONE #define ARGI_LOCAL3 ARG_NONE #define ARGI_LOCAL4 ARG_NONE #define ARGI_LOCAL5 ARG_NONE #define ARGI_LOCAL6 ARG_NONE #define ARGI_LOCAL7 ARG_NONE #define ARGI_LOR_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_INTEGER) #define ARGI_MATCH_OP ARGI_LIST6 (ARGI_PACKAGE, ARGI_INTEGER, ARGI_COMPUTEDATA, ARGI_INTEGER,ARGI_COMPUTEDATA,ARGI_INTEGER) #define ARGI_METHOD_OP ARGI_INVALID_OPCODE #define ARGI_METHODCALL_OP ARGI_INVALID_OPCODE #define ARGI_MID_OP ARGI_LIST4 (ARGI_BUFFER_OR_STRING,ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_MOD_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_MULTIPLY_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_MUTEX_OP ARGI_INVALID_OPCODE #define ARGI_NAME_OP ARGI_INVALID_OPCODE #define ARGI_NAMEDFIELD_OP ARGI_INVALID_OPCODE #define ARGI_NAMEPATH_OP ARGI_INVALID_OPCODE #define ARGI_NOOP_OP ARG_NONE #define ARGI_NOTIFY_OP ARGI_LIST2 (ARGI_DEVICE_REF, ARGI_INTEGER) #define ARGI_OBJECT_TYPE_OP ARGI_LIST1 (ARGI_ANYTYPE) #define ARGI_ONE_OP ARG_NONE #define ARGI_ONES_OP ARG_NONE #define ARGI_PACKAGE_OP ARGI_LIST1 (ARGI_INTEGER) #define ARGI_POWER_RES_OP ARGI_INVALID_OPCODE #define ARGI_PROCESSOR_OP ARGI_INVALID_OPCODE #define ARGI_QWORD_OP ARGI_INVALID_OPCODE #define ARGI_REF_OF_OP ARGI_LIST1 (ARGI_OBJECT_REF) #define ARGI_REGION_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_INTEGER) #define ARGI_RELEASE_OP ARGI_LIST1 (ARGI_MUTEX) #define ARGI_RESERVEDFIELD_OP ARGI_INVALID_OPCODE #define ARGI_RESET_OP ARGI_LIST1 (ARGI_EVENT) #define ARGI_RETURN_OP ARGI_INVALID_OPCODE #define ARGI_REVISION_OP ARG_NONE #define ARGI_SCOPE_OP ARGI_INVALID_OPCODE #define ARGI_SERIALFIELD_OP ARGI_INVALID_OPCODE #define ARGI_SHIFT_LEFT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_SHIFT_RIGHT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_SIGNAL_OP ARGI_LIST1 (ARGI_EVENT) #define ARGI_SIZE_OF_OP ARGI_LIST1 (ARGI_DATAOBJECT) #define ARGI_SLEEP_OP ARGI_LIST1 (ARGI_INTEGER) #define ARGI_STALL_OP ARGI_LIST1 (ARGI_INTEGER) #define ARGI_STATICSTRING_OP ARGI_INVALID_OPCODE #define ARGI_STORE_OP ARGI_LIST2 (ARGI_DATAREFOBJ, ARGI_STORE_TARGET) #define ARGI_STRING_OP ARGI_INVALID_OPCODE #define ARGI_SUBTRACT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_THERMAL_ZONE_OP ARGI_INVALID_OPCODE #define ARGI_TIMER_OP ARG_NONE #define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET) #define ARGI_TO_BUFFER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) #define ARGI_TO_DEC_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) #define ARGI_TO_HEX_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) #define ARGI_TO_INTEGER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) #define ARGI_TO_STRING_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_FIXED_TARGET) #define ARGI_UNLOAD_OP ARGI_LIST1 (ARGI_DDBHANDLE) #define ARGI_VAR_PACKAGE_OP ARGI_LIST1 (ARGI_INTEGER) #define ARGI_WAIT_OP ARGI_LIST2 (ARGI_EVENT, ARGI_INTEGER) #define ARGI_WHILE_OP ARGI_INVALID_OPCODE #define ARGI_WORD_OP ARGI_INVALID_OPCODE #define ARGI_ZERO_OP ARG_NONE #endif /* __ACOPCODE_H__ */ src/acpica/source/include/acoutput.h000066400000000000000000000604051465205512700200410ustar00rootroot00000000000000/****************************************************************************** * * Name: acoutput.h -- debug output * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACOUTPUT_H__ #define __ACOUTPUT_H__ /* * Debug levels and component IDs. These are used to control the * granularity of the output of the ACPI_DEBUG_PRINT macro -- on a * per-component basis and a per-exception-type basis. */ /* Component IDs are used in the global "DebugLayer" */ #define ACPI_UTILITIES 0x00000001 #define ACPI_HARDWARE 0x00000002 #define ACPI_EVENTS 0x00000004 #define ACPI_TABLES 0x00000008 #define ACPI_NAMESPACE 0x00000010 #define ACPI_PARSER 0x00000020 #define ACPI_DISPATCHER 0x00000040 #define ACPI_EXECUTER 0x00000080 #define ACPI_RESOURCES 0x00000100 #define ACPI_CA_DEBUGGER 0x00000200 #define ACPI_OS_SERVICES 0x00000400 #define ACPI_CA_DISASSEMBLER 0x00000800 /* Component IDs for ACPI tools and utilities */ #define ACPI_COMPILER 0x00001000 #define ACPI_TOOLS 0x00002000 #define ACPI_EXAMPLE 0x00004000 #define ACPI_DRIVER 0x00008000 #define DT_COMPILER 0x00010000 #define ASL_PREPROCESSOR 0x00020000 #define ACPI_ALL_COMPONENTS 0x0001FFFF #define ACPI_COMPONENT_DEFAULT (ACPI_ALL_COMPONENTS) /* Component IDs reserved for ACPI drivers */ #define ACPI_ALL_DRIVERS 0xFFFF0000 /* * Raw debug output levels, do not use these in the ACPI_DEBUG_PRINT macros */ #define ACPI_LV_INIT 0x00000001 #define ACPI_LV_DEBUG_OBJECT 0x00000002 #define ACPI_LV_INFO 0x00000004 #define ACPI_LV_REPAIR 0x00000008 #define ACPI_LV_TRACE_POINT 0x00000010 #define ACPI_LV_ALL_EXCEPTIONS 0x0000001F /* Trace verbosity level 1 [Standard Trace Level] */ #define ACPI_LV_INIT_NAMES 0x00000020 #define ACPI_LV_PARSE 0x00000040 #define ACPI_LV_LOAD 0x00000080 #define ACPI_LV_DISPATCH 0x00000100 #define ACPI_LV_EXEC 0x00000200 #define ACPI_LV_NAMES 0x00000400 #define ACPI_LV_OPREGION 0x00000800 #define ACPI_LV_BFIELD 0x00001000 #define ACPI_LV_TABLES 0x00002000 #define ACPI_LV_VALUES 0x00004000 #define ACPI_LV_OBJECTS 0x00008000 #define ACPI_LV_RESOURCES 0x00010000 #define ACPI_LV_USER_REQUESTS 0x00020000 #define ACPI_LV_PACKAGE 0x00040000 #define ACPI_LV_EVALUATION 0x00080000 #define ACPI_LV_VERBOSITY1 0x000FFF40 | ACPI_LV_ALL_EXCEPTIONS /* Trace verbosity level 2 [Function tracing and memory allocation] */ #define ACPI_LV_ALLOCATIONS 0x00100000 #define ACPI_LV_FUNCTIONS 0x00200000 #define ACPI_LV_OPTIMIZATIONS 0x00400000 #define ACPI_LV_PARSE_TREES 0x00800000 #define ACPI_LV_VERBOSITY2 0x00F00000 | ACPI_LV_VERBOSITY1 #define ACPI_LV_ALL ACPI_LV_VERBOSITY2 /* Trace verbosity level 3 [Threading, I/O, and Interrupts] */ #define ACPI_LV_MUTEX 0x01000000 #define ACPI_LV_THREADS 0x02000000 #define ACPI_LV_IO 0x04000000 #define ACPI_LV_INTERRUPTS 0x08000000 #define ACPI_LV_VERBOSITY3 0x0F000000 | ACPI_LV_VERBOSITY2 /* Exceptionally verbose output -- also used in the global "DebugLevel" */ #define ACPI_LV_AML_DISASSEMBLE 0x10000000 #define ACPI_LV_VERBOSE_INFO 0x20000000 #define ACPI_LV_FULL_TABLES 0x40000000 #define ACPI_LV_EVENTS 0x80000000 #define ACPI_LV_VERBOSE 0xF0000000 /* * Debug level macros that are used in the DEBUG_PRINT macros */ #define ACPI_DEBUG_LEVEL(dl) (UINT32) dl,ACPI_DEBUG_PARAMETERS /* * Exception level -- used in the global "DebugLevel" * * Note: For errors, use the ACPI_ERROR or ACPI_EXCEPTION interfaces. * For warnings, use ACPI_WARNING. */ #define ACPI_DB_INIT ACPI_DEBUG_LEVEL (ACPI_LV_INIT) #define ACPI_DB_DEBUG_OBJECT ACPI_DEBUG_LEVEL (ACPI_LV_DEBUG_OBJECT) #define ACPI_DB_INFO ACPI_DEBUG_LEVEL (ACPI_LV_INFO) #define ACPI_DB_REPAIR ACPI_DEBUG_LEVEL (ACPI_LV_REPAIR) #define ACPI_DB_TRACE_POINT ACPI_DEBUG_LEVEL (ACPI_LV_TRACE_POINT) #define ACPI_DB_ALL_EXCEPTIONS ACPI_DEBUG_LEVEL (ACPI_LV_ALL_EXCEPTIONS) /* Trace level -- also used in the global "DebugLevel" */ #define ACPI_DB_INIT_NAMES ACPI_DEBUG_LEVEL (ACPI_LV_INIT_NAMES) #define ACPI_DB_THREADS ACPI_DEBUG_LEVEL (ACPI_LV_THREADS) #define ACPI_DB_PARSE ACPI_DEBUG_LEVEL (ACPI_LV_PARSE) #define ACPI_DB_DISPATCH ACPI_DEBUG_LEVEL (ACPI_LV_DISPATCH) #define ACPI_DB_LOAD ACPI_DEBUG_LEVEL (ACPI_LV_LOAD) #define ACPI_DB_EXEC ACPI_DEBUG_LEVEL (ACPI_LV_EXEC) #define ACPI_DB_NAMES ACPI_DEBUG_LEVEL (ACPI_LV_NAMES) #define ACPI_DB_OPREGION ACPI_DEBUG_LEVEL (ACPI_LV_OPREGION) #define ACPI_DB_BFIELD ACPI_DEBUG_LEVEL (ACPI_LV_BFIELD) #define ACPI_DB_TABLES ACPI_DEBUG_LEVEL (ACPI_LV_TABLES) #define ACPI_DB_FUNCTIONS ACPI_DEBUG_LEVEL (ACPI_LV_FUNCTIONS) #define ACPI_DB_OPTIMIZATIONS ACPI_DEBUG_LEVEL (ACPI_LV_OPTIMIZATIONS) #define ACPI_DB_PARSE_TREES ACPI_DEBUG_LEVEL (ACPI_LV_PARSE_TREES) #define ACPI_DB_VALUES ACPI_DEBUG_LEVEL (ACPI_LV_VALUES) #define ACPI_DB_OBJECTS ACPI_DEBUG_LEVEL (ACPI_LV_OBJECTS) #define ACPI_DB_ALLOCATIONS ACPI_DEBUG_LEVEL (ACPI_LV_ALLOCATIONS) #define ACPI_DB_RESOURCES ACPI_DEBUG_LEVEL (ACPI_LV_RESOURCES) #define ACPI_DB_IO ACPI_DEBUG_LEVEL (ACPI_LV_IO) #define ACPI_DB_INTERRUPTS ACPI_DEBUG_LEVEL (ACPI_LV_INTERRUPTS) #define ACPI_DB_USER_REQUESTS ACPI_DEBUG_LEVEL (ACPI_LV_USER_REQUESTS) #define ACPI_DB_PACKAGE ACPI_DEBUG_LEVEL (ACPI_LV_PACKAGE) #define ACPI_DB_EVALUATION ACPI_DEBUG_LEVEL (ACPI_LV_EVALUATION) #define ACPI_DB_MUTEX ACPI_DEBUG_LEVEL (ACPI_LV_MUTEX) #define ACPI_DB_EVENTS ACPI_DEBUG_LEVEL (ACPI_LV_EVENTS) #define ACPI_DB_ALL ACPI_DEBUG_LEVEL (ACPI_LV_ALL) /* Defaults for DebugLevel, debug and normal */ #define ACPI_DEBUG_DEFAULT (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_EVALUATION | ACPI_LV_REPAIR) #define ACPI_NORMAL_DEFAULT (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_REPAIR) #define ACPI_DEBUG_ALL (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL) /* * Global trace flags */ #define ACPI_TRACE_ENABLED ((UINT32) 4) #define ACPI_TRACE_ONESHOT ((UINT32) 2) #define ACPI_TRACE_OPCODE ((UINT32) 1) /* Defaults for trace debugging level/layer */ #define ACPI_TRACE_LEVEL_ALL ACPI_LV_ALL #define ACPI_TRACE_LAYER_ALL 0x000001FF #define ACPI_TRACE_LEVEL_DEFAULT ACPI_LV_TRACE_POINT #define ACPI_TRACE_LAYER_DEFAULT ACPI_EXECUTER #if defined (ACPI_DEBUG_OUTPUT) || !defined (ACPI_NO_ERROR_MESSAGES) /* * The module name is used primarily for error and debug messages. * The __FILE__ macro is not very useful for this, because it * usually includes the entire pathname to the module making the * debug output difficult to read. */ #define ACPI_MODULE_NAME(Name) static const char ACPI_UNUSED_VAR _AcpiModuleName[] = Name; #else /* * For the no-debug and no-error-msg cases, we must at least define * a null module name. */ #define ACPI_MODULE_NAME(Name) #define _AcpiModuleName "" #endif /* * Ascii error messages can be configured out */ #ifndef ACPI_NO_ERROR_MESSAGES #define AE_INFO _AcpiModuleName, __LINE__ /* * Error reporting. Callers module and line number are inserted by AE_INFO, * the plist contains a set of parens to allow variable-length lists. * These macros are used for both the debug and non-debug versions of the code. */ #define ACPI_INFO(plist) AcpiInfo plist #define ACPI_WARNING(plist) AcpiWarning plist #define ACPI_EXCEPTION(plist) AcpiException plist #define ACPI_ERROR(plist) AcpiError plist #define ACPI_BIOS_WARNING(plist) AcpiBiosWarning plist #define ACPI_BIOS_EXCEPTION(plist) AcpiBiosException plist #define ACPI_BIOS_ERROR(plist) AcpiBiosError plist #define ACPI_DEBUG_OBJECT(obj,l,i) AcpiExDoDebugObject(obj,l,i) #else /* No error messages */ #define ACPI_INFO(plist) #define ACPI_WARNING(plist) #define ACPI_EXCEPTION(plist) #define ACPI_ERROR(plist) #define ACPI_BIOS_WARNING(plist) #define ACPI_BIOS_EXCEPTION(plist) #define ACPI_BIOS_ERROR(plist) #define ACPI_DEBUG_OBJECT(obj,l,i) #endif /* ACPI_NO_ERROR_MESSAGES */ /* * Debug macros that are conditionally compiled */ #ifdef ACPI_DEBUG_OUTPUT /* * If ACPI_GET_FUNCTION_NAME was not defined in the compiler-dependent header, * define it now. This is the case where there the compiler does not support * a __FUNCTION__ macro or equivalent. */ #ifndef ACPI_GET_FUNCTION_NAME #define ACPI_GET_FUNCTION_NAME _AcpiFunctionName /* * The Name parameter should be the procedure name as a non-quoted string. * The function name is also used by the function exit macros below. * Note: (const char) is used to be compatible with the debug interfaces * and macros such as __FUNCTION__. */ #define ACPI_FUNCTION_NAME(Name) static const char _AcpiFunctionName[] = #Name; #else /* Compiler supports __FUNCTION__ (or equivalent) -- Ignore this macro */ #define ACPI_FUNCTION_NAME(Name) #endif /* ACPI_GET_FUNCTION_NAME */ /* * Common parameters used for debug output functions: * line number, function name, module(file) name, component ID */ #define ACPI_DEBUG_PARAMETERS \ __LINE__, ACPI_GET_FUNCTION_NAME, _AcpiModuleName, _COMPONENT /* Check if debug output is currently dynamically enabled */ #define ACPI_IS_DEBUG_ENABLED(Level, Component) \ ((Level & AcpiDbgLevel) && (Component & AcpiDbgLayer)) /* * Master debug print macros * Print message if and only if: * 1) Debug print for the current component is enabled * 2) Debug error level or trace level for the print statement is enabled * * November 2012: Moved the runtime check for whether to actually emit the * debug message outside of the print function itself. This improves overall * performance at a relatively small code cost. Implementation involves the * use of variadic macros supported by C99. * * Note: the ACPI_DO_WHILE0 macro is used to prevent some compilers from * complaining about these constructs. On other compilers the do...while * adds some extra code, so this feature is optional. */ #ifdef ACPI_USE_DO_WHILE_0 #define ACPI_DO_WHILE0(a) do a while(0) #else #define ACPI_DO_WHILE0(a) a #endif /* DEBUG_PRINT functions */ #ifndef COMPILER_VA_MACRO #define ACPI_DEBUG_PRINT(plist) AcpiDebugPrint plist #define ACPI_DEBUG_PRINT_RAW(plist) AcpiDebugPrintRaw plist #else /* Helper macros for DEBUG_PRINT */ #define ACPI_DO_DEBUG_PRINT(Function, Level, Line, Filename, Modulename, Component, ...) \ ACPI_DO_WHILE0 ({ \ if (ACPI_IS_DEBUG_ENABLED (Level, Component)) \ { \ Function (Level, Line, Filename, Modulename, Component, __VA_ARGS__); \ } \ }) #define ACPI_ACTUAL_DEBUG(Level, Line, Filename, Modulename, Component, ...) \ ACPI_DO_DEBUG_PRINT (AcpiDebugPrint, Level, Line, \ Filename, Modulename, Component, __VA_ARGS__) #define ACPI_ACTUAL_DEBUG_RAW(Level, Line, Filename, Modulename, Component, ...) \ ACPI_DO_DEBUG_PRINT (AcpiDebugPrintRaw, Level, Line, \ Filename, Modulename, Component, __VA_ARGS__) #define ACPI_DEBUG_PRINT(plist) ACPI_ACTUAL_DEBUG plist #define ACPI_DEBUG_PRINT_RAW(plist) ACPI_ACTUAL_DEBUG_RAW plist #endif /* * Function entry tracing * * The name of the function is emitted as a local variable that is * intended to be used by both the entry trace and the exit trace. */ /* Helper macro */ #define ACPI_TRACE_ENTRY(Name, Function, Type, Param) \ ACPI_FUNCTION_NAME (Name) \ Function (ACPI_DEBUG_PARAMETERS, (Type) (Param)) /* The actual entry trace macros */ #define ACPI_FUNCTION_TRACE(Name) \ ACPI_FUNCTION_NAME(Name) \ AcpiUtTrace (ACPI_DEBUG_PARAMETERS) #define ACPI_FUNCTION_TRACE_PTR(Name, Pointer) \ ACPI_TRACE_ENTRY (Name, AcpiUtTracePtr, void *, Pointer) #define ACPI_FUNCTION_TRACE_U32(Name, Value) \ ACPI_TRACE_ENTRY (Name, AcpiUtTraceU32, UINT32, Value) #define ACPI_FUNCTION_TRACE_STR(Name, String) \ ACPI_TRACE_ENTRY (Name, AcpiUtTraceStr, const char *, String) #define ACPI_FUNCTION_ENTRY() \ AcpiUtTrackStackPtr() /* * Function exit tracing * * These macros include a return statement. This is usually considered * bad form, but having a separate exit macro before the actual return * is very ugly and difficult to maintain. * * One of the FUNCTION_TRACE macros above must be used in conjunction * with these macros so that "_AcpiFunctionName" is defined. * * There are two versions of most of the return macros. The default version is * safer, since it avoids side-effects by guaranteeing that the argument will * not be evaluated twice. * * A less-safe version of the macros is provided for optional use if the * compiler uses excessive CPU stack (for example, this may happen in the * debug case if code optimization is disabled.) */ /* Exit trace helper macro */ #ifndef ACPI_SIMPLE_RETURN_MACROS #define ACPI_TRACE_EXIT(Function, Type, Param) \ ACPI_DO_WHILE0 ({ \ register Type _Param = (Type) (Param); \ Function (ACPI_DEBUG_PARAMETERS, _Param); \ return (_Param); \ }) #else /* Use original less-safe macros */ #define ACPI_TRACE_EXIT(Function, Type, Param) \ ACPI_DO_WHILE0 ({ \ Function (ACPI_DEBUG_PARAMETERS, (Type) (Param)); \ return (Param); \ }) #endif /* ACPI_SIMPLE_RETURN_MACROS */ /* The actual exit macros */ #define return_VOID \ ACPI_DO_WHILE0 ({ \ AcpiUtExit (ACPI_DEBUG_PARAMETERS); \ return; \ }) #define return_ACPI_STATUS(Status) \ ACPI_TRACE_EXIT (AcpiUtStatusExit, ACPI_STATUS, Status) #define return_PTR(Pointer) \ ACPI_TRACE_EXIT (AcpiUtPtrExit, void *, Pointer) #define return_STR(String) \ ACPI_TRACE_EXIT (AcpiUtStrExit, const char *, String) #define return_VALUE(Value) \ ACPI_TRACE_EXIT (AcpiUtValueExit, UINT64, Value) #define return_UINT32(Value) \ ACPI_TRACE_EXIT (AcpiUtValueExit, UINT32, Value) #define return_UINT8(Value) \ ACPI_TRACE_EXIT (AcpiUtValueExit, UINT8, Value) /* Conditional execution */ #define ACPI_DEBUG_EXEC(a) a #define ACPI_DEBUG_ONLY_MEMBERS(a) a #define _VERBOSE_STRUCTURES /* Various object display routines for debug */ #define ACPI_DUMP_STACK_ENTRY(a) AcpiExDumpOperand((a), 0) #define ACPI_DUMP_OPERANDS(a, b ,c) AcpiExDumpOperands(a, b, c) #define ACPI_DUMP_ENTRY(a, b) AcpiNsDumpEntry (a, b) #define ACPI_DUMP_PATHNAME(a, b, c, d) AcpiNsDumpPathname(a, b, c, d) #define ACPI_DUMP_BUFFER(a, b) AcpiUtDebugDumpBuffer((UINT8 *) a, b, DB_BYTE_DISPLAY, _COMPONENT) #define ACPI_TRACE_POINT(a, b, c, d) AcpiTracePoint (a, b, c, d) #else /* ACPI_DEBUG_OUTPUT */ /* * This is the non-debug case -- make everything go away, * leaving no executable debug code! */ #define ACPI_DEBUG_PRINT(pl) #define ACPI_DEBUG_PRINT_RAW(pl) #define ACPI_DEBUG_EXEC(a) #define ACPI_DEBUG_ONLY_MEMBERS(a) #define ACPI_FUNCTION_NAME(a) #define ACPI_FUNCTION_TRACE(a) #define ACPI_FUNCTION_TRACE_PTR(a, b) #define ACPI_FUNCTION_TRACE_U32(a, b) #define ACPI_FUNCTION_TRACE_STR(a, b) #define ACPI_FUNCTION_ENTRY() #define ACPI_DUMP_STACK_ENTRY(a) #define ACPI_DUMP_OPERANDS(a, b, c) #define ACPI_DUMP_ENTRY(a, b) #define ACPI_DUMP_PATHNAME(a, b, c, d) #define ACPI_DUMP_BUFFER(a, b) #define ACPI_IS_DEBUG_ENABLED(Level, Component) 0 #define ACPI_TRACE_POINT(a, b, c, d) /* Return macros must have a return statement at the minimum */ #define return_VOID return #define return_ACPI_STATUS(s) return(s) #define return_PTR(s) return(s) #define return_STR(s) return(s) #define return_VALUE(s) return(s) #define return_UINT8(s) return(s) #define return_UINT32(s) return(s) #endif /* ACPI_DEBUG_OUTPUT */ #endif /* __ACOUTPUT_H__ */ src/acpica/source/include/acparser.h000066400000000000000000000356011465205512700177750ustar00rootroot00000000000000/****************************************************************************** * * Module Name: acparser.h - AML Parser subcomponent prototypes and defines * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACPARSER_H__ #define __ACPARSER_H__ #define OP_HAS_RETURN_VALUE 1 /* Variable number of arguments. This field must be 32 bits */ #define ACPI_VAR_ARGS ACPI_UINT32_MAX #define ACPI_PARSE_DELETE_TREE 0x0001 #define ACPI_PARSE_NO_TREE_DELETE 0x0000 #define ACPI_PARSE_TREE_MASK 0x0001 #define ACPI_PARSE_LOAD_PASS1 0x0010 #define ACPI_PARSE_LOAD_PASS2 0x0020 #define ACPI_PARSE_EXECUTE 0x0030 #define ACPI_PARSE_MODE_MASK 0x0030 #define ACPI_PARSE_DEFERRED_OP 0x0100 #define ACPI_PARSE_DISASSEMBLE 0x0200 #define ACPI_PARSE_MODULE_LEVEL 0x0400 /****************************************************************************** * * Parser interfaces * *****************************************************************************/ extern const UINT8 AcpiGbl_ShortOpIndex[]; extern const UINT8 AcpiGbl_LongOpIndex[]; /* * psxface - Parser external interfaces */ ACPI_STATUS AcpiPsExecuteMethod ( ACPI_EVALUATE_INFO *Info); ACPI_STATUS AcpiPsExecuteTable ( ACPI_EVALUATE_INFO *Info); /* * psargs - Parse AML opcode arguments */ UINT8 * AcpiPsGetNextPackageEnd ( ACPI_PARSE_STATE *ParserState); char * AcpiPsGetNextNamestring ( ACPI_PARSE_STATE *ParserState); void AcpiPsGetNextSimpleArg ( ACPI_PARSE_STATE *ParserState, UINT32 ArgType, ACPI_PARSE_OBJECT *Arg); ACPI_STATUS AcpiPsGetNextNamepath ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_STATE *ParserState, ACPI_PARSE_OBJECT *Arg, BOOLEAN PossibleMethodCall); /* Values for BOOLEAN above */ #define ACPI_NOT_METHOD_CALL FALSE #define ACPI_POSSIBLE_METHOD_CALL TRUE ACPI_STATUS AcpiPsGetNextArg ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_STATE *ParserState, UINT32 ArgType, ACPI_PARSE_OBJECT **ReturnArg); /* * psfind */ ACPI_PARSE_OBJECT * AcpiPsFindName ( ACPI_PARSE_OBJECT *Scope, UINT32 Name, UINT32 Opcode); ACPI_PARSE_OBJECT* AcpiPsGetParent ( ACPI_PARSE_OBJECT *Op); /* * psobject - support for parse object processing */ ACPI_STATUS AcpiPsBuildNamedOp ( ACPI_WALK_STATE *WalkState, UINT8 *AmlOpStart, ACPI_PARSE_OBJECT *UnnamedOp, ACPI_PARSE_OBJECT **Op); ACPI_STATUS AcpiPsCreateOp ( ACPI_WALK_STATE *WalkState, UINT8 *AmlOpStart, ACPI_PARSE_OBJECT **NewOp); ACPI_STATUS AcpiPsCompleteOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT **Op, ACPI_STATUS Status); ACPI_STATUS AcpiPsCompleteFinalOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, ACPI_STATUS Status); /* * psopinfo - AML Opcode information */ const ACPI_OPCODE_INFO * AcpiPsGetOpcodeInfo ( UINT16 Opcode); const char * AcpiPsGetOpcodeName ( UINT16 Opcode); UINT8 AcpiPsGetArgumentCount ( UINT32 OpType); /* * psparse - top level parsing routines */ ACPI_STATUS AcpiPsParseAml ( ACPI_WALK_STATE *WalkState); UINT32 AcpiPsGetOpcodeSize ( UINT32 Opcode); UINT16 AcpiPsPeekOpcode ( ACPI_PARSE_STATE *state); ACPI_STATUS AcpiPsCompleteThisOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op); ACPI_STATUS AcpiPsNextParseState ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, ACPI_STATUS CallbackStatus); /* * psloop - main parse loop */ ACPI_STATUS AcpiPsParseLoop ( ACPI_WALK_STATE *WalkState); /* * psscope - Scope stack management routines */ ACPI_STATUS AcpiPsInitScope ( ACPI_PARSE_STATE *ParserState, ACPI_PARSE_OBJECT *Root); ACPI_PARSE_OBJECT * AcpiPsGetParentScope ( ACPI_PARSE_STATE *state); BOOLEAN AcpiPsHasCompletedScope ( ACPI_PARSE_STATE *ParserState); void AcpiPsPopScope ( ACPI_PARSE_STATE *ParserState, ACPI_PARSE_OBJECT **Op, UINT32 *ArgList, UINT32 *ArgCount); ACPI_STATUS AcpiPsPushScope ( ACPI_PARSE_STATE *ParserState, ACPI_PARSE_OBJECT *Op, UINT32 RemainingArgs, UINT32 ArgCount); void AcpiPsCleanupScope ( ACPI_PARSE_STATE *state); /* * pstree - parse tree manipulation routines */ void AcpiPsAppendArg( ACPI_PARSE_OBJECT *op, ACPI_PARSE_OBJECT *arg); ACPI_PARSE_OBJECT* AcpiPsFind ( ACPI_PARSE_OBJECT *Scope, char *Path, UINT16 Opcode, UINT32 Create); ACPI_PARSE_OBJECT * AcpiPsGetArg( ACPI_PARSE_OBJECT *op, UINT32 argn); ACPI_PARSE_OBJECT * AcpiPsGetDepthNext ( ACPI_PARSE_OBJECT *Origin, ACPI_PARSE_OBJECT *Op); /* * pswalk - parse tree walk routines */ ACPI_STATUS AcpiPsWalkParsedAml ( ACPI_PARSE_OBJECT *StartOp, ACPI_PARSE_OBJECT *EndOp, ACPI_OPERAND_OBJECT *MthDesc, ACPI_NAMESPACE_NODE *StartNode, ACPI_OPERAND_OBJECT **Params, ACPI_OPERAND_OBJECT **CallerReturnDesc, ACPI_OWNER_ID OwnerId, ACPI_PARSE_DOWNWARDS DescendingCallback, ACPI_PARSE_UPWARDS AscendingCallback); ACPI_STATUS AcpiPsGetNextWalkOp ( ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *Op, ACPI_PARSE_UPWARDS AscendingCallback); ACPI_STATUS AcpiPsDeleteCompletedOp ( ACPI_WALK_STATE *WalkState); void AcpiPsDeleteParseTree ( ACPI_PARSE_OBJECT *root); /* * psutils - parser utilities */ ACPI_PARSE_OBJECT * AcpiPsCreateScopeOp ( UINT8 *Aml); void AcpiPsInitOp ( ACPI_PARSE_OBJECT *op, UINT16 opcode); ACPI_PARSE_OBJECT * AcpiPsAllocOp ( UINT16 Opcode, UINT8 *Aml); void AcpiPsFreeOp ( ACPI_PARSE_OBJECT *Op); BOOLEAN AcpiPsIsLeadingChar ( UINT32 c); UINT32 AcpiPsGetName( ACPI_PARSE_OBJECT *op); void AcpiPsSetName( ACPI_PARSE_OBJECT *op, UINT32 name); /* * psdump - display parser tree */ UINT32 AcpiPsSprintPath ( char *BufferStart, UINT32 BufferSize, ACPI_PARSE_OBJECT *Op); UINT32 AcpiPsSprintOp ( char *BufferStart, UINT32 BufferSize, ACPI_PARSE_OBJECT *Op); void AcpiPsShow ( ACPI_PARSE_OBJECT *op); #endif /* __ACPARSER_H__ */ src/acpica/source/include/acpi.h000066400000000000000000000223121465205512700171040ustar00rootroot00000000000000/****************************************************************************** * * Name: acpi.h - Master public include file used to interface to ACPICA * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACPI_H__ #define __ACPI_H__ /* * Public include files for use by code that will interface to ACPICA. * * Information includes the ACPICA data types, names, exceptions, and * external interface prototypes. Also included are the definitions for * all ACPI tables (FADT, MADT, etc.) * * Note: The order of these include files is important. */ #include "platform/acenv.h" /* Environment-specific items */ #include "actypes.h" /* ACPICA data types and structures */ #include "platform/acenvex.h" /* Extra environment-specific items */ #include "acnames.h" /* Common ACPI names and strings */ #include "acexcep.h" /* ACPICA exceptions */ #include "actbl.h" /* ACPI table definitions */ #include "acoutput.h" /* Error output and Debug macros */ #include "acrestyp.h" /* Resource Descriptor structs */ #include "acpiosxf.h" /* OSL interfaces (ACPICA-to-OS) */ #include "acpixf.h" /* ACPI core subsystem external interfaces */ #endif /* __ACPI_H__ */ src/acpica/source/include/acpiosxf.h000066400000000000000000000501471465205512700200130ustar00rootroot00000000000000/****************************************************************************** * * Name: acpiosxf.h - All interfaces to the OS Services Layer (OSL). These * interfaces must be implemented by OSL to interface the * ACPI components to the host operating system. * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACPIOSXF_H__ #define __ACPIOSXF_H__ #include "platform/acenv.h" #include "actypes.h" /* Types for AcpiOsExecute */ typedef enum { OSL_GLOBAL_LOCK_HANDLER, OSL_NOTIFY_HANDLER, OSL_GPE_HANDLER, OSL_DEBUGGER_MAIN_THREAD, OSL_DEBUGGER_EXEC_THREAD, OSL_EC_POLL_HANDLER, OSL_EC_BURST_HANDLER } ACPI_EXECUTE_TYPE; #define ACPI_NO_UNIT_LIMIT ((UINT32) -1) #define ACPI_MUTEX_SEM 1 /* Functions for AcpiOsSignal */ #define ACPI_SIGNAL_FATAL 0 #define ACPI_SIGNAL_BREAKPOINT 1 typedef struct acpi_signal_fatal_info { UINT32 Type; UINT32 Code; UINT32 Argument; } ACPI_SIGNAL_FATAL_INFO; /* * OSL Initialization and shutdown primitives */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitialize ACPI_STATUS AcpiOsInitialize ( void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate ACPI_STATUS AcpiOsTerminate ( void); #endif /* * ACPI Table interfaces */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetRootPointer ACPI_PHYSICAL_ADDRESS AcpiOsGetRootPointer ( void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPredefinedOverride ACPI_STATUS AcpiOsPredefinedOverride ( const ACPI_PREDEFINED_NAMES *InitVal, ACPI_STRING *NewVal); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTableOverride ACPI_STATUS AcpiOsTableOverride ( ACPI_TABLE_HEADER *ExistingTable, ACPI_TABLE_HEADER **NewTable); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPhysicalTableOverride ACPI_STATUS AcpiOsPhysicalTableOverride ( ACPI_TABLE_HEADER *ExistingTable, ACPI_PHYSICAL_ADDRESS *NewAddress, UINT32 *NewTableLength); #endif /* * Spinlock primitives */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock ACPI_STATUS AcpiOsCreateLock ( ACPI_SPINLOCK *OutHandle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteLock void AcpiOsDeleteLock ( ACPI_SPINLOCK Handle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireLock ACPI_CPU_FLAGS AcpiOsAcquireLock ( ACPI_SPINLOCK Handle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseLock void AcpiOsReleaseLock ( ACPI_SPINLOCK Handle, ACPI_CPU_FLAGS Flags); #endif /* * Semaphore primitives */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateSemaphore ACPI_STATUS AcpiOsCreateSemaphore ( UINT32 MaxUnits, UINT32 InitialUnits, ACPI_SEMAPHORE *OutHandle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteSemaphore ACPI_STATUS AcpiOsDeleteSemaphore ( ACPI_SEMAPHORE Handle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitSemaphore ACPI_STATUS AcpiOsWaitSemaphore ( ACPI_SEMAPHORE Handle, UINT32 Units, UINT16 Timeout); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignalSemaphore ACPI_STATUS AcpiOsSignalSemaphore ( ACPI_SEMAPHORE Handle, UINT32 Units); #endif /* * Mutex primitives. May be configured to use semaphores instead via * ACPI_MUTEX_TYPE (see platform/acenv.h) */ #if (ACPI_MUTEX_TYPE != ACPI_BINARY_SEMAPHORE) #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateMutex ACPI_STATUS AcpiOsCreateMutex ( ACPI_MUTEX *OutHandle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteMutex void AcpiOsDeleteMutex ( ACPI_MUTEX Handle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireMutex ACPI_STATUS AcpiOsAcquireMutex ( ACPI_MUTEX Handle, UINT16 Timeout); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseMutex void AcpiOsReleaseMutex ( ACPI_MUTEX Handle); #endif #endif /* * Memory allocation and mapping */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocate void * AcpiOsAllocate ( ACPI_SIZE Size); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed void * AcpiOsAllocateZeroed ( ACPI_SIZE Size); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree void AcpiOsFree ( void * Memory); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory void * AcpiOsMapMemory ( ACPI_PHYSICAL_ADDRESS Where, ACPI_SIZE Length); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory void AcpiOsUnmapMemory ( void *LogicalAddress, ACPI_SIZE Size); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetPhysicalAddress ACPI_STATUS AcpiOsGetPhysicalAddress ( void *LogicalAddress, ACPI_PHYSICAL_ADDRESS *PhysicalAddress); #endif /* * Memory/Object Cache */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateCache ACPI_STATUS AcpiOsCreateCache ( char *CacheName, UINT16 ObjectSize, UINT16 MaxDepth, ACPI_CACHE_T **ReturnCache); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteCache ACPI_STATUS AcpiOsDeleteCache ( ACPI_CACHE_T *Cache); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPurgeCache ACPI_STATUS AcpiOsPurgeCache ( ACPI_CACHE_T *Cache); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject void * AcpiOsAcquireObject ( ACPI_CACHE_T *Cache); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseObject ACPI_STATUS AcpiOsReleaseObject ( ACPI_CACHE_T *Cache, void *Object); #endif /* * Interrupt handlers */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInstallInterruptHandler ACPI_STATUS AcpiOsInstallInterruptHandler ( UINT32 InterruptNumber, ACPI_OSD_HANDLER ServiceRoutine, void *Context); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRemoveInterruptHandler ACPI_STATUS AcpiOsRemoveInterruptHandler ( UINT32 InterruptNumber, ACPI_OSD_HANDLER ServiceRoutine); #endif /* * Threads and Scheduling */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId ACPI_THREAD_ID AcpiOsGetThreadId ( void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsExecute ACPI_STATUS AcpiOsExecute ( ACPI_EXECUTE_TYPE Type, ACPI_OSD_EXEC_CALLBACK Function, void *Context); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitEventsComplete void AcpiOsWaitEventsComplete ( void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSleep void AcpiOsSleep ( UINT64 Milliseconds); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsStall void AcpiOsStall ( UINT32 Microseconds); #endif /* * Platform and hardware-independent I/O interfaces */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPort ACPI_STATUS AcpiOsReadPort ( ACPI_IO_ADDRESS Address, UINT32 *Value, UINT32 Width); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePort ACPI_STATUS AcpiOsWritePort ( ACPI_IO_ADDRESS Address, UINT32 Value, UINT32 Width); #endif /* * Platform and hardware-independent physical memory interfaces */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadMemory ACPI_STATUS AcpiOsReadMemory ( ACPI_PHYSICAL_ADDRESS Address, UINT64 *Value, UINT32 Width); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteMemory ACPI_STATUS AcpiOsWriteMemory ( ACPI_PHYSICAL_ADDRESS Address, UINT64 Value, UINT32 Width); #endif /* * Platform and hardware-independent PCI configuration space access * Note: Can't use "Register" as a parameter, changed to "Reg" -- * certain compilers complain. */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPciConfiguration ACPI_STATUS AcpiOsReadPciConfiguration ( ACPI_PCI_ID *PciId, UINT32 Reg, UINT64 *Value, UINT32 Width); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePciConfiguration ACPI_STATUS AcpiOsWritePciConfiguration ( ACPI_PCI_ID *PciId, UINT32 Reg, UINT64 Value, UINT32 Width); #endif /* * Miscellaneous */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadable BOOLEAN AcpiOsReadable ( void *Pointer, ACPI_SIZE Length); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable BOOLEAN AcpiOsWritable ( void *Pointer, ACPI_SIZE Length); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTimer UINT64 AcpiOsGetTimer ( void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignal ACPI_STATUS AcpiOsSignal ( UINT32 Function, void *Info); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsEnterSleep ACPI_STATUS AcpiOsEnterSleep ( UINT8 SleepState, UINT32 RegaValue, UINT32 RegbValue); #endif /* * Debug print routines */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPrintf ACPI_PRINTF_LIKE (1) void ACPI_INTERNAL_VAR_XFACE AcpiOsPrintf ( const char *Format, ...); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsVprintf void AcpiOsVprintf ( const char *Format, va_list Args); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput void AcpiOsRedirectOutput ( void *Destination); #endif /* * Debug IO */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine ACPI_STATUS AcpiOsGetLine ( char *Buffer, UINT32 BufferLength, UINT32 *BytesRead); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitializeDebugger ACPI_STATUS AcpiOsInitializeDebugger ( void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminateDebugger void AcpiOsTerminateDebugger ( void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitCommandReady ACPI_STATUS AcpiOsWaitCommandReady ( void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsNotifyCommandComplete ACPI_STATUS AcpiOsNotifyCommandComplete ( void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTracePoint void AcpiOsTracePoint ( ACPI_TRACE_EVENT_TYPE Type, BOOLEAN Begin, UINT8 *Aml, char *Pathname); #endif /* * Obtain ACPI table(s) */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName ACPI_STATUS AcpiOsGetTableByName ( char *Signature, UINT32 Instance, ACPI_TABLE_HEADER **Table, ACPI_PHYSICAL_ADDRESS *Address); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex ACPI_STATUS AcpiOsGetTableByIndex ( UINT32 Index, ACPI_TABLE_HEADER **Table, UINT32 *Instance, ACPI_PHYSICAL_ADDRESS *Address); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress ACPI_STATUS AcpiOsGetTableByAddress ( ACPI_PHYSICAL_ADDRESS Address, ACPI_TABLE_HEADER **Table); #endif /* * Directory manipulation */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory void * AcpiOsOpenDirectory ( char *Pathname, char *WildcardSpec, char RequestedFileType); #endif /* RequesteFileType values */ #define REQUEST_FILE_ONLY 0 #define REQUEST_DIR_ONLY 1 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename char * AcpiOsGetNextFilename ( void *DirHandle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory void AcpiOsCloseDirectory ( void *DirHandle); #endif #endif /* __ACPIOSXF_H__ */ src/acpica/source/include/acpixf.h000066400000000000000000001225251465205512700174510ustar00rootroot00000000000000/****************************************************************************** * * Name: acpixf.h - External interfaces to the ACPI subsystem * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACXFACE_H__ #define __ACXFACE_H__ /* Current ACPICA subsystem version in YYYYMMDD format */ #define ACPI_CA_VERSION 0x20240322 #include "acconfig.h" #include "actypes.h" #include "actbl.h" #include "acbuffer.h" /***************************************************************************** * * Macros used for ACPICA globals and configuration * ****************************************************************************/ /* * Ensure that global variables are defined and initialized only once. * * The use of these macros allows for a single list of globals (here) * in order to simplify maintenance of the code. */ #ifdef DEFINE_ACPI_GLOBALS #define ACPI_GLOBAL(type,name) \ extern type name; \ type name #define ACPI_INIT_GLOBAL(type,name,value) \ type name=value #else #ifndef ACPI_GLOBAL #define ACPI_GLOBAL(type,name) \ extern type name #endif #ifndef ACPI_INIT_GLOBAL #define ACPI_INIT_GLOBAL(type,name,value) \ extern type name #endif #endif /* * These macros configure the various ACPICA interfaces. They are * useful for generating stub inline functions for features that are * configured out of the current kernel or ACPICA application. */ #ifndef ACPI_EXTERNAL_RETURN_STATUS #define ACPI_EXTERNAL_RETURN_STATUS(Prototype) \ Prototype; #endif #ifndef ACPI_EXTERNAL_RETURN_OK #define ACPI_EXTERNAL_RETURN_OK(Prototype) \ Prototype; #endif #ifndef ACPI_EXTERNAL_RETURN_VOID #define ACPI_EXTERNAL_RETURN_VOID(Prototype) \ Prototype; #endif #ifndef ACPI_EXTERNAL_RETURN_UINT32 #define ACPI_EXTERNAL_RETURN_UINT32(Prototype) \ Prototype; #endif #ifndef ACPI_EXTERNAL_RETURN_PTR #define ACPI_EXTERNAL_RETURN_PTR(Prototype) \ Prototype; #endif /***************************************************************************** * * Public globals and runtime configuration options * ****************************************************************************/ /* * Enable "slack mode" of the AML interpreter? Default is FALSE, and the * interpreter strictly follows the ACPI specification. Setting to TRUE * allows the interpreter to ignore certain errors and/or bad AML constructs. * * Currently, these features are enabled by this flag: * * 1) Allow "implicit return" of last value in a control method * 2) Allow access beyond the end of an operation region * 3) Allow access to uninitialized locals/args (auto-init to integer 0) * 4) Allow ANY object type to be a source operand for the Store() operator * 5) Allow unresolved references (invalid target name) in package objects * 6) Enable warning messages for behavior that is not ACPI spec compliant */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_EnableInterpreterSlack, FALSE); /* * Automatically serialize all methods that create named objects? Default * is TRUE, meaning that all NonSerialized methods are scanned once at * table load time to determine those that create named objects. Methods * that create named objects are marked Serialized in order to prevent * possible run-time problems if they are entered by more than one thread. */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_AutoSerializeMethods, TRUE); /* * Create the predefined _OSI method in the namespace? Default is TRUE * because ACPICA is fully compatible with other ACPI implementations. * Changing this will revert ACPICA (and machine ASL) to pre-OSI behavior. */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_CreateOsiMethod, TRUE); /* * Optionally use default values for the ACPI register widths. Set this to * TRUE to use the defaults, if an FADT contains incorrect widths/lengths. */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_UseDefaultRegisterWidths, TRUE); /* * Whether or not to validate (map) an entire table to verify * checksum/duplication in early stage before install. Set this to TRUE to * allow early table validation before install it to the table manager. * Note that enabling this option causes errors to happen in some OSPMs * during early initialization stages. Default behavior is to allow such * validation. */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_EnableTableValidation, TRUE); /* * Optionally enable output from the AML Debug Object. */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_EnableAmlDebugObject, FALSE); /* * Optionally copy the entire DSDT to local memory (instead of simply * mapping it.) There are some BIOSs that corrupt or replace the original * DSDT, creating the need for this option. Default is FALSE, do not copy * the DSDT. */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_CopyDsdtLocally, FALSE); /* * Optionally ignore an XSDT if present and use the RSDT instead. * Although the ACPI specification requires that an XSDT be used instead * of the RSDT, the XSDT has been found to be corrupt or ill-formed on * some machines. Default behavior is to use the XSDT if present. */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DoNotUseXsdt, FALSE); /* * Optionally use 32-bit FADT addresses if and when there is a conflict * (address mismatch) between the 32-bit and 64-bit versions of the * address. Although ACPICA adheres to the ACPI specification which * requires the use of the corresponding 64-bit address if it is non-zero, * some machines have been found to have a corrupted non-zero 64-bit * address. Default is FALSE, do not favor the 32-bit addresses. */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_Use32BitFadtAddresses, FALSE); /* * Optionally use 32-bit FACS table addresses. * It is reported that some platforms fail to resume from system suspending * if 64-bit FACS table address is selected: * https://bugzilla.kernel.org/show_bug.cgi?id=74021 * Default is TRUE, favor the 32-bit addresses. */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_Use32BitFacsAddresses, TRUE); /* * Optionally truncate I/O addresses to 16 bits. Provides compatibility * with other ACPI implementations. NOTE: During ACPICA initialization, * this value is set to TRUE if any Windows OSI strings have been * requested by the BIOS. */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_TruncateIoAddresses, FALSE); /* * Disable runtime checking and repair of values returned by control methods. * Use only if the repair is causing a problem on a particular machine. */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DisableAutoRepair, FALSE); /* * Optionally do not install any SSDTs from the RSDT/XSDT during initialization. * This can be useful for debugging ACPI problems on some machines. */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DisableSsdtTableInstall, FALSE); /* * Optionally enable runtime namespace override. */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_RuntimeNamespaceOverride, TRUE); /* * We keep track of the latest version of Windows that has been requested by * the BIOS. ACPI 5.0. */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_OsiData, 0); /* * ACPI 5.0 introduces the concept of a "reduced hardware platform", meaning * that the ACPI hardware is no longer required. A flag in the FADT indicates * a reduced HW machine, and that flag is duplicated here for convenience. */ ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_ReducedHardware, FALSE); /* * Maximum timeout for While() loop iterations before forced method abort. * This mechanism is intended to prevent infinite loops during interpreter * execution within a host kernel. */ ACPI_INIT_GLOBAL (UINT32, AcpiGbl_MaxLoopIterations, ACPI_MAX_LOOP_TIMEOUT); /* * Optionally ignore AE_NOT_FOUND errors from named reference package elements * during DSDT/SSDT table loading. This reduces error "noise" in platforms * whose firmware is carrying around a bunch of unused package objects that * refer to non-existent named objects. However, If the AML actually tries to * use such a package, the unresolved element(s) will be replaced with NULL * elements. */ ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_IgnorePackageResolutionErrors, FALSE); /* * This mechanism is used to trace a specified AML method. The method is * traced each time it is executed. */ ACPI_INIT_GLOBAL (UINT32, AcpiGbl_TraceFlags, 0); ACPI_INIT_GLOBAL (const char *, AcpiGbl_TraceMethodName, NULL); ACPI_INIT_GLOBAL (UINT32, AcpiGbl_TraceDbgLevel, ACPI_TRACE_LEVEL_DEFAULT); ACPI_INIT_GLOBAL (UINT32, AcpiGbl_TraceDbgLayer, ACPI_TRACE_LAYER_DEFAULT); /* * Runtime configuration of debug output control masks. We want the debug * switches statically initialized so they are already set when the debugger * is entered. */ #ifdef ACPI_DEBUG_OUTPUT ACPI_INIT_GLOBAL (UINT32, AcpiDbgLevel, ACPI_DEBUG_DEFAULT); #else ACPI_INIT_GLOBAL (UINT32, AcpiDbgLevel, ACPI_NORMAL_DEFAULT); #endif ACPI_INIT_GLOBAL (UINT32, AcpiDbgLayer, ACPI_COMPONENT_DEFAULT); /* Optionally enable timer output with Debug Object output */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DisplayDebugTimer, FALSE); /* * Debugger command handshake globals. Host OSes need to access these * variables to implement their own command handshake mechanism. */ #ifdef ACPI_DEBUGGER ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_MethodExecuting, FALSE); ACPI_GLOBAL (char, AcpiGbl_DbLineBuf[ACPI_DB_LINE_BUFFER_SIZE]); #endif /* * Other miscellaneous globals */ ACPI_GLOBAL (ACPI_TABLE_FADT, AcpiGbl_FADT); ACPI_GLOBAL (UINT32, AcpiCurrentGpeCount); ACPI_GLOBAL (BOOLEAN, AcpiGbl_SystemAwakeAndRunning); /***************************************************************************** * * ACPICA public interface configuration. * * Interfaces that are configured out of the ACPICA build are replaced * by inlined stubs by default. * ****************************************************************************/ /* * Hardware-reduced prototypes (default: Not hardware reduced). * * All ACPICA hardware-related interfaces that use these macros will be * configured out of the ACPICA build if the ACPI_REDUCED_HARDWARE flag * is set to TRUE. * * Note: This static build option for reduced hardware is intended to * reduce ACPICA code size if desired or necessary. However, even if this * option is not specified, the runtime behavior of ACPICA is dependent * on the actual FADT reduced hardware flag (HW_REDUCED_ACPI). If set, * the flag will enable similar behavior -- ACPICA will not attempt * to access any ACPI-relate hardware (SCI, GPEs, Fixed Events, etc.) */ #if (!ACPI_REDUCED_HARDWARE) #define ACPI_HW_DEPENDENT_RETURN_STATUS(Prototype) \ ACPI_EXTERNAL_RETURN_STATUS(Prototype) #define ACPI_HW_DEPENDENT_RETURN_OK(Prototype) \ ACPI_EXTERNAL_RETURN_OK(Prototype) #define ACPI_HW_DEPENDENT_RETURN_UINT32(prototype) \ ACPI_EXTERNAL_RETURN_UINT32(prototype) #define ACPI_HW_DEPENDENT_RETURN_VOID(Prototype) \ ACPI_EXTERNAL_RETURN_VOID(Prototype) #else #define ACPI_HW_DEPENDENT_RETURN_STATUS(Prototype) \ static ACPI_INLINE Prototype {return(AE_NOT_CONFIGURED);} #define ACPI_HW_DEPENDENT_RETURN_OK(Prototype) \ static ACPI_INLINE Prototype {return(AE_OK);} #define ACPI_HW_DEPENDENT_RETURN_UINT32(prototype) \ static ACPI_INLINE prototype {return(0);} #define ACPI_HW_DEPENDENT_RETURN_VOID(Prototype) \ static ACPI_INLINE Prototype {return;} #endif /* !ACPI_REDUCED_HARDWARE */ /* * Error message prototypes (default: error messages enabled). * * All interfaces related to error and warning messages * will be configured out of the ACPICA build if the * ACPI_NO_ERROR_MESSAGE flag is defined. */ #ifndef ACPI_NO_ERROR_MESSAGES #define ACPI_MSG_DEPENDENT_RETURN_VOID(Prototype) \ Prototype; #else #define ACPI_MSG_DEPENDENT_RETURN_VOID(Prototype) \ static ACPI_INLINE Prototype {return;} #endif /* ACPI_NO_ERROR_MESSAGES */ /* * Debugging output prototypes (default: no debug output). * * All interfaces related to debug output messages * will be configured out of the ACPICA build unless the * ACPI_DEBUG_OUTPUT flag is defined. */ #ifdef ACPI_DEBUG_OUTPUT #define ACPI_DBG_DEPENDENT_RETURN_VOID(Prototype) \ Prototype; #else #define ACPI_DBG_DEPENDENT_RETURN_VOID(Prototype) \ static ACPI_INLINE Prototype {return;} #endif /* ACPI_DEBUG_OUTPUT */ /* * Application prototypes * * All interfaces used by application will be configured * out of the ACPICA build unless the ACPI_APPLICATION * flag is defined. */ #ifdef ACPI_APPLICATION #define ACPI_APP_DEPENDENT_RETURN_VOID(Prototype) \ Prototype; #else #define ACPI_APP_DEPENDENT_RETURN_VOID(Prototype) \ static ACPI_INLINE Prototype {return;} #endif /* ACPI_APPLICATION */ /* * Debugger prototypes * * All interfaces used by debugger will be configured * out of the ACPICA build unless the ACPI_DEBUGGER * flag is defined. */ #ifdef ACPI_DEBUGGER #define ACPI_DBR_DEPENDENT_RETURN_OK(Prototype) \ ACPI_EXTERNAL_RETURN_OK(Prototype) #define ACPI_DBR_DEPENDENT_RETURN_VOID(Prototype) \ ACPI_EXTERNAL_RETURN_VOID(Prototype) #else #define ACPI_DBR_DEPENDENT_RETURN_OK(Prototype) \ static ACPI_INLINE Prototype {return(AE_OK);} #define ACPI_DBR_DEPENDENT_RETURN_VOID(Prototype) \ static ACPI_INLINE Prototype {return;} #endif /* ACPI_DEBUGGER */ /***************************************************************************** * * ACPICA public interface prototypes * ****************************************************************************/ /* * Initialization */ ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS ACPI_INIT_FUNCTION AcpiInitializeTables ( ACPI_TABLE_DESC *InitialStorage, UINT32 InitialTableCount, BOOLEAN AllowResize)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS ACPI_INIT_FUNCTION AcpiInitializeSubsystem ( void)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS ACPI_INIT_FUNCTION AcpiEnableSubsystem ( UINT32 Flags)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS ACPI_INIT_FUNCTION AcpiInitializeObjects ( UINT32 Flags)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS ACPI_INIT_FUNCTION AcpiTerminate ( void)) /* * Miscellaneous global interfaces */ ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiEnable ( void)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiDisable ( void)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiSubsystemStatus ( void)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetSystemInfo ( ACPI_BUFFER *RetBuffer)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetStatistics ( ACPI_STATISTICS *Stats)) ACPI_EXTERNAL_RETURN_PTR ( const char * AcpiFormatException ( ACPI_STATUS Exception)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiPurgeCachedObjects ( void)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiInstallInterface ( ACPI_STRING InterfaceName)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiRemoveInterface ( ACPI_STRING InterfaceName)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiUpdateInterfaces ( UINT8 Action)) ACPI_EXTERNAL_RETURN_UINT32 ( UINT32 AcpiCheckAddressRange ( ACPI_ADR_SPACE_TYPE SpaceId, ACPI_PHYSICAL_ADDRESS Address, ACPI_SIZE Length, BOOLEAN Warn)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiDecodePldBuffer ( UINT8 *InBuffer, ACPI_SIZE Length, ACPI_PLD_INFO **ReturnBuffer)) /* * ACPI table load/unload interfaces */ ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS ACPI_INIT_FUNCTION AcpiInstallTable ( ACPI_TABLE_HEADER *Table)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS ACPI_INIT_FUNCTION AcpiInstallPhysicalTable ( ACPI_PHYSICAL_ADDRESS Address)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiLoadTable ( ACPI_TABLE_HEADER *Table, UINT32 *TableIdx)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiUnloadTable ( UINT32 TableIndex)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiUnloadParentTable ( ACPI_HANDLE Object)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS ACPI_INIT_FUNCTION AcpiLoadTables ( void)) /* * ACPI table manipulation interfaces */ ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS ACPI_INIT_FUNCTION AcpiReallocateRootTable ( void)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS ACPI_INIT_FUNCTION AcpiFindRootPointer ( ACPI_PHYSICAL_ADDRESS *RsdpAddress)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetTableHeader ( ACPI_STRING Signature, UINT32 Instance, ACPI_TABLE_HEADER *OutTableHeader)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetTable ( ACPI_STRING Signature, UINT32 Instance, ACPI_TABLE_HEADER **OutTable)) ACPI_EXTERNAL_RETURN_VOID ( void AcpiPutTable ( ACPI_TABLE_HEADER *Table)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetTableByIndex ( UINT32 TableIndex, ACPI_TABLE_HEADER **OutTable)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiInstallTableHandler ( ACPI_TABLE_HANDLER Handler, void *Context)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiRemoveTableHandler ( ACPI_TABLE_HANDLER Handler)) /* * Namespace and name interfaces */ ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiWalkNamespace ( ACPI_OBJECT_TYPE Type, ACPI_HANDLE StartObject, UINT32 MaxDepth, ACPI_WALK_CALLBACK DescendingCallback, ACPI_WALK_CALLBACK AscendingCallback, void *Context, void **ReturnValue)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetDevices ( char *HID, ACPI_WALK_CALLBACK UserFunction, void *Context, void **ReturnValue)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetName ( ACPI_HANDLE Object, UINT32 NameType, ACPI_BUFFER *RetPathPtr)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetHandle ( ACPI_HANDLE Parent, const char *Pathname, ACPI_HANDLE *RetHandle)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiAttachData ( ACPI_HANDLE Object, ACPI_OBJECT_HANDLER Handler, void *Data)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiDetachData ( ACPI_HANDLE Object, ACPI_OBJECT_HANDLER Handler)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetData ( ACPI_HANDLE Object, ACPI_OBJECT_HANDLER Handler, void **Data)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiDebugTrace ( const char *Name, UINT32 DebugLevel, UINT32 DebugLayer, UINT32 Flags)) /* * Object manipulation and enumeration */ ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiEvaluateObject ( ACPI_HANDLE Object, ACPI_STRING Pathname, ACPI_OBJECT_LIST *ParameterObjects, ACPI_BUFFER *ReturnObjectBuffer)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiEvaluateObjectTyped ( ACPI_HANDLE Object, ACPI_STRING Pathname, ACPI_OBJECT_LIST *ExternalParams, ACPI_BUFFER *ReturnBuffer, ACPI_OBJECT_TYPE ReturnType)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetObjectInfo ( ACPI_HANDLE Object, ACPI_DEVICE_INFO **ReturnBuffer)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiInstallMethod ( UINT8 *Buffer)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetNextObject ( ACPI_OBJECT_TYPE Type, ACPI_HANDLE Parent, ACPI_HANDLE Child, ACPI_HANDLE *OutHandle)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetType ( ACPI_HANDLE Object, ACPI_OBJECT_TYPE *OutType)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetParent ( ACPI_HANDLE Object, ACPI_HANDLE *OutHandle)) /* * Handler interfaces */ ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiInstallInitializationHandler ( ACPI_INIT_HANDLER Handler, UINT32 Function)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiInstallSciHandler ( ACPI_SCI_HANDLER Address, void *Context)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiRemoveSciHandler ( ACPI_SCI_HANDLER Address)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiInstallGlobalEventHandler ( ACPI_GBL_EVENT_HANDLER Handler, void *Context)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiInstallFixedEventHandler ( UINT32 AcpiEvent, ACPI_EVENT_HANDLER Handler, void *Context)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiRemoveFixedEventHandler ( UINT32 AcpiEvent, ACPI_EVENT_HANDLER Handler)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiInstallGpeHandler ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, UINT32 Type, ACPI_GPE_HANDLER Address, void *Context)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiInstallGpeRawHandler ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, UINT32 Type, ACPI_GPE_HANDLER Address, void *Context)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiRemoveGpeHandler ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, ACPI_GPE_HANDLER Address)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiInstallNotifyHandler ( ACPI_HANDLE Device, UINT32 HandlerType, ACPI_NOTIFY_HANDLER Handler, void *Context)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiRemoveNotifyHandler ( ACPI_HANDLE Device, UINT32 HandlerType, ACPI_NOTIFY_HANDLER Handler)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiInstallAddressSpaceHandler ( ACPI_HANDLE Device, ACPI_ADR_SPACE_TYPE SpaceId, ACPI_ADR_SPACE_HANDLER Handler, ACPI_ADR_SPACE_SETUP Setup, void *Context)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiInstallAddressSpaceHandlerNo_Reg( ACPI_HANDLE Device, ACPI_ADR_SPACE_TYPE SpaceId, ACPI_ADR_SPACE_HANDLER Handler, ACPI_ADR_SPACE_SETUP Setup, void *Context)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiExecuteRegMethods ( ACPI_HANDLE Device, ACPI_ADR_SPACE_TYPE SpaceId)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiRemoveAddressSpaceHandler ( ACPI_HANDLE Device, ACPI_ADR_SPACE_TYPE SpaceId, ACPI_ADR_SPACE_HANDLER Handler)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiInstallExceptionHandler ( ACPI_EXCEPTION_HANDLER Handler)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiInstallInterfaceHandler ( ACPI_INTERFACE_HANDLER Handler)) /* * Global Lock interfaces */ ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiAcquireGlobalLock ( UINT16 Timeout, UINT32 *Handle)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiReleaseGlobalLock ( UINT32 Handle)) /* * Interfaces to AML mutex objects */ ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiAcquireMutex ( ACPI_HANDLE Handle, ACPI_STRING Pathname, UINT16 Timeout)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiReleaseMutex ( ACPI_HANDLE Handle, ACPI_STRING Pathname)) /* * Fixed Event interfaces */ ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiEnableEvent ( UINT32 Event, UINT32 Flags)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiDisableEvent ( UINT32 Event, UINT32 Flags)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiClearEvent ( UINT32 Event)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiGetEventStatus ( UINT32 Event, ACPI_EVENT_STATUS *EventStatus)) /* * General Purpose Event (GPE) Interfaces */ ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiUpdateAllGpes ( void)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiEnableGpe ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiDisableGpe ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiClearGpe ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiSetGpe ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, UINT8 Action)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiFinishGpe ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiMaskGpe ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, BOOLEAN IsMasked)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiMarkGpeForWake ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiSetupGpeForWake ( ACPI_HANDLE ParentDevice, ACPI_HANDLE GpeDevice, UINT32 GpeNumber)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiSetGpeWakeMask ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, UINT8 Action)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiGetGpeStatus ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, ACPI_EVENT_STATUS *EventStatus)) ACPI_HW_DEPENDENT_RETURN_UINT32 ( UINT32 AcpiDispatchGpe ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiDisableAllGpes ( void)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiEnableAllRuntimeGpes ( void)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiEnableAllWakeupGpes ( void)) ACPI_HW_DEPENDENT_RETURN_UINT32 ( UINT32 AcpiAnyGpeStatusSet ( void)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiGetGpeDevice ( UINT32 GpeIndex, ACPI_HANDLE *GpeDevice)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiInstallGpeBlock ( ACPI_HANDLE GpeDevice, ACPI_GENERIC_ADDRESS *GpeBlockAddress, UINT32 RegisterCount, UINT32 InterruptNumber)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiRemoveGpeBlock ( ACPI_HANDLE GpeDevice)) /* * Resource interfaces */ typedef ACPI_STATUS (*ACPI_WALK_RESOURCE_CALLBACK) ( ACPI_RESOURCE *Resource, void *Context); ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetVendorResource ( ACPI_HANDLE Device, char *Name, ACPI_VENDOR_UUID *Uuid, ACPI_BUFFER *RetBuffer)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetCurrentResources ( ACPI_HANDLE Device, ACPI_BUFFER *RetBuffer)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetPossibleResources ( ACPI_HANDLE Device, ACPI_BUFFER *RetBuffer)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetEventResources ( ACPI_HANDLE DeviceHandle, ACPI_BUFFER *RetBuffer)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiWalkResourceBuffer ( ACPI_BUFFER *Buffer, ACPI_WALK_RESOURCE_CALLBACK UserFunction, void *Context)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiWalkResources ( ACPI_HANDLE Device, char *Name, ACPI_WALK_RESOURCE_CALLBACK UserFunction, void *Context)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiSetCurrentResources ( ACPI_HANDLE Device, ACPI_BUFFER *InBuffer)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetIrqRoutingTable ( ACPI_HANDLE Device, ACPI_BUFFER *RetBuffer)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiResourceToAddress64 ( ACPI_RESOURCE *Resource, ACPI_RESOURCE_ADDRESS64 *Out)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiBufferToResource ( UINT8 *AmlBuffer, UINT16 AmlBufferLength, ACPI_RESOURCE **ResourcePtr)) /* * Hardware (ACPI device) interfaces */ ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiReset ( void)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiRead ( UINT64 *Value, ACPI_GENERIC_ADDRESS *Reg)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiWrite ( UINT64 Value, ACPI_GENERIC_ADDRESS *Reg)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiReadBitRegister ( UINT32 RegisterId, UINT32 *ReturnValue)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiWriteBitRegister ( UINT32 RegisterId, UINT32 Value)) /* * Sleep/Wake interfaces */ ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiGetSleepTypeData ( UINT8 SleepState, UINT8 *Slp_TypA, UINT8 *Slp_TypB)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiEnterSleepStatePrep ( UINT8 SleepState)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiEnterSleepState ( UINT8 SleepState)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiEnterSleepStateS4bios ( void)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiLeaveSleepStatePrep ( UINT8 SleepState)) ACPI_EXTERNAL_RETURN_STATUS ( ACPI_STATUS AcpiLeaveSleepState ( UINT8 SleepState)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiSetFirmwareWakingVector ( ACPI_PHYSICAL_ADDRESS PhysicalAddress, ACPI_PHYSICAL_ADDRESS PhysicalAddress64)) /* * ACPI Timer interfaces */ ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiGetTimerResolution ( UINT32 *Resolution)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiGetTimer ( UINT32 *Ticks)) ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiGetTimerDuration ( UINT32 StartTicks, UINT32 EndTicks, UINT32 *TimeElapsed)) /* * Error/Warning output */ ACPI_MSG_DEPENDENT_RETURN_VOID ( ACPI_PRINTF_LIKE(3) void ACPI_INTERNAL_VAR_XFACE AcpiError ( const char *ModuleName, UINT32 LineNumber, const char *Format, ...)) ACPI_MSG_DEPENDENT_RETURN_VOID ( ACPI_PRINTF_LIKE(4) void ACPI_INTERNAL_VAR_XFACE AcpiException ( const char *ModuleName, UINT32 LineNumber, ACPI_STATUS Status, const char *Format, ...)) ACPI_MSG_DEPENDENT_RETURN_VOID ( ACPI_PRINTF_LIKE(3) void ACPI_INTERNAL_VAR_XFACE AcpiWarning ( const char *ModuleName, UINT32 LineNumber, const char *Format, ...)) ACPI_MSG_DEPENDENT_RETURN_VOID ( ACPI_PRINTF_LIKE(1) void ACPI_INTERNAL_VAR_XFACE AcpiInfo ( const char *Format, ...)) ACPI_MSG_DEPENDENT_RETURN_VOID ( ACPI_PRINTF_LIKE(3) void ACPI_INTERNAL_VAR_XFACE AcpiBiosError ( const char *ModuleName, UINT32 LineNumber, const char *Format, ...)) ACPI_MSG_DEPENDENT_RETURN_VOID ( ACPI_PRINTF_LIKE(4) void ACPI_INTERNAL_VAR_XFACE AcpiBiosException ( const char *ModuleName, UINT32 LineNumber, ACPI_STATUS Status, const char *Format, ...)) ACPI_MSG_DEPENDENT_RETURN_VOID ( ACPI_PRINTF_LIKE(3) void ACPI_INTERNAL_VAR_XFACE AcpiBiosWarning ( const char *ModuleName, UINT32 LineNumber, const char *Format, ...)) /* * Debug output */ ACPI_DBG_DEPENDENT_RETURN_VOID ( ACPI_PRINTF_LIKE(6) void ACPI_INTERNAL_VAR_XFACE AcpiDebugPrint ( UINT32 RequestedDebugLevel, UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, const char *Format, ...)) ACPI_DBG_DEPENDENT_RETURN_VOID ( ACPI_PRINTF_LIKE(6) void ACPI_INTERNAL_VAR_XFACE AcpiDebugPrintRaw ( UINT32 RequestedDebugLevel, UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, const char *Format, ...)) ACPI_DBG_DEPENDENT_RETURN_VOID ( void AcpiTracePoint ( ACPI_TRACE_EVENT_TYPE Type, BOOLEAN Begin, UINT8 *Aml, char *Pathname)) ACPI_STATUS AcpiInitializeDebugger ( void); void AcpiTerminateDebugger ( void); void AcpiRunDebugger ( char *BatchBuffer); void AcpiSetDebuggerThreadId ( ACPI_THREAD_ID ThreadId); #endif /* __ACXFACE_H__ */ src/acpica/source/include/acpredef.h000066400000000000000000001536531465205512700177560ustar00rootroot00000000000000/****************************************************************************** * * Name: acpredef - Information table for ACPI predefined methods and objects * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACPREDEF_H__ #define __ACPREDEF_H__ /****************************************************************************** * * Return Package types * * 1) PTYPE1 packages do not contain subpackages. * * ACPI_PTYPE1_FIXED: Fixed-length length, 1 or 2 object types: * object type * count * object type * count * * ACPI_PTYPE1_VAR: Variable-length length. Zero-length package is allowed: * object type (Int/Buf/Ref) * * ACPI_PTYPE1_OPTION: Package has some required and some optional elements * (Used for _PRW) * * * 2) PTYPE2 packages contain a Variable-length number of subpackages. Each * of the different types describe the contents of each of the subpackages. * * ACPI_PTYPE2: Each subpackage contains 1 or 2 object types. Zero-length * parent package is allowed: * object type * count * object type * count * (Used for _ALR,_MLS,_PSS,_TRT,_TSS) * * ACPI_PTYPE2_COUNT: Each subpackage has a count as first element. * Zero-length parent package is allowed: * object type * (Used for _CSD,_PSD,_TSD) * * ACPI_PTYPE2_PKG_COUNT: Count of subpackages at start, 1 or 2 object types: * object type * count * object type * count * (Used for _CST) * * ACPI_PTYPE2_FIXED: Each subpackage is of Fixed-length. Zero-length * parent package is allowed. * (Used for _PRT) * * ACPI_PTYPE2_MIN: Each subpackage has a Variable-length but minimum length. * Zero-length parent package is allowed: * (Used for _HPX) * * ACPI_PTYPE2_REV_FIXED: Revision at start, each subpackage is Fixed-length * (Used for _ART, _FPS) * * ACPI_PTYPE2_FIX_VAR: Each subpackage consists of some fixed-length elements * followed by an optional element. Zero-length parent package is allowed. * object type * count * object type * count = 0 (optional) * (Used for _DLM) * * ACPI_PTYPE2_VAR_VAR: Variable number of subpackages, each of either a * constant or variable length. The subpackages are preceded by a * constant number of objects. * (Used for _LPI, _RDI) * * ACPI_PTYPE2_UUID_PAIR: Each subpackage is preceded by a UUID Buffer. The UUID * defines the format of the package. Zero-length parent package is * allowed. * (Used for _DSD) * *****************************************************************************/ enum AcpiReturnPackageTypes { ACPI_PTYPE1_FIXED = 1, ACPI_PTYPE1_VAR = 2, ACPI_PTYPE1_OPTION = 3, ACPI_PTYPE2 = 4, ACPI_PTYPE2_COUNT = 5, ACPI_PTYPE2_PKG_COUNT = 6, ACPI_PTYPE2_FIXED = 7, ACPI_PTYPE2_MIN = 8, ACPI_PTYPE2_REV_FIXED = 9, ACPI_PTYPE2_FIX_VAR = 10, ACPI_PTYPE2_VAR_VAR = 11, ACPI_PTYPE2_UUID_PAIR = 12, ACPI_PTYPE_CUSTOM = 13 }; /* Support macros for users of the predefined info table */ #define METHOD_PREDEF_ARGS_MAX 5 #define METHOD_ARG_BIT_WIDTH 3 #define METHOD_ARG_MASK 0x0007 #define ARG_COUNT_IS_MINIMUM 0x8000 #define METHOD_MAX_ARG_TYPE ACPI_TYPE_PACKAGE #define METHOD_GET_ARG_COUNT(ArgList) ((ArgList) & METHOD_ARG_MASK) #define METHOD_GET_NEXT_TYPE(ArgList) (((ArgList) >>= METHOD_ARG_BIT_WIDTH) & METHOD_ARG_MASK) /* Macros used to build the predefined info table */ #define METHOD_0ARGS 0 #define METHOD_1ARGS(a1) (1 | (a1 << 3)) #define METHOD_2ARGS(a1,a2) (2 | (a1 << 3) | (a2 << 6)) #define METHOD_3ARGS(a1,a2,a3) (3 | (a1 << 3) | (a2 << 6) | (a3 << 9)) #define METHOD_4ARGS(a1,a2,a3,a4) (4 | (a1 << 3) | (a2 << 6) | (a3 << 9) | (a4 << 12)) #define METHOD_5ARGS(a1,a2,a3,a4,a5) (5 | (a1 << 3) | (a2 << 6) | (a3 << 9) | (a4 << 12) | (a5 << 15)) #define METHOD_RETURNS(type) (type) #define METHOD_NO_RETURN_VALUE 0 #define PACKAGE_INFO(a,b,c,d,e,f) {{{(a),(b),(c),(d)}, ((((UINT16)(f)) << 8) | (e)), 0}} /* Support macros for the resource descriptor info table */ #define WIDTH_1 0x0001 #define WIDTH_2 0x0002 #define WIDTH_3 0x0004 #define WIDTH_8 0x0008 #define WIDTH_16 0x0010 #define WIDTH_32 0x0020 #define WIDTH_64 0x0040 #define VARIABLE_DATA 0x0080 #define NUM_RESOURCE_WIDTHS 8 #define WIDTH_ADDRESS WIDTH_16 | WIDTH_32 | WIDTH_64 #ifdef ACPI_CREATE_PREDEFINED_TABLE /****************************************************************************** * * Predefined method/object information table. * * These are the names that can actually be evaluated via AcpiEvaluateObject. * Not present in this table are the following: * * 1) Predefined/Reserved names that are not usually evaluated via * AcpiEvaluateObject: * _Lxx and _Exx GPE methods * _Qxx EC methods * _T_x compiler temporary variables * _Wxx wake events * * 2) Predefined names that never actually exist within the AML code: * Predefined resource descriptor field names * * 3) Predefined names that are implemented within ACPICA: * _OSI * * The main entries in the table each contain the following items: * * Name - The ACPI reserved name * ArgumentList - Contains (in 16 bits), the number of required * arguments to the method (3 bits), and a 3-bit type * field for each argument (up to 4 arguments). The * METHOD_?ARGS macros generate the correct packed data. * ExpectedBtypes - Allowed type(s) for the return value. * 0 means that no return value is expected. * * For methods that return packages, the next entry in the table contains * information about the expected structure of the package. This information * is saved here (rather than in a separate table) in order to minimize the * overall size of the stored data. * * Note: The additional braces are intended to promote portability. * * Note2: Table is used by the kernel-resident subsystem, the iASL compiler, * and the AcpiHelp utility. * * TBD: _PRT - currently ignore reversed entries. Attempt to fix in nsrepair. * Possibly fixing package elements like _BIF, etc. * *****************************************************************************/ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] = { {{"_AC0", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_AC1", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_AC2", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_AC3", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_AC4", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_AC5", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_AC6", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_AC7", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_AC8", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_AC9", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_ADR", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_AEI", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_AL0", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_AL1", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_AL2", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_AL3", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_AL4", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_AL5", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_AL6", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_AL7", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_AL8", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_AL9", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_ALC", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_ALI", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_ALP", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_ALR", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each 2 (Ints) */ PACKAGE_INFO (ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 2,0,0,0), {{"_ALT", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_ART", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (1 Int(rev), n Pkg (2 Ref/11 Int) */ PACKAGE_INFO (ACPI_PTYPE2_REV_FIXED, ACPI_RTYPE_REFERENCE, 2, ACPI_RTYPE_INTEGER, 11,0), {{"_BBN", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_BCL", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0,0,0,0), {{"_BCM", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_BCT", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_BDN", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_BFS", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_BIF", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (9 Int),(4 Str) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 9, ACPI_RTYPE_STRING, 4,0), {{"_BIX", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (16 Int),(4 Str) */ PACKAGE_INFO (ACPI_PTYPE_CUSTOM, ACPI_RTYPE_INTEGER, 16, ACPI_RTYPE_STRING, 4,0), {{"_BLT", METHOD_3ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_BMA", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_BMC", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_BMD", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (5 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 5,0,0,0), {{"_BMS", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_BPC", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4,0,0,0), {{"_BPS", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (5 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 5,0,0,0), {{"_BPT", METHOD_1ARGS (ACPI_TYPE_PACKAGE), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_BQC", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_BST", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4,0,0,0), {{"_BTH", METHOD_1ARGS (ACPI_TYPE_INTEGER), /* ACPI 6.0 */ METHOD_NO_RETURN_VALUE}}, {{"_BTM", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_BTP", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_CBA", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* See PCI firmware spec 3.0 */ {{"_CBR", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (3 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3,0,0,0), {{"_CCA", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* ACPI 5.1 */ {{"_CDM", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_CID", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints/Strs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING, 0,0,0,0), {{"_CLS", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (3 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3,0,0,0), {{"_CPC", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints/Bufs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER, 0,0,0,0), {{"_CR3", METHOD_0ARGS, /* ACPI 6.0 */ METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_CRS", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_CRT", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_CSD", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (1 Int(n), n-1 Int) */ PACKAGE_INFO (ACPI_PTYPE2_COUNT, ACPI_RTYPE_INTEGER, 0,0,0,0), {{"_CST", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (1 Int(n), n Pkg (1 Buf/3 Int) */ PACKAGE_INFO (ACPI_PTYPE2_PKG_COUNT,ACPI_RTYPE_BUFFER, 1, ACPI_RTYPE_INTEGER, 3,0), {{"_CWS", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_DCK", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_DCS", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_DDC", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER)}}, {{"_DDN", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_STRING)}}, {{"_DEP", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_DGS", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_DIS", METHOD_0ARGS, METHOD_NO_RETURN_VALUE}}, {{"_DLM", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each (1 Ref, 0/1 Optional Buf/Ref) */ PACKAGE_INFO (ACPI_PTYPE2_FIX_VAR, ACPI_RTYPE_REFERENCE, 1, ACPI_RTYPE_REFERENCE | ACPI_RTYPE_BUFFER, 0,0), {{"_DMA", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_DOD", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0,0,0,0), {{"_DOS", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, { {"_DSC", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_DSD", METHOD_0ARGS, /* ACPI 6.0 */ METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each: 1 Buf, 1 Pkg */ PACKAGE_INFO (ACPI_PTYPE2_UUID_PAIR, ACPI_RTYPE_BUFFER, 1, ACPI_RTYPE_PACKAGE, 1,0), {{"_DSM", METHOD_4ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_PACKAGE), METHOD_RETURNS (ACPI_RTYPE_ALL)}}, /* Must return a value, but it can be of any type */ {{"_DSS", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_DSW", METHOD_3ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_DTI", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_EC_", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_EDL", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs)*/ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_EJ0", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_EJ1", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_EJ2", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_EJ3", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_EJ4", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_EJD", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_STRING)}}, {{"_ERR", METHOD_3ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_STRING, ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* Internal use only, used by ACPICA test suites */ {{"_EVT", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_FDE", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_FDI", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (16 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 16,0,0,0), {{"_FDM", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_FIF", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4,0,0,0), {{"_FIT", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, /* ACPI 6.0 */ {{"_FIX", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0,0,0,0), {{"_FPS", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (1 Int(rev), n Pkg (5 Int) */ PACKAGE_INFO (ACPI_PTYPE2_REV_FIXED,ACPI_RTYPE_INTEGER, 5, 0,0,0), {{"_FSL", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_FST", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (3 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3,0,0,0), {{"_GAI", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_GCP", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_GHL", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_GLK", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_GPD", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_GPE", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* _GPE method, not _GPE scope */ {{"_GRT", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_GSB", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_GTF", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_GTM", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_GTS", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_GWS", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_HID", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING)}}, {{"_HMA", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_HOT", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_HPP", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4,0,0,0), /* * For _HPX, a single package is returned, containing a variable-length number * of subpackages. Each subpackage contains a PCI record setting. * There are several different type of record settings, of different * lengths, but all elements of all settings are Integers. */ {{"_HPX", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each (var Ints) */ PACKAGE_INFO (ACPI_PTYPE2_MIN, ACPI_RTYPE_INTEGER, 5,0,0,0), {{"_HRV", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_IFT", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* See IPMI spec */ {{"_INI", METHOD_0ARGS, METHOD_NO_RETURN_VALUE}}, {{"_IRC", METHOD_0ARGS, METHOD_NO_RETURN_VALUE}}, {{"_LCK", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_LID", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_LPD", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (1 Int(rev), n Pkg (2 Int) */ PACKAGE_INFO (ACPI_PTYPE2_REV_FIXED, ACPI_RTYPE_INTEGER, 2,0,0,0), {{"_LPI", METHOD_0ARGS, /* ACPI 6.0 */ METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (3 Int, n Pkg (10 Int/Buf) */ PACKAGE_INFO (ACPI_PTYPE2_VAR_VAR, ACPI_RTYPE_INTEGER, 3, ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER | ACPI_RTYPE_STRING, 10,0), {{"_LSI", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3,0,0,0), {{"_LSR", METHOD_2ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 1, ACPI_RTYPE_BUFFER, 1,0), {{"_LSW", METHOD_3ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_BUFFER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_MAT", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_MBM", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (8 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 8,0,0,0), {{"_MLS", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each (1 Str/1 Buf) */ PACKAGE_INFO (ACPI_PTYPE2, ACPI_RTYPE_STRING, 1, ACPI_RTYPE_BUFFER, 1,0), {{"_MSG", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_MSM", METHOD_4ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_MTL", METHOD_0ARGS, /* ACPI 6.0 */ METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_NBS", METHOD_0ARGS, /* ACPI 6.3 */ METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_NCH", METHOD_0ARGS, /* ACPI 6.3 */ METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_NIC", METHOD_0ARGS, /* ACPI 6.3 */ METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_NIG", METHOD_0ARGS, /* ACPI 6.3 */ METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_NIH", METHOD_1ARGS (ACPI_TYPE_BUFFER), /* ACPI 6.3 */ METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_NTT", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_OFF", METHOD_0ARGS, METHOD_NO_RETURN_VALUE}}, {{"_ON_", METHOD_0ARGS, METHOD_NO_RETURN_VALUE}}, {{"_OS_", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_STRING)}}, {{"_OSC", METHOD_4ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_BUFFER), METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_OST", METHOD_3ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_BUFFER), METHOD_NO_RETURN_VALUE}}, {{"_PAI", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_PCL", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_PCT", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (2 Buf) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_BUFFER, 2,0,0,0), {{"_PDC", METHOD_1ARGS (ACPI_TYPE_BUFFER), METHOD_NO_RETURN_VALUE}}, {{"_PDL", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_PIC", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_PIF", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (3 Int),(3 Str) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3, ACPI_RTYPE_STRING, 3,0), {{"_PLD", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Bufs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_BUFFER, 0,0,0,0), {{"_PMC", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (11 Int),(3 Str) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 11, ACPI_RTYPE_STRING, 3,0), {{"_PMD", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_PMM", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_PPC", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_PPE", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* See dig64 spec */ {{"_PR0", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_PR1", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_PR2", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_PR3", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_PRE", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_PRL", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_PRR", METHOD_0ARGS, /* ACPI 6.0 */ METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Ref) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_REFERENCE, 1,0,0,0), {{"_PRS", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, /* * For _PRT, many BIOSs reverse the 3rd and 4th Package elements (Source * and SourceIndex). This bug is so prevalent that there is code in the * ACPICA Resource Manager to detect this and switch them back. For now, * do not allow and issue a warning. To allow this and eliminate the * warning, add the ACPI_RTYPE_REFERENCE type to the 4th element (index 3) * in the statement below. */ {{"_PRT", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each (4): Int,Int,Int/Ref,Int */ PACKAGE_INFO (ACPI_PTYPE2_FIXED, 4, ACPI_RTYPE_INTEGER, ACPI_RTYPE_INTEGER, ACPI_RTYPE_INTEGER | ACPI_RTYPE_REFERENCE, ACPI_RTYPE_INTEGER), {{"_PRW", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each: Pkg/Int,Int,[Variable-length Refs] (Pkg is Ref/Int) */ PACKAGE_INFO (ACPI_PTYPE1_OPTION, 2, ACPI_RTYPE_INTEGER | ACPI_RTYPE_PACKAGE, ACPI_RTYPE_INTEGER, ACPI_RTYPE_REFERENCE, 0), {{"_PS0", METHOD_0ARGS, METHOD_NO_RETURN_VALUE}}, {{"_PS1", METHOD_0ARGS, METHOD_NO_RETURN_VALUE}}, {{"_PS2", METHOD_0ARGS, METHOD_NO_RETURN_VALUE}}, {{"_PS3", METHOD_0ARGS, METHOD_NO_RETURN_VALUE}}, {{"_PSC", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_PSD", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each (5 Int) with count */ PACKAGE_INFO (ACPI_PTYPE2_COUNT, ACPI_RTYPE_INTEGER, 0,0,0,0), {{"_PSE", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_PSL", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_PSR", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_PSS", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each (6 Int) */ PACKAGE_INFO (ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 6,0,0,0), {{"_PSV", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_PSW", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_PTC", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (2 Buf) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_BUFFER, 2,0,0,0), {{"_PTP", METHOD_2ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_PTS", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_PUR", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (2 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 2,0,0,0), {{"_PXM", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_RDI", METHOD_0ARGS, /* ACPI 6.0 */ METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (1 Int, n Pkg (m Ref)) */ PACKAGE_INFO (ACPI_PTYPE2_VAR_VAR, ACPI_RTYPE_INTEGER, 1, ACPI_RTYPE_REFERENCE,0,0), {{"_REG", METHOD_2ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_REV", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_RMV", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_ROM", METHOD_2ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_RST", METHOD_0ARGS, /* ACPI 6.0 */ METHOD_NO_RETURN_VALUE}}, {{"_RTV", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* * For _S0_ through _S5_, the ACPI spec defines a return Package * containing 1 Integer, but most DSDTs have it wrong - 2,3, or 4 integers. * Allow this by making the objects "Variable-length length", but all elements * must be Integers. */ {{"_S0_", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Int) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1,0,0,0), {{"_S1_", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Int) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1,0,0,0), {{"_S2_", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Int) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1,0,0,0), {{"_S3_", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Int) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1,0,0,0), {{"_S4_", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Int) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1,0,0,0), {{"_S5_", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Int) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1,0,0,0), {{"_S1D", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_S2D", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_S3D", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_S4D", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_S0W", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_S1W", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_S2W", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_S3W", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_S4W", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_SBA", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4,0,0,0), {{"_SBI", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Int, 1 Buf) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 1, ACPI_RTYPE_BUFFER,1,0), {{"_SBR", METHOD_3ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (2 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 2, ACPI_RTYPE_BUFFER | ACPI_RTYPE_INTEGER, 1,0), {{"_SBS", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_SBT", METHOD_4ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_ANY), METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (2 Int, 1 Buf | Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 2, ACPI_RTYPE_BUFFER | ACPI_RTYPE_INTEGER, 1,0), {{"_SBW", METHOD_5ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_ANY), METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_BUFFER | ACPI_RTYPE_INTEGER, 1, 0,0,0), {{"_SCP", METHOD_1ARGS (ACPI_TYPE_INTEGER) | ARG_COUNT_IS_MINIMUM, METHOD_NO_RETURN_VALUE}}, /* Acpi 1.0 allowed 1 integer arg. Acpi 3.0 expanded to 3 args. Allow both. */ {{"_SDD", METHOD_1ARGS (ACPI_TYPE_BUFFER), METHOD_NO_RETURN_VALUE}}, {{"_SEG", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_SHL", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_SLI", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_SPD", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_SRS", METHOD_1ARGS (ACPI_TYPE_BUFFER), METHOD_NO_RETURN_VALUE}}, {{"_SRT", METHOD_1ARGS (ACPI_TYPE_BUFFER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_SRV", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* See IPMI spec */ {{"_SST", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_STA", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_STM", METHOD_3ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_BUFFER, ACPI_TYPE_BUFFER), METHOD_NO_RETURN_VALUE}}, {{"_STP", METHOD_2ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_STR", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_STV", METHOD_2ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_SUB", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_STRING)}}, {{"_SUN", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_SWS", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_TC1", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_TC2", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_TDL", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_TFP", METHOD_0ARGS, /* ACPI 6.0 */ METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_TIP", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_TIV", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_TMP", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_TPC", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_TPT", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_TRT", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each 2 Ref/6 Int */ PACKAGE_INFO (ACPI_PTYPE2, ACPI_RTYPE_REFERENCE, 2, ACPI_RTYPE_INTEGER, 6, 0), {{"_TSD", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each 5 Int with count */ PACKAGE_INFO (ACPI_PTYPE2_COUNT,ACPI_RTYPE_INTEGER, 5,0,0,0), {{"_TSN", METHOD_0ARGS, /* ACPI 6.0 */ METHOD_RETURNS (ACPI_RTYPE_REFERENCE)}}, {{"_TSP", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_TSS", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each 5 Int */ PACKAGE_INFO (ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 5,0,0,0), {{"_TST", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_TTS", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, {{"_TZD", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */ PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0), {{"_TZM", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_REFERENCE)}}, {{"_TZP", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_UID", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING)}}, {{"_UPC", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */ PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4,0,0,0), {{"_UPD", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_UPP", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, {{"_VPO", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* Acpi 1.0 defined _WAK with no return value. Later, it was changed to return a package */ {{"_WAK", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_NONE | ACPI_RTYPE_INTEGER | ACPI_RTYPE_PACKAGE)}}, PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 2,0,0,0), /* Fixed-length (2 Int), but is optional */ /* _WDG/_WED are MS extensions defined by "Windows Instrumentation" */ {{"_WDG", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_BUFFER)}}, {{"_WED", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_RETURNS (ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | ACPI_RTYPE_BUFFER)}}, {{"_WPC", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* ACPI 6.1 */ {{"_WPP", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* ACPI 6.1 */ PACKAGE_INFO (0,0,0,0,0,0) /* Table terminator */ }; #else extern const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[]; #endif #if (defined ACPI_CREATE_RESOURCE_TABLE && defined ACPI_APPLICATION) /****************************************************************************** * * Predefined names for use in Resource Descriptors. These names do not * appear in the global Predefined Name table (since these names never * appear in actual AML byte code, only in the original ASL) * * Note: Used by iASL compiler and AcpiHelp utility only. * *****************************************************************************/ const ACPI_PREDEFINED_INFO AcpiGbl_ResourceNames[] = { {{"_ADR", WIDTH_16 | WIDTH_64, 0}}, {{"_ALN", WIDTH_8 | WIDTH_16 | WIDTH_32, 0}}, {{"_ASI", WIDTH_8, 0}}, {{"_ASZ", WIDTH_8, 0}}, {{"_ATT", WIDTH_64, 0}}, {{"_BAS", WIDTH_16 | WIDTH_32, 0}}, {{"_BM_", WIDTH_1, 0}}, {{"_DBT", WIDTH_16, 0}}, /* Acpi 5.0 */ {{"_DEC", WIDTH_1, 0}}, {{"_DMA", WIDTH_8, 0}}, {{"_DPL", WIDTH_1, 0}}, /* Acpi 5.0 */ {{"_DRS", WIDTH_16, 0}}, /* Acpi 5.0 */ {{"_END", WIDTH_1, 0}}, /* Acpi 5.0 */ {{"_FLC", WIDTH_2, 0}}, /* Acpi 5.0 */ {{"_GRA", WIDTH_ADDRESS, 0}}, {{"_HE_", WIDTH_1, 0}}, {{"_INT", WIDTH_16 | WIDTH_32, 0}}, {{"_IOR", WIDTH_2, 0}}, /* Acpi 5.0 */ {{"_LEN", WIDTH_8 | WIDTH_ADDRESS, 0}}, {{"_LIN", WIDTH_8, 0}}, /* Acpi 5.0 */ {{"_LL_", WIDTH_1, 0}}, {{"_MAF", WIDTH_1, 0}}, {{"_MAX", WIDTH_ADDRESS, 0}}, {{"_MEM", WIDTH_2, 0}}, {{"_MIF", WIDTH_1, 0}}, {{"_MIN", WIDTH_ADDRESS, 0}}, {{"_MOD", WIDTH_1, 0}}, /* Acpi 5.0 */ {{"_MTP", WIDTH_2, 0}}, {{"_PAR", WIDTH_8, 0}}, /* Acpi 5.0 */ {{"_PHA", WIDTH_1, 0}}, /* Acpi 5.0 */ {{"_PIN", WIDTH_16, 0}}, /* Acpi 5.0 */ {{"_PPI", WIDTH_8, 0}}, /* Acpi 5.0 */ {{"_POL", WIDTH_1 | WIDTH_2, 0}}, /* Acpi 5.0 */ {{"_RBO", WIDTH_8, 0}}, {{"_RBW", WIDTH_8, 0}}, {{"_RNG", WIDTH_1, 0}}, {{"_RT_", WIDTH_8, 0}}, /* Acpi 3.0 */ {{"_RW_", WIDTH_1, 0}}, {{"_RXL", WIDTH_16, 0}}, /* Acpi 5.0 */ {{"_SHR", WIDTH_2, 0}}, {{"_SIZ", WIDTH_2, 0}}, {{"_SLV", WIDTH_1, 0}}, /* Acpi 5.0 */ {{"_SPE", WIDTH_32, 0}}, /* Acpi 5.0 */ {{"_STB", WIDTH_2, 0}}, /* Acpi 5.0 */ {{"_TRA", WIDTH_ADDRESS, 0}}, {{"_TRS", WIDTH_1, 0}}, {{"_TSF", WIDTH_8, 0}}, /* Acpi 3.0 */ {{"_TTP", WIDTH_1, 0}}, {{"_TXL", WIDTH_16, 0}}, /* Acpi 5.0 */ {{"_TYP", WIDTH_2 | WIDTH_16, 0}}, {{"_VEN", VARIABLE_DATA, 0}}, /* Acpi 5.0 */ PACKAGE_INFO (0,0,0,0,0,0) /* Table terminator */ }; const ACPI_PREDEFINED_INFO AcpiGbl_ScopeNames[] = { {{"_GPE", 0, 0}}, {{"_PR_", 0, 0}}, {{"_SB_", 0, 0}}, {{"_SI_", 0, 0}}, {{"_TZ_", 0, 0}}, PACKAGE_INFO (0,0,0,0,0,0) /* Table terminator */ }; #else extern const ACPI_PREDEFINED_INFO AcpiGbl_ResourceNames[]; #endif #endif src/acpica/source/include/acresrc.h000066400000000000000000000470371465205512700176250ustar00rootroot00000000000000/****************************************************************************** * * Name: acresrc.h - Resource Manager function prototypes * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACRESRC_H__ #define __ACRESRC_H__ /* Need the AML resource descriptor structs */ #include "amlresrc.h" /* * If possible, pack the following structures to byte alignment, since we * don't care about performance for debug output. Two cases where we cannot * pack the structures: * * 1) Hardware does not support misaligned memory transfers * 2) Compiler does not support pointers within packed structures */ #if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED)) #pragma pack(1) #endif /* * Individual entry for the resource conversion tables */ typedef const struct acpi_rsconvert_info { UINT8 Opcode; UINT8 ResourceOffset; UINT8 AmlOffset; UINT8 Value; } ACPI_RSCONVERT_INFO; /* Resource conversion opcodes */ typedef enum { ACPI_RSC_INITGET = 0, ACPI_RSC_INITSET, ACPI_RSC_FLAGINIT, ACPI_RSC_1BITFLAG, ACPI_RSC_2BITFLAG, ACPI_RSC_3BITFLAG, ACPI_RSC_6BITFLAG, ACPI_RSC_ADDRESS, ACPI_RSC_BITMASK, ACPI_RSC_BITMASK16, ACPI_RSC_COUNT, ACPI_RSC_COUNT16, ACPI_RSC_COUNT_GPIO_PIN, ACPI_RSC_COUNT_GPIO_RES, ACPI_RSC_COUNT_GPIO_VEN, ACPI_RSC_COUNT_SERIAL_RES, ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RSC_DATA8, ACPI_RSC_EXIT_EQ, ACPI_RSC_EXIT_LE, ACPI_RSC_EXIT_NE, ACPI_RSC_LENGTH, ACPI_RSC_MOVE_GPIO_PIN, ACPI_RSC_MOVE_GPIO_RES, ACPI_RSC_MOVE_SERIAL_RES, ACPI_RSC_MOVE_SERIAL_VEN, ACPI_RSC_MOVE8, ACPI_RSC_MOVE16, ACPI_RSC_MOVE32, ACPI_RSC_MOVE64, ACPI_RSC_SET8, ACPI_RSC_SOURCE, ACPI_RSC_SOURCEX } ACPI_RSCONVERT_OPCODES; /* Resource Conversion sub-opcodes */ #define ACPI_RSC_COMPARE_AML_LENGTH 0 #define ACPI_RSC_COMPARE_VALUE 1 #define ACPI_RSC_TABLE_SIZE(d) (sizeof (d) / sizeof (ACPI_RSCONVERT_INFO)) #define ACPI_RS_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_RESOURCE,f) #define AML_OFFSET(f) (UINT8) ACPI_OFFSET (AML_RESOURCE,f) /* * Individual entry for the resource dump tables */ typedef const struct acpi_rsdump_info { UINT8 Opcode; UINT8 Offset; const char *Name; const char **Pointer; } ACPI_RSDUMP_INFO; /* Values for the Opcode field above */ typedef enum { ACPI_RSD_TITLE = 0, ACPI_RSD_1BITFLAG, ACPI_RSD_2BITFLAG, ACPI_RSD_3BITFLAG, ACPI_RSD_6BITFLAG, ACPI_RSD_ADDRESS, ACPI_RSD_DWORDLIST, ACPI_RSD_LITERAL, ACPI_RSD_LONGLIST, ACPI_RSD_SHORTLIST, ACPI_RSD_SHORTLISTX, ACPI_RSD_SOURCE, ACPI_RSD_STRING, ACPI_RSD_UINT8, ACPI_RSD_UINT16, ACPI_RSD_UINT32, ACPI_RSD_UINT64, ACPI_RSD_WORDLIST, ACPI_RSD_LABEL, ACPI_RSD_SOURCE_LABEL, } ACPI_RSDUMP_OPCODES; /* restore default alignment */ #pragma pack() /* Resource tables indexed by internal resource type */ extern const UINT8 AcpiGbl_AmlResourceSizes[]; extern const UINT8 AcpiGbl_AmlResourceSerialBusSizes[]; extern ACPI_RSCONVERT_INFO *AcpiGbl_SetResourceDispatch[]; /* Resource tables indexed by raw AML resource descriptor type */ extern const UINT8 AcpiGbl_ResourceStructSizes[]; extern const UINT8 AcpiGbl_ResourceStructSerialBusSizes[]; extern ACPI_RSCONVERT_INFO *AcpiGbl_GetResourceDispatch[]; extern ACPI_RSCONVERT_INFO *AcpiGbl_ConvertResourceSerialBusDispatch[]; typedef struct acpi_vendor_walk_info { ACPI_VENDOR_UUID *Uuid; ACPI_BUFFER *Buffer; ACPI_STATUS Status; } ACPI_VENDOR_WALK_INFO; /* * rscreate */ ACPI_STATUS AcpiRsCreateResourceList ( ACPI_OPERAND_OBJECT *AmlBuffer, ACPI_BUFFER *OutputBuffer); ACPI_STATUS AcpiRsCreateAmlResources ( ACPI_BUFFER *ResourceList, ACPI_BUFFER *OutputBuffer); ACPI_STATUS AcpiRsCreatePciRoutingTable ( ACPI_OPERAND_OBJECT *PackageObject, ACPI_BUFFER *OutputBuffer); /* * rsutils */ ACPI_STATUS AcpiRsGetPrtMethodData ( ACPI_NAMESPACE_NODE *Node, ACPI_BUFFER *RetBuffer); ACPI_STATUS AcpiRsGetCrsMethodData ( ACPI_NAMESPACE_NODE *Node, ACPI_BUFFER *RetBuffer); ACPI_STATUS AcpiRsGetPrsMethodData ( ACPI_NAMESPACE_NODE *Node, ACPI_BUFFER *RetBuffer); ACPI_STATUS AcpiRsGetMethodData ( ACPI_HANDLE Handle, const char *Path, ACPI_BUFFER *RetBuffer); ACPI_STATUS AcpiRsSetSrsMethodData ( ACPI_NAMESPACE_NODE *Node, ACPI_BUFFER *RetBuffer); ACPI_STATUS AcpiRsGetAeiMethodData ( ACPI_NAMESPACE_NODE *Node, ACPI_BUFFER *RetBuffer); /* * rscalc */ ACPI_STATUS AcpiRsGetListLength ( UINT8 *AmlBuffer, UINT32 AmlBufferLength, ACPI_SIZE *SizeNeeded); ACPI_STATUS AcpiRsGetAmlLength ( ACPI_RESOURCE *ResourceList, ACPI_SIZE ResourceListSize, ACPI_SIZE *SizeNeeded); ACPI_STATUS AcpiRsGetPciRoutingTableLength ( ACPI_OPERAND_OBJECT *PackageObject, ACPI_SIZE *BufferSizeNeeded); ACPI_STATUS AcpiRsConvertAmlToResources ( UINT8 *Aml, UINT32 Length, UINT32 Offset, UINT8 ResourceIndex, void **Context); ACPI_STATUS AcpiRsConvertResourcesToAml ( ACPI_RESOURCE *Resource, ACPI_SIZE AmlSizeNeeded, UINT8 *OutputBuffer); /* * rsaddr */ void AcpiRsSetAddressCommon ( AML_RESOURCE *Aml, ACPI_RESOURCE *Resource); BOOLEAN AcpiRsGetAddressCommon ( ACPI_RESOURCE *Resource, AML_RESOURCE *Aml); /* * rsmisc */ ACPI_STATUS AcpiRsConvertAmlToResource ( ACPI_RESOURCE *Resource, AML_RESOURCE *Aml, ACPI_RSCONVERT_INFO *Info); ACPI_STATUS AcpiRsConvertResourceToAml ( ACPI_RESOURCE *Resource, AML_RESOURCE *Aml, ACPI_RSCONVERT_INFO *Info); /* * rsutils */ void AcpiRsMoveData ( void *Destination, void *Source, UINT16 ItemCount, UINT8 MoveType); UINT8 AcpiRsDecodeBitmask ( UINT16 Mask, UINT8 *List); UINT16 AcpiRsEncodeBitmask ( UINT8 *List, UINT8 Count); ACPI_RS_LENGTH AcpiRsGetResourceSource ( ACPI_RS_LENGTH ResourceLength, ACPI_RS_LENGTH MinimumLength, ACPI_RESOURCE_SOURCE *ResourceSource, AML_RESOURCE *Aml, char *StringPtr); ACPI_RSDESC_SIZE AcpiRsSetResourceSource ( AML_RESOURCE *Aml, ACPI_RS_LENGTH MinimumLength, ACPI_RESOURCE_SOURCE *ResourceSource); void AcpiRsSetResourceHeader ( UINT8 DescriptorType, ACPI_RSDESC_SIZE TotalLength, AML_RESOURCE *Aml); void AcpiRsSetResourceLength ( ACPI_RSDESC_SIZE TotalLength, AML_RESOURCE *Aml); /* * rsdump - Debugger support */ #ifdef ACPI_DEBUGGER void AcpiRsDumpResourceList ( ACPI_RESOURCE *Resource); void AcpiRsDumpIrqList ( UINT8 *RouteTable); #endif /* * Resource conversion tables */ extern ACPI_RSCONVERT_INFO AcpiRsConvertDma[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertEndDpf[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertIo[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertFixedIo[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertEndTag[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertMemory24[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertGenericReg[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertMemory32[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertFixedMemory32[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertAddress32[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertAddress16[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertExtIrq[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertAddress64[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertExtAddress64[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertGpio[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertFixedDma[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertCsi2SerialBus[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertI2cSerialBus[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertSpiSerialBus[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertUartSerialBus[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertPinFunction[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertPinConfig[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertPinGroup[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupFunction[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupConfig[]; extern ACPI_RSCONVERT_INFO AcpiRsConvertClockInput[]; /* These resources require separate get/set tables */ extern ACPI_RSCONVERT_INFO AcpiRsGetIrq[]; extern ACPI_RSCONVERT_INFO AcpiRsGetStartDpf[]; extern ACPI_RSCONVERT_INFO AcpiRsGetVendorSmall[]; extern ACPI_RSCONVERT_INFO AcpiRsGetVendorLarge[]; extern ACPI_RSCONVERT_INFO AcpiRsSetIrq[]; extern ACPI_RSCONVERT_INFO AcpiRsSetStartDpf[]; extern ACPI_RSCONVERT_INFO AcpiRsSetVendor[]; #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) /* * rsinfo */ extern ACPI_RSDUMP_INFO *AcpiGbl_DumpResourceDispatch[]; extern ACPI_RSDUMP_INFO *AcpiGbl_DumpSerialBusDispatch[]; /* * rsdumpinfo */ extern ACPI_RSDUMP_INFO AcpiRsDumpIrq[]; extern ACPI_RSDUMP_INFO AcpiRsDumpPrt[]; extern ACPI_RSDUMP_INFO AcpiRsDumpDma[]; extern ACPI_RSDUMP_INFO AcpiRsDumpStartDpf[]; extern ACPI_RSDUMP_INFO AcpiRsDumpEndDpf[]; extern ACPI_RSDUMP_INFO AcpiRsDumpIo[]; extern ACPI_RSDUMP_INFO AcpiRsDumpIoFlags[]; extern ACPI_RSDUMP_INFO AcpiRsDumpFixedIo[]; extern ACPI_RSDUMP_INFO AcpiRsDumpVendor[]; extern ACPI_RSDUMP_INFO AcpiRsDumpEndTag[]; extern ACPI_RSDUMP_INFO AcpiRsDumpMemory24[]; extern ACPI_RSDUMP_INFO AcpiRsDumpMemory32[]; extern ACPI_RSDUMP_INFO AcpiRsDumpMemoryFlags[]; extern ACPI_RSDUMP_INFO AcpiRsDumpFixedMemory32[]; extern ACPI_RSDUMP_INFO AcpiRsDumpAddress16[]; extern ACPI_RSDUMP_INFO AcpiRsDumpAddress32[]; extern ACPI_RSDUMP_INFO AcpiRsDumpAddress64[]; extern ACPI_RSDUMP_INFO AcpiRsDumpExtAddress64[]; extern ACPI_RSDUMP_INFO AcpiRsDumpExtIrq[]; extern ACPI_RSDUMP_INFO AcpiRsDumpGenericReg[]; extern ACPI_RSDUMP_INFO AcpiRsDumpGpio[]; extern ACPI_RSDUMP_INFO AcpiRsDumpPinFunction[]; extern ACPI_RSDUMP_INFO AcpiRsDumpFixedDma[]; extern ACPI_RSDUMP_INFO AcpiRsDumpCommonSerialBus[]; extern ACPI_RSDUMP_INFO AcpiRsDumpCsi2SerialBus[]; extern ACPI_RSDUMP_INFO AcpiRsDumpI2cSerialBus[]; extern ACPI_RSDUMP_INFO AcpiRsDumpSpiSerialBus[]; extern ACPI_RSDUMP_INFO AcpiRsDumpUartSerialBus[]; extern ACPI_RSDUMP_INFO AcpiRsDumpGeneralFlags[]; extern ACPI_RSDUMP_INFO AcpiRsDumpPinConfig[]; extern ACPI_RSDUMP_INFO AcpiRsDumpPinGroup[]; extern ACPI_RSDUMP_INFO AcpiRsDumpPinGroupFunction[]; extern ACPI_RSDUMP_INFO AcpiRsDumpPinGroupConfig[]; extern ACPI_RSDUMP_INFO AcpiRsDumpClockInput[]; #endif #endif /* __ACRESRC_H__ */ src/acpica/source/include/acrestyp.h000066400000000000000000001054141465205512700200270ustar00rootroot00000000000000/****************************************************************************** * * Name: acrestyp.h - Defines, types, and structures for resource descriptors * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACRESTYP_H__ #define __ACRESTYP_H__ /* * Definitions for Resource Attributes */ typedef UINT16 ACPI_RS_LENGTH; /* Resource Length field is fixed at 16 bits */ typedef UINT32 ACPI_RSDESC_SIZE; /* Max Resource Descriptor size is (Length+3) = (64K-1)+3 */ /* * Memory Attributes */ #define ACPI_READ_ONLY_MEMORY (UINT8) 0x00 #define ACPI_READ_WRITE_MEMORY (UINT8) 0x01 #define ACPI_NON_CACHEABLE_MEMORY (UINT8) 0x00 #define ACPI_CACHABLE_MEMORY (UINT8) 0x01 #define ACPI_WRITE_COMBINING_MEMORY (UINT8) 0x02 #define ACPI_PREFETCHABLE_MEMORY (UINT8) 0x03 /*! [Begin] no source code translation */ /* * IO Attributes * The ISA IO ranges are: n000-n0FFh, n400-n4FFh, n800-n8FFh, nC00-nCFFh. * The non-ISA IO ranges are: n100-n3FFh, n500-n7FFh, n900-nBFFh, nCD0-nFFFh. */ /*! [End] no source code translation !*/ #define ACPI_NON_ISA_ONLY_RANGES (UINT8) 0x01 #define ACPI_ISA_ONLY_RANGES (UINT8) 0x02 #define ACPI_ENTIRE_RANGE (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES) /* Type of translation - 1=Sparse, 0=Dense */ #define ACPI_SPARSE_TRANSLATION (UINT8) 0x01 /* * IO Port Descriptor Decode */ #define ACPI_DECODE_10 (UINT8) 0x00 /* 10-bit IO address decode */ #define ACPI_DECODE_16 (UINT8) 0x01 /* 16-bit IO address decode */ /* * Interrupt attributes - used in multiple descriptors */ /* Triggering */ #define ACPI_LEVEL_SENSITIVE (UINT8) 0x00 #define ACPI_EDGE_SENSITIVE (UINT8) 0x01 /* Polarity */ #define ACPI_ACTIVE_HIGH (UINT8) 0x00 #define ACPI_ACTIVE_LOW (UINT8) 0x01 #define ACPI_ACTIVE_BOTH (UINT8) 0x02 /* Sharing */ #define ACPI_EXCLUSIVE (UINT8) 0x00 #define ACPI_SHARED (UINT8) 0x01 /* Wake */ #define ACPI_NOT_WAKE_CAPABLE (UINT8) 0x00 #define ACPI_WAKE_CAPABLE (UINT8) 0x01 /* * DMA Attributes */ #define ACPI_COMPATIBILITY (UINT8) 0x00 #define ACPI_TYPE_A (UINT8) 0x01 #define ACPI_TYPE_B (UINT8) 0x02 #define ACPI_TYPE_F (UINT8) 0x03 #define ACPI_NOT_BUS_MASTER (UINT8) 0x00 #define ACPI_BUS_MASTER (UINT8) 0x01 #define ACPI_TRANSFER_8 (UINT8) 0x00 #define ACPI_TRANSFER_8_16 (UINT8) 0x01 #define ACPI_TRANSFER_16 (UINT8) 0x02 /* * Start Dependent Functions Priority definitions */ #define ACPI_GOOD_CONFIGURATION (UINT8) 0x00 #define ACPI_ACCEPTABLE_CONFIGURATION (UINT8) 0x01 #define ACPI_SUB_OPTIMAL_CONFIGURATION (UINT8) 0x02 /* * 16, 32 and 64-bit Address Descriptor resource types */ #define ACPI_MEMORY_RANGE (UINT8) 0x00 #define ACPI_IO_RANGE (UINT8) 0x01 #define ACPI_BUS_NUMBER_RANGE (UINT8) 0x02 #define ACPI_ADDRESS_NOT_FIXED (UINT8) 0x00 #define ACPI_ADDRESS_FIXED (UINT8) 0x01 #define ACPI_POS_DECODE (UINT8) 0x00 #define ACPI_SUB_DECODE (UINT8) 0x01 /* Producer/Consumer */ #define ACPI_PRODUCER (UINT8) 0x00 #define ACPI_CONSUMER (UINT8) 0x01 /* * If possible, pack the following structures to byte alignment */ #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED #pragma pack(1) #endif /* UUID data structures for use in vendor-defined resource descriptors */ typedef struct acpi_uuid { UINT8 Data[ACPI_UUID_LENGTH]; } ACPI_UUID; typedef struct acpi_vendor_uuid { UINT8 Subtype; UINT8 Data[ACPI_UUID_LENGTH]; } ACPI_VENDOR_UUID; /* * Structures used to describe device resources */ typedef struct acpi_resource_irq { UINT8 DescriptorLength; UINT8 Triggering; UINT8 Polarity; UINT8 Shareable; UINT8 WakeCapable; UINT8 InterruptCount; union { UINT8 Interrupt; ACPI_FLEX_ARRAY(UINT8, Interrupts); }; } ACPI_RESOURCE_IRQ; typedef struct acpi_resource_dma { UINT8 Type; UINT8 BusMaster; UINT8 Transfer; UINT8 ChannelCount; union { UINT8 Channel; ACPI_FLEX_ARRAY(UINT8, Channels); }; } ACPI_RESOURCE_DMA; typedef struct acpi_resource_start_dependent { UINT8 DescriptorLength; UINT8 CompatibilityPriority; UINT8 PerformanceRobustness; } ACPI_RESOURCE_START_DEPENDENT; /* * The END_DEPENDENT_FUNCTIONS_RESOURCE struct is not * needed because it has no fields */ typedef struct acpi_resource_io { UINT8 IoDecode; UINT8 Alignment; UINT8 AddressLength; UINT16 Minimum; UINT16 Maximum; } ACPI_RESOURCE_IO; typedef struct acpi_resource_fixed_io { UINT16 Address; UINT8 AddressLength; } ACPI_RESOURCE_FIXED_IO; typedef struct acpi_resource_fixed_dma { UINT16 RequestLines; UINT16 Channels; UINT8 Width; } ACPI_RESOURCE_FIXED_DMA; /* Values for Width field above */ #define ACPI_DMA_WIDTH8 0 #define ACPI_DMA_WIDTH16 1 #define ACPI_DMA_WIDTH32 2 #define ACPI_DMA_WIDTH64 3 #define ACPI_DMA_WIDTH128 4 #define ACPI_DMA_WIDTH256 5 typedef struct acpi_resource_vendor { UINT16 ByteLength; UINT8 ByteData[]; } ACPI_RESOURCE_VENDOR; /* Vendor resource with UUID info (introduced in ACPI 3.0) */ typedef struct acpi_resource_vendor_typed { UINT16 ByteLength; UINT8 UuidSubtype; UINT8 Uuid[ACPI_UUID_LENGTH]; UINT8 ByteData[]; } ACPI_RESOURCE_VENDOR_TYPED; typedef struct acpi_resource_end_tag { UINT8 Checksum; } ACPI_RESOURCE_END_TAG; typedef struct acpi_resource_memory24 { UINT8 WriteProtect; UINT16 Minimum; UINT16 Maximum; UINT16 Alignment; UINT16 AddressLength; } ACPI_RESOURCE_MEMORY24; typedef struct acpi_resource_memory32 { UINT8 WriteProtect; UINT32 Minimum; UINT32 Maximum; UINT32 Alignment; UINT32 AddressLength; } ACPI_RESOURCE_MEMORY32; typedef struct acpi_resource_fixed_memory32 { UINT8 WriteProtect; UINT32 Address; UINT32 AddressLength; } ACPI_RESOURCE_FIXED_MEMORY32; typedef struct acpi_memory_attribute { UINT8 WriteProtect; UINT8 Caching; UINT8 RangeType; UINT8 Translation; } ACPI_MEMORY_ATTRIBUTE; typedef struct acpi_io_attribute { UINT8 RangeType; UINT8 Translation; UINT8 TranslationType; UINT8 Reserved1; } ACPI_IO_ATTRIBUTE; typedef union acpi_resource_attribute { ACPI_MEMORY_ATTRIBUTE Mem; ACPI_IO_ATTRIBUTE Io; /* Used for the *WordSpace macros */ UINT8 TypeSpecific; } ACPI_RESOURCE_ATTRIBUTE; typedef struct acpi_resource_label { UINT16 StringLength; char *StringPtr; } ACPI_RESOURCE_LABEL; typedef struct acpi_resource_source { UINT8 Index; UINT16 StringLength; char *StringPtr; } ACPI_RESOURCE_SOURCE; /* Fields common to all address descriptors, 16/32/64 bit */ #define ACPI_RESOURCE_ADDRESS_COMMON \ UINT8 ResourceType; \ UINT8 ProducerConsumer; \ UINT8 Decode; \ UINT8 MinAddressFixed; \ UINT8 MaxAddressFixed; \ ACPI_RESOURCE_ATTRIBUTE Info; typedef struct acpi_address16_attribute { UINT16 Granularity; UINT16 Minimum; UINT16 Maximum; UINT16 TranslationOffset; UINT16 AddressLength; } ACPI_ADDRESS16_ATTRIBUTE; typedef struct acpi_address32_attribute { UINT32 Granularity; UINT32 Minimum; UINT32 Maximum; UINT32 TranslationOffset; UINT32 AddressLength; } ACPI_ADDRESS32_ATTRIBUTE; typedef struct acpi_address64_attribute { UINT64 Granularity; UINT64 Minimum; UINT64 Maximum; UINT64 TranslationOffset; UINT64 AddressLength; } ACPI_ADDRESS64_ATTRIBUTE; typedef struct acpi_resource_address { ACPI_RESOURCE_ADDRESS_COMMON } ACPI_RESOURCE_ADDRESS; typedef struct acpi_resource_address16 { ACPI_RESOURCE_ADDRESS_COMMON ACPI_ADDRESS16_ATTRIBUTE Address; ACPI_RESOURCE_SOURCE ResourceSource; } ACPI_RESOURCE_ADDRESS16; typedef struct acpi_resource_address32 { ACPI_RESOURCE_ADDRESS_COMMON ACPI_ADDRESS32_ATTRIBUTE Address; ACPI_RESOURCE_SOURCE ResourceSource; } ACPI_RESOURCE_ADDRESS32; typedef struct acpi_resource_address64 { ACPI_RESOURCE_ADDRESS_COMMON ACPI_ADDRESS64_ATTRIBUTE Address; ACPI_RESOURCE_SOURCE ResourceSource; } ACPI_RESOURCE_ADDRESS64; typedef struct acpi_resource_extended_address64 { ACPI_RESOURCE_ADDRESS_COMMON UINT8 RevisionID; ACPI_ADDRESS64_ATTRIBUTE Address; UINT64 TypeSpecific; } ACPI_RESOURCE_EXTENDED_ADDRESS64; typedef struct acpi_resource_extended_irq { UINT8 ProducerConsumer; UINT8 Triggering; UINT8 Polarity; UINT8 Shareable; UINT8 WakeCapable; UINT8 InterruptCount; ACPI_RESOURCE_SOURCE ResourceSource; union { UINT32 Interrupt; ACPI_FLEX_ARRAY(UINT32, Interrupts); }; } ACPI_RESOURCE_EXTENDED_IRQ; typedef struct acpi_resource_generic_register { UINT8 SpaceId; UINT8 BitWidth; UINT8 BitOffset; UINT8 AccessSize; UINT64 Address; } ACPI_RESOURCE_GENERIC_REGISTER; typedef struct acpi_resource_gpio { UINT8 RevisionId; UINT8 ConnectionType; UINT8 ProducerConsumer; /* For values, see Producer/Consumer above */ UINT8 PinConfig; UINT8 Shareable; /* For values, see Interrupt Attributes above */ UINT8 WakeCapable; /* For values, see Interrupt Attributes above */ UINT8 IoRestriction; UINT8 Triggering; /* For values, see Interrupt Attributes above */ UINT8 Polarity; /* For values, see Interrupt Attributes above */ UINT16 DriveStrength; UINT16 DebounceTimeout; UINT16 PinTableLength; UINT16 VendorLength; ACPI_RESOURCE_SOURCE ResourceSource; UINT16 *PinTable; UINT8 *VendorData; } ACPI_RESOURCE_GPIO; /* Values for GPIO ConnectionType field above */ #define ACPI_RESOURCE_GPIO_TYPE_INT 0 #define ACPI_RESOURCE_GPIO_TYPE_IO 1 /* Values for PinConfig field above */ #define ACPI_PIN_CONFIG_DEFAULT 0 #define ACPI_PIN_CONFIG_PULLUP 1 #define ACPI_PIN_CONFIG_PULLDOWN 2 #define ACPI_PIN_CONFIG_NOPULL 3 /* Values for IoRestriction field above */ #define ACPI_IO_RESTRICT_NONE 0 #define ACPI_IO_RESTRICT_INPUT 1 #define ACPI_IO_RESTRICT_OUTPUT 2 #define ACPI_IO_RESTRICT_NONE_PRESERVE 3 /* Common structure for I2C, SPI, UART, CSI2 serial descriptors */ #define ACPI_RESOURCE_SERIAL_COMMON \ UINT8 RevisionId; \ UINT8 Type; \ UINT8 ProducerConsumer; /* For values, see Producer/Consumer above */\ UINT8 SlaveMode; \ UINT8 ConnectionSharing; \ UINT8 TypeRevisionId; \ UINT16 TypeDataLength; \ UINT16 VendorLength; \ ACPI_RESOURCE_SOURCE ResourceSource; \ UINT8 *VendorData; typedef struct acpi_resource_common_serialbus { ACPI_RESOURCE_SERIAL_COMMON } ACPI_RESOURCE_COMMON_SERIALBUS; /* Values for the Type field above */ #define ACPI_RESOURCE_SERIAL_TYPE_I2C 1 #define ACPI_RESOURCE_SERIAL_TYPE_SPI 2 #define ACPI_RESOURCE_SERIAL_TYPE_UART 3 #define ACPI_RESOURCE_SERIAL_TYPE_CSI2 4 /* Values for SlaveMode field above */ #define ACPI_CONTROLLER_INITIATED 0 #define ACPI_DEVICE_INITIATED 1 typedef struct acpi_resource_i2c_serialbus { ACPI_RESOURCE_SERIAL_COMMON UINT8 AccessMode; UINT16 SlaveAddress; UINT32 ConnectionSpeed; } ACPI_RESOURCE_I2C_SERIALBUS; /* Values for AccessMode field above */ #define ACPI_I2C_7BIT_MODE 0 #define ACPI_I2C_10BIT_MODE 1 typedef struct acpi_resource_spi_serialbus { ACPI_RESOURCE_SERIAL_COMMON UINT8 WireMode; UINT8 DevicePolarity; UINT8 DataBitLength; UINT8 ClockPhase; UINT8 ClockPolarity; UINT16 DeviceSelection; UINT32 ConnectionSpeed; } ACPI_RESOURCE_SPI_SERIALBUS; /* Values for WireMode field above */ #define ACPI_SPI_4WIRE_MODE 0 #define ACPI_SPI_3WIRE_MODE 1 /* Values for DevicePolarity field above */ #define ACPI_SPI_ACTIVE_LOW 0 #define ACPI_SPI_ACTIVE_HIGH 1 /* Values for ClockPhase field above */ #define ACPI_SPI_FIRST_PHASE 0 #define ACPI_SPI_SECOND_PHASE 1 /* Values for ClockPolarity field above */ #define ACPI_SPI_START_LOW 0 #define ACPI_SPI_START_HIGH 1 typedef struct acpi_resource_uart_serialbus { ACPI_RESOURCE_SERIAL_COMMON UINT8 Endian; UINT8 DataBits; UINT8 StopBits; UINT8 FlowControl; UINT8 Parity; UINT8 LinesEnabled; UINT16 RxFifoSize; UINT16 TxFifoSize; UINT32 DefaultBaudRate; } ACPI_RESOURCE_UART_SERIALBUS; /* Values for Endian field above */ #define ACPI_UART_LITTLE_ENDIAN 0 #define ACPI_UART_BIG_ENDIAN 1 /* Values for DataBits field above */ #define ACPI_UART_5_DATA_BITS 0 #define ACPI_UART_6_DATA_BITS 1 #define ACPI_UART_7_DATA_BITS 2 #define ACPI_UART_8_DATA_BITS 3 #define ACPI_UART_9_DATA_BITS 4 /* Values for StopBits field above */ #define ACPI_UART_NO_STOP_BITS 0 #define ACPI_UART_1_STOP_BIT 1 #define ACPI_UART_1P5_STOP_BITS 2 #define ACPI_UART_2_STOP_BITS 3 /* Values for FlowControl field above */ #define ACPI_UART_FLOW_CONTROL_NONE 0 #define ACPI_UART_FLOW_CONTROL_HW 1 #define ACPI_UART_FLOW_CONTROL_XON_XOFF 2 /* Values for Parity field above */ #define ACPI_UART_PARITY_NONE 0 #define ACPI_UART_PARITY_EVEN 1 #define ACPI_UART_PARITY_ODD 2 #define ACPI_UART_PARITY_MARK 3 #define ACPI_UART_PARITY_SPACE 4 /* Values for LinesEnabled bitfield above */ #define ACPI_UART_CARRIER_DETECT (1<<2) #define ACPI_UART_RING_INDICATOR (1<<3) #define ACPI_UART_DATA_SET_READY (1<<4) #define ACPI_UART_DATA_TERMINAL_READY (1<<5) #define ACPI_UART_CLEAR_TO_SEND (1<<6) #define ACPI_UART_REQUEST_TO_SEND (1<<7) typedef struct acpi_resource_csi2_serialbus { ACPI_RESOURCE_SERIAL_COMMON UINT8 LocalPortInstance; UINT8 PhyType; } ACPI_RESOURCE_CSI2_SERIALBUS; typedef struct acpi_resource_pin_function { UINT8 RevisionId; UINT8 PinConfig; UINT8 Shareable; /* For values, see Interrupt Attributes above */ UINT16 FunctionNumber; UINT16 PinTableLength; UINT16 VendorLength; ACPI_RESOURCE_SOURCE ResourceSource; UINT16 *PinTable; UINT8 *VendorData; } ACPI_RESOURCE_PIN_FUNCTION; typedef struct acpi_resource_pin_config { UINT8 RevisionId; UINT8 ProducerConsumer; /* For values, see Producer/Consumer above */ UINT8 Shareable; /* For values, see Interrupt Attributes above */ UINT8 PinConfigType; UINT32 PinConfigValue; UINT16 PinTableLength; UINT16 VendorLength; ACPI_RESOURCE_SOURCE ResourceSource; UINT16 *PinTable; UINT8 *VendorData; } ACPI_RESOURCE_PIN_CONFIG; typedef struct acpi_resource_clock_input { UINT8 RevisionId; UINT8 Mode; UINT8 Scale; UINT16 FrequencyDivisor; UINT32 FrequencyNumerator; ACPI_RESOURCE_SOURCE ResourceSource; } ACPI_RESOURCE_CLOCK_INPUT; /* Values for PinConfigType field above */ #define ACPI_PIN_CONFIG_DEFAULT 0 #define ACPI_PIN_CONFIG_BIAS_PULL_UP 1 #define ACPI_PIN_CONFIG_BIAS_PULL_DOWN 2 #define ACPI_PIN_CONFIG_BIAS_DEFAULT 3 #define ACPI_PIN_CONFIG_BIAS_DISABLE 4 #define ACPI_PIN_CONFIG_BIAS_HIGH_IMPEDANCE 5 #define ACPI_PIN_CONFIG_BIAS_BUS_HOLD 6 #define ACPI_PIN_CONFIG_DRIVE_OPEN_DRAIN 7 #define ACPI_PIN_CONFIG_DRIVE_OPEN_SOURCE 8 #define ACPI_PIN_CONFIG_DRIVE_PUSH_PULL 9 #define ACPI_PIN_CONFIG_DRIVE_STRENGTH 10 #define ACPI_PIN_CONFIG_SLEW_RATE 11 #define ACPI_PIN_CONFIG_INPUT_DEBOUNCE 12 #define ACPI_PIN_CONFIG_INPUT_SCHMITT_TRIGGER 13 typedef struct acpi_resource_pin_group { UINT8 RevisionId; UINT8 ProducerConsumer; /* For values, see Producer/Consumer above */ UINT16 PinTableLength; UINT16 VendorLength; UINT16 *PinTable; ACPI_RESOURCE_LABEL ResourceLabel; UINT8 *VendorData; } ACPI_RESOURCE_PIN_GROUP; typedef struct acpi_resource_pin_group_function { UINT8 RevisionId; UINT8 ProducerConsumer; /* For values, see Producer/Consumer above */ UINT8 Shareable; /* For values, see Interrupt Attributes above */ UINT16 FunctionNumber; UINT16 VendorLength; ACPI_RESOURCE_SOURCE ResourceSource; ACPI_RESOURCE_LABEL ResourceSourceLabel; UINT8 *VendorData; } ACPI_RESOURCE_PIN_GROUP_FUNCTION; typedef struct acpi_resource_pin_group_config { UINT8 RevisionId; UINT8 ProducerConsumer; /* For values, see Producer/Consumer above */ UINT8 Shareable; /* For values, see Interrupt Attributes above */ UINT8 PinConfigType; /* For values, see PinConfigType above */ UINT32 PinConfigValue; UINT16 VendorLength; ACPI_RESOURCE_SOURCE ResourceSource; ACPI_RESOURCE_LABEL ResourceSourceLabel; UINT8 *VendorData; } ACPI_RESOURCE_PIN_GROUP_CONFIG; /* ACPI_RESOURCE_TYPEs */ #define ACPI_RESOURCE_TYPE_IRQ 0 #define ACPI_RESOURCE_TYPE_DMA 1 #define ACPI_RESOURCE_TYPE_START_DEPENDENT 2 #define ACPI_RESOURCE_TYPE_END_DEPENDENT 3 #define ACPI_RESOURCE_TYPE_IO 4 #define ACPI_RESOURCE_TYPE_FIXED_IO 5 #define ACPI_RESOURCE_TYPE_VENDOR 6 #define ACPI_RESOURCE_TYPE_END_TAG 7 #define ACPI_RESOURCE_TYPE_MEMORY24 8 #define ACPI_RESOURCE_TYPE_MEMORY32 9 #define ACPI_RESOURCE_TYPE_FIXED_MEMORY32 10 #define ACPI_RESOURCE_TYPE_ADDRESS16 11 #define ACPI_RESOURCE_TYPE_ADDRESS32 12 #define ACPI_RESOURCE_TYPE_ADDRESS64 13 #define ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 14 /* ACPI 3.0 */ #define ACPI_RESOURCE_TYPE_EXTENDED_IRQ 15 #define ACPI_RESOURCE_TYPE_GENERIC_REGISTER 16 #define ACPI_RESOURCE_TYPE_GPIO 17 /* ACPI 5.0 */ #define ACPI_RESOURCE_TYPE_FIXED_DMA 18 /* ACPI 5.0 */ #define ACPI_RESOURCE_TYPE_SERIAL_BUS 19 /* ACPI 5.0 */ #define ACPI_RESOURCE_TYPE_PIN_FUNCTION 20 /* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_PIN_CONFIG 21 /* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_PIN_GROUP 22 /* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION 23 /* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG 24 /* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_CLOCK_INPUT 25 /* ACPI 6.5 */ #define ACPI_RESOURCE_TYPE_MAX 25 /* Master union for resource descriptors */ typedef union acpi_resource_data { ACPI_RESOURCE_IRQ Irq; ACPI_RESOURCE_DMA Dma; ACPI_RESOURCE_START_DEPENDENT StartDpf; ACPI_RESOURCE_IO Io; ACPI_RESOURCE_FIXED_IO FixedIo; ACPI_RESOURCE_FIXED_DMA FixedDma; ACPI_RESOURCE_VENDOR Vendor; ACPI_RESOURCE_VENDOR_TYPED VendorTyped; ACPI_RESOURCE_END_TAG EndTag; ACPI_RESOURCE_MEMORY24 Memory24; ACPI_RESOURCE_MEMORY32 Memory32; ACPI_RESOURCE_FIXED_MEMORY32 FixedMemory32; ACPI_RESOURCE_ADDRESS16 Address16; ACPI_RESOURCE_ADDRESS32 Address32; ACPI_RESOURCE_ADDRESS64 Address64; ACPI_RESOURCE_EXTENDED_ADDRESS64 ExtAddress64; ACPI_RESOURCE_EXTENDED_IRQ ExtendedIrq; ACPI_RESOURCE_GENERIC_REGISTER GenericReg; ACPI_RESOURCE_GPIO Gpio; ACPI_RESOURCE_I2C_SERIALBUS I2cSerialBus; ACPI_RESOURCE_SPI_SERIALBUS SpiSerialBus; ACPI_RESOURCE_UART_SERIALBUS UartSerialBus; ACPI_RESOURCE_CSI2_SERIALBUS Csi2SerialBus; ACPI_RESOURCE_COMMON_SERIALBUS CommonSerialBus; ACPI_RESOURCE_PIN_FUNCTION PinFunction; ACPI_RESOURCE_PIN_CONFIG PinConfig; ACPI_RESOURCE_PIN_GROUP PinGroup; ACPI_RESOURCE_PIN_GROUP_FUNCTION PinGroupFunction; ACPI_RESOURCE_PIN_GROUP_CONFIG PinGroupConfig; ACPI_RESOURCE_CLOCK_INPUT ClockInput; /* Common fields */ ACPI_RESOURCE_ADDRESS Address; /* Common 16/32/64 address fields */ } ACPI_RESOURCE_DATA; /* Common resource header */ typedef struct acpi_resource { UINT32 Type; UINT32 Length; ACPI_RESOURCE_DATA Data; } ACPI_RESOURCE; /* restore default alignment */ #pragma pack() #define ACPI_RS_SIZE_NO_DATA 8 /* Id + Length fields */ #define ACPI_RS_SIZE_MIN (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (12) #define ACPI_RS_SIZE(Type) (UINT32) (ACPI_RS_SIZE_NO_DATA + sizeof (Type)) /* Macro for walking resource templates with multiple descriptors */ #define ACPI_NEXT_RESOURCE(Res) \ ACPI_ADD_PTR (ACPI_RESOURCE, (Res), (Res)->Length) typedef struct acpi_pci_routing_table { UINT32 Length; UINT32 Pin; UINT64 Address; /* here for 64-bit alignment */ UINT32 SourceIndex; union { char Pad[4]; /* pad to 64 bits so sizeof() works in all cases */ ACPI_FLEX_ARRAY(char, Source); }; } ACPI_PCI_ROUTING_TABLE; #endif /* __ACRESTYP_H__ */ src/acpica/source/include/acstruct.h000066400000000000000000000435061465205512700200300ustar00rootroot00000000000000/****************************************************************************** * * Name: acstruct.h - Internal structs * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACSTRUCT_H__ #define __ACSTRUCT_H__ /* acpisrc:StructDefs -- for acpisrc conversion */ /***************************************************************************** * * Tree walking typedefs and structs * ****************************************************************************/ /* * Walk state - current state of a parse tree walk. Used for both a leisurely * stroll through the tree (for whatever reason), and for control method * execution. */ #define ACPI_NEXT_OP_DOWNWARD 1 #define ACPI_NEXT_OP_UPWARD 2 /* * Groups of definitions for WalkType used for different implementations of * walkers (never simultaneously) - flags for interpreter: */ #define ACPI_WALK_NON_METHOD 0 #define ACPI_WALK_METHOD 0x01 #define ACPI_WALK_METHOD_RESTART 0x02 typedef struct acpi_walk_state { struct acpi_walk_state *Next; /* Next WalkState in list */ UINT8 DescriptorType; /* To differentiate various internal objs */ UINT8 WalkType; UINT16 Opcode; /* Current AML opcode */ UINT8 NextOpInfo; /* Info about NextOp */ UINT8 NumOperands; /* Stack pointer for Operands[] array */ UINT8 OperandIndex; /* Index into operand stack, to be used by AcpiDsObjStackPush */ ACPI_OWNER_ID OwnerId; /* Owner of objects created during the walk */ BOOLEAN LastPredicate; /* Result of last predicate */ UINT8 CurrentResult; UINT8 ReturnUsed; UINT8 ScopeDepth; UINT8 PassNumber; /* Parse pass during table load */ BOOLEAN NamespaceOverride; /* Override existing objects */ UINT8 ResultSize; /* Total elements for the result stack */ UINT8 ResultCount; /* Current number of occupied elements of result stack */ UINT8 *Aml; UINT32 ArgTypes; UINT32 MethodBreakpoint; /* For single stepping */ UINT32 UserBreakpoint; /* User AML breakpoint */ UINT32 ParseFlags; ACPI_PARSE_STATE ParserState; /* Current state of parser */ UINT32 PrevArgTypes; UINT32 ArgCount; /* push for fixed or var args */ UINT16 MethodNestingDepth; UINT8 MethodIsNested; struct acpi_namespace_node Arguments[ACPI_METHOD_NUM_ARGS]; /* Control method arguments */ struct acpi_namespace_node LocalVariables[ACPI_METHOD_NUM_LOCALS]; /* Control method locals */ union acpi_operand_object *Operands[ACPI_OBJ_NUM_OPERANDS + 1]; /* Operands passed to the interpreter (+1 for NULL terminator) */ union acpi_operand_object **Params; UINT8 *AmlLastWhile; union acpi_operand_object **CallerReturnDesc; ACPI_GENERIC_STATE *ControlState; /* List of control states (nested IFs) */ struct acpi_namespace_node *DeferredNode; /* Used when executing deferred opcodes */ union acpi_operand_object *ImplicitReturnObj; struct acpi_namespace_node *MethodCallNode; /* Called method Node*/ ACPI_PARSE_OBJECT *MethodCallOp; /* MethodCall Op if running a method */ union acpi_operand_object *MethodDesc; /* Method descriptor if running a method */ struct acpi_namespace_node *MethodNode; /* Method node if running a method */ char *MethodPathname; /* Full pathname of running method */ ACPI_PARSE_OBJECT *Op; /* Current parser op */ const ACPI_OPCODE_INFO *OpInfo; /* Info on current opcode */ ACPI_PARSE_OBJECT *Origin; /* Start of walk [Obsolete] */ union acpi_operand_object *ResultObj; ACPI_GENERIC_STATE *Results; /* Stack of accumulated results */ union acpi_operand_object *ReturnDesc; /* Return object, if any */ ACPI_GENERIC_STATE *ScopeInfo; /* Stack of nested scopes */ ACPI_PARSE_OBJECT *PrevOp; /* Last op that was processed */ ACPI_PARSE_OBJECT *NextOp; /* next op to be processed */ ACPI_THREAD_STATE *Thread; ACPI_PARSE_DOWNWARDS DescendingCallback; ACPI_PARSE_UPWARDS AscendingCallback; } ACPI_WALK_STATE; /* Info used by AcpiNsInitializeObjects and AcpiDsInitializeObjects */ typedef struct acpi_init_walk_info { UINT32 TableIndex; UINT32 ObjectCount; UINT32 MethodCount; UINT32 SerialMethodCount; UINT32 NonSerialMethodCount; UINT32 SerializedMethodCount; UINT32 DeviceCount; UINT32 OpRegionCount; UINT32 FieldCount; UINT32 BufferCount; UINT32 PackageCount; UINT32 OpRegionInit; UINT32 FieldInit; UINT32 BufferInit; UINT32 PackageInit; ACPI_OWNER_ID OwnerId; } ACPI_INIT_WALK_INFO; typedef struct acpi_get_devices_info { ACPI_WALK_CALLBACK UserFunction; void *Context; char *Hid; } ACPI_GET_DEVICES_INFO; typedef union acpi_aml_operands { ACPI_OPERAND_OBJECT *Operands[7]; struct { ACPI_OBJECT_INTEGER *Type; ACPI_OBJECT_INTEGER *Code; ACPI_OBJECT_INTEGER *Argument; } Fatal; struct { ACPI_OPERAND_OBJECT *Source; ACPI_OBJECT_INTEGER *Index; ACPI_OPERAND_OBJECT *Target; } Index; struct { ACPI_OPERAND_OBJECT *Source; ACPI_OBJECT_INTEGER *Index; ACPI_OBJECT_INTEGER *Length; ACPI_OPERAND_OBJECT *Target; } Mid; } ACPI_AML_OPERANDS; /* * Structure used to pass object evaluation information and parameters. * Purpose is to reduce CPU stack use. */ typedef struct acpi_evaluate_info { /* The first 3 elements are passed by the caller to AcpiNsEvaluate */ ACPI_NAMESPACE_NODE *PrefixNode; /* Input: starting node */ const char *RelativePathname; /* Input: path relative to PrefixNode */ ACPI_OPERAND_OBJECT **Parameters; /* Input: argument list */ ACPI_NAMESPACE_NODE *Node; /* Resolved node (PrefixNode:RelativePathname) */ ACPI_OPERAND_OBJECT *ObjDesc; /* Object attached to the resolved node */ char *FullPathname; /* Full pathname of the resolved node */ const ACPI_PREDEFINED_INFO *Predefined; /* Used if Node is a predefined name */ ACPI_OPERAND_OBJECT *ReturnObject; /* Object returned from the evaluation */ union acpi_operand_object *ParentPackage; /* Used if return object is a Package */ UINT32 ReturnFlags; /* Used for return value analysis */ UINT32 ReturnBtype; /* Bitmapped type of the returned object */ UINT16 ParamCount; /* Count of the input argument list */ UINT16 NodeFlags; /* Same as Node->Flags */ UINT8 PassNumber; /* Parser pass number */ UINT8 ReturnObjectType; /* Object type of the returned object */ UINT8 Flags; /* General flags */ } ACPI_EVALUATE_INFO; /* Values for Flags above */ #define ACPI_IGNORE_RETURN_VALUE 1 /* Defines for ReturnFlags field above */ #define ACPI_OBJECT_REPAIRED 1 #define ACPI_OBJECT_WRAPPED 2 /* Info used by AcpiNsInitializeDevices */ typedef struct acpi_device_walk_info { ACPI_TABLE_DESC *TableDesc; ACPI_EVALUATE_INFO *EvaluateInfo; UINT32 DeviceCount; UINT32 Num_STA; UINT32 Num_INI; } ACPI_DEVICE_WALK_INFO; /* Info used by Acpi AcpiDbDisplayFields */ typedef struct acpi_region_walk_info { UINT32 DebugLevel; UINT32 Count; ACPI_OWNER_ID OwnerId; UINT8 DisplayType; UINT32 AddressSpaceId; } ACPI_REGION_WALK_INFO; /* TBD: [Restructure] Merge with struct above */ typedef struct acpi_walk_info { UINT32 DebugLevel; UINT32 Count; ACPI_OWNER_ID OwnerId; UINT8 DisplayType; } ACPI_WALK_INFO; /* Display Types */ #define ACPI_DISPLAY_SUMMARY (UINT8) 0 #define ACPI_DISPLAY_OBJECTS (UINT8) 1 #define ACPI_DISPLAY_MASK (UINT8) 1 #define ACPI_DISPLAY_SHORT (UINT8) 2 #endif src/acpica/source/include/actables.h000066400000000000000000000312321465205512700177470ustar00rootroot00000000000000/****************************************************************************** * * Name: actables.h - ACPI table management * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACTABLES_H__ #define __ACTABLES_H__ ACPI_STATUS AcpiAllocateRootTable ( UINT32 InitialTableCount); /* * tbxfroot - Root pointer utilities */ UINT32 AcpiTbGetRsdpLength ( ACPI_TABLE_RSDP *Rsdp); ACPI_STATUS AcpiTbValidateRsdp ( ACPI_TABLE_RSDP *Rsdp); UINT8 * AcpiTbScanMemoryForRsdp ( UINT8 *StartAddress, UINT32 Length); /* * tbdata - table data structure management */ ACPI_STATUS AcpiTbGetNextTableDescriptor ( UINT32 *TableIndex, ACPI_TABLE_DESC **TableDesc); void AcpiTbInitTableDescriptor ( ACPI_TABLE_DESC *TableDesc, ACPI_PHYSICAL_ADDRESS Address, UINT8 Flags, ACPI_TABLE_HEADER *Table); ACPI_STATUS AcpiTbAcquireTempTable ( ACPI_TABLE_DESC *TableDesc, ACPI_PHYSICAL_ADDRESS Address, UINT8 Flags, ACPI_TABLE_HEADER *Table); void AcpiTbReleaseTempTable ( ACPI_TABLE_DESC *TableDesc); ACPI_STATUS AcpiTbValidateTempTable ( ACPI_TABLE_DESC *TableDesc); ACPI_STATUS AcpiTbVerifyTempTable ( ACPI_TABLE_DESC *TableDesc, char *Signature, UINT32 *TableIndex); BOOLEAN AcpiTbIsTableLoaded ( UINT32 TableIndex); void AcpiTbSetTableLoadedFlag ( UINT32 TableIndex, BOOLEAN IsLoaded); /* * tbfadt - FADT parse/convert/validate */ void AcpiTbParseFadt ( void); void AcpiTbCreateLocalFadt ( ACPI_TABLE_HEADER *Table, UINT32 Length); /* * tbfind - find ACPI table */ ACPI_STATUS AcpiTbFindTable ( char *Signature, char *OemId, char *OemTableId, UINT32 *TableIndex); /* * tbinstal - Table removal and deletion */ ACPI_STATUS AcpiTbResizeRootTableList ( void); ACPI_STATUS AcpiTbValidateTable ( ACPI_TABLE_DESC *TableDesc); void AcpiTbInvalidateTable ( ACPI_TABLE_DESC *TableDesc); void AcpiTbOverrideTable ( ACPI_TABLE_DESC *OldTableDesc); ACPI_STATUS AcpiTbAcquireTable ( ACPI_TABLE_DESC *TableDesc, ACPI_TABLE_HEADER **TablePtr, UINT32 *TableLength, UINT8 *TableFlags); void AcpiTbReleaseTable ( ACPI_TABLE_HEADER *Table, UINT32 TableLength, UINT8 TableFlags); ACPI_STATUS AcpiTbInstallStandardTable ( ACPI_PHYSICAL_ADDRESS Address, UINT8 Flags, ACPI_TABLE_HEADER *Table, BOOLEAN Reload, BOOLEAN Override, UINT32 *TableIndex); void AcpiTbUninstallTable ( ACPI_TABLE_DESC *TableDesc); ACPI_STATUS AcpiTbLoadTable ( UINT32 TableIndex, ACPI_NAMESPACE_NODE *ParentNode); ACPI_STATUS AcpiTbInstallAndLoadTable ( ACPI_PHYSICAL_ADDRESS Address, UINT8 Flags, ACPI_TABLE_HEADER *Table, BOOLEAN Override, UINT32 *TableIndex); ACPI_STATUS AcpiTbUnloadTable ( UINT32 TableIndex); void AcpiTbNotifyTable ( UINT32 Event, void *Table); void AcpiTbTerminate ( void); ACPI_STATUS AcpiTbDeleteNamespaceByOwner ( UINT32 TableIndex); ACPI_STATUS AcpiTbAllocateOwnerId ( UINT32 TableIndex); ACPI_STATUS AcpiTbReleaseOwnerId ( UINT32 TableIndex); ACPI_STATUS AcpiTbGetOwnerId ( UINT32 TableIndex, ACPI_OWNER_ID *OwnerId); /* * tbutils - table manager utilities */ ACPI_STATUS AcpiTbInitializeFacs ( void); void AcpiTbPrintTableHeader( ACPI_PHYSICAL_ADDRESS Address, ACPI_TABLE_HEADER *Header); void AcpiTbCheckDsdtHeader ( void); ACPI_TABLE_HEADER * AcpiTbCopyDsdt ( UINT32 TableIndex); void AcpiTbInstallTableWithOverride ( ACPI_TABLE_DESC *NewTableDesc, BOOLEAN Override, UINT32 *TableIndex); ACPI_STATUS AcpiTbParseRootTable ( ACPI_PHYSICAL_ADDRESS RsdpAddress); ACPI_STATUS AcpiTbGetTable ( ACPI_TABLE_DESC *TableDesc, ACPI_TABLE_HEADER **OutTable); void AcpiTbPutTable ( ACPI_TABLE_DESC *TableDesc); /* * tbxfload */ ACPI_STATUS AcpiTbLoadNamespace ( void); #endif /* __ACTABLES_H__ */ src/acpica/source/include/actbinfo.h000066400000000000000000001130451465205512700177610ustar00rootroot00000000000000/****************************************************************************** * * Module Name: actbinfo - Table disassembly info for non-AML tables * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ /* * Macros used to generate offsets to specific table fields */ #define ACPI_AGDI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_AGDI,f) #define ACPI_ASPT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_ASPT,f) #define ACPI_FACS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_FACS,f) #define ACPI_GAS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GENERIC_ADDRESS,f) #define ACPI_HDR_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HEADER,f) #define ACPI_RSDP_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_RSDP,f) #define ACPI_BDAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_BDAT,f) #define ACPI_BERT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_BERT,f) #define ACPI_BGRT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_BGRT,f) #define ACPI_BOOT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_BOOT,f) #define ACPI_CCEL_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_CCEL,f) #define ACPI_CPEP_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_CPEP,f) #define ACPI_DBG2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DBG2,f) #define ACPI_DBGP_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DBGP,f) #define ACPI_DMAR_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DMAR,f) #define ACPI_DRTM_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DRTM,f) #define ACPI_ECDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_ECDT,f) #define ACPI_EINJ_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_EINJ,f) #define ACPI_ERST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_ERST,f) #define ACPI_GTDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_GTDT,f) #define ACPI_HEST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HEST,f) #define ACPI_HPET_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HPET,f) #define ACPI_HMAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HMAT,f) #define ACPI_IORT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_IORT,f) #define ACPI_IVRS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_IVRS,f) #define ACPI_MADT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MADT,f) #define ACPI_MCFG_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MCFG,f) #define ACPI_MCHI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MCHI,f) #define ACPI_MPST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MPST,f) #define ACPI_MSCT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MSCT,f) #define ACPI_NFIT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_NFIT,f) #define ACPI_PCCT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PCCT,f) #define ACPI_PDTT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PDTT,f) #define ACPI_PMTT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PMTT,f) #define ACPI_RASF_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_RASF,f) #define ACPI_RAS2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_RAS2,f) #define ACPI_RGRT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_RGRT,f) #define ACPI_RHCT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_RHCT,f) #define ACPI_S3PT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_S3PT,f) #define ACPI_SBST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SBST,f) #define ACPI_SDEI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SDEI,f) #define ACPI_SDEV_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SDEV,f) #define ACPI_SLIT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SLIT,f) #define ACPI_SPCR_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SPCR,f) #define ACPI_SPMI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SPMI,f) #define ACPI_SRAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SRAT,f) #define ACPI_STAO_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_STAO,f) #define ACPI_SVKL_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SVKL,f) #define ACPI_TCPA_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_HDR,f) #define ACPI_TDEL_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TDEL,f) #define ACPI_TPM2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM2,f) #define ACPI_TPM23_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM23,f) #define ACPI_UEFI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_UEFI,f) #define ACPI_VIOT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_VIOT,f) #define ACPI_WAET_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WAET,f) #define ACPI_WDAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDAT,f) #define ACPI_WDDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDDT,f) #define ACPI_WDRT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDRT,f) #define ACPI_WPBT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WPBT,f) #define ACPI_WPBT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WPBT_UNICODE,f) #define ACPI_WSMT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WSMT,f) #define ACPI_XENV_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_XENV,f) /* Subtables */ #define ACPI_AESTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_HEADER,f) #define ACPI_AEST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR,f) #define ACPI_AEST0A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_CACHE,f) #define ACPI_AEST0B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_TLB,f) #define ACPI_AEST0C_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_GENERIC,f) #define ACPI_AEST1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_MEMORY,f) #define ACPI_AEST2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_SMMU,f) #define ACPI_AEST3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_VENDOR,f) #define ACPI_AEST4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_GIC,f) #define ACPI_AEST0D_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE,f) #define ACPI_AEST0E_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERRUPT,f) #define ACPI_APMTN_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_APMT_NODE,f) #define ACPI_ASF0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_INFO,f) #define ACPI_ASF1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT,f) #define ACPI_ASF1a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT_DATA,f) #define ACPI_ASF2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_REMOTE,f) #define ACPI_ASF2a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_CONTROL_DATA,f) #define ACPI_ASF3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_RMCP,f) #define ACPI_ASF4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ADDRESS,f) #define ACPI_ASPTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASPT_HEADER,f) #define ACPI_ASPT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASPT_GLOBAL_REGS,f) #define ACPI_ASPT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASPT_SEV_MBOX_REGS,f) #define ACPI_ASPT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASPT_ACPI_MBOX_REGS,f) #define ACPI_CDAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_CDAT,f) #define ACPI_CDATH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CDAT_HEADER,f) #define ACPI_CDAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CDAT_DSMAS,f) #define ACPI_CDAT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CDAT_DSLBIS,f) #define ACPI_CDAT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CDAT_DSMSCIS,f) #define ACPI_CDAT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CDAT_DSIS,f) #define ACPI_CDAT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CDAT_DSEMTS,f) #define ACPI_CDAT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CDAT_SSLBIS,f) #define ACPI_CDATE_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CDAT_SSLBE,f) #define ACPI_CEDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CEDT_HEADER, f) #define ACPI_CEDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CEDT_CHBS, f) #define ACPI_CEDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CEDT_CFMWS, f) #define ACPI_CEDT1_TE_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CEDT_CFMWS_TARGET_ELEMENT, f) #define ACPI_CPEP0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CPEP_POLLING,f) #define ACPI_CSRT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_GROUP,f) #define ACPI_CSRT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_SHARED_INFO,f) #define ACPI_CSRT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_DESCRIPTOR,f) #define ACPI_DBG20_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DBG2_DEVICE,f) #define ACPI_DMARS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_DEVICE_SCOPE,f) #define ACPI_DMAR0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_HARDWARE_UNIT,f) #define ACPI_DMAR1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RESERVED_MEMORY,f) #define ACPI_DMAR2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_ATSR,f) #define ACPI_DMAR3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RHSA,f) #define ACPI_DMAR4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_ANDD,f) #define ACPI_DMAR5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_SATC,f) #define ACPI_DRTM0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST,f) #define ACPI_DRTM1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST,f) #define ACPI_DRTM1a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_RESOURCE,f) #define ACPI_DRTM2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_DPS_ID,f) #define ACPI_EINJ0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f) #define ACPI_ERST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f) #define ACPI_FPDTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f) #define ACPI_FPDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_BOOT_POINTER,f) #define ACPI_FPDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_S3PT_POINTER,f) #define ACPI_GTDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_BLOCK,f) #define ACPI_GTDT0a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_ENTRY,f) #define ACPI_GTDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_WATCHDOG,f) #define ACPI_GTDTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_HEADER,f) #define ACPI_GTDT_EL2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_EL2,f) #define ACPI_HEST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f) #define ACPI_HEST1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_CORRECTED,f) #define ACPI_HEST2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_NMI,f) #define ACPI_HEST6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_AER_ROOT,f) #define ACPI_HEST7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_AER,f) #define ACPI_HEST8_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_AER_BRIDGE,f) #define ACPI_HEST9_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_GENERIC,f) #define ACPI_HEST10_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_GENERIC_V2,f) #define ACPI_HEST11_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_DEFERRED_CHECK,f) #define ACPI_HESTN_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_NOTIFY,f) #define ACPI_HESTB_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_ERROR_BANK,f) #define ACPI_HMAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_PROXIMITY_DOMAIN,f) #define ACPI_HMAT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_LOCALITY,f) #define ACPI_HMAT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_CACHE,f) #define ACPI_HMATH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_STRUCTURE,f) #define ACPI_IORT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ITS_GROUP,f) #define ACPI_IORT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT,f) #define ACPI_IORT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ROOT_COMPLEX,f) #define ACPI_IORT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU,f) #define ACPI_IORT3A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU_GSI,f) #define ACPI_IORT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU_V3,f) #define ACPI_IORT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_PMCG,f) #define ACPI_IORT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_RMR,f) #define ACPI_IORT6A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_RMR_DESC,f) #define ACPI_IORTA_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_MEMORY_ACCESS,f) #define ACPI_IORTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_NODE,f) #define ACPI_IORTM_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ID_MAPPING,f) #define ACPI_IVRSH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_HEADER,f) #define ACPI_IVRS0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE1,f) #define ACPI_IVRS01_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE2,f) #define ACPI_IVRS1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_MEMORY,f) #define ACPI_IVRSD_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DE_HEADER,f) #define ACPI_IVRS8A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8A,f) #define ACPI_IVRS8B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8B,f) #define ACPI_IVRS8C_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8C,f) #define ACPI_IVRSHID_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE_HID,f) #define ACPI_LPITH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_LPIT_HEADER,f) #define ACPI_LPIT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_LPIT_NATIVE,f) #define ACPI_MADT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC,f) #define ACPI_MADT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_IO_APIC,f) #define ACPI_MADT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_INTERRUPT_OVERRIDE,f) #define ACPI_MADT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_NMI_SOURCE,f) #define ACPI_MADT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC_NMI,f) #define ACPI_MADT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC_OVERRIDE,f) #define ACPI_MADT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_IO_SAPIC,f) #define ACPI_MADT7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_SAPIC,f) #define ACPI_MADT8_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_INTERRUPT_SOURCE,f) #define ACPI_MADT9_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC,f) #define ACPI_MADT10_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f) #define ACPI_MADT11_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f) #define ACPI_MADT12_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_DISTRIBUTOR,f) #define ACPI_MADT13_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f) #define ACPI_MADT14_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_REDISTRIBUTOR,f) #define ACPI_MADT15_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_TRANSLATOR,f) #define ACPI_MADT16_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_MULTIPROC_WAKEUP,f) #define ACPI_MADT17_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_CORE_PIC,f) #define ACPI_MADT18_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LIO_PIC,f) #define ACPI_MADT19_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_HT_PIC,f) #define ACPI_MADT20_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_EIO_PIC,f) #define ACPI_MADT21_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_MSI_PIC,f) #define ACPI_MADT22_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_BIO_PIC,f) #define ACPI_MADT23_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LPC_PIC,f) #define ACPI_MADT24_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_RINTC,f) #define ACPI_MADT25_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_IMSIC,f) #define ACPI_MADT26_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_APLIC,f) #define ACPI_MADT27_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_PLIC,f) #define ACPI_MADT128_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_OEM_DATA,f) #define ACPI_MADTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f) #define ACPI_MCFG0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f) #define ACPI_MPAM0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPAM_MSC_NODE,f) #define ACPI_MPAM1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPAM_RESOURCE_NODE,f) #define ACPI_MPAM1A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPAM_RESOURCE_CACHE_LOCATOR,f) #define ACPI_MPAM1B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPAM_RESOURCE_MEMORY_LOCATOR,f) #define ACPI_MPAM1C_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPAM_RESOURCE_SMMU_INTERFACE,f) #define ACPI_MPAM1D_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE,f) #define ACPI_MPAM1E_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPAM_RESOURCE_ACPI_INTERFACE,f) #define ACPI_MPAM1F_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE,f) #define ACPI_MPAM1G_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPAM_RESOURCE_GENERIC_LOCATOR,f) #define ACPI_MPAM2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPAM_FUNC_DEPS,f) #define ACPI_MPST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_NODE,f) #define ACPI_MPST0A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_STATE,f) #define ACPI_MPST0B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_COMPONENT,f) #define ACPI_MPST1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_DATA_HDR,f) #define ACPI_MPST2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_DATA,f) #define ACPI_MSCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MSCT_PROXIMITY,f) #define ACPI_NFITH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_HEADER,f) #define ACPI_NFIT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_SYSTEM_ADDRESS,f) #define ACPI_NFIT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_MEMORY_MAP,f) #define ACPI_NFIT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_INTERLEAVE,f) #define ACPI_NFIT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_SMBIOS,f) #define ACPI_NFIT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_CONTROL_REGION,f) #define ACPI_NFIT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_DATA_REGION,f) #define ACPI_NFIT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_FLUSH_ADDRESS,f) #define ACPI_NFIT7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_CAPABILITIES,f) #define ACPI_PCCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_SUBSPACE,f) #define ACPI_PCCT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED,f) #define ACPI_PCCT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f) #define ACPI_PCCT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_EXT_PCC_MASTER,f) #define ACPI_PCCT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_EXT_PCC_SLAVE,f) #define ACPI_PCCT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REG,f) #define ACPI_PDTT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PDTT_CHANNEL,f) #define ACPI_PHATH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PHAT_HEADER,f) #define ACPI_PHAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PHAT_VERSION_DATA,f) #define ACPI_PHAT0A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PHAT_VERSION_ELEMENT,f) #define ACPI_PHAT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PHAT_HEALTH_DATA,f) #define ACPI_PMTT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_SOCKET,f) #define ACPI_PMTT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_CONTROLLER,f) #define ACPI_PMTT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_PHYSICAL_COMPONENT,f) #define ACPI_PMTT_VENDOR_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_VENDOR_SPECIFIC,f) #define ACPI_PMTTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_HEADER,f) #define ACPI_PPTTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f) #define ACPI_PPTT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PPTT_PROCESSOR,f) #define ACPI_PPTT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PPTT_CACHE,f) #define ACPI_PPTT1A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PPTT_CACHE_V1,f) #define ACPI_PPTT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PPTT_ID,f) #define ACPI_PRMTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PRMT_HEADER,f) #define ACPI_PRMT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PRMT_MODULE_INFO,f) #define ACPI_PRMT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PRMT_HANDLER_INFO,f) #define ACPI_RAS2_PCC_DESC_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_RAS2_PCC_DESC,f) #define ACPI_RHCTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_RHCT_NODE_HEADER,f) #define ACPI_RHCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_RHCT_ISA_STRING,f) #define ACPI_RHCT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_RHCT_CMO_NODE,f) #define ACPI_RHCT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_RHCT_MMU_NODE,f) #define ACPI_RHCTFFFF_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_RHCT_HART_INFO,f) #define ACPI_S3PTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f) #define ACPI_S3PT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_S3PT_RESUME,f) #define ACPI_S3PT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_S3PT_SUSPEND,f) #define ACPI_SDEVH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SDEV_HEADER,f) #define ACPI_SDEV0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SDEV_NAMESPACE,f) #define ACPI_SDEV0B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SDEV_SECURE_COMPONENT,f) #define ACPI_SDEVCH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SDEV_HEADER,f) #define ACPI_SDEVC0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SDEV_ID_COMPONENT, f) #define ACPI_SDEVC1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SDEV_MEM_COMPONENT, f) #define ACPI_SDEV1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SDEV_PCIE,f) #define ACPI_SDEV1A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SDEV_PCIE_PATH,f) #define ACPI_SLIC_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SLIC,f) #define ACPI_SRATH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f) #define ACPI_SRAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_CPU_AFFINITY,f) #define ACPI_SRAT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_MEM_AFFINITY,f) #define ACPI_SRAT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f) #define ACPI_SRAT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_GICC_AFFINITY,f) #define ACPI_SRAT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_GIC_ITS_AFFINITY,f) #define ACPI_SRAT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_GENERIC_AFFINITY,f) #define ACPI_SRAT7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_RINTC_AFFINITY,f) #define ACPI_SVKL0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SVKL_KEY,f) #define ACPI_TCPA_CLIENT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_CLIENT,f) #define ACPI_TCPA_SERVER_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f) #define ACPI_TPM2A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TPM2_TRAILER,f) #define ACPI_TPM211_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TPM2_ARM_SMC,f) #define ACPI_TPM23A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TPM23_TRAILER,f) #define ACPI_VIOTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_VIOT_HEADER,f) #define ACPI_VIOT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_VIOT_PCI_RANGE,f) #define ACPI_VIOT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_VIOT_MMIO,f) #define ACPI_VIOT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_VIOT_VIRTIO_IOMMU_PCI,f) #define ACPI_VIOT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_VIOT_VIRTIO_IOMMU_MMIO,f) #define ACPI_WDAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WDAT_ENTRY,f) /* * Simplify access to flag fields by breaking them up into bytes */ #define ACPI_FLAG_OFFSET(d,f,o) (UINT16) (ACPI_OFFSET (d,f) + o) /* Flags */ #define ACPI_AEST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_AEST_PROCESSOR,f,o) #define ACPI_AEST0D_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_AEST_NODE_INTERFACE,f,o) #define ACPI_AEST0E_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_AEST_NODE_INTERRUPT,f,o) #define ACPI_AGDI_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_AGDI,f,o) #define ACPI_APMTN_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_APMT_NODE,f,o) #define ACPI_BGRT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_BGRT,f,o) #define ACPI_DRTM_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_DRTM,f,o) #define ACPI_DRTM1a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_DRTM_RESOURCE,f,o) #define ACPI_FADT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_FADT,f,o) #define ACPI_FACS_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_FACS,f,o) #define ACPI_HPET_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_HPET,f,o) #define ACPI_PPTT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PPTT_PROCESSOR,f,o) #define ACPI_PPTT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PPTT_CACHE,f,o) #define ACPI_PPTT1A_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PPTT_CACHE_V1,f,o) #define ACPI_SRAT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_CPU_AFFINITY,f,o) #define ACPI_SRAT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_MEM_AFFINITY,f,o) #define ACPI_SRAT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f,o) #define ACPI_SRAT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_GICC_AFFINITY,f,o) #define ACPI_SRAT5_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_GENERIC_AFFINITY,f,o) #define ACPI_SRAT7_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_RINTC_AFFINITY,f,o) #define ACPI_GTDT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_GTDT,f,o) #define ACPI_GTDT0a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_TIMER_ENTRY,f,o) #define ACPI_GTDT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_WATCHDOG,f,o) #define ACPI_HMAT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HMAT_PROXIMITY_DOMAIN,f,o) #define ACPI_HMAT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HMAT_LOCALITY,f,o) #define ACPI_HMAT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HMAT_CACHE,f,o) #define ACPI_IORT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU,f,o) #define ACPI_IORT3a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU_GSI,f,o) #define ACPI_IORT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU_V3,f,o) #define ACPI_IORT6_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_RMR,f,o) #define ACPI_IORTA_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_MEMORY_ACCESS,f,o) #define ACPI_IORTM_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_ID_MAPPING,f,o) #define ACPI_IVRS_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IVRS_HEADER,f,o) #define ACPI_IVRSDE_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IVRS_DE_HEADER,f,o) #define ACPI_LPITH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_LPIT_HEADER,f,o) #define ACPI_MADT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_MADT,f,o) #define ACPI_MADT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_APIC,f,o) #define ACPI_MADT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_INTERRUPT_OVERRIDE,f,o) #define ACPI_MADT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_NMI_SOURCE,f,o) #define ACPI_MADT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_APIC_NMI,f,o) #define ACPI_MADT7_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_SAPIC,f,o) #define ACPI_MADT8_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_INTERRUPT_SOURCE,f,o) #define ACPI_MADT9_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC,f,o) #define ACPI_MADT10_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f,o) #define ACPI_MADT11_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f,o) #define ACPI_MADT13_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f,o) #define ACPI_MADT14_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_REDISTRIBUTOR,f,o) #define ACPI_MADT15_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_TRANSLATOR,f,o) #define ACPI_MPST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MPST_POWER_NODE,f,o) #define ACPI_MPST2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MPST_POWER_DATA,f,o) #define ACPI_NFIT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_NFIT_SYSTEM_ADDRESS,f,o) #define ACPI_NFIT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_NFIT_MEMORY_MAP,f,o) #define ACPI_NFIT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_NFIT_CONTROL_REGION,f,o) #define ACPI_NFIT7_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_NFIT_CAPABILITIES,f,o) #define ACPI_PCCT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_PCCT,f,o) #define ACPI_PCCT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED,f,o) #define ACPI_PCCT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f,o) #define ACPI_PCCT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_EXT_PCC_MASTER,f,o) #define ACPI_PCCT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_EXT_PCC_SLAVE,f,o) #define ACPI_PDTT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PDTT_CHANNEL,f,o) #define ACPI_PMTTH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PMTT_HEADER,f,o) #define ACPI_SDEVH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SDEV_HEADER,f,o) #define ACPI_WDDT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_WDDT,f,o) #define ACPI_WSMT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_WSMT,f,o) #define ACPI_EINJ0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o) #define ACPI_ERST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o) #define ACPI_HEST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f,o) #define ACPI_HEST1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_IA_CORRECTED,f,o) #define ACPI_HEST6_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_AER_ROOT,f,o) #define ACPI_HEST11_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_IA_DEFERRED_CHECK,f,o) /* * Required terminator for all tables below */ #define ACPI_DMT_TERMINATOR {ACPI_DMT_EXIT, 0, NULL, 0} #define ACPI_DMT_NEW_LINE {ACPI_DMT_EXTRA_TEXT, 0, "\n", 0} src/acpica/source/include/actbl.h000066400000000000000000000732331465205512700172650ustar00rootroot00000000000000/****************************************************************************** * * Name: actbl.h - Basic ACPI Table Definitions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACTBL_H__ #define __ACTBL_H__ /******************************************************************************* * * Fundamental ACPI tables * * This file contains definitions for the ACPI tables that are directly consumed * by ACPICA. All other tables are consumed by the OS-dependent ACPI-related * device drivers and other OS support code. * * The RSDP and FACS do not use the common ACPI table header. All other ACPI * tables use the header. * ******************************************************************************/ /* * Values for description table header signatures for tables defined in this * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ #define ACPI_SIG_DSDT "DSDT" /* Differentiated System Description Table */ #define ACPI_SIG_FADT "FACP" /* Fixed ACPI Description Table */ #define ACPI_SIG_FACS "FACS" /* Firmware ACPI Control Structure */ #define ACPI_SIG_OSDT "OSDT" /* Override System Description Table */ #define ACPI_SIG_PSDT "PSDT" /* Persistent System Description Table */ #define ACPI_SIG_RSDP "RSD PTR " /* Root System Description Pointer */ #define ACPI_SIG_RSDT "RSDT" /* Root System Description Table */ #define ACPI_SIG_XSDT "XSDT" /* Extended System Description Table */ #define ACPI_SIG_SSDT "SSDT" /* Secondary System Description Table */ #define ACPI_RSDP_NAME "RSDP" /* Short name for RSDP, not signature */ #define ACPI_OEM_NAME "OEM" /* Short name for OEM, not signature */ /* * All tables and structures must be byte-packed to match the ACPI * specification, since the tables are provided by the system BIOS */ #pragma pack(1) /* * Note: C bitfields are not used for this reason: * * "Bitfields are great and easy to read, but unfortunately the C language * does not specify the layout of bitfields in memory, which means they are * essentially useless for dealing with packed data in on-disk formats or * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, * this decision was a design error in C. Ritchie could have picked an order * and stuck with it." Norman Ramsey. * See http://stackoverflow.com/a/1053662/41661 */ /******************************************************************************* * * Master ACPI Table Header. This common header is used by all ACPI tables * except the RSDP and FACS. * ******************************************************************************/ typedef struct acpi_table_header { char Signature[ACPI_NAMESEG_SIZE]; /* ASCII table signature */ UINT32 Length; /* Length of table in bytes, including this header */ UINT8 Revision; /* ACPI Specification minor version number */ UINT8 Checksum; /* To make sum of entire table == 0 */ char OemId[ACPI_OEM_ID_SIZE]; /* ASCII OEM identification */ char OemTableId[ACPI_OEM_TABLE_ID_SIZE]; /* ASCII OEM table identification */ UINT32 OemRevision; /* OEM revision number */ char AslCompilerId[ACPI_NAMESEG_SIZE]; /* ASCII ASL compiler vendor ID */ UINT32 AslCompilerRevision; /* ASL compiler version */ } ACPI_TABLE_HEADER; /******************************************************************************* * * GAS - Generic Address Structure (ACPI 2.0+) * * Note: Since this structure is used in the ACPI tables, it is byte aligned. * If misaligned access is not supported by the hardware, accesses to the * 64-bit Address field must be performed with care. * ******************************************************************************/ typedef struct acpi_generic_address { UINT8 SpaceId; /* Address space where struct or register exists */ UINT8 BitWidth; /* Size in bits of given register */ UINT8 BitOffset; /* Bit offset within the register */ UINT8 AccessWidth; /* Minimum Access size (ACPI 3.0) */ UINT64 Address; /* 64-bit address of struct or register */ } ACPI_GENERIC_ADDRESS; /******************************************************************************* * * RSDP - Root System Description Pointer (Signature is "RSD PTR ") * Version 2 * ******************************************************************************/ typedef struct acpi_table_rsdp { char Signature[8]; /* ACPI signature, contains "RSD PTR " */ UINT8 Checksum; /* ACPI 1.0 checksum */ char OemId[ACPI_OEM_ID_SIZE]; /* OEM identification */ UINT8 Revision; /* Must be (0) for ACPI 1.0 or (2) for ACPI 2.0+ */ UINT32 RsdtPhysicalAddress; /* 32-bit physical address of the RSDT */ UINT32 Length; /* Table length in bytes, including header (ACPI 2.0+) */ UINT64 XsdtPhysicalAddress; /* 64-bit physical address of the XSDT (ACPI 2.0+) */ UINT8 ExtendedChecksum; /* Checksum of entire table (ACPI 2.0+) */ UINT8 Reserved[3]; /* Reserved, must be zero */ } ACPI_TABLE_RSDP; /* Standalone struct for the ACPI 1.0 RSDP */ typedef struct acpi_rsdp_common { char Signature[8]; UINT8 Checksum; char OemId[ACPI_OEM_ID_SIZE]; UINT8 Revision; UINT32 RsdtPhysicalAddress; } ACPI_RSDP_COMMON; /* Standalone struct for the extended part of the RSDP (ACPI 2.0+) */ typedef struct acpi_rsdp_extension { UINT32 Length; UINT64 XsdtPhysicalAddress; UINT8 ExtendedChecksum; UINT8 Reserved[3]; } ACPI_RSDP_EXTENSION; /******************************************************************************* * * RSDT/XSDT - Root System Description Tables * Version 1 (both) * ******************************************************************************/ typedef struct acpi_table_rsdt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 TableOffsetEntry[1]; /* Array of pointers to ACPI tables */ } ACPI_TABLE_RSDT; typedef struct acpi_table_xsdt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT64 TableOffsetEntry[1]; /* Array of pointers to ACPI tables */ } ACPI_TABLE_XSDT; #define ACPI_RSDT_ENTRY_SIZE (sizeof (UINT32)) #define ACPI_XSDT_ENTRY_SIZE (sizeof (UINT64)) /******************************************************************************* * * FACS - Firmware ACPI Control Structure (FACS) * ******************************************************************************/ typedef struct acpi_table_facs { char Signature[4]; /* ASCII table signature */ UINT32 Length; /* Length of structure, in bytes */ UINT32 HardwareSignature; /* Hardware configuration signature */ UINT32 FirmwareWakingVector; /* 32-bit physical address of the Firmware Waking Vector */ UINT32 GlobalLock; /* Global Lock for shared hardware resources */ UINT32 Flags; UINT64 XFirmwareWakingVector; /* 64-bit version of the Firmware Waking Vector (ACPI 2.0+) */ UINT8 Version; /* Version of this table (ACPI 2.0+) */ UINT8 Reserved[3]; /* Reserved, must be zero */ UINT32 OspmFlags; /* Flags to be set by OSPM (ACPI 4.0) */ UINT8 Reserved1[24]; /* Reserved, must be zero */ } ACPI_TABLE_FACS; /* Masks for GlobalLock flag field above */ #define ACPI_GLOCK_PENDING (1) /* 00: Pending global lock ownership */ #define ACPI_GLOCK_OWNED (1<<1) /* 01: Global lock is owned */ /* Masks for Flags field above */ #define ACPI_FACS_S4_BIOS_PRESENT (1) /* 00: S4BIOS support is present */ #define ACPI_FACS_64BIT_WAKE (1<<1) /* 01: 64-bit wake vector supported (ACPI 4.0) */ /* Masks for OspmFlags field above */ #define ACPI_FACS_64BIT_ENVIRONMENT (1) /* 00: 64-bit wake environment is required (ACPI 4.0) */ /******************************************************************************* * * FADT - Fixed ACPI Description Table (Signature "FACP") * Version 6 * ******************************************************************************/ /* Fields common to all versions of the FADT */ typedef struct acpi_table_fadt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 Facs; /* 32-bit physical address of FACS */ UINT32 Dsdt; /* 32-bit physical address of DSDT */ UINT8 Model; /* System Interrupt Model (ACPI 1.0) - not used in ACPI 2.0+ */ UINT8 PreferredProfile; /* Conveys preferred power management profile to OSPM. */ UINT16 SciInterrupt; /* System vector of SCI interrupt */ UINT32 SmiCommand; /* 32-bit Port address of SMI command port */ UINT8 AcpiEnable; /* Value to write to SMI_CMD to enable ACPI */ UINT8 AcpiDisable; /* Value to write to SMI_CMD to disable ACPI */ UINT8 S4BiosRequest; /* Value to write to SMI_CMD to enter S4BIOS state */ UINT8 PstateControl; /* Processor performance state control*/ UINT32 Pm1aEventBlock; /* 32-bit port address of Power Mgt 1a Event Reg Blk */ UINT32 Pm1bEventBlock; /* 32-bit port address of Power Mgt 1b Event Reg Blk */ UINT32 Pm1aControlBlock; /* 32-bit port address of Power Mgt 1a Control Reg Blk */ UINT32 Pm1bControlBlock; /* 32-bit port address of Power Mgt 1b Control Reg Blk */ UINT32 Pm2ControlBlock; /* 32-bit port address of Power Mgt 2 Control Reg Blk */ UINT32 PmTimerBlock; /* 32-bit port address of Power Mgt Timer Ctrl Reg Blk */ UINT32 Gpe0Block; /* 32-bit port address of General Purpose Event 0 Reg Blk */ UINT32 Gpe1Block; /* 32-bit port address of General Purpose Event 1 Reg Blk */ UINT8 Pm1EventLength; /* Byte Length of ports at Pm1xEventBlock */ UINT8 Pm1ControlLength; /* Byte Length of ports at Pm1xControlBlock */ UINT8 Pm2ControlLength; /* Byte Length of ports at Pm2ControlBlock */ UINT8 PmTimerLength; /* Byte Length of ports at PmTimerBlock */ UINT8 Gpe0BlockLength; /* Byte Length of ports at Gpe0Block */ UINT8 Gpe1BlockLength; /* Byte Length of ports at Gpe1Block */ UINT8 Gpe1Base; /* Offset in GPE number space where GPE1 events start */ UINT8 CstControl; /* Support for the _CST object and C-States change notification */ UINT16 C2Latency; /* Worst case HW latency to enter/exit C2 state */ UINT16 C3Latency; /* Worst case HW latency to enter/exit C3 state */ UINT16 FlushSize; /* Processor memory cache line width, in bytes */ UINT16 FlushStride; /* Number of flush strides that need to be read */ UINT8 DutyOffset; /* Processor duty cycle index in processor P_CNT reg */ UINT8 DutyWidth; /* Processor duty cycle value bit width in P_CNT register */ UINT8 DayAlarm; /* Index to day-of-month alarm in RTC CMOS RAM */ UINT8 MonthAlarm; /* Index to month-of-year alarm in RTC CMOS RAM */ UINT8 Century; /* Index to century in RTC CMOS RAM */ UINT16 BootFlags; /* IA-PC Boot Architecture Flags (see below for individual flags) */ UINT8 Reserved; /* Reserved, must be zero */ UINT32 Flags; /* Miscellaneous flag bits (see below for individual flags) */ ACPI_GENERIC_ADDRESS ResetRegister; /* 64-bit address of the Reset register */ UINT8 ResetValue; /* Value to write to the ResetRegister port to reset the system */ UINT16 ArmBootFlags; /* ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1) */ UINT8 MinorRevision; /* FADT Minor Revision (ACPI 5.1) */ UINT64 XFacs; /* 64-bit physical address of FACS */ UINT64 XDsdt; /* 64-bit physical address of DSDT */ ACPI_GENERIC_ADDRESS XPm1aEventBlock; /* 64-bit Extended Power Mgt 1a Event Reg Blk address */ ACPI_GENERIC_ADDRESS XPm1bEventBlock; /* 64-bit Extended Power Mgt 1b Event Reg Blk address */ ACPI_GENERIC_ADDRESS XPm1aControlBlock; /* 64-bit Extended Power Mgt 1a Control Reg Blk address */ ACPI_GENERIC_ADDRESS XPm1bControlBlock; /* 64-bit Extended Power Mgt 1b Control Reg Blk address */ ACPI_GENERIC_ADDRESS XPm2ControlBlock; /* 64-bit Extended Power Mgt 2 Control Reg Blk address */ ACPI_GENERIC_ADDRESS XPmTimerBlock; /* 64-bit Extended Power Mgt Timer Ctrl Reg Blk address */ ACPI_GENERIC_ADDRESS XGpe0Block; /* 64-bit Extended General Purpose Event 0 Reg Blk address */ ACPI_GENERIC_ADDRESS XGpe1Block; /* 64-bit Extended General Purpose Event 1 Reg Blk address */ ACPI_GENERIC_ADDRESS SleepControl; /* 64-bit Sleep Control register (ACPI 5.0) */ ACPI_GENERIC_ADDRESS SleepStatus; /* 64-bit Sleep Status register (ACPI 5.0) */ UINT64 HypervisorId; /* Hypervisor Vendor ID (ACPI 6.0) */ } ACPI_TABLE_FADT; /* Masks for FADT IA-PC Boot Architecture Flags (boot_flags) [Vx]=Introduced in this FADT revision */ #define ACPI_FADT_LEGACY_DEVICES (1) /* 00: [V2] System has LPC or ISA bus devices */ #define ACPI_FADT_8042 (1<<1) /* 01: [V3] System has an 8042 controller on port 60/64 */ #define ACPI_FADT_NO_VGA (1<<2) /* 02: [V4] It is not safe to probe for VGA hardware */ #define ACPI_FADT_NO_MSI (1<<3) /* 03: [V4] Message Signaled Interrupts (MSI) must not be enabled */ #define ACPI_FADT_NO_ASPM (1<<4) /* 04: [V4] PCIe ASPM control must not be enabled */ #define ACPI_FADT_NO_CMOS_RTC (1<<5) /* 05: [V5] No CMOS real-time clock present */ /* Masks for FADT ARM Boot Architecture Flags (arm_boot_flags) ACPI 5.1 */ #define ACPI_FADT_PSCI_COMPLIANT (1) /* 00: [V5+] PSCI 0.2+ is implemented */ #define ACPI_FADT_PSCI_USE_HVC (1<<1) /* 01: [V5+] HVC must be used instead of SMC as the PSCI conduit */ /* Masks for FADT flags */ #define ACPI_FADT_WBINVD (1) /* 00: [V1] The WBINVD instruction works properly */ #define ACPI_FADT_WBINVD_FLUSH (1<<1) /* 01: [V1] WBINVD flushes but does not invalidate caches */ #define ACPI_FADT_C1_SUPPORTED (1<<2) /* 02: [V1] All processors support C1 state */ #define ACPI_FADT_C2_MP_SUPPORTED (1<<3) /* 03: [V1] C2 state works on MP system */ #define ACPI_FADT_POWER_BUTTON (1<<4) /* 04: [V1] Power button is handled as a control method device */ #define ACPI_FADT_SLEEP_BUTTON (1<<5) /* 05: [V1] Sleep button is handled as a control method device */ #define ACPI_FADT_FIXED_RTC (1<<6) /* 06: [V1] RTC wakeup status is not in fixed register space */ #define ACPI_FADT_S4_RTC_WAKE (1<<7) /* 07: [V1] RTC alarm can wake system from S4 */ #define ACPI_FADT_32BIT_TIMER (1<<8) /* 08: [V1] ACPI timer width is 32-bit (0=24-bit) */ #define ACPI_FADT_DOCKING_SUPPORTED (1<<9) /* 09: [V1] Docking supported */ #define ACPI_FADT_RESET_REGISTER (1<<10) /* 10: [V2] System reset via the FADT RESET_REG supported */ #define ACPI_FADT_SEALED_CASE (1<<11) /* 11: [V3] No internal expansion capabilities and case is sealed */ #define ACPI_FADT_HEADLESS (1<<12) /* 12: [V3] No local video capabilities or local input devices */ #define ACPI_FADT_SLEEP_TYPE (1<<13) /* 13: [V3] Must execute native instruction after writing SLP_TYPx register */ #define ACPI_FADT_PCI_EXPRESS_WAKE (1<<14) /* 14: [V4] System supports PCIEXP_WAKE (STS/EN) bits (ACPI 3.0) */ #define ACPI_FADT_PLATFORM_CLOCK (1<<15) /* 15: [V4] OSPM should use platform-provided timer (ACPI 3.0) */ #define ACPI_FADT_S4_RTC_VALID (1<<16) /* 16: [V4] Contents of RTC_STS valid after S4 wake (ACPI 3.0) */ #define ACPI_FADT_REMOTE_POWER_ON (1<<17) /* 17: [V4] System is compatible with remote power on (ACPI 3.0) */ #define ACPI_FADT_APIC_CLUSTER (1<<18) /* 18: [V4] All local APICs must use cluster model (ACPI 3.0) */ #define ACPI_FADT_APIC_PHYSICAL (1<<19) /* 19: [V4] All local xAPICs must use physical dest mode (ACPI 3.0) */ #define ACPI_FADT_HW_REDUCED (1<<20) /* 20: [V5] ACPI hardware is not implemented (ACPI 5.0) */ #define ACPI_FADT_LOW_POWER_S0 (1<<21) /* 21: [V5] S0 power savings are equal or better than S3 (ACPI 5.0) */ /* Values for PreferredProfile (Preferred Power Management Profiles) */ enum AcpiPreferredPmProfiles { PM_UNSPECIFIED = 0, PM_DESKTOP = 1, PM_MOBILE = 2, PM_WORKSTATION = 3, PM_ENTERPRISE_SERVER = 4, PM_SOHO_SERVER = 5, PM_APPLIANCE_PC = 6, PM_PERFORMANCE_SERVER = 7, PM_TABLET = 8 }; /* Values for SleepStatus and SleepControl registers (V5+ FADT) */ #define ACPI_X_WAKE_STATUS 0x80 #define ACPI_X_SLEEP_TYPE_MASK 0x1C #define ACPI_X_SLEEP_TYPE_POSITION 0x02 #define ACPI_X_SLEEP_ENABLE 0x20 /* Reset to default packing */ #pragma pack() /* * Internal table-related structures */ typedef union acpi_name_union { UINT32 Integer; char Ascii[4]; } ACPI_NAME_UNION; /* Internal ACPI Table Descriptor. One per ACPI table. */ typedef struct acpi_table_desc { ACPI_PHYSICAL_ADDRESS Address; ACPI_TABLE_HEADER *Pointer; UINT32 Length; /* Length fixed at 32 bits (fixed in table header) */ ACPI_NAME_UNION Signature; ACPI_OWNER_ID OwnerId; UINT8 Flags; UINT16 ValidationCount; } ACPI_TABLE_DESC; /* * Maximum value of the ValidationCount field in ACPI_TABLE_DESC. * When reached, ValidationCount cannot be changed any more and the table will * be permanently regarded as validated. * * This is to prevent situations in which unbalanced table get/put operations * may cause premature table unmapping in the OS to happen. * * The maximum validation count can be defined to any value, but should be * greater than the maximum number of OS early stage mapping slots to avoid * leaking early stage table mappings to the late stage. */ #define ACPI_MAX_TABLE_VALIDATIONS ACPI_UINT16_MAX /* Masks for Flags field above */ #define ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL (0) /* Virtual address, external maintained */ #define ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL (1) /* Physical address, internally mapped */ #define ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL (2) /* Virtual address, internallly allocated */ #define ACPI_TABLE_ORIGIN_MASK (3) #define ACPI_TABLE_IS_VERIFIED (4) #define ACPI_TABLE_IS_LOADED (8) /* * Get the remaining ACPI tables */ #include "actbl1.h" #include "actbl2.h" #include "actbl3.h" /* Macros used to generate offsets to specific table fields */ #define ACPI_FADT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_FADT, f) /* * Sizes of the various flavors of FADT. We need to look closely * at the FADT length because the version number essentially tells * us nothing because of many BIOS bugs where the version does not * match the expected length. In other words, the length of the * FADT is the bottom line as to what the version really is. * * For reference, the values below are as follows: * FADT V1 size: 0x074 * FADT V2 size: 0x084 * FADT V3 size: 0x0F4 * FADT V4 size: 0x0F4 * FADT V5 size: 0x10C * FADT V6 size: 0x114 */ #define ACPI_FADT_V1_SIZE (UINT32) (ACPI_FADT_OFFSET (Flags) + 4) #define ACPI_FADT_V2_SIZE (UINT32) (ACPI_FADT_OFFSET (MinorRevision) + 1) #define ACPI_FADT_V3_SIZE (UINT32) (ACPI_FADT_OFFSET (SleepControl)) #define ACPI_FADT_V5_SIZE (UINT32) (ACPI_FADT_OFFSET (HypervisorId)) #define ACPI_FADT_V6_SIZE (UINT32) (sizeof (ACPI_TABLE_FADT)) #define ACPI_FADT_CONFORMANCE "ACPI 6.1 (FADT version 6)" #endif /* __ACTBL_H__ */ src/acpica/source/include/actbl1.h000066400000000000000000002217121465205512700173430ustar00rootroot00000000000000/****************************************************************************** * * Name: actbl1.h - Additional ACPI table definitions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACTBL1_H__ #define __ACTBL1_H__ /******************************************************************************* * * Additional ACPI Tables * * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * ******************************************************************************/ /* * Values for description table header signatures for tables defined in this * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ #define ACPI_SIG_AEST "AEST" /* Arm Error Source Table */ #define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ #define ACPI_SIG_ASPT "ASPT" /* AMD Secure Processor Table */ #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ #define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ #define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ #define ACPI_SIG_CEDT "CEDT" /* CXL Early Discovery Table */ #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ #define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ #define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ #define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ #define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ #define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ #define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ #define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ #define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ #define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ #define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table*/ #define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ #define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ /* Reserved table signatures */ #define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ /* * These tables have been seen in the field, but no definition has been found */ #ifdef ACPI_UNDEFINED_TABLES #define ACPI_SIG_ATKG "ATKG" #define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ #define ACPI_SIG_IEIT "IEIT" #endif /* * All tables must be byte-packed to match the ACPI specification, since * the tables are provided by the system BIOS. */ #pragma pack(1) /* * Note: C bitfields are not used for this reason: * * "Bitfields are great and easy to read, but unfortunately the C language * does not specify the layout of bitfields in memory, which means they are * essentially useless for dealing with packed data in on-disk formats or * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, * this decision was a design error in C. Ritchie could have picked an order * and stuck with it." Norman Ramsey. * See http://stackoverflow.com/a/1053662/41661 */ /******************************************************************************* * * Common subtable headers * ******************************************************************************/ /* Generic subtable header (used in MADT, SRAT, etc.) */ typedef struct acpi_subtable_header { UINT8 Type; UINT8 Length; } ACPI_SUBTABLE_HEADER; /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ typedef struct acpi_whea_header { UINT8 Action; UINT8 Instruction; UINT8 Flags; UINT8 Reserved; ACPI_GENERIC_ADDRESS RegisterRegion; UINT64 Value; /* Value used with Read/Write register */ UINT64 Mask; /* Bitmask required for this register instruction */ } ACPI_WHEA_HEADER; /******************************************************************************* * * ASF - Alert Standard Format table (Signature "ASF!") * Revision 0x10 * * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 * ******************************************************************************/ typedef struct acpi_table_asf { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_ASF; /* ASF subtable header */ typedef struct acpi_asf_header { UINT8 Type; UINT8 Reserved; UINT16 Length; } ACPI_ASF_HEADER; /* Values for Type field above */ enum AcpiAsfType { ACPI_ASF_TYPE_INFO = 0, ACPI_ASF_TYPE_ALERT = 1, ACPI_ASF_TYPE_CONTROL = 2, ACPI_ASF_TYPE_BOOT = 3, ACPI_ASF_TYPE_ADDRESS = 4, ACPI_ASF_TYPE_RESERVED = 5 }; /* * ASF subtables */ /* 0: ASF Information */ typedef struct acpi_asf_info { ACPI_ASF_HEADER Header; UINT8 MinResetValue; UINT8 MinPollInterval; UINT16 SystemId; UINT32 MfgId; UINT8 Flags; UINT8 Reserved2[3]; } ACPI_ASF_INFO; /* Masks for Flags field above */ #define ACPI_ASF_SMBUS_PROTOCOLS (1) /* 1: ASF Alerts */ typedef struct acpi_asf_alert { ACPI_ASF_HEADER Header; UINT8 AssertMask; UINT8 DeassertMask; UINT8 Alerts; UINT8 DataLength; } ACPI_ASF_ALERT; typedef struct acpi_asf_alert_data { UINT8 Address; UINT8 Command; UINT8 Mask; UINT8 Value; UINT8 SensorType; UINT8 Type; UINT8 Offset; UINT8 SourceType; UINT8 Severity; UINT8 SensorNumber; UINT8 Entity; UINT8 Instance; } ACPI_ASF_ALERT_DATA; /* 2: ASF Remote Control */ typedef struct acpi_asf_remote { ACPI_ASF_HEADER Header; UINT8 Controls; UINT8 DataLength; UINT16 Reserved2; } ACPI_ASF_REMOTE; typedef struct acpi_asf_control_data { UINT8 Function; UINT8 Address; UINT8 Command; UINT8 Value; } ACPI_ASF_CONTROL_DATA; /* 3: ASF RMCP Boot Options */ typedef struct acpi_asf_rmcp { ACPI_ASF_HEADER Header; UINT8 Capabilities[7]; UINT8 CompletionCode; UINT32 EnterpriseId; UINT8 Command; UINT16 Parameter; UINT16 BootOptions; UINT16 OemParameters; } ACPI_ASF_RMCP; /* 4: ASF Address */ typedef struct acpi_asf_address { ACPI_ASF_HEADER Header; UINT8 EpromAddress; UINT8 Devices; } ACPI_ASF_ADDRESS; /******************************************************************************* * * ASPT - AMD Secure Processor Table (Signature "ASPT") * Revision 0x1 * * Conforms to AMD Socket SP5/SP6 Platform ASPT Rev1 Specification, * 12 September 2022 * ******************************************************************************/ typedef struct acpi_table_aspt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 NumEntries; } ACPI_TABLE_ASPT; /* ASPT subtable header */ typedef struct acpi_aspt_header { UINT16 Type; UINT16 Length; } ACPI_ASPT_HEADER; /* Values for Type field above */ enum AcpiAsptType { ACPI_ASPT_TYPE_GLOBAL_REGS = 0, ACPI_ASPT_TYPE_SEV_MBOX_REGS = 1, ACPI_ASPT_TYPE_ACPI_MBOX_REGS = 2, ACPI_ASPT_TYPE_UNKNOWN = 3, }; /* * ASPT subtables */ /* 0: ASPT Global Registers */ typedef struct acpi_aspt_global_regs { ACPI_ASPT_HEADER Header; UINT32 Reserved; UINT64 FeatureRegAddr; UINT64 IrqEnRegAddr; UINT64 IrqStRegAddr; } ACPI_ASPT_GLOBAL_REGS; /* 1: ASPT SEV Mailbox Registers */ typedef struct acpi_aspt_sev_mbox_regs { ACPI_ASPT_HEADER Header; UINT8 MboxIrqId; UINT8 Reserved[3]; UINT64 CmdRespRegAddr; UINT64 CmdBufLoRegAddr; UINT64 CmdBufHiRegAddr; } ACPI_ASPT_SEV_MBOX_REGS; /* 2: ASPT ACPI Mailbox Registers */ typedef struct acpi_aspt_acpi_mbox_regs { ACPI_ASPT_HEADER Header; UINT32 Reserved1; UINT64 CmdRespRegAddr; UINT64 Reserved2[2]; } ACPI_ASPT_ACPI_MBOX_REGS; /******************************************************************************* * * BERT - Boot Error Record Table (ACPI 4.0) * Version 1 * ******************************************************************************/ typedef struct acpi_table_bert { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 RegionLength; /* Length of the boot error region */ UINT64 Address; /* Physical address of the error region */ } ACPI_TABLE_BERT; /* Boot Error Region (not a subtable, pointed to by Address field above) */ typedef struct acpi_bert_region { UINT32 BlockStatus; /* Type of error information */ UINT32 RawDataOffset; /* Offset to raw error data */ UINT32 RawDataLength; /* Length of raw error data */ UINT32 DataLength; /* Length of generic error data */ UINT32 ErrorSeverity; /* Severity code */ } ACPI_BERT_REGION; /* Values for BlockStatus flags above */ #define ACPI_BERT_UNCORRECTABLE (1) #define ACPI_BERT_CORRECTABLE (1<<1) #define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) #define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) #define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ /* Values for ErrorSeverity above */ enum AcpiBertErrorSeverity { ACPI_BERT_ERROR_CORRECTABLE = 0, ACPI_BERT_ERROR_FATAL = 1, ACPI_BERT_ERROR_CORRECTED = 2, ACPI_BERT_ERROR_NONE = 3, ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ }; /* * Note: The generic error data that follows the ErrorSeverity field above * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below */ /******************************************************************************* * * BGRT - Boot Graphics Resource Table (ACPI 5.0) * Version 1 * ******************************************************************************/ typedef struct acpi_table_bgrt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT16 Version; UINT8 Status; UINT8 ImageType; UINT64 ImageAddress; UINT32 ImageOffsetX; UINT32 ImageOffsetY; } ACPI_TABLE_BGRT; /* Flags for Status field above */ #define ACPI_BGRT_DISPLAYED (1) #define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) /******************************************************************************* * * BOOT - Simple Boot Flag Table * Version 1 * * Conforms to the "Simple Boot Flag Specification", Version 2.1 * ******************************************************************************/ typedef struct acpi_table_boot { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ UINT8 Reserved[3]; } ACPI_TABLE_BOOT; /******************************************************************************* * * CDAT - Coherent Device Attribute Table * Version 1 * * Conforms to the "Coherent Device Attribute Table (CDAT) Specification " (Revision 1.01, October 2020.) * ******************************************************************************/ typedef struct acpi_table_cdat { UINT32 Length; /* Length of table in bytes, including this header */ UINT8 Revision; /* ACPI Specification minor version number */ UINT8 Checksum; /* To make sum of entire table == 0 */ UINT8 Reserved[6]; UINT32 Sequence; /* Used to detect runtime CDAT table changes */ } ACPI_TABLE_CDAT; /* CDAT common subtable header */ typedef struct acpi_cdat_header { UINT8 Type; UINT8 Reserved; UINT16 Length; } ACPI_CDAT_HEADER; /* Values for Type field above */ enum AcpiCdatType { ACPI_CDAT_TYPE_DSMAS = 0, ACPI_CDAT_TYPE_DSLBIS = 1, ACPI_CDAT_TYPE_DSMSCIS = 2, ACPI_CDAT_TYPE_DSIS = 3, ACPI_CDAT_TYPE_DSEMTS = 4, ACPI_CDAT_TYPE_SSLBIS = 5, ACPI_CDAT_TYPE_RESERVED = 6 /* 6 through 0xFF are reserved */ }; /* Subtable 0: Device Scoped Memory Affinity Structure (DSMAS) */ typedef struct acpi_cdat_dsmas { UINT8 DsmadHandle; UINT8 Flags; UINT16 Reserved; UINT64 DpaBaseAddress; UINT64 DpaLength; } ACPI_CDAT_DSMAS; /* Flags for subtable above */ #define ACPI_CDAT_DSMAS_NON_VOLATILE (1 << 2) /* Subtable 1: Device scoped Latency and Bandwidth Information Structure (DSLBIS) */ typedef struct acpi_cdat_dslbis { UINT8 Handle; UINT8 Flags; /* If Handle matches a DSMAS handle, the definition of this field matches * Flags field in HMAT System Locality Latency */ UINT8 DataType; UINT8 Reserved; UINT64 EntryBaseUnit; UINT16 Entry[3]; UINT16 Reserved2; } ACPI_CDAT_DSLBIS; /* Subtable 2: Device Scoped Memory Side Cache Information Structure (DSMSCIS) */ typedef struct acpi_cdat_dsmscis { UINT8 DsmasHandle; UINT8 Reserved[3]; UINT64 SideCacheSize; UINT32 CacheAttributes; } ACPI_CDAT_DSMSCIS; /* Subtable 3: Device Scoped Initiator Structure (DSIS) */ typedef struct acpi_cdat_dsis { UINT8 Flags; UINT8 Handle; UINT16 Reserved; } ACPI_CDAT_DSIS; /* Flags for above subtable */ #define ACPI_CDAT_DSIS_MEM_ATTACHED (1 << 0) /* Subtable 4: Device Scoped EFI Memory Type Structure (DSEMTS) */ typedef struct acpi_cdat_dsemts { UINT8 DsmasHandle; UINT8 MemoryType; UINT16 Reserved; UINT64 DpaOffset; UINT64 RangeLength; } ACPI_CDAT_DSEMTS; /* Subtable 5: Switch Scoped Latency and Bandwidth Information Structure (SSLBIS) */ typedef struct acpi_cdat_sslbis { UINT8 DataType; UINT8 Reserved[3]; UINT64 EntryBaseUnit; } ACPI_CDAT_SSLBIS; /* Sub-subtable for above, SslbeEntries field */ typedef struct acpi_cdat_sslbe { UINT16 PortxId; UINT16 PortyId; UINT16 LatencyOrBandwidth; UINT16 Reserved; } ACPI_CDAT_SSLBE; #define ACPI_CDAT_SSLBIS_US_PORT 0x0100 #define ACPI_CDAT_SSLBIS_ANY_PORT 0xffff /******************************************************************************* * * CEDT - CXL Early Discovery Table * Version 1 * * Conforms to the "CXL Early Discovery Table" (CXL 2.0, October 2020) * ******************************************************************************/ typedef struct acpi_table_cedt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_CEDT; /* CEDT subtable header (Performance Record Structure) */ typedef struct acpi_cedt_header { UINT8 Type; UINT8 Reserved; UINT16 Length; } ACPI_CEDT_HEADER; /* Values for Type field above */ enum AcpiCedtType { ACPI_CEDT_TYPE_CHBS = 0, ACPI_CEDT_TYPE_CFMWS = 1, ACPI_CEDT_TYPE_CXIMS = 2, ACPI_CEDT_TYPE_RDPAS = 3, ACPI_CEDT_TYPE_RESERVED = 4, }; /* Values for version field above */ #define ACPI_CEDT_CHBS_VERSION_CXL11 (0) #define ACPI_CEDT_CHBS_VERSION_CXL20 (1) /* Values for length field above */ #define ACPI_CEDT_CHBS_LENGTH_CXL11 (0x2000) #define ACPI_CEDT_CHBS_LENGTH_CXL20 (0x10000) /* * CEDT subtables */ /* 0: CXL Host Bridge Structure */ typedef struct acpi_cedt_chbs { ACPI_CEDT_HEADER Header; UINT32 Uid; UINT32 CxlVersion; UINT32 Reserved; UINT64 Base; UINT64 Length; } ACPI_CEDT_CHBS; /* 1: CXL Fixed Memory Window Structure */ typedef struct acpi_cedt_cfmws { ACPI_CEDT_HEADER Header; UINT32 Reserved1; UINT64 BaseHpa; UINT64 WindowSize; UINT8 InterleaveWays; UINT8 InterleaveArithmetic; UINT16 Reserved2; UINT32 Granularity; UINT16 Restrictions; UINT16 QtgId; UINT32 InterleaveTargets[]; } ACPI_CEDT_CFMWS; typedef struct acpi_cedt_cfmws_target_element { UINT32 InterleaveTarget; } ACPI_CEDT_CFMWS_TARGET_ELEMENT; /* Values for Interleave Arithmetic field above */ #define ACPI_CEDT_CFMWS_ARITHMETIC_MODULO (0) #define ACPI_CEDT_CFMWS_ARITHMETIC_XOR (1) /* Values for Restrictions field above */ #define ACPI_CEDT_CFMWS_RESTRICT_TYPE2 (1) #define ACPI_CEDT_CFMWS_RESTRICT_TYPE3 (1<<1) #define ACPI_CEDT_CFMWS_RESTRICT_VOLATILE (1<<2) #define ACPI_CEDT_CFMWS_RESTRICT_PMEM (1<<3) #define ACPI_CEDT_CFMWS_RESTRICT_FIXED (1<<4) /* 2: CXL XOR Interleave Math Structure */ struct acpi_cedt_cxims { ACPI_CEDT_HEADER Header; UINT16 Reserved1; UINT8 Hbig; UINT8 NrXormaps; UINT64 XormapList[]; }; /* 3: CXL RCEC Downstream Port Association Structure */ struct acpi_cedt_rdpas { ACPI_CEDT_HEADER Header; UINT16 Segment; UINT16 Bdf; UINT8 Protocol; UINT64 Address; }; /* Masks for bdf field above */ #define ACPI_CEDT_RDPAS_BUS_MASK 0xff00 #define ACPI_CEDT_RDPAS_DEVICE_MASK 0x00f8 #define ACPI_CEDT_RDPAS_FUNCTION_MASK 0x0007 #define ACPI_CEDT_RDPAS_PROTOCOL_IO (0) #define ACPI_CEDT_RDPAS_PROTOCOL_CACHEMEM (1) /******************************************************************************* * * CPEP - Corrected Platform Error Polling table (ACPI 4.0) * Version 1 * ******************************************************************************/ typedef struct acpi_table_cpep { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT64 Reserved; } ACPI_TABLE_CPEP; /* Subtable */ typedef struct acpi_cpep_polling { ACPI_SUBTABLE_HEADER Header; UINT8 Id; /* Processor ID */ UINT8 Eid; /* Processor EID */ UINT32 Interval; /* Polling interval (msec) */ } ACPI_CPEP_POLLING; /******************************************************************************* * * CSRT - Core System Resource Table * Version 0 * * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 * ******************************************************************************/ typedef struct acpi_table_csrt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_CSRT; /* Resource Group subtable */ typedef struct acpi_csrt_group { UINT32 Length; UINT32 VendorId; UINT32 SubvendorId; UINT16 DeviceId; UINT16 SubdeviceId; UINT16 Revision; UINT16 Reserved; UINT32 SharedInfoLength; /* Shared data immediately follows (Length = SharedInfoLength) */ } ACPI_CSRT_GROUP; /* Shared Info subtable */ typedef struct acpi_csrt_shared_info { UINT16 MajorVersion; UINT16 MinorVersion; UINT32 MmioBaseLow; UINT32 MmioBaseHigh; UINT32 GsiInterrupt; UINT8 InterruptPolarity; UINT8 InterruptMode; UINT8 NumChannels; UINT8 DmaAddressWidth; UINT16 BaseRequestLine; UINT16 NumHandshakeSignals; UINT32 MaxBlockSize; /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */ } ACPI_CSRT_SHARED_INFO; /* Resource Descriptor subtable */ typedef struct acpi_csrt_descriptor { UINT32 Length; UINT16 Type; UINT16 Subtype; UINT32 Uid; /* Resource-specific information immediately follows */ } ACPI_CSRT_DESCRIPTOR; /* Resource Types */ #define ACPI_CSRT_TYPE_INTERRUPT 0x0001 #define ACPI_CSRT_TYPE_TIMER 0x0002 #define ACPI_CSRT_TYPE_DMA 0x0003 /* Resource Subtypes */ #define ACPI_CSRT_XRUPT_LINE 0x0000 #define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 #define ACPI_CSRT_TIMER 0x0000 #define ACPI_CSRT_DMA_CHANNEL 0x0000 #define ACPI_CSRT_DMA_CONTROLLER 0x0001 /******************************************************************************* * * DBG2 - Debug Port Table 2 * Version 0 (Both main table and subtables) * * Conforms to "Microsoft Debug Port Table 2 (DBG2)", September 21, 2020 * ******************************************************************************/ typedef struct acpi_table_dbg2 { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 InfoOffset; UINT32 InfoCount; } ACPI_TABLE_DBG2; typedef struct acpi_dbg2_header { UINT32 InfoOffset; UINT32 InfoCount; } ACPI_DBG2_HEADER; /* Debug Device Information Subtable */ typedef struct acpi_dbg2_device { UINT8 Revision; UINT16 Length; UINT8 RegisterCount; /* Number of BaseAddress registers */ UINT16 NamepathLength; UINT16 NamepathOffset; UINT16 OemDataLength; UINT16 OemDataOffset; UINT16 PortType; UINT16 PortSubtype; UINT16 Reserved; UINT16 BaseAddressOffset; UINT16 AddressSizeOffset; /* * Data that follows: * BaseAddress (required) - Each in 12-byte Generic Address Structure format. * AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register. * Namepath (required) - Null terminated string. Single dot if not supported. * OemData (optional) - Length is OemDataLength. */ } ACPI_DBG2_DEVICE; /* Types for PortType field above */ #define ACPI_DBG2_SERIAL_PORT 0x8000 #define ACPI_DBG2_1394_PORT 0x8001 #define ACPI_DBG2_USB_PORT 0x8002 #define ACPI_DBG2_NET_PORT 0x8003 /* Subtypes for PortSubtype field above */ #define ACPI_DBG2_16550_COMPATIBLE 0x0000 #define ACPI_DBG2_16550_SUBSET 0x0001 #define ACPI_DBG2_MAX311XE_SPI 0x0002 #define ACPI_DBG2_ARM_PL011 0x0003 #define ACPI_DBG2_MSM8X60 0x0004 #define ACPI_DBG2_16550_NVIDIA 0x0005 #define ACPI_DBG2_TI_OMAP 0x0006 #define ACPI_DBG2_APM88XXXX 0x0008 #define ACPI_DBG2_MSM8974 0x0009 #define ACPI_DBG2_SAM5250 0x000A #define ACPI_DBG2_INTEL_USIF 0x000B #define ACPI_DBG2_IMX6 0x000C #define ACPI_DBG2_ARM_SBSA_32BIT 0x000D #define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E #define ACPI_DBG2_ARM_DCC 0x000F #define ACPI_DBG2_BCM2835 0x0010 #define ACPI_DBG2_SDM845_1_8432MHZ 0x0011 #define ACPI_DBG2_16550_WITH_GAS 0x0012 #define ACPI_DBG2_SDM845_7_372MHZ 0x0013 #define ACPI_DBG2_INTEL_LPSS 0x0014 #define ACPI_DBG2_1394_STANDARD 0x0000 #define ACPI_DBG2_USB_XHCI 0x0000 #define ACPI_DBG2_USB_EHCI 0x0001 /******************************************************************************* * * DBGP - Debug Port table * Version 1 * * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 * ******************************************************************************/ typedef struct acpi_table_dbgp { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ UINT8 Reserved[3]; ACPI_GENERIC_ADDRESS DebugPort; } ACPI_TABLE_DBGP; /******************************************************************************* * * DMAR - DMA Remapping table * Version 1 * * Conforms to "Intel Virtualization Technology for Directed I/O", * Version 2.3, October 2014 * ******************************************************************************/ typedef struct acpi_table_dmar { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 Width; /* Host Address Width */ UINT8 Flags; UINT8 Reserved[10]; } ACPI_TABLE_DMAR; /* Masks for Flags field above */ #define ACPI_DMAR_INTR_REMAP (1) #define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) #define ACPI_DMAR_X2APIC_MODE (1<<2) /* DMAR subtable header */ typedef struct acpi_dmar_header { UINT16 Type; UINT16 Length; } ACPI_DMAR_HEADER; /* Values for subtable type in ACPI_DMAR_HEADER */ enum AcpiDmarType { ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, ACPI_DMAR_TYPE_ROOT_ATS = 2, ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, ACPI_DMAR_TYPE_NAMESPACE = 4, ACPI_DMAR_TYPE_SATC = 5, ACPI_DMAR_TYPE_RESERVED = 6 /* 6 and greater are reserved */ }; /* DMAR Device Scope structure */ typedef struct acpi_dmar_device_scope { UINT8 EntryType; UINT8 Length; UINT16 Reserved; UINT8 EnumerationId; UINT8 Bus; } ACPI_DMAR_DEVICE_SCOPE; /* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ enum AcpiDmarScopeType { ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, ACPI_DMAR_SCOPE_TYPE_HPET = 4, ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ }; typedef struct acpi_dmar_pci_path { UINT8 Device; UINT8 Function; } ACPI_DMAR_PCI_PATH; /* * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER */ /* 0: Hardware Unit Definition */ typedef struct acpi_dmar_hardware_unit { ACPI_DMAR_HEADER Header; UINT8 Flags; UINT8 Reserved; UINT16 Segment; UINT64 Address; /* Register Base Address */ } ACPI_DMAR_HARDWARE_UNIT; /* Masks for Flags field above */ #define ACPI_DMAR_INCLUDE_ALL (1) /* 1: Reserved Memory Definition */ typedef struct acpi_dmar_reserved_memory { ACPI_DMAR_HEADER Header; UINT16 Reserved; UINT16 Segment; UINT64 BaseAddress; /* 4K aligned base address */ UINT64 EndAddress; /* 4K aligned limit address */ } ACPI_DMAR_RESERVED_MEMORY; /* Masks for Flags field above */ #define ACPI_DMAR_ALLOW_ALL (1) /* 2: Root Port ATS Capability Reporting Structure */ typedef struct acpi_dmar_atsr { ACPI_DMAR_HEADER Header; UINT8 Flags; UINT8 Reserved; UINT16 Segment; } ACPI_DMAR_ATSR; /* Masks for Flags field above */ #define ACPI_DMAR_ALL_PORTS (1) /* 3: Remapping Hardware Static Affinity Structure */ typedef struct acpi_dmar_rhsa { ACPI_DMAR_HEADER Header; UINT32 Reserved; UINT64 BaseAddress; UINT32 ProximityDomain; } ACPI_DMAR_RHSA; /* 4: ACPI Namespace Device Declaration Structure */ typedef struct acpi_dmar_andd { ACPI_DMAR_HEADER Header; UINT8 Reserved[3]; UINT8 DeviceNumber; union { char __pad; ACPI_FLEX_ARRAY(char, DeviceName); }; } ACPI_DMAR_ANDD; /* 5: SoC Integrated Address Translation Cache (SATC) */ typedef struct acpi_dmar_satc { ACPI_DMAR_HEADER Header; UINT8 Flags; UINT8 Reserved; UINT16 Segment; } ACPI_DMAR_SATC ; /******************************************************************************* * * DRTM - Dynamic Root of Trust for Measurement table * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 * Table version 1 * ******************************************************************************/ typedef struct acpi_table_drtm { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT64 EntryBaseAddress; UINT64 EntryLength; UINT32 EntryAddress32; UINT64 EntryAddress64; UINT64 ExitAddress; UINT64 LogAreaAddress; UINT32 LogAreaLength; UINT64 ArchDependentAddress; UINT32 Flags; } ACPI_TABLE_DRTM; /* Flag Definitions for above */ #define ACPI_DRTM_ACCESS_ALLOWED (1) #define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) #define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) #define ACPI_DRTM_AUTHORITY_ORDER (1<<3) /* 1) Validated Tables List (64-bit addresses) */ typedef struct acpi_drtm_vtable_list { UINT32 ValidatedTableCount; UINT64 ValidatedTables[]; } ACPI_DRTM_VTABLE_LIST; /* 2) Resources List (of Resource Descriptors) */ /* Resource Descriptor */ typedef struct acpi_drtm_resource { UINT8 Size[7]; UINT8 Type; UINT64 Address; } ACPI_DRTM_RESOURCE; typedef struct acpi_drtm_resource_list { UINT32 ResourceCount; ACPI_DRTM_RESOURCE Resources[]; } ACPI_DRTM_RESOURCE_LIST; /* 3) Platform-specific Identifiers List */ typedef struct acpi_drtm_dps_id { UINT32 DpsIdLength; UINT8 DpsId[16]; } ACPI_DRTM_DPS_ID; /******************************************************************************* * * ECDT - Embedded Controller Boot Resources Table * Version 1 * ******************************************************************************/ typedef struct acpi_table_ecdt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ UINT8 Gpe; /* The GPE for the EC */ UINT8 Id[]; /* Full namepath of the EC in the ACPI namespace */ } ACPI_TABLE_ECDT; /******************************************************************************* * * EINJ - Error Injection Table (ACPI 4.0) * Version 1 * ******************************************************************************/ typedef struct acpi_table_einj { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 HeaderLength; UINT8 Flags; UINT8 Reserved[3]; UINT32 Entries; } ACPI_TABLE_EINJ; /* EINJ Injection Instruction Entries (actions) */ typedef struct acpi_einj_entry { ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ } ACPI_EINJ_ENTRY; /* Masks for Flags field above */ #define ACPI_EINJ_PRESERVE (1) /* Values for Action field above */ enum AcpiEinjActions { ACPI_EINJ_BEGIN_OPERATION = 0, ACPI_EINJ_GET_TRIGGER_TABLE = 1, ACPI_EINJ_SET_ERROR_TYPE = 2, ACPI_EINJ_GET_ERROR_TYPE = 3, ACPI_EINJ_END_OPERATION = 4, ACPI_EINJ_EXECUTE_OPERATION = 5, ACPI_EINJ_CHECK_BUSY_STATUS = 6, ACPI_EINJ_GET_COMMAND_STATUS = 7, ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ }; /* Values for Instruction field above */ enum AcpiEinjInstructions { ACPI_EINJ_READ_REGISTER = 0, ACPI_EINJ_READ_REGISTER_VALUE = 1, ACPI_EINJ_WRITE_REGISTER = 2, ACPI_EINJ_WRITE_REGISTER_VALUE = 3, ACPI_EINJ_NOOP = 4, ACPI_EINJ_FLUSH_CACHELINE = 5, ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ }; typedef struct acpi_einj_error_type_with_addr { UINT32 ErrorType; UINT32 VendorStructOffset; UINT32 Flags; UINT32 ApicId; UINT64 Address; UINT64 Range; UINT32 PcieId; } ACPI_EINJ_ERROR_TYPE_WITH_ADDR; typedef struct acpi_einj_vendor { UINT32 Length; UINT32 PcieId; UINT16 VendorId; UINT16 DeviceId; UINT8 RevisionId; UINT8 Reserved[3]; } ACPI_EINJ_VENDOR; /* EINJ Trigger Error Action Table */ typedef struct acpi_einj_trigger { UINT32 HeaderSize; UINT32 Revision; UINT32 TableSize; UINT32 EntryCount; } ACPI_EINJ_TRIGGER; /* Command status return values */ enum AcpiEinjCommandStatus { ACPI_EINJ_SUCCESS = 0, ACPI_EINJ_FAILURE = 1, ACPI_EINJ_INVALID_ACCESS = 2, ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ }; /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ #define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) #define ACPI_EINJ_PROCESSOR_FATAL (1<<2) #define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) #define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) #define ACPI_EINJ_MEMORY_FATAL (1<<5) #define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) #define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) #define ACPI_EINJ_PCIX_FATAL (1<<8) #define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) #define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) #define ACPI_EINJ_PLATFORM_FATAL (1<<11) #define ACPI_EINJ_CXL_CACHE_CORRECTABLE (1<<12) #define ACPI_EINJ_CXL_CACHE_UNCORRECTABLE (1<<13) #define ACPI_EINJ_CXL_CACHE_FATAL (1<<14) #define ACPI_EINJ_CXL_MEM_CORRECTABLE (1<<15) #define ACPI_EINJ_CXL_MEM_UNCORRECTABLE (1<<16) #define ACPI_EINJ_CXL_MEM_FATAL (1<<17) #define ACPI_EINJ_VENDOR_DEFINED (1<<31) /******************************************************************************* * * ERST - Error Record Serialization Table (ACPI 4.0) * Version 1 * ******************************************************************************/ typedef struct acpi_table_erst { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 HeaderLength; UINT32 Reserved; UINT32 Entries; } ACPI_TABLE_ERST; /* ERST Serialization Entries (actions) */ typedef struct acpi_erst_entry { ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ } ACPI_ERST_ENTRY; /* Masks for Flags field above */ #define ACPI_ERST_PRESERVE (1) /* Values for Action field above */ enum AcpiErstActions { ACPI_ERST_BEGIN_WRITE = 0, ACPI_ERST_BEGIN_READ = 1, ACPI_ERST_BEGIN_CLEAR = 2, ACPI_ERST_END = 3, ACPI_ERST_SET_RECORD_OFFSET = 4, ACPI_ERST_EXECUTE_OPERATION = 5, ACPI_ERST_CHECK_BUSY_STATUS = 6, ACPI_ERST_GET_COMMAND_STATUS = 7, ACPI_ERST_GET_RECORD_ID = 8, ACPI_ERST_SET_RECORD_ID = 9, ACPI_ERST_GET_RECORD_COUNT = 10, ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, ACPI_ERST_NOT_USED = 12, ACPI_ERST_GET_ERROR_RANGE = 13, ACPI_ERST_GET_ERROR_LENGTH = 14, ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, ACPI_ERST_EXECUTE_TIMINGS = 16, ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ }; /* Values for Instruction field above */ enum AcpiErstInstructions { ACPI_ERST_READ_REGISTER = 0, ACPI_ERST_READ_REGISTER_VALUE = 1, ACPI_ERST_WRITE_REGISTER = 2, ACPI_ERST_WRITE_REGISTER_VALUE = 3, ACPI_ERST_NOOP = 4, ACPI_ERST_LOAD_VAR1 = 5, ACPI_ERST_LOAD_VAR2 = 6, ACPI_ERST_STORE_VAR1 = 7, ACPI_ERST_ADD = 8, ACPI_ERST_SUBTRACT = 9, ACPI_ERST_ADD_VALUE = 10, ACPI_ERST_SUBTRACT_VALUE = 11, ACPI_ERST_STALL = 12, ACPI_ERST_STALL_WHILE_TRUE = 13, ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, ACPI_ERST_GOTO = 15, ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, ACPI_ERST_SET_DST_ADDRESS_BASE = 17, ACPI_ERST_MOVE_DATA = 18, ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ }; /* Command status return values */ enum AcpiErstCommandStatus { ACPI_ERST_SUCCESS = 0, ACPI_ERST_NO_SPACE = 1, ACPI_ERST_NOT_AVAILABLE = 2, ACPI_ERST_FAILURE = 3, ACPI_ERST_RECORD_EMPTY = 4, ACPI_ERST_NOT_FOUND = 5, ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ }; /* Error Record Serialization Information */ typedef struct acpi_erst_info { UINT16 Signature; /* Should be "ER" */ UINT8 Data[48]; } ACPI_ERST_INFO; /******************************************************************************* * * FPDT - Firmware Performance Data Table (ACPI 5.0) * Version 1 * ******************************************************************************/ typedef struct acpi_table_fpdt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_FPDT; /* FPDT subtable header (Performance Record Structure) */ typedef struct acpi_fpdt_header { UINT16 Type; UINT8 Length; UINT8 Revision; } ACPI_FPDT_HEADER; /* Values for Type field above */ enum AcpiFpdtType { ACPI_FPDT_TYPE_BOOT = 0, ACPI_FPDT_TYPE_S3PERF = 1 }; /* * FPDT subtables */ /* 0: Firmware Basic Boot Performance Record */ typedef struct acpi_fpdt_boot_pointer { ACPI_FPDT_HEADER Header; UINT8 Reserved[4]; UINT64 Address; } ACPI_FPDT_BOOT_POINTER; /* 1: S3 Performance Table Pointer Record */ typedef struct acpi_fpdt_s3pt_pointer { ACPI_FPDT_HEADER Header; UINT8 Reserved[4]; UINT64 Address; } ACPI_FPDT_S3PT_POINTER; /* * S3PT - S3 Performance Table. This table is pointed to by the * S3 Pointer Record above. */ typedef struct acpi_table_s3pt { UINT8 Signature[4]; /* "S3PT" */ UINT32 Length; } ACPI_TABLE_S3PT; /* * S3PT Subtables (Not part of the actual FPDT) */ /* Values for Type field in S3PT header */ enum AcpiS3ptType { ACPI_S3PT_TYPE_RESUME = 0, ACPI_S3PT_TYPE_SUSPEND = 1, ACPI_FPDT_BOOT_PERFORMANCE = 2 }; typedef struct acpi_s3pt_resume { ACPI_FPDT_HEADER Header; UINT32 ResumeCount; UINT64 FullResume; UINT64 AverageResume; } ACPI_S3PT_RESUME; typedef struct acpi_s3pt_suspend { ACPI_FPDT_HEADER Header; UINT64 SuspendStart; UINT64 SuspendEnd; } ACPI_S3PT_SUSPEND; /* * FPDT Boot Performance Record (Not part of the actual FPDT) */ typedef struct acpi_fpdt_boot { ACPI_FPDT_HEADER Header; UINT8 Reserved[4]; UINT64 ResetEnd; UINT64 LoadStart; UINT64 StartupStart; UINT64 ExitServicesEntry; UINT64 ExitServicesExit; } ACPI_FPDT_BOOT; /******************************************************************************* * * GTDT - Generic Timer Description Table (ACPI 5.1) * Version 2 * ******************************************************************************/ typedef struct acpi_table_gtdt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT64 CounterBlockAddresss; UINT32 Reserved; UINT32 SecureEl1Interrupt; UINT32 SecureEl1Flags; UINT32 NonSecureEl1Interrupt; UINT32 NonSecureEl1Flags; UINT32 VirtualTimerInterrupt; UINT32 VirtualTimerFlags; UINT32 NonSecureEl2Interrupt; UINT32 NonSecureEl2Flags; UINT64 CounterReadBlockAddress; UINT32 PlatformTimerCount; UINT32 PlatformTimerOffset; } ACPI_TABLE_GTDT; /* Flag Definitions: Timer Block Physical Timers and Virtual timers */ #define ACPI_GTDT_INTERRUPT_MODE (1) #define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) #define ACPI_GTDT_ALWAYS_ON (1<<2) typedef struct acpi_gtdt_el2 { UINT32 VirtualEL2TimerGsiv; UINT32 VirtualEL2TimerFlags; } ACPI_GTDT_EL2; /* Common GTDT subtable header */ typedef struct acpi_gtdt_header { UINT8 Type; UINT16 Length; } ACPI_GTDT_HEADER; /* Values for GTDT subtable type above */ enum AcpiGtdtType { ACPI_GTDT_TYPE_TIMER_BLOCK = 0, ACPI_GTDT_TYPE_WATCHDOG = 1, ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ }; /* GTDT Subtables, correspond to Type in acpi_gtdt_header */ /* 0: Generic Timer Block */ typedef struct acpi_gtdt_timer_block { ACPI_GTDT_HEADER Header; UINT8 Reserved; UINT64 BlockAddress; UINT32 TimerCount; UINT32 TimerOffset; } ACPI_GTDT_TIMER_BLOCK; /* Timer Sub-Structure, one per timer */ typedef struct acpi_gtdt_timer_entry { UINT8 FrameNumber; UINT8 Reserved[3]; UINT64 BaseAddress; UINT64 El0BaseAddress; UINT32 TimerInterrupt; UINT32 TimerFlags; UINT32 VirtualTimerInterrupt; UINT32 VirtualTimerFlags; UINT32 CommonFlags; } ACPI_GTDT_TIMER_ENTRY; /* Flag Definitions: TimerFlags and VirtualTimerFlags above */ #define ACPI_GTDT_GT_IRQ_MODE (1) #define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) /* Flag Definitions: CommonFlags above */ #define ACPI_GTDT_GT_IS_SECURE_TIMER (1) #define ACPI_GTDT_GT_ALWAYS_ON (1<<1) /* 1: SBSA Generic Watchdog Structure */ typedef struct acpi_gtdt_watchdog { ACPI_GTDT_HEADER Header; UINT8 Reserved; UINT64 RefreshFrameAddress; UINT64 ControlFrameAddress; UINT32 TimerInterrupt; UINT32 TimerFlags; } ACPI_GTDT_WATCHDOG; /* Flag Definitions: TimerFlags above */ #define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) #define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) #define ACPI_GTDT_WATCHDOG_SECURE (1<<2) /******************************************************************************* * * HEST - Hardware Error Source Table (ACPI 4.0) * Version 1 * ******************************************************************************/ typedef struct acpi_table_hest { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 ErrorSourceCount; } ACPI_TABLE_HEST; /* HEST subtable header */ typedef struct acpi_hest_header { UINT16 Type; UINT16 SourceId; } ACPI_HEST_HEADER; /* Values for Type field above for subtables */ enum AcpiHestTypes { ACPI_HEST_TYPE_IA32_CHECK = 0, ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, ACPI_HEST_TYPE_IA32_NMI = 2, ACPI_HEST_TYPE_NOT_USED3 = 3, ACPI_HEST_TYPE_NOT_USED4 = 4, ACPI_HEST_TYPE_NOT_USED5 = 5, ACPI_HEST_TYPE_AER_ROOT_PORT = 6, ACPI_HEST_TYPE_AER_ENDPOINT = 7, ACPI_HEST_TYPE_AER_BRIDGE = 8, ACPI_HEST_TYPE_GENERIC_ERROR = 9, ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ }; /* * HEST substructures contained in subtables */ /* * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and * ACPI_HEST_IA_CORRECTED structures. */ typedef struct acpi_hest_ia_error_bank { UINT8 BankNumber; UINT8 ClearStatusOnInit; UINT8 StatusFormat; UINT8 Reserved; UINT32 ControlRegister; UINT64 ControlData; UINT32 StatusRegister; UINT32 AddressRegister; UINT32 MiscRegister; } ACPI_HEST_IA_ERROR_BANK; /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ typedef struct acpi_hest_aer_common { UINT16 Reserved1; UINT8 Flags; UINT8 Enabled; UINT32 RecordsToPreallocate; UINT32 MaxSectionsPerRecord; UINT32 Bus; /* Bus and Segment numbers */ UINT16 Device; UINT16 Function; UINT16 DeviceControl; UINT16 Reserved2; UINT32 UncorrectableMask; UINT32 UncorrectableSeverity; UINT32 CorrectableMask; UINT32 AdvancedCapabilities; } ACPI_HEST_AER_COMMON; /* Masks for HEST Flags fields */ #define ACPI_HEST_FIRMWARE_FIRST (1) #define ACPI_HEST_GLOBAL (1<<1) #define ACPI_HEST_GHES_ASSIST (1<<2) /* * Macros to access the bus/segment numbers in Bus field above: * Bus number is encoded in bits 7:0 * Segment number is encoded in bits 23:8 */ #define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) #define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) /* Hardware Error Notification */ typedef struct acpi_hest_notify { UINT8 Type; UINT8 Length; UINT16 ConfigWriteEnable; UINT32 PollInterval; UINT32 Vector; UINT32 PollingThresholdValue; UINT32 PollingThresholdWindow; UINT32 ErrorThresholdValue; UINT32 ErrorThresholdWindow; } ACPI_HEST_NOTIFY; /* Values for Notify Type field above */ enum AcpiHestNotifyTypes { ACPI_HEST_NOTIFY_POLLED = 0, ACPI_HEST_NOTIFY_EXTERNAL = 1, ACPI_HEST_NOTIFY_LOCAL = 2, ACPI_HEST_NOTIFY_SCI = 3, ACPI_HEST_NOTIFY_NMI = 4, ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ }; /* Values for ConfigWriteEnable bitfield above */ #define ACPI_HEST_TYPE (1) #define ACPI_HEST_POLL_INTERVAL (1<<1) #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) /* * HEST subtables */ /* 0: IA32 Machine Check Exception */ typedef struct acpi_hest_ia_machine_check { ACPI_HEST_HEADER Header; UINT16 Reserved1; UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ UINT8 Enabled; UINT32 RecordsToPreallocate; UINT32 MaxSectionsPerRecord; UINT64 GlobalCapabilityData; UINT64 GlobalControlData; UINT8 NumHardwareBanks; UINT8 Reserved3[7]; } ACPI_HEST_IA_MACHINE_CHECK; /* 1: IA32 Corrected Machine Check */ typedef struct acpi_hest_ia_corrected { ACPI_HEST_HEADER Header; UINT16 Reserved1; UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ UINT8 Enabled; UINT32 RecordsToPreallocate; UINT32 MaxSectionsPerRecord; ACPI_HEST_NOTIFY Notify; UINT8 NumHardwareBanks; UINT8 Reserved2[3]; } ACPI_HEST_IA_CORRECTED; /* 2: IA32 Non-Maskable Interrupt */ typedef struct acpi_hest_ia_nmi { ACPI_HEST_HEADER Header; UINT32 Reserved; UINT32 RecordsToPreallocate; UINT32 MaxSectionsPerRecord; UINT32 MaxRawDataLength; } ACPI_HEST_IA_NMI; /* 3,4,5: Not used */ /* 6: PCI Express Root Port AER */ typedef struct acpi_hest_aer_root { ACPI_HEST_HEADER Header; ACPI_HEST_AER_COMMON Aer; UINT32 RootErrorCommand; } ACPI_HEST_AER_ROOT; /* 7: PCI Express AER (AER Endpoint) */ typedef struct acpi_hest_aer { ACPI_HEST_HEADER Header; ACPI_HEST_AER_COMMON Aer; } ACPI_HEST_AER; /* 8: PCI Express/PCI-X Bridge AER */ typedef struct acpi_hest_aer_bridge { ACPI_HEST_HEADER Header; ACPI_HEST_AER_COMMON Aer; UINT32 UncorrectableMask2; UINT32 UncorrectableSeverity2; UINT32 AdvancedCapabilities2; } ACPI_HEST_AER_BRIDGE; /* 9: Generic Hardware Error Source */ typedef struct acpi_hest_generic { ACPI_HEST_HEADER Header; UINT16 RelatedSourceId; UINT8 Reserved; UINT8 Enabled; UINT32 RecordsToPreallocate; UINT32 MaxSectionsPerRecord; UINT32 MaxRawDataLength; ACPI_GENERIC_ADDRESS ErrorStatusAddress; ACPI_HEST_NOTIFY Notify; UINT32 ErrorBlockLength; } ACPI_HEST_GENERIC; /* 10: Generic Hardware Error Source, version 2 */ typedef struct acpi_hest_generic_v2 { ACPI_HEST_HEADER Header; UINT16 RelatedSourceId; UINT8 Reserved; UINT8 Enabled; UINT32 RecordsToPreallocate; UINT32 MaxSectionsPerRecord; UINT32 MaxRawDataLength; ACPI_GENERIC_ADDRESS ErrorStatusAddress; ACPI_HEST_NOTIFY Notify; UINT32 ErrorBlockLength; ACPI_GENERIC_ADDRESS ReadAckRegister; UINT64 ReadAckPreserve; UINT64 ReadAckWrite; } ACPI_HEST_GENERIC_V2; /* Generic Error Status block */ typedef struct acpi_hest_generic_status { UINT32 BlockStatus; UINT32 RawDataOffset; UINT32 RawDataLength; UINT32 DataLength; UINT32 ErrorSeverity; } ACPI_HEST_GENERIC_STATUS; /* Values for BlockStatus flags above */ #define ACPI_HEST_UNCORRECTABLE (1) #define ACPI_HEST_CORRECTABLE (1<<1) #define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) #define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) #define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ /* Generic Error Data entry */ typedef struct acpi_hest_generic_data { UINT8 SectionType[16]; UINT32 ErrorSeverity; UINT16 Revision; UINT8 ValidationBits; UINT8 Flags; UINT32 ErrorDataLength; UINT8 FruId[16]; UINT8 FruText[20]; } ACPI_HEST_GENERIC_DATA; /* Extension for revision 0x0300 */ typedef struct acpi_hest_generic_data_v300 { UINT8 SectionType[16]; UINT32 ErrorSeverity; UINT16 Revision; UINT8 ValidationBits; UINT8 Flags; UINT32 ErrorDataLength; UINT8 FruId[16]; UINT8 FruText[20]; UINT64 TimeStamp; } ACPI_HEST_GENERIC_DATA_V300; /* Values for ErrorSeverity above */ #define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 #define ACPI_HEST_GEN_ERROR_FATAL 1 #define ACPI_HEST_GEN_ERROR_CORRECTED 2 #define ACPI_HEST_GEN_ERROR_NONE 3 /* Flags for ValidationBits above */ #define ACPI_HEST_GEN_VALID_FRU_ID (1) #define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) #define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) /* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ typedef struct acpi_hest_ia_deferred_check { ACPI_HEST_HEADER Header; UINT16 Reserved1; UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ UINT8 Enabled; UINT32 RecordsToPreallocate; UINT32 MaxSectionsPerRecord; ACPI_HEST_NOTIFY Notify; UINT8 NumHardwareBanks; UINT8 Reserved2[3]; } ACPI_HEST_IA_DEFERRED_CHECK; /******************************************************************************* * * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.3) * ******************************************************************************/ typedef struct acpi_table_hmat { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 Reserved; } ACPI_TABLE_HMAT; /* Values for HMAT structure types */ enum AcpiHmatType { ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subsystem address range */ ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ }; typedef struct acpi_hmat_structure { UINT16 Type; UINT16 Reserved; UINT32 Length; } ACPI_HMAT_STRUCTURE; /* * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE */ /* 0: Memory proximity domain attributes */ typedef struct acpi_hmat_proximity_domain { ACPI_HMAT_STRUCTURE Header; UINT16 Flags; UINT16 Reserved1; UINT32 InitiatorPD; /* Attached Initiator proximity domain */ UINT32 MemoryPD; /* Memory proximity domain */ UINT32 Reserved2; UINT64 Reserved3; UINT64 Reserved4; } ACPI_HMAT_PROXIMITY_DOMAIN; /* Masks for Flags field above */ #define ACPI_HMAT_INITIATOR_PD_VALID (1) /* 1: InitiatorPD field is valid */ /* 1: System locality latency and bandwidth information */ typedef struct acpi_hmat_locality { ACPI_HMAT_STRUCTURE Header; UINT8 Flags; UINT8 DataType; UINT8 MinTransferSize; UINT8 Reserved1; UINT32 NumberOfInitiatorPDs; UINT32 NumberOfTargetPDs; UINT32 Reserved2; UINT64 EntryBaseUnit; } ACPI_HMAT_LOCALITY; /* Masks for Flags field above */ #define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) /* Bits 0-3 */ /* Values for Memory Hierarchy flags */ #define ACPI_HMAT_MEMORY 0 #define ACPI_HMAT_1ST_LEVEL_CACHE 1 #define ACPI_HMAT_2ND_LEVEL_CACHE 2 #define ACPI_HMAT_3RD_LEVEL_CACHE 3 #define ACPI_HMAT_MINIMUM_XFER_SIZE 0x10 /* Bit 4: ACPI 6.4 */ #define ACPI_HMAT_NON_SEQUENTIAL_XFERS 0x20 /* Bit 5: ACPI 6.4 */ /* Values for DataType field above */ #define ACPI_HMAT_ACCESS_LATENCY 0 #define ACPI_HMAT_READ_LATENCY 1 #define ACPI_HMAT_WRITE_LATENCY 2 #define ACPI_HMAT_ACCESS_BANDWIDTH 3 #define ACPI_HMAT_READ_BANDWIDTH 4 #define ACPI_HMAT_WRITE_BANDWIDTH 5 /* 2: Memory side cache information */ typedef struct acpi_hmat_cache { ACPI_HMAT_STRUCTURE Header; UINT32 MemoryPD; UINT32 Reserved1; UINT64 CacheSize; UINT32 CacheAttributes; UINT16 Reserved2; UINT16 NumberOfSMBIOSHandles; } ACPI_HMAT_CACHE; /* Masks for CacheAttributes field above */ #define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) #define ACPI_HMAT_CACHE_LEVEL (0x000000F0) #define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) #define ACPI_HMAT_WRITE_POLICY (0x0000F000) #define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) /* Values for cache associativity flag */ #define ACPI_HMAT_CA_NONE (0) #define ACPI_HMAT_CA_DIRECT_MAPPED (1) #define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) /* Values for write policy flag */ #define ACPI_HMAT_CP_NONE (0) #define ACPI_HMAT_CP_WB (1) #define ACPI_HMAT_CP_WT (2) /******************************************************************************* * * HPET - High Precision Event Timer table * Version 1 * * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", * Version 1.0a, October 2004 * ******************************************************************************/ typedef struct acpi_table_hpet { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 Id; /* Hardware ID of event timer block */ ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ UINT8 Sequence; /* HPET sequence number */ UINT16 MinimumTick; /* Main counter min tick, periodic mode */ UINT8 Flags; } ACPI_TABLE_HPET; /* Masks for Flags field above */ #define ACPI_HPET_PAGE_PROTECT_MASK (3) /* Values for Page Protect flags */ enum AcpiHpetPageProtect { ACPI_HPET_NO_PAGE_PROTECT = 0, ACPI_HPET_PAGE_PROTECT4 = 1, ACPI_HPET_PAGE_PROTECT64 = 2 }; /******************************************************************************* * * IBFT - Boot Firmware Table * Version 1 * * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b * Specification", Version 1.01, March 1, 2007 * * Note: It appears that this table is not intended to appear in the RSDT/XSDT. * Therefore, it is not currently supported by the disassembler. * ******************************************************************************/ typedef struct acpi_table_ibft { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 Reserved[12]; } ACPI_TABLE_IBFT; /* IBFT common subtable header */ typedef struct acpi_ibft_header { UINT8 Type; UINT8 Version; UINT16 Length; UINT8 Index; UINT8 Flags; } ACPI_IBFT_HEADER; /* Values for Type field above */ enum AcpiIbftType { ACPI_IBFT_TYPE_NOT_USED = 0, ACPI_IBFT_TYPE_CONTROL = 1, ACPI_IBFT_TYPE_INITIATOR = 2, ACPI_IBFT_TYPE_NIC = 3, ACPI_IBFT_TYPE_TARGET = 4, ACPI_IBFT_TYPE_EXTENSIONS = 5, ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ }; /* IBFT subtables */ typedef struct acpi_ibft_control { ACPI_IBFT_HEADER Header; UINT16 Extensions; UINT16 InitiatorOffset; UINT16 Nic0Offset; UINT16 Target0Offset; UINT16 Nic1Offset; UINT16 Target1Offset; } ACPI_IBFT_CONTROL; typedef struct acpi_ibft_initiator { ACPI_IBFT_HEADER Header; UINT8 SnsServer[16]; UINT8 SlpServer[16]; UINT8 PrimaryServer[16]; UINT8 SecondaryServer[16]; UINT16 NameLength; UINT16 NameOffset; } ACPI_IBFT_INITIATOR; typedef struct acpi_ibft_nic { ACPI_IBFT_HEADER Header; UINT8 IpAddress[16]; UINT8 SubnetMaskPrefix; UINT8 Origin; UINT8 Gateway[16]; UINT8 PrimaryDns[16]; UINT8 SecondaryDns[16]; UINT8 Dhcp[16]; UINT16 Vlan; UINT8 MacAddress[6]; UINT16 PciAddress; UINT16 NameLength; UINT16 NameOffset; } ACPI_IBFT_NIC; typedef struct acpi_ibft_target { ACPI_IBFT_HEADER Header; UINT8 TargetIpAddress[16]; UINT16 TargetIpSocket; UINT8 TargetBootLun[8]; UINT8 ChapType; UINT8 NicAssociation; UINT16 TargetNameLength; UINT16 TargetNameOffset; UINT16 ChapNameLength; UINT16 ChapNameOffset; UINT16 ChapSecretLength; UINT16 ChapSecretOffset; UINT16 ReverseChapNameLength; UINT16 ReverseChapNameOffset; UINT16 ReverseChapSecretLength; UINT16 ReverseChapSecretOffset; } ACPI_IBFT_TARGET; /* Reset to default packing */ #pragma pack() #endif /* __ACTBL1_H__ */ src/acpica/source/include/actbl2.h000066400000000000000000003440401465205512700173440ustar00rootroot00000000000000/****************************************************************************** * * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec) * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACTBL2_H__ #define __ACTBL2_H__ /******************************************************************************* * * Additional ACPI Tables (2) * * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * ******************************************************************************/ /* * Values for description table header signatures for tables defined in this * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ #define ACPI_SIG_AGDI "AGDI" /* Arm Generic Diagnostic Dump and Reset Device Interface */ #define ACPI_SIG_APMT "APMT" /* Arm Performance Monitoring Unit table */ #define ACPI_SIG_BDAT "BDAT" /* BIOS Data ACPI Table */ #define ACPI_SIG_CCEL "CCEL" /* CC Event Log Table */ #define ACPI_SIG_CDAT "CDAT" /* Coherent Device Attribute Table */ #define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ #define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ #define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ #define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ #define ACPI_SIG_MPAM "MPAM" /* Memory System Resource Partitioning and Monitoring Table */ #define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ #define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ #define ACPI_SIG_NHLT "NHLT" /* Non HD Audio Link Table */ #define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ #define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ #define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */ #define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ #define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ #define ACPI_SIG_PRMT "PRMT" /* Platform Runtime Mechanism Table */ #define ACPI_SIG_RASF "RASF" /* RAS Feature table */ #define ACPI_SIG_RAS2 "RAS2" /* RAS2 Feature table */ #define ACPI_SIG_RGRT "RGRT" /* Regulatory Graphics Resource Table */ #define ACPI_SIG_RHCT "RHCT" /* RISC-V Hart Capabilities Table */ #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ #define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ #define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */ #define ACPI_SIG_TDEL "TDEL" /* TD Event Log Table */ /* * All tables must be byte-packed to match the ACPI specification, since * the tables are provided by the system BIOS. */ #pragma pack(1) /* * Note: C bitfields are not used for this reason: * * "Bitfields are great and easy to read, but unfortunately the C language * does not specify the layout of bitfields in memory, which means they are * essentially useless for dealing with packed data in on-disk formats or * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, * this decision was a design error in C. Ritchie could have picked an order * and stuck with it." Norman Ramsey. * See http://stackoverflow.com/a/1053662/41661 */ /******************************************************************************* * * AEST - Arm Error Source Table * * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document * September 2020. * ******************************************************************************/ typedef struct acpi_table_aest { ACPI_TABLE_HEADER Header; } ACPI_TABLE_AEST; /* Common Subtable header - one per Node Structure (Subtable) */ typedef struct acpi_aest_hdr { UINT8 Type; UINT16 Length; UINT8 Reserved; UINT32 NodeSpecificOffset; UINT32 NodeInterfaceOffset; UINT32 NodeInterruptOffset; UINT32 NodeInterruptCount; UINT64 TimestampRate; UINT64 Reserved1; UINT64 ErrorInjectionRate; } ACPI_AEST_HEADER; /* Values for Type above */ #define ACPI_AEST_PROCESSOR_ERROR_NODE 0 #define ACPI_AEST_MEMORY_ERROR_NODE 1 #define ACPI_AEST_SMMU_ERROR_NODE 2 #define ACPI_AEST_VENDOR_ERROR_NODE 3 #define ACPI_AEST_GIC_ERROR_NODE 4 #define ACPI_AEST_NODE_TYPE_RESERVED 5 /* 5 and above are reserved */ /* * AEST subtables (Error nodes) */ /* 0: Processor Error */ typedef struct acpi_aest_processor { UINT32 ProcessorId; UINT8 ResourceType; UINT8 Reserved; UINT8 Flags; UINT8 Revision; UINT64 ProcessorAffinity; } ACPI_AEST_PROCESSOR; /* Values for ResourceType above, related structs below */ #define ACPI_AEST_CACHE_RESOURCE 0 #define ACPI_AEST_TLB_RESOURCE 1 #define ACPI_AEST_GENERIC_RESOURCE 2 #define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */ /* 0R: Processor Cache Resource Substructure */ typedef struct acpi_aest_processor_cache { UINT32 CacheReference; UINT32 Reserved; } ACPI_AEST_PROCESSOR_CACHE; /* Values for CacheType above */ #define ACPI_AEST_CACHE_DATA 0 #define ACPI_AEST_CACHE_INSTRUCTION 1 #define ACPI_AEST_CACHE_UNIFIED 2 #define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */ /* 1R: Processor TLB Resource Substructure */ typedef struct acpi_aest_processor_tlb { UINT32 TlbLevel; UINT32 Reserved; } ACPI_AEST_PROCESSOR_TLB; /* 2R: Processor Generic Resource Substructure */ typedef struct acpi_aest_processor_generic { UINT32 Resource; } ACPI_AEST_PROCESSOR_GENERIC; /* 1: Memory Error */ typedef struct acpi_aest_memory { UINT32 SratProximityDomain; } ACPI_AEST_MEMORY; /* 2: Smmu Error */ typedef struct acpi_aest_smmu { UINT32 IortNodeReference; UINT32 SubcomponentReference; } ACPI_AEST_SMMU; /* 3: Vendor Defined */ typedef struct acpi_aest_vendor { UINT32 AcpiHid; UINT32 AcpiUid; UINT8 VendorSpecificData[16]; } ACPI_AEST_VENDOR; /* 4: Gic Error */ typedef struct acpi_aest_gic { UINT32 InterfaceType; UINT32 InstanceId; } ACPI_AEST_GIC; /* Values for InterfaceType above */ #define ACPI_AEST_GIC_CPU 0 #define ACPI_AEST_GIC_DISTRIBUTOR 1 #define ACPI_AEST_GIC_REDISTRIBUTOR 2 #define ACPI_AEST_GIC_ITS 3 #define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */ /* Node Interface Structure */ typedef struct acpi_aest_node_interface { UINT8 Type; UINT8 Reserved[3]; UINT32 Flags; UINT64 Address; UINT32 ErrorRecordIndex; UINT32 ErrorRecordCount; UINT64 ErrorRecordImplemented; UINT64 ErrorStatusReporting; UINT64 AddressingMode; } ACPI_AEST_NODE_INTERFACE; /* Values for Type field above */ #define ACPI_AEST_NODE_SYSTEM_REGISTER 0 #define ACPI_AEST_NODE_MEMORY_MAPPED 1 #define ACPI_AEST_XFACE_RESERVED 2 /* 2 and above are reserved */ /* Node Interrupt Structure */ typedef struct acpi_aest_node_interrupt { UINT8 Type; UINT8 Reserved[2]; UINT8 Flags; UINT32 Gsiv; UINT8 IortId; UINT8 Reserved1[3]; } ACPI_AEST_NODE_INTERRUPT; /* Values for Type field above */ #define ACPI_AEST_NODE_FAULT_HANDLING 0 #define ACPI_AEST_NODE_ERROR_RECOVERY 1 #define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */ /******************************************************************************* * AGDI - Arm Generic Diagnostic Dump and Reset Device Interface * * Conforms to "ACPI for Arm Components 1.1, Platform Design Document" * ARM DEN0093 v1.1 * ******************************************************************************/ typedef struct acpi_table_agdi { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 Flags; UINT8 Reserved[3]; UINT32 SdeiEvent; UINT32 Gsiv; } ACPI_TABLE_AGDI; /* Mask for Flags field above */ #define ACPI_AGDI_SIGNALING_MODE (1) /******************************************************************************* * * APMT - ARM Performance Monitoring Unit Table * * Conforms to: * ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document * ARM DEN0117 v1.0 November 25, 2021 * ******************************************************************************/ typedef struct acpi_table_apmt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_APMT; #define ACPI_APMT_NODE_ID_LENGTH 4 /* * APMT subtables */ typedef struct acpi_apmt_node { UINT16 Length; UINT8 Flags; UINT8 Type; UINT32 Id; UINT64 InstPrimary; UINT32 InstSecondary; UINT64 BaseAddress0; UINT64 BaseAddress1; UINT32 OvflwIrq; UINT32 Reserved; UINT32 OvflwIrqFlags; UINT32 ProcAffinity; UINT32 ImplId; } ACPI_APMT_NODE; /* Masks for Flags field above */ #define ACPI_APMT_FLAGS_DUAL_PAGE (1<<0) #define ACPI_APMT_FLAGS_AFFINITY (1<<1) #define ACPI_APMT_FLAGS_ATOMIC (1<<2) /* Values for Flags dual page field above */ #define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP (0<<0) #define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP (1<<0) /* Values for Flags processor affinity field above */ #define ACPI_APMT_FLAGS_AFFINITY_PROC (0<<1) #define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1) /* Values for Flags 64-bit atomic field above */ #define ACPI_APMT_FLAGS_ATOMIC_NSUPP (0<<2) #define ACPI_APMT_FLAGS_ATOMIC_SUPP (1<<2) /* Values for Type field above */ enum acpi_apmt_node_type { ACPI_APMT_NODE_TYPE_MC = 0x00, ACPI_APMT_NODE_TYPE_SMMU = 0x01, ACPI_APMT_NODE_TYPE_PCIE_ROOT = 0x02, ACPI_APMT_NODE_TYPE_ACPI = 0x03, ACPI_APMT_NODE_TYPE_CACHE = 0x04, ACPI_APMT_NODE_TYPE_COUNT }; /* Masks for ovflw_irq_flags field above */ #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE (1<<0) #define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE (1<<1) /* Values for ovflw_irq_flags mode field above */ #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL (0<<0) #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE (1<<0) /* Values for ovflw_irq_flags type field above */ #define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED (0<<1) /******************************************************************************* * * BDAT - BIOS Data ACPI Table * * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5 * Nov 2020 * ******************************************************************************/ typedef struct acpi_table_bdat { ACPI_TABLE_HEADER Header; ACPI_GENERIC_ADDRESS Gas; } ACPI_TABLE_BDAT; /******************************************************************************* * * CCEL - CC-Event Log * From: "Guest-Host-Communication Interface (GHCI) for Intel * Trust Domain Extensions (Intel TDX)". Feb 2022 * ******************************************************************************/ typedef struct acpi_table_ccel { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 CCType; UINT8 CCSubType; UINT16 Reserved; UINT64 LogAreaMinimumLength; UINT64 LogAreaStartAddress; } ACPI_TABLE_CCEL; /******************************************************************************* * * IORT - IO Remapping Table * * Conforms to "IO Remapping Table System Software on ARM Platforms", * Document number: ARM DEN 0049E.e, Sep 2022 * ******************************************************************************/ typedef struct acpi_table_iort { ACPI_TABLE_HEADER Header; UINT32 NodeCount; UINT32 NodeOffset; UINT32 Reserved; } ACPI_TABLE_IORT; /* * IORT subtables */ typedef struct acpi_iort_node { UINT8 Type; UINT16 Length; UINT8 Revision; UINT32 Identifier; UINT32 MappingCount; UINT32 MappingOffset; char NodeData[]; } ACPI_IORT_NODE; /* Values for subtable Type above */ enum AcpiIortNodeType { ACPI_IORT_NODE_ITS_GROUP = 0x00, ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, ACPI_IORT_NODE_SMMU = 0x03, ACPI_IORT_NODE_SMMU_V3 = 0x04, ACPI_IORT_NODE_PMCG = 0x05, ACPI_IORT_NODE_RMR = 0x06, }; typedef struct acpi_iort_id_mapping { UINT32 InputBase; /* Lowest value in input range */ UINT32 IdCount; /* Number of IDs */ UINT32 OutputBase; /* Lowest value in output range */ UINT32 OutputReference; /* A reference to the output node */ UINT32 Flags; } ACPI_IORT_ID_MAPPING; /* Masks for Flags field above for IORT subtable */ #define ACPI_IORT_ID_SINGLE_MAPPING (1) typedef struct acpi_iort_memory_access { UINT32 CacheCoherency; UINT8 Hints; UINT16 Reserved; UINT8 MemoryFlags; } ACPI_IORT_MEMORY_ACCESS; /* Values for CacheCoherency field above */ #define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ #define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ /* Masks for Hints field above */ #define ACPI_IORT_HT_TRANSIENT (1) #define ACPI_IORT_HT_WRITE (1<<1) #define ACPI_IORT_HT_READ (1<<2) #define ACPI_IORT_HT_OVERRIDE (1<<3) /* Masks for MemoryFlags field above */ #define ACPI_IORT_MF_COHERENCY (1) #define ACPI_IORT_MF_ATTRIBUTES (1<<1) /* * IORT node specific subtables */ typedef struct acpi_iort_its_group { UINT32 ItsCount; UINT32 Identifiers[]; /* GIC ITS identifier array */ } ACPI_IORT_ITS_GROUP; typedef struct acpi_iort_named_component { UINT32 NodeFlags; UINT64 MemoryProperties; /* Memory access properties */ UINT8 MemoryAddressLimit; /* Memory address size limit */ char DeviceName[]; /* Path of namespace object */ } ACPI_IORT_NAMED_COMPONENT; /* Masks for Flags field above */ #define ACPI_IORT_NC_STALL_SUPPORTED (1) #define ACPI_IORT_NC_PASID_BITS (31<<1) typedef struct acpi_iort_root_complex { UINT64 MemoryProperties; /* Memory access properties */ UINT32 AtsAttribute; UINT32 PciSegmentNumber; UINT8 MemoryAddressLimit; /* Memory address size limit */ UINT16 PasidCapabilities; /* PASID Capabilities */ UINT8 Reserved[]; /* Reserved, must be zero */ } ACPI_IORT_ROOT_COMPLEX; /* Masks for AtsAttribute field above */ #define ACPI_IORT_ATS_SUPPORTED (1) /* The root complex ATS support */ #define ACPI_IORT_PRI_SUPPORTED (1<<1) /* The root complex PRI support */ #define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2) /* The root complex PASID forward support */ /* Masks for PasidCapabilities field above */ #define ACPI_IORT_PASID_MAX_WIDTH (0x1F) /* Bits 0-4 */ typedef struct acpi_iort_smmu { UINT64 BaseAddress; /* SMMU base address */ UINT64 Span; /* Length of memory range */ UINT32 Model; UINT32 Flags; UINT32 GlobalInterruptOffset; UINT32 ContextInterruptCount; UINT32 ContextInterruptOffset; UINT32 PmuInterruptCount; UINT32 PmuInterruptOffset; UINT64 Interrupts[]; /* Interrupt array */ } ACPI_IORT_SMMU; /* Values for Model field above */ #define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ #define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ #define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ #define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ #define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */ #define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium ThunderX SMMUv2 */ /* Masks for Flags field above */ #define ACPI_IORT_SMMU_DVM_SUPPORTED (1) #define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) /* Global interrupt format */ typedef struct acpi_iort_smmu_gsi { UINT32 NSgIrpt; UINT32 NSgIrptFlags; UINT32 NSgCfgIrpt; UINT32 NSgCfgIrptFlags; } ACPI_IORT_SMMU_GSI; typedef struct acpi_iort_smmu_v3 { UINT64 BaseAddress; /* SMMUv3 base address */ UINT32 Flags; UINT32 Reserved; UINT64 VatosAddress; UINT32 Model; UINT32 EventGsiv; UINT32 PriGsiv; UINT32 GerrGsiv; UINT32 SyncGsiv; UINT32 Pxm; UINT32 IdMappingIndex; } ACPI_IORT_SMMU_V3; /* Values for Model field above */ #define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */ #define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* HiSilicon Hi161x SMMUv3 */ #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */ /* Masks for Flags field above */ #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1) #define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3) #define ACPI_IORT_SMMU_V3_DEVICEID_VALID (1<<4) typedef struct acpi_iort_pmcg { UINT64 Page0BaseAddress; UINT32 OverflowGsiv; UINT32 NodeReference; UINT64 Page1BaseAddress; } ACPI_IORT_PMCG; typedef struct acpi_iort_rmr { UINT32 Flags; UINT32 RmrCount; UINT32 RmrOffset; } ACPI_IORT_RMR; /* Masks for Flags field above */ #define ACPI_IORT_RMR_REMAP_PERMITTED (1) #define ACPI_IORT_RMR_ACCESS_PRIVILEGE (1<<1) /* * Macro to access the Access Attributes in flags field above: * Access Attributes is encoded in bits 9:2 */ #define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags) (((flags) >> 2) & 0xFF) /* Values for above Access Attributes */ #define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE 0x00 #define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE 0x01 #define ACPI_IORT_RMR_ATTR_DEVICE_NGRE 0x02 #define ACPI_IORT_RMR_ATTR_DEVICE_GRE 0x03 #define ACPI_IORT_RMR_ATTR_NORMAL_NC 0x04 #define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB 0x05 typedef struct acpi_iort_rmr_desc { UINT64 BaseAddress; UINT64 Length; UINT32 Reserved; } ACPI_IORT_RMR_DESC; /******************************************************************************* * * IVRS - I/O Virtualization Reporting Structure * Version 1 * * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", * Revision 1.26, February 2009. * ******************************************************************************/ typedef struct acpi_table_ivrs { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 Info; /* Common virtualization info */ UINT64 Reserved; } ACPI_TABLE_IVRS; /* Values for Info field above */ #define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ #define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ #define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ /* IVRS subtable header */ typedef struct acpi_ivrs_header { UINT8 Type; /* Subtable type */ UINT8 Flags; UINT16 Length; /* Subtable length */ UINT16 DeviceId; /* ID of IOMMU */ } ACPI_IVRS_HEADER; /* Values for subtable Type above */ enum AcpiIvrsType { ACPI_IVRS_TYPE_HARDWARE1 = 0x10, ACPI_IVRS_TYPE_HARDWARE2 = 0x11, ACPI_IVRS_TYPE_HARDWARE3 = 0x40, ACPI_IVRS_TYPE_MEMORY1 = 0x20, ACPI_IVRS_TYPE_MEMORY2 = 0x21, ACPI_IVRS_TYPE_MEMORY3 = 0x22 }; /* Masks for Flags field above for IVHD subtable */ #define ACPI_IVHD_TT_ENABLE (1) #define ACPI_IVHD_PASS_PW (1<<1) #define ACPI_IVHD_RES_PASS_PW (1<<2) #define ACPI_IVHD_ISOC (1<<3) #define ACPI_IVHD_IOTLB (1<<4) /* Masks for Flags field above for IVMD subtable */ #define ACPI_IVMD_UNITY (1) #define ACPI_IVMD_READ (1<<1) #define ACPI_IVMD_WRITE (1<<2) #define ACPI_IVMD_EXCLUSION_RANGE (1<<3) /* * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER */ /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ typedef struct acpi_ivrs_hardware_10 { ACPI_IVRS_HEADER Header; UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ UINT64 BaseAddress; /* IOMMU control registers */ UINT16 PciSegmentGroup; UINT16 Info; /* MSI number and unit ID */ UINT32 FeatureReporting; } ACPI_IVRS_HARDWARE1; /* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */ typedef struct acpi_ivrs_hardware_11 { ACPI_IVRS_HEADER Header; UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ UINT64 BaseAddress; /* IOMMU control registers */ UINT16 PciSegmentGroup; UINT16 Info; /* MSI number and unit ID */ UINT32 Attributes; UINT64 EfrRegisterImage; UINT64 Reserved; } ACPI_IVRS_HARDWARE2; /* Masks for Info field above */ #define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ #define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */ /* * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure. * Upper two bits of the Type field are the (encoded) length of the structure. * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries * are reserved for future use but not defined. */ typedef struct acpi_ivrs_de_header { UINT8 Type; UINT16 Id; UINT8 DataSetting; } ACPI_IVRS_DE_HEADER; /* Length of device entry is in the top two bits of Type field above */ #define ACPI_IVHD_ENTRY_LENGTH 0xC0 /* Values for device entry Type field above */ enum AcpiIvrsDeviceEntryType { /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */ ACPI_IVRS_TYPE_PAD4 = 0, ACPI_IVRS_TYPE_ALL = 1, ACPI_IVRS_TYPE_SELECT = 2, ACPI_IVRS_TYPE_START = 3, ACPI_IVRS_TYPE_END = 4, /* 8-byte device entries */ ACPI_IVRS_TYPE_PAD8 = 64, ACPI_IVRS_TYPE_NOT_USED = 65, ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */ ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */ ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */ ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */ ACPI_IVRS_TYPE_SPECIAL = 72, /* Uses ACPI_IVRS_DEVICE8C */ /* Variable-length device entries */ ACPI_IVRS_TYPE_HID = 240 /* Uses ACPI_IVRS_DEVICE_HID */ }; /* Values for Data field above */ #define ACPI_IVHD_INIT_PASS (1) #define ACPI_IVHD_EINT_PASS (1<<1) #define ACPI_IVHD_NMI_PASS (1<<2) #define ACPI_IVHD_SYSTEM_MGMT (3<<4) #define ACPI_IVHD_LINT0_PASS (1<<6) #define ACPI_IVHD_LINT1_PASS (1<<7) /* Types 0-4: 4-byte device entry */ typedef struct acpi_ivrs_device4 { ACPI_IVRS_DE_HEADER Header; } ACPI_IVRS_DEVICE4; /* Types 66-67: 8-byte device entry */ typedef struct acpi_ivrs_device8a { ACPI_IVRS_DE_HEADER Header; UINT8 Reserved1; UINT16 UsedId; UINT8 Reserved2; } ACPI_IVRS_DEVICE8A; /* Types 70-71: 8-byte device entry */ typedef struct acpi_ivrs_device8b { ACPI_IVRS_DE_HEADER Header; UINT32 ExtendedData; } ACPI_IVRS_DEVICE8B; /* Values for ExtendedData above */ #define ACPI_IVHD_ATS_DISABLED (1<<31) /* Type 72: 8-byte device entry */ typedef struct acpi_ivrs_device8c { ACPI_IVRS_DE_HEADER Header; UINT8 Handle; UINT16 UsedId; UINT8 Variety; } ACPI_IVRS_DEVICE8C; /* Values for Variety field above */ #define ACPI_IVHD_IOAPIC 1 #define ACPI_IVHD_HPET 2 /* Type 240: variable-length device entry */ typedef struct acpi_ivrs_device_hid { ACPI_IVRS_DE_HEADER Header; UINT64 AcpiHid; UINT64 AcpiCid; UINT8 UidType; UINT8 UidLength; } ACPI_IVRS_DEVICE_HID; /* Values for UidType above */ #define ACPI_IVRS_UID_NOT_PRESENT 0 #define ACPI_IVRS_UID_IS_INTEGER 1 #define ACPI_IVRS_UID_IS_STRING 2 /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ typedef struct acpi_ivrs_memory { ACPI_IVRS_HEADER Header; UINT16 AuxData; UINT64 Reserved; UINT64 StartAddress; UINT64 MemoryLength; } ACPI_IVRS_MEMORY; /******************************************************************************* * * LPIT - Low Power Idle Table * * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. * ******************************************************************************/ typedef struct acpi_table_lpit { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_LPIT; /* LPIT subtable header */ typedef struct acpi_lpit_header { UINT32 Type; /* Subtable type */ UINT32 Length; /* Subtable length */ UINT16 UniqueId; UINT16 Reserved; UINT32 Flags; } ACPI_LPIT_HEADER; /* Values for subtable Type above */ enum AcpiLpitType { ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ }; /* Masks for Flags field above */ #define ACPI_LPIT_STATE_DISABLED (1) #define ACPI_LPIT_NO_COUNTER (1<<1) /* * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER */ /* 0x00: Native C-state instruction based LPI structure */ typedef struct acpi_lpit_native { ACPI_LPIT_HEADER Header; ACPI_GENERIC_ADDRESS EntryTrigger; UINT32 Residency; UINT32 Latency; ACPI_GENERIC_ADDRESS ResidencyCounter; UINT64 CounterFrequency; } ACPI_LPIT_NATIVE; /******************************************************************************* * * MADT - Multiple APIC Description Table * Version 3 * ******************************************************************************/ typedef struct acpi_table_madt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 Address; /* Physical address of local APIC */ UINT32 Flags; } ACPI_TABLE_MADT; /* Masks for Flags field above */ #define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ /* Values for PCATCompat flag */ #define ACPI_MADT_DUAL_PIC 1 #define ACPI_MADT_MULTIPLE_APIC 0 /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ enum AcpiMadtType { ACPI_MADT_TYPE_LOCAL_APIC = 0, ACPI_MADT_TYPE_IO_APIC = 1, ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, ACPI_MADT_TYPE_NMI_SOURCE = 3, ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, ACPI_MADT_TYPE_IO_SAPIC = 6, ACPI_MADT_TYPE_LOCAL_SAPIC = 7, ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, ACPI_MADT_TYPE_LOCAL_X2APIC = 9, ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16, ACPI_MADT_TYPE_CORE_PIC = 17, ACPI_MADT_TYPE_LIO_PIC = 18, ACPI_MADT_TYPE_HT_PIC = 19, ACPI_MADT_TYPE_EIO_PIC = 20, ACPI_MADT_TYPE_MSI_PIC = 21, ACPI_MADT_TYPE_BIO_PIC = 22, ACPI_MADT_TYPE_LPC_PIC = 23, ACPI_MADT_TYPE_RINTC = 24, ACPI_MADT_TYPE_IMSIC = 25, ACPI_MADT_TYPE_APLIC = 26, ACPI_MADT_TYPE_PLIC = 27, ACPI_MADT_TYPE_RESERVED = 28, /* 28 to 0x7F are reserved */ ACPI_MADT_TYPE_OEM_RESERVED = 0x80 /* 0x80 to 0xFF are reserved for OEM use */ }; /* * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER */ /* 0: Processor Local APIC */ typedef struct acpi_madt_local_apic { ACPI_SUBTABLE_HEADER Header; UINT8 ProcessorId; /* ACPI processor id */ UINT8 Id; /* Processor's local APIC id */ UINT32 LapicFlags; } ACPI_MADT_LOCAL_APIC; /* 1: IO APIC */ typedef struct acpi_madt_io_apic { ACPI_SUBTABLE_HEADER Header; UINT8 Id; /* I/O APIC ID */ UINT8 Reserved; /* Reserved - must be zero */ UINT32 Address; /* APIC physical address */ UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ } ACPI_MADT_IO_APIC; /* 2: Interrupt Override */ typedef struct acpi_madt_interrupt_override { ACPI_SUBTABLE_HEADER Header; UINT8 Bus; /* 0 - ISA */ UINT8 SourceIrq; /* Interrupt source (IRQ) */ UINT32 GlobalIrq; /* Global system interrupt */ UINT16 IntiFlags; } ACPI_MADT_INTERRUPT_OVERRIDE; /* 3: NMI Source */ typedef struct acpi_madt_nmi_source { ACPI_SUBTABLE_HEADER Header; UINT16 IntiFlags; UINT32 GlobalIrq; /* Global system interrupt */ } ACPI_MADT_NMI_SOURCE; /* 4: Local APIC NMI */ typedef struct acpi_madt_local_apic_nmi { ACPI_SUBTABLE_HEADER Header; UINT8 ProcessorId; /* ACPI processor id */ UINT16 IntiFlags; UINT8 Lint; /* LINTn to which NMI is connected */ } ACPI_MADT_LOCAL_APIC_NMI; /* 5: Address Override */ typedef struct acpi_madt_local_apic_override { ACPI_SUBTABLE_HEADER Header; UINT16 Reserved; /* Reserved, must be zero */ UINT64 Address; /* APIC physical address */ } ACPI_MADT_LOCAL_APIC_OVERRIDE; /* 6: I/O Sapic */ typedef struct acpi_madt_io_sapic { ACPI_SUBTABLE_HEADER Header; UINT8 Id; /* I/O SAPIC ID */ UINT8 Reserved; /* Reserved, must be zero */ UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ UINT64 Address; /* SAPIC physical address */ } ACPI_MADT_IO_SAPIC; /* 7: Local Sapic */ typedef struct acpi_madt_local_sapic { ACPI_SUBTABLE_HEADER Header; UINT8 ProcessorId; /* ACPI processor id */ UINT8 Id; /* SAPIC ID */ UINT8 Eid; /* SAPIC EID */ UINT8 Reserved[3]; /* Reserved, must be zero */ UINT32 LapicFlags; UINT32 Uid; /* Numeric UID - ACPI 3.0 */ char UidString[]; /* String UID - ACPI 3.0 */ } ACPI_MADT_LOCAL_SAPIC; /* 8: Platform Interrupt Source */ typedef struct acpi_madt_interrupt_source { ACPI_SUBTABLE_HEADER Header; UINT16 IntiFlags; UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ UINT8 Id; /* Processor ID */ UINT8 Eid; /* Processor EID */ UINT8 IoSapicVector; /* Vector value for PMI interrupts */ UINT32 GlobalIrq; /* Global system interrupt */ UINT32 Flags; /* Interrupt Source Flags */ } ACPI_MADT_INTERRUPT_SOURCE; /* Masks for Flags field above */ #define ACPI_MADT_CPEI_OVERRIDE (1) /* 9: Processor Local X2APIC (ACPI 4.0) */ typedef struct acpi_madt_local_x2apic { ACPI_SUBTABLE_HEADER Header; UINT16 Reserved; /* Reserved - must be zero */ UINT32 LocalApicId; /* Processor x2APIC ID */ UINT32 LapicFlags; UINT32 Uid; /* ACPI processor UID */ } ACPI_MADT_LOCAL_X2APIC; /* 10: Local X2APIC NMI (ACPI 4.0) */ typedef struct acpi_madt_local_x2apic_nmi { ACPI_SUBTABLE_HEADER Header; UINT16 IntiFlags; UINT32 Uid; /* ACPI processor UID */ UINT8 Lint; /* LINTn to which NMI is connected */ UINT8 Reserved[3]; /* Reserved - must be zero */ } ACPI_MADT_LOCAL_X2APIC_NMI; /* 11: Generic Interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 changes) */ typedef struct acpi_madt_generic_interrupt { ACPI_SUBTABLE_HEADER Header; UINT16 Reserved; /* Reserved - must be zero */ UINT32 CpuInterfaceNumber; UINT32 Uid; UINT32 Flags; UINT32 ParkingVersion; UINT32 PerformanceInterrupt; UINT64 ParkedAddress; UINT64 BaseAddress; UINT64 GicvBaseAddress; UINT64 GichBaseAddress; UINT32 VgicInterrupt; UINT64 GicrBaseAddress; UINT64 ArmMpidr; UINT8 EfficiencyClass; UINT8 Reserved2[1]; UINT16 SpeInterrupt; /* ACPI 6.3 */ UINT16 TrbeInterrupt; /* ACPI 6.5 */ } ACPI_MADT_GENERIC_INTERRUPT; /* Masks for Flags field above */ /* ACPI_MADT_ENABLED (1) Processor is usable if set */ #define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ #define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ #define ACPI_MADT_GICC_ONLINE_CAPABLE (1<<3) /* 03: Processor is online capable */ #define ACPI_MADT_GICC_NON_COHERENT (1<<4) /* 04: GIC redistributor is not coherent */ /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ typedef struct acpi_madt_generic_distributor { ACPI_SUBTABLE_HEADER Header; UINT16 Reserved; /* Reserved - must be zero */ UINT32 GicId; UINT64 BaseAddress; UINT32 GlobalIrqBase; UINT8 Version; UINT8 Reserved2[3]; /* Reserved - must be zero */ } ACPI_MADT_GENERIC_DISTRIBUTOR; /* Values for Version field above */ enum AcpiMadtGicVersion { ACPI_MADT_GIC_VERSION_NONE = 0, ACPI_MADT_GIC_VERSION_V1 = 1, ACPI_MADT_GIC_VERSION_V2 = 2, ACPI_MADT_GIC_VERSION_V3 = 3, ACPI_MADT_GIC_VERSION_V4 = 4, ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ }; /* 13: Generic MSI Frame (ACPI 5.1) */ typedef struct acpi_madt_generic_msi_frame { ACPI_SUBTABLE_HEADER Header; UINT16 Reserved; /* Reserved - must be zero */ UINT32 MsiFrameId; UINT64 BaseAddress; UINT32 Flags; UINT16 SpiCount; UINT16 SpiBase; } ACPI_MADT_GENERIC_MSI_FRAME; /* Masks for Flags field above */ #define ACPI_MADT_OVERRIDE_SPI_VALUES (1) /* 14: Generic Redistributor (ACPI 5.1) */ typedef struct acpi_madt_generic_redistributor { ACPI_SUBTABLE_HEADER Header; UINT8 Flags; UINT8 Reserved; /* reserved - must be zero */ UINT64 BaseAddress; UINT32 Length; } ACPI_MADT_GENERIC_REDISTRIBUTOR; #define ACPI_MADT_GICR_NON_COHERENT (1) /* 15: Generic Translator (ACPI 6.0) */ typedef struct acpi_madt_generic_translator { ACPI_SUBTABLE_HEADER Header; UINT8 Flags; UINT8 Reserved; /* reserved - must be zero */ UINT32 TranslationId; UINT64 BaseAddress; UINT32 Reserved2; } ACPI_MADT_GENERIC_TRANSLATOR; #define ACPI_MADT_ITS_NON_COHERENT (1) /* 16: Multiprocessor wakeup (ACPI 6.4) */ typedef struct acpi_madt_multiproc_wakeup { ACPI_SUBTABLE_HEADER Header; UINT16 MailboxVersion; UINT32 Reserved; /* reserved - must be zero */ UINT64 BaseAddress; } ACPI_MADT_MULTIPROC_WAKEUP; #define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 2032 #define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 2048 typedef struct acpi_madt_multiproc_wakeup_mailbox { UINT16 Command; UINT16 Reserved; /* reserved - must be zero */ UINT32 ApicId; UINT64 WakeupVector; UINT8 ReservedOs[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */ UINT8 ReservedFirmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */ } ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX; #define ACPI_MP_WAKE_COMMAND_WAKEUP 1 /* 17: CPU Core Interrupt Controller (ACPI 6.5) */ typedef struct acpi_madt_core_pic { ACPI_SUBTABLE_HEADER Header; UINT8 Version; UINT32 ProcessorId; UINT32 CoreId; UINT32 Flags; } ACPI_MADT_CORE_PIC; /* Values for Version field above */ enum AcpiMadtCorePicVersion { ACPI_MADT_CORE_PIC_VERSION_NONE = 0, ACPI_MADT_CORE_PIC_VERSION_V1 = 1, ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 18: Legacy I/O Interrupt Controller (ACPI 6.5) */ typedef struct acpi_madt_lio_pic { ACPI_SUBTABLE_HEADER Header; UINT8 Version; UINT64 Address; UINT16 Size; UINT8 Cascade[2]; UINT32 CascadeMap[2]; } ACPI_MADT_LIO_PIC; /* Values for Version field above */ enum AcpiMadtLioPicVersion { ACPI_MADT_LIO_PIC_VERSION_NONE = 0, ACPI_MADT_LIO_PIC_VERSION_V1 = 1, ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 19: HT Interrupt Controller (ACPI 6.5) */ typedef struct acpi_madt_ht_pic { ACPI_SUBTABLE_HEADER Header; UINT8 Version; UINT64 Address; UINT16 Size; UINT8 Cascade[8]; } ACPI_MADT_HT_PIC; /* Values for Version field above */ enum AcpiMadtHtPicVersion { ACPI_MADT_HT_PIC_VERSION_NONE = 0, ACPI_MADT_HT_PIC_VERSION_V1 = 1, ACPI_MADT_HT_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 20: Extend I/O Interrupt Controller (ACPI 6.5) */ typedef struct acpi_madt_eio_pic { ACPI_SUBTABLE_HEADER Header; UINT8 Version; UINT8 Cascade; UINT8 Node; UINT64 NodeMap; } ACPI_MADT_EIO_PIC; /* Values for Version field above */ enum AcpiMadtEioPicVersion { ACPI_MADT_EIO_PIC_VERSION_NONE = 0, ACPI_MADT_EIO_PIC_VERSION_V1 = 1, ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 21: MSI Interrupt Controller (ACPI 6.5) */ typedef struct acpi_madt_msi_pic { ACPI_SUBTABLE_HEADER Header; UINT8 Version; UINT64 MsgAddress; UINT32 Start; UINT32 Count; } ACPI_MADT_MSI_PIC; /* Values for Version field above */ enum AcpiMadtMsiPicVersion { ACPI_MADT_MSI_PIC_VERSION_NONE = 0, ACPI_MADT_MSI_PIC_VERSION_V1 = 1, ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 22: Bridge I/O Interrupt Controller (ACPI 6.5) */ typedef struct acpi_madt_bio_pic { ACPI_SUBTABLE_HEADER Header; UINT8 Version; UINT64 Address; UINT16 Size; UINT16 Id; UINT16 GsiBase; } ACPI_MADT_BIO_PIC; /* Values for Version field above */ enum AcpiMadtBioPicVersion { ACPI_MADT_BIO_PIC_VERSION_NONE = 0, ACPI_MADT_BIO_PIC_VERSION_V1 = 1, ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 23: LPC Interrupt Controller (ACPI 6.5) */ typedef struct acpi_madt_lpc_pic { ACPI_SUBTABLE_HEADER Header; UINT8 Version; UINT64 Address; UINT16 Size; UINT8 Cascade; } ACPI_MADT_LPC_PIC; /* Values for Version field above */ enum AcpiMadtLpcPicVersion { ACPI_MADT_LPC_PIC_VERSION_NONE = 0, ACPI_MADT_LPC_PIC_VERSION_V1 = 1, ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 24: RISC-V INTC */ typedef struct acpi_madt_rintc { ACPI_SUBTABLE_HEADER Header; UINT8 Version; UINT8 Reserved; UINT32 Flags; UINT64 HartId; UINT32 Uid; /* ACPI processor UID */ UINT32 ExtIntcId; /* External INTC Id */ UINT64 ImsicAddr; /* IMSIC base address */ UINT32 ImsicSize; /* IMSIC size */ } ACPI_MADT_RINTC; /* Values for RISC-V INTC Version field above */ enum AcpiMadtRintcVersion { ACPI_MADT_RINTC_VERSION_NONE = 0, ACPI_MADT_RINTC_VERSION_V1 = 1, ACPI_MADT_RINTC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 25: RISC-V IMSIC */ typedef struct acpi_madt_imsic { ACPI_SUBTABLE_HEADER Header; UINT8 Version; UINT8 Reserved; UINT32 Flags; UINT16 NumIds; UINT16 NumGuestIds; UINT8 GuestIndexBits; UINT8 HartIndexBits; UINT8 GroupIndexBits; UINT8 GroupIndexShift; } ACPI_MADT_IMSIC; /* 26: RISC-V APLIC */ typedef struct acpi_madt_aplic { ACPI_SUBTABLE_HEADER Header; UINT8 Version; UINT8 Id; UINT32 Flags; UINT8 HwId[8]; UINT16 NumIdcs; UINT16 NumSources; UINT32 GsiBase; UINT64 BaseAddr; UINT32 Size; } ACPI_MADT_APLIC; /* 27: RISC-V PLIC */ typedef struct acpi_madt_plic { ACPI_SUBTABLE_HEADER Header; UINT8 Version; UINT8 Id; UINT8 HwId[8]; UINT16 NumIrqs; UINT16 MaxPrio; UINT32 Flags; UINT32 Size; UINT64 BaseAddr; UINT32 GsiBase; } ACPI_MADT_PLIC; /* 80: OEM data */ typedef struct acpi_madt_oem_data { ACPI_FLEX_ARRAY(UINT8, OemData); } ACPI_MADT_OEM_DATA; /* * Common flags fields for MADT subtables */ /* MADT Local APIC flags */ #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ #define ACPI_MADT_ONLINE_CAPABLE (2) /* 01: System HW supports enabling processor at runtime */ /* MADT MPS INTI flags (IntiFlags) */ #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ /* Values for MPS INTI flags */ #define ACPI_MADT_POLARITY_CONFORMS 0 #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 #define ACPI_MADT_POLARITY_RESERVED 2 #define ACPI_MADT_POLARITY_ACTIVE_LOW 3 #define ACPI_MADT_TRIGGER_CONFORMS (0) #define ACPI_MADT_TRIGGER_EDGE (1<<2) #define ACPI_MADT_TRIGGER_RESERVED (2<<2) #define ACPI_MADT_TRIGGER_LEVEL (3<<2) /******************************************************************************* * * MCFG - PCI Memory Mapped Configuration table and subtable * Version 1 * * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 * ******************************************************************************/ typedef struct acpi_table_mcfg { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 Reserved[8]; } ACPI_TABLE_MCFG; /* Subtable */ typedef struct acpi_mcfg_allocation { UINT64 Address; /* Base address, processor-relative */ UINT16 PciSegment; /* PCI segment group number */ UINT8 StartBusNumber; /* Starting PCI Bus number */ UINT8 EndBusNumber; /* Final PCI Bus number */ UINT32 Reserved; } ACPI_MCFG_ALLOCATION; /******************************************************************************* * * MCHI - Management Controller Host Interface Table * Version 1 * * Conforms to "Management Component Transport Protocol (MCTP) Host * Interface Specification", Revision 1.0.0a, October 13, 2009 * ******************************************************************************/ typedef struct acpi_table_mchi { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 InterfaceType; UINT8 Protocol; UINT64 ProtocolData; UINT8 InterruptType; UINT8 Gpe; UINT8 PciDeviceFlag; UINT32 GlobalInterrupt; ACPI_GENERIC_ADDRESS ControlRegister; UINT8 PciSegment; UINT8 PciBus; UINT8 PciDevice; UINT8 PciFunction; } ACPI_TABLE_MCHI; /******************************************************************************* * * MPAM - Memory System Resource Partitioning and Monitoring * * Conforms to "ACPI for Memory System Resource Partitioning and Monitoring 2.0" * Document number: ARM DEN 0065, December, 2022. * ******************************************************************************/ /* MPAM RIS locator types. Table 11, Location types */ enum AcpiMpamLocatorType { ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE = 0, ACPI_MPAM_LOCATION_TYPE_MEMORY = 1, ACPI_MPAM_LOCATION_TYPE_SMMU = 2, ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE = 3, ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE = 4, ACPI_MPAM_LOCATION_TYPE_INTERCONNECT = 5, ACPI_MPAM_LOCATION_TYPE_UNKNOWN = 0xFF }; /* MPAM Functional dependency descriptor. Table 10 */ typedef struct acpi_mpam_func_deps { UINT32 Producer; UINT32 Reserved; } ACPI_MPAM_FUNC_DEPS; /* MPAM Processor cache locator descriptor. Table 13 */ typedef struct acpi_mpam_resource_cache_locator { UINT64 CacheReference; UINT32 Reserved; } ACPI_MPAM_RESOURCE_CACHE_LOCATOR; /* MPAM Memory locator descriptor. Table 14 */ typedef struct acpi_mpam_resource_memory_locator { UINT64 ProximityDomain; UINT32 Reserved; } ACPI_MPAM_RESOURCE_MEMORY_LOCATOR; /* MPAM SMMU locator descriptor. Table 15 */ typedef struct acpi_mpam_resource_smmu_locator { UINT64 SmmuInterface; UINT32 Reserved; } ACPI_MPAM_RESOURCE_SMMU_INTERFACE; /* MPAM Memory-side cache locator descriptor. Table 16 */ typedef struct acpi_mpam_resource_memcache_locator { UINT8 Reserved[7]; UINT8 Level; UINT32 Reference; } ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE; /* MPAM ACPI device locator descriptor. Table 17 */ typedef struct acpi_mpam_resource_acpi_locator { UINT64 AcpiHwId; UINT32 AcpiUniqueId; } ACPI_MPAM_RESOURCE_ACPI_INTERFACE; /* MPAM Interconnect locator descriptor. Table 18 */ typedef struct acpi_mpam_resource_interconnect_locator { UINT64 InterConnectDescTblOff; UINT32 Reserved; } ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE; /* MPAM Locator structure. Table 12 */ typedef struct acpi_mpam_resource_generic_locator { UINT64 Descriptor1; UINT32 Descriptor2; } ACPI_MPAM_RESOURCE_GENERIC_LOCATOR; typedef union acpi_mpam_resource_locator { ACPI_MPAM_RESOURCE_CACHE_LOCATOR CacheLocator; ACPI_MPAM_RESOURCE_MEMORY_LOCATOR MemoryLocator; ACPI_MPAM_RESOURCE_SMMU_INTERFACE SmmuLocator; ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE MemCacheLocator; ACPI_MPAM_RESOURCE_ACPI_INTERFACE AcpiLocator; ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE InterconnectIfcLocator; ACPI_MPAM_RESOURCE_GENERIC_LOCATOR GenericLocator; } ACPI_MPAM_RESOURCE_LOCATOR; /* Memory System Component Resource Node Structure Table 9 */ typedef struct acpi_mpam_resource_node { UINT32 Identifier; UINT8 RISIndex; UINT16 Reserved1; UINT8 LocatorType; ACPI_MPAM_RESOURCE_LOCATOR Locator; UINT32 NumFunctionalDeps; } ACPI_MPAM_RESOURCE_NODE; /* Memory System Component (MSC) Node Structure. Table 4 */ typedef struct acpi_mpam_msc_node { UINT16 Length; UINT8 InterfaceType; UINT8 Reserved; UINT32 Identifier; UINT64 BaseAddress; UINT32 MMIOSize; UINT32 OverflowInterrupt; UINT32 OverflowInterruptFlags; UINT32 Reserved1; UINT32 OverflowInterruptAffinity; UINT32 ErrorInterrupt; UINT32 ErrorInterruptFlags; UINT32 Reserved2; UINT32 ErrorInterruptAffinity; UINT32 MaxNrdyUsec; UINT64 HardwareIdLinkedDevice; UINT32 InstanceIdLinkedDevice; UINT32 NumResouceNodes; } ACPI_MPAM_MSC_NODE; typedef struct acpi_table_mpam { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_MPAM; /******************************************************************************* * * MPST - Memory Power State Table (ACPI 5.0) * Version 1 * ******************************************************************************/ #define ACPI_MPST_CHANNEL_INFO \ UINT8 ChannelId; \ UINT8 Reserved1[3]; \ UINT16 PowerNodeCount; \ UINT16 Reserved2; /* Main table */ typedef struct acpi_table_mpst { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ } ACPI_TABLE_MPST; /* Memory Platform Communication Channel Info */ typedef struct acpi_mpst_channel { ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ } ACPI_MPST_CHANNEL; /* Memory Power Node Structure */ typedef struct acpi_mpst_power_node { UINT8 Flags; UINT8 Reserved1; UINT16 NodeId; UINT32 Length; UINT64 RangeAddress; UINT64 RangeLength; UINT32 NumPowerStates; UINT32 NumPhysicalComponents; } ACPI_MPST_POWER_NODE; /* Values for Flags field above */ #define ACPI_MPST_ENABLED 1 #define ACPI_MPST_POWER_MANAGED 2 #define ACPI_MPST_HOT_PLUG_CAPABLE 4 /* Memory Power State Structure (follows POWER_NODE above) */ typedef struct acpi_mpst_power_state { UINT8 PowerState; UINT8 InfoIndex; } ACPI_MPST_POWER_STATE; /* Physical Component ID Structure (follows POWER_STATE above) */ typedef struct acpi_mpst_component { UINT16 ComponentId; } ACPI_MPST_COMPONENT; /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ typedef struct acpi_mpst_data_hdr { UINT16 CharacteristicsCount; UINT16 Reserved; } ACPI_MPST_DATA_HDR; typedef struct acpi_mpst_power_data { UINT8 StructureId; UINT8 Flags; UINT16 Reserved1; UINT32 AveragePower; UINT32 PowerSaving; UINT64 ExitLatency; UINT64 Reserved2; } ACPI_MPST_POWER_DATA; /* Values for Flags field above */ #define ACPI_MPST_PRESERVE 1 #define ACPI_MPST_AUTOENTRY 2 #define ACPI_MPST_AUTOEXIT 4 /* Shared Memory Region (not part of an ACPI table) */ typedef struct acpi_mpst_shared { UINT32 Signature; UINT16 PccCommand; UINT16 PccStatus; UINT32 CommandRegister; UINT32 StatusRegister; UINT32 PowerStateId; UINT32 PowerNodeId; UINT64 EnergyConsumed; UINT64 AveragePower; } ACPI_MPST_SHARED; /******************************************************************************* * * MSCT - Maximum System Characteristics Table (ACPI 4.0) * Version 1 * ******************************************************************************/ typedef struct acpi_table_msct { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 ProximityOffset; /* Location of proximity info struct(s) */ UINT32 MaxProximityDomains;/* Max number of proximity domains */ UINT32 MaxClockDomains; /* Max number of clock domains */ UINT64 MaxAddress; /* Max physical address in system */ } ACPI_TABLE_MSCT; /* Subtable - Maximum Proximity Domain Information. Version 1 */ typedef struct acpi_msct_proximity { UINT8 Revision; UINT8 Length; UINT32 RangeStart; /* Start of domain range */ UINT32 RangeEnd; /* End of domain range */ UINT32 ProcessorCapacity; UINT64 MemoryCapacity; /* In bytes */ } ACPI_MSCT_PROXIMITY; /******************************************************************************* * * MSDM - Microsoft Data Management table * * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", * November 29, 2011. Copyright 2011 Microsoft * ******************************************************************************/ /* Basic MSDM table is only the common ACPI header */ typedef struct acpi_table_msdm { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_MSDM; /******************************************************************************* * * NFIT - NVDIMM Interface Table (ACPI 6.0+) * Version 1 * ******************************************************************************/ typedef struct acpi_table_nfit { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 Reserved; /* Reserved, must be zero */ } ACPI_TABLE_NFIT; /* Subtable header for NFIT */ typedef struct acpi_nfit_header { UINT16 Type; UINT16 Length; } ACPI_NFIT_HEADER; /* Values for subtable type in ACPI_NFIT_HEADER */ enum AcpiNfitType { ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, ACPI_NFIT_TYPE_MEMORY_MAP = 1, ACPI_NFIT_TYPE_INTERLEAVE = 2, ACPI_NFIT_TYPE_SMBIOS = 3, ACPI_NFIT_TYPE_CONTROL_REGION = 4, ACPI_NFIT_TYPE_DATA_REGION = 5, ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, ACPI_NFIT_TYPE_CAPABILITIES = 7, ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ }; /* * NFIT Subtables */ /* 0: System Physical Address Range Structure */ typedef struct acpi_nfit_system_address { ACPI_NFIT_HEADER Header; UINT16 RangeIndex; UINT16 Flags; UINT32 Reserved; /* Reserved, must be zero */ UINT32 ProximityDomain; UINT8 RangeGuid[16]; UINT64 Address; UINT64 Length; UINT64 MemoryMapping; UINT64 LocationCookie; /* ACPI 6.4 */ } ACPI_NFIT_SYSTEM_ADDRESS; /* Flags */ #define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ #define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ #define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2) /* 02: SPA location cookie valid (ACPI 6.4) */ /* Range Type GUIDs appear in the include/acuuid.h file */ /* 1: Memory Device to System Address Range Map Structure */ typedef struct acpi_nfit_memory_map { ACPI_NFIT_HEADER Header; UINT32 DeviceHandle; UINT16 PhysicalId; UINT16 RegionId; UINT16 RangeIndex; UINT16 RegionIndex; UINT64 RegionSize; UINT64 RegionOffset; UINT64 Address; UINT16 InterleaveIndex; UINT16 InterleaveWays; UINT16 Flags; UINT16 Reserved; /* Reserved, must be zero */ } ACPI_NFIT_MEMORY_MAP; /* Flags */ #define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ #define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ #define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ #define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ #define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ #define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ #define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ /* 2: Interleave Structure */ typedef struct acpi_nfit_interleave { ACPI_NFIT_HEADER Header; UINT16 InterleaveIndex; UINT16 Reserved; /* Reserved, must be zero */ UINT32 LineCount; UINT32 LineSize; UINT32 LineOffset[]; /* Variable length */ } ACPI_NFIT_INTERLEAVE; /* 3: SMBIOS Management Information Structure */ typedef struct acpi_nfit_smbios { ACPI_NFIT_HEADER Header; UINT32 Reserved; /* Reserved, must be zero */ UINT8 Data[]; /* Variable length */ } ACPI_NFIT_SMBIOS; /* 4: NVDIMM Control Region Structure */ typedef struct acpi_nfit_control_region { ACPI_NFIT_HEADER Header; UINT16 RegionIndex; UINT16 VendorId; UINT16 DeviceId; UINT16 RevisionId; UINT16 SubsystemVendorId; UINT16 SubsystemDeviceId; UINT16 SubsystemRevisionId; UINT8 ValidFields; UINT8 ManufacturingLocation; UINT16 ManufacturingDate; UINT8 Reserved[2]; /* Reserved, must be zero */ UINT32 SerialNumber; UINT16 Code; UINT16 Windows; UINT64 WindowSize; UINT64 CommandOffset; UINT64 CommandSize; UINT64 StatusOffset; UINT64 StatusSize; UINT16 Flags; UINT8 Reserved1[6]; /* Reserved, must be zero */ } ACPI_NFIT_CONTROL_REGION; /* Flags */ #define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ /* ValidFields bits */ #define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ /* 5: NVDIMM Block Data Window Region Structure */ typedef struct acpi_nfit_data_region { ACPI_NFIT_HEADER Header; UINT16 RegionIndex; UINT16 Windows; UINT64 Offset; UINT64 Size; UINT64 Capacity; UINT64 StartAddress; } ACPI_NFIT_DATA_REGION; /* 6: Flush Hint Address Structure */ typedef struct acpi_nfit_flush_address { ACPI_NFIT_HEADER Header; UINT32 DeviceHandle; UINT16 HintCount; UINT8 Reserved[6]; /* Reserved, must be zero */ UINT64 HintAddress[]; /* Variable length */ } ACPI_NFIT_FLUSH_ADDRESS; /* 7: Platform Capabilities Structure */ typedef struct acpi_nfit_capabilities { ACPI_NFIT_HEADER Header; UINT8 HighestCapability; UINT8 Reserved[3]; /* Reserved, must be zero */ UINT32 Capabilities; UINT32 Reserved2; } ACPI_NFIT_CAPABILITIES; /* Capabilities Flags */ #define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ #define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ #define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ /* * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM */ typedef struct nfit_device_handle { UINT32 Handle; } NFIT_DEVICE_HANDLE; /* Device handle construction and extraction macros */ #define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F #define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 #define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 #define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 #define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 #define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 #define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 #define ACPI_NFIT_MEMORY_ID_OFFSET 8 #define ACPI_NFIT_SOCKET_ID_OFFSET 12 #define ACPI_NFIT_NODE_ID_OFFSET 16 /* Macro to construct a NFIT/NVDIMM device handle */ #define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ ((dimm) | \ ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ ((node) << ACPI_NFIT_NODE_ID_OFFSET)) /* Macros to extract individual fields from a NFIT/NVDIMM device handle */ #define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) #define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) #define ACPI_NFIT_GET_MEMORY_ID(handle) \ (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) #define ACPI_NFIT_GET_SOCKET_ID(handle) \ (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) #define ACPI_NFIT_GET_NODE_ID(handle) \ (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) /******************************************************************************* * * NHLT - Non HDAudio Link Table * Version 1 * ******************************************************************************/ typedef struct acpi_table_nhlt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 EndpointsCount; /* * ACPI_NHLT_ENDPOINT Endpoints[]; * ACPI_NHLT_CONFIG OEDConfig; */ } ACPI_TABLE_NHLT; typedef struct acpi_nhlt_endpoint { UINT32 Length; UINT8 LinkType; UINT8 InstanceId; UINT16 VendorId; UINT16 DeviceId; UINT16 RevisionId; UINT32 SubsystemId; UINT8 DeviceType; UINT8 Direction; UINT8 VirtualBusId; /* * ACPI_NHLT_CONFIG DeviceConfig; * ACPI_NHLT_FORMATS_CONFIG FormatsConfig; * ACPI_NHLT_DEVICES_INFO DevicesInfo; */ } ACPI_NHLT_ENDPOINT; /* Values for LinkType field above */ #define ACPI_NHLT_LINKTYPE_HDA 0 #define ACPI_NHLT_LINKTYPE_DSP 1 #define ACPI_NHLT_LINKTYPE_PDM 2 #define ACPI_NHLT_LINKTYPE_SSP 3 #define ACPI_NHLT_LINKTYPE_SLIMBUS 4 #define ACPI_NHLT_LINKTYPE_SDW 5 #define ACPI_NHLT_LINKTYPE_UAOL 6 /* Values for DeviceId field above */ #define ACPI_NHLT_DEVICEID_DMIC 0xAE20 #define ACPI_NHLT_DEVICEID_BT 0xAE30 #define ACPI_NHLT_DEVICEID_I2S 0xAE34 /* Values for DeviceType field above */ /* Device types unique to endpoint of LinkType=PDM */ #define ACPI_NHLT_DEVICETYPE_PDM 0 #define ACPI_NHLT_DEVICETYPE_PDM_SKL 1 /* Device types unique to endpoint of LinkType=SSP */ #define ACPI_NHLT_DEVICETYPE_BT 0 #define ACPI_NHLT_DEVICETYPE_FM 1 #define ACPI_NHLT_DEVICETYPE_MODEM 2 #define ACPI_NHLT_DEVICETYPE_CODEC 4 /* Values for Direction field above */ #define ACPI_NHLT_DIR_RENDER 0 #define ACPI_NHLT_DIR_CAPTURE 1 typedef struct acpi_nhlt_config { UINT32 CapabilitiesSize; UINT8 Capabilities[1]; } ACPI_NHLT_CONFIG; typedef struct acpi_nhlt_gendevice_config { UINT8 VirtualSlot; UINT8 ConfigType; } ACPI_NHLT_GENDEVICE_CONFIG; /* Values for ConfigType field above */ #define ACPI_NHLT_CONFIGTYPE_GENERIC 0 #define ACPI_NHLT_CONFIGTYPE_MICARRAY 1 typedef struct acpi_nhlt_micdevice_config { UINT8 VirtualSlot; UINT8 ConfigType; UINT8 ArrayType; } ACPI_NHLT_MICDEVICE_CONFIG; /* Values for ArrayType field above */ #define ACPI_NHLT_ARRAYTYPE_LINEAR2_SMALL 0xA #define ACPI_NHLT_ARRAYTYPE_LINEAR2_BIG 0xB #define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO1 0xC #define ACPI_NHLT_ARRAYTYPE_PLANAR4_LSHAPED 0xD #define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO2 0xE #define ACPI_NHLT_ARRAYTYPE_VENDOR 0xF typedef struct acpi_nhlt_vendor_mic_config { UINT8 Type; UINT8 Panel; UINT16 SpeakerPositionDistance; /* mm */ UINT16 HorizontalOffset; /* mm */ UINT16 VerticalOffset; /* mm */ UINT8 FrequencyLowBand; /* 5*Hz */ UINT8 FrequencyHighBand; /* 500*Hz */ UINT16 DirectionAngle; /* -180 - +180 */ UINT16 ElevationAngle; /* -180 - +180 */ UINT16 WorkVerticalAngleBegin; /* -180 - +180 with 2 deg step */ UINT16 WorkVerticalAngleEnd; /* -180 - +180 with 2 deg step */ UINT16 WorkHorizontalAngleBegin; /* -180 - +180 with 2 deg step */ UINT16 WorkHorizontalAngleEnd; /* -180 - +180 with 2 deg step */ } ACPI_NHLT_VENDOR_MIC_CONFIG; /* Values for Type field above */ #define ACPI_NHLT_MICTYPE_OMNIDIRECTIONAL 0 #define ACPI_NHLT_MICTYPE_SUBCARDIOID 1 #define ACPI_NHLT_MICTYPE_CARDIOID 2 #define ACPI_NHLT_MICTYPE_SUPERCARDIOID 3 #define ACPI_NHLT_MICTYPE_HYPERCARDIOID 4 #define ACPI_NHLT_MICTYPE_8SHAPED 5 #define ACPI_NHLT_MICTYPE_RESERVED 6 #define ACPI_NHLT_MICTYPE_VENDORDEFINED 7 /* Values for Panel field above */ #define ACPI_NHLT_MICLOCATION_TOP 0 #define ACPI_NHLT_MICLOCATION_BOTTOM 1 #define ACPI_NHLT_MICLOCATION_LEFT 2 #define ACPI_NHLT_MICLOCATION_RIGHT 3 #define ACPI_NHLT_MICLOCATION_FRONT 4 #define ACPI_NHLT_MICLOCATION_REAR 5 typedef struct acpi_nhlt_vendor_micdevice_config { UINT8 VirtualSlot; UINT8 ConfigType; UINT8 ArrayType; UINT8 MicsCount; ACPI_NHLT_VENDOR_MIC_CONFIG Mics[]; } ACPI_NHLT_VENDOR_MICDEVICE_CONFIG; typedef union acpi_nhlt_device_config { UINT8 VirtualSlot; ACPI_NHLT_GENDEVICE_CONFIG Gen; ACPI_NHLT_MICDEVICE_CONFIG Mic; ACPI_NHLT_VENDOR_MICDEVICE_CONFIG VendorMic; } ACPI_NHLT_DEVICE_CONFIG; /* Inherited from Microsoft's WAVEFORMATEXTENSIBLE. */ typedef struct acpi_nhlt_wave_formatext { UINT16 FormatTag; UINT16 ChannelCount; UINT32 SamplesPerSec; UINT32 AvgBytesPerSec; UINT16 BlockAlign; UINT16 BitsPerSample; UINT16 ExtraFormatSize; UINT16 ValidBitsPerSample; UINT32 ChannelMask; UINT8 Subformat[16]; } ACPI_NHLT_WAVE_FORMATEXT; typedef struct acpi_nhlt_format_config { ACPI_NHLT_WAVE_FORMATEXT Format; ACPI_NHLT_CONFIG Config; } ACPI_NHLT_FORMAT_CONFIG; typedef struct acpi_nhlt_formats_config { UINT8 FormatsCount; ACPI_NHLT_FORMAT_CONFIG Formats[]; } ACPI_NHLT_FORMATS_CONFIG; typedef struct acpi_nhlt_device_info { UINT8 Id[16]; UINT8 InstanceId; UINT8 PortId; } ACPI_NHLT_DEVICE_INFO; typedef struct acpi_nhlt_devices_info { UINT8 DevicesCount; ACPI_NHLT_DEVICE_INFO Devices[]; } ACPI_NHLT_DEVICES_INFO; /******************************************************************************* * * PCCT - Platform Communications Channel Table (ACPI 5.0) * Version 2 (ACPI 6.2) * ******************************************************************************/ typedef struct acpi_table_pcct { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 Flags; UINT64 Reserved; } ACPI_TABLE_PCCT; /* Values for Flags field above */ #define ACPI_PCCT_DOORBELL 1 /* Values for subtable type in ACPI_SUBTABLE_HEADER */ enum AcpiPcctType { ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5, /* ACPI 6.4 */ ACPI_PCCT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ }; /* * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER */ /* 0: Generic Communications Subspace */ typedef struct acpi_pcct_subspace { ACPI_SUBTABLE_HEADER Header; UINT8 Reserved[6]; UINT64 BaseAddress; UINT64 Length; ACPI_GENERIC_ADDRESS DoorbellRegister; UINT64 PreserveMask; UINT64 WriteMask; UINT32 Latency; UINT32 MaxAccessRate; UINT16 MinTurnaroundTime; } ACPI_PCCT_SUBSPACE; /* 1: HW-reduced Communications Subspace (ACPI 5.1) */ typedef struct acpi_pcct_hw_reduced { ACPI_SUBTABLE_HEADER Header; UINT32 PlatformInterrupt; UINT8 Flags; UINT8 Reserved; UINT64 BaseAddress; UINT64 Length; ACPI_GENERIC_ADDRESS DoorbellRegister; UINT64 PreserveMask; UINT64 WriteMask; UINT32 Latency; UINT32 MaxAccessRate; UINT16 MinTurnaroundTime; } ACPI_PCCT_HW_REDUCED; /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ typedef struct acpi_pcct_hw_reduced_type2 { ACPI_SUBTABLE_HEADER Header; UINT32 PlatformInterrupt; UINT8 Flags; UINT8 Reserved; UINT64 BaseAddress; UINT64 Length; ACPI_GENERIC_ADDRESS DoorbellRegister; UINT64 PreserveMask; UINT64 WriteMask; UINT32 Latency; UINT32 MaxAccessRate; UINT16 MinTurnaroundTime; ACPI_GENERIC_ADDRESS PlatformAckRegister; UINT64 AckPreserveMask; UINT64 AckWriteMask; } ACPI_PCCT_HW_REDUCED_TYPE2; /* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ typedef struct acpi_pcct_ext_pcc_master { ACPI_SUBTABLE_HEADER Header; UINT32 PlatformInterrupt; UINT8 Flags; UINT8 Reserved1; UINT64 BaseAddress; UINT32 Length; ACPI_GENERIC_ADDRESS DoorbellRegister; UINT64 PreserveMask; UINT64 WriteMask; UINT32 Latency; UINT32 MaxAccessRate; UINT32 MinTurnaroundTime; ACPI_GENERIC_ADDRESS PlatformAckRegister; UINT64 AckPreserveMask; UINT64 AckSetMask; UINT64 Reserved2; ACPI_GENERIC_ADDRESS CmdCompleteRegister; UINT64 CmdCompleteMask; ACPI_GENERIC_ADDRESS CmdUpdateRegister; UINT64 CmdUpdatePreserveMask; UINT64 CmdUpdateSetMask; ACPI_GENERIC_ADDRESS ErrorStatusRegister; UINT64 ErrorStatusMask; } ACPI_PCCT_EXT_PCC_MASTER; /* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ typedef struct acpi_pcct_ext_pcc_slave { ACPI_SUBTABLE_HEADER Header; UINT32 PlatformInterrupt; UINT8 Flags; UINT8 Reserved1; UINT64 BaseAddress; UINT32 Length; ACPI_GENERIC_ADDRESS DoorbellRegister; UINT64 PreserveMask; UINT64 WriteMask; UINT32 Latency; UINT32 MaxAccessRate; UINT32 MinTurnaroundTime; ACPI_GENERIC_ADDRESS PlatformAckRegister; UINT64 AckPreserveMask; UINT64 AckSetMask; UINT64 Reserved2; ACPI_GENERIC_ADDRESS CmdCompleteRegister; UINT64 CmdCompleteMask; ACPI_GENERIC_ADDRESS CmdUpdateRegister; UINT64 CmdUpdatePreserveMask; UINT64 CmdUpdateSetMask; ACPI_GENERIC_ADDRESS ErrorStatusRegister; UINT64 ErrorStatusMask; } ACPI_PCCT_EXT_PCC_SLAVE; /* 5: HW Registers based Communications Subspace */ typedef struct acpi_pcct_hw_reg { ACPI_SUBTABLE_HEADER Header; UINT16 Version; UINT64 BaseAddress; UINT64 Length; ACPI_GENERIC_ADDRESS DoorbellRegister; UINT64 DoorbellPreserve; UINT64 DoorbellWrite; ACPI_GENERIC_ADDRESS CmdCompleteRegister; UINT64 CmdCompleteMask; ACPI_GENERIC_ADDRESS ErrorStatusRegister; UINT64 ErrorStatusMask; UINT32 NominalLatency; UINT32 MinTurnaroundTime; } ACPI_PCCT_HW_REG; /* Values for doorbell flags above */ #define ACPI_PCCT_INTERRUPT_POLARITY (1) #define ACPI_PCCT_INTERRUPT_MODE (1<<1) /* * PCC memory structures (not part of the ACPI table) */ /* Shared Memory Region */ typedef struct acpi_pcct_shared_memory { UINT32 Signature; UINT16 Command; UINT16 Status; } ACPI_PCCT_SHARED_MEMORY; /* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ typedef struct acpi_pcct_ext_pcc_shared_memory { UINT32 Signature; UINT32 Flags; UINT32 Length; UINT32 Command; } ACPI_PCCT_EXT_PCC_SHARED_MEMORY; /******************************************************************************* * * PDTT - Platform Debug Trigger Table (ACPI 6.2) * Version 0 * ******************************************************************************/ typedef struct acpi_table_pdtt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 TriggerCount; UINT8 Reserved[3]; UINT32 ArrayOffset; } ACPI_TABLE_PDTT; /* * PDTT Communication Channel Identifier Structure. * The number of these structures is defined by TriggerCount above, * starting at ArrayOffset. */ typedef struct acpi_pdtt_channel { UINT8 SubchannelId; UINT8 Flags; } ACPI_PDTT_CHANNEL; /* Flags for above */ #define ACPI_PDTT_RUNTIME_TRIGGER (1) #define ACPI_PDTT_WAIT_COMPLETION (1<<1) #define ACPI_PDTT_TRIGGER_ORDER (1<<2) /******************************************************************************* * * PHAT - Platform Health Assessment Table (ACPI 6.4) * Version 1 * ******************************************************************************/ typedef struct acpi_table_phat { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_PHAT; /* Common header for PHAT subtables that follow main table */ typedef struct acpi_phat_header { UINT16 Type; UINT16 Length; UINT8 Revision; } ACPI_PHAT_HEADER; /* Values for Type field above */ #define ACPI_PHAT_TYPE_FW_VERSION_DATA 0 #define ACPI_PHAT_TYPE_FW_HEALTH_DATA 1 #define ACPI_PHAT_TYPE_RESERVED 2 /* 0x02-0xFFFF are reserved */ /* * PHAT subtables, correspond to Type in ACPI_PHAT_HEADER */ /* 0: Firmware Version Data Record */ typedef struct acpi_phat_version_data { ACPI_PHAT_HEADER Header; UINT8 Reserved[3]; UINT32 ElementCount; } ACPI_PHAT_VERSION_DATA; typedef struct acpi_phat_version_element { UINT8 Guid[16]; UINT64 VersionValue; UINT32 ProducerId; } ACPI_PHAT_VERSION_ELEMENT; /* 1: Firmware Health Data Record */ typedef struct acpi_phat_health_data { ACPI_PHAT_HEADER Header; UINT8 Reserved[2]; UINT8 Health; UINT8 DeviceGuid[16]; UINT32 DeviceSpecificOffset; /* Zero if no Device-specific data */ } ACPI_PHAT_HEALTH_DATA; /* Values for Health field above */ #define ACPI_PHAT_ERRORS_FOUND 0 #define ACPI_PHAT_NO_ERRORS 1 #define ACPI_PHAT_UNKNOWN_ERRORS 2 #define ACPI_PHAT_ADVISORY 3 /******************************************************************************* * * PMTT - Platform Memory Topology Table (ACPI 5.0) * Version 1 * ******************************************************************************/ typedef struct acpi_table_pmtt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 MemoryDeviceCount; /* * Immediately followed by: * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; */ } ACPI_TABLE_PMTT; /* Common header for PMTT subtables that follow main table */ typedef struct acpi_pmtt_header { UINT8 Type; UINT8 Reserved1; UINT16 Length; UINT16 Flags; UINT16 Reserved2; UINT32 MemoryDeviceCount; /* Zero means no memory device structs follow */ /* * Immediately followed by: * UINT8 TypeSpecificData[] * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; */ } ACPI_PMTT_HEADER; /* Values for Type field above */ #define ACPI_PMTT_TYPE_SOCKET 0 #define ACPI_PMTT_TYPE_CONTROLLER 1 #define ACPI_PMTT_TYPE_DIMM 2 #define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFE are reserved */ #define ACPI_PMTT_TYPE_VENDOR 0xFF /* Values for Flags field above */ #define ACPI_PMTT_TOP_LEVEL 0x0001 #define ACPI_PMTT_PHYSICAL 0x0002 #define ACPI_PMTT_MEMORY_TYPE 0x000C /* * PMTT subtables, correspond to Type in acpi_pmtt_header */ /* 0: Socket Structure */ typedef struct acpi_pmtt_socket { ACPI_PMTT_HEADER Header; UINT16 SocketId; UINT16 Reserved; } ACPI_PMTT_SOCKET; /* * Immediately followed by: * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; */ /* 1: Memory Controller subtable */ typedef struct acpi_pmtt_controller { ACPI_PMTT_HEADER Header; UINT16 ControllerId; UINT16 Reserved; } ACPI_PMTT_CONTROLLER; /* * Immediately followed by: * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; */ /* 2: Physical Component Identifier (DIMM) */ typedef struct acpi_pmtt_physical_component { ACPI_PMTT_HEADER Header; UINT32 BiosHandle; } ACPI_PMTT_PHYSICAL_COMPONENT; /* 0xFF: Vendor Specific Data */ typedef struct acpi_pmtt_vendor_specific { ACPI_PMTT_HEADER Header; UINT8 TypeUuid[16]; UINT8 Specific[]; /* * Immediately followed by: * UINT8 VendorSpecificData[]; * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; */ } ACPI_PMTT_VENDOR_SPECIFIC; /******************************************************************************* * * PPTT - Processor Properties Topology Table (ACPI 6.2) * Version 1 * ******************************************************************************/ typedef struct acpi_table_pptt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_PPTT; /* Values for Type field above */ enum AcpiPpttType { ACPI_PPTT_TYPE_PROCESSOR = 0, ACPI_PPTT_TYPE_CACHE = 1, ACPI_PPTT_TYPE_ID = 2, ACPI_PPTT_TYPE_RESERVED = 3 }; /* 0: Processor Hierarchy Node Structure */ typedef struct acpi_pptt_processor { ACPI_SUBTABLE_HEADER Header; UINT16 Reserved; UINT32 Flags; UINT32 Parent; UINT32 AcpiProcessorId; UINT32 NumberOfPrivResources; } ACPI_PPTT_PROCESSOR; /* Flags */ #define ACPI_PPTT_PHYSICAL_PACKAGE (1) #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1) #define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2) /* ACPI 6.3 */ #define ACPI_PPTT_ACPI_LEAF_NODE (1<<3) /* ACPI 6.3 */ #define ACPI_PPTT_ACPI_IDENTICAL (1<<4) /* ACPI 6.3 */ /* 1: Cache Type Structure */ typedef struct acpi_pptt_cache { ACPI_SUBTABLE_HEADER Header; UINT16 Reserved; UINT32 Flags; UINT32 NextLevelOfCache; UINT32 Size; UINT32 NumberOfSets; UINT8 Associativity; UINT8 Attributes; UINT16 LineSize; } ACPI_PPTT_CACHE; /* 1: Cache Type Structure for PPTT version 3 */ typedef struct acpi_pptt_cache_v1 { UINT32 CacheId; } ACPI_PPTT_CACHE_V1; /* Flags */ #define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ #define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ #define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ #define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ #define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ #define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ #define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ #define ACPI_PPTT_CACHE_ID_VALID (1<<7) /* Cache ID valid */ /* Masks for Attributes */ #define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ #define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ #define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ /* Attributes describing cache */ #define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ #define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ #define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ #define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ #define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ #define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ #define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ #define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ #define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ #define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ /* 2: ID Structure */ typedef struct acpi_pptt_id { ACPI_SUBTABLE_HEADER Header; UINT16 Reserved; UINT32 VendorId; UINT64 Level1Id; UINT64 Level2Id; UINT16 MajorRev; UINT16 MinorRev; UINT16 SpinRev; } ACPI_PPTT_ID; /******************************************************************************* * * PRMT - Platform Runtime Mechanism Table * Version 1 * ******************************************************************************/ typedef struct acpi_table_prmt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_PRMT; typedef struct acpi_table_prmt_header { UINT8 PlatformGuid[16]; UINT32 ModuleInfoOffset; UINT32 ModuleInfoCount; } ACPI_TABLE_PRMT_HEADER; typedef struct acpi_prmt_module_header { UINT16 Revision; UINT16 Length; } ACPI_PRMT_MODULE_HEADER; typedef struct acpi_prmt_module_info { UINT16 Revision; UINT16 Length; UINT8 ModuleGuid[16]; UINT16 MajorRev; UINT16 MinorRev; UINT16 HandlerInfoCount; UINT32 HandlerInfoOffset; UINT64 MmioListPointer; } ACPI_PRMT_MODULE_INFO; typedef struct acpi_prmt_handler_info { UINT16 Revision; UINT16 Length; UINT8 HandlerGuid[16]; UINT64 HandlerAddress; UINT64 StaticDataBufferAddress; UINT64 AcpiParamBufferAddress; } ACPI_PRMT_HANDLER_INFO; /******************************************************************************* * * RASF - RAS Feature Table (ACPI 5.0) * Version 1 * ******************************************************************************/ typedef struct acpi_table_rasf { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 ChannelId[12]; } ACPI_TABLE_RASF; /* RASF Platform Communication Channel Shared Memory Region */ typedef struct acpi_rasf_shared_memory { UINT32 Signature; UINT16 Command; UINT16 Status; UINT16 Version; UINT8 Capabilities[16]; UINT8 SetCapabilities[16]; UINT16 NumParameterBlocks; UINT32 SetCapabilitiesStatus; } ACPI_RASF_SHARED_MEMORY; /* RASF Parameter Block Structure Header */ typedef struct acpi_rasf_parameter_block { UINT16 Type; UINT16 Version; UINT16 Length; } ACPI_RASF_PARAMETER_BLOCK; /* RASF Parameter Block Structure for PATROL_SCRUB */ typedef struct acpi_rasf_patrol_scrub_parameter { ACPI_RASF_PARAMETER_BLOCK Header; UINT16 PatrolScrubCommand; UINT64 RequestedAddressRange[2]; UINT64 ActualAddressRange[2]; UINT16 Flags; UINT8 RequestedSpeed; } ACPI_RASF_PATROL_SCRUB_PARAMETER; /* Masks for Flags and Speed fields above */ #define ACPI_RASF_SCRUBBER_RUNNING 1 #define ACPI_RASF_SPEED (7<<1) #define ACPI_RASF_SPEED_SLOW (0<<1) #define ACPI_RASF_SPEED_MEDIUM (4<<1) #define ACPI_RASF_SPEED_FAST (7<<1) /* Channel Commands */ enum AcpiRasfCommands { ACPI_RASF_EXECUTE_RASF_COMMAND = 1 }; /* Platform RAS Capabilities */ enum AcpiRasfCapabiliities { ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, ACPI_SW_PATROL_SCRUB_EXPOSED = 1 }; /* Patrol Scrub Commands */ enum AcpiRasfPatrolScrubCommands { ACPI_RASF_GET_PATROL_PARAMETERS = 1, ACPI_RASF_START_PATROL_SCRUBBER = 2, ACPI_RASF_STOP_PATROL_SCRUBBER = 3 }; /* Channel Command flags */ #define ACPI_RASF_GENERATE_SCI (1<<15) /* Status values */ enum AcpiRasfStatus { ACPI_RASF_SUCCESS = 0, ACPI_RASF_NOT_VALID = 1, ACPI_RASF_NOT_SUPPORTED = 2, ACPI_RASF_BUSY = 3, ACPI_RASF_FAILED = 4, ACPI_RASF_ABORTED = 5, ACPI_RASF_INVALID_DATA = 6 }; /* Status flags */ #define ACPI_RASF_COMMAND_COMPLETE (1) #define ACPI_RASF_SCI_DOORBELL (1<<1) #define ACPI_RASF_ERROR (1<<2) #define ACPI_RASF_STATUS (0x1F<<3) /******************************************************************************* * * RAS2 - RAS2 Feature Table (ACPI 6.5) * Version 1 * * ******************************************************************************/ typedef struct acpi_table_ras2 { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT16 Reserved; UINT16 NumPccDescs; } ACPI_TABLE_RAS2; /* RAS2 Platform Communication Channel Descriptor */ typedef struct acpi_ras2_pcc_desc { UINT8 ChannelId; UINT16 Reserved; UINT8 FeatureType; UINT32 Instance; } ACPI_RAS2_PCC_DESC; /* RAS2 Platform Communication Channel Shared Memory Region */ typedef struct acpi_ras2_shared_memory { UINT32 Signature; UINT16 Command; UINT16 Status; UINT16 Version; UINT8 Features[16]; UINT8 SetCapabilities[16]; UINT16 NumParameterBlocks; UINT32 SetCapabilitiesStatus; } ACPI_RAS2_SHARED_MEMORY; /* RAS2 Parameter Block Structure for PATROL_SCRUB */ typedef struct acpi_ras2_parameter_block { UINT16 Type; UINT16 Version; UINT16 Length; } ACPI_RAS2_PARAMETER_BLOCK; /* RAS2 Parameter Block Structure for PATROL_SCRUB */ typedef struct acpi_ras2_patrol_scrub_parameter { ACPI_RAS2_PARAMETER_BLOCK Header; UINT16 PatrolScrubCommand; UINT64 RequestedAddressRange[2]; UINT64 ActualAddressRange[2]; UINT32 Flags; UINT32 ScrubParamsOut; UINT32 ScrubParamsIn; } ACPI_RAS2_PATROL_SCRUB_PARAMETER; /* Masks for Flags field above */ #define ACPI_RAS2_SCRUBBER_RUNNING 1 /* RAS2 Parameter Block Structure for LA2PA_TRANSLATION */ typedef struct acpi_ras2_la2pa_translation_parameter { ACPI_RAS2_PARAMETER_BLOCK Header; UINT16 AddrTranslationCommand; UINT64 SubInstId; UINT64 LogicalAddress; UINT64 PhysicalAddress; UINT32 Status; } ACPI_RAS2_LA2PA_TRANSLATION_PARAM; /* Channel Commands */ enum AcpiRas2Commands { ACPI_RAS2_EXECUTE_RAS2_COMMAND = 1 }; /* Platform RAS2 Features */ enum AcpiRas2Features { ACPI_RAS2_PATROL_SCRUB_SUPPORTED = 0, ACPI_RAS2_LA2PA_TRANSLATION = 1 }; /* RAS2 Patrol Scrub Commands */ enum AcpiRas2PatrolScrubCommands { ACPI_RAS2_GET_PATROL_PARAMETERS = 1, ACPI_RAS2_START_PATROL_SCRUBBER = 2, ACPI_RAS2_STOP_PATROL_SCRUBBER = 3 }; /* RAS2 LA2PA Translation Commands */ enum AcpiRas2La2PaTranslationCommands { ACPI_RAS2_GET_LA2PA_TRANSLATION = 1, }; /* RAS2 LA2PA Translation Status values */ enum AcpiRas2La2PaTranslationStatus { ACPI_RAS2_LA2PA_TRANSLATION_SUCCESS = 0, ACPI_RAS2_LA2PA_TRANSLATION_FAIL = 1, }; /* Channel Command flags */ #define ACPI_RAS2_GENERATE_SCI (1<<15) /* Status values */ enum AcpiRas2Status { ACPI_RAS2_SUCCESS = 0, ACPI_RAS2_NOT_VALID = 1, ACPI_RAS2_NOT_SUPPORTED = 2, ACPI_RAS2_BUSY = 3, ACPI_RAS2_FAILED = 4, ACPI_RAS2_ABORTED = 5, ACPI_RAS2_INVALID_DATA = 6 }; /* Status flags */ #define ACPI_RAS2_COMMAND_COMPLETE (1) #define ACPI_RAS2_SCI_DOORBELL (1<<1) #define ACPI_RAS2_ERROR (1<<2) #define ACPI_RAS2_STATUS (0x1F<<3) /******************************************************************************* * * RGRT - Regulatory Graphics Resource Table * Version 1 * * Conforms to "ACPI RGRT" available at: * https://microsoft.github.io/mu/dyn/mu_plus/MsCorePkg/AcpiRGRT/feature_acpi_rgrt/ * ******************************************************************************/ typedef struct acpi_table_rgrt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT16 Version; UINT8 ImageType; UINT8 Reserved; UINT8 Image[]; } ACPI_TABLE_RGRT; /* ImageType values */ enum AcpiRgrtImageType { ACPI_RGRT_TYPE_RESERVED0 = 0, ACPI_RGRT_IMAGE_TYPE_PNG = 1, ACPI_RGRT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ }; /******************************************************************************* * * RHCT - RISC-V Hart Capabilities Table * Version 1 * ******************************************************************************/ typedef struct acpi_table_rhct { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 Flags; /* RHCT flags */ UINT64 TimeBaseFreq; UINT32 NodeCount; UINT32 NodeOffset; } ACPI_TABLE_RHCT; /* RHCT Flags */ #define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU (1) /* * RHCT subtables */ typedef struct acpi_rhct_node_header { UINT16 Type; UINT16 Length; UINT16 Revision; } ACPI_RHCT_NODE_HEADER; /* Values for RHCT subtable Type above */ enum acpi_rhct_node_type { ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000, ACPI_RHCT_NODE_TYPE_CMO = 0x0001, ACPI_RHCT_NODE_TYPE_MMU = 0x0002, ACPI_RHCT_NODE_TYPE_RESERVED = 0x0003, ACPI_RHCT_NODE_TYPE_HART_INFO = 0xFFFF, }; /* * RHCT node specific subtables */ /* ISA string node structure */ typedef struct acpi_rhct_isa_string { UINT16 IsaLength; char Isa[]; } ACPI_RHCT_ISA_STRING; typedef struct acpi_rhct_cmo_node { UINT8 Reserved; /* Must be zero */ UINT8 CbomSize; /* CBOM size in powerof 2 */ UINT8 CbopSize; /* CBOP size in powerof 2 */ UINT8 CbozSize; /* CBOZ size in powerof 2 */ } ACPI_RHCT_CMO_NODE; typedef struct acpi_rhct_mmu_node { UINT8 Reserved; /* Must be zero */ UINT8 MmuType; /* Virtual Address Scheme */ } ACPI_RHCT_MMU_NODE; enum acpi_rhct_mmu_type { ACPI_RHCT_MMU_TYPE_SV39 = 0, ACPI_RHCT_MMU_TYPE_SV48 = 1, ACPI_RHCT_MMU_TYPE_SV57 = 2 }; /* Hart Info node structure */ typedef struct acpi_rhct_hart_info { UINT16 NumOffsets; UINT32 Uid; /* ACPI processor UID */ } ACPI_RHCT_HART_INFO; /******************************************************************************* * * SBST - Smart Battery Specification Table * Version 1 * ******************************************************************************/ typedef struct acpi_table_sbst { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 WarningLevel; UINT32 LowLevel; UINT32 CriticalLevel; } ACPI_TABLE_SBST; /******************************************************************************* * * SDEI - Software Delegated Exception Interface Descriptor Table * * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, * May 8th, 2017. Copyright 2017 ARM Ltd. * ******************************************************************************/ typedef struct acpi_table_sdei { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_SDEI; /******************************************************************************* * * SDEV - Secure Devices Table (ACPI 6.2) * Version 1 * ******************************************************************************/ typedef struct acpi_table_sdev { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_SDEV; typedef struct acpi_sdev_header { UINT8 Type; UINT8 Flags; UINT16 Length; } ACPI_SDEV_HEADER; /* Values for subtable type above */ enum AcpiSdevType { ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ }; /* Values for flags above */ #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) #define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1) /* * SDEV subtables */ /* 0: Namespace Device Based Secure Device Structure */ typedef struct acpi_sdev_namespace { ACPI_SDEV_HEADER Header; UINT16 DeviceIdOffset; UINT16 DeviceIdLength; UINT16 VendorDataOffset; UINT16 VendorDataLength; } ACPI_SDEV_NAMESPACE; typedef struct acpi_sdev_secure_component { UINT16 SecureComponentOffset; UINT16 SecureComponentLength; } ACPI_SDEV_SECURE_COMPONENT; /* * SDEV sub-subtables ("Components") for above */ typedef struct acpi_sdev_component { ACPI_SDEV_HEADER Header; } ACPI_SDEV_COMPONENT; /* Values for sub-subtable type above */ enum AcpiSacType { ACPI_SDEV_TYPE_ID_COMPONENT = 0, ACPI_SDEV_TYPE_MEM_COMPONENT = 1 }; typedef struct acpi_sdev_id_component { ACPI_SDEV_HEADER Header; UINT16 HardwareIdOffset; UINT16 HardwareIdLength; UINT16 SubsystemIdOffset; UINT16 SubsystemIdLength; UINT16 HardwareRevision; UINT8 HardwareRevPresent; UINT8 ClassCodePresent; UINT8 PciBaseClass; UINT8 PciSubClass; UINT8 PciProgrammingXface; } ACPI_SDEV_ID_COMPONENT; typedef struct acpi_sdev_mem_component { ACPI_SDEV_HEADER Header; UINT32 Reserved; UINT64 MemoryBaseAddress; UINT64 MemoryLength; } ACPI_SDEV_MEM_COMPONENT; /* 1: PCIe Endpoint Device Based Device Structure */ typedef struct acpi_sdev_pcie { ACPI_SDEV_HEADER Header; UINT16 Segment; UINT16 StartBus; UINT16 PathOffset; UINT16 PathLength; UINT16 VendorDataOffset; UINT16 VendorDataLength; } ACPI_SDEV_PCIE; /* 1a: PCIe Endpoint path entry */ typedef struct acpi_sdev_pcie_path { UINT8 Device; UINT8 Function; } ACPI_SDEV_PCIE_PATH; /******************************************************************************* * * SVKL - Storage Volume Key Location Table (ACPI 6.4) * From: "Guest-Host-Communication Interface (GHCI) for Intel * Trust Domain Extensions (Intel TDX)". * Version 1 * ******************************************************************************/ typedef struct acpi_table_svkl { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 Count; } ACPI_TABLE_SVKL; typedef struct acpi_svkl_key { UINT16 Type; UINT16 Format; UINT32 Size; UINT64 Address; } ACPI_SVKL_KEY; enum acpi_svkl_type { ACPI_SVKL_TYPE_MAIN_STORAGE = 0, ACPI_SVKL_TYPE_RESERVED = 1 /* 1 and greater are reserved */ }; enum acpi_svkl_format { ACPI_SVKL_FORMAT_RAW_BINARY = 0, ACPI_SVKL_FORMAT_RESERVED = 1 /* 1 and greater are reserved */ }; /******************************************************************************* * * TDEL - TD-Event Log * From: "Guest-Host-Communication Interface (GHCI) for Intel * Trust Domain Extensions (Intel TDX)". * September 2020 * ******************************************************************************/ typedef struct acpi_table_tdel { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 Reserved; UINT64 LogAreaMinimumLength; UINT64 LogAreaStartAddress; } ACPI_TABLE_TDEL; /* Reset to default packing */ #pragma pack() #endif /* __ACTBL2_H__ */ src/acpica/source/include/actbl3.h000066400000000000000000001101611465205512700173400ustar00rootroot00000000000000/****************************************************************************** * * Name: actbl3.h - ACPI Table Definitions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACTBL3_H__ #define __ACTBL3_H__ /******************************************************************************* * * Additional ACPI Tables * * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * ******************************************************************************/ /* * Values for description table header signatures for tables defined in this * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ #define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ #define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ #define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ #define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ #define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ #define ACPI_SIG_STAO "STAO" /* Status Override table */ #define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ #define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */ #define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ #define ACPI_SIG_VIOT "VIOT" /* Virtual I/O Translation Table */ #define ACPI_SIG_WAET "WAET" /* Windows ACPI Emulated devices Table */ #define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ #define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */ #define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ #define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Mitigations Table */ #define ACPI_SIG_XENV "XENV" /* Xen Environment table */ #define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */ /* * All tables must be byte-packed to match the ACPI specification, since * the tables are provided by the system BIOS. */ #pragma pack(1) /* * Note: C bitfields are not used for this reason: * * "Bitfields are great and easy to read, but unfortunately the C language * does not specify the layout of bitfields in memory, which means they are * essentially useless for dealing with packed data in on-disk formats or * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, * this decision was a design error in C. Ritchie could have picked an order * and stuck with it." Norman Ramsey. * See http://stackoverflow.com/a/1053662/41661 */ /******************************************************************************* * * SLIC - Software Licensing Description Table * * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", * November 29, 2011. Copyright 2011 Microsoft * ******************************************************************************/ /* Basic SLIC table is only the common ACPI header */ typedef struct acpi_table_slic { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_SLIC; /******************************************************************************* * * SLIT - System Locality Distance Information Table * Version 1 * ******************************************************************************/ typedef struct acpi_table_slit { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT64 LocalityCount; UINT8 Entry[1]; /* Real size = localities^2 */ } ACPI_TABLE_SLIT; /******************************************************************************* * * SPCR - Serial Port Console Redirection table * Version 2 * * Conforms to "Serial Port Console Redirection Table", * Version 1.03, August 10, 2015 * ******************************************************************************/ typedef struct acpi_table_spcr { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 InterfaceType; /* 0=full 16550, 1=subset of 16550 */ UINT8 Reserved[3]; ACPI_GENERIC_ADDRESS SerialPort; UINT8 InterruptType; UINT8 PcInterrupt; UINT32 Interrupt; UINT8 BaudRate; UINT8 Parity; UINT8 StopBits; UINT8 FlowControl; UINT8 TerminalType; UINT8 Reserved1; UINT16 PciDeviceId; UINT16 PciVendorId; UINT8 PciBus; UINT8 PciDevice; UINT8 PciFunction; UINT32 PciFlags; UINT8 PciSegment; UINT32 Reserved2; } ACPI_TABLE_SPCR; /* Masks for PciFlags field above */ #define ACPI_SPCR_DO_NOT_DISABLE (1) /* Values for Interface Type: See the definition of the DBG2 table */ /******************************************************************************* * * SPMI - Server Platform Management Interface table * Version 5 * * Conforms to "Intelligent Platform Management Interface Specification * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with * June 12, 2009 markup. * ******************************************************************************/ typedef struct acpi_table_spmi { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 InterfaceType; UINT8 Reserved; /* Must be 1 */ UINT16 SpecRevision; /* Version of IPMI */ UINT8 InterruptType; UINT8 GpeNumber; /* GPE assigned */ UINT8 Reserved1; UINT8 PciDeviceFlag; UINT32 Interrupt; ACPI_GENERIC_ADDRESS IpmiRegister; UINT8 PciSegment; UINT8 PciBus; UINT8 PciDevice; UINT8 PciFunction; UINT8 Reserved2; } ACPI_TABLE_SPMI; /* Values for InterfaceType above */ enum AcpiSpmiInterfaceTypes { ACPI_SPMI_NOT_USED = 0, ACPI_SPMI_KEYBOARD = 1, ACPI_SPMI_SMI = 2, ACPI_SPMI_BLOCK_TRANSFER = 3, ACPI_SPMI_SMBUS = 4, ACPI_SPMI_RESERVED = 5 /* 5 and above are reserved */ }; /******************************************************************************* * * SRAT - System Resource Affinity Table * Version 3 * ******************************************************************************/ typedef struct acpi_table_srat { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 TableRevision; /* Must be value '1' */ UINT64 Reserved; /* Reserved, must be zero */ } ACPI_TABLE_SRAT; /* Values for subtable type in ACPI_SUBTABLE_HEADER */ enum AcpiSratType { ACPI_SRAT_TYPE_CPU_AFFINITY = 0, ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, ACPI_SRAT_TYPE_GICC_AFFINITY = 3, ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5, /* ACPI 6.3 */ ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY = 6, /* ACPI 6.4 */ ACPI_SRAT_TYPE_RINTC_AFFINITY = 7, /* ACPI 6.6 */ ACPI_SRAT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ }; /* * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER */ /* 0: Processor Local APIC/SAPIC Affinity */ typedef struct acpi_srat_cpu_affinity { ACPI_SUBTABLE_HEADER Header; UINT8 ProximityDomainLo; UINT8 ApicId; UINT32 Flags; UINT8 LocalSapicEid; UINT8 ProximityDomainHi[3]; UINT32 ClockDomain; } ACPI_SRAT_CPU_AFFINITY; /* Flags */ #define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ /* 1: Memory Affinity */ typedef struct acpi_srat_mem_affinity { ACPI_SUBTABLE_HEADER Header; UINT32 ProximityDomain; UINT16 Reserved; /* Reserved, must be zero */ UINT64 BaseAddress; UINT64 Length; UINT32 Reserved1; UINT32 Flags; UINT64 Reserved2; /* Reserved, must be zero */ } ACPI_SRAT_MEM_AFFINITY; /* Flags */ #define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ #define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ /* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ typedef struct acpi_srat_x2apic_cpu_affinity { ACPI_SUBTABLE_HEADER Header; UINT16 Reserved; /* Reserved, must be zero */ UINT32 ProximityDomain; UINT32 ApicId; UINT32 Flags; UINT32 ClockDomain; UINT32 Reserved2; } ACPI_SRAT_X2APIC_CPU_AFFINITY; /* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ #define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ /* 3: GICC Affinity (ACPI 5.1) */ typedef struct acpi_srat_gicc_affinity { ACPI_SUBTABLE_HEADER Header; UINT32 ProximityDomain; UINT32 AcpiProcessorUid; UINT32 Flags; UINT32 ClockDomain; } ACPI_SRAT_GICC_AFFINITY; /* Flags for ACPI_SRAT_GICC_AFFINITY */ #define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ /* 4: GCC ITS Affinity (ACPI 6.2) */ typedef struct acpi_srat_gic_its_affinity { ACPI_SUBTABLE_HEADER Header; UINT32 ProximityDomain; UINT16 Reserved; UINT32 ItsId; } ACPI_SRAT_GIC_ITS_AFFINITY; /* * Common structure for SRAT subtable types: * 5: ACPI_SRAT_TYPE_GENERIC_AFFINITY * 6: ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY */ #define ACPI_SRAT_DEVICE_HANDLE_SIZE 16 typedef struct acpi_srat_generic_affinity { ACPI_SUBTABLE_HEADER Header; UINT8 Reserved; UINT8 DeviceHandleType; UINT32 ProximityDomain; UINT8 DeviceHandle[ACPI_SRAT_DEVICE_HANDLE_SIZE]; UINT32 Flags; UINT32 Reserved1; } ACPI_SRAT_GENERIC_AFFINITY; /* Flags for ACPI_SRAT_GENERIC_AFFINITY */ #define ACPI_SRAT_GENERIC_AFFINITY_ENABLED (1) /* 00: Use affinity structure */ #define ACPI_SRAT_ARCHITECTURAL_TRANSACTIONS (1<<1) /* ACPI 6.4 */ /* 7: RINTC Affinity Structure(ACPI 6.6) */ typedef struct acpi_srat_rintc_affinity { ACPI_SUBTABLE_HEADER Header; UINT16 Reserved; UINT32 ProximityDomain; UINT32 AcpiProcessorUid; UINT32 Flags; UINT32 ClockDomain; } ACPI_SRAT_RINTC_AFFINITY; /* Flags for ACPI_SRAT_RINTC_AFFINITY */ #define ACPI_SRAT_RINTC_ENABLED (1) /* 00: Use affinity structure */ /******************************************************************************* * * STAO - Status Override Table (_STA override) - ACPI 6.0 * Version 1 * * Conforms to "ACPI Specification for Status Override Table" * 6 January 2015 * ******************************************************************************/ typedef struct acpi_table_stao { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 IgnoreUart; } ACPI_TABLE_STAO; /******************************************************************************* * * TCPA - Trusted Computing Platform Alliance table * Version 2 * * TCG Hardware Interface Table for TPM 1.2 Clients and Servers * * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", * Version 1.2, Revision 8 * February 27, 2017 * * NOTE: There are two versions of the table with the same signature -- * the client version and the server version. The common PlatformClass * field is used to differentiate the two types of tables. * ******************************************************************************/ typedef struct acpi_table_tcpa_hdr { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT16 PlatformClass; } ACPI_TABLE_TCPA_HDR; /* * Values for PlatformClass above. * This is how the client and server subtables are differentiated */ #define ACPI_TCPA_CLIENT_TABLE 0 #define ACPI_TCPA_SERVER_TABLE 1 typedef struct acpi_table_tcpa_client { UINT32 MinimumLogLength; /* Minimum length for the event log area */ UINT64 LogAddress; /* Address of the event log area */ } ACPI_TABLE_TCPA_CLIENT; typedef struct acpi_table_tcpa_server { UINT16 Reserved; UINT64 MinimumLogLength; /* Minimum length for the event log area */ UINT64 LogAddress; /* Address of the event log area */ UINT16 SpecRevision; UINT8 DeviceFlags; UINT8 InterruptFlags; UINT8 GpeNumber; UINT8 Reserved2[3]; UINT32 GlobalInterrupt; ACPI_GENERIC_ADDRESS Address; UINT32 Reserved3; ACPI_GENERIC_ADDRESS ConfigAddress; UINT8 Group; UINT8 Bus; /* PCI Bus/Segment/Function numbers */ UINT8 Device; UINT8 Function; } ACPI_TABLE_TCPA_SERVER; /* Values for DeviceFlags above */ #define ACPI_TCPA_PCI_DEVICE (1) #define ACPI_TCPA_BUS_PNP (1<<1) #define ACPI_TCPA_ADDRESS_VALID (1<<2) /* Values for InterruptFlags above */ #define ACPI_TCPA_INTERRUPT_MODE (1) #define ACPI_TCPA_INTERRUPT_POLARITY (1<<1) #define ACPI_TCPA_SCI_VIA_GPE (1<<2) #define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3) /******************************************************************************* * * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table * Version 4 * * TCG Hardware Interface Table for TPM 2.0 Clients and Servers * * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", * Version 1.2, Revision 8 * February 27, 2017 * ******************************************************************************/ /* Revision 3 */ typedef struct acpi_table_tpm23 { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 Reserved; UINT64 ControlAddress; UINT32 StartMethod; } ACPI_TABLE_TPM23; /* Value for StartMethod above */ #define ACPI_TPM23_ACPI_START_METHOD 2 /* * Optional trailer for revision 3. If start method is 2, there is a 4 byte * reserved area of all zeros. */ typedef struct acpi_tmp23_trailer { UINT32 Reserved; } ACPI_TPM23_TRAILER; /* Revision 4 */ typedef struct acpi_table_tpm2 { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT16 PlatformClass; UINT16 Reserved; UINT64 ControlAddress; UINT32 StartMethod; /* Platform-specific data follows */ } ACPI_TABLE_TPM2; /* Values for StartMethod above */ #define ACPI_TPM2_NOT_ALLOWED 0 #define ACPI_TPM2_RESERVED1 1 #define ACPI_TPM2_START_METHOD 2 #define ACPI_TPM2_RESERVED3 3 #define ACPI_TPM2_RESERVED4 4 #define ACPI_TPM2_RESERVED5 5 #define ACPI_TPM2_MEMORY_MAPPED 6 #define ACPI_TPM2_COMMAND_BUFFER 7 #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8 #define ACPI_TPM2_RESERVED9 9 #define ACPI_TPM2_RESERVED10 10 #define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */ #define ACPI_TPM2_RESERVED 12 /* Optional trailer appears after any StartMethod subtables */ typedef struct acpi_tpm2_trailer { UINT8 MethodParameters[12]; UINT32 MinimumLogLength; /* Minimum length for the event log area */ UINT64 LogAddress; /* Address of the event log area */ } ACPI_TPM2_TRAILER; /* * Subtables (StartMethod-specific) */ /* 11: Start Method for ARM SMC (V1.2 Rev 8) */ typedef struct acpi_tpm2_arm_smc { UINT32 GlobalInterrupt; UINT8 InterruptFlags; UINT8 OperationFlags; UINT16 Reserved; UINT32 FunctionId; } ACPI_TPM2_ARM_SMC; /* Values for InterruptFlags above */ #define ACPI_TPM2_INTERRUPT_SUPPORT (1) /* Values for OperationFlags above */ #define ACPI_TPM2_IDLE_SUPPORT (1) /******************************************************************************* * * UEFI - UEFI Boot optimization Table * Version 1 * * Conforms to "Unified Extensible Firmware Interface Specification", * Version 2.3, May 8, 2009 * ******************************************************************************/ typedef struct acpi_table_uefi { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 Identifier[16]; /* UUID identifier */ UINT16 DataOffset; /* Offset of remaining data in table */ } ACPI_TABLE_UEFI; /******************************************************************************* * * VIOT - Virtual I/O Translation Table * Version 1 * ******************************************************************************/ typedef struct acpi_table_viot { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT16 NodeCount; UINT16 NodeOffset; UINT8 Reserved[8]; } ACPI_TABLE_VIOT; /* VIOT subtable header */ typedef struct acpi_viot_header { UINT8 Type; UINT8 Reserved; UINT16 Length; } ACPI_VIOT_HEADER; /* Values for Type field above */ enum AcpiViotNodeType { ACPI_VIOT_NODE_PCI_RANGE = 0x01, ACPI_VIOT_NODE_MMIO = 0x02, ACPI_VIOT_NODE_VIRTIO_IOMMU_PCI = 0x03, ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO = 0x04, ACPI_VIOT_RESERVED = 0x05 }; /* VIOT subtables */ typedef struct acpi_viot_pci_range { ACPI_VIOT_HEADER Header; UINT32 EndpointStart; UINT16 SegmentStart; UINT16 SegmentEnd; UINT16 BdfStart; UINT16 BdfEnd; UINT16 OutputNode; UINT8 Reserved[6]; } ACPI_VIOT_PCI_RANGE; typedef struct acpi_viot_mmio { ACPI_VIOT_HEADER Header; UINT32 Endpoint; UINT64 BaseAddress; UINT16 OutputNode; UINT8 Reserved[6]; } ACPI_VIOT_MMIO; typedef struct acpi_viot_virtio_iommu_pci { ACPI_VIOT_HEADER Header; UINT16 Segment; UINT16 Bdf; UINT8 Reserved[8]; } ACPI_VIOT_VIRTIO_IOMMU_PCI; typedef struct acpi_viot_virtio_iommu_mmio { ACPI_VIOT_HEADER Header; UINT8 Reserved[4]; UINT64 BaseAddress; } ACPI_VIOT_VIRTIO_IOMMU_MMIO; /******************************************************************************* * * WAET - Windows ACPI Emulated devices Table * Version 1 * * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009 * ******************************************************************************/ typedef struct acpi_table_waet { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 Flags; } ACPI_TABLE_WAET; /* Masks for Flags field above */ #define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */ #define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */ /******************************************************************************* * * WDAT - Watchdog Action Table * Version 1 * * Conforms to "Hardware Watchdog Timers Design Specification", * Copyright 2006 Microsoft Corporation. * ******************************************************************************/ typedef struct acpi_table_wdat { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 HeaderLength; /* Watchdog Header Length */ UINT16 PciSegment; /* PCI Segment number */ UINT8 PciBus; /* PCI Bus number */ UINT8 PciDevice; /* PCI Device number */ UINT8 PciFunction; /* PCI Function number */ UINT8 Reserved[3]; UINT32 TimerPeriod; /* Period of one timer count (msec) */ UINT32 MaxCount; /* Maximum counter value supported */ UINT32 MinCount; /* Minimum counter value */ UINT8 Flags; UINT8 Reserved2[3]; UINT32 Entries; /* Number of watchdog entries that follow */ } ACPI_TABLE_WDAT; /* Masks for Flags field above */ #define ACPI_WDAT_ENABLED (1) #define ACPI_WDAT_STOPPED 0x80 /* WDAT Instruction Entries (actions) */ typedef struct acpi_wdat_entry { UINT8 Action; UINT8 Instruction; UINT16 Reserved; ACPI_GENERIC_ADDRESS RegisterRegion; UINT32 Value; /* Value used with Read/Write register */ UINT32 Mask; /* Bitmask required for this register instruction */ } ACPI_WDAT_ENTRY; /* Values for Action field above */ enum AcpiWdatActions { ACPI_WDAT_RESET = 1, ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, ACPI_WDAT_GET_COUNTDOWN = 5, ACPI_WDAT_SET_COUNTDOWN = 6, ACPI_WDAT_GET_RUNNING_STATE = 8, ACPI_WDAT_SET_RUNNING_STATE = 9, ACPI_WDAT_GET_STOPPED_STATE = 10, ACPI_WDAT_SET_STOPPED_STATE = 11, ACPI_WDAT_GET_REBOOT = 16, ACPI_WDAT_SET_REBOOT = 17, ACPI_WDAT_GET_SHUTDOWN = 18, ACPI_WDAT_SET_SHUTDOWN = 19, ACPI_WDAT_GET_STATUS = 32, ACPI_WDAT_SET_STATUS = 33, ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ }; /* Values for Instruction field above */ enum AcpiWdatInstructions { ACPI_WDAT_READ_VALUE = 0, ACPI_WDAT_READ_COUNTDOWN = 1, ACPI_WDAT_WRITE_VALUE = 2, ACPI_WDAT_WRITE_COUNTDOWN = 3, ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ }; /******************************************************************************* * * WDDT - Watchdog Descriptor Table * Version 1 * * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)", * Version 001, September 2002 * ******************************************************************************/ typedef struct acpi_table_wddt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT16 SpecVersion; UINT16 TableVersion; UINT16 PciVendorId; ACPI_GENERIC_ADDRESS Address; UINT16 MaxCount; /* Maximum counter value supported */ UINT16 MinCount; /* Minimum counter value supported */ UINT16 Period; UINT16 Status; UINT16 Capability; } ACPI_TABLE_WDDT; /* Flags for Status field above */ #define ACPI_WDDT_AVAILABLE (1) #define ACPI_WDDT_ACTIVE (1<<1) #define ACPI_WDDT_TCO_OS_OWNED (1<<2) #define ACPI_WDDT_USER_RESET (1<<11) #define ACPI_WDDT_WDT_RESET (1<<12) #define ACPI_WDDT_POWER_FAIL (1<<13) #define ACPI_WDDT_UNKNOWN_RESET (1<<14) /* Flags for Capability field above */ #define ACPI_WDDT_AUTO_RESET (1) #define ACPI_WDDT_ALERT_SUPPORT (1<<1) /******************************************************************************* * * WDRT - Watchdog Resource Table * Version 1 * * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003", * Version 1.01, August 28, 2006 * ******************************************************************************/ typedef struct acpi_table_wdrt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ ACPI_GENERIC_ADDRESS ControlRegister; ACPI_GENERIC_ADDRESS CountRegister; UINT16 PciDeviceId; UINT16 PciVendorId; UINT8 PciBus; /* PCI Bus number */ UINT8 PciDevice; /* PCI Device number */ UINT8 PciFunction; /* PCI Function number */ UINT8 PciSegment; /* PCI Segment number */ UINT16 MaxCount; /* Maximum counter value supported */ UINT8 Units; } ACPI_TABLE_WDRT; /******************************************************************************* * * WPBT - Windows Platform Environment Table (ACPI 6.0) * Version 1 * * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011 * ******************************************************************************/ typedef struct acpi_table_wpbt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 HandoffSize; UINT64 HandoffAddress; UINT8 Layout; UINT8 Type; UINT16 ArgumentsLength; } ACPI_TABLE_WPBT; typedef struct acpi_wpbt_unicode { UINT16 *UnicodeString; } ACPI_WPBT_UNICODE; /******************************************************************************* * * WSMT - Windows SMM Security Mitigations Table * Version 1 * * Conforms to "Windows SMM Security Mitigations Table", * Version 1.0, April 18, 2016 * ******************************************************************************/ typedef struct acpi_table_wsmt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 ProtectionFlags; } ACPI_TABLE_WSMT; /* Flags for ProtectionFlags field above */ #define ACPI_WSMT_FIXED_COMM_BUFFERS (1) #define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2) #define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4) /******************************************************************************* * * XENV - Xen Environment Table (ACPI 6.0) * Version 1 * * Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015 * ******************************************************************************/ typedef struct acpi_table_xenv { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT64 GrantTableAddress; UINT64 GrantTableSize; UINT32 EventInterrupt; UINT8 EventFlags; } ACPI_TABLE_XENV; /* Reset to default packing */ #pragma pack() #endif /* __ACTBL3_H__ */ src/acpica/source/include/actypes.h000066400000000000000000001564371465205512700176600ustar00rootroot00000000000000/****************************************************************************** * * Name: actypes.h - Common data types for the entire ACPI subsystem * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACTYPES_H__ #define __ACTYPES_H__ /* acpisrc:StructDefs -- for acpisrc conversion */ /* * ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent * header and must be either 32 or 64. 16-bit ACPICA is no longer * supported, as of 12/2006. */ #ifndef ACPI_MACHINE_WIDTH #error ACPI_MACHINE_WIDTH not defined #endif /* * Data type ranges * Note: These macros are designed to be compiler independent as well as * working around problems that some 32-bit compilers have with 64-bit * constants. */ #define ACPI_UINT8_MAX (UINT8) (~((UINT8) 0)) /* 0xFF */ #define ACPI_UINT16_MAX (UINT16)(~((UINT16) 0)) /* 0xFFFF */ #define ACPI_UINT32_MAX (UINT32)(~((UINT32) 0)) /* 0xFFFFFFFF */ #define ACPI_UINT64_MAX (UINT64)(~((UINT64) 0)) /* 0xFFFFFFFFFFFFFFFF */ #define ACPI_ASCII_MAX 0x7F /* * Architecture-specific ACPICA Subsystem Data Types * * The goal of these types is to provide source code portability across * 16-bit, 32-bit, and 64-bit targets. * * 1) The following types are of fixed size for all targets (16/32/64): * * BOOLEAN Logical boolean * * UINT8 8-bit (1 byte) unsigned value * UINT16 16-bit (2 byte) unsigned value * UINT32 32-bit (4 byte) unsigned value * UINT64 64-bit (8 byte) unsigned value * * INT16 16-bit (2 byte) signed value * INT32 32-bit (4 byte) signed value * INT64 64-bit (8 byte) signed value * * COMPILER_DEPENDENT_UINT64/INT64 - These types are defined in the * compiler-dependent header(s) and were introduced because there is no * common 64-bit integer type across the various compilation models, as * shown in the table below. * * Datatype LP64 ILP64 LLP64 ILP32 LP32 16bit * char 8 8 8 8 8 8 * short 16 16 16 16 16 16 * _int32 32 * int 32 64 32 32 16 16 * long 64 64 32 32 32 32 * long long 64 64 * pointer 64 64 64 32 32 32 * * Note: ILP64 and LP32 are currently not supported. * * * 2) These types represent the native word size of the target mode of the * processor, and may be 16-bit, 32-bit, or 64-bit as required. They are * usually used for memory allocation, efficient loop counters, and array * indexes. The types are similar to the size_t type in the C library and * are required because there is no C type that consistently represents the * native data width. ACPI_SIZE is needed because there is no guarantee * that a kernel-level C library is present. * * ACPI_SIZE 16/32/64-bit unsigned value * ACPI_NATIVE_INT 16/32/64-bit signed value */ /******************************************************************************* * * Common types for all compilers, all targets * ******************************************************************************/ #ifndef ACPI_USE_SYSTEM_INTTYPES typedef unsigned char BOOLEAN; typedef unsigned char UINT8; typedef unsigned short UINT16; typedef short INT16; typedef COMPILER_DEPENDENT_UINT64 UINT64; typedef COMPILER_DEPENDENT_INT64 INT64; #endif /* ACPI_USE_SYSTEM_INTTYPES */ /* * Value returned by AcpiOsGetThreadId. There is no standard "thread_id" * across operating systems or even the various UNIX systems. Since ACPICA * only needs the thread ID as a unique thread identifier, we use a UINT64 * as the only common data type - it will accommodate any type of pointer or * any type of integer. It is up to the host-dependent OSL to cast the * native thread ID type to a UINT64 (in AcpiOsGetThreadId). */ #define ACPI_THREAD_ID UINT64 /******************************************************************************* * * Types specific to 64-bit targets * ******************************************************************************/ #if ACPI_MACHINE_WIDTH == 64 #ifndef ACPI_USE_SYSTEM_INTTYPES typedef unsigned int UINT32; typedef int INT32; #endif /* ACPI_USE_SYSTEM_INTTYPES */ typedef INT64 ACPI_NATIVE_INT; typedef UINT64 ACPI_SIZE; typedef UINT64 ACPI_IO_ADDRESS; typedef UINT64 ACPI_PHYSICAL_ADDRESS; #define ACPI_MAX_PTR ACPI_UINT64_MAX #define ACPI_SIZE_MAX ACPI_UINT64_MAX #define ACPI_USE_NATIVE_DIVIDE /* Has native 64-bit integer support */ #define ACPI_USE_NATIVE_MATH64 /* Has native 64-bit integer support */ /* * In the case of the Itanium Processor Family (IPF), the hardware does not * support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED * flag to indicate that special precautions must be taken to avoid alignment * faults. (IA64 or ia64 is currently used by existing compilers to indicate * IPF.) * * Note: EM64T and other X86-64 processors support misaligned transfers, * so there is no need to define this flag. */ #if defined (__IA64__) || defined (__ia64__) #define ACPI_MISALIGNMENT_NOT_SUPPORTED #endif /******************************************************************************* * * Types specific to 32-bit targets * ******************************************************************************/ #elif ACPI_MACHINE_WIDTH == 32 #ifndef ACPI_USE_SYSTEM_INTTYPES typedef unsigned int UINT32; typedef int INT32; #endif /* ACPI_USE_SYSTEM_INTTYPES */ typedef INT32 ACPI_NATIVE_INT; typedef UINT32 ACPI_SIZE; #ifdef ACPI_32BIT_PHYSICAL_ADDRESS /* * OSPMs can define this to shrink the size of the structures for 32-bit * none PAE environment. ASL compiler may always define this to generate * 32-bit OSPM compliant tables. */ typedef UINT32 ACPI_IO_ADDRESS; typedef UINT32 ACPI_PHYSICAL_ADDRESS; #else /* ACPI_32BIT_PHYSICAL_ADDRESS */ /* * It is reported that, after some calculations, the physical addresses can * wrap over the 32-bit boundary on 32-bit PAE environment. * https://bugzilla.kernel.org/show_bug.cgi?id=87971 */ typedef UINT64 ACPI_IO_ADDRESS; typedef UINT64 ACPI_PHYSICAL_ADDRESS; #endif /* ACPI_32BIT_PHYSICAL_ADDRESS */ #define ACPI_MAX_PTR ACPI_UINT32_MAX #define ACPI_SIZE_MAX ACPI_UINT32_MAX #else /* ACPI_MACHINE_WIDTH must be either 64 or 32 */ #error unknown ACPI_MACHINE_WIDTH #endif /******************************************************************************* * * OS-dependent types * * If the defaults below are not appropriate for the host system, they can * be defined in the OS-specific header, and this will take precedence. * ******************************************************************************/ /* Flags for AcpiOsAcquireLock/AcpiOsReleaseLock */ #ifndef ACPI_CPU_FLAGS #define ACPI_CPU_FLAGS ACPI_SIZE #endif /* Object returned from AcpiOsCreateCache */ #ifndef ACPI_CACHE_T #ifdef ACPI_USE_LOCAL_CACHE #define ACPI_CACHE_T ACPI_MEMORY_LIST #else #define ACPI_CACHE_T void * #endif #endif /* * Synchronization objects - Mutexes, Semaphores, and SpinLocks */ #if (ACPI_MUTEX_TYPE == ACPI_BINARY_SEMAPHORE) /* * These macros are used if the host OS does not support a mutex object. * Map the OSL Mutex interfaces to binary semaphores. */ #define ACPI_MUTEX ACPI_SEMAPHORE #define AcpiOsCreateMutex(OutHandle) AcpiOsCreateSemaphore (1, 1, OutHandle) #define AcpiOsDeleteMutex(Handle) (void) AcpiOsDeleteSemaphore (Handle) #define AcpiOsAcquireMutex(Handle,Time) AcpiOsWaitSemaphore (Handle, 1, Time) #define AcpiOsReleaseMutex(Handle) (void) AcpiOsSignalSemaphore (Handle, 1) #endif /* Configurable types for synchronization objects */ #ifndef ACPI_SPINLOCK #define ACPI_SPINLOCK void * #endif #ifndef ACPI_SEMAPHORE #define ACPI_SEMAPHORE void * #endif #ifndef ACPI_MUTEX #define ACPI_MUTEX void * #endif /******************************************************************************* * * Compiler-dependent types * * If the defaults below are not appropriate for the host compiler, they can * be defined in the compiler-specific header, and this will take precedence. * ******************************************************************************/ /* Use C99 uintptr_t for pointer casting if available, "void *" otherwise */ #ifndef ACPI_UINTPTR_T #define ACPI_UINTPTR_T void * #endif /* * ACPI_PRINTF_LIKE is used to tag functions as "printf-like" because * some compilers can catch printf format string problems */ #ifndef ACPI_PRINTF_LIKE #define ACPI_PRINTF_LIKE(c) #endif /* * Some compilers complain about unused variables. Sometimes we don't want * to use all the variables (for example, _AcpiModuleName). This allows us * to tell the compiler in a per-variable manner that a variable * is unused */ #ifndef ACPI_UNUSED_VAR #define ACPI_UNUSED_VAR #endif /* * All ACPICA external functions that are available to the rest of the * kernel are tagged with these macros which can be defined as appropriate * for the host. * * Notes: * ACPI_EXPORT_SYMBOL_INIT is used for initialization and termination * interfaces that may need special processing. * ACPI_EXPORT_SYMBOL is used for all other public external functions. */ #ifndef ACPI_EXPORT_SYMBOL_INIT #define ACPI_EXPORT_SYMBOL_INIT(Symbol) #endif #ifndef ACPI_EXPORT_SYMBOL #define ACPI_EXPORT_SYMBOL(Symbol) #endif /* * Compiler/Clibrary-dependent debug initialization. Used for ACPICA * utilities only. */ #ifndef ACPI_DEBUG_INITIALIZE #define ACPI_DEBUG_INITIALIZE() #endif /******************************************************************************* * * Configuration * ******************************************************************************/ #ifdef ACPI_NO_MEM_ALLOCATIONS #define ACPI_ALLOCATE(a) NULL #define ACPI_ALLOCATE_ZEROED(a) NULL #define ACPI_FREE(a) #define ACPI_MEM_TRACKING(a) #else /* ACPI_NO_MEM_ALLOCATIONS */ #ifdef ACPI_DBG_TRACK_ALLOCATIONS /* * Memory allocation tracking (used by AcpiExec to detect memory leaks) */ #define ACPI_MEM_PARAMETERS _COMPONENT, _AcpiModuleName, __LINE__ #define ACPI_ALLOCATE(a) AcpiUtAllocateAndTrack ((ACPI_SIZE) (a), ACPI_MEM_PARAMETERS) #define ACPI_ALLOCATE_ZEROED(a) AcpiUtAllocateZeroedAndTrack ((ACPI_SIZE) (a), ACPI_MEM_PARAMETERS) #define ACPI_FREE(a) AcpiUtFreeAndTrack (a, ACPI_MEM_PARAMETERS) #define ACPI_MEM_TRACKING(a) a #else /* * Normal memory allocation directly via the OS services layer */ #define ACPI_ALLOCATE(a) AcpiOsAllocate ((ACPI_SIZE) (a)) #define ACPI_ALLOCATE_ZEROED(a) AcpiOsAllocateZeroed ((ACPI_SIZE) (a)) #define ACPI_FREE(a) AcpiOsFree (a) #define ACPI_MEM_TRACKING(a) #endif /* ACPI_DBG_TRACK_ALLOCATIONS */ #endif /* ACPI_NO_MEM_ALLOCATIONS */ /****************************************************************************** * * ACPI Specification constants (Do not change unless the specification * changes) * *****************************************************************************/ /* Number of distinct FADT-based GPE register blocks (GPE0 and GPE1) */ #define ACPI_MAX_GPE_BLOCKS 2 /* Default ACPI register widths */ #define ACPI_GPE_REGISTER_WIDTH 8 #define ACPI_PM1_REGISTER_WIDTH 16 #define ACPI_PM2_REGISTER_WIDTH 8 #define ACPI_PM_TIMER_WIDTH 32 #define ACPI_RESET_REGISTER_WIDTH 8 /* Names within the namespace are 4 bytes long */ #define ACPI_NAMESEG_SIZE 4 /* Fixed by ACPI spec */ #define ACPI_PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 char for separator */ #define ACPI_PATH_SEPARATOR '.' /* Sizes for ACPI table headers */ #define ACPI_OEM_ID_SIZE 6 #define ACPI_OEM_TABLE_ID_SIZE 8 /* ACPI/PNP hardware IDs */ #define PCI_ROOT_HID_STRING "PNP0A03" #define PCI_EXPRESS_ROOT_HID_STRING "PNP0A08" /* PM Timer ticks per second (HZ) */ #define ACPI_PM_TIMER_FREQUENCY 3579545 /******************************************************************************* * * Independent types * ******************************************************************************/ /* Logical defines and NULL */ #ifdef FALSE #undef FALSE #endif #define FALSE (1 == 0) #ifdef TRUE #undef TRUE #endif #define TRUE (1 == 1) #ifndef NULL #define NULL (void *) 0 #endif /* * Miscellaneous types */ typedef UINT32 ACPI_STATUS; /* All ACPI Exceptions */ typedef UINT32 ACPI_NAME; /* 4-byte ACPI name */ typedef char * ACPI_STRING; /* Null terminated ASCII string */ typedef void * ACPI_HANDLE; /* Actually a ptr to a NS Node */ /* Time constants for timer calculations */ #define ACPI_MSEC_PER_SEC 1000L #define ACPI_USEC_PER_MSEC 1000L #define ACPI_USEC_PER_SEC 1000000L #define ACPI_100NSEC_PER_USEC 10L #define ACPI_100NSEC_PER_MSEC 10000L #define ACPI_100NSEC_PER_SEC 10000000L #define ACPI_NSEC_PER_USEC 1000L #define ACPI_NSEC_PER_MSEC 1000000L #define ACPI_NSEC_PER_SEC 1000000000L #define ACPI_TIME_AFTER(a, b) ((INT64)((b) - (a)) < 0) /* Owner IDs are used to track namespace nodes for selective deletion */ typedef UINT16 ACPI_OWNER_ID; #define ACPI_OWNER_ID_MAX 0xFFF /* 4095 possible owner IDs */ #define ACPI_INTEGER_BIT_SIZE 64 #define ACPI_MAX_DECIMAL_DIGITS 20 /* 2^64 = 18,446,744,073,709,551,616 */ #define ACPI_MAX64_DECIMAL_DIGITS 20 #define ACPI_MAX32_DECIMAL_DIGITS 10 #define ACPI_MAX16_DECIMAL_DIGITS 5 #define ACPI_MAX8_DECIMAL_DIGITS 3 /* * Constants with special meanings */ #define ACPI_ROOT_OBJECT ((ACPI_HANDLE) ACPI_TO_POINTER (ACPI_MAX_PTR)) #define ACPI_WAIT_FOREVER 0xFFFF /* UINT16, as per ACPI spec */ #define ACPI_DO_NOT_WAIT 0 /* * Obsolete: Acpi integer width. In ACPI version 1 (1996), integers are * 32 bits. In ACPI version 2 (2000) and later, integers are max 64 bits. * Note that this pertains to the ACPI integer type only, not to other * integers used in the implementation of the ACPICA subsystem. * * 01/2010: This type is obsolete and has been removed from the entire ACPICA * code base. It remains here for compatibility with device drivers that use * the type. However, it will be removed in the future. */ typedef UINT64 ACPI_INTEGER; #define ACPI_INTEGER_MAX ACPI_UINT64_MAX /******************************************************************************* * * Commonly used macros * ******************************************************************************/ /* Data manipulation */ #define ACPI_LOBYTE(Integer) ((UINT8) (UINT16)(Integer)) #define ACPI_HIBYTE(Integer) ((UINT8) (((UINT16)(Integer)) >> 8)) #define ACPI_LOWORD(Integer) ((UINT16) (UINT32)(Integer)) #define ACPI_HIWORD(Integer) ((UINT16)(((UINT32)(Integer)) >> 16)) #define ACPI_LODWORD(Integer64) ((UINT32) (UINT64)(Integer64)) #define ACPI_HIDWORD(Integer64) ((UINT32)(((UINT64)(Integer64)) >> 32)) #define ACPI_SET_BIT(target,bit) ((target) |= (bit)) #define ACPI_CLEAR_BIT(target,bit) ((target) &= ~(bit)) #define ACPI_MIN(a,b) (((a)<(b))?(a):(b)) #define ACPI_MAX(a,b) (((a)>(b))?(a):(b)) /* Size calculation */ #define ACPI_ARRAY_LENGTH(x) (sizeof(x) / sizeof((x)[0])) /* Pointer manipulation */ #define ACPI_CAST_PTR(t, p) ((t *) (ACPI_UINTPTR_T) (p)) #define ACPI_CAST_INDIRECT_PTR(t, p) ((t **) (ACPI_UINTPTR_T) (p)) #define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (UINT8, (a)) + (ACPI_SIZE)(b))) #define ACPI_SUB_PTR(t, a, b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (UINT8, (a)) - (ACPI_SIZE)(b))) #define ACPI_PTR_DIFF(a, b) ((ACPI_SIZE) (ACPI_CAST_PTR (UINT8, (a)) - ACPI_CAST_PTR (UINT8, (b)))) /* Pointer/Integer type conversions */ #define ACPI_TO_POINTER(i) ACPI_CAST_PTR (void, (ACPI_SIZE) (i)) #ifndef ACPI_TO_INTEGER #define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) 0) #endif #ifndef ACPI_OFFSET #define ACPI_OFFSET(d, f) ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) 0) #endif #define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i) /* Optimizations for 4-character (32-bit) ACPI_NAME manipulation */ #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED #define ACPI_COMPARE_NAMESEG(a,b) (*ACPI_CAST_PTR (UINT32, (a)) == *ACPI_CAST_PTR (UINT32, (b))) #define ACPI_COPY_NAMESEG(dest,src) (*ACPI_CAST_PTR (UINT32, (dest)) = *ACPI_CAST_PTR (UINT32, (src))) #else #define ACPI_COMPARE_NAMESEG(a,b) (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_CAST_PTR (char, (b)), ACPI_NAMESEG_SIZE)) #define ACPI_COPY_NAMESEG(dest,src) (strncpy (ACPI_CAST_PTR (char, (dest)), ACPI_CAST_PTR (char, (src)), ACPI_NAMESEG_SIZE)) #endif /* Support for the special RSDP signature (8 characters) */ #define ACPI_VALIDATE_RSDP_SIG(a) (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_SIG_RSDP, 8)) #define ACPI_MAKE_RSDP_SIG(dest) (memcpy (ACPI_CAST_PTR (char, (dest)), ACPI_SIG_RSDP, 8)) /* Support for OEMx signature (x can be any character) */ #define ACPI_IS_OEM_SIG(a) (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_OEM_NAME, 3) &&\ strnlen (a, ACPI_NAMESEG_SIZE) == ACPI_NAMESEG_SIZE) /* * Algorithm to obtain access bit or byte width. * Can be used with AccessSize field of ACPI_GENERIC_ADDRESS and * ACPI_RESOURCE_GENERIC_REGISTER. */ #define ACPI_ACCESS_BIT_SHIFT 2 #define ACPI_ACCESS_BYTE_SHIFT -1 #define ACPI_ACCESS_BIT_MAX (31 - ACPI_ACCESS_BIT_SHIFT) #define ACPI_ACCESS_BYTE_MAX (31 - ACPI_ACCESS_BYTE_SHIFT) #define ACPI_ACCESS_BIT_DEFAULT (8 - ACPI_ACCESS_BIT_SHIFT) #define ACPI_ACCESS_BYTE_DEFAULT (8 - ACPI_ACCESS_BYTE_SHIFT) #define ACPI_ACCESS_BIT_WIDTH(size) (1 << ((size) + ACPI_ACCESS_BIT_SHIFT)) #define ACPI_ACCESS_BYTE_WIDTH(size) (1 << ((size) + ACPI_ACCESS_BYTE_SHIFT)) /******************************************************************************* * * Miscellaneous constants * ******************************************************************************/ /* * Initialization sequence options */ #define ACPI_FULL_INITIALIZATION 0x0000 #define ACPI_NO_FACS_INIT 0x0001 #define ACPI_NO_ACPI_ENABLE 0x0002 #define ACPI_NO_HARDWARE_INIT 0x0004 #define ACPI_NO_EVENT_INIT 0x0008 #define ACPI_NO_HANDLER_INIT 0x0010 #define ACPI_NO_OBJECT_INIT 0x0020 #define ACPI_NO_DEVICE_INIT 0x0040 #define ACPI_NO_ADDRESS_SPACE_INIT 0x0080 /* * Initialization state */ #define ACPI_SUBSYSTEM_INITIALIZE 0x01 #define ACPI_INITIALIZED_OK 0x02 /* * Power state values */ #define ACPI_STATE_UNKNOWN (UINT8) 0xFF #define ACPI_STATE_S0 (UINT8) 0 #define ACPI_STATE_S1 (UINT8) 1 #define ACPI_STATE_S2 (UINT8) 2 #define ACPI_STATE_S3 (UINT8) 3 #define ACPI_STATE_S4 (UINT8) 4 #define ACPI_STATE_S5 (UINT8) 5 #define ACPI_S_STATES_MAX ACPI_STATE_S5 #define ACPI_S_STATE_COUNT 6 #define ACPI_STATE_D0 (UINT8) 0 #define ACPI_STATE_D1 (UINT8) 1 #define ACPI_STATE_D2 (UINT8) 2 #define ACPI_STATE_D3 (UINT8) 3 #define ACPI_D_STATES_MAX ACPI_STATE_D3 #define ACPI_D_STATE_COUNT 4 #define ACPI_STATE_C0 (UINT8) 0 #define ACPI_STATE_C1 (UINT8) 1 #define ACPI_STATE_C2 (UINT8) 2 #define ACPI_STATE_C3 (UINT8) 3 #define ACPI_C_STATES_MAX ACPI_STATE_C3 #define ACPI_C_STATE_COUNT 4 /* * Sleep type invalid value */ #define ACPI_SLEEP_TYPE_MAX 0x7 #define ACPI_SLEEP_TYPE_INVALID 0xFF /* * Standard notify values */ #define ACPI_NOTIFY_BUS_CHECK (UINT8) 0x00 #define ACPI_NOTIFY_DEVICE_CHECK (UINT8) 0x01 #define ACPI_NOTIFY_DEVICE_WAKE (UINT8) 0x02 #define ACPI_NOTIFY_EJECT_REQUEST (UINT8) 0x03 #define ACPI_NOTIFY_DEVICE_CHECK_LIGHT (UINT8) 0x04 #define ACPI_NOTIFY_FREQUENCY_MISMATCH (UINT8) 0x05 #define ACPI_NOTIFY_BUS_MODE_MISMATCH (UINT8) 0x06 #define ACPI_NOTIFY_POWER_FAULT (UINT8) 0x07 #define ACPI_NOTIFY_CAPABILITIES_CHECK (UINT8) 0x08 #define ACPI_NOTIFY_DEVICE_PLD_CHECK (UINT8) 0x09 #define ACPI_NOTIFY_RESERVED (UINT8) 0x0A #define ACPI_NOTIFY_LOCALITY_UPDATE (UINT8) 0x0B #define ACPI_NOTIFY_SHUTDOWN_REQUEST (UINT8) 0x0C #define ACPI_NOTIFY_AFFINITY_UPDATE (UINT8) 0x0D #define ACPI_NOTIFY_MEMORY_UPDATE (UINT8) 0x0E #define ACPI_NOTIFY_DISCONNECT_RECOVER (UINT8) 0x0F #define ACPI_GENERIC_NOTIFY_MAX 0x0F #define ACPI_SPECIFIC_NOTIFY_MAX 0x84 /* * Types associated with ACPI names and objects. The first group of * values (up to ACPI_TYPE_EXTERNAL_MAX) correspond to the definition * of the ACPI ObjectType() operator (See the ACPI Spec). Therefore, * only add to the first group if the spec changes. * * NOTE: Types must be kept in sync with the global AcpiNsProperties * and AcpiNsTypeNames arrays. */ typedef UINT32 ACPI_OBJECT_TYPE; #define ACPI_TYPE_ANY 0x00 #define ACPI_TYPE_INTEGER 0x01 /* Byte/Word/Dword/Zero/One/Ones */ #define ACPI_TYPE_STRING 0x02 #define ACPI_TYPE_BUFFER 0x03 #define ACPI_TYPE_PACKAGE 0x04 /* ByteConst, multiple DataTerm/Constant/SuperName */ #define ACPI_TYPE_FIELD_UNIT 0x05 #define ACPI_TYPE_DEVICE 0x06 /* Name, multiple Node */ #define ACPI_TYPE_EVENT 0x07 #define ACPI_TYPE_METHOD 0x08 /* Name, ByteConst, multiple Code */ #define ACPI_TYPE_MUTEX 0x09 #define ACPI_TYPE_REGION 0x0A #define ACPI_TYPE_POWER 0x0B /* Name,ByteConst,WordConst,multi Node */ #define ACPI_TYPE_PROCESSOR 0x0C /* Name,ByteConst,DWordConst,ByteConst,multi NmO */ #define ACPI_TYPE_THERMAL 0x0D /* Name, multiple Node */ #define ACPI_TYPE_BUFFER_FIELD 0x0E #define ACPI_TYPE_DDB_HANDLE 0x0F #define ACPI_TYPE_DEBUG_OBJECT 0x10 #define ACPI_TYPE_EXTERNAL_MAX 0x10 #define ACPI_NUM_TYPES (ACPI_TYPE_EXTERNAL_MAX + 1) /* * These are object types that do not map directly to the ACPI * ObjectType() operator. They are used for various internal purposes * only. If new predefined ACPI_TYPEs are added (via the ACPI * specification), these internal types must move upwards. (There * is code that depends on these values being contiguous with the * external types above.) */ #define ACPI_TYPE_LOCAL_REGION_FIELD 0x11 #define ACPI_TYPE_LOCAL_BANK_FIELD 0x12 #define ACPI_TYPE_LOCAL_INDEX_FIELD 0x13 #define ACPI_TYPE_LOCAL_REFERENCE 0x14 /* Arg#, Local#, Name, Debug, RefOf, Index */ #define ACPI_TYPE_LOCAL_ALIAS 0x15 #define ACPI_TYPE_LOCAL_METHOD_ALIAS 0x16 #define ACPI_TYPE_LOCAL_NOTIFY 0x17 #define ACPI_TYPE_LOCAL_ADDRESS_HANDLER 0x18 #define ACPI_TYPE_LOCAL_RESOURCE 0x19 #define ACPI_TYPE_LOCAL_RESOURCE_FIELD 0x1A #define ACPI_TYPE_LOCAL_SCOPE 0x1B /* 1 Name, multiple ObjectList Nodes */ #define ACPI_TYPE_NS_NODE_MAX 0x1B /* Last typecode used within a NS Node */ #define ACPI_TOTAL_TYPES (ACPI_TYPE_NS_NODE_MAX + 1) /* * These are special object types that never appear in * a Namespace node, only in an object of ACPI_OPERAND_OBJECT */ #define ACPI_TYPE_LOCAL_EXTRA 0x1C #define ACPI_TYPE_LOCAL_DATA 0x1D #define ACPI_TYPE_LOCAL_MAX 0x1D /* All types above here are invalid */ #define ACPI_TYPE_INVALID 0x1E #define ACPI_TYPE_NOT_FOUND 0xFF #define ACPI_NUM_NS_TYPES (ACPI_TYPE_INVALID + 1) /* * All I/O */ #define ACPI_READ 0 #define ACPI_WRITE 1 #define ACPI_IO_MASK 1 /* * Event Types: Fixed & General Purpose */ typedef UINT32 ACPI_EVENT_TYPE; /* * Fixed events */ #define ACPI_EVENT_PMTIMER 0 #define ACPI_EVENT_GLOBAL 1 #define ACPI_EVENT_POWER_BUTTON 2 #define ACPI_EVENT_SLEEP_BUTTON 3 #define ACPI_EVENT_RTC 4 #define ACPI_EVENT_MAX 4 #define ACPI_NUM_FIXED_EVENTS ACPI_EVENT_MAX + 1 /* * Event Status - Per event * ------------- * The encoding of ACPI_EVENT_STATUS is illustrated below. * Note that a set bit (1) indicates the property is TRUE * (e.g. if bit 0 is set then the event is enabled). * +-------------+-+-+-+-+-+-+ * | Bits 31:6 |5|4|3|2|1|0| * +-------------+-+-+-+-+-+-+ * | | | | | | | * | | | | | | +- Enabled? * | | | | | +--- Enabled for wake? * | | | | +----- Status bit set? * | | | +------- Enable bit set? * | | +--------- Has a handler? * | +----------- Masked? * +----------------- */ typedef UINT32 ACPI_EVENT_STATUS; #define ACPI_EVENT_FLAG_DISABLED (ACPI_EVENT_STATUS) 0x00 #define ACPI_EVENT_FLAG_ENABLED (ACPI_EVENT_STATUS) 0x01 #define ACPI_EVENT_FLAG_WAKE_ENABLED (ACPI_EVENT_STATUS) 0x02 #define ACPI_EVENT_FLAG_STATUS_SET (ACPI_EVENT_STATUS) 0x04 #define ACPI_EVENT_FLAG_ENABLE_SET (ACPI_EVENT_STATUS) 0x08 #define ACPI_EVENT_FLAG_HAS_HANDLER (ACPI_EVENT_STATUS) 0x10 #define ACPI_EVENT_FLAG_MASKED (ACPI_EVENT_STATUS) 0x20 #define ACPI_EVENT_FLAG_SET ACPI_EVENT_FLAG_STATUS_SET /* Actions for AcpiSetGpe, AcpiGpeWakeup, AcpiHwLowSetGpe */ #define ACPI_GPE_ENABLE 0 #define ACPI_GPE_DISABLE 1 #define ACPI_GPE_CONDITIONAL_ENABLE 2 /* * GPE info flags - Per GPE * +---+-+-+-+---+ * |7:6|5|4|3|2:0| * +---+-+-+-+---+ * | | | | | * | | | | +-- Type of dispatch:to method, handler, notify, or none * | | | +----- Interrupt type: edge or level triggered * | | +------- Is a Wake GPE * | +--------- Has been enabled automatically at init time * +------------ */ #define ACPI_GPE_DISPATCH_NONE (UINT8) 0x00 #define ACPI_GPE_DISPATCH_METHOD (UINT8) 0x01 #define ACPI_GPE_DISPATCH_HANDLER (UINT8) 0x02 #define ACPI_GPE_DISPATCH_NOTIFY (UINT8) 0x03 #define ACPI_GPE_DISPATCH_RAW_HANDLER (UINT8) 0x04 #define ACPI_GPE_DISPATCH_MASK (UINT8) 0x07 #define ACPI_GPE_DISPATCH_TYPE(flags) ((UINT8) ((flags) & ACPI_GPE_DISPATCH_MASK)) #define ACPI_GPE_LEVEL_TRIGGERED (UINT8) 0x08 #define ACPI_GPE_EDGE_TRIGGERED (UINT8) 0x00 #define ACPI_GPE_XRUPT_TYPE_MASK (UINT8) 0x08 #define ACPI_GPE_CAN_WAKE (UINT8) 0x10 #define ACPI_GPE_AUTO_ENABLED (UINT8) 0x20 #define ACPI_GPE_INITIALIZED (UINT8) 0x40 /* * Flags for GPE and Lock interfaces */ #define ACPI_NOT_ISR 0x1 #define ACPI_ISR 0x0 /* Notify types */ #define ACPI_SYSTEM_NOTIFY 0x1 #define ACPI_DEVICE_NOTIFY 0x2 #define ACPI_ALL_NOTIFY (ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY) #define ACPI_MAX_NOTIFY_HANDLER_TYPE 0x3 #define ACPI_NUM_NOTIFY_TYPES 2 #define ACPI_MAX_SYS_NOTIFY 0x7F #define ACPI_MAX_DEVICE_SPECIFIC_NOTIFY 0xBF #define ACPI_SYSTEM_HANDLER_LIST 0 /* Used as index, must be SYSTEM_NOTIFY -1 */ #define ACPI_DEVICE_HANDLER_LIST 1 /* Used as index, must be DEVICE_NOTIFY -1 */ /* Address Space (Operation Region) Types */ typedef UINT8 ACPI_ADR_SPACE_TYPE; #define ACPI_ADR_SPACE_SYSTEM_MEMORY (ACPI_ADR_SPACE_TYPE) 0 #define ACPI_ADR_SPACE_SYSTEM_IO (ACPI_ADR_SPACE_TYPE) 1 #define ACPI_ADR_SPACE_PCI_CONFIG (ACPI_ADR_SPACE_TYPE) 2 #define ACPI_ADR_SPACE_EC (ACPI_ADR_SPACE_TYPE) 3 #define ACPI_ADR_SPACE_SMBUS (ACPI_ADR_SPACE_TYPE) 4 #define ACPI_ADR_SPACE_CMOS (ACPI_ADR_SPACE_TYPE) 5 #define ACPI_ADR_SPACE_PCI_BAR_TARGET (ACPI_ADR_SPACE_TYPE) 6 #define ACPI_ADR_SPACE_IPMI (ACPI_ADR_SPACE_TYPE) 7 #define ACPI_ADR_SPACE_GPIO (ACPI_ADR_SPACE_TYPE) 8 #define ACPI_ADR_SPACE_GSBUS (ACPI_ADR_SPACE_TYPE) 9 #define ACPI_ADR_SPACE_PLATFORM_COMM (ACPI_ADR_SPACE_TYPE) 10 #define ACPI_ADR_SPACE_PLATFORM_RT (ACPI_ADR_SPACE_TYPE) 11 #define ACPI_NUM_PREDEFINED_REGIONS 12 /* * Special Address Spaces * * Note: A Data Table region is a special type of operation region * that has its own AML opcode. However, internally, the AML * interpreter simply creates an operation region with an address * space type of ACPI_ADR_SPACE_DATA_TABLE. */ #define ACPI_ADR_SPACE_DATA_TABLE (ACPI_ADR_SPACE_TYPE) 0x7E /* Internal to ACPICA only */ #define ACPI_ADR_SPACE_FIXED_HARDWARE (ACPI_ADR_SPACE_TYPE) 0x7F /* Values for _REG connection code */ #define ACPI_REG_DISCONNECT 0 #define ACPI_REG_CONNECT 1 /* * BitRegister IDs * * These values are intended to be used by the hardware interfaces * and are mapped to individual bitfields defined within the ACPI * registers. See the AcpiGbl_BitRegisterInfo global table in utglobal.c * for this mapping. */ /* PM1 Status register */ #define ACPI_BITREG_TIMER_STATUS 0x00 #define ACPI_BITREG_BUS_MASTER_STATUS 0x01 #define ACPI_BITREG_GLOBAL_LOCK_STATUS 0x02 #define ACPI_BITREG_POWER_BUTTON_STATUS 0x03 #define ACPI_BITREG_SLEEP_BUTTON_STATUS 0x04 #define ACPI_BITREG_RT_CLOCK_STATUS 0x05 #define ACPI_BITREG_WAKE_STATUS 0x06 #define ACPI_BITREG_PCIEXP_WAKE_STATUS 0x07 /* PM1 Enable register */ #define ACPI_BITREG_TIMER_ENABLE 0x08 #define ACPI_BITREG_GLOBAL_LOCK_ENABLE 0x09 #define ACPI_BITREG_POWER_BUTTON_ENABLE 0x0A #define ACPI_BITREG_SLEEP_BUTTON_ENABLE 0x0B #define ACPI_BITREG_RT_CLOCK_ENABLE 0x0C #define ACPI_BITREG_PCIEXP_WAKE_DISABLE 0x0D /* PM1 Control register */ #define ACPI_BITREG_SCI_ENABLE 0x0E #define ACPI_BITREG_BUS_MASTER_RLD 0x0F #define ACPI_BITREG_GLOBAL_LOCK_RELEASE 0x10 #define ACPI_BITREG_SLEEP_TYPE 0x11 #define ACPI_BITREG_SLEEP_ENABLE 0x12 /* PM2 Control register */ #define ACPI_BITREG_ARB_DISABLE 0x13 #define ACPI_BITREG_MAX 0x13 #define ACPI_NUM_BITREG ACPI_BITREG_MAX + 1 /* Status register values. A 1 clears a status bit. 0 = no effect */ #define ACPI_CLEAR_STATUS 1 /* Enable and Control register values */ #define ACPI_ENABLE_EVENT 1 #define ACPI_DISABLE_EVENT 0 /* Sleep function dispatch */ typedef ACPI_STATUS (*ACPI_SLEEP_FUNCTION) ( UINT8 SleepState); typedef struct acpi_sleep_functions { ACPI_SLEEP_FUNCTION LegacyFunction; ACPI_SLEEP_FUNCTION ExtendedFunction; } ACPI_SLEEP_FUNCTIONS; /* * External ACPI object definition */ /* * Note: Type == ACPI_TYPE_ANY (0) is used to indicate a NULL package * element or an unresolved named reference. */ typedef union acpi_object { ACPI_OBJECT_TYPE Type; /* See definition of AcpiNsType for values */ struct { ACPI_OBJECT_TYPE Type; /* ACPI_TYPE_INTEGER */ UINT64 Value; /* The actual number */ } Integer; struct { ACPI_OBJECT_TYPE Type; /* ACPI_TYPE_STRING */ UINT32 Length; /* # of bytes in string, excluding trailing null */ char *Pointer; /* points to the string value */ } String; struct { ACPI_OBJECT_TYPE Type; /* ACPI_TYPE_BUFFER */ UINT32 Length; /* # of bytes in buffer */ UINT8 *Pointer; /* points to the buffer */ } Buffer; struct { ACPI_OBJECT_TYPE Type; /* ACPI_TYPE_PACKAGE */ UINT32 Count; /* # of elements in package */ union acpi_object *Elements; /* Pointer to an array of ACPI_OBJECTs */ } Package; struct { ACPI_OBJECT_TYPE Type; /* ACPI_TYPE_LOCAL_REFERENCE */ ACPI_OBJECT_TYPE ActualType; /* Type associated with the Handle */ ACPI_HANDLE Handle; /* object reference */ } Reference; struct { ACPI_OBJECT_TYPE Type; /* ACPI_TYPE_PROCESSOR */ UINT32 ProcId; ACPI_IO_ADDRESS PblkAddress; UINT32 PblkLength; } Processor; struct { ACPI_OBJECT_TYPE Type; /* ACPI_TYPE_POWER */ UINT32 SystemLevel; UINT32 ResourceOrder; } PowerResource; } ACPI_OBJECT; /* * List of objects, used as a parameter list for control method evaluation */ typedef struct acpi_object_list { UINT32 Count; ACPI_OBJECT *Pointer; } ACPI_OBJECT_LIST; /* * Miscellaneous common Data Structures used by the interfaces */ #define ACPI_NO_BUFFER 0 #ifdef ACPI_NO_MEM_ALLOCATIONS #define ACPI_ALLOCATE_BUFFER (ACPI_SIZE) (0) #define ACPI_ALLOCATE_LOCAL_BUFFER (ACPI_SIZE) (0) #else /* ACPI_NO_MEM_ALLOCATIONS */ #define ACPI_ALLOCATE_BUFFER (ACPI_SIZE) (-1) /* Let ACPICA allocate buffer */ #define ACPI_ALLOCATE_LOCAL_BUFFER (ACPI_SIZE) (-2) /* For internal use only (enables tracking) */ #endif /* ACPI_NO_MEM_ALLOCATIONS */ typedef struct acpi_buffer { ACPI_SIZE Length; /* Length in bytes of the buffer */ void *Pointer; /* pointer to buffer */ } ACPI_BUFFER; /* * NameType for AcpiGetName */ #define ACPI_FULL_PATHNAME 0 #define ACPI_SINGLE_NAME 1 #define ACPI_FULL_PATHNAME_NO_TRAILING 2 #define ACPI_NAME_TYPE_MAX 2 /* * Predefined Namespace items */ typedef struct acpi_predefined_names { const char *Name; UINT8 Type; char *Val; } ACPI_PREDEFINED_NAMES; /* * Structure and flags for AcpiGetSystemInfo */ #define ACPI_SYS_MODE_UNKNOWN 0x0000 #define ACPI_SYS_MODE_ACPI 0x0001 #define ACPI_SYS_MODE_LEGACY 0x0002 #define ACPI_SYS_MODES_MASK 0x0003 /* * System info returned by AcpiGetSystemInfo() */ typedef struct acpi_system_info { UINT32 AcpiCaVersion; UINT32 Flags; UINT32 TimerResolution; UINT32 Reserved1; UINT32 Reserved2; UINT32 DebugLevel; UINT32 DebugLayer; } ACPI_SYSTEM_INFO; /* * System statistics returned by AcpiGetStatistics() */ typedef struct acpi_statistics { UINT32 SciCount; UINT32 GpeCount; UINT32 FixedEventCount[ACPI_NUM_FIXED_EVENTS]; UINT32 MethodCount; } ACPI_STATISTICS; /* * Types specific to the OS service interfaces */ typedef UINT32 (ACPI_SYSTEM_XFACE *ACPI_OSD_HANDLER) ( void *Context); typedef void (ACPI_SYSTEM_XFACE *ACPI_OSD_EXEC_CALLBACK) ( void *Context); /* * Various handlers and callback procedures */ typedef UINT32 (*ACPI_SCI_HANDLER) ( void *Context); typedef void (*ACPI_GBL_EVENT_HANDLER) ( UINT32 EventType, ACPI_HANDLE Device, UINT32 EventNumber, void *Context); #define ACPI_EVENT_TYPE_GPE 0 #define ACPI_EVENT_TYPE_FIXED 1 typedef UINT32 (*ACPI_EVENT_HANDLER) ( void *Context); typedef UINT32 (*ACPI_GPE_HANDLER) ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, void *Context); typedef void (*ACPI_NOTIFY_HANDLER) ( ACPI_HANDLE Device, UINT32 Value, void *Context); typedef void (*ACPI_OBJECT_HANDLER) ( ACPI_HANDLE Object, void *Data); typedef ACPI_STATUS (*ACPI_INIT_HANDLER) ( ACPI_HANDLE Object, UINT32 Function); #define ACPI_INIT_DEVICE_INI 1 typedef ACPI_STATUS (*ACPI_EXCEPTION_HANDLER) ( ACPI_STATUS AmlStatus, ACPI_NAME Name, UINT16 Opcode, UINT32 AmlOffset, void *Context); /* Table Event handler (Load, LoadTable, etc.) and types */ typedef ACPI_STATUS (*ACPI_TABLE_HANDLER) ( UINT32 Event, void *Table, void *Context); /* Table Event Types */ #define ACPI_TABLE_EVENT_LOAD 0x0 #define ACPI_TABLE_EVENT_UNLOAD 0x1 #define ACPI_TABLE_EVENT_INSTALL 0x2 #define ACPI_TABLE_EVENT_UNINSTALL 0x3 #define ACPI_NUM_TABLE_EVENTS 4 /* Address Spaces (For Operation Regions) */ typedef ACPI_STATUS (*ACPI_ADR_SPACE_HANDLER) ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext); #define ACPI_DEFAULT_HANDLER NULL /* Special Context data for GenericSerialBus/GeneralPurposeIo (ACPI 5.0) */ typedef struct acpi_connection_info { UINT8 *Connection; UINT16 Length; UINT8 AccessLength; } ACPI_CONNECTION_INFO; /* Special Context data for PCC Opregion (ACPI 6.3) */ typedef struct acpi_pcc_info { UINT8 SubspaceId; UINT16 Length; UINT8 *InternalBuffer; } ACPI_PCC_INFO; /* Special Context data for FFH Opregion (ACPI 6.5) */ typedef struct acpi_ffh_info { UINT64 Offset; UINT64 Length; } ACPI_FFH_INFO; typedef ACPI_STATUS (*ACPI_ADR_SPACE_SETUP) ( ACPI_HANDLE RegionHandle, UINT32 Function, void *HandlerContext, void **RegionContext); #define ACPI_REGION_ACTIVATE 0 #define ACPI_REGION_DEACTIVATE 1 typedef ACPI_STATUS (*ACPI_WALK_CALLBACK) ( ACPI_HANDLE Object, UINT32 NestingLevel, void *Context, void **ReturnValue); typedef UINT32 (*ACPI_INTERFACE_HANDLER) ( ACPI_STRING InterfaceName, UINT32 Supported); /* Interrupt handler return values */ #define ACPI_INTERRUPT_NOT_HANDLED 0x00 #define ACPI_INTERRUPT_HANDLED 0x01 /* GPE handler return values */ #define ACPI_REENABLE_GPE 0x80 /* Length of 32-bit EISAID values when converted back to a string */ #define ACPI_EISAID_STRING_SIZE 8 /* Includes null terminator */ /* Length of UUID (string) values */ #define ACPI_UUID_LENGTH 16 /* Length of 3-byte PCI class code values when converted back to a string */ #define ACPI_PCICLS_STRING_SIZE 7 /* Includes null terminator */ /* Structures used for device/processor HID, UID, CID */ typedef struct acpi_pnp_device_id { UINT32 Length; /* Length of string + null */ char *String; } ACPI_PNP_DEVICE_ID; typedef struct acpi_pnp_device_id_list { UINT32 Count; /* Number of IDs in Ids array */ UINT32 ListSize; /* Size of list, including ID strings */ ACPI_PNP_DEVICE_ID Ids[]; /* ID array */ } ACPI_PNP_DEVICE_ID_LIST; /* * Structure returned from AcpiGetObjectInfo. * Optimized for both 32-bit and 64-bit builds. */ typedef struct acpi_device_info { UINT32 InfoSize; /* Size of info, including ID strings */ UINT32 Name; /* ACPI object Name */ ACPI_OBJECT_TYPE Type; /* ACPI object Type */ UINT8 ParamCount; /* If a method, required parameter count */ UINT16 Valid; /* Indicates which optional fields are valid */ UINT8 Flags; /* Miscellaneous info */ UINT8 HighestDstates[4]; /* _SxD values: 0xFF indicates not valid */ UINT8 LowestDstates[5]; /* _SxW values: 0xFF indicates not valid */ UINT64 Address; /* _ADR value */ ACPI_PNP_DEVICE_ID HardwareId; /* _HID value */ ACPI_PNP_DEVICE_ID UniqueId; /* _UID value */ ACPI_PNP_DEVICE_ID ClassCode; /* _CLS value */ ACPI_PNP_DEVICE_ID_LIST CompatibleIdList; /* _CID list */ } ACPI_DEVICE_INFO; /* Values for Flags field above (AcpiGetObjectInfo) */ #define ACPI_PCI_ROOT_BRIDGE 0x01 /* Flags for Valid field above (AcpiGetObjectInfo) */ #define ACPI_VALID_ADR 0x0002 #define ACPI_VALID_HID 0x0004 #define ACPI_VALID_UID 0x0008 #define ACPI_VALID_CID 0x0020 #define ACPI_VALID_CLS 0x0040 #define ACPI_VALID_SXDS 0x0100 #define ACPI_VALID_SXWS 0x0200 /* Flags for _STA method */ #define ACPI_STA_DEVICE_PRESENT 0x01 #define ACPI_STA_DEVICE_ENABLED 0x02 #define ACPI_STA_DEVICE_UI 0x04 #define ACPI_STA_DEVICE_FUNCTIONING 0x08 #define ACPI_STA_DEVICE_OK 0x08 /* Synonym */ #define ACPI_STA_BATTERY_PRESENT 0x10 /* Context structs for address space handlers */ typedef struct acpi_pci_id { UINT16 Segment; UINT16 Bus; UINT16 Device; UINT16 Function; } ACPI_PCI_ID; typedef struct acpi_mem_mapping { ACPI_PHYSICAL_ADDRESS PhysicalAddress; UINT8 *LogicalAddress; ACPI_SIZE Length; struct acpi_mem_mapping *NextMm; } ACPI_MEM_MAPPING; typedef struct acpi_mem_space_context { UINT32 Length; ACPI_PHYSICAL_ADDRESS Address; ACPI_MEM_MAPPING *CurMm; ACPI_MEM_MAPPING *FirstMm; } ACPI_MEM_SPACE_CONTEXT; typedef struct acpi_data_table_mapping { void *Pointer; } ACPI_DATA_TABLE_MAPPING; /* * ACPI_MEMORY_LIST is used only if the ACPICA local cache is enabled */ typedef struct acpi_memory_list { const char *ListName; void *ListHead; UINT16 ObjectSize; UINT16 MaxDepth; UINT16 CurrentDepth; #ifdef ACPI_DBG_TRACK_ALLOCATIONS /* Statistics for debug memory tracking only */ UINT32 TotalAllocated; UINT32 TotalFreed; UINT32 MaxOccupied; UINT32 TotalSize; UINT32 CurrentTotalSize; UINT32 Requests; UINT32 Hits; #endif } ACPI_MEMORY_LIST; /* Definitions of trace event types */ typedef enum { ACPI_TRACE_AML_METHOD, ACPI_TRACE_AML_OPCODE, ACPI_TRACE_AML_REGION } ACPI_TRACE_EVENT_TYPE; /* Definitions of _OSI support */ #define ACPI_VENDOR_STRINGS 0x01 #define ACPI_FEATURE_STRINGS 0x02 #define ACPI_ENABLE_INTERFACES 0x00 #define ACPI_DISABLE_INTERFACES 0x04 #define ACPI_DISABLE_ALL_VENDOR_STRINGS (ACPI_DISABLE_INTERFACES | ACPI_VENDOR_STRINGS) #define ACPI_DISABLE_ALL_FEATURE_STRINGS (ACPI_DISABLE_INTERFACES | ACPI_FEATURE_STRINGS) #define ACPI_DISABLE_ALL_STRINGS (ACPI_DISABLE_INTERFACES | ACPI_VENDOR_STRINGS | ACPI_FEATURE_STRINGS) #define ACPI_ENABLE_ALL_VENDOR_STRINGS (ACPI_ENABLE_INTERFACES | ACPI_VENDOR_STRINGS) #define ACPI_ENABLE_ALL_FEATURE_STRINGS (ACPI_ENABLE_INTERFACES | ACPI_FEATURE_STRINGS) #define ACPI_ENABLE_ALL_STRINGS (ACPI_ENABLE_INTERFACES | ACPI_VENDOR_STRINGS | ACPI_FEATURE_STRINGS) #define ACPI_OSI_WIN_2000 0x01 #define ACPI_OSI_WIN_XP 0x02 #define ACPI_OSI_WIN_XP_SP1 0x03 #define ACPI_OSI_WINSRV_2003 0x04 #define ACPI_OSI_WIN_XP_SP2 0x05 #define ACPI_OSI_WINSRV_2003_SP1 0x06 #define ACPI_OSI_WIN_VISTA 0x07 #define ACPI_OSI_WINSRV_2008 0x08 #define ACPI_OSI_WIN_VISTA_SP1 0x09 #define ACPI_OSI_WIN_VISTA_SP2 0x0A #define ACPI_OSI_WIN_7 0x0B #define ACPI_OSI_WIN_8 0x0C #define ACPI_OSI_WIN_8_1 0x0D #define ACPI_OSI_WIN_10 0x0E #define ACPI_OSI_WIN_10_RS1 0x0F #define ACPI_OSI_WIN_10_RS2 0x10 #define ACPI_OSI_WIN_10_RS3 0x11 #define ACPI_OSI_WIN_10_RS4 0x12 #define ACPI_OSI_WIN_10_RS5 0x13 #define ACPI_OSI_WIN_10_19H1 0x14 #define ACPI_OSI_WIN_10_20H1 0x15 #define ACPI_OSI_WIN_11 0x16 /* Definitions of getopt */ #define ACPI_OPT_END -1 /* Definitions for explicit fallthrough */ #ifndef ACPI_FALLTHROUGH #define ACPI_FALLTHROUGH do {} while(0) #endif #ifndef ACPI_FLEX_ARRAY #define ACPI_FLEX_ARRAY(TYPE, NAME) TYPE NAME[0] #endif #endif /* __ACTYPES_H__ */ src/acpica/source/include/acutils.h000066400000000000000000001046401465205512700176410ustar00rootroot00000000000000/****************************************************************************** * * Name: acutils.h -- prototypes for the common (subsystem-wide) procedures * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef _ACUTILS_H #define _ACUTILS_H extern const UINT8 AcpiGbl_ResourceAmlSizes[]; extern const UINT8 AcpiGbl_ResourceAmlSerialBusSizes[]; /* Strings used by the disassembler and debugger resource dump routines */ #if defined(ACPI_DEBUG_OUTPUT) || defined (ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER) extern const char *AcpiGbl_BmDecode[]; extern const char *AcpiGbl_ConfigDecode[]; extern const char *AcpiGbl_ConsumeDecode[]; extern const char *AcpiGbl_DecDecode[]; extern const char *AcpiGbl_HeDecode[]; extern const char *AcpiGbl_IoDecode[]; extern const char *AcpiGbl_LlDecode[]; extern const char *AcpiGbl_MaxDecode[]; extern const char *AcpiGbl_MemDecode[]; extern const char *AcpiGbl_MinDecode[]; extern const char *AcpiGbl_MtpDecode[]; extern const char *AcpiGbl_PhyDecode[]; extern const char *AcpiGbl_RngDecode[]; extern const char *AcpiGbl_RwDecode[]; extern const char *AcpiGbl_ShrDecode[]; extern const char *AcpiGbl_SizDecode[]; extern const char *AcpiGbl_TrsDecode[]; extern const char *AcpiGbl_TtpDecode[]; extern const char *AcpiGbl_TypDecode[]; extern const char *AcpiGbl_PpcDecode[]; extern const char *AcpiGbl_IorDecode[]; extern const char *AcpiGbl_DtsDecode[]; extern const char *AcpiGbl_CtDecode[]; extern const char *AcpiGbl_SbtDecode[]; extern const char *AcpiGbl_AmDecode[]; extern const char *AcpiGbl_SmDecode[]; extern const char *AcpiGbl_WmDecode[]; extern const char *AcpiGbl_CphDecode[]; extern const char *AcpiGbl_CpoDecode[]; extern const char *AcpiGbl_DpDecode[]; extern const char *AcpiGbl_EdDecode[]; extern const char *AcpiGbl_BpbDecode[]; extern const char *AcpiGbl_SbDecode[]; extern const char *AcpiGbl_FcDecode[]; extern const char *AcpiGbl_PtDecode[]; extern const char *AcpiGbl_PtypDecode[]; extern const char *AcpiGbl_ClockInputMode[]; extern const char *AcpiGbl_ClockInputScale[]; #endif /* * For the iASL compiler case, the output is redirected to stderr so that * any of the various ACPI errors and warnings do not appear in the output * files, for either the compiler or disassembler portions of the tool. */ #ifdef ACPI_ASL_COMPILER #include #define ACPI_MSG_REDIRECT_BEGIN \ FILE *OutputFile = AcpiGbl_OutputFile; \ AcpiOsRedirectOutput (stderr); #define ACPI_MSG_REDIRECT_END \ AcpiOsRedirectOutput (OutputFile); #else /* * non-iASL case - no redirection, nothing to do */ #define ACPI_MSG_REDIRECT_BEGIN #define ACPI_MSG_REDIRECT_END #endif /* * Common error message prefixes */ #ifndef ACPI_MSG_ERROR #define ACPI_MSG_ERROR "ACPI Error: " #endif #ifndef ACPI_MSG_WARNING #define ACPI_MSG_WARNING "ACPI Warning: " #endif #ifndef ACPI_MSG_INFO #define ACPI_MSG_INFO "ACPI: " #endif #ifndef ACPI_MSG_BIOS_ERROR #define ACPI_MSG_BIOS_ERROR "Firmware Error (ACPI): " #endif #ifndef ACPI_MSG_BIOS_WARNING #define ACPI_MSG_BIOS_WARNING "Firmware Warning (ACPI): " #endif /* * Common message suffix */ #define ACPI_MSG_SUFFIX \ AcpiOsPrintf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, ModuleName, LineNumber) /* Flags to indicate implicit or explicit string-to-integer conversion */ #define ACPI_IMPLICIT_CONVERSION TRUE #define ACPI_NO_IMPLICIT_CONVERSION FALSE /* Types for Resource descriptor entries */ #define ACPI_INVALID_RESOURCE 0 #define ACPI_FIXED_LENGTH 1 #define ACPI_VARIABLE_LENGTH 2 #define ACPI_SMALL_VARIABLE_LENGTH 3 typedef ACPI_STATUS (*ACPI_WALK_AML_CALLBACK) ( UINT8 *Aml, UINT32 Length, UINT32 Offset, UINT8 ResourceIndex, void **Context); typedef ACPI_STATUS (*ACPI_PKG_CALLBACK) ( UINT8 ObjectType, ACPI_OPERAND_OBJECT *SourceObject, ACPI_GENERIC_STATE *State, void *Context); typedef struct acpi_pkg_info { UINT8 *FreeSpace; ACPI_SIZE Length; UINT32 ObjectSpace; UINT32 NumPackages; } ACPI_PKG_INFO; /* Object reference counts */ #define REF_INCREMENT (UINT16) 0 #define REF_DECREMENT (UINT16) 1 /* AcpiUtDumpBuffer */ #define DB_BYTE_DISPLAY 0x01 #define DB_WORD_DISPLAY 0x02 #define DB_DWORD_DISPLAY 0x04 #define DB_QWORD_DISPLAY 0x08 #define DB_DISPLAY_DATA_ONLY 0x10 /* * utascii - ASCII utilities */ BOOLEAN AcpiUtValidNameseg ( char *Signature); BOOLEAN AcpiUtValidNameChar ( char Character, UINT32 Position); void AcpiUtCheckAndRepairAscii ( UINT8 *Name, char *RepairedName, UINT32 Count); /* * utcksum - Checksum utilities */ UINT8 AcpiUtGenerateChecksum ( void *Table, UINT32 Length, UINT8 OriginalChecksum); UINT8 AcpiUtChecksum ( UINT8 *Buffer, UINT32 Length); ACPI_STATUS AcpiUtVerifyCdatChecksum ( ACPI_TABLE_CDAT *CdatTable, UINT32 Length); ACPI_STATUS AcpiUtVerifyChecksum ( ACPI_TABLE_HEADER *Table, UINT32 Length); /* * utnonansi - Non-ANSI C library functions */ void AcpiUtStrupr ( char *SrcString); void AcpiUtStrlwr ( char *SrcString); int AcpiUtStricmp ( char *String1, char *String2); /* * utstrsuppt - string-to-integer conversion support functions */ ACPI_STATUS AcpiUtConvertOctalString ( char *String, UINT64 *ReturnValue); ACPI_STATUS AcpiUtConvertDecimalString ( char *String, UINT64 *ReturnValuePtr); ACPI_STATUS AcpiUtConvertHexString ( char *String, UINT64 *ReturnValuePtr); char AcpiUtRemoveWhitespace ( char **String); char AcpiUtRemoveLeadingZeros ( char **String); BOOLEAN AcpiUtDetectHexPrefix ( char **String); void AcpiUtRemoveHexPrefix ( char **String); BOOLEAN AcpiUtDetectOctalPrefix ( char **String); /* * utstrtoul64 - string-to-integer conversion functions */ ACPI_STATUS AcpiUtStrtoul64 ( char *String, UINT64 *RetInteger); UINT64 AcpiUtExplicitStrtoul64 ( char *String); UINT64 AcpiUtImplicitStrtoul64 ( char *String); /* * utglobal - Global data structures and procedures */ ACPI_STATUS AcpiUtInitGlobals ( void); const char * AcpiUtGetMutexName ( UINT32 MutexId); #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) const char * AcpiUtGetNotifyName ( UINT32 NotifyValue, ACPI_OBJECT_TYPE Type); #endif const char * AcpiUtGetTypeName ( ACPI_OBJECT_TYPE Type); const char * AcpiUtGetNodeName ( void *Object); const char * AcpiUtGetDescriptorName ( void *Object); const char * AcpiUtGetReferenceName ( ACPI_OPERAND_OBJECT *Object); const char * AcpiUtGetObjectTypeName ( ACPI_OPERAND_OBJECT *ObjDesc); const char * AcpiUtGetRegionName ( UINT8 SpaceId); const char * AcpiUtGetEventName ( UINT32 EventId); const char * AcpiUtGetArgumentTypeName ( UINT32 ArgType); char AcpiUtHexToAsciiChar ( UINT64 Integer, UINT32 Position); ACPI_STATUS AcpiUtAsciiToHexByte ( char *TwoAsciiChars, UINT8 *ReturnByte); UINT8 AcpiUtAsciiCharToHex ( int HexChar); BOOLEAN AcpiUtValidObjectType ( ACPI_OBJECT_TYPE Type); /* * utinit - miscellaneous initialization and shutdown */ ACPI_STATUS AcpiUtHardwareInitialize ( void); void AcpiUtSubsystemShutdown ( void); /* * utcopy - Object construction and conversion interfaces */ ACPI_STATUS AcpiUtBuildSimpleObject( ACPI_OPERAND_OBJECT *Obj, ACPI_OBJECT *UserObj, UINT8 *DataSpace, UINT32 *BufferSpaceUsed); ACPI_STATUS AcpiUtBuildPackageObject ( ACPI_OPERAND_OBJECT *Obj, UINT8 *Buffer, UINT32 *SpaceUsed); ACPI_STATUS AcpiUtCopyIobjectToEobject ( ACPI_OPERAND_OBJECT *Obj, ACPI_BUFFER *RetBuffer); ACPI_STATUS AcpiUtCopyEobjectToIobject ( ACPI_OBJECT *Obj, ACPI_OPERAND_OBJECT **InternalObj); ACPI_STATUS AcpiUtCopyISimpleToIsimple ( ACPI_OPERAND_OBJECT *SourceObj, ACPI_OPERAND_OBJECT *DestObj); ACPI_STATUS AcpiUtCopyIobjectToIobject ( ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT **DestDesc, ACPI_WALK_STATE *WalkState); /* * utcreate - Object creation */ ACPI_STATUS AcpiUtUpdateObjectReference ( ACPI_OPERAND_OBJECT *Object, UINT16 Action); /* * utdebug - Debug interfaces */ void AcpiUtInitStackPtrTrace ( void); void AcpiUtTrackStackPtr ( void); void AcpiUtTrace ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId); void AcpiUtTracePtr ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, const void *Pointer); void AcpiUtTraceU32 ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, UINT32 Integer); void AcpiUtTraceStr ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, const char *String); void AcpiUtExit ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId); void AcpiUtStatusExit ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, ACPI_STATUS Status); void AcpiUtValueExit ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, UINT64 Value); void AcpiUtPtrExit ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, UINT8 *Ptr); void AcpiUtStrExit ( UINT32 LineNumber, const char *FunctionName, const char *ModuleName, UINT32 ComponentId, const char *String); void AcpiUtDebugDumpBuffer ( UINT8 *Buffer, UINT32 Count, UINT32 Display, UINT32 ComponentId); void AcpiUtDumpBuffer ( UINT8 *Buffer, UINT32 Count, UINT32 Display, UINT32 Offset); #ifdef ACPI_APPLICATION void AcpiUtDumpBufferToFile ( ACPI_FILE File, UINT8 *Buffer, UINT32 Count, UINT32 Display, UINT32 BaseOffset); #endif void AcpiUtReportError ( char *ModuleName, UINT32 LineNumber); void AcpiUtReportInfo ( char *ModuleName, UINT32 LineNumber); void AcpiUtReportWarning ( char *ModuleName, UINT32 LineNumber); /* * utdelete - Object deletion and reference counts */ void AcpiUtAddReference ( ACPI_OPERAND_OBJECT *Object); void AcpiUtRemoveReference ( ACPI_OPERAND_OBJECT *Object); void AcpiUtDeleteInternalPackageObject ( ACPI_OPERAND_OBJECT *Object); void AcpiUtDeleteInternalSimpleObject ( ACPI_OPERAND_OBJECT *Object); void AcpiUtDeleteInternalObjectList ( ACPI_OPERAND_OBJECT **ObjList); /* * uteval - object evaluation */ ACPI_STATUS AcpiUtEvaluateObject ( ACPI_NAMESPACE_NODE *PrefixNode, const char *Path, UINT32 ExpectedReturnBtypes, ACPI_OPERAND_OBJECT **ReturnDesc); ACPI_STATUS AcpiUtEvaluateNumericObject ( const char *ObjectName, ACPI_NAMESPACE_NODE *DeviceNode, UINT64 *Value); ACPI_STATUS AcpiUtExecute_STA ( ACPI_NAMESPACE_NODE *DeviceNode, UINT32 *StatusFlags); ACPI_STATUS AcpiUtExecutePowerMethods ( ACPI_NAMESPACE_NODE *DeviceNode, const char **MethodNames, UINT8 MethodCount, UINT8 *OutValues); /* * utids - device ID support */ ACPI_STATUS AcpiUtExecute_HID ( ACPI_NAMESPACE_NODE *DeviceNode, ACPI_PNP_DEVICE_ID **ReturnId); ACPI_STATUS AcpiUtExecute_UID ( ACPI_NAMESPACE_NODE *DeviceNode, ACPI_PNP_DEVICE_ID **ReturnId); ACPI_STATUS AcpiUtExecute_CID ( ACPI_NAMESPACE_NODE *DeviceNode, ACPI_PNP_DEVICE_ID_LIST **ReturnCidList); ACPI_STATUS AcpiUtExecute_CLS ( ACPI_NAMESPACE_NODE *DeviceNode, ACPI_PNP_DEVICE_ID **ReturnId); /* * utlock - reader/writer locks */ ACPI_STATUS AcpiUtCreateRwLock ( ACPI_RW_LOCK *Lock); void AcpiUtDeleteRwLock ( ACPI_RW_LOCK *Lock); ACPI_STATUS AcpiUtAcquireReadLock ( ACPI_RW_LOCK *Lock); ACPI_STATUS AcpiUtReleaseReadLock ( ACPI_RW_LOCK *Lock); ACPI_STATUS AcpiUtAcquireWriteLock ( ACPI_RW_LOCK *Lock); void AcpiUtReleaseWriteLock ( ACPI_RW_LOCK *Lock); /* * utobject - internal object create/delete/cache routines */ ACPI_OPERAND_OBJECT * AcpiUtCreateInternalObjectDbg ( const char *ModuleName, UINT32 LineNumber, UINT32 ComponentId, ACPI_OBJECT_TYPE Type); void * AcpiUtAllocateObjectDescDbg ( const char *ModuleName, UINT32 LineNumber, UINT32 ComponentId); #define AcpiUtCreateInternalObject(t) AcpiUtCreateInternalObjectDbg (_AcpiModuleName,__LINE__,_COMPONENT,t) #define AcpiUtAllocateObjectDesc() AcpiUtAllocateObjectDescDbg (_AcpiModuleName,__LINE__,_COMPONENT) void AcpiUtDeleteObjectDesc ( ACPI_OPERAND_OBJECT *Object); BOOLEAN AcpiUtValidInternalObject ( void *Object); ACPI_OPERAND_OBJECT * AcpiUtCreatePackageObject ( UINT32 Count); ACPI_OPERAND_OBJECT * AcpiUtCreateIntegerObject ( UINT64 Value); ACPI_OPERAND_OBJECT * AcpiUtCreateBufferObject ( ACPI_SIZE BufferSize); ACPI_OPERAND_OBJECT * AcpiUtCreateStringObject ( ACPI_SIZE StringSize); ACPI_STATUS AcpiUtGetObjectSize( ACPI_OPERAND_OBJECT *Obj, ACPI_SIZE *ObjLength); /* * utosi - Support for the _OSI predefined control method */ ACPI_STATUS AcpiUtInitializeInterfaces ( void); ACPI_STATUS AcpiUtInterfaceTerminate ( void); ACPI_STATUS AcpiUtInstallInterface ( ACPI_STRING InterfaceName); ACPI_STATUS AcpiUtRemoveInterface ( ACPI_STRING InterfaceName); ACPI_STATUS AcpiUtUpdateInterfaces ( UINT8 Action); ACPI_INTERFACE_INFO * AcpiUtGetInterface ( ACPI_STRING InterfaceName); ACPI_STATUS AcpiUtOsiImplementation ( ACPI_WALK_STATE *WalkState); /* * utpredef - support for predefined names */ const ACPI_PREDEFINED_INFO * AcpiUtGetNextPredefinedMethod ( const ACPI_PREDEFINED_INFO *ThisName); const ACPI_PREDEFINED_INFO * AcpiUtMatchPredefinedMethod ( char *Name); void AcpiUtGetExpectedReturnTypes ( char *Buffer, UINT32 ExpectedBtypes); #if (defined ACPI_ASL_COMPILER || defined ACPI_HELP_APP) const ACPI_PREDEFINED_INFO * AcpiUtMatchResourceName ( char *Name); void AcpiUtDisplayPredefinedMethod ( char *Buffer, const ACPI_PREDEFINED_INFO *ThisName, BOOLEAN MultiLine); UINT32 AcpiUtGetResourceBitWidth ( char *Buffer, UINT16 Types); #endif /* * utstate - Generic state creation/cache routines */ void AcpiUtPushGenericState ( ACPI_GENERIC_STATE **ListHead, ACPI_GENERIC_STATE *State); ACPI_GENERIC_STATE * AcpiUtPopGenericState ( ACPI_GENERIC_STATE **ListHead); ACPI_GENERIC_STATE * AcpiUtCreateGenericState ( void); ACPI_THREAD_STATE * AcpiUtCreateThreadState ( void); ACPI_GENERIC_STATE * AcpiUtCreateUpdateState ( ACPI_OPERAND_OBJECT *Object, UINT16 Action); ACPI_GENERIC_STATE * AcpiUtCreatePkgState ( void *InternalObject, void *ExternalObject, UINT32 Index); ACPI_STATUS AcpiUtCreateUpdateStateAndPush ( ACPI_OPERAND_OBJECT *Object, UINT16 Action, ACPI_GENERIC_STATE **StateList); ACPI_GENERIC_STATE * AcpiUtCreateControlState ( void); void AcpiUtDeleteGenericState ( ACPI_GENERIC_STATE *State); /* * utmath */ ACPI_STATUS AcpiUtDivide ( UINT64 InDividend, UINT64 InDivisor, UINT64 *OutQuotient, UINT64 *OutRemainder); ACPI_STATUS AcpiUtShortDivide ( UINT64 InDividend, UINT32 Divisor, UINT64 *OutQuotient, UINT32 *OutRemainder); ACPI_STATUS AcpiUtShortMultiply ( UINT64 InMultiplicand, UINT32 Multiplier, UINT64 *Outproduct); ACPI_STATUS AcpiUtShortShiftLeft ( UINT64 Operand, UINT32 Count, UINT64 *OutResult); ACPI_STATUS AcpiUtShortShiftRight ( UINT64 Operand, UINT32 Count, UINT64 *OutResult); /* * utmisc */ const ACPI_EXCEPTION_INFO * AcpiUtValidateException ( ACPI_STATUS Status); BOOLEAN AcpiUtIsPciRootBridge ( char *Id); #if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP || defined ACPI_NAMES_APP) BOOLEAN AcpiUtIsAmlTable ( ACPI_TABLE_HEADER *Table); #endif ACPI_STATUS AcpiUtWalkPackageTree ( ACPI_OPERAND_OBJECT *SourceObject, void *TargetObject, ACPI_PKG_CALLBACK WalkCallback, void *Context); /* Values for Base above (16=Hex, 10=Decimal) */ #define ACPI_ANY_BASE 0 UINT32 AcpiUtDwordByteSwap ( UINT32 Value); void AcpiUtSetIntegerWidth ( UINT8 Revision); #ifdef ACPI_DEBUG_OUTPUT void AcpiUtDisplayInitPathname ( UINT8 Type, ACPI_NAMESPACE_NODE *ObjHandle, const char *Path); #endif /* * utownerid - Support for Table/Method Owner IDs */ ACPI_STATUS AcpiUtAllocateOwnerId ( ACPI_OWNER_ID *OwnerId); void AcpiUtReleaseOwnerId ( ACPI_OWNER_ID *OwnerId); /* * utresrc */ ACPI_STATUS AcpiUtWalkAmlResources ( ACPI_WALK_STATE *WalkState, UINT8 *Aml, ACPI_SIZE AmlLength, ACPI_WALK_AML_CALLBACK UserFunction, void **Context); ACPI_STATUS AcpiUtValidateResource ( ACPI_WALK_STATE *WalkState, void *Aml, UINT8 *ReturnIndex); UINT32 AcpiUtGetDescriptorLength ( void *Aml); UINT16 AcpiUtGetResourceLength ( void *Aml); UINT8 AcpiUtGetResourceHeaderLength ( void *Aml); UINT8 AcpiUtGetResourceType ( void *Aml); ACPI_STATUS AcpiUtGetResourceEndTag ( ACPI_OPERAND_OBJECT *ObjDesc, UINT8 **EndTag); /* * utstring - String and character utilities */ void AcpiUtPrintString ( char *String, UINT16 MaxLength); #if defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP void UtConvertBackslashes ( char *Pathname); #endif void AcpiUtRepairName ( char *Name); #if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) || defined (ACPI_DEBUG_OUTPUT) BOOLEAN AcpiUtSafeStrcpy ( char *Dest, ACPI_SIZE DestSize, char *Source); void AcpiUtSafeStrncpy ( char *Dest, char *Source, ACPI_SIZE DestSize); BOOLEAN AcpiUtSafeStrcat ( char *Dest, ACPI_SIZE DestSize, char *Source); BOOLEAN AcpiUtSafeStrncat ( char *Dest, ACPI_SIZE DestSize, char *Source, ACPI_SIZE MaxTransferLength); #endif /* * utmutex - mutex support */ ACPI_STATUS AcpiUtMutexInitialize ( void); void AcpiUtMutexTerminate ( void); ACPI_STATUS AcpiUtAcquireMutex ( ACPI_MUTEX_HANDLE MutexId); ACPI_STATUS AcpiUtReleaseMutex ( ACPI_MUTEX_HANDLE MutexId); /* * utalloc - memory allocation and object caching */ ACPI_STATUS AcpiUtCreateCaches ( void); ACPI_STATUS AcpiUtDeleteCaches ( void); ACPI_STATUS AcpiUtValidateBuffer ( ACPI_BUFFER *Buffer); ACPI_STATUS AcpiUtInitializeBuffer ( ACPI_BUFFER *Buffer, ACPI_SIZE RequiredLength); #ifdef ACPI_DBG_TRACK_ALLOCATIONS void * AcpiUtAllocateAndTrack ( ACPI_SIZE Size, UINT32 Component, const char *Module, UINT32 Line); void * AcpiUtAllocateZeroedAndTrack ( ACPI_SIZE Size, UINT32 Component, const char *Module, UINT32 Line); void AcpiUtFreeAndTrack ( void *Address, UINT32 Component, const char *Module, UINT32 Line); void AcpiUtDumpAllocationInfo ( void); void AcpiUtDumpAllocations ( UINT32 Component, const char *Module); ACPI_STATUS AcpiUtCreateList ( const char *ListName, UINT16 ObjectSize, ACPI_MEMORY_LIST **ReturnCache); #endif /* ACPI_DBG_TRACK_ALLOCATIONS */ /* * utaddress - address range check */ ACPI_STATUS AcpiUtAddAddressRange ( ACPI_ADR_SPACE_TYPE SpaceId, ACPI_PHYSICAL_ADDRESS Address, UINT32 Length, ACPI_NAMESPACE_NODE *RegionNode); void AcpiUtRemoveAddressRange ( ACPI_ADR_SPACE_TYPE SpaceId, ACPI_NAMESPACE_NODE *RegionNode); UINT32 AcpiUtCheckAddressRange ( ACPI_ADR_SPACE_TYPE SpaceId, ACPI_PHYSICAL_ADDRESS Address, UINT32 Length, BOOLEAN Warn); void AcpiUtDeleteAddressLists ( void); /* * utxferror - various error/warning output functions */ ACPI_PRINTF_LIKE(5) void ACPI_INTERNAL_VAR_XFACE AcpiUtPredefinedWarning ( const char *ModuleName, UINT32 LineNumber, char *Pathname, UINT16 NodeFlags, const char *Format, ...); ACPI_PRINTF_LIKE(5) void ACPI_INTERNAL_VAR_XFACE AcpiUtPredefinedInfo ( const char *ModuleName, UINT32 LineNumber, char *Pathname, UINT16 NodeFlags, const char *Format, ...); ACPI_PRINTF_LIKE(5) void ACPI_INTERNAL_VAR_XFACE AcpiUtPredefinedBiosError ( const char *ModuleName, UINT32 LineNumber, char *Pathname, UINT16 NodeFlags, const char *Format, ...); void AcpiUtPrefixedNamespaceError ( const char *ModuleName, UINT32 LineNumber, ACPI_GENERIC_STATE *PrefixScope, const char *InternalName, ACPI_STATUS LookupStatus); void AcpiUtMethodError ( const char *ModuleName, UINT32 LineNumber, const char *Message, ACPI_NAMESPACE_NODE *Node, const char *Path, ACPI_STATUS LookupStatus); /* * Utility functions for ACPI names and IDs */ const AH_PREDEFINED_NAME * AcpiAhMatchPredefinedName ( char *Nameseg); const AH_DEVICE_ID * AcpiAhMatchHardwareId ( char *Hid); const char * AcpiAhMatchUuid ( UINT8 *Data); /* * utuuid -- UUID support functions */ #if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP || defined ACPI_HELP_APP) void AcpiUtConvertStringToUuid ( char *InString, UINT8 *UuidBuffer); ACPI_STATUS AcpiUtConvertUuidToString ( char *UuidBuffer, char *OutString); #endif #endif /* _ACUTILS_H */ src/acpica/source/include/acuuid.h000066400000000000000000000266601465205512700174540ustar00rootroot00000000000000/****************************************************************************** * * Name: acuuid.h - ACPI-related UUID/GUID definitions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACUUID_H__ #define __ACUUID_H__ /* * Note1: UUIDs and GUIDs are defined to be identical in ACPI. * * Note2: This file is standalone and should remain that way. */ /* Controllers */ #define UUID_GPIO_CONTROLLER "4f248f40-d5e2-499f-834c-27758ea1cd3f" #define UUID_USB_CONTROLLER "ce2ee385-00e6-48cb-9f05-2edb927c4899" #define UUID_SATA_CONTROLLER "e4db149b-fcfe-425b-a6d8-92357d78fc7f" /* Devices */ #define UUID_PCI_HOST_BRIDGE "33db4d5b-1ff7-401c-9657-7441c03dd766" #define UUID_I2C_DEVICE "3cdff6f7-4267-4555-ad05-b30a3d8938de" #define UUID_POWER_BUTTON "dfbcf3c5-e7a5-44e6-9c1f-29c76f6e059c" #define UUID_MEMORY_DEVICE "03b19910-f473-11dd-87af-0800200c9a66" #define UUID_GENERIC_BUTTONS_DEVICE "fa6bd625-9ce8-470d-a2c7-b3ca36c4282e" #define UUID_NVDIMM_ROOT_DEVICE "2f10e7a4-9e91-11e4-89d3-123b93f75cba" #define UUID_CONTROL_METHOD_BATTERY "f18fc78b-0f15-4978-b793-53f833a1d35b" /* Interfaces */ #define UUID_DEVICE_LABELING "e5c937d0-3553-4d7a-9117-ea4d19c3434d" #define UUID_PHYSICAL_PRESENCE "3dddfaa6-361b-4eb4-a424-8d10089d1653" /* NVDIMM - NFIT table */ #define UUID_NFIT_DIMM "4309ac30-0d11-11e4-9191-0800200c9a66" #define UUID_VOLATILE_MEMORY "7305944f-fdda-44e3-b16c-3f22d252e5d0" #define UUID_PERSISTENT_MEMORY "66f0d379-b4f3-4074-ac43-0d3318b78cdb" #define UUID_CONTROL_REGION "92f701f6-13b4-405d-910b-299367e8234c" #define UUID_DATA_REGION "91af0530-5d86-470e-a6b0-0a2db9408249" #define UUID_VOLATILE_VIRTUAL_DISK "77ab535a-45fc-624b-5560-f7b281d1f96e" #define UUID_VOLATILE_VIRTUAL_CD "3d5abd30-4175-87ce-6d64-d2ade523c4bb" #define UUID_PERSISTENT_VIRTUAL_DISK "5cea02c9-4d07-69d3-269f-4496fbe096f9" #define UUID_PERSISTENT_VIRTUAL_CD "08018188-42cd-bb48-100f-5387d53ded3d" #define UUID_NFIT_DIMM_N_MSFT "1ee68b36-d4bd-4a1a-9a16-4f8e53d46e05" #define UUID_NFIT_DIMM_N_HPE1 "9002c334-acf3-4c0e-9642-a235f0d53bc6" #define UUID_NFIT_DIMM_N_HPE2 "5008664b-b758-41a0-a03c-27c2f2d04f7e" #define UUID_NFIT_DIMM_N_HYPERV "5746c5f2-a9a2-4264-ad0e-e4ddc9e09e80" /* Processor Properties (ACPI 6.2) */ #define UUID_CACHE_PROPERTIES "6DC63E77-257E-4E78-A973-A21F2796898D" #define UUID_PHYSICAL_PROPERTY "DDE4D59A-AA42-4349-B407-EA40F57D9FB7" /* Miscellaneous */ #define UUID_PLATFORM_CAPABILITIES "0811b06e-4a27-44f9-8d60-3cbbc22e7b48" #define UUID_DYNAMIC_ENUMERATION "d8c1a3a6-be9b-4c9b-91bf-c3cb81fc5daf" #define UUID_BATTERY_THERMAL_LIMIT "4c2067e3-887d-475c-9720-4af1d3ed602e" #define UUID_THERMAL_EXTENSIONS "14d399cd-7a27-4b18-8fb4-7cb7b9f4e500" #define UUID_DEVICE_PROPERTIES "daffd814-6eba-4d8c-8a91-bc9bbf4aa301" #define UUID_DEVICE_GRAPHS "ab02a46b-74c7-45a2-bd68-f7d344ef2153" #define UUID_HIERARCHICAL_DATA_EXTENSION "dbb8e3e6-5886-4ba6-8795-1319f52a966b" #define UUID_CORESIGHT_GRAPH "3ecbc8b6-1d0e-4fb3-8107-e627f805c6cd" #define UUID_USB4_CAPABILITIES "23a0d13a-26ab-486c-9c5f-0ffa525a575a" #define UUID_1ST_FUNCTION_ID "893f00a6-660c-494e-bcfd-3043f4fb67c0" #define UUID_2ND_FUNCTION_ID "107ededd-d381-4fd7-8da9-08e9a6c79644" #endif /* __ACUUID_H__ */ src/acpica/source/include/amlcode.h000066400000000000000000000651131465205512700176020ustar00rootroot00000000000000/****************************************************************************** * * Name: amlcode.h - Definitions for AML, as included in "definition blocks" * Declarations and definitions contained herein are derived * directly from the ACPI specification. * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __AMLCODE_H__ #define __AMLCODE_H__ /* primary opcodes */ #define AML_ZERO_OP (UINT16) 0x00 #define AML_ONE_OP (UINT16) 0x01 #define AML_ALIAS_OP (UINT16) 0x06 #define AML_NAME_OP (UINT16) 0x08 #define AML_BYTE_OP (UINT16) 0x0a #define AML_WORD_OP (UINT16) 0x0b #define AML_DWORD_OP (UINT16) 0x0c #define AML_STRING_OP (UINT16) 0x0d #define AML_QWORD_OP (UINT16) 0x0e /* ACPI 2.0 */ #define AML_SCOPE_OP (UINT16) 0x10 #define AML_BUFFER_OP (UINT16) 0x11 #define AML_PACKAGE_OP (UINT16) 0x12 #define AML_VARIABLE_PACKAGE_OP (UINT16) 0x13 /* ACPI 2.0 */ #define AML_METHOD_OP (UINT16) 0x14 #define AML_EXTERNAL_OP (UINT16) 0x15 /* ACPI 6.0 */ #define AML_DUAL_NAME_PREFIX (UINT16) 0x2e #define AML_MULTI_NAME_PREFIX (UINT16) 0x2f #define AML_EXTENDED_PREFIX (UINT16) 0x5b #define AML_ROOT_PREFIX (UINT16) 0x5c #define AML_PARENT_PREFIX (UINT16) 0x5e #define AML_FIRST_LOCAL_OP (UINT16) 0x60 /* Used for Local op # calculations */ #define AML_LOCAL0 (UINT16) 0x60 #define AML_LOCAL1 (UINT16) 0x61 #define AML_LOCAL2 (UINT16) 0x62 #define AML_LOCAL3 (UINT16) 0x63 #define AML_LOCAL4 (UINT16) 0x64 #define AML_LOCAL5 (UINT16) 0x65 #define AML_LOCAL6 (UINT16) 0x66 #define AML_LOCAL7 (UINT16) 0x67 #define AML_FIRST_ARG_OP (UINT16) 0x68 /* Used for Arg op # calculations */ #define AML_ARG0 (UINT16) 0x68 #define AML_ARG1 (UINT16) 0x69 #define AML_ARG2 (UINT16) 0x6a #define AML_ARG3 (UINT16) 0x6b #define AML_ARG4 (UINT16) 0x6c #define AML_ARG5 (UINT16) 0x6d #define AML_ARG6 (UINT16) 0x6e #define AML_STORE_OP (UINT16) 0x70 #define AML_REF_OF_OP (UINT16) 0x71 #define AML_ADD_OP (UINT16) 0x72 #define AML_CONCATENATE_OP (UINT16) 0x73 #define AML_SUBTRACT_OP (UINT16) 0x74 #define AML_INCREMENT_OP (UINT16) 0x75 #define AML_DECREMENT_OP (UINT16) 0x76 #define AML_MULTIPLY_OP (UINT16) 0x77 #define AML_DIVIDE_OP (UINT16) 0x78 #define AML_SHIFT_LEFT_OP (UINT16) 0x79 #define AML_SHIFT_RIGHT_OP (UINT16) 0x7a #define AML_BIT_AND_OP (UINT16) 0x7b #define AML_BIT_NAND_OP (UINT16) 0x7c #define AML_BIT_OR_OP (UINT16) 0x7d #define AML_BIT_NOR_OP (UINT16) 0x7e #define AML_BIT_XOR_OP (UINT16) 0x7f #define AML_BIT_NOT_OP (UINT16) 0x80 #define AML_FIND_SET_LEFT_BIT_OP (UINT16) 0x81 #define AML_FIND_SET_RIGHT_BIT_OP (UINT16) 0x82 #define AML_DEREF_OF_OP (UINT16) 0x83 #define AML_CONCATENATE_TEMPLATE_OP (UINT16) 0x84 /* ACPI 2.0 */ #define AML_MOD_OP (UINT16) 0x85 /* ACPI 2.0 */ #define AML_NOTIFY_OP (UINT16) 0x86 #define AML_SIZE_OF_OP (UINT16) 0x87 #define AML_INDEX_OP (UINT16) 0x88 #define AML_MATCH_OP (UINT16) 0x89 #define AML_CREATE_DWORD_FIELD_OP (UINT16) 0x8a #define AML_CREATE_WORD_FIELD_OP (UINT16) 0x8b #define AML_CREATE_BYTE_FIELD_OP (UINT16) 0x8c #define AML_CREATE_BIT_FIELD_OP (UINT16) 0x8d #define AML_OBJECT_TYPE_OP (UINT16) 0x8e #define AML_CREATE_QWORD_FIELD_OP (UINT16) 0x8f /* ACPI 2.0 */ #define AML_LOGICAL_AND_OP (UINT16) 0x90 #define AML_LOGICAL_OR_OP (UINT16) 0x91 #define AML_LOGICAL_NOT_OP (UINT16) 0x92 #define AML_LOGICAL_EQUAL_OP (UINT16) 0x93 #define AML_LOGICAL_GREATER_OP (UINT16) 0x94 #define AML_LOGICAL_LESS_OP (UINT16) 0x95 #define AML_TO_BUFFER_OP (UINT16) 0x96 /* ACPI 2.0 */ #define AML_TO_DECIMAL_STRING_OP (UINT16) 0x97 /* ACPI 2.0 */ #define AML_TO_HEX_STRING_OP (UINT16) 0x98 /* ACPI 2.0 */ #define AML_TO_INTEGER_OP (UINT16) 0x99 /* ACPI 2.0 */ #define AML_TO_STRING_OP (UINT16) 0x9c /* ACPI 2.0 */ #define AML_COPY_OBJECT_OP (UINT16) 0x9d /* ACPI 2.0 */ #define AML_MID_OP (UINT16) 0x9e /* ACPI 2.0 */ #define AML_CONTINUE_OP (UINT16) 0x9f /* ACPI 2.0 */ #define AML_IF_OP (UINT16) 0xa0 #define AML_ELSE_OP (UINT16) 0xa1 #define AML_WHILE_OP (UINT16) 0xa2 #define AML_NOOP_OP (UINT16) 0xa3 #define AML_RETURN_OP (UINT16) 0xa4 #define AML_BREAK_OP (UINT16) 0xa5 #define AML_COMMENT_OP (UINT16) 0xa9 #define AML_BREAKPOINT_OP (UINT16) 0xcc #define AML_ONES_OP (UINT16) 0xff /* * Combination opcodes (actually two one-byte opcodes) * Used by the disassembler and iASL compiler */ #define AML_LOGICAL_GREATER_EQUAL_OP (UINT16) 0x9295 /* LNot (LLess) */ #define AML_LOGICAL_LESS_EQUAL_OP (UINT16) 0x9294 /* LNot (LGreater) */ #define AML_LOGICAL_NOT_EQUAL_OP (UINT16) 0x9293 /* LNot (LEqual) */ /* Prefixed (2-byte) opcodes (with AML_EXTENDED_PREFIX) */ #define AML_EXTENDED_OPCODE (UINT16) 0x5b00 /* Prefix for 2-byte opcodes */ #define AML_MUTEX_OP (UINT16) 0x5b01 #define AML_EVENT_OP (UINT16) 0x5b02 #define AML_SHIFT_RIGHT_BIT_OP (UINT16) 0x5b10 /* Obsolete, not in ACPI spec */ #define AML_SHIFT_LEFT_BIT_OP (UINT16) 0x5b11 /* Obsolete, not in ACPI spec */ #define AML_CONDITIONAL_REF_OF_OP (UINT16) 0x5b12 #define AML_CREATE_FIELD_OP (UINT16) 0x5b13 #define AML_LOAD_TABLE_OP (UINT16) 0x5b1f /* ACPI 2.0 */ #define AML_LOAD_OP (UINT16) 0x5b20 #define AML_STALL_OP (UINT16) 0x5b21 #define AML_SLEEP_OP (UINT16) 0x5b22 #define AML_ACQUIRE_OP (UINT16) 0x5b23 #define AML_SIGNAL_OP (UINT16) 0x5b24 #define AML_WAIT_OP (UINT16) 0x5b25 #define AML_RESET_OP (UINT16) 0x5b26 #define AML_RELEASE_OP (UINT16) 0x5b27 #define AML_FROM_BCD_OP (UINT16) 0x5b28 #define AML_TO_BCD_OP (UINT16) 0x5b29 #define AML_UNLOAD_OP (UINT16) 0x5b2a #define AML_REVISION_OP (UINT16) 0x5b30 #define AML_DEBUG_OP (UINT16) 0x5b31 #define AML_FATAL_OP (UINT16) 0x5b32 #define AML_TIMER_OP (UINT16) 0x5b33 /* ACPI 3.0 */ #define AML_REGION_OP (UINT16) 0x5b80 #define AML_FIELD_OP (UINT16) 0x5b81 #define AML_DEVICE_OP (UINT16) 0x5b82 #define AML_PROCESSOR_OP (UINT16) 0x5b83 #define AML_POWER_RESOURCE_OP (UINT16) 0x5b84 #define AML_THERMAL_ZONE_OP (UINT16) 0x5b85 #define AML_INDEX_FIELD_OP (UINT16) 0x5b86 #define AML_BANK_FIELD_OP (UINT16) 0x5b87 #define AML_DATA_REGION_OP (UINT16) 0x5b88 /* ACPI 2.0 */ /* * Opcodes for "Field" operators */ #define AML_FIELD_OFFSET_OP (UINT8) 0x00 #define AML_FIELD_ACCESS_OP (UINT8) 0x01 #define AML_FIELD_CONNECTION_OP (UINT8) 0x02 /* ACPI 5.0 */ #define AML_FIELD_EXT_ACCESS_OP (UINT8) 0x03 /* ACPI 5.0 */ /* * Internal opcodes * Use only "Unknown" AML opcodes, don't attempt to use * any valid ACPI ASCII values (A-Z, 0-9, '-') */ #define AML_INT_NAMEPATH_OP (UINT16) 0x002d #define AML_INT_NAMEDFIELD_OP (UINT16) 0x0030 #define AML_INT_RESERVEDFIELD_OP (UINT16) 0x0031 #define AML_INT_ACCESSFIELD_OP (UINT16) 0x0032 #define AML_INT_BYTELIST_OP (UINT16) 0x0033 #define AML_INT_METHODCALL_OP (UINT16) 0x0035 #define AML_INT_RETURN_VALUE_OP (UINT16) 0x0036 #define AML_INT_EVAL_SUBTREE_OP (UINT16) 0x0037 #define AML_INT_CONNECTION_OP (UINT16) 0x0038 #define AML_INT_EXTACCESSFIELD_OP (UINT16) 0x0039 #define ARG_NONE 0x0 /* * Argument types for the AML Parser * Each field in the ArgTypes UINT32 is 5 bits, allowing for a maximum of 6 arguments. * There can be up to 31 unique argument types * Zero is reserved as end-of-list indicator */ #define ARGP_BYTEDATA 0x01 #define ARGP_BYTELIST 0x02 #define ARGP_CHARLIST 0x03 #define ARGP_DATAOBJ 0x04 #define ARGP_DATAOBJLIST 0x05 #define ARGP_DWORDDATA 0x06 #define ARGP_FIELDLIST 0x07 #define ARGP_NAME 0x08 #define ARGP_NAMESTRING 0x09 #define ARGP_OBJLIST 0x0A #define ARGP_PKGLENGTH 0x0B #define ARGP_SUPERNAME 0x0C #define ARGP_TARGET 0x0D #define ARGP_TERMARG 0x0E #define ARGP_TERMLIST 0x0F #define ARGP_WORDDATA 0x10 #define ARGP_QWORDDATA 0x11 #define ARGP_SIMPLENAME 0x12 /* NameString | LocalTerm | ArgTerm */ #define ARGP_NAME_OR_REF 0x13 /* For ObjectType only */ #define ARGP_MAX 0x13 #define ARGP_COMMENT 0x14 /* * Resolved argument types for the AML Interpreter * Each field in the ArgTypes UINT32 is 5 bits, allowing for a maximum of 6 arguments. * There can be up to 31 unique argument types (0 is end-of-arg-list indicator) * * Note1: These values are completely independent from the ACPI_TYPEs * i.e., ARGI_INTEGER != ACPI_TYPE_INTEGER * * Note2: If and when 5 bits becomes insufficient, it would probably be best * to convert to a 6-byte array of argument types, allowing 8 bits per argument. */ /* Single, simple types */ #define ARGI_ANYTYPE 0x01 /* Don't care */ #define ARGI_PACKAGE 0x02 #define ARGI_EVENT 0x03 #define ARGI_MUTEX 0x04 #define ARGI_DDBHANDLE 0x05 /* Interchangeable types (via implicit conversion) */ #define ARGI_INTEGER 0x06 #define ARGI_STRING 0x07 #define ARGI_BUFFER 0x08 #define ARGI_BUFFER_OR_STRING 0x09 /* Used by MID op only */ #define ARGI_COMPUTEDATA 0x0A /* Buffer, String, or Integer */ /* Reference objects */ #define ARGI_INTEGER_REF 0x0B #define ARGI_OBJECT_REF 0x0C #define ARGI_DEVICE_REF 0x0D #define ARGI_REFERENCE 0x0E #define ARGI_TARGETREF 0x0F /* Target, subject to implicit conversion */ #define ARGI_FIXED_TARGET 0x10 /* Target, no implicit conversion */ #define ARGI_SIMPLE_TARGET 0x11 /* Name, Local, Arg -- no implicit conversion */ #define ARGI_STORE_TARGET 0x12 /* Target for store is TARGETREF + package objects */ /* Multiple/complex types */ #define ARGI_DATAOBJECT 0x13 /* Buffer, String, package or reference to a Node - Used only by SizeOf operator*/ #define ARGI_COMPLEXOBJ 0x14 /* Buffer, String, or package (Used by INDEX op only) */ #define ARGI_REF_OR_STRING 0x15 /* Reference or String (Used by DEREFOF op only) */ #define ARGI_REGION_OR_BUFFER 0x16 /* Used by LOAD op only */ #define ARGI_DATAREFOBJ 0x17 /* Note: types above can expand to 0x1F maximum */ #define ARGI_INVALID_OPCODE 0xFFFFFFFF /* * Some of the flags and types below are of the form: * * AML_FLAGS_EXEC_#A_#T,#R, or * AML_TYPE_EXEC_#A_#T,#R where: * * #A is the number of required arguments * #T is the number of target operands * #R indicates whether there is a return value * * These types are used for the top-level dispatch of the AML * opcode. They group similar operators that can share common * front-end code before dispatch to the final code that implements * the operator. */ /* * Opcode information flags */ #define AML_LOGICAL 0x0001 #define AML_LOGICAL_NUMERIC 0x0002 #define AML_MATH 0x0004 #define AML_CREATE 0x0008 #define AML_FIELD 0x0010 #define AML_DEFER 0x0020 #define AML_NAMED 0x0040 #define AML_NSNODE 0x0080 #define AML_NSOPCODE 0x0100 #define AML_NSOBJECT 0x0200 #define AML_HAS_RETVAL 0x0400 #define AML_HAS_TARGET 0x0800 #define AML_HAS_ARGS 0x1000 #define AML_CONSTANT 0x2000 #define AML_NO_OPERAND_RESOLVE 0x4000 /* Convenient flag groupings of the flags above */ #define AML_FLAGS_EXEC_0A_0T_1R AML_HAS_RETVAL #define AML_FLAGS_EXEC_1A_0T_0R AML_HAS_ARGS /* Monadic1 */ #define AML_FLAGS_EXEC_1A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL /* Monadic2 */ #define AML_FLAGS_EXEC_1A_1T_0R AML_HAS_ARGS | AML_HAS_TARGET #define AML_FLAGS_EXEC_1A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL /* Monadic2R */ #define AML_FLAGS_EXEC_2A_0T_0R AML_HAS_ARGS /* Dyadic1 */ #define AML_FLAGS_EXEC_2A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL /* Dyadic2 */ #define AML_FLAGS_EXEC_2A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL /* Dyadic2R */ #define AML_FLAGS_EXEC_2A_2T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL #define AML_FLAGS_EXEC_3A_0T_0R AML_HAS_ARGS #define AML_FLAGS_EXEC_3A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL #define AML_FLAGS_EXEC_6A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL /* * The opcode Type is used in a dispatch table, do not change * or add anything new without updating the table. */ #define AML_TYPE_EXEC_0A_0T_1R 0x00 /* 0 Args, 0 Target, 1 RetVal */ #define AML_TYPE_EXEC_1A_0T_0R 0x01 /* 1 Args, 0 Target, 0 RetVal */ #define AML_TYPE_EXEC_1A_0T_1R 0x02 /* 1 Args, 0 Target, 1 RetVal */ #define AML_TYPE_EXEC_1A_1T_0R 0x03 /* 1 Args, 1 Target, 0 RetVal */ #define AML_TYPE_EXEC_1A_1T_1R 0x04 /* 1 Args, 1 Target, 1 RetVal */ #define AML_TYPE_EXEC_2A_0T_0R 0x05 /* 2 Args, 0 Target, 0 RetVal */ #define AML_TYPE_EXEC_2A_0T_1R 0x06 /* 2 Args, 0 Target, 1 RetVal */ #define AML_TYPE_EXEC_2A_1T_1R 0x07 /* 2 Args, 1 Target, 1 RetVal */ #define AML_TYPE_EXEC_2A_2T_1R 0x08 /* 2 Args, 2 Target, 1 RetVal */ #define AML_TYPE_EXEC_3A_0T_0R 0x09 /* 3 Args, 0 Target, 0 RetVal */ #define AML_TYPE_EXEC_3A_1T_1R 0x0A /* 3 Args, 1 Target, 1 RetVal */ #define AML_TYPE_EXEC_6A_0T_1R 0x0B /* 6 Args, 0 Target, 1 RetVal */ /* End of types used in dispatch table */ #define AML_TYPE_LITERAL 0x0C #define AML_TYPE_CONSTANT 0x0D #define AML_TYPE_METHOD_ARGUMENT 0x0E #define AML_TYPE_LOCAL_VARIABLE 0x0F #define AML_TYPE_DATA_TERM 0x10 /* Generic for an op that returns a value */ #define AML_TYPE_METHOD_CALL 0x11 /* Miscellaneous types */ #define AML_TYPE_CREATE_FIELD 0x12 #define AML_TYPE_CREATE_OBJECT 0x13 #define AML_TYPE_CONTROL 0x14 #define AML_TYPE_NAMED_NO_OBJ 0x15 #define AML_TYPE_NAMED_FIELD 0x16 #define AML_TYPE_NAMED_SIMPLE 0x17 #define AML_TYPE_NAMED_COMPLEX 0x18 #define AML_TYPE_RETURN 0x19 #define AML_TYPE_UNDEFINED 0x1A #define AML_TYPE_BOGUS 0x1B /* AML Package Length encodings */ #define ACPI_AML_PACKAGE_TYPE1 0x40 #define ACPI_AML_PACKAGE_TYPE2 0x4000 #define ACPI_AML_PACKAGE_TYPE3 0x400000 #define ACPI_AML_PACKAGE_TYPE4 0x40000000 /* * Opcode classes */ #define AML_CLASS_EXECUTE 0x00 #define AML_CLASS_CREATE 0x01 #define AML_CLASS_ARGUMENT 0x02 #define AML_CLASS_NAMED_OBJECT 0x03 #define AML_CLASS_CONTROL 0x04 #define AML_CLASS_ASCII 0x05 #define AML_CLASS_PREFIX 0x06 #define AML_CLASS_INTERNAL 0x07 #define AML_CLASS_RETURN_VALUE 0x08 #define AML_CLASS_METHOD_CALL 0x09 #define AML_CLASS_UNKNOWN 0x0A /* Comparison operation codes for MatchOp operator */ typedef enum { MATCH_MTR = 0, MATCH_MEQ = 1, MATCH_MLE = 2, MATCH_MLT = 3, MATCH_MGE = 4, MATCH_MGT = 5 } AML_MATCH_OPERATOR; #define MAX_MATCH_OPERATOR 5 /* * FieldFlags * * This byte is extracted from the AML and includes three separate * pieces of information about the field: * 1) The field access type * 2) The field update rule * 3) The lock rule for the field * * Bits 00 - 03 : AccessType (AnyAcc, ByteAcc, etc.) * 04 : LockRule (1 == Lock) * 05 - 06 : UpdateRule */ #define AML_FIELD_ACCESS_TYPE_MASK 0x0F #define AML_FIELD_LOCK_RULE_MASK 0x10 #define AML_FIELD_UPDATE_RULE_MASK 0x60 /* 1) Field Access Types */ typedef enum { AML_FIELD_ACCESS_ANY = 0x00, AML_FIELD_ACCESS_BYTE = 0x01, AML_FIELD_ACCESS_WORD = 0x02, AML_FIELD_ACCESS_DWORD = 0x03, AML_FIELD_ACCESS_QWORD = 0x04, /* ACPI 2.0 */ AML_FIELD_ACCESS_BUFFER = 0x05 /* ACPI 2.0 */ } AML_ACCESS_TYPE; /* 2) Field Lock Rules */ typedef enum { AML_FIELD_LOCK_NEVER = 0x00, AML_FIELD_LOCK_ALWAYS = 0x10 } AML_LOCK_RULE; /* 3) Field Update Rules */ typedef enum { AML_FIELD_UPDATE_PRESERVE = 0x00, AML_FIELD_UPDATE_WRITE_AS_ONES = 0x20, AML_FIELD_UPDATE_WRITE_AS_ZEROS = 0x40 } AML_UPDATE_RULE; /* * Field Access Attributes. * This byte is extracted from the AML via the * AccessAs keyword */ typedef enum { AML_FIELD_ATTRIB_QUICK = 0x02, AML_FIELD_ATTRIB_SEND_RECEIVE = 0x04, AML_FIELD_ATTRIB_BYTE = 0x06, AML_FIELD_ATTRIB_WORD = 0x08, AML_FIELD_ATTRIB_BLOCK = 0x0A, AML_FIELD_ATTRIB_BYTES = 0x0B, AML_FIELD_ATTRIB_PROCESS_CALL = 0x0C, AML_FIELD_ATTRIB_BLOCK_PROCESS_CALL = 0x0D, AML_FIELD_ATTRIB_RAW_BYTES = 0x0E, AML_FIELD_ATTRIB_RAW_PROCESS_BYTES = 0x0F } AML_ACCESS_ATTRIBUTE; /* Bit fields in the AML MethodFlags byte */ #define AML_METHOD_ARG_COUNT 0x07 #define AML_METHOD_SERIALIZED 0x08 #define AML_METHOD_SYNC_LEVEL 0xF0 #endif /* __AMLCODE_H__ */ src/acpica/source/include/amlresrc.h000066400000000000000000000771501465205512700200120ustar00rootroot00000000000000/****************************************************************************** * * Module Name: amlresrc.h - AML resource descriptors * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ /* acpisrc:StructDefs -- for acpisrc conversion */ #ifndef __AMLRESRC_H #define __AMLRESRC_H /* * Resource descriptor tags, as defined in the ACPI specification. * Used to symbolically reference fields within a descriptor. */ #define ACPI_RESTAG_ADDRESS "_ADR" #define ACPI_RESTAG_ALIGNMENT "_ALN" #define ACPI_RESTAG_ADDRESSSPACE "_ASI" #define ACPI_RESTAG_ACCESSSIZE "_ASZ" #define ACPI_RESTAG_TYPESPECIFICATTRIBUTES "_ATT" #define ACPI_RESTAG_BASEADDRESS "_BAS" #define ACPI_RESTAG_BUSMASTER "_BM_" /* Master(1), Slave(0) */ #define ACPI_RESTAG_DEBOUNCETIME "_DBT" #define ACPI_RESTAG_DECODE "_DEC" #define ACPI_RESTAG_DEVICEPOLARITY "_DPL" #define ACPI_RESTAG_DMA "_DMA" #define ACPI_RESTAG_DMATYPE "_TYP" /* Compatible(0), A(1), B(2), F(3) */ #define ACPI_RESTAG_DRIVESTRENGTH "_DRS" #define ACPI_RESTAG_ENDIANNESS "_END" #define ACPI_RESTAG_FLOWCONTROL "_FLC" #define ACPI_RESTAG_FUNCTION "_FUN" #define ACPI_RESTAG_GRANULARITY "_GRA" #define ACPI_RESTAG_INTERRUPT "_INT" #define ACPI_RESTAG_INTERRUPTLEVEL "_LL_" /* ActiveLo(1), ActiveHi(0) */ #define ACPI_RESTAG_INTERRUPTSHARE "_SHR" /* Shareable(1), NoShare(0) */ #define ACPI_RESTAG_INTERRUPTTYPE "_HE_" /* Edge(1), Level(0) */ #define ACPI_RESTAG_IORESTRICTION "_IOR" #define ACPI_RESTAG_LENGTH "_LEN" #define ACPI_RESTAG_LINE "_LIN" #define ACPI_RESTAG_LOCALPORT "_PRT" #define ACPI_RESTAG_MEMATTRIBUTES "_MTP" /* Memory(0), Reserved(1), ACPI(2), NVS(3) */ #define ACPI_RESTAG_MEMTYPE "_MEM" /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */ #define ACPI_RESTAG_MAXADDR "_MAX" #define ACPI_RESTAG_MINADDR "_MIN" #define ACPI_RESTAG_MAXTYPE "_MAF" #define ACPI_RESTAG_MINTYPE "_MIF" #define ACPI_RESTAG_MODE "_MOD" #define ACPI_RESTAG_PARITY "_PAR" #define ACPI_RESTAG_PHASE "_PHA" #define ACPI_RESTAG_PHYTYPE "_PHY" #define ACPI_RESTAG_PIN "_PIN" #define ACPI_RESTAG_PINCONFIG "_PPI" #define ACPI_RESTAG_PINCONFIG_TYPE "_TYP" #define ACPI_RESTAG_PINCONFIG_VALUE "_VAL" #define ACPI_RESTAG_POLARITY "_POL" #define ACPI_RESTAG_REGISTERBITOFFSET "_RBO" #define ACPI_RESTAG_REGISTERBITWIDTH "_RBW" #define ACPI_RESTAG_RANGETYPE "_RNG" #define ACPI_RESTAG_READWRITETYPE "_RW_" /* ReadOnly(0), Writeable (1) */ #define ACPI_RESTAG_LENGTH_RX "_RXL" #define ACPI_RESTAG_LENGTH_TX "_TXL" #define ACPI_RESTAG_SLAVEMODE "_SLV" #define ACPI_RESTAG_SPEED "_SPE" #define ACPI_RESTAG_STOPBITS "_STB" #define ACPI_RESTAG_TRANSLATION "_TRA" #define ACPI_RESTAG_TRANSTYPE "_TRS" /* Sparse(1), Dense(0) */ #define ACPI_RESTAG_TYPE "_TTP" /* Translation(1), Static (0) */ #define ACPI_RESTAG_XFERTYPE "_SIZ" /* 8(0), 8And16(1), 16(2) */ #define ACPI_RESTAG_VENDORDATA "_VEN" #define ACPI_RESTAG_FQN "_FQN" #define ACPI_RESTAG_FQD "_FQD" /* Default sizes for "small" resource descriptors */ #define ASL_RDESC_IRQ_SIZE 0x02 #define ASL_RDESC_DMA_SIZE 0x02 #define ASL_RDESC_ST_DEPEND_SIZE 0x00 #define ASL_RDESC_END_DEPEND_SIZE 0x00 #define ASL_RDESC_IO_SIZE 0x07 #define ASL_RDESC_FIXED_IO_SIZE 0x03 #define ASL_RDESC_FIXED_DMA_SIZE 0x05 #define ASL_RDESC_END_TAG_SIZE 0x01 typedef struct asl_resource_node { UINT32 BufferLength; void *Buffer; struct asl_resource_node *Next; } ASL_RESOURCE_NODE; typedef struct asl_resource_info { ACPI_PARSE_OBJECT *DescriptorTypeOp; /* Resource descriptor parse node */ ACPI_PARSE_OBJECT *MappingOp; /* Used for mapfile support */ UINT32 CurrentByteOffset; /* Offset in resource template */ } ASL_RESOURCE_INFO; /* Macros used to generate AML resource length fields */ #define ACPI_AML_SIZE_LARGE(r) (sizeof (r) - sizeof (AML_RESOURCE_LARGE_HEADER)) #define ACPI_AML_SIZE_SMALL(r) (sizeof (r) - sizeof (AML_RESOURCE_SMALL_HEADER)) /* * Resource descriptors defined in the ACPI specification. * * Packing/alignment must be BYTE because these descriptors * are used to overlay the raw AML byte stream. */ #pragma pack(1) /* * SMALL descriptors */ #define AML_RESOURCE_SMALL_HEADER_COMMON \ UINT8 DescriptorType; typedef struct aml_resource_small_header { AML_RESOURCE_SMALL_HEADER_COMMON } AML_RESOURCE_SMALL_HEADER; typedef struct aml_resource_irq { AML_RESOURCE_SMALL_HEADER_COMMON UINT16 IrqMask; UINT8 Flags; } AML_RESOURCE_IRQ; typedef struct aml_resource_irq_noflags { AML_RESOURCE_SMALL_HEADER_COMMON UINT16 IrqMask; } AML_RESOURCE_IRQ_NOFLAGS; typedef struct aml_resource_dma { AML_RESOURCE_SMALL_HEADER_COMMON UINT8 DmaChannelMask; UINT8 Flags; } AML_RESOURCE_DMA; typedef struct aml_resource_start_dependent { AML_RESOURCE_SMALL_HEADER_COMMON UINT8 Flags; } AML_RESOURCE_START_DEPENDENT; typedef struct aml_resource_start_dependent_noprio { AML_RESOURCE_SMALL_HEADER_COMMON } AML_RESOURCE_START_DEPENDENT_NOPRIO; typedef struct aml_resource_end_dependent { AML_RESOURCE_SMALL_HEADER_COMMON } AML_RESOURCE_END_DEPENDENT; typedef struct aml_resource_io { AML_RESOURCE_SMALL_HEADER_COMMON UINT8 Flags; UINT16 Minimum; UINT16 Maximum; UINT8 Alignment; UINT8 AddressLength; } AML_RESOURCE_IO; typedef struct aml_resource_fixed_io { AML_RESOURCE_SMALL_HEADER_COMMON UINT16 Address; UINT8 AddressLength; } AML_RESOURCE_FIXED_IO; typedef struct aml_resource_vendor_small { AML_RESOURCE_SMALL_HEADER_COMMON } AML_RESOURCE_VENDOR_SMALL; typedef struct aml_resource_end_tag { AML_RESOURCE_SMALL_HEADER_COMMON UINT8 Checksum; } AML_RESOURCE_END_TAG; typedef struct aml_resource_fixed_dma { AML_RESOURCE_SMALL_HEADER_COMMON UINT16 RequestLines; UINT16 Channels; UINT8 Width; } AML_RESOURCE_FIXED_DMA; /* * LARGE descriptors */ #define AML_RESOURCE_LARGE_HEADER_COMMON \ UINT8 DescriptorType;\ UINT16 ResourceLength; typedef struct aml_resource_large_header { AML_RESOURCE_LARGE_HEADER_COMMON } AML_RESOURCE_LARGE_HEADER; /* General Flags for address space resource descriptors */ #define ACPI_RESOURCE_FLAG_DEC 2 #define ACPI_RESOURCE_FLAG_MIF 4 #define ACPI_RESOURCE_FLAG_MAF 8 typedef struct aml_resource_memory24 { AML_RESOURCE_LARGE_HEADER_COMMON UINT8 Flags; UINT16 Minimum; UINT16 Maximum; UINT16 Alignment; UINT16 AddressLength; } AML_RESOURCE_MEMORY24; typedef struct aml_resource_vendor_large { AML_RESOURCE_LARGE_HEADER_COMMON } AML_RESOURCE_VENDOR_LARGE; typedef struct aml_resource_memory32 { AML_RESOURCE_LARGE_HEADER_COMMON UINT8 Flags; UINT32 Minimum; UINT32 Maximum; UINT32 Alignment; UINT32 AddressLength; } AML_RESOURCE_MEMORY32; typedef struct aml_resource_fixed_memory32 { AML_RESOURCE_LARGE_HEADER_COMMON UINT8 Flags; UINT32 Address; UINT32 AddressLength; } AML_RESOURCE_FIXED_MEMORY32; #define AML_RESOURCE_ADDRESS_COMMON \ UINT8 ResourceType; \ UINT8 Flags; \ UINT8 SpecificFlags; typedef struct aml_resource_address { AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_ADDRESS_COMMON } AML_RESOURCE_ADDRESS; typedef struct aml_resource_extended_address64 { AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_ADDRESS_COMMON UINT8 RevisionID; UINT8 Reserved; UINT64 Granularity; UINT64 Minimum; UINT64 Maximum; UINT64 TranslationOffset; UINT64 AddressLength; UINT64 TypeSpecific; } AML_RESOURCE_EXTENDED_ADDRESS64; #define AML_RESOURCE_EXTENDED_ADDRESS_REVISION 1 /* ACPI 3.0 */ typedef struct aml_resource_address64 { AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_ADDRESS_COMMON UINT64 Granularity; UINT64 Minimum; UINT64 Maximum; UINT64 TranslationOffset; UINT64 AddressLength; } AML_RESOURCE_ADDRESS64; typedef struct aml_resource_address32 { AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_ADDRESS_COMMON UINT32 Granularity; UINT32 Minimum; UINT32 Maximum; UINT32 TranslationOffset; UINT32 AddressLength; } AML_RESOURCE_ADDRESS32; typedef struct aml_resource_address16 { AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_ADDRESS_COMMON UINT16 Granularity; UINT16 Minimum; UINT16 Maximum; UINT16 TranslationOffset; UINT16 AddressLength; } AML_RESOURCE_ADDRESS16; typedef struct aml_resource_extended_irq { AML_RESOURCE_LARGE_HEADER_COMMON UINT8 Flags; UINT8 InterruptCount; union { UINT32 Interrupt; ACPI_FLEX_ARRAY(UINT32, Interrupts); }; /* ResSourceIndex, ResSource optional fields follow */ } AML_RESOURCE_EXTENDED_IRQ; typedef struct aml_resource_generic_register { AML_RESOURCE_LARGE_HEADER_COMMON UINT8 AddressSpaceId; UINT8 BitWidth; UINT8 BitOffset; UINT8 AccessSize; /* ACPI 3.0, was previously Reserved */ UINT64 Address; } AML_RESOURCE_GENERIC_REGISTER; /* Common descriptor for GpioInt and GpioIo (ACPI 5.0) */ typedef struct aml_resource_gpio { AML_RESOURCE_LARGE_HEADER_COMMON UINT8 RevisionId; UINT8 ConnectionType; UINT16 Flags; UINT16 IntFlags; UINT8 PinConfig; UINT16 DriveStrength; UINT16 DebounceTimeout; UINT16 PinTableOffset; UINT8 ResSourceIndex; UINT16 ResSourceOffset; UINT16 VendorOffset; UINT16 VendorLength; /* * Optional fields follow immediately: * 1) PIN list (Words) * 2) Resource Source String * 3) Vendor Data bytes */ } AML_RESOURCE_GPIO; #define AML_RESOURCE_GPIO_REVISION 1 /* ACPI 5.0 */ /* Values for ConnectionType above */ #define AML_RESOURCE_GPIO_TYPE_INT 0 #define AML_RESOURCE_GPIO_TYPE_IO 1 #define AML_RESOURCE_MAX_GPIOTYPE 1 /* Common preamble for all serial descriptors (ACPI 5.0) */ #define AML_RESOURCE_SERIAL_COMMON \ UINT8 RevisionId; \ UINT8 ResSourceIndex; \ UINT8 Type; \ UINT8 Flags; \ UINT16 TypeSpecificFlags; \ UINT8 TypeRevisionId; \ UINT16 TypeDataLength; \ /* Values for the type field above */ #define AML_RESOURCE_I2C_SERIALBUSTYPE 1 #define AML_RESOURCE_SPI_SERIALBUSTYPE 2 #define AML_RESOURCE_UART_SERIALBUSTYPE 3 #define AML_RESOURCE_CSI2_SERIALBUSTYPE 4 #define AML_RESOURCE_MAX_SERIALBUSTYPE 4 #define AML_RESOURCE_VENDOR_SERIALBUSTYPE 192 /* Vendor defined is 0xC0-0xFF (NOT SUPPORTED) */ typedef struct aml_resource_common_serialbus { AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_SERIAL_COMMON } AML_RESOURCE_COMMON_SERIALBUS; typedef struct aml_resource_csi2_serialbus { AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_SERIAL_COMMON /* * Optional fields follow immediately: * 1) Vendor Data bytes * 2) Resource Source String */ } AML_RESOURCE_CSI2_SERIALBUS; #define AML_RESOURCE_CSI2_REVISION 1 /* ACPI 6.4 */ #define AML_RESOURCE_CSI2_TYPE_REVISION 1 /* ACPI 6.4 */ #define AML_RESOURCE_CSI2_MIN_DATA_LEN 0 /* ACPI 6.4 */ typedef struct aml_resource_i2c_serialbus { AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_SERIAL_COMMON UINT32 ConnectionSpeed; UINT16 SlaveAddress; /* * Optional fields follow immediately: * 1) Vendor Data bytes * 2) Resource Source String */ } AML_RESOURCE_I2C_SERIALBUS; #define AML_RESOURCE_I2C_REVISION 1 /* ACPI 5.0 */ #define AML_RESOURCE_I2C_TYPE_REVISION 1 /* ACPI 5.0 */ #define AML_RESOURCE_I2C_MIN_DATA_LEN 6 typedef struct aml_resource_spi_serialbus { AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_SERIAL_COMMON UINT32 ConnectionSpeed; UINT8 DataBitLength; UINT8 ClockPhase; UINT8 ClockPolarity; UINT16 DeviceSelection; /* * Optional fields follow immediately: * 1) Vendor Data bytes * 2) Resource Source String */ } AML_RESOURCE_SPI_SERIALBUS; #define AML_RESOURCE_SPI_REVISION 1 /* ACPI 5.0 */ #define AML_RESOURCE_SPI_TYPE_REVISION 1 /* ACPI 5.0 */ #define AML_RESOURCE_SPI_MIN_DATA_LEN 9 typedef struct aml_resource_uart_serialbus { AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_SERIAL_COMMON UINT32 DefaultBaudRate; UINT16 RxFifoSize; UINT16 TxFifoSize; UINT8 Parity; UINT8 LinesEnabled; /* * Optional fields follow immediately: * 1) Vendor Data bytes * 2) Resource Source String */ } AML_RESOURCE_UART_SERIALBUS; #define AML_RESOURCE_UART_REVISION 1 /* ACPI 5.0 */ #define AML_RESOURCE_UART_TYPE_REVISION 1 /* ACPI 5.0 */ #define AML_RESOURCE_UART_MIN_DATA_LEN 10 typedef struct aml_resource_pin_function { AML_RESOURCE_LARGE_HEADER_COMMON UINT8 RevisionId; UINT16 Flags; UINT8 PinConfig; UINT16 FunctionNumber; UINT16 PinTableOffset; UINT8 ResSourceIndex; UINT16 ResSourceOffset; UINT16 VendorOffset; UINT16 VendorLength; /* * Optional fields follow immediately: * 1) PIN list (Words) * 2) Resource Source String * 3) Vendor Data bytes */ } AML_RESOURCE_PIN_FUNCTION; #define AML_RESOURCE_PIN_FUNCTION_REVISION 1 /* ACPI 6.2 */ typedef struct aml_resource_pin_config { AML_RESOURCE_LARGE_HEADER_COMMON UINT8 RevisionId; UINT16 Flags; UINT8 PinConfigType; UINT32 PinConfigValue; UINT16 PinTableOffset; UINT8 ResSourceIndex; UINT16 ResSourceOffset; UINT16 VendorOffset; UINT16 VendorLength; /* * Optional fields follow immediately: * 1) PIN list (Words) * 2) Resource Source String * 3) Vendor Data bytes */ } AML_RESOURCE_PIN_CONFIG; #define AML_RESOURCE_CLOCK_INPUT_REVISION 1 /* ACPI 6.5 */ typedef struct aml_resource_clock_input { AML_RESOURCE_LARGE_HEADER_COMMON UINT8 RevisionId; UINT16 Flags; UINT16 FrequencyDivisor; UINT32 FrequencyNumerator; /* * Optional fields follow immediately: * 1) Resource Source index * 2) Resource Source String */ } AML_RESOURCE_CLOCK_INPUT; #define AML_RESOURCE_PIN_CONFIG_REVISION 1 /* ACPI 6.2 */ typedef struct aml_resource_pin_group { AML_RESOURCE_LARGE_HEADER_COMMON UINT8 RevisionId; UINT16 Flags; UINT16 PinTableOffset; UINT16 LabelOffset; UINT16 VendorOffset; UINT16 VendorLength; /* * Optional fields follow immediately: * 1) PIN list (Words) * 2) Resource Label String * 3) Vendor Data bytes */ } AML_RESOURCE_PIN_GROUP; #define AML_RESOURCE_PIN_GROUP_REVISION 1 /* ACPI 6.2 */ typedef struct aml_resource_pin_group_function { AML_RESOURCE_LARGE_HEADER_COMMON UINT8 RevisionId; UINT16 Flags; UINT16 FunctionNumber; UINT8 ResSourceIndex; UINT16 ResSourceOffset; UINT16 ResSourceLabelOffset; UINT16 VendorOffset; UINT16 VendorLength; /* * Optional fields follow immediately: * 1) Resource Source String * 2) Resource Source Label String * 3) Vendor Data bytes */ } AML_RESOURCE_PIN_GROUP_FUNCTION; #define AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION 1 /* ACPI 6.2 */ typedef struct aml_resource_pin_group_config { AML_RESOURCE_LARGE_HEADER_COMMON UINT8 RevisionId; UINT16 Flags; UINT8 PinConfigType; UINT32 PinConfigValue; UINT8 ResSourceIndex; UINT16 ResSourceOffset; UINT16 ResSourceLabelOffset; UINT16 VendorOffset; UINT16 VendorLength; /* * Optional fields follow immediately: * 1) Resource Source String * 2) Resource Source Label String * 3) Vendor Data bytes */ } AML_RESOURCE_PIN_GROUP_CONFIG; #define AML_RESOURCE_PIN_GROUP_CONFIG_REVISION 1 /* ACPI 6.2 */ /* restore default alignment */ #pragma pack() /* Union of all resource descriptors, so we can allocate the worst case */ typedef union aml_resource { /* Descriptor headers */ UINT8 DescriptorType; AML_RESOURCE_SMALL_HEADER SmallHeader; AML_RESOURCE_LARGE_HEADER LargeHeader; /* Small resource descriptors */ AML_RESOURCE_IRQ Irq; AML_RESOURCE_DMA Dma; AML_RESOURCE_START_DEPENDENT StartDpf; AML_RESOURCE_END_DEPENDENT EndDpf; AML_RESOURCE_IO Io; AML_RESOURCE_FIXED_IO FixedIo; AML_RESOURCE_FIXED_DMA FixedDma; AML_RESOURCE_VENDOR_SMALL VendorSmall; AML_RESOURCE_END_TAG EndTag; /* Large resource descriptors */ AML_RESOURCE_MEMORY24 Memory24; AML_RESOURCE_GENERIC_REGISTER GenericReg; AML_RESOURCE_VENDOR_LARGE VendorLarge; AML_RESOURCE_MEMORY32 Memory32; AML_RESOURCE_FIXED_MEMORY32 FixedMemory32; AML_RESOURCE_ADDRESS16 Address16; AML_RESOURCE_ADDRESS32 Address32; AML_RESOURCE_ADDRESS64 Address64; AML_RESOURCE_EXTENDED_ADDRESS64 ExtAddress64; AML_RESOURCE_EXTENDED_IRQ ExtendedIrq; AML_RESOURCE_GPIO Gpio; AML_RESOURCE_I2C_SERIALBUS I2cSerialBus; AML_RESOURCE_SPI_SERIALBUS SpiSerialBus; AML_RESOURCE_UART_SERIALBUS UartSerialBus; AML_RESOURCE_CSI2_SERIALBUS Csi2SerialBus; AML_RESOURCE_COMMON_SERIALBUS CommonSerialBus; AML_RESOURCE_PIN_FUNCTION PinFunction; AML_RESOURCE_PIN_CONFIG PinConfig; AML_RESOURCE_PIN_GROUP PinGroup; AML_RESOURCE_PIN_GROUP_FUNCTION PinGroupFunction; AML_RESOURCE_PIN_GROUP_CONFIG PinGroupConfig; AML_RESOURCE_CLOCK_INPUT ClockInput; /* Utility overlays */ AML_RESOURCE_ADDRESS Address; UINT32 DwordItem; UINT16 WordItem; UINT8 ByteItem; } AML_RESOURCE; /* Interfaces used by both the disassembler and compiler */ void MpSaveGpioInfo ( ACPI_PARSE_OBJECT *Op, AML_RESOURCE *Resource, UINT32 PinCount, UINT16 *PinList, char *DeviceName); void MpSaveSerialInfo ( ACPI_PARSE_OBJECT *Op, AML_RESOURCE *Resource, char *DeviceName); char * MpGetHidFromParseTree ( ACPI_NAMESPACE_NODE *HidNode); char * MpGetHidViaNamestring ( char *DeviceName); char * MpGetConnectionInfo ( ACPI_PARSE_OBJECT *Op, UINT32 PinIndex, ACPI_NAMESPACE_NODE **TargetNode, char **TargetName); char * MpGetParentDeviceHid ( ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE **TargetNode, char **ParentDeviceName); char * MpGetDdnValue ( char *DeviceName); char * MpGetHidValue ( ACPI_NAMESPACE_NODE *DeviceNode); #endif src/acpica/source/include/platform/000077500000000000000000000000001465205512700176435ustar00rootroot00000000000000src/acpica/source/include/platform/acenv.h000066400000000000000000000421561465205512700211200ustar00rootroot00000000000000/****************************************************************************** * * Name: acenv.h - Host and compiler configuration * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACENV_H__ #define __ACENV_H__ /* * Environment configuration. The purpose of this file is to interface ACPICA * to the local environment. This includes compiler-specific, OS-specific, * and machine-specific configuration. */ /* Types for ACPI_MUTEX_TYPE */ #define ACPI_BINARY_SEMAPHORE 0 #define ACPI_OSL_MUTEX 1 /* Types for DEBUGGER_THREADING */ #define DEBUGGER_SINGLE_THREADED 0 #define DEBUGGER_MULTI_THREADED 1 /****************************************************************************** * * Configuration for ACPI tools and utilities * *****************************************************************************/ /* Common application configuration. All single threaded except for AcpiExec. */ #if (defined ACPI_ASL_COMPILER) || \ (defined ACPI_BIN_APP) || \ (defined ACPI_DUMP_APP) || \ (defined ACPI_HELP_APP) || \ (defined ACPI_NAMES_APP) || \ (defined ACPI_SRC_APP) || \ (defined ACPI_XTRACT_APP) || \ (defined ACPI_EXAMPLE_APP) || \ (defined ACPI_EFI_HELLO) #define ACPI_APPLICATION #define ACPI_SINGLE_THREADED #define USE_NATIVE_ALLOCATE_ZEROED #endif /* iASL configuration */ #ifdef ACPI_ASL_COMPILER #define ACPI_DEBUG_OUTPUT #define ACPI_CONSTANT_EVAL_ONLY #define ACPI_LARGE_NAMESPACE_NODE #define ACPI_DATA_TABLE_DISASSEMBLY #define ACPI_32BIT_PHYSICAL_ADDRESS #define ACPI_DISASSEMBLER 1 #endif /* AcpiExec configuration. Multithreaded with full AML debugger */ #ifdef ACPI_EXEC_APP #define ACPI_APPLICATION #define ACPI_FULL_DEBUG #define ACPI_MUTEX_DEBUG #define ACPI_DBG_TRACK_ALLOCATIONS #endif /* AcpiHelp configuration. Error messages disabled. */ #ifdef ACPI_HELP_APP #define ACPI_NO_ERROR_MESSAGES #endif /* AcpiNames configuration. Debug output enabled. */ #ifdef ACPI_NAMES_APP #define ACPI_DEBUG_OUTPUT #endif /* AcpiExec/AcpiNames/Example configuration. Native RSDP used. */ #if (defined ACPI_EXEC_APP) || \ (defined ACPI_EXAMPLE_APP) || \ (defined ACPI_NAMES_APP) #define ACPI_USE_NATIVE_RSDP_POINTER #endif /* AcpiDump configuration. Native mapping used if provided by the host */ #ifdef ACPI_DUMP_APP #define ACPI_USE_NATIVE_MEMORY_MAPPING #endif /* AcpiNames/Example configuration. Hardware disabled */ #if (defined ACPI_EXAMPLE_APP) || \ (defined ACPI_NAMES_APP) #define ACPI_REDUCED_HARDWARE 1 #endif /* Linkable ACPICA library. Two versions, one with full debug. */ #ifdef ACPI_LIBRARY #define ACPI_USE_LOCAL_CACHE #define ACPI_DEBUGGER 1 #define ACPI_DISASSEMBLER 1 #ifdef _DEBUG #define ACPI_DEBUG_OUTPUT #endif #endif /* Common for all ACPICA applications */ #ifdef ACPI_APPLICATION #define ACPI_USE_LOCAL_CACHE #endif /* Common debug/disassembler support */ #ifdef ACPI_FULL_DEBUG #define ACPI_DEBUG_OUTPUT #define ACPI_DEBUGGER 1 #define ACPI_DISASSEMBLER 1 #endif /* * acpisrc CR\LF support * Unix file line endings do not include the carriage return. * If the acpisrc utility is being built using a microsoft compiler, it means * that it will be running on a windows machine which means that the output is * expected to have CR/LF newlines. If the acpisrc utility is built with * anything else, it will likely run on a system with LF newlines. This flag * tells the acpisrc utility that newlines will be in the LF format. */ #if defined(ACPI_SRC_APP) && !defined(_MSC_VER) #define ACPI_SRC_OS_LF_ONLY 1 #else #define ACPI_SRC_OS_LF_ONLY 0 #endif /*! [Begin] no source code translation */ /****************************************************************************** * * Host configuration files. The compiler configuration files are included * first. * *****************************************************************************/ #if defined(__GNUC__) && !defined(__INTEL_COMPILER) #include "acgcc.h" #elif defined(_MSC_VER) #include "acmsvc.h" #elif defined(__INTEL_COMPILER) #include "acintel.h" #endif #if defined(_LINUX) || defined(__linux__) #include "aclinux.h" #elif defined(_APPLE) || defined(__APPLE__) #include "acmacosx.h" #elif defined(__DragonFly__) #include "acdragonfly.h" #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #include "acfreebsd.h" #elif defined(__NetBSD__) #include "acnetbsd.h" #elif defined(__sun) #include "acsolaris.h" #elif defined(MODESTO) #include "acmodesto.h" #elif defined(NETWARE) #include "acnetware.h" #elif defined(_CYGWIN) #include "accygwin.h" #elif defined(WIN32) #include "acwin.h" #elif defined(WIN64) #include "acwin64.h" #elif defined(_WRS_LIB_BUILD) #include "acvxworks.h" #elif defined(__OS2__) #include "acos2.h" #elif defined(__HAIKU__) #include "achaiku.h" #elif defined(__QNX__) #include "acqnx.h" /* * EFI applications can be built with -nostdlib, in this case, it must be * included after including all other host environmental definitions, in * order to override the definitions. */ #elif defined(_AED_EFI) || defined(_GNU_EFI) || defined(_EDK2_EFI) #include "acefi.h" #elif defined(__ZEPHYR__) #include "aczephyr.h" #else /* Unknown environment */ #error Unknown target environment #endif /*! [End] no source code translation !*/ /****************************************************************************** * * Setup defaults for the required symbols that were not defined in one of * the host/compiler files above. * *****************************************************************************/ /* 64-bit data types */ #ifndef COMPILER_DEPENDENT_INT64 #define COMPILER_DEPENDENT_INT64 long long #endif #ifndef COMPILER_DEPENDENT_UINT64 #define COMPILER_DEPENDENT_UINT64 unsigned long long #endif /* Type of mutex supported by host. Default is binary semaphores. */ #ifndef ACPI_MUTEX_TYPE #define ACPI_MUTEX_TYPE ACPI_BINARY_SEMAPHORE #endif /* Global Lock acquire/release */ #ifndef ACPI_ACQUIRE_GLOBAL_LOCK #define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acquired) Acquired = 1 #endif #ifndef ACPI_RELEASE_GLOBAL_LOCK #define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Pending) Pending = 0 #endif /* Flush CPU cache - used when going to sleep. Wbinvd or similar. */ #ifndef ACPI_FLUSH_CPU_CACHE #define ACPI_FLUSH_CPU_CACHE() #endif /* "inline" keywords - configurable since inline is not standardized */ #ifndef ACPI_INLINE #define ACPI_INLINE #endif /* Use ordered initialization if compiler doesn't support designated. */ #ifndef ACPI_STRUCT_INIT #define ACPI_STRUCT_INIT(field, value) value #endif /* * Configurable calling conventions: * * ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads) * ACPI_EXTERNAL_XFACE - External ACPI interfaces * ACPI_INTERNAL_XFACE - Internal ACPI interfaces * ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces */ #ifndef ACPI_SYSTEM_XFACE #define ACPI_SYSTEM_XFACE #endif #ifndef ACPI_EXTERNAL_XFACE #define ACPI_EXTERNAL_XFACE #endif #ifndef ACPI_INTERNAL_XFACE #define ACPI_INTERNAL_XFACE #endif #ifndef ACPI_INTERNAL_VAR_XFACE #define ACPI_INTERNAL_VAR_XFACE #endif /* * Debugger threading model * Use single threaded if the entire subsystem is contained in an application * Use multiple threaded when the subsystem is running in the kernel. * * By default the model is single threaded if ACPI_APPLICATION is set, * multi-threaded if ACPI_APPLICATION is not set. */ #ifndef DEBUGGER_THREADING #if !defined (ACPI_APPLICATION) || defined (ACPI_EXEC_APP) #define DEBUGGER_THREADING DEBUGGER_MULTI_THREADED #else #define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED #endif #endif /* !DEBUGGER_THREADING */ /****************************************************************************** * * C library configuration * *****************************************************************************/ /* * ACPI_USE_SYSTEM_CLIBRARY - Define this if linking to an actual C library. * Otherwise, local versions of string/memory functions will be used. * ACPI_USE_STANDARD_HEADERS - Define this if linking to a C library and * the standard header files may be used. Defining this implies that * ACPI_USE_SYSTEM_CLIBRARY has been defined. * * The ACPICA subsystem only uses low level C library functions that do not * call operating system services and may therefore be inlined in the code. * * It may be necessary to tailor these include files to the target * generation environment. */ /* Use the standard C library headers. We want to keep these to a minimum. */ #ifdef ACPI_USE_STANDARD_HEADERS /* Use the standard headers from the standard locations */ #include #include #include #if defined (ACPI_APPLICATION) || defined(ACPI_LIBRARY) #include #include #include #include #include #endif #endif /* ACPI_USE_STANDARD_HEADERS */ #ifdef ACPI_APPLICATION #define ACPI_FILE FILE * #define ACPI_FILE_OUT stdout #define ACPI_FILE_ERR stderr #else #define ACPI_FILE void * #define ACPI_FILE_OUT NULL #define ACPI_FILE_ERR NULL #endif /* ACPI_APPLICATION */ #ifndef ACPI_INIT_FUNCTION #define ACPI_INIT_FUNCTION #endif #endif /* __ACENV_H__ */ src/acpica/source/include/platform/acenvex.h000066400000000000000000000221411465205512700214450ustar00rootroot00000000000000/****************************************************************************** * * Name: acenvex.h - Extra host and compiler configuration * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACENVEX_H__ #define __ACENVEX_H__ /*! [Begin] no source code translation */ /****************************************************************************** * * Extra host configuration files. All ACPICA headers are included before * including these files. * *****************************************************************************/ #if defined(_LINUX) || defined(__linux__) #include "aclinuxex.h" #elif defined(__DragonFly__) #include "acdragonflyex.h" /* * EFI applications can be built with -nostdlib, in this case, it must be * included after including all other host environmental definitions, in * order to override the definitions. */ #elif defined(_AED_EFI) || defined(_GNU_EFI) || defined(_EDK2_EFI) #include "acefiex.h" #endif #if defined(__GNUC__) && !defined(__INTEL_COMPILER) #include "acgccex.h" #elif defined(_MSC_VER) #include "acmsvcex.h" #endif /*! [End] no source code translation !*/ #endif /* __ACENVEX_H__ */ src/acpica/source/include/platform/acgcc.h000066400000000000000000000243621465205512700210630ustar00rootroot00000000000000/****************************************************************************** * * Name: acgcc.h - GCC specific defines, etc. * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACGCC_H__ #define __ACGCC_H__ /* * Use compiler specific is a good practice for even when * -nostdinc is specified (i.e., ACPI_USE_STANDARD_HEADERS undefined. */ #ifndef va_arg #ifdef ACPI_USE_BUILTIN_STDARG typedef __builtin_va_list va_list; #define va_start(v, l) __builtin_va_start(v, l) #define va_end(v) __builtin_va_end(v) #define va_arg(v, l) __builtin_va_arg(v, l) #define va_copy(d, s) __builtin_va_copy(d, s) #else #include #endif #endif #define ACPI_INLINE __inline__ /* Function name is used for debug output. Non-ANSI, compiler-dependent */ #define ACPI_GET_FUNCTION_NAME __func__ /* * This macro is used to tag functions as "printf-like" because * some compilers (like GCC) can catch printf format string problems. */ #define ACPI_PRINTF_LIKE(c) __attribute__ ((__format__ (__printf__, c, c+1))) /* * Some compilers complain about unused variables. Sometimes we don't want to * use all the variables (for example, _AcpiModuleName). This allows us * to tell the compiler warning in a per-variable manner that a variable * is unused. */ #define ACPI_UNUSED_VAR __attribute__ ((unused)) /* GCC supports __VA_ARGS__ in macros */ #define COMPILER_VA_MACRO 1 /* GCC supports native multiply/shift on 32-bit platforms */ #define ACPI_USE_NATIVE_MATH64 /* GCC did not support __has_attribute until 5.1. */ #ifndef __has_attribute #define __has_attribute(x) 0 #endif /* * Explicitly mark intentional explicit fallthrough to silence * -Wimplicit-fallthrough in GCC 7.1+. */ #if __has_attribute(__fallthrough__) #define ACPI_FALLTHROUGH __attribute__((__fallthrough__)) #endif /* * Flexible array members are not allowed to be part of a union under * C99, but this is not for any technical reason. Work around the * limitation. */ #ifndef __cplusplus #define ACPI_FLEX_ARRAY(TYPE, NAME) \ struct { \ struct { } __Empty_ ## NAME; \ TYPE NAME[]; \ } #endif #endif /* __ACGCC_H__ */ src/acpica/source/include/platform/acgccex.h000066400000000000000000000207671465205512700214250ustar00rootroot00000000000000/****************************************************************************** * * Name: acgccex.h - Extra GCC specific defines, etc. * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACGCCEX_H__ #define __ACGCCEX_H__ /* * Some versions of gcc implement strchr() with a buggy macro. So, * undef it here. Prevents error messages of this form (usually from the * file getopt.c): * * error: logical '&&' with non-zero constant will always evaluate as true */ #ifdef strchr #undef strchr #endif #endif /* __ACGCCEX_H__ */ src/acpica/source/include/platform/aclinux.h000066400000000000000000000334261465205512700214670ustar00rootroot00000000000000/****************************************************************************** * * Name: aclinux.h - OS specific defines, etc. for Linux * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACLINUX_H__ #define __ACLINUX_H__ #ifdef __KERNEL__ /* ACPICA external files should not include ACPICA headers directly. */ #if !defined(BUILDING_ACPICA) && !defined(_LINUX_ACPI_H) #error "Please don't include directly, include instead." #endif #endif /* Common (in-kernel/user-space) ACPICA configuration */ #define ACPI_USE_SYSTEM_CLIBRARY #define ACPI_USE_DO_WHILE_0 #define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS #ifdef __KERNEL__ #define ACPI_USE_SYSTEM_INTTYPES #define ACPI_USE_GPE_POLLING /* Kernel specific ACPICA configuration */ #ifdef CONFIG_ACPI_REDUCED_HARDWARE_ONLY #define ACPI_REDUCED_HARDWARE 1 #endif #ifdef CONFIG_ACPI_DEBUGGER #define ACPI_DEBUGGER #endif #ifdef CONFIG_ACPI_DEBUG #define ACPI_MUTEX_DEBUG #endif #include #include #include #include #include #include #include #include #ifdef EXPORT_ACPI_INTERFACES #include #endif #ifdef CONFIG_ACPI #include #endif #define ACPI_INIT_FUNCTION __init /* Use a specific bugging default separate from ACPICA */ #undef ACPI_DEBUG_DEFAULT #define ACPI_DEBUG_DEFAULT (ACPI_LV_INFO | ACPI_LV_REPAIR) #ifndef CONFIG_ACPI /* External globals for __KERNEL__, stubs is needed */ #define ACPI_GLOBAL(t,a) #define ACPI_INIT_GLOBAL(t,a,b) /* Generating stubs for configurable ACPICA macros */ #define ACPI_NO_MEM_ALLOCATIONS /* Generating stubs for configurable ACPICA functions */ #define ACPI_NO_ERROR_MESSAGES #undef ACPI_DEBUG_OUTPUT /* External interface for __KERNEL__, stub is needed */ #define ACPI_EXTERNAL_RETURN_STATUS(Prototype) \ static ACPI_INLINE Prototype {return(AE_NOT_CONFIGURED);} #define ACPI_EXTERNAL_RETURN_OK(Prototype) \ static ACPI_INLINE Prototype {return(AE_OK);} #define ACPI_EXTERNAL_RETURN_VOID(Prototype) \ static ACPI_INLINE Prototype {return;} #define ACPI_EXTERNAL_RETURN_UINT32(Prototype) \ static ACPI_INLINE Prototype {return(0);} #define ACPI_EXTERNAL_RETURN_PTR(Prototype) \ static ACPI_INLINE Prototype {return(NULL);} #endif /* CONFIG_ACPI */ /* Host-dependent types and defines for in-kernel ACPICA */ #define ACPI_MACHINE_WIDTH BITS_PER_LONG #define ACPI_USE_NATIVE_MATH64 #define ACPI_EXPORT_SYMBOL(symbol) EXPORT_SYMBOL(symbol); #define strtoul simple_strtoul #define ACPI_CACHE_T struct kmem_cache #define ACPI_SPINLOCK spinlock_t * #define ACPI_CPU_FLAGS unsigned long #define ACPI_UINTPTR_T uintptr_t #define ACPI_TO_INTEGER(p) ((uintptr_t)(p)) #define ACPI_OFFSET(d, f) offsetof(d, f) /* Use native linux version of AcpiOsAllocateZeroed */ #define USE_NATIVE_ALLOCATE_ZEROED /* * Overrides for in-kernel ACPICA */ #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitialize #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocate #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock /* * OSL interfaces used by debugger/disassembler */ #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadable #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitializeDebugger #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminateDebugger /* * OSL interfaces used by utilities */ #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory #define ACPI_MSG_ERROR KERN_ERR "ACPI Error: " #define ACPI_MSG_EXCEPTION KERN_ERR "ACPI Exception: " #define ACPI_MSG_WARNING KERN_WARNING "ACPI Warning: " #define ACPI_MSG_INFO KERN_INFO "ACPI: " #define ACPI_MSG_BIOS_ERROR KERN_ERR "ACPI BIOS Error (bug): " #define ACPI_MSG_BIOS_WARNING KERN_WARNING "ACPI BIOS Warning (bug): " /* * Linux wants to use designated initializers for function pointer structs. */ #define ACPI_STRUCT_INIT(field, value) .field = value #else /* !__KERNEL__ */ #define ACPI_USE_STANDARD_HEADERS #ifdef ACPI_USE_STANDARD_HEADERS #include #include #include #define ACPI_OFFSET(d, f) offsetof(d, f) #endif /* Define/disable kernel-specific declarators */ #ifndef __init #define __init #endif #ifndef __iomem #define __iomem #endif /* Host-dependent types and defines for user-space ACPICA */ #define ACPI_FLUSH_CPU_CACHE() #define ACPI_CAST_PTHREAD_T(Pthread) ((ACPI_THREAD_ID) (Pthread)) #if defined(__ia64__) || (defined(__x86_64__) && !defined(__ILP32__)) ||\ defined(__aarch64__) || defined(__PPC64__) ||\ defined(__s390x__) || defined(__loongarch__) ||\ (defined(__riscv) && (defined(__LP64__) || defined(_LP64))) #define ACPI_MACHINE_WIDTH 64 #define COMPILER_DEPENDENT_INT64 long #define COMPILER_DEPENDENT_UINT64 unsigned long #else #define ACPI_MACHINE_WIDTH 32 #define COMPILER_DEPENDENT_INT64 long long #define COMPILER_DEPENDENT_UINT64 unsigned long long #define ACPI_USE_NATIVE_DIVIDE #define ACPI_USE_NATIVE_MATH64 #endif #ifndef __cdecl #define __cdecl #endif #endif /* __KERNEL__ */ #endif /* __ACLINUX_H__ */ src/acpica/source/include/platform/aclinuxex.h000066400000000000000000000253561465205512700220270ustar00rootroot00000000000000/****************************************************************************** * * Name: aclinuxex.h - Extra OS specific defines, etc. for Linux * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef __ACLINUXEX_H__ #define __ACLINUXEX_H__ #ifdef __KERNEL__ #ifndef ACPI_USE_NATIVE_DIVIDE #ifndef ACPI_DIV_64_BY_32 #define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \ do { \ UINT64 (__n) = ((UINT64) n_hi) << 32 | (n_lo); \ (r32) = do_div ((__n), (d32)); \ (q32) = (UINT32) (__n); \ } while (0) #endif #ifndef ACPI_SHIFT_RIGHT_64 #define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \ do { \ (n_lo) >>= 1; \ (n_lo) |= (((n_hi) & 1) << 31); \ (n_hi) >>= 1; \ } while (0) #endif #endif /* * Overrides for in-kernel ACPICA */ ACPI_STATUS ACPI_INIT_FUNCTION AcpiOsInitialize ( void); ACPI_STATUS AcpiOsTerminate ( void); /* * The irqs_disabled() check is for resume from RAM. * Interrupts are off during resume, just like they are for boot. * However, boot has (system_state != SYSTEM_RUNNING) * to quiet __might_sleep() in kmalloc() and resume does not. */ static inline void * AcpiOsAllocate ( ACPI_SIZE Size) { return kmalloc (Size, irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL); } static inline void * AcpiOsAllocateZeroed ( ACPI_SIZE Size) { return kzalloc (Size, irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL); } static inline void AcpiOsFree ( void *Memory) { kfree (Memory); } static inline void * AcpiOsAcquireObject ( ACPI_CACHE_T *Cache) { return kmem_cache_zalloc (Cache, irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL); } static inline ACPI_THREAD_ID AcpiOsGetThreadId ( void) { return (ACPI_THREAD_ID) (unsigned long) current; } /* * When lockdep is enabled, the spin_lock_init() macro stringifies it's * argument and uses that as a name for the lock in debugging. * By executing spin_lock_init() in a macro the key changes from "lock" for * all locks to the name of the argument of acpi_os_create_lock(), which * prevents lockdep from reporting false positives for ACPICA locks. */ #define AcpiOsCreateLock(__Handle) \ ({ \ spinlock_t *Lock = ACPI_ALLOCATE(sizeof(*Lock)); \ if (Lock) { \ *(__Handle) = Lock; \ spin_lock_init(*(__Handle)); \ } \ Lock ? AE_OK : AE_NO_MEMORY; \ }) static inline BOOLEAN AcpiOsReadable ( void *Pointer, ACPI_SIZE Length) { return TRUE; } static inline ACPI_STATUS AcpiOsInitializeDebugger ( void) { return AE_OK; } static inline void AcpiOsTerminateDebugger ( void) { return; } /* * OSL interfaces added by Linux */ #endif /* __KERNEL__ */ #endif /* __ACLINUXEX_H__ */ src/acpica/source/os_specific/000077500000000000000000000000001465205512700166625ustar00rootroot00000000000000src/acpica/source/os_specific/service_layers/000077500000000000000000000000001465205512700217015ustar00rootroot00000000000000src/acpica/source/os_specific/service_layers/osgendbg.c000066400000000000000000000373471465205512700236530ustar00rootroot00000000000000/****************************************************************************** * * Module Name: osgendbg - Generic debugger command signalling * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "acpi.h" #include "accommon.h" #include "acdebug.h" #define _COMPONENT ACPI_CA_DEBUGGER ACPI_MODULE_NAME ("osgendbg") /* Local prototypes */ static void AcpiDbRunRemoteDebugger ( char *BatchBuffer); static ACPI_MUTEX AcpiGbl_DbCommandReady; static ACPI_MUTEX AcpiGbl_DbCommandComplete; static BOOLEAN AcpiGbl_DbCommandSignalsInitialized = FALSE; /****************************************************************************** * * FUNCTION: AcpiDbRunRemoteDebugger * * PARAMETERS: BatchBuffer - Buffer containing commands running in * the batch mode * * RETURN: None * * DESCRIPTION: Run multi-threading debugger remotely * *****************************************************************************/ static void AcpiDbRunRemoteDebugger ( char *BatchBuffer) { ACPI_STATUS Status; char *Ptr = BatchBuffer; char *Cmd = Ptr; while (!AcpiGbl_DbTerminateLoop) { if (BatchBuffer) { if (*Ptr) { while (*Ptr) { if (*Ptr == ',') { /* Convert commas to spaces */ *Ptr = ' '; } else if (*Ptr == ';') { *Ptr = '\0'; continue; } Ptr++; } AcpiUtSafeStrncpy (AcpiGbl_DbLineBuf, Cmd, ACPI_DB_LINE_BUFFER_SIZE); Ptr++; Cmd = Ptr; } else { return; } } else { /* Force output to console until a command is entered */ AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); /* Different prompt if method is executing */ if (!AcpiGbl_MethodExecuting) { AcpiOsPrintf ("%1c ", ACPI_DEBUGGER_COMMAND_PROMPT); } else { AcpiOsPrintf ("%1c ", ACPI_DEBUGGER_EXECUTE_PROMPT); } /* Get the user input line */ Status = AcpiOsGetLine (AcpiGbl_DbLineBuf, ACPI_DB_LINE_BUFFER_SIZE, NULL); if (ACPI_FAILURE (Status)) { return; } } /* * Signal the debug thread that we have a command to execute, * and wait for the command to complete. */ AcpiOsReleaseMutex (AcpiGbl_DbCommandReady); Status = AcpiOsAcquireMutex (AcpiGbl_DbCommandComplete, ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { return; } } } /****************************************************************************** * * FUNCTION: AcpiOsWaitCommandReady * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Negotiate with the debugger foreground thread (the user * thread) to wait the readiness of a command. * *****************************************************************************/ ACPI_STATUS AcpiOsWaitCommandReady ( void) { ACPI_STATUS Status = AE_OK; if (AcpiGbl_DebuggerConfiguration == DEBUGGER_MULTI_THREADED) { Status = AE_TIME; while (Status == AE_TIME) { if (AcpiGbl_DbTerminateLoop) { Status = AE_CTRL_TERMINATE; } else { Status = AcpiOsAcquireMutex (AcpiGbl_DbCommandReady, 1000); } } } else { /* Force output to console until a command is entered */ AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); /* Different prompt if method is executing */ if (!AcpiGbl_MethodExecuting) { AcpiOsPrintf ("%1c ", ACPI_DEBUGGER_COMMAND_PROMPT); } else { AcpiOsPrintf ("%1c ", ACPI_DEBUGGER_EXECUTE_PROMPT); } /* Get the user input line */ Status = AcpiOsGetLine (AcpiGbl_DbLineBuf, ACPI_DB_LINE_BUFFER_SIZE, NULL); } if (ACPI_FAILURE (Status) && Status != AE_CTRL_TERMINATE) { ACPI_EXCEPTION ((AE_INFO, Status, "While parsing/handling command line")); } return (Status); } /****************************************************************************** * * FUNCTION: AcpiOsNotifyCommandComplete * * PARAMETERS: void * * RETURN: Status * * DESCRIPTION: Negotiate with the debugger foreground thread (the user * thread) to notify the completion of a command. * *****************************************************************************/ ACPI_STATUS AcpiOsNotifyCommandComplete ( void) { if (AcpiGbl_DebuggerConfiguration == DEBUGGER_MULTI_THREADED) { AcpiOsReleaseMutex (AcpiGbl_DbCommandComplete); } return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiOsInitializeDebugger * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Initialize OSPM specific part of the debugger * *****************************************************************************/ ACPI_STATUS AcpiOsInitializeDebugger ( void) { ACPI_STATUS Status; /* Create command signals */ Status = AcpiOsCreateMutex (&AcpiGbl_DbCommandReady); if (ACPI_FAILURE (Status)) { return (Status); } Status = AcpiOsCreateMutex (&AcpiGbl_DbCommandComplete); if (ACPI_FAILURE (Status)) { goto ErrorReady; } /* Initialize the states of the command signals */ Status = AcpiOsAcquireMutex (AcpiGbl_DbCommandComplete, ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { goto ErrorComplete; } Status = AcpiOsAcquireMutex (AcpiGbl_DbCommandReady, ACPI_WAIT_FOREVER); if (ACPI_FAILURE (Status)) { goto ErrorComplete; } AcpiGbl_DbCommandSignalsInitialized = TRUE; return (Status); ErrorComplete: AcpiOsDeleteMutex (AcpiGbl_DbCommandComplete); ErrorReady: AcpiOsDeleteMutex (AcpiGbl_DbCommandReady); return (Status); } /****************************************************************************** * * FUNCTION: AcpiOsTerminateDebugger * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Terminate signals used by the multi-threading debugger * *****************************************************************************/ void AcpiOsTerminateDebugger ( void) { if (AcpiGbl_DbCommandSignalsInitialized) { AcpiOsDeleteMutex (AcpiGbl_DbCommandReady); AcpiOsDeleteMutex (AcpiGbl_DbCommandComplete); } } /****************************************************************************** * * FUNCTION: AcpiRunDebugger * * PARAMETERS: BatchBuffer - Buffer containing commands running in * the batch mode * * RETURN: None * * DESCRIPTION: Run a local/remote debugger * *****************************************************************************/ void AcpiRunDebugger ( char *BatchBuffer) { /* Check for single or multithreaded debug */ if (AcpiGbl_DebuggerConfiguration & DEBUGGER_MULTI_THREADED) { AcpiDbRunRemoteDebugger (BatchBuffer); } else { AcpiDbUserCommands (); } } ACPI_EXPORT_SYMBOL (AcpiRunDebugger) src/acpica/source/os_specific/service_layers/osunixxf.c000066400000000000000000001271131465205512700237350ustar00rootroot00000000000000/****************************************************************************** * * Module Name: osunixxf - UNIX OSL interfaces * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ /* * These interfaces are required in order to compile the ASL compiler and the * various ACPICA tools under Linux or other Unix-like system. */ #include "acpi.h" #include "accommon.h" #include "amlcode.h" #include "acparser.h" #include "acdebug.h" #include #include #include #include #include #include #include #include #define _COMPONENT ACPI_OS_SERVICES ACPI_MODULE_NAME ("osunixxf") /* Upcalls to AcpiExec */ void AeTableOverride ( ACPI_TABLE_HEADER *ExistingTable, ACPI_TABLE_HEADER **NewTable); typedef void* (*PTHREAD_CALLBACK) (void *); /* Buffer used by AcpiOsVprintf */ #define ACPI_VPRINTF_BUFFER_SIZE 512 #define _ASCII_NEWLINE '\n' /* Terminal support for AcpiExec only */ #ifdef ACPI_EXEC_APP #include struct termios OriginalTermAttributes; int TermAttributesWereSet = 0; ACPI_STATUS AcpiUtReadLine ( char *Buffer, UINT32 BufferLength, UINT32 *BytesRead); static void OsEnterLineEditMode ( void); static void OsExitLineEditMode ( void); /****************************************************************************** * * FUNCTION: OsEnterLineEditMode, OsExitLineEditMode * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Enter/Exit the raw character input mode for the terminal. * * Interactive line-editing support for the AML debugger. Used with the * common/acgetline module. * * readline() is not used because of non-portability. It is not available * on all systems, and if it is, often the package must be manually installed. * * Therefore, we use the POSIX tcgetattr/tcsetattr and do the minimal line * editing that we need in AcpiOsGetLine. * * If the POSIX tcgetattr/tcsetattr interfaces are unavailable, these * calls will also work: * For OsEnterLineEditMode: system ("stty cbreak -echo") * For OsExitLineEditMode: system ("stty cooked echo") * *****************************************************************************/ static void OsEnterLineEditMode ( void) { struct termios LocalTermAttributes; TermAttributesWereSet = 0; /* STDIN must be a terminal */ if (!isatty (STDIN_FILENO)) { return; } /* Get and keep the original attributes */ if (tcgetattr (STDIN_FILENO, &OriginalTermAttributes)) { fprintf (stderr, "Could not get terminal attributes!\n"); return; } /* Set the new attributes to enable raw character input */ memcpy (&LocalTermAttributes, &OriginalTermAttributes, sizeof (struct termios)); LocalTermAttributes.c_lflag &= ~(ICANON | ECHO); LocalTermAttributes.c_cc[VMIN] = 1; LocalTermAttributes.c_cc[VTIME] = 0; if (tcsetattr (STDIN_FILENO, TCSANOW, &LocalTermAttributes)) { fprintf (stderr, "Could not set terminal attributes!\n"); return; } TermAttributesWereSet = 1; } static void OsExitLineEditMode ( void) { if (!TermAttributesWereSet) { return; } /* Set terminal attributes back to the original values */ if (tcsetattr (STDIN_FILENO, TCSANOW, &OriginalTermAttributes)) { fprintf (stderr, "Could not restore terminal attributes!\n"); } } #else /* These functions are not needed for other ACPICA utilities */ #define OsEnterLineEditMode() #define OsExitLineEditMode() #endif /****************************************************************************** * * FUNCTION: AcpiOsInitialize, AcpiOsTerminate * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Initialize and terminate this module. * *****************************************************************************/ ACPI_STATUS AcpiOsInitialize ( void) { ACPI_STATUS Status; AcpiGbl_OutputFile = stdout; OsEnterLineEditMode (); Status = AcpiOsCreateLock (&AcpiGbl_PrintLock); if (ACPI_FAILURE (Status)) { return (Status); } return (AE_OK); } ACPI_STATUS AcpiOsTerminate ( void) { OsExitLineEditMode (); return (AE_OK); } #ifndef ACPI_USE_NATIVE_RSDP_POINTER /****************************************************************************** * * FUNCTION: AcpiOsGetRootPointer * * PARAMETERS: None * * RETURN: RSDP physical address * * DESCRIPTION: Gets the ACPI root pointer (RSDP) * *****************************************************************************/ ACPI_PHYSICAL_ADDRESS AcpiOsGetRootPointer ( void) { return (0); } #endif /****************************************************************************** * * FUNCTION: AcpiOsPredefinedOverride * * PARAMETERS: InitVal - Initial value of the predefined object * NewVal - The new value for the object * * RETURN: Status, pointer to value. Null pointer returned if not * overriding. * * DESCRIPTION: Allow the OS to override predefined names * *****************************************************************************/ ACPI_STATUS AcpiOsPredefinedOverride ( const ACPI_PREDEFINED_NAMES *InitVal, ACPI_STRING *NewVal) { if (!InitVal || !NewVal) { return (AE_BAD_PARAMETER); } *NewVal = NULL; return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiOsTableOverride * * PARAMETERS: ExistingTable - Header of current table (probably * firmware) * NewTable - Where an entire new table is returned. * * RETURN: Status, pointer to new table. Null pointer returned if no * table is available to override * * DESCRIPTION: Return a different version of a table if one is available * *****************************************************************************/ ACPI_STATUS AcpiOsTableOverride ( ACPI_TABLE_HEADER *ExistingTable, ACPI_TABLE_HEADER **NewTable) { if (!ExistingTable || !NewTable) { return (AE_BAD_PARAMETER); } *NewTable = NULL; #ifdef ACPI_EXEC_APP AeTableOverride (ExistingTable, NewTable); return (AE_OK); #else return (AE_NO_ACPI_TABLES); #endif } /****************************************************************************** * * FUNCTION: AcpiOsPhysicalTableOverride * * PARAMETERS: ExistingTable - Header of current table (probably firmware) * NewAddress - Where new table address is returned * (Physical address) * NewTableLength - Where new table length is returned * * RETURN: Status, address/length of new table. Null pointer returned * if no table is available to override. * * DESCRIPTION: Returns AE_SUPPORT, function not used in user space. * *****************************************************************************/ ACPI_STATUS AcpiOsPhysicalTableOverride ( ACPI_TABLE_HEADER *ExistingTable, ACPI_PHYSICAL_ADDRESS *NewAddress, UINT32 *NewTableLength) { return (AE_SUPPORT); } /****************************************************************************** * * FUNCTION: AcpiOsEnterSleep * * PARAMETERS: SleepState - Which sleep state to enter * RegaValue - Register A value * RegbValue - Register B value * * RETURN: Status * * DESCRIPTION: A hook before writing sleep registers to enter the sleep * state. Return AE_CTRL_TERMINATE to skip further sleep register * writes. * *****************************************************************************/ ACPI_STATUS AcpiOsEnterSleep ( UINT8 SleepState, UINT32 RegaValue, UINT32 RegbValue) { return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiOsRedirectOutput * * PARAMETERS: Destination - An open file handle/pointer * * RETURN: None * * DESCRIPTION: Causes redirect of AcpiOsPrintf and AcpiOsVprintf * *****************************************************************************/ void AcpiOsRedirectOutput ( void *Destination) { AcpiGbl_OutputFile = Destination; } /****************************************************************************** * * FUNCTION: AcpiOsPrintf * * PARAMETERS: fmt, ... - Standard printf format * * RETURN: None * * DESCRIPTION: Formatted output. Note: very similar to AcpiOsVprintf * (performance), changes should be tracked in both functions. * *****************************************************************************/ void ACPI_INTERNAL_VAR_XFACE AcpiOsPrintf ( const char *Fmt, ...) { va_list Args; UINT8 Flags; Flags = AcpiGbl_DbOutputFlags; if (Flags & ACPI_DB_REDIRECTABLE_OUTPUT) { /* Output is directable to either a file (if open) or the console */ if (AcpiGbl_DebugFile) { /* Output file is open, send the output there */ va_start (Args, Fmt); vfprintf (AcpiGbl_DebugFile, Fmt, Args); va_end (Args); } else { /* No redirection, send output to console (once only!) */ Flags |= ACPI_DB_CONSOLE_OUTPUT; } } if (Flags & ACPI_DB_CONSOLE_OUTPUT) { va_start (Args, Fmt); vfprintf (AcpiGbl_OutputFile, Fmt, Args); va_end (Args); } } /****************************************************************************** * * FUNCTION: AcpiOsVprintf * * PARAMETERS: fmt - Standard printf format * args - Argument list * * RETURN: None * * DESCRIPTION: Formatted output with argument list pointer. Note: very * similar to AcpiOsPrintf, changes should be tracked in both * functions. * *****************************************************************************/ void AcpiOsVprintf ( const char *Fmt, va_list Args) { UINT8 Flags; char Buffer[ACPI_VPRINTF_BUFFER_SIZE]; /* * We build the output string in a local buffer because we may be * outputting the buffer twice. Using vfprintf is problematic because * some implementations modify the args pointer/structure during * execution. Thus, we use the local buffer for portability. * * Note: Since this module is intended for use by the various ACPICA * utilities/applications, we can safely declare the buffer on the stack. * Also, This function is used for relatively small error messages only. */ vsnprintf (Buffer, ACPI_VPRINTF_BUFFER_SIZE, Fmt, Args); Flags = AcpiGbl_DbOutputFlags; if (Flags & ACPI_DB_REDIRECTABLE_OUTPUT) { /* Output is directable to either a file (if open) or the console */ if (AcpiGbl_DebugFile) { /* Output file is open, send the output there */ fputs (Buffer, AcpiGbl_DebugFile); } else { /* No redirection, send output to console (once only!) */ Flags |= ACPI_DB_CONSOLE_OUTPUT; } } if (Flags & ACPI_DB_CONSOLE_OUTPUT) { fputs (Buffer, AcpiGbl_OutputFile); } } #ifndef ACPI_EXEC_APP /****************************************************************************** * * FUNCTION: AcpiOsGetLine * * PARAMETERS: Buffer - Where to return the command line * BufferLength - Maximum length of Buffer * BytesRead - Where the actual byte count is returned * * RETURN: Status and actual bytes read * * DESCRIPTION: Get the next input line from the terminal. NOTE: For the * AcpiExec utility, we use the acgetline module instead to * provide line-editing and history support. * *****************************************************************************/ ACPI_STATUS AcpiOsGetLine ( char *Buffer, UINT32 BufferLength, UINT32 *BytesRead) { int InputChar; UINT32 EndOfLine; /* Standard AcpiOsGetLine for all utilities except AcpiExec */ for (EndOfLine = 0; ; EndOfLine++) { if (EndOfLine >= BufferLength) { return (AE_BUFFER_OVERFLOW); } if ((InputChar = getchar ()) == EOF) { return (AE_ERROR); } if (!InputChar || InputChar == _ASCII_NEWLINE) { break; } Buffer[EndOfLine] = (char) InputChar; } /* Null terminate the buffer */ Buffer[EndOfLine] = 0; /* Return the number of bytes in the string */ if (BytesRead) { *BytesRead = EndOfLine; } return (AE_OK); } #endif #ifndef ACPI_USE_NATIVE_MEMORY_MAPPING /****************************************************************************** * * FUNCTION: AcpiOsMapMemory * * PARAMETERS: where - Physical address of memory to be mapped * length - How much memory to map * * RETURN: Pointer to mapped memory. Null on error. * * DESCRIPTION: Map physical memory into caller's address space * *****************************************************************************/ void * AcpiOsMapMemory ( ACPI_PHYSICAL_ADDRESS where, ACPI_SIZE length) { return (ACPI_TO_POINTER ((ACPI_SIZE) where)); } /****************************************************************************** * * FUNCTION: AcpiOsUnmapMemory * * PARAMETERS: where - Logical address of memory to be unmapped * length - How much memory to unmap * * RETURN: None. * * DESCRIPTION: Delete a previously created mapping. Where and Length must * correspond to a previous mapping exactly. * *****************************************************************************/ void AcpiOsUnmapMemory ( void *where, ACPI_SIZE length) { return; } #endif /****************************************************************************** * * FUNCTION: AcpiOsAllocate * * PARAMETERS: Size - Amount to allocate, in bytes * * RETURN: Pointer to the new allocation. Null on error. * * DESCRIPTION: Allocate memory. Algorithm is dependent on the OS. * *****************************************************************************/ void * AcpiOsAllocate ( ACPI_SIZE size) { void *Mem; Mem = (void *) malloc ((size_t) size); return (Mem); } #ifdef USE_NATIVE_ALLOCATE_ZEROED /****************************************************************************** * * FUNCTION: AcpiOsAllocateZeroed * * PARAMETERS: Size - Amount to allocate, in bytes * * RETURN: Pointer to the new allocation. Null on error. * * DESCRIPTION: Allocate and zero memory. Algorithm is dependent on the OS. * *****************************************************************************/ void * AcpiOsAllocateZeroed ( ACPI_SIZE size) { void *Mem; Mem = (void *) calloc (1, (size_t) size); return (Mem); } #endif /****************************************************************************** * * FUNCTION: AcpiOsFree * * PARAMETERS: mem - Pointer to previously allocated memory * * RETURN: None. * * DESCRIPTION: Free memory allocated via AcpiOsAllocate * *****************************************************************************/ void AcpiOsFree ( void *mem) { free (mem); } #ifdef ACPI_SINGLE_THREADED /****************************************************************************** * * FUNCTION: Semaphore stub functions * * DESCRIPTION: Stub functions used for single-thread applications that do * not require semaphore synchronization. Full implementations * of these functions appear after the stubs. * *****************************************************************************/ ACPI_STATUS AcpiOsCreateSemaphore ( UINT32 MaxUnits, UINT32 InitialUnits, ACPI_HANDLE *OutHandle) { *OutHandle = (ACPI_HANDLE) 1; return (AE_OK); } ACPI_STATUS AcpiOsDeleteSemaphore ( ACPI_HANDLE Handle) { return (AE_OK); } ACPI_STATUS AcpiOsWaitSemaphore ( ACPI_HANDLE Handle, UINT32 Units, UINT16 Timeout) { return (AE_OK); } ACPI_STATUS AcpiOsSignalSemaphore ( ACPI_HANDLE Handle, UINT32 Units) { return (AE_OK); } #else /****************************************************************************** * * FUNCTION: AcpiOsCreateSemaphore * * PARAMETERS: InitialUnits - Units to be assigned to the new semaphore * OutHandle - Where a handle will be returned * * RETURN: Status * * DESCRIPTION: Create an OS semaphore * *****************************************************************************/ ACPI_STATUS AcpiOsCreateSemaphore ( UINT32 MaxUnits, UINT32 InitialUnits, ACPI_HANDLE *OutHandle) { sem_t *Sem; if (!OutHandle) { return (AE_BAD_PARAMETER); } #ifdef __APPLE__ { static int SemaphoreCount = 0; char SemaphoreName[32]; snprintf (SemaphoreName, sizeof (SemaphoreName), "acpi_sem_%d", SemaphoreCount++); printf ("%s\n", SemaphoreName); Sem = sem_open (SemaphoreName, O_EXCL|O_CREAT, 0755, InitialUnits); if (!Sem) { return (AE_NO_MEMORY); } sem_unlink (SemaphoreName); /* This just deletes the name */ } #else Sem = AcpiOsAllocate (sizeof (sem_t)); if (!Sem) { return (AE_NO_MEMORY); } if (sem_init (Sem, 0, InitialUnits) == -1) { AcpiOsFree (Sem); return (AE_BAD_PARAMETER); } #endif *OutHandle = (ACPI_HANDLE) Sem; return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiOsDeleteSemaphore * * PARAMETERS: Handle - Handle returned by AcpiOsCreateSemaphore * * RETURN: Status * * DESCRIPTION: Delete an OS semaphore * *****************************************************************************/ ACPI_STATUS AcpiOsDeleteSemaphore ( ACPI_HANDLE Handle) { sem_t *Sem = (sem_t *) Handle; if (!Sem) { return (AE_BAD_PARAMETER); } #ifdef __APPLE__ if (sem_close (Sem) == -1) { return (AE_BAD_PARAMETER); } #else if (sem_destroy (Sem) == -1) { return (AE_BAD_PARAMETER); } #endif return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiOsWaitSemaphore * * PARAMETERS: Handle - Handle returned by AcpiOsCreateSemaphore * Units - How many units to wait for * MsecTimeout - How long to wait (milliseconds) * * RETURN: Status * * DESCRIPTION: Wait for units * *****************************************************************************/ ACPI_STATUS AcpiOsWaitSemaphore ( ACPI_HANDLE Handle, UINT32 Units, UINT16 MsecTimeout) { ACPI_STATUS Status = AE_OK; sem_t *Sem = (sem_t *) Handle; int RetVal; #ifndef ACPI_USE_ALTERNATE_TIMEOUT struct timespec Time; #endif if (!Sem) { return (AE_BAD_PARAMETER); } switch (MsecTimeout) { /* * No Wait: * -------- * A zero timeout value indicates that we shouldn't wait - just * acquire the semaphore if available otherwise return AE_TIME * (a.k.a. 'would block'). */ case 0: if (sem_trywait(Sem) == -1) { Status = (AE_TIME); } break; /* Wait Indefinitely */ case ACPI_WAIT_FOREVER: while (((RetVal = sem_wait (Sem)) == -1) && (errno == EINTR)) { continue; /* Restart if interrupted */ } if (RetVal != 0) { Status = (AE_TIME); } break; /* Wait with MsecTimeout */ default: #ifdef ACPI_USE_ALTERNATE_TIMEOUT /* * Alternate timeout mechanism for environments where * sem_timedwait is not available or does not work properly. */ while (MsecTimeout) { if (sem_trywait (Sem) == 0) { /* Got the semaphore */ return (AE_OK); } if (MsecTimeout >= 10) { MsecTimeout -= 10; usleep (10 * ACPI_USEC_PER_MSEC); /* ten milliseconds */ } else { MsecTimeout--; usleep (ACPI_USEC_PER_MSEC); /* one millisecond */ } } Status = (AE_TIME); #else /* * The interface to sem_timedwait is an absolute time, so we need to * get the current time, then add in the millisecond Timeout value. */ if (clock_gettime (CLOCK_REALTIME, &Time) == -1) { perror ("clock_gettime"); return (AE_TIME); } Time.tv_sec += (MsecTimeout / ACPI_MSEC_PER_SEC); Time.tv_nsec += ((MsecTimeout % ACPI_MSEC_PER_SEC) * ACPI_NSEC_PER_MSEC); /* Handle nanosecond overflow (field must be less than one second) */ if (Time.tv_nsec >= ACPI_NSEC_PER_SEC) { Time.tv_sec += (Time.tv_nsec / ACPI_NSEC_PER_SEC); Time.tv_nsec = (Time.tv_nsec % ACPI_NSEC_PER_SEC); } while (((RetVal = sem_timedwait (Sem, &Time)) == -1) && (errno == EINTR)) { continue; /* Restart if interrupted */ } if (RetVal != 0) { if (errno != ETIMEDOUT) { perror ("sem_timedwait"); } Status = (AE_TIME); } #endif break; } return (Status); } /****************************************************************************** * * FUNCTION: AcpiOsSignalSemaphore * * PARAMETERS: Handle - Handle returned by AcpiOsCreateSemaphore * Units - Number of units to send * * RETURN: Status * * DESCRIPTION: Send units * *****************************************************************************/ ACPI_STATUS AcpiOsSignalSemaphore ( ACPI_HANDLE Handle, UINT32 Units) { sem_t *Sem = (sem_t *)Handle; if (!Sem) { return (AE_BAD_PARAMETER); } if (sem_post (Sem) == -1) { return (AE_LIMIT); } return (AE_OK); } #endif /* ACPI_SINGLE_THREADED */ /****************************************************************************** * * FUNCTION: Spinlock interfaces * * DESCRIPTION: Map these interfaces to semaphore interfaces * *****************************************************************************/ ACPI_STATUS AcpiOsCreateLock ( ACPI_SPINLOCK *OutHandle) { return (AcpiOsCreateSemaphore (1, 1, OutHandle)); } void AcpiOsDeleteLock ( ACPI_SPINLOCK Handle) { AcpiOsDeleteSemaphore (Handle); } ACPI_CPU_FLAGS AcpiOsAcquireLock ( ACPI_HANDLE Handle) { AcpiOsWaitSemaphore (Handle, 1, 0xFFFF); return (0); } void AcpiOsReleaseLock ( ACPI_SPINLOCK Handle, ACPI_CPU_FLAGS Flags) { AcpiOsSignalSemaphore (Handle, 1); } /****************************************************************************** * * FUNCTION: AcpiOsInstallInterruptHandler * * PARAMETERS: InterruptNumber - Level handler should respond to. * Isr - Address of the ACPI interrupt handler * ExceptPtr - Where status is returned * * RETURN: Handle to the newly installed handler. * * DESCRIPTION: Install an interrupt handler. Used to install the ACPI * OS-independent handler. * *****************************************************************************/ UINT32 AcpiOsInstallInterruptHandler ( UINT32 InterruptNumber, ACPI_OSD_HANDLER ServiceRoutine, void *Context) { return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiOsRemoveInterruptHandler * * PARAMETERS: Handle - Returned when handler was installed * * RETURN: Status * * DESCRIPTION: Uninstalls an interrupt handler. * *****************************************************************************/ ACPI_STATUS AcpiOsRemoveInterruptHandler ( UINT32 InterruptNumber, ACPI_OSD_HANDLER ServiceRoutine) { return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiOsStall * * PARAMETERS: microseconds - Time to sleep * * RETURN: Blocks until sleep is completed. * * DESCRIPTION: Sleep at microsecond granularity * *****************************************************************************/ void AcpiOsStall ( UINT32 microseconds) { if (microseconds) { usleep (microseconds); } } /****************************************************************************** * * FUNCTION: AcpiOsSleep * * PARAMETERS: milliseconds - Time to sleep * * RETURN: Blocks until sleep is completed. * * DESCRIPTION: Sleep at millisecond granularity * *****************************************************************************/ void AcpiOsSleep ( UINT64 milliseconds) { /* Sleep for whole seconds */ sleep (milliseconds / ACPI_MSEC_PER_SEC); /* * Sleep for remaining microseconds. * Arg to usleep() is in usecs and must be less than 1,000,000 (1 second). */ usleep ((milliseconds % ACPI_MSEC_PER_SEC) * ACPI_USEC_PER_MSEC); } /****************************************************************************** * * FUNCTION: AcpiOsGetTimer * * PARAMETERS: None * * RETURN: Current time in 100 nanosecond units * * DESCRIPTION: Get the current system time * *****************************************************************************/ UINT64 AcpiOsGetTimer ( void) { struct timeval time; /* This timer has sufficient resolution for user-space application code */ gettimeofday (&time, NULL); /* (Seconds * 10^7 = 100ns(10^-7)) + (Microseconds(10^-6) * 10^1 = 100ns) */ return (((UINT64) time.tv_sec * ACPI_100NSEC_PER_SEC) + ((UINT64) time.tv_usec * ACPI_100NSEC_PER_USEC)); } /****************************************************************************** * * FUNCTION: AcpiOsReadPciConfiguration * * PARAMETERS: PciId - Seg/Bus/Dev * PciRegister - Device Register * Value - Buffer where value is placed * Width - Number of bits * * RETURN: Status * * DESCRIPTION: Read data from PCI configuration space * *****************************************************************************/ ACPI_STATUS AcpiOsReadPciConfiguration ( ACPI_PCI_ID *PciId, UINT32 PciRegister, UINT64 *Value, UINT32 Width) { *Value = 0; return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiOsWritePciConfiguration * * PARAMETERS: PciId - Seg/Bus/Dev * PciRegister - Device Register * Value - Value to be written * Width - Number of bits * * RETURN: Status. * * DESCRIPTION: Write data to PCI configuration space * *****************************************************************************/ ACPI_STATUS AcpiOsWritePciConfiguration ( ACPI_PCI_ID *PciId, UINT32 PciRegister, UINT64 Value, UINT32 Width) { return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiOsReadPort * * PARAMETERS: Address - Address of I/O port/register to read * Value - Where value is placed * Width - Number of bits * * RETURN: Value read from port * * DESCRIPTION: Read data from an I/O port or register * *****************************************************************************/ ACPI_STATUS AcpiOsReadPort ( ACPI_IO_ADDRESS Address, UINT32 *Value, UINT32 Width) { switch (Width) { case 8: *Value = 0xFF; break; case 16: *Value = 0xFFFF; break; case 32: *Value = 0xFFFFFFFF; break; default: return (AE_BAD_PARAMETER); } return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiOsWritePort * * PARAMETERS: Address - Address of I/O port/register to write * Value - Value to write * Width - Number of bits * * RETURN: None * * DESCRIPTION: Write data to an I/O port or register * *****************************************************************************/ ACPI_STATUS AcpiOsWritePort ( ACPI_IO_ADDRESS Address, UINT32 Value, UINT32 Width) { return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiOsReadMemory * * PARAMETERS: Address - Physical Memory Address to read * Value - Where value is placed * Width - Number of bits (8,16,32, or 64) * * RETURN: Value read from physical memory address. Always returned * as a 64-bit integer, regardless of the read width. * * DESCRIPTION: Read data from a physical memory address * *****************************************************************************/ ACPI_STATUS AcpiOsReadMemory ( ACPI_PHYSICAL_ADDRESS Address, UINT64 *Value, UINT32 Width) { switch (Width) { case 8: case 16: case 32: case 64: *Value = 0; break; default: return (AE_BAD_PARAMETER); } return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiOsWriteMemory * * PARAMETERS: Address - Physical Memory Address to write * Value - Value to write * Width - Number of bits (8,16,32, or 64) * * RETURN: None * * DESCRIPTION: Write data to a physical memory address * *****************************************************************************/ ACPI_STATUS AcpiOsWriteMemory ( ACPI_PHYSICAL_ADDRESS Address, UINT64 Value, UINT32 Width) { return (AE_OK); } /****************************************************************************** * * FUNCTION: AcpiOsReadable * * PARAMETERS: Pointer - Area to be verified * Length - Size of area * * RETURN: TRUE if readable for entire length * * DESCRIPTION: Verify that a pointer is valid for reading * *****************************************************************************/ BOOLEAN AcpiOsReadable ( void *Pointer, ACPI_SIZE Length) { return (TRUE); } /****************************************************************************** * * FUNCTION: AcpiOsWritable * * PARAMETERS: Pointer - Area to be verified * Length - Size of area * * RETURN: TRUE if writable for entire length * * DESCRIPTION: Verify that a pointer is valid for writing * *****************************************************************************/ BOOLEAN AcpiOsWritable ( void *Pointer, ACPI_SIZE Length) { return (TRUE); } /****************************************************************************** * * FUNCTION: AcpiOsSignal * * PARAMETERS: Function - ACPI A signal function code * Info - Pointer to function-dependent structure * * RETURN: Status * * DESCRIPTION: Miscellaneous functions. Example implementation only. * *****************************************************************************/ ACPI_STATUS AcpiOsSignal ( UINT32 Function, void *Info) { switch (Function) { case ACPI_SIGNAL_FATAL: break; case ACPI_SIGNAL_BREAKPOINT: break; default: break; } return (AE_OK); } /* Optional multi-thread support */ #ifndef ACPI_SINGLE_THREADED /****************************************************************************** * * FUNCTION: AcpiOsGetThreadId * * PARAMETERS: None * * RETURN: Id of the running thread * * DESCRIPTION: Get the ID of the current (running) thread * *****************************************************************************/ ACPI_THREAD_ID AcpiOsGetThreadId ( void) { pthread_t thread; thread = pthread_self(); return (ACPI_CAST_PTHREAD_T (thread)); } /****************************************************************************** * * FUNCTION: AcpiOsExecute * * PARAMETERS: Type - Type of execution * Function - Address of the function to execute * Context - Passed as a parameter to the function * * RETURN: Status. * * DESCRIPTION: Execute a new thread * *****************************************************************************/ ACPI_STATUS AcpiOsExecute ( ACPI_EXECUTE_TYPE Type, ACPI_OSD_EXEC_CALLBACK Function, void *Context) { pthread_t thread; int ret; ret = pthread_create (&thread, NULL, (PTHREAD_CALLBACK) Function, Context); if (ret) { AcpiOsPrintf("Create thread failed"); } return (0); } #else /* ACPI_SINGLE_THREADED */ ACPI_THREAD_ID AcpiOsGetThreadId ( void) { return (1); } ACPI_STATUS AcpiOsExecute ( ACPI_EXECUTE_TYPE Type, ACPI_OSD_EXEC_CALLBACK Function, void *Context) { Function (Context); return (AE_OK); } #endif /* ACPI_SINGLE_THREADED */ /****************************************************************************** * * FUNCTION: AcpiOsWaitEventsComplete * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Wait for all asynchronous events to complete. This * implementation does nothing. * *****************************************************************************/ void AcpiOsWaitEventsComplete ( void) { return; } src/acpica/source/tools/000077500000000000000000000000001465205512700155345ustar00rootroot00000000000000src/acpica/source/tools/acpiexec/000077500000000000000000000000001465205512700173155ustar00rootroot00000000000000src/acpica/source/tools/acpiexec/aecommon.h000066400000000000000000000320301465205512700212620ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aecommon - common include for the AcpiExec utility * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #ifndef _AECOMMON #define _AECOMMON #ifdef _MSC_VER /* disable some level-4 warnings */ #pragma warning(disable:4100) /* warning C4100: unreferenced formal parameter */ #endif #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acnamesp.h" #include "acdebug.h" #include "actables.h" #include "acinterp.h" #include "amlresrc.h" #include "acapps.h" /* * Debug Regions */ typedef struct ae_region { ACPI_PHYSICAL_ADDRESS Address; UINT32 Length; void *Buffer; void *NextRegion; UINT8 SpaceId; } AE_REGION; typedef struct ae_debug_regions { UINT32 NumberOfRegions; AE_REGION *RegionList; } AE_DEBUG_REGIONS; /* * Init file entry */ typedef struct init_file_entry { char *Name; char *Value; ACPI_OPERAND_OBJECT *ObjDesc; BOOLEAN IsUsed; } INIT_FILE_ENTRY; extern BOOLEAN AcpiGbl_UseLocalFaultHandler; extern BOOLEAN AcpiGbl_VerboseHandlers; extern BOOLEAN AcpiGbl_IgnoreErrors; extern BOOLEAN AcpiGbl_AbortLoopOnTimeout; extern UINT8 AcpiGbl_RegionFillValue; extern INIT_FILE_ENTRY *AcpiGbl_InitEntries; extern UINT32 AcpiGbl_InitFileLineCount; extern UINT8 AcpiGbl_UseHwReducedFadt; extern BOOLEAN AcpiGbl_DisplayRegionAccess; extern BOOLEAN AcpiGbl_DoInterfaceTests; extern BOOLEAN AcpiGbl_LoadTestTables; extern FILE *AcpiGbl_NamespaceInitFile; extern ACPI_CONNECTION_INFO AeMyContext; extern UINT8 Ssdt2Code[]; extern UINT8 Ssdt3Code[]; extern UINT8 Ssdt4Code[]; #define TEST_OUTPUT_LEVEL(lvl) if ((lvl) & OutputLevel) #define OSD_PRINT(lvl,fp) TEST_OUTPUT_LEVEL(lvl) {\ AcpiOsPrintf PARAM_LIST(fp);} #define AE_PREFIX "ACPI Exec: " void ACPI_SYSTEM_XFACE AeSignalHandler ( int Sig); ACPI_STATUS AeExceptionHandler ( ACPI_STATUS AmlStatus, ACPI_NAME Name, UINT16 Opcode, UINT32 AmlOffset, void *Context); ACPI_STATUS AeBuildLocalTables ( ACPI_NEW_TABLE_DESC *TableList); ACPI_STATUS AeInstallTables ( void); ACPI_STATUS AeLoadTables ( void); void AeDumpNamespace ( void); void AeDumpObject ( char *MethodName, ACPI_BUFFER *ReturnObj); void AeDumpBuffer ( UINT32 Address); void AeExecute ( char *Name); void AeSetScope ( char *Name); void AeCloseDebugFile ( void); void AeOpenDebugFile ( char *Name); ACPI_STATUS AeDisplayAllMethods ( UINT32 DisplayCount); /* aetests */ void AeMiscellaneousTests ( void); void AeLateTest ( void); /* aeregion */ ACPI_STATUS AeRegionHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext); /* aeinstall */ ACPI_STATUS AeInstallDeviceHandlers ( void); void AeInstallRegionHandlers ( void); void AeOverrideRegionHandlers ( void); /* aehandlers */ ACPI_STATUS AeInstallEarlyHandlers ( void); ACPI_STATUS AeInstallLateHandlers ( void); UINT32 AeGpeHandler ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, void *Context); void AeGlobalEventHandler ( UINT32 Type, ACPI_HANDLE GpeDevice, UINT32 EventNumber, void *Context); /* aeinitfile */ int AeOpenInitializationFile ( char *Filename); ACPI_STATUS AeProcessInitFile ( void); ACPI_STATUS AeLookupInitFileEntry ( char *Pathname, ACPI_OPERAND_OBJECT **ObjDesc); void AeDisplayUnusedInitFileItems ( void); void AeDeleteInitFileList ( void); /* aeexec */ void AeTestBufferArgument ( void); void AeTestPackageArgument ( void); ACPI_STATUS AeGetDevices ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); ACPI_STATUS AeSetupConfiguration ( void *RegionAddr); ACPI_STATUS ExecuteOSI ( char *OsiString, UINT64 ExpectedResult); void AeGenericRegisters ( void); #if (!ACPI_REDUCED_HARDWARE) void AfInstallGpeBlock ( void); #endif /* !ACPI_REDUCED_HARDWARE */ #endif /* _AECOMMON */ src/acpica/source/tools/acpiexec/aeexception.c000066400000000000000000000404651465205512700217760ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aeexception - Exception and signal handlers * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aecommon.h" #define _COMPONENT ACPI_TOOLS ACPI_MODULE_NAME ("aeexception") /* Local prototypes */ static void AeDisplayMethodCallStack ( void); UINT32 SigintCount = 0; #define ACPI_MAX_CONTROL_C 5 /****************************************************************************** * * FUNCTION: AeExceptionHandler * * PARAMETERS: Standard exception handler parameters * * RETURN: Status * * DESCRIPTION: System exception handler for AcpiExec utility. Called from * the core ACPICA code after any exception during method * execution. * *****************************************************************************/ ACPI_STATUS AeExceptionHandler ( ACPI_STATUS AmlStatus, ACPI_NAME Name, UINT16 Opcode, UINT32 AmlOffset, void *Context) { ACPI_STATUS NewAmlStatus = AmlStatus; ACPI_STATUS Status; ACPI_BUFFER ReturnObj; ACPI_OBJECT_LIST ArgList; ACPI_OBJECT Arg[3]; const char *Exception; ACPI_HANDLE ErrHandle; Exception = AcpiFormatException (AmlStatus); if (AcpiGbl_VerboseHandlers) { AcpiOsPrintf (AE_PREFIX "Exception %s during execution\n", Exception); if (Name) { if (ACPI_COMPARE_NAMESEG (&Name, ACPI_ROOT_PATHNAME)) { AcpiOsPrintf (AE_PREFIX "Evaluating executable code at [%s]\n", ACPI_NAMESPACE_ROOT); } else { AcpiOsPrintf (AE_PREFIX "Evaluating Method or Node: [%4.4s]\n", (char *) &Name); } } /* Be terse about loop timeouts */ if ((AmlStatus == AE_AML_LOOP_TIMEOUT) && AcpiGbl_AbortLoopOnTimeout) { AcpiOsPrintf (AE_PREFIX "Aborting loop after timeout\n"); return (AE_OK); } AcpiOsPrintf ("\n" AE_PREFIX "AML Opcode [%s], Method Offset ~%5.5X\n", AcpiPsGetOpcodeName (Opcode), AmlOffset); } /* Invoke the _ERR method if present */ Status = AcpiGetHandle (NULL, "\\_ERR", &ErrHandle); if (ACPI_FAILURE (Status)) { goto Cleanup; } /* Setup parameter object */ ArgList.Count = 3; ArgList.Pointer = Arg; Arg[0].Type = ACPI_TYPE_INTEGER; Arg[0].Integer.Value = AmlStatus; Arg[1].Type = ACPI_TYPE_STRING; Arg[1].String.Pointer = ACPI_CAST_PTR (char, Exception); Arg[1].String.Length = strlen (Exception); Arg[2].Type = ACPI_TYPE_INTEGER; Arg[2].Integer.Value = AcpiOsGetThreadId(); /* Setup return buffer */ ReturnObj.Pointer = NULL; ReturnObj.Length = ACPI_ALLOCATE_BUFFER; Status = AcpiEvaluateObject (ErrHandle, NULL, &ArgList, &ReturnObj); if (ACPI_SUCCESS (Status)) { if (ReturnObj.Pointer) { /* Override original status */ NewAmlStatus = (ACPI_STATUS) ((ACPI_OBJECT *) ReturnObj.Pointer)->Integer.Value; /* Free a buffer created via ACPI_ALLOCATE_BUFFER */ AcpiOsFree (ReturnObj.Pointer); } } else if (Status != AE_NOT_FOUND) { AcpiOsPrintf (AE_PREFIX "Could not execute _ERR method, %s\n", AcpiFormatException (Status)); } Cleanup: if (AcpiGbl_IgnoreErrors) { /* Global option to ignore all method errors, just return OK */ NewAmlStatus = AE_OK; } if (NewAmlStatus != AmlStatus) { /* Request to override actual status with a different status */ AcpiOsPrintf (AE_PREFIX "Exception override, new status %s\n\n", AcpiFormatException (NewAmlStatus)); } return (NewAmlStatus); } /****************************************************************************** * * FUNCTION: AeSignalHandler * * PARAMETERS: Sig * * RETURN: none * * DESCRIPTION: Master signal handler. Currently handles SIGINT (ctrl-c), * and SIGSEGV (Segment violation). * *****************************************************************************/ void ACPI_SYSTEM_XFACE AeSignalHandler ( int Sig) { fflush(stdout); AcpiOsPrintf ("\n" AE_PREFIX); switch (Sig) { case SIGINT: signal(Sig, SIG_IGN); AcpiOsPrintf ("\n"); /* Force exit on multiple control-c */ SigintCount++; if (SigintCount >= ACPI_MAX_CONTROL_C) { _exit (0); } /* Abort the application if there are no methods executing */ if (!AcpiGbl_MethodExecuting) { break; } /* * Abort the method(s). This will also dump the method call * stack so there is no need to do it here. The application * will then drop back into the debugger interface. */ AcpiGbl_AbortMethod = TRUE; AcpiOsPrintf (AE_PREFIX "Control Method Call Stack:\n"); signal (SIGINT, AeSignalHandler); return; case SIGSEGV: AcpiOsPrintf ("Segmentation Fault\n"); AeDisplayMethodCallStack (); break; default: AcpiOsPrintf ("Unknown Signal, %X\n", Sig); break; } /* Terminate application -- cleanup then exit */ AcpiOsPrintf (AE_PREFIX "Terminating\n"); (void) AcpiOsTerminate (); _exit (0); } /****************************************************************************** * * FUNCTION: AeDisplayMethodCallStack * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display current method call stack, if possible. * * NOTE: Currently only called from a SIGSEGV, so AcpiExec is about * to terminate. * *****************************************************************************/ static void AeDisplayMethodCallStack ( void) { ACPI_WALK_STATE *WalkState; ACPI_THREAD_STATE *ThreadList = AcpiGbl_CurrentWalkList; char *FullPathname = NULL; if (!AcpiGbl_MethodExecuting) { AcpiOsPrintf (AE_PREFIX "No method is executing\n"); return; } /* * Try to find the currently executing control method(s) * * Note: The following code may fault if the data structures are * in an indeterminate state when the interrupt occurs. However, * in practice, this works quite well and can provide very * valuable information. * * 1) Walk the global thread list */ while (ThreadList && (ThreadList->DescriptorType == ACPI_DESC_TYPE_STATE_THREAD)) { /* 2) Walk the walk state list for this thread */ WalkState = ThreadList->WalkStateList; while (WalkState && (WalkState->DescriptorType == ACPI_DESC_TYPE_WALK)) { /* An executing control method */ if (WalkState->MethodNode) { FullPathname = AcpiNsGetExternalPathname ( WalkState->MethodNode); AcpiOsPrintf (AE_PREFIX "Executing Method: %s\n", FullPathname); } /* Execution of a deferred opcode/node */ if (WalkState->DeferredNode) { FullPathname = AcpiNsGetExternalPathname ( WalkState->DeferredNode); AcpiOsPrintf (AE_PREFIX "Evaluating deferred node: %s\n", FullPathname); } /* Get the currently executing AML opcode */ if ((WalkState->Opcode != AML_INT_METHODCALL_OP) && FullPathname) { AcpiOsPrintf (AE_PREFIX "Current AML Opcode in %s: [%s]-0x%4.4X at %p\n", FullPathname, AcpiPsGetOpcodeName (WalkState->Opcode), WalkState->Opcode, WalkState->Aml); } if (FullPathname) { ACPI_FREE (FullPathname); FullPathname = NULL; } WalkState = WalkState->Next; } ThreadList = ThreadList->Next; } } src/acpica/source/tools/acpiexec/aehandlers.c000066400000000000000000000707041465205512700215770ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aehandlers - Various handlers for acpiexec * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aecommon.h" #define _COMPONENT ACPI_TOOLS ACPI_MODULE_NAME ("aehandlers") /* Local prototypes */ static void AeNotifyHandler1 ( ACPI_HANDLE Device, UINT32 Value, void *Context); static void AeNotifyHandler2 ( ACPI_HANDLE Device, UINT32 Value, void *Context); static void AeCommonNotifyHandler ( ACPI_HANDLE Device, UINT32 Value, UINT32 HandlerId); static void AeDeviceNotifyHandler ( ACPI_HANDLE Device, UINT32 Value, void *Context); static ACPI_STATUS AeTableHandler ( UINT32 Event, void *Table, void *Context); static void AeAttachedDataHandler ( ACPI_HANDLE Object, void *Data); static void AeAttachedDataHandler2 ( ACPI_HANDLE Object, void *Data); static UINT32 AeInterfaceHandler ( ACPI_STRING InterfaceName, UINT32 Supported); #if (!ACPI_REDUCED_HARDWARE) static UINT32 AeEventHandler ( void *Context); static UINT32 AeSciHandler ( void *Context); static char *TableEvents[] = { "LOAD", "UNLOAD", "INSTALL", "UNINSTALL", "UNKNOWN" }; #endif /* !ACPI_REDUCED_HARDWARE */ static AE_DEBUG_REGIONS AeRegions; /****************************************************************************** * * FUNCTION: AeNotifyHandler(s) * * PARAMETERS: Standard notify handler parameters * * RETURN: Status * * DESCRIPTION: Notify handlers for AcpiExec utility. Used by the ASL * test suite(s) to communicate errors and other information to * this utility via the Notify() operator. Tests notify handling * and multiple notify handler support. * *****************************************************************************/ static void AeNotifyHandler1 ( ACPI_HANDLE Device, UINT32 Value, void *Context) { AeCommonNotifyHandler (Device, Value, 1); } static void AeNotifyHandler2 ( ACPI_HANDLE Device, UINT32 Value, void *Context) { AeCommonNotifyHandler (Device, Value, 2); } static void AeCommonNotifyHandler ( ACPI_HANDLE Device, UINT32 Value, UINT32 HandlerId) { char *Type; Type = "Device"; if (Value <= ACPI_MAX_SYS_NOTIFY) { Type = "System"; } switch (Value) { #if 0 case 0: printf (AE_PREFIX "Method Error 0x%X: Results not equal\n", Value); if (AcpiGbl_DebugFile) { AcpiOsPrintf (AE_PREFIX "Method Error: Results not equal\n"); } break; case 1: printf (AE_PREFIX "Method Error: Incorrect numeric result\n"); if (AcpiGbl_DebugFile) { AcpiOsPrintf (AE_PREFIX "Method Error: Incorrect numeric result\n"); } break; case 2: printf (AE_PREFIX "Method Error: An operand was overwritten\n"); if (AcpiGbl_DebugFile) { AcpiOsPrintf (AE_PREFIX "Method Error: An operand was overwritten\n"); } break; #endif default: printf (AE_PREFIX "Handler %u: Received a %s Notify on [%4.4s] %p Value 0x%2.2X (%s)\n", HandlerId, Type, AcpiUtGetNodeName (Device), Device, Value, AcpiUtGetNotifyName (Value, ACPI_TYPE_ANY)); if (AcpiGbl_DebugFile) { AcpiOsPrintf (AE_PREFIX "Handler %u: Received a %s notify, Value 0x%2.2X\n", HandlerId, Type, Value); } (void) AcpiEvaluateObject (Device, "_NOT", NULL, NULL); break; } } /****************************************************************************** * * FUNCTION: AeSystemNotifyHandler * * PARAMETERS: Standard notify handler parameters * * RETURN: Status * * DESCRIPTION: System notify handler for AcpiExec utility. Used by the ASL * test suite(s) to communicate errors and other information to * this utility via the Notify() operator. * *****************************************************************************/ static void AeSystemNotifyHandler ( ACPI_HANDLE Device, UINT32 Value, void *Context) { printf (AE_PREFIX "Global: Received a System Notify on [%4.4s] %p Value 0x%2.2X (%s)\n", AcpiUtGetNodeName (Device), Device, Value, AcpiUtGetNotifyName (Value, ACPI_TYPE_ANY)); if (AcpiGbl_DebugFile) { AcpiOsPrintf (AE_PREFIX "Global: Received a System Notify, Value 0x%2.2X\n", Value); } (void) AcpiEvaluateObject (Device, "_NOT", NULL, NULL); } /****************************************************************************** * * FUNCTION: AeDeviceNotifyHandler * * PARAMETERS: Standard notify handler parameters * * RETURN: Status * * DESCRIPTION: Device notify handler for AcpiExec utility. Used by the ASL * test suite(s) to communicate errors and other information to * this utility via the Notify() operator. * *****************************************************************************/ static void AeDeviceNotifyHandler ( ACPI_HANDLE Device, UINT32 Value, void *Context) { printf (AE_PREFIX "Global: Received a Device Notify on [%4.4s] %p Value 0x%2.2X (%s)\n", AcpiUtGetNodeName (Device), Device, Value, AcpiUtGetNotifyName (Value, ACPI_TYPE_ANY)); if (AcpiGbl_DebugFile) { AcpiOsPrintf (AE_PREFIX "Global: Received a Device Notify, Value 0x%2.2X\n", Value); } (void) AcpiEvaluateObject (Device, "_NOT", NULL, NULL); } /****************************************************************************** * * FUNCTION: AeTableHandler * * PARAMETERS: Table handler * * RETURN: Status * * DESCRIPTION: System table handler for AcpiExec utility. * *****************************************************************************/ static ACPI_STATUS AeTableHandler ( UINT32 Event, void *Table, void *Context) { #if (!ACPI_REDUCED_HARDWARE) ACPI_STATUS Status; #endif /* !ACPI_REDUCED_HARDWARE */ if (Event > ACPI_NUM_TABLE_EVENTS) { Event = ACPI_NUM_TABLE_EVENTS; } #if (!ACPI_REDUCED_HARDWARE) /* Enable any GPEs associated with newly-loaded GPE methods */ Status = AcpiUpdateAllGpes (); ACPI_CHECK_OK (AcpiUpdateAllGpes, Status); printf (AE_PREFIX "Table Event %s, [%4.4s] %p\n", TableEvents[Event], ((ACPI_TABLE_HEADER *) Table)->Signature, Table); #endif /* !ACPI_REDUCED_HARDWARE */ return (AE_OK); } /****************************************************************************** * * FUNCTION: AeGpeHandler * * DESCRIPTION: Common GPE handler for acpiexec * *****************************************************************************/ UINT32 AeGpeHandler ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber, void *Context) { ACPI_NAMESPACE_NODE *DeviceNode = (ACPI_NAMESPACE_NODE *) GpeDevice; AcpiOsPrintf (AE_PREFIX "GPE Handler received GPE %02X (GPE block %4.4s)\n", GpeNumber, GpeDevice ? DeviceNode->Name.Ascii : "FADT"); return (ACPI_REENABLE_GPE); } /****************************************************************************** * * FUNCTION: AeGlobalEventHandler * * DESCRIPTION: Global GPE/Fixed event handler * *****************************************************************************/ void AeGlobalEventHandler ( UINT32 Type, ACPI_HANDLE Device, UINT32 EventNumber, void *Context) { char *TypeName; switch (Type) { case ACPI_EVENT_TYPE_GPE: TypeName = "GPE"; break; case ACPI_EVENT_TYPE_FIXED: TypeName = "FixedEvent"; break; default: TypeName = "UNKNOWN"; break; } AcpiOsPrintf (AE_PREFIX "Global Event Handler received: Type %s Number %.2X Dev %p\n", TypeName, EventNumber, Device); } /****************************************************************************** * * FUNCTION: AeAttachedDataHandler * * DESCRIPTION: Handler for deletion of nodes with attached data (attached via * AcpiAttachData) * *****************************************************************************/ static void AeAttachedDataHandler ( ACPI_HANDLE Object, void *Data) { ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Data); ACPI_FUNCTION_NAME (AeAttachedDataHandler1); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Received an attached data deletion at handler 1 on %4.4s\n", Node->Name.Ascii)); } /****************************************************************************** * * FUNCTION: AeAttachedDataHandler2 * * DESCRIPTION: Handler for deletion of nodes with attached data (attached via * AcpiAttachData) * *****************************************************************************/ static void AeAttachedDataHandler2 ( ACPI_HANDLE Object, void *Data) { ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Data); ACPI_FUNCTION_NAME (AeAttachedDataHandler2); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Received an attached data deletion at handler 2 on %4.4s\n", Node->Name.Ascii)); } /****************************************************************************** * * FUNCTION: AeInterfaceHandler * * DESCRIPTION: Handler for _OSI invocations * *****************************************************************************/ static UINT32 AeInterfaceHandler ( ACPI_STRING InterfaceName, UINT32 Supported) { ACPI_FUNCTION_NAME (AeInterfaceHandler); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Received _OSI (\"%s\"), is %ssupported\n", InterfaceName, Supported == 0 ? "not " : "")); return (Supported); } #if (!ACPI_REDUCED_HARDWARE) /****************************************************************************** * * FUNCTION: AeEventHandler, AeSciHandler * * DESCRIPTION: Handler for Fixed Events and SCIs * *****************************************************************************/ static UINT32 AeEventHandler ( void *Context) { return (0); } static UINT32 AeSciHandler ( void *Context) { AcpiOsPrintf (AE_PREFIX "Received an SCI at handler\n"); return (0); } #endif /* !ACPI_REDUCED_HARDWARE */ /******************************************************************************* * * FUNCTION: AeInstallSciHandler * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Install handler for SCIs. Exercise the code by doing an * install/remove/install. * ******************************************************************************/ static ACPI_STATUS AeInstallSciHandler ( void) { ACPI_STATUS Status; Status = AcpiInstallSciHandler (AeSciHandler, &AeMyContext); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not install an SCI handler (1)")); } Status = AcpiRemoveSciHandler (AeSciHandler); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not remove an SCI handler")); } Status = AcpiInstallSciHandler (AeSciHandler, &AeMyContext); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not install an SCI handler (2)")); } return (Status); } /****************************************************************************** * * FUNCTION: AeInstallLateHandlers * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Install handlers for the AcpiExec utility. * *****************************************************************************/ ACPI_STATUS AeInstallLateHandlers ( void) { ACPI_STATUS Status; ACPI_HANDLE Handle; Status = AcpiGetHandle (NULL, "\\_TZ.TZ1", &Handle); if (ACPI_SUCCESS (Status)) { Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler1); ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler2); ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); } Status = AcpiGetHandle (NULL, "\\_PR.CPU0", &Handle); if (ACPI_SUCCESS (Status)) { Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); } #if (!ACPI_REDUCED_HARDWARE) if (!AcpiGbl_ReducedHardware) { /* Install a user SCI handler */ Status = AeInstallSciHandler (); ACPI_CHECK_OK (AeInstallSciHandler, Status); /* Install some fixed event handlers */ Status = AcpiInstallFixedEventHandler ( ACPI_EVENT_GLOBAL, AeEventHandler, NULL); ACPI_CHECK_OK (AcpiInstallFixedEventHandler, Status); Status = AcpiInstallFixedEventHandler ( ACPI_EVENT_RTC, AeEventHandler, NULL); ACPI_CHECK_OK (AcpiInstallFixedEventHandler, Status); } #endif /* !ACPI_REDUCED_HARDWARE */ AeMyContext.Connection = NULL; AeMyContext.AccessLength = 0xA5; /* * We will install a handler for each EC device, directly under the EC * device definition. This is unlike the other handlers which we install * at the root node. Also install memory and I/O handlers at any PCI * devices. */ AeInstallDeviceHandlers (); /* * Install handlers for some of the "device driver" address spaces * such as SMBus, etc. */ AeInstallRegionHandlers (); return (AE_OK); } /****************************************************************************** * * FUNCTION: AeInstallEarlyHandlers * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Install handlers for the AcpiExec utility. * * Notes: Don't install handler for PCI_Config, we want to use the * default handler to exercise that code. * *****************************************************************************/ ACPI_STATUS AeInstallEarlyHandlers ( void) { ACPI_STATUS Status; ACPI_HANDLE Handle; ACPI_FUNCTION_ENTRY (); Status = AcpiInstallInterfaceHandler (AeInterfaceHandler); if (ACPI_FAILURE (Status)) { printf ("Could not install interface handler, %s\n", AcpiFormatException (Status)); } Status = AcpiInstallTableHandler (AeTableHandler, NULL); if (ACPI_FAILURE (Status)) { printf ("Could not install table handler, %s\n", AcpiFormatException (Status)); } Status = AcpiInstallExceptionHandler (AeExceptionHandler); if (ACPI_FAILURE (Status)) { printf ("Could not install exception handler, %s\n", AcpiFormatException (Status)); } /* Install global notify handlers */ Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY, AeSystemNotifyHandler, NULL); if (ACPI_FAILURE (Status)) { printf ("Could not install a global system notify handler, %s\n", AcpiFormatException (Status)); } Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, ACPI_DEVICE_NOTIFY, AeDeviceNotifyHandler, NULL); if (ACPI_FAILURE (Status)) { printf ("Could not install a global notify handler, %s\n", AcpiFormatException (Status)); } Status = AcpiGetHandle (NULL, "\\_SB", &Handle); if (ACPI_SUCCESS (Status)) { Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, AeNotifyHandler1, NULL); if (ACPI_FAILURE (Status)) { printf ("Could not install a notify handler, %s\n", AcpiFormatException (Status)); } Status = AcpiRemoveNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, AeNotifyHandler1); if (ACPI_FAILURE (Status)) { printf ("Could not remove a notify handler, %s\n", AcpiFormatException (Status)); } Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler1, NULL); ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status); Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler1); ACPI_CHECK_OK (AcpiRemoveNotifyHandler, Status); #if 0 Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler1, NULL); if (ACPI_FAILURE (Status)) { printf ("Could not install a notify handler, %s\n", AcpiFormatException (Status)); } #endif /* Install two handlers for _SB_ */ Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567)); ACPI_CHECK_OK(AcpiInstallNotifyHandler, Status); Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF)); ACPI_CHECK_OK(AcpiInstallNotifyHandler, Status); /* Attempt duplicate handler installation, should fail */ (void) AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, AeNotifyHandler1, ACPI_CAST_PTR (void, 0x77777777)); Status = AcpiAttachData (Handle, AeAttachedDataHandler, Handle); ACPI_CHECK_OK (AcpiAttachData, Status); Status = AcpiDetachData (Handle, AeAttachedDataHandler); ACPI_CHECK_OK (AcpiDetachData, Status); /* Test attach data at the root object */ Status = AcpiAttachData (ACPI_ROOT_OBJECT, AeAttachedDataHandler, AcpiGbl_RootNode); ACPI_CHECK_OK (AcpiAttachData, Status); Status = AcpiAttachData (ACPI_ROOT_OBJECT, AeAttachedDataHandler2, AcpiGbl_RootNode); ACPI_CHECK_OK (AcpiAttachData, Status); /* Test support for multiple attaches */ Status = AcpiAttachData (Handle, AeAttachedDataHandler, Handle); ACPI_CHECK_OK (AcpiAttachData, Status); Status = AcpiAttachData (Handle, AeAttachedDataHandler2, Handle); ACPI_CHECK_OK (AcpiAttachData, Status); } else { printf ("No _SB_ found, %s\n", AcpiFormatException (Status)); } /* * Install handlers that will override the default handlers for some of * the space IDs. */ AeOverrideRegionHandlers (); /* * Initialize the global Region Handler space * MCW 3/23/00 */ AeRegions.NumberOfRegions = 0; AeRegions.RegionList = NULL; return (AE_OK); } src/acpica/source/tools/acpiexec/aeinitfile.c000066400000000000000000000406051465205512700215770ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aeinitfile - Support for optional initialization file * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aecommon.h" #include "acdispat.h" #include "acnamesp.h" #define _COMPONENT ACPI_TOOLS ACPI_MODULE_NAME ("aeinitfile") #define AE_FILE_BUFFER_SIZE 512 static char LineBuffer[AE_FILE_BUFFER_SIZE]; static char NameBuffer[AE_FILE_BUFFER_SIZE]; static FILE *InitFile; /****************************************************************************** * * FUNCTION: AeOpenInitializationFile * * PARAMETERS: Filename - Path to the init file * * RETURN: Status * * DESCRIPTION: Open the initialization file for the -fi option * *****************************************************************************/ int AeOpenInitializationFile ( char *Filename) { InitFile = fopen (Filename, "r"); if (!InitFile) { fprintf (stderr, "Could not open initialization file: %s\n", Filename); return (-1); } AcpiOsPrintf ("Opened initialization file [%s]\n", Filename); return (0); } /****************************************************************************** * * FUNCTION: AeProcessInitFile * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Read the initialization file and perform all namespace * initializations. AcpiGbl_InitEntries will be used for all * object initialization. * * NOTE: The format of the file is multiple lines, each of format: * * *****************************************************************************/ ACPI_STATUS AeProcessInitFile ( void) { ACPI_WALK_STATE *WalkState; UINT64 idx; ACPI_STATUS Status = AE_OK; char *Token; char *ValueBuffer; char *TempNameBuffer; ACPI_OBJECT_TYPE Type; ACPI_OBJECT TempObject; if (!InitFile) { return (AE_OK); } /* Create needed objects to be reused for each init entry */ WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL); NameBuffer[0] = '\\'; NameBuffer[1] = 0; while (fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile) != NULL) { ++AcpiGbl_InitFileLineCount; } rewind (InitFile); /* * Allocate and populate the Gbl_InitEntries array */ AcpiGbl_InitEntries = AcpiOsAllocateZeroed (sizeof (INIT_FILE_ENTRY) * AcpiGbl_InitFileLineCount); for (idx = 0; fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile); ++idx) { TempNameBuffer = AcpiDbGetNextToken (LineBuffer, &Token, &Type); if (!TempNameBuffer) { AcpiGbl_InitEntries[idx].Name = NULL; continue; } if (LineBuffer[0] == '\\') { strcpy (NameBuffer, TempNameBuffer); } else { /* Add a root prefix if not present in the string */ strcpy (NameBuffer + 1, TempNameBuffer); } AcpiNsNormalizePathname (NameBuffer); AcpiGbl_InitEntries[idx].Name = AcpiOsAllocateZeroed (strnlen (NameBuffer, AE_FILE_BUFFER_SIZE) + 1); strcpy (AcpiGbl_InitEntries[idx].Name, NameBuffer); ValueBuffer = AcpiDbGetNextToken (Token, &Token, &Type); if (!ValueBuffer) { AcpiGbl_InitEntries[idx].Value = NULL; continue; } AcpiGbl_InitEntries[idx].Value = AcpiOsAllocateZeroed (strnlen (ValueBuffer, AE_FILE_BUFFER_SIZE) + 1); strcpy (AcpiGbl_InitEntries[idx].Value, ValueBuffer); if (Type == ACPI_TYPE_FIELD_UNIT) { Status = AcpiDbConvertToObject (ACPI_TYPE_BUFFER, ValueBuffer, &TempObject); } else { Status = AcpiDbConvertToObject (Type, ValueBuffer, &TempObject); } if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("%s[%s]: %s\n", NameBuffer, AcpiUtGetTypeName (Type), AcpiFormatException (Status)); goto CleanupAndExit; } Status = AcpiUtCopyEobjectToIobject (&TempObject, &AcpiGbl_InitEntries[idx].ObjDesc); /* Cleanup the external object created by DbConvertToObject above */ if (ACPI_SUCCESS (Status)) { if (Type == ACPI_TYPE_BUFFER || Type == ACPI_TYPE_FIELD_UNIT) { ACPI_FREE (TempObject.Buffer.Pointer); } else if (Type == ACPI_TYPE_PACKAGE) { AcpiDbDeleteObjects (1, &TempObject); } } else { AcpiOsPrintf ("%s[%s]: %s\n", NameBuffer, AcpiUtGetTypeName (Type), AcpiFormatException (Status)); goto CleanupAndExit; } /* * Initialize the namespace node with the value found in the init file. */ AcpiOsPrintf ("Namespace object init from file: %16s, Value \"%s\", Type %s\n", AcpiGbl_InitEntries[idx].Name, AcpiGbl_InitEntries[idx].Value, AcpiUtGetTypeName (Type)); } /* Cleanup */ CleanupAndExit: fclose (InitFile); AcpiDsDeleteWalkState (WalkState); return (Status); } /****************************************************************************** * * FUNCTION: AeLookupInitFileEntry * * PARAMETERS: Pathname - AML namepath in external format * ObjDesc - Where the object is returned if it exists * * RETURN: Status. AE_OK if a match was found * * DESCRIPTION: Search the init file for a particular name and its value. * *****************************************************************************/ ACPI_STATUS AeLookupInitFileEntry ( char *Pathname, ACPI_OPERAND_OBJECT **ObjDesc) { UINT32 i; ACPI_FUNCTION_TRACE (AeLookupInitFileEntry); ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Lookup: %s\n", Pathname)); if (!AcpiGbl_InitEntries) { return (AE_NOT_FOUND); } AcpiNsNormalizePathname (Pathname); for (i = 0; i < AcpiGbl_InitFileLineCount; ++i) { if (AcpiGbl_InitEntries[i].Name && !strcmp (AcpiGbl_InitEntries[i].Name, Pathname)) { *ObjDesc = AcpiGbl_InitEntries[i].ObjDesc; AcpiGbl_InitEntries[i].IsUsed = TRUE; ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Found match: %s, %p\n", Pathname, *ObjDesc)); return_ACPI_STATUS (AE_OK); } } ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "No match found: %s\n", Pathname)); return_ACPI_STATUS (AE_NOT_FOUND); } /****************************************************************************** * * FUNCTION: AeDisplayUnusedInitFileItems * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Display all init file items that have not been referenced * (i.e., items that have not been found in the namespace). * *****************************************************************************/ void AeDisplayUnusedInitFileItems ( void) { UINT32 i; if (!AcpiGbl_InitEntries) { return; } for (i = 0; i < AcpiGbl_InitFileLineCount; ++i) { if (AcpiGbl_InitEntries[i].Name && !AcpiGbl_InitEntries[i].IsUsed) { AcpiOsPrintf ("Init file entry not found in namespace " "(or is a non-data type): %s\n", AcpiGbl_InitEntries[i].Name); } } } /****************************************************************************** * * FUNCTION: AeDeleteInitFileList * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Delete the global namespace initialization file data * *****************************************************************************/ void AeDeleteInitFileList ( void) { UINT32 i; if (!AcpiGbl_InitEntries) { return; } for (i = 0; i < AcpiGbl_InitFileLineCount; ++i) { if ((AcpiGbl_InitEntries[i].ObjDesc) && (AcpiGbl_InitEntries[i].Value)) { /* Remove one reference on the object (and all subobjects) */ AcpiUtRemoveReference (AcpiGbl_InitEntries[i].ObjDesc); } } AcpiOsFree (AcpiGbl_InitEntries); } src/acpica/source/tools/acpiexec/aeinstall.c000066400000000000000000000462361465205512700214500ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aeinstall - Installation of operation region handlers * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aecommon.h" #define _COMPONENT ACPI_TOOLS ACPI_MODULE_NAME ("aeinstall") static ACPI_STATUS AeRegionInit ( ACPI_HANDLE RegionHandle, UINT32 Function, void *HandlerContext, void **RegionContext); static ACPI_STATUS AeInstallEcHandler ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); static ACPI_STATUS AeInstallPciHandler ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); static ACPI_STATUS AeInstallGedHandler ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue); BOOLEAN AcpiGbl_DisplayRegionAccess = FALSE; ACPI_CONNECTION_INFO AeMyContext; /* * We will override some of the default region handlers, especially * the SystemMemory handler, which must be implemented locally. * These handlers are installed "early" - before any _REG methods * are executed - since they are special in the sense that the ACPI spec * declares that they must "always be available". Cannot override the * DataTable region handler either -- needed for test execution. * * NOTE: The local region handler will simulate access to these address * spaces by creating a memory buffer behind each operation region. */ static ACPI_ADR_SPACE_TYPE DefaultSpaceIdList[] = { ACPI_ADR_SPACE_SYSTEM_MEMORY, ACPI_ADR_SPACE_SYSTEM_IO, ACPI_ADR_SPACE_PCI_CONFIG, ACPI_ADR_SPACE_EC }; /* * We will install handlers for some of the various address space IDs. * Test one user-defined address space (used by aslts). */ #define ACPI_ADR_SPACE_USER_DEFINED1 0x80 #define ACPI_ADR_SPACE_USER_DEFINED2 0xE4 static ACPI_ADR_SPACE_TYPE SpaceIdList[] = { ACPI_ADR_SPACE_SMBUS, ACPI_ADR_SPACE_CMOS, ACPI_ADR_SPACE_PCI_BAR_TARGET, ACPI_ADR_SPACE_IPMI, ACPI_ADR_SPACE_GPIO, ACPI_ADR_SPACE_GSBUS, ACPI_ADR_SPACE_PLATFORM_COMM, ACPI_ADR_SPACE_PLATFORM_RT, ACPI_ADR_SPACE_FIXED_HARDWARE, ACPI_ADR_SPACE_USER_DEFINED1, ACPI_ADR_SPACE_USER_DEFINED2 }; /****************************************************************************** * * FUNCTION: AeRegionInit * * PARAMETERS: Region init handler * * RETURN: Status * * DESCRIPTION: Opregion init function. * *****************************************************************************/ static ACPI_STATUS AeRegionInit ( ACPI_HANDLE RegionHandle, UINT32 Function, void *HandlerContext, void **RegionContext) { if (Function == ACPI_REGION_DEACTIVATE) { *RegionContext = NULL; } else { *RegionContext = RegionHandle; } return (AE_OK); } /****************************************************************************** * * FUNCTION: AeOverrideRegionHandlers * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Override the default region handlers for memory, i/o, and * pci_config. Also install a handler for EC. This is part of * the "install early handlers" functionality. * *****************************************************************************/ void AeOverrideRegionHandlers ( void) { UINT32 i; ACPI_STATUS Status; /* * Install handlers that will override the default handlers for some of * the space IDs. */ for (i = 0; i < ACPI_ARRAY_LENGTH (DefaultSpaceIdList); i++) { /* Install handler at the root object */ Status = AcpiInstallAddressSpaceHandler (ACPI_ROOT_OBJECT, DefaultSpaceIdList[i], AeRegionHandler, AeRegionInit, &AeMyContext); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not install an OpRegion handler for %s space(%u)", AcpiUtGetRegionName ((UINT8) DefaultSpaceIdList[i]), DefaultSpaceIdList[i])); } } } /****************************************************************************** * * FUNCTION: AeInstallRegionHandlers * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Install handlers for the address spaces other than * SystemMemory, SystemIO, and PCI_CONFIG. * *****************************************************************************/ void AeInstallRegionHandlers ( void) { UINT32 i; ACPI_STATUS Status; /* * Install handlers for some of the "device driver" address spaces * such as SMBus, etc. */ for (i = 0; i < ACPI_ARRAY_LENGTH (SpaceIdList); i++) { /* Install handler at the root object */ Status = AcpiInstallAddressSpaceHandler (ACPI_ROOT_OBJECT, SpaceIdList[i], AeRegionHandler, AeRegionInit, &AeMyContext); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not install an OpRegion handler for %s space(%u)", AcpiUtGetRegionName((UINT8) SpaceIdList[i]), SpaceIdList[i])); return; } } } /******************************************************************************* * * FUNCTION: AeInstallGedHandler * * PARAMETERS: ACPI_WALK_NAMESPACE callback * * RETURN: Status * * DESCRIPTION: Walk entire namespace, install a handler for every GED * device found. * ******************************************************************************/ static ACPI_STATUS AeInstallGedHandler ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_BUFFER ReturnBuffer; ACPI_STATUS Status; ACPI_RESOURCE *ResourceList; ACPI_RESOURCE_EXTENDED_IRQ *extended_irq_rsc; ACPI_NAMESPACE_NODE *Node; ACPI_NAMESPACE_NODE *EvtMethodNode; ACPI_FUNCTION_ENTRY(); /* Obtain the Namespace Node of this GED object handle. */ Node = AcpiNsValidateHandle (ObjHandle); if (!Node) { return (AE_BAD_PARAMETER); } /* * A GED device must have one _EVT method. * Obtain the _EVT method and store it in the global * GED register. */ Status = AcpiNsSearchOneScope ( *ACPI_CAST_PTR (ACPI_NAME, METHOD_NAME__EVT), Node, ACPI_TYPE_METHOD, &EvtMethodNode ); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Failed to obtain _EVT method for the GED device.\n"); return Status; } ReturnBuffer.Pointer = NULL; ReturnBuffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; Status = AcpiGetCurrentResources (ObjHandle, &ReturnBuffer); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n", AcpiFormatException (Status)); return Status; } /* Traverse the _CRS resource list */ ResourceList = ACPI_CAST_PTR (ACPI_RESOURCE, ReturnBuffer.Pointer); while (ResourceList->Type != ACPI_RESOURCE_TYPE_END_TAG) { switch (ResourceList->Type) { case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: { /* * Found an Interrupt resource. Link the interrupt resource * and the _EVT method of this GED device in the GED event handler list. */ ACPI_GED_HANDLER_INFO *GedHandler = ACPI_ALLOCATE (sizeof (ACPI_SCI_HANDLER_INFO)); if (!GedHandler) { return AE_NO_MEMORY; } GedHandler->Next = AcpiGbl_GedHandlerList; AcpiGbl_GedHandlerList = GedHandler; extended_irq_rsc = &ResourceList->Data.ExtendedIrq; GedHandler->IntId = extended_irq_rsc->Interrupts[0]; GedHandler->EvtMethod = EvtMethodNode; AcpiOsPrintf ("Interrupt ID %d\n", extended_irq_rsc->Interrupts[0]); break; } default: AcpiOsPrintf ("Resource type %X\n", ResourceList->Type); } ResourceList = ACPI_NEXT_RESOURCE (ResourceList); } return AE_OK; } /******************************************************************************* * * FUNCTION: AeInstallDeviceHandlers * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Install handlers for all EC, PCI and GED devices in the namespace * ******************************************************************************/ ACPI_STATUS AeInstallDeviceHandlers ( void) { /* Find all Embedded Controller devices */ AcpiGetDevices ("PNP0C09", AeInstallEcHandler, NULL, NULL); /* Install a PCI handler */ AcpiGetDevices ("PNP0A08", AeInstallPciHandler, NULL, NULL); /* Install a GED handler */ AcpiGetDevices ("ACPI0013", AeInstallGedHandler, NULL, NULL); return (AE_OK); } /******************************************************************************* * * FUNCTION: AeInstallEcHandler * * PARAMETERS: ACPI_WALK_NAMESPACE callback * * RETURN: Status * * DESCRIPTION: Walk entire namespace, install a handler for every EC * device found. * ******************************************************************************/ static ACPI_STATUS AeInstallEcHandler ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_STATUS Status; /* Install the handler for this EC device */ Status = AcpiInstallAddressSpaceHandler (ObjHandle, ACPI_ADR_SPACE_EC, AeRegionHandler, AeRegionInit, &AeMyContext); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not install an OpRegion handler for EC device (%p)", ObjHandle)); } return (Status); } /******************************************************************************* * * FUNCTION: AeInstallPciHandler * * PARAMETERS: ACPI_WALK_NAMESPACE callback * * RETURN: Status * * DESCRIPTION: Walk entire namespace, install a handler for every PCI * device found. * ******************************************************************************/ static ACPI_STATUS AeInstallPciHandler ( ACPI_HANDLE ObjHandle, UINT32 Level, void *Context, void **ReturnValue) { ACPI_STATUS Status; /* Install memory and I/O handlers for the PCI device */ Status = AcpiInstallAddressSpaceHandler (ObjHandle, ACPI_ADR_SPACE_SYSTEM_IO, AeRegionHandler, AeRegionInit, &AeMyContext); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not install an OpRegion handler for PCI device (%p)", ObjHandle)); } Status = AcpiInstallAddressSpaceHandler (ObjHandle, ACPI_ADR_SPACE_SYSTEM_MEMORY, AeRegionHandler, AeRegionInit, &AeMyContext); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not install an OpRegion handler for PCI device (%p)", ObjHandle)); } return (AE_CTRL_TERMINATE); } src/acpica/source/tools/acpiexec/aeregion.c000066400000000000000000000655231465205512700212650ustar00rootroot00000000000000/****************************************************************************** * * Module Name: aeregion - Handler for operation regions * *****************************************************************************/ /****************************************************************************** * * 1. Copyright Notice * * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. * All rights reserved. * * 2. License * * 2.1. This is your license from Intel Corp. under its intellectual property * rights. You may have additional license terms from the party that provided * you this software, covering your right to use that party's intellectual * property rights. * * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a * copy of the source code appearing in this file ("Covered Code") an * irrevocable, perpetual, worldwide license under Intel's copyrights in the * base code distributed originally by Intel ("Original Intel Code") to copy, * make derivatives, distribute, use and display any portion of the Covered * Code in any form, with the right to sublicense such rights; and * * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent * license (with the right to sublicense), under only those claims of Intel * patents that are infringed by the Original Intel Code, to make, use, sell, * offer to sell, and import the Covered Code and derivative works thereof * solely to the minimum extent necessary to exercise the above copyright * license, and in no event shall the patent license extend to any additions * to or modifications of the Original Intel Code. No other license or right * is granted directly or by implication, estoppel or otherwise; * * The above copyright and patent license is granted only if the following * conditions are met: * * 3. Conditions * * 3.1. Redistribution of Source with Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification with rights to further distribute source must include * the above Copyright Notice, the above License, this list of Conditions, * and the following Disclaimer and Export Compliance provision. In addition, * Licensee must cause all Covered Code to which Licensee contributes to * contain a file documenting the changes Licensee made to create that Covered * Code and the date of any change. Licensee must include in that file the * documentation of any changes made by any predecessor Licensee. Licensee * must include a prominent statement that the modification is derived, * directly or indirectly, from Original Intel Code. * * 3.2. Redistribution of Source with no Rights to Further Distribute Source. * Redistribution of source code of any substantial portion of the Covered * Code or modification without rights to further distribute source must * include the following Disclaimer and Export Compliance provision in the * documentation and/or other materials provided with distribution. In * addition, Licensee may not authorize further sublicense of source of any * portion of the Covered Code, and must include terms to the effect that the * license from Licensee to its licensee is limited to the intellectual * property embodied in the software Licensee provides to its licensee, and * not to intellectual property embodied in modifications its licensee may * make. * * 3.3. Redistribution of Executable. Redistribution in executable form of any * substantial portion of the Covered Code or modification must reproduce the * above Copyright Notice, and the following Disclaimer and Export Compliance * provision in the documentation and/or other materials provided with the * distribution. * * 3.4. Intel retains all right, title, and interest in and to the Original * Intel Code. * * 3.5. Neither the name Intel nor any other trademark owned or controlled by * Intel shall be used in advertising or otherwise to promote the sale, use or * other dealings in products derived from or relating to the Covered Code * without prior written authorization from Intel. * * 4. Disclaimer and Export Compliance * * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. * * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY * LIMITED REMEDY. * * 4.3. Licensee shall not export, either directly or indirectly, any of this * software or system incorporating such software without first obtaining any * required license or other approval from the U. S. Department of Commerce or * any other agency or department of the United States Government. In the * event Licensee exports any such software from the United States or * re-exports any such software from a foreign destination, Licensee shall * ensure that the distribution and export/re-export of the software is in * compliance with all laws, regulations, orders, or other restrictions of the * U.S. Export Administration Regulations. Licensee agrees that neither it nor * any of its subsidiaries will export/re-export any technical data, process, * software, or service, directly or indirectly, to any country for which the * United States government or any agency thereof requires an export license, * other governmental approval, or letter of assurance, without first obtaining * such license, approval or letter. * ***************************************************************************** * * Alternatively, you may choose to be licensed under the terms of the * following license: * * 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. * * 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 MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 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 DAMAGE. * * Alternatively, you may choose to be licensed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * *****************************************************************************/ #include "aecommon.h" #define _COMPONENT ACPI_TOOLS ACPI_MODULE_NAME ("aeregion") static AE_DEBUG_REGIONS AeRegions; /****************************************************************************** * * FUNCTION: AeRegionHandler * * PARAMETERS: Standard region handler parameters * * RETURN: Status * * DESCRIPTION: Test handler - Handles some dummy regions via memory that can * be manipulated in Ring 3. Simulates actual reads and writes. * *****************************************************************************/ ACPI_STATUS AeRegionHandler ( UINT32 Function, ACPI_PHYSICAL_ADDRESS Address, UINT32 BitWidth, UINT64 *Value, void *HandlerContext, void *RegionContext) { ACPI_OPERAND_OBJECT *RegionObject = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, RegionContext); UINT8 *Buffer = ACPI_CAST_PTR (UINT8, Value); UINT8 *OldBuffer; UINT8 *NewBuffer; ACPI_PHYSICAL_ADDRESS BaseAddress; ACPI_PHYSICAL_ADDRESS BaseAddressEnd; ACPI_PHYSICAL_ADDRESS RegionAddress; ACPI_PHYSICAL_ADDRESS RegionAddressEnd; UINT32 Length; UINT8 DataLength; UINT8 *DataBuffer; BOOLEAN BufferExists; BOOLEAN BufferResize; AE_REGION *RegionElement; void *BufferValue; ACPI_STATUS Status; UINT32 ByteWidth; UINT32 RegionLength; UINT32 i; UINT8 SpaceId; ACPI_CONNECTION_INFO *MyContext; UINT32 Value1; UINT32 Value2; ACPI_RESOURCE *Resource; char Uuid[ACPI_PRM_INPUT_BUFFER_SIZE + 1]; ACPI_FUNCTION_NAME (AeRegionHandler); /* If the object is not a region, simply return */ if (RegionObject->Region.Type != ACPI_TYPE_REGION) { return (AE_OK); } /* Check that we actually got back our context parameter */ if (HandlerContext != &AeMyContext) { AcpiOsPrintf ( "Region handler received incorrect context %p, should be %p\n", HandlerContext, &AeMyContext); } MyContext = ACPI_CAST_PTR (ACPI_CONNECTION_INFO, HandlerContext); /* * Find the region's address space and length before searching * the linked list. */ BaseAddress = RegionObject->Region.Address; Length = RegionObject->Region.Length; SpaceId = RegionObject->Region.SpaceId; ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Operation Region request on %s at 0x%X, BitWidth 0x%X, RegionLength 0x%X\n", AcpiUtGetRegionName (RegionObject->Region.SpaceId), (UINT32) Address, BitWidth, (UINT32) Length)); /* * Region support can be disabled with the -do option. * We use this to support dynamically loaded tables where we pass a valid * address to the AML. */ if (AcpiGbl_DbOpt_NoRegionSupport) { BufferValue = ACPI_TO_POINTER (Address); ByteWidth = (BitWidth / 8); if (BitWidth % 8) { ByteWidth += 1; } goto DoFunction; } switch (SpaceId) { case ACPI_ADR_SPACE_SYSTEM_IO: /* * For I/O space, exercise the port validation * Note: ReadPort currently always returns all ones, length=BitLength */ switch (Function & ACPI_IO_MASK) { case ACPI_READ: if (BitWidth == 64) { /* Split the 64-bit request into two 32-bit requests */ Status = AcpiHwReadPort (Address, &Value1, 32); ACPI_CHECK_OK (AcpiHwReadPort, Status); Status = AcpiHwReadPort (Address+4, &Value2, 32); ACPI_CHECK_OK (AcpiHwReadPort, Status); *Value = Value1 | ((UINT64) Value2 << 32); } else { Status = AcpiHwReadPort (Address, &Value1, BitWidth); ACPI_CHECK_OK (AcpiHwReadPort, Status); *Value = (UINT64) Value1; } break; case ACPI_WRITE: if (BitWidth == 64) { /* Split the 64-bit request into two 32-bit requests */ Status = AcpiHwWritePort (Address, ACPI_LODWORD (*Value), 32); ACPI_CHECK_OK (AcpiHwWritePort, Status); Status = AcpiHwWritePort (Address+4, ACPI_HIDWORD (*Value), 32); ACPI_CHECK_OK (AcpiHwWritePort, Status); } else { Status = AcpiHwWritePort (Address, (UINT32) *Value, BitWidth); ACPI_CHECK_OK (AcpiHwWritePort, Status); } break; default: Status = AE_BAD_PARAMETER; break; } if (ACPI_FAILURE (Status)) { return (Status); } /* Now go ahead and simulate the hardware */ break; /* * SMBus and GenericSerialBus support the various bidirectional * protocols. */ case ACPI_ADR_SPACE_SMBUS: case ACPI_ADR_SPACE_GSBUS: /* ACPI 5.0 */ Status = AcpiExGetProtocolBufferLength ((Function >> 16), &Length); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("AcpiExec: Invalid SMbus/GSbus protocol ID: 0x%X\n", (Function >> 16)); return (Status); } /* Adjust for fixed SMBus buffer size */ if ((SpaceId == ACPI_ADR_SPACE_SMBUS) && (Length > ACPI_SMBUS_DATA_SIZE)) { Length = ACPI_SMBUS_DATA_SIZE; /* SMBus buffer is fixed-length */ } if (AcpiGbl_DisplayRegionAccess) { AcpiOsPrintf ("AcpiExec: %s " "%s: Attr %X Addr %.4X BaseAddr %.4X Length %.2X BitWidth %X BufLen %X\n", AcpiUtGetRegionName (SpaceId), (Function & ACPI_IO_MASK) ? "Write" : "Read ", (UINT32) (Function >> 16), (UINT32) Address, (UINT32) BaseAddress, Length, BitWidth, Buffer[1]); /* GenericSerialBus has a Connection() parameter */ if ((SpaceId == ACPI_ADR_SPACE_GSBUS) && MyContext) { Status = AcpiBufferToResource (MyContext->Connection, MyContext->Length, &Resource); if (ACPI_SUCCESS (Status)) { ACPI_FREE (Resource); } AcpiOsPrintf (" [AccessLength %.2X Connection %p]", MyContext->AccessLength, MyContext->Connection); } AcpiOsPrintf ("\n"); } DataBuffer = &Buffer[2]; DataLength = (UINT8) Length; /* Setup the return buffer. Note: ASLTS depends on these fill values */ if (Length == ACPI_MAX_GSBUS_DATA_SIZE) { DataLength = 0x20; /* For ASLTS only */ } for (i = 0; i < Length; i++) { DataBuffer[i] = (UINT8) (0xA0 + i); } Buffer[0] = 0; /* Return Status, OK */ Buffer[1] = DataLength; /* Length of valid data */ return (AE_OK); case ACPI_ADR_SPACE_IPMI: /* ACPI 4.0 */ if (AcpiGbl_DisplayRegionAccess) { AcpiOsPrintf ("AcpiExec: IPMI " "%s: Attr %X Addr %.4X BaseAddr %.4X Len %.2X Width %X BufLen %X\n", (Function & ACPI_IO_MASK) ? "Write" : "Read ", (UINT32) (Function >> 16), (UINT32) Address, (UINT32) BaseAddress, Length, BitWidth, Buffer[1]); } /* * Regardless of a READ or WRITE, this handler is passed a 66-byte * buffer in which to return the IPMI status/length/data. * * Return some example data to show use of the bidirectional buffer */ Buffer[0] = 0; /* Status byte */ Buffer[1] = ACPI_IPMI_DATA_SIZE; /* Return buffer data length */ Buffer[2] = 0; /* Completion code */ Buffer[3] = 0; /* Reserved */ /* * Fill the 66-byte buffer with the return data. * Note: ASLTS depends on these fill values. */ for (i = 4; i < ACPI_IPMI_BUFFER_SIZE; i++) { Buffer[i] = (UINT8) (i); } return (AE_OK); /* * GPIO has some special semantics: * 1) Address is the pin number index into the Connection() pin list * 2) BitWidth is the actual number of bits (pins) defined by the field */ case ACPI_ADR_SPACE_GPIO: /* ACPI 5.0 */ if (AcpiGbl_DisplayRegionAccess) { AcpiOsPrintf ("AcpiExec: GPIO " "%s: Address %.4X Length %X BitWidth %X Conn %p\n", (Function & ACPI_IO_MASK) ? "Write" : "Read ", (UINT32) Address, Length, BitWidth, MyContext->Connection); } /* Now perform the "normal" SystemMemory handling, for AcpiExec only */ break; /* * PCC operation region will write the entire subspace's data and expect * a response from the hardware. For acpiexec, we'll fill the buffer with * default values. Note: ASLTS will depend on these values. */ case ACPI_ADR_SPACE_PLATFORM_COMM: /* ACPI 6.3 */ if (AcpiGbl_DisplayRegionAccess) { AcpiOsPrintf ("AcpiExec: PCC Write : Addr %.4X Width %X\n", (UINT32) Address, BitWidth); } for (i = 0; i < Length; ++i) { Buffer[i] = (UINT8) i; } return (AE_OK); case ACPI_ADR_SPACE_PLATFORM_RT: AcpiOsPrintf ("Acpiexec: PRM %s invoked\n", (Function & ACPI_IO_MASK) ? "Write" : "Read "); if ((Function & ACPI_IO_MASK) == ACPI_WRITE) { AcpiUtConvertUuidToString((char *) Buffer + 10, Uuid); AcpiOsPrintf ("Mode: %u GUID: %s\n", Buffer[0], Uuid); } /* Unpack the input buffer and print the contents for debug */ break; default: break; } /* * Search through the linked list for this region's buffer */ BufferExists = FALSE; BufferResize = FALSE; RegionElement = AeRegions.RegionList; if (AeRegions.NumberOfRegions) { BaseAddressEnd = BaseAddress + Length - 1; while (!BufferExists && RegionElement) { RegionAddress = RegionElement->Address; RegionAddressEnd = RegionElement->Address + RegionElement->Length - 1; RegionLength = RegionElement->Length; /* * Overlapping Region Support * * While searching through the region buffer list, determine if an * overlap exists between the requested buffer space and the current * RegionElement space. If there is an overlap then replace the old * buffer with a new buffer of increased size before continuing to * do the read or write */ if (RegionElement->SpaceId != SpaceId || BaseAddressEnd < RegionAddress || BaseAddress > RegionAddressEnd) { /* * Requested buffer is outside of the current RegionElement * bounds */ RegionElement = RegionElement->NextRegion; } else { /* * Some amount of buffer space sharing exists. There are 4 cases * to consider: * * 1. Right overlap * 2. Left overlap * 3. Left and right overlap * 4. Fully contained - no resizing required */ BufferExists = TRUE; if ((BaseAddress >= RegionAddress) && (BaseAddress <= RegionAddressEnd) && (BaseAddressEnd > RegionAddressEnd)) { /* Right overlap */ RegionElement->Length = (UINT32) (BaseAddress - RegionAddress + Length); BufferResize = TRUE; } else if ((BaseAddressEnd >= RegionAddress) && (BaseAddressEnd <= RegionAddressEnd) && (BaseAddress < RegionAddress)) { /* Left overlap */ RegionElement->Address = BaseAddress; RegionElement->Length = (UINT32) (RegionAddress - BaseAddress + RegionElement->Length); BufferResize = TRUE; } else if ((BaseAddress < RegionAddress) && (BaseAddressEnd > RegionAddressEnd)) { /* Left and right overlap */ RegionElement->Address = BaseAddress; RegionElement->Length = Length; BufferResize = TRUE; } /* * only remaining case is fully contained for which we don't * need to do anything */ if (BufferResize) { NewBuffer = AcpiOsAllocate (RegionElement->Length); if (!NewBuffer) { return (AE_NO_MEMORY); } OldBuffer = RegionElement->Buffer; RegionElement->Buffer = NewBuffer; NewBuffer = NULL; /* Initialize the region with the default fill value */ memset (RegionElement->Buffer, AcpiGbl_RegionFillValue, RegionElement->Length); /* * Get BufferValue to point (within the new buffer) to the * base address of the old buffer */ BufferValue = (UINT8 *) RegionElement->Buffer + (UINT64) RegionAddress - (UINT64) RegionElement->Address; /* * Copy the old buffer to its same location within the new * buffer */ memcpy (BufferValue, OldBuffer, RegionLength); AcpiOsFree (OldBuffer); } } } } /* * If the Region buffer does not exist, create it now */ if (!BufferExists) { /* Do the memory allocations first */ RegionElement = AcpiOsAllocate (sizeof (AE_REGION)); if (!RegionElement) { return (AE_NO_MEMORY); } RegionElement->Buffer = AcpiOsAllocate (Length); if (!RegionElement->Buffer) { AcpiOsFree (RegionElement); return (AE_NO_MEMORY); } /* Initialize the region with the default fill value */ memset (RegionElement->Buffer, AcpiGbl_RegionFillValue, Length); RegionElement->Address = BaseAddress; RegionElement->Length = Length; RegionElement->SpaceId = SpaceId; RegionElement->NextRegion = NULL; /* * Increment the number of regions and put this one * at the head of the list as it will probably get accessed * more often anyway. */ AeRegions.NumberOfRegions += 1; if (AeRegions.RegionList) { RegionElement->NextRegion = AeRegions.RegionList; } AeRegions.RegionList = RegionElement; } /* Calculate the size of the memory copy */ ByteWidth = (BitWidth / 8); if (BitWidth % 8) { ByteWidth += 1; } /* * The buffer exists and is pointed to by RegionElement. * We now need to verify the request is valid and perform the operation. * * NOTE: RegionElement->Length is in bytes, therefore it we compare against * ByteWidth (see above) */ if ((RegionObject->Region.SpaceId != ACPI_ADR_SPACE_GPIO) && ((UINT64) Address + ByteWidth) > ((UINT64)(RegionElement->Address) + RegionElement->Length)) { ACPI_WARNING ((AE_INFO, "Request on [%4.4s] is beyond region limit " "Req-0x%X+0x%X, Base=0x%X, Len-0x%X", (RegionObject->Region.Node)->Name.Ascii, (UINT32) Address, ByteWidth, (UINT32)(RegionElement->Address), RegionElement->Length)); return (AE_AML_REGION_LIMIT); } /* * Get BufferValue to point to the "address" in the buffer */ BufferValue = ((UINT8 *) RegionElement->Buffer + ((UINT64) Address - (UINT64) RegionElement->Address)); DoFunction: /* * Perform a read or write to the buffer space */ switch (Function) { case ACPI_READ: /* * Set the pointer Value to whatever is in the buffer */ memcpy (Value, BufferValue, ByteWidth); break; case ACPI_WRITE: /* * Write the contents of Value to the buffer */ memcpy (BufferValue, Value, ByteWidth); break; default: return (AE_BAD_PARAMETER); } if (AcpiGbl_DisplayRegionAccess) { switch (SpaceId) { case ACPI_ADR_SPACE_SYSTEM_MEMORY: AcpiOsPrintf ("AcpiExec: SystemMemory " "%s: Val %.8X Addr %.4X BitWidth %X [REGION: BaseAddr %.4X Len %.2X]\n", (Function & ACPI_IO_MASK) ? "Write" : "Read ", (UINT32) *Value, (UINT32) Address, BitWidth, (UINT32) BaseAddress, Length); break; case ACPI_ADR_SPACE_GSBUS: AcpiOsPrintf ("AcpiExec: GenericSerialBus\n"); break; case ACPI_ADR_SPACE_GPIO: /* ACPI 5.0 */ /* This space is required to always be ByteAcc */ Status = AcpiBufferToResource (MyContext->Connection, MyContext->Length, &Resource); AcpiOsPrintf ("AcpiExec: GeneralPurposeIo " "%s: %.8X Addr %.4X BaseAddr %.4X Length %.2X " "BitWidth %X AccLen %.2X Conn %p\n", (Function & ACPI_IO_MASK) ? "Write" : "Read ", (UINT32) *Value, (UINT32) Address, (UINT32) BaseAddress, Length, BitWidth, MyContext->AccessLength, MyContext->Connection); if (ACPI_SUCCESS (Status)) { ACPI_FREE (Resource); } break; default: AcpiOsPrintf ("AcpiExec: Region access on SpaceId %2.2X\n", SpaceId); break; } } return (AE_OK); } src/apic/000077500000000000000000000000001465205512700125705ustar00rootroot00000000000000src/apic/apicedge/000077500000000000000000000000001465205512700143315ustar00rootroot00000000000000src/apic/apicedge/apicedge.c000066400000000000000000000061041465205512700162370ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corporation * Copyright (C) 2010-2024 Canonical * * This file was originally part of the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #define UNDEFINED (-1) #define NOT_EDGE (0) #define EDGE (1) /* * This test sanity checks apic irq information * rule of thumb: * interrupts <16 should be EDGE or LEVEL * interrupts >16 should be LEVEL * acpi interrupt should be LEVEL */ static int apicedge_test1(fwts_framework *fw) { FILE *file; if ((file = fopen("/proc/interrupts", "r")) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "NoProcInterrupts", "Could not open file /proc/interrupts."); return FWTS_ERROR; } while (!feof(file)) { char line[4096], *c; int edge = UNDEFINED; int irq = 0; memset(line, 0, sizeof(line)); if (fgets(line, sizeof(line) - 1, file) == NULL) break; if (! (line[0] == ' ' || (line[0] >= '0' && line[0] <= '9')) ) continue; irq = strtoul(line, &c, 10); if (c == line) continue; if (strstr(line, "IO-APIC") && strstr(line, "edge")) edge = EDGE; else if (strstr(line, "IO-APIC") && strstr(line, "fasteoi")) edge = NOT_EDGE; else if (strstr(line, "PCI-MSI") && strstr(line, "level")) edge = NOT_EDGE; else if (strstr(line, "PCI-MSI") && strstr(line, "edge")) edge = EDGE; else if (strstr(line, "IO-APIC") && strstr(line, "level")) edge = NOT_EDGE; if (strstr(line,"acpi")) { if (edge == EDGE) fwts_failed(fw, LOG_LEVEL_MEDIUM, "ACPIIRQEdgeTrig", "ACPI Interrupt is incorrectly edge triggered."); continue; } if ((irq < 15) && (edge == UNDEFINED)) fwts_failed(fw, LOG_LEVEL_MEDIUM, "NonLegacyIRQLevelTrig", "Non-Legacy interrupt %i is incorrectly undefined.", irq); } (void)fclose(file); if (fwts_tests_passed(fw)) fwts_passed(fw, "Legacy interrupts are edge and PCI interrupts are level triggered."); return FWTS_OK; } static fwts_framework_minor_test apicedge_tests[] = { { apicedge_test1, "Legacy and PCI Interrupt Edge/Level trigger tests." }, { NULL, NULL } }; static fwts_framework_ops apicedge_ops = { .description = "APIC edge/level test.", .minor_tests = apicedge_tests }; FWTS_REGISTER("apicedge", &apicedge_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH) #endif src/bios/000077500000000000000000000000001465205512700126105ustar00rootroot00000000000000src/bios/bios32/000077500000000000000000000000001465205512700137115ustar00rootroot00000000000000src/bios/bios32/bios32.c000066400000000000000000000115731465205512700151650ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #ifdef FWTS_ARCH_INTEL #define BIOS32_SD_REGION_START (0x000e0000) #define BIOS32_SD_REGION_END (0x000fffff) #define BIOS32_SD_REGION_SIZE (BIOS32_SD_REGION_END - BIOS32_SD_REGION_START) typedef struct { uint8_t signature[4]; uint32_t entry_point; uint8_t revision_level; uint8_t length; uint8_t checksum; uint8_t reserved[5]; } __attribute__ ((packed)) fwts_bios32_service_directory; static int bios32_init(fwts_framework *fw) { if (fw->firmware_type != FWTS_FIRMWARE_BIOS) { fwts_log_info(fw, "Machine is not using traditional BIOS firmware, " "skipping test."); return FWTS_SKIP; } return FWTS_OK; } static int bios32_test1(fwts_framework *fw) { uint8_t *mem; int i; int found = 0; fwts_log_info(fw, "This test tries to find and sanity check the BIOS32 Service " "Directory as defined in the Standard BIOS 32-bit Service " "Directory Proposal, Revision 0.4 May 24, 1993, Phoenix " "Technologies Ltd and also the PCI BIOS specification."); if ((mem = fwts_mmap(BIOS32_SD_REGION_START, BIOS32_SD_REGION_SIZE)) == FWTS_MAP_FAILED) { fwts_log_error(fw, "Cannot mmap BIOS32 region."); return FWTS_ERROR; } for (i = 0; i < BIOS32_SD_REGION_SIZE; i+= 16) { const size_t size = sizeof(fwts_bios32_service_directory); /* Is the region safe to read? */ if (fwts_safe_memread(mem, size) != FWTS_OK) continue; if ((*(mem+i) == '_') && (*(mem+i+1) == '3') && (*(mem+i+2) == '2') && (*(mem+i+3) == '_')) { fwts_bios32_service_directory *bios32 = (fwts_bios32_service_directory *)(mem+i); fwts_log_info(fw, "Found BIOS32 Service Directory at 0x%8.8x", BIOS32_SD_REGION_START+i); fwts_log_info_verbatim(fw, " Signature : %4.4s", bios32->signature); fwts_log_info_verbatim(fw, " Entry Point: 0x%8.8" PRIx32, bios32->entry_point); fwts_log_info_verbatim(fw, " Revision : 0x%2.2" PRIx8, bios32->revision_level); fwts_log_info_verbatim(fw, " Length : 0x%2.2" PRIx8, bios32->length); fwts_log_info_verbatim(fw, " Checksum : 0x%2.2" PRIx8, bios32->checksum); fwts_log_nl(fw); if (bios32->entry_point >= 0x100000) fwts_failed(fw, LOG_LEVEL_HIGH, "BIOS32SrvDirEntryPointHighMem", "Service Directory Entry Point 0x%8.8" PRIx32 " is in high memory and cannot be used " "by the kernel.", bios32->entry_point); else fwts_passed(fw, "Service Directory Entry Point " "0x%8.8x is not in high memory.", bios32->entry_point); if (bios32->length != 1) fwts_failed(fw, LOG_LEVEL_HIGH, "BIOS32SrvDirEntryLength", "Service Directory Length is 0x%8.8" PRIx8 ", expected 1 (1 x 16 bytes).", bios32->length); else fwts_passed(fw, "Service Directory Length is 1 " "(1 x 16 bytes) as expected."); if (bios32->revision_level != 0) fwts_failed(fw, LOG_LEVEL_HIGH, "BIOS32SrvDirRevision", "Service Directory Revision is 0x%2.2" PRIx8 ", only version 0 is supported by the " "kernel.", bios32->revision_level); else fwts_passed(fw, "Service Directory Revision is 0x%2.2" PRIx8 " and is supported by the kernel.", bios32->revision_level); if (fwts_checksum(mem + i, 16) != 0) fwts_failed(fw, LOG_LEVEL_HIGH, "BIOS32SrvDirCheckSum", "Service Directory checksum failed."); else fwts_passed(fw, "Service Directory checksum passed."); found++; } } if (found == 0) fwts_log_info(fw, "Could not find BIOS32 Service Directory."); else if (found > 1) fwts_failed(fw, LOG_LEVEL_HIGH, "BIOS32MultipleSrvDirInstances", "Found %d instances of BIOS32 Service Directory, " "there should only be 1.", found); (void)fwts_munmap(mem, BIOS32_SD_REGION_SIZE); return FWTS_OK; } static fwts_framework_minor_test bios32_tests[] = { { bios32_test1, "BIOS32 Service Directory test." }, { NULL, NULL } }; static fwts_framework_ops bios32_ops = { .description = "BIOS32 Service Directory test.", .init = bios32_init, .minor_tests = bios32_tests }; FWTS_REGISTER("bios32", &bios32_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/bios/bios_info/000077500000000000000000000000001465205512700145575ustar00rootroot00000000000000src/bios/bios_info/bios_info.c000066400000000000000000000046531465205512700167020ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include typedef struct { const char *dmi_field; const char *label; } fwts_bios_info; static const fwts_bios_info bios_info[] = { { "bios_vendor", "BIOS Vendor" }, { "bios_version", "BIOS Version" }, { "bios_date", "BIOS Release Date" }, { "board_name", "Board Name" }, { "board_serial", "Board Serial #" }, { "board_version", "Board Version" }, { "board_asset_tag", "Board Asset Tag" }, { "chassis_serial", "Chassis Serial #" }, { "chassis_type", "Chassis Type " }, { "chassis_vendor", "Chassis Vendor" }, { "chassis_version", "Chassis Version" }, { "chassis_asset_tag", "Chassic Asset Tag" }, { "product_name", "Product Name" }, { "product_serial", "Product Serial #" }, { "product_uuid", "Product UUID " }, { "product_version", "Product Version" }, { "sys_vendor", "System Vendor" }, { NULL, NULL } }; static int bios_info_test1(fwts_framework *fw) { char path[PATH_MAX]; int i; for (i = 0; bios_info[i].dmi_field != NULL; i++) { char *data; snprintf(path, sizeof(path), "/sys/class/dmi/id/%s", bios_info[i].dmi_field); if ((data = fwts_get(path)) != NULL) { fwts_chop_newline(data); fwts_log_info_verbatim(fw, "%-18.18s: %s", bios_info[i].label, data); free(data); } } fwts_infoonly(fw); return FWTS_OK; } static fwts_framework_minor_test bios_info_tests[] = { { bios_info_test1, "Gather BIOS DMI information" }, { NULL, NULL } }; static fwts_framework_ops bios_info_ops = { .description = "Gather BIOS DMI information.", .minor_tests = bios_info_tests }; FWTS_REGISTER("bios_info", &bios_info_ops, FWTS_TEST_FIRST, FWTS_FLAG_BATCH) #endif src/bios/ebda_region/000077500000000000000000000000001465205512700150465ustar00rootroot00000000000000src/bios/ebda_region/ebda_region.c000066400000000000000000000063061465205512700174550ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corporation * Copyright (C) 2010-2024 Canonical * * This code was originally part of the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #include #include static off_t ebda_addr = FWTS_NO_EBDA; static fwts_list *memory_map; static int ebda_init(fwts_framework *fw) { if (fw->firmware_type != FWTS_FIRMWARE_BIOS) { fwts_log_info(fw, "Machine is not using traditional BIOS firmware, skipping test."); return FWTS_SKIP; } if ((memory_map = fwts_memory_map_table_load(fw)) == NULL) { fwts_log_error(fw, "Failed to read memory map."); return FWTS_ERROR; } if ((ebda_addr = fwts_ebda_get()) == FWTS_NO_EBDA) { fwts_log_error(fw, "Failed to locate EBDA region."); return FWTS_ERROR; } return FWTS_OK; } static int ebda_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_klog_free(memory_map); return FWTS_OK; } static int ebda_test1(fwts_framework *fw) { const char *memory_map_name = fwts_memory_map_name(fw->firmware_type); fwts_memory_map_entry *entry; if (memory_map == NULL) return FWTS_ERROR; fwts_log_info(fw, "The Extended BIOS Data Area (EBDA) is normally located at " "the end of the low 640K region and is typically 2-4K in " "size. It should be reserved in the %s table.", memory_map_name); entry = fwts_memory_map_info(memory_map, (uint64_t)ebda_addr); if ((entry != NULL) && (entry->type == FWTS_MEMORY_MAP_RESERVED || entry->type == FWTS_MEMORY_MAP_ACPI)) { fwts_passed(fw, "EBDA region mapped at 0x%lx and reserved as a %" PRId64 "K region in the %s table at 0x%" PRIx64 "..0x%" PRIx64 ".", ebda_addr, (entry->end_address - entry->start_address) / 1024, memory_map_name, entry->start_address, entry->end_address); } else fwts_failed(fw, LOG_LEVEL_MEDIUM, "EBDAMappedNotReserved", "EBDA region mapped at 0x%lx but not reserved in the %s table.", ebda_addr, memory_map_name); return FWTS_OK; } static fwts_framework_minor_test ebda_tests[] = { { ebda_test1, "Test EBDA is reserved in E820 table." }, { NULL, NULL } }; static fwts_framework_ops ebda_ops = { .description = "Test EBDA region is mapped and reserved in memory map table.", .init = ebda_init, .deinit = ebda_deinit, .minor_tests = ebda_tests }; FWTS_REGISTER("ebda", &ebda_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/bios/ebdadump/000077500000000000000000000000001465205512700143715ustar00rootroot00000000000000src/bios/ebdadump/ebdadump.c000066400000000000000000000045551465205512700163270ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #include #ifdef FWTS_ARCH_INTEL #define BIOS_ROM_START (0x000a0000) static void ebdadump_data(fwts_framework *fw, uint8_t *data, int offset, int length) { char buffer[128]; int i; for (i = 0; i < length; i += 16) { fwts_dump_raw_data(buffer, sizeof buffer, data+i, offset+i, 16); fwts_log_info_verbatim(fw, "%s", buffer); } } static int ebdadump_test1(fwts_framework *fw) { off_t ebda_addr; uint8_t *mem; size_t len; if ((ebda_addr = fwts_ebda_get()) == FWTS_NO_EBDA) { fwts_log_error(fw, "Failed to local EBDA region."); return FWTS_ERROR; } len = BIOS_ROM_START - ebda_addr; if (ebda_addr > BIOS_ROM_START) { fwts_log_error(fw, "EBDA start address is greater than the " "BIOS ROM start address."); return FWTS_ERROR; } if ((mem = fwts_mmap(ebda_addr, len)) == FWTS_MAP_FAILED) { fwts_log_error(fw, "Cannot mmap BIOS ROM region."); return FWTS_ERROR; } fwts_log_info(fw, "EBDA region: %" PRIx32 "..%x (%zd bytes)", (uint32_t)ebda_addr, BIOS_ROM_START, len); if (fwts_safe_memread((void *)mem, len) != FWTS_OK) fwts_log_info(fw, "EBDA region at cannot be read"); else ebdadump_data(fw, mem, ebda_addr, len); (void)fwts_munmap(mem, len); fwts_infoonly(fw); return FWTS_OK; } static fwts_framework_minor_test ebdadump_tests[] = { { ebdadump_test1, "Dump EBDA region." }, { NULL, NULL } }; static fwts_framework_ops ebdadump_ops = { .description = "Dump EBDA region.", .minor_tests = ebdadump_tests }; FWTS_REGISTER("ebdadump", &ebdadump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS | FWTS_FLAG_ROOT_PRIV) #endif src/bios/hdaaudio/000077500000000000000000000000001465205512700143665ustar00rootroot00000000000000src/bios/hdaaudio/hdaaudio.c000066400000000000000000000123241465205512700163120ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include "fwts.h" #ifdef FWTS_ARCH_INTEL typedef struct { uint16_t pin; uint32_t setting; } hda_audio_pin_setting; static int hda_audio_read_pins(const char *path, const char *file, fwts_list *settings) { FILE *fp; uint16_t pin; uint32_t setting; char name[PATH_MAX]; fwts_list_init(settings); snprintf(name, sizeof(name), "%s/%s", path, file); if ((fp = fopen(name, "r")) == NULL) return FWTS_ERROR; while (fscanf(fp, "0x%hx 0x%x\n", &pin, &setting) == 2) { hda_audio_pin_setting *pin_setting; pin_setting = calloc(1, sizeof(hda_audio_pin_setting)); if (pin_setting == NULL) { fwts_list_free_items(settings, free); (void)fclose(fp); return FWTS_ERROR; } pin_setting->pin = pin; pin_setting->setting = setting; fwts_list_append(settings, pin_setting); } (void)fclose(fp); return FWTS_OK; } static void hda_audio_dump_pins(fwts_framework *fw, const char *config, fwts_list *settings) { if (fwts_list_len(settings) > 0) { fwts_list_link *item; fwts_log_info(fw, "%s:", config); fwts_log_info_verbatim(fw, " Pin Setting"); fwts_list_foreach(item, settings) { hda_audio_pin_setting *pin_setting = fwts_list_data(hda_audio_pin_setting *, item); fwts_log_info_verbatim(fw, " 0x%4.4hx 0x%8.8x", pin_setting->pin, pin_setting->setting); } } else fwts_log_info(fw, "%s: None Defined.", config); } static void hda_audio_dev_info(fwts_framework *fw, const char *label, const char *path, const char *file) { char *info; char fullpath[PATH_MAX]; snprintf(fullpath, sizeof(fullpath), "%s/%s", path, file); if ((info = fwts_get(fullpath)) != NULL) { fwts_chop_newline(info); if (*info) fwts_log_info_verbatim(fw, "%-15.15s: %s", label, info); free(info); } } static int hda_audio_check_pins(fwts_framework *fw, const char *path) { fwts_list init_pin_configs; fwts_list driver_pin_configs; fwts_list user_pin_configs; int warn = 0; hda_audio_dev_info(fw, "Vendor Name", path, "vendor_name"); hda_audio_dev_info(fw, "Vendor ID", path, "vendor_id"); hda_audio_dev_info(fw, "Model Name", path, "modelname"); hda_audio_dev_info(fw, "Chip Name", path, "chipname"); hda_audio_dev_info(fw, "Subsystem ID", path, "subsystem_id"); hda_audio_dev_info(fw, "Revision ID", path, "revision_id"); (void)hda_audio_read_pins(path, "init_pin_configs", &init_pin_configs); (void)hda_audio_read_pins(path, "driver_pin_configs", &driver_pin_configs); (void)hda_audio_read_pins(path, "user_pin_configs", &user_pin_configs); if (fwts_list_len(&init_pin_configs) > 0) hda_audio_dump_pins(fw, "BIOS pin configurations", &init_pin_configs); if (fwts_list_len(&driver_pin_configs) > 0) { hda_audio_dump_pins(fw, "Driver defined pin configurations", &driver_pin_configs); warn++; } if (fwts_list_len(&user_pin_configs) > 0) { hda_audio_dump_pins(fw, "User defined pin configurations", &user_pin_configs); warn++; } if (warn) { fwts_log_warning(fw, "BIOS pin configurations required software override " "to make HDA audio work correctly."); fwts_log_advice(fw, "The driver or user provided overrides should be " "corrected in BIOS firmware."); } else fwts_passed(fw, "Default BIOS pin configurations did not have " "software override."); fwts_list_free_items(&user_pin_configs, free); fwts_list_free_items(&driver_pin_configs, free); fwts_list_free_items(&init_pin_configs, free); return FWTS_OK; } static int hda_audio_test1(fwts_framework *fw) { DIR *dir; struct dirent *directory; bool checked = false; if ((dir = opendir("/sys/class/sound")) == NULL) { fwts_skipped(fw, "Cannot find any sound devices in /sys/class/sound."); return FWTS_OK; } while ((directory = readdir(dir)) != NULL) if (strncmp(directory->d_name, "hw", 2) == 0) { char path[PATH_MAX]; checked = true; snprintf(path, sizeof(path), "/sys/class/sound/%s", directory->d_name); fwts_log_info(fw, "Checking '%s':", directory->d_name); hda_audio_check_pins(fw, path); fwts_log_nl(fw); } (void)closedir(dir); if (!checked) fwts_skipped(fw, "Cannot find any BIOS set audio pin configurations."); return FWTS_OK; } static fwts_framework_minor_test hda_audio_tests[] = { { hda_audio_test1, "HDA Audio Pin Configuration test." }, { NULL, NULL } }; static fwts_framework_ops hda_audio_ops = { .description = "HDA Audio Pin Configuration test.", .minor_tests = hda_audio_tests }; FWTS_REGISTER("hda_audio", &hda_audio_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH) #endif src/bios/interrupt/000077500000000000000000000000001465205512700146445ustar00rootroot00000000000000src/bios/interrupt/interrupt.c000066400000000000000000000046431465205512700170530ustar00rootroot00000000000000/* * Copyright (C) 2021-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #define ACPI_SCI_PATH "/sys/firmware/acpi/interrupts/sci" #define ACPI_SCI_THRESHOLD 30 #define ACPI_SCI_PERIOD 3 static int interrupt_init(fwts_framework *fw) { FWTS_UNUSED(fw); return FWTS_OK; } static int interrupt_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); return FWTS_OK; } static uint32_t get_acpi_sci(void) { char *str; uint32_t val; str = fwts_get(ACPI_SCI_PATH); if (!str) return 0; val = atoi(str); free(str); return val; } static int interrupt_test0(fwts_framework *fw) { uint32_t sci_init, average; bool passed = true; if (access(ACPI_SCI_PATH, R_OK)) { fwts_log_warning(fw, "Could not open ACPI SCI data\n"); return FWTS_ERROR; } sci_init = get_acpi_sci(); sleep(ACPI_SCI_PERIOD); average = (get_acpi_sci() - sci_init) / ACPI_SCI_PERIOD; fwts_log_info(fw, "ACPI SCIs per second are %" PRId32 ".", average); if (average > ACPI_SCI_THRESHOLD) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "InterruptSCITooMany", "ACPI SCIs per second are above threshold %" PRId32 ".", ACPI_SCI_THRESHOLD); } if (passed) fwts_passed(fw, "No issues found in ACPI SCI generation."); return FWTS_OK; } static fwts_framework_minor_test interrupt_tests[] = { { interrupt_test0, "Check whether ACPI SCI is triggered excessively." }, { NULL, NULL } }; static fwts_framework_ops interrupt_ops = { .description = "Interrupt tests.", .init = interrupt_init, .deinit = interrupt_deinit, .minor_tests = interrupt_tests }; FWTS_REGISTER("interrupt", &interrupt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/bios/memmapdump/000077500000000000000000000000001465205512700147525ustar00rootroot00000000000000src/bios/memmapdump/memmapdump.c000066400000000000000000000031571465205512700172660ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL static int memory_mapdump_util(fwts_framework *fw) { fwts_list *memory_mapdump_memory_map_info; if ((memory_mapdump_memory_map_info = fwts_memory_map_table_load(fw)) == NULL) { fwts_log_warning(fw, "Cannot memory map table from /sys/firmware/memmap " "or kernel log."); return FWTS_ERROR; } fwts_memory_map_table_dump(fw, memory_mapdump_memory_map_info); fwts_memory_map_table_free(memory_mapdump_memory_map_info); fwts_infoonly(fw); return FWTS_OK; } static fwts_framework_minor_test memory_mapdump_utils[] = { { memory_mapdump_util, "Dump system memory map." }, { NULL, NULL } }; static fwts_framework_ops memory_mapdump_ops = { .description = "Dump system memory map.", .minor_tests = memory_mapdump_utils }; FWTS_REGISTER("memmapdump", &memory_mapdump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS) #endif src/bios/mtrr/000077500000000000000000000000001465205512700135745ustar00rootroot00000000000000src/bios/mtrr/mtrr.c000066400000000000000000000426041465205512700147320ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corporation * Copyright (C) 2010-2024 Canonical * * This code was originally part of the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #include #include #include #include #include static fwts_list *klog; static fwts_list *mtrr_list; static fwts_cpuinfo_x86 *fwts_cpuinfo; #define UNCACHED 0x0001 #define WRITE_BACK 0x0002 #define WRITE_COMBINING 0x0004 #define WRITE_THROUGH 0x0008 #define WRITE_PROTECT 0x0010 #define DEFAULT 0x0020 #define DISABLED 0x0040 #define UNKNOWN 0x0080 #define MTRR_DEF_TYPE_MSR 0x2FF #define AMD_SYS_CFG_MSR 0xC0010010 #define AMD_TOM2_MSR 0xC001001D #define MTRR_ENABLE 0x800 #define FIXED_MTRR_ENABLE 0x400 static uint64_t mtrr_default; static uint64_t amd_tom2_addr; static bool amd_Tom2ForceMemTypeWB = false; struct mtrr_entry { uint8_t reg; uint64_t start; uint64_t end; uint64_t size; uint8_t type; }; static char *cache_to_string(int type) { static char str[1024]; memset(str, 0, 1024); if (type & UNCACHED || type == 0) strcat(str," Uncached"); if (type & WRITE_BACK) strcat(str," Write-Back"); if (type & WRITE_COMBINING) strcat(str," Write-Combining"); if (type & WRITE_THROUGH) strcat(str," Write-Through"); if (type & WRITE_PROTECT) strcat(str," Write-Protect"); if (type & DEFAULT) { strcat(str," Default"); if (mtrr_default & UNCACHED) strcat(str," (Uncached)"); if (mtrr_default & WRITE_BACK) strcat(str," (Write-Back)"); if (mtrr_default & WRITE_COMBINING) strcat(str," (Write-Combining)"); if (mtrr_default & WRITE_THROUGH) strcat(str," (Write-Through)"); if (mtrr_default & WRITE_PROTECT) strcat(str," (Write-Protect)"); if (mtrr_default & UNKNOWN) strcat(str," (Unknown)"); } if (type & UNKNOWN) strcat(str," Unknown"); return str; } static int get_mtrrs(void) { struct mtrr_entry *entry; FILE *fp; char line[4096]; if ((mtrr_list = fwts_list_new()) == NULL) return FWTS_ERROR; if ((fp = fopen("/proc/mtrr", "r")) == NULL) { fwts_list_free(mtrr_list, free); return FWTS_ERROR; } while (!feof(fp)) { char *ptr1, *ptr2; if (fgets(line, sizeof(line), fp) == NULL) break; if ((entry = calloc(1, sizeof(struct mtrr_entry))) == NULL) { fwts_list_free(mtrr_list, free); (void)fclose(fp); return FWTS_ERROR; } /* * Put all text to lower case since the output * from /proc/mtrr is variable upper/lower case * across kernel versions so forcing to lower * saves comparing for upper/lower case variants. */ for (ptr1 = line; *ptr1; ptr1++) *ptr1 = tolower(*ptr1); /* Parse the following: * reg01: base=0x080000000 ( 2048MB), size= 1024MB, count=1: write-back */ /* Get register, in decimal */ if (strncmp(line, "reg", 3)) { free(entry); continue; } entry->reg = strtoul(line + 3, NULL, 10); /* Get base, in hex */ if ((ptr1 = strstr(line, "base=0x")) == NULL) { free(entry); continue; } entry->start = strtoull(ptr1 + 5, NULL, 16); /* Get size, in decimal */ if ((ptr1 = strstr(line, "size=")) == NULL) { free(entry); continue; } entry->size = strtoull(ptr1 + 5, &ptr2, 10); if (ptr2 && (*ptr2 == 'm')) entry->size *= 1024 * 1024; if (ptr2 && (*ptr2 == 'k')) entry->size *= 1024; entry->end = entry->start + entry->size - 1; if (strstr(line, "write-back")) entry->type = WRITE_BACK; else if (strstr(line, "uncachable")) entry->type = UNCACHED; else if (strstr(line, "write-through")) entry->type = WRITE_THROUGH; else if (strstr(line, "write-combining")) entry->type = WRITE_COMBINING; else if (strstr(line, "write-protect")) entry->type = WRITE_PROTECT; else entry->type = UNKNOWN; fwts_list_append(mtrr_list, entry); } (void)fclose(fp); return FWTS_OK; } static int get_default_mtrr(fwts_framework *fw) { uint64_t amd_sys_conf; /* Get the default memory type of memory between 4GB and second top of * memory (TOM2) - i.e. is it write back (WB) */ if (strstr(fwts_cpuinfo->vendor_id, "AMD") || strstr(fwts_cpuinfo->vendor_id, "Hygon")) { if (fwts_cpu_readmsr(fw, 0, AMD_SYS_CFG_MSR, &amd_sys_conf) == FWTS_OK) if (amd_sys_conf & 0x200000) amd_Tom2ForceMemTypeWB = true; if (fwts_cpu_readmsr(fw, 0, AMD_TOM2_MSR, &amd_tom2_addr) != FWTS_OK) amd_tom2_addr = 0x100000000; /* this should above 4GB */ } if (fwts_cpu_readmsr(fw, 0, MTRR_DEF_TYPE_MSR, &mtrr_default) == FWTS_OK) { switch (mtrr_default & 0xFF) { case 0: mtrr_default = UNCACHED; break; case 1: mtrr_default = WRITE_COMBINING; break; case 4: mtrr_default = WRITE_THROUGH; break; case 5: mtrr_default = WRITE_PROTECT; break; case 6: mtrr_default = WRITE_BACK; break; default: mtrr_default = UNKNOWN; break; } return FWTS_OK; } return FWTS_ERROR; } static int cache_types(const uint64_t start, uint64_t end) { fwts_list_link *item; struct mtrr_entry *entry; int type = 0; fwts_list_foreach(item, mtrr_list) { entry = fwts_list_data(struct mtrr_entry*, item); if (entry->end >= start && entry->start <= end) type |= entry->type; } /* On AMD platforms, Tom2ForceMemTypeWB overwrites MTRRdefType */ if (type == 0 && amd_Tom2ForceMemTypeWB && start >= 0x100000000 && start <= amd_tom2_addr) return WRITE_BACK; /* * now to see if there is any part of the range that isn't * covered by an mtrr, since it's UNCACHED if so */ restart: fwts_list_foreach(item, mtrr_list) { entry = fwts_list_data(struct mtrr_entry*, item); if (entry->end >= end && entry->start < end) { end = (entry->start == 0) ? 0 : (entry->start - 1); if (end < start) end = start; else goto restart; } } /* if there is no full coverage it's also uncached */ if (start != end) type |= DEFAULT; if ((type & DEFAULT) && mtrr_default != UNCACHED) { type &= ~DEFAULT; type |= mtrr_default; } return type; } static int check_prefetchable( fwts_framework *fw, const char *device, const uint64_t address, bool *pref) { char path[PATH_MAX]; uint8_t config[64]; int fd, i, n, bars; uint32_t *bar; *pref = false; snprintf(path, sizeof(path), FWTS_PCI_DEV_PATH "/%s/config", device); if ((fd = open(path, O_RDONLY)) < 0) { fwts_log_error(fw, "Cannot read PCI config for device %s\n", device); return FWTS_ERROR; } n = read(fd, config, sizeof(config)); (void)close(fd); /* config space too small? ignore for now */ if (n < 64) return FWTS_OK; /* Type, mask off top bit so we can cater for multi-function devices */ switch (config[FWTS_PCI_CONFIG_HEADER_TYPE] & 0x7f) { case FWTS_PCI_CONFIG_HEADER_TYPE_NON_BRIDGE: bars = 6; break; case FWTS_PCI_CONFIG_HEADER_TYPE_PCI_BRIDGE: bars = 2; break; default: /* No BARs, ignore */ return FWTS_OK; } /* * Check BAR addresses, do they match and are they prefetchable * See http://wiki.osdev.org/PCI */ bar = (uint32_t*)&config[0x10]; for (i = 0; i < bars; i++) { if ((bar[i] & 1) == 0) { uint64_t bar_addr; bool is_prefetchable = (bar[i] & FWTS_PCI_CONFIG_BAR_PREFETCHABLE); switch ((bar[i] >> 1) & 0x03) { case FWTS_PCI_CONFIG_BAR_TYPE_ADDR_16BIT: bar_addr = bar[i] & 0xfff0; break; case FWTS_PCI_CONFIG_BAR_TYPE_ADDR_32BIT: bar_addr = bar[i] & 0xfffffff0; break; case FWTS_PCI_CONFIG_BAR_TYPE_ADDR_64BIT: bar_addr = (bar[i] & 0xfffffff0) | (((uint64_t)bar[i+1]) << 32); i++; break; default: continue; } if (bar_addr == address) { *pref = is_prefetchable; break; } } } return FWTS_OK; } static int guess_cache_type( fwts_framework *fw, const char *string, int *must, int *mustnot, const uint64_t address) { *must = 0; *mustnot = 0; if (strstr(string, "System RAM")) { *must = WRITE_BACK; *mustnot = ~WRITE_BACK; return FWTS_OK; } /* if it's PCI mmio -> uncached typically except for video */ if (strstr(string, "0000:")) { bool pref; if (check_prefetchable(fw, string, address, &pref) != FWTS_OK) return FWTS_ERROR; if (pref) { *must = 0; *mustnot = WRITE_BACK; } else { *must = UNCACHED; *mustnot = (~UNCACHED) & (~DEFAULT); } } return FWTS_OK; } static void multi_types_check(fwts_framework *fw, int *type) { int n_types = 0, i; /* checking number of types set, UNCACHED, WRITE_BACK, WRITE_COMBINING, WRITE_THROUGH, WRITE_PROTECT */ for (i = 0; i < 5; i++) { if (*type & (1 << i)) n_types++; } if (n_types >= 2) { if (*type & UNCACHED) { fwts_log_info(fw, "Detected more than one type has been set. " "From Intel Software Developer Manual 11.11.4.1 MTRR Precedences, " "If two or more variable memory ranges match and one of the memory " "types is UC, the UC memory type used. FWTS will check with type " "UNCACHED here."); *type = UNCACHED; return; } else if ((*type & WRITE_THROUGH) && (*type & WRITE_BACK)) { fwts_log_info(fw, "Detected more than one type has been set. " "From Intel Software Developer Manual 11.11.4.1 MTRR Precedences, " "If two or more variable memory ranges match and the memory types " "are WT and WB, the WT memory type is used. FWTS will check with type " "WRITE_THROUGH here."); *type = WRITE_THROUGH; return; } else { fwts_warning(fw, "Detected more than one type has been set. The overlaps not defined, " "processor behavior is undefined."); return; } } return; } static int validate_iomem(fwts_framework *fw) { FILE *file; char buffer[4096]; int pcidepth = 0; int failed = 0; memset(buffer, 0, 4096); if ((file = fopen("/proc/iomem", "r")) == NULL) return FWTS_ERROR; if (get_default_mtrr(fw) != FWTS_OK) mtrr_default = UNKNOWN; while (!feof(file)) { uint64_t start; uint64_t end; int type, type_must, type_mustnot; char *c, *c2; int i; bool skiperror = false; if (fgets(buffer, 4095, file) == NULL) break; fwts_chop_newline(buffer); /* * For pci bridges, we note the increased depth and * otherwise skip the entry */ if (strstr(buffer, ": PCI Bus ")) { pcidepth++; continue; } /* then: check the pci depth */ for (i = 0; i < pcidepth * 2; i++) { if (buffer[i] != ' ') { pcidepth = i / 2; break; } } c = &buffer[pcidepth*2]; /* sub entry to a main entry -> skip */ if (*c == ' ') continue; start = strtoull(c, NULL, 16); c2 = strchr(c, '-'); if (!c2) continue; c2++; end = strtoull(c2, NULL, 16); c2 = strstr(c, " : "); if (!c2) continue; c2 += 3; /* exception: 640K - 1Mb range we ignore */ if (start >= 640*1024 && end <= 1024*1024) continue; type = cache_types(start, end); multi_types_check(fw, &type); if (guess_cache_type(fw, c2, &type_must, &type_mustnot, start) != FWTS_OK) { /* This has failed, give up at this point */ fwts_skipped(fw, "Could not guess cache type."); (void)fclose(file); return FWTS_ERROR; } if ((type & type_mustnot) != 0) { failed++; fwts_failed(fw, LOG_LEVEL_CRITICAL, "MTRRIncorrectAttr", "Memory range 0x%" PRIx64 " to 0x%" PRIx64 " (%s) " "has incorrect attribute%s.", start, end, c2, cache_to_string(type & type_mustnot)); if (type_must == UNCACHED) skiperror = true; } if (type & DEFAULT) { type |= UNCACHED; type &= ~DEFAULT; } if (((type & type_must) != type_must) && !skiperror) { failed++; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MTRRLackingAttr", "Memory range 0x%" PRIx64 " to 0x%" PRIx64 " (%s) " "is lacking attribute%s.", start, end, c2, cache_to_string( (type & type_must) ^ type_must)); } } (void)fclose(file); if (!failed) fwts_passed(fw, "Memory ranges seem to have correct attributes."); return FWTS_OK; } static void do_mtrr_resource(fwts_framework *fw) { fwts_list_link *item; fwts_log_info_verbatim(fw,"MTRR overview"); fwts_log_info_verbatim(fw,"-------------"); fwts_list_foreach(item, mtrr_list) { struct mtrr_entry *entry = fwts_list_data(struct mtrr_entry *, item); if (entry->type & DISABLED) fwts_log_info_verbatim(fw, "Reg %hhu: disabled", entry->reg); else fwts_log_info_verbatim(fw, "Reg %hhu: 0x%16.16" PRIx64 " - 0x%16.16" PRIx64 " (%6" PRId64 " %cB) %s", entry->reg, entry->start, entry->end, (entry->size >= (1024*1024) ? entry->size / (1024*1024) : (entry->size / 1024)), entry->size >= (1024*1024) ? 'M' : 'K', cache_to_string(entry->type)); } fwts_log_nl(fw); } static int mtrr_init(fwts_framework *fw) { if (get_mtrrs() != FWTS_OK) { fwts_log_error(fw, "Failed to read /proc/mtrr."); return FWTS_ERROR; } if (access("/proc/mtrr", R_OK)) return FWTS_ERROR; if ((klog = fwts_klog_read()) == NULL) { fwts_log_error(fw, "Failed to read kernel log."); return FWTS_ERROR; } if ((fwts_cpuinfo = fwts_cpu_get_info(-1)) == NULL) { fwts_log_error(fw, "Cannot get CPU info"); return FWTS_ERROR; } do_mtrr_resource(fw); return FWTS_OK; } static int mtrr_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_klog_free(klog); fwts_list_free(mtrr_list, free); if (fwts_cpuinfo) fwts_cpu_free_info(fwts_cpuinfo); return FWTS_OK; } static int mtrr_test0(fwts_framework *fw) { uint64_t mtrr_def_msr; if (fwts_cpu_readmsr(fw, 0, MTRR_DEF_TYPE_MSR, &mtrr_def_msr) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "MTRRMSRDefaultNotAvailable", "MTRR_DEF_TYPE_MSR cannot be read from CPU."); return FWTS_ERROR; } if (mtrr_def_msr & MTRR_ENABLE) fwts_passed(fw, "MTRRs enabled flag is set in MTRR_DEF_TYPE MSR correctly."); else fwts_failed(fw, LOG_LEVEL_CRITICAL, "MTRRDisabled", "MTRRs enabled flag is clear in MTRR_DEF_TYPE MSR and " "all MTRRs are disabled "); if (mtrr_def_msr & FIXED_MTRR_ENABLE) fwts_passed(fw, "fixed MTRRs enabled flag is set in MTRR_DEF_TYPE MSR correctly."); else fwts_failed(fw, LOG_LEVEL_CRITICAL, "MTRRFixedRangeDisabled", "Fixed MTRRs enabled flag is clear in MTRR_DEF_TYPE MSR and " "all Fixed-range MTRRs are disabled "); return FWTS_OK; } static int mtrr_test1(fwts_framework *fw) { return validate_iomem(fw); } static int mtrr_test2(fwts_framework *fw) { if (klog != NULL) { bool failed = false; if (fwts_klog_regex_find(fw, klog, "mtrr: your CPUs had inconsistent fixed MTRR settings") > 0) { fwts_log_info(fw, "Detected CPUs with inconsistent fixed MTRR settings which the kernel fixed."); failed = true; } if (fwts_klog_regex_find(fw, klog, "mtrr: your CPUs had inconsistent variable MTRR settings") > 0) { fwts_log_info(fw, "Detected CPUs with inconsistent variable MTRR settings which the kernel fixed."); failed = true; } if (fwts_klog_regex_find(fw, klog, "mtrr: your CPUs had inconsistent MTRRdefType") > 0) { fwts_log_info(fw, "Detected CPUs with inconsistent variable MTRR settings which the kernel fixed."); failed = true; } if (failed) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MTRRCPUsMisconfigured", "It is probable that the BIOS does not set up " "all the CPUs correctly and the kernel has now " "corrected this misconfiguration."); else fwts_passed(fw, "All processors have the a consistent MTRR setup."); } else fwts_log_error(fw, "No boot dmesg found."); return FWTS_OK; } static int mtrr_test3(fwts_framework *fw) { if (fwts_cpuinfo->vendor_id == NULL) { fwts_log_error(fw, "Cannot get CPU vendor_id"); return FWTS_ERROR; } if (strstr(fwts_cpuinfo->vendor_id, "AMD") || strstr(fwts_cpuinfo->vendor_id, "Hygon")) { if (klog != NULL) { if (fwts_klog_regex_find(fw, klog, "SYSCFG[MtrrFixDramModEn] not cleared by BIOS, clearing this bit") > 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "MTRRFixDramModEnBit", "The BIOS is expected to clear MtrrFixDramModEn bit, see for example " "\"BIOS and Kernel Developer's Guide for the AMD Athlon 64 and AMD " "Opteron Processors\" (26094 Rev. 3.30 February 2006), section " "\"13.2.1.2 SYSCFG Register\": \"The MtrrFixDramModEn bit should be set " "to 1 during BIOS initialization of the fixed MTRRs, then cleared to " "0 for operation.\""); else fwts_passed(fw, "No MtrrFixDramModEn error detected."); } } else fwts_skipped(fw, "CPU is not an AMD, cannot test."); return FWTS_OK; } static fwts_framework_minor_test mtrr_tests[] = { { mtrr_test0, "Validate MTRR default enabled." }, { mtrr_test1, "Validate the kernel MTRR IOMEM setup." }, { mtrr_test2, "Validate the MTRR setup across all processors." }, { mtrr_test3, "Test for AMD MtrrFixDramModEn being cleared by the BIOS." }, { NULL, NULL } }; static fwts_framework_ops mtrr_ops = { .description = "MTRR tests.", .init = mtrr_init, .deinit = mtrr_deinit, .minor_tests = mtrr_tests }; FWTS_REGISTER("mtrr", &mtrr_ops, FWTS_TEST_EARLY, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/bios/multiproc/000077500000000000000000000000001465205512700146265ustar00rootroot00000000000000src/bios/multiproc/mpcheck.c000066400000000000000000000427531465205512700164170ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include "fwts.h" #ifdef FWTS_ARCH_INTEL static fwts_mp_data mp_data; static bool fwts_mp_not_used = false; static inline fwts_log_level fwts_level(const fwts_log_level level) { return fwts_mp_not_used ? LOG_LEVEL_LOW : level; } static bool mpcheck_find_bus(const uint8_t id, const int depth) { fwts_list_link *entry; if (depth > 16) return false; /* too deep? */ fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); if (*data == FWTS_MP_BUS_ENTRY) { fwts_mp_bus_entry *bus_entry = fwts_list_data(fwts_mp_bus_entry *, entry); if (id == bus_entry->bus_id) return true; } if (*data == FWTS_MP_BUS_HIERARCHY_ENTRY) { fwts_mp_bus_hierarchy_entry *bus_hierarchy_entry = fwts_list_data(fwts_mp_bus_hierarchy_entry *, entry); if (id == bus_hierarchy_entry->bus_id) return mpcheck_find_bus(bus_hierarchy_entry->parent_bus, depth+1); } } return false; } static int mpcheck_test_cpu_entries(fwts_framework *fw) { bool failed = false; int n = 0; fwts_list_link *entry1; int bootstrap_cpu = -1; bool usable_cpu_found = false; fwts_list_foreach(entry1, &mp_data.entries) { uint8_t *data1 = fwts_list_data(uint8_t *, entry1); if (*data1 == FWTS_MP_CPU_ENTRY) { fwts_list_link *entry2; int m = 0; uint32_t phys_addr1 = mp_data.phys_addr + ((void *)data1 - (void *)mp_data.header); fwts_mp_processor_entry *cpu_entry1 = fwts_list_data(fwts_mp_processor_entry *, entry1); /* Check Local APIC ID is unique */ fwts_list_foreach(entry2, &mp_data.entries) { uint8_t *data2 = fwts_list_data(uint8_t *, entry2); uint32_t phys_addr2 = mp_data.phys_addr + ((void *)data2 - (void *)mp_data.header); if (*data2 == FWTS_MP_CPU_ENTRY) { if ((n < m) && (entry2 != entry1)) { fwts_mp_processor_entry *cpu_entry2 = fwts_list_data(fwts_mp_processor_entry *, entry2); if (cpu_entry1->local_apic_id == cpu_entry2->local_apic_id) { fwts_failed(fw, fwts_level(LOG_LEVEL_HIGH), "MPCPUEntryLAPICId", "CPU Entry %d (@0x%8.8" PRIx32 ")" " and %d (@0x%8.8" PRIx32 ") " "have the same Local APIC ID " "0x%2.2" PRIx8 ".", n, phys_addr1, m, phys_addr2, cpu_entry1->local_apic_id); failed = true; break; } } m++; } } /* if ((cpu_entry1->local_apic_version != 0x11) && (cpu_entry1->local_apic_version != 0x14)) { fwts_failed(fw, fwts_level(LOG_LEVEL_HIGH), "MPCPUEntryLAPICVersion", "CPU Entry %d (@0x%8.8" PRIx32 ") has an " "invalid Local APIC Version %2.2x, should be " "0x11 or 0x14.", n, phys_addr, cpu_entry1->local_apic_version); failed = true; } */ if (cpu_entry1->cpu_flags & 1) usable_cpu_found = true; if ((cpu_entry1->cpu_flags >> 1) & 1) { if (bootstrap_cpu != -1) { fwts_failed(fw, fwts_level(LOG_LEVEL_HIGH), "MPCPUEntryBootCPU", "CPU Entry %d (@0x%8.8" PRIx32 ") " "is marked as a boot CPU but CPU entry " "%d is the first boot CPU.", n, phys_addr1, bootstrap_cpu); failed = true; } else bootstrap_cpu = n; } n++; } } if (!usable_cpu_found) { fwts_failed(fw, fwts_level(LOG_LEVEL_HIGH), "MPCPUEntryUsable", "CPU entries 0..%d were not marked as usable. " "There should be at least one usable CPU.", n-1); failed = true; } if (!failed) fwts_passed(fw, "All %d CPU entries look sane.", n); return FWTS_OK; } static int mpcheck_test_bus_entries(fwts_framework *fw) { bool failed = false; int n = 0; fwts_list_link *entry; int prev_bus_id = -1; static const char *const bus_types[] = { "CBUS", "CBUSII", "EISA", "FUTURE", "INTERN", "ISA", "MBI", "MBII", "MCA", "MPI", "MPSA", "NUBUS", "PCI", "PCMCIA", "TC", "VL", "VME", "XPRESS", NULL, }; fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); if (*data == FWTS_MP_BUS_ENTRY) { int i; uint32_t phys_addr = mp_data.phys_addr + ((void *)data - (void *)mp_data.header); fwts_mp_bus_entry *bus_entry = fwts_list_data(fwts_mp_bus_entry *, entry); for (i = 0; bus_types[i] != NULL; i++) { if (strncmp(bus_types[i], (char*)bus_entry->bus_type, strlen(bus_types[i])) == 0) break; } if (bus_types[i] == NULL) { fwts_failed(fw, fwts_level(LOG_LEVEL_HIGH), "MPBusEntryBusType", "Bus Entry %d (@0x%8.8" PRIx32 ") has an " "unrecognised bus type: %6.6s", n, phys_addr, bus_entry->bus_type); } if (prev_bus_id == -1) { prev_bus_id = bus_entry->bus_id; if (prev_bus_id != 0) { fwts_failed(fw, fwts_level(LOG_LEVEL_HIGH), "MPBusEntryLAPICId", "Bus Entry %d (@0x%8.8" PRIx32 ") has a " "Local APIC ID 0x%2.2x and should be 0x00.", n, phys_addr, prev_bus_id); failed = true; } } else { if (bus_entry->bus_id < prev_bus_id) { fwts_failed(fw, fwts_level(LOG_LEVEL_HIGH), "MPBusEntryBusId", "Bus Entry %d (@0x%8.8" PRIx32 ") has a " "Bus ID 0x%2.2x and should be greater " "than 0x%2.2x.", n, phys_addr, bus_entry->bus_id, prev_bus_id); failed = true; } } n++; } } if (!failed) fwts_passed(fw, "All %d Bus Entries looked sane.", n); return FWTS_OK; } static int mpcheck_test_io_apic_entries(fwts_framework *fw) { bool failed = false; bool enabled = false; int n = 0; fwts_list_link *entry; fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); uint32_t phys_addr = mp_data.phys_addr + ((void *)data - (void *)mp_data.header); if (*data == FWTS_MP_IO_APIC_ENTRY) { fwts_mp_io_apic_entry *io_apic_entry = fwts_list_data(fwts_mp_io_apic_entry *, entry); if (io_apic_entry->address == 0) { fwts_failed(fw, fwts_level(LOG_LEVEL_HIGH), "MPIOAPICNullAddr", "IO APIC Entry %d (@0x%8.8" PRIx32 ") has an " "invalid NULL address, should be non-zero.", n, phys_addr); failed = true; } if (io_apic_entry->flags & 1) { enabled = true; } n++; } } if (!enabled) { fwts_failed(fw, fwts_level(LOG_LEVEL_HIGH), "MPIOAPICEnabled", "None of the %d IO APIC entries were enabled, " "at least one must be enabled.", n); failed = true; } if (!failed) fwts_passed(fw, "All %d IO APIC Entries look sane.", n); return FWTS_OK; } static bool mpcheck_find_io_apic(const uint8_t id) { fwts_list_link *entry; if (id == 0xff) return true; /* match all */ fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); #if 0 if (*data == FWTS_MP_CPU_ENTRY) { fwts_mp_processor_entry *cpu_entry = fwts_list_data(fwts_mp_processor_entry *, entry); if (id == cpu_entry->local_apic_id) return true; } #endif if (*data == FWTS_MP_IO_APIC_ENTRY) { fwts_mp_io_apic_entry *io_apic_entry = fwts_list_data(fwts_mp_io_apic_entry *, entry); if (id == io_apic_entry->id) return true; } } return false; } static int mpcheck_test_io_interrupt_entries(fwts_framework *fw) { bool failed = false; int n = 0; fwts_list_link *entry; fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); uint32_t phys_addr = mp_data.phys_addr + ((void *)data - (void *)mp_data.header); if (*data == FWTS_MP_IO_INTERRUPT_ENTRY) { fwts_mp_io_interrupt_entry *io_interrupt_entry = fwts_list_data(fwts_mp_io_interrupt_entry *, entry); if (io_interrupt_entry->type > 3) { fwts_failed(fw, fwts_level(LOG_LEVEL_HIGH), "MPIOIRQType", "IO Interrupt Entry %d (@0x%8.8" PRIx32 ") has a " "Type 0x%2.2" PRIx8 " and should be 0x00..0x03.", n, phys_addr, io_interrupt_entry->type); failed = true; } if (!mpcheck_find_io_apic(io_interrupt_entry->destination_io_apic_id)) { fwts_failed(fw, fwts_level(LOG_LEVEL_HIGH), "MPIOAPICId", "IO Interrupt Entry %d (@0x%8.8" PRIx32 ") has a " "Destination IO APIC ID 0x%2.2" PRIx8 " " "which has not been defined.", n, phys_addr, io_interrupt_entry->destination_io_apic_id); failed = true; } n++; } } if (!failed) fwts_passed(fw, "All %d IO Interrupt Entries look sane.", n); return FWTS_OK; } static int mpcheck_test_local_interrupt_entries(fwts_framework *fw) { bool failed = false; int n = 0; fwts_list_link *entry; fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); uint32_t phys_addr = mp_data.phys_addr + ((void *)data - (void *)mp_data.header); if (*data == FWTS_MP_LOCAL_INTERRUPT_ENTRY) { fwts_mp_local_interrupt_entry *local_interrupt_entry = fwts_list_data(fwts_mp_local_interrupt_entry *, entry); if (local_interrupt_entry->type > 3) { fwts_failed(fw, fwts_level(LOG_LEVEL_HIGH), "MPLocalIRQType", "Local Interrupt Entry %d (@0x%8.8" PRIx32 ") has a " "Type 0x%2.2" PRIx8 " and should be 0x00..0x03.", n, phys_addr, local_interrupt_entry->type); failed = true; } #if 0 if (!mpcheck_find_io_apic(local_interrupt_entry->destination_local_apic_id)) { fwts_failed(fw, fwts_level(LOG_LEVEL_HIGH), "MPLocalIRQDestIRQAPIDId", "Local Interrupt Entry %d (@0x%8.8" PRIx32 ") has a" "Destination IO APIC ID 0x%2.2" PRIx8 " " "which has not been defined.", n, phys_addr, local_interrupt_entry->destination_local_apic_id); failed = true; } #endif n++; } } if (!failed) fwts_passed(fw, "All %d Local Interrupt Entries look sane.", n); return FWTS_OK; } static int mpcheck_test_sys_addr_entries(fwts_framework *fw) { bool failed = false; int n = 0; fwts_list_link *entry; fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); if (*data == FWTS_MP_SYS_ADDR_ENTRY) { uint32_t phys_addr = mp_data.phys_addr + ((void *)data - (void *)mp_data.header); fwts_mp_system_address_space_entry *sys_addr_entry = fwts_list_data(fwts_mp_system_address_space_entry *, entry); if (!mpcheck_find_bus(sys_addr_entry->bus_id, 0)) { fwts_failed(fw, fwts_level(LOG_LEVEL_MEDIUM), "MPSysAddrSpaceBusId", "System Address Space Mapping Entry %d (@0x%8.8" PRIx32 ") " "has an Bus ID 0x%2.2" PRIx8 " " "that is not defined in any of the Bus Entries.", n, phys_addr, sys_addr_entry->bus_id); failed = true; } if (sys_addr_entry->address_type > 3) { fwts_failed(fw, fwts_level(LOG_LEVEL_MEDIUM), "MPSysAddrSpaceType", "System Address Space Mapping Entry %d (@0x%8.8" PRIx32 ") " "has an incorrect Address Type: %2.2" PRIx8 ", " "should be 0..3.", n, phys_addr, sys_addr_entry->address_type); failed = true; } if (sys_addr_entry->address_length == 0) { fwts_failed(fw, fwts_level(LOG_LEVEL_MEDIUM), "MPSysAddrSpaceAddrLength", "System Address Space Mapping Entry %d " "(@0x%8.8" PRIx32 ") has a " "zero sized Address Length.", n, phys_addr); failed = true; } n++; } } if (!failed) fwts_passed(fw, "All %d System Address Space Mapping Entries looks sane.", n); return FWTS_OK; } static int mpcheck_test_bus_hierarchy_entries(fwts_framework *fw) { bool failed = false; int n = 0; fwts_list_link *entry; fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); if (*data == FWTS_MP_BUS_HIERARCHY_ENTRY) { uint32_t phys_addr = mp_data.phys_addr + ((void *)data - (void *)mp_data.header); fwts_mp_bus_hierarchy_entry *bus_hierarchy_entry = fwts_list_data(fwts_mp_bus_hierarchy_entry *, entry); if (bus_hierarchy_entry->length != 8) { fwts_failed(fw, fwts_level(LOG_LEVEL_MEDIUM), "MPBusHieraracyLength", "Bus Hierarchy Entry %d (@x%8.8" PRIx32 ") " "length was 0x%2.2" PRIx8 ", it should be 0x08.", n, phys_addr, bus_hierarchy_entry->length); failed = true; } if (!mpcheck_find_bus(bus_hierarchy_entry->parent_bus, 0)) { fwts_failed(fw, fwts_level(LOG_LEVEL_MEDIUM), "MPBusHierarchyParents", "Bus Hierarchy Entry %d (@x%8.8" PRIx32 ") " "did not have parents that " "connected to a top level Bus entry.", n, phys_addr); failed = true; } n++; } } if (!failed) fwts_passed(fw, "All %d Bus Hierarchy Entries look sane.", n); return FWTS_OK; } static int mpcheck_test_compat_bus_address_space_entries(fwts_framework *fw) { bool failed = false; int n = 0; fwts_list_link *entry; fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); if (*data == FWTS_MP_COMPAT_BUS_ADDRESS_SPACE_ENTRY) { uint32_t phys_addr = mp_data.phys_addr + ((void *)data - (void *)mp_data.header); fwts_mp_compat_bus_address_space_entry *compat_bus_entry = fwts_list_data(fwts_mp_compat_bus_address_space_entry*, entry); if (compat_bus_entry->length != 8) { fwts_failed(fw, fwts_level(LOG_LEVEL_MEDIUM), "MPCompatBusLength", "Compatible Bus Address Space Entry %d " "(@x%8.8" PRIx32 ") " "length was 0x%2.2" PRIx8 ", it should be 0x08.", n, phys_addr, compat_bus_entry->length); failed = true; } if (compat_bus_entry->range_list > 1) { fwts_failed(fw, fwts_level(LOG_LEVEL_MEDIUM), "MPCompatBusRangeList", "Compatible Bus Address Space Entry %d " "(@x%8.8" PRIx32 ") Range List was 0x%8.8" PRIx32 ", it should be 0x00 or 0x01.", n, phys_addr, compat_bus_entry->range_list); failed = true; } n++; } } if (!failed) fwts_passed(fw, "All %d Compatible Bus Address Space Entries look sane.", n); return FWTS_OK; } static void mpcheck_mp_used(fwts_framework *fw) { fwts_list *klog; /* Can't read kernel log, not fatal */ if ((klog = fwts_klog_read()) == NULL) return; /* * Kernel reported that MADT is being used, so MP tables are ignored, * this is only issues when the ACPI LAPIC is being used AND the * ACPI IOAPIC is used too. */ if (fwts_klog_regex_find(fw, klog, "Using ACPI \\(MADT\\) for SMP configuration information") > 0) { fwts_mp_not_used = true; fwts_log_info(fw, "The kernel is using the ACPI MADT for SMP " "configuration information, so the Multiprocessor Tables " "are not used by the kernel. Any errors in the tables " "will not affect the operation of Linux unless it is " "booted with ACPI disabled."); fwts_log_nl(fw); fwts_log_info(fw, "NOTE: Since ACPI is being used in preference to the " "Multiprocessor Tables, any errors found in the mpcheck " "tests will be tagged as LOW errors."); fwts_log_nl(fw); } fwts_klog_free(klog); } static int mpcheck_init(fwts_framework *fw) { mpcheck_mp_used(fw); if (fwts_mp_data_get(&mp_data) != FWTS_OK) { fwts_log_info(fw, "Failed to find the Multiprocessor Table data, skipping mpcheck test."); if (fwts_mp_not_used) fwts_log_info(fw, "NOTE: Since the ACPI MADT is being used instead for " "SMP configuration, this is not a problem."); return FWTS_SKIP; } return FWTS_OK; } static int mpcheck_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); return fwts_mp_data_free(&mp_data); } static int mpcheck_test_header(fwts_framework *fw) { bool failed = false; if (strncmp((char*)mp_data.header->signature, FWTS_MP_HEADER_SIGNATURE, 4)) { fwts_failed(fw, fwts_level(LOG_LEVEL_MEDIUM), "MPHeaderSig", "MP header signature should be %s, got %4.4s.", FWTS_MP_HEADER_SIGNATURE, mp_data.header->signature); failed = true; } if ((mp_data.header->spec_rev != 1) && (mp_data.header->spec_rev != 4)) { fwts_failed(fw, fwts_level(LOG_LEVEL_MEDIUM), "MPHeaderRevision", "MP header spec revision should be 1 or 4, got %" PRIx8 ".", mp_data.header->spec_rev); failed = true; } if (mp_data.header->lapic_address == 0) { fwts_failed(fw, fwts_level(LOG_LEVEL_MEDIUM), "MPHeaderLAPICAddrNull", "MP header LAPIC address is NULL."); failed = true; } if (!failed) fwts_passed(fw, "MP header looks sane."); return FWTS_OK; } static fwts_framework_minor_test mpcheck_tests[] = { { mpcheck_test_header, "Test MP header." }, { mpcheck_test_cpu_entries, "Test MP CPU entries." }, { mpcheck_test_bus_entries, "Test MP Bus entries." }, { mpcheck_test_io_apic_entries, "Test MP IO APIC entries." }, { mpcheck_test_io_interrupt_entries, "Test MP IO Interrupt entries." }, { mpcheck_test_local_interrupt_entries, "Test MP Local Interrupt entries." }, { mpcheck_test_sys_addr_entries, "Test MP System Address entries." }, { mpcheck_test_bus_hierarchy_entries, "Test MP Bus Hierarchy entries." }, { mpcheck_test_compat_bus_address_space_entries, "Test MP Compatible Bus Address Space entries." }, { NULL, NULL } }; static fwts_framework_ops mpcheck_ops = { .description = "MultiProcessor Tables tests.", .init = mpcheck_init, .deinit = mpcheck_deinit, .minor_tests = mpcheck_tests, }; FWTS_REGISTER("mpcheck", &mpcheck_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/bios/multiproc/mpdump.c000066400000000000000000000472531465205512700163070ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL static const char *mpdump_inttype[] = { "INT", "NMI", "SMI", "ExtInt" }; static const char *mpdump_po[] = { "Conforms to bus specification", "Active High", "Reserved", "Active Low" }; static const char *mpdump_po_short[] = { "Con", "Hi ", "Rsv", "Lo " }; static const char *mpdump_el[] = { "Conforms to bus specification", "Edge-Triggered", "Reserved", "Level-Triggered" }; static const char *mpdump_el_short[] = { "Con", "Edg", "Rsv", "Lvl" }; static const char *mpdump_sys_addr_type[] = { "I/O", "Memory", "Prefetch" }; static const char *mpdump_yes_no[] = { "No", "Yes" }; static void mpdump_dump_header( fwts_framework *fw, const fwts_mp_config_table_header *header, const uint32_t phys_addr) { fwts_log_info_verbatim(fw,"MultiProcessor Header: (@0x%8.8x)", phys_addr); fwts_log_info_verbatim(fw," Signature: %4.4s\n", header->signature); fwts_log_info_verbatim(fw," Table Length: 0x%x bytes\n", header->base_table_length); fwts_log_info_verbatim(fw," Spec Revision: %d (1.%d)\n", header->spec_rev, header->spec_rev); fwts_log_info_verbatim(fw," OEM ID: %8.8s\n", header->oem_id); fwts_log_info_verbatim(fw," Product ID: %12.12s\n", header->product_id); fwts_log_info_verbatim(fw," Entry Count: 0x%x\n", header->entry_count); fwts_log_info_verbatim(fw," LAPIC Address: 0x%8.8x\n", header->lapic_address); fwts_log_info_verbatim(fw," Extended Length: 0x%x bytes\n", header->extended_table_length); fwts_log_nl(fw); } static void mpdump_dump_cpu_entry(fwts_framework *fw, const void *data, const uint32_t phys_addr) { const fwts_mp_processor_entry *cpu_entry = (const fwts_mp_processor_entry *)data; fwts_log_info_verbatim(fw, "CPU Entry: (@0x%8.8x)", phys_addr); fwts_log_info_verbatim(fw, " Local APIC ID: 0x%2.2x", cpu_entry->local_apic_id); fwts_log_info_verbatim(fw, " Local APIC Version: 0x%2.2x", cpu_entry->local_apic_version); fwts_log_info_verbatim(fw, " CPU Flags: 0x%2.2x", cpu_entry->cpu_flags); fwts_log_info_verbatim(fw, " Usable: %1.1d (%s)", cpu_entry->cpu_flags & 1, mpdump_yes_no[cpu_entry->cpu_flags & 1]); fwts_log_info_verbatim(fw, " Bootstrap CPU: %1.1d (%s)", (cpu_entry->cpu_flags >> 1) & 1, mpdump_yes_no[(cpu_entry->cpu_flags >> 1) & 1]); fwts_log_info_verbatim(fw, " CPU Signature:"); fwts_log_info_verbatim(fw, " Stepping: 0x%2.2x", cpu_entry->cpu_signature & 0xf); fwts_log_info_verbatim(fw, " Model: 0x%2.2x", (cpu_entry->cpu_signature >> 4) & 0xf); fwts_log_info_verbatim(fw, " Family: 0x%2.2x", (cpu_entry->cpu_signature >> 8) & 0xf); fwts_log_info_verbatim(fw, " Feature Flags:"); fwts_log_info_verbatim(fw, " FPU present: %1.1d (%s)", (cpu_entry->feature_flags) & 1, mpdump_yes_no[(cpu_entry->feature_flags) & 1]); fwts_log_info_verbatim(fw, " MCE: %1.1d (%s)", (cpu_entry->feature_flags >> 7) & 1, mpdump_yes_no[(cpu_entry->feature_flags >> 7) & 1]); fwts_log_info_verbatim(fw, " CPMPXCHG8B: %1.1d (%s)", (cpu_entry->feature_flags >> 8) & 1, mpdump_yes_no[(cpu_entry->feature_flags >> 8) & 1]); fwts_log_info_verbatim(fw, " APIC enabled: %1.1d (%s)", (cpu_entry->feature_flags >> 9) & 1, mpdump_yes_no[(cpu_entry->feature_flags >> 9) & 1]); fwts_log_nl(fw); } static void mpdump_dump_bus_entry( fwts_framework *fw, const void *data, const uint32_t phys_addr) { const fwts_mp_bus_entry *bus_entry = (const fwts_mp_bus_entry *)data; fwts_log_info_verbatim(fw, "Bus Entry: (@0x%8.8x)", phys_addr); fwts_log_info_verbatim(fw, " Bus ID: 0x%2.2x", bus_entry->bus_id); fwts_log_info_verbatim(fw, " Bus Type: %6.6s", bus_entry->bus_type); fwts_log_nl(fw); } static void mpdump_dump_io_apic_entry( fwts_framework *fw, const void *data, const uint32_t phys_addr) { const fwts_mp_io_apic_entry *io_apic_entry = (const fwts_mp_io_apic_entry *)data; fwts_log_info_verbatim(fw, "IO APIC Entry: (@0x%8.8x)", phys_addr); fwts_log_info_verbatim(fw, " IO APIC ID: 0x%2.2x", io_apic_entry->id); fwts_log_info_verbatim(fw, " IO APIC Version: 0x%2.2x", io_apic_entry->version); fwts_log_info_verbatim(fw, " Flags: 0x%2.2x", io_apic_entry->flags); fwts_log_info_verbatim(fw, " Address: 0x%8.8x", io_apic_entry->address); fwts_log_nl(fw); } static void mpdump_dump_io_interrupt_entry( fwts_framework *fw, const void *data, const uint32_t phys_addr) { const fwts_mp_io_interrupt_entry *io_interrupt_entry = (const fwts_mp_io_interrupt_entry *)data; fwts_log_info_verbatim(fw, "IO Interrupt Assignment Entry: (@0x%8.8x)", phys_addr); fwts_log_info_verbatim(fw, " Interrupt Type: 0x%2.2x (%s)", io_interrupt_entry->type, io_interrupt_entry->type < 4 ? mpdump_inttype[io_interrupt_entry->type] : "Unknown"); fwts_log_info_verbatim(fw, " Flags: 0x%4.4x", io_interrupt_entry->flags); fwts_log_info_verbatim(fw, " PO (Polarity) %1.1d (%s)", io_interrupt_entry->flags & 2, mpdump_po[io_interrupt_entry->flags & 2]); fwts_log_info_verbatim(fw, " EL (Trigger) %1.1d (%s)", (io_interrupt_entry->flags >> 2) & 2, mpdump_el[(io_interrupt_entry->flags >> 2) & 2]); fwts_log_info_verbatim(fw, " Src Bus ID: 0x%2.2x", io_interrupt_entry->source_bus_id); fwts_log_info_verbatim(fw, " Src Bus IRQ 0x%2.2x", io_interrupt_entry->source_bus_irq); fwts_log_info_verbatim(fw, " Dst I/O APIC: 0x%2.2x", io_interrupt_entry->destination_io_apic_id); fwts_log_info_verbatim(fw, " Dst I/O APIC INTIN: 0x%2.2x", io_interrupt_entry->destination_io_apic_intin); fwts_log_nl(fw); } static void mpdump_dump_local_interrupt_entry( fwts_framework *fw, const void *data, const uint32_t phys_addr) { const fwts_mp_local_interrupt_entry *local_interrupt_entry = (const fwts_mp_local_interrupt_entry *)data; fwts_log_info_verbatim(fw, "Local Interrupt Assignment Entry: (@0x%8.8x)", phys_addr); fwts_log_info_verbatim(fw, " Interrupt Type: 0x%2.2x (%s)", local_interrupt_entry->type, local_interrupt_entry->type < 4 ? mpdump_inttype[local_interrupt_entry->type] : "Unknown"); fwts_log_info_verbatim(fw, " Flags: 0x%4.4x", local_interrupt_entry->flags); fwts_log_info_verbatim(fw, " PO (Polarity) %1.1d (%s)", local_interrupt_entry->flags & 2, mpdump_po[local_interrupt_entry->flags & 2]); fwts_log_info_verbatim(fw, " EL (Trigger) %1.1d (%s)", (local_interrupt_entry->flags >> 2) & 2, mpdump_el[(local_interrupt_entry->flags >> 2) & 2]); fwts_log_info_verbatim(fw, " Src Bus ID: 0x%2.2x", local_interrupt_entry->source_bus_id); fwts_log_info_verbatim(fw, " Src Bus IRQ 0x%2.2x", local_interrupt_entry->source_bus_irq); fwts_log_info_verbatim(fw, " Dst I/O APIC: 0x%2.2x", local_interrupt_entry->destination_local_apic_id); fwts_log_info_verbatim(fw, " Dst I/O APIC INTIN: 0x%2.2x", local_interrupt_entry->destination_local_apic_intin); fwts_log_nl(fw); } static void mpdump_dump_sys_addr_entry( fwts_framework *fw, const void *data, const uint32_t phys_addr) { const fwts_mp_system_address_space_entry *sys_addr_entry = (const fwts_mp_system_address_space_entry *)data; fwts_log_info_verbatim(fw, "System Address Space Mapping Entry: (@0x%8.8x)", phys_addr); fwts_log_info_verbatim(fw, " Bus ID: 0x%2.2x", sys_addr_entry->bus_id); fwts_log_info_verbatim(fw, " Address Type: 0x%2.2x (%s)", sys_addr_entry->address_type, sys_addr_entry->address_type < 3 ? mpdump_sys_addr_type[sys_addr_entry->address_type] : "Unknown"); fwts_log_info_verbatim(fw, " Address Start: 0x%16.16llx", (unsigned long long)sys_addr_entry->address_base); fwts_log_info_verbatim(fw, " Address End: 0x%16.16llx", (unsigned long long)sys_addr_entry->address_base + sys_addr_entry->address_length); fwts_log_info_verbatim(fw, " Address Length 0x%16.16llx", (unsigned long long)sys_addr_entry->address_length); fwts_log_nl(fw); } static void mpdump_dump_bus_hierarchy_entry( fwts_framework *fw, const void *data, const uint32_t phys_addr) { const fwts_mp_bus_hierarchy_entry *bus_hierarchy_entry = (const fwts_mp_bus_hierarchy_entry*)data; fwts_log_info_verbatim(fw, "Bus Hierarchy Descriptor Entry: (@0x%8.8x)", phys_addr); fwts_log_info_verbatim(fw, " Bus ID: 0x%2.2x", bus_hierarchy_entry->bus_id); fwts_log_info_verbatim(fw, " Bus Information: 0x%1.1x", bus_hierarchy_entry->bus_info & 0xf); fwts_log_info_verbatim(fw, " Parent Bus: 0x%8.8x", bus_hierarchy_entry->parent_bus); fwts_log_nl(fw); } static void multproc_dump_compat_bus_address_space_entry( fwts_framework *fw, const void *data, const uint32_t phys_addr) { const fwts_mp_compat_bus_address_space_entry *const compat_bus_entry = (const fwts_mp_compat_bus_address_space_entry*)data; fwts_log_info_verbatim(fw, "Compatible Bus Hierarchy Descriptor Entry: (@0x%8.8x)", phys_addr); fwts_log_info_verbatim(fw, " Bus ID: 0x%2.2x", compat_bus_entry->bus_id); fwts_log_info_verbatim(fw, " Address Mod: 0x%2.2x", compat_bus_entry->address_mod); fwts_log_info_verbatim(fw, " Predefine Range: 0x%8.8x", compat_bus_entry->range_list); fwts_log_nl(fw); } static fwts_mp_data mp_data; static int mpdump_init(fwts_framework *fw) { if (fwts_mp_data_get(&mp_data) != FWTS_OK) { fwts_log_error(fw, "Failed to get _MP_ data from firmware."); return FWTS_SKIP; } return FWTS_OK; } static int mpdump_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); return fwts_mp_data_free(&mp_data); } static int mpdump_compare_bus(void *data1, void *data2) { const fwts_mp_bus_entry *bus_entry1 = (const fwts_mp_bus_entry *)data1; const fwts_mp_bus_entry *bus_entry2 = (const fwts_mp_bus_entry *)data2; return bus_entry1->bus_id - bus_entry2->bus_id; } static void mpdump_dump_bus(fwts_framework *fw) { fwts_list_link *entry; fwts_list sorted; fwts_list_init(&sorted); fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); if (*data == FWTS_MP_BUS_ENTRY) fwts_list_add_ordered(&sorted, data, mpdump_compare_bus); } fwts_log_info_verbatim(fw, "Bus:"); fwts_log_info_verbatim(fw, " ID Type"); fwts_list_foreach(entry, &sorted) { fwts_mp_bus_entry *bus_entry = fwts_list_data(fwts_mp_bus_entry *, entry); fwts_log_info_verbatim(fw, " %3d %6.6s", bus_entry->bus_id, bus_entry->bus_type); } fwts_log_nl(fw); fwts_list_free_items(&sorted, NULL); } static int mpdump_compare_io_irq(void *data1, void *data2) { const fwts_mp_io_interrupt_entry *entry1 = (const fwts_mp_io_interrupt_entry*)data1; const fwts_mp_io_interrupt_entry *entry2 = (const fwts_mp_io_interrupt_entry*)data2; return (entry1->source_bus_irq + (entry1->source_bus_id * 256)) - (entry2->source_bus_irq + (entry2->source_bus_id * 256)); } static int mpdump_compare_local_irq(void *data1, void *data2) { const fwts_mp_local_interrupt_entry *entry1 = (const fwts_mp_local_interrupt_entry*)data1; const fwts_mp_local_interrupt_entry *entry2 = (const fwts_mp_local_interrupt_entry*)data2; return entry1->source_bus_irq - entry2->source_bus_irq; } static char *mpdump_find_bus_name(uint8_t bus_id) { fwts_list_link *entry; fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); if (*data == FWTS_MP_BUS_ENTRY) { fwts_mp_bus_entry *bus_entry = fwts_list_data(fwts_mp_bus_entry *, entry); if (bus_entry->bus_id == bus_id) return (char*)&bus_entry->bus_type; } } return "Unknown"; } static char *mpdump_dst_io_apic(const uint8_t apic) { if (apic == 255) return "all"; else { static char buffer[4]; snprintf(buffer, sizeof(buffer), "%d", apic); return buffer; } } static uint8_t mpdump_get_apic_id(const void *data) { const uint8_t *which = (const uint8_t*)data; if (*which == FWTS_MP_CPU_ENTRY) { const fwts_mp_processor_entry *cpu_entry = (const fwts_mp_processor_entry *)data; return cpu_entry->local_apic_id; } if (*which == FWTS_MP_IO_APIC_ENTRY) { const fwts_mp_io_apic_entry *io_apic_entry = (const fwts_mp_io_apic_entry *)data; return io_apic_entry->id; } return 0xff; } static int mpdump_compare_apic_id(void *data1, void *data2) { const uint8_t val1 = mpdump_get_apic_id(data1); const uint8_t val2 = mpdump_get_apic_id(data2); return (int)val1 - (int)val2; } static void mpdump_dump_apics(fwts_framework *fw) { fwts_list_link *entry; fwts_list sorted; fwts_list_init(&sorted); fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); if ((*data == FWTS_MP_CPU_ENTRY) || (*data == FWTS_MP_IO_APIC_ENTRY)) fwts_list_add_ordered(&sorted, data, mpdump_compare_apic_id); } fwts_log_info_verbatim(fw, "APIC IDs:"); fwts_log_info_verbatim(fw, " ID Type"); fwts_list_foreach(entry, &sorted) { uint8_t *data = fwts_list_data(uint8_t *, entry); fwts_log_info_verbatim(fw, " %3d %s APIC", mpdump_get_apic_id(data), (*data == FWTS_MP_CPU_ENTRY) ? "CPU Local" : "I/O"); } fwts_log_nl(fw); fwts_list_free_items(&sorted, NULL); } static void mpdump_dump_irq_table(fwts_framework *fw) { fwts_list_link *entry; fwts_list sorted; fwts_list_init(&sorted); fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); if (*data == FWTS_MP_IO_INTERRUPT_ENTRY) fwts_list_add_ordered(&sorted, data, mpdump_compare_io_irq); } fwts_log_info_verbatim(fw, "IO Interrupts:"); fwts_log_info_verbatim(fw, " Src Bus Src Bus Src Bus Dst I/O Dst I/O Type Polarity Trigger"); fwts_log_info_verbatim(fw, " ID Type IRQ APIC APIC INTIN"); fwts_list_foreach(entry, &sorted) { fwts_mp_io_interrupt_entry *io_interrupt_entry = fwts_list_data(fwts_mp_io_interrupt_entry *, entry); fwts_log_info_verbatim(fw, " %3d %-6.6s %3d %3.3s %3d %-6.6s %-7.7s %-7.7s", io_interrupt_entry->source_bus_id, mpdump_find_bus_name(io_interrupt_entry->source_bus_id), io_interrupt_entry->source_bus_irq, mpdump_dst_io_apic(io_interrupt_entry->destination_io_apic_id), io_interrupt_entry->destination_io_apic_intin, io_interrupt_entry->type < 4 ? mpdump_inttype[io_interrupt_entry->type] : "Unknown", mpdump_po_short[io_interrupt_entry->flags & 2], mpdump_el_short[(io_interrupt_entry->flags >> 2) & 2]); } fwts_log_nl(fw); fwts_list_free_items(&sorted, NULL); fwts_list_init(&sorted); fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); if (*data == FWTS_MP_LOCAL_INTERRUPT_ENTRY) fwts_list_add_ordered(&sorted, data, mpdump_compare_local_irq); } fwts_log_info_verbatim(fw, "Local Interrupts:"); fwts_log_info_verbatim(fw, " Src Bus Src Bus Src Bus Dst I/O Dst I/O Type Polarity Trigger"); fwts_log_info_verbatim(fw, " ID Type IRQ APIC APIC INTIN"); fwts_list_foreach(entry, &sorted) { fwts_mp_local_interrupt_entry *local_interrupt_entry = fwts_list_data(fwts_mp_local_interrupt_entry *, entry); fwts_log_info_verbatim(fw, " %3d %-6.6s %3d %3.3s %3d %-6.6s %-7.7s %-7.7s", local_interrupt_entry->source_bus_id, mpdump_find_bus_name(local_interrupt_entry->source_bus_id), local_interrupt_entry->source_bus_irq, mpdump_dst_io_apic(local_interrupt_entry->destination_local_apic_id), local_interrupt_entry->destination_local_apic_intin, local_interrupt_entry->type < 4 ? mpdump_inttype[local_interrupt_entry->type] : "Unknown", mpdump_po_short[local_interrupt_entry->flags & 2], mpdump_el_short[(local_interrupt_entry->flags >> 2) & 2]); } fwts_log_nl(fw); fwts_log_info_verbatim(fw, "Key: Con - Conforms to bus spec, Hi - Active High, Lo - Active Lo"); fwts_log_info_verbatim(fw, " Rsv - Reserved, Lvl - Level Triggered, Edg - Edge Triggered"); fwts_log_nl(fw); fwts_list_free_items(&sorted, NULL); } static int mpdump_compare_system_address_space(void *data1, void *data2) { const fwts_mp_system_address_space_entry *sys_addr_entry1 = (const fwts_mp_system_address_space_entry *)data1; const fwts_mp_system_address_space_entry *sys_addr_entry2 = (const fwts_mp_system_address_space_entry *)data2; const int64_t diff = sys_addr_entry1->address_base - sys_addr_entry2->address_base; if (diff == 0) return 0; else if (diff < 0) return -1; else return 0; } static void mpdump_dump_system_address_table(fwts_framework *fw) { fwts_list_link *entry; fwts_list sorted; fwts_list_init(&sorted); fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); if (*data == 128) fwts_list_add_ordered(&sorted, data, mpdump_compare_system_address_space); } fwts_log_info_verbatim(fw, "System Address Table:"); fwts_log_info_verbatim(fw, " Start Address End Address Bus ID Type"); fwts_list_foreach(entry, &sorted) { fwts_mp_system_address_space_entry *sys_addr_entry = fwts_list_data(fwts_mp_system_address_space_entry *, entry); fwts_log_info_verbatim(fw, " %16.16llx - %16.16llx %3d %s", (unsigned long long)sys_addr_entry->address_base, (unsigned long long)sys_addr_entry->address_base + sys_addr_entry->address_length, sys_addr_entry->bus_id, sys_addr_entry->address_type < 3 ? mpdump_sys_addr_type[sys_addr_entry->address_type] : "Unknown"); } fwts_list_free_items(&sorted, NULL); } static int mpdump_test1(fwts_framework *fw) { fwts_list_link *entry; fwts_infoonly(fw); mpdump_dump_header(fw, mp_data.header, mp_data.phys_addr); fwts_list_foreach(entry, &mp_data.entries) { uint8_t *data = fwts_list_data(uint8_t *, entry); uint32_t phys_addr = mp_data.phys_addr + ((void *)data - (void *)mp_data.header); switch (*data) { case FWTS_MP_CPU_ENTRY: mpdump_dump_cpu_entry(fw, data, phys_addr); break; case FWTS_MP_BUS_ENTRY: mpdump_dump_bus_entry(fw, data, phys_addr); break; case FWTS_MP_IO_APIC_ENTRY: mpdump_dump_io_apic_entry(fw, data, phys_addr); break; case FWTS_MP_IO_INTERRUPT_ENTRY: mpdump_dump_io_interrupt_entry(fw, data, phys_addr); break; case FWTS_MP_LOCAL_INTERRUPT_ENTRY: mpdump_dump_local_interrupt_entry(fw, data, phys_addr); break; case FWTS_MP_SYS_ADDR_ENTRY: mpdump_dump_sys_addr_entry(fw, data, phys_addr); break; case FWTS_MP_BUS_HIERARCHY_ENTRY: mpdump_dump_bus_hierarchy_entry(fw, data, phys_addr); break; case FWTS_MP_COMPAT_BUS_ADDRESS_SPACE_ENTRY: multproc_dump_compat_bus_address_space_entry(fw, data, phys_addr); break; default: break; } } fwts_log_underline(fw->results, '-'); fwts_log_info(fw, "Collated Data:"); fwts_log_nl(fw); mpdump_dump_bus(fw); mpdump_dump_apics(fw); mpdump_dump_irq_table(fw); mpdump_dump_system_address_table(fw); return FWTS_OK; } static fwts_framework_minor_test mpdump_tests[] = { { mpdump_test1, "Dump Multi Processor Data." }, { NULL, NULL } }; static fwts_framework_ops mpdump_ops = { .description = "Dump MultiProcessor Data.", .init = mpdump_init, .deinit = mpdump_deinit, .minor_tests = mpdump_tests, }; FWTS_REGISTER("mpdump", &mpdump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS | FWTS_FLAG_ROOT_PRIV) #endif src/bios/pciirq/000077500000000000000000000000001465205512700140775ustar00rootroot00000000000000src/bios/pciirq/pciirq.c000066400000000000000000000177101465205512700155400ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include "fwts.h" #ifdef FWTS_ARCH_INTEL /* PCI IRQ Routing Table, see http://www.microsoft.com/taiwan/whdc/archive/pciirq.mspx */ #define PCIIRQ_REGION_START (0x000f0000) #define PCIIRQ_REGION_END (0x000fffff) #define PCIIRQ_REGION_SIZE (PCIIRQ_REGION_END - PCIIRQ_REGION_START) #define RESERVED_SIZE (11) typedef struct { uint8_t link; uint16_t bitmap; } __attribute__ ((packed)) INT_entry; typedef struct { uint8_t pci_bus_number; uint8_t pci_dev_number; INT_entry INT[4]; uint8_t slot_number; uint8_t reserved; } __attribute__ ((packed)) slot_entry; typedef struct { uint8_t signature[4]; uint16_t version; uint16_t table_size; uint8_t routers_bus; uint8_t routers_devfunc; uint16_t exclusive_irqs; uint32_t compatible_pci_router; uint32_t miniport_data; uint8_t reserved[RESERVED_SIZE]; uint8_t checksum; slot_entry slots[0]; } __attribute__ ((packed)) pci_irq_routing_table; static const char *pciirq_reserved(const uint8_t *data) { static char buf[1+ (RESERVED_SIZE * 5)]; char tmp[6]; int i; *buf = '\0'; for (i = 0; i < RESERVED_SIZE; i++) { snprintf(tmp, sizeof(tmp), "%s0x%2.2x", *buf ? ",": "", data[i]); strcat(buf, tmp); } return buf; } static const char *pciirq_irq_bitmap(uint16_t val) { static char buf[40]; *buf = '\0'; if (val) { int i; for (i = 0; i < 16; val >>= 1, i++) { if (val & 1) { char tmp[5]; snprintf(tmp, sizeof(tmp), "%s%d", *buf ? " ": "", i); strcat(buf, tmp); } } return buf; } else return "none"; } static int pciirq_test1(fwts_framework *fw) { uint8_t *mem; int i; int found = 0; static uint8_t empty_reserved[RESERVED_SIZE]; fwts_log_info(fw, "This test tries to find and sanity check the PCI IRQ Routing " "Table, as defined by " "http://www.microsoft.com/taiwan/whdc/archive/pciirq.mspx " " and described in pages 233-238 of PCI System Architecture, " "Fourth Edition, Mindshare, Inc. (1999). " "NOTE: The PCI IRQ Routing Table only really knows about ISA IRQs " "and is generally not used with APIC."); if ((mem = fwts_mmap(PCIIRQ_REGION_START, PCIIRQ_REGION_SIZE)) == FWTS_MAP_FAILED) { fwts_log_error(fw, "Cannot mmap firmware region."); return FWTS_ERROR; } if (fwts_safe_memread(mem, PCIIRQ_REGION_SIZE) != FWTS_OK) { fwts_log_error(fw, "Cannot read firmware region."); (void)fwts_munmap(mem, PCIIRQ_REGION_SIZE); return FWTS_ERROR; } for (i = 0; i < PCIIRQ_REGION_SIZE; i+= 16) { pci_irq_routing_table *pciirq = (pci_irq_routing_table*)(mem+i); if ((memcmp(pciirq->signature, "$PIR", 4) == 0) && (fwts_checksum(mem+i, pciirq->table_size) == 0)) { int j, k; slot_entry *slot; int slot_count = (pciirq->table_size - 32) / sizeof(slot_entry); int expected_size = (32 + (slot_count * sizeof(slot_entry))); bool slot_ok = true; fwts_log_nl(fw); fwts_log_info(fw, "Found PCI IRQ Routing Table at 0x%8.8x", PCIIRQ_REGION_START+i); fwts_log_info_verbatim(fw, " Signature : %4.4s", pciirq->signature); fwts_log_info_verbatim(fw, " Version : 0x%4.4x (%u.%u)", pciirq->version, pciirq->version >> 8, pciirq->version & 0xff); fwts_log_info_verbatim(fw, " Table Size : 0x%4.4x bytes (%d slot entries)", pciirq->table_size, (pciirq->table_size - 32) / 16); fwts_log_info_verbatim(fw, " PCI Router ID : %02x:%02x.%1x", pciirq->routers_bus, pciirq->routers_devfunc >> 3, pciirq->routers_devfunc & 0x7); fwts_log_info_verbatim(fw, " PCI Exclusive IRQs : 0x%4.4x (%s)", pciirq->exclusive_irqs, pciirq_irq_bitmap(pciirq->exclusive_irqs)); fwts_log_info_verbatim(fw, " Compatible PCI Router : %4.4x:%4.4x", pciirq->compatible_pci_router & 0xffff, pciirq->compatible_pci_router >> 16); fwts_log_info_verbatim(fw, " Miniport Data : 0x%8.8x%s", pciirq->miniport_data, pciirq->miniport_data ? "" : " (none)"); fwts_log_info_verbatim(fw, " Reserved : %s", pciirq_reserved(pciirq->reserved)); fwts_log_info_verbatim(fw, " Checksum : 0x%2.2x", pciirq->checksum); fwts_log_nl(fw); /* * Dump table */ fwts_log_info_verbatim(fw, "Bus:Dev Slot INTA# INTB# INTC# INTD#"); for (slot = pciirq->slots, j = 0; j < slot_count; j++, slot++) { char buffer[80]; char *ptr = buffer; ptr += snprintf(ptr, sizeof(buffer), " %2.2x:%2.2x %2.2x ", slot->pci_bus_number, slot->pci_dev_number >> 3, slot->slot_number); for (k = 0; k < 4; k++) { if (slot->INT[k].link) ptr += snprintf(ptr, sizeof(buffer) - (ptr - buffer), "%2.2x/%4.4x ", slot->INT[k].link, slot->INT[k].bitmap); else ptr += snprintf(ptr, sizeof(buffer) - (ptr - buffer), " "); } fwts_log_info_verbatim(fw, "%s", buffer); } fwts_log_nl(fw); found++; /* Minimal tests */ if (pciirq->compatible_pci_router == 0) fwts_failed(fw, LOG_LEVEL_LOW, "PCIIRQBadCompatPCIRouterID", "The Compatible PCI Interrupt Router was zero, which is " "probably undefined."); else fwts_passed(fw, "The Compatible PCI Interrupt Router is defined."); /* Bad sized table? */ if (expected_size == pciirq->table_size) fwts_passed(fw, "Table size was correct for %d slot entries.", slot_count); else fwts_failed(fw, LOG_LEVEL_LOW, "PCIIRQBadTableSize", "The table had %d slot entries and was expected " "to be %d bytes in size, in fact it was %d bytes.", slot_count, expected_size, (int)pciirq->table_size); /* Spec states reserved needs to be set to zero */ if (memcmp(pciirq->reserved, empty_reserved, RESERVED_SIZE)) fwts_failed(fw, LOG_LEVEL_LOW, "PCIIRQBadReserved", "The reserved region in the table should be set " "to zero, however some of the data is non-zero " "and therefore non-compliant."); else fwts_passed(fw, "Reserved region is set to zero."); /* * This is a fairly shallow test */ for (slot = pciirq->slots, j = 0; j < slot_count; j++, slot++) { for (k = 0; k < 4; k++) { if ((slot->INT[k].link != 0) && (slot->INT[k].bitmap == 0)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "PCIIRQLinkBitmap", "Slot %d INT%c# has a has an link connected " "but the IRQ bitmap is not defined.", j, k + 'A'); slot_ok = false; } } } if (slot_ok) fwts_passed(fw, "All %d slots have sane looking link and IRQ bitmaps.", slot_count); } } if (found == 0) { fwts_log_nl(fw); fwts_log_info(fw, "Could not find PCI IRQ Routing Table. Since this table " "is for legacy BIOS systems which don't have ACPI support " "this is generally not a problem."); } else if (found > 1) fwts_failed(fw, LOG_LEVEL_HIGH, "PCIIRQMultipleTables", "Found %d instances of PCI Routing Tables, there should only be 1.", found); (void)fwts_munmap(mem, PCIIRQ_REGION_SIZE); return FWTS_OK; } static fwts_framework_minor_test pciirq_tests[] = { { pciirq_test1, "PCI IRQ Routing Table test." }, { NULL, NULL } }; static fwts_framework_ops pciirq_ops = { .description = "PCI IRQ Routing Table test.", .minor_tests = pciirq_tests }; FWTS_REGISTER("pciirq", &pciirq_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/bios/pnp/000077500000000000000000000000001465205512700134055ustar00rootroot00000000000000src/bios/pnp/pnp.c000066400000000000000000000142601465205512700143510ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include "fwts.h" #ifdef FWTS_ARCH_INTEL /* PNP BIOS header, see spec www.osdever.net/documents/PNPBIOSSpecification-v1.0a.pdf */ #define PNP_REGION_START (0x000f0000) #define PNP_REGION_END (0x000fffff) #define PNP_REGION_SIZE (PNP_REGION_END - PNP_REGION_START) #define PNP_CONTROL_FIELD_POLLING (0x1) #define PNP_VERSION_1 (0x10) /* In BCD */ #define PNP_SIGNATURE "$PnP" typedef struct { uint8_t signature[4]; uint8_t version; uint8_t length; uint16_t control_field; uint8_t checksum; uint32_t event_notification_addr; uint16_t RM_offset_entry; uint16_t RM_code_segment_addr; uint16_t PM_offset_entry; uint32_t PM_code_segment_addr; uint32_t OEM_device_ID; uint16_t RM_data_addr; uint32_t PM_data_addr; } __attribute__ ((packed)) pnp_header; static char *oem_device_id(const uint32_t id) { static char buf[12]; if (id == 0) return " (undefined)"; /* Encoded like EISA product identifiers, icky */ snprintf(buf, sizeof(buf), " (%c%c%c%02X%02X)", 0x40 + ((id >> 2) & 0x1f), 0x40 + ((id & 0x3) << 3) + ((id >> 13) & 0x7), 0x40 + ((id >> 8) & 0x1f), (id >> 16) & 0xff, (id >> 24) & 0xff); return buf; } static int pnp_test1(fwts_framework *fw) { uint8_t *mem; int i; int found = 0; static const char *pnp_control_field[] = { "Not supported", "Handled by polling", "Asynchronous", "Invalid" }; fwts_log_info(fw, "This test tries to find and sanity check the " "Plug and Play BIOS Support Installation Check structure."); if ((mem = fwts_mmap(PNP_REGION_START, PNP_REGION_SIZE)) == FWTS_MAP_FAILED) { fwts_log_error(fw, "Cannot mmap firmware region."); return FWTS_ERROR; } fwts_log_nl(fw); for (i = 0; i < PNP_REGION_SIZE; i+= 16) { pnp_header *pnp = (pnp_header*)(mem+i); /* Skip regions that are not readable */ if (fwts_safe_memread(pnp, sizeof(pnp_header)) != FWTS_OK) continue; if ((memcmp(pnp->signature, PNP_SIGNATURE, 4) == 0) && (fwts_checksum(mem+i, sizeof(pnp_header)) == 0)) { fwts_log_info(fw, "Found PnP Installation Check structure at 0x%8.8x", PNP_REGION_START+i); fwts_log_info_verbatim(fw, " Signature : %4.4s", pnp->signature); fwts_log_info_verbatim(fw, " Version : 0x%2.2x (%d.%d)", pnp->version, pnp->version >> 4, pnp->version & 0xf); fwts_log_info_verbatim(fw, " Length : 0x%4.4x bytes", pnp->length); fwts_log_info_verbatim(fw, " Control Field : 0x%4.4x (%s)", pnp->control_field, pnp_control_field[pnp->control_field & 0x3]); fwts_log_info_verbatim(fw, " Event Notification Flag Address : 0x%8.8x%s", pnp->event_notification_addr, pnp->event_notification_addr ? "" : " (undefined)"); fwts_log_info_verbatim(fw, " Real Mode 16 bit Code Address : 0x%4.4x:%4.4x", pnp->RM_code_segment_addr, pnp->RM_offset_entry); fwts_log_info_verbatim(fw, " Real Mode 16 bit Data Address : 0x%4.4x:%4.4x", pnp->RM_data_addr, 0); fwts_log_info_verbatim(fw, " 16 bit Protected Mode Code Address : 0x%8.8x", pnp->PM_code_segment_addr + pnp->PM_offset_entry); fwts_log_info_verbatim(fw, " 16 bit Protected Mode Data Address : 0x%8.8x", pnp->PM_data_addr); fwts_log_info_verbatim(fw, " OEM Device Identifier : 0x%8.8x%s", pnp->OEM_device_ID, oem_device_id(pnp->OEM_device_ID)); fwts_log_nl(fw); found++; /* Very simple sanity checks */ if (pnp->version == PNP_VERSION_1) fwts_passed(fw, "Version %u.%u detected.", PNP_VERSION_1 >> 4, PNP_VERSION_1 & 0xf); else fwts_failed(fw, LOG_LEVEL_LOW, "PNPStructBadVersion", "Version %u.%u detected, expecting version %u.%u", pnp->version >> 4, pnp->version & 0xf, PNP_VERSION_1 >> 4, PNP_VERSION_1 & 0xf); if (pnp->length == sizeof(pnp_header)) fwts_passed(fw, "PnP Installation Check structure is the " "correct length of %d bytes.", (int)sizeof(pnp_header)); else fwts_failed(fw, LOG_LEVEL_LOW, "PNPStructBadLength", "PnP Installation Check structure is the " "wrong length, got %d bytes, expected %d.", (int)pnp->length, (int)sizeof(pnp_header)); if ((pnp->control_field & 3) == PNP_CONTROL_FIELD_POLLING) { if (pnp->event_notification_addr != 0) fwts_passed(fw, "The control field indicates that " "polling is being used and the " "notification flag address is defined."); else fwts_failed(fw, LOG_LEVEL_LOW, "PNPStructBadFlagAddr", "The control field indicates that " "event notification is handled by " "polling the notification flag address " "however this address is not defined."); } } } if (found == 0) fwts_log_info(fw, "Could not find PnP BIOS Support Installation Check structure. " "This is not necessarily a failure."); else if (found > 1) fwts_failed(fw, LOG_LEVEL_HIGH, "PNPMultipleTables", "Found %d instances of PCI Routing Tables, there should only be 1.", found); (void)fwts_munmap(mem, PNP_REGION_SIZE); return FWTS_OK; } static fwts_framework_minor_test pnp_tests[] = { { pnp_test1, "PnP BIOS Support Installation structure test." }, { NULL, NULL } }; static fwts_framework_ops pnp_ops = { .description = "BIOS Support Installation structure test.", .minor_tests = pnp_tests }; FWTS_REGISTER("pnp", &pnp_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/bios/romdump/000077500000000000000000000000001465205512700142735ustar00rootroot00000000000000src/bios/romdump/romdump.c000066400000000000000000000053601465205512700161260ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #define BIOS_ROM_REGION_START (0x000c0000) #define BIOS_ROM_REGION_END (0x000fffff) #define BIOS_ROM_REGION_SIZE (BIOS_ROM_REGION_END - BIOS_ROM_REGION_START) #define BIOS_ROM_START (0x000f0000) #define BIOS_ROM_END (0x000fffff) #define BIOS_ROM_SIZE (BIOS_ROM_END - BIOS_ROM_START) #define BIOS_ROM_OFFSET (BIOS_ROM_START - BIOS_ROM_REGION_START) static void romdump_data( fwts_framework *fw, const uint8_t *data, const int offset, const int length) { char buffer[128]; int i; for (i = 0; i < length; i += 16) { fwts_dump_raw_data(buffer, sizeof(buffer), data + i, offset + i, 16); fwts_log_info_verbatim(fw, "%s", buffer); } } static int romdump_test1(fwts_framework *fw) { uint8_t *mem; int i; if ((mem = fwts_mmap(BIOS_ROM_REGION_START, BIOS_ROM_REGION_SIZE)) == FWTS_MAP_FAILED) { fwts_log_error(fw, "Cannot mmap BIOS ROM region."); return FWTS_ERROR; } for (i = 0; i < BIOS_ROM_REGION_SIZE; i += 512) { /* Ensure we can safely read the memory */ if (fwts_safe_memread(mem + i, 512) != FWTS_OK) continue; if ((*(mem + i) == 0x55) && (*(mem + i + 1) == 0xaa)) { int length = *(mem + i + 2) << 9; fwts_log_info(fw, "Found ROM: %x..%x (%d bytes)", BIOS_ROM_REGION_START + i, BIOS_ROM_REGION_START + i + length, length); romdump_data(fw, mem + i, BIOS_ROM_REGION_START + i, length); fwts_log_nl(fw); } } fwts_log_info(fw, "BIOS ROM: %x..%x (%d bytes)", BIOS_ROM_START, BIOS_ROM_END, BIOS_ROM_SIZE); romdump_data(fw, mem + BIOS_ROM_OFFSET, BIOS_ROM_START, BIOS_ROM_SIZE); fwts_infoonly(fw); (void)fwts_munmap(mem, BIOS_ROM_REGION_SIZE); return FWTS_OK; } static fwts_framework_minor_test romdump_tests[] = { { romdump_test1, "Dump ROM data." }, { NULL, NULL } }; static fwts_framework_ops romdump_ops = { .description = "Dump ROM data.", .minor_tests = romdump_tests }; FWTS_REGISTER("romdump", &romdump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS | FWTS_FLAG_ROOT_PRIV) #endif src/bios/s0idle/000077500000000000000000000000001465205512700137705ustar00rootroot00000000000000src/bios/s0idle/s0idle.c000066400000000000000000000041741465205512700153220ustar00rootroot00000000000000/* * Copyright (C) 2020-2024 Canonical * * Portions of this code original from the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #include #include static fwts_acpi_table_info *table; static int s0idle_init(fwts_framework *fw) { if (fwts_acpi_find_table(fw, "FACP", 0, &table) != FWTS_OK) { fwts_log_error(fw, "Cannot read ACPI table FACP."); return FWTS_ERROR; } if (table == NULL) { fwts_log_error(fw, "ACPI table FACP does not exist!"); return FWTS_ERROR; } return FWTS_OK; } static int s0idle_test1(fwts_framework *fw) { const fwts_acpi_table_fadt *fadt = (const fwts_acpi_table_fadt *)table->data; if (fadt->flags & FWTS_FACP_FLAG_LOW_POWER_S0_IDLE_CAPABLE) fwts_passed(fw, "LOW_POWER_S0_IDLE_CAPABLE is set in ACPI FADT."); else fwts_failed(fw, LOG_LEVEL_HIGH, "S0idleNoFADT", "LOW_POWER_S0_IDLE_CAPABLE is not set in ACPI FADT."); return FWTS_OK; } static fwts_framework_minor_test s0idle_tests[] = { { s0idle_test1, "Test ACPI FADT S0 idle capable." }, { NULL, NULL } }; static fwts_framework_ops s0idle = { .description = "S0IDLE FADT Low Power S0 Idle tests.", .init = s0idle_init, .minor_tests = s0idle_tests }; FWTS_REGISTER("s0idle", &s0idle, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS) #endif src/bios/smm/000077500000000000000000000000001465205512700134045ustar00rootroot00000000000000src/bios/smm/smm.c000066400000000000000000000055311465205512700143500ustar00rootroot00000000000000/* * Copyright (C) 2021-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #define FWTS_INTEL_HOST_PATH "/sys/bus/pci/devices/0000:00:00.0/config" #define FWTS_GGC 0x50 #define FWTS_TSEGMB 0xB8 #define FWTS_TOLUD 0xBC #define FWTS_LOCK_FIELD 0x01 static int smm_init(fwts_framework *fw) { bool intel; if (fwts_cpu_is_Intel(&intel) != FWTS_OK) { fwts_log_error(fw, "Cannot determine processor type."); return FWTS_ERROR; } if (!intel) { fwts_log_info(fw, "The SMM test currently only supports Intel platforms."); return FWTS_SKIP; } return FWTS_OK; } static int smm_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); return FWTS_OK; } static int smm_test0(fwts_framework *fw) { uint8_t config[256]; bool passed = true; int fd; if ((fd = open(FWTS_INTEL_HOST_PATH, O_RDONLY)) < 0) { fwts_log_warning(fw, "Could not open PCI HOST bridge config data\n"); return FWTS_ERROR; } if (read(fd, config, sizeof(config)) < 0) { fwts_log_warning(fw, "Could not read PCI HOST bridge config data\n"); (void)close(fd); return FWTS_ERROR; } (void)close(fd); if ((config[FWTS_GGC] & FWTS_LOCK_FIELD) != 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "SMMGGCNotLocked", "Graphics Control register is not locked (GGCLCK != 1)."); passed = false; } if ((config[FWTS_TSEGMB] & FWTS_LOCK_FIELD) != 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "SMMTSEGNotLocked", "TSEG Memory Base register is not locked."); passed = false; } if ((config[FWTS_TOLUD] & FWTS_LOCK_FIELD) != 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "SMMTOLUDNotLocked", "Top of Low Usable DRAM (TOLUD) register is not locked."); passed = false; } if (passed) fwts_passed(fw, "No issues found in SMM locks."); return FWTS_OK; } static fwts_framework_minor_test smm_tests[] = { { smm_test0, "Validate the System management mode (SMM) locks." }, { NULL, NULL } }; static fwts_framework_ops smm_ops = { .description = "SMM tests.", .init = smm_init, .deinit = smm_deinit, .minor_tests = smm_tests }; FWTS_REGISTER("smm", &smm_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/cmos/000077500000000000000000000000001465205512700126155ustar00rootroot00000000000000src/cmos/cmosdump/000077500000000000000000000000001465205512700144445ustar00rootroot00000000000000src/cmos/cmosdump/cmosdump.c000066400000000000000000000247571465205512700164560ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include "fwts.h" #ifdef FWTS_ARCH_INTEL /* * Some CMOS information from * http://www-ivs.cs.uni-magdeburg.de/~zbrog/asm/cmos.html */ static int cmosdump_test1(fwts_framework *fw) { int i; unsigned long tmp; static const char *const cmos_shutdown_status[] = { "Power on or soft reset", "Memory size pass", "Memory test pass", "Memory test fail", "INT 19h reboot", "Flush keyboard and jmp via 40h:67h", "Protected mode tests pass", "Protected mode tests fail", "Used by POST during protected-mode RAM test", "Int 15h (block move)", "Jmp via 40h:67h", "Used by 80386", }; static const char *const floppy_disk[] = { "None", "360KB 5.25\" Drive", "1.2MB 5.25\" Drive", "720KB 3.5\" Drive", "1.44MB 3.5\" Drive", "2.88MB 3.5\" Drive", "Unknown", "Unknown" }; static const char *const hard_disk[] = { "None", "Type 1", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Type 14", "Type 16-47" }; static const char *const primary_display[] = { "BIOS selected", "CGA 40 column", "CGA 80 column", "Monochrome" }; static const char *const divider[8] = { "4.194 MHz", "1.049 MHz", "32.768 KHz (default)", "unknown", "test mode", "test mode", "reset / disable", "reset / disable", }; static const char *const rate_selection[16] = { "none", "3.90625 milliseconds", "7.8215 milliseconds", "122.070 microseconds", "244.141 microseconds", "488.281 microseconds", "976.562 microseconds (default)", "1.953125 milliseconds", "3.90625 milliseconds", "7.8215 milliseconds", "15.625 milliseconds", "31.25 milliseconds", "62.5 milliseconds", "125 milliseconds", "250 milliseconds", "500 milliseconds" }; unsigned char data[0x80]; /* Read CMOS Data */ for (i = 0; i < (int)sizeof(data); i++) { if (fwts_cmos_read(i, &data[i]) != FWTS_OK) { fwts_log_error(fw, "Cannot get read/write permission on I/O ports."); return FWTS_ERROR; } } fwts_log_info_verbatim(fw, "CMOS Memory Dump:"); for (i = 0; i < (int)sizeof(data); i += 16) { char buffer[128]; fwts_dump_raw_data(buffer, sizeof(buffer), data + i, i, 16); fwts_log_info_verbatim(fw, "%s", buffer); } fwts_log_nl(fw); fwts_log_info_verbatim(fw, "RTC Current Time: (CMOS 0x00..0x09)"); fwts_log_info_verbatim(fw, " RTC seconds: %2.2x", data[0]); fwts_log_info_verbatim(fw, " RTC minutes: %2.2x", data[2]); fwts_log_info_verbatim(fw, " RTC hours: %2.2x", data[4]); fwts_log_info_verbatim(fw, " RTC day of week: %2.2x", data[6]); fwts_log_info_verbatim(fw, " RTC date day: %2.2x", data[7]); fwts_log_info_verbatim(fw, " RTC date month: %2.2x", data[8]); fwts_log_info_verbatim(fw, " RTC date year: %2.2x", data[9]); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "RTC Alarm:"); fwts_log_info_verbatim(fw, " RTC seconds: %2.2x", data[1]); fwts_log_info_verbatim(fw, " RTC minutes: %2.2x", data[3]); fwts_log_info_verbatim(fw, " RTC hours: %2.2x", data[5]); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "Status Register A: (CMOS 0x0a): 0x%2.2x", data[10]); fwts_log_info_verbatim(fw, " Rate freq: %1.1x (%s)", data[10] & 0xf, rate_selection[data[10] & 0xf]); fwts_log_info_verbatim(fw, " Timer freq divider: %1.1x (%s)", (data[10] >> 4) & 0x7, divider[(data[10] >> 4) & 0x7]); fwts_log_info_verbatim(fw, " Update in progress: %1.1x", (data[10] >> 7) & 1); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "Status Register B: (CMOS 0x0b): 0x%2.2x", data[11]); fwts_log_info_verbatim(fw, " Daylight savings: %1.1x (%s)", data[11] & 1, (data[11] & 1) ? "Enabled" : "Disabled"); fwts_log_info_verbatim(fw, " 24 Hour Clock: %1.1x (%s)", (data[11] >> 1) & 1, ((data[11] >> 1) & 1) ? "24 Hour" : "12 Hour"); fwts_log_info_verbatim(fw, " Data Mode (DM): %1.1x (%s)", (data[11] >> 2) & 1, ((data[11] >> 2) & 1) ? "Binary" : "BCD"); fwts_log_info_verbatim(fw, " Square Wave: %1.1x (%s)", (data[11] >> 3) & 1, ((data[11] >> 3) & 1) ? "Enabled" : "Disabled"); fwts_log_info_verbatim(fw, " Update ended IRQ: %1.1x (%s)", (data[11] >> 4) & 1, ((data[11] >> 4) & 1) ? "Enabled" : "Disabled"); fwts_log_info_verbatim(fw, " Alarm IRQ: %1.1x (%s)", (data[11] >> 5) & 1, ((data[11] >> 5) & 1) ? "Enabled" : "Disabled"); fwts_log_info_verbatim(fw, " Periodic IRQ: %1.1x (%s)", (data[11] >> 6) & 1, ((data[11] >> 6) & 1) ? "Enabled" : "Disabled"); fwts_log_info_verbatim(fw, " Clock update cycle: %1.1x (%s)", (data[11] >> 7) & 1, ((data[11] >> 7) & 1) ? "Abort update in progress" : "Update normally"); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "Status Register C: (CMOS 0x0c): 0x%2.2x", data[12]); fwts_log_info_verbatim(fw, " UF flag: 0x%1.1x", (data[12] >> 4) & 1); fwts_log_info_verbatim(fw, " AF flag: 0x%1.1x", (data[12] >> 5) & 1); fwts_log_info_verbatim(fw, " PF flag: 0x%1.1x", (data[12] >> 6) & 1); fwts_log_info_verbatim(fw, " IRQF flag: 0x%1.1x", (data[12] >> 7) & 1); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "Status Register D: (CMOS 0x0d): 0x%2.2x", data[13]); fwts_log_info_verbatim(fw, " Valid CMOS RAM flag: 0x%1.1x (%s)", (data[13] >> 7) & 1, ((data[13] >> 7) & 1) ? "Battery Good": "Battery Dead"); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "Diagnostic Status: (CMOS 0x0e): 0x%2.2x", data[14]); fwts_log_info_verbatim(fw, " CMOS time status: 0x%1.1x (%s)", (data[14] >> 2) & 1, ((data[14] >> 2) & 1) ? "Invalid": "Valid"); fwts_log_info_verbatim(fw, " Fixed disk init: 0x%1.1x (%s)", (data[14] >> 3) & 1, ((data[14] >> 3) & 1) ? "Bad": "Good"); fwts_log_info_verbatim(fw, " Memory size check: 0x%1.1x (%s)", (data[14] >> 4) & 1, ((data[14] >> 4) & 1) ? "Bad": "Good"); fwts_log_info_verbatim(fw, " Config info status: 0x%1.1x (%s)", (data[14] >> 5) & 1, ((data[14] >> 5) & 1) ? "Invalid": "Valid"); fwts_log_info_verbatim(fw, " CMOS checksum status: 0x%1.1x (%s)", (data[14] >> 6) & 1, ((data[14] >> 6) & 1) ? "Bad": "Good"); fwts_log_info_verbatim(fw, " CMOS power loss: 0x%1.1x (%s)", (data[14] >> 7) & 1, ((data[14] >> 7) & 1) ? "Lost power": "Not lost power"); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "CMOS Shutdown Status: (CMOS 0x0f): 0x%2.2x (%s)", data[15], data[15] < 0xb ? cmos_shutdown_status[data[15]] : "Perform power-on reset"); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "Floppy Disk Type: (CMOS 0x10): 0x%2.2x", data[16]); fwts_log_info_verbatim(fw, " Drive 0: %s", floppy_disk[((data[16] >> 4) & 0xf)]); fwts_log_info_verbatim(fw, " Drive 1: %s", floppy_disk[((data[16] >> 0) & 0xf)]); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "Hard Disk Type: (CMOS 0x12, Obsolete): 0x%2.2x", data[18]); fwts_log_info_verbatim(fw, " Drive 0: %s", hard_disk[((data[18] >> 4) & 0xf)]); fwts_log_info_verbatim(fw, " Drive 1: %s", hard_disk[((data[18] >> 0) & 0xf)]); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "Installed H/W: (CMOS 0x14): 0x%2.2x", data[20]); fwts_log_info_verbatim(fw, " Maths Coprocessor: 0x%1.1x (%s)", (data[20] >> 1) & 1, ((data[20] >> 1) & 1) ? "Installed": "Not Installed"); fwts_log_info_verbatim(fw, " Keyboard: 0x%1.1x (%s)", (data[20] >> 2) & 1, ((data[20] >> 2) & 1) ? "Installed": "Not Installed"); fwts_log_info_verbatim(fw, " Display Adaptor: 0x%1.1x (%s)", (data[20] >> 3) & 1, ((data[20] >> 3) & 1) ? "Installed": "Not Installed"); fwts_log_info_verbatim(fw, " Primary Display: 0x%1.1x (%s)", (data[20] >> 4) & 3, primary_display[(data[20] >> 4) & 3]); if (data[20] & 1) { int drives = (data[20] >> 6) & 3; fwts_log_info_verbatim(fw, " Floppy Drives: 0x%2.2x (%d drive%s)", drives, drives + 1, drives > 0 ? "s" : ""); } else { fwts_log_info_verbatim(fw, " Floppy Drives: None."); } fwts_log_nl(fw); tmp = ((data[22] << 8) | (data[21])); fwts_log_info_verbatim(fw, "Base Mem: (CMOS 0x16):"); fwts_log_info_verbatim(fw, " 0x%2.2x%2.2x (%luK)", data[22], data[21], tmp); fwts_log_nl(fw); tmp = ((data[24] << 8) | (data[25])); fwts_log_info_verbatim(fw, "Extended Mem: (CMOS 0x18):"); fwts_log_info_verbatim(fw, " 0x%2.2x%2.2x (%luK) %s", data[24], data[23], tmp, tmp > (16 * 1024) ? "[untrustworthy]" : ""); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "Hard Disk Extended Types (CMOS 0x19, 0x1a):"); fwts_log_info_verbatim(fw, " Hard Disk 0: 0x%2.2x", data[25]); fwts_log_info_verbatim(fw, " Hard Disk 1: 0x%2.2x", data[26]); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "CMOS Checksum:(CMOS 0x2e):0x%2.2x%2.2x", data[47], data[46]); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "Extended Mem: (CMOS 0x30):0x%2.2x%2.2x", data[49], data[48]); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "Century Date: (CMOS 0x32):%2.2x", data[50]); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "POST Information Flag (CMOS 0x33):"); fwts_log_info_verbatim(fw, " POST cache test: 0x%1.1x %s", (data[51] >> 0) & 1, ((data[51] >> 0) & 1) ? "Failed" : "Passed"); fwts_log_info_verbatim(fw, " BIOS size: 0x%1.1x %s", (data[51] >> 7) & 1, ((data[51] >> 7) & 1) ? "128KB" : "64KB"); fwts_log_nl(fw); fwts_infoonly(fw); return FWTS_OK; } static fwts_framework_minor_test cmosdump_tests[] = { { cmosdump_test1, "Dump CMOS Memory." }, { NULL, NULL } }; static fwts_framework_ops cmosdump_ops = { .description = "Dump CMOS Memory.", .minor_tests = cmosdump_tests }; FWTS_REGISTER("cmosdump", &cmosdump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS | FWTS_FLAG_ROOT_PRIV) #endif src/coreboot/000077500000000000000000000000001465205512700134705ustar00rootroot00000000000000src/coreboot/clog/000077500000000000000000000000001465205512700144145ustar00rootroot00000000000000src/coreboot/clog/clog.c000066400000000000000000000044151465205512700155100ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Copyright (C) 2018-2021 9elements Cyber Security * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #include #include #include #include static fwts_list *clog_list; static int clog_init(fwts_framework *fw) { if (!fwts_clog_available(fw)) { fwts_log_info(fw, "coreboot log not available, skipping test"); return FWTS_SKIP; } clog_list = fwts_clog_read(fw); if (clog_list == NULL) { fwts_log_error(fw, "Cannot read coreboot log."); return FWTS_ERROR; } return FWTS_OK; } static int clog_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_clog_free(clog_list); return FWTS_OK; } static void clog_progress(fwts_framework *fw, int progress) { fwts_progress(fw, progress); } static int clog_test1(fwts_framework *fw) { int errors = 0; if (fwts_clog_firmware_check(fw, clog_progress, clog_list, &errors)) { fwts_log_error(fw, "Error parsing coreboot log."); return FWTS_ERROR; } if (errors > 0) /* Checks will log errors as failures automatically */ fwts_log_info(fw, "Found %d unique errors in coreboot log.", errors); else fwts_passed(fw, "Found no errors in coreboot log."); return FWTS_OK; } static fwts_framework_minor_test clog_tests[] = { { clog_test1, "coreboot log error check." }, { NULL, NULL } }; static fwts_framework_ops clog_ops = { .description = "Scan coreboot log for errors and warnings.", .init = clog_init, .deinit = clog_deinit, .minor_tests = clog_tests }; FWTS_REGISTER("clog", &clog_ops, FWTS_TEST_EARLY, FWTS_FLAG_BATCH) src/cpu/000077500000000000000000000000001465205512700124435ustar00rootroot00000000000000src/cpu/cpufreq/000077500000000000000000000000001465205512700141105ustar00rootroot00000000000000src/cpu/cpufreq/cpufreq.c000066400000000000000000000514231465205512700157260ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corporation * Copyright (C) 2010-2024 Canonical * * This file was originally part of the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define _GNU_SOURCE #include "fwts.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define FWTS_CPU_PATH "/sys/devices/system/cpu" #define MAX_FREQS 256 typedef struct { uint64_t Hz; fwts_cpu_benchmark_result perf; } fwts_cpu_freq; struct cpu { int idx; char sysfs_path[2048]; /* 2K is plenty */ bool online; bool master; int n_freqs; fwts_cpu_freq freqs[MAX_FREQS]; /* saved state */ char *orig_governor; uint64_t orig_frequency; }; static struct cpu *cpus; static int num_cpus; static bool cpufreq_settable = true; #define GET_PERFORMANCE_MAX (0) #define GET_PERFORMANCE_MIN (1) #define GET_PERFORMANCE_AVG (2) #define MAX_ABSOLUTE_ERROR 20.0 /* In Hz */ #define MAX_RELATIVE_ERROR 0.0025 /* as fraction */ #define MAX_REPEATS (5) static inline void cpu_mkpath( char *const path, const int len, const struct cpu *cpu, const char *const name) { snprintf(path, len, "%s/%s/cpufreq%s%s", FWTS_CPU_PATH, cpu->sysfs_path, name ? "/" : "", name ? name : ""); } static int cpu_set_governor( fwts_framework *fw, const struct cpu *cpu, const char *governor) { char path[PATH_MAX], *tmp; int rc; cpu_mkpath(path, sizeof(path), cpu, "scaling_governor"); rc = fwts_set(path, governor); if (rc != FWTS_OK) goto out; tmp = fwts_get(path); rc = tmp && !strncmp(tmp, governor, strlen(governor)) ? FWTS_OK : FWTS_ERROR; free(tmp); out: if (rc != FWTS_OK) fwts_log_info(fw, "Cannot set CPU %d governor to %s.", cpu->idx, governor); return rc; } static int cpu_set_frequency( fwts_framework *fw, const struct cpu *cpu, const uint64_t freq_hz) { char path[PATH_MAX], *tmp; char buffer[64]; int rc; cpu_mkpath(path, sizeof(path), cpu, "scaling_setspeed"); snprintf(buffer, sizeof(buffer), "%" PRIu64 , freq_hz); rc = fwts_set(path, buffer); if (rc != FWTS_OK) goto out; tmp = fwts_get(path); rc = tmp && !strncmp(tmp, buffer, strlen(buffer)) ? FWTS_OK : FWTS_ERROR; free(tmp); out: if (rc != FWTS_OK) fwts_warning(fw, "Cannot set CPU %d frequency to %s when setting %s.", cpu->idx, buffer, path); return rc; } static inline int cpu_set_lowest_frequency( fwts_framework *fw, const struct cpu *cpu) { return cpu_set_frequency(fw, cpu, cpu->freqs[0].Hz); } static inline int cpu_set_highest_frequency( fwts_framework *fw, const struct cpu *cpu) { return cpu_set_frequency(fw, cpu, cpu->freqs[cpu->n_freqs-1].Hz); } static int get_performance_repeat( fwts_framework *fw, struct cpu *cpu, const int count, const int type, uint64_t *retval) { fwts_cpu_benchmark_result result; int i; uint64_t max = 0; uint64_t min = ~0; uint64_t real_count = 0; uint64_t cumulative = 0; for (i = 0; i < count; i++) { uint64_t temp; if (fwts_cpu_benchmark(fw, cpu->idx, &result) != FWTS_OK) return FWTS_ERROR; temp = fwts_cpu_benchmark_best_result(&result); if (temp) { if (temp < min) min = temp; if (temp > max) max = temp; cumulative += temp; real_count++; } } switch (type) { case GET_PERFORMANCE_MAX: *retval = max; break; case GET_PERFORMANCE_MIN: *retval = min; break; case GET_PERFORMANCE_AVG: if (real_count) *retval = cumulative / real_count; else *retval = 0; break; default: *retval = 0; break; } return FWTS_OK; } #ifdef FWTS_ARCH_INTEL /* * hz_almost_equal() * used to compare CPU _PSS levels, are they almost * equal? E.g. within MAX_ABSOLUTE_ERROR Hz difference * between each other, or a relative difference of * MAX_RELATIVE_ERROR. If they are, then they are deemed * almost equal. */ static int hz_almost_equal(const uint64_t a, const uint64_t b) { double da = (double)a, db = (double)b; double relative_error, abs_diff = fabs(da - db); if (a == b) return true; if (abs_diff < MAX_ABSOLUTE_ERROR) return true; if (db > da) relative_error = abs_diff / db; else relative_error = abs_diff / da; return relative_error <= MAX_RELATIVE_ERROR; } #endif static char *hz_to_human(const uint64_t hz) { static char buffer[32]; if (hz > 1000000) { snprintf(buffer, sizeof(buffer), "%6.3f GHz", (double)hz / 1000000.0); return buffer; } else if (hz > 1000) { snprintf(buffer, sizeof(buffer), "%6.3f MHz", (double)hz / 1000.0); return buffer; } else { snprintf(buffer, sizeof(buffer), "%" PRIu64 " Hz", hz); return buffer; } } static uint64_t get_claimed_hz(struct cpu *cpu) { char path[PATH_MAX]; char *buffer; uint64_t value = 0; cpu_mkpath(path, sizeof(path), cpu, "scaling_max_freq"); if ((buffer = fwts_get(path)) != NULL) { value = strtoul(buffer, NULL, 10); free(buffer); } return value; } static uint64_t get_bios_limit(struct cpu *cpu) { char path[PATH_MAX]; char *buffer; uint64_t value = 0; cpu_mkpath(path, sizeof(path), cpu, "bios_limit"); if ((buffer = fwts_get(path)) != NULL) { value = strtoul(buffer, NULL, 10); free(buffer); } return value; } static int test_one_cpu_performance( fwts_framework *fw, struct cpu *cpu, const int cpu_idx, const int n_online_cpus) { uint64_t cpu_top_perf = 1; int i; for (i = 0; i < cpu->n_freqs; i++) { uint64_t perf; cpu_set_frequency(fw, cpu, cpu->freqs[i].Hz); if (fwts_cpu_benchmark(fw, cpu->idx, &cpu->freqs[i].perf) != FWTS_OK) { fwts_log_error(fw, "Failed to get CPU performance for " "CPU frequency %" PRId64 " Hz.", cpu->freqs[i].Hz); } perf = fwts_cpu_benchmark_best_result(&cpu->freqs[i].perf); if (perf > cpu_top_perf) cpu_top_perf = perf; fwts_progress(fw, (100 * ((cpu_idx * cpu->n_freqs) + i)) / (n_online_cpus * cpu->n_freqs)); } fwts_log_info(fw, "CPU %d: %i CPU frequency steps supported.", cpu->idx, cpu->n_freqs); fwts_log_info_verbatim(fw, " Frequency | Relative Speed | Cycles | Bogo loops"); fwts_log_info_verbatim(fw, "-----------+----------------+------------+-----------"); for (i = 0; i < cpu->n_freqs; i++) { char *turbo = ""; #ifdef FWTS_ARCH_INTEL if ((i == 0) && (cpu->n_freqs > 1) && (hz_almost_equal(cpu->freqs[i].Hz, cpu->freqs[i + 1].Hz))) turbo = " (Turbo Boost)"; #endif uint64_t perf = fwts_cpu_benchmark_best_result( &cpu->freqs[i].perf); fwts_log_info_verbatim(fw, "%10s | %5.1f %% " "| %10" PRIu64 " | %9" PRIu64 "%s", hz_to_human(cpu->freqs[i].Hz), 100.0 * perf / cpu_top_perf, cpu->freqs[i].perf.cycles, cpu->freqs[i].perf.loops, turbo); } fwts_log_nl(fw); /* now check for increasing performance */ for (i = 0; i < cpu->n_freqs - 1; i++) { uint64_t perf, last_perf; last_perf = fwts_cpu_benchmark_best_result(&cpu->freqs[i].perf); perf = fwts_cpu_benchmark_best_result(&cpu->freqs[i+1].perf); if (last_perf <= perf) continue; fwts_log_warning(fw, "Supposedly higher frequency %s is slower (%" PRIu64 ") than frequency %s (%" PRIu64 ") on CPU %i.", hz_to_human(cpu->freqs[i+1].Hz), perf, hz_to_human(cpu->freqs[i].Hz), last_perf, cpu->idx); return FWTS_ERROR; } fwts_log_info(fw, "CPU %d performance scaling OK", cpu->idx); return FWTS_OK; } static int cpufreq_test_cpu_performance(fwts_framework *fw) { int n_master_cpus, i, c, rc; bool ok = true; n_master_cpus = 0; if (!cpufreq_settable) { fwts_skipped(fw, "Can't set CPU frequencies"); return FWTS_SKIP; } for (i = 0; cpufreq_settable && i < num_cpus; i++) { if (!(cpus[i].online && cpus[i].master)) continue; n_master_cpus++; rc = cpu_set_lowest_frequency(fw, &cpus[i]); if (rc != FWTS_OK) cpufreq_settable = false; } /* then do the benchmark */ for (i = 0, c = 0; i < num_cpus; i++) { if (!(cpus[i].online && cpus[i].master)) continue; rc = test_one_cpu_performance(fw, &cpus[i], c++, n_master_cpus); if (rc != FWTS_OK) ok = false; cpu_set_lowest_frequency(fw, &cpus[i]); } if (ok) fwts_passed(fw, "CPU performance scaling OK"); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqSlowerOnCPU", "CPU frequencies do not refelect actual performance"); return FWTS_OK; } static int sw_tests_possible(fwts_framework *fw) { int i, online_cpus; #ifndef FWTS_ARCH_INTEL fwts_skipped(fw, "Platform doesn't perform SW_ cpu frequency control"); return FWTS_SKIP; #endif if (!cpufreq_settable) { fwts_skipped(fw, "Can't set CPU frequencies"); return FWTS_SKIP; } /* count the number of CPUs online now */ for (online_cpus = 0, i = 0; i < num_cpus; i++) if (cpus[i].online) online_cpus++; if (online_cpus < 2) { fwts_skipped(fw, "Machine only has one CPU online"); return FWTS_SKIP; } if (cpus[0].n_freqs < 2) { fwts_skipped(fw, "No frequency changes possible"); return FWTS_SKIP; } return FWTS_OK; } /* * 4) Is BIOS wrongly doing Sw_All P-state coordination across cpus * - Change frequency on all CPU to the lowest value * - Change frequency on one particular CPU to the highest * - If BIOS is doing Sw_All, the last high freq request will not work */ static int cpufreq_test_sw_all(fwts_framework *fw) { uint64_t highperf, lowperf; int i, rc; rc = sw_tests_possible(fw); if (rc != FWTS_OK) return rc; /* All CPUs at the lowest frequency */ for (i = 0; i < num_cpus; i++) cpu_set_lowest_frequency(fw, &cpus[i]); if (get_performance_repeat(fw, &cpus[0], MAX_REPEATS, GET_PERFORMANCE_MIN, &lowperf) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqSW_ALLGetPerf", "Failed to get CPU performance."); return FWTS_ERROR; } cpu_set_highest_frequency(fw, &cpus[0]); if (get_performance_repeat(fw, &cpus[0], MAX_REPEATS, GET_PERFORMANCE_MAX, &highperf) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqSW_ALLGetPerf", "Failed to get CPU performance."); return FWTS_ERROR; } if (lowperf >= highperf) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqSW_ALL", "Firmware not implementing hardware " "coordination cleanly. Firmware using SW_ALL " "instead?"); return FWTS_ERROR; } fwts_passed(fw, "Firmware SW_ALL OK"); return FWTS_OK; } static int cpufreq_test_sw_any(fwts_framework *fw) { uint64_t low_perf, high_perf, newhigh_perf; int i, j, rc, n_tests, performed_tests; fwts_cpu_benchmark_result result; bool ok; rc = sw_tests_possible(fw); if (rc != FWTS_OK) return rc; n_tests = performed_tests = 0; for (i = 0; i < num_cpus; i++) if (cpus[i].online) n_tests++; /* we do two performance measurements per cpu */ n_tests *= 2; /* First set all processors to their lowest speed */ for (i = 0; i < num_cpus; i++) cpu_set_lowest_frequency(fw, &cpus[i]); /* assume that all processors have the same low performance */ if (fwts_cpu_benchmark(fw, cpus[0].idx, &result) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqCPsSetToSW_ANYGetPerf", "Cannot get CPU performance."); return FWTS_ERROR; } low_perf = fwts_cpu_benchmark_best_result(&result); ok = true; for (i = 0; i < num_cpus; i++) { const struct cpu *cpu = &cpus[i]; if (!cpu->online) continue; cpu_set_highest_frequency(fw, cpu); if (!cpu->online) continue; if (fwts_cpu_benchmark(fw, cpu->idx, &result) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqCPsSetToSW_ANYGetPerf", "Cannot get CPU performance."); return FWTS_ERROR; } high_perf = fwts_cpu_benchmark_best_result(&result); performed_tests++; if (n_tests) fwts_progress(fw, 100 * performed_tests / n_tests); /* * now set all the others to low again; sw_any will cause * the core in question to now also get the low speed, while * hardware max will keep the performance */ for (j = 0; j < num_cpus; j++) if (i != j) cpu_set_lowest_frequency(fw, &cpus[j]); if (fwts_cpu_benchmark(fw, cpu->idx, &result) != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqCPsSetToSW_ANYGetPerf", "Cannot get CPU performance."); return FWTS_ERROR; } newhigh_perf = fwts_cpu_benchmark_best_result(&result); if ((high_perf > newhigh_perf) && (high_perf - newhigh_perf > (high_perf - low_perf)/4) && (high_perf - low_perf > 20)) { cpu_set_lowest_frequency(fw, cpu); ok = false; } performed_tests++; if (n_tests) fwts_progress(fw, 100 * performed_tests / n_tests); } if (!ok) fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqCPUsSetToSW_ANY", "Processors are set to SW_ANY."); else fwts_passed(fw, "P-state coordination " "under hardware control."); return FWTS_OK; } static int cpufreq_compare_freqs( fwts_framework *fw, const struct cpu *c1, const struct cpu *c2) { int i; if (c1->n_freqs != c2->n_freqs) { fwts_log_warning(fw, "cpu %d has %d freqs, cpu %d has %d freqs", c1->idx, c1->n_freqs, c2->idx, c2->n_freqs); return FWTS_ERROR; } for (i = 0; i < c1->n_freqs; i++) { if (c1->freqs[i].Hz != c2->freqs[i].Hz) { fwts_log_warning(fw, "freq entry %d: " "cpu %d is %" PRId64 ", " "cpu %d is %" PRId64, i, c1->idx, c1->freqs[i].Hz, c2->idx, c2->freqs[i].Hz); return FWTS_ERROR; } } return FWTS_OK; } static int cpufreq_test_consistency(fwts_framework *fw) { struct cpu *cpu0; bool consistent = true; int i; if (num_cpus < 2) { fwts_skipped(fw, "Test skipped, only one processor present"); return FWTS_SKIP; } cpu0 = &cpus[0]; for (i = 1; i < num_cpus; i++) { struct cpu *cpu = &cpus[i]; if (cpufreq_compare_freqs(fw, cpu0, cpu) != FWTS_OK) { consistent = false; fwts_log_error(fw, "cpu %d has an inconsistent frequency table", cpu->idx); } } if (!consistent) fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqInconsistent", "inconsistencies found in CPU " "frequency tables"); else fwts_passed(fw, "CPU frequency tables are consistent"); return FWTS_OK; } static int cpufreq_test_duplicates(fwts_framework *fw) { struct cpu *cpu0 = &cpus[0]; bool dup = false; int i; /* the frequency list is sorted, so we can do this in one pass */ for (i = 0; i < cpu0->n_freqs - 1; i++) { uint64_t freq = cpu0->freqs[i].Hz; if (cpu0->freqs[i+1].Hz != freq) continue; dup = true; fwts_log_error(fw, "duplicate cpu frequency %" PRIx64, freq); /* don't report further duplicates for this entry */ for (i++; i < cpu0->n_freqs - 1; i++) if (cpu0->freqs[i].Hz != freq) break; } if (dup) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqDuplicate", "duplicates found in CPU frequency table"); } else { fwts_passed(fw, "No duplicates in CPU frequency table"); } return FWTS_OK; } static int cpufreq_test_bios_limits(fwts_framework *fw) { bool ok, present; int i; present = false; ok = true; for (i = 0; i < num_cpus; i++) { struct cpu *cpu = &cpus[i]; uint64_t bios_limit; bios_limit = get_bios_limit(cpu); if (!bios_limit) continue; present = true; if (bios_limit < cpu->freqs[cpu->n_freqs-1].Hz) { ok = false; fwts_warning(fw, "cpu %d has bios limit of %" PRId64 ", lower than max freq of %" PRId64, cpu->idx, bios_limit, cpu->freqs[cpu->n_freqs-1].Hz); } } if (!present) fwts_passed(fw, "No BIOS limits imposed"); else if (ok) fwts_passed(fw, "CPU BIOS limit OK"); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqBIOSLimit", "CPU BIOS limit is set too low"); return FWTS_OK; } static int cpufreq_test_claimed_max(fwts_framework *fw) { bool ok, present; int i; present = false; ok = true; for (i = 0; i < num_cpus; i++) { struct cpu *cpu = &cpus[i]; uint64_t max; max = get_claimed_hz(cpu); if (!max) continue; if (!cpu->n_freqs) continue; present = true; if (max > cpu->freqs[cpu->n_freqs-1].Hz) { ok = false; fwts_warning(fw, "cpu %d has claimed frequency of %" PRId64 ", higher than max freq of %" PRId64, cpu->idx, max, cpu->freqs[cpu->n_freqs-1].Hz); } } if (!present) fwts_passed(fw, "No max frequencies present"); else if (ok) fwts_passed(fw, "CPU max frequencies OK"); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqClaimedMax", "CPU max frequency is unreachable"); return FWTS_OK; } static int cpu_freq_compare(const void *v1, const void *v2) { const fwts_cpu_freq *f1 = v1; const fwts_cpu_freq *f2 = v2; return f1->Hz - f2->Hz; } static int parse_cpu_info( fwts_framework *fw, struct cpu *cpu, const struct dirent *dir) { char *end, path[PATH_MAX+1], *str, *tmp; struct stat statbuf; int rc, i = 0; strcpy(cpu->sysfs_path, dir->d_name); cpu->idx = strtoul(cpu->sysfs_path + strlen("cpu"), &end, 10); cpu->online = true; /* check if this is the master of a group of CPUs; we only * need to do perf checks on those that are the master */ cpu_mkpath(path, sizeof(path), cpu, NULL); rc = lstat(path, &statbuf); if (rc) { fwts_log_warning(fw, "Can't access cpufreq info for CPU %d", cpu->idx); return FWTS_ERROR; } /* non-master CPUs will have a link, not a dir */ cpu->master = S_ISDIR(statbuf.st_mode); cpu_mkpath(path, sizeof(path), cpu, "scaling_governor"); cpu->orig_governor = fwts_get(path); if (cpu->orig_governor && !strcmp(cpu->orig_governor, "userspace")) { cpu_mkpath(path, sizeof(path), cpu, "scaling_setspeed"); tmp = fwts_get(path); cpu->orig_frequency = strtoull(tmp, NULL, 10); free(tmp); } /* parse available frequencies */ cpu_mkpath(path, sizeof(path), cpu, "scaling_available_frequencies"); str = fwts_get(path); /* cpu driver like intel_pstate has no scaling_available_frequencies */ if (str != NULL) { for (tmp = str; ; tmp = NULL) { const char *tok = strtok(tmp, " "); if (!tok) break; if (!isdigit(tok[0])) continue; cpu->freqs[i++].Hz = strtoull(tok, NULL, 10); } cpu->n_freqs = i; qsort(cpu->freqs, cpu->n_freqs, sizeof(cpu->freqs[0]), cpu_freq_compare); free(str); } /* parse boost frequencies */ cpu_mkpath(path, sizeof(path), cpu, "scaling_boost_frequencies"); str = fwts_get(path); if (str) { for (tmp = str; ; tmp = NULL) { const char *tok = strtok(tmp, " "); if (!tok) break; if (!isdigit(tok[0])) continue; cpu->freqs[i++].Hz = strtoull(tok, NULL, 10); } cpu->n_freqs = i; qsort(cpu->freqs, cpu->n_freqs, sizeof(cpu->freqs[0]), cpu_freq_compare); free(str); } return FWTS_OK; } static int is_cpu_dir(const struct dirent *dir) { return strncmp(dir->d_name, "cpu", 3) == 0 && isdigit(dir->d_name[3]); } static int cpufreq_init(fwts_framework *fw) { struct dirent **dirs; int i; num_cpus = scandir(FWTS_CPU_PATH, &dirs, is_cpu_dir, versionsort); cpus = calloc(num_cpus, sizeof(*cpus)); /* all test require a userspace governor */ for (i = 0; i < num_cpus; i++) { int rc; rc = parse_cpu_info(fw, &cpus[i], dirs[i]); if (rc != FWTS_OK) { fwts_log_warning(fw, "Failed to parse cpufreq for CPU %d", i); cpufreq_settable = false; return FWTS_ERROR; } rc = cpu_set_governor(fw, &cpus[i], "userspace"); if (rc != FWTS_OK) { fwts_log_info(fw, "Cannot initialize cpufreq " "to set CPU speed for CPU %d", i); cpufreq_settable = false; return FWTS_SKIP; } } return FWTS_OK; } static int cpufreq_deinit(fwts_framework *fw) { int i; for (i = 0; i < num_cpus; i++) { const struct cpu *cpu = &cpus[i]; if (cpu->orig_governor) { cpu_set_governor(fw, cpu, cpu->orig_governor); free(cpu->orig_governor); } if (cpu->orig_frequency) cpu_set_frequency(fw, cpu, cpu->orig_frequency); } free(cpus); return FWTS_OK; } static fwts_framework_minor_test cpufreq_tests[] = { { cpufreq_test_consistency, "CPU frequency table consistency" }, { cpufreq_test_duplicates, "CPU frequency table duplicates" }, { cpufreq_test_bios_limits, "CPU frequency firmware limits" }, { cpufreq_test_claimed_max, "CPU frequency claimed maximum" }, { cpufreq_test_sw_any, "CPU frequency SW_ANY control" }, { cpufreq_test_sw_all, "CPU frequency SW_ALL control" }, { cpufreq_test_cpu_performance, "CPU frequency performance tests." }, { NULL, NULL } }; static fwts_framework_ops cpufreq_ops = { .init = cpufreq_init, .deinit = cpufreq_deinit, .description = "CPU frequency scaling tests.", .minor_tests = cpufreq_tests }; FWTS_REGISTER("cpufreq", &cpufreq_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) src/cpu/maxfreq/000077500000000000000000000000001465205512700141065ustar00rootroot00000000000000src/cpu/maxfreq/maxfreq.c000066400000000000000000000127701465205512700157240ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #include #include #include #include #include #include #define CPU_FREQ_PATH "/sys/devices/system/cpu" #define CPU_INFO_PATH "/proc/cpuinfo" static double maxfreq_max(const char *str) { double max = -1.0; while (str && *str) { double val; while ((*str != '\0') && isspace(*str)) str++; if (!isdigit(*str)) break; val = atof(str); if (val > max) max = val; str = strstr(str, " "); } return max; } static int maxfreq_test1(fwts_framework *fw) { double *cpufreq; int cpu, cpus; bool advice = false, passed = true, cpufreqs_read = false; struct dirent *entry; DIR *dir; fwts_list_link *item; fwts_list *cpuinfo; fwts_log_info(fw, "This test checks the maximum CPU frequency as detected by " "the kernel for each CPU against maximum frequency as " "specified by the BIOS frequency scaling settings."); cpuinfo = fwts_file_open_and_read(CPU_INFO_PATH); if (cpuinfo == NULL) { fwts_log_error(fw, "Cannot create cpu info list."); return FWTS_ERROR; } /* Pass 1, figure out number of CPUs */ cpus = 0; fwts_list_foreach(item, cpuinfo) { if (strstr(fwts_text_list_text(item), "model name")) cpus++; } if (!cpus) { fwts_list_free(cpuinfo, free); fwts_skipped(fw, "Cannot read CPU model names from %s, this generally " "happens on ARM CPUs, skipping test.", CPU_INFO_PATH); return FWTS_SKIP; } if ((cpufreq = calloc(cpus, sizeof(double))) == NULL) { fwts_log_error(fw, "Cannot create cpu frequency array."); fwts_list_free(cpuinfo, free); return FWTS_ERROR; } /* Pass 2, get speed */ cpu = 0; fwts_list_foreach(item, cpuinfo) { char *str = fwts_text_list_text(item); if (strstr(str, "model name")) { if ((str = strstr(str, "@")) != NULL) { cpufreq[cpu] = atof(str+1); if (strstr(str, "GHz")) cpufreq[cpu] *= 1000000.0; if (strstr(str, "MHz")) cpufreq[cpu] *= 1000.0; cpufreqs_read = true; } else cpufreq[cpu] = -1.0; cpu++; } } fwts_list_free(cpuinfo, free); if (!cpufreqs_read) { fwts_skipped(fw, "Cannot read CPU frequencies from %s, this generally " "happens on AMD CPUs, skipping test.", CPU_INFO_PATH); free(cpufreq); return FWTS_SKIP; } if (!(dir = opendir(CPU_FREQ_PATH))) { fwts_failed(fw, LOG_LEVEL_LOW, "CPUFreqNoPath", "No %s directory available: cannot test.", CPU_FREQ_PATH); free(cpufreq); return FWTS_ERROR; } do { char path[PATH_MAX]; char *data; double maxfreq, maxfreq_ghz, cpufreq_ghz; int cpunum; entry = readdir(dir); if (!entry || entry->d_name[0] == '.' || strlen(entry->d_name) < 3) continue; strlcpy(path, CPU_FREQ_PATH, strlen(CPU_FREQ_PATH) + 1); snprintf(path + strlen(CPU_FREQ_PATH), sizeof(path) - strlen(CPU_FREQ_PATH), "/%s/cpufreq/scaling_available_frequencies", entry->d_name); if ((data = fwts_get(path)) == NULL) continue; maxfreq = maxfreq_max(data); free(data); cpunum = atoi(entry->d_name + 3); if (maxfreq < 0.0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqReadFailed", "Cannot read cpu frequency from %s for CPU %s.", CPU_FREQ_PATH, entry->d_name); passed = false; continue; } maxfreq_ghz = maxfreq / 1000000.0; cpufreq_ghz = cpufreq[cpunum] / 1000000.0; if (fabs(maxfreq_ghz - cpufreq_ghz) > (maxfreq_ghz * 0.005)) { passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqSpeedMismatch", "Maximum scaling frequency %f GHz do not match " "expected frequency %f GHz.", maxfreq_ghz, cpufreq_ghz); if (!advice) { advice = true; fwts_advice(fw, "The maximum scaling frequency %f GHz " "for CPU %d configured by the BIOS in " "%s does not match the expected " "maximum CPU frequency %f GHz that " "the CPU can run at. This usually " "indicates a misconfiguration of the " "ACPI _PSS (Performance Supported " "States) object. This is described in " "section 8.4.4.2 of the ACPI " "specification.", (double)maxfreq/1000000.0, cpunum, path, (double)cpufreq[cpunum]/1000000.0); } else { fwts_advice(fw, "See advice for previous CPU."); } } else { fwts_log_info(fw, "CPU %d maximum frequency %f GHz is sane.", cpunum, maxfreq_ghz); } } while (entry); if (passed) fwts_passed(fw, "%d CPUs passed the maximum frequency check.", cpus); free(cpufreq); (void)closedir(dir); return FWTS_OK; } static fwts_framework_minor_test maxfreq_tests[] = { { maxfreq_test1, "Maximum CPU frequency test." }, { NULL, NULL } }; static fwts_framework_ops maxfreq_ops = { .description = "Test max CPU frequencies against max scaling frequency.", .minor_tests = maxfreq_tests }; FWTS_REGISTER("maxfreq", &maxfreq_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH) src/cpu/microcode/000077500000000000000000000000001465205512700144075ustar00rootroot00000000000000src/cpu/microcode/microcode.c000066400000000000000000000206471465205512700165300ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corporation * Copyright (C) 2010-2024 Canonical * * This file was derived from part of the Linux-ready Firmware Developer Kit, * however, it has been completely re-written. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #define SYS_CPU_PATH "/sys/devices/system/cpu" #define UNKNOWN -1 typedef struct { int cpu; /* CPU # */ int old_revision; /* Old microcode revision */ int new_revision; /* New microcode revision */ int year; /* Year of new revision */ int month; /* Month of new revision */ int day; /* Day of new revision */ } microcode_info; static fwts_list *klog; static int microcode_init(fwts_framework *fw) { bool intel; if (fwts_cpu_is_Intel(&intel) != FWTS_OK) { fwts_log_error(fw, "Cannot determine processor type."); return FWTS_ERROR; } if (!intel) { fwts_log_info(fw, "The microcode test currently only supports Intel processors."); return FWTS_SKIP; } klog = fwts_klog_read(); if (klog == NULL) { fwts_log_error(fw, "Cannot read kernel log."); return FWTS_ERROR; } return FWTS_OK; } static int microcode_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_klog_free(klog); return FWTS_OK; } static microcode_info *microcode_find_cpu( const int cpu, fwts_list *microcode_info_list) { fwts_list_link *item; fwts_list_foreach(item, microcode_info_list) { microcode_info *info = fwts_list_data(microcode_info *, item); if (info->cpu == cpu) return info; } return NULL; } static int microcode_test1(fwts_framework *fw) { fwts_list_link *item; fwts_list microcode_info_list; microcode_info *info; DIR *dir; struct dirent *entry; int failed = 0; int passed = 0; fwts_list_init(µcode_info_list); fwts_log_info(fw, "This test verifies if the firmware has put a recent revision " "of the microcode into the processor at boot time. Recent " "microcode is important to have all the required " "features and errata updates for the processor."); /* * Gather data from klog, scan for patterns like: * microcode: CPU0 sig=0x306a9, pf=0x10, revision=0x12 * microcode: CPU0 updated to revision 0x17, date = 2013-01-09 */ fwts_list_foreach(item, klog) { char *ptr; char *line = fwts_list_data(char *, item); line = fwts_klog_remove_timestamp(line); if (strstr(line, "microcode:") == NULL) continue; ptr = strstr(line, "revision=0x"); if (ptr) { int cpu; unsigned int revision; if (sscanf(line, "%*s CPU%d sig=0x%*x, pf=0x%*x, revision=0x%x", &cpu, &revision) != 2) continue; if (microcode_find_cpu(cpu, µcode_info_list) == NULL) { info = calloc(1, sizeof(microcode_info)); if (info == NULL) { fwts_log_error(fw, "Cannot allocate memory."); fwts_list_free_items(µcode_info_list, free); return FWTS_ERROR; } info->cpu = cpu; info->old_revision = revision; info->new_revision = UNKNOWN; info->year = UNKNOWN; info->month = UNKNOWN; info->day = UNKNOWN; fwts_list_append(µcode_info_list, info); } continue; } ptr = strstr(line, "updated to revision"); if (ptr) { int cpu; unsigned int revision; int year; int month; int day; if (sscanf(line, "%*s CPU%d updated to revision 0x%x, date = %d-%d-%d", &cpu, &revision, &year, &month, &day) != 5) continue; info = microcode_find_cpu(cpu, µcode_info_list); if (info == NULL) { /* * Strange, we found the update but not the * original revision info, create an entry for * this CPU anyhow, mark original revision as * unknown */ info = calloc(1, sizeof(microcode_info)); if (info == NULL) { fwts_log_error(fw, "Cannot allocate memory."); fwts_list_free_items(µcode_info_list, free); return FWTS_ERROR; } info->cpu = cpu; info->old_revision = UNKNOWN; info->new_revision = revision; info->year = year; info->month = month; info->day = day; fwts_list_append(µcode_info_list, info); } else { /* Exists, so update */ info->new_revision = revision; info->year = year; info->month = month; info->day = day; } } } /* * Now sanity check all CPUs */ if ((dir = opendir(SYS_CPU_PATH)) == NULL) { fwts_log_error(fw, "Cannot open %s.", SYS_CPU_PATH); fwts_list_free_items(µcode_info_list, free); return FWTS_ERROR; } /* Scan and check */ while ((entry = readdir(dir)) != NULL) { if ((strlen(entry->d_name) > 3) && (strncmp(entry->d_name,"cpu", 3) == 0) && (isdigit(entry->d_name[3]))) { char path[PATH_MAX]; char *data; snprintf(path, sizeof(path), SYS_CPU_PATH "/%s/microcode/version", entry->d_name); if ((data = fwts_get(path)) != NULL) { int cpu = (int)strtoul(&entry->d_name[3], NULL, 16); int revision = (int)strtoul(data, NULL, 16); free(data); info = microcode_find_cpu(cpu, µcode_info_list); if (info == NULL) { /* * It may be null because the kernel log * is old and we've now lost the log * messages, so we can't really sanity * check, so it's not strictly a failure. */ fwts_log_info(fw, "Could not determine if CPU %d had a microcode " "update from the kernel message log.", cpu); continue; } /* * Kernel does not have newer version than BIOS */ if (info->new_revision == UNKNOWN) { fwts_log_info(fw, "The kernel did not report that CPU %d has had a microcode update. " "The current firmware is revision 0x%x and probably has not been updated.", cpu, info->old_revision); continue; } /* * We found a new revision but it does not * match the CPU info, failed */ if (info->new_revision != revision) { failed++; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MicrocodeMismatch", "The kernel has reported that CPU %d has had a microcode update " "to revision 0x%x, however, the processor seems to be running " "with a different revision 0x%x", cpu, info->new_revision, revision); continue; } /* * We found a new revision but not an old one, * assume it was OK since it got updated */ if (info->old_revision == UNKNOWN) { passed++; fwts_log_info(fw, "CPU %d microcode updated to revision 0x%x.", cpu, info->new_revision); continue; } /* Final sanity check */ if (info->new_revision < info->old_revision) { failed++; fwts_failed(fw, LOG_LEVEL_HIGH, "MicrocodeDowngrade", "The kernel has reported that CPU %d has had a microcode update " "downgrade from revision 0x%x down to revision 0x%x (%d-%2.2d-%2.2d).", cpu, info->new_revision, info->old_revision, info->year, info->month, info->day); } else { passed++; fwts_log_info(fw, "CPU %d microcode updated from revision 0x%x to revision 0x%x (%d-%2.2d-%2.2d).", cpu, info->old_revision, info->new_revision, info->year, info->month, info->day); } } } } if (!failed) { if (passed > 0) fwts_passed(fw, "%d CPU(s) have the latest microcode loaded.", passed); else fwts_skipped(fw, "Could not determine from kernel log if latest microcode has been loaded."); } closedir(dir); fwts_list_free_items(µcode_info_list, free); return FWTS_OK; } static fwts_framework_minor_test microcode_tests[] = { { microcode_test1, "Test for most recent microcode being loaded." }, { NULL, NULL } }; static fwts_framework_ops microcode_ops = { .description = "Test if system is using latest microcode.", .init = microcode_init, .deinit = microcode_deinit, .minor_tests = microcode_tests }; FWTS_REGISTER("microcode", µcode_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/cpu/msr/000077500000000000000000000000001465205512700132445ustar00rootroot00000000000000src/cpu/msr/msr.c000066400000000000000000001112231465205512700142110ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #ifdef FWTS_ARCH_INTEL typedef void (*msr_callback_check)(fwts_framework *fw, const uint64_t val); static int ncpus; static bool intel_cpu; static bool amd_cpu; static bool hygon_cpu; static fwts_cpuinfo_x86 *cpuinfo; static int msr_init(fwts_framework *fw) { char *bios_vendor; if ((cpuinfo = fwts_cpu_get_info(-1)) == NULL) { fwts_log_error(fw, "Cannot get CPU info"); return FWTS_ERROR; } if (cpuinfo->vendor_id == NULL) { fwts_log_error(fw, "Cannot get CPU vendor_id"); return FWTS_ERROR; } intel_cpu = strstr(cpuinfo->vendor_id, "Intel") != NULL; amd_cpu = strstr(cpuinfo->vendor_id, "AuthenticAMD") != NULL; hygon_cpu = strstr(cpuinfo->vendor_id, "HygonGenuine") != NULL; if ((ncpus = fwts_cpu_enumerate()) == FWTS_ERROR) { fwts_log_error(fw, "Cannot detect the number of CPUs on this machine."); return FWTS_ABORTED; } /* * Running MSR tests inside virtual machines such as QEMU with some kernel/kvm * combinations have been observed to cause GPFs. We kludge around this by * avoiding MSR tests for a Bochs BIOS based QEMU virtual machine. */ if ((bios_vendor = fwts_get("/sys/class/dmi/id/bios_vendor")) != NULL) { if (strstr(bios_vendor, "Bochs")) { fwts_log_error(fw, "MSR test being avoiding inside a virtual machine as " "this is known to cause General Protection Faults on " "some configurations."); free(bios_vendor); return FWTS_SKIP; } free(bios_vendor); } return FWTS_OK; } static int msr_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_cpu_free_info(cpuinfo); return FWTS_OK; } static int msr_consistent( fwts_framework *fw, const uint32_t msr, const int shift, const uint64_t mask, uint64_t *const vals, int *const inconsistent_count, bool *const inconsistent) { int cpu; *inconsistent_count = 0; for (cpu = 0; cpu < ncpus; cpu++) { uint64_t val; if (fwts_cpu_readmsr(fw, cpu, msr, &val) != FWTS_OK) { return FWTS_ERROR; } val >>= shift; val &= mask; vals[cpu] = val; } for (cpu = 0; cpu < ncpus; cpu++) { if (vals[0] != vals[cpu]) { (*inconsistent_count)++; inconsistent[cpu] = true; } else { inconsistent[cpu] = false; } } return FWTS_OK; } static int msr_consistent_check(fwts_framework *fw, const fwts_log_level level, const char *const msr_name, const uint32_t msr, const int shift, const uint64_t mask, const msr_callback_check callback) { uint64_t *vals; bool *inconsistent; int inconsistent_count; if ((vals = calloc(ncpus, sizeof(uint64_t))) == NULL) { fwts_log_error(fw, "Out of memory allocating msr value buffers."); return FWTS_ERROR; } if ((inconsistent = calloc(ncpus, sizeof(bool))) == NULL) { fwts_log_error(fw, "Out of memory allocating msr value buffers."); free(vals); return FWTS_ERROR; } if (msr_consistent(fw, msr, shift, mask, vals, &inconsistent_count, inconsistent) != FWTS_OK) { free(inconsistent); free(vals); return FWTS_ERROR; } if (inconsistent_count > 0) { int cpu; fwts_failed(fw, level, "MSRCPUsInconsistent", "MSR 0x%8.8" PRIx32 " %s has %d inconsistent values across " "%d CPUs (shift: %d mask: 0x%" PRIx64 ").", msr, msr_name, inconsistent_count, ncpus, shift, mask); for (cpu = 1; cpu < ncpus; cpu++) { if (inconsistent[cpu]) fwts_log_info(fw, "MSR CPU 0 -> 0x%" PRIx64 " vs CPU %d -> 0x%" PRIx64, vals[0], cpu, vals[cpu]); } } else { fwts_passed(fw, "MSR 0x%8.8" PRIx32 " %s " "is consistent across %d CPUs.", msr, msr_name, ncpus); if (callback) callback(fw, vals[0]); } free(inconsistent); free(vals); return FWTS_OK; } static int msr_pstate_ratios(fwts_framework *fw) { if (intel_cpu) { msr_consistent_check(fw, LOG_LEVEL_HIGH, "Minimum P-State", 0xce, 8, 0xff, NULL); msr_consistent_check(fw, LOG_LEVEL_HIGH, "Maximum P-State", 0xce, 40, 0xff, NULL); } else fwts_skipped(fw, "Non-Intel CPU, test skipped."); return FWTS_OK; } static void msr_c1_c3_autodemotion_check(fwts_framework *fw, const uint64_t val) { fwts_log_info(fw, "C1 and C3 Autodemotion %s.", val == 3 ? "enabled" : "disabled"); } static int msr_c1_c3_autodemotion(fwts_framework *fw) { if (intel_cpu) { msr_consistent_check(fw, LOG_LEVEL_HIGH, "C1 and C3 Autodemotion", 0xe2, 25, 0x03, msr_c1_c3_autodemotion_check); } else fwts_skipped(fw, "Non-Intel CPU, test skipped."); return FWTS_OK; } static int msr_smrr(fwts_framework *fw) { uint64_t val; if (intel_cpu) { if (fwts_cpu_readmsr(fw, 0, 0xfe, &val) != FWTS_OK) { fwts_skipped(fw, "Cannot read MSR 0xfe."); return FWTS_ERROR; } if (((val >> 11) & 1) == 0) fwts_log_info(fw, "SMRR not supported by this CPU."); else { msr_consistent_check(fw, LOG_LEVEL_HIGH, "SMRR_PHYSBASE", 0x1f2, 12, 0xfffff, NULL); msr_consistent_check(fw, LOG_LEVEL_HIGH, "SMRR_TYPE", 0x1f2, 0, 0x7, NULL); msr_consistent_check(fw, LOG_LEVEL_HIGH, "SMRR_PHYSMASK", 0x1f3, 12, 0xfffff, NULL); msr_consistent_check(fw, LOG_LEVEL_HIGH, "SMRR_VALID", 0x1f3, 11, 0x1, NULL); if (fwts_cpu_readmsr(fw, 0, 0x1f2, &val) == FWTS_OK) { uint64_t physbase = val & 0xfffff000; uint64_t type = val & 7; if ((physbase & 0xfff) != 0) fwts_failed(fw, LOG_LEVEL_HIGH, "MSRSMRR_PHYSBASE4KBBoundary", "SMRR: SMRR_PHYSBASE is NOT on a 4KB boundary: %" PRIx64 ".", physbase); if (type != 6) fwts_failed(fw, LOG_LEVEL_HIGH, "MSRSMRR_TYPE", "SMRR: SMRR_TYPE is 0x%" PRIx64 ", should be 0x6 (Write-Back).", type); } if (fwts_cpu_readmsr(fw, 0, 0x1f3, &val) == FWTS_OK) { uint64_t physmask = val & 0xfffff000; uint64_t valid = (val >> 11) & 1; if (physmask < 0x80000) { fwts_failed(fw, LOG_LEVEL_HIGH, "MSRSMRRRegion", "SMRR: region needs to be at least 8MB, " "SMRR_PHYSMASK = %" PRIx64 ".", physmask); } if (!valid) fwts_failed(fw, LOG_LEVEL_HIGH, "MSRSMRRValidBit", "SMRR: valid bit is 0, it should be 1 (enabled)."); } } } else fwts_skipped(fw, "Non-Intel CPU, test skipped."); return FWTS_OK; } typedef struct { const char *const name; const uint32_t msr; const uint64_t mask; const msr_callback_check callback; } msr_info; /* From AMD Architecture Programmer's Manual, Volume 2: System Programming, Appending A */ static const msr_info AMD_MSRs[] = { { "MTRRCAP", 0x000000fe, 0x0000000000000fffULL, NULL }, /* * LP#1582005 - Do not check sysenter MSRs, they will be different on * each CPU, so checking them across CPUs is incorrect * { "SYSENTER_CS", 0x00000174, 0x000000000000ffffULL, NULL }, { "SYSENTER_ESP", 0x00000175, 0xffffffffffffffffULL, NULL }, { "SYSENTER_EIP", 0x00000176, 0xffffffffffffffffULL, NULL }, */ /* * MCG_CAP is read-only and can differ from core to core { "MCG_CAP", 0x00000179, 0x0000000001ff0fffULL, NULL }, */ { "MCG_STATUS", 0x0000017a, 0xffffffffffffffffULL, NULL }, /* MCG_CTL differs in Ryzen 4000 series and probably later series { "MCG_CTL", 0x0000017b, 0xffffffffffffffffULL, NULL }, */ { "MTRR_PHYSBASE0", 0x00000200, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK0", 0x00000201, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE1", 0x00000202, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK1", 0x00000203, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE2", 0x00000204, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK2", 0x00000205, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE3", 0x00000206, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK3", 0x00000207, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE4", 0x00000208, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK4", 0x00000209, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE5", 0x0000020a, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK5", 0x0000020b, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE6", 0x0000020c, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK6", 0x0000020d, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE7", 0x0000020e, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK7", 0x0000020f, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX64K_000", 0x00000250, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX16K_800", 0x00000258, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX16K_a00", 0x00000259, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_C000", 0x00000268, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_C800", 0x00000269, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_D000", 0x0000026a, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_D800", 0x0000026b, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_E000", 0x0000026c, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_E800", 0x0000026d, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_F000", 0x0000026e, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_F800", 0x0000026f, 0xffffffffffffffffULL, NULL }, { "PAT", 0x00000277, 0x0707070707070703ULL, NULL }, { "MTRR_DEF_TYPE", 0x000002ff, 0x0000000000000c0fULL, NULL }, { "EFER", 0xc0000080, 0x0000000000000d01ULL, NULL }, /* Do not check syscall MSRs, they will be different on * each CPU, so checking them across CPUs is incorrect { "STAR", 0xc0000081, 0xffffffffffffffffULL, NULL }, { "LSTAR", 0xc0000082, 0xffffffffffffffffULL, NULL }, { "FMASK", 0xc0000084, 0xffffffffffffffffULL, NULL }, */ //{ "FS_BASE", 0xc0000100, 0xffffffffffffffffULL, NULL }, //{ "GS_BASE", 0xc0000101, 0xffffffffffffffffULL, NULL }, { "KERNEL_GS_BASE", 0xc0000102, 0xffffffffffffffffULL, NULL }, //{ "TSC_AUX", 0xc0000103, 0x00000000ffffffffULL, NULL }, { "SYSCFG", 0xc0010010, 0xffffffffffffffffULL, NULL }, { "IORRBase0", 0xc0010016, 0xffffffffffffffffULL, NULL }, { "IORRMask0", 0xc0010017, 0xffffffffffffffffULL, NULL }, { "IORRBase1", 0xc0010018, 0xffffffffffffffffULL, NULL }, { "IORRMask1", 0xc0010019, 0xffffffffffffffffULL, NULL }, { "TOP_MEM", 0xc001001a, 0xffffffffffffffffULL, NULL }, { "TOP_MEM2", 0xc001001d, 0xffffffffffffffffULL, NULL }, { "Processor_Name_String", 0xc0010030, 0xffffffffffffffffULL, NULL }, { "Processor_Name_String", 0xc0010031, 0xffffffffffffffffULL, NULL }, { "Processor_Name_String", 0xc0010032, 0xffffffffffffffffULL, NULL }, { "Processor_Name_String", 0xc0010033, 0xffffffffffffffffULL, NULL }, { "Processor_Name_String", 0xc0010034, 0xffffffffffffffffULL, NULL }, { "Processor_Name_String", 0xc0010035, 0xffffffffffffffffULL, NULL }, { "TSC Ratio", 0xc0010104, 0xffffffffffffffffULL, NULL }, //{ "SMBASE", 0xc0010111, 0xffffffffffffffffULL, NULL }, { "SMM_ADDR", 0xc0010112, 0xffffffffffffffffULL, NULL }, { "SMM_MASK", 0xc0010113, 0xffffffffffffffffULL, NULL }, { "VM_CR", 0xc0010114, 0xffffffffffffffffULL, NULL }, { "IGNNE", 0xc0010115, 0xffffffffffffffffULL, NULL }, { "SMM_CTL", 0xc0010116, 0xffffffffffffffffULL, NULL }, { "VM_HSAVE_PA", 0xc0010117, 0xffffffffffffffffULL, NULL }, { "SVM_KEY_MSR", 0xc0010118, 0xffffffffffffffffULL, NULL }, { "OSVW_ID_Length", 0xc0010140, 0xffffffffffffffffULL, NULL }, { NULL, 0x00000000, 0, NULL } }; static const msr_info IA32_MSRs[] = { //{ "P5_MC_ADDR", 0x00000000, 0xffffffffffffffffULL, NULL }, { "P5_MC_TYPE", 0x00000001, 0xffffffffffffffffULL, NULL }, { "MONITOR_FILTER_SIZE", 0x00000006, 0xffffffffffffffffULL, NULL }, //{ "TIME_STAMP_COUNTER", 0x00000010, 0xffffffffffffffffULL, NULL }, { "PLATFORM_ID", 0x00000017, 0x001c000000000000ULL, NULL }, { "APIC_BASE", 0x0000001b, 0xfffffffffffffeffULL, NULL }, { "FEATURE_CONTROL", 0x0000003a, 0x000000000016ff07ULL, NULL }, { "TSC_ADJUST", 0x0000003b, 0xffffffffffffffffULL, NULL }, { "BIOS_SIGN_ID", 0x0000008b, 0xffffffff00000000ULL, NULL }, { "SMM_MONITOR_CTL", 0x0000009b, 0x00000000fffff005ULL, NULL }, { "MTRRCAP", 0x000000fe, 0x0000000000001dffULL, NULL }, /* * LP#1582005 - Do not check sysenter MSRs, they will be different on * each CPU, so checking them across CPUs is incorrect * { "SYSENTER_CS", 0x00000174, 0x000000000000ffffULL, NULL }, { "SYSENTER_ESP", 0x00000175, 0xffffffffffffffffULL, NULL }, { "SYSENTER_EIP", 0x00000176, 0xffffffffffffffffULL, NULL }, */ { "MCG_CAP", 0x00000179, 0x0000000001ff0fffULL, NULL }, { "MCG_STATUS", 0x0000017a, 0xffffffffffffffffULL, NULL }, { "MCG_CTL", 0x0000017b, 0xffffffffffffffffULL, NULL }, { "CLOCK_MODULATION", 0x0000019a, 0x000000000000001fULL, NULL }, { "THERM_INTERRUPT", 0x0000019b, 0x0000000001ffff1fULL, NULL }, //{ "THERM_STATUS", 0x0000019c, 0x0000000080000fffULL, NULL }, { "MISC_ENABLE", 0x000001a0, 0x0000000400c51889ULL, NULL }, { "PACKAGE_THERM_INTERRUPT", 0x000001b2, 0x0000000001ffff17ULL, NULL }, { "SMRR_PHYSBASE", 0x000001f2, 0x00000000fffff0ffULL, NULL }, { "SMRR_PHYSMASK", 0x000001f3, 0x00000000fffff800ULL, NULL }, { "PLATFORM_DCA_CAP", 0x000001f8, 0xffffffffffffffffULL, NULL }, { "CPU_DCA_CAP", 0x000001f9, 0xffffffffffffffffULL, NULL }, { "DCA_O_CAP", 0x000001fa, 0x000000000501e7ffULL, NULL }, { "MTRR_PHYSBASE0", 0x00000200, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK0", 0x00000201, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE1", 0x00000202, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK1", 0x00000203, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE2", 0x00000204, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK2", 0x00000205, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE3", 0x00000206, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK3", 0x00000207, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE4", 0x00000208, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK4", 0x00000209, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE5", 0x0000020a, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK5", 0x0000020b, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE6", 0x0000020c, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK6", 0x0000020d, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE7", 0x0000020e, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK7", 0x0000020f, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE8", 0x00000210, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK8", 0x00000211, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSBASE9", 0x00000212, 0xffffffffffffffffULL, NULL }, { "MTRR_PHYSMASK9", 0x00000213, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX64K_000", 0x00000250, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX16K_800", 0x00000258, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX16K_a00", 0x00000259, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_C000", 0x00000268, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_C800", 0x00000269, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_D000", 0x0000026a, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_D800", 0x0000026b, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_E000", 0x0000026c, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_E800", 0x0000026d, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_F000", 0x0000026e, 0xffffffffffffffffULL, NULL }, { "MTRR_FIX4K_F800", 0x0000026f, 0xffffffffffffffffULL, NULL }, { "PAT", 0x00000277, 0x0707070707070707ULL, NULL }, { "MC0_CTL2", 0x00000280, 0x0000000040007fffULL, NULL }, { "MC1_CTL2", 0x00000281, 0x0000000040007fffULL, NULL }, { "MC2_CTL2", 0x00000282, 0x0000000040007fffULL, NULL }, { "MC3_CTL2", 0x00000283, 0x0000000040007fffULL, NULL }, { "MC4_CTL2", 0x00000284, 0x0000000040007fffULL, NULL }, { "MC5_CTL2", 0x00000285, 0x0000000040007fffULL, NULL }, { "MC6_CTL2", 0x00000286, 0x0000000040007fffULL, NULL }, { "MC7_CTL2", 0x00000287, 0x0000000040007fffULL, NULL }, { "MC8_CTL2", 0x00000288, 0x0000000040007fffULL, NULL }, { "MC9_CTL2", 0x00000289, 0x0000000040007fffULL, NULL }, { "MC10_CTL2", 0x0000028a, 0x0000000040007fffULL, NULL }, { "MC11_CTL2", 0x0000028b, 0x0000000040007fffULL, NULL }, { "MC12_CTL2", 0x0000028c, 0x0000000040007fffULL, NULL }, { "MC13_CTL2", 0x0000028d, 0x0000000040007fffULL, NULL }, { "MC14_CTL2", 0x0000028e, 0x0000000040007fffULL, NULL }, { "MC15_CTL2", 0x0000028f, 0x0000000040007fffULL, NULL }, { "MC16_CTL2", 0x00000290, 0x0000000040007fffULL, NULL }, { "MC17_CTL2", 0x00000291, 0x0000000040007fffULL, NULL }, { "MC18_CTL2", 0x00000292, 0x0000000040007fffULL, NULL }, { "MC19_CTL2", 0x00000293, 0x0000000040007fffULL, NULL }, { "MC20_CTL2", 0x00000294, 0x0000000040007fffULL, NULL }, { "MC21_CTL2", 0x00000295, 0x0000000040007fffULL, NULL }, { "MC22_CTL2", 0x00000296, 0x0000000040007fffULL, NULL }, { "MC23_CTL2", 0x00000297, 0x0000000040007fffULL, NULL }, { "MC24_CTL2", 0x00000298, 0x0000000040007fffULL, NULL }, { "MC25_CTL2", 0x00000299, 0x0000000040007fffULL, NULL }, { "MC26_CTL2", 0x0000029a, 0x0000000040007fffULL, NULL }, { "MC27_CTL2", 0x0000029b, 0x0000000040007fffULL, NULL }, { "MC28_CTL2", 0x0000029c, 0x0000000040007fffULL, NULL }, { "MC29_CTL2", 0x0000029d, 0x0000000040007fffULL, NULL }, { "MC30_CTL2", 0x0000029e, 0x0000000040007fffULL, NULL }, { "MC31_CTL2", 0x0000029f, 0x0000000040007fffULL, NULL }, { "MTRR_DEF_TYPE", 0x000002ff, 0x0000000000000c07ULL, NULL }, { "PEBS_ENABLE", 0x000003f1, 0x0000000000000001ULL, NULL }, { "VMX_BASIC", 0x00000480, 0xffffffffffffffffULL, NULL }, { "VMX_PINPASED_CTLS", 0x00000481, 0xffffffffffffffffULL, NULL }, { "VMX_PROCBASED_CTLS", 0x00000482, 0xffffffffffffffffULL, NULL }, { "VMX_EXIT_CTLS", 0x00000483, 0xffffffffffffffffULL, NULL }, { "VMX_ENTRY_CTLS", 0x00000484, 0xffffffffffffffffULL, NULL }, { "VMX_MISC", 0x00000485, 0xffffffffffffffffULL, NULL }, { "VMX_CR0_FIXED0", 0x00000486, 0xffffffffffffffffULL, NULL }, { "VMX_CR0_FIXED1", 0x00000487, 0xffffffffffffffffULL, NULL }, { "VMX_CR4_FIXED0", 0x00000488, 0xffffffffffffffffULL, NULL }, { "VMX_CR4_FIXED1", 0x00000489, 0xffffffffffffffffULL, NULL }, { "VMX_VMX_VMCS_ENUM", 0x0000048a, 0xffffffffffffffffULL, NULL }, { "VMX_PROCBASED_CTLS2", 0x0000048b, 0xffffffffffffffffULL, NULL }, { "VMX_EPT_VPID_CAP", 0x0000048c, 0xffffffffffffffffULL, NULL }, { "VMX_TRUE_PINBASED_CTLS", 0x0000048d, 0xffffffffffffffffULL, NULL }, { "VMX_TRUE_PROCBASED_CTLS", 0x0000048e, 0xffffffffffffffffULL, NULL }, { "VMX_TRUE_EXIT_CTLS", 0x0000048f, 0xffffffffffffffffULL, NULL }, { "VMX_TRUE_ENTRY_CTLS", 0x00000490, 0xffffffffffffffffULL, NULL }, { "VMX_VMFUNC", 0x00000491, 0xffffffffffffffffULL, NULL }, /* Do not check syscall MSRs, they will be different on * each CPU, so checking them across CPUs is incorrect { "A_PMC4", 0x000004c5, 0xffffffffffffffffULL, NULL }, { "A_PMC5", 0x000004c6, 0xffffffffffffffffULL, NULL }, { "A_PMC6", 0x000004c7, 0xffffffffffffffffULL, NULL }, { "A_PMC7", 0x000004c8, 0xffffffffffffffffULL, NULL }, */ { "EFER", 0xc0000080, 0x0000000000000d01ULL, NULL }, /* Do not check syscall MSRs, they will be different on * each CPU, so checking them across CPUs is incorrect { "STAR", 0xc0000081, 0xffffffffffffffffULL, NULL }, { "LSTAR", 0xc0000082, 0xffffffffffffffffULL, NULL }, { "FMASK", 0xc0000084, 0xffffffffffffffffULL, NULL }, */ //{ "FS_BASE", 0xc0000100, 0xffffffffffffffffULL, NULL }, //{ "GS_BASE", 0xc0000101, 0xffffffffffffffffULL, NULL }, { "KERNEL_GS_BASE", 0xc0000102, 0xffffffffffffffffULL, NULL }, { NULL, 0x00000000, 0, NULL }, }; static const msr_info IA32_atom_MSRs[] = { { "BIOS_UPDT_TRIG", 0x00000079, 0xffffffffffffffffULL, NULL }, { "MSR_FSB_FREQ", 0x000000cd, 0x0000000000000007ULL, NULL }, { "MSR_BBL_CR_CTL3", 0x0000011e, 0x0000000000800101ULL, NULL }, { "MSR_THERM2_CTL", 0x0000019d, 0x0000000000010000ULL, NULL }, { "MISC_ENABLE", 0x000001a0, 0x0000000400d53c89ULL, NULL }, { NULL, 0x00000000, 0, NULL }, }; static const msr_info IA32_silvermont_MSRs[] = { { "MSR_PMG_IO_CAPTURE_BASE", 0x000000e4, 0x000000000007ffffULL, NULL }, { "MSR_BBL_CR_CTL3", 0x0000011e, 0x0000000000800101ULL, NULL }, { "MSR_FEATURE_CONFIG", 0x0000013c, 0x0000000000000003ULL, NULL }, { "MISC_ENABLE", 0x000001a0, 0x0000004400c51889ULL, NULL }, { "MSR_TEMPERATURE_TARGET", 0x000001a2, 0x000000003fff0000ULL, NULL }, { NULL, 0x00000000, 0, NULL }, }; static const msr_info IA32_nehalem_MSRs[] = { { "BIOS_UPDT_TRIG", 0x00000079, 0xffffffffffffffffULL, NULL }, { "MSR_PLATFORM_INFO", 0x000000ce, 0x0000ff003001ff00ULL, NULL }, { "MSR_PKG_CST_CONFIG_CONTROL", 0x000000e2, 0x0000000007008407ULL, NULL }, { "MSR_PMG_IO_CAPTURE_BASE", 0x000000e4, 0x000000000007ffffULL, NULL }, { "MSR_TEMPERATURE_TARGET", 0x000001a2, 0x0000000000ff0000ULL, NULL }, { "MSR_OFFCORE_RSP_0", 0x000001a6, 0xffffffffffffffffULL, NULL }, { "MSR_MISC_PWR_MGMT", 0x000001aa, 0x0000000000000003ULL, NULL }, { "MSR_TURBO_POWER_CURRENT_LIMIT",0x000001ac, 0x00000000ffffffffULL, NULL }, { "MSR_TURBO_RATIO_LIMIT", 0x000001ad, 0x00000000ffffffffULL, NULL }, { "MSR_POWER_CTL", 0x000001fc, 0x0000000000000002ULL, NULL }, { NULL, 0x00000000, 0, NULL }, }; static const msr_info IA32_sandybridge_MSRs[] = { { "BIOS_UPDT_TRIG", 0x00000079, 0xffffffffffffffffULL, NULL }, { "MSR_PLATFORM_INFO", 0x000000ce, 0x0000ff003001ff00ULL, NULL }, { "MSR_PKG_CST_CONFIG_CONTROL", 0x000000e2, 0x0000000007008407ULL, NULL }, { "MSR_PMG_IO_CAPTURE_BASE", 0x000000e4, 0x000000000007ffffULL, NULL }, { "MSR_TEMPERATURE_TARGET", 0x000001a2, 0x0000000000ff0000ULL, NULL }, { "MSR_OFFCORE_RSP_0", 0x000001a6, 0xffffffffffffffffULL, NULL }, { "MSR_TURBO_RATIO_LIMIT", 0x000001ad, 0x00000000ffffffffULL, NULL }, { "MSR_POWER_CTL", 0x000001fc, 0x0000000000000002ULL, NULL }, { "MSR_PKGC3_IRTL", 0x0000060a, 0x0000000000009fffULL, NULL }, { "MSR_PKGC6_IRTL", 0x0000060b, 0x0000000000009fffULL, NULL }, { "MSR_PKGC7_IRTL", 0x0000060c, 0x0000000000009fffULL, NULL }, { "MSR_PKG_RAPL_POWER_LIMIT", 0x00000610, 0xffffffffffffffffULL, NULL }, { "MSR_PKG_RAPL_POWER_INFO", 0x00000614, 0xffffffffffffffffULL, NULL }, { "MSR_PP0_POWER_LIMIT", 0x00000638, 0xffffffffffffffffULL, NULL }, { "MSR_PP0_POLICY", 0x0000063a, 0xffffffffffffffffULL, NULL }, { "MSR_PP1_POWER_LIMIT", 0x00000640, 0xffffffffffffffffULL, NULL }, { "MSR_PP1_POLICY", 0x00000642, 0xffffffffffffffffULL, NULL }, { NULL, 0x00000000, 0, NULL }, }; static const msr_info IA32_ivybridge_MSRs[] = { { "MSR_PLATFORM_INFO", 0x000000ce, 0x00ffff073000ff00ULL, NULL }, { "MSR_PKG_CST_CONFIG_CONTROL", 0x000000e2, 0x000000001e008407ULL, NULL }, { "MSR_CONFIG_TDP_NOMINAL", 0x00000648, 0x00000000000000ffULL, NULL }, { "MSR_CONFIG_TDP_LEVEL1", 0x00000649, 0x7fff7fff00ff7fffULL, NULL }, { "MSR_CONFIG_TDP_LEVEL2", 0x0000064a, 0x7fff7fff00ff7fffULL, NULL }, { "MSR_CONFIG_TDP_CONTROL", 0x0000064b, 0x0000000080000003ULL, NULL }, { "MSR_TURBO_ACTIVATION_RATIO", 0x0000064c, 0x00000000800000ffULL, NULL }, { NULL, 0x00000000, 0, NULL }, }; static const msr_info IA32_ivybridge_ep_MSRs[] = { { "MSR_PLATFORM_INFO", 0x000000ce, 0x00ffff073000ff00ULL, NULL }, { "MSR_PKG_CST_CONFIG_CONTROL", 0x000000e2, 0x000000001e008407ULL, NULL }, { "MSR_ERROR_CONTROL", 0x0000017f, 0x0000000000000002ULL, NULL }, /* Not sure about the following, commented out for the moment */ /* { "MSR_MC5_CTL", 0x00000414, 0xffffffffffffffffULL, NULL }, { "MSR_MC5_STATUS", 0x00000415, 0xffffffffffffffffULL, NULL }, { "MSR_MC5_ADDR", 0x00000416, 0xffffffffffffffffULL, NULL }, { "MSR_MC5_MISC", 0x00000417, 0xffffffffffffffffULL, NULL }, { "MSR_MC6_CTL", 0x00000418, 0xffffffffffffffffULL, NULL }, { "MSR_MC6_STATUS", 0x00000419, 0xffffffffffffffffULL, NULL }, { "MSR_MC6_ADDR", 0x0000041a, 0xffffffffffffffffULL, NULL }, { "MSR_MC6_MISC", 0x0000041b, 0xffffffffffffffffULL, NULL }, { "MSR_MC7_CTL", 0x0000041c, 0xffffffffffffffffULL, NULL }, { "MSR_MC7_STATUS", 0x0000041d, 0xffffffffffffffffULL, NULL }, { "MSR_MC7_ADDR", 0x0000041e, 0xffffffffffffffffULL, NULL }, { "MSR_MC7_MISC", 0x0000041f, 0xffffffffffffffffULL, NULL }, { "MSR_MC8_CTL", 0x00000420, 0xffffffffffffffffULL, NULL }, { "MSR_MC8_STATUS", 0x00000421, 0xffffffffffffffffULL, NULL }, { "MSR_MC8_ADDR", 0x00000422, 0xffffffffffffffffULL, NULL }, { "MSR_MC8_MISC", 0x00000423, 0xffffffffffffffffULL, NULL }, { "MSR_MC9_CTL", 0x00000424, 0xffffffffffffffffULL, NULL }, { "MSR_MC9_STATUS", 0x00000425, 0xffffffffffffffffULL, NULL }, { "MSR_MC9_ADDR", 0x00000426, 0xffffffffffffffffULL, NULL }, { "MSR_MC9_MISC", 0x00000427, 0xffffffffffffffffULL, NULL }, { "MSR_MC10_CTL", 0x00000428, 0xffffffffffffffffULL, NULL }, { "MSR_MC10_STATUS", 0x00000429, 0xffffffffffffffffULL, NULL }, { "MSR_MC10_ADDR", 0x0000042a, 0xffffffffffffffffULL, NULL }, { "MSR_MC10_MISC", 0x0000042b, 0xffffffffffffffffULL, NULL }, { "MSR_MC11_CTL", 0x0000042c, 0xffffffffffffffffULL, NULL }, { "MSR_MC11_STATUS", 0x0000042d, 0xffffffffffffffffULL, NULL }, { "MSR_MC11_ADDR", 0x0000042e, 0xffffffffffffffffULL, NULL }, { "MSR_MC11_MISC", 0x0000042f, 0xffffffffffffffffULL, NULL }, { "MSR_MC12_CTL", 0x00000430, 0xffffffffffffffffULL, NULL }, { "MSR_MC12_STATUS", 0x00000431, 0xffffffffffffffffULL, NULL }, { "MSR_MC12_ADDR", 0x00000432, 0xffffffffffffffffULL, NULL }, { "MSR_MC12_MISC", 0x00000433, 0xffffffffffffffffULL, NULL }, { "MSR_MC13_CTL", 0x00000434, 0xffffffffffffffffULL, NULL }, { "MSR_MC13_STATUS", 0x00000435, 0xffffffffffffffffULL, NULL }, { "MSR_MC13_ADDR", 0x00000436, 0xffffffffffffffffULL, NULL }, { "MSR_MC13_MISC", 0x00000437, 0xffffffffffffffffULL, NULL }, { "MSR_MC14_CTL", 0x00000438, 0xffffffffffffffffULL, NULL }, { "MSR_MC14_STATUS", 0x00000439, 0xffffffffffffffffULL, NULL }, { "MSR_MC14_ADDR", 0x0000043a, 0xffffffffffffffffULL, NULL }, { "MSR_MC14_MISC", 0x0000043b, 0xffffffffffffffffULL, NULL }, { "MSR_MC15_CTL", 0x0000043c, 0xffffffffffffffffULL, NULL }, { "MSR_MC15_STATUS", 0x0000043d, 0xffffffffffffffffULL, NULL }, { "MSR_MC15_ADDR", 0x0000043e, 0xffffffffffffffffULL, NULL }, { "MSR_MC15_MISC", 0x0000043f, 0xffffffffffffffffULL, NULL }, { "MSR_MC16_CTL", 0x00000440, 0xffffffffffffffffULL, NULL }, { "MSR_MC16_STATUS", 0x00000441, 0xffffffffffffffffULL, NULL }, { "MSR_MC16_ADDR", 0x00000442, 0xffffffffffffffffULL, NULL }, { "MSR_MC16_MISC", 0x00000443, 0xffffffffffffffffULL, NULL }, { "MSR_MC17_CTL", 0x00000444, 0xffffffffffffffffULL, NULL }, { "MSR_MC17_STATUS", 0x00000445, 0xffffffffffffffffULL, NULL }, { "MSR_MC17_ADDR", 0x00000446, 0xffffffffffffffffULL, NULL }, { "MSR_MC17_MISC", 0x00000447, 0xffffffffffffffffULL, NULL }, { "MSR_MC18_CTL", 0x00000448, 0xffffffffffffffffULL, NULL }, { "MSR_MC18_STATUS", 0x00000449, 0xffffffffffffffffULL, NULL }, { "MSR_MC18_ADDR", 0x0000044a, 0xffffffffffffffffULL, NULL }, { "MSR_MC18_MISC", 0x0000044b, 0xffffffffffffffffULL, NULL }, { "MSR_MC19_CTL", 0x0000044c, 0xffffffffffffffffULL, NULL }, { "MSR_MC19_STATUS", 0x0000044d, 0xffffffffffffffffULL, NULL }, { "MSR_MC19_ADDR", 0x0000044e, 0xffffffffffffffffULL, NULL }, { "MSR_MC19_MISC", 0x0000044f, 0xffffffffffffffffULL, NULL }, { "MSR_MC20_CTL", 0x00000450, 0xffffffffffffffffULL, NULL }, { "MSR_MC20_STATUS", 0x00000451, 0xffffffffffffffffULL, NULL }, { "MSR_MC20_ADDR", 0x00000452, 0xffffffffffffffffULL, NULL }, { "MSR_MC20_MISC", 0x00000453, 0xffffffffffffffffULL, NULL }, { "MSR_MC21_CTL", 0x00000454, 0xffffffffffffffffULL, NULL }, { "MSR_MC21_STATUS", 0x00000455, 0xffffffffffffffffULL, NULL }, { "MSR_MC21_ADDR", 0x00000456, 0xffffffffffffffffULL, NULL }, { "MSR_MC21_MISC", 0x00000457, 0xffffffffffffffffULL, NULL }, { "MSR_MC22_CTL", 0x00000458, 0xffffffffffffffffULL, NULL }, { "MSR_MC22_STATUS", 0x00000459, 0xffffffffffffffffULL, NULL }, { "MSR_MC22_ADDR", 0x0000045a, 0xffffffffffffffffULL, NULL }, { "MSR_MC22_MISC", 0x0000045b, 0xffffffffffffffffULL, NULL }, { "MSR_MC23_CTL", 0x0000045c, 0xffffffffffffffffULL, NULL }, { "MSR_MC23_STATUS", 0x0000045d, 0xffffffffffffffffULL, NULL }, { "MSR_MC23_ADDR", 0x0000045e, 0xffffffffffffffffULL, NULL }, { "MSR_MC23_MISC", 0x0000045f, 0xffffffffffffffffULL, NULL }, { "MSR_MC24_CTL", 0x00000460, 0xffffffffffffffffULL, NULL }, { "MSR_MC24_STATUS", 0x00000461, 0xffffffffffffffffULL, NULL }, { "MSR_MC24_ADDR", 0x00000462, 0xffffffffffffffffULL, NULL }, { "MSR_MC24_MISC", 0x00000463, 0xffffffffffffffffULL, NULL }, { "MSR_MC25_CTL", 0x00000464, 0xffffffffffffffffULL, NULL }, { "MSR_MC25_STATUS", 0x00000465, 0xffffffffffffffffULL, NULL }, { "MSR_MC25_ADDR", 0x00000466, 0xffffffffffffffffULL, NULL }, { "MSR_MC25_MISC", 0x00000467, 0xffffffffffffffffULL, NULL }, { "MSR_MC26_CTL", 0x00000468, 0xffffffffffffffffULL, NULL }, { "MSR_MC26_STATUS", 0x00000469, 0xffffffffffffffffULL, NULL }, { "MSR_MC26_ADDR", 0x0000046a, 0xffffffffffffffffULL, NULL }, { "MSR_MC26_MISC", 0x0000046b, 0xffffffffffffffffULL, NULL }, */ { "MSR_PKG_PERF_STATUS", 0x00000613, 0x00000000ffffffffULL, NULL }, { "MSR_DRAM_POWER_LIMIT", 0x00000618, 0x0000000080ffffffULL, NULL }, { "MSR_DRAM_ENERGY_STATUS", 0x00000619, 0x00000000ffffffffULL, NULL }, { "MSR_DRAM_PERF_STATUS", 0x0000061b, 0x00000000ffffffffULL, NULL }, { "MSR_DRAM_POWER_INFO", 0x0000061c, 0x00ff7fff7fff7fffULL, NULL }, { "MSR_CONFIG_TDP_NOMINAL", 0x00000648, 0x00000000000000ffULL, NULL }, { "MSR_CONFIG_TDP_LEVEL1", 0x00000649, 0x7fff7fff00ff7fffULL, NULL }, { "MSR_CONFIG_TDP_LEVEL2", 0x0000064a, 0x7fff7fff00ff7fffULL, NULL }, { "MSR_CONFIG_TDP_CONTROL", 0x0000064b, 0x0000000080000003ULL, NULL }, { "MSR_TURBO_ACTIVATION_RATIO", 0x0000064c, 0x00000000800000ffULL, NULL }, { NULL, 0x00000000, 0, NULL }, }; static const msr_info IA32_haswell_MSRs[] = { { "MSR_PLATFORM_INFO", 0x000000ce, 0x00ffff073000ff00ULL, NULL }, //{ "IA32_VMX_FMFUNC", 0x00000491, 0x0000000000000000ULL, NULL }, { "MSR_CONFIG_TDP_NOMINAL", 0x00000648, 0x00000000000000ffULL, NULL }, { "MSR_CONFIG_TDP_LEVEL1", 0x00000649, 0x7fff7fff00ff7fffULL, NULL }, { "MSR_CONFIG_TDP_LEVEL2", 0x0000064a, 0x7fff7fff00ff7fffULL, NULL }, { "MSR_CONFIG_TDP_CONTROL", 0x0000064b, 0x0000000080000003ULL, NULL }, { "MSR_TURBO_ACTIVATION_RATIO", 0x0000064c, 0x00000000800000ffULL, NULL }, { "MSR_PKG_C8_RESIDENCY", 0x00000630, 0x0fffffffffffffffULL, NULL }, { "MSR_PKG_C9_RESIDENCY", 0x00000630, 0x0fffffffffffffffULL, NULL }, { "MSR_PKG_C10_RESIDENCY", 0x00000630, 0x0fffffffffffffffULL, NULL }, { "MSR_SMM_MCA_CAP", 0x0000017d, 0x0c00000000000000ULL, NULL }, { "MSR_TURBO_RATIO_LIMIT", 0x000001ad, 0x00000000ffffffffULL, NULL }, { "MSR_UNC_PERF_GLOBAL_CTRL", 0x00000391, 0x00000000e000001fULL, NULL }, //{ "MSR_UNC_PERF_GLOBAL_STATUS",0x00000392, 0x000000000000000fULL, NULL }, { "MSR_UNC_PERF_FIXED_CTRL", 0x00000394, 0x0000000005000000ULL, NULL }, //{ "MSR_UNC_PERF_FIXED_CTR", 0x00000395, 0x0000ffffffffffffULL, NULL }, { "MSR_UNC_CB0_CONFIG", 0x00000396, 0x000000000000000fULL, NULL }, //{ "MSR_UNC_ARB_PER_CTR0", 0x000003b0, 0xffffffffffffffffULL, NULL }, //{ "MSR_UNC_ARB_PER_CTR1", 0x000003b1, 0xffffffffffffffffULL, NULL }, //{ "MSR_UNC_ARB_PERFEVTSEL0", 0x000003b2, 0xffffffffffffffffULL, NULL }, //{ "MSR_UNC_ARB_PERFEVTSEL1", 0x000003b3, 0xffffffffffffffffULL, NULL }, { "MSR_UNC_PERF_GLOBAL_CTRL", 0x00000391, 0x00000000e000000fULL, NULL }, { "MSR_UNC_PERF_FIXED_CTR", 0x00000395, 0x0000ffffffffffffULL, NULL }, { "MSR_SMM_FEATURE_CONTROL", 0x000004e0, 0x0000000000000005ULL, NULL }, { "MSR_SMM_DELAYED", 0x000004e2, 0xffffffffffffffffULL, NULL }, { "MSR_SMM_BLOCKED", 0x000004e3, 0xffffffffffffffffULL, NULL }, { "MSR_PP1_POWER_LIMIT", 0x00000640, 0x0000000080ffffffULL, NULL }, { "MSR_PP1_ENERGY_STATUS", 0x00000641, 0x00000000ffffffffULL, NULL }, { "MSR_PP1_POLICY", 0x00000652, 0x000000000000000fULL, NULL }, //{ "MSR_UNC_CB0_0_PERFEVTSEL0" 0x00000700, 0xffffffffffffffffULL, NULL }, //{ "MSR_UNC_CB0_0_PERFEVTSEL1",0x00000701, 0xffffffffffffffffULL, NULL }, //{ "MSR_UNC_CB0_0_PER_CTR0", 0x00000706, 0xffffffffffffffffULL, NULL },` //{ "MSR_UNC_CB0_0_PER_CTR0", 0x00000707, 0xffffffffffffffffULL, NULL },` //{ "MSR_UNC_CB0_1_PERFEVTSEL0" 0x00000710, 0xffffffffffffffffULL, NULL }, //{ "MSR_UNC_CB0_1_PERFEVTSEL1",0x00000711, 0xffffffffffffffffULL, NULL }, //{ "MSR_UNC_CB0_1_PER_CTR0", 0x00000716, 0xffffffffffffffffULL, NULL },` //{ "MSR_UNC_CB0_1_PER_CTR0", 0x00000717, 0xffffffffffffffffULL, NULL },` //{ "MSR_UNC_CB0_1_PERFEVTSEL0" 0x00000720, 0xffffffffffffffffULL, NULL }, //{ "MSR_UNC_CB0_1_PERFEVTSEL1",0x00000721, 0xffffffffffffffffULL, NULL }, //{ "MSR_UNC_CB0_1_PER_CTR0", 0x00000726, 0xffffffffffffffffULL, NULL },` //{ "MSR_UNC_CB0_1_PER_CTR0", 0x00000727, 0xffffffffffffffffULL, NULL },` //{ "MSR_UNC_CB0_1_PERFEVTSEL0" 0x00000730, 0xffffffffffffffffULL, NULL }, //{ "MSR_UNC_CB0_1_PERFEVTSEL1",0x00000731, 0xffffffffffffffffULL, NULL }, //{ "MSR_UNC_CB0_1_PER_CTR0", 0x00000736, 0xffffffffffffffffULL, NULL },` //{ "MSR_UNC_CB0_1_PER_CTR0", 0x00000737, 0xffffffffffffffffULL, NULL },` { NULL, 0x00000000, 0, NULL }, }; static int msr_table_check(fwts_framework *fw, const msr_info *const info) { int i; for (i = 0; info[i].name != NULL; i++) msr_consistent_check(fw, LOG_LEVEL_MEDIUM, info[i].name, info[i].msr, 0, info[i].mask, info[i].callback); return FWTS_OK; } static int msr_cpu_generic(fwts_framework *fw) { if (intel_cpu) msr_table_check(fw, IA32_MSRs); else if (amd_cpu || hygon_cpu) msr_table_check(fw, AMD_MSRs); else fwts_skipped(fw, "Not an AMD or Intel CPU, test skipped."); return FWTS_OK; } typedef struct { const char *const microarch; const uint8_t family; const uint8_t model; const msr_info *const info; } cpu_to_msr; /* * Intel's CPU-specific MSRs can be found in * Intel® 64 and IA-32 ArchitecturesSoftware Developer’s Manual Volume 4 */ static const cpu_to_msr cpu_msr_map[] = { { "Pentium", 0x05, 0x01, NULL }, { "Pentium", 0x05, 0x02, NULL }, { "Pentium", 0x05, 0x04, NULL }, { "Pentium Pro", 0x06, 0x01, NULL }, { "Pentium II", 0x06, 0x03, NULL }, { "Pentium II", 0x06, 0x05, NULL }, { "Pentium III", 0x06, 0x07, NULL }, { "Pentium III", 0x06, 0x08, NULL }, { "Pentium M", 0x06, 0x09, NULL }, { "Pentium III", 0x06, 0x0a, NULL }, { "Pentium III", 0x06, 0x0b, NULL }, { "Pentium 4, Xeon", 0x06, 0x00, NULL }, { "Pentium 4, Xeon", 0x0f, 0x01, NULL }, { "Pentium 4, Xeon", 0x0f, 0x02, NULL }, { "Pentium 4, Pentium D, Xeon", 0x0f, 0x03, NULL }, { "Pentium 4, Pentium D, Xeon", 0x0f, 0x04, NULL }, { "Pentium 4, Pentium D, Xeon", 0x0f, 0x06, NULL }, { "Nehalem", 0x06, 0x1a, IA32_nehalem_MSRs }, { "Nehalem", 0x06, 0x1e, IA32_nehalem_MSRs }, { "Nehalem", 0x06, 0x1f, IA32_nehalem_MSRs }, { "Nehalem", 0x06, 0x2e, IA32_nehalem_MSRs }, { "Westmere", 0x06, 0x25, IA32_nehalem_MSRs }, { "Westmere", 0x06, 0x2c, IA32_nehalem_MSRs }, { "Westmere", 0x06, 0x2f, IA32_nehalem_MSRs }, { "Atom", 0x06, 0x1c, IA32_atom_MSRs }, { "Atom", 0x06, 0x26, IA32_atom_MSRs }, { "Atom", 0x06, 0x27, IA32_atom_MSRs }, { "Atom", 0x06, 0x35, IA32_atom_MSRs }, { "Atom", 0x06, 0x36, IA32_atom_MSRs }, { "Atom", 0x06, 0x37, IA32_silvermont_MSRs }, { "Atom", 0x06, 0x4a, IA32_silvermont_MSRs }, { "Atom", 0x06, 0x4d, IA32_silvermont_MSRs }, { "Atom", 0x06, 0x5a, IA32_silvermont_MSRs }, { "Atom", 0x06, 0x5d, IA32_silvermont_MSRs }, { "Sandybridge", 0x06, 0x2a, IA32_sandybridge_MSRs }, { "Sandybridge", 0x06, 0x2d, IA32_sandybridge_MSRs }, { "Ivybridge", 0x06, 0x3a, IA32_ivybridge_MSRs }, { "Ivybridge-EP", 0x06, 0x3e, IA32_ivybridge_ep_MSRs }, { "Haswell", 0x06, 0x3c, IA32_haswell_MSRs }, { "Haswell", 0x06, 0x45, IA32_haswell_MSRs }, { "Haswell", 0x06, 0x46, IA32_haswell_MSRs }, { NULL, 0x00, 0x00, NULL } }; static int msr_cpu_specific(fwts_framework *fw) { if (intel_cpu) { int i; bool checked = false; for (i = 0; cpu_msr_map[i].microarch; i++) { if ((cpu_msr_map[i].model == cpuinfo->x86_model) && (cpu_msr_map[i].family == cpuinfo->x86) && (cpu_msr_map[i].info)) { fwts_log_info(fw, "CPU family: 0x%x, model: 0x%x (%s)", cpu_msr_map[i].family, cpu_msr_map[i].model, cpu_msr_map[i].microarch); msr_table_check(fw, cpu_msr_map[i].info); checked = true; } } if (!checked) fwts_log_info(fw, "No model specific tests for model 0x%x.", cpuinfo->x86_model); } else fwts_skipped(fw, "Non-Intel CPU, test skipped."); return FWTS_OK; } static fwts_framework_minor_test msr_tests[] = { { msr_cpu_generic, "Test CPU generic MSRs." }, { msr_cpu_specific, "Test CPU specific model MSRs." }, { msr_pstate_ratios, "Test all P State Ratios." }, { msr_c1_c3_autodemotion, "Test C1 and C3 autodemotion." }, { msr_smrr, "Test SMRR MSR registers." }, { NULL, NULL } }; static fwts_framework_ops msr_ops = { .description = "MSR register tests.", .init = msr_init, .deinit = msr_deinit, .minor_tests = msr_tests }; FWTS_REGISTER("msr", &msr_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/cpu/nx/000077500000000000000000000000001465205512700130705ustar00rootroot00000000000000src/cpu/nx/nx.c000066400000000000000000000141051465205512700136620ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * from ideas in check-bios-nx * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include static int nx_test1(fwts_framework *fw) { fwts_cpuinfo_x86 *fwts_nx_cpuinfo; if ((fwts_nx_cpuinfo = fwts_cpu_get_info(-1)) == NULL) { fwts_log_error(fw, "Cannot get CPU info"); return FWTS_ERROR; } if (fwts_nx_cpuinfo->flags == NULL) { fwts_log_error(fw, "Cannot get CPU flags"); fwts_cpu_free_info(fwts_nx_cpuinfo); return FWTS_ERROR; } if (strstr(fwts_nx_cpuinfo->flags," nx")) { fwts_passed(fw, "CPU has NX flags, BIOS is not disabling it."); fwts_cpu_free_info(fwts_nx_cpuinfo); return FWTS_OK; } if (strstr(fwts_nx_cpuinfo->flags," pae") == NULL) { fwts_passed(fw, "CPU is not PAE capable, so it does not have NX."); fwts_cpu_free_info(fwts_nx_cpuinfo); return FWTS_OK; } if ((fwts_nx_cpuinfo->x86 == -1) || (fwts_nx_cpuinfo->x86_model == -1)) { fwts_failed(fw, LOG_LEVEL_HIGH, "NXNoCPUModel", "No model or family found for this CPU. Please check /proc/cpuinfo."); fwts_cpu_free_info(fwts_nx_cpuinfo); return FWTS_OK; } if (((fwts_nx_cpuinfo->x86 == 6) && (fwts_nx_cpuinfo->x86_model >= 14)) || ((fwts_nx_cpuinfo->x86 == 15) && (fwts_nx_cpuinfo->x86_model >= 3)) || (fwts_nx_cpuinfo->x86 > 15)) { fwts_failed(fw, LOG_LEVEL_HIGH, "NXCapableNotEnabled", "The CPU is family %d, model %d and has NX capabilities but they are not enabled.", fwts_nx_cpuinfo->x86, fwts_nx_cpuinfo->x86_model); fwts_advice(fw, "The system cannot use the protection features provided by NX because " "the BIOS is configured to disable this capability. Please ensure this " "is enabled in the BIOS. For more information please consult " "https://wiki.ubuntu.com/Security/CPUFeatures"); } else fwts_passed(fw, "The CPU is family %d, model %d and does not have NX capabilities.", fwts_nx_cpuinfo->x86, fwts_nx_cpuinfo->x86_model); fwts_cpu_free_info(fwts_nx_cpuinfo); return FWTS_OK; } static int nx_test2(fwts_framework *fw) { int i; int n; int cpu0_has_nx = 0; int failed = 0; fwts_log_info(fw, "This test verifies that all CPUs have the same NX flag setting. " "Although rare, BIOS may set the NX flag differently " "per CPU."); if ((n = fwts_cpu_enumerate()) == FWTS_ERROR) { fwts_log_error(fw, "Cannot determine number of CPUs"); return FWTS_ERROR; } if (n == 1) { fwts_log_info(fw, "Only one CPU, no need to run test."); return FWTS_OK; } for (i = 0; i < n; i++) { fwts_cpuinfo_x86 *fwts_nx_cpuinfo; if ((fwts_nx_cpuinfo = fwts_cpu_get_info(-1)) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "NXCPUInfoRead", "Cannot get CPU%d info", i); fwts_cpu_free_info(fwts_nx_cpuinfo); return FWTS_ERROR; } if (fwts_nx_cpuinfo->flags == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "NXCPUInfoRead", "Cannot get CPU%d flags", i); fwts_cpu_free_info(fwts_nx_cpuinfo); return FWTS_ERROR; } if (i == 0) { cpu0_has_nx = (strstr(fwts_nx_cpuinfo->flags," nx") != NULL); } else { if (cpu0_has_nx != (strstr(fwts_nx_cpuinfo->flags," nx") != NULL)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "NXCPUFlagsInconsistent", "CPU%d has different NX flags to CPU0.", i); failed++; } } fwts_cpu_free_info(fwts_nx_cpuinfo); } if (!failed) fwts_passed(fw, "All %d CPUs have the same NX flag %s.", n, cpu0_has_nx ? "set" : "cleared"); return FWTS_OK; } static int nx_test3(fwts_framework *fw) { int n; int i; int failed = 0; uint64_t msr_value = 0; const uint64_t nx_bit = 1ULL << 34; fwts_log_info(fw, "This test verifies that all CPUs have the same NX flag setting by examining the per CPU MSR register 0x1a0."); if ((n = fwts_cpu_enumerate()) == FWTS_ERROR) { fwts_log_error(fw, "Cannot determine number of CPUs"); return FWTS_ERROR; } for (i = 0; i < n; i++) { fwts_cpuinfo_x86 *fwts_nx_cpuinfo; uint64_t val; if ((fwts_nx_cpuinfo = fwts_cpu_get_info(-1)) == NULL) { fwts_log_error(fw, "Cannot get CPU info"); return FWTS_ERROR; } if (fwts_nx_cpuinfo->vendor_id == NULL) { fwts_log_error(fw, "Cannot get CPU vendor ID"); fwts_cpu_free_info(fwts_nx_cpuinfo); return FWTS_ERROR; } if (strstr(fwts_nx_cpuinfo->vendor_id, "Intel") == NULL) { fwts_log_info(fw, "Non-Intel CPU, skipping test."); fwts_cpu_free_info(fwts_nx_cpuinfo); return FWTS_OK; } if (fwts_cpu_readmsr(fw, i, 0x1a0, &val) != FWTS_OK) { fwts_log_error(fw, "Cannot read msr 0x1a0 on CPU%d", i); fwts_cpu_free_info(fwts_nx_cpuinfo); return FWTS_ERROR; } if (i == 0) { msr_value = val; } else { if ((msr_value & nx_bit) != (val & nx_bit)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "NXCPUFlagsInconsistent", "CPU%d has different NX flags to CPU0.", i); failed++; } } fwts_cpu_free_info(fwts_nx_cpuinfo); } if (!failed) fwts_passed(fw, "All %d CPUs have the NX flag in MSR 0x1a0 %s.", n, (msr_value & nx_bit) == 0 ? "set" : "cleared"); return FWTS_OK; } static fwts_framework_minor_test nx_tests[] = { { nx_test1, "Test CPU NX capability." }, { nx_test2, "Test all CPUs have same BIOS set NX flag." }, { nx_test3, "Test all CPUs have same msr setting in MSR 0x1a0." }, { NULL, NULL } }; static fwts_framework_ops nx_ops = { .description = "Test if CPU NX is disabled by the BIOS.", .minor_tests = nx_tests }; FWTS_REGISTER("nx", &nx_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/cpu/virt/000077500000000000000000000000001465205512700134275ustar00rootroot00000000000000src/cpu/virt/virt.c000066400000000000000000000050141465205512700145570ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corp * Copyright (C) 2007, AMD Inc * Copyright (C) 2010-2024 Canonical * * This code was originally part of the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define _GNU_SOURCE #include "fwts.h" #include "virt.h" #ifdef FWTS_ARCH_INTEL #include #include #include typedef enum { CPU_UNKNOWN, CPU_AMD, CPU_INTEL, } cpu_type; fwts_cpuinfo_x86 *fwts_virt_cpuinfo; #define CPUID_NUM_FEATURES 0x00000000L static int virt_init(fwts_framework *fw) { if ((fwts_virt_cpuinfo = fwts_cpu_get_info(-1)) == NULL) { fwts_log_error(fw, "Cannot get CPU info"); return FWTS_ERROR; } if (fwts_virt_cpuinfo->vendor_id == NULL) { fwts_log_error(fw, "Cannot get CPU vendor ID"); return FWTS_ERROR; } if (fwts_virt_cpuinfo->flags == NULL) { fwts_log_error(fw, "Cannot get CPU flags"); return FWTS_ERROR; } return FWTS_OK; } static int virt_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); if (fwts_virt_cpuinfo) fwts_cpu_free_info(fwts_virt_cpuinfo); return FWTS_OK; } static int virt_test1(fwts_framework *fw) { if (strstr(fwts_virt_cpuinfo->vendor_id, "AMD") != NULL || strstr(fwts_virt_cpuinfo->vendor_id, "Hygon") != NULL) { virt_check_svm(fw); } else if (strstr(fwts_virt_cpuinfo->vendor_id, "Intel") != NULL) { virt_check_vmx(fw); } else { fwts_warning(fw, "Cannot test virtualisation extensions - unknown CPU."); } return FWTS_OK; } static fwts_framework_minor_test virt_tests[] = { { virt_test1, "CPU Virtualisation Configuration test." }, { NULL, NULL } }; static fwts_framework_ops virt_ops = { .description = "CPU Virtualisation Configuration test.", .init = virt_init, .deinit = virt_deinit, .minor_tests = virt_tests }; FWTS_REGISTER("virt", &virt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/cpu/virt/virt.h000066400000000000000000000016501465205512700145660ustar00rootroot00000000000000/* * Copyright (C) 2014-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_VIRT_H__ #define __FWTS_VIRT_H__ #include "fwts.h" extern void virt_check_svm(fwts_framework *); extern void virt_check_vmx(fwts_framework *); #endif src/cpu/virt/virt_svm.c000066400000000000000000000044511465205512700154500ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corp * Copyright (C) 2007, AMD Inc * Copyright (C) 2010-2024 Canonical * * This file was originally part of the Linux-ready Firmware Developer Kit * * This program file is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by the * Free Software Foundation;version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program in a file named COPYING; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA */ /* * This test checks if the SVM-setup is done correctly by the BIOS */ #define _GNU_SOURCE #include "fwts.h" #include "virt.h" #ifdef FWTS_ARCH_INTEL #include #include #include #define MSR_FEATURE_CONTROL 0xC0000080 extern fwts_cpuinfo_x86 *fwts_virt_cpuinfo; static int cpu_has_svm(void) { return (strstr(fwts_virt_cpuinfo->flags, "svm") != NULL); } static int can_lock_with_msr(void) { return (fwts_virt_cpuinfo->x86 & 0x10); } static int vt_locked_by_bios(fwts_framework *fw) { uint64_t msr; if (!can_lock_with_msr()) return 0; if (fwts_cpu_readmsr(fw, 0, MSR_FEATURE_CONTROL, &msr)) return -1; return ((msr & 0x1000) == 0x1000); /* SVM capable but locked by bios*/ } void virt_check_svm(fwts_framework *fw) { fwts_log_info(fw, "Check SVM Virtualization extensions are set up correctly."); if (!cpu_has_svm()) fwts_skipped(fw, "Processor does not support Virtualization extensions, won't test BIOS configuration, skipping test."); else { int ret = vt_locked_by_bios(fw); switch (ret) { case 0: fwts_passed(fw, "Virtualization extensions supported and enabled by BIOS."); break; case 1: fwts_failed(fw, LOG_LEVEL_MEDIUM, "VirtDisabledByBIOS", "Virtualization extensions supported but disabled by BIOS."); break; default: fwts_log_error(fw, "Virtualization extensions check failed - cannot read msr."); break; } } } #endif src/cpu/virt/virt_vmx.c000066400000000000000000000045301465205512700154530ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corporation * Copyright (C) 2007, AMD Inc * Copyright (C) 2010-2024 Canonical * * This file was originally part of the Linux-ready Firmware Developer Kit * * This program file is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by the * Free Software Foundation;version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program in a file named COPYING; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA */ /* * This test checks if the VT-setup is done correctly by the BIOS */ #define _GNU_SOURCE #include "fwts.h" #include "virt.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #include #include #include #include #include #include #define MSR_FEATURE_CONTROL 0x03a extern fwts_cpuinfo_x86 *fwts_virt_cpuinfo; static int cpu_has_vmx(void) { return (strstr(fwts_virt_cpuinfo->flags, "vmx") != NULL); } static int vt_locked_by_bios(fwts_framework *fw) { uint64_t msr; if (fwts_cpu_readmsr(fw, 0, MSR_FEATURE_CONTROL, &msr)) return -1; return (msr & 5) == 1; /* VT capable but locked by bios*/ } void virt_check_vmx(fwts_framework *fw) { fwts_log_info(fw, "Check VT/VMX Virtualization extensions are set up correctly."); if (!cpu_has_vmx()) fwts_skipped(fw, "Processor does not support Virtualization extensions, won't test BIOS configuration, skipping test."); else { int ret = vt_locked_by_bios(fw); switch (ret) { case 0: fwts_passed(fw, "Virtualization extensions supported and enabled by BIOS."); break; case 1: fwts_failed(fw, LOG_LEVEL_MEDIUM, "VirtDisabledByBIOS", "Virtualization extensions supported but disabled by BIOS."); break; default: fwts_log_error(fw, "Virtualization extensions check failed - cannot read msr."); break; } } } #endif src/devicetree/000077500000000000000000000000001465205512700137735ustar00rootroot00000000000000src/devicetree/dt_base/000077500000000000000000000000001465205512700153745ustar00rootroot00000000000000src/devicetree/dt_base/dt_base.c000066400000000000000000000067671465205512700171610ustar00rootroot00000000000000/* * Copyright (C) 2014-2021 Jeremy Kerr * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ #define _GNU_SOURCE #include #include #include "fwts.h" static int dt_base_check_present(fwts_framework *fw) { if (fw->fdt == NULL) { fwts_failed(fw, LOG_LEVEL_HIGH, "DeviceTreeBaseAbsent", "No device tree could be loaded"); return FWTS_ERROR; } fwts_passed(fw, "Device tree present"); return FWTS_OK; } static int dt_base_check_valid(fwts_framework *fw) { int rc; if (fw->fdt == NULL) { fwts_failed(fw, LOG_LEVEL_HIGH, "DeviceTreeBaseInvalid", "No device tree could be loaded"); return FWTS_ERROR; } rc = fdt_check_header(fw->fdt); if (rc != 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "DeviceTreeBaseInvalid", "Device tree data is invalid"); return FWTS_ERROR; } fwts_passed(fw, "Device tree data valid"); return FWTS_OK; } static int dt_base_check_warnings(fwts_framework *fw) { int status = 0, in_fd = 0, out_fd = 0, ret = FWTS_ERROR; ssize_t in_len, out_len; const char *command; char *output = NULL; pid_t pid; if (!fw->fdt) { fwts_failed(fw, LOG_LEVEL_LOW, "DTMissing", "Device Tree is missing," " unable to continue without DT"); goto err; } command = "dtc -I dtb -O dtb -o /dev/null 2>&1"; if (fwts_pipe_open_rw(command, &pid, &in_fd, &out_fd)) { fwts_failed(fw, LOG_LEVEL_HIGH, "DTMissing", "There was a problem obtaining the" " device tree info," " unable to continue without DT data"); goto err; } in_len = fdt_totalsize(fw->fdt); if (fwts_pipe_readwrite(in_fd, fw->fdt, in_len, out_fd, &output, &out_len)) { fwts_failed(fw, LOG_LEVEL_HIGH, "DeviceTreeBaseDTCPipe", "failed to pipe data to dtc"); goto err; } status = fwts_pipe_close2(in_fd, out_fd, pid); in_fd = out_fd = 0; if (status) { fwts_failed(fw, LOG_LEVEL_HIGH, "DeviceTreeBaseDTCFailed", "dtc reports fatal device tree errors:%s", output); goto err; } if (out_len > 0) { fwts_warning(fw, "Some warnings from dtc. " "Run command \"dtc -I fs -O dts -o my.dts " "/sys/firmware/devicetree/base\" for " "further review: %s", output); ret = FWTS_OK; goto err; } fwts_passed(fw, "No warnings from dtc"); ret = FWTS_OK; err: if (output) free(output); if (in_fd || out_fd) fwts_pipe_close2(in_fd, out_fd, pid); return ret; } static fwts_framework_minor_test dt_base_tests[] = { { dt_base_check_present, "Check device tree presence" }, { dt_base_check_valid, "Check device tree baseline validity" }, { dt_base_check_warnings, "Check device tree warnings" }, { NULL, NULL }, }; static fwts_framework_ops dt_base_ops = { .description = "Base device tree validity check", .minor_tests = dt_base_tests, }; FWTS_REGISTER_FEATURES("dt_base", &dt_base_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_EBBR, FWTS_FW_FEATURE_DEVICETREE); src/devicetree/dt_sysinfo/000077500000000000000000000000001465205512700161545ustar00rootroot00000000000000src/devicetree/dt_sysinfo/dt_sysinfo.c000066400000000000000000000241121465205512700205010ustar00rootroot00000000000000/* * Copyright (C) 2015-2021 Jeremy Kerr * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ #define _GNU_SOURCE #include #include #include #include "fwts.h" #ifdef FWTS_ARCH_PPC static const char op_powernv[] = "ibm,powernv"; static const char opal_firmware[] = "/ibm,opal/firmware"; static const char platform_firmware[] = "/ibm,firmware-versions"; static const char *firestone_models[] = { "8335-GTA", "8335-GCA", "8335-GTX", }; static const char *garrison_models[] = { "8335-GTB", }; static struct reference_platform { const char *compatible; const char **models; int n_models; } openpower_reference_platforms[] = { {"ibm,firestone", firestone_models, FWTS_ARRAY_SIZE(firestone_models)}, {"ibm,garrison", garrison_models, FWTS_ARRAY_SIZE(garrison_models)}, }; static int dt_sysinfo_get_version( fwts_framework *fw, const int node, const char *firmware) { int version_len; /* only output if the platform_firmware node is present */ if (node >= 0) { const char *version_buf = fdt_getprop(fw->fdt, node, firmware, &version_len); if (version_buf) { fwts_passed(fw, "OPAL \"%s\" firmware version from device" " tree node \"%s\" is \"%s\".", firmware, platform_firmware, version_buf); } else { fwts_failed(fw, LOG_LEVEL_CRITICAL, "DTSysInfoCheck", "OPAL \"%s\" firmware version from device" " tree node \"%s\" was not found," " check your installation for" " device tree node \"%s\".", platform_firmware, firmware, platform_firmware); } } return FWTS_OK; } static int dt_sysinfo_check_version(fwts_framework *fw) { if (!fw->fdt) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "DTMissing", "Device tree is missing, check your installation."); return FWTS_ABORTED; } int node, version_len; fwts_log_info(fw, "OPAL base device tree path is %s.", DT_FS_PATH); node = fdt_path_offset(fw->fdt, opal_firmware); if (node >= 0) { const char *version_buf = fdt_getprop(fw->fdt, node, "version", &version_len); if (version_buf) { fwts_passed(fw, "OPAL Firmware version from device tree node" " \"%s\" is \"%s\".", opal_firmware, version_buf); } else { fwts_failed(fw, LOG_LEVEL_CRITICAL, "DTSysInfoCheck", "OPAL Firmware version from device tree node" " \"%s\" was not found," " check your installation for" " device tree node \"%s\" property" " \"version\".", opal_firmware, opal_firmware); } } else { fwts_failed(fw, LOG_LEVEL_CRITICAL, "DTMissing", "Device tree missing version property of \"%s\", " "check your installation for device tree node" " property \"version\".", opal_firmware); return FWTS_ERROR; } /* Now check for additional firmware versions */ node = fdt_path_offset(fw->fdt, platform_firmware); dt_sysinfo_get_version(fw, node, "occ"); dt_sysinfo_get_version(fw, node, "open-power"); dt_sysinfo_get_version(fw, node, "linux"); dt_sysinfo_get_version(fw, node, "skiboot"); dt_sysinfo_get_version(fw, node, "capp-ucode"); dt_sysinfo_get_version(fw, node, "hostboot-binaries"); dt_sysinfo_get_version(fw, node, "hostboot"); dt_sysinfo_get_version(fw, node, "petitboot"); dt_sysinfo_get_version(fw, node, "buildroot"); return FWTS_OK; } static int dt_sysinfo_check_root_property( fwts_framework *fw, const char *name, const bool print_flag) { int node, len; const char *buf; if (!fw->fdt) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "DTMissing", "Device Tree is missing, aborting"); return FWTS_ABORTED; } node = fdt_path_offset(fw->fdt, "/"); if (node < 0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "DTRootNodeMissing", "root device tree node is missing"); return FWTS_ERROR; } buf = fdt_getprop(fw->fdt, node, name, &len); if (buf == NULL) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "DTSysinfoPropertyMissing", "Cannot read property %s: %s", name, fdt_strerror(len)); return FWTS_ERROR; } if (print_flag) { if (check_property_printable(fw, name, buf, len)) return FWTS_ERROR; /* failures logged prior */ } fwts_passed(fw, "sysinfo property \"%s\" is valid", name); return FWTS_OK; } static int dt_sysinfo_check_model(fwts_framework *fw) { return dt_sysinfo_check_root_property(fw, "model", true); } static int dt_sysinfo_check_system_id(fwts_framework *fw) { return dt_sysinfo_check_root_property(fw, "system-id", true); } static bool dt_fdt_stringlist_contains_last( const char *strlist, const int listlen, const char *str) { const size_t len = strlen(str); const char *p; /* checking for either str only or last in string */ if (listlen < 2) /* need at least one byte plus nul */ return false; p = memrchr(strlist, '\0', listlen - 1); if (p) { p++; } else { p = strlist; } return !memcmp(str, p, len + 1); } static bool machine_matches_reference_model(fwts_framework *fw, const char *compatible, const int compat_len, const char *model) { bool compatible_is_reference = false, model_is_reference = false; struct reference_platform *plat; int i; for (i = 0; i < (int)FWTS_ARRAY_SIZE(openpower_reference_platforms); i++) { plat = &openpower_reference_platforms[i]; if (dt_fdt_stringlist_contains_last(compatible, compat_len, plat->compatible)) { compatible_is_reference = true; break; } } /* Not a reference platform, nothing to check */ if (!compatible_is_reference) { fwts_log_info(fw, "Informational: no reference model found," " device tree \"compatible\" is \"%s\" and" " \"model\" is \"%s\"", compatible, model); return true; } /* Since we're on a reference platform, ensure that the model is also * one of the reference model numbers */ for (i = 0; i < plat->n_models; i++) { if (!strcmp(model, plat->models[i])) { model_is_reference = true; break; } } if (model_is_reference) { fwts_log_info_verbatim(fw, "Matched reference model, device tree " "\"compatible\" is \"%s\" and \"model\" is " "\"%s\"", plat->compatible, model); } return model_is_reference; } static int dt_sysinfo_check_ref_plat_compatible(fwts_framework *fw) { int node, compat_len = 0, model_len = 0; node = fdt_path_offset(fw->fdt, "/"); if (node < 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "DTRootNodeMissing", "root device tree node is missing"); return FWTS_ERROR; } if (fdt_node_check_compatible(fw->fdt, node, op_powernv)) { fwts_failed(fw, LOG_LEVEL_HIGH, "DTCompatibleMissing", "DeviceTree failed validation, could not find" " the \"compatible\" property of \"%s\" in the " "root of the device tree", "ibm,powernv"); return FWTS_ERROR; } else { const char *model_buf, *compat_buf; char *orig_model_buf, *tmp_model_buf; compat_buf = fdt_getprop(fw->fdt, node, "compatible", &compat_len); model_buf = fdt_getprop(fw->fdt, node, "model", &model_len); if (!model_buf || !compat_buf) { fwts_failed(fw,LOG_LEVEL_HIGH, "DTSysInfoCheck", "Cannot read the properties for OpenPOWER" " Reference Compatible check"); return FWTS_ERROR; } /* need modifiable memory */ /* save original ptr to free */ tmp_model_buf = orig_model_buf = strdup(model_buf); if (!tmp_model_buf) { fwts_failed(fw, LOG_LEVEL_HIGH, "DTSysInfoCheck", "Unable to get memory for model" " compare for OpenPOWER" " Reference Compatible check"); return FWTS_ERROR; } tmp_model_buf = hidewhitespace(tmp_model_buf); if (!(strcmp(model_buf, tmp_model_buf) == 0)) { fwts_warning(fw, "DTSysInfoCheck" " See further advice in the log."); fwts_log_nl(fw); fwts_log_info_verbatim(fw, "DTSysInfoCheck" " Check the root \"model\" property" " from the device tree %s \"%s\".", DT_FS_PATH, model_buf); fwts_advice(fw, "Check the root \"model\" property" " from the device tree %s, " "there are whitespace inconsistentencies" " between the \"model\" property and " " the trimmed value of \"%s\", report" " this as a possible bug." " Run \"hexdump -C model\"" " from the \"%s\" directory to view" " the raw contents of the property.", DT_FS_PATH, tmp_model_buf, DT_FS_PATH); } if (machine_matches_reference_model(fw, compat_buf, compat_len, tmp_model_buf)) { fwts_passed(fw, "OpenPOWER Reference " "Compatible passed"); } else { fwts_failed(fw, LOG_LEVEL_HIGH, "DTOpenPOWERReferenceFailed", "Unable to find an OpenPOWER supported" " match"); /* adding verbatim to show proper string */ fwts_log_info_verbatim(fw, "Unable to find an OpenPOWER reference" " match for \"%s\"", tmp_model_buf); free(orig_model_buf); return FWTS_ERROR; } free(orig_model_buf); } return FWTS_OK; } static fwts_framework_minor_test dt_sysinfo_tests[] = { { dt_sysinfo_check_version, "Check firmware versions" }, { dt_sysinfo_check_model, "Check model property" }, { dt_sysinfo_check_system_id, "Check system-id property" }, { dt_sysinfo_check_ref_plat_compatible, "Check OpenPOWER Reference compatible" }, { NULL, NULL }, }; static fwts_framework_ops dt_sysinfo_ops = { .description = "Device tree system information test", .minor_tests = dt_sysinfo_tests, }; FWTS_REGISTER_FEATURES("dt_sysinfo", &dt_sysinfo_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH, FWTS_FW_FEATURE_DEVICETREE); #endif src/dmi/000077500000000000000000000000001465205512700124255ustar00rootroot00000000000000src/dmi/dmicheck/000077500000000000000000000000001465205512700141745ustar00rootroot00000000000000src/dmi/dmicheck/dmicheck.c000066400000000000000000002365451465205512700161260ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include "fwts.h" #if defined(FWTS_ARCH_INTEL) || defined(FWTS_ARCH_AARCH64) #include #include #include #include #include #include #include #include #define DMI_VERSION (0x0370) #define VERSION_MAJOR(v) ((v) >> 8) #define VERSION_MINOR(v) ((v) & 0xff) #define SMBIOS_END_OF_TABLE (127) #define DMI_NO_TABLE "DMINoTable" #define DMI_NO_TABLE_HEADER "DMINoTableHeader" #define DMI_BAD_TABLE_LENGTH "DMIBadTableLength" #define DMI_BAD_UUID "DMIBadUUID" #define DMI_STRUCT_COUNT "DMIStructCount" #define DMI_VALUE_OUT_OF_RANGE "DMIValueOutOfRange" #define DMI_STRING_INDEX_OUT_OF_RANGE "DMIStringIndexOutOfRange" #define DMI_ILLEGAL_MAPPED_ADDR_RANGE "DMIIllegalMappedAddrRange" #define DMI_MGMT_CTRL_HOST_TYPE "DMIMgmtCtrlHostType" #define DMI_INVALID_ENTRY_LENGTH "DMIInvalidEntryLength" #define DMI_INVALID_HARDWARE_ENTRY "DMIInvalidHardwareEntry" #define DMI_INVALID_MEMORY_ENTRY "DMIInvalidMemoryEntry" #define DMI_RESERVED_VALUE_USED "DMIReservedValueUsed" #define DMI_RESERVED_BIT_USED "DMIReservedBitUsed" #define DMI_RESERVED_OFFSET_NONZERO "DMIReservedOffsetNonZero" #define GET_UINT8(x) (uint8_t)(*(const uint8_t *)(x)) #define GET_UINT16(x) (uint16_t)(*(const uint16_t *)(x)) #define GET_UINT32(x) (uint32_t)(*(const uint32_t *)(x)) #define GET_UINT64(x) (uint64_t)(*(const uint64_t *)(x)) #define CHASSIS_OTHER 0x00 #define CHASSIS_DESKTOP 0x01 #define CHASSIS_WORKSTATION 0x02 #define CHASSIS_MOBILE 0x04 #define CHASSIS_SERVER 0x08 #define dmi_ranges_uint8_check(fw, table, addr, field, hdr, offset, ranges) \ _dmi_ranges_uint8_check(fw, table, addr, field, hdr, offset, ranges, sizeof(ranges)) typedef struct { const char *label; const char *field; const char *value; } fwts_dmi_pattern; typedef struct { uint16_t old; uint16_t new; } fwts_dmi_version; typedef struct { uint8_t type; uint8_t offset; } fwts_dmi_used_by_kernel; typedef struct { uint8_t type; uint16_t max_version; uint16_t min_version; uint8_t length; } fwts_dmi_type_length; typedef struct { uint16_t min; uint16_t max; } fwts_dmi_value_range; static bool smbios_found = false; static bool smbios30_found = false; /* * Table derived by scanning thousands of DMI table dumps from bug reports */ static const fwts_dmi_pattern dmi_patterns[] = { { "DMISerialNumber", "Serial Number", "0000000" }, { "DMISerialNumber", "Serial Number", "00000000" }, { "DMISerialNumber", "Serial Number", "000000000" }, { "DMISerialNumber", "Serial Number", "0000000000" }, { "DMISerialNumber", "Serial Number", "0x00000000" }, { "DMISerialNumber", "Serial Number", "0x0000000000000000" }, { "DMISerialNumber", "Serial Number", "012345678" }, { "DMISerialNumber", "Serial Number", "0123456789" }, { "DMISerialNumber", "Serial Number", "01234567890" }, { "DMISerialNumber", "Serial Number", "012345678900" }, { "DMISerialNumber", "Serial Number", "0123456789000" }, { "DMISerialNumber", "Serial Number", "1234567" }, { "DMISerialNumber", "Serial Number", "12345678" }, { "DMISerialNumber", "Serial Number", "123456789" }, { "DMISerialNumber", "Serial Number", "1234567890" }, { "DMISerialNumber", "Serial Number", "System Serial Number" }, { "DMISerialNumber", "Serial Number", "MB-1234567890" }, { "DMISerialNumber", "Serial Number", "NB-1234567890" }, { "DMISerialNumber", "Serial Number", "NB-0123456789" }, { "DMISerialNumber", "Serial Number", "Base Board Serial Number" }, { "DMISerialNumber", "Serial Number", "Chassis Serial Number" }, { "DMISerialNumber", "Serial Number", "" }, { "DMISerialNumber", "Serial Number", "Empty" }, { "DMISerialNumber", "Serial Number", "[Empty]" }, { "DMISerialNumber", "Serial Number", "NA" }, { "DMISerialNumber", "Serial Number", "N/A" }, { "DMISerialNumber", "Serial Number", "None" }, { "DMISerialNumber", "Serial Number", "None1" }, { "DMISerialNumber", "Serial Number", "Not Available" }, { "DMISerialNumber", "Serial Number", "Not Specified" }, { "DMISerialNumber", "Serial Number", "NotSupport" }, { "DMISerialNumber", "Serial Number", "Not Supported by CPU" }, { "DMISerialNumber", "Serial Number", "Not Supported" }, { "DMISerialNumber", "Serial Number", "OEM Chassis Serial Number" }, { "DMISerialNumber", "Serial Number", "OEM_Define1" }, { "DMISerialNumber", "Serial Number", "OEM_Define2" }, { "DMISerialNumber", "Serial Number", "OEM_Define3" }, { "DMISerialNumber", "Serial Number", "SerNum0" }, { "DMISerialNumber", "Serial Number", "SerNum00" }, { "DMISerialNumber", "Serial Number", "SerNum01" }, { "DMISerialNumber", "Serial Number", "SerNum02" }, { "DMISerialNumber", "Serial Number", "SerNum03" }, { "DMISerialNumber", "Serial Number", "SerNum1" }, { "DMISerialNumber", "Serial Number", "SerNum2" }, { "DMISerialNumber", "Serial Number", "SerNum3" }, { "DMISerialNumber", "Serial Number", "SerNum4" }, { "DMISerialNumber", "Serial Number", "TBD by ODM" }, { "DMISerialNumber", "Serial Number", "To Be Defined By O.E.M" }, { "DMISerialNumber", "Serial Number", "To be filled by O.E.M." }, { "DMISerialNumber", "Serial Number", "To Be Filled By O.E.M." }, { "DMISerialNumber", "Serial Number", "Unknow" }, { "DMISerialNumber", "Serial Number", "Unknown" }, { "DMISerialNumber", "Serial Number", "Unspecified System Serial Number" }, { "DMISerialNumber", "Serial Number", "XXXXXXXXXXXX" }, { "DMISerialNumber", "Serial Number", "XXXXXXXXXXX" }, { "DMISerialNumber", "Serial Number", "XXXXXXXXXX" }, { "DMISerialNumber", "Serial Number", "XXXXXXXXX" }, { "DMISerialNumber", "Serial Number", "XXXXXXXX" }, { "DMISerialNumber", "Serial Number", "XXXXXX" }, { "DMISerialNumber", "Serial Number", "XXXXX" }, { "DMISerialNumber", NULL, "Chassis Serial Number" }, { "DMIAssetTag", "Asset Tag", "0000000000" }, { "DMIAssetTag", "Asset Tag", "0x00000000" }, { "DMIAssetTag", "Asset Tag", "1234567890" }, { "DMIAssetTag", "Asset Tag", "123456789000" }, { "DMIAssetTag", "Asset Tag", "9876543210" }, { "DMIAssetTag", "Asset Tag", "A1_AssetTagNum0" }, { "DMIAssetTag", "Asset Tag", "A1_AssetTagNum1" }, { "DMIAssetTag", "Asset Tag", "A1_AssetTagNum2" }, { "DMIAssetTag", "Asset Tag", "A1_AssetTagNum3" }, { "DMIAssetTag", "Asset Tag", "ABCDEFGHIJKLM" }, { "DMIAssetTag", "Asset Tag", "Asset-1234567890" }, { "DMIAssetTag", "Asset Tag", "Asset Tag" }, { "DMIAssetTag", "Asset Tag", "Asset Tag:" }, { "DMIAssetTag", "Asset Tag", "AssetTagNum0" }, { "DMIAssetTag", "Asset Tag", "AssetTagNum1" }, { "DMIAssetTag", "Asset Tag", "AssetTagNum2" }, { "DMIAssetTag", "Asset Tag", "AssetTagNum3" }, { "DMIAssetTag", "Asset Tag", "AssetTagNum4" }, { "DMIAssetTag", "Asset Tag", "Asset tracking" }, { "DMIAssetTag", "Asset Tag", "ATN12345678901234567" }, { "DMIAssetTag", "Asset Tag", "Base Board Asset Tag#" }, { "DMIAssetTag", "Asset Tag", "Base Board Asset Tag" }, { "DMIAssetTag", "Asset Tag", "Chassis Asset Tag" }, { "DMIAssetTag", "Asset Tag", "" }, { "DMIAssetTag", "Asset Tag", "Fill By OEM" }, { "DMIAssetTag", "Asset Tag", "N/A" }, { "DMIAssetTag", "Asset Tag", "No Asset Information" }, { "DMIAssetTag", "Asset Tag", "No Asset Tag" }, { "DMIAssetTag", "Asset Tag", "None" }, { "DMIAssetTag", "Asset Tag", "Not Available" }, { "DMIAssetTag", "Asset Tag", "Not Specified" }, { "DMIAssetTag", "Asset Tag", "OEM_Define0" }, { "DMIAssetTag", "Asset Tag", "OEM_Define1" }, { "DMIAssetTag", "Asset Tag", "OEM_Define2" }, { "DMIAssetTag", "Asset Tag", "OEM_Define3" }, { "DMIAssetTag", "Asset Tag", "OEM_Define4" }, { "DMIAssetTag", "Asset Tag", "TBD by ODM" }, { "DMIAssetTag", "Asset Tag", "To Be Defined By O.E.M" }, { "DMIAssetTag", "Asset Tag", "To be filled by O.E.M." }, { "DMIAssetTag", "Asset Tag", "To Be Filled By O.E.M." }, { "DMIAssetTag", "Asset Tag", "Unknown" }, { "DMIAssetTag", "Asset Tag", "XXXXXXXXXXXX" }, { "DMIAssetTag", "Asset Tag", "XXXXXXXXXXX" }, { "DMIAssetTag", "Asset Tag", "XXXXXXXXXX" }, { "DMIAssetTag", "Asset Tag", "XXXXXXXXX" }, { "DMIAssetTag", "Asset Tag", "XXXXXXXX" }, { "DMIAssetTag", "Asset Tag", "XXXXXXX" }, { "DMIAssetTag", "Asset Tag", "XXXXXX" }, { "DMIChassisVendor", NULL, "Chassis Manufacture" }, { "DMIChassisVersion", NULL, "Chassis Version" }, { "DMIProductVersion", NULL, "System Version" }, { "DMIBadDefault", NULL, "To Be Defined By O.E.M" }, { "DMIBadDefault", NULL, "To be filled by O.E.M." }, { "DMIBadDefault", NULL, "To Be Filled By O.E.M." }, { NULL, NULL, NULL } }; static const char *uuid_patterns[] = { "0A0A0A0A-0A0A-0A0A-0A0A-0A0A0A0A0A0A", NULL, }; /* Remapping table from buggy version numbers to correct values */ static const fwts_dmi_version dmi_versions[] = { { 0x021f, 0x0203 }, { 0x0221, 0x0203 }, { 0x0233, 0x0206 }, { 0, 0 } }; #define FIELD_ANY 0xff #define TYPE_EOD 0xff /* * DMI decoded fields used by the kernel, i.e. fields * we care that work, * see drivers/firmware/dmi_scan.c, dmi_decode() */ static const fwts_dmi_used_by_kernel dmi_used_by_kernel_table[] = { /* Type 0 BIOS Information fields */ { 0, 4 }, { 0, 5 }, { 0, 8 }, { 0, 21 }, { 0, 23 }, /* Type 1, System Information */ { 1, 4 }, { 1, 5 }, { 1, 6 }, { 1, 7 }, { 1, 8 }, { 1, 25 }, { 1, 26 }, /* Type 2, Base Board Information */ { 2, 4 }, { 2, 5 }, { 2, 6 }, { 2, 7 }, { 2, 8 }, /* Type 3, Chassis Information */ { 3, 4 }, { 3, 5 }, { 3, 6 }, { 3, 7 }, { 3, 8 }, /* Type 9, System Slots */ { 9, FIELD_ANY }, /* Type 10, Onboard Devices Information */ { 10, FIELD_ANY }, /* Type 11, OEM Strings */ { 11, FIELD_ANY }, /* Type 38, IPMI Device Information */ { 38, FIELD_ANY }, /* Type 41, Onboard Devices Extended Information */ { 41, FIELD_ANY }, /* End */ { TYPE_EOD, 0xff }, }; #define MAX_VERSION 0xFFFF static const fwts_dmi_type_length type_info[] = { /* type, max_version, min_version, length */ { 15, 0x201, 0x200, 0x14 }, { 16, 0x207, 0x201, 0xf }, { 16, MAX_VERSION, 0x207, 0x17 }, { 17, 0x203, 0x201, 0x15 }, { 17, 0x206, 0x203, 0x1b }, { 17, 0x207, 0x206, 0x1c }, { 17, 0x208, 0x207, 0x22 }, { 17, 0x302, 0x208, 0x28 }, { 17, 0x303, 0x302, 0x54 }, { 17, 0x307, 0x303, 0x5c }, { 17, MAX_VERSION, 0x307, 0x64 }, { 19, 0x207, 0x201, 0xf }, { 19, MAX_VERSION, 0x207, 0x1f }, { 20, 0x207, 0x201, 0x13 }, { 20, MAX_VERSION, 0x207, 0x23 }, { 0, 0, 0, 0 } /* terminator */ }; static int dmi_load_file( const char *filename, void *buf, const size_t size) { int fd; ssize_t ret; (void)memset(buf, 0, size); if ((fd = open(filename, O_RDONLY)) < 0) return FWTS_ERROR; ret = read(fd, buf, size); (void)close(fd); if (ret != (ssize_t)size) return FWTS_ERROR; return FWTS_OK; } static int dmi_load_file_variable_size( const char *filename, void *buf, size_t *size) { int fd; char *p; ssize_t count; size_t sz, total; sz = *size; (void)memset(buf, 0, sz); if ((fd = open(filename, O_RDONLY)) < 0) return FWTS_ERROR; for (p = buf, total = count = 0; ; p += count) { count = read(fd, p, sz - total); if (count == -1) { close(fd); return FWTS_ERROR; } if (count == 0) break; total += (size_t)count; } (void)close(fd); *size = total; return FWTS_OK; } static void* dmi_table_smbios(fwts_framework *fw, fwts_smbios_entry *entry) { off_t addr = (off_t)entry->struct_table_address; size_t length = (size_t)entry->struct_table_length; void *table; void *mem; char anchor[8]; /* 32 bit entry sanity check on length */ if ((length == 0) || (length > 0xffff)) { fwts_log_info(fw, "SMBIOS table size of %zu bytes looks " "suspicious", length); return NULL; } if (dmi_load_file("/sys/firmware/dmi/tables/smbios_entry_point", anchor, 4) == FWTS_OK && strncmp(anchor, "_SM_", 4) == 0) { table = malloc(length); if (!table) return NULL; if (dmi_load_file("/sys/firmware/dmi/tables/DMI", table, length) == FWTS_OK) { fwts_log_info(fw, "SMBIOS table loaded from /sys/firmware/dmi/tables/DMI"); return table; } free(table); } #ifdef FWTS_ARCH_AARCH64 if (fwts_kernel_config_set("CONFIG_STRICT_DEVMEM")) { fwts_warning(fw, "Skipping scanning SMBIOS table in memory for arm64 systems"); return NULL; } #endif mem = fwts_mmap(addr, length); if (mem != FWTS_MAP_FAILED) { /* Can we safely copy the table? */ if (fwts_safe_memread((void *)mem, length) != FWTS_OK) { fwts_log_info(fw, "SMBIOS table at %p cannot be read", (void *)addr); (void)fwts_munmap(mem, length); return NULL; } table = malloc(length); if (table) memcpy(table, mem, length); (void)fwts_munmap(mem, length); return table; } fwts_log_error(fw, "Cannot mmap SMBIOS table from %8.8" PRIx32 "..%8.8" PRIx32 ".", entry->struct_table_address, entry->struct_table_address + entry->struct_table_length); return NULL; } static void* dmi_table_smbios30(fwts_framework *fw, fwts_smbios30_entry *entry) { off_t addr = (off_t)entry->struct_table_address; size_t length = (size_t)entry->struct_table_max_size; void *table; void *mem; char anchor[8]; /* 64 bit entry sanity check on length */ if ((length == 0) || (length > 0xffffff)) { fwts_log_info(fw, "SMBIOS table size of %zu bytes looks " "suspicious", length); return NULL; } if (dmi_load_file("/sys/firmware/dmi/tables/smbios_entry_point", anchor, 5) == FWTS_OK && strncmp(anchor, "_SM3_", 5) == 0) { table = malloc(length); if (!table) return NULL; if (dmi_load_file_variable_size("/sys/firmware/dmi/tables/DMI", table, &length) == FWTS_OK) { fwts_log_info(fw, "SMBIOS30 table loaded from /sys/firmware/dmi/tables/DMI"); return table; } free(table); } #ifdef FWTS_ARCH_AARCH64 if (fwts_kernel_config_set("CONFIG_STRICT_DEVMEM")) { fwts_warning(fw, "Skipping scanning SMBIOS3 table in memory for arm64 systems"); return NULL; } #endif mem = fwts_mmap(addr, length); if (mem != FWTS_MAP_FAILED) { /* Can we safely copy the table? */ if (fwts_safe_memread((void *)mem, length) != FWTS_OK) { fwts_log_info(fw, "SMBIOS table at %p cannot be read", (void *)addr); (void)fwts_munmap(mem, length); return NULL; } table = malloc(length); if (table) memcpy(table, mem, length); (void)fwts_munmap(mem, length); return table; } fwts_log_error(fw, "Cannot mmap SMBIOS 3.0 table from %16.16" PRIx64 "..%16.16" PRIx64 ".", entry->struct_table_address, entry->struct_table_address + entry->struct_table_max_size); return NULL; } static void dmi_table_free(void *table) { if (table) free(table); } static void dmi_dump_entry( fwts_framework *fw, const fwts_smbios_entry *entry, const fwts_smbios_type type) { if (type == FWTS_SMBIOS) { fwts_log_info_verbatim(fw, "SMBIOS Entry Point Structure:"); fwts_log_info_verbatim(fw, " Anchor String : %4.4s", entry->signature); fwts_log_info_simp_int(fw, " Checksum : ", entry->checksum); fwts_log_info_simp_int(fw, " Entry Point Length : ", entry->length); fwts_log_info_simp_int(fw, " Major Version : ", entry->major_version); fwts_log_info_simp_int(fw, " Minor Version : ", entry->minor_version); fwts_log_info_simp_int(fw, " Maximum Struct Size : ", entry->max_struct_size); fwts_log_info_simp_int(fw, " Entry Point Revision : ", entry->revision); fwts_log_info_verbatim(fw, " Formatted Area : 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x", entry->formatted_area[0], entry->formatted_area[1], entry->formatted_area[2], entry->formatted_area[3], entry->formatted_area[4]); } if (type == FWTS_SMBIOS_DMI_LEGACY) fwts_log_info_verbatim(fw, "Legacy DMI Entry Point Structure:"); /* Common to SMBIOS and SMBIOS_DMI_LEGACY */ fwts_log_info_verbatim(fw, " Intermediate Anchor : %5.5s", (const char *)entry->anchor_string); fwts_log_info_simp_int(fw, " Intermediate Checksum : ", entry->intermediate_checksum); fwts_log_info_simp_int(fw, " Structure Table Length : ", entry->struct_table_length); fwts_log_info_simp_int(fw, " Structure Table Address: ", entry->struct_table_address); fwts_log_info_simp_int(fw, " # of SMBIOS Structures : ", entry->number_smbios_structures); fwts_log_info_verbatim(fw, " SMBIOS BCD Revision : %2.2x", entry->smbios_bcd_revision); if (entry->smbios_bcd_revision == 0) fwts_log_info_verbatim(fw, " BCD Revision 00 indicates compliance with specification stated in Major/Minor Version."); } static void dmi_dump_entry30( fwts_framework *fw, const fwts_smbios30_entry *entry) { fwts_log_info_verbatim(fw, "SMBIOS30 Entry Point Structure:"); fwts_log_info_verbatim(fw, " Anchor String : %5.5s", entry->signature); fwts_log_info_simp_int(fw, " Checksum : ", entry->checksum); fwts_log_info_simp_int(fw, " Entry Point Length : ", entry->length); fwts_log_info_simp_int(fw, " Major Version : ", entry->major_version); fwts_log_info_simp_int(fw, " Minor Version : ", entry->minor_version); fwts_log_info_simp_int(fw, " Docrev : ", entry->docrev); fwts_log_info_simp_int(fw, " Entry Point Revision : ", entry->revision); fwts_log_info_simp_int(fw, " Reserved : ", entry->reserved); fwts_log_info_simp_int(fw, " Table maximum size : ", entry->struct_table_max_size); fwts_log_info_simp_int(fw, " Table address : ", entry->struct_table_address); } static int dmi_sane(fwts_framework *fw, fwts_smbios_entry *entry) { uint8_t *table, *ptr; uint8_t dmi_entry_type = 0; uint16_t i = 0; uint16_t table_length = entry->struct_table_length; int ret = FWTS_OK; ptr = table = dmi_table_smbios(fw, entry); if (table == NULL) return FWTS_ERROR; for (i = 0; i < entry->number_smbios_structures; i++) { uint8_t dmi_entry_length; if (ptr > table + table_length) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SMBIOSTableLengthTooSmall", "The size indicated by the SMBIOS table length is " "smaller than the DMI data."); ret = FWTS_ERROR; break; } dmi_entry_type = ptr[0]; dmi_entry_length = ptr[1]; if (dmi_entry_length < 4) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SMBIOSIllegalTableEntry", "The size of a DMI entry %" PRIu16 " is illegal, " "DMI data is either wrong or the SMBIOS Table " "Pointer is pointing to the wrong memory region.", i); ret = FWTS_ERROR; break; } ptr += dmi_entry_length; /* Scan for end of DMI entry, must be 2 zero bytes */ while (((ptr - table + 1) < table_length) && ((ptr[0] != 0) || (ptr[1] != 0))) ptr++; /* Skip over the two zero bytes */ ptr += 2; } /* We found DMI end of table, are number of entries correct? */ if ((dmi_entry_type == 127) && (i != entry->number_smbios_structures)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SMBIOSNumberOfStructures", "The end of DMI table marker structure was found " "but only %d DMI structures were found. The SMBIOS " "entry table reported that there were %" PRIu16 " DMI structures in the DMI table.", i, entry->number_smbios_structures); /* And table length can't be correct either */ ret = FWTS_ERROR; } dmi_table_free(table); return ret; } static int smbios_entry_check(fwts_framework *fw) { void *addr = 0; fwts_smbios_entry entry; fwts_smbios_type type; uint16_t version; uint8_t checksum; static char warning[] = "This field is not checked by the kernel, and so will not affect the system, " "however it should be fixed to conform to the latest version of the " "System Management BIOS (SMBIOS) Reference Specification. "; fwts_log_info(fw, "This test tries to find and sanity check the SMBIOS " "data structures."); if ((addr = fwts_smbios_find_entry(fw, &entry, &type, &version)) == NULL) return FWTS_ERROR; fwts_passed(fw, "Found SMBIOS Table Entry Point at %p", addr); dmi_dump_entry(fw, &entry, type); fwts_log_nl(fw); if (type == FWTS_SMBIOS) { checksum = fwts_checksum((uint8_t *)&entry, sizeof(fwts_smbios_entry)); if (checksum != 0) fwts_failed(fw, LOG_LEVEL_HIGH, "SMBIOSBadChecksum", "SMBIOS Table Entry Point Checksum is 0x%2.2x, should be 0x%2.2x", entry.checksum, (uint8_t)(entry.checksum - checksum)); else fwts_passed(fw, "SMBIOS Table Entry Point Checksum is valid."); if (entry.length != 0x1f) { fwts_failed(fw, LOG_LEVEL_LOW, "SMBIOSBadEntryLength", "SMBIOS Table Entry Point Length is 0x%2.2x, should be 0x1f", entry.length); fwts_advice(fw, "%s Note that version 2.1 of the specification incorrectly stated that the " "Entry Point Length should be 0x1e when it should be 0x1f.", warning); } else fwts_passed(fw, "SMBIOS Table Entry Point Length is valid."); } if (memcmp(entry.anchor_string, "_DMI_", 5) != 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "SMBIOSBadIntermediateAnchor", "SMBIOS Table Entry Intermediate Anchor String was '%5.5s' and should be '_DMI_'.", entry.anchor_string); fwts_advice(fw, "%s", warning); } else fwts_passed(fw, "SMBIOS Table Entry Intermediate Anchor String _DMI_ is valid."); /* Intermediate checksum for legacy DMI */ checksum = fwts_checksum(((uint8_t *)&entry)+16, 15); if (checksum != 0) fwts_failed(fw, LOG_LEVEL_HIGH, "SMBIOSBadChecksum", "SMBIOS Table Entry Point Intermediate Checksum is 0x%2.2x, should be 0x%2.2x", entry.intermediate_checksum, (uint8_t)(entry.intermediate_checksum - checksum)); else fwts_passed(fw, "SMBIOS Table Entry Point Intermediate Checksum is valid."); if ((entry.struct_table_length > 0) && (entry.struct_table_address == 0)) { fwts_failed(fw, LOG_LEVEL_HIGH, "SMBIOSBadTableAddress", "SMBIOS Table Entry Structure Table Address is NULL and should be defined."); fwts_advice(fw, "The address of the SMBIOS Structure Tables must be defined if the " "length of these tables is defined."); } else { /* * Now does the DMI table look sane? If not, * the SMBIOS Structure Table could be bad */ if (dmi_sane(fw, &entry) == FWTS_OK) fwts_passed(fw, "SMBIOS Table Entry Structure Table Address and Length looks valid."); } return FWTS_OK; } static int dmi_smbios30_sane(fwts_framework *fw, fwts_smbios30_entry *entry) { uint8_t *table, *ptr; uint16_t i = 0; uint32_t table_length = entry->struct_table_max_size; int ret = FWTS_OK; ptr = table = dmi_table_smbios30(fw, entry); if (table == NULL) return FWTS_ERROR; for (;;) { uint8_t struct_length; uint8_t struct_type; if (ptr > table + table_length) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SMBIOS30TableLengthTooSmall", "The maximum size indicated by the SMBIOS 3.0 table length is " "smaller than the dmi data or the DMI end of table not found."); ret = FWTS_ERROR; break; } struct_type = ptr[0]; struct_length = ptr[1]; if (struct_length < 4) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SMBIOSIllegalTableEntry", "The size of a DMI entry %" PRIu16 " is illegal, " "DMI data is either wrong or the SMBIOS Table " "Pointer is pointing to the wrong memory region.", i); ret = FWTS_ERROR; break; } ptr += struct_length; /* Scan for end of DMI entry, must be 2 zero bytes */ while (((ptr - table + 1) < (ssize_t)table_length) && ((ptr[0] != 0) || (ptr[1] != 0))) ptr++; /* Skip over the two zero bytes */ ptr += 2; /* We found DMI end of table and inside the maximum length? */ if (struct_type == 127) { if (ptr <= table + table_length) break; else { fwts_failed(fw, LOG_LEVEL_HIGH, "SMBIOS30TableLengthTooSmall", "The end of DMI table marker structure was found " "but outside the structure table maximum size"); ret = FWTS_ERROR; break; } } } dmi_table_free(table); return ret; } static int smbios30_entry_check(fwts_framework *fw) { void *addr = 0; fwts_smbios30_entry entry; uint16_t version; uint8_t checksum; if ((addr = fwts_smbios30_find_entry(fw, &entry, &version)) == NULL) return FWTS_ERROR; fwts_passed(fw, "Found SMBIOS30 Table Entry Point at %p", addr); dmi_dump_entry30(fw, &entry); fwts_log_nl(fw); checksum = fwts_checksum((uint8_t *)&entry, sizeof(fwts_smbios30_entry)); if (checksum != 0) fwts_failed(fw, LOG_LEVEL_HIGH, "SMBIOS30BadChecksum", "SMBIOS30 Table Entry Point Checksum is 0x%2.2" PRIx8 ", should be 0x%2.2" PRIx8, entry.checksum, (uint8_t)(entry.checksum - checksum)); else fwts_passed(fw, "SMBIOS30 Table Entry Point Checksum is valid."); if (entry.length != 0x18) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SMBIOS30BadEntryLength", "SMBIOS30 Table Entry Point Length is 0x%2.2" PRIx8 ", should be 0x18", entry.length); } else fwts_passed(fw, "SMBIOS30 Table Entry Point Length is valid."); if (entry.reserved) fwts_failed(fw, LOG_LEVEL_MEDIUM, "SMBIOSBadReserved", "SMBIOS30 Table Entry Point Reserved is 0x%2.2" PRIx8 ", should be 0", entry.reserved); if ((entry.revision == 1) && (entry.struct_table_address == 0)) { fwts_failed(fw, LOG_LEVEL_HIGH, "SMBIOS30BadTableAddress", "SMBIOS Table Entry Structure Table Address is NULL and should be defined."); } else { /* * Now does the SMBIOS 3.0.0 table look sane? If not, * the SMBIOS Structure Table could be bad */ if (dmi_smbios30_sane(fw, &entry) == FWTS_OK) fwts_passed(fw, "SMBIOS 3.0 Table Entry Structure Table Address and Length looks valid."); } return FWTS_OK; } static int dmicheck_test1(fwts_framework *fw) { if (smbios_entry_check(fw) != FWTS_ERROR) { smbios_found = true; } if (smbios30_entry_check(fw) != FWTS_ERROR) { smbios30_found = true; } if (!smbios30_found) { if (!(fw->flags & FWTS_FLAG_SBBR)) { if (smbios_found) return FWTS_OK; } fwts_failed(fw, LOG_LEVEL_HIGH, "SMBIOSNoEntryPoint", "Could not find any SMBIOS Table Entry Points."); return FWTS_ERROR; } return FWTS_OK; } static bool dmi_used_by_kernel(const uint8_t type, const uint8_t offset) { int i; for (i = 0; dmi_used_by_kernel_table[i].type != TYPE_EOD; i++) { if (dmi_used_by_kernel_table[i].type == type) if ((dmi_used_by_kernel_table[i].offset == FIELD_ANY) || (dmi_used_by_kernel_table[i].offset == offset)) return true; } return false; } static uint16_t dmi_remap_version(fwts_framework *fw, const uint16_t old) { int i; for (i = 0; dmi_versions[i].old != 0; i++) { if (old == dmi_versions[i].old) { const uint16_t new = dmi_versions[i].new; fwts_warning(fw, "Detected a buggy DMI version number " "%" PRIu16 ".%" PRIu16 "remapping to " "%" PRIu16 ".%" PRIu16, VERSION_MAJOR(old), VERSION_MINOR(old), VERSION_MAJOR(new), VERSION_MINOR(new)); return new; } } /* All OK, return original */ return old; } static void dmi_out_of_range_advice( fwts_framework *fw, const uint8_t type, const uint8_t offset) { if (dmi_used_by_kernel(type, offset)) fwts_advice(fw, "A value that is out of range is incorrect and not conforming to " "the SMBIOS specification. The Linux kernel extracts and uses " "this particular data item, so it is recommended that this SMBIOS " "configuration is corrected even if the impact on the system " "is most probably not critical."); else fwts_advice(fw, "A value that is out of range is incorrect and not conforming to " "the SMBIOS specification. This field is not currently used by " "the Linux kernel, so this firmware bug shouldn't cause any " "problems."); } static void dmi_reserved_bits_check( fwts_framework *fw, const char *table, const uint32_t addr, const char *field, const fwts_dmi_header *hdr, const size_t size, const uint8_t offset, const uint8_t min, const uint8_t max) { uint64_t mask = 0; uint64_t val; uint8_t i; for (i = min; i <= max; i++) { mask |= (1ULL << i); } switch (size) { case sizeof(uint8_t): val = hdr->data[offset]; if (val & mask) { fwts_failed(fw, LOG_LEVEL_MEDIUM, DMI_RESERVED_BIT_USED, "Value 0x%2.2" PRIx8 " was used but bits %" PRIu8 "..%" PRIu8 " should be reserved while accessing entry " "'%s' @ 0x%8.8" PRIx32 ", field '%s', offset 0x%2.2x", (uint8_t)val, min, max, table, addr, field, offset); } break; case sizeof(uint16_t): val = GET_UINT16((hdr->data) + offset); if (val & mask) { fwts_failed(fw, LOG_LEVEL_MEDIUM, DMI_RESERVED_BIT_USED, "Value 0x%4.4" PRIx16 " was used but bits %" PRIu8 "..%" PRIu8 " should be reserved while accessing entry " "'%s' @ 0x%8.8" PRIx32 ", field '%s', offset 0x%2.2x", (uint16_t)val, min, max, table, addr, field, offset); } break; case sizeof(uint32_t): val = GET_UINT32((hdr->data) + offset); if (val & mask) { fwts_failed(fw, LOG_LEVEL_MEDIUM, DMI_RESERVED_BIT_USED, "Value 0x%8.8" PRIx32 " was used but bits %" PRIu8 "..%" PRIu8 " should be reserved while accessing entry " "'%s' @ 0x%8.8" PRIx32 ", field '%s', offset 0x%2.2x", (uint32_t)val, min, max, table, addr, field, offset); } break; case sizeof(uint64_t): val = GET_UINT64((hdr->data) + offset); if (val & mask) { fwts_failed(fw, LOG_LEVEL_MEDIUM, DMI_RESERVED_BIT_USED, "Value 0x%16.16" PRIx64 " was used but bits %" PRIu8 "..%" PRIu8 " should be reserved while accessing entry " "'%s' @ 0x%8.8" PRIx32 ", field '%s', offset 0x%2.2x", val, min, max, table, addr, field, offset); } break; } } static void dmi_reserved_uint8_check( fwts_framework *fw, const char *table, const uint32_t addr, const char *field, const fwts_dmi_header *hdr, const uint8_t offset) { if (hdr->data[offset] != 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, DMI_RESERVED_OFFSET_NONZERO, "Reserved offset value is 0x%2.2" PRIx8 " (nonzero) " "while accessing entry '%s' @ 0x%8.8" PRIx32 ", field '%s', offset 0x%2.2" PRIx8, hdr->data[offset], table, addr, field, offset); } } static void _dmi_ranges_uint8_check( fwts_framework *fw, const char *table, const uint32_t addr, const char *field, const fwts_dmi_header *hdr, const uint8_t offset, const fwts_dmi_value_range *ranges, const uint32_t range_size) { uint16_t i; uint8_t val = hdr->data[offset]; for (i = 0; i < range_size / sizeof(fwts_dmi_value_range); i++) { const fwts_dmi_value_range *range = ranges + i; if ((val >= range->min) && (val <= range->max)) return; } fwts_failed(fw, LOG_LEVEL_HIGH, DMI_VALUE_OUT_OF_RANGE, "Out of range value 0x%2.2" PRIx8 " " "while accessing entry '%s' @ 0x%8.8" PRIx32 ", field '%s', offset 0x%2.2" PRIx8, val, table, addr, field, offset); dmi_out_of_range_advice(fw, hdr->type, offset); } static void dmi_min_max_uint32_check(fwts_framework *fw, const char *table, uint32_t addr, const char *field, const fwts_dmi_header *hdr, uint8_t offset, uint32_t min, uint32_t max) { uint32_t val = GET_UINT32((hdr->data) + offset); if ((val < min) || (val > max)) { fwts_failed(fw, LOG_LEVEL_HIGH, DMI_VALUE_OUT_OF_RANGE, "Out of range value 0x%4.4" PRIx32 " (range allowed 0x%4.4" PRIx32 "..0x%4.4" PRIx32 ") " "while accessing entry '%s' @ 0x%8.8" PRIx32 ", field '%s', offset 0x%2.2" PRIx8, val, min, max, table, addr, field, offset); dmi_out_of_range_advice(fw, hdr->type, offset); } } static void dmi_min_max_uint16_check(fwts_framework *fw, const char *table, uint32_t addr, const char *field, const fwts_dmi_header *hdr, uint8_t offset, uint16_t min, uint16_t max) { uint16_t val = GET_UINT16((hdr->data) + offset); if ((val < min) || (val > max)) { fwts_failed(fw, LOG_LEVEL_HIGH, DMI_VALUE_OUT_OF_RANGE, "Out of range value 0x%4.4" PRIx16 " (range allowed 0x%4.4" PRIx16 "..0x%4.4" PRIx16 ") " "while accessing entry '%s' @ 0x%8.8" PRIx32 ", field '%s', offset 0x%2.2" PRIx8, val, min, max, table, addr, field, offset); dmi_out_of_range_advice(fw, hdr->type, offset); } } static void dmi_min_max_uint8_check(fwts_framework *fw, const char *table, uint32_t addr, const char *field, const fwts_dmi_header *hdr, uint8_t offset, uint8_t min, uint8_t max) { uint8_t val = hdr->data[offset]; if ((val < min) || (val > max)) { fwts_failed(fw, LOG_LEVEL_HIGH, DMI_VALUE_OUT_OF_RANGE, "Out of range value 0x%2.2" PRIx8 " (range allowed 0x%2.2" PRIx8 "..0x%2.2" PRIx8 ") " "while accessing entry '%s' @ 0x%8.8" PRIx32 ", field '%s', offset 0x%2.2" PRIx8, val, min, max, table, addr, field, offset); dmi_out_of_range_advice(fw, hdr->type, offset); } } static void dmi_min_max_mask_uint8_check(fwts_framework *fw, const char *table, uint32_t addr, const char *field, const fwts_dmi_header *hdr, uint8_t offset, uint8_t min, uint8_t max, uint8_t shift, uint8_t mask) { uint8_t val = (hdr->data[offset] >> shift) & mask; if ((val < min) || (val > max)) { fwts_failed(fw, LOG_LEVEL_HIGH, DMI_VALUE_OUT_OF_RANGE, "Out of range value 0x%2.2" PRIx8 " (range allowed 0x%2.2" PRIx8 "..0x%2.2" PRIx8 ") " "while accessing entry '%s' @ 0x%8.8" PRIx32 ", field '%s', offset 0x%2.2" PRIx8, val, min, max, table, addr, field, offset); dmi_out_of_range_advice(fw, hdr->type, offset); } } static void dmi_str_check_index(fwts_framework *fw, const char *table, uint32_t addr, const char *field, const fwts_dmi_header *hdr, uint8_t offset, uint8_t index) { char *data = (char *)hdr->data; uint8_t i = index; bool used_by_kernel = dmi_used_by_kernel(hdr->type, offset); if (i > 0) { int j; int failed = -1; data += hdr->length; while (i > 1 && *data) { data += strlen(data) + 1; i--; } /* Sanity checks */ if (*data == '\0') { int level = used_by_kernel ? LOG_LEVEL_HIGH : LOG_LEVEL_LOW; /* This entry is clearly broken so flag it as a corrupt entry */ fwts_failed(fw, level, DMI_STRING_INDEX_OUT_OF_RANGE, "Out of range string index 0x%2.2" PRIx8 " while accessing entry '%s' " "@ 0x%8.8" PRIx32 ", field '%s', offset 0x%2.2" PRIx8, index, table, addr, field, offset); if (used_by_kernel) fwts_advice(fw, "DMI strings are stored in a manner that uses a special " "index to fetch the Nth string from the data. For this " "particular DMI string the index given is not in range " "which means this particular entry is broken. The Linux " "kernel uses this string - hence this string should be " "fixed to ensure sane data is passed to the kernel. " "Note that this probably won't cause any critical system " "errors."); else fwts_advice(fw, "DMI strings are stored in a manner that uses a special " "index to fetch the Nth string from the data. For this " "particular DMI string the index given is not in range " "which means this particular entry is broken. The Linux " "kernel does not use this string, so this error will not " "cause any system errors."); return; } /* Scan for known BIOS defaults that vendors forget to set */ for (j = 0; dmi_patterns[j].label != NULL; j++) { if (fw->flags & FWTS_FLAG_FIRMWARE_VENDOR) break; if (dmi_patterns[j].field && (strcmp(dmi_patterns[j].field, field) == 0) && (strcmp(dmi_patterns[j].value, data) == 0)) { failed = j; break; } else if (strcmp(dmi_patterns[j].value, data) == 0) { failed = j; break; } } if (failed != -1) { int level = used_by_kernel ? LOG_LEVEL_MEDIUM : LOG_LEVEL_LOW; fwts_failed(fw, level, dmi_patterns[j].label, "String index 0x%2.2" PRIx8 " in table entry '%s' @ 0x%8.8" PRIx32 ", field '%s', offset 0x%2.2" PRIx8 " has a default value '%s' and probably has " "not been updated by the BIOS vendor.", index, table, addr, field, offset, data); if (used_by_kernel) { fwts_advice(fw, "The DMI table contains data which is clearly been " "left in a default setting and not been configured " "for this machine. " "Somebody has probably forgotten to define this " "field and it basically means this field is effectively " "useless. Note that the kernel uses this field so " "it probably should be corrected to ensure the kernel " "is using sane values."); } else { /* This string is broken, but we don't care about it too much */ fwts_advice(fw, "The DMI table contains data which is clearly been " "left in a default setting and not been configured " "for this machine. " "Somebody has probably forgotten to define this " "field and it basically means this field is effectively " "useless, however the kernel does not use this data " "so the issue is fairly low."); } } } } static void dmi_str_check(fwts_framework *fw, const char *table, uint32_t addr, const char *field, const fwts_dmi_header *hdr, uint8_t offset) { dmi_str_check_index(fw, table, addr, field, hdr, offset, hdr->data[offset]); } static void dmi_uuid_check(fwts_framework *fw, const char *table, uint32_t addr, const char *field, const fwts_dmi_header *hdr, uint8_t offset) { char guid_str[37]; int i; fwts_guid_buf_to_str(hdr->data + offset, guid_str, sizeof(guid_str)); for (i = 0; uuid_patterns[i] != NULL; i++) { if (strcmp(guid_str, uuid_patterns[i]) == 0) { fwts_failed(fw, LOG_LEVEL_LOW, DMI_BAD_UUID, "UUID in table entry '%s' @ 0x%8.8" PRIx32 " field '%s', offset 0x%2.2" PRIx8 " has a default value '%s' and probably has " "not been updated by the BIOS vendor.", table, addr, field, offset, guid_str); fwts_advice(fw, "The DMI table contains a UUID which is clearly been " "left in a default setting and not been configured " "for this machine. While this is not critical it does " "mean that somebody has probably forgotten to define this " "field and it basically means this field is effectively " "useless."); } } } static void dmicheck_type_length( fwts_framework *fw, const uint16_t smbios_version, const fwts_dmi_header *hdr) { const fwts_dmi_type_length *tbl = type_info; const uint8_t *data = hdr->data; uint8_t length = hdr->length; bool passed = false; /* Special cases */ switch (hdr->type) { case 15: if (smbios_version >= 0x201 && length >= 17) { length = 0x17 + data[0x15] * data[0x16]; if (length == hdr->length) passed = true; } break; case 17: if (smbios_version >= 0x302 && length >= 0x34) passed = true; break; default: passed = true; break; } /* general cases */ while (tbl->length != 0) { if (hdr->type != tbl->type) { tbl++; continue; } if (smbios_version >= tbl->min_version && smbios_version < tbl->max_version) { if (length == tbl->length) { passed = true; } else passed = false; break; } tbl++; } if (!passed) fwts_failed(fw, LOG_LEVEL_HIGH, DMI_BAD_TABLE_LENGTH, "Type %" PRId8 " expects length of 0x%" PRIx8 ", has incorrect length of 0x%" PRIx8, hdr->type, tbl->length, length); } static void dmicheck_entry(fwts_framework *fw, uint32_t addr, const fwts_dmi_header *hdr, const uint16_t smbios_version) { uint8_t *ptr; uint8_t count; uint8_t val; uint8_t *data = hdr->data; char tmp[64]; char *table; int i; int len; uint32_t failed_count = fw->minor_tests.failed; uint32_t battery_count; int ret; dmicheck_type_length(fw, smbios_version, hdr); switch (hdr->type) { case 0: /* 7.1 */ table = "BIOS Information (Type 0)"; if (hdr->length < 0x12) break; dmi_str_check(fw, table, addr, "Vendor", hdr, 0x4); dmi_str_check(fw, table, addr, "BIOS Version", hdr, 0x5); dmi_str_check(fw, table, addr, "Release Date", hdr, 0x8); if (hdr->length < 0x18) break; dmi_reserved_bits_check(fw, table, addr, "BIOS Characteristics Extension Byte 2", hdr, sizeof(uint8_t), 0x13, 5, 7); /* new fields in spec 3.11 */ if (hdr->length < 0x1a) break; dmi_reserved_bits_check(fw, table, addr, "Extended BIOS ROM Size", hdr, sizeof(uint16_t), 0x18, 15, 15); break; case 1: /* 7.2 */ table = "System Information (Type 1)"; if (hdr->length < 0x08) break; dmi_str_check(fw, table, addr, "Manufacturer", hdr, 0x4); dmi_str_check(fw, table, addr, "Product Name", hdr, 0x5); dmi_str_check(fw, table, addr, "Version", hdr, 0x6); dmi_str_check(fw, table, addr, "Serial Number", hdr, 0x7); if (hdr->length < 0x19) break; dmi_uuid_check(fw, table, addr, "UUID", hdr, 0x8); dmi_min_max_uint8_check(fw, table, addr, "Wakeup Type", hdr, 0x18, 0x0, 0x08); if (hdr->length < 0x1b) break; dmi_str_check(fw, table, addr, "SKU Number", hdr, 0x19); dmi_str_check(fw, table, addr, "Family", hdr, 0x1a); break; case 2: /* 7.3 */ table = "Base Board Information (Type 2)"; if (hdr->length < 0x08) break; dmi_str_check(fw, table, addr, "Manufacturer", hdr, 0x4); dmi_str_check(fw, table, addr, "Product", hdr, 0x5); dmi_str_check(fw, table, addr, "Version", hdr, 0x6); dmi_str_check(fw, table, addr, "Serial Number", hdr, 0x7); if (hdr->length < 0x09) break; dmi_str_check(fw, table, addr, "Asset Tag", hdr, 0x8); if (hdr->length < 0x0f) break; dmi_reserved_bits_check(fw, table, addr, "Feature Flags", hdr, sizeof(uint8_t), 0x9, 5, 7); dmi_str_check(fw, table, addr, "Location In Chassis", hdr, 0xa); dmi_min_max_uint8_check(fw, table, addr, "Type", hdr, 0xd, 0x1, 0xd); break; case 3: /* 7.4 */ table = "Chassis Information (Type 3)"; if (hdr->length < 0x09) break; dmi_str_check(fw, table, addr, "Manufacturer", hdr, 0x4); dmi_min_max_mask_uint8_check(fw, table, addr, "Chassis Type", hdr, 0x5, 0x1, FWTS_SMBIOS_CHASSIS_MAX - 1, 0x0, 0x7f); dmi_min_max_mask_uint8_check(fw, table, addr, "Chassis Lock", hdr, 0x5, 0x0, 0x1, 0x7, 0x1); dmi_str_check(fw, table, addr, "Version", hdr, 0x6); dmi_str_check(fw, table, addr, "Serial Number", hdr, 0x7); dmi_str_check(fw, table, addr, "Asset Tag", hdr, 0x8); dmi_min_max_uint8_check(fw, table, addr, "Boot-up State", hdr, 0x9, 0x1, 0x6); dmi_min_max_uint8_check(fw, table, addr, "Power Supply State", hdr, 0xa, 0x1, 0x6); dmi_min_max_uint8_check(fw, table, addr, "Thermal State", hdr, 0xb, 0x1, 0x6); dmi_min_max_uint8_check(fw, table, addr, "Security Status", hdr, 0xc, 0x1, 0x5); if (hdr->length < 0x15 + data[0x13] * data[0x14]) break; ptr = data + 0x15; len = data[0x14]; if (len >= 0x3) { for (i = 0; i < data[0x13]; i++) { val = ptr[i * len] & 0x7f; if (ptr[i * len] & 0x80) { if (val > 0x42) fwts_failed(fw, LOG_LEVEL_HIGH, DMI_VALUE_OUT_OF_RANGE, "Out of range value 0x%2.2" PRIx8 " (range allowed 0x00..0x42) " "while accessing entry '%s' @ " "0x%8.8" PRIx32 ", field " "'SMBIOS Structure Type %d', " "offset 0x%2.2x", val, table, addr, i, 0x15 + (i*len)); } else { if ((val < 0x1) || (val > 0xd)) { fwts_failed(fw, LOG_LEVEL_HIGH, DMI_VALUE_OUT_OF_RANGE, "Out of range value 0x%2.2" PRIx8 " (range allowed 0x01..0x0d) " "while accessing entry '%s' @ " "0x%8.8" PRIx32 ", field " "'Base Board Type %d', offset 0x%2.2x", val, table, addr, i, 0x15 + (i*len)); } } } } if (hdr->length < 0x16 + data[0x13] * data[0x14]) break; dmi_str_check(fw, table, addr, "SKU Number", hdr, 0x15 + data[0x13] * data[0x14]); break; case 4: /* 7.5 */ table = "Processor Information (Type 4)"; if (hdr->length < 0x1a) break; dmi_str_check(fw, table, addr, "Socket Designation", hdr, 0x4); dmi_min_max_uint8_check(fw, table, addr, "Processor Type", hdr, 0x5, 0x1, 0x6); dmi_min_max_uint8_check(fw, table, addr, "Processor Family", hdr, 0x6, 0x1, 0xfe); dmi_str_check(fw, table, addr, "Processor Manufacturer", hdr, 0x7); dmi_str_check(fw, table, addr, "Processor Version", hdr, 0x10); if (((GET_UINT8(data + 0x18) & 0x07) == 0x5) || ((GET_UINT8(data + 0x18) & 0x07) == 0x6)) fwts_failed(fw, LOG_LEVEL_HIGH, DMI_VALUE_OUT_OF_RANGE, "Out of range value 0x%2.2" PRIx8 " " "bits 0..2 set to illegal value 0x5 or 0x6 " "while accessing entry '%s' @ 0x%8.8" PRIx32 ", field '%s', offset 0x%2.2x", GET_UINT8(data + 0x18), table, addr, "Status", 0x18); dmi_reserved_bits_check(fw, table, addr, "Status", hdr, sizeof(uint8_t), 0x18, 3, 5); dmi_reserved_bits_check(fw, table, addr, "Status", hdr, sizeof(uint8_t), 0x18, 7, 7); dmi_min_max_uint8_check(fw, table, addr, "Processor Upgrade", hdr, 0x19, 0x1, 0x50); if (hdr->length < 0x23) break; dmi_str_check(fw, table, addr, "Serial Number", hdr, 0x20); dmi_str_check(fw, table, addr, "Asset Tag", hdr, 0x21); dmi_str_check(fw, table, addr, "Part Number", hdr, 0x22); if (hdr->length < 0x28) break; dmi_reserved_bits_check(fw, table, addr, "Processor Characteristics", hdr, sizeof(uint16_t), 0x26, 0, 0); dmi_reserved_bits_check(fw, table, addr, "Processor Characteristics", hdr, sizeof(uint16_t), 0x26, 10, 15); if (hdr->length < 0x2a) break; dmi_min_max_uint16_check(fw, table, addr, "Processor Family 2", hdr, 0x28, 0x1, 0xfffd); if (hdr->length < 0x30) break; dmi_min_max_uint16_check(fw, table, addr, "Core Count 2", hdr, 0x2a, 0, 0xfffe); dmi_min_max_uint16_check(fw, table, addr, "Core Enabled 2", hdr, 0x2c, 0, 0xfffe); dmi_min_max_uint16_check(fw, table, addr, "Thread Count 2", hdr, 0x2e, 0, 0xfffe); if (hdr->length < 0x32) break; dmi_min_max_uint16_check(fw, table, addr, "Thread Enabled", hdr, 0x30, 0, 0xfffe); break; case 5: /* 7.6 (Type 5 is obsolete) */ table = "Memory Controller Information (Type 5)"; if (hdr->length < 0x0f) break; dmi_min_max_uint8_check(fw, table, addr, "Error Detecting Method", hdr, 0x4, 0x1, 0x8); dmi_min_max_uint8_check(fw, table, addr, "Supported Interleave", hdr, 0x6, 0x1, 0x7); dmi_min_max_uint8_check(fw, table, addr, "Current Interleave", hdr, 0x7, 0x1, 0x7); break; case 6: /* 7.7 (Type 6 is obsolete) */ table = "Memory Module Information (Type 6)"; if (hdr->length < 0x0c) break; dmi_str_check(fw, table, addr, "Socket Designation", hdr, 0x4); break; case 7: /* 7.8 */ table = "Cache Information (Type 7)"; if (hdr->length < 0x0f) break; dmi_str_check(fw, table, addr, "Socket Designation", hdr, 0x4); if (((GET_UINT16(data + 0x05) >> 5) & 0x0003) == 0x2) fwts_failed(fw, LOG_LEVEL_HIGH, DMI_VALUE_OUT_OF_RANGE, "Out of range value 0x%4.4" PRIx16 " " "bits 5..6 set to illegal value 0x2, only allowed" "0x0, 0x1, 0x3 while accessing entry '%s' @ " "0x%8.8" PRIx32 ", field '%s', offset 0x%2.2x", GET_UINT16(data + 0x05), table, addr, "Cache Location", 0x5); dmi_reserved_bits_check(fw, table, addr, "Cache Location", hdr, sizeof(uint16_t), 0x05, 10, 15); dmi_reserved_bits_check(fw, table, addr, "Supported SRAM Type", hdr, sizeof(uint16_t), 0x0b, 7, 15); dmi_reserved_bits_check(fw, table, addr, "Current SRAM Type", hdr, sizeof(uint16_t), 0x0d, 7, 15); if (hdr->length < 0x13) break; dmi_min_max_uint8_check(fw, table, addr, "Error Correction Type", hdr, 0x10, 0x1, 0x6); dmi_min_max_uint8_check(fw, table, addr, "System Cache Type", hdr, 0x11, 0x1, 0x5); dmi_min_max_uint8_check(fw, table, addr, "Associativity", hdr, 0x12, 0x1, 0xe); break; case 8: /* 7.9 */ table = "Port Connector Information (Type 8)"; if (hdr->length < 0x09) break; dmi_str_check(fw, table, addr, "Internal Reference Designator", hdr, 0x4); fwts_dmi_value_range t8_ranges1[] = {{0, 0x23}, {0xa0, 0xa4}, {0xff, 0xff}}; dmi_ranges_uint8_check(fw, table, addr, "Internal Connector Type", hdr, 0x5, t8_ranges1); dmi_str_check(fw, table, addr, "External Reference Designator", hdr, 0x6); dmi_ranges_uint8_check(fw, table, addr, "External Connector Type", hdr, 0x7, t8_ranges1); fwts_dmi_value_range t8_ranges2[] = {{0, 0x23}, {0xa0, 0xa1}, {0xff, 0xff}}; dmi_ranges_uint8_check(fw, table, addr, "Port Type", hdr, 0x8, t8_ranges2); break; case 9: /* 7.10 */ table = "System Slot Information (Type 9)"; if (hdr->length < 0x0c) break; dmi_str_check(fw, table, addr, "Slot Designation", hdr, 0x4); fwts_dmi_value_range t9_ranges[] = {{1, 0x28}, {0x30, 0x30}, {0xa0, 0xc6}}; dmi_ranges_uint8_check(fw, table, addr, "Slot Type", hdr, 0x5, t9_ranges); dmi_min_max_uint8_check(fw, table, addr, "Slot Data Bus Width", hdr, 0x6, 0x1, 0xe); dmi_min_max_uint8_check(fw, table, addr, "Current Usage", hdr, 0x7, 0x1, 0x5); dmi_min_max_uint8_check(fw, table, addr, "Slot Length", hdr, 0x8, 0x1, 0x6); if (hdr->length < 0x0d) break; if (hdr->length < 0x11) break; if (!((data[0x5] == 0x06) || ((data[0x5] >= 0x0e) && (data[0x5] <= 0x28)) || ((data[0x5] >= 0xa0) && (data[0x5] <= 0xc6)))) { if (GET_UINT16(data + 0xd) != 0xffff) fwts_failed(fw, LOG_LEVEL_MEDIUM, DMI_VALUE_OUT_OF_RANGE, "Invalid value 0x%4.4" PRIx16 " was used and 0xffff " "should be used for non-PCI(e) while accessing entry '%s' @ " "0x%8.8" PRIx32 ", field '%s', offset 0x%2.2x", GET_UINT16(data + 0x0d), table, addr, "Segment Group Number", 0xd); if (data[0xf] != 0xff) fwts_failed(fw, LOG_LEVEL_MEDIUM, DMI_VALUE_OUT_OF_RANGE, "Invalid value 0x%2.2" PRIx8 " was used and 0xff " "should be used for non-PCI(e) while accessing entry '%s' @ " "0x%8.8" PRIx32 ", field '%s', offset 0x%2.2x", data[0xf], table, addr, "Bus Number", 0xf); if (data[0x10] != 0xff) fwts_failed(fw, LOG_LEVEL_MEDIUM, DMI_VALUE_OUT_OF_RANGE, "Invalid value 0x%2.2" PRIx8 " was used and 0xff " "should be used for non-PCI(e) while accessing entry '%s' @ " "0x%8.8" PRIx32 ", field '%s', offset 0x%2.2x", data[0x10], table, addr, "Device/Function Number", 0x10); } if (hdr->length < (0x18 + 5 * data[0x12])) break; dmi_min_max_uint8_check(fw, table, addr, "Slot Height", hdr, (0x17 + 5 * data[0x12]), 0, 0x4); break; case 10: /* 7.11 (Type 10 is obsolete) */ table = "On Board Devices (Type 10)"; count = (hdr->length - 4) / 2; for (i = 0; i < count; i++) { snprintf(tmp, sizeof(tmp), "Type (Device #%d)", i); dmi_min_max_mask_uint8_check(fw, table, addr, tmp, hdr, 4 + (2 * i), 0x1, 0xa, 0x0, 0x7f); snprintf(tmp, sizeof(tmp), "Description (Device #%d)", i); dmi_str_check(fw, table, addr, tmp, hdr, 5 + (2 * i)); } break; case 11: /* 7.12 */ table = "OEM Strings (Type 11)"; if (hdr->length < 0x5) break; for (i = 1; i <= hdr->data[4]; i++) { snprintf(tmp, sizeof(tmp), "String %d", i); dmi_str_check_index(fw, table, addr, tmp, hdr, 0x4, i); } break; case 12: /* 7.13 */ table = "System Configuration Options (Type 12)"; if (hdr->length < 0x5) break; for (i = 1; i <= hdr->data[4]; i++) { snprintf(tmp, sizeof(tmp), "Option %d", i); dmi_str_check_index(fw, table, addr, tmp, hdr, 0x4, i); } break; case 13: /* 7.14 */ table = "BIOS Language Information (Type 13)"; if (hdr->length < 0x6) break; dmi_reserved_bits_check(fw, table, addr, "Flags", hdr, sizeof(uint8_t), 0x5, 1, 7); if (hdr->length < 0x15) break; for (i = 0x6; i < 15; i++) dmi_reserved_uint8_check(fw, table, addr, "Reserved", hdr, i); if (hdr->length < 0x16) break; for (i = 1; i <= hdr->data[4]; i++) { snprintf(tmp, sizeof(tmp), "BIOS Language String %d", i); dmi_str_check_index(fw, table, addr, tmp, hdr, 0x4, i); } dmi_str_check(fw, table, addr, "Currently Installed Language", hdr, 0x15); break; case 14: /* 7.15 */ table = "Group Associations (Type 14)"; if (hdr->length < 0x05) break; dmi_str_check(fw, table, addr, "Name", hdr, 0x4); break; case 15: /* 7.16 */ table = "System Event Log (Type 15)"; if (hdr->length < 0x14) break; fwts_dmi_value_range t15_ranges1[] = {{0, 0x4}, {0x80, 0xff}}; dmi_ranges_uint8_check(fw, table, addr, "Access Method", hdr, 0xa, t15_ranges1); dmi_reserved_bits_check(fw, table, addr, "Log Status", hdr, sizeof(uint8_t), 0xb, 2, 7); if (hdr->length < 0x17) break; fwts_dmi_value_range t15_ranges2[] = {{0, 0x1}, {0x80, 0xff}}; dmi_ranges_uint8_check(fw, table, addr, "Log Header Format", hdr, 0x14, t15_ranges2); if (hdr->length < 0x17 + data[0x15] * data[0x16]) break; if (data[0x16] >= 0x02) { uint8_t *tmpptr = data + 0x17; int k; for (k = 0; k < data[0x15]; k++) { int j = data[0x16] * k; val = tmpptr[j]; if (!(((val >= 0x01) && (val <= 0x0e)) || ((val >= 0x10) && (val <= 0x17)) || (val >= 0x80))) { fwts_failed(fw, LOG_LEVEL_HIGH, DMI_VALUE_OUT_OF_RANGE, "Out of range value 0x%2.2" PRIx8 " " "(range allowed 0x01..0x0e, 0x10..0x17, " "0x80..0xff) while accessing entry '%s' @ " "0x%8.8" PRIx32 ", field '%s', item %d", val, table, addr, "Log Descriptor Type", k); } val = tmpptr[j + 1]; if ((val > 0x06) && (val < 0x80)) { fwts_failed(fw, LOG_LEVEL_HIGH, DMI_VALUE_OUT_OF_RANGE, "Out of range value 0x%2.2" PRIx8 " " "(range allowed 0x00..0x06, 0x80..0xff) " "while accessing entry '%s' @ " "0x%8.8" PRIx32 ", field '%s', item %d", val, table, addr, "Log Descriptor Format", k); } } } break; case 16: /* 7.17 */ table = "Physical Memory Array (Type 16)"; if (hdr->length < 0x0f) break; fwts_dmi_value_range t16_ranges[] = {{0x1, 0xa}, {0xa0, 0xa4}}; dmi_ranges_uint8_check(fw, table, addr, "Location", hdr, 0x4, t16_ranges); dmi_min_max_uint8_check(fw, table, addr, "Use", hdr, 0x5, 0x1, 0x7); dmi_min_max_uint8_check(fw, table, addr, "Error Correction Type", hdr, 0x6, 0x1, 0x7); dmi_min_max_uint32_check(fw, table, addr, "Maximum Capacity", hdr, 0x7, 0, 0x80000000); if (hdr->length < 0x17) break; if (GET_UINT64(data + 0xf) != 0 && GET_UINT32(data + 0x7) != 0x80000000) fwts_failed(fw, LOG_LEVEL_HIGH, DMI_INVALID_MEMORY_ENTRY, "An illegal value 0x%16.16" PRIx64 " for entry '%s' " "@ 0x%8.8" PRIx32, GET_UINT64(data + 0xf), table, addr); break; case 17: /* 7.18 */ table = "Memory Device (Type 17)"; /* skip if memory module is not installed (size = 0) */ if (GET_UINT16(data + 0xc) == 0) break; if (hdr->length < 0x15) break; dmi_min_max_uint8_check(fw, table, addr, "Form Factor", hdr, 0xe, 0x1, 0x10); dmi_str_check(fw, table, addr, "Locator", hdr, 0x10); dmi_str_check(fw, table, addr, "Bank Locator", hdr, 0x11); fwts_dmi_value_range t17_ranges[] = {{0x1, 0x14}, {0x18, 0x24}}; dmi_ranges_uint8_check(fw, table, addr, "Memory Type", hdr, 0x12, t17_ranges); dmi_reserved_bits_check(fw, table, addr, "Type Detail", hdr, sizeof(uint16_t), 0x13, 0, 0); if (hdr->length < 0x1b) break; dmi_str_check(fw, table, addr, "Manufacturer", hdr, 0x17); dmi_str_check(fw, table, addr, "Serial Number", hdr, 0x18); dmi_str_check(fw, table, addr, "Asset Tag", hdr, 0x19); dmi_str_check(fw, table, addr, "Part Number", hdr, 0x1a); if (hdr->length < 0x1c) break; dmi_reserved_bits_check(fw, table, addr, "Attributes", hdr, sizeof(uint8_t), 0x1b, 4, 7); if (hdr->length < 0x22) break; dmi_reserved_bits_check(fw, table, addr, "Extended Size", hdr, sizeof(uint32_t), 0x1c, 31, 31); if (hdr->length < 0x4c) break; dmi_min_max_uint8_check(fw, table, addr, "Memory Technology", hdr, 0x28, 0x1, 0x7); dmi_reserved_bits_check(fw, table, addr, "Memory Operating Mode Cap", hdr, sizeof(uint16_t), 0x29, 0, 0); dmi_reserved_bits_check(fw, table, addr, "Memory Operating Mode Cap", hdr, sizeof(uint16_t), 0x29, 6, 15); switch(hdr->data[0x28]) { case 0x04: case 0x05: case 0x06: dmi_str_check(fw, table, addr, "Firmware Version", hdr, 0x2b); break; default: break; } if (hdr->length < 0x54) break; dmi_reserved_bits_check(fw, table, addr, "Extended Speed", hdr, sizeof(uint32_t), 0x54, 31, 31); dmi_reserved_bits_check(fw, table, addr, "Extended Configured Memory Speed", hdr, sizeof(uint32_t), 0x58, 31, 31); break; case 18: /* 7.19 */ table = "32-bit Memory Error Information (Type 18)"; if (hdr->length < 0x17) break; dmi_min_max_uint8_check(fw, table, addr, "Error Type", hdr, 0x4, 0x1, 0xe); dmi_min_max_uint8_check(fw, table, addr, "Error Granularity", hdr, 0x5, 0x1, 0x4); dmi_min_max_uint8_check(fw, table, addr, "Error Operation", hdr, 0x6, 0x1, 0x5); break; case 19: /* 7.20 */ table = "Memory Array Mapped Address (Type 19)"; if (hdr->length < 0x0F) break; if (hdr->length >= 0x1F && GET_UINT32(data + 0x04) == 0xFFFFFFFF) { uint64_t start, end; start = GET_UINT64(data + 0x0F); end = GET_UINT64(data + 0x17); if (start == end) fwts_failed(fw, LOG_LEVEL_HIGH, DMI_ILLEGAL_MAPPED_ADDR_RANGE, "Extended Start and End addresses are identical " "while accessing entry '%s' @ 0x%8.8" PRIx32 ", " "fields 'Extended Starting Address' and 'Extended Ending Address'", table, addr); } else { if (GET_UINT32(data + 0x08) - GET_UINT32(data + 0x04) + 1 == 0) fwts_failed(fw, LOG_LEVEL_HIGH, DMI_ILLEGAL_MAPPED_ADDR_RANGE, "Illegal zero mapped address range " "for entry '%s' @ 0x%8.8" PRIx32, table, addr); } break; case 20: /* 7.21 */ table = "Memory Device Mapped Address (Type 20)"; if (hdr->length < 0x13) break; if (hdr->length >= 0x23 && GET_UINT32(data + 0x04) == 0xFFFFFFFF) { uint64_t start, end; start = GET_UINT64(data + 0x13); end = GET_UINT64(data + 0x1B); if (start == end) fwts_failed(fw, LOG_LEVEL_HIGH, DMI_ILLEGAL_MAPPED_ADDR_RANGE, "Extended Start and End addresses are identical " "while accessing entry '%s' @ 0x%8.8" PRIx32 ", " "fields 'Extended Starting Address' and 'Extended Ending Address'", table, addr); } else { if (GET_UINT32(data + 0x08) - GET_UINT32(data + 0x04) + 1 == 0) fwts_failed(fw, LOG_LEVEL_HIGH, DMI_ILLEGAL_MAPPED_ADDR_RANGE, "Illegal zero mapped address range " "for entry '%s' @ 0x%8.8" PRIx32, table, addr); } if (data[0x10] == 0) fwts_failed(fw, LOG_LEVEL_HIGH, DMI_ILLEGAL_MAPPED_ADDR_RANGE, "Illegal row position %2.2" PRIx8 ", " "while accessing entry '%s' @ 0x%8.8" PRIx32 ", field '%s', offset 0x%2.2x", data[0x10], table, addr, "Partial Row Position", 0x10); break; case 21: /* 7.22 */ table = "Built-in Pointing Device (Type 21)"; if (hdr->length < 0x07) break; dmi_min_max_uint8_check(fw, table, addr, "Type", hdr, 0x4, 0x1, 0x9); fwts_dmi_value_range t21_ranges[] = {{0x1, 0x8}, {0xa0, 0xa4}}; dmi_ranges_uint8_check(fw, table, addr, "Interface", hdr, 0x5, t21_ranges); break; case 22: /* 7.23 */ table = "Portable Battery (Type 22)"; if (hdr->length < 0x10) break; dmi_str_check(fw, table, addr, "Location", hdr, 0x4); dmi_str_check(fw, table, addr, "Manufacturer", hdr, 0x5); if (data[0x06] || hdr->length < 0x1A) dmi_str_check(fw, table, addr, "Manufacturer Date", hdr, 0x6); if (data[0x07] || hdr->length < 0x1A) dmi_str_check(fw, table, addr, "Serial Number", hdr, 0x7); dmi_str_check(fw, table, addr, "Device Name", hdr, 0x8); dmi_min_max_uint8_check(fw, table, addr, "Device Chemistry", hdr, 0x9, 1, 8); dmi_str_check(fw, table, addr, "SBDS Version Number", hdr, 0xe); if (data[0xf] != 0xff) dmi_min_max_uint8_check(fw, table, addr, "Maximum Error in Battery Data", hdr, 0xf, 0, 100); if (hdr->length < 0x1A) break; if (data[0x09] == 0x02) dmi_str_check(fw, table, addr, "SBDS Device Chemistry", hdr, 0x14); ret = fwts_battery_get_count(fw, &battery_count); if (ret != FWTS_OK || battery_count < 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, DMI_INVALID_HARDWARE_ENTRY, "Invalid Hardware Configuration " "(no battery found) "); } break; case 23: /* 7.24 */ table = "System Reset (Type 23)"; if (hdr->length < 0x0D) break; if (!(data[0x04] & (1 << 5))) break; dmi_min_max_mask_uint8_check(fw, table, addr, "Capabilities (bits 1..2)", hdr, 0x4, 0x1, 0x3, 1, 0x3); dmi_min_max_mask_uint8_check(fw, table, addr, "Capabilities (bits 3..4)", hdr, 0x4, 0x1, 0x3, 3, 0x3); dmi_reserved_bits_check(fw, table, addr, "Capabilities", hdr, sizeof(uint8_t), 0x4, 6, 7); break; case 24: /* 7.25 */ table = "Hardware Security (Type 24)"; /* if (hdr->length < 0x05) break; */ break; case 25: /* 7.26 */ table = "System Power Controls (Type 25)"; /* if (hdr->length < 0x9) break; */ break; case 26: /* 7.27 */ table = "Voltage Probe (Type 26)"; if (hdr->length < 0x16) break; dmi_str_check(fw, table, addr, "Description", hdr, 0x4); dmi_min_max_mask_uint8_check(fw, table, addr, "Location (bits 0..4)", hdr, 0x5, 0x1, 0xb, 0, 0x1f); dmi_min_max_mask_uint8_check(fw, table, addr, "Status (bits 5..7)", hdr, 0x5, 0x1, 0x6, 5, 0x7); dmi_min_max_uint16_check(fw, table, addr, "Maximum Value", hdr, 0x6, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Minimum Value", hdr, 0x8, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Resolution", hdr, 0xa, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Tolerance", hdr, 0xc, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Accuracy", hdr, 0xe, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Nominal Value", hdr, 0x14, 0, 0x8000); break; case 27: /* 7.28 */ table = "Cooling Device (Type 27)"; if (hdr->length < 0xe) break; val = data[0x06] & 0x1f; if (!(((val >= 0x01) && (val <= 0x09)) || ((val >= 0x10) && (val <= 0x11)))) fwts_failed(fw, LOG_LEVEL_HIGH, DMI_VALUE_OUT_OF_RANGE, "Out of range value 0x%2.2" PRIx8 " " "(range allowed 0x01..0x09, 0x10..0x11) " "while accessing entry '%s' @ " "0x%8.8" PRIx32 ", field '%s', " "offset 0x%2.2x, mask 0x%2.2x", data[0x6], table, addr, "Device Type", 0x6, 0x1f); dmi_min_max_mask_uint8_check(fw, table, addr, "Status (bits 5..7)", hdr, 0x6, 0x1, 0x6, 5, 0x7); if (hdr->length < 0x0f) break; dmi_min_max_uint16_check(fw, table, addr, "Nominal Speed", hdr, 0xc, 0, 0x8000); dmi_str_check(fw, table, addr, "Description", hdr, 0xe); break; case 28: /* 7.29 */ table = "Temperature Probe (Type 28)"; if (hdr->length < 0x16) break; dmi_str_check(fw, table, addr, "Description", hdr, 0x4); dmi_min_max_mask_uint8_check(fw, table, addr, "Location (bits 0..4)", hdr, 0x5, 0x1, 0xf, 0, 0x1f); dmi_min_max_mask_uint8_check(fw, table, addr, "Status (bits 5..7)", hdr, 0x5, 0x1, 0x6, 5, 0x7); dmi_min_max_uint16_check(fw, table, addr, "Maximum Value", hdr, 0x6, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Minimum Value", hdr, 0x8, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Resolution", hdr, 0xa, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Tolerance", hdr, 0xc, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Accuracy", hdr, 0xe, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Nominal Value", hdr, 0x14, 0, 0x8000); break; case 29: /* 7.30 */ table = "Electrical Current Probe (Type 29)"; if (hdr->length < 0x16) break; dmi_str_check(fw, table, addr, "Description", hdr, 0x4); dmi_min_max_mask_uint8_check(fw, table, addr, "Location (bits 0..4)", hdr, 0x5, 0x1, 0xb, 0, 0x1f); dmi_min_max_mask_uint8_check(fw, table, addr, "Status (bits 5..7)", hdr, 0x5, 0x1, 0x6, 5, 0x7); dmi_min_max_uint16_check(fw, table, addr, "Maximum Value", hdr, 0x6, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Minimum Value", hdr, 0x8, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Resolution", hdr, 0xa, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Tolerance", hdr, 0xc, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Accuracy", hdr, 0xe, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Nominal Value", hdr, 0x14, 0, 0x8000); break; case 30: /* 7.31 */ table = "Out-of-band Remote Access (Type 30)"; if (hdr->length < 0x06) break; dmi_str_check(fw, table, addr, "Manufacturer Name", hdr, 0x4); dmi_reserved_bits_check(fw, table, addr, "Connections", hdr, sizeof(uint8_t), 0x5, 2, 7); break; case 31: /* 7.32 */ table = "Boot Integrity Services Entry Point (Type 31)"; /* if (hdr->length < 0x1c) break; */ break; case 32: /* 7.33 */ table = "System Boot Information (Type 32)"; if (hdr->length < 0xb) break; for (i = 4; i <= 9; i++) dmi_reserved_uint8_check(fw, table, addr, "Reserved", hdr, i); fwts_dmi_value_range t32_ranges[] = {{0, 0x8}, {0x80, 0xff}}; dmi_ranges_uint8_check(fw, table, addr, "Boot Status", hdr, 0xa, t32_ranges); break; case 33: /* 7.34 */ table = "64-bit Memory Error Information (Type 33)"; if (hdr->length < 0x1f) break; dmi_min_max_uint8_check(fw, table, addr, "Error Type", hdr, 0x4, 0x1, 0xe); dmi_min_max_uint8_check(fw, table, addr, "Error Granularity", hdr, 0x5, 0x1, 0x4); dmi_min_max_uint8_check(fw, table, addr, "Error Operation", hdr, 0x6, 0x1, 0x5); break; case 34: /* 7.35 */ table = "Management Device (Type 34)"; if (hdr->length < 0x0b) break; dmi_str_check(fw, table, addr, "Description", hdr, 0x4); dmi_min_max_uint8_check(fw, table, addr, "Type", hdr, 0x5, 0x1, 0xd); dmi_min_max_uint8_check(fw, table, addr, "Address Type", hdr, 0xa, 0x1, 0x5); break; case 35: /* 7.36 */ table = "Management Device Component (Type 35)"; if (hdr->length < 0x0b) break; dmi_str_check(fw, table, addr, "Description", hdr, 0x4); break; case 36: /* 7.37 */ table = "Management Device Threshold Data (Type 36)"; if (hdr->length < 0x10) break; dmi_min_max_uint16_check(fw, table, addr, "Lower Threshold - Non-critical", hdr, 0x4, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Upper Threshold - Non-critical", hdr, 0x6, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Lower Threshold - Critical", hdr, 0x8, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Upper Threshold - Critical", hdr, 0xa, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Lower Threshold - Non-recoverable", hdr, 0xc, 0, 0x8000); dmi_min_max_uint16_check(fw, table, addr, "Upper Threshold - Non-recoverable", hdr, 0xe, 0, 0x8000); break; case 37: /* 7.38 */ table = "Memory Channel (Type 37)"; if (hdr->length < 0x07) break; dmi_min_max_uint8_check(fw, table, addr, "Type", hdr, 0x4, 0x1, 0x4); break; case 38: /* 7.39 */ table = "IPMI Device Information (Type 38)"; if (hdr->length < 0x12) break; dmi_min_max_uint8_check(fw, table, addr, "Interface Type", hdr, 0x4, 0x0, 0x4); dmi_reserved_bits_check(fw, table, addr, "Base Addr Modifier/Interrupt Info", hdr, sizeof(uint8_t), 0x10, 2, 2); dmi_reserved_bits_check(fw, table, addr, "Base Addr Modifier/Interrupt Info", hdr, sizeof(uint8_t), 0x10, 5, 5); dmi_min_max_mask_uint8_check(fw, table, addr, "Base Addr Modifier/Interrupt Info)", hdr, 0x10, 0x0, 0x2, 6, 0x3); break; case 39: /* 7.40 */ table = "System Power Supply (Type 39)"; if (hdr->length < 0x10) break; dmi_str_check(fw, table, addr, "Location", hdr, 0x5); dmi_str_check(fw, table, addr, "Device Name", hdr, 0x6); dmi_str_check(fw, table, addr, "Manufacturer", hdr, 0x7); dmi_str_check(fw, table, addr, "Serial Number", hdr, 0x8); dmi_str_check(fw, table, addr, "Asset Tag", hdr, 0x9); dmi_str_check(fw, table, addr, "Model Part Number", hdr, 0xa); dmi_str_check(fw, table, addr, "Revision Level", hdr, 0xb); dmi_min_max_uint16_check(fw, table, addr, "Max Power Capacity", hdr, 0xc, 0, 0x8000); dmi_reserved_bits_check(fw, table, addr, "Power Supply Characteristics", hdr, sizeof(uint16_t), 0xe, 14, 15); break; case 40: /* 7.41 */ table = "Additional Information (Type 40)"; break; case 41: /* 7.42 */ table = "Onboard Device (Type 41)"; if (hdr->length < 0xb) break; dmi_str_check(fw, table, addr, "Reference Designation", hdr, 0x4); dmi_min_max_mask_uint8_check(fw, table, addr, "Device Type", hdr, 0x5, 0x1, 0x10, 0, 0x7f); break; case 42: /* 7.43 */ table = "Management Controller Host Interface (Type 42)"; if (hdr->length < 0x05) break; if (!((data[0x04] <= 0x3F) || (data[0x04] == 0x40) || (data[0x04] == 0xF0))) fwts_failed(fw, LOG_LEVEL_MEDIUM, DMI_MGMT_CTRL_HOST_TYPE, "Out of range value 0x%2.2" PRIx8 " " "(range allowed 0x00..0x3f, 0x40, 0xf0) " "while accessing entry '%s' @ " "0x%8.8" PRIx32 ", field '%s', offset 0x%2.2x", data[0x4], table, addr, "Reference Designation", 0x4); break; case 43: /* 7.44 */ table = "TPM Device (Type 43)"; if (hdr->length < 0x1b) break; dmi_str_check(fw, table, addr, "Description", hdr, 0x12); dmi_reserved_bits_check(fw, table, addr, "Characteristics", hdr, sizeof(uint64_t), 0x13, 0, 1); dmi_reserved_bits_check(fw, table, addr, "Characteristics", hdr, sizeof(uint64_t), 0x13, 6, 63); break; case 44: /* 7.45 */ table = "Processor Additional Information (Type 44)"; if (hdr->length < 0x6) break; dmi_min_max_uint8_check(fw, table, addr, "IProcessor Architecture Types", hdr, 0x7, 0x0, 0xa); break; case 45: /* 7.46 */ table = "Firmware Inventory Information (Type 45)"; if (hdr->length < 0x18) break; dmi_str_check(fw, table, addr, "Firmware Component Name", hdr, 0x4); dmi_str_check(fw, table, addr, "Firmware Version", hdr, 0x5); dmi_str_check(fw, table, addr, "Firmware ID", hdr, 0x7); dmi_str_check(fw, table, addr, "Release Date", hdr, 0x9); dmi_str_check(fw, table, addr, "Manufacturer", hdr, 0xa); dmi_str_check(fw, table, addr, "Lowest Supported Firmware Version", hdr, 0xb); dmi_reserved_bits_check(fw, table, addr, "Characteristics", hdr, sizeof(uint16_t), 0x14, 2, 15); dmi_min_max_uint8_check(fw, table, addr, "State", hdr, 0x16, 0x1, 0x8); break; case 46: /* 7.47 */ table = "String Property (Type 46)"; if (hdr->length < 0x7) break; break; case 126: /* 7.48 */ table = "Inactive (Type 126)"; break; case SMBIOS_END_OF_TABLE: /* 7.49 */ table = "End of Table (Type 127)"; break; default: snprintf(tmp, sizeof(tmp), "Unknown (Type %" PRId8 ")", hdr->type); table = tmp; break; } if (fw->minor_tests.failed == failed_count) fwts_passed(fw, "Entry @ 0x%8.8" PRIx32 " '%s'", addr, table); else if (hdr->type <= 42) fwts_advice(fw, "It may be worth checking against section 7.%" PRId8 " of the " "System Management BIOS (SMBIOS) Reference Specification " "(see http://www.dmtf.org/standards/smbios).", hdr->type+1); } static int dmi_version_check(fwts_framework *fw, uint16_t version) { if (version > DMI_VERSION) { fwts_skipped(fw, "SMBIOS version %" PRIu16 ".%" PRIu16 " is not supported by the dmicheck " "test. This test only supports SMBIOS version " "%" PRIu16 ".%" PRIu16 " and lower.", VERSION_MAJOR(version), VERSION_MINOR(version), VERSION_MAJOR(DMI_VERSION), VERSION_MINOR(DMI_VERSION)); return FWTS_ERROR; } return FWTS_OK; } static void dmi_scan_tables(fwts_framework *fw, fwts_smbios_entry *entry, uint8_t *table) { const uint16_t smbios_version = (entry->major_version << 8) + entry->minor_version; uint8_t *entry_data = table; uint16_t table_length; uint16_t struct_count; int i = 0; table_length = entry->struct_table_length; struct_count = entry->number_smbios_structures; while ((i < struct_count) && (entry_data <= (table + table_length - 4))) { uint32_t addr = entry->struct_table_address + (entry_data - table); fwts_dmi_header hdr; uint8_t *next_entry; hdr.type = entry_data[0]; hdr.length = entry_data[1]; hdr.handle = GET_UINT16(entry_data + 2); hdr.data = entry_data; /* Sanity check */ if (hdr.length < 4) { fwts_failed(fw, LOG_LEVEL_HIGH, DMI_INVALID_ENTRY_LENGTH, "Invalid header length of entry #%d, " "length was 0x%2.2" PRIx8 ".", i, hdr.length); fwts_advice(fw, "DMI entry header lengths must be 4 or more bytes long " "so this error indicates that the DMI table is unreliable " "and DMI table checking has been aborted at entry #%d.", i); break; } /* Real Physical Address */ next_entry = entry_data + hdr.length; /* Look for structure terminator, ends in two zero bytes */ while (((next_entry - table + 1) < table_length) && ((next_entry[0] != 0) || (next_entry[1] != 0))) { next_entry++; } /* Skip over terminating two zero bytes, see section 6.1 of spec */ next_entry += 2; if ((next_entry - table) <= table_length) dmicheck_entry(fw, addr, &hdr, smbios_version); i++; entry_data = next_entry; } if (table_length != (entry_data - table)) fwts_failed(fw, LOG_LEVEL_MEDIUM, DMI_BAD_TABLE_LENGTH, "DMI table length was %" PRId16 " bytes (as specified by " "the SMBIOS header) but the DMI entries used %td bytes.", table_length, entry_data - table); if (struct_count != i) fwts_failed(fw, LOG_LEVEL_MEDIUM, DMI_STRUCT_COUNT, "DMI table was DMI %d entries in size (as specified by " "the SMBIOS header) but only %d DMI entries were found.", struct_count, i); } /* * ARM SBBR SMBIOS Structure Test */ #define RECOMMENDED_STRUCTURE_DEFAULT_MSG "This structure is recommended." /* Test Entry Structure */ typedef struct { const char *name; const uint8_t type; const uint8_t mandatory; const char *advice; uint8_t found; } sbbr_test_entry; /* Test Definition Array */ static sbbr_test_entry sbbr_test[] = { { "BIOS Information", 0, 1, 0, 0 }, { "System Information", 1, 1, 0, 0 }, { "Baseboard Information", 2, 0, RECOMMENDED_STRUCTURE_DEFAULT_MSG, 0 }, { "System Enclosure or Chassis", 3, 1, 0, 0 }, { "Processor Information", 4, 1, 0, 0 }, { "Cache Information", 7, 1, 0, 0 }, { "Port Connector Information", 8, 0, "Recommended for platforms with physical ports.", 0 }, { "System Slots", 9, 0, "Required for platforms with expansion slots.", 0 }, { "OEM Strings", 11, 0, RECOMMENDED_STRUCTURE_DEFAULT_MSG, 0 }, { "BIOS Language Information", 13, 0, RECOMMENDED_STRUCTURE_DEFAULT_MSG, 0 }, { "System Event Log", 15, 0, RECOMMENDED_STRUCTURE_DEFAULT_MSG, 0 }, { "Physical Memory Array", 16, 1, 0, 0 }, { "Memory Device", 17, 1, 0, 0 }, { "Memory Array Mapped Address", 19, 1, 0, 0 }, { "System Boot Information", 32, 1, 0, 0 }, { "IPMI Device Information", 38, 0, "Required for platforms with IPMI BMC Interface.", 0 }, { "Onboard Devices Extended Information", 41, 0, RECOMMENDED_STRUCTURE_DEFAULT_MSG, 0 }, { "Redfish Host Interface", 42, 0, "Required for platforms supporting Redfish Host Interface.", 0 }, { 0, 0, 0, 0, 0 } }; static void sbbr_test_entry_check(fwts_dmi_header *hdr) { uint32_t i; for (i = 0; sbbr_test[i].name != NULL; i++) { if (hdr->type == sbbr_test[i].type) { sbbr_test[i].found = 1; break; } } } static void dmi_scan_smbios30_table(fwts_framework *fw, fwts_smbios30_entry *entry, uint8_t *table) { const uint16_t smbios_version = (entry->major_version << 8) + entry->minor_version; uint8_t *entry_data = table; uint16_t table_max_length; int i = 0; table_max_length = entry->struct_table_max_size; for (i = 0; entry_data <= (table + table_max_length - 4); i++) { uint64_t addr = entry->struct_table_address + (entry_data - table); fwts_dmi_header hdr; uint8_t *next_entry; hdr.type = entry_data[0]; hdr.length = entry_data[1]; hdr.handle = GET_UINT16(entry_data + 2); hdr.data = entry_data; /* We found DMI end of table */ if (hdr.type == SMBIOS_END_OF_TABLE) break; /* Sanity check */ if (hdr.length < 4) { fwts_failed(fw, LOG_LEVEL_HIGH, DMI_INVALID_ENTRY_LENGTH, "Invalid header length of entry #%d, " "length was 0x%2.2" PRIx8 ".", i, hdr.length); fwts_advice(fw, "DMI entry header lengths must be 4 or more bytes long " "so this error indicates that the DMI table is unreliable " "and DMI table checking has been aborted at entry #%d.", i); break; } /* Real Physical Address */ next_entry = entry_data + hdr.length; /* Look for structure terminator, ends in two zero bytes */ while (((next_entry - table + 1) < table_max_length) && ((next_entry[0] != 0) || (next_entry[1] != 0))) { next_entry++; } /* Skip over terminating two zero bytes, see section 6.1 of spec */ next_entry += 2; if ((next_entry - table) <= table_max_length) { dmicheck_entry(fw, addr, &hdr, smbios_version); if (fw->flags & FWTS_FLAG_SBBR) sbbr_test_entry_check(&hdr); } else { fwts_failed(fw, LOG_LEVEL_HIGH, DMI_BAD_TABLE_LENGTH, "DMI table maximum size was %" PRId32 " bytes (as specified by " "the SMBIOS 3.0 header) but the DMI entries over the maximum " "length without finding the End-of-Table(Type 127).", table_max_length); break; } entry_data = next_entry; } } static int dmicheck_test2(fwts_framework *fw) { void *addr; fwts_smbios_entry entry; fwts_smbios_type type; uint16_t version = 0; uint8_t *table; if (fw->flags & FWTS_FLAG_SBBR) return FWTS_SKIP; if (!smbios_found) { fwts_skipped(fw, "Cannot find SMBIOS or DMI table entry, skip the test."); return FWTS_SKIP; } addr = fwts_smbios_find_entry(fw, &entry, &type, &version); if (addr == NULL) { fwts_failed(fw, LOG_LEVEL_HIGH, DMI_NO_TABLE_HEADER, "Cannot find SMBIOS or DMI table entry."); return FWTS_ERROR; } if (type == FWTS_SMBIOS_UNKNOWN) { fwts_failed(fw, LOG_LEVEL_HIGH, DMI_NO_TABLE, "Cannot find a valid SMBIOS or DMI table."); return FWTS_ERROR; } /* Fix broken version numbers found in the wild */ version = dmi_remap_version(fw, version); if (dmi_version_check(fw, version) != FWTS_OK) return FWTS_SKIP; table = dmi_table_smbios(fw, &entry); if (table == NULL) return FWTS_ERROR; dmi_scan_tables(fw, &entry, table); dmi_table_free(table); return FWTS_OK; } static int dmicheck_test3(fwts_framework *fw) { void *addr; fwts_smbios30_entry entry30; uint16_t version = 0; uint8_t *table; if (!smbios30_found) { fwts_skipped(fw, "Cannot find SMBIOS30 table entry, skip the test."); return FWTS_SKIP; } addr = fwts_smbios30_find_entry(fw, &entry30, &version); if (addr == NULL) { fwts_failed(fw, LOG_LEVEL_HIGH, DMI_NO_TABLE_HEADER, "Cannot find SMBIOS 3.0 table entry."); return FWTS_ERROR; } if (dmi_version_check(fw, version) != FWTS_OK) return FWTS_SKIP; table = dmi_table_smbios30(fw, &entry30); if (table == NULL) return FWTS_ERROR; dmi_scan_smbios30_table(fw, &entry30, table); dmi_table_free(table); return FWTS_OK; } /* SBBR SMBIOS structure test function. */ static int dmicheck_test4(fwts_framework *fw) { uint32_t i; if (!(fw->flags & FWTS_FLAG_SBBR)) return FWTS_SKIP; if (!smbios30_found) { fwts_failed(fw, LOG_LEVEL_HIGH, "SbbrSmbiosNoStruct", "Cannot find SMBIOS30 table entry."); return FWTS_ERROR; } /* Check whether all SMBIOS structures needed by SBBR have been found. */ for (i = 0; sbbr_test[i].name != NULL; i++) { if (!sbbr_test[i].found) { if (sbbr_test[i].mandatory) fwts_failed(fw, LOG_LEVEL_HIGH, "SbbrSmbiosNoStruct", "Cannot find SMBIOS " "structure: %s (Type %d).", sbbr_test[i].name, sbbr_test[i].type); else fwts_skipped(fw, "SMBIOS structure %s (Type %d) not found. %s", sbbr_test[i].name, sbbr_test[i].type, sbbr_test[i].advice?sbbr_test[i].advice:""); } else fwts_passed(fw, "SMBIOS structure %s (Type %d) found.", sbbr_test[i].name, sbbr_test[i].type); } return FWTS_OK; } static fwts_framework_minor_test dmicheck_tests[] = { { dmicheck_test1, "Find and test SMBIOS Table Entry Points." }, { dmicheck_test2, "Test DMI/SMBIOS tables for errors." }, { dmicheck_test3, "Test DMI/SMBIOS3 tables for errors." }, { dmicheck_test4, "Test ARM SBBR SMBIOS structure requirements."}, { NULL, NULL } }; static fwts_framework_ops dmicheck_ops = { .description = "DMI/SMBIOS table tests.", .minor_tests = dmicheck_tests }; FWTS_REGISTER("dmicheck", &dmicheck_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV | FWTS_FLAG_SBBR) #endif src/example/000077500000000000000000000000001465205512700133075ustar00rootroot00000000000000src/example/blank/000077500000000000000000000000001465205512700143765ustar00rootroot00000000000000src/example/blank/blank.c000066400000000000000000000050561465205512700156370ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" static int example_init(fwts_framework *fw) { /* Put pre-test initialistion code here */ /* Returns: * FWTS_ERROR - failed, abort test * FWTS_OK - success, do tests */ return FWTS_OK; } static int example_deinit(fwts_framework *fw) { /* Put post-test de-initialistion code here */ /* Returns: * FWTS_ERROR - failed, abort test * FWTS_OK - success, do tests */ return FWTS_OK; } static int example_test1(fwts_framework *fw) { /* Do your test */ /* Log success or failure */ fwts_passed(fw, "Test passed, hurrah!"); /* fwts_failed(fw, LOG_LEVEL_HIGH, "ExampleUniqueTestMessageIdentifier", "Test failed!"); */ /* Returns: * FWTS_ERROR - failed, abort test * FWTS_OK - success, do test */ return FWTS_OK; } static int example_test2(fwts_framework *fw) { /* Do your test */ /* Log success or failure */ fwts_passed(fw, "Test passed, hurrah!"); /* fwts_failed(fw, LOG_LEVEL_HIGH, "ExampleUniqueTestMessageIdentifier", "Test failed!"); */ /* Returns: * FWTS_ERROR - failed, abort test * FWTS_OK - success, do test */ return FWTS_OK; } /* * Null terminated array of tests to run, in this * scenario, we just have one test. */ static fwts_framework_minor_test example_tests[] = { { example_test1, "Example sub test1 name." }, { example_test2, "Example sub test2 name." }, { NULL, NULL } }; static fwts_framework_ops example_ops = { .description = "Example name.", /* Simple short description of test */ .init = example_init, /* Can be NULL and/or omitted if not required */ .deinit = example_deinit, /* Can be NULL and/or omitted if not required */ .minor_tests = example_tests /* Array of tests to run */ }; /* * See fwts_framework.h for flags, */ FWTS_REGISTER("example", &example_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH); src/hotkey/000077500000000000000000000000001465205512700131575ustar00rootroot00000000000000src/hotkey/hotkey/000077500000000000000000000000001465205512700144625ustar00rootroot00000000000000src/hotkey/hotkey/hotkey.c000066400000000000000000000143711465205512700161370ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #include #define AT_KEYBOARD "AT Translated Set 2 keyboard" static fwts_list *hotkeys_list; static char *hotkey_dev; static char *hotkey_keymap; static int hotkey_check_key( fwts_framework *fw, const struct input_event *ev, const fwts_list *hotkeys) { static int scancode = 0; if ((ev->code == MSC_SCAN) && (ev->type == EV_MSC)) scancode = ev->value; if ((ev->type == EV_KEY) && (ev->value != 0)) { fwts_list_link *item; int found = 0; fwts_list_foreach(item, hotkeys) { const fwts_keycode *keycode = fwts_list_data(const fwts_keycode *, item); if (keycode->scancode == scancode) { fwts_printf(fw, "Scancode: 0x%2.2x Eventcode 0x%3.3x (%s) '%s'\n", scancode, ev->code, keycode->keyname, keycode->keytext); found = 1; break; } } if (!found) fwts_printf(fw, "Scancode: 0x%2.2x Eventcode 0x%3.3x\n", scancode, ev->code); } return FWTS_OK; } static int hotkey_test( fwts_framework *fw, const char *dev, const fwts_list *hotkeys) { struct input_event ev; char path[PATH_MAX]; int fd; snprintf(path, sizeof(path), "/dev/%s", dev); if ((fd = open(path, O_RDWR)) < 0) { fwts_log_error(fw, "Cannot open device %s.", path); return FWTS_ERROR; } fwts_printf(fw, "Now press all the hotkeys to see if they can be identified.\n"); fwts_printf(fw, "Press to finish.\n"); if (ioctl(fd, EVIOCGRAB, (void*)1)) { /* Get focus */ fwts_log_error(fw, "Cannot grab device %s.", path); (void)close(fd); return FWTS_ERROR; } for (;;) { const ssize_t ret = read(fd, &ev, sizeof(ev)); if (ret < (ssize_t)sizeof(ev)) break; if ((ev.type == EV_KEY) && (ev.code == KEY_ESC) && (ev.value == 0)) { break; } else { hotkey_check_key(fw, &ev, hotkeys); } } if (ioctl(fd, EVIOCGRAB, (void*)0)) { /* Release */ fwts_log_error(fw, "Cannot un-grab device %s.", path); (void)close(fd); return FWTS_ERROR; } (void)close(fd); return FWTS_OK; } static char *hotkey_device(const char *path) { DIR *scan; struct dirent *scan_entry; char *dev = NULL; if ((scan = opendir(path)) == NULL) return NULL; while ((scan_entry = readdir(scan)) != NULL) { if (strncmp("event", scan_entry->d_name, 5) == 0) { char filename[PATH_MAX]; snprintf(filename, sizeof(filename), "input/%s", scan_entry->d_name); dev = strdup(filename); break; } } (void)closedir(scan); return dev; } static char *hotkey_find_keyboard(const char *path) { DIR *dir; struct dirent *entry; struct stat statbuf; char filename[PATH_MAX]; char *dev = NULL; char *data; if ((dir = opendir(path)) == NULL) return NULL; while ((entry = readdir(dir)) != NULL) { if (strlen(entry->d_name) > 3) { snprintf(filename, sizeof(filename), "%s/%s", path, entry->d_name); if (lstat(filename, &statbuf) == 0) { if (S_ISDIR(statbuf.st_mode)) { if (!S_ISLNK(statbuf.st_mode)) if ((dev = hotkey_find_keyboard(filename)) != NULL) break; } else { if ((data = fwts_get(filename)) != NULL) { if (strncmp(data, AT_KEYBOARD, sizeof(AT_KEYBOARD)-1) == 0) { dev = hotkey_device(path); free(data); break; } free(data); } } } } } (void)closedir(dir); return dev; } static char *hotkey_find_keymap(const char *device) { fwts_list *output; fwts_list_link *item; char buffer[1024]; char *keymap = NULL; int status; snprintf(buffer, sizeof(buffer), "udevadm test /class/%s 2>&1", device); if (fwts_pipe_exec(buffer, &output, &status) != FWTS_OK) return NULL; snprintf(buffer, sizeof(buffer), "keymap %s", device); fwts_list_foreach(item, output) { const char *text = (const char *)fwts_text_list_text(item); if ((text = strstr(text, buffer)) != NULL) { char *ptr; text += strlen(buffer) + 1; if ((ptr = strstr(text, "'")) != NULL) *ptr = '\0'; keymap = strdup(text); break; } } fwts_list_free(output, free); return keymap; } static int hotkey_init(fwts_framework *fw) { if ((hotkey_dev = hotkey_find_keyboard("/sys/devices/platform")) == NULL) { fwts_log_error(fw, "Cannot find keyboard for this machine."); return FWTS_ERROR; } if ((hotkey_keymap = hotkey_find_keymap(hotkey_dev)) == NULL) { fwts_log_error(fw, "Cannot determine keymap for this machine."); return FWTS_ERROR; } if ((hotkeys_list = fwts_keymap_load(hotkey_keymap)) == NULL) { fwts_log_error(fw, "Cannot load keymap for this machine."); return FWTS_ERROR; } return FWTS_OK; } static int hotkey_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_keymap_free(hotkeys_list); free(hotkey_dev); free(hotkey_keymap); return FWTS_OK; } static int hotkey_test1(fwts_framework *fw) { fwts_log_info(fw, "This interactive test looks up key presses in the " "keymap and returns any known keymap names for the " "keys."); fwts_log_nl(fw); fwts_log_info(fw, "Using %s keymap and %s input device.", hotkey_keymap, hotkey_dev); hotkey_test(fw, hotkey_dev, hotkeys_list); fwts_infoonly(fw); return FWTS_OK; } static fwts_framework_minor_test hotkey_tests[] = { { hotkey_test1, "Hotkey keypress checks." }, { NULL, NULL } }; static fwts_framework_ops hotkey_ops = { .description = "Hotkey scan code tests.", .init = hotkey_init, .deinit = hotkey_deinit, .minor_tests = hotkey_tests }; FWTS_REGISTER("hotkey", &hotkey_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_INTERACTIVE | FWTS_FLAG_ROOT_PRIV); #endif src/ipmi/000077500000000000000000000000001465205512700126125ustar00rootroot00000000000000src/ipmi/bmc/000077500000000000000000000000001465205512700133535ustar00rootroot00000000000000src/ipmi/bmc/bmc_info.c000066400000000000000000000040171465205512700152750ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include "fwts.h" static int fwts_bmc_info_check( fwts_framework *fw) { struct fwts_ipmi_rsp fwts_bmc_info; fwts_progress(fw, 50); if ((fwts_ipmi_base_query(&fwts_bmc_info))) { return FWTS_ERROR; } fwts_log_info(fw, "IPMI Version is %x.%x \n", IPMI_DEV_IPMI_VERSION_MAJOR(fwts_bmc_info.ipmi_version), IPMI_DEV_IPMI_VERSION_MINOR(fwts_bmc_info.ipmi_version)); fwts_progress(fw, 100); return FWTS_OK; } static int bmc_info_test1(fwts_framework *fw) { if (!fwts_ipmi_present(R_OK | W_OK)) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "BMC Info", "Cannot read and write to the IPMI device interface," " check your user privileges."); return FWTS_ERROR; } if (fwts_bmc_info_check(fw)) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "BMC Info", "Internal processing errors."); return FWTS_ERROR; } fwts_passed(fw, "BMC info passed."); return FWTS_OK; } static fwts_framework_minor_test bmc_info_tests[] = { { bmc_info_test1, "BMC Info" }, { NULL, NULL } }; static fwts_framework_ops bmc_info_ops = { .description = "BMC Info", .minor_tests = bmc_info_tests }; FWTS_REGISTER_FEATURES("bmc_info", &bmc_info_ops, FWTS_TEST_EARLY, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV, FWTS_FW_FEATURE_IPMI) src/kernel/000077500000000000000000000000001465205512700131345ustar00rootroot00000000000000src/kernel/klog/000077500000000000000000000000001465205512700140705ustar00rootroot00000000000000src/kernel/klog/klog.c000066400000000000000000000041711465205512700151730ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #include #include #include #include static fwts_list *klog; static int klog_init(fwts_framework *fw) { if (fw->klog) klog = fwts_file_open_and_read(fw->klog); else klog = fwts_klog_read(); if (klog == NULL) { fwts_log_error(fw, "Cannot read kernel log."); return FWTS_ERROR; } return FWTS_OK; } static int klog_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_klog_free(klog); return FWTS_OK; } static void klog_progress(fwts_framework *fw, int progress) { fwts_progress(fw, progress); } static int klog_test1(fwts_framework *fw) { int errors = 0; if (fwts_klog_firmware_check(fw, klog_progress, klog, &errors)) { fwts_log_error(fw, "Error parsing kernel log."); return FWTS_ERROR; } if (errors > 0) /* Checks will log errors as failures automatically */ fwts_log_info(fw, "Found %d unique errors in kernel log.", errors); else fwts_passed(fw, "Found no errors in kernel log."); return FWTS_OK; } static fwts_framework_minor_test klog_tests[] = { { klog_test1, "Kernel log error check." }, { NULL, NULL } }; static fwts_framework_ops klog_ops = { .description = "Scan kernel log for errors and warnings.", .init = klog_init, .deinit = klog_deinit, .minor_tests = klog_tests }; FWTS_REGISTER("klog", &klog_ops, FWTS_TEST_EARLY, FWTS_FLAG_BATCH) src/kernel/olog/000077500000000000000000000000001465205512700140745ustar00rootroot00000000000000src/kernel/olog/olog.c000066400000000000000000000052151465205512700152030ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #include #include #include #include static fwts_list *olog; static int olog_init(fwts_framework *fw) { if (fw->olog) { olog = fwts_file_open_and_read(fw->olog); if (olog == NULL) { fwts_log_error(fw, "OLOG -o file %s may not exist, please check that the file exits and is good.", fw->olog); return FWTS_ERROR; } } else { olog = fwts_olog_read(fw); if (olog == NULL) { fwts_log_error(fw, "OLOG without any parameters on the platform you are running does nothing, please specify -o for custom log analysis."); fwts_log_error(fw, "PPC supports dump and analysis of the default firmware logs."); return FWTS_SKIP; } } return FWTS_OK; } static int olog_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_klog_free(olog); return FWTS_OK; } static void olog_progress(fwts_framework *fw, int progress) { fwts_progress(fw, progress); } static int olog_test1(fwts_framework *fw) { int errors = 0; if (fwts_olog_firmware_check(fw, olog_progress, olog, &errors)) { fwts_failed(fw, LOG_LEVEL_LOW, "olog_firmware_check", "Problem in the OLOG processing, see earlier in" " this log for details on the problem."); return FWTS_ERROR; } if (errors > 0) /* Checks will log errors as failures automatically */ fwts_log_info(fw, "OLOG scan and analysis found %d unique issue(s).", errors); else fwts_passed(fw, "OLOG scan and analysis passed."); return FWTS_OK; } static fwts_framework_minor_test olog_tests[] = { { olog_test1, "OLOG scan and analysis checks results." }, { NULL, NULL } }; static fwts_framework_ops olog_ops = { .description = "Run OLOG scan and analysis checks.", .init = olog_init, .deinit = olog_deinit, .minor_tests = olog_tests }; FWTS_REGISTER("olog", &olog_ops, FWTS_TEST_EARLY, FWTS_FLAG_BATCH) src/kernel/oops/000077500000000000000000000000001465205512700141145ustar00rootroot00000000000000src/kernel/oops/oops.c000066400000000000000000000043031465205512700152400ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #include #include #include #include static fwts_list *klog; static int oops_init(fwts_framework *fw) { if (fw->klog) klog = fwts_file_open_and_read(fw->klog); else klog = fwts_klog_read(); if (klog == NULL) { fwts_log_error(fw, "Cannot read kernel log."); return FWTS_ERROR; } return FWTS_OK; } static int oops_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_klog_free(klog); return FWTS_OK; } static int oops_test1(fwts_framework *fw) { int oopses = 0; int warn_ons = 0; if (fwts_oops_check(fw, klog, &oopses, &warn_ons) != FWTS_OK) { fwts_log_error(fw, "Error parsing kernel log."); return FWTS_ERROR; } if (oopses > 0) fwts_failed(fw, LOG_LEVEL_CRITICAL, "KernelOops", "Found %d oopses in kernel log.", oopses); else fwts_passed(fw, "Found no oopses in kernel log."); if (warn_ons > 0) fwts_failed(fw, LOG_LEVEL_HIGH, "KernelWarnOns", "Found %d WARN_ON warnings in kernel log.", warn_ons); else fwts_passed(fw, "Found no WARN_ON warnings in kernel log."); return FWTS_OK; } static fwts_framework_minor_test oops_tests[] = { { oops_test1, "Kernel log oops check." }, { NULL, NULL } }; static fwts_framework_ops oops_ops = { .description = "Scan kernel log for Oopses.", .init = oops_init, .deinit = oops_deinit, .minor_tests = oops_tests }; FWTS_REGISTER("oops", &oops_ops, FWTS_TEST_EARLY, FWTS_FLAG_BATCH) src/kernel/version/000077500000000000000000000000001465205512700146215ustar00rootroot00000000000000src/kernel/version/version.c000066400000000000000000000060571465205512700164620ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include "fwts.h" static int version_test1(fwts_framework *fw) { char *str; fwts_release *release; release = fwts_release_get(); if (release) { bool not_ubuntu = strcmp(release->distributor, "Ubuntu"); fwts_release_free(release); /* Following is Ubuntu specific, so don't fail */ if (not_ubuntu) { fwts_skipped(fw, "Information not available with this kernel."); return FWTS_OK; } } if ((str = fwts_get("/proc/version_signature")) == NULL) fwts_skipped(fw, "Cannot get version signature info from " "/proc/version_signature"); else { fwts_chop_newline(str); fwts_log_info(fw, "Signature: %s", str); free(str); } fwts_infoonly(fw); return FWTS_OK; } static int version_test2(fwts_framework *fw) { char *str; if ((str = fwts_get("/proc/version")) == NULL) fwts_log_info(fw, "Cannot get version info from /proc/version"); else { fwts_chop_newline(str); fwts_log_info(fw, "Kernel Version: %s", str); free(str); } fwts_infoonly(fw); return FWTS_OK; } static int version_test3(fwts_framework *fw) { char *str; if ((str = fwts_get("/proc/cmdline")) == NULL) fwts_log_info(fw, "Cannot get version info from /proc/cmdline"); else { fwts_chop_newline(str); fwts_log_info(fw, "Kernel boot command line: %s", str); free(str); } fwts_infoonly(fw); return FWTS_OK; } #if defined(FWTS_HAS_ACPI) static int version_test4(fwts_framework *fw) { char *str; if ((str = fwts_get("/sys/module/acpi/parameters/acpica_version")) == NULL) fwts_log_info(fw, "Cannot get ACPI version info from " "/sys/module/acpi/parameters/acpica_version " "or /proc/acpi/info, system does not have ACPI."); else { fwts_chop_newline(str); fwts_log_info(fw, "ACPICA Version: %s", str); free(str); } fwts_infoonly(fw); return FWTS_OK; } #endif static fwts_framework_minor_test version_tests[] = { { version_test1, "Gather kernel signature." }, { version_test2, "Gather kernel system information." }, { version_test3, "Gather kernel boot command line." }, #if defined(FWTS_HAS_ACPI) { version_test4, "Gather ACPI driver version." }, #endif { NULL, NULL }, }; static fwts_framework_ops version_ops = { .description = "Gather kernel system information.", .minor_tests = version_tests }; FWTS_REGISTER("version", &version_ops, FWTS_TEST_FIRST, FWTS_FLAG_BATCH) src/lib/000077500000000000000000000000001465205512700124225ustar00rootroot00000000000000src/lib/Makefile.am000066400000000000000000000014371465205512700144630ustar00rootroot00000000000000# # Copyright (C) 2010-2024 Canonical, Ltd. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # SUBDIRS = src -include $(top_srcdir)/git.mk src/lib/include/000077500000000000000000000000001465205512700140455ustar00rootroot00000000000000src/lib/include/fwts.h000066400000000000000000000143431465205512700152060ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_H__ #define __FWTS_H__ #include "config.h" /* * Helper macros, minimum, maximum and array size */ #define FWTS_MIN(a, b) ((a) < (b) ? (a) : (b)) #define FWTS_MAX(a, b) ((a) > (b) ? (a) : (b)) #define FWTS_ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) /* * convert version to a large integer for easier comparison */ #define _VER_(major, minor, patchlevel) \ ((major * 10000) + (minor * 100) + patchlevel) /* * NEED_GLIBC is true if GLIBC version is greater than version needed */ #if defined(__GLIBC__) && defined(__GLIBC_MINOR__) #define NEED_GLIBC(major, minor, patchlevel) \ _VER_(major, minor, patchlevel) <= _VER_(__GLIBC__, __GLIBC_MINOR__, 0) #else #define NEED_GLIBC(major, minor, patchlevel) (0) #endif #if defined(__GNUC__) && defined(__GNUC_MINOR__) #if defined(__GNUC_PATCHLEVEL__) #define NEED_GNUC(major, minor, patchlevel) \ _VER_(major, minor, patchlevel) <= _VER_(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) #else #define NEED_GNUC(major, minor, patchlevel) \ _VER_(major, minor, patchlevel) <= _VER_(__GNUC__, __GNUC_MINOR__, 0) #endif #else #define NEED_GNUC(major, minor, patchlevel) (0) #endif /* * NEED_CLANG is true if CLANG version is greater than version needed */ #if defined(__clang__) && defined(__clang_major__) && \ defined(__clang_minor__) && defined(__clang_patchlevel__) #define NEED_CLANG(major, minor, patchlevel) \ _VER_(major, minor, patchlevel) <= _VER_(__clang_major__, __clang_minor__, __clang_patchlevel__) #else #define NEED_CLANG(major, minor, patchlevel) (0) #endif /* * Wrappers to pragmas to push/pop warning state and disable struct * packing macro warnings */ #if defined(__clang__) && NEED_CLANG(6, 0, 0) #define PRAGMA_PUSH _Pragma("GCC diagnostic push") #define PRAGMA_POP _Pragma("GCC diagnostic pop") #define PRAGMA_PACK_WARN_OFF \ _Pragma("GCC diagnostic ignored \"-Waddress-of-packed-member\"") #define PRAGMA_NULL_PTR_MATH \ _Pragma("GCC diagnostic ignored \"-Wnull-pointer-arithmetic\"") #elif defined(__GNUC__) && NEED_GNUC(8, 0, 0) #define PRAGMA_PUSH _Pragma("GCC diagnostic push") #define PRAGMA_POP _Pragma("GCC diagnostic pop") #define PRAGMA_PACK_WARN_OFF \ _Pragma("GCC diagnostic ignored \"-Wpacked-not-aligned\"") #define PRAGMA_NULL_PTR_MATH #else #define PRAGMA_PUSH #define PRAGMA_POP #define PRAGMA_PACK_WARN_OFF #define PRAGMA_NULL_PTR_MATH #endif #if defined(__x86_64__) || defined(__x86_64) || defined(__i386__) || defined(__i386) #define FWTS_ARCH_INTEL 1 #define FWTS_HAS_ACPI 1 #define FWTS_HAS_UEFI 1 #define FWTS_USE_DEVMEM 1 #endif #if defined(__aarch64__) #define FWTS_ARCH_AARCH64 1 #define FWTS_HAS_ACPI 1 #define FWTS_HAS_UEFI 1 #define FWTS_USE_DEVMEM 1 #endif #if defined(__s390x__) #define FWTS_ARCH_S390X 1 #define FWTS_USE_DEVMEM 1 #endif #if defined(__PPC64__) #define FWTS_ARCH_PPC 1 #undef FWTS_HAS_ACPI #undef FWTS_HAS_UEFI #define FWTS_USE_DEVMEM 1 #endif #if defined(__riscv) #define FWTS_ARCH_RISCV 1 #define FWTS_HAS_ACPI 1 #define FWTS_HAS_UEFI 1 #define FWTS_USE_DEVMEM 1 #endif /* verision 3-tuple into integer */ #define _VER_(major, minor, patchlevel) \ ((major * 10000) + (minor * 100) + patchlevel) /* check version of GNU GCC */ #if defined(__GNUC__) && defined(__GNUC_MINOR__) #if defined(__GNUC_PATCHLEVEL__) #define NEED_GNUC(major, minor, patchlevel) \ _VER_(major, minor, patchlevel) <= _VER_(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) #else #define NEED_GNUC(major, minor, patchlevel) \ _VER_(major, minor, patchlevel) <= _VER_(__GNUC__, __GNUC_MINOR__, 0) #endif #else #define NEED_GNUC(major, minor, patchlevel) (0) #endif /* -O0 attribute support */ #if defined(__GNUC__) && !defined(__clang__) && NEED_GNUC(4,6,0) #define OPTIMIZE0 __attribute__((optimize("-O0"))) #else #define OPTIMIZE0 #endif #define FWTS_UNUSED(var) (void)var #define FWTS_JSON_DATA_PATH DATAROOTDIR "/fwts" #include #include "fwts_version.h" #include "fwts_backtrace.h" #include "fwts_types.h" #include "fwts_binpaths.h" #include "fwts_framework.h" #include "fwts_log.h" #include "fwts_log_scan.h" #include "fwts_list.h" #include "fwts_text_list.h" #include "fwts_set.h" #include "fwts_get.h" #include "fwts_acpi.h" #include "fwts_acpi_tables.h" #include "fwts_acpid.h" #include "fwts_arch.h" #include "fwts_checkeuid.h" #include "fwts_clog.h" #include "fwts_coreboot.h" #include "fwts_cpu.h" #include "fwts_dump.h" #include "fwts_dump_data.h" #include "fwts_memorymap.h" #include "fwts_fileio.h" #include "fwts_firmware.h" #include "fwts_gpe.h" #include "fwts_iasl.h" #include "fwts_ipmi.h" #include "fwts_klog.h" #include "fwts_kernel.h" #include "fwts_olog.h" #include "fwts_pipeio.h" #include "fwts_stringextras.h" #include "fwts_tty.h" #include "fwts_wakealarm.h" #include "fwts_formatting.h" #include "fwts_summary.h" #include "fwts_mmap.h" #include "fwts_interactive.h" #include "fwts_keymap.h" #include "fwts_cmos.h" #include "fwts_acpica.h" #include "fwts_oops.h" #include "fwts_hwinfo.h" #include "fwts_args.h" #include "fwts_multiproc.h" #include "fwts_ebda.h" #include "fwts_alloc.h" #include "fwts_guid.h" #include "fwts_scan_efi_systab.h" #include "fwts_checksum.h" #include "fwts_smbios.h" #include "fwts_ac_adapter.h" #include "fwts_battery.h" #include "fwts_button.h" #include "fwts_json.h" #include "fwts_ioport.h" #include "fwts_release.h" #include "fwts_pci.h" #include "fwts_safe_mem.h" #include "fwts_devicetree.h" #include "fwts_pm_debug.h" #include "fwts_modprobe.h" #endif src/lib/include/fwts_ac_adapter.h000066400000000000000000000022031465205512700173410ustar00rootroot00000000000000/* * Copyright (C) 2012-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_AC_ADAPTER_H__ #define __FWTS_AC_ADAPTER_H__ #define FWTS_SYS_CLASS_POWER_SUPPLY "/sys/class/power_supply" #define FWTS_PROC_ACPI_AC_ADAPTER "/proc/acpi/ac_adapter" #define FWTS_AC_ADAPTER_ANY (0x0) #define FWTS_AC_ADAPTER_ONLINE (0x1) #define FWTS_AC_ADAPTER_OFFLINE (0x2) int fwts_ac_adapter_get_state(const int state, int *matching, int *not_matching); #endif src/lib/include/fwts_acpi.h000066400000000000000000002256401465205512700162060ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_ACPI_H__ #define __FWTS_ACPI_H__ #include "fwts.h" #define FWTS_ACPI_TABLES_PATH "/sys/firmware/acpi/tables" #define FWTS_FACP_UNSPECIFIED (0x00) #define FWTS_FACP_DESKTOP (0x01) #define FWTS_FACP_MOBILE (0x02) #define FWTS_FACP_WORKSTATION (0x03) #define FWTS_FACP_ENTERPRISE_SERVER (0x04) #define FWTS_FACP_SOHO_SERVER (0x05) #define FWTS_FACP_APPLIANCE_PC (0x06) #define FWTS_FACP_PERFORMANCE_SERVER (0x07) #define FWTS_FACP_TABLET (0x08) #define FWTS_FACP_FLAG_WBINVD (0x00000001) #define FWTS_FACP_FLAG_WBINVD_FLUSH (0x00000002) #define FWTS_FACP_FLAG_PROC_C1 (0x00000004) #define FWTS_FACP_FLAG_P_LVL2_UP (0x00000008) #define FWTS_FACP_FLAG_PWR_BUTTON (0x00000010) #define FWTS_FACP_FLAG_SLP_BUTTON (0x00000020) #define FWTS_FACP_FLAG_FIX_RTC (0x00000040) #define FWTS_FACP_FLAG_RTC_S4 (0x00000080) #define FWTS_FACP_FLAG_TMR_VAL_EXT (0x00000100) #define FWTS_FACP_FLAG_DCK_CAP (0x00000200) #define FWTS_FACP_FLAG_RESET_REG_SUP (0x00000400) #define FWTS_FACP_FLAG_SEALED_CASE (0x00000800) #define FWTS_FACP_FLAG_HEADLESS (0x00001000) #define FWTS_FACP_FLAG_CPU_SW_SLP (0x00002000) #define FWTS_FACP_FLAG_PCI_EXP_WAK (0x00004000) #define FWTS_FACP_FLAG_USE_PLATFORM_CLOCK (0x00008000) #define FWTS_FACP_FLAG_S4_RTC_STS_VALID (0x00010000) #define FWTS_FACP_FLAG_REMOTE_POWER_ON_CAPABLE (0x00020000) #define FWTS_FACP_FLAG_FORCE_APIC_CLUSTER_MODEL (0x00040000) #define FWTS_FACP_FLAG_FORCE_APIC_PHYSICAL_DESTINATION_MODE (0x00080000) #define FWTS_FACP_FLAG_HW_REDUCED_ACPI (0x00100000) #define FWTS_FACP_FLAG_LOW_POWER_S0_IDLE_CAPABLE (0x00200000) #define FWTS_FACP_FLAG_PERSISTENT_CPU_CACHES (0x00c00000) #define FWTS_FACP_FLAG_RESERVED_MASK (0xff000000) #define FWTS_FACP_IAPC_BOOT_ARCH_LEGACY_DEVICES (0x0001) #define FWTS_FACP_IAPC_BOOT_ARCH_8042 (0x0002) #define FWTS_FACP_IAPC_BOOT_ARCH_VGA_NOT_PRESENT (0x0004) #define FWTS_FACP_IAPC_BOOT_ARCH_MSI_NOT_SUPPORTED (0x0008) #define FWTS_FACP_IAPC_BOOT_ARCH_PCIE_ASPM_CONTROLS (0x0010) #define FWTS_FACP_IAPC_BOOT_ARCH_CMOS_RTC_NOT_PRESENT (0x0020) #define FWTS_FACP_IAPC_BOOT_ARCH_RESERVED_MASK (0xffc0) #define FWTS_FACP_ARM_BOOT_ARCH_PSCI_COMPLIANT (0x0001) #define FWTS_FACP_ARM_BOOT_ARCH_PSCI_USE_HVC (0x0002) #define FWTS_FACP_ARM_BOOT_ARCH_RESERVED_MASK (0xfffc) #define FWTS_FACS_FLAG_S4BIOS_F (0x00000001) #define FWTS_FACS_FLAG_64BIT_WAKE_SUPPORTED (0x00000002) #define FWTS_FACS_FLAG_RESERVED (0xfffffffc) #define FWTS_GAS_ADDR_SPACE_ID_SYSTEM_MEMORY (0x00) #define FWTS_GAS_ADDR_SPACE_ID_SYSTEM_IO (0x01) #define FWTS_GAS_ADDR_SPACE_ID_PCI_CONFIG (0x02) #define FWTS_GAS_ADDR_SPACE_ID_EC (0x03) #define FWTS_GAS_ADDR_SPACE_ID_SMBUS (0x04) #define FWTS_GAS_ADDR_SPACE_ID_SYSTEM_CMOS (0x05) #define FWTS_GAS_ADDR_SPACE_ID_PCIBARTARGET (0x06) #define FWTS_GAS_ADDR_SPACE_ID_IPMI (0x07) #define FWTS_GAS_ADDR_SPACE_ID_GPIO (0x08) #define FWTS_GAS_ADDR_SPACE_ID_GSB (0x09) #define FWTS_GAS_ADDR_SPACE_ID_PCC (0x0a) #define FWTS_GAS_ADDR_SPACE_ID_PRM (0x0b) #define FWTS_GAS_ADDR_SPACE_ID_FFH (0x7f) #define FWTS_ACPI_VERSION_NOW (FWTS_ACPI_VERSION_65) #define FWTS_ACPI_VERSION_NEXT (0x660) #define FWTS_ACPI_VERSION_65 (0x650) #define FWTS_ACPI_VERSION_64 (0x640) #define FWTS_ACPI_VERSION_63 (0x630) #define FWTS_ACPI_VERSION_62 (0x620) #define FWTS_ACPI_VERSION_61 (0x610) #define FWTS_ACPI_VERSION_60 (0x600) #define FWTS_ACPI_VERSION_51 (0x510) #define FWTS_ACPI_VERSION_50 (0x500) #define FWTS_ACPI_VERSION_40 (0x400) #define FWTS_ACPI_VERSION_30 (0x300) #define FWTS_ACPI_VERSION_20 (0x200) #define FWTS_ACPI_VERSION_10 (0x100) #include "fwts_types.h" #include "fwts_framework.h" #include "fwts_log.h" const char *fwts_acpi_fadt_preferred_pm_profile(const int profile); #define FWTS_FADT_FLAGS_HW_REDUCED_ACPI (1<<20) /* * ACPI GAS (Generic Address Structure), 5.2.3.1 */ typedef struct { uint8_t address_space_id; uint8_t register_bit_width; uint8_t register_bit_offset; uint8_t access_width; uint64_t address; } __attribute__ ((packed)) fwts_acpi_gas; /* * ACPI Common Table Header */ typedef struct { char signature[4]; uint32_t length; uint8_t revision; uint8_t checksum; char oem_id[6]; char oem_tbl_id[8]; uint32_t oem_revision; char creator_id[4]; uint32_t creator_revision; } __attribute__ ((packed)) fwts_acpi_table_header; /* * ACPI BOOT, * https://msdn.microsoft.com/en-us/windows/hardware/gg463443.aspx */ typedef struct { fwts_acpi_table_header header; uint8_t cmos_index; uint8_t reserved[3]; } __attribute__ ((packed)) fwts_acpi_table_boot; /* * ACPI BERT (Boot Error Source) 18.3.1 */ typedef struct { fwts_acpi_table_header header; uint32_t boot_error_region_length; uint64_t boot_error_region; } __attribute__ ((packed)) fwts_acpi_table_bert; typedef struct { uint32_t block_status; uint32_t raw_data_offset; uint32_t raw_data_length; uint32_t data_length; uint32_t error_severity; uint8_t generic_error_data[0]; } __attribute__ ((packed)) fwts_acpi_table_boot_error_region; /* * ACPI CPEP (Corrected Platform Error Polling Table), 5.2.18 */ typedef struct { uint8_t type; uint8_t length; uint8_t processor_id; uint8_t processor_eid; uint32_t polling_interval; } __attribute__ ((packed)) fwts_acpi_cpep_processor_info; typedef struct { fwts_acpi_table_header header; uint8_t reserved[8]; fwts_acpi_cpep_processor_info cpep_info[0]; } __attribute__ ((packed)) fwts_acpi_table_cpep; /* * ACPI MSCT (Maximum System Characteristics Table), 5.2.19 */ typedef struct { uint8_t revision; uint8_t length; uint32_t range_start; uint32_t range_end; uint32_t processor_capacity; uint64_t memory_capacity; } __attribute__ ((packed)) fwts_acpi_msct_proximity; typedef struct { fwts_acpi_table_header header; uint32_t proximity_offset; uint32_t max_proximity_domains; uint32_t max_clock_domains; uint64_t max_address; fwts_acpi_msct_proximity msct_proximity[0]; } __attribute__ ((packed)) fwts_acpi_table_msct; /* * ACPI ECDT (Embedded Controller Boot Resources Table), 5.2.15 */ typedef struct { fwts_acpi_table_header header; fwts_acpi_gas ec_control; fwts_acpi_gas ec_data; uint32_t uid; uint8_t gpe_bit; uint8_t ec_id[0]; } __attribute__ ((packed)) fwts_acpi_table_ecdt; typedef enum { FWTS_BOOT_REGISTER_PNPOS = 0x01, FWTS_BOOT_REGISTER_BOOTING = 0x02, FWTS_BOOT_REGISTER_DIAG = 0x04, FWTS_BOOT_REGISTER_SUPPRESS_BOOT_DISPLAY = 0x08, FWTS_BOOT_REGISTER_PARITY = 0x80 } fwts_acpi_cmos_boot_register; /* * ACPI FACS (Firmware ACPI Control Structure), 5.2.10 */ typedef struct { char signature[4]; uint32_t length; uint32_t hardware_signature; uint32_t firmware_waking_vector; uint32_t global_lock; uint32_t flags; uint64_t x_firmware_waking_vector; uint8_t version; uint8_t reserved[3]; uint32_t ospm_flags; uint8_t reserved2[24]; } __attribute__ ((packed)) fwts_acpi_table_facs; /* * ACPI RSDP (Root System Description Table), 5.2.5 */ typedef struct { char signature[8]; uint8_t checksum; char oem_id[6]; uint8_t revision; uint32_t rsdt_address; uint32_t length; uint64_t xsdt_address; uint8_t extended_checksum; uint8_t reserved[3]; } __attribute__ ((packed)) fwts_acpi_table_rsdp; /* * ACPI XSDT (Extended System Description Table), 5.2.8 */ typedef struct { fwts_acpi_table_header header; uint64_t entries[0]; } __attribute__ ((packed)) fwts_acpi_table_xsdt; /* * ACPI RSDT (Root System Description Table), 5.2.7 */ typedef struct { fwts_acpi_table_header header; uint32_t entries[0]; } __attribute__ ((packed)) fwts_acpi_table_rsdt; /* * ACPI SBST (Smart Battery Specification Table), 5.2.14 */ typedef struct { fwts_acpi_table_header header; uint32_t warning_energy_level; uint32_t low_energy_level; uint32_t critical_energy_level; } __attribute__ ((packed)) fwts_acpi_table_sbst; /* * ACPI FADT (Fixed ACPI Description Table), 5.2.9 */ typedef struct { fwts_acpi_table_header header; uint32_t firmware_control; uint32_t dsdt; uint8_t reserved; uint8_t preferred_pm_profile; uint16_t sci_int; uint32_t smi_cmd; uint8_t acpi_enable; uint8_t acpi_disable; uint8_t s4bios_req; uint8_t pstate_cnt; uint32_t pm1a_evt_blk; uint32_t pm1b_evt_blk; uint32_t pm1a_cnt_blk; uint32_t pm1b_cnt_blk; uint32_t pm2_cnt_blk; uint32_t pm_tmr_blk; uint32_t gpe0_blk; uint32_t gpe1_blk; uint8_t pm1_evt_len; uint8_t pm1_cnt_len; uint8_t pm2_cnt_len; uint8_t pm_tmr_len; uint8_t gpe0_blk_len; uint8_t gpe1_blk_len; uint8_t gpe1_base; uint8_t cst_cnt; uint16_t p_lvl2_lat; uint16_t p_lvl3_lat; uint16_t flush_size; uint16_t flush_stride; uint8_t duty_offset; uint8_t duty_width; uint8_t day_alrm; uint8_t mon_alrm; uint8_t century; uint16_t iapc_boot_arch; uint8_t reserved1; uint32_t flags; fwts_acpi_gas reset_reg; uint8_t reset_value; uint16_t arm_boot_flags; uint8_t minor_version; uint64_t x_firmware_ctrl; uint64_t x_dsdt; fwts_acpi_gas x_pm1a_evt_blk; fwts_acpi_gas x_pm1b_evt_blk; fwts_acpi_gas x_pm1a_cnt_blk; fwts_acpi_gas x_pm1b_cnt_blk; fwts_acpi_gas x_pm2_cnt_blk; fwts_acpi_gas x_pm_tmr_blk; fwts_acpi_gas x_gpe0_blk; fwts_acpi_gas x_gpe1_blk; fwts_acpi_gas sleep_control_reg; fwts_acpi_gas sleep_status_reg; uint64_t hypervisor_id; } __attribute__ ((packed)) fwts_acpi_table_fadt; /* * ACPI MCFG (PCI Express memory mapped configuration space * base address Description Table) http://pcisig.com */ typedef struct { uint64_t base_address; uint16_t pci_segment_group_number; uint8_t start_bus_number; uint8_t end_bus_number; uint8_t reserved[4]; } __attribute__ ((packed)) fwts_acpi_mcfg_configuration; typedef struct { fwts_acpi_table_header header; uint64_t reserved; fwts_acpi_mcfg_configuration configuration[0]; } __attribute__ ((packed)) fwts_acpi_table_mcfg; /* * ACPI SLIT (System Locality Distance Information Table), 5.2.17 */ typedef struct { fwts_acpi_table_header header; uint64_t num_of_system_localities; /* matrix follows */ } __attribute__ ((packed)) fwts_acpi_table_slit; /* * ACPI SRAT (System Resource Affinity Table), 5.2.16 */ typedef struct { fwts_acpi_table_header header; uint32_t reserved1; uint64_t reserved2; } __attribute__ ((packed)) fwts_acpi_table_srat; typedef struct { uint8_t type; uint8_t length; uint8_t proximity_domain_0; uint8_t apic_id; uint32_t flags; uint8_t local_sapic_eid; uint8_t proximity_domain_1; uint8_t proximity_domain_2; uint8_t proximity_domain_3; uint32_t clock_domain; } __attribute__ ((packed)) fwts_acpi_table_local_apic_sapic_affinity; typedef struct { uint8_t type; uint8_t length; uint32_t proximity_domain; uint16_t reserved1; uint32_t base_addr_lo; uint32_t base_addr_hi; uint32_t length_lo; uint32_t length_hi; uint32_t reserved2; uint32_t flags; uint64_t reserved3; } __attribute__ ((packed)) fwts_acpi_table_memory_affinity; typedef struct { uint8_t type; uint8_t length; uint16_t reserved1; uint32_t proximity_domain; uint32_t x2apic_id; uint32_t flags; uint32_t clock_domain; uint32_t reserved2; } __attribute__ ((packed)) fwts_acpi_table_local_x2apic_affinity; typedef struct { uint8_t type; uint8_t length; uint32_t proximity_domain; uint32_t acpi_processor_uid; uint32_t flags; uint32_t clock_domain; } __attribute__ ((packed)) fwts_acpi_table_gicc_affinity; typedef struct { uint8_t type; uint8_t length; uint32_t proximity_domain; uint16_t reserved; uint32_t its_id; } __attribute__ ((packed)) fwts_acpi_table_its_affinity; typedef struct { uint8_t type; uint8_t length; uint8_t reserved1; uint8_t device_handle_type; uint32_t proximity_domain; uint8_t device_handle[16]; uint32_t flags; uint32_t reserved2; } __attribute__ ((packed)) fwts_acpi_table_initiator_affinity; typedef struct { uint8_t type; uint8_t length; uint8_t reserved1; uint8_t device_handle_type; uint32_t proximity_domain; uint8_t device_handle[16]; uint32_t flags; uint32_t reserved2; } __attribute__ ((packed)) fwts_acpi_table_port_affinity; /* * ACPI HPET (HPET IA-PC High Precision Event Timer Table), * 3.2.4 The ACPI 2.0 HPET Description Table (HPET) * http://www.intel.com/hardwaredesign/hpetspec_1.pdf */ typedef struct { fwts_acpi_table_header header; uint32_t event_timer_block_id; fwts_acpi_gas base_address; uint8_t hpet_number; uint16_t main_counter_minimum; uint8_t page_prot_and_oem_attribute; } __attribute__ ((packed)) fwts_acpi_table_hpet; typedef struct { uint8_t serialization_action; uint8_t instruction; uint8_t flags; uint8_t reserved; fwts_acpi_gas register_region; uint64_t value; uint64_t mask; } __attribute__ ((packed)) fwts_acpi_serialization_instruction_entries; /* * ACPI ERST (Error Record Serialization Table), 18.5 */ typedef struct { fwts_acpi_table_header header; uint32_t serialization_header_size; uint32_t reserved; uint32_t instruction_entry_count; fwts_acpi_serialization_instruction_entries entries[0]; } __attribute__ ((packed)) fwts_acpi_table_erst; /* * ACPI EINJ (Error Injection Table), 18.6 */ typedef struct { fwts_acpi_table_header header; uint32_t header_size; uint8_t flags; uint8_t reserved[3]; uint32_t count; fwts_acpi_serialization_instruction_entries entries[0]; } __attribute__ ((packed)) fwts_acpi_table_einj; /* * ACPI MADT (Multiple APIC Description Table), 5.2.12 */ typedef struct { uint8_t type; uint8_t length; } __attribute__ ((packed)) fwts_acpi_madt_sub_table_header; typedef struct { fwts_acpi_table_header header; uint32_t lapic_address; uint32_t flags; } __attribute__ ((packed)) fwts_acpi_table_madt; typedef enum { FWTS_MADT_LOCAL_APIC = 0, FWTS_MADT_IO_APIC, FWTS_MADT_INTERRUPT_OVERRIDE, FWTS_MADT_NMI_SOURCE, FWTS_MADT_LOCAL_APIC_NMI, FWTS_MADT_LOCAL_APIC_OVERRIDE, FWTS_MADT_IO_SAPIC, FWTS_MADT_LOCAL_SAPIC, FWTS_MADT_INTERRUPT_SOURCE, FWTS_MADT_LOCAL_X2APIC, FWTS_MADT_LOCAL_X2APIC_NMI, FWTS_MADT_GIC_C_CPU_INTERFACE, FWTS_MADT_GIC_D_GOC_DISTRIBUTOR, FWTS_MADT_GIC_V2M_MSI_FRAME, FWTS_MADT_GIC_R_REDISTRIBUTOR, FWTS_MADT_GIC_ITS, FWTS_MADT_MP_WAKEUP, FWTS_MADT_CORE_PIC, FWTS_MADT_LIO_PIC, FWTS_MADT_HT_PIC, FWTS_MADT_EIO_PIC, FWTS_MADT_MSI_PIC, FWTS_MADT_BIO_PIC, FWTS_MADT_LPC_PIC, FWTS_MADT_RESERVED, /* does not have defined structure */ FWTS_MADT_OEM /* does not have defined structure */ } fwts_acpi_madt_type; /* Type 0, FWTS_MADT_LOCAL_APIC */ typedef struct { uint8_t acpi_processor_id; uint8_t apic_id; uint32_t flags; } __attribute__ ((packed)) fwts_acpi_madt_processor_local_apic; /* Type 1, FWTS_MADT_IO_APIC */ typedef struct { uint8_t io_apic_id; uint8_t reserved; uint32_t io_apic_phys_address; uint32_t global_irq_base; } __attribute__ ((packed)) fwts_acpi_madt_io_apic; /* Type 2, FWTS_MADT_INTERRUPT_OVERRIDE */ typedef struct { uint8_t bus; uint8_t source; uint32_t gsi; uint16_t flags; } __attribute__ ((packed)) fwts_acpi_madt_interrupt_override; /* Type 3, FWTS_MADT_NMI_SOURCE */ typedef struct { uint16_t flags; uint32_t gsi; } __attribute__ ((packed)) fwts_acpi_madt_nmi; /* Type 4, FWTS_MADT_LOCAL_APIC_NMI */ typedef struct { uint8_t acpi_processor_id; uint16_t flags; uint8_t local_apic_lint; } __attribute__ ((packed)) fwts_acpi_madt_local_apic_nmi; /* Type 5, FWTS_MADT_LOCAL_APIC_OVERRIDE */ typedef struct { uint16_t reserved; uint64_t address; } __attribute__ ((packed)) fwts_acpi_madt_local_apic_addr_override; /* Type 6, FWTS_MADT_IO_SAPIC */ typedef struct { uint8_t io_sapic_id; uint8_t reserved; uint32_t gsi; uint64_t address; } __attribute__ ((packed)) fwts_acpi_madt_io_sapic; /* Type 7, FWTS_MADT_LOCAL_SAPIC */ typedef struct { uint8_t acpi_processor_id; uint8_t local_sapic_id; uint8_t local_sapic_eid; uint8_t reserved[3]; uint32_t flags; uint32_t uid_value; char uid_string[0]; } __attribute__ ((packed)) fwts_acpi_madt_local_sapic; /* Type 8, FWTS_MADT_INTERRUPT_SOURCE */ typedef struct { uint16_t flags; uint8_t type; uint8_t processor_id; uint8_t processor_eid; uint8_t io_sapic_vector; uint32_t gsi; uint32_t pis_flags; } __attribute__ ((packed)) fwts_acpi_madt_platform_int_source; /* Type 9, FWTS_MADT_LOCAL_X2APIC */ typedef struct { uint16_t reserved; uint32_t x2apic_id; uint32_t flags; uint32_t processor_uid; } __attribute__ ((packed)) fwts_acpi_madt_local_x2apic; /* Type 10, FWTS_MADT_LOCAL_X2APIC_NMI */ typedef struct { uint16_t flags; uint32_t processor_uid; uint8_t local_x2apic_lint; uint8_t reserved[3]; } __attribute__ ((packed)) fwts_acpi_madt_local_x2apic_nmi; /* Type 11, FWTS_MADT_GIC_C_CPU_INTERFACE */ /* New in ACPI 5.0, GIC, section 5.2.12.14 */ typedef struct { uint16_t reserved; uint32_t gic_id; uint32_t processor_uid; uint32_t flags; uint32_t parking_protocol_version; uint32_t performance_interrupt_gsiv; uint64_t parked_address; uint64_t physical_base_address; uint64_t gicv; uint64_t gich; uint32_t vgic; uint64_t gicr_base_address; uint64_t mpidr; uint8_t processor_power_efficiency_class; uint8_t reserved2[3]; } __attribute__ ((packed)) fwts_acpi_madt_gic; /* New in ACPI 5.0, GICD, section 5.2.12.15 */ /* Type 12, FWTS_MADT_GIC_D_GOC_DISTRIBUTOR */ typedef struct { uint16_t reserved; uint32_t gic_id; uint64_t physical_base_address; uint32_t system_vector_base; uint8_t gic_version; uint8_t reserved2[3]; } __attribute__ ((packed)) fwts_acpi_madt_gicd; /* New in ACPI 5.1, GIC MSI Frame structure, 5.2.12.16 */ /* Type 13, FWTS_MADT_GIC_V2M_MSI_FRAME */ typedef struct { uint16_t reserved; uint32_t frame_id; uint64_t physical_base_address; uint32_t flags; uint16_t spi_count; uint16_t spi_base; uint32_t spi_flags; /* bit 0 just used at the moment */ } __attribute__ ((packed)) fwts_acpi_madt_gic_msi; /* New in ACPI 5.1, GICR structure, 5.2.12.17 */ /* Type 14, FWTS_MADT_GIC_R_REDISTRIBUTOR */ typedef struct { uint16_t reserved; uint64_t discovery_range_base_address; uint32_t discovery_range_length; } __attribute__ ((packed)) fwts_acpi_madt_gicr; /* New in ACPI 6.0, GIC ITS structure, 5.2.12.18 */ /* Type 15, FWTS_MADT_GIC_ITS */ typedef struct { uint16_t reserved; uint32_t its_id; uint64_t physical_base_address; uint32_t reserved2; } __attribute__ ((packed)) fwts_acpi_madt_gic_its; /* New in ACPI 6.4, Multiprocessor Wakeup structure, 5.2.12.19 */ /* Type 16, FWTS_MADT_MP_WAKEUP */ typedef struct { uint16_t mail_box_version; uint32_t reserved; uint64_t mail_box_address; } __attribute__ ((packed)) fwts_acpi_madt_mp_wakeup; /* New in ACPI 6.5 Core Programmable Interrupt Controller (CORE PIC) Structure, 5.2.12.20 */ /* Type 17, FWTS_MADT_CORE_PIC */ typedef struct { uint8_t version; uint32_t acpi_processor_id; uint32_t physical_processor_id; uint32_t flag; } __attribute__ ((packed)) fwts_acpi_madt_core_pic; /* * ACPI TCPA (Trusted Computing Platform Alliance Capabilities Table) * http://www.kuro5hin.org/story/2002/10/27/16622/530, * http://www.cl.cam.ac.uk/~rja14/tcpa-faq.html */ typedef struct { fwts_acpi_table_header header; uint16_t platform_class; union { struct client_hdr { uint32_t log_zone_length; uint64_t log_zone_addr; } __attribute__ ((packed)) client; struct server_hdr { uint16_t reserved; uint64_t log_zone_length; uint64_t log_zone_addr; uint16_t spec_revision; uint8_t device_flag; uint8_t interrupt_flag; uint8_t gpe; uint8_t reserved2[3]; uint32_t global_sys_interrupt; fwts_acpi_gas base_addr; uint32_t reserved3; fwts_acpi_gas config_addr; uint8_t pci_seg_number; uint8_t pci_bus_number; uint8_t pci_dev_number; uint8_t pci_func_number; } __attribute__ ((packed)) server; }; } __attribute__ ((packed)) fwts_acpi_table_tcpa; /* * ACPI TPM2 (Trusted Platform Module 2 Table) * http://www.trustedcomputinggroup.org/files/static_page_files/648D7D46-1A4B-B294-D088037B8F73DAAF/TCG_ACPIGeneralSpecification_1-10_0-37-Published.pdf */ typedef struct { fwts_acpi_table_header header; uint16_t platform_class; uint16_t reserved; uint64_t address_of_control_area; uint32_t start_method; uint8_t platform_specific_parameters[0]; } __attribute__ ((packed)) fwts_acpi_table_tpm2; /* * ACPI Trusted Computing Group DRTM Architecture Specification * http://www.trustedcomputinggroup.org/wp-content/uploads/TCG_D-RTM_Architecture_v1-0_Published_06172013.pdf */ typedef struct { fwts_acpi_table_header header; uint64_t entry_base_address; uint64_t entry_length; uint32_t entry_address32; uint64_t entry_address64; uint64_t exit_address; uint64_t log_area_address; uint32_t log_area_length; uint64_t arch_dependent_address; uint32_t flags; } __attribute__ ((packed)) fwts_acpi_table_drtm; typedef struct { uint32_t validated_table_count; uint64_t validated_tables[]; } __attribute__ ((packed)) fwts_acpi_table_drtm_vtl; typedef struct { uint8_t size[7]; uint8_t type; uint64_t address; }__attribute__ ((packed)) fwts_acpi_drtm_resource; typedef struct { uint32_t resource_count; fwts_acpi_drtm_resource resources[]; } __attribute__ ((packed)) fwts_acpi_table_drtm_rtl; typedef struct { uint32_t dps_id_length; uint8_t dps_id[16]; } __attribute__ ((packed)) fwts_acpi_table_drtm_dps; /* * ACPI XENV (Xen Environment Table) * http://wiki.xenproject.org/mediawiki/images/c/c4/Xen-environment-table.pdf */ typedef struct { fwts_acpi_table_header header; uint64_t gnt_start; uint64_t gnt_size; uint32_t evtchn_intr; uint8_t evtchn_intr_flags; } __attribute__ ((packed)) fwts_acpi_table_xenv; /* * ACPI ASF! (Alert Standard Format Table) * http://dmtf.org/documents/asf/alert-standard-format-asf-specification-200 */ typedef struct { uint8_t type; uint8_t reserved; uint16_t length; } __attribute__ ((packed)) fwts_acpi_table_asf_header; typedef struct { uint8_t watchdog_reset_value; uint8_t min_sensor_poll_wait_time; uint16_t id; uint32_t iana_id; uint8_t flags; uint8_t reserved1; uint8_t reserved2; uint8_t reserved3; } __attribute__ ((packed)) fwts_acpi_table_asf_info; typedef struct { uint8_t device_addr; uint8_t command; uint8_t data_mask; uint8_t compare_value; uint8_t sensor_type; uint8_t event_type; uint8_t event_offset; uint8_t event_source_type; uint8_t event_severity; uint8_t sensor_number; uint8_t entity; uint8_t entity_instance; } __attribute__ ((packed)) fwts_acpi_table_asf_alrt_element; typedef struct { uint8_t assertion_mask; uint8_t deassertion_mask; uint8_t number_of_alerts; uint8_t array_length; uint8_t device_length[0]; } __attribute__ ((packed)) fwts_acpi_table_asf_alrt; typedef struct { uint8_t control_function; uint8_t control_device_addr; uint8_t control_command; uint8_t control_value; } __attribute__ ((packed)) fwts_acpi_table_asf_rctl_element; typedef struct { uint8_t number_of_controls; uint8_t array_element_length; uint16_t reserved; fwts_acpi_table_asf_rctl_element elements[0]; } __attribute__ ((packed)) fwts_acpi_table_asf_rctl; typedef struct { uint8_t remote_control_capabilities[7]; uint8_t completion_code; uint32_t iana; uint8_t special_command; uint16_t special_command_param; uint8_t boot_options[2]; uint16_t oem_parameters; } __attribute__ ((packed)) fwts_acpi_table_asf_rmcp; typedef struct { uint8_t fixed_smbus_addr; } __attribute__ ((packed)) fwts_acpi_table_asf_addr_element; typedef struct { uint8_t seeprom_addr; uint8_t number_of_devices; uint8_t fwts_acpi_table_asf_addr_element[0]; } __attribute__ ((packed)) fwts_acpi_table_asf_addr; /* * ACPI DMAR (DMA Remapping (VT-d)) * http://download.intel.com/technology/computing/vptech/Intel(r)_VT_for_Direct_IO.pdf */ typedef struct { fwts_acpi_table_header header; uint8_t host_addr_width; uint8_t flags; uint8_t reserved[10]; } __attribute__ ((packed)) fwts_acpi_table_dmar; typedef struct { uint16_t type; uint16_t length; } __attribute__ ((packed)) fwts_acpi_table_dmar_header; /* DMA remapping hardware unit definition structure */ typedef struct { fwts_acpi_table_dmar_header header; uint8_t flags; uint8_t reserved; uint16_t segment_number; uint64_t register_base_addr; uint8_t device_scope[0]; } __attribute__ ((packed)) fwts_acpi_table_dmar_hardware_unit; /* Reserved Memory Definition */ typedef struct { fwts_acpi_table_dmar_header header; uint16_t reserved; uint16_t segment; uint64_t base_address; uint64_t end_address; } __attribute__ ((packed)) fwts_acpi_table_dmar_reserved_memory; /* * ACPI ATSR (Root Port ATS capability reporting structure) */ typedef struct { fwts_acpi_table_dmar_header header; uint8_t flags; uint8_t reserved; uint16_t segment; } __attribute__ ((packed)) fwts_acpi_table_dmar_atsr; /* DMA remapping device scope entries */ typedef struct { uint8_t type; uint8_t length; uint8_t reserved[2]; uint8_t enumeration_id; uint8_t start_bus_number; uint8_t path[0]; } __attribute__ ((packed)) fwts_acpi_table_dmar_device_scope; /* * ACPI DPPT (DMA Protection Policy Table) */ typedef struct { fwts_acpi_table_header header; } __attribute__ ((packed)) fwts_acpi_table_dppt; /* * ACPI SLIC (Microsoft Software Licensing Table) * see "OEM Activation 2.0 for Windows Vista Operating Systems" */ typedef struct { uint32_t type; uint32_t length; } __attribute__ ((packed)) fwts_acpi_table_slic_header; typedef struct { fwts_acpi_table_slic_header header; uint8_t key_type; uint8_t version; uint16_t reserved; uint32_t algorithm; uint8_t magic[4]; uint32_t bit_length; uint32_t exponent; uint8_t modulus[128]; } __attribute__ ((packed)) fwts_acpi_table_slic_key; typedef struct { fwts_acpi_table_slic_header header; uint32_t version; uint8_t oem_id[6]; uint8_t oem_table_id[8]; uint8_t windows_flag[8]; uint32_t slic_version; uint8_t reserved[16]; uint8_t signature[128]; } __attribute__ ((packed)) fwts_acpi_table_slic_marker; typedef struct { fwts_acpi_table_header header; uint8_t uuid[16]; uint16_t dataoffset; uint8_t data[0]; } __attribute__ ((packed)) fwts_acpi_table_uefi; typedef struct { fwts_acpi_table_uefi boot; uint32_t sw_smi_number; uint64_t buf_ptr_addr; } __attribute__ ((packed)) fwts_acpi_table_uefi_smmcomm; /* * ACPI BGRT (Boot Graphics Resource Table), 5.2.22 */ typedef struct { fwts_acpi_table_header header; uint16_t version; uint8_t status; uint8_t image_type; uint64_t image_addr; uint32_t image_offset_x; uint32_t image_offset_y; } __attribute__ ((packed)) fwts_acpi_table_bgrt; /* * ACPI FPDT (Firmware Performance Data Table), 5.2.23 */ typedef struct { uint16_t type; uint8_t length; uint8_t revision; } __attribute__ ((packed)) fwts_acpi_table_fpdt_header; /* * ACPI S3 Performance Table Pointer Record, 5.2.23.4 */ typedef struct { fwts_acpi_table_fpdt_header fpdt; uint32_t reserved; uint64_t s3pt_addr; } __attribute__ ((packed)) fwts_acpi_table_fpdt_s3_perf_ptr; /* * ACPI Firmware Basic Boot Performance Pointer Record, 5.2.23.5 */ typedef struct { fwts_acpi_table_fpdt_header fpdt; uint32_t reserved; uint64_t fbpt_addr; } __attribute__ ((packed)) fwts_acpi_table_fpdt_basic_boot_perf_ptr; /* * ACPI GTDT (Generic Timer Description Table), 5.2.24 */ typedef struct { fwts_acpi_table_header header; uint64_t cnt_control_base_phys_addr; uint32_t reserved; uint32_t secure_EL1_timer_GSIV; uint32_t secure_EL1_timer_flags; uint32_t non_secure_EL1_timer_GSIV; uint32_t non_secure_EL1_timer_flags; uint32_t virtual_timer_GSIV; uint32_t virtual_timer_flags; uint32_t non_secure_EL2_timer_GSIV; uint32_t non_secure_EL2_timer_flags; uint64_t cnt_read_base_phys_addr; uint32_t platform_timer_count; uint32_t platform_timer_offset; } __attribute__ ((packed)) fwts_acpi_table_gtdt; /* * ACPI GTDT Generic Timer Description Table, 5.2.24, table 5-117 */ typedef struct { uint32_t timer_flags; } __attribute__ ((packed)) fwts_acpi_table_gtdt_platform_timer; typedef struct { uint8_t frame_number; /* 0..7 */ uint8_t reserved[3]; /* 0 */ uint64_t cntbase; uint64_t cntel0base; uint32_t phys_timer_gsiv; uint32_t phys_timer_flags; uint32_t virt_timer_gsiv; uint32_t virt_timer_flags; uint32_t common_flags; } __attribute__ ((packed)) fwts_acpi_table_gtdt_block_timer; /* * ACPI GTDT GT Block Structure, 5.2.24.1.1 */ typedef struct { uint8_t type; /* 0x00 */ uint16_t length; /* 20 + n * 40 */ uint8_t reserved; /* 0x00 */ uint64_t physical_address; uint32_t block_timer_count; /* 0..8 */ uint32_t block_timer_offset; fwts_acpi_table_gtdt_block_timer block_timers[0]; } __attribute__ ((packed)) fwts_acpi_table_gtdt_block; /* * ACPI GTDT SBSA Generic Watchdog Structure, 5.2.24.0.1 */ typedef struct { uint8_t type; /* 0x01 */ uint16_t length; /* 28 */ uint8_t reserved; /* 0x00 */ uint64_t refresh_frame_addr; uint64_t watchdog_control_frame_addr; uint32_t watchdog_timer_gsiv; uint32_t watchdog_timer_flags; } __attribute__ ((packed)) fwts_acpi_table_gtdt_watchdog; /* * ACPI RASF (RAS Feature Table), 5.2.20 */ typedef struct { fwts_acpi_table_header header; uint8_t platform_cc_id[12]; } __attribute__ ((packed)) fwts_acpi_table_rasf; /* * ACPI RAS2 (RAS2 Feature Table), 5.2.21 */ typedef struct { uint8_t pcc_id; uint16_t reserved; uint8_t feature_type; uint32_t instance; } __attribute__ ((packed)) fwts_acpi_ras2_pcc_desc; typedef struct { fwts_acpi_table_header header; uint16_t reserved; uint16_t num_pcc_descriptors; fwts_acpi_ras2_pcc_desc pcc_descriptors[0]; } __attribute__ ((packed)) fwts_acpi_table_ras2; /* * ACPI MPST (Memory Power State Table), 5.2.22 */ typedef struct { fwts_acpi_table_header header; uint8_t channel_id; uint8_t reserved[3]; } __attribute__ ((packed)) fwts_acpi_table_mpst; typedef struct { uint8_t value; uint8_t info_index; } __attribute__ ((packed)) fwts_acpi_table_mpst_power_state; typedef struct { uint16_t id; } __attribute__ ((packed)) fwts_acpi_table_mpst_component; typedef struct { uint8_t flags; uint8_t reserved; uint16_t node_id; uint32_t length; uint64_t range_address; uint64_t range_length; uint32_t num_states; uint32_t num_components; } __attribute__ ((packed)) fwts_acpi_table_mpst_power_node; typedef struct { uint16_t count; uint16_t reserved; } __attribute__ ((packed)) fwts_acpi_table_mpst_power_node_list; typedef struct { uint8_t structure_id; uint8_t flags; uint16_t reserved1; uint32_t average_power; uint32_t power_saving; uint64_t exit_latency; uint64_t reserved2; } __attribute__ ((packed)) fwts_acpi_table_mpst_power_char; typedef struct { uint16_t count; uint16_t reserved; } __attribute__ ((packed)) fwts_acpi_table_mpst_power_char_list; /* * ACPI PMTT (Memory Topology Table, 5.2.21.12 */ typedef struct { fwts_acpi_table_header header; uint32_t num_devices; } __attribute__ ((packed)) fwts_acpi_table_pmtt; typedef struct { uint8_t type; uint8_t reserved1; uint16_t length; uint16_t flags; uint16_t reserved2; uint32_t num_devices; } __attribute__ ((packed)) fwts_acpi_table_pmtt_header; typedef enum { FWTS_PMTT_TYPE_SOCKET = 0, FWTS_PMTT_TYPE_CONTROLLER = 1, FWTS_PMTT_TYPE_DIMM = 2, FWTS_PMTT_TYPE_RESERVED = 3, /* 0x03-0xFE are reserved */ FWTS_PMTT_TYPE_VENDOR_SPECIFIC = 0xFF } fwts_acpi_pmtt_type; typedef struct { fwts_acpi_table_pmtt_header header; uint16_t socket_id; uint16_t reserved; } __attribute__ ((packed)) fwts_acpi_table_pmtt_socket; typedef struct { fwts_acpi_table_pmtt_header header; uint16_t memory_controller_id; uint16_t reserved; } __attribute__ ((packed)) fwts_acpi_table_pmtt_controller; typedef struct { fwts_acpi_table_pmtt_header header; uint32_t bios_handle; } __attribute__ ((packed)) fwts_acpi_table_pmtt_physical_component; /* * ACPI NFIT (NVDIMM Firmware Interface), 5.2.25 */ typedef struct { fwts_acpi_table_header header; uint32_t reserved; } __attribute__ ((packed)) fwts_acpi_table_nfit; typedef struct { uint16_t type; uint16_t length; } __attribute__ ((packed)) fwts_acpi_table_nfit_struct_header; typedef enum { FWTS_NFIT_TYPE_SYSTEM_ADDRESS = 0, FWTS_NFIT_TYPE_MEMORY_MAP = 1, FWTS_NFIT_TYPE_INTERLEAVE = 2, FWTS_NFIT_TYPE_SMBIOS = 3, FWTS_NFIT_TYPE_CONTROL_REGION = 4, FWTS_NFIT_TYPE_DATA_REGION = 5, FWTS_NFIT_TYPE_FLUSH_ADDRESS = 6, FWTS_NFIT_TYPE_PLATFORM_CAPABILITY = 7, FWTS_NFIT_TYPE_RESERVED = 8 /* >= 8 are reserved */ } fwts_acpi_nfit_type; #define FWTS_NFIT_NAME_SYSTEM_ADDRESS "SPA Range structure" #define FWTS_NFIT_NAME_MEMORY_MAP "NVDIMM Region Mapping structure" #define FWTS_NFIT_NAME_INTERLEAVE "Interleave structure" #define FWTS_NFIT_NAME_SMBIOS "SMBIOS Management Information structure" #define FWTS_NFIT_NAME_CONTROL_REGION "NVDIMM Control Region structure" #define FWTS_NFIT_NAME_DATA_REGION "NVDIMM Block Data Window Region structure" #define FWTS_NFIT_NAME_FLUSH_ADDRESS "Flush Hint Address structure" #define FWTS_NFIT_NAME_PLATFORM_CAPABILITY "Platform Capabilities structure" #define FWTS_NFIT_MINLEN_SYSTEM_ADDRESS 56 #define FWTS_NFIT_MINLEN_MEMORY_MAP 48 #define FWTS_NFIT_MINLEN_INTERLEAVE 16 #define FWTS_NFIT_MINLEN_SMBIOS 8 #define FWTS_NFIT_MINLEN_CONTROL_REGION 32 #define FWTS_NFIT_MINLEN_DATA_REGION 32 #define FWTS_NFIT_MINLEN_FLUSH_ADDRESS 16 #define FWTS_NFIT_MINLEN_PLATFORM_CAPABILITY 16 typedef struct { fwts_acpi_table_nfit_struct_header header; uint16_t range_index; uint16_t flags; uint32_t reserved; uint32_t proximity_domain; uint8_t range_guid[16]; uint64_t address; uint64_t length; uint64_t memory_mapping; uint64_t spa_location_cookie; } __attribute__ ((packed)) fwts_acpi_table_nfit_system_memory; typedef struct { fwts_acpi_table_nfit_struct_header header; uint32_t device_handle; uint16_t physical_id; uint16_t region_id; uint16_t range_index; uint16_t region_index; uint64_t region_size; uint64_t region_offset; uint64_t address; uint16_t interleave_index; uint16_t interleave_ways; uint16_t flags; uint16_t reserved; } __attribute__ ((packed)) fwts_acpi_table_nfit_memory_map; typedef struct { fwts_acpi_table_nfit_struct_header header; uint16_t interleave_index; uint16_t reserved; uint32_t line_count; uint32_t line_size; uint32_t line_offset[]; } __attribute__ ((packed)) fwts_acpi_table_nfit_interleave; typedef struct { fwts_acpi_table_nfit_struct_header header; uint32_t reserved; uint8_t smbios[]; } __attribute__ ((packed)) fwts_acpi_table_nfit_smbios; typedef struct { fwts_acpi_table_nfit_struct_header header; uint16_t region_index; uint16_t vendor_id; uint16_t device_id; uint16_t revision_id; uint16_t subsystem_vendor_id; uint16_t subsystem_device_id; uint16_t subsystem_revision_id; uint8_t valid_fields; uint8_t manufacturing_location; uint16_t manufacturing_date; uint16_t reserved; uint32_t serial_number; uint16_t interface_code; uint16_t windows_num; uint64_t window_size; uint64_t command_offset; uint64_t command_size; uint64_t status_offset; uint64_t status_size; uint16_t flags; uint8_t reserved1[6]; } __attribute__ ((packed)) fwts_acpi_table_nfit_control_range; typedef struct { fwts_acpi_table_nfit_struct_header header; uint16_t region_index; uint16_t window_num; uint64_t window_offset; uint64_t window_size; uint64_t capacity; uint64_t start_address; } __attribute__ ((packed)) fwts_acpi_table_nfit_data_range; typedef struct { fwts_acpi_table_nfit_struct_header header; uint32_t device_handle; uint16_t hint_count; uint8_t reserved[6]; uint64_t hint_address[]; } __attribute__ ((packed)) fwts_acpi_table_nfit_flush_addr; typedef struct { fwts_acpi_table_nfit_struct_header header; uint8_t highest_valid_cap; uint8_t reserved1[3]; uint32_t cap; uint32_t reserved2; } __attribute__ ((packed)) fwts_acpi_table_nfit_platform_cap; /* * ACPI SDEV (Secure Devices Table), 5.2.26 */ typedef struct { fwts_acpi_table_header header; } __attribute__ ((packed)) fwts_acpi_table_sdev; typedef enum { FWTS_SDEV_TYPE_ACPI_NAMESPACE = 0, FWTS_SDEV_TYPE_PCIE_ENDPOINT = 1, FWTS_SDEV_TYPE_RESERVED = 2, } fwts_acpi_sdev_type; typedef struct { uint8_t type; uint8_t flags; uint16_t length; } __attribute__ ((packed)) fwts_acpi_table_sdev_header; typedef struct { fwts_acpi_table_sdev_header header; uint16_t device_id_offset; uint16_t device_id_length; uint16_t vendor_offset; uint16_t vendor_length; uint16_t secure_access_offset; uint16_t secure_access_length; } fwts_acpi_table_sdev_acpi; typedef struct { fwts_acpi_table_sdev_header header; uint16_t segment; uint16_t start_bus; uint16_t path_offset; uint16_t path_length; uint16_t vendor_offset; uint16_t vendor_length; } fwts_acpi_table_sdev_pcie; typedef enum { FWTS_SDEV_ID_BASE_SECURE_ACCESS = 0, FWTS_SDEV_MEM_BASE_SECURE_ACCESS = 1, FWTS_SDEV_RESERVED_SECURE_ACCESS = 2, } fwts_acpi_sdev_acpi_type; typedef struct { uint8_t type; uint8_t flags; uint16_t length; } __attribute__ ((packed)) fwts_acpi_table_sdev_acpi_header; typedef struct { fwts_acpi_table_sdev_acpi_header header; uint16_t hw_id_offset; uint16_t hw_id_length; uint16_t subsys_id_offset; uint16_t subsys_id_length; uint16_t hw_revision; uint8_t hw_revision_present; uint8_t class_code_present; uint8_t pci_comp_class; uint8_t pci_comp_subclass; uint8_t pci_comp_interface; } fwts_acpi_table_sdev_acpi_id; typedef struct { fwts_acpi_table_sdev_acpi_header header; uint32_t reserved; uint64_t base_addr; uint64_t mem_length; } fwts_acpi_table_sdev_acpi_memory; /* * ACPI HMAT (Heterogeneous Memory Attribute Table), 5.2.27 */ typedef struct { fwts_acpi_table_header header; uint32_t reserved; } __attribute__ ((packed)) fwts_acpi_table_hmat; typedef enum { FWTS_HMAT_TYPE_PROXIMITY_DOMAIN = 0, FWTS_HMAT_TYPE_LOCALITY = 1, FWTS_HMAT_TYPE_CACHE = 2, FWTS_HMAT_TYPE_RESERVED } fwts_acpi_hmat_type; typedef struct { uint16_t type; uint16_t reserved; uint32_t length; } __attribute__ ((packed)) fwts_acpi_table_hmat_header; typedef struct { fwts_acpi_table_hmat_header header; uint16_t flags; uint16_t reserved1; uint32_t initiator_proximity_domain; uint32_t memory_proximity_domain; uint32_t reserved2; uint64_t reserved3; uint64_t reserved4; } __attribute__ ((packed)) fwts_acpi_table_hmat_proximity_domain; typedef struct { fwts_acpi_table_hmat_header header; uint8_t flags; uint8_t data_type; uint8_t min_transfer_size; uint8_t reserved1; uint32_t num_initiator; uint32_t num_target; uint32_t reserved2; uint64_t entry_base_unit; } __attribute__ ((packed)) fwts_acpi_table_hmat_locality; typedef struct { fwts_acpi_table_hmat_header header; uint32_t memory_proximity_domain; uint32_t reserved1; uint64_t cache_size; uint32_t cache_attr; uint16_t reserved2; uint16_t num_smbios; } __attribute__ ((packed)) fwts_acpi_table_hmat_cache; /* * ACPI PDTT (Platform Debug Trigger Table), 5.2.28 */ typedef struct { fwts_acpi_table_header header; uint8_t trigger_count; uint8_t reserved[3]; uint32_t array_offset; } __attribute__ ((packed)) fwts_acpi_table_pdtt; typedef struct { uint8_t sub_channel_id; uint8_t flags; } __attribute__ ((packed)) fwts_acpi_table_pdtt_channel; /* * ACPI PPTT (Processor Properties Topology Table), 5.2.29 */ typedef struct { fwts_acpi_table_header header; } __attribute__ ((packed)) fwts_acpi_table_pptt; typedef enum { FWTS_PPTT_PROCESSOR = 0, FWTS_PPTT_CACHE = 1, FWTS_PPTT_ID = 2, FWTS_PPTT_RESERVED } fwts_acpi_pptt_type; typedef struct { uint8_t type; uint8_t length; } __attribute__ ((packed)) fwts_acpi_table_pptt_header; typedef struct { fwts_acpi_table_pptt_header header; uint16_t reserved; uint32_t flags; uint32_t parent; uint32_t acpi_processor_id; uint32_t number_priv_resources; uint32_t private_resource[]; } __attribute__ ((packed)) fwts_acpi_table_pptt_processor; typedef struct { fwts_acpi_table_pptt_header header; uint16_t reserved; uint32_t flags; uint32_t next_level_cache; uint32_t size; uint32_t number_sets; uint8_t associativity; uint8_t attributes; uint16_t line_size; uint32_t cache_id; } __attribute__ ((packed)) fwts_acpi_table_pptt_cache; typedef struct { fwts_acpi_table_pptt_header header; uint16_t reserved; uint32_t vendor_id; uint64_t level1_id; uint64_t level2_id; uint16_t major_rev; uint16_t minor_rev; uint16_t spin_rev; } __attribute__ ((packed)) fwts_acpi_table_pptt_id; /* * ACPI PHAT (Platform Health Assessment Table), 5.2.30 */ typedef struct { fwts_acpi_table_header header; } __attribute__ ((packed)) fwts_acpi_table_phat; typedef enum { FWTS_PHAT_VERSION = 0, FWTS_PHAT_HEALTH = 1, FWTS_PHAT_RESERVED } fwts_acpi_phat_type; typedef struct { uint16_t type; uint16_t length; uint8_t revision; } __attribute__ ((packed)) fwts_acpi_table_phat_header; /* 0: Firmware Version Data Record */ typedef struct { fwts_acpi_table_phat_header header; uint8_t reserved[3]; uint32_t element_count; } __attribute__ ((packed)) fwts_acpi_table_phat_version; typedef struct { uint8_t component_id[16]; uint64_t version; uint32_t producer_id; } __attribute__ ((packed)) fwts_acpi_table_phat_version_elem; /* 1: Firmware Health Data Record */ typedef struct { fwts_acpi_table_phat_header header; uint16_t reserved; uint8_t healthy; uint8_t data_signature[16]; uint32_t data_offset; } __attribute__ ((packed)) fwts_acpi_table_phat_health; /* * ACPI PCCT (Platform Communications Channel Table), 14.1 */ typedef struct { fwts_acpi_table_header header; uint32_t flags; uint64_t reserved; } __attribute__ ((packed)) fwts_acpi_table_pcct; typedef struct { uint8_t type; uint8_t length; } __attribute__ ((packed)) fwts_acpi_table_pcct_subspace_header; typedef struct { fwts_acpi_table_pcct_subspace_header header; uint8_t reserved[6]; uint64_t base_address; uint64_t length; fwts_acpi_gas doorbell_register; uint64_t doorbell_preserve; uint64_t doorbell_write; uint32_t nominal_latency; uint32_t max_periodic_access_rate; uint16_t min_request_turnaround_time; } __attribute__ ((packed)) fwts_acpi_table_pcct_subspace_type_0; typedef struct { fwts_acpi_table_pcct_subspace_header header; uint32_t platform_interrupt; uint8_t platform_interrupt_flags; uint8_t reserved; uint64_t base_address; uint64_t length; fwts_acpi_gas doorbell_register; uint64_t doorbell_preserve; uint64_t doorbell_write; uint32_t nominal_latency; uint32_t max_periodic_access_rate; uint16_t min_request_turnaround_time; } __attribute__ ((packed)) fwts_acpi_table_pcct_subspace_type_1; typedef struct { fwts_acpi_table_pcct_subspace_header header; uint32_t platform_interrupt; uint8_t platform_interrupt_flags; uint8_t reserved; uint64_t base_address; uint64_t length; fwts_acpi_gas doorbell_register; uint64_t doorbell_preserve; uint64_t doorbell_write; uint32_t nominal_latency; uint32_t max_periodic_access_rate; uint16_t min_request_turnaround_time; fwts_acpi_gas platform_ack_register; uint64_t platform_ack_preserve; uint64_t platform_ack_write; } __attribute__ ((packed)) fwts_acpi_table_pcct_subspace_type_2; typedef struct { fwts_acpi_table_pcct_subspace_header header; uint32_t platform_interrupt; uint8_t platform_interrupt_flags; uint8_t reserved1; uint64_t base_address; uint32_t length; fwts_acpi_gas doorbell_register; uint64_t doorbell_preserve; uint64_t doorbell_write; uint32_t nominal_latency; uint32_t max_periodic_access_rate; uint32_t min_request_turnaround_time; fwts_acpi_gas platform_ack_register; uint64_t platform_ack_preserve; uint64_t platform_ack_write; uint64_t reserved2; fwts_acpi_gas cmd_complete_register; uint64_t cmd_complete_mask; fwts_acpi_gas cmd_update_register; uint64_t cmd_update_preserve_mask; uint64_t cmd_update_set_mask; fwts_acpi_gas error_status_register; uint64_t error_status_mask; } __attribute__ ((packed)) fwts_acpi_table_pcct_subspace_type_3_4; typedef struct { fwts_acpi_table_pcct_subspace_header header; uint16_t version; uint64_t base_address; uint64_t shared_memory_range_length; fwts_acpi_gas doorbell_register; uint64_t doorbell_preserve; uint64_t doorbell_write; fwts_acpi_gas cmd_complete_register; uint64_t cmd_complete_mask; fwts_acpi_gas error_status_register; uint64_t error_status_mask; uint32_t nominal_latency; uint32_t min_request_turnaround_time; } __attribute__ ((packed)) fwts_acpi_table_pcct_subspace_type_5; /* * ACPI SPCR (Serial Port Console Redirection Table) * http://msdn.microsoft.com/en-us/library/windows/hardware/dn639132(v=vs.85).aspx */ typedef struct { fwts_acpi_table_header header; uint8_t interface_type; uint8_t reserved1[3]; fwts_acpi_gas base_address; uint8_t interrupt_type; uint8_t irq; uint32_t gsi; uint8_t baud_rate; uint8_t parity; uint8_t stop_bits; uint8_t flow_control; uint8_t terminal_type; uint8_t language; uint16_t pci_device_id; uint16_t pci_vendor_id; uint8_t pci_bus_number; uint8_t pci_device_number; uint8_t pci_function_number; uint32_t pci_flags; uint8_t pci_segment; uint32_t uart_clock_freq; uint32_t precise_baud_rate; uint16_t namespace_str_length; uint16_t namespace_str_offset; char namespace_str[0]; } __attribute__ ((packed)) fwts_acpi_table_spcr; /* * ACPI DBGP (Debug Port Table) * http://msdn.microsoft.com/en-us/library/windows/hardware/dn639130(v=vs.85).aspx */ typedef struct { fwts_acpi_table_header header; uint8_t interface_type; uint8_t reserved[3]; fwts_acpi_gas base_address; } __attribute__ ((packed)) fwts_acpi_table_dbgp; /* * ACPI DBG2 (Debug Port Table 2) * http://msdn.microsoft.com/en-us/library/windows/hardware/dn639131(v=vs.85).aspx */ typedef struct { fwts_acpi_table_header header; uint32_t info_offset; uint32_t info_count; } __attribute__ ((packed)) fwts_acpi_table_dbg2; typedef struct { uint8_t revision; uint16_t length; uint8_t number_of_regs; uint16_t namespace_length; uint16_t namespace_offset; uint16_t oem_data_length; uint16_t oem_data_offset; uint16_t port_type; uint16_t port_subtype; uint16_t reserved; uint16_t base_address_offset; uint16_t address_size_offset; } __attribute__ ((packed)) fwts_acpi_table_dbg2_info; /* * ACPI MCHI (Management Controller Host Interface Table) * http://www.dmtf.org/sites/default/files/standards/documents/DSP0256_1.0.0.pdf */ typedef struct { fwts_acpi_table_header header; uint8_t interface_type; uint8_t protocol_identifier; uint8_t protocol_data[8]; uint8_t interrupt_type; uint8_t gpe; uint8_t pci_device_flag; uint32_t global_system_interrupt; fwts_acpi_gas base_address; /* PCI Segment Group or UID bytes */ uint8_t bytes[4]; } __attribute__ ((packed)) fwts_acpi_table_mchi; /* * ACPI SPMI (Server Platform Management Interface Table) * http://www.intel.com/content/www/us/en/servers/ipmi/ipmi-intelligent-platform-mgt-interface-spec-2nd-gen-v2-0-spec-update.html * page 600-606 */ typedef struct { fwts_acpi_table_header header; uint8_t interface_type; uint8_t reserved1; uint16_t specification_revision; uint8_t interrupt_type; uint8_t gpe; uint8_t reserved2; uint8_t pci_device_flag; uint32_t global_system_interrupt; fwts_acpi_gas base_address; uint8_t pci_segment_group_number; uint8_t pci_bus_number; uint8_t pci_device_number; uint8_t pci_function_number; uint8_t reserved3; } __attribute__ ((packed)) fwts_acpi_table_spmi; /* * ACPI HEST (Hardware Error Source Table), 18.3.2 */ typedef struct { fwts_acpi_table_header header; uint32_t error_source_count; } __attribute__ ((packed)) fwts_acpi_table_hest; /* Section 18.3.2.7, table 18-332 */ typedef struct { uint8_t type; uint8_t length; uint16_t configuration_write_enable; uint32_t poll_interval; uint32_t vector; uint32_t switch_to_polling_threshold_value; uint32_t switch_to_polling_threshold_window; uint32_t error_threshold_value; uint32_t error_threshold_window; } __attribute__ ((packed)) fwts_acpi_table_hest_hardware_error_notification; /* Section 18.3.2.1.1 IA-32 Architecture Machine Check Bank Structure */ typedef struct { uint8_t bank_number; uint8_t clear_status_on_initialization; uint8_t status_data_format; uint8_t reserved; uint32_t control_register_msr_address; uint64_t control_init_data; uint32_t status_register_msr_address; uint32_t address_register_msr_address; uint32_t misc_register_msr_address; } __attribute__ ((packed)) fwts_acpi_table_hest_machine_check_bank; /* Section 18.3.2.1 Table 18-322, Type 0 */ typedef struct { uint16_t type; uint16_t source_id; uint16_t reserved1; uint8_t flags; uint8_t enabled; uint32_t number_of_records_to_preallocate; uint32_t max_sections_per_record; uint64_t global_capability_init_data; uint64_t global_control_init_data; uint8_t number_of_hardware_banks; uint8_t reserved2[7]; fwts_acpi_table_hest_machine_check_bank bank[0]; } __attribute__ ((packed)) fwts_acpi_table_hest_ia32_machine_check_exception; /* Section 18.3.2.2 Table 18-324, Type 1 */ typedef struct { uint16_t type; uint16_t source_id; uint16_t reserved1; uint8_t flags; uint8_t enabled; uint32_t number_of_records_to_preallocate; uint32_t max_sections_per_record; fwts_acpi_table_hest_hardware_error_notification notification; uint8_t number_of_hardware_banks; uint8_t reserved2[3]; fwts_acpi_table_hest_machine_check_bank bank[0]; } __attribute__ ((packed)) fwts_acpi_table_hest_ia32_corrected_machine_check; /* Section 18.3.2.2.1, 18-325, Type 2 */ typedef struct { uint16_t type; uint16_t source_id; uint16_t reserved1; uint32_t number_of_records_to_preallocate; uint32_t max_sections_per_record; uint32_t max_raw_data_length; } __attribute__ ((packed)) fwts_acpi_table_hest_nmi_error; /* Section 18.3.2.3, Table 18-326, Type 6 */ typedef struct { uint16_t type; uint16_t source_id; uint16_t reserved1; uint8_t flags; uint8_t enabled; uint32_t number_of_records_to_preallocate; uint32_t max_sections_per_record; uint32_t bus; uint16_t device; uint16_t function; uint16_t device_control; uint16_t reserved2; uint32_t uncorrectable_error_mask; uint32_t uncorrectable_error_severity; uint32_t correctable_error_mask; uint32_t advanced_error_capabilities_and_control; uint32_t root_error_command; } __attribute__ ((packed)) fwts_acpi_table_hest_pci_express_root_port_aer; /* Section 18.3.2.4, Table 18-327, Type 7 */ typedef struct { uint16_t type; uint16_t source_id; uint16_t reserved1; uint8_t flags; uint8_t enabled; uint32_t number_of_records_to_preallocate; uint32_t max_sections_per_record; uint32_t bus; uint16_t device; uint16_t function; uint16_t device_control; uint16_t reserved2; uint32_t uncorrectable_error_mask; uint32_t uncorrectable_error_severity; uint32_t correctable_error_mask; uint32_t advanced_error_capabilities_and_control; } __attribute__ ((packed)) fwts_acpi_table_hest_pci_express_device_aer; /* Section 18.3.2.5, Table 18-328, Type 8 */ typedef struct { uint16_t type; uint16_t source_id; uint16_t reserved1; uint8_t flags; uint8_t enabled; uint32_t number_of_records_to_preallocate; uint32_t max_sections_per_record; uint32_t bus; uint16_t device; uint16_t function; uint16_t device_control; uint16_t reserved2; uint32_t uncorrectable_error_mask; uint32_t uncorrectable_error_severity; uint32_t correctable_error_mask; uint32_t advanced_error_capabilities_and_control; uint32_t secondary_uncorrectable_error_mask; uint32_t secondary_uncorrectable_error_severity; uint32_t secondary_advanced_error_capabilities_and_control; } __attribute__ ((packed)) fwts_acpi_table_hest_pci_express_bridge_aer; /* Section 18.3.2.6, Table 18-329, Type 9 */ typedef struct { uint16_t type; uint16_t source_id; uint16_t related_source_id; uint8_t flags; uint8_t enabled; uint32_t number_of_records_to_preallocate; uint32_t max_sections_per_record; uint32_t max_raw_data_length; fwts_acpi_gas error_status_address; fwts_acpi_table_hest_hardware_error_notification notification; uint32_t error_status_block_length; } __attribute__ ((packed)) fwts_acpi_table_hest_generic_hardware_error_source; /* Section 18.3.2.8, Table 18-344, Type 10 */ typedef struct { uint16_t type; uint16_t source_id; uint16_t related_source_id; uint8_t flags; uint8_t enabled; uint32_t number_of_records_to_preallocate; uint32_t max_sections_per_record; uint32_t max_raw_data_length; fwts_acpi_gas error_status_address; fwts_acpi_table_hest_hardware_error_notification notification; uint32_t error_status_block_length; fwts_acpi_gas read_ack_register; uint64_t read_ack_preserve; uint64_t read_ack_write; } __attribute__ ((packed)) fwts_acpi_table_hest_generic_hardware_error_source_v2; void fwts_acpi_table_get_header(fwts_acpi_table_header *hdr, uint8_t *data); bool fwts_acpi_data_zero(const void *data, const size_t len); /* * ACPI CSTR (Core System Resources Table) * https://acpica.org/sites/acpica/files/CSRT.doc */ typedef struct { fwts_acpi_table_header header; } __attribute__ ((packed)) fwts_acpi_table_csrt; typedef struct { uint32_t length; uint32_t vendor_id; uint32_t subvendor_id; uint16_t device_id; uint16_t subdevice_id; uint16_t revision; uint16_t reserved; uint32_t shared_info_length; } __attribute__ ((packed)) fwts_acpi_table_csrt_resource_group; typedef struct { uint32_t length; uint16_t type; uint16_t subtype; uint32_t uid; uint8_t silicon_vendor_info[0]; } __attribute__ ((packed)) fwts_acpi_table_csrt_resource_descriptor; #define FWTS_TABLE_CSRT_TYPE_INTERRUPT (0x0001) #define FWTS_TABLE_CSRT_TYPE_TIMER (0x0002) #define FWTS_TABLE_CSRT_TYPE_DMA (0x0003) /* * ACPI LPTI (Low Power Idle Table) * http://www.uefi.org/sites/default/files/resources/ACPI_Low_Power_Idle_Table.pdf */ /* LPI struct type 0 */ typedef struct { uint32_t type; uint32_t length; uint16_t id; uint16_t reserved; uint32_t flags; fwts_acpi_gas entry_trigger; uint32_t residency; uint32_t latency; fwts_acpi_gas residency_counter; uint64_t residency_counter_freq; } __attribute__ ((packed)) fwts_acpi_table_lpit_c_state; typedef struct { fwts_acpi_table_header header; /* followed by 1 or more LPI structure types */ } __attribute__ ((packed)) fwts_acpi_table_lpit; /* * ACPI WAET (Windows ACPI Emulated Devices Table) * http://msdn.microsoft.com/en-us/windows/hardware/gg487524.aspx */ typedef struct { fwts_acpi_table_header header; uint32_t flags; } __attribute__ ((packed)) fwts_acpi_table_waet; /* * ACPI MSDM (Microsoft Data Management Table) * http://feishare.com/attachments/article/265/microsoft-software-licensing-tables.pdf */ typedef struct { fwts_acpi_table_header header; uint32_t version; uint32_t reserved; uint32_t data_type; uint32_t data_reserved; uint32_t data_length; uint8_t data[0]; /* Proprietary data */ } __attribute__ ((packed)) fwts_acpi_table_msdm; /* * ACPI SDEI (Software Delegated Exception Interface) * http://infocenter.arm.com/help/topic/com.arm.doc.den0054a/ARM_DEN0054A_Software_Delegated_Exception_Interface.pdf */ typedef struct { fwts_acpi_table_header header; } __attribute__ ((packed)) fwts_acpi_table_sdei; /* * ACPI IORT (IO Remapping Table) * http://infocenter.arm.com/help/topic/com.arm.doc.den0049a/DEN0049A_IO_Remapping_Table.pdf */ typedef struct { fwts_acpi_table_header header; uint32_t io_rt_nodes_count; uint32_t io_rt_offset; uint32_t reserved; } __attribute__ ((packed)) fwts_acpi_table_iort; typedef struct { uint8_t type; uint16_t length; uint8_t revision; uint32_t identifier; uint32_t id_mappings_count; uint32_t id_array_offset; } __attribute__ ((packed)) fwts_acpi_table_iort_node; typedef struct { uint32_t input_base; uint32_t id_count; uint32_t output_base; uint32_t output_reference; uint32_t flags; } __attribute__ ((packed)) fwts_acpi_table_iort_id_mapping; typedef struct { uint32_t gsiv; uint32_t flags; } __attribute__ ((packed)) fwts_acpi_table_iort_smmu_interrupt; typedef struct { /* Global Interrupt Array Section */ uint32_t smmu_nsgirpt; uint32_t smmu_nsgirpt_flags; uint32_t smmu_nsgcfgirpt; uint32_t smmu_nsgcfgirpt_flags; } __attribute__ ((packed)) fwts_acpi_table_iort_smmu_global_interrupt_array; typedef struct { fwts_acpi_table_iort_node iort_node; uint64_t base_address; uint64_t span; uint32_t model; uint32_t flags; uint32_t global_interrupt_array_offset; uint32_t context_interrupt_count; uint32_t context_interrupt_array_offset; uint32_t pmu_interrupt_count; uint32_t pmu_interrupt_array_offset; /* * Global Interrupt array, Context Interrupt Array * and PMU Interrupt arrays follow at offsets into * the table */ } __attribute__ ((packed)) fwts_acpi_table_iort_smmu_node; typedef struct { fwts_acpi_table_iort_node iort_node; uint32_t its_count; uint32_t identifier_array[0]; } __attribute__ ((packed)) fwts_acpi_table_iort_its_group_node; typedef struct { uint32_t cache_coherent; uint8_t allocation_hints; uint16_t reserved; uint8_t memory_access_flags; } __attribute__ ((packed)) fwts_acpi_table_iort_properties; typedef struct { fwts_acpi_table_iort_node iort_node; uint32_t flags; fwts_acpi_table_iort_properties properties; uint8_t device_memory_address_size; uint8_t device_object_name[0]; /* followed by padding and array of ids_mappings at some offset uint32_t identifier_array[0]; */ } __attribute__ ((packed)) fwts_acpi_table_iort_named_component_node; typedef struct { fwts_acpi_table_iort_node iort_node; fwts_acpi_table_iort_properties properties; uint32_t ats_attribute; uint32_t pci_segment_number; uint8_t memory_addr_size_limit; uint16_t pasid_cap; uint8_t reserved; uint32_t flags; /* followed by array of ids_mappings at some offset uint32_t identifier_array[0]; */ } __attribute__ ((packed)) fwts_acpi_table_iort_pci_root_complex_node; typedef struct { fwts_acpi_table_iort_node iort_node; uint64_t base_address; uint32_t flags; uint32_t reserved; uint64_t vatos_address; uint32_t model; uint32_t event; uint32_t pri; uint32_t gerr; uint32_t sync; uint32_t proximity_domain; uint32_t deviceid_mapping_idx; /* followed by array of ids_mappings at some offset fwts_acpi_table_iort_id_mapping identifier_array[0]; */ } __attribute__ ((packed)) fwts_acpi_table_iort_smmuv3_node; typedef struct { fwts_acpi_table_iort_node iort_node; uint64_t base_address; uint32_t gsiv; uint32_t node_ref; uint64_t p1_base_address; /* followed by array of ids_mappings at some offset fwts_acpi_table_iort_id_mapping identifier_array[0]; */ } __attribute__ ((packed)) fwts_acpi_table_iort_pmcg_node; typedef struct { uint64_t physical_range_offset; uint64_t physical_range_length; uint32_t reserved; } __attribute__ ((packed)) fwts_acpi_table_iort_mem_rng_des; typedef struct { fwts_acpi_table_iort_node iort_node; uint32_t flags; uint32_t num_mem_rng_des; uint32_t mem_rng_des_offset; } __attribute__ ((packed)) fwts_acpi_table_iort_rmr_node; /* * ACPI STAO (Status Override Table) * http://wiki.xenproject.org/mediawiki/images/0/02/Status-override-table.pdf */ typedef struct { fwts_acpi_table_header header; uint8_t uart; uint8_t namelist[0]; } __attribute__ ((packed)) fwts_acpi_table_stao; /* * ACPI WDAT (Watchdog Action Table) * https://msdn.microsoft.com/en-us/windows/hardware/gg463320.aspx */ typedef struct { uint8_t watchdog_action; uint8_t instruction_flags; uint16_t reserved; fwts_acpi_gas register_region; uint32_t value; uint32_t mask; } __attribute__ ((packed)) fwts_acpi_table_wdat_instr_entries; typedef struct { fwts_acpi_table_header header; uint32_t watchdog_header_length; uint16_t pci_segment; uint8_t pci_bus_number; uint8_t pci_device_number; uint8_t pci_function_number; uint8_t reserved1[3]; uint32_t timer_period; uint32_t maximum_count; uint32_t minimum_count; uint8_t watchdog_flags; uint8_t reserved2[3]; uint32_t number_of_entries; fwts_acpi_table_wdat_instr_entries entries[0]; } __attribute__ ((packed)) fwts_acpi_table_wdat; /* * ACPI WPDT (Windows Platform Binary Table) * https://msdn.microsoft.com/en-US/library/windows/hardware/dn550976 */ typedef struct { uint16_t arguments_length; uint8_t arguments[]; } __attribute__ ((packed)) fwts_acpi_table_wpbt_type1; typedef struct { fwts_acpi_table_header header; uint32_t handoff_size; uint64_t handoff_address; uint8_t layout; uint8_t type; } __attribute__ ((packed)) fwts_acpi_table_wpbt; /* * ACPI WSMT (Windows SMM Security Mitigations Table) * https://msdn.microsoft.com/windows/hardware/drivers/bringup/acpi-system-description-tables#wsmt */ typedef struct { fwts_acpi_table_header header; uint32_t protection_flags; } __attribute__ ((packed)) fwts_acpi_table_wsmt; /* * ACPI ASPT * determined by reverse engineering */ typedef struct { fwts_acpi_table_header header; uint32_t sptt_addr_start; uint32_t sptt_addr_end; uint32_t amrt_addr_start; uint32_t amrt_addr_end; } __attribute__ ((packed)) fwts_acpi_table_aspt; /* * NHLT Table * see https://01.org/sites/default/files/595976_intel_sst_nhlt.pdf */ typedef struct { fwts_acpi_table_header header; uint8_t ep_descriptor_count; } __attribute__ ((packed)) fwts_acpi_table_nhlt; typedef struct { uint32_t ep_descriptor_len; uint8_t link_type; uint8_t instance_id; uint16_t vendor_id; uint16_t device_id; uint16_t revision_id; uint32_t subsystem_id; uint8_t device_type; uint8_t direction; uint8_t virtual_bus_id; }__attribute__ ((packed)) fwts_acpi_table_nhlt_ep_descriptor; typedef struct { uint32_t capabilities_size; uint8_t capabilities[0]; } __attribute__ ((packed)) fwts_acpi_table_nhlt_specific_config; typedef struct { uint16_t wformattag; uint16_t nchannels; uint32_t nsamplespersec; uint32_t navgbytespersec; uint16_t nblockalign; uint16_t wbitspersample; uint16_t cbsize; uint16_t wvalidbitspersample; uint32_t dwchannelmask; uint8_t subformat[16]; } __attribute__ ((packed)) fwts_acpi_table_nhlt_waveformatextensible; typedef struct { fwts_acpi_table_nhlt_waveformatextensible format; fwts_acpi_table_nhlt_specific_config formatconfiguration; } __attribute__ ((packed)) fwts_acpi_table_nhlt_format_configuration; typedef struct { uint8_t formatscount; fwts_acpi_table_nhlt_format_configuration formatsconfiguration[0]; } __attribute__ ((packed)) fwts_acpi_table_nhlt_formats_configuration; /* * ACPI SVKL (Storage Volume Key Data) * https://cdrdv2.intel.com/v1/dl/getContent/726790 */ typedef struct { uint16_t key_type; uint16_t key_format; uint32_t key_size; uint64_t key_addr; } __attribute__ ((packed)) fwts_acpi_table_svkl_key_structure; typedef struct { fwts_acpi_table_header header; uint32_t key_count; fwts_acpi_table_svkl_key_structure key_struct[0]; } __attribute__ ((packed)) fwts_acpi_table_svkl; /* * ACPI RGRT (Regulatory Graphics Resource Table) * https://microsoft.github.io/mu/dyn/mu_plus/MsCorePkg/AcpiRGRT/feature_acpi_rgrt/ */ typedef struct { fwts_acpi_table_header header; uint16_t version; uint8_t image_type; uint8_t reserved; uint8_t image[0]; } __attribute__ ((packed)) fwts_acpi_table_rgrt; /* * ACPI CEDT (CXL Early Discovery Table) * https://www.computeexpresslink.org/download-the-specification */ typedef struct { fwts_acpi_table_header header; } __attribute__ ((packed)) fwts_acpi_table_cedt; typedef enum { FWTS_CEDT_TYPE_CHBS = 0, FWTS_CEDT_TYPE_CFMWS = 1, FWTS_CEDT_TYPE_CXIMS = 2, FWTS_CEDT_TYPE_RDPAS = 3, FWTS_CEDT_TYPE_RESERVED = 4, } fwts_acpi_cedt_type; typedef struct { uint8_t type; uint8_t reserved; uint16_t record_length; } __attribute__ ((packed)) fwts_acpi_table_cedt_header; typedef struct { fwts_acpi_table_cedt_header header; uint32_t uid; uint32_t cxl_version; uint32_t reserved; uint64_t base; uint64_t length; } __attribute__ ((packed)) fwts_acpi_table_cedt_chbs; typedef struct { fwts_acpi_table_cedt_header header; uint32_t reserved1; uint64_t base_hpa; uint64_t window_size; uint8_t eniw; uint8_t interleave_arithmetic; uint16_t reserved2; uint32_t hbig; uint16_t window_restrictions; uint16_t qtg_id; uint32_t interleave_target_list[0]; } __attribute__ ((packed)) fwts_acpi_table_cedt_cfmws; typedef struct { fwts_acpi_table_cedt_header header; uint16_t reserved; uint8_t hbig; uint8_t nig; uint64_t xormap_list[0]; } __attribute__ ((packed)) fwts_acpi_table_cedt_cxims; typedef struct { fwts_acpi_table_cedt_header header; uint16_t rece_seg_num; uint16_t rece_bdf; uint8_t protocol_type; uint64_t base_addr; } __attribute__ ((packed)) fwts_acpi_table_cedt_rdpas; /* * ACPI AEST (Arm Error Source Table) * https://developer.arm.com/documentation/den0085/latest/ */ typedef struct { fwts_acpi_table_header header; } __attribute__ ((packed)) fwts_acpi_table_aest; typedef enum { FWTS_AEST_PROCESSOR = 0, FWTS_AEST_MEMORY = 1, FWTS_AEST_SMMU = 2, FWTS_AEST_VENDOR_DEFINED = 3, FWTS_AEST_GIC = 4, FWTS_AEST_RESERVED } fwts_acpi_aest_type; typedef struct { uint8_t type; uint16_t length; uint8_t reserved; uint32_t offset_node_specific_data; uint32_t offset_node_interface; uint32_t offset_node_interrupt_array; uint32_t node_interrupt_size; uint64_t timestamp_rate; uint64_t reserved1; uint64_t error_injection_countdown_rate; /* * followed by Node-specific data, Node interface * and Node Interrupt array */ } __attribute__ ((packed)) fwts_acpi_table_aest_node; typedef enum { FWTS_AEST_RESOURCE_CACHE = 0, FWTS_AEST_RESOURCE_TLB = 1, FWTS_AEST_RESOURCE_GENERIC = 2, FWTS_AEST_RESOURCE_RESERVED } fwts_acpi_aest_resource_type; typedef struct { uint32_t acpi_processor_id; uint8_t resource_type; uint8_t reserved; uint8_t flags; uint8_t revision; uint64_t processor_affinity_level_indicator; /* * followed by Resource substructure */ } __attribute__ ((packed)) fwts_acpi_table_aest_processor; typedef struct { uint32_t cache_reference; uint32_t reserved; } __attribute__ ((packed)) fwts_acpi_table_aest_cache_resource_substructure; typedef struct { uint32_t tlb_reference; uint32_t reserved; } __attribute__ ((packed)) fwts_acpi_table_aest_tlb_resource_substructure; typedef struct { uint32_t data; } __attribute__ ((packed)) fwts_acpi_table_aest_generic_resource_substructure; typedef struct { uint32_t proximity_domain; } __attribute__ ((packed)) fwts_acpi_table_aest_memory_controller; typedef struct { uint32_t iort_node_reference; uint32_t smmu_specific_data_subcomponent_reference; } __attribute__ ((packed)) fwts_acpi_table_aest_smmu; typedef struct { uint32_t hardware_id; uint32_t unique_id; uint8_t vendor_specific_data[16]; } __attribute__ ((packed)) fwts_acpi_table_aest_vendor_defined; typedef enum { FWTS_AEST_GICC = 0, FWTS_AEST_GICD = 1, FWTS_AEST_GICR = 2, FWTS_AEST_GOCS = 3, FWTS_AEST_GIC_RESERVED } fwts_acpi_aest_gic_type; typedef struct { uint32_t interface_type; uint32_t instance_identifier; } __attribute__ ((packed)) fwts_acpi_table_aest_gic; typedef struct { uint8_t interface_type; uint8_t reserved[3]; uint32_t flags; uint64_t base_address; uint32_t start_error_record_index; uint32_t number_of_error_records; uint64_t error_record_implemented; uint64_t error_record_based_status_reporting_supported; uint64_t addressing_mode; } __attribute__ ((packed)) fwts_acpi_table_aest_interface; typedef struct { uint8_t interrupt_type; uint16_t reserved; uint8_t interrupt_flags; uint32_t interrupt_gsiv; uint8_t id; uint8_t reserved1[3]; } __attribute__ ((packed)) fwts_acpi_table_aest_interrupt; /* * ACPI IVRS (I/O Virtualization Reporting Structure) * https://www.amd.com/system/files/TechDocs/48882_3.07_PUB.pdf */ typedef struct { fwts_acpi_table_header header; uint32_t ivinfo; uint64_t reserved; } __attribute__ ((packed)) fwts_acpi_table_ivrs; typedef struct { uint8_t type; uint8_t flags; uint16_t length; uint16_t device_id; uint16_t capability_offset; uint64_t iommu_base_address; uint16_t pci_seg_group; uint16_t iommu_info; } __attribute__ ((packed)) fwts_acpi_table_ivhd; typedef struct { fwts_acpi_table_ivhd ivhd; uint32_t iommu_feature_reoprt; uint8_t ivhd_device_entries[0]; } __attribute__ ((packed)) fwts_acpi_table_ivhd_10; typedef struct { fwts_acpi_table_ivhd ivhd; uint32_t iommu_attr; uint64_t efr_reg_image; uint64_t efr_reg_image_2; uint8_t ivhd_device_entries[0]; } __attribute__ ((packed)) fwts_acpi_table_ivhd_11_40; typedef struct { uint8_t type; uint8_t flags; uint16_t length; uint16_t device_id; uint16_t auxiliary_data; uint64_t reserved; uint16_t pci_seg_group; uint64_t start_address; uint64_t mem_block_len; } __attribute__ ((packed)) fwts_acpi_table_ivmd; /* * ACPI MPAM(Memory System Resource Partitioning And Monitoring) * https://developer.arm.com/documentation/ddi0598/latest/ */ typedef enum { FWTS_MPAM_PROCESSOR_CACHE = 0, FWTS_MPAM_MEMORY = 1, FWTS_MPAM_SMMU = 2, FWTS_MPAM_MEMORY_CACHE = 3, FWTS_MPAM_ACPI_DEVICE = 4, FWTS_MPAM_INTERCONNECT = 5, FWTS_MPAM_UNKNOWN = 0xFF } fwts_mpam_location_types; typedef struct { uint8_t signature[16]; uint32_t num_of_descriptors; } __attribute__ ((packed)) fwts_interconnect_descriptor_table; typedef struct { uint64_t intc_des_tbl_offset; uint32_t reserved; } __attribute__ ((packed)) fwts_interconnect_locator_descriptor; typedef struct { uint32_t producer; uint32_t reserved; } __attribute__ ((packed)) fwts_acpi_mpam_func_deps; typedef struct { uint32_t identifier; uint8_t ris_index; uint16_t reserved1; uint8_t locator_type; uint8_t locator[12]; uint32_t num_functional_deps; } __attribute__ ((packed)) fwts_acpi_mpam_resource_node; typedef struct { uint16_t length; uint8_t interface_type; uint8_t reserved; uint32_t identifier; uint64_t base_address; uint32_t mmio_size; uint32_t overflow_interrupt; uint32_t overflow_interrupt_flags; uint32_t reserved1; uint32_t overflow_interrupt_affinity; uint32_t error_interrupt; uint32_t error_interrupt_flags; uint32_t reserved2; uint32_t error_interrupt_affinity; uint32_t max_nrdy_usec; uint64_t hardware_id_linked_device; uint32_t instance_id_linked_device; uint32_t num_resouce_nodes; } __attribute__ ((packed)) fwts_acpi_mpam_msc_node; typedef struct { fwts_acpi_table_header header; } __attribute__ ((packed)) fwts_acpi_table_mpam; /* * iSCSI Boot Firmware Table (iBFT) * https://download.microsoft.com/download/1/e/5/1e5a2287-366c-431a-8e05-b958540230b1/iBFT.docx */ typedef enum { FWTS_IBFT_RESERVED = 0, FWTS_IBFT_CONTROL = 1, FWTS_IBFT_INITIATOR = 2, FWTS_IBFT_NIC = 3, FWTS_IBFT_TARGET = 4, FWTS_IBFT_EXTENSIONS = 5, FWTS_IBFT_UNKNOWN = 0xFF } fwts_ibft_structure_types; typedef struct { char signature[4]; uint32_t length; uint8_t revision; uint8_t checksum; char oem_id[6]; char oem_tbl_id[8]; uint8_t reserved[24]; } __attribute__ ((packed)) fwts_acpi_ibft_header; typedef struct { uint8_t structure_id; uint8_t version; uint16_t length; uint8_t index; uint8_t flags; } __attribute__ ((packed)) fwts_acpi_ibft_standard; typedef struct { fwts_acpi_ibft_standard std; uint16_t extensions; uint16_t initiator_offset; uint16_t nic_0_offset; uint16_t target_0_offset; uint16_t nic_1_offset; uint16_t target_1_offset; } __attribute__ ((packed)) fwts_acpi_ibft_control; typedef struct { fwts_acpi_ibft_standard std; uint8_t isns_server[16]; uint8_t slp_server[16]; uint8_t primary_radius_server[16]; uint8_t secondary_radius_server[16]; uint16_t initiator_name_length; uint16_t initiator_name_offset; } __attribute__ ((packed)) fwts_acpi_ibft_initiator; typedef struct { fwts_acpi_ibft_standard std; uint8_t ip_address[16]; uint8_t subnet_mask_prefix; uint8_t origin; uint8_t gateway[16]; uint8_t primary_dns[16]; uint8_t secondary_dns[16]; uint8_t dhcp[16]; uint16_t vlan; uint8_t mac_address[6]; uint16_t pci_bus_dev_func; uint16_t host_name_length; uint16_t host_name_offset; } __attribute__ ((packed)) fwts_acpi_ibft_nic; typedef struct { fwts_acpi_ibft_standard std; uint8_t target_ip_address[16]; uint16_t target_ip_socket; uint64_t target_boot_lun; uint8_t chap_type; uint8_t nic_sssociation; uint16_t target_name_length; uint16_t target_name_offset; uint16_t chap_name_length; uint16_t chap_name_offset; uint16_t chap_secret_length; uint16_t chap_secret_offset; uint16_t reverse_chap_name_length; uint16_t reverse_chap_name_offset; uint16_t reverse_chap_secret_length; uint16_t reverse_chap_secret_offset; } __attribute__ ((packed)) fwts_acpi_ibft_target; typedef struct { fwts_acpi_ibft_header header; uint32_t ivinfo; uint64_t reserved; } __attribute__ ((packed)) fwts_acpi_table_ibft; /* * Virtual I/O Translation (VIOT) Table * ACPI6.5 5.2.32 */ typedef struct { uint8_t type; uint8_t reserved; uint16_t length; } __attribute__ ((packed)) fwts_acpi_viot_node_hdr; typedef struct { fwts_acpi_viot_node_hdr hdr; uint32_t endpoint_start; uint16_t pci_seg_start; uint16_t pci_seg_end; uint16_t pci_bdf_start; uint16_t pci_bdf_end; uint16_t output_node; uint8_t reserved[6]; } __attribute__ ((packed)) fwts_acpi_viot_pci_rng_node; typedef struct { fwts_acpi_viot_node_hdr hdr; uint32_t endpoint_id; uint64_t base_addr; uint16_t output_node; uint8_t reserved[6]; } __attribute__ ((packed)) fwts_acpi_viot_mmio_ep_node; typedef struct { fwts_acpi_viot_node_hdr hdr; uint16_t pci_seg; uint16_t pci_bdf_num; uint64_t reserved; } __attribute__ ((packed)) fwts_acpi_viot_pci_iommu_node; typedef struct { fwts_acpi_viot_node_hdr hdr; uint32_t reserved; uint64_t base_addr; } __attribute__ ((packed)) fwts_acpi_viot_mmio_iommu_node; typedef struct { fwts_acpi_table_header header; uint16_t node_count; uint16_t node_offset; uint64_t reserved; } __attribute__ ((packed)) fwts_acpi_table_viot; /* * Miscellaneous GUIDed Table Entries * ACPI6.5 5.2.33 */ typedef struct { uint8_t entry_guid[16]; uint32_t entry_len; uint32_t revision; uint32_t producer_id; uint8_t data[0]; } __attribute__ ((packed)) fwts_acpi_misc_guided_entry; typedef struct { fwts_acpi_table_header header; fwts_acpi_misc_guided_entry entry[0]; } __attribute__ ((packed)) fwts_acpi_table_misc; /* * CC Event Log ACPI Table * ACPI6.5 5.2.34 */ typedef struct { fwts_acpi_table_header header; uint8_t cc_type; uint8_t cc_subtype; uint16_t reserved; uint64_t laml; uint64_t lasa; } __attribute__ ((packed)) fwts_acpi_table_ccel; /* * Storage Volume Key Location Table * ACPI6.5 5.2.35 */ typedef struct { uint16_t key_type; uint16_t key_format; uint32_t key_size; uint64_t key_address; } __attribute__ ((packed)) fwts_acpi_skvl_key_struct; typedef struct { fwts_acpi_table_header header; uint32_t key_count; fwts_acpi_skvl_key_struct key_struct[0]; } __attribute__ ((packed)) fwts_acpi_table_skvl; /* * S3 Performance Table * ACPI6.5 5.2.24.8 */ typedef struct { char signature[4]; uint32_t length; } __attribute__ ((packed)) fwts_acpi_table_s3pt_header; typedef struct { uint16_t rt_perf_record_type; uint8_t record_len; uint8_t revision; } __attribute__ ((packed)) fwts_acpi_s3pt_record_hdr; typedef struct { fwts_acpi_s3pt_record_hdr header; uint32_t resume_count; uint64_t full_resume; uint64_t average_resume; } __attribute__ ((packed)) fwts_acpi_s3pt_resume; typedef struct { fwts_acpi_s3pt_record_hdr header; uint64_t suspend_start; uint64_t suspend_end; } __attribute__ ((packed)) fwts_acpi_s3pt_suspend; #endif src/lib/include/fwts_acpi_object_eval.h000066400000000000000000000251061465205512700205360ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_ACPI_METHOD_H__ #define __FWTS_ACPI_METHOD_H__ #include "fwts.h" /* acpica headers */ #pragma GCC diagnostic ignored "-Wunused-parameter" #include "acpi.h" #pragma GCC diagnostic error "-Wunused-parameter" int fwts_acpi_init(fwts_framework *fw); int fwts_acpi_deinit(fwts_framework *fw); char *fwts_acpi_object_exists(const char *name); fwts_list *fwts_acpi_object_get_names(void); void fwts_acpi_object_dump(fwts_framework *fw, const ACPI_OBJECT *obj); void fwts_acpi_object_evaluate_report_error(fwts_framework *fw, const char *name, const ACPI_STATUS status); ACPI_STATUS fwts_acpi_object_evaluate(fwts_framework *fw, char *name, ACPI_OBJECT_LIST *arg_list, ACPI_BUFFER *buf); /* Test types */ #define METHOD_MANDATORY 1 #define METHOD_OPTIONAL 2 #define METHOD_MOBILE 4 #define METHOD_SILENT 8 #define ACPI_TYPE_INTBUF (ACPI_TYPE_INVALID + 1) typedef void (*fwts_method_return)(fwts_framework *fw, char *name, ACPI_BUFFER *ret_buff, ACPI_OBJECT *ret_obj, void *private); typedef struct { ACPI_OBJECT_TYPE type; /* Type */ const char *name; /* Field name */ } fwts_package_element; /* Time format for ACPI000E (Time and Alarm Device) */ typedef struct { uint16_t year; uint8_t month; uint8_t day; uint8_t hour; uint8_t minute; uint8_t second; uint8_t valid; // pad1 for _SRT uint16_t milliseconds; uint16_t timezone; uint8_t daylight; uint8_t pad2[3]; } __attribute__ ((packed)) fwts_acpi_time_buffer; /* Returns for NVDIMM control methods */ typedef struct { uint16_t status; uint16_t extended_status; uint16_t validation_flags; uint32_t health_status_flags; uint32_t health_status_attributes; uint8_t reserved[50]; } __attribute__ ((packed)) nch_return_t; typedef struct { uint16_t status; uint16_t extended_status; uint16_t validation_flags; uint32_t data_loss_count; uint8_t reserved[54]; } __attribute__ ((packed)) nbs_return_t; typedef struct { uint16_t status; uint16_t extended_status; uint32_t health_error_injection; uint32_t health_status_attributes; uint8_t reserved[52]; } __attribute__ ((packed)) nic_return_t; typedef struct { uint16_t status; uint16_t extended_status; } __attribute__ ((packed)) nih_return_t; typedef struct { uint16_t status; uint16_t extended_status; uint16_t validation_flags; uint32_t health_status_errors; uint32_t health_status_attributes; uint8_t reserved[50]; } __attribute__ ((packed)) nig_return_t; #define fwts_method_check_type(fw, name, buf, type) \ fwts_method_check_type__(fw, name, buf, type, #type) #define fwts_method_package_elements_type(fw, name, obj, info) \ fwts_method_package_elements_type__(fw, name, obj, info, FWTS_ARRAY_SIZE(info)) int fwts_method_check_type__(fwts_framework *fw, const char *name, const ACPI_BUFFER *buf, const ACPI_OBJECT_TYPE type, const char *type_name); int fwts_method_check_element_type(fwts_framework *fw, const char *name, const ACPI_OBJECT *obj, const uint32_t subpkg, const uint32_t element, const ACPI_OBJECT_TYPE type); const char *fwts_method_type_name(const ACPI_OBJECT_TYPE type); void fwts_method_passed_sane(fwts_framework *fw, const char *name, const char *type); void fwts_method_passed_sane_uint64(fwts_framework *fw, const char *name, const uint64_t value); void fwts_method_failed_null_object(fwts_framework *fw, const char *name, const char *type); bool fwts_method_type_matches(const ACPI_OBJECT_TYPE t1, const ACPI_OBJECT_TYPE t2); int fwts_method_buffer_size(fwts_framework *fw, const char *name, const ACPI_OBJECT *obj, const size_t buf_size); int fwts_method_package_count_min(fwts_framework *fw, const char *name, const ACPI_OBJECT *obj, const uint32_t min); int fwts_method_package_count_equal(fwts_framework *fw, const char *name, const ACPI_OBJECT *obj, const uint32_t count); int fwts_method_subpackage_count_equal(fwts_framework *fw, const char *name, const ACPI_OBJECT *obj, const uint32_t sub, const uint32_t count); int fwts_method_package_elements_all_type(fwts_framework *fw, const char *name, const ACPI_OBJECT *obj, const ACPI_OBJECT_TYPE type); int fwts_method_package_elements_type__(fwts_framework *fw, const char *name, const ACPI_OBJECT *obj, const fwts_package_element *info, const uint32_t count); int fwts_method_test_revision(fwts_framework *fw, const char *name, const uint32_t cur_revision, const uint32_t spec_revision); void fwts_method_test_integer_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_string_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_reference_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_NULL_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_buffer_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj,void *private); void fwts_method_test_all_reference_package_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_integer_reserved_bits_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_integer_max_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_package_integer_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_passed_failed_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_polling_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void method_evaluate_found_method(fwts_framework *fw, char *name, fwts_method_return check_func, void *private, ACPI_OBJECT_LIST *arg_list); void fwts_evaluate_found_method(fwts_framework *fw, ACPI_HANDLE *parent, char *name, fwts_method_return check_func, void *private, ACPI_OBJECT_LIST *arg_list); int fwts_evaluate_method(fwts_framework *fw, const uint32_t test_type, ACPI_HANDLE *parent, char *name, ACPI_OBJECT *args, uint32_t num_args, fwts_method_return check_func, void *private); bool fwts_method_valid_HID_string(const char *str); bool fwts_method_valid_EISA_ID(const uint32_t id, char *buf, const size_t buf_len); void fwts_method_test_CRS_large_size(fwts_framework *fw, const char *name, const char *objname, const uint8_t *data, const size_t crs_length, const size_t min, const size_t max, bool *passed); void fwts_method_test_CRS_large_resource_items(fwts_framework *fw, const char *name, const char *objname, const uint8_t *data, const uint64_t length, bool *passed, const char **tag); void fwts_method_test_CRS_small_resource_items(fwts_framework *fw, const char *name, const char *objname, const uint8_t *data, const size_t length, bool *passed, const char **tag) ; /* Device Identification Objects - see Section 6 Device Configuration */ int fwts_method_test_ADR(fwts_framework *fw, ACPI_HANDLE *device); int fwts_method_test_CID(fwts_framework *fw, ACPI_HANDLE *device); int fwts_method_test_CLS(fwts_framework *fw, ACPI_HANDLE *device); int fwts_method_test_DDN(fwts_framework *fw, ACPI_HANDLE *device); int fwts_method_test_HID(fwts_framework *fw, ACPI_HANDLE *device); int fwts_method_test_HRV(fwts_framework *fw, ACPI_HANDLE *device); int fwts_method_test_MLS(fwts_framework *fw, ACPI_HANDLE *device); int fwts_method_test_PLD(fwts_framework *fw, ACPI_HANDLE *device); int fwts_method_test_SUB(fwts_framework *fw, ACPI_HANDLE *device); int fwts_method_test_SUN(fwts_framework *fw, ACPI_HANDLE *device); int fwts_method_test_STR(fwts_framework *fw, ACPI_HANDLE *device); int fwts_method_test_UID(fwts_framework *fw, ACPI_HANDLE *device); void fwts_method_test_BMD_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_BPC_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_BPS_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_valid_CID_Type(fwts_framework *fw, char *name, ACPI_OBJECT *obj); void fwts_method_test_CID_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_HID_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_MLS_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_PLD_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_SUB_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_UID_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_NBS_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_NCH_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_NIC_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_NIH_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_NIG_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_STA_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_BIF_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_BIX_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); void fwts_method_test_BST_return(fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private); #endif src/lib/include/fwts_acpi_tables.h000066400000000000000000000101171465205512700175270ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_ACPI_TABLES_H__ #define __FWTS_ACPI_TABLES_H__ #include "fwts.h" #define ACPI_MAX_TABLES (128) #define fwts_acpi_revision_check(table, actual, must_be, passed) \ fwts_acpi_fixed_value(fw, LOG_LEVEL_HIGH, table, "Revision", actual, must_be, passed) #define fwts_acpi_reserved_bits(table, field, value, min, max, passed) \ fwts_acpi_reserved_bits_(fw, table, field, value, sizeof(value), min, max, passed) #define fwts_acpi_reserved_zero(table, field, value, passed) \ fwts_acpi_reserved_zero_(fw, table, field, value, sizeof(value), passed) typedef enum { FWTS_ACPI_TABLE_FROM_FIRMWARE, /* directly from firmware */ FWTS_ACPI_TABLE_FROM_FILE, /* loaded from file, e.g. from acpidump */ FWTS_ACPI_TABLE_FROM_FIXUP /* auto-generated fixup by fwts */ } fwts_acpi_table_provenance; typedef struct { char name[5]; void *data; size_t length; uint32_t which; uint32_t index; bool has_aml; uint64_t addr; fwts_acpi_table_provenance provenance; } fwts_acpi_table_info; int acpi_table_generic_init(fwts_framework *fw, char *name, fwts_acpi_table_info **table); #define acpi_table_init(name, table) \ static int name ## _init (fwts_framework *fw) \ { \ return acpi_table_generic_init(fw, # name, table); \ } int fwts_acpi_load_tables(fwts_framework *fw); int fwts_acpi_free_tables(void); int fwts_acpi_find_table(fwts_framework *fw, const char *name, const uint32_t which, fwts_acpi_table_info **info); int fwts_acpi_find_table_by_addr(fwts_framework *fw, const uint64_t addr, fwts_acpi_table_info **info); int fwts_acpi_get_table(fwts_framework *fw, const uint32_t index, fwts_acpi_table_info **info); bool fwts_acpi_obj_find(fwts_framework *fw, const char *obj_name); fwts_bool fwts_acpi_is_reduced_hardware(fwts_framework *fw); void fwts_acpi_reserved_zero_(fwts_framework *fw, const char *table, const char *field, const uint64_t value, const uint8_t size, bool *passed); void fwts_acpi_reserved_zero_array(fwts_framework *fw, const char *table, const char *field, const uint8_t* data, const uint8_t length, bool *passed); void fwts_acpi_reserved_bits_(fwts_framework *fw, const char *table, const char *field, const uint64_t value, const uint8_t size, const uint8_t min, const uint8_t max, bool *passed); void fwts_acpi_reserved_type(fwts_framework *fw, const char *table, const uint8_t value, const uint8_t min, const uint8_t reserved, bool *passed); bool fwts_acpi_table_length(fwts_framework *fw, const char *table, const uint32_t length, const uint32_t size); bool fwts_acpi_structure_length(fwts_framework *fw, const char *table, const uint8_t type, const uint32_t actual_length, const uint32_t struct_length); bool fwts_acpi_structure_length_zero(fwts_framework *fw, const char *table, const uint16_t length, const uint32_t offset); bool fwts_acpi_structure_range(fwts_framework *fw, const char *table, const uint32_t table_length, const uint32_t offset); void fwts_acpi_fixed_value(fwts_framework *fw, const fwts_log_level level, const char *table, const char *field, const uint8_t actual, const uint8_t must_be, bool *passed); void fwts_acpi_space_id(fwts_framework *fw, const char *table, const char *field, bool *passed, const uint8_t actual, const uint8_t num_type, ...); uint32_t fwts_get_acpi_version(fwts_framework *fw); void fwts_get_fadt_version(fwts_framework *fw, uint8_t *major, uint8_t *minor); #endif src/lib/include/fwts_acpica.h000066400000000000000000000024601465205512700165030ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_ACPICA_H__ #define __FWTS_ACPICA_H__ #include "fwts.h" typedef void (*fwts_acpica_log_callback)(fwts_framework *fw, const char *buffer); void fwts_acpica_set_fwts_framework(fwts_framework *fw); int fwts_acpica_init(fwts_framework *fw); int fwts_acpica_deinit(void); fwts_list *fwts_acpica_get_object_names(const int type); void fwts_acpica_sem_count_clear(void); void fwts_acpica_sem_count_get(int *acquired, int *released); void fwts_acpi_region_handler_called_set(const bool val); bool fwts_acpi_region_handler_called_get(void); #endif src/lib/include/fwts_acpica_mode.h000066400000000000000000000020411465205512700175020ustar00rootroot00000000000000/* * Copyright (C) 2013-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_ACPICA_MODE_H__ #define __FWTS_ACPICA_MODE_H__ typedef enum { FWTS_ACPICA_MODE_SERIALIZED = 0x00000001, FWTS_ACPICA_MODE_SLACK = 0x00000002, FWTS_ACPICA_MODE_IGNORE_ERRORS = 0x00000004, FWTS_ACPICA_MODE_DISABLE_AUTO_REPAIR = 0x00000008 } fwts_acpica_mode; #endif src/lib/include/fwts_acpid.h000066400000000000000000000017261465205512700163470ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_ACPID_H__ #define __FWTS_ACPID_H__ int fwts_acpi_event_open(void); char *fwts_acpi_event_read(const int fd, size_t *length, const int timeout); void fwts_acpi_event_close(const int fd); #endif src/lib/include/fwts_alloc.h000066400000000000000000000020041465205512700163470ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_ALLOC_H__ #define __FWTS_ALLOC_H__ void *fwts_low_calloc(const size_t nmemb, const size_t size); void *fwts_low_malloc(const size_t size); void *fwts_low_realloc(const void *ptr, const size_t size); void fwts_low_free(const void *ptr); #endif src/lib/include/fwts_arch.h000066400000000000000000000022511465205512700161760ustar00rootroot00000000000000/* * Copyright (C) 2016-2021, Al Stone * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #ifndef __FWTS_ARCH_H__ #define __FWTS_ARCH_H__ /* * Possible architectures for either the host (where FWTS is being run) * or the target (what is being tested -- e.g., running FWTS on x86 but * examining arm64 ACPI tables). * * NB: kernel conventions are used for the arch names. */ typedef enum { FWTS_ARCH_X86, FWTS_ARCH_IA64, FWTS_ARCH_ARM64, FWTS_ARCH_OTHER } fwts_architecture; extern fwts_architecture fwts_arch_get_host(void); extern fwts_architecture fwts_arch_get_arch(const char *name); extern char *fwts_arch_names(void); extern const char *fwts_arch_get_name(const fwts_architecture arch); #endif src/lib/include/fwts_args.h000066400000000000000000000032661465205512700162240ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_ARGS_H__ #define __FWTS_ARGS_H__ #include #include #include #include typedef struct { const char *long_name; /* e.g. "quiet", long name */ const char *short_name; /* e.g. "q", short help info */ const int has_arg; const char *explanation; /* explanation: "Enabled quiet mode..." */ } fwts_option; #include "fwts.h" typedef int (*fwts_args_optarg_handler)(fwts_framework *framework, const int argc, char * const argv[], const int option_char, const int long_index); typedef int (*fwts_args_optarg_check)(fwts_framework *framework); int fwts_args_init(void); int fwts_args_add_options(fwts_option *options, const fwts_args_optarg_handler handler, const fwts_args_optarg_check check); int fwts_args_parse(fwts_framework *fw, const int argc, char * const argv[]); void fwts_args_show_options(void); int fwts_args_free(void); char *fwts_args_comma_list(const char *arg); #endif src/lib/include/fwts_backtrace.h000066400000000000000000000020651465205512700172030ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_BACKTRACE__ #define __FWTS_BACKTRACE__ #include void fwts_print_backtrace(void); int fwts_fault_catch(void); void fwts_sig_handler_set(int signum, void (*handler)(int), struct sigaction *old_action); void fwts_sig_handler_restore(int signum, struct sigaction *old_action); #endif src/lib/include/fwts_battery.h000066400000000000000000000033041465205512700167330ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_BATTERY_H__ #define __FWTS_BATTERY_H__ #define FWTS_PROC_ACPI_BATTERY "/proc/acpi/battery" typedef enum { FWTS_BATTERY_DESIGN_CAPACITY = 0, FWTS_BATTERY_REMAINING_CAPACITY = 1, FWTS_BATTERY_ALL = ~0 } fwts_battery_type; int fwts_battery_get_count(fwts_framework *fw, uint32_t *count); int fwts_battery_get_cycle_count(fwts_framework *fw, const uint32_t index, uint32_t *cycle_count); bool fwts_battery_check_trip_point_support(fwts_framework *fw, const uint32_t index); int fwts_battery_set_trip_point(fwts_framework *fw, const uint32_t index, const uint32_t trip_point); int fwts_battery_get_trip_point(fwts_framework *fw, const uint32_t index, uint32_t *trip_point); int fwts_battery_get_capacity(fwts_framework *fw, const fwts_battery_type type, const uint32_t index, uint32_t *capacity_mAh, uint32_t *capacity_mWh); int fwts_battery_get_name(fwts_framework *fw, const uint32_t index, char *name, const size_t name_len); #endif src/lib/include/fwts_binpaths.h000066400000000000000000000020671465205512700170760ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_BINPATHS_H__ #define __FWTS_BINPATHS_H__ #define FWTS_LSPCI_PATH "/usr/bin/lspci" #define FWTS_DMIDECODE_PATH "/usr/sbin/dmidecode" #define FWTS_IASL_PATH "/usr/bin/iasl" #include "fwts_framework.h" int fwts_check_executable(fwts_framework *fw, const char *path, const char *name); #endif src/lib/include/fwts_button.h000066400000000000000000000021251465205512700165740ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_BUTTON_H__ #define __FWTS_BUTTON_H__ #define FWTS_BUTTON_LID_ANY (0x0000) #define FWTS_BUTTON_LID_OPENED (0x0001) #define FWTS_BUTTON_LID_CLOSED (0x0002) #define FWTS_BUTTON_POWER_EXISTS (0x00010) int fwts_button_match_state(fwts_framework *fw, const uint32_t button, uint32_t *matched, uint32_t *not_matched); #endif src/lib/include/fwts_checkeuid.h000066400000000000000000000016401465205512700172060ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_CHECKEUID_H__ #define __FWTS_CHECKEUID_H__ #include "fwts_framework.h" int fwts_check_root_euid(fwts_framework *fw, const bool warn); #endif src/lib/include/fwts_checksum.h000066400000000000000000000016261465205512700170700ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_CHECKSUM_H__ #define __FWTS_CHECKSUM_H__ #include "fwts.h" uint8_t fwts_checksum(const uint8_t *data, const size_t length); #endif src/lib/include/fwts_clog.h000066400000000000000000000031551465205512700162110ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Copyright (C) 2018-2021 9elements Cyber Security * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_CLOG_H__ #define __FWTS_CLOG_H__ #include "fwts.h" typedef void (*fwts_clog_progress_func)(fwts_framework *fw, int percent); typedef void (*fwts_clog_scan_func)(fwts_framework *fw, char *line, int repeated, char *prevline, void *private, int *errors); void fwts_clog_free(fwts_list *list); bool fwts_clog_available(fwts_framework *fw); fwts_list *fwts_clog_read(fwts_framework *fw); int fwts_clog_scan(fwts_framework *fw, fwts_list *clog, fwts_clog_scan_func callback, fwts_clog_progress_func progress, void *private, int *errors); void fwts_clog_scan_patterns(fwts_framework *fw, char *line, int repeated, char *prevline, void *private, int *errors); int fwts_clog_firmware_check(fwts_framework *fw, fwts_clog_progress_func progress, fwts_list *clog, int *errors); #endif src/lib/include/fwts_cmos.h000066400000000000000000000016341465205512700162260ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_CMOS_H__ #define __FWTS_CMOS_H__ #include #include int fwts_cmos_read(const uint8_t offset, uint8_t *value); #endif src/lib/include/fwts_coreboot.h000066400000000000000000000020601465205512700170730ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Copyright (C) 2017-2021 Google Inc. * Copyright (C) 2018-2021 9elements Cyber Security * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_COREBOOT_H__ #define __FWTS_COREBOOT_H__ #include "fwts.h" #ifdef FWTS_ARCH_INTEL extern char *fwts_coreboot_cbmem_console_dump(void); #endif fwts_list* fwts_coreboot_cbmem_log(void); #endif src/lib/include/fwts_cpu.h000066400000000000000000000045161465205512700160560ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_CPU_H__ #define __FWTS_CPU_H__ #include "fwts_framework.h" #include typedef struct cpuinfo_x86 { char *vendor_id; /* Vendor ID */ int x86; /* CPU family */ int x86_model; /* Model */ char *model_name; /* Model name */ int stepping; /* Stepping */ char *flags; /* String containing flags */ } fwts_cpuinfo_x86; /* PowerPC Processor specific bits */ /* PVR definitions */ #define PVR_TYPE_P7 0x003f #define PVR_TYPE_P7P 0x004a #define PVR_TYPE_P8E 0x004b /* Murano */ #define PVR_TYPE_P8 0x004d /* Venice */ #define PVR_TYPE_P8NVL 0x004c /* Naples */ #define PVR_TYPE_P9 0x004e /* Processor generation */ typedef enum proc_gen { proc_gen_unknown, proc_gen_p7, /* P7 and P7+ */ proc_gen_p8, proc_gen_p9, } proc_gen_t; extern proc_gen_t proc_gen; typedef struct cpu_benchmark_result { bool cycles_valid; uint64_t loops; uint64_t cycles; } fwts_cpu_benchmark_result; int fwts_cpu_readmsr(fwts_framework *fw, const int cpu, const uint32_t reg, uint64_t *val); int fwts_cpu_is_Intel(bool *is_intel); int fwts_cpu_is_AMD(bool *is_amd); int fwts_cpu_is_Hygon(bool *is_hygon); fwts_bool fwts_cpu_has_c1e(void); fwts_cpuinfo_x86 *fwts_cpu_get_info(const int which_cpu); void fwts_cpu_free_info(fwts_cpuinfo_x86 *cpu); int fwts_cpu_enumerate(void); int fwts_cpu_consume(const int seconds); int fwts_cpu_consume_start(void); void fwts_cpu_consume_complete(void); int fwts_cpu_benchmark(fwts_framework *fw, const int cpu, fwts_cpu_benchmark_result *result); uint64_t fwts_cpu_benchmark_best_result(fwts_cpu_benchmark_result *res); #endif src/lib/include/fwts_devicetree.h000066400000000000000000000064221465205512700174040ustar00rootroot00000000000000/* * Copyright (C) 2016-2021 IBM Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_DEVICETREE_H__ #define __FWTS_DEVICETREE_H__ #include "fwts.h" #ifdef HAVE_LIBFDT #define FWTS_HAS_DEVICETREE 1 #else #define FWTS_HAS_DEVICETREE 0 #endif #define DT_FS_PATH "/sys/firmware/devicetree/base" #define DT_LINUX_PCI_DEVICES "/sys/bus/pci/devices" #define DT_PROPERTY_OPAL_PCI_SLOT "ibm,slot-label" #define DT_PROPERTY_OPAL_SLOT_LOC "ibm,slot-location-code" #define DT_PROPERTY_OPAL_PART_NUM "part-number" #define DT_PROPERTY_OPAL_SERIAL_NUM "serial-number" #define DT_PROPERTY_OPAL_MANUFACTURER_ID "manufacturer-id" #define DT_PROPERTY_OPAL_STATUS "status" #define DT_PROPERTY_OPAL_VENDOR "vendor" #define DT_PROPERTY_OPAL_BOARD_INFO "board-info" #if FWTS_HAS_DEVICETREE int fwts_devicetree_read(fwts_framework *fwts); int fwts_dt_property_read_u32( void *fdt, int offset, const char *pname, int *value); int fwts_dt_property_read_u32_arr( void *fdt, int offset, const char *pname, int *value, int *len); int fwts_dt_property_read_u64_arr( void *fdt, int offset, const char *pname, uint64_t *value, int *len); int fwts_dt_stringlist_count( fwts_framework *fw, const void *fdt, int nodeoffset, const char *property); #else /* !FWTS_HAS_DEVICETREE */ static inline int fwts_devicetree_read(fwts_framework *fwts) { FWTS_UNUSED(fwts); return FWTS_OK; } static inline int fwts_dt_property_read_u32( void *fdt, int offset, const char *pname, int *value) { FWTS_UNUSED(fdt); FWTS_UNUSED(offset); FWTS_UNUSED(pname); FWTS_UNUSED(value); return FWTS_OK; } static inline int fwts_dt_property_read_u32_arr( void *fdt, int offset, const char *pname, int *value, int *len) { FWTS_UNUSED(fdt); FWTS_UNUSED(offset); FWTS_UNUSED(pname); FWTS_UNUSED(value); FWTS_UNUSED(len); return FWTS_OK; } static inline int fwts_dt_property_read_u64_arr( void *fdt, int offset, const char *pname, uint64_t *value, int *len) { FWTS_UNUSED(fdt); FWTS_UNUSED(offset); FWTS_UNUSED(pname); FWTS_UNUSED(value); FWTS_UNUSED(len); return FWTS_OK; } static inline int fwts_dt_stringlist_count( fwts_framework *fw, const void *fdt, int nodeoffset, const char *property) { FWTS_UNUSED(fw); FWTS_UNUSED(fdt); FWTS_UNUSED(nodeoffset); FWTS_UNUSED(property); return FWTS_OK; } #endif bool check_status_property_okay(fwts_framework *fw, const char *my_path, const char *my_prop_string, const char *property); int check_property_printable(fwts_framework *fw, const char *name, const char *buf, const size_t len); char *hidewhitespace(char *name); int get_proc_gen(fwts_framework *fw); #endif src/lib/include/fwts_dump.h000066400000000000000000000015651465205512700162350ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_DUMP_H__ #define __FWTS_DUMP_H__ #include "fwts.h" int fwts_dump_info(fwts_framework *fw); #endif src/lib/include/fwts_dump_data.h000066400000000000000000000022731465205512700172230ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_DUMP_DATA_H__ #define __FWTS_DUMP_DATA_H__ #include "fwts.h" void fwts_dump_raw_data(char *buffer, const size_t len, const uint8_t *data, const int where, const size_t bytes); void fwts_dump_raw_data_prefix(char *buffer, const size_t len, const uint8_t *data, const char *prefix, const size_t bytes); void fwts_hexdump_data_prefix_all(fwts_framework *fw, const uint8_t *data, const char *prefix, const size_t nbytes); #endif src/lib/include/fwts_ebda.h000066400000000000000000000015551465205512700161620ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_EBDA_H__ #define __FWTS_EBDA_H__ #include off_t fwts_ebda_get(void); #endif src/lib/include/fwts_efi_module.h000066400000000000000000000022201465205512700173650ustar00rootroot00000000000000/* * Copyright (C) 2012-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_EFI_MODULE_H__ #define __FWTS_EFI_MODULE_H__ int fwts_lib_efi_runtime_load_module(fwts_framework *fw); int fwts_lib_efi_runtime_unload_module(fwts_framework *fw); int fwts_lib_efi_runtime_open(void); int fwts_lib_efi_runtime_close(const int fd); int fwts_lib_efi_runtime_kernel_lockdown(fwts_framework *fw); int fwts_lib_efi_runtime_module_init(fwts_framework *fw, int *fd); #endif src/lib/include/fwts_efi_runtime.h000066400000000000000000000104171465205512700175720ustar00rootroot00000000000000/* * Copyright(C) 2016-2024 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _FWTS_EFI_RUNTIME_H_ #define _FWTS_EFI_RUNTIME_H_ typedef enum { EfiResetCold, EfiResetWarm, EfiResetShutdown, EfiResetPlatformSpecific } EFI_RESET_TYPE; typedef struct { uint32_t Data1; uint16_t Data2; uint16_t Data3; uint8_t Data4[8]; } __attribute__ ((packed)) EFI_GUID; typedef struct { uint16_t Year; /* 1900 – 9999 */ uint8_t Month; /* 1 – 12 */ uint8_t Day; /* 1 – 31 */ uint8_t Hour; /* 0 – 23 */ uint8_t Minute; /* 0 – 59 */ uint8_t Second; /* 0 – 59 */ uint8_t Pad1; uint32_t Nanosecond; /* 0 – 999,999,999 */ int16_t TimeZone; /* -1440 to 1440 or 2047 */ uint8_t Daylight; uint8_t Pad2; } __attribute__ ((packed)) EFI_TIME; typedef struct { uint32_t Resolution; uint32_t Accuracy; uint8_t SetsToZero; } __attribute__ ((packed)) EFI_TIME_CAPABILITIES; typedef struct { EFI_GUID CapsuleGuid; uint32_t HeaderSize; uint32_t Flags; uint32_t CapsuleImageSize; } __attribute__ ((packed)) EFI_CAPSULE_HEADER; struct efi_getvariable { uint16_t *VariableName; EFI_GUID *VendorGuid; uint32_t *Attributes; uint64_t *DataSize; void *Data; uint64_t *status; } __attribute__ ((packed)); struct efi_setvariable { uint16_t *VariableName; EFI_GUID *VendorGuid; uint32_t Attributes; uint64_t DataSize; void *Data; uint64_t *status; } __attribute__ ((packed)); struct efi_getnextvariablename { uint64_t *VariableNameSize; uint16_t *VariableName; EFI_GUID *VendorGuid; uint64_t *status; } __attribute__ ((packed)); struct efi_queryvariableinfo { uint32_t Attributes; uint64_t *MaximumVariableStorageSize; uint64_t *RemainingVariableStorageSize; uint64_t *MaximumVariableSize; uint64_t *status; } __attribute__ ((packed)); struct efi_gettime { EFI_TIME *Time; EFI_TIME_CAPABILITIES *Capabilities; uint64_t *status; } __attribute__ ((packed)); struct efi_settime { EFI_TIME *Time; uint64_t *status; } __attribute__ ((packed)); struct efi_getwakeuptime { uint8_t *Enabled; uint8_t *Pending; EFI_TIME *Time; uint64_t *status; } __attribute__ ((packed)); struct efi_setwakeuptime { uint8_t Enabled; EFI_TIME *Time; uint64_t *status; } __attribute__ ((packed)); struct efi_getnexthighmonotoniccount { uint32_t *HighCount; uint64_t *status; } __attribute__ ((packed)); struct efi_querycapsulecapabilities { EFI_CAPSULE_HEADER **CapsuleHeaderArray; uint64_t CapsuleCount; uint64_t *MaximumCapsuleSize; EFI_RESET_TYPE *ResetType; uint64_t *status; } __attribute__ ((packed)); /* ioctl calls that are permitted to the /dev/efi_runtime interface. */ #define EFI_RUNTIME_GET_VARIABLE \ _IOWR('p', 0x01, struct efi_getvariable) #define EFI_RUNTIME_SET_VARIABLE \ _IOW('p', 0x02, struct efi_setvariable) #define EFI_RUNTIME_GET_TIME \ _IOR('p', 0x03, struct efi_gettime) #define EFI_RUNTIME_SET_TIME \ _IOW('p', 0x04, struct efi_settime) #define EFI_RUNTIME_GET_WAKETIME \ _IOR('p', 0x05, struct efi_getwakeuptime) #define EFI_RUNTIME_SET_WAKETIME \ _IOW('p', 0x06, struct efi_setwakeuptime) #define EFI_RUNTIME_GET_NEXTVARIABLENAME \ _IOWR('p', 0x07, struct efi_getnextvariablename) #define EFI_RUNTIME_QUERY_VARIABLEINFO \ _IOR('p', 0x08, struct efi_queryvariableinfo) #define EFI_RUNTIME_GET_NEXTHIGHMONOTONICCOUNT \ _IOR('p', 0x09, struct efi_getnexthighmonotoniccount) #define EFI_RUNTIME_QUERY_CAPSULECAPABILITIES \ _IOR('p', 0x0A, struct efi_querycapsulecapabilities) #define EFI_RUNTIME_RESET_SYSTEM \ _IOW('p', 0x0B, struct efi_resetsystem) #define EFI_RUNTIME_GET_SUPPORTED_MASK \ _IOR('p', 0x0C, unsigned int) #endif /* _FWTS_EFI_RUNTIME_H_ */ src/lib/include/fwts_fileio.h000066400000000000000000000020401465205512700165240ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_FILEIO_H__ #define __FWTS_FILEIO_H__ #include #include fwts_list* fwts_file_read(FILE *fp); fwts_list* fwts_file_open_and_read(const char *file); fwts_list* fwts_gzfile_read(gzFile *fp); fwts_list* fwts_gzfile_open_and_read(const char *file); #endif src/lib/include/fwts_firmware.h000066400000000000000000000030511465205512700170740ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __FWTS_FIRMWARE_H__ #define __FWTS_FIRMWARE_H__ #include typedef enum { FWTS_FIRMWARE_UNKNOWN = 0, FWTS_FIRMWARE_BIOS = 1, FWTS_FIRMWARE_UEFI = 2, FWTS_FIRMWARE_OPAL = 3, FWTS_FIRMWARE_OTHER = 100 } fwts_firmware_type; typedef enum { FWTS_FW_FEATURE_ACPI = 0x1, FWTS_FW_FEATURE_DEVICETREE = 0x2, FWTS_FW_FEATURE_IPMI = 0x4, FWTS_FW_FEATURE_ALL = FWTS_FW_FEATURE_ACPI | FWTS_FW_FEATURE_DEVICETREE | FWTS_FW_FEATURE_IPMI } fwts_firmware_feature; fwts_firmware_type fwts_firmware_detect(void); int fwts_firmware_features(void); const char *fwts_firmware_feature_string(const fwts_firmware_feature features); static inline bool fwts_firmware_has_features(const fwts_firmware_feature features) { return (fwts_firmware_features() & features) == features; } #endif src/lib/include/fwts_formatting.h000066400000000000000000000016411465205512700174350ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_FORMATTING_H__ #define __FWTS_FORMATTING_H__ #include "fwts_list.h" fwts_list *fwts_format_text(const char *text, const size_t width); #endif src/lib/include/fwts_framework.h000066400000000000000000000244411465205512700172630ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_FRAMEWORK_H__ #define __FWTS_FRAMEWORK_H__ #include #include #include typedef struct fwts_framework fwts_framework; #include "fwts.h" #include "fwts_arch.h" #include "fwts_log.h" #include "fwts_list.h" #include "fwts_acpica_mode.h" #include "fwts_types.h" #include "fwts_firmware.h" #define FWTS_FRAMEWORK_MAGIC 0x2af61aec98b7315fULL typedef enum { FWTS_FLAG_DEFAULT = 0x00000000, FWTS_FLAG_STDOUT_SUMMARY = 0x00000001, FWTS_FLAG_SHOW_PROGRESS = 0x00000002, FWTS_FLAG_FORCE_CLEAN = 0x00000004, FWTS_FLAG_SHOW_TESTS = 0x00000008, FWTS_FLAG_SHOW_PROGRESS_DIALOG = 0x00000010, FWTS_FLAG_ACPICA_DEBUG = 0x00000020, FWTS_FLAG_DUMP = 0x00000040, FWTS_FLAG_BATCH = 0x00000100, FWTS_FLAG_INTERACTIVE = 0x00000200, FWTS_FLAG_BATCH_EXPERIMENTAL = 0x00000400, FWTS_FLAG_INTERACTIVE_EXPERIMENTAL = 0x00000800, FWTS_FLAG_POWER_STATES = 0x00001000, FWTS_FLAG_ROOT_PRIV = 0x00002000, FWTS_FLAG_UNSAFE = 0x00004000, FWTS_FLAG_FIRMWARE_VENDOR = 0x00008000, FWTS_FLAG_UEFI = 0x00020000, FWTS_FLAG_ACPI = 0x00040000, FWTS_FLAG_UTILS = 0x00080000, FWTS_FLAG_QUIET = 0x00100000, FWTS_FLAG_SHOW_TESTS_FULL = 0x00200000, FWTS_FLAG_SHOW_TESTS_CATEGORIES = 0x00400000, FWTS_FLAG_COMPLIANCE_ACPI = 0x00800000, FWTS_FLAG_SBBR = 0x01000000, FWTS_FLAG_EBBR = 0x02000000, FWTS_FLAG_XBBR = FWTS_FLAG_SBBR | FWTS_FLAG_EBBR } fwts_framework_flags; /* * Test results */ typedef struct { uint32_t passed; uint32_t failed; uint32_t aborted; uint32_t warning; uint32_t skipped; uint32_t infoonly; } fwts_results; /* * Where to schedule a test, priority sorted lowest first, highest last */ typedef enum { FWTS_TEST_FIRST = 0, FWTS_TEST_EARLY = 1, FWTS_TEST_ANYTIME = 2, FWTS_TEST_LATE = 3, FWTS_TEST_LAST = 4 } fwts_priority; static inline void fwts_results_zero(fwts_results *results) { memset(results, 0, sizeof(fwts_results)); } static inline void fwts_framework_summate_results(fwts_results *total, fwts_results *increment) { total->aborted += increment->aborted; total->failed += increment->failed; total->passed += increment->passed; total->warning += increment->warning; total->skipped += increment->skipped; total->infoonly += increment->infoonly; } /* * Test framework context */ struct fwts_framework { uint64_t magic; /* identify struct magic */ fwts_log *results; /* log for test results */ char *results_logname; /* filename of results log */ char *lspci; /* path to lspci */ char *acpi_table_path; /* path to raw ACPI tables */ char *acpi_table_acpidump_file; /* path to ACPI dump file */ char *clog; /* path to dump of coreboot log */ char *klog; /* path to dump of kernel log */ char *olog; /* path to OLOG */ char *json_data_path; /* path to application json data files, e.g. json klog data */ char *json_data_file; /* json file to use for olog analysis */ struct fwts_framework_test *current_major_test; /* current test */ void *rsdp; /* ACPI RSDP address */ void *fdt; /* Flattened device tree data */ const char *current_minor_test_name; /* Name of current minor test being run */ uint32_t current_minor_test_num; /* Nth minor test being run in a test module */ uint32_t current_major_test_num; /* Nth major test being currently run */ uint32_t major_tests_total; /* Total number of major tests */ uint32_t total_run; /* total number of major tests run */ uint32_t minor_test_progress; /* Percentage completion of current test */ fwts_results minor_tests; /* results for each minor test */ fwts_results total; /* totals over all tests */ fwts_framework_flags flags; fwts_log_level failed_level; /* Bit mask of failed levels in test run */ fwts_log_level filter_level; /* --log-level option filter */ fwts_firmware_type firmware_type; /* Type of firmware */ fwts_log_type log_type; /* Output log type, default is plain text ASCII */ fwts_list errors_filter_keep; /* Results to keep, empty = keep all */ fwts_list errors_filter_discard; /* Results to discard, empty = discard none */ fwts_acpica_mode acpica_mode; /* ACPICA mode flags */ fwts_pm_method pm_method; fwts_architecture host_arch; /* arch FWTS was built for */ fwts_architecture target_arch; /* arch being tested */ bool print_summary; /* Print summary of results at end of test runs */ bool error_filtered_out; /* True if a klog message has been filtered out */ bool show_progress; /* Show progress while running current test */ }; typedef struct { char *opt; /* option */ char *info; /* what it does */ } fwts_syntax_info; typedef int (*fwts_framework_minor_test_func)(fwts_framework *framework); typedef struct { fwts_framework_minor_test_func test_func;/* Minor test to run */ const char *name; /* Name of minor test */ } fwts_framework_minor_test; #include "fwts_args.h" typedef struct fwts_framework_ops { char *description; /* description of test */ int (*init)(fwts_framework *); /* Initialise */ int (*deinit)(fwts_framework *); /* De-init */ int (*getopts)(fwts_framework *, int argc, char **argv); /* Arg handling */ fwts_option *options; fwts_args_optarg_handler options_handler; fwts_args_optarg_check options_check; fwts_framework_minor_test *minor_tests; /* NULL terminated array of minor tests to run */ int total_tests; /* Number of tests to run */ } fwts_framework_ops; typedef struct fwts_framework_test { const char *name; fwts_framework_ops *ops; fwts_priority priority; fwts_framework_flags flags; fwts_firmware_feature fw_features; fwts_results results; /* Per test results */ bool was_run; } fwts_framework_test; int fwts_framework_args(const int argc, char **argv); void fwts_framework_test_add(const char *name, fwts_framework_ops *ops, const fwts_priority priority, const fwts_framework_flags flags, const fwts_firmware_feature fw_features); int fwts_framework_compare_test_name(void *, void *); void fwts_framework_show_version(FILE *fp, const char *name); void fwts_framework_passed(fwts_framework *, const char *fmt, ...) __attribute__((format(printf, 2, 3))); void fwts_framework_failed(fwts_framework *, fwts_log_level level, const char *fmt, ...) __attribute__((format(printf, 3, 4))); void fwts_framework_warning(fwts_framework *, const char *fmt, ...) __attribute__((format(printf, 2, 3))); void fwts_framework_advice(fwts_framework *, const char *fmt, ...) __attribute__((format(printf, 2, 3))); void fwts_framework_skipped(fwts_framework *, const char *fmt, ...) __attribute__((format(printf, 2, 3))); void fwts_framework_aborted(fwts_framework *, const char *fmt, ...) __attribute__((format(printf, 2, 3))); void fwts_framework_infoonly(fwts_framework *fw); void fwts_framework_minor_test_progress(fwts_framework *fw, const int percent, const char *message); void fwts_error_inc(fwts_framework *fw, const char *label, int *count); void fwts_framework_log(fwts_framework *fw, fwts_log_field field, const char *label, fwts_log_level level, uint32_t *count, const char *fmt, ...) __attribute__((format(printf, 6, 7))); #define fwts_progress(fw, percent) fwts_framework_minor_test_progress(fw, percent, "") #define fwts_progress_message(fw, percent, message) \ fwts_framework_minor_test_progress(fw, percent, message); /* Helpers to report tests results */ #define fwts_passed(fw, fmt, args...) \ fwts_framework_log(fw, LOG_PASSED, NULL, LOG_LEVEL_NONE, &fw->minor_tests.passed, fmt, ## args) #define fwts_failed(fw, level, label, fmt, args...) \ fwts_framework_log(fw, LOG_FAILED, label, level, &fw->minor_tests.failed, fmt, ## args) #define fwts_warning(fw, fmt, args...) \ fwts_framework_log(fw, LOG_WARNING, NULL, LOG_LEVEL_MEDIUM, &fw->minor_tests.warning, fmt, ## args) #define fwts_advice(fw, fmt, args...) \ fwts_framework_log(fw, LOG_ADVICE, NULL, LOG_LEVEL_NONE, NULL, fmt, ## args) #define fwts_skipped(fw, fmt, args...) \ fwts_framework_log(fw, LOG_SKIPPED, NULL, LOG_LEVEL_MEDIUM, &fw->minor_tests.skipped, fmt, ## args) #define fwts_aborted(fw, fmt, args...) \ fwts_framework_log(fw, LOG_ABORTED, NULL, LOG_LEVEL_MEDIUM, &fw->minor_tests.aborted, fmt, ## args) #define fwts_infoonly(fw) \ fwts_framework_log(fw, LOG_INFOONLY, NULL, LOG_LEVEL_NONE, &fw->minor_tests.infoonly, NULL) static inline int fwts_tests_passed(const fwts_framework *fw) { return ((fw->minor_tests.failed + fw->minor_tests.warning + fw->minor_tests.aborted) == 0); } /* * Batch (run w/o interaction) or interactive (requires user interaction) flags */ #define FWTS_TEST_INTERACTIVE(flags) \ (flags & (FWTS_FLAG_INTERACTIVE | \ FWTS_FLAG_INTERACTIVE_EXPERIMENTAL)) /* * FWTS_ASSERT(test, message) * compile time assertion that throws a division by zero * error to stop compilation if condition "test" is not true. * See http://www.pixelbeat.org/programming/gcc/static_assert.html * */ #define FWTS_CONCAT(a, b) a ## b #define FWTS_CONCAT_EXPAND(a,b) FWTS_CONCAT(a, b) #define FWTS_ASSERT(e, m) \ enum { FWTS_CONCAT_EXPAND(FWTS_ASSERT_ ## m ## _in_line_, __LINE__) = 1 / !!(e) } #define FWTS_REGISTER_FEATURES(name, ops, priority, flags, features) \ /* Ensure name is not too long */ \ FWTS_ASSERT(FWTS_ARRAY_SIZE(name) < 16, fwts_register_name_too_long); \ \ static void __test_init (void) __attribute__ ((constructor)); \ \ static void __test_init (void) \ { \ fwts_framework_test_add(name, ops, priority, flags, features); \ } #define FWTS_REGISTER(name, ops, priority, flags) \ FWTS_REGISTER_FEATURES(name, ops, priority, flags, 0) #define FWTS_LEVEL_IGNORE(fw, level) \ ((level) && !((level) & fw->filter_level)) #endif src/lib/include/fwts_get.h000066400000000000000000000016361465205512700160460ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_GET_H__ #define __FWTS_GET_H__ #include char *fwts_get(const char *file); int fwts_get_int(const char *file, int *value); #endif src/lib/include/fwts_gpe.h000066400000000000000000000027111465205512700160350ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_GPE_H__ #define __FWTS_GPE_H__ #include #include #include #include #include #include #define FWTS_GPE_PATH "/sys/firmware/acpi/interrupts" typedef struct { char *name; int count; } fwts_gpe; void fwts_gpe_free(fwts_gpe *gpe, const int count); int fwts_gpe_read(fwts_gpe **gpes); int fwts_gpe_delta(int **gpe_delta, const fwts_gpe *start, const fwts_gpe *end, const int n); int fwts_gpe_delta_get(fwts_framework *fw, const fwts_gpe *gpes_start, const fwts_gpe *gpes_end, const int gpe_count, int *sci, int *gpe); void fwts_gpe_test(fwts_framework *fw, const fwts_gpe *start, const fwts_gpe *end, const int n); #endif src/lib/include/fwts_guid.h000066400000000000000000000021561465205512700162150ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_GUID_H__ #define __FWTS_GUID_H__ #include #include void fwts_guid_buf_to_str(const uint8_t *guid, char *guid_str, const size_t guid_str_len); void fwts_guid_str_to_buf(const char *guid_str, uint8_t *guid, const size_t guid_len); bool fwts_guid_match(const uint8_t *guid, const uint8_t *guid2, const size_t guid_size); #endif src/lib/include/fwts_helpers.h000066400000000000000000000016441465205512700167300ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_HELPERS_H__ #define __FWTS_HELPERS_H__ int fwts_get(const char *text, const char *file); int fwts_set(const char *text, const char *file); #endif src/lib/include/fwts_hwinfo.h000066400000000000000000000026421465205512700165570ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_HWINFO_H__ #define __FWTS_HWINFO_H__ #include "fwts.h" typedef struct { fwts_list network; /* PCI network config */ fwts_list videocard; /* PCI video card config */ fwts_list netdevs; /* Network devices */ fwts_list input; /* Input device config */ fwts_list bluetooth; /* Bluetooth config */ fwts_list typec; /* USB type c config */ fwts_list scsi_disk; /* SCSI disk config */ fwts_list drm; /* DRM config */ } fwts_hwinfo; int fwts_hwinfo_get(fwts_framework *fw, fwts_hwinfo *hwinfo); void fwts_hwinfo_compare(fwts_framework *fw, fwts_hwinfo *hwinfo1, fwts_hwinfo *hwinfo2, int *differences); int fwts_hwinfo_free(fwts_hwinfo *hwinfo); #endif src/lib/include/fwts_iasl.h000066400000000000000000000025161465205512700162150ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __IASL_H__ #define __IASL_H__ #include "fwts.h" #include int fwts_iasl_init(fwts_framework *fw); void fwts_iasl_deinit(void); int fwts_iasl_disassemble_all_to_file(fwts_framework *fw, const char *path); int fwts_iasl_disassemble(fwts_framework *fw, const fwts_acpi_table_info *info, const bool use_externals, fwts_list **ias_output); int fwts_iasl_reassemble(fwts_framework *fw, const fwts_acpi_table_info *info, fwts_list **iasl_disassembly, fwts_list **iasl_stdout, fwts_list **iasl_stderr); const char *fwts_iasl_exception_level(uint8_t level); #endif src/lib/include/fwts_interactive.h000066400000000000000000000021031465205512700175720ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_INTERACTIVE_H__ #define __FWTS_INTERACTIVE_H__ #include "fwts_framework.h" int fwts_printf(fwts_framework *fw, const char *fmt, ...) __attribute__((format(printf, 2, 3))); int fwts_press_enter(fwts_framework *fw); int fwts_get_reply(fwts_framework *fw, const char *message, const char *options); #endif src/lib/include/fwts_ioport.h000066400000000000000000000021471465205512700166010ustar00rootroot00000000000000/* * Copyright (C) 2013-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_IO_PORT_H__ #define __FWTS_IO_PORT_H__ #include int fwts_inb(uint32_t port, uint8_t *value); int fwts_inw(uint32_t port, uint16_t *value); int fwts_inl(uint32_t port, uint32_t *value); int fwts_outb(uint32_t port, uint8_t value); int fwts_outw(uint32_t port, uint16_t value); int fwts_outl(uint32_t port, uint32_t value); #endif src/lib/include/fwts_ipmi.h000066400000000000000000000031541465205512700162220ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_IPMI_H__ #define __FWTS_IPMI_H__ #include "fwts.h" #define IPMI_DEV_IPMI_VERSION_MAJOR(x) \ (x & IPMI_DEV_IPMI_VER_MAJOR_MASK) #define IPMI_DEV_IPMI_VERSION_MINOR(x) \ ((x & IPMI_DEV_IPMI_VER_MINOR_MASK) >> IPMI_DEV_IPMI_VER_MINOR_SHIFT) #define IPMI_DEV_IPMI_VER_MAJOR_MASK (0x0F) #define IPMI_DEV_IPMI_VER_MINOR_MASK (0xF0) #define IPMI_DEV_IPMI_VER_MINOR_SHIFT (4) typedef struct fwts_ipmi_rsp { uint8_t completion_code; uint8_t device_id; uint8_t device_revision; uint8_t fw_rev1; uint8_t fw_rev2; uint8_t ipmi_version; uint8_t adtl_device_support; uint8_t manufacturer_id[3]; uint8_t product_id[2]; uint8_t aux_fw_rev[4]; } __attribute__((packed)) fwts_ipmi_rsp; int fwts_ipmi_base_query(fwts_ipmi_rsp *fwts_bmc_rsp); bool fwts_ipmi_present(int fwts_ipmi_flags); #endif src/lib/include/fwts_json.h000066400000000000000000000043001465205512700162270ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_JSON_H__ #define __FWTS_JSON_H__ /* * Minimal subset of json for fwts */ #define FWTS_JSON_ERROR(ptr) (!ptr) #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif /* * json types supported */ typedef enum { type_null, type_int, type_string, type_object, type_array, } json_type; /* * json object information */ typedef struct json_object { char *key; /* Null if undefined */ int length; /* Length of a collection of objects */ json_type type; /* Object type */ union { void *ptr; /* string or object array pointer */ int intval; /* integer value */ } u; } json_object; /* * minimal json c library functions as required by fwts */ json_object *json_object_from_file(const char *filename); json_object *json_object_object_get(json_object *obj, const char *key); int json_object_array_length(json_object *obj); json_object *json_object_array_get_idx(json_object *obj, int index); const char *json_object_get_string(json_object *obj); json_object *json_object_new_int(int); void json_object_object_add(json_object *obj, const char *key, json_object *value); json_object *json_object_new_object(void); json_object *json_object_new_array(void); char *json_object_to_json_string(json_object *obj); void json_object_put(json_object *obj); json_object *json_object_new_string(const char *str); int json_object_array_add(json_object *obj, json_object *item); #endif src/lib/include/fwts_kernel.h000066400000000000000000000015571465205512700165510ustar00rootroot00000000000000/* * Copyright (C) 2021-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_KERNEL_H__ #define __FWTS_KERNEL_H__ bool fwts_kernel_config_set(const char *config); #endif src/lib/include/fwts_keymap.h000066400000000000000000000021531465205512700165500ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_KEYMAP_H__ #define __FWTS_KEYMAP_H__ #define FWTS_KEYMAP_PATH "/lib/udev/keymaps" typedef struct { int scancode; char *keyname; char *keytext; } fwts_keycode; void fwts_keymap_free(fwts_list *keylist); fwts_list *fwts_keymap_load(const char *machine); fwts_keycode *fwts_keymap_find_scancode(fwts_list *keymap, const int scancode); #endif src/lib/include/fwts_klog.h000066400000000000000000000043051465205512700162170ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_KLOG_H__ #define __FWTS_KLOG_H__ #include #include #include "fwts_list.h" #include "fwts_framework.h" #include "fwts_log.h" #include "fwts_json.h" #define KERN_WARNING 0x00000001 #define KERN_ERROR 0x00000002 typedef void (*fwts_klog_progress_func)(fwts_framework *fw, int percent); typedef void (*fwts_klog_scan_func)(fwts_framework *fw, char *line, int repeated, char *prevline, void *private, int *errors); int fwts_klog_scan(fwts_framework *fw, fwts_list *klog, fwts_klog_scan_func callback, fwts_klog_progress_func progress, void *private, int *errors); void fwts_klog_scan_patterns(fwts_framework *fw, char *line, int repeated, char *prevline, void *private, int *errors); fwts_list *fwts_klog_read(void); fwts_list *fwts_klog_find_changes(fwts_list *klog_old, fwts_list *klog_new); void fwts_klog_free(fwts_list *list); int fwts_klog_firmware_check(fwts_framework *fw, fwts_klog_progress_func progress, fwts_list *klog, int *errors); int fwts_klog_pm_check(fwts_framework *fw, fwts_klog_progress_func progress, fwts_list *klog, int *errors); int fwts_klog_regex_find(fwts_framework *fw, fwts_list *klog, char *pattern); char *fwts_klog_remove_timestamp(char *text); int fwts_klog_write(fwts_framework *fw, const char *msg); fwts_compare_mode fwts_klog_compare_mode_str_to_val(const char *str); char *fwts_klog_unique_label(const char *str); #endif src/lib/include/fwts_list.h000066400000000000000000000052771465205512700162470ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_LIST_H__ #define __FWTS_LIST_H__ #include #include #include typedef struct fwts_list_link { void *data; struct fwts_list_link *next; } fwts_list_link; typedef struct { fwts_list_link *head; fwts_list_link *tail; int len; } fwts_list; typedef void (*fwts_list_link_free)(void *); typedef void (*fwts_list_foreach_callback)(void *data, void *private); typedef int (fwts_list_compare)(void *data1, void *data2); #define FWTS_LIST_INIT { NULL, NULL, 0 } #define fwts_list_foreach(iterator, list) \ for (iterator = (list)->head; iterator != NULL; iterator = iterator->next) #define fwts_list_foreach_continue(iterator) \ for (; iterator != NULL; iterator = iterator->next) #define fwts_list_data(type, link) \ ((type)link->data) #define fwts_list_head(list) \ ((list)->head) #define fwts_list_tail(list) \ ((list)->tail) #define fwts_list_next(link) \ ((link)->next) #define fwts_list_null(list) \ ((list) == NULL) void fwts_list_free_items(fwts_list *list, fwts_list_link_free data_free); void fwts_list_free(fwts_list *list, fwts_list_link_free data_free); void fwts_list_iterate(fwts_list *list, fwts_list_foreach_callback callback, void *private); fwts_list_link *fwts_list_append(fwts_list *list, void *data); fwts_list_link *fwts_list_add_ordered(fwts_list *list, void *new_data, fwts_list_compare compare); /* * fwts_list_init() * initialize a list header */ static inline void fwts_list_init(fwts_list *list) { memset(list, 0, sizeof(fwts_list)); } /* * fwts_list_new() * allocate and initialise a list header, return NULL if failed */ static inline fwts_list *fwts_list_new(void) { /* calloc already zero's the list */ return calloc(1, sizeof(fwts_list)); } /* * fwts_list_len() * return list length, return 0 if list is NULL */ static inline int fwts_list_len(fwts_list *list) { return list ? list->len : 0; } #endif src/lib/include/fwts_log.h000066400000000000000000000160431465205512700160460ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_LOG_H__ #define __FWTS_LOG_H__ #include #include #include "fwts_framework.h" #include "fwts_list.h" #define LOG_MAGIC (0xfe23ab13cb1ef754ULL) #define LOG_MAX_BUF_SIZE (4096) /* Max output per log line */ typedef enum { LOG_NO_FIELD = 0x00000000, LOG_RESULT = 0x00000001, LOG_ERROR = 0x00000002, LOG_WARNING = 0x00000004, LOG_DEBUG = 0x00000008, LOG_INFO = 0x00000010, LOG_SUMMARY = 0x00000020, LOG_SEPARATOR = 0x00000040, LOG_NEWLINE = 0x00000080, LOG_ADVICE = 0x00000100, LOG_HEADING = 0x00000200, LOG_PASSED = 0x00000400, LOG_FAILED = 0x00000800, LOG_SKIPPED = 0x00001000, LOG_ABORTED = 0x00002000, LOG_INFOONLY = 0x00004000, /* no-op */ LOG_FIELD_MASK = 0x0000ffff, LOG_VERBATUM = 0x10000000, LOG_NO_FIELDS = 0x20000000 } fwts_log_field; typedef enum { LOG_LEVEL_NONE = 0x00000000, LOG_LEVEL_CRITICAL = 0x00000001, LOG_LEVEL_HIGH = 0x00000002, LOG_LEVEL_MEDIUM = 0x00000004, LOG_LEVEL_LOW = 0x00000008, LOG_LEVEL_INFO = 0x00000010, LOG_LEVEL_ALL = 0x0000001f } fwts_log_level; /* * different types of log file */ typedef enum { LOG_TYPE_NONE = 0x00000000, LOG_TYPE_PLAINTEXT = 0x00000001, LOG_TYPE_JSON = 0x00000002, LOG_TYPE_XML = 0x00000004, LOG_TYPE_HTML = 0x00000008 } fwts_log_type; /* * different types of output log */ typedef enum { LOG_FILENAME_TYPE_STDOUT = 0x00000001, /* log output to stdout */ LOG_FILENAME_TYPE_STDERR = 0x00000002, /* log output to stderr */ LOG_FILENAME_TYPE_FILE = 0x00000003 /* log output to a file */ } fwts_log_filename_type; /* * top level log descriptor */ typedef struct log_t { uint64_t magic; /* magic ID of the log */ fwts_list log_files; /* list of fwts_log_file */ char *owner; /* who is writing to this log */ } fwts_log; /* * info for a specific log type */ typedef struct { FILE *fp; /* file descriptor for log */ uint32_t line_number; /* keeps track of the line numbering */ fwts_log *log; /* parent log struct */ fwts_log_type type; /* log type */ fwts_log_filename_type filename_type; /* log filename type */ struct fwts_log_ops_t *ops; /* log operators */ int line_width; /* width of log in chars */ } fwts_log_file; typedef struct fwts_log_ops_t { int (*print)(fwts_log_file *log_file, const fwts_log_field field, const fwts_log_level level, const char *status, const char *label, const char *prefix, const char *buffer); void (*underline)(fwts_log_file *log_file, int ch); void (*newline)(fwts_log_file *log_file); void (*section_begin)(fwts_log_file *log_file, const char *tag); void (*section_end)(fwts_log_file *log_file); void (*open)(fwts_log_file *log_file); void (*close)(fwts_log_file *log_file); } fwts_log_ops; extern fwts_log_ops fwts_log_plaintext_ops; extern fwts_log_ops fwts_log_json_ops; extern fwts_log_ops fwts_log_xml_ops; extern fwts_log_ops fwts_log_html_ops; extern fwts_log_field fwts_log_filter; extern const char *fwts_log_format; fwts_log *fwts_log_open(const char* owner, const char *name, const char *mode, const fwts_log_type); int fwts_log_close(fwts_log *log); int fwts_log_printf(const fwts_framework *fw, const fwts_log_field field, const fwts_log_level level, const char *status, const char *label, const char *prefix, const char *fmt, ...) __attribute__((format(printf, 7, 8))); void fwts_log_newline(fwts_log *log); void fwts_log_underline(fwts_log *log, const int ch); void fwts_log_set_field_filter(char *str); int fwts_log_set_owner(fwts_log *log, const char *owner); void fwts_log_set_format(const char *str); void fwts_log_print_fields(void); void fwts_log_filter_set_field(const fwts_log_field filter); void fwts_log_filter_unset_field(const fwts_log_field filter); int fwts_log_str_to_level(const char *str); fwts_log_field fwts_log_str_to_field(const char *text); char *fwts_log_level_to_str(const fwts_log_level level); char *fwts_log_field_to_str(const fwts_log_field field); char *fwts_log_field_to_str_full(const fwts_log_field field); char *fwts_log_field_to_str_upper(const fwts_log_field field); void fwts_log_set_line_width(const int width); void fwts_log_section_begin(fwts_log *log, const char *name); void fwts_log_section_end(fwts_log *log); char *fwts_log_get_filenames(const char *filename, const fwts_log_type type); fwts_log_filename_type fwts_log_get_filename_type(const char *name); void _fwts_log_info_simp_int(const fwts_framework *fw, const char *message, uint8_t size, uint64_t value); static inline int fwts_log_type_count(fwts_log_type type) { return __builtin_popcount(type); } #define fwts_log_result(fw, fmt, args...) \ fwts_log_printf(fw, LOG_RESULT, LOG_LEVEL_NONE, "", "", "", fmt, ## args) #define fwts_log_warning(fw, fmt, args...) \ fwts_log_printf(fw, LOG_WARNING, LOG_LEVEL_NONE, "", "", "", fmt, ## args) #define fwts_log_warning_verbatim(fw, fmt, args...) \ fwts_log_printf(fw, LOG_WARNING | LOG_VERBATUM, LOG_LEVEL_NONE, "", "", "", fmt, ## args) #define fwts_log_error(fw, fmt, args...) \ fwts_log_printf(fw, LOG_ERROR, LOG_LEVEL_NONE, "", "", "", fmt, ## args) #define fwts_log_error_verbatim(fw, fmt, args...) \ fwts_log_printf(fw, LOG_ERROR | LOG_VERBATUM, LOG_LEVEL_NONE, "", "", "", fmt, ## args) #define fwts_log_info(fw, fmt, args...) \ fwts_log_printf(fw, LOG_INFO, LOG_LEVEL_NONE, "", "", "", fmt, ## args) #define fwts_log_info_verbatim(fw, fmt, args...) \ fwts_log_printf(fw, LOG_INFO | LOG_VERBATUM, LOG_LEVEL_NONE, "", "", "", fmt, ## args) #define fwts_log_summary(fw, fmt, args...) \ fwts_log_printf(fw, LOG_SUMMARY, LOG_LEVEL_NONE, "", "", "", fmt, ## args) #define fwts_log_summary_verbatim(fw, fmt, args...) \ fwts_log_printf(fw, LOG_SUMMARY | LOG_VERBATUM, LOG_LEVEL_NONE, "", "", "", fmt, ## args) #define fwts_log_advice(fw, fmt, args...) \ fwts_log_printf(fw, LOG_ADVICE, LOG_LEVEL_NONE, "", "", "", fmt, ## args) #define fwts_log_heading(fw, fmt, args...) \ fwts_log_printf(fw, LOG_HEADING, LOG_LEVEL_NONE, "", "", "", fmt, ## args) #define fwts_log_nl(fw) \ fwts_log_printf(fw, LOG_NEWLINE, LOG_LEVEL_NONE, "", "", "", "%s", "") #define fwts_log_info_simp_int(fw, message, value) \ _fwts_log_info_simp_int(fw, message, sizeof(value), value) #endif src/lib/include/fwts_log_scan.h000066400000000000000000000047061465205512700170550ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_LOG_SCAN_H__ #define __FWTS_LOG_SCAN_H__ #include #include "fwts_json.h" typedef enum { FWTS_COMPARE_REGEX = 'r', FWTS_COMPARE_STRING = 's', FWTS_COMPARE_UNKNOWN = 'u' } fwts_compare_mode; typedef struct { fwts_compare_mode compare_mode; fwts_log_level level; const char *pattern; const char *advice; char *label; regex_t compiled; bool compiled_ok; } fwts_log_pattern; typedef void (*fwts_log_progress_func)(fwts_framework *fw, int percent); typedef void (*fwts_log_scan_func)(fwts_framework *fw, char *line, int repeated, char *prevline, void *private, int *errors); void fwts_log_free(fwts_list *list); fwts_list *fwts_log_find_changes(fwts_list *log_old, fwts_list *log_new); char *fwts_log_remove_timestamp(char *text); int fwts_log_scan(fwts_framework *fw, fwts_list *log, fwts_log_scan_func callback, fwts_log_progress_func progress, void *private, int *errors, bool remove_timestamp); char *fwts_log_unique_label(const char *str, const char *label); void fwts_log_scan_patterns(fwts_framework *fw, char *line, int repeated, char *prevline, void *private, int *errors, const char *name, const char *advice); fwts_compare_mode fwts_log_compare_mode_str_to_val(const char *str); const char *fwts_json_str(fwts_framework *fw, const char *table, int index, json_object *obj, const char *key, bool log_error); int fwts_log_check(fwts_framework *fw, const char *table, fwts_log_scan_func fwts_log_scan_patterns, fwts_log_progress_func progress, fwts_list *log, int *errors, const char *json_data_path, const char *label, bool remove_timestamp); int fwts_log_regex_find(fwts_framework *fw, fwts_list *log, char *pattern, bool remove_timestamp); #endif src/lib/include/fwts_memorymap.h000066400000000000000000000034741465205512700172770ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corporation * Copyright (C) 2010-2024 Canonical * * This file was originally part of the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __FWTS_FWTS_MEMORY_MAP_H__ #define __FWTS_FWTS_MEMORY_MAP_H__ #include "fwts_types.h" #include "fwts_list.h" #include "fwts_framework.h" #define FWTS_MEMORY_MAP_UNKNOWN 0 #define FWTS_MEMORY_MAP_RESERVED 1 #define FWTS_MEMORY_MAP_ACPI 2 #define FWTS_MEMORY_MAP_USABLE 16 typedef struct { uint64_t start_address; uint64_t end_address; int type; } fwts_memory_map_entry; int fwts_memory_map_type(fwts_list *memory_map_list, const uint64_t memory); fwts_bool fwts_memory_map_is_reserved(fwts_list *memory_map_list, const uint64_t memory); fwts_list *fwts_memory_map_table_load(fwts_framework *fw); void fwts_memory_map_table_free(fwts_list *memory_map_list); void fwts_memory_map_table_dump(fwts_framework *fw, fwts_list *memory_map_list); const char *fwts_memory_map_name(const int type); fwts_memory_map_entry *fwts_memory_map_info(fwts_list *memory_map_list, const uint64_t memory); #endif src/lib/include/fwts_mmap.h000066400000000000000000000017501465205512700162160ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_MMAP_H__ #define __FWTS_MMAP_H__ #include #include size_t fwts_page_size(void); void *fwts_mmap(const off_t start, const size_t size); int fwts_munmap(void *mem, const size_t size); #endif src/lib/include/fwts_modprobe.h000066400000000000000000000020531465205512700170700ustar00rootroot00000000000000/* * Copyright (C) 2020-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_MODPROBE_H__ #define __FWTS_MODPROBE_H__ #include "fwts_framework.h" int fwts_module_loaded(fwts_framework *fw, const char *module, bool *loaded); int fwts_module_load(fwts_framework *fw, const char *module); int fwts_module_unload(fwts_framework *fw, const char *module); #endif src/lib/include/fwts_multiproc.h000066400000000000000000000072721465205512700173070ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_MULTIPROC_H__ #define __FWTS_MULTIPROC_H__ #define FWTS_MP_HEADER_SIGNATURE "PCMP" /* * Structures as described in version 1.4 of the * Intel MultiProcessor Specification, May 1997 */ typedef enum { FWTS_MP_CPU_ENTRY = 0, FWTS_MP_BUS_ENTRY = 1, FWTS_MP_IO_APIC_ENTRY = 2, FWTS_MP_IO_INTERRUPT_ENTRY = 3, FWTS_MP_LOCAL_INTERRUPT_ENTRY = 4, FWTS_MP_SYS_ADDR_ENTRY = 128, FWTS_MP_BUS_HIERARCHY_ENTRY = 129, FWTS_MP_COMPAT_BUS_ADDRESS_SPACE_ENTRY = 130 } fwts_mp_types; typedef struct { uint8_t signature[4]; uint32_t phys_address; uint8_t length; uint8_t spec_rev; uint8_t checksum; uint8_t mp_feature_bytes[5]; } __attribute__ ((packed)) fwts_mp_floating_header; typedef struct { uint8_t signature[4]; uint16_t base_table_length; uint8_t spec_rev; uint8_t checksum; uint8_t oem_id[8]; uint8_t product_id[12]; uint32_t oem_table_ptr; uint16_t oem_table_size; uint16_t entry_count; uint32_t lapic_address; uint16_t extended_table_length; uint8_t extended_table_checksum; uint8_t reserved; } __attribute__ ((packed)) fwts_mp_config_table_header; typedef struct { uint8_t entry_type; uint8_t local_apic_id; uint8_t local_apic_version; uint8_t cpu_flags; uint32_t cpu_signature; uint32_t feature_flags; uint32_t reserved[2]; } __attribute__ ((packed)) fwts_mp_processor_entry; typedef struct { uint8_t entry_type; uint8_t bus_id; uint8_t bus_type[6]; } __attribute__ ((packed)) fwts_mp_bus_entry; typedef struct { uint8_t entry_type; uint8_t id; uint8_t version; uint8_t flags; uint32_t address; } __attribute__ ((packed)) fwts_mp_io_apic_entry; typedef struct { uint8_t entry_type; uint8_t type; uint16_t flags; uint8_t source_bus_id; uint8_t source_bus_irq; uint8_t destination_io_apic_id; uint8_t destination_io_apic_intin; } __attribute__ ((packed)) fwts_mp_io_interrupt_entry; typedef struct { uint8_t entry_type; uint8_t type; uint16_t flags; uint8_t source_bus_id; uint8_t source_bus_irq; uint8_t destination_local_apic_id; uint8_t destination_local_apic_intin; } __attribute__ ((packed)) fwts_mp_local_interrupt_entry; typedef struct { uint8_t entry_type; uint8_t length; uint8_t bus_id; uint8_t address_type; uint64_t address_base; uint64_t address_length; } __attribute__ ((packed)) fwts_mp_system_address_space_entry; typedef struct { uint8_t entry_type; uint8_t length; uint8_t bus_id; uint8_t bus_info; uint8_t parent_bus; uint8_t reserved[3]; } __attribute__ ((packed)) fwts_mp_bus_hierarchy_entry; typedef struct { uint8_t entry_type; uint8_t length; uint8_t bus_id; uint8_t address_mod; uint32_t range_list; } __attribute__ ((packed)) fwts_mp_compat_bus_address_space_entry; typedef struct { fwts_mp_config_table_header *header; int size; fwts_list entries; uint32_t phys_addr; } fwts_mp_data; int fwts_mp_data_get(fwts_mp_data *data); int fwts_mp_data_free(fwts_mp_data *data); #endif src/lib/include/fwts_olog.h000066400000000000000000000023261465205512700162240ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_OLOG_H__ #define __FWTS_OLOG_H__ #include #include #include "fwts_list.h" #include "fwts_framework.h" #include "fwts_log.h" fwts_list *fwts_olog_read(fwts_framework *fw); typedef void (*fwts_olog_progress_func)(fwts_framework *fw, int percent); int fwts_olog_firmware_check(fwts_framework *fw, fwts_olog_progress_func progress, fwts_list *olog, int *errors); #endif src/lib/include/fwts_oops.h000066400000000000000000000016501465205512700162430ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_OOPS_H__ #define __FWTS_OOPS_H__ #include int fwts_oops_check(fwts_framework *fw, fwts_list *klog, int *oopses, int *warn_ons); #endif src/lib/include/fwts_pci.h000066400000000000000000000203271465205512700160400ustar00rootroot00000000000000/* * Copyright (C) 2013-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __PCI_H__ #define __PCI_H__ /* * PCI specific definitions */ #define FWTS_PCI_DEV_PATH "/sys/bus/pci/devices" #define FWTS_PCI_CAPABILITIES_LAST_ID (0x00) #define FWTS_PCI_EXPRESS_CAP_ID (0x10) #define FWTS_PCI_CAPABILITIES_NEXT_POINTER (0x01) #define FWTS_PCI_CAPABILITIES_DEV_CTRL (0x08) /* Offsets common on PCI type 0,1,2 config space header */ #define FWTS_PCI_CONFIG_VENDOR_ID (0x00) #define FWTS_PCI_CONFIG_DEVICE_ID (0x02) #define FWTS_PCI_CONFIG_COMMAND (0x04) #define FWTS_PCI_CONFIG_STATUS (0x06) #define FWTS_PCI_CONFIG_REVISION_ID (0x08) #define FWTS_PCI_CONFIG_PROG_IF (0x09) #define FWTS_PCI_CONFIG_SUBCLASS (0x0a) #define FWTS_PCI_CONFIG_CLASS_CODE (0x0b) #define FWTS_PCI_CONFIG_CACHE_LINE_SIZE (0x0c) #define FWTS_PCI_CONFIG_LATENCY_TIMER (0x0d) #define FWTS_PCI_CONFIG_HEADER_TYPE (0x0e) #define FWTS_PCI_CONFIG_BIST (0x0f) /* Offsets in PCI Type 0 Non-Bridge config space header */ #define FWTS_PCI_CONFIG_TYPE0_BAR0 (0x10) #define FWTS_PCI_CONFIG_TYPE0_BAR1 (0x14) #define FWTS_PCI_CONFIG_TYPE0_BAR2 (0x18) #define FWTS_PCI_CONFIG_TYPE0_BAR3 (0x1c) #define FWTS_PCI_CONFIG_TYPE0_BAR4 (0x20) #define FWTS_PCI_CONFIG_TYPE0_BAR5 (0x24) #define FWTS_PCI_CONFIG_TYPE0_CARDBUS_CIS_POINTER (0x28) #define FWTS_PCI_CONFIG_TYPE0_SUBSYSTEM_VENDOR_ID (0x2c) #define FWTS_PCI_CONFIG_TYPE0_SUBSYSTEM_ID (0x2e) #define FWTS_PCI_CONFIG_TYPE0_EXPENSION_ROM_ADDRESS (0x30) #define FWTS_PCI_CONFIG_TYPE0_CAPABILITIES_POINTER (0x34) #define FWTS_PCI_CONFIG_TYPE0_INTERRUPT_LINE (0x3c) #define FWTS_PCI_CONFIG_TYPE0_INTERRUPT_PIN (0x3d) #define FWTS_PCI_CONFIG_TYPE0_MIN_GRANT (0x3e) #define FWTS_PCI_CONFIG_TYPE0_MAX_LATENCY (0x3f) /* Offsets in PCI Type 1 PCI-to-PCI bridge config space header */ #define FWTS_PCI_CONFIG_TYPE1_BAR0 (0x10) #define FWTS_PCI_CONFIG_TYPE1_BAR1 (0x14) #define FWTS_PCI_CONFIG_TYPE1_PRIMARY_BUS_NUMBER (0x18) #define FWTS_PCI_CONFIG_TYPE1_SECONDARY_BUS_NUMBER (0x19) #define FWTS_PCI_CONFIG_TYPE1_SUBORDINATE_BUS_NUMBER (0x1a) #define FWTS_PCI_CONFIG_TYPE1_SECONDARY_LATENCY_TIMER (0x1b) #define FWTS_PCI_CONFIG_TYPE1_IO_BASE (0x1c) #define FWTS_PCI_CONFIG_TYPE1_IO_LIMIT (0x1d) #define FWTS_PCI_CONFIG_TYPE1_SECONDARY_STATUS (0x1e) #define FWTS_PCI_CONFIG_TYPE1_MEMORY_BASE (0x20) #define FWTS_PCI_CONFIG_TYPE1_MEMORY_LIMIT (0x22) #define FWTS_PCI_CONFIG_TYPE1_PREFETCHABLE_MEMORY_BASE (0x24) #define FWTS_PCI_CONFIG_TYPE1_PREFETCHABLE_MEMORY_LIMIT (0x26) #define FWTS_PCI_CONFIG_TYPE1_PREFETCABLE_BASE_UPPER32 (0x28) #define FWTS_PCI_CONFIG_TYPE1_PREFETCABLE_LIMIT_UPPER32 (0x2c) #define FWTS_PCI_CONFIG_TYPE1_IO_BASE_UPPER16 (0x30) #define FWTS_PCI_CONFIG_TYPE1_IO_LIMIT_UPPER16 (0x32) #define FWTS_PCI_CONFIG_TYPE1_CAPABILITY_POINTER (0x34) #define FWTS_PCI_CONFIG_TYPE1_EXPANSION_ROM_ADDRESS (0x38) #define FWTS_PCI_CONFIG_TYPE1_INTERRUPT_LINE (0x3c) #define FWTS_PCI_CONFIG_TYPE1_INTERRUPT_PIN (0x3d) #define FWTS_PCI_CONFIG_TYPE1_BRIDGE_CONTROL (0x3e) /* Offsets in PCI Type 2 PCI-to-CardBus bridge config space header */ #define FWTS_PCI_CONFIG_TYPE2_CARDBUS_BASE_ADDRESS (0x10) #define FWTS_PCI_CONFIG_TYPE2_CAPABILITY_POINTER (0x14) #define FWTS_PCI_CONFIG_TYPE2_SECONDARY_STATUS (0x16) #define FWTS_PCI_CONFIG_TYPE2_PCI_BUS_NUMBER (0x18) #define FWTS_PCI_CONFIG_TYPE2_CARDBUS_BUS_NUMBER (0x19) #define FWTS_PCI_CONFIG_TYPE2_SUBORDINATE_BUS_NUMBER (0x1a) #define FWTS_PCI_CONFIG_TYPE2_CARDBUS_LATENCY_TIMER (0x1b) #define FWTS_PCI_CONFIG_TYPE2_MEMORY_BASE_ADDRESS0 (0x1c) #define FWTS_PCI_CONFIG_TYPE2_MEMORY_LIMIT0 (0x20) #define FWTS_PCI_CONFIG_TYPE2_MEMORY_BASE_ADDRESS1 (0x24) #define FWTS_PCI_CONFIG_TYPE2_MEMORY_LIMIT1 (0x28) #define FWTS_PCI_CONFIG_TYPE2_IO_BASE_ADDRESS0 (0x2c) #define FWTS_PCI_CONFIG_TYPE2_IO_BASE_LIMIT0 (0x30) #define FWTS_PCI_CONFIG_TYPE2_IO_BASE_ADDRESS1 (0x34) #define FWTS_PCI_CONFIG_TYPE2_IO_BASE_LIMIT1 (0x38) #define FWTS_PCI_CONFIG_TYPE2_INTERRUPT_LINE (0x3c) #define FWTS_PCI_CONFIG_TYPE2_INTERRUPT_PIN (0x3d) #define FWTS_PCI_CONFIG_TYPE2_BRIDGE_CONTROL (0x3e) #define FWTS_PCI_CONFIG_TYPE2_SUBSYSTEM_DEVICE_ID (0x40) #define FWTS_PCI_CONFIG_TYPE2_SUBSYSTEM_VENDOR_ID (0x42) #define FWTS_PCI_CONFIG_TYPE2_LEGACY_MODE_BASE_ADDRESS (0x44) /* PCI config device port type */ #define FWTS_PCI_EXP_FLAGS_TYPE 0x00f0 #define FWTS_PCI_EXP_TYPE_ENDPOINT (0x0) #define FWTS_PCI_EXP_TYPE_LEGACY_ENDPOINT (0x1) #define FWTS_PCI_EXP_TYPE_ROOT_PORT (0x4) #define FWTS_PCI_EXP_TYPE_UPSTREAM_PORT (0x5) #define FWTS_PCI_EXP_TYPE_DOWNSTREAM_PORT (0x6) #define FWTS_PCI_EXP_TYPE_PCI_BRIDGE (0x7) #define FWTS_PCI_EXP_TYPE_PCIE_BRIDGE (0x8) #define FWTS_PCI_EXP_TYPE_RC_ENDPOINT (0x9) #define FWTS_PCI_EXP_TYPE_RC_EVENT_COLLECTOR (0xa) /* PCI config header types */ #define FWTS_PCI_CONFIG_HEADER_TYPE_NON_BRIDGE (0x00) #define FWTS_PCI_CONFIG_HEADER_TYPE_PCI_BRIDGE (0x01) #define FWTS_PCI_CONFIG_HEADER_TYPE_CARDBUS_BRIDGE (0x02) /* PCI config BAR types */ #define FWTS_PCI_CONFIG_BAR_MEM (0x00) #define FWTS_PCI_CONFIG_BAR_IO (0x01) #define FWTS_PCI_CONFIG_BAR_PREFETCHABLE (0x08) /* PCI config BAR address types */ #define FWTS_PCI_CONFIG_BAR_TYPE_ADDR_32BIT (0x00) #define FWTS_PCI_CONFIG_BAR_TYPE_ADDR_16BIT (0x01) #define FWTS_PCI_CONFIG_BAR_TYPE_ADDR_64BIT (0x02) /* PCI class codes */ #define FWTS_PCI_CLASS_CODE_HOST_BRIDGE (0x00) #define FWTS_PCI_CLASS_CODE_MASS_STORAGE_CONTOLLER (0x01) #define FWTS_PCI_CLASS_CODE_NETWORK_CONTROLLER (0x02) #define FWTS_PCI_CLASS_CODE_DISPLAY_CONTROLLER (0x03) #define FWTS_PCI_CLASS_CODE_MULTIMEDIA_CONTROLLER (0x04) #define FWTS_PCI_CLASS_CODE_MEMORY_CONTROLLER (0x05) #define FWTS_PCI_CLASS_CODE_BRIDGE_CONTROLLER (0x06) #define FWTS_PCI_CLASS_CODE_SIMPLE_COMMS_CONTROLLER (0x07) #define FWTS_PCI_CLASS_CODE_BASE_SYSTEM_PERIPHERALS (0x08) #define FWTS_PCI_CLASS_CODE_INPUT_DEVICE (0x09) #define FWTS_PCI_CLASS_CODE_DOCKING_STATION (0x0a) #define FWTS_PCI_CLASS_CODE_PROCESSOR (0x0b) #define FWTS_PCI_CLASS_CODE_SERIAL_BUS_CONTROLLER (0x0c) #define FWTS_PCI_CLASS_CODE_WIRELESS_CONTROLLER (0x0d) #define FWTS_PCI_CLASS_CODE_INTELLIGENT_IO_CONTROLLER (0x0e) #define FWTS_PCI_CLASS_CODE_SATELLITE_COMMS_CONTROLLER (0x0f) #define FWTS_PCI_CLASS_CODE_CRYPTO_CONTROLLER (0x10) #define FWTS_PCI_CLASS_CODE_SIGNAL_PROC_CONTROLLER (0x11) #define FWTS_PCI_CLASS_CODE_NO_CLASSICATION (0xff) /* Just a handful of sub-class codes */ #define FWTS_PCI_SUBCLASS_CODE_HOST_BRIDGE (0x00) #define FWTS_PCI_SUBCLASS_CODE_PCI_TO_PCI_BRIDGE (0x04) #define FWTS_PCI_SUBCLASS_CODE_OTHER_SYSTEM_PERIPHERAL (0x80) #define FWTS_PCI_SUBCLASS_CODE_AUDIO_DEVICE (0x03) /* PCI Vendor IDs */ #define FWTS_PCI_INTEL_VENDOR_ID (0x8086) /* * PCI Express Capability Structure is defined in Section 7.8 * of PCI Express®i Base Specification Revision 2.0 */ typedef struct { uint8_t pcie_cap_id; uint8_t next_cap_point; uint16_t pcie_cap_reg; uint32_t device_cap; uint16_t device_contrl; uint16_t device_status; uint32_t link_cap; uint16_t link_contrl; uint16_t link_status; uint32_t slot_cap; uint16_t slot_contrl; uint16_t slot_status; uint16_t root_contrl; uint16_t root_cap; uint32_t root_status; uint32_t device_cap2; uint16_t device_contrl2; uint16_t device_status2; uint32_t link_cap2; uint16_t link_contrl2; uint16_t link_status2; uint32_t slot_cap2; uint16_t slot_contrl2; uint16_t slot_status2; } __attribute__ ((packed)) fwts_pcie_capability; typedef struct { uint8_t segment; uint8_t bus; uint8_t dev; uint8_t func; uint8_t config[256]; } fwts_pci_device; const char *fwts_pci_description(const uint8_t class_code, const uint8_t subclass_code); #endif src/lib/include/fwts_pipeio.h000066400000000000000000000040131465205512700165440ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_PIPEIO_H__ #define __FWTS_PIPEIO_H__ #include #include #include #include #include #include "fwts.h" #define FWTS_EXEC_ERROR (127) int fwts_pipe_open_ro(const char *command, pid_t *childpid, int *fd); int fwts_pipe_open_rw(const char *command, pid_t *childpid, int *in_fd, int *out_fd); int fwts_pipe_read(const int fd, char **out_buf, ssize_t *out_len); int fwts_pipe_readwrite( const int in_fd, const char *in_buf, const size_t in_len, const int out_fd, char **out_buf, ssize_t *out_len); int fwts_pipe_close(const int fd, const pid_t pid); int fwts_pipe_close2(const int in_fd, const int out_fd, const pid_t pid); int fwts_pipe_exec(const char *command, fwts_list **list, int *status); int fwts_exec(const char *command, int *status); int fwts_exec2(const char *command, char **output); int fwts_write_string_to_file(const fwts_framework *fw, FILE *file, const char *str); int fwts_write_string_file(const fwts_framework *fw, const char *file_name, const char *str); int fwts_read_file_first_line(const fwts_framework *fw, const char *file_name, char **line); bool fwts_file_first_line_contains_string(const fwts_framework *fw, const char *file_name, const char *str); #endif src/lib/include/fwts_pm_debug.h000066400000000000000000000016141465205512700170450ustar00rootroot00000000000000/* * Copyright (C) 2013-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_PM_DEBUG_H__ #define __FWTS_PM_DEBUG_H__ int fwts_pm_debug_get(int *value); int fwts_pm_debug_set(const int value); #endif src/lib/include/fwts_pm_method.h000066400000000000000000000045251465205512700172430ustar00rootroot00000000000000/* * Copyright (C) 2014-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_PM_METHOD_MODE_H__ #define __FWTS_PM_METHOD_MODE_H__ #include #include #include #include #define FWTS_ENABLE_LOGIND \ ((GLIB_MAJOR_VERSION >= 2) && (GLIB_MINOR_VERSION >= 26)) #include "fwts_types.h" typedef struct { fwts_framework *fw; time_t t_start; time_t t_end; #if FWTS_ENABLE_LOGIND GDBusProxy *logind_proxy; GDBusConnection *logind_connection; GMainLoop *gmainloop; char *action; #endif int min_delay; } fwts_pm_method_vars; #define PM_SUSPEND_LOGIND "Suspend" #define PM_SUSPEND_HYBRID_LOGIND "HybridSleep" #define PM_HIBERNATE_LOGIND "Hibernate" #define FWTS_SUSPEND "FWTS_SUSPEND" #define FWTS_RESUME "FWTS_RESUME" #define FWTS_HIBERNATE "FWTS_HIBERNATE" #define FWTS_RESUME "FWTS_RESUME" void free_pm_method_vars(fwts_pm_method_vars *var); int fwts_logind_init_proxy(fwts_pm_method_vars *fwts_settings); int fwts_logind_wait_for_resume_from_action( fwts_pm_method_vars *fwts_settings, const char *action, int minimum_delay); bool fwts_logind_can_suspend(fwts_pm_method_vars *fwts_settings); bool fwts_logind_can_hybrid_suspend(fwts_pm_method_vars *fwts_settings); bool fwts_logind_can_hibernate(fwts_pm_method_vars *fwts_settings); bool fwts_sysfs_can_suspend(const fwts_pm_method_vars *fwts_settings); bool fwts_sysfs_can_hybrid_suspend(const fwts_pm_method_vars *fwts_settings); bool fwts_sysfs_can_hibernate(const fwts_pm_method_vars *fwts_settings); int fwts_sysfs_do_suspend(const fwts_pm_method_vars *fwts_settings, const bool s3_hybrid); int fwts_sysfs_do_hibernate(const fwts_pm_method_vars *fwts_settings); #endif src/lib/include/fwts_release.h000066400000000000000000000020001465205512700166710ustar00rootroot00000000000000/* * Copyright (C) 2013-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_RELEASE_H__ #define __FWTS_RELEASE_H__ typedef struct { char *distributor; char *description; char *release; char *codename; } fwts_release; fwts_release *fwts_release_get(void); void fwts_release_free(fwts_release *release); #endif src/lib/include/fwts_safe_mem.h000066400000000000000000000020661465205512700170410ustar00rootroot00000000000000/* * Copyright (C) 2014-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_SAFE_MEMCPY_H__ #define __FWTS_SAFE_MEMCPY_H__ int fwts_safe_memcpy(void *dst, const void *src, const size_t n); int fwts_safe_memread(const void *src, const size_t n); int fwts_safe_memread32(const void *src, const size_t n); int fwts_safe_memread64(const void *src, const size_t n); #endif src/lib/include/fwts_scan_efi_systab.h000066400000000000000000000016451465205512700204230ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_SCAN_EFI_SYSTAB_H__ #define __FWTS_SCAN_EFI_SYSTAB_H__ #include #include "fwts.h" void *fwts_scan_efi_systab(const char *name); #endif src/lib/include/fwts_set.h000066400000000000000000000016631465205512700160620ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_SET_H__ #define __FWTS_SET_H__ #include int fwts_set(const char *file, const char *text); int fwts_set_int(const char *file, const int value); #endif src/lib/include/fwts_smbios.h000066400000000000000000000073711465205512700165650ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_SMBIOS_H__ #define __FWTS_SMBIOS_H__ #include #include "fwts.h" #define FWTS_SMBIOS_REGION_START (0x000e0000) #define FWTS_SMBIOS_REGION_END (0x000fffff) #define FWTS_SMBIOS_REGION_SIZE (FWTS_SMBIOS_REGION_END - FWTS_SMBIOS_REGION_START) /* SMBIOS chassis in type 3 (Table 17 - System Enclosure or Chassis Types) */ enum { FWTS_SMBIOS_CHASSIS_INVALID, FWTS_SMBIOS_CHASSIS_OTHER, FWTS_SMBIOS_CHASSIS_UNKNOWN, FWTS_SMBIOS_CHASSIS_DESKTOP, FWTS_SMBIOS_CHASSIS_LOW_PROFILE_DESKTOP, FWTS_SMBIOS_CHASSIS_PIZZA_BOX, FWTS_SMBIOS_CHASSIS_MINI_TOWER, FWTS_SMBIOS_CHASSIS_TOWER, FWTS_SMBIOS_CHASSIS_PORTABLE, FWTS_SMBIOS_CHASSIS_LAPTOP, FWTS_SMBIOS_CHASSIS_NOTEBOOK, FWTS_SMBIOS_CHASSIS_HANDHELD, FWTS_SMBIOS_CHASSIS_DOCKING_STATION, FWTS_SMBIOS_CHASSIS_ALL_IN_ONE, FWTS_SMBIOS_CHASSIS_SUB_NOTEBOOK, FWTS_SMBIOS_CHASSIS_SPACE_SAVING, FWTS_SMBIOS_CHASSIS_LUNCH_BOX, FWTS_SMBIOS_CHASSIS_MAIN_SERVER_CHASSIS, FWTS_SMBIOS_CHASSIS_EXPANISON_CHASSIS, FWTS_SMBIOS_CHASSIS_SUB_CHASSIS, FWTS_SMBIOS_CHASSIS_BUS_EXPANSION_CHASSIS, FWTS_SMBIOS_CHASSIS_PERIPHERAL_CHASSIS, FWTS_SMBIOS_CHASSIS_RAID_CHASSIS, FWTS_SMBIOS_CHASSIS_RACK_MOUNT_CHASSIS, FWTS_SMBIOS_CHASSIS_SEALED_CASE_PC, FWTS_SMBIOS_CHASSIS_MULTI_SYSTEM_CHASSIS, FWTS_SMBIOS_CHASSIS_COMPACT_PCI, FWTS_SMBIOS_CHASSIS_ADVANCED_TCA, FWTS_SMBIOS_CHASSIS_BLADE, FWTS_SMBIOS_CHASSIS_BLADE_ENCLOSURE, FWTS_SMBIOS_CHASSIS_TABLET, FWTS_SMBIOS_CHASSIS_CONVERTIBLE, FWTS_SMBIOS_CHASSIS_DETACHABLE, FWTS_SMBIOS_CHASSIS_IOT_GATEWAY, FWTS_SMBIOS_CHASSIS_EMBEDDED_PC, FWTS_SMBIOS_CHASSIS_MINI_PC, FWTS_SMBIOS_CHASSIS_STICK_PC, /* end of the chassis types */ FWTS_SMBIOS_CHASSIS_MAX }; typedef enum { FWTS_SMBIOS_UNKNOWN = -1, FWTS_SMBIOS_DMI_LEGACY = 0, FWTS_SMBIOS = 1 } fwts_smbios_type; typedef struct { uint8_t type; uint8_t length; uint16_t handle; uint8_t *data; } fwts_dmi_header; /* * From System Management BIOS (SMBIOS) Reference Specification * http://dmtf.org/standards/smbios */ typedef struct { uint8_t signature[4]; uint8_t checksum; uint8_t length; uint8_t major_version; uint8_t minor_version; uint16_t max_struct_size; uint8_t revision; uint8_t formatted_area[5]; uint8_t anchor_string[5]; uint8_t intermediate_checksum; uint16_t struct_table_length; uint32_t struct_table_address; uint16_t number_smbios_structures; uint8_t smbios_bcd_revision; } __attribute__ ((packed)) fwts_smbios_entry; /* * From System Management BIOS (SMBIOS) Reference Specification 3.0.0 */ typedef struct { uint8_t signature[5]; uint8_t checksum; uint8_t length; uint8_t major_version; uint8_t minor_version; uint8_t docrev; uint8_t revision; uint8_t reserved; uint32_t struct_table_max_size; uint64_t struct_table_address; } __attribute__ ((packed)) fwts_smbios30_entry; void *fwts_smbios_find_entry(fwts_framework *fw, fwts_smbios_entry *entry, fwts_smbios_type *type, uint16_t *version); void *fwts_smbios30_find_entry(fwts_framework *fw, fwts_smbios30_entry *entry, uint16_t *version); #endif src/lib/include/fwts_stringextras.h000066400000000000000000000020051465205512700200130ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_STRINGEXTRAS_H__ #define __FWTS_STRINGEXTRAS_H__ #include void fwts_chop_newline(char *str); char *fwts_realloc_strcat(char *orig, const char *newstr); const char *fwts_string_endswith(const char *str, const char *postfix); #endif src/lib/include/fwts_summary.h000066400000000000000000000021631465205512700167600ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_SUMMARY_H__ #define __FWTS_SUMMARY_H__ #include #include "fwts_list.h" #include "fwts_framework.h" int fwts_summary_init(void); void fwts_summary_deinit(void); int fwts_summary_add(fwts_framework *fw, const char *test, const fwts_log_level level, const char *text); int fwts_summary_report(fwts_framework *fw, fwts_list *test_list); #endif src/lib/include/fwts_text_list.h000066400000000000000000000023771465205512700173110ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_TEXT_LIST_H__ #define __FWTS_TEXT_LIST_H__ #include "fwts_list.h" fwts_list *fwts_text_list_new(void); void fwts_text_list_free(fwts_list *list); char *fwts_text_list_strstr(fwts_list *list, const char *needle); fwts_list *fwts_list_from_text(const char *list); fwts_list_link *fwts_text_list_append(fwts_list *list, const char *text); static inline char *fwts_text_list_text(fwts_list_link *item) { return fwts_list_data(char *, item); } #endif src/lib/include/fwts_tpm.h000066400000000000000000000153431465205512700160670ustar00rootroot00000000000000/* * Copyright (C) 2020-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_TPM_H__ #define __FWTS_TPM_H__ PRAGMA_PUSH PRAGMA_PACK_WARN_OFF #define FWTS_TPM_EVENTLOG_V2_SIGNATURE "Spec ID Event03" /* define from tpm2-tss */ #define TPM2_SHA_DIGEST_SIZE 20 #define TPM2_SHA1_DIGEST_SIZE 20 #define TPM2_SHA256_DIGEST_SIZE 32 #define TPM2_SHA384_DIGEST_SIZE 48 #define TPM2_SHA512_DIGEST_SIZE 64 typedef uint16_t TPM2_ALG_ID; #define TPM2_ALG_ERROR ((TPM2_ALG_ID) 0x0000) #define TPM2_ALG_RSA ((TPM2_ALG_ID) 0x0001) #define TPM2_ALG_TDES ((TPM2_ALG_ID) 0x0003) #define TPM2_ALG_SHA ((TPM2_ALG_ID) 0x0004) #define TPM2_ALG_SHA1 ((TPM2_ALG_ID) 0x0004) #define TPM2_ALG_HMAC ((TPM2_ALG_ID) 0x0005) #define TPM2_ALG_AES ((TPM2_ALG_ID) 0x0006) #define TPM2_ALG_MGF1 ((TPM2_ALG_ID) 0x0007) #define TPM2_ALG_KEYEDHASH ((TPM2_ALG_ID) 0x0008) #define TPM2_ALG_XOR ((TPM2_ALG_ID) 0x000A) #define TPM2_ALG_SHA256 ((TPM2_ALG_ID) 0x000B) #define TPM2_ALG_SHA384 ((TPM2_ALG_ID) 0x000C) #define TPM2_ALG_SHA512 ((TPM2_ALG_ID) 0x000D) #define TPM2_ALG_NULL ((TPM2_ALG_ID) 0x0010) #define TPM2_ALG_SM3_256 ((TPM2_ALG_ID) 0x0012) #define TPM2_ALG_SM4 ((TPM2_ALG_ID) 0x0013) #define TPM2_ALG_RSASSA ((TPM2_ALG_ID) 0x0014) #define TPM2_ALG_RSAES ((TPM2_ALG_ID) 0x0015) #define TPM2_ALG_RSAPSS ((TPM2_ALG_ID) 0x0016) #define TPM2_ALG_OAEP ((TPM2_ALG_ID) 0x0017) #define TPM2_ALG_ECDSA ((TPM2_ALG_ID) 0x0018) #define TPM2_ALG_ECDH ((TPM2_ALG_ID) 0x0019) #define TPM2_ALG_ECDAA ((TPM2_ALG_ID) 0x001A) #define TPM2_ALG_SM2 ((TPM2_ALG_ID) 0x001B) #define TPM2_ALG_ECSCHNORR ((TPM2_ALG_ID) 0x001C) #define TPM2_ALG_ECMQV ((TPM2_ALG_ID) 0x001D) #define TPM2_ALG_KDF1_SP800_56A ((TPM2_ALG_ID) 0x0020) #define TPM2_ALG_KDF2 ((TPM2_ALG_ID) 0x0021) #define TPM2_ALG_KDF1_SP800_108 ((TPM2_ALG_ID) 0x0022) #define TPM2_ALG_ECC ((TPM2_ALG_ID) 0x0023) #define TPM2_ALG_SYMCIPHER ((TPM2_ALG_ID) 0x0025) #define TPM2_ALG_CAMELLIA ((TPM2_ALG_ID) 0x0026) #define TPM2_ALG_CMAC ((TPM2_ALG_ID) 0x003F) #define TPM2_ALG_CTR ((TPM2_ALG_ID) 0x0040) #define TPM2_ALG_SHA3_256 ((TPM2_ALG_ID) 0x0027) #define TPM2_ALG_SHA3_384 ((TPM2_ALG_ID) 0x0028) #define TPM2_ALG_SHA3_512 ((TPM2_ALG_ID) 0x0029) #define TPM2_ALG_OFB ((TPM2_ALG_ID) 0x0041) #define TPM2_ALG_CBC ((TPM2_ALG_ID) 0x0042) #define TPM2_ALG_CFB ((TPM2_ALG_ID) 0x0043) #define TPM2_ALG_ECB ((TPM2_ALG_ID) 0x0044) /* * define from TCG PC Client Platform Firmware Profile Specification * https://trustedcomputinggroup.org/resource/pc-client-specific-platform-firmware-profile-specification/ */ typedef enum { EV_PREBOOT_CERT = 0x00000000, EV_POST_CODE = 0x00000001, EV_UNUSED = 0x00000002, EV_NO_ACTION = 0x00000003, EV_SEPARATOR = 0x00000004, EV_ACTION = 0x00000005, EV_EVENT_TAG = 0x00000006, EV_S_CRTM_CONTENTS = 0x00000007, EV_S_CRTM_VERSION = 0x00000008, EV_CPU_MICROCODE = 0x00000009, EV_PLATFORM_CONFIG_FLAGS = 0x0000000a, EV_TABLE_OF_DEVICES = 0x0000000b, EV_COMPACT_HASH = 0x0000000c, EV_IPL = 0x0000000d, EV_IPL_PARTITION_DATA = 0x0000000e, EV_NONHOST_CODE = 0x0000000f, EV_NONHOST_CONFIG = 0x00000010, EV_NONHOST_INFO = 0x00000011, EV_OMIT_BOOT_DEVICE_EVENTS = 0x00000012, EV_EFI_EVENT_BASE = 0x80000000, EV_EFI_VARIABLE_DRIVER_CONFIG = 0x80000001, EV_EFI_VARIABLE_BOOT = 0x80000002, EV_EFI_BOOT_SERVICES_APPLICATION = 0x80000003, EV_EFI_BOOT_SERVICES_DRIVER = 0x80000004, EV_EFI_RUNTIME_SERVICES_DRIVER = 0x80000005, EV_EFI_GPT_EVENT = 0x80000006, EV_EFI_ACTION = 0x80000007, EV_EFI_PLATFORM_FIRMWARE_BLOB = 0x80000008, EV_EFI_HANDOFF_TABLES = 0x80000009, EV_EFI_PLATFORM_FIRMWARE_BLOB2 = 0x8000000a, EV_EFI_HANDOFF_TABLES2 = 0x8000000b, EV_EFI_VARIABLE_BOOT2 = 0x8000000c, EV_EFI_HCRTM_EVENT = 0x80000010, EV_EFI_VARIABLE_AUTHORITY = 0x800000e0, EV_EFI_SPDM_FIRMWARE_BLOB = 0x800000e1, EV_EFI_SPDM_FIRMWARE_CONFIG = 0x800000e2, EV_EFI_SPDM_DEVICE_POLICY = 0x800000e3, EV_EFI_SPDM_DEVICE_AUTHORITY = 0x800000e4, } fwts_tpmlog_event_type; typedef struct { uint32_t pcr_index; uint32_t event_type; uint8_t digest[20]; uint32_t event_data_size; uint8_t event[0]; } __attribute__ ((packed)) fwts_pc_client_pcr_event; typedef struct { uint16_t algorithm_id; uint16_t digest_size; } __attribute__ ((packed)) fwts_spec_id_event_alg_sz; typedef struct { uint8_t signature[16]; uint32_t platform_class; uint8_t spec_version_minor; uint8_t spec_version_major; uint8_t spec_errata; uint8_t uintn_size; uint32_t number_of_alg; /* * Below items are not fix sizes, skip to define them * but it should be calculated when evaluate the * struct size. */ /* fwts_spec_id_event_alg_sz digest_sizes[0]; uint8_t vendor_info_size; uint8_t vendor_info[0]; */ } __attribute__ ((packed)) fwts_efi_spec_id_event; typedef struct { uint32_t pcr_index; uint32_t event_type; uint32_t digests_count; /* * Below items are not fix size, skip to define them * but it should be calculated when evaluate the * struct size. */ /* uint8_t digests[0]; uint32_t event_size; uint8_t event[eventSize]; */ } __attribute__ ((packed)) fwts_tcg_pcr_event2; typedef uint64_t uefi_physical_address; typedef struct { uefi_physical_address image_location_in_memory; uint64_t image_len_in_memory; uint64_t image_link_time_address; uint64_t length_of_device_path; uint8_t device_path[0]; } __attribute__ ((packed)) uefi_image_load_event; void fwts_tpm_data_hexdump(fwts_framework *fw, const uint8_t *data, const size_t size, const char *str); uint8_t fwts_tpm_get_hash_size(const TPM2_ALG_ID hash); PRAGMA_POP #endif src/lib/include/fwts_tty.h000066400000000000000000000015631465205512700161060ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_TTY_H__ #define __FWTS_TTY_H__ int fwts_tty_width(const int fd, const int default_width); #endif src/lib/include/fwts_types.h000066400000000000000000000025011465205512700164230ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_TYPES_H__ #define __FWTS_TYPES_H__ #include typedef enum { FWTS_OK = 0, FWTS_ERROR = -1, FWTS_SKIP = -2, FWTS_ABORTED = -3, FWTS_ERROR_NO_PRIV = -4, FWTS_NULL_POINTER = -5, FWTS_NO_TABLE = -6, FWTS_NOT_EXIST = -7, FWTS_COMPLETE = -8, FWTS_OUT_OF_MEMORY = -9, FWTS_NO_EBDA = -10 } fwts_status; #define FWTS_MAP_FAILED ((void *)-1) typedef enum { FWTS_FALSE = 0, FWTS_TRUE = 1, FWTS_BOOL_ERROR = -1 } fwts_bool; typedef enum { FWTS_PM_LOGIND, FWTS_PM_PMUTILS, FWTS_PM_SYSFS, FWTS_PM_UNDEFINED } fwts_pm_method; #endif src/lib/include/fwts_uefi.h000066400000000000000000000511651465205512700162210ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_UEFI_H__ #define __FWTS_UEFI_H__ PRAGMA_PUSH PRAGMA_PACK_WARN_OFF #define FWTS_UEFI_LOAD_OPTION_ACTIVE 0x00000001 #define FWTS_UEFI_LOAD_OPTION_FORCE_RECONNECT 0x00000002 #define EFI_GLOBAL_VARIABLE \ { \ 0x8BE4DF61, 0x93CA, 0x11d2, { 0xAA, 0x0D, 0x00, \ 0xE0, 0x98, 0x03, 0x2B, 0x8C} \ } typedef struct { uint16_t *varname; uint8_t guid[16]; size_t datalen; uint8_t *data; uint64_t status; uint32_t attributes; } fwts_uefi_var; typedef uint8_t fwts_uefi_mac_addr[32]; typedef uint8_t fwts_uefi_ipv4_addr[4]; typedef uint16_t fwts_uefi_ipv6_addr[8]; enum { FWTS_UEFI_VAR_NON_VOLATILE = 0x00000001, FWTS_UEFI_VAR_BOOTSERVICE_ACCESS = 0x00000002, FWTS_UEFI_VAR_RUNTIME_ACCESS = 0x00000004, FWTS_UEFI_VARIABLE_HARDWARE_ERROR_RECORD = 0x00000008, FWTS_UEFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS = 0x00000010, FWTS_UEFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS = 0x00000020, FWTS_UEFI_VARIABLE_APPEND_WRITE = 0x00000040, FWTS_UEFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS = 0x00000080 }; enum { FWTS_UEFI_TIME_ADJUST_DAYLIGHT = 0x01, FWTS_UEFI_TIME_IN_DAYLIGHT = 0x02 }; #define BITS_PER_LONG (sizeof(long) * 8) #define HIGH_BIT_SET (1UL << (BITS_PER_LONG-1)) #define EFI_SUCCESS 0 #define EFI_LOAD_ERROR (1 | HIGH_BIT_SET) #define EFI_INVALID_PARAMETER (2 | HIGH_BIT_SET) #define EFI_UNSUPPORTED (3 | HIGH_BIT_SET) #define EFI_BAD_BUFFER_SIZE (4 | HIGH_BIT_SET) #define EFI_BUFFER_TOO_SMALL (5 | HIGH_BIT_SET) #define EFI_NOT_READY (6 | HIGH_BIT_SET) #define EFI_DEVICE_ERROR (7 | HIGH_BIT_SET) #define EFI_WRITE_PROTECTED (8 | HIGH_BIT_SET) #define EFI_OUT_OF_RESOURCES (9 | HIGH_BIT_SET) #define EFI_VOLUME_CORRUPTED (10 | HIGH_BIT_SET) #define EFI_VOLUME_FULL (11 | HIGH_BIT_SET) #define EFI_NO_MEDIA (12 | HIGH_BIT_SET) #define EFI_MEDIA_CHANGED (13 | HIGH_BIT_SET) #define EFI_NOT_FOUND (14 | HIGH_BIT_SET) #define EFI_ACCESS_DENIED (15 | HIGH_BIT_SET) #define EFI_NO_RESPONSE (16 | HIGH_BIT_SET) #define EFI_NO_MAPPING (17 | HIGH_BIT_SET) #define EFI_TIMEOUT (18 | HIGH_BIT_SET) #define EFI_NOT_STARTED (19 | HIGH_BIT_SET) #define EFI_ALREADY_STARTED (20 | HIGH_BIT_SET) #define EFI_ABORTED (21 | HIGH_BIT_SET) #define EFI_ICMP_ERROR (22 | HIGH_BIT_SET) #define EFI_TFTP_ERROR (23 | HIGH_BIT_SET) #define EFI_PROTOCOL_ERROR (24 | HIGH_BIT_SET) #define EFI_INCOMPATIBLE_VERSION (25 | HIGH_BIT_SET) #define EFI_SECURITY_VIOLATION (26 | HIGH_BIT_SET) #define EFI_CRC_ERROR (27 | HIGH_BIT_SET) #define EFI_END_OF_MEDIA (28 | HIGH_BIT_SET) #define EFI_END_OF_FILE (31 | HIGH_BIT_SET) #define EFI_INVALID_LANGUAGE (32 | HIGH_BIT_SET) #define EFI_COMPROMISED_DATA (33 | HIGH_BIT_SET) #define EFI_IP_ADDRESS_CONFLICT (34 | HIGH_BIT_SET) #define EFI_HTTP_ERROR (35 | HIGH_BIT_SET) #define FWTS_UEFI_UNSPECIFIED_TIMEZONE 0x07FF #define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001 #define EFI_OS_INDICATIONS_TIMESTAMP_REVOCATION 0x0000000000000002 #define EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED 0x0000000000000004 #define EFI_OS_INDICATIONS_FMP_CAPSULE_SUPPORTED 0x0000000000000008 #define EFI_OS_INDICATIONS_CAPSULE_RESULT_VAR_SUPPORTED 0x0000000000000010 #define ESRT_FW_TYPE_UNKNOWN 0x00000000 #define ESRT_FW_TYPE_SYSTEMFIRMWARE 0x00000001 #define ESRT_FW_TYPE_DEVICEFIRMWARE 0x00000002 #define ESRT_FW_TYPE_UEFIDRIVER 0x00000003 #define LAST_ATTEMPT_STATUS_SUCCESS 0x00000000 #define LAST_ATTEMPT_STATUS_ERR_UNSUCCESSFUL 0x00000001 #define LAST_ATTEMPT_STATUS_ERR_INSUFFICIENT_RESOURCES 0x00000002 #define LAST_ATTEMPT_STATUS_ERR_INCORRECT_VERSION 0x00000003 #define LAST_ATTEMPT_STATUS_ERR_INVALID_FORMAT 0x00000004 #define LAST_ATTEMPT_STATUS_ERR_AUTH_ERROR 0x00000005 #define LAST_ATTEMPT_STATUS_ERR_PWR_EVT_AC 0x00000006 #define LAST_ATTEMPT_STATUS_ERR_PWR_EVT_BATT 0x00000007 #define LAST_ATTEMPT_STATUS_ERR_UNSATISFIED_DEPENDENCIES 0x00000008 #define LAST_ATTEMPT_STATUS_ERR_UNSUCCESSFUL_VENDOR_RANGE_MIN 0x00001000 #define LAST_ATTEMPT_STATUS_ERR_UNSUCCESSFUL_VENDOR_RANGE_MAX 0x00004000 #define EFI_RT_SUPPORTED_GET_TIME 0x0001 #define EFI_RT_SUPPORTED_SET_TIME 0x0002 #define EFI_RT_SUPPORTED_GET_WAKEUP_TIME 0x0004 #define EFI_RT_SUPPORTED_SET_WAKEUP_TIME 0x0008 #define EFI_RT_SUPPORTED_GET_VARIABLE 0x0010 #define EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME 0x0020 #define EFI_RT_SUPPORTED_SET_VARIABLE 0x0040 #define EFI_RT_SUPPORTED_SET_VIRTUAL_ADDRESS_MAP 0x0080 #define EFI_RT_SUPPORTED_CONVERT_POINTER 0x0100 #define EFI_RT_SUPPORTED_GET_NEXT_HIGH_MONOTONIC_COUNT 0x0200 #define EFI_RT_SUPPORTED_RESET_SYSTEM 0x0400 #define EFI_RT_SUPPORTED_UPDATE_CAPSULE 0x0800 #define EFI_RT_SUPPORTED_QUERY_CAPSULE_CAPABILITIES 0x1000 #define EFI_RT_SUPPORTED_QUERY_VARIABLE_INFO 0x2000 #define EFI_RT_SUPPORTED_ALL 0x3fff #define EFI_CERT_SHA256_GUID \ { 0xc1c41626, 0x504c, 0x4092, { 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28 }} #define EFI_CERT_RSA2048_GUID \ { 0x3c5766e8, 0x269c, 0x4e34, { 0xaa, 0x14, 0xed, 0x77, 0x6e, 0x85, 0xb3, 0xb6 }} #define EFI_CERT_RSA2048_SHA256_GUID \ { 0xe2b36190, 0x879b, 0x4a3d, { 0xad, 0x8d, 0xf2, 0xe7, 0xbb, 0xa3, 0x27, 0x84 }} #define EFI_CERT_SHA1_GUID \ { 0x826ca512, 0xcf10, 0x4ac9, { 0xb1, 0x87, 0xbe, 0x1, 0x49, 0x66, 0x31, 0xbd }} #define EFI_CERT_RSA2048_SHA1_GUID \ { 0x67f8444f, 0x8743, 0x48f1, { 0xa3, 0x28, 0x1e, 0xaa, 0xb8, 0x73, 0x60, 0x80 }} #define EFI_CERT_X509_GUID \ { 0xa5c059a1, 0x94e4, 0x4aa7, { 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72 }} #define EFI_CERT_SHA224_GUID \ { 0xb6e5233, 0xa65c, 0x44c9, { 0x94, 0x7, 0xd9, 0xab, 0x83, 0xbf, 0xc8, 0xbd }} #define EFI_CERT_SHA384_GUID \ { 0xff3e5307, 0x9fd0, 0x48c9, { 0x85, 0xf1, 0x8a, 0xd5, 0x6c, 0x70, 0x1e, 0x1 }} #define EFI_CERT_SHA512_GUID \ { 0x93e0fae, 0xa6c4, 0x4f50, { 0x9f, 0x1b, 0xd4, 0x1e, 0x2b, 0x89, 0xc1, 0x9a }} #define EFI_CERT_X509_SHA256_GUID \ { 0x3bd2a492, 0x96c0, 0x4079, { 0xb4, 0x20, 0xfc, 0xf9, 0x8e, 0xf1, 0x03, 0xed }} #define EFI_CERT_X509_SHA384_GUID \ { 0x7076876e, 0x80c2, 0x4ee6, { 0xaa, 0xd2, 0x28, 0xb3, 0x49, 0xa6, 0x86, 0x5b }} #define EFI_CERT_X509_SHA512_GUID \ { 0x446dbf63, 0x2502, 0x4cda, { 0xbc, 0xfa, 0x24, 0x65, 0xd2, 0xb0, 0xfe, 0x9d }} #define EFI_PC_ANSI_GUID \ { 0xe0c14753, 0xf9be, 0x11d2, { 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d }} #define EFI_VT_100_GUID \ { 0xdfa66065, 0xb419, 0x11d3, { 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d }} #define EFI_VT_100_PLUS_GUID \ { 0x7baec70b, 0x57e0, 0x4c76, { 0x8e, 0x87, 0x2f, 0x9e, 0x28, 0x08, 0x83, 0x43 }} #define EFI_VT_UTF8_GUID \ { 0xad15a0d6, 0x8bec, 0x4acf, { 0xa0, 0x73, 0xd0, 0x1d, 0xe7, 0x7e, 0x2d, 0x88 }} #define EFI_UART_DEVICE_PATH_GUID \ { 0x37499a9d, 0x542f, 0x4c89, { 0xa0, 0x26, 0x35, 0xda, 0x14, 0x20, 0x94, 0xe4 }} #define EFI_SAS_DEVICE_PATH_GUID \ { 0xd487ddb4, 0x008b, 0x11d9, { 0xaf, 0xdc, 0x00, 0x10, 0x83, 0xff, 0xca, 0x4d }} #if 0 typedef struct { char *description; uefidump_func func; } uefidump_info; #endif typedef struct { uint8_t type; uint8_t subtype; uint8_t length[2]; } __attribute__ ((packed)) fwts_uefi_dev_path; typedef struct { uint32_t attributes; uint16_t file_path_list_length; uint16_t description[1]; fwts_uefi_dev_path unused_file_path_list[1]; } __attribute__((packed)) fwts_uefi_load_option; typedef struct { uint32_t keydata; uint32_t bootoptioncrc; uint16_t bootoption; } __attribute__((packed)) fwts_uefi_key_option; typedef struct { uint16_t scancode; uint16_t unicodechar; } __attribute__((packed)) fwts_uefi_input_key; typedef enum { FWTS_UEFI_HARDWARE_DEV_PATH_TYPE = (0x01), FWTS_UEFI_ACPI_DEVICE_PATH_TYPE = (0x02), FWTS_UEFI_MESSAGING_DEVICE_PATH_TYPE = (0x03), FWTS_UEFI_MEDIA_DEVICE_PATH_TYPE = (0x04), FWTS_UEFI_BIOS_DEVICE_PATH_TYPE = (0x05), FWTS_UEFI_END_DEV_PATH_TYPE = (0x7f) } dev_path_types; typedef enum { FWTS_UEFI_END_THIS_DEV_PATH_SUBTYPE = (0x01), FWTS_UEFI_END_ENTIRE_DEV_PATH_SUBTYPE = (0xff) } dev_end_subtypes; typedef enum { FWTS_UEFI_PCI_DEV_PATH_SUBTYPE = (0x01), FWTS_UEFI_PCCARD_DEV_PATH_SUBTYPE = (0x02), FWTS_UEFI_MEMORY_MAPPED_DEV_PATH_SUBTYPE = (0x03), FWTS_UEFI_VENDOR_DEV_PATH_SUBTYPE = (0x04), FWTS_UEFI_CONTROLLER_DEV_PATH_SUBTYPE = (0x05), FWTS_UEFI_BMC_DEV_PATH_SUBTYPE = (0x06) } hw_dev_path_subtypes; typedef enum { FWTS_UEFI_ACPI_DEVICE_PATH_SUBTYPE = (0x01), FWTS_UEFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE = (0x02), FWTS_UEFI_ACPI_ADR_DEVICE_PATH_SUBTYPE = (0x03) } acpi_dev_path_subtypes; typedef enum { FWTS_UEFI_ATAPI_DEVICE_PATH_SUBTYPE = (0x01), FWTS_UEFI_SCSI_DEVICE_PATH_SUBTYPE = (0x02), FWTS_UEFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE = (0x03), FWTS_UEFI_1394_DEVICE_PATH_SUBTYPE = (0x04), FWTS_UEFI_USB_DEVICE_PATH_SUBTYPE = (0x05), FWTS_UEFI_I2O_DEVICE_PATH_SUBTYPE = (0x06), FWTS_UEFI_INFINIBAND_DEVICE_PATH_SUBTYPE = (0x09), FWTS_UEFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE =(0x0a), FWTS_UEFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE = (0x0b), FWTS_UEFI_IPV4_DEVICE_PATH_SUBTYPE = (0x0c), FWTS_UEFI_IPV6_DEVICE_PATH_SUBTYPE = (0x0d), FWTS_UEFI_UART_DEVICE_PATH_SUBTYPE = (0x0e), FWTS_UEFI_USB_CLASS_DEVICE_PATH_SUBTYPE = (0x0f), FWTS_UEFI_USB_WWID_DEVICE_PATH_SUBTYPE = (0x10), FWTS_UEFI_LOGICAL_UNIT_DEVICE_PATH_SUBTYPE = (0x11), FWTS_UEFI_SATA_DEVICE_PATH_SUBTYPE = (0x12), FWTS_UEFI_ISCSI_DEVICE_PATH_SUBTYPE = (0x13), FWTS_UEFI_VLAN_DEVICE_PATH_SUBTYPE = (0x14), FWTS_UEFI_FIBRE_CHANNEL_EX_DEVICE_PATH_SUBTYPE = (0x15), FWTS_UEFI_SAS_EX_DEVICE_PATH_SUBTYPE = (0x16), FWTS_UEFI_NVM_EXPRESS_NAMESP_DEVICE_PATH_SUBTYPE = (0x17), FWTS_UEFI_URI_DEVICE_PATH_SUBTYPE = (0x18), FWTS_UEFI_UFS_DEVICE_PATH_SUBTYPE = (0x19), FWTS_UEFI_SD_DEVICE_PATH_SUBTYPE = (0x1a), FWTS_UEFI_BLUETOOTH_DEVICE_PATH_SUBTYPE = (0x1b), FWTS_UEFI_WIRELESS_DEVICE_PATH_SUBTYPE = (0x1c), FWTS_UEFI_EMMC_DEVICE_PATH_SUBTYPE = (0x1d), FWTS_UEFI_BLUETOOTHLE_DEVICE_PATH_SUBTYPE = (0x1e), FWTS_UEFI_DNS_DEVICE_PATH_SUBTYPE = (0x1f) } messaging_dev_path_subtypes; typedef enum { FWTS_UEFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE = (0x01), FWTS_UEFI_CDROM_DEVICE_PATH_SUBTYPE = (0x02), FWTS_UEFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE = (0x03), FWTS_UEFI_FILE_PATH_DEVICE_PATH_SUBTYPE = (0x04), FWTS_UEFI_PROTOCOL_DEVICE_PATH_SUBTYPE = (0x05), FWTS_UEFI_PIWG_FW_FILE_DEVICE_PATH_SUBTYPE = (0x06), FWTS_UEFI_PIWG_FW_VOLUME_DEVICE_PATH_SUBTYPE = (0x07), FWTS_UEFI_RELATIVE_OFFSET_RANGE_SUBTYPE = (0x08), FWTS_UEFI_RAM_DISK_SUBTYPE = (0x09) } media_dev_path_subtypes; typedef enum { FWTS_UEFI_BIOS_DEVICE_PATH_SUBTYPE = (0x01) } bios_dev_path_subtypes; typedef struct { uint32_t info1; uint16_t info2; uint16_t info3; uint8_t info4[8]; } __attribute__ ((aligned(8))) fwts_uefi_guid; typedef struct { fwts_uefi_dev_path dev_path; uint8_t function; uint8_t device; } __attribute__ ((packed)) fwts_uefi_pci_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint8_t function; } __attribute__ ((packed)) fwts_uefi_pccard_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint32_t memory_type; uint64_t start_addr; uint64_t end_addr; } __attribute__ ((packed)) fwts_uefi_mem_mapped_dev_path; typedef struct { fwts_uefi_dev_path dev_path; fwts_uefi_guid guid; uint8_t data[0]; } __attribute__ ((packed)) fwts_uefi_vendor_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint32_t controller; } __attribute__ ((packed)) fwts_uefi_controller_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint8_t interface_type; uint64_t base_addr; } __attribute__ ((packed)) fwts_uefi_bmc_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint32_t hid; uint32_t uid; } __attribute__((packed)) fwts_uefi_acpi_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint32_t hid; uint32_t uid; uint32_t cid; char hidstr[1]; } __attribute__((packed)) fwts_uefi_expanded_acpi_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint32_t adr; } __attribute__((packed)) fwts_uefi_acpi_adr_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint8_t primary_secondary; uint8_t slave_master; uint16_t lun; } __attribute__((packed)) fwts_uefi_atapi_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint16_t pun; uint16_t lun; } __attribute__((packed)) fwts_uefi_scsi_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint32_t reserved; uint64_t wwn; uint64_t lun; } __attribute__((packed)) fwts_uefi_fibre_channel_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint32_t reserved; uint64_t guid; } __attribute__((packed)) fwts_uefi_1394_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint8_t parent_port_number; uint8_t interface; } __attribute__((packed)) fwts_uefi_usb_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint16_t vendor_id; uint16_t product_id; uint8_t device_class; uint8_t device_subclass; uint8_t device_protocol; } __attribute__((packed)) fwts_uefi_usb_class_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint32_t tid; } __attribute__((packed)) fwts_uefi_i2o_dev_path; typedef struct { fwts_uefi_dev_path dev_path; fwts_uefi_mac_addr mac_addr; uint8_t if_type; } __attribute__((packed)) fwts_uefi_mac_addr_dev_path; typedef struct { fwts_uefi_dev_path dev_path; fwts_uefi_ipv4_addr local_ip_addr; fwts_uefi_ipv4_addr remote_ip_addr; uint16_t local_port; uint16_t remote_port; uint16_t protocol; uint8_t static_ip_address; } __attribute__((packed)) fwts_uefi_ipv4_dev_path; typedef struct { fwts_uefi_dev_path dev_path; fwts_uefi_ipv4_addr local_ip_addr; fwts_uefi_ipv4_addr remote_ip_addr; uint16_t local_port; uint16_t remote_port; uint16_t protocol; uint8_t static_ip_address; fwts_uefi_ipv4_addr gateway_ip_addr; fwts_uefi_ipv4_addr subnet_mask; } __attribute__((packed)) fwts_uefi_ipv4_dev_path_v2; typedef struct { fwts_uefi_dev_path dev_path; fwts_uefi_ipv6_addr local_ip_addr; fwts_uefi_ipv6_addr remote_ip_addr; uint16_t local_port; uint16_t remote_port; uint16_t protocol; uint8_t static_ip_address; } __attribute__((packed)) fwts_uefi_ipv6_dev_path; typedef struct { fwts_uefi_dev_path dev_path; fwts_uefi_ipv6_addr local_ip_addr; fwts_uefi_ipv6_addr remote_ip_addr; uint16_t local_port; uint16_t remote_port; uint16_t protocol; uint8_t ip_address_origin; uint8_t prefix_length; fwts_uefi_ipv6_addr gateway_ip_addr; } __attribute__((packed)) fwts_uefi_ipv6_dev_path_v2; typedef struct { fwts_uefi_dev_path dev_path; uint32_t resource_flags; uint8_t port_gid[16]; uint64_t remote_id; uint64_t target_port_id; uint64_t device_id; } __attribute__((packed)) fwts_uefi_infiniband_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint32_t reserved; uint64_t baud_rate; uint8_t data_bits; uint8_t parity; uint8_t stop_bits; } __attribute__((packed)) fwts_uefi_uart_dev_path; typedef struct { fwts_uefi_dev_path dev_path; fwts_uefi_guid guid; uint8_t vendor_defined_data[0]; } __attribute__((packed)) fwts_uefi_vendor_messaging_dev_path; typedef struct { fwts_uefi_dev_path dev_path; fwts_uefi_guid guid; uint32_t flow_control_map; } __attribute__((packed)) fwts_uefi_uart_flowctl_messaging_dev_path; typedef struct { fwts_uefi_dev_path dev_path; fwts_uefi_guid guid; uint32_t reserved; uint64_t sas_addr; uint64_t lun; uint16_t dev_topology_info; uint16_t rtp; } __attribute__((packed)) fwts_uefi_sas_messaging_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint32_t reserved; uint64_t wwn; uint64_t lun; } __attribute__((packed)) fwts_uefi_fibre_channel_ex_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint16_t hbapn; uint16_t pmpn; uint16_t lun; } __attribute__((packed)) fwts_uefi_sata_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint16_t interface_num; uint16_t vendor_id; uint16_t product_id; uint16_t serial_number[0]; } __attribute__((packed)) fwts_uefi_usb_wwid_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint8_t lun; } __attribute__((packed)) fwts_uefi_logical_unit_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint16_t vlanid; } __attribute__((packed)) fwts_uefi_vlan_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint64_t sas_addr; uint64_t lun; uint16_t dev_topology_info; uint16_t rtp; } __attribute__((packed)) fwts_uefi_sas_ex_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint16_t protocol; uint16_t options; uint64_t lun; uint16_t tpg_tag; char iscsi_tn[0]; } __attribute__((packed)) fwts_uefi_iscsi_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint32_t namesp_id; uint64_t ext_unique_id; } __attribute__((packed)) fwts_uefi_nvm_express_namespace_dev_path; typedef struct { fwts_uefi_dev_path dev_path; char uri[0]; } __attribute__((packed)) fwts_uefi_uri_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint8_t target_id; uint8_t lun; } __attribute__((packed)) fwts_uefi_ufs_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint8_t slot_number; } __attribute__((packed)) fwts_uefi_sd_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint8_t bluetooth_addr[6]; } __attribute__((packed)) fwts_uefi_bluetooth_dev_path; typedef struct { fwts_uefi_dev_path dev_path; char ssid[0]; } __attribute__((packed)) fwts_uefi_wireless_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint8_t slot_num; } __attribute__((packed)) fwts_uefi_emmc_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint8_t bluetooth_addr[6]; uint8_t addr_type; } __attribute__((packed)) fwts_uefi_bluetoothle_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint8_t isipv6; uint8_t dns_addr[0]; } __attribute__((packed)) fwts_uefi_dns_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint32_t partition_number; uint64_t partition_start; uint64_t partition_size; uint8_t partition_signature[16]; uint8_t mbr_type; uint8_t signature_type; } __attribute__((packed)) fwts_uefi_hard_drive_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint32_t boot_entry; uint64_t partition_start; uint64_t partition_size; } __attribute__((packed)) fwts_uefi_cdrom_dev_path; typedef struct { fwts_uefi_dev_path dev_path; fwts_uefi_guid guid; uint8_t vendor_defined_data[0]; } __attribute__((packed)) fwts_uefi_vendor_media_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint16_t path_name[0]; } __attribute__((packed)) fwts_uefi_file_path_dev_path; typedef struct { fwts_uefi_dev_path dev_path; fwts_uefi_guid protocol_guid; } __attribute__((packed)) fwts_media_protocol_dev_path; typedef struct { fwts_uefi_dev_path dev_path; fwts_uefi_guid fw_file_name; } __attribute__((packed)) fwts_piwg_fw_file_dev_path; typedef struct { fwts_uefi_dev_path dev_path; fwts_uefi_guid fw_volume_name; } __attribute__((packed)) fwts_piwg_fw_volume_dev_path; typedef struct { fwts_uefi_dev_path dev_path; uint32_t reserved; uint64_t starting_offset; uint64_t ending_offset; } __attribute__((packed)) fwts_relative_offset_range_path; typedef struct { fwts_uefi_dev_path dev_path; uint64_t starting_addr; uint64_t ending_addr; fwts_uefi_guid disk_type_guid; uint16_t disk_instance; } __attribute__((packed)) fwts_ram_disk_path; typedef struct { fwts_uefi_dev_path dev_path; uint16_t device_type; uint16_t status_flags; char description[0]; } __attribute__((packed)) fwts_uefi_bios_dev_path; typedef struct { fwts_uefi_guid signaturetype; uint32_t signaturelistsize; uint32_t signatureheadersize; uint32_t signaturesize; } __attribute__((packed)) fwts_uefi_signature_list; void fwts_uefi_str16_to_str(char *dst, const size_t len, const uint16_t *src); size_t fwts_uefi_str16len(const uint16_t *str); void fwts_uefi_get_varname(char *varname, const size_t len, const fwts_uefi_var *var); int fwts_uefi_get_variable(const char *varname, fwts_uefi_var *var); void fwts_uefi_free_variable(fwts_uefi_var *var); void fwts_uefi_free_variable_names(fwts_list *list); int fwts_uefi_get_variable_names(fwts_list *list); void fwts_uefi_print_status_info(fwts_framework *fw, const uint64_t status); char *fwts_uefi_attribute_info(uint32_t attr); bool fwts_uefi_efivars_iface_exist(void); void fwts_uefi_rt_support_status_get(int fd, uint32_t *rtservicessupported); PRAGMA_POP #endif src/lib/include/fwts_version.h000066400000000000000000000015141465205512700167470ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define FWTS_VERSION "V24.07.00" #define FWTS_DATE "2024-07-30 03:13:27" src/lib/include/fwts_wakealarm.h000066400000000000000000000023041465205512700172240ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_WAKEALARM_H__ #define __FWTS_WAKEALARM_H__ #include #include "fwts_framework.h" int fwts_wakealarm_test_firing(fwts_framework *fw, const uint32_t sleep); int fwts_wakealarm_trigger(fwts_framework *fw, const uint32_t seconds); int fwts_wakealarm_cancel(fwts_framework *fw); int fwts_wakealarm_get(fwts_framework *fw, struct rtc_time *rtc_tm); int fwts_wakealarm_set(fwts_framework *fw, struct rtc_time *rtc_tm); #endif src/lib/src/000077500000000000000000000000001465205512700132115ustar00rootroot00000000000000src/lib/src/Makefile.am000066400000000000000000000053501465205512700152500ustar00rootroot00000000000000# # Copyright (C) 2010-2024 Canonical, Ltd. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # AM_CPPFLAGS = \ -I$(top_srcdir)/src/lib/include \ -I$(top_srcdir)/src/libfwtsiasl \ -I$(top_srcdir)/src/acpica/source/include \ -I$(top_srcdir)/src/acpica/source/compiler \ -DDATAROOTDIR=\"$(datarootdir)\" \ -Wall -Werror -Wextra \ -Wno-address-of-packed-member pkglib_LTLIBRARIES = libfwts.la libfwts_la_LDFLAGS = -version-info 1:0:0 libfwts_la_LIBADD = \ -lm -lpthread -lbsd \ @GIO_LIBS@ \ @GLIB_LIBS@ libfwts_la_CPPFLAGS = \ $(AM_CPPFLAGS) \ @GIO_CFLAGS@ \ @GLIB_CFLAGS@ \ -DACPI_DEBUG_OUTPUT if HAVE_LIBFDT dt_sources = \ fwts_devicetree.c endif # # Components of the fwts core helper library libfwts # libfwts_la_SOURCES = \ fwts_ac_adapter.c \ fwts_acpi_object_eval.c \ fwts_acpi_tables.c \ fwts_acpi.c \ fwts_acpid.c \ fwts_alloc.c \ fwts_arch.c \ fwts_args.c \ fwts_backtrace.c \ fwts_battery.c \ fwts_binpaths.c \ fwts_button.c \ fwts_checkeuid.c \ fwts_checksum.c \ fwts_clog.c \ fwts_cmos.c \ fwts_coreboot.c \ fwts_coreboot_cbmem.c \ fwts_cpu.c \ fwts_dump.c \ fwts_dump_data.c \ fwts_ebda.c \ fwts_efi_module.c \ fwts_fileio.c \ fwts_firmware.c \ fwts_formatting.c \ fwts_framework.c \ fwts_get.c \ fwts_gpe.c \ fwts_guid.c \ fwts_hwinfo.c \ fwts_iasl.c \ fwts_interactive.c \ fwts_ioport.c \ fwts_ipmi.c \ fwts_json.c \ fwts_kernel.c \ fwts_keymap.c \ fwts_klog.c \ fwts_olog.c \ fwts_list.c \ fwts_log.c \ fwts_log_html.c \ fwts_log_json.c \ fwts_log_plaintext.c \ fwts_log_scan.c \ fwts_log_xml.c \ fwts_memorymap.c \ fwts_mmap.c \ fwts_modprobe.c \ fwts_multiproc.c \ fwts_oops.c \ fwts_pci.c \ fwts_pipeio.c \ fwts_release.c \ fwts_scan_efi_systab.c \ fwts_set.c \ fwts_smbios.c \ fwts_stringextras.c \ fwts_summary.c \ fwts_text_list.c \ fwts_tpm.c \ fwts_tty.c \ fwts_uefi.c \ fwts_wakealarm.c \ fwts_pm_method.c \ fwts_safe_mem.c \ fwts_pm_debug.c \ $(dt_sources) -include $(top_srcdir)/git.mk src/lib/src/fwts_ac_adapter.c000066400000000000000000000077761465205512700165240ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #include #include #include #include #include #include #include #define FWTS_AC_ADAPTER_ANY (0x0) #define FWTS_AC_ADAPTER_ONLINE (0x1) #define FWTS_AC_ADAPTER_OFFLINE (0x2) #define SYS_INTERFACE (0x0) #define PROC_INTERFACE (0x1) typedef struct { const char *path; /* Path name of interface */ const char *state; /* Name of online/offline status */ const char *offline; /* Contents of state when offline */ const char *online; /* Contents of state when online */ const char *type; /* /sys/class type to indicate Mains power, NULL if not used */ } fwts_ac_interface_info; static const fwts_ac_interface_info fwts_ac_interfaces[] = { { FWTS_SYS_CLASS_POWER_SUPPLY, "online", "0", "1", "Mains" }, { FWTS_PROC_ACPI_AC_ADAPTER, "state", "off-line", "on-line", NULL } }; /* * fwts_ac_adapter_get_state() * fetch count of matching and non-matching instances of * AC adapter state, state can be: * FWTS_AC_ADAPTER_ONLINE - connected to AC adapter * FWTS_AC_ADAPTER_OFFLINE - not connected to AC adapter * FWTS_AC_ADAPTER_ANY - either of above * matching is incremented for each AC adapter instance that matches * not_matching is incremented for each AC adapter instance that does * not match. */ int fwts_ac_adapter_get_state(const int state, int *matching, int *not_matching) { DIR *ac_power_dir; struct dirent *entry; fwts_ac_interface_info const *ac_interface; /* Try to user newer /sys interface first */ if ((ac_power_dir = opendir(FWTS_SYS_CLASS_POWER_SUPPLY))) { int count = 0; while (readdir(ac_power_dir) != NULL) count++; /* no power supply dir exists */ if (count == 2) { (void)closedir(ac_power_dir); return FWTS_ERROR; } rewinddir(ac_power_dir); ac_interface = &fwts_ac_interfaces[SYS_INTERFACE]; /* then try older /proc interface */ } else if ((ac_power_dir = opendir(FWTS_PROC_ACPI_AC_ADAPTER))) { ac_interface = &fwts_ac_interfaces[PROC_INTERFACE]; } else { return FWTS_ERROR; } do { entry = readdir(ac_power_dir); if (entry && entry->d_name[0] != '.') { char path[PATH_MAX]; char *data; /* Check that type field matches the expected type */ if (ac_interface->type != NULL) { snprintf(path, sizeof(path), "%s/%s/type", ac_interface->path, entry->d_name); if ((data = fwts_get(path)) != NULL) { bool mismatch = (strstr(ac_interface->type, data) != NULL); free(data); if (mismatch) continue; /* type don't match, skip this entry */ } else continue; /* can't check type, skip this entry */ } snprintf(path, sizeof(path), "%s/%s/%s", ac_interface->path, entry->d_name, ac_interface->state); if ((data = fwts_get(path)) != NULL) { const char *state_text = ""; switch (state) { case FWTS_AC_ADAPTER_ANY: (*matching)++; free(data); continue; case FWTS_AC_ADAPTER_ONLINE: state_text = ac_interface->online; break; case FWTS_AC_ADAPTER_OFFLINE: state_text = ac_interface->offline; break; } if (strstr(data, state_text) != NULL) (*matching)++; else (*not_matching)++; } free(data); } } while (entry); (void)closedir(ac_power_dir); return FWTS_OK; } src/lib/src/fwts_acpi.c000066400000000000000000000033171465205512700153400ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include "fwts.h" const char *fwts_acpi_fadt_preferred_pm_profile(const int profile) { static const char *pm_profiles[] = { "Unspecified", "Desktop", "Mobile", "Workstation", "Enterprise Server", "SOHO Server", "Appliance PC", "Performance Server", "Tablet" }; if ((profile < 0) || profile >= (int)(FWTS_ARRAY_SIZE(pm_profiles))) return "Reserved"; return pm_profiles[profile]; } /* * fwts_acpi_table_get_header() * copy into ACPI table header from raw data */ void fwts_acpi_table_get_header(fwts_acpi_table_header *hdr, uint8_t *data) { memcpy(hdr, data, sizeof(fwts_acpi_table_header)); } bool fwts_acpi_data_zero(const void *data, const size_t len) { uint8_t *ptr = (uint8_t *) data; size_t i; for (i = 0; i < len; i++) if (*ptr++) return false; return true; } src/lib/src/fwts_acpi_object_eval.c000066400000000000000000002710131465205512700176750ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #include #include #include #include #include /* acpica headers */ #pragma GCC diagnostic ignored "-Wunused-parameter" #include "acpi.h" #pragma GCC diagnostic error "-Wunused-parameter" #include "fwts_acpi_object_eval.h" typedef struct { const ACPI_STATUS status; const fwts_log_level level; const char *error_type; const char *error_text; const char *advice; } acpi_eval_error; static const acpi_eval_error errors[] = { /* ACPI_STATUS fwts_log_level error_type error_text */ { AE_ERROR, LOG_LEVEL_HIGH, "AEError", "Unspecified error", "An internal unspecified ACPICA execution error has occurred." }, { AE_NO_ACPI_TABLES, LOG_LEVEL_HIGH, "AENoACPITables", "No ACPI tables", "No ACPI tables could be found. Normally this indicates the tables could not be loaded " "from firmware or a provided firmware dump file." }, { AE_NO_NAMESPACE, LOG_LEVEL_HIGH, "AENoNamespace", "No namespace", "An ACPI namespace was not loaded. This happens if an ACPI root node could not be found." }, { AE_NO_MEMORY, LOG_LEVEL_CRITICAL, "AENoMemory", "Out of memory", "No more memory could be allocated from the heap." }, { AE_NOT_FOUND, LOG_LEVEL_CRITICAL, "AENotFound", "Not found", "An ACPI object or entity was requested but could not be found. Running fwts with the " "--acpica=slack option may work around this issue." }, { AE_NOT_EXIST, LOG_LEVEL_CRITICAL, "AENotExist", "Not exist", "An ACPI object or entity was requested but does not exist.", }, { AE_ALREADY_EXISTS, LOG_LEVEL_HIGH, "AEAlreadyExists", "Already exists", "An ACPI object or entity already exists. Sometimes this occurs when code is not " "serialized and it has been created a second time by another thread. ACPICA can detect " "these errors and enable auto serialization to try to work around this error. " }, { AE_TYPE, LOG_LEVEL_CRITICAL, "AETtype", "Type", "The type of an object is incorrect and does not match the expected type. ACPI will " "generally abort execution of the AML op-code that causes this error." }, { AE_NULL_OBJECT, LOG_LEVEL_CRITICAL, "AENullObject", "Null object", "An ACPI object is NULL when it was expected to be non-NULL." }, { AE_NULL_ENTRY, LOG_LEVEL_CRITICAL, "AENullEntry", "Null entry", "The requested ACPI object did not exist. This can occur when a root entry is " "NULL." }, { AE_BUFFER_OVERFLOW, LOG_LEVEL_CRITICAL, "AEBufferOverflow", "Buffer overflow", "An ACPI buffer that was provided was too small to contain the data to be copied " "into it. This generally indicates an AML bug." }, { AE_STACK_OVERFLOW, LOG_LEVEL_CRITICAL, "AEStackOverflow", "Stack overflow", "An ACPI method call failed because the call nesting was too deep and the " "internal APCI execution stack overflowed. This generally occurs with AML that " "may be recursing too deeply." }, { AE_STACK_UNDERFLOW, LOG_LEVEL_CRITICAL, "AEStackUnderflow", "Stack underflow", "An ACPI method call failed because the internal ACPI execution stack underflowed. " "This occurred while walking the object stack and popping off an object from an empty stack." }, { AE_NOT_IMPLEMENTED, LOG_LEVEL_HIGH, "AENotImplemented", "Not implemented", "The ACPICA execution engine has not implemented a feature." }, { AE_SUPPORT, LOG_LEVEL_HIGH, "AESupport", "Support", "Normally this occurs when AML attempts to perform an action that is not supported, " "such as converting objects in an unsupported way or attempting to access memory using " "an unsupported address space type." }, { AE_LIMIT, LOG_LEVEL_CRITICAL, "AELimit", "Limit", "A predefined limit was reached, for example, attempting to access an I/O port above the " "allowed 64K limit or a semaphore handle is out of range." }, { AE_TIME, LOG_LEVEL_HIGH, "AETime", "Timeout", "A timeout has been reached, for example a semaphore has timed out." }, { AE_ACQUIRE_DEADLOCK, LOG_LEVEL_CRITICAL, "AEAcqDeadlock", "Acquire deadlock", "A mutex acquire was aborted because a potential deadlock was detected." }, { AE_RELEASE_DEADLOCK, LOG_LEVEL_CRITICAL, "AERelDeadlock", "Release deadlock", "A mutex release was aborted because a potential deadlock was detected." }, { AE_NOT_ACQUIRED, LOG_LEVEL_CRITICAL, "AENotAcq", "Not acquired", "An attempt to release a mutex or an ACPI global lock failed because it " "had not previously acquired. This normally indicates an AML programming bug." }, { AE_ALREADY_ACQUIRED, LOG_LEVEL_CRITICAL, "AEAlreadyAcq", "Already acquired", "An attempt to re-acquire mutex or an ACPI global lock failed because it " "had not previously acquired. This normally indicates an AML programming bug." }, { AE_NO_HARDWARE_RESPONSE, LOG_LEVEL_HIGH, "AENoHWResponse", "No hardware response", "ACPI gave up waiting for hardware to respond. For example, a SMI_CMD failed or " "the platform does not have an ACPI global lock defined or an ACPI event could " "not be enabled." }, { AE_NO_GLOBAL_LOCK, LOG_LEVEL_HIGH, "AENoGlobalLock", "No global lock", "The platform does not define an ACPI global lock in the FACS." }, { AE_ABORT_METHOD, LOG_LEVEL_CRITICAL, "AEAbortMethod", "Abort method", "Execution of an ACPI method was aborted because the internal ACPICA AcpiGbl_AbortMethod " "flag was set to true. This should not occur." }, { AE_SAME_HANDLER, LOG_LEVEL_HIGH, "AESameHandler", "Same handler", "An attempt was made to install the same handler that is already installed." }, { AE_NO_HANDLER, LOG_LEVEL_CRITICAL, "AENoHandler", "No handler", "A handler for a General Purpose Event operation was not installed." }, { AE_OWNER_ID_LIMIT, LOG_LEVEL_HIGH, "AEOwnerIDLimit", "Owner ID limit", "A maximum of 255 OwnerIds have been used. There are no more Owner IDs available for " "ACPI tables or control methods." }, { AE_BAD_PARAMETER, LOG_LEVEL_HIGH, "AEBadParam", "Args: Bad parameter", "A parameter passed is out of range or invalid." }, { AE_BAD_CHARACTER, LOG_LEVEL_HIGH, "AEBadChar", "Args: Bad character", "An invalid character was found in an ACPI name." }, { AE_BAD_PATHNAME, LOG_LEVEL_HIGH, "AEBadPathname", "Args: Bad pathname", "An internal AML namestring could not be built because of an invalid pathname." }, { AE_BAD_DATA, LOG_LEVEL_HIGH, "AEBadData", "Args: Bad data", "A buffer or package contained some incorrect data." }, { AE_BAD_HEX_CONSTANT, LOG_LEVEL_HIGH, "AEBadHexConst", "Args: Bad hex constant", "An invalid character was found in a hexadecimal constant." }, { AE_BAD_OCTAL_CONSTANT, LOG_LEVEL_HIGH, "AEBadOctConst", "Args: Bad octal constant", "An invalid character was found in an octal constant." }, { AE_BAD_DECIMAL_CONSTANT, LOG_LEVEL_HIGH, "AEBadDecConst", "Args: Bad decimal constant", "An invalid character was found in a decimal constant." }, { AE_MISSING_ARGUMENTS, LOG_LEVEL_CRITICAL, "AEMissingArgs", "Args: Missing arguments", "Too few arguments were passed into an ACPI control method." }, { AE_BAD_ADDRESS, LOG_LEVEL_CRITICAL, "AEBadAddr", "Args: Bad address", "An illegal null I/O address was referenced by the AML." }, { AE_AML_BAD_OPCODE, LOG_LEVEL_CRITICAL, "AEAMLBadOpCode", "Bad AML opcode", "An invalid AML opcode encountered during AML execution." }, { AE_AML_NO_OPERAND, LOG_LEVEL_HIGH, "AEAMLNoOperand", "Missing operand", "An AML opcode was missing a required operand." }, { AE_AML_OPERAND_TYPE, LOG_LEVEL_HIGH, "AEAMLOperandType", "Incorrect operand type", "An AML opcode had an operand of an incorrect type." }, { AE_AML_OPERAND_VALUE, LOG_LEVEL_HIGH, "AEAMLOperandValue", "Incorrect operand value", "An AML opcode has an operand of an inappropriate or invalid value.", }, { AE_AML_UNINITIALIZED_LOCAL, LOG_LEVEL_HIGH, "AEAMLUninitLocal", "Uninitialized local variable", "A method attempted to use a local variable that was not initialized." }, { AE_AML_UNINITIALIZED_ARG, LOG_LEVEL_HIGH, "AEAMLUninitArg", "Uninitialized argument", "A method attempted to use an uninitialized argument." }, { AE_AML_UNINITIALIZED_ELEMENT, LOG_LEVEL_HIGH, "AEAMLUninitElement", "Uninitialized element", "A method attempted to use an empty element in an ACPI package." }, { AE_AML_NUMERIC_OVERFLOW, LOG_LEVEL_HIGH, "AEAMLNumericOverflow", "Numeric overflow", "A numeric overflow occurred, for example when converting a BCD value." }, { AE_AML_REGION_LIMIT, LOG_LEVEL_CRITICAL, "AEAMLRegionLimit", "Region limit", "An attempt to access beyond the end of an ACPI Operation Region occurred." }, { AE_AML_BUFFER_LIMIT, LOG_LEVEL_CRITICAL, "AEAMLBufferLimit", "Buffer limit", "An attempt to access beyond the end of an ACPI buffer occurred." }, { AE_AML_PACKAGE_LIMIT, LOG_LEVEL_CRITICAL, "AEAMLPackgeLimit", "Package limit", "An attempt to access beyond the endof an ACPI package occurred." }, { AE_AML_DIVIDE_BY_ZERO, LOG_LEVEL_CRITICAL, "AEAMLDivideByZero", "Division by zero", "A division by zero error occurred while executing the AML Divide op-code" }, { AE_AML_NAME_NOT_FOUND, LOG_LEVEL_HIGH, "AEAMLNameNotFound", "Name not found", "An ACPI named reference could not be resolved." }, { AE_AML_INTERNAL, LOG_LEVEL_HIGH, "AEAMLInternal", "Internal ACPICA execution engine error", "An internal error occurred in the ACPICA execution interpreter. A bug report should " "be filed against fwts so that this can be resolved." }, { AE_AML_INVALID_SPACE_ID, LOG_LEVEL_HIGH, "AEAMLInvalidSpaceID", "Invalid space ID error", "An invalid ACPI Operation Region Space ID has been encountered." }, { AE_AML_STRING_LIMIT, LOG_LEVEL_HIGH, "AEAMLStringLimit", "String limit", "A string more than 200 characters long has been used." }, { AE_AML_NO_RETURN_VALUE, LOG_LEVEL_HIGH, "AEAMLNoReturnValue", "No return value", "A method did not return the required value that was expected." }, { AE_AML_METHOD_LIMIT, LOG_LEVEL_HIGH, "AEAMLMethodLimit", "Method limit", "A control method reached a limit of 255 concurrent thread executions and hit the ACPICA " "re-entrancy limit." }, { AE_AML_NOT_OWNER, LOG_LEVEL_HIGH, "AEAMLNotOwner", "Not owner", "A thread attempted to release a mutex that it did not own.", }, { AE_AML_MUTEX_ORDER, LOG_LEVEL_HIGH, "AEAMLMutexOrder", "Mutex order", "Deadlock prevention has detected that the current mutex sync level is too large." }, { AE_AML_MUTEX_NOT_ACQUIRED, LOG_LEVEL_HIGH, "AEAMLMutexNotAcq", "Mutex not acquired", "An attempt was made to release a mutex that had not been acquired." }, { AE_AML_INVALID_RESOURCE_TYPE, LOG_LEVEL_HIGH, "AEAMLInvResourceType", "Invalid resource type", "An ACPI resource list contained an invalid resource type." }, { AE_AML_INVALID_INDEX, LOG_LEVEL_HIGH, "AEAMLInvIndex", "Invalid index", "An attempt to get a node with an index that was too large occurred, for example an ACPI " "ArgN or LocalN were N was out of range." }, { AE_AML_REGISTER_LIMIT, LOG_LEVEL_HIGH, "AEAMLRegisterLimit", "Register limit", "An attempt to use a bank value that is beyond the capacity of a register occurred." }, { AE_AML_NO_WHILE, LOG_LEVEL_CRITICAL, "AEAMLNoWhile", "No while", "A Break or Continue op-code was reached without a matching While op-code." }, { AE_AML_ALIGNMENT, LOG_LEVEL_CRITICAL, "AEAMLAlignment", "Misaligmnent", "A non-aligned memory transfer was attempted on a machine that does not " "support it." }, { AE_AML_NO_RESOURCE_END_TAG, LOG_LEVEL_HIGH, "AEAMLNoResEndTag", "No resource end tag", "An ACPI resource list had a missing End Tag." }, { AE_AML_BAD_RESOURCE_VALUE, LOG_LEVEL_HIGH, "AEAMLBadResValue", "Bad resource value", "An ACPI resource element had an invalid value." }, { AE_AML_CIRCULAR_REFERENCE, LOG_LEVEL_CRITICAL, "AEAMLCircularRef", "Circular reference", "Two references refer to each other, which is not allowed." }, { AE_AML_BAD_RESOURCE_LENGTH, LOG_LEVEL_HIGH, "AEAMLBadResLength", "Bad resource length", "The length of an ACPI Resource Descriptor was incorrect." }, { AE_AML_ILLEGAL_ADDRESS, LOG_LEVEL_CRITICAL, "AEAMLIllegalAddr", "Illegal address", "A memory, PCI configuration or I/O address was encountered with an illegal address." }, /* { AE_AML_INFINITE_LOOP, LOG_LEVEL_HIGH, "AEAMLInfiniteLoop", "Infinite loop", NULL }, { AE_AML_INFINITE_LOOP, LOG_LEVEL_HIGH, "AEAMLInfiniteLoop", "Infinite loop", "An AML While loop exceeded the maximum execution time." }, */ { AE_AML_UNINITIALIZED_NODE, LOG_LEVEL_HIGH, "AEAMLUninitNode", "Uninitialized node", "A namespace node is uninitialized or unresolved." }, { AE_AML_TARGET_TYPE, LOG_LEVEL_HIGH, "AEAMLTargetType", "Target type", "A target operand of an incorrect type was encountered." }, { AE_AML_PROTOCOL, LOG_LEVEL_HIGH, "AEAMLViolateProtocol", "Violation protocol", "Violation of a fixed ACPI protocol." }, { AE_AML_BUFFER_LENGTH, LOG_LEVEL_HIGH, "AEAMLBadBufLength", "Bad buffer length", "The length of the buffer is invalid/incorrect." }, { 0, 0, NULL, NULL , NULL} }; static fwts_list *fwts_object_names; static bool fwts_acpi_initialized = false; /* * fwts_acpi_init() * Initialise ACPIA engine and collect method namespace */ int fwts_acpi_init(fwts_framework *fw) { if (fwts_acpica_init(fw) != FWTS_OK) return FWTS_ERROR; /* Gather all object names */ fwts_object_names = fwts_acpica_get_object_names(0); fwts_acpi_initialized = true; return FWTS_OK; } /* * fwts_acpi_deinit() * Close ACPIA engine and free method namespace */ int fwts_acpi_deinit(fwts_framework *fw) { int ret = FWTS_ERROR; FWTS_UNUSED(fw); if (fwts_acpi_initialized) { fwts_list_free(fwts_object_names, free); fwts_object_names = NULL; ret = fwts_acpica_deinit(); fwts_acpi_initialized = false; } return ret; } /* * fwts_acpi_object_get_names() * return list of object names */ fwts_list *fwts_acpi_object_get_names(void) { return fwts_object_names; } /* * fwts_acpi_object_exists() * return first matching name */ char *fwts_acpi_object_exists(const char *name) { size_t name_len = strlen(name); fwts_list_link *item; fwts_list_foreach(item, fwts_object_names) { char *method_name = fwts_list_data(char*, item); size_t len = strlen(method_name); if (strncmp(name, method_name + len - name_len, name_len) == 0) return method_name; } return NULL; } /* * fwts_acpi_object_dump_recursive() * dump out an object, minimal form */ static void fwts_acpi_object_dump_recursive( fwts_framework *fw, const ACPI_OBJECT *obj, const int depth, const int index) { uint32_t i; char index_buf[6]; ACPI_BUFFER buffer; ACPI_STATUS status; char full_name[128]; buffer.Length = sizeof(full_name); buffer.Pointer = full_name; if (index > -1) snprintf(index_buf, sizeof(index_buf), "%2.2d: ", (uint8_t) index); else index_buf[0] = '\0'; switch (obj->Type) { case ACPI_TYPE_INTEGER: fwts_log_info_verbatim(fw, "%*s%sINTEGER: 0x%8.8llx", depth * 2, "", index_buf, (unsigned long long)obj->Integer.Value); break; case ACPI_TYPE_STRING: fwts_log_info_verbatim(fw, "%*s%sSTRING: %s", depth * 2, "", index_buf, obj->String.Pointer); break; case ACPI_TYPE_BUFFER: fwts_log_info_verbatim(fw, "%*s%sBUFFER: (%d bytes)", depth * 2, "", index_buf, obj->Buffer.Length); break; case ACPI_TYPE_PACKAGE: fwts_log_info_verbatim(fw, "%*s%sPackage has %d elements:",depth * 2, "", index_buf, obj->Package.Count); for (i = 0; i < obj->Package.Count; i++) { ACPI_OBJECT *element = &obj->Package.Elements[i]; fwts_acpi_object_dump_recursive(fw, element, depth + 1, i); } break; case ACPI_TYPE_LOCAL_REFERENCE: status = AcpiGetName(obj->Reference.Handle, ACPI_FULL_PATHNAME, &buffer); if (ACPI_SUCCESS(status)) fwts_log_info_verbatim(fw, "%*s%sReference: %s", depth * 2, "", index_buf, full_name); break; default: fwts_log_info_verbatim(fw, "%*s%sUnknown type 0x%2.2x\n", depth * 2, "", index_buf, obj->Type); break; } } /* * fwts_method_object_dump() * dump out an object, minimal form */ void fwts_acpi_object_dump(fwts_framework *fw, const ACPI_OBJECT *obj) { fwts_acpi_object_dump_recursive(fw, obj, 1, -1); } /* * fwts_acpi_object_evaluate_report_error() * report any errors found during object evaluation */ void fwts_acpi_object_evaluate_report_error( fwts_framework *fw, const char *name, const ACPI_STATUS status) { int i; /* Generic cases */ for (i = 0; errors[i].error_type; i++) { if (status == errors[i].status) { fwts_failed(fw, errors[i].level, errors[i].error_type, "Detected error '%s' when evaluating '%s'.", errors[i].error_text, name); if (errors[i].advice != NULL) fwts_advice(fw, "%s", errors[i].advice); return; } } /* Special cases */ switch (status) { case AE_OK: break; case AE_AML_LOOP_TIMEOUT: fwts_warning(fw, "Detected an infinite loop when evaluating method '%s'. ", name); fwts_advice(fw, "This may occur because we are emulating the execution " "in this test environment and cannot handshake with " "the embedded controller or jump to the BIOS via SMIs. " "However, the fact that AML code spins forever means that " "lockup conditions are not being checked for in the AML bytecode."); break; /* Unknown?! */ default: fwts_failed(fw, LOG_LEVEL_MEDIUM, "AMLFailedToEvaluate", "Failed to evaluate '%s', got error code %d.", name, status); break; } } /* * fwts_acpi_object_evaluate() * evaluate object, return error status (handle this with * fwts_method_evaluate_report_error()). * This returns buf which auto allocates any return values * which need to be freed post-evalutation using free(). */ ACPI_STATUS fwts_acpi_object_evaluate(fwts_framework *fw, char *name, ACPI_OBJECT_LIST *arg_list, ACPI_BUFFER *buf) { FWTS_UNUSED(fw); buf->Length = ACPI_ALLOCATE_BUFFER; buf->Pointer = NULL; return AcpiEvaluateObject(NULL, name, arg_list, buf); } int fwts_method_check_type__( fwts_framework *fw, const char *name, const ACPI_BUFFER *buf, const ACPI_OBJECT_TYPE type, const char *type_name) { ACPI_OBJECT *obj; if ((buf == NULL) || (buf->Pointer == NULL)) { fwts_method_failed_null_object(fw, name, type_name); return FWTS_ERROR; } obj = buf->Pointer; if (!fwts_method_type_matches(obj->Type, type)) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "MethodReturnBadType", "Method %s did not return %s.", name, type_name); return FWTS_ERROR; } return FWTS_OK; } /* * get_object_name() * get objname from full path nanme * ex. _BCL from _SB.PCI0.GFX0.LCD0._BCL */ static void get_object_name(const char *name, char* obj_name) { /* obj_name must have length of 5 */ if (name != NULL && strlen(name) >= 4) { memcpy(obj_name, name + strlen(name) - 4, 4); obj_name[4] = '\0'; } } /* * fwts_method_check_element_type() * check a element type of a sub-package */ int fwts_method_check_element_type( fwts_framework *fw, const char *name, const ACPI_OBJECT *obj, const uint32_t subpkg, const uint32_t element, const ACPI_OBJECT_TYPE type) { /* See references in actypes.h */ static const char *acpi_object_names[] = { "Any", "Integer", "String", "Buffer", "Package", "Field Unit", "Device", "Event", "Method", "Mutex", "Region", "Power", "Processor", "Thermal", "Buffer Field", "DDB Handle", "Debug Object", "Region Field", "Bank Field", "Index Field", "Reference", "Alias", "Method Alias", "Notify", "Address Handler", "Resource", "Resource Field", "Scope" }; if (obj->Package.Elements[element].Type != type) { char obj_name[5] = "_XYZ"; char tmp[128]; get_object_name(name, obj_name); snprintf(tmp, sizeof(tmp), "Method%sBadSubPackageReturnType", obj_name); if (type > FWTS_ARRAY_SIZE(acpi_object_names) - 1) { fwts_warning(fw, "Unknown ACPI object type detected"); return FWTS_ERROR; } fwts_failed(fw, LOG_LEVEL_HIGH, tmp, "%s sub-package %" PRIu32 " element %" PRIu32 " is a %s, " "expected a %s", name, subpkg, element, acpi_object_names[obj->Package.Elements[element].Type], acpi_object_names[type]); return FWTS_ERROR; } return FWTS_OK; } /* * Common types that can be returned. This is not a complete * list but it does cover the types we expect to return from * an ACPI evaluation. */ const char *fwts_method_type_name(const ACPI_OBJECT_TYPE type) { switch (type) { case ACPI_TYPE_INTEGER: return "integer"; case ACPI_TYPE_STRING: return "string"; case ACPI_TYPE_BUFFER: return "buffer"; case ACPI_TYPE_PACKAGE: return "package"; case ACPI_TYPE_BUFFER_FIELD: return "buffer_field"; case ACPI_TYPE_LOCAL_REFERENCE: return "reference"; case ACPI_TYPE_INTBUF: return "integer or buffer"; default: return "unknown"; } } /* * method_passed_sane() * helper function to report often used passed messages */ void fwts_method_passed_sane( fwts_framework *fw, const char *name, const char *type) { fwts_passed(fw, "%s correctly returned a sane looking %s.", name, type); } /* * method_passed_sane_uint64() * helper function to report often used passed uint64 values */ void fwts_method_passed_sane_uint64( fwts_framework *fw, const char *name, const uint64_t value) { fwts_passed(fw, "%s correctly returned sane looking " "value 0x%8.8" PRIx64 ".", name, value); } /* * fwts_method_failed_null_object() * helper function to report often used failed NULL object return */ void fwts_method_failed_null_object( fwts_framework *fw, const char *name, const char *type) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "MethodReturnNullObj", "%s returned a NULL object, and did not " "return %s.", name, type); } bool fwts_method_type_matches( const ACPI_OBJECT_TYPE t1, const ACPI_OBJECT_TYPE t2) { if (t1 == ACPI_TYPE_INTBUF && (t2 == ACPI_TYPE_INTEGER || t2 == ACPI_TYPE_BUFFER)) return true; if (t2 == ACPI_TYPE_INTBUF && (t1 == ACPI_TYPE_INTEGER || t1 == ACPI_TYPE_BUFFER)) return true; return t1 == t2; } /* * fwts_method_buffer_size() * check whether buffer size is matched */ int fwts_method_buffer_size( fwts_framework *fw, const char *name, const ACPI_OBJECT *obj, const size_t buf_size) { if (obj->Buffer.Length != buf_size) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "MethodBadBufferSize", "%s should return a buffer of %zd bytes, " "but instead returned %" PRIu32 " bytes.", name, buf_size, obj->Buffer.Length); return FWTS_ERROR; } return FWTS_OK; } /* * fwts_method_package_count_min() * check that an ACPI package has at least 'min' elements */ int fwts_method_package_count_min( fwts_framework *fw, const char *name, const ACPI_OBJECT *obj, const uint32_t min) { if (obj->Package.Count < min) { char objname[5] = "_XYZ"; char tmp[128]; get_object_name(name, objname); snprintf(tmp, sizeof(tmp), "Method%sElementCount", objname); fwts_failed(fw, LOG_LEVEL_CRITICAL, tmp, "%s should return package of at least %" PRIu32 " element%s, got %" PRIu32 " element%s instead.", name, min, min == 1 ? "" : "s", obj->Package.Count, obj->Package.Count == 1 ? "" : "s"); return FWTS_ERROR; } return FWTS_OK; } /* * method_package_count_equal() * check that an ACPI package has exactly 'count' elements */ int fwts_method_package_count_equal( fwts_framework *fw, const char *name, const ACPI_OBJECT *obj, const uint32_t count) { if (obj->Package.Count != count) { char objname[5] = "_XYZ"; char tmp[128]; get_object_name(name, objname); snprintf(tmp, sizeof(tmp), "Method%sElementCount", objname); fwts_failed(fw, LOG_LEVEL_CRITICAL, tmp, "%s should return package of %" PRIu32 " element%s, got %" PRIu32 " element%s instead.", name, count, count == 1 ? "" : "s", obj->Package.Count, obj->Package.Count == 1 ? "" : "s"); return FWTS_ERROR; } return FWTS_OK; } /* * fwts_method_subpackage_count_equal() * check that an ACPI subpackage has exactly 'count' elements */ int fwts_method_subpackage_count_equal( fwts_framework *fw, const char *name, const ACPI_OBJECT *obj, const uint32_t sub, const uint32_t count) { if (obj->Package.Count != count) { char objname[5] = "_XYZ"; char tmp[128]; get_object_name(name, objname); snprintf(tmp, sizeof(tmp), "Method%sSubPackageElementCount", objname); fwts_failed(fw, LOG_LEVEL_CRITICAL, tmp, "%s sub-package %" PRIu32 " was expected to have " "%" PRIu32 " element%s, got %" PRIu32 " element%s instead.", name, sub, count, count == 1 ? "" : "s", obj->Package.Count, obj->Package.Count == 1 ? "" : "s"); return FWTS_ERROR; } return FWTS_OK; } int fwts_method_package_elements_all_type( fwts_framework *fw, const char *name, const ACPI_OBJECT *obj, const ACPI_OBJECT_TYPE type) { uint32_t i; bool failed = false; char tmp[128]; for (i = 0; i < obj->Package.Count; i++) { if (!fwts_method_type_matches(obj->Package.Elements[i].Type, type)) { char objname[5] = "_XYZ"; get_object_name(name, objname); snprintf(tmp, sizeof(tmp), "Method%sElementType", objname); fwts_failed(fw, LOG_LEVEL_CRITICAL, tmp, "%s package element %" PRIu32 " was not the expected " "type '%s', was instead type '%s'.", name ? name : "unknown", i, fwts_method_type_name(type), fwts_method_type_name(obj->Package.Elements[i].Type)); failed = true; } } return failed ? FWTS_ERROR: FWTS_OK; } /* * fwts_method_package_elements_type__() * sanity check fields in a package that all have * the same type */ int fwts_method_package_elements_type__( fwts_framework *fw, const char *name, const ACPI_OBJECT *obj, const fwts_package_element *info, const uint32_t count) { uint32_t i; bool failed = false; char tmp[128]; if (fwts_method_package_count_equal(fw, name, obj, count) != FWTS_OK) return FWTS_ERROR; for (i = 0; i < obj->Package.Count; i++) { if (!fwts_method_type_matches(obj->Package.Elements[i].Type, info[i].type)) { char objname[5] = "_XYZ"; get_object_name(name, objname); snprintf(tmp, sizeof(tmp), "Method%sElementType", objname); fwts_failed(fw, LOG_LEVEL_CRITICAL, tmp, "%s package element %" PRIu32 " (%s) was not the expected " "type '%s', was instead type '%s'.", name ? name : "unknown", i, info[i].name, fwts_method_type_name(info[i].type), fwts_method_type_name(obj->Package.Elements[i].Type)); failed = true; } } return failed ? FWTS_ERROR: FWTS_OK; } int fwts_method_test_revision( fwts_framework *fw, const char *name, const uint32_t cur_revision, const uint32_t spec_revision) { char method[5]; char tag[22]; if (strlen(name) < 4) return FWTS_ERROR; memcpy(method, name + strlen(name) - 4, 4); method[4] = '\0'; snprintf(tag, 22, "Method%sBadRevision", method); if (cur_revision != spec_revision) { fwts_failed(fw, LOG_LEVEL_MEDIUM, tag, "%s revision is not revision %" PRIu32 ".", name, spec_revision); return FWTS_ERROR; } return FWTS_OK; } /* * fwts_method_test_integer_return * check if an integer object was returned */ void fwts_method_test_integer_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(obj); FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) == FWTS_OK) fwts_passed(fw, "%s correctly returned an integer.", name); } /* * fwts_method_test_string_return * check if an string object was returned */ void fwts_method_test_string_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(obj); FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_STRING) == FWTS_OK) fwts_passed(fw, "%s correctly returned a string.", name); } /* * fwts_method_test_reference_return * check if a reference object was returned */ void fwts_method_test_reference_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(obj); FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_LOCAL_REFERENCE) == FWTS_OK) fwts_passed(fw, "%s correctly returned a reference.", name); } /* * fwts_method_test_NULL_return * check if no object was returned */ void fwts_method_test_NULL_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); /* * In ACPICA SLACK mode null returns can be actually * forced to return ACPI integers. Blame an errata * and Windows compatibility for this mess. */ if (fw->acpica_mode & FWTS_ACPICA_MODE_SLACK) { if ((buf != NULL) && (buf->Pointer != NULL)) { ACPI_OBJECT *objtmp = buf->Pointer; if (fwts_method_type_matches(objtmp->Type, ACPI_TYPE_INTEGER)) { fwts_passed(fw, "%s returned an ACPI_TYPE_INTEGER as expected in slack mode.", name); return; } } } if (buf && buf->Length && buf->Pointer) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodShouldReturnNothing", "%s returned values, but was expected to return nothing.", name); fwts_log_info(fw, "Object returned:"); fwts_acpi_object_dump(fw, obj); fwts_advice(fw, "This probably won't cause any errors, but it should " "be fixed as the AML code is not conforming to the " "expected behaviour as described in the ACPI " "specification."); } else fwts_passed(fw, "%s returned no values as expected.", name); } /* * fwts_method_test_buffer_return * check if a buffer object was returned */ void fwts_method_test_buffer_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_BUFFER) == FWTS_OK) fwts_passed(fw, "%s correctly returned a buffer of %" PRIu32 " elements.", name, obj->Buffer.Length); } /* * fwts_method_test_all_reference_package_return * check if all elements are references in a package */ void fwts_method_test_all_reference_package_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_LOCAL_REFERENCE) != FWTS_OK) return; fwts_passed(fw, "%s returned a sane package of %" PRIu32 " references.", name, obj->Package.Count); } /* * fwts_method_test_integer_reserved_bits_return * check if reserved bits are zero'ed in a returned integer */ void fwts_method_test_integer_reserved_bits_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint64_t *mask = (uint64_t *) private; bool failed = false; if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; if (obj->Integer.Value & *mask) { failed = true; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodIllegalReserved", "%s returned value 0x%8.8" PRIx64 " and some of the " "reserved bits are set when they should be zero.", name, (uint64_t) obj->Integer.Value); } if (!failed) fwts_passed(fw, "%s correctly returned an integer.", name); } /* * fwts_method_test_integer_max_return * check if returned integer is less than a max value */ void fwts_method_test_integer_max_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint64_t *max = (uint64_t *) private; bool failed = false; if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; if (obj->Integer.Value > *max) { failed = true; fwts_failed(fw, LOG_LEVEL_HIGH, "MethodOutOfRangeValue", "%s returned value %" PRId64 " but range allowed " "is 0..%" PRId64 " .", name, (uint64_t) obj->Integer.Value, *max); } if (!failed) fwts_passed(fw, "%s correctly returned an integer.", name); } /* * fwts_method_test_package_integer_return * check if all integers in a returned package */ void fwts_method_test_package_integer_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t *element_size = (uint32_t *) private; if (strlen(name) < 4) return; if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_count_equal(fw, name, obj, *element_size) != FWTS_OK) return; if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_INTEGER) != FWTS_OK) return; fwts_method_passed_sane(fw, name, "package"); } /* * fwts_method_test_passed_failed_return * check if 0 or 1 (false/true) integer is returned */ void fwts_method_test_passed_failed_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { char *method = (char *)private; if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) == FWTS_OK) { uint32_t val = (uint32_t)obj->Integer.Value; if ((val == 0) || (val == 1)) fwts_method_passed_sane_uint64(fw, name, obj->Integer.Value); else { fwts_failed(fw, LOG_LEVEL_CRITICAL, "MethodReturnZeroOrOne", "%s returned 0x%8.8" PRIx32 ", should return 0 " "or 1.", method, val); fwts_advice(fw, "Method %s should be returning the correct " "0 or 1 return values. " "Unexpected behaviour may occur because of " "this error, the AML code does not conform to " "the ACPI specification and should be fixed.", method); } } } /* * fwts_method_test_polling_return * check if a returned polling time is valid */ void fwts_method_test_polling_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) == FWTS_OK) { char *method = (char *)private; if (obj->Integer.Value < 36000) { fwts_passed(fw, "%s correctly returned sane looking value " "%f seconds", method, (float)obj->Integer.Value / 10.0); } else { fwts_failed(fw, LOG_LEVEL_CRITICAL, "MethodPollTimeTooLong", "%s returned a value %f seconds > (1 hour) " "which is probably incorrect.", method, (float)obj->Integer.Value / 10.0); fwts_advice(fw, "The method is returning a polling interval " "which is very long and hence most probably " "incorrect."); } } } void fwts_evaluate_found_method( fwts_framework *fw, ACPI_HANDLE *parent, char *name, fwts_method_return check_func, void *private, ACPI_OBJECT_LIST *arg_list) { ACPI_BUFFER buf; ACPI_STATUS status; int sem_acquired; int sem_released; fwts_acpica_sem_count_clear(); buf.Length = ACPI_ALLOCATE_BUFFER; buf.Pointer = NULL; status = AcpiEvaluateObject(*parent, name, arg_list, &buf); if (ACPI_SUCCESS(status) && check_func != NULL) { ACPI_OBJECT *obj = buf.Pointer; check_func(fw, name, &buf, obj, private); } free(buf.Pointer); fwts_acpica_sem_count_get(&sem_acquired, &sem_released); if (sem_acquired != sem_released) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "AMLLocksAcquired", "%s left %d locks in an acquired state.", name, sem_acquired - sem_released); fwts_advice(fw, "Locks left in an acquired state generally indicates " "that the AML code is not releasing a lock. This can " "sometimes occur when a method hits an error " "condition and exits prematurely without releasing an " "acquired lock. It may be occurring in the method " "being tested or other methods used while evaluating " "the method."); } } int fwts_evaluate_method(fwts_framework *fw, const uint32_t test_type, /* Manditory or optional */ ACPI_HANDLE *parent, char *name, ACPI_OBJECT *args, uint32_t num_args, fwts_method_return check_func, void *private) { ACPI_OBJECT_LIST arg_list; ACPI_HANDLE method; ACPI_STATUS status; status = AcpiGetHandle (*parent, name, &method); if (ACPI_SUCCESS(status)) { arg_list.Count = num_args; arg_list.Pointer = args; fwts_evaluate_found_method(fw, parent, name, check_func, private, &arg_list); } if (status == AE_NOT_FOUND && !(test_type & METHOD_SILENT)) { if (test_type & METHOD_MANDATORY) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "MethodNotExist", "Object %s did not exist.", name); return FWTS_ERROR; } if (test_type & METHOD_OPTIONAL) { fwts_skipped(fw, "Skipping test for non-existent object %s.", name); return FWTS_SKIP; } } return FWTS_OK; } bool fwts_method_valid_HID_string(const char *str) { if (strlen(str) == 7) { /* PNP ID, must be 3 capitals followed by 4 hex */ if (!isupper(str[0]) || !isupper(str[1]) || !isupper(str[2])) return false; if (!isxdigit(str[3]) || !isxdigit(str[4]) || !isxdigit(str[5]) || !isxdigit(str[6])) return false; return true; } if (strlen(str) == 8) { /* ACPI ID, must be 4 capitals or digits followed by 4 hex */ if ((!isupper(str[0]) && !isdigit(str[0])) || (!isupper(str[1]) && !isdigit(str[1])) || (!isupper(str[2]) && !isdigit(str[2])) || (!isupper(str[3]) && !isdigit(str[3]))) return false; if (!isxdigit(str[4]) || !isxdigit(str[5]) || !isxdigit(str[6]) || !isxdigit(str[7])) return false; return true; } return false; } bool fwts_method_valid_EISA_ID( const uint32_t id, char *buf, const size_t buf_len) { snprintf(buf, buf_len, "%c%c%c%02" PRIX32 "%02" PRIX32, 0x40 + ((id >> 2) & 0x1f), 0x40 + ((id & 0x3) << 3) + ((id >> 13) & 0x7), 0x40 + ((id >> 8) & 0x1f), (id >> 16) & 0xff, (id >> 24) & 0xff); /* 3 chars in EISA ID must be upper case */ if (!isupper(buf[0]) || !isupper(buf[1]) || !isupper(buf[2])) return false; /* Last 4 digits are always going to be hex, so pass */ return true; } /* * Section 6.2 Device Configurations Objects */ static void method_test_CRS_size( fwts_framework *fw, const char *name, /* full _CRS or _PRS path name */ const char *objname, /* name of _CRS or _PRS object */ const char *tag, /* error log tag */ const size_t crs_length, /* size of _CRS buffer */ const size_t hdr_length, /* size of _CRS header */ const size_t data_length, /* length of _CRS data w/o header */ const size_t min, /* minimum allowed _CRS data size */ const size_t max, /* maximum allowed _CRS data size */ bool *passed) /* pass/fail flag */ { if (crs_length < data_length + hdr_length) { fwts_failed(fw, LOG_LEVEL_HIGH, tag, "%s Resource size is %zd bytes long but " "the size stated in the %s buffer header " "is %zd and hence is longer. The resource " "buffer is too short.", name, crs_length, objname, data_length); *passed = false; return; } if ((data_length < min) || (data_length > max)) { if (min != max) { fwts_failed(fw, LOG_LEVEL_CRITICAL, tag, "%s Resource data size was %zd bytes long, " "expected it to be between %zd and %zd bytes", name, data_length, min, max); *passed = false; } else { fwts_failed(fw, LOG_LEVEL_CRITICAL, tag, "%s Resource data size was %zd bytes long, " "expected it to be %zd bytes", name, data_length, min); *passed = false; } } } static void method_test_CRS_small_size( fwts_framework *fw, const char *name, const char *objname, const uint8_t *data, const size_t crs_length, const size_t min, const size_t max, bool *passed) { size_t data_length = data[0] & 7; char tmp[128]; snprintf(tmp, sizeof(tmp), "Method%sSmallResourceSize", objname); method_test_CRS_size(fw, name, objname, tmp, crs_length, 1, data_length, min, max, passed); } /* * CRS small resource checks, simple checking */ void fwts_method_test_CRS_small_resource_items( fwts_framework *fw, const char *name, const char *objname, const uint8_t *data, const size_t length, bool *passed, const char **tag) { uint8_t tag_item = (data[0] >> 3) & 0xf; char tmp[128]; static const char *types[] = { "Reserved", "Reserved", "Reserved", "Reserved", "IRQ Descriptor", "DMA Descriptor", "Start Dependent Functions Descriptor", "End Dependent Functions Descriptor", "I/O Port Descriptor", "Fixed Location I/O Port Descriptor", "Fixed DMA Descriptor", "Reserved", "Reserved", "Reserved", "Vendor Defined Descriptor", "End Tag Descriptor" }; switch (tag_item) { case 0x4: /* 6.4.2.1 IRQ Descriptor */ method_test_CRS_small_size(fw, name, objname, data, length, 2, 3, passed); break; case 0x5: /* 6.4.2.2 DMA Descriptor */ method_test_CRS_small_size(fw, name, objname, data, length, 2, 2, passed); if (!*passed) /* Too short, abort */ break; if ((data[2] & 3) == 3) { snprintf(tmp, sizeof(tmp), "Method%sDmaDescriptor", objname); fwts_failed(fw, LOG_LEVEL_HIGH, tmp, "%s DMA transfer type preference is 0x%" PRIx8 " which is reserved and invalid. See " "Section 6.4.2.2 of the ACPI specification.", name, data[2] & 3); *passed = false; } break; case 0x6: /* 6.4.2.3 Start Dependent Functions Descriptor */ method_test_CRS_small_size(fw, name, objname, data, length, 0, 1, passed); break; case 0x7: /* 6.4.2.4 End Dependent Functions Descriptor */ method_test_CRS_small_size(fw, name, objname, data, length, 0, 0, passed); break; case 0x8: /* 6.4.2.5 I/O Port Descriptor */ method_test_CRS_small_size(fw, name, objname, data, length, 7, 7, passed); if (!*passed) /* Too short, abort */ break; if (data[1] & 0xfe) { snprintf(tmp, sizeof(tmp), "Method%sIoPortInfoReservedNonZero", objname); fwts_failed(fw, LOG_LEVEL_HIGH, tmp, "%s I/O Port Descriptor Information field " "has reserved bits that are non-zero, got " "0x%" PRIx8 " and expected 0 or 1 for this " "field. ", name, data[1]); *passed = false; } if (((data[1] & 1) == 0) && (data[3] > 3)) { snprintf(tmp, sizeof(tmp), "Method%sIoPortInfoMinBase10BitAddr", objname); fwts_failed(fw, LOG_LEVEL_LOW, tmp, "%s I/O Port Descriptor range minimum " "base address is more than 10 bits however " "the Information field indicates that only " "a 10 bit address is being used.", name); *passed = false; } if (((data[1] & 1) == 0) && (data[5] > 3)) { snprintf(tmp, sizeof(tmp), "Method%sIoPortInfoMaxBase10BitAddr", objname); fwts_failed(fw, LOG_LEVEL_LOW, tmp, "%s I/O Port Descriptor range maximum " "base address is more than 10 bits however " "the Information field indicates that only " "a 10 bit address is being used.", name); *passed = false; } break; case 0x9: /* 6.4.2.6 Fixed Location I/O Port Descriptor */ method_test_CRS_small_size(fw, name, objname, data, length, 3, 3, passed); break; case 0xa: /* 6.4.2.7 Fixed DMA Descriptor */ method_test_CRS_small_size(fw, name, objname, data, length, 5, 5, passed); if (!*passed) /* Too short, abort */ break; if (data[5] > 5) { snprintf(tmp, sizeof(tmp), "Method%sFixedDmaTransferWidth", objname); fwts_failed(fw, LOG_LEVEL_HIGH, tmp, "%s DMA transfer width is 0x%" PRIx8 " which is reserved and invalid. See " "Section 6.4.2.7 of the ACPI specification.", name, data[5]); *passed = false; } break; case 0xe: /* 6.4.2.8 Vendor-Defined Descriptor */ method_test_CRS_small_size(fw, name, objname, data, length, 1, 7, passed); break; case 0xf: /* 6.4.2.9 End Tag */ method_test_CRS_small_size(fw, name, objname, data, length, 1, 1, passed); break; default: snprintf(tmp, sizeof(tmp), "Method%sUnkownSmallResourceItem", objname); fwts_failed(fw, LOG_LEVEL_HIGH, tmp, "%s tag bits 6:3 is an undefined " "small tag item name, value 0x%" PRIx8 ".", name, tag_item); fwts_advice(fw, "A small resource data type tag (byte 0, " "bits 6:3 of the %s buffer) contains " "an undefined small tag item 'name'. " "The %s buffer is therefore undefined " "and can't be used. See section " "'6.4.2 Small Resource Data Type' of the ACPI " "specification, and also table 6-161.", objname, objname); *passed = false; break; } *tag = types[tag_item]; } void fwts_method_test_CRS_large_size( fwts_framework *fw, const char *name, const char *objname, const uint8_t *data, const size_t crs_length, const size_t min, const size_t max, bool *passed) { size_t data_length; char tmp[128]; /* Small _CRS resources have a 3 byte header */ if (crs_length < 3) { snprintf(tmp, sizeof(tmp), "Method%sBufferTooSmall", objname); fwts_failed(fw, LOG_LEVEL_CRITICAL, tmp, "%s should return a buffer of at least three bytes in length.", name); *passed = false; return; } data_length = (size_t)data[1] + ((size_t)data[2] << 8); snprintf(tmp, sizeof(tmp), "Method%sLargeResourceSize",objname); method_test_CRS_size(fw, name, objname, tmp, crs_length, 3, data_length, min, max, passed); } /* * Some CRS value fetching helper functions. We handle all the * addresses and lengths in 64 bits to make life easier */ static uint64_t method_CRS_val64(const uint8_t *data) { uint64_t val = ((uint64_t)data[7] << 56) | ((uint64_t)data[6] << 48) | ((uint64_t)data[5] << 40) | ((uint64_t)data[4] << 32) | ((uint64_t)data[3] << 24) | ((uint64_t)data[2] << 16) | ((uint64_t)data[1] << 8) | (uint64_t)data[0]; return val; } static uint64_t method_CRS_val32(const uint8_t *data) { uint64_t val = ((uint64_t)data[3] << 24) | ((uint64_t)data[2] << 16) | ((uint64_t)data[1] << 8) | (uint64_t)data[0]; return val; } static uint64_t method_CRS_val24(const uint8_t *data) { /* 24 bit values assume lower 8 bits are zero */ uint64_t val = ((uint64_t)data[1] << 16) | ((uint64_t)data[0] << 8); return val; } static uint64_t method_CRS_val16(const uint8_t *data) { uint64_t val = ((uint64_t)data[1] << 8) | (uint64_t)data[0]; return val; } /* * Sanity check addresses according to table 6-179 of ACPI spec */ static void method_test_CRS_mif_maf( fwts_framework *fw, const char *name, /* Full _CRS or _PRS path name */ const char *objname, /* _CRS or _PRS name */ const uint8_t flag, /* _MIF _MAF flag field */ const uint64_t min, /* Min address */ const uint64_t max, /* Max address */ const uint64_t len, /* Range length */ const uint64_t granularity, /* Address granularity */ const char *tag, /* failed error tag */ const char *type, /* Resource type */ bool *passed) { char tmp[128]; uint8_t mif = (flag >> 2) & 1; uint8_t maf = (flag >> 3) & 1; static char *mif_maf_advice = "See section '6.4.3.5 Address Space Resource Descriptors' " "table 6-179 of the ACPI specification for more details " "about how the _MIF, _MAF and memory range and granularity " "rules apply. Typically the kernel does not care about these " "being correct, so this is a minor issue."; /* Table 6-179 Valid combination of Address Space Descriptors fields */ if (len == 0) { if ((mif == 1) && (maf == 1)) { snprintf(tmp, sizeof(tmp), "Method%s%sMifMafBothOne", objname, tag); if (fw->flags & FWTS_FLAG_SBBR) fwts_warning(fw, tmp, "%s %s _MIF and _MAF flags are both " "set to one which is invalid when " "the length field is 0.", name, type); else fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s %s _MIF and _MAF flags are both " "set to one which is invalid when " "the length field is 0.", name, type); fwts_advice(fw, "%s", mif_maf_advice); *passed = false; } if (mif == 1) { const uint64_t tmpgran = granularity + 1; if (tmpgran == 0) { /* Avoid min % tmp division by zero, flag an error */ snprintf(tmp, sizeof(tmp), "Method%s%sGranTooLarge", objname, tag); fwts_warning(fw, tmp, "%s %s granularity 0x%" PRIx64 " is too large when _MIF is 1.", name, type, granularity); *passed = false; } else if (min % tmpgran != 0) { snprintf(tmp, sizeof(tmp), "Method%s%sMinNotMultipleOfGran", objname, tag); if (fw->flags & FWTS_FLAG_SBBR) fwts_warning(fw, tmp, "%s %s _MIN address is not a multiple " "of the granularity when _MIF is 1.", name, type); else fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s %s _MIN address is not a multiple " "of the granularity when _MIF is 1.", name, type); fwts_advice(fw, "%s", mif_maf_advice); *passed = false; } } if (maf == 1) { const uint64_t tmpgran = granularity - 1; if (tmpgran == 0) { /* Avoid max % tmp division by zero, flag an error */ snprintf(tmp, sizeof(tmp), "Method%s%sGranTooSmall", objname, tag); fwts_warning(fw, tmp, "%s %s granularity 0x%" PRIx64 " is too small when _MAF is 1.", name, type, granularity); *passed = false; } else if (max % tmpgran != 0) { snprintf(tmp, sizeof(tmp), "Method%s%sMaxNotMultipleOfGran", objname, tag); if (fw->flags & FWTS_FLAG_SBBR) fwts_warning(fw, tmp, "%s %s _MAX address is not a multiple " "of the granularity when _MAF is 1.", name, type); else fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s %s _MAX address is not a multiple " "of the granularity when _MAF is 1.", name, type); fwts_advice(fw, "%s", mif_maf_advice); *passed = false; } } } else { if ((mif == 0) && (maf == 0) && (len % (granularity + 1) != 0)) { snprintf(tmp, sizeof(tmp), "Method%s%sLenNotMultipleOfGran", objname, tag); if (fw->flags & FWTS_FLAG_SBBR) fwts_warning(fw, tmp, "%s %s length is not a multiple " "of the granularity when _MIF " "and _MIF are 0.", name, type); else fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s %s length is not a multiple " "of the granularity when _MIF " "and _MIF are 0.", name, type); fwts_advice(fw, "%s", mif_maf_advice); *passed = false; } if (((mif == 0) && (maf == 1)) || ((mif == 1) && (maf == 0))) { snprintf(tmp, sizeof(tmp), "Method%s%sMifMafInvalid", objname, tag); if (fw->flags & FWTS_FLAG_SBBR) fwts_warning(fw, tmp, "%s %s _MIF and _MAF flags are either " "0 and 1 or 1 and 0 which is invalid when " "the length field is non-zero.", name, type); else fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s %s _MIF and _MAF flags are either " "0 and 1 or 1 and 0 which is invalid when " "the length field is non-zero.", name, type); fwts_advice(fw, "%s", mif_maf_advice); *passed = false; } if ((mif == 1) && (maf == 1)) { if (granularity != 0) { snprintf(tmp, sizeof(tmp), "Method%s%sGranularityNotZero", objname, tag); if (fw->flags & FWTS_FLAG_SBBR) fwts_warning(fw, tmp, "%s %s granularity 0x%" PRIx64 " is not zero as expected when " "_MIF and _MAF are both 1.", name, type, granularity); else fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s %s granularity 0x%" PRIx64 " is not zero as expected when " "_MIF and _MAF are both 1.", name, type, granularity); fwts_advice(fw, "%s", mif_maf_advice); *passed = false; } if (min > max) { snprintf(tmp, sizeof(tmp), "Method%s%sMaxLessThanMin", objname, tag); if (fw->flags & FWTS_FLAG_SBBR) fwts_warning(fw, tmp, "%s %s minimum address range 0x%" PRIx64 " is greater than the maximum address " "range 0x%" PRIx64 ".", name, type, min, max); else fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s %s minimum address range 0x%" PRIx64 " is greater than the maximum address " "range 0x%" PRIx64 ".", name, type, min, max); fwts_advice(fw, "%s", mif_maf_advice); *passed = false; } if (max - min + 1 != len) { snprintf(tmp, sizeof(tmp), "Method%s%sLengthInvalid", objname, tag); if (fw->flags & FWTS_FLAG_SBBR) fwts_warning(fw, tmp, "%s %s length 0x%" PRIx64 " does not match the difference between " "the minimum and maximum address ranges " "0x%" PRIx64 "-0x%" PRIx64 ".", name, type, len, min, max); else fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s %s length 0x%" PRIx64 " does not match the difference between " "the minimum and maximum address ranges " "0x%" PRIx64 "-0x%" PRIx64 ".", name, type, len, min, max); fwts_advice(fw, "%s", mif_maf_advice); *passed = false; } } } } /* * CRS large resource checks, simple checking */ void fwts_method_test_CRS_large_resource_items( fwts_framework *fw, const char *name, const char *objname, const uint8_t *data, const uint64_t length, bool *passed, const char **tag) { uint64_t min, max, len, gra; uint8_t tag_item = data[0] & 0x7f; char tmp[128]; static const char *types[] = { "Reserved", "24-bit Memory Range Descriptor", "Generic Register Descriptor", "Reserved", "Vendor Defined Descriptor", "32-bit Memory Range Descriptor", "32-bit Fixed Location Memory Range Descriptor", "DWORD Address Space Descriptor", "WORD Address Space Descriptor", "Extended IRQ Descriptor", "QWORD Address Space Descriptor", "Extended Address Space Descriptor", "GPIO Connection Descriptor", "Reserved", "Generic Serial Bus Connection Descriptor", "Pin Configuration Descriptor", "Pin Group Descriptor", "Pin Group Function Descriptor", "Pin Group Configuration Descriptor", "Reserved", }; switch (tag_item) { case 0x1: /* 6.4.3.1 24-Bit Memory Range Descriptor */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 9, 9, passed); if (!*passed) /* Too short, abort */ break; min = method_CRS_val24(&data[4]); max = method_CRS_val24(&data[6]); len = method_CRS_val16(&data[10]); if (max < min) { snprintf(tmp, sizeof(tmp), "Method%s24BitMemRangeMaxLessThanMin", objname); fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s 24-Bit Memory Range Descriptor minimum " "address range 0x%" PRIx64 " is greater than " "the maximum address range 0x%" PRIx64 ".", name, min, max); *passed = false; } if (len > max + 1 - min) { snprintf(tmp, sizeof(tmp), "Method%s24BitMemRangeLengthTooLarge", objname); fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s 24-Bit Memory Range Descriptor length " "0x%" PRIx64 " is greater than size between the " "the minimum and maximum address ranges " "0x%" PRIx64 "-0x%" PRIx64 ".", name, len, min, max); *passed = false; } break; case 0x2: /* 6.4.3.7 Generic Register Descriptor */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 12, 12, passed); if (!*passed) break; switch (data[3]) { case 0x00 ... 0x04: case 0x0a: case 0x7f: /* Valid values */ break; default: snprintf(tmp, sizeof(tmp), "Method%sGenericRegAddrSpaceIdInvalid", objname); fwts_failed(fw, LOG_LEVEL_HIGH, tmp, "%s Generic Register Descriptor has an invalid " "Address Space ID 0x%" PRIx8 ".", name, data[3]); *passed = false; } if (data[6] > 4) { snprintf(tmp, sizeof(tmp), "Method%sGenericRegAddrSizeInvalid", objname); fwts_failed(fw, LOG_LEVEL_HIGH, tmp, "%s Generic Register Descriptor has an invalid " "Address Access Size 0x%" PRIx8 ".", name, data[6]); *passed = false; } break; case 0x4: /* 6.4.3.2 Vendor-Defined Descriptor */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 0, 65535, passed); break; case 0x5: /* 6.4.3.3 32-Bit Memory Range Descriptor */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 17, 17, passed); if (!*passed) break; min = method_CRS_val32(&data[4]); max = method_CRS_val32(&data[8]); len = method_CRS_val32(&data[16]); if (max < min) { snprintf(tmp, sizeof(tmp), "Method%s32BitMemRangeMaxLessThanMin", objname); fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s 32-Bit Memory Range Descriptor minimum " "address range 0x%" PRIx64 " is greater than " "the maximum address range 0x%" PRIx64 ".", name, min, max); *passed = false; } if (len > max + 1 - min) { snprintf(tmp, sizeof(tmp), "Method%s32BitMemRangeLengthTooLarge", objname); fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s 32-Bit Memory Range Descriptor length " "0x%" PRIx64 " is greater than size between the " "the minimum and maximum address ranges " "0x%" PRIx64 "-0x%" PRIx64 ".", name, len, min, max); *passed = false; } break; case 0x6: /* 6.4.3.4 32-Bit Fixed Memory Range Descriptor */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 9, 9, passed); /* Not much can be checked for this descriptor */ break; case 0x7: /* 6.4.3.5.2 DWord Address Space Descriptor */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 23, 65535, passed); if (!*passed) /* Too short, abort */ break; gra = method_CRS_val32(&data[6]); min = method_CRS_val32(&data[10]); max = method_CRS_val32(&data[14]); len = method_CRS_val32(&data[22]); method_test_CRS_mif_maf(fw, name, objname, data[4], min, max, len, gra, "64BitDWordAddrSpace", types[0x7], passed); break; case 0x8: /* 6.4.3.5.3 Word Address Space Descriptor */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 13, 65535, passed); if (!*passed) /* Too short, abort */ break; gra = method_CRS_val16(&data[6]); min = method_CRS_val16(&data[8]); max = method_CRS_val16(&data[10]); len = method_CRS_val16(&data[14]); method_test_CRS_mif_maf(fw, name, objname, data[4], min, max, len, gra, "64BitWordAddrSpace", types[0x8], passed); break; case 0x9: /* 6.4.3.6 Extended Interrupt Descriptor */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 6, 65535, passed); /* Not much can be checked for this descriptor */ break; case 0xa: /* 6.4.3.5.1 QWord Address Space Descriptor */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 43, 65535, passed); if (!*passed) /* Too short, abort */ break; gra = method_CRS_val64(&data[6]); min = method_CRS_val64(&data[14]); max = method_CRS_val64(&data[22]); len = method_CRS_val64(&data[38]); method_test_CRS_mif_maf(fw, name, objname, data[4], min, max, len, gra, "64BitQWordAddrSpace", types[0xa], passed); break; case 0xb: /* 6.4.3.5.4 Extended Address Space Descriptor */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 53, 53, passed); if (!*passed) /* Too short, abort */ break; gra = method_CRS_val64(&data[8]); min = method_CRS_val64(&data[16]); max = method_CRS_val64(&data[24]); len = method_CRS_val64(&data[40]); method_test_CRS_mif_maf(fw, name, objname, data[4], min, max, len, gra, "64BitExtAddrSpace", types[0xb], passed); break; case 0xc: /* 6.4.3.8.1 GPIO Connection Descriptor */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 22, 65535, passed); if (!*passed) /* Too short, abort */ break; if (data[4] > 2) { snprintf(tmp, sizeof(tmp), "Method%sGpioConnTypeInvalid", objname); fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s GPIO Connection Descriptor has an invalid " "Connection Type 0x%" PRIx8 ".", name, data[4]); *passed = false; fwts_advice(fw, "The GPIO pin connection type is " "not recognised. It should be either " "0x00 (interrupt connection) or " "0x01 (I/O connection). See section " "6.4.3.8.1 of the ACPI specification."); } if ((data[9] > 0x03) && (data[9] < 0x80)) { snprintf(tmp, sizeof(tmp), "Method%sGpioConnTypeInvalid", objname); fwts_failed(fw, LOG_LEVEL_HIGH, tmp, "%s GPIO Connection Descriptor has an invalid " "Pin Configuration Type 0x%" PRIx8 ".", name, data[9]); *passed = false; fwts_advice(fw, "The GPIO pin configuration type " "is not recognised. It should be one of:" "0x00 (default), 0x01 (pull-up), " "0x02 (pull-down), 0x03 (no-pull), " "0x80-0xff (vendor defined). See table " "6-189 in section 6.4.3.8.1 of the ACPI " "specification."); } break; case 0xd: /* 6.4.3.9 Pin Function Descriptors */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 17, 65535, passed); if (!*passed) /* Too short, abort */ break; fwts_acpi_reserved_bits("_CRS", "Flags[low]", data[4], 1, 7, passed); fwts_acpi_reserved_zero("_CRS", "Flags[high]", data[5], passed); fwts_acpi_reserved_zero("_CRS", "Flags[high]", data[5], passed); break; case 0xe: /* 6.4.3.8.2 Serial Bus Connection Descriptors */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 11, 65535, passed); /* Don't care */ break; case 0xf: /* 6.4.3.10 Pin Configuration Descriptors */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 19, 65535, passed); if (!*passed) /* Too short, abort */ break; fwts_acpi_reserved_bits("_CRS", "Flags[low]", data[4], 2, 7, passed); fwts_acpi_reserved_zero("_CRS", "Flags[high]", data[5], passed); if (data[6] > 0xd && data[6] < 0x80) { *passed = false; snprintf(tmp, sizeof(tmp), "Method%sPinConfigTypeInvalid", objname); fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s Pin Configuration Descriptor has an invalid " "Type 0x%" PRIx8 ".", name, data[6]); fwts_advice(fw, "The Pin Configuration type is " "not recognised. It should be either in " "range of 0..0x0D or 0x80..0xFF. See " "section 6.4.3.10 of the ACPI spec."); } fwts_acpi_reserved_zero("_CRS", "Flags[high]", data[5], passed); break; case 0x10: /* 6.4.3.11 Pin Group Descriptors */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 13, 65535, passed); if (!*passed) /* Too short, abort */ break; fwts_acpi_reserved_bits("_CRS", "Flags[low]", data[4], 1, 7, passed); fwts_acpi_reserved_zero("_CRS", "Flags[high]", data[5], passed); break; case 0x11: /* 6.4.3.12 Pin Group Function Descriptors */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 16, 65535, passed); if (!*passed) /* Too short, abort */ break; fwts_acpi_reserved_bits("_CRS", "Flags[low]", data[4], 2, 7, passed); fwts_acpi_reserved_zero("_CRS", "Flags[high]", data[5], passed); fwts_acpi_reserved_zero("_CRS", "Resource Source Index", data[8], passed); break; case 0x12: /* 6.4.3.13 Pin Group Configuration Descriptor */ fwts_method_test_CRS_large_size(fw, name, objname, data, length, 19, 65535, passed); if (!*passed) /* Too short, abort */ break; fwts_acpi_reserved_bits("_CRS", "Flags[low]", data[4], 2, 7, passed); fwts_acpi_reserved_zero("_CRS", "Flags[high]", data[5], passed); if (data[6] > 0xd && data[6] < 0x80) { *passed = false; snprintf(tmp, sizeof(tmp), "Method%sPinConfigTypeInvalid", objname); fwts_failed(fw, LOG_LEVEL_MEDIUM, tmp, "%s Pin Group Configuration Descriptor has an invalid " "Type 0x%" PRIx8 ".", name, data[6]); fwts_advice(fw, "The Pin Group Configuration type is " "not recognised. It should be either in " "range of 0..0x0D or 0x80..0xFF. See " "section 6.4.3.10 of the ACPI spec."); } fwts_acpi_reserved_zero("_CRS", "Flags[high]", data[5], passed); break; default: snprintf(tmp, sizeof(tmp), "Method%sUnkownLargeResourceItem", objname); fwts_failed(fw, LOG_LEVEL_HIGH, tmp, "%s tag bits 6:0 is an undefined " "large tag item name, value 0x%" PRIx8 ".", name, tag_item); fwts_advice(fw, "A large resource data type tag (byte 0 of the " "%s buffer) contains an undefined large tag " "item 'name'. The %s buffer is therefore " "undefined and can't be used. See section " "'6.4.3 Large Resource Data Type' of the ACPI " "specification, and also table 6-173.", objname, objname); *passed = false; break; } *tag = types[tag_item < 16 ? tag_item : 0]; } /* * Device Identification Objects - see Section 6 Device Configuration */ int fwts_method_test_ADR(fwts_framework *fw, ACPI_HANDLE *device) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, device, "_ADR", NULL, 0, fwts_method_test_integer_return, NULL); } void fwts_method_valid_CID_Type( fwts_framework *fw, char *name, ACPI_OBJECT *obj) { char tmp[8]; switch (obj->Type) { case ACPI_TYPE_STRING: if (obj->String.Pointer) { if (fwts_method_valid_HID_string(obj->String.Pointer)) fwts_passed(fw, "%s returned a string '%s' " "as expected.", name, obj->String.Pointer); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodCIDInvalidString", "%s returned a string '%s' " "but it was not a valid PNP ID or a " "valid ACPI ID.", name, obj->String.Pointer); } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_CIDNullString", "%s returned a NULL string.", name); } break; case ACPI_TYPE_INTEGER: if (fwts_method_valid_EISA_ID((uint32_t)obj->Integer.Value, tmp, sizeof(tmp))) fwts_passed(fw, "%s returned an integer " "0x%8.8" PRIx64 " (EISA ID %s).", name, (uint64_t)obj->Integer.Value, tmp); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodCIDInvalidInteger", "%s returned a integer 0x%8.8" PRIx64 " " "(EISA ID %s) but this is not a valid " "EISA ID encoded PNP ID.", name, (uint64_t)obj->Integer.Value, tmp); break; } } void fwts_method_test_CID_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; FWTS_UNUSED(buf); FWTS_UNUSED(private); if (obj == NULL) { fwts_method_failed_null_object(fw, name, "a buffer or integer"); return; } switch (obj->Type) { case ACPI_TYPE_STRING: case ACPI_TYPE_INTEGER: fwts_method_valid_CID_Type(fw, name, obj); break; case ACPI_TYPE_PACKAGE: if (fwts_method_package_count_min(fw, name, obj, 1) != FWTS_OK) return; for (i = 0; i < obj->Package.Count; i++){ ACPI_OBJECT *pkg = &obj->Package.Elements[i]; fwts_method_valid_CID_Type(fw, name, pkg); } break; default: fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_CIDBadReturnType", "%s did not return a string or an integer.", name); break; } } int fwts_method_test_CID(fwts_framework *fw, ACPI_HANDLE *device) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, device, "_CID", NULL, 0, fwts_method_test_CID_return, NULL); } int fwts_method_test_CLS(fwts_framework *fw, ACPI_HANDLE *device) { uint32_t element_size = 3; return fwts_evaluate_method(fw, METHOD_OPTIONAL, device, "_CLS", NULL, 0, fwts_method_test_package_integer_return, &element_size); } int fwts_method_test_DDN(fwts_framework *fw, ACPI_HANDLE *device) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, device, "_DDN", NULL, 0, fwts_method_test_string_return, NULL); } void fwts_method_test_HID_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { char tmp[8]; FWTS_UNUSED(buf); FWTS_UNUSED(private); if (obj == NULL) { fwts_method_failed_null_object(fw, name, "a buffer or integer"); return; } switch (obj->Type) { case ACPI_TYPE_STRING: if (obj->String.Pointer) { if (fwts_method_valid_HID_string(obj->String.Pointer)) fwts_passed(fw, "%s returned a string '%s' " "as expected.", name, obj->String.Pointer); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodHIDInvalidString", "%s returned a string '%s' " "but it was not a valid PNP ID or a " "valid ACPI ID.", name, obj->String.Pointer); } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_HIDNullString", "%s returned a NULL string.", name); } break; case ACPI_TYPE_INTEGER: if (fwts_method_valid_EISA_ID((uint32_t)obj->Integer.Value, tmp, sizeof(tmp))) fwts_passed(fw, "%s returned an integer " "0x%8.8" PRIx64 " (EISA ID %s).", name, (uint64_t)obj->Integer.Value, tmp); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodHIDInvalidInteger", "%s returned a integer 0x%8.8" PRIx64 " " "(EISA ID %s) but this is not a valid " "EISA ID encoded PNP ID.", name, (uint64_t)obj->Integer.Value, tmp); break; default: fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_HIDBadReturnType", "%s did not return a string or an integer.", name); break; } } int fwts_method_test_HID(fwts_framework *fw, ACPI_HANDLE *device) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, device, "_HID", NULL, 0, fwts_method_test_HID_return, NULL); } int fwts_method_test_HRV(fwts_framework *fw, ACPI_HANDLE *device) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, device, "_HRV", NULL, 0, fwts_method_test_integer_return, NULL); } void fwts_method_test_MLS_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { uint32_t i; bool failed = false; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_PACKAGE) != FWTS_OK) return; /* Could be one or more packages */ for (i = 0; i < obj->Package.Count; i++) { ACPI_OBJECT *pkg = &obj->Package.Elements[i]; if (pkg->Package.Count != 2) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_MLSSubPackageElementCount", "%s sub-package %" PRIu32 " was expected to " "have 2 elements, got %" PRIu32 " elements instead.", name, i, pkg->Package.Count); failed = true; continue; } if (pkg->Package.Elements[0].Type != ACPI_TYPE_STRING) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_MLSBadSubPackageReturnType", "%s sub-package %" PRIu32 " element 0 is not a string.", name, i); failed = true; } if (pkg->Package.Elements[1].Type != ACPI_TYPE_BUFFER) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_MLSBadSubPackageReturnType", "%s sub-package %" PRIu32 " element 1 is not a buffer.", name, i); failed = true; } } if (!failed) fwts_method_passed_sane(fw, name, "package"); } int fwts_method_test_MLS(fwts_framework *fw, ACPI_HANDLE *device) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, device, "_MLS", NULL, 0, fwts_method_test_MLS_return, NULL); } void fwts_method_test_PLD_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; /* All elements in the package must be buffers */ if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_BUFFER) != FWTS_OK) return; fwts_method_passed_sane(fw, name, "package"); } int fwts_method_test_PLD(fwts_framework *fw, ACPI_HANDLE *device) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, device, "_PLD", NULL, 0, fwts_method_test_PLD_return, NULL); } void fwts_method_test_SUB_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(buf); FWTS_UNUSED(private); if (obj == NULL) { fwts_method_failed_null_object(fw, name, "a buffer"); return; } if (obj->Type == ACPI_TYPE_STRING) if (obj->String.Pointer) { if (fwts_method_valid_HID_string(obj->String.Pointer)) fwts_passed(fw, "%s returned a string '%s' " "as expected.", name, obj->String.Pointer); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodSUBInvalidString", "%s returned a string '%s' " "but it was not a valid PNP ID or a " "valid ACPI ID.", name, obj->String.Pointer); } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_SUBNullString", "%s returned a NULL string.", name); } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_SUBBadReturnType", "Method _SUB did not return a string."); } } int fwts_method_test_SUB(fwts_framework *fw, ACPI_HANDLE *device) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, device, "_SUB", NULL, 0, fwts_method_test_SUB_return, NULL); } int fwts_method_test_SUN(fwts_framework *fw, ACPI_HANDLE *device) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, device, "_SUN", NULL, 0, fwts_method_test_integer_return, NULL); } int fwts_method_test_STR(fwts_framework *fw, ACPI_HANDLE *device) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, device, "_STR", NULL, 0, fwts_method_test_buffer_return, NULL); } void fwts_method_test_UID_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { FWTS_UNUSED(buf); FWTS_UNUSED(private); if (obj == NULL) { fwts_method_failed_null_object(fw, name, "a buffer or integer"); return; } switch (obj->Type) { case ACPI_TYPE_STRING: if (obj->String.Pointer) fwts_passed(fw, "%s returned a string '%s' as expected.", name, obj->String.Pointer); else fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_UIDNullString", "%s returned a NULL string.", name); break; case ACPI_TYPE_INTEGER: fwts_method_passed_sane_uint64(fw, name, obj->Integer.Value); break; default: fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_UIDBadReturnType", "Method %s did not return a string or an integer.", name); break; } } int fwts_method_test_UID(fwts_framework *fw, ACPI_HANDLE *device) { return fwts_evaluate_method(fw, METHOD_OPTIONAL, device, "_UID", NULL, 0, fwts_method_test_UID_return, NULL); } void fwts_method_test_BMD_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool failed = false; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_count_equal(fw, name, obj, 5) != FWTS_OK) return; if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_INTEGER) != FWTS_OK) return; fwts_acpi_reserved_bits("_BMD", "Status Flags", obj->Package.Elements[0].Integer.Value, 7, 31, &failed); fwts_acpi_reserved_bits("_BMD", "Capability Flags", obj->Package.Elements[1].Integer.Value, 6, 31, &failed); if (!failed) fwts_method_passed_sane(fw, name, "package"); } /* * Section 9.20 NVDIMM Devices */ static void check_nvdimm_status( fwts_framework *fw, char *name, uint16_t status, bool *passed) { if (status > 6) { *passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodBadStatus", "%s: Expected Status to be 0..6, got %" PRIx16, name, status); } } static void check_nvdimm_extended_status( fwts_framework *fw, char *name, uint16_t ext_status, uint16_t expected, bool *passed) { if (ext_status != expected) { *passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodBadExtendedStatus", "%s: Expected Extended Status to be %" PRIx16 ", got %" PRIx16, name, expected, ext_status); } } void fwts_method_test_NBS_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool passed = true; nbs_return_t *ret; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_BUFFER) != FWTS_OK) return; if (fwts_method_buffer_size(fw, name, obj, 64) != FWTS_OK) passed = false; ret = (nbs_return_t *) obj->Buffer.Pointer; check_nvdimm_status(fw, name, ret->status, &passed); check_nvdimm_extended_status(fw, name, ret->extended_status, 0, &passed); fwts_acpi_reserved_bits("_NBS", "Validation Flags", ret->validation_flags, 1, 15, &passed); if (passed) fwts_method_passed_sane(fw, name, "buffer"); } void fwts_method_test_NCH_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool passed = true; nch_return_t *ret; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_BUFFER) != FWTS_OK) return; if (fwts_method_buffer_size(fw, name, obj, 64) != FWTS_OK) passed = false; ret = (nch_return_t *) obj->Buffer.Pointer; check_nvdimm_status(fw, name, ret->status, &passed); check_nvdimm_extended_status(fw, name, ret->extended_status, 0, &passed); fwts_acpi_reserved_bits("_NCH", "Validation Flags", ret->extended_status, 2, 15, &passed); /* Health Status Flags [2..7], [11.15], [19..31] are reserved */ fwts_acpi_reserved_bits("_NCH", "Health Status Flags", ret->health_status_flags, 2, 7, &passed); fwts_acpi_reserved_bits("_NCH", "Health Status Flags", ret->health_status_flags, 11, 15, &passed); fwts_acpi_reserved_bits("_NCH", "Health Status Flags", ret->health_status_flags, 19, 31, &passed); fwts_acpi_reserved_bits("_NCH", "Health Status Attributes", ret->health_status_attributes, 1, 31, &passed); if (passed) fwts_method_passed_sane(fw, name, "buffer"); } void fwts_method_test_NIC_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool passed = true; nic_return_t *ret; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_BUFFER) != FWTS_OK) return; if (fwts_method_buffer_size(fw, name, obj, 64) != FWTS_OK) passed = false; ret = (nic_return_t *) obj->Buffer.Pointer; check_nvdimm_status(fw, name, ret->status, &passed); check_nvdimm_extended_status(fw, name, ret->extended_status, 0, &passed); /* Health Error Injection Capabilities [2..7], [11.15], [19..31] are reserved */ fwts_acpi_reserved_bits("_NIC", "Health Error Injection Capabilities", ret->health_error_injection, 2, 7, &passed); fwts_acpi_reserved_bits("_NIC", "Health Error Injection Capabilities", ret->health_error_injection, 11, 15, &passed); fwts_acpi_reserved_bits("_NIC", "Health Error Injection Capabilities", ret->health_error_injection, 19, 31, &passed); fwts_acpi_reserved_bits("_NIC", "Health Status Attributes Capabilities", ret->health_status_attributes, 1, 31, &passed); if (passed) fwts_method_passed_sane(fw, name, "buffer"); } void fwts_method_test_NIH_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool passed = true; nih_return_t *ret; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_BUFFER) != FWTS_OK) return; if (fwts_method_buffer_size(fw, name, obj, 4) != FWTS_OK) passed = false; ret = (nih_return_t *) obj->Buffer.Pointer; check_nvdimm_status(fw, name, ret->status, &passed); check_nvdimm_extended_status(fw, name, ret->extended_status, 1, &passed); if (passed) fwts_method_passed_sane(fw, name, "buffer"); } void fwts_method_test_NIG_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool passed = true; nig_return_t *ret; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_BUFFER) != FWTS_OK) return; if (fwts_method_buffer_size(fw, name, obj, 64) != FWTS_OK) passed = false; ret = (nig_return_t *) obj->Buffer.Pointer; check_nvdimm_status(fw, name, ret->status, &passed); check_nvdimm_extended_status(fw, name, ret->extended_status, 0, &passed); fwts_acpi_reserved_bits("_NIG", "Validation Flags", ret->validation_flags, 2, 15, &passed); /* Injected Health Status Errors [2..7], [11.15], [19..31] are reserved */ fwts_acpi_reserved_bits("_NIG", "Injected Health Status Errors", ret->health_status_errors, 2, 7, &passed); fwts_acpi_reserved_bits("_NIG", "Injected Health Status Errors", ret->health_status_errors, 11, 15, &passed); fwts_acpi_reserved_bits("_NIG", "Injected Health Status Errors", ret->health_status_errors, 19, 31, &passed); fwts_acpi_reserved_bits("_NIG", "Health Status Attributes of Injected Errors", ret->health_status_attributes, 1, 31, &passed); if (passed) fwts_method_passed_sane(fw, name, "buffer"); } void fwts_method_test_STA_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool passed = true; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK) return; if ((obj->Integer.Value & 3) == 2) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_STAEnabledNotPresent", "%s indicates that the device is enabled " "but not present, which is impossible.", name); passed = false; } fwts_acpi_reserved_bits("_STA", "Reserved Bits", obj->Integer.Value, 5, 31, &passed); if (passed) fwts_method_passed_sane_uint64(fw, name, obj->Integer.Value); } /* * Section 10.2 Control Method Batteries */ void fwts_method_test_BIF_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool failed = false; static const fwts_package_element elements[] = { { ACPI_TYPE_INTEGER, "Power Unit" }, { ACPI_TYPE_INTEGER, "Design Capacity" }, { ACPI_TYPE_INTEGER, "Last Full Charge Capacity" }, { ACPI_TYPE_INTEGER, "Battery Technology" }, { ACPI_TYPE_INTEGER, "Design Voltage" }, { ACPI_TYPE_INTEGER, "Design Capacity of Warning" }, { ACPI_TYPE_INTEGER, "Design Capactty of Low" }, { ACPI_TYPE_INTEGER, "Battery Capacity Granularity 1" }, { ACPI_TYPE_INTEGER, "Battery Capacity Granularity 2" }, { ACPI_TYPE_STRING, "Model Number" }, { ACPI_TYPE_STRING, "Serial Number" }, { ACPI_TYPE_STRING, "Battery Type" }, { ACPI_TYPE_STRING, "OEM Information" } }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK) return; /* Sanity check each field */ /* Power Unit */ if (obj->Package.Elements[0].Integer.Value > 0x00000002) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIFBadUnits", "%s: Expected Power Unit (Element 0) to be " "0 (mWh) or 1 (mAh), got 0x%8.8" PRIx64 ".", name, (uint64_t)obj->Package.Elements[0].Integer.Value); failed = true; } #ifdef FWTS_METHOD_PEDANDTIC /* * Since this information may be evaluated by communicating with * the EC we skip these checks as we can't do this from userspace */ /* Design Capacity */ if (obj->Package.Elements[1].Integer.Value > 0x7fffffff) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIFBadCapacity", "%s: Design Capacity (Element 1) is " "unknown: 0x%8.8" PRIx64 ".", name, obj->Package.Elements[1].Integer.Value); failed = true; } /* Last Full Charge Capacity */ if (obj->Package.Elements[2].Integer.Value > 0x7fffffff) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIFChargeCapacity", "%s: Last Full Charge Capacity (Element 2) " "is unknown: 0x%8.8" PRIx64 ".", name, obj->Package.Elements[2].Integer.Value); failed = true; } #endif /* Battery Technology */ if (obj->Package.Elements[3].Integer.Value > 0x00000002) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_BIFBatTechUnit", "%s: Expected Battery Technology Unit " "(Element 3) to be 0 (Primary) or 1 " "(Secondary), got 0x%8.8" PRIx64 ".", name, (uint64_t)obj->Package.Elements[3].Integer.Value); failed = true; } #ifdef FWTS_METHOD_PEDANDTIC /* * Since this information may be evaluated by communicating with * the EC we skip these checks as we can't do this from userspace */ /* Design Voltage */ if (obj->Package.Elements[4].Integer.Value > 0x7fffffff) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIFDesignVoltage", "%s: Design Voltage (Element 4) is " "unknown: 0x%8.8" PRIx64 ".", name, obj->Package.Elements[4].Integer.Value); failed = true; } /* Design capacity warning */ if (obj->Package.Elements[5].Integer.Value > 0x7fffffff) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIFDesignCapacityE5", "%s: Design Capacity Warning (Element 5) " "is unknown: 0x%8.8" PRIx64 ".", name, obj->Package.Elements[5].Integer.Value); failed = true; } /* Design capacity low */ if (obj->Package.Elements[6].Integer.Value > 0x7fffffff) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIFDesignCapacityE6", "%s: Design Capacity Warning (Element 6) " "is unknown: 0x%8.8" PRIx64 ".", name, obj->Package.Elements[6].Integer.Value); failed = true; } #endif if (failed) fwts_advice(fw, "Battery %s package contains errors. It is " "worth running the firmware test suite " "interactive 'battery' test to see if this " "is problematic. This is a bug an needs to " "be fixed.", name); else fwts_method_passed_sane(fw, name, "package"); } void fwts_method_test_BIX_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool failed = false; uint64_t revision = 0; /* Revision 0 in ACPI 5.x */ static const fwts_package_element elements[] = { { ACPI_TYPE_INTEGER, "Revision" }, { ACPI_TYPE_INTEGER, "Power Unit" }, { ACPI_TYPE_INTEGER, "Design Capacity" }, { ACPI_TYPE_INTEGER, "Last Full Charge Capacity" }, { ACPI_TYPE_INTEGER, "Battery Technology" }, { ACPI_TYPE_INTEGER, "Design Voltage" }, { ACPI_TYPE_INTEGER, "Design Capacity of Warning" }, { ACPI_TYPE_INTEGER, "Design Capacity of Low" }, { ACPI_TYPE_INTEGER, "Cycle Count" }, { ACPI_TYPE_INTEGER, "Measurement Accuracy" }, { ACPI_TYPE_INTEGER, "Max Sampling Time" }, { ACPI_TYPE_INTEGER, "Min Sampling Time" }, { ACPI_TYPE_INTEGER, "Max Averaging Interval" }, { ACPI_TYPE_INTEGER, "Min Averaging Interval" }, { ACPI_TYPE_INTEGER, "Battery Capacity Granularity 1" }, { ACPI_TYPE_INTEGER, "Battery Capacity Granularity 2" }, { ACPI_TYPE_STRING, "Model Number" }, { ACPI_TYPE_STRING, "Serial Number" }, { ACPI_TYPE_STRING, "Battery Type" }, { ACPI_TYPE_STRING, "OEM Information" } }; /* Revision 1 in ACPI 6.x introduces swapping capability */ static const fwts_package_element elements_v1[] = { { ACPI_TYPE_INTEGER, "Revision" }, { ACPI_TYPE_INTEGER, "Power Unit" }, { ACPI_TYPE_INTEGER, "Design Capacity" }, { ACPI_TYPE_INTEGER, "Last Full Charge Capacity" }, { ACPI_TYPE_INTEGER, "Battery Technology" }, { ACPI_TYPE_INTEGER, "Design Voltage" }, { ACPI_TYPE_INTEGER, "Design Capacity of Warning" }, { ACPI_TYPE_INTEGER, "Design Capacity of Low" }, { ACPI_TYPE_INTEGER, "Cycle Count" }, { ACPI_TYPE_INTEGER, "Measurement Accuracy" }, { ACPI_TYPE_INTEGER, "Max Sampling Time" }, { ACPI_TYPE_INTEGER, "Min Sampling Time" }, { ACPI_TYPE_INTEGER, "Max Averaging Interval" }, { ACPI_TYPE_INTEGER, "Min Averaging Interval" }, { ACPI_TYPE_INTEGER, "Battery Capacity Granularity 1" }, { ACPI_TYPE_INTEGER, "Battery Capacity Granularity 2" }, { ACPI_TYPE_STRING, "Model Number" }, { ACPI_TYPE_STRING, "Serial Number" }, { ACPI_TYPE_STRING, "Battery Type" }, { ACPI_TYPE_STRING, "OEM Information" }, { ACPI_TYPE_INTEGER, "Battery Swapping Capability" } }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (obj->Package.Count > 1 && obj->Package.Elements[0].Type == ACPI_TYPE_INTEGER) revision = obj->Package.Elements[0].Integer.Value; switch (revision) { case 0: if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK) return; break; case 1: if (fwts_method_package_elements_type(fw, name, obj, elements_v1) != FWTS_OK) return; break; default: fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIXRevision", "%s: Expected %s (Element 0) to be " "0 or 1, got 0x%8.8" PRIx64 ".", name, elements_v1[0].name, (uint64_t)obj->Package.Elements[0].Integer.Value); return; } /* Sanity check each field */ /* Power Unit */ if (obj->Package.Elements[1].Integer.Value > 0x00000002) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIXPowerUnit", "%s: Expected %s (Element 1) to be " "0 (mWh) or 1 (mAh), got 0x%8.8" PRIx64 ".", name, elements[1].name, (uint64_t)obj->Package.Elements[1].Integer.Value); failed = true; } #ifdef FWTS_METHOD_PEDANDTIC /* * Since this information may be evaluated by communicating with * the EC we skip these checks as we can't do this from userspace */ /* Design Capacity */ if (obj->Package.Elements[2].Integer.Value > 0x7fffffff) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIXDesignCapacity", "%s: %s (Element 2) is " "unknown: 0x%8.8" PRIx64 ".", name, elements[2].name, obj->Package.Elements[2].Integer.Value); failed = true; } /* Last Full Charge Capacity */ if (obj->Package.Elements[3].Integer.Value > 0x7fffffff) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIXFullChargeCapacity", "%s: %s (Element 3) " "is unknown: 0x%8.8" PRIx64 ".", name, elements[3].name, obj->Package.Elements[3].Integer.Value); failed = true; } #endif /* Battery Technology */ if (obj->Package.Elements[4].Integer.Value > 0x00000002) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_BIXBatteryTechUnit", "%s: %s " "(Element 4) to be 0 (Primary) or 1 " "(Secondary), got 0x%8.8" PRIx64 ".", name, elements[4].name, (uint64_t)obj->Package.Elements[4].Integer.Value); failed = true; } #ifdef FWTS_METHOD_PEDANDTIC /* * Since this information may be evaluated by communicating with * the EC we skip these checks as we can't do this from userspace */ /* Design Voltage */ if (obj->Package.Elements[5].Integer.Value > 0x7fffffff) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIXDesignVoltage", "%s: %s (Element 5) is unknown: " "0x%8.8" PRIx64 ".", name, elements[5].name, obj->Package.Elements[5].Integer.Value); failed = true; } /* Design capacity warning */ if (obj->Package.Elements[6].Integer.Value > 0x7fffffff) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIXDesignCapacityE6", "%s: %s (Element 6) " "is unknown: 0x%8.8" PRIx64 ".", name, elements[6].name, obj->Package.Elements[6].Integer.Value); failed = true; } /* Design capacity low */ if (obj->Package.Elements[7].Integer.Value > 0x7fffffff) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIXDesignCapacityE7", "%s: %s (Element 7) " "is unknown: 0x%8.8" PRIx64 ".", name, elements[7].name, obj->Package.Elements[7].Integer.Value); failed = true; } /* Cycle Count: value = 0 ~ 0xFFFFFFFE or 0xFFFFFFFF (unknown) */ /* Measurement Accuracy */ if (obj->Package.Elements[9].Integer.Value > 100000) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIXMeasurementAccuracy", "%s: %s (Element 9) " "is unknown: 0x%8.8" PRIx64 ".", name, elements[9].name, obj->Package.Elements[9].Integer.Value); failed = true; } #endif /* Swapping Capability */ if (revision == 1 && obj->Package.Elements[20].Integer.Value > 2) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BIXSwappingCapability", "%s: %s (Element 20) " "is unknown: 0x%8.8" PRIx64 ".", name, elements_v1[20].name, obj->Package.Elements[20].Integer.Value); failed = true; } if (failed) fwts_advice(fw, "Battery %s package contains errors. It is " "worth running the firmware test suite " "interactive 'battery' test to see if this " "is problematic. This is a bug an needs to " "be fixed.", name); else fwts_method_passed_sane(fw, name, "package"); } void fwts_method_test_BST_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool failed = false; static const fwts_package_element elements[] = { { ACPI_TYPE_INTEGER, "Battery State" }, { ACPI_TYPE_INTEGER, "Battery Rate" }, { ACPI_TYPE_INTEGER, "Battery Remaining Capacity" }, { ACPI_TYPE_INTEGER, "Battery Present Voltage" }, }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK) return; /* Sanity check each field */ /* Battery State */ fwts_acpi_reserved_bits("_BST", "Battery State", obj->Package.Elements[0].Integer.Value, 4, 31, &failed); /* Ensure bits 0 (discharging) and 1 (charging) are not both set, see 10.2.2.6 */ if (((obj->Package.Elements[0].Integer.Value) & 3) == 3) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "Method_BSTBadState", "%s: Battery State (Element 0) is " "indicating both charging and discharginng " "which is not allowed. Got value 0x%8.8" PRIx64 ".", name, (uint64_t)obj->Package.Elements[0].Integer.Value); failed = true; } /* Battery Present Rate - cannot check, pulled from EC */ /* Battery Remaining Capacity - cannot check, pulled from EC */ /* Battery Present Voltage - cannot check, pulled from EC */ if (failed) fwts_advice(fw, "Battery %s package contains errors. It is " "worth running the firmware test suite " "interactive 'battery' test to see if this " "is problematic. This is a bug an needs to " "be fixed.", name); else fwts_method_passed_sane(fw, name, "package"); } void fwts_method_test_BPC_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool passed = true; static const fwts_package_element elements[] = { { ACPI_TYPE_INTEGER, "Revision," }, { ACPI_TYPE_INTEGER, "Power Threshold Support" }, { ACPI_TYPE_INTEGER, "Max Instantaneous Peak Power Threshold" }, { ACPI_TYPE_INTEGER, "Max Sustainable Peak Power Threshold" } }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK) return; if (fwts_method_test_revision(fw, name, obj->Package.Elements[0].Integer.Value, 1) != FWTS_OK) passed = false; fwts_acpi_reserved_bits("_BPC", "Power Threshold Support Capability", obj->Package.Elements[1].Integer.Value, 2, 31, &passed); if (!passed) fwts_advice(fw, "Battery %s package contains errors.", name); else fwts_method_passed_sane(fw, name, "package"); } void fwts_method_test_BPS_return( fwts_framework *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private) { bool passed = true; static const fwts_package_element elements[] = { { ACPI_TYPE_INTEGER, "Revision," }, { ACPI_TYPE_INTEGER, "Instantaneous Peak Power Level" }, { ACPI_TYPE_INTEGER, "Instantaneous Peak Power Period" }, { ACPI_TYPE_INTEGER, "Sustainable Peak Power Level" }, { ACPI_TYPE_INTEGER, "Sustainable Peak Power Period" }, }; FWTS_UNUSED(private); if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK) return; if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK) return; if (fwts_method_test_revision(fw, name, obj->Package.Elements[0].Integer.Value, 1) != FWTS_OK) passed = false; if (!passed) fwts_advice(fw, "Battery %s package contains errors.", name); else fwts_method_passed_sane(fw, name, "package"); } src/lib/src/fwts_acpi_tables.c000066400000000000000000001365651465205512700167060ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "fwts.h" #include "fwts_acpi_object_eval.h" #define BIOS_START (0x000e0000) /* Start of BIOS memory */ #define BIOS_END (0x000fffff) /* End of BIOS memory */ #define BIOS_LENGTH (BIOS_END - BIOS_START) /* Length of BIOS memory */ #define PAGE_SIZE (4096) static fwts_acpi_table_info tables[ACPI_MAX_TABLES]; typedef enum { ACPI_TABLES_NOT_LOADED = 0, ACPI_TABLES_LOADED_OK = 1, ACPI_TABLES_LOADED_FAILED = 2 } acpi_table_load_state; static acpi_table_load_state acpi_tables_loaded = ACPI_TABLES_NOT_LOADED; /* * acpi_table_generic_init() * Generic ACPI table init function */ int acpi_table_generic_init(fwts_framework *fw, char *name, fwts_acpi_table_info **table) { if (fwts_acpi_find_table(fw, name, 0, table) != FWTS_OK) { fwts_log_error(fw, "Cannot read ACPI tables."); return FWTS_ERROR; } if (*table == NULL || (*table)->length == 0) { fwts_log_error(fw, "ACPI %s table does not exist, skipping test", name); return FWTS_SKIP; } return FWTS_OK; } /* * fwts_acpi_find_rsdp_efi() * Get RSDP address from EFI if possible */ static inline void *fwts_acpi_find_rsdp_efi(void) { void *addr; addr = fwts_scan_efi_systab("ACPI20"); if (!addr) addr = fwts_scan_efi_systab("ACPI"); return addr; } /* * fwts_acpi_find_rsdp_klog() * Get RSDP by parsing kernel log */ static void *fwts_acpi_find_rsdp_klog(void) { fwts_list *klog; fwts_list_link *item; void *rsdp = NULL; if ((klog = fwts_klog_read()) == NULL) return NULL; fwts_list_foreach(item, klog) { char *text = fwts_text_list_text(item); char *ptr = strstr(text, "ACPI: RSDP"); if (ptr) { rsdp = (void *)strtoul(ptr + 11, NULL, 16); break; } } fwts_text_list_free(klog); return rsdp; } /* * fwts_acpi_find_rsdp_bios() * Find RSDP address by scanning BIOS memory */ static void *fwts_acpi_find_rsdp_bios(void) { #ifdef FWTS_ARCH_INTEL uint8_t *bios; uint8_t *ptr; void *addr = 0; if ((bios = fwts_mmap(BIOS_START, BIOS_LENGTH)) == FWTS_MAP_FAILED) return 0; /* Scan BIOS for RSDP, ACPI spec states it is aligned on 16 byte intervals */ for (ptr = bios; ptr < (bios+BIOS_LENGTH); ptr += 16) { fwts_acpi_table_rsdp *rsdp = (fwts_acpi_table_rsdp*)ptr; /* Can we read this memory w/o segfaulting? */ if (fwts_safe_memread(rsdp, 8) != FWTS_OK) continue; /* Look for RSD PTR string */ if (strncmp(rsdp->signature, "RSD PTR ",8) == 0) { int length = (rsdp->revision < 1) ? 20 : 36; if (fwts_safe_memread(ptr, length) != FWTS_OK) continue; if (fwts_checksum(ptr, length) == 0) { addr = (void*)(BIOS_START+(ptr - bios)); break; } } } (void)fwts_munmap(bios, BIOS_LENGTH); return addr; #else return NULL; #endif } /* * fwts_acpi_get_rsdp() * given the address of the rsdp, map in the region, copy it and * return the rsdp table. Return NULL if fails. */ static fwts_acpi_table_rsdp *fwts_acpi_get_rsdp(fwts_framework *fw, void *addr, size_t *rsdp_len) { uint8_t *mem; fwts_acpi_table_rsdp *rsdp; *rsdp_len = 0; /* Assume version 2.0 size, we don't care about a few bytes over allocation if it's version 1.0 */ if ((rsdp = (fwts_acpi_table_rsdp*)fwts_low_calloc(1, sizeof(fwts_acpi_table_rsdp))) == NULL) { fwts_log_error(fw, "Cannot allocate cached RSDP, out of low memory."); return NULL; } if ((mem = fwts_mmap((long int)addr, sizeof(fwts_acpi_table_rsdp))) == FWTS_MAP_FAILED) return NULL; if (fwts_safe_memcpy(rsdp, mem, sizeof(fwts_acpi_table_rsdp)) != FWTS_OK) { fwts_log_error(fw, "Cannot safely copy RSDP from address %p.", mem); goto err; } (void)fwts_munmap(mem, sizeof(fwts_acpi_table_rsdp)); /* Determine original RSDP size from revision. */ *rsdp_len = (rsdp->revision < 1) ? 20 : 36; /* Must have the correct signature */ if (strncmp(rsdp->signature, "RSD PTR ", 8)) { fwts_log_error(fw, "RSDP did not have expected signature."); goto err; } return rsdp; err: (void)fwts_munmap(mem, sizeof(fwts_acpi_table_rsdp)); fwts_low_free(rsdp); return NULL; } /* * fwts_acpi_load_table() * given the address of a ACPI table, map in firmware, find out size, * copy it and return the copy. Returns NULL if fails. */ static void *fwts_acpi_load_table(const off_t addr) { fwts_acpi_table_header *hdr; void *mem; void *table; int len; if ((hdr = fwts_mmap((off_t)addr, sizeof(fwts_acpi_table_header))) == FWTS_MAP_FAILED) return NULL; if (fwts_safe_memread(hdr, sizeof(fwts_acpi_table_header)) != FWTS_OK) { (void)fwts_munmap(hdr, sizeof(fwts_acpi_table_header)); return NULL; } len = hdr->length; if (len < (int)sizeof(fwts_acpi_table_header)) { (void)fwts_munmap(hdr, sizeof(fwts_acpi_table_header)); return NULL; } (void)fwts_munmap(hdr, sizeof(fwts_acpi_table_header)); if ((table = fwts_low_calloc(1, len)) == NULL) return NULL; if ((mem = fwts_mmap((off_t)addr, len)) == FWTS_MAP_FAILED) return NULL; if (fwts_safe_memcpy(table, mem, len) != FWTS_OK) { (void)fwts_munmap(mem, len); return NULL; } (void)fwts_munmap(mem, len); return table; } /* * fwts_acpi_add_table() * Add a table to internal ACPI table cache. Ignore duplicates based on * their address. */ static void fwts_acpi_add_table( const char *name, /* Table Name */ void *table, /* Table binary blob */ const uint64_t addr, /* Address of table */ const size_t length, /* Length of table */ const fwts_acpi_table_provenance provenance) /* Where we got the table from */ { int i; uint32_t which = 0; for (i = 0; i < ACPI_MAX_TABLES; i++) { if (addr && tables[i].addr == addr) { /* We don't need it, it's a duplicate, so free and return */ fwts_low_free(table); return; } if (strncmp(tables[i].name, name, 4) == 0) which++; if (tables[i].data == NULL) { memcpy(tables[i].name, name, 4); tables[i].name[4] = 0; tables[i].data = table; tables[i].addr = addr; tables[i].length = length; tables[i].which = which; tables[i].index = i; tables[i].provenance = provenance; tables[i].has_aml = ((!strcmp(tables[i].name, "DSDT")) || (!strcmp(tables[i].name, "SSDT"))); return; } } } /* * fwts_acpi_free_tables() * free up the cached copies of the ACPI tables */ int fwts_acpi_free_tables(void) { int i; for (i = 0; i < ACPI_MAX_TABLES; i++) { if (tables[i].data) { fwts_low_free(tables[i].data); memset(&tables[i], 0, sizeof(fwts_acpi_table_info)); } } return FWTS_OK; } /* * fwts_acpi_is_reduced_hardware() * Check the ACPI tables for HW_REDUCED_ACPI bit in flag field. */ fwts_bool fwts_acpi_is_reduced_hardware(fwts_framework *fw) { fwts_acpi_table_info *table = NULL; const fwts_acpi_table_fadt *fadt; if (fwts_acpi_find_table(fw, "FACP", 0, &table) != FWTS_OK) { fwts_log_error(fw, "Cannot read ACPI table FACP."); return FWTS_BOOL_ERROR; } if (table == NULL) { fwts_log_error(fw, "ACPI table FACP does not exist!"); return FWTS_BOOL_ERROR; } fadt = (const fwts_acpi_table_fadt *) table->data; if ((fadt->header.revision >= 5) && (fadt->header.length >= 116) && (fadt->flags & FWTS_FADT_FLAGS_HW_REDUCED_ACPI)) { return FWTS_TRUE; } return FWTS_FALSE; } /* * fwts_acpi_handle_fadt_tables() * depending on whether 32 or 64 bit address is usable, get the table * address and load it. This handles the DSDT and FACS as pointed to * by the FADT * * Note, we pass in the addresses of the 32 and 64 bit pointers in the * FADT because the FADT may be smaller than expected and we only want * to accesses these fields if the FADT is large enough. */ static int fwts_acpi_handle_fadt_tables( fwts_framework *fw, const fwts_acpi_table_fadt *fadt,/* FADT */ const char *name, /* Name of Table addr32/addr 64 point to */ const char *name_addr32, /* Name of 32 bit addr */ const char *name_addr64, /* Name of 64 bit addr */ const uint32_t *addr32, /* 32 bit addr */ const uint64_t *addr64, /* 64 bit addr */ const fwts_acpi_table_provenance provenance) { off_t addr = 0; fwts_acpi_table_header *header; /* newer version can have address in 64 and 32 bit pointers */ if ((addr64 != NULL) && (fadt->header.length >= 140)) { if (*addr64 == 0) { /* Work around buggy firmware, use 32 bit addr instead */ addr = (off_t)*addr32; fwts_log_warning(fw, "FADT %s 64 bit pointer was zero, " "falling back to using %s 32 bit pointer.", name_addr64, name_addr32); } else { /* Use default 64 bit addr */ addr = (off_t)*addr64; } /* Is it sane? */ if (addr == 0) { fwts_log_warning(fw, "Failed to load %s: Cannot determine " "address of %s from FADT, fields %s and %s are zero.", name, name, name_addr32, name_addr64); return FWTS_NULL_POINTER; } } else if ((addr32 != NULL) && (fadt->header.length >= 44)) { addr = (off_t)*addr32; /* Is it sane? */ if (addr == 0) { fwts_log_warning(fw, "Failed to load %s: Cannot determine " "address of %s from FADT, field %s is zero.", name, name, name_addr32); return FWTS_NULL_POINTER; } } else if (fadt->header.length < 44) { fwts_log_error(fw, "Failed to load %s: FADT is too small and " "does not have any %s or %s fields.", name, name_addr32, name_addr64); return FWTS_ERROR; } else { /* This should not happen, addr64 or addr32 are NULL */ fwts_log_error(fw, "Failed to load %s: fwts error with FADT.", name); return FWTS_NULL_POINTER; } /* Sane address found, load and add the table */ if ((header = fwts_acpi_load_table(addr)) == NULL) { fwts_log_error(fw, "Could not load %s from address 0x%" PRIx64 ".", name, (uint64_t)addr); return FWTS_ERROR; } fwts_acpi_add_table(header->signature, header, (uint64_t)addr, header->length, provenance); return FWTS_OK; } /* * fwts_acpi_handle_fadt() * The FADT points to the FACS and DSDT with either 32 or 64 bit pointers. * Locate the FACS and DSDT tables and load them. */ static int fwts_acpi_handle_fadt( fwts_framework *fw, const uint64_t phys_addr, const fwts_acpi_table_fadt *fadt, const fwts_acpi_table_provenance provenance) { static uint64_t facs_last_phys_addr; /* default to zero */ int result; /* * The FADT handling may occur twice if it appears * in the RSDT and the XDST, so as an optimisation * we just need to handle it once. */ if (facs_last_phys_addr == phys_addr) return FWTS_OK; facs_last_phys_addr = phys_addr; /* Determine FACS addr and load it. * Will ignore the missing FACS in the hardware-reduced mode. */ PRAGMA_PUSH PRAGMA_PACK_WARN_OFF result = fwts_acpi_handle_fadt_tables(fw, fadt, "FACS", "FIRMWARE_CTRL", "X_FIRMWARE_CTRL", &fadt->firmware_control, &fadt->x_firmware_ctrl, provenance); PRAGMA_POP if (result != FWTS_OK) { if ((result == FWTS_NULL_POINTER) && (fwts_acpi_is_reduced_hardware(fw) == FWTS_TRUE)) { fwts_log_info(fw, "Ignore the missing FACS. " "It is optional in hardware-reduced mode"); } else { fwts_log_error(fw, "Failed to load FACS."); return FWTS_ERROR; } } /* Determine DSDT addr and load it */ PRAGMA_PUSH PRAGMA_PACK_WARN_OFF if (fwts_acpi_handle_fadt_tables(fw, fadt, "DSDT", "DSTD", "X_DSDT", &fadt->dsdt, &fadt->x_dsdt, provenance) != FWTS_OK) { fwts_log_error(fw, "Failed to load DSDT."); return FWTS_ERROR; } PRAGMA_POP return FWTS_OK; } /* * fwts_acpi_load_tables_from_firmware() * Load up cached copies of all the ACPI tables */ static int fwts_acpi_load_tables_from_firmware(fwts_framework *fw) { fwts_acpi_table_rsdp *rsdp; fwts_acpi_table_xsdt *xsdt; fwts_acpi_table_rsdt *rsdt; fwts_acpi_table_header *header; void * rsdp_addr = NULL; size_t rsdp_len; int num_entries; int i; /* Check for RSDP as EFI, then BIOS, parsed klog, if not found, give up */ if (fw->rsdp) rsdp_addr = (void*)fw->rsdp; if (!rsdp_addr) rsdp_addr = fwts_acpi_find_rsdp_efi(); if (!rsdp_addr) rsdp_addr = fwts_acpi_find_rsdp_bios(); if (!rsdp_addr) rsdp_addr = fwts_acpi_find_rsdp_klog(); if (!rsdp_addr) return FWTS_ERROR; /* Load and save cached RSDP */ if ((rsdp = fwts_acpi_get_rsdp(fw, rsdp_addr, &rsdp_len)) == NULL) return FWTS_ERROR; fwts_acpi_add_table("RSDP", rsdp, (uint64_t)(long int)rsdp_addr, rsdp_len, FWTS_ACPI_TABLE_FROM_FIRMWARE); /* Load any tables from XSDT if it's valid */ if (rsdp->xsdt_address) { if ((xsdt = fwts_acpi_load_table((off_t)rsdp->xsdt_address)) != NULL) { fwts_acpi_add_table("XSDT", xsdt, (uint64_t)rsdp->xsdt_address, xsdt->header.length, FWTS_ACPI_TABLE_FROM_FIRMWARE); num_entries = (xsdt->header.length - sizeof(fwts_acpi_table_header)) / 8; for (i = 0; i < num_entries; i++) { if (xsdt->entries[i]) { if ((header = fwts_acpi_load_table((off_t)xsdt->entries[i])) != NULL) { if (strncmp("FACP", header->signature, 4) == 0) if (fwts_acpi_handle_fadt(fw, (uint64_t)xsdt->entries[i], (fwts_acpi_table_fadt *)header, FWTS_ACPI_TABLE_FROM_FIRMWARE) != FWTS_OK) goto fail; fwts_acpi_add_table(header->signature, header, xsdt->entries[i], header->length, FWTS_ACPI_TABLE_FROM_FIRMWARE); } } } } } /* Load any tables from RSDT if it's valid */ if (rsdp->rsdt_address) { if ((rsdt = fwts_acpi_load_table((off_t)rsdp->rsdt_address)) != NULL) { fwts_acpi_add_table("RSDT", rsdt, (uint64_t)rsdp->rsdt_address, rsdt->header.length, FWTS_ACPI_TABLE_FROM_FIRMWARE); num_entries = (rsdt->header.length - sizeof(fwts_acpi_table_header)) / 4; for (i = 0; i < num_entries; i++) { if (rsdt->entries[i]) { if ((header = fwts_acpi_load_table((off_t)rsdt->entries[i])) != NULL) { if (strncmp("FACP", header->signature, 4) == 0) if (fwts_acpi_handle_fadt(fw, (uint64_t)rsdt->entries[i], (fwts_acpi_table_fadt *)header, FWTS_ACPI_TABLE_FROM_FIRMWARE) != FWTS_OK) goto fail; fwts_acpi_add_table(header->signature, header, (uint64_t)rsdt->entries[i], header->length, FWTS_ACPI_TABLE_FROM_FIRMWARE); } } } } } return FWTS_OK; fail: /* * Free'ing the tables will cause acpica_init to fail * and so we abort any ACPI related tests */ fwts_acpi_free_tables(); return FWTS_ERROR; } /* * fwts_fake_physical_addr() * Loading tables from file may result in data without an originating * physical address of the table, so fake a unique 32 bit address for the table. */ static uint32_t fwts_fake_physical_addr(const size_t size) { static uint32_t fake_phys_addr = 0xbff00000; uint32_t addr = fake_phys_addr; fake_phys_addr += (size + 16); return addr; } /* * fwts_acpi_load_table_from_acpidump() * Load an ACPI table from the output of acpidump or fwts --dump */ static uint8_t *fwts_acpi_load_table_from_acpidump( fwts_framework *fw, FILE *fp, char *name, uint64_t *addr, size_t *size) { uint32_t offset, expected_offset = 0; uint8_t data[16]; char buffer[128]; uint8_t *table; uint8_t *tmp = NULL; char *ptr; size_t len = 0; unsigned long long table_addr; ptrdiff_t name_len; *size = 0; if (fgets(buffer, sizeof(buffer), fp) == NULL) return NULL; /* * Parse tablename followed by address, e.g. * DSTD @ 0xbfa02344 * SSDT4 @ 0xbfa0f230 */ ptr = strstr(buffer, "@ 0x"); if (ptr == NULL) return NULL; /* Can't find table name */ name_len = ptr - buffer; /* * We should have no more than the table name (4..5 chars) * plus a space left between the start of the buffer and * the @ sign. If we have more then something is wrong with * the data. So just ignore this garbage as we don't want to * overflow the name on the following strcpy() */ if ((name_len > 6) || (name_len < 5)) return NULL; /* Name way too long or too short */ if (sscanf(ptr, "@ 0x%Lx\n", &table_addr) < 1) return NULL; /* Can't parse address */ *(ptr-1) = '\0'; strcpy(name, buffer); /* In fwts RSD PTR is known as the RSDP */ if (strncmp(name, "RSD PTR", 7) == 0) strcpy(name, "RSDP"); /* * Pull in 16 bytes at a time, data MUST be conforming to the * acpidump format, e.g.: * 0000: 46 41 43 50 f4 00 00 00 03 f9 41 4d 44 20 20 20 FACP......AMD * * This parser expects hex data to be separated by one space, * anything not conforming to this rigid format will be prematurely * aborted */ while (fgets(buffer, sizeof(buffer), fp) ) { uint8_t *new_tmp; int n; /* Get offset */ if (sscanf(buffer," %" SCNx32 ": ", &offset) < 1) break; /* Offset are not correct, abort with truncated table */ if (offset != expected_offset) { fwts_log_error(fw, "ACPI dump offsets in table '%s'" " are not incrementing by 16 bytes per row. " " Table truncated prematurely due to bad acpidump data.", name); break; } expected_offset += 16; /* Data follows the colon, abort if not found */ ptr = strstr(buffer, ": "); if (!ptr) { fwts_log_error(fw, "ACPI dump in table '%s' did not contain " "any data, expecting at least 1 hex byte of data per row.", name); break; } ptr += 2; /* Now expect 16 lots of 2 hex digits and a space */ for (n = 0; n < 16; n++) { /* * Need to be 100% sure 2 hex digits. Maybe a short row * because it is the end of the table, so assume it is the * end of the table if not hex digits. */ if (!isxdigit(*ptr) || !isxdigit(*(ptr + 1))) { break; } if (sscanf(ptr, "%2" SCNx8, &data[n]) != 1) { /* Bug in parsing! should never happen! */ fwts_log_error(fw, "ACPI dump in table '%s' at hex byte position " "%d did parse correctly, got " "'%2.2s' which could not be parsed as a hex value.", name, n, ptr); break; } ptr += 3; } /* Got no data? */ if (n == 0) { fwts_log_error(fw, "ACPI dump in table '%s' did not contain " "any data, expecting at least 1 hex byte of data per row.", name); break; } len += n; if ((new_tmp = realloc(tmp, len)) == NULL) { free(tmp); fwts_log_error(fw, "ACPI table parser run out of memory parsing table '%s'.", name); return NULL; } else tmp = new_tmp; memcpy(tmp + offset, data, n); /* Treat less than a full row as last one */ if (n != 16) break; } /* Unlikely, but an empty table should be checked for */ if (!tmp) { fwts_log_error(fw, "ACPI table parser found an empty table '%s'.", name); return NULL; } /* Allocate the table using low 32 bit memory */ if ((table = fwts_low_malloc(len)) == NULL) { free(tmp); fwts_log_error(fw, "ACPI table parser run out of 32 bit memory parsing table '%s'.", name); return NULL; } memcpy(table, tmp, len); free(tmp); if (table_addr == 0) table_addr = fwts_fake_physical_addr(len); /* We may need to fake a physical address if its null */ *addr = (uint64_t)(table_addr == 0 ? fwts_fake_physical_addr(len) : table_addr); *size = len; return table; } /* * fwts_acpi_load_tables_from_acpidump() * Load in all ACPI tables from output of acpidump or fwts --dump */ static int fwts_acpi_load_tables_from_acpidump(fwts_framework *fw) { FILE *fp; if (!fw->acpi_table_acpidump_file) return FWTS_ERROR; if ((fp = fopen(fw->acpi_table_acpidump_file, "r")) == NULL) { fwts_log_error(fw, "Cannot open '%s' to read ACPI tables.", fw->acpi_table_acpidump_file); return FWTS_ERROR; } while (!feof(fp)) { uint64_t addr; uint8_t *table; size_t length; char name[16]; if ((table = fwts_acpi_load_table_from_acpidump(fw, fp, name, &addr, &length)) != NULL) fwts_acpi_add_table(name, table, addr, length, FWTS_ACPI_TABLE_FROM_FILE); } (void)fclose(fp); return FWTS_OK; } /* * fwts_acpi_load_table_from_file() * load table from a raw binary dump */ static uint8_t *fwts_acpi_load_table_from_file(const int fd, size_t *length) { uint8_t *ptr = NULL, *tmp; size_t size = 0; char buffer[4096]; *length = 0; /* * read table into buffer in the normal heap * so we don't have to do expensive fwts_low_reallocs * per iteration on long tables */ for (;;) { ssize_t n = read(fd, buffer, sizeof(buffer)); if (n == 0) break; if (n < 0) { if (errno != EINTR && errno != EAGAIN) { fwts_low_free(ptr); return NULL; } continue; } if (n > (ssize_t)sizeof(buffer)) goto err; /* Unlikely */ if (size + n > 0xffffffff) goto err; /* Very unlikely */ if ((tmp = (uint8_t*)realloc(ptr, size + n + 1)) == NULL) { free(ptr); return NULL; } ptr = tmp; memcpy(ptr + size, buffer, n); size += n; } if (!ptr || !size) goto err_no_data; /* * ..and copy table into a 32 bit memory space buffer */ if ((tmp = fwts_low_malloc(size)) == NULL) goto err; *length = size; memcpy(tmp, ptr, size); free(ptr); return tmp; err: free(ptr); err_no_data: *length = 0; return NULL; } /* * fwts_acpi_load_tables_from_file_generic() * load acpi tables from a given path with a given file extension */ static int fwts_acpi_load_tables_from_file_generic( fwts_framework *fw, char *acpi_table_path, const char *extension, int *count) { struct dirent **dir_entries; int i, n; *count = 0; if (!acpi_table_path) return FWTS_ERROR; /* * Read in directory in alphabetical name sorted order * to ensure the tables are always loaded into memory * in some form of deterministic order */ if ((n = scandir(acpi_table_path, &dir_entries, 0, alphasort)) < 0) return FWTS_ERROR; for (i = 0; i < n; i++) { /* Ignore . directories */ if (dir_entries[i]->d_name[0] == '.') continue; if (strstr(dir_entries[i]->d_name, extension)) { char path[PATH_MAX]; int fd; snprintf(path, sizeof(path), "%s/%s", acpi_table_path, dir_entries[i]->d_name); if ((fd = open(path, O_RDONLY)) >= 0) { uint8_t *table; size_t length; struct stat buf; if (fstat(fd, &buf) < 0) { fwts_log_error(fw, "Cannot stat file '%s'\n", path); (void)close(fd); continue; } /* Must be a regular file */ if (!S_ISREG(buf.st_mode)) { (void)close(fd); continue; } if ((table = fwts_acpi_load_table_from_file(fd, &length)) != NULL) { char name[9]; /* "RSD PTR " or standard ACPI 4 letter name */ fwts_acpi_table_rsdp *rsdp = (fwts_acpi_table_rsdp *)table; /* Could be RSDP or a standard ACPI table, so check */ if (!strncmp(rsdp->signature, "RSD PTR ", 8)) { /* In fwts, RSD PTR is tagged as the RSDP */ strcpy(name, "RSDP"); } else { /* Assume it is a standard ACPI table */ fwts_acpi_table_header *hdr = (fwts_acpi_table_header *)table; strncpy(name, hdr->signature, 4); name[4] = '\0'; } (*count)++; if (!strncmp(name, "XSDT", 4) || !strncmp(name, "RSDT", 4)) { /* * For XSDT and RSDT we don't bother loading at this point. * These tables point to the other tables, however, we can't * figure out which table each pointer references because * we are loading in raw table data and we don't know where * these were located in the original machine. So the best * way forward is to ignore these tables and instead leave * the fix up stage fwts_acpi_load_tables_fixup() to magically * create faked XSDT and RSDT entries based on the tables * we've loaded from file. */ fwts_low_free(table); } else { fwts_acpi_add_table(name, table, (uint64_t)fwts_fake_physical_addr(length), length, FWTS_ACPI_TABLE_FROM_FILE); } } (void)close(fd); } else fwts_log_error(fw, "Cannot load ACPI table from file '%s'\n", path); } free(dir_entries[i]); } free(dir_entries); return FWTS_OK; } /* * fwts_acpi_load_tables_from_file() * load raw acpi tables from a user given path, files must end in ".dat" */ static int fwts_acpi_load_tables_from_file(fwts_framework *fw) { int count; if (!fw->acpi_table_path) return FWTS_ERROR; fwts_acpi_load_tables_from_file_generic(fw, fw->acpi_table_path, ".dat", &count); if (count == 0) { fwts_log_error(fw, "Could not find any ACPI tables in directory '%s'.\n", fw->acpi_table_path); return FWTS_ERROR; } return FWTS_OK; } /* * fwts_acpi_table_fixable() * return true if a table can be put into RSDT or XSDT */ static bool fwts_acpi_table_fixable(fwts_acpi_table_info *table) { fwts_acpi_table_header *header; if (table == NULL) return false; header = (fwts_acpi_table_header *)table->data; /* We don't want RSDT or XSDT in the RSDT and XSDT */ if (strncmp(header->signature, "RSDT", 4) == 0) return false; if (strncmp(header->signature, "XSDT", 4) == 0) return false; return true; } /* * fwts_acpi_fixup_addr_from_fadt() * fixup the ACPI table address of a given table if we have it defined * in the FADT. This is only for fixed up tables loaded from file * where these table addresses are unknown and hence are faked physical * addresses to keep ACPICA happy. */ void fwts_acpi_fixup_addr_from_fadt( fwts_framework *fw, const char *name, uint32_t addr32, uint64_t addr64) { fwts_acpi_table_info *table = NULL; /* Fetch the table */ if (fwts_acpi_find_table(fw, name, 0, &table) != FWTS_OK) return; if (!table) return; /* * OK, we have something to patch up, 64 bit addresses * are used in preference to 32 bit. And only patch * the addresses if they are non-zero. */ if (addr64) table->addr = addr64; else if (addr32) table->addr = addr32; } /* * fwts_acpi_load_tables_fixup() * tables loaded from file sometimes do not contain the original * physical address of the tables, so these need faking. Also, some * poor ACPI dumping implementations fail to save the RSDP, RSDT and * XSDT, so we need to create fake versions from scratch. */ static int fwts_acpi_load_tables_fixup(fwts_framework *fw) { int i, j, count; char *oem_tbl_id; fwts_acpi_table_info *table = NULL; fwts_acpi_table_rsdp *rsdp = NULL; fwts_acpi_table_fadt *fadt = NULL; uint64_t rsdt_fake_addr = 0, xsdt_fake_addr = 0; bool redo_rsdp_checksum = false; /* Fetch the OEM Table ID */ if (fwts_acpi_find_table(fw, "FACP", 0, &table) != FWTS_OK) { fwts_log_error(fw, "ACPI table find failure."); return FWTS_ERROR; } if (!table) { fwts_log_error(fw, "Cannot find FACP."); return FWTS_ERROR; } fadt = (fwts_acpi_table_fadt *)table->data; oem_tbl_id = fadt->header.oem_tbl_id; /* Get FACS */ if (fwts_acpi_find_table(fw, "FACS", 0, &table) != FWTS_OK) { fwts_log_error(fw, "ACPI table find failure."); return FWTS_ERROR; } if (!table) { size_t size = 64; uint64_t facs_addr; fwts_acpi_table_facs *facs = NULL; if (fwts_acpi_is_reduced_hardware(fw)) /* FACS is optional on reduced hardware */ fwts_log_info(fw, "No FACS found, fwts has faked one instead."); else /* This is most unexpected, so warn about it */ fwts_log_warning(fw, "No FACS found, fwts has faked one instead."); if ((facs = fwts_low_calloc(1, size)) == NULL) { fwts_log_error(fw, "Cannot allocate fake FACS."); return FWTS_ERROR; } (void)memcpy(facs->signature, "FACS", 4); facs->length = size; facs->hardware_signature = 0xf000a200; /* Some signature */ facs->flags = 0; facs->version = 2; /* Get physical address of FACS, try to take it from FACS first, and if that fails, create a fake one and update FACS */ if (fadt->header.length >= 140 && fadt->x_firmware_ctrl != 0) { facs_addr = fadt->x_firmware_ctrl; } else if (fadt->firmware_control != 0) { facs_addr = (uint64_t)fadt->firmware_control; } else { facs_addr = (uint64_t)fwts_fake_physical_addr(size); if (fadt->header.length >= 140) fadt->x_firmware_ctrl = facs_addr; else fadt->firmware_control = (uint32_t)facs_addr; fadt->header.checksum -= fwts_checksum((uint8_t*)&facs_addr, sizeof(facs_addr)); } fwts_acpi_add_table("FACS", facs, (uint64_t)facs_addr, size, FWTS_ACPI_TABLE_FROM_FIXUP); } /* * In the case where the tables have be loaded from file * and the address is not known we may have a valid FACP (FADT) * that points to the FACS and DSDT, so we need to ensure * fake addresses created by fwts for these are in-sync * before we create RSDT and XSDTs */ fwts_acpi_fixup_addr_from_fadt(fw, "FACS", fadt->firmware_control, fadt->x_firmware_ctrl); fwts_acpi_fixup_addr_from_fadt(fw, "DSDT", fadt->dsdt, fadt->x_dsdt); /* Figure out how many tables we need to put into RSDT and XSDT */ for (count = 0, i = 0; ; i++) { if (fwts_acpi_get_table(fw, i, &table) != FWTS_OK) break; if (table == NULL) /* No more tables */ break; if (fwts_acpi_table_fixable(table)) count++; } /* Get RSDT */ if (fwts_acpi_find_table(fw, "RSDT", 0, &table) != FWTS_OK) { fwts_log_error(fw, "ACPI table find failure."); return FWTS_ERROR; } if (table) { rsdt_fake_addr = table->addr; } else { /* No RSDT? go and fake one */ fwts_acpi_table_rsdt *rsdt; size_t size = sizeof(fwts_acpi_table_rsdt) + (count * sizeof(uint32_t)); if ((rsdt = fwts_low_calloc(1, size)) == NULL) { fwts_log_error(fw, "Cannot allocate fake RSDT."); return FWTS_ERROR; } for (i = 0,j = 0; j < count; i++) if (fwts_acpi_get_table(fw, i, &table) == FWTS_OK) if (table && fwts_acpi_table_fixable(table)) rsdt->entries[j++] = (uint32_t)table->addr; (void)memcpy(rsdt->header.signature, "RSDT", 4); rsdt->header.length = size; rsdt->header.revision = 1; (void)memcpy(rsdt->header.oem_id, "FWTSID", 6); (void)memcpy(rsdt->header.oem_tbl_id, oem_tbl_id, 8); rsdt->header.oem_revision = 1; (void)memcpy(rsdt->header.creator_id, "FWTS", 4); rsdt->header.creator_revision = 1; rsdt->header.checksum = 256 - fwts_checksum((uint8_t*)rsdt, size); rsdt_fake_addr = fwts_fake_physical_addr(size); fwts_acpi_add_table("RSDT", rsdt, rsdt_fake_addr, size, FWTS_ACPI_TABLE_FROM_FIXUP); } /* Get XSDT */ if (fwts_acpi_find_table(fw, "XSDT", 0, &table) != FWTS_OK) { fwts_log_error(fw, "ACPI table find failure."); return FWTS_ERROR; } if (table) { xsdt_fake_addr = table->addr; } else { /* No XSDT? go and fake one */ fwts_acpi_table_xsdt *xsdt; size_t size = sizeof(fwts_acpi_table_rsdt) + (count * sizeof(uint64_t)); if ((xsdt = fwts_low_calloc(1, size)) == NULL) { fwts_log_error(fw, "Cannot allocate fake XSDT."); return FWTS_ERROR; } for (i = 0,j = 0; j < count; i++) if (fwts_acpi_get_table(fw, i, &table) == FWTS_OK) if (table && fwts_acpi_table_fixable(table)) xsdt->entries[j++] = table->addr; (void)memcpy(xsdt->header.signature, "XSDT", 4); xsdt->header.length = size; xsdt->header.revision = 1; (void)memcpy(xsdt->header.oem_id, "FWTSID", 6); (void)memcpy(xsdt->header.oem_tbl_id, oem_tbl_id, 8); xsdt->header.oem_revision = 1; (void)memcpy(xsdt->header.creator_id, "FWTS", 4); xsdt->header.creator_revision = 1; xsdt->header.checksum = 256 - fwts_checksum((uint8_t*)xsdt, size); xsdt_fake_addr = fwts_fake_physical_addr(size); fwts_acpi_add_table("XSDT", xsdt, xsdt_fake_addr, size, FWTS_ACPI_TABLE_FROM_FIXUP); } /* Get RSDP */ if (fwts_acpi_find_table(fw, "RSDP", 0, &table) != FWTS_OK) return FWTS_ERROR; if (table) rsdp = (fwts_acpi_table_rsdp *)table->data; else { /* No RSDP? go and fake one */ size_t size = sizeof(fwts_acpi_table_rsdp); if ((rsdp = fwts_low_calloc(1, size)) == NULL) { fwts_log_error(fw, "Cannot allocate fake RSDP."); return FWTS_ERROR; } (void)memcpy(rsdp->signature, "RSD PTR ", 8); (void)memcpy(rsdp->oem_id, "FWTSID", 6); rsdp->revision = 2; rsdp->length = sizeof(fwts_acpi_table_rsdp); rsdp->reserved[0] = 0; rsdp->reserved[1] = 0; rsdp->reserved[2] = 0; rsdp->checksum = 256 - fwts_checksum((uint8_t*)rsdp, 20); rsdp->extended_checksum = 256 - fwts_checksum((uint8_t*)rsdp, rsdp->length); fwts_acpi_add_table("RSDP", rsdp, (uint64_t)fwts_fake_physical_addr(size), sizeof(fwts_acpi_table_rsdp), FWTS_ACPI_TABLE_FROM_FIXUP); } /* Now we have all the tables, final fix up is required */ if (fw->target_arch == FWTS_ARCH_ARM64) { if ((rsdp->revision > 0) && (rsdp->length >= 36) && (rsdp->xsdt_address != xsdt_fake_addr)) { rsdp->xsdt_address = xsdt_fake_addr; redo_rsdp_checksum = true; } } else { if (rsdp->rsdt_address != rsdt_fake_addr) { rsdp->rsdt_address = rsdt_fake_addr; redo_rsdp_checksum = true; } if ((rsdp->revision > 0) && (rsdp->length >= 36) && (rsdp->xsdt_address != xsdt_fake_addr)) { rsdp->xsdt_address = xsdt_fake_addr; redo_rsdp_checksum = true; } } /* And update checksum if we've updated the rsdp */ if (redo_rsdp_checksum) { rsdp->checksum = 0; /* Clear old checksum */ rsdp->checksum = 256 - fwts_checksum((uint8_t*)rsdp, 20); rsdp->extended_checksum = 0; /* Clear old checksum */ rsdp->extended_checksum = 256 - fwts_checksum((uint8_t*)rsdp, rsdp->length); } return FWTS_OK; } static int fwts_acpi_load_tables_from_sysfs(fwts_framework *fw) { int count, total; fwts_acpi_load_tables_from_file_generic(fw, "/sys/firmware/acpi/tables", "", &total); fwts_acpi_load_tables_from_file_generic(fw, "/sys/firmware/acpi/tables/dynamic", "", &count); total += count; if (total == 0) { fwts_log_error(fw, "Could not find any ACPI tables in directory '/sys/firmware/acpi/tables'.\n"); return FWTS_ERROR; } return FWTS_OK; } /* * fwts_acpi_load_tables() * Load from firmware or from files in a specified directory */ int fwts_acpi_load_tables(fwts_framework *fw) { int ret; bool require_fixup = false; if (fw->acpi_table_path != NULL) { ret = fwts_acpi_load_tables_from_file(fw); require_fixup = true; } else if (fw->acpi_table_acpidump_file != NULL) { ret = fwts_acpi_load_tables_from_acpidump(fw); require_fixup = true; } else if (fwts_check_root_euid(fw, true) == FWTS_OK) { ret = fwts_acpi_load_tables_from_sysfs(fw); /* Load from sysfs failed (e.g. no /sys/firmware/acpi/tables), so try memory */ if (ret != FWTS_OK) ret = fwts_acpi_load_tables_from_firmware(fw); else require_fixup = true; } else { ret = FWTS_ERROR_NO_PRIV; } if (ret == FWTS_OK) { acpi_tables_loaded = ACPI_TABLES_LOADED_OK; /* Loading from file may require table address fixups */ if (require_fixup) fwts_acpi_load_tables_fixup(fw); } else { acpi_tables_loaded = ACPI_TABLES_LOADED_FAILED; } return ret; } /* * fwts_acpi_find_table() * Search for an ACPI table. There may be more than one, so * specify the one using which. */ int fwts_acpi_find_table( fwts_framework *fw, const char *name, const uint32_t which, fwts_acpi_table_info **info) { int i; if (info == NULL) return FWTS_NULL_POINTER; *info = NULL; if (acpi_tables_loaded == ACPI_TABLES_LOADED_FAILED) return FWTS_ERROR; if (acpi_tables_loaded == ACPI_TABLES_NOT_LOADED) { int ret; if ((ret = fwts_acpi_load_tables(fw)) != FWTS_OK) return ret; } for (i = 0; i < ACPI_MAX_TABLES; i++) { if (tables[i].data == NULL) break; if ((strcmp(tables[i].name, name) == 0) && (tables[i].which == which)) { *info = &tables[i]; return FWTS_OK; } } return FWTS_OK; } /* * fwts_acpi_find_table_by_addr() * Search for a cached ACPI table given it's original physical address */ int fwts_acpi_find_table_by_addr(fwts_framework *fw, const uint64_t addr, fwts_acpi_table_info **info) { int i; if (info == NULL) return FWTS_NULL_POINTER; *info = NULL; if (acpi_tables_loaded == ACPI_TABLES_NOT_LOADED) { int ret; if ((ret = fwts_acpi_load_tables(fw)) != FWTS_OK) return ret; } for (i = 0; i < ACPI_MAX_TABLES; i++) { if (tables[i].data == NULL) break; if (tables[i].addr == addr) { *info = &tables[i]; return FWTS_OK; } } return FWTS_OK; } /* * fwts_acpi_get_table() * Get the Nth cached ACPI table. */ int fwts_acpi_get_table(fwts_framework *fw, const uint32_t index, fwts_acpi_table_info **info) { if (info == NULL) return FWTS_NULL_POINTER; *info = NULL; if (index >= ACPI_MAX_TABLES) return FWTS_ERROR; if (acpi_tables_loaded == ACPI_TABLES_NOT_LOADED) { int ret; if ((ret = fwts_acpi_load_tables(fw)) != FWTS_OK) return ret; } if (tables[index].data == NULL) return FWTS_OK; *info = &tables[index]; return FWTS_OK; } /* * fwts_acpi_obj_find() * Returns whether obj_name can be found in the ACPI object name space. */ bool fwts_acpi_obj_find(fwts_framework *fw, const char *obj_name) { char expanded[BUFSIZ]; char *c = expanded; const char *obj_ptr; int i; fwts_list_link *item; fwts_list *objects; bool found = false; if (fwts_acpi_init(fw) != FWTS_OK) { fwts_log_error(fw, "Cannot initialise ACPI."); return false; } if ((objects = fwts_acpi_object_get_names()) == NULL) { fwts_log_info(fw, "Cannot find any ACPI objects"); fwts_acpi_deinit(fw); return false; } memset(expanded, 0, BUFSIZ); /* * Converts \_SB.A.BB.CCC.DDDD.EE to * \_SB_.A___.BB__.CCC_.DDDD.EE__ */ for (i = -1, obj_ptr = obj_name; ; obj_ptr++) { if (*obj_ptr == '.' || *obj_ptr == '\0') { while (i < 4) { *c++ = '_'; i++; } i = 0; } else { i++; } *c++ = *obj_ptr; if (!*obj_ptr) break; } /* Search for object */ fwts_list_foreach(item, objects) { char *name = fwts_list_data(char*, item); if (strcmp(expanded, name) == 0) { found = true; break; } } fwts_acpi_deinit(fw); return found; } /* * fwts_acpi_reserved_zero_() * verify whether the reserved field is zero */ void fwts_acpi_reserved_zero_( fwts_framework *fw, const char *table, const char *field, const uint64_t value, const uint8_t size, bool *passed) { if (value != 0) { char label[20]; strncpy(label, table, 4); /* ACPI table name is 4 char long */ strncpy(label + 4, "ReservedNonZero", sizeof(label) - 4); switch (size) { case sizeof(uint8_t): fwts_failed(fw, LOG_LEVEL_MEDIUM, label, "%4.4s %s field must be zero, got " "0x%2.2" PRIx8 " instead", table, field, (uint8_t)value); break; case sizeof(uint16_t): fwts_failed(fw, LOG_LEVEL_MEDIUM, label, "%4.4s %s field must be zero, got " "0x%4.4" PRIx16 " instead", table, field, (uint16_t)value); break; case sizeof(uint32_t): fwts_failed(fw, LOG_LEVEL_MEDIUM, label, "%4.4s %s field must be zero, got " "0x%8.8" PRIx32 " instead", table, field, (uint32_t)value); break; case sizeof(uint64_t): fwts_failed(fw, LOG_LEVEL_MEDIUM, label, "%4.4s %s field must be zero, got " "0x%16.16" PRIx64 " instead", table, field, value); break; } *passed = false; } } /* * fwts_acpi_reserved_zero_array() * verify whether the reserved array is all zeroed */ void fwts_acpi_reserved_zero_array( fwts_framework *fw, const char *table, const char *field, const uint8_t* data, const uint8_t length, bool *passed) { uint32_t value = 0; char label[20]; uint8_t i; strncpy(label, table, sizeof(label) - 1); strcat(label, "ReservedNonZero"); for (i = 0; i < length; i++) value += data[i]; if (value != 0) { *passed = false; fwts_failed(fw, LOG_LEVEL_MEDIUM, label, "%4.4s %s field must be all zero, got below instead", table, field); for (i = 0; i < length; i++) fwts_log_info_verbatim(fw, " %s [%2.2" PRId8 "] = 0x%2.2" PRIx8, field, i, data[i]); } } /* * fwts_acpi_fixed_value() * verify whether a field matches the designed fixed value */ void fwts_acpi_fixed_value( fwts_framework *fw, const fwts_log_level level, const char *table, const char *field, const uint8_t actual, const uint8_t must_be, bool *passed) { char label[20]; strncpy(label, table, 4); /* ACPI table name is 4 char long */ strncpy(label + 4, "BadFieldValue", sizeof(label) - 4); if (actual != must_be) { fwts_failed(fw, level, label, "%4.4s %s field must be %" PRIu8 ", got %" PRIu8 " instead.", table, field, must_be, actual); *passed = false; } } /* * fwts_acpi_reserved_bits_() * verify whether the reserved bits are zero */ void fwts_acpi_reserved_bits_( fwts_framework *fw, const char *table, const char *field, const uint64_t value, const uint8_t size, const uint8_t min, const uint8_t max, bool *passed) { uint64_t mask = 0; uint8_t i; for (i = min; i <= max; i++) { mask |= (1ULL << i); } if (value & mask) { char label[24]; strncpy(label, table, 4); /* ACPI table name is 4 char long */ strncpy(label + 4, "ReservedBitsNonZero", sizeof(label) - 4); switch (size) { case sizeof(uint8_t): fwts_failed(fw, LOG_LEVEL_HIGH, label, "%4.4s %s Bits [%" PRIu8 "..%" PRIu8 "] must be zero, got " "0x%2.2" PRIx8 " instead", table, field, max, min, (uint8_t)value); break; case sizeof(uint16_t): fwts_failed(fw, LOG_LEVEL_HIGH, label, "%4.4s %s Bits [%" PRIu8 "..%" PRIu8 "] must be zero, got " "0x%4.4" PRIx16 " instead", table, field, max, min, (uint16_t)value); break; case sizeof(uint32_t): fwts_failed(fw, LOG_LEVEL_HIGH, label, "%4.4s %s Bits [%" PRIu8 "..%" PRIu8 "] must be zero, got " "0x%8.8" PRIx32 " instead", table, field, max, min, (uint32_t)value); break; case sizeof(uint64_t): fwts_failed(fw, LOG_LEVEL_HIGH, label, "%4.4s %s Bits [%" PRIu8 "..%" PRIu8 "] must be zero, got " "0x%16.16" PRIx64 " instead", table, field, max, min, value); break; } *passed = false; } } /* * fwts_acpi_reserved_type() * verify whether the reserved types are used */ void fwts_acpi_reserved_type( fwts_framework *fw, const char *table, const uint8_t value, const uint8_t min, const uint8_t reserved, bool *passed) { if (value < min || value >= reserved) { char label[20]; strncpy(label, table, 4); /* ACPI name is 4 char long */ strncpy(label + 4, "BadSubTableType", sizeof(label) - 4); fwts_failed(fw, LOG_LEVEL_HIGH, label, "%4.4s must have subtable with Type %" PRId8 "..%" PRId8 ", got %" PRId8 " instead", table, min, reserved - 1, value); *passed = false; } } /* * get_space_id_name() * convert Generic Address Structure to a string, NULL if undefined */ static const char *get_space_id_name(const uint8_t id) { /* * Space Id defined for Generic Address Structure (GAS) * See Table 5.1: Generic Address Structure (GAS) in ACPI spec * Also see fwts_acpi.h */ static const char *gas_space_id_names[] = { "System Memory (0x0)", "System I/O (0x1)", "PCI Configuration (0x2)", "Embedded Controller (0x3)", "SMBus (0x4)", "SystemCMOS (0x5)", "PciBarTarget (0x6)", "IPMI (0x7)", "General PurposeIO (0x8)", "GenericSerialBus (0x9)", "Platform Communications Channel (0xa)", "Platform Runtime Mechanism (0xb)" }; if (id < FWTS_ARRAY_SIZE(gas_space_id_names)) return gas_space_id_names[id]; else if (id == 0x7f) return "Functional Fixed Hardware (0x7f)"; else return NULL; } /* * fwts_acpi_space_id() * check whether gas space id matches */ void fwts_acpi_space_id( fwts_framework *fw, const char *table, const char *field, bool *passed, const uint8_t actual, const uint8_t num_type, ...) { bool matched = false; char must_be_id[255]; uint16_t length = 0; uint8_t i, must_be; char label[25]; va_list ap; strncpy(label, table, 4); /* ACPI table name is 4 char long */ strncpy(label + 4, "BadAddressSpaceId", sizeof(label) - 4); memset(must_be_id, 0, sizeof(must_be_id)); va_start(ap, num_type); for (i = 0; i < num_type; i++) { const char *id_name; must_be = va_arg(ap, int); if (actual == must_be) { matched = true; break; } id_name = get_space_id_name(must_be); if (!id_name) continue; length += strlen(id_name); if (length >= sizeof(must_be_id)) continue; strncat(must_be_id, id_name, strlen(id_name)); if (i < num_type - 2) strncat(must_be_id, ", ", 3); else if (i == num_type - 2) strncat(must_be_id, " or ", 5); } if (!matched) { fwts_failed(fw, LOG_LEVEL_HIGH, label, "%4.4s %s Space ID must be one of %s, got %s instead.", table, field, must_be_id, get_space_id_name(actual)); *passed = false; } va_end(ap); } /* * fwts_acpi_table_length() * verify whether table length is sane */ bool fwts_acpi_table_length( fwts_framework *fw, const char *table, const uint32_t length, const uint32_t size) { if (length < size) { char label[30]; strncpy(label, table, 4); /* ACPI name is 4 char long */ strncpy(label + 4, "TooShort", sizeof(label) - 4); fwts_failed(fw, LOG_LEVEL_HIGH, label, "%4.4s table too short, expecting %2.2" PRIu8 " bytes, instead got %2.2" PRIu8 " bytes", table, size, length); return false; } return true; } /* * fwts_acpi_structure_length() * verify whether sub structure length is sane */ bool fwts_acpi_structure_length( fwts_framework *fw, const char *table, const uint8_t type, const uint32_t actual_length, const uint32_t struct_length) { if (actual_length != struct_length) { char label[30]; strncpy(label, table, 4); /* ACPI name is 4 char long */ strncpy(label + 4, "BadStructureLength", sizeof(label) - 4); fwts_failed(fw, LOG_LEVEL_CRITICAL, label, "%4.4s structure Type 0x%2.2" PRIx8 " should have " "length 0x%2.2" PRIx8 ", got 0x%2.2" PRIx8, table, type, struct_length, actual_length); return false; } return true; } /* * fwts_acpi_structure_length_zero() * verify whether sub structure length is zero */ bool fwts_acpi_structure_length_zero( fwts_framework *fw, const char *table, const uint16_t length, const uint32_t offset) { if (length == 0) { char label[30]; strncpy(label, table, 4); /* ACPI name is 4 char long */ strncpy(label + 4, "StructLengthZero", sizeof(label) - 4); fwts_failed(fw, LOG_LEVEL_CRITICAL, label, "%4.4s structure (offset 0x%4.4" PRIx32 ") " "length cannot be 0", table, offset); return true; } return false; } /* * fwts_acpi_structure_range() * verify whether sub structure is out of table range */ bool fwts_acpi_structure_range( fwts_framework *fw, const char *table, const uint32_t table_length, const uint32_t offset) { if (offset > table_length) { char label[30]; strncpy(label, table, 4); /* ACPI name is 4 char long */ strncpy(label + 4, "BadTableLength", sizeof(label) - 4); fwts_failed(fw, LOG_LEVEL_CRITICAL, label, "%4.4s has more subtypes than its size can handle", table); return true; } return false; } static uint32_t acpi_version; /* * fwts_get_acpi_version() * get acpi version from facp */ uint32_t fwts_get_acpi_version(fwts_framework *fw) { fwts_acpi_table_fadt *fadt; fwts_acpi_table_info *table; uint8_t minor; if (acpi_version != 0) return acpi_version; if (fwts_acpi_find_table(fw, "FACP", 0, &table) != FWTS_OK) { fwts_log_error(fw, "Cannot read ACPI table FACP."); return 0; } if (table == NULL) { fwts_log_error(fw, "ACPI table FACP does not exist!"); return 0; } fadt = (fwts_acpi_table_fadt *) table->data; minor = ((fadt->minor_version & 0xF) << 4) + ((fadt->minor_version & 0xF0) >> 4); acpi_version = (fadt->header.revision << 8) + minor; /* check FACP returns an invalid value */ if (acpi_version > FWTS_ACPI_VERSION_NEXT || acpi_version < FWTS_ACPI_VERSION_10) return 0; return acpi_version; } /* * fwts_get_fadt_version() * get fadt major and minor versions */ void fwts_get_fadt_version(fwts_framework *fw, uint8_t *major, uint8_t *minor) { uint32_t acpi_version; /* ACPI version = FADT major & minor versions */ acpi_version = fwts_get_acpi_version(fw); *major = (acpi_version & 0xF00) >> 8; *minor = (acpi_version & 0xFF) >> 4; } src/lib/src/fwts_acpid.c000066400000000000000000000052631465205512700155060ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "fwts.h" #define ACPID_SOCKET "/var/run/acpid.socket" /* * fwts_acpi_event_open() * open socket to acpid, return fd */ int fwts_acpi_event_open(void) { struct sockaddr_un addr; int ret; int fd; if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) return fd; memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; strcpy(addr.sun_path, ACPID_SOCKET); if ((ret = connect(fd, (struct sockaddr *)&addr, sizeof(addr))) < 0) { (void)close(fd); return ret; } if ((ret = fcntl(fd, F_SETFD, FD_CLOEXEC)) < 0) { (void)close(fd); return ret; } return fd; } /* * fwts_acpi_event_read() * read event from acpid socket, wait for timeout secs */ char *fwts_acpi_event_read(const int fd, size_t *length, const int timeout) { char *ptr = NULL; char buffer[8192]; struct timeval tv; fd_set rfds; int ret; ssize_t n; size_t size = 0; *length = 0; tv.tv_sec = timeout; tv.tv_usec = 0; FD_ZERO(&rfds); FD_SET(fd, &rfds); ret = select(fd+1, &rfds, NULL, NULL, &tv); switch (ret) { case 0: /* timeout! */ return ptr; case -1: free(ptr); return NULL; default: n = read(fd, buffer, sizeof(buffer)); if (n < 0) { free(ptr); return NULL; } else { char *new_ptr; new_ptr = realloc(ptr, size + n + 1); if (new_ptr == NULL) { free(ptr); return NULL; } else ptr = new_ptr; memcpy(ptr + size, buffer, n); size += n; *(ptr+size) = 0; } } *length = size; return ptr; } /* * fwts_acpi_event_close() * close socket connection */ void fwts_acpi_event_close(const int fd) { (void)close(fd); } src/lib/src/fwts_alloc.c000066400000000000000000000247721465205512700155260ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include "fwts.h" /* * Typically we use around 50 or so low mem allocations in fwts * so 509 is a good large prime size to ensure we get a good * hash table hit rate */ #define HASH_ALLOC_SIZE (509) typedef struct hash_alloc { struct hash_alloc *next;/* next one in hash chain */ void *addr; /* allocation addr, NULL = not used */ size_t size; /* actual size of allocation */ } hash_alloc_t; static hash_alloc_t *hash_allocs[HASH_ALLOC_SIZE]; static int hash_count; /* * hash_addr() * turn a void * address into a hash index */ static inline size_t hash_addr(const void *addr) { ptrdiff_t h = (ptrdiff_t)addr; h ^= h >> 17; h %= HASH_ALLOC_SIZE; return (size_t)h; } /* * hash_alloc_add() * add a allocated address into the hash of * known allocations so we can keep track * of valid allocs. */ static bool hash_alloc_add(void *addr, size_t size) { size_t h = hash_addr(addr); hash_alloc_t *new = hash_allocs[h]; while (new) { /* re-use old nullified records */ if (!new->addr) { /* old and free, so re-use */ new->addr = addr; new->size = size; hash_count++; return true; } /* something is wrong, already in use */ if (new->addr == addr) { return false; } new = new->next; } /* not found, add a new record */ new = malloc(sizeof(*new)); if (!new) return false; new->addr = addr; new->size = size; new->next = hash_allocs[h]; hash_allocs[h] = new; hash_count++; return true; } /* * hash_alloc_find() * find a hash_alloc_t of an allocation * of a given address */ static hash_alloc_t *hash_alloc_find(const void *addr) { size_t h = hash_addr(addr); hash_alloc_t *ha = hash_allocs[h]; while (ha) { if (ha->addr == addr) { return ha; } ha = ha->next; } return NULL; } /* * hash_alloc_garbage_collect() * free all hash records when the hash * is empty. */ static void hash_alloc_garbage_collect(void) { size_t i; if (hash_count) return; for (i = 0; i < HASH_ALLOC_SIZE; i++) { hash_alloc_t *ha = hash_allocs[i]; while (ha) { hash_alloc_t *next = ha->next; free(ha); ha = next; } } memset(hash_allocs, 0, sizeof(hash_allocs)); } /* * hash_alloc_free() * free up a hash_alloc_t record */ static void hash_alloc_free(hash_alloc_t *ha) { if (!ha) return; ha->addr = NULL; ha->size = 0; hash_count--; hash_alloc_garbage_collect(); } /* * We implement a low memory allocator to allow us to allocate * memory < 2G limit for the ACPICA table handling. On 64 bit * machines we have to ensure that cached copies of ACPI tables * have addresses that can be addressed by the legacy 32 bit * ACPI table pointers. * * This implementation is not intended to be a malloc replacement * for all of fwts - only just for the cached ACPICA table allocations. * * Hence this implementation is not necessarily an efficient solution, * as it will only be used for a handful of tables. */ /* * CHUNK_SIZE controls the gap between mappings. This creates gaps * between each low memory allocation so that we have some chance * of catching memory accesses that fall off the mapping. Without * a gap, memory mappings potentially become contiguous and hence * memory access errors are harder to catch. This is wasteful * in terms of address space, but fwts doesn't do too many low memory * mappings since they are just used for cached copies of ACPI tables. */ #define CHUNK_SIZE (64*1024) #define LIMIT_2GB (0x80000000ULL) #define LIMIT_START (0x00010000ULL) /* * fwts_low_mmap_walkdown() * try to allocate a free space under the 2GB limit by * walking down memory in CHUNK_SIZE steps for an unmapped region */ static void *fwts_low_mmap_walkdown(const size_t requested_size) { uint8_t *addr; size_t page_size = fwts_page_size(); size_t sz = (requested_size + page_size) & ~(page_size - 1); size_t pages = sz / page_size; unsigned char vec[pages]; static uint8_t *last_addr = (uint8_t *)LIMIT_2GB; if (requested_size == 0) /* Illegal */ return MAP_FAILED; for (addr = last_addr - sz; addr > (uint8_t *)LIMIT_START; addr -= CHUNK_SIZE) { void *mapping; /* Already mapped? */ if (mincore((void *)addr, pages, vec) == 0) continue; /* Not mapped but mincore returned something unexpected? */ if (errno != ENOMEM) continue; mapping = mmap((void *)addr, requested_size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED | MAP_ANONYMOUS, -1, 0); if (mapping != MAP_FAILED) { last_addr = mapping; return mapping; } } /* We've scanned all of memory, give up on subsequent calls */ last_addr = (uint8_t *)LIMIT_START; return MAP_FAILED; } /* * fwts_low_mmap() * try to find a free space under the 2GB limit and mmap it. * returns address of mmap'd region or MAP_FAILED if failed. */ static void *fwts_low_mmap(const size_t requested_size) { FILE *fp; char pathname[1024]; void *addr_start; void *addr_end; void *last_addr_end = NULL; void *first_addr_start = NULL; void *ret = MAP_FAILED; long prev_pos = 0; if (requested_size == 0) /* Illegal */ return MAP_FAILED; /* * If we can't access our own mappings then find a * free page by just walking down memory */ fp = fopen("/proc/self/maps", "r"); if (!fp) return fwts_low_mmap_walkdown(requested_size); while (!feof(fp)) { int n; long pos; n = fscanf(fp, "%p-%p %*s %*x %*s %*u %1023s\n", &addr_start, &addr_end, pathname); /* At same point of previous scanf, then force a loop exit */ pos = ftell(fp); if (pos == prev_pos) break; prev_pos = pos; /* We need exactly 3 parsed items of data */ if (n != 3) continue; /* * Sanity check data */ if ((addr_start <= (void *)LIMIT_START) || (addr_start >= (void *)LIMIT_2GB) || (addr_end <= (void *)LIMIT_START) || (addr_end >= (void *)LIMIT_2GB) || (addr_end <= addr_start)) continue; /* * Try and allocate under first mmap'd address space */ if (!first_addr_start) { size_t sz = (requested_size + CHUNK_SIZE) & ~(CHUNK_SIZE - 1); uint8_t *addr = (uint8_t *)addr_start - sz; /* * If addr is over the 2GB limit and we know * that this is the first mapping then we should * be able to map a region below the 2GB limit as * nothing is already mapped there */ if (addr > (uint8_t *)LIMIT_2GB) addr = (uint8_t *)LIMIT_2GB - sz; ret = mmap(addr, requested_size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED | MAP_ANONYMOUS, -1, 0); if (ret != MAP_FAILED) break; /* Success! */ first_addr_start = addr_start; } /* * No allocation yet, so try now to squeeze one * in between already mapped regions */ if ((last_addr_end != NULL) && (last_addr_end < (void*)LIMIT_2GB)) { if (((uint8_t *)addr_start - (uint8_t *)last_addr_end) > (ptrdiff_t)requested_size) { void *addr = last_addr_end; ret = mmap(addr, requested_size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED | MAP_ANONYMOUS, -1, 0); if (ret != MAP_FAILED) break; /* Success! */ } } /* * We really don't want to mmap at the end of the heap * and if we've reached the stack we've gone too far so * abort */ if ((strncmp("[heap]", pathname, 6) == 0) || (strncmp("[stack]", pathname, 7) == 0)) { ret = MAP_FAILED; break; } last_addr_end = addr_end; } (void)fclose(fp); /* * The "intelligent" memory hole finding strategy failed, * so try walking down memory instead. */ if (ret == MAP_FAILED) ret = fwts_low_mmap_walkdown(requested_size); return ret; } /* * fwts_low_calloc() * same as calloc(), but ensure the region is mapped * into the low 2GB of memory. This is required for * allocated ACPI tables that need to be addressed * via legacy 32 bit pointers on 64 bit architectures. */ void *fwts_low_calloc(const size_t nmemb, const size_t size) { const size_t n = nmemb * size; void *ret = MAP_FAILED; if (!nmemb || !size) return NULL; /* Check for size_t overflow */ if ((n / size) != nmemb) { errno = ENOMEM; return NULL; } #ifdef MAP_32BIT /* Not portable, only x86 */ ret = mmap(NULL, n, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS | MAP_32BIT, -1, 0); #else if (sizeof(void *) == 4) { /* 32 bit mmap by default */ ret = mmap(NULL, n, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); } #endif /* 32 bit mmap failed, so bodge our own 32 bit mmap */ if (ret == MAP_FAILED) ret = fwts_low_mmap(n); /* OK, really can't mmap, give up */ if (ret == MAP_FAILED) { errno = ENOMEM; return NULL; } /* should be zero already, but pre-fault it in */ memset(ret, 0, n); if (!hash_alloc_add(ret, n)) { (void)munmap(ret, n); errno = ENOMEM; return NULL; } return ret; } /* * fwts_low_malloc() */ void *fwts_low_malloc(const size_t size) { return fwts_low_calloc(1, size); } /* * fwts_low_realloc() * realloc memory - ptr must be NULL or * allocated with fwts_low_* allocators */ void *fwts_low_realloc(const void *ptr, const size_t size) { void *ret; hash_alloc_t *ha; if (!ptr) return fwts_low_malloc(size); ha = hash_alloc_find(ptr); if (!ha) { errno = ENOMEM; return NULL; } ret = fwts_low_malloc(size); if (!ret) { errno = ENOMEM; return NULL; } memcpy(ret, ha->addr, ha->size); (void)munmap(ha->addr, ha->size); hash_alloc_free(ha); return ret; } /* * fwts_low_free() * free memory allocated by fwts_low_calloc() */ void fwts_low_free(const void *ptr) { hash_alloc_t *ha; /* * Sanity check the address we are about to * try and free. If it is not known about * the don't free it. */ if (!ptr) return; ha = hash_alloc_find(ptr); if (!ha) { /* Should never happen... */ fprintf(stderr, "double free on %p\n", ptr); return; } (void)munmap(ha->addr, ha->size); hash_alloc_free(ha); } src/lib/src/fwts_arch.c000066400000000000000000000044711465205512700153430ustar00rootroot00000000000000/* * Copyright (C) 2016-2021, Al Stone * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include #include #include "fwts.h" struct fwts_arch_info { fwts_architecture arch; char *name; }; static const struct fwts_arch_info arch_info[] = { { FWTS_ARCH_X86, "x86" }, { FWTS_ARCH_X86, "x86_32" }, { FWTS_ARCH_X86, "x86_64" }, { FWTS_ARCH_X86, "i686" }, { FWTS_ARCH_IA64, "ia64" }, { FWTS_ARCH_ARM64, "arm64" }, { FWTS_ARCH_ARM64, "aarch64" }, { FWTS_ARCH_OTHER, "other" } }; static const struct fwts_arch_info arch_name[] = { { FWTS_ARCH_X86, "x86" }, { FWTS_ARCH_IA64, "ia64" }, { FWTS_ARCH_ARM64, "arm64" }, { FWTS_ARCH_OTHER, "other" }, }; static char *arch_names; static fwts_architecture fwts_arch_get_arch_by_name(const char *name) { const struct fwts_arch_info *ptr; for (ptr = arch_info; ptr->arch != FWTS_ARCH_OTHER; ptr++) if (!strcmp(ptr->name, name)) return ptr->arch; return FWTS_ARCH_OTHER; } fwts_architecture fwts_arch_get_host(void) { struct utsname buf; if (uname(&buf)) return FWTS_ARCH_OTHER; return fwts_arch_get_arch_by_name(buf.machine); } fwts_architecture fwts_arch_get_arch(const char *name) { return fwts_arch_get_arch_by_name(name); } char *fwts_arch_names(void) { const struct fwts_arch_info *ptr; size_t len; if (arch_names) return arch_names; for (ptr = arch_info, len = 1; ptr->arch != FWTS_ARCH_OTHER; ptr++) len += strlen(ptr->name) + 1; arch_names = calloc(len, sizeof(char)); if (arch_names) { for (ptr = arch_info; ptr->arch != FWTS_ARCH_OTHER; ptr++) { strcat(arch_names, ptr->name); strcat(arch_names, " "); } } return arch_names; } const char *fwts_arch_get_name(const fwts_architecture arch) { const struct fwts_arch_info *ptr; for (ptr = arch_name; ptr->arch != FWTS_ARCH_OTHER; ptr++) if (ptr->arch == arch) break; return ptr->name; } src/lib/src/fwts_args.c000066400000000000000000000231371465205512700153620ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include "fwts.h" #define FWTS_ARGS_WIDTH (28) #define FWTS_MIN_TTY_WIDTH (50) /* * Internal options table, we keep a list of all of the added options and keep a tally * of how many options there are in each table. */ typedef struct { fwts_option *options; /* options array */ int num_options; /* number of options */ fwts_args_optarg_handler optarg_handler;/* options handler */ fwts_args_optarg_check optarg_check; /* options checker */ } fwts_options_table; static fwts_list options_list; static int total_options; static bool options_init = false; /* * fwts_args_init() * initialise. */ int fwts_args_init(void) { if (!options_init) { fwts_list_init(&options_list); total_options = 0; options_init = true; } return FWTS_OK; } /* * fwts_args_add_options() * add a table of options and handler for these options */ int fwts_args_add_options( fwts_option *options, const fwts_args_optarg_handler handler, const fwts_args_optarg_check check) { int n; fwts_options_table *options_table; if (!options_init) (void)fwts_args_init(); if ((options_table = calloc(1, sizeof(fwts_options_table))) == NULL) return FWTS_ERROR; for (n = 0; options[n].long_name != NULL; n++) ; total_options += n; options_table->num_options = n; options_table->options = options; options_table->optarg_handler = handler; options_table->optarg_check = check; fwts_list_append(&options_list, options_table); return FWTS_OK; } /* * fwts_args_parse() * parse options */ int fwts_args_parse(fwts_framework *fw, const int argc, char * const argv[]) { fwts_list_link *item; fwts_options_table *options_table; struct option *long_options; int n = 0; int i; int c; int option_index; int master_option_index; int translated_long_option_index; int ret = FWTS_OK; char *short_options = NULL; size_t short_options_len = 0; long_options = calloc(1, (total_options + 1) * sizeof(struct option)); if (long_options == NULL) { fwts_log_error(fw, "Out of memory allocating long options."); return FWTS_ERROR; } /* * Build a getopt_long options table from all the options tables */ fwts_list_foreach(item, &options_list) { options_table = fwts_list_data(fwts_options_table *, item); for (i = 0; i < options_table->num_options; i++, n++) { const char *short_name = options_table->options[i].short_name; size_t len; long_options[n].name = options_table->options[i].long_name; long_options[n].has_arg = options_table->options[i].has_arg; long_options[n].flag = 0; long_options[n].val = 0; if (short_name && (len = strlen(short_name)) > 0) { if (short_options) { char *new_short_options; new_short_options = realloc(short_options, short_options_len + len + 1); if (new_short_options == NULL) { free(short_options); free(long_options); fwts_log_error(fw, "Out of memory " "allocating options."); return FWTS_ERROR; } else short_options = new_short_options; strcat(short_options, short_name); short_options_len += (len + 1); } else { short_options = calloc(1, len + 1); if (short_options == NULL) { free(short_options); free(long_options); fwts_log_error(fw, "Out of memory " "allocating options."); return FWTS_ERROR; } strcpy(short_options, short_name); short_options_len += (len + 1); } } } } /* * Although unlikely, short_options must not be null otherwise * it could potentially break getopt_long() so to be totally * safe, allocate a empty string. * Cleans up CoverityScan CID#1381432 ("Explicit Null dereference") */ if (!short_options) { short_options = strdup(""); if (!short_options) { free(short_options); free(long_options); fwts_log_error(fw, "Out of memory allocating options."); return FWTS_ERROR; } } for (;;) { master_option_index = total_options; translated_long_option_index = 0; c = getopt_long(argc, argv, short_options, long_options, &option_index); if (c == -1) break; fwts_list_foreach(item, &options_list) { options_table = fwts_list_data(fwts_options_table *, item); bool found = false; if (c != 0) { for (i = 0; i < options_table->num_options; i++) { const char *short_name = options_table->options[i].short_name; if (short_name && index(short_name, c) != NULL) { found = true; break; } } } else { /* c is zero for long option cases but we need the right optarg_handler set */ for (i = 0; i < options_table->num_options; i++) { const char *long_name = options_table->options[i].long_name; const char *name = long_options[option_index].name; if (long_name && name && !strcmp(long_name, name)) { translated_long_option_index = i; found = true; break; } } } /* Found an option, then run the appropriate handler */ if (found) { ret = options_table->optarg_handler(fw, argc, argv, c, translated_long_option_index); if (ret != FWTS_OK) goto exit; break; } else { master_option_index -= options_table->num_options; } } } /* We've collected all the args, now sanity check the values */ fwts_list_foreach(item, &options_list) { options_table = fwts_list_data(fwts_options_table *, item); if (options_table->optarg_check != NULL) { ret = options_table->optarg_check(fw); if (ret != FWTS_OK) break; } } exit: free(short_options); free(long_options); return ret; } /* * fwts_args_compare_options() * helper to enable sorting on long options name */ static int fwts_args_compare_options(void *data1, void *data2) { fwts_option *opt1 = (fwts_option*)data1; fwts_option *opt2 = (fwts_option*)data2; return strcmp(opt1->long_name, opt2->long_name); } /* * fwts_args_show_option() * pretty print an option */ static void fwts_args_show_option( const int width, const char *option, const char *explanation) { fwts_list *text; fwts_list_link *item; int lineno = 0; text = fwts_format_text(explanation, width < 0 ? (FWTS_MIN_TTY_WIDTH - FWTS_ARGS_WIDTH-1) : width); if (!text) return; fwts_list_foreach(item, text) { printf("%-*.*s %s\n", FWTS_ARGS_WIDTH, FWTS_ARGS_WIDTH, lineno++ == 0 ? option : "", fwts_list_data(char *, item)); } fwts_list_free(text, free); } /* * fwts_args_show_options() * show all options and brief explanation */ void fwts_args_show_options(void) { int i; int width; fwts_list_link *item; fwts_list sorted_options; fwts_list_init(&sorted_options); width = fwts_tty_width(fileno(stdin), FWTS_MIN_TTY_WIDTH); if ((width - (FWTS_ARGS_WIDTH + 1)) < 0) width = FWTS_MIN_TTY_WIDTH; width -= (FWTS_ARGS_WIDTH + 1); fwts_list_foreach(item, &options_list) { fwts_options_table *options_table; options_table = fwts_list_data(fwts_options_table *, item); for (i = 0; i < options_table->num_options; i++) { fwts_list_add_ordered(&sorted_options, &options_table->options[i], fwts_args_compare_options); } } fwts_list_foreach(item, &sorted_options) { char buffer[80]; char *ptr = buffer; fwts_option *option = fwts_list_data(fwts_option *, item); size_t n = sizeof(buffer) - 1; /* Format up short name, skip over : fields */ *ptr = '\0'; if ((option->short_name != NULL) && *(option->short_name)) { char ch; for (i = 0; (ch = option->short_name[i]) != '\0'; i++) { if (ch != ':') { *ptr++ = '-'; *ptr++ = ch; *ptr++ = ','; *ptr++ = ' '; *ptr = '\0'; n -= 4; } } } *ptr++ = '-'; *ptr++ = '-'; *ptr = '\0'; strncat(ptr, option->long_name, n - 2); fwts_args_show_option(width, buffer, option->explanation); } fwts_list_free_items(&sorted_options, NULL); } /* * fwts_args_free() * free option descriptor list */ int fwts_args_free(void) { fwts_list_free_items(&options_list, free); return FWTS_OK; } /* * fwts_args_comma_list * given a comma separated list, return a string of space separated terms. * returns NULL if failed */ char *fwts_args_comma_list(const char *arg) { char *tmpstr; char *token; char *saveptr = NULL; char *retstr = NULL; char *tmparg; if ((tmparg = strdup(arg)) == NULL) return NULL; for (tmpstr = tmparg; (token = strtok_r(tmpstr, ",", &saveptr)) != NULL; tmpstr = NULL) { if (retstr) if ((retstr = fwts_realloc_strcat(retstr, " ")) == NULL) { free(tmparg); return NULL; } if ((retstr = fwts_realloc_strcat(retstr, token)) == NULL) { free(tmparg); return NULL; } } free(tmparg); /* Any empty list should return an empty string and not NULL */ if (retstr == NULL) retstr = calloc(1, sizeof(char)); /* Return NULL on calloc failure must be handled by caller */ return retstr; } src/lib/src/fwts_backtrace.c000066400000000000000000000071061465205512700163430ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include "fwts.h" #define BACK_TRACE_SIZE (512) static sigjmp_buf jmp_env; static void *bt_buff[BACK_TRACE_SIZE]; static size_t bt_size = 0; /* * fwts_print_backtrace() * parse symbol backtrace and dump it in a easy * to read format. */ void fwts_print_backtrace(void) { fprintf(stderr, "Backtrace:\n"); if (bt_size) { char **bt_strings; size_t i; bt_strings = backtrace_symbols(bt_buff, bt_size); for (i = 0; i < bt_size; i++) { /* * convert trace into output in form: * 0x00007fb04a493ec5 /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5) */ char *addrstr = strstr(bt_strings[i], " [0x"); if (addrstr) { uint64_t addr; *addrstr = '\0'; addr = (uint64_t)strtoull(addrstr + 2, NULL, 16); fprintf(stderr, "0x%16.16" PRIx64 " %s\n", addr, bt_strings[i]); } } free(bt_strings); } else { fprintf(stderr, " No data\n"); } fprintf(stderr, "\n"); fflush(stdout); } /* * fwts_fault_handler() * catch a signal, save stack dump, jmp back or abort */ static void fwts_fault_handler(int signum) { static bool already_handled = false; /* Capture backtrace and jmp back */ if (!already_handled) { already_handled = true; /* Capture backtrace from this stack context */ bt_size = backtrace(bt_buff, BACK_TRACE_SIZE); /* Jmp back to the sigsetjmp context */ siglongjmp(jmp_env, signum); } /* We've hit a fault before, so abort */ _exit(EXIT_FAILURE); } /* * fwts_sig_handler_set() * helper to set signal handler */ void fwts_sig_handler_set(int signum, void (*handler)(int), struct sigaction *old_action) { struct sigaction new_action; memset(&new_action, 0, sizeof new_action); new_action.sa_handler = handler; sigemptyset(&new_action.sa_mask); (void)sigaction(signum, &new_action, old_action); } /* * fwts_sig_handler_restore() * helper to restore signal handler */ void fwts_sig_handler_restore(int signum, struct sigaction *old_action) { (void)sigaction(signum, old_action, NULL); } /* * fwts_fault_catch() * catch segfaults and bus errors, dump stack * trace so we can see what's causing them */ int fwts_fault_catch(void) { int ret; /* Trap segfaults and bus errors */ fwts_sig_handler_set(SIGSEGV, fwts_fault_handler, NULL); fwts_sig_handler_set(SIGBUS, fwts_fault_handler, NULL); ret = sigsetjmp(jmp_env, 1); /* * We reach here with ret == SIGNUM if the fault handler * longjmps back to here. Or we reach here with * ret == 0 if sigsetjmp has set the jmp_env up * correctly. */ if (ret) { fprintf(stderr, "\nCaught SIGNAL %d (%s), aborting.\n", ret, strsignal(ret)); fwts_print_backtrace(); exit(EXIT_FAILURE); } return FWTS_OK; } src/lib/src/fwts_battery.c000066400000000000000000000423011465205512700160720ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #include #include #include #include #include #include #include #include #include #include static inline bool fwts_battery_match( const uint32_t index, const uint32_t loop_index) { return (((fwts_battery_type)index == FWTS_BATTERY_ALL) | (index == loop_index)); } static inline void fwts_battery_path( char *path, const size_t path_len, const char *battery_dir, const char *name, const char *str) { (void)strlcpy(path, battery_dir, path_len); (void)strlcat(path, "/", path_len); (void)strlcat(path, name, path_len); (void)strlcat(path, "/", path_len); (void)strlcat(path, str, path_len); } static int fwts_battery_get_capacity_sys_fs(fwts_framework *fw, DIR *dir, const fwts_battery_type type, const uint32_t index, uint32_t *capacity_mAh, /* charge */ uint32_t *capacity_mWh, /* energy */ uint32_t *count) { struct dirent *entry; char *field_mAh; char *field_mWh; size_t field_mAh_len; size_t field_mWh_len; uint32_t i = 0; switch (type) { case FWTS_BATTERY_DESIGN_CAPACITY: field_mAh = "POWER_SUPPLY_CHARGE_FULL_DESIGN="; field_mWh = "POWER_SUPPLY_ENERGY_FULL_DESIGN="; break; case FWTS_BATTERY_REMAINING_CAPACITY: field_mAh = "POWER_SUPPLY_CHARGE_NOW="; field_mWh = "POWER_SUPPLY_ENERGY_NOW="; break; default: return FWTS_ERROR; } field_mAh_len = strlen(field_mAh); field_mWh_len = strlen(field_mWh); do { entry = readdir(dir); if (entry && strlen(entry->d_name) > 2) { char path[PATH_MAX]; char *data; int val; FILE *fp; bool match; /* Check that type field matches the expected type */ fwts_battery_path(path, sizeof(path), FWTS_SYS_CLASS_POWER_SUPPLY, entry->d_name, "type"); if ((data = fwts_get(path)) != NULL) { bool mismatch = (strstr(data, "Battery") == NULL); free(data); if (mismatch) continue; /* type don't match, skip this entry */ } else continue; /* can't check type, skip this entry */ match = fwts_battery_match(index, i); i++; if (!match) continue; snprintf(path, sizeof(path), "%s/%s/uevent", FWTS_SYS_CLASS_POWER_SUPPLY, entry->d_name); if ((fp = fopen(path, "r")) == NULL) { fwts_log_info(fw, "Battery %s present but undersupported - no state present.", entry->d_name); } else { char buffer[4096]; while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { if (strstr(buffer, field_mAh) && strlen(buffer) > field_mAh_len) { sscanf(buffer+field_mAh_len, "%d", &val); *capacity_mAh += (val / 1000); (*count)++; } if (strstr(buffer, field_mWh) && strlen(buffer) > field_mWh_len) { sscanf(buffer+field_mWh_len, "%d", &val); *capacity_mWh += (val / 1000); (*count)++; } } (void)fclose(fp); } } } while (entry); return FWTS_OK; } static int fwts_battery_get_capacity_proc_fs(fwts_framework *fw, DIR *dir, const fwts_battery_type type, const uint32_t index, uint32_t *capacity_mAh, uint32_t *capacity_mWh, uint32_t *count) { struct dirent *entry; char *file; char *field; uint32_t i = 0; switch (type) { case FWTS_BATTERY_DESIGN_CAPACITY: file = "info"; field = "design capacity"; break; case FWTS_BATTERY_REMAINING_CAPACITY: file = "state"; field = "remaining capacity"; break; default: return FWTS_ERROR; } do { entry = readdir(dir); if (entry && strlen(entry->d_name) > 2) { char path[PATH_MAX]; int val; FILE *fp; bool match = fwts_battery_match(index, i); i++; if (!match) continue; fwts_battery_path(path, sizeof(path), FWTS_PROC_ACPI_BATTERY, entry->d_name, file); if ((fp = fopen(path, "r")) == NULL) { fwts_log_info(fw, "Battery %s present but undersupported - no state present.", entry->d_name); } else { char buffer[4096]; while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { if (strstr(buffer, field) && strlen(buffer) > 25) { char units[64]; sscanf(buffer+25, "%d %63s", &val, units); if (strncmp(units, "mAh",3) == 0) { *capacity_mAh += val; (*count)++; } if (strncmp(units, "mWh",3) == 0) { *capacity_mWh += val; (*count)++; } break; } } (void)fclose(fp); } } } while (entry); return FWTS_OK; } static int fwts_battery_get_count_sys_fs(DIR *dir, uint32_t *count) { struct dirent *entry; char path[PATH_MAX]; char *data; do { entry = readdir(dir); if (entry && strlen(entry->d_name) > 2) { /* Check that type field matches the expected type */ fwts_battery_path(path, sizeof(path), FWTS_SYS_CLASS_POWER_SUPPLY, entry->d_name, "type"); if ((data = fwts_get(path)) != NULL) { if (strstr(data, "Battery") != NULL) (*count)++; free(data); } } } while (entry); return FWTS_OK; } static int fwts_battery_get_count_proc_fs(DIR *dir, uint32_t *count) { struct dirent *entry; do { entry = readdir(dir); if (entry && strlen(entry->d_name) > 2) (*count)++; } while (entry); return FWTS_OK; } static int fwts_battery_get_name_sys_fs( DIR *dir, const uint32_t index, char *name, const size_t name_len) { struct dirent *entry; char path[PATH_MAX]; char *data; uint32_t i = 0; do { entry = readdir(dir); if (entry && strlen(entry->d_name) > 2) { bool match; /* Check that type field matches the expected type */ fwts_battery_path(path, sizeof(path), FWTS_SYS_CLASS_POWER_SUPPLY, entry->d_name, "type"); if ((data = fwts_get(path)) != NULL) { bool mismatch = (strstr(data, "Battery") == NULL); free(data); if (mismatch) continue; /* type don't match, skip this entry */ } else continue; /* can't check type, skip this entry */ match = fwts_battery_match(index, i); i++; if (!match) continue; strlcpy(name, entry->d_name, name_len); return FWTS_OK; } } while (entry); return FWTS_ERROR; } static int fwts_battery_get_name_proc_fs( DIR *dir, const uint32_t index, char *name, const size_t name_len) { struct dirent *entry; uint32_t i = 0; do { entry = readdir(dir); if (entry && strlen(entry->d_name) > 2) { bool match = fwts_battery_match(index, i); i++; if (!match) continue; strlcpy(name, entry->d_name, name_len); return FWTS_OK; } } while (entry); return FWTS_ERROR; } static int fwts_battery_get_cycle_count_sys_fs( fwts_framework *fw, DIR *dir, const uint32_t index, uint32_t *cycle_count) { struct dirent *entry; char *field_cycle_count; size_t field_cycle_count_len; uint32_t i = 0; *cycle_count = 0; field_cycle_count = "POWER_SUPPLY_CYCLE_COUNT="; field_cycle_count_len = strlen(field_cycle_count); do { entry = readdir(dir); if (entry && strlen(entry->d_name) > 2) { char path[PATH_MAX]; char *data; int val; FILE *fp; bool match; /* Check that type field matches the expected type */ fwts_battery_path(path, sizeof(path), FWTS_SYS_CLASS_POWER_SUPPLY, entry->d_name, "type"); if ((data = fwts_get(path)) != NULL) { bool mismatch = (strstr(data, "Battery") == NULL); free(data); if (mismatch) continue; /* type don't match, skip this entry */ } else continue; /* can't check type, skip this entry */ match = fwts_battery_match(index, i); i++; if (!match) continue; snprintf(path, sizeof(path), "%s/%s/uevent", FWTS_SYS_CLASS_POWER_SUPPLY, entry->d_name); if ((fp = fopen(path, "r")) == NULL) { fwts_log_info(fw, "Battery %s present but undersupported - no state present.", entry->d_name); } else { char buffer[4096]; while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { if (strstr(buffer, field_cycle_count) && strlen(buffer) > field_cycle_count_len) { sscanf(buffer+field_cycle_count_len, "%d", &val); *cycle_count = val; } } (void)fclose(fp); } } } while (entry); return FWTS_OK; } static int fwts_battery_get_cycle_count_proc_fs( fwts_framework *fw, DIR *dir, const uint32_t index, uint32_t *cycle_count) { struct dirent *entry; char *file; char *field; uint32_t i = 0; *cycle_count = 0; file = "info"; field = "cycle count"; do { entry = readdir(dir); if (entry && strlen(entry->d_name) > 2) { char path[PATH_MAX]; int val; FILE *fp; bool match = fwts_battery_match(index, i); i++; if (!match) continue; fwts_battery_path(path, sizeof(path), FWTS_PROC_ACPI_BATTERY, entry->d_name, file); if ((fp = fopen(path, "r")) == NULL) { fwts_log_info(fw, "Battery %s present but undersupported - no state present.", entry->d_name); } else { char buffer[4096]; while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { if (strstr(buffer, field) && strlen(buffer) > 25) { sscanf(buffer+25, "%d", &val); *cycle_count = val; break; } } (void)fclose(fp); } } } while (entry); return FWTS_OK; } static int fwts_battery_set_trip_point_sys_fs( fwts_framework *fw, DIR *dir, const uint32_t index, const uint32_t trip_point) { struct dirent *entry; uint32_t i = 0; do { entry = readdir(dir); if (entry && strlen(entry->d_name) > 2) { char path[PATH_MAX]; char *data; FILE *fp; bool match; /* Check that type field matches the expected type */ fwts_battery_path(path, sizeof(path), FWTS_SYS_CLASS_POWER_SUPPLY, entry->d_name, "type"); if ((data = fwts_get(path)) != NULL) { bool mismatch = (strstr(data, "Battery") == NULL); free(data); if (mismatch) continue; /* type don't match, skip this entry */ } else continue; /* can't check type, skip this entry */ match = fwts_battery_match(index, i); i++; if (!match) continue; snprintf(path, sizeof(path), "%s/%s/alarm", FWTS_SYS_CLASS_POWER_SUPPLY, entry->d_name); if ((fp = fopen(path, "rw+")) == NULL) { fwts_log_info(fw, "Battery %s present but undersupported - no state present.", entry->d_name); } else { char buffer[512]; sprintf(buffer, "%" PRIu32, trip_point * 1000); fputs(buffer, fp); (void)fclose(fp); } } } while (entry); return FWTS_OK; } static int fwts_battery_get_trip_point_sys_fs( fwts_framework *fw, DIR *dir, const uint32_t index, uint32_t *trip_point) { struct dirent *entry; uint32_t i = 0; *trip_point = 0; do { entry = readdir(dir); if (entry && strlen(entry->d_name) > 2) { char path[PATH_MAX]; char *data; int val; FILE *fp; bool match; /* Check that type field matches the expected type */ fwts_battery_path(path, sizeof(path), FWTS_SYS_CLASS_POWER_SUPPLY, entry->d_name, "type"); if ((data = fwts_get(path)) != NULL) { bool mismatch = (strstr(data, "Battery") == NULL); free(data); if (mismatch) continue; /* type don't match, skip this entry */ } else continue; /* can't check type, skip this entry */ match = fwts_battery_match(index, i); i++; if (!match) continue; snprintf(path, sizeof(path), "%s/%s/alarm", FWTS_SYS_CLASS_POWER_SUPPLY, entry->d_name); if ((fp = fopen(path, "r")) == NULL) { fwts_log_info(fw, "Battery %s present but undersupported - no state present.", entry->d_name); } else { char buffer[4096]; while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { sscanf(buffer, "%d", &val); *trip_point = val / 1000; } (void)fclose(fp); } } } while (entry); return FWTS_OK; } static int fwts_battery_set_trip_point_proc_fs( fwts_framework *fw, DIR *dir, const uint32_t index, const uint32_t trip_point) { struct dirent *entry; uint32_t i = 0; do { entry = readdir(dir); if (entry && strlen(entry->d_name) > 2) { char path[PATH_MAX]; FILE *fp; bool match = fwts_battery_match(index, i); i++; if (!match) continue; fwts_battery_path(path, sizeof(path), FWTS_PROC_ACPI_BATTERY, entry->d_name, "alarm"); if ((fp = fopen(path, "rw+")) == NULL) { fwts_log_info(fw, "Battery %s present but undersupported - no state present.", entry->d_name); } else { char buffer[512]; sprintf(buffer, "%" PRIu32 , trip_point); fputs(buffer, fp); (void)fclose(fp); } } } while (entry); return FWTS_OK; } static int fwts_battery_get_trip_point_proc_fs( fwts_framework *fw, DIR *dir, const uint32_t index, uint32_t *trip_point) { struct dirent *entry; uint32_t i = 0; *trip_point = 0; do { entry = readdir(dir); if (entry && strlen(entry->d_name) > 2) { char path[PATH_MAX]; int val; FILE *fp; bool match = fwts_battery_match(index, i); i++; if (!match) continue; fwts_battery_path(path, sizeof(path), FWTS_PROC_ACPI_BATTERY, entry->d_name, "alarm"); if ((fp = fopen(path, "r")) == NULL) { fwts_log_info(fw, "Battery %s present but undersupported - no state present.", entry->d_name); } else { char buffer[4096]; while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { if (strstr(buffer, "alarm:") && strlen(buffer) > 25) { sscanf(buffer + 25, "%" SCNu32, &val); *trip_point = val; break; } } (void)fclose(fp); } } } while (entry); return FWTS_OK; } int fwts_battery_set_trip_point( fwts_framework *fw, const uint32_t index, const uint32_t trip_point) { int ret; DIR *dir; if ((dir = opendir(FWTS_SYS_CLASS_POWER_SUPPLY)) != NULL) { ret = fwts_battery_set_trip_point_sys_fs(fw, dir, index, trip_point); (void)closedir(dir); } else if ((dir = opendir(FWTS_PROC_ACPI_BATTERY)) != NULL) { ret = fwts_battery_set_trip_point_proc_fs(fw, dir, index, trip_point); (void)closedir(dir); } else { return FWTS_ERROR; } return ret; } int fwts_battery_get_trip_point( fwts_framework *fw, const uint32_t index, uint32_t *trip_point) { int ret; DIR *dir; if ((dir = opendir(FWTS_SYS_CLASS_POWER_SUPPLY)) != NULL) { ret = fwts_battery_get_trip_point_sys_fs(fw, dir, index, trip_point); (void)closedir(dir); } else if ((dir = opendir(FWTS_PROC_ACPI_BATTERY)) != NULL) { ret = fwts_battery_get_trip_point_proc_fs(fw, dir, index, trip_point); (void)closedir(dir); } else { return FWTS_ERROR; } return ret; } bool fwts_battery_check_trip_point_support( fwts_framework *fw, const uint32_t index) { uint32_t trip_point; if (!(fwts_battery_get_trip_point(fw, index, &trip_point) == FWTS_OK)) return false; if (trip_point == 0) return false; return true; } int fwts_battery_get_cycle_count( fwts_framework *fw, const uint32_t index, uint32_t *cycle_count) { int ret; DIR *dir; if ((dir = opendir(FWTS_SYS_CLASS_POWER_SUPPLY)) != NULL) { ret = fwts_battery_get_cycle_count_sys_fs(fw, dir, index, cycle_count); (void)closedir(dir); } else if ((dir = opendir(FWTS_PROC_ACPI_BATTERY)) != NULL) { ret = fwts_battery_get_cycle_count_proc_fs(fw, dir, index, cycle_count); (void)closedir(dir); } else { return FWTS_ERROR; } return ret; } int fwts_battery_get_name( fwts_framework *fw, const uint32_t index, char *name, const size_t name_len) { int ret; DIR *dir; FWTS_UNUSED(fw); (void)memset(name, 0, name_len); if ((dir = opendir(FWTS_SYS_CLASS_POWER_SUPPLY)) != NULL) { ret = fwts_battery_get_name_sys_fs(dir, index, name, name_len); (void)closedir(dir); } else if ((dir = opendir(FWTS_PROC_ACPI_BATTERY)) != NULL) { ret = fwts_battery_get_name_proc_fs(dir, index, name, name_len); (void)closedir(dir); } else { return FWTS_ERROR; } return ret; } int fwts_battery_get_count(fwts_framework *fw, uint32_t *count) { *count = 0; int ret; DIR *dir; FWTS_UNUSED(fw); if ((dir = opendir(FWTS_SYS_CLASS_POWER_SUPPLY)) != NULL) { ret = fwts_battery_get_count_sys_fs(dir, count); (void)closedir(dir); } else if ((dir = opendir(FWTS_PROC_ACPI_BATTERY)) != NULL) { ret = fwts_battery_get_count_proc_fs(dir, count); (void)closedir(dir); } else { return FWTS_ERROR; } return ret; } int fwts_battery_get_capacity(fwts_framework *fw, const fwts_battery_type type, const uint32_t index, uint32_t *capacity_mAh, uint32_t *capacity_mWh) { int ret; DIR *dir; uint32_t n = 0; *capacity_mAh = 0; *capacity_mWh = 0; if ((dir = opendir(FWTS_SYS_CLASS_POWER_SUPPLY)) != NULL) { ret = fwts_battery_get_capacity_sys_fs(fw, dir, type, index, capacity_mAh, capacity_mWh, &n); (void)closedir(dir); } else if ((dir = opendir(FWTS_PROC_ACPI_BATTERY)) != NULL) { ret = fwts_battery_get_capacity_proc_fs(fw, dir, type, index, capacity_mAh, capacity_mWh, &n); (void)closedir(dir); } else { fwts_log_info(fw, "No battery information present: cannot test."); return FWTS_ERROR; } if ((ret == FWTS_ERROR) || (n == 0)) { fwts_log_info(fw, "No valid battery information present: cannot test."); return FWTS_ERROR; } return FWTS_OK; } src/lib/src/fwts_binpaths.c000066400000000000000000000025611465205512700162340ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include "fwts_types.h" #include "fwts_framework.h" #define FLAGS (S_IROTH | S_IXOTH) /* * fwts_check_executable() * check if given file is an executable */ int fwts_check_executable(fwts_framework *fw, const char *path, const char *name) { struct stat statbuf; if (stat(path, &statbuf)) { fwts_log_error(fw, "ERROR: Cannot find %s, make sure %s is installed.", path, name); return FWTS_ERROR; } if ((statbuf.st_mode & FLAGS) != FLAGS) { fwts_log_error(fw, "ERROR: Cannot read/execute %s.", path); return FWTS_ERROR; } return FWTS_OK; } src/lib/src/fwts_button.c000066400000000000000000000070641465205512700157420ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #include #include #include #include #include #include #include #include #define FWTS_PROC_ACPI_BUTTON "/proc/acpi/button" static inline void fwts_button_path( char *path, const size_t path_len, const char *button_dir, const char *name, const char *str) { (void)strlcpy(path, button_dir, path_len); (void)strlcat(path, "/", path_len); (void)strlcat(path, name, path_len); (void)strlcat(path, "/", path_len); (void)strlcat(path, str, path_len); } /* * fwts_button_match_state_proc() * find matching button state and keep count of matching * any non-matching states found, via proc interface */ static int fwts_button_match_state_proc( const uint32_t button, uint32_t *matched, uint32_t *not_matched) { DIR *dir; struct dirent *entry; char *acpi_button_lid = FWTS_PROC_ACPI_BUTTON "/lid"; char *acpi_button_power = FWTS_PROC_ACPI_BUTTON "/power"; char *button_dir; char *field; char *match; switch (button) { case FWTS_BUTTON_LID_ANY: button_dir = acpi_button_lid; field = "state"; match = ""; break; case FWTS_BUTTON_LID_OPENED: button_dir = acpi_button_lid; field = "state"; match = "open"; break; case FWTS_BUTTON_LID_CLOSED: button_dir = acpi_button_lid; field = "state"; match = "close"; break; case FWTS_BUTTON_POWER_EXISTS: button_dir = acpi_button_power; field = "info"; match = "Power Button"; break; default: return FWTS_ERROR; } if ((dir = opendir(button_dir)) == NULL) return FWTS_ERROR; do { entry = readdir(dir); if (entry && strlen(entry->d_name) > 2) { char path[PATH_MAX]; char *data; fwts_button_path(path, sizeof(path), button_dir, entry->d_name, field); if ((data = fwts_get(path)) != NULL) { if (strstr(data, match)) (*matched)++; else (*not_matched)++; free(data); } } } while (entry); (void)closedir(dir); return FWTS_OK; } /* * fwts_button_match_state() * find matching button state and keep count of matching * any non-matching states found * * The button state can be: * FWTS_BUTTON_LID_ANY - match any LID button state * FWTS_BUTTON_LID_OPENED - match any LID buttons that are open * FWTS_BUTTON_LID_CLOSED - match any LID buttons that are closed * FWTS_BUTTON_POWER_EXISTS - match any power putton states * * matched is a count of any button states that match, and not_matched * is a count of any button states that don't match. */ int fwts_button_match_state( fwts_framework *fw, const uint32_t button, uint32_t *matched, uint32_t *not_matched) { *matched = 0; *not_matched = 0; FWTS_UNUSED(fw); if (access(FWTS_PROC_ACPI_BUTTON, R_OK) == 0) return fwts_button_match_state_proc(button, matched, not_matched); return FWTS_ERROR; } src/lib/src/fwts_checkeuid.c000066400000000000000000000022401465205512700163420ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include "fwts.h" /* * fwts_check_root_euid() * Check if user has privileges to access ports, memory, etc */ int fwts_check_root_euid(fwts_framework *fw, const bool warn) { if (geteuid() != 0) { if (warn) fwts_log_error(fw, "Must be run as root or sudo to be able to read system information."); return FWTS_ERROR; } return FWTS_OK; } src/lib/src/fwts_checksum.c000066400000000000000000000017751465205512700162340ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" /* * fwts_checksum() * checksum a uint8_t * buffer */ uint8_t fwts_checksum(const uint8_t *data, const size_t length) { size_t i; uint8_t checksum = 0; for (i = 0; i < length; i++) checksum += *data++; return checksum; } src/lib/src/fwts_clog.c000066400000000000000000000063761465205512700153600ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Copyright (C) 2018-2021 9elements Cyber Security * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" /* * coreboot logfile exposed by Google firmware module * Kernel option necessary (GOOGLE_MEMCONSOLE_COREBOOT=m/y) */ #define GOOGLE_MEMCONSOLE_COREBOOT_PATH "/sys/firmware/log" /* * clog pattern matching strings data file, data stored in json format */ #define CLOG_DATA_JSON_FILE "clog.json" /* * match unique strings in the coreboot log */ #define UNIQUE_CLOG_LABEL "Clog" /* * coreboot dmi entry */ #define COREBOOT_BIOS_VENDOR "coreboot" /* * free coreboot log list */ void fwts_clog_free(fwts_list *clog) { fwts_log_free(clog); } bool fwts_clog_available(fwts_framework *fw) { bool coreboot_tag = false; char *vendor = fwts_get("/sys/class/dmi/id/bios_vendor"); if (vendor) { if (strstr(vendor, COREBOOT_BIOS_VENDOR)) coreboot_tag = true; free(vendor); } if (fw->clog || coreboot_tag) return true; return false; } /* * read coreboot log and return as list of lines */ fwts_list *fwts_clog_read(fwts_framework *fw) { fwts_list *list; if (fw->clog && (list = fwts_file_open_and_read(fw->clog))) return list; if ((list = fwts_file_open_and_read(GOOGLE_MEMCONSOLE_COREBOOT_PATH)) != NULL) return list; if ((list = fwts_coreboot_cbmem_log()) != NULL) return list; return NULL; } int fwts_clog_scan(fwts_framework *fw, fwts_list *clog, fwts_clog_scan_func scan_func, fwts_clog_progress_func progress_func, void *private, int *match) { return fwts_log_scan(fw, clog, scan_func, progress_func, private, match, false); } void fwts_clog_scan_patterns(fwts_framework *fw, char *line, int repeated, char *prevline, void *private, int *errors) { static char *advice = "This is a bug picked up by coreboot, but as yet, the " "firmware test suite has no diagnostic advice for this particular problem."; fwts_log_scan_patterns(fw, line, repeated, prevline, private, errors, "coreboot", advice); } static int fwts_clog_check(fwts_framework *fw, const char *table, fwts_clog_progress_func progress, fwts_list *clog, int *errors) { char json_data_path[PATH_MAX]; snprintf(json_data_path, sizeof(json_data_path), "%s/%s", fw->json_data_path, CLOG_DATA_JSON_FILE); return fwts_log_check(fw, table, fwts_clog_scan_patterns, progress, clog, errors, json_data_path, UNIQUE_CLOG_LABEL, true); } int fwts_clog_firmware_check( fwts_framework *fw, fwts_clog_progress_func progress, fwts_list *clog, int *errors) { return fwts_clog_check(fw, "firmware_error_warning_patterns", progress, clog, errors); } src/lib/src/fwts_cmos.c000066400000000000000000000034501465205512700153630ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include /* * fwts_cmos_read() * read a byte from cmos memory at a given offset */ int fwts_cmos_read(const uint8_t offset, uint8_t *value) { int ret = FWTS_OK; *value = ~0; /* Default in case of error */ if (ioperm(0x70, 2, 1) < 0) return FWTS_ERROR; if (ioperm(0x80, 1, 1) < 0) { ret = FWTS_ERROR; goto tidy0x70; } /* Want to disable interrupts */ if (iopl(3) < 0) { ret = FWTS_ERROR; goto tidy0x80; } /* specify offset to read */ if (fwts_outb(offset, 0x70) != FWTS_OK) { ret = FWTS_ERROR; goto tidy; } /* Small Delay */ if (fwts_outb(0, 0x80) != FWTS_OK) { ret = FWTS_ERROR; goto tidy; } /* get the CMOS value */ if (fwts_inb(0x71, value) != FWTS_OK) ret = FWTS_ERROR; tidy: (void)iopl(0); tidy0x80: (void)ioperm(0x80, 1, 0); tidy0x70: (void)ioperm(0x70, 2, 0); return ret; } #else int fwts_cmos_read(const uint8_t offset, uint8_t *value) { FWTS_UNUSED(offset); *value = ~0; /* Fake a failed read */ return FWTS_ERROR; } #endif src/lib/src/fwts_coreboot.c000066400000000000000000000023721465205512700162400ustar00rootroot00000000000000 /* * Copyright (C) 2010-2024 Canonical * Copyright (C) 2017-2021 Google Inc. * Copyright (C) 2018-2021 9elements Cyber Security * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL fwts_list* fwts_coreboot_cbmem_log(void) { fwts_list *console_list; char *console; console = fwts_coreboot_cbmem_console_dump(); if (!console) return NULL; console_list = fwts_list_from_text(console); free(console); return console_list; } #else fwts_list* fwts_coreboot_cbmem_log(void) { /* * TODO: add arm platform support */ return NULL; } #endif src/lib/src/fwts_coreboot_cbmem.c000066400000000000000000000177551465205512700174160ustar00rootroot00000000000000 /* * Copyright (C) 2010-2024 Canonical * Copyright (C) 2017-2021 Google Inc. * Copyright (C) 2018-2021 9elements Cyber Security * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include #include #include #include #include #define CURSOR_MASK ((1UL << 28) - 1) #define OVERFLOW (1UL << 31) #define LB_TAG_CBMEM_CONSOLE 0x0017 #define LB_TAG_FORWARD 0x0011 struct lb_record { uint32_t tag; /* tag ID */ uint32_t size; /* size of record (in bytes) */ } __attribute__ ((packed)); struct lb_header { uint8_t signature[4]; /* LBIO */ uint32_t header_bytes; uint32_t header_checksum; uint32_t table_bytes; uint32_t table_checksum; uint32_t table_entries; } __attribute__ ((packed)); struct lb_forward { uint32_t tag; uint32_t size; uint64_t forward; } __attribute__ ((packed)); struct lb_cbmem_ref { uint32_t tag; uint32_t size; uint64_t cbmem_addr; } __attribute__ ((packed)); struct cbmem_console { uint32_t size; uint32_t cursor; uint8_t body[0]; } __attribute__ ((packed)); /* Return < 0 on error, 0 on success. */ static int parse_cbtable(const off_t address, const size_t table_size, off_t *cbmen_console_addr); static void *map_memory(const off_t addr, const size_t size) { void *mem; void *phy; phy = fwts_mmap(addr, size); if (phy == FWTS_MAP_FAILED) return NULL; mem = malloc(size); if (!mem) { fwts_munmap(phy, size); return NULL; } memcpy(mem, phy, size); fwts_munmap(phy, size); return mem; } /* * calculate ip checksum (16 bit quantities) on a passed in buffer. In case * the buffer length is odd last byte is excluded from the calculation */ static uint16_t ipchcksum(const void *addr, unsigned size) { const uint16_t *p = addr; unsigned i, n = size / 2; /* don't expect odd sized blocks */ uint32_t sum = 0; for (i = 0; i < n; i++) sum += p[i]; sum = (sum >> 16) + (sum & 0xffff); sum += (sum >> 16); sum = ~sum & 0xffff; return (uint16_t) sum; } /* * This is a work-around for a nasty problem introduced by initially having * pointer sized entries in the lb_cbmem_ref structures. This caused problems * on 64bit x86 systems because coreboot is 32bit on those systems. * When the problem was found, it was corrected, but there are a lot of * systems out there with a firmware that does not produce the right * lb_cbmem_ref structure. Hence we try to autocorrect this issue here. */ static struct lb_cbmem_ref parse_cbmem_ref(const struct lb_cbmem_ref *cbmem_ref) { struct lb_cbmem_ref ret; ret = *cbmem_ref; if (cbmem_ref->size < sizeof(*cbmem_ref)) ret.cbmem_addr = (uint32_t)ret.cbmem_addr; return ret; } /* * Return < 0 on error, 0 on success, 1 if forwarding table entry found. */ static int parse_cbtable_entries( const void *lbtable, const size_t table_size, off_t *cbmem_console_addr) { size_t i; int forwarding_table_found = 0; const struct lb_record *lbr_p; for (i = 0; i < table_size; i += lbr_p->size) { lbr_p = (struct lb_record*)((char *)lbtable + i); switch (lbr_p->tag) { case LB_TAG_CBMEM_CONSOLE: { *cbmem_console_addr = (off_t)parse_cbmem_ref((const struct lb_cbmem_ref *) lbr_p).cbmem_addr; if (*cbmem_console_addr) return 0; continue; } case LB_TAG_FORWARD: { int ret; /* * This is a forwarding entry - repeat the * search at the new address. */ struct lb_forward lbf_p = *(const struct lb_forward *) lbr_p; ret = parse_cbtable(lbf_p.forward, 0, cbmem_console_addr); /* Assume the forwarding entry is valid. If this fails * then there's a total failure. */ if (ret < 0) return -1; forwarding_table_found = 1; } default: break; } } return forwarding_table_found; } /* * Return < 0 on error, 0 on success. */ static int parse_cbtable( const off_t address, const size_t table_size, off_t *cbmem_console_table) { void *buf; size_t req_size; size_t i; req_size = table_size; /* Default to 4 KiB search space. */ if (req_size == 0) req_size = 4 * 1024; buf = map_memory(address, req_size); if (!buf) return -1; /* look at every 16 bytes */ for (i = 0; i <= req_size - sizeof(struct lb_header); i += 16) { int ret; const struct lb_header *lbh = (struct lb_header *)((char *)buf + i); void *map; if (memcmp(lbh->signature, "LBIO", sizeof(lbh->signature)) || !lbh->header_bytes || ipchcksum(lbh, sizeof(*lbh))) { continue; } /* Map in the whole table to parse. */ if (!(map = map_memory(address + i + lbh->header_bytes, lbh->table_bytes))) { continue; } if (ipchcksum(map, lbh->table_bytes) != lbh->table_checksum) { free(map); continue; } ret = parse_cbtable_entries(map, lbh->table_bytes, cbmem_console_table); /* Table parsing failed. */ if (ret < 0) { free(map); continue; } free(buf); free(map); return 0; } free(buf); return -1; } static ssize_t memory_read_from_buffer( void *to, size_t count, size_t *ppos, const void *from, const size_t available) { size_t pos = *ppos; if (pos >= available) return 0; if (count > available - pos) count = available - pos; memcpy(to, (char *)from + pos, count); *ppos = pos + count; return count; } static ssize_t memconsole_coreboot_read( struct cbmem_console *con, char *buf, size_t pos, size_t count) { uint32_t cursor = con->cursor & CURSOR_MASK; uint32_t flags = con->cursor & ~CURSOR_MASK; /* describes ring buffer segments in logical order */ struct seg { uint32_t phys; /* physical offset from start of mem buffer */ uint32_t len; /* length of segment */ } seg[2] = { { 0, 0 }, { 0, 0 } }; size_t done = 0; unsigned int i; if (flags & OVERFLOW) { if (cursor > count) /* Shouldn't really happen, but... */ cursor = 0; seg[0] = (struct seg){.phys = cursor, .len = count - cursor}; seg[1] = (struct seg){.phys = 0, .len = cursor}; } else { seg[0] = (struct seg){.phys = 0, .len = FWTS_MIN(cursor, count)}; } for (i = 0; i < FWTS_ARRAY_SIZE(seg) && count > done; i++) { done += memory_read_from_buffer(buf + done, count - done, &pos, con->body + seg[i].phys, seg[i].len); pos -= seg[i].len; } return done; } char *fwts_coreboot_cbmem_console_dump(void) { unsigned int j; off_t cbmem_console_addr = (off_t)-1; unsigned long long possible_base_addresses[] = { 0, 0xf0000 }; struct cbmem_console *console_p; struct cbmem_console *console; char *coreboot_log; ssize_t count; /* Find and parse coreboot table */ for (j = 0; j < FWTS_ARRAY_SIZE(possible_base_addresses); j++) { if (!parse_cbtable(possible_base_addresses[j], 0, &cbmem_console_addr)) break; } if (cbmem_console_addr == (off_t)-1) return NULL; console_p = map_memory(cbmem_console_addr, sizeof(*console_p)); if (console_p == NULL) return NULL; console = map_memory(cbmem_console_addr, console_p->size + sizeof(*console)); if (console == NULL) { free(console_p); return NULL; } free(console_p); coreboot_log = malloc(console->size + 1); if (!coreboot_log) { free(console); return NULL; } coreboot_log[console->size] = '\0'; count = memconsole_coreboot_read(console, coreboot_log, 0, console->size); free(console); if (count == 0) { free(coreboot_log); return NULL; } return coreboot_log; } #endif src/lib/src/fwts_cpu.c000066400000000000000000000272731465205512700152220ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define _FILE_OFFSET_BITS 64 #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "fwts_types.h" #include "fwts_cpu.h" #include "fwts_pipeio.h" static int fwts_cpu_num; static pid_t *fwts_cpu_pids; #define MSR_AMD64_OSVW_ID_LENGTH 0xc0010140 #define MSR_AMD64_OSVW_STATUS 0xc0010141 /* * fwts_cpu_readmsr() * Read a given msr on a specified CPU */ int fwts_cpu_readmsr( fwts_framework *fw, const int cpu, const uint32_t reg, uint64_t *val) { char buffer[PATH_MAX]; uint64_t value = 0; int fd; int ret; snprintf(buffer, sizeof(buffer), "/dev/cpu/%d/msr", cpu); if ((fd = open(buffer, O_RDONLY)) < 0) { bool loaded = false; /* * msr not there, so force a load of the msr * module and retry */ if (fwts_module_load(fw, "msr") != FWTS_OK) return FWTS_ERROR; if (fwts_module_loaded(fw, "msr", &loaded) != FWTS_OK) return FWTS_ERROR; if (!loaded) return FWTS_ERROR; if ((fd = open(buffer, O_RDONLY)) < 0) return FWTS_ERROR; /* Really failed */ } ret = pread(fd, &value, 8, reg); (void)close(fd); *val = value; if (ret < 0) return FWTS_ERROR; return FWTS_OK; } /* * fwts_cpu_free_info() * free CPU information */ void fwts_cpu_free_info(fwts_cpuinfo_x86 *cpu) { if (cpu) { free(cpu->vendor_id); free(cpu->model_name); free(cpu->flags); } free(cpu); } /* * fwts_cpu_get_info() * get CPU information for specified CPU. * Specify the CPU as -1 to query the first online CPU. */ fwts_cpuinfo_x86 *fwts_cpu_get_info(int which_cpu) { FILE *fp; char buffer[1024]; fwts_cpuinfo_x86 *cpu; int cpu_num = -1; bool found = false; if ((cpu = (fwts_cpuinfo_x86*)calloc(1, sizeof(fwts_cpuinfo_x86))) == NULL) return NULL; if ((fp = fopen("/proc/cpuinfo", "r")) == NULL) { free(cpu); return NULL; } while (fgets(buffer, sizeof(buffer), fp) != NULL) { char *ptr = strstr(buffer, ":"); if (ptr) ptr += 2; else continue; buffer[strlen(buffer)-1] = '\0'; if (!strncmp(buffer, "processor", 9)) { sscanf(ptr, "%d", &cpu_num); if (which_cpu == -1) which_cpu = cpu_num; if (cpu_num > which_cpu) break; continue; } else { if (cpu_num != which_cpu) continue; } found = true; if (!cpu->vendor_id && !strncmp(buffer, "vendor_id", 9)) { cpu->vendor_id = strdup(ptr); continue; } if (!strncmp(buffer, "cpu family",10)) { sscanf(ptr, "%d", &cpu->x86); continue; } if (!cpu->model_name && !strncmp(buffer, "model name", 10)) { cpu->model_name = strdup(ptr); continue; } if (!strncmp(buffer, "model", 5)) { sscanf(ptr, "%d", &cpu->x86_model); continue; } if (!strncmp(buffer, "stepping", 8)) { sscanf(ptr, "%d", &cpu->stepping); continue; } if (!cpu->flags && !strncmp(buffer, "flags", 5)) { cpu->flags = strdup(ptr); continue; } } (void)fclose(fp); if (!found) { free(cpu); cpu = NULL; } return cpu; } static int fwts_cpu_matches_vendor_id(const char *vendor_id, bool *matches) { fwts_cpuinfo_x86 *cpu; if ((cpu = fwts_cpu_get_info(-1)) == NULL) return FWTS_ERROR; if (cpu->vendor_id == NULL) { fwts_cpu_free_info(cpu); return FWTS_ERROR; } *matches = (strstr(cpu->vendor_id, vendor_id) != NULL); fwts_cpu_free_info(cpu); return FWTS_OK; } int fwts_cpu_is_Intel(bool *is_intel) { return fwts_cpu_matches_vendor_id("Intel", is_intel); } int fwts_cpu_is_AMD(bool *is_amd) { return fwts_cpu_matches_vendor_id("AuthenticAMD", is_amd); } int fwts_cpu_is_Hygon(bool *is_hygon) { return fwts_cpu_matches_vendor_id("HygonGenuine", is_hygon); } /* * fwts_cpu_has_c1e() * check if CPU has C1E bit */ fwts_bool fwts_cpu_has_c1e(void) { #if FWTS_ARCH_X86 uint64_t val; fwts_bool rc = FWTS_FALSE; fwts_cpuinfo_x86 *cpu; if ((cpu = fwts_cpu_get_info(-1)) == NULL) return FWTS_BOOL_ERROR; if (cpu->flags == NULL) { rc FWTS_BOOL_ERROR; goto free_info; } if (cpu->vendor_id == NULL) { rc FWTS_BOOL_ERROR; goto free_info; } /* no C1E on AMD and Hygon */ if (strstr(cpu->vendor_id, "AuthenticAMD") == NULL && strstr(cpu->vendor_id, "HygonGenuine") == NULL ) { rc = FWTS_FALSE; goto free_info; } /* Family 0x0f models < rev F do not have C1E */ if (cpu->x86 == 0x0F && cpu->x86_model >= 0x40) { rc = FWTS_FALSE; goto free_info; } if (cpu->x86 == 0x10) { /* * check OSVW bit for CPUs that are not affected * by erratum #400 */ if (strstr(cpu->flags, "osvw") != NULL) { if (fwts_cpu_readmsr(0, MSR_AMD64_OSVW_ID_LENGTH, &val) != FWTS_OK) { rc = FWTS_BOOL_ERROR; goto free_info; } if (val >= 2) { if (fwts_cpu_readmsr(0, MSR_AMD64_OSVW_STATUS, &val) != FWTS_OK) { rc = FWTS_BOOL_ERROR; goto free_info; } if (!(val & 2)) { rc = FWTS_FALSE; goto free_info; } } } rc = FWTS_TRUE; } free_info: fwts_cpu_free_info(cpu); return rc; #else return FWTS_FALSE; #endif } /* * fwts_cpu_enumerate() * enumerate all CPUs */ int fwts_cpu_enumerate(void) { int cpus = sysconf(_SC_NPROCESSORS_CONF); if (cpus < 0) return FWTS_ERROR; return cpus; } /* * fwts_cpu_consume_kill() * kill CPU consumer processes as created by fwts_cpu_consume_cycles() */ static void fwts_cpu_consume_kill(void) { int i; siginfo_t info; for (i = 0; i < fwts_cpu_num; i++) { if (fwts_cpu_pids[i] != 0) { kill(fwts_cpu_pids[i], SIGUSR1); waitid(P_PID, fwts_cpu_pids[i], &info, WEXITED); } } } /* * fwts_cpu_consume_sighandler() * CPU consumer processes signal handler */ static void fwts_cpu_consume_sighandler(int dummy) { FWTS_UNUSED(dummy); _exit(0); } /* * fwts_cpu_sigint_handler() * kill all CPU consumer processes and die */ static void fwts_cpu_sigint_handler(int dummy) { FWTS_UNUSED(dummy); fwts_cpu_consume_kill(); _exit(0); } /* * fwts_cpu_burn_cycles() * burn some CPU cycles */ static void fwts_cpu_burn_cycles(void) { double A = 1.234567; double B = 3.121213; int i; for (i = 0; i < 100; i++) { A = A * B; B = A * A; A = A - B + sqrt(A); A = A * B; B = A * A; A = A - B + sqrt(A); A = A * B; B = A * A; A = A - B + sqrt(A); A = A * B; B = A * A; A = A - B + sqrt(A); } } static int perf_setup_counter(int cpu) { struct perf_event_attr attr; int fd; memset(&attr, 0, sizeof(attr)); attr.type = PERF_TYPE_HARDWARE; attr.config = PERF_COUNT_HW_CPU_CYCLES; attr.disabled = 1; attr.size = sizeof(attr); fd = syscall(__NR_perf_event_open, &attr, -1, cpu, -1, 0); return fd; } static int perf_start_counter(int fd) { int rc; rc = ioctl(fd, PERF_EVENT_IOC_ENABLE); return (rc == 0) ? FWTS_OK : FWTS_ERROR; } static int perf_stop_counter(int fd) { int rc; rc = ioctl(fd, PERF_EVENT_IOC_DISABLE); return (rc == 0) ? FWTS_OK : FWTS_ERROR; } static int perf_read_counter(int fd, unsigned long long *result) { unsigned long long buf; int rc; rc = read(fd, &buf, sizeof(buf)); if (rc == sizeof(buf)) { *result = buf; rc = FWTS_OK; } else { rc = FWTS_ERROR; } (void)close(fd); return rc; } /* * fwts_cpu_benchmark() * */ int fwts_cpu_benchmark( fwts_framework *fw, const int cpu, /* CPU we want to measure performance */ fwts_cpu_benchmark_result *result) { struct timeval start, end, duration; unsigned long long perfctr_result; fwts_cpu_benchmark_result tmp; cpu_set_t mask, oldset; int perfctr, ncpus; double duration_sec; bool perf_ok; ncpus = fwts_cpu_enumerate(); memset(&tmp, 0, sizeof(tmp)); if (ncpus == FWTS_ERROR) return FWTS_ERROR; if ((cpu < 0) || (cpu > ncpus)) return FWTS_ERROR; /* setup perf counter */ perf_ok = true; perfctr = perf_setup_counter(cpu); if (perfctr < 0) { static bool warned; if (!warned) { fwts_log_warning(fw, "Can't use linux performance " "counters (perf), falling back to " "relative measurements"); warned = true; } perf_ok = false; } /* Pin to the specified CPU */ if (sched_getaffinity(0, sizeof(oldset), &oldset) < 0) { fwts_log_error(fw, "Cannot get scheduling affinity."); return FWTS_ERROR; } CPU_ZERO(&mask); CPU_SET(cpu, &mask); if (sched_setaffinity(0, sizeof(mask), &mask) < 0) { fwts_log_error(fw, "Cannot set scheduling affinity to CPU %d.", cpu); return FWTS_ERROR; } if (perf_ok) perf_start_counter(perfctr); gettimeofday(&start, NULL); /* * And burn some CPU cycles and get a bogo-compute like * loop count measure of CPU performance. */ for (;;) { fwts_cpu_burn_cycles(); tmp.loops++; gettimeofday(&end, NULL); timersub(&end, &start, &duration); if (duration.tv_usec >= 250000) break; } if (perf_ok) perf_stop_counter(perfctr); if (sched_setaffinity(0, sizeof(oldset), &oldset) < 0) { fwts_log_error(fw, "Cannot restore old CPU affinity settings."); return FWTS_ERROR; } duration_sec = duration.tv_sec + ((1.0 * duration.tv_usec) / 1000000.0); tmp.loops = (1.0 * tmp.loops) / duration_sec; if (perf_ok) { int rc = perf_read_counter(perfctr, &perfctr_result); if (rc == FWTS_OK) { tmp.cycles = (1.0 * perfctr_result) / duration_sec; tmp.cycles_valid = true; } else { fwts_log_warning(fw, "failed to read perf counters"); } } *result = tmp; return FWTS_OK; } uint64_t fwts_cpu_benchmark_best_result(fwts_cpu_benchmark_result *res) { return res->cycles_valid ? res->cycles : res->loops; } /* * fwts_cpu_consume_cycles() * eat up CPU cycles */ static uint64_t fwts_cpu_consume_cycles(void) { fwts_sig_handler_set(SIGUSR1, fwts_cpu_consume_sighandler, NULL); volatile uint64_t i = 0; for (;;) { fwts_cpu_burn_cycles(); i++; } return i; } /* * fwts_cpu_consume_complete() * kill all CPU consumes, free up pid info */ void fwts_cpu_consume_complete(void) { fwts_cpu_consume_kill(); free(fwts_cpu_pids); } /* * fwts_cpu_consume_start() * kick off per CPU tasks to eat up CPU */ int fwts_cpu_consume_start(void) { int i; if ((fwts_cpu_num = fwts_cpu_enumerate()) < 0) return FWTS_ERROR; if ((fwts_cpu_pids = (pid_t*)calloc(fwts_cpu_num, sizeof(pid_t))) == NULL) return FWTS_ERROR; fwts_sig_handler_set(SIGINT, fwts_cpu_sigint_handler, NULL); for (i = 0; i < fwts_cpu_num; i++) { pid_t pid; pid = fork(); switch (pid) { case 0: /* Child */ (void)fwts_cpu_consume_cycles(); break; case -1: /* Went wrong */ fwts_cpu_consume_complete(); return FWTS_ERROR; default: fwts_cpu_pids[i] = pid; break; } } return FWTS_OK; } /* * fwts_cpu_consume() * consume a specified amount of CPU time * on all CPUs */ int fwts_cpu_consume(const int seconds) { if (fwts_cpu_consume_start() != FWTS_OK) return FWTS_ERROR; (void)sleep(seconds); fwts_cpu_consume_complete(); return FWTS_OK; } src/lib/src/fwts_devicetree.c000066400000000000000000000172251465205512700165460ustar00rootroot00000000000000/* * Copyright (C) 2016-2021 IBM Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define _GNU_SOURCE #include #include #include "fwts.h" #include proc_gen_t proc_gen; int fwts_devicetree_read(fwts_framework *fwts) { char *command, *data = NULL; int fd, rc, status; ssize_t len; pid_t pid; if (!fwts_firmware_has_features(FWTS_FW_FEATURE_DEVICETREE)) return FWTS_OK; rc = asprintf(&command, "dtc -I fs -O dtb %s", DT_FS_PATH); if (rc < 0) return FWTS_ERROR; rc = fwts_pipe_open_ro(command, &pid, &fd); if (rc < 0) { free(command); return FWTS_ERROR; } free(command); rc = fwts_pipe_read(fd, &data, &len); if (rc) { fwts_pipe_close(fd, pid); return FWTS_ERROR; } status = fwts_pipe_close(fd, pid); if (!WIFEXITED(status) || WEXITSTATUS(status) != 0 || len == 0) { fprintf(stderr, "Cannot read devicetree data: dtc failed\n"); free(data); return FWTS_ERROR; } fwts->fdt = data; return FWTS_OK; } bool check_status_property_okay(fwts_framework *fw, const char *my_path, const char *my_prop_string, const char *property) { char *prop_string = strstr(my_path, my_prop_string); if (prop_string) { int prop_len = 0; int node = fdt_path_offset(fw->fdt, prop_string); if (node >= 0) { const char *prop_buf; prop_buf = fdt_getprop(fw->fdt, node, property, &prop_len); if (prop_buf && (prop_len > 0)) { if ((!strcmp(prop_buf, "okay")) || (!strcmp(prop_buf, "ok"))) { return true; } } } } return false; } int check_property_printable(fwts_framework *fw, const char *name, const char *buf, const size_t len) { bool printable = true; unsigned int i; /* we need at least one character plus a nul */ if (len < 2) { fwts_failed(fw, LOG_LEVEL_LOW, "DTPrintablePropertyShort", "property \"%s\" is too short", name); return FWTS_ERROR; } /* check all characters are printable */ for (i = 0; i < len - 1; i++) { printable = printable && isprint(buf[i]); if (!printable) break; } if (!printable) { fwts_failed(fw, LOG_LEVEL_LOW, "DTPrintablePropertyInvalid", "property \"%s\" contains unprintable characters", name); return FWTS_ERROR; } /* check for a trailing nul */ if (buf[len - 1] != '\0') { fwts_failed(fw, LOG_LEVEL_LOW, "DTPrintablePropertyNoNul", "property \"%s\" isn't nul-terminated", name); return FWTS_ERROR; } fwts_log_info_verbatim(fw, "DTPrintableProperty \"%s\" with a string" " value of \"%s\" passed", name, buf); fwts_passed(fw, "DTPrintableProperty \"%s\" passed", name); return FWTS_OK; } /* hidewhitespace (char *name) */ /* */ /* Caller must pass in modifiable memory for name */ /* Caller must save original memory ptr to free */ /* the original allocated memory if needed */ char *hidewhitespace(char *name) { char *end; while (isspace(*name)) name++; if (!*name) return name; end = name + strlen(name) - 1; while (end > name && isspace(*end)) end--; *(end + 1) = '\0'; return name; } /* * fwts_dt_property_read_u32 This function reads one u32 DT property * Returns FWTS_OK on success: *value will contain one int * FWTS_ERROR on error: *value will contain error code */ int fwts_dt_property_read_u32( void *fdt, const int offset, const char *pname, int *value) { int len = 0; const int *buf; buf = fdt_getprop(fdt, offset, pname, &len); if (buf == NULL) { *value = len; return FWTS_ERROR; } *value = be32toh(*buf); return FWTS_OK; } /* * This function reads DT property array of u32's * Return FWTS_OK on success: *value contain full array of int's * FWTS_ERROR on error: *value will contain error code which * comes from *len */ int fwts_dt_property_read_u32_arr( void *fdt, const int offset, const char *pname, int *value, int *len) { int i; const int *buf; buf = fdt_getprop(fdt, offset, pname, len); if (buf == NULL) { *value = *len; return FWTS_ERROR; } *len = *len / sizeof(int); for (i = 0; i < *len; i++) value[i] = be32toh(buf[i]); return FWTS_OK; } /* * This function reads DT property array of u64's * Return FWTS_OK on success: *value contain full array of u64's * FWTS_ERROR on error: *value will contain error code which * comes from *len */ int fwts_dt_property_read_u64_arr( void *fdt, const int offset, const char *pname, uint64_t *value, int *len) { int i; const int *buf; buf = fdt_getprop(fdt, offset, pname, len); if (buf == NULL) { *value = *len; return FWTS_ERROR; } *len = *len / sizeof(uint64_t); for (i = 0; i < *len; i++) value[i] = be64toh(buf[i]); return FWTS_OK; } /* Gets the length of DT property string list */ int fwts_dt_stringlist_count( fwts_framework *fw, const void *fdt, const int nodeoffset, const char *property) { const char *list, *end; int length = 0, count = 0; list = fdt_getprop(fdt, nodeoffset, property, &length); if (!list) { fwts_failed(fw, LOG_LEVEL_HIGH, "PropertyNotFound", "Failed to get property %s rc %d", property, length); return FWTS_ERROR; } end = list + length; while (list < end) { length = strnlen(list, end - list) + 1; /* Check if the last string isn't properly NUL-terminated. */ if (list + length > end) { fwts_failed(fw, LOG_LEVEL_HIGH, "NotNULLTerminated", "Last string is not properly NULL terminated"); return FWTS_ERROR; } list += length; count++; } return count; } static int get_cpu_version(fwts_framework *fw, int *value) { const char *cpus_path = "/cpus/"; int offset; int cpu_version; int ret; if (!fw->fdt) { fwts_skipped(fw, "Device tree not found"); return FWTS_SKIP; } offset = fdt_path_offset(fw->fdt, cpus_path); if (offset < 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTNodeMissing", "/cpus node is missing"); return FWTS_ERROR; } offset = fdt_node_offset_by_prop_value(fw->fdt, -1, "device_type", "cpu", sizeof("cpu")); if (offset < 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTNodeMissing", "cpu node is missing"); return FWTS_ERROR; } ret = fwts_dt_property_read_u32(fw->fdt, offset, "cpu-version", &cpu_version); if (ret != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTPropertyReadError", "Failed to read property cpu-version %s", fdt_strerror(cpu_version)); return FWTS_ERROR; } *value = cpu_version; return FWTS_OK; } int get_proc_gen(fwts_framework *fw) { int version; int ret; const int mask = 0xFFFF0000; int pvr; ret = get_cpu_version(fw, &version); if (ret != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_HIGH, "DTNoCPUVersion", "Not able to get the CPU version"); return FWTS_ERROR; } pvr = (mask & version) >> 16; switch (pvr) { /* Get CPU family and other flags based on PVR */ case PVR_TYPE_P7: case PVR_TYPE_P7P: proc_gen = proc_gen_p7; break; case PVR_TYPE_P8E: case PVR_TYPE_P8: proc_gen = proc_gen_p8; break; case PVR_TYPE_P8NVL: proc_gen = proc_gen_p8; break; case PVR_TYPE_P9: proc_gen = proc_gen_p9; break; default: proc_gen = proc_gen_unknown; } return FWTS_OK; } src/lib/src/fwts_dump.c000066400000000000000000000144751465205512700154000ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include "fwts.h" /* * Utilities for the fwts --dump option */ /* * dump_data() * dump to path/filename a chunk of data of length len */ static int dump_data(const char *filename, char *data, const size_t len) { FILE *fp; if ((fp = fopen(filename, "w")) == NULL) return FWTS_ERROR; if ((fwrite(data, sizeof(char), len, fp) != len)) { (void)fclose(fp); return FWTS_ERROR; } (void)fclose(fp); return FWTS_OK; } /* * dump_dmesg() * read kernel log, dump to path/filename */ static int dump_dmesg(void) { int len; char *data; int ret; if ((len = klogctl(10, NULL, 0)) < 0) return FWTS_ERROR; if ((data = calloc(1, len)) == NULL) return FWTS_ERROR; if (klogctl(3, data, len) < 0) { free(data); return FWTS_ERROR; } ret = dump_data("dmesg.log", data, strlen(data)); free(data); return ret; } /* * dump_exec() * Execute command, dump output to path/filename */ static int dump_exec(const char *filename, const char *command) { int fd; pid_t pid; ssize_t len; char *data; int ret; if (fwts_pipe_open_ro(command, &pid, &fd) < 0) return FWTS_ERROR; if (fwts_pipe_read(fd, &data, &len) != 0) { fwts_pipe_close(fd, pid); return FWTS_ERROR; } fwts_pipe_close(fd, pid); ret = dump_data(filename, data, len); free(data); return ret; } #ifdef FWTS_ARCH_INTEL /* * dump_dmidecode() * run dmidecode, dump output to path/filename */ static int dump_dmidecode(fwts_framework *fw) { FWTS_UNUSED(fw); return dump_exec("dmidecode.log", FWTS_DMIDECODE_PATH); } #endif /* * dump_lspci() * run lspci, dump output to path/filename */ static int dump_lspci(fwts_framework *fw) { char command[1024]; snprintf(command, sizeof(command), "%s -vv -nn", fw->lspci); return dump_exec("lspci.log", command); } #if defined(FWTS_HAS_ACPI) /* * dump_acpi_table() * hex dump of a ACPI table */ static int dump_acpi_table(fwts_acpi_table_info *table, FILE *fp) { char buffer[128]; size_t n; fprintf(fp, "%s @ 0x%lx\n", table->name, (unsigned long)table->addr); for (n = 0; n < table->length; n += 16) { int left = table->length - n; fwts_dump_raw_data(buffer, sizeof(buffer), table->data + n, n, left > 16 ? 16 : left); fprintf(fp, "%s\n", buffer); } fprintf(fp, "\n"); return FWTS_OK; } /* * dump_acpi_tables() * hex dump all ACPI tables */ static int dump_acpi_tables(fwts_framework *fw) { FILE *fp; int i; if ((fp = fopen("acpidump.log", "w")) == NULL) return FWTS_ERROR; for (i = 0;; i++) { fwts_acpi_table_info *table; int ret = fwts_acpi_get_table(fw, i, &table); if (ret != FWTS_OK) { fprintf(stderr, "Cannot read ACPI tables.\n"); (void)fclose(fp); return ret; } if (table == NULL) break; dump_acpi_table(table, fp); } (void)fclose(fp); return FWTS_OK; } #endif /* * dump_readme() * dump README file containing some system info */ static int dump_readme(void) { time_t now = time(NULL); struct tm *tm = localtime(&now); char *str, buf[64]; FILE *fp; if ((fp = fopen("README.txt", "w")) == NULL) return FWTS_ERROR; (void)strftime(buf, sizeof(buf), "%a %b %e %T %Y", tm); fprintf(fp, "This is output captured by fwts on %s.\n\n", buf); fwts_framework_show_version(fp, "fwts"); if ((str = fwts_get("/proc/version")) != NULL) { fprintf(fp, "Version: %s", str); free(str); } if ((str = fwts_get("/proc/version_signature")) != NULL) { fprintf(fp, "Signature: %s", str); free(str); } (void)fclose(fp); return FWTS_OK; } /* * dump_cpuinfo() * read cpuinfo, dump to path/filename */ static int dump_cpuinfo(void) { FILE *source, *target; char buffer[1024]; size_t bytes; if ((source = fopen("/proc/cpuinfo", "r")) == NULL) return FWTS_ERROR; if ((target = fopen("cpuinfo.log", "w")) == NULL) { (void)fclose(source); return FWTS_ERROR; } while (0 < (bytes = fread(buffer, 1, sizeof(buffer), source))) fwrite(buffer, 1, bytes, target); (void)fclose(source); (void)fclose(target); return FWTS_OK; } /* * fwts_dump_info() * dump various system specific information: * kernel log, dmidecode output, lspci output, * ACPI tables */ int fwts_dump_info(fwts_framework *fw) { char path[PATH_MAX+1]; if (getcwd(path, PATH_MAX) == NULL) strcpy(path, "./"); if (access(path, W_OK) < 0) { fprintf(stderr, "No write access to %s.\n", path); return FWTS_ERROR; } if (dump_readme() != FWTS_OK) fprintf(stderr, "Failed to dump README.txt.\n"); else printf("Created README.txt\n"); if (dump_dmesg() != FWTS_OK) fprintf(stderr, "Failed to dump kernel log.\n"); else printf("Dumping dmesg to dmesg.log\n"); #ifdef FWTS_ARCH_INTEL if (fwts_check_root_euid(fw, false) == FWTS_OK) { if (dump_dmidecode(fw) != FWTS_OK) fprintf(stderr, "Failed to dump output from dmidecode.\n"); else printf("Dumped DMI data to dmidecode.log\n"); } else fprintf(stderr, "Need root privilege to dump DMI tables.\n"); #endif if (dump_lspci(fw) != FWTS_OK) fprintf(stderr, "Failed to dump output from lspci.\n"); else printf("Dumped lspci data to lspci.log\n"); #if defined(FWTS_HAS_ACPI) switch (dump_acpi_tables(fw)) { case FWTS_OK: printf("Dumped ACPI tables to acpidump.log\n"); break; case FWTS_ERROR_NO_PRIV: fprintf(stderr, "Need root privilege to dump ACPI tables.\n"); break; default: fprintf(stderr, "Failed to dump ACPI tables.\n"); break; } #endif if (dump_cpuinfo() != FWTS_OK) fprintf(stderr, "Failed to dump cpuinfo.\n"); else printf("Dumping cpuinfo to cpuinfo.log\n"); return FWTS_OK; } src/lib/src/fwts_dump_data.c000066400000000000000000000066271465205512700163710ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include "fwts.h" /* * fwts_dump_raw_data() * print raw uint8 data of length `nbytes` into a buffer (length len) * as a hex dump. nbytes must be no more than 16. The address/offset * of the buffer in memory is annotated by addr. */ void fwts_dump_raw_data( char *buffer, /* buffer to contained formatted dump */ const size_t len, /* Length of buffer */ const uint8_t *data, /* Octets to dump */ const int addr, /* Original buffer data address */ const size_t nbytes) /* Number of bytes to dump, max 16 */ { int i; int n = 0; int nbytes_max = nbytes > 16 ? 16 : nbytes; if (addr >= 0x100000) n = snprintf(buffer, len, "%6.6X: ", addr); else if (addr >= 0x10000) n = snprintf(buffer, len, " %5.5X: ", addr); else n = snprintf(buffer, len, " %4.4X: ", addr); /* Hex dump */ for (i = 0; i < nbytes_max; i++) n += snprintf(buffer + n, len - n, "%2.2X ", data[i]); /* Padding */ for (; i < 16; i++) n += snprintf(buffer + n, len - n, " "); n += snprintf(buffer + n, len - n, " "); /* printable ASCII dump */ for (i = 0; i < nbytes_max; i++) buffer[n++] = (data[i] < 32 || data[i] > 126) ? '.' : data[i]; buffer[n] = '\0'; } /* * fwts_dump_raw_data_prefix() * simply print raw uint8 data of length `nbytes` into a buffer (length len) * as a hex dump. nbytes must be no more than 16 with prefix. The prefix could * be used as alighment. */ void fwts_dump_raw_data_prefix( char *buffer, /* buffer to contained formatted dump */ const size_t len, /* Length of buffer */ const uint8_t *data, /* Octets to dump */ const char *prefix, /* Prefix string or for alignment */ const size_t nbytes) /* Number of bytes to dump, max 16 */ { int i; int n = 0; int nbytes_max = nbytes > 16 ? 16 : nbytes; n = snprintf(buffer, len, "%s", prefix); /* Hex dump */ for (i = 0; i < nbytes_max; i++) n += snprintf(buffer + n, len - n, "%2.2X ", data[i]); buffer[n] = '\0'; } /* * fwts_hexdump_data_prefix_all() * print all raw uint8 data of length `nbytes` as a hex dump with prefix. * The prefix could be used as alighment. */ void fwts_hexdump_data_prefix_all( fwts_framework *fw, const uint8_t *data, /* Octets to dump */ const char *prefix, /* Prefix string or for alignment for each line */ const size_t nbytes) /* Number of bytes to dump for all data */ { size_t i; for (i = 0; i < nbytes; i += 16) { char buffer[128]; const size_t left = nbytes - i; fwts_dump_raw_data_prefix(buffer, sizeof(buffer), data + i, prefix, left > 16 ? 16 : left); fwts_log_info_verbatim(fw, "%s", buffer); } } src/lib/src/fwts_ebda.c000066400000000000000000000023731465205512700153200ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #ifdef FWTS_ARCH_INTEL #define EBDA_OFFSET 0x40e /* * ftws_ebda_get() * get EBDA offset so EBDA can be mmap'd */ off_t fwts_ebda_get(void) { uint16_t *ebda; off_t ebda_addr; if ((ebda = fwts_mmap((off_t)EBDA_OFFSET, sizeof(uint16_t))) == FWTS_MAP_FAILED) { return FWTS_NO_EBDA; } ebda_addr = ((off_t)*ebda) << 4; (void)fwts_munmap(ebda, sizeof(uint16_t)); return ebda_addr; } #else off_t fwts_ebda_get(void) { return FWTS_NO_EBDA; } #endif src/lib/src/fwts_efi_module.c000066400000000000000000000127161465205512700165370ustar00rootroot00000000000000/* * Copyright (C) 2012-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include "fwts_pipeio.h" static char *efi_dev_name = NULL; static char *module_name = NULL; /* * check_module_loaded_no_dev() * sanity check - we don't have a device so we definitely should * not have the module loaded either */ static int check_module_loaded_no_dev( fwts_framework *fw, const char *module) { bool loaded; if (fwts_module_loaded(fw, module, &loaded) != FWTS_OK) return FWTS_ERROR; if (loaded) { fwts_log_error(fw, "Module '%s' is already loaded, but device not available.", module); return FWTS_ERROR; } return FWTS_OK; } /* * check_device() * check if the device exists and is a char dev */ static int check_device(char *devname) { struct stat statbuf; if (stat(devname, &statbuf)) return FWTS_ERROR; if (S_ISCHR(statbuf.st_mode)) { efi_dev_name = devname; return FWTS_OK; } return FWTS_ERROR; } /* * load_module() * load the module and check if the device appears */ static int load_module( fwts_framework *fw, char *module, char *devname) { bool loaded; if (fwts_module_load(fw, module) != FWTS_OK) return FWTS_ERROR; if (fwts_module_loaded(fw, module, &loaded) != FWTS_OK) return FWTS_ERROR; if (!loaded) return FWTS_ERROR; if (check_device(devname) != FWTS_OK) return FWTS_ERROR; module_name = module; return FWTS_OK; } /* * fwts_lib_efi_runtime_load_module() * load the runtime module, for historical reasons * we have two names for the module and the device * it creates */ int fwts_lib_efi_runtime_load_module(fwts_framework *fw) { efi_dev_name = NULL; module_name = NULL; /* Check if dev is already available */ if (check_device("/dev/efi_test") == FWTS_OK) return FWTS_OK; if (check_device("/dev/efi_runtime") == FWTS_OK) return FWTS_OK; /* Since the devices can't be found, the module should be not loaded */ if (check_module_loaded_no_dev(fw, "efi_test") != FWTS_OK) return FWTS_ERROR; if (check_module_loaded_no_dev(fw, "efi_runtime") != FWTS_OK) return FWTS_ERROR; /* Now try to load the module */ if (load_module(fw, "efi_test", "/dev/efi_test") == FWTS_OK) return FWTS_OK; if (load_module(fw, "efi_runtime", "/dev/efi_runtime") == FWTS_OK) return FWTS_OK; fwts_log_error(fw, "Failed to load efi test module."); return FWTS_ERROR; } /* * fwts_lib_efi_runtime_unload_module() * unload the runtile module */ int fwts_lib_efi_runtime_unload_module(fwts_framework *fw) { bool loaded; char *tmp_name = module_name; efi_dev_name = NULL; /* No module, not much to do */ if (!module_name) return FWTS_OK; module_name = NULL; /* Unload module */ if (fwts_module_unload(fw, tmp_name) != FWTS_OK) { fwts_log_error(fw, "Failed to unload module '%s'.", tmp_name); return FWTS_ERROR; } /* Module should not be loaded at this point */ if (fwts_module_loaded(fw, tmp_name, &loaded) != FWTS_OK) return FWTS_ERROR; if (loaded) { fwts_log_error(fw, "Failed to unload module '%s'.", tmp_name); return FWTS_ERROR; } return FWTS_OK; } /* * fwts_lib_efi_runtime_open() * open the device */ int fwts_lib_efi_runtime_open(void) { if (!efi_dev_name) return -1; return open(efi_dev_name, O_RDWR); } /* * fwts_lib_efi_runtime_close() * close the device */ int fwts_lib_efi_runtime_close(const int fd) { return close(fd); } /* * fwts_lib_efi_runtime_kernel_lockdown() * check if the kernel has been lockdown */ int fwts_lib_efi_runtime_kernel_lockdown(fwts_framework *fw) { char *data; if ((data = fwts_get("/sys/kernel/security/lockdown")) != NULL) { if (strstr(data, "[none]") == NULL) { free(data); fwts_log_info(fw, "Kernel is in lockdown mode. Aborted."); fwts_log_info(fw, "Please unlock the kernel before you test the UEFI tests."); fwts_log_info(fw, "Make sure you disable secureboot and disable " "the kernel lockdown, (by kernel parameter lockdown=None)."); return FWTS_ABORTED; } } free(data); return FWTS_OK; } /* * fwts_lib_efi_runtime_module_init() * check the EFI firmware support and load efi_test driver * also check if the kernel is in lockdown mode. */ int fwts_lib_efi_runtime_module_init(fwts_framework *fw, int *fd) { if (fw->firmware_type != FWTS_FIRMWARE_UEFI) { fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted."); return FWTS_ABORTED; } if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) { return FWTS_ABORTED; } if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) { fwts_log_info(fw, "Cannot load efi_runtime module. Aborted."); return FWTS_ABORTED; } *fd = fwts_lib_efi_runtime_open(); if (*fd == -1) { fwts_log_info(fw, "Cannot open EFI test driver. Aborted."); return FWTS_ABORTED; } return FWTS_OK; } src/lib/src/fwts_fileio.c000066400000000000000000000043631465205512700156750ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include "fwts.h" /* * fwts_file_read() * read given file and return contents as a list of lines */ fwts_list *fwts_file_read(FILE *fp) { fwts_list *list; char buffer[8192]; if ((list = fwts_list_new()) == NULL) return NULL; while (fgets(buffer, sizeof(buffer), fp) != NULL) { buffer[strlen(buffer) - 1] = '\0'; /* Chop off "\n" */ fwts_text_list_append(list, buffer); } return list; } /* * fwts_file_open_and_read() * open and read file and return contents as a list of lines */ fwts_list* fwts_file_open_and_read(const char *file) { FILE *fp; fwts_list *list; if ((fp = fopen(file, "r")) == NULL) return NULL; list = fwts_file_read(fp); (void)fclose(fp); return list; } /* * fwts_gzfile_read() * read given gz file and return contents as a list of lines */ fwts_list *fwts_gzfile_read(gzFile *fp) { fwts_list *list; char buffer[8192]; if ((list = fwts_list_new()) == NULL) return NULL; while (gzgets(*fp, buffer, sizeof(buffer)) != NULL) { buffer[strlen(buffer) - 1] = '\0'; /* Chop off "\n" */ fwts_text_list_append(list, buffer); } return list; } /* * fwts_gzfile_open_and_read() * open and read gz file and return contents as a list of lines */ fwts_list* fwts_gzfile_open_and_read(const char *file) { gzFile fp; fwts_list *list; if ((fp = gzopen(file, "r")) == Z_NULL) return NULL; list = fwts_gzfile_read(&fp); (void)gzclose(fp); return list; } src/lib/src/fwts_firmware.c000066400000000000000000000056721465205512700162460ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include "fwts.h" static fwts_firmware_type firmware_type; static bool firmware_type_valid; /* * fwts_firmware_detect() * check system firmware type */ fwts_firmware_type fwts_firmware_detect(void) { struct stat statbuf; if (firmware_type_valid) return firmware_type; if (!stat("/sys/firmware/efi", &statbuf)) { firmware_type = FWTS_FIRMWARE_UEFI; } else if (!stat("/sys/firmware/opal", &statbuf)) { firmware_type = FWTS_FIRMWARE_OPAL; } else { firmware_type = FWTS_FIRMWARE_BIOS; } firmware_type_valid = true; return firmware_type; } int fwts_firmware_features(void) { int features = 0; struct stat statbuf; if (!stat("/sys/firmware/acpi", &statbuf)) features |= FWTS_FW_FEATURE_ACPI; else if (!stat("/sys/firmware/devicetree/base", &statbuf)) features |= FWTS_FW_FEATURE_DEVICETREE; /* just check for IPMI device presence */ if (!stat("/dev/ipmi0", &statbuf)) features |= FWTS_FW_FEATURE_IPMI; return features; } const char *fwts_firmware_feature_string(const fwts_firmware_feature features) { static const struct { const fwts_firmware_feature feature; const char name[16]; } feature_names[] = { { FWTS_FW_FEATURE_ACPI, "ACPI" }, { FWTS_FW_FEATURE_DEVICETREE, "devicetree" }, { FWTS_FW_FEATURE_IPMI, "IPMI" }, }; const int n = FWTS_ARRAY_SIZE(feature_names); static const char sep[] = ", "; static char str[60]; size_t len; char *p; int i; /* * ensure we have enough space in str to store n names, plus n-1 * separators, plus a trailing nul */ FWTS_ASSERT((n * (sizeof(feature_names[0].name) - 1)) + ((n-1) * (sizeof(sep) - 1)) + 1 < sizeof(str), str_too_small); /* ensure we have a name defined for all features */ FWTS_ASSERT(((1UL << n) - 1) == FWTS_FW_FEATURE_ALL, invalid_feature_names); for (p = str, i = 0; i < n; i++) { if (!(features & feature_names[i].feature)) continue; /* if this isn't the first feature, add a separator */ if (p != str) { len = sizeof(sep) - 1; memcpy(p, sep, len); p += len; } len = strlen(feature_names[i].name); memcpy(p, feature_names[i].name, len); p += len; } *p = '\0'; return str; } src/lib/src/fwts_formatting.c000066400000000000000000000063471465205512700166040ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include "fwts.h" /* * dup_line() * duplicate a portion of a line of text, from start to end up to * a maximum of width characters */ static char *dup_line(const char *start, const char *end, const size_t width) { size_t maxlen; char *buffer; char *bufptr; maxlen = end - start; if (maxlen < width) maxlen = width; buffer = calloc(1, maxlen + 1); if (!buffer) return NULL; bufptr = buffer; while (*start && start < end) *bufptr++ = *start++; *bufptr = '\0'; return buffer; } /* * format_remove_multiple_whitespaces() * Clone text string but remove whitespaces. Returns * NULL if failed to clone. */ static char *format_remove_multiple_whitespaces(const char *text) { char *buffer; char *bufptr1, *bufptr2; if ((bufptr1 = bufptr2 = buffer = strdup(text)) == NULL) return NULL; while (*bufptr1) { if (isspace(*bufptr1)) { while (*bufptr1 && isspace(*bufptr1)) bufptr1++; *bufptr2++ = ' '; } else *bufptr2++ = *bufptr1++; } *bufptr2 = '\0'; return buffer; } /* * fwts_format_text() * given a text string, format it into a list of lines of * text to a given width. */ fwts_list *fwts_format_text(const char *text, const size_t width) { size_t linelen = 0; char *lastspace = NULL; char *tidied_text; char *linestart; char *textptr; char *tmp; fwts_list *list; if ((list = fwts_text_list_new()) == NULL) return NULL; if ((textptr = tidied_text = format_remove_multiple_whitespaces(text)) == NULL) { fwts_list_free(list, free); return NULL; } linestart = tidied_text; while (*textptr) { /* find line break points */ if (isspace(*textptr) || ((lastspace != NULL) && (*(textptr-1) != '/') && (*textptr == '/')) || (*textptr == ':') || (*textptr == ';') || (*textptr == ',')) lastspace = textptr; if (linelen >= width) { if (lastspace != NULL) { if ((tmp = dup_line(linestart, lastspace, width)) == NULL) { fwts_text_list_free(list); free(tidied_text); return NULL; } fwts_text_list_append(list, tmp); free(tmp); linestart = lastspace + ((isspace(*lastspace)) ? 1 : 0); linelen = textptr - linestart; lastspace = NULL; } } textptr++; linelen++; } if ((tmp = dup_line(linestart, textptr, width)) == NULL) { fwts_text_list_free(list); free(tidied_text); return NULL; } fwts_text_list_append(list, tmp); free(tmp); free(tidied_text); return list; } src/lib/src/fwts_framework.c000066400000000000000000001376271465205512700164350ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include #include #include "fwts.h" #include "fwts_pm_method.h" typedef struct { const char *title; /* Test category */ fwts_framework_flags flag; /* Mask of category */ } fwts_categories; typedef struct { const char *name; const fwts_log_level filter_level; } fwts_log_levels; /* Suffix ".log", ".xml", etc gets automatically appended */ #define RESULTS_LOG "results" #define FWTS_FLAG_RUN_ALL \ (fwts_framework_flags) \ (FWTS_FLAG_BATCH | \ FWTS_FLAG_INTERACTIVE | \ FWTS_FLAG_BATCH_EXPERIMENTAL | \ FWTS_FLAG_INTERACTIVE_EXPERIMENTAL | \ FWTS_FLAG_POWER_STATES | \ FWTS_FLAG_UTILS | \ FWTS_FLAG_UNSAFE | \ FWTS_FLAG_UEFI | \ FWTS_FLAG_ACPI | \ FWTS_FLAG_COMPLIANCE_ACPI | \ FWTS_FLAG_SBBR | \ FWTS_FLAG_EBBR) static const fwts_categories categories[] = { { "ACPI", FWTS_FLAG_ACPI }, { "Batch", FWTS_FLAG_BATCH }, { "Interactive", FWTS_FLAG_INTERACTIVE }, { "Batch Experimental", FWTS_FLAG_BATCH_EXPERIMENTAL }, { "Interactive Experimental", FWTS_FLAG_INTERACTIVE_EXPERIMENTAL }, { "Power States", FWTS_FLAG_POWER_STATES }, { "SBBR", FWTS_FLAG_SBBR }, { "EBBR", FWTS_FLAG_EBBR }, { "Utilities", FWTS_FLAG_UTILS }, { "Unsafe", FWTS_FLAG_UNSAFE }, { "UEFI", FWTS_FLAG_UEFI }, { "ACPI Spec Compliance", FWTS_FLAG_COMPLIANCE_ACPI }, { NULL, 0 }, }; static const fwts_log_levels log_levels[] = { { "critical", LOG_LEVEL_CRITICAL }, { "high", LOG_LEVEL_CRITICAL | LOG_LEVEL_HIGH }, { "medium", LOG_LEVEL_CRITICAL | LOG_LEVEL_HIGH | LOG_LEVEL_MEDIUM }, { "low", LOG_LEVEL_CRITICAL | LOG_LEVEL_HIGH | LOG_LEVEL_MEDIUM | LOG_LEVEL_LOW }, { "info", LOG_LEVEL_CRITICAL | LOG_LEVEL_HIGH | LOG_LEVEL_MEDIUM | LOG_LEVEL_LOW | LOG_LEVEL_INFO }, { "all", LOG_LEVEL_ALL }, { NULL, 0 }, }; static fwts_list tests_to_skip; static fwts_option fwts_framework_options[] = { { "stdout-summary", "", 0, "Output SUCCESS or FAILED to stdout at end of tests." }, { "help", "h?", 0, "Get help." }, { "results-output", "r:", 1, "Output results to a named file. Filename can also be stout or stderr, e.g. --results-output=myresults.log, -r stdout." }, { "results-no-separators", "", 0, "No horizontal separators in results log." }, { "log-filter", "", 1, "Define filters to dump out specific log fields: --log-filter=RES,SUM - dump out results and summary, --log-filter=ALL,~INF - dump out all fields except info fields." }, { "log-fields", "", 0, "Show available log filtering fields." }, { "log-format", "", 1, "Define output log format: e.g. --log-format=\"%date %time [%field] (%owner): \". Fields are: %time - time, %field - filter field, %owner - name of test, %level - failure error level, %line - log line number." }, { "show-progress", "p", 0, "Output test progress report to stderr." }, { "show-tests", "s", 0, "Show available tests." }, { "klog", "k:", 1, "Specify kernel log file rather than reading it from the kernel, e.g. --klog=dmesg.log" }, { "olog", "o:", 1, "Specify Other logs to be analyzed, main usage is for custom log analysis, best to use custom json file for pattern matching, e.g. -o /var/log/my_opal_msglog --json-data-file=olog.json --json-data-path=/home/myuser, on PPC this will default to dumping the OPAL msglog for analysis." }, { "log-width", "w:", 1, "Define the output log width in characters." }, { "lspci", "", 1, "Specify path to lspci, e.g. --lspci=path." }, { "batch", "b", 0, "Run non-Interactive tests." }, { "interactive", "i", 0, "Just run Interactive tests." }, { "force-clean", "f", 0, "Force a clean results log file." }, { "version", "v", 0, "Show version (" FWTS_VERSION ")." }, { "dump", "d", 0, "Dump out dmesg, dmidecode, lspci, ACPI tables to logs." }, { "table-path", "t:", 1, "Path to ACPI tables dumped by acpidump and then acpixtract, e.g. --table-path=/some/path/to/acpidumps" }, { "batch-experimental", "", 0, "Run Batch Experimental tests." }, { "interactive-experimental", "", 0, "Just run Interactive Experimental tests." }, { "power-states", "P", 0, "Test S3, S4 power states." }, { "all", "a", 0, "Run all tests." }, { "show-progress-dialog","D", 0, "Output test progress for use in dialog tool." }, { "skip-test", "S:", 1, "Skip listed tests, e.g. --skip-test=s3,nx,method" }, { "quiet", "q", 0, "Run quietly." }, { "dumpfile", "", 1, "Load ACPI tables using file generated by acpidump, e.g. --dumpfile=acpidump.dat" }, { "show-tests-full", "", 0, "Show available tests including all minor tests." }, { "utils", "u", 0, "Run Utility 'tests'." }, { "json-data-path", "j:", 1, "Specify path to fwts json data files - default is /usr/share/fwts." }, { "json-data-file", "J:", 1, "Specify the file to use for pattern matching on --olog, you may need to specify the json-data-path also if non-default location." }, { "disassemble-aml", "", 2, "Disassemble AML from DSDT and SSDT tables." }, { "log-type", "", 1, "Specify log type (plaintext, json, html or xml)." }, { "unsafe", "U", 0, "Unsafe tests (tests that can potentially cause kernel oopses)." }, { "filter-error-discard", "", 1, "Discard errors that match any of the specified labels." }, { "filter-error-keep", "", 1, "Keep errors that match any of the specified labels." }, { "acpica-debug", "", 0, "Enable ACPICA debug/warning messages." }, { "acpica", "", 1, "Enable ACPICA run time options." }, { "uefitests", "", 0, "Run UEFI tests." }, { "rsdp", "R:", 1, "Specify the physical address of the ACPI RSDP." }, { "pm-method", "", 1, "Select the power method to use. Accepted values are \"logind\", \"pm-utils\", \"sysfs\""}, { "show-tests-categories","", 0, "Show tests and associated categories." }, { "acpitests", "", 0, "Run general ACPI tests." }, { "acpicompliance", "", 0, "Run ACPI tests for spec compliance." }, { "log-level", "", 1, "Specify error level to report failed test messages," }, { "arch", "", 1, "Specify arch of the tables being tested (defaults to current host)." }, { "sbbr", "", 0, "Run ARM SBBR tests." }, { "ifv", "", 0, "Run tests in firmware-vendor modes." }, { "clog", "", 1, "Specify a coreboot logfile dump" }, { "ebbr", "", 0, "Run EBBR tests." }, { NULL, NULL, 0, NULL } }; static fwts_list fwts_framework_test_list = FWTS_LIST_INIT; static const char *fwts_copyright[] = { "Some of this work - Copyright (c) 1999 - 2023, Intel Corp. All rights reserved.", "Some of this work - Copyright (c) 2010 - 2023, Canonical.", "Some of this work - Copyright (c) 2016 - 2023, IBM.", "Some of this work - Copyright (c) 2017 - 2023, ARM Ltd.", NULL }; /* * fwts_framework_compare_priority() * used to register tests sorted on run priority */ static int fwts_framework_compare_priority(void *data1, void *data2) { fwts_framework_test *test1 = (fwts_framework_test *)data1; fwts_framework_test *test2 = (fwts_framework_test *)data2; return (test1->priority - test2->priority); } /* * fwts_framework_test_add() * register a test, called by FWTS_REGISTER() macro. * this is called very early, so any errors need to * be reported to stderr because the logging engine * is not set up yet. */ void fwts_framework_test_add( const char *name, fwts_framework_ops *ops, const fwts_priority priority, const fwts_framework_flags flags, const fwts_firmware_feature fw_features) { fwts_framework_test *new_test; if (flags & ~(FWTS_FLAG_RUN_ALL | FWTS_FLAG_ROOT_PRIV)) { fprintf(stderr, "Test %s flags must be a bit field in 0x%x, got 0x%x\n", name, FWTS_FLAG_RUN_ALL, flags); exit(EXIT_FAILURE); } /* This happens early, so if it goes wrong, bail out */ if ((new_test = calloc(1, sizeof(fwts_framework_test))) == NULL) { fprintf(stderr, "FATAL: Could not allocate memory adding tests to test framework\n"); exit(EXIT_FAILURE); } /* Total up minor tests in this test */ for (ops->total_tests = 0; ops->minor_tests[ops->total_tests].test_func != NULL; ops->total_tests++) ; new_test->name = name; new_test->ops = ops; new_test->priority = priority; new_test->flags = flags; new_test->fw_features = fw_features; /* Add test, sorted on run order priority */ fwts_list_add_ordered(&fwts_framework_test_list, new_test, fwts_framework_compare_priority); /* Add any options and handler, if they exists */ if (ops->options && ops->options_handler) { if (fwts_args_add_options(ops->options, ops->options_handler, ops->options_check) == FWTS_ERROR) { fprintf(stderr, "FATAL: Could not allocate memory " "for getopt options handler."); exit(EXIT_FAILURE); } } } /* * fwts_framework_compare_name() * for sorting tests in name order */ int fwts_framework_compare_test_name(void *data1, void *data2) { fwts_framework_test *test1 = (fwts_framework_test *)data1; fwts_framework_test *test2 = (fwts_framework_test *)data2; return strcmp(test1->name, test2->name); } /* * fwts_framework_show_tests_brief() * dump out registered tests in brief form */ static void fwts_framework_show_tests_brief(void) { fwts_list sorted; fwts_list_link *item; size_t n = 0; size_t width = (size_t)fwts_tty_width(fileno(stderr), 80); fwts_list_init(&sorted); fwts_list_foreach(item, &fwts_framework_test_list) { fwts_list_add_ordered(&sorted, fwts_list_data(fwts_framework_test *, item), fwts_framework_compare_test_name); } fwts_list_foreach(item, &sorted) { fwts_framework_test *test = fwts_list_data(fwts_framework_test*, item); size_t len = strlen(test->name) + 1; if ((n + len) > width) { fprintf(stderr, "\n"); n = 0; } fprintf(stderr, "%s ", test->name); n += len; } fwts_list_free_items(&sorted, NULL); fprintf(stderr, "\n\nuse: fwts --show-tests or fwts --show-tests-full for more information.\n"); } /* * fwts_framework_show_tests_categories() * dump out registered tests in brief form with categories */ static void fwts_framework_show_tests_categories(void) { fwts_list sorted; fwts_list_link *item; fwts_list_init(&sorted); fwts_list_foreach(item, &fwts_framework_test_list) { fwts_list_add_ordered(&sorted, fwts_list_data(fwts_framework_test *, item), fwts_framework_compare_test_name); } fwts_list_foreach(item, &sorted) { fwts_framework_test *test = fwts_list_data(fwts_framework_test*, item); int i, n = 0; printf("%-17.17s", test->name); for (i = 0; categories[i].title != NULL; i++) { if (categories[i].flag & test->flags) { const char *src = (const char *)categories[i].title; char *dst; size_t len = strlen(src) + 1; char buf[len]; for (dst = buf; *src; src++, dst++) *dst = tolower(*src); *dst = '\0'; printf("%s%s", n == 0 ? " " : ", ", buf); n++; } } putchar('\n'); } fwts_list_free_items(&sorted, NULL); } /* * fwts_framework_show_tests() * dump out registered tests. */ static void fwts_framework_show_tests(fwts_framework *fw, const bool full) { fwts_list_link *item; fwts_list sorted; int i; bool need_nl = false; int total = 0; /* Dump out tests registered under all categories */ for (i = 0; categories[i].title != NULL; i++) { /* If no category flags are set, or category matches user requested category go and dump name and purpose of tests */ if (((fw->flags & FWTS_FLAG_RUN_ALL) == 0) || ((fw->flags & FWTS_FLAG_RUN_ALL) & categories[i].flag)) { fwts_framework_test *test; fwts_list_init(&sorted); fwts_list_foreach(item, &fwts_framework_test_list) { test = fwts_list_data(fwts_framework_test *, item); if ((test->flags & FWTS_FLAG_RUN_ALL) & categories[i].flag) fwts_list_add_ordered(&sorted, test, fwts_framework_compare_test_name); } if (fwts_list_len(&sorted) > 0) { if (need_nl) printf("\n"); need_nl = true; printf("%s%s:\n", categories[i].title, (categories[i].flag & FWTS_FLAG_UTILS) ? "" : " tests"); fwts_list_foreach(item, &sorted) { test = fwts_list_data(fwts_framework_test *, item); if (full) { int j; printf(" %-15.15s (%d test%s):\n", test->name, test->ops->total_tests, test->ops->total_tests > 1 ? "s" : ""); for (j = 0; j < test->ops->total_tests; j++) printf(" %s\n", test->ops->minor_tests[j].name); total += test->ops->total_tests; } else { printf(" %-15.15s %s\n", test->name, test->ops->description ? test->ops->description : ""); } } } fwts_list_free_items(&sorted, NULL); } } } /* * fwts_framework_strtrunc() * truncate overlong string */ static void fwts_framework_strtrunc(char *dest, const char *src, size_t max) { if (src) { strlcpy(dest, src, max); if ((max > 3) && (strlen(src) > max)) { dest[max-1] = '\0'; dest[max-2] = '.'; dest[max-3] = '.'; } } else strncpy(dest, "", max); } /* * fwts_framework_format_results() * format results into human readable summary. */ static void fwts_framework_format_results(char *buffer, int buflen, fwts_results const *results, bool include_zero_results) { size_t n = 0; if (buflen) *buffer = 0; if ((include_zero_results || (results->passed > 0)) && (buflen > 0)) { n = snprintf(buffer, buflen, "%u passed", results->passed); buffer += n; buflen -= n; } if ((include_zero_results || (results->failed > 0)) && (buflen > 0)) { n = snprintf(buffer, buflen, "%s%u failed", n > 0 ? ", " : "", results->failed); buffer += n; buflen -= n; } if ((include_zero_results || (results->warning > 0)) && (buflen > 0)) { n = snprintf(buffer, buflen, "%s%u warning%s", n > 0 ? ", " : "", results->warning, results->warning > 1 ? "s" : ""); buffer += n; buflen -= n; } if ((include_zero_results || (results->aborted > 0)) && (buflen > 0)) { n = snprintf(buffer, buflen, "%s%u aborted", n > 0 ? ", " : "", results->aborted); buffer += n; buflen -= n; } if ((include_zero_results || (results->skipped > 0)) && (buflen > 0)) { n = snprintf(buffer, buflen, "%s%u skipped", n > 0 ? ", " : "", results->skipped); buffer += n; buflen -= n; } if ((include_zero_results || (results->infoonly > 0)) && (buflen > 0)) { snprintf(buffer, buflen, "%s%u info only", n > 0 ? ", " : "", results->infoonly); } } static void fwts_framework_minor_test_progress_clear_line(void) { int width = fwts_tty_width(fileno(stderr), 80); if (width > 256) width = 256; fprintf(stderr, "%*.*s\r", width-1, width-1, ""); } /* * fwts_framework_minor_test_progress() * output per test progress report or progress that can be pipe'd into * dialog --guage * */ void fwts_framework_minor_test_progress(fwts_framework *fw, const int percent, const char *message) { float major_percent; float minor_percent; float process_percent; float progress; int width = fwts_tty_width(fileno(stderr), 80); if (width > 256) width = 256; if (percent >= 0 && percent <= 100) fw->minor_test_progress = percent; major_percent = fw->major_tests_total ? (float)100.0 / (float)fw->major_tests_total : 100.0; minor_percent = fw->current_major_test->ops->total_tests ? ((float)major_percent / (float)fw->current_major_test->ops->total_tests) : 0.0; process_percent = ((float)minor_percent / 100.0); progress = (float)(fw->current_major_test_num-1) * major_percent; progress += (float)(fw->current_minor_test_num-1) * minor_percent; progress += (float)(percent) * process_percent; /* Feedback required? */ if (fw->show_progress) { char buf[1024]; char truncbuf[256]; static int index; snprintf(buf, sizeof(buf), "%s %s",fw->current_minor_test_name, message); fwts_framework_strtrunc(truncbuf, buf, width-9); fprintf(stderr, " %-*.*s: %5.1f%% %c\r", width-13, width-13, truncbuf, progress, "/-\\|"[index++ & 3]); fflush(stderr); } /* Output for the dialog tool, dialog --title "fwts" --gauge "" 12 80 0 */ if (fw->flags & FWTS_FLAG_SHOW_PROGRESS_DIALOG) { char buffer[128]; static struct timeval start_time; struct timeval now_time; int duration; gettimeofday(&now_time, NULL); if (!start_time.tv_sec) start_time = now_time; duration = (int)(now_time.tv_sec - start_time.tv_sec); fwts_framework_format_results(buffer, sizeof(buffer), &fw->total, true); fprintf(stdout, "XXX\n"); fprintf(stdout, "%d\n", percent); fprintf(stdout, "%s.\n", buffer); fprintf(stdout, "%5.2f%% total run complete (%d seconds).\n", progress, duration); fprintf(stdout, "%s\n\n", fw->current_major_test->ops->description ? fw->current_major_test->ops->description : ""); fprintf(stdout, "Running test #%d of %d: %s\n", fw->current_major_test_num, fw->major_tests_total, fw->current_minor_test_name); fprintf(stdout, "XXX\n"); fflush(stdout); } } /* * fwts_framework_underline() * underlining into log */ static inline void fwts_framework_underline(fwts_framework *fw, const int ch) { fwts_log_underline(fw->results, ch); } static int fwts_framework_test_summary(fwts_framework *fw) { char buffer[128]; fwts_results const *results = &fw->current_major_test->results; fwts_framework_underline(fw,'='); fwts_framework_format_results(buffer, sizeof(buffer), results, true); fwts_log_summary(fw, "%s.", buffer); fwts_framework_underline(fw,'='); if (fw->flags & FWTS_FLAG_STDOUT_SUMMARY) { /* Report in order of failure precedence */ if (results->failed > 0) { /* We intentionally report the highest logged error level */ if (fw->failed_level & LOG_LEVEL_CRITICAL) printf("%s_CRITICAL\n", fwts_log_field_to_str_upper(LOG_FAILED)); else if (fw->failed_level & LOG_LEVEL_HIGH) printf("%s_HIGH\n", fwts_log_field_to_str_upper(LOG_FAILED)); else if (fw->failed_level & LOG_LEVEL_MEDIUM) printf("%s_MEDIUM\n", fwts_log_field_to_str_upper(LOG_FAILED)); else if (fw->failed_level & LOG_LEVEL_LOW) printf("%s_LOW\n", fwts_log_field_to_str_upper(LOG_FAILED)); else printf("%s\n", fwts_log_field_to_str_upper(LOG_FAILED)); } else if (results->skipped > 0) printf("%s\n", fwts_log_field_to_str_upper(LOG_SKIPPED)); else if (results->warning > 0) printf("%s\n", fwts_log_field_to_str_upper(LOG_WARNING)); else if (results->aborted > 0) printf("%s\n", fwts_log_field_to_str_upper(LOG_ABORTED)); else printf("%s\n", fwts_log_field_to_str_upper(LOG_PASSED)); } fwts_log_newline(fw->results); return FWTS_OK; } static int fwts_framework_total_summary(fwts_framework *fw) { char buffer[128]; fwts_framework_format_results(buffer, sizeof(buffer), &fw->total, true); fwts_log_summary(fw, "%s.", buffer); return FWTS_OK; } static int fwts_framework_run_test(fwts_framework *fw, fwts_framework_test *test) { fwts_framework_minor_test *minor_test; int ret; fw->current_major_test = test; fw->current_minor_test_name = ""; test->was_run = true; fw->total_run++; fwts_results_zero(&fw->current_major_test->results); fw->failed_level = 0; fwts_log_section_begin(fw->results, test->name); fwts_log_set_owner(fw->results, test->name); fw->current_minor_test_num = 1; fw->show_progress = (fw->flags & FWTS_FLAG_SHOW_PROGRESS) && (FWTS_TEST_INTERACTIVE(test->flags) == 0); /* Not a utility test?, then we require a test summary at end of the test run */ if (!(test->flags & FWTS_FLAG_UTILS)) fw->print_summary = true; if (test->ops->description) { fwts_log_heading(fw, "%s: %s", test->name, test->ops->description); fwts_framework_underline(fw,'-'); if (fw->show_progress) { char buf[70]; fwts_framework_strtrunc(buf, test->ops->description, sizeof(buf)); fprintf(stderr, "Test: %-70.70s\n", buf); } } fwts_framework_minor_test_progress(fw, 0, ""); if ((test->flags & FWTS_FLAG_ROOT_PRIV) && (fwts_check_root_euid(fw, true) != FWTS_OK)) { fwts_log_error(fw, "Aborted test, insufficient privilege."); fw->current_major_test->results.aborted += test->ops->total_tests; fw->total.aborted += test->ops->total_tests; if (fw->show_progress) { fwts_framework_minor_test_progress_clear_line(); fprintf(stderr, " Test aborted\n"); } goto done; } if (!fwts_firmware_has_features(test->fw_features)) { int missing = test->fw_features & ~fwts_firmware_features(); static const char *msg = "Test skipped, missing features"; fwts_log_info(fw, "Test skipped, missing features: %s", fwts_firmware_feature_string(missing)); fw->current_major_test->results.skipped += test->ops->total_tests; fw->total.skipped += test->ops->total_tests; if (fw->show_progress) { fwts_framework_minor_test_progress_clear_line(); fprintf(stderr, " %s: %s\n", msg, fwts_firmware_feature_string(missing)); } goto done; } if ((test->ops->init) && ((ret = test->ops->init(fw)) != FWTS_OK)) { char *msg = NULL; /* Init failed or skipped, so abort */ if (ret == FWTS_SKIP) { fw->current_major_test->results.skipped += test->ops->total_tests; fw->total.skipped += test->ops->total_tests; msg = "Test skipped"; } else { fwts_log_error(fw, "Aborted test, initialisation failed."); fw->current_major_test->results.aborted += test->ops->total_tests; fw->total.aborted += test->ops->total_tests; msg = "Test aborted"; } if (fw->show_progress) { fwts_framework_minor_test_progress_clear_line(); fprintf(stderr, " %s.\n", msg); } goto done; } fwts_log_section_begin(fw->results, "subtests"); for (minor_test = test->ops->minor_tests; *minor_test->test_func != NULL; minor_test++, fw->current_minor_test_num++) { fwts_log_section_begin(fw->results, "subtest"); fw->current_minor_test_name = minor_test->name; fwts_results_zero(&fw->minor_tests); if (minor_test->name != NULL) { fwts_log_section_begin(fw->results, "subtest_info"); fwts_log_info(fw, "Test %d of %d: %s", fw->current_minor_test_num, test->ops->total_tests, minor_test->name); fwts_log_section_end(fw->results); /* subtest_info */ } fwts_log_section_begin(fw->results, "subtest_results"); fwts_framework_minor_test_progress(fw, 0, ""); ret = (*minor_test->test_func)(fw); /* Something went horribly wrong, abort all other tests too */ if (ret == FWTS_ABORTED) { int aborted = test->ops->total_tests - (fw->current_minor_test_num - 1); fw->current_major_test->results.aborted += aborted; fwts_log_section_end(fw->results); /* subtest_results */ fwts_log_nl(fw); fwts_log_section_end(fw->results); /* subtest */ break; } fwts_framework_minor_test_progress(fw, 100, ""); fwts_framework_summate_results(&fw->current_major_test->results, &fw->minor_tests); if (fw->show_progress) { char resbuf[128]; char namebuf[55]; fwts_framework_minor_test_progress_clear_line(); fwts_framework_format_results(resbuf, sizeof(resbuf), &fw->minor_tests, false); fwts_framework_strtrunc(namebuf, minor_test->name, sizeof(namebuf)); fprintf(stderr, " %-55.55s %s\n", namebuf, *resbuf ? resbuf : " "); } fwts_log_section_end(fw->results); /* subtest_results */ fwts_log_nl(fw); fwts_log_section_end(fw->results); /* subtest */ } fwts_log_section_end(fw->results); /* subtests */ fwts_framework_summate_results(&fw->total, &fw->current_major_test->results); if (test->ops->deinit) test->ops->deinit(fw); done: if (!(test->flags & FWTS_FLAG_UTILS)) { fwts_log_section_begin(fw->results, "results"); fwts_framework_test_summary(fw); fwts_log_section_end(fw->results); /* results */ } fwts_log_section_end(fw->results); /* test->name */ fwts_log_set_owner(fw->results, "fwts"); return FWTS_OK; } /* * fwts_framework_tests_run() * */ static void fwts_framework_tests_run(fwts_framework *fw, fwts_list *tests_to_run) { fwts_list_link *item; fw->current_major_test_num = 1; fw->major_tests_total = fwts_list_len(tests_to_run); fwts_list_foreach(item, tests_to_run) { fwts_framework_test *test = fwts_list_data(fwts_framework_test *, item); fwts_framework_run_test(fw, test); fw->current_major_test_num++; } } /* * fwts_framework_test_find() * find a named test, return test if found, NULL otherwise */ static fwts_framework_test *fwts_framework_test_find(const char *name) { fwts_list_link *item; fwts_list_foreach(item, &fwts_framework_test_list) { fwts_framework_test *test = fwts_list_data(fwts_framework_test *, item); if (strcmp(name, test->name) == 0) return test; } return NULL; } bool fwts_error_filtered_out(fwts_framework *fw, const char *label) { fwts_list_link *item; /* * Has the user specified errors to discard? If we find any matches * then flag as wanting to filter out. */ if (fwts_list_len(&fw->errors_filter_discard) > 0) { fwts_list_foreach(item, &fw->errors_filter_discard) { if (strcmp(label, fwts_list_data(char *, item)) == 0) return true; /* Discard */ } return false; /* No matches, won't discard */ } /* * Has the user specified errors to keep? If we find any matches * then flag as wanting to keep. */ if (fwts_list_len(&fw->errors_filter_keep) > 0) { fwts_list_foreach(item, &fw->errors_filter_keep) { if (strcmp(label, fwts_list_data(char *, item)) == 0) return false; /* Don't discard */ } return true; /* Not found, so discard */ } /* * User not specified any filters? Don't discard */ return false; } /* * fwts_error_inc() * Increment the error count if we're not filtering out this error (based on label). */ void fwts_error_inc(fwts_framework *fw, const char *label, int *count) { if (!fwts_error_filtered_out(fw, label)) (*count)++; } /* * fwts_framework_log() * log a test result */ void fwts_framework_log( fwts_framework *fw, fwts_log_field field, const char *label, fwts_log_level level, uint32_t *count, const char *fmt, ...) { char buffer[4096]; char prefix[256]; char *str = fwts_log_field_to_str_upper(field); bool do_count = !FWTS_LEVEL_IGNORE(fw, level); if (fmt) { va_list ap; va_start(ap, fmt); vsnprintf(buffer, sizeof(buffer), fmt, ap); va_end(ap); } else *buffer = '\0'; switch (field) { case LOG_ADVICE: /* If the previous LOG_FAILED message was filtered out, ignore following advice */ if (fw->error_filtered_out) { do_count = false; } else { fwts_log_nl(fw); snprintf(prefix, sizeof(prefix), "%s: ", str); fwts_log_printf(fw, field, level, str, label, prefix, "%s", buffer); fwts_log_nl(fw); } break; case LOG_FAILED: if (fwts_error_filtered_out(fw, label)) { fw->error_filtered_out = true; do_count = false; } else { fw->error_filtered_out = false; fw->failed_level |= level; fwts_summary_add(fw, fw->current_major_test->name, level, buffer); snprintf(prefix, sizeof(prefix), "%s [%s] %s: Test %d, ", str, fwts_log_level_to_str(level), label, fw->current_minor_test_num); fwts_log_printf(fw, field, level, str, label, prefix, "%s", buffer); } break; case LOG_PASSED: case LOG_WARNING: case LOG_SKIPPED: case LOG_ABORTED: snprintf(prefix, sizeof(prefix), "%s: Test %d, ", str, fw->current_minor_test_num); fwts_log_printf(fw, field, level, str, label, prefix, "%s", buffer); break; case LOG_INFOONLY: break; /* no-op */ default: break; } /* Only increment stats if we've reported something */ if (do_count && (count != NULL)) (*count)++; } /* * fwts_framework_show_version() * dump version of fwts */ void fwts_framework_show_version(FILE *fp, const char *name) { fprintf(fp, "%s, Version %s, %s\n", name, FWTS_VERSION, FWTS_DATE); } /* * fwts_framework_strdup() * dup a string. if it's already allocated, free previous allocation before duping */ static void fwts_framework_strdup(char **ptr, const char *str) { if (ptr == NULL) return; free(*ptr); *ptr = strdup(str); } /* * fwts_framework_syntax() * dump some help */ static void fwts_framework_syntax(char * const *argv) { int i; printf("Usage %s: [OPTION] [TEST]\n", argv[0]); fwts_args_show_options(); /* Tag on copyright info */ printf("\n"); for (i = 0; fwts_copyright[i]; i++) printf("%s\n", fwts_copyright[i]); } /* * fwts_framework_heading_info() * log basic system info so we can track the tests */ static void fwts_framework_heading_info( fwts_framework *fw, fwts_list *tests_to_run, const int argc, char * const *argv) { struct tm tm; time_t now; struct utsname buf; char *tests = NULL; char *args = NULL; size_t len; int i; fwts_list_link *item; time(&now); localtime_r(&now, &tm); uname(&buf); fwts_log_info(fw, "Results generated by fwts: Version %s (%s).", FWTS_VERSION, FWTS_DATE); fwts_log_nl(fw); for (i = 0; fwts_copyright[i]; i++) fwts_log_info(fw, "%s", fwts_copyright[i]); fwts_log_nl(fw); fwts_log_info(fw, "This test run on %2.2d/%2.2d/%-2.2d at %2.2d:%2.2d:%2.2d on host %s %s %s %s %s.", tm.tm_mday, tm.tm_mon + 1, (tm.tm_year+1900) % 100, tm.tm_hour, tm.tm_min, tm.tm_sec, buf.sysname, buf.nodename, buf.release, buf.version, buf.machine); fwts_log_nl(fw); for (len = 1, i = 1; i < argc; i++) len += strlen(argv[i]) + 1; if ((args = calloc(len, sizeof(char))) != NULL) { for (i = 1; i < argc; i++) { strcat(args, " "); strcat(args, argv[i]); } fwts_log_info(fw, "Command: \"fwts %s\".", args); free(args); } len = 1; fwts_list_foreach(item, tests_to_run) { fwts_framework_test *test = fwts_list_data(fwts_framework_test *, item); len += strlen(test->name) + 1; } if ((tests = calloc(len, sizeof(char))) != NULL) { fwts_list_foreach(item, tests_to_run) { fwts_framework_test *test = fwts_list_data(fwts_framework_test *, item); if (item != fwts_list_head(tests_to_run)) strcat(tests, " "); strcat(tests, test->name); } fwts_log_info(fw, "Running tests: %s.", fwts_list_len(tests_to_run) == 0 ? "None" : tests); fwts_log_newline(fw->results); free(tests); } } /* * fwts_framework_skip_test() * try to find a test in list of tests to be skipped, return NULL of cannot be found */ static fwts_framework_test *fwts_framework_skip_test(fwts_framework_test *test) { fwts_list_link *item; fwts_list_foreach(item, &tests_to_skip) if (test == fwts_list_data(fwts_framework_test *, item)) return test; return NULL; } /* * fwts_framework_skip_test_parse() * parse optarg of comma separated list of tests to skip */ static int fwts_framework_skip_test_parse(char *arg) { char *str; char *token; for (str = arg; (token = strtok(str, ",")) != NULL; str = NULL) { fwts_framework_test *test; if ((test = fwts_framework_test_find(token)) == NULL) { fprintf(stderr, "No such test '%s'\n", token); return FWTS_ERROR; } else fwts_list_append(&tests_to_skip, test); } return FWTS_OK; } static int fwts_framework_filter_error_parse(char *arg, fwts_list *list) { char *str; char *token; for (str = arg; (token = strtok(str, ",")) != NULL; str = NULL) { if (fwts_list_append(list, token) == NULL) { fprintf(stderr, "Out of memory parsing argument %s\n", arg); fwts_list_free_items(list, NULL); return FWTS_ERROR; } } return FWTS_OK; } /* * fwts_framework_log_type_parse() * parse optarg of comma separated log types */ static int fwts_framework_log_type_parse(fwts_framework *fw, char *arg) { char *str; char *token; fw->log_type = 0; for (str = arg; (token = strtok(str, ",")) != NULL; str = NULL) { if (!strcmp(token, "plaintext")) fw->log_type |= LOG_TYPE_PLAINTEXT; else if (!strcmp(token, "json")) fw->log_type |= LOG_TYPE_JSON; else if (!strcmp(token, "xml")) fw->log_type |= LOG_TYPE_XML; else if (!strcmp(token, "html")) fw->log_type |= LOG_TYPE_HTML; else { fprintf(stderr, "--log-type can be plaintext, xml, html or json.\n"); return FWTS_ERROR; } } if (!fw->log_type) fw->log_type = LOG_TYPE_PLAINTEXT; return FWTS_OK; } /* * fwts_framework_acpica_parse() * parse optarg of comma separated acpica mode flags */ static int fwts_framework_acpica_parse(fwts_framework *fw, char *arg) { char *str; char *token; fw->acpica_mode = 0; for (str = arg; (token = strtok(str, ",")) != NULL; str = NULL) { if (!strcmp(token, "serialized")) fw->acpica_mode |= FWTS_ACPICA_MODE_SERIALIZED; else if (!strcmp(token, "slack")) fw->acpica_mode |= FWTS_ACPICA_MODE_SLACK; else if (!strcmp(token, "ignore-errors")) fw->acpica_mode |= FWTS_ACPICA_MODE_IGNORE_ERRORS; else if (!strcmp(token, "disable-auto-repair")) fw->acpica_mode |= FWTS_ACPICA_MODE_DISABLE_AUTO_REPAIR; else { fprintf(stderr, "--acpica can be serialized, slack, ignore-errors or disable-auto-repair\n"); return FWTS_ERROR; } } if (!fw->log_type) fw->log_type = LOG_TYPE_PLAINTEXT; return FWTS_OK; } /* * fwts_framework_pm_method_parse() * parse optarg of pm-method mode flag */ static int fwts_framework_pm_method_parse(fwts_framework *fw, const char *arg) { #if FWTS_ENABLE_LOGIND if (strcmp(arg, "logind") == 0) fw->pm_method = FWTS_PM_LOGIND; else #endif if (strcmp(arg, "pm-utils") == 0) fw->pm_method = FWTS_PM_PMUTILS; else if (strcmp(arg, "sysfs") == 0) fw->pm_method = FWTS_PM_SYSFS; else { #if FWTS_ENABLE_LOGIND fprintf(stderr, "--pm-method only supports logind, pm-utils and sysfs methods\n"); #else fprintf(stderr, "--pm-method only supports pm-utils and sysfs methods\n"); #endif return FWTS_ERROR; } return FWTS_OK; } /* * fwts_framework_ll_parse() * parse log level option */ static int fwts_framework_ll_parse(fwts_framework *fw, const char *arg) { int i; for (i = 0; log_levels[i].name; i++) { if (!strcmp(arg, log_levels[i].name)) { fw->filter_level = log_levels[i].filter_level; return FWTS_OK; } } fprintf(stderr, "--log-level supports levels:"); for (i = 0; log_levels[i].name; i++) fprintf(stderr, " %s", log_levels[i].name); fprintf(stderr, "\n"); return FWTS_ERROR; } /* * fwts_framework_an_parse() * parse arch (architecture) name option */ static int fwts_framework_an_parse(fwts_framework *fw, const char *arg) { fw->target_arch = fwts_arch_get_arch(arg); if (fw->target_arch == FWTS_ARCH_OTHER) { char *names = fwts_arch_names(); fprintf(stderr, "--arch can be one of: %s\n", names ? names : ""); free(names); return FWTS_ERROR; } return FWTS_OK; } int fwts_framework_options_handler(fwts_framework *fw, int argc, char * const argv[], int option_char, int long_index) { FWTS_UNUSED(argc); switch (option_char) { case 0: switch (long_index) { case 0: /* --stdout-summary */ fw->flags |= FWTS_FLAG_STDOUT_SUMMARY; break; case 1: /* --help */ fwts_framework_syntax(argv); return FWTS_COMPLETE; case 2: /* --results-output */ fwts_framework_strdup(&fw->results_logname, optarg); break; case 3: /* --results-no-separators */ fwts_log_filter_unset_field(LOG_SEPARATOR); break; case 4: /* --log-filter */ fwts_log_filter_unset_field(~0); fwts_log_set_field_filter(optarg); break; case 5: /* --log-fields */ fwts_log_print_fields(); return FWTS_COMPLETE; case 6: /* --log-format */ fwts_log_set_format(optarg); break; case 7: /* --show-progress */ fw->flags = (fw->flags & ~(FWTS_FLAG_QUIET | FWTS_FLAG_SHOW_PROGRESS_DIALOG)) | FWTS_FLAG_SHOW_PROGRESS; break; case 8: /* --show-tests */ fw->flags |= FWTS_FLAG_SHOW_TESTS; break; case 9: /* --klog */ fwts_framework_strdup(&fw->klog, optarg); break; case 10: /* --olog */ fwts_framework_strdup(&fw->olog, optarg); break; case 11: /* --log-width=N */ fwts_log_set_line_width(atoi(optarg)); break; case 12: /* --lspci=pathtolspci */ fwts_framework_strdup(&fw->lspci, optarg); break; case 13: /* --batch */ fw->flags |= FWTS_FLAG_BATCH; break; case 14: /* --interactive */ fw->flags |= FWTS_FLAG_INTERACTIVE; break; case 15: /* --force-clean */ fw->flags |= FWTS_FLAG_FORCE_CLEAN; break; case 16: /* --version */ fwts_framework_show_version(stdout, argv[0]); return FWTS_COMPLETE; case 17: /* --dump */ fw->flags |= FWTS_FLAG_DUMP; break; case 18: /* --table-path */ fwts_framework_strdup(&fw->acpi_table_path, optarg); break; case 19: /* --batch-experimental */ fw->flags |= FWTS_FLAG_BATCH_EXPERIMENTAL; break; case 20: /* --interactive-experimental */ fw->flags |= FWTS_FLAG_INTERACTIVE_EXPERIMENTAL; break; case 21: /* --power-states */ fw->flags |= FWTS_FLAG_POWER_STATES; break; case 22: /* --all */ fw->flags |= FWTS_FLAG_RUN_ALL; break; case 23: /* --show-progress-dialog */ fw->flags = (fw->flags & ~(FWTS_FLAG_QUIET | FWTS_FLAG_SHOW_PROGRESS)) | FWTS_FLAG_SHOW_PROGRESS_DIALOG; break; case 24: /* --skip-test */ if (fwts_framework_skip_test_parse(optarg) != FWTS_OK) return FWTS_COMPLETE; break; case 25: /* --quiet */ fw->flags = (fw->flags & ~(FWTS_FLAG_SHOW_PROGRESS | FWTS_FLAG_SHOW_PROGRESS_DIALOG)) | FWTS_FLAG_QUIET; break; case 26: /* --dumpfile */ fwts_framework_strdup(&fw->acpi_table_acpidump_file, optarg); break; case 27: /* --show-tests-full */ fw->flags |= FWTS_FLAG_SHOW_TESTS_FULL; break; case 28: /* --utils */ fw->flags |= FWTS_FLAG_UTILS; break; case 29: /* --json-data-path */ fwts_framework_strdup(&fw->json_data_path, optarg); break; case 30: /* --json-data-file */ fwts_framework_strdup(&fw->json_data_file, optarg); break; case 31: /* --disassemble-aml */ #if defined(FWTS_HAS_ACPI) fwts_iasl_disassemble_all_to_file(fw, optarg); return FWTS_COMPLETE; #else fprintf(stderr, "option not available on this architecture\n"); return FWTS_ERROR; #endif case 32: /* --log-type */ if (fwts_framework_log_type_parse(fw, optarg) != FWTS_OK) return FWTS_ERROR; break; case 33: /* --unsafe */ fw->flags |= FWTS_FLAG_UNSAFE; break; case 34: /* --filter-error-discard */ if (fwts_framework_filter_error_parse(optarg, &fw->errors_filter_discard) != FWTS_OK) return FWTS_ERROR; break; case 35: /* --filter-error-keep */ if (fwts_framework_filter_error_parse(optarg, &fw->errors_filter_keep) != FWTS_OK) return FWTS_ERROR; break; case 36: /* --acpica-debug */ fw->flags |= FWTS_FLAG_ACPICA_DEBUG; break; case 37: /* --acpica */ if (fwts_framework_acpica_parse(fw, optarg) != FWTS_OK) return FWTS_ERROR; break; case 38: /* --uefitests */ fw->flags |= FWTS_FLAG_UEFI; break; case 39: /* --rsdp */ fw->rsdp = (void *)strtoul(optarg, NULL, 0); break; case 40: /* --pm-method */ if (fwts_framework_pm_method_parse(fw, optarg) != FWTS_OK) return FWTS_ERROR; break; case 41: /* --show-tests-categories */ fw->flags |= FWTS_FLAG_SHOW_TESTS_CATEGORIES; break; case 42: /* --acpitests */ fw->flags |= FWTS_FLAG_ACPI; break; case 43: /* --acpicompliance */ fw->flags |= FWTS_FLAG_COMPLIANCE_ACPI; break; case 44: /* --log-level */ if (fwts_framework_ll_parse(fw, optarg) != FWTS_OK) return FWTS_ERROR; break; case 45: /* --arch */ if (fwts_framework_an_parse(fw, optarg) != FWTS_OK) return FWTS_ERROR; break; case 46: /* --sbbr */ #if defined(FWTS_ARCH_AARCH64) fw->flags |= FWTS_FLAG_SBBR; break; #else fprintf(stderr, "option not available on this architecture\n"); return FWTS_ERROR; #endif case 47: /* --ifv */ fw->flags |= FWTS_FLAG_FIRMWARE_VENDOR; break; case 48: /* --coreboot-log */ fwts_framework_strdup(&fw->clog, optarg); break; case 49: /* --ebbr */ #if defined(FWTS_ARCH_AARCH64) || defined(FWTS_ARCH_RISCV) fw->flags |= FWTS_FLAG_EBBR; break; #else fprintf(stderr, "option not available on this architecture\n"); return FWTS_ERROR; #endif } break; case 'a': /* --all */ fw->flags |= FWTS_FLAG_RUN_ALL; break; case 'b': /* --batch */ fw->flags |= FWTS_FLAG_BATCH; break; case 'd': /* --dump */ fw->flags |= FWTS_FLAG_DUMP; break; case 'D': /* --show-progress-dialog */ fw->flags = (fw->flags & ~(FWTS_FLAG_QUIET | FWTS_FLAG_SHOW_PROGRESS)) | FWTS_FLAG_SHOW_PROGRESS_DIALOG; break; case 'f': fw->flags |= FWTS_FLAG_FORCE_CLEAN; break; case 'h': fwts_framework_syntax(argv); return FWTS_COMPLETE; case '?': fprintf(stderr, "for help, use fwts -h\n"); return FWTS_COMPLETE; case 'i': /* --interactive */ fw->flags |= FWTS_FLAG_INTERACTIVE; break; case 'j': /* --json-data-path */ fwts_framework_strdup(&fw->json_data_path, optarg); break; case 'J': /* --json-data-file */ fwts_framework_strdup(&fw->json_data_file, optarg); break; case 'k': /* --klog */ fwts_framework_strdup(&fw->klog, optarg); break; case 'l': /* --lp-flags */ break; case 'o': /* --olog */ fwts_framework_strdup(&fw->olog, optarg); break; case 'p': /* --show-progress */ fw->flags = (fw->flags & ~(FWTS_FLAG_QUIET | FWTS_FLAG_SHOW_PROGRESS_DIALOG)) | FWTS_FLAG_SHOW_PROGRESS; break; case 'P': /* --power-states */ fw->flags |= FWTS_FLAG_POWER_STATES; break; case 'q': /* --quiet */ fw->flags = (fw->flags & ~(FWTS_FLAG_SHOW_PROGRESS | FWTS_FLAG_SHOW_PROGRESS_DIALOG)) | FWTS_FLAG_QUIET; break; case 'r': /* --results-output */ fwts_framework_strdup(&fw->results_logname, optarg); break; case 's': /* --show-tests */ fw->flags |= FWTS_FLAG_SHOW_TESTS; break; case 'S': /* --skip-test */ if (fwts_framework_skip_test_parse(optarg) != FWTS_OK) return FWTS_COMPLETE; break; case 't': /* --table-path */ fwts_framework_strdup(&fw->acpi_table_path, optarg); break; case 'u': /* --utils */ fw->flags |= FWTS_FLAG_UTILS; break; case 'U': /* --unsafe */ fw->flags |= FWTS_FLAG_UNSAFE; break; case 'v': /* --version */ fwts_framework_show_version(stdout, argv[0]); return FWTS_COMPLETE; case 'w': /* --log-width=N */ fwts_log_set_line_width(atoi(optarg)); break; case 'R': /* --rsdp=addr */ fw->rsdp = (void *)strtoul(optarg, NULL, 0); break; } return FWTS_OK; } /* * fwts_framework_args() * parse args and run tests */ int fwts_framework_args(const int argc, char **argv) { int ret = FWTS_OK; int i; fwts_list tests_to_run; fwts_framework *fw; fwts_list_link *item; if ((fw = (fwts_framework *)calloc(1, sizeof(fwts_framework))) == NULL) return FWTS_ERROR; /* Set the power method to FWTS_PM_UNDEFINED before we parse arguments */ fw->pm_method = FWTS_PM_UNDEFINED; /* Set host/target test architecture defaults */ fw->host_arch = fwts_arch_get_host(); fw->target_arch = fw->host_arch; ret = fwts_args_add_options(fwts_framework_options, fwts_framework_options_handler, NULL); if (ret == FWTS_ERROR) goto tidy_args; fw->firmware_type = fwts_firmware_detect(); fw->magic = FWTS_FRAMEWORK_MAGIC; fw->flags = FWTS_FLAG_DEFAULT | FWTS_FLAG_SHOW_PROGRESS; fw->log_type = LOG_TYPE_PLAINTEXT; fw->filter_level = LOG_LEVEL_ALL; fwts_list_init(&fw->errors_filter_keep); fwts_list_init(&fw->errors_filter_discard); fwts_summary_init(); fwts_framework_strdup(&fw->lspci, FWTS_LSPCI_PATH); fwts_framework_strdup(&fw->results_logname, RESULTS_LOG); fwts_framework_strdup(&fw->json_data_path, FWTS_JSON_DATA_PATH); fwts_list_init(&tests_to_run); fwts_list_init(&tests_to_skip); switch (fwts_args_parse(fw, argc, argv)) { case FWTS_OK: break; case FWTS_COMPLETE: /* All done, e.g. --help, --version */ goto tidy_close; default: ret = FWTS_ERROR; /* Parsing error, or out of memory etc */ goto tidy_close; } for (i = 1; i < argc; i++) if (!strcmp(argv[i], "-")) { fwts_framework_strdup(&fw->results_logname, "stdout"); fw->flags = (fw->flags & ~(FWTS_FLAG_SHOW_PROGRESS | FWTS_FLAG_SHOW_PROGRESS_DIALOG)) | FWTS_FLAG_QUIET; break; } if (fw->flags & FWTS_FLAG_SHOW_TESTS) { fwts_framework_show_tests(fw, false); goto tidy_close; } if (fw->flags & FWTS_FLAG_SHOW_TESTS_FULL) { fwts_framework_show_tests(fw, true); goto tidy_close; } if (fw->flags & FWTS_FLAG_SHOW_TESTS_CATEGORIES) { fwts_framework_show_tests_categories(); goto tidy_close; } if (fw->flags & FWTS_FLAG_DUMP) { fwts_dump_info(fw); goto tidy_close; } if ((fw->lspci == NULL) || (fw->results_logname == NULL)) { ret = FWTS_ERROR; fprintf(stderr, "%s: Memory allocation failure.", argv[0]); goto tidy_close; } /* These are mutually exclusive, both cannot have items */ if ((fwts_list_len(&fw->errors_filter_keep) > 0) && (fwts_list_len(&fw->errors_filter_discard) > 0)) { fprintf(stderr, "The --filter-error-discard and --filter-error-keep options are\n" "mutually exclusive. Specify one or the other, but not both.\n"); ret = FWTS_ERROR; goto tidy_close; } /* Ensure we have just one log type specified for non-filename logging */ if (fwts_log_type_count(fw->log_type) > 1 && fwts_log_get_filename_type(fw->results_logname) != LOG_FILENAME_TYPE_FILE) { fprintf(stderr, "Cannot specify more than one log type when " "logging to stderr or stdout\n"); ret = FWTS_ERROR; goto tidy_close; } /* Results log */ if ((fw->results = fwts_log_open("fwts", fw->results_logname, (fw->flags & FWTS_FLAG_FORCE_CLEAN) ? "w" : "a", fw->log_type)) == NULL) { char *filenames = fwts_log_get_filenames(fw->results_logname, fw->log_type); ret = FWTS_ERROR; fprintf(stderr, "%s: Cannot open results log '%s'" " (you may need to remove it to set proper" " permissions).\n", argv[0], filenames ? filenames : fw->results_logname); if (filenames) free(filenames); goto tidy_close; } /* Init firmware data required by tests */ fwts_devicetree_read(fw); /* Collect up tests to run */ for (i = optind; i < argc; i++) { fwts_framework_test *test; if (*argv[i] == '-') continue; if ((test = fwts_framework_test_find(argv[i])) == NULL) { fprintf(stderr, "No such test '%s', available tests:\n",argv[i]); fwts_framework_show_tests_brief(); ret = FWTS_ERROR; goto tidy; } if (fwts_framework_skip_test(test) == NULL) fwts_list_append(&tests_to_run, test); } /* No options given and no tests, so default to run batch tests */ if (!(FWTS_FLAG_RUN_ALL & fw->flags) && (fwts_list_len(&tests_to_run) == 0)) fw->flags |= FWTS_FLAG_BATCH; /* Find tests that are eligible for running */ fwts_list_foreach(item, &fwts_framework_test_list) { fwts_framework_test *test = fwts_list_data(fwts_framework_test*, item); if (fw->flags & test->flags & FWTS_FLAG_RUN_ALL) if (fwts_framework_skip_test(test) == NULL) fwts_list_append(&tests_to_run, test); } if (!(fw->flags & FWTS_FLAG_QUIET)) { char *filenames = fwts_log_get_filenames(fw->results_logname, fw->log_type); if (filenames) { printf("Running %d tests, results appended to %s\n", fwts_list_len(&tests_to_run), filenames); free(filenames); } } fwts_log_section_begin(fw->results, "heading"); fwts_framework_heading_info(fw, &tests_to_run, argc, argv); fwts_log_section_end(fw->results); fwts_log_section_begin(fw->results, "tests"); fwts_framework_tests_run(fw, &tests_to_run); fwts_log_section_end(fw->results); if (fw->print_summary) { fwts_log_section_begin(fw->results, "summary"); fwts_log_set_owner(fw->results, "summary"); fwts_log_nl(fw); fwts_framework_total_summary(fw); fwts_log_nl(fw); fwts_summary_report(fw, &fwts_framework_test_list); fwts_log_section_end(fw->results); } tidy: fwts_list_free_items(&tests_to_skip, NULL); fwts_list_free_items(&tests_to_run, NULL); fwts_log_close(fw->results); tidy_close: #if defined(FWTS_HAS_ACPI) fwts_acpi_free_tables(); #endif fwts_summary_deinit(); free(fw->lspci); free(fw->results_logname); free(fw->clog); free(fw->klog); free(fw->olog); free(fw->json_data_path); free(fw->json_data_file); free(fw->fdt); fwts_list_free_items(&fw->errors_filter_discard, NULL); fwts_list_free_items(&fw->errors_filter_keep, NULL); fwts_list_free_items(&fwts_framework_test_list, free); /* Failed tests flagged an error */ if ((fw->total.failed > 0) || (fw->total.warning > 0)) ret = FWTS_ERROR; tidy_args: fwts_args_free(); free(fw); return ret; } src/lib/src/fwts_get.c000066400000000000000000000027601465205512700152040ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include "fwts.h" /* * fwts_get() * get a string from a file. used to gather text from /proc or /sys entries */ char *fwts_get(const char *file) { FILE *fp; char buffer[4096]; if ((fp = fopen(file, "r")) == NULL) return NULL; if (fgets(buffer, sizeof(buffer), fp) == NULL) { (void)fclose(fp); return NULL; } (void)fclose(fp); return strdup(buffer); } /* * fwts_get_int() * get an int from a file. used to gather int values from /proc or /sys entries */ int fwts_get_int(const char *file, int *value) { char *data; *value = 0; if ((data = fwts_get(file)) == NULL) { *value = 0; return FWTS_ERROR; } *value = atoi(data); free(data); return FWTS_OK; } src/lib/src/fwts_gpe.c000066400000000000000000000103351465205512700151750ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include "fwts.h" /* * fwts_gpe_free() * free an allocated array of GPE data, length count items */ void fwts_gpe_free(fwts_gpe *gpe, const int count) { if (gpe) { int i; for (i = 0; i < count; i++) { if (gpe[i].name) free(gpe[i].name); } free(gpe); } } /* * fwts_gpe_read() * read in GPE data from /sys/firmware/acpi/interrupts and populate * an array. Last entry is zero as an array terminator. */ int fwts_gpe_read(fwts_gpe **gpes) { DIR *dir; struct dirent *entry; *gpes = NULL; int n = 0; if ((dir = opendir(FWTS_GPE_PATH)) == NULL) return FWTS_ERROR; while ((entry = readdir(dir)) != NULL) { if ((strncmp(entry->d_name, "gpe", 3) == 0) || (strncmp(entry->d_name, "sci",3) == 0)) { fwts_gpe *tmp; tmp = realloc(*gpes, sizeof(fwts_gpe) * (n+1)); if (!tmp) { goto error; } else { char path[PATH_MAX]; char *data; *gpes = tmp; if (((*gpes)[n].name = strdup(entry->d_name)) == NULL) goto error; snprintf(path, sizeof(path), "%s/%s", FWTS_GPE_PATH, entry->d_name); if ((data = fwts_get(path)) != NULL) { (*gpes)[n].count = atoi(data); free(data); } else goto error; n++; } } } (void)closedir(dir); return n; error: fwts_gpe_free(*gpes, n); *gpes = NULL; (void)closedir(dir); return FWTS_ERROR; } /* * fwts_gpe_delta() * calculate count differences between two sets of before and after GPE arrays and * update the result in gpe_delta. */ int fwts_gpe_delta(int **gpe_delta, const fwts_gpe *start, const fwts_gpe *end, const int n) { int i; if (((*gpe_delta) = calloc(n, sizeof(int))) == NULL) return FWTS_ERROR; for (i = 0; i < n; i++) { (*gpe_delta)[i] = end[i].count - start[i].count; } return FWTS_OK; } int fwts_gpe_delta_get(fwts_framework *fw, const fwts_gpe *gpes_start, const fwts_gpe *gpes_end, const int gpe_count, int *sci, int *gpe) { int *deltas = NULL; *sci = 0; *gpe = 0; if (fwts_gpe_delta(&deltas, gpes_start, gpes_end, gpe_count) == FWTS_ERROR) { fwts_log_error(fw, "Cannot calculate GPE delta, out of memory."); return FWTS_ERROR; } else { int i; for (i = 0; i < gpe_count; i++) { if ((strcmp(gpes_end[i].name, "sci") == 0) && (deltas[i] > 0)) *sci += deltas[i]; if ((strncmp(gpes_end[i].name, "gpe", 3) == 0) && (deltas[i] > 0)) *gpe += deltas[i]; } } free(deltas); return FWTS_OK; } /* * fwts_gpe_test() * test for GPE changes between start and end GPE samples */ void fwts_gpe_test(fwts_framework *fw, const fwts_gpe *gpes_start, const fwts_gpe *gpes_end, const int gpe_count) { int *deltas = NULL; int sci = 0; int gpe = 0; if (fwts_gpe_delta(&deltas, gpes_start, gpes_end, gpe_count) == FWTS_ERROR) fwts_log_error(fw, "Cannot calculate GPE delta, out of memory."); else { int i; for (i = 0; i < gpe_count; i++) { if ((strcmp(gpes_end[i].name, "sci") == 0) && (deltas[i] > 0)) { fwts_log_info(fw, "Got %d SCI interrupt(s).", deltas[i]); sci += deltas[i]; } if ((strncmp(gpes_end[i].name, "gpe", 3) == 0) && (deltas[i] > 0)) { fwts_log_info(fw, "Got %d interrupt(s) on GPE %s.", deltas[i], gpes_end[i].name); gpe += deltas[i]; } } } free(deltas); if (sci == 0) fwts_failed(fw, LOG_LEVEL_HIGH, "NoSCIInterrupts", "Did not detect any SCI interrupts."); if (gpe == 0) fwts_failed(fw, LOG_LEVEL_HIGH, "NoGPEInterrupts", "Did not detect any GPE interrupts."); } src/lib/src/fwts_guid.c000066400000000000000000000041631465205512700153540ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include "fwts.h" /* * fwts_guid_buf_to_str() * format given GUID 'guid' into a string guid_str. * guid_str needs to be at least 37 chars long */ void fwts_guid_buf_to_str(const uint8_t *guid, char *guid_str, const size_t guid_str_len) { if (guid_str && guid_str_len > 36) snprintf(guid_str, guid_str_len, "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X", guid[3], guid[2], guid[1], guid[0], guid[5], guid[4], guid[7], guid[6], guid[8], guid[9], guid[10], guid[11], guid[12], guid[13], guid[14], guid[15]); } /* * fwts_guid_str_to_buf() * convert a GUID string back to a 16 byte GUID * guid needs to be at least 16 chars long */ void fwts_guid_str_to_buf(const char *guid_str, uint8_t *guid, const size_t guid_len) { if (guid && guid_len >= 16) { sscanf(guid_str, "%2hhx%2hhx%2hhx%2hhx-%2hhx%2hhx-%2hhx%2hhx-%2hhx%2hhx-%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx", &guid[3], &guid[2], &guid[1], &guid[0], &guid[5], &guid[4], &guid[7], &guid[6], &guid[8], &guid[9], &guid[10], &guid[11], &guid[12], &guid[13], &guid[14], &guid[15]); } } /* * fwts_guid_match() * compare whether two GUIDs are the same */ bool fwts_guid_match(const uint8_t *guid, const uint8_t *guid2, const size_t guid_size) { size_t i; for (i = 0; i < guid_size; i++) { if (guid[i] != guid2[i]) return false; } return true; } src/lib/src/fwts_hwinfo.c000066400000000000000000000722211465205512700157160ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "fwts.h" #define FWTS_HWINFO_LISTS_SAME (0) #define FWTS_HWINFO_LISTS_DIFFER (1) #define FWTS_HWINFO_LISTS_OUT_OF_MEMORY (-1) #define FWTS_HWINFO_SYS_NET "/sys/class/net" #define FWTS_HWINFO_SYS_INPUT "/sys/class/input" #define FWTS_HWINFO_SYS_BLUETOOTH "/sys/class/bluetooth" #define FWTS_HWINFO_SYS_TYPEC "/sys/class/typec" #define FWTS_HWINFO_SYS_SCSI_DISK "/sys/class/scsi_disk" #define FWTS_HWINFO_SYS_DRM "/sys/class/drm" typedef struct { char name[NAME_MAX + 1]; /* PCI name */ uint8_t config[64]; /* PCI config data */ ssize_t config_len; /* Length of config data */ } fwts_pci_config; typedef struct { char *name; /* Network device name */ char *addr; /* Address */ char *hw_addr; /* H/W MAC address */ } fwts_net_config; typedef struct { char *name; /* Input class name */ char *dev_name; /* Input device name */ char *phys; /* Physical name */ } fwts_input_config; typedef struct { char *name; /* class name */ char *bt_name; /* BT name */ char *address; /* BT address */ char *bus; /* Bus device is on */ char *type; /* Type info */ } fwts_bluetooth_config; typedef struct { char *name; char *data_role; char *port_type; char *power_role; char *power_operation_mode; } fwts_typec_config; typedef struct { char *name; char *model; char *state; char *vendor; } fwts_scsi_disk_config; typedef struct { char *name; char *status; char *enabled; } fwts_drm_config; /* compare H/W info */ typedef int (*hwinfo_cmp)(void *data1, void *data2); /* dump H/W info */ typedef void (*hwinfo_dump)(fwts_framework *fw, fwts_list *list); static char *fwts_hwinfo_data_get(const char *sys, const char *dev, const char *file) { char path[PATH_MAX]; char *data; snprintf(path, sizeof(path), "%s/%s/%s", sys, dev, file); if ((data = fwts_get(path)) == NULL) return strdup(""); fwts_chop_newline(data); return data; } /* * fwts_hwinfo_bluetooth_free() * free bluetooth data */ static void fwts_hwinfo_bluetooth_free(void *data) { fwts_bluetooth_config *config = (fwts_bluetooth_config *)data; free(config->name); free(config->bt_name); free(config->address); free(config->bus); free(config->type); free(config); } /* * fwts_hwinfo_bluetooth_name_cmp() * compare bluetooth config device name for sorting purposes */ static int fwts_hwinfo_bluetooth_name_cmp(void *data1, void *data2) { fwts_bluetooth_config *config1 = (fwts_bluetooth_config *)data1; fwts_bluetooth_config *config2 = (fwts_bluetooth_config *)data2; return strcmp(config1->name, config2->name); } /* * fwts_hwinfo_bluetooth_cmp() * compare bluetooth config data */ static int fwts_hwinfo_bluetooth_config_cmp(void *data1, void *data2) { fwts_bluetooth_config *config1 = (fwts_bluetooth_config *)data1; fwts_bluetooth_config *config2 = (fwts_bluetooth_config *)data2; return strcmp(config1->name, config2->name) || strcmp(config1->bt_name, config2->bt_name) || strcmp(config1->address, config2->address) || strcmp(config1->bus, config2->bus) || strcmp(config1->type, config2->type); } /* * fwts_hwinfo_bluetooth_get() * read a specific bluetooth device config */ static int fwts_hwinfo_bluetooth_get( fwts_framework *fw, fwts_list *devices) { DIR *dp; struct dirent *d; fwts_list_init(devices); if ((dp = opendir(FWTS_HWINFO_SYS_BLUETOOTH)) == NULL) { fwts_log_error(fw, "Cannot open %s to scan bluetooth devices.", FWTS_HWINFO_SYS_BLUETOOTH); return FWTS_ERROR; } while ((d = readdir(dp)) != NULL) { fwts_bluetooth_config *bluetooth_config; if (d->d_name[0] == '.') continue; if ((bluetooth_config = calloc(1, sizeof(*bluetooth_config))) == NULL) { fwts_log_error(fw, "Cannot allocate bluetooth config data."); break; } bluetooth_config->name = strdup(d->d_name); bluetooth_config->bt_name = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_BLUETOOTH, d->d_name, "name"); bluetooth_config->address = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_BLUETOOTH, d->d_name, "address"); bluetooth_config->bus = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_BLUETOOTH, d->d_name, "bus"); bluetooth_config->type = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_BLUETOOTH, d->d_name, "type"); if (bluetooth_config->name == NULL || bluetooth_config->bt_name == NULL || bluetooth_config->address == NULL || bluetooth_config->bus == NULL || bluetooth_config->type == NULL) { fwts_log_error(fw, "Cannot allocate bluetooth device attributes."); fwts_hwinfo_bluetooth_free(bluetooth_config); break; } fwts_list_add_ordered(devices, bluetooth_config, fwts_hwinfo_bluetooth_name_cmp); } (void)closedir(dp); return FWTS_OK; } /* * fwts_hwinfo_bluetooth_dump() * simple bluetooth config dump */ static void fwts_hwinfo_bluetooth_dump(fwts_framework *fw, fwts_list *devices) { fwts_list_link *item; fwts_list_foreach(item, devices) { fwts_bluetooth_config *bluetooth_config = fwts_list_data(fwts_bluetooth_config *, item); fwts_log_info_verbatim(fw, " Device: %s", bluetooth_config->name); fwts_log_info_verbatim(fw, " Name: %s", bluetooth_config->bt_name); fwts_log_info_verbatim(fw, " Address: %s", bluetooth_config->address); fwts_log_info_verbatim(fw, " Bus: %s", bluetooth_config->bus); fwts_log_info_verbatim(fw, " Type: %s", bluetooth_config->type); fwts_log_nl(fw); } } /* * fwts_hwinfo_input_free() * free input data */ static void fwts_hwinfo_input_free(void *data) { fwts_input_config *config = (fwts_input_config *)data; free(config->name); free(config->dev_name); free(config->phys); free(config); } /* * fwts_hwinfo_input_name_cmp() * compare input config device class name for sorting purposes */ static int fwts_hwinfo_input_name_cmp(void *data1, void *data2) { fwts_input_config *config1 = (fwts_input_config *)data1; fwts_input_config *config2 = (fwts_input_config *)data2; return strcmp(config1->name, config2->name); } /* * fwts_hwinfo_input_cmp() * compare input config data */ static int fwts_hwinfo_input_config_cmp(void *data1, void *data2) { fwts_input_config *config1 = (fwts_input_config *)data1; fwts_input_config *config2 = (fwts_input_config *)data2; return strcmp(config1->name, config2->name) || strcmp(config1->dev_name, config2->dev_name) || strcmp(config1->phys, config2->phys); } /* * fwts_hwinfo_input_get() * read a specific input device config */ static int fwts_hwinfo_input_get( fwts_framework *fw, fwts_list *devices) { DIR *dp; struct dirent *d; fwts_list_init(devices); if ((dp = opendir(FWTS_HWINFO_SYS_INPUT)) == NULL) { fwts_log_error(fw, "Cannot open %s to scan input devices.", FWTS_HWINFO_SYS_INPUT); return FWTS_ERROR; } while ((d = readdir(dp)) != NULL) { fwts_input_config *input_config; if (d->d_name[0] == '.') continue; if (!strncmp(d->d_name, "input", 5)) { if ((input_config = calloc(1, sizeof(*input_config))) == NULL) { fwts_log_error(fw, "Cannot allocate input config data."); break; } input_config->dev_name = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_INPUT, d->d_name, "name"); input_config->phys = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_INPUT, d->d_name, "phys"); } else if (!strncmp(d->d_name, "event", 5) || !strncmp(d->d_name, "mouse", 5)) { if ((input_config = calloc(1, sizeof(*input_config))) == NULL) { fwts_log_error(fw, "Cannot allocate input config data."); break; } input_config->dev_name = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_INPUT, d->d_name, "device/name"); input_config->phys = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_INPUT, d->d_name, "device/phys"); } else { /* Don't know what type it is, ignore */ continue; } input_config->name = strdup(d->d_name); if (input_config->name == NULL || input_config->dev_name == NULL || input_config->phys == NULL) { fwts_log_error(fw, "Cannot allocate input device attributes."); fwts_hwinfo_input_free(input_config); break; } fwts_list_add_ordered(devices, input_config, fwts_hwinfo_input_name_cmp); } (void)closedir(dp); return FWTS_OK; } /* * fwts_hwinfo_input_dump() * simple input config dump */ static void fwts_hwinfo_input_dump(fwts_framework *fw, fwts_list *devices) { fwts_list_link *item; fwts_list_foreach(item, devices) { fwts_input_config *input_config = fwts_list_data(fwts_input_config *, item); fwts_log_info_verbatim(fw, " Device: %s", input_config->name); fwts_log_info_verbatim(fw, " Device Name: %s", input_config->dev_name); fwts_log_info_verbatim(fw, " Phy: %s", input_config->phys); fwts_log_nl(fw); } } /* * fwts_hwinfo_net_free() * free net config data */ static void fwts_hwinfo_net_free(void *data) { fwts_net_config *config = (fwts_net_config *)data; free(config->name); free(config->addr); free(config->hw_addr); free(config); } /* * fwts_hwinfo_net_name_cmp() * compare net config device name for sorting purposes */ static int fwts_hwinfo_net_name_cmp(void *data1, void *data2) { fwts_net_config *config1 = (fwts_net_config *)data1; fwts_net_config *config2 = (fwts_net_config *)data2; return strcmp(config1->name, config2->name); } /* * fwts_hwinfo_net_cmp() * compare net config data */ static int fwts_hwinfo_net_cmp(void *data1, void *data2) { fwts_net_config *config1 = (fwts_net_config *)data1; fwts_net_config *config2 = (fwts_net_config *)data2; return strcmp(config1->name, config2->name) || strcmp(config1->hw_addr, config2->hw_addr); } /* * fwts_hwinfo_new_get() * read a specific network interface config */ static int fwts_hwinfo_net_get( fwts_framework *fw, fwts_list *devices) { DIR *dp; struct dirent *d; int sock; fwts_list_init(devices); if ((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0) { fwts_log_error(fw, "Cannot open socket to interrogate network devices."); return FWTS_ERROR; } if ((dp = opendir(FWTS_HWINFO_SYS_NET)) == NULL) { fwts_log_error(fw, "Cannot open %s to scan network devices.", FWTS_HWINFO_SYS_NET); (void)close(sock); return FWTS_ERROR; } while ((d = readdir(dp)) != NULL) { struct ifreq buf; struct sockaddr_in sockaddr; fwts_net_config *net_config; if (d->d_name[0] == '.') continue; if ((net_config = calloc(1, sizeof(*net_config))) == NULL) { fwts_log_error(fw, "Cannot allocate net config data."); break; } net_config->name = strdup(d->d_name); if (net_config->name == NULL) { fwts_log_error(fw, "Cannot allocate net config name."); fwts_hwinfo_net_free(net_config); break; } memset(&buf, 0, sizeof(buf)); strlcpy(buf.ifr_name, d->d_name, sizeof(buf.ifr_name)); if (ioctl(sock, SIOCGIFHWADDR, &buf) < 0) { fwts_log_error(fw, "Cannot get network information for device %s.", d->d_name); fwts_hwinfo_net_free(net_config); continue; } net_config->hw_addr = strdup(ether_ntoa(((struct ether_addr *)&buf.ifr_hwaddr.sa_data))); if (net_config->hw_addr == NULL) { fwts_log_error(fw, "Cannot allocate net config address."); fwts_hwinfo_net_free(net_config); break; } memset(&buf, 0, sizeof(buf)); strlcpy(buf.ifr_name, d->d_name, sizeof(buf.ifr_name)); if (ioctl(sock, SIOCGIFADDR, &buf) < 0) { if (errno != EADDRNOTAVAIL) fwts_log_error(fw, "Cannot get address for device %s.", d->d_name); } /* GCC 4.4 is rather overly pedantic in strict aliasing warnings, this avoids it */ memcpy(&sockaddr, &buf.ifr_addr, sizeof(sockaddr)); net_config->addr = strdup(inet_ntoa((struct in_addr)sockaddr.sin_addr)); if (net_config->addr == NULL) { fwts_log_error(fw, "Cannot allocate net config H/W address."); fwts_hwinfo_net_free(net_config); break; } fwts_list_add_ordered(devices, net_config, fwts_hwinfo_net_name_cmp); } (void)closedir(dp); (void)close(sock); return FWTS_OK; } /* * fwts_hwinfo_net_dump() * simple net config dump */ static void fwts_hwinfo_net_dump(fwts_framework *fw, fwts_list *devices) { fwts_list_link *item; fwts_list_foreach(item, devices) { fwts_net_config *net_config = fwts_list_data(fwts_net_config *, item); fwts_log_info_verbatim(fw, " Device: %s", net_config->name); fwts_log_info_verbatim(fw, " Address: %s", net_config->addr); fwts_log_info_verbatim(fw, " H/W Address: %s", net_config->hw_addr); fwts_log_nl(fw); } } /* * fwts_hwinfo_pci_get() * read a specific PCI config based on class code, * retuning matching PCI configs into the configs list */ static int fwts_hwinfo_pci_get( fwts_framework *fw, const uint8_t class_code, fwts_list *configs) { DIR *pci; struct dirent *d; fwts_list_init(configs); if ((pci = opendir(FWTS_PCI_DEV_PATH)) == NULL) { fwts_log_error(fw, "Cannot open %s to scan PCI devices.", FWTS_PCI_DEV_PATH); return FWTS_ERROR; } while ((d = readdir(pci)) != NULL) { ssize_t n; int fd; fwts_pci_config *pci_config; uint8_t config[64]; char path[PATH_MAX]; if (d->d_name[0] == '.') continue; snprintf(path, sizeof(path), FWTS_PCI_DEV_PATH "/%s/config", d->d_name); if ((fd = open(path, O_RDONLY)) < 0) { fwts_log_error(fw, "Cannot open PCI config from %s.", d->d_name); continue; } if ((n = read(fd, config, sizeof(config))) < 0) { fwts_log_error(fw, "Cannot read PCI config from %s.", d->d_name); (void)close(fd); continue; } (void)close(fd); if (config[FWTS_PCI_CONFIG_CLASS_CODE] != class_code) continue; if ((pci_config = (fwts_pci_config *)calloc(1, sizeof(*pci_config))) == NULL) { fwts_log_error(fw, "Cannot allocate PCI config."); continue; } memcpy(pci_config->config, config, n); pci_config->config_len = n; strlcpy(pci_config->name, d->d_name, sizeof(pci_config->name)); fwts_list_append(configs, pci_config); } (void)closedir(pci); return FWTS_OK; } /* * fwts_hwinfo_pci_config_cmp() * compare PCI configs */ static int fwts_hwinfo_pci_config_cmp(void *data1, void *data2) { fwts_pci_config *pci_config1 = (fwts_pci_config *)data1; fwts_pci_config *pci_config2 = (fwts_pci_config *)data2; return (pci_config1->config_len != pci_config2->config_len || memcmp(pci_config1->config, pci_config2->config, pci_config1->config_len) || strcmp(pci_config1->name, pci_config2->name)); } /* * fwts_hwinfo_pci_dump() * simple PCI config dump */ static void fwts_hwinfo_pci_dump(fwts_framework *fw, fwts_list *configs) { fwts_list_link *item; fwts_list_foreach(item, configs) { ssize_t n; fwts_pci_config *pci_config = fwts_list_data(fwts_pci_config *, item); fwts_log_info_verbatim(fw, " PCI: %s, VID: %2.2" PRIx8 ":%2.2" PRIx8 ", Class: %2.2" PRIx8 ":%2.2" PRIx8 " (%s)", pci_config->name, pci_config->config[FWTS_PCI_CONFIG_VENDOR_ID], pci_config->config[FWTS_PCI_CONFIG_DEVICE_ID], pci_config->config[FWTS_PCI_CONFIG_CLASS_CODE], pci_config->config[FWTS_PCI_CONFIG_SUBCLASS], fwts_pci_description(pci_config->config[FWTS_PCI_CONFIG_CLASS_CODE], pci_config->config[FWTS_PCI_CONFIG_SUBCLASS])); fwts_log_info_verbatim(fw, " Config:"); /* and do a raw hex dump of the config space */ for (n = 0; n < pci_config->config_len; n += 16) { ssize_t left = pci_config->config_len - n; char buffer[128]; fwts_dump_raw_data(buffer, sizeof(buffer), pci_config->config + n, n, left > 16 ? 16 : left); fwts_log_info_verbatim(fw, " %s", buffer); } fwts_log_nl(fw); } } /* * fwts_hwinfo_typec_free() * free Type-C data */ static void fwts_hwinfo_typec_free(void *data) { fwts_typec_config *config = (fwts_typec_config *)data; free(config->name); free(config->data_role); free(config->port_type); free(config->power_role); free(config->power_operation_mode); free(config); } /* * fwts_hwinfo_typec_cmp() * compare Type-C config data */ static int fwts_hwinfo_typec_config_cmp(void *data1, void *data2) { fwts_typec_config *config1 = (fwts_typec_config *)data1; fwts_typec_config *config2 = (fwts_typec_config *)data2; return strcmp(config1->name, config2->name) || strcmp(config1->data_role, config2->data_role) || strcmp(config1->port_type, config2->port_type) || strcmp(config1->power_role, config2->power_role) || strcmp(config1->power_operation_mode, config2->power_operation_mode); } /* * fwts_hwinfo_typec_get() * read a specific Type-C device config */ static int fwts_hwinfo_typec_get( fwts_framework *fw, fwts_list *devices) { DIR *dp; struct dirent *d; fwts_list_init(devices); if ((dp = opendir(FWTS_HWINFO_SYS_TYPEC)) == NULL) { fwts_log_error(fw, "Cannot open %s to scan Type-C devices.", FWTS_HWINFO_SYS_TYPEC); return FWTS_ERROR; } while ((d = readdir(dp)) != NULL) { fwts_typec_config *typec_config; if (d->d_name[0] == '.') continue; if ((typec_config = calloc(1, sizeof(*typec_config))) == NULL) { fwts_log_error(fw, "Cannot allocate Type-C config data."); break; } typec_config->name = strdup(d->d_name); typec_config->data_role = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_TYPEC, d->d_name, "data_role"); typec_config->port_type = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_TYPEC, d->d_name, "port_type"); typec_config->power_role = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_TYPEC, d->d_name, "power_role"); typec_config->power_operation_mode = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_TYPEC, d->d_name, "power_operation_mode"); if (typec_config->name == NULL || typec_config->data_role == NULL || typec_config->port_type == NULL || typec_config->power_role == NULL || typec_config->power_operation_mode == NULL) { fwts_log_error(fw, "Cannot allocate Type-C device attributes."); fwts_hwinfo_typec_free(typec_config); break; } fwts_list_append(devices, typec_config); } (void)closedir(dp); return FWTS_OK; } /* * fwts_hwinfo_typec_dump() * simple Type-C config dump */ static void fwts_hwinfo_typec_dump(fwts_framework *fw, fwts_list *devices) { fwts_list_link *item; fwts_list_foreach(item, devices) { fwts_typec_config *typec_config = fwts_list_data(fwts_typec_config *, item); fwts_log_info_verbatim(fw, " Name: %s", typec_config->name); fwts_log_info_verbatim(fw, " Data Role: %s", typec_config->data_role); fwts_log_info_verbatim(fw, " Port Type: %s", typec_config->port_type); fwts_log_info_verbatim(fw, " Power Role: %s", typec_config->power_role); fwts_log_info_verbatim(fw, " Power Mode: %s", typec_config->power_operation_mode); fwts_log_nl(fw); } } /* * fwts_hwinfo_scsi_disk_free() * free SCSI disk data */ static void fwts_hwinfo_scsi_disk_free(void *data) { fwts_scsi_disk_config *config = (fwts_scsi_disk_config *)data; free(config->name); free(config->model); free(config->state); free(config->vendor); free(config); } /* * fwts_hwinfo_scsi_disk_cmp() * compare SCSI disk config data */ static int fwts_hwinfo_scsi_disk_config_cmp(void *data1, void *data2) { fwts_scsi_disk_config *config1 = (fwts_scsi_disk_config *)data1; fwts_scsi_disk_config *config2 = (fwts_scsi_disk_config *)data2; return strcmp(config1->name, config2->name) || strcmp(config1->model, config2->model) || strcmp(config1->state, config2->state) || strcmp(config1->vendor, config2->vendor); } /* * fwts_hwinfo_scsi_disk_get() * read a specific SCSI disk device config */ static int fwts_hwinfo_scsi_disk_get( fwts_framework *fw, fwts_list *devices) { DIR *dp; struct dirent *d; fwts_list_init(devices); if ((dp = opendir(FWTS_HWINFO_SYS_SCSI_DISK)) == NULL) { fwts_log_error(fw, "Cannot open %s to scan SCSI disk devices.", FWTS_HWINFO_SYS_SCSI_DISK); return FWTS_ERROR; } while ((d = readdir(dp)) != NULL) { fwts_scsi_disk_config *scsi_disk_config; if (d->d_name[0] == '.') continue; if ((scsi_disk_config = calloc(1, sizeof(*scsi_disk_config))) == NULL) { fwts_log_error(fw, "Cannot allocate SCSI disk config data."); break; } scsi_disk_config->name = strdup(d->d_name); scsi_disk_config->model = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_SCSI_DISK, d->d_name, "device/model"); scsi_disk_config->state = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_SCSI_DISK, d->d_name, "device/state"); scsi_disk_config->vendor = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_SCSI_DISK, d->d_name, "device/vendor"); if (scsi_disk_config->name == NULL || scsi_disk_config->model == NULL || scsi_disk_config->state == NULL || scsi_disk_config->vendor == NULL) { fwts_log_error(fw, "Cannot allocate SCSI disk device attributes."); fwts_hwinfo_scsi_disk_free(scsi_disk_config); break; } fwts_list_append(devices, scsi_disk_config); } (void)closedir(dp); return FWTS_OK; } /* * fwts_hwinfo_scsi_disk_dump() * simple SCSI disk config dump */ static void fwts_hwinfo_scsi_disk_dump(fwts_framework *fw, fwts_list *devices) { fwts_list_link *item; fwts_list_foreach(item, devices) { fwts_scsi_disk_config *scsi_disk_config = fwts_list_data(fwts_scsi_disk_config *, item); fwts_log_info_verbatim(fw, " Name: %s", scsi_disk_config->name); fwts_log_info_verbatim(fw, " Vendor: %s", scsi_disk_config->vendor); fwts_log_info_verbatim(fw, " Model: %s", scsi_disk_config->model); fwts_log_info_verbatim(fw, " State: %s", scsi_disk_config->state); fwts_log_nl(fw); } } /* * fwts_hwinfo_drm_free() * free DRM data */ static void fwts_hwinfo_drm_free(void *data) { fwts_drm_config *config = (fwts_drm_config *)data; free(config->name); free(config->status); free(config->enabled); free(config); } /* * fwts_hwinfo_drm_cmp() * compare DRM config data */ static int fwts_hwinfo_drm_config_cmp(void *data1, void *data2) { fwts_drm_config *config1 = (fwts_drm_config *)data1; fwts_drm_config *config2 = (fwts_drm_config *)data2; return strcmp(config1->name, config2->name) || strcmp(config1->status, config2->status) || strcmp(config1->enabled, config2->enabled); } /* * fwts_hwinfo_drm_get() * read a specific DRM device config */ static int fwts_hwinfo_drm_get( fwts_framework *fw, fwts_list *devices) { DIR *dp; struct dirent *d; fwts_list_init(devices); if ((dp = opendir(FWTS_HWINFO_SYS_DRM)) == NULL) { fwts_log_error(fw, "Cannot open %s to scan DRM devices.", FWTS_HWINFO_SYS_DRM); return FWTS_ERROR; } while ((d = readdir(dp)) != NULL) { fwts_drm_config *drm_config; if (d->d_name[0] == '.') continue; if (strncmp(d->d_name, "card", strlen("card")) != 0) continue; if ((drm_config = calloc(1, sizeof(*drm_config))) == NULL) { fwts_log_error(fw, "Cannot allocate DRM config data."); break; } drm_config->name = strdup(d->d_name); drm_config->status = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_DRM, d->d_name, "status"); drm_config->enabled = fwts_hwinfo_data_get(FWTS_HWINFO_SYS_DRM, d->d_name, "enabled"); if (drm_config->name == NULL || drm_config->status == NULL || drm_config->enabled == NULL) { fwts_log_error(fw, "Cannot allocate DRM device attributes."); fwts_hwinfo_drm_free(drm_config); break; } fwts_list_append(devices, drm_config); } (void)closedir(dp); return FWTS_OK; } /* * fwts_hwinfo_drm_dump() * simple SCSI disk config dump */ static void fwts_hwinfo_drm_dump(fwts_framework *fw, fwts_list *devices) { fwts_list_link *item; fwts_list_foreach(item, devices) { fwts_drm_config *drm_config = fwts_list_data(fwts_drm_config *, item); fwts_log_info_verbatim(fw, " Name: %s", drm_config->name); fwts_log_info_verbatim(fw, " Status: %s", drm_config->status); fwts_log_info_verbatim(fw, " Enabled: %s", drm_config->enabled); fwts_log_nl(fw); } } /* * fwts_hwinfo_lists_dump() * dump out contents of two different lists */ static void fwts_hwinfo_lists_dump( fwts_framework *fw, hwinfo_dump dump, fwts_list *l1, fwts_list *l2, const char *message) { fwts_log_info(fw, "%s configurations differ, before:", message); if (fwts_list_len(l1)) dump(fw, l1); else fwts_log_info(fw, " (empty)"); fwts_log_info(fw, "versus after:"); if (fwts_list_len(l2)) dump(fw, l2); else fwts_log_info(fw, " (empty)"); fwts_log_nl(fw); } /* * fwts_hwinfo_lists_differ() * check lists to see if their contents differ, return 1 for differ, 0 for match, * -1 for out of memory error */ static int fwts_hwinfo_lists_differ( hwinfo_cmp cmp, fwts_list *l1, fwts_list *l2) { fwts_list_link *item1; fwts_list_link *item2; /* Both null - both the same then */ if ((l1 == NULL) && (l2 == NULL)) return FWTS_HWINFO_LISTS_SAME; /* Either null and the other not? */ if ((l1 == NULL) || (l2 == NULL)) return FWTS_HWINFO_LISTS_DIFFER; /* Different length, then they differ */ if (fwts_list_len(l1) != fwts_list_len(l2)) return FWTS_HWINFO_LISTS_DIFFER; item1 = fwts_list_head(l1); item2 = fwts_list_head(l2); while ((item1 != NULL) && (item2 != NULL)) { if (cmp(fwts_list_data(void *, item1), fwts_list_data(void *, item2))) return FWTS_HWINFO_LISTS_DIFFER; item1 = fwts_list_next(item1); item2 = fwts_list_next(item2); } if ((item1 == NULL) && (item2 == NULL)) return FWTS_HWINFO_LISTS_SAME; else return FWTS_HWINFO_LISTS_DIFFER; } /* * fwts_hwinfo_lists_compare() * check for differences in a list and if any found, dump out both lists */ static void fwts_hwinfo_lists_compare( fwts_framework *fw, hwinfo_cmp cmp, hwinfo_dump dump, fwts_list *l1, fwts_list *l2, const char *message, int *differences) { if (fwts_hwinfo_lists_differ(cmp, l1, l2) == FWTS_HWINFO_LISTS_DIFFER) { (*differences)++; fwts_hwinfo_lists_dump(fw, dump, l1, l2, message); } } /* * fwts_hwinfo_get() * gather H/W information */ int fwts_hwinfo_get(fwts_framework *fw, fwts_hwinfo *hwinfo) { FWTS_UNUSED(fw); /* PCI devices */ fwts_hwinfo_pci_get(fw, FWTS_PCI_CLASS_CODE_NETWORK_CONTROLLER, &hwinfo->network); fwts_hwinfo_pci_get(fw, FWTS_PCI_CLASS_CODE_DISPLAY_CONTROLLER, &hwinfo->videocard); /* Network devices */ fwts_hwinfo_net_get(fw, &hwinfo->netdevs); fwts_hwinfo_input_get(fw, &hwinfo->input); /* Bluetooth devices */ fwts_hwinfo_bluetooth_get(fw, &hwinfo->bluetooth); /* Type-C devices */ fwts_hwinfo_typec_get(fw, &hwinfo->typec); /* SCSI disk devices */ fwts_hwinfo_scsi_disk_get(fw, &hwinfo->scsi_disk); /* DRM devices */ fwts_hwinfo_drm_get(fw, &hwinfo->drm); return FWTS_OK; } /* * fwts_hwinfo_compare() * compare data in each hwinfo list, produce a diff comparison output */ void fwts_hwinfo_compare(fwts_framework *fw, fwts_hwinfo *hwinfo1, fwts_hwinfo *hwinfo2, int *differences) { *differences = 0; /* PCI devices */ fwts_hwinfo_lists_compare(fw, fwts_hwinfo_pci_config_cmp, fwts_hwinfo_pci_dump, &hwinfo1->network, &hwinfo2->network, "Network Controller", differences); fwts_hwinfo_lists_compare(fw, fwts_hwinfo_pci_config_cmp, fwts_hwinfo_pci_dump, &hwinfo1->videocard, &hwinfo2->videocard, "Video", differences); /* Network devices */ fwts_hwinfo_lists_compare(fw, fwts_hwinfo_net_cmp, fwts_hwinfo_net_dump, &hwinfo1->netdevs, &hwinfo2->netdevs, "Network", differences); /* Input devices */ fwts_hwinfo_lists_compare(fw, fwts_hwinfo_input_config_cmp, fwts_hwinfo_input_dump, &hwinfo1->input, &hwinfo2->input, "Input Devices", differences); /* Bluetooth devices */ fwts_hwinfo_lists_compare(fw, fwts_hwinfo_bluetooth_config_cmp, fwts_hwinfo_bluetooth_dump, &hwinfo1->bluetooth, &hwinfo2->bluetooth, "Bluetooth Device", differences); /* Type-C devices */ fwts_hwinfo_lists_compare(fw, fwts_hwinfo_typec_config_cmp, fwts_hwinfo_typec_dump, &hwinfo1->typec, &hwinfo2->typec, "Type-C Device", differences); /* SCSI disk devices */ fwts_hwinfo_lists_compare(fw, fwts_hwinfo_scsi_disk_config_cmp, fwts_hwinfo_scsi_disk_dump, &hwinfo1->scsi_disk, &hwinfo2->scsi_disk, "SCSI Disk Device", differences); /* DRM devices */ fwts_hwinfo_lists_compare(fw, fwts_hwinfo_drm_config_cmp, fwts_hwinfo_drm_dump, &hwinfo1->drm, &hwinfo2->drm, "DRM Device", differences); } /* * fwts_hwinfo_free() * free hwinfo lists */ int fwts_hwinfo_free(fwts_hwinfo *hwinfo) { if (hwinfo == NULL) return FWTS_ERROR; /* PCI devices */ fwts_list_free_items(&hwinfo->network, free); fwts_list_free_items(&hwinfo->videocard, free); /* Network devices */ fwts_list_free_items(&hwinfo->netdevs, fwts_hwinfo_net_free); /* Input devices */ fwts_list_free_items(&hwinfo->input, fwts_hwinfo_input_free); /* Bluetooth devices */ fwts_list_free_items(&hwinfo->bluetooth, fwts_hwinfo_bluetooth_free); /* Type-C devices */ fwts_list_free_items(&hwinfo->typec, fwts_hwinfo_typec_free); /* SCSI disk devices */ fwts_list_free_items(&hwinfo->scsi_disk, fwts_hwinfo_scsi_disk_free); /* DRM devices */ fwts_list_free_items(&hwinfo->drm, fwts_hwinfo_drm_free); return FWTS_OK; } src/lib/src/fwts_iasl.c000066400000000000000000000200031465205512700153430ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include #include "fwts.h" #include "fwts_iasl_interface.h" #include "fwts_acpica.h" /* For ACPICA interface */ static char *iasl_cached_table_filename[ACPI_MAX_TABLES]; static char *iasl_cached_table_name[ACPI_MAX_TABLES]; static bool iasl_init = false; static int cached_max = 0; /* * fwts_iasl_dump_aml_to_file() * write AML data of given length to file amlfile. */ static int fwts_iasl_dump_aml_to_file( fwts_framework *fw, const uint8_t *data, const int length, const char *filename) { int fd; /* Dump the AML bytecode into a tempoary file so we can disassemble it */ if ((fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, S_IWUSR | S_IRUSR)) < 0) { fwts_log_error(fw, "Cannot create temporary file %s", filename); return FWTS_ERROR; } if (write(fd, data, length) != length) { fwts_log_error(fw, "Cannot write all data to temporary file"); (void)close(fd); (void)unlink(filename); return FWTS_ERROR; } (void)close(fd); return FWTS_OK; } /* * fwts_iasl_cache_tables_to_file() * to disassemble an APCPI table we need to dump it * to file. To save effort in saving these to file * multiple times, we dump out all the tables and * cache the references to these. */ static int fwts_iasl_cache_tables_to_file(fwts_framework *fw) { pid_t pid = getpid(); char tmpname[PATH_MAX]; fwts_acpi_table_info *table; for (cached_max = 0; cached_max < ACPI_MAX_TABLES; cached_max++) { int ret = fwts_acpi_get_table(fw, cached_max, &table); if (ret != FWTS_OK) return ret; if (table == NULL) continue; snprintf(tmpname, sizeof(tmpname), "/tmp/fwts_tmp_table_%d_%s_%d.dsl", pid, table->name, cached_max); iasl_cached_table_filename[cached_max] = strdup(tmpname); iasl_cached_table_name[cached_max] = table->name; if (iasl_cached_table_filename[cached_max] == NULL) { fwts_log_error(fw, "Cannot allocate cached table file name."); return FWTS_ERROR; } if (fwts_iasl_dump_aml_to_file(fw, table->data, table->length, tmpname) != FWTS_OK) { free(iasl_cached_table_filename[cached_max]); iasl_cached_table_filename[cached_max] = NULL; iasl_cached_table_name[cached_max] = NULL; } } return FWTS_OK; } /* * fwts_iasl_deinit() * clean up cached files and references */ void fwts_iasl_deinit(void) { int i; for (i = 0; i < cached_max; i++) { if (iasl_cached_table_filename[i]) { (void)unlink(iasl_cached_table_filename[i]); free(iasl_cached_table_filename[i]); } iasl_cached_table_filename[i] = NULL; iasl_cached_table_name[i] = NULL; } memset(iasl_cached_table_filename, 0, sizeof(iasl_cached_table_filename)); cached_max = 0; } /* * fwts_iasl_init() * initialise iasl - cache DSDT and SSDT to file */ int fwts_iasl_init(fwts_framework *fw) { int ret; cached_max = 0; fwts_iasl_deinit(); /* Ensure it is clean */ memset(iasl_cached_table_filename, 0, sizeof(iasl_cached_table_filename)); ret = fwts_iasl_cache_tables_to_file(fw); if (ret != FWTS_OK) return ret; iasl_init = true; return FWTS_OK; } /* * fwts_iasl_disassemble_to_file() * Disassemble a given table and dump disassembly to a file. */ static int fwts_iasl_disassemble_to_file(fwts_framework *fw, const fwts_acpi_table_info *info, const bool use_externals, const char *filename) { if (!iasl_init) return FWTS_ERROR; fwts_acpica_set_fwts_framework(fw); if (fwts_iasl_disassemble_aml( iasl_cached_table_filename, iasl_cached_table_name, cached_max, info->index, use_externals, filename) < 0) return FWTS_ERROR; return FWTS_OK; } /* * fwts_iasl_disassemble() * Disassemble a given table and dump disassembly list of strings. * */ int fwts_iasl_disassemble(fwts_framework *fw, const fwts_acpi_table_info *info, const bool use_externals, fwts_list **iasl_output) { char tmpfile[PATH_MAX]; int pid = getpid(); int ret; if (!iasl_init) return FWTS_ERROR; if (iasl_output == NULL) return FWTS_ERROR; *iasl_output = NULL; snprintf(tmpfile, sizeof(tmpfile), "/tmp/fwts_iasl_disassemble_%d_%s_%d.dsl", pid, info->name, info->index); if ((ret = fwts_iasl_disassemble_to_file(fw, info, use_externals, tmpfile)) != FWTS_OK) return ret; *iasl_output = fwts_file_open_and_read(tmpfile); (void)unlink(tmpfile); return *iasl_output ? FWTS_OK : FWTS_ERROR; } /* * fwts_iasl_disassemble_all_to_file() * Disassemble DSDT and SSDT tables to separate files. */ int fwts_iasl_disassemble_all_to_file( fwts_framework *fw, const char *path) { int i, j, ret; char filename[PATH_MAX + 18]; char pathname[PATH_MAX]; ret = fwts_iasl_init(fw); if (ret == FWTS_ERROR_NO_PRIV) { fprintf(stderr, "Need to have root privilege to read ACPI tables from memory! Re-run using sudo.\n"); return FWTS_ERROR; } if (ret != FWTS_OK) { fprintf(stderr, "Could not initialise disassembler.\n"); return FWTS_ERROR; } if (path == NULL) *pathname = '\0'; else snprintf(pathname, sizeof(pathname), "%s/", path); for (i = 0, j = 0; i < cached_max; i++) { fwts_acpi_table_info *info; ret = fwts_acpi_get_table(fw, i, &info); if (ret != FWTS_OK) break; if (info && info->has_aml) { snprintf(filename, sizeof(filename), "%s%s%d.dsl", pathname, info->name, j); if (fwts_iasl_disassemble_to_file(fw, info, true, filename) != FWTS_OK) fprintf(stderr, "Could not disassemble %s\n", info->name); else printf("Disassembled %s to %s\n", info->name, filename); j++; } } fwts_iasl_deinit(); return FWTS_OK; } /* * fwts_iasl_reassemble() * given a ACPI table go and disassemble it * and re-assemble it. Dump the disassembly into list iasl_disassembly and * any re-assembly errors into list iasl_errors. */ int fwts_iasl_reassemble(fwts_framework *fw, const fwts_acpi_table_info *info, fwts_list **iasl_disassembly, fwts_list **iasl_stdout, fwts_list **iasl_stderr) { char tmpfile[PATH_MAX]; char *stdout_output = NULL, *stderr_output = NULL; int pid = getpid(); if ((!iasl_init) || (iasl_disassembly == NULL) || (iasl_stdout == NULL) || (iasl_stderr == NULL) || (info == NULL)) return FWTS_ERROR; fwts_acpica_set_fwts_framework(fw); *iasl_disassembly = NULL; snprintf(tmpfile, sizeof(tmpfile), "/tmp/fwts_iasl_reassemble_%d.dsl", pid); if (fwts_iasl_disassemble_aml( iasl_cached_table_filename, iasl_cached_table_name, cached_max, info->index, true, tmpfile) < 0) { (void)unlink(tmpfile); return FWTS_ERROR; } /* Read in the disassembled text to return later */ *iasl_disassembly = fwts_file_open_and_read(tmpfile); /* Now we have a disassembled source in tmpfile, so let's assemble it */ if (fwts_iasl_assemble_aml(tmpfile, &stdout_output, &stderr_output) < 0) { (void)unlink(tmpfile); free(stdout_output); return FWTS_ERROR; } /* Remove these now we don't need them */ (void)unlink(tmpfile); /* And remove aml file generated from ACPICA compiler */ snprintf(tmpfile, sizeof(tmpfile), "/tmp/fwts_iasl_reassemble_%d.aml", pid); (void)unlink(tmpfile); *iasl_stdout = fwts_list_from_text(stdout_output); *iasl_stderr = fwts_list_from_text(stderr_output); free(stdout_output); return FWTS_OK; } const char *fwts_iasl_exception_level(uint8_t level) { return fwts_iasl_exception_level__(level); } src/lib/src/fwts_interactive.c000066400000000000000000000050741465205512700167430ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include "fwts.h" /* * fwts_getchar() * read a char from tty, no echo canonical mode */ static int fwts_getchar(int *ch) { struct termios oldterm; struct termios newterm; const int fd = fileno(stdin); *ch = -1; if (fd < 0) return FWTS_ERROR; if (tcgetattr(fd, &oldterm) < 0) return FWTS_ERROR; memcpy(&newterm, &oldterm, sizeof(struct termios)); newterm.c_lflag &= ~(ECHO | ICANON); newterm.c_cc[VMIN] = 1; newterm.c_cc[VTIME] = 0; if (tcsetattr(fd, TCSANOW, &newterm) < 0) return FWTS_ERROR; *ch = getchar(); if (tcsetattr(fd, TCSANOW, &oldterm) < 0) return FWTS_ERROR; return FWTS_OK; } /* * fwts_printf() * plain old printf() wrapped for fwts */ int fwts_printf(fwts_framework *fw, const char *fmt, ...) { int len; va_list ap; FWTS_UNUSED(fw); va_start(ap, fmt); len = vfprintf(stdout, fmt, ap); fflush(stdout); va_end(ap); return len; } /* * fwts_press_enter() * prompt and wait for enter key */ int fwts_press_enter(fwts_framework *fw) { int ch; fprintf(stdout, "Press to continue"); fflush(stdout); do { if (fwts_getchar(&ch) == FWTS_ERROR) { fwts_log_error(fw, "fwts_getchar() failed."); break; } } while (ch != '\n'); fprintf(stdout, "\n"); fflush(stdout); return FWTS_OK; } /* * fwts_get_reply() * prompt and wait for a given reply that matches given options string */ int fwts_get_reply(fwts_framework *fw, const char *message, const char *options) { int ch; fprintf(stdout, "%s", message); fflush(stdout); for (;;) { if (fwts_getchar(&ch) == FWTS_ERROR) { fwts_log_error(fw, "fwts_getchar() failed."); break; } if (index(options, ch) != NULL) break; } fprintf(stdout, "\n"); fflush(stdout); return ch; } src/lib/src/fwts_ioport.c000066400000000000000000000074441465205512700157450ustar00rootroot00000000000000/* * Copyright (C) 2013-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include #include static sigjmp_buf jmpbuf; static struct sigaction old_action; /* * If we hit a SIGSEGV then the port read * failed and we longjmp back and return * FWTS_ERROR */ static void segv_handler(int dummy) { FWTS_UNUSED(dummy); fwts_sig_handler_restore(SIGSEGV, &old_action); siglongjmp(jmpbuf, 1); } /* * fwts_inb() * 8 bit port read, handle access errors */ int fwts_inb(uint32_t port, uint8_t *value) { if (sigsetjmp(jmpbuf, 1) != 0) return FWTS_ERROR; fwts_sig_handler_set(SIGSEGV, segv_handler, &old_action); *value = inb(port); fwts_sig_handler_restore(SIGSEGV, &old_action); return FWTS_OK; } /* * fwts_inw() * 16 bit port read, handle access errors */ int fwts_inw(uint32_t port, uint16_t *value) { if (sigsetjmp(jmpbuf, 1) != 0) return FWTS_ERROR; fwts_sig_handler_set(SIGSEGV, segv_handler, &old_action); *value = inw(port); fwts_sig_handler_restore(SIGSEGV, &old_action); return FWTS_OK; } /* * fwts_inl() * 32 bit port read, handle access errors */ int fwts_inl(uint32_t port, uint32_t *value) { if (sigsetjmp(jmpbuf, 1) != 0) return FWTS_ERROR; fwts_sig_handler_set(SIGSEGV, segv_handler, &old_action); *value = inl(port); fwts_sig_handler_restore(SIGSEGV, &old_action); return FWTS_OK; } /* * fwts_outb() * 8 bit port write, handle access errors */ int fwts_outb(uint32_t port, uint8_t value) { if (sigsetjmp(jmpbuf, 1) != 0) return FWTS_ERROR; fwts_sig_handler_set(SIGSEGV, segv_handler, &old_action); outb(port, value); fwts_sig_handler_restore(SIGSEGV, &old_action); return FWTS_OK; } /* * fwts_outw() * 16 bit port write, handle access errors */ int fwts_outw(uint32_t port, uint16_t value) { if (sigsetjmp(jmpbuf, 1) != 0) return FWTS_ERROR; fwts_sig_handler_set(SIGSEGV, segv_handler, &old_action); outw(port, value); fwts_sig_handler_restore(SIGSEGV, &old_action); return FWTS_OK; } /* * fwts_outl() * 32 bit port write, handle access errors */ int fwts_outl(uint32_t port, uint32_t value) { if (sigsetjmp(jmpbuf, 1) != 0) return FWTS_ERROR; fwts_sig_handler_set(SIGSEGV, segv_handler, &old_action); outl(port, value); fwts_sig_handler_restore(SIGSEGV, &old_action); return FWTS_OK; } #else /* * dummy versions of above, all return FWTS_ERROR * for non-x86 platforms and any return values are * set to ~0. */ int fwts_inb(uint32_t port, uint8_t *value) { FWTS_UNUSED(port); *value = ~0; return FWTS_ERROR; } int fwts_inw(uint32_t port, uint16_t *value) { FWTS_UNUSED(port); *value = ~0; return FWTS_ERROR; } int fwts_inl(uint32_t port, uint32_t *value) { FWTS_UNUSED(port); *value = ~0; return FWTS_ERROR; } int fwts_outb(uint32_t port, uint8_t value) { FWTS_UNUSED(port); FWTS_UNUSED(value); return FWTS_ERROR; } int fwts_outw(uint32_t port, uint16_t value) { FWTS_UNUSED(port); FWTS_UNUSED(value); return FWTS_ERROR; } int fwts_outl(uint32_t port, uint32_t value) { FWTS_UNUSED(port); FWTS_UNUSED(value); return FWTS_ERROR; } #endif src/lib/src/fwts_ipmi.c000066400000000000000000000063771465205512700153730ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include "fwts.h" static unsigned int fwts_ipmi_msg_id = 1; static const char *fwts_ipmi_devnode = "/dev/ipmi0"; bool fwts_ipmi_present(int fwts_ipmi_flags) { return !access(fwts_ipmi_devnode, fwts_ipmi_flags); } int fwts_ipmi_exec_query( fwts_ipmi_rsp *fwts_base_rsp, struct ipmi_req *fwts_ipmi_req) { int fd = 0, fwts_pollfd_rc = 0, fwts_send_rc = 0, fwts_recv_rc = 0; uint8_t recv_data[IPMI_MAX_MSG_LENGTH]; struct ipmi_recv fwts_ipmi_recv; struct ipmi_addr fwts_ipmi_addr; struct pollfd fwts_pfd; if ((fd = open(fwts_ipmi_devnode, O_RDWR)) < 0) return FWTS_ERROR; fwts_send_rc = ioctl(fd, IPMICTL_SEND_COMMAND, (char *)fwts_ipmi_req); if (fwts_send_rc != 0) { (void)close(fd); return FWTS_ERROR; } fwts_pfd.events = POLLIN | POLLPRI; fwts_pfd.fd = fd; fwts_pollfd_rc = poll(&fwts_pfd, 1, 5000); if (fwts_pollfd_rc <= 0) { (void)close(fd); return FWTS_ERROR; } memset(&recv_data, 0, sizeof(recv_data)); fwts_ipmi_recv.msg.data = recv_data; fwts_ipmi_recv.msg.data_len = sizeof (recv_data); fwts_ipmi_recv.addr = (unsigned char *)&fwts_ipmi_addr; fwts_ipmi_recv.addr_len = sizeof (fwts_ipmi_addr); fwts_recv_rc = ioctl(fd, IPMICTL_RECEIVE_MSG_TRUNC, &fwts_ipmi_recv); if (fwts_recv_rc != 0) { (void)close(fd); return FWTS_ERROR; } memcpy(fwts_base_rsp, fwts_ipmi_recv.msg.data, sizeof(fwts_ipmi_rsp)); /* Future completion_code non-zero with good results to pass back */ if (fwts_base_rsp->completion_code != 0) { (void)close(fd); return FWTS_ERROR; } (void)close(fd); return FWTS_OK; } int fwts_ipmi_base_query(fwts_ipmi_rsp *fwts_base_rsp) { struct ipmi_req fwts_ipmi_req; struct ipmi_system_interface_addr fwts_ipmi_bmc_addr; memset(&fwts_ipmi_bmc_addr, 0, sizeof(fwts_ipmi_bmc_addr)); fwts_ipmi_bmc_addr.addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE; fwts_ipmi_bmc_addr.channel = IPMI_BMC_CHANNEL; fwts_ipmi_bmc_addr.lun = 0; memset(&fwts_ipmi_req, 0, sizeof(fwts_ipmi_req)); fwts_ipmi_req.addr = (unsigned char *)&fwts_ipmi_bmc_addr; fwts_ipmi_req.addr_len = sizeof (fwts_ipmi_bmc_addr); fwts_ipmi_req.msgid = fwts_ipmi_msg_id ++; fwts_ipmi_req.msg.netfn = IPMI_NETFN_APP_REQUEST; fwts_ipmi_req.msg.cmd = IPMI_GET_DEVICE_ID_CMD; fwts_ipmi_req.msg.data_len = 0; fwts_ipmi_req.msg.data = NULL; if (fwts_ipmi_exec_query(fwts_base_rsp, &fwts_ipmi_req)) return FWTS_ERROR; return FWTS_OK; } src/lib/src/fwts_json.c000066400000000000000000000505651465205512700154040ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * This is a simplified json parser and json object store * based on json but does not support keywords and is designed * just for the fwts json data files. It is not a full json * implementation and should not be used as such. * */ #include #include #include #include #include #include #include #include "fwts.h" /* * json file information */ typedef struct { FILE *fp; /* File pointer */ const char *filename; /* Name of file */ int linenum; /* Parser line number */ int charnum; /* Parser char position */ int error_reported; /* Error count */ } json_file; /* * json tokens, subset of full json token set as used * for fwts requirements */ typedef enum { token_lbrace, token_rbrace, token_lbracket, token_rbracket, token_colon, token_comma, token_int, token_string, token_true, token_false, token_null, token_error, token_eof, } json_token_type; /* * json parser token */ typedef struct { json_token_type type; /* token type */ long offset; /* offset in file for re-winding */ union { char *str; /* token string value */ int intval; /* token integer value */ } u; } json_token; /* * json_token_string() * convert json token to a human readable string */ char *json_token_string(json_token *jtoken) { static char tmp[64]; switch (jtoken->type) { case token_lbrace: return "{"; case token_rbrace: return "}"; case token_lbracket: return "["; case token_rbracket: return "]"; case token_colon: return ":"; case token_comma: return ","; case token_int: (void)snprintf(tmp, sizeof(tmp), "%d", jtoken->u.intval); return tmp; case token_string: return jtoken->u.str; case token_error: return ""; case token_eof: return "end of file"; default: break; } return ""; } /* * json_get_string() * parse a literal string */ json_token_type json_get_string(json_file *jfile, json_token *token) { char buffer[4096]; size_t i = 0; for (;;) { int ch; ch = fgetc(jfile->fp); jfile->charnum++; if (ch == EOF) { fprintf(stderr, "json_parser: unexpected EOF in literal string\n"); token->u.str = NULL; return token_error; } if (ch == '\\') { ch = fgetc(jfile->fp); switch (ch) { case '\\': case '"': case '/': break; case 'b': ch = '\b'; break; case 'f': ch = '\f'; break; case 'n': ch = '\n'; break; case 'r': ch = '\r'; break; case 't': ch = '\t'; break; case 'u': fprintf(stderr, "json parser: escaped hex values not supported\n"); ch = '?'; break; } jfile->charnum++; } else if (ch == '"') { buffer[i] = '\0'; token->u.str = strdup(buffer); if (!token->u.str) { fprintf(stderr, "json parser: out of memory allocating %zd byte string\n", i); break; } return token_string; } buffer[i] = ch; i++; if (i >= sizeof(buffer)) { fprintf(stderr, "json parser: string too long, maximum size %zd bytes\n", sizeof(buffer) - 1); break; } } token->u.str = NULL; return token_error; } /* * json_get_int() * parse a simple integer */ json_token_type json_get_int(json_file *jfile, json_token *token) { char buffer[64]; size_t i = 0; for (;;) { int ch; ch = fgetc(jfile->fp); if (!isdigit(ch)) { (void)ungetc(ch, jfile->fp); buffer[i] = '\0'; token->u.intval = atoi(buffer); return token_int; } jfile->charnum++; buffer[i] = ch; i++; if (i >= sizeof(buffer)) { fprintf(stderr, "json parser: integer too long, maximum size %zd bytes\n", sizeof(buffer) - 1); break; } } token->u.str = NULL; return token_error; } /* * json_unget_token() * push file pointer back to point before the token * to unpush the token */ int json_unget_token(json_file *jfile, json_token *token) { return fseek(jfile->fp, token->offset, SEEK_SET); } /* * json_get_keyword() * get a keyword */ int json_get_keyword(json_file *jfile, json_token *token) { char buffer[32]; size_t i = 0; token->u.str = NULL; *buffer = '\0'; for (;;) { int ch; ch = fgetc(jfile->fp); jfile->charnum++; if (ch == EOF) { fprintf(stderr, "json_parser: unexpected EOF in keyword string\n"); return token_error; } if (ch < 'a' || ch > 'z') break; buffer[i] = ch; i++; if (i >= sizeof(buffer)) { fprintf(stderr, "json parser: keyword too long, maximum size %zd bytes\n", sizeof(buffer) - 1); return token_error; } } if (!strcmp(buffer, "true")) return token_true; if (!strcmp(buffer, "false")) return token_false; if (!strcmp(buffer, "null")) return token_null; return token_error; } /* * json_free_token() * free any heap allocated members in token when required */ void json_free_token(json_token *token) { if (token->type == token_string) { free(token->u.str); token->u.str = NULL; } } /* * json_get_token() * read next input character(s) and return a matching token */ json_token_type json_get_token(json_file *jfile, json_token *token) { (void)memset(token, 0, sizeof(*token)); token->offset = ftell(jfile->fp); for (;;) { int ch; ch = fgetc(jfile->fp); jfile->charnum++; switch (ch) { case '\n': jfile->linenum++; continue; case ' ': case '\r': case '\t': continue; case EOF: token->type = token_eof; return token->type; case '{': token->type = token_lbrace; return token->type; case '}': token->type = token_rbrace; return token->type; case '[': token->type = token_lbracket; return token->type; case ']': token->type = token_rbracket; return token->type; case ':': token->type = token_colon; return token->type; case ',': token->type = token_comma; return token->type; case '"': token->type = json_get_string(jfile, token); return token->type; case '0'...'9': token->type = json_get_int(jfile, token); return token->type; case 'a'...'z': fprintf(stderr, "json_parser: keywords not supported\n"); token->type = token_error; return token->type; default: token->type = token_error; return token->type; } } /* Should never reach here */ token->type = token_error; return token->type; } /* * json_parse_error_where() * very simple parser error message, report where in the file * the parsing error occurred. */ void json_parse_error_where(json_file *jfile) { if (jfile->error_reported == 0) fprintf(stderr, "json_parser: aborted at line %d, char %d of file %s\n", jfile->linenum, jfile->charnum, jfile->filename); jfile->error_reported++; } json_object *json_parse_object(json_file *jfile); /* * json_parse_array() * parse a json array */ json_object *json_parse_array(json_file *jfile) { json_object *array_obj; array_obj = json_object_new_array(); if (!array_obj) { fprintf(stderr, "json_parser: out of memory allocating a json array object\n"); json_parse_error_where(jfile); return NULL; } for (;;) { json_object *obj; json_token token; obj = json_parse_object(jfile); if (!obj) { json_parse_error_where(jfile); json_object_put(array_obj); return NULL; } if (json_object_array_add(array_obj, obj) < 0) { json_object_put(array_obj); json_object_put(obj); return NULL; } switch (json_get_token(jfile, &token)) { case token_rbracket: return array_obj; case token_comma: continue; default: if (json_unget_token(jfile, &token) != 0) { fprintf(stderr, "json_parser: failed to unget a token\n"); json_object_put(array_obj); json_free_token(&token); return NULL; } json_free_token(&token); break; } } return array_obj; } /* * json_parse_object() * parse a json object (simplified fwts json format only) */ json_object *json_parse_object(json_file *jfile) { json_token token; json_object *obj, *val_obj; if (json_get_token(jfile, &token) != token_lbrace) { fprintf(stderr, "json_parser: expecting '{', got %s instead\n", json_token_string(&token)); json_free_token(&token); return NULL; } obj = json_object_new_object(); if (!obj) goto err_nomem; for (;;) { char *key = NULL; switch (json_get_token(jfile, &token)) { case token_rbrace: json_free_token(&token); return obj; case token_string: key = strdup(token.u.str); if (!key) goto err_nomem; json_free_token(&token); break; default: fprintf(stderr, "json_parser: expecting } or key literal string, got %s instead\n", json_token_string(&token)); goto err_free; } json_free_token(&token); if (json_get_token(jfile, &token) != token_colon) { fprintf(stderr, "json_parser: expecting ':', got %s instead\n", json_token_string(&token)); free(key); goto err_free; } switch (json_get_token(jfile, &token)) { case token_string: val_obj = json_object_new_string(token.u.str); if (!val_obj) { free(key); goto err_nomem; } json_object_object_add(obj, key, val_obj); break; case token_int: val_obj = json_object_new_int(token.u.intval); if (!val_obj) { free(key); goto err_nomem; } json_object_object_add(obj, key, val_obj); break; case token_lbracket: val_obj = json_parse_array(jfile); if (!val_obj) { free(key); goto err_nomem; } json_object_object_add(obj, key, val_obj); break; case token_lbrace: fprintf(stderr, "json_parser: nested objects not supported\n"); free(key); goto err_free; case token_true: case token_false: case token_null: fprintf(stderr, "json_parser: tokens %s not supported\n", json_token_string(&token)); free(key); goto err_free; default: fprintf(stderr, "json_parser: unexpected token %s\n", json_token_string(&token)); } free(key); json_free_token(&token); switch (json_get_token(jfile, &token)) { case token_comma: json_free_token(&token); continue; case token_rbrace: json_free_token(&token); return obj; default: fprintf(stderr, "json_parser: expected , or }, got %s instead\n", json_token_string(&token)); goto err_free; } } err_nomem: fprintf(stderr, "json_parser: out of memory allocating a json object\n"); json_parse_error_where(jfile); err_free: free(obj); json_free_token(&token); return NULL; } /* * json_object_from_file() * parse a simplified fwts json file and convert it into * a json object, return NULL if parsing failed or ran * out of memory */ json_object *json_object_from_file(const char *filename) { json_object *obj; json_file jfile; jfile.filename = filename; jfile.linenum = 1; jfile.charnum = 0; jfile.error_reported = 0; jfile.fp = fopen(filename, "r"); if (!jfile.fp) return NULL; obj = json_parse_object(&jfile); fclose(jfile.fp); return obj; } /* * json_object_new_object() * return a new json object, NULL if failed */ json_object *json_object_new_object(void) { json_object *obj; obj = calloc(1, sizeof(*obj)); if (!obj) return NULL; obj->type = type_object; obj->u.ptr = NULL; return obj; } /* * json_object_new_object() * return a new json object, NULL if failed */ int json_object_array_length(json_object *obj) { if (!obj) return 0; if (obj->type != type_array) return 0; return obj->length; } /* * json_object_new_int() * return a new json integer object, NULL if failed */ json_object *json_object_new_int(int val) { json_object *obj; obj = calloc(1, sizeof(*obj)); if (!obj) return NULL; obj->type = type_int; obj->u.intval = val; return obj; } /* * json_object_new_string() * return a new json string object, NULL if failed */ json_object *json_object_new_string(const char *str) { json_object *obj; obj = calloc(1, sizeof(*obj)); if (!obj) return NULL; obj->type = type_string; obj->u.ptr = strdup(str); if (!obj->u.ptr) { free(obj); return NULL; } return obj; } /* * json_object_new_array() * return a new json array object, NULL if failed */ json_object *json_object_new_array(void) { json_object *obj; obj = calloc(1, sizeof(*obj)); if (!obj) return NULL; obj->type = type_array; obj->length = 0; obj->u.ptr = NULL; return obj; } /* * json_object_array_add_item() * add an object to another object, return 0 if succeeded, * non-zero if failed */ static int json_object_array_add_item(json_object *obj, json_object *item) { json_object **obj_ptr; if (obj->length < 0) return -1; obj_ptr = realloc(obj->u.ptr, sizeof(json_object *) * (obj->length + 1)); if (!obj_ptr) return -1; obj->u.ptr = (void *)obj_ptr; obj_ptr[obj->length] = item; obj->length++; return 0; } /* * json_object_array_add() * add a object to a json array object, return NULL if failed */ int json_object_array_add(json_object *obj, json_object *item) { if (!obj || !item) return -1; if (obj->type != type_array) return -1; return json_object_array_add_item(obj, item); } /* * json_object_object_add() * add a key/valyue object to a json object, return NULL if failed */ void json_object_object_add(json_object *obj, const char *key, json_object *value) { if (!obj || !key || !value) return; if (obj->type != type_object) return; value->key = strdup(key); if (!value->key) return; json_object_array_add_item(obj, value); } /* * json_object_array_get_idx() * get an object at position index from a json array object, * return NULL if failed */ json_object *json_object_array_get_idx(json_object *obj, int index) { json_object **obj_array; if (!obj) return NULL; if (obj->type != type_array) return NULL; if (index >= obj->length) return NULL; obj_array = (json_object **)obj->u.ptr; if (obj_array == NULL) return NULL; return obj_array[index]; } /* * json_object_get_string() * return a C string from a json string object */ const char *json_object_get_string(json_object *obj) { if (!obj) return NULL; if (obj->type != type_string) return NULL; return (const char *)obj->u.ptr; } /* * json_object_put() * free a json object and all sub-objects */ void json_object_put(json_object *obj) { int i; json_object **obj_ptr; if (!obj) return; if (obj->key) free(obj->key); switch (obj->type) { case type_array: case type_object: obj_ptr = (json_object **)obj->u.ptr; for (i = 0; i < obj->length; i++) { json_object_put(obj_ptr[i]); } free(obj->u.ptr); break; case type_string: free(obj->u.ptr); break; case type_null: case type_int: default: break; } free(obj); } /* * str_append() * append a string to a string, return NULL if failed */ static char *str_append(char *str, char *append) { char *new_str; size_t len; if (!append) return NULL; if (str) { len = strlen(append) + strlen(str) + 1; new_str = realloc(str, len); if (!new_str) { free(str); return NULL; } strcat(new_str, append); } else { len = strlen(append) + 1; new_str = malloc(len); if (!new_str) return NULL; strcpy(new_str, append); } return new_str; } /* * str_indent() * add 2 spaces per indent level to a string, returns * NULL if failed */ static char *str_indent(char *str, int indent) { char buf[81]; int i; indent = indent + indent; if (indent > 80) indent = 80; for (i = 0; i < indent; i++) buf[i] = ' '; buf[i] = '\0'; return str_append(str, buf); } /* * char_escape() * convert escape char to the unescaped char to * be prefixed by \\. If not an escape char, return 0 */ static inline int char_escape(const int ch) { switch (ch) { case '"': return '"'; case '\b': return 'b'; case '\f': return 'f'; case '\n': return 'n'; case '\r': return 'r'; case '\t': return 't'; default: break; } return 0; } static char *str_escape(char *oldstr) { char *oldptr, *newstr, *newptr; ssize_t n; for (n = 0, oldptr = oldstr; *oldptr; oldptr++, n++) if (char_escape(*oldptr)) n++; newstr = malloc(n + 1); if (!newstr) return NULL; for (oldptr = oldstr, newptr = newstr; *oldptr; oldptr++) { const int esc = char_escape(*oldptr); if (esc) { *(newptr++) = '\\'; *(newptr++) = esc; } else { *(newptr++) = *oldptr; } } *newptr = '\0'; return newstr; } /* * json_object_to_json_string_indent() * turn a simplified fwts json object into a C string, returns * the stringified object or NULL if failed. Will traverse object * tree and add indentation based on recursion depth. */ static char *json_object_to_json_string_indent(json_object *obj, int indent) { int i; json_object **obj_ptr; char *str = NULL; char *tmp; char buf[64]; if (!obj) return NULL; if (obj->type == type_object) { str = str_indent(str, indent); if (!str) return NULL; } if (obj->key) { str = str_indent(str, indent); if (!str) return NULL; str = str_append(str, "\""); if (!str) return NULL; str = str_append(str, obj->key); if (!str) return NULL; str = str_append(str, "\":"); if (!str) return NULL; } switch (obj->type) { case type_array: str = str_append(str, "\n"); if (!str) return NULL; str = str_indent(str, indent); if (!str) return NULL; str = str_append(str, "["); if (!str) return NULL; obj_ptr = (json_object **)obj->u.ptr; if (obj_ptr) { for (i = 0; i < obj->length; i++) { char *obj_str; if (i) { str = str_append(str, "\n"); if (!str) return NULL; str = str_indent(str, indent + 1); if (!str) return NULL; str = str_append(str, ","); if (!str) return NULL; } obj_str = json_object_to_json_string_indent(obj_ptr[i], indent + 1); if (!obj_str) { free(str); return NULL; } str = str_append(str, obj_str); free(obj_str); if (!str) return NULL; } } str = str_append(str, "\n"); if (!str) return NULL; str = str_indent(str, indent); if (!str) return NULL; str = str_append(str, "]"); if (!str) return NULL; break; case type_object: str = str_append(str, "\n"); if (!str) return NULL; str = str_indent(str, indent); if (!str) return NULL; str = str_append(str, "{"); if (!str) return NULL; obj_ptr = (json_object **)obj->u.ptr; if (obj_ptr) { for (i = 0; i < obj->length; i++) { char *obj_str; str = str_append(str, (i == 0) ? "\n" : ",\n"); if (!str) return NULL; obj_str = json_object_to_json_string_indent(obj_ptr[i], indent + 1); if (!obj_str) { free(str); return NULL; } str = str_append(str, obj_str); free(obj_str); if (!str) return NULL; } } str = str_append(str, "\n"); if (!str) return NULL; str = str_indent(str, indent); if (!str) return NULL; str = str_append(str, "}"); if (!str) return NULL; break; case type_string: str = str_append(str, "\""); if (!str) return NULL; tmp = str_escape((char *)obj->u.ptr); if (!tmp) { free(str); return NULL; } str = str_append(str, tmp); free(tmp); if (!str) return NULL; str = str_append(str, "\""); if (!str) return NULL; break; case type_null: str = str_append(str, "(null)"); if (!str) return NULL; break; case type_int: snprintf(buf, sizeof(buf), "%d", obj->u.intval); str = str_append(str, buf); if (!str) return NULL; break; default: return NULL; } if (obj->type == type_object) { str = str_indent(str, indent); if (!str) return NULL; } return str; } /* * json_object_to_json_string * convert simplified fwts object to a C string, returns * NULL if failed */ char *json_object_to_json_string(json_object *obj) { return json_object_to_json_string_indent(obj, 0); } /* * json_object_object_get() * return value from key/value pair from an object, returns * NULL if it can't be found */ json_object *json_object_object_get(json_object *obj, const char *key) { int i; json_object **obj_ptr; if (!obj || !key) return NULL; if (obj->type != type_object) return NULL; obj_ptr = (json_object **)obj->u.ptr; for (i = 0; i < obj->length; i++) { if (obj_ptr[i]->key && !strcmp(obj_ptr[i]->key, key)) return obj_ptr[i]; } return NULL; } src/lib/src/fwts_kernel.c000066400000000000000000000066771465205512700157200ustar00rootroot00000000000000/* * Copyright (C) 2021-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include "fwts.h" #include "fwts_kernel.h" #include #include #include #define CONFIG_FILE_PREFIX "/boot/config-" #define CONFIG_FILE_PROC "/proc/config.gz" /* * fwts_kernel_config_plain_set * check whether a plain-text kernel config */ bool fwts_kernel_config_plain_set(const char *config) { const size_t config_str_len = strlen(config) + 3; char config_file[PATH_MAX]; char config_str[255]; size_t config_file_len; fwts_list* config_list; fwts_list_link *item; struct utsname buf; /* get path of config file, i.e. /boot/config-5.11.0-38-generic */ uname(&buf); config_file_len = strlen(CONFIG_FILE_PREFIX) + strlen(buf.release) + 1; (void)strlcpy(config_file, CONFIG_FILE_PREFIX, config_file_len); (void)strlcat(config_file, buf.release, config_file_len); config_list = fwts_file_open_and_read(config_file); if (config_list == NULL) return false; fwts_list_foreach(item, config_list) { /* check built-in, i.e. =y */ (void)strlcpy(config_str, config, config_str_len); (void)strlcat(config_str, "=y", config_str_len); if (!strncmp(fwts_text_list_text(item), config_str, strlen(config_str))) { fwts_list_free(config_list, free); return true; } /* check module, i.e. =m */ config_str[strlen(config_str) - 1] = 'm'; if (!strncmp(fwts_text_list_text(item), config_str, strlen(config_str))) { fwts_list_free(config_list, free); return true; } } fwts_list_free(config_list, free); return false; } /* * fwts_kernel_config_gz_set * check whether a gz kernel config */ bool fwts_kernel_config_gz_set(const char *config) { const size_t config_str_len = strlen(config) + 3; char config_str[255]; fwts_list* config_list; fwts_list_link *item; config_list = fwts_gzfile_open_and_read(CONFIG_FILE_PROC); if (config_list == NULL) return false; fwts_list_foreach(item, config_list) { /* check built-in, i.e. =y */ (void)strlcpy(config_str, config, config_str_len); (void)strlcat(config_str, "=y", config_str_len); if (!strncmp(fwts_text_list_text(item), config_str, strlen(config_str))) { fwts_list_free(config_list, free); return true; } /* check module, i.e. =m */ config_str[strlen(config_str) - 1] = 'm'; if (!strncmp(fwts_text_list_text(item), config_str, strlen(config_str))) { fwts_list_free(config_list, free); return true; } } fwts_list_free(config_list, free); return false; } /* * fwts_kernel_config_set * check whether a kernel config is set, ex. * true if CONFIG_XYZ=y or CONFIG_XYZ=m */ bool fwts_kernel_config_set(const char *config) { if (fwts_kernel_config_plain_set(config)) return true; if (fwts_kernel_config_gz_set(config)) return true; return false; } src/lib/src/fwts_keymap.c000066400000000000000000000062351465205512700157140ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include "fwts.h" /* * fwts_keymap_keycode_free() * free keymap data */ static void fwts_keymap_keycode_free(void *data) { fwts_keycode *keycode = (fwts_keycode*)data; free(keycode->keyname); free(keycode->keytext); free(keycode); } /* * fwts_keymap_free() * free keymap list */ void fwts_keymap_free(fwts_list *keylist) { fwts_list_free(keylist, fwts_keymap_keycode_free); } /* * fwts_keymap_load() * try and load keymap data for a given machine, return keymap * in a list of keymap items. */ fwts_list *fwts_keymap_load(const char *machine) { FILE *fp; char buffer[4096]; char path[PATH_MAX]; fwts_list *keymap_list; if ((keymap_list = fwts_list_new()) == NULL) return NULL; snprintf(path, sizeof(path), "%s/%s", FWTS_KEYMAP_PATH, machine); if ((fp = fopen(path, "r")) == NULL) { fwts_keymap_free(keymap_list); return NULL; } while (fgets(buffer, sizeof(buffer), fp) != NULL) { fwts_keycode *key; char *str = buffer; char *keyname = NULL; char *keytext = NULL; int scancode; scancode = strtoul(buffer, &str, 16); if ((str == NULL) || (*str == '\0')) continue; /* Skip over whitespace */ while ((*str != '\0') && isspace(*str)) str++; if (*str == '\0') continue; keyname = str; /* Skip over keyname */ while ((*str != '\0') && !isspace(*str)) str++; keytext = keyname; /* Default if we cannot find human readable name */ if (*str != '\0') { *str++ = '\0'; if ((str = strstr(str, "#")) != NULL) { str++; while (*str != '\0' && isspace(*str)) str++; if (*str) { keytext = str; keytext[strlen(keytext)-1] = '\0'; } } } if ((key = (fwts_keycode*)calloc(1, sizeof(fwts_keycode))) == NULL) { (void)fclose(fp); fwts_keymap_free(keymap_list); return NULL; } else { key->scancode = scancode; key->keyname = strdup(keyname); key->keytext = strdup(keytext); fwts_list_append(keymap_list, key); } } (void)fclose(fp); return keymap_list; } /* * fwts_keymap_find_scancode() * try and find a keycode for a given scancode in a given keymap list */ fwts_keycode *fwts_keymap_find_scancode(fwts_list *keymap, const int scancode) { fwts_list_link *item; fwts_list_foreach(item, keymap) { fwts_keycode *keycode = fwts_list_data(fwts_keycode*, item); if (keycode->scancode == scancode) return keycode; } return NULL; } src/lib/src/fwts_klog.c000066400000000000000000000111721465205512700153560ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include #include "fwts.h" /* * klog pattern matching strings data file, data stored in json format */ #define KLOG_DATA_JSON_FILE "klog.json" /* * match unique strings in the kernel log */ #define UNIQUE_KLOG_LABEL "Klog" /* * fwts_klog_free() * free kernel log list */ void fwts_klog_free(fwts_list *klog) { fwts_log_free(klog); } /* * fwts_klog_find_changes() * find new lines added to kernel log, clone them from new list * must be freed with fwts_list_free(klog_diff, NULL); */ fwts_list *fwts_klog_find_changes(fwts_list *klog_old, fwts_list *klog_new) { return fwts_log_find_changes(klog_old, klog_new); } /* * fwts_klog_read() * read kernel log and return as list of lines */ fwts_list *fwts_klog_read(void) { int len; char *buffer; fwts_list *list; if ((len = klogctl(10, NULL, 0)) < 0) return NULL; if ((buffer = calloc(1, len)) == NULL) return NULL; if (klogctl(3, buffer, len) < 0) { free(buffer); return NULL; } list = fwts_list_from_text(buffer); free(buffer); return list; } char *fwts_klog_remove_timestamp(char *text) { return fwts_log_remove_timestamp(text); } int fwts_klog_scan(fwts_framework *fw, fwts_list *klog, fwts_klog_scan_func scan_func, fwts_klog_progress_func progress_func, void *private, int *match) { return fwts_log_scan(fw, klog, scan_func, progress_func, private, match, true); } char *fwts_klog_unique_label(const char *str) { return fwts_log_unique_label(str, UNIQUE_KLOG_LABEL); } void fwts_klog_scan_patterns(fwts_framework *fw, char *line, int repeated, char *prevline, void *private, int *errors) { static char *advice = "This is a bug picked up by the kernel, but as yet, the " "firmware test suite has no diagnostic advice for this particular problem."; fwts_log_scan_patterns(fw, line, repeated, prevline, private, errors, "Kernel", advice); } /* * fwts_klog_compare_mode_str_to_val() * convert compare mode strings (from json database) to compare_mode values */ fwts_compare_mode fwts_klog_compare_mode_str_to_val(const char *str) { return fwts_log_compare_mode_str_to_val(str); } static int fwts_klog_check(fwts_framework *fw, const char *table, fwts_klog_progress_func progress, fwts_list *klog, int *errors) { char json_data_path[PATH_MAX]; if (fw->json_data_file) { snprintf(json_data_path, sizeof(json_data_path), "%s/%s", fw->json_data_path,(fw->json_data_file)); } else { /* use the hard coded KLOG JSON as default */ snprintf(json_data_path, sizeof(json_data_path), "%s/%s", fw->json_data_path, KLOG_DATA_JSON_FILE); } return fwts_log_check(fw, table, fwts_klog_scan_patterns, progress, klog, errors, json_data_path, UNIQUE_KLOG_LABEL, true); } int fwts_klog_firmware_check(fwts_framework *fw, fwts_klog_progress_func progress, fwts_list *klog, int *errors) { return fwts_klog_check(fw, "firmware_error_warning_patterns", progress, klog, errors); } int fwts_klog_pm_check(fwts_framework *fw, fwts_klog_progress_func progress, fwts_list *klog, int *errors) { return fwts_klog_check(fw, "pm_error_warning_patterns", progress, klog, errors); } /* * fwts_klog_regex_find() * scan a kernel log list of lines for a given regex pattern * uses fwts_klog_regex_find_callback() callback */ int fwts_klog_regex_find(fwts_framework *fw, fwts_list *klog, char *pattern) { return fwts_log_regex_find(fw, klog, pattern, true); } /* * fwts_klog_write() * write a message to the kernel log */ int fwts_klog_write(fwts_framework *fw, const char *msg) { FILE *fp; if ((fp = fopen("/dev/kmsg", "w")) == NULL) { fwts_log_info(fw, "Cannot write to kernel log /dev/kmsg."); return FWTS_ERROR; } fprintf(fp, "<7>fwts: %s", msg); fflush(fp); (void)fclose(fp); return FWTS_OK; } src/lib/src/fwts_list.c000066400000000000000000000061161465205512700153770ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include "fwts.h" /* * fwts_list_iterate() * iterate over items in list, call callback function to operate on each * item, and pass private data over to callback. private may be NULL if not used */ void fwts_list_iterate(fwts_list *list, fwts_list_foreach_callback callback, void *private) { fwts_list_link *item; if (!list) return; fwts_list_foreach(item, list) callback(item->data, private); } /* * fwts_list_free_items() * free items on list but not list head. provide free() func pointer data_free() to * free individual items in list. If func is null, don't * free items. */ void fwts_list_free_items(fwts_list *list, fwts_list_link_free data_free) { fwts_list_link *item; fwts_list_link *next; if (!list) return; for (item = list->head; item; item = next) { next = item->next; if (item->data && data_free) data_free(item->data); free(item); } } /* * fwts_list_free() * free list. provide free() func pointer data_free() to * free individual items in list. If func is null, don't * free items. */ void fwts_list_free(fwts_list *list, fwts_list_link_free data_free) { if (list) { fwts_list_free_items(list, data_free); free(list); } } /* * fwts_list_append() * add new data to end of list */ fwts_list_link *fwts_list_append(fwts_list *list, void *data) { fwts_list_link *link; if (!list) return NULL; if ((link = calloc(1, sizeof(fwts_list_link))) == NULL) return NULL; link->data = data; if (list->head) list->tail->next = link; else list->head = link; list->tail = link; list->len++; return link; } /* * fwts_list_add_ordered() * add new data into list, based on order from callback func compare(). */ fwts_list_link *fwts_list_add_ordered(fwts_list *list, void *new_data, fwts_list_compare compare) { fwts_list_link *new_list_item; fwts_list_link **list_item; if ((new_list_item = calloc(1, sizeof(fwts_list_link))) == NULL) return NULL; new_list_item->data = new_data; for (list_item = &list->head; *list_item; list_item = &(*list_item)->next) { void *data = (void *)(*list_item)->data; if (compare(data, new_data) >= 0) { new_list_item->next = (*list_item); break; } } if (!new_list_item->next) list->tail = new_list_item; *list_item = new_list_item; list->len++; return new_list_item; } src/lib/src/fwts_log.c000066400000000000000000000411071465205512700152040ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include #include "fwts.h" #define LOG_LINE_WIDTH (80) #define LOG_UNKNOWN_FIELD "???" static int log_line_width = 0; fwts_log_field fwts_log_filter = ~0; const char *fwts_log_format = ""; /* * fwts_log_set_line_width() * set width of a log */ void fwts_log_set_line_width(const int width) { if ((width >= 80) && (width <= 1024)) log_line_width = width; } /* * fwts_log_field_to_str() * return string name of log field */ char *fwts_log_field_to_str(const fwts_log_field field) { switch (field & LOG_FIELD_MASK) { case LOG_RESULT: return "RES"; case LOG_ERROR: return "ERR"; case LOG_WARNING: return "WRN"; case LOG_DEBUG: return "DBG"; case LOG_INFO: return "INF"; case LOG_SUMMARY: return "SUM"; case LOG_SEPARATOR: return "SEP"; case LOG_NEWLINE: return "NLN"; case LOG_ADVICE: return "ADV"; case LOG_HEADING: return "HED"; case LOG_PASSED: return "PAS"; case LOG_FAILED: return "FAL"; case LOG_SKIPPED: return "SKP"; case LOG_ABORTED: return "ABT"; case LOG_INFOONLY: return "INO"; default: return LOG_UNKNOWN_FIELD; } } /* * fwts_log_field_to_str_full() * return full string name of log field */ char *fwts_log_field_to_str_full(const fwts_log_field field) { switch (field & LOG_FIELD_MASK) { case LOG_RESULT: return "Result"; case LOG_ERROR: return "Error"; case LOG_WARNING: return "Warning"; case LOG_DEBUG: return "Debug"; case LOG_INFO: return "Info"; case LOG_SUMMARY: return "Summary"; case LOG_SEPARATOR: return "Separator"; case LOG_NEWLINE: return "Newline"; case LOG_ADVICE: return "Advice"; case LOG_HEADING: return "Heading"; case LOG_PASSED: return "Passed"; case LOG_FAILED: return "Failed"; case LOG_SKIPPED: return "Skipped"; case LOG_ABORTED: return "Aborted"; case LOG_INFOONLY: return "Info Only"; default: return "Unknown"; } } /* * fwts_log_field_to_str_full() * return full string name of log field */ char *fwts_log_field_to_str_upper(const fwts_log_field field) { static char str[16]; char *ptr1; char *ptr2 = fwts_log_field_to_str_full(field); for (ptr1 = str; *ptr2; ptr1++, ptr2++) *ptr1 = toupper(*ptr2); *ptr1 = '\0'; return str; } /* * fwts_log_str_to_level() * return log level mapped from the given string */ int fwts_log_str_to_level(const char *str) { if (str) { if (strstr(str, "CRITICAL")) return LOG_LEVEL_CRITICAL; if (strstr(str, "HIGH")) return LOG_LEVEL_HIGH; if (strstr(str, "MEDIUM")) return LOG_LEVEL_MEDIUM; if (strstr(str, "LOW")) return LOG_LEVEL_LOW; if (strstr(str, "INFO")) return LOG_LEVEL_INFO; } return LOG_LEVEL_MEDIUM; /* Default */ } /* * fwts_log_level_to_str() * return string name of log level */ char *fwts_log_level_to_str(const fwts_log_level level) { switch (level) { case LOG_LEVEL_CRITICAL: return "CRITICAL"; case LOG_LEVEL_HIGH: return "HIGH"; case LOG_LEVEL_MEDIUM: return "MEDIUM"; case LOG_LEVEL_LOW: return "LOW"; case LOG_LEVEL_INFO: return "INFO"; case LOG_LEVEL_NONE: default: return " "; } } /* * fwts_log_print_fields() * dump out available log field names */ void fwts_log_print_fields(void) { fwts_log_field field; printf("Available fields: "); for (field = 1; ; field <<= 1) { char *str = fwts_log_field_to_str(field); if (strcmp(str, LOG_UNKNOWN_FIELD) == 0) break; printf("%s%s", field == 1 ? "" : ",", str); } printf("\n"); } /* * fwts_log_str_to_field() * return log field of a given string, 0 if not matching */ fwts_log_field fwts_log_str_to_field(const char *text) { int i; static const struct mapping { char *text; fwts_log_field field; } mappings[] = { { "RES", LOG_RESULT }, { "ERR", LOG_ERROR }, { "WRN", LOG_WARNING }, { "DBG", LOG_DEBUG }, { "INF", LOG_INFO }, { "SUM", LOG_SUMMARY }, { "SEP", LOG_SEPARATOR }, { "NLN", LOG_NEWLINE }, { "ADV", LOG_ADVICE }, { "HED", LOG_HEADING }, { "PAS", LOG_PASSED }, { "FAL", LOG_FAILED }, { "SKP", LOG_SKIPPED }, { "ABT", LOG_ABORTED }, { "INO", LOG_INFOONLY }, { "ALL", ~0 }, { NULL, 0 } }; for (i = 0; mappings[i].text != NULL; i++) if (strcmp(mappings[i].text, text) == 0) return mappings[i].field; return LOG_NO_FIELD; } /* * fwts_log_filter_set_field * set a filter bit map */ void fwts_log_filter_set_field(const fwts_log_field filter) { fwts_log_filter |= filter; } /* * fwts_log_filter_unset_field * clear a filter bit map */ void fwts_log_filter_unset_field(const fwts_log_field filter) { fwts_log_filter &= ~filter; } /* * fwts_log_set_field_filter * set/clear filter bit map based on a comma separated * list of field names. ~ or ^ prefix to a field name * clears a bit. */ void fwts_log_set_field_filter(char *str) { char *saveptr; fwts_log_field field; for (;; str=NULL) { char *token; if ((token = strtok_r(str, ",|", &saveptr)) == NULL) break; if (*token == '^' || *token == '~') { field = fwts_log_str_to_field(token+1); if (field != LOG_NO_FIELD) fwts_log_filter_unset_field(field); } else { field = fwts_log_str_to_field(token); if (field != LOG_NO_FIELD) fwts_log_filter_set_field(field); } } } /* * fwts_log_set_format() * set the log format string */ void fwts_log_set_format(const char *str) { fwts_log_format = str; } /* * fwts_log_type_filename_suffix() * return a filename suffix on a given log type */ static char *fwts_log_type_filename_suffix(const fwts_log_type type) { switch (type) { case LOG_TYPE_JSON: return ".json"; case LOG_TYPE_XML: return ".xml"; case LOG_TYPE_HTML: return ".html"; case LOG_TYPE_NONE: case LOG_TYPE_PLAINTEXT: default: return ".log"; } } /* * fwts_log_filename_new_suffix() * return the log name with suffix based on log type */ static char *fwts_log_filename(const char *filename, const fwts_log_type type) { char *ptr; char *new_name; char *suffix; size_t suffix_len; size_t filename_len; struct stat stat_buf; /* * If the user specified a char special file, like /dev/null * or a named pipe, socket or symlink we should just return * that instead. */ if (stat(filename, &stat_buf) == 0) { if (S_ISCHR(stat_buf.st_mode) || S_ISFIFO(stat_buf.st_mode) || S_ISSOCK(stat_buf.st_mode) || S_ISLNK(stat_buf.st_mode)) return strdup(filename); } suffix = fwts_log_type_filename_suffix(type); suffix_len = strlen(suffix); /* * Locate an existing suffix, if it is one we recognise * then remove it and append the appropriate one */ ptr = rindex(filename, '.'); if (ptr && (!strcmp(ptr, ".log") || !strcmp(ptr, ".json") || !strcmp(ptr, ".xml") || !strcmp(ptr, ".html"))) { size_t trunc_len = ptr - filename; if ((new_name = calloc(trunc_len + suffix_len + 1, 1)) == NULL) { fprintf(stderr, "Cannot allocate log name.\n"); return NULL; } strncpy(new_name, filename, trunc_len); strcat(new_name, suffix); /* strcat OK because calloc zero'd all of new_name */ return new_name; } /* * We didn't find a suffix or a known suffix, so append * the appropriate one to the given log filename */ filename_len = strlen(filename); if ((new_name = calloc(filename_len + suffix_len + 1, 1)) == NULL) { fprintf(stderr, "Cannot allocate log name.\n"); return NULL; } strcpy(new_name, filename); strcat(new_name, suffix); return new_name; } /* * fwts_log_printf() * printf to a log */ int fwts_log_printf( const fwts_framework *fw, const fwts_log_field field, const fwts_log_level level, const char *status, const char *label, const char *prefix, const char *fmt, ...) { int ret = 0; fwts_log *log = fw->results; if (!((field & LOG_FIELD_MASK) & fwts_log_filter)) return ret; if (FWTS_LEVEL_IGNORE(fw, level)) return ret; if (log && log->magic == LOG_MAGIC) { char buffer[LOG_MAX_BUF_SIZE]; va_list args; /* * With the possibility of having multiple logs being written * to per call of fwts_log_printf() it is more efficient to * vsnprintf() here and then pass the formatted output down to * each log handler rather than re-formatting each time in each * handler */ va_start(args, fmt); ret = vsnprintf(buffer, sizeof(buffer), fmt, args); if (ret >= 0) { fwts_list_link *item; fwts_list_foreach(item, &log->log_files) { fwts_log_file *log_file = fwts_list_data(fwts_log_file *, item); if (log_file->ops && log_file->ops->print) log_file->ops->print(log_file, field, level, status, label, prefix, buffer); } } va_end(args); } return ret; } /* * _fwts_log_info_simp_int() * simplify printing integers with different sizes */ void _fwts_log_info_simp_int( const fwts_framework *fw, const char *message, uint8_t size, uint64_t value) { switch (size) { case sizeof(uint8_t): fwts_log_info_verbatim(fw, "%s0x%2.2" PRIx8, message, (uint8_t)value); break; case sizeof(uint16_t): fwts_log_info_verbatim(fw, "%s0x%4.4" PRIx16, message, (uint16_t)value); break; case sizeof(uint32_t): fwts_log_info_verbatim(fw, "%s0x%8.8" PRIx32, message, (uint32_t)value); break; case sizeof(uint64_t): fwts_log_info_verbatim(fw, "%s0x%16.16" PRIx64, message, value); break; } } /* * fwts_log_underline() * write an underline across log, using character ch as the underline */ void fwts_log_underline(fwts_log *log, const int ch) { if (log && log->magic == LOG_MAGIC) { fwts_list_link *item; fwts_list_foreach(item, &log->log_files) { fwts_log_file *log_file = fwts_list_data(fwts_log_file *, item); if (log_file->ops && log_file->ops->underline) log_file->ops->underline(log_file, ch); } } } /* * fwts_log_newline() * write newline to log */ void fwts_log_newline(fwts_log *log) { if (log && log->magic == LOG_MAGIC) { fwts_list_link *item; fwts_list_foreach(item, &log->log_files) { fwts_log_file *log_file = fwts_list_data(fwts_log_file *, item); if (log_file->ops && log_file->ops->newline) log_file->ops->newline(log_file); } } } int fwts_log_set_owner(fwts_log *log, const char *owner) { if (log && (log->magic == LOG_MAGIC)) { char *newowner = strdup(owner); if (newowner) { free(log->owner); log->owner = newowner; return FWTS_OK; } } return FWTS_ERROR; } /* * fwts_log_section_begin() * mark a start of a named section. For structured logging * such as XML and JSON this pushes a new named tagged section */ void fwts_log_section_begin(fwts_log *log, const char *name) { if (log && log->magic == LOG_MAGIC) { fwts_list_link *item; fwts_list_foreach(item, &log->log_files) { fwts_log_file *log_file = fwts_list_data(fwts_log_file *, item); if (log_file->ops && log_file->ops->section_begin) log_file->ops->section_begin(log_file, name); } } } /* * fwts_log_section_end() * mark end of a named section. For structured logging * such as XML and JSON this pops the end of a tagged section */ void fwts_log_section_end(fwts_log *log) { if (log && log->magic == LOG_MAGIC) { fwts_list_link *item; fwts_list_foreach(item, &log->log_files) { fwts_log_file *log_file = fwts_list_data(fwts_log_file *, item); if (log_file->ops && log_file->ops->section_end) log_file->ops->section_end(log_file); } } } /* * fwts_log_get_ops() * return log ops basedon log type */ static fwts_log_ops *fwts_log_get_ops(const fwts_log_type type) { switch (type) { case LOG_TYPE_JSON: return &fwts_log_json_ops; case LOG_TYPE_PLAINTEXT: return &fwts_log_plaintext_ops; case LOG_TYPE_XML: return &fwts_log_xml_ops; case LOG_TYPE_HTML: return &fwts_log_html_ops; case LOG_TYPE_NONE: default: return &fwts_log_plaintext_ops; } } /* * fwts_log_get_filename_type() * determine the filename type */ fwts_log_filename_type fwts_log_get_filename_type(const char *filename) { if (!strcmp(filename, "stderr")) return LOG_FILENAME_TYPE_STDERR; else if (!strcmp(filename, "stdout")) return LOG_FILENAME_TYPE_STDOUT; else return LOG_FILENAME_TYPE_FILE; } /* * fwts_log_filenames() * return string of all the log filenames that will be used */ char *fwts_log_get_filenames(const char *filename, const fwts_log_type type) { unsigned int i; char *filenames = NULL; char *tmp; size_t len = 0; for (i = 0; i < 32; i++) { fwts_log_type mask = 1UL << i; if (type & mask) { if ((tmp = fwts_log_filename(filename, mask)) == NULL) { free(filenames); return NULL; } if (filenames) { char *new_filenames; len += strlen(tmp) + 2; if ((new_filenames = realloc(filenames, len)) == NULL) { free(filenames); free(tmp); return NULL; } else filenames = new_filenames; strcat(filenames, " "); strcat(filenames, tmp); } else { len = strlen(tmp) + 1; if ((filenames = malloc(len)) == NULL) { free(tmp); return NULL; } strcpy(filenames, tmp); } free(tmp); } } return filenames; } /* * fwts_log_open() * open a log file. if name is stderr or stdout, then attach log to these * streams. */ fwts_log *fwts_log_open( const char *owner, /* Creator of the log */ const char *filename, /* Log file name */ const char *mode, /* open mode, see fopen() modes */ const fwts_log_type type) /* Log type */ { fwts_log *newlog; unsigned int i; char *newname; if ((newlog = calloc(1, sizeof(fwts_log))) == NULL) return NULL; newlog->magic = LOG_MAGIC; fwts_log_set_owner(newlog, owner); fwts_list_init(&newlog->log_files); /* * Scan through and see which log types have been specified * and open the log file with the appropriate ops to perform * the logging */ for (i = 0; i < 32; i++) { fwts_log_type mask = 1UL << i; /* The log type for this iteration */ /* If set then go and open up a log for this log type */ if (type & mask) { fwts_log_file *log_file; if ((log_file = calloc(1, sizeof(fwts_log_file))) == NULL) { fwts_log_close(newlog); return NULL; } log_file->type = mask; log_file->ops = fwts_log_get_ops(mask); log_file->log = newlog; log_file->filename_type = fwts_log_get_filename_type(filename); /* * To complicate matters we can have logs being * written to stderr, stdout or two a named file */ switch(log_file->filename_type) { case LOG_FILENAME_TYPE_STDERR: log_file->fp = stderr; break; case LOG_FILENAME_TYPE_STDOUT: log_file->fp = stdout; break; case LOG_FILENAME_TYPE_FILE: if ((newname = fwts_log_filename(filename, mask)) == NULL) { fwts_log_close(newlog); free(log_file); return NULL; } log_file->fp = fopen(newname, mode); free(newname); if (log_file->fp == NULL) { fwts_log_close(newlog); free(log_file); return NULL; } } /* Fix up the log specific line width */ if (log_line_width) { /* User has specified width, so use it */ log_file->line_width = log_line_width; } else { log_file->line_width = fwts_tty_width(fileno(log_file->fp), LOG_LINE_WIDTH); } /* ..and add the log file to the list of logs */ fwts_list_append(&newlog->log_files, log_file); /* ..and do the log specific opening set up */ if (log_file->ops && log_file->ops->open) log_file->ops->open(log_file); } } return newlog; } /* * fwts_log_close() * close any opened log files, free up memory */ int fwts_log_close(fwts_log *log) { if (log && (log->magic == LOG_MAGIC)) { fwts_list_link *item; fwts_list_foreach(item, &log->log_files) { fwts_log_file *log_file = fwts_list_data(fwts_log_file *, item); /* Do the log type specific close */ if (log_file->ops && log_file->ops->close) log_file->ops->close(log_file); /* Close opened log file */ if (log_file->fp && log_file->filename_type == LOG_FILENAME_TYPE_FILE) (void)fclose(log_file->fp); } /* ..and free log files */ fwts_list_free_items(&log->log_files, free); free(log->owner); free(log); } return FWTS_OK; } src/lib/src/fwts_log_html.c000066400000000000000000000276661465205512700162460ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include "fwts.h" #define MAX_HTML_STACK (64) #define HTML_INDENT (2) typedef struct { const char *name; } fwts_log_html_stack_t; typedef struct { unsigned char ch; /* ASCII */ char * html; /* HTML equivalent */ } fwts_log_html_ascii_t; static fwts_log_html_stack_t html_stack[MAX_HTML_STACK]; static int html_stack_index = 0; static void fwts_log_html(fwts_log_file *log_file, const char *fmt, ...) { va_list args; va_start(args, fmt); fprintf(log_file->fp, "%*s", html_stack_index * HTML_INDENT, ""); vfprintf(log_file->fp, fmt, args); va_end(args); } /* * fwts_log_html_convert_ascii() * return a static string containing any conversion from ASCII to a * HTML representation of char ch. If no conversion needed, just * return a string containing the ch. */ static char *fwts_log_html_convert_ascii(const char ch) { /* * ASCII to HTML conversion table: * ISO 10646, ISO 8879, ISO 8859-1 Latin alphabet No. 1 * Browser support: All browsers */ static const fwts_log_html_ascii_t fwts_log_html_ascii_table[] = { { '"', """ }, { '&', "&" }, { '<', "<" }, { '>', ">" }, { '{', "{" }, { '|', "|" }, { '}', "}" }, { '~', "~" }, { 160, " " }, { 161, "&iexl;" }, { 162, "¢" }, { 163, "£" }, { 164, "¤" }, { 165, "¥" }, { 166, "¦" }, { 167, "§" }, { 168, "¨" }, { 169, "©" }, { 170, "ª" }, { 171, "«" }, { 172, "¬" }, { 173, "­" }, { 174, "®" }, { 175, "¯" }, { 176, "°" }, { 177, "±" }, { 178, "²" }, { 179, "³" }, { 180, "´" }, { 181, "µ" }, { 182, "¶" }, { 183, "·" }, { 184, "¸" }, { 185, "¹" }, { 186, "º" }, { 187, "»" }, { 187, "¼" }, { 189, "½" }, { 190, "¾" }, { 191, "¿" }, /* Probably never used, but here in case */ { 192, "À" }, { 193, "Á" }, { 194, "Â" }, { 195, "Ã" }, { 196, "Ä" }, { 197, "Å" }, { 198, "Æ" }, { 199, "Ç" }, { 200, "È" }, { 201, "É" }, { 202, "Ê" }, { 203, "Ë" }, { 204, "&lgrave;" }, { 205, "ĺ" }, { 206, "&lcirc;" }, { 207, "&luml;" }, { 208, "Ð" }, { 209, "Ñ" }, { 210, "Ò" }, { 211, "Ó" }, { 212, "Ô" }, { 213, "Õ" }, { 214, "Ö" }, { 215, "×" }, { 216, "Ø" }, { 217, "Ù" }, { 218, "Ú" }, { 219, "Û" }, { 220, "Ü" }, { 221, "Ý" }, { 222, "Þ" }, { 223, "ß" }, { 224, "à" }, { 225, "á" }, { 226, "â" }, { 227, "ã" }, { 228, "ä" }, { 229, "å" }, { 230, "æ" }, { 231, "ç" }, { 232, "è" }, { 233, "é" }, { 234, "ê" }, { 235, "&emuml;" }, { 236, "ì" }, { 237, "í" }, { 238, "î" }, { 239, "ï" }, { 240, "ð" }, { 241, "ñ" }, { 242, "ò" }, { 243, "ó" }, { 244, "ô" }, { 245, "õ" }, { 246, "ö" }, { 247, "÷" }, { 248, "ø" }, { 249, "ù" }, { 250, "ú" }, { 251, "û" }, { 252, "ü" }, { 253, "ý" }, { 254, "þ" }, { 255, "ÿ" }, { 0, NULL }, }; int i; static char buf[2]; for (i = 0; fwts_log_html_ascii_table[i].html != NULL; i++) { if (fwts_log_html_ascii_table[i].ch == ch) return fwts_log_html_ascii_table[i].html; } /* No mapping, just return string containing ch */ buf[0] = ch; buf[1] = '\0'; return buf; } /* * fwts_log_html_convert_ascii_str() * convert an ASCII string into a HTML encoded string. The returned * string needs free'ing once finished with. */ static char *fwts_log_html_convert_ascii_str(const char *buffer) { const char *str1; char *converted; size_t len = 0; /* Step 1, figure out how much space we need */ for (str1 = buffer; *str1; str1++) { char *str = fwts_log_html_convert_ascii(*str1); len += strlen(str); } if ((converted = calloc(len + 1, 1)) == NULL) return NULL; /* Step 2, convert */ for (str1 = buffer; *str1; str1++) { char *str = fwts_log_html_convert_ascii(*str1); strcat(converted, str); } return converted; } /* * fwts_log_print_html() * print to a log */ static int fwts_log_print_html( fwts_log_file *log_file, const fwts_log_field field, const fwts_log_level level, const char *status, const char *label, const char *prefix, const char *buffer) { char *str; char *style; char *code_start; char *code_end; char *html_converted; FWTS_UNUSED(label); FWTS_UNUSED(prefix); if (!((field & LOG_FIELD_MASK) & fwts_log_filter)) return 0; if (field & (LOG_NEWLINE | LOG_SEPARATOR | LOG_DEBUG)) return 0; if ((html_converted = fwts_log_html_convert_ascii_str(buffer)) == NULL) { /* We can't report an error via the logging mechanism in case we loop */ fprintf(stderr, "Out of memory converting html.\n"); exit(EXIT_FAILURE); } fwts_log_html(log_file, "\n"); if (field & LOG_VERBATUM) { code_start = "
";
		code_end   = "
"; } else { code_start = ""; code_end = ""; } switch (field & LOG_FIELD_MASK) { case LOG_ERROR: fwts_log_html(log_file, " Error" "%s\n", html_converted); break; case LOG_WARNING: fwts_log_html(log_file, " Warning" "%s%s%s\n", code_start, html_converted, code_end); break; case LOG_HEADING: fwts_log_html(log_file, "%s%s%s\n", code_start, html_converted, code_end); break; case LOG_INFO: fwts_log_html(log_file, " %s%s%s\n", code_start, html_converted, code_end); break; case LOG_PASSED: fwts_log_html(log_file, "PASSED%s\n", html_converted); break; case LOG_FAILED: switch (level) { case LOG_LEVEL_CRITICAL: style = " class=style_critical"; break; case LOG_LEVEL_HIGH: style = " class=style_high"; break; case LOG_LEVEL_MEDIUM: style = " class=style_medium"; break; case LOG_LEVEL_LOW: style = " class=style_low"; break; case LOG_LEVEL_INFO: case LOG_LEVEL_NONE: default: style = ""; break; } str = fwts_log_level_to_str(level); fwts_log_html(log_file, " %s [%s]\n", style, *status ? status : "", str); fwts_log_html(log_file, " %s\n", html_converted); break; case LOG_SKIPPED: fwts_log_html(log_file, "Skipped" "%s%s%s\n", code_start, html_converted, code_end); break; case LOG_SUMMARY: fwts_log_html(log_file, " " "%s%s%s\n", code_start, html_converted, code_end); break; case LOG_ADVICE: fwts_log_html(log_file, " Advice" "%s%s%s\n", code_start, html_converted, code_end); break; default: break; } free(html_converted); fwts_log_html(log_file, "\n"); fflush(log_file->fp); log_file->line_number++; /* not used, but bump it anyway */ return 0; } /* * fwts_log_underline_html() * write an underline across log, using character ch as the underline */ static void fwts_log_underline_html(fwts_log_file *log_file, const int ch) { FWTS_UNUSED(log_file); FWTS_UNUSED(ch); /* No-op for html */ } /* * fwts_log_newline() * write newline to log */ static void fwts_log_newline_html(fwts_log_file *log_file) { FWTS_UNUSED(log_file); /* No-op for html */ } static void fwts_log_section_begin_html(fwts_log_file *log_file, const char *name) { if (!strcmp(name, "summary")) { fwts_log_html(log_file, "Summary\n"); } else if (!strcmp(name, "heading")) { fwts_log_html(log_file, "Firmware Test Suite\n"); } else if (!strcmp(name, "subtest_info")) { fwts_log_html(log_file, "\n"); } else if (!strcmp(name, "failure")) { fwts_log_html(log_file, "\n"); } fflush(log_file->fp); if (html_stack_index < MAX_HTML_STACK) { html_stack[html_stack_index].name = name; html_stack_index++; } else { fprintf(stderr, "html log stack overflow pushing section %s.\n", name); exit(EXIT_FAILURE); } } static void fwts_log_section_end_html(fwts_log_file *log_file) { if (html_stack_index > 0) { html_stack_index--; fflush(log_file->fp); } else { fprintf(stderr, "html log stack underflow.\n"); exit(EXIT_FAILURE); } } static void fwts_log_open_html(fwts_log_file *log_file) { fwts_log_html(log_file, "\n"); fwts_log_html(log_file, "\n"); fwts_log_html(log_file, " fwts log\n"); fwts_log_html(log_file, "\n"); fwts_log_html(log_file, "\n"); fwts_log_html(log_file, "\n"); fflush(log_file->fp); fwts_log_html(log_file, "\n"); fwts_log_html(log_file, "\n"); fwts_log_section_begin_html(log_file, "fwts"); } static void fwts_log_close_html(fwts_log_file *log_file) { fwts_log_section_end_html(log_file); fwts_log_html(log_file, "
\n"); fwts_log_html(log_file, "\n"); fwts_log_html(log_file, "\n"); fflush(log_file->fp); } fwts_log_ops fwts_log_html_ops = { .print = fwts_log_print_html, .underline = fwts_log_underline_html, .newline = fwts_log_newline_html, .section_begin = fwts_log_section_begin_html, .section_end = fwts_log_section_end_html, .open = fwts_log_open_html, .close = fwts_log_close_html }; src/lib/src/fwts_log_json.c000066400000000000000000000146051465205512700162400ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define LOG_LINE_WIDTH 100 #include #include #include #include #include #include #include #include "fwts.h" #define MAX_JSON_STACK (64) typedef struct { json_object *obj; json_object *log; } fwts_log_json_stack_t; static fwts_log_json_stack_t json_stack[MAX_JSON_STACK]; static int json_stack_index = 0; /* * fwts_log_out_of_memory_json() * handle out of memory from json objects */ static void fwts_log_out_of_memory_json(void) { fprintf(stderr, "Out of memory allocating a json object.\n"); exit(EXIT_FAILURE); } /* * fwts_log_printf_json() * print to a log */ static int fwts_log_print_json( fwts_log_file *log_file, const fwts_log_field field, const fwts_log_level level, const char *status, const char *label, const char *prefix, const char *buffer) { char tmpbuf[4096]; struct tm tm; time_t now; json_object *header; json_object *json_log = (json_object*)json_stack[json_stack_index-1].log; json_object *obj; char *str; FWTS_UNUSED(prefix); if (!((field & LOG_FIELD_MASK) & fwts_log_filter)) return 0; if (field & (LOG_NEWLINE | LOG_SEPARATOR | LOG_DEBUG)) return 0; time(&now); localtime_r(&now, &tm); if ((header = json_object_new_object()) == NULL) fwts_log_out_of_memory_json(); if ((obj = json_object_new_int(log_file->line_number)) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "line_num", obj); snprintf(tmpbuf, sizeof(tmpbuf), "%2.2d/%2.2d/%-2.2d", tm.tm_mday, tm.tm_mon + 1, (tm.tm_year+1900) % 100); if ((obj = json_object_new_string(tmpbuf)) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "date", obj); snprintf(tmpbuf, sizeof(tmpbuf), "%2.2d:%2.2d:%2.2d", tm.tm_hour, tm.tm_min, tm.tm_sec); if ((obj = json_object_new_string(tmpbuf)) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "time", obj); if ((obj = json_object_new_string(fwts_log_field_to_str_full(field))) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "field_type", obj); str = fwts_log_level_to_str(level); if (!strcmp(str, " ")) str = "None"; if ((obj = json_object_new_string(str)) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "level", obj); if ((obj = json_object_new_string(*status ? status : "None")) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "status", obj); if ((obj = json_object_new_string(label && *label ? label : "None")) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "failure_label", obj); /* Redundant really if ((obj = json_object_new_string(log->owner)) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "owner", obj); */ if ((obj = json_object_new_string(buffer)) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "log_text", obj); json_object_array_add(json_log, header); log_file->line_number++; /* This is academic really */ return 0; } /* * fwts_log_underline_json() * write an underline across log, using character ch as the underline */ static void fwts_log_underline_json(fwts_log_file *log_file, const int ch) { FWTS_UNUSED(log_file); FWTS_UNUSED(ch); /* No-op for json */ } /* * fwts_log_newline() * write newline to log */ static void fwts_log_newline_json(fwts_log_file *log_file) { FWTS_UNUSED(log_file); /* No-op for json */ } static void fwts_log_section_begin_json(fwts_log_file *log_file, const char *name) { json_object *json_obj; json_object *json_log; FWTS_UNUSED(log_file); if ((json_obj = json_object_new_object()) == NULL) fwts_log_out_of_memory_json(); if ((json_log = json_object_new_array()) == NULL) fwts_log_out_of_memory_json(); /* * unfortunately json_object_object_add can fail on * a strdup, but it doesn't check this and doesn't * tell us about this either. Bit lame really. */ json_object_object_add(json_obj, name, json_log); if (json_stack_index > 0) if (json_object_array_add(json_stack[json_stack_index-1].log, json_obj) != 0) fwts_log_out_of_memory_json(); if (json_stack_index < MAX_JSON_STACK) { json_stack[json_stack_index].obj = json_obj; json_stack[json_stack_index].log = json_log; json_stack_index++; } else { fprintf(stderr, "json log stack overflow pushing section %s.\n", name); exit(EXIT_FAILURE); } } static void fwts_log_section_end_json(fwts_log_file *log_file) { FWTS_UNUSED(log_file); if (json_stack_index > 0) json_stack_index--; else { fprintf(stderr, "json log stack underflow.\n"); exit(EXIT_FAILURE); } } static void fwts_log_open_json(fwts_log_file *log_file) { fwts_log_section_begin_json(log_file, "fwts"); } static void fwts_log_close_json(fwts_log_file *log_file) { char *str; fwts_log_section_end_json(log_file); #ifdef JSON_C_TO_STRING_PRETTY str = json_object_to_json_string_ext( json_stack[0].obj, JSON_C_TO_STRING_PRETTY); #else str = json_object_to_json_string(json_stack[0].obj); #endif if (str == NULL) { /* Let's not make this bail out as user may be logging to other files too */ fprintf(stderr, "Cannot turn json object to text for output. Empty json output\n"); } else { size_t len = strlen(str); fwrite(str, 1, len, log_file->fp); fwrite("\n", 1, 1, log_file->fp); fflush(log_file->fp); log_file->line_number++; } json_object_put(json_stack[0].obj); free(str); } fwts_log_ops fwts_log_json_ops = { .print = fwts_log_print_json, .underline = fwts_log_underline_json, .newline = fwts_log_newline_json, .section_begin = fwts_log_section_begin_json, .section_end = fwts_log_section_end_json, .open = fwts_log_open_json, .close = fwts_log_close_json }; src/lib/src/fwts_log_plaintext.c000066400000000000000000000117271465205512700173010ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define LOG_LINE_WIDTH 100 #include #include #include #include #include #include #include #include #include #include "fwts.h" /* * fwts_log_header_plaintext() * format up a tabulated log heading */ static int fwts_log_header_plaintext( fwts_log_file *log_file, char *buffer, const int len, const fwts_log_field field, const fwts_log_level level) { const char *ptr; int n = 0; struct tm tm; time_t now; time(&now); localtime_r(&now, &tm); for (ptr = fwts_log_format; *ptr; ) { if (*ptr == '%') { ptr++; if (!strncmp(ptr, "line", 4)) { n += snprintf(buffer + n, len - n, "%5.5" PRIu32, log_file->line_number); ptr += 4; } if (!strncmp(ptr, "date", 4)) { n += snprintf(buffer + n, len - n, "%2.2d/%2.2d/%-2.2d", tm.tm_mday, tm.tm_mon + 1, (tm.tm_year+1900) % 100); ptr += 4; } if (!strncmp(ptr, "time", 4)) { n += snprintf(buffer + n, len - n, "%2.2d:%2.2d:%2.2d", tm.tm_hour, tm.tm_min, tm.tm_sec); ptr += 4; } if (!strncmp(ptr, "field", 5)) { n += snprintf(buffer + n, len - n, "%s", fwts_log_field_to_str(field)); ptr += 5; } if (!strncmp(ptr, "level", 5)) { n += snprintf(buffer + n, len - n, "%1.1s", fwts_log_level_to_str(level)); ptr += 5; } if (!strncmp(ptr,"owner", 5) && log_file->log->owner) { n += snprintf(buffer + n, len - n, "%-15.15s", log_file->log->owner); ptr += 5; } } else { n += snprintf(buffer+n, len-n, "%c", *ptr); ptr++; } } return n; } /* * fwts_log_print() * print to a log */ static int fwts_log_print_plaintext( fwts_log_file *log_file, const fwts_log_field field, const fwts_log_level level, const char *status, /* Ignored */ const char *label, /* Ignored */ const char *prefix, const char *buffer) { char tmpbuf[8192]; int n = 0; int header_len; int len = 0; fwts_list *lines; fwts_list_link *item; FWTS_UNUSED(status); FWTS_UNUSED(label); if (!((field & LOG_FIELD_MASK) & fwts_log_filter)) return 0; /* This is a pain, we neen to find out how big the leading log message is, so format one up. */ n = header_len = fwts_log_header_plaintext(log_file, tmpbuf, sizeof(tmpbuf), field, level); n += snprintf(tmpbuf + n, sizeof(tmpbuf) - n, "%s%s", prefix, buffer); /* Break text into multi-lines if necessary */ if (field & LOG_VERBATUM) lines = fwts_list_from_text(tmpbuf + header_len); else lines = fwts_format_text(tmpbuf + header_len, log_file->line_width - header_len); if (!lines) return 0; len = n; fwts_list_foreach(item, lines) { char *text = fwts_text_list_text(item); if (!(field & LOG_NO_FIELDS)) { /* Re-format up a log heading with current line number which may increment with multiple line log messages */ fwts_log_header_plaintext(log_file, tmpbuf, sizeof(tmpbuf), field, level); fwrite(tmpbuf, 1, header_len, log_file->fp); } fwrite(text, 1, strlen(text), log_file->fp); fwrite("\n", 1, 1, log_file->fp); fflush(log_file->fp); log_file->line_number++; len += strlen(text) + 1; } fwts_text_list_free(lines); return len; } /* * fwts_log_underline_plaintext() * write an underline across log, using character ch as the underline */ static void fwts_log_underline_plaintext(fwts_log_file *log_file, const int ch) { int n; char *buffer; size_t width = log_file->line_width + 1; if (!((LOG_SEPARATOR & LOG_FIELD_MASK) & fwts_log_filter)) return; buffer = calloc(1, width); if (!buffer) return; /* Unlikely, and just abort */ /* Write in leading optional line prefix */ n = fwts_log_header_plaintext(log_file, buffer, width, LOG_SEPARATOR, LOG_LEVEL_NONE); memset(buffer + n, ch, width - n); buffer[width - 1] = '\n'; fwrite(buffer, 1, width, log_file->fp); fflush(log_file->fp); log_file->line_number++; free(buffer); } /* * fwts_log_newline_plaintext() * write newline to log */ static void fwts_log_newline_plaintext(fwts_log_file *log_file) { fwrite("\n", 1, 1, log_file->fp); fflush(log_file->fp); log_file->line_number++; } fwts_log_ops fwts_log_plaintext_ops = { .print = fwts_log_print_plaintext, .underline = fwts_log_underline_plaintext, .newline = fwts_log_newline_plaintext }; src/lib/src/fwts_log_scan.c000066400000000000000000000411561465205512700162140ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include "fwts.h" /* * fwts_log_free() * free log list */ void fwts_log_free(fwts_list *log) { fwts_text_list_free(log); } /* * fwts_log_find_changes() * find new lines added to log, clone them from new list * must be freed with fwts_list_free(log_diff, NULL); */ fwts_list *fwts_log_find_changes(fwts_list *log_old, fwts_list *log_new) { fwts_list_link *l_old, *l_new = NULL; fwts_list *log_diff; if (log_new == NULL) { /* Nothing new to compare, return nothing */ return NULL; } if ((log_diff = fwts_list_new()) == NULL) return NULL; if (log_old == NULL) { /* Nothing in old log, so clone all of new list */ l_new = log_new->head; } else { fwts_list_link *l_old_last = NULL; /* Clone just the new differences */ /* Find last item in old log */ fwts_list_foreach(l_old, log_old) l_old_last = l_old; if (l_old_last) { /* And now look for that last line in the new log */ char *old = fwts_list_data(char *, l_old_last); fwts_list_foreach(l_new, log_new) { const char *new = fwts_list_data(char *, l_new); if (!strcmp(new, old)) { /* Found last line that matches, bump to next */ l_new = l_new->next; break; } } } } /* Clone the new unique lines to the log_diff list */ for (; l_new; l_new = l_new->next) { if (fwts_list_append(log_diff, l_new->data) == NULL) { fwts_list_free(log_diff, NULL); return NULL; } } return log_diff; } char *fwts_log_remove_timestamp(char *text) { char *ptr = text; if ((ptr[0] == '<') && (ptr[2] == '>')) ptr += 3; if (*ptr == '[') while (*ptr && *ptr != ']') ptr++; if (*ptr == ']') ptr += 2; /* Skip ] and trailing space */ return ptr; } int fwts_log_scan(fwts_framework *fw, fwts_list *log, fwts_log_scan_func scan_func, fwts_log_progress_func progress_func, void *private, int *match, bool remove_timestamp) { typedef struct { char *line; int repeated; } log_reduced_item; char *prev; fwts_list_link *item; fwts_list *log_reduced; int i; char *newline = NULL; *match = 0; if (!log) return FWTS_ERROR; if ((log_reduced = fwts_list_new()) == NULL) return FWTS_ERROR; /* * Form a reduced log by stripping out repeated warnings */ i = 0; fwts_list_foreach(item, log) { if (remove_timestamp) { newline = fwts_log_remove_timestamp(fwts_list_data(char *, item)); } else { newline = fwts_list_data(char *, item); } if (progress_func && ((i % 25) == 0)) progress_func(fw, 50 * i / fwts_list_len(log)); if (*newline) { bool matched = false; fwts_list_link *l; fwts_list_foreach(l, log_reduced) { char *line; log_reduced_item *reduced = fwts_list_data(log_reduced_item *, l); if (remove_timestamp) line = fwts_log_remove_timestamp(reduced->line); else line = reduced->line; if (strcmp(newline, line) == 0) { reduced->repeated++; matched = true; break; } } if (!matched) { log_reduced_item *new; if ((new = calloc(1, sizeof(log_reduced_item))) == NULL) { fwts_list_free(log_reduced, free); return FWTS_ERROR; } new->line = fwts_list_data(char *, item); new->repeated = 0; fwts_list_append(log_reduced, new); } } i++; } prev = ""; i = 0; fwts_list_foreach(item, log_reduced) { log_reduced_item *reduced = fwts_list_data(log_reduced_item *, item); char *line = reduced->line; if ((line[0] == '<') && (line[2] == '>')) line += 3; scan_func(fw, line, reduced->repeated, prev, private, match); if (progress_func && ((i % 25) == 0)) progress_func(fw, (50+(50 * i)) / fwts_list_len(log_reduced)); prev = line; i++; } if (progress_func) progress_func(fw, 100); fwts_list_free(log_reduced, free); return FWTS_OK; } char *fwts_log_unique_label(const char *str, const char *label) { static char buffer[1024]; const char *src = str; char *dst; int count = 0; bool forceupper = true; strncpy(buffer, label, sizeof(buffer)-1); buffer[sizeof(buffer)-1] = '\0'; dst = buffer + strlen(label); while ((dst < (buffer + sizeof(buffer) - 1)) && (count < 4) && (*src)) { if ((*src == '|') || (*src == '/') || (*src == ' ')) { src++; count++; forceupper = true; continue; } if (!isalnum(*src)) { src++; continue; } *dst++ = forceupper ? toupper(*src) : *src; src++; forceupper = false; } *dst = '\0'; return buffer; } void fwts_log_scan_patterns(fwts_framework *fw, char *line, int repeated, char *prevline, void *private, int *errors, const char *name, const char *advice) { fwts_log_pattern *pattern = (fwts_log_pattern *)private; FWTS_UNUSED(prevline); while (pattern->pattern != NULL) { bool matched = false; switch (pattern->compare_mode) { case FWTS_COMPARE_REGEX: if (pattern->compiled_ok) { int ret = regexec(&pattern->compiled, line, 0, NULL, 0); if (!ret) { /* A successful regular expression match! */ matched = true; } else if (ret != REG_NOMATCH) { char msg[1024]; regerror(ret, &pattern->compiled, msg, sizeof(msg)); fwts_log_info(fw, "regular expression engine error: %s.", msg); } } break; case FWTS_COMPARE_STRING: default: matched = (strstr(line, pattern->pattern) != NULL) ; break; } if (matched) { if (pattern->level == LOG_LEVEL_INFO) fwts_log_info(fw, "%s message: %s", name, line); else { fwts_failed(fw, pattern->level, pattern->label, "%s %s message: %s", fwts_log_level_to_str(pattern->level), name, line); fwts_error_inc(fw, pattern->label, errors); } if (repeated) fwts_log_info(fw, "Message repeated %d times.", repeated); if ((pattern->advice) != NULL && (*pattern->advice)) fwts_advice(fw, "%s", pattern->advice); else fwts_advice(fw, "%s", advice); return; } pattern++; } } /* * fwts_log_compare_mode_str_to_val() * convert compare mode strings (from json database) to compare_mode values */ fwts_compare_mode fwts_log_compare_mode_str_to_val(const char *str) { if (strcmp(str, "regex") == 0) return FWTS_COMPARE_REGEX; else if (strcmp(str, "string") == 0) return FWTS_COMPARE_STRING; else return FWTS_COMPARE_UNKNOWN; } /* * fwts_json_str() * given a key, fetch the string value associated with this object * and report an error if it cannot be found. */ const char *fwts_json_str( fwts_framework *fw, const char *table, int index, json_object *obj, const char *key, bool log_error) { const char *str; #if JSON_HAS_GET_EX json_object *str_obj; if (!json_object_object_get_ex(obj, key, &str_obj)) goto nullobj; str = json_object_get_string(str_obj); if (FWTS_JSON_ERROR(str)) goto nullobj; #else str = json_object_get_string(json_object_object_get(obj, key)); if (FWTS_JSON_ERROR(str)) goto nullobj; #endif return str; nullobj: if (log_error) fwts_log_error(fw, "Cannot fetch %s val from item %d, table %s.", key, index, table); return NULL; } int fwts_log_check(fwts_framework *fw, const char *table, fwts_log_scan_func fwts_log_scan_patterns_func, fwts_log_progress_func progress, fwts_list *log, int *errors, const char *json_data_path, const char *label, bool remove_timestamp) { int ret = FWTS_ERROR; int n; int i; int fd; json_object *log_objs; json_object *log_table; fwts_log_pattern *patterns; *errors = 0; /* * json_object_from_file() can fail when files aren't readable * so check if we can open for read before calling json_object_from_file() */ if ((fd = open(json_data_path, O_RDONLY)) < 0) { fwts_log_error(fw, "Cannot read file %s, check the path and check that the file exists, you may need to specify -j or -J.", json_data_path); return FWTS_ERROR; } (void)close(fd); log_objs = json_object_from_file(json_data_path); if (FWTS_JSON_ERROR(log_objs)) { fwts_log_error(fw, "Cannot load log data from %s.", json_data_path); return FWTS_ERROR; } #if JSON_HAS_GET_EX if (!json_object_object_get_ex(log_objs, table, &log_table)) { fwts_log_error(fw, "Cannot fetch log table object '%s' from %s.", table, json_data_path); goto fail_put; } #else log_table = json_object_object_get(log_objs, table); if (FWTS_JSON_ERROR(log_table)) { fwts_log_error(fw, "Cannot fetch log table object '%s' from %s.", table, json_data_path); goto fail_put; } #endif n = json_object_array_length(log_table); /* Last entry is null to indicate end, so alloc n+1 items */ if ((patterns = calloc(n+1, sizeof(fwts_log_pattern))) == NULL) { fwts_log_error(fw, "Cannot allocate pattern table."); goto fail_put; } /* Now fetch json objects and compile regex */ for (i = 0; i < n; i++) { const char *str; json_object *obj; obj = json_object_array_get_idx(log_table, i); if (FWTS_JSON_ERROR(obj)) { fwts_log_error(fw, "Cannot fetch %d item from table %s.", i, table); goto fail; } if ((str = fwts_json_str(fw, table, i, obj, "compare_mode", true)) == NULL) goto fail; patterns[i].compare_mode = fwts_log_compare_mode_str_to_val(str); if ((str = fwts_json_str(fw, table, i, obj, "log_level", true)) == NULL) goto fail; patterns[i].level = fwts_log_str_to_level(str); if ((patterns[i].pattern = fwts_json_str(fw, table, i, obj, "pattern", true)) == NULL) goto fail; if ((patterns[i].advice = fwts_json_str(fw, table, i, obj, "advice", true)) == NULL) goto fail; /* Labels appear in fwts 0.26.0, so are optional with older versions */ str = fwts_json_str(fw, table, i, obj, "label", false); if (str) { patterns[i].label = strdup(str); } else { /* if not specified, auto-magically generate */ patterns[i].label = strdup(fwts_log_unique_label(patterns[i].pattern, label)); } if (patterns[i].label == NULL) goto fail; if (patterns[i].compare_mode == FWTS_COMPARE_REGEX) { int rc; rc = regcomp(&patterns[i].compiled, patterns[i].pattern, REG_EXTENDED); if (rc) { fwts_log_error(fw, "Regex %s failed to compile: %d.", patterns[i].pattern, rc); patterns[i].compiled_ok = false; } else { patterns[i].compiled_ok = true; } } } /* We've now collected up the scan patterns, lets scan the log for errors */ ret = fwts_log_scan(fw, log, fwts_log_scan_patterns_func, progress, patterns, errors, remove_timestamp); fail: for (i = 0; i < n; i++) { if (patterns[i].compiled_ok) regfree(&patterns[i].compiled); if (patterns[i].label) free(patterns[i].label); } free(patterns); fail_put: json_object_put(log_objs); return ret; } static void fwts_log_regex_find_callback(fwts_framework *fw, char *line, int repeated, char *prev, void *pattern, int *match) { int rc; regex_t compiled; FWTS_UNUSED(fw); FWTS_UNUSED(repeated); FWTS_UNUSED(prev); rc = regcomp(&compiled, (char *)pattern, REG_EXTENDED); if (rc) { fwts_log_error(fw, "Regex %s failed to compile: %d.", (char *)pattern, rc); } else { rc = regexec(&compiled, line, 0, NULL, 0); regfree(&compiled); if (!rc) (*match)++; } } /* * fwts_log_regex_find() * scan a log list of lines for a given regex pattern * uses fwts_log_regex_find_callback() callback */ int fwts_log_regex_find(fwts_framework *fw, fwts_list *log, char *pattern, bool remove_timestamp) { int found = 0; fwts_log_scan(fw, log, fwts_log_regex_find_callback, NULL, pattern, &found, remove_timestamp); return found; } src/lib/src/fwts_log_xml.c000066400000000000000000000114451465205512700160660ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include "fwts.h" #define MAX_XML_STACK (64) #define XML_INDENT (4) typedef struct { const char *name; } fwts_log_xml_stack_t; static fwts_log_xml_stack_t xml_stack[MAX_XML_STACK]; static int xml_stack_index = 0; /* * fwts_log_print_xml() * print to a log */ static int fwts_log_print_xml( fwts_log_file *log_file, const fwts_log_field field, const fwts_log_level level, const char *status, const char *label, const char *prefix, const char *buffer) { struct tm tm; time_t now; char *str; FWTS_UNUSED(prefix); if (!((field & LOG_FIELD_MASK) & fwts_log_filter)) return 0; if (field & (LOG_NEWLINE | LOG_SEPARATOR | LOG_DEBUG)) return 0; time(&now); localtime_r(&now, &tm); fprintf(log_file->fp, "%*s\n", xml_stack_index * XML_INDENT, ""); fprintf(log_file->fp, "%*s%" PRIu32 "\n", (xml_stack_index + 1) * XML_INDENT, "", log_file->line_number); fprintf(log_file->fp, "%*s%2.2d/%2.2d/%-2.2d\n", (xml_stack_index + 1) * XML_INDENT, "", tm.tm_mday, tm.tm_mon + 1, (tm.tm_year+1900) % 100); fprintf(log_file->fp, "%*s\n", (xml_stack_index + 1) * XML_INDENT, "", tm.tm_hour, tm.tm_min, tm.tm_sec); fprintf(log_file->fp, "%*s%s\n", (xml_stack_index + 1) * XML_INDENT, "", fwts_log_field_to_str_full(field)); str = fwts_log_level_to_str(level); if (!strcmp(str, " ")) str = "None"; fprintf(log_file->fp, "%*s%s\n", (xml_stack_index + 1) * XML_INDENT, "", str); fprintf(log_file->fp, "%*s%s\n", (xml_stack_index + 1) * XML_INDENT, "", *status ? status : "None"); fprintf(log_file->fp, "%*s%s\n", (xml_stack_index + 1) * XML_INDENT, "", label && *label ? label : "None"); fprintf(log_file->fp, "%*s%s\n", (xml_stack_index + 1) * XML_INDENT, "", buffer); fprintf(log_file->fp, "%*s\n", xml_stack_index * XML_INDENT, ""); fflush(log_file->fp); log_file->line_number++; return 0; } /* * fwts_log_underline_xml() * write an underline across log, using character ch as the underline */ static void fwts_log_underline_xml(fwts_log_file *log_file, const int ch) { FWTS_UNUSED(log_file); FWTS_UNUSED(ch); /* No-op for xml */ } /* * fwts_log_newline() * write newline to log */ static void fwts_log_newline_xml(fwts_log_file *log_file) { FWTS_UNUSED(log_file); /* No-op for xml */ } static void fwts_log_section_begin_xml(fwts_log_file *log_file, const char *name) { fprintf(log_file->fp, "%*s<%s>\n", xml_stack_index * XML_INDENT, "", name); fflush(log_file->fp); if (xml_stack_index < MAX_XML_STACK) { xml_stack[xml_stack_index].name = name; xml_stack_index++; } else { fprintf(stderr, "xml log stack overflow pushing section %s.\n", name); exit(EXIT_FAILURE); } } static void fwts_log_section_end_xml(fwts_log_file *log_file) { if (xml_stack_index > 0) { xml_stack_index--; fprintf(log_file->fp, "%*s\n", xml_stack_index * XML_INDENT, "", xml_stack[xml_stack_index].name); fflush(log_file->fp); } else { fprintf(stderr, "xml log stack underflow.\n"); exit(EXIT_FAILURE); } } static void fwts_log_open_xml(fwts_log_file *log_file) { char *xml_header = "\n"; fwrite(xml_header, 1, strlen(xml_header), log_file->fp); fflush(log_file->fp); fwts_log_section_begin_xml(log_file, "fwts"); } static void fwts_log_close_xml(fwts_log_file *log_file) { fwts_log_section_end_xml(log_file); fwrite("\n", 1, 1, log_file->fp); fflush(log_file->fp); log_file->line_number++; } fwts_log_ops fwts_log_xml_ops = { .print = fwts_log_print_xml, .underline = fwts_log_underline_xml, .newline = fwts_log_newline_xml, .section_begin = fwts_log_section_begin_xml, .section_end = fwts_log_section_end_xml, .open = fwts_log_open_xml, .close = fwts_log_close_xml }; src/lib/src/fwts_memorymap.c000066400000000000000000000214331465205512700164310ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corporation * Copyright (C) 2010-2024 Canonical * * This file was originally part of the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include "fwts.h" /* * fwts_fwts_memory_map_entry_compare() * callback used to sort memory_map entries on start address */ static int fwts_fwts_memory_map_entry_compare(void *data1, void *data2) { fwts_memory_map_entry *entry1 = (fwts_memory_map_entry *)data1; fwts_memory_map_entry *entry2 = (fwts_memory_map_entry *)data2; if (entry1->start_address < entry2->start_address) return -1; else if (entry1->start_address > entry2->start_address) return 1; else return 0; } /* * fwts_memory_map_str_to_type() * convert memory strings into type values */ static int fwts_memory_map_str_to_type(const char *str) { /* Strings from /sys/firmware/memmap/x/type */ if (strstr(str, "System RAM")) return FWTS_MEMORY_MAP_USABLE; if (strstr(str, "reserved") || strstr(str, "Reserved")) return FWTS_MEMORY_MAP_RESERVED; if (strstr(str, "ACPI Non-volatile Storage")) return FWTS_MEMORY_MAP_ACPI; /* Strings from kernel log */ if (strstr(str, "(usable)")) return FWTS_MEMORY_MAP_USABLE; if (strstr(str, "(reserved)")) return FWTS_MEMORY_MAP_RESERVED; if (strstr(str, "ACPI")) return FWTS_MEMORY_MAP_ACPI; return FWTS_MEMORY_MAP_UNKNOWN; } /* * fwts_memory_map_type_to_str() * convert E280 type values to strings */ static char *fwts_memory_map_type_to_str(const int type) { switch (type) { case FWTS_MEMORY_MAP_RESERVED: return "(Reserved)"; case FWTS_MEMORY_MAP_ACPI: return "(ACPI Non-volatile Storage)"; case FWTS_MEMORY_MAP_USABLE: return "(System RAM)"; default: return "(UNKNOWN)"; } } /* * fwts_register_memory_map_line() * add memory_map line entry into a list ordered on start address */ static int fwts_register_memory_map_line(fwts_list *memory_map_list, const uint64_t start, const uint64_t end, const int type) { fwts_memory_map_entry *entry; if ((entry = calloc(1, sizeof(fwts_memory_map_entry))) == NULL) return FWTS_ERROR; entry->start_address = start; entry->end_address = end; entry->type = type; if (fwts_list_add_ordered(memory_map_list, entry, fwts_fwts_memory_map_entry_compare) == NULL) return FWTS_ERROR; return FWTS_OK; } /* * fwts_memory_map_type() * figure out memory region type on a given memory address */ int fwts_memory_map_type(fwts_list *memory_map_list, const uint64_t memory) { fwts_list_link *item; fwts_list_foreach(item, memory_map_list) { fwts_memory_map_entry *entry = fwts_list_data(fwts_memory_map_entry*, item); if (entry->start_address <= memory && entry->end_address > memory) return entry->type; } return FWTS_MEMORY_MAP_UNKNOWN; } fwts_memory_map_entry *fwts_memory_map_info(fwts_list *memory_map_list, const uint64_t memory) { fwts_list_link *item; fwts_list_foreach(item, memory_map_list) { fwts_memory_map_entry *entry = fwts_list_data(fwts_memory_map_entry*, item); if (entry->start_address <= memory && entry->end_address > memory) return entry; } return NULL; } /* * fwts_memory_map_is_reserved() * determine if a memory region is marked as reserved or not. */ fwts_bool fwts_memory_map_is_reserved(fwts_list *memory_map_list, const uint64_t memory) { int result = FWTS_MEMORY_MAP_UNKNOWN; /* when we don't have FWTS_MEMORY_MAP info, assume all is fair */ if (memory_map_list == NULL) return FWTS_TRUE; /* when we have FWTS_MEMORY_MAP info list empty, then assume all is fair */ if (memory_map_list->len == 0) return FWTS_TRUE; /* bios data area is always reserved */ if ((memory >= 640 * 1024) && (memory <= 1024*1024)) return FWTS_TRUE; result = fwts_memory_map_type(memory_map_list, memory); if (result == FWTS_MEMORY_MAP_RESERVED) return FWTS_TRUE; if (result == FWTS_MEMORY_MAP_ACPI) return FWTS_TRUE; return FWTS_FALSE; } /* * fwts_memory_map_dmesg_info() * callback to check dmesg for memory_map info */ static void fwts_memory_map_dmesg_info(void *data, void *private) { char *str; char *line = (char *)data; fwts_list *memory_map_list = (fwts_list *)private; if ((str = strstr(line,"BIOS-memory_map:")) != NULL) { uint64_t start; start = strtoull(str+10, NULL, 16); str = strstr(line," - "); if (str) { uint64_t end; str += 3; end = strtoull(str, NULL, 16) - 1; fwts_register_memory_map_line(memory_map_list, start, end, fwts_memory_map_str_to_type(line)); } } } /* * fwts_memory_map_dump_info() * callback to dump FWTS_MEMORY_MAP region */ static void fwts_memory_map_dump_info(void *data, void *private) { fwts_memory_map_entry *entry = (fwts_memory_map_entry *)data; fwts_framework *fw = (fwts_framework *)private; fwts_log_info_verbatim(fw, "0x%16.16" PRIx64 " - 0x%16.16" PRIx64 " %s", entry->start_address, entry->end_address, fwts_memory_map_type_to_str(entry->type)); } /* * fwts_memory_map_table_dump() * dump FWTS_MEMORY_MAP region */ void fwts_memory_map_table_dump(fwts_framework *fw, fwts_list *memory_map_list) { fwts_log_info_verbatim(fw, "Memory Map Layout"); fwts_log_info_verbatim(fw, "-----------------"); fwts_list_iterate(memory_map_list, fwts_memory_map_dump_info, fw); } /* * fwts_memory_map_table_load_from_klog() * load memory_map data from the kernel log */ fwts_list *fwts_memory_map_table_load_from_klog(fwts_framework *fw) { fwts_list *klog; fwts_list *memory_map_list; FWTS_UNUSED(fw); if ((klog = fwts_klog_read()) == NULL) return NULL; if ((memory_map_list = fwts_list_new()) == NULL) { fwts_klog_free(klog); return NULL; } fwts_list_iterate(klog, fwts_memory_map_dmesg_info, memory_map_list); fwts_klog_free(klog); return memory_map_list; } /* * fwts_memory_map_table_read_entry() * load individual memory_map entry from /sys/firmware/memmap/ */ static fwts_memory_map_entry *fwts_memory_map_table_read_entry(const char *which) { char path[PATH_MAX]; char *data; fwts_memory_map_entry *entry; if ((entry = calloc(1, sizeof(fwts_memory_map_entry))) == NULL) return NULL; snprintf(path, sizeof(path), "/sys/firmware/memmap/%s/start", which); if ((data = fwts_get(path)) == NULL) { free(entry); return NULL; } sscanf(data, "0x%" SCNx64, &entry->start_address); free(data); snprintf(path, sizeof(path), "/sys/firmware/memmap/%s/end", which); if ((data = fwts_get(path)) == NULL) { free(entry); return NULL; } sscanf(data, "0x%" SCNx64, &entry->end_address); free(data); snprintf(path, sizeof(path), "/sys/firmware/memmap/%s/type", which); if ((data = fwts_get(path)) == NULL) { free(entry); return NULL; } entry->type = fwts_memory_map_str_to_type(data); free(data); return entry; } /* * fwts_memory_map_table_load() * load memory_map table from /sys/firmware/memmap/ */ fwts_list *fwts_memory_map_table_load(fwts_framework *fw) { DIR *dir; struct dirent *directory; fwts_list *memory_map_list; /* Try to load from /sys/firmware/memmap, but if we fail, try scanning the kernel log as a fallback */ if ((dir = opendir("/sys/firmware/memmap/")) == NULL) return fwts_memory_map_table_load_from_klog(fw); if ((memory_map_list = fwts_list_new()) == NULL) { (void)closedir(dir); return NULL; } while ((directory = readdir(dir)) != NULL) { if (strncmp(directory->d_name, ".", 1)) { fwts_memory_map_entry *entry; entry = fwts_memory_map_table_read_entry(directory->d_name); if (!entry) { fwts_memory_map_table_free(memory_map_list); (void)closedir(dir); return NULL; } fwts_list_add_ordered(memory_map_list, entry, fwts_fwts_memory_map_entry_compare); } } (void)closedir(dir); return memory_map_list; } /* * fwts_memory_map_table_free() * free memory_map list */ void fwts_memory_map_table_free(fwts_list *memory_map_list) { fwts_list_free(memory_map_list, free); } const char *fwts_memory_map_name(const int type) { switch (type) { case FWTS_FIRMWARE_BIOS: return "Int 15 AX=E820 BIOS memory map"; case FWTS_FIRMWARE_UEFI: return "UEFI run-time service memory map"; default: return "Unknown memory map"; } } src/lib/src/fwts_mmap.c000066400000000000000000000052111465205512700153510ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include "fwts.h" #define FWTS_DEFAULT_PAGE_SIZE (4096) /* * fwts_page_size() * determine system page size, guess if we can't * get it from sysconf(). */ size_t fwts_page_size(void) { long page_size; page_size = sysconf(_SC_PAGESIZE); /* If sysconf() returns -1, default it 4K */ return (size_t)(page_size == -1 ? FWTS_DEFAULT_PAGE_SIZE : page_size); } #ifdef FWTS_USE_DEVMEM /* * fwts_mmap() * Try and map physical memory from offset address 'start' and length * 'size'. Return either the address or FWTS_MAP_FAILED if failed to mmap. */ void *fwts_mmap(const off_t start, const size_t size) { int fd; int page_size; off_t offset; size_t length; void *mem; void *ret = FWTS_MAP_FAILED; page_size = fwts_page_size(); offset = ((size_t)start) & (page_size - 1); length = (size_t)size + offset; if ((fd = open("/dev/mem", O_RDONLY)) < 0) return ret; if ((mem = mmap(NULL, length, PROT_READ, MAP_PRIVATE, fd, start - offset)) != MAP_FAILED) ret = (void *)((uint8_t *)mem + offset); (void)close(fd); return ret; } /* * fwts_munmap() * Unmap memory mapped with fwts_mmap. Needs the mmap'd address and size. */ int fwts_munmap(void *mem, const size_t size) { int page_size; off_t offset; page_size = fwts_page_size(); offset = ((off_t)(mem)) & (page_size - 1); if (munmap((void *)((uint8_t *)mem - offset), size + offset) < 0) return FWTS_ERROR; return FWTS_OK; } #else /* FWTS_USE_DEVMEM */ void *fwts_mmap(const off_t start __attribute__ ((unused)), const size_t size __attribute__ ((unused))) { return FWTS_MAP_FAILED; } int fwts_munmap(void *mem __attribute__ ((unused)), const size_t size __attribute__ ((unused))) { return FWTS_ERROR; } #endif /* FWTS_USE_DEVMEM */ src/lib/src/fwts_modprobe.c000066400000000000000000000136151465205512700162350ustar00rootroot00000000000000/* * Copyright (C) 2020-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include "fwts.h" /* * fwts_module_path() * build a new path based on basename path and * the new filename (or directory name) */ static void fwts_module_path( char *newpath, const size_t newpath_len, const char *basepath, const char *filename) { char *ptr = newpath; size_t n = newpath_len, len; (void)strlcpy(ptr, basepath, n); len = strlen(basepath); ptr += len; n -= len; (void)strlcpy(ptr, "/", n); ptr++; n--; (void)strlcpy(ptr, filename, n); } /* * fwts_module_find() * recursively search for module from the basepath start * and return false if not found, and true if found. If * found, the full path of the module is set in the string * path. */ static bool fwts_module_find( const char *module, const char *basepath, char *path, const size_t path_len) { DIR *dir; struct dirent *de; dir = opendir(basepath); if (!dir) return false; while ((de = readdir(dir)) != NULL) { char newpath[PATH_MAX]; if (de->d_name[0] == '.') continue; switch (de->d_type) { case DT_DIR: fwts_module_path(newpath, sizeof(newpath), basepath, de->d_name); if (fwts_module_find(module, newpath, path, path_len)) { (void)closedir(dir); return true; } break; case DT_REG: if (!strcmp(de->d_name, module)) { fwts_module_path(path, path_len, basepath, module); (void)closedir(dir); return true; } break; default: break; } } (void)closedir(dir); return false; } /* * sys_finit_module() * system call wrapper for finit_module */ static inline int sys_finit_module( int fd, const char *param_values, int flags) { errno = 0; return syscall(__NR_finit_module, fd, param_values, flags); } /* * sys_delete_module() * system call wrapper for delete_module */ static inline int sys_delete_module( const char *name, int flags) { errno = 0; return syscall(__NR_delete_module, name, flags); } /* * fwts_module_loaded() * check if module is loaded, the name (without .ko suffix) is * provided in string module. Boolean loaded is set to true if * the module is loaded, false otherwise. Returns FWTS_OK if * all went OK, FWTS_ERROR if something went wrong. */ int fwts_module_loaded(fwts_framework *fw, const char *module, bool *loaded) { FILE *fp; char buffer[1024]; *loaded = false; fp = fopen("/proc/modules", "r"); if (!fp) { fwts_log_error(fw, "Cannot open /proc/modules, errno=%d (%s)\n", errno, strerror(errno)); return FWTS_ERROR; } (void)memset(buffer, 0, sizeof(buffer)); while (fgets(buffer, sizeof(buffer) - 1, fp) != NULL) { char *ptr = strchr(buffer, ' '); if (ptr) *ptr = '\0'; if (!strcmp(buffer, module)) { *loaded = true; break; } } (void)fclose(fp); return FWTS_OK; } /* * fwts_module_load() * load a module. The module name (without the .ko) suffix * is to provided in string module. Returns FWTS_OK if * succeeded (or the module is already loaded) and FWTS_ERROR * if the load failed. */ int fwts_module_load(fwts_framework *fw, const char *module) { struct utsname u; const size_t modlen = strlen(module); char module_ko[modlen + 4]; char path[PATH_MAX]; char modpath[PATH_MAX]; const char *params = ""; int fd; bool loaded = false; /* * No need to unload if it's not already loaded */ if (fwts_module_loaded(fw, module, &loaded) == FWTS_OK) { if (loaded) return FWTS_OK; } /* * Set up module root path and try to find the named module */ if (uname(&u) < 0) { fwts_log_error(fw, "Call to uname failed, errno=%d (%s)\n", errno, strerror(errno)); return FWTS_ERROR; } (void)snprintf(module_ko, sizeof(module_ko), "%s.ko", module); (void)snprintf(modpath, sizeof(modpath), "/lib/modules/%s", u.release); if (!fwts_module_find(module_ko, modpath, path, sizeof(path))) { fwts_log_error(fw, "Cannot find module %s\n", module); return FWTS_ERROR; } /* * We've found it, now try and load it */ fd = open(path, O_RDONLY); if (fd < 0) { fwts_log_error(fw, "Cannot open module %s, errno=%d (%s)\n", path, errno, strerror(errno)); return FWTS_ERROR; } if (sys_finit_module(fd, params, 0) < 0) { fwts_log_error(fw, "Cannot load module %s, errno=%d (%s)\n", path, errno, strerror(errno)); (void)close(fd); return FWTS_ERROR; } (void)close(fd); return FWTS_OK; } /* * fwts_module_unload() * unload a module. The module name (without the .ko) suffix * is to provided in string module. Returns FWTS_OK if * succeeded (or the module is not previously loaded) and * FWTS_ERROR if the unload failed. */ int fwts_module_unload(fwts_framework *fw, const char *module) { bool loaded = false; int ret; /* * No need to unload if it's not already loaded */ if (fwts_module_loaded(fw, module, &loaded) == FWTS_OK) { if (!loaded) return FWTS_OK; } ret = sys_delete_module(module, O_NONBLOCK); if (ret < 0) { fwts_log_error(fw, "Cannot unload module %s, errno=%d (%s)\n", module, errno, strerror(errno)); return FWTS_ERROR; } return FWTS_OK; } src/lib/src/fwts_multiproc.c000066400000000000000000000130151465205512700164360ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include #include #include "fwts.h" #define SYSTEM_BASE_END (0x000a0000) /* Assume > 512K, end is at 640K */ #define BIOS_START (0x000e0000) /* Start of BIOS memory */ #define BIOS_END (0x000fffff) /* End of BIOS memory */ #define MAX_SIZE(x) (1UL << (sizeof(x) * 8)) /* * fwts_mp_get_address() * scan for _MP_ floating pointer, set phys_addr if found. */ static int fwts_mp_get_address(uint32_t *phys_addr) { off_t ebda; int i; typedef struct { off_t start; off_t end; } fwts_scan_region; fwts_scan_region regions[] = { { SYSTEM_BASE_END - 1024, SYSTEM_BASE_END }, /* Assume 640K or more */ { BIOS_START, BIOS_END }, { 0, 0x400 }, { 0, 0 }, }; /* If we have an EBDA region defined, scan this rather than default end of 640K region */ if ((ebda = fwts_ebda_get()) != FWTS_NO_EBDA) { if (ebda != 0) { regions[0].start = ebda; regions[0].end = ebda + 1024; } } for (i = 0; regions[i].end; i++) { void *mem; uint8_t *ptr; off_t start = regions[i].start; size_t size = regions[i].end - start; if ((mem = fwts_mmap(start, size)) == FWTS_MAP_FAILED) continue; for (ptr = mem; ptr < (uint8_t*)mem + size; ptr += 16) { if ((*ptr == '_') && (*(ptr + 1) == 'M') && (*(ptr + 2) == 'P') && (*(ptr + 3) == '_')) { fwts_mp_floating_header *hdr = (fwts_mp_floating_header*)ptr; if (fwts_checksum((uint8_t *)hdr, sizeof(fwts_mp_floating_header)) == 0) { /* Looks valid, so return addr */ *phys_addr = hdr->phys_address; (void)fwts_munmap(mem, size); return FWTS_OK; } } } (void)fwts_munmap(mem, size); } *phys_addr = 0; return FWTS_ERROR; } /* * fwts_mp_data_get() * find _MP_ data, map in header and table, * collect up entries into a list */ int fwts_mp_data_get(fwts_mp_data *data) { uint32_t phys_addr; void *mem; uint8_t *tmp; fwts_mp_config_table_header *header; int max_data_size; if (data == NULL) return FWTS_ERROR; if (fwts_mp_get_address(&phys_addr) != FWTS_OK) return FWTS_ERROR; data->phys_addr = phys_addr; /* Get header and find out full size of header and table */ mem = fwts_mmap((off_t)phys_addr, sizeof(fwts_mp_config_table_header)); if (mem == FWTS_MAP_FAILED) return FWTS_ERROR; header = (fwts_mp_config_table_header *)mem; fwts_list_init(&data->entries); data->size = header->base_table_length + ((header->spec_rev == 1) ? 0 : header->extended_table_length); max_data_size = MAX_SIZE(header->base_table_length) + MAX_SIZE(header->extended_table_length); if (data->size < 0 || data->size > max_data_size) return FWTS_ERROR; /* Remap with full header and table now we know how big it is */ (void)fwts_munmap(mem, sizeof(fwts_mp_config_table_header)); mem = fwts_mmap((off_t)phys_addr, data->size); if (mem == FWTS_MAP_FAILED) return FWTS_ERROR; data->header = (fwts_mp_config_table_header*)mem; tmp = (uint8_t*)mem + sizeof(fwts_mp_config_table_header); /* Build a list containing the addresses of where entries start */ while (tmp < (uint8_t*)mem + data->size) { switch (*tmp) { case FWTS_MP_CPU_ENTRY: fwts_list_append(&data->entries, tmp); tmp += sizeof(fwts_mp_processor_entry); break; case FWTS_MP_BUS_ENTRY: fwts_list_append(&data->entries, tmp); tmp += sizeof(fwts_mp_bus_entry); break; case FWTS_MP_IO_APIC_ENTRY: fwts_list_append(&data->entries, tmp); tmp += sizeof(fwts_mp_io_apic_entry); break; case FWTS_MP_IO_INTERRUPT_ENTRY: fwts_list_append(&data->entries, tmp); tmp += sizeof(fwts_mp_io_interrupt_entry); break; case FWTS_MP_LOCAL_INTERRUPT_ENTRY: fwts_list_append(&data->entries, tmp); tmp += sizeof(fwts_mp_local_interrupt_entry); break; case FWTS_MP_SYS_ADDR_ENTRY: fwts_list_append(&data->entries, tmp); tmp += sizeof(fwts_mp_system_address_space_entry); break; case FWTS_MP_BUS_HIERARCHY_ENTRY: fwts_list_append(&data->entries, tmp); tmp += sizeof(fwts_mp_bus_hierarchy_entry); break; case FWTS_MP_COMPAT_BUS_ADDRESS_SPACE_ENTRY: fwts_list_append(&data->entries, tmp); tmp += sizeof(fwts_mp_compat_bus_address_space_entry); break; default: tmp = (uint8_t *)mem + data->size; /* Force abort */ break; } } return FWTS_OK; } /* * fwts_mp_data_free() * free entries and unmap */ int fwts_mp_data_free(fwts_mp_data *data) { if (data == NULL) return FWTS_ERROR; /* Discard list */ fwts_list_free_items(&data->entries, NULL); /* Free mapped data */ if (data->header) (void)fwts_munmap(data->header, data->size); return FWTS_OK; } src/lib/src/fwts_olog.c000066400000000000000000000211121465205512700153550ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include #include #include "fwts.h" /* * OLOG pattern matching strings data file, data stored in json format */ #define OLOG_DATA_JSON_FILE "olog.json" #define MSGLOG_BUFFER_LINE PATH_MAX /* SPECIAL CASE USE for OPEN POWER opal Firmware LOGS */ static const char msglog[] = "/sys/firmware/opal/msglog"; static const char msglog_outfile[] = "/var/log/opal_msglog"; /* * fwts_olog_read(fwts_framework *fw) * read olog log and return as list of lines */ fwts_list *fwts_olog_read(fwts_framework *fw) { fwts_list *list; char *buffer; struct stat filestat; long len; size_t read_actual = 0; size_t write_actual = 0; FILE *msglog_f; FILE *msglog_outfile_f; /* * Special file handling to sequentially fread the sysfs msglog into * a static buffer based on inodes in the stat. The sysfs msglog has * a 0 byte file size since it is a sysfs object. * Real size of the sysfs msglog is not in the stat statistics * Using the st_blksize (the preferred i/o blksize) * st_blocks is zero so must fread block by block */ if (!(msglog_f = fopen(msglog, "r"))) { /* open the sysfs msglog for read only */ if (errno == ENOENT) { /* * If file does not exist, treat as non-fatal * for non PPC devices that don't have the * arch specific sys file. */ return NULL; } goto olog_common_exit; } if (fstat(fileno(msglog_f), &filestat)) { /* * stat fails so not PPC with OPAL msglog and * no -o OLOG sent */ (void)fclose(msglog_f); return NULL; } if ((len = filestat.st_blksize) < 1) { /* if any size at all continue */ goto olog_cleanup_msglog; } if ((buffer = calloc(1, len + 1)) == NULL) goto olog_cleanup_msglog; if (!(msglog_outfile_f = fopen(msglog_outfile, "w"))) { /* create the output file for the sysfs msglog */ free(buffer); goto olog_cleanup_msglog; } while (!feof(msglog_f)) { read_actual = fread(buffer, 1, len, msglog_f); buffer[read_actual] = '\0'; if (read_actual == (size_t)len) { write_actual = fwrite(buffer, 1, len, msglog_outfile_f); if (!(write_actual == (size_t)len)) { free(buffer); goto olog_cleanup_common; } } else { if (feof(msglog_f)) { write_actual = fwrite(buffer, 1, read_actual, msglog_outfile_f); if (!(write_actual == read_actual)) { free(buffer); goto olog_cleanup_common; } } else { /* * we didn't get a full read and file did not * test for EOF so bail */ break; } } } free(buffer); (void)fclose(msglog_f); (void)fclose(msglog_outfile_f); /* * Now work on the dumped out msglog as a real file system file */ if (!(msglog_outfile_f = fopen(msglog_outfile, "r"))) goto olog_common_exit; if (fseek(msglog_outfile_f, 0, SEEK_END)) goto olog_cleanup_msglog_outfile; if ((len = ftell(msglog_outfile_f)) == -1) goto olog_cleanup_msglog_outfile; if ((fseek(msglog_outfile_f, 0, SEEK_SET)) != 0) goto olog_cleanup_msglog_outfile; if ((buffer = calloc(1, len+1)) == NULL) goto olog_cleanup_msglog_outfile; read_actual = fread(buffer, 1, len, msglog_outfile_f); buffer[read_actual] = '\0'; if (read_actual == (size_t)len) { list = fwts_list_from_text(buffer); free(buffer); (void)fclose(msglog_outfile_f); return list; } else { free(buffer); goto olog_cleanup_msglog_outfile; } olog_cleanup_msglog_outfile: (void)fclose(msglog_outfile_f); goto olog_common_exit; olog_cleanup_msglog: (void)fclose(msglog_f); goto olog_common_exit; olog_cleanup_common: (void)fclose(msglog_f); (void)fclose(msglog_outfile_f); olog_common_exit: fwts_log_error(fw, "Problem with the file handling on the" " default dumped OPAL msglog, %s, try running with" " sudo first then try using -o to specify a specific" " saved OPAL msglog for analysis.", msglog_outfile); return NULL; } static int fwts_olog_check(fwts_framework *fw, const char *table, fwts_olog_progress_func progress, fwts_list *olog, int *errors) { int n, i, fd, ret = FWTS_ERROR; json_object *olog_objs, *olog_table; fwts_log_pattern *patterns; char json_data_path[PATH_MAX]; if (fw->json_data_file) { snprintf(json_data_path, sizeof(json_data_path), "%s/%s", fw->json_data_path,(fw->json_data_file)); } else { /* use the hard coded OLOG JSON as default */ snprintf(json_data_path, sizeof(json_data_path), "%s/%s", fw->json_data_path, OLOG_DATA_JSON_FILE); } /* * json_object_from_file() can fail when files aren't readable * so check if we can open for read before calling json_object_from_file() */ if ((fd = open(json_data_path, O_RDONLY)) < 0) { fwts_log_error(fw, "Cannot read file %s, check the path and " "check that the file exists, you may need to specify " "-j or -J.", json_data_path); return FWTS_ERROR; } (void)close(fd); olog_objs = json_object_from_file(json_data_path); if (FWTS_JSON_ERROR(olog_objs)) { fwts_log_error(fw, "Cannot load olog data from %s.", json_data_path); return FWTS_ERROR; } #if JSON_HAS_GET_EX if (!json_object_object_get_ex(olog_objs, table, &olog_table)) { fwts_log_error(fw, "Cannot fetch olog table object '%s' from %s.", table, json_data_path); goto fail_put; } #else olog_table = json_object_object_get(olog_objs, table); if (FWTS_JSON_ERROR(olog_table)) { fwts_log_error(fw, "Cannot fetch olog table object '%s' from %s.", table, json_data_path); goto fail_put; } #endif n = json_object_array_length(olog_table); /* Last entry is null to indicate end, so alloc n+1 items */ if ((patterns = calloc(n+1, sizeof(fwts_log_pattern))) == NULL) { fwts_log_error(fw, "Cannot allocate pattern table."); goto fail_put; } /* Now fetch json objects and compile regex */ for (i = 0; i < n; i++) { const char *str; json_object *obj; obj = json_object_array_get_idx(olog_table, i); if (FWTS_JSON_ERROR(obj)) { fwts_log_error(fw, "Cannot fetch %d item from table %s.", i, table); goto fail; } if ((str = fwts_json_str(fw, table, i, obj, "compare_mode", true)) == NULL) goto fail; patterns[i].compare_mode = fwts_klog_compare_mode_str_to_val(str); if ((str = fwts_json_str(fw, table, i, obj, "log_level", true)) == NULL) goto fail; patterns[i].level = fwts_log_str_to_level(str); if ((patterns[i].pattern = fwts_json_str(fw, table, i, obj, "pattern", true)) == NULL) goto fail; if ((patterns[i].advice = fwts_json_str(fw, table, i, obj, "advice", true)) == NULL) goto fail; /* Labels appear in fwts 0.26.0, so are optional with older versions */ str = fwts_json_str(fw, table, i, obj, "label", false); if (str) { patterns[i].label = strdup(str); } else { /* if not specified, auto-magically generate */ patterns[i].label = strdup(fwts_klog_unique_label(patterns[i].pattern)); } if (patterns[i].label == NULL) goto fail; if (patterns[i].compare_mode == FWTS_COMPARE_REGEX) { int rc; rc = regcomp(&patterns[i].compiled, patterns[i].pattern, REG_EXTENDED); if (rc) { fwts_log_error(fw, "Regex %s failed to compile: %d.", patterns[i].pattern, rc); patterns[i].compiled_ok = false; } else { patterns[i].compiled_ok = true; } } } /* We've now collected up the scan patterns, lets scan the log for errors */ ret = fwts_klog_scan(fw, olog, fwts_klog_scan_patterns, progress, patterns, errors); fail: for (i = 0; i < n; i++) { if (patterns[i].compiled_ok) regfree(&patterns[i].compiled); if (patterns[i].label) free(patterns[i].label); } free(patterns); fail_put: json_object_put(olog_objs); return ret; } int fwts_olog_firmware_check( fwts_framework *fw, fwts_olog_progress_func progress, fwts_list *olog, int *errors) { return fwts_olog_check(fw, "olog_error_warning_patterns", progress, olog, errors); } src/lib/src/fwts_oops.c000066400000000000000000000077241465205512700154120ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include "fwts.h" #define FWTS_OOPS_GOT_OOPS (0x0001) #define FWTS_OOPS_GOT_CALL_TRACE (0x0002) #define FWTS_OOPS_GOT_END_TRACE (0x0004) #define FWTS_OOPS_GOT_WARN_ON (0x0008) #define FWTS_OOPS_DUMPABLE \ (FWTS_OOPS_GOT_OOPS | FWTS_OOPS_GOT_CALL_TRACE | FWTS_OOPS_GOT_END_TRACE) #define FWTS_WARN_ON_DUMPABLE \ (FWTS_OOPS_GOT_WARN_ON | FWTS_OOPS_GOT_CALL_TRACE | FWTS_OOPS_GOT_END_TRACE) /* * fwts_klog_stack_dump() * for a given item in a kernel log list, scan for an oops or WARN_ON message. * Increment oopses or warn_ons depending on what we find and dump out the stack * trace to the fwts log */ static void fwts_klog_stack_dump( fwts_framework *fw, fwts_list_link *bug_item, int *oopses, int *warn_ons) { fwts_list_link *item = bug_item; int lines = 0; int dumpable = 0; bool dumpstack = false; fwts_list_foreach_continue(item) { char *line = fwts_klog_remove_timestamp(fwts_list_data(char *, item)); if (strstr(line, "Oops:")) dumpable |= FWTS_OOPS_GOT_OOPS; if (strstr(line, "kernel BUG at")) dumpable |= FWTS_OOPS_GOT_OOPS; if (strstr(line, "WARNING: at")) dumpable |= FWTS_OOPS_GOT_WARN_ON; if (strstr(line, "WARNING: CPU:")) dumpable |= FWTS_OOPS_GOT_WARN_ON; if (strstr(line, "Call Trace:")) dumpable |= FWTS_OOPS_GOT_CALL_TRACE; if (strstr(line, "--[ end trace")) { dumpable |= FWTS_OOPS_GOT_END_TRACE; break; } lines++; /* * We are looking for an Oops message within 5 lines of a "BUG:" * or we've got a WARN_ON then, OK, otherwise abort. */ if ((lines > 5) && (!(dumpable & (FWTS_OOPS_GOT_OOPS | FWTS_OOPS_GOT_WARN_ON)))) return; } /* Sanity check: too many lines? it is a bit suspect */ if (lines > 100) return; if (item == NULL) return; /* Found all the features that indicate an oops, so dump it */ if ((dumpable & FWTS_OOPS_DUMPABLE) == FWTS_OOPS_DUMPABLE) { (*oopses)++; fwts_log_info(fw, "Found OOPS (%d):", *oopses); dumpstack = true; } /* Found all the features that indicate a WARN_ON, so dump it */ if ((dumpable & FWTS_WARN_ON_DUMPABLE) == FWTS_WARN_ON_DUMPABLE) { (*warn_ons)++; fwts_log_info(fw, "Found WARNING (%d):", *warn_ons); dumpstack = true; } if (dumpstack) { while (bug_item != NULL && bug_item != item) { fwts_log_info_verbatim(fw, " %s", fwts_klog_remove_timestamp(fwts_list_data(char *, bug_item))); bug_item = bug_item->next; } fwts_log_nl(fw); } } /* * fwts_oos_check() * scan kernel log list for any oops messages. The number of oops * messages found is returned in 'oopses'. Oops messages are logged to the * fwts log. */ int fwts_oops_check(fwts_framework *fw, fwts_list *klog, int *oopses, int *warn_ons) { fwts_list_link *item; /* Sanity check */ if ((fw == NULL) || (oopses == NULL) || (warn_ons == NULL) || (klog == NULL)) return FWTS_ERROR; *oopses = 0; *warn_ons = 0; fwts_list_foreach(item, klog) { char *line = fwts_klog_remove_timestamp(fwts_list_data(char *, item)); if ((strncmp("BUG:", line, 4) == 0) || (strncmp("kernel BUG", line, 10) == 0) || (strncmp("WARNING:", line, 8) == 0)) fwts_klog_stack_dump(fw, item, oopses, warn_ons); } return FWTS_OK; } src/lib/src/fwts_pci.c000066400000000000000000000123471465205512700152020ustar00rootroot00000000000000/* * Copyright (C) 2013-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include "fwts.h" /* * class_code, subclass_code --> description mapping */ typedef struct { uint8_t class_code; uint8_t subclass_code; const char *description; } fwts_pci_description_info; /* * http://wiki.osdev.org/PCI */ static const fwts_pci_description_info descriptions[] = { { 0x00, 0x00, "Any device" }, { 0x00, 0x01, "VGA compatible device" }, { 0x01, 0x00, "SCSI bus controller" }, { 0x01, 0x01, "IDE controller" }, { 0x01, 0x02, "Floppy disk controller" }, { 0x01, 0x03, "IPI bus controller" }, { 0x01, 0x04, "RAID controller" }, { 0x01, 0x05, "ATA controller" }, { 0x01, 0x06, "SATA controller" }, { 0x01, 0x07, "SATA controller (AHCI 1.0)" }, { 0x01, 0x80, "Mass storage controller" }, { 0x02, 0x00, "Ethernet controller" }, { 0x02, 0x01, "Token ring controller" }, { 0x02, 0x02, "FDDI controller" }, { 0x02, 0x03, "ATM controller" }, { 0x02, 0x04, "ISDN controller" }, { 0x02, 0x05, "WordlFip controller" }, { 0x02, 0x06, "PICMG 2.14 multi computing" }, { 0x02, 0x80, "Network controller" }, { 0x03, 0x00, "VGA/8512 compatible controller" }, { 0x03, 0x01, "XGA controller" }, { 0x03, 0x02, "3D controller" }, { 0x03, 0x80, "Display controller" }, { 0x04, 0x00, "Video Device" }, { 0x04, 0x01, "Audio Device" }, { 0x04, 0x02, "Computer telephony device" }, { 0x04, 0x80, "Media controller" }, { 0x05, 0x00, "RAM controller" }, { 0x05, 0x01, "Flash controller" }, { 0x05, 0x80, "Memory controller" }, { 0x06, 0x00, "Host bridge" }, { 0x06, 0x01, "ISA bridge" }, { 0x06, 0x02, "EISA bridge" }, { 0x06, 0x03, "MCA bridge" }, { 0x06, 0x04, "PCI-to-PCI bridge" }, { 0x06, 0x05, "PCMCIA bridge" }, { 0x06, 0x06, "NuBus bridge" }, { 0x06, 0x07, "CardBus bridge" }, { 0x06, 0x08, "RACEway bridge" }, { 0x06, 0x09, "PCI-to-PCI bridge" }, { 0x06, 0x0a, "PCI-to-PCI bridge" }, { 0x06, 0x80, "Bridge device" }, { 0x07, 0x00, "Serial controller" }, { 0x07, 0x01, "Parellel port" }, { 0x07, 0x02, "Multiport serial controller" }, { 0x07, 0x03, "Generic modem" }, { 0x07, 0x04, "IEEE 488.1/2 (GPIB) controller" }, { 0x07, 0x05, "Smart card" }, { 0x07, 0x80, "Communications device" }, { 0x08, 0x00, "PIC/APIC" }, { 0x08, 0x01, "DMA controller" }, { 0x08, 0x02, "System timer" }, { 0x08, 0x03, "RTC controller" }, { 0x08, 0x04, "Generic PCI hot-plug controller" }, { 0x08, 0x80, "System peripheral" }, { 0x09, 0x00, "Keyboard controller" }, { 0x09, 0x01, "Digitizer" }, { 0x09, 0x02, "Mouse controller" }, { 0x09, 0x03, "Scanner controller" }, { 0x09, 0x04, "Gameport controller" }, { 0x09, 0x80, "Input controller" }, { 0x0a, 0x00, "Generic Docking station" }, { 0x0a, 0x80, "Docking station" }, { 0x0b, 0x00, "386 processor" }, { 0x0b, 0x01, "486 processor" }, { 0x0b, 0x02, "Pentium processor" }, { 0x0b, 0x10, "Alpha processor" }, { 0x0b, 0x20, "PowerPC processor" }, { 0x0b, 0x30, "MIPS processor" }, { 0x0b, 0x40, "Co-processor" }, { 0x0c, 0x00, "IEEE 1394 controller" }, { 0x0c, 0x01, "ACCESS.bus" }, { 0x0c, 0x02, "SSA" }, { 0x0c, 0x03, "USB" }, { 0x0c, 0x04, "Fibre Channel" }, { 0x0c, 0x05, "SMBus" }, { 0x0c, 0x06, "InfiniBand" }, { 0x0c, 0x07, "IPMI" }, { 0x0c, 0x08, "SERCOS Interface Standard (IEC 61491)" }, { 0x0c, 0x09, "CANbus" }, { 0x0d, 0x00, "IRDA compatible controller" }, { 0x0d, 0x01, "Consumer IR controller" }, { 0x0d, 0x10, "RF controller" }, { 0x0d, 0x11, "Bluetooth controller" }, { 0x0d, 0x20, "Ethernet controller (802.11a)" }, { 0x0d, 0x21, "Ethernet controller (802.11b)" }, { 0x0d, 0x80, "Wireless controller" }, { 0x0e, 0x00, "I2O architecture / message FIFO" }, { 0x0f, 0x01, "TV controller" }, { 0x0f, 0x02, "Audio controller" }, { 0x0f, 0x03, "Voice controller" }, { 0x0f, 0x04, "Data controller" }, { 0x10, 0x00, "Network and computing encryption/decryption" }, { 0x10, 0x10, "Entertainment encryption/decryption" }, { 0x10, 0x80, "Encryption/decryption" }, { 0x11, 0x00, "DPIO modules" }, { 0x11, 0x01, "Performance counters" }, { 0x11, 0x10, "Communications synchronization" }, { 0x11, 0x20, "Management card" }, { 0x11, 0x80, "Data acquisition/signal processing controller" }, { 0x00, 0x00, NULL }, }; /* * fwts_pci_description() * turn PCI class code and subclass to a human description */ const char *fwts_pci_description(const uint8_t class_code, const uint8_t subclass_code) { int i; for (i = 0; descriptions[i].description; i++) if (class_code == descriptions[i].class_code && subclass_code == descriptions[i].subclass_code) return descriptions[i].description; return "Unknown"; } src/lib/src/fwts_pipeio.c000066400000000000000000000241741465205512700157150ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * The following functions are derivative work from systemd, and * are covered by Copyright 2010 Lennart Poettering: * fwts_write_string_to_file(), fwts_write_string_file(), * fwts_write_string_file(), fwts_read_file_first_line() * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "fwts.h" /* * fwts_pipe_open_rw() * execl a command, return pid in *childpid and a pipe connected * to stdout in *in_fd, and stdout in *out_fd. Return value < 0 * indicates error. */ int fwts_pipe_open_rw(const char *command, pid_t *childpid, int *in_fd, int *out_fd) { int out_pipefds[2]; int in_pipefds[2]; pid_t pid; FILE *fp; if (in_fd != NULL) { if (pipe(in_pipefds) < 0) return -1; } else { in_pipefds[0] = open("/dev/null", O_RDONLY); in_pipefds[1] = -1; } if (out_fd != NULL) { if (pipe(out_pipefds) < 0) goto err_close_in; } else { out_pipefds[0] = -1; out_pipefds[1] = open("/dev/null", O_WRONLY); } pid = fork(); switch (pid) { case -1: /* Ooops */ goto err_close_out; case 0: /* Child */ fp = freopen("/dev/null", "w", stderr); /* * if null, we can't report freopen failed * to stderr as it is now free */ if (out_pipefds[0] != STDOUT_FILENO) { dup2(out_pipefds[1], STDOUT_FILENO); (void)close(out_pipefds[1]); } if (in_pipefds[1] != STDIN_FILENO) { dup2(in_pipefds[0], STDIN_FILENO); (void)close(in_pipefds[0]); } (void)close(out_pipefds[0]); (void)close(in_pipefds[1]); execl(_PATH_BSHELL, "sh", "-c", command, NULL); if (fp) (void)fclose(fp); _exit(FWTS_EXEC_ERROR); default: /* Parent */ (void)close(out_pipefds[1]); (void)close(in_pipefds[0]); *childpid = pid; if (out_fd) *out_fd = out_pipefds[0]; if (in_fd) *in_fd = in_pipefds[1]; return 0; } err_close_in: (void)close(in_pipefds[0]); (void)close(in_pipefds[1]); err_close_out: (void)close(out_pipefds[0]); (void)close(out_pipefds[1]); return -1; } /* * fwts_pipe_open_ro() * execl a command, return pid in *childpid and a pipe connected * to stdout in *fd. Return value < 0 indicates error. */ int fwts_pipe_open_ro(const char *command, pid_t *childpid, int *fd) { return fwts_pipe_open_rw(command, childpid, NULL, fd); } static int fwts_pipeio_set_nonblock(const int fd) { int flags; if (fd < 0) return 0; flags = fcntl(fd, F_GETFL, 0); flags |= O_NONBLOCK; return !!fcntl(fd, F_SETFL, flags); } /* * fwts_pipe_readwrite() * send input to and read output from fwts_pipe_open_rw(), in_len bytes * of in_buf are written to the pipe, and data is read into *out_buf, * *out_len indicating output length. *out_buf is allocated, and * must be free()-ed after use. * Returns non-zero on failure. */ int fwts_pipe_readwrite( const int in_fd, const char *in_buf, const size_t in_len, const int out_fd, char **out_buf, ssize_t *out_len) { struct pollfd pollfds[2]; size_t in_size = in_len; ssize_t out_size = 0; char *ptr = NULL; char buffer[8192]; *out_len = 0; memset(&pollfds, 0, sizeof(pollfds)); pollfds[0].fd = out_fd; pollfds[0].events = POLLIN; pollfds[1].fd = in_fd; pollfds[1].events = POLLOUT; /* we need non-blocking IO */ if (fwts_pipeio_set_nonblock(in_fd)) return -1; if (fwts_pipeio_set_nonblock(out_fd)) return -1; for (;;) { ssize_t n; char *tmp; int rc; if (in_size == 0 || in_fd < 0 || in_buf == NULL) pollfds[1].events = 0; rc = poll(pollfds, 2, -1); if (rc < 0) break; if (pollfds[0].revents) { n = read(out_fd, buffer, sizeof(buffer)); if (n == 0) break; if (n < 0) { if (errno != EINTR && errno != EAGAIN) goto fail; continue; } if ((tmp = realloc(ptr, out_size + n + 1)) == NULL) goto fail; ptr = tmp; memcpy(ptr + out_size, buffer, n); out_size += n; *(ptr+out_size) = 0; } if ((in_fd > 0) && in_buf && pollfds[1].revents) { n = write(in_fd, in_buf, in_size); if (n < 0) { if (errno != EINTR && errno != EAGAIN) goto fail; continue; } in_buf += n; in_size -= n; } } *out_len = out_size; *out_buf = ptr; return 0; fail: free(ptr); *out_len = 0; *out_buf = NULL; return -1; } /* * fwts_pipe_read() * read output from fwts_pipe_open_ro(), *length is * set to the number of chars read and we return * a buffer of read data. */ int fwts_pipe_read(const int fd, char **out_buf, ssize_t *out_len) { return fwts_pipe_readwrite(-1, NULL, 0, fd, out_buf, out_len); } /* * fwts_pipe_close() * close fd, wait for child of given pid to exit */ int fwts_pipe_close(const int fd, const pid_t pid) { int status; (void)close(fd); for (;;) { if (waitpid(pid, &status, WUNTRACED | WCONTINUED) == -1) return EXIT_FAILURE; if (WIFEXITED(status)) return WEXITSTATUS(status); if (WIFSIGNALED(status)) return WTERMSIG(status); } } int fwts_pipe_close2(const int in_fd, const int out_fd, const pid_t pid) { (void)close(out_fd); return fwts_pipe_close(in_fd, pid); } /* * fwts_pipe_exec() * execute a command, return a list containing lines * of the stdout output from the command. * Return FWTS_OK if the exec worked, FWTS_EXEC_ERROR if * it failed. status contains the child exit status. */ int fwts_pipe_exec(const char *command, fwts_list **list, int *status) { pid_t pid; int rc, fd; ssize_t len; char *text = NULL; if (fwts_pipe_open_ro(command, &pid, &fd) < 0) return FWTS_ERROR; rc = fwts_pipe_read(fd, &text, &len); if (!rc && len > 0) { *list = fwts_list_from_text(text); } else { *list = NULL; } free(text); *status = fwts_pipe_close(fd, pid); if (rc || *status) { if (*list) fwts_list_free(*list, free); *list = NULL; return FWTS_EXEC_ERROR; } return FWTS_OK; } /* * fwts_exec() * execute a command * Return FWTS_OK if the exec worked, FWTS_EXEC_ERROR if * it failed. status contains the child exit status. */ int fwts_exec(const char *command, int *status) { pid_t pid; int fd; if (fwts_pipe_open_ro(command, &pid, &fd) < 0) return FWTS_ERROR; *status = fwts_pipe_close(fd, pid); if (*status) return FWTS_EXEC_ERROR; return FWTS_OK; } /* * fwts_exec2() * execute a command * Return to the parent/caller the exit status from the command * status is -1 if errors. */ int fwts_exec2(const char *command, char **output) { pid_t pid; int in_fd, out_fd; ssize_t out_len; if (fwts_pipe_open_rw(command, &pid, &in_fd, &out_fd) < 0) { return -1; } if (fwts_pipe_readwrite(in_fd, command, strlen(command), out_fd, output, &out_len)) { return -1; } return fwts_pipe_close2(in_fd, out_fd, pid); } /* * fwts_write_string_to_file() * write a string to a file pointer * Return FWTS_OK if writing worked, FWTS_ERROR if it failed. */ int fwts_write_string_to_file( const fwts_framework *fw, FILE *file, const char *str) { errno = 0; fputs(str, file); if (!fwts_string_endswith(str, "\n")) fputc('\n', file); fflush(file); if (ferror(file)) { fwts_log_error(fw, "Failed to write string '%s' to file descriptor, error: %d (%s).", str, errno, strerror(errno)); return FWTS_ERROR; } return FWTS_OK; } /* * fwts_write_string_file() * write a string to a file * Return FWTS_OK if writing worked, FWTS_ERROR if it failed. */ int fwts_write_string_file( const fwts_framework *fw, const char *file_name, const char *str) { FILE *file; int ret; errno = 0; file = fopen(file_name, "we"); if (!file) { fwts_log_error(fw, "Failed to write string '%s' to %s, error: %d (%s).", str, file_name, errno, strerror(errno)); return FWTS_ERROR; } ret = fwts_write_string_to_file(fw, file, str); (void)fclose(file); return ret; } /* * fwts_read_file_first_line() * read the first line of a file * Return FWTS_OK if reading worked, FWTS_ERROR if it failed, * or FWTS_OUT_OF_MEMORY if it went out of memory. */ int fwts_read_file_first_line( const fwts_framework *fw, const char *file_name, char **line) { FILE *file; char buffer[LINE_MAX], *temp; errno = 0; file = fopen(file_name, "re"); if (!file) { fwts_log_error(fw, "Failed to read first line from %s, error: %d (%s).", file_name, errno, strerror(errno)); return FWTS_ERROR; } if (!fgets(buffer, sizeof(buffer), file)) { if (ferror(file)) { (void)fclose(file); fwts_log_error(fw, "Failed to read first line from %s, error: %d (%s).", file_name, errno, strerror(errno)); return FWTS_ERROR; } buffer[0] = 0; } temp = strdup(buffer); if (!temp) { (void)fclose(file); fwts_log_error(fw, "Failed to read first line from %s: ran out of memory.", file_name); return FWTS_OUT_OF_MEMORY; } fwts_chop_newline(temp); *line = temp; (void)fclose(file); return FWTS_OK; } /* * fwts_file_first_line_contains_string() * read the first line of a file * Return true if the line contained the string, false if it didn't. */ bool fwts_file_first_line_contains_string( const fwts_framework *fw, const char *file_name, const char *str) { char *contents = NULL; int ret; bool contains; ret = fwts_read_file_first_line(fw, file_name, &contents); if (ret != FWTS_OK) { fwts_log_error(fw, "Failed to get the contents of %s.", file_name); contains = false; } else contains = (strstr(contents, str) != NULL); free(contents); return contains; } src/lib/src/fwts_pm_debug.c000066400000000000000000000023551465205512700162070ustar00rootroot00000000000000/* * Copyright (C) 2020-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" static const char pm_debug[] = "/sys/power/pm_debug_messages"; /* * fwts_pm_debug_get * get the current pm_debug_messages setting, value * is also set to -1 if there is an error */ int fwts_pm_debug_get(int *value) { int ret; ret = fwts_get_int(pm_debug, value); if (ret != FWTS_OK) *value = -1; return ret; } /* * fwts_pm_debug_set * set the pm_debug_messages setting */ int fwts_pm_debug_set(const int value) { return fwts_set_int(pm_debug, value); } src/lib/src/fwts_pm_method.c000066400000000000000000000276551465205512700164130ustar00rootroot00000000000000/* * Copyright (C) 2014-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include "fwts.h" #include "fwts_pm_method.h" #if FWTS_ENABLE_LOGIND /* * logind_do() * call Logind to perform an action */ static gboolean logind_do(gpointer data) { GError *error = NULL; fwts_pm_method_vars *fwts_settings = (fwts_pm_method_vars *)data; /* * If the loop is not running, return TRUE so as to repeat * the operation */ if (g_main_loop_is_running (fwts_settings->gmainloop)) { GVariant *reply; bool is_s3; char buffer[50]; fwts_log_info(fwts_settings->fw, "Requesting %s action\n", fwts_settings->action); is_s3 = (strcmp(fwts_settings->action, PM_SUSPEND_LOGIND) == 0 || strcmp(fwts_settings->action, PM_SUSPEND_HYBRID_LOGIND) == 0); snprintf(buffer, sizeof(buffer), "Starting fwts %s\n", is_s3 ? "suspend" : "hibernate"); (void)fwts_klog_write(fwts_settings->fw, buffer); snprintf(buffer, sizeof(buffer), "%s\n", fwts_settings->action); (void)fwts_klog_write(fwts_settings->fw, buffer); (void)time(&(fwts_settings->t_start)); reply = g_dbus_proxy_call_sync(fwts_settings->logind_proxy, fwts_settings->action, g_variant_new("(b)", FALSE), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (reply != NULL) { g_variant_unref(reply); } else { fwts_log_error(fwts_settings->fw, "Error from Logind: %s\n", error->message); g_error_free(error); } return FALSE; } fwts_log_info(fwts_settings->fw, "Glib loop not ready\n"); return TRUE; } /* * logind_signal_subscribe() * subscribe to a signal coming from Logind */ static guint logind_signal_subscribe( GDBusConnection *connection, const gchar *logind_signal, GDBusSignalCallback callback, gpointer user_data) { return g_dbus_connection_signal_subscribe (connection, "org.freedesktop.login1", /* sender */ "org.freedesktop.login1.Manager", logind_signal, "/org/freedesktop/login1", NULL, /* arg0 */ G_DBUS_SIGNAL_FLAGS_NONE, callback, user_data, NULL); } /* * logind_signal_unsubscribe() * unsubscribe from a signal coming from Logind */ static void logind_signal_unsubscribe( GDBusConnection *connection, guint subscription_id) { g_dbus_connection_signal_unsubscribe(connection, subscription_id); } /* * logind_on_signal() * callback to handle suspend and resume events */ static void logind_on_signal( GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { gboolean status; fwts_pm_method_vars *fwts_settings = (fwts_pm_method_vars *)user_data; /* Prevent -Werror=unused-parameter from complaining */ FWTS_UNUSED(connection); FWTS_UNUSED(sender_name); FWTS_UNUSED(object_path); FWTS_UNUSED(interface_name); FWTS_UNUSED(signal_name); if (!g_variant_is_of_type(parameters, G_VARIANT_TYPE ("(b)"))) { fwts_log_error(fwts_settings->fw, "Suspend type %s\n", g_variant_get_type_string(parameters)); return; } else { g_variant_get(parameters, "(b)", &status); if (!status) { time(&(fwts_settings->t_end)); (void)fwts_klog_write(fwts_settings->fw, FWTS_RESUME "\n"); (void)fwts_klog_write(fwts_settings->fw, "Finished fwts resume\n"); /* * Let's give the system some time to get back from S3 * or Logind will refuse to suspend and shoot both * events without doing anything */ if (fwts_settings->min_delay < 3) { fwts_log_info(fwts_settings->fw, "Skipping the minimum delay (%d) and " "using a 3 seconds delay instead\n", fwts_settings->min_delay); sleep(3); } g_main_loop_quit(fwts_settings->gmainloop); } } } /* * logind_can_do_action() * test supported Logind actions that reply with a string */ static bool logind_can_do_action( fwts_pm_method_vars *fwts_settings, const char* action) { GVariant *reply; GError *error = NULL; bool status = false; gchar *response; if (glib_check_version(2, 26, 0) != NULL) return false; if (fwts_logind_init_proxy(fwts_settings) != 0) return false; reply = g_dbus_proxy_call_sync(fwts_settings->logind_proxy, action, NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (reply != NULL) { if (!g_variant_is_of_type(reply, G_VARIANT_TYPE ("(s)"))) { fwts_log_error(fwts_settings->fw, "Unexpected response to %s action: %s\n", action, g_variant_get_type_string (reply)); g_variant_unref(reply); return status; } g_variant_get(reply, "(&s)", &response); fwts_log_info(fwts_settings->fw, "Response to %s is %s\n", action, response); if (strcmp(response, "challenge") == 0) { fwts_log_error(fwts_settings->fw, "%s action available only after " "authorisation\n", action); } else if (strcmp(response, "yes") == 0) { fwts_log_info(fwts_settings->fw, "User allowed to execute the %s action\n", action); status = true; } else if (strcmp(response, "no") == 0) { fwts_log_error(fwts_settings->fw, "User not allowed to execute the %s action\n", action); } else if (strcmp(response, "na") == 0) { fwts_log_error(fwts_settings->fw, "Hardware doesn't support %s action\n", action); } g_variant_unref(reply); } else { fwts_log_error(fwts_settings->fw, "Invalid response from Logind on %s action\n", action); g_error_free(error); } return status; } /* * fwts_logind_init_proxy() * initialise the Dbus proxy for Logind Manager */ int fwts_logind_init_proxy(fwts_pm_method_vars *fwts_settings) { int status = 0; if (fwts_settings->logind_connection == NULL) fwts_settings->logind_connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, NULL); if (fwts_settings->logind_connection == NULL) { status = 1; fwts_log_error(fwts_settings->fw, "Cannot establish a connection to Dbus\n"); goto out; } if (fwts_settings->logind_proxy == NULL) { fwts_settings->logind_proxy = g_dbus_proxy_new_sync(fwts_settings->logind_connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.login1", "/org/freedesktop/login1", "org.freedesktop.login1.Manager", NULL, NULL); } if (fwts_settings->logind_proxy == NULL) { status = 1; fwts_log_error(fwts_settings->fw, "Cannot establish a connection to login1.Manager\n"); goto out; } out: return status; } /* * fwts_logind_wait_for_resume_from_action() * start Glib mainloop and listen to suspend/resume events coming from Logind * exit the loop and return the duration after an event. * * "action" is one of the following actions supported by Logind: * "Suspend", "Hibernate", "HybridSleep" * "minimum_delay" is the minimum delay to use before the function returns * the function after resume */ int fwts_logind_wait_for_resume_from_action( fwts_pm_method_vars *fwts_settings, const char *action, int minimum_delay) { guint subscription_id = 0; int duration = 0; /* Check that the action is supported */ if (!(strcmp(action, PM_SUSPEND_LOGIND) == 0 || strcmp(action, PM_SUSPEND_HYBRID_LOGIND) == 0 || strcmp(action, PM_HIBERNATE_LOGIND) == 0)) { fwts_log_error(fwts_settings->fw, "Unknown logind action: %s\n", action); return 0; } /* Initialise the proxy */ if (fwts_logind_init_proxy(fwts_settings) != 0) { fwts_log_error(fwts_settings->fw, "Failed to initialise logind proxy\n"); return 0; } /* Set the action to perform */ fwts_settings->action = strdup(action); if (!fwts_settings->action) { fwts_log_error(fwts_settings->fw, "Failed to initialise logind action\n"); return 0; } /* Set the minimum delay (this is needed for both S3 and S4) */ fwts_settings->min_delay = minimum_delay; /* Subscribe to the signal that Logind sends on resume */ subscription_id = logind_signal_subscribe(fwts_settings->logind_connection, "PrepareForSleep", logind_on_signal, fwts_settings); /* Start the main loop */ fwts_settings->gmainloop = g_main_loop_new(NULL, FALSE); if (fwts_settings->gmainloop) { g_timeout_add(1, logind_do, fwts_settings); g_main_loop_run(fwts_settings->gmainloop); duration = (int)(fwts_settings->t_end - fwts_settings->t_start); /* Optional, as it will be freed together with the struct */ g_main_loop_unref(fwts_settings->gmainloop); fwts_settings->gmainloop = NULL; } else { fwts_log_error(fwts_settings->fw, "Failed to start glib mainloop\n"); } /* Unsubscribe from the signal */ logind_signal_unsubscribe(fwts_settings->logind_connection, subscription_id); return duration; } /* * fwts_logind_can_suspend() * return a boolean that states whether suspend is a supported action or not */ bool fwts_logind_can_suspend(fwts_pm_method_vars *fwts_settings) { return logind_can_do_action(fwts_settings, "CanSuspend"); } /* * fwts_logind_can_hybrid_suspend() * return a boolean that states whether hybrid suspend is a * supported action or not */ bool fwts_logind_can_hybrid_suspend(fwts_pm_method_vars *fwts_settings) { return logind_can_do_action(fwts_settings, "CanHybridSleep"); } /* * fwts_logind_can_hibernate() * return a boolean that states whether hibernate is a supported action or not */ bool fwts_logind_can_hibernate(fwts_pm_method_vars *fwts_settings) { return logind_can_do_action(fwts_settings, "CanHibernate"); } #endif /* * fwts_sysfs_can_suspend() * return a boolean that states whether suspend is a supported action or not */ bool fwts_sysfs_can_suspend(const fwts_pm_method_vars *fwts_settings) { return fwts_file_first_line_contains_string(fwts_settings->fw, "/sys/power/state", "mem"); } /* * fwts_sysfs_can_hybrid_suspend() * return a boolean that states whether hybrid suspend is a supported action or not */ bool fwts_sysfs_can_hybrid_suspend(const fwts_pm_method_vars *fwts_settings) { bool status; status = fwts_file_first_line_contains_string(fwts_settings->fw, "/sys/power/state", "disk"); if (!status) return FALSE; return fwts_file_first_line_contains_string(fwts_settings->fw, "/sys/power/disk", "suspend"); } /* * fwts_sysfs_can_hibernate() * return a boolean that states whether hibernate is a supported action or not */ bool fwts_sysfs_can_hibernate(const fwts_pm_method_vars *fwts_settings) { return fwts_file_first_line_contains_string(fwts_settings->fw, "/sys/power/state", "disk"); } /* * fwts_sysfs_do_suspend() * enter either S3 or hybrid S3 * return the exit status */ int fwts_sysfs_do_suspend( const fwts_pm_method_vars *fwts_settings, const bool s3_hybrid) { int status; if (s3_hybrid) { status = fwts_write_string_file(fwts_settings->fw, "/sys/power/disk", "suspend"); if (status != FWTS_OK) return status; status = fwts_write_string_file(fwts_settings->fw, "/sys/power/state", "disk"); } else { status = fwts_write_string_file(fwts_settings->fw, "/sys/power/state", "mem"); } return status; } /* * fwts_sysfs_do_hibernate() * enter S4 * return the exit status */ int fwts_sysfs_do_hibernate(const fwts_pm_method_vars *fwts_settings) { return fwts_write_string_file(fwts_settings->fw, "/sys/power/state", "disk"); } void free_pm_method_vars(fwts_pm_method_vars *var) { if (!var) return; #if FWTS_ENABLE_LOGIND if (var->logind_proxy) g_object_unref(var->logind_proxy); if (var->logind_connection) g_object_unref(var->logind_connection); if (var->gmainloop) g_main_loop_unref(var->gmainloop); if (var->action) free(var->action); #endif free(var); } src/lib/src/fwts_release.c000066400000000000000000000064131465205512700160440ustar00rootroot00000000000000/* * Copyright (C) 2014-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include "fwts.h" /* * fwts_release_field_get() * attempt to match a field (needle) in the given text and update field * with any text after the delimiter, e.g. if text is "DISTRIB_ID=Ubuntu" * and needle is "DISTRIB_ID" and delimiter is "=", then the field gets set to "Ubuntu". */ static void fwts_release_field_get(char *needle, char *delimiter, char *text, char **field) { char *str = strstr(text, delimiter); if (str == NULL) return; if (strstr(text, needle) == NULL) return; str++; while (*str == ' ' || *str == '\t') str++; if (*str) *field = strdup(str); } /* * fwts_release_get_debian() * return release for debian based systems */ static void fwts_release_get_debian(fwts_list *list, fwts_release *release) { fwts_list_link *item; fwts_list_foreach(item, list) { char *line = fwts_text_list_text(item); fwts_release_field_get("Distributor ID:", ":", line, &release->distributor); fwts_release_field_get("Release", ":", line, &release->description); fwts_release_field_get("Codename", ":", line, &release->release); fwts_release_field_get("Description", ":", line, &release->codename); } } /* * fwts_release_field_null * convert NULL fields to "" */ static void fwts_release_field_null_to_str(char **field) { if (*field == NULL) *field = strdup(""); } /* * fwts_release_get() * get release info */ fwts_release *fwts_release_get(void) { fwts_list *list; fwts_release *release; int status; if ((release = calloc(1, sizeof(fwts_release))) == NULL) return NULL; /* * For the moment, check in /etc/lsb-release, we need to add in * support for different distros too. */ if (fwts_pipe_exec("lsb_release -a", &list, &status) != FWTS_OK) { free(release); return NULL; } if (list) { fwts_release_get_debian(list, release); fwts_list_free(list, free); } /* null fields to "" */ fwts_release_field_null_to_str(&release->distributor); fwts_release_field_null_to_str(&release->description); fwts_release_field_null_to_str(&release->release); fwts_release_field_null_to_str(&release->codename); if ((release->distributor == NULL) || (release->description == NULL) || (release->release == NULL) || (release->codename == NULL)) { fwts_release_free(release); return NULL; } return release; } /* * fwts_release_free() * free release info */ void fwts_release_free(fwts_release *release) { if (release) { free(release->distributor); free(release->description); free(release->release); free(release->codename); free(release); } } src/lib/src/fwts_safe_mem.c000066400000000000000000000112531465205512700161760ustar00rootroot00000000000000/* * Copyright (C) 2014-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include "fwts.h" static sigjmp_buf jmpbuf; static struct sigaction old_segv_action, old_bus_action; /* * If we hit a SIGSEGV or SIGBUS then the read * failed and we longjmp back and return * FWTS_ERROR */ static void sig_handler(int dummy) { FWTS_UNUSED(dummy); fwts_sig_handler_restore(SIGSEGV, &old_segv_action); fwts_sig_handler_restore(SIGBUS, &old_bus_action); siglongjmp(jmpbuf, 1); } /* * fwts_safe_memcpy() * memcpy that catches SIGSEFV/SIGBUS. To be used when * attempting to read BIOS tables from memory which * may segfault or throw a bus error if the src * address is corrupt */ int OPTIMIZE0 fwts_safe_memcpy(void *dst, const void *src, const size_t n) { size_t i; if (sigsetjmp(jmpbuf, 1) != 0) return FWTS_ERROR; fwts_sig_handler_set(SIGSEGV, sig_handler, &old_segv_action); fwts_sig_handler_set(SIGBUS, sig_handler, &old_bus_action); for (i = n; i; --i) *(char *)dst++ = *(char *)src++; fwts_sig_handler_restore(SIGSEGV, &old_segv_action); fwts_sig_handler_restore(SIGBUS, &old_bus_action); return FWTS_OK; } /* * fwts_safe_memread() * check we can safely read a region of memory. This catches * SIGSEGV/SIGBUS errors and returns FWTS_ERROR if it is not * readable or FWTS_OK if it's OK. */ int OPTIMIZE0 fwts_safe_memread(const void *src, const size_t n) { static uint8_t buffer[256]; const uint8_t *ptr, *end = (const uint8_t *)src + n; uint8_t *bufptr; const uint8_t *bufend = buffer + sizeof(buffer); if (sigsetjmp(jmpbuf, 1) != 0) return FWTS_ERROR; fwts_sig_handler_set(SIGSEGV, sig_handler, &old_segv_action); fwts_sig_handler_set(SIGBUS, sig_handler, &old_bus_action); for (bufptr = buffer, ptr = src; ptr < end; ptr++) { /* Force data to be read */ __builtin_prefetch(ptr, 0, 3); *bufptr = *ptr; bufptr++; bufptr = (bufptr >= bufend) ? buffer : bufptr; } fwts_sig_handler_restore(SIGSEGV, &old_segv_action); fwts_sig_handler_restore(SIGBUS, &old_bus_action); return FWTS_OK; } /* * fwts_safe_memread32() * check we can safely read a region of memory. This catches * SIGSEGV/SIGBUS errors and returns FWTS_ERROR if it is not * readable or FWTS_OK if it's OK. * * n = number of of 32 bit words to check */ int OPTIMIZE0 fwts_safe_memread32(const void *src, const size_t n) { static uint32_t buffer[256]; const uint32_t *ptr, *end = (const uint32_t *)src + n; uint32_t *bufptr; const uint32_t *bufend = buffer + (sizeof(buffer) / sizeof(*buffer)); if (sigsetjmp(jmpbuf, 1) != 0) return FWTS_ERROR; fwts_sig_handler_set(SIGSEGV, sig_handler, &old_segv_action); fwts_sig_handler_set(SIGBUS, sig_handler, &old_bus_action); for (bufptr = buffer, ptr = src; ptr < end; ptr++) { /* Force data to be read */ __builtin_prefetch(ptr, 0, 3); *bufptr = *ptr; bufptr++; bufptr = (bufptr >= bufend) ? buffer : bufptr; } fwts_sig_handler_restore(SIGSEGV, &old_segv_action); fwts_sig_handler_restore(SIGBUS, &old_bus_action); return FWTS_OK; } /* * fwts_safe_memread64() * check we can safely read a region of memory. This catches * SIGSEGV/SIGBUS errors and returns FWTS_ERROR if it is not * readable or FWTS_OK if it's OK. * * n = number of of 64 bit words to check */ int OPTIMIZE0 fwts_safe_memread64(const void *src, const size_t n) { static uint64_t buffer[256]; const uint64_t *ptr, *end = (const uint64_t *)src + n; uint64_t *bufptr; const uint64_t *bufend = buffer + (sizeof(buffer) / sizeof(*buffer)); if (sigsetjmp(jmpbuf, 1) != 0) return FWTS_ERROR; fwts_sig_handler_set(SIGSEGV, sig_handler, &old_segv_action); fwts_sig_handler_set(SIGBUS, sig_handler, &old_bus_action); for (bufptr = buffer, ptr = src; ptr < end; ptr++) { /* Force data to be read */ __builtin_prefetch(ptr, 0, 3); *bufptr = *ptr; bufptr++; bufptr = (bufptr >= bufend) ? buffer : bufptr; } fwts_sig_handler_restore(SIGSEGV, &old_segv_action); fwts_sig_handler_restore(SIGBUS, &old_bus_action); return FWTS_OK; } src/lib/src/fwts_scan_efi_systab.c000066400000000000000000000030131465205512700175510ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include "fwts.h" /* * fwts_scan_efi_systab() * scan EFI systab for a value */ void *fwts_scan_efi_systab(const char *name) { fwts_list *systab; fwts_list_link *item; void *addr = 0; if (((systab = fwts_file_open_and_read("/sys/firmware/efi/systab")) == NULL) && ((systab = fwts_file_open_and_read("/proc/efi/systab")) == NULL)) { return NULL; } fwts_list_foreach(item, systab) { char *str = fwts_list_data(char *, item); char *s_ptr = strstr(str, name); if (s_ptr) { char *ptr = strstr(str, "="); if (ptr) { if ((size_t)(ptr - s_ptr) != strlen(name)) continue; addr = (void*)strtoul(ptr+1, NULL, 0); break; } } } fwts_list_free(systab, free); return addr; } src/lib/src/fwts_set.c000066400000000000000000000027151465205512700152200ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include "fwts.h" /* * fwts_set() * write text to a given file, used to set * values in /sys or /proc */ int fwts_set(const char *file, const char *text) { FILE *fp; int ret; if ((fp = fopen(file, "w")) == NULL) return FWTS_ERROR; ret = fprintf(fp, "%s\n", text); (void)fclose(fp); return (ret < 0) ? FWTS_ERROR : FWTS_OK; } /* * fwts_set_int() * write an int to a given file, used to set * values in /sys or /proc */ int fwts_set_int(const char *file, const int value) { FILE *fp; int ret; if ((fp = fopen(file, "w")) == NULL) return FWTS_ERROR; ret = fprintf(fp, "%d\n", value); (void)fclose(fp); return (ret < 0) ? FWTS_ERROR : FWTS_OK; } src/lib/src/fwts_smbios.c000066400000000000000000000156221465205512700157220ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include "fwts.h" #if defined(FWTS_ARCH_INTEL) || defined(FWTS_ARCH_AARCH64) /* * fwts_load_file() * loads file to memory */ static int fwts_load_file(const char* filename, void *buf, size_t size) { int fd; ssize_t ret; if ((fd = open(filename, O_RDONLY)) < 0) return FWTS_ERROR; ret = read(fd, buf, size); (void)close(fd); if (ret != (ssize_t)size) return FWTS_ERROR; return FWTS_OK; } /* * fwts_smbios_find_entry_uefi() * find SMBIOS structure table entry from UEFI systab */ static void *fwts_smbios_find_entry_uefi( fwts_framework *fw, void *entry, fwts_smbios_type *type, uint8_t smb_version) { void *addr; size_t size; char *smbios; char *sm; switch (smb_version) { case 2: smbios = "SMBIOS"; sm = "_SM_"; size = sizeof(fwts_smbios_entry); break; case 3: smbios = "SMBIOS3"; sm = "_SM3_"; size = sizeof(fwts_smbios30_entry); break; default: *type = FWTS_SMBIOS_UNKNOWN; return NULL; break; } if ((addr = fwts_scan_efi_systab(smbios)) != NULL) { fwts_smbios_entry *mapped_entry; if ((mapped_entry = fwts_mmap((off_t)addr, size)) != FWTS_MAP_FAILED) { if (fwts_safe_memcpy(entry, mapped_entry, size) == FWTS_OK) { (void)fwts_munmap(mapped_entry, size); *type = FWTS_SMBIOS; return addr; } else { fwts_log_error(fw, "Cannot read mmap'd %s entry at 0x%p\n", smbios, addr); (void)fwts_munmap(mapped_entry, size); addr = NULL; } } if (fwts_load_file("/sys/firmware/dmi/tables/smbios_entry_point", entry, size) == FWTS_OK && !strncmp((char*)entry, sm, strlen(sm))) { fwts_log_info(fw, "%s entry loaded from /sys/firmware/dmi/tables/smbios_entry_point\n", smbios); *type = FWTS_SMBIOS; return addr; } fwts_log_error(fw, "Cannot mmap %s entry at 0x%p\n", smbios, addr); } return NULL; } #if defined(FWTS_ARCH_INTEL) /* * fwts_smbios_find_entry_bios() * find SMBIOS structure table entry by scanning memory */ static void *fwts_smbios_find_entry_bios( fwts_framework *fw, void *entry, fwts_smbios_type *type, uint8_t smb_version) { uint8_t *mem; void *addr = NULL; int i; if ((mem = fwts_mmap(FWTS_SMBIOS_REGION_START, FWTS_SMBIOS_REGION_SIZE)) == FWTS_MAP_FAILED) { fwts_log_error(fw, "Cannot mmap SMBIOS region."); return NULL; } for (i = 0; i < FWTS_SMBIOS_REGION_SIZE; i += 16) { if (fwts_safe_memread(mem + i, 16) != FWTS_OK) continue; if (smb_version == 2) { /* SMBIOS entry point */ if ((*(mem+i) == '_') && (*(mem+i+1) == 'S') && (*(mem+i+2) == 'M') && (*(mem+i+3) == '_') && (fwts_checksum(mem + i, 16) == 0)) { addr = (void *)((uint8_t *)FWTS_SMBIOS_REGION_START + i); memcpy(entry, (void *)(mem + i), sizeof(fwts_smbios_entry)); *type = FWTS_SMBIOS; break; } /* Legacy DMI entry point */ if ((*(mem+i) == '_') && (*(mem+i+1) == 'D') && (*(mem+i+2) == 'M') && (*(mem+i+3) == 'I') && (*(mem+i+4) == '_') && (fwts_checksum(mem + i, 15) == 0)) { memset(entry, 0, 16); addr = (void *)((uint8_t *)FWTS_SMBIOS_REGION_START + i); memcpy(16 + ((uint8_t *)entry), (void *)(mem + i), 15); *type = FWTS_SMBIOS_DMI_LEGACY; break; } } else if (smb_version == 3) { /* SMBIOS30 entry point */ if ((*(mem+i) == '_') && (*(mem+i+1) == 'S') && (*(mem+i+2) == 'M') && (*(mem+i+3) == '3') && (*(mem+i+4) == '_') && (fwts_checksum(mem + i, 24 ) == 0)) { addr = (void *)((uint8_t *)FWTS_SMBIOS_REGION_START + i); memcpy(entry, (void*)(mem + i), sizeof(fwts_smbios30_entry)); *type = FWTS_SMBIOS; break; } } } (void)fwts_munmap(mem, FWTS_SMBIOS_REGION_SIZE); return addr; } #endif /* * fwts_smbios_find_entry() * find SMBIOS structure table entry */ void *fwts_smbios_find_entry(fwts_framework *fw, fwts_smbios_entry *entry, fwts_smbios_type *type, uint16_t *version) { void *addr; *type = FWTS_SMBIOS_UNKNOWN; /* Check EFI first */ addr = fwts_smbios_find_entry_uefi(fw, entry, type, 2); if (addr) { *version = (entry->major_version << 8) + (entry->minor_version & 0xff); } else { #if defined(FWTS_ARCH_INTEL) /* Failed? then scan x86 memory for SMBIOS tag */ addr = fwts_smbios_find_entry_bios(fw, entry, type, 2); if (addr) { switch (*type) { case FWTS_SMBIOS: *version = (entry->major_version << 8) + (entry->minor_version & 0xff); break; case FWTS_SMBIOS_DMI_LEGACY: *version = ((entry->smbios_bcd_revision & 0xf0) << 4) + (entry->smbios_bcd_revision & 0x0f); break; default: break; } } #else (void)version; #endif } return addr; } /* * fwts_smbios30_find_entry() * find SMBIOS30 structure table entry */ void *fwts_smbios30_find_entry(fwts_framework *fw, fwts_smbios30_entry *entry, uint16_t *version) { void *addr; fwts_smbios_type type = FWTS_SMBIOS_UNKNOWN; /* Check EFI first */ addr = fwts_smbios_find_entry_uefi(fw, entry, &type, 3); if (addr) { *version = (entry->major_version << 8) + (entry->minor_version & 0xff); } else { #if defined(FWTS_ARCH_INTEL) /* Failed? then scan x86 memory for SMBIOS30 tag */ addr = fwts_smbios_find_entry_bios(fw, entry, &type, 3); if (addr) { *version = (entry->major_version << 8) + (entry->minor_version & 0xff); } #else (void)version; #endif } return addr; } #else /* * fwts_smbios_find_entry() * find SMBIOS structure table entry, currently void for non-x86 & non-aarch64 specific code */ void *fwts_smbios_find_entry(fwts_framework *fw, fwts_smbios_entry *entry, fwts_smbios_type *type, uint16_t *version) { FWTS_UNUSED(fw); /* Return a dummy values */ memset(entry, 0, sizeof(fwts_smbios_entry)); *type = FWTS_SMBIOS_UNKNOWN; *version = 0; return NULL; } /* * fwts_smbios30_find_entry() * find SMBIOS30 structure table entry, currently void for non-x86 & non-aarch64 specific code */ void *fwts_smbios30_find_entry(fwts_framework *fw, fwts_smbios30_entry *entry, uint16_t *version) { FWTS_UNUSED(fw); /* Return a dummy values */ memset(entry, 0, sizeof(fwts_smbios30_entry)); *version = 0; return NULL; } #endif src/lib/src/fwts_stringextras.c000066400000000000000000000043061465205512700171600ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * The following functions are derivative work from systemd, and * are covered by Copyright 2010 Lennart Poettering: * fwts_string_endswith() * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include "fwts.h" /* * fwts_chop_newline() * strip off trailing \n and ' ' from end of a string */ void fwts_chop_newline(char *str) { size_t len; if (!str) return; len = strlen(str); while (len > 0 && str[len-1] == '\n') str[--len] = '\0'; while (len > 0 && str[len-1] == ' ') str[--len] = '\0'; while (len > 0 && str[len-1] == '\r') str[--len] = '\0'; } /* * fwts_realloc_strcat() * append newstr to orig (allocated on the heap) * return NULL if fails, otherwise return expanded string */ char *fwts_realloc_strcat(char *orig, const char *newstr) { size_t newlen = strlen(newstr); if (orig) { char *tmp; tmp = realloc(orig, strlen(orig) + newlen + 1); if (!tmp) { free(orig); return NULL; } orig = tmp; strcat(orig, newstr); } else { if ((orig = malloc(newlen + 1)) == NULL) return NULL; strcpy(orig, newstr); } return orig; } /* * fwts_string_endswith() * see if str ends with postfix * return NULL if fails, otherwise return the matched substring */ const char *fwts_string_endswith(const char *str, const char *postfix) { size_t sl, pl; sl = strlen(str); pl = strlen(postfix); if (pl == 0) return str + sl; if (sl < pl) return NULL; if (memcmp(str + sl - pl, postfix, pl) != 0) return NULL; return str + sl - pl; } src/lib/src/fwts_summary.c000066400000000000000000000160471465205512700161250ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include "fwts.h" typedef struct { char *test; /* test that found the error */ char *text; /* text of failure message */ } fwts_summary_item; enum { SUMMARY_CRITICAL = 0, SUMMARY_HIGH, SUMMARY_MEDIUM, SUMMARY_LOW, SUMMARY_UNKNOWN, SUMMARY_MAX = SUMMARY_UNKNOWN+1 }; /* list of summary items per error level */ static fwts_list *fwts_summaries[SUMMARY_MAX]; /* * fwts_summary_init() * initialise */ int fwts_summary_init(void) { int i; /* initialise list of summary items for all error levels */ for (i = 0; i < SUMMARY_MAX; i++) if ((fwts_summaries[i] = fwts_list_new()) == NULL) { fwts_summary_deinit(); return FWTS_ERROR; } return FWTS_OK; } /* * fwts_summary_item_free() * free a summary item */ static void fwts_summary_item_free(void *data) { fwts_summary_item *item = (fwts_summary_item *)data; free(item->test); free(item->text); free(item); } /* * fwts_summary_init() * free up summary lists */ void fwts_summary_deinit(void) { int i; for (i = 0; i < SUMMARY_MAX; i++) if (fwts_summaries[i]) fwts_list_free(fwts_summaries[i], fwts_summary_item_free); } static int fwts_summary_level_to_index(const fwts_log_level level) { switch (level) { case LOG_LEVEL_CRITICAL: return SUMMARY_CRITICAL; case LOG_LEVEL_HIGH: return SUMMARY_HIGH; case LOG_LEVEL_MEDIUM: return SUMMARY_MEDIUM; case LOG_LEVEL_LOW: return SUMMARY_LOW; default: return SUMMARY_UNKNOWN; } } /* * fwts_summary_add() * add an error summary for a test with error message text at given * error level to the list of summaries. */ int fwts_summary_add( fwts_framework *fw, const char *test, const fwts_log_level level, const char *text) { fwts_list_link *item; fwts_summary_item *summary_item = NULL; bool summary_item_found = false; int index = fwts_summary_level_to_index(level); if (FWTS_LEVEL_IGNORE(fw, level)) return FWTS_OK; /* Does the text already exist? - search for it */ fwts_list_foreach(item, fwts_summaries[index]) { summary_item = fwts_list_data(fwts_summary_item *,item); if (strcmp(text, summary_item->text) == 0) { summary_item_found = true; break; } } /* Not found, create a new one */ if (!summary_item_found) { if ((summary_item = calloc(1, sizeof(fwts_summary_item))) == NULL) return FWTS_ERROR; if ((summary_item->test = strdup(test)) == NULL) { free(summary_item); return FWTS_ERROR; } if ((summary_item->text = strdup(text)) == NULL) { free(summary_item->test); free(summary_item); return FWTS_ERROR; } fwts_chop_newline(summary_item->text); /* And append new item if not done so already */ fwts_list_append(fwts_summaries[index], summary_item); } return FWTS_OK; } static void fwts_summary_format_field( char *buffer, const int buflen, const uint32_t value) { if (value) snprintf(buffer, buflen, "%5u", value); else *buffer = '\0'; } /* * fwts_summary_report() * report test failure summary, sorted by error levels */ int fwts_summary_report(fwts_framework *fw, fwts_list *test_list) { static const char *summary_names[] = { "Critical", "High", "Medium", "Low", "Other" }; static const int summary_levels[] = { LOG_LEVEL_CRITICAL, LOG_LEVEL_HIGH, LOG_LEVEL_MEDIUM, LOG_LEVEL_LOW, LOG_LEVEL_NONE }; int i; fwts_log_summary(fw, "Test Failure Summary"); fwts_log_underline(fw->results, '='); fwts_log_nl(fw); for (i = 0; i < SUMMARY_MAX; i++) { if (FWTS_LEVEL_IGNORE(fw, summary_levels[i])) continue; fwts_log_section_begin(fw->results, "failure"); if (fwts_summaries[i]->len) { fwts_list_link *item; fwts_log_summary(fw, "%s failures: %d", summary_names[i], fwts_summaries[i]->len); fwts_log_section_begin(fw->results, "failures"); fwts_list_foreach(item, fwts_summaries[i]) { fwts_summary_item *summary_item = fwts_list_data(fwts_summary_item *,item); /* * This is not pleasant, we really don't want very wide lines * logged in the HTML format, where we don't mind for other formats. */ if (fw->log_type == LOG_TYPE_HTML) fwts_log_summary(fw, " %s test: %s", summary_item->test, summary_item->text); else fwts_log_summary_verbatim(fw, " %s: %s", summary_item->test, summary_item->text); } fwts_log_section_end(fw->results); } else fwts_log_summary(fw, "%s failures: NONE", summary_names[i]); fwts_log_section_end(fw->results); fwts_log_nl(fw); } if ((fw->log_type & (LOG_TYPE_PLAINTEXT| LOG_TYPE_HTML)) && fw->total_run > 0) { fwts_list_link *item; fwts_list *sorted = fwts_list_new(); if (!sorted) { fwts_log_error(fw, "Out of memory allocating test summary list"); return FWTS_ERROR; } fwts_list_foreach(item, test_list) fwts_list_add_ordered(sorted, fwts_list_data(fwts_framework_test *,item), fwts_framework_compare_test_name); fwts_log_summary_verbatim(fw, "Test |Pass |Fail |Abort|Warn |Skip |Info |"); fwts_log_summary_verbatim(fw, "---------------+-----+-----+-----+-----+-----+-----+"); fwts_list_foreach(item, sorted) { fwts_framework_test *test = fwts_list_data(fwts_framework_test*,item); if (test->was_run) { char passed[16]; char failed[16]; char aborted[16]; char warning[16]; char skipped[16]; char infoonly[16]; fwts_summary_format_field(passed, sizeof(passed), test->results.passed); fwts_summary_format_field(failed, sizeof(failed), test->results.failed); fwts_summary_format_field(aborted, sizeof(aborted), test->results.aborted); fwts_summary_format_field(warning, sizeof(warning), test->results.warning); fwts_summary_format_field(skipped, sizeof(skipped), test->results.skipped); fwts_summary_format_field(infoonly, sizeof(infoonly), test->results.infoonly); fwts_log_summary_verbatim(fw, "%-15.15s|%5.5s|%5.5s|%5.5s|%5.5s|%5.5s|%5.5s|", test->name, passed, failed, aborted, warning, skipped, infoonly); } } fwts_log_summary_verbatim(fw, "---------------+-----+-----+-----+-----+-----+-----+"); fwts_log_summary_verbatim(fw, "Total: |%5d|%5d|%5d|%5d|%5d|%5d|", fw->total.passed, fw->total.failed, fw->total.aborted, fw->total.warning, fw->total.skipped, fw->total.infoonly); fwts_log_summary_verbatim(fw, "---------------+-----+-----+-----+-----+-----+-----+"); fwts_list_free(sorted, NULL); } return FWTS_OK; } src/lib/src/fwts_text_list.c000066400000000000000000000045721465205512700164470ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include "fwts.h" /* * fwts_text_list_new() * initialise a text list */ fwts_list *fwts_text_list_new(void) { return fwts_list_new(); } /* * fwts_text_list_free() * free a text list */ void fwts_text_list_free(fwts_list *list) { fwts_list_free(list, free); } /* * fwts_text_list_append() * append a string to a text list */ fwts_list_link *fwts_text_list_append(fwts_list *list, const char *text) { char *str; if ((str = strdup(text)) == NULL) return NULL; else return fwts_list_append(list, str); } /* * fwts_text_list_strstr() * check if string needle exists in the text list, returns * the position in the string if found, NULL if not found */ char *fwts_text_list_strstr(fwts_list *list, const char *needle) { fwts_list_link *item; char *match; if (list == NULL) return NULL; fwts_list_foreach(item, list) if ((match = strstr(fwts_list_data(char *, item), needle)) != NULL) return match; return NULL; } /* * fwts_list_from_text() * turn a string containing lines of text into * a text list */ fwts_list *fwts_list_from_text(const char *text) { const char *ptr; fwts_list *list; if (text == NULL) return NULL; if ((list = fwts_list_new()) == NULL) return NULL; ptr = text; while (*ptr) { const char *start = ptr; char *str; int len; while (*ptr && *ptr != '\n') ptr++; len = ptr - start; if (*ptr == '\n') ptr++; if ((str = calloc(1, len + 1)) == NULL) { fwts_text_list_free(list); return NULL; } strncpy(str, start, len); str[len] = '\0'; fwts_list_append(list, str); } return list; } src/lib/src/fwts_tpm.c000066400000000000000000000032601465205512700152210ustar00rootroot00000000000000/* * Copyright (C) 2020-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include "fwts_tpm.h" /* * fwts_tpm_data_hexdump * hex dump of a tpm event log data */ void fwts_tpm_data_hexdump( fwts_framework *fw, const uint8_t *data, const size_t size, const char *str) { size_t i; fwts_log_info_verbatim(fw, "%s: ", str); for (i = 0; i < size; i += 16) { char buffer[128]; const size_t left = size - i; fwts_dump_raw_data(buffer, sizeof(buffer), data + i, i, left > 16 ? 16 : left); fwts_log_info_verbatim(fw, "%s", buffer + 2); } } /* * fwts_tpm_evlog_type_to_string * get hash size */ uint8_t fwts_tpm_get_hash_size(const TPM2_ALG_ID hash) { uint8_t sz; switch (hash) { case TPM2_ALG_SHA1: sz = TPM2_SHA1_DIGEST_SIZE; break; case TPM2_ALG_SHA256: sz = TPM2_SHA256_DIGEST_SIZE; break; case TPM2_ALG_SHA384: sz = TPM2_SHA384_DIGEST_SIZE; break; case TPM2_ALG_SHA512: sz = TPM2_SHA512_DIGEST_SIZE; break; default: sz = 0; break; } return sz; } src/lib/src/fwts_tty.c000066400000000000000000000026251465205512700152450ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include /* * fwts_tty_width() * try and find width of tty. If it cannot be determined * then simply return the default_width */ int fwts_tty_width(const int fd, const int default_width) { #ifdef TIOCGWINSZ struct winsize ws; /* Zero'ing ws keeps static analyzers happy */ (void)memset(&ws, 0, sizeof(ws)); /* if tty and we can get a sane width, return it */ if (isatty(fd) && (ioctl(fd, TIOCGWINSZ, &ws) != -1) && (0 < ws.ws_col) && (ws.ws_col == (size_t)ws.ws_col)) return ws.ws_col; else #endif /* not supported or failed to get, return default */ return default_width; } src/lib/src/fwts_uefi.c000066400000000000000000000373171465205512700153630ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "fwts.h" #include "fwts_uefi.h" #include "fwts_efi_runtime.h" /* Old sysfs uefi packed binary blob variables */ typedef struct { uint16_t varname[512]; uint8_t guid[16]; uint64_t datalen; uint8_t data[1024]; uint64_t status; uint32_t attributes; } __attribute__((packed)) fwts_uefi_sys_fs_var; /* New efifs variable */ typedef struct { uint32_t attributes; uint8_t data[0]; /* variable length, depends on file size */ } __attribute__((packed)) fwts_uefi_efivars_fs_var; typedef struct { const uint64_t statusvalue; const char *mnemonic ; const char *description; } uefistatus_info; /* Which interface are we using? */ #define UEFI_IFACE_UNKNOWN (0) /* Not yet known */ #define UEFI_IFACE_NONE (1) /* None found */ #define UEFI_IFACE_SYSFS (2) /* sysfs */ #define UEFI_IFACE_EFIVARS (3) /* efivar fs */ /* File system magic numbers */ #define PSTOREFS_MAGIC ((__SWORD_TYPE)0x6165676C) #define EFIVARFS_MAGIC ((__SWORD_TYPE)0xde5e81e4) #define SYS_FS_MAGIC ((__SWORD_TYPE)0x62656572) /* * fwts_uefi_get_interface() * find which type of EFI variable file system we are using, * sets path to the name of the file system path, returns * the file system interface (if found). */ static int fwts_uefi_get_interface(char **path) { static int efivars_interface = UEFI_IFACE_UNKNOWN; static char efivar_path[4096]; FILE *fp; struct statfs statbuf; if (path == NULL) /* Sanity check */ return FWTS_ERROR; /* Already discovered, return the cached values */ if (efivars_interface != UEFI_IFACE_UNKNOWN) { *path = efivar_path; return efivars_interface; } *efivar_path = '\0'; /* Assume none */ /* Scan mounts to see if sysfs or efivar fs is somewhere else */ if ((fp = fopen("/proc/mounts", "r")) != NULL) { while (!feof(fp)) { char mount[4096]; char fstype[1024]; if (fscanf(fp, "%*s %4095s %1023s", mount, fstype) == 2) { /* Always try to find the newer interface first */ if (!strcmp(fstype, "efivarfs")) { strcpy(efivar_path, mount); break; } /* Failing that, look for sysfs, but don't break out the loop as we need to keep on searching for efivar fs */ if (!strcmp(fstype, "sysfs")) strcpy(efivar_path, "/sys/firmware/efi/vars"); } } (void)fclose(fp); } *path = NULL; /* No mounted path found, bail out */ if (*efivar_path == '\0') { efivars_interface = UEFI_IFACE_NONE; return UEFI_IFACE_NONE; } /* Can't stat it, bail out */ if (statfs(efivar_path, &statbuf) < 0) { efivars_interface = UEFI_IFACE_NONE; return UEFI_IFACE_NONE; }; /* We've now found a valid file system we can use */ *path = efivar_path; if ((statbuf.f_type == EFIVARFS_MAGIC) || (statbuf.f_type == PSTOREFS_MAGIC)) { efivars_interface = UEFI_IFACE_EFIVARS; return UEFI_IFACE_EFIVARS; } if (statbuf.f_type == SYS_FS_MAGIC) { efivars_interface = UEFI_IFACE_SYSFS; return UEFI_IFACE_SYSFS; } return UEFI_IFACE_UNKNOWN; } /* * fwts_uefi_str_to_str16() * convert 8 bit C string to 16 bit string. */ void fwts_uefi_str_to_str16(uint16_t *dst, const size_t len, const char *src) { size_t i = len; while ((*src) && (i > 1)) { *dst++ = *src++; i--; } *dst = '\0'; } /* * fwts_uefi_str16_to_str() * convert 16 bit string to 8 bit C string. */ void fwts_uefi_str16_to_str(char *dst, const size_t len, const uint16_t *src) { size_t i = len; while ((*src) && (i > 1)) { *dst++ = *(src++) & 0xff; i--; } *dst = '\0'; } /* * fwts_uefi_str16len() * 16 bit version of strlen() */ size_t fwts_uefi_str16len(const uint16_t *str) { int i; for (i = 0; *str; i++, str++) ; return i; } /* * fwts_uefi_get_varname() * fetch the UEFI variable name in terms of a 8 bit C string */ void fwts_uefi_get_varname(char *varname, const size_t len, const fwts_uefi_var *var) { fwts_uefi_str16_to_str(varname, len, var->varname); } /* * fwts_uefi_get_variable_sys_fs() * fetch a UEFI variable given its name, via sysfs */ static int fwts_uefi_get_variable_sys_fs(const char *varname, fwts_uefi_var *var, char *path) { int fd; char filename[PATH_MAX]; fwts_uefi_sys_fs_var uefi_sys_fs_var; memset(var, 0, sizeof(fwts_uefi_var)); snprintf(filename, sizeof(filename), "%s/%s/raw_var", path, varname); if ((fd = open(filename, O_RDONLY)) < 0) return FWTS_ERROR; memset(&uefi_sys_fs_var, 0, sizeof(uefi_sys_fs_var)); /* Read the raw fixed sized data */ if (read(fd, &uefi_sys_fs_var, sizeof(uefi_sys_fs_var)) != sizeof(uefi_sys_fs_var)) { (void)close(fd); return FWTS_ERROR; } (void)close(fd); /* Sanity check datalen is OK */ if (uefi_sys_fs_var.datalen > sizeof(uefi_sys_fs_var.data)) return FWTS_ERROR; /* Allocate space for the variable name */ var->varname = calloc(1, sizeof(uefi_sys_fs_var.varname)); if (var->varname == NULL) return FWTS_ERROR; /* Allocate space for the data */ var->data = calloc(1, (size_t)uefi_sys_fs_var.datalen); if (var->data == NULL) { free(var->varname); return FWTS_ERROR; } /* And copy the data */ memcpy(var->varname, uefi_sys_fs_var.varname, sizeof(uefi_sys_fs_var.varname)); memcpy(var->data, uefi_sys_fs_var.data, uefi_sys_fs_var.datalen); memcpy(var->guid, uefi_sys_fs_var.guid, sizeof(var->guid)); var->datalen = (size_t)uefi_sys_fs_var.datalen; var->attributes = uefi_sys_fs_var.attributes; var->status = uefi_sys_fs_var.status; return FWTS_OK; } /* * fwts_uefi_get_variable_efivars_fs() * fetch a UEFI variable given its name, via efivars fs */ static int fwts_uefi_get_variable_efivars_fs(const char *varname, fwts_uefi_var *var, char *path) { int fd; char filename[PATH_MAX]; struct stat statbuf; fwts_uefi_efivars_fs_var *efivars_fs_var; size_t varname_len = strlen(varname); memset(var, 0, sizeof(fwts_uefi_var)); /* Variable names include the GUID, so must be at least 36 chars long */ if (varname_len < 36) return FWTS_ERROR; /* Get the GUID */ fwts_guid_str_to_buf(varname + varname_len - 36, var->guid, sizeof(var->guid)); snprintf(filename, sizeof(filename), "%s/%s", path, varname); if ((fd = open(filename, O_RDONLY)) < 0) return FWTS_ERROR; if (fstat(fd, &statbuf) < 0) { (void)close(fd); return FWTS_ERROR; } /* Variable name, less the GUID, in 16 bit ints */ var->varname = calloc(1, (varname_len + 1 - 36) * sizeof(uint16_t)); if (var->varname == NULL) { (void)close(fd); return FWTS_ERROR; } /* Convert name to internal 16 bit version */ fwts_uefi_str_to_str16(var->varname, varname_len - 36, varname); /* Need to read the data in one read, so allocate a buffer big enough */ if ((efivars_fs_var = calloc(1, statbuf.st_size)) == NULL) { (void)close(fd); free(var->varname); return FWTS_ERROR; } if (read(fd, efivars_fs_var, statbuf.st_size) != statbuf.st_size) { (void)close(fd); free(var->varname); free(efivars_fs_var); return FWTS_ERROR; } (void)close(fd); var->status = 0; /* * UEFI variable data in efifs is: * 4 bytes : attributes * N bytes : uefi variable contents */ var->attributes = efivars_fs_var->attributes; var->datalen = statbuf.st_size - 4; if ((var->data = calloc(1, var->datalen)) == NULL) { free(var->varname); free(efivars_fs_var); return FWTS_ERROR; } memcpy(var->data, efivars_fs_var->data, var->datalen); free(efivars_fs_var); return FWTS_OK; } /* * fwts_uefi_get_variable() * fetch a UEFI variable given its name. */ int fwts_uefi_get_variable(const char *varname, fwts_uefi_var *var) { char *path; if ((!varname) || (!var)) /* Sanity checks */ return FWTS_ERROR; switch (fwts_uefi_get_interface(&path)) { case UEFI_IFACE_SYSFS: return fwts_uefi_get_variable_sys_fs(varname, var, path); case UEFI_IFACE_EFIVARS: return fwts_uefi_get_variable_efivars_fs(varname, var, path); default: return FWTS_ERROR; } } /* * fwts_uefi_free_variable() * free data and varname associated with a UEFI variable as * fetched by fwts_uefi_get_variable. */ void fwts_uefi_free_variable(fwts_uefi_var *var) { free(var->data); free(var->varname); } static int fwts_uefi_true_filter(const struct dirent *d) { FWTS_UNUSED(d); return 1; } /* * fwts_uefi_free_variable_names * free the list of uefi variable names */ void fwts_uefi_free_variable_names(fwts_list *list) { fwts_list_free_items(list, free); } /* * fwts_uefi_get_variable_names * gather a list of all the uefi variable names */ int fwts_uefi_get_variable_names(fwts_list *list) { int i, n; struct dirent **names = NULL; char *path; char *name; int ret = FWTS_OK; fwts_list_init(list); switch (fwts_uefi_get_interface(&path)) { case UEFI_IFACE_SYSFS: case UEFI_IFACE_EFIVARS: break; default: return FWTS_ERROR; } /* Gather variable names in alphabetical order */ n = scandir(path, &names, fwts_uefi_true_filter, alphasort); if (n < 0) return FWTS_ERROR; for (i = 0; i < n; i++) { if (names[i]->d_name[0] == '\0') continue; if (!strcmp(names[i]->d_name, ".")) continue; if (!strcmp(names[i]->d_name, "..")) continue; name = strdup(names[i]->d_name); if (name == NULL) { ret = FWTS_ERROR; fwts_uefi_free_variable_names(list); break; } else fwts_list_append(list, name); } /* Free dirent names */ for (i = 0; i < n; i++) free(names[i]); free(names); return ret; } static const uefistatus_info uefistatus_info_table[] = { { EFI_SUCCESS, "EFI_SUCCESS", "The operation completed successfully." }, { EFI_LOAD_ERROR, "EFI_LOAD_ERROR", "The image failed to load." }, { EFI_INVALID_PARAMETER, "EFI_INVALID_PARAMETER", "A parameter was incorrect." }, { EFI_UNSUPPORTED, "EFI_UNSUPPORTED", "The operation is not supported." }, { EFI_BAD_BUFFER_SIZE, "EFI_BAD_BUFFER_SIZE", "The buffer was not the proper size for the request." }, { EFI_BUFFER_TOO_SMALL, "EFI_BUFFER_TOO_SMALL", "The buffer is not large enough to hold the requested data. The required buffer size is returned in the appropriate parameter when this error occurs." }, { EFI_NOT_READY, "EFI_NOT_READY", "There is no data pending upon return." }, { EFI_DEVICE_ERROR, "EFI_DEVICE_ERROR", "The physical device reported an error while attempting the operation." }, { EFI_WRITE_PROTECTED, "EFI_WRITE_PROTECTED", "The device cannot be written to." }, { EFI_OUT_OF_RESOURCES, "EFI_OUT_OF_RESOURCES", "A resource has run out." }, { EFI_VOLUME_CORRUPTED, "EFI_VOLUME_CORRUPTED", "An inconstancy was detected on the file system causing the operating to fail." }, { EFI_VOLUME_FULL, "EFI_VOLUME_FULL", "There is no more space on the file system." }, { EFI_NO_MEDIA, "EFI_NO_MEDIA", "The device does not contain any medium to perform the operation." }, { EFI_MEDIA_CHANGED, "EFI_MEDIA_CHANGED", "The medium in the device has changed since the last access." }, { EFI_NOT_FOUND, "EFI_NOT_FOUND", "The item was not found." }, { EFI_ACCESS_DENIED, "EFI_ACCESS_DENIED", "Access was denied." }, { EFI_NO_RESPONSE, "EFI_NO_RESPONSE", "The server was not found or did not respond to the request." }, { EFI_NO_MAPPING, "EFI_NO_MAPPING", "A mapping to a device does not exist." }, { EFI_TIMEOUT, "EFI_TIMEOUT", "The timeout time expired." }, { EFI_NOT_STARTED, "EFI_NOT_STARTED", "The protocol has not been started." }, { EFI_ALREADY_STARTED, "EFI_ALREADY_STARTED", "The protocol has already been started." }, { EFI_ABORTED, "EFI_ABORTED", "The operation was aborted." }, { EFI_ICMP_ERROR, "EFI_ICMP_ERROR", "An ICMP error occurred during the network operation." }, { EFI_TFTP_ERROR, "EFI_TFTP_ERROR", "A TFTP error occurred during the network operation." }, { EFI_PROTOCOL_ERROR, "EFI_PROTOCOL_ERROR", "A protocol error occurred during the network operation." }, { EFI_INCOMPATIBLE_VERSION, "EFI_INCOMPATIBLE_VERSION", "The function encountered an internal version that was incompatible with a version requested by the caller." }, { EFI_SECURITY_VIOLATION, "EFI_SECURITY_VIOLATION", "The function was not performed due to a security violation." }, { EFI_CRC_ERROR, "EFI_CRC_ERROR", "A CRC error was detected." }, { EFI_END_OF_MEDIA, "EFI_END_OF_MEDIA", "Beginning or end of media was reached." }, { EFI_END_OF_FILE, "EFI_END_OF_FILE", "The end of the file was reached." }, { EFI_INVALID_LANGUAGE, "EFI_INVALID_LANGUAGE", "The language specified was invalid." }, { EFI_COMPROMISED_DATA, "EFI_COMPROMISED_DATA", "The security status of the data is unknown or compromised and the data must be updated or replaced to restore a valid security status." }, { EFI_IP_ADDRESS_CONFLICT, "EFI_IP_ADDRESS_CONFLICT", "There is an address conflict address allocation." }, { EFI_HTTP_ERROR, "EFI_HTTP_ERROR", "A HTTP error occurred during the network operation." }, { ~0, NULL, NULL } }; void fwts_uefi_print_status_info(fwts_framework *fw, const uint64_t status) { const uefistatus_info *info; if (status == ~0ULL) { fwts_log_info(fw, "fwts test ioctl() failed, errno=%d (%s)", errno, strerror(errno)); return; } for (info = uefistatus_info_table; info->mnemonic != NULL; info++) { if (status == info->statusvalue) { fwts_log_info(fw, "Return status: %s. %s", info->mnemonic, info->description); return; } } fwts_log_info(fw, "Cannot find the return status information, value = 0x%" PRIx64 ".", status); } /* * fwts_uefi_attribute_info() * convert attribute into a human readable form */ char *fwts_uefi_attribute_info(uint32_t attr) { static char str[100]; *str = 0; if (attr & FWTS_UEFI_VAR_NON_VOLATILE) strcat(str, "NonVolatile"); if (attr & FWTS_UEFI_VAR_BOOTSERVICE_ACCESS) { if (*str) strcat(str, ","); strcat(str, "BootServ"); } if (attr & FWTS_UEFI_VAR_RUNTIME_ACCESS) { if (*str) strcat(str, ","); strcat(str, "RunTime"); } if (attr & FWTS_UEFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS) { if (*str) strcat(str, ","); strcat(str, "AuthenticatedWrite"); } if (attr & FWTS_UEFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS) { if (*str) strcat(str, ","); strcat(str, "TimeBasedAuthenticatedWrite"); } return str; } /* * fwts_uefi_efivars_fs_exist() * check the efivar interface exist */ bool fwts_uefi_efivars_iface_exist(void) { char *path; return (fwts_uefi_get_interface(&path) == UEFI_IFACE_EFIVARS); } /* * fwts_uefi_rt_support_status_get() * get the status of runtime service support. * * Since UEFI 2.8 Errata A the EFI_RT_PROPERTIES_TABLE configuration table * can be used to indicate which UEFI runtime services are not implemented * via the bitmask RuntimeServicesSupported. If the table is not present, * all runtime services are to be considered available. Since Linux 5.11 * this bitmask can be read via an IOCTL call. Before Linux 5.11 the value * cannot be determined. */ void fwts_uefi_rt_support_status_get(int fd, uint32_t *rtservicessupported) { long ioret; ioret = ioctl(fd, EFI_RUNTIME_GET_SUPPORTED_MASK, rtservicessupported); if (ioret == -1) *rtservicessupported = EFI_RT_SUPPORTED_ALL; return; } src/lib/src/fwts_wakealarm.c000066400000000000000000000121001465205512700163560ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include #include #include "fwts.h" static const char *fwts_rtc = "/dev/rtc0"; /* * fwts_wakealarm_get() * get wakealarm */ int fwts_wakealarm_get(fwts_framework *fw, struct rtc_time *rtc_tm) { int fd; int ret = FWTS_OK; (void)memset(rtc_tm, 0, sizeof(*rtc_tm)); if ((fd = open(fwts_rtc, O_RDWR)) < 0) { fwts_log_error(fw, "Cannot access Real Time Clock device %s.", fwts_rtc); return FWTS_ERROR; } if (ioctl(fd, RTC_ALM_READ, rtc_tm) < 0) { fwts_log_error(fw, "Cannot read Real Time Clock Alarm with ioctl RTC_ALM_READ %s.", fwts_rtc); ret = FWTS_ERROR; } (void)close(fd); return ret; } /* * fwts_wakealarm_set() * set wakealarm */ int fwts_wakealarm_set(fwts_framework *fw, struct rtc_time *rtc_tm) { int fd; int ret = FWTS_OK; if ((fd = open(fwts_rtc, O_RDWR)) < 0) { fwts_log_error(fw, "Cannot access Real Time Clock device %s.", fwts_rtc); return FWTS_ERROR; } if (ioctl(fd, RTC_ALM_SET, rtc_tm) < 0) { fwts_log_error(fw, "Cannot set Real Time Clock Alarm with ioctl RTC_ALM_SET %s.", fwts_rtc); ret = FWTS_ERROR; } (void)close(fd); return ret; } /* * fwts_wakealarm_trigger() * trigger the RTC wakealarm to fire in 'seconds' seconds from now. */ int fwts_wakealarm_trigger(fwts_framework *fw, const uint32_t seconds) { int fd, ret = FWTS_OK; struct rtc_time rtc_tm; if ((fd = open(fwts_rtc, O_RDWR)) < 0) { fwts_log_error(fw, "Cannot access Real Time Clock device %s.", fwts_rtc); return FWTS_ERROR; } (void)memset(&rtc_tm, 0, sizeof(rtc_tm)); if (ioctl(fd, RTC_RD_TIME, &rtc_tm) < 0) { fwts_log_error(fw, "Cannot read Real Time Clock with ioctl RTC_RD_TIME %s.", fwts_rtc); ret = FWTS_ERROR; goto out; } rtc_tm.tm_sec += seconds; if (rtc_tm.tm_sec >= 60) { rtc_tm.tm_min += rtc_tm.tm_sec / 60; rtc_tm.tm_sec %= 60; } if (rtc_tm.tm_min >= 60) { rtc_tm.tm_hour += rtc_tm.tm_min / 60; rtc_tm.tm_min %= 60; } if (rtc_tm.tm_hour >= 24) { rtc_tm.tm_hour %= 24; } errno = 0; if (ioctl(fd, RTC_ALM_SET, &rtc_tm) < 0) { if (errno == ENOTTY) { fwts_log_error(fw, "Real Time Clock device %s does not support alarm interrupts.", fwts_rtc); ret = FWTS_ERROR; goto out; } } if (ioctl(fd, RTC_AIE_ON, 0) < 0) { fwts_log_error(fw, "Cannot enable alarm interrupts on Real Time Clock device %s.", fwts_rtc); ret = FWTS_ERROR; } out: (void)close(fd); return ret; } int fwts_wakealarm_cancel(fwts_framework *fw) { int fd, ret = FWTS_OK; if ((fd = open(fwts_rtc, O_RDWR)) < 0) { fwts_log_error(fw, "Cannot access Real Time Clock device %s.", fwts_rtc); return FWTS_ERROR; } if (ioctl(fd, RTC_AIE_OFF, 0) < 0) { fwts_log_error(fw, "Cannot cancel Real Time Clock Alarm with ioctl RTC_AIE_OFF %s.", fwts_rtc); ret = FWTS_ERROR; } (void)close(fd); return ret; } /* * fwts_wakealarm_check_fired() * check if wakealarm fires */ int fwts_wakealarm_check_fired(fwts_framework *fw, const uint32_t seconds) { int fd, rc, ret = FWTS_OK; fd_set rfds; struct timeval tv; if ((fd = open(fwts_rtc, O_RDWR)) < 0) { fwts_log_error(fw, "Cannot access Real Time Clock device %s.", fwts_rtc); return FWTS_ERROR; } FD_ZERO(&rfds); FD_SET(fd, &rfds); /* Wait for 1 second longer than the alarm */ tv.tv_sec = seconds + 1; tv.tv_usec = 0; /* Wait for data to be available or timeout */ rc = select(fd + 1, &rfds, NULL, NULL, &tv); if (rc == -1) { fwts_log_error(fw, "Select failed waiting for Real Time Clock device %s to fire.\n", fwts_rtc); ret = FWTS_ERROR; goto out; } /* Timed out, no data available, so alarm did not fire */ if (rc == 0) { fwts_log_error(fw, "Wakealarm Real Time Clock device %s did not fire", fwts_rtc); ret = FWTS_ERROR; } out: (void)close(fd); return ret; } /* * fwts_wakealarm_test_firing() * test RTC wakealarm trigger and firing from 'seconds' seconds time * from now. returns FWTS_OK if passed, otherwise FWTS_ERROR. */ int fwts_wakealarm_test_firing(fwts_framework *fw, const uint32_t seconds) { int ret = FWTS_OK; if (fwts_wakealarm_trigger(fw, seconds + 2) != FWTS_OK) return FWTS_ERROR; if (fwts_wakealarm_check_fired(fw, seconds + 2) != FWTS_OK) ret = FWTS_ERROR; fwts_wakealarm_cancel(fw); return ret; } src/libfwtsacpica/000077500000000000000000000000001465205512700144675ustar00rootroot00000000000000src/libfwtsacpica/Makefile.am000066400000000000000000000343711465205512700165330ustar00rootroot00000000000000# # Copyright (C) 2010-2024 Canonical, Ltd. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # Nb. the top-level Makefile builds source/compiler for us now... # # -DACPI_EXEC_APP is specific to making ACPICA for the fwts method test # AM_CPPFLAGS = \ -D_LINUX -DNDEBUG -D_CONSOLE -DACPI_EXEC_APP \ -I$(top_srcdir)/src/lib/include \ -I$(top_srcdir)/src/acpica/source/include \ -I$(top_srcdir)/src/acpica/source/tools/acpiexec \ -Wall -fno-strict-aliasing \ -Wno-address-of-packed-member # # We rename some of the functions so we can override them in fwts. This # is a hack, I feel dirty now. # osunixxf_munged.c: ../../src/acpica/source/os_specific/service_layers/osunixxf.c cat $^ | \ sed 's/^AcpiOsPrintf/__AcpiOsPrintf/' | \ sed 's/^AcpiOsReadPort/__AcpiOsReadPort/' | \ sed 's/^AcpiOsReadPciConfiguration/__AcpiOsReadPciConfiguration/' | \ sed 's/^AcpiOsSignalSemaphore/__AcpiOsSignalSemaphore/' | \ sed 's/^AcpiOsWaitSemaphore/__AcpiOsWaitSemaphore/' | \ sed 's/^AcpiOsCreateSemaphore/__AcpiOsCreateSemaphore/' | \ sed 's/^AcpiOsDeleteSemaphore/__AcpiOsDeleteSemaphore/' | \ sed 's/^AcpiOsVprintf/__AcpiOsVprintf/' | \ sed 's/^AcpiOsSignal/__AcpiOsSignal/' | \ sed 's/^AcpiOsSleep/__AcpiOsSleep/' | \ sed 's/^AcpiOsExecute/__AcpiOsExecute/' \ > $@ # # Force maximum loop iterations to be just 128 instead of 0xffff # because we really don't want to wait until the sun turns into # a lump of coal before we complete a blocked operation # dscontrol_munged.c: ../../src/acpica/source/components/dispatcher/dscontrol.c cat $^ | \ sed 's/ACPI_MAX_LOOP_ITERATIONS/0x0080/' \ > $@ BUILT_SOURCES = osunixxf_munged.c dscontrol_munged.c # # Source files that are generated on-the fly and need cleaning # CLEANFILES = osunixxf_munged.c \ dscontrol_munged.c \ ../src/acpica/source/compiler/aslcompiler.output \ ../src/acpica/source/compiler/dtparser.output \ ../src/acpica/source/compiler/dtparser.y.h \ ../src/acpica/source/compiler/prparser.output \ ../src/acpica/source/compiler/prparser.y.h \ ../src/acpica/source/compiler/prparserlex.c \ ../src/acpica/source/compiler/prparserparse.c pkglib_LTLIBRARIES = libfwtsacpica.la libfwtsacpica_la_LDFLAGS = -version-info 1:0:0 libfwtsacpica_la_LIBADD = -lpthread libfwtsacpica_la_CPPFLAGS = $(AM_CPPFLAGS) # # fwts acpica library sources # libfwtsacpica_la_SOURCES = \ fwts_acpica.c \ osunixxf_munged.c \ dscontrol_munged.c \ ../../src/acpica/source/components/debugger/dbcmds.c \ ../../src/acpica/source/components/debugger/dbdisply.c \ ../../src/acpica/source/components/debugger/dbexec.c \ ../../src/acpica/source/components/debugger/dbfileio.c \ ../../src/acpica/source/components/debugger/dbhistry.c \ ../../src/acpica/source/components/debugger/dbinput.c \ ../../src/acpica/source/components/debugger/dbstats.c \ ../../src/acpica/source/components/debugger/dbobject.c \ ../../src/acpica/source/components/debugger/dbutils.c \ ../../src/acpica/source/components/debugger/dbxface.c \ ../../src/acpica/source/components/debugger/dbmethod.c \ ../../src/acpica/source/components/debugger/dbnames.c \ ../../src/acpica/source/components/debugger/dbconvert.c \ ../../src/acpica/source/components/debugger/dbtest.c \ ../../src/acpica/source/components/disassembler/dmbuffer.c \ ../../src/acpica/source/components/disassembler/dmcstyle.c \ ../../src/acpica/source/components/disassembler/dmnames.c \ ../../src/acpica/source/components/disassembler/dmopcode.c \ ../../src/acpica/source/components/disassembler/dmresrc.c \ ../../src/acpica/source/components/disassembler/dmresrcl.c \ ../../src/acpica/source/components/disassembler/dmresrcs.c \ ../../src/acpica/source/components/disassembler/dmutils.c \ ../../src/acpica/source/components/disassembler/dmwalk.c \ ../../src/acpica/source/components/disassembler/dmresrcl2.c \ ../../src/acpica/source/components/disassembler/dmdeferred.c \ ../../src/acpica/source/components/dispatcher/dsdebug.c \ ../../src/acpica/source/components/dispatcher/dsfield.c \ ../../src/acpica/source/components/dispatcher/dsinit.c \ ../../src/acpica/source/components/dispatcher/dsmethod.c \ ../../src/acpica/source/components/dispatcher/dsmthdat.c \ ../../src/acpica/source/components/dispatcher/dsobject.c \ ../../src/acpica/source/components/dispatcher/dspkginit.c \ ../../src/acpica/source/components/dispatcher/dsutils.c \ ../../src/acpica/source/components/dispatcher/dswexec.c \ ../../src/acpica/source/components/dispatcher/dswload.c \ ../../src/acpica/source/components/dispatcher/dswscope.c \ ../../src/acpica/source/components/dispatcher/dswstate.c \ ../../src/acpica/source/components/dispatcher/dsargs.c \ ../../src/acpica/source/components/dispatcher/dswload2.c \ ../../src/acpica/source/components/dispatcher/dsopcode.c \ ../../src/acpica/source/components/events/evevent.c \ ../../src/acpica/source/components/events/evgpe.c \ ../../src/acpica/source/components/events/evgpeblk.c \ ../../src/acpica/source/components/events/evgpeinit.c \ ../../src/acpica/source/components/events/evgpeutil.c \ ../../src/acpica/source/components/events/evxfgpe.c \ ../../src/acpica/source/components/events/evmisc.c \ ../../src/acpica/source/components/events/evregion.c \ ../../src/acpica/source/components/events/evrgnini.c \ ../../src/acpica/source/components/events/evsci.c \ ../../src/acpica/source/components/events/evxface.c \ ../../src/acpica/source/components/events/evxfevnt.c \ ../../src/acpica/source/components/events/evxfregn.c \ ../../src/acpica/source/components/events/evglock.c \ ../../src/acpica/source/components/events/evhandler.c \ ../../src/acpica/source/components/executer/exconcat.c \ ../../src/acpica/source/components/executer/exfield.c \ ../../src/acpica/source/components/executer/exfldio.c \ ../../src/acpica/source/components/executer/exmisc.c \ ../../src/acpica/source/components/executer/exmutex.c \ ../../src/acpica/source/components/executer/exnames.c \ ../../src/acpica/source/components/executer/exoparg1.c \ ../../src/acpica/source/components/executer/exoparg2.c \ ../../src/acpica/source/components/executer/exoparg3.c \ ../../src/acpica/source/components/executer/exoparg6.c \ ../../src/acpica/source/components/executer/exprep.c \ ../../src/acpica/source/components/executer/exregion.c \ ../../src/acpica/source/components/executer/exresnte.c \ ../../src/acpica/source/components/executer/exresolv.c \ ../../src/acpica/source/components/executer/exresop.c \ ../../src/acpica/source/components/executer/exserial.c \ ../../src/acpica/source/components/executer/exstore.c \ ../../src/acpica/source/components/executer/exstoren.c \ ../../src/acpica/source/components/executer/exstorob.c \ ../../src/acpica/source/components/executer/exsystem.c \ ../../src/acpica/source/components/executer/extrace.c \ ../../src/acpica/source/components/executer/exutils.c \ ../../src/acpica/source/components/executer/exconvrt.c \ ../../src/acpica/source/components/executer/excreate.c \ ../../src/acpica/source/components/executer/exdump.c \ ../../src/acpica/source/components/executer/exdebug.c \ ../../src/acpica/source/components/executer/exconfig.c \ ../../src/acpica/source/components/hardware/hwacpi.c \ ../../src/acpica/source/components/hardware/hwgpe.c \ ../../src/acpica/source/components/hardware/hwpci.c \ ../../src/acpica/source/components/hardware/hwregs.c \ ../../src/acpica/source/components/hardware/hwsleep.c \ ../../src/acpica/source/components/hardware/hwvalid.c \ ../../src/acpica/source/components/hardware/hwxface.c \ ../../src/acpica/source/components/hardware/hwxfsleep.c \ ../../src/acpica/source/components/hardware/hwesleep.c \ ../../src/acpica/source/components/namespace/nsaccess.c \ ../../src/acpica/source/components/namespace/nsalloc.c \ ../../src/acpica/source/components/namespace/nsdump.c \ ../../src/acpica/source/components/namespace/nsdumpdv.c \ ../../src/acpica/source/components/namespace/nseval.c \ ../../src/acpica/source/components/namespace/nsinit.c \ ../../src/acpica/source/components/namespace/nsload.c \ ../../src/acpica/source/components/namespace/nsnames.c \ ../../src/acpica/source/components/namespace/nsobject.c \ ../../src/acpica/source/components/namespace/nsparse.c \ ../../src/acpica/source/components/namespace/nspredef.c \ ../../src/acpica/source/components/namespace/nsrepair.c \ ../../src/acpica/source/components/namespace/nsrepair2.c \ ../../src/acpica/source/components/namespace/nssearch.c \ ../../src/acpica/source/components/namespace/nsutils.c \ ../../src/acpica/source/components/namespace/nswalk.c \ ../../src/acpica/source/components/namespace/nsxfeval.c \ ../../src/acpica/source/components/namespace/nsxfname.c \ ../../src/acpica/source/components/namespace/nsxfobj.c \ ../../src/acpica/source/components/namespace/nsconvert.c \ ../../src/acpica/source/components/namespace/nsprepkg.c \ ../../src/acpica/source/components/namespace/nsarguments.c \ ../../src/acpica/source/components/parser/psargs.c \ ../../src/acpica/source/components/parser/psloop.c \ ../../src/acpica/source/components/parser/psopcode.c \ ../../src/acpica/source/components/parser/psparse.c \ ../../src/acpica/source/components/parser/psscope.c \ ../../src/acpica/source/components/parser/pstree.c \ ../../src/acpica/source/components/parser/psutils.c \ ../../src/acpica/source/components/parser/pswalk.c \ ../../src/acpica/source/components/parser/psxface.c \ ../../src/acpica/source/components/parser/psopinfo.c \ ../../src/acpica/source/components/parser/psobject.c \ ../../src/acpica/source/components/resources/rsaddr.c \ ../../src/acpica/source/components/resources/rscalc.c \ ../../src/acpica/source/components/resources/rscreate.c \ ../../src/acpica/source/components/resources/rsdump.c \ ../../src/acpica/source/components/resources/rsio.c \ ../../src/acpica/source/components/resources/rsinfo.c \ ../../src/acpica/source/components/resources/rsirq.c \ ../../src/acpica/source/components/resources/rslist.c \ ../../src/acpica/source/components/resources/rsmemory.c \ ../../src/acpica/source/components/resources/rsmisc.c \ ../../src/acpica/source/components/resources/rsutils.c \ ../../src/acpica/source/components/resources/rsxface.c \ ../../src/acpica/source/components/resources/rsserial.c \ ../../src/acpica/source/components/resources/rsdumpinfo.c \ ../../src/acpica/source/components/tables/tbdata.c \ ../../src/acpica/source/components/tables/tbfadt.c \ ../../src/acpica/source/components/tables/tbfind.c \ ../../src/acpica/source/components/tables/tbinstal.c \ ../../src/acpica/source/components/tables/tbutils.c \ ../../src/acpica/source/components/tables/tbxface.c \ ../../src/acpica/source/components/tables/tbxfroot.c \ ../../src/acpica/source/components/tables/tbxfload.c \ ../../src/acpica/source/components/tables/tbprint.c \ ../../src/acpica/source/components/utilities/utaddress.c \ ../../src/acpica/source/components/utilities/utalloc.c \ ../../src/acpica/source/components/utilities/utascii.c \ ../../src/acpica/source/components/utilities/utcache.c \ ../../src/acpica/source/components/utilities/utcksum.c \ ../../src/acpica/source/components/utilities/utcopy.c \ ../../src/acpica/source/components/utilities/utdebug.c \ ../../src/acpica/source/components/utilities/utdelete.c \ ../../src/acpica/source/components/utilities/uteval.c \ ../../src/acpica/source/components/utilities/utglobal.c \ ../../src/acpica/source/components/utilities/uthex.c \ ../../src/acpica/source/components/utilities/utids.c \ ../../src/acpica/source/components/utilities/utinit.c \ ../../src/acpica/source/components/utilities/utlock.c \ ../../src/acpica/source/components/utilities/utmath.c \ ../../src/acpica/source/components/utilities/utmisc.c \ ../../src/acpica/source/components/utilities/utmutex.c \ ../../src/acpica/source/components/utilities/utnonansi.c \ ../../src/acpica/source/components/utilities/utobject.c \ ../../src/acpica/source/components/utilities/utresdecode.c \ ../../src/acpica/source/components/utilities/utresrc.c \ ../../src/acpica/source/components/utilities/utstate.c \ ../../src/acpica/source/components/utilities/utstrtoul64.c \ ../../src/acpica/source/components/utilities/uttrack.c \ ../../src/acpica/source/components/utilities/utosi.c \ ../../src/acpica/source/components/utilities/utxferror.c \ ../../src/acpica/source/components/utilities/utxface.c \ ../../src/acpica/source/components/utilities/utdecode.c \ ../../src/acpica/source/components/utilities/utexcep.c \ ../../src/acpica/source/components/utilities/utpredef.c \ ../../src/acpica/source/components/utilities/utstring.c \ ../../src/acpica/source/components/utilities/utstrsuppt.c \ ../../src/acpica/source/components/utilities/utownerid.c \ ../../src/acpica/source/components/utilities/utxfinit.c \ ../../src/acpica/source/components/utilities/uterror.c \ ../../src/acpica/source/components/utilities/utbuffer.c \ ../../src/acpica/source/components/utilities/utuuid.c \ ../../src/acpica/source/common/acfileio.c \ ../../src/acpica/source/common/acgetline.c \ ../../src/acpica/source/common/ahids.c \ ../../src/acpica/source/common/cmfsize.c \ ../../src/acpica/source/common/ahtable.c \ ../../src/acpica/source/common/ahuuids.c \ ../../src/acpica/source/tools/acpiexec/aeinitfile.c \ ../../src/acpica/source/tools/acpiexec/aehandlers.c \ ../../src/acpica/source/tools/acpiexec/aeexception.c \ ../../src/acpica/source/tools/acpiexec/aeregion.c \ ../../src/acpica/source/tools/acpiexec/aeinstall.c \ ../../src/acpica/source/os_specific/service_layers/osgendbg.c -include ../../git.mk src/libfwtsacpica/fwts_acpica.c000066400000000000000000001007751465205512700171300ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include #include #include "fwts.h" /* ACPICA specific headers */ #include "acpi.h" #include "accommon.h" #include "acparser.h" #include "amlcode.h" #include "acnamesp.h" #include "acdebug.h" #include "actables.h" #include "acinterp.h" #include "acapps.h" #include "amlresrc.h" #include "aecommon.h" #define ACPI_MAX_INIT_TABLES (64) /* Number of ACPI tables */ #define MAX_SEMAPHORES (2048) /* For semaphore tracking */ #define MAX_THREADS (128) /* For thread tracking */ #define MAX_WAIT_TIMEOUT (20) /* Seconds */ #define ACPI_ADR_SPACE_USER_DEFINED1 (0x80) #define ACPI_ADR_SPACE_USER_DEFINED2 (0xE4) /* * Semaphore accounting info */ typedef struct { sem_t sem; /* Semaphore handle */ int count; /* count > 0 if acquired */ bool used; /* Semaphore being used flag */ } sem_info; /* * Used to account for threads used by AcpiOsExecute */ typedef struct { bool used; /* true if the thread accounting info in use by a thread */ pthread_t thread; /* thread info */ } fwts_thread; typedef void * (*pthread_callback)(void *); BOOLEAN AcpiGbl_AbortLoopOnTimeout = FALSE; BOOLEAN AcpiGbl_IgnoreErrors = FALSE; BOOLEAN AcpiGbl_VerboseHandlers = FALSE; UINT8 AcpiGbl_RegionFillValue = 0; INIT_FILE_ENTRY *AcpiGbl_InitEntries = NULL; UINT32 AcpiGbl_InitFileLineCount = 0; static ACPI_TABLE_DESC Tables[ACPI_MAX_INIT_TABLES]; /* ACPICA Table descriptors */ static bool region_handler_called; /* Region handler tracking */ static sem_info sem_table[MAX_SEMAPHORES]; /* Semaphore accounting for AcpiOs*Semaphore() */ static pthread_mutex_t mutex_lock_sem_table; /* Semaphore accounting mutex */ static fwts_thread threads[MAX_THREADS]; /* Thread accounting for AcpiOsExecute */ static pthread_mutex_t mutex_thread_info; /* Thread accounting mutex */ /* * Static copies of ACPI tables used by ACPICA execution engine */ static ACPI_TABLE_XSDT *fwts_acpica_XSDT; static ACPI_TABLE_RSDT *fwts_acpica_RSDT; static ACPI_TABLE_RSDP *fwts_acpica_RSDP; static ACPI_TABLE_FADT *fwts_acpica_FADT; static void *fwts_acpica_DSDT; static fwts_framework *fwts_acpica_fw; /* acpica context copy of fw */ static bool fwts_acpica_init_called; /* > 0, ACPICA initialised */ /* Semaphore Tracking */ /* * fwts_acpica_sem_count_clear() * clear refs to semaphores and per semaphore count */ void fwts_acpica_sem_count_clear(void) { int i; pthread_mutex_lock(&mutex_lock_sem_table); for (i = 0; i < MAX_SEMAPHORES; i++) sem_table[i].count = 0; pthread_mutex_unlock(&mutex_lock_sem_table); } /* * fwts_acpica_sem_count_get() * collect up number of semaphores that were acquire and release * during a method evaluation */ void fwts_acpica_sem_count_get(int *acquired, int *released) { int i; *acquired = 0; *released = 0; /* Wait for any pending threads to complete */ for (i = 0; i < MAX_THREADS; i++) { pthread_mutex_lock(&mutex_thread_info); if (threads[i].used) { pthread_mutex_unlock(&mutex_thread_info); /* Wait for thread to complete */ pthread_join(threads[i].thread, NULL); pthread_mutex_lock(&mutex_thread_info); threads[i].used = false; } pthread_mutex_unlock(&mutex_thread_info); } /* * All threads (such as Notify() calls now complete, so * we can now do the semaphore accounting calculations */ pthread_mutex_lock(&mutex_lock_sem_table); for (i = 0; i < MAX_SEMAPHORES; i++) { if (sem_table[i].used) { (*acquired)++; if (sem_table[i].count == 0) (*released)++; } } pthread_mutex_unlock(&mutex_lock_sem_table); } /* ACPICA Handlers */ /* * fwts_notify_handler() * Notify handler */ static void fwts_notify_handler(ACPI_HANDLE Device, UINT32 Value, void *Context) { (void)AcpiEvaluateObject(Device, "_NOT", NULL, NULL); } static void fwts_device_notify_handler(ACPI_HANDLE Device, UINT32 Value, void *Context) { (void)AcpiEvaluateObject(Device, "_NOT", NULL, NULL); } static UINT32 fwts_interface_handler(ACPI_STRING InterfaceName, UINT32 Supported) { return Supported; } static ACPI_STATUS fwts_table_handler(UINT32 Event, void *Table, void *Context) { return AE_OK; } static UINT32 fwts_event_handler(void *Context) { return 0; } static ACPI_STATUS fwts_exception_handler( ACPI_STATUS AmlStatus, ACPI_NAME Name, UINT16 Opcode, UINT32 AmlOffset, void *Context) { char *exception = (char*)AcpiFormatException(AmlStatus); if (Name) fwts_log_info(fwts_acpica_fw, "ACPICA Exception %s during execution of method %4.4s", exception, (char*)&Name); else fwts_log_info(fwts_acpica_fw, "ACPICA Exception %s during execution at module level (table load)", exception); if (AcpiGbl_IgnoreErrors) { if (AmlStatus != AE_OK) { fwts_log_info(fwts_acpica_fw, "ACPICA Exception override, forcing AE_OK for exception %s", exception); AmlStatus = AE_OK; } } return AmlStatus; } static void fwts_attached_data_handler(ACPI_HANDLE obj, void *data) { } static ACPI_STATUS fwts_region_init( ACPI_HANDLE RegionHandle, UINT32 Function, void *HandlerContext, void **RegionContext) { *RegionContext = RegionHandle; return AE_OK; } void fwts_acpi_region_handler_called_set(const bool val) { region_handler_called = val; } bool fwts_acpi_region_handler_called_get(void) { return region_handler_called; } static ACPI_STATUS fwts_region_handler( UINT32 function, ACPI_PHYSICAL_ADDRESS address, UINT32 bitwidth, UINT64 *value, void *handlercontext, void *regioncontext) { ACPI_OPERAND_OBJECT *regionobject = ACPI_CAST_PTR(ACPI_OPERAND_OBJECT, regioncontext); UINT8 *buffer = ACPI_CAST_PTR(UINT8, value); ACPI_SIZE length; UINT32 bytewidth; int i; if (!regionobject) return AE_BAD_PARAMETER; if (!value) return AE_BAD_PARAMETER; if (regionobject->Region.Type != ACPI_TYPE_REGION) return AE_OK; fwts_acpi_region_handler_called_set(true); switch (regionobject->Region.SpaceId) { case ACPI_ADR_SPACE_SYSTEM_IO: switch (function & ACPI_IO_MASK) { case ACPI_READ: *value = 0; break; case ACPI_WRITE: break; default: return AE_BAD_PARAMETER; break; } break; case ACPI_ADR_SPACE_SMBUS: case ACPI_ADR_SPACE_GSBUS: /* ACPI 5.0 */ length = 0; switch (function & ACPI_IO_MASK) { case ACPI_READ: switch (function >> 16) { case AML_FIELD_ATTRIB_QUICK: case AML_FIELD_ATTRIB_SEND_RECEIVE: case AML_FIELD_ATTRIB_BYTE: length = 1; break; case AML_FIELD_ATTRIB_WORD: case AML_FIELD_ATTRIB_PROCESS_CALL: length = 2; break; case AML_FIELD_ATTRIB_BLOCK: case AML_FIELD_ATTRIB_BLOCK_PROCESS_CALL: length = 32; break; case AML_FIELD_ATTRIB_BYTES: case AML_FIELD_ATTRIB_RAW_BYTES: case AML_FIELD_ATTRIB_RAW_PROCESS_BYTES: break; default: break; } break; case ACPI_WRITE: switch (function >> 16) { case AML_FIELD_ATTRIB_QUICK: case AML_FIELD_ATTRIB_SEND_RECEIVE: case AML_FIELD_ATTRIB_BYTE: case AML_FIELD_ATTRIB_WORD: case AML_FIELD_ATTRIB_BLOCK: length = 0; break; case AML_FIELD_ATTRIB_PROCESS_CALL: length = 2; break; case AML_FIELD_ATTRIB_BLOCK_PROCESS_CALL: length = 32; break; case AML_FIELD_ATTRIB_BYTES: case AML_FIELD_ATTRIB_RAW_BYTES: case AML_FIELD_ATTRIB_RAW_PROCESS_BYTES: break; default: break; } break; default: break; } for (i = 0; i < length; i++) buffer[i+2] = (UINT8)(0xA0 + i); buffer[0] = 0x7A; buffer[1] = (UINT8)length; return AE_OK; case ACPI_ADR_SPACE_IPMI: /* ACPI 4.0 */ buffer[0] = 0; /* Status byte */ buffer[1] = 64; /* Return buffer data length */ buffer[2] = 0; /* Completion code */ buffer[3] = 0; /* Reserved */ for (i = 4; i < 66; i++) buffer[i] = (UINT8) (i); return AE_OK; case ACPI_ADR_SPACE_SYSTEM_MEMORY: case ACPI_ADR_SPACE_EC: case ACPI_ADR_SPACE_CMOS: case ACPI_ADR_SPACE_GPIO: case ACPI_ADR_SPACE_PCI_BAR_TARGET: case ACPI_ADR_SPACE_FIXED_HARDWARE: case ACPI_ADR_SPACE_USER_DEFINED1: case ACPI_ADR_SPACE_USER_DEFINED2: default: bytewidth = (bitwidth / 8); if (bitwidth % 8) bytewidth += 1; switch (function) { case ACPI_READ: /* Fake it, return all set */ memset(value, 0x00, bytewidth); break; case ACPI_WRITE: /* Fake it, do nothing */ break; default: return AE_BAD_PARAMETER; } return AE_OK; } return AE_OK; } void MpSaveGpioInfo ( ACPI_PARSE_OBJECT *Op, AML_RESOURCE *Resource, UINT32 PinCount, UINT16 *PinList, char *DeviceName) { FWTS_UNUSED(Op); FWTS_UNUSED(Resource); FWTS_UNUSED(PinCount); FWTS_UNUSED(PinList); FWTS_UNUSED(DeviceName); } void MpSaveSerialInfo ( ACPI_PARSE_OBJECT *Op, AML_RESOURCE *Resource, char *DeviceName) { FWTS_UNUSED(Op); FWTS_UNUSED(Resource); FWTS_UNUSED(DeviceName); } /* * AcpiOsGetRootPointer() * override ACPICA AeLocalGetRootPointer to return a local copy of the RSDP */ ACPI_PHYSICAL_ADDRESS AcpiOsGetRootPointer(void) { return (ACPI_PHYSICAL_ADDRESS)(uintptr_t)fwts_acpica_RSDP; } /* * fwts_acpica_vprintf() * accumulate prints from ACPICA engine, emit them when we hit terminal '\n' */ void fwts_acpica_vprintf(const char *fmt, va_list args) { static char *buffer; static size_t buffer_len; char *tmp; size_t tmp_len; if (fwts_acpica_fw == NULL) return; /* Only emit messages if in ACPICA debug mode */ if (!(fwts_acpica_fw->flags & FWTS_FLAG_ACPICA_DEBUG)) return; if (vasprintf(&tmp, fmt, args) < 0) { fwts_log_info(fwts_acpica_fw, "Out of memory allocating ACPICA printf buffer."); return; } tmp_len = strlen(tmp); if (buffer_len == 0) { buffer_len = tmp_len + 1; buffer = malloc(buffer_len); if (buffer) strcpy(buffer, tmp); else { buffer = NULL; buffer_len = 0; } } else { char *new_buf; buffer_len += tmp_len; new_buf = realloc(buffer, buffer_len); if (new_buf) { buffer = new_buf; strcat(buffer, tmp); } else { free(buffer); buffer = NULL; buffer_len = 0; } } if (buffer && index(buffer, '\n') != NULL) { fwts_log_info(fwts_acpica_fw, "%s", buffer); free(buffer); buffer_len = 0; } free(tmp); } /* * AcpiOsPrintf() * Override ACPICA AcpiOsPrintf to write printfs to the fwts log * rather than to stdout */ void ACPI_INTERNAL_VAR_XFACE AcpiOsPrintf (const char *fmt, ...) { va_list args; va_start(args, fmt); AcpiOsVprintf(fmt, args); va_end(args); } /* * AcpiOsVprintf() * Override ACPICA AcpiOsVprintf to write printfs to the fwts log * rather than to stdout */ void AcpiOsVprintf(const char *fmt, va_list args) { fwts_acpica_vprintf(fmt, args); } /* * AcpiOsCreateSemaphore() * Override ACPICA AcpiOsCreateSemaphore */ ACPI_STATUS AcpiOsCreateSemaphore(UINT32 MaxUnits, UINT32 InitialUnits, ACPI_HANDLE *OutHandle) { sem_info *sem = NULL; ACPI_STATUS ret = AE_OK; int i; if (!OutHandle) return AE_BAD_PARAMETER; pthread_mutex_lock(&mutex_lock_sem_table); for (i = 0; i < MAX_SEMAPHORES; i++) { if (!sem_table[i].used) { sem = &sem_table[i]; break; } } if (!sem) { pthread_mutex_unlock(&mutex_lock_sem_table); return AE_NO_MEMORY; } sem->used = true; sem->count = 0; if (sem_init(&sem->sem, 0, InitialUnits) == -1) { *OutHandle = NULL; ret = AE_NO_MEMORY; } else { *OutHandle = (ACPI_HANDLE)sem; } pthread_mutex_unlock(&mutex_lock_sem_table); return ret; } /* * AcpiOsDeleteSemaphore() * Override ACPICA AcpiOsDeleteSemaphore to fix semaphore memory freeing */ ACPI_STATUS AcpiOsDeleteSemaphore(ACPI_HANDLE Handle) { sem_info *sem = (sem_info *)Handle; ACPI_STATUS ret = AE_OK; if (!sem) return AE_BAD_PARAMETER; pthread_mutex_lock(&mutex_lock_sem_table); if (sem_destroy(&sem->sem) == -1) ret = AE_BAD_PARAMETER; sem->used = false; pthread_mutex_unlock(&mutex_lock_sem_table); return ret; } static void sem_alarm(int dummy) { /* Do nothing apart from interrupt sem_wait() */ } /* * AcpiOsWaitSemaphore() * Override ACPICA AcpiOsWaitSemaphore to keep track of semaphore acquires * so that we can see if any methods are sloppy in their releases. */ ACPI_STATUS AcpiOsWaitSemaphore(ACPI_HANDLE handle, UINT32 Units, UINT16 Timeout) { sem_info *sem = (sem_info *)handle; struct timespec tm; struct sigaction sa; if (!handle) return AE_BAD_PARAMETER; switch (Timeout) { case 0: if (sem_trywait(&sem->sem)) return AE_TIME; break; case ACPI_WAIT_FOREVER: /* * The semantics are "wait forever", but * really we actually detect a lock up * after a long wait and break out rather * than waiting for the sun to turn into * a lump of coal. This allows us to * handle controls such as _EJ0 that may * be waiting forever for a event to signal * control to continue. It is evil. */ sa.sa_handler = sem_alarm; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sigaction(SIGALRM, &sa, NULL); alarm(MAX_WAIT_TIMEOUT); if (sem_wait(&sem->sem)) { alarm(0); if (errno == EINTR) fwts_log_info(fwts_acpica_fw, "AML was blocked waiting for " "an external event, fwts detected " "this and forced a timeout after " "%d seconds on a Wait() that had " "an indefinite timeout.", MAX_WAIT_TIMEOUT); return AE_TIME; } alarm(0); break; default: tm.tv_sec = Timeout / 1000; tm.tv_nsec = (Timeout - (tm.tv_sec * 1000)) * 1000000; if (sem_timedwait(&sem->sem, &tm)) return AE_TIME; break; } pthread_mutex_lock(&mutex_lock_sem_table); sem->count++; pthread_mutex_unlock(&mutex_lock_sem_table); return AE_OK; } /* * AcpiOsSignalSemaphore() * Override ACPICA AcpiOsSignalSemaphore to keep track of semaphore releases * so that we can see if any methods are sloppy in their releases. */ ACPI_STATUS AcpiOsSignalSemaphore(ACPI_HANDLE handle, UINT32 Units) { sem_info *sem = (sem_info *)handle; if (!handle) return AE_BAD_PARAMETER; if (sem_post(&sem->sem) < 0) return AE_LIMIT; pthread_mutex_lock(&mutex_lock_sem_table); sem->count--; pthread_mutex_unlock(&mutex_lock_sem_table); return AE_OK; } /* * AcpiOsReadPort() * Override ACPICA AcpiOsReadPort to fake port reads */ ACPI_STATUS AcpiOsReadPort(ACPI_IO_ADDRESS addr, UINT32 *value, UINT32 width) { switch (width) { case 8: *value = 0xFF; break; case 16: *value = 0xFFFF; break; case 32: *value = 0xFFFFFFFF; break; default: return AE_BAD_PARAMETER; } return AE_OK; } typedef struct { pthread_callback func; void * context; int thread_index; } fwts_func_wrapper_context; /* * fwts_pthread_func_wrapper() * wrap the AcpiOsExecute function so we can mark the thread * accounting free once the function has completed. */ void *fwts_pthread_func_wrapper(fwts_func_wrapper_context *ctx) { void *ret; ret = ctx->func(ctx->context); pthread_mutex_lock(&mutex_thread_info); threads[ctx->thread_index].used = false; pthread_mutex_unlock(&mutex_thread_info); free(ctx); return ret; } ACPI_STATUS AcpiOsExecute( ACPI_EXECUTE_TYPE type, ACPI_OSD_EXEC_CALLBACK function, void *func_context) { int ret; int i; pthread_mutex_lock(&mutex_thread_info); /* Find a free slot to do per-thread join tracking */ for (i = 0; i < MAX_THREADS; i++) { if (!threads[i].used) { fwts_func_wrapper_context *ctx; /* We need some context to pass through to the thread wrapper */ if ((ctx = malloc(sizeof(fwts_func_wrapper_context))) == NULL) { pthread_mutex_unlock(&mutex_thread_info); return AE_NO_MEMORY; } ctx->func = (pthread_callback)function; ctx->context = func_context; ctx->thread_index = i; threads[i].used = true; ret = pthread_create(&threads[i].thread, NULL, (pthread_callback)fwts_pthread_func_wrapper, ctx); pthread_mutex_unlock(&mutex_thread_info); if (ret) return AE_ERROR; return AE_OK; } } /* No free slots, failed! */ pthread_mutex_unlock(&mutex_thread_info); return AE_NO_MEMORY; } /* * AcpiOsReadPciConfiguration() * Override ACPICA AcpiOsReadPciConfiguration to fake PCI reads */ ACPI_STATUS AcpiOsReadPciConfiguration(ACPI_PCI_ID *pciid, UINT32 reg, UINT64 *value, UINT32 width) { switch (width) { case 8: *value = 0x00; break; case 16: *value = 0x0000; break; case 32: *value = 0x00000000; break; default: return AE_BAD_PARAMETER; } return AE_OK; } void AeTableOverride(ACPI_TABLE_HEADER *ExistingTable, ACPI_TABLE_HEADER **NewTable) { if (strncmp(ExistingTable->Signature, ACPI_SIG_DSDT, 4) == 0) *NewTable = (ACPI_TABLE_HEADER*)fwts_acpica_DSDT; } ACPI_STATUS AcpiOsSignal(UINT32 function, void *info) { switch (function) { case ACPI_SIGNAL_BREAKPOINT: fwts_warning(fwts_acpica_fw, "Method contains an ACPICA breakpoint: %s\n", info ? (char*)info : "No Information"); AcpiGbl_CmSingleStep = FALSE; break; case ACPI_SIGNAL_FATAL: default: break; } return AE_OK; } void AcpiOsSleep(UINT64 milliseconds) { } static void fwtsOverrideRegionHandlers(fwts_framework *fw) { int i; static const ACPI_ADR_SPACE_TYPE fwts_default_space_id_list[] = { ACPI_ADR_SPACE_SYSTEM_MEMORY, ACPI_ADR_SPACE_SYSTEM_IO, ACPI_ADR_SPACE_PCI_CONFIG, ACPI_ADR_SPACE_EC }; for (i = 0; i < ACPI_ARRAY_LENGTH(fwts_default_space_id_list); i++) { /* Install handler at the root object */ ACPI_STATUS status; status = AcpiInstallAddressSpaceHandler(ACPI_ROOT_OBJECT, fwts_default_space_id_list[i], fwts_region_handler, fwts_region_init, NULL); if ((status != AE_OK) && (status != AE_SAME_HANDLER)) { fwts_log_error(fw, "Failed to install an OpRegion handler for %s space(%u)", AcpiUtGetRegionName((UINT8)fwts_default_space_id_list[i]), fwts_default_space_id_list[i]); } } } static int fwtsInstallEarlyHandlers(fwts_framework *fw) { ACPI_HANDLE handle; if (AcpiInstallInterfaceHandler(fwts_interface_handler) != AE_OK) { fwts_log_error(fw, "Failed to install interface handler."); return FWTS_ERROR; } if (AcpiInstallTableHandler(fwts_table_handler, NULL) != AE_OK) { fwts_log_error(fw, "Failed to install table handler."); return FWTS_ERROR; } if (AcpiInstallExceptionHandler(fwts_exception_handler) != AE_OK) { fwts_log_error(fw, "Failed to install exception handler."); return FWTS_ERROR; } if (AcpiInstallNotifyHandler(ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY, fwts_notify_handler, NULL) != AE_OK) { fwts_log_error(fw, "Failed to install system notify handler."); return FWTS_ERROR; } if (AcpiInstallNotifyHandler(ACPI_ROOT_OBJECT, ACPI_DEVICE_NOTIFY, fwts_device_notify_handler, NULL) != AE_OK) { fwts_log_error(fw, "Failed to install device notify handler."); return FWTS_ERROR; } if (AcpiGetHandle(NULL, "\\_SB", &handle) == AE_OK) { if (AcpiInstallNotifyHandler(handle, ACPI_SYSTEM_NOTIFY, fwts_notify_handler, NULL) != AE_OK) { fwts_log_error(fw, "Failed to install notify handler."); return FWTS_ERROR; } if (AcpiRemoveNotifyHandler(handle, ACPI_SYSTEM_NOTIFY, fwts_notify_handler) != AE_OK) { fwts_log_error(fw, "Failed to remove notify handler."); return FWTS_ERROR; } if (AcpiInstallNotifyHandler(handle, ACPI_ALL_NOTIFY, fwts_notify_handler, NULL) != AE_OK) { fwts_log_error(fw, "Failed to install notify handler."); return FWTS_ERROR; } if (AcpiRemoveNotifyHandler(handle, ACPI_ALL_NOTIFY, fwts_notify_handler) != AE_OK) { fwts_log_error(fw, "Failed to remove notify handler."); return FWTS_ERROR; } if (AcpiInstallNotifyHandler(handle, ACPI_ALL_NOTIFY, fwts_notify_handler, NULL) != AE_OK) { fwts_log_error(fw, "Failed to install notify handler."); return FWTS_ERROR; } if (AcpiAttachData(handle, fwts_attached_data_handler, handle) != AE_OK) { fwts_log_error(fw, "Failed to attach data handler."); return FWTS_ERROR; } if (AcpiDetachData(handle, fwts_attached_data_handler) != AE_OK) { fwts_log_error(fw, "Failed to detach data handler."); return FWTS_ERROR; } if (AcpiAttachData(handle, fwts_attached_data_handler, handle) != AE_OK) { fwts_log_error(fw, "Failed to attach data handler."); return FWTS_ERROR; } } fwtsOverrideRegionHandlers(fw); return FWTS_OK; } static int fwtsInstallLateHandlers(fwts_framework *fw) { int i; ACPI_STATUS status; static ACPI_ADR_SPACE_TYPE fwts_space_id_list[] = { ACPI_ADR_SPACE_SYSTEM_MEMORY, ACPI_ADR_SPACE_SYSTEM_IO, ACPI_ADR_SPACE_EC, ACPI_ADR_SPACE_SMBUS, ACPI_ADR_SPACE_CMOS, ACPI_ADR_SPACE_GSBUS, ACPI_ADR_SPACE_GPIO, ACPI_ADR_SPACE_PCI_BAR_TARGET, ACPI_ADR_SPACE_IPMI, ACPI_ADR_SPACE_FIXED_HARDWARE, ACPI_ADR_SPACE_USER_DEFINED1, ACPI_ADR_SPACE_USER_DEFINED2 }; for (i = 0; i < ACPI_ARRAY_LENGTH(fwts_space_id_list); i++) { status = AcpiInstallAddressSpaceHandler(ACPI_ROOT_OBJECT, fwts_space_id_list[i], fwts_region_handler, fwts_region_init, NULL); if ((status != AE_OK) && (status != AE_SAME_HANDLER)) { fwts_log_error(fw, "Failed to install an OpRegion handler for %s space(%u)", AcpiUtGetRegionName((UINT8)fwts_space_id_list[i]), fwts_space_id_list[i]); return FWTS_ERROR; } } if (!AcpiGbl_ReducedHardware) { status = AcpiInstallFixedEventHandler(ACPI_EVENT_GLOBAL, fwts_event_handler, NULL); if ((status != AE_OK) && (status != AE_SAME_HANDLER)) { fwts_log_error(fw, "Failed to install global event handler."); return FWTS_ERROR; } status = AcpiInstallFixedEventHandler(ACPI_EVENT_RTC, fwts_event_handler, NULL); if ((status != AE_OK) && (status != AE_SAME_HANDLER)) { fwts_log_error(fw, "Failed to install RTC event handler."); return FWTS_ERROR; } } return FWTS_OK; } /* * fwts_acpica_verify_table_get() * fetch a named table with some sanity checks, helper * function for fwts_acpica_verify_facp_table_pointers(). * Note: table is never NULL */ static int fwts_acpica_verify_table_get( fwts_framework *fw, const char *name, fwts_acpi_table_info **table) { if (fwts_acpi_find_table(fw, name, 0, table) != FWTS_OK) { fwts_log_error(fw, "Failed to find ACPI table '%s'.", name); return FWTS_ERROR; } if (!(*table)) { /* The load may have failed to find this table */ fwts_log_error(fw, "Missing ACPI table '%s' and " "the FACP points to it.", name); return FWTS_ERROR; } if ((*table)->data == NULL) { /* This really should not happen */ fwts_log_error(fw, "ACPI table %s had a NULL address " "which is unexpected.", name); return FWTS_ERROR; } return FWTS_OK; } /* * fwts_acpica_verify_facp_table_pointers() * verify facp points to tables that actually exist * Note: if they don't exist then ACPICA segfaults */ static int fwts_acpica_verify_facp_table_pointers(fwts_framework *fw) { fwts_acpi_table_info *table; fwts_acpi_table_fadt *fadt; if (fwts_acpica_verify_table_get(fw, "FACP", &table) != FWTS_OK) return FWTS_ERROR; fadt = (fwts_acpi_table_fadt *)table->data; if (fadt->dsdt || fadt->x_dsdt) { if (fwts_acpica_verify_table_get(fw, "DSDT", &table) != FWTS_OK) return FWTS_ERROR; if (((uint64_t)fadt->dsdt != table->addr) && (fadt->x_dsdt != table->addr)) { fwts_log_error(fw, "FACP points to non-existent DSDT."); return FWTS_ERROR; } } if (fadt->firmware_control || fadt->x_firmware_ctrl) { if (fwts_acpica_verify_table_get(fw, "FACS", &table) != FWTS_OK) return FWTS_ERROR; if (((uint64_t)fadt->firmware_control != table->addr) && (fadt->x_firmware_ctrl != table->addr)) { fwts_log_error(fw, "FACP points to non-existent FACS."); return FWTS_ERROR; } } return FWTS_OK; } /* * fwts_acpica_set_fwts_framework() * set fwts_acpica_fw ptr */ void fwts_acpica_set_fwts_framework(fwts_framework *fw) { fwts_acpica_fw = fw; } #define FWTS_ACPICA_MODE(fw, mode) \ (((fw->acpica_mode & mode) == mode) ? 1 : 0) /* * fwts_acpica_init() * Initialise ACPICA core engine */ int fwts_acpica_init(fwts_framework *fw) { int i; int n; UINT32 init_flags = ACPI_FULL_INITIALIZATION; fwts_acpi_table_info *table; /* Abort if already initialised */ if (fwts_acpica_init_called) return FWTS_ERROR; AcpiGbl_AutoSerializeMethods = FWTS_ACPICA_MODE(fw, FWTS_ACPICA_MODE_SERIALIZED); AcpiGbl_EnableInterpreterSlack = FWTS_ACPICA_MODE(fw, FWTS_ACPICA_MODE_SLACK); AcpiGbl_IgnoreErrors = FWTS_ACPICA_MODE(fw, FWTS_ACPICA_MODE_IGNORE_ERRORS); AcpiGbl_DisableAutoRepair = FWTS_ACPICA_MODE(fw, FWTS_ACPICA_MODE_DISABLE_AUTO_REPAIR); AcpiGbl_CstyleDisassembly = FALSE; pthread_mutex_init(&mutex_lock_sem_table, NULL); pthread_mutex_init(&mutex_thread_info, NULL); fwts_acpica_set_fwts_framework(fw); AcpiDbgLevel = ACPI_NORMAL_DEFAULT; AcpiDbgLayer = 0x00000000; AcpiOsRedirectOutput(stderr); /* Clone FADT, make sure it points to a DSDT in user space */ if (fwts_acpi_find_table(fw, "FACP", 0, &table) != FWTS_OK) return FWTS_ERROR; if (table != NULL) { fwts_acpi_table_info *tbl; fwts_acpica_FADT = fwts_low_calloc(1, table->length); if (fwts_acpica_FADT == NULL) { fwts_log_error(fw, "Out of memory allocating FADT."); return FWTS_ERROR; } memcpy(fwts_acpica_FADT, table->data, table->length); if (fwts_acpi_find_table(fw, "DSDT", 0, &tbl) != FWTS_OK) return FWTS_ERROR; if (tbl) { fwts_acpica_DSDT = (void *)tbl->data; fwts_acpica_FADT->Dsdt = ACPI_PTR_TO_PHYSADDR(tbl->data); if (table->length >= 148) fwts_acpica_FADT->XDsdt = ACPI_PTR_TO_PHYSADDR(tbl->data); } else { fwts_acpica_DSDT = NULL; fwts_acpica_FADT->Dsdt = 0; fwts_acpica_FADT->XDsdt = 0; } if (fwts_acpi_find_table(fw, "FACS", 0, &tbl) != FWTS_OK) return FWTS_ERROR; if (tbl) { fwts_acpica_FADT->Facs = ACPI_PTR_TO_PHYSADDR(tbl->data); if (table->length >= 140) fwts_acpica_FADT->XFacs = ACPI_PTR_TO_PHYSADDR(tbl->data); } else { fwts_acpica_FADT->Facs = 0; fwts_acpica_FADT->XFacs = 0; } fwts_acpica_FADT->Header.Checksum = 0; fwts_acpica_FADT->Header.Checksum = (UINT8)-AcpiUtChecksum ((void*)fwts_acpica_FADT, table->length); } else { fwts_acpica_FADT = NULL; } if (fwts_acpica_verify_facp_table_pointers(fw) != FWTS_OK) return FWTS_ERROR; /* Clone XSDT, make it point to tables in user address space */ if (fwts_acpi_find_table(fw, "XSDT", 0, &table) != FWTS_OK) return FWTS_ERROR; if (table != NULL) { uint64_t *entries; int j; fwts_acpica_XSDT = fwts_low_calloc(1, table->length); if (fwts_acpica_XSDT == NULL) { fwts_log_error(fw, "Out of memory allocating XSDT."); return FWTS_ERROR; } memcpy(fwts_acpica_XSDT, table->data, sizeof(ACPI_TABLE_HEADER)); n = (table->length - sizeof(ACPI_TABLE_HEADER)) / sizeof(uint64_t); entries = (uint64_t*)(table->data + sizeof(ACPI_TABLE_HEADER)); for (i = 0, j = 0; i < n; i++) { fwts_acpi_table_info *tbl; if (fwts_acpi_find_table_by_addr(fw, entries[i], &tbl) != FWTS_OK) return FWTS_ERROR; if (tbl) { if (strncmp(tbl->name, "RSDP", 4) == 0) continue; if (strncmp(tbl->name, "FACP", 4) == 0) { fwts_acpica_XSDT->TableOffsetEntry[j++] = ACPI_PTR_TO_PHYSADDR(fwts_acpica_FADT); } else { fwts_acpica_XSDT->TableOffsetEntry[j++] = ACPI_PTR_TO_PHYSADDR(tbl->data); } } } fwts_acpica_XSDT->Header.Checksum = 0; fwts_acpica_XSDT->Header.Checksum = (UINT8)-AcpiUtChecksum ((void*)fwts_acpica_XSDT, table->length); } else { fwts_acpica_XSDT = NULL; } /* Clone RSDT, make it point to tables in user address space */ if (fwts_acpi_find_table(fw, "RSDT", 0, &table) != FWTS_OK) return FWTS_ERROR; if (table) { uint32_t *entries; int j; fwts_acpica_RSDT = fwts_low_calloc(1, table->length); if (fwts_acpica_RSDT == NULL) { fwts_log_error(fw, "Out of memory allocating RSDT."); return FWTS_ERROR; } memcpy(fwts_acpica_RSDT, table->data, sizeof(ACPI_TABLE_HEADER)); n = (table->length - sizeof(ACPI_TABLE_HEADER)) / sizeof(uint32_t); entries = (uint32_t*)(table->data + sizeof(ACPI_TABLE_HEADER)); for (i = 0, j = 0; i < n; i++) { fwts_acpi_table_info *tbl; if (fwts_acpi_find_table_by_addr(fw, entries[i], &tbl) != FWTS_OK) return FWTS_ERROR; if (tbl) { if (strncmp(tbl->name, "RSDP", 4) == 0) continue; if (strncmp(tbl->name, "FACP", 4) == 0) { fwts_acpica_RSDT->TableOffsetEntry[j++] = ACPI_PTR_TO_PHYSADDR(fwts_acpica_FADT); } else { fwts_acpica_RSDT->TableOffsetEntry[j++] = ACPI_PTR_TO_PHYSADDR(tbl->data); } } } fwts_acpica_RSDT->Header.Checksum = 0; fwts_acpica_RSDT->Header.Checksum = (UINT8)-AcpiUtChecksum ((void*)fwts_acpica_RSDT, table->length); } else { fwts_acpica_RSDT = NULL; } /* Clone RSDP, make it point to tables in user address space */ if (fwts_acpi_find_table(fw, "RSDP", 0, &table) != FWTS_OK) return FWTS_ERROR; if (table) { fwts_acpica_RSDP = fwts_low_calloc(1, table->length); if (fwts_acpica_RSDP == NULL) { fwts_log_error(fw, "Out of memory allocating RSDP."); return FWTS_ERROR; } memcpy(fwts_acpica_RSDP, table->data, table->length); if (table->length > 20) fwts_acpica_RSDP->XsdtPhysicalAddress = ACPI_PTR_TO_PHYSADDR(fwts_acpica_XSDT); fwts_acpica_RSDP->RsdtPhysicalAddress = ACPI_PTR_TO_PHYSADDR(fwts_acpica_RSDT); fwts_acpica_RSDP->Checksum = (UINT8)-AcpiUtChecksum ((void*)fwts_acpica_RSDP, ACPI_RSDP_CHECKSUM_LENGTH); } else { fwts_acpica_RSDP = NULL; } if (ACPI_FAILURE(AcpiInitializeSubsystem())) { fwts_log_error(fw, "Failed to initialise ACPICA subsystem."); goto failed; } #if 0 if (ACPI_FAILURE(AcpiInitializeDebugger())) { fwts_log_error(fw, "Failed to initialise ACPICA subsystem."); goto failed; } #endif if (AcpiInitializeTables(Tables, ACPI_MAX_INIT_TABLES, TRUE) != AE_OK) { fwts_log_error(fw, "Failed to initialise tables."); goto failed; } if (fwtsInstallEarlyHandlers(fw) != FWTS_OK) { fwts_log_error(fw, "Failed to install early handlers."); goto failed; } if (ACPI_FAILURE(AcpiReallocateRootTable())) { fwts_log_error(fw, "Failed to reallocate root table."); goto failed; } init_flags = (ACPI_NO_HANDLER_INIT | ACPI_NO_ACPI_ENABLE | ACPI_NO_DEVICE_INIT | ACPI_NO_OBJECT_INIT); AcpiGbl_MaxLoopIterations = 0x10; if (ACPI_FAILURE(AcpiEnableSubsystem(init_flags))) { fwts_log_error(fw, "Failed to enable ACPI subsystem."); goto failed; } if (ACPI_FAILURE(AcpiLoadTables() != AE_OK)) { fwts_log_error(fw, "Failed to load tables."); goto failed; } if (fwtsInstallLateHandlers(fw) != FWTS_OK) { fwts_log_error(fw, "Failed to install late handlers."); goto failed; } if (ACPI_FAILURE(AcpiInitializeObjects(init_flags))) { fwts_log_error(fw, "Failed to initialize ACPI objects."); goto failed; } fwts_acpica_init_called = true; return FWTS_OK; failed: AcpiTerminate(); return FWTS_ERROR; } #define FWTS_ACPICA_FREE(x) \ { fwts_low_free(x); x = NULL; } /* * fwts_acpica_deinit() * De-initialise ACPICA core engine */ int fwts_acpica_deinit(void) { if (!fwts_acpica_init_called) return FWTS_ERROR; AcpiTerminate(); pthread_mutex_destroy(&mutex_lock_sem_table); pthread_mutex_destroy(&mutex_thread_info); FWTS_ACPICA_FREE(fwts_acpica_XSDT); FWTS_ACPICA_FREE(fwts_acpica_RSDT); FWTS_ACPICA_FREE(fwts_acpica_RSDP); FWTS_ACPICA_FREE(fwts_acpica_FADT); fwts_acpica_init_called = false; return FWTS_OK; } /* * fwts_acpi_walk_for_object_names() * append to list (passed in context) objects names that match a given * type, (callback from fwts_acpica_get_object_names()) * */ static ACPI_STATUS fwts_acpi_walk_for_object_names( ACPI_HANDLE objHandle, UINT32 nestingLevel, void *context, void **ret) { fwts_list *list = (fwts_list*)context; ACPI_BUFFER buffer; char tmpbuf[1024]; buffer.Pointer = tmpbuf; buffer.Length = sizeof(tmpbuf); if (!ACPI_FAILURE(AcpiNsHandleToPathname(objHandle, &buffer, FALSE))) fwts_list_append(list, strdup((char *)buffer.Pointer)); return AE_OK; } /* * fwts_acpica_get_object_names() * fetch a list of object names that match a specified type */ fwts_list *fwts_acpica_get_object_names(const int type) { fwts_list *list; if ((list = fwts_list_new()) != NULL) AcpiWalkNamespace(type, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, fwts_acpi_walk_for_object_names, NULL, list, NULL); return list; } src/libfwtsiasl/000077500000000000000000000000001465205512700141775ustar00rootroot00000000000000src/libfwtsiasl/Makefile.am000066400000000000000000000357021465205512700162420ustar00rootroot00000000000000# # Copyright (C) 2011-2024 Canonical, Ltd. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # # We need to build this as a separate shared library with the iasl functionality built in. We # just export the fwts_* interface. # AUTOMAKE_OPTIONS = subdir-objects AM_CPPFLAGS = -Wall -Wstrict-prototypes \ -fno-strict-aliasing \ -D_LINUX \ -DACPI_ASL_COMPILER $(CFLAGS) \ -I$(top_srcdir)/src/acpica/source/include \ -I$(top_srcdir)/src/acpica/source/compiler AM_YFLAGS = -d # # Case in-sensitive scanning # AM_LFLAGS = -i ASL_PARSER = \ ../../src/acpica/source/compiler/aslcstyle.y \ ../../src/acpica/source/compiler/aslhelpers.y \ ../../src/acpica/source/compiler/aslparser.y \ ../../src/acpica/source/compiler/aslprimaries.y \ ../../src/acpica/source/compiler/aslresources.y \ ../../src/acpica/source/compiler/aslrules.y \ ../../src/acpica/source/compiler/aslsupport.y \ ../../src/acpica/source/compiler/asltokens.y \ ../../src/acpica/source/compiler/asltypes.y ASL_LEXER = ../../src/acpica/source/compiler/aslcompiler.l \ aslsupport.l \ aslcompiler.y.h aslcompiler.y: $(ASL_PARSER) m4 -P -I$(top_srcdir)/src/acpica/source/compiler $(top_srcdir)/src/acpica/source/compiler/aslparser.y > aslcompiler.y aslcompilerlex.c: $(ASL_LEXER) ${LEX} ${AM_LFLAGS} -PAslCompiler -o$@ $(top_srcdir)/src/acpica/source/compiler/aslcompiler.l aslcompiler.c: aslcompiler.y ${YACC} ${AM_YFLAGS} -d -baslcompiler -pAslCompiler $^ mv aslcompiler.tab.c aslcompiler.c cp aslcompiler.tab.h aslcompiler.y.h aslcompiler.y.h: aslcompiler.c dtcompilerparserlex.c: $(top_srcdir)/src/acpica/source/compiler/dtcompilerparser.l $(top_srcdir)/src/acpica/source/compiler/dtcompilerparser.y ${LEX} ${AM_LFLAGS} -PDtCompilerParser -odtcompilerparserlex.c $< ${YACC} ${AM_YFLAGS} -bdtcompilerparser -pDtCompilerParser $(top_srcdir)/src/acpica/source/compiler/dtcompilerparser.y mv dtcompilerparser.tab.c dtcompilerparser.c cp dtcompilerparser.tab.h dtcompilerparser.y.h dtcompilerparser.c dtcompilerparser.y.h: dtcompilerparserlex.c dtparserlex.c: $(top_srcdir)/src/acpica/source/compiler/dtparser.l $(top_srcdir)/src/acpica/source/compiler/dtparser.y ${LEX} ${AM_LFLAGS} -PDtParser -odtparserlex.c $< ${YACC} ${AM_YFLAGS} -bdtparser -pDtParser $(top_srcdir)/src/acpica/source/compiler/dtparser.y mv dtparser.tab.c dtparser.c cp dtparser.tab.h dtparser.y.h dtparser.c dtparser.y.h: dtparserlex.c prparserlex.c: $(top_srcdir)/src/acpica/source/compiler/prparser.l $(top_srcdir)/src/acpica/source/compiler/prparser.y ${LEX} ${AM_LFLAGS} -PPrParser -oprparserlex.c $< ${YACC} ${AM_YFLAGS} -bprparser -pPrParser $(top_srcdir)/src/acpica/source/compiler/prparser.y mv prparser.tab.c prparser.c cp prparser.tab.h prparser.y.h prparser.c prparser.y.h: prparserlex.c pkglib_LTLIBRARIES = libfwtsiasl.la BUILT_SOURCES = aslcompiler.y \ aslcompiler.y.h \ aslcompilerlex.c \ aslcompiler.c \ dtcompilerparser.y.h \ dtcompilerparserlex.c \ dtcompilerparser.c \ dtparser.y.h \ dtparserlex.c \ dtparser.c \ prparser.y.h \ prparserlex.c \ prparser.c # # Just export fwts specific API so we don't clash with core ACPICA library # libfwtsiasl_la_LDFLAGS = -export-symbols-regex "fwts_.*" -version-info 1:0:0 libfwtsiasl_la_LIBADD = -lpthread CLEANFILES = $(BUILT_SOURCES) libfwtsiasl_la_CPPFLAGS = $(AM_CPPFLAGS) libfwtsiasl_la_SOURCES = \ fwts_iasl_interface.c \ aslcompilerlex.c \ aslcompiler.c \ dtcompilerparserlex.c \ dtcompilerparser.c \ dtparserlex.c \ dtparser.c \ prparserlex.c \ prparser.c \ ../../src/acpica/source/common/adisasm.c \ ../../src/acpica/source/common/acfileio.c \ ../../src/acpica/source/common/adfile.c \ ../../src/acpica/source/common/adwalk.c \ ../../src/acpica/source/common/ahids.c \ ../../src/acpica/source/common/ahpredef.c \ ../../src/acpica/source/common/ahtable.c \ ../../src/acpica/source/common/ahuuids.c \ ../../src/acpica/source/compiler/aslallocate.c \ ../../src/acpica/source/compiler/aslanalyze.c \ ../../src/acpica/source/compiler/aslascii.c \ ../../src/acpica/source/compiler/aslbtypes.c \ ../../src/acpica/source/compiler/aslcache.c \ ../../src/acpica/source/compiler/aslcodegen.c \ ../../src/acpica/source/compiler/aslcompile.c \ ../../src/acpica/source/compiler/asldebug.c \ ../../src/acpica/source/compiler/aslerror.c \ ../../src/acpica/source/compiler/aslexternal.c \ ../../src/acpica/source/compiler/aslfiles.c \ ../../src/acpica/source/compiler/aslfileio.c \ ../../src/acpica/source/compiler/aslfold.c \ ../../src/acpica/source/compiler/aslhelp.c \ ../../src/acpica/source/compiler/aslhex.c \ ../../src/acpica/source/compiler/asllength.c \ ../../src/acpica/source/compiler/asllisting.c \ ../../src/acpica/source/compiler/asllistsup.c \ ../../src/acpica/source/compiler/aslload.c \ ../../src/acpica/source/compiler/asllookup.c \ ../../src/acpica/source/compiler/aslmain.c \ ../../src/acpica/source/compiler/aslmap.c \ ../../src/acpica/source/compiler/aslmapenter.c \ ../../src/acpica/source/compiler/aslmapoutput.c \ ../../src/acpica/source/compiler/aslmaputils.c \ ../../src/acpica/source/compiler/aslmessages.c \ ../../src/acpica/source/compiler/aslmethod.c \ ../../src/acpica/source/compiler/aslnamesp.c \ ../../src/acpica/source/compiler/asloffset.c \ ../../src/acpica/source/compiler/aslopcodes.c \ ../../src/acpica/source/compiler/asloperands.c \ ../../src/acpica/source/compiler/aslopt.c \ ../../src/acpica/source/compiler/asloptions.c \ ../../src/acpica/source/compiler/aslparseop.c \ ../../src/acpica/source/compiler/aslpredef.c \ ../../src/acpica/source/compiler/aslprepkg.c \ ../../src/acpica/source/compiler/aslprintf.c \ ../../src/acpica/source/compiler/aslprune.c \ ../../src/acpica/source/compiler/aslresource.c \ ../../src/acpica/source/compiler/aslrestype1.c \ ../../src/acpica/source/compiler/aslrestype1i.c \ ../../src/acpica/source/compiler/aslrestype2.c \ ../../src/acpica/source/compiler/aslrestype2d.c \ ../../src/acpica/source/compiler/aslrestype2e.c \ ../../src/acpica/source/compiler/aslrestype2q.c \ ../../src/acpica/source/compiler/aslrestype2s.c \ ../../src/acpica/source/compiler/aslrestype2w.c \ ../../src/acpica/source/compiler/aslstartup.c \ ../../src/acpica/source/compiler/aslstubs.c \ ../../src/acpica/source/compiler/aslpld.c \ ../../src/acpica/source/compiler/asltransform.c \ ../../src/acpica/source/compiler/asltree.c \ ../../src/acpica/source/compiler/aslutils.c \ ../../src/acpica/source/compiler/asluuid.c \ ../../src/acpica/source/compiler/aslwalks.c \ ../../src/acpica/source/compiler/aslxref.c \ ../../src/acpica/source/compiler/aslxrefout.c \ ../../src/acpica/source/compiler/cvcompiler.c \ ../../src/acpica/source/compiler/cvdisasm.c \ ../../src/acpica/source/compiler/cvparser.c \ ../../src/acpica/source/common/cmfsize.c \ ../../src/acpica/source/components/debugger/dbfileio.c \ ../../src/acpica/source/components/disassembler/dmbuffer.c \ ../../src/acpica/source/components/disassembler/dmcstyle.c \ ../../src/acpica/source/components/disassembler/dmdeferred.c \ ../../src/acpica/source/common/dmextern.c \ ../../src/acpica/source/components/disassembler/dmnames.c \ ../../src/acpica/source/components/disassembler/dmopcode.c \ ../../src/acpica/source/components/disassembler/dmresrc.c \ ../../src/acpica/source/components/disassembler/dmresrcl.c \ ../../src/acpica/source/components/disassembler/dmresrcl2.c \ ../../src/acpica/source/components/disassembler/dmresrcs.c \ ../../src/acpica/source/common/dmrestag.c \ ../../src/acpica/source/common/dmswitch.c \ ../../src/acpica/source/common/dmtable.c \ ../../src/acpica/source/common/dmtables.c \ ../../src/acpica/source/common/dmtbdump.c \ ../../src/acpica/source/common/dmtbdump1.c \ ../../src/acpica/source/common/dmtbdump2.c \ ../../src/acpica/source/common/dmtbdump3.c \ ../../src/acpica/source/common/dmtbinfo.c \ ../../src/acpica/source/common/dmtbinfo1.c \ ../../src/acpica/source/common/dmtbinfo2.c \ ../../src/acpica/source/common/dmtbinfo3.c \ ../../src/acpica/source/components/disassembler/dmutils.c \ ../../src/acpica/source/components/disassembler/dmwalk.c \ ../../src/acpica/source/components/dispatcher/dsargs.c \ ../../src/acpica/source/components/dispatcher/dscontrol.c \ ../../src/acpica/source/components/dispatcher/dsfield.c \ ../../src/acpica/source/components/dispatcher/dsobject.c \ ../../src/acpica/source/components/dispatcher/dsopcode.c \ ../../src/acpica/source/components/dispatcher/dspkginit.c \ ../../src/acpica/source/components/dispatcher/dsutils.c \ ../../src/acpica/source/components/dispatcher/dswexec.c \ ../../src/acpica/source/components/dispatcher/dswload.c \ ../../src/acpica/source/components/dispatcher/dswload2.c \ ../../src/acpica/source/components/dispatcher/dswscope.c \ ../../src/acpica/source/components/dispatcher/dswstate.c \ ../../src/acpica/source/compiler/dtcompile.c \ ../../src/acpica/source/compiler/dtexpress.c \ ../../src/acpica/source/compiler/dtfield.c \ ../../src/acpica/source/compiler/dtio.c \ ../../src/acpica/source/compiler/dtsubtable.c \ ../../src/acpica/source/compiler/dttable.c \ ../../src/acpica/source/compiler/dttable1.c \ ../../src/acpica/source/compiler/dttable2.c \ ../../src/acpica/source/compiler/dttemplate.c \ ../../src/acpica/source/compiler/dtutils.c \ ../../src/acpica/source/components/executer/exconcat.c \ ../../src/acpica/source/components/executer/exconvrt.c \ ../../src/acpica/source/components/executer/excreate.c \ ../../src/acpica/source/components/executer/exdump.c \ ../../src/acpica/source/components/executer/exmisc.c \ ../../src/acpica/source/components/executer/exmutex.c \ ../../src/acpica/source/components/executer/exnames.c \ ../../src/acpica/source/components/executer/exoparg1.c \ ../../src/acpica/source/components/executer/exoparg2.c \ ../../src/acpica/source/components/executer/exoparg3.c \ ../../src/acpica/source/components/executer/exoparg6.c \ ../../src/acpica/source/components/executer/exprep.c \ ../../src/acpica/source/components/executer/exregion.c \ ../../src/acpica/source/components/executer/exresnte.c \ ../../src/acpica/source/components/executer/exresolv.c \ ../../src/acpica/source/components/executer/exresop.c \ ../../src/acpica/source/components/executer/exstore.c \ ../../src/acpica/source/components/executer/exstoren.c \ ../../src/acpica/source/components/executer/exstorob.c \ ../../src/acpica/source/components/executer/exsystem.c \ ../../src/acpica/source/components/executer/exutils.c \ ../../src/acpica/source/common/getopt.c \ ../../src/acpica/source/components/namespace/nsaccess.c \ ../../src/acpica/source/components/namespace/nsalloc.c \ ../../src/acpica/source/components/namespace/nsdump.c \ ../../src/acpica/source/components/namespace/nsnames.c \ ../../src/acpica/source/components/namespace/nsobject.c \ ../../src/acpica/source/components/namespace/nsparse.c \ ../../src/acpica/source/components/namespace/nssearch.c \ ../../src/acpica/source/components/namespace/nsutils.c \ ../../src/acpica/source/components/namespace/nswalk.c \ ../../src/acpica/source/components/namespace/nsxfobj.c \ ../../src/acpica/source/os_specific/service_layers/osunixxf.c \ ../../src/acpica/source/compiler/prexpress.c \ ../../src/acpica/source/compiler/prmacros.c \ ../../src/acpica/source/compiler/prscan.c \ ../../src/acpica/source/compiler/prutils.c \ ../../src/acpica/source/components/parser/psargs.c \ ../../src/acpica/source/components/parser/psloop.c \ ../../src/acpica/source/components/parser/psobject.c \ ../../src/acpica/source/components/parser/psopcode.c \ ../../src/acpica/source/components/parser/psopinfo.c \ ../../src/acpica/source/components/parser/psparse.c \ ../../src/acpica/source/components/parser/psscope.c \ ../../src/acpica/source/components/parser/pstree.c \ ../../src/acpica/source/components/parser/psutils.c \ ../../src/acpica/source/components/parser/pswalk.c \ ../../src/acpica/source/components/tables/tbdata.c \ ../../src/acpica/source/components/tables/tbfadt.c \ ../../src/acpica/source/components/tables/tbinstal.c \ ../../src/acpica/source/components/tables/tbprint.c \ ../../src/acpica/source/components/tables/tbutils.c \ ../../src/acpica/source/components/tables/tbxface.c \ ../../src/acpica/source/components/tables/tbxfload.c \ ../../src/acpica/source/components/utilities/utaddress.c \ ../../src/acpica/source/components/utilities/utalloc.c \ ../../src/acpica/source/components/utilities/utascii.c \ ../../src/acpica/source/components/utilities/utbuffer.c \ ../../src/acpica/source/components/utilities/utcache.c \ ../../src/acpica/source/components/utilities/utcopy.c \ ../../src/acpica/source/components/utilities/utdebug.c \ ../../src/acpica/source/components/utilities/utdecode.c \ ../../src/acpica/source/components/utilities/utdelete.c \ ../../src/acpica/source/components/utilities/uterror.c \ ../../src/acpica/source/components/utilities/utexcep.c \ ../../src/acpica/source/components/utilities/utglobal.c \ ../../src/acpica/source/components/utilities/uthex.c \ ../../src/acpica/source/components/utilities/utinit.c \ ../../src/acpica/source/components/utilities/utlock.c \ ../../src/acpica/source/components/utilities/utmath.c \ ../../src/acpica/source/components/utilities/utmisc.c \ ../../src/acpica/source/components/utilities/utmutex.c \ ../../src/acpica/source/components/utilities/utnonansi.c \ ../../src/acpica/source/components/utilities/utobject.c \ ../../src/acpica/source/components/utilities/utownerid.c \ ../../src/acpica/source/components/utilities/utpredef.c \ ../../src/acpica/source/components/utilities/utresdecode.c \ ../../src/acpica/source/components/utilities/utresrc.c \ ../../src/acpica/source/components/utilities/utstate.c \ ../../src/acpica/source/components/utilities/utstrtoul64.c \ ../../src/acpica/source/components/utilities/utstrsuppt.c \ ../../src/acpica/source/components/utilities/utstring.c \ ../../src/acpica/source/components/utilities/utuuid.c \ ../../src/acpica/source/components/utilities/utxface.c \ ../../src/acpica/source/components/utilities/utxferror.c \ ../../src/acpica/source/components/utilities/utcksum.c -include ../../git.mk src/libfwtsiasl/fwts_iasl_interface.c000066400000000000000000000155111465205512700203610ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include "fwts_iasl_interface.h" #include "aslcompiler.h" #include "acdisasm.h" #include "acapps.h" static void AslInitialize(void) { AcpiGbl_DmOpt_Verbose = FALSE; /* Default integer width is 32 bits */ AcpiGbl_IntegerBitWidth = 32; AcpiGbl_IntegerNybbleWidth = 8; AcpiGbl_IntegerByteWidth = 4; AdInitialize(); } /* * init_asl_core() * initialize iasl */ static void init_asl_core(void) { AcpiOsInitialize(); ACPI_DEBUG_INITIALIZE(); AcpiGbl_ExternalFileList = NULL; AcpiDbgLevel = 0; PrInitializePreprocessor(); AslInitialize(); AslGbl_LineBufferSize = 1024; AslGbl_CurrentLineBuffer = NULL; AslGbl_MainTokenBuffer = NULL; UtExpandLineBuffers(); } /* * fwts_iasl_disassemble_aml() * invoke iasl to disassemble AML */ int fwts_iasl_disassemble_aml( char *tables[], char *names[], const int table_entries, const int which, const bool use_externals, const char *outputfile) { pid_t pid; int status; FILE *fpout, *fperr; fflush(stdout); fflush(stderr); pid = fork(); switch (pid) { case -1: return -1; case 0: /* Child */ init_asl_core(); /* Setup ACPICA disassembler globals */ AslGbl_WarningLevel = ASL_WARNING3; AslGbl_IgnoreErrors = TRUE; AcpiGbl_DisasmFlag = TRUE; AslGbl_DoCompile = FALSE; AslGbl_OutputFilenamePrefix = (char*)outputfile; AslGbl_UseDefaultAmlFilename = FALSE; AcpiGbl_CstyleDisassembly = FALSE; AcpiGbl_DmOpt_Verbose = FALSE; AslGbl_ParserErrorDetected = FALSE; UtConvertBackslashes (AslGbl_OutputFilenamePrefix); /* Do we need to include external tables in? */ if (use_externals) { int i; /* * Add in external SSDT files and NOT the one we want * disassemble */ for (i = 0; i < table_entries; i++) { if ((i != which) && (names[i] != NULL) && (tables[i] != NULL) && (!strcmp(names[i], "SSDT") || !strcmp(names[i], "DSDT"))) { ACPI_STATUS acpi_status; /* * Add in external tables that are NOT the table * we intent to disassemble */ acpi_status = AcpiDmAddToExternalFileList(tables[i]); if (ACPI_FAILURE(acpi_status)) { (void)unlink(outputfile); _exit(1); } } } } /* Throw away noisy errors */ if ((fpout = freopen("/dev/null", "w", stdout)) == NULL) { _exit(1); } if ((fperr = freopen("/dev/null", "w", stderr)) == NULL) { (void)fclose(fpout); _exit(1); } AdInitialize(); /* ...and do the ACPICA disassambly... */ AslDoOneFile((char *)tables[which]); UtFreeLineBuffers(); AslParserCleanup(); if (AcpiGbl_ExternalFileList) AcpiDmClearExternalFileList(); (void)fclose(fperr); (void)fclose(fpout); _exit(0); break; default: /* Parent */ (void)waitpid(pid, &status, WUNTRACED | WCONTINUED); } return 0; } /* * fwts_iasl_read_output() * consume output from iasl. */ static int fwts_iasl_read_output(const int fd, char **data, size_t *len, bool *eof) { char buffer[4096]; ssize_t n; if (*eof) return 0; while ((n = read(fd, buffer, sizeof(buffer))) > 0) { char *tmp; tmp = realloc(*data, *len + n + 1); if (!tmp) { free(*data); *data = NULL; return -1; } *data = tmp; memcpy(*data + *len, buffer, n); *len += n; (*data)[*len] = '\0'; } if (n <= 0) *eof = true; return 0; } /* * fwts_iasl_assemble_aml() * invoke iasl and assemble some source, stdout into * stdout_output, stderr into stderr_output */ int fwts_iasl_assemble_aml(const char *source, char **stdout_output, char **stderr_output) { int stdout_fds[2], stderr_fds[2]; int status, ret = 0; size_t stdout_len = 0, stderr_len = 0; pid_t pid; bool stdout_eof = false, stderr_eof = false; *stdout_output = NULL; *stderr_output = NULL; fflush(stdout); fflush(stderr); if (pipe(stdout_fds) < 0) return -1; if (pipe(stderr_fds) < 0) return -1; pid = fork(); switch (pid) { case -1: (void)close(stdout_fds[0]); (void)close(stdout_fds[1]); (void)close(stderr_fds[0]); (void)close(stderr_fds[1]); return -1; case 0: /* Child */ init_asl_core(); /* stdout to be redirected down the writer end of pipe */ if (stdout_fds[1] != STDOUT_FILENO) if (dup2(stdout_fds[1], STDOUT_FILENO) < 0) _exit(EXIT_FAILURE); if (stderr_fds[1] != STDERR_FILENO) if (dup2(stderr_fds[1], STDERR_FILENO) < 0) _exit(EXIT_FAILURE); /* Close reader end */ (void)close(stdout_fds[0]); (void)close(stderr_fds[0]); /* Setup ACPICA compiler globals */ AslGbl_WarningLevel = 0; AslGbl_NoErrors = FALSE; AcpiGbl_DisasmFlag = FALSE; AslGbl_DisplayRemarks = TRUE; AslGbl_DisplayWarnings = TRUE; AslGbl_DisplayOptimizations = TRUE; /* AslGbl_CompileTimesFlag = TRUE; */ AslGbl_DoCompile = TRUE; AslGbl_PreprocessFlag = TRUE; AslGbl_UseDefaultAmlFilename = FALSE; AdInitialize(); AslGbl_OutputFilenamePrefix = (char*)source; UtConvertBackslashes(AslGbl_OutputFilenamePrefix); status = AslDoOneFile((char *)source); if (!ACPI_FAILURE(status)) { CmDoAslMiddleAndBackEnd(); AslCheckExpectedExceptions(); } UtFreeLineBuffers(); AslParserCleanup(); AcpiDmClearExternalFileList(); AcpiTerminate(); CmCleanupAndExit(); /* * We need to flush buffered I/O on IASL stdout * before we exit */ (void)fflush(stdout); (void)fflush(stderr); _exit(0); break; default: /* Parent */ /* Close writer end */ (void)close(stdout_fds[1]); (void)close(stderr_fds[1]); while (!stdout_eof && !stderr_eof) { fwts_iasl_read_output(stdout_fds[0], stdout_output, &stdout_len, &stdout_eof); fwts_iasl_read_output(stderr_fds[0], stderr_output, &stderr_len, &stderr_eof); } (void)waitpid(pid, &status, WUNTRACED | WCONTINUED); (void)close(stdout_fds[0]); (void)close(stderr_fds[0]); break; } return ret; } /* * fwts_iasl_exception_level__() * shim wrapper for AeDecodeExceptionLevel level decoding */ const char *fwts_iasl_exception_level__(uint8_t level) { const char *str; bool tmp = AslGbl_VerboseErrors; AslGbl_VerboseErrors = true; str = AeDecodeExceptionLevel((UINT8)level); AslGbl_VerboseErrors = tmp; return str; } src/libfwtsiasl/fwts_iasl_interface.h000066400000000000000000000022241465205512700203630ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __FWTS_IASL_INTERFACE__ #define __FWTS_IASL_INTERFACE__ #include int fwts_iasl_disassemble_aml( char *tables[], char *names[], const int table_entries, const int which, const bool use_externals, const char *outputfile); int fwts_iasl_assemble_aml( const char *source, char **stdout_output, char **stderr_output); const char *fwts_iasl_exception_level__(uint8_t level); #endif src/main.c000066400000000000000000000017371465205512700127540ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include "fwts.h" int main(int argc, char **argv) { (void)fwts_fault_catch(); if (fwts_framework_args(argc, argv) == FWTS_OK) exit(EXIT_SUCCESS); else exit(EXIT_FAILURE); } src/opal/000077500000000000000000000000001465205512700126075ustar00rootroot00000000000000src/opal/cpu_info.c000066400000000000000000000140301465205512700145530ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define _GNU_SOURCE /* added for asprintf */ #include #include #include #include "fwts.h" #include static int get_xscom_property(fwts_framework *fw, char *my_path, bool hex, char *property) { int failures = 0; char *prop_string = strstr(my_path, "/xscom"); if (prop_string) { int prop_len = 0; int node = fdt_path_offset(fw->fdt, prop_string); if (node >= 0) { const char *prop_buf; prop_buf = fdt_getprop(fw->fdt, node, property, &prop_len); if ((prop_len > 0) && (prop_buf)) { fwts_log_nl(fw); if ((hex) && (prop_len == 4)) { fwts_passed(fw, "OPAL CPU Info Property of" "\"%s\" for \"%s\" is " "\"0x%02X%02X%02X%02X\".", property, my_path, prop_buf[0], prop_buf[1], prop_buf[2], prop_buf[3]); } else if (!hex) { if (check_property_printable(fw, property, prop_buf, prop_len)) { failures++; } fwts_passed(fw, "OPAL CPU Info Property of" " \"%s\" for \"%s\" " "is \"%s\".", property, my_path, prop_buf); } else { failures++; fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL CPU Info", "Property of " "\"%s\" for \"%s\" is not" " properly formatted." " Check your installation" " for proper device tree " "nodes.", property, my_path); } } else { fwts_log_nl(fw); fwts_skipped(fw, "OPAL CPU check for " "property of \"%s\" and path of \"%s\"" " not applicable to version.", property, my_path); } } else { failures++; fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL CPU Info", "Failed to get node for xscom" " \"%s/%s\", please check the system for" " setup issues.", my_path, property); } } else { failures++; fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL CPU Info", "Internal processing problem at strstr" " my_path of \"%s\" for \"%s\", please check the" " system for setup issues.", my_path, property); } if (failures) { return FWTS_ERROR; } else { return FWTS_OK; } } static int get_linux_xscom_devices(fwts_framework *fw) { int count, i, failures = 0; struct dirent **namelist; bool found = false; count = scandir(DT_FS_PATH, &namelist, NULL, alphasort); if (count < 0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL CPU Info", "Scan for CPU devices in '%s' is unable to find any" " candidates. Check the installation for the CPU" " device config for missing nodes in the device tree" " (xscom@X) if you expect CPU devices.", DT_FS_PATH); return FWTS_ERROR; } fwts_log_nl(fw); fwts_log_info(fw, "STARTING checks of CPU'S"); for (i = 0; i < count; i++) { struct dirent *dirent; char *cpus; char *xscom_path; dirent = namelist[i]; if (dirent->d_name[0] == '.' || asprintf(&cpus, "%s", dirent->d_name) < 0) { /* asprintf must be last condition so when it */ /* evaluates cpus gets allocated */ free(namelist[i]); continue; } if (strstr(cpus, "xscom")) { found = true; if (asprintf(&xscom_path, "%s/%s", DT_FS_PATH, cpus) < 0 ) { fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL CPU Info", "Internal processing problem at" " cpus \"%s\", please" " check the system for" " setup issues.", cpus); free(cpus); free(namelist[i]); continue; } if (get_xscom_property(fw, xscom_path, false, DT_PROPERTY_OPAL_SLOT_LOC)) { failures++; } if (get_xscom_property(fw, xscom_path, false, DT_PROPERTY_OPAL_PART_NUM)) { failures++; } if (get_xscom_property(fw, xscom_path, false, DT_PROPERTY_OPAL_SERIAL_NUM)) { failures++; } if (get_xscom_property(fw, xscom_path, false, DT_PROPERTY_OPAL_VENDOR)) { failures++; } if (get_xscom_property(fw, xscom_path, false, DT_PROPERTY_OPAL_BOARD_INFO)) { failures++; } fwts_log_nl(fw); free(namelist[i]); } free(cpus); } free(namelist); fwts_log_nl(fw); fwts_log_info(fw, "ENDING checks of CPU's"); fwts_log_nl(fw); if (!found) { failures++; fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL CPU Info", "No CPU devices (xscom@X) were found in \"%s\"." " Check the system for setup issues.", DT_FS_PATH); } if (failures) { return FWTS_ERROR; } else { return FWTS_OK; } } static int cpu_info_test1(fwts_framework *fw) { if (get_linux_xscom_devices(fw)) { /* errors logged earlier */ return FWTS_ERROR; } else { return FWTS_OK; } } static int cpu_info_init(fwts_framework *fw) { if (fw->firmware_type != FWTS_FIRMWARE_OPAL) { fwts_skipped(fw, "The firmware type detected was not set" " to OPAL so skipping the OPAL CPU Info" " checks."); return FWTS_SKIP; } else { return FWTS_OK; } } static fwts_framework_minor_test cpu_info_tests[] = { { cpu_info_test1, "OPAL CPU Info" }, { NULL, NULL } }; static fwts_framework_ops cpu_info_ops = { .description = "OPAL CPU Info", .init = cpu_info_init, .minor_tests = cpu_info_tests }; FWTS_REGISTER_FEATURES("cpu_info", &cpu_info_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV, FWTS_FW_FEATURE_DEVICETREE); src/opal/mem_info.c000066400000000000000000000244621465205512700145540ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define _GNU_SOURCE /* added for asprintf */ #include #include #include #include "fwts.h" #include static bool found_dimm = false; static int get_dimm_property( fwts_framework *fw, char *my_path, bool hex, char *property) { int failures = 0; char *prop_string = strstr(my_path, "/memory-buffer"); if (prop_string) { int node = fdt_path_offset(fw->fdt, prop_string); if (node >= 0) { const char *prop_buf; int prop_len = 0; prop_buf = fdt_getprop(fw->fdt, node, property, &prop_len); if ((prop_len > 0) && (prop_buf)) { fwts_log_nl(fw); if ((hex) && (prop_len == 4)) { fwts_passed(fw, "OPAL MEM Info" " Property of \"%s\" for " "\"%s\" is " "\"0x%02X%02X%02X%02X\".", property, my_path, prop_buf[0], prop_buf[1], prop_buf[2], prop_buf[3]); } else if (!hex) { if (check_property_printable(fw, property, prop_buf, prop_len)) { failures++; } fwts_passed(fw, "OPAL MEM Info Property of" " \"%s\" for \"%s\" " "is \"%s\".", property, my_path, prop_buf); } else { failures++; fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MEM Info", "Property of \"%s\" for " "\"%s\" is not properly " "formatted. Check your " "installation for proper " " device tree nodes.", property, my_path); } } else { failures++; fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MEM Info", "Property of \"%s\" for \"%s\" was not" " able to be retrieved. Check the " "installation for the MEM device " "config for missing nodes in the device" " tree if you expect MEM devices.", property, my_path); } } else { failures++; fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MEM Info", "Failed to get node for memory-buffer" " \"%s/%s\", please check the system" " for setup issues.", my_path, property); } } else { failures++; fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MEM Info", "Internal processing problem at strstr" " my_path of \"%s\" for \"%s\", please check" " the system for setup issues.", my_path, property); } if (failures) { return FWTS_ERROR; } else { return FWTS_OK; } } static int process_dimm( fwts_framework *fw, char *my_string, char *my_dir) { int count, i, failures = 0; struct dirent **namelist = NULL; bool found = false; count = scandir(my_dir, &namelist, NULL, alphasort); if (count < 0) { fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MEM Info", "Scan for MEM devices in '%s' is unable to find any " "candidates. Check the installation " "for the MEM device config for missing nodes" " in the device tree if you expect MEM devices.", my_dir); return FWTS_ERROR; } for (i = 0; i < count; i++) { struct dirent *dirent; char *my_buffer; char *my_path; dirent = namelist[i]; if (dirent->d_name[0] == '.' || asprintf(&my_buffer, "%s", dirent->d_name) < 0) { /* asprintf must be last condition so when it */ /* evaluates my_buffer gets allocated */ free(namelist[i]); continue; } if (strstr(my_buffer, my_string)) { char my_prop_string[15]; found = true; if (asprintf(&my_path, "%s/%s", my_dir, my_buffer) < 0 ) { fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MEM Info", "Internal" " processing problem at" " my_link \"%s\", please" " check the system for" " setup issues.", my_buffer); free(my_buffer); free(namelist[i]); continue; } strcpy(my_prop_string, "/memory-buffer"); if (check_status_property_okay(fw, my_path, my_prop_string, DT_PROPERTY_OPAL_STATUS)) { found_dimm = true; if (get_dimm_property(fw, my_path, false, DT_PROPERTY_OPAL_STATUS)) { failures++; } if (get_dimm_property(fw, my_path, false, DT_PROPERTY_OPAL_SLOT_LOC)) { failures++; } if (get_dimm_property(fw, my_path, false, DT_PROPERTY_OPAL_PART_NUM)) { failures++; } if (get_dimm_property(fw, my_path, false, DT_PROPERTY_OPAL_SERIAL_NUM)) { failures++; } if (get_dimm_property(fw, my_path, true, DT_PROPERTY_OPAL_MANUFACTURER_ID)) { failures++; } } free(my_path); free(namelist[i]); } free(my_buffer); } free(namelist); if (!found) { failures++; fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MEM Info", "No MEM devices (memory-buffer) were found" " in \"%s\". Check the system for setup" " issues.", DT_FS_PATH); } if (failures) { return FWTS_ERROR; } else { return FWTS_OK; } } static int process_mba( fwts_framework *fw, char *my_string, char *my_dir) { int count, i, failures = 0; struct dirent **namelist; bool found = false; count = scandir(my_dir, &namelist, NULL, alphasort); if (count < 0) { fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MEM Info", "Scan for MEM devices for \"%s\" in \"%s\" is" " unable to find any candidates. Check the" " installation for the MEM device config for missing" " nodes in the device tree if you expect MEM devices.", my_string, my_dir); return FWTS_ERROR; } for (i = 0; i < count; i++) { struct dirent *dirent; char *my_buffer; char *my_path; dirent = namelist[i]; if (dirent->d_name[0] == '.' || asprintf(&my_buffer, "%s", dirent->d_name) < 0) { /* asprintf must be last condition so when it */ /* evaluates my_buffer gets allocated */ free(namelist[i]); continue; } if (strstr(my_buffer, my_string)) { found = true; if (asprintf(&my_path, "%s/%s", my_dir, my_buffer) < 0 ) { fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MEM Info", "Internal" " processing problem at" " my_link \"%s\", please" " check the system for" " setup issues.", my_buffer); free(my_buffer); free(namelist[i]); continue; } if (process_dimm(fw, "dimm", my_path)) { failures++; } free(my_path); free(namelist[i]); } free(my_buffer); } free(namelist); if (!found) { fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MEM Info", "Failed to find any device" " tree nodes for mba@X from \"%s\"." " Check the installation " "for the MEM device config for missing nodes" " in the device tree if you expect MEM devices.", my_dir); } if ((!found) || (failures)) { return FWTS_ERROR; } else { return FWTS_OK; } } static int get_linux_mem_devices(fwts_framework *fw) { int count, i, failures = 0; struct dirent **namelist = NULL; bool found = false; count = scandir(DT_FS_PATH, &namelist, NULL, alphasort); if (count < 0) { fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MEM Info", "Scan for MEM devices in '%s' is unable to find any " "candidates. Check the installation " "for the MEM device config for missing nodes" " in the device tree if you expect MEM devices.", DT_FS_PATH); return FWTS_ERROR; } fwts_log_nl(fw); fwts_log_info(fw, "STARTING checks of MEM devices"); for (i = 0; i < count; i++) { struct dirent *dirent; char *mem_buffer; char *mba_path; dirent = namelist[i]; mem_buffer = NULL; if (dirent->d_name[0] == '.' || asprintf(&mem_buffer, "%s", dirent->d_name) < 0) { /* asprintf must be last condition so when it */ /* evaluates mem_buffer gets allocated */ free(namelist[i]); continue; } if (strstr(mem_buffer, "memory-buffer")) { found = true; if (asprintf(&mba_path, "%s/%s", DT_FS_PATH, mem_buffer) < 0 ) { fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MEM Info", "Internal" " processing problem at" " mem_buffer \"%s\", please" " check the system for" " setup issues.", mem_buffer); free(mem_buffer); free(namelist[i]); continue; } if (process_mba(fw, "mba", mba_path)) { failures++; } free(mba_path); free(namelist[i]); } free(mem_buffer); } free(namelist); fwts_log_nl(fw); fwts_log_info(fw, "ENDING checks of MEM devices"); fwts_log_nl(fw); if (!found) { fwts_skipped(fw, "OPAL MEM Info MEM devices " "(memory-buffer@X) found in \"%s\"," " not applicable for version.", DT_FS_PATH); } if (!found_dimm) { fwts_log_nl(fw); fwts_skipped(fw, "OPAL MEM Info MEM DIMM devices " "(memory-buffer@X) found in \"%s\"," " not applicable for version.", DT_FS_PATH); } if (failures) { return FWTS_ERROR; } else { return FWTS_OK; } } static int mem_info_test1(fwts_framework *fw) { if (get_linux_mem_devices(fw)) { /* errors logged earlier */ return FWTS_ERROR; } else { return FWTS_OK; } } static int mem_info_init(fwts_framework *fw) { if (fw->firmware_type != FWTS_FIRMWARE_OPAL) { fwts_skipped(fw, "The firmware type detected was not set" " to OPAL so skipping the OPAL PCI Info" " checks."); return FWTS_SKIP; } else { return FWTS_OK; } } static fwts_framework_minor_test mem_info_tests[] = { { mem_info_test1, "OPAL MEM Info" }, { NULL, NULL } }; static fwts_framework_ops mem_info_ops = { .description = "OPAL MEM Info", .init = mem_info_init, .minor_tests = mem_info_tests }; FWTS_REGISTER_FEATURES("mem_info", &mem_info_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV, FWTS_FW_FEATURE_DEVICETREE); src/opal/mtd_info.c000066400000000000000000000231601465205512700145540ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define _GNU_SOURCE /* added for asprintf */ #include #include #include #include "fwts.h" #ifdef HAVE_MTD_MTD_ABI_H #include #endif #ifdef HAVE_LIBFDT #include #endif #define FDT_FLASH_PATH "/proc/device-tree/chosen/ibm,system-flash" #define SYSFS_MTD_PATH "/sys/class/mtd" static bool mtd_present(int fwts_mtd_flags, char *mtd_devnode) { return !access(mtd_devnode, fwts_mtd_flags); } static int mtd_hdr_query(fwts_framework *fw, char *mtd_devnode) { /* snippet from skiboot libflash/ffs.h */ struct ffs_hdr { char magic[8]; }; int fd = 0; ssize_t bytes_read = 0; struct ffs_hdr mtd_hdr; if ((fd = open(mtd_devnode, O_RDONLY)) < 0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MTD Info", "Cannot get data from MTD device '%s'.", mtd_devnode); return FWTS_ERROR; } bytes_read = read(fd, &mtd_hdr, sizeof(mtd_hdr) ); if (bytes_read >= 4) { /* FFS_MAGIC from skiboot libflash/ffs.h */ if (strncmp(mtd_hdr.magic, "PART", 4) == 0) { fwts_log_info(fw, "MTD device '%s' header eye-catcher 'PART'" " verified.\n", mtd_devnode); } else { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MTD Info", "MTD device '%s' header eye-catcher 'PART'" " not able to be" " verified. Check the system setup.\n", mtd_devnode); (void)close(fd); return FWTS_ERROR; } } else { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MTD Info", "MTD device '%s' header was unable to be read." " Cannot validate the integrity of the MTD." " Check the system setup.\n", mtd_devnode); (void)close(fd); return FWTS_ERROR; } (void)close(fd); return FWTS_OK; } static int mtd_dev_query(fwts_framework *fw, char *mtd_devnode) { #ifdef HAVE_MTD_MTD_ABI_H int fd = 0; int fwts_mtd_flags = 0; struct mtd_info_user mtd_info; #endif if (!mtd_present(R_OK | W_OK, mtd_devnode)) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MTD Info", "Cannot read or write to MTD device '%s'" " check your user privileges.", mtd_devnode); return FWTS_ERROR; } else { fwts_log_info(fw, "MTD device '%s' is verified" " and %s is read/write in the file system, the" " MTD device itself will be checked later," " see MTD Flags.", mtd_devnode, mtd_devnode); } #ifdef HAVE_MTD_MTD_ABI_H if (strstr(mtd_devnode, "ro")) { fwts_mtd_flags = O_RDONLY; } else { fwts_mtd_flags = O_RDWR; } if ((fd = open(mtd_devnode, fwts_mtd_flags)) < 0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MTD Info", "Cannot get data from '%s'" " device interface.", mtd_devnode); return FWTS_ERROR; } (void)memset(&mtd_info, 0, sizeof(mtd_info)); if (ioctl(fd, MEMGETINFO, &mtd_info)) { (void)close(fd); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MTD Info", "Cannot get data from '%s'" " device interface.", mtd_devnode); return FWTS_ERROR; } else { fwts_log_info(fw, "MTD device '%s' attributes follow:" " MTD Type=%u (3=MTD_NORFLASH)," " MTD Flags=%u (1024=MTD_WRITEABLE)," " MTD total size=%u bytes," " MTD erase size=%u bytes," " MTD write size=%u," " MTD oob size=%u", mtd_devnode, mtd_info.type, mtd_info.flags, mtd_info.size, mtd_info.erasesize, mtd_info.writesize, mtd_info.oobsize); (void)close(fd); return FWTS_OK; } } #else fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MTD Info", "MTD Info unable to be retrieved" " for '%s' due to lack of " "mtd-abi.h, check your " "configuration and rebuild.", mtd_devnode); return FWTS_ERROR; } #endif static int mtd_info_test1(fwts_framework *fw) { char fdt_node_path[PATH_MAX + 1]; int count, i, fd; ssize_t bytes = 0, bytes_read = 0; struct dirent **namelist; fd = open(FDT_FLASH_PATH, O_RDONLY); if (fd < 0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MTD Info", "Failed to open the path %s." " Check the installation" " for the path %s.\n", FDT_FLASH_PATH, FDT_FLASH_PATH); return FWTS_ERROR; } bytes_read = read(fd, fdt_node_path, PATH_MAX); if (bytes_read < 0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MTD Info", "Failed to get the FDT info." " Check the installation " "for the path %s.\n", FDT_FLASH_PATH); (void)close(fd); return FWTS_ERROR; } (void)close(fd); fdt_node_path[PATH_MAX] = '\0'; fwts_log_info(fw, "MTD Info validated FDT of '%s'.", fdt_node_path); count = scandir(SYSFS_MTD_PATH, &namelist, NULL, alphasort); if (count < 0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MTD Info", "Scan for MTD '%s' unable to find any " "candidates. Check the installation " "for the MTD device config.", SYSFS_MTD_PATH); return FWTS_ERROR; } bytes = 0; fwts_log_nl(fw); fwts_log_info(fw, "STARTING checks of MTD devices"); fwts_log_nl(fw); for (i = 0; i < count; i++) { struct dirent *dirent; char *sys_device_path; /* /sys/class/device/mtdx */ char *mtd_device_path; /* /dev/mtdx */ char *driver_path; char fdt_node_path_tmp[PATH_MAX]; char mtd_driver_path[PATH_MAX]; memset(fdt_node_path_tmp, 0, sizeof(fdt_node_path_tmp)); memset(mtd_driver_path, 0, sizeof(mtd_driver_path)); dirent = namelist[i]; if (dirent->d_name[0] == '.' || bytes || asprintf(&sys_device_path, "%s/%s/device/of_node", SYSFS_MTD_PATH, dirent->d_name) < 0) { /* asprintf must be last condition so when it */ /* evaluates sys_device_path gets allocated */ free(namelist[i]); continue; } bytes = readlink(sys_device_path, fdt_node_path_tmp, sizeof(fdt_node_path_tmp) - 1); free(sys_device_path); if (bytes < 0) { /* if mtd system flash does not have an FDT node */ /* just continue */ free(namelist[i]); /* reset the bytes to continue */ bytes = 0; continue; } fdt_node_path_tmp[bytes] = '\0'; if (strstr(fdt_node_path_tmp, fdt_node_path)) { bytes = asprintf(&mtd_device_path, "/dev/%s", dirent->d_name); if (bytes < 0) { free(namelist[i]); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MTD Info", "Failed to get the device path." " Check the installation for the" " path '/dev/%s'.", dirent->d_name); continue; } mtd_device_path[bytes] = '\0'; bytes = 0; if (asprintf(&driver_path, "%s/%s/device/driver", SYSFS_MTD_PATH, dirent->d_name) < 0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MTD Info", "Failed to get the MTD Path." " Check the installation " "for the path '%s/%s/device/driver'.", SYSFS_MTD_PATH, dirent->d_name); free(mtd_device_path); continue; } bytes = readlink(driver_path, mtd_driver_path, sizeof(mtd_driver_path) -1); if (bytes < 0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL MTD Info", "Failed to get the MTD drive path." " Check the installation for the " "path %s.", driver_path); free(mtd_device_path); free(driver_path); continue; } else { mtd_driver_path[bytes] = '\0'; bytes = 0; free(driver_path); } if (strstr(mtd_driver_path, "powernv_flash")) { if (!strstr(mtd_device_path, "ro")) { if (mtd_dev_query(fw, mtd_device_path)) { /* failures logged */ /* in subroutine */ free(mtd_device_path); continue; } if (mtd_hdr_query(fw, mtd_device_path)) { /* failures logged */ /* in subroutine */ free(mtd_device_path); continue; } fwts_log_nl(fw); } } free(mtd_device_path); } free(namelist[i]); } free(namelist); fwts_log_info(fw, "ENDING checks of MTD devices"); fwts_log_nl(fw); fwts_passed(fw, "OPAL MTD info passed."); return FWTS_OK; } static int mtd_info_init(fwts_framework *fw) { if (fw->fdt) { #ifdef HAVE_LIBFDT int node; /* perform some FDT validation */ node = fdt_path_offset(fw->fdt, "/ibm,opal/nvram"); if (node >= 0) { if (!fdt_node_check_compatible(fw->fdt, node, "ibm,opal-nvram")) { fwts_log_info(fw, "MTD Info initialization validated" " FDT for 'ibm,opal-nvram'."); return FWTS_OK; } else { return FWTS_SKIP; } } #endif } else { fwts_log_info(fw, "The OPAL MTD device tree node is not" " able to be detected so skipping the mtd_info" " test. There may be tools missing such as" " libfdt-dev or dtc, check that the packages" " are installed and re-build if needed." " If this condition persists try running the" " dt_base test to further diagnose. If dt_base" " test is not available this is probably a" " setup problem."); return FWTS_SKIP; } /* only run test when fdt node is confirmed */ return FWTS_SKIP; } static fwts_framework_minor_test mtd_info_tests[] = { { mtd_info_test1, "OPAL MTD Info" }, { NULL, NULL } }; static fwts_framework_ops mtd_info_ops = { .description = "OPAL MTD Info", .init = mtd_info_init, .minor_tests = mtd_info_tests }; FWTS_REGISTER_FEATURES("mtd_info", &mtd_info_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV, FWTS_FW_FEATURE_DEVICETREE); src/opal/pci_info.c000066400000000000000000000217741465205512700145540ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #define _GNU_SOURCE /* added for asprintf */ #include #include #include #include "fwts.h" #include #include static struct pci_access *pcia = NULL; static struct pci_dev *dev; static int pci_get_dev_info(fwts_framework *fw, char *property, char *pci_dt_path, char *sys_slot, const char *pci_slot_buf, char *pci_domain) { char namebuf[PATH_MAX], *device_name; char vendorbuf[PATH_MAX], *vendor_name; char classbuf[PATH_MAX], *class_name; char *tmp_pci_domain; bool found = false; for (dev = pcia->devices; dev; dev = dev->next) { unsigned int pin; pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES | PCI_FILL_CLASS); pin = pci_read_byte(dev, PCI_INTERRUPT_PIN); if (asprintf(&tmp_pci_domain, "%04x:%02x:%02x.%d", dev->domain, dev->bus, dev->dev, dev->func) < 0) { fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL PCI Info", "Internal" " processing problem" " at tmp_pci_domain," " please check the system" " for setup issues."); free(tmp_pci_domain); return FWTS_ERROR; } else { if (strstr(pci_domain, tmp_pci_domain)) { found = true; device_name = pci_lookup_name(pcia, namebuf, sizeof(namebuf), PCI_LOOKUP_DEVICE, dev->vendor_id, dev->device_id); vendor_name = pci_lookup_name(pcia, vendorbuf, sizeof(vendorbuf), PCI_LOOKUP_VENDOR, dev->vendor_id, dev->device_id); class_name = pci_lookup_name(pcia, classbuf, sizeof(classbuf), PCI_LOOKUP_CLASS, dev->device_class); fwts_advice(fw, "Property \"%s\" of \"%s\" from device" " tree node %s%s is \"%s\"," " device_name=\"%s\", device_id=%04x," " vendor_name=\"%s\", vendor_id=%04x," " device_class_name=\"%s\"," " device_class=%04x," " irq=%d (pin %d), base0=%lx. Please" " verify the data matches what you" " desire.", property, sys_slot, DT_FS_PATH, pci_dt_path, pci_slot_buf, device_name, dev->device_id, vendor_name, dev->vendor_id, class_name, dev->device_class, dev->irq, pin, (long) dev->base_addr[0]); fwts_infoonly(fw); } free(tmp_pci_domain); } } if (!found) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL PCI Info", "A match was not found" " for \"%s\" from the libpci-dev tools." " Check the \"lspci\" output to review" " if there is a setup issue." " If the \"lscpi\" output looks good" " then report a bug in the libpci-dev tools.", pci_domain); fwts_advice(fw, "Property \"%s\" of \"%s\" from device" " tree node %s%s is \"%s\". Please" " verify the data matches what you desire.", property, sys_slot, DT_FS_PATH, pci_dt_path, pci_slot_buf); fwts_infoonly(fw); return FWTS_ERROR; } return FWTS_OK; } static int pci_get_slot_info(fwts_framework *fw, char *property, char *pci_dt_path, char *sys_slot, char *pci_domain) { int node, pci_slot_len; node = fdt_path_offset(fw->fdt, pci_dt_path); if (node >= 0) { const char *pci_slot_buf; pci_slot_buf = fdt_getprop(fw->fdt, node, property, &pci_slot_len); if (pci_slot_buf) { fwts_log_nl(fw); if (pci_get_dev_info(fw, property, pci_dt_path, sys_slot, pci_slot_buf, pci_domain)) { return FWTS_ERROR; } } else { fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL PCI Info", "Internal processing problem" " at pci_slot_buf for \"%s\"" " for \"%s%s\", please" " check the system for setup" " issues.", property, DT_FS_PATH, pci_dt_path); fwts_log_nl(fw); return FWTS_ERROR; } } else { fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL PCI Info", "The OPAL device tree node is not able" " to be detected so skipping the pci_info" " test. There may be tools missing such as" " libfdt-dev or dtc, check that the packages" " are installed and re-build if needed." " If this condition persists try running the" " dt_base test to further diagnose. If dt_base" " test is not available this is probably a" " setup problem. Validation of the PCI" " devices in the device tree \"%s\" cannot" " be run.", DT_FS_PATH); fwts_log_nl(fw); return FWTS_ERROR; } return FWTS_OK; } static int get_linux_pci_devices(fwts_framework *fw) { int count, i, failures = 0; ssize_t bytes = 0; struct dirent **namelist; bool found = false; count = scandir(DT_LINUX_PCI_DEVICES, &namelist, NULL, alphasort); if (count < 0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL PCI Info", "Scan for PCI devices in '%s' is unable to find any " "candidates. Check the installation " "for the PCI device config for missing nodes" " in the device tree if you expect PCI devices.", DT_LINUX_PCI_DEVICES); return FWTS_ERROR; } fwts_log_nl(fw); fwts_log_info(fw, "STARTING checks of PCI devices"); for (i = 0; i < count; i++) { struct dirent *dirent; char *pci_slot; char *of_node_link; char of_node_path[PATH_MAX+1]; char *sys_slot = NULL; memset(of_node_path, 0, sizeof(of_node_path)); dirent = namelist[i]; if (dirent->d_name[0] == '.' || asprintf(&pci_slot, "%s", dirent->d_name) < 0) { /* asprintf must be last condition so when it */ /* evaluates pci_slot gets allocated */ free(namelist[i]); continue; } if (strstr(pci_slot, "00:00.0")) { found = true; if (asprintf(&of_node_link, "%s/%s/of_node", DT_LINUX_PCI_DEVICES, pci_slot) < 0 ) { fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL PCI Info", "Internal" " processing problem at" " pci_slot \"%s\", please" " check the system for" " setup issues.", pci_slot); failures++; free(pci_slot); free(namelist[i]); continue; } bytes = readlink(of_node_link, of_node_path, sizeof(of_node_path) -1); if (bytes < 0) { fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL PCI Info", "Internal" " processing problem at " "readlink of_node_link \"%s\"," " please check the system" " for setup issues.", of_node_link); failures++; free(of_node_link); free(pci_slot); free(namelist[i]); continue; } of_node_path[bytes] = '\0'; sys_slot = strstr(of_node_path, "/pciex"); if (sys_slot) { int rc = pci_get_slot_info(fw, DT_PROPERTY_OPAL_PCI_SLOT, sys_slot, of_node_link, pci_slot); if (rc == FWTS_ERROR) { failures++; } } else { fwts_log_nl(fw); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL PCI Info", "Internal" " processing problem at strstr" " of_node_path of \"%s\", " "please check the system" " for setup issues.", of_node_path); failures++; free(of_node_link); free(pci_slot); free(namelist[i]); continue; } free(of_node_link); } free(pci_slot); free(namelist[i]); } free(namelist); fwts_log_nl(fw); fwts_log_info(fw, "ENDING checks of PCI devices"); fwts_log_nl(fw); if (!found) { failures++; fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL PCI Info", "No root PCI devices (xxxx:00:00.0) were found" " in \"%s\". Check the system for setup" " issues.", DT_LINUX_PCI_DEVICES); } return failures ? FWTS_ERROR : FWTS_OK; } static int pci_info_test1(fwts_framework *fw) { pcia = pci_alloc(); pci_init(pcia); pci_scan_bus(pcia); if (!get_linux_pci_devices(fw)) { pci_cleanup(pcia); return FWTS_OK; } else { pci_cleanup(pcia); return FWTS_ERROR; } } static int pci_info_init(fwts_framework *fw) { if (fw->firmware_type != FWTS_FIRMWARE_OPAL) { fwts_skipped(fw, "The firmware type detected was not set" " to OPAL so skipping the OPAL PCI Info" " checks."); return FWTS_SKIP; } else { return FWTS_OK; } } static fwts_framework_minor_test pci_info_tests[] = { { pci_info_test1, "OPAL PCI Info" }, { NULL, NULL } }; static fwts_framework_ops pci_info_ops = { .description = "OPAL PCI Info", .init = pci_info_init, .minor_tests = pci_info_tests }; FWTS_REGISTER_FEATURES("pci_info", &pci_info_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV, FWTS_FW_FEATURE_DEVICETREE); src/opal/power_mgmt_info.c000066400000000000000000000265501465205512700161560ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include "fwts.h" #include #define MAX_PSTATES 256 #define CPUIDLE_STATE_MAX 10 proc_gen_t proc_gen; static const char *power_mgt_path = "/ibm,opal/power-mgt/"; /** * cmp_pstates: Compares the given two pstates and determines which * among them is associated with a higher pstate. * * @a,@b: The pstate ids of the pstates being compared. * * Returns: -1 : If pstate associated with @a is smaller than * the pstate associated with @b. * 0 : If pstates associated with @a and @b are equal. * 1 : If pstate associated with @a is greater than * the pstate associated with @b. */ static int (*cmp_pstates)(int a, int b); static int cmp_positive_pstates(int a, int b) { if (a > b) return -1; else if (a < b) return 1; return 0; } static int cmp_negative_pstates(int a, int b) { return cmp_positive_pstates(b, a); } static int validate_dt_prop_sizes( fwts_framework *fw, const char *prop1, int prop1_len, const char *prop2, int prop2_len) { if (prop1_len == prop2_len) return FWTS_OK; fwts_failed(fw, LOG_LEVEL_HIGH, "SizeMismatch", "array sizes don't match for %s len %d and %s len %d\n", prop1, prop1_len, prop2, prop2_len); return FWTS_ERROR; } static int power_mgmt_init(fwts_framework *fw) { int ret; if (fw->firmware_type != FWTS_FIRMWARE_OPAL) { fwts_skipped(fw, "The firmware type detected was non OPAL " "so skipping the OPAL Power Management DT checks."); return FWTS_SKIP; } if (!fw->fdt) { fwts_failed(fw, LOG_LEVEL_HIGH, "NoDeviceTree", "Device tree not found"); return FWTS_ERROR; } ret = get_proc_gen(fw); if (ret != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_HIGH, "ProcGenFail", "Failed to get the Processor generation"); return FWTS_ERROR; } return FWTS_OK; } static int pstate_limits_test(fwts_framework *fw) { int pstate_min, pstate_max, pstates[MAX_PSTATES]; bool ok = true; int nr_pstates, offset, len, ret, i; switch (proc_gen) { case proc_gen_p8: cmp_pstates = cmp_negative_pstates; break; case proc_gen_p9: cmp_pstates = cmp_positive_pstates; break; default: fwts_failed(fw, LOG_LEVEL_HIGH, "UnknownProcessorChip", "Unknown processor generation %d", proc_gen); return FWTS_ERROR; } offset = fdt_path_offset(fw->fdt, power_mgt_path); if (offset < 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTNodeMissing", "power management node %s is missing", power_mgt_path); return FWTS_ERROR; } ret = fwts_dt_property_read_u32(fw->fdt, offset, "ibm,pstate-min", &pstate_min); if (ret != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTPropertyReadError", "Failed to read property ibm,pstate-min %s", fdt_strerror(pstate_min)); return FWTS_ERROR; } ret = fwts_dt_property_read_u32(fw->fdt, offset, "ibm,pstate-max", &pstate_max); if (ret != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTPropertyReadError", "Failed to read property ibm,pstate-max %s", fdt_strerror(pstate_max)); return FWTS_ERROR; } memset(pstates, 0, sizeof(pstates)); ret = fwts_dt_property_read_u32_arr(fw->fdt, offset, "ibm,pstate-ids", pstates, &len); if (ret != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTPropertyReadError", "Failed to read property ibm,pstate-ids %s", fdt_strerror(len)); return FWTS_ERROR; } nr_pstates = abs(pstate_max - pstate_min) + 1; fwts_log_info(fw, "Pstates info: " "Pstate min: %d " "Pstate max: %d " "nr_pstates: %d " "Pstate ID's: ", pstate_min, pstate_max, nr_pstates); for (i = 0; i < nr_pstates; i++) fwts_log_info(fw, " %d ", pstates[i]); if (nr_pstates <= 1) fwts_log_warning(fw, "Pstates range %d is not valid", nr_pstates); if (proc_gen == proc_gen_p8 && nr_pstates > 128) fwts_log_warning(fw, "More than 128 pstates found, nr_pstates = %d", nr_pstates); if (proc_gen == proc_gen_p9 && nr_pstates > 255) fwts_log_warning(fw, "More than 255 pstates found, nr_pstates = %d", nr_pstates); if (len != nr_pstates) fwts_log_warning(fw, "Wrong number of pstates." "Expected %d pstates, found %d pstates", nr_pstates, len); /* Avoid reads outside of pstates[] */ if (nr_pstates > MAX_PSTATES) { nr_pstates = MAX_PSTATES; fwts_log_warning(fw, "Truncating to %d pstates\n", nr_pstates); } for (i = 0; i < nr_pstates; i++) { if (cmp_pstates(pstate_max, pstates[i]) < 0) { fwts_log_warning(fw, "Invalid Pstate id %d " "greater than max pstate %d", pstates[i], pstate_max); ok = false; } if (cmp_pstates(pstates[i], pstate_min) < 0) { fwts_log_warning(fw, "Invalid Pstate id %d " "lesser than min pstate %d", pstates[i], pstate_min); ok = false; } } /* Pstates should be in monotonic descending order */ for (i = 0; i < nr_pstates; i++) { if ((i == 0) && (cmp_pstates(pstates[i], pstate_max) != 0)) { fwts_log_warning(fw, "Pstates mismatch: " "Expected Pmax %d," "Actual Pmax %d", pstate_max, pstates[i]); ok = false; } else if ((i == nr_pstates - 1) && (cmp_pstates(pstates[i], pstate_min) != 0)) { fwts_log_warning(fw, "Pstates mismatch: " "Expected Pmin %d," "Actual Pmin %d", pstate_min, pstates[i]); ok = false; } else if (i != 0 && i != nr_pstates) { int previous_pstate; previous_pstate = pstates[i-1]; if (cmp_pstates(pstates[i], previous_pstate) > 0) { fwts_log_warning(fw, "Non monotonicity ...," "Pstate %d greater then" " previous Pstate %d", pstates[i], previous_pstate); ok = false; } } } if (!ok) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUPstateLimitsTestFail", "One or few CPU Pstates DT validation tests failed"); return FWTS_ERROR; } fwts_passed(fw, "CPU Frequency pstates are validated"); return FWTS_OK; } static int cpuidle_states_test(fwts_framework *fw) { int offset, len, test_len, ret; int latency_ns[CPUIDLE_STATE_MAX]; int residency_ns[CPUIDLE_STATE_MAX]; int flags[CPUIDLE_STATE_MAX]; uint64_t pm_cr[CPUIDLE_STATE_MAX]; uint64_t pm_cr_mask[CPUIDLE_STATE_MAX]; bool has_stop_inst = false; bool ok = true; char *control_prop, *mask_prop; switch (proc_gen) { case proc_gen_p8: has_stop_inst = false; control_prop = "ibm,cpu-idle-state-pmicr"; mask_prop = "ibm,cpu-idle-state-pmicr-mask"; break; case proc_gen_p9: has_stop_inst = true; control_prop = "ibm,cpu-idle-state-psscr"; mask_prop = "ibm,cpu-idle-state-psscr-mask"; break; default: fwts_failed(fw, LOG_LEVEL_HIGH, "UnknownProcessorChip", "Unknown processor generation %d", proc_gen); return FWTS_ERROR; } offset = fdt_path_offset(fw->fdt, power_mgt_path); if (offset < 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTNodeMissing", "power management node %s is missing", power_mgt_path); return FWTS_ERROR; } /* In P9 ibm,enabled-stop-levels present in /ibm,opal/power-mgt/ */ if (has_stop_inst) { const int *buf; buf = fdt_getprop(fw->fdt, offset, "ibm,enabled-stop-levels", &len); if (!buf) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTPropertyMissing", "ibm,enabled-stop-levels missing under %s", power_mgt_path); return FWTS_ERROR; } } /* Validate ibm,cpu-idle-state-flags property */ ret = fwts_dt_property_read_u32_arr(fw->fdt, offset, "ibm,cpu-idle-state-flags", flags, &len); if (ret != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTPropertyReadError", "Failed to read property ibm,cpu-idle-state-flags %s", fdt_strerror(len)); return FWTS_ERROR; } if (len < 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTNoIdleStates", "No idle states found in DT"); return FWTS_ERROR; } if (len > CPUIDLE_STATE_MAX-1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTMoreIdleStates", "More idle states found in DT than the expected"); return FWTS_ERROR; } /* Validate ibm,cpu-idle-state-latencies-ns property */ ret = fwts_dt_property_read_u32_arr(fw->fdt, offset, "ibm,cpu-idle-state-latencies-ns", latency_ns, &test_len); if (ret != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTPropertyReadError", "Failed to read property" " ibm,cpu-idle-state-latencies-ns %s", fdt_strerror(test_len)); return FWTS_ERROR; } if (validate_dt_prop_sizes(fw, "ibm,cpu-idle-state-flags", len, "ibm,cpu-idle-state-latencies-ns", test_len) != FWTS_OK) ok = false; /* Validate ibm,cpu-idle-state-names property */ test_len = fwts_dt_stringlist_count(fw, fw->fdt, offset, "ibm,cpu-idle-state-names"); if (test_len > 0) { if (validate_dt_prop_sizes(fw, "ibm,cpu-idle-state-flags", len, "ibm,cpu-idle-state-names", test_len) != FWTS_OK) ok = false; } /* Validate ibm,cpu-idle-state-residency-ns property */ ret = fwts_dt_property_read_u32_arr(fw->fdt, offset, "ibm,cpu-idle-state-residency-ns", residency_ns, &test_len); if (ret != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTPropertyReadError", "Failed to read property " "ibm,cpu-idle-state-residency-ns %s", fdt_strerror(test_len)); return FWTS_ERROR; } if (validate_dt_prop_sizes(fw, "ibm,cpu-idle-state-flags", len, "ibm,cpu-idle-state-residency-ns", test_len) != FWTS_OK) ok = false; /* Validate pmicr and psscr value and mask bits */ ret = fwts_dt_property_read_u64_arr(fw->fdt, offset, control_prop, pm_cr, &test_len); if (ret != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTPropertyReadError", "Failed to read property %s rc: %s", control_prop, fdt_strerror(test_len)); return FWTS_ERROR; } if (validate_dt_prop_sizes(fw, "ibm,cpu-idle-state-flags", len, control_prop, test_len) != FWTS_OK) ok = false; ret = fwts_dt_property_read_u64_arr(fw->fdt, offset, mask_prop, pm_cr_mask, &test_len); if (ret != FWTS_OK) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTPropertyReadError", "Failed to read property %s rc: %s", mask_prop, fdt_strerror(test_len)); return FWTS_ERROR; } if (validate_dt_prop_sizes(fw, "ibm,cpu-idle-state-flags", len, mask_prop, test_len) != FWTS_OK) ok = false; if (!ok) { fwts_failed(fw, LOG_LEVEL_HIGH, "CPUIDLEStatesFail", "One or few CPU IDLE DT Validation tests failed"); return FWTS_ERROR; } fwts_passed(fw, "CPU IDLE States are validated"); return FWTS_OK; } static fwts_framework_minor_test power_mgmt_tests[] = { { pstate_limits_test, "OPAL Processor Frequency States Info" }, { cpuidle_states_test, "OPAL Processor Idle States Info" }, { NULL, NULL } }; static fwts_framework_ops power_mgmt_tests_ops = { .description = "OPAL Processor Power Management DT Validation Tests", .init = power_mgmt_init, .minor_tests = power_mgmt_tests }; FWTS_REGISTER_FEATURES("power_mgmt", &power_mgmt_tests_ops, FWTS_TEST_EARLY, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV, FWTS_FW_FEATURE_DEVICETREE) src/opal/prd_info.c000066400000000000000000000123671465205512700145640ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include "fwts.h" #ifdef HAVE_LIBFDT #include #endif #ifdef HAVE_ASM_OPAL_PRD_H #include #endif static const char *prd_devnode = "/dev/opal-prd"; static bool prd_present(const int fwts_prd_flags) { return !access(prd_devnode, fwts_prd_flags); } #ifdef HAVE_ASM_OPAL_PRD_H static int prd_dev_query(fwts_framework *fw) { int fd = 0; struct opal_prd_info info; if ((fd = open(prd_devnode, O_RDWR)) < 0) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL PRD Info", "Cannot get data from the OPAL PRD " " device interface," " check if opal-prd daemon may be in use " "or check your user privileges."); return FWTS_ERROR; } memset(&info, 0, sizeof(info)); if (ioctl(fd, OPAL_PRD_GET_INFO, &info)) { (void)close(fd); fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL PRD Info", "Cannot get data from the" " OPAL PRD device interface."); return FWTS_ERROR; } else { fwts_log_info(fw, "OPAL PRD Version is %lu", info.version); (void)close(fd); return FWTS_OK; } } #endif static int prd_service_check(fwts_framework *fw, int *restart) { int rc = FWTS_OK, status = 0; char *command; char *output = NULL; command = "systemctl status opal-prd.service 2>&1"; status = fwts_exec2(command, &output); if (output) { free(output); output = NULL; } switch (status) { case -1: /* status when nothing was successful */ fwts_failed(fw, LOG_LEVEL_HIGH, "OPAL PRD Info", "Attempt was made to stop the " "opal-prd.service but was not " "successful. Try to " "\"sudo systemctl stop " "opal-prd.service\" and retry."); rc = FWTS_ERROR; goto out; case 0: /* "running" */ command = "systemctl stop opal-prd.service 2>&1"; fwts_exec2(command, &output); if (output) free(output); *restart = 1; break; default: break; } out: return rc; } static int prd_restart(fwts_framework *fw) { int status = 0; char *command; char *output = NULL; command = "systemctl start opal-prd.service 2>&1"; status = fwts_exec2(command, &output); if (output) free(output); if (status) { fwts_log_info(fw, "OPAL PRD service (opal-prd.service)" " was restarted after stopping it to allow " "checks. Please re-check since processing " "was not able to be confirmed, " "\"sudo systemctl status opal-prd.service\""); } else { fwts_log_info(fw, "OPAL PRD service (opal-prd.service)" " was restarted after stopping it to allow " "checks. This is informational only, " "no action needed."); } return status; /* ignored by caller */ } static int prd_info_test1(fwts_framework *fw) { int restart = 0; if (prd_service_check(fw, &restart)) { /* failures logged in subroutine */ return FWTS_ERROR; } if (!prd_present(R_OK | W_OK)) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "OPAL PRD Info", "Cannot read and write to the OPAL PRD" " device interface %s, check your system" " installation and user privileges.", prd_devnode); return FWTS_ERROR; } #ifdef HAVE_ASM_OPAL_PRD_H if (prd_dev_query(fw)) { /* failures logged in subroutine */ return FWTS_ERROR; } #endif if (restart) { prd_restart(fw); /* ignore rc */ } fwts_passed(fw, "OPAL PRD info passed."); return FWTS_OK; } static int prd_info_init(fwts_framework *fw) { if (fw->fdt) { #ifdef HAVE_LIBFDT int node; node = fdt_path_offset(fw->fdt, "/ibm,opal/diagnostics"); if (node >= 0) { if (!fdt_node_check_compatible(fw->fdt, node, "ibm,opal-prd")) { return FWTS_OK; } else { return FWTS_SKIP; } } #endif } else { fwts_log_info(fw, "The OPAL PRD device tree node is not" " able to be detected so skipping the prd_info" " test. There may be tools missing such as" " libfdt-dev or dtc, check that the packages" " are installed and re-build if needed." " If this condition persists try running the" " dt_base test to further diagnose. If dt_base" " test is not available this is probably a" " setup problem."); return FWTS_SKIP; } /* only run test when fdt node is confirmed */ return FWTS_SKIP; } static fwts_framework_minor_test prd_info_tests[] = { { prd_info_test1, "OPAL Processor Recovery Diagnostics Info" }, { NULL, NULL } }; static fwts_framework_ops prd_info_ops = { .description = "OPAL Processor Recovery Diagnostics Info", .init = prd_info_init, .minor_tests = prd_info_tests }; FWTS_REGISTER_FEATURES("prd_info", &prd_info_ops, FWTS_TEST_EARLY, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV, FWTS_FW_FEATURE_DEVICETREE) src/opal/reserv_mem.c000066400000000000000000000177421465205512700151320ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Some of this work - Copyright (C) 2016-2021 IBM * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include "fwts.h" #include #define CONFIG_FILENAME "/usr/local/share/fwts/platform.conf" #define MAXBUF 1024 #define DELIM "=" static const char *root_node = "/"; static const char *reserv_mem_node = "/reserved-memory/"; typedef struct reserve_region { const char *name; uint64_t start; uint64_t len; } reserve_region_t; /* Update new image names here */ typedef struct plat_config { uint64_t occ_common; uint64_t homer; uint64_t slw; } plat_config_t; static bool skip = false; static int get_config(fwts_framework *fw, char *filename, plat_config_t *configstruct) { FILE *file; char *p; char line[MAXBUF]; file = fopen(filename, "r"); if (!file) { skip = true; fwts_log_error(fw, "Platform config file doesn't exist, " "skipping region size validation check"); return FWTS_SKIP; } while (fgets(line, sizeof(line), file) != NULL) { char *cfline; uint64_t value; cfline = strstr((char *)line, DELIM); cfline = cfline + strlen(DELIM); value = strtoul(cfline, &p, 16); if (strstr(line, "homer")) configstruct->homer = value; else if (strstr(line, "occ-common-area")) configstruct->occ_common = value; else if (strstr(line, "slw-image")) configstruct->slw = value; } fclose(file); return FWTS_OK; } static char *make_message(const char *fmt, ...) { char *p; const size_t size = 128; va_list ap; p = malloc(size); if (!p) return NULL; va_start(ap, fmt); vsnprintf(p, size, fmt, ap); va_end(ap); return p; } static int reserv_mem_init(fwts_framework *fw) { if (fw->firmware_type != FWTS_FIRMWARE_OPAL) { fwts_skipped(fw, "The firmware type detected was non OPAL " "so skipping the OPAL Reserve Memory DT checks."); return FWTS_SKIP; } /* On an OPAL based system Device tree should be present */ if (!fw->fdt) { fwts_failed(fw, LOG_LEVEL_HIGH, "NoDeviceTree", "Device tree not found"); return FWTS_ERROR; } return FWTS_OK; } static int reserv_mem_limits_test(fwts_framework *fw) { bool ok = true; const char *region_names; const uint64_t *ranges; reserve_region_t *regions; int offset, len = 0, nr_regions, rc, j; plat_config_t configstruct = {0, 0, 0}; get_config(fw, CONFIG_FILENAME, &configstruct); offset = fdt_path_offset(fw->fdt, root_node); if (offset < 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTNodeMissing", "DT root node %s is missing", root_node); return FWTS_ERROR; } /* Get the number of memory reserved regions */ nr_regions = fwts_dt_stringlist_count(fw, fw->fdt, offset, "reserved-names"); if (nr_regions < 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTNoRegions", "DT No regions"); return FWTS_ERROR; } /* Check for the reservd-names property */ region_names = (const char *)fdt_getprop(fw->fdt, offset, "reserved-names", &len); if (!region_names) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTPropertyMissing", "DT Property reserved-names is missing %s", fdt_strerror(len)); return FWTS_ERROR; } regions = malloc(nr_regions*sizeof(reserve_region_t)); if (!regions) { fwts_skipped(fw, "Unable to allocate memory " "for reserv_region_t structure"); return FWTS_SKIP; } for (j = 0; j < nr_regions; j++) { regions[j].name = strdup(region_names); region_names += strlen(regions[j].name) + 1; } /* Check for the reserved-ranges property */ ranges = fdt_getprop(fw->fdt, offset, "reserved-ranges", &len); if (!ranges) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTPropertyMissing", "DT Property reserved-ranges is missing %s", fdt_strerror(len)); rc = FWTS_ERROR; goto out_free_regions; } for (j = 0; j < nr_regions; j++) { regions[j].start = (uint64_t)be64toh(ranges[2 * j]); regions[j].len = (uint64_t)be64toh(ranges[2 * j + 1]); fwts_log_info(fw, "Region name %80s" " start: 0x%08" PRIx64 ", len: 0x%08" PRIx64 "\n", regions[j].name, regions[j].start, regions[j].len); } offset = fdt_path_offset(fw->fdt, reserv_mem_node); if (offset < 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTNodeMissing", "reserve memory node %s is missing", reserv_mem_node); rc = FWTS_ERROR; goto out_free_regions; } /* Validate different cases */ for (j = 0; j < nr_regions; j++) { char *buf = NULL; /* Check for zero offset's */ if (regions[j].start == 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ZeroStartAddress", "memory region got zero start address"); ok = false; } /* Check for zero region sizes */ if (regions[j].len == 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ZeroRegionSize", "memory region got zero size"); ok = false; } /* Form the reserved-memory sub nodes for all the regions*/ if (!strstr(regions[j].name, "@")) buf = make_message("%s%s@%lx", reserv_mem_node, regions[j].name, regions[j].start); else buf = make_message("/%s/%s", reserv_mem_node, regions[j].name); if (!buf) { fwts_skipped(fw, "Unable to allocate memory for buffer"); rc = FWTS_SKIP; goto out_free_regions; } /* Check all nodes got created for all the sub regions */ offset = fdt_path_offset(fw->fdt, buf); if (offset < 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "DTNodeMissing", "reserve memory region node %s is missing", buf); ok = false; } free(buf); if (skip) continue; /* Validate different Known image fixed sizes here */ if (strstr(regions[j].name, "homer-image")) { if (regions[j].len != configstruct.homer) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ImageSizeMismatch", "Mismatch in homer-image size, " "expected: 0x%" PRIx64 ", actual: 0x%" PRIx64, configstruct.homer, regions[j].len); ok = false; } else fwts_log_info(fw, "homer-image size is validated"); } if (strstr(regions[j].name, "slw-image")) { if (regions[j].len != configstruct.slw) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ImageSizeMismatch", "Mismatch in slw-image size, " "expected: 0x%" PRIx64 ", actual: 0x%" PRIx64, configstruct.slw, regions[j].len); ok = false; } else fwts_log_info(fw, "slw-image size is validated"); } if (strstr(regions[j].name, "occ-common-area")) { if (regions[j].len != configstruct.occ_common) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "ImageSizeMismatch", "Mismatch in occ-common-area size, " "expected: 0x%" PRIx64 ", actual: 0x%" PRIx64, configstruct.occ_common, regions[j].len); ok = false; } else fwts_log_info(fw, "occ-common-area size is validated"); } } if (ok) { rc = FWTS_OK; fwts_passed(fw, "Reserved memory validation tests passed"); } else { rc = FWTS_ERROR; fwts_failed(fw, LOG_LEVEL_HIGH, "ReservMemTestFail", "One or few Reserved Memory DT" " validation tests failed"); } out_free_regions: free(regions); return rc; } static fwts_framework_minor_test reserv_mem_tests[] = { { reserv_mem_limits_test, "OPAL Reserved memory DT Validation Info" }, { NULL, NULL } }; static fwts_framework_ops reserv_mem_tests_ops = { .description = "OPAL Reserved memory DT Validation Test", .init = reserv_mem_init, .minor_tests = reserv_mem_tests }; FWTS_REGISTER_FEATURES("reserv_mem", &reserv_mem_tests_ops, FWTS_TEST_EARLY, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV, FWTS_FW_FEATURE_DEVICETREE) src/pci/000077500000000000000000000000001465205512700124275ustar00rootroot00000000000000src/pci/aspm/000077500000000000000000000000001465205512700133675ustar00rootroot00000000000000src/pci/aspm/aspm.c000066400000000000000000000221131465205512700144720ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) #include #include #include #include #include #include #include #include #include #include #include #include #include /* PCI Express Capability Structure Fields */ #define FWTS_PCIE_ASPM_SUPPORT_L0_FIELD 0x0400 #define FWTS_PCIE_ASPM_SUPPORT_L1_FIELD 0x0800 #define FWTS_PCIE_ASPM_SUPPORT_FIELD (FWTS_PCIE_ASPM_SUPPORT_L0_FIELD | FWTS_PCIE_ASPM_SUPPORT_L1_FIELD) #define FWTS_PCIE_ASPM_CONTROL_L0_FIELD 0x0001 #define FWTS_PCIE_ASPM_CONTROL_L1_FIELD 0x0002 #define FWTS_PCIE_ASPM_CONTROL_FIELD (FWTS_PCIE_ASPM_CONTROL_L0_FIELD | FWTS_PCIE_ASPM_CONTROL_L1_FIELD) static int facp_get_aspm_control(fwts_framework *fw) { fwts_acpi_table_info *table; fwts_acpi_table_fadt *fadt; if (fwts_acpi_find_table(fw, "FACP", 0, &table) != FWTS_OK) { return FWTS_ERROR; } if (table == NULL) return FWTS_ERROR; fadt = (fwts_acpi_table_fadt*)table->data; if ((fadt->iapc_boot_arch & FWTS_FACP_IAPC_BOOT_ARCH_PCIE_ASPM_CONTROLS) == 0) { fwts_log_info(fw, "PCIe ASPM is controlled by Linux kernel."); } else { fwts_log_info(fw, "PCIe ASPM is not controlled by Linux kernel."); fwts_advice(fw, "BIOS reports that Linux kernel should not modify ASPM " "settings that BIOS configured. It can be intentional " "because hardware vendors identified some capability " "bugs between the motherboard and the add-on cards."); } return FWTS_OK; } static int pcie_compare_rp_dev_aspm_registers(fwts_framework *fw, fwts_pci_device *rp, fwts_pci_device *dev) { fwts_pcie_capability *rp_cap, *device_cap; uint8_t rp_aspm_cntrl, device_aspm_cntrl; uint8_t next_cap; int ret = FWTS_OK; bool l0s_disabled = false, l1_disabled = false; next_cap = rp->config[FWTS_PCI_CONFIG_TYPE1_CAPABILITY_POINTER]; rp_cap = (fwts_pcie_capability *) &rp->config[next_cap]; while (rp_cap->pcie_cap_id != FWTS_PCI_EXPRESS_CAP_ID) { if (rp_cap->next_cap_point == FWTS_PCI_CAPABILITIES_LAST_ID) break; next_cap = rp_cap->next_cap_point; rp_cap = (fwts_pcie_capability *) &rp->config[next_cap]; } if (rp_cap) { uint8_t device_type = (rp_cap->pcie_cap_reg & FWTS_PCI_EXP_FLAGS_TYPE) >> 4; if ((device_type != FWTS_PCI_EXP_TYPE_ROOT_PORT) && (device_type != FWTS_PCI_EXP_TYPE_DOWNSTREAM_PORT) && (device_type != FWTS_PCI_EXP_TYPE_PCIE_BRIDGE)) { return ret; } } next_cap = dev->config[FWTS_PCI_CONFIG_TYPE1_CAPABILITY_POINTER]; device_cap = (fwts_pcie_capability *)&dev->config[next_cap]; while (device_cap->pcie_cap_id != FWTS_PCI_EXPRESS_CAP_ID) { if (device_cap->next_cap_point == FWTS_PCI_CAPABILITIES_LAST_ID) break; next_cap = device_cap->next_cap_point; device_cap = (fwts_pcie_capability *)&dev->config[next_cap]; } if (((rp_cap->link_cap & FWTS_PCIE_ASPM_SUPPORT_L0_FIELD) >> 10) != (rp_cap->link_contrl & FWTS_PCIE_ASPM_CONTROL_L0_FIELD)) { fwts_warning(fw, "RP %04Xh:%02Xh:%02Xh.%02Xh L0s not enabled.", rp->segment, rp->bus, rp->dev, rp->func); l0s_disabled = true; } if (((rp_cap->link_cap & FWTS_PCIE_ASPM_SUPPORT_L1_FIELD) >> 10) != (rp_cap->link_contrl & FWTS_PCIE_ASPM_CONTROL_L1_FIELD)) { fwts_warning(fw, "RP %04Xh:%02Xh:%02Xh.%02Xh L1 not enabled.", rp->segment, rp->bus, rp->dev, rp->func); l1_disabled = true; } if (((device_cap->link_cap & FWTS_PCIE_ASPM_SUPPORT_L0_FIELD) >> 10) != (device_cap->link_contrl & FWTS_PCIE_ASPM_CONTROL_L0_FIELD)) { fwts_warning(fw, "Device %04Xh:%02Xh:%02Xh.%02Xh L0s not enabled.", dev->segment, dev->bus, dev->dev, dev->func); l0s_disabled = true; } if (((device_cap->link_cap & FWTS_PCIE_ASPM_SUPPORT_L1_FIELD) >> 10) != (device_cap->link_contrl & FWTS_PCIE_ASPM_CONTROL_L1_FIELD)) { fwts_warning(fw, "Device %04Xh:%02Xh:%02Xh.%02Xh L1 not enabled.", dev->segment, dev->bus, dev->dev, dev->func); l1_disabled = true; } if (l0s_disabled) { fwts_advice(fw, "The ASPM L0s low power Link state is optimized for " "short entry and exit latencies, while providing " "substantial power savings. Disabling L0s of a PCIe " "device may increase power consumption, and will " "impact the battery life of a mobile system."); } if (l1_disabled) { fwts_advice(fw, "The ASPM L1 low power Link state is optimized for " "maximum power savings with longer entry and exit " "latencies. Disabling L1 of a PCIe device may " "increases power consumption, and will impact the " "battery life of a mobile system significantly."); } rp_aspm_cntrl = rp_cap->link_contrl & FWTS_PCIE_ASPM_CONTROL_FIELD; device_aspm_cntrl = device_cap->link_contrl & FWTS_PCIE_ASPM_CONTROL_FIELD; if (rp_aspm_cntrl != device_aspm_cntrl) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "PCIEASPM_Unmatched", "PCIe ASPM setting was not matched."); fwts_log_error(fw, "RP %04Xh:%02Xh:%02Xh.%02Xh has ASPM = %02Xh." , rp->segment, rp->bus, rp->dev, rp->func, rp_aspm_cntrl); fwts_log_error(fw, "Device %04Xh:%02Xh:%02Xh.%02Xh has ASPM = %02Xh.", dev->segment, dev->bus, dev->dev, dev->func, device_aspm_cntrl); fwts_advice(fw, "ASPM control registers between root port and device " "must match in order for ASPM to be active. Unmatched " "configuration indicates software did not configure " "ASPM correctly and the system is not saving power " "at its full potential."); } else { fwts_passed(fw, "PCIe ASPM setting matched was matched."); } return ret; } static int pcie_check_aspm_registers(fwts_framework *fw) { DIR *dirp; struct dirent *entry; fwts_list dev_list; fwts_list_link *lcur, *ltarget; fwts_list_init(&dev_list); if ((dirp = opendir(FWTS_PCI_DEV_PATH)) == NULL) { fwts_log_warning(fw, "Could not open %s.", FWTS_PCI_DEV_PATH); return FWTS_ERROR; } while ((entry = readdir(dirp)) != NULL) { uint8_t bus, dev, func; uint16_t segment; if (entry->d_name[0] == '.') continue; if (sscanf(entry->d_name, "%" SCNx16 ":%" SCNx8 ":%" SCNx8 ".%" SCNx8, &segment, &bus, &dev, &func) == 4) { int fd; char path[PATH_MAX]; fwts_pci_device *device; device = (fwts_pci_device *)calloc(1, sizeof(fwts_pci_device)); if (device == NULL) { fwts_list_free_items(&dev_list, free); closedir(dirp); return FWTS_ERROR; } device->segment = segment; device->bus = bus; device->dev = dev; device->func = func; snprintf(path, sizeof(path), FWTS_PCI_DEV_PATH "/%s/config", entry->d_name); if ((fd = open(path, O_RDONLY)) < 0) { fwts_log_warning(fw, "Could not open config from PCI device %s\n", entry->d_name); free(device); continue; } if (read(fd, device->config, sizeof(device->config)) < 0) { fwts_log_warning(fw, "Could not read config from PCI device %s\n", entry->d_name); free(device); (void)close(fd); continue; } (void)close(fd); fwts_list_append(&dev_list, device); } } closedir(dirp); /* Check aspm registers from the list of pci devices */ for (lcur = dev_list.head; lcur; lcur = lcur->next) { fwts_pci_device *cur = (fwts_pci_device *)lcur->data; /* Find PCI Bridge (PCIE Root Port) and the attached device */ if (cur->config[FWTS_PCI_CONFIG_HEADER_TYPE] & 0x01) { for (ltarget = dev_list.head; ltarget; ltarget = ltarget->next) { fwts_pci_device *target = (fwts_pci_device *)ltarget->data; if (target->segment == cur->segment) { if (target->bus == cur->config[FWTS_PCI_CONFIG_TYPE1_SECONDARY_BUS_NUMBER]) { pcie_compare_rp_dev_aspm_registers(fw, cur, target); break; } } } } } fwts_list_free_items(&dev_list, free); return FWTS_OK; } static int aspm_check_configuration(fwts_framework *fw) { int ret; ret = facp_get_aspm_control(fw); if (ret == FWTS_ERROR) fwts_skipped(fw, "No valid FACP information present: cannot test ASPM."); return ret; } static int aspm_pcie_register_configuration(fwts_framework *fw) { int ret; ret = pcie_check_aspm_registers(fw); if (ret == FWTS_ERROR) fwts_skipped(fw, "Cannot sanity check PCIe register configuration."); return ret; } static fwts_framework_minor_test aspm_tests[] = { { aspm_check_configuration, "PCIe ASPM ACPI test." }, { aspm_pcie_register_configuration, "PCIe ASPM registers test." }, { NULL, NULL } }; static fwts_framework_ops aspm_ops = { .description = "PCIe ASPM test.", .minor_tests = aspm_tests }; FWTS_REGISTER("aspm", &aspm_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/pci/crs/000077500000000000000000000000001465205512700132165ustar00rootroot00000000000000src/pci/crs/crs.c000066400000000000000000000112721465205512700141540ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL static int crs_get_bios_date(fwts_framework *fw, int *day, int *mon, int *year) { char *date; static const char *bios_date = "/sys/class/dmi/id/bios_date"; *mon = *day = *year = 0; if ((date = fwts_get(bios_date)) == NULL) { fwts_log_error(fw, "Cannot read %s.", bios_date); return FWTS_ERROR; } /* Assume mon/day/year, but we only care about the year anyway */ sscanf(date, "%d/%d/%d", mon, day, year); free(date); return FWTS_OK; } static int crs_test1(fwts_framework *fw) { fwts_list *klog; int day, mon, year; char *cmdline; if ((cmdline = fwts_get("/proc/cmdline")) == NULL) { fwts_log_error(fw, "Cannot read /proc/cmdline"); return FWTS_ERROR; } if (crs_get_bios_date(fw, &day, &mon, &year) != FWTS_OK) { fwts_log_error(fw, "Cannot determine age of BIOS."); free(cmdline); return FWTS_ERROR; } if ((klog = fwts_klog_read()) == NULL) { fwts_log_error(fw, "Cannot read kernel log."); free(cmdline); return FWTS_ERROR; } if (fwts_klog_regex_find(fw, klog, "PCI: Ignoring host bridge windows from ACPI;") > 0) { if (strstr(cmdline, "pci=nocrs") != NULL) { fwts_skipped(fw, "Kernel was booted with pci=nocrs, Ignoring host bridge windows _CRS settings from ACPI, skipping test."); } else { if (year == 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "BIOSTooOld", "The kernel could not determine the BIOS age " "and has assumed that your BIOS is too old to correctly " "specify the host bridge MMIO aperture using _CRS."); fwts_log_advice(fw, "You can override this by booting with \"pci=use_crs\"."); } else if (year < 2008) { fwts_passed(fw, "The kernel has detected an old BIOS (%d/%d/%d) " "and has assumed that your BIOS is too old to correctly " "specify the host bridge MMIO aperture using _CRS.", mon, day, year); fwts_log_advice(fw, "You can override this by booting with \"pci=use_crs\"."); } else { fwts_failed(fw, LOG_LEVEL_MEDIUM, "HostBridgeWindows", "The kernel is ignoring host bridge windows from ACPI for some unknown reason. " "pci=nocrs has not been used as a boot parameter and the BIOS may be recent enough " "to support this (%d/%d/%d)", mon, day, year); } } } else if (fwts_klog_regex_find(fw, klog, "PCI: Using host bridge windows from ACPI;") > 0) { if (strstr(cmdline, "pci=use_crs") != NULL) { if (year == 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "BIOSNoReleaseDate", "The BIOS does not seem to have release date, hence pci=use_crs was required."); } else if (year < 2008) { fwts_passed(fw, "The BIOS is relatively old (%d/%d/%d) and hence pci=use_crs was required to " "enable host bridge windows _CRS settings from ACPI.", mon, day, year); } else { fwts_failed(fw, LOG_LEVEL_LOW, "BIOSSupportBridgeWindows", "Kernel was booted with pci=use_crs but this may be uncessary as " "the BIOS is new enough to support automatic bridge windows configuring using _CRS from ACPI. " "However, the workaround may be necessary because _CRS is incorrect or not implemented in the " "DSDT."); } } else { fwts_passed(fw, "The kernel has detected a BIOS newer than the end of 2007 (%d/%d/%d) " "and has assumed that your BIOS can correctly " "specify the host bridge MMIO aperture using _CRS. If this does not work " "correctly you can override this by booting with \"pci=nocrs\".", mon, day, year); } } else { fwts_skipped(fw, "Cannot find host bridge message in kernel log, skipping test."); } fwts_list_free(klog, free); free(cmdline); return FWTS_OK; } static fwts_framework_minor_test crs_tests[] = { { crs_test1, "Test PCI host bridge configuration using _CRS." }, { NULL, NULL }, }; static fwts_framework_ops crs_ops = { .description = "Test PCI host bridge configuration using _CRS.", .minor_tests = crs_tests }; FWTS_REGISTER("crs", &crs_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/pci/maxreadreq/000077500000000000000000000000001465205512700145605ustar00rootroot00000000000000src/pci/maxreadreq/maxreadreq.c000066400000000000000000000132161465205512700170600ustar00rootroot00000000000000/* * Copyright (C) 2006, Intel Corporation * Copyright (C) 2010-2024 Canonical * * This file was original part of the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #include #include #include #include #include #include #include #include #include static int maxreadreq_init(fwts_framework *fw) { if (access(FWTS_PCI_DEV_PATH, R_OK) < 0) { fwts_log_info(fw, "Could not access %s, skipping test", FWTS_PCI_DEV_PATH); return FWTS_SKIP; } return FWTS_OK; } /* * This test checks if MaxReadReq is set > 128 for non-internal stuff * A too low value hurts performance */ static int maxreadreq_test1(fwts_framework *fw) { DIR *dirp; struct dirent *entry; int warnings = 0; if ((dirp = opendir(FWTS_PCI_DEV_PATH)) == NULL) { fwts_log_warning(fw, "Could not open %s.", FWTS_PCI_DEV_PATH); return FWTS_ERROR; } while ((entry = readdir(dirp)) != NULL) { char path[PATH_MAX]; uint8_t config[256]; int fd; ssize_t n; uint8_t offset = 0; uint16_t vendor_id; if (entry->d_name[0] == '.') continue; /* Read Config space */ snprintf(path, sizeof(path), FWTS_PCI_DEV_PATH "/%s/config", entry->d_name); if ((fd = open(path, O_RDONLY)) < 0) { fwts_log_warning(fw, "Could not open %s PCI config data\n", entry->d_name); continue; } if ((n = read(fd, config, sizeof(config))) < 0) { fwts_log_warning(fw, "Could not read %s PCI config data\n", entry->d_name); (void)close(fd); continue; } (void)close(fd); /* Ignore Host Bridge */ if ((config[FWTS_PCI_CONFIG_CLASS_CODE] == FWTS_PCI_CLASS_CODE_BRIDGE_CONTROLLER) && (config[FWTS_PCI_CONFIG_SUBCLASS] == FWTS_PCI_SUBCLASS_CODE_HOST_BRIDGE)) continue; /* Ignore PCI Bridge */ if ((config[FWTS_PCI_CONFIG_CLASS_CODE] == FWTS_PCI_CLASS_CODE_BRIDGE_CONTROLLER) && (config[FWTS_PCI_CONFIG_SUBCLASS] == FWTS_PCI_SUBCLASS_CODE_PCI_TO_PCI_BRIDGE)) continue; /* Ignore System Peripheral */ if ((config[FWTS_PCI_CONFIG_CLASS_CODE] == FWTS_PCI_CLASS_CODE_BASE_SYSTEM_PERIPHERALS) && (config[FWTS_PCI_CONFIG_SUBCLASS] == FWTS_PCI_SUBCLASS_CODE_OTHER_SYSTEM_PERIPHERAL)) continue; /* Ignore Audio Device */ if ((config[FWTS_PCI_CONFIG_CLASS_CODE] == FWTS_PCI_CLASS_CODE_MULTIMEDIA_CONTROLLER) && (config[FWTS_PCI_CONFIG_SUBCLASS] == FWTS_PCI_SUBCLASS_CODE_AUDIO_DEVICE)) continue; /* Ignore Intel's Video Device */ vendor_id = config[FWTS_PCI_CONFIG_VENDOR_ID] + ((config[FWTS_PCI_CONFIG_VENDOR_ID + 1]) << 8); if ((config[FWTS_PCI_CONFIG_CLASS_CODE] == FWTS_PCI_CLASS_CODE_DISPLAY_CONTROLLER) && (vendor_id == FWTS_PCI_INTEL_VENDOR_ID)) continue; /* config region too small, do next */ if (n < FWTS_PCI_CONFIG_TYPE0_CAPABILITIES_POINTER) continue; offset = config[FWTS_PCI_CONFIG_TYPE0_CAPABILITIES_POINTER]; /* * Step through capability structures and * examine MaxReadReq settings */ while ((offset != FWTS_PCI_CAPABILITIES_LAST_ID) && (offset > 0) && ((ssize_t)(offset + sizeof(fwts_pcie_capability)) <= n)) { fwts_pcie_capability *cap = (fwts_pcie_capability *)&config[offset]; if (cap->pcie_cap_id == FWTS_PCI_EXPRESS_CAP_ID) { uint32_t max_readreq = 128 << ((cap->device_contrl >> 12) & 0x3); if (max_readreq <= 128) { fwts_log_warning(fw, "MaxReadReq for %s is low (%" PRIu32 ").", entry->d_name, max_readreq); warnings++; } } offset = cap->next_cap_point; } } (void)closedir(dirp); if (warnings > 0) { fwts_failed(fw, LOG_LEVEL_LOW, "LowMaxReadReq", "%d devices have low MaxReadReq settings. " "Firmware may have configured these too low.", warnings); fwts_advice(fw, "The MaxReadRequest size is set too low and will affect performance. " "It will provide excellent bus sharing at the cost of bus data transfer " "rates. Although not a critical issue, it may be worth considering setting " "the MaxReadRequest size to 256 or 512 to increase throughput on the PCI " "Express bus. Some drivers (for example the Brocade Fibre Channel driver) " "allow one to override the firmware settings. Where possible, this BIOS " "configuration setting is worth increasing it a little more for better " "performance at a small reduction of bus sharing. Note it is safe to " "ignore this failure if the register is hardwired to zero per PCIe spec."); } else fwts_passed(fw, "All devices have MaxReadReq set > 128."); return FWTS_OK; } static fwts_framework_minor_test maxreadreq_tests[] = { { maxreadreq_test1, "Test firmware settings MaxReadReq for PCI Express devices." }, { NULL, NULL }, }; static fwts_framework_ops maxreadreq_ops = { .init = maxreadreq_init, .description = "Test firmware has set PCI Express MaxReadReq to a higher value on non-motherboard devices.", .minor_tests = maxreadreq_tests }; FWTS_REGISTER("maxreadreq", &maxreadreq_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) src/pci/smccc/000077500000000000000000000000001465205512700135175ustar00rootroot00000000000000src/pci/smccc/smccc.c000066400000000000000000000201741465205512700147570ustar00rootroot00000000000000/* * * Copyright (C) 2021-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_AARCH64 #include #include #include #include #include #include #include #include #include "smccc_test.h" /* * ARM SMCCC tests, * https://developer.arm.com/documentation/den0115/latest */ /* SMCCC conduit types */ enum { FWTS_SMCCC_CONDUIT_NONE, FWTS_SMCCC_CONDUIT_SMC, FWTS_SMCCC_CONDUIT_HVC, }; /* SMCCC API function ids */ #define PCI_VERSION (0x84000130) #define PCI_FEATURES (0x84000131) #define PCI_READ (0x84000132) #define PCI_WRITE (0x84000133) #define PCI_GET_SEG_INFO (0x84000134) /* SMCCC API id to name mapping */ typedef struct { const uint32_t pci_func_id; const char *pci_func_id_name; bool implemented; } pci_func_id_t; static pci_func_id_t pci_func_ids[] = { { PCI_VERSION, "PCI_VERSION", false }, { PCI_FEATURES, "PCI_FEATURES", false }, { PCI_READ, "PCI_READ", false }, { PCI_WRITE, "PCI_WRITE", false }, { PCI_GET_SEG_INFO, "PCI_GET_SEG_INFO", false }, }; static const char *module_name = "smccc_test"; static const char *dev_name = "/dev/smccc_test"; static bool module_loaded; static int smccc_fd = -1; static int smccc_init(fwts_framework *fw) { if (fwts_module_load(fw, module_name) != FWTS_OK) { module_loaded = false; smccc_fd = -1; return FWTS_ERROR; } smccc_fd = open(dev_name, O_RDWR); if (smccc_fd < 0) { smccc_fd = -1; fwts_log_error(fw, "Cannot open %s, errno=%d (%s)\n", dev_name, errno, strerror(errno)); } return FWTS_OK; } static int smccc_deinit(fwts_framework *fw) { if (smccc_fd >= 0) { close(smccc_fd); smccc_fd = -1; } if (module_loaded && fwts_module_unload(fw, module_name) != FWTS_OK) return FWTS_ERROR; module_loaded = true; return FWTS_OK; } /* * smccc_pci_conduit_name() * map the conduit number to human readable string */ static char *smccc_pci_conduit_name(struct smccc_test_arg *arg) { static char unknown[32]; switch (arg->conduit) { case FWTS_SMCCC_CONDUIT_NONE: return "SMCCC_CONDUIT_NONE"; case FWTS_SMCCC_CONDUIT_HVC: return "SMCCC_CONDUIT_HVC"; case FWTS_SMCCC_CONDUIT_SMC: return "SMCCC_CONDUIT_SMC"; default: break; } snprintf(unknown, sizeof(unknown), "Unknown: 0x%x", arg->conduit); return unknown; } /* * smccc_pci_conduit_check() * check if conduit number is valid */ static int smccc_pci_conduit_check(fwts_framework *fw, struct smccc_test_arg *arg) { switch (arg->conduit) { case FWTS_SMCCC_CONDUIT_HVC: return FWTS_OK; case FWTS_SMCCC_CONDUIT_SMC: return FWTS_OK; default: fwts_log_error(fw, "Invalid SMCCC conduit used: %s\n", smccc_pci_conduit_name(arg)); return FWTS_ERROR; } return FWTS_OK; } /* * smccc_pci_func_implemented() * return true if function has been implemented, only valid * once smccc_pci_features_test has been run. */ static bool smccc_pci_func_implemented(const uint32_t pci_func_id) { size_t i; for (i = 0; i < FWTS_ARRAY_SIZE(pci_func_ids); i++) { if (pci_func_ids[i].pci_func_id == pci_func_id) return pci_func_ids[i].implemented; } return false; } /* * smccc_pci_version_test() * test SMCCC function PCI_VERSION */ static int smccc_pci_version_test(fwts_framework *fw) { int ret; struct smccc_test_arg arg = { }; arg.size = sizeof(arg); arg.w[0] = PCI_VERSION; ret = ioctl(smccc_fd, SMCCC_TEST_PCI_VERSION, &arg); if (ret < 0) { fwts_log_error(fw, "SMCCC test driver ioctl SMCCC_TEST_PCI_VERSION " "failed, errno=%d (%s)\n", errno, strerror(errno)); return FWTS_ERROR; } if (smccc_pci_conduit_check(fw, &arg) != FWTS_OK) return FWTS_ERROR; fwts_log_info_verbatim(fw, " SMCCC conduit type: 0x%x ('%s')", arg.conduit, smccc_pci_conduit_name(&arg)); fwts_log_info_verbatim(fw, " Major Rev: 0x%" PRIx16 ", Minor Rev: 0x%" PRIx16, (arg.w[0] >> 16) & 0xffff, arg.w[0] & 0xffff); fwts_passed(fw, "SMCCC v1.0 PCI_VERSION passed"); return FWTS_OK; } /* * smccc_pci_features_test() * test SMCCC function PCI_FEATURES */ static int smccc_pci_features_test(fwts_framework *fw) { struct smccc_test_arg arg = { }; int implemented_funcs = 0; bool passed = true; static const char *test = "SMCCC v1.0 PCI_FEATURES"; size_t i; /* * Check SMCCC functions are implemented in the firmware */ for (i = 0; i < FWTS_ARRAY_SIZE(pci_func_ids); i++) { int ret; memset(&arg, 0, sizeof(arg)); /* Assume it is not implemented */ pci_func_ids[i].implemented = false; arg.size = sizeof(arg); arg.w[0] = PCI_FEATURES; arg.w[1] = pci_func_ids[i].pci_func_id; ret = ioctl(smccc_fd, SMCCC_TEST_PCI_FEATURES, &arg); if (ret < 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SMCCC_PCI_VERSION", "SMCCC test driver ioctl SMCCC_TEST_PCI_FEATURES " "failed, errno=%d (%s)\n", errno, strerror(errno)); } else { const bool implemented = (int)arg.w[0] >= 0; fwts_log_info_verbatim(fw, " function 0x%x %-18.18s: %simplemented (%x)", pci_func_ids[i].pci_func_id, pci_func_ids[i].pci_func_id_name, implemented ? "" : "not ", arg.w[0]); if (implemented) { pci_func_ids[i].implemented = true; implemented_funcs++; } } } if (implemented_funcs == 0) fwts_log_warning(fw, "Note: No PCI functions were implemented"); if (passed) fwts_passed(fw, "%s", test); return FWTS_OK; } /* * smccc_pci_get_seg_info() * test SMCCC function PCI_GET_SEG_INFO */ static int smccc_pci_get_seg_info(fwts_framework *fw) { struct smccc_test_arg arg = { }; int segments = 0; bool passed = true; static const char *test = "SMCCC v1.0 PCI_GET_SEG_INFO"; int i; if (!smccc_pci_func_implemented(PCI_GET_SEG_INFO)) { fwts_skipped(fw, "%s: not enabled on this platform", test); return EXIT_SUCCESS; } /* * Scan over all potential 65536 segment infos.. */ for (i = 0; i <= 0xffff; i++) { int ret; memset(&arg, 0, sizeof(arg)); arg.size = sizeof(arg); arg.w[0] = PCI_GET_SEG_INFO; arg.w[1] = i & 0xffff; ret = ioctl(smccc_fd, SMCCC_TEST_PCI_GET_SEG_INFO, &arg); if (ret < 0) { passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, "SMCCC_PCI_VERSION", "SMCCC test driver ioctl PCI_GET_SEG_INFO " "failed, errno=%d (%s)\n", errno, strerror(errno)); break; } else { if (arg.w[0] == 0) { const uint8_t pci_bus_start = arg.w[1] & 0xff; const uint8_t pci_bus_end = (arg.w[1] >> 8) & 0xff; const uint32_t next_seg = arg.w[2]; fwts_log_info_verbatim(fw, " PCI segment %4x: Bus 0x%2.2x .. 0x%2.2x", i, (int)pci_bus_start, (int)pci_bus_end); segments++; /* * a zero next segment id marks the end * of the segment information structs */ if (next_seg == 0) break; /* if next_seg is valid skip to this */ if (next_seg <= 0xffff) i = next_seg; } else { fwts_log_info_verbatim(fw, " PCI segment %4x: error return: %x\n", i, arg.w[0]); break; } } } if (segments == 0) fwts_log_warning(fw, "No PCI segments were found"); if (passed) fwts_passed(fw, "%s", test); return FWTS_OK; } static fwts_framework_minor_test smccc_tests[] = { { smccc_pci_version_test, "Test PCI_VERSION" }, { smccc_pci_features_test, "Test PCI_FEATURES" }, { smccc_pci_get_seg_info, "Test PCI_GET_SEG_INFO" }, { NULL, NULL } }; static fwts_framework_ops smcccops = { .description = "ARM64 PCI SMMCCC tests.", .init = smccc_init, .deinit = smccc_deinit, .minor_tests = smccc_tests }; FWTS_REGISTER("smccc", &smcccops, FWTS_TEST_ANYTIME, FWTS_FLAG_UNSAFE | FWTS_FLAG_ROOT_PRIV) #endif src/sbbr/000077500000000000000000000000001465205512700126045ustar00rootroot00000000000000src/sbbr/acpitables/000077500000000000000000000000001465205512700147135ustar00rootroot00000000000000src/sbbr/acpitables/acpitables.c000066400000000000000000000254761465205512700172040ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Copyright (C) 2017-2021 ARM Ltd * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) && (FWTS_ARCH_AARCH64) #include "acpi.h" #include "accommon.h" #include "acnamesp.h" #include "actables.h" #include #include #include #include #include #include #include #include #include #include "fwts_acpi_object_eval.h" #define TABLE_NAME_LEN (16) #define MIN_SIG ( 4) #define OEM_ID ( 6) #define OEM_TABLE_ID ( 8) #define OEM_CREATOR_ID ( 4) static const fwts_acpi_table_spcr *spcr; static bool acpi_table_check_field(const char *field, const size_t len) { size_t i; for (i = 0; i < len; i++) if (!isascii(field[i])) return false; return true; } static bool acpi_table_check_field_test( fwts_framework *fw, const char *table_name, const char *field_name, const char *field, const size_t len) { if (!acpi_table_check_field(field, len)) { fwts_failed(fw, LOG_LEVEL_LOW, "ACPITableHdrInfo", "ACPI Table %s has non-ASCII characters in " "header field %s", table_name, field_name); return false; } return true; } /* Callback function used when searching for processor devices in namespace. */ static ACPI_STATUS processor_handler(ACPI_HANDLE ObjHandle, uint32_t level, void *context, void **returnvalue) { ACPI_NAMESPACE_NODE *node = (ACPI_NAMESPACE_NODE *)ObjHandle; ACPI_NAMESPACE_NODE *parent = node->Parent; /* Unused parameters trigger errors. */ FWTS_UNUSED(level); FWTS_UNUSED(context); /* If the processor device is not located under _SB_, increment the error_count. */ if (strncmp(parent->Name.Ascii, "_SB_", sizeof(int32_t)) != 0) { int error_count; error_count = *((int *)returnvalue); error_count++; *((int *)returnvalue) = error_count; } /* Return 0 so namespace search continues. */ return 0; } /* Test function that makes sure processors are under the _SB_ namespace. */ static int acpi_table_sbbr_namespace_check_test1(fwts_framework *fw) { int error_count = 0; /* Initializing ACPICA library so we can call AcpiWalkNamespace. */ if (fwts_acpica_init(fw) != FWTS_OK) return FWTS_ERROR; PRAGMA_PUSH PRAGMA_NULL_PTR_MATH /* Searching for all processor devices in the namespace. */ AcpiWalkNamespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, processor_handler, NULL, NULL, (void **)&error_count); PRAGMA_POP /* Deinitializing ACPICA, if we don't call this the terminal will break on exit. */ fwts_acpica_deinit(); /* error_count variable counts the number of processors outside of the _SB_ namespace. */ if (error_count > 0) fwts_failed(fw, LOG_LEVEL_HIGH, "SbbrAcpiCpuWrongNamespace", "%d Processor devices " "were found outside of the _SB_ namespace.", error_count); else fwts_passed(fw, "All processor devices were located in the _SB_ namespace."); return FWTS_OK; } static int acpi_table_sbbr_check_test2(fwts_framework *fw) { int i; bool checked = false; bool dsdt_checked = false; bool ssdt_checked = false; for (i = 0; ; i++) { fwts_acpi_table_info *info; if (fwts_acpi_get_table(fw, i, &info) != FWTS_OK) break; if (info == NULL) continue; checked = true; if (!strcmp(info->name, "DSDT") || !strcmp(info->name, "SSDT")) { fwts_acpi_table_header *hdr; char name[TABLE_NAME_LEN]; bool passed = false; if (!strcmp(info->name, "DSDT")) { dsdt_checked = true; } if (!strcmp(info->name, "SSDT")) { ssdt_checked = true; } hdr = (fwts_acpi_table_header *)info->data; if (acpi_table_check_field(hdr->signature, MIN_SIG)) { snprintf(name, sizeof(name), "%4.4s", hdr->signature); } else { /* Table name not printable, so identify it by the address */ snprintf(name, sizeof(name), "at address 0x%" PRIx64, info->addr); } /* * Tables shouldn't be short, however, they do have at * least 4 bytes with their signature else they would not * have been loaded by this stage. */ if (hdr->length < sizeof(fwts_acpi_table_header)) { fwts_failed(fw, LOG_LEVEL_HIGH, "ACPITableHdrShort", "ACPI Table %s is too short, only %d bytes long. Further " "header checks will be omitted.", name, hdr->length); continue; } /* Warn about empty tables */ if (hdr->length == sizeof(fwts_acpi_table_header)) { fwts_warning(fw, "ACPI Table %s is empty and just contains a table header. Further " "header checks will be omitted.", name); continue; } passed = acpi_table_check_field_test(fw, name, "Signature", hdr->signature, MIN_SIG) & acpi_table_check_field_test(fw, name, "OEM ID", hdr->oem_id, OEM_ID) & acpi_table_check_field_test(fw, name, "OEM Table ID", hdr->oem_tbl_id, OEM_TABLE_ID) & acpi_table_check_field_test(fw, name, "Creator ID", hdr->creator_id, OEM_CREATOR_ID); if (passed) fwts_passed(fw, "Table %s has valid signature and ID strings.", name); } } if (!checked) { fwts_aborted(fw, "Cannot find any ACPI tables."); return FWTS_ABORTED; } if (!dsdt_checked) fwts_failed(fw, LOG_LEVEL_HIGH, "acpi_table_check_test4", "Test DSDT table is NOT implemented."); if (!ssdt_checked) fwts_warning(fw, "SSDT table is NOT implemented."); return FWTS_OK; } /* List of mandatory ACPI tables (SBBR 4.2.1) */ static const char *mandatory_acpi_tables[] = { "RSDP", "XSDT", "FACP", "DSDT", /* SSDT is optional */ "APIC", /* MADT */ "GTDT", "DBG2", "SPCR", "MCFG", "PPTT", NULL }; /* List of ACPI tables recommended by SBBR 4.2.2 */ static const char *recommended_acpi_tables[] = { /* I/O Topology */ "IORT", /* Platform Error Interfaces */ "BERT", "EINJ", "ERST", "HEST", "SDEI", "AEST", /* NUMA */ "SLIT", "SRAT", "HMAT", /* Platform Communications Channel (PCC) */ "PCCT", /* Platform Debug Trigger */ "PDTT", /* NVDIMM Firmware Interface */ "NFIT", /* Graphics Resource Table */ "BGRT", /* IPMI */ "SPMI", NULL }; /* Searches ACPI tables by signature. */ static fwts_acpi_table_info *sbbr_search_acpi_tables(fwts_framework *fw, const char *signature) { uint32_t i; fwts_acpi_table_info *info; i = 0; while (fwts_acpi_get_table(fw, i, &info) == FWTS_OK) { if (info != NULL && strncmp(info->name, signature, sizeof(uint32_t)) == 0) { return info; } i++; } return NULL; } static int acpi_table_sbbr_check_test3(fwts_framework *fw) { uint32_t i; for (i = 0; mandatory_acpi_tables[i] != NULL; i++) { fwts_acpi_table_info *info; info = sbbr_search_acpi_tables(fw, mandatory_acpi_tables[i]); if (info == NULL) { fwts_failed(fw, LOG_LEVEL_CRITICAL, "SBBRTableNotFound", "SBBR mandatory ACPI table \"%s\" not found.", mandatory_acpi_tables[i]); } else { fwts_passed(fw, "SBBR mandatory ACPI table \"%s\" found.", mandatory_acpi_tables[i]); } } for (i = 0; recommended_acpi_tables[i] != NULL; i++) { fwts_acpi_table_info *info; info = sbbr_search_acpi_tables(fw, recommended_acpi_tables[i]); if (info == NULL) { fwts_warning(fw, "SBBR Recommended ACPI table \"%s\" not found.", recommended_acpi_tables[i]); } else { fwts_passed(fw, "SBBR Recommended ACPI table \"%s\" found.", recommended_acpi_tables[i]); } } return FWTS_OK; } static int get_spcr_interface_type(fwts_framework *fw, uint8_t *type) { fwts_acpi_table_info *table; if (fwts_acpi_find_table(fw, "SPCR", 0, &table) != FWTS_OK) { fwts_log_error(fw, "Cannot read ACPI tables."); return FWTS_ERROR; } if (table == NULL || (table && table->length == 0)) { fwts_log_error(fw, "ACPI SPCR table does not exist, skipping test"); return FWTS_SKIP; } spcr = (const fwts_acpi_table_spcr*)table->data; *type = spcr->interface_type; return FWTS_OK; } static int find_spcr_devices(fwts_framework *fw, bool *found, uint8_t type) { const size_t name_len = 4; fwts_list_link *item; fwts_list *objects; if (fwts_acpi_init(fw) != FWTS_OK) { fwts_log_error(fw, "Cannot initialise ACPI."); return FWTS_ERROR; } if ((objects = fwts_acpi_object_get_names()) == NULL) { fwts_log_info(fw, "Cannot find any ACPI objects"); return FWTS_ERROR; } fwts_list_foreach(item, objects) { char *name = fwts_list_data(char*, item); const size_t len = strlen(name); if (strncmp("_HID", name + len - name_len, name_len) == 0) { ACPI_OBJECT_LIST arg_list; ACPI_BUFFER buf; ACPI_OBJECT *obj; int ret; arg_list.Count = 0; arg_list.Pointer = NULL; ret = fwts_acpi_object_evaluate(fw, name, &arg_list, &buf); if ((ACPI_FAILURE(ret) != AE_OK) || (buf.Pointer == NULL)) continue; obj = buf.Pointer; if (obj->Type == ACPI_TYPE_STRING) { if (!strcmp(obj->String.Pointer, "ARMH0011")) { *found = true; } else { if (type == 0x0e) { if (!strcmp(obj->String.Pointer, "ARMHB000")) *found = true; } } } free(buf.Pointer); } } fwts_acpi_deinit(fw); return FWTS_OK; } static int acpi_table_sbbr_check_test4(fwts_framework *fw) { uint8_t interface_type; int ret; bool found = false; ret = get_spcr_interface_type(fw, &interface_type); if (ret != FWTS_OK) return ret; if (interface_type == 0x03 || interface_type == 0x0e) { ret = find_spcr_devices(fw, &found, interface_type); if (ret != FWTS_OK) return ret; if (!found) { fwts_failed(fw, LOG_LEVEL_HIGH, "SBBRSPCRConsoleNotFound", "SPCR console devices not found for interface " "type 0x%2.2" PRIx8 ".", interface_type); } else fwts_passed(fw, "SBBR SPCR console devices found."); } else { fwts_skipped(fw, "Test skipped, SPCR interface type not 0x03 or 0x0E"); return FWTS_SKIP; } return FWTS_OK; } static fwts_framework_minor_test acpi_table_sbbr_check_tests[] = { { acpi_table_sbbr_namespace_check_test1, "Test that processors only exist in the _SB namespace." }, { acpi_table_sbbr_check_test2, "Test DSDT and SSDT tables are implemented." }, { acpi_table_sbbr_check_test3, "Check for mandatory and recommended ACPI tables." }, { acpi_table_sbbr_check_test4, "Check the existence of SPCR console devices." }, { NULL, NULL } }; static fwts_framework_ops acpi_table_sbbr_check_ops = { .description = "ACPI table headers sanity tests.", .minor_tests = acpi_table_sbbr_check_tests }; FWTS_REGISTER("acpi_sbbr", &acpi_table_sbbr_check_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_SBBR) #endif src/sbbr/fadt/000077500000000000000000000000001465205512700135225ustar00rootroot00000000000000src/sbbr/fadt/fadt.c000066400000000000000000000263471465205512700146200ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * Copyright (C) 2017-2021 ARM Ltd * Portions of this code original from the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) && (FWTS_ARCH_AARCH64) #include "fwts_acpi_object_eval.h" #include #include #include #include #include #include #include static const fwts_acpi_table_fadt *fadt; static int fadt_size; static int fadt_sbbr_init(fwts_framework *fw) { fwts_acpi_table_info *table; if (fwts_acpi_find_table(fw, "FACP", 0, &table) != FWTS_OK) { fwts_log_error(fw, "Cannot read ACPI table FACP."); return FWTS_ERROR; } if (table == NULL) { fwts_log_error(fw, "ACPI table FACP does not exist!"); return FWTS_ERROR; } fadt = (const fwts_acpi_table_fadt *)table->data; fadt_size = table->length; /* Not having a FADT is a failure on ARM SBBR Architecture */ if (fadt_size == 0) { fwts_log_error(fw, "ACPI table FACP has zero length!"); return FWTS_ERROR; } return FWTS_OK; } #define SBBR_VERSION(major, minor) ((((uint16_t)(major)) << 8) | (minor)) static int fadt_sbbr_revision(fwts_framework *fw) { const uint8_t SBBR_LATEST_MAJOR = 6; const uint8_t SBBR_LATEST_MINOR = 0; uint8_t major = fadt->header.revision; uint8_t minor = 0; fwts_get_fadt_version(fw, &major, &minor); fwts_log_info(fw, "FADT revision: %" PRIu8 ".%" PRIu8, major, minor); if (SBBR_VERSION(major, minor) >= SBBR_VERSION(SBBR_LATEST_MAJOR, SBBR_LATEST_MINOR)) fwts_passed(fw, "FADT revision is up to date."); else { fwts_failed(fw, LOG_LEVEL_CRITICAL, "fadt_revision:", "FADT revision is outdated: %" PRIu8 ".%" PRIu8, major, minor); } return FWTS_OK; } static int fadt_sbbr_reduced_hw(fwts_framework *fw) { bool rhw; bool passed; static const fwts_acpi_gas null_gas; uint32_t flag_mask; rhw = fwts_acpi_is_reduced_hardware(fw); if (rhw == FWTS_FALSE) fwts_failed(fw, LOG_LEVEL_CRITICAL, "fadt_reduced_hw:", "FADT indicates ACPI is not in reduced hardware mode."); else if(rhw == FWTS_TRUE) fwts_passed(fw, "FADT indicates ACPI is in reduced hardware mode."); else fwts_failed(fw, LOG_LEVEL_HIGH, "fadt_reduced_hw:", "ACPI table reads error."); if (!rhw) return FWTS_OK; passed = true; /* check all the fields that will be ignored * if the HW_REDUCED_ACPI flag in the table is set, * OSPM will ignore fields related to the ACPI HW register interface: * Fields at offsets 46 through 108 and 148 through 232, as well as * FADT Flag bits 1, 2, 3,7,8,12,13, 14, 16 and 17 */ if (fadt->sci_int != 0) { passed = false; fwts_log_warning(fw, "SCI_INT is non-zero: 0x%x", fadt->smi_cmd); } if (fadt->smi_cmd != 0) { passed = false; fwts_log_warning(fw, "SMI_CMD is non-zero: 0x%x", fadt->smi_cmd); } if (fadt->acpi_enable != 0) { passed = false; fwts_log_warning(fw, "ACPI_ENABLE is non-zero: 0x%x", fadt->acpi_enable); } if (fadt->acpi_disable != 0) { passed = false; fwts_log_warning(fw, "ACPI_DISABLE is non-zero: 0x%x", fadt->acpi_disable); } if (fadt->s4bios_req != 0) { passed = false; fwts_log_warning(fw, "S4BIOS_REQ is non-zero: 0x%x", fadt->s4bios_req); } if (fadt->pstate_cnt != 0) { passed = false; fwts_log_warning(fw, "PSTATE_CNT is non-zero: 0x%x", fadt->pstate_cnt); } if (fadt->pm1a_evt_blk != 0) { passed = false; fwts_log_warning(fw, "PM1A_EVT_BLK is non-zero: 0x%x", fadt->pm1a_evt_blk); } if (fadt->pm1b_evt_blk != 0) { passed = false; fwts_log_warning(fw, "PM1B_EVT_BLK is non-zero: 0x%x", fadt->pm1b_evt_blk); } if (fadt->pm1a_cnt_blk != 0) { passed = false; fwts_log_warning(fw, "PM1A_CNT_BLK is non-zero: 0x%x", fadt->pm1a_cnt_blk); } if (fadt->pm1b_cnt_blk != 0) { passed = false; fwts_log_warning(fw, "PM1B_CNT_BLK is non-zero: 0x%x", fadt->pm1b_cnt_blk); } if (fadt->pm2_cnt_blk != 0) { passed = false; fwts_log_warning(fw, "PM2_CNT_BLK is non-zero: 0x%x", fadt->pm2_cnt_blk); } if (fadt->pm_tmr_blk != 0) { passed = false; fwts_log_warning(fw, "PM_TMR_BLK is non-zero: 0x%x", fadt->pm_tmr_blk); } if (fadt->gpe0_blk != 0) { passed = false; fwts_log_warning(fw, "GPE0_BLK is non-zero: 0x%x", fadt->gpe0_blk); } if (fadt->gpe1_blk != 0) { passed = false; fwts_log_warning(fw, "GPE1_BLK is non-zero: 0x%x", fadt->gpe1_blk); } if (fadt->pm1_evt_len != 0) { passed = false; fwts_log_warning(fw, "PM1_EVT_LEN is non-zero: 0x%x", fadt->pm1_evt_len); } if (fadt->pm1_cnt_len != 0) { passed = false; fwts_log_warning(fw, "PM1_CNT_LEN is non-zero: 0x%x", fadt->pm1_cnt_len); } if (fadt->pm2_cnt_len != 0) { passed = false; fwts_log_warning(fw, "PM2_CNT_LEN is non-zero: 0x%x", fadt->pm2_cnt_len); } if (fadt->pm_tmr_len != 0) { passed = false; fwts_log_warning(fw, "PM_TMR_LEN is non-zero: 0x%x", fadt->pm_tmr_len); } if (fadt->gpe0_blk_len != 0) { passed = false; fwts_log_warning(fw, "GPE0_BLK_LEN is non-zero: 0x%x", fadt->gpe0_blk_len); } if (fadt->gpe1_blk_len != 0) { passed = false; fwts_log_warning(fw, "GPE1_BLK_LEN is non-zero: 0x%x", fadt->gpe1_blk_len); } if (fadt->gpe1_base != 0) { passed = false; fwts_log_warning(fw, "GPE1_BASE is non-zero: 0x%x", fadt->gpe1_base); } if (fadt->cst_cnt != 0) { passed = false; fwts_log_warning(fw, "CST_CNT is non-zero: 0x%x", fadt->cst_cnt); } if (fadt->p_lvl2_lat != 0) { passed = false; fwts_log_warning(fw, "P_LVL2_LAT is non-zero: 0x%x", fadt->p_lvl2_lat); } if (fadt->p_lvl3_lat != 0) { passed = false; fwts_log_warning(fw, "P_LVL3_LAT is non-zero: 0x%x", fadt->p_lvl3_lat); } if (fadt->flush_size != 0) { passed = false; fwts_log_warning(fw, "FLUSH_SIZE is non-zero: 0x%x", fadt->flush_size); } if (fadt->flush_stride != 0) { passed = false; fwts_log_warning(fw, "FLUSH_STRIDE is non-zero: 0x%x", fadt->flush_stride); } if (fadt->duty_offset != 0) { passed = false; fwts_log_warning(fw, "DUTY_OFFSET is non-zero: 0x%x", fadt->duty_offset); } if (fadt->duty_width != 0) { passed = false; fwts_log_warning(fw, "DUTY_WIDTH is non-zero: 0x%x", fadt->duty_width); } if (fadt->day_alrm != 0) { passed = false; fwts_log_warning(fw, "DAY_ALRM is non-zero: 0x%x", fadt->day_alrm); } if (fadt->mon_alrm != 0) { passed = false; fwts_log_warning(fw, "MON_ALRM is non-zero: 0x%x", fadt->mon_alrm); } if (fadt->century != 0) { passed = false; fwts_log_warning(fw, "CENTURY is non-zero: 0x%x", fadt->century); } if (memcmp((const void *)&fadt->x_pm1a_evt_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_warning(fw, "X_PM1A_EVT_BLK is a non-zero general " "address structure."); } if (memcmp((const void *)&fadt->x_pm1b_evt_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_warning(fw, "X_PM1B_EVT_BLK is a non-zero general " "address structure."); } if (memcmp((const void *)&fadt->x_pm1a_cnt_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_warning(fw, "X_PM1A_CNT_BLK is a non-zero general " "address structure."); } if (memcmp((const void *)&fadt->x_pm1b_cnt_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_warning(fw, "X_PM1B_CNT_BLK is a non-zero general " "address structure."); } if (memcmp((const void *)&fadt->x_pm2_cnt_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_warning(fw, "X_PM2_CNT_BLK is a non-zero general " "address structure."); } if (memcmp((const void *)&fadt->x_pm_tmr_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_warning(fw, "X_PM_TMR_BLK is a non-zero general " "address structure."); } if (memcmp((const void *)&fadt->x_gpe0_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_warning(fw, "X_GPE0_BLK is a non-zero general " "address structure."); } if (memcmp((const void *)&fadt->x_gpe1_blk, (const void *)&null_gas, sizeof(fwts_acpi_gas))) { passed = false; fwts_log_warning(fw, "X_GPE1_BLK is a non-zero general " "address structure."); } if (passed) fwts_passed(fw, "All FADT reduced hardware fields are zero."); else fwts_failed(fw, LOG_LEVEL_CRITICAL, "fadt_reduced_hw:", "Some FADT reduced hardware fields are non-zero, but it will be ignored by OSPM."); /* now check all the reserved flags */ flag_mask = FWTS_FACP_FLAG_WBINVD_FLUSH | FWTS_FACP_FLAG_PROC_C1 | FWTS_FACP_FLAG_P_LVL2_UP | FWTS_FACP_FLAG_RTC_S4 | FWTS_FACP_FLAG_TMR_VAL_EXT | FWTS_FACP_FLAG_CPU_SW_SLP | FWTS_FACP_FLAG_PCI_EXP_WAK | FWTS_FACP_FLAG_S4_RTC_STS_VALID | FWTS_FACP_FLAG_REMOTE_POWER_ON_CAPABLE; if (fadt->flags & flag_mask) fwts_failed(fw, LOG_LEVEL_CRITICAL, "fadt_reduced_hw:", "Some FADT reduced hardware flags are set, but it will be ignored by OSPM."); else fwts_passed(fw, "All FADT reduced hardware flags are not set."); if ((fadt->flags & FWTS_FACP_FLAG_FORCE_APIC_CLUSTER_MODEL) || (fadt->flags & FWTS_FACP_FLAG_FORCE_APIC_PHYSICAL_DESTINATION_MODE)) fwts_failed(fw, LOG_LEVEL_CRITICAL, "fadt_reduced_hw:", "FADT APIC flags are set for reduced hardware " "mode but may be irrelevant."); else fwts_passed(fw, "FADT APIC flags are not set in reduced " "hardware mode."); return FWTS_OK; } static int fadt_sbbr_boot_arch_psci_compliant(fwts_framework *fw) { /* ARM SBBR 4.2.1.3 FADT */ if (fadt->arm_boot_flags & FWTS_FACP_ARM_BOOT_ARCH_PSCI_COMPLIANT) fwts_passed(fw, "PSCI_COMPLIANT is set, PSCI is implemented."); else fwts_failed(fw, LOG_LEVEL_CRITICAL, "ARCH_PSCI_COMPLIANT:", "PSCI is NOT implemented."); return FWTS_OK; } static fwts_framework_minor_test fadt_sbbr_tests[] = { { fadt_sbbr_revision, "FADT Revision Test." }, { fadt_sbbr_reduced_hw, "FADT Reduced HW Test." }, { fadt_sbbr_boot_arch_psci_compliant, "FADT PSCI Compliant Test." }, { NULL, NULL } }; static fwts_framework_ops fadt_sbbr_ops = { .description = "SBBR FADT Fixed ACPI Description Table tests.", .init = fadt_sbbr_init, .minor_tests = fadt_sbbr_tests }; FWTS_REGISTER("fadt_sbbr", &fadt_sbbr_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_SBBR) #endif src/sbbr/rsdp/000077500000000000000000000000001465205512700135545ustar00rootroot00000000000000src/sbbr/rsdp/rsdp.c000066400000000000000000000076631465205512700147040ustar00rootroot00000000000000/* * Copyright (C) 2015-2024 Canonical * Copyright (C) 2017-2021 ARM Ltd * * Portions of this code original from the Linux-ready Firmware Developer Kit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "fwts.h" #if defined(FWTS_HAS_ACPI) && (FWTS_ARCH_AARCH64) #include #include #include #include #include #include #define CHECKSUM_BYTES 20 #define SBBR_RSDP_REVISION 2 #define SBBR_RSDP_LENGTH 36 #define EXT_CHECKSUM_BYTES 36 static fwts_acpi_table_info *table; static int rsdp_sbbr_init(fwts_framework *fw) { if (fwts_acpi_find_table(fw, "RSDP", 0, &table) != FWTS_OK) { fwts_log_error(fw, "Cannot read ACPI tables."); return FWTS_ERROR; } if (!table) { fwts_log_error(fw, "ACPI RSDP is required for the " "%s target architecture.", fwts_arch_get_name(fw->target_arch)); return FWTS_ERROR; } /* We know there is an RSDP now, so do a quick sanity check */ if (table->length == 0) { fwts_log_error(fw, "ACPI RSDP table has zero length"); return FWTS_ERROR; } return FWTS_OK; } /* * RSDP Root System Description Pointer */ static int rsdp_sbbr_test1(fwts_framework *fw) { fwts_acpi_table_rsdp *rsdp = (fwts_acpi_table_rsdp *)table->data; uint8_t checksum; /* * This includes only the first 20 bytes of this table, bytes * 0 to 19, including the checksum field. These bytes must sum to * zero. */ static const char RSDP_SIGNATURE[] = {'R', 'S', 'D', ' ', 'P', 'T', 'R', ' '}; bool signature_pass; bool checksum_pass = false; bool rsdp_revision_pass = false; bool rsdp_length_pass = false; bool ext_checksum_pass = false; bool xsdt_address_pass = false; fwts_log_info(fw, "RSDP Signature = %.8s", rsdp->signature); signature_pass = strncmp(rsdp->signature, RSDP_SIGNATURE, sizeof(rsdp->signature))? false : true; /* verify first checksum */ checksum = fwts_checksum(table->data, CHECKSUM_BYTES); fwts_log_info(fw, "RSDP Checksum = 0x%x", checksum); checksum_pass = (checksum == 0) ? true : false; fwts_log_info(fw, "RSDP Revision = 0x%x", rsdp->revision); rsdp_revision_pass = (rsdp->revision >= SBBR_RSDP_REVISION) ? true : false; fwts_log_info(fw, "RSDP Length = 0x%x", rsdp->length); rsdp_length_pass = (rsdp->length == SBBR_RSDP_LENGTH) ? true : false; checksum = fwts_checksum(table->data, EXT_CHECKSUM_BYTES); fwts_log_info(fw, "RSDP Extended Checksum = 0x%x", checksum); ext_checksum_pass = (checksum == 0) ? true : false; if ((rsdp->xsdt_address != 0) && (rsdp->rsdt_address == 0)) xsdt_address_pass = true; if ((signature_pass == true) && (checksum_pass == true) && (rsdp_revision_pass == true) && (rsdp_length_pass == true) && (ext_checksum_pass == true) && (xsdt_address_pass == true)) { fwts_passed(fw, "SBBR RSDP: Structure of RSDP Table is consistent with " "ACPI 6.0 or later and uses 64 bit xsdt addresses."); } else { fwts_failed(fw, LOG_LEVEL_CRITICAL, "SBBR RSDP:", "Structure of RSDP Table is not consistent with ACPI 6.0 " "or later and/or does not use 64 bit xsdt addresses."); } return FWTS_OK; } static fwts_framework_minor_test rsdp_sbbr_tests[] = { { rsdp_sbbr_test1, "RSDP Root System Description Pointer test." }, { NULL, NULL } }; static fwts_framework_ops rsdp_sbbr_ops = { .description = "SBBR RSDP Root System Description Pointer tests.", .init = rsdp_sbbr_init, .minor_tests = rsdp_sbbr_tests }; FWTS_REGISTER("rsdp_sbbr", &rsdp_sbbr_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_SBBR) #endif src/tpm/000077500000000000000000000000001465205512700124545ustar00rootroot00000000000000src/tpm/tpmevlog/000077500000000000000000000000001465205512700143115ustar00rootroot00000000000000src/tpm/tpmevlog/tpmevlog.c000066400000000000000000000365531465205512700163260ustar00rootroot00000000000000/* * Copyright (C) 2020-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #include #include #include #include #include "fwts_tpm.h" #include "fwts_uefi.h" #define FWTS_TPM_LOG_DIR_PATH "/sys/kernel/security" static int tpmevlog_pcrindex_value_check(fwts_framework *fw, const uint32_t pcr) { /* * Current PCRs defined from 0 to 16, and 23 is for application support, * defined from TCG PC Client Platform Firmware Profile Specification * https://trustedcomputinggroup.org/resource/pc-client-specific-platform-firmware-profile-specification/ * 2.3.4 PCR Usage */ if ((pcr > 16) && (pcr != 23)) { fwts_failed(fw, LOG_LEVEL_HIGH, "PCRIndexValue", "The PCR Index value is undefined, 0x%8.8" PRIx32 ".", pcr); return FWTS_ERROR; } return FWTS_OK; } static int tpmevlog_eventtype_check(fwts_framework *fw, const fwts_tpmlog_event_type event_type) { switch (event_type) { case EV_PREBOOT_CERT: case EV_POST_CODE: case EV_UNUSED: case EV_NO_ACTION: case EV_SEPARATOR: case EV_ACTION: case EV_EVENT_TAG: case EV_S_CRTM_CONTENTS: case EV_S_CRTM_VERSION: case EV_CPU_MICROCODE: case EV_PLATFORM_CONFIG_FLAGS: case EV_TABLE_OF_DEVICES: case EV_IPL: case EV_IPL_PARTITION_DATA: case EV_NONHOST_CODE: case EV_NONHOST_CONFIG: case EV_NONHOST_INFO: case EV_OMIT_BOOT_DEVICE_EVENTS: case EV_EFI_EVENT_BASE: case EV_EFI_VARIABLE_DRIVER_CONFIG: case EV_EFI_VARIABLE_BOOT: case EV_EFI_BOOT_SERVICES_APPLICATION: case EV_EFI_BOOT_SERVICES_DRIVER: case EV_EFI_RUNTIME_SERVICES_DRIVER: case EV_EFI_GPT_EVENT: case EV_EFI_ACTION: case EV_EFI_PLATFORM_FIRMWARE_BLOB: case EV_EFI_HANDOFF_TABLES: case EV_EFI_PLATFORM_FIRMWARE_BLOB2: case EV_EFI_HANDOFF_TABLES2: case EV_EFI_VARIABLE_BOOT2: case EV_EFI_HCRTM_EVENT: case EV_EFI_VARIABLE_AUTHORITY: case EV_EFI_SPDM_FIRMWARE_BLOB: case EV_EFI_SPDM_FIRMWARE_CONFIG: case EV_EFI_SPDM_DEVICE_POLICY: case EV_EFI_SPDM_DEVICE_AUTHORITY: case EV_COMPACT_HASH: return FWTS_OK; default: fwts_failed(fw, LOG_LEVEL_HIGH, "PCREventType", "The Event Type is undefined, 0x%8.8" PRIx32 ".", event_type); return FWTS_ERROR; } return FWTS_OK; } static int tpmevlog_algid_check(fwts_framework *fw, const TPM2_ALG_ID hash) { switch (hash) { case TPM2_ALG_RSA: case TPM2_ALG_TDES: case TPM2_ALG_SHA1: case TPM2_ALG_HMAC: case TPM2_ALG_AES: case TPM2_ALG_MGF1: case TPM2_ALG_KEYEDHASH: case TPM2_ALG_XOR: case TPM2_ALG_SHA256: case TPM2_ALG_SHA384: case TPM2_ALG_SHA512: case TPM2_ALG_NULL: case TPM2_ALG_SM3_256: case TPM2_ALG_SM4: case TPM2_ALG_RSASSA: case TPM2_ALG_RSAES: case TPM2_ALG_RSAPSS: case TPM2_ALG_OAEP: case TPM2_ALG_ECDSA: case TPM2_ALG_ECDH: case TPM2_ALG_ECDAA: case TPM2_ALG_SM2: case TPM2_ALG_ECSCHNORR: case TPM2_ALG_ECMQV: case TPM2_ALG_KDF1_SP800_56A: case TPM2_ALG_KDF2: case TPM2_ALG_KDF1_SP800_108: case TPM2_ALG_ECC: case TPM2_ALG_SYMCIPHER: case TPM2_ALG_CAMELLIA: case TPM2_ALG_CMAC: case TPM2_ALG_CTR: case TPM2_ALG_SHA3_256: case TPM2_ALG_SHA3_384: case TPM2_ALG_SHA3_512: case TPM2_ALG_OFB: case TPM2_ALG_CBC: case TPM2_ALG_CFB: case TPM2_ALG_ECB: return FWTS_OK; default: fwts_failed(fw, LOG_LEVEL_HIGH, "AlgorithmID", "The AlgorithmID is undefined, 0x%4.4" PRIx16 ".", hash); return FWTS_ERROR; } return FWTS_OK; } static int tpmevlog_pcr_type_event_check( fwts_framework *fw, const uint32_t pcr, const fwts_tpmlog_event_type event_type, uint32_t event_size, uint8_t *event) { uefi_image_load_event *ev_image_load = (uefi_image_load_event *)event; if (pcr == 4 && event_type == EV_EFI_BOOT_SERVICES_APPLICATION) { if (event_size < sizeof(uefi_image_load_event)) { fwts_failed(fw, LOG_LEVEL_HIGH, "ImageLoadEventLength", "The length of the event is %" PRIu32 " which" " is smaller than the UEFI Image Load Event " "structure that contains DevicePath " "of PE/COFF image for PCR4 and type " "EV_EFI_BOOT_SERVICES_APPLICATION.", event_size); return FWTS_ERROR; } if (ev_image_load->length_of_device_path && ev_image_load->length_of_device_path <= sizeof(fwts_uefi_dev_path)) { fwts_failed(fw, LOG_LEVEL_HIGH, "ImageLoadDevicePathLength", "The length of the device path is %" PRIu64 " is smaller than DevicePath of PE/COFF image " "for PCR4 and type EV_EFI_BOOT_SERVICES_APPLICATION.", ev_image_load->length_of_device_path); return FWTS_ERROR; } } return FWTS_OK; } static int tpmevlog_v2_check( fwts_framework *fw, uint8_t *data, const size_t len) { int ret = FWTS_OK; size_t len_remain = len; uint8_t *pdata = data; int i = 0; uint8_t vendor_info_size = 0; fwts_pc_client_pcr_event *pc_event; fwts_efi_spec_id_event *specid_evcent; fwts_spec_id_event_alg_sz *alg_sz; bool separator_seen[8] = { false }; /* specid_event_check */ if (len < sizeof(fwts_pc_client_pcr_event)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SpecidEventLength", "The length of the Specid event is %zd bytes " "is smaller than the PCClientPCREvent %zd bytes.", len_remain, sizeof(fwts_pc_client_pcr_event)); return FWTS_ERROR; } pc_event = (fwts_pc_client_pcr_event *)pdata; ret = tpmevlog_pcrindex_value_check(fw, pc_event->pcr_index); if (ret != FWTS_OK) return ret; ret = tpmevlog_eventtype_check(fw, pc_event->event_type); if (ret != FWTS_OK) return ret; for (i = 0; i < TPM2_SHA1_DIGEST_SIZE; i++) { if (pc_event->digest[i] != 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "SpecIdEvDigest", "The digest filed of SpecId event should be all zero."); fwts_tpm_data_hexdump(fw, pc_event->digest, sizeof(pc_event->digest), "Digest"); } } pdata += sizeof(fwts_pc_client_pcr_event); len_remain -= sizeof(fwts_pc_client_pcr_event); /* check the data length specid event */ if (len_remain < sizeof(fwts_efi_spec_id_event)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SpecidEventLength", "The length of the Specid event is %zd bytes " "is smaller than the SpecId event %zd bytes.", len_remain, sizeof(fwts_efi_spec_id_event)); return FWTS_ERROR; } specid_evcent = (fwts_efi_spec_id_event *)pdata; if (strcmp((char *)specid_evcent->signature, FWTS_TPM_EVENTLOG_V2_SIGNATURE) != 0) { fwts_failed(fw, LOG_LEVEL_HIGH, "SpecIdEvSignature", "The signature of SpecId event is not the same as expected " "Spec ID Event03, got %s.", (char *)specid_evcent->signature); return FWTS_ERROR; } /* * Check the platform class value which defined in TCG ACPI Specification, * 0 for client platforms, 1 for server platforms. */ if (specid_evcent->platform_class > 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "SpecIdEvPlatformClass", "The PlatformClass value of SpecId event is unexpected " "0 for client platforms, 1 for server platforms, " "got 0x%8.8" PRIx32 ".", specid_evcent->platform_class); return FWTS_ERROR; } if (specid_evcent->uintn_size < 1 || specid_evcent->uintn_size > 2) { fwts_failed(fw, LOG_LEVEL_HIGH, "SpecIdEvUINTNFields", "The size of the UINTN fieldsof SpecId event is unexpected " "0x01 indicates UINT32 and 0x02 indicates UINT64, " "got 0x%" PRIx8 ".", specid_evcent->uintn_size); return FWTS_ERROR; } if (specid_evcent->number_of_alg < 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "SpecIdEvAlgNumber", "The number of Hash algorithms of SpecId event must " "be set to a value of 0x01 or greater " "got 0x%" PRIx8 ".", specid_evcent->number_of_alg); return FWTS_ERROR; } pdata += sizeof(fwts_efi_spec_id_event); len_remain -= sizeof(fwts_efi_spec_id_event); alg_sz = (fwts_spec_id_event_alg_sz *)pdata; for (i = 0; i < specid_evcent->number_of_alg; i++) { if (len_remain < sizeof(fwts_spec_id_event_alg_sz)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SpecidEventLength", "The length of the Specid event is %zd bytes " "is smaller than AlgorithmSize %zd bytes.", len_remain, sizeof(fwts_spec_id_event_alg_sz)); return FWTS_ERROR; } ret = tpmevlog_algid_check(fw, alg_sz->algorithm_id); if (ret != FWTS_OK) return ret; pdata += sizeof(fwts_spec_id_event_alg_sz); len_remain -= sizeof(fwts_spec_id_event_alg_sz); alg_sz = (fwts_spec_id_event_alg_sz *)pdata; } vendor_info_size = *(uint8_t *)pdata; pdata += sizeof(vendor_info_size); len_remain -= sizeof(vendor_info_size); if (vendor_info_size > 0) { if (len_remain < vendor_info_size) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "SpecidEventLength", "The remain length of the Specid event is " "is too small (%zd bytes) for " "vendor info size.", len_remain); return FWTS_ERROR; } len_remain -= vendor_info_size; pdata += vendor_info_size; } /* Check the Crypto agile log format event */ while (len_remain > 0) { uint32_t event_size; fwts_tcg_pcr_event2 *pcr_event2; if (len_remain < sizeof(fwts_tcg_pcr_event2)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "EventV2Length", "The length of the event2 is %zd bytes " "is smaller than the tcg pcr event2 %zd bytes.", len_remain, sizeof(fwts_tcg_pcr_event2)); return FWTS_ERROR; } pcr_event2 = (fwts_tcg_pcr_event2 *)pdata; ret = tpmevlog_pcrindex_value_check(fw, pcr_event2->pcr_index); if (ret != FWTS_OK) return ret; ret = tpmevlog_eventtype_check(fw, pcr_event2->event_type); if (ret != FWTS_OK) return ret; pdata += sizeof(fwts_tcg_pcr_event2); len_remain -= sizeof(fwts_tcg_pcr_event2); for (i = 0; i < pcr_event2->digests_count; i++) { uint8_t hash_size; TPM2_ALG_ID alg_id = *(TPM2_ALG_ID *)pdata; ret = tpmevlog_algid_check(fw, alg_id); if (ret != FWTS_OK) return ret; pdata += sizeof(TPM2_ALG_ID); len_remain -= sizeof(TPM2_ALG_ID); hash_size = fwts_tpm_get_hash_size(alg_id); if (!hash_size) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "EventV2HashSize", "The hash size of the event2 is %zd bytes " "is smaller than the tcg pcr event2 %zd bytes.", len_remain, sizeof(fwts_tcg_pcr_event2)); return FWTS_ERROR; } pdata += hash_size; len_remain -= hash_size; } event_size = *(uint32_t *)pdata; if (len_remain < event_size) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "EventV2Length", "The remain length of the event2 is %zd bytes " "is smaller than required event2 length %zd bytes.", len_remain, sizeof(event_size)); return FWTS_ERROR; } ret = tpmevlog_pcr_type_event_check(fw, pcr_event2->pcr_index, pcr_event2->event_type, event_size, pdata + sizeof(event_size)); if (ret != FWTS_OK) return ret; if ((pcr_event2->pcr_index < 8) && (pcr_event2->event_type == EV_SEPARATOR)) separator_seen[pcr_event2->pcr_index] = true; pdata += (event_size + sizeof(event_size)); len_remain -= (event_size + sizeof(event_size)); } for (i = 0; i < 8; i++) { if (!separator_seen[i]) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "EventV2SeparatorSeen", "PCR %d did not have EV_SEPARATOR measured into it at " "Platform Firmware handover.", i); return FWTS_ERROR; } } fwts_passed(fw, "Check TPM crypto agile event log test passed."); return FWTS_OK; } static int tpmevlog_check(fwts_framework *fw, uint8_t *data, size_t len) { uint8_t *pdata = data; fwts_pc_client_pcr_event *pc_event = NULL; do { int ret; if (len < sizeof(fwts_pc_client_pcr_event)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "EventLength", "The length of the event is %zd bytes " "is smaller than the PCClientPCREvent %zd bytes.", len, sizeof(fwts_pc_client_pcr_event)); return FWTS_ERROR; } pc_event = (fwts_pc_client_pcr_event *)pdata; ret = tpmevlog_pcrindex_value_check(fw, pc_event->pcr_index); if (ret != FWTS_OK) return ret; ret = tpmevlog_eventtype_check(fw, pc_event->event_type); if (ret != FWTS_OK) return ret; if ((len - sizeof(fwts_pc_client_pcr_event)) < pc_event->event_data_size) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "EventLength", "The remain length of the event is %zd bytes " "is smaller than required event length " "%" PRIu32 " bytes.", len - sizeof(fwts_pc_client_pcr_event), pc_event->event_data_size); return FWTS_ERROR; } pdata += (sizeof(fwts_pc_client_pcr_event) + pc_event->event_data_size); len -= (sizeof(fwts_pc_client_pcr_event) + pc_event->event_data_size); } while (len > 0); fwts_passed(fw, "Check TPM event SHA1 log test passed."); return FWTS_OK; } static uint8_t *tpmevlog_load_file(const int fd, size_t *length) { uint8_t *ptr = NULL, *tmp; size_t size = 0; char buffer[4096]; *length = 0; for (;;) { const ssize_t n = read(fd, buffer, sizeof(buffer)); if (n == 0) break; if (n < 0) { if (errno != EINTR && errno != EAGAIN) { free(ptr); return NULL; } continue; } if (n > (ssize_t)sizeof(buffer)) goto err; if (size + n > 0xffffffff) goto err; if ((tmp = (uint8_t*)realloc(ptr, size + n + 1)) == NULL) { free(ptr); return NULL; } ptr = tmp; memcpy(ptr + size, buffer, n); size += n; } if (!ptr || !size) goto err_no_data; *length = size; return ptr; err: free(ptr); err_no_data: *length = 0; return NULL; } static int tpmevlog_test1(fwts_framework *fw) { DIR *dir; struct dirent *tpmdir; bool tpm_logfile_found = false; if (!(dir = opendir(FWTS_TPM_LOG_DIR_PATH))) { fwts_log_info(fw, "Cannot find the TPM event log. Aborted."); return FWTS_ABORTED; } do { tpmdir = readdir(dir); if (tpmdir && strstr(tpmdir->d_name, "tpm")) { char path[PATH_MAX]; int fd; size_t length; fwts_log_nl(fw); fwts_log_info_verbatim(fw, "%s", tpmdir->d_name); snprintf(path, sizeof(path), FWTS_TPM_LOG_DIR_PATH "/%s/binary_bios_measurements", tpmdir->d_name); if ((fd = open(path, O_RDONLY)) >= 0) { uint8_t *data; data = tpmevlog_load_file(fd, &length); tpm_logfile_found = true; if (data == NULL) { fwts_log_info(fw, "Cannot load the TPM event logs. Aborted."); (void)closedir(dir); (void)close(fd); return FWTS_ABORTED; } else { /* check if the TPM2 eventlog */ if (strstr((char *)(data + sizeof(fwts_pc_client_pcr_event)), FWTS_TPM_EVENTLOG_V2_SIGNATURE)) { fwts_log_info_verbatim(fw, "Crypto agile log format (TPM2.0):"); tpmevlog_v2_check(fw, data, length); } else { fwts_log_info_verbatim(fw, "SHA1 log format (TPM1.2):"); tpmevlog_check(fw, data, length); } free(data); } (void)close(fd); } } } while (tpmdir); (void)closedir(dir); if (!tpm_logfile_found) { fwts_log_info(fw, "Cannot find the TPM event log. Aborted."); return FWTS_ABORTED; } return FWTS_OK; } static fwts_framework_minor_test tpmevlog_tests[] = { { tpmevlog_test1, "Sanity check TPM event log." }, { NULL, NULL } }; static fwts_framework_ops tpmevlog_ops = { .description = "Sanity check TPM event log.", .minor_tests = tpmevlog_tests }; FWTS_REGISTER("tpmevlog", &tpmevlog_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) src/tpm/tpmevlogdump/000077500000000000000000000000001465205512700151775ustar00rootroot00000000000000src/tpm/tpmevlogdump/tpmevlogdump.c000066400000000000000000000357341465205512700201020ustar00rootroot00000000000000/* * Copyright (C) 2020-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #include #include #include #include #include #include "fwts_tpm.h" #define FWTS_TPM_LOG_DIR_PATH "/sys/kernel/security" static char *tpmevlogdump_evtype_to_string(const fwts_tpmlog_event_type event_type) { char *str; switch (event_type) { case EV_PREBOOT_CERT: str = "EV_PREBOOT_CERT"; break; case EV_POST_CODE: str = "EV_POST_CODE"; break; case EV_UNUSED: str = "EV_UNUSED"; break; case EV_NO_ACTION: str = "EV_NO_ACTION"; break; case EV_SEPARATOR: str = "EV_SEPARATOR"; break; case EV_ACTION: str = "EV_ACTION"; break; case EV_EVENT_TAG: str = "EV_EVENT_TAG"; break; case EV_S_CRTM_CONTENTS: str = "EV_S_CRTM_CONTENTS"; break; case EV_S_CRTM_VERSION: str = "EV_S_CRTM_VERSION"; break; case EV_CPU_MICROCODE: str = "EV_CPU_MICROCODE"; break; case EV_PLATFORM_CONFIG_FLAGS: str = "EV_PLATFORM_CONFIG_FLAGS"; break; case EV_TABLE_OF_DEVICES: str = "EV_TABLE_OF_DEVICES"; break; case EV_IPL: str = "EV_IPL"; break; case EV_IPL_PARTITION_DATA: str = "EV_IPL_PARTITION_DATA"; break; case EV_NONHOST_CODE: str = "EV_NONHOST_CODE"; break; case EV_NONHOST_CONFIG: str = "EV_NONHOST_CONFIG"; break; case EV_NONHOST_INFO: str = "EV_NONHOST_INFO"; break; case EV_OMIT_BOOT_DEVICE_EVENTS: str = "EV_OMIT_BOOT_DEVICE_EVENTS"; break; case EV_EFI_EVENT_BASE: str = "EV_EFI_EVENT_BASE"; break; case EV_EFI_VARIABLE_DRIVER_CONFIG: str = "EV_EFI_VARIABLE_DRIVER_CONFIG"; break; case EV_EFI_VARIABLE_BOOT: str = "EV_EFI_VARIABLE_BOOT"; break; case EV_EFI_BOOT_SERVICES_APPLICATION: str = "EV_EFI_BOOT_SERVICES_APPLICATION"; break; case EV_EFI_BOOT_SERVICES_DRIVER: str = "EV_EFI_BOOT_SERVICES_DRIVER"; break; case EV_EFI_RUNTIME_SERVICES_DRIVER: str = "EV_EFI_RUNTIME_SERVICES_DRIVER"; break; case EV_EFI_GPT_EVENT: str = "EV_EFI_GPT_EVENT"; break; case EV_EFI_ACTION: str = "EV_EFI_ACTION"; break; case EV_EFI_PLATFORM_FIRMWARE_BLOB: str = "EV_EFI_PLATFORM_FIRMWARE_BLOB"; break; case EV_EFI_HANDOFF_TABLES: str = "EV_EFI_HANDOFF_TABLES"; break; case EV_EFI_PLATFORM_FIRMWARE_BLOB2: str = "EV_EFI_PLATFORM_FIRMWARE_BLOB2"; break; case EV_EFI_HANDOFF_TABLES2: str = "EV_EFI_HANDOFF_TABLES2"; break; case EV_EFI_VARIABLE_BOOT2: str = "EV_EFI_VARIABLE_BOOT2"; break; case EV_EFI_HCRTM_EVENT: str = "EV_EFI_HCRTM_EVENT"; break; case EV_EFI_VARIABLE_AUTHORITY: str = "EV_EFI_VARIABLE_AUTHORITY"; break; case EV_EFI_SPDM_FIRMWARE_BLOB: str = "EV_EFI_SPDM_FIRMWARE_BLOB"; break; case EV_EFI_SPDM_FIRMWARE_CONFIG: str = "EV_EFI_SPDM_FIRMWARE_CONFIG"; break; case EV_EFI_SPDM_DEVICE_POLICY: str = "EV_EFI_SPDM_DEVICE_POLICY"; break; case EV_EFI_SPDM_DEVICE_AUTHORITY: str = "EV_EFI_SPDM_DEVICE_AUTHORITY"; break; case EV_COMPACT_HASH: str = "EV_COMPACT_HASH"; break; default: str = "Unknown"; break; } return str; } static char *tpmevlogdump_hash_to_string(const TPM2_ALG_ID hash) { char *str; switch (hash) { case TPM2_ALG_SHA1: str = "SHA1"; break; case TPM2_ALG_SHA256: str = "SHA256"; break; case TPM2_ALG_SHA384: str = "SHA384"; break; case TPM2_ALG_SHA512: str = "SHA512"; break; default: str = "Unknown"; break; } return str; } static char *tpmevlogdump_pcrindex_to_string(const uint32_t pcr) { char *str; switch (pcr) { case 0: str = "SRTM, BIOS, Host Platform Extensions, Embedded Option ROMs and PI Drivers"; break; case 1: str = "Host Platform Configuration"; break; case 2: str = "UEFI driver and application Code"; break; case 3: str = "UEFI driver and application Configuration and Data"; break; case 4: str = "UEFI Boot Manager Code and Boot Attempts"; break; case 5: str = "Boot Manager Code Configuration and Data and GPT/Partition Table"; break; case 6: str = "Host Platform Manufacturer Specific"; break; case 7: str = "Secure Boot Policy"; break; case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: str = "Defined for use by the Static OS"; break; case 16: str = "Debug"; break; case 23: str = "Application Support"; break; default: str = "Unknown"; break; } return str; } static size_t tpmevlogdump_specid_event_dump( fwts_framework *fw, uint8_t *data, const size_t len) { uint32_t i; size_t len_remain = len; uint8_t *pdata = data; uint8_t vendor_info_size; char *str_info; fwts_pc_client_pcr_event *pc_event; fwts_efi_spec_id_event *specid_evcent; fwts_spec_id_event_alg_sz *alg_sz; /* check the data length for dumping */ if (len_remain < sizeof(fwts_pc_client_pcr_event)) { fwts_log_info(fw, "Cannot get enough length for dumping data."); return 0; } pc_event = (fwts_pc_client_pcr_event *)pdata; str_info = tpmevlogdump_pcrindex_to_string(pc_event->pcr_index); fwts_log_info_verbatim(fw, "PCRIndex: 0x%8.8" PRIx32 "(%s)", pc_event->pcr_index, str_info); str_info = tpmevlogdump_evtype_to_string(pc_event->event_type); fwts_log_info_verbatim(fw, "EventType: 0x%8.8" PRIx32 "(%s)", pc_event->event_type, str_info); fwts_tpm_data_hexdump(fw, pc_event->digest, sizeof(pc_event->digest), "Digest"); fwts_log_info_verbatim(fw, "EventSize: 0x%8.8" PRIx32, pc_event->event_data_size); pdata += sizeof(fwts_pc_client_pcr_event); len_remain -= sizeof(fwts_pc_client_pcr_event); /* check the data length for dumping */ if (len_remain < sizeof(fwts_efi_spec_id_event)) { fwts_log_info(fw, "Cannot get enough length for dumping data."); return 0; } specid_evcent = (fwts_efi_spec_id_event *)pdata; fwts_log_info_verbatim(fw, "EfiSpecIdEvent:"); fwts_log_info_verbatim(fw, " Signature: %s", (char *)specid_evcent->signature); fwts_log_info_verbatim(fw, " platformClass: 0x%8.8" PRIx32, specid_evcent->platform_class); fwts_log_info_verbatim(fw, " specVersionMinor: 0x%" PRIx8, specid_evcent->spec_version_minor); fwts_log_info_verbatim(fw, " specVersionMajor: 0x%" PRIx8, specid_evcent->platform_class); fwts_log_info_verbatim(fw, " specErrata: 0x%" PRIx8, specid_evcent->spec_errata); fwts_log_info_verbatim(fw, " uintnSize: 0x%" PRIx8, specid_evcent->uintn_size); fwts_log_info_verbatim(fw, " NumberOfAlgorithms: 0x%8.8" PRIx32, specid_evcent->number_of_alg); pdata += sizeof(fwts_efi_spec_id_event); len_remain -= sizeof(fwts_efi_spec_id_event); alg_sz = (fwts_spec_id_event_alg_sz *)pdata; for (i = 0; i < specid_evcent->number_of_alg; i++) { /* check the data length for dumping */ if (len_remain < sizeof(fwts_spec_id_event_alg_sz)) { fwts_log_info(fw, "Cannot get enough length for dumping data."); return 0; } str_info = tpmevlogdump_hash_to_string(alg_sz->algorithm_id); fwts_log_info_verbatim(fw, " digestSizes[%d].AlgId: 0x%4.4" PRIx16 "(%s)", i, alg_sz->algorithm_id, str_info); fwts_log_info_verbatim(fw, " digestSizes[%d].DigestSize: %" PRIu16, i, alg_sz->digest_size); pdata += sizeof(fwts_spec_id_event_alg_sz); len_remain -= sizeof(fwts_spec_id_event_alg_sz); alg_sz = (fwts_spec_id_event_alg_sz *)pdata; } vendor_info_size = *(uint8_t *)pdata; fwts_log_info_verbatim(fw, " vendorInfoSize: 0x%" PRIx8, vendor_info_size); pdata += sizeof(vendor_info_size); len_remain -= sizeof(vendor_info_size); if (vendor_info_size > 0) { /* check the data length for dumping */ if (len_remain < vendor_info_size) { fwts_log_info(fw, "Cannot get enough length for dumping data."); return 0; } fwts_tpm_data_hexdump(fw, pdata, vendor_info_size, " vendorInfo"); len_remain -= vendor_info_size; } return len_remain; } static size_t tpmevlogdump_event_v2_dump( fwts_framework *fw, uint8_t *data, const size_t len) { uint32_t i; uint32_t event_size; uint8_t *pdata = data; size_t len_remain = len; char *str_info; fwts_tcg_pcr_event2 *pcr_event2; /* check the data length for dumping */ if (len_remain < sizeof(fwts_tcg_pcr_event2)) { fwts_log_info(fw, "Cannot get enough length for dumping data."); return 0; } pcr_event2 = (fwts_tcg_pcr_event2 *)pdata; str_info = tpmevlogdump_pcrindex_to_string(pcr_event2->pcr_index); fwts_log_info_verbatim(fw, "PCRIndex: 0x%8.8" PRIx32 "(%s)", pcr_event2->pcr_index, str_info); str_info = tpmevlogdump_evtype_to_string(pcr_event2->event_type); fwts_log_info_verbatim(fw, "EventType: 0x%8.8" PRIx32 "(%s)", pcr_event2->event_type, str_info); fwts_log_info_verbatim(fw, "Digests Count : 0x%8.8" PRIx32, pcr_event2->digests_count); pdata += sizeof(fwts_tcg_pcr_event2); len_remain -= sizeof(fwts_tcg_pcr_event2); for (i = 0; i < pcr_event2->digests_count; i++) { uint8_t hash_size = 0; const TPM2_ALG_ID alg_id = *(TPM2_ALG_ID *)pdata; /* check the data length for dumping */ if (len_remain < sizeof(TPM2_ALG_ID)) { fwts_log_info(fw, "Cannot get enough length for dumping data."); return 0; } str_info = tpmevlogdump_hash_to_string(alg_id); fwts_log_info_verbatim(fw, " Digests[%d].AlgId: 0x%4.4" PRIx16 "(%s)", i, alg_id, str_info); hash_size = fwts_tpm_get_hash_size(alg_id); if (!hash_size) { fwts_log_info(fw, "Unknown hash algorithm. Aborted."); return 0; } pdata += sizeof(TPM2_ALG_ID); len_remain -= sizeof(TPM2_ALG_ID); /* check the data length for dumping */ if (len_remain < sizeof(TPM2_ALG_ID)) { fwts_log_info(fw, "Cannot get enough length for dumping data."); return 0; } fwts_tpm_data_hexdump(fw, pdata, hash_size, " Digest"); pdata += hash_size; len_remain -= hash_size; } event_size = *(uint32_t *)pdata; /* check the data length for dumping */ if (len_remain < event_size + sizeof(event_size)) { fwts_log_info(fw, "Cannot get enough length for dumping data."); return 0; } pdata += sizeof(event_size); len_remain -= sizeof(event_size); fwts_log_info_verbatim(fw, " EventSize: %" PRIu32, event_size); if (event_size > 0) { fwts_tpm_data_hexdump(fw, pdata, event_size, " Event"); len_remain -= event_size; } return len_remain; } static void tpmevlogdump_parser( fwts_framework *fw, uint8_t *data, const size_t len) { size_t t_len = len; size_t len_remain = 0; uint8_t *pdata = data; len_remain = tpmevlogdump_specid_event_dump(fw, pdata, t_len); fwts_log_nl(fw); pdata += (t_len - len_remain); while (len_remain > 0) { t_len = len_remain; len_remain = tpmevlogdump_event_v2_dump(fw, pdata, t_len); pdata += (t_len - len_remain); fwts_log_nl(fw); } return; } static void tpmevlogdump_event_dump( fwts_framework *fw, uint8_t *data, size_t len) { uint8_t *pdata = data; fwts_pc_client_pcr_event *pc_event = NULL; while (len > 0) { char *str_info; /* check the data length for dumping */ if (len < sizeof(fwts_pc_client_pcr_event)) { fwts_log_info(fw, "Log event data is too small (%zd bytes) " "than a TCG PC Client PCR event structure " "(%zd bytes).", len, sizeof(fwts_pc_client_pcr_event)); return; } pc_event = (fwts_pc_client_pcr_event *)pdata; str_info = tpmevlogdump_pcrindex_to_string(pc_event->pcr_index); fwts_log_info_verbatim(fw, "PCRIndex: 0x%8.8" PRIx32 "(%s)", pc_event->pcr_index, str_info); str_info = tpmevlogdump_evtype_to_string(pc_event->event_type); fwts_log_info_verbatim(fw, "EventType: 0x%8.8" PRIx32 "(%s)", pc_event->event_type, str_info); fwts_tpm_data_hexdump(fw, pc_event->digest, sizeof(pc_event->digest), "Digest"); fwts_log_info_verbatim(fw, "EventSize: 0x%8.8" PRIx32, pc_event->event_data_size); if (pc_event->event_data_size > 0) fwts_tpm_data_hexdump(fw, pc_event->event, pc_event->event_data_size, "Event"); pdata += (sizeof(fwts_pc_client_pcr_event) + pc_event->event_data_size); len -= (sizeof(fwts_pc_client_pcr_event) + pc_event->event_data_size); } return; } static uint8_t *tpmevlogdump_load_file(const int fd, size_t *length) { uint8_t *ptr = NULL, *tmp; size_t size = 0; char buffer[4096]; *length = 0; for (;;) { const ssize_t n = read(fd, buffer, sizeof(buffer)); if (n == 0) break; if (n < 0) { if (errno != EINTR && errno != EAGAIN) { free(ptr); return NULL; } continue; } if (n > (ssize_t)sizeof(buffer)) goto err; if (size + n > 0xffffffff) goto err; if ((tmp = (uint8_t*)realloc(ptr, size + n + 1)) == NULL) { free(ptr); return NULL; } ptr = tmp; memcpy(ptr + size, buffer, n); size += n; } if (!ptr || !size) goto err_no_data; *length = size; return ptr; err: free(ptr); err_no_data: *length = 0; return NULL; } static int tpmevlogdump_test1(fwts_framework *fw) { DIR *dir; struct dirent *tpmdir; bool tpm_logfile_found = false; if (!(dir = opendir(FWTS_TPM_LOG_DIR_PATH))) { fwts_log_info(fw, "Cannot find the tpm event log. Aborted."); return FWTS_ABORTED; } do { tpmdir = readdir(dir); if (tpmdir && strstr(tpmdir->d_name, "tpm")) { char path[PATH_MAX]; int fd; size_t length; fwts_log_nl(fw); fwts_log_info_verbatim(fw, "%s", tpmdir->d_name); snprintf(path, sizeof(path), FWTS_TPM_LOG_DIR_PATH "/%s/binary_bios_measurements", tpmdir->d_name); if ((fd = open(path, O_RDONLY)) >= 0) { uint8_t *data; data = tpmevlogdump_load_file(fd, &length); tpm_logfile_found = true; if (data == NULL) { fwts_log_info(fw, "Cannot load the tpm event logs. Aborted."); (void)closedir(dir); (void)close(fd); return FWTS_ABORTED; } else { /* check if the TPM2 eventlog */ if (strstr((char *)(data + sizeof(fwts_pc_client_pcr_event)), FWTS_TPM_EVENTLOG_V2_SIGNATURE)) { fwts_log_info_verbatim(fw, "Crypto agile log format (TPM2.0):"); tpmevlogdump_parser(fw, data, length); } else { fwts_log_info_verbatim(fw, "SHA1 log format (TPM1.2):"); (void)tpmevlogdump_event_dump(fw, data, length); } free(data); } (void)close(fd); } } } while (tpmdir); (void)closedir(dir); if (!tpm_logfile_found) { fwts_log_info(fw, "Cannot find the tpm event log. Aborted."); return FWTS_ABORTED; } return FWTS_OK; } static fwts_framework_minor_test tpmevlogdump_tests[] = { { tpmevlogdump_test1, "Dump Tpm2 Event Log." }, { NULL, NULL } }; static fwts_framework_ops tpmevlogdump_ops = { .description = "Dump Tpm2 Event Log.", .minor_tests = tpmevlogdump_tests }; FWTS_REGISTER("tpmevlogdump", &tpmevlogdump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS | FWTS_FLAG_ROOT_PRIV) src/uefi/000077500000000000000000000000001465205512700126045ustar00rootroot00000000000000src/uefi/csm/000077500000000000000000000000001465205512700133665ustar00rootroot00000000000000src/uefi/csm/csm.c000066400000000000000000000074141465205512700143220ustar00rootroot00000000000000/* * Copyright (C) 2011-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #ifdef FWTS_ARCH_INTEL #include #include /* Real Mode IDT */ #define INT_VEC_START (0x00000000) #define INT_VEC_END (0x000003ff) #define INT_VEC_SIZE (INT_VEC_END - INT_VEC_START) /* Legacy BIOS Option ROM region */ #define BIOS_ROM_REGION_START (0x000c0000) #define BIOS_ROM_REGION_END (0x000fffff) #define BIOS_ROM_REGION_SIZE (BIOS_ROM_REGION_END - BIOS_ROM_REGION_START) #define EFI_SUPPORT (0x0001) #define VGA_SUPPORT (0x0002) static int csm_test1(fwts_framework *fw) { uint8_t *optROM; uint32_t *intVec; uint32_t int10hVec; uint32_t i; int flag = 0; fwts_log_info(fw, "Checking for UEFI Compatibility Support Module (CSM)"); if (fw->firmware_type == FWTS_FIRMWARE_UEFI) flag |= EFI_SUPPORT; /* Get Int 10h vector from segment/offset realmode address */ if ((intVec = fwts_mmap(INT_VEC_START, INT_VEC_SIZE)) == FWTS_MAP_FAILED) { fwts_log_error(fw, "Cannot mmap interrupt vector region."); return FWTS_ERROR; } if (fwts_safe_memread(intVec, INT_VEC_SIZE) != FWTS_OK) { fwts_log_error(fw, "Cannot read interrupt vector region."); fwts_munmap(intVec, INT_VEC_SIZE); return FWTS_ERROR; } int10hVec = (intVec[0x10] & 0xffff) | ((intVec[0x10] & 0xffff0000)>> 12); fwts_munmap(intVec, INT_VEC_SIZE); if ((optROM = fwts_mmap(BIOS_ROM_REGION_START, BIOS_ROM_REGION_SIZE)) == FWTS_MAP_FAILED) { fwts_log_error(fw, "Cannot mmap BIOS ROM region."); return FWTS_ERROR; } for (i = 0; i < BIOS_ROM_REGION_SIZE; i += 512) { /* Skip any option ROM headers that we can't read */ if (fwts_safe_memread(optROM + i, 6) != FWTS_OK) continue; if ((*(optROM + i) == 0x55) && (*(optROM + i + 1) == 0xaa)) { uint32_t length = *(optROM + i + 2) << 9; uint32_t ROMstart = BIOS_ROM_REGION_START + i; uint32_t ROMend = BIOS_ROM_REGION_START + i + length; if ((ROMstart <= int10hVec) && (int10hVec <= ROMend)) { fwts_log_info(fw, "Int 10h jumps to 0x%" PRIx32 " in option ROM at: " "0x%x..0x%0x", int10hVec, ROMstart, ROMend); flag |= VGA_SUPPORT; break; } } } (void)fwts_munmap(optROM, BIOS_ROM_REGION_SIZE); switch (flag) { case 0: /* Unlikely */ fwts_log_info(fw, "No CSM: Legacy BIOS firmware does not have a video option ROM."); break; case VGA_SUPPORT: fwts_log_info(fw, "No CSM: Legacy BIOS firmware has video option ROM with Int 10h support."); break; case EFI_SUPPORT: fwts_log_info(fw, "No CSM: UEFI firmware seems to have no CSM support."); break; case (EFI_SUPPORT | VGA_SUPPORT): fwts_log_info(fw, "CSM: UEFI firmware seems to have CSM support with Int 10h support."); break; default: /* Impossible */ break; } fwts_infoonly(fw); return FWTS_OK; } static fwts_framework_minor_test csm_tests[] = { { csm_test1, "UEFI Compatibility Support Module test." }, { NULL, NULL } }; static fwts_framework_ops csm_ops = { .description = "UEFI Compatibility Support Module test.", .minor_tests = csm_tests }; FWTS_REGISTER("csm", &csm_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UEFI | FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV) #endif src/uefi/esrt/000077500000000000000000000000001465205512700135615ustar00rootroot00000000000000src/uefi/esrt/esrt.c000066400000000000000000000202171465205512700147040ustar00rootroot00000000000000/* * Copyright (C) 2016-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_UEFI) #include #include #include #include #include "fwts_uefi.h" #define FWTS_ESRT_DIR_PATH "/sys/firmware/efi/esrt" #define FWTS_ESRT_ENTRY_PATH "/sys/firmware/efi/esrt/entries" #define FWTS_ESRT_RES_COUNT_PATH "/sys/firmware/efi/esrt/fw_resource_count" #define FWTS_ESRT_RES_COUNT_MAX_PATH "/sys/firmware/efi/esrt/fw_resource_count_max" #define FWTS_ESRT_RES_VERSION_PATH "/sys/firmware/efi/esrt/fw_resource_version" /* Current Entry Version */ #define ESRT_FIRMWARE_RESOURCE_VERSION 1 static int esrt_init(fwts_framework *fw) { if (fw->firmware_type != FWTS_FIRMWARE_UEFI) { fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted."); return FWTS_ABORTED; } DIR *dir = opendir(FWTS_ESRT_DIR_PATH); if (dir) { /* Directory exists. */ closedir(dir); return FWTS_OK; } else if (ENOENT == errno) { /* Directory does not exist. */ fwts_log_info(fw, "Cannot find ESRT table, firmware seems not supported. Aborted."); return FWTS_ABORTED; } else { /* opendir() failed for some other reason. */ fwts_log_info(fw, "Cannot open ESRT directory on /sys/firmware/efi/, Aborted."); return FWTS_ABORTED; } } static void check_entries(fwts_framework *fw, bool *passed) { DIR *dir; struct dirent *entry; bool entry_found = false; if (!(dir = opendir(FWTS_ESRT_ENTRY_PATH))) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CannotOpenDir", "Cannot open directory %s", FWTS_ESRT_ENTRY_PATH); *passed = false; return; } do { entry = readdir(dir); if (entry && strstr(entry->d_name, "entry")) { char path[PATH_MAX]; char *str; uint32_t fwversion = 0; uint32_t lowest_sp_fwversion; bool fwversions_found = true; entry_found = true; snprintf(path, sizeof(path), FWTS_ESRT_ENTRY_PATH "/%s/fw_class", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CannotGetFwClass", "Missing or failed to get FwClass on %s.", entry->d_name); *passed = false; } else free(str); snprintf(path, sizeof(path), FWTS_ESRT_ENTRY_PATH "/%s/fw_type", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CannotGetFwType", "Missing or failed to get FwType on %s.", entry->d_name); *passed = false; } else { uint32_t fwtype = strtoul(str, NULL, 10); if (fwtype > ESRT_FW_TYPE_UEFIDRIVER) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidValue", "The FwType value on %s is %" PRIu32 ", which is undefined on UEFI Spec." , entry->d_name, fwtype); *passed = false; } free(str); } snprintf(path, sizeof(path), FWTS_ESRT_ENTRY_PATH "/%s/fw_version", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CannotGetFwVersion", "Missing or failed to get FwVersion on %s.", entry->d_name); *passed = false; fwversions_found = false; } else { fwversion = strtoul(str, NULL, 10); free(str); } snprintf(path, sizeof(path), FWTS_ESRT_ENTRY_PATH "/%s/lowest_supported_fw_version", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CannotGetLowestSupportedFwVersion", "Missing or failed to get LowestSupportedFwVersion on %s.", entry->d_name); *passed = false; fwversions_found = false; } else { lowest_sp_fwversion = strtoul(str, NULL, 10); free(str); } if (fwversions_found) if (fwversion < lowest_sp_fwversion) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidValue", "The FwVersion is %" PRIu32 ", the LowestSupportedFwVersion is %" PRIu32 ", FwVersion shouldn't lower than the " "LowestSupportedFwVersion on %s." , fwversion, lowest_sp_fwversion, entry->d_name); *passed = false; } snprintf(path, sizeof(path), FWTS_ESRT_ENTRY_PATH "/%s/capsule_flags", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CannotGetCapsuleFlags", "Missing or failed to get CapsuleFlags on %s.", entry->d_name); *passed = false; } else free(str); snprintf(path, sizeof(path), FWTS_ESRT_ENTRY_PATH "/%s/last_attempt_version", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CannotGetLastAttemptVersion", "Missing or failed to get LastAttemptVersion on %s.", entry->d_name); *passed = false; } else free(str); snprintf(path, sizeof(path), FWTS_ESRT_ENTRY_PATH "/%s/last_attempt_status", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CannotGetLastAttemptStatus", "Missing or failed to get LastAttemptStatus on %s.", entry->d_name); *passed = false; } else { uint32_t lastattemptst = strtoul(str, NULL, 10); if (lastattemptst > LAST_ATTEMPT_STATUS_ERR_UNSATISFIED_DEPENDENCIES && (lastattemptst < LAST_ATTEMPT_STATUS_ERR_UNSUCCESSFUL_VENDOR_RANGE_MIN || lastattemptst > LAST_ATTEMPT_STATUS_ERR_UNSUCCESSFUL_VENDOR_RANGE_MAX)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidValue", "The LastAttemptStatus value on %s is 0x%" PRIu32 ", which is undefined on UEFI Spec." , entry->d_name, lastattemptst); *passed = false; } } } } while (entry); if (!entry_found) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CannotFindEntries", "Cannot find any entries on directory %s", FWTS_ESRT_ENTRY_PATH); *passed = false; } closedir(dir); return; } static int esrt_test1(fwts_framework *fw) { char *str; uint32_t count = 0; uint32_t countmax = 0; bool passed = true; if ((str = fwts_get(FWTS_ESRT_RES_COUNT_PATH)) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CannotGetCount", "Failed to get FwResourceCount."); passed = false; } else { count = strtoul(str, NULL, 10); if (count == 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidValue", "The FwResourceCount value should not be 0."); passed = false; } free(str); } if ((str = fwts_get(FWTS_ESRT_RES_COUNT_MAX_PATH)) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CannotGetCountMax", "Failed to get FwResourceCount."); passed = false; } else { countmax = strtoul(str, NULL, 10); if (countmax == 0) fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidValue", "The FwResourceCountMax value should not be 0."); free(str); } if (count > countmax) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidValue", "The FwResourceCount shouldn't be larger than FwResourceCountMax."); passed = false; } if ((str = fwts_get(FWTS_ESRT_RES_VERSION_PATH)) == NULL) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "CannotGetVersion", "Failed to get FwResourceVersion."); passed = false; } else { uint64_t version = strtoull(str, NULL, 10); if (version != ESRT_FIRMWARE_RESOURCE_VERSION) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidVersion", "The FwResourceVersion is %" PRIu64 ", should be the same as current entries version 1." , version); passed = false; } free(str); } check_entries(fw, &passed); if (passed) fwts_passed(fw, "No issues found in ESRT table."); return FWTS_OK; } static fwts_framework_minor_test esrt_tests[] = { { esrt_test1, "Sanity check UEFI ESRT Table." }, { NULL, NULL } }; static fwts_framework_ops esrt_ops = { .description = "Sanity check UEFI ESRT Table.", .init = esrt_init, .minor_tests = esrt_tests }; FWTS_REGISTER("esrt", &esrt_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UEFI | FWTS_FLAG_ROOT_PRIV | FWTS_FLAG_XBBR) #endif src/uefi/esrtdump/000077500000000000000000000000001465205512700144475ustar00rootroot00000000000000src/uefi/esrtdump/esrtdump.c000066400000000000000000000147121465205512700164630ustar00rootroot00000000000000/* * Copyright (C) 2016-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_UEFI) #include #include #include "fwts_uefi.h" #define FWTS_ESRT_DIR_PATH "/sys/firmware/efi/esrt/entries" #define FWTS_ESRT_RES_COUNT_PATH "/sys/firmware/efi/esrt/fw_resource_count" #define FWTS_ESRT_RES_COUNT_MAX_PATH "/sys/firmware/efi/esrt/fw_resource_count_max" #define FWTS_ESRT_RES_VERSION_PATH "/sys/firmware/efi/esrt/fw_resource_version" static int esrtdump_init(fwts_framework *fw) { if (fw->firmware_type != FWTS_FIRMWARE_UEFI) { fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted."); return FWTS_ABORTED; } return FWTS_OK; } static int get_entries_info(fwts_framework *fw) { DIR *dir; struct dirent *entry; if (!(dir = opendir(FWTS_ESRT_DIR_PATH))) { fwts_log_error(fw, "Cannot open directory %s", FWTS_ESRT_DIR_PATH); return FWTS_ERROR; } do { entry = readdir(dir); if (entry && strstr(entry->d_name, "entry")) { char path[PATH_MAX]; char *str, *str_info; int count = -1; fwts_log_nl(fw); fwts_log_info_verbatim(fw, "%s", entry->d_name); snprintf(path, sizeof(path), FWTS_ESRT_DIR_PATH "/%s/fw_class", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_log_error(fw, "Failed to get FwClass"); } else { fwts_log_info_verbatim(fw, " FwClass: %s", str); free(str); } snprintf(path, sizeof(path), FWTS_ESRT_DIR_PATH "/%s/fw_type", entry->d_name); if ((fwts_get_int(path, &count)) != FWTS_OK) { fwts_log_error(fw, "Failed to get FwType"); } else { switch (count) { case ESRT_FW_TYPE_UNKNOWN: str_info = "(Unknown)"; break; case ESRT_FW_TYPE_SYSTEMFIRMWARE: str_info = "(System Firmware)"; break; case ESRT_FW_TYPE_DEVICEFIRMWARE: str_info = "(Device Firmware)"; break; case ESRT_FW_TYPE_UEFIDRIVER: str_info = "(UEFI Driver)"; break; default: str_info = ""; break; } fwts_log_info_verbatim(fw, " FwType: %d %s", count, str_info); } snprintf(path, sizeof(path), FWTS_ESRT_DIR_PATH "/%s/fw_version", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_log_error(fw, "Failed to get FwVersion"); } else { fwts_log_info_verbatim(fw, " FwVersion: %s", str); free(str); } snprintf(path, sizeof(path), FWTS_ESRT_DIR_PATH "/%s/lowest_supported_fw_version", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_log_error(fw, "Failed to get LowestSupportedFwVersion"); } else { fwts_log_info_verbatim(fw, " LowestSupportedFwVersion: %s", str); free(str); } snprintf(path, sizeof(path), FWTS_ESRT_DIR_PATH "/%s/capsule_flags", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_log_error(fw, "Failed to get CapsuleFlags"); } else { fwts_log_info_verbatim(fw, " CapsuleFlags: %s", str); free(str); } snprintf(path, sizeof(path), FWTS_ESRT_DIR_PATH "/%s/last_attempt_version", entry->d_name); if ((str = fwts_get(path)) == NULL) { fwts_log_error(fw, "Failed to get LastAttemptVersion"); } else { fwts_log_info_verbatim(fw, " LastAttemptVersion: %s", str); free(str); } snprintf(path, sizeof(path), FWTS_ESRT_DIR_PATH "/%s/last_attempt_status", entry->d_name); if ((fwts_get_int(path, &count)) != FWTS_OK) { fwts_log_error(fw, "Failed to get LastAttemptStatus"); } else { switch (count) { case LAST_ATTEMPT_STATUS_SUCCESS: str_info = "(Success)"; break; case LAST_ATTEMPT_STATUS_ERR_UNSUCCESSFUL: str_info = "(Unsuccessful)"; break; case LAST_ATTEMPT_STATUS_ERR_INSUFFICIENT_RESOURCES: str_info = "(Insufficient Resources)"; break; case LAST_ATTEMPT_STATUS_ERR_INCORRECT_VERSION: str_info = "(Incorrect Version)"; break; case LAST_ATTEMPT_STATUS_ERR_INVALID_FORMAT: str_info = "(Invalid Format)"; break; case LAST_ATTEMPT_STATUS_ERR_AUTH_ERROR: str_info = "(Auth Error)"; break; case LAST_ATTEMPT_STATUS_ERR_PWR_EVT_AC: str_info = "(PWR EVT AC)"; break; case LAST_ATTEMPT_STATUS_ERR_PWR_EVT_BATT: str_info = "(PWR EVT BATT)"; break; case LAST_ATTEMPT_STATUS_ERR_UNSATISFIED_DEPENDENCIES: str_info = "(Unsatisfied Dependencies)"; break; default: if (count >= LAST_ATTEMPT_STATUS_ERR_UNSUCCESSFUL_VENDOR_RANGE_MIN && count <= LAST_ATTEMPT_STATUS_ERR_UNSUCCESSFUL_VENDOR_RANGE_MAX) str_info = "(Unsuccessful Vendor Range)"; else str_info = ""; break; } fwts_log_info_verbatim(fw, " LastAttemptStatus: %d %s", count, str_info); } } } while (entry); closedir(dir); return FWTS_OK; } static int esrtdump_test1(fwts_framework *fw) { char *str; if ((str = fwts_get(FWTS_ESRT_RES_COUNT_PATH)) == NULL) fwts_log_error(fw, "Failed to get FwResourceCount"); else { fwts_log_info_verbatim(fw, " FwResourceCount: %s", str); free(str); } if ((str = fwts_get(FWTS_ESRT_RES_COUNT_MAX_PATH)) == NULL) fwts_log_error(fw, "Failed to get FwResourceCountMax"); else { fwts_log_info_verbatim(fw, " FwResourceCountMax: %s", str); free(str); } if ((str = fwts_get(FWTS_ESRT_RES_VERSION_PATH)) == NULL) fwts_log_error(fw, "Failed to get FwResourceVersion"); else { fwts_log_info_verbatim(fw, " FwResourceVersion: %s", str); free(str); } /* find entries */ return get_entries_info(fw); } static fwts_framework_minor_test esrtdump_tests[] = { { esrtdump_test1, "Dump ESRT Table." }, { NULL, NULL } }; static fwts_framework_ops esrtdump_ops = { .description = "Dump ESRT table.", .init = esrtdump_init, .minor_tests = esrtdump_tests }; FWTS_REGISTER("esrtdump", &esrtdump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS | FWTS_FLAG_ROOT_PRIV) #endif src/uefi/securebootcert/000077500000000000000000000000001465205512700156345ustar00rootroot00000000000000src/uefi/securebootcert/sbkeydefs.h000066400000000000000000000412201465205512700177630ustar00rootroot00000000000000/* * Copyright (C) 2014-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __SB_KEY_DEF_H__ #define __SB_KEY_DEF_H__ uint8_t ubuntu_key[] = { 0x30, 0x82, 0x04, 0x34, 0x30, 0x82, 0x03, 0x1c, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xb9, 0x41, 0x24, 0xa0, 0x18, 0x2c, 0x92, 0x67, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x84, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0b, 0x49, 0x73, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x4d, 0x61, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x44, 0x6f, 0x75, 0x67, 0x6c, 0x61, 0x73, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x4c, 0x74, 0x64, 0x2e, 0x31, 0x34, 0x30, 0x32, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x2b, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x4c, 0x74, 0x64, 0x2e, 0x20, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, 0x30, 0x34, 0x31, 0x32, 0x31, 0x31, 0x31, 0x32, 0x35, 0x31, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x34, 0x31, 0x31, 0x31, 0x31, 0x31, 0x32, 0x35, 0x31, 0x5a, 0x30, 0x81, 0x84, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0b, 0x49, 0x73, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x4d, 0x61, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x44, 0x6f, 0x75, 0x67, 0x6c, 0x61, 0x73, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x4c, 0x74, 0x64, 0x2e, 0x31, 0x34, 0x30, 0x32, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x2b, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x4c, 0x74, 0x64, 0x2e, 0x20, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xbf, 0x5b, 0x3a, 0x16, 0x74, 0xee, 0x21, 0x5d, 0xae, 0x61, 0xed, 0x9d, 0x56, 0xac, 0xbd, 0xde, 0xde, 0x72, 0xf3, 0xdd, 0x7e, 0x2d, 0x4c, 0x62, 0x0f, 0xac, 0xc0, 0x6d, 0x48, 0x08, 0x11, 0xcf, 0x8d, 0x8b, 0xfb, 0x61, 0x1f, 0x27, 0xcc, 0x11, 0x6e, 0xd9, 0x55, 0x3d, 0x39, 0x54, 0xeb, 0x40, 0x3b, 0xb1, 0xbb, 0xe2, 0x85, 0x34, 0x79, 0xca, 0xf7, 0x7b, 0xbf, 0xba, 0x7a, 0xc8, 0x10, 0x2d, 0x19, 0x7d, 0xad, 0x59, 0xcf, 0xa6, 0xd4, 0xe9, 0x4e, 0x0f, 0xda, 0xae, 0x52, 0xea, 0x4c, 0x9e, 0x90, 0xce, 0xc6, 0x99, 0x0d, 0x4e, 0x67, 0x65, 0x78, 0x5d, 0xf9, 0xd1, 0xd5, 0x38, 0x4a, 0x4a, 0x7a, 0x8f, 0x93, 0x9c, 0x7f, 0x1a, 0xa3, 0x85, 0xdb, 0xce, 0xfa, 0x8b, 0xf7, 0xc2, 0xa2, 0x21, 0x2d, 0x9b, 0x54, 0x41, 0x35, 0x10, 0x57, 0x13, 0x8d, 0x6c, 0xbc, 0x29, 0x06, 0x50, 0x4a, 0x7e, 0xea, 0x99, 0xa9, 0x68, 0xa7, 0x3b, 0xc7, 0x07, 0x1b, 0x32, 0x9e, 0xa0, 0x19, 0x87, 0x0e, 0x79, 0xbb, 0x68, 0x99, 0x2d, 0x7e, 0x93, 0x52, 0xe5, 0xf6, 0xeb, 0xc9, 0x9b, 0xf9, 0x2b, 0xed, 0xb8, 0x68, 0x49, 0xbc, 0xd9, 0x95, 0x50, 0x40, 0x5b, 0xc5, 0xb2, 0x71, 0xaa, 0xeb, 0x5c, 0x57, 0xde, 0x71, 0xf9, 0x40, 0x0a, 0xdd, 0x5b, 0xac, 0x1e, 0x84, 0x2d, 0x50, 0x1a, 0x52, 0xd6, 0xe1, 0xf3, 0x6b, 0x6e, 0x90, 0x64, 0x4f, 0x5b, 0xb4, 0xeb, 0x20, 0xe4, 0x61, 0x10, 0xda, 0x5a, 0xf0, 0xea, 0xe4, 0x42, 0xd7, 0x01, 0xc4, 0xfe, 0x21, 0x1f, 0xd9, 0xb9, 0xc0, 0x54, 0x95, 0x42, 0x81, 0x52, 0x72, 0x1f, 0x49, 0x64, 0x7a, 0xc8, 0x6c, 0x24, 0xf1, 0x08, 0x70, 0x0b, 0x4d, 0xa5, 0xa0, 0x32, 0xd1, 0xa0, 0x1c, 0x57, 0xa8, 0x4d, 0xe3, 0xaf, 0xa5, 0x8e, 0x05, 0x05, 0x3e, 0x10, 0x43, 0xa1, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0xa6, 0x30, 0x81, 0xa3, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xad, 0x91, 0x99, 0x0b, 0xc2, 0x2a, 0xb1, 0xf5, 0x17, 0x04, 0x8c, 0x23, 0xb6, 0x65, 0x5a, 0x26, 0x8e, 0x34, 0x5a, 0x63, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xad, 0x91, 0x99, 0x0b, 0xc2, 0x2a, 0xb1, 0xf5, 0x17, 0x04, 0x8c, 0x23, 0xb6, 0x65, 0x5a, 0x26, 0x8e, 0x34, 0x5a, 0x63, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x43, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x3c, 0x30, 0x3a, 0x30, 0x38, 0xa0, 0x36, 0xa0, 0x34, 0x86, 0x32, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x2d, 0x62, 0x6f, 0x6f, 0x74, 0x2d, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2d, 0x63, 0x61, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x3f, 0x7d, 0xf6, 0x76, 0xa5, 0xb3, 0x83, 0xb4, 0x2b, 0x7a, 0xd0, 0x6d, 0x52, 0x1a, 0x03, 0x83, 0xc4, 0x12, 0xa7, 0x50, 0x9c, 0x47, 0x92, 0xcc, 0xc0, 0x94, 0x77, 0x82, 0xd2, 0xae, 0x57, 0xb3, 0x99, 0x04, 0xf5, 0x32, 0x3a, 0xc6, 0x55, 0x1d, 0x07, 0xdb, 0x12, 0xa9, 0x56, 0xfa, 0xd8, 0xd4, 0x76, 0x20, 0xeb, 0xe4, 0xc3, 0x51, 0xdb, 0x9a, 0x5c, 0x9c, 0x92, 0x3f, 0x18, 0x73, 0xda, 0x94, 0x6a, 0xa1, 0x99, 0x38, 0x8c, 0xa4, 0x88, 0x6d, 0xc1, 0xfc, 0x39, 0x71, 0xd0, 0x74, 0x76, 0x16, 0x03, 0x3e, 0x56, 0x23, 0x35, 0xd5, 0x55, 0x47, 0x5b, 0x1a, 0x1d, 0x41, 0xc2, 0xd3, 0x12, 0x4c, 0xdc, 0xff, 0xae, 0x0a, 0x92, 0x9c, 0x62, 0x0a, 0x17, 0x01, 0x9c, 0x73, 0xe0, 0x5e, 0xb1, 0xfd, 0xbc, 0xd6, 0xb5, 0x19, 0x11, 0x7a, 0x7e, 0xcd, 0x3e, 0x03, 0x7e, 0x66, 0xdb, 0x5b, 0xa8, 0xc9, 0x39, 0x48, 0x51, 0xff, 0x53, 0xe1, 0x9c, 0x31, 0x53, 0x91, 0x1b, 0x3b, 0x10, 0x75, 0x03, 0x17, 0xba, 0xe6, 0x81, 0x02, 0x80, 0x94, 0x70, 0x4c, 0x46, 0xb7, 0x94, 0xb0, 0x3d, 0x15, 0xcd, 0x1f, 0x8e, 0x02, 0xe0, 0x68, 0x02, 0x8f, 0xfb, 0xf9, 0x47, 0x1d, 0x7d, 0xa2, 0x01, 0xc6, 0x07, 0x51, 0xc4, 0x9a, 0xcc, 0xed, 0xdd, 0xcf, 0xa3, 0x5d, 0xed, 0x92, 0xbb, 0xbe, 0xd1, 0xfd, 0xe6, 0xec, 0x1f, 0x33, 0x51, 0x73, 0x04, 0xbe, 0x3c, 0x72, 0xb0, 0x7d, 0x08, 0xf8, 0x01, 0xff, 0x98, 0x7d, 0xcb, 0x9c, 0xe0, 0x69, 0x39, 0x77, 0x25, 0x47, 0x71, 0x88, 0xb1, 0x8d, 0x27, 0xa5, 0x2e, 0xa8, 0xf7, 0x3f, 0x5f, 0x80, 0x69, 0x97, 0x3e, 0xa9, 0xf4, 0x99, 0x14, 0xdb, 0xce, 0x03, 0x0e, 0x0b, 0x66, 0xc4, 0x1c, 0x6d, 0xbd, 0xb8, 0x27, 0x77, 0xc1, 0x42, 0x94, 0xbd, 0xfc, 0x6a, 0x0a, 0xbc, }; uint32_t ubuntu_key_len = sizeof(ubuntu_key); uint8_t ms_uefi_ca_2011_key[] = { 0x30, 0x82, 0x06, 0x10, 0x30, 0x82, 0x03, 0xf8, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0a, 0x61, 0x08, 0xd3, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x91, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x3b, 0x30, 0x39, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x32, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x54, 0x68, 0x69, 0x72, 0x64, 0x20, 0x50, 0x61, 0x72, 0x74, 0x79, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x30, 0x36, 0x32, 0x37, 0x32, 0x31, 0x32, 0x32, 0x34, 0x35, 0x5a, 0x17, 0x0d, 0x32, 0x36, 0x30, 0x36, 0x32, 0x37, 0x32, 0x31, 0x33, 0x32, 0x34, 0x35, 0x5a, 0x30, 0x81, 0x81, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x55, 0x45, 0x46, 0x49, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xa5, 0x08, 0x6c, 0x4c, 0xc7, 0x45, 0x09, 0x6a, 0x4b, 0x0c, 0xa4, 0xc0, 0x87, 0x7f, 0x06, 0x75, 0x0c, 0x43, 0x01, 0x54, 0x64, 0xe0, 0x16, 0x7f, 0x07, 0xed, 0x92, 0x7d, 0x0b, 0xb2, 0x73, 0xbf, 0x0c, 0x0a, 0xc6, 0x4a, 0x45, 0x61, 0xa0, 0xc5, 0x16, 0x2d, 0x96, 0xd3, 0xf5, 0x2b, 0xa0, 0xfb, 0x4d, 0x49, 0x9b, 0x41, 0x80, 0x90, 0x3c, 0xb9, 0x54, 0xfd, 0xe6, 0xbc, 0xd1, 0x9d, 0xc4, 0xa4, 0x18, 0x8a, 0x7f, 0x41, 0x8a, 0x5c, 0x59, 0x83, 0x68, 0x32, 0xbb, 0x8c, 0x47, 0xc9, 0xee, 0x71, 0xbc, 0x21, 0x4f, 0x9a, 0x8a, 0x7c, 0xff, 0x44, 0x3f, 0x8d, 0x8f, 0x32, 0xb2, 0x26, 0x48, 0xae, 0x75, 0xb5, 0xee, 0xc9, 0x4c, 0x1e, 0x4a, 0x19, 0x7e, 0xe4, 0x82, 0x9a, 0x1d, 0x78, 0x77, 0x4d, 0x0c, 0xb0, 0xbd, 0xf6, 0x0f, 0xd3, 0x16, 0xd3, 0xbc, 0xfa, 0x2b, 0xa5, 0x51, 0x38, 0x5d, 0xf5, 0xfb, 0xba, 0xdb, 0x78, 0x02, 0xdb, 0xff, 0xec, 0x0a, 0x1b, 0x96, 0xd5, 0x83, 0xb8, 0x19, 0x13, 0xe9, 0xb6, 0xc0, 0x7b, 0x40, 0x7b, 0xe1, 0x1f, 0x28, 0x27, 0xc9, 0xfa, 0xef, 0x56, 0x5e, 0x1c, 0xe6, 0x7e, 0x94, 0x7e, 0xc0, 0xf0, 0x44, 0xb2, 0x79, 0x39, 0xe5, 0xda, 0xb2, 0x62, 0x8b, 0x4d, 0xbf, 0x38, 0x70, 0xe2, 0x68, 0x24, 0x14, 0xc9, 0x33, 0xa4, 0x08, 0x37, 0xd5, 0x58, 0x69, 0x5e, 0xd3, 0x7c, 0xed, 0xc1, 0x04, 0x53, 0x08, 0xe7, 0x4e, 0xb0, 0x2a, 0x87, 0x63, 0x08, 0x61, 0x6f, 0x63, 0x15, 0x59, 0xea, 0xb2, 0x2b, 0x79, 0xd7, 0x0c, 0x61, 0x67, 0x8a, 0x5b, 0xfd, 0x5e, 0xad, 0x87, 0x7f, 0xba, 0x86, 0x67, 0x4f, 0x71, 0x58, 0x12, 0x22, 0x04, 0x22, 0x22, 0xce, 0x8b, 0xef, 0x54, 0x71, 0x00, 0xce, 0x50, 0x35, 0x58, 0x76, 0x95, 0x08, 0xee, 0x6a, 0xb1, 0xa2, 0x01, 0xd5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, 0x76, 0x30, 0x82, 0x01, 0x72, 0x30, 0x12, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x05, 0x02, 0x03, 0x01, 0x00, 0x01, 0x30, 0x23, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x02, 0x04, 0x16, 0x04, 0x14, 0xf8, 0xc1, 0x6b, 0xb7, 0x7f, 0x77, 0x53, 0x4a, 0xf3, 0x25, 0x37, 0x1d, 0x4e, 0xa1, 0x26, 0x7b, 0x0f, 0x20, 0x70, 0x80, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x13, 0xad, 0xbf, 0x43, 0x09, 0xbd, 0x82, 0x70, 0x9c, 0x8c, 0xd5, 0x4f, 0x31, 0x6e, 0xd5, 0x22, 0x98, 0x8a, 0x1b, 0xd4, 0x30, 0x19, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x0c, 0x1e, 0x0a, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x45, 0x66, 0x52, 0x43, 0xe1, 0x7e, 0x58, 0x11, 0xbf, 0xd6, 0x4e, 0x9e, 0x23, 0x55, 0x08, 0x3b, 0x3a, 0x22, 0x6a, 0xa8, 0x30, 0x5c, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x55, 0x30, 0x53, 0x30, 0x51, 0xa0, 0x4f, 0xa0, 0x4d, 0x86, 0x4b, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x43, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x50, 0x61, 0x72, 0x4d, 0x61, 0x72, 0x52, 0x6f, 0x6f, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x60, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x54, 0x30, 0x52, 0x30, 0x50, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x44, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x43, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x50, 0x61, 0x72, 0x4d, 0x61, 0x72, 0x52, 0x6f, 0x6f, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x2e, 0x63, 0x72, 0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x35, 0x08, 0x42, 0xff, 0x30, 0xcc, 0xce, 0xf7, 0x76, 0x0c, 0xad, 0x10, 0x68, 0x58, 0x35, 0x29, 0x46, 0x32, 0x76, 0x27, 0x7c, 0xef, 0x12, 0x41, 0x27, 0x42, 0x1b, 0x4a, 0xaa, 0x6d, 0x81, 0x38, 0x48, 0x59, 0x13, 0x55, 0xf3, 0xe9, 0x58, 0x34, 0xa6, 0x16, 0x0b, 0x82, 0xaa, 0x5d, 0xad, 0x82, 0xda, 0x80, 0x83, 0x41, 0x06, 0x8f, 0xb4, 0x1d, 0xf2, 0x03, 0xb9, 0xf3, 0x1a, 0x5d, 0x1b, 0xf1, 0x50, 0x90, 0xf9, 0xb3, 0x55, 0x84, 0x42, 0x28, 0x1c, 0x20, 0xbd, 0xb2, 0xae, 0x51, 0x14, 0xc5, 0xc0, 0xac, 0x97, 0x95, 0x21, 0x1c, 0x90, 0xdb, 0x0f, 0xfc, 0x77, 0x9e, 0x95, 0x73, 0x91, 0x88, 0xca, 0xbd, 0xbd, 0x52, 0xb9, 0x05, 0x50, 0x0d, 0xdf, 0x57, 0x9e, 0xa0, 0x61, 0xed, 0x0d, 0xe5, 0x6d, 0x25, 0xd9, 0x40, 0x0f, 0x17, 0x40, 0xc8, 0xce, 0xa3, 0x4a, 0xc2, 0x4d, 0xaf, 0x9a, 0x12, 0x1d, 0x08, 0x54, 0x8f, 0xbd, 0xc7, 0xbc, 0xb9, 0x2b, 0x3d, 0x49, 0x2b, 0x1f, 0x32, 0xfc, 0x6a, 0x21, 0x69, 0x4f, 0x9b, 0xc8, 0x7e, 0x42, 0x34, 0xfc, 0x36, 0x06, 0x17, 0x8b, 0x8f, 0x20, 0x40, 0xc0, 0xb3, 0x9a, 0x25, 0x75, 0x27, 0xcd, 0xc9, 0x03, 0xa3, 0xf6, 0x5d, 0xd1, 0xe7, 0x36, 0x54, 0x7a, 0xb9, 0x50, 0xb5, 0xd3, 0x12, 0xd1, 0x07, 0xbf, 0xbb, 0x74, 0xdf, 0xdc, 0x1e, 0x8f, 0x80, 0xd5, 0xed, 0x18, 0xf4, 0x2f, 0x14, 0x16, 0x6b, 0x2f, 0xde, 0x66, 0x8c, 0xb0, 0x23, 0xe5, 0xc7, 0x84, 0xd8, 0xed, 0xea, 0xc1, 0x33, 0x82, 0xad, 0x56, 0x4b, 0x18, 0x2d, 0xf1, 0x68, 0x95, 0x07, 0xcd, 0xcf, 0xf0, 0x72, 0xf0, 0xae, 0xbb, 0xdd, 0x86, 0x85, 0x98, 0x2c, 0x21, 0x4c, 0x33, 0x2b, 0xf0, 0x0f, 0x4a, 0xf0, 0x68, 0x87, 0xb5, 0x92, 0x55, 0x32, 0x75, 0xa1, 0x6a, 0x82, 0x6a, 0x3c, 0xa3, 0x25, 0x11, 0xa4, 0xed, 0xad, 0xd7, 0x04, 0xae, 0xcb, 0xd8, 0x40, 0x59, 0xa0, 0x84, 0xd1, 0x95, 0x4c, 0x62, 0x91, 0x22, 0x1a, 0x74, 0x1d, 0x8c, 0x3d, 0x47, 0x0e, 0x44, 0xa6, 0xe4, 0xb0, 0x9b, 0x34, 0x35, 0xb1, 0xfa, 0xb6, 0x53, 0xa8, 0x2c, 0x81, 0xec, 0xa4, 0x05, 0x71, 0xc8, 0x9d, 0xb8, 0xba, 0xe8, 0x1b, 0x44, 0x66, 0xe4, 0x47, 0x54, 0x0e, 0x8e, 0x56, 0x7f, 0xb3, 0x9f, 0x16, 0x98, 0xb2, 0x86, 0xd0, 0x68, 0x3e, 0x90, 0x23, 0xb5, 0x2f, 0x5e, 0x8f, 0x50, 0x85, 0x8d, 0xc6, 0x8d, 0x82, 0x5f, 0x41, 0xa1, 0xf4, 0x2e, 0x0d, 0xe0, 0x99, 0xd2, 0x6c, 0x75, 0xe4, 0xb6, 0x69, 0xb5, 0x21, 0x86, 0xfa, 0x07, 0xd1, 0xf6, 0xe2, 0x4d, 0xd1, 0xda, 0xad, 0x2c, 0x77, 0x53, 0x1e, 0x25, 0x32, 0x37, 0xc7, 0x6c, 0x52, 0x72, 0x95, 0x86, 0xb0, 0xf1, 0x35, 0x61, 0x6a, 0x19, 0xf5, 0xb2, 0x3b, 0x81, 0x50, 0x56, 0xa6, 0x32, 0x2d, 0xfe, 0xa2, 0x89, 0xf9, 0x42, 0x86, 0x27, 0x18, 0x55, 0xa1, 0x82, 0xca, 0x5a, 0x9b, 0xf8, 0x30, 0x98, 0x54, 0x14, 0xa6, 0x47, 0x96, 0x25, 0x2f, 0xc8, 0x26, 0xe4, 0x41, 0x94, 0x1a, 0x5c, 0x02, 0x3f, 0xe5, 0x96, 0xe3, 0x85, 0x5b, 0x3c, 0x3e, 0x3f, 0xbb, 0x47, 0x16, 0x72, 0x55, 0xe2, 0x25, 0x22, 0xb1, 0xd9, 0x7b, 0xe7, 0x03, 0x06, 0x2a, 0xa3, 0xf7, 0x1e, 0x90, 0x46, 0xc3, 0x00, 0x0d, 0xd6, 0x19, 0x89, 0xe3, 0x0e, 0x35, 0x27, 0x62, 0x03, 0x71, 0x15, 0xa6, 0xef, 0xd0, 0x27, 0xa0, 0xa0, 0x59, 0x37, 0x60, 0xf8, 0x38, 0x94, 0xb8, 0xe0, 0x78, 0x70, 0xf8, 0xba, 0x4c, 0x86, 0x87, 0x94, 0xf6, 0xe0, 0xae, 0x02, 0x45, 0xee, 0x65, 0xc2, 0xb6, 0xa3, 0x7e, 0x69, 0x16, 0x75, 0x07, 0x92, 0x9b, 0xf5, 0xa6, 0xbc, 0x59, 0x83, 0x58, }; uint32_t ms_uefi_ca_2011_key_len = sizeof(ms_uefi_ca_2011_key); #endif src/uefi/securebootcert/securebootcert.c000066400000000000000000000422261465205512700210360ustar00rootroot00000000000000/* * Copyright (C) 2013-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_UEFI) #include #include #include #include "fwts_uefi.h" #include "sbkeydefs.h" #include "fwts_efi_runtime.h" #include "fwts_efi_module.h" static int fd; typedef void (*securebootcert_func)(fwts_framework *fw, fwts_uefi_var *var, char *varname); typedef struct { char *description; /* UEFI var */ securebootcert_func func; /* Function to dump this variable */ } securebootcert_info; typedef struct _EFI_SIGNATURE_LIST { EFI_GUID SignatureType; uint32_t SignatureListSize; uint32_t SignatureHeaderSize; uint32_t SignatureSize; } __attribute__((packed)) EFI_SIGNATURE_LIST; #define VAR_SECUREBOOT_FOUND (1 << 0) #define VAR_SETUPMODE_FOUND (1 << 1) #define VAR_DB_FOUND (1 << 2) #define VAR_KEK_FOUND (1 << 3) #define VAR_AUDITMODE_FOUND (1 << 4) #define VAR_DEPLOYEDMODE_FOUND (1 << 5) #define EFI_IMAGE_SECURITY_DATABASE_GUID \ { \ 0xd719b2cb, 0x3d3a, 0x4596, { 0xa3, 0xbc, 0xda, \ 0xd0, 0x0e, 0x67, 0x65, 0x6f} \ } static uint8_t var_found; static bool securebooted = false; static bool deployed = false; static EFI_GUID global_guid = EFI_GLOBAL_VARIABLE; static uint16_t varauditmode[] = {'A', 'u', 'd', 'i', 't', 'M', 'o', 'd', 'e', '\0'}; static uint16_t vardeploymode[] = {'D', 'e', 'p', 'l', 'o', 'y', 'e', 'd', 'M', 'o', 'd', 'e', '\0'}; static bool compare_guid(EFI_GUID *guid1, uint8_t *guid2) { bool ident = true; uint32_t data1 = guid2[0] + (guid2[1] << 8) + (guid2[2] << 16) + (guid2[3] << 24); uint16_t data2 = guid2[4] + (guid2[5] << 8); uint16_t data3 = guid2[6] + (guid2[7] << 8); if ((guid1->Data1 != data1) || (guid1->Data2 != data2) || (guid1->Data3 != data3)) ident = false; else { int i; for (i = 0; i < 8; i++) { if (guid1->Data4[i] != guid2[i+8]) ident = false; } } return ident; } static void securebootcert_secure_boot(fwts_framework *fw, fwts_uefi_var *var, char *varname) { bool ident = false; EFI_GUID global_var_guid = EFI_GLOBAL_VARIABLE; if (strcmp(varname, "SecureBoot")) return; var_found |= VAR_SECUREBOOT_FOUND; ident = compare_guid(&global_var_guid, var->guid); if (!ident) { fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableGUIDInvalid", "The secure boot variable %s GUID invalid.", varname); return; } if (var->datalen != 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableSizeInvalid", "The secure boot variable %s size invalid.", varname); return; } else { char *mode; uint8_t value = (uint8_t)var->data[0]; switch (value) { case 0: mode = " (Secure Boot Mode Off)"; break; case 1: mode = " (Secure Boot Mode On)"; break; default: fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableDataInvalid", "The secure boot variable data invalid."); return; } if (value == 1) securebooted = true; fwts_log_info_verbatim(fw, " Value: 0x%2.2x%s.", value, mode); fwts_passed(fw, "Secure boot relative variable %s check passed.", varname); } } static void securebootcert_setup_mode(fwts_framework *fw, fwts_uefi_var *var, char *varname) { bool ident = false; EFI_GUID global_var_guid = EFI_GLOBAL_VARIABLE; if (strcmp(varname, "SetupMode")) return; var_found |= VAR_SETUPMODE_FOUND; ident = compare_guid(&global_var_guid, var->guid); if (!ident) { fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableGUIDInvalid", "The secure boot variable %s GUID invalid.", varname); return; } if (var->datalen != 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableSizeInvalid", "The secure boot variable %s size invalid.", varname); } else { char *mode; uint8_t value = (uint8_t)var->data[0]; switch (value) { case 0: mode = ""; break; case 1: mode = " (Setup Mode)"; break; default: fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableDataInvalid", "The secure boot variable %s data invalid.", varname); return; } fwts_log_info_verbatim(fw, " Value: 0x%2.2" PRIx8 "%s.", value, mode); fwts_passed(fw, "Secure boot relative variable %s check passed.", varname); } } static void securebootcert_audit_mode(fwts_framework *fw, fwts_uefi_var *var, char *varname) { bool ident = false; EFI_GUID global_var_guid = EFI_GLOBAL_VARIABLE; if (strcmp(varname, "AuditMode")) return; var_found |= VAR_AUDITMODE_FOUND; ident = compare_guid(&global_var_guid, var->guid); if (!ident) { fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableGUIDInvalid", "The secure boot variable %s GUID invalid.", varname); return; } if (var->datalen != 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableSizeInvalid", "The secure boot variable %s size invalid.", varname); } else { char *mode; uint8_t value = (uint8_t)var->data[0]; switch (value) { case 0: mode = ""; break; case 1: mode = " (Audit Mode)"; break; default: fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableDataInvalid", "The secure boot variable %s data invalid.", varname); return; } fwts_log_info_verbatim(fw, " Value: 0x%2.2" PRIx8 "%s.", value, mode); fwts_passed(fw, "Secure boot relative variable %s check passed.", varname); } } static void securebootcert_deployed_mode(fwts_framework *fw, fwts_uefi_var *var, char *varname) { bool ident = false; EFI_GUID global_var_guid = EFI_GLOBAL_VARIABLE; if (strcmp(varname, "DeployedMode")) return; var_found |= VAR_DEPLOYEDMODE_FOUND; ident = compare_guid(&global_var_guid, var->guid); if (!ident) { fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableGUIDInvalid", "The secure boot variable %s GUID invalid.", varname); return; } if (var->datalen != 1) { fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableSizeInvalid", "The secure boot variable %s size invalid.", varname); return; } else { char *mode; uint8_t value = (uint8_t)var->data[0]; switch (value) { case 0: mode = ""; break; case 1: mode = " (Deployed Mode On)"; break; default: fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableDataInvalid", "The secure boot variable data invalid."); return; } if (value == 1) deployed = true; fwts_log_info_verbatim(fw, " Value: 0x%2.2x%s.", value, mode); fwts_passed(fw, "Secure boot relative variable %s check passed.", varname); } } static inline bool check_addr_overflow( const void *var_data_addr, const size_t len) { return (len > ~(uintptr_t)0 - (uintptr_t)var_data_addr); } static bool check_sigdb_presence( uint8_t *var_data, const size_t datalen, const uint8_t *key, const uint32_t key_len) { uint8_t *var_data_addr; EFI_SIGNATURE_LIST siglist; size_t i = 0; EFI_GUID cert_x509_guid = EFI_CERT_X509_GUID; bool key_found = false; if (datalen < sizeof(siglist)) return key_found; for (var_data_addr = var_data; var_data_addr < var_data + datalen; ) { siglist = *((EFI_SIGNATURE_LIST *)var_data_addr); /* check for potential overflow */ if (check_addr_overflow(var_data_addr, siglist.SignatureListSize)) break; if (var_data_addr + siglist.SignatureListSize > var_data + datalen) break; if (siglist.SignatureHeaderSize > siglist.SignatureListSize) { var_data_addr += siglist.SignatureListSize; continue; } if (memcmp(&siglist.SignatureType, &cert_x509_guid, sizeof(EFI_GUID)) != 0) { var_data_addr += siglist.SignatureListSize; continue; } var_data_addr += sizeof(siglist) + siglist.SignatureHeaderSize; if (key_len != (siglist.SignatureSize - sizeof(EFI_GUID))) { var_data_addr += siglist.SignatureSize; continue; } var_data_addr += sizeof(EFI_GUID); for (i = 0; i < key_len; i++) { if (*((uint8_t *)var_data_addr+i) != key[i]) break; } var_data_addr += siglist.SignatureSize; if (i == key_len) { key_found = true; return key_found; } } return key_found; } static void securebootcert_data_base(fwts_framework *fw, fwts_uefi_var *var, char *varname) { bool ident = false; EFI_GUID image_security_var_guid = EFI_IMAGE_SECURITY_DATABASE_GUID; if (strcmp(varname, "db")) return; var_found |= VAR_DB_FOUND; ident = compare_guid(&image_security_var_guid, var->guid); if (!ident) { fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableGUIDInvalid", "The secure boot variable %s GUID invalid.", varname); return; } fwts_log_info_verbatim(fw, "Check Microsoft UEFI CA certificate presence in %s", varname); if (check_sigdb_presence(var->data, var->datalen, ms_uefi_ca_2011_key, ms_uefi_ca_2011_key_len)) fwts_passed(fw, "MS UEFI CA 2011 key check passed."); else { fwts_warning(fw, "The Microsoft UEFI CA certificate not found."); fwts_advice(fw, "Most Linux distributions use shim as a first stage " "bootloader which was signed by Microsoft UEFI CA. " "Without Microsoft UEFI CA certificate in DB, the " "system might not be able to boot up with secure boot " "enabled on these distributions."); } } static void securebootcert_key_ex_key(fwts_framework *fw, fwts_uefi_var *var, char *varname) { bool ident = false; fwts_release *release; EFI_GUID global_var_guid = EFI_GLOBAL_VARIABLE; if (strcmp(varname, "KEK")) return; var_found |= VAR_KEK_FOUND; ident = compare_guid(&global_var_guid, var->guid); if (!ident) { fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableGUIDInvalid", "The secure boot variable %s GUID invalid.", varname); return; } release = fwts_release_get(); if (release == NULL) { fwts_skipped(fw, "Cannot determine system, stop checking the Master CA certificate."); return; } if (strcmp(release->distributor, "Ubuntu") != 0) { fwts_skipped(fw, "Not a Ubuntu system, skipping the Ubuntu Master CA certificate check."); fwts_release_free(release); return; } fwts_release_free(release); fwts_log_info_verbatim(fw, "Check Ubuntu master CA certificate presence in %s", varname); if (check_sigdb_presence(var->data, var->datalen, ubuntu_key, ubuntu_key_len)) fwts_passed(fw, "Ubuntu UEFI CA 2011 key check passed."); else { fwts_log_info_verbatim(fw, "No Ubuntu master CA certificate presence in %s", varname); fwts_infoonly(fw); } } static const securebootcert_info securebootcert_info_table[] = { { "SecureBoot", securebootcert_secure_boot }, { "SetupMode", securebootcert_setup_mode }, { "db", securebootcert_data_base }, { "KEK", securebootcert_key_ex_key }, { "AuditMode", securebootcert_audit_mode }, { "DeployedMode", securebootcert_deployed_mode }, { NULL, NULL } }; static void securebootcert_var(fwts_framework *fw, fwts_uefi_var *var) { char varname[512]; char guid_str[37]; const securebootcert_info *info; fwts_uefi_get_varname(varname, sizeof(varname), var); for (info = securebootcert_info_table; info->description != NULL; info++) { if (strcmp(varname, info->description) == 0) { fwts_log_info_verbatim(fw, "The %s variable check.", varname); fwts_guid_buf_to_str(var->guid, guid_str, sizeof(guid_str)); fwts_log_info_verbatim(fw, " GUID: %s", guid_str); fwts_log_info_verbatim(fw, " Attr: 0x%x (%s).", var->attributes, fwts_uefi_attribute_info(var->attributes)); info->func(fw, var, varname); fwts_log_nl(fw); return; } } } static int securebootcert_init(fwts_framework *fw) { if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED) return FWTS_ABORTED; if (!fwts_uefi_efivars_iface_exist()) { fwts_log_info(fw, "Cannot detect efivars interface. Aborted."); return FWTS_ABORTED; } return FWTS_OK; } static int securebootcert_deinit(fwts_framework *fw) { fwts_lib_efi_runtime_close(fd); fwts_lib_efi_runtime_unload_module(fw); return FWTS_OK; } static int securebootcert_test1(fwts_framework *fw) { fwts_list name_list; if (fwts_uefi_get_variable_names(&name_list) == FWTS_ERROR) { fwts_log_info(fw, "Cannot find any UEFI variables."); } else { fwts_list_link *item; fwts_list_foreach(item, &name_list) { fwts_uefi_var var; char *name = fwts_list_data(char *, item); if (fwts_uefi_get_variable(name, &var) == FWTS_OK) { securebootcert_var(fw, &var); fwts_uefi_free_variable(&var); } } } /* check all the secure boot variables be found */ if (!(var_found & VAR_SECUREBOOT_FOUND)) fwts_warning(fw, "The secure boot variable SecureBoot not found."); if (!(var_found & VAR_SETUPMODE_FOUND)) fwts_warning(fw, "The secure boot variable SetupMode not found."); if (!(var_found & VAR_AUDITMODE_FOUND)) { fwts_warning(fw, "The secure boot variable AuditMode not found."); fwts_advice(fw, "AuditMode global variable is defined in the UEFI " "Specification 2.6 for new secure boot architecture. " "It may because the firmware hasn't been updated to " "support the UEFI Specification 2.6."); } if (!(var_found & VAR_DEPLOYEDMODE_FOUND)) { fwts_warning(fw, "The secure boot variable DeployedMode not found."); fwts_advice(fw, "DeployedMode global variable is defined in the UEFI " "Specification 2.6 for new secure boot architecture. " "It may because the firmware hasn't been updated to " "support the UEFI Specification 2.6."); } if (securebooted || deployed) { if (!(var_found & VAR_DB_FOUND)) fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableNotFound", "Secureboot or deployed mode on, but the variable DB not found."); if (!(var_found & VAR_KEK_FOUND)) fwts_failed(fw, LOG_LEVEL_HIGH, "SecureBootCertVariableNotFound", "Secureboot or deployed mode on, but the variable KEK not found."); } else { if (!(var_found & VAR_DB_FOUND)) fwts_log_info(fw, "Not in readiness for secureboot, variable DB not found."); if (!(var_found & VAR_KEK_FOUND)) fwts_log_info(fw, "Not in readiness for secureboot, variable KEK not found."); } fwts_uefi_free_variable_names(&name_list); return FWTS_OK; } static int securebootcert_setvar( fwts_framework *fw, const uint32_t attributes, uint16_t *varname, EFI_GUID *guid, uint8_t *data) { long ioret; struct efi_setvariable setvariable; uint64_t status = ~0ULL; uint64_t datasize = 1; setvariable.VariableName = varname; setvariable.VendorGuid = guid; setvariable.Attributes = attributes; setvariable.DataSize = datasize; setvariable.Data = data; setvariable.status = &status; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { if (status == EFI_OUT_OF_RESOURCES) { fwts_uefi_print_status_info(fw, status); fwts_skipped(fw, "Run out of resources for SetVariable " "UEFI runtime interface: cannot test."); fwts_advice(fw, "Firmware may reclaim some resources " "after rebooting. Reboot and test " "again may be helpful to continue " "the test."); return FWTS_SKIP; } } if (status == EFI_SUCCESS) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFISecurebooCertVar", "Variable is ready only, return status of setvariable " "should not EFI_SUCCESS."); } else fwts_passed(fw, "Variable read-only test passed."); return FWTS_OK; } static int securebootcert_test2(fwts_framework *fw) { int ret; uint8_t data = 0; static uint32_t attributes = FWTS_UEFI_VAR_BOOTSERVICE_ACCESS | FWTS_UEFI_VAR_RUNTIME_ACCESS; if (!(var_found & VAR_AUDITMODE_FOUND)) { fwts_skipped(fw, "No AuditMode variable found, skip the variable test."); return FWTS_SKIP; } fwts_log_info(fw, "AuditMode variable read-only test, set to 0."); ret = securebootcert_setvar(fw, attributes, varauditmode, &global_guid, &data); if (ret != FWTS_OK) return ret; data = 1; fwts_log_info(fw, "AuditMode variable read-only test, set to 1."); ret = securebootcert_setvar(fw, attributes, varauditmode, &global_guid, &data); if (ret != FWTS_OK) return ret; if (!(var_found & VAR_AUDITMODE_FOUND)) { fwts_skipped(fw, "No DeployedMode variable found, skip the variable test."); return FWTS_SKIP; } data = 0; fwts_log_info(fw, "DeployedMode variable read-only test, set to 0."); ret = securebootcert_setvar(fw, attributes, vardeploymode, &global_guid, &data); if (ret != FWTS_OK) return ret; data = 1; fwts_log_info(fw, "DeployedMode variable read-only test, set to 1."); ret = securebootcert_setvar(fw, attributes, vardeploymode, &global_guid, &data); if (ret != FWTS_OK) return ret; return FWTS_OK; } static fwts_framework_minor_test securebootcert_tests[] = { { securebootcert_test1, "UEFI secure boot test." }, { securebootcert_test2, "UEFI secure boot variable test." }, { NULL, NULL } }; static fwts_framework_ops securebootcert_ops = { .description = "UEFI secure boot test.", .init = securebootcert_init, .deinit = securebootcert_deinit, .minor_tests = securebootcert_tests }; FWTS_REGISTER("securebootcert", &securebootcert_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UEFI | FWTS_FLAG_UNSAFE | FWTS_FLAG_ROOT_PRIV) #endif src/uefi/uefibootpath/000077500000000000000000000000001465205512700152755ustar00rootroot00000000000000src/uefi/uefibootpath/uefibootpath.c000066400000000000000000001016511465205512700201360ustar00rootroot00000000000000/* * Copyright (C) 2014-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_UEFI) #include #include #include #include "fwts_uefi.h" static int errors; static inline bool uefibootpath_check_pnpid(uint32_t id) { return (id & 0xFFFF) == 0x41D0; } static int uefibootpath_init(fwts_framework *fw) { if (fw->firmware_type != FWTS_FIRMWARE_UEFI) { fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted."); return FWTS_ABORTED; } return FWTS_OK; } static int uefibootpath_check_dev_path(fwts_framework *fw, fwts_uefi_dev_path *dev_path, const size_t dev_path_len) { uint16_t len; len = dev_path->length[0] | (((uint16_t)dev_path->length[1]) << 8); switch (dev_path->type & 0x7f) { case FWTS_UEFI_END_DEV_PATH_TYPE: switch (dev_path->subtype) { case FWTS_UEFI_END_ENTIRE_DEV_PATH_SUBTYPE: case FWTS_UEFI_END_THIS_DEV_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIEndHwDevPathLength", "The length of End of Hardware Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_dev_path)); errors++; } break; default: fwts_log_info_verbatim(fw, "Unknown subtype of End of Hardware Device Path."); break; } break; case FWTS_UEFI_HARDWARE_DEV_PATH_TYPE: switch (dev_path->subtype) { case FWTS_UEFI_PCI_DEV_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_pci_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIPCIDevPathLength", "The length of PCI Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_pci_dev_path)); errors++; } break; case FWTS_UEFI_PCCARD_DEV_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_pccard_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIPCCARDDevPathLength", "The length of PCCARD Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_pccard_dev_path)); errors++; } break; case FWTS_UEFI_MEMORY_MAPPED_DEV_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_mem_mapped_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIMemoryMapDevPathLength", "The length of Memory Mapped Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_mem_mapped_dev_path)); errors++; } break; case FWTS_UEFI_VENDOR_DEV_PATH_SUBTYPE: if (len < (sizeof(fwts_uefi_vendor_dev_path) - sizeof(uint8_t))) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIVendorDevPathLength", "The length of Vendor Device Path is %" PRIu16 " bytes " "should not be smaller than UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)(sizeof(fwts_uefi_vendor_dev_path) - sizeof(uint8_t))); errors++; } break; case FWTS_UEFI_CONTROLLER_DEV_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_controller_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIControllerDevPathLength", "The length of Controller Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_controller_dev_path)); errors++; } break; case FWTS_UEFI_BMC_DEV_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_bmc_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIBMCDevPathLength", "The length of BMC Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_bmc_dev_path)); errors++; } fwts_uefi_bmc_dev_path *b = (fwts_uefi_bmc_dev_path *)dev_path; if (b->interface_type > 3) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIBMCDevPathIntfTypeInvalid", "The definition on interface type of BMC Device Path is 0-3" ", which is out of the defined range."); errors++; } break; default: fwts_log_info_verbatim(fw, "Unknown subtype of Hardware Device Path."); break; } break; case FWTS_UEFI_ACPI_DEVICE_PATH_TYPE: switch (dev_path->subtype) { case FWTS_UEFI_ACPI_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_acpi_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIACPIDevPathLength", "The length of ACPI Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_acpi_dev_path)); errors++; } fwts_uefi_acpi_dev_path *a = (fwts_uefi_acpi_dev_path *)dev_path; if (!uefibootpath_check_pnpid(a->hid)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIACPIDevPathPnPId", "The ID value 0x%" PRIx32 " is not complied with " "the compressed EISA-type ID.", a->hid); errors++; } break; case FWTS_UEFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE: if (len < (sizeof(fwts_uefi_expanded_acpi_dev_path) + 2*sizeof(char))) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIExpACPIDevPathLength", "The length of Expanded ACPI Device Path is %" PRIu16 " bytes " "should not be smaller than UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)(sizeof(fwts_uefi_expanded_acpi_dev_path) + 2*sizeof(char))); errors++; } fwts_uefi_expanded_acpi_dev_path *e = (fwts_uefi_expanded_acpi_dev_path *)dev_path; if (!uefibootpath_check_pnpid(e->hid)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIExpACPIDevPathPnPId", "The ID value 0x%" PRIx32 " is not complied with " "the compressed EISA-type ID.", e->hid); errors++; } if (!uefibootpath_check_pnpid(e->cid)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIExpACPIDevPathPnPId", "The ID value 0x%" PRIx32 " is not complied with " "the compressed EISA-type ID.", e->cid); errors++; } break; case FWTS_UEFI_ACPI_ADR_DEVICE_PATH_SUBTYPE: if (len < sizeof(fwts_uefi_acpi_adr_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIADRDevPathLength", "The length of _ADR Device Path is %" PRIu16 " bytes " "should not be smaller than UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_acpi_adr_dev_path)); errors++; } break; default: fwts_log_info_verbatim(fw, "Unknown subtype of ACPI Device Path."); break; } break; case FWTS_UEFI_MESSAGING_DEVICE_PATH_TYPE: switch (dev_path->subtype) { case FWTS_UEFI_ATAPI_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_atapi_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIATAPIDevPathLength", "The length of ATAPI Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_atapi_dev_path)); errors++; break; } fwts_uefi_atapi_dev_path *a = (fwts_uefi_atapi_dev_path *)dev_path; if (a->primary_secondary > 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIATAPIDevPathConfInvalid", "The PrimarySecondary value of ATAPI Device Path is %" PRIu8 " which is out of configuration range.", a->primary_secondary); errors++; } if (a->slave_master > 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIATAPIDevPathConfInvalid", "The SlaveMaster value of ATAPI Device Path is %" PRIu8 " which is out of configuration range.", a->slave_master); errors++; } break; case FWTS_UEFI_SCSI_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_scsi_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFISCSIDevPathLength", "The length of SCSI Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_scsi_dev_path)); errors++; } break; case FWTS_UEFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_fibre_channel_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIFibreChannelDevPathLength", "The length of Fibre Channel Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_fibre_channel_dev_path)); errors++; } break; case FWTS_UEFI_1394_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_1394_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFI1394DevPathLength", "The length of 1394 Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_1394_dev_path)); errors++; } break; case FWTS_UEFI_USB_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_usb_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIUSBDevPathLength", "The length of USB Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_usb_dev_path)); errors++; } break; case FWTS_UEFI_USB_CLASS_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_usb_class_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIUSBClassDevPathLength", "The length of USB Class Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_usb_class_dev_path)); errors++; } break; case FWTS_UEFI_I2O_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_i2o_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFII2ODevPathLength", "The length of i2o Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_i2o_dev_path)); errors++; } break; case FWTS_UEFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_mac_addr_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIMACAddrDevPathLength", "The length of MAC Address Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_mac_addr_dev_path)); errors++; } break; case FWTS_UEFI_IPV4_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_ipv4_dev_path_v2) && len != sizeof(fwts_uefi_ipv4_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIIPv4DevPathLength", "The length of IPv4 Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_ipv4_dev_path)); errors++; break; } fwts_uefi_ipv4_dev_path *i4 = (fwts_uefi_ipv4_dev_path *)dev_path; if (i4->static_ip_address > 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIIPv4DevPathConfInvalid", "The StaticIPAddress value of IPv4 Device Path is %" PRIu8 " which is out of configuration range.", i4->static_ip_address); errors++; } break; case FWTS_UEFI_IPV6_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_ipv6_dev_path_v2) && len != sizeof(fwts_uefi_ipv6_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIIPv6DevPathLength", "The length of IPv6 Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_ipv6_dev_path)); errors++; break; } fwts_uefi_ipv6_dev_path *i6 = (fwts_uefi_ipv6_dev_path *)dev_path; if (i6->static_ip_address > 2) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIIPV6DevPathConfInvalid", "The IPAddressOrigin value of IPv6 Device Path is %" PRIu8 " which is out of configuration range.", i6->static_ip_address); errors++; } break; case FWTS_UEFI_INFINIBAND_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_infiniband_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIInfiniBandDevPathLength", "The length of InfiniBand Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_infiniband_dev_path)); errors++; } break; case FWTS_UEFI_UART_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_uart_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIUARTDevPathLength", "The length of UART Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_uart_dev_path)); errors++; break; } fwts_uefi_uart_dev_path *u = (fwts_uefi_uart_dev_path *)dev_path; if (u->parity > 5) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIUARTDevPathConfInvalid", "The Parity value of UART Device Path is %" PRIu8 " which is out of configuration range.", u->parity); errors++; } if (u->stop_bits > 3) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIUARTDevPathConfInvalid", "The Parity value of UART Device Path is %" PRIu8 " which is out of configuration range.", u->parity); errors++; } break; case FWTS_UEFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE: if (len < sizeof(fwts_uefi_vendor_messaging_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIVendorMessagingDevPathLength", "The length of Vendor-Defined Messaging Device Path is %" PRIu16 " bytes " "should not be smaller than UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_vendor_messaging_dev_path)); errors++; } size_t i; static const fwts_uefi_guid guid[] = { EFI_PC_ANSI_GUID, EFI_VT_100_GUID, EFI_VT_100_PLUS_GUID, EFI_VT_UTF8_GUID, EFI_UART_DEVICE_PATH_GUID, EFI_SAS_DEVICE_PATH_GUID }; fwts_uefi_vendor_messaging_dev_path *v = (fwts_uefi_vendor_messaging_dev_path *)dev_path; for (i = 0; i < sizeof(guid)/sizeof(guid[0]); i++) if (memcmp(&v->guid, &guid[i], sizeof(fwts_uefi_guid)) == 0) break; switch (i) { case 0: case 1: case 2: case 3: if (len != sizeof(fwts_uefi_vendor_messaging_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIVendorMessagingDevPathLength", "The length of Vendor-Defined Messaging Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_vendor_messaging_dev_path)); errors++; } break; case 4: if (len != (sizeof(fwts_uefi_uart_flowctl_messaging_dev_path))) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIVendorMessagingDevPathLength", "The length of UART Flow Control Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)(sizeof(fwts_uefi_uart_flowctl_messaging_dev_path))); errors++; } break; case 5: if (len != (sizeof(fwts_uefi_sas_messaging_dev_path))) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIVendorMessagingDevPathLength", "The length of Serial Attached SCSI (SAS) Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)(sizeof(fwts_uefi_sas_messaging_dev_path))); errors++; } break; } break; case FWTS_UEFI_FIBRE_CHANNEL_EX_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_fibre_channel_ex_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIFibreChannelExDevPathLength", "The length of Fibre Channel Ex Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_fibre_channel_ex_dev_path)); errors++; } break; case FWTS_UEFI_SATA_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_sata_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFISATADevPathLength", "The length of SATA Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_sata_dev_path)); errors++; break; } fwts_uefi_sata_dev_path *s = (fwts_uefi_sata_dev_path *)dev_path; if (s->hbapn == 0xFFFF) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFISATADevPathConfInvalid", "The HBA Port Number value of length of SATA Device Path is %" PRIu16 " which is reserved.", s->hbapn); errors++; } break; case FWTS_UEFI_USB_WWID_DEVICE_PATH_SUBTYPE: if (len < sizeof(fwts_uefi_usb_wwid_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIUSBWWIDDevPathLength", "The length of USB WWID Device Path is %" PRIu16 " bytes " "should not be smaller than UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_usb_wwid_dev_path)); errors++; } break; case FWTS_UEFI_VLAN_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_vlan_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIVLANDevPathLength", "The length of VLAN Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_vlan_dev_path)); errors++; } break; case FWTS_UEFI_LOGICAL_UNIT_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_logical_unit_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIDeviceLogicalUnitLength", "The length of Device Logical Unit is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_logical_unit_dev_path)); errors++; } break; case FWTS_UEFI_SAS_EX_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_sas_ex_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFISASExDevPathLength", "The length of Serial Attached SCSI Ex Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_sas_ex_dev_path)); errors++; } break; case FWTS_UEFI_ISCSI_DEVICE_PATH_SUBTYPE: if (len < sizeof(fwts_uefi_iscsi_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIiSCSIDevPathLength", "The length of iSCSI Device Path is %" PRIu16 " bytes " "should not be smaller than UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_iscsi_dev_path)); errors++; } break; case FWTS_UEFI_NVM_EXPRESS_NAMESP_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_nvm_express_namespace_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFINVMExpressDevPathLength", "The length of NVM Express Namespace Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_nvm_express_namespace_dev_path)); errors++; break; } fwts_uefi_nvm_express_namespace_dev_path *n = (fwts_uefi_nvm_express_namespace_dev_path *)dev_path; if ((n->namesp_id == 0xFFFFFFFF) || (n->namesp_id == 0)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFINVMExpressDevPathInvalid", "The Namespace Identifier value of NVM Express namespace Device Path is %" PRIu32 " which is invalid.", n->namesp_id); errors++; } break; case FWTS_UEFI_URI_DEVICE_PATH_SUBTYPE: if (len < sizeof(fwts_uefi_uri_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIURIDevPathLength", "The length of URI Device Path is %" PRIu16 " bytes " "should not be smaller than UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_uri_dev_path)); errors++; } break; case FWTS_UEFI_UFS_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_ufs_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIUFSDevPathLength", "The length of UFS(Universal Flash Storage) is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_ufs_dev_path)); errors++; } fwts_uefi_ufs_dev_path *ufs = (fwts_uefi_ufs_dev_path *)dev_path; if (ufs->target_id != 0) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIPUNFieldInvalid", "The Target ID on the UFS interface(PUN) is %" PRIu8 " ." "This value should be 0 for current UFS2.0 spec compliance " "and reserve/introduce this field to support multiple devices " "per UFS port.", ufs->target_id); errors++; } break; case FWTS_UEFI_SD_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_sd_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFISDDevPathLength", "The length of SD device path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_sd_dev_path)); errors++; } break; case FWTS_UEFI_BLUETOOTH_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_bluetooth_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIBluetoothDevPathLength", "The length of Bluetooth device path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_bluetooth_dev_path)); errors++; } break; case FWTS_UEFI_WIRELESS_DEVICE_PATH_SUBTYPE: if (len <= sizeof(fwts_uefi_wireless_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIWirelessDevPathLength", "The length of wireless Device Path is %" PRIu16 " bytes, " "should at least include the SSID filed.", len); errors++; } if (len > (sizeof(fwts_uefi_wireless_dev_path) + 32)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIWirelessDevPathLength", "The length of wireless Device Path is %" PRIu16 " bytes, " "the ssid field should not be larger than 32 bytes.", len); errors++; } break; case FWTS_UEFI_EMMC_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_emmc_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIEMMCDevPathLength", "The length of eMMC device path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_emmc_dev_path)); errors++; } break; case FWTS_UEFI_BLUETOOTHLE_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_bluetoothle_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIBTLEDevPathLength", "The length of BluetoothLE device path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_bluetoothle_dev_path)); errors++; } fwts_uefi_bluetoothle_dev_path *b = (fwts_uefi_bluetoothle_dev_path *)dev_path; if (b->addr_type > 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIBTLEDevPathTypeInvalid", "The Address Type of BluetoothLE Device Path is %" PRIu8 " which is out of UEFI specification defined range 0 or 1.", b->addr_type); errors++; } break; case FWTS_UEFI_DNS_DEVICE_PATH_SUBTYPE: if (len <= sizeof(fwts_uefi_dns_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIDNSDevPathLength", "The length of DNS device path is %" PRIu16 " bytes, " "it should also include one or more instances of the DNS server " "address.", len); errors++; } fwts_uefi_dns_dev_path *d = (fwts_uefi_dns_dev_path *)dev_path; if (d->isipv6 > 1) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIDNSDevPathTypeInvalid", "The Ip type of DNS Device Path is %" PRIu8 " which is out of UEFI specification defined range 0 or 1.", d->isipv6); errors++; } break; default: fwts_log_info_verbatim(fw, "Unknown subtype of Messaging Device Path."); break; } break; case FWTS_UEFI_MEDIA_DEVICE_PATH_TYPE: switch (dev_path->subtype) { case FWTS_UEFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_hard_drive_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIHardDriveDevPathLength", "The length of Hard Drive Media Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_hard_drive_dev_path)); errors++; break; } fwts_uefi_hard_drive_dev_path *h = (fwts_uefi_hard_drive_dev_path *)dev_path; if ((h->mbr_type > 2) || (h->mbr_type == 0)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIHardDriveDevPathConfInvalid", "The Partition Format value of Hard Drive Media Device Path is %" PRIu8 " which is reserved.", h->mbr_type); errors++; } if (h->signature_type > 2) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIHardDriveDevPathConfInvalid", "The Signature Type value of Hard Drive Media Device Path is %" PRIu8 " which is reserved.", h->signature_type); errors++; } break; case FWTS_UEFI_CDROM_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_uefi_cdrom_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFICDROMDevPathLength", "The length of CD-ROM Media Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_cdrom_dev_path)); errors++; } break; case FWTS_UEFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE: if (len < sizeof(fwts_uefi_vendor_media_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIVendorMediaDevPathLength", "The length of Vendor-Defined Media Device Path is %" PRIu16 " bytes " "should not be smaller than UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_vendor_media_dev_path)); errors++; } break; case FWTS_UEFI_FILE_PATH_DEVICE_PATH_SUBTYPE: if (len < sizeof(fwts_uefi_file_path_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIFilePathMediaDevPathLength", "The length of File Path Media Device Path is %" PRIu16 " bytes " "should not be smaller than UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_file_path_dev_path)); errors++; break; } fwts_uefi_file_path_dev_path *f = (fwts_uefi_file_path_dev_path *)dev_path; if (len != (sizeof(fwts_uefi_file_path_dev_path) + ((fwts_uefi_str16len(f->path_name) + 1) * sizeof(uint16_t)))) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIFilePathMediaPathLength", "The length of File Path Media Device Path is %" PRIu16 " bytes " "is not matching with adding the length of Path String %" PRIu16 " bytes.", len, (uint16_t)(sizeof(fwts_uefi_file_path_dev_path) + ((fwts_uefi_str16len(f->path_name) + 1) * sizeof(uint16_t)))); errors++; break; } break; case FWTS_UEFI_PROTOCOL_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_media_protocol_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIMediaProtocolDevPathLength", "The length of Media Protocol Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_media_protocol_dev_path)); errors++; } break; case FWTS_UEFI_PIWG_FW_FILE_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_piwg_fw_file_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIPIWGFwFileDevPathLength", "The length of PIWG Firmware File Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_piwg_fw_file_dev_path)); errors++; } break; case FWTS_UEFI_PIWG_FW_VOLUME_DEVICE_PATH_SUBTYPE: if (len != sizeof(fwts_piwg_fw_volume_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIPIWGFwVolumeDevPathLength", "The length of PIWG Firmware Volume Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_piwg_fw_volume_dev_path)); errors++; } break; case FWTS_UEFI_RELATIVE_OFFSET_RANGE_SUBTYPE: if (len != sizeof(fwts_relative_offset_range_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIRelativeOffsetRangeLength", "The length of Relative Offset Range is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_relative_offset_range_path)); errors++; } break; case FWTS_UEFI_RAM_DISK_SUBTYPE: if (len != sizeof(fwts_ram_disk_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIRamDiskDevPathLength", "The length of Ram Disk Device Path is %" PRIu16 " bytes " "and differs from UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_ram_disk_path)); errors++; } break; default: fwts_log_info_verbatim(fw, "Unknown subtype of Media Device Path."); break; } break; case FWTS_UEFI_BIOS_DEVICE_PATH_TYPE: switch (dev_path->subtype) { case FWTS_UEFI_BIOS_DEVICE_PATH_SUBTYPE: if (len < sizeof(fwts_uefi_bios_dev_path)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIBiosBootDevPathLength", "The length of BIOS Boot Specification Device Path is %" PRIu16 " bytes " "should not be smaller than UEFI specification defined %" PRIu16 " bytes.", len, (uint16_t)sizeof(fwts_uefi_bios_dev_path)); errors++; break; } fwts_uefi_bios_dev_path *b = (fwts_uefi_bios_dev_path *)dev_path; if (len != (sizeof(fwts_uefi_bios_dev_path) + strlen(b->description) + 1)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIBiosBootDevPathLength", "The length of BIOS Boot Specification Device Path is %" PRIu16 " bytes " "is not matching with adding the length of Description String %" PRIu16 " bytes.", len, (uint16_t)(sizeof(fwts_uefi_bios_dev_path) + strlen(b->description) + 1)); errors++; } break; default: fwts_log_info_verbatim(fw, "Unknown subtype of BIOS Boot Specification Device Path."); break; } break; default: fwts_log_info_verbatim(fw, "Unknown Type of Device Path."); break; } /* Not end? - collect more */ if (!((dev_path->type & 0x7f) == (FWTS_UEFI_END_DEV_PATH_TYPE) && (dev_path->subtype == FWTS_UEFI_END_ENTIRE_DEV_PATH_SUBTYPE))) { len = dev_path->length[0] | (((uint16_t)dev_path->length[1]) << 8); if (len > 0) { dev_path = (fwts_uefi_dev_path *)((char *)dev_path + len); uefibootpath_check_dev_path(fw, dev_path, dev_path_len - len); } } return FWTS_OK; } static int uefibootpath_info_bootdev(fwts_framework *fw, fwts_uefi_var *var) { fwts_uefi_load_option *load_option; size_t len, offset; char tmp[2048]; if (var->datalen < sizeof(fwts_uefi_load_option)) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIBootPathLength", "The length of boot path variable is less than " "the load option structure."); return FWTS_ERROR; } load_option = (fwts_uefi_load_option *)var->data; fwts_uefi_str16_to_str(tmp, sizeof(tmp), load_option->description); len = fwts_uefi_str16len(load_option->description); fwts_log_info_verbatim(fw, "Info: %s\n", tmp); if (var->datalen < (sizeof(uint16_t) * (len + 1))) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIBootPathDescriptionLength", "The length of description is large than " "the boot path variable length."); return FWTS_ERROR; } /* Skip over description */ offset = sizeof(load_option->attributes) + sizeof(load_option->file_path_list_length) + (sizeof(uint16_t) * (len + 1)); uefibootpath_check_dev_path(fw, (fwts_uefi_dev_path *)(var->data + offset), var->datalen - offset); return FWTS_OK; } static void uefibootpath_var(fwts_framework *fw, fwts_uefi_var *var) { char varname[512]; fwts_uefi_get_varname(varname, sizeof(varname), var); /* Check the boot load option Boot####. #### is a printed hex value */ if ((strlen(varname) == 8) && (strncmp(varname, "Boot", 4) == 0) && isxdigit(varname[4]) && isxdigit(varname[5]) && isxdigit(varname[6]) && isxdigit(varname[7])) { int ret; fwts_log_info_verbatim(fw, "Name: %s", varname); errors = 0; ret = uefibootpath_info_bootdev(fw, var); if (!errors && (ret == FWTS_OK)) fwts_passed(fw, "Check bootpath %s test passed.", varname); return; } } static int uefibootpath_test1(fwts_framework *fw) { fwts_list name_list; if (fwts_uefi_get_variable_names(&name_list) == FWTS_ERROR) { fwts_skipped(fw, "Cannot find any UEFI variables."); return FWTS_SKIP; } else { fwts_list_link *item; fwts_list_foreach(item, &name_list) { fwts_uefi_var var; char *name = fwts_list_data(char *, item); if (fwts_uefi_get_variable(name, &var) == FWTS_OK) { uefibootpath_var(fw, &var); fwts_uefi_free_variable(&var); } } } fwts_uefi_free_variable_names(&name_list); return FWTS_OK; } static fwts_framework_minor_test uefibootpath_tests[] = { { uefibootpath_test1, "Test UEFI Boot Path Boot####." }, { NULL, NULL } }; static fwts_framework_ops uefibootpath_ops = { .description = "Sanity check for UEFI Boot Path Boot####.", .init = uefibootpath_init, .minor_tests = uefibootpath_tests }; FWTS_REGISTER("uefibootpath", &uefibootpath_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UEFI | FWTS_FLAG_BATCH | FWTS_FLAG_ROOT_PRIV | FWTS_FLAG_XBBR); #endif src/uefi/uefidump/000077500000000000000000000000001465205512700144225ustar00rootroot00000000000000src/uefi/uefidump/uefidump.c000066400000000000000000001476761465205512700164310ustar00rootroot00000000000000/* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_UEFI) #include #include #include #include "fwts_uefi.h" typedef void (*uefidump_func)(fwts_framework *fw, fwts_uefi_var *var); typedef struct { char *description; /* UEFI var */ uefidump_func func; /* Function to dump this variable */ } uefidump_info; static void uefidump_var_hexdump(fwts_framework *fw, fwts_uefi_var *var) { int i; uint8_t *data = (uint8_t*)var->data; fwts_log_info_verbatim(fw, " Size: %zd bytes of data", var->datalen); for (i = 0; i < (int)var->datalen; i+= 16) { char buffer[128]; int left = (int)var->datalen - i; fwts_dump_raw_data(buffer, sizeof(buffer), data + i, i, left > 16 ? 16 : left); fwts_log_info_verbatim(fw, " Data: %s", buffer+2); } } static void uefidump_data_hexdump(fwts_framework *fw, uint8_t *data, size_t size) { size_t i; for (i = 0; i < size; i += 16) { char buffer[128]; size_t left = size - i; fwts_dump_raw_data(buffer, sizeof(buffer), data + i, i, left > 16 ? 16 : left); fwts_log_info_verbatim(fw, " Data: %s", buffer+2); } } static char *uefidump_vprintf(char *str, const char *fmt, ...) __attribute__((format(printf, 2, 3))); /* * uefidump_vprintf() * printf() to str: if str NULL - allocate buffer and print into it, * otherwise allocate more space and append new text to end of existing * string. Return new string, or NULL if failed. */ static char *uefidump_vprintf(char *str, const char *fmt, ...) { va_list args; char buffer[4096]; va_start(args, fmt); vsnprintf(buffer, sizeof(buffer), fmt, args); va_end(args); if (str == NULL) str = strdup(buffer); else { char *tmp; tmp = realloc(str, strlen(str) + strlen(buffer) + 1); if (!tmp) { free(str); return NULL; } str = tmp; strcat(str, buffer); } return str; } /* * uefidump_build_dev_path() * recursively scan dev_path and build up a human readable path name */ static char *uefidump_build_dev_path(char *path, fwts_uefi_dev_path *dev_path, const size_t dev_path_len) { switch (dev_path->type & 0x7f) { case FWTS_UEFI_END_DEV_PATH_TYPE: switch (dev_path->subtype) { case FWTS_UEFI_END_ENTIRE_DEV_PATH_SUBTYPE: break; case FWTS_UEFI_END_THIS_DEV_PATH_SUBTYPE: path = uefidump_vprintf(path, "\n Device Path: "); break; default: return uefidump_vprintf(path, "\\Unknown-End(0x%" PRIx8 ")", dev_path->subtype); } break; case FWTS_UEFI_HARDWARE_DEV_PATH_TYPE: switch (dev_path->subtype) { case FWTS_UEFI_PCI_DEV_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_pci_dev_path)) { fwts_uefi_pci_dev_path *p = (fwts_uefi_pci_dev_path *)dev_path; path = uefidump_vprintf(path, "\\PCI(0x%" PRIx8 ",0x%" PRIx8 ")", p->function, p->device); } break; case FWTS_UEFI_PCCARD_DEV_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_pccard_dev_path)) { fwts_uefi_pccard_dev_path *p = (fwts_uefi_pccard_dev_path *)dev_path; path = uefidump_vprintf(path, "\\PCCARD(0x%" PRIx8 ")", p->function); } break; case FWTS_UEFI_MEMORY_MAPPED_DEV_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_mem_mapped_dev_path)) { fwts_uefi_mem_mapped_dev_path *m = (fwts_uefi_mem_mapped_dev_path*)dev_path; path = uefidump_vprintf(path, "\\Memmap(0x%" PRIx32 ",0x%" PRIx64 ",0x%" PRIx64 ")", m->memory_type, m->start_addr, m->end_addr); } break; case FWTS_UEFI_VENDOR_DEV_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_vendor_dev_path)) { fwts_uefi_vendor_dev_path *v = (fwts_uefi_vendor_dev_path*)dev_path; path = uefidump_vprintf(path, "\\VENDOR(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)", v->guid.info1, v->guid.info2, v->guid.info3, v->guid.info4[0], v->guid.info4[1], v->guid.info4[2], v->guid.info4[3], v->guid.info4[4], v->guid.info4[5], v->guid.info4[6], v->guid.info4[7]); } break; case FWTS_UEFI_CONTROLLER_DEV_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_controller_dev_path)) { fwts_uefi_controller_dev_path *c = (fwts_uefi_controller_dev_path*)dev_path; path = uefidump_vprintf(path, "\\Controller(0x%" PRIx32 ")", c->controller); } break; case FWTS_UEFI_BMC_DEV_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_bmc_dev_path)) { fwts_uefi_bmc_dev_path *b = (fwts_uefi_bmc_dev_path *)dev_path; path = uefidump_vprintf(path, "\\BMC(0x%" PRIx8 ",0x%" PRIx64 ")", b->interface_type, b->base_addr); } break; default: path = uefidump_vprintf(path, "\\Unknown-HW-DEV-PATH(0x%" PRIx8 ")", dev_path->subtype); break; } break; case FWTS_UEFI_ACPI_DEVICE_PATH_TYPE: switch (dev_path->subtype) { case FWTS_UEFI_ACPI_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_acpi_dev_path)) { fwts_uefi_acpi_dev_path *a = (fwts_uefi_acpi_dev_path*)dev_path; path = uefidump_vprintf(path, "\\ACPI(0x%" PRIx32 ",0x%" PRIx32 ")", a->hid, a->uid); } break; case FWTS_UEFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_expanded_acpi_dev_path)) { fwts_uefi_expanded_acpi_dev_path *a = (fwts_uefi_expanded_acpi_dev_path*)dev_path; char *hidstr= a->hidstr; path = uefidump_vprintf(path, "\\ACPI("); if (hidstr[0] == '\0') path = uefidump_vprintf(path, "0x%" PRIx32 ",", a->hid); else path = uefidump_vprintf(path, "%s,", hidstr); hidstr += strlen(hidstr) + 1; if (hidstr[0] == '\0') path = uefidump_vprintf(path, "0x%" PRIx32 ",", a->uid); else path = uefidump_vprintf(path, "%s,", hidstr); hidstr += strlen(hidstr) + 1; if (hidstr[0] == '\0') path = uefidump_vprintf(path, "0x%" PRIx32 ",", a->cid); else path = uefidump_vprintf(path, "%s,", hidstr); } break; case FWTS_UEFI_ACPI_ADR_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_acpi_adr_dev_path)) { fwts_uefi_acpi_adr_dev_path *a = (fwts_uefi_acpi_adr_dev_path *)dev_path; uint16_t len = a->dev_path.length[0] | (((uint16_t)a->dev_path.length[1]) << 8); uint8_t *adr_add = (uint8_t *)a + sizeof(fwts_uefi_acpi_adr_dev_path); path = uefidump_vprintf(path, "\\ACPI_ADR(0x%" PRIx32, a->adr); /* Adding additional _ADR */ size_t offset = 0; while ((len - sizeof(fwts_uefi_acpi_adr_dev_path) - offset) >= sizeof(uint32_t)) { path = uefidump_vprintf(path, ", 0x%" PRIx32 , *(uint32_t *)(adr_add + offset)); offset += sizeof(uint32_t); } path = uefidump_vprintf(path, ")"); } break; default: path = uefidump_vprintf(path, "\\Unknown-ACPI-DEV-PATH(0x%" PRIx8 ")", dev_path->subtype); break; } break; case FWTS_UEFI_MESSAGING_DEVICE_PATH_TYPE: switch (dev_path->subtype) { case FWTS_UEFI_ATAPI_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_atapi_dev_path)) { fwts_uefi_atapi_dev_path *a = (fwts_uefi_atapi_dev_path*)dev_path; path = uefidump_vprintf(path, "\\ATAPI(0x%" PRIx8 ",0x%" PRIx8 ",0x%" PRIx16 ")", a->primary_secondary, a->slave_master, a->lun); } break; case FWTS_UEFI_SCSI_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_scsi_dev_path)) { fwts_uefi_scsi_dev_path *s = (fwts_uefi_scsi_dev_path*)dev_path; path = uefidump_vprintf(path, "\\SCSI(0x%" PRIx16 ",0x%" PRIx16 ")", s->pun, s->lun); } break; case FWTS_UEFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_fibre_channel_dev_path)) { fwts_uefi_fibre_channel_dev_path *f = (fwts_uefi_fibre_channel_dev_path*)dev_path; path = uefidump_vprintf(path, "\\FIBRECHANNEL(0x%" PRIx64 ",0x%" PRIx64 ")", f->wwn, f->lun); } break; case FWTS_UEFI_1394_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_1394_dev_path)) { fwts_uefi_1394_dev_path *fw = (fwts_uefi_1394_dev_path*)dev_path; path = uefidump_vprintf(path, "\\1394(0x%" PRIx64 ")", fw->guid); } break; case FWTS_UEFI_USB_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_usb_dev_path)) { fwts_uefi_usb_dev_path *u = (fwts_uefi_usb_dev_path*)dev_path; path = uefidump_vprintf(path, "\\USB(0x%" PRIx8 ",0x%" PRIx8 ")", u->parent_port_number, u->interface); } break; case FWTS_UEFI_USB_CLASS_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_usb_class_dev_path)) { fwts_uefi_usb_class_dev_path *u = (fwts_uefi_usb_class_dev_path*)dev_path; path = uefidump_vprintf(path, "\\USBCLASS(0x%" PRIx16 ",0x%" PRIx16 ",0x%" PRIx8 ",0x%" PRIx8 ",0x%" PRIx8 ")", u->vendor_id, u->product_id, u->device_class, u->device_subclass, u->device_protocol); } break; case FWTS_UEFI_I2O_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_i2o_dev_path)) { fwts_uefi_i2o_dev_path *i2o = (fwts_uefi_i2o_dev_path*)dev_path; path = uefidump_vprintf(path, "\\I2O(0x%" PRIx32 ")", i2o->tid); } break; case FWTS_UEFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_mac_addr_dev_path)) { fwts_uefi_mac_addr_dev_path *m = (fwts_uefi_mac_addr_dev_path*)dev_path; path = uefidump_vprintf(path, "\\MACADDR(%" PRIx8 ":%" PRIx8 ":%" PRIx8 ":%" PRIx8 ":%" PRIx8 ":%" PRIx8 ",0x%" PRIx8 ")", m->mac_addr[0], m->mac_addr[1], m->mac_addr[2], m->mac_addr[3], m->mac_addr[4], m->mac_addr[5], m->if_type); } break; case FWTS_UEFI_IPV4_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_ipv4_dev_path)) { fwts_uefi_ipv4_dev_path *i = (fwts_uefi_ipv4_dev_path *)dev_path; uint16_t len = i->dev_path.length[0] | (((uint16_t)i->dev_path.length[1]) << 8); path = uefidump_vprintf(path, "\\IPv4(" "%" PRIu8 ".%" PRIu8 ".%" PRIu8 ".%" PRIu8 "," "%" PRIu8 ".%" PRIu8 ".%" PRIu8 ".%" PRIu8 "," "%" PRIu16 ",%" PRIu16 ",%" PRIx16 ",%" PRIx8 , i->local_ip_addr[0], i->local_ip_addr[1], i->local_ip_addr[2], i->local_ip_addr[3], i->remote_ip_addr[0], i->remote_ip_addr[1], i->remote_ip_addr[2], i->remote_ip_addr[3], i->local_port, i->remote_port, i->protocol, i->static_ip_address); if (len >= sizeof(fwts_uefi_ipv4_dev_path_v2) && dev_path_len >= sizeof(fwts_uefi_ipv4_dev_path_v2)) { fwts_uefi_ipv4_dev_path_v2 *iv2 = (fwts_uefi_ipv4_dev_path_v2 *)dev_path; path = uefidump_vprintf(path, ",%" PRIu8 ".%" PRIu8 ".%" PRIu8 ".%" PRIu8 "," "%" PRIu8 ".%" PRIu8 ".%" PRIu8 ".%" PRIu8 , iv2->gateway_ip_addr[0], iv2->gateway_ip_addr[1], iv2->gateway_ip_addr[2], iv2->gateway_ip_addr[3], iv2->subnet_mask[0], iv2->subnet_mask[1], iv2->subnet_mask[2], iv2->subnet_mask[3]); } path = uefidump_vprintf(path, ")"); } break; case FWTS_UEFI_IPV6_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_ipv6_dev_path)) { fwts_uefi_ipv6_dev_path *i = (fwts_uefi_ipv6_dev_path *)dev_path; uint16_t len = i->dev_path.length[0] | (((uint16_t)i->dev_path.length[1]) << 8); path = uefidump_vprintf(path, "\\IPv6(" "%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 "," "%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 "," "%" PRIu16 ",%" PRIu16 ",%" PRIx16 ",%" PRIx8, i->local_ip_addr[0], i->local_ip_addr[1], i->local_ip_addr[2], i->local_ip_addr[3], i->local_ip_addr[4], i->local_ip_addr[5], i->local_ip_addr[6], i->local_ip_addr[7], i->remote_ip_addr[0], i->remote_ip_addr[1], i->remote_ip_addr[2], i->remote_ip_addr[3], i->remote_ip_addr[4], i->remote_ip_addr[5], i->remote_ip_addr[6], i->remote_ip_addr[7], i->local_port, i->remote_port, i->protocol, i->static_ip_address); if (len >= sizeof(fwts_uefi_ipv6_dev_path_v2) && dev_path_len >= sizeof(fwts_uefi_ipv6_dev_path_v2)) { fwts_uefi_ipv6_dev_path_v2 *iv2 = (fwts_uefi_ipv6_dev_path_v2 *)dev_path; path = uefidump_vprintf(path, ",%" PRIu8 "," "%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16, iv2->prefix_length, iv2->gateway_ip_addr[0], iv2->gateway_ip_addr[1], iv2->gateway_ip_addr[2], iv2->gateway_ip_addr[3], iv2->gateway_ip_addr[4], iv2->gateway_ip_addr[5], iv2->gateway_ip_addr[6], iv2->gateway_ip_addr[7]); } path = uefidump_vprintf(path, ")"); } break; case FWTS_UEFI_INFINIBAND_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_infiniband_dev_path)) { fwts_uefi_infiniband_dev_path *i = (fwts_uefi_infiniband_dev_path*)dev_path; path = uefidump_vprintf(path, "\\InfiniBand(" "%" PRIx8 ",%" PRIx64 ",%" PRIx64 ",%" PRIx64 ")", i->port_gid[0], i->remote_id, i->target_port_id, i->device_id); } break; case FWTS_UEFI_UART_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_uart_dev_path)) { fwts_uefi_uart_dev_path *u = (fwts_uefi_uart_dev_path*)dev_path; path = uefidump_vprintf(path, "\\UART(" "%" PRIu64 ",%" PRIu8 ",%" PRIu8 ",%" PRIu8 ")", u->baud_rate, u->data_bits, u->parity, u->stop_bits); } break; case FWTS_UEFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_vendor_messaging_dev_path)) { fwts_uefi_vendor_messaging_dev_path *v = (fwts_uefi_vendor_messaging_dev_path *)dev_path; size_t i; static const fwts_uefi_guid guid[] = { EFI_PC_ANSI_GUID, EFI_VT_100_GUID, EFI_VT_100_PLUS_GUID, EFI_VT_UTF8_GUID, EFI_UART_DEVICE_PATH_GUID, EFI_SAS_DEVICE_PATH_GUID }; static const char *str[] = { "PC-ANSI", "VT-100", "VT-100+", "VT-UTF8", "UARTFLOWCTRL", "SAS", "UnknownGUID" }; for (i = 0; i < sizeof(guid)/sizeof(guid[0]); i++) if (memcmp(&v->guid, &guid[i], sizeof(fwts_uefi_guid)) == 0) break; path = uefidump_vprintf(path, "\\VENDOR(%s", str[i]); if (i == 4) { uint32_t flow_control_map = v->vendor_defined_data[0] + (((uint32_t)v->vendor_defined_data[1]) << 8) + (((uint32_t)v->vendor_defined_data[2]) << 16) + (((uint32_t)v->vendor_defined_data[3] << 24)); path = uefidump_vprintf(path, ",0x%" PRIx32, flow_control_map); } if (i == 5 && dev_path_len >= sizeof(fwts_uefi_sas_messaging_dev_path)) { fwts_uefi_sas_messaging_dev_path *s = (fwts_uefi_sas_messaging_dev_path *)dev_path; path = uefidump_vprintf(path, ",0x%" PRIx64 ",0x%" PRIx64 ",0x%" PRIx16 ",0x%" PRIx16 , s->sas_addr, s->lun, s->dev_topology_info, s->rtp); } if (i == 6) path = uefidump_vprintf(path, " %08" PRIx32 "-%04" PRIx16 "-%04" PRIx16 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 , v->guid.info1, v->guid.info2, v->guid.info3, v->guid.info4[0], v->guid.info4[1], v->guid.info4[2], v->guid.info4[3], v->guid.info4[4], v->guid.info4[5], v->guid.info4[6], v->guid.info4[7]); path = uefidump_vprintf(path, ")"); } break; case FWTS_UEFI_FIBRE_CHANNEL_EX_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_fibre_channel_ex_dev_path)) { fwts_uefi_fibre_channel_ex_dev_path *f = (fwts_uefi_fibre_channel_ex_dev_path *)dev_path; path = uefidump_vprintf(path, "\\FIBREEX(0x%" PRIx64 ",0x%" PRIx64 ")", f->wwn, f->lun); } break; case FWTS_UEFI_SATA_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_sata_dev_path)) { fwts_uefi_sata_dev_path *s = (fwts_uefi_sata_dev_path *)dev_path; path = uefidump_vprintf(path, "\\SATA(0x%" PRIx16 ",0x%" PRIx16 ",0x%" PRIx16 ")", s->hbapn, s->pmpn, s->lun); } break; case FWTS_UEFI_USB_WWID_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_usb_wwid_dev_path)) { fwts_uefi_usb_wwid_dev_path *u = (fwts_uefi_usb_wwid_dev_path *)dev_path; uint16_t len = u->dev_path.length[0] | (((uint16_t)u->dev_path.length[1]) << 8); path = uefidump_vprintf(path, "\\USBWWID(0x%" PRIx16 ",0x%" PRIx16 ",0x%" PRIx16, u->interface_num, u->vendor_id, u->product_id); ssize_t sz; /* Adding Serial Number */ if (len <= sizeof(fwts_uefi_usb_wwid_dev_path)) { path = uefidump_vprintf(path, ")"); break; } sz = ((ssize_t)len - sizeof(fwts_uefi_usb_wwid_dev_path)) / sizeof(uint16_t) + 1; if ((sz > 0) && (sz <= 0xffff)) { char *tmp; tmp = malloc(sz); if (tmp) { fwts_uefi_str16_to_str(tmp, sz, u->serial_number); path = uefidump_vprintf(path, ",%s", tmp); free(tmp); } } path = uefidump_vprintf(path, ")"); } break; case FWTS_UEFI_VLAN_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_vlan_dev_path)) { fwts_uefi_vlan_dev_path *v = (fwts_uefi_vlan_dev_path *)dev_path; path = uefidump_vprintf(path, "\\VLAN(0x%" PRIx16 ")", v->vlanid); } break; case FWTS_UEFI_LOGICAL_UNIT_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_logical_unit_dev_path)) { fwts_uefi_logical_unit_dev_path *l = (fwts_uefi_logical_unit_dev_path *)dev_path; path = uefidump_vprintf(path, "\\DEVICELOGICALUNIT(0x%" PRIx8 ")", l->lun); } break; case FWTS_UEFI_SAS_EX_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_sas_ex_dev_path)) { fwts_uefi_sas_ex_dev_path *s = (fwts_uefi_sas_ex_dev_path *)dev_path; path = uefidump_vprintf(path, "\\SASEX(0x%" PRIx64 ",0x%" PRIx64 ",0x%" PRIx16 ",0x%" PRIx16 ")", s->sas_addr, s->lun, s->dev_topology_info, s->rtp); } break; case FWTS_UEFI_ISCSI_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_iscsi_dev_path)) { fwts_uefi_iscsi_dev_path *i = (fwts_uefi_iscsi_dev_path *)dev_path; uint16_t len = i->dev_path.length[0] | (((uint16_t)i->dev_path.length[1]) << 8); path = uefidump_vprintf(path, "\\iSCSI(0x%" PRIx16 ",0x%" PRIx16 ",0x%" PRIx64 ",0x%" PRIx16, i->protocol, i->options, i->lun, i->tpg_tag); /* Adding iSCSI target name */ if (len - sizeof(fwts_uefi_iscsi_dev_path) > 223) { path = uefidump_vprintf(path, ")"); break; } path = uefidump_vprintf(path, ",%s)", i->iscsi_tn); } break; case FWTS_UEFI_NVM_EXPRESS_NAMESP_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_nvm_express_namespace_dev_path)) { fwts_uefi_nvm_express_namespace_dev_path *n = (fwts_uefi_nvm_express_namespace_dev_path *)dev_path; path = uefidump_vprintf(path, "\\NVMEXPRESS(0x%" PRIx32 ",0x%" PRIx64 ")", n->namesp_id, n->ext_unique_id); } break; case FWTS_UEFI_URI_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_uri_dev_path)) { fwts_uefi_uri_dev_path *u = (fwts_uefi_uri_dev_path *)dev_path; uint16_t len = u->dev_path.length[0] | (((uint16_t)u->dev_path.length[1]) << 8); if ((len > sizeof(fwts_uefi_uri_dev_path)) && (len <= dev_path_len - sizeof(fwts_uefi_uri_dev_path))) { uint16_t tmp_len = len - sizeof(fwts_uefi_uri_dev_path); char tmp[tmp_len + 1]; memcpy(tmp, u->uri, tmp_len); tmp[tmp_len] = '\0'; path = uefidump_vprintf(path, "\\URI(%s)", tmp); } } break; case FWTS_UEFI_UFS_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_ufs_dev_path)) { fwts_uefi_ufs_dev_path *u = (fwts_uefi_ufs_dev_path *)dev_path; path = uefidump_vprintf(path, "\\UFS(0x%" PRIx8 ",0x%" PRIx8 ")", u->target_id, u->lun); } break; case FWTS_UEFI_SD_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_sd_dev_path)) { fwts_uefi_sd_dev_path *s = (fwts_uefi_sd_dev_path *)dev_path; path = uefidump_vprintf(path, "\\SD(0x%" PRIx8 ")", s->slot_number); } break; case FWTS_UEFI_BLUETOOTH_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_bluetooth_dev_path)) { fwts_uefi_bluetooth_dev_path *b = (fwts_uefi_bluetooth_dev_path *)dev_path; path = uefidump_vprintf(path, "\\BT(" "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 ")", b->bluetooth_addr[0], b->bluetooth_addr[1], b->bluetooth_addr[2], b->bluetooth_addr[3], b->bluetooth_addr[4], b->bluetooth_addr[5]); } break; case FWTS_UEFI_WIRELESS_DEVICE_PATH_SUBTYPE: if (dev_path_len > sizeof(fwts_uefi_wireless_dev_path)) { fwts_uefi_wireless_dev_path *w = (fwts_uefi_wireless_dev_path *)dev_path; path = uefidump_vprintf(path, "\\WiFi(%s)", w->ssid); } break; case FWTS_UEFI_EMMC_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_emmc_dev_path)) { fwts_uefi_emmc_dev_path *e = (fwts_uefi_emmc_dev_path *)dev_path; path = uefidump_vprintf(path, "\\eMMC(0x%" PRIx8 ")", e->slot_num); } break; case FWTS_UEFI_BLUETOOTHLE_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_bluetoothle_dev_path)) { fwts_uefi_bluetoothle_dev_path *b = (fwts_uefi_bluetoothle_dev_path *)dev_path; path = uefidump_vprintf(path, "\\BluetoothLE(" "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 ",0x%" PRIx8 ")", b->bluetooth_addr[0], b->bluetooth_addr[1], b->bluetooth_addr[2], b->bluetooth_addr[3], b->bluetooth_addr[4], b->bluetooth_addr[5], b->addr_type); } break; case FWTS_UEFI_DNS_DEVICE_PATH_SUBTYPE: if (dev_path_len > sizeof(fwts_uefi_dns_dev_path)) { fwts_uefi_dns_dev_path *d = (fwts_uefi_dns_dev_path *)dev_path; const uint16_t len = d->dev_path.length[0] | (((uint16_t)d->dev_path.length[1]) << 8); const ssize_t sz = (ssize_t)len - sizeof(fwts_uefi_dns_dev_path); path = uefidump_vprintf(path, "\\DNS(0x%" PRIx8 ",", d->isipv6); /* * Add a little more sanity checking, but we can never be sure * we will not overrun d->dns_addr as we have to trust the given * length. */ if ((sz > 0) && (sz <= 0xffff)) { ssize_t i; /* dump one or more DNS server address */ for (i = 0; i < sz; i++) path = uefidump_vprintf(path, "%02" PRIx8 , d->dns_addr[i]); path = uefidump_vprintf(path, ")"); } } break; default: path = uefidump_vprintf(path, "\\Unknown-MESSAGING-DEV-PATH(0x%" PRIx8 ")", dev_path->subtype); break; } break; case FWTS_UEFI_MEDIA_DEVICE_PATH_TYPE: switch (dev_path->subtype) { case FWTS_UEFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_hard_drive_dev_path)) { fwts_uefi_hard_drive_dev_path *h = (fwts_uefi_hard_drive_dev_path*)dev_path; path = uefidump_vprintf(path, "\\HARDDRIVE(" "%" PRIu32 ",%" PRIx64 ",%" PRIx64 "," "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "," "%" PRIx8 ",%" PRIx8 ")", h->partition_number, h->partition_start, h->partition_size, h->partition_signature[0], h->partition_signature[1], h->partition_signature[2], h->partition_signature[3], h->partition_signature[4], h->partition_signature[5], h->partition_signature[6], h->partition_signature[7], h->partition_signature[8], h->partition_signature[9], h->partition_signature[10], h->partition_signature[11], h->partition_signature[12], h->partition_signature[13], h->partition_signature[14], h->partition_signature[15], h->mbr_type, h->signature_type); } break; case FWTS_UEFI_CDROM_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_cdrom_dev_path)) { fwts_uefi_cdrom_dev_path *c = (fwts_uefi_cdrom_dev_path*)dev_path; path = uefidump_vprintf(path, "\\CDROM(%" PRIu32 ",%" PRIx64 ",%" PRIx64 ")", c->boot_entry, c->partition_start, c->partition_size); } break; case FWTS_UEFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_uefi_vendor_media_dev_path)) { fwts_uefi_vendor_media_dev_path *v = (fwts_uefi_vendor_media_dev_path*)dev_path; path = uefidump_vprintf(path, "\\VENDOR(" "%08" PRIx32 "-%04" PRIx16 "-%04" PRIx16 "-" "%02" PRIx8 "-%02" PRIx8 "-" "%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 ")", v->guid.info1, v->guid.info2, v->guid.info3, v->guid.info4[0], v->guid.info4[1], v->guid.info4[2], v->guid.info4[3], v->guid.info4[4], v->guid.info4[5], v->guid.info4[6], v->guid.info4[7]); } break; case FWTS_UEFI_FILE_PATH_DEVICE_PATH_SUBTYPE: { char tmp[4096]; fwts_uefi_file_path_dev_path *f = (fwts_uefi_file_path_dev_path*)dev_path; fwts_uefi_str16_to_str(tmp, sizeof(tmp), f->path_name); path = uefidump_vprintf(path, "\\FILE('%s')", tmp); } break; case FWTS_UEFI_PROTOCOL_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_media_protocol_dev_path)) { fwts_media_protocol_dev_path *m = (fwts_media_protocol_dev_path *)dev_path; path = uefidump_vprintf(path, "\\MEDIAPROTOCOL(" "%08" PRIx32 "-%04" PRIx16 "-%04" PRIx16 "-" "%02" PRIx8 "-%02" PRIx8 "-" "%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 ")", m->protocol_guid.info1, m->protocol_guid.info2, m->protocol_guid.info3, m->protocol_guid.info4[0], m->protocol_guid.info4[1], m->protocol_guid.info4[2], m->protocol_guid.info4[3], m->protocol_guid.info4[4], m->protocol_guid.info4[5], m->protocol_guid.info4[6], m->protocol_guid.info4[7]); } break; case FWTS_UEFI_PIWG_FW_FILE_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_piwg_fw_file_dev_path)) { fwts_piwg_fw_file_dev_path *p = (fwts_piwg_fw_file_dev_path *)dev_path; path = uefidump_vprintf(path, "\\FVFILE(" "%08" PRIx32 "-%04" PRIx16 "-%04" PRIx16 "-" "%02" PRIx8 "-%02" PRIx8 "-" "%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 ")", p->fw_file_name.info1, p->fw_file_name.info2, p->fw_file_name.info3, p->fw_file_name.info4[0], p->fw_file_name.info4[1], p->fw_file_name.info4[2], p->fw_file_name.info4[3], p->fw_file_name.info4[4], p->fw_file_name.info4[5], p->fw_file_name.info4[6], p->fw_file_name.info4[7]); } break; case FWTS_UEFI_PIWG_FW_VOLUME_DEVICE_PATH_SUBTYPE: if (dev_path_len >= sizeof(fwts_piwg_fw_volume_dev_path)) { fwts_piwg_fw_volume_dev_path *p = (fwts_piwg_fw_volume_dev_path *)dev_path; path = uefidump_vprintf(path, "\\FV(" "%08" PRIx32 "-%04" PRIx16 "-%04" PRIx16 "-" "%02" PRIx8 "-%02" PRIx8 "-" "%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 ")", p->fw_volume_name.info1, p->fw_volume_name.info2, p->fw_volume_name.info3, p->fw_volume_name.info4[0], p->fw_volume_name.info4[1], p->fw_volume_name.info4[2], p->fw_volume_name.info4[3], p->fw_volume_name.info4[4], p->fw_volume_name.info4[5], p->fw_volume_name.info4[6], p->fw_volume_name.info4[7]); } break; case FWTS_UEFI_RELATIVE_OFFSET_RANGE_SUBTYPE: if (dev_path_len >= sizeof(fwts_relative_offset_range_path)) { fwts_relative_offset_range_path *r = (fwts_relative_offset_range_path *)dev_path; path = uefidump_vprintf(path, "\\RELATIVEOFFSETRANGE(" "0x%" PRIx64 ",0x%" PRIx64 ")", r->starting_offset, r->ending_offset); } break; case FWTS_UEFI_RAM_DISK_SUBTYPE: if (dev_path_len >= sizeof(fwts_ram_disk_path)) { fwts_ram_disk_path *r = (fwts_ram_disk_path *)dev_path; path = uefidump_vprintf(path, "\\RAMDISK(" "0x%" PRIx64 ",0x%" PRIx64 "%08" PRIx32 "-%04" PRIx16 "-%04" PRIx16 "-" "%02" PRIx8 "-%02" PRIx8 "-" "%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 "-%02" PRIx8 ",0x%" PRIx16 ")", r->starting_addr, r->ending_addr, r->disk_type_guid.info1, r->disk_type_guid.info2, r->disk_type_guid.info3, r->disk_type_guid.info4[0], r->disk_type_guid.info4[1], r->disk_type_guid.info4[2], r->disk_type_guid.info4[3], r->disk_type_guid.info4[4], r->disk_type_guid.info4[5], r->disk_type_guid.info4[6], r->disk_type_guid.info4[7], r->disk_instance); } break; default: path = uefidump_vprintf(path, "\\Unknown-MEDIA-DEV-PATH(0x%" PRIx8 ")", dev_path->subtype); break; } break; case FWTS_UEFI_BIOS_DEVICE_PATH_TYPE: switch (dev_path->subtype) { case FWTS_UEFI_BIOS_DEVICE_PATH_SUBTYPE: { fwts_uefi_bios_dev_path *b = (fwts_uefi_bios_dev_path*)dev_path; path = uefidump_vprintf(path, "\\BIOS(%" PRIx16 ",%" PRIx16 ",%s)", b->device_type, b->status_flags, b->description); } break; default: path = uefidump_vprintf(path, "\\Unknown-BIOS-DEV-PATH(0x%" PRIx8 ")", dev_path->subtype); break; } break; default: path = uefidump_vprintf(path, "\\Unknown-TYPE(0x%" PRIx8 ")", dev_path->type); break; } /* Not end? - collect more */ if (!((dev_path->type & 0x7f) == (FWTS_UEFI_END_DEV_PATH_TYPE) && (dev_path->subtype == FWTS_UEFI_END_ENTIRE_DEV_PATH_SUBTYPE))) { uint16_t len = dev_path->length[0] | (((uint16_t)dev_path->length[1])<<8); if (len > 0) { dev_path = (fwts_uefi_dev_path*)((char *)dev_path + len); path = uefidump_build_dev_path(path, dev_path, dev_path_len - len); } } return path; } static void uefidump_info_dev_path(fwts_framework *fw, fwts_uefi_var *var) { char *path; path = uefidump_build_dev_path(NULL, (fwts_uefi_dev_path*)var->data, var->datalen); fwts_log_info_verbatim(fw, " Device Path: %s", path); free(path); } static void uefidump_info_lang(fwts_framework *fw, fwts_uefi_var *var) { uint8_t *data = (uint8_t*)var->data; fwts_log_info_verbatim(fw, " Language: %c%c%c%c", data[0], data[1], data[2], data[3]); } static void uefidump_info_langcodes(fwts_framework *fw, fwts_uefi_var *var) { char buffer[2048]; char *dst = buffer; char *data = (char*)var->data; for (;;) { *dst++ = *data++; *dst++ = *data++; *dst++ = *data++; if (*data < ' ') break; *dst++ = ','; } *dst = '\0'; fwts_log_info_verbatim(fw, " Language Codes: %s", buffer); } static void uefidump_info_platform_lang(fwts_framework *fw, fwts_uefi_var *var) { uint8_t *data = (uint8_t*)var->data; fwts_log_info_verbatim(fw, " Platform Language: %c%c%c%c%c%c.", data[0], data[1], data[2], data[3], data[4], data[5]); } static void uefidump_info_platform_langcodes(fwts_framework *fw, fwts_uefi_var *var) { char buffer[2048]; char *dst = buffer; char *data = (char*)var->data; for (;;) { if (*data < ' ') break; if (*data == ';') *dst++ = ','; else *dst++ = *data; data++; } *dst = '\0'; fwts_log_info_verbatim(fw, " Platform Language Codes: %s", buffer); } static void uefidump_info_timeout(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen >= sizeof(uint16_t)) { uint16_t *data = (uint16_t*)var->data; fwts_log_info_verbatim(fw, " Timeout: %" PRId16 " seconds", *data); } } static void uefidump_info_bootcurrent(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen >= sizeof(uint16_t)) { uint16_t *data = (uint16_t *)var->data; fwts_log_info_verbatim(fw, " BootCurrent: 0x%4.4" PRIx16, *data); } } static void uefidump_info_bootnext(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen >= sizeof(uint16_t)) { uint16_t *data = (uint16_t *)var->data; fwts_log_info_verbatim(fw, " BootNext: 0x%4.4" PRIx16, *data); } } static void uefidump_info_bootoptionsupport(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen >= sizeof(uint16_t)) { uint16_t *data = (uint16_t *)var->data; fwts_log_info_verbatim(fw, " BootOptionSupport: 0x%4.4" PRIx16, *data); } } static void uefidump_info_bootorder(fwts_framework *fw, fwts_uefi_var *var) { uint16_t *data = (uint16_t*)var->data; int i; int n = (int)var->datalen / sizeof(uint16_t); char *str = NULL; for (i = 0; i < n; i++) { str = uefidump_vprintf(str, "0x%04" PRIx16 "%s", *data++, i < (n - 1) ? "," : ""); } fwts_log_info_verbatim(fw, " Boot Order: %s", str); free(str); } static void uefidump_info_bootdev(fwts_framework *fw, fwts_uefi_var *var) { fwts_uefi_load_option *load_option; char tmp[2048]; size_t len, offset; if (var->datalen < sizeof(fwts_uefi_load_option)) return; load_option = (fwts_uefi_load_option *)var->data; fwts_log_info_verbatim(fw, " Active: %s\n", (load_option->attributes & FWTS_UEFI_LOAD_OPTION_ACTIVE) ? "Yes" : "No"); fwts_uefi_str16_to_str(tmp, sizeof(tmp), load_option->description); len = fwts_uefi_str16len(load_option->description); fwts_log_info_verbatim(fw, " Info: %s\n", tmp); if (load_option->file_path_list_length != 0) { char *path; /* Skip over description to get to packed path, unpack path and print */ offset = sizeof(load_option->attributes) + sizeof(load_option->file_path_list_length) + (sizeof(uint16_t) * (len + 1)); path = uefidump_build_dev_path(NULL, (fwts_uefi_dev_path *)(var->data + offset), var->datalen - offset); fwts_log_info_verbatim(fw, " Path: %s", path); free(path); } offset = sizeof(load_option->attributes) + sizeof(load_option->file_path_list_length) + (sizeof(uint16_t) * (len + 1)) + load_option->file_path_list_length; if ((var->datalen - offset) > 0) { fwts_log_info_verbatim(fw, " OptionalData:"); uefidump_data_hexdump(fw, var->data + offset, var->datalen - offset); } } /* * Dump kernel oops log messages */ static void uefidump_info_dump_type0(fwts_framework *fw, fwts_uefi_var *var) { char *ptr = (char*)var->data; size_t len = var->datalen; bool printable = true; while (len && *ptr) { if (!(isspace(*ptr) || isprint(*ptr))) { printable = false; break; } ptr++; len--; } ptr = (char*)var->data; len = var->datalen; if (printable) { while (len && *ptr) { char *start = ptr; while (len && *ptr && *ptr != '\n') { ptr++; len--; } if (*ptr == '\n') { *ptr++ = '\0'; len--; fwts_log_info_verbatim(fw, " KLog: %s", start); } } } else { uefidump_var_hexdump(fw, var); } } static void uefidump_info_secure_boot(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen != 1) { /* Should be 1 byte, of not, dump it out as a hex dump */ uefidump_var_hexdump(fw, var); } else { char *mode; uint8_t value = (uint8_t)var->data[0]; switch (value) { case 0: mode = " (Secure Boot Mode Off)"; break; case 1: mode = " (Secure Boot Mode On)"; break; default: mode = ""; break; } fwts_log_info_verbatim(fw, " Value: 0x%2.2x%s", value, mode); } } static void uefidump_info_setup_mode(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen != 1) { /* Should be 1 byte, of not, dump it out as a hex dump */ uefidump_var_hexdump(fw, var); } else { char *mode; uint8_t value = (uint8_t)var->data[0]; switch (value) { case 0: mode = " (User Mode)"; break; case 1: mode = " (Setup Mode)"; break; default: mode = ""; break; } fwts_log_info_verbatim(fw, " Value: 0x%2.2" PRIx8 "%s", value, mode); } } /* * See TCG Platform Reset Attack Mitigation Specification, Revision 1.0, * section 5. */ static void uefidump_info_morc(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen != 1) { /* Should be 1 byte, of not, dump it out as a hex dump */ uefidump_var_hexdump(fw, var); } else { char *mode; uint8_t value = (uint8_t)var->data[0]; switch (value & 1) { case 0: mode = " (Firmware should not clear memory on reboot)"; break; case 1: mode = " (Firmware should clear memory on reboot)"; break; default: mode = ""; break; } fwts_log_info_verbatim(fw, " Value: 0x%2.2" PRIx8 "%s", value, mode); } } /* * Dump ACPI global variable address */ static void uefidump_info_acpi_global_variable(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen != 8) { /* Should be 8 bytes, of not, dump it out as a hex dump */ uefidump_var_hexdump(fw, var); } else { uint64_t value; memcpy(&value, var->data, sizeof(uint64_t)); fwts_log_info_verbatim(fw, " ACPI Global Variable Address: 0x%16.16" PRIx64, value); } } /* * Dump Supported Signature GUIDs */ static void uefidump_info_signature_support(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen % 16) { /* Should be multiple of 16 bytes, of not, dump it out as a hex dump */ uefidump_var_hexdump(fw, var); } else { /* Signatures are an array of GUIDs */ uint8_t *data = var->data; char guid_str[37]; if (var->datalen) fwts_log_info_verbatim(fw, " Signature GUIDs:"); while (data - var->data < (ptrdiff_t)var->datalen) { fwts_guid_buf_to_str(data, guid_str, sizeof(guid_str)); fwts_log_info_verbatim(fw, " %s", guid_str); data += 16; } } } static void uefidump_info_hwerrrec_support(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen != 2) { /* Should be 2 byte, of not, dump it out as a hex dump */ uefidump_var_hexdump(fw, var); } else { char *support; uint16_t *value = (uint16_t *)var->data; switch (*value) { case 0: support = " (Not support for Hardware Error Record Persistence)"; break; case 1: support = " (Support for Hardware Error Record Persistence)"; break; default: support = " (reserved value)"; break; } fwts_log_info_verbatim(fw, " Value: 0x%4.4" PRIx16 "%s", *value, support); } } static void uefidump_info_osindications_supported(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen != 8) { /* Should be 8 bytes, of not, dump it out as a hex dump */ uefidump_var_hexdump(fw, var); } else { uint64_t value; char str[300]; memcpy(&value, var->data, sizeof(uint64_t)); *str = 0; if (value & EFI_OS_INDICATIONS_BOOT_TO_FW_UI) strcat(str, "EFI_OS_INDICATIONS_BOOT_TO_FW_UI"); if (value & EFI_OS_INDICATIONS_TIMESTAMP_REVOCATION) { if (*str) strcat(str, ","); strcat(str, "EFI_OS_INDICATIONS_TIMESTAMP_REVOCATION"); } if (value & EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED) { if (*str) strcat(str, ","); strcat(str, "EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED"); } if (value & EFI_OS_INDICATIONS_FMP_CAPSULE_SUPPORTED) { if (*str) strcat(str, ","); strcat(str, "EFI_OS_INDICATIONS_FMP_CAPSULE_SUPPORTED"); } if (value & EFI_OS_INDICATIONS_CAPSULE_RESULT_VAR_SUPPORTED) { if (*str) strcat(str, ","); strcat(str, "EFI_OS_INDICATIONS_CAPSULE_RESULT_VAR_SUPPORTED"); } fwts_log_info_verbatim(fw, " Value: 0x%16.16" PRIx64 " (%s)", value, str); } } static void uefidump_info_vendor_keys(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen >= sizeof(uint8_t)) { uint8_t value = (uint8_t)var->data[0]; fwts_log_info_verbatim(fw, " Value: 0x%2.2" PRIx8, value); } } static void uefidump_info_driverorder(fwts_framework *fw, fwts_uefi_var *var) { uint16_t *data = (uint16_t*)var->data; size_t i, n = var->datalen / sizeof(uint16_t); char *str = NULL; for (i = 0; i < n; i++) { str = uefidump_vprintf(str, "0x%04" PRIx16 "%s", *data++, i < (n - 1) ? "," : ""); } fwts_log_info_verbatim(fw, " Driver Order: %s", str); free(str); } static void uefidump_info_driverdev(fwts_framework *fw, fwts_uefi_var *var) { fwts_uefi_load_option *load_option; size_t len; size_t offset; if (var->datalen < sizeof(fwts_uefi_load_option)) return; load_option = (fwts_uefi_load_option *)var->data; fwts_log_info_verbatim(fw, " Force Reconnect: %s\n", (load_option->attributes & FWTS_UEFI_LOAD_OPTION_FORCE_RECONNECT) ? "Yes" : "No"); len = fwts_uefi_str16len(load_option->description); if (len != 0) { char *tmp = malloc(len + 1); if (tmp) { fwts_uefi_str16_to_str(tmp, len + 1, load_option->description); fwts_log_info_verbatim(fw, " Info: %s\n", tmp); free(tmp); } } if (load_option->file_path_list_length != 0) { char *path; /* Skip over description to get to packed path, unpack path and print */ offset = sizeof(load_option->attributes) + sizeof(load_option->file_path_list_length) + (sizeof(uint16_t) * (len + 1)); path = uefidump_build_dev_path(NULL, (fwts_uefi_dev_path *)(var->data + offset), var->datalen - offset); fwts_log_info_verbatim(fw, " Path: %s", path); free(path); } offset = sizeof(load_option->attributes) + sizeof(load_option->file_path_list_length) + (sizeof(uint16_t) * (len + 1)) + load_option->file_path_list_length; if ((var->datalen - offset) > 0) { fwts_log_info_verbatim(fw, " OptionalData:"); uefidump_data_hexdump(fw, var->data + offset, var->datalen - offset); } } static void uefidump_info_keyoption(fwts_framework *fw, fwts_uefi_var *var) { fwts_uefi_key_option *key_option = (fwts_uefi_key_option *)var->data; fwts_uefi_input_key *inputkey = (fwts_uefi_input_key *) (((uint8_t *) var->data) + sizeof (fwts_uefi_key_option)); char str[300]; size_t keyoptionsize, inputkeycount, index = 0; *str = 0; if (var->datalen < sizeof (fwts_uefi_key_option)) { uefidump_var_hexdump(fw, var); return; } if (key_option->keydata & (1 << 8)) strcat(str, "ShiftPressed"); if (key_option->keydata & (1 << 9)) { if (*str) strcat(str, ","); strcat(str, "ControlPressed"); } if (key_option->keydata & (1 << 10)) { if (*str) strcat(str, ","); strcat(str, "AltPressed"); } if (key_option->keydata &(1 << 11)) { if (*str) strcat(str, ","); strcat(str, "LogoPressed"); } if (key_option->keydata & (1 << 12)) { if (*str) strcat(str, ","); strcat(str, "MenuPressed"); } if (key_option->keydata & (1 << 13)) { if (*str) strcat(str, ","); strcat(str, "SysReqPressed"); } if (*str != 0) fwts_log_info_verbatim(fw, " PackedValue: 0x%8.8" PRIx32 " (%s)", key_option->keydata, str); else fwts_log_info_verbatim(fw, " PackedValue: 0x%8.8" PRIx32, key_option->keydata); fwts_log_info_verbatim(fw, " BootOptionCrc: 0x%8.8" PRIx32, key_option->bootoptioncrc); fwts_log_info_verbatim(fw, " BootOption: %4.4" PRIx16, key_option->bootoption); inputkeycount = (key_option->keydata & 0xC0000000) >> 30; for (index = 0; index < inputkeycount; index++) { fwts_log_info_verbatim(fw, " ScanCode: 0x%4.4" PRIx16, inputkey[index].scancode); fwts_log_info_verbatim(fw, " UnicodeChar: 0x%4.4" PRIx16, inputkey[index].unicodechar); } keyoptionsize = sizeof (fwts_uefi_key_option) + inputkeycount * sizeof (fwts_uefi_input_key); /* * there are extra data following the keyoption data structure which the firmware is using, * dump all data for reference */ if (var->datalen > keyoptionsize) { uefidump_var_hexdump(fw, var); } } #define GUID_MAP(x) { x, # x } static void uefidump_info_signaturedatabase(fwts_framework *fw, fwts_uefi_var *var) { char guid_str[37]; size_t list_start = 0; size_t i; typedef struct { const fwts_uefi_guid guid; const char *str; } guid_map; static const guid_map guids[] = { GUID_MAP(EFI_CERT_X509_GUID), GUID_MAP(EFI_CERT_SHA256_GUID), GUID_MAP(EFI_CERT_RSA2048_GUID), GUID_MAP(EFI_CERT_RSA2048_SHA256_GUID), GUID_MAP(EFI_CERT_SHA1_GUID), GUID_MAP(EFI_CERT_RSA2048_SHA1_GUID), GUID_MAP(EFI_CERT_SHA224_GUID), GUID_MAP(EFI_CERT_SHA384_GUID), GUID_MAP(EFI_CERT_SHA512_GUID), GUID_MAP(EFI_CERT_X509_SHA256_GUID), GUID_MAP(EFI_CERT_X509_SHA384_GUID), GUID_MAP(EFI_CERT_X509_SHA512_GUID), { { 0, 0, 0, { 0, }}, NULL } }; if (var->datalen < sizeof(fwts_uefi_signature_list)) return; do { fwts_uefi_signature_list *signature_list = (fwts_uefi_signature_list *)(var->data + list_start); const char *str = "Unknown GUID"; size_t offset = 0; fwts_guid_buf_to_str(var->data, guid_str, sizeof(guid_str)); for (i = 0; guids[i].str; i++) if (!memcmp(var->data, &guids[i].guid, sizeof(fwts_uefi_guid))) { str = guids[i].str; break; } fwts_log_info_verbatim(fw, " SignatureType: %s (%s)", guid_str, str); fwts_log_info_verbatim(fw, " SignatureListSize: 0x%" PRIx32, signature_list->signaturelistsize); fwts_log_info_verbatim(fw, " SignatureHeaderSize: 0x%" PRIx32, signature_list->signatureheadersize); fwts_log_info_verbatim(fw, " SignatureSize: 0x%" PRIx32, signature_list->signaturesize); offset = list_start + sizeof (fwts_uefi_signature_list); if (signature_list->signatureheadersize > 0) { fwts_log_info_verbatim(fw, " SignatureHeader:"); uefidump_data_hexdump(fw, (uint8_t *)(var->data + offset), signature_list->signatureheadersize); } offset += signature_list->signatureheadersize; while ((signature_list->signaturelistsize - offset + list_start) > 0) { if ((signature_list->signaturelistsize - offset + list_start) >= signature_list->signaturesize) { fwts_guid_buf_to_str((uint8_t *)(var->data + offset), guid_str, sizeof(guid_str)); fwts_log_info_verbatim(fw, " SignatureOwner: %s", guid_str); offset += sizeof(fwts_uefi_guid); fwts_log_info_verbatim(fw, " SignatureData:"); uefidump_data_hexdump(fw, (uint8_t *)(var->data + offset), signature_list->signaturesize - sizeof(fwts_uefi_guid)); offset += signature_list->signaturesize - sizeof(fwts_uefi_guid); } else { /* have Signature data left, but not correspond to the SignatureSize, just dump raw data */ fwts_log_info_verbatim(fw, " Data:"); uefidump_data_hexdump(fw, (uint8_t *)(var->data + offset), (signature_list->signaturelistsize - offset + list_start)); break; } } list_start += signature_list->signaturelistsize; } while ((var->datalen - list_start) > sizeof(fwts_uefi_signature_list)); } static void uefidump_info_audit_mode(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen != 1) { /* Should be 1 byte, of not, dump it out as a hex dump */ uefidump_var_hexdump(fw, var); } else { char *mode; uint8_t value = (uint8_t)var->data[0]; switch (value) { case 0: mode = " (Not in Audit Mode)"; break; case 1: mode = " (In Audit Mode)"; break; default: mode = ""; break; } fwts_log_info_verbatim(fw, " Value: 0x%2.2x%s", value, mode); } } static void uefidump_info_deployed_mode(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen != 1) { /* Should be 1 byte, of not, dump it out as a hex dump */ uefidump_var_hexdump(fw, var); } else { char *mode; uint8_t value = (uint8_t)var->data[0]; switch (value) { case 0: mode = " (Not in Deployed Mode)"; break; case 1: mode = " (In Deployed Mode)"; break; default: mode = ""; break; } fwts_log_info_verbatim(fw, " Value: 0x%2.2x%s", value, mode); } } static void uefidump_info_osrecoverorder(fwts_framework *fw, fwts_uefi_var *var) { if (var->datalen % 16) { /* Should be multiple of 16 bytes, of not, dump it out as a hex dump */ uefidump_var_hexdump(fw, var); } else { /* OSRecoveryOrder are an array of GUIDs */ uint8_t *data = var->data; char guid_str[37]; if (var->datalen) fwts_log_info_verbatim(fw, " OSRecoveryOrder GUIDs:"); while (data - var->data < (ptrdiff_t)var->datalen) { fwts_guid_buf_to_str(data, guid_str, sizeof(guid_str)); fwts_log_info_verbatim(fw, " %s", guid_str); data += 16; } } } static void uefidump_info_syspreporder(fwts_framework *fw, fwts_uefi_var *var) { uint16_t *data = (uint16_t*)var->data; int i; int n = (int)var->datalen / sizeof(uint16_t); char *str = NULL; for (i = 0; i < n; i++) { str = uefidump_vprintf(str, "0x%04" PRIx16 "%s", *data++, i < (n - 1) ? "," : ""); } fwts_log_info_verbatim(fw, " SysPrep Order: %s", str); free(str); } static const uefidump_info uefidump_info_table[] = { { "PlatformLangCodes", uefidump_info_platform_langcodes }, { "PlatformLang", uefidump_info_platform_lang }, { "BootOptionSupport", uefidump_info_bootoptionsupport }, { "BootCurrent", uefidump_info_bootcurrent }, { "BootOrder", uefidump_info_bootorder }, { "BootNext", uefidump_info_bootnext }, { "ConInDev", uefidump_info_dev_path }, { "ConIn", uefidump_info_dev_path }, { "ConOutDev", uefidump_info_dev_path }, { "ConOut", uefidump_info_dev_path }, { "ConErrDev", uefidump_info_dev_path }, { "ErrOutDev", uefidump_info_dev_path }, { "ErrOut", uefidump_info_dev_path }, { "LangCodes", uefidump_info_langcodes }, { "Lang", uefidump_info_lang }, { "Timeout", uefidump_info_timeout }, { "dump-type0-", uefidump_info_dump_type0 }, { "SecureBoot", uefidump_info_secure_boot }, { "SetupMode", uefidump_info_setup_mode }, { "MemoryOverwriteRequestControl", uefidump_info_morc }, { "AcpiGlobalVariable", uefidump_info_acpi_global_variable }, { "SignatureSupport", uefidump_info_signature_support }, { "HwErrRecSupport", uefidump_info_hwerrrec_support }, { "OsIndicationsSupported", uefidump_info_osindications_supported }, { "VendorKeys", uefidump_info_vendor_keys }, { "DriverOrder", uefidump_info_driverorder }, { "db", uefidump_info_signaturedatabase }, { "KEK", uefidump_info_signaturedatabase }, { "PK", uefidump_info_signaturedatabase }, { "AuditMode", uefidump_info_audit_mode }, { "DeployedMode", uefidump_info_deployed_mode }, { "OsRecoveryOrder", uefidump_info_osrecoverorder }, { "SysPrepOrder", uefidump_info_syspreporder }, { NULL, NULL } }; static void uefidump_var(fwts_framework *fw, fwts_uefi_var *var) { char varname[512]; char guid_str[37]; const uefidump_info *info; fwts_uefi_get_varname(varname, sizeof(varname), var); fwts_log_info_verbatim(fw, "Name: %s", varname); fwts_guid_buf_to_str(var->guid, guid_str, sizeof(guid_str)); fwts_log_info_verbatim(fw, " GUID: %s", guid_str); fwts_log_info_verbatim(fw, " Attr: 0x%x (%s)", var->attributes, fwts_uefi_attribute_info(var->attributes)); /* If we've got an appropriate per variable dump mechanism, use this */ for (info = uefidump_info_table; info->description != NULL; info++) { if (strncmp(varname, info->description, strlen(info->description)) == 0) { info->func(fw, var); return; } } /* Check the boot load option Boot####. #### is a printed hex value */ if ((strlen(varname) == 8) && (strncmp(varname, "Boot", 4) == 0) && isxdigit(varname[4]) && isxdigit(varname[5]) && isxdigit(varname[6]) && isxdigit(varname[7])) { uefidump_info_bootdev(fw, var); return; } /* Check the driver load option Driver####. #### is a printed hex value */ if ((strlen(varname) == 10) && (strncmp(varname, "Driver", 6) == 0) && isxdigit(varname[6]) && isxdigit(varname[7]) && isxdigit(varname[8]) && isxdigit(varname[9])) { uefidump_info_driverdev(fw, var); return; } /* Check the key option key####. #### is a printed hex value */ if ((strlen(varname) == 7) && (strncmp(varname, "Key", 3) == 0) && isxdigit(varname[3]) && isxdigit(varname[4]) && isxdigit(varname[5]) && isxdigit(varname[6])) { uefidump_info_keyoption(fw, var); return; } /* * Check the platformRecovery of boot option PlatformRecovery####. #### is a printed hex value. * PlatformRecovery#### variables share the same structure as Boot#### variables. */ if ((strlen(varname) == 20) && (strncmp(varname, "PlatformRecovery", 16) == 0) && isxdigit(varname[16]) && isxdigit(varname[17]) && isxdigit(varname[18]) && isxdigit(varname[19])) { uefidump_info_bootdev(fw, var); return; } /* * Check the System Prep application load option SysPrep####. #### is a printed hex value. */ if ((strlen(varname) == 11) && (strncmp(varname, "SysPrep", 7) == 0) && isxdigit(varname[7]) && isxdigit(varname[8]) && isxdigit(varname[9]) && isxdigit(varname[10])) { uefidump_info_bootdev(fw, var); return; } /* otherwise just do a plain old hex dump */ uefidump_var_hexdump(fw, var); } static int uefidump_init(fwts_framework *fw) { if (fw->firmware_type != FWTS_FIRMWARE_UEFI) { fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted."); return FWTS_ABORTED; } return FWTS_OK; } static int uefidump_test1(fwts_framework *fw) { fwts_list name_list; if (fwts_uefi_get_variable_names(&name_list) == FWTS_ERROR) { fwts_log_info(fw, "Cannot find any UEFI variables."); } else { fwts_list_link *item; fwts_list_foreach(item, &name_list) { fwts_uefi_var var; char *name = fwts_list_data(char *, item); if (fwts_uefi_get_variable(name, &var) == FWTS_OK) { uefidump_var(fw, &var); fwts_uefi_free_variable(&var); fwts_log_nl(fw); } } } fwts_uefi_free_variable_names(&name_list); return FWTS_OK; } static fwts_framework_minor_test uefidump_tests[] = { { uefidump_test1, "Dump UEFI Variables." }, { NULL, NULL } }; static fwts_framework_ops uefidump_ops = { .description = "Dump UEFI variables.", .init = uefidump_init, .minor_tests = uefidump_tests }; FWTS_REGISTER("uefidump", &uefidump_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS | FWTS_FLAG_ROOT_PRIV) #endif src/uefi/uefirtauthvar/000077500000000000000000000000001465205512700154755ustar00rootroot00000000000000src/uefi/uefirtauthvar/authvardefs.h000066400000000000000000002024741465205512700201730ustar00rootroot00000000000000/* * Copyright (C) 2014-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef __AUTH_VAR_DEF_H__ #define __AUTH_VAR_DEF_H__ /* * AuthVarCreate, * timestamp: 2014.09.08:03:41:15 * GUID: 7f5c5d52-2f14-4f12-967cdb60db05a0fd * attributes = UEFI_VAR_NON_VOLATILE, UEFI_VAR_BOOTSERVICE_ACCESS, * UEFI_VAR_RUNTIME_ACCESS, UEFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS * Variable name: AuthVarTest * data content: 1234567890abcdef */ static uint8_t AuthVarCreate[] = { 0xde, 0x07, 0x09, 0x08, 0x03, 0x29, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x04, 0x00, 0x00, 0x00, 0x02, 0xf1, 0x0e, 0x9d, 0xd2, 0xaf, 0x4a, 0xdf, 0x68, 0xee, 0x49, 0x8a, 0xa9, 0x34, 0x7d, 0x37, 0x56, 0x65, 0xa7, 0x30, 0x82, 0x04, 0xdc, 0x02, 0x01, 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82, 0x02, 0xfd, 0x30, 0x82, 0x02, 0xf9, 0x30, 0x82, 0x01, 0xe1, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xbb, 0x94, 0x92, 0x5f, 0x3b, 0x5e, 0xd3, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x38, 0x31, 0x32, 0x31, 0x30, 0x32, 0x31, 0x33, 0x30, 0x5a, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x39, 0x31, 0x31, 0x31, 0x30, 0x32, 0x31, 0x33, 0x30, 0x5a, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe5, 0xbf, 0x24, 0xb1, 0x10, 0x46, 0x55, 0xad, 0x70, 0x77, 0x14, 0xc3, 0x1b, 0x55, 0xa0, 0x72, 0xfa, 0x3c, 0x3c, 0x44, 0x3e, 0xc3, 0xd7, 0xfa, 0x05, 0x94, 0xeb, 0x70, 0x6a, 0xe3, 0x47, 0x58, 0xb5, 0xab, 0x83, 0x6e, 0x7a, 0x43, 0xdd, 0x51, 0x9a, 0x31, 0x4a, 0x4a, 0x4f, 0xf0, 0x65, 0xfe, 0xae, 0x10, 0x30, 0xf8, 0xaa, 0x69, 0x54, 0xaf, 0xff, 0x4b, 0x3d, 0x48, 0x5d, 0x09, 0x9c, 0x94, 0x87, 0x3a, 0xf6, 0x56, 0xeb, 0xb6, 0x80, 0x07, 0x77, 0x1e, 0x92, 0x8b, 0x19, 0xc3, 0xa6, 0x8b, 0x4b, 0x0f, 0x60, 0x8f, 0x88, 0xca, 0x89, 0x41, 0x1d, 0x18, 0xb6, 0xde, 0x16, 0x75, 0xaa, 0xaa, 0xa7, 0xba, 0x88, 0xbd, 0x0f, 0x62, 0x27, 0x7e, 0xe1, 0x11, 0x67, 0x6a, 0xf2, 0x8a, 0xd9, 0xf0, 0xc2, 0x56, 0x60, 0x7f, 0xfd, 0xd7, 0x62, 0x71, 0x75, 0x8f, 0x09, 0xf8, 0x52, 0x37, 0xc9, 0xf2, 0xef, 0x56, 0xd5, 0x81, 0x95, 0xb3, 0x7f, 0xd9, 0xcc, 0xf4, 0xbc, 0xd0, 0x5e, 0x8c, 0x8b, 0x78, 0x14, 0x2a, 0xe0, 0x3d, 0xc5, 0xd1, 0xf2, 0x46, 0xd4, 0xab, 0xbe, 0xd0, 0x30, 0x5c, 0xb6, 0x29, 0x62, 0x48, 0x0f, 0xc7, 0x62, 0xa5, 0x9e, 0x9c, 0xc8, 0x29, 0xfc, 0x7e, 0xa8, 0x96, 0xc4, 0x25, 0xc1, 0x8c, 0x2a, 0x33, 0x9d, 0xe3, 0x2e, 0x5b, 0x30, 0xff, 0x62, 0xaf, 0xae, 0x48, 0xc6, 0x37, 0x3a, 0xb6, 0x93, 0x15, 0x23, 0x80, 0x45, 0xa2, 0xfd, 0x3b, 0x43, 0x99, 0xf1, 0x88, 0x77, 0x82, 0x79, 0x39, 0x5f, 0x48, 0x98, 0x3f, 0xb6, 0xc3, 0xbd, 0x1c, 0xcd, 0xd4, 0xf4, 0x2d, 0x7d, 0x37, 0x5a, 0xcb, 0xbc, 0xae, 0xdc, 0x77, 0xa2, 0x0f, 0x72, 0x56, 0xd7, 0xd4, 0xec, 0x59, 0x9d, 0xd9, 0x60, 0x7a, 0xf9, 0x26, 0x94, 0xda, 0xfd, 0x7c, 0x5c, 0xe8, 0x15, 0x7e, 0x9a, 0xe9, 0x3d, 0x71, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x8b, 0x37, 0x99, 0x6d, 0x76, 0x3f, 0xc5, 0x2b, 0x48, 0xf8, 0x0d, 0x61, 0xf2, 0x62, 0x8e, 0xc6, 0xe7, 0xd5, 0xb6, 0x4e, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x8b, 0x37, 0x99, 0x6d, 0x76, 0x3f, 0xc5, 0x2b, 0x48, 0xf8, 0x0d, 0x61, 0xf2, 0x62, 0x8e, 0xc6, 0xe7, 0xd5, 0xb6, 0x4e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xb2, 0x28, 0xe3, 0x94, 0x02, 0x6f, 0xe5, 0x2a, 0xdc, 0x29, 0x7d, 0xcf, 0x2b, 0x88, 0x09, 0x4f, 0x73, 0x8a, 0xc3, 0x54, 0xfc, 0xa3, 0x40, 0x84, 0x82, 0xce, 0x32, 0x8d, 0x75, 0x51, 0xa2, 0xc3, 0x3f, 0x01, 0x0f, 0xde, 0x1b, 0x1f, 0x48, 0xdb, 0x8f, 0xf9, 0xe0, 0xf3, 0x23, 0x78, 0x17, 0x4a, 0x84, 0xbc, 0xf4, 0x84, 0xb5, 0xe5, 0x8c, 0x17, 0x36, 0x7f, 0x4f, 0x6f, 0x54, 0x47, 0xbd, 0xe6, 0x40, 0xb0, 0x8a, 0x73, 0x74, 0x65, 0x57, 0x98, 0xf6, 0x77, 0x58, 0x0e, 0x5f, 0x82, 0x77, 0xb3, 0xd9, 0x87, 0xf8, 0xe9, 0x21, 0x11, 0x37, 0x4c, 0x6e, 0x5f, 0xda, 0x1e, 0x81, 0xa6, 0xa3, 0x45, 0x09, 0x81, 0x26, 0xd0, 0xb6, 0xe1, 0x27, 0xa5, 0xc3, 0x6e, 0xed, 0x86, 0xb7, 0x4f, 0xf3, 0x7e, 0x34, 0xa5, 0x0b, 0x8a, 0xd1, 0x56, 0x65, 0x04, 0xe2, 0x16, 0x71, 0x11, 0xdc, 0xa8, 0xa6, 0xe0, 0x57, 0x91, 0x63, 0xe2, 0x9d, 0xe7, 0x86, 0x00, 0xa6, 0xb4, 0x75, 0xf3, 0x37, 0x63, 0x48, 0x41, 0xcd, 0x97, 0x12, 0x2e, 0x5c, 0xc0, 0xf0, 0x13, 0x62, 0x71, 0xc1, 0x8e, 0x65, 0x28, 0x52, 0x09, 0x71, 0x87, 0x33, 0x27, 0x77, 0x84, 0x2f, 0xb4, 0x9a, 0x0a, 0x62, 0xe6, 0x69, 0x05, 0xd7, 0x94, 0x70, 0x8a, 0xb9, 0x61, 0x68, 0xdb, 0xbd, 0x4b, 0x58, 0xd3, 0x74, 0x0e, 0x3e, 0x00, 0x6c, 0x64, 0x02, 0x22, 0x4f, 0x62, 0xbe, 0xe1, 0x53, 0x96, 0xa5, 0x6a, 0x7d, 0xf7, 0x8c, 0x77, 0x42, 0x49, 0xb3, 0xb0, 0x44, 0xf1, 0xa9, 0xd5, 0x64, 0xdf, 0xcc, 0x8b, 0x90, 0x03, 0x05, 0xb8, 0x07, 0x5f, 0x6e, 0x88, 0x11, 0x7e, 0x93, 0x85, 0xe6, 0x3c, 0x87, 0x92, 0x74, 0xbb, 0xfe, 0x01, 0x32, 0xe8, 0x0b, 0xa9, 0xab, 0x15, 0xd4, 0x8a, 0x4f, 0xd7, 0x40, 0x12, 0xe1, 0xde, 0x8a, 0xa8, 0x7c, 0xf5, 0x31, 0x82, 0x01, 0xb6, 0x30, 0x82, 0x01, 0xb2, 0x02, 0x01, 0x01, 0x30, 0x20, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x02, 0x09, 0x00, 0xbb, 0x94, 0x92, 0x5f, 0x3b, 0x5e, 0xd3, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0xa0, 0x69, 0x30, 0x18, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0x30, 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x05, 0x31, 0x0f, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x30, 0x30, 0x38, 0x30, 0x33, 0x34, 0x31, 0x31, 0x35, 0x5a, 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22, 0x04, 0x20, 0x7d, 0x9f, 0x1b, 0x65, 0x76, 0x70, 0x66, 0xe3, 0xa0, 0x6a, 0x53, 0x01, 0xd9, 0xde, 0x6f, 0x6a, 0x88, 0xcb, 0x76, 0xb3, 0xf8, 0xd6, 0xc4, 0x45, 0x3a, 0x8f, 0x7b, 0x9d, 0x06, 0x50, 0xc6, 0x12, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0xb5, 0x61, 0x49, 0xea, 0xfc, 0xfe, 0x13, 0xfc, 0xd5, 0x92, 0x5a, 0xf5, 0x11, 0x88, 0x2a, 0xba, 0x0f, 0x3d, 0x3d, 0x56, 0x8a, 0x69, 0x2b, 0xcc, 0x3a, 0x95, 0x09, 0xb6, 0x06, 0xd9, 0x36, 0x17, 0x63, 0x40, 0xd7, 0xc8, 0x5a, 0xb3, 0xca, 0x2d, 0xd2, 0xea, 0xa0, 0x9a, 0x82, 0x04, 0x75, 0x66, 0xeb, 0x41, 0x9b, 0x1a, 0x23, 0x70, 0xf0, 0xf1, 0x1a, 0x69, 0x0b, 0xb2, 0x8d, 0x8f, 0x7f, 0x6a, 0x96, 0x2a, 0x77, 0x30, 0x0c, 0x06, 0xff, 0x1c, 0x9d, 0x71, 0x41, 0xe3, 0x91, 0x22, 0xbc, 0xaf, 0xb5, 0x39, 0x0d, 0xb6, 0x5b, 0x03, 0x0b, 0xf1, 0xa6, 0x98, 0xb4, 0x15, 0xce, 0x23, 0x09, 0xcf, 0xad, 0x7c, 0xb9, 0x41, 0x2e, 0xf4, 0x9f, 0x50, 0x49, 0x13, 0xf7, 0x87, 0x07, 0x7e, 0x5e, 0x9c, 0xc0, 0x79, 0x61, 0xfb, 0xa2, 0xf4, 0xf7, 0x3c, 0xa1, 0xb7, 0x1b, 0x68, 0x56, 0x5c, 0x04, 0x74, 0x97, 0xdc, 0xf5, 0x3e, 0x07, 0x93, 0xd5, 0x43, 0xb7, 0x36, 0xb9, 0xc9, 0xc8, 0x65, 0x4c, 0x24, 0xce, 0x58, 0x6d, 0x9e, 0x60, 0x54, 0x10, 0x6c, 0xb5, 0x4e, 0xbe, 0x47, 0x9b, 0xef, 0x31, 0xa1, 0xdc, 0x0c, 0x84, 0xe5, 0xff, 0xd2, 0xdd, 0x2d, 0x8e, 0xa1, 0x7e, 0x9f, 0x02, 0x98, 0x46, 0x1a, 0x7f, 0x6e, 0x4f, 0x70, 0x68, 0x4a, 0x1d, 0xa7, 0x9c, 0x0e, 0x1d, 0x42, 0xaf, 0x6f, 0x0f, 0x6d, 0x8f, 0x91, 0x69, 0x6a, 0xff, 0x73, 0x86, 0xc6, 0xc3, 0x24, 0x7d, 0x60, 0x67, 0xb4, 0xae, 0xa8, 0xb4, 0x19, 0xba, 0x7a, 0x61, 0xc9, 0xad, 0xcc, 0xcf, 0x9f, 0xfe, 0x13, 0x1e, 0xc3, 0x2c, 0xfd, 0x3a, 0x25, 0xdf, 0xa2, 0xc6, 0xb2, 0x15, 0x18, 0x54, 0xbd, 0x51, 0xc1, 0x84, 0x62, 0x0f, 0x72, 0x8d, 0x67, 0xce, 0xe6, 0xbd, 0x6e, 0x21, 0x58, 0x1f, 0x77, 0xf4, 0xfc, 0x36, 0xf9, 0x0c, 0x1d, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66 }; static uint8_t AuthVarCreateData[] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; /* * AuthVarDel, * timestamp: 2014.09.08:06:10:26 * GUID: 7f5c5d52-2f14-4f12-967cdb60db05a0fd * attributes = UEFI_VAR_NON_VOLATILE, UEFI_VAR_BOOTSERVICE_ACCESS, * UEFI_VAR_RUNTIME_ACCESS, UEFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS * Variable name: AuthVarTest * data content: empty */ static uint8_t AuthVarDel[] = { 0xde, 0x07, 0x09, 0x08, 0x06, 0x0a, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x04, 0x00, 0x00, 0x00, 0x02, 0xf1, 0x0e, 0x9d, 0xd2, 0xaf, 0x4a, 0xdf, 0x68, 0xee, 0x49, 0x8a, 0xa9, 0x34, 0x7d, 0x37, 0x56, 0x65, 0xa7, 0x30, 0x82, 0x04, 0xdc, 0x02, 0x01, 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82, 0x02, 0xfd, 0x30, 0x82, 0x02, 0xf9, 0x30, 0x82, 0x01, 0xe1, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xbb, 0x94, 0x92, 0x5f, 0x3b, 0x5e, 0xd3, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x38, 0x31, 0x32, 0x31, 0x30, 0x32, 0x31, 0x33, 0x30, 0x5a, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x39, 0x31, 0x31, 0x31, 0x30, 0x32, 0x31, 0x33, 0x30, 0x5a, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe5, 0xbf, 0x24, 0xb1, 0x10, 0x46, 0x55, 0xad, 0x70, 0x77, 0x14, 0xc3, 0x1b, 0x55, 0xa0, 0x72, 0xfa, 0x3c, 0x3c, 0x44, 0x3e, 0xc3, 0xd7, 0xfa, 0x05, 0x94, 0xeb, 0x70, 0x6a, 0xe3, 0x47, 0x58, 0xb5, 0xab, 0x83, 0x6e, 0x7a, 0x43, 0xdd, 0x51, 0x9a, 0x31, 0x4a, 0x4a, 0x4f, 0xf0, 0x65, 0xfe, 0xae, 0x10, 0x30, 0xf8, 0xaa, 0x69, 0x54, 0xaf, 0xff, 0x4b, 0x3d, 0x48, 0x5d, 0x09, 0x9c, 0x94, 0x87, 0x3a, 0xf6, 0x56, 0xeb, 0xb6, 0x80, 0x07, 0x77, 0x1e, 0x92, 0x8b, 0x19, 0xc3, 0xa6, 0x8b, 0x4b, 0x0f, 0x60, 0x8f, 0x88, 0xca, 0x89, 0x41, 0x1d, 0x18, 0xb6, 0xde, 0x16, 0x75, 0xaa, 0xaa, 0xa7, 0xba, 0x88, 0xbd, 0x0f, 0x62, 0x27, 0x7e, 0xe1, 0x11, 0x67, 0x6a, 0xf2, 0x8a, 0xd9, 0xf0, 0xc2, 0x56, 0x60, 0x7f, 0xfd, 0xd7, 0x62, 0x71, 0x75, 0x8f, 0x09, 0xf8, 0x52, 0x37, 0xc9, 0xf2, 0xef, 0x56, 0xd5, 0x81, 0x95, 0xb3, 0x7f, 0xd9, 0xcc, 0xf4, 0xbc, 0xd0, 0x5e, 0x8c, 0x8b, 0x78, 0x14, 0x2a, 0xe0, 0x3d, 0xc5, 0xd1, 0xf2, 0x46, 0xd4, 0xab, 0xbe, 0xd0, 0x30, 0x5c, 0xb6, 0x29, 0x62, 0x48, 0x0f, 0xc7, 0x62, 0xa5, 0x9e, 0x9c, 0xc8, 0x29, 0xfc, 0x7e, 0xa8, 0x96, 0xc4, 0x25, 0xc1, 0x8c, 0x2a, 0x33, 0x9d, 0xe3, 0x2e, 0x5b, 0x30, 0xff, 0x62, 0xaf, 0xae, 0x48, 0xc6, 0x37, 0x3a, 0xb6, 0x93, 0x15, 0x23, 0x80, 0x45, 0xa2, 0xfd, 0x3b, 0x43, 0x99, 0xf1, 0x88, 0x77, 0x82, 0x79, 0x39, 0x5f, 0x48, 0x98, 0x3f, 0xb6, 0xc3, 0xbd, 0x1c, 0xcd, 0xd4, 0xf4, 0x2d, 0x7d, 0x37, 0x5a, 0xcb, 0xbc, 0xae, 0xdc, 0x77, 0xa2, 0x0f, 0x72, 0x56, 0xd7, 0xd4, 0xec, 0x59, 0x9d, 0xd9, 0x60, 0x7a, 0xf9, 0x26, 0x94, 0xda, 0xfd, 0x7c, 0x5c, 0xe8, 0x15, 0x7e, 0x9a, 0xe9, 0x3d, 0x71, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x8b, 0x37, 0x99, 0x6d, 0x76, 0x3f, 0xc5, 0x2b, 0x48, 0xf8, 0x0d, 0x61, 0xf2, 0x62, 0x8e, 0xc6, 0xe7, 0xd5, 0xb6, 0x4e, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x8b, 0x37, 0x99, 0x6d, 0x76, 0x3f, 0xc5, 0x2b, 0x48, 0xf8, 0x0d, 0x61, 0xf2, 0x62, 0x8e, 0xc6, 0xe7, 0xd5, 0xb6, 0x4e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xb2, 0x28, 0xe3, 0x94, 0x02, 0x6f, 0xe5, 0x2a, 0xdc, 0x29, 0x7d, 0xcf, 0x2b, 0x88, 0x09, 0x4f, 0x73, 0x8a, 0xc3, 0x54, 0xfc, 0xa3, 0x40, 0x84, 0x82, 0xce, 0x32, 0x8d, 0x75, 0x51, 0xa2, 0xc3, 0x3f, 0x01, 0x0f, 0xde, 0x1b, 0x1f, 0x48, 0xdb, 0x8f, 0xf9, 0xe0, 0xf3, 0x23, 0x78, 0x17, 0x4a, 0x84, 0xbc, 0xf4, 0x84, 0xb5, 0xe5, 0x8c, 0x17, 0x36, 0x7f, 0x4f, 0x6f, 0x54, 0x47, 0xbd, 0xe6, 0x40, 0xb0, 0x8a, 0x73, 0x74, 0x65, 0x57, 0x98, 0xf6, 0x77, 0x58, 0x0e, 0x5f, 0x82, 0x77, 0xb3, 0xd9, 0x87, 0xf8, 0xe9, 0x21, 0x11, 0x37, 0x4c, 0x6e, 0x5f, 0xda, 0x1e, 0x81, 0xa6, 0xa3, 0x45, 0x09, 0x81, 0x26, 0xd0, 0xb6, 0xe1, 0x27, 0xa5, 0xc3, 0x6e, 0xed, 0x86, 0xb7, 0x4f, 0xf3, 0x7e, 0x34, 0xa5, 0x0b, 0x8a, 0xd1, 0x56, 0x65, 0x04, 0xe2, 0x16, 0x71, 0x11, 0xdc, 0xa8, 0xa6, 0xe0, 0x57, 0x91, 0x63, 0xe2, 0x9d, 0xe7, 0x86, 0x00, 0xa6, 0xb4, 0x75, 0xf3, 0x37, 0x63, 0x48, 0x41, 0xcd, 0x97, 0x12, 0x2e, 0x5c, 0xc0, 0xf0, 0x13, 0x62, 0x71, 0xc1, 0x8e, 0x65, 0x28, 0x52, 0x09, 0x71, 0x87, 0x33, 0x27, 0x77, 0x84, 0x2f, 0xb4, 0x9a, 0x0a, 0x62, 0xe6, 0x69, 0x05, 0xd7, 0x94, 0x70, 0x8a, 0xb9, 0x61, 0x68, 0xdb, 0xbd, 0x4b, 0x58, 0xd3, 0x74, 0x0e, 0x3e, 0x00, 0x6c, 0x64, 0x02, 0x22, 0x4f, 0x62, 0xbe, 0xe1, 0x53, 0x96, 0xa5, 0x6a, 0x7d, 0xf7, 0x8c, 0x77, 0x42, 0x49, 0xb3, 0xb0, 0x44, 0xf1, 0xa9, 0xd5, 0x64, 0xdf, 0xcc, 0x8b, 0x90, 0x03, 0x05, 0xb8, 0x07, 0x5f, 0x6e, 0x88, 0x11, 0x7e, 0x93, 0x85, 0xe6, 0x3c, 0x87, 0x92, 0x74, 0xbb, 0xfe, 0x01, 0x32, 0xe8, 0x0b, 0xa9, 0xab, 0x15, 0xd4, 0x8a, 0x4f, 0xd7, 0x40, 0x12, 0xe1, 0xde, 0x8a, 0xa8, 0x7c, 0xf5, 0x31, 0x82, 0x01, 0xb6, 0x30, 0x82, 0x01, 0xb2, 0x02, 0x01, 0x01, 0x30, 0x20, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x02, 0x09, 0x00, 0xbb, 0x94, 0x92, 0x5f, 0x3b, 0x5e, 0xd3, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0xa0, 0x69, 0x30, 0x18, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0x30, 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x05, 0x31, 0x0f, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x30, 0x30, 0x38, 0x30, 0x36, 0x31, 0x30, 0x32, 0x36, 0x5a, 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22, 0x04, 0x20, 0xa7, 0x2d, 0xb1, 0x8a, 0xc3, 0x9b, 0x15, 0xb9, 0xd8, 0x72, 0x1b, 0x33, 0x4e, 0xf7, 0x46, 0xaf, 0x62, 0x26, 0xa7, 0x6d, 0x18, 0xfa, 0x16, 0x92, 0x9f, 0x90, 0x25, 0x47, 0x5d, 0x2c, 0x12, 0x39, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0xdc, 0xe7, 0xf2, 0xa2, 0xea, 0x24, 0x38, 0x52, 0xbf, 0xd1, 0x66, 0xfc, 0xb5, 0x74, 0xf8, 0x5b, 0x6d, 0x82, 0x20, 0xbc, 0xb5, 0x6f, 0x60, 0x9e, 0xab, 0xe9, 0x8e, 0xcd, 0x22, 0x99, 0x85, 0xdd, 0xb5, 0xc8, 0x5e, 0x3c, 0x9b, 0x1a, 0xe8, 0x06, 0xfb, 0x7f, 0x07, 0x91, 0xe6, 0x14, 0xbb, 0x7c, 0xce, 0x86, 0xc7, 0xbe, 0x03, 0x0f, 0x14, 0x60, 0x59, 0x24, 0x96, 0xc7, 0xb0, 0x9a, 0x77, 0x66, 0x7a, 0xed, 0x0f, 0x0c, 0xaa, 0x1b, 0xc2, 0x40, 0xa1, 0x8e, 0x2e, 0x8a, 0x27, 0x57, 0x08, 0xce, 0x3c, 0x4e, 0xd6, 0x4c, 0xcf, 0x1c, 0xc2, 0x8b, 0xef, 0xf1, 0x96, 0x2f, 0x29, 0xbc, 0x48, 0x03, 0x7f, 0x58, 0x53, 0x58, 0x49, 0x0a, 0x3e, 0x49, 0x3c, 0x14, 0xed, 0x1f, 0x04, 0x56, 0x99, 0x3e, 0x01, 0xfb, 0x5d, 0x47, 0xd2, 0xdf, 0xdd, 0x00, 0x6a, 0x65, 0x43, 0x42, 0x2a, 0xb5, 0xd1, 0xb8, 0x09, 0xf1, 0x82, 0xfd, 0x9e, 0x0e, 0x56, 0x66, 0xf3, 0x03, 0x52, 0x1a, 0x75, 0x8f, 0x13, 0x2c, 0x92, 0x3c, 0x08, 0xb7, 0x95, 0xdf, 0x45, 0x31, 0xde, 0xc0, 0x62, 0x45, 0x54, 0xbf, 0x1e, 0xfc, 0xd0, 0x7e, 0xc1, 0x51, 0xc7, 0x2a, 0x8a, 0xef, 0x31, 0x92, 0xf8, 0x48, 0x1d, 0x61, 0x87, 0x4b, 0x9a, 0x70, 0xdc, 0x93, 0x12, 0x97, 0x72, 0x6e, 0x6d, 0xbc, 0xeb, 0x7f, 0x83, 0x3d, 0x54, 0x83, 0xae, 0x6a, 0x7a, 0x47, 0x04, 0xd3, 0xc0, 0xee, 0xc7, 0x85, 0x0f, 0xd6, 0x89, 0x48, 0xc0, 0x68, 0xe3, 0x6c, 0x86, 0xcd, 0x17, 0xc0, 0x8d, 0xaa, 0xfd, 0xc6, 0x0d, 0xa6, 0xc4, 0xc3, 0xef, 0xc5, 0xcc, 0x47, 0xf9, 0x0c, 0x21, 0xe8, 0x86, 0xcb, 0x93, 0xe0, 0x37, 0x21, 0x2b, 0xa9, 0xe3, 0x7e, 0x6a, 0x6c, 0xde, 0x3e, 0x68, 0x65, 0xb6, 0xff, 0xbf, 0xbd, 0x08, 0xe1, 0xed, 0x0c, 0x19, 0xb2 }; /* * AuthVarCreateDiffer, the same as AuthVarCreate, but using different valid key and new timestamp * timestamp: 2014.09.08:05:52:01 * GUID: 7f5c5d52-2f14-4f12-967cdb60db05a0fd * attributes = UEFI_VAR_NON_VOLATILE, UEFI_VAR_BOOTSERVICE_ACCESS, * UEFI_VAR_RUNTIME_ACCESS, UEFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS * Variable name: AuthVarTest * data content: 1234567890abcdef */ static uint8_t AuthVarCreateDiff[] = { 0xde, 0x07, 0x09, 0x08, 0x05, 0x34, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x04, 0x00, 0x00, 0x00, 0x02, 0xf1, 0x0e, 0x9d, 0xd2, 0xaf, 0x4a, 0xdf, 0x68, 0xee, 0x49, 0x8a, 0xa9, 0x34, 0x7d, 0x37, 0x56, 0x65, 0xa7, 0x30, 0x82, 0x04, 0xdc, 0x02, 0x01, 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82, 0x02, 0xfd, 0x30, 0x82, 0x02, 0xf9, 0x30, 0x82, 0x01, 0xe1, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xe2, 0x7d, 0x10, 0xea, 0xd8, 0x0d, 0x98, 0x77, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x30, 0x30, 0x38, 0x30, 0x35, 0x34, 0x39, 0x35, 0x38, 0x5a, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x31, 0x30, 0x37, 0x30, 0x35, 0x34, 0x39, 0x35, 0x38, 0x5a, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xb2, 0x11, 0xba, 0xfc, 0xb3, 0xb5, 0xe9, 0xb4, 0xf4, 0x66, 0xc7, 0xe7, 0xa8, 0xed, 0xd1, 0xdb, 0xd9, 0xb2, 0xb4, 0x72, 0x0e, 0x7a, 0xc2, 0x00, 0xd1, 0xa3, 0x3f, 0x24, 0xa7, 0xc9, 0x9f, 0xef, 0x14, 0x07, 0x48, 0x2f, 0x6a, 0x54, 0xdb, 0xde, 0x72, 0xa8, 0xdd, 0xba, 0x2c, 0x61, 0x14, 0xd4, 0x53, 0x54, 0xe7, 0x96, 0xfd, 0xa1, 0x26, 0x05, 0x63, 0x1d, 0xd7, 0x1a, 0x70, 0xf8, 0xb5, 0x3d, 0x40, 0xc0, 0x33, 0x35, 0x8a, 0xe9, 0x88, 0x8a, 0x8a, 0x7d, 0x56, 0x39, 0x9b, 0x70, 0x4a, 0x07, 0xd9, 0xc2, 0x44, 0xe2, 0x12, 0x2e, 0x8b, 0x78, 0x9e, 0x14, 0x99, 0x7a, 0x47, 0x92, 0x9e, 0x42, 0x0f, 0x76, 0xb7, 0x3d, 0x1f, 0xb4, 0x20, 0xd2, 0x6d, 0x93, 0xdf, 0x2e, 0xb1, 0x00, 0xa9, 0x94, 0xe0, 0x0b, 0xe6, 0x57, 0x25, 0x76, 0x99, 0x63, 0xa7, 0x4c, 0x0b, 0x44, 0x48, 0x59, 0xbe, 0x52, 0xfb, 0x64, 0xca, 0xe0, 0x21, 0x8e, 0xaf, 0xdc, 0xa5, 0xb2, 0x5b, 0x4a, 0x80, 0x7e, 0xe2, 0x95, 0xa5, 0x95, 0xb7, 0x75, 0x19, 0x44, 0x77, 0x1b, 0x8f, 0xa0, 0x57, 0xc7, 0xb5, 0x33, 0x7f, 0xbb, 0x5b, 0x41, 0x63, 0xde, 0xc8, 0xdd, 0x4a, 0x41, 0x98, 0x1a, 0xc0, 0x36, 0xed, 0x8d, 0x4c, 0xc9, 0x2f, 0x19, 0x39, 0xf4, 0xf4, 0x31, 0xb4, 0x4e, 0x78, 0xff, 0xab, 0x91, 0xe6, 0xf2, 0x23, 0xdc, 0x79, 0x24, 0x54, 0xba, 0x05, 0x60, 0x2c, 0xad, 0x29, 0xeb, 0x8e, 0xa0, 0x2d, 0x73, 0x09, 0xbd, 0xdf, 0xe3, 0x76, 0x98, 0x04, 0x4d, 0x29, 0x7d, 0xdd, 0xd2, 0xbd, 0xa8, 0x32, 0x66, 0x45, 0x01, 0xff, 0xd7, 0xd0, 0x83, 0xfb, 0xec, 0xaa, 0xb7, 0x45, 0x34, 0xf4, 0xd8, 0xf1, 0x23, 0x0e, 0x15, 0x84, 0xde, 0x59, 0xe5, 0x2e, 0x06, 0xd6, 0xb8, 0x11, 0x1d, 0x59, 0xc9, 0x93, 0xea, 0x4e, 0x4b, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xe5, 0x35, 0x8b, 0x82, 0xc5, 0xf0, 0x10, 0x89, 0x6b, 0xe2, 0xdd, 0x60, 0x20, 0x5a, 0xd6, 0x17, 0x1e, 0x17, 0x2a, 0xb8, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xe5, 0x35, 0x8b, 0x82, 0xc5, 0xf0, 0x10, 0x89, 0x6b, 0xe2, 0xdd, 0x60, 0x20, 0x5a, 0xd6, 0x17, 0x1e, 0x17, 0x2a, 0xb8, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x8d, 0x9e, 0x39, 0xf2, 0xf8, 0x1f, 0xb3, 0x71, 0x2b, 0x2d, 0xcb, 0x22, 0xf7, 0x23, 0x88, 0xd4, 0x60, 0xee, 0xb1, 0xf7, 0xce, 0x39, 0x0d, 0xfd, 0xe5, 0x77, 0x5e, 0x69, 0xf1, 0x39, 0xc6, 0x4b, 0x16, 0x30, 0xc4, 0x95, 0x70, 0x29, 0x3b, 0x48, 0xe7, 0x6c, 0x33, 0x1d, 0x28, 0xa3, 0x87, 0x0e, 0xcf, 0xd3, 0x63, 0x1b, 0x1a, 0x51, 0x61, 0xa7, 0x4a, 0x30, 0x47, 0xbc, 0xbc, 0x10, 0xe0, 0x6e, 0x7b, 0x49, 0x2b, 0x77, 0xa8, 0x31, 0x0b, 0xfa, 0x64, 0xfe, 0x06, 0x6f, 0xab, 0x59, 0x70, 0x31, 0xcc, 0x94, 0x63, 0x3a, 0x9b, 0xea, 0x8b, 0xc2, 0xaa, 0x30, 0xed, 0xe0, 0x09, 0x7f, 0x16, 0x60, 0xf3, 0xc6, 0x5b, 0xcb, 0x7e, 0xed, 0xab, 0x54, 0x8d, 0x46, 0x1f, 0x29, 0xa3, 0xa7, 0x8c, 0xea, 0xb5, 0xed, 0xbe, 0x80, 0x00, 0x5f, 0x01, 0xbe, 0xa7, 0x92, 0x4f, 0x3b, 0xe5, 0xc8, 0x3c, 0x93, 0x41, 0xbf, 0x51, 0x1e, 0x09, 0x99, 0xbe, 0xb7, 0x65, 0x88, 0x93, 0x82, 0x26, 0x9b, 0x90, 0xc7, 0xb8, 0xea, 0x6b, 0x79, 0x0f, 0xf4, 0x5e, 0x1a, 0x8f, 0x77, 0xdd, 0xa6, 0x7a, 0x53, 0xd4, 0x9f, 0xb9, 0xab, 0x97, 0xdf, 0x40, 0xd8, 0x42, 0xfd, 0x1a, 0xa7, 0xa9, 0x90, 0x0c, 0x98, 0x7e, 0xb1, 0x5e, 0xff, 0xeb, 0xd6, 0xec, 0x65, 0xce, 0xd2, 0x4e, 0xd1, 0x71, 0x4b, 0xd5, 0xb8, 0x78, 0x64, 0xc2, 0x5f, 0xaf, 0x50, 0x20, 0xa6, 0xf0, 0xba, 0x62, 0xa3, 0xe5, 0x38, 0xa2, 0x9f, 0x17, 0xda, 0x65, 0xe6, 0x94, 0x1c, 0xa0, 0xc0, 0xf0, 0xf9, 0x5f, 0xeb, 0xdc, 0x05, 0x70, 0x73, 0x60, 0xa5, 0x54, 0x89, 0x22, 0x84, 0x93, 0x79, 0x27, 0xe6, 0xf6, 0x51, 0x72, 0x3e, 0x86, 0xd4, 0x7f, 0x0b, 0xb7, 0xed, 0xc4, 0x09, 0x0f, 0xac, 0xf5, 0x58, 0x88, 0x10, 0xee, 0x8a, 0xc2, 0xeb, 0x12, 0xe4, 0x31, 0x82, 0x01, 0xb6, 0x30, 0x82, 0x01, 0xb2, 0x02, 0x01, 0x01, 0x30, 0x20, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x02, 0x09, 0x00, 0xe2, 0x7d, 0x10, 0xea, 0xd8, 0x0d, 0x98, 0x77, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0xa0, 0x69, 0x30, 0x18, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0x30, 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x05, 0x31, 0x0f, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x30, 0x30, 0x38, 0x30, 0x35, 0x35, 0x32, 0x30, 0x31, 0x5a, 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22, 0x04, 0x20, 0xe8, 0xd3, 0xd1, 0xba, 0xf4, 0x1b, 0x87, 0xd3, 0x4a, 0x66, 0x07, 0x67, 0xd5, 0x92, 0xe5, 0x9b, 0xba, 0xfc, 0xcf, 0xf0, 0xd8, 0xc7, 0xa6, 0xa7, 0x74, 0xce, 0x27, 0x9c, 0x9f, 0x3e, 0xaa, 0x18, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0x14, 0xdb, 0xa1, 0x1a, 0x65, 0x21, 0xa7, 0x00, 0x3a, 0xd4, 0x4a, 0x49, 0x08, 0x90, 0x34, 0x8b, 0xbe, 0x6d, 0x52, 0x1d, 0x0c, 0xf6, 0x21, 0xcc, 0xdd, 0x4d, 0xb2, 0x0d, 0xc9, 0x0f, 0x79, 0x87, 0x19, 0x05, 0xaf, 0x1f, 0xc3, 0x8b, 0xd0, 0x52, 0xb4, 0x60, 0xf0, 0x28, 0x62, 0xd9, 0x70, 0xd5, 0x1b, 0xeb, 0x58, 0xea, 0x5f, 0x3a, 0x78, 0x3d, 0x3d, 0x55, 0x63, 0xca, 0xf3, 0xf0, 0xce, 0x38, 0x8f, 0x06, 0xf6, 0x21, 0x61, 0x63, 0x61, 0x37, 0xf6, 0x3d, 0x59, 0x14, 0x66, 0xcc, 0x2f, 0xdf, 0x52, 0x73, 0x8d, 0x32, 0xf2, 0xb9, 0x99, 0x02, 0x4f, 0xcb, 0xcc, 0x9e, 0x93, 0xdf, 0xf9, 0x1b, 0x71, 0x38, 0x19, 0x56, 0x15, 0xd5, 0xc1, 0x7c, 0x29, 0x67, 0x85, 0x69, 0x64, 0xf4, 0xeb, 0x79, 0x76, 0x83, 0x6d, 0x0d, 0x88, 0x87, 0x0a, 0x6e, 0xbb, 0xc4, 0xbf, 0x88, 0x2f, 0xa4, 0xe2, 0xd3, 0x19, 0x77, 0xbc, 0xd4, 0xa0, 0x20, 0xf9, 0xc0, 0x79, 0x0c, 0x39, 0x5d, 0x11, 0xcd, 0x6e, 0xc4, 0x8d, 0x75, 0xb0, 0xb9, 0x81, 0x66, 0xf1, 0x9e, 0xa7, 0x17, 0x6c, 0x23, 0xde, 0x5a, 0x42, 0x50, 0x85, 0x29, 0xbc, 0x05, 0x74, 0xe2, 0xa8, 0xbb, 0xb1, 0x86, 0xbf, 0x73, 0x4f, 0x72, 0xa2, 0xa8, 0xc7, 0x7e, 0x23, 0x50, 0x18, 0x33, 0x24, 0x91, 0x08, 0xfa, 0x43, 0x0b, 0xdc, 0xd3, 0x17, 0xd3, 0xc1, 0x43, 0x05, 0xda, 0xb2, 0xc4, 0xa8, 0x34, 0xcc, 0x8b, 0x52, 0xdd, 0x86, 0xba, 0xe9, 0x69, 0xe3, 0x87, 0x82, 0x91, 0xb9, 0x13, 0x78, 0x45, 0xc0, 0x50, 0x0c, 0xe6, 0xc9, 0x0b, 0x9b, 0x19, 0x93, 0x38, 0x57, 0xe4, 0x3f, 0xfc, 0x6f, 0x9f, 0x07, 0x96, 0x55, 0xba, 0x7c, 0x5d, 0x24, 0x12, 0xe6, 0x80, 0x54, 0x16, 0x49, 0xfb, 0xd9, 0xc9, 0x54, 0xb9, 0x46, 0xe5, 0x18, 0xa1, 0x69, 0xa0, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66 }; /* * AuthVarAppend, * timestamp: 2014.09.08:06:06:46 * GUID: 7f5c5d52-2f14-4f12-967cdb60db05a0fd * attributes = UEFI_VAR_NON_VOLATILE, UEFI_VAR_BOOTSERVICE_ACCESS, * UEFI_VAR_RUNTIME_ACCESS, UEFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS, * UEFI_VARIABLE_APPEND_WRITE * Variable name: AuthVarTest * data content: 9876543210 */ static uint8_t AuthVarAppend[] = { 0xde, 0x07, 0x09, 0x08, 0x06, 0x06, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x04, 0x00, 0x00, 0x00, 0x02, 0xf1, 0x0e, 0x9d, 0xd2, 0xaf, 0x4a, 0xdf, 0x68, 0xee, 0x49, 0x8a, 0xa9, 0x34, 0x7d, 0x37, 0x56, 0x65, 0xa7, 0x30, 0x82, 0x04, 0xdc, 0x02, 0x01, 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82, 0x02, 0xfd, 0x30, 0x82, 0x02, 0xf9, 0x30, 0x82, 0x01, 0xe1, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xbb, 0x94, 0x92, 0x5f, 0x3b, 0x5e, 0xd3, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x38, 0x31, 0x32, 0x31, 0x30, 0x32, 0x31, 0x33, 0x30, 0x5a, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x39, 0x31, 0x31, 0x31, 0x30, 0x32, 0x31, 0x33, 0x30, 0x5a, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe5, 0xbf, 0x24, 0xb1, 0x10, 0x46, 0x55, 0xad, 0x70, 0x77, 0x14, 0xc3, 0x1b, 0x55, 0xa0, 0x72, 0xfa, 0x3c, 0x3c, 0x44, 0x3e, 0xc3, 0xd7, 0xfa, 0x05, 0x94, 0xeb, 0x70, 0x6a, 0xe3, 0x47, 0x58, 0xb5, 0xab, 0x83, 0x6e, 0x7a, 0x43, 0xdd, 0x51, 0x9a, 0x31, 0x4a, 0x4a, 0x4f, 0xf0, 0x65, 0xfe, 0xae, 0x10, 0x30, 0xf8, 0xaa, 0x69, 0x54, 0xaf, 0xff, 0x4b, 0x3d, 0x48, 0x5d, 0x09, 0x9c, 0x94, 0x87, 0x3a, 0xf6, 0x56, 0xeb, 0xb6, 0x80, 0x07, 0x77, 0x1e, 0x92, 0x8b, 0x19, 0xc3, 0xa6, 0x8b, 0x4b, 0x0f, 0x60, 0x8f, 0x88, 0xca, 0x89, 0x41, 0x1d, 0x18, 0xb6, 0xde, 0x16, 0x75, 0xaa, 0xaa, 0xa7, 0xba, 0x88, 0xbd, 0x0f, 0x62, 0x27, 0x7e, 0xe1, 0x11, 0x67, 0x6a, 0xf2, 0x8a, 0xd9, 0xf0, 0xc2, 0x56, 0x60, 0x7f, 0xfd, 0xd7, 0x62, 0x71, 0x75, 0x8f, 0x09, 0xf8, 0x52, 0x37, 0xc9, 0xf2, 0xef, 0x56, 0xd5, 0x81, 0x95, 0xb3, 0x7f, 0xd9, 0xcc, 0xf4, 0xbc, 0xd0, 0x5e, 0x8c, 0x8b, 0x78, 0x14, 0x2a, 0xe0, 0x3d, 0xc5, 0xd1, 0xf2, 0x46, 0xd4, 0xab, 0xbe, 0xd0, 0x30, 0x5c, 0xb6, 0x29, 0x62, 0x48, 0x0f, 0xc7, 0x62, 0xa5, 0x9e, 0x9c, 0xc8, 0x29, 0xfc, 0x7e, 0xa8, 0x96, 0xc4, 0x25, 0xc1, 0x8c, 0x2a, 0x33, 0x9d, 0xe3, 0x2e, 0x5b, 0x30, 0xff, 0x62, 0xaf, 0xae, 0x48, 0xc6, 0x37, 0x3a, 0xb6, 0x93, 0x15, 0x23, 0x80, 0x45, 0xa2, 0xfd, 0x3b, 0x43, 0x99, 0xf1, 0x88, 0x77, 0x82, 0x79, 0x39, 0x5f, 0x48, 0x98, 0x3f, 0xb6, 0xc3, 0xbd, 0x1c, 0xcd, 0xd4, 0xf4, 0x2d, 0x7d, 0x37, 0x5a, 0xcb, 0xbc, 0xae, 0xdc, 0x77, 0xa2, 0x0f, 0x72, 0x56, 0xd7, 0xd4, 0xec, 0x59, 0x9d, 0xd9, 0x60, 0x7a, 0xf9, 0x26, 0x94, 0xda, 0xfd, 0x7c, 0x5c, 0xe8, 0x15, 0x7e, 0x9a, 0xe9, 0x3d, 0x71, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x8b, 0x37, 0x99, 0x6d, 0x76, 0x3f, 0xc5, 0x2b, 0x48, 0xf8, 0x0d, 0x61, 0xf2, 0x62, 0x8e, 0xc6, 0xe7, 0xd5, 0xb6, 0x4e, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x8b, 0x37, 0x99, 0x6d, 0x76, 0x3f, 0xc5, 0x2b, 0x48, 0xf8, 0x0d, 0x61, 0xf2, 0x62, 0x8e, 0xc6, 0xe7, 0xd5, 0xb6, 0x4e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xb2, 0x28, 0xe3, 0x94, 0x02, 0x6f, 0xe5, 0x2a, 0xdc, 0x29, 0x7d, 0xcf, 0x2b, 0x88, 0x09, 0x4f, 0x73, 0x8a, 0xc3, 0x54, 0xfc, 0xa3, 0x40, 0x84, 0x82, 0xce, 0x32, 0x8d, 0x75, 0x51, 0xa2, 0xc3, 0x3f, 0x01, 0x0f, 0xde, 0x1b, 0x1f, 0x48, 0xdb, 0x8f, 0xf9, 0xe0, 0xf3, 0x23, 0x78, 0x17, 0x4a, 0x84, 0xbc, 0xf4, 0x84, 0xb5, 0xe5, 0x8c, 0x17, 0x36, 0x7f, 0x4f, 0x6f, 0x54, 0x47, 0xbd, 0xe6, 0x40, 0xb0, 0x8a, 0x73, 0x74, 0x65, 0x57, 0x98, 0xf6, 0x77, 0x58, 0x0e, 0x5f, 0x82, 0x77, 0xb3, 0xd9, 0x87, 0xf8, 0xe9, 0x21, 0x11, 0x37, 0x4c, 0x6e, 0x5f, 0xda, 0x1e, 0x81, 0xa6, 0xa3, 0x45, 0x09, 0x81, 0x26, 0xd0, 0xb6, 0xe1, 0x27, 0xa5, 0xc3, 0x6e, 0xed, 0x86, 0xb7, 0x4f, 0xf3, 0x7e, 0x34, 0xa5, 0x0b, 0x8a, 0xd1, 0x56, 0x65, 0x04, 0xe2, 0x16, 0x71, 0x11, 0xdc, 0xa8, 0xa6, 0xe0, 0x57, 0x91, 0x63, 0xe2, 0x9d, 0xe7, 0x86, 0x00, 0xa6, 0xb4, 0x75, 0xf3, 0x37, 0x63, 0x48, 0x41, 0xcd, 0x97, 0x12, 0x2e, 0x5c, 0xc0, 0xf0, 0x13, 0x62, 0x71, 0xc1, 0x8e, 0x65, 0x28, 0x52, 0x09, 0x71, 0x87, 0x33, 0x27, 0x77, 0x84, 0x2f, 0xb4, 0x9a, 0x0a, 0x62, 0xe6, 0x69, 0x05, 0xd7, 0x94, 0x70, 0x8a, 0xb9, 0x61, 0x68, 0xdb, 0xbd, 0x4b, 0x58, 0xd3, 0x74, 0x0e, 0x3e, 0x00, 0x6c, 0x64, 0x02, 0x22, 0x4f, 0x62, 0xbe, 0xe1, 0x53, 0x96, 0xa5, 0x6a, 0x7d, 0xf7, 0x8c, 0x77, 0x42, 0x49, 0xb3, 0xb0, 0x44, 0xf1, 0xa9, 0xd5, 0x64, 0xdf, 0xcc, 0x8b, 0x90, 0x03, 0x05, 0xb8, 0x07, 0x5f, 0x6e, 0x88, 0x11, 0x7e, 0x93, 0x85, 0xe6, 0x3c, 0x87, 0x92, 0x74, 0xbb, 0xfe, 0x01, 0x32, 0xe8, 0x0b, 0xa9, 0xab, 0x15, 0xd4, 0x8a, 0x4f, 0xd7, 0x40, 0x12, 0xe1, 0xde, 0x8a, 0xa8, 0x7c, 0xf5, 0x31, 0x82, 0x01, 0xb6, 0x30, 0x82, 0x01, 0xb2, 0x02, 0x01, 0x01, 0x30, 0x20, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x02, 0x09, 0x00, 0xbb, 0x94, 0x92, 0x5f, 0x3b, 0x5e, 0xd3, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0xa0, 0x69, 0x30, 0x18, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0x30, 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x05, 0x31, 0x0f, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x30, 0x30, 0x38, 0x30, 0x36, 0x30, 0x36, 0x34, 0x36, 0x5a, 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22, 0x04, 0x20, 0xdf, 0xdc, 0xc0, 0x0e, 0xd3, 0xfd, 0xb4, 0x82, 0xf6, 0x0f, 0x00, 0x31, 0x34, 0xdc, 0xd9, 0x26, 0xce, 0x71, 0x86, 0x0e, 0x14, 0x8f, 0xdc, 0x22, 0x20, 0x96, 0xaa, 0x2e, 0x36, 0x0a, 0xbb, 0xf7, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0x0e, 0x9d, 0x75, 0xbe, 0x07, 0x26, 0xa8, 0xe4, 0x13, 0x1f, 0x82, 0x62, 0xd5, 0x5d, 0xc1, 0xaf, 0x65, 0xd1, 0xa5, 0xd7, 0x37, 0xe4, 0xe9, 0x30, 0xff, 0xf8, 0xc9, 0x7d, 0x07, 0x1a, 0x6f, 0x67, 0x16, 0x1b, 0x56, 0x73, 0x4e, 0x64, 0xc7, 0x7e, 0xa9, 0x7d, 0xdd, 0xe5, 0x23, 0x59, 0x71, 0x41, 0xf3, 0x8d, 0x4e, 0x1d, 0x26, 0x6a, 0x63, 0x6d, 0x52, 0x9e, 0x62, 0x8b, 0xfa, 0xe0, 0x34, 0x37, 0xb1, 0xd3, 0x1b, 0xbf, 0x7a, 0x33, 0x93, 0x18, 0x7c, 0xaa, 0xfa, 0x8e, 0x57, 0x92, 0xb3, 0xe0, 0xf1, 0x52, 0x6e, 0x4c, 0xe3, 0xe8, 0x3c, 0x80, 0x27, 0x60, 0xe3, 0xcc, 0x2d, 0xc4, 0xec, 0x0a, 0x76, 0xf2, 0xe1, 0xcc, 0xe2, 0x00, 0xf9, 0x9d, 0x89, 0x44, 0x60, 0x97, 0x3b, 0x21, 0x73, 0x34, 0x97, 0x09, 0x62, 0x9a, 0x8c, 0xd9, 0x61, 0x13, 0xa3, 0xc8, 0x38, 0xc3, 0xbb, 0xa8, 0xdc, 0xa2, 0xbd, 0x80, 0xb1, 0xd7, 0x69, 0xe5, 0x02, 0xe5, 0xe4, 0x0d, 0xa7, 0x5c, 0xfe, 0xb6, 0x5c, 0x87, 0x03, 0x56, 0x8d, 0xc5, 0x8a, 0xc4, 0xac, 0x3e, 0x6c, 0xf9, 0xd4, 0xec, 0xe3, 0xf9, 0xf6, 0x54, 0x82, 0x53, 0x61, 0x4c, 0xd4, 0xde, 0xb0, 0x85, 0xdb, 0x78, 0xe9, 0xef, 0xfc, 0xa6, 0x20, 0x95, 0x6b, 0x32, 0xc4, 0x3f, 0xec, 0xa3, 0x80, 0x1e, 0x64, 0x39, 0x55, 0x5e, 0x19, 0xea, 0x36, 0xc8, 0x1a, 0x1b, 0x0e, 0x37, 0xe2, 0x82, 0xed, 0xb3, 0xfa, 0xec, 0xad, 0xa3, 0x4c, 0xb0, 0x38, 0xf5, 0xd8, 0xe0, 0x75, 0xa0, 0x06, 0xf1, 0xb0, 0xff, 0x05, 0xc2, 0xe3, 0xc8, 0x73, 0x5f, 0xb5, 0xc2, 0xc6, 0x24, 0x70, 0xb8, 0x1d, 0xd8, 0x48, 0x5f, 0x00, 0xa8, 0x82, 0x84, 0xf8, 0xc4, 0x79, 0xc8, 0xdc, 0x52, 0x45, 0x4e, 0x28, 0x1f, 0x82, 0x23, 0x8e, 0xd9, 0x30, 0xee, 0xeb, 0xdb, 0x3c, 0xbb, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30 }; static uint8_t AuthVarAppendData[] = {0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30}; /* * AuthVarUpdate, * timestamp: 2014.09.08:06:08:33 * GUID: 7f5c5d52-2f14-4f12-967cdb60db05a0fd * attributes = UEFI_VAR_NON_VOLATILE, UEFI_VAR_BOOTSERVICE_ACCESS, * UEFI_VAR_RUNTIME_ACCESS, UEFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS * Variable name: AuthVarTest * data content: 0123456789 */ static uint8_t AuthVarUpdate[] = { 0xde, 0x07, 0x09, 0x08, 0x06, 0x08, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x04, 0x00, 0x00, 0x00, 0x02, 0xf1, 0x0e, 0x9d, 0xd2, 0xaf, 0x4a, 0xdf, 0x68, 0xee, 0x49, 0x8a, 0xa9, 0x34, 0x7d, 0x37, 0x56, 0x65, 0xa7, 0x30, 0x82, 0x04, 0xdc, 0x02, 0x01, 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82, 0x02, 0xfd, 0x30, 0x82, 0x02, 0xf9, 0x30, 0x82, 0x01, 0xe1, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xbb, 0x94, 0x92, 0x5f, 0x3b, 0x5e, 0xd3, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x38, 0x31, 0x32, 0x31, 0x30, 0x32, 0x31, 0x33, 0x30, 0x5a, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x39, 0x31, 0x31, 0x31, 0x30, 0x32, 0x31, 0x33, 0x30, 0x5a, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe5, 0xbf, 0x24, 0xb1, 0x10, 0x46, 0x55, 0xad, 0x70, 0x77, 0x14, 0xc3, 0x1b, 0x55, 0xa0, 0x72, 0xfa, 0x3c, 0x3c, 0x44, 0x3e, 0xc3, 0xd7, 0xfa, 0x05, 0x94, 0xeb, 0x70, 0x6a, 0xe3, 0x47, 0x58, 0xb5, 0xab, 0x83, 0x6e, 0x7a, 0x43, 0xdd, 0x51, 0x9a, 0x31, 0x4a, 0x4a, 0x4f, 0xf0, 0x65, 0xfe, 0xae, 0x10, 0x30, 0xf8, 0xaa, 0x69, 0x54, 0xaf, 0xff, 0x4b, 0x3d, 0x48, 0x5d, 0x09, 0x9c, 0x94, 0x87, 0x3a, 0xf6, 0x56, 0xeb, 0xb6, 0x80, 0x07, 0x77, 0x1e, 0x92, 0x8b, 0x19, 0xc3, 0xa6, 0x8b, 0x4b, 0x0f, 0x60, 0x8f, 0x88, 0xca, 0x89, 0x41, 0x1d, 0x18, 0xb6, 0xde, 0x16, 0x75, 0xaa, 0xaa, 0xa7, 0xba, 0x88, 0xbd, 0x0f, 0x62, 0x27, 0x7e, 0xe1, 0x11, 0x67, 0x6a, 0xf2, 0x8a, 0xd9, 0xf0, 0xc2, 0x56, 0x60, 0x7f, 0xfd, 0xd7, 0x62, 0x71, 0x75, 0x8f, 0x09, 0xf8, 0x52, 0x37, 0xc9, 0xf2, 0xef, 0x56, 0xd5, 0x81, 0x95, 0xb3, 0x7f, 0xd9, 0xcc, 0xf4, 0xbc, 0xd0, 0x5e, 0x8c, 0x8b, 0x78, 0x14, 0x2a, 0xe0, 0x3d, 0xc5, 0xd1, 0xf2, 0x46, 0xd4, 0xab, 0xbe, 0xd0, 0x30, 0x5c, 0xb6, 0x29, 0x62, 0x48, 0x0f, 0xc7, 0x62, 0xa5, 0x9e, 0x9c, 0xc8, 0x29, 0xfc, 0x7e, 0xa8, 0x96, 0xc4, 0x25, 0xc1, 0x8c, 0x2a, 0x33, 0x9d, 0xe3, 0x2e, 0x5b, 0x30, 0xff, 0x62, 0xaf, 0xae, 0x48, 0xc6, 0x37, 0x3a, 0xb6, 0x93, 0x15, 0x23, 0x80, 0x45, 0xa2, 0xfd, 0x3b, 0x43, 0x99, 0xf1, 0x88, 0x77, 0x82, 0x79, 0x39, 0x5f, 0x48, 0x98, 0x3f, 0xb6, 0xc3, 0xbd, 0x1c, 0xcd, 0xd4, 0xf4, 0x2d, 0x7d, 0x37, 0x5a, 0xcb, 0xbc, 0xae, 0xdc, 0x77, 0xa2, 0x0f, 0x72, 0x56, 0xd7, 0xd4, 0xec, 0x59, 0x9d, 0xd9, 0x60, 0x7a, 0xf9, 0x26, 0x94, 0xda, 0xfd, 0x7c, 0x5c, 0xe8, 0x15, 0x7e, 0x9a, 0xe9, 0x3d, 0x71, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x8b, 0x37, 0x99, 0x6d, 0x76, 0x3f, 0xc5, 0x2b, 0x48, 0xf8, 0x0d, 0x61, 0xf2, 0x62, 0x8e, 0xc6, 0xe7, 0xd5, 0xb6, 0x4e, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x8b, 0x37, 0x99, 0x6d, 0x76, 0x3f, 0xc5, 0x2b, 0x48, 0xf8, 0x0d, 0x61, 0xf2, 0x62, 0x8e, 0xc6, 0xe7, 0xd5, 0xb6, 0x4e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xb2, 0x28, 0xe3, 0x94, 0x02, 0x6f, 0xe5, 0x2a, 0xdc, 0x29, 0x7d, 0xcf, 0x2b, 0x88, 0x09, 0x4f, 0x73, 0x8a, 0xc3, 0x54, 0xfc, 0xa3, 0x40, 0x84, 0x82, 0xce, 0x32, 0x8d, 0x75, 0x51, 0xa2, 0xc3, 0x3f, 0x01, 0x0f, 0xde, 0x1b, 0x1f, 0x48, 0xdb, 0x8f, 0xf9, 0xe0, 0xf3, 0x23, 0x78, 0x17, 0x4a, 0x84, 0xbc, 0xf4, 0x84, 0xb5, 0xe5, 0x8c, 0x17, 0x36, 0x7f, 0x4f, 0x6f, 0x54, 0x47, 0xbd, 0xe6, 0x40, 0xb0, 0x8a, 0x73, 0x74, 0x65, 0x57, 0x98, 0xf6, 0x77, 0x58, 0x0e, 0x5f, 0x82, 0x77, 0xb3, 0xd9, 0x87, 0xf8, 0xe9, 0x21, 0x11, 0x37, 0x4c, 0x6e, 0x5f, 0xda, 0x1e, 0x81, 0xa6, 0xa3, 0x45, 0x09, 0x81, 0x26, 0xd0, 0xb6, 0xe1, 0x27, 0xa5, 0xc3, 0x6e, 0xed, 0x86, 0xb7, 0x4f, 0xf3, 0x7e, 0x34, 0xa5, 0x0b, 0x8a, 0xd1, 0x56, 0x65, 0x04, 0xe2, 0x16, 0x71, 0x11, 0xdc, 0xa8, 0xa6, 0xe0, 0x57, 0x91, 0x63, 0xe2, 0x9d, 0xe7, 0x86, 0x00, 0xa6, 0xb4, 0x75, 0xf3, 0x37, 0x63, 0x48, 0x41, 0xcd, 0x97, 0x12, 0x2e, 0x5c, 0xc0, 0xf0, 0x13, 0x62, 0x71, 0xc1, 0x8e, 0x65, 0x28, 0x52, 0x09, 0x71, 0x87, 0x33, 0x27, 0x77, 0x84, 0x2f, 0xb4, 0x9a, 0x0a, 0x62, 0xe6, 0x69, 0x05, 0xd7, 0x94, 0x70, 0x8a, 0xb9, 0x61, 0x68, 0xdb, 0xbd, 0x4b, 0x58, 0xd3, 0x74, 0x0e, 0x3e, 0x00, 0x6c, 0x64, 0x02, 0x22, 0x4f, 0x62, 0xbe, 0xe1, 0x53, 0x96, 0xa5, 0x6a, 0x7d, 0xf7, 0x8c, 0x77, 0x42, 0x49, 0xb3, 0xb0, 0x44, 0xf1, 0xa9, 0xd5, 0x64, 0xdf, 0xcc, 0x8b, 0x90, 0x03, 0x05, 0xb8, 0x07, 0x5f, 0x6e, 0x88, 0x11, 0x7e, 0x93, 0x85, 0xe6, 0x3c, 0x87, 0x92, 0x74, 0xbb, 0xfe, 0x01, 0x32, 0xe8, 0x0b, 0xa9, 0xab, 0x15, 0xd4, 0x8a, 0x4f, 0xd7, 0x40, 0x12, 0xe1, 0xde, 0x8a, 0xa8, 0x7c, 0xf5, 0x31, 0x82, 0x01, 0xb6, 0x30, 0x82, 0x01, 0xb2, 0x02, 0x01, 0x01, 0x30, 0x20, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x02, 0x09, 0x00, 0xbb, 0x94, 0x92, 0x5f, 0x3b, 0x5e, 0xd3, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0xa0, 0x69, 0x30, 0x18, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0x30, 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x05, 0x31, 0x0f, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x30, 0x30, 0x38, 0x30, 0x36, 0x30, 0x38, 0x33, 0x33, 0x5a, 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22, 0x04, 0x20, 0x87, 0xad, 0x32, 0xf8, 0x72, 0xff, 0x46, 0xe9, 0xfc, 0x57, 0xca, 0xf2, 0x2e, 0x44, 0xf9, 0xcb, 0x91, 0x2d, 0x97, 0x76, 0x6d, 0xc9, 0x5e, 0x31, 0x80, 0x5d, 0x76, 0xbd, 0xbc, 0xbd, 0x89, 0xb7, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0x32, 0x3a, 0x9c, 0x07, 0x60, 0xf4, 0x5a, 0x6d, 0x30, 0xd3, 0x45, 0x4d, 0xb8, 0x68, 0x59, 0x1b, 0x26, 0xd5, 0xb0, 0x9b, 0x8e, 0x1b, 0x1b, 0x1e, 0x30, 0x0c, 0x61, 0x53, 0x43, 0xa6, 0xde, 0x56, 0x49, 0x49, 0xfb, 0xf7, 0x5d, 0x73, 0xe9, 0xec, 0x49, 0x97, 0x19, 0x5f, 0x0e, 0x03, 0x49, 0xbc, 0x1d, 0x62, 0x4c, 0xf5, 0xea, 0x47, 0x5a, 0x6a, 0x32, 0x3e, 0x6d, 0x08, 0x19, 0x39, 0x6f, 0x0a, 0xf8, 0x57, 0xdc, 0xbb, 0xe8, 0x34, 0x69, 0x7f, 0x43, 0x3e, 0x40, 0x6d, 0x49, 0x14, 0x05, 0x4a, 0x73, 0xad, 0x74, 0x4b, 0x06, 0x2b, 0x83, 0x60, 0x7f, 0x21, 0xcc, 0x15, 0xa1, 0x84, 0x04, 0x33, 0x4f, 0xa9, 0xb3, 0x60, 0x2f, 0xb2, 0x08, 0xe1, 0x6e, 0xea, 0xd9, 0x4b, 0xf1, 0x7a, 0xc0, 0x5f, 0xc0, 0xb3, 0xcb, 0x04, 0x93, 0x19, 0x53, 0xf6, 0x0d, 0xe1, 0x4f, 0x44, 0x54, 0x57, 0x0e, 0x58, 0xb2, 0x57, 0x44, 0xc1, 0x30, 0x31, 0x57, 0xc0, 0x6f, 0x95, 0x8e, 0xdb, 0xc6, 0xf3, 0x0f, 0xc6, 0xf5, 0x09, 0x2b, 0x19, 0x1d, 0x2d, 0x59, 0x7c, 0xfb, 0x13, 0xb3, 0xf8, 0x97, 0x9e, 0x37, 0x42, 0x6f, 0xbe, 0xab, 0x0a, 0x1e, 0x57, 0x55, 0x82, 0x26, 0x22, 0x6b, 0x2f, 0xf8, 0x88, 0x32, 0x8d, 0x80, 0xee, 0x35, 0x8e, 0x09, 0x42, 0x2b, 0xb3, 0x5b, 0xce, 0xb4, 0x44, 0xa1, 0xc4, 0x73, 0xda, 0x6c, 0x53, 0x3f, 0x9d, 0xb7, 0xea, 0xfe, 0xeb, 0x40, 0x40, 0x35, 0xdd, 0x6f, 0x38, 0x71, 0x38, 0x82, 0x36, 0xdd, 0x67, 0x48, 0x89, 0x06, 0xe8, 0x21, 0x2a, 0x46, 0xd9, 0x46, 0xcc, 0x75, 0xd1, 0x62, 0xa4, 0xfd, 0x29, 0xfa, 0x6a, 0x3c, 0xa2, 0xf7, 0x4c, 0xb5, 0x2b, 0x17, 0x28, 0xbc, 0x02, 0x79, 0x7f, 0x49, 0x72, 0xc1, 0x1e, 0x30, 0xe0, 0xda, 0xca, 0x28, 0x1f, 0x40, 0xa8, 0x62, 0xf5, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39 }; static uint8_t AuthVarUpdateData[] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39}; /* * The same as AuthVarCreate, * modified data content: 123456789aabcdef */ static uint8_t AuthVarModData[] = { 0xde, 0x07, 0x09, 0x08, 0x03, 0x29, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x04, 0x00, 0x00, 0x00, 0x02, 0xf1, 0x0e, 0x9d, 0xd2, 0xaf, 0x4a, 0xdf, 0x68, 0xee, 0x49, 0x8a, 0xa9, 0x34, 0x7d, 0x37, 0x56, 0x65, 0xa7, 0x30, 0x82, 0x04, 0xdc, 0x02, 0x01, 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82, 0x02, 0xfd, 0x30, 0x82, 0x02, 0xf9, 0x30, 0x82, 0x01, 0xe1, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xbb, 0x94, 0x92, 0x5f, 0x3b, 0x5e, 0xd3, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x38, 0x31, 0x32, 0x31, 0x30, 0x32, 0x31, 0x33, 0x30, 0x5a, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x39, 0x31, 0x31, 0x31, 0x30, 0x32, 0x31, 0x33, 0x30, 0x5a, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe5, 0xbf, 0x24, 0xb1, 0x10, 0x46, 0x55, 0xad, 0x70, 0x77, 0x14, 0xc3, 0x1b, 0x55, 0xa0, 0x72, 0xfa, 0x3c, 0x3c, 0x44, 0x3e, 0xc3, 0xd7, 0xfa, 0x05, 0x94, 0xeb, 0x70, 0x6a, 0xe3, 0x47, 0x58, 0xb5, 0xab, 0x83, 0x6e, 0x7a, 0x43, 0xdd, 0x51, 0x9a, 0x31, 0x4a, 0x4a, 0x4f, 0xf0, 0x65, 0xfe, 0xae, 0x10, 0x30, 0xf8, 0xaa, 0x69, 0x54, 0xaf, 0xff, 0x4b, 0x3d, 0x48, 0x5d, 0x09, 0x9c, 0x94, 0x87, 0x3a, 0xf6, 0x56, 0xeb, 0xb6, 0x80, 0x07, 0x77, 0x1e, 0x92, 0x8b, 0x19, 0xc3, 0xa6, 0x8b, 0x4b, 0x0f, 0x60, 0x8f, 0x88, 0xca, 0x89, 0x41, 0x1d, 0x18, 0xb6, 0xde, 0x16, 0x75, 0xaa, 0xaa, 0xa7, 0xba, 0x88, 0xbd, 0x0f, 0x62, 0x27, 0x7e, 0xe1, 0x11, 0x67, 0x6a, 0xf2, 0x8a, 0xd9, 0xf0, 0xc2, 0x56, 0x60, 0x7f, 0xfd, 0xd7, 0x62, 0x71, 0x75, 0x8f, 0x09, 0xf8, 0x52, 0x37, 0xc9, 0xf2, 0xef, 0x56, 0xd5, 0x81, 0x95, 0xb3, 0x7f, 0xd9, 0xcc, 0xf4, 0xbc, 0xd0, 0x5e, 0x8c, 0x8b, 0x78, 0x14, 0x2a, 0xe0, 0x3d, 0xc5, 0xd1, 0xf2, 0x46, 0xd4, 0xab, 0xbe, 0xd0, 0x30, 0x5c, 0xb6, 0x29, 0x62, 0x48, 0x0f, 0xc7, 0x62, 0xa5, 0x9e, 0x9c, 0xc8, 0x29, 0xfc, 0x7e, 0xa8, 0x96, 0xc4, 0x25, 0xc1, 0x8c, 0x2a, 0x33, 0x9d, 0xe3, 0x2e, 0x5b, 0x30, 0xff, 0x62, 0xaf, 0xae, 0x48, 0xc6, 0x37, 0x3a, 0xb6, 0x93, 0x15, 0x23, 0x80, 0x45, 0xa2, 0xfd, 0x3b, 0x43, 0x99, 0xf1, 0x88, 0x77, 0x82, 0x79, 0x39, 0x5f, 0x48, 0x98, 0x3f, 0xb6, 0xc3, 0xbd, 0x1c, 0xcd, 0xd4, 0xf4, 0x2d, 0x7d, 0x37, 0x5a, 0xcb, 0xbc, 0xae, 0xdc, 0x77, 0xa2, 0x0f, 0x72, 0x56, 0xd7, 0xd4, 0xec, 0x59, 0x9d, 0xd9, 0x60, 0x7a, 0xf9, 0x26, 0x94, 0xda, 0xfd, 0x7c, 0x5c, 0xe8, 0x15, 0x7e, 0x9a, 0xe9, 0x3d, 0x71, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x8b, 0x37, 0x99, 0x6d, 0x76, 0x3f, 0xc5, 0x2b, 0x48, 0xf8, 0x0d, 0x61, 0xf2, 0x62, 0x8e, 0xc6, 0xe7, 0xd5, 0xb6, 0x4e, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x8b, 0x37, 0x99, 0x6d, 0x76, 0x3f, 0xc5, 0x2b, 0x48, 0xf8, 0x0d, 0x61, 0xf2, 0x62, 0x8e, 0xc6, 0xe7, 0xd5, 0xb6, 0x4e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xb2, 0x28, 0xe3, 0x94, 0x02, 0x6f, 0xe5, 0x2a, 0xdc, 0x29, 0x7d, 0xcf, 0x2b, 0x88, 0x09, 0x4f, 0x73, 0x8a, 0xc3, 0x54, 0xfc, 0xa3, 0x40, 0x84, 0x82, 0xce, 0x32, 0x8d, 0x75, 0x51, 0xa2, 0xc3, 0x3f, 0x01, 0x0f, 0xde, 0x1b, 0x1f, 0x48, 0xdb, 0x8f, 0xf9, 0xe0, 0xf3, 0x23, 0x78, 0x17, 0x4a, 0x84, 0xbc, 0xf4, 0x84, 0xb5, 0xe5, 0x8c, 0x17, 0x36, 0x7f, 0x4f, 0x6f, 0x54, 0x47, 0xbd, 0xe6, 0x40, 0xb0, 0x8a, 0x73, 0x74, 0x65, 0x57, 0x98, 0xf6, 0x77, 0x58, 0x0e, 0x5f, 0x82, 0x77, 0xb3, 0xd9, 0x87, 0xf8, 0xe9, 0x21, 0x11, 0x37, 0x4c, 0x6e, 0x5f, 0xda, 0x1e, 0x81, 0xa6, 0xa3, 0x45, 0x09, 0x81, 0x26, 0xd0, 0xb6, 0xe1, 0x27, 0xa5, 0xc3, 0x6e, 0xed, 0x86, 0xb7, 0x4f, 0xf3, 0x7e, 0x34, 0xa5, 0x0b, 0x8a, 0xd1, 0x56, 0x65, 0x04, 0xe2, 0x16, 0x71, 0x11, 0xdc, 0xa8, 0xa6, 0xe0, 0x57, 0x91, 0x63, 0xe2, 0x9d, 0xe7, 0x86, 0x00, 0xa6, 0xb4, 0x75, 0xf3, 0x37, 0x63, 0x48, 0x41, 0xcd, 0x97, 0x12, 0x2e, 0x5c, 0xc0, 0xf0, 0x13, 0x62, 0x71, 0xc1, 0x8e, 0x65, 0x28, 0x52, 0x09, 0x71, 0x87, 0x33, 0x27, 0x77, 0x84, 0x2f, 0xb4, 0x9a, 0x0a, 0x62, 0xe6, 0x69, 0x05, 0xd7, 0x94, 0x70, 0x8a, 0xb9, 0x61, 0x68, 0xdb, 0xbd, 0x4b, 0x58, 0xd3, 0x74, 0x0e, 0x3e, 0x00, 0x6c, 0x64, 0x02, 0x22, 0x4f, 0x62, 0xbe, 0xe1, 0x53, 0x96, 0xa5, 0x6a, 0x7d, 0xf7, 0x8c, 0x77, 0x42, 0x49, 0xb3, 0xb0, 0x44, 0xf1, 0xa9, 0xd5, 0x64, 0xdf, 0xcc, 0x8b, 0x90, 0x03, 0x05, 0xb8, 0x07, 0x5f, 0x6e, 0x88, 0x11, 0x7e, 0x93, 0x85, 0xe6, 0x3c, 0x87, 0x92, 0x74, 0xbb, 0xfe, 0x01, 0x32, 0xe8, 0x0b, 0xa9, 0xab, 0x15, 0xd4, 0x8a, 0x4f, 0xd7, 0x40, 0x12, 0xe1, 0xde, 0x8a, 0xa8, 0x7c, 0xf5, 0x31, 0x82, 0x01, 0xb6, 0x30, 0x82, 0x01, 0xb2, 0x02, 0x01, 0x01, 0x30, 0x20, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x02, 0x09, 0x00, 0xbb, 0x94, 0x92, 0x5f, 0x3b, 0x5e, 0xd3, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0xa0, 0x69, 0x30, 0x18, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0x30, 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x05, 0x31, 0x0f, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x30, 0x30, 0x38, 0x30, 0x33, 0x34, 0x31, 0x31, 0x35, 0x5a, 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22, 0x04, 0x20, 0x7d, 0x9f, 0x1b, 0x65, 0x76, 0x70, 0x66, 0xe3, 0xa0, 0x6a, 0x53, 0x01, 0xd9, 0xde, 0x6f, 0x6a, 0x88, 0xcb, 0x76, 0xb3, 0xf8, 0xd6, 0xc4, 0x45, 0x3a, 0x8f, 0x7b, 0x9d, 0x06, 0x50, 0xc6, 0x12, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0xb5, 0x61, 0x49, 0xea, 0xfc, 0xfe, 0x13, 0xfc, 0xd5, 0x92, 0x5a, 0xf5, 0x11, 0x88, 0x2a, 0xba, 0x0f, 0x3d, 0x3d, 0x56, 0x8a, 0x69, 0x2b, 0xcc, 0x3a, 0x95, 0x09, 0xb6, 0x06, 0xd9, 0x36, 0x17, 0x63, 0x40, 0xd7, 0xc8, 0x5a, 0xb3, 0xca, 0x2d, 0xd2, 0xea, 0xa0, 0x9a, 0x82, 0x04, 0x75, 0x66, 0xeb, 0x41, 0x9b, 0x1a, 0x23, 0x70, 0xf0, 0xf1, 0x1a, 0x69, 0x0b, 0xb2, 0x8d, 0x8f, 0x7f, 0x6a, 0x96, 0x2a, 0x77, 0x30, 0x0c, 0x06, 0xff, 0x1c, 0x9d, 0x71, 0x41, 0xe3, 0x91, 0x22, 0xbc, 0xaf, 0xb5, 0x39, 0x0d, 0xb6, 0x5b, 0x03, 0x0b, 0xf1, 0xa6, 0x98, 0xb4, 0x15, 0xce, 0x23, 0x09, 0xcf, 0xad, 0x7c, 0xb9, 0x41, 0x2e, 0xf4, 0x9f, 0x50, 0x49, 0x13, 0xf7, 0x87, 0x07, 0x7e, 0x5e, 0x9c, 0xc0, 0x79, 0x61, 0xfb, 0xa2, 0xf4, 0xf7, 0x3c, 0xa1, 0xb7, 0x1b, 0x68, 0x56, 0x5c, 0x04, 0x74, 0x97, 0xdc, 0xf5, 0x3e, 0x07, 0x93, 0xd5, 0x43, 0xb7, 0x36, 0xb9, 0xc9, 0xc8, 0x65, 0x4c, 0x24, 0xce, 0x58, 0x6d, 0x9e, 0x60, 0x54, 0x10, 0x6c, 0xb5, 0x4e, 0xbe, 0x47, 0x9b, 0xef, 0x31, 0xa1, 0xdc, 0x0c, 0x84, 0xe5, 0xff, 0xd2, 0xdd, 0x2d, 0x8e, 0xa1, 0x7e, 0x9f, 0x02, 0x98, 0x46, 0x1a, 0x7f, 0x6e, 0x4f, 0x70, 0x68, 0x4a, 0x1d, 0xa7, 0x9c, 0x0e, 0x1d, 0x42, 0xaf, 0x6f, 0x0f, 0x6d, 0x8f, 0x91, 0x69, 0x6a, 0xff, 0x73, 0x86, 0xc6, 0xc3, 0x24, 0x7d, 0x60, 0x67, 0xb4, 0xae, 0xa8, 0xb4, 0x19, 0xba, 0x7a, 0x61, 0xc9, 0xad, 0xcc, 0xcf, 0x9f, 0xfe, 0x13, 0x1e, 0xc3, 0x2c, 0xfd, 0x3a, 0x25, 0xdf, 0xa2, 0xc6, 0xb2, 0x15, 0x18, 0x54, 0xbd, 0x51, 0xc1, 0x84, 0x62, 0x0f, 0x72, 0x8d, 0x67, 0xce, 0xe6, 0xbd, 0x6e, 0x21, 0x58, 0x1f, 0x77, 0xf4, 0xfc, 0x36, 0xf9, 0x0c, 0x1d, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66 }; /* * The same as AuthVarCreate, * Modify timestamp: 2014.09.08:03:41:15 to 2014.09.08:03:41:16 */ static uint8_t AuthVarModTime[] = { 0xde, 0x07, 0x09, 0x08, 0x03, 0x29, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x04, 0x00, 0x00, 0x00, 0x02, 0xf1, 0x0e, 0x9d, 0xd2, 0xaf, 0x4a, 0xdf, 0x68, 0xee, 0x49, 0x8a, 0xa9, 0x34, 0x7d, 0x37, 0x56, 0x65, 0xa7, 0x30, 0x82, 0x04, 0xdc, 0x02, 0x01, 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82, 0x02, 0xfd, 0x30, 0x82, 0x02, 0xf9, 0x30, 0x82, 0x01, 0xe1, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xbb, 0x94, 0x92, 0x5f, 0x3b, 0x5e, 0xd3, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x38, 0x31, 0x32, 0x31, 0x30, 0x32, 0x31, 0x33, 0x30, 0x5a, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x39, 0x31, 0x31, 0x31, 0x30, 0x32, 0x31, 0x33, 0x30, 0x5a, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe5, 0xbf, 0x24, 0xb1, 0x10, 0x46, 0x55, 0xad, 0x70, 0x77, 0x14, 0xc3, 0x1b, 0x55, 0xa0, 0x72, 0xfa, 0x3c, 0x3c, 0x44, 0x3e, 0xc3, 0xd7, 0xfa, 0x05, 0x94, 0xeb, 0x70, 0x6a, 0xe3, 0x47, 0x58, 0xb5, 0xab, 0x83, 0x6e, 0x7a, 0x43, 0xdd, 0x51, 0x9a, 0x31, 0x4a, 0x4a, 0x4f, 0xf0, 0x65, 0xfe, 0xae, 0x10, 0x30, 0xf8, 0xaa, 0x69, 0x54, 0xaf, 0xff, 0x4b, 0x3d, 0x48, 0x5d, 0x09, 0x9c, 0x94, 0x87, 0x3a, 0xf6, 0x56, 0xeb, 0xb6, 0x80, 0x07, 0x77, 0x1e, 0x92, 0x8b, 0x19, 0xc3, 0xa6, 0x8b, 0x4b, 0x0f, 0x60, 0x8f, 0x88, 0xca, 0x89, 0x41, 0x1d, 0x18, 0xb6, 0xde, 0x16, 0x75, 0xaa, 0xaa, 0xa7, 0xba, 0x88, 0xbd, 0x0f, 0x62, 0x27, 0x7e, 0xe1, 0x11, 0x67, 0x6a, 0xf2, 0x8a, 0xd9, 0xf0, 0xc2, 0x56, 0x60, 0x7f, 0xfd, 0xd7, 0x62, 0x71, 0x75, 0x8f, 0x09, 0xf8, 0x52, 0x37, 0xc9, 0xf2, 0xef, 0x56, 0xd5, 0x81, 0x95, 0xb3, 0x7f, 0xd9, 0xcc, 0xf4, 0xbc, 0xd0, 0x5e, 0x8c, 0x8b, 0x78, 0x14, 0x2a, 0xe0, 0x3d, 0xc5, 0xd1, 0xf2, 0x46, 0xd4, 0xab, 0xbe, 0xd0, 0x30, 0x5c, 0xb6, 0x29, 0x62, 0x48, 0x0f, 0xc7, 0x62, 0xa5, 0x9e, 0x9c, 0xc8, 0x29, 0xfc, 0x7e, 0xa8, 0x96, 0xc4, 0x25, 0xc1, 0x8c, 0x2a, 0x33, 0x9d, 0xe3, 0x2e, 0x5b, 0x30, 0xff, 0x62, 0xaf, 0xae, 0x48, 0xc6, 0x37, 0x3a, 0xb6, 0x93, 0x15, 0x23, 0x80, 0x45, 0xa2, 0xfd, 0x3b, 0x43, 0x99, 0xf1, 0x88, 0x77, 0x82, 0x79, 0x39, 0x5f, 0x48, 0x98, 0x3f, 0xb6, 0xc3, 0xbd, 0x1c, 0xcd, 0xd4, 0xf4, 0x2d, 0x7d, 0x37, 0x5a, 0xcb, 0xbc, 0xae, 0xdc, 0x77, 0xa2, 0x0f, 0x72, 0x56, 0xd7, 0xd4, 0xec, 0x59, 0x9d, 0xd9, 0x60, 0x7a, 0xf9, 0x26, 0x94, 0xda, 0xfd, 0x7c, 0x5c, 0xe8, 0x15, 0x7e, 0x9a, 0xe9, 0x3d, 0x71, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x8b, 0x37, 0x99, 0x6d, 0x76, 0x3f, 0xc5, 0x2b, 0x48, 0xf8, 0x0d, 0x61, 0xf2, 0x62, 0x8e, 0xc6, 0xe7, 0xd5, 0xb6, 0x4e, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x8b, 0x37, 0x99, 0x6d, 0x76, 0x3f, 0xc5, 0x2b, 0x48, 0xf8, 0x0d, 0x61, 0xf2, 0x62, 0x8e, 0xc6, 0xe7, 0xd5, 0xb6, 0x4e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xb2, 0x28, 0xe3, 0x94, 0x02, 0x6f, 0xe5, 0x2a, 0xdc, 0x29, 0x7d, 0xcf, 0x2b, 0x88, 0x09, 0x4f, 0x73, 0x8a, 0xc3, 0x54, 0xfc, 0xa3, 0x40, 0x84, 0x82, 0xce, 0x32, 0x8d, 0x75, 0x51, 0xa2, 0xc3, 0x3f, 0x01, 0x0f, 0xde, 0x1b, 0x1f, 0x48, 0xdb, 0x8f, 0xf9, 0xe0, 0xf3, 0x23, 0x78, 0x17, 0x4a, 0x84, 0xbc, 0xf4, 0x84, 0xb5, 0xe5, 0x8c, 0x17, 0x36, 0x7f, 0x4f, 0x6f, 0x54, 0x47, 0xbd, 0xe6, 0x40, 0xb0, 0x8a, 0x73, 0x74, 0x65, 0x57, 0x98, 0xf6, 0x77, 0x58, 0x0e, 0x5f, 0x82, 0x77, 0xb3, 0xd9, 0x87, 0xf8, 0xe9, 0x21, 0x11, 0x37, 0x4c, 0x6e, 0x5f, 0xda, 0x1e, 0x81, 0xa6, 0xa3, 0x45, 0x09, 0x81, 0x26, 0xd0, 0xb6, 0xe1, 0x27, 0xa5, 0xc3, 0x6e, 0xed, 0x86, 0xb7, 0x4f, 0xf3, 0x7e, 0x34, 0xa5, 0x0b, 0x8a, 0xd1, 0x56, 0x65, 0x04, 0xe2, 0x16, 0x71, 0x11, 0xdc, 0xa8, 0xa6, 0xe0, 0x57, 0x91, 0x63, 0xe2, 0x9d, 0xe7, 0x86, 0x00, 0xa6, 0xb4, 0x75, 0xf3, 0x37, 0x63, 0x48, 0x41, 0xcd, 0x97, 0x12, 0x2e, 0x5c, 0xc0, 0xf0, 0x13, 0x62, 0x71, 0xc1, 0x8e, 0x65, 0x28, 0x52, 0x09, 0x71, 0x87, 0x33, 0x27, 0x77, 0x84, 0x2f, 0xb4, 0x9a, 0x0a, 0x62, 0xe6, 0x69, 0x05, 0xd7, 0x94, 0x70, 0x8a, 0xb9, 0x61, 0x68, 0xdb, 0xbd, 0x4b, 0x58, 0xd3, 0x74, 0x0e, 0x3e, 0x00, 0x6c, 0x64, 0x02, 0x22, 0x4f, 0x62, 0xbe, 0xe1, 0x53, 0x96, 0xa5, 0x6a, 0x7d, 0xf7, 0x8c, 0x77, 0x42, 0x49, 0xb3, 0xb0, 0x44, 0xf1, 0xa9, 0xd5, 0x64, 0xdf, 0xcc, 0x8b, 0x90, 0x03, 0x05, 0xb8, 0x07, 0x5f, 0x6e, 0x88, 0x11, 0x7e, 0x93, 0x85, 0xe6, 0x3c, 0x87, 0x92, 0x74, 0xbb, 0xfe, 0x01, 0x32, 0xe8, 0x0b, 0xa9, 0xab, 0x15, 0xd4, 0x8a, 0x4f, 0xd7, 0x40, 0x12, 0xe1, 0xde, 0x8a, 0xa8, 0x7c, 0xf5, 0x31, 0x82, 0x01, 0xb6, 0x30, 0x82, 0x01, 0xb2, 0x02, 0x01, 0x01, 0x30, 0x20, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x02, 0x09, 0x00, 0xbb, 0x94, 0x92, 0x5f, 0x3b, 0x5e, 0xd3, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0xa0, 0x69, 0x30, 0x18, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0x30, 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x05, 0x31, 0x0f, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x30, 0x30, 0x38, 0x30, 0x33, 0x34, 0x31, 0x31, 0x35, 0x5a, 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22, 0x04, 0x20, 0x7d, 0x9f, 0x1b, 0x65, 0x76, 0x70, 0x66, 0xe3, 0xa0, 0x6a, 0x53, 0x01, 0xd9, 0xde, 0x6f, 0x6a, 0x88, 0xcb, 0x76, 0xb3, 0xf8, 0xd6, 0xc4, 0x45, 0x3a, 0x8f, 0x7b, 0x9d, 0x06, 0x50, 0xc6, 0x12, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0xb5, 0x61, 0x49, 0xea, 0xfc, 0xfe, 0x13, 0xfc, 0xd5, 0x92, 0x5a, 0xf5, 0x11, 0x88, 0x2a, 0xba, 0x0f, 0x3d, 0x3d, 0x56, 0x8a, 0x69, 0x2b, 0xcc, 0x3a, 0x95, 0x09, 0xb6, 0x06, 0xd9, 0x36, 0x17, 0x63, 0x40, 0xd7, 0xc8, 0x5a, 0xb3, 0xca, 0x2d, 0xd2, 0xea, 0xa0, 0x9a, 0x82, 0x04, 0x75, 0x66, 0xeb, 0x41, 0x9b, 0x1a, 0x23, 0x70, 0xf0, 0xf1, 0x1a, 0x69, 0x0b, 0xb2, 0x8d, 0x8f, 0x7f, 0x6a, 0x96, 0x2a, 0x77, 0x30, 0x0c, 0x06, 0xff, 0x1c, 0x9d, 0x71, 0x41, 0xe3, 0x91, 0x22, 0xbc, 0xaf, 0xb5, 0x39, 0x0d, 0xb6, 0x5b, 0x03, 0x0b, 0xf1, 0xa6, 0x98, 0xb4, 0x15, 0xce, 0x23, 0x09, 0xcf, 0xad, 0x7c, 0xb9, 0x41, 0x2e, 0xf4, 0x9f, 0x50, 0x49, 0x13, 0xf7, 0x87, 0x07, 0x7e, 0x5e, 0x9c, 0xc0, 0x79, 0x61, 0xfb, 0xa2, 0xf4, 0xf7, 0x3c, 0xa1, 0xb7, 0x1b, 0x68, 0x56, 0x5c, 0x04, 0x74, 0x97, 0xdc, 0xf5, 0x3e, 0x07, 0x93, 0xd5, 0x43, 0xb7, 0x36, 0xb9, 0xc9, 0xc8, 0x65, 0x4c, 0x24, 0xce, 0x58, 0x6d, 0x9e, 0x60, 0x54, 0x10, 0x6c, 0xb5, 0x4e, 0xbe, 0x47, 0x9b, 0xef, 0x31, 0xa1, 0xdc, 0x0c, 0x84, 0xe5, 0xff, 0xd2, 0xdd, 0x2d, 0x8e, 0xa1, 0x7e, 0x9f, 0x02, 0x98, 0x46, 0x1a, 0x7f, 0x6e, 0x4f, 0x70, 0x68, 0x4a, 0x1d, 0xa7, 0x9c, 0x0e, 0x1d, 0x42, 0xaf, 0x6f, 0x0f, 0x6d, 0x8f, 0x91, 0x69, 0x6a, 0xff, 0x73, 0x86, 0xc6, 0xc3, 0x24, 0x7d, 0x60, 0x67, 0xb4, 0xae, 0xa8, 0xb4, 0x19, 0xba, 0x7a, 0x61, 0xc9, 0xad, 0xcc, 0xcf, 0x9f, 0xfe, 0x13, 0x1e, 0xc3, 0x2c, 0xfd, 0x3a, 0x25, 0xdf, 0xa2, 0xc6, 0xb2, 0x15, 0x18, 0x54, 0xbd, 0x51, 0xc1, 0x84, 0x62, 0x0f, 0x72, 0x8d, 0x67, 0xce, 0xe6, 0xbd, 0x6e, 0x21, 0x58, 0x1f, 0x77, 0xf4, 0xfc, 0x36, 0xf9, 0x0c, 0x1d, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66 }; /* * AuthVarDelDiff, using the same key as AuthVarCreateDiffer * timestamp: 2014.09.08:05:52:44 * GUID: 7f5c5d52-2f14-4f12-967cdb60db05a0fd * attributes = UEFI_VAR_NON_VOLATILE, UEFI_VAR_BOOTSERVICE_ACCESS, * UEFI_VAR_RUNTIME_ACCESS, UEFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS * Variable name: AuthVarTest * data content: empty */ static uint8_t AuthVarDelDiff[] = { 0xde, 0x07, 0x09, 0x08, 0x05, 0x34, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x04, 0x00, 0x00, 0x00, 0x02, 0xf1, 0x0e, 0x9d, 0xd2, 0xaf, 0x4a, 0xdf, 0x68, 0xee, 0x49, 0x8a, 0xa9, 0x34, 0x7d, 0x37, 0x56, 0x65, 0xa7, 0x30, 0x82, 0x04, 0xdc, 0x02, 0x01, 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82, 0x02, 0xfd, 0x30, 0x82, 0x02, 0xf9, 0x30, 0x82, 0x01, 0xe1, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xe2, 0x7d, 0x10, 0xea, 0xd8, 0x0d, 0x98, 0x77, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x30, 0x30, 0x38, 0x30, 0x35, 0x34, 0x39, 0x35, 0x38, 0x5a, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x31, 0x30, 0x37, 0x30, 0x35, 0x34, 0x39, 0x35, 0x38, 0x5a, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xb2, 0x11, 0xba, 0xfc, 0xb3, 0xb5, 0xe9, 0xb4, 0xf4, 0x66, 0xc7, 0xe7, 0xa8, 0xed, 0xd1, 0xdb, 0xd9, 0xb2, 0xb4, 0x72, 0x0e, 0x7a, 0xc2, 0x00, 0xd1, 0xa3, 0x3f, 0x24, 0xa7, 0xc9, 0x9f, 0xef, 0x14, 0x07, 0x48, 0x2f, 0x6a, 0x54, 0xdb, 0xde, 0x72, 0xa8, 0xdd, 0xba, 0x2c, 0x61, 0x14, 0xd4, 0x53, 0x54, 0xe7, 0x96, 0xfd, 0xa1, 0x26, 0x05, 0x63, 0x1d, 0xd7, 0x1a, 0x70, 0xf8, 0xb5, 0x3d, 0x40, 0xc0, 0x33, 0x35, 0x8a, 0xe9, 0x88, 0x8a, 0x8a, 0x7d, 0x56, 0x39, 0x9b, 0x70, 0x4a, 0x07, 0xd9, 0xc2, 0x44, 0xe2, 0x12, 0x2e, 0x8b, 0x78, 0x9e, 0x14, 0x99, 0x7a, 0x47, 0x92, 0x9e, 0x42, 0x0f, 0x76, 0xb7, 0x3d, 0x1f, 0xb4, 0x20, 0xd2, 0x6d, 0x93, 0xdf, 0x2e, 0xb1, 0x00, 0xa9, 0x94, 0xe0, 0x0b, 0xe6, 0x57, 0x25, 0x76, 0x99, 0x63, 0xa7, 0x4c, 0x0b, 0x44, 0x48, 0x59, 0xbe, 0x52, 0xfb, 0x64, 0xca, 0xe0, 0x21, 0x8e, 0xaf, 0xdc, 0xa5, 0xb2, 0x5b, 0x4a, 0x80, 0x7e, 0xe2, 0x95, 0xa5, 0x95, 0xb7, 0x75, 0x19, 0x44, 0x77, 0x1b, 0x8f, 0xa0, 0x57, 0xc7, 0xb5, 0x33, 0x7f, 0xbb, 0x5b, 0x41, 0x63, 0xde, 0xc8, 0xdd, 0x4a, 0x41, 0x98, 0x1a, 0xc0, 0x36, 0xed, 0x8d, 0x4c, 0xc9, 0x2f, 0x19, 0x39, 0xf4, 0xf4, 0x31, 0xb4, 0x4e, 0x78, 0xff, 0xab, 0x91, 0xe6, 0xf2, 0x23, 0xdc, 0x79, 0x24, 0x54, 0xba, 0x05, 0x60, 0x2c, 0xad, 0x29, 0xeb, 0x8e, 0xa0, 0x2d, 0x73, 0x09, 0xbd, 0xdf, 0xe3, 0x76, 0x98, 0x04, 0x4d, 0x29, 0x7d, 0xdd, 0xd2, 0xbd, 0xa8, 0x32, 0x66, 0x45, 0x01, 0xff, 0xd7, 0xd0, 0x83, 0xfb, 0xec, 0xaa, 0xb7, 0x45, 0x34, 0xf4, 0xd8, 0xf1, 0x23, 0x0e, 0x15, 0x84, 0xde, 0x59, 0xe5, 0x2e, 0x06, 0xd6, 0xb8, 0x11, 0x1d, 0x59, 0xc9, 0x93, 0xea, 0x4e, 0x4b, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xe5, 0x35, 0x8b, 0x82, 0xc5, 0xf0, 0x10, 0x89, 0x6b, 0xe2, 0xdd, 0x60, 0x20, 0x5a, 0xd6, 0x17, 0x1e, 0x17, 0x2a, 0xb8, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xe5, 0x35, 0x8b, 0x82, 0xc5, 0xf0, 0x10, 0x89, 0x6b, 0xe2, 0xdd, 0x60, 0x20, 0x5a, 0xd6, 0x17, 0x1e, 0x17, 0x2a, 0xb8, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x8d, 0x9e, 0x39, 0xf2, 0xf8, 0x1f, 0xb3, 0x71, 0x2b, 0x2d, 0xcb, 0x22, 0xf7, 0x23, 0x88, 0xd4, 0x60, 0xee, 0xb1, 0xf7, 0xce, 0x39, 0x0d, 0xfd, 0xe5, 0x77, 0x5e, 0x69, 0xf1, 0x39, 0xc6, 0x4b, 0x16, 0x30, 0xc4, 0x95, 0x70, 0x29, 0x3b, 0x48, 0xe7, 0x6c, 0x33, 0x1d, 0x28, 0xa3, 0x87, 0x0e, 0xcf, 0xd3, 0x63, 0x1b, 0x1a, 0x51, 0x61, 0xa7, 0x4a, 0x30, 0x47, 0xbc, 0xbc, 0x10, 0xe0, 0x6e, 0x7b, 0x49, 0x2b, 0x77, 0xa8, 0x31, 0x0b, 0xfa, 0x64, 0xfe, 0x06, 0x6f, 0xab, 0x59, 0x70, 0x31, 0xcc, 0x94, 0x63, 0x3a, 0x9b, 0xea, 0x8b, 0xc2, 0xaa, 0x30, 0xed, 0xe0, 0x09, 0x7f, 0x16, 0x60, 0xf3, 0xc6, 0x5b, 0xcb, 0x7e, 0xed, 0xab, 0x54, 0x8d, 0x46, 0x1f, 0x29, 0xa3, 0xa7, 0x8c, 0xea, 0xb5, 0xed, 0xbe, 0x80, 0x00, 0x5f, 0x01, 0xbe, 0xa7, 0x92, 0x4f, 0x3b, 0xe5, 0xc8, 0x3c, 0x93, 0x41, 0xbf, 0x51, 0x1e, 0x09, 0x99, 0xbe, 0xb7, 0x65, 0x88, 0x93, 0x82, 0x26, 0x9b, 0x90, 0xc7, 0xb8, 0xea, 0x6b, 0x79, 0x0f, 0xf4, 0x5e, 0x1a, 0x8f, 0x77, 0xdd, 0xa6, 0x7a, 0x53, 0xd4, 0x9f, 0xb9, 0xab, 0x97, 0xdf, 0x40, 0xd8, 0x42, 0xfd, 0x1a, 0xa7, 0xa9, 0x90, 0x0c, 0x98, 0x7e, 0xb1, 0x5e, 0xff, 0xeb, 0xd6, 0xec, 0x65, 0xce, 0xd2, 0x4e, 0xd1, 0x71, 0x4b, 0xd5, 0xb8, 0x78, 0x64, 0xc2, 0x5f, 0xaf, 0x50, 0x20, 0xa6, 0xf0, 0xba, 0x62, 0xa3, 0xe5, 0x38, 0xa2, 0x9f, 0x17, 0xda, 0x65, 0xe6, 0x94, 0x1c, 0xa0, 0xc0, 0xf0, 0xf9, 0x5f, 0xeb, 0xdc, 0x05, 0x70, 0x73, 0x60, 0xa5, 0x54, 0x89, 0x22, 0x84, 0x93, 0x79, 0x27, 0xe6, 0xf6, 0x51, 0x72, 0x3e, 0x86, 0xd4, 0x7f, 0x0b, 0xb7, 0xed, 0xc4, 0x09, 0x0f, 0xac, 0xf5, 0x58, 0x88, 0x10, 0xee, 0x8a, 0xc2, 0xeb, 0x12, 0xe4, 0x31, 0x82, 0x01, 0xb6, 0x30, 0x82, 0x01, 0xb2, 0x02, 0x01, 0x01, 0x30, 0x20, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x74, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x65, 0x79, 0x02, 0x09, 0x00, 0xe2, 0x7d, 0x10, 0xea, 0xd8, 0x0d, 0x98, 0x77, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0xa0, 0x69, 0x30, 0x18, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0x30, 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x05, 0x31, 0x0f, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x30, 0x30, 0x38, 0x30, 0x35, 0x35, 0x32, 0x34, 0x34, 0x5a, 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22, 0x04, 0x20, 0x03, 0x19, 0x7f, 0xab, 0x44, 0x42, 0xb8, 0x28, 0x7f, 0x7d, 0x08, 0x1d, 0x7d, 0xe1, 0x79, 0x15, 0x72, 0x28, 0xa2, 0xd3, 0x52, 0xe1, 0x47, 0xbf, 0x4d, 0x24, 0xaf, 0xca, 0x62, 0x23, 0xf4, 0x1c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0x3d, 0x41, 0x71, 0xdb, 0x14, 0x04, 0x4b, 0x69, 0x96, 0xb4, 0xf1, 0x50, 0xa3, 0x22, 0x85, 0xcc, 0x6c, 0x0b, 0x6b, 0xe4, 0x12, 0x66, 0xd7, 0xd4, 0xd1, 0x03, 0x44, 0xfd, 0xef, 0x19, 0xaf, 0xcf, 0xe3, 0x1d, 0x45, 0x57, 0x9a, 0x40, 0xa9, 0x20, 0x89, 0x23, 0xfa, 0x64, 0xc2, 0x7b, 0x2a, 0x75, 0x86, 0xf9, 0x25, 0xf7, 0x38, 0x33, 0x88, 0x45, 0x4b, 0x9c, 0xce, 0x87, 0xe0, 0x9f, 0x32, 0x27, 0x90, 0x9a, 0xf7, 0x7f, 0x5e, 0xe5, 0x05, 0xc7, 0x3a, 0x0e, 0x9f, 0xb8, 0xd7, 0x57, 0x88, 0x1c, 0xe6, 0x9f, 0x36, 0x2e, 0x8b, 0x32, 0xc5, 0x91, 0x2f, 0x76, 0xed, 0x59, 0x8b, 0xa1, 0x51, 0x8d, 0x1e, 0x35, 0xed, 0x7e, 0x42, 0x0f, 0x5b, 0xd4, 0xf7, 0xf0, 0xb7, 0x7f, 0xaa, 0x16, 0x21, 0x76, 0xf3, 0xe9, 0xcd, 0xf4, 0x60, 0x49, 0xdc, 0xe2, 0x16, 0xb4, 0x4f, 0xb9, 0xd5, 0xda, 0x4e, 0x94, 0x9f, 0x17, 0xc3, 0xa6, 0x5c, 0x13, 0x68, 0x29, 0x91, 0x3c, 0xa7, 0xa6, 0xf5, 0xd9, 0xae, 0xed, 0x75, 0xa5, 0xfb, 0x2d, 0xc6, 0x25, 0x28, 0x89, 0x57, 0x02, 0xfd, 0x0e, 0x50, 0xcf, 0x94, 0x73, 0x26, 0xc9, 0x97, 0x06, 0x88, 0x7d, 0x65, 0x62, 0x4b, 0xd6, 0xd2, 0xa0, 0x5a, 0xe4, 0xcd, 0x22, 0x05, 0xfc, 0x18, 0x64, 0xcb, 0x98, 0x96, 0x0b, 0x78, 0x0c, 0xf2, 0xfb, 0xa0, 0x9d, 0x19, 0x17, 0x4a, 0xb4, 0x3f, 0x39, 0x5a, 0x55, 0xd0, 0x5b, 0xd9, 0x61, 0x33, 0x8d, 0x8e, 0x18, 0xc5, 0x19, 0x2b, 0xaa, 0xc9, 0xf3, 0xf1, 0x0e, 0x5f, 0x55, 0x15, 0x16, 0xdf, 0x99, 0x1b, 0xca, 0x18, 0xa5, 0x4e, 0xc8, 0x38, 0x05, 0xc1, 0xc9, 0x0b, 0xa7, 0xba, 0x38, 0x94, 0x58, 0xa9, 0x2c, 0xf4, 0x94, 0x1a, 0x8c, 0x88, 0xb9, 0x9c, 0xe6, 0x88, 0x13, 0x58, 0xd0, 0xcd, 0x2d, 0x84, 0x01, 0x63, 0xef }; #endif src/uefi/uefirtauthvar/uefirtauthvar.c000066400000000000000000000520431465205512700205360ustar00rootroot00000000000000/* * Copyright (C) 2014-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_UEFI) #include #include #include #include #include #include "fwts_uefi.h" #include "fwts_efi_runtime.h" #include "fwts_efi_module.h" #include "authvardefs.h" static int fd; #define TEST_GUID {0x7f5c5d52, 0x2f14, 0x4f12, {0x96, 0x7c, 0xdb, 0x60, 0xdb, 0x05, 0xa0, 0xfd} } #define TEST_GUID1 {0x0ef2aa27, 0x1e93, 0x4284, {0xa1, 0xf9, 0x34, 0xd5, 0x6c, 0x5c, 0xde, 0x84} } #define GETVAR_BUF_SIZE (100) #define E_AUTHVARCREATE (1) #define E_AUTHVARAPPEND (1 << 1) #define E_AUTHVARUPDATE (1 << 2) static uint8_t data_exist = 0; static EFI_GUID gtestguid = TEST_GUID; static const uint32_t attributes = FWTS_UEFI_VAR_NON_VOLATILE | FWTS_UEFI_VAR_BOOTSERVICE_ACCESS | FWTS_UEFI_VAR_RUNTIME_ACCESS | FWTS_UEFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS; static uint16_t variablenametest[] = {'A', 'u', 't', 'h', 'V', 'a', 'r', 'T', 'e', 's', 't', '\0'}; static uint32_t runtimeservicessupported; static long setvar( EFI_GUID *guid, uint32_t var_attributes, uint64_t datasize, void *data, uint64_t *status) { long ioret; struct efi_setvariable setvariable; setvariable.VariableName = variablenametest; setvariable.VendorGuid = guid; setvariable.Attributes = var_attributes; setvariable.DataSize = datasize; setvariable.Data = data; setvariable.status = status; *status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); return ioret; } static long getvar( EFI_GUID *guid, uint32_t *attributestest, uint64_t *getdatasize, void *data, uint64_t *status) { long ioret; struct efi_getvariable getvariable; getvariable.VariableName = variablenametest; getvariable.VendorGuid = guid; getvariable.Attributes = attributestest; getvariable.DataSize = getdatasize; getvariable.Data = data; getvariable.status = status; *status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_GET_VARIABLE, &getvariable); return ioret; } static void uefirtvariable_env_cleanup(void) { uint64_t status; uint8_t data[GETVAR_BUF_SIZE]; uint64_t getdatasize = sizeof(data); uint32_t attributestest; long ioret = getvar(>estguid, &attributestest, &getdatasize, data, &status); if (ioret != -1 && status == EFI_SUCCESS) { setvar(>estguid, attributes, sizeof(AuthVarDel), AuthVarDel, &status); setvar(>estguid, attributes, sizeof(AuthVarDelDiff), AuthVarDelDiff, &status); } return; } static int uefirtauthvar_init(fwts_framework *fw) { if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED) return FWTS_ABORTED; fwts_uefi_rt_support_status_get(fd, &runtimeservicessupported); if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) { fwts_skipped(fw, "Skipping test, SetVariable runtime service " "is not supported on this platform."); return FWTS_SKIP; } else if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_VARIABLE)) { fwts_skipped(fw, "Skipping test, GetVariable runtime service " "is not supported on this platform."); return FWTS_SKIP; } uefirtvariable_env_cleanup(); return FWTS_OK; } static int uefirtauthvar_deinit(fwts_framework *fw) { fwts_lib_efi_runtime_close(fd); fwts_lib_efi_runtime_unload_module(fw); return FWTS_OK; } static int check_fw_support(fwts_framework *fw, uint64_t status) { if ((status == EFI_INVALID_PARAMETER) && ((bool)(attributes & FWTS_UEFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS) || (bool)(attributes & FWTS_UEFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS) || (bool)(attributes & FWTS_UEFI_VARIABLE_APPEND_WRITE))) { fwts_uefi_print_status_info(fw, status); fwts_skipped(fw, "EFI_INVALID_PARAMETER shall be returned, " "when firmware doesn't support these operations " "with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS, " "EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS " "or EFI_VARIABLE_APPEND_WRITE attributes is set."); return FWTS_SKIP; } if (status == EFI_OUT_OF_RESOURCES) { fwts_uefi_print_status_info(fw, status); fwts_skipped(fw, "Run out of resources for SetVariable " "UEFI runtime interface: cannot test."); fwts_advice(fw, "Firmware may reclaim some resources " "after rebooting. Reboot and test " "again may be helpful to continue " "the test."); return FWTS_SKIP; } return FWTS_OK; } /* * Set the created authenticated variable, AuthVarCreate, * and checking the data size and data. * expect EFI_SUCCESS returned. */ static int uefirtauthvar_test1(fwts_framework *fw) { long ioret; uint8_t data[GETVAR_BUF_SIZE]; uint64_t getdatasize = sizeof(data); uint64_t status; uint32_t attributestest; size_t i; ioret = setvar(>estguid, attributes, sizeof(AuthVarCreate), AuthVarCreate, &status); if (ioret == -1) { int supcheck = check_fw_support(fw, status); if (supcheck != FWTS_OK) return supcheck; fwts_failed(fw, LOG_LEVEL_HIGH, "UEFICreateAuthVar", "Failed to create authenticated variable with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } ioret = getvar(>estguid, &attributestest, &getdatasize, data, &status); if (ioret == -1) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFICreateAuthVar", "Failed to get authenticated variable with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } if (getdatasize != sizeof(AuthVarCreateData)) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFICreateAuthVar", "Get authenticated variable data size is not the " "same as it set."); return FWTS_ERROR; } for (i = 0; i < sizeof(AuthVarCreateData); i++) { if (data[i] != AuthVarCreateData[i]) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFICreateAuthVar", "Get authenticated variable data are not the " "same as it set."); return FWTS_ERROR; } } data_exist |= E_AUTHVARCREATE; fwts_passed(fw, "Create authenticated variable test passed."); return FWTS_OK; } /* * With one existing variable, but set the same authenticated variable, * AuthVarCreate, expect EFI_SECURITY_VIOLATION returned. */ static int uefirtauthvar_test2(fwts_framework *fw) { long ioret; uint64_t status; if (!(data_exist & E_AUTHVARCREATE)) { fwts_skipped(fw,"The test variable, AuthVarCreate, doesn't exist, skip the test."); return FWTS_SKIP; } ioret = setvar(>estguid, attributes, sizeof(AuthVarCreate), AuthVarCreate, &status); if (ioret == -1) { int supcheck = check_fw_support(fw, status); if (supcheck != FWTS_OK) return supcheck; if (status == EFI_SECURITY_VIOLATION) { fwts_passed(fw, "Set the same authenticated variable test passed."); return FWTS_OK; } fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFISetSameAuthVar", "Set authenticated variable fail"); fwts_uefi_print_status_info(fw, status); } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFISetSameAuthVar", "Set authenticated variable expected fail but success"); return FWTS_ERROR; } /* * With one existing variable, but set authenticated variable which created by another valid key, * expect EFI_SECURITY_VIOLATION returned. */ static int uefirtauthvar_test3(fwts_framework *fw) { long ioret; uint64_t status; if (!(data_exist & E_AUTHVARCREATE)) { fwts_skipped(fw,"The test variable, AuthVarCreate, doesn't exist, skip the test."); return FWTS_SKIP; } ioret = setvar(>estguid, attributes, sizeof(AuthVarCreateDiff), AuthVarCreateDiff, &status); if (ioret == -1) { int supcheck = check_fw_support(fw, status); if (supcheck != FWTS_OK) return supcheck; if (status == EFI_SECURITY_VIOLATION) { fwts_passed(fw, "Authenticated variable test with another valid authenticated variable passed."); return FWTS_OK; } fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFISetDiffAuthVar", "Set different valid authenticated variable fail"); fwts_uefi_print_status_info(fw, status); } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFISetDiffAuthVar", "Set authenticated variable expected fail but success"); return FWTS_ERROR; } /* * Execute the normal append operation. */ static int uefirtauthvar_test4(fwts_framework *fw) { long ioret; uint8_t data[GETVAR_BUF_SIZE]; uint64_t getdatasize = sizeof(data); uint64_t status; uint32_t attributestest; size_t i; uint32_t attribappend = attributes | FWTS_UEFI_VARIABLE_APPEND_WRITE; if (!(data_exist & E_AUTHVARCREATE)) { fwts_skipped(fw,"The test variable, AuthVarCreate, doesn't exist, skip the test."); return FWTS_SKIP; } ioret = setvar(>estguid, attribappend, sizeof(AuthVarAppend), AuthVarAppend, &status); if (ioret == -1) { int supcheck = check_fw_support(fw, status); if (supcheck != FWTS_OK) return supcheck; fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIAppendAuthVar", "Failed to append authenticated variable with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } ioret = getvar(>estguid, &attributestest, &getdatasize, data, &status); if (ioret == -1) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIAppendAuthVar", "Failed to get authenticated variable with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } if (getdatasize != (sizeof(AuthVarCreateData) + sizeof(AuthVarAppendData))) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIAppendAuthVar", "Get total authenticated variable data size is not the " "same as it set and appended."); return FWTS_ERROR; } for (i = 0; i < getdatasize; i++) { if (i < sizeof(AuthVarCreateData)) { if (data[i] != AuthVarCreateData[i]) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIAppendAuthVar", "Get authenticated variable data are not the " "same as it set."); return FWTS_ERROR; } } else { if (data[i] != AuthVarAppendData[i - sizeof(AuthVarCreateData)]) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIAppendAuthVar", "Get authenticated variable data are not the " "same as it set."); return FWTS_ERROR; } } } data_exist |= E_AUTHVARAPPEND; fwts_passed(fw, "Append authenticated variable tests passed."); return FWTS_OK; } /* * Update the new authenticated variable by using the same key but a new * timestamp and data. */ static int uefirtauthvar_test5(fwts_framework *fw) { long ioret; uint8_t data[GETVAR_BUF_SIZE]; uint64_t getdatasize = sizeof(data); uint64_t status; uint32_t attributestest; size_t i; if (!(data_exist & E_AUTHVARAPPEND)) { fwts_skipped(fw,"The test data, AuthVarAppend, doesn't exist, skip the test."); return FWTS_SKIP; } ioret = setvar(>estguid, attributes, sizeof(AuthVarUpdate), AuthVarUpdate, &status); if (ioret == -1) { int supcheck = check_fw_support(fw, status); if (supcheck != FWTS_OK) return supcheck; fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIUpdateAuthVar", "Failed to update authenticated variable with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } ioret = getvar(>estguid, &attributestest, &getdatasize, data, &status); if (ioret == -1) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIUpdateAuthVar", "Failed to get authenticated variable with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } if (getdatasize != sizeof(AuthVarUpdateData)) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIUpdateAuthVar", "Get authenticated variable data size is not the " "same as it set."); return FWTS_ERROR; } for (i = 0; i < getdatasize; i++) { if (data[i] != AuthVarUpdateData[i]) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIUpdateAuthVar", "Get authenticated variable data are not the " "same as it set."); return FWTS_ERROR; } } data_exist |= E_AUTHVARUPDATE; fwts_passed(fw, "Update authenticated variable tests passed."); return FWTS_OK; } /* * After updated, set the old data and timestamp authenticated variable, * AuthVarCreate, expect EFI_SECURITY_VIOLATION returned. */ static int uefirtauthvar_test6(fwts_framework *fw) { long ioret; uint64_t status; if (!(data_exist & E_AUTHVARUPDATE)) { fwts_skipped(fw,"The test variable, AuthVarUpdate, doesn't exist, skip the test."); return FWTS_SKIP; } ioret = setvar(>estguid, attributes, sizeof(AuthVarCreate), AuthVarCreate, &status); if (ioret == -1) { int supcheck = check_fw_support(fw, status); if (supcheck != FWTS_OK) return supcheck; if (status == EFI_SECURITY_VIOLATION) { fwts_passed(fw, "Authenticated variable test with old authenticated variable passed."); return FWTS_OK; } fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFISetOldAuthVar", "Set authenticated variable fail"); fwts_uefi_print_status_info(fw, status); } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFISetOldAuthVar", "Set authenticated variable expected fail but success"); return FWTS_ERROR; } /* * Delete the test authenticated variable. */ static int uefirtauthvar_test7(fwts_framework *fw) { long ioret; uint8_t data[GETVAR_BUF_SIZE]; uint64_t getdatasize = sizeof(data); uint64_t status; uint32_t attributestest; if (!(data_exist & E_AUTHVARCREATE)) { fwts_skipped(fw,"The test data, AuthVarCreate, doesn't exist, skip the test."); return FWTS_SKIP; } ioret = setvar(>estguid, attributes, sizeof(AuthVarDel), AuthVarDel, &status); if (ioret == -1) { int supcheck = check_fw_support(fw, status); if (supcheck != FWTS_OK) return supcheck; fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIDelAuthVar", "Failed to delete authenticated variable with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } ioret = getvar(>estguid, &attributestest, &getdatasize, data, &status); if (ioret == -1) { if (status == EFI_NOT_FOUND) { fwts_passed(fw, "Delete authenticated variable tests passed."); return FWTS_OK; } fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIDelAuthVar", "Failed to get authenticated variable with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIDelAuthVar", "Failed to delete authenticated variable still get the test" "authenticated variable."); return FWTS_ERROR; } /* * Set the authenticated variable with invalid modified data, * expect EFI_SECURITY_VIOLATION returned. */ static int uefirtauthvar_test8(fwts_framework *fw) { long ioret; uint64_t status; ioret = setvar(>estguid, attributes, sizeof(AuthVarModData), AuthVarModData, &status); if (ioret == -1) { int supcheck = check_fw_support(fw, status); if (supcheck != FWTS_OK) return supcheck; if (status == EFI_SECURITY_VIOLATION) { fwts_passed(fw, "Set authenticated variable test with invalid modified data passed."); return FWTS_OK; } fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFISetAuthVarInvalidData", "Set authenticated variable fail"); fwts_uefi_print_status_info(fw, status); } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFISetAuthVarInvalidData", "Set authenticated variable expected fail but success"); return FWTS_ERROR; } /* * Set the authenticated variable with invalid modified timestamp, expect * EFI_SECURITY_VIOLATION returned. */ static int uefirtauthvar_test9(fwts_framework *fw) { long ioret; uint64_t status; ioret = setvar(>estguid, attributes, sizeof(AuthVarModTime), AuthVarModTime, &status); if (ioret == -1) { int supcheck = check_fw_support(fw, status); if (supcheck != FWTS_OK) return supcheck; if (status == EFI_SECURITY_VIOLATION) { fwts_passed(fw, "Set authenticated variable test with invalid modified timestamp passed."); return FWTS_OK; } fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFISetAuthVarInvalidTime", "Set authenticated variable fail"); fwts_uefi_print_status_info(fw, status); } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFISetAuthVarInvalidTime", "Set authenticated variable expected fail but success"); return FWTS_ERROR; } /* * Set the authenticated variable with different guid, expect * EFI_SECURITY_VIOLATION returned. */ static int uefirtauthvar_test10(fwts_framework *fw) { long ioret; uint64_t status; EFI_GUID gtestguiddiff = TEST_GUID1; ioret = setvar(>estguiddiff, attributes, sizeof(AuthVarCreate), AuthVarCreate, &status); if (ioret == -1) { int supcheck = check_fw_support(fw, status); if (supcheck != FWTS_OK) return supcheck; if (status == EFI_SECURITY_VIOLATION) { fwts_passed(fw, "Set authenticated variable test with different guid passed."); return FWTS_OK; } fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFISetAuthVarDiffGuid", "Set authenticated variable fail"); fwts_uefi_print_status_info(fw, status); } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFISetAuthVarDiffGuid", "Set authenticated variable expected fail but success"); return FWTS_ERROR; } /* * Test with setting and deleting another authenticated variable, * after previous test authenticated variable was deleted. */ static int uefirtauthvar_test11(fwts_framework *fw) { long ioret; uint8_t data[GETVAR_BUF_SIZE]; uint64_t getdatasize = sizeof(data); uint64_t status; uint32_t attributestest; size_t i; ioret = setvar(>estguid, attributes, sizeof(AuthVarCreateDiff), AuthVarCreateDiff, &status); if (ioret == -1) { int supcheck = check_fw_support(fw, status); if (supcheck != FWTS_OK) return supcheck; fwts_failed(fw, LOG_LEVEL_HIGH, "UEFISetAuthVarDiff", "Failed to set authenticated variable with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } ioret = getvar(>estguid, &attributestest, &getdatasize, data, &status); if (ioret == -1) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFISetAuthVarDiff", "Failed to get authenticated variable with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } if (getdatasize != sizeof(AuthVarCreateData)) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFISetAuthVarDiff", "Get authenticated variable data size is not the " "same as it set."); return FWTS_ERROR; } for (i = 0; i < sizeof(AuthVarCreateData); i++) { if (data[i] != AuthVarCreateData[i]) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFISetAuthVarDiff", "Get authenticated variable data are not the " "same as it set."); return FWTS_ERROR; } } fwts_passed(fw, "Set authenticated variable created by different key test passed."); ioret = setvar(>estguid, attributes, sizeof(AuthVarDelDiff), AuthVarDelDiff, &status); if (ioret == -1) { int supcheck = check_fw_support(fw, status); if (supcheck != FWTS_OK) return supcheck; fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIDelAuthVarDiff", "Failed to delete authenticated variable with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } ioret = getvar(>estguid, &attributestest, &getdatasize, data, &status); if (ioret == -1) { if (status == EFI_NOT_FOUND) { fwts_passed(fw, "Delete authenticated variable created by different key test passed."); return FWTS_OK; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIDelAuthVarDiff", "Failed to get authenticated variable with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIDelAuthVarDiff", "Failed to delete authenticated variable still get the test" "authenticated variable."); return FWTS_ERROR; } static fwts_framework_minor_test uefirtauthvar_tests[] = { { uefirtauthvar_test1, "Create authenticated variable test." }, { uefirtauthvar_test2, "Authenticated variable test with the same authenticated variable." }, { uefirtauthvar_test3, "Authenticated variable test with another valid authenticated variable." }, { uefirtauthvar_test4, "Append authenticated variable test." }, { uefirtauthvar_test5, "Update authenticated variable test." }, { uefirtauthvar_test6, "Authenticated variable test with old authenticated variable." }, { uefirtauthvar_test7, "Delete authenticated variable test." }, { uefirtauthvar_test8, "Authenticated variable test with invalid modified data." }, { uefirtauthvar_test9, "Authenticated variable test with invalid modified timestamp." }, { uefirtauthvar_test10, "Authenticated variable test with different guid." }, { uefirtauthvar_test11, "Set and delete authenticated variable created by different key test." }, { NULL, NULL } }; static fwts_framework_ops uefirtauthvar_ops = { .description = "Authenticated variable tests.", .init = uefirtauthvar_init, .deinit = uefirtauthvar_deinit, .minor_tests = uefirtauthvar_tests, }; FWTS_REGISTER("uefirtauthvar", &uefirtauthvar_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UEFI | FWTS_FLAG_UNSAFE | FWTS_FLAG_ROOT_PRIV) #endif src/uefi/uefirtmisc/000077500000000000000000000000001465205512700147565ustar00rootroot00000000000000src/uefi/uefirtmisc/uefirtmisc.c000066400000000000000000000314011465205512700172730ustar00rootroot00000000000000/* * Copyright (C) 2013-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_UEFI) #include #include #include #include #include #include "fwts_uefi.h" #include "fwts_efi_runtime.h" #include "fwts_efi_module.h" #define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000 #define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000 #define CAPSULE_FLAGS_INITIATE_RESET 0x00040000 static uint32_t uefi_get_mn_count_multiple = 50; #define UEFI_GET_NEXT_HIGH_MN_COUNT_MULTIPLE_MAX (10000) #define EFI_CAPSULE_GUID \ { \ 0x3B6686BD, 0x0D76, 0x4030, {0xB7, 0x0E, 0xB5, \ 0x51, 0x9E, 0x2F, 0xC5, 0xA0} \ } static int fd; static EFI_GUID gEfiCapsuleHeaderGuid = EFI_CAPSULE_GUID; static uint32_t runtimeservicessupported; static int uefirtmisc_init(fwts_framework *fw) { if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED) return FWTS_ABORTED; fwts_uefi_rt_support_status_get(fd, &runtimeservicessupported); return FWTS_OK; } static int uefirtmisc_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_lib_efi_runtime_close(fd); fwts_lib_efi_runtime_unload_module(fw); return FWTS_OK; } static int getnexthighmonotoniccount_test(fwts_framework *fw, uint32_t multitesttime) { uint64_t status; struct efi_getnexthighmonotoniccount getnexthighmonotoniccount; uint32_t highcount; uint32_t i; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_HIGH_MONOTONIC_COUNT)) { fwts_skipped(fw, "Skipping test, GetNextHighMonotonicCount " "runtime service is not supported on this platform."); return FWTS_SKIP; } getnexthighmonotoniccount.HighCount = &highcount; getnexthighmonotoniccount.status = &status; for (i = 0; i < multitesttime; i++) { status = ~0ULL; long ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTHIGHMONOTONICCOUNT, &getnexthighmonotoniccount); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetNextHighMonotonicCount runtime " "service is not supported on this platform."); return FWTS_SKIP; } if (status == EFI_OUT_OF_RESOURCES) { fwts_skipped(fw, "Skipping test, run out of resources for " "GetNextHighMonotonicCount runtime service test."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextHighMonotonicCount", "Failed to get high monotonic count with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } } return FWTS_OK; } static int querycapsulecapabilities_test(fwts_framework *fw, uint32_t multitesttime, uint32_t flag) { uint64_t status; uint32_t i; struct efi_querycapsulecapabilities querycapsulecapabilities; EFI_RESET_TYPE resettype; EFI_CAPSULE_HEADER *pcapsuleheaderarray[2]; EFI_CAPSULE_HEADER capsuleheader; uint64_t maxcapsulesize; uint64_t capsulecount; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_QUERY_CAPSULE_CAPABILITIES)) { fwts_skipped(fw, "Skipping test, QueryCapsuleCapabilities " "runtime service is not supported on this platform."); return FWTS_SKIP; } memset(&capsuleheader, 0, sizeof(capsuleheader)); pcapsuleheaderarray[0] = &capsuleheader; pcapsuleheaderarray[1] = NULL; pcapsuleheaderarray[0]->CapsuleGuid = gEfiCapsuleHeaderGuid; pcapsuleheaderarray[0]->CapsuleImageSize = sizeof(EFI_CAPSULE_HEADER); pcapsuleheaderarray[0]->HeaderSize = sizeof(EFI_CAPSULE_HEADER); pcapsuleheaderarray[0]->Flags = flag; querycapsulecapabilities.status = &status; querycapsulecapabilities.CapsuleHeaderArray = pcapsuleheaderarray; capsulecount = 1; querycapsulecapabilities.CapsuleCount = capsulecount; querycapsulecapabilities.MaximumCapsuleSize = &maxcapsulesize; querycapsulecapabilities.ResetType = &resettype; for (i = 0; i < multitesttime; i++) { status = ~0ULL; long ioret = ioctl(fd, EFI_RUNTIME_QUERY_CAPSULECAPABILITIES, &querycapsulecapabilities); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Not support the UEFI QueryCapsuleCapabilities runtime interface" " with flag value 0x%" PRIx32 ": cannot test.", flag); fwts_advice(fw, "Firmware also needs to check if the revision of system table is correct or not." " Linux kernel returns EFI_UNSUPPORTED as well, if the FirmwareRevision" " of system table is less than EFI_2_00_SYSTEM_TABLE_REVISION."); return FWTS_SKIP; } else { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeQueryCapsuleCapabilities", "Failed to query capsule capabilities with UEFI runtime service" " with flag value 0x%" PRIx32 ".", flag); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } } } return FWTS_OK; } static int uefirtmisc_test1(fwts_framework *fw) { int ret; uint32_t multitesttime = 1; uint32_t i; static const uint32_t flag[] = { 0, CAPSULE_FLAGS_PERSIST_ACROSS_RESET, CAPSULE_FLAGS_PERSIST_ACROSS_RESET | CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE, CAPSULE_FLAGS_PERSIST_ACROSS_RESET | CAPSULE_FLAGS_INITIATE_RESET, CAPSULE_FLAGS_PERSIST_ACROSS_RESET | CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE | CAPSULE_FLAGS_INITIATE_RESET }; fwts_log_info(fw, "Testing UEFI runtime service GetNextHighMonotonicCount interface."); ret = getnexthighmonotoniccount_test(fw, multitesttime); if (ret == FWTS_OK) fwts_passed(fw, "UEFI runtime service GetNextHighMonotonicCount" " interface test passed."); fwts_log_info(fw, "Testing UEFI runtime service QueryCapsuleCapabilities interface."); for (i = 0; i < (sizeof(flag)/(sizeof flag[0])); i++) { ret = querycapsulecapabilities_test(fw, multitesttime, flag[i]); if (ret == FWTS_SKIP) continue; if (ret != FWTS_OK) return ret; fwts_passed(fw, "UEFI runtime service QueryCapsuleCapabilities" " interface test with flag value 0x%"PRIx32 " passed.", flag[i]); } return ret; } static int uefirtmisc_test2(fwts_framework *fw) { int ret; uint32_t multitesttime = uefi_get_mn_count_multiple; uint32_t i; static const uint32_t flag[] = { 0, CAPSULE_FLAGS_PERSIST_ACROSS_RESET, CAPSULE_FLAGS_PERSIST_ACROSS_RESET | CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE, CAPSULE_FLAGS_PERSIST_ACROSS_RESET | CAPSULE_FLAGS_INITIATE_RESET, CAPSULE_FLAGS_PERSIST_ACROSS_RESET | CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE | CAPSULE_FLAGS_INITIATE_RESET }; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_HIGH_MONOTONIC_COUNT)) { fwts_skipped(fw, "Skipping test, GetNextHighMonotonicCount " "runtime service is not supported on this platform."); return FWTS_SKIP; } fwts_log_info(fw, "Stress testing for UEFI runtime service " "GetNextHighMonotonicCount interface %" PRIu32 " times.", multitesttime); ret = getnexthighmonotoniccount_test(fw, multitesttime); if (ret == FWTS_OK) fwts_passed(fw, "UEFI runtime service GetNextHighMonotonicCount" " interface test passed."); if (!(runtimeservicessupported & EFI_RT_SUPPORTED_QUERY_CAPSULE_CAPABILITIES)) { fwts_skipped(fw, "Skipping test, QueryCapsuleCapabilities " "runtime service is not supported on this platform."); return FWTS_SKIP; } fwts_log_info(fw, "Stress testing UEFI runtime service QueryCapsuleCapabilities interface."); for (i = 0; i < (sizeof(flag)/(sizeof flag[0])); i++) { ret = querycapsulecapabilities_test(fw, multitesttime, flag[i]); if (ret == FWTS_SKIP) continue; if (ret != FWTS_OK) return ret; fwts_passed(fw, "UEFI runtime service QueryCapsuleCapabilities" " interface test with flag value 0x%"PRIx32 " passed.", flag[i]); } return ret; } static int uefirtmisc_test3(fwts_framework *fw) { uint64_t status = ~0ULL; long ioret; struct efi_getnexthighmonotoniccount getnexthighmonotoniccount; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_HIGH_MONOTONIC_COUNT)) { fwts_skipped(fw, "Skipping test, GetNextHighMonotonicCount " "runtime service is not supported on this platform."); return FWTS_SKIP; } getnexthighmonotoniccount.HighCount = NULL; getnexthighmonotoniccount.status = &status; ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTHIGHMONOTONICCOUNT, &getnexthighmonotoniccount); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetNextHighMonotonicCount runtime " "service is not supported on this platform."); return FWTS_SKIP; } if (status == EFI_INVALID_PARAMETER) { fwts_passed(fw, "Test with invalid NULL parameter returned " "EFI_INVALID_PARAMETER as expected."); return FWTS_OK; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextHighMonotonicCountInvalid", "Failed to get correct return status from UEFI runtime service, expecting EFI_INVALID_PARAMETER."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextHighMonotonicCountInvalid", "Failed to get error return status from UEFI runtime service, expected EFI_INAVLID_PARAMETER."); return FWTS_ERROR; } static int uefirtmisc_test4(fwts_framework *fw) { if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_HIGH_MONOTONIC_COUNT)) { long ioret; uint64_t status; struct efi_getnexthighmonotoniccount getnexthighmonotoniccount; uint32_t highcount; getnexthighmonotoniccount.HighCount = &highcount; getnexthighmonotoniccount.status = &status; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTHIGHMONOTONICCOUNT, &getnexthighmonotoniccount); if (ioret == -1) { if (status == EFI_UNSUPPORTED) fwts_passed(fw, "UEFI GetNextHighMonotonicCount runtime " "service unsupported status test passed."); else { if (status == ~0ULL) { fwts_skipped(fw, "Unknown error occurred, skip test."); return FWTS_SKIP; } else { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextHighMonotonicCount", "Get the GetNextHighMonotonicCount runtime " "service unsupported via RuntimeServicesSupported " "mask. But actually is supported by firmware."); return FWTS_ERROR; } } } else { if (status != EFI_SUCCESS ) { fwts_skipped(fw, "Unknown error occurred, skip test."); return FWTS_SKIP; } else { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextHighMonotonicCount", "Get the GetNextHighMonotonicCount runtime " "service unsupported via RuntimeServicesSupported " "mask. But actually is supported by firmware."); return FWTS_ERROR; } } } else { fwts_skipped(fw, "GetNextHighMonotonicCount runtime service supported, skip test."); return FWTS_SKIP; } return FWTS_OK; } static int options_check(fwts_framework *fw) { FWTS_UNUSED(fw); if ((uefi_get_mn_count_multiple < 1) || (uefi_get_mn_count_multiple > UEFI_GET_NEXT_HIGH_MN_COUNT_MULTIPLE_MAX)) { fprintf(stderr, "uefi_get_mn_count_multiple is %" PRIu32 ", it should be 1..%" PRIu32 "\n", uefi_get_mn_count_multiple, UEFI_GET_NEXT_HIGH_MN_COUNT_MULTIPLE_MAX); return FWTS_ERROR; } return FWTS_OK; } static int options_handler( fwts_framework *fw, int argc, char * const argv[], int option_char, int long_index) { FWTS_UNUSED(fw); FWTS_UNUSED(argc); FWTS_UNUSED(argv); if (option_char == 0) { switch (long_index) { case 0: /* --uefi_get_mn_count_multiple */ uefi_get_mn_count_multiple = strtoul(optarg, NULL, 10); break; } } return FWTS_OK; } static fwts_option options[] = { { "uefi-get-mn-count-multiple", "", 1, "Run uefirtmisc getnexthighmonotoniccount test multiple times." }, { NULL, NULL, 0, NULL } }; static fwts_framework_minor_test uefirtmisc_tests[] = { { uefirtmisc_test1, "Test for UEFI miscellaneous runtime service interfaces." }, { uefirtmisc_test2, "Stress test for UEFI miscellaneous runtime service interfaces." }, { uefirtmisc_test3, "Test GetNextHighMonotonicCount with invalid NULL parameter." }, { uefirtmisc_test4, "Test UEFI miscellaneous runtime services unsupported status." }, { NULL, NULL } }; static fwts_framework_ops uefirtmisc_ops = { .description = "UEFI miscellaneous runtime service interface tests.", .init = uefirtmisc_init, .deinit = uefirtmisc_deinit, .minor_tests = uefirtmisc_tests, .options = options, .options_handler = options_handler, .options_check = options_check }; FWTS_REGISTER("uefirtmisc", &uefirtmisc_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UEFI | FWTS_FLAG_UNSAFE | FWTS_FLAG_ROOT_PRIV | FWTS_FLAG_XBBR) #endif src/uefi/uefirttime/000077500000000000000000000000001465205512700147615ustar00rootroot00000000000000src/uefi/uefirttime/uefirttime.c000066400000000000000000001223511465205512700173060ustar00rootroot00000000000000/* * Copyright (C) 2012-2024 Canonical * Copyright (c) 2021, ARM Limited. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_UEFI) #include #include #include #include #include #include "fwts_uefi.h" #include "fwts_efi_runtime.h" #include "fwts_efi_module.h" #define UEFI_IGNORE_UNSET_BITS (0) #define IS_LEAP(year) \ ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) static int fd; static const uint32_t dayofmonth[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; static uint32_t runtimeservicessupported; static bool dayvalid(EFI_TIME *Time) { if (Time->Day < 1) return false; if (Time->Day > dayofmonth[Time->Month - 1]) return false; /* check month 2 */ if (Time->Month == 2 && (!IS_LEAP(Time->Year) && Time->Day > 28)) return false; return true; } static bool checktimefields(fwts_framework *fw, EFI_TIME *Time) { if (Time->Year < 1900 || Time->Year > 9999) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeTimeFieldBadYear", "Time returned an invalid year %" PRIu16 ", should be between 1900 and 9999.", Time->Year); return false; } if (Time->Month < 1 || Time->Month > 12) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeTimeFieldBadMonth", "Time returned an invalid month %" PRIu8 ", should be between 1 and 12.", Time->Month); return false; } if (!dayvalid(Time)) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeTimeFieldBadDay", "Time returned an invalid day %" PRIu8 ", should be between 1 and 28-31 depends on month/year.", Time->Day); return false; } if (Time->Hour > 23) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeTimeFieldBadHour", "Time returned an invalid hour %" PRIu8 ", should be between 0 and 23.", Time->Hour); return false; } if (Time->Minute > 59) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeTimeFieldBadMinute", "Time returned an invalid minute %" PRIu8 ", should be between 0 and 59.", Time->Minute); return false; } if (Time->Second > 59) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeTimeFieldBadSecond", "Time returned an invalid second %" PRIu8 ", should be between 0 and 59.", Time->Second); return false; } if (Time->Nanosecond > 999999999) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeTimeFieldBadNanosecond", "Time returned an invalid nanosecond %" PRIu32 ", should be between 0 and 999999999.", Time->Nanosecond); return false; } if (!(Time->TimeZone == FWTS_UEFI_UNSPECIFIED_TIMEZONE || (Time->TimeZone >= -1440 && Time->TimeZone <= 1440))) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeTimeFieldBadTimezone", "Time returned an invalid timezone %" PRId16 ", should be between -1440 and 1440 or 2047.", Time->TimeZone); return false; } if (Time->Daylight & (~(FWTS_UEFI_TIME_ADJUST_DAYLIGHT | FWTS_UEFI_TIME_IN_DAYLIGHT))) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeTimeFieldBadDaylight", "Time returned an invalid daylight %" PRIu8 ", all other bits except UEFI_TIME_IN_DAYLIGHT and " "UEFI_TIME_ADJUST_DAYLIGHT must be zero.", Time->Daylight); return false; } return true; } static void addonehour(EFI_TIME *time) { if (time->Hour != 23) { time->Hour += 1; return; } time->Hour = 0; if ((time->Day != dayofmonth[time->Month - 1]) && (!(time->Month == 2 && (!IS_LEAP(time->Year) && time->Day == 28)))) { time->Day += 1; return; } time->Day = 1; if (time->Month != 12) { time->Month += 1; return; } time->Month = 1; time->Year += 1; return; } static int uefirttime_init(fwts_framework *fw) { if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED) return FWTS_ABORTED; fwts_uefi_rt_support_status_get(fd, &runtimeservicessupported); return FWTS_OK; } static int uefirttime_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); fwts_lib_efi_runtime_close(fd); fwts_lib_efi_runtime_unload_module(fw); return FWTS_OK; } static int uefirttime_test1(fwts_framework *fw) { long ioret; struct efi_gettime gettime; EFI_TIME efi_time; EFI_TIME_CAPABILITIES efi_time_cap; uint64_t status = ~0ULL; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_TIME)) { fwts_skipped(fw, "Skipping test, GetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } gettime.Capabilities = &efi_time_cap; gettime.Time = &efi_time; gettime.status = &status; ioret = ioctl(fd, EFI_RUNTIME_GET_TIME, &gettime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetTime", "Failed to get time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } if (!checktimefields(fw, gettime.Time)) return FWTS_ERROR; fwts_passed(fw, "UEFI runtime service GetTime interface test passed."); return FWTS_OK; } static int uefirttime_test_gettime_invalid( fwts_framework *fw, EFI_TIME *efi_time, EFI_TIME_CAPABILITIES *efi_time_cap) { long ioret; struct efi_gettime gettime; uint64_t status = ~0ULL; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_TIME)) { fwts_skipped(fw, "Skipping test, GetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } gettime.Capabilities = efi_time_cap; gettime.Time = efi_time; gettime.status = &status; ioret = ioctl(fd, EFI_RUNTIME_GET_TIME, &gettime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } if (status == EFI_INVALID_PARAMETER) { fwts_passed(fw, "UEFI runtime service GetTime interface test " "passed, returned EFI_INVALID_PARAMETER as expected."); return FWTS_OK; } else { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetTime", "Failed to get correct return status from UEFI runtime service, expecting EFI_INVALID_PARAMETER."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetTime", "Failed to get error return status from UEFI runtime service, expected EFI_INAVLID_PARAMETER."); return FWTS_ERROR; } static int uefirttime_test2(fwts_framework *fw) { EFI_TIME_CAPABILITIES efi_time_cap; return uefirttime_test_gettime_invalid(fw, NULL, &efi_time_cap); } static int uefirttime_test3(fwts_framework *fw) { return uefirttime_test_gettime_invalid(fw, NULL, NULL); } static int uefirttime_test4(fwts_framework *fw) { long ioret; struct efi_settime settime; uint64_t status = ~0ULL; struct efi_gettime gettime; EFI_TIME oldtime; EFI_TIME newtime; EFI_TIME time; EFI_TIME_CAPABILITIES efi_time_cap; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_TIME)) { fwts_skipped(fw, "Skipping test, GetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } gettime.Capabilities = &efi_time_cap; gettime.Time = &oldtime; gettime.status = &status; ioret = ioctl(fd, EFI_RUNTIME_GET_TIME, &gettime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetTime", "Failed to get time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } /* refer to UEFI SCT 2.3 test items */ /* change year */ time = oldtime; if (time.Year != 2012) time.Year = 2012; else time.Year = 2016; /* change month */ if (time.Month != 1) time.Month = 1; else time.Month = 12; /* Change daylight */ if (time.Daylight & FWTS_UEFI_TIME_ADJUST_DAYLIGHT) time.Daylight &= ~FWTS_UEFI_TIME_ADJUST_DAYLIGHT; else time.Daylight |= FWTS_UEFI_TIME_ADJUST_DAYLIGHT; /* Change time zone */ if (time.TimeZone != 0) time.TimeZone = 0; else /* Unspecified timezone, local time */ time.TimeZone = 2047; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_TIME)) { fwts_skipped(fw, "Skipping test, SetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } settime.Time = &time; status = ~0ULL; settime.status = &status; ioret = ioctl(fd, EFI_RUNTIME_SET_TIME, &settime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, SetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetTime", "Failed to set time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } sleep(1); gettime.Time = &newtime; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_GET_TIME, &gettime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetTime", "Failed to get time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } if (!((oldtime.Year == 2012) && (newtime.Year == 2016)) && !((oldtime.Year != 2012) && (newtime.Year == 2012))) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetTimeYear", "Failed to set year with UEFI runtime service."); return FWTS_ERROR; } if (!((oldtime.Month == 1) && (newtime.Month == 12)) && !((oldtime.Month != 1) && (newtime.Month == 1))) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetTimeMonth", "Failed to set month with UEFI runtime service."); return FWTS_ERROR; } if (!((oldtime.Daylight & FWTS_UEFI_TIME_ADJUST_DAYLIGHT) && (!(newtime.Daylight & FWTS_UEFI_TIME_ADJUST_DAYLIGHT))) && !((!(oldtime.Daylight & FWTS_UEFI_TIME_ADJUST_DAYLIGHT)) && (newtime.Daylight & FWTS_UEFI_TIME_ADJUST_DAYLIGHT))) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetTimeDaylight", "Failed to set daylight with UEFI runtime service."); return FWTS_ERROR; } if (!((oldtime.TimeZone == 0) && (newtime.TimeZone == 2047)) && !((oldtime.TimeZone != 0) && (newtime.TimeZone == 0))) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetTimeTimezone", "Failed to set timezone with UEFI runtime service."); fwts_advice(fw, "Some system firmware may not support the timezone " "value EFI_UNSPECIFIED_TIMEZONE(2047) and set the " "value 0 directly instead of returning an error which " "causes the failure."); return FWTS_ERROR; } /* restore the previous time. */ settime.Time = &oldtime; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_SET_TIME, &settime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, SetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetTime", "Failed to set time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } fwts_passed(fw, "UEFI runtime service SetTime interface test passed."); return FWTS_OK; } static int uefirttime_test_settime_invalid( fwts_framework *fw, struct efi_settime *settime) { long ioret; static uint64_t status; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_TIME)) { fwts_skipped(fw, "Skipping test, SetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } status = ~0ULL; settime->status = &status; ioret = ioctl(fd, EFI_RUNTIME_SET_TIME, settime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, SetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } if (status == EFI_INVALID_PARAMETER) { fwts_passed(fw, "UEFI runtime service SetTime interface test " "passed, returned EFI_INVALID_PARAMETER as expected."); return FWTS_OK; } else { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetTime", "Failed to get correct return status from UEFI runtime service, expecting EFI_INVALID_PARAMETER."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetTime", "Failed to get error return status from UEFI runtime service, expected EFI_INVALID_PARAMETER."); return FWTS_ERROR; } static int uefirttime_test_settime_invalid_time( fwts_framework *fw, EFI_TIME *time) { struct efi_gettime gettime; struct efi_settime settime; EFI_TIME oldtime, newtime; uint64_t status = ~0ULL; int ret, ioret; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_TIME)) { fwts_skipped(fw, "Skipping test, GetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } gettime.Time = &oldtime; gettime.status = &status; gettime.Capabilities = NULL; ioret = ioctl(fd, EFI_RUNTIME_GET_TIME, &gettime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetTime", "Failed to get time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } memcpy(&newtime, &oldtime, sizeof(EFI_TIME)); if (time->Year != 0xffff) newtime.Year = time->Year; if (time->Month != 0xff) newtime.Month = time->Month; if (time->Day != 0xff) newtime.Day = time->Day; if (time->Hour != 0xff) newtime.Hour = time->Hour; if (time->Minute != 0xff) newtime.Minute = time->Minute; if (time->Second != 0xff) newtime.Second = time->Second; if (time->Nanosecond != 0xffffffff) newtime.Nanosecond = time->Nanosecond; if ((uint16_t)time->TimeZone != 0xffff) newtime.TimeZone = time->TimeZone; settime.Time = &newtime; settime.status = &status; ret = uefirttime_test_settime_invalid(fw, &settime); if (ret == FWTS_SKIP) return ret; /* Restore original time */ settime.Time = &oldtime; status = ~0ULL; settime.status = &status; ioret = ioctl(fd, EFI_RUNTIME_SET_TIME, &settime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, SetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetTime", "Failed to set time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } return ret; } static int uefirttime_test5(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Year = 1899; return uefirttime_test_settime_invalid_time(fw, &time); } static int uefirttime_test6(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Year = 10000; return uefirttime_test_settime_invalid_time(fw, &time); } static int uefirttime_test7(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Month = 0; return uefirttime_test_settime_invalid_time(fw, &time); } static int uefirttime_test8(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Month = 13; return uefirttime_test_settime_invalid_time(fw, &time); } static int uefirttime_test9(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Day = 0; return uefirttime_test_settime_invalid_time(fw, &time); } static int uefirttime_test10(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Day = 32; return uefirttime_test_settime_invalid_time(fw, &time); } static int uefirttime_test11(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Hour = 24; return uefirttime_test_settime_invalid_time(fw, &time); } static int uefirttime_test12(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Minute = 60; return uefirttime_test_settime_invalid_time(fw, &time); } static int uefirttime_test13(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Second = 60; return uefirttime_test_settime_invalid_time(fw, &time); } static int uefirttime_test14(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Nanosecond = 1000000000; return uefirttime_test_settime_invalid_time(fw, &time); } static int uefirttime_test15(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.TimeZone = -1441; return uefirttime_test_settime_invalid_time(fw, &time); } static int uefirttime_test16(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.TimeZone = 1441; return uefirttime_test_settime_invalid_time(fw, &time); } #if UEFI_IGNORE_UNSET_BITS /* * The UEFI spec states that just two bits are allowed, and all other bits * must be zero, but I have yet to find a compliant implementation that * flags up an invalid parameter if the bits are non zero. It seems that * implementations just examine the bits they expect and don't care. For * now, we will ignore this test */ static int uefirttime_test17(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); /* Section 7.3, Daylight states all other bits must be zero */ time.Daylight = ~(FWTS_UEFI_TIME_ADJUST_DAYLIGHT | FWTS_UEFI_TIME_IN_DAYLIGHT); return uefirttime_test_settime_invalid_time(fw, &time); } #endif static int uefirttime_test18(fwts_framework *fw) { long ioret; struct efi_getwakeuptime getwakeuptime; uint64_t status = ~0ULL; uint8_t enabled, pending; EFI_TIME efi_time; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_WAKEUP_TIME)) { fwts_skipped(fw, "Skipping test, GetWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } getwakeuptime.Enabled = &enabled; getwakeuptime.Pending = &pending; getwakeuptime.Time = &efi_time; getwakeuptime.status = &status; ioret = ioctl(fd, EFI_RUNTIME_GET_WAKETIME, &getwakeuptime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetWakeupTime", "Failed to get wakeup time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } if (!checktimefields(fw, getwakeuptime.Time)) return FWTS_ERROR; fwts_passed(fw, "UEFI runtime service GetWakeupTime interface test passed."); return FWTS_OK; } static int uefirttime_test_getwaketime_invalid( fwts_framework *fw, struct efi_getwakeuptime *getwakeuptime) { long ioret; static uint64_t status; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_WAKEUP_TIME)) { fwts_skipped(fw, "Skipping test, GetWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } status = ~0ULL; getwakeuptime->status = &status; ioret = ioctl(fd, EFI_RUNTIME_GET_WAKETIME, getwakeuptime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetTimeWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } if (status == EFI_INVALID_PARAMETER) { fwts_passed(fw, "UEFI runtime service GetTimeWakeupTime interface test " "passed, returned EFI_INVALID_PARAMETER as expected."); return FWTS_OK; } else { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetWakeupTime", "Failed to get correct return status from UEFI " "runtime service, expecting EFI_INVALID_PARAMETER."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetWakeupTime", "Failed to get error return status from UEFI runtime service, expected EFI_INVALID_PARAMETER."); return FWTS_ERROR; } static int uefirttime_test19(fwts_framework *fw) { struct efi_getwakeuptime getwakeuptime; EFI_TIME efi_time; uint8_t pending; getwakeuptime.Enabled = NULL; getwakeuptime.Pending = &pending; getwakeuptime.Time = &efi_time; return uefirttime_test_getwaketime_invalid(fw, &getwakeuptime); } static int uefirttime_test20(fwts_framework *fw) { struct efi_getwakeuptime getwakeuptime; EFI_TIME efi_time; uint8_t enabled; getwakeuptime.Enabled = &enabled; getwakeuptime.Pending = NULL; getwakeuptime.Time = &efi_time; return uefirttime_test_getwaketime_invalid(fw, &getwakeuptime); } static int uefirttime_test21(fwts_framework *fw) { struct efi_getwakeuptime getwakeuptime; uint8_t enabled, pending; getwakeuptime.Enabled = &enabled; getwakeuptime.Pending = &pending; getwakeuptime.Time = NULL; return uefirttime_test_getwaketime_invalid(fw, &getwakeuptime); } static int uefirttime_test22(fwts_framework *fw) { struct efi_getwakeuptime getwakeuptime; getwakeuptime.Enabled = NULL; getwakeuptime.Pending = NULL; getwakeuptime.Time = NULL; return uefirttime_test_getwaketime_invalid(fw, &getwakeuptime); } static int uefirttime_test23(fwts_framework *fw) { long ioret; struct efi_setwakeuptime setwakeuptime; uint64_t status = ~0ULL; EFI_TIME oldtime; EFI_TIME newtime; struct efi_gettime gettime; EFI_TIME_CAPABILITIES efi_time_cap; struct efi_getwakeuptime getwakeuptime; uint8_t enabled, pending; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_TIME)) { fwts_skipped(fw, "Skipping test, GetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } gettime.Capabilities = &efi_time_cap; gettime.Time = &oldtime; gettime.status = &status; ioret = ioctl(fd, EFI_RUNTIME_GET_TIME, &gettime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetTime", "Failed to get time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_WAKEUP_TIME)) { fwts_skipped(fw, "Skipping test, SetWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } /* change the hour, add 1 hour*/ addonehour(&oldtime); setwakeuptime.Time = &oldtime; status = ~0ULL; setwakeuptime.status = &status; setwakeuptime.Enabled = true; ioret = ioctl(fd, EFI_RUNTIME_SET_WAKETIME, &setwakeuptime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, SetWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetWakeupTime", "Failed to set wakeup time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } sleep(1); if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_WAKEUP_TIME)) { fwts_skipped(fw, "Skipping test, SetWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } getwakeuptime.Enabled = &enabled; getwakeuptime.Pending = &pending; getwakeuptime.Time = &newtime; status = ~0ULL; getwakeuptime.status = &status; ioret = ioctl(fd, EFI_RUNTIME_GET_WAKETIME, &getwakeuptime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetWakeupTime", "Failed to get wakeup time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } if (*getwakeuptime.Enabled != true) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetWakeupTimeEnable", "Failed to set wakeup alarm clock, wakeup timer should be enabled."); return FWTS_ERROR; } if (*getwakeuptime.Pending != false) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetWakeupTimePending", "Get error alarm signal status."); return FWTS_ERROR; } if ((oldtime.Year != newtime.Year) || (oldtime.Month != newtime.Month) || (oldtime.Day != newtime.Day) || (oldtime.Hour != newtime.Hour)) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetWakeupTimeVerify", "Failed to verify wakeup time after change."); return FWTS_ERROR; } setwakeuptime.Enabled = false; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_SET_WAKETIME, &setwakeuptime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, SetWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetWakeupTime", "Failed to set wakeup time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } sleep(1); status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_GET_WAKETIME, &getwakeuptime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetWakeupTime", "Failed to get wakeup time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } if (*getwakeuptime.Enabled != false) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetWakeupTimeEnable", "Failed to set wakeup alarm clock, wakeup timer should be disabled."); return FWTS_ERROR; } fwts_passed(fw, "UEFI runtime service SetWakeupTime interface test passed."); return FWTS_OK; } static int uefirttime_test_setwakeuptime_invalid( fwts_framework *fw, struct efi_setwakeuptime *setwakeuptime ) { long ioret; static uint64_t status; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_WAKEUP_TIME)) { fwts_skipped(fw, "Skipping test, SetWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } status = ~0ULL; setwakeuptime->status = &status; ioret = ioctl(fd, EFI_RUNTIME_SET_WAKETIME, setwakeuptime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, SetWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } if (status == EFI_INVALID_PARAMETER) { fwts_passed(fw, "UEFI runtime service SetTimeWakeupTime interface test " "passed, returned EFI_INVALID_PARAMETER as expected."); return FWTS_OK; } else { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetWakeupTime", "Failed to get correct return status from UEFI runtime service, " "expecting EFI_INVALID_PARAMETER."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetWakeupTime", "Failed to get error return status from UEFI runtime service, expected EFI_INVALID_PARAMETER."); return FWTS_ERROR; } static int uefirttime_test24(fwts_framework *fw) { struct efi_setwakeuptime setwakeuptime; setwakeuptime.Enabled = true; setwakeuptime.Time = NULL; return uefirttime_test_setwakeuptime_invalid(fw, &setwakeuptime); } static int uefirttime_test_setwakeuptime_invalid_time( fwts_framework *fw, EFI_TIME *time) { struct efi_getwakeuptime getwakeuptime; struct efi_setwakeuptime setwakeuptime; EFI_TIME oldtime, newtime; uint64_t status = ~0ULL; uint8_t pending, enabled; int ret, ioret; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_WAKEUP_TIME)) { fwts_skipped(fw, "Skipping test, GetWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } getwakeuptime.Enabled = &enabled; getwakeuptime.Pending = &pending; getwakeuptime.Time = &oldtime; getwakeuptime.status = &status; ioret = ioctl(fd, EFI_RUNTIME_GET_WAKETIME, &getwakeuptime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetWakeupTime", "Failed to get wakeup time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } memcpy(&newtime, &oldtime, sizeof(EFI_TIME)); if (time->Year != 0xffff) newtime.Year = time->Year; if (time->Month != 0xff) newtime.Month = time->Month; if (time->Day != 0xff) newtime.Day = time->Day; if (time->Hour != 0xff) newtime.Hour = time->Hour; if (time->Minute != 0xff) newtime.Minute = time->Minute; if (time->Second != 0xff) newtime.Second = time->Second; if (time->Nanosecond != 0xffffffff) newtime.Nanosecond = time->Nanosecond; if ((uint16_t)time->TimeZone != 0xffff) newtime.TimeZone = time->TimeZone; setwakeuptime.Time = &newtime; setwakeuptime.status = &status; setwakeuptime.Enabled = true; ret = uefirttime_test_setwakeuptime_invalid(fw, &setwakeuptime); if (ret == FWTS_SKIP) return ret; /* Restore original time */ setwakeuptime.Time = &oldtime; status = ~0ULL; setwakeuptime.status = &status; setwakeuptime.Enabled = true; ioret = ioctl(fd, EFI_RUNTIME_SET_WAKETIME, &setwakeuptime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, SetWakeupTime runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetWakeupTime", "Failed to set wakeup time with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } return ret; } static int uefirttime_test25(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Year = 1899; return uefirttime_test_setwakeuptime_invalid_time(fw, &time); } static int uefirttime_test26(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Year = 10000; return uefirttime_test_setwakeuptime_invalid_time(fw, &time); } static int uefirttime_test27(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Month = 0; return uefirttime_test_setwakeuptime_invalid_time(fw, &time); } static int uefirttime_test28(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Month = 13; return uefirttime_test_setwakeuptime_invalid_time(fw, &time); } static int uefirttime_test29(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Day = 0; return uefirttime_test_setwakeuptime_invalid_time(fw, &time); } static int uefirttime_test30(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Day = 32; return uefirttime_test_setwakeuptime_invalid_time(fw, &time); } static int uefirttime_test31(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Hour = 24; return uefirttime_test_setwakeuptime_invalid_time(fw, &time); } static int uefirttime_test32(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Minute = 60; return uefirttime_test_setwakeuptime_invalid_time(fw, &time); } static int uefirttime_test33(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Second = 60; return uefirttime_test_setwakeuptime_invalid_time(fw, &time); } static int uefirttime_test34(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.Nanosecond = 1000000000; return uefirttime_test_setwakeuptime_invalid_time(fw, &time); } static int uefirttime_test35(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.TimeZone = -1441; return uefirttime_test_setwakeuptime_invalid_time(fw, &time); } static int uefirttime_test36(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); time.TimeZone = 1441; return uefirttime_test_setwakeuptime_invalid_time(fw, &time); } #if UEFI_IGNORE_UNSET_BITS /* * The UEFI spec states that just two bits are allowed, and all other bits * must be zero, but I have yet to find a compliant implementation that * flags up an invalid parameter if the bits are non zero. It seems that * implementations just examine the bits they expect and don't care. For * now, we will ignore this test */ static int uefirttime_test37(fwts_framework *fw) { EFI_TIME time; memset(&time, 0xff, sizeof(EFI_TIME)); /* Section 7.3, Daylight states all other bits must be zero */ time.Daylight = ~(FWTS_UEFI_TIME_ADJUST_DAYLIGHT | FWTS_UEFI_TIME_IN_DAYLIGHT); return uefirttime_test_setwakeuptime_invalid_time(fw, &time); } #endif static int uefirttime_test38(fwts_framework *fw) { long ioret; struct efi_settime settime; uint64_t status = ~0ULL; struct efi_gettime gettime; struct efi_getwakeuptime getwakeuptime; uint8_t enabled, pending; struct efi_setwakeuptime setwakeuptime; EFI_TIME efi_time; EFI_TIME_CAPABILITIES efi_time_cap; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_TIME)) { gettime.Capabilities = &efi_time_cap; gettime.Time = &efi_time; gettime.status = &status; ioret = ioctl(fd, EFI_RUNTIME_GET_TIME, &gettime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) fwts_passed(fw, "UEFI GetTime runtime service " "unsupported status test passed."); else { if (status == ~0ULL) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetTime", "Get the GetTime runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware."); } } else { if (status != EFI_SUCCESS ) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetTime", "Get the GetTime runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware."); } } else fwts_skipped(fw, "GetTime runtime service supported, skip test."); /* set test time for settime and setwakeuptime tests */ memset(&efi_time, 0, sizeof(efi_time)); efi_time.Year = 2000; efi_time.Month = 1; efi_time.Day = 1; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_TIME)) { settime.Time = &efi_time; status = ~0ULL; settime.status = &status; ioret = ioctl(fd, EFI_RUNTIME_SET_TIME, &settime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_passed(fw, "UEFI SetTime runtime service " "unsupported status test passed."); } else { if (status == ~0ULL) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetTime", "Get the SetTime runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware."); } } else { if (status != EFI_SUCCESS ) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetTime", "Get the SetTime runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware."); } } else fwts_skipped(fw, "SetTime runtime service supported, skip test."); if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_WAKEUP_TIME)) { setwakeuptime.Time = &efi_time; status = ~0ULL; setwakeuptime.status = &status; setwakeuptime.Enabled = false; ioret = ioctl(fd, EFI_RUNTIME_SET_WAKETIME, &setwakeuptime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) fwts_passed(fw, "UEFI SetWakeupTime runtime service " "unsupported status test passed."); else { if (status == ~0ULL) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetWakeupTime", "Get the SetWakeupTime runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware."); } } else { if (status != EFI_SUCCESS ) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetWakeupTime", "Get the SetWakeupTime runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware."); } } else fwts_skipped(fw, "SetWakeupTime runtime service supported, skip test."); if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_WAKEUP_TIME)) { getwakeuptime.Enabled = &enabled; getwakeuptime.Pending = &pending; getwakeuptime.Time = &efi_time; getwakeuptime.status = &status; ioret = ioctl(fd, EFI_RUNTIME_GET_WAKETIME, &getwakeuptime); if (ioret == -1) { if (status == EFI_UNSUPPORTED) fwts_passed(fw, "UEFI GetWakeupTime runtime service " "unsupported status test passed."); else { if (status == ~0ULL) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetWakeupTime", "Get the GetWakeupTime runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware"); } } else { if (status != EFI_SUCCESS ) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetWakeupTime", "Get the GetWakeupTime runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware"); } } else fwts_skipped(fw, "GetWakeupTime runtime service supported, skip test."); return FWTS_OK; } static fwts_framework_minor_test uefirttime_tests[] = { { uefirttime_test1, "Test UEFI RT service get time interface." }, { uefirttime_test2, "Test UEFI RT service get time interface, NULL time parameter." }, { uefirttime_test3, "Test UEFI RT service get time interface, NULL time and NULL capabilities parameters." }, { uefirttime_test4, "Test UEFI RT service set time interface." }, { uefirttime_test5, "Test UEFI RT service set time interface, invalid year 1899." }, { uefirttime_test6, "Test UEFI RT service set time interface, invalid year 10000." }, { uefirttime_test7, "Test UEFI RT service set time interface, invalid month 0." }, { uefirttime_test8, "Test UEFI RT service set time interface, invalid month 13." }, { uefirttime_test9, "Test UEFI RT service set time interface, invalid day 0." }, { uefirttime_test10, "Test UEFI RT service set time interface, invalid day 32." }, { uefirttime_test11, "Test UEFI RT service set time interface, invalid hour 24." }, { uefirttime_test12, "Test UEFI RT service set time interface, invalid minute 60." }, { uefirttime_test13, "Test UEFI RT service set time interface, invalid second 60." }, { uefirttime_test14, "Test UEFI RT service set time interface, invalid nanosecond 1000000000." }, { uefirttime_test15, "Test UEFI RT service set time interface, invalid timezone -1441." }, { uefirttime_test16, "Test UEFI RT service set time interface, invalid timezone 1441." }, #if UEFI_IGNORE_UNSET_BITS { uefirttime_test17, "Test UEFI RT service set time interface, invalid daylight 0xfc." }, #endif { uefirttime_test18, "Test UEFI RT service get wakeup time interface." }, { uefirttime_test19, "Test UEFI RT service get wakeup time interface, NULL enabled parameter." }, { uefirttime_test20, "Test UEFI RT service get wakeup time interface, NULL pending parameter." }, { uefirttime_test21, "Test UEFI RT service get wakeup time interface, NULL time parameter." }, { uefirttime_test22, "Test UEFI RT service get wakeup time interface, NULL enabled, pending and time parameters." }, { uefirttime_test23, "Test UEFI RT service set wakeup time interface." }, { uefirttime_test24, "Test UEFI RT service set wakeup time interface, NULL time parameter." }, { uefirttime_test25, "Test UEFI RT service set wakeup time interface, invalid year 1899." }, { uefirttime_test26, "Test UEFI RT service set wakeup time interface, invalid year 10000." }, { uefirttime_test27, "Test UEFI RT service set wakeup time interface, invalid month 0." }, { uefirttime_test28, "Test UEFI RT service set wakeup time interface, invalid month 13." }, { uefirttime_test29, "Test UEFI RT service set wakeup time interface, invalid day 0." }, { uefirttime_test30, "Test UEFI RT service set wakeup time interface, invalid day 32." }, { uefirttime_test31, "Test UEFI RT service set wakeup time interface, invalid hour 24." }, { uefirttime_test32, "Test UEFI RT service set wakeup time interface, invalid minute 60." }, { uefirttime_test33, "Test UEFI RT service set wakeup time interface, invalid second 60." }, { uefirttime_test34, "Test UEFI RT service set wakeup time interface, invalid nanosecond 1000000000." }, { uefirttime_test35, "Test UEFI RT service set wakeup time interface, invalid timezone -1441." }, { uefirttime_test36, "Test UEFI RT service set wakeup time interface, invalid timezone 1441." }, #if UEFI_IGNORE_UNSET_BITS { uefirttime_test37, "Test UEFI RT service set wakeup time interface, invalid daylight 0xfc." }, #endif { uefirttime_test38, "Test UEFI RT time services unsupported status." }, { NULL, NULL } }; static fwts_framework_ops uefirttime_ops = { .description = "UEFI Runtime service time interface tests.", .init = uefirttime_init, .deinit = uefirttime_deinit, .minor_tests = uefirttime_tests }; FWTS_REGISTER("uefirttime", &uefirttime_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UEFI | FWTS_FLAG_UNSAFE | FWTS_FLAG_ROOT_PRIV | FWTS_FLAG_XBBR) #endif src/uefi/uefirtvariable/000077500000000000000000000000001465205512700156105ustar00rootroot00000000000000src/uefi/uefirtvariable/uefirtvariable.c000066400000000000000000002106161465205512700207660ustar00rootroot00000000000000/* * Copyright (C) 2012-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_UEFI) #include #include #include #include #include #include "fwts_uefi.h" #include "fwts_efi_runtime.h" #include "fwts_efi_module.h" #define TEST_GUID1 \ { \ 0xF6FAB04F, 0xACAF, 0x4af3, {0xB9, 0xFA, 0xDC, \ 0xF9, 0x7F, 0xB4, 0x42, 0x6F} \ } #define TEST_GUID2 \ { \ 0xBD6D18A3, 0xEE9E, 0x445E, {0xA8, 0x1B, 0xD3, \ 0xDD, 0xB7, 0x11, 0xD0, 0x6E} \ } #define MAX_DATA_LENGTH 1024 static int fd; static EFI_GUID gtestguid1 = TEST_GUID1; static EFI_GUID gtestguid2 = TEST_GUID2; static uint32_t uefi_get_variable_multiple = 1024; static uint32_t uefi_set_variable_multiple = 40; static uint32_t uefi_query_variable_multiple = 1024; #define UEFI_GET_VARIABLE_MULTIPLE_MAX (100000) #define UEFI_SET_VARIABLE_MULTIPLE_MAX (10000) #define UEFI_QUERY_VARIABLE_MULTIPLE_MAX (100000) static uint32_t attributes = FWTS_UEFI_VAR_NON_VOLATILE | FWTS_UEFI_VAR_BOOTSERVICE_ACCESS | FWTS_UEFI_VAR_RUNTIME_ACCESS; static uint16_t variablenametest[] = {'T', 'e', 's', 't', 'v', 'a', 'r', '\0'}; static uint16_t variablenametest2[] = {'T', 'e', 's', 't', 'v', 'a', 'r', ' ', '\0'}; static uint16_t variablenametest3[] = {'T', 'e', 's', 't', 'v', 'a', '\0'}; static uint32_t runtimeservicessupported; static void uefirtvariable_env_cleanup(void) { struct efi_setvariable setvariable; uint64_t status; uint8_t data = 0; setvariable.VariableName = variablenametest; setvariable.VendorGuid = >estguid1; setvariable.Attributes = 0; setvariable.DataSize = 0; setvariable.Data = &data; status = ~0ULL; setvariable.status = &status; (void)ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); status = ~0ULL; setvariable.VariableName = variablenametest2; (void)ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); status = ~0ULL; setvariable.VariableName = variablenametest3; (void)ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); status = ~0ULL; setvariable.VariableName = variablenametest; setvariable.VendorGuid = >estguid2; (void)ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); } static int uefirtvariable_init(fwts_framework *fw) { if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED) return FWTS_ABORTED; uefirtvariable_env_cleanup(); fwts_uefi_rt_support_status_get(fd, &runtimeservicessupported); return FWTS_OK; } static int uefirtvariable_deinit(fwts_framework *fw) { fwts_lib_efi_runtime_close(fd); fwts_lib_efi_runtime_unload_module(fw); return FWTS_OK; } static int getvariable_test( fwts_framework *fw, const uint64_t datasize, uint16_t *varname, const uint32_t multitesttime) { long ioret; struct efi_getvariable getvariable; struct efi_setvariable setvariable; uint64_t status = ~0ULL; uint8_t testdata[MAX_DATA_LENGTH]; uint64_t dataindex; uint64_t getdatasize = sizeof(testdata); uint32_t attributestest = 0; uint8_t data[datasize]; uint32_t i; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) { fwts_skipped(fw, "Skipping test, SetVariable runtime service " "is not supported on this platform."); return FWTS_SKIP; } for (dataindex = 0; dataindex < datasize; dataindex++) data[dataindex] = (uint8_t)dataindex; setvariable.VariableName = varname; setvariable.VendorGuid = >estguid1; setvariable.Attributes = attributes; setvariable.DataSize = datasize; setvariable.Data = data; setvariable.status = &status; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, SetVariable runtime " "service is not supported on this platform."); return FWTS_SKIP; } if (status == EFI_OUT_OF_RESOURCES) { fwts_uefi_print_status_info(fw, status); fwts_skipped(fw, "Run out of resources for SetVariable UEFI " "runtime interface: cannot test."); fwts_advice(fw, "Firmware may reclaim some resources after " "rebooting. Reboot and test again may be " "helpful to continue the test."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Failed to set variable with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_VARIABLE)) { fwts_skipped(fw, "Skipping test, GetVariable runtime service " "is not supported on this platform."); return FWTS_SKIP; } getvariable.VariableName = varname; getvariable.VendorGuid = >estguid1; getvariable.Attributes = &attributestest; getvariable.DataSize = &getdatasize; getvariable.Data = testdata; getvariable.status = &status; for (i = 0; i < multitesttime; i++) { status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_GET_VARIABLE, &getvariable); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetVariable runtime " "service is not supported on this platform."); goto err_restore_env; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetVariable", "Failed to get variable with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); goto err_restore_env; } } if (*getvariable.status != EFI_SUCCESS) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetVariableStatus", "Failed to get variable, return status is not " "EFI_SUCCESS."); fwts_uefi_print_status_info(fw, status); goto err_restore_env; } else if (*getvariable.Attributes != attributes) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetVariableAttributes", "Failed to get variable with right attributes, " "attributes we got is %" PRIu32 ", but it should be %" PRIu32 ".", *getvariable.Attributes, attributes); goto err_restore_env; } else if (*getvariable.DataSize != datasize) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetVariableDataSize", "Failed to get variable with correct datasize."); goto err_restore_env; } else { for (dataindex = 0; dataindex < datasize; dataindex++) { if (data[dataindex] != (uint8_t)dataindex) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetVariableData", "Failed to get variable with " "correct data."); goto err_restore_env; } } } /* delete the variable */ setvariable.DataSize = 0; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Failed to delete variable with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } return FWTS_OK; err_restore_env: setvariable.DataSize = 0; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Failed to delete variable with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } return FWTS_ERROR; } static bool compare_guid(const EFI_GUID *guid1, const EFI_GUID *guid2) { bool ident = true; if ((guid1->Data1 != guid2->Data1) || (guid1->Data2 != guid2->Data2) || (guid1->Data3 != guid2->Data3)) ident = false; else { int i; for (i = 0; i < 8; i++) { if (guid1->Data4[i] != guid2->Data4[i]) ident = false; } } return ident; } static bool compare_name(const uint16_t *name1, const uint16_t *name2) { bool ident = true; int i = 0; while (true) { if ((name1[i] != name2[i])) { ident = false; break; } else if (name1[i] == '\0') break; i++; } return ident; } static int getnextvariable_test1(fwts_framework *fw) { long ioret; uint64_t status = ~0ULL; struct efi_setvariable setvariable; uint64_t dataindex, datasize = 10; uint8_t data[MAX_DATA_LENGTH]; struct efi_getnextvariablename getnextvariablename; uint64_t variablenamesize = MAX_DATA_LENGTH; uint64_t maxvariablenamesize = variablenamesize; uint16_t *variablename; EFI_GUID vendorguid; bool found_name = false, found_guid = false; int ret = FWTS_OK; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) { fwts_skipped(fw, "Skipping test, SetVariable runtime service " "is not supported on this platform."); return FWTS_SKIP; } for (dataindex = 0; dataindex < datasize; dataindex++) data[dataindex] = (uint8_t)dataindex; setvariable.VariableName = variablenametest; setvariable.VendorGuid = >estguid1; setvariable.Attributes = attributes; setvariable.DataSize = datasize; setvariable.Data = data; setvariable.status = &status; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, SetVariable runtime " "service is not supported on this platform."); return FWTS_SKIP; } if (status == EFI_OUT_OF_RESOURCES) { fwts_uefi_print_status_info(fw, status); fwts_skipped(fw, "Run out of resources for SetVariable UEFI " "runtime interface: cannot test."); fwts_advice(fw, "Firmware may reclaim some resources after " "rebooting. Reboot and test again may be " "helpful to continue the test."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Failed to set variable with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) { fwts_skipped(fw, "Skipping test, GetNextVariableName runtime " "service is not supported on this platform."); return FWTS_SKIP; } variablename = malloc(sizeof(uint16_t) * variablenamesize); if (!variablename) { fwts_skipped(fw, "Unable to alloc memory for variable name"); ret = FWTS_SKIP; goto err_restore_env; } getnextvariablename.VariableNameSize = &variablenamesize; getnextvariablename.VariableName = variablename; getnextvariablename.VendorGuid = &vendorguid; getnextvariablename.status = &status; /* * To start the search, need to pass a Null-terminated string * in VariableName */ variablename[0] = '\0'; while (true) { variablenamesize = maxvariablenamesize; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTVARIABLENAME, &getnextvariablename); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetNextVariableName runtime " "service is not supported on this platform."); return FWTS_SKIP; } /* no next variable was found*/ if (*getnextvariablename.status == EFI_NOT_FOUND) break; /* * If the buffer we provided is too small for the name, * allocate a larger buffer and try again */ if (*getnextvariablename.status == EFI_BUFFER_TOO_SMALL) { uint16_t *tmp; tmp = realloc(variablename, sizeof(uint16_t) * variablenamesize); if (tmp) { variablename = tmp; getnextvariablename.VariableName = variablename; maxvariablenamesize = variablenamesize; continue; } fwts_skipped(fw, "Unable to reallocate memory for variable name"); ret = FWTS_SKIP; goto err_restore_env; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableName", "Failed to get next variable name with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); ret = FWTS_ERROR; goto err_restore_env; } if (compare_name(getnextvariablename.VariableName, variablenametest)) found_name = true; if (compare_guid(getnextvariablename.VendorGuid, >estguid1)) found_guid = true; if (found_name && found_guid) break; }; if (variablename) { free(variablename); getnextvariablename.VariableName = NULL; variablename = NULL; } if (!found_name) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableNameName", "Failed to get next variable name with right name."); goto err_restore_env; } if (!found_guid) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableNameGuid", "Failed to get next variable name correct guid."); goto err_restore_env; } /* delete the variable */ setvariable.DataSize = 0; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Failed to delete variable with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } return FWTS_OK; err_restore_env: setvariable.DataSize = 0; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Failed to delete variable with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); ret = FWTS_ERROR; } if (variablename) free(variablename); return ret; } /* * Return true if variablenamesize is the length of the * NULL-terminated unicode string, variablename. */ static bool strlen_valid(const uint16_t *variablename, const uint64_t variablenamesize) { uint64_t len; uint16_t c; for (len = 2; len <= variablenamesize; len += sizeof(c)) { uint64_t i = (len / sizeof(c)) - 1; c = variablename[i]; if (!c) break; } return len == variablenamesize; } static int getnextvariable_test2(fwts_framework *fw) { uint64_t status; struct efi_getnextvariablename getnextvariablename; uint64_t variablenamesize = MAX_DATA_LENGTH; uint64_t maxvariablenamesize = variablenamesize; uint16_t *variablename; EFI_GUID vendorguid; int ret = FWTS_OK; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) { fwts_skipped(fw, "Skipping test, GetNextVariableName runtime " "service is not supported on this platform."); return FWTS_SKIP; } variablename = malloc(sizeof(uint16_t) * variablenamesize); if (!variablename) { fwts_skipped(fw, "Unable to alloc memory for variable name"); return FWTS_SKIP; } getnextvariablename.VariableNameSize = &variablenamesize; getnextvariablename.VariableName = variablename; getnextvariablename.VendorGuid = &vendorguid; getnextvariablename.status = &status; /* * To start the search, need to pass a Null-terminated string * in VariableName */ variablename[0] = '\0'; while (true) { long ioret; status = ~0ULL; variablenamesize = maxvariablenamesize; ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTVARIABLENAME, &getnextvariablename); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetNextVariableName runtime " "service is not supported on this platform."); return FWTS_SKIP; } /* no next variable was found*/ if (*getnextvariablename.status == EFI_NOT_FOUND) break; /* * If the buffer we provided is too small for the name, * allocate a larger buffer and try again */ if (*getnextvariablename.status == EFI_BUFFER_TOO_SMALL) { uint16_t *tmp; tmp = realloc(variablename, sizeof(uint16_t) * variablenamesize); if (tmp) { variablename = tmp; getnextvariablename.VariableName = variablename; maxvariablenamesize = variablenamesize; continue; } fwts_skipped(fw, "Unable to reallocate memory for variable name"); ret = FWTS_SKIP; break; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableName", "Failed to get next variable name with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); ret = FWTS_ERROR; break; } if (!strlen_valid(variablename, variablenamesize)) { fwts_warning(fw, "UEFIRuntimeGetNextVariableName " "Unexpected variable name size returned."); ret = FWTS_ERROR; break; } }; if (variablename) free(variablename); return ret; } struct efi_var_item { struct efi_var_item *next; /* collision chain */ uint16_t *name; EFI_GUID *guid; uint64_t hash; }; /* * This is a completely arbitrary value. */ #define BUCKET_SIZE 32 static struct efi_var_item *buckets[BUCKET_SIZE]; /* * This doesn't have to be a super efficient hashing function with * minimal collisions, just more efficient than iterating over a * simple linked list. */ static inline uint64_t hash_func(uint16_t *variablename, const uint64_t length) { uint64_t i, hash = 0; uint16_t *c = variablename; for (i = 0; i < length; i++) hash = hash * 33 + *c++; return hash; } /* * Return's 0 on success, -1 if there was a collision - meaning we've * encountered duplicate variable names with the same GUID. */ static int bucket_insert(struct efi_var_item *item) { struct efi_var_item *chain; unsigned int index = item->hash % BUCKET_SIZE; chain = buckets[index]; while (chain) { /* * OK, we got a collision - no big deal. Walk the * chain and see whether this variable name and * variable guid already appear on it. */ if (compare_name(item->name, chain->name)) { if (compare_guid(item->guid, chain->guid)) return -1; /* duplicate */ } chain = chain->next; } item->next = buckets[index]; buckets[index] = item; return 0; } static void bucket_destroy(void) { struct efi_var_item *item; int i; for (i = 0; i < BUCKET_SIZE; i++) { item = buckets[i]; while (item) { struct efi_var_item *chain = item->next; free(item->name); free(item->guid); free(item); item = chain; } } } static int getnextvariable_test3(fwts_framework *fw) { long ioret; uint64_t status; struct efi_getnextvariablename getnextvariablename; uint64_t variablenamesize = MAX_DATA_LENGTH; uint64_t maxvariablenamesize = variablenamesize; uint16_t *variablename; EFI_GUID vendorguid; int ret; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) { fwts_skipped(fw, "Skipping test, GetNextVariableName runtime " "service is not supported on this platform."); return FWTS_SKIP; } variablename = malloc(sizeof(uint16_t) * variablenamesize); if (!variablename) { fwts_skipped(fw, "Unable to alloc memory for variable name"); return FWTS_SKIP; } getnextvariablename.VariableNameSize = &variablenamesize; getnextvariablename.VariableName = variablename; getnextvariablename.VendorGuid = &vendorguid; getnextvariablename.status = &status; /* * To start the search, need to pass a Null-terminated string * in VariableName */ variablename[0] = '\0'; while (true) { struct efi_var_item *item; status = ~0ULL; variablenamesize = maxvariablenamesize; ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTVARIABLENAME, &getnextvariablename); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetNextVariableName runtime " "service is not supported on this platform."); return FWTS_SKIP; } /* no next variable was found*/ if (*getnextvariablename.status == EFI_NOT_FOUND) break; /* * if the buffer we provided is too small for the name, * allocate a larger buffer and try again */ if (*getnextvariablename.status == EFI_BUFFER_TOO_SMALL) { uint16_t *tmp; tmp = realloc(variablename, sizeof(uint16_t) * variablenamesize); if (tmp) { variablename = tmp; getnextvariablename.VariableName = variablename; maxvariablenamesize = variablenamesize; continue; } fwts_skipped(fw, "Unable to reallocate memory for variable name"); ret = FWTS_SKIP; goto err; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableName", "Failed to get next variable name with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); ret = FWTS_ERROR; goto err; } item = malloc(sizeof(*item)); if (!item) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableName", "Failed to allocate memory for test."); ret = FWTS_ERROR; goto err; } item->guid = malloc(sizeof(EFI_GUID)); if (!item->guid) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableName", "Failed to allocate memory for test."); free(item); ret = FWTS_ERROR; goto err; } memcpy(item->guid, &vendorguid, sizeof(EFI_GUID)); item->next = NULL; item->name = malloc(variablenamesize); if (!item->name) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableName", "Failed to allocate memory for test."); free(item->guid); free(item); ret = FWTS_ERROR; goto err; } memcpy(item->name, variablename, variablenamesize); /* Ensure there are no duplicate variable names + guid */ item->hash = hash_func(variablename, variablenamesize); if (bucket_insert(item)) { char name[variablenamesize]; fwts_uefi_str16_to_str(name, sizeof(name), variablename); fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableName", "Duplicate variable name %s found.", name); free(item->name); free(item->guid); free(item); ret = FWTS_ERROR; goto err; } }; ret = FWTS_OK; err: bucket_destroy(); if (variablename) free(variablename); return ret; } static int getnextvariable_test4(fwts_framework *fw) { long ioret; uint64_t status = ~0ULL; uint64_t i; struct efi_getnextvariablename getnextvariablename; uint64_t variablenamesize = MAX_DATA_LENGTH; uint16_t variablename[MAX_DATA_LENGTH]; EFI_GUID vendorguid; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) { fwts_skipped(fw, "Skipping test, GetNextVariableName runtime " "service is not supported on this platform."); return FWTS_SKIP; } getnextvariablename.VariableNameSize = &variablenamesize; getnextvariablename.VendorGuid = &vendorguid; getnextvariablename.status = &status; /* * Check for expected error values. */ getnextvariablename.VariableName = NULL; ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTVARIABLENAME, &getnextvariablename); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetNextVaiableName runtime " "service is not supported on this platform."); return FWTS_SKIP; } } if (ioret != -1 || status != EFI_INVALID_PARAMETER) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableName", "Expected EFI_INVALID_PARAMETER with NULL VariableName."); fwts_uefi_print_status_info(fw, status); goto err; } getnextvariablename.VariableName = variablename; getnextvariablename.VendorGuid = NULL; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTVARIABLENAME, &getnextvariablename); if (ioret != -1 || status != EFI_INVALID_PARAMETER) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableName", "Expected EFI_INVALID_PARAMETER with NULL VendorGuid."); fwts_uefi_print_status_info(fw, status); goto err; } getnextvariablename.VendorGuid = &vendorguid; getnextvariablename.VariableNameSize = NULL; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTVARIABLENAME, &getnextvariablename); if (ioret != -1 || status != EFI_INVALID_PARAMETER) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableName", "Expected EFI_INVALID_PARAMETER with NULL " "VariableNameSize."); fwts_uefi_print_status_info(fw, status); goto err; } for (i = 0; i < 3; i++) { variablenamesize = i; getnextvariablename.VariableNameSize = &variablenamesize; /* * To start the search, need to pass a Null-terminated * string in VariableName */ variablename[0] = '\0'; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTVARIABLENAME, &getnextvariablename); /* * We expect this machine to have at least some UEFI * variables, which is the reason we don't check for * EFI_NOT_FOUND at this point. */ if (ioret != -1 || status != EFI_BUFFER_TOO_SMALL) { if (i != 2 && status == EFI_INVALID_PARAMETER) continue; fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableName", "Expected EFI_BUFFER_TOO_SMALL with small " "VariableNameSize."); fwts_uefi_print_status_info(fw, status); goto err; } /* Has the firmware failed to update the variable size? */ if (variablenamesize == i) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableName", "EFI_BUFFER_TOO_SMALL VariableNameSize was " "not updated."); goto err; } } return FWTS_OK; err: return FWTS_ERROR; } static int setvariable_insertvariable( fwts_framework *fw, const uint32_t var_attributes, const uint64_t datasize, uint16_t *varname, EFI_GUID *gtestguid, const uint8_t datadiff) { long ioret; struct efi_setvariable setvariable; uint64_t status = ~0ULL; uint64_t dataindex; uint8_t data[datasize + 1]; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) { fwts_skipped(fw, "Skipping test, SetVariable runtime service " "is not supported on this platform."); return FWTS_SKIP; } for (dataindex = 0; dataindex < datasize; dataindex++) data[dataindex] = (uint8_t)dataindex + datadiff; setvariable.VariableName = varname; setvariable.VendorGuid = gtestguid; setvariable.Attributes = var_attributes; setvariable.DataSize = datasize; setvariable.Data = data; setvariable.status = &status; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, SetVariable runtime " "service is not supported on this platform."); return FWTS_SKIP; } if ((status == EFI_INVALID_PARAMETER) && ((attributes & FWTS_UEFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS) || (attributes & FWTS_UEFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS) || (attributes & FWTS_UEFI_VARIABLE_APPEND_WRITE))) { fwts_uefi_print_status_info(fw, status); fwts_skipped(fw, "EFI_INVALID_PARAMETER shall be returned, " "when firmware doesn't support these operations " "with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS or " "EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS " "EFI_VARIABLE_APPEND_WRITE attributes is set."); return FWTS_SKIP; } if (datasize == 0) fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Failed to delete variable with UEFI " "runtime service."); else { if (status == EFI_OUT_OF_RESOURCES) { fwts_uefi_print_status_info(fw, status); fwts_skipped(fw, "Run out of resources for SetVariable " "UEFI runtime interface: cannot test."); fwts_advice(fw, "Firmware may reclaim some resources " "after rebooting. Reboot and test " "again may be helpful to continue " "the test."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Failed to set variable with UEFI " "runtime service."); } fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } return FWTS_OK; } static int setvariable_checkvariable( fwts_framework *fw, const uint64_t datasize, uint16_t *varname, EFI_GUID *gtestguid, const uint8_t datadiff) { long ioret; struct efi_getvariable getvariable; uint64_t status = ~0ULL; uint8_t testdata[datasize]; uint64_t dataindex; uint64_t getdatasize = sizeof(testdata); uint32_t attributestest; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_VARIABLE)) { fwts_skipped(fw, "Skipping test, GetVariable runtime service " "is not supported on this platform."); return FWTS_SKIP; } getvariable.VariableName = varname; getvariable.VendorGuid = gtestguid; getvariable.Attributes = &attributestest; getvariable.DataSize = &getdatasize; getvariable.Data = testdata; getvariable.status = &status; ioret = ioctl(fd, EFI_RUNTIME_GET_VARIABLE, &getvariable); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetVariable runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetVariable", "Failed to get variable with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } if (*getvariable.Attributes != attributes) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariableAttributes", "Failed to set variable with right attributes, " "attributes we got is %" PRIu32 ", but it should both be %" PRIu32 ".", attributestest, attributes); return FWTS_ERROR; } else if (*getvariable.DataSize != datasize) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariableDataSize", "Failed to set variable with correct datasize."); return FWTS_ERROR; } else { for (dataindex = 0; dataindex < datasize; dataindex++) { if (testdata[dataindex] != ((uint8_t)dataindex + datadiff)) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariableData", "Failed to set variable with " "correct data."); return FWTS_ERROR; } } } return FWTS_OK; } static int setvariable_checkvariable_notfound( fwts_framework *fw, uint16_t *varname, EFI_GUID *gtestguid) { long ioret; struct efi_getvariable getvariable; uint64_t status = ~0ULL; uint8_t testdata[MAX_DATA_LENGTH]; uint64_t getdatasize = sizeof(testdata); uint32_t attributestest; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_VARIABLE)) { fwts_skipped(fw, "Skipping test, GetVariable runtime service " "is not supported on this platform."); return FWTS_SKIP; } getvariable.VariableName = varname; getvariable.VendorGuid = gtestguid; getvariable.Attributes = &attributestest; getvariable.DataSize = &getdatasize; getvariable.Data = testdata; getvariable.status = &status; ioret = ioctl(fd, EFI_RUNTIME_GET_VARIABLE, &getvariable); /* expect the uefi runtime interface return EFI_NOT_FOUND */ if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetVariable runtime " "service is not supported on this platform."); return FWTS_SKIP; } if (*getvariable.status == EFI_NOT_FOUND) return FWTS_OK; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Failed to set variable with UEFI runtime service, " "expected the status return EFI_NOT_FOUND."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } static int setvariable_invalidattr( fwts_framework *fw, const uint32_t var_attributes, const uint64_t datasize, uint16_t *varname, EFI_GUID *gtestguid, const uint8_t datadiff) { long ioret; struct efi_setvariable setvariable; uint64_t status = ~0ULL; uint64_t dataindex; uint8_t data[datasize]; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) { fwts_skipped(fw, "Skipping test, SetVariable runtime service " "is not supported on this platform."); return FWTS_SKIP; } for (dataindex = 0; dataindex < datasize; dataindex++) data[dataindex] = (uint8_t)dataindex + datadiff; setvariable.VariableName = varname; setvariable.VendorGuid = gtestguid; setvariable.Attributes = var_attributes; setvariable.DataSize = datasize; setvariable.Data = data; setvariable.status = &status; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, SetVariable runtime " "service is not supported on this platform."); return FWTS_SKIP; } } if ((status == EFI_SUCCESS) && (ioret != -1)) { if ((attributes & FWTS_UEFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS) && (attributes & FWTS_UEFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS) && (status != EFI_INVALID_PARAMETER)) { fwts_warning(fw, "Both the EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS attribute and the " "EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS attribute are set " "in a SetVariable call, then the firmware must return EFI_INVALID_PARAMETER."); } else { fwts_warning(fw, "After ExitBootServices() is performed, the " "attributes %" PRIu32 ", " "for SetVariable shouldn't be set successfully.", attributes); } return FWTS_ERROR; } return FWTS_OK; } static int setvariable_test1( fwts_framework *fw, const uint64_t datasize1, const uint64_t datasize2, uint16_t *varname) { int ret; uint8_t datadiff_g2 = 2, datadiff_g1 = 0; ret = setvariable_insertvariable(fw, attributes, datasize2, varname, >estguid2, datadiff_g2); if (ret != FWTS_OK) return ret; ret = setvariable_insertvariable(fw, attributes, datasize1, varname, >estguid1, datadiff_g1); if (ret != FWTS_OK) goto err_restore_env1; ret = setvariable_checkvariable(fw, datasize2, varname, >estguid2, datadiff_g2); if (ret != FWTS_OK) goto err_restore_env; ret = setvariable_checkvariable(fw, datasize1, varname, >estguid1, datadiff_g1); if (ret != FWTS_OK) goto err_restore_env; ret = setvariable_insertvariable(fw, attributes, 0, varname, >estguid1, datadiff_g1); if (ret != FWTS_OK) goto err_restore_env1; ret = setvariable_insertvariable(fw, attributes, 0, varname, >estguid2, datadiff_g2); if (ret != FWTS_OK) return ret; return FWTS_OK; err_restore_env: (void)setvariable_insertvariable(fw, attributes, 0, varname, >estguid1, datadiff_g1); err_restore_env1: (void)setvariable_insertvariable(fw, attributes, 0, varname, >estguid2, datadiff_g2); return ret; } static int setvariable_test2(fwts_framework *fw, uint16_t *varname) { int ret; uint64_t datasize = 10; uint8_t datadiff1 = 0, datadiff2 = 2, datadiff3 = 4; ret = setvariable_insertvariable(fw, attributes, datasize, varname, >estguid1, datadiff1); if (ret != FWTS_OK) return ret; /* insert the same data */ ret = setvariable_insertvariable(fw, attributes, datasize, varname, >estguid1, datadiff1); if (ret != FWTS_OK) return ret; ret = setvariable_checkvariable(fw, datasize, varname, >estguid1, datadiff1); if (ret != FWTS_OK) goto err_restore_env1; /* insert different data */ datasize = 20; ret = setvariable_insertvariable(fw, attributes, datasize, varname, >estguid1, datadiff2); if (ret != FWTS_OK) goto err_restore_env1; ret = setvariable_checkvariable(fw, datasize, varname, >estguid1, datadiff2); if (ret != FWTS_OK) goto err_restore_env2; datasize = 5; ret = setvariable_insertvariable(fw, attributes, datasize, varname, >estguid1, datadiff3); if (ret != FWTS_OK) goto err_restore_env2; ret = setvariable_checkvariable(fw, datasize, varname, >estguid1, datadiff3); if (ret != FWTS_OK) goto err_restore_env3; ret = setvariable_insertvariable(fw, attributes, 0, varname, >estguid1, datadiff3); if (ret != FWTS_OK) return ret; return FWTS_OK; err_restore_env1: (void)setvariable_insertvariable(fw, attributes, 0, varname, >estguid1, datadiff1); return ret; err_restore_env2: (void)setvariable_insertvariable(fw, attributes, 0, varname, >estguid1, datadiff2); return ret; err_restore_env3: (void)setvariable_insertvariable(fw, attributes, 0, varname, >estguid1, datadiff3); return ret; } static int setvariable_test3(fwts_framework *fw) { int ret; uint64_t datasize = 10; uint8_t datadiff1 = 0, datadiff2 = 1, datadiff3 = 2; ret = setvariable_insertvariable(fw, attributes, datasize, variablenametest2, >estguid1, datadiff2); if (ret != FWTS_OK) return ret; ret = setvariable_insertvariable(fw, attributes, datasize, variablenametest3, >estguid1, datadiff3); if (ret != FWTS_OK) goto err_restore_env2; ret = setvariable_insertvariable(fw, attributes, datasize, variablenametest, >estguid1, datadiff1); if (ret != FWTS_OK) goto err_restore_env1; ret = setvariable_checkvariable(fw, datasize, variablenametest2, >estguid1, datadiff2); if (ret != FWTS_OK) goto err_restore_env; ret = setvariable_checkvariable(fw, datasize, variablenametest3, >estguid1, datadiff3); if (ret != FWTS_OK) goto err_restore_env; ret = setvariable_checkvariable(fw, datasize, variablenametest, >estguid1, datadiff1); if (ret != FWTS_OK) goto err_restore_env; ret = setvariable_insertvariable(fw, attributes, 0, variablenametest, >estguid1, datadiff1); if (ret != FWTS_OK) goto err_restore_env1; ret = setvariable_insertvariable(fw, attributes, 0, variablenametest3, >estguid1, datadiff3); if (ret != FWTS_OK) goto err_restore_env2; ret = setvariable_insertvariable(fw, attributes, 0, variablenametest2, >estguid1, datadiff2); if (ret != FWTS_OK) return ret; return FWTS_OK; err_restore_env: (void)setvariable_insertvariable(fw, attributes, 0, variablenametest, >estguid1, datadiff1); err_restore_env1: (void)setvariable_insertvariable(fw, attributes, 0, variablenametest3, >estguid1, datadiff3); err_restore_env2: (void)setvariable_insertvariable(fw, attributes, 0, variablenametest2, >estguid1, datadiff2); return ret; } static int setvariable_test4(fwts_framework *fw) { int ret; uint64_t datasize = 10; uint8_t datadiff = 0; ret = setvariable_insertvariable(fw, attributes, datasize, variablenametest, >estguid1, datadiff); if (ret != FWTS_OK) return ret; ret = setvariable_insertvariable(fw, attributes, 0, variablenametest, >estguid1, datadiff); if (ret != FWTS_OK) return ret; if (setvariable_checkvariable_notfound(fw, variablenametest, >estguid1) == FWTS_ERROR) return FWTS_ERROR; return FWTS_OK; } static int setvariable_test5(fwts_framework *fw) { int ret; uint64_t datasize = 10; uint8_t datadiff = 0; ret = setvariable_insertvariable(fw, attributes, datasize, variablenametest, >estguid1, datadiff); if (ret != FWTS_OK) return ret; ret = setvariable_insertvariable(fw, 0, datasize, variablenametest, >estguid1, datadiff); if (ret != FWTS_OK) return ret; if (setvariable_checkvariable_notfound(fw, variablenametest, >estguid1) == FWTS_ERROR) return FWTS_ERROR; return FWTS_OK; } static int setvariable_test6(fwts_framework *fw) { uint64_t datasize = 10; uint8_t datadiff = 0; uint32_t attributesarray[] = { FWTS_UEFI_VAR_BOOTSERVICE_ACCESS, FWTS_UEFI_VAR_NON_VOLATILE | FWTS_UEFI_VAR_BOOTSERVICE_ACCESS, FWTS_UEFI_VAR_BOOTSERVICE_ACCESS | FWTS_UEFI_VAR_RUNTIME_ACCESS }; uint64_t index; for (index = 0; index < (sizeof(attributesarray)/(sizeof attributesarray[0])); index++) { int ret = setvariable_invalidattr(fw, attributesarray[index], datasize, variablenametest, >estguid1, datadiff); if (ret == FWTS_ERROR) { /* successfully set variable with invalid attributes, test fail */ fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIRuntimeSetVariable", "Successfully set variable with invalid attribute, expected fail."); (void)setvariable_insertvariable(fw, 0, datasize, variablenametest, >estguid1, datadiff); return FWTS_ERROR; } if (setvariable_checkvariable_notfound(fw, variablenametest, >estguid1) == FWTS_ERROR) { fwts_log_info(fw, "Get the variable which is set by SetVariable " "with invalid attribute %" PRIu32 " after ExitBootServices() is " "performed, test failed.", attributesarray[index]); (void)setvariable_insertvariable(fw, 0, datasize, variablenametest, >estguid1, datadiff); return FWTS_ERROR; } } return FWTS_OK; } static int setvariable_test7(fwts_framework *fw) { int ret; uint64_t datasize = 10; uint8_t datadiff = 0; uint32_t attr; attr = attributes | FWTS_UEFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS | FWTS_UEFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS; ret = setvariable_invalidattr(fw, attr, datasize, variablenametest, >estguid1, datadiff); if (ret == FWTS_ERROR) { fwts_failed(fw, LOG_LEVEL_MEDIUM, "UEFIRuntimeSetVariable", "Successfully set variable with both authenticated (EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS " "EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS) attributes are set, expected fail."); (void)setvariable_insertvariable(fw, 0, datasize, variablenametest, >estguid1, datadiff); return FWTS_ERROR; } if (setvariable_checkvariable_notfound(fw, variablenametest, >estguid1) == FWTS_ERROR) { fwts_log_info(fw, "Get the variable which is set by SetVariable with both " "authenticated (EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS " "EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS) " "attributes are set %" PRIu32 " , test failed.", attr); (void)setvariable_insertvariable(fw, 0, datasize, variablenametest, >estguid1, datadiff); return FWTS_ERROR; } return FWTS_OK; } static int setvariable_test8(fwts_framework *fw) { long ioret; struct efi_setvariable setvariable; uint32_t attr = attributes | FWTS_UEFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS; uint64_t datasize = 1; uint8_t data = 1; uint64_t status = ~0ULL; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) { fwts_skipped(fw, "Skipping test, SetVariable runtime service " "is not supported on this platform."); return FWTS_SKIP; } setvariable.VariableName = variablenametest; setvariable.VendorGuid = >estguid1; setvariable.Attributes = attr; setvariable.DataSize = datasize; setvariable.Data = &data; setvariable.status = &status; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (status == EFI_UNSUPPORTED && ioret == -1) return FWTS_OK; fwts_warning(fw, "EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS is deprecated (UEFI 2.7) " "and should not be used. Platforms should return EFI_UNSUPPORTED " "if a caller to SetVariable() specifies this attribute."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } static int do_queryvariableinfo( uint64_t *status, uint64_t *remvarstoragesize, uint64_t *maxvariablesize) { long ioret; struct efi_queryvariableinfo queryvariableinfo; uint64_t maxvarstoragesize; queryvariableinfo.Attributes = attributes; queryvariableinfo.MaximumVariableStorageSize = &maxvarstoragesize; queryvariableinfo.RemainingVariableStorageSize = remvarstoragesize; queryvariableinfo.MaximumVariableSize = maxvariablesize; queryvariableinfo.status = status; *status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_QUERY_VARIABLEINFO, &queryvariableinfo); if (ioret == -1) return FWTS_ERROR; return FWTS_OK; } static int getnextvariable_multitest( fwts_framework *fw, const uint32_t multitesttime) { long ioret; uint64_t status = ~0ULL; uint32_t i; struct efi_setvariable setvariable; uint64_t dataindex, datasize = 10; uint8_t data[MAX_DATA_LENGTH]; struct efi_getnextvariablename getnextvariablename; uint64_t variablenamesize = MAX_DATA_LENGTH; uint16_t variablename[MAX_DATA_LENGTH]; EFI_GUID vendorguid; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) { fwts_skipped(fw, "Skipping test, SetVariable runtime service " "is not supported on this platform."); return FWTS_SKIP; } for (dataindex = 0; dataindex < datasize; dataindex++) data[dataindex] = (uint8_t)dataindex; setvariable.VariableName = variablenametest; setvariable.VendorGuid = >estguid1; setvariable.Attributes = attributes; setvariable.DataSize = datasize; setvariable.Data = data; setvariable.status = &status; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, SetVariable runtime " "service is not supported on this platform."); return FWTS_SKIP; } if (status == EFI_OUT_OF_RESOURCES) { fwts_uefi_print_status_info(fw, status); fwts_skipped(fw, "Run out of resources for SetVariable UEFI " "runtime interface: cannot test."); fwts_advice(fw, "Firmware may reclaim some resources after " "rebooting. Reboot and test again may be " "helpful to continue the test."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Failed to set variable with UEFI runtime service."); return FWTS_ERROR; } if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) { fwts_skipped(fw, "Skipping test, GetNextVariableName runtime " "service is not supported on this platform."); return FWTS_SKIP; } getnextvariablename.VariableNameSize = &variablenamesize; getnextvariablename.VariableName = variablename; getnextvariablename.VendorGuid = &vendorguid; getnextvariablename.status = &status; for (i = 0; i < multitesttime; i++) { variablename[0] = '\0'; variablenamesize = MAX_DATA_LENGTH; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTVARIABLENAME, &getnextvariablename); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetNextVariableName runtime " "service is not supported on this platform."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVariableName", "Failed to get next variable name with " "UEFI runtime service."); goto err_restore_env; } }; setvariable.DataSize = 0; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Failed to set variable with UEFI runtime service."); return FWTS_ERROR; } return FWTS_OK; err_restore_env: setvariable.DataSize = 0; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Failed to delete variable with UEFI runtime service."); } return FWTS_ERROR; } static int uefirtvariable_test1(fwts_framework *fw) { int ret; uint64_t datasize = 10; uint32_t multitesttime = 1; ret = getvariable_test(fw, datasize, variablenametest, multitesttime); if (ret != FWTS_OK) return ret; fwts_passed(fw, "UEFI runtime service GetVariable interface test passed."); return FWTS_OK; } static int uefirtvariable_test2(fwts_framework *fw) { int ret; fwts_log_info(fw, "The runtime service GetNextVariableName interface function test."); ret = getnextvariable_test1(fw); if (ret != FWTS_OK) return ret; fwts_passed(fw, "The runtime service GetNextVariableName interface function test passed."); fwts_log_info(fw, "Check the GetNextVariableName returned value of VariableNameSize is equal to the length of VariableName."); ret = getnextvariable_test2(fw); if (ret != FWTS_OK) return ret; fwts_passed(fw, "Check the GetNextVariableName returned value of VariableNameSize is equal to the length of VariableName passed."); fwts_log_info(fw, "Test GetNextVariableName interface returns unique variables."); ret = getnextvariable_test3(fw); if (ret != FWTS_OK) return ret; fwts_passed(fw, "Test GetNextVariableName interface returns unique variables passed."); fwts_log_info(fw, "The GetNextVariableName interface conformance tests."); ret = getnextvariable_test4(fw); if (ret != FWTS_OK) return ret; fwts_passed(fw, "The runtime service GetNextVariableName interface conformance tests passed."); return FWTS_OK; } static int uefirtvariable_test3(fwts_framework *fw) { int ret; uint64_t datasize1 = 10, datasize2 = 20; fwts_log_info(fw, "Testing SetVariable on two different GUIDs and the same variable name."); ret = setvariable_test1(fw, datasize1, datasize2, variablenametest); if (ret != FWTS_OK) return ret; fwts_passed(fw, "SetVariable on two different GUIDs and the same variable name passed."); fwts_log_info(fw, "Testing SetVariable on the same and different variable data."); ret = setvariable_test2(fw, variablenametest); if (ret != FWTS_OK) return ret; fwts_passed(fw, "SetVariable on the same and different variable data passed."); fwts_log_info(fw, "Testing SetVariable on similar variable name."); ret = setvariable_test3(fw); if (ret != FWTS_OK) return ret; fwts_passed(fw, "SetVariable on similar variable name passed."); fwts_log_info(fw, "Testing SetVariable on DataSize is 0."); ret = setvariable_test4(fw); if (ret != FWTS_OK) return ret; fwts_passed(fw, "SetVariable on DataSize is 0 passed."); fwts_log_info(fw, "Testing SetVariable on Attributes is 0."); ret = setvariable_test5(fw); if (ret != FWTS_OK) return ret; fwts_passed(fw, "SetVariable on Attributes is 0 passed."); fwts_log_info(fw, "Testing SetVariable on Invalid Attributes."); ret = setvariable_test6(fw); if (ret != FWTS_OK) return ret; fwts_passed(fw, "SetVariable on Invalid Attributes passed."); fwts_log_info(fw, "Testing SetVariable with both Authenticated Attributes set."); ret = setvariable_test7(fw); if (ret != FWTS_OK) return ret; fwts_passed(fw, "Testing SetVariable with both Authenticated Attributes set passed."); fwts_log_info(fw, "Testing SetVariable with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS Attributes."); ret = setvariable_test8(fw); if (ret != FWTS_OK) return ret; fwts_passed(fw, "Testing SetVariable with with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS Attributes passed."); return FWTS_OK; } static int uefirtvariable_test4(fwts_framework *fw) { uint64_t status; uint64_t remvarstoragesize; uint64_t maxvariablesize; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_QUERY_VARIABLE_INFO)) { fwts_skipped(fw, "Skipping test, QueryVariableInfo runtime " "service is not supported on this platform."); return FWTS_SKIP; } if (do_queryvariableinfo(&status, &remvarstoragesize, &maxvariablesize) == FWTS_ERROR) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Not support the QueryVariableInfo UEFI " "runtime interface: cannot test."); fwts_advice(fw, "Firmware also needs to check if the revision " "of system table is correct or not. Linux " "kernel returns EFI_UNSUPPORTED as well, if " "the FirmwareRevision of system table is less " "than EFI_2_00_SYSTEM_TABLE_REVISION."); return FWTS_SKIP; } else { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeQueryVariableInfo", "Failed to query variable info with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } } fwts_passed(fw, "UEFI runtime service query variable info interface test passed."); return FWTS_OK; } static int uefirtvariable_test5(fwts_framework *fw) { int ret; uint32_t multitesttime = uefi_get_variable_multiple; uint64_t datasize = 10; fwts_log_info(fw, "Testing GetVariable on getting the variable %" PRIu32 " times.", uefi_get_variable_multiple); ret = getvariable_test(fw, datasize, variablenametest, multitesttime); if (ret != FWTS_OK) return ret; fwts_passed(fw, "GetVariable on getting the variable multiple times passed."); fwts_log_info(fw, "Testing GetNextVariableName on getting the variable multiple times."); ret = getnextvariable_multitest(fw, multitesttime); if (ret != FWTS_OK) return ret; fwts_passed(fw, "GetNextVariableName on getting the next variable name multiple times passed."); return FWTS_OK; } static int uefirtvariable_test6(fwts_framework *fw) { int ret; uint32_t multitesttime = uefi_set_variable_multiple; uint64_t datasize = 10; uint8_t datadiff = 0; uint32_t i, j; uint8_t variablenamelength = 32; uint16_t variablenametest4[variablenamelength+1]; fwts_log_info(fw, "Testing SetVariable on setting the variable with the same data %" PRIu32 " times.", uefi_set_variable_multiple); for (i = 0; i < multitesttime; i++) { ret = setvariable_insertvariable(fw, attributes, datasize, variablenametest, >estguid1, datadiff); if (ret != FWTS_OK) { if (i > 0) (void)setvariable_insertvariable(fw, attributes, 0, variablenametest, >estguid1, datadiff); return ret; } } ret = setvariable_insertvariable(fw, attributes, 0, variablenametest, >estguid1, datadiff); if (ret != FWTS_OK) return ret; fwts_passed(fw, "SetVariable on setting the variable with the same data multiple times passed."); fwts_log_info(fw, "Testing SetVariable on setting the variable with different data %" PRIu32 " times.", uefi_set_variable_multiple); for (i = 0; i < multitesttime; i++) { ret = setvariable_insertvariable(fw, attributes, datasize+i, variablenametest, >estguid1, datadiff); if (ret != FWTS_OK) return ret; ret = setvariable_insertvariable(fw, attributes, 0, variablenametest, >estguid1, datadiff); if (ret != FWTS_OK) return ret; } fwts_passed(fw, "Testing SetVariable on setting the variable with different data multiple times passed."); fwts_log_info(fw, "Testing SetVariable on setting the variable with different name %" PRIu32 " times.", uefi_set_variable_multiple); for (i = 0; i < variablenamelength; i++) { variablenametest4[i] = 'a'; variablenametest4[i+1] = '\0'; ret = setvariable_insertvariable(fw, attributes, datasize, variablenametest4, >estguid1, datadiff); if (ret != FWTS_OK) return ret; ret = setvariable_insertvariable(fw, attributes, 0, variablenametest4, >estguid1, datadiff); if (ret != FWTS_OK) return ret; } fwts_passed(fw, "Testing SetVariable on setting the variable with different name multiple times passed."); fwts_log_info(fw, "Testing SetVariable on setting the variable with different name and data %" PRIu32 " times.", uefi_set_variable_multiple); /* * This combine test do a lot of setvariable, reduce variablenamelength * and multitesttime, for saving the setvariable times to avoid running * out of nvram space and getting the EFI_OUT_OF_RESOURCES */ variablenamelength /= 4; multitesttime /= 4; for (i = 0; i < variablenamelength; i++) { variablenametest4[i] = 'a'; variablenametest4[i+1] = '\0'; for (j = 0; j < multitesttime; j++) { ret = setvariable_insertvariable(fw, attributes, datasize+j, variablenametest4, >estguid1, datadiff); if (ret != FWTS_OK) return ret; ret = setvariable_insertvariable(fw, attributes, 0, variablenametest4, >estguid1, datadiff); if (ret != FWTS_OK) return ret; } } fwts_passed(fw, "Testing SetVariable on setting the variable with different name and data multiple times passed."); return FWTS_OK; } static int uefirtvariable_test7(fwts_framework *fw) { uint32_t multitesttime = uefi_query_variable_multiple; uint64_t status; uint64_t remvarstoragesize; uint64_t maxvariablesize; uint32_t i; fwts_log_info(fw, "Testing QueryVariableInfo on querying the variable %" PRIu32 " times.", uefi_query_variable_multiple); if (!(runtimeservicessupported & EFI_RT_SUPPORTED_QUERY_VARIABLE_INFO)) { fwts_skipped(fw, "Skipping test, QueryVariableInfo runtime " "service is not supported on this platform."); return FWTS_SKIP; } /* first check if the firmware support QueryVariableInfo interface */ if (do_queryvariableinfo(&status, &remvarstoragesize, &maxvariablesize) == FWTS_ERROR) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Not support the QueryVariableInfo UEFI " "runtime interface: cannot test."); fwts_advice(fw, "Firmware also needs to check if the revision " "of system table is correct or not. Linux " "kernel returns EFI_UNSUPPORTED as well, if " "the FirmwareRevision of system table is less " "than EFI_2_00_SYSTEM_TABLE_REVISION."); return FWTS_SKIP; } else { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeQueryVariableInfo", "Failed to query variable info with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } } for (i = 0; i < multitesttime; i++) { if (do_queryvariableinfo(&status, &remvarstoragesize, &maxvariablesize) == FWTS_ERROR) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeQueryVariableInfo", "Failed to query variable info with UEFI " "runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } } fwts_passed(fw, "UEFI runtime service query variable info interface stress test passed."); return FWTS_OK; } static void getvariable_test_invalid( fwts_framework *fw, struct efi_getvariable *getvariable, const char *test) { long ioret; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_VARIABLE)) { fwts_skipped(fw, "Skipping test, GetVariable runtime service " "is not supported on this platform."); return; } fwts_log_info(fw, "Testing GetVariable with %s.", test); *(getvariable->status) = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_GET_VARIABLE, getvariable); if (ioret == -1) { if (*(getvariable->status) == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, GetVariable runtime " "service is not supported on this platform."); return; } if (*(getvariable->status) == EFI_INVALID_PARAMETER) { fwts_passed(fw, "GetVariable with %s returned error " "EFI_INVALID_PARAMETER as expected.", test); return; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetVariableInvalid", "GetVariable with %s failed to get expected error return " "status, expected EFI_INVALID_PARAMETER.", test); fwts_uefi_print_status_info(fw, *(getvariable->status)); return; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetVariableInvalid", "GetVariable with %s failed to get an error return status, " "expected EFI_INVALID_PARAMETER.", test); return; } static int uefirtvariable_test8(fwts_framework *fw) { struct efi_getvariable getvariable; struct efi_setvariable setvariable; uint8_t data[16]; uint64_t status= ~0ULL; uint64_t dataindex; uint64_t getdatasize = sizeof(data); uint32_t attr; int ioret; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) { fwts_skipped(fw, "Skipping test, SetVariable runtime service " "is not supported on this platform."); return FWTS_SKIP; } for (dataindex = 0; dataindex < sizeof(data); dataindex++) data[dataindex] = (uint8_t)dataindex; setvariable.VariableName = variablenametest; setvariable.VendorGuid = >estguid1; setvariable.Attributes = attributes; setvariable.DataSize = sizeof(data); setvariable.Data = data; setvariable.status = &status; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "Skipping test, SetVariable runtime " "service is not supported on this platform."); return FWTS_OK; } if (status == EFI_OUT_OF_RESOURCES) { fwts_uefi_print_status_info(fw, status); fwts_skipped(fw, "Run out of resources for SetVariable UEFI " "runtime interface: cannot test."); fwts_advice(fw, "Firmware may reclaim some resources after " "rebooting. Reboot and test again may be " "helpful to continue the test."); return FWTS_SKIP; } fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Failed to set variable with UEFI runtime service."); return FWTS_ERROR; } getvariable.VariableName = NULL; getvariable.VendorGuid = >estguid1; getvariable.Attributes = &attr; getvariable.DataSize = &getdatasize; getvariable.Data = data; getvariable.status = &status; getvariable_test_invalid(fw, &getvariable, "NULL variable name"); getvariable.VariableName = variablenametest; getvariable.VendorGuid = NULL; getvariable.Attributes = &attr; getvariable.DataSize = &getdatasize; getvariable.Data = data; getvariable.status = &status; getvariable_test_invalid(fw, &getvariable, "NULL vendor GUID"); getvariable.VariableName = variablenametest; getvariable.VendorGuid = >estguid1; getvariable.Attributes = &attr; getvariable.DataSize = NULL; getvariable.Data = data; getvariable.status = &status; getvariable_test_invalid(fw, &getvariable, "NULL datasize"); getvariable.VariableName = variablenametest; getvariable.VendorGuid = >estguid1; getvariable.Attributes = &attr; getvariable.DataSize = &getdatasize; getvariable.Data = NULL; getvariable.status = &status; getvariable_test_invalid(fw, &getvariable, "NULL data"); getvariable.VariableName = NULL; getvariable.VendorGuid = NULL; getvariable.Attributes = &attr; getvariable.DataSize = NULL; getvariable.Data = NULL; getvariable.status = &status; getvariable_test_invalid(fw, &getvariable, "NULL variable name, vendor GUID, datasize and data"); /* delete the variable */ setvariable.DataSize = 0; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Failed to delete variable with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } return FWTS_OK; } static int uefirtvariable_test9(fwts_framework *fw) { long ioret; struct efi_getvariable getvariable; struct efi_setvariable setvariable; struct efi_getnextvariablename getnextvariablename; struct efi_queryvariableinfo queryvariableinfo; EFI_GUID guid; uint64_t status = ~0ULL; uint8_t data = 1; uint64_t datasize = 1; uint64_t variablenamesize = MAX_DATA_LENGTH; uint16_t *variablename; uint64_t remvarstoragesize; uint64_t maxvariablesize; uint64_t maxvarstoragesize; uint8_t testdata[MAX_DATA_LENGTH]; uint64_t getdatasize = sizeof(testdata); uint32_t attr; if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) { setvariable.VariableName = variablenametest; setvariable.VendorGuid = >estguid1; setvariable.Attributes = attributes; setvariable.DataSize = datasize; setvariable.Data = &data; setvariable.status = &status; ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); if (ioret == -1) { if (status == EFI_UNSUPPORTED) fwts_passed(fw, "UEFI SetVariable runtime service " "unsupported status test passed."); else { if (status == ~0ULL) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Get the SetVariable runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware."); } } else { if (status != EFI_SUCCESS) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetVariable", "Get the SetVariable runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware."); } } else fwts_skipped(fw, "SetVariable runtime service supported, skip test."); if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_VARIABLE)) { getvariable.VariableName = variablenametest; getvariable.VendorGuid = >estguid1; getvariable.Attributes = &attr; getvariable.DataSize = &getdatasize; getvariable.Data = testdata; getvariable.status = &status; ioret = ioctl(fd, EFI_RUNTIME_GET_VARIABLE, &getvariable); if (ioret == -1) { if (status == EFI_UNSUPPORTED) fwts_passed(fw, "UEFI GetVariable runtime service " "unsupported status test passed."); else { if (status == ~0ULL) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetVariable", "Get the GetVariable runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware."); } } else { if (status != EFI_SUCCESS) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetVariable", "Get the GetVariable runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware."); } } else fwts_skipped(fw, "GetVariable runtime service supported, skip test."); /* delete the variable which was set */ setvariable.DataSize = 0; status = ~0ULL; (void)ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable); variablename = malloc(sizeof(uint16_t) * variablenamesize); if (!variablename) { fwts_skipped(fw, "Unable to alloc memory for variable name"); return FWTS_SKIP; } if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) { getnextvariablename.VariableNameSize = &variablenamesize; getnextvariablename.VariableName = variablename; getnextvariablename.VendorGuid = &guid; getnextvariablename.status = &status; variablename[0] = '\0'; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTVARIABLENAME, &getnextvariablename); if (ioret == -1) { if (status == EFI_UNSUPPORTED) fwts_passed(fw, "UEFI GetNextVarName runtime service " "unsupported status test passed."); else { if (status == ~0ULL) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVarName", "Get the GetNextVarName runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware."); } } else { if (status != EFI_SUCCESS) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextVarName", "Get the GetNextVarName runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware."); } } else fwts_skipped(fw, "GetNextVarName runtime service supported, skip test."); if (!(runtimeservicessupported & EFI_RT_SUPPORTED_QUERY_VARIABLE_INFO)) { queryvariableinfo.Attributes = attributes; queryvariableinfo.MaximumVariableStorageSize = &maxvarstoragesize; queryvariableinfo.RemainingVariableStorageSize = &remvarstoragesize; queryvariableinfo.MaximumVariableSize = &maxvariablesize; queryvariableinfo.status = &status; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_QUERY_VARIABLEINFO, &queryvariableinfo); if (ioret == -1) { if (status == EFI_UNSUPPORTED) fwts_passed(fw, "UEFI QueryVarInfo runtime service " "unsupported status test passed."); else { if (status == ~0ULL) fwts_skipped(fw, "Unknown error occurred, skip test."); else fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeQueryVarInfo", "Get the QueryVarInfo runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware."); } } else { if (status != EFI_SUCCESS) fwts_skipped(fw, "Unknown error occurred, skip test."); else { fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeQueryVarInfo", "Get the QueryVarInfo runtime service unsupported " "via RuntimeServicesSupported mask. " "But actually is supported by firmware."); } } } else fwts_skipped(fw, "QueryVarInfo runtime service supported, skip test."); if (variablename) free(variablename); return FWTS_OK; } static int options_check(fwts_framework *fw) { FWTS_UNUSED(fw); if ((uefi_get_variable_multiple < 1) || (uefi_get_variable_multiple > UEFI_GET_VARIABLE_MULTIPLE_MAX)) { fprintf(stderr, "--uefi-get-var-multiple is %" PRIu32", it " "should be 1..%" PRIu32 "\n", uefi_get_variable_multiple, UEFI_GET_VARIABLE_MULTIPLE_MAX); return FWTS_ERROR; } if ((uefi_set_variable_multiple < 1) || (uefi_set_variable_multiple > UEFI_SET_VARIABLE_MULTIPLE_MAX)) { fprintf(stderr, "--uefi-set-var-multiple is %" PRIu32", it " "should be 1..%" PRIu32 "\n", uefi_set_variable_multiple, UEFI_SET_VARIABLE_MULTIPLE_MAX); return FWTS_ERROR; } if ((uefi_query_variable_multiple < 1) || (uefi_query_variable_multiple > UEFI_QUERY_VARIABLE_MULTIPLE_MAX)) { fprintf(stderr, "--uefi-query-var-multiple is %" PRIu32", it " "should be 1..%" PRIu32 "\n", uefi_query_variable_multiple, UEFI_QUERY_VARIABLE_MULTIPLE_MAX); return FWTS_ERROR; } return FWTS_OK; } static int options_handler( fwts_framework *fw, int argc, char * const argv[], int option_char, int long_index) { FWTS_UNUSED(fw); FWTS_UNUSED(argc); FWTS_UNUSED(argv); if (option_char == 0) { switch (long_index) { case 0: /* --uefi-get-var-multiple */ uefi_get_variable_multiple = strtoul(optarg, NULL, 10); break; case 1: /* --uefi-set-var-multiple */ uefi_set_variable_multiple = strtoul(optarg, NULL, 10); break; case 2: /* --uefi-query-var-multiple */ uefi_query_variable_multiple = strtoul(optarg, NULL, 10); break; } } return FWTS_OK; } static fwts_option options[] = { { "uefi-get-var-multiple", "", 1, "Run uefirtvariable get variable test multiple times." }, { "uefi-set-var-multiple", "", 1, "Run uefirtvariable set variable test multiple times." }, { "uefi-query-var-multiple", "", 1, "Run uefirtvariable query variable test multiple times." }, { NULL, NULL, 0, NULL } }; static fwts_framework_minor_test uefirtvariable_tests[] = { { uefirtvariable_test1, "Test UEFI RT service get variable interface." }, { uefirtvariable_test2, "Test UEFI RT service get next variable name interface." }, { uefirtvariable_test3, "Test UEFI RT service set variable interface." }, { uefirtvariable_test4, "Test UEFI RT service query variable info interface." }, { uefirtvariable_test5, "Test UEFI RT service variable interface stress test." }, { uefirtvariable_test6, "Test UEFI RT service set variable interface stress test." }, { uefirtvariable_test7, "Test UEFI RT service query variable info interface stress test." }, { uefirtvariable_test8, "Test UEFI RT service get variable interface, invalid parameters." }, { uefirtvariable_test9, "Test UEFI RT variable services unsupported status." }, { NULL, NULL } }; static fwts_framework_ops uefirtvariable_ops = { .description = "UEFI Runtime service variable interface tests.", .init = uefirtvariable_init, .deinit = uefirtvariable_deinit, .minor_tests = uefirtvariable_tests, .options = options, .options_handler = options_handler, .options_check = options_check, }; FWTS_REGISTER("uefirtvariable", &uefirtvariable_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UEFI | FWTS_FLAG_UNSAFE | FWTS_FLAG_ROOT_PRIV | FWTS_FLAG_XBBR) #endif src/uefi/uefivarinfo/000077500000000000000000000000001465205512700151215ustar00rootroot00000000000000src/uefi/uefivarinfo/uefivarinfo.c000066400000000000000000000153231465205512700176060ustar00rootroot00000000000000/* * Copyright (C) 2013-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "fwts.h" #if defined(FWTS_HAS_UEFI) #include #include #include #include #include #include "fwts_uefi.h" #include "fwts_efi_runtime.h" #include "fwts_efi_module.h" #define MAX_VARNAME_LENGTH 1024 static int fd; static int uefivarinfo_init(fwts_framework *fw) { if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED) return FWTS_ABORTED; return FWTS_OK; } static int uefivarinfo_deinit(fwts_framework *fw) { fwts_lib_efi_runtime_close(fd); fwts_lib_efi_runtime_unload_module(fw); return FWTS_OK; } static int do_checkvariables( fwts_framework *fw, uint64_t *usedvars, uint64_t *usedvarssize, const uint64_t maxvarsize) { uint64_t status; struct efi_getnextvariablename getnextvariablename; uint64_t variablenamesize = MAX_VARNAME_LENGTH; uint16_t variablename[MAX_VARNAME_LENGTH]; EFI_GUID vendorguid; uint8_t *data; uint64_t getdatasize; uint32_t attributestest; struct efi_getvariable getvariable; getvariable.Attributes = &attributestest; getvariable.status = &status; getnextvariablename.VariableNameSize = &variablenamesize; getnextvariablename.VariableName = variablename; getnextvariablename.VendorGuid = &vendorguid; getnextvariablename.status = &status; *usedvars = 0; *usedvarssize = 0; /* * To start the search, need to pass a Null-terminated string * in VariableName */ variablename[0] = '\0'; while (true) { long ioret; status = ~0ULL; variablenamesize = MAX_VARNAME_LENGTH; ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTVARIABLENAME, &getnextvariablename); if (ioret == -1) { /* no next variable was found*/ if (*getnextvariablename.status == EFI_NOT_FOUND) break; fwts_log_info(fw, "Failed to get next variable name with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } (*usedvars)++; data = malloc(maxvarsize); if (!data) { fwts_log_info(fw, "Failed to allocate memory for test."); return FWTS_ERROR; } getdatasize = maxvarsize; getvariable.VariableName = variablename; getvariable.VendorGuid = &vendorguid; getvariable.DataSize = &getdatasize; getvariable.Data = data; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_GET_VARIABLE, &getvariable); if (ioret == -1) { if (status != EFI_BUFFER_TOO_SMALL) { free(data); fwts_log_info(fw, "Failed to get variable with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } else if (getdatasize > maxvarsize) { free(data); fwts_log_info(fw, "Variable is larger than maximum variable length."); fwts_uefi_print_status_info(fw, status); /* * Although the variable is larger than maximum variable length, * still try to calculate the total sizes of the used variables. */ data = malloc(getdatasize); if (!data) { fwts_log_info(fw, "Failed to allocate memory for test."); return FWTS_ERROR; } getvariable.Data = data; status = ~0ULL; ioret = ioctl(fd, EFI_RUNTIME_GET_VARIABLE, &getvariable); if (ioret == -1) { fwts_log_info(fw, "Failed to get variable with variable larger than maximum variable length."); fwts_uefi_print_status_info(fw, status); free(data); return FWTS_ERROR; } } } free(data); (*usedvarssize) += getdatasize; }; return FWTS_OK; } static int do_queryvariableinfo( uint64_t *status, uint64_t *maxvarstoragesize, uint64_t *remvarstoragesize, uint64_t *maxvariablesize) { long ioret; struct efi_queryvariableinfo queryvariableinfo; queryvariableinfo.Attributes = FWTS_UEFI_VAR_NON_VOLATILE | FWTS_UEFI_VAR_BOOTSERVICE_ACCESS | FWTS_UEFI_VAR_RUNTIME_ACCESS; queryvariableinfo.MaximumVariableStorageSize = maxvarstoragesize; queryvariableinfo.RemainingVariableStorageSize = remvarstoragesize; queryvariableinfo.MaximumVariableSize = maxvariablesize; *status = ~0ULL; queryvariableinfo.status = status; ioret = ioctl(fd, EFI_RUNTIME_QUERY_VARIABLEINFO, &queryvariableinfo); if (ioret == -1) return FWTS_ERROR; return FWTS_OK; } static int uefivarinfo_test1(fwts_framework *fw) { uint64_t status; uint64_t remvarstoragesize; uint64_t maxvariablesize; uint64_t maxvarstoragesize; uint64_t usedvars; uint64_t usedvarssize; if (do_queryvariableinfo(&status, &maxvarstoragesize, &remvarstoragesize, &maxvariablesize) == FWTS_ERROR) { if (status == EFI_UNSUPPORTED) { fwts_skipped(fw, "QueryVariableInfo UEFI runtime interface not supported: cannot test."); fwts_advice(fw, "Firmware also needs to check if the revision " "of system table is correct or not. Linux " "kernel returns EFI_UNSUPPORTED as well, if " "the FirmwareRevision of system table is less " "than EFI_2_00_SYSTEM_TABLE_REVISION."); return FWTS_SKIP; } else { fwts_log_info(fw, "Failed to query variable info with UEFI runtime service."); fwts_uefi_print_status_info(fw, status); return FWTS_ERROR; } } fwts_log_info_verbatim(fw, "UEFI NVRAM storage:"); fwts_log_info_verbatim(fw, " Maximum storage: %8" PRIu64 " bytes", maxvarstoragesize); fwts_log_info_verbatim(fw, " Remaining storage: %8" PRIu64 " bytes", remvarstoragesize); fwts_log_info_verbatim(fw, " Maximum variable size: %8" PRIu64 " bytes", maxvariablesize); if (do_checkvariables(fw, &usedvars, &usedvarssize, maxvariablesize) == FWTS_OK) { fwts_log_info_verbatim(fw, "Currently used:"); fwts_log_info_verbatim(fw, " %" PRIu64 " variables, storage used: %" PRIu64 " bytes", usedvars, usedvarssize); } return FWTS_OK; } static fwts_framework_minor_test uefivarinfo_tests[] = { { uefivarinfo_test1, "UEFI variable info query." }, { NULL, NULL } }; static fwts_framework_ops uefivarinfo_ops = { .description = "UEFI variable info query.", .init = uefivarinfo_init, .deinit = uefivarinfo_deinit, .minor_tests = uefivarinfo_tests }; FWTS_REGISTER("uefivarinfo", &uefivarinfo_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_UTILS | FWTS_FLAG_UNSAFE | FWTS_FLAG_ROOT_PRIV | FWTS_FLAG_EBBR) #endif src/utilities/000077500000000000000000000000001465205512700136675ustar00rootroot00000000000000src/utilities/Makefile.am000066400000000000000000000017211465205512700157240ustar00rootroot00000000000000# # Copyright (C) 2012-2024 Canonical, Ltd. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # AM_CPPFLAGS = -Wall -Werror -Wextra -DDATAROOTDIR=\"$(datarootdir)\" \ -I$(srcdir)/../lib/include bin_PROGRAMS = kernelscan kernelscan_SOURCES = kernelscan.c ../../src/lib/src/fwts_json.c -include $(top_srcdir)/git.mk src/utilities/kernelscan.c000066400000000000000000000514311465205512700161640ustar00rootroot00000000000000/* * Copyright (C) 2012-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include #include #include #include #include #include #include #include #include #include "fwts_json.h" #include "config.h" #undef DATAROOTDIR #define DATAROOTDIR "/usr/share/" #define PARSER_OK 0 #define PARSER_COMMENT_FOUND 1 #define __JSON_ERR_PTR__ ((json_object*) -1) /* * Older versions of json-c may return an error in an * object as a ((json_object*)-1), where as newer * versions return NULL, so check for these. Sigh. */ #define JSON_ERROR(ptr) \ ( (ptr == NULL) || ((json_object*)ptr == __JSON_ERR_PTR__) ) typedef enum { COMPARE_REGEX = 'r', COMPARE_STRING = 's', COMPARE_UNKNOWN = 'u', } compare_mode; typedef struct { char *pattern; /* pattern that we compare to kernel messages */ compare_mode cm; /* 'r' regex or 's' string comparison */ regex_t compiled; /* regex from pattern */ bool compiled_ok; /* regex compiled OK */ } klog_pattern; /* * Subset of tokens that we need to intelligently parse the kernel C source */ typedef enum { TOKEN_UNKNOWN, /* No idea what token it is */ TOKEN_NUMBER, /* Integer */ TOKEN_LITERAL_STRING, /* "string" */ TOKEN_LITERAL_CHAR, /* 'x' */ TOKEN_IDENTIFIER, /* identifier */ TOKEN_PAREN_OPENED, /* ( */ TOKEN_PAREN_CLOSED, /* ) */ TOKEN_SQUARE_OPENED, /* [ */ TOKEN_SQUARE_CLOSED, /* ] */ TOKEN_CPP, /* # C pre-propressor */ TOKEN_WHITE_SPACE, /* ' ', '\t', '\r', '\n' white space */ TOKEN_LESS_THAN, /* < */ TOKEN_GREATER_THAN, /* > */ TOKEN_COMMA, /* , */ TOKEN_ARROW, /* -> */ TOKEN_TERMINAL, /* ; */ } token_type; /* * A token */ typedef struct { char *token; /* The gathered string for this token */ size_t len; /* Length of the token buffer */ char *ptr; /* Current end of the token during the lexical analysis */ token_type type; /* The type of token we think it is */ } token; /* * Quick and dirty way to push input stream back, like ungetc() */ typedef struct get_stack { int ch; /* Char pushed back */ struct get_stack *next; /* Next one in list */ } get_stack; /* * Parser context */ typedef struct { FILE *fp; /* The file descriptor we are reading */ bool skip_white_space; /* Magic skip white space flag */ get_stack *get_chars; /* Ungot chars get pushed onto this */ } parser; /* * FWTS klog patterns, loaded from a json file */ static klog_pattern *klog_patterns; static unsigned int hash_size; static char *funcs[] = { "printk", "printf", "early_printk", "vprintk_emit", "vprintk", "printk_emit", "printk_once", "printk_deferred", "printk_deferred_once", "pr_emerg", "pr_alert", "pr_crit", "pr_err", "pr_warning", "pr_warn", "pr_notice", "pr_info", "pr_cont", "pr_devel", "pr_debug", "pr_emerg_once", "pr_alert_once", "pr_crit_once", "pr_err_once", "pr_warning_once", "pr_warn_once", "pr_notice_once", "pr_info_once", "pr_cont_once", "pr_devel_once", "pr_debug_once", "dynamic_pr_debug", "dev_vprintk_emit", "dev_printk_emit", "dev_printk", "dev_emerg", "dev_alert", "dev_crit", "dev_err", "dev_warn", "dev_dbg", "dev_notice", "dev_level_once", "dev_emerg_once", "dev_alert_once", "dev_crit_once", "dev_err_once", "dev_warn_once", "dev_notice_once", "dev_info_once", "dev_dbg_once", "dev_level_ratelimited", "dev_emerg_ratelimited", "dev_alert_ratelimited", "dev_crit_ratelimited", "dev_err_ratelimited", "dev_warn_ratelimited", "dev_notice_ratelimited", "dev_info_ratelimited", "dbg", "ACPI_ERROR", "ACPI_INFO", "ACPI_WARNING", "ACPI_EXCEPTION", "ACPI_BIOS_WARNING", "ACPI_BIOS_ERROR", "ACPI_ERROR_METHOD", /* "ACPI_DEBUG_PRINT", "ACPI_DEBUG_PRINT_RAW", "DEBUG", */ NULL }; #define TABLE_SIZE (5000) static char *klog_file = DATAROOTDIR "/fwts/klog.json"; static char *hash_funcs[TABLE_SIZE]; static int get_token(parser *p, token *t); static inline unsigned int djb2a(const char *str) { register unsigned int hash = 5381; register unsigned int c; while ((c = *str++)) { /* (hash * 33) ^ c */ hash = ((hash << 5) + hash) ^ c; } return hash; } /* * Initialise the parser */ static void parser_new(parser *p, FILE *fp, bool skip_white_space) { p->get_chars = NULL; p->fp = fp; p->skip_white_space = skip_white_space; } /* * Get next character from input stream */ static int get_next(parser *p) { /* * If we have chars pushed using unget_next * then pop them off the list first */ if (p->get_chars) { get_stack *tmp = p->get_chars; int ch = tmp->ch; p->get_chars = tmp->next; free(tmp); return ch; } return fgetc(p->fp); } /* * Push character back onto the input * stream (in this case, it is a simple FIFO stack */ static void unget_next(parser *p, int ch) { get_stack *new; if ((new = calloc(1, sizeof(get_stack))) == NULL) { fprintf(stderr, "unget_next: Out of memory!\n"); exit(EXIT_FAILURE); } new->ch = ch; new->next = p->get_chars; p->get_chars = new; } /* * Create a new token, give it plenty of slop so * we don't need to keep on reallocating the token * buffer as we append more characters to it during * the lexing phase. */ static void token_new(token *t) { if ((t->token = calloc(1024, 1)) == NULL) { fprintf(stderr, "token_new: Out of memory!\n"); exit(EXIT_FAILURE); } t->len = 1024; t->ptr = t->token; t->type = TOKEN_UNKNOWN; *(t->ptr) = '\0'; } /* * Clear the token ready for re-use */ static void token_clear(token *t) { t->ptr = t->token; t->type = TOKEN_UNKNOWN; *(t->ptr) = '\0'; } /* * Free the token */ static void token_free(token *t) { free(t->token); t->token = NULL; t->ptr = NULL; t->len = 0; t->type = TOKEN_UNKNOWN; } /* * Append a single character to the token, * we may run out of space, so this occasionally * adds an extra 1K of token space for long tokens */ static void token_append(token *t, int ch) { if (t->ptr < t->token + t->len - 1) { /* Enough space, just add char */ *(t->ptr) = ch; t->ptr++; *(t->ptr) = 0; } else { /* No more space, add 1K more space */ ptrdiff_t diff = t->ptr - t->token; t->len += 1024; if ((t->token = realloc(t->token, t->len)) == NULL) { fprintf(stderr, "token_append: Out of memory!\n"); exit(EXIT_FAILURE); } t->ptr = t->token + diff; *(t->ptr) = ch; t->ptr++; *(t->ptr) = 0; } } /* * Figure out if a klog pattern is a regex or a plain text string */ static compare_mode klog_compare_mode_str_to_val(const char *str) { if (strcmp(str, "regex") == 0) return COMPARE_REGEX; else if (strcmp(str, "string") == 0) return COMPARE_STRING; else return COMPARE_UNKNOWN; } /* * Load FWTS klog messages from the json table */ static klog_pattern *klog_load(const char *table) { int n; int i; json_object *klog_objs; json_object *klog_table; klog_pattern *patterns; klog_objs = json_object_from_file(klog_file); if (JSON_ERROR(klog_objs)) { fprintf(stderr, "Cannot load klog data\n"); exit(EXIT_FAILURE); } #if JSON_HAS_GET_EX if (!json_object_object_get_ex(klog_objs, table, &klog_table)) { fprintf(stderr, "Cannot fetch klog table object from %s.\n", table); exit(EXIT_FAILURE); } #else klog_table = json_object_object_get(klog_objs, table); if (JSON_ERROR(klog_table)) { fprintf(stderr, "Cannot fetch klog table object from %s.\n", table); exit(EXIT_FAILURE); } #endif n = json_object_array_length(klog_table); /* Last entry is null to indicate end, so alloc n+1 items */ if ((patterns = calloc(n+1, sizeof(klog_pattern))) == NULL) { fprintf(stderr, "Cannot allocate pattern table.\n"); exit(EXIT_FAILURE); } /* Now fetch json objects and compile regex */ for (i = 0; i < n; i++) { const char *str; json_object *obj; #if JSON_HAS_GET_EX json_object *obj_str; #endif obj = json_object_array_get_idx(klog_table, i); if (JSON_ERROR(obj)) { fprintf(stderr, "Cannot fetch %d item from table %s.\n", i, table); exit(EXIT_FAILURE); } #if JSON_HAS_GET_EX if (!json_object_object_get_ex(obj, "compare_mode", &obj_str)) { fprintf(stderr, "Cannot fetch compare_mode object, item %d from table %s.\n", i, table); exit(EXIT_FAILURE); } str = json_object_get_string(obj_str); #else str = (char*)json_object_get_string(json_object_object_get(obj, "compare_mode")); #endif if (JSON_ERROR(str)) { fprintf(stderr, "Cannot fetch compare_mode string, item %d from table %s.\n", i, table); exit(EXIT_FAILURE); } patterns[i].cm = klog_compare_mode_str_to_val(str); #if JSON_HAS_GET_EX if (!json_object_object_get_ex(obj, "pattern", &obj_str)) { fprintf(stderr, "Cannot fetch pattern object, item %d from table %s.\n", i, table); exit(EXIT_FAILURE); } str = json_object_get_string(obj_str); #else str = (char*)json_object_get_string(json_object_object_get(obj, "pattern")); #endif if (JSON_ERROR(str)) { fprintf(stderr, "Cannot fetch pattern string, item %d from table %s.\n", i, table); exit(EXIT_FAILURE); } patterns[i].pattern = strdup(str); if (patterns[i].pattern == NULL) { fprintf(stderr, "Failed to strdup regex pattern %d from table %s.\n", i, table); exit(EXIT_FAILURE); } /* Pre-compile regular expressions to make things run a bit faster */ if (patterns[i].cm == COMPARE_REGEX) { int rc; rc = regcomp(&patterns[i].compiled, patterns[i].pattern, REG_EXTENDED); if (rc) { fprintf(stderr, "Regex %s failed to compile: %d.\n", patterns[i].pattern, rc); patterns[i].compiled_ok = false; } else { patterns[i].compiled_ok = true; } } } /* Discard the json table now we've parsed it into patterns */ json_object_put(klog_objs); return patterns; } /* * Does str match any of the patterns in the klog pattern table */ static bool klog_find(char *str, klog_pattern *patterns) { int i; for (i = 0; patterns[i].pattern; i++) { if (patterns[i].cm == COMPARE_STRING) { if (strstr(str, patterns[i].pattern)) { return true; } } else if (patterns[i].cm == COMPARE_REGEX) { if (patterns[i].compiled_ok && (!regexec(&patterns[i].compiled, str, 0, NULL, 0))) return true; } } return false; } /* * Free the klog patterns */ static void klog_free(klog_pattern *patterns) { int i; for (i = 0; patterns[i].pattern; i++) { regfree(&patterns[i].compiled); free(patterns[i].pattern); } free(patterns); } /* * Parse C comments and just throw them away */ static int skip_comments(parser *p) { int ch; int nextch; nextch = get_next(p); if (nextch == EOF) return EOF; if (nextch == '/') { do { ch = get_next(p); if (ch == EOF) return EOF; } while (ch != '\n'); return PARSER_COMMENT_FOUND; } if (nextch == '*') { for (;;) { ch = get_next(p); if (ch == EOF) return EOF; if (ch == '*') { ch = get_next(p); if (ch == EOF) return EOF; if (ch == '/') return PARSER_COMMENT_FOUND; unget_next(p, ch); } } } /* Not a comment, push back */ unget_next(p, nextch); return PARSER_OK; } /* * Parse an integer. This is fairly minimal as the * kernel doesn't have floats or doubles, so we * can just parse decimal, octal or hex values. */ static int parse_number(parser *p, token *t, int ch) { bool ishex = false; bool isoct = false; /* * Crude way to detect the kind of integer */ if (ch == '0') { int nextch1, nextch2; token_append(t, ch); nextch1 = get_next(p); if (nextch1 == EOF) { token_append(t, ch); return PARSER_OK; } if (nextch1 >= '0' && nextch1 <= '8') { /* Must be an octal value */ ch = nextch1; isoct = true; } else if (nextch1 == 'x' || nextch1 == 'X') { /* Is it hexadecimal? */ nextch2 = get_next(p); if (nextch2 == EOF) { unget_next(p, nextch1); return PARSER_OK; } if (isxdigit(nextch2)) { /* Hexadecimal */ token_append(t, nextch1); ch = nextch2; ishex = true; } else { /* Nope */ unget_next(p, nextch2); unget_next(p, nextch1); return PARSER_OK; } } else { unget_next(p, nextch1); return PARSER_OK; } } /* * OK, we now know what type of integer we * are processing, so just gather up the digits */ token_append(t, ch); for (;;) { ch = get_next(p); if (ch == EOF) { unget_next(p, ch); return PARSER_OK; } if (ishex) { if (isxdigit(ch)) { token_append(t, ch); } else { unget_next(p, ch); return PARSER_OK; } } else if (isoct) { if (ch >= '0' && ch <= '8') { token_append(t, ch); } else { unget_next(p, ch); return PARSER_OK; } } else { if (isdigit(ch)) { token_append(t, ch); } else { unget_next(p, ch); return PARSER_OK; } } } } /* * Parse identifiers */ static int parse_identifier(parser *p, token *t, int ch) { token_append(t, ch); t->type = TOKEN_IDENTIFIER; for (;;) { ch = get_next(p); if (ch == EOF) { break; } if (isalnum(ch) || ch == '_') { token_append(t, ch); } else { unget_next(p, ch); break; } } return PARSER_OK; } /* * Parse literal strings */ static int parse_literal(parser *p, token *t, int literal, token_type type) { t->type = type; token_append(t, literal); for (;;) { int ch = get_next(p); if (ch == EOF) { return PARSER_OK; } if (ch == '\\') { ch = get_next(p); if (ch == EOF) return PARSER_OK; token_append(t, '\\'); token_append(t, ch); continue; } if (ch == literal) { token_append(t, ch); return PARSER_OK; } token_append(t, ch); } return PARSER_OK; } /* * Parse operators such as +, - which can * be + or ++ forms. */ static int parse_op(parser *p, token *t, int op) { int ch; token_append(t, op); ch = get_next(p); if (ch == EOF) { return PARSER_OK; } if (ch == op) { token_append(t, op); return PARSER_OK; } unget_next(p, ch); return PARSER_OK; } /* * Parse -, --, -> */ static int parse_minus(parser *p, token *t, int op) { int ch; token_append(t, op); ch = get_next(p); if (ch == EOF) { return PARSER_OK; } if (ch == op) { token_append(t, ch); return PARSER_OK; } if (ch == '>') { token_append(t, ch); t->type = TOKEN_ARROW; return PARSER_OK; } unget_next(p, ch); return PARSER_OK; } /* * Gather a token from input stream */ static int get_token(parser *p, token *t) { int ret; for (;;) { int ch = get_next(p); switch (ch) { case EOF: return EOF; /* Skip comments */ case '/': ret = skip_comments(p); if (ret == EOF) return EOF; if (ret == PARSER_COMMENT_FOUND) continue; token_append(t, ch); return PARSER_OK; case '#': token_append(t, ch); t->type = TOKEN_CPP; return PARSER_OK; case ' ': case '\t': case '\r': case '\n': case '\\': if (p->skip_white_space) continue; else { token_append(t, ch); t->type = TOKEN_WHITE_SPACE; return PARSER_OK; } case '(': token_append(t, ch); t->type = TOKEN_PAREN_OPENED; return PARSER_OK; case ')': token_append(t, ch); t->type = TOKEN_PAREN_CLOSED; return PARSER_OK; case '[': token_append(t, ch); t->type = TOKEN_SQUARE_OPENED; return PARSER_OK; case ']': token_append(t, ch); t->type = TOKEN_SQUARE_CLOSED; return PARSER_OK; case '<': token_append(t, ch); t->type = TOKEN_LESS_THAN; return PARSER_OK; case '>': token_append(t, ch); t->type = TOKEN_GREATER_THAN; return PARSER_OK; case ',': token_append(t, ch); t->type = TOKEN_COMMA; return PARSER_OK; case ';': token_append(t, ch); t->type = TOKEN_TERMINAL; return PARSER_OK; case '{': case '}': case ':': case '~': case '?': case '*': case '%': case '!': case '.': token_append(t, ch); return PARSER_OK; case '0'...'9': return parse_number(p, t, ch); break; case 'a'...'z': case 'A'...'Z': return parse_identifier(p, t, ch); break; case '"': return parse_literal(p, t, ch, TOKEN_LITERAL_STRING); case '\'': return parse_literal(p, t, ch, TOKEN_LITERAL_CHAR); case '+': case '=': case '|': case '&': return parse_op(p, t, ch); case '-': return parse_minus(p, t, ch); } } return PARSER_OK; } /* * Literals such as "foo" and 'f' sometimes * need the quotes stripping off. */ static void literal_strip_quotes(token *t) { size_t len = strlen(t->token); t->token[len-1] = 0; memmove(t->token, t->token + 1, len - 1); } /* * Concatenate new string onto old. The old * string can be NULL or an existing string * on the heap. This returns the newly * concatenated string. */ static char *strdupcat(char *old, char *new) { size_t len = strlen(new); char *tmp; if (old == NULL) { tmp = malloc(len + 1); if (tmp == NULL) { fprintf(stderr, "strdupcat(): Out of memory.\n"); exit(EXIT_FAILURE); } strcpy(tmp, new); } else { size_t oldlen = strlen(old); tmp = realloc(old, oldlen + len + 1); if (tmp == NULL) { fprintf(stderr, "strdupcat(): Out of memory.\n"); exit(EXIT_FAILURE); } strcat(tmp, new); } return tmp; } /* * Parse a kernel message, like printk() or dev_err() */ static int parse_kernel_message(parser *p, token *t) { bool got_string = false; bool found = false; token_type prev_token_type = TOKEN_UNKNOWN; char *str = NULL; char *line = NULL; line = strdupcat(line, t->token); token_clear(t); for (;;) { int ret = get_token(p, t); if (ret == EOF) { free(line); free(str); return EOF; } /* * Hit ; so lets push out what we've parsed */ if (t->type == TOKEN_TERMINAL) { if (found) { printf("OK : %s\n", line); } else { printf("ADD: %s\n", line); } free(line); free(str); return PARSER_OK; } if (t->type == TOKEN_LITERAL_STRING) { literal_strip_quotes(t); str = strdupcat(str, t->token); if (!got_string) line = strdupcat(line, "\""); got_string = true; } else { if (got_string) line = strdupcat(line, "\""); got_string = false; if (str) { found |= klog_find(str, klog_patterns); free(str); str = NULL; } } line = strdupcat(line, t->token); if (t->type == TOKEN_IDENTIFIER && prev_token_type != TOKEN_COMMA) line = strdupcat(line, " "); if (t->type == TOKEN_COMMA) line = strdupcat(line, " "); prev_token_type = t->type; token_clear(t); } free(line); return PARSER_OK; } static bool hash_find(char *token) { unsigned int h = djb2a(token) % hash_size; char *hf = hash_funcs[h]; return (hf && !strcmp(token, hf)); } /* * Parse input looking for printk or dev_err calls */ static void parse_kernel_messages(FILE *fp) { token t; parser p; parser_new(&p, fp, true); p.fp = fp; p.skip_white_space = true; token_new(&t); while ((get_token(&p, &t)) != EOF) { if (hash_find(t.token)) parse_kernel_message(&p, &t); else token_clear(&t); } token_free(&t); } static void hash_init(void) { size_t i; /* Find optimal hash table size */ for (hash_size = 50; hash_size < TABLE_SIZE; hash_size++) { bool collision = false; memset(hash_funcs, 0, sizeof(hash_funcs)); for (i = 0; funcs[i]; i++) { unsigned int h = djb2a(funcs[i]) % hash_size; if (hash_funcs[h]) { collision = true; break; } hash_funcs[h] = funcs[i]; } if (!collision) break; } if (hash_size == TABLE_SIZE) { fprintf(stderr, "Increase TABLE_SIZE for hash table\n"); exit(EXIT_FAILURE); } } void help(void) { printf("kernelscan:\n"); printf("-h\t\thelp\n"); printf("-k file\t\tspecify klog json file\n"); } /* * Scan kernel source for printk KERN_ERR and dev_err * calls. * * Usage: * cat drivers/pnp/pnpacpi/rsparser.c | kernelscan -E | gcc -E - | kernelscan -P * * This prints out any kernel printk KERN_ERR calls * or dev_err calls and checks to see if the error can be matched by * any of the fwts klog messages. It has some intelligence, it glues * literal strings together such as "this is" "a message" into * "this is a message" before it makes the klog comparison. */ int main(int argc, char **argv) { for (;;) { int c = getopt(argc, argv, "hk:"); if (c == -1) break; switch (c) { case 'h': help(); exit(0); case 'k': klog_file = optarg; break; default: help(); exit(1); } } klog_patterns = klog_load("firmware_error_warning_patterns"); hash_init(); parse_kernel_messages(stdin); klog_free(klog_patterns); exit(EXIT_SUCCESS); } src/utilities/kernelscan.sh000077500000000000000000000116361465205512700163620ustar00rootroot00000000000000#!/bin/bash # # Copyright (C) 2010-2024 Canonical # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # CONFIGS="-DCONFIG_ACPI_HOTPLUG_CPU -DCONFIG_ACPI_PROC_EVENT \ -DCONFIG_ACPI_PROCFS_POWER -DCONFIG_ACPI_SLEEP \ -DCONFIG_CPU_FREQ -DCONFIG_DMI -DCONFIG_HIBERNATION \ -DCONFIG_HOTPLUG_CPU -DCONFIG_KEXEC -DCONFIG_NET \ -DCONFIG_PM -DCONFIG_PM_SLEEP -DCONFIG_SMP \ -DCONFIG_SUSPEND -DCONFIG_X86 -DCONFIG_X86_IO_APIC" KERNELSCAN=./kernelscan TMP=/tmp/kernelscan_$$.txt if [ $# -lt 1 ]; then echo "Usage: $0 path-to-kernel-source" exit 1 fi KLOG=/usr/share/fwts/klog.json while [[ $# -gt 0 ]] do case "$1" in -k) shift KLOG=$1 shift ;; *) src=$1 shift ;; esac done if [ "$src" == "" ]; then echo "Please provide path to linux source" exit 1 fi if [ ! -d "$src" ]; then echo "Path '$src' not found" exit 1 fi if [ ! -e "${KLOG}" ]; then echo "Path '${KLOG}' not found" exit 1 fi scan_source_file() { if [ -f $1 ]; then $KERNELSCAN -k ${KLOG} < $1 > $TMP if [ $(stat -c%s $TMP) -gt 0 ]; then echo "Source: $1" cat $TMP fi rm $TMP else echo "Source: $1 does not exist" fi } scan_source_tree() { tree=$1 echo "Scanning $tree" for I in $(find $tree -name "*.c") do scan_source_file $I done } scan_source_tree $src/drivers/acpi scan_source_tree $src/arch/x86/kernel/acpi scan_source_tree $src/arch/x86/platform/efi scan_source_tree $src/drivers/pnp/pnpbios # need to do, loads of errors # # Individual files # scan_source_file $src/arch/x86/pci/pcbios.c #scan_source_file $src/drivers/cpufreq/powernow-k8.c scan_source_file $src/arch/x86/kernel/cpu/mtrr/generic.c scan_source_file $src/arch/ia64/kernel/acpi.c scan_source_file $src/arch/x86/boot/video-bios.c scan_source_file $src/arch/x86/boot/video-mode.c scan_source_file $src/arch/x86/boot/video-vesa.c scan_source_file $src/arch/x86/boot/video-vga.c scan_source_file $src/arch/x86/boot/video.c scan_source_file $src/arch/x86/kernel/apm_32.c scan_source_file $src/arch/x86/kernel/cpu/amd.c scan_source_file $src/arch/x86/kernel/cpu/common.c scan_source_file $src/arch/x86/kernel/e820.c scan_source_file $src/arch/x86/kernel/hpet.c scan_source_file $src/arch/x86/kernel/setup.c scan_source_file $src/arch/x86/kernel/smpboot.c scan_source_file $src/kernel/time/timekeeping.c scan_source_file $src/drivers/watchdog/iTCO_vendor_support.c scan_source_file $src/drivers/watchdog/hpwdt.c scan_source_file $src/drivers/usb/host/pci-quirks.c scan_source_file $src/drivers/iommu/amd/init.c # # Various Platform drivers # some of these are commented out because they # break the CPP phase, this needs fixing # scan_source_file $src/drivers/platform/x86/acerhdf.c scan_source_file $src/drivers/platform/x86/acer-wmi.c scan_source_file $src/drivers/platform/x86/asus-laptop.c scan_source_file $src/drivers/platform/x86/asus-nb-wmi.c scan_source_file $src/drivers/platform/x86/asus-wmi.c scan_source_file $src/drivers/platform/x86/classmate-laptop.c scan_source_file $src/drivers/platform/x86/compal-laptop.c scan_source_file $src/drivers/platform/x86/dell/dell-laptop.c scan_source_file $src/drivers/platform/x86/dell/dell-wmi-aio.c scan_source_file $src/drivers/platform/x86/dell/dell-wmi-base.c scan_source_file $src/drivers/platform/x86/eeepc-laptop.c scan_source_file $src/drivers/platform/x86/eeepc-wmi.c scan_source_file $src/drivers/platform/x86/fujitsu-laptop.c scan_source_file $src/drivers/platform/x86/fujitsu-tablet.c scan_source_file $src/drivers/platform/x86/hp/hp-wmi.c scan_source_file $src/drivers/platform/x86/ideapad-laptop.c scan_source_file $src/drivers/platform/x86/msi-laptop.c scan_source_file $src/drivers/platform/x86/msi-wmi.c scan_source_file $src/drivers/platform/x86/mxm-wmi.c scan_source_file $src/drivers/platform/x86/panasonic-laptop.c scan_source_file $src/drivers/platform/x86/samsung-laptop.c scan_source_file $src/drivers/platform/x86/samsung-q10.c #scan_source_file $src/drivers/platform/x86/sony-laptop.c scan_source_file $src/drivers/platform/x86/hp/tc1100-wmi.c #scan_source_file $src/drivers/platform/x86/thinkpad_acpi.c scan_source_file $src/drivers/platform/x86/topstar-laptop.c scan_source_file $src/drivers/platform/x86/toshiba_acpi.c scan_source_file $src/drivers/platform/x86/toshiba_bluetooth.c scan_source_file $src/drivers/platform/x86/wmi.c scan_source_file $src/drivers/platform/x86/xo15-ebook.c update_version.sh000077500000000000000000000027231465205512700144570ustar00rootroot00000000000000#!/bin/bash if [ $# -ne 1 ]; then echo "You need to specify the version number" echo "The last version was" `git tag | tail -1` exit 1 fi version=$1 cat << EOF > src/lib/include/fwts_version.h /* * Copyright (C) 2010-2024 Canonical * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ EOF # Update fwts_version echo '#define FWTS_VERSION "'$version'"' >> src/lib/include/fwts_version.h echo '#define FWTS_DATE "'`date --utc "+%F %T"`'"' >> src/lib/include/fwts_version.h # Update snapcraft version oldsnap_version=$(grep "version: " snapcraft.yaml | cut -d' ' -f2) sed -i "s/version: ${oldsnap_version}/version: ${version}/" snapcraft.yaml # Update git repo git add src/lib/include/fwts_version.h git add snapcraft.yaml git commit -s -m"lib: fwts_version.h - update to $version" git tag -m'"Version '$1'"' $1